@nadicodeai/ui 0.20.0 → 0.22.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 (350) hide show
  1. package/AGENTS.md +4 -3
  2. package/README.md +14 -21
  3. package/dist/agents.d.ts +10 -0
  4. package/dist/agents.d.ts.map +1 -0
  5. package/dist/agents.js +9 -0
  6. package/dist/components/badge.d.ts +1 -1
  7. package/dist/components/brand-icons/apple.d.ts +18 -0
  8. package/dist/components/brand-icons/apple.d.ts.map +1 -0
  9. package/dist/components/brand-icons/apple.js +22 -0
  10. package/dist/components/brand-icons/brand-icon.d.ts +22 -0
  11. package/dist/components/brand-icons/brand-icon.d.ts.map +1 -0
  12. package/dist/components/brand-icons/brand-icon.js +26 -0
  13. package/dist/components/brand-icons/linux.d.ts +18 -0
  14. package/dist/components/brand-icons/linux.d.ts.map +1 -0
  15. package/dist/components/brand-icons/linux.js +25 -0
  16. package/dist/components/brand-icons/windows.d.ts +18 -0
  17. package/dist/components/brand-icons/windows.d.ts.map +1 -0
  18. package/dist/components/brand-icons/windows.js +22 -0
  19. package/dist/components/brand-icons.d.ts +5 -0
  20. package/dist/components/brand-icons.d.ts.map +1 -0
  21. package/dist/components/brand-icons.js +10 -0
  22. package/dist/components/button.d.ts +1 -1
  23. package/dist/components/button.js +1 -1
  24. package/dist/components/card-marketing.js +2 -2
  25. package/dist/components/card.d.ts +4 -3
  26. package/dist/components/card.d.ts.map +1 -1
  27. package/dist/components/card.js +12 -2
  28. package/dist/components/chart-breakdown-table.js +1 -1
  29. package/dist/components/chart-bullet-bar.d.ts +18 -2
  30. package/dist/components/chart-bullet-bar.d.ts.map +1 -1
  31. package/dist/components/chart-bullet-bar.js +62 -9
  32. package/dist/components/chart-date-range-control.d.ts +11 -1
  33. package/dist/components/chart-date-range-control.d.ts.map +1 -1
  34. package/dist/components/chart-date-range-control.js +13 -3
  35. package/dist/components/chart-entity-colors.d.ts +7 -1
  36. package/dist/components/chart-entity-colors.d.ts.map +1 -1
  37. package/dist/components/chart-entity-colors.js +7 -1
  38. package/dist/components/chart-kpi-stat.d.ts.map +1 -1
  39. package/dist/components/chart-kpi-stat.js +1 -1
  40. package/dist/components/chart-time-series.d.ts.map +1 -1
  41. package/dist/components/chart-time-series.js +62 -4
  42. package/dist/components/chart.js +2 -2
  43. package/dist/components/code-editor-mockup.js +1 -1
  44. package/dist/components/nav-bar.js +1 -1
  45. package/dist/components/radio-group.d.ts +1 -1
  46. package/dist/components/radio-group.d.ts.map +1 -1
  47. package/dist/components/radio-group.js +2 -2
  48. package/dist/components/theme-mode-switcher.d.ts +10 -3
  49. package/dist/components/theme-mode-switcher.d.ts.map +1 -1
  50. package/dist/components/theme-mode-switcher.js +14 -7
  51. package/dist/components/use-case-bento.d.ts +2 -4
  52. package/dist/components/use-case-bento.d.ts.map +1 -1
  53. package/dist/components/use-case-bento.js +2 -3
  54. package/dist/eslint/index.js +91 -0
  55. package/dist/eslint/rules/jsx-class-utility.js +231 -0
  56. package/dist/eslint/rules/no-deprecated-zod-api.js +156 -0
  57. package/dist/eslint/rules/no-design-system-src-import.js +11 -0
  58. package/dist/eslint/rules/no-invalid-token-utility.js +46 -0
  59. package/dist/eslint/rules/no-native-visible-control.js +86 -0
  60. package/dist/eslint/rules/no-raw-color-utility.js +109 -0
  61. package/dist/eslint/rules/no-raw-focus-ring-width.js +30 -0
  62. package/dist/eslint/rules/no-raw-logo-import.js +41 -0
  63. package/dist/eslint/rules/no-shadcn-appearance-override.js +191 -0
  64. package/dist/eslint/rules/no-token-category-bypass.js +53 -0
  65. package/dist/eslint/rules/no-ui-src-import.js +10 -0
  66. package/dist/eslint/rules/no-unpinned-vercel-functions-import.js +100 -0
  67. package/dist/eslint/rules/src-import-boundary.js +207 -0
  68. package/dist/hooks/index.d.ts +0 -1
  69. package/dist/hooks/index.d.ts.map +1 -1
  70. package/dist/hooks/index.js +0 -1
  71. package/dist/index.d.ts +1 -16
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +1 -16
  74. package/dist/internal/assistant-ui/attachment.d.ts +5 -0
  75. package/dist/internal/assistant-ui/attachment.d.ts.map +1 -0
  76. package/dist/internal/assistant-ui/attachment.js +93 -0
  77. package/dist/internal/assistant-ui/follow-up-suggestions.d.ts +3 -0
  78. package/dist/internal/assistant-ui/follow-up-suggestions.d.ts.map +1 -0
  79. package/dist/internal/assistant-ui/follow-up-suggestions.js +8 -0
  80. package/dist/internal/assistant-ui/markdown-text.d.ts +2 -0
  81. package/dist/internal/assistant-ui/markdown-text.d.ts.map +1 -0
  82. package/dist/internal/assistant-ui/markdown-text.js +54 -0
  83. package/dist/internal/assistant-ui/reasoning.d.ts +31 -0
  84. package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -0
  85. package/dist/internal/assistant-ui/reasoning.js +118 -0
  86. package/dist/internal/assistant-ui/thread.d.ts +26 -0
  87. package/dist/internal/assistant-ui/thread.d.ts.map +1 -0
  88. package/dist/internal/assistant-ui/thread.js +118 -0
  89. package/dist/internal/assistant-ui/tool-fallback.d.ts +10 -0
  90. package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -0
  91. package/dist/internal/assistant-ui/tool-fallback.js +163 -0
  92. package/dist/internal/assistant-ui/tool-group.d.ts +18 -0
  93. package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -0
  94. package/dist/internal/assistant-ui/tool-group.js +44 -0
  95. package/dist/internal/assistant-ui/tooltip-icon-button.d.ts +8 -0
  96. package/dist/internal/assistant-ui/tooltip-icon-button.d.ts.map +1 -0
  97. package/dist/internal/assistant-ui/tooltip-icon-button.js +10 -0
  98. package/dist/styles/globals.css +3 -209
  99. package/docs/agents/nadicodeai-ui.md +4 -6
  100. package/docs/component-classification.md +1 -1
  101. package/docs/consuming-cross-repo.md +32 -3
  102. package/docs/contract.md +16 -6
  103. package/docs/migration/base-ui-migration.md +0 -11
  104. package/docs/product-compositions.md +1 -1
  105. package/llms.txt +5 -6
  106. package/package.json +17 -29
  107. package/skills/nadicodeai-ui/SKILL.md +5 -7
  108. package/dist/ai-elements.d.ts +0 -49
  109. package/dist/ai-elements.d.ts.map +0 -1
  110. package/dist/ai-elements.js +0 -48
  111. package/dist/components/agent-avatar.d.ts +0 -7
  112. package/dist/components/agent-avatar.d.ts.map +0 -1
  113. package/dist/components/agent-avatar.js +0 -6
  114. package/dist/components/agent-chat.d.ts +0 -20
  115. package/dist/components/agent-chat.d.ts.map +0 -1
  116. package/dist/components/agent-chat.js +0 -10
  117. package/dist/components/agent-composer.d.ts +0 -56
  118. package/dist/components/agent-composer.d.ts.map +0 -1
  119. package/dist/components/agent-composer.js +0 -56
  120. package/dist/components/agent-message.d.ts +0 -117
  121. package/dist/components/agent-message.d.ts.map +0 -1
  122. package/dist/components/agent-message.js +0 -99
  123. package/dist/components/agent-thread.d.ts +0 -26
  124. package/dist/components/agent-thread.d.ts.map +0 -1
  125. package/dist/components/agent-thread.js +0 -63
  126. package/dist/components/agent-tool-approval.d.ts +0 -27
  127. package/dist/components/agent-tool-approval.d.ts.map +0 -1
  128. package/dist/components/agent-tool-approval.js +0 -43
  129. package/dist/components/ai-elements/agent.d.ts +0 -27
  130. package/dist/components/ai-elements/agent.d.ts.map +0 -1
  131. package/dist/components/ai-elements/agent.js +0 -25
  132. package/dist/components/ai-elements/artifact.d.ts +0 -24
  133. package/dist/components/ai-elements/artifact.d.ts.map +0 -1
  134. package/dist/components/ai-elements/artifact.js +0 -20
  135. package/dist/components/ai-elements/attachments.d.ts +0 -55
  136. package/dist/components/ai-elements/attachments.d.ts.map +0 -1
  137. package/dist/components/ai-elements/attachments.js +0 -125
  138. package/dist/components/ai-elements/audio-player.d.ts +0 -30
  139. package/dist/components/ai-elements/audio-player.d.ts.map +0 -1
  140. package/dist/components/ai-elements/audio-player.js +0 -41
  141. package/dist/components/ai-elements/canvas.d.ts +0 -8
  142. package/dist/components/ai-elements/canvas.d.ts.map +0 -1
  143. package/dist/components/ai-elements/canvas.js +0 -5
  144. package/dist/components/ai-elements/chain-of-thought.d.ts +0 -30
  145. package/dist/components/ai-elements/chain-of-thought.d.ts.map +0 -1
  146. package/dist/components/ai-elements/chain-of-thought.js +0 -49
  147. package/dist/components/ai-elements/checkpoint.d.ts +0 -12
  148. package/dist/components/ai-elements/checkpoint.d.ts.map +0 -1
  149. package/dist/components/ai-elements/checkpoint.js +0 -10
  150. package/dist/components/ai-elements/code-block.d.ts +0 -53
  151. package/dist/components/ai-elements/code-block.d.ts.map +0 -1
  152. package/dist/components/ai-elements/code-block.js +0 -239
  153. package/dist/components/ai-elements/commit.d.ts +0 -65
  154. package/dist/components/ai-elements/commit.d.ts.map +0 -1
  155. package/dist/components/ai-elements/commit.js +0 -83
  156. package/dist/components/ai-elements/confirmation.d.ts +0 -50
  157. package/dist/components/ai-elements/confirmation.d.ts.map +0 -1
  158. package/dist/components/ai-elements/confirmation.js +0 -57
  159. package/dist/components/ai-elements/connection.d.ts +0 -6
  160. package/dist/components/ai-elements/connection.d.ts.map +0 -1
  161. package/dist/components/ai-elements/connection.js +0 -10
  162. package/dist/components/ai-elements/context.d.ts +0 -33
  163. package/dist/components/ai-elements/context.d.ts.map +0 -1
  164. package/dist/components/ai-elements/context.js +0 -147
  165. package/dist/components/ai-elements/controls.d.ts +0 -5
  166. package/dist/components/ai-elements/controls.d.ts.map +0 -1
  167. package/dist/components/ai-elements/controls.js +0 -5
  168. package/dist/components/ai-elements/conversation.d.ts +0 -24
  169. package/dist/components/ai-elements/conversation.d.ts.map +0 -1
  170. package/dist/components/ai-elements/conversation.js +0 -41
  171. package/dist/components/ai-elements/edge.d.ts +0 -6
  172. package/dist/components/ai-elements/edge.d.ts.map +0 -1
  173. package/dist/components/ai-elements/edge.js +0 -88
  174. package/dist/components/ai-elements/environment-variables.d.ts +0 -39
  175. package/dist/components/ai-elements/environment-variables.d.ts.map +0 -1
  176. package/dist/components/ai-elements/environment-variables.js +0 -60
  177. package/dist/components/ai-elements/file-tree.d.ts +0 -27
  178. package/dist/components/ai-elements/file-tree.d.ts.map +0 -1
  179. package/dist/components/ai-elements/file-tree.js +0 -73
  180. package/dist/components/ai-elements/image.d.ts +0 -7
  181. package/dist/components/ai-elements/image.d.ts.map +0 -1
  182. package/dist/components/ai-elements/image.js +0 -3
  183. package/dist/components/ai-elements/inline-citation.d.ts +0 -39
  184. package/dist/components/ai-elements/inline-citation.d.ts.map +0 -1
  185. package/dist/components/ai-elements/inline-citation.js +0 -86
  186. package/dist/components/ai-elements/jsx-preview.d.ts +0 -30
  187. package/dist/components/ai-elements/jsx-preview.d.ts.map +0 -1
  188. package/dist/components/ai-elements/jsx-preview.js +0 -159
  189. package/dist/components/ai-elements/message.d.ts +0 -38
  190. package/dist/components/ai-elements/message.d.ts.map +0 -1
  191. package/dist/components/ai-elements/message.js +0 -91
  192. package/dist/components/ai-elements/mic-selector.d.ts +0 -46
  193. package/dist/components/ai-elements/mic-selector.d.ts.map +0 -1
  194. package/dist/components/ai-elements/mic-selector.js +0 -180
  195. package/dist/components/ai-elements/model-selector.d.ts +0 -36
  196. package/dist/components/ai-elements/model-selector.d.ts.map +0 -1
  197. package/dist/components/ai-elements/model-selector.js +0 -18
  198. package/dist/components/ai-elements/node.d.ts +0 -22
  199. package/dist/components/ai-elements/node.d.ts.map +0 -1
  200. package/dist/components/ai-elements/node.js +0 -12
  201. package/dist/components/ai-elements/open-in-chat.d.ts +0 -27
  202. package/dist/components/ai-elements/open-in-chat.d.ts.map +0 -1
  203. package/dist/components/ai-elements/open-in-chat.js +0 -81
  204. package/dist/components/ai-elements/package-info.d.ts +0 -30
  205. package/dist/components/ai-elements/package-info.d.ts.map +0 -1
  206. package/dist/components/ai-elements/package-info.js +0 -50
  207. package/dist/components/ai-elements/panel.d.ts +0 -6
  208. package/dist/components/ai-elements/panel.d.ts.map +0 -1
  209. package/dist/components/ai-elements/panel.js +0 -5
  210. package/dist/components/ai-elements/persona.d.ts +0 -49
  211. package/dist/components/ai-elements/persona.d.ts.map +0 -1
  212. package/dist/components/ai-elements/persona.js +0 -175
  213. package/dist/components/ai-elements/plan.d.ts +0 -27
  214. package/dist/components/ai-elements/plan.d.ts.map +0 -1
  215. package/dist/components/ai-elements/plan.js +0 -34
  216. package/dist/components/ai-elements/prompt-input.d.ts +0 -149
  217. package/dist/components/ai-elements/prompt-input.d.ts.map +0 -1
  218. package/dist/components/ai-elements/prompt-input.js +0 -704
  219. package/dist/components/ai-elements/queue.d.ts +0 -62
  220. package/dist/components/ai-elements/queue.d.ts.map +0 -1
  221. package/dist/components/ai-elements/queue.js +0 -24
  222. package/dist/components/ai-elements/reasoning.d.ts +0 -27
  223. package/dist/components/ai-elements/reasoning.d.ts.map +0 -1
  224. package/dist/components/ai-elements/reasoning.js +0 -92
  225. package/dist/components/ai-elements/sandbox.d.ts +0 -25
  226. package/dist/components/ai-elements/sandbox.d.ts.map +0 -1
  227. package/dist/components/ai-elements/sandbox.js +0 -15
  228. package/dist/components/ai-elements/schema-display.d.ts +0 -56
  229. package/dist/components/ai-elements/schema-display.d.ts.map +0 -1
  230. package/dist/components/ai-elements/schema-display.js +0 -90
  231. package/dist/components/ai-elements/shimmer.d.ts +0 -10
  232. package/dist/components/ai-elements/shimmer.d.ts.map +0 -1
  233. package/dist/components/ai-elements/shimmer.js +0 -11
  234. package/dist/components/ai-elements/snippet.d.ts +0 -19
  235. package/dist/components/ai-elements/snippet.d.ts.map +0 -1
  236. package/dist/components/ai-elements/snippet.js +0 -32
  237. package/dist/components/ai-elements/sources.d.ts +0 -13
  238. package/dist/components/ai-elements/sources.d.ts.map +0 -1
  239. package/dist/components/ai-elements/sources.js +0 -9
  240. package/dist/components/ai-elements/speech-input.d.ts +0 -55
  241. package/dist/components/ai-elements/speech-input.d.ts.map +0 -1
  242. package/dist/components/ai-elements/speech-input.js +0 -187
  243. package/dist/components/ai-elements/stack-trace.d.ts +0 -38
  244. package/dist/components/ai-elements/stack-trace.d.ts.map +0 -1
  245. package/dist/components/ai-elements/stack-trace.js +0 -181
  246. package/dist/components/ai-elements/suggestion.d.ts +0 -11
  247. package/dist/components/ai-elements/suggestion.d.ts.map +0 -1
  248. package/dist/components/ai-elements/suggestion.js +0 -13
  249. package/dist/components/ai-elements/task.d.ts +0 -15
  250. package/dist/components/ai-elements/task.d.ts.map +0 -1
  251. package/dist/components/ai-elements/task.js +0 -10
  252. package/dist/components/ai-elements/terminal.d.ts +0 -28
  253. package/dist/components/ai-elements/terminal.d.ts.map +0 -1
  254. package/dist/components/ai-elements/terminal.js +0 -55
  255. package/dist/components/ai-elements/test-results.d.ts +0 -59
  256. package/dist/components/ai-elements/test-results.d.ts.map +0 -1
  257. package/dist/components/ai-elements/test-results.js +0 -98
  258. package/dist/components/ai-elements/tool.d.ts +0 -32
  259. package/dist/components/ai-elements/tool.d.ts.map +0 -1
  260. package/dist/components/ai-elements/tool.js +0 -49
  261. package/dist/components/ai-elements/toolbar.d.ts +0 -6
  262. package/dist/components/ai-elements/toolbar.d.ts.map +0 -1
  263. package/dist/components/ai-elements/toolbar.js +0 -5
  264. package/dist/components/ai-elements/transcription.d.ts +0 -17
  265. package/dist/components/ai-elements/transcription.d.ts.map +0 -1
  266. package/dist/components/ai-elements/transcription.js +0 -36
  267. package/dist/components/ai-elements/voice-selector.d.ts +0 -65
  268. package/dist/components/ai-elements/voice-selector.d.ts.map +0 -1
  269. package/dist/components/ai-elements/voice-selector.js +0 -224
  270. package/dist/components/ai-elements/web-preview.d.ts +0 -35
  271. package/dist/components/ai-elements/web-preview.d.ts.map +0 -1
  272. package/dist/components/ai-elements/web-preview.js +0 -66
  273. package/dist/components/artifact-panel.d.ts +0 -130
  274. package/dist/components/artifact-panel.d.ts.map +0 -1
  275. package/dist/components/artifact-panel.js +0 -180
  276. package/dist/components/attachment.d.ts +0 -24
  277. package/dist/components/attachment.d.ts.map +0 -1
  278. package/dist/components/attachment.js +0 -68
  279. package/dist/components/bubble.d.ts +0 -17
  280. package/dist/components/bubble.d.ts.map +0 -1
  281. package/dist/components/bubble.js +0 -59
  282. package/dist/components/demo-surface.d.ts +0 -34
  283. package/dist/components/demo-surface.d.ts.map +0 -1
  284. package/dist/components/demo-surface.js +0 -21
  285. package/dist/components/files-preview.d.ts +0 -36
  286. package/dist/components/files-preview.d.ts.map +0 -1
  287. package/dist/components/files-preview.js +0 -85
  288. package/dist/components/marker.d.ts +0 -11
  289. package/dist/components/marker.d.ts.map +0 -1
  290. package/dist/components/marker.js +0 -34
  291. package/dist/components/message-scroller.d.ts +0 -17
  292. package/dist/components/message-scroller.d.ts.map +0 -1
  293. package/dist/components/message-scroller.js +0 -29
  294. package/dist/components/message.d.ts +0 -11
  295. package/dist/components/message.d.ts.map +0 -1
  296. package/dist/components/message.js +0 -21
  297. package/dist/components/state-notice.d.ts +0 -13
  298. package/dist/components/state-notice.d.ts.map +0 -1
  299. package/dist/components/state-notice.js +0 -8
  300. package/dist/components/watch-it-work-band.d.ts +0 -12
  301. package/dist/components/watch-it-work-band.d.ts.map +0 -1
  302. package/dist/components/watch-it-work-band.js +0 -8
  303. package/dist/hooks/use-controllable-state.d.ts +0 -9
  304. package/dist/hooks/use-controllable-state.d.ts.map +0 -1
  305. package/dist/hooks/use-controllable-state.js +0 -23
  306. package/dist/lib/agent-attachment.d.ts +0 -11
  307. package/dist/lib/agent-attachment.d.ts.map +0 -1
  308. package/dist/lib/agent-attachment.js +0 -19
  309. package/dist/lib/agent-contracts.d.ts +0 -132
  310. package/dist/lib/agent-contracts.d.ts.map +0 -1
  311. package/dist/lib/agent-contracts.js +0 -6
  312. package/dist/lib/agent-state.d.ts +0 -22
  313. package/dist/lib/agent-state.d.ts.map +0 -1
  314. package/dist/lib/agent-state.js +0 -96
  315. package/dist/lib/agent-work-state.d.ts +0 -36
  316. package/dist/lib/agent-work-state.d.ts.map +0 -1
  317. package/dist/lib/agent-work-state.js +0 -36
  318. package/dist/lib/message-scroller-primitive/components.d.ts +0 -17
  319. package/dist/lib/message-scroller-primitive/components.d.ts.map +0 -1
  320. package/dist/lib/message-scroller-primitive/components.js +0 -204
  321. package/dist/lib/message-scroller-primitive/geometry.d.ts +0 -51
  322. package/dist/lib/message-scroller-primitive/geometry.d.ts.map +0 -1
  323. package/dist/lib/message-scroller-primitive/geometry.js +0 -199
  324. package/dist/lib/message-scroller-primitive/index.d.ts +0 -12
  325. package/dist/lib/message-scroller-primitive/index.d.ts.map +0 -1
  326. package/dist/lib/message-scroller-primitive/index.js +0 -12
  327. package/dist/lib/message-scroller-primitive/stores.d.ts +0 -6
  328. package/dist/lib/message-scroller-primitive/stores.d.ts.map +0 -1
  329. package/dist/lib/message-scroller-primitive/stores.js +0 -53
  330. package/dist/lib/message-scroller-primitive/types.d.ts +0 -88
  331. package/dist/lib/message-scroller-primitive/types.d.ts.map +0 -1
  332. package/dist/lib/message-scroller-primitive/types.js +0 -40
  333. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts +0 -19
  334. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts.map +0 -1
  335. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.js +0 -188
  336. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts +0 -7
  337. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts.map +0 -1
  338. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.js +0 -506
  339. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts +0 -49
  340. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts.map +0 -1
  341. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.js +0 -90
  342. package/dist/lib/message-scroller-primitive/use-render.d.ts +0 -22
  343. package/dist/lib/message-scroller-primitive/use-render.d.ts.map +0 -1
  344. package/dist/lib/message-scroller-primitive/use-render.js +0 -113
  345. package/dist/lib/message-scroller-primitive/utils.d.ts +0 -4
  346. package/dist/lib/message-scroller-primitive/utils.d.ts.map +0 -1
  347. package/dist/lib/message-scroller-primitive/utils.js +0 -9
  348. package/docs/agent-work-surfaces.md +0 -132
  349. package/docs/migration/ai-elements-vendoring.md +0 -29
  350. package/docs/terminal-tui-semantics.md +0 -172
@@ -15,9 +15,10 @@
15
15
 
16
16
  @import "tailwindcss";
17
17
  @import "tw-animate-css";
18
+ @import "tw-shimmer";
19
+ @import "@assistant-ui/react-markdown/styles/dot.css";
18
20
  @import "./shadcn.tailwind.css";
19
21
  @import "@nadicodeai/design-system/css";
20
- @import "@xyflow/react/dist/style.css" layer(components);
21
22
 
22
23
  /*
23
24
  * Tailwind v4's dark: variant defaults to an OS media query. Match shadcn's
@@ -55,216 +56,9 @@
55
56
  /*
56
57
  * The canonical design-system module owns raw --nc-* mode aliases, semantic
57
58
  * roles, and their Tailwind utility bridge for both root and scoped `.dark`
58
- * surfaces. This adapter owns only narrow technology integration such as ANSI
59
- * class translation below.
59
+ * surfaces.
60
60
  */
61
61
 
62
- /*
63
- * The design-system CSS components (.nc-chat-thread, .nc-chat-bubble-*,
64
- * .nc-artifact-preview, .nc-approval-gate, .nc-tool-call-trace,
65
- * .nc-usage-meter, .nc-run-timeline, .nc-memory-item, .nc-handoff-banner, …)
66
- * paint from the raw --nc-canvas/ink/body/line/canvas-soft/muted/warning
67
- * palette. The generated mode layer remaps that surface palette alongside every
68
- * other authored dark pair, so nc-* CSS components need no local mode selectors.
69
- */
70
-
71
- /*
72
- * ansi-to-react emits stable classes when Terminal enables `useClasses`.
73
- * Terminal is an intentionally fixed-dark technology surface, so this adapter
74
- * maps those protocol classes directly to canonical dark design tokens. It does
75
- * not declare a parallel product-token hierarchy.
76
- */
77
- [data-slot="terminal"] .ansi-black-fg {
78
- color: var(--nc-dark-muted);
79
- }
80
-
81
- [data-slot="terminal"] .ansi-red-fg {
82
- color: var(--nc-dark-error);
83
- }
84
-
85
- [data-slot="terminal"] .ansi-green-fg {
86
- color: var(--nc-dark-success);
87
- }
88
-
89
- [data-slot="terminal"] .ansi-yellow-fg {
90
- color: var(--nc-dark-warning);
91
- }
92
-
93
- [data-slot="terminal"] .ansi-blue-fg {
94
- color: var(--nc-dark-info);
95
- }
96
-
97
- [data-slot="terminal"] .ansi-magenta-fg {
98
- color: var(--nc-dark-chart-6);
99
- }
100
-
101
- [data-slot="terminal"] .ansi-cyan-fg {
102
- color: var(--nc-dark-cyan);
103
- }
104
-
105
- [data-slot="terminal"] .ansi-white-fg {
106
- color: var(--nc-dark-body);
107
- }
108
-
109
- [data-slot="terminal"] .ansi-bright-black-fg {
110
- color: var(--nc-dark-body);
111
- }
112
-
113
- [data-slot="terminal"] .ansi-bright-red-fg {
114
- color: var(--nc-dark-error-deep);
115
- }
116
-
117
- [data-slot="terminal"] .ansi-bright-green-fg {
118
- color: var(--nc-dark-link-deep);
119
- }
120
-
121
- [data-slot="terminal"] .ansi-bright-yellow-fg {
122
- color: var(--nc-dark-warning-deep);
123
- }
124
-
125
- [data-slot="terminal"] .ansi-bright-blue-fg {
126
- color: var(--nc-dark-info-deep);
127
- }
128
-
129
- [data-slot="terminal"] .ansi-bright-magenta-fg {
130
- color: var(--nc-dark-chart-seq-3);
131
- }
132
-
133
- [data-slot="terminal"] .ansi-bright-cyan-fg {
134
- color: var(--nc-dark-cyan-soft);
135
- }
136
-
137
- [data-slot="terminal"] .ansi-bright-white-fg {
138
- color: var(--nc-dark-ink);
139
- }
140
-
141
- [data-slot="terminal"] .ansi-black-bg {
142
- background-color: var(--nc-dark-canvas);
143
- }
144
-
145
- [data-slot="terminal"] .ansi-red-bg {
146
- background-color: var(--nc-dark-error);
147
- }
148
-
149
- [data-slot="terminal"] .ansi-green-bg {
150
- background-color: var(--nc-dark-success);
151
- }
152
-
153
- [data-slot="terminal"] .ansi-yellow-bg {
154
- background-color: var(--nc-dark-warning);
155
- }
156
-
157
- [data-slot="terminal"] .ansi-blue-bg {
158
- background-color: var(--nc-dark-info);
159
- }
160
-
161
- [data-slot="terminal"] .ansi-magenta-bg {
162
- background-color: var(--nc-dark-chart-6);
163
- }
164
-
165
- [data-slot="terminal"] .ansi-cyan-bg {
166
- background-color: var(--nc-dark-cyan);
167
- }
168
-
169
- [data-slot="terminal"] .ansi-white-bg {
170
- background-color: var(--nc-dark-body);
171
- }
172
-
173
- [data-slot="terminal"] .ansi-bright-black-bg {
174
- background-color: var(--nc-dark-body);
175
- }
176
-
177
- [data-slot="terminal"] .ansi-bright-red-bg {
178
- background-color: var(--nc-dark-error-deep);
179
- }
180
-
181
- [data-slot="terminal"] .ansi-bright-green-bg {
182
- background-color: var(--nc-dark-link-deep);
183
- }
184
-
185
- [data-slot="terminal"] .ansi-bright-yellow-bg {
186
- background-color: var(--nc-dark-warning-deep);
187
- }
188
-
189
- [data-slot="terminal"] .ansi-bright-blue-bg {
190
- background-color: var(--nc-dark-info-deep);
191
- }
192
-
193
- [data-slot="terminal"] .ansi-bright-magenta-bg {
194
- background-color: var(--nc-dark-chart-seq-3);
195
- }
196
-
197
- [data-slot="terminal"] .ansi-bright-cyan-bg {
198
- background-color: var(--nc-dark-cyan-soft);
199
- }
200
-
201
- [data-slot="terminal"] .ansi-bright-white-bg {
202
- background-color: var(--nc-dark-ink);
203
- }
204
-
205
- [data-slot="terminal"] .ansi-black-bg:not([class*="-fg"]) {
206
- color: var(--nc-dark-ink);
207
- }
208
-
209
- [data-slot="terminal"]
210
- :is(
211
- .ansi-red-bg,
212
- .ansi-green-bg,
213
- .ansi-yellow-bg,
214
- .ansi-blue-bg,
215
- .ansi-magenta-bg,
216
- .ansi-cyan-bg,
217
- .ansi-white-bg,
218
- .ansi-bright-black-bg,
219
- .ansi-bright-red-bg,
220
- .ansi-bright-green-bg,
221
- .ansi-bright-yellow-bg,
222
- .ansi-bright-blue-bg,
223
- .ansi-bright-magenta-bg,
224
- .ansi-bright-cyan-bg,
225
- .ansi-bright-white-bg
226
- ):not([class*="-fg"]) {
227
- color: var(--nc-dark-canvas);
228
- }
229
-
230
- [data-nc-code-block-body] {
231
- background-color: var(--shiki-code-block-light-bg, var(--background));
232
- color: var(--shiki-code-block-light-fg, var(--foreground));
233
- }
234
-
235
- .dark [data-nc-code-block-body] {
236
- background-color: var(
237
- --shiki-code-block-dark-bg,
238
- var(--shiki-code-block-light-bg, var(--background))
239
- );
240
- color: var(--shiki-code-block-dark-fg, var(--shiki-code-block-light-fg, var(--foreground)));
241
- }
242
-
243
- [data-nc-code-token] {
244
- background-color: var(--shiki-code-token-light-bg, transparent);
245
- color: var(--shiki-code-token-light-color, var(--foreground));
246
- font-style: var(--shiki-code-token-light-font-style, normal);
247
- font-weight: var(--shiki-code-token-light-font-weight, normal);
248
- text-decoration: var(--shiki-code-token-light-text-decoration, none);
249
- }
250
-
251
- .dark [data-nc-code-token] {
252
- background-color: var(--shiki-code-token-dark-bg, var(--shiki-code-token-light-bg, transparent));
253
- color: var(--shiki-code-token-dark-color, var(--shiki-code-token-light-color, var(--foreground)));
254
- font-style: var(
255
- --shiki-code-token-dark-font-style,
256
- var(--shiki-code-token-light-font-style, normal)
257
- );
258
- font-weight: var(
259
- --shiki-code-token-dark-font-weight,
260
- var(--shiki-code-token-light-font-weight, normal)
261
- );
262
- text-decoration: var(
263
- --shiki-code-token-dark-text-decoration,
264
- var(--shiki-code-token-light-text-decoration, none)
265
- );
266
- }
267
-
268
62
  .toaster [data-sonner-toast][data-styled="true"] [data-description] {
269
63
  color: var(--muted-foreground);
270
64
  }
@@ -10,22 +10,20 @@ authoritative interfaces without carrying a second copy of them.
10
10
  - Package/consumer boundary, styling invariants, admission rules, and
11
11
  accessibility: [`../contract.md`](../contract.md).
12
12
  - Current component modules and named exports: `src/components/`,
13
- `src/index.ts`, `src/ai-elements.ts`, and `package.json` in a source checkout;
13
+ `src/index.ts` and `package.json` in a source checkout;
14
14
  package exports and declarations in an installed package.
15
- - Import examples, form-stack guidance, `SeamGrid` usage, and live shadcn/AI
16
- Elements discovery commands: [`../../README.md`](../../README.md).
15
+ - Import examples, form-stack guidance, `SeamGrid` usage, and live shadcn and
16
+ assistant-ui discovery commands: [`../../README.md`](../../README.md).
17
17
 
18
18
  Do not maintain component, chart, form, section, export, or registry inventories
19
19
  in agent prose. Follow the owning source or document above.
20
20
 
21
21
  ## Product work
22
22
 
23
- - Agent work surfaces: [`../agent-work-surfaces.md`](../agent-work-surfaces.md).
23
+ - Agent UI ownership: [`../contract.md`](../contract.md).
24
24
  - Product compositions and sections:
25
25
  [`../product-compositions.md`](../product-compositions.md) and
26
26
  [`../product-sections.md`](../product-sections.md).
27
- - Terminal and TUI semantics:
28
- [`../terminal-tui-semantics.md`](../terminal-tui-semantics.md).
29
27
 
30
28
  Routes, persistence, authentication, server state, runtime adapters,
31
29
  permissions, analytics, and product-specific copy stay in the consuming app.
@@ -2,7 +2,7 @@
2
2
 
3
3
  This file records the ownership class for U4 product compositions. The package may render standard product UI, but consuming apps own app behavior, data, persistence, and product-specific promises.
4
4
 
5
- If first-party shadcn or AI Elements registry source already covers the same
5
+ If first-party shadcn or assistant-ui registry source already covers the same
6
6
  generic product UI, do not add a parallel NadicodeAI package API. Use the
7
7
  registry item in the consuming app and adapt it there with app-owned data,
8
8
  copy, and behavior.
@@ -17,10 +17,16 @@ npm install @nadicodeai/ui@<exact-version> react@^19 react-dom@^19 tailwindcss@^
17
17
  dependency exactly. A React consumer does not declare that dependency directly
18
18
  just to use UI components or the UI stylesheet.
19
19
 
20
+ The package installs its Agent UI implementation exactly. Consumers import
21
+ presentation, runtime primitives, providers, hooks, and types through
22
+ `@nadicodeai/ui/agents`; they do not install or import assistant-ui packages
23
+ directly. A protocol-specific runtime adapter remains a direct consumer
24
+ dependency because the application owns transport and message state.
25
+
20
26
  Declare `@nadicodeai/design-system` directly only when the app intentionally
21
- uses a separate public design-system API, such as a font/logo asset, the static
22
- CSS interface for a separate non-React surface, or the optional agent-chat
23
- enhancer. Pin that direct dependency to the version required by the installed
27
+ uses a separate public design-system API, such as a font/logo asset or the
28
+ static CSS interface for a separate non-React surface. Pin that direct
29
+ dependency to the version required by the installed
24
30
  UI release:
25
31
 
26
32
  ```bash
@@ -51,6 +57,29 @@ winner. Import files under `@nadicodeai/design-system/assets/fonts/*` only when
51
57
  the consumer wants the faces without the CSS module; that is one of the
52
58
  intentional direct-API cases described above.
53
59
 
60
+ ## Strict ESLint interface
61
+
62
+ The package exports the same design-system rules used by this repository. Add
63
+ the flat config after the consumer's framework and TypeScript configs:
64
+
65
+ ```js
66
+ import nadicodeai from "@nadicodeai/ui/eslint";
67
+
68
+ export default [
69
+ // Framework, parser, and TypeScript configs first.
70
+ ...nadicodeai.configs["flat/strict"],
71
+ ];
72
+ ```
73
+
74
+ Every rule in this config is an error. The config rejects generated `nc-*`
75
+ utilities that do not exist in the installed design-system release, arbitrary
76
+ radius values that exactly duplicate a generated token, source deep imports,
77
+ raw design values, native visible controls, and appearance overrides on shared
78
+ UI primitives. An arbitrary radius remains valid when no generated radius has
79
+ the same value. Consumers may compose domain-specific components from the
80
+ public UI package; the rules govern package boundaries and design values, not
81
+ the shape of a consumer's JSX tree.
82
+
54
83
  ## NadicodeAI logo
55
84
 
56
85
  React surfaces that need both the mark and readable company name use the
package/docs/contract.md CHANGED
@@ -12,20 +12,21 @@ The normative invariants for the `@nadicodeai/ui` package: what may live here, h
12
12
  ## Package Shape Invariants
13
13
 
14
14
  - **Source-authored, built package.** Components are authored as shadcn-style source in `src/`, then emitted to `dist/` for consumption by other apps. Package exports must point at built JS, declarations, and CSS, never raw `src/*.tsx`, and `npm pack --dry-run` must include only intentional consumer artifacts.
15
- - **Package surface is source-backed.** `src/components/` is intentionally flat shadcn-style source. Do not document folders or package namespaces that do not exist, and do not add top-level exports for recipes, blocks, agent, or terminal groupings unless a later package API decision adds concrete source, built files, docs, and tests in the same change.
16
- - **shadcn and AI Elements are package surface.** Installed shadcn and AI Elements modules under `src/components/` are intentional ready-to-use exports. The source tree owns the component inventory; `src/index.ts` and `src/ai-elements.ts` own the barrels, and `package.json` owns the public export shape. Guards derive the consumer surface from those owners. Prose routes to them instead of maintaining another component list.
15
+ - **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.
16
+ - **Agents is the public Agent UI 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/`. Consumers receive Thread, attachments, Markdown, reasoning, tools, suggestions, providers, runtimes, hooks, and types from that one domain namespace. The vendor name is not a public NadicodeAI subpath, and the package does not rename, wrap, or rebuild assistant-ui behavior.
17
17
  - **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.
18
18
  - **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.
19
- - **Public surface changes require a release decision.** Any change to exported components, `src/index.ts`, `src/ai-elements.ts`, package `exports`, `globals.css`, theme behavior, package docs, package skills, or design-system token/CSS/theme output consumed by this package must end with an explicit npm release decision before handoff: bump the relevant version(s) and run `npm pack --dry-run -w @nadicodeai/ui` per `../../../docs/internal/npm-publishing.md`, or include a `[no-publish]` commit marker with the reason in the commit body. The pre-push gate requires one of the two. When the UI change depends on modified `@nadicodeai/design-system` output, bump and publish `@nadicodeai/design-system` first, then update this package's dependency and publish UI. Never claim a UI package change is shipped until `npm view @nadicodeai/ui version` reports the intended version.
19
+ - **Public surface changes require a release decision.** Any change to exported components, `src/index.ts`, package `exports`, `globals.css`, theme behavior, package docs, package skills, or design-system token/CSS/theme output consumed by this package must end with an explicit npm release decision before handoff: bump the relevant version(s) and run `npm pack --dry-run -w @nadicodeai/ui` per `../../../docs/internal/npm-publishing.md`, or include a `[no-publish]` commit marker with the reason in the commit body. The pre-push gate requires one of the two. When the UI change depends on modified `@nadicodeai/design-system` output, bump and publish `@nadicodeai/design-system` first, then update this package's dependency and publish UI. Never claim a UI package change is shipped until `npm view @nadicodeai/ui version` reports the intended version.
20
20
 
21
21
  ## Admission Rules
22
22
 
23
- Agent work surfaces (chat, composer, tool approval, artifacts, threads, diffs, terminal/file preview, and the underlying agent state models) are NadicodeAI core domain. They belong in this package outright, not behind a named consumer. Any other new product composition (a shell, a settings surface, a generic section) is admitted only with a named consuming surface landing in the same change. Genuinely app-bespoke UI (window chrome, boot/install overlays, mascots, PTY/xterm embeds) stays in the consuming app; it never becomes a package abstraction. A component left unconsumed after its target migration ships gets removed.
23
+ Agent presentation and runtime APIs enter through `@nadicodeai/ui/agents`; the consuming application still constructs the runtime and owns transport, persistence, permissions, tools, approvals, and failure policy. Shared non-Agent product components (a shell, a settings surface, a generic section, a diff, or a file preview) are admitted only with a named consuming surface landing in the same change. App-bespoke UI and behavior (window chrome, boot/install overlays, mascots, PTY/xterm embeds, queues, approvals, and persistence) stay in the consuming app; they never become package abstractions. A component left unconsumed after its target migration ships gets removed.
24
24
 
25
- - **Standard components, not app-owned product features.** This package ships primitives, standard UI components, AI Elements, brand adapters, React adapters, reusable sections, and presentational product components. It must not ship app-specific feature/use-case screens or names such as operator-login, portal activation, customer credential control, or customer management. Generic data tables, command palettes, and chart cards are app-owned shadcn registry adaptations. The source-backed `chart-*` package surface is the plan-approved exception per issue #166 and ADR 0010; chart cards remain app-owned. Every data-shaped chart exposes an equivalent non-visual data alternative. A component whose complete value is already available in visible text or `aria-valuetext` does not add a redundant table.
25
+ - **Standard components, not app-owned product features.** This package ships primitives, standard UI components, assistant-ui compositions, brand adapters, React adapters, reusable sections, and presentational product components. It must not ship app-specific feature/use-case screens or names such as operator-login, portal activation, customer credential control, or customer management. Generic data tables, command palettes, and chart cards are app-owned shadcn registry adaptations. The source-backed `chart-*` package surface is the plan-approved exception per issue #166 and ADR 0010; chart cards remain app-owned. Every data-shaped chart exposes an equivalent non-visual data alternative. A component whose complete value is already available in visible text or `aria-valuetext` does not add a redundant table.
26
26
  - **Auth routes are consumer-owned shadcn block work.** Login, signup, OTP, two-factor, magic-link, and provider-button flows start from the selected shadcn block/example in the consuming app, with app-owned Better Auth behavior. Do not ship generic auth, signup, OTP, federated-login, or provider abstractions from this package unless a later explicit boundary decision replaces the selected shadcn block.
27
27
  - **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.
28
28
  - **Brand renderers live here for React consumers.** Logo geometry, asset generation, and usage semantics are owned by [`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.
29
+ - **Third-party brand marks are generated, never hand-drawn and never hand-edited.** Other companies' marks live in `@nadicodeai/ui/src/components/brand-icons/`, emitted from an explicit allow-list by `@nadicodeai/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 `@nadicodeai/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. The full decision, including the licensing and trademark posture, is [ADR 0042](../../../docs/adr/0042-third-party-brand-marks-are-generated-identity-images.md).
29
30
  - **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.
30
31
 
31
32
  ## Accessibility Invariant
@@ -38,8 +39,17 @@ The source tree, barrels, and package exports own the current reusable section v
38
39
 
39
40
  ## Consumer Boundary
40
41
 
41
- Consumers own routing, auth, app data, server actions, runtime adapters, permission decisions, analytics, and app-specific copy. The package owns the presentational structure and state vocabulary only. [`terminal-tui-semantics.md`](terminal-tui-semantics.md) owns TUI semantics.
42
+ Consumers own routing, auth, app data, server actions, runtime construction and adapters, permission decisions, analytics, and app-specific copy. The package owns reusable React presentation and the public Agent UI dependency boundary. Agent state and behavior come through the Agents interface; non-React and TUI contracts belong to their consuming products.
42
43
 
43
44
  App source composes layout, data, behavior, and semantic content around package components. It does not restyle an imported component root: appearance changes enter through the component's typed variant or are added to the owning package component. App `className` values on package components are limited to structural layout and sizing. App source uses semantic roles such as `bg-background` and `text-foreground`; raw Tailwind palette colors and canonical `nc-*` color utilities stay behind package-owned primitives such as `BrandField`. Visible controls come from `@nadicodeai/ui`, while hidden inputs remain valid form transport. The root ESLint rules `nadicodeai/no-shadcn-appearance-override`, `nadicodeai/no-raw-color-utility`, and `nadicodeai/no-native-visible-control` enforce this boundary.
44
45
 
45
46
  When this package is read from an installed npm package, follow the [consumer setup guide](consuming-cross-repo.md) for setup and public import paths. The styling invariant above remains the authority for component implementation.
47
+
48
+ The public strict ESLint config enforces only properties that can be decided
49
+ from one source file and the installed generated tokens. It does not infer
50
+ that two JSX trees represent the same product pattern. Repeated patterns stay
51
+ governed by a named owning component, typed variants or slots, and explicit
52
+ package or Portal-kit imports. A new repeated pattern is consolidated at its
53
+ owner and pinned with a focused source or rendering test; generic JSX
54
+ similarity warnings are outside this contract because they cannot distinguish
55
+ valid domain composition from a fork without false positives.
@@ -10,7 +10,6 @@ Current invariants:
10
10
  - `@nadicodeai/ui/package.json` must not depend on `radix-ui`, `@radix-ui/react-use-controllable-state`, or `vaul`.
11
11
  - Website and portal Next config must optimize `@base-ui/react`, not `radix-ui`.
12
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
- - AI Elements use the package-local `useControllableState` helper instead of Radix's hook.
14
13
 
15
14
  ## Migration Catalog
16
15
 
@@ -26,16 +25,6 @@ Removed non-shadcn Radix carriers:
26
25
 
27
26
  - `command` stays backed by shadcn's stock `cmdk` implementation while the `base-nova` registry declares that dependency.
28
27
  - `drawer` replaces `vaul` with Base UI Drawer.
29
- - AI Elements replace `@radix-ui/react-use-controllable-state` with `src/hooks/use-controllable-state.ts`.
30
-
31
- AI Elements using the local controlled/uncontrolled helper:
32
-
33
- - `chain-of-thought`
34
- - `mic-selector`
35
- - `reasoning`
36
- - `stack-trace`
37
- - `transcription`
38
- - `voice-selector`
39
28
 
40
29
  ## Breaking in 0.5.0
41
30
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  U4 adds the first shared product compositions for NadicodeAI admin, settings, and agent-work surfaces. These components are presentational only: consumers own routing, persistence, server actions, mutations, analytics, auth providers, permissions, and product-specific page copy.
4
4
 
5
- When first-party shadcn or AI Elements registry source already covers the same
5
+ When first-party shadcn or assistant-ui registry source already covers the same
6
6
  generic product UI, use that registry item in the consuming app instead of
7
7
  adding a parallel NadicodeAI package API. Data tables, command palettes, and
8
8
  chart cards follow this rule: use `@shadcn/data-table-demo`,
package/llms.txt CHANGED
@@ -12,11 +12,11 @@ Use this file as a map; read the owning document before changing behavior.
12
12
  - Current component modules: `src/components/**/*.tsx` in the repository.
13
13
  - Current published subpaths: `package.json` `exports` plus the generated
14
14
  `dist/components/**/*.d.ts` declarations in an installed package.
15
- - Agent work surfaces: `docs/agent-work-surfaces.md`.
15
+ - Public Agent UI interface: `src/agents.ts`, exported as `@nadicodeai/ui/agents`.
16
+ - Maintained conversation implementation: `src/internal/assistant-ui/`.
16
17
  - Product compositions and sections: `docs/product-compositions.md` and
17
18
  `docs/product-sections.md`.
18
- - Terminal and TUI semantics: `docs/terminal-tui-semantics.md`.
19
- - Maintenance workflow and live shadcn or AI Elements discovery:
19
+ - Maintenance workflow and live shadcn or assistant-ui discovery:
20
20
  `docs/agents/nadicodeai-ui.md`.
21
21
 
22
22
  The component inventory is source-backed and is not repeated in prose. Use the
@@ -29,14 +29,13 @@ Prefer explicit component subpaths:
29
29
 
30
30
  ```tsx
31
31
  import { Button } from "@nadicodeai/ui/components/button";
32
- import { Message } from "@nadicodeai/ui/components/ai-elements/message";
32
+ import { AssistantRuntimeProvider, Thread } from "@nadicodeai/ui/agents";
33
33
  ```
34
34
 
35
- Use the root or AI Elements barrel when a barrel is more useful:
35
+ Use the root barrel when it is more useful:
36
36
 
37
37
  ```tsx
38
38
  import { Button } from "@nadicodeai/ui";
39
- import { Message, PromptInput } from "@nadicodeai/ui/ai-elements";
40
39
  ```
41
40
 
42
41
  Read the generated declaration for the current export names and props. Do not
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nadicodeai/ui",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -14,22 +14,15 @@
14
14
  "import": "./dist/index.js"
15
15
  },
16
16
  "./globals.css": "./dist/styles/globals.css",
17
- "./ai-elements": {
18
- "types": "./dist/ai-elements.d.ts",
19
- "import": "./dist/ai-elements.js"
17
+ "./eslint": "./dist/eslint/index.js",
18
+ "./agents": {
19
+ "types": "./dist/agents.d.ts",
20
+ "import": "./dist/agents.js"
20
21
  },
21
22
  "./hooks": {
22
23
  "types": "./dist/hooks/index.d.ts",
23
24
  "import": "./dist/hooks/index.js"
24
25
  },
25
- "./lib/agent-contracts": {
26
- "types": "./dist/lib/agent-contracts.d.ts",
27
- "import": "./dist/lib/agent-contracts.js"
28
- },
29
- "./lib/agent-state": {
30
- "types": "./dist/lib/agent-state.d.ts",
31
- "import": "./dist/lib/agent-state.js"
32
- },
33
26
  "./lib/utils": {
34
27
  "types": "./dist/lib/utils.d.ts",
35
28
  "import": "./dist/lib/utils.js"
@@ -53,8 +46,9 @@
53
46
  ],
54
47
  "scripts": {
55
48
  "dev": "node scripts/dev-build.mjs --watch",
56
- "build": "rm -rf dist && tsc -p tsconfig.build.json && node scripts/fix-dist-imports.mjs && node scripts/build-styles.mjs",
49
+ "build": "rm -rf dist && tsc -p tsconfig.build.json && node scripts/fix-dist-imports.mjs && node scripts/build-styles.mjs && node scripts/build-eslint.mjs",
57
50
  "build:fast": "node scripts/dev-build.mjs",
51
+ "generate:brand-icons": "node scripts/build-brand-icons.mjs",
58
52
  "prepack": "npm run build",
59
53
  "lint": "eslint --max-warnings=0",
60
54
  "typecheck": "tsc --noEmit",
@@ -62,38 +56,28 @@
62
56
  "test": "vitest run"
63
57
  },
64
58
  "dependencies": {
59
+ "@assistant-ui/react": "0.15.1",
60
+ "@assistant-ui/react-markdown": "0.14.8",
65
61
  "@base-ui/react": "^1.6.0",
66
- "@nadicodeai/design-system": "0.20.0",
67
- "@rive-app/react-webgl2": "^4.29.1",
68
- "@streamdown/cjk": "^1.0.3",
69
- "@streamdown/code": "^1.1.1",
70
- "@streamdown/math": "^1.0.2",
71
- "@streamdown/mermaid": "^1.0.2",
72
- "@xyflow/react": "^12.11.0",
73
- "ai": "^6.0.208",
74
- "ansi-to-react": "^6.2.6",
62
+ "@nadicodeai/design-system": "0.22.0",
75
63
  "class-variance-authority": "^0.7.1",
76
64
  "clsx": "^2.1.1",
77
65
  "cmdk": "^1.1.1",
78
66
  "embla-carousel-react": "^8.6.0",
79
67
  "input-otp": "^1.4.2",
80
68
  "lucide-react": "1.21.0",
81
- "media-chrome": "^4.19.2",
82
69
  "motion": "^12.40.0",
83
- "nanoid": "^5.1.15",
84
70
  "next-themes": "^0.4.6",
85
71
  "react-day-picker": "^10.0.1",
86
72
  "react-hook-form": "^7.80.0",
87
- "react-jsx-parser": "^2.4.1",
88
73
  "react-resizable-panels": "^4.11.2",
89
74
  "recharts": "^3.8.0",
90
- "shiki": "^4.2.0",
91
75
  "sonner": "^2.0.7",
92
- "streamdown": "^2.5.0",
76
+ "remark-gfm": "^4.0.1",
93
77
  "tailwind-merge": "^3.0.0",
94
- "tokenlens": "^1.3.1",
95
78
  "tw-animate-css": "^1.4.0",
96
- "use-stick-to-bottom": "^1.1.6"
79
+ "tw-shimmer": "0.4.12",
80
+ "zustand": "^5.0.14"
97
81
  },
98
82
  "peerDependencies": {
99
83
  "@tailwindcss/postcss": "^4.3.1",
@@ -102,6 +86,10 @@
102
86
  "tailwindcss": "^4.3.1"
103
87
  },
104
88
  "devDependencies": {
89
+ "@iconify-json/logos": "^1.2.11",
90
+ "@iconify/utils": "^3.1.4",
91
+ "@stryker-mutator/core": "9.6.1",
92
+ "@stryker-mutator/vitest-runner": "9.6.1",
105
93
  "@tailwindcss/postcss": "^4.3.1",
106
94
  "@testing-library/react": "^16.3.2",
107
95
  "@types/react": "^19",
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: nadicodeai-ui
3
- description: Use when building or modifying NadicodeAI React UI with @nadicodeai/ui, shadcn components, or AI Elements.
3
+ description: Use when building or modifying NadicodeAI React UI with @nadicodeai/ui, shadcn components, or assistant-ui.
4
4
  ---
5
5
 
6
6
  # NadicodeAI UI
7
7
 
8
- Use `@nadicodeai/ui` for shared NadicodeAI React UI. It ships built shadcn source components, Vercel AI Elements, React adapters over design-system grammar, reusable NadicodeAI marketing/section compositions, presentational product components, package CSS, and agent instructions. Product components are package surface only when source, public subpath exports, tests, and docs exist together.
8
+ Use `@nadicodeai/ui` for shared NadicodeAI React UI. It ships built shadcn source components, the `@nadicodeai/ui/agents` interface, React adapters over design-system grammar, reusable NadicodeAI marketing/section compositions, presentational product components, package CSS, and agent instructions. Product components are package surface only when source, public subpath exports, tests, and docs exist together.
9
9
 
10
10
  The package is a flat shadcn-style source surface. Do not create or document
11
11
  folders or package namespaces that do not exist. Do not add top-level exports
@@ -27,29 +27,27 @@ Prefer direct subpaths:
27
27
 
28
28
  ```tsx
29
29
  import { Button } from "@nadicodeai/ui/components/button";
30
- import { Message } from "@nadicodeai/ui/components/ai-elements/message";
30
+ import { AssistantRuntimeProvider, Thread, useLocalRuntime } from "@nadicodeai/ui/agents";
31
31
  ```
32
32
 
33
33
  Use barrels when helpful:
34
34
 
35
35
  ```tsx
36
36
  import { Button, PageFrame } from "@nadicodeai/ui";
37
- import { Message, PromptInput } from "@nadicodeai/ui/ai-elements";
38
37
  ```
39
38
 
40
39
  Product component imports:
41
40
 
42
41
  ```tsx
43
42
  import { DashboardShell } from "@nadicodeai/ui/components/dashboard-shell";
44
- import { AgentChat } from "@nadicodeai/ui/components/agent-chat";
43
+ import { Thread } from "@nadicodeai/ui/agents";
45
44
  ```
46
45
 
47
46
  ## Product Components
48
47
 
49
- - Use package product components for shared settings, shell, installer, plugin-boundary, agent chat, artifact, file, diff, and redacted terminal summary UI.
48
+ - Use `@nadicodeai/ui/agents` for Agent presentation, runtime primitives, providers, hooks, and types. Do not import assistant-ui packages directly or recreate their behavior.
50
49
  - Use first-party shadcn registry source in the consuming app for generic data tables, command palettes, and chart cards; do not import a NadicodeAI package abstraction for those patterns.
51
50
  - Keep routes, data, auth, server actions, persistence, permission decisions, runtime adapters, analytics, and product-specific copy in the consuming app.
52
- - Render TUI surfaces through `docs/terminal-tui-semantics.md`.
53
51
  - Fixtures must be synthetic or redacted and cover provider, model, plugin, approval, diff, terminal, installer recovery, queued, streaming, and interrupted states. Do not use generic SaaS/card-grid filler, secrets, environment values, raw terminal output, hidden reasoning, user memory, fake customers, or fake proof metrics.
54
52
 
55
53
  ## Forms
@@ -1,49 +0,0 @@
1
- export * from "./components/ai-elements/agent";
2
- export * from "./components/ai-elements/artifact";
3
- export * from "./components/ai-elements/attachments";
4
- export * from "./components/ai-elements/audio-player";
5
- export * from "./components/ai-elements/canvas";
6
- export * from "./components/ai-elements/chain-of-thought";
7
- export * from "./components/ai-elements/checkpoint";
8
- export * from "./components/ai-elements/code-block";
9
- export * from "./components/ai-elements/commit";
10
- export * from "./components/ai-elements/confirmation";
11
- export * from "./components/ai-elements/connection";
12
- export * from "./components/ai-elements/context";
13
- export * from "./components/ai-elements/controls";
14
- export * from "./components/ai-elements/conversation";
15
- export * from "./components/ai-elements/edge";
16
- export * from "./components/ai-elements/environment-variables";
17
- export * from "./components/ai-elements/file-tree";
18
- export * from "./components/ai-elements/image";
19
- export * from "./components/ai-elements/inline-citation";
20
- export * from "./components/ai-elements/jsx-preview";
21
- export * from "./components/ai-elements/message";
22
- export * from "./components/ai-elements/mic-selector";
23
- export * from "./components/ai-elements/model-selector";
24
- export * from "./components/ai-elements/node";
25
- export * from "./components/ai-elements/open-in-chat";
26
- export * from "./components/ai-elements/package-info";
27
- export * from "./components/ai-elements/panel";
28
- export * from "./components/ai-elements/persona";
29
- export * from "./components/ai-elements/plan";
30
- export * from "./components/ai-elements/prompt-input";
31
- export * from "./components/ai-elements/queue";
32
- export * from "./components/ai-elements/reasoning";
33
- export * from "./components/ai-elements/sandbox";
34
- export * from "./components/ai-elements/schema-display";
35
- export * from "./components/ai-elements/shimmer";
36
- export * from "./components/ai-elements/snippet";
37
- export * from "./components/ai-elements/sources";
38
- export * from "./components/ai-elements/speech-input";
39
- export * from "./components/ai-elements/stack-trace";
40
- export * from "./components/ai-elements/suggestion";
41
- export * from "./components/ai-elements/task";
42
- export * from "./components/ai-elements/terminal";
43
- export * from "./components/ai-elements/test-results";
44
- export * from "./components/ai-elements/tool";
45
- export * from "./components/ai-elements/toolbar";
46
- export * from "./components/ai-elements/transcription";
47
- export * from "./components/ai-elements/voice-selector";
48
- export * from "./components/ai-elements/web-preview";
49
- //# sourceMappingURL=ai-elements.d.ts.map