@nadicodeai/ui 0.6.0 → 0.8.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 (387) hide show
  1. package/AGENTS.md +12 -0
  2. package/dist/ai-elements.d.ts.map +1 -1
  3. package/dist/components/accordion.d.ts.map +1 -1
  4. package/dist/components/action-band.d.ts.map +1 -1
  5. package/dist/components/action-status.d.ts +11 -0
  6. package/dist/components/action-status.d.ts.map +1 -0
  7. package/dist/components/action-status.js +6 -0
  8. package/dist/components/agent-avatar.d.ts +7 -0
  9. package/dist/components/agent-avatar.d.ts.map +1 -0
  10. package/dist/components/agent-avatar.js +6 -0
  11. package/dist/components/agent-chat.d.ts.map +1 -1
  12. package/dist/components/agent-chat.js +2 -2
  13. package/dist/components/agent-composer.d.ts +1 -1
  14. package/dist/components/agent-composer.d.ts.map +1 -1
  15. package/dist/components/agent-composer.js +5 -9
  16. package/dist/components/agent-message.d.ts +1 -1
  17. package/dist/components/agent-message.d.ts.map +1 -1
  18. package/dist/components/agent-message.js +19 -23
  19. package/dist/components/agent-thread.d.ts +1 -1
  20. package/dist/components/agent-thread.d.ts.map +1 -1
  21. package/dist/components/agent-thread.js +5 -7
  22. package/dist/components/agent-tool-approval.d.ts +5 -10
  23. package/dist/components/agent-tool-approval.d.ts.map +1 -1
  24. package/dist/components/agent-tool-approval.js +10 -31
  25. package/dist/components/ai-elements/agent.d.ts.map +1 -1
  26. package/dist/components/ai-elements/agent.js +1 -3
  27. package/dist/components/ai-elements/artifact.d.ts.map +1 -1
  28. package/dist/components/ai-elements/artifact.js +1 -1
  29. package/dist/components/ai-elements/attachments.d.ts.map +1 -1
  30. package/dist/components/ai-elements/attachments.js +3 -3
  31. package/dist/components/ai-elements/audio-player.d.ts.map +1 -1
  32. package/dist/components/ai-elements/audio-player.js +2 -4
  33. package/dist/components/ai-elements/chain-of-thought.d.ts.map +1 -1
  34. package/dist/components/ai-elements/chain-of-thought.js +2 -2
  35. package/dist/components/ai-elements/checkpoint.d.ts.map +1 -1
  36. package/dist/components/ai-elements/checkpoint.js +2 -2
  37. package/dist/components/ai-elements/code-block.d.ts.map +1 -1
  38. package/dist/components/ai-elements/code-block.js +12 -24
  39. package/dist/components/ai-elements/commit.d.ts.map +1 -1
  40. package/dist/components/ai-elements/commit.js +2 -2
  41. package/dist/components/ai-elements/confirmation.d.ts +2 -2
  42. package/dist/components/ai-elements/confirmation.d.ts.map +1 -1
  43. package/dist/components/ai-elements/confirmation.js +4 -8
  44. package/dist/components/ai-elements/connection.d.ts.map +1 -1
  45. package/dist/components/ai-elements/connection.js +1 -1
  46. package/dist/components/ai-elements/context.d.ts.map +1 -1
  47. package/dist/components/ai-elements/context.js +4 -4
  48. package/dist/components/ai-elements/conversation.d.ts.map +1 -1
  49. package/dist/components/ai-elements/conversation.js +1 -1
  50. package/dist/components/ai-elements/edge.d.ts.map +1 -1
  51. package/dist/components/ai-elements/environment-variables.d.ts.map +1 -1
  52. package/dist/components/ai-elements/environment-variables.js +1 -3
  53. package/dist/components/ai-elements/file-tree.d.ts.map +1 -1
  54. package/dist/components/ai-elements/file-tree.js +3 -3
  55. package/dist/components/ai-elements/image.d.ts.map +1 -1
  56. package/dist/components/ai-elements/inline-citation.d.ts.map +1 -1
  57. package/dist/components/ai-elements/inline-citation.js +6 -6
  58. package/dist/components/ai-elements/jsx-preview.d.ts.map +1 -1
  59. package/dist/components/ai-elements/jsx-preview.js +2 -11
  60. package/dist/components/ai-elements/message.d.ts.map +1 -1
  61. package/dist/components/ai-elements/message.js +4 -5
  62. package/dist/components/ai-elements/mic-selector.d.ts.map +1 -1
  63. package/dist/components/ai-elements/mic-selector.js +3 -7
  64. package/dist/components/ai-elements/model-selector.d.ts.map +1 -1
  65. package/dist/components/ai-elements/model-selector.js +6 -6
  66. package/dist/components/ai-elements/node.d.ts.map +1 -1
  67. package/dist/components/ai-elements/node.js +1 -1
  68. package/dist/components/ai-elements/open-in-chat.d.ts.map +1 -1
  69. package/dist/components/ai-elements/open-in-chat.js +3 -3
  70. package/dist/components/ai-elements/package-info.d.ts.map +1 -1
  71. package/dist/components/ai-elements/package-info.js +1 -1
  72. package/dist/components/ai-elements/panel.d.ts.map +1 -1
  73. package/dist/components/ai-elements/persona.d.ts.map +1 -1
  74. package/dist/components/ai-elements/persona.js +1 -2
  75. package/dist/components/ai-elements/plan.d.ts.map +1 -1
  76. package/dist/components/ai-elements/plan.js +1 -1
  77. package/dist/components/ai-elements/prompt-input.d.ts.map +1 -1
  78. package/dist/components/ai-elements/prompt-input.js +22 -33
  79. package/dist/components/ai-elements/queue.d.ts.map +1 -1
  80. package/dist/components/ai-elements/queue.js +3 -7
  81. package/dist/components/ai-elements/reasoning.d.ts.map +1 -1
  82. package/dist/components/ai-elements/reasoning.js +2 -5
  83. package/dist/components/ai-elements/sandbox.d.ts.map +1 -1
  84. package/dist/components/ai-elements/sandbox.js +2 -2
  85. package/dist/components/ai-elements/schema-display.d.ts.map +1 -1
  86. package/dist/components/ai-elements/schema-display.js +7 -7
  87. package/dist/components/ai-elements/shimmer.d.ts.map +1 -1
  88. package/dist/components/ai-elements/snippet.d.ts.map +1 -1
  89. package/dist/components/ai-elements/snippet.js +1 -1
  90. package/dist/components/ai-elements/sources.d.ts.map +1 -1
  91. package/dist/components/ai-elements/sources.js +1 -1
  92. package/dist/components/ai-elements/speech-input.d.ts.map +1 -1
  93. package/dist/components/ai-elements/stack-trace.d.ts.map +1 -1
  94. package/dist/components/ai-elements/stack-trace.js +3 -5
  95. package/dist/components/ai-elements/suggestion.d.ts.map +1 -1
  96. package/dist/components/ai-elements/suggestion.js +1 -1
  97. package/dist/components/ai-elements/task.d.ts.map +1 -1
  98. package/dist/components/ai-elements/task.js +1 -1
  99. package/dist/components/ai-elements/terminal.d.ts.map +1 -1
  100. package/dist/components/ai-elements/test-results.d.ts.map +1 -1
  101. package/dist/components/ai-elements/test-results.js +2 -2
  102. package/dist/components/ai-elements/tool.d.ts.map +1 -1
  103. package/dist/components/ai-elements/tool.js +3 -5
  104. package/dist/components/ai-elements/toolbar.d.ts.map +1 -1
  105. package/dist/components/ai-elements/transcription.d.ts.map +1 -1
  106. package/dist/components/ai-elements/voice-selector.d.ts.map +1 -1
  107. package/dist/components/ai-elements/voice-selector.js +4 -4
  108. package/dist/components/ai-elements/web-preview.d.ts.map +1 -1
  109. package/dist/components/ai-elements/web-preview.js +3 -3
  110. package/dist/components/alert-dialog.d.ts.map +1 -1
  111. package/dist/components/alert-dialog.js +2 -2
  112. package/dist/components/alert.d.ts.map +1 -1
  113. package/dist/components/artifact-panel.d.ts +3 -4
  114. package/dist/components/artifact-panel.d.ts.map +1 -1
  115. package/dist/components/artifact-panel.js +19 -28
  116. package/dist/components/aspect-ratio.d.ts.map +1 -1
  117. package/dist/components/attachment.d.ts +24 -0
  118. package/dist/components/attachment.d.ts.map +1 -0
  119. package/dist/components/attachment.js +68 -0
  120. package/dist/components/automation-section.d.ts +1 -1
  121. package/dist/components/automation-section.d.ts.map +1 -1
  122. package/dist/components/automation-section.js +2 -2
  123. package/dist/components/avatar.d.ts +1 -1
  124. package/dist/components/avatar.d.ts.map +1 -1
  125. package/dist/components/avatar.js +1 -1
  126. package/dist/components/badge.d.ts.map +1 -1
  127. package/dist/components/benefits-bento.d.ts.map +1 -1
  128. package/dist/components/bento.d.ts.map +1 -1
  129. package/dist/components/brand.d.ts.map +1 -1
  130. package/dist/components/brand.js +1 -3
  131. package/dist/components/breadcrumb.d.ts.map +1 -1
  132. package/dist/components/breadcrumb.js +1 -1
  133. package/dist/components/bubble.d.ts +17 -0
  134. package/dist/components/bubble.d.ts.map +1 -0
  135. package/dist/components/bubble.js +59 -0
  136. package/dist/components/button-group.d.ts +1 -1
  137. package/dist/components/button-group.d.ts.map +1 -1
  138. package/dist/components/button-group.js +1 -1
  139. package/dist/components/button.d.ts.map +1 -1
  140. package/dist/components/calendar.d.ts.map +1 -1
  141. package/dist/components/calendar.js +6 -6
  142. package/dist/components/card-marketing.d.ts.map +1 -1
  143. package/dist/components/card.d.ts +1 -1
  144. package/dist/components/card.d.ts.map +1 -1
  145. package/dist/components/card.js +1 -1
  146. package/dist/components/carousel.d.ts.map +1 -1
  147. package/dist/components/chart-breakdown-table.d.ts.map +1 -1
  148. package/dist/components/chart-breakdown-table.js +1 -3
  149. package/dist/components/chart-bullet-bar.d.ts.map +1 -1
  150. package/dist/components/chart-date-range-control.d.ts.map +1 -1
  151. package/dist/components/chart-date-range-control.js +2 -4
  152. package/dist/components/chart-date-range.d.ts +1 -1
  153. package/dist/components/chart-date-range.d.ts.map +1 -1
  154. package/dist/components/chart-date-range.js +2 -4
  155. package/dist/components/chart-delta.d.ts.map +1 -1
  156. package/dist/components/chart-delta.js +1 -1
  157. package/dist/components/chart-entity-colors.d.ts +1 -1
  158. package/dist/components/chart-entity-colors.d.ts.map +1 -1
  159. package/dist/components/chart-entity-colors.js +1 -1
  160. package/dist/components/chart-kpi-stat.d.ts.map +1 -1
  161. package/dist/components/chart-sparkline.d.ts.map +1 -1
  162. package/dist/components/chart-sparkline.js +2 -7
  163. package/dist/components/chart-time-series.d.ts.map +1 -1
  164. package/dist/components/chart-time-series.js +5 -10
  165. package/dist/components/chart.d.ts.map +1 -1
  166. package/dist/components/chart.js +5 -19
  167. package/dist/components/checkbox.d.ts.map +1 -1
  168. package/dist/components/code-editor-mockup.d.ts.map +1 -1
  169. package/dist/components/code-editor-mockup.js +1 -1
  170. package/dist/components/collapsible.d.ts.map +1 -1
  171. package/dist/components/collapsible.js +2 -2
  172. package/dist/components/combobox.d.ts.map +1 -1
  173. package/dist/components/combobox.js +1 -1
  174. package/dist/components/command.d.ts.map +1 -1
  175. package/dist/components/command.js +1 -1
  176. package/dist/components/contact.d.ts.map +1 -1
  177. package/dist/components/context-menu.d.ts.map +1 -1
  178. package/dist/components/context-menu.js +4 -4
  179. package/dist/components/dashboard-shell.d.ts.map +1 -1
  180. package/dist/components/dashboard-shell.js +3 -5
  181. package/dist/components/demo-surface.d.ts.map +1 -1
  182. package/dist/components/desktop-shell.d.ts.map +1 -1
  183. package/dist/components/desktop-shell.js +2 -2
  184. package/dist/components/dialog.d.ts.map +1 -1
  185. package/dist/components/diff-count.d.ts +7 -0
  186. package/dist/components/diff-count.d.ts.map +1 -0
  187. package/dist/components/diff-count.js +18 -0
  188. package/dist/components/direction.d.ts.map +1 -1
  189. package/dist/components/disclosure-row.d.ts +12 -0
  190. package/dist/components/disclosure-row.d.ts.map +1 -0
  191. package/dist/components/disclosure-row.js +11 -0
  192. package/dist/components/drawer.d.ts.map +1 -1
  193. package/dist/components/drawer.js +1 -1
  194. package/dist/components/dropdown-menu.d.ts.map +1 -1
  195. package/dist/components/dropdown-menu.js +1 -1
  196. package/dist/components/empty.d.ts +1 -1
  197. package/dist/components/empty.d.ts.map +1 -1
  198. package/dist/components/empty.js +1 -1
  199. package/dist/components/expandable-block.d.ts +10 -0
  200. package/dist/components/expandable-block.d.ts.map +1 -0
  201. package/dist/components/expandable-block.js +22 -0
  202. package/dist/components/fact-cell.d.ts.map +1 -1
  203. package/dist/components/faq-item.d.ts.map +1 -1
  204. package/dist/components/faq.d.ts.map +1 -1
  205. package/dist/components/faq.js +1 -1
  206. package/dist/components/feedback-state.d.ts.map +1 -1
  207. package/dist/components/feedback-state.js +1 -4
  208. package/dist/components/field.d.ts.map +1 -1
  209. package/dist/components/field.js +1 -3
  210. package/dist/components/file-type-icon.d.ts +8 -0
  211. package/dist/components/file-type-icon.d.ts.map +1 -0
  212. package/dist/components/file-type-icon.js +90 -0
  213. package/dist/components/files-preview.d.ts.map +1 -1
  214. package/dist/components/files-preview.js +3 -6
  215. package/dist/components/footer.d.ts.map +1 -1
  216. package/dist/components/footer.js +1 -3
  217. package/dist/components/form.d.ts.map +1 -1
  218. package/dist/components/glyph-spinner.d.ts +10 -0
  219. package/dist/components/glyph-spinner.d.ts.map +1 -0
  220. package/dist/components/glyph-spinner.js +101 -0
  221. package/dist/components/handoff-banner.d.ts +9 -0
  222. package/dist/components/handoff-banner.d.ts.map +1 -0
  223. package/dist/components/handoff-banner.js +6 -0
  224. package/dist/components/hero-split.d.ts.map +1 -1
  225. package/dist/components/hover-card.d.ts.map +1 -1
  226. package/dist/components/hover-card.js +1 -1
  227. package/dist/components/input-group.d.ts.map +1 -1
  228. package/dist/components/input-otp.d.ts.map +1 -1
  229. package/dist/components/input.d.ts.map +1 -1
  230. package/dist/components/installer-shell.d.ts.map +1 -1
  231. package/dist/components/installer-shell.js +2 -2
  232. package/dist/components/item.d.ts.map +1 -1
  233. package/dist/components/kbd.d.ts.map +1 -1
  234. package/dist/components/label-system.d.ts +6 -2
  235. package/dist/components/label-system.d.ts.map +1 -1
  236. package/dist/components/label-system.js +4 -1
  237. package/dist/components/label.d.ts.map +1 -1
  238. package/dist/components/logo-band.d.ts.map +1 -1
  239. package/dist/components/logo-tile.d.ts.map +1 -1
  240. package/dist/components/logo-tile.js +1 -3
  241. package/dist/components/marker.d.ts +11 -0
  242. package/dist/components/marker.d.ts.map +1 -0
  243. package/dist/components/marker.js +34 -0
  244. package/dist/components/media-mount.d.ts.map +1 -1
  245. package/dist/components/media-mount.js +1 -3
  246. package/dist/components/memory-item.d.ts +9 -0
  247. package/dist/components/memory-item.d.ts.map +1 -0
  248. package/dist/components/memory-item.js +6 -0
  249. package/dist/components/menubar.d.ts.map +1 -1
  250. package/dist/components/message-scroller.d.ts +17 -0
  251. package/dist/components/message-scroller.d.ts.map +1 -0
  252. package/dist/components/message-scroller.js +29 -0
  253. package/dist/components/message.d.ts +11 -0
  254. package/dist/components/message.d.ts.map +1 -0
  255. package/dist/components/message.js +21 -0
  256. package/dist/components/native-select.d.ts.map +1 -1
  257. package/dist/components/nav-bar.d.ts.map +1 -1
  258. package/dist/components/navigation-menu.d.ts.map +1 -1
  259. package/dist/components/newsletter.d.ts.map +1 -1
  260. package/dist/components/page-frame.d.ts.map +1 -1
  261. package/dist/components/pagination.d.ts.map +1 -1
  262. package/dist/components/plugin-slot-boundary.d.ts.map +1 -1
  263. package/dist/components/plugin-slot-boundary.js +2 -2
  264. package/dist/components/popover.d.ts +1 -1
  265. package/dist/components/popover.d.ts.map +1 -1
  266. package/dist/components/popover.js +1 -1
  267. package/dist/components/pricing-card.d.ts.map +1 -1
  268. package/dist/components/pricing.d.ts.map +1 -1
  269. package/dist/components/pricing.js +3 -6
  270. package/dist/components/progress.d.ts +1 -1
  271. package/dist/components/progress.d.ts.map +1 -1
  272. package/dist/components/progress.js +1 -1
  273. package/dist/components/proof-slot.d.ts.map +1 -1
  274. package/dist/components/quote-card.d.ts +1 -1
  275. package/dist/components/quote-card.d.ts.map +1 -1
  276. package/dist/components/quote-card.js +1 -1
  277. package/dist/components/radio-group.d.ts.map +1 -1
  278. package/dist/components/resizable.d.ts.map +1 -1
  279. package/dist/components/resizable.js +1 -1
  280. package/dist/components/run-timeline.d.ts +16 -0
  281. package/dist/components/run-timeline.d.ts.map +1 -0
  282. package/dist/components/run-timeline.js +9 -0
  283. package/dist/components/scroll-area.d.ts.map +1 -1
  284. package/dist/components/seam-grid.d.ts.map +1 -1
  285. package/dist/components/section-intro.d.ts.map +1 -1
  286. package/dist/components/select.d.ts.map +1 -1
  287. package/dist/components/separator.d.ts.map +1 -1
  288. package/dist/components/settings-section.d.ts.map +1 -1
  289. package/dist/components/settings-section.js +2 -2
  290. package/dist/components/sheet.d.ts.map +1 -1
  291. package/dist/components/shift-band.d.ts.map +1 -1
  292. package/dist/components/shift-band.js +1 -1
  293. package/dist/components/sidebar.d.ts.map +1 -1
  294. package/dist/components/sidebar.js +4 -5
  295. package/dist/components/skeleton.d.ts.map +1 -1
  296. package/dist/components/slider.d.ts.map +1 -1
  297. package/dist/components/sonner.d.ts.map +1 -1
  298. package/dist/components/sonner.js +6 -6
  299. package/dist/components/spinner.d.ts.map +1 -1
  300. package/dist/components/stat-block.d.ts.map +1 -1
  301. package/dist/components/state-notice.d.ts.map +1 -1
  302. package/dist/components/state-notice.js +1 -1
  303. package/dist/components/stats-band.d.ts.map +1 -1
  304. package/dist/components/status-dot.d.ts +9 -0
  305. package/dist/components/status-dot.d.ts.map +1 -0
  306. package/dist/components/status-dot.js +12 -0
  307. package/dist/components/status-row.d.ts +18 -0
  308. package/dist/components/status-row.d.ts.map +1 -0
  309. package/dist/components/status-row.js +21 -0
  310. package/dist/components/switch.d.ts.map +1 -1
  311. package/dist/components/table.d.ts +1 -1
  312. package/dist/components/table.d.ts.map +1 -1
  313. package/dist/components/table.js +2 -2
  314. package/dist/components/tabs.d.ts.map +1 -1
  315. package/dist/components/testimonials.d.ts.map +1 -1
  316. package/dist/components/testimonials.js +1 -3
  317. package/dist/components/textarea.d.ts.map +1 -1
  318. package/dist/components/theme-mode-switcher.d.ts.map +1 -1
  319. package/dist/components/theme-mode-switcher.js +1 -1
  320. package/dist/components/toggle-group.d.ts.map +1 -1
  321. package/dist/components/toggle.d.ts.map +1 -1
  322. package/dist/components/tool-icon.d.ts +8 -0
  323. package/dist/components/tool-icon.d.ts.map +1 -0
  324. package/dist/components/tool-icon.js +23 -0
  325. package/dist/components/tooltip.d.ts.map +1 -1
  326. package/dist/components/tooltip.js +1 -1
  327. package/dist/components/usage-meter.d.ts +9 -0
  328. package/dist/components/usage-meter.d.ts.map +1 -0
  329. package/dist/components/usage-meter.js +10 -0
  330. package/dist/components/use-case-bento.d.ts.map +1 -1
  331. package/dist/components/use-case-bento.js +1 -1
  332. package/dist/components/watch-it-work-band.d.ts.map +1 -1
  333. package/dist/components/watch-it-work-band.js +2 -2
  334. package/dist/hooks/index.d.ts +3 -0
  335. package/dist/hooks/index.d.ts.map +1 -0
  336. package/dist/hooks/index.js +2 -0
  337. package/dist/hooks/use-controllable-state.d.ts +1 -1
  338. package/dist/hooks/use-controllable-state.d.ts.map +1 -1
  339. package/dist/hooks/use-controllable-state.js +2 -4
  340. package/dist/index.d.ts +26 -7
  341. package/dist/index.d.ts.map +1 -1
  342. package/dist/index.js +26 -7
  343. package/dist/lib/agent-attachment.d.ts.map +1 -1
  344. package/dist/lib/agent-contracts.d.ts +132 -0
  345. package/dist/lib/agent-contracts.d.ts.map +1 -0
  346. package/dist/lib/agent-contracts.js +6 -0
  347. package/dist/lib/agent-state.d.ts +22 -0
  348. package/dist/lib/agent-state.d.ts.map +1 -0
  349. package/dist/lib/agent-state.js +96 -0
  350. package/dist/lib/agent-work-state.d.ts.map +1 -1
  351. package/dist/lib/message-scroller-primitive/components.d.ts +17 -0
  352. package/dist/lib/message-scroller-primitive/components.d.ts.map +1 -0
  353. package/dist/lib/message-scroller-primitive/components.js +204 -0
  354. package/dist/lib/message-scroller-primitive/geometry.d.ts +55 -0
  355. package/dist/lib/message-scroller-primitive/geometry.d.ts.map +1 -0
  356. package/dist/lib/message-scroller-primitive/geometry.js +199 -0
  357. package/dist/lib/message-scroller-primitive/index.d.ts +12 -0
  358. package/dist/lib/message-scroller-primitive/index.d.ts.map +1 -0
  359. package/dist/lib/message-scroller-primitive/index.js +12 -0
  360. package/dist/lib/message-scroller-primitive/stores.d.ts +7 -0
  361. package/dist/lib/message-scroller-primitive/stores.d.ts.map +1 -0
  362. package/dist/lib/message-scroller-primitive/stores.js +53 -0
  363. package/dist/lib/message-scroller-primitive/types.d.ts +89 -0
  364. package/dist/lib/message-scroller-primitive/types.d.ts.map +1 -0
  365. package/dist/lib/message-scroller-primitive/types.js +40 -0
  366. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts +19 -0
  367. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts.map +1 -0
  368. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.js +188 -0
  369. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts +7 -0
  370. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts.map +1 -0
  371. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.js +506 -0
  372. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts +49 -0
  373. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts.map +1 -0
  374. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.js +90 -0
  375. package/dist/lib/message-scroller-primitive/use-render.d.ts +22 -0
  376. package/dist/lib/message-scroller-primitive/use-render.d.ts.map +1 -0
  377. package/dist/lib/message-scroller-primitive/use-render.js +113 -0
  378. package/dist/lib/message-scroller-primitive/utils.d.ts +4 -0
  379. package/dist/lib/message-scroller-primitive/utils.d.ts.map +1 -0
  380. package/dist/lib/message-scroller-primitive/utils.js +9 -0
  381. package/dist/lib/seam.d.ts.map +1 -1
  382. package/dist/lib/theme-mode.d.ts.map +1 -1
  383. package/dist/styles/globals.css +32 -29
  384. package/docs/agent-work-surfaces.md +36 -3
  385. package/docs/consuming-cross-repo.md +72 -0
  386. package/docs/migration/ai-elements-vendoring.md +29 -0
  387. package/package.json +14 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-render.d.ts","sourceRoot":"","sources":["../../../src/lib/message-scroller-primitive/use-render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,KAAK,cAAc,CAAC,MAAM,SAAS,WAAW,IAAI,CAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,MAAM,KACV,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAE/B,KAAK,UAAU,CAAC,MAAM,SAAS,WAAW,IAAI,KAAK,CAAC,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAE1F,KAAK,sBAAsB,CAAC,MAAM,SAAS,WAAW,IAAI,OAAO,CAAC;KAC/D,CAAC,IAAI,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS;CACjG,CAAC,CAAC;AAEH,KAAK,uBAAuB,CAC1B,QAAQ,SAAS,KAAK,CAAC,WAAW,EAClC,MAAM,SAAS,WAAW,GAAG,WAAW,IACtC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,GAAG;IAC1C,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC;AAEF,KAAK,gBAAgB,CAAC,QAAQ,SAAS,KAAK,CAAC,WAAW,EAAE,MAAM,SAAS,WAAW,IAAI;IACtF,cAAc,EAAE,QAAQ,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB,CAAC,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;CACzD,CAAC;AAEF,iBAAS,SAAS,CAAC,QAAQ,SAAS,KAAK,CAAC,WAAW,EAAE,MAAM,SAAS,WAAW,GAAG,WAAW,EAAE,EAC/F,cAAc,EACd,KAAK,EACL,MAAM,EACN,KAAoB,EACpB,sBAAsB,GACvB,EAAE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,6EA6BpC;AAED,iBAAS,UAAU,CAAC,QAAQ,SAAS,KAAK,CAAC,WAAW,EACpD,GAAG,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,GA4C7E,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CACvD;AAqDD,iBAAS,WAAW,CAAC,CAAC,EACpB,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GACvC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAgBlC;AAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,113 @@
1
+ // Vendored from @shadcn/react 0.2.1 (upstream github.com/shadcn-ui).
2
+ // Adapted only for repo import paths and formatting; not added as an npm dependency.
3
+ // A poor man's version of base-ui useRender.
4
+ // see https://base-ui.com/react/utils/use-render.
5
+ // TODO: Replace if base-ui useRender is published as a package.
6
+ import * as React from "react";
7
+ function useRender({ defaultTagName, props, render, state = {}, stateAttributesMapping, }) {
8
+ const elementProps = mergeProps(getStateAttributes(state, stateAttributesMapping), props);
9
+ if (!render) {
10
+ return React.createElement(defaultTagName, elementProps);
11
+ }
12
+ if (typeof render === "function") {
13
+ return render(elementProps, state);
14
+ }
15
+ if (!React.isValidElement(render)) {
16
+ return null;
17
+ }
18
+ const renderProps = render.props;
19
+ const propsWithRenderProps = mergeProps(elementProps, renderProps);
20
+ const propsWithRef = {
21
+ ...propsWithRenderProps,
22
+ ref: composeRefs(elementProps.ref, renderProps.ref),
23
+ };
24
+ return React.cloneElement(render, propsWithRef);
25
+ }
26
+ function mergeProps(...sources) {
27
+ const result = {};
28
+ for (const source of sources) {
29
+ if (!source) {
30
+ continue;
31
+ }
32
+ const sourceProps = source;
33
+ for (const key of Object.keys(sourceProps)) {
34
+ const value = sourceProps[key];
35
+ if (value === undefined) {
36
+ continue;
37
+ }
38
+ const current = result[key];
39
+ if (key === "className") {
40
+ result[key] = [current, value].filter(Boolean).join(" ");
41
+ }
42
+ else if (key === "style") {
43
+ result[key] = {
44
+ ...current,
45
+ ...value,
46
+ };
47
+ }
48
+ else if (key === "ref") {
49
+ result[key] = composeRefs(current, value);
50
+ }
51
+ else if (isEventHandler(key) &&
52
+ typeof current === "function" &&
53
+ typeof value === "function") {
54
+ result[key] = composeEventHandlers(value, current);
55
+ }
56
+ else {
57
+ result[key] = value;
58
+ }
59
+ }
60
+ }
61
+ return result;
62
+ }
63
+ function getStateAttributes(state, mapping) {
64
+ const props = {};
65
+ for (const key of Object.keys(state)) {
66
+ const value = state[key];
67
+ const attributes = mapping?.[key]?.(value);
68
+ if (attributes) {
69
+ Object.assign(props, attributes);
70
+ continue;
71
+ }
72
+ if (key === "slot") {
73
+ props["data-slot"] = value;
74
+ continue;
75
+ }
76
+ const attribute = `data-${String(key).replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`;
77
+ if (typeof value === "boolean") {
78
+ props[attribute] = value ? "" : undefined;
79
+ }
80
+ else if (value !== null && value !== undefined) {
81
+ props[attribute] = String(value);
82
+ }
83
+ }
84
+ return props;
85
+ }
86
+ function composeEventHandlers(theirs, ours) {
87
+ return function handleEvent(event) {
88
+ theirs(event);
89
+ if (!event.defaultPrevented) {
90
+ ours(event);
91
+ }
92
+ };
93
+ }
94
+ function isEventHandler(key) {
95
+ return /^on[A-Z]/.test(key);
96
+ }
97
+ function composeRefs(...refs) {
98
+ const validRefs = refs.filter(Boolean);
99
+ if (validRefs.length === 0) {
100
+ return undefined;
101
+ }
102
+ return (value) => {
103
+ for (const ref of validRefs) {
104
+ if (typeof ref === "function") {
105
+ ref(value);
106
+ }
107
+ else if (ref) {
108
+ ref.current = value;
109
+ }
110
+ }
111
+ };
112
+ }
113
+ export { composeRefs, mergeProps, useRender };
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ declare function useLatest<T>(value: T): React.RefObject<T>;
3
+ export { useLatest };
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/message-scroller-primitive/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,iBAAS,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,sBAM7B;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Vendored from @shadcn/react 0.2.1 (upstream github.com/shadcn-ui).
2
+ // Adapted only for repo import paths and formatting; not added as an npm dependency.
3
+ import * as React from "react";
4
+ function useLatest(value) {
5
+ const ref = React.useRef(value);
6
+ ref.current = value;
7
+ return ref;
8
+ }
9
+ export { useLatest };
@@ -1 +1 @@
1
- {"version":3,"file":"seam.d.ts","sourceRoot":"","sources":["../../src/lib/seam.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,KAAK,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAA;AAEnC;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAItD;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,YAAY,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"seam.d.ts","sourceRoot":"","sources":["../../src/lib/seam.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,KAAK,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEpC;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAItD;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"theme-mode.d.ts","sourceRoot":"","sources":["../../src/lib/theme-mode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,sCAAuC,CAAA;AAE9D,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,SAAS,CAEzE"}
1
+ {"version":3,"file":"theme-mode.d.ts","sourceRoot":"","sources":["../../src/lib/theme-mode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,sCAAuC,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,SAAS,CAEzE"}
@@ -46,11 +46,11 @@
46
46
  }
47
47
 
48
48
  /*
49
- * Raw --nc-* dark remaps (state/selection/cross/chart) are generated at
50
- * :root.dark specificity inside the design-system theme import above; the
51
- * package-local copy that used to live here is gone so the generated theme
52
- * stays the single owner. tests/dark-token-cascade.test.ts guards the
53
- * resolved cascade across this file's import order.
49
+ * Raw --nc-* dark remaps (surface palette/state/selection/cross/chart) are
50
+ * generated at :root.dark specificity inside the design-system theme import
51
+ * above; the package-local copy that used to live here is gone so the
52
+ * generated theme stays the single owner. tests/guards/dark-token-cascade.test.ts
53
+ * guards the resolved cascade across this file's import order.
54
54
  */
55
55
 
56
56
  @theme inline {
@@ -224,7 +224,7 @@
224
224
  --nc-app-surface-elevated: var(--popover);
225
225
  --nc-app-surface-overlay: var(--popover);
226
226
  --nc-app-border: var(--border);
227
- --nc-app-border-subtle: var(--nc-body);
227
+ --nc-app-border-subtle: var(--nc-dark-line);
228
228
  --nc-app-ring: var(--ring);
229
229
  --nc-app-text-primary: var(--foreground);
230
230
  --nc-app-text-secondary: var(--nc-cross);
@@ -233,7 +233,7 @@
233
233
  --nc-app-text-link: var(--nc-dark-cyan-soft);
234
234
  --nc-app-text-code: var(--nc-on-primary);
235
235
  --nc-app-text-placeholder: var(--nc-cross);
236
- --nc-app-text-disabled: var(--nc-body);
236
+ --nc-app-text-disabled: var(--nc-dark-muted);
237
237
 
238
238
  --nc-chat-surface: var(--background);
239
239
  --nc-chat-user-surface: var(--primary);
@@ -242,7 +242,7 @@
242
242
  --nc-chat-tool-surface: var(--secondary);
243
243
  --nc-chat-reasoning-surface: var(--accent);
244
244
  --nc-chat-artifact-surface: var(--popover);
245
- --nc-chat-inline-ref-surface: var(--nc-link-deep);
245
+ --nc-chat-inline-ref-surface: var(--nc-dark-link-bg-soft);
246
246
  --nc-chat-directive-command: var(--nc-dark-cyan);
247
247
  --nc-chat-directive-skill: var(--nc-dark-cyan-soft);
248
248
  --nc-chat-directive-theme: var(--nc-warning);
@@ -273,16 +273,16 @@
273
273
  --nc-status-offline: var(--nc-cross);
274
274
  --nc-status-online: var(--nc-dark-cyan-soft);
275
275
 
276
- --nc-diff-added-line: var(--nc-link-deep);
276
+ --nc-diff-added-line: var(--nc-dark-link-bg-soft);
277
277
  --nc-diff-added-word: var(--nc-dark-cyan-soft);
278
278
  --nc-diff-removed-line: var(--nc-error-deep);
279
279
  --nc-diff-removed-word: var(--nc-error-soft);
280
280
  --nc-diff-hunk: var(--muted);
281
281
  --nc-diff-file-header: var(--muted-foreground);
282
- /* --nc-primary is now green-700 (Italia contract §4); code/terminal chrome
283
- must stay near-black in dark mode too, so repoint to --nc-ink instead of
284
- letting the code surface render green. */
285
- --nc-code-surface: var(--nc-ink);
282
+ /* Code/terminal chrome must stay near-black in dark mode. --nc-ink flips
283
+ light at :root.dark (generated surface-palette remap), so these ink-as-
284
+ surface aliases re-pin to the dark canvas tokens explicitly. */
285
+ --nc-code-surface: var(--nc-dark-canvas-soft);
286
286
  --nc-code-border: var(--nc-body);
287
287
  /* cyan family retired per Italia color contract §6. dark-cyan/-soft/-deep
288
288
  were kept unchanged in DESIGN.md specifically for this dark-mode "electric"
@@ -293,12 +293,12 @@
293
293
  --nc-code-token-comment: var(--nc-cross);
294
294
  --nc-code-token-function: var(--nc-dark-cyan-soft);
295
295
 
296
- --nc-terminal-bg: var(--nc-ink);
296
+ --nc-terminal-bg: var(--nc-dark-canvas-soft);
297
297
  --nc-terminal-fg: var(--nc-on-primary);
298
298
  --nc-terminal-muted: var(--nc-cross);
299
299
  --nc-terminal-cursor: var(--nc-dark-cyan);
300
- --nc-terminal-selection-bg: var(--nc-link-deep);
301
- --nc-terminal-ansi-black: var(--nc-body);
300
+ --nc-terminal-selection-bg: var(--nc-dark-link-bg-soft);
301
+ --nc-terminal-ansi-black: var(--nc-dark-line);
302
302
  --nc-terminal-ansi-red: var(--nc-error-soft);
303
303
  --nc-terminal-ansi-green: var(--nc-dark-cyan-soft);
304
304
  --nc-terminal-ansi-yellow: var(--nc-warning);
@@ -309,7 +309,7 @@
309
309
  --nc-terminal-ansi-bright-black: var(--nc-cross);
310
310
  --nc-terminal-ansi-bright-red: var(--nc-error-soft);
311
311
  --nc-terminal-ansi-bright-green: var(--nc-dark-cyan-soft);
312
- --nc-terminal-ansi-bright-yellow: var(--nc-warning-soft);
312
+ --nc-terminal-ansi-bright-yellow: var(--nc-warning);
313
313
  --nc-terminal-ansi-bright-blue: var(--nc-dark-cyan);
314
314
  --nc-terminal-ansi-bright-magenta: var(--nc-flag-red);
315
315
  --nc-terminal-ansi-bright-cyan: var(--nc-dark-cyan-soft);
@@ -330,6 +330,18 @@
330
330
  --nc-plugin-permission-foreground: var(--foreground);
331
331
  }
332
332
 
333
+ /*
334
+ * The design-system CSS components (.nc-chat-thread, .nc-chat-bubble-*,
335
+ * .nc-artifact-preview, .nc-approval-gate, .nc-tool-call-trace,
336
+ * .nc-usage-meter, .nc-run-timeline, .nc-memory-item, .nc-handoff-banner, …)
337
+ * paint from the raw --nc-canvas/ink/body/line/canvas-soft/muted/warning
338
+ * palette. The generated theme remaps that surface palette (alongside the
339
+ * state/selection/cross/chart families) at :root.dark, so every nc-* CSS
340
+ * component is dark-correct with no per-component selector list here.
341
+ * Ink-as-surface aliases (code/terminal chrome) re-pin to explicit dark
342
+ * canvas tokens in the .dark block above, since --nc-ink flips light.
343
+ */
344
+
333
345
  [data-nc-code-block-body] {
334
346
  background-color: var(--shiki-code-block-light-bg, var(--background));
335
347
  color: var(--shiki-code-block-light-fg, var(--foreground));
@@ -340,10 +352,7 @@
340
352
  --shiki-code-block-dark-bg,
341
353
  var(--shiki-code-block-light-bg, var(--background))
342
354
  );
343
- color: var(
344
- --shiki-code-block-dark-fg,
345
- var(--shiki-code-block-light-fg, var(--foreground))
346
- );
355
+ color: var(--shiki-code-block-dark-fg, var(--shiki-code-block-light-fg, var(--foreground)));
347
356
  }
348
357
 
349
358
  [data-nc-code-token] {
@@ -355,14 +364,8 @@
355
364
  }
356
365
 
357
366
  .dark [data-nc-code-token] {
358
- background-color: var(
359
- --shiki-code-token-dark-bg,
360
- var(--shiki-code-token-light-bg, transparent)
361
- );
362
- color: var(
363
- --shiki-code-token-dark-color,
364
- var(--shiki-code-token-light-color, var(--foreground))
365
- );
367
+ background-color: var(--shiki-code-token-dark-bg, var(--shiki-code-token-light-bg, transparent));
368
+ color: var(--shiki-code-token-dark-color, var(--shiki-code-token-light-color, var(--foreground)));
366
369
  font-style: var(
367
370
  --shiki-code-token-dark-font-style,
368
371
  var(--shiki-code-token-light-font-style, normal)
@@ -1,8 +1,27 @@
1
1
  # Agent Work Surfaces
2
2
 
3
- U6 adds presentational agent surfaces for Nadia-flavored chat, composer, approval,
4
- artifact, file, preview, diff, and terminal summary UI. These components render
5
- serializable state models and leave runtime behavior to the consuming app.
3
+ Presentational agent surfaces for Nadia-flavored chat, composer, approval,
4
+ artifact, file, preview, diff, and terminal summary UI, plus the identity slots
5
+ they compose from. These components render serializable state models and leave
6
+ runtime behavior to the consuming app.
7
+
8
+ ## Design-System Family Convergence
9
+
10
+ The React agent layer is the React face of the design-system Agentic Work
11
+ Surface CSS families (`design-system/DESIGN.md`). Each component consumes its
12
+ `nc-*` family class for identity — surface, border, chrome — and adds Tailwind
13
+ only for layout and spacing; the CSS family owns any value it already sets. The
14
+ families come from `@nadicodeai/design-system/css`, which the consuming app
15
+ imports alongside `@nadicodeai/ui/globals.css`.
16
+
17
+ - `AgentThread` -> `nc-chat-thread`.
18
+ - `AgentMessage` text bubbles -> `nc-chat-bubble-user` / `nc-chat-bubble-agent`;
19
+ the tool row -> `nc-tool-call-trace`.
20
+ - `AgentToolApproval` -> `nc-approval-gate`.
21
+ - `ArtifactPanel` -> `nc-artifact-preview`.
22
+ - `AgentAvatar` -> `nc-agent-avatar`, `UsageMeter` -> `nc-usage-meter`,
23
+ `RunTimeline` -> `nc-run-timeline`, `MemoryItem` -> `nc-memory-item`,
24
+ `HandoffBanner` -> `nc-handoff-banner`.
6
25
 
7
26
  ## Components
8
27
 
@@ -20,6 +39,20 @@ serializable state models and leave runtime behavior to the consuming app.
20
39
  stack-trace, and test-result artifacts.
21
40
  - `FilesPreview` and `ProjectFileTree` render a serializable project tree and
22
41
  file preview without desktop IPC.
42
+ - `AgentAvatar` renders an agent identity slot with an optional accent ring; the
43
+ chrome is reusable and the initials, image, or generated asset are slotted.
44
+ - `UsageMeter` renders a token, cost, latency, or run-count meta row from
45
+ serializable `fields` and `trailing` strings over an optional progress track
46
+ driven by `usage`, with a `children` slot for custom meta content.
47
+ - `RunTimeline` renders a vertical step thread for a run, handoff, or workflow
48
+ from serializable steps (`title`, `label`, `detail`) with `ready`, `running`,
49
+ `review`, `blocked`, and `complete` step states and a per-step `detailSlot`
50
+ escape hatch.
51
+ - `MemoryItem` renders a remembered-fact row from a serializable `label` and
52
+ `fact`, with a `children` slot that replaces the fact.
53
+ - `HandoffBanner` renders an agent-to-agent or human-to-agent handoff surface
54
+ from a serializable `reason` and `destination`, with a `children` slot that
55
+ replaces the model.
23
56
 
24
57
  ## State Models
25
58
 
@@ -0,0 +1,72 @@
1
+ # Consuming `@nadicodeai/ui` Cross-Repo
2
+
3
+ This is the contract for an external repo — nadia-core, sibling Nadia web,
4
+ desktop, or any consumer outside this monorepo — installing `@nadicodeai/ui`
5
+ from published npm rather than the workspace source.
6
+
7
+ ## Version pinning
8
+
9
+ Pin both packages to an exact version, never `latest` or a caret/tilde range:
10
+
11
+ ```bash
12
+ npm view @nadicodeai/ui version
13
+ npm view @nadicodeai/design-system version
14
+ npm install @nadicodeai/design-system@<exact-version> @nadicodeai/ui@<exact-version> react@^19 react-dom@^19 tailwindcss@^4 @tailwindcss/postcss@^4
15
+ ```
16
+
17
+ `@nadicodeai/ui` pins its `@nadicodeai/design-system` dependency exactly; the
18
+ consumer's own `package.json` must match that same version for both packages.
19
+ A version bump in either package requires re-pinning both together.
20
+
21
+ ## CSS import order
22
+
23
+ Import order is load-bearing. Import both `@nadicodeai/design-system` CSS
24
+ entrypoints before `@nadicodeai/ui/globals.css`: the fonts, so the
25
+ `Geist`/`Geist Mono` `@font-face` declarations that the generated theme's
26
+ `--font-*` roles reference are already registered, and `@nadicodeai/design-system/css`
27
+ itself, which owns the kept `nc-*` geometry, type scale, chat CSS components,
28
+ motion, and display components that `@nadicodeai/ui` components render
29
+ against. `@nadicodeai/ui/globals.css` pulls in the generated theme and
30
+ tokens but not this `nc-*` layer, so skipping it leaves package components
31
+ unstyled:
32
+
33
+ ```ts
34
+ import "@nadicodeai/design-system/assets/fonts/geist.css";
35
+ import "@nadicodeai/design-system/css";
36
+ import "@nadicodeai/ui/globals.css";
37
+ ```
38
+
39
+ Both `@nadicodeai/design-system` and `@nadicodeai/ui` are required
40
+ dependencies of every consumer, not just `@nadicodeai/ui` — see the version
41
+ pinning section above.
42
+
43
+ ## Tailwind v4 source scanning
44
+
45
+ Tailwind v4's automatic content detection does not scan `node_modules`. Add an
46
+ explicit `@source` directive in the consumer's Tailwind entry CSS (wherever
47
+ `@import "tailwindcss"` lives) pointing at the package's built `dist`:
48
+
49
+ ```css
50
+ @source "../node_modules/@nadicodeai/ui/dist";
51
+ ```
52
+
53
+ Adjust the relative path to match the consumer's directory depth from its
54
+ Tailwind entry file to `node_modules`.
55
+
56
+ ## Base UI API breaks (migrating from Radix-era components)
57
+
58
+ `@nadicodeai/ui@0.5.0+` is Base UI only; the Radix-era compatibility layer is
59
+ gone. Full catalog and rationale: `docs/migration/base-ui-migration.md`. What
60
+ a consumer actually hits when porting call sites:
61
+
62
+ - No `asChild`. Use Base UI's `render` prop; when the rendered element isn't
63
+ a native `<button>`, also pass `nativeButton={false}`.
64
+ - Menu items (`DropdownMenuItem`, `ContextMenuItem`, `MenubarItem`) use
65
+ `onClick`, not `onSelect`.
66
+ - State attributes are `data-checked`/`data-unchecked` and
67
+ `data-open`/`data-closed`, not a single `data-state` value.
68
+ - `Accordion` and `ToggleGroup` values are always arrays — pass `multiple`
69
+ for multi-select instead of `type="single" | "multiple"`.
70
+ - `TooltipProvider` takes `delay`, not `delayDuration`.
71
+ - Disclosure panels (`CollapsibleContent`, etc.) take `keepMounted`, not
72
+ `forceMount`.
@@ -0,0 +1,29 @@
1
+ # AI Elements Vendoring
2
+
3
+ `@nadicodeai/ui/src/components/ai-elements/*` is vendored source, not a
4
+ dependency. It was pulled from
5
+ [github.com/vercel/ai-elements](https://github.com/vercel/ai-elements) on
6
+ 2026-06-22 in monorepo commit `c2b97003` ("feat(ui): package shadcn and ai
7
+ elements") — 48 components. The upstream ref at vendor time was not recorded;
8
+ every re-vendor from now on records the upstream ref it checked in the log
9
+ below. Since vendoring, the components have been adapted
10
+ in place: the Base UI migration (`docs/migration/base-ui-migration.md`),
11
+ `src/hooks/use-controllable-state.ts` replacing
12
+ `@radix-ui/react-use-controllable-state`, and theming onto brand tokens.
13
+
14
+ Upstream `ai-elements` is still Radix-based. Re-vendoring an item is a diff,
15
+ not a copy:
16
+
17
+ 1. Fetch the upstream item's current source (`shadcn` CLI against the
18
+ `@ai-elements` registry, or the upstream repo directly).
19
+ 2. Diff it against our adapted file in
20
+ `@nadicodeai/ui/src/components/ai-elements/`.
21
+ 3. Re-apply the Base UI migration and token adaptations to whatever upstream
22
+ changed — do not reintroduce Radix imports or raw palette values.
23
+ 4. Record the upstream ref checked below.
24
+
25
+ ## Re-vendor log
26
+
27
+ | Date | Upstream ref checked | Notes |
28
+ | --- | --- | --- |
29
+ | 2026-06-22 | not recorded | Initial vendor, 48 components (monorepo commit `c2b97003`). |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nadicodeai/ui",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -19,6 +19,18 @@
19
19
  "types": "./dist/ai-elements.d.ts",
20
20
  "import": "./dist/ai-elements.js"
21
21
  },
22
+ "./hooks": {
23
+ "types": "./dist/hooks/index.d.ts",
24
+ "import": "./dist/hooks/index.js"
25
+ },
26
+ "./lib/agent-contracts": {
27
+ "types": "./dist/lib/agent-contracts.d.ts",
28
+ "import": "./dist/lib/agent-contracts.js"
29
+ },
30
+ "./lib/agent-state": {
31
+ "types": "./dist/lib/agent-state.d.ts",
32
+ "import": "./dist/lib/agent-state.js"
33
+ },
22
34
  "./lib/utils": {
23
35
  "types": "./dist/lib/utils.d.ts",
24
36
  "import": "./dist/lib/utils.js"
@@ -51,7 +63,7 @@
51
63
  },
52
64
  "dependencies": {
53
65
  "@base-ui/react": "^1.6.0",
54
- "@nadicodeai/design-system": "0.6.0",
66
+ "@nadicodeai/design-system": "0.8.0",
55
67
  "@rive-app/react-webgl2": "^4.29.1",
56
68
  "@streamdown/cjk": "^1.0.3",
57
69
  "@streamdown/code": "^1.1.1",