@nadicodeai/ui 0.21.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 (293) hide show
  1. package/AGENTS.md +2 -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/button.d.ts +1 -1
  8. package/dist/components/use-case-bento.d.ts +2 -4
  9. package/dist/components/use-case-bento.d.ts.map +1 -1
  10. package/dist/components/use-case-bento.js +2 -3
  11. package/dist/hooks/index.d.ts +0 -1
  12. package/dist/hooks/index.d.ts.map +1 -1
  13. package/dist/hooks/index.js +0 -1
  14. package/dist/index.d.ts +0 -16
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +0 -16
  17. package/dist/internal/assistant-ui/attachment.d.ts +5 -0
  18. package/dist/internal/assistant-ui/attachment.d.ts.map +1 -0
  19. package/dist/internal/assistant-ui/attachment.js +93 -0
  20. package/dist/internal/assistant-ui/follow-up-suggestions.d.ts +3 -0
  21. package/dist/internal/assistant-ui/follow-up-suggestions.d.ts.map +1 -0
  22. package/dist/internal/assistant-ui/follow-up-suggestions.js +8 -0
  23. package/dist/internal/assistant-ui/markdown-text.d.ts +2 -0
  24. package/dist/internal/assistant-ui/markdown-text.d.ts.map +1 -0
  25. package/dist/internal/assistant-ui/markdown-text.js +54 -0
  26. package/dist/internal/assistant-ui/reasoning.d.ts +31 -0
  27. package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -0
  28. package/dist/internal/assistant-ui/reasoning.js +118 -0
  29. package/dist/internal/assistant-ui/thread.d.ts +26 -0
  30. package/dist/internal/assistant-ui/thread.d.ts.map +1 -0
  31. package/dist/internal/assistant-ui/thread.js +118 -0
  32. package/dist/internal/assistant-ui/tool-fallback.d.ts +10 -0
  33. package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -0
  34. package/dist/internal/assistant-ui/tool-fallback.js +163 -0
  35. package/dist/internal/assistant-ui/tool-group.d.ts +18 -0
  36. package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -0
  37. package/dist/internal/assistant-ui/tool-group.js +44 -0
  38. package/dist/internal/assistant-ui/tooltip-icon-button.d.ts +8 -0
  39. package/dist/internal/assistant-ui/tooltip-icon-button.d.ts.map +1 -0
  40. package/dist/internal/assistant-ui/tooltip-icon-button.js +10 -0
  41. package/dist/styles/globals.css +3 -209
  42. package/docs/agents/nadicodeai-ui.md +4 -6
  43. package/docs/component-classification.md +1 -1
  44. package/docs/consuming-cross-repo.md +9 -3
  45. package/docs/contract.md +6 -6
  46. package/docs/migration/base-ui-migration.md +0 -11
  47. package/docs/product-compositions.md +1 -1
  48. package/llms.txt +5 -6
  49. package/package.json +10 -28
  50. package/skills/nadicodeai-ui/SKILL.md +5 -7
  51. package/dist/ai-elements.d.ts +0 -49
  52. package/dist/ai-elements.d.ts.map +0 -1
  53. package/dist/ai-elements.js +0 -48
  54. package/dist/components/agent-avatar.d.ts +0 -7
  55. package/dist/components/agent-avatar.d.ts.map +0 -1
  56. package/dist/components/agent-avatar.js +0 -6
  57. package/dist/components/agent-chat.d.ts +0 -20
  58. package/dist/components/agent-chat.d.ts.map +0 -1
  59. package/dist/components/agent-chat.js +0 -10
  60. package/dist/components/agent-composer.d.ts +0 -56
  61. package/dist/components/agent-composer.d.ts.map +0 -1
  62. package/dist/components/agent-composer.js +0 -56
  63. package/dist/components/agent-message.d.ts +0 -117
  64. package/dist/components/agent-message.d.ts.map +0 -1
  65. package/dist/components/agent-message.js +0 -99
  66. package/dist/components/agent-thread.d.ts +0 -26
  67. package/dist/components/agent-thread.d.ts.map +0 -1
  68. package/dist/components/agent-thread.js +0 -63
  69. package/dist/components/agent-tool-approval.d.ts +0 -27
  70. package/dist/components/agent-tool-approval.d.ts.map +0 -1
  71. package/dist/components/agent-tool-approval.js +0 -43
  72. package/dist/components/ai-elements/agent.d.ts +0 -27
  73. package/dist/components/ai-elements/agent.d.ts.map +0 -1
  74. package/dist/components/ai-elements/agent.js +0 -25
  75. package/dist/components/ai-elements/artifact.d.ts +0 -24
  76. package/dist/components/ai-elements/artifact.d.ts.map +0 -1
  77. package/dist/components/ai-elements/artifact.js +0 -20
  78. package/dist/components/ai-elements/attachments.d.ts +0 -55
  79. package/dist/components/ai-elements/attachments.d.ts.map +0 -1
  80. package/dist/components/ai-elements/attachments.js +0 -125
  81. package/dist/components/ai-elements/audio-player.d.ts +0 -30
  82. package/dist/components/ai-elements/audio-player.d.ts.map +0 -1
  83. package/dist/components/ai-elements/audio-player.js +0 -41
  84. package/dist/components/ai-elements/canvas.d.ts +0 -8
  85. package/dist/components/ai-elements/canvas.d.ts.map +0 -1
  86. package/dist/components/ai-elements/canvas.js +0 -5
  87. package/dist/components/ai-elements/chain-of-thought.d.ts +0 -30
  88. package/dist/components/ai-elements/chain-of-thought.d.ts.map +0 -1
  89. package/dist/components/ai-elements/chain-of-thought.js +0 -49
  90. package/dist/components/ai-elements/checkpoint.d.ts +0 -12
  91. package/dist/components/ai-elements/checkpoint.d.ts.map +0 -1
  92. package/dist/components/ai-elements/checkpoint.js +0 -10
  93. package/dist/components/ai-elements/code-block.d.ts +0 -53
  94. package/dist/components/ai-elements/code-block.d.ts.map +0 -1
  95. package/dist/components/ai-elements/code-block.js +0 -239
  96. package/dist/components/ai-elements/commit.d.ts +0 -65
  97. package/dist/components/ai-elements/commit.d.ts.map +0 -1
  98. package/dist/components/ai-elements/commit.js +0 -83
  99. package/dist/components/ai-elements/confirmation.d.ts +0 -50
  100. package/dist/components/ai-elements/confirmation.d.ts.map +0 -1
  101. package/dist/components/ai-elements/confirmation.js +0 -57
  102. package/dist/components/ai-elements/connection.d.ts +0 -6
  103. package/dist/components/ai-elements/connection.d.ts.map +0 -1
  104. package/dist/components/ai-elements/connection.js +0 -10
  105. package/dist/components/ai-elements/context.d.ts +0 -33
  106. package/dist/components/ai-elements/context.d.ts.map +0 -1
  107. package/dist/components/ai-elements/context.js +0 -147
  108. package/dist/components/ai-elements/controls.d.ts +0 -5
  109. package/dist/components/ai-elements/controls.d.ts.map +0 -1
  110. package/dist/components/ai-elements/controls.js +0 -5
  111. package/dist/components/ai-elements/conversation.d.ts +0 -24
  112. package/dist/components/ai-elements/conversation.d.ts.map +0 -1
  113. package/dist/components/ai-elements/conversation.js +0 -41
  114. package/dist/components/ai-elements/edge.d.ts +0 -6
  115. package/dist/components/ai-elements/edge.d.ts.map +0 -1
  116. package/dist/components/ai-elements/edge.js +0 -88
  117. package/dist/components/ai-elements/environment-variables.d.ts +0 -39
  118. package/dist/components/ai-elements/environment-variables.d.ts.map +0 -1
  119. package/dist/components/ai-elements/environment-variables.js +0 -60
  120. package/dist/components/ai-elements/file-tree.d.ts +0 -27
  121. package/dist/components/ai-elements/file-tree.d.ts.map +0 -1
  122. package/dist/components/ai-elements/file-tree.js +0 -73
  123. package/dist/components/ai-elements/image.d.ts +0 -7
  124. package/dist/components/ai-elements/image.d.ts.map +0 -1
  125. package/dist/components/ai-elements/image.js +0 -3
  126. package/dist/components/ai-elements/inline-citation.d.ts +0 -39
  127. package/dist/components/ai-elements/inline-citation.d.ts.map +0 -1
  128. package/dist/components/ai-elements/inline-citation.js +0 -86
  129. package/dist/components/ai-elements/jsx-preview.d.ts +0 -30
  130. package/dist/components/ai-elements/jsx-preview.d.ts.map +0 -1
  131. package/dist/components/ai-elements/jsx-preview.js +0 -159
  132. package/dist/components/ai-elements/message.d.ts +0 -38
  133. package/dist/components/ai-elements/message.d.ts.map +0 -1
  134. package/dist/components/ai-elements/message.js +0 -91
  135. package/dist/components/ai-elements/mic-selector.d.ts +0 -46
  136. package/dist/components/ai-elements/mic-selector.d.ts.map +0 -1
  137. package/dist/components/ai-elements/mic-selector.js +0 -180
  138. package/dist/components/ai-elements/model-selector.d.ts +0 -36
  139. package/dist/components/ai-elements/model-selector.d.ts.map +0 -1
  140. package/dist/components/ai-elements/model-selector.js +0 -18
  141. package/dist/components/ai-elements/node.d.ts +0 -22
  142. package/dist/components/ai-elements/node.d.ts.map +0 -1
  143. package/dist/components/ai-elements/node.js +0 -12
  144. package/dist/components/ai-elements/open-in-chat.d.ts +0 -27
  145. package/dist/components/ai-elements/open-in-chat.d.ts.map +0 -1
  146. package/dist/components/ai-elements/open-in-chat.js +0 -81
  147. package/dist/components/ai-elements/package-info.d.ts +0 -30
  148. package/dist/components/ai-elements/package-info.d.ts.map +0 -1
  149. package/dist/components/ai-elements/package-info.js +0 -50
  150. package/dist/components/ai-elements/panel.d.ts +0 -6
  151. package/dist/components/ai-elements/panel.d.ts.map +0 -1
  152. package/dist/components/ai-elements/panel.js +0 -5
  153. package/dist/components/ai-elements/persona.d.ts +0 -49
  154. package/dist/components/ai-elements/persona.d.ts.map +0 -1
  155. package/dist/components/ai-elements/persona.js +0 -175
  156. package/dist/components/ai-elements/plan.d.ts +0 -27
  157. package/dist/components/ai-elements/plan.d.ts.map +0 -1
  158. package/dist/components/ai-elements/plan.js +0 -34
  159. package/dist/components/ai-elements/prompt-input.d.ts +0 -149
  160. package/dist/components/ai-elements/prompt-input.d.ts.map +0 -1
  161. package/dist/components/ai-elements/prompt-input.js +0 -704
  162. package/dist/components/ai-elements/queue.d.ts +0 -62
  163. package/dist/components/ai-elements/queue.d.ts.map +0 -1
  164. package/dist/components/ai-elements/queue.js +0 -24
  165. package/dist/components/ai-elements/reasoning.d.ts +0 -27
  166. package/dist/components/ai-elements/reasoning.d.ts.map +0 -1
  167. package/dist/components/ai-elements/reasoning.js +0 -92
  168. package/dist/components/ai-elements/sandbox.d.ts +0 -25
  169. package/dist/components/ai-elements/sandbox.d.ts.map +0 -1
  170. package/dist/components/ai-elements/sandbox.js +0 -15
  171. package/dist/components/ai-elements/schema-display.d.ts +0 -56
  172. package/dist/components/ai-elements/schema-display.d.ts.map +0 -1
  173. package/dist/components/ai-elements/schema-display.js +0 -90
  174. package/dist/components/ai-elements/shimmer.d.ts +0 -10
  175. package/dist/components/ai-elements/shimmer.d.ts.map +0 -1
  176. package/dist/components/ai-elements/shimmer.js +0 -11
  177. package/dist/components/ai-elements/snippet.d.ts +0 -19
  178. package/dist/components/ai-elements/snippet.d.ts.map +0 -1
  179. package/dist/components/ai-elements/snippet.js +0 -32
  180. package/dist/components/ai-elements/sources.d.ts +0 -13
  181. package/dist/components/ai-elements/sources.d.ts.map +0 -1
  182. package/dist/components/ai-elements/sources.js +0 -9
  183. package/dist/components/ai-elements/speech-input.d.ts +0 -55
  184. package/dist/components/ai-elements/speech-input.d.ts.map +0 -1
  185. package/dist/components/ai-elements/speech-input.js +0 -187
  186. package/dist/components/ai-elements/stack-trace.d.ts +0 -38
  187. package/dist/components/ai-elements/stack-trace.d.ts.map +0 -1
  188. package/dist/components/ai-elements/stack-trace.js +0 -181
  189. package/dist/components/ai-elements/suggestion.d.ts +0 -11
  190. package/dist/components/ai-elements/suggestion.d.ts.map +0 -1
  191. package/dist/components/ai-elements/suggestion.js +0 -13
  192. package/dist/components/ai-elements/task.d.ts +0 -15
  193. package/dist/components/ai-elements/task.d.ts.map +0 -1
  194. package/dist/components/ai-elements/task.js +0 -10
  195. package/dist/components/ai-elements/terminal.d.ts +0 -28
  196. package/dist/components/ai-elements/terminal.d.ts.map +0 -1
  197. package/dist/components/ai-elements/terminal.js +0 -55
  198. package/dist/components/ai-elements/test-results.d.ts +0 -59
  199. package/dist/components/ai-elements/test-results.d.ts.map +0 -1
  200. package/dist/components/ai-elements/test-results.js +0 -98
  201. package/dist/components/ai-elements/tool.d.ts +0 -32
  202. package/dist/components/ai-elements/tool.d.ts.map +0 -1
  203. package/dist/components/ai-elements/tool.js +0 -49
  204. package/dist/components/ai-elements/toolbar.d.ts +0 -6
  205. package/dist/components/ai-elements/toolbar.d.ts.map +0 -1
  206. package/dist/components/ai-elements/toolbar.js +0 -5
  207. package/dist/components/ai-elements/transcription.d.ts +0 -17
  208. package/dist/components/ai-elements/transcription.d.ts.map +0 -1
  209. package/dist/components/ai-elements/transcription.js +0 -36
  210. package/dist/components/ai-elements/voice-selector.d.ts +0 -65
  211. package/dist/components/ai-elements/voice-selector.d.ts.map +0 -1
  212. package/dist/components/ai-elements/voice-selector.js +0 -224
  213. package/dist/components/ai-elements/web-preview.d.ts +0 -35
  214. package/dist/components/ai-elements/web-preview.d.ts.map +0 -1
  215. package/dist/components/ai-elements/web-preview.js +0 -66
  216. package/dist/components/artifact-panel.d.ts +0 -130
  217. package/dist/components/artifact-panel.d.ts.map +0 -1
  218. package/dist/components/artifact-panel.js +0 -180
  219. package/dist/components/attachment.d.ts +0 -24
  220. package/dist/components/attachment.d.ts.map +0 -1
  221. package/dist/components/attachment.js +0 -68
  222. package/dist/components/bubble.d.ts +0 -17
  223. package/dist/components/bubble.d.ts.map +0 -1
  224. package/dist/components/bubble.js +0 -59
  225. package/dist/components/demo-surface.d.ts +0 -34
  226. package/dist/components/demo-surface.d.ts.map +0 -1
  227. package/dist/components/demo-surface.js +0 -21
  228. package/dist/components/files-preview.d.ts +0 -36
  229. package/dist/components/files-preview.d.ts.map +0 -1
  230. package/dist/components/files-preview.js +0 -85
  231. package/dist/components/marker.d.ts +0 -11
  232. package/dist/components/marker.d.ts.map +0 -1
  233. package/dist/components/marker.js +0 -34
  234. package/dist/components/message-scroller.d.ts +0 -17
  235. package/dist/components/message-scroller.d.ts.map +0 -1
  236. package/dist/components/message-scroller.js +0 -29
  237. package/dist/components/message.d.ts +0 -11
  238. package/dist/components/message.d.ts.map +0 -1
  239. package/dist/components/message.js +0 -21
  240. package/dist/components/state-notice.d.ts +0 -13
  241. package/dist/components/state-notice.d.ts.map +0 -1
  242. package/dist/components/state-notice.js +0 -8
  243. package/dist/components/watch-it-work-band.d.ts +0 -12
  244. package/dist/components/watch-it-work-band.d.ts.map +0 -1
  245. package/dist/components/watch-it-work-band.js +0 -8
  246. package/dist/hooks/use-controllable-state.d.ts +0 -9
  247. package/dist/hooks/use-controllable-state.d.ts.map +0 -1
  248. package/dist/hooks/use-controllable-state.js +0 -23
  249. package/dist/lib/agent-attachment.d.ts +0 -11
  250. package/dist/lib/agent-attachment.d.ts.map +0 -1
  251. package/dist/lib/agent-attachment.js +0 -19
  252. package/dist/lib/agent-contracts.d.ts +0 -132
  253. package/dist/lib/agent-contracts.d.ts.map +0 -1
  254. package/dist/lib/agent-contracts.js +0 -6
  255. package/dist/lib/agent-state.d.ts +0 -22
  256. package/dist/lib/agent-state.d.ts.map +0 -1
  257. package/dist/lib/agent-state.js +0 -96
  258. package/dist/lib/agent-work-state.d.ts +0 -36
  259. package/dist/lib/agent-work-state.d.ts.map +0 -1
  260. package/dist/lib/agent-work-state.js +0 -36
  261. package/dist/lib/message-scroller-primitive/components.d.ts +0 -17
  262. package/dist/lib/message-scroller-primitive/components.d.ts.map +0 -1
  263. package/dist/lib/message-scroller-primitive/components.js +0 -204
  264. package/dist/lib/message-scroller-primitive/geometry.d.ts +0 -51
  265. package/dist/lib/message-scroller-primitive/geometry.d.ts.map +0 -1
  266. package/dist/lib/message-scroller-primitive/geometry.js +0 -199
  267. package/dist/lib/message-scroller-primitive/index.d.ts +0 -12
  268. package/dist/lib/message-scroller-primitive/index.d.ts.map +0 -1
  269. package/dist/lib/message-scroller-primitive/index.js +0 -12
  270. package/dist/lib/message-scroller-primitive/stores.d.ts +0 -6
  271. package/dist/lib/message-scroller-primitive/stores.d.ts.map +0 -1
  272. package/dist/lib/message-scroller-primitive/stores.js +0 -53
  273. package/dist/lib/message-scroller-primitive/types.d.ts +0 -88
  274. package/dist/lib/message-scroller-primitive/types.d.ts.map +0 -1
  275. package/dist/lib/message-scroller-primitive/types.js +0 -40
  276. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts +0 -19
  277. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts.map +0 -1
  278. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.js +0 -188
  279. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts +0 -7
  280. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts.map +0 -1
  281. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.js +0 -506
  282. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts +0 -49
  283. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts.map +0 -1
  284. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.js +0 -90
  285. package/dist/lib/message-scroller-primitive/use-render.d.ts +0 -22
  286. package/dist/lib/message-scroller-primitive/use-render.d.ts.map +0 -1
  287. package/dist/lib/message-scroller-primitive/use-render.js +0 -113
  288. package/dist/lib/message-scroller-primitive/utils.d.ts +0 -4
  289. package/dist/lib/message-scroller-primitive/utils.d.ts.map +0 -1
  290. package/dist/lib/message-scroller-primitive/utils.js +0 -9
  291. package/docs/agent-work-surfaces.md +0 -132
  292. package/docs/migration/ai-elements-vendoring.md +0 -29
  293. package/docs/terminal-tui-semantics.md +0 -172
package/AGENTS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @nadicodeai/ui - Agent Rules
2
2
 
3
- The `@nadicodeai/ui` npm workspace: the shared NadicodeAI React UI package on brand tokens (Tailwind v4, semantic light/dark roles). It ships shadcn primitives backed by Base UI, AI Elements, React adapters over the design-system grammar, reusable marketing/section compositions, and plan-approved product components. Source-authored in `src/`, published from built `dist/`. The package's normative rules (styling and shape invariants, admission, accessibility tier, section vocabulary, consumer boundary) live in `docs/contract.md`; read it before changing the component library.
3
+ The `@nadicodeai/ui` npm workspace: the shared NadicodeAI React UI package on brand tokens (Tailwind v4, semantic light/dark roles). It ships shadcn primitives backed by Base UI, the `@nadicodeai/ui/agents` interface, React adapters over the design-system grammar, reusable marketing/section compositions, and plan-approved product components. Source-authored in `src/`, published from built `dist/`. The package's normative rules (styling and shape invariants, admission, accessibility tier, section vocabulary, consumer boundary) live in `docs/contract.md`; read it before changing the component library.
4
4
 
5
5
  ## Commands
6
6
 
@@ -25,11 +25,10 @@ The `@nadicodeai/ui` npm workspace: the shared NadicodeAI React UI package on br
25
25
  | Token, mode, theme, cascade, and public stylesheet architecture | `../../design-system/DESIGN.md` (this package does not own a second token map) |
26
26
  | Motion behavior | `../../design-system/DESIGN.md` "Motion", `src/lib/motion.ts`, then `../../skills/nadicodeai-product-design/references/motion-craft.md` for agent procedure |
27
27
  | Which component subpaths exist | `package.json` `exports` (the `./components/*` wildcard over `src/components/` source is the whole surface; never maintain a hand-copied list) |
28
- | shadcn / AI Elements discovery | Live shadcn MCP or CLI (`npx shadcn@latest info\|search\|docs\|view\|add --dry-run`, see `../../skills/shadcn/SKILL.md`); no committed registry inventory or snapshot exists, and `--overwrite` needs an explicit maintainer ask plus a reviewed diff |
28
+ | shadcn / assistant-ui discovery | Live shadcn and assistant-ui CLIs (`npx shadcn@latest info\|search\|docs\|view\|add --dry-run`, `npx assistant-ui@latest add --help`); no committed registry inventory or snapshot exists, and `--overwrite` needs an explicit maintainer ask plus a reviewed diff |
29
29
  | Releasing / publishing | `../../docs/internal/npm-publishing.md` (release decision enforced by the pre-push gate; detail in `docs/contract.md`) |
30
30
  | Tokens, geometry, and the CSS the package composes | `../../design-system/AGENTS.md` and `design-system/DESIGN.md` |
31
31
  | Website page assembly | `../../website/AGENTS.md` |
32
32
  | Portal screens | `../../portal/AGENTS.md` |
33
33
  | User-visible UI work | `../../skills/nadicodeai-product-design/SKILL.md`, loaded after this rulebook |
34
- | TUI semantics | `docs/terminal-tui-semantics.md` |
35
34
  | Docs shipped to package consumers | `docs/contract.md` owns invariants, `docs/consuming-cross-repo.md` owns setup, and `llms.txt`, `docs/agents/nadicodeai-ui.md`, `docs/migration/`, and `skills/nadicodeai-ui/SKILL.md` map to those owners while documenting their own component or workflow surface |
package/README.md CHANGED
@@ -14,8 +14,7 @@ and tests exist together.
14
14
  The package ships:
15
15
 
16
16
  - shadcn source components under `@nadicodeai/ui/components/*`, backed by Base UI primitives where a headless primitive is needed
17
- - Vercel AI Elements under `@nadicodeai/ui/components/ai-elements/*`
18
- - an AI Elements barrel at `@nadicodeai/ui/ai-elements`
17
+ - the Agent UI interface at `@nadicodeai/ui/agents`
19
18
  - React adapters over the design-system grammar and assets
20
19
  - reusable marketing/section compositions
21
20
  - presentational product components for shared application surfaces
@@ -23,8 +22,9 @@ The package ships:
23
22
  `docs/agents/nadicodeai-ui.md`, `docs/migration/`, and
24
23
  `skills/nadicodeai-ui/SKILL.md`
25
24
 
26
- The package surface is source-backed. `src/components/` is a flat shadcn-style
27
- source surface; do not document folders or package namespaces that do not exist.
25
+ The package surface is source-backed and flat under `src/components/`. Reviewed
26
+ third-party registry source stays under `src/internal/` and is not a package
27
+ namespace. Do not document folders or package namespaces that do not exist.
28
28
  Do not add top-level exports for recipes, blocks, agent, or terminal groupings
29
29
  until a concrete package API decision adds source, built files, docs, and tests
30
30
  together. Routes, persistence, auth behavior, server state, runtime adapters,
@@ -57,30 +57,24 @@ Prefer direct subpath imports in app code:
57
57
  ```tsx
58
58
  import { Button } from "@nadicodeai/ui/components/button";
59
59
  import { PageFrame } from "@nadicodeai/ui/components/page-frame";
60
- import { Message } from "@nadicodeai/ui/components/ai-elements/message";
60
+ import { Thread } from "@nadicodeai/ui/agents";
61
61
  ```
62
62
 
63
63
  The root export is available for tooling and DX, but direct component subpaths
64
64
  keep package use explicit and friendly to bundlers.
65
65
 
66
- AI Elements can also be imported from the dedicated barrel:
67
-
68
- ```tsx
69
- import { Message, PromptInput, Reasoning, Tool } from "@nadicodeai/ui/ai-elements";
70
- ```
71
-
72
66
  Product components use the same public component subpaths:
73
67
 
74
68
  ```tsx
75
69
  import { DashboardShell } from "@nadicodeai/ui/components/dashboard-shell";
76
- import { AgentChat } from "@nadicodeai/ui/components/agent-chat";
70
+ import { Thread } from "@nadicodeai/ui/agents";
77
71
  ```
78
72
 
79
73
  ## Discover components
80
74
 
81
75
  The component inventory is generated from source instead of maintained in
82
76
  prose. In this repository, `src/components/**/*.tsx` owns the module set;
83
- `src/index.ts` and `src/ai-elements.ts` own the barrels. `package.json` exposes
77
+ `src/index.ts` owns the barrel. `package.json` exposes
84
78
  that source-backed surface through `./components/*`, and the build writes the
85
79
  consumer view to `dist/components/**/*.d.ts`.
86
80
 
@@ -92,9 +86,9 @@ exports, and prop types.
92
86
 
93
87
  [`docs/contract.md`](docs/contract.md) owns the package/consumer boundary,
94
88
  admission rules, and accessibility invariants. Current modules are discovered
95
- from source and package exports, not from prose. Agent work-surface behavior,
96
- terminal semantics, and migration readiness each live in the linked package
97
- docs; this README does not summarize them.
89
+ from source and package exports, not from prose. assistant-ui runtime ownership
90
+ and migration readiness live in the linked package docs; this README does not
91
+ summarize them.
98
92
 
99
93
  ## Layout primitives
100
94
 
@@ -120,10 +114,10 @@ panels. `surface` also lands on a `data-surface` attribute. Pass `className`,
120
114
  detail (no public subpath export); couple to `SeamGrid` and its `surface` prop,
121
115
  not to the underlying arbitrary Tailwind class string.
122
116
 
123
- ## shadcn and AI Elements discovery
117
+ ## Registry maintenance
124
118
 
125
- Use shadcn MCP or the CLI for live discovery and install guidance while working
126
- in this package. Do not maintain a committed upstream registry inventory,
119
+ Use shadcn MCP or the CLI for live discovery and registry maintenance while
120
+ working in this package. Do not maintain a committed upstream registry inventory,
127
121
  registry snapshot, or inventory update script in `@nadicodeai/ui`; the source
128
122
  files and package exports are the committed surface.
129
123
 
@@ -139,11 +133,10 @@ When MCP is unavailable, use the CLI directly:
139
133
  ```bash
140
134
  npx shadcn@latest info --json
141
135
  npx shadcn@latest search @shadcn -q "select" --json
142
- npx shadcn@latest search @ai-elements -q "message" --json
143
136
  npx shadcn@latest docs button select dialog --json
144
137
  npx shadcn@latest view @shadcn/button
145
138
  npx shadcn@latest add @shadcn/button --dry-run
146
- npx shadcn@latest add @ai-elements/message --dry-run
139
+ npx assistant-ui@latest add thread --help
147
140
  ```
148
141
 
149
142
  `info --json` is the project-aware source of truth for aliases, Tailwind version,
@@ -0,0 +1,10 @@
1
+ export * from "@assistant-ui/react";
2
+ export * from "./internal/assistant-ui/attachment";
3
+ export * from "./internal/assistant-ui/follow-up-suggestions";
4
+ export * from "./internal/assistant-ui/markdown-text";
5
+ export * from "./internal/assistant-ui/reasoning";
6
+ export * from "./internal/assistant-ui/thread";
7
+ export * from "./internal/assistant-ui/tool-fallback";
8
+ export * from "./internal/assistant-ui/tool-group";
9
+ export * from "./internal/assistant-ui/tooltip-icon-button";
10
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AAEpC,cAAc,oCAAoC,CAAC;AACnD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,oCAAoC,CAAC;AACnD,cAAc,6CAA6C,CAAC"}
package/dist/agents.js ADDED
@@ -0,0 +1,9 @@
1
+ export * from "@assistant-ui/react";
2
+ export * from "./internal/assistant-ui/attachment.js";
3
+ export * from "./internal/assistant-ui/follow-up-suggestions.js";
4
+ export * from "./internal/assistant-ui/markdown-text.js";
5
+ export * from "./internal/assistant-ui/reasoning.js";
6
+ export * from "./internal/assistant-ui/thread.js";
7
+ export * from "./internal/assistant-ui/tool-fallback.js";
8
+ export * from "./internal/assistant-ui/tool-group.js";
9
+ export * from "./internal/assistant-ui/tooltip-icon-button.js";
@@ -1,7 +1,7 @@
1
1
  import { useRender } from "@base-ui/react/use-render";
2
2
  import { type VariantProps } from "class-variance-authority";
3
3
  declare const badgeVariants: (props?: ({
4
- variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
4
+ variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "destructive" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
6
  declare function Badge({ className, variant, render, ...props }: useRender.ComponentProps<"span"> & VariantProps<typeof badgeVariants>): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
7
7
  export { Badge, badgeVariants };
@@ -1,7 +1,7 @@
1
1
  import { Button as ButtonPrimitive } from "@base-ui/react/button";
2
2
  import { type VariantProps } from "class-variance-authority";
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | "brandGhost" | "brandSolid" | "onPrimary" | null | undefined;
4
+ variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "brandGhost" | "brandSolid" | "destructive" | "onPrimary" | null | undefined;
5
5
  size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  declare function Button({ className, variant, size, ...props }: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>): import("react").JSX.Element;
@@ -1,6 +1,5 @@
1
1
  import * as React from "react";
2
- import { type DemoSurfaceLabels, type DemoSurfaceScript } from "./demo-surface";
3
- declare function UseCaseBento({ kicker, title, body, proof, proofLabel, media, mediaClassName, demo, demoLabels, className, ...props }: React.ComponentProps<"article"> & {
2
+ declare function UseCaseBento({ kicker, title, body, proof, proofLabel, media, mediaClassName, demo, className, ...props }: React.ComponentProps<"article"> & {
4
3
  kicker: string;
5
4
  title: string;
6
5
  body: string;
@@ -8,8 +7,7 @@ declare function UseCaseBento({ kicker, title, body, proof, proofLabel, media, m
8
7
  proofLabel?: string;
9
8
  media: React.ReactNode;
10
9
  mediaClassName?: string;
11
- demo: DemoSurfaceScript;
12
- demoLabels?: Partial<DemoSurfaceLabels>;
10
+ demo: React.ReactNode;
13
11
  }): React.JSX.Element;
14
12
  export { UseCaseBento };
15
13
  //# sourceMappingURL=use-case-bento.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-case-bento.d.ts","sourceRoot":"","sources":["../../src/components/use-case-bento.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAe,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG7F,iBAAS,YAAY,CAAC,EACpB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,UAAmC,EACnC,KAAK,EACL,cAAc,EACd,IAAI,EACJ,UAAU,EACV,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACzC,qBAqCA;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"use-case-bento.d.ts","sourceRoot":"","sources":["../../src/components/use-case-bento.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,iBAAS,YAAY,CAAC,EACpB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,UAAmC,EACnC,KAAK,EACL,cAAc,EACd,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;CACvB,qBAmCA;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1,9 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cn } from "../lib/utils.js";
3
3
  import { Bento, BentoCopy, BentoDemo, BentoItem, BentoMedia } from "./bento.js";
4
- import { DemoSurface } from "./demo-surface.js";
5
4
  import { MediaMount } from "./media-mount.js";
6
- function UseCaseBento({ kicker, title, body, proof, proofLabel = "What the agent shows", media, mediaClassName, demo, demoLabels, className, ...props }) {
7
- return (_jsx("article", { "data-slot": "use-case-bento", className: className, ...props, children: _jsxs(Bento, { height: "primary", children: [_jsxs(BentoItem, { span: 3, children: [_jsx("div", { className: "nc-artifact-surface pointer-events-none absolute inset-0 border-0 p-0 opacity-60", "aria-hidden": "true" }), _jsxs(BentoCopy, { children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: kicker }), _jsx("h3", { className: "nc-type-title-md text-foreground", children: title }), _jsx("p", { className: "nc-type-body-sm text-[var(--nc-body)]", children: body }), _jsxs("div", { className: "grid gap-2 border-t border-border pt-4", children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: proofLabel }), _jsx("p", { className: "nc-type-body-sm text-foreground", children: proof })] })] })] }), _jsx(BentoItem, { span: 5, flush: true, stretch: true, className: "min-h-[var(--nc-h-bento-primary)]", children: _jsx(BentoMedia, { children: _jsx(MediaMount, { ratio: "auto", className: cn("!h-full min-h-[var(--nc-h-bento-primary)]", mediaClassName), children: media }) }) }), _jsx(BentoItem, { span: 4, surface: "soft", stretch: true, className: "min-h-0 p-[var(--nc-sm)]", children: _jsx(BentoDemo, { children: _jsx(DemoSurface, { labels: demoLabels, script: demo, title: title }) }) })] }) }));
5
+ function UseCaseBento({ kicker, title, body, proof, proofLabel = "What the agent shows", media, mediaClassName, demo, className, ...props }) {
6
+ return (_jsx("article", { "data-slot": "use-case-bento", className: className, ...props, children: _jsxs(Bento, { height: "primary", children: [_jsxs(BentoItem, { span: 3, children: [_jsx("div", { className: "nc-artifact-surface pointer-events-none absolute inset-0 border-0 p-0 opacity-60", "aria-hidden": "true" }), _jsxs(BentoCopy, { children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: kicker }), _jsx("h3", { className: "nc-type-title-md text-foreground", children: title }), _jsx("p", { className: "nc-type-body-sm text-[var(--nc-body)]", children: body }), _jsxs("div", { className: "grid gap-2 border-t border-border pt-4", children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: proofLabel }), _jsx("p", { className: "nc-type-body-sm text-foreground", children: proof })] })] })] }), _jsx(BentoItem, { span: 5, flush: true, stretch: true, className: "min-h-[var(--nc-h-bento-primary)]", children: _jsx(BentoMedia, { children: _jsx(MediaMount, { ratio: "auto", className: cn("!h-full min-h-[var(--nc-h-bento-primary)]", mediaClassName), children: media }) }) }), _jsx(BentoItem, { span: 4, surface: "soft", stretch: true, className: "min-h-0 p-[var(--nc-sm)]", children: _jsx(BentoDemo, { children: demo }) })] }) }));
8
7
  }
9
8
  export { UseCaseBento };
@@ -1,5 +1,4 @@
1
1
  export { useBelowBreakpoint } from "./use-below-breakpoint";
2
2
  export { useConfirmAction } from "./use-confirm-action";
3
- export * from "./use-controllable-state";
4
3
  export * from "./use-mobile";
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,cAAc,cAAc,CAAC"}
@@ -1,4 +1,3 @@
1
1
  export { useBelowBreakpoint } from "./use-below-breakpoint.js";
2
2
  export { useConfirmAction } from "./use-confirm-action.js";
3
- export * from "./use-controllable-state.js";
4
3
  export * from "./use-mobile.js";
package/dist/index.d.ts CHANGED
@@ -1,17 +1,9 @@
1
1
  export * from "./components/accordion";
2
2
  export * from "./components/action-band";
3
3
  export * from "./components/action-status";
4
- export * from "./components/agent-avatar";
5
- export * from "./components/agent-chat";
6
- export * from "./components/agent-composer";
7
- export * from "./components/agent-message";
8
- export * from "./components/agent-thread";
9
- export * from "./components/agent-tool-approval";
10
4
  export * from "./components/alert";
11
5
  export * from "./components/alert-dialog";
12
- export * from "./components/artifact-panel";
13
6
  export * from "./components/aspect-ratio";
14
- export * from "./components/attachment";
15
7
  export * from "./components/automation-section";
16
8
  export * from "./components/avatar";
17
9
  export * from "./components/badge";
@@ -21,7 +13,6 @@ export * from "./components/brand";
21
13
  export * from "./components/brand-field";
22
14
  export * from "./components/brand-icons";
23
15
  export * from "./components/breadcrumb";
24
- export * from "./components/bubble";
25
16
  export * from "./components/button";
26
17
  export * from "./components/button-group";
27
18
  export * from "./components/calendar";
@@ -47,7 +38,6 @@ export * from "./components/confirm-dialog";
47
38
  export * from "./components/contact";
48
39
  export * from "./components/context-menu";
49
40
  export * from "./components/dashboard-shell";
50
- export * from "./components/demo-surface";
51
41
  export * from "./components/desktop-shell";
52
42
  export * from "./components/dialog";
53
43
  export * from "./components/diff-count";
@@ -65,7 +55,6 @@ export * from "./components/feature-rows";
65
55
  export * from "./components/feedback-state";
66
56
  export * from "./components/field";
67
57
  export * from "./components/file-type-icon";
68
- export * from "./components/files-preview";
69
58
  export * from "./components/footer";
70
59
  export * from "./components/form";
71
60
  export * from "./components/glyph-spinner";
@@ -85,12 +74,9 @@ export * from "./components/label-system";
85
74
  export * from "./components/live-demo";
86
75
  export * from "./components/logo-band";
87
76
  export * from "./components/logo-tile";
88
- export * from "./components/marker";
89
77
  export * from "./components/media-mount";
90
78
  export * from "./components/memory-item";
91
79
  export * from "./components/menubar";
92
- export * from "./components/message";
93
- export * from "./components/message-scroller";
94
80
  export * from "./components/native-select";
95
81
  export * from "./components/nav-bar";
96
82
  export * from "./components/navigation-menu";
@@ -122,7 +108,6 @@ export * from "./components/slider";
122
108
  export * from "./components/sonner";
123
109
  export * from "./components/spinner";
124
110
  export * from "./components/stat-block";
125
- export * from "./components/state-notice";
126
111
  export * from "./components/statement";
127
112
  export * from "./components/stats-band";
128
113
  export * from "./components/status-dot";
@@ -142,5 +127,4 @@ export * from "./components/tool-icon";
142
127
  export * from "./components/tooltip";
143
128
  export * from "./components/usage-meter";
144
129
  export * from "./components/use-case-bento";
145
- export * from "./components/watch-it-work-band";
146
130
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -1,17 +1,9 @@
1
1
  export * from "./components/accordion.js";
2
2
  export * from "./components/action-band.js";
3
3
  export * from "./components/action-status.js";
4
- export * from "./components/agent-avatar.js";
5
- export * from "./components/agent-chat.js";
6
- export * from "./components/agent-composer.js";
7
- export * from "./components/agent-message.js";
8
- export * from "./components/agent-thread.js";
9
- export * from "./components/agent-tool-approval.js";
10
4
  export * from "./components/alert.js";
11
5
  export * from "./components/alert-dialog.js";
12
- export * from "./components/artifact-panel.js";
13
6
  export * from "./components/aspect-ratio.js";
14
- export * from "./components/attachment.js";
15
7
  export * from "./components/automation-section.js";
16
8
  export * from "./components/avatar.js";
17
9
  export * from "./components/badge.js";
@@ -21,7 +13,6 @@ export * from "./components/brand.js";
21
13
  export * from "./components/brand-field.js";
22
14
  export * from "./components/brand-icons.js";
23
15
  export * from "./components/breadcrumb.js";
24
- export * from "./components/bubble.js";
25
16
  export * from "./components/button.js";
26
17
  export * from "./components/button-group.js";
27
18
  export * from "./components/calendar.js";
@@ -47,7 +38,6 @@ export * from "./components/confirm-dialog.js";
47
38
  export * from "./components/contact.js";
48
39
  export * from "./components/context-menu.js";
49
40
  export * from "./components/dashboard-shell.js";
50
- export * from "./components/demo-surface.js";
51
41
  export * from "./components/desktop-shell.js";
52
42
  export * from "./components/dialog.js";
53
43
  export * from "./components/diff-count.js";
@@ -65,7 +55,6 @@ export * from "./components/feature-rows.js";
65
55
  export * from "./components/feedback-state.js";
66
56
  export * from "./components/field.js";
67
57
  export * from "./components/file-type-icon.js";
68
- export * from "./components/files-preview.js";
69
58
  export * from "./components/footer.js";
70
59
  export * from "./components/form.js";
71
60
  export * from "./components/glyph-spinner.js";
@@ -85,12 +74,9 @@ export * from "./components/label-system.js";
85
74
  export * from "./components/live-demo.js";
86
75
  export * from "./components/logo-band.js";
87
76
  export * from "./components/logo-tile.js";
88
- export * from "./components/marker.js";
89
77
  export * from "./components/media-mount.js";
90
78
  export * from "./components/memory-item.js";
91
79
  export * from "./components/menubar.js";
92
- export * from "./components/message.js";
93
- export * from "./components/message-scroller.js";
94
80
  export * from "./components/native-select.js";
95
81
  export * from "./components/nav-bar.js";
96
82
  export * from "./components/navigation-menu.js";
@@ -122,7 +108,6 @@ export * from "./components/slider.js";
122
108
  export * from "./components/sonner.js";
123
109
  export * from "./components/spinner.js";
124
110
  export * from "./components/stat-block.js";
125
- export * from "./components/state-notice.js";
126
111
  export * from "./components/statement.js";
127
112
  export * from "./components/stats-band.js";
128
113
  export * from "./components/status-dot.js";
@@ -142,4 +127,3 @@ export * from "./components/tool-icon.js";
142
127
  export * from "./components/tooltip.js";
143
128
  export * from "./components/usage-meter.js";
144
129
  export * from "./components/use-case-bento.js";
145
- export * from "./components/watch-it-work-band.js";
@@ -0,0 +1,5 @@
1
+ import { type FC } from "react";
2
+ export declare const UserMessageAttachments: FC;
3
+ export declare const ComposerAttachments: FC;
4
+ export declare const ComposerAddAttachment: FC;
5
+ //# sourceMappingURL=attachment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../../src/internal/assistant-ui/attachment.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+C,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAC;AAkN7F,eAAO,MAAM,sBAAsB,EAAE,EAMpC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,EAMjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,EAiBnC,CAAC"}
@@ -0,0 +1,93 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useState, isValidElement } from "react";
4
+ import { XIcon, PlusIcon, FileText, Loader2Icon, AlertCircleIcon } from "lucide-react";
5
+ import { AttachmentPrimitive, ComposerPrimitive, MessagePrimitive, useAuiState, useAui, } from "@assistant-ui/react";
6
+ import { useShallow } from "zustand/shallow";
7
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../../components/tooltip.js";
8
+ import { Dialog, DialogTitle, DialogContent, DialogTrigger } from "../../components/dialog.js";
9
+ import { Avatar, AvatarImage, AvatarFallback } from "../../components/avatar.js";
10
+ import { TooltipIconButton } from "./tooltip-icon-button.js";
11
+ import { cn } from "../../lib/utils.js";
12
+ const useFileSrc = (file) => {
13
+ const [src, setSrc] = useState(undefined);
14
+ useEffect(() => {
15
+ if (!file) {
16
+ setSrc(undefined);
17
+ return;
18
+ }
19
+ const objectUrl = URL.createObjectURL(file);
20
+ setSrc(objectUrl);
21
+ return () => {
22
+ URL.revokeObjectURL(objectUrl);
23
+ };
24
+ }, [file]);
25
+ return src;
26
+ };
27
+ const useAttachmentSrc = () => {
28
+ const { file, src } = useAuiState(useShallow((s) => {
29
+ if (s.attachment.type !== "image")
30
+ return {};
31
+ if (s.attachment.file)
32
+ return { file: s.attachment.file };
33
+ const src = s.attachment.content?.filter((c) => c.type === "image")[0]?.image;
34
+ if (!src)
35
+ return {};
36
+ return { src };
37
+ }));
38
+ return useFileSrc(file) ?? src;
39
+ };
40
+ const AttachmentPreview = ({ src }) => {
41
+ return (_jsx("img", { src: src, alt: "Attachment preview", className: "aui-attachment-preview-image block h-auto max-h-[80vh] w-auto max-w-full rounded-sm object-contain" }));
42
+ };
43
+ const AttachmentPreviewDialog = ({ children }) => {
44
+ const src = useAttachmentSrc();
45
+ if (!src)
46
+ return children;
47
+ return (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { nativeButton: false, className: "aui-attachment-preview-trigger", render: isValidElement(children) ? children : _jsx("button", { type: "button" }) }), _jsxs(DialogContent, { className: "aui-attachment-preview-dialog-content [&>button]:bg-foreground/60 [&>button]:hover:bg-foreground/80 [&_svg]:text-background p-2 sm:max-w-3xl [&>button]:rounded-full [&>button]:p-1 [&>button]:opacity-100 [&>button]:ring-0!", children: [_jsx(DialogTitle, { className: "aui-sr-only sr-only", children: "Image Attachment Preview" }), _jsx("div", { className: "aui-attachment-preview bg-background relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden rounded-sm", children: _jsx(AttachmentPreview, { src: src }) })] })] }));
48
+ };
49
+ const AttachmentThumb = () => {
50
+ const src = useAttachmentSrc();
51
+ return (_jsxs(Avatar, { className: "aui-attachment-tile-avatar h-full w-full rounded-none after:hidden", children: [_jsx(AvatarImage, { src: src, alt: "Attachment preview", className: "aui-attachment-tile-image object-cover" }), _jsx(AvatarFallback, { children: _jsx(FileText, { className: "aui-attachment-tile-fallback-icon text-muted-foreground/80 size-6 stroke-[1.5]" }) })] }));
52
+ };
53
+ const AttachmentUI = () => {
54
+ const aui = useAui();
55
+ const isComposer = aui.attachment.source !== "message";
56
+ const isImage = useAuiState((s) => s.attachment.type === "image");
57
+ const typeLabel = useAuiState((s) => {
58
+ const type = s.attachment.type;
59
+ switch (type) {
60
+ case "image":
61
+ return "Image";
62
+ case "document":
63
+ return "Document";
64
+ case "file":
65
+ return "File";
66
+ default:
67
+ return type;
68
+ }
69
+ });
70
+ const uploadState = useAuiState((s) => s.attachment.status.type === "running"
71
+ ? "uploading"
72
+ : s.attachment.status.type === "incomplete" && s.attachment.status.reason === "error"
73
+ ? "error"
74
+ : undefined);
75
+ const isUploading = uploadState === "uploading";
76
+ const isError = uploadState === "error";
77
+ const errorMessage = useAuiState((s) => s.attachment.status.type === "incomplete" && s.attachment.status.reason === "error"
78
+ ? (s.attachment.status.message ?? "Upload failed")
79
+ : undefined);
80
+ return (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsxs(AttachmentPrimitive.Root, { className: cn("aui-attachment-root relative", isComposer && "nc-transition-opacity", isImage && !isComposer && "aui-attachment-root-message only:*:first:size-24"), children: [_jsx(AttachmentPreviewDialog, { children: _jsxs(TooltipTrigger, { render: _jsx("div", { className: cn("aui-attachment-tile nc-transition-transform relative size-14 cursor-pointer overflow-hidden rounded-[calc(var(--composer-radius)-var(--composer-padding))] bg-muted outline-none after:pointer-events-none after:absolute after:inset-0 after:rounded-[inherit] after:ring-1 after:ring-border after:ring-inset focus-visible:ring-[length:var(--ring-width-focus)] focus-visible:ring-ring/50 hover:after:bg-foreground/10", isError && "after:ring-destructive/60"), role: "button", tabIndex: 0, "aria-label": `${typeLabel} attachment${isError ? ", upload failed" : isUploading ? ", uploading" : ""}` }), children: [_jsx(AttachmentThumb, {}), isUploading && (_jsx("div", { "aria-hidden": "true", className: "aui-attachment-tile-uploading nc-transition-opacity absolute inset-0 flex items-center justify-center bg-background/60 backdrop-blur-[2px]", children: _jsx(Loader2Icon, { className: "size-4 text-muted-foreground motion-safe:animate-spin motion-reduce:animate-pulse" }) })), isError && (_jsx("div", { "aria-hidden": "true", className: "aui-attachment-tile-error nc-transition-opacity absolute inset-0 flex items-center justify-center bg-background/70 backdrop-blur-[2px]", children: _jsx(AlertCircleIcon, { className: "text-destructive size-4" }) }))] }) }), isComposer && _jsx(AttachmentRemove, {})] }), _jsxs(TooltipContent, { side: "top", children: [_jsx(AttachmentPrimitive.Name, {}), errorMessage && _jsx("p", { className: "aui-attachment-error-message", children: errorMessage })] })] }) }));
81
+ };
82
+ const AttachmentRemove = () => {
83
+ return (_jsx(AttachmentPrimitive.Remove, { render: _jsx(TooltipIconButton, { tooltip: "Remove file", className: "aui-attachment-tile-remove absolute end-1 top-1 size-5 rounded-full bg-foreground/70! text-background! backdrop-blur-sm after:absolute after:-inset-1.5 hover:bg-foreground/85!", side: "top" }), children: _jsx(XIcon, { className: "aui-attachment-remove-icon size-3 stroke-[2.5]" }) }));
84
+ };
85
+ export const UserMessageAttachments = () => {
86
+ return (_jsx("div", { className: "aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2", children: _jsx(MessagePrimitive.Attachments, { children: () => _jsx(AttachmentUI, {}) }) }));
87
+ };
88
+ export const ComposerAttachments = () => {
89
+ return (_jsx("div", { className: "aui-composer-attachments flex w-full flex-row items-center gap-2 overflow-x-auto empty:hidden", children: _jsx(ComposerPrimitive.Attachments, { children: () => _jsx(AttachmentUI, {}) }) }));
90
+ };
91
+ export const ComposerAddAttachment = () => {
92
+ return (_jsx(ComposerPrimitive.AddAttachment, { render: _jsx(TooltipIconButton, { tooltip: "Add Attachment", side: "bottom", variant: "ghost", size: "icon", className: "aui-composer-add-attachment size-7 rounded-full p-1 text-xs font-semibold hover:bg-muted", "aria-label": "Add Attachment" }), children: _jsx(PlusIcon, { className: "aui-attachment-add-icon size-4.5 stroke-[1.5px]" }) }));
93
+ };
@@ -0,0 +1,3 @@
1
+ import { type FC } from "react";
2
+ export declare const ThreadFollowupSuggestions: FC;
3
+ //# sourceMappingURL=follow-up-suggestions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow-up-suggestions.d.ts","sourceRoot":"","sources":["../../../src/internal/assistant-ui/follow-up-suggestions.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAwBhC,eAAO,MAAM,yBAAyB,EAAE,EAMvC,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { AuiIf, ThreadPrimitive, useAuiState } from "@assistant-ui/react";
4
+ const FollowupSuggestionsRow = () => {
5
+ const suggestions = useAuiState((s) => s.thread.suggestions);
6
+ return (_jsx("div", { className: "aui-thread-followup-suggestions -my-1 w-full overflow-x-auto py-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", children: _jsx("div", { className: "mx-auto flex min-h-8 w-max items-center gap-2 px-0.5", children: suggestions.map((suggestion, index) => (_jsx(ThreadPrimitive.Suggestion, { className: "aui-thread-followup-suggestion nc-transition-paint rounded-full border bg-background px-3 py-1 text-sm whitespace-nowrap hover:bg-muted/80", prompt: suggestion.prompt, method: "replace", autoSend: true, children: suggestion.prompt }, index))) }) }));
7
+ };
8
+ export const ThreadFollowupSuggestions = () => (_jsx(AuiIf, { condition: (s) => !s.thread.isEmpty && !s.thread.isRunning && s.thread.suggestions.length > 0, children: _jsx(FollowupSuggestionsRow, {}) }));
@@ -0,0 +1,2 @@
1
+ export declare const MarkdownText: import("react").MemoExoticComponent<() => import("react").JSX.Element>;
2
+ //# sourceMappingURL=markdown-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-text.d.ts","sourceRoot":"","sources":["../../../src/internal/assistant-ui/markdown-text.tsx"],"names":[],"mappings":"AA2BA,eAAO,MAAM,YAAY,wEAAyB,CAAC"}
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { MarkdownTextPrimitive, unstable_memoizeMarkdownComponents as memoizeMarkdownComponents, useIsMarkdownCodeBlock, } from "@assistant-ui/react-markdown";
4
+ import remarkGfm from "remark-gfm";
5
+ import { memo } from "react";
6
+ import { CheckIcon, CopyIcon } from "lucide-react";
7
+ import { TooltipIconButton } from "./tooltip-icon-button.js";
8
+ import { useCopyToClipboard } from "../../lib/use-copy-to-clipboard.js";
9
+ import { cn } from "../../lib/utils.js";
10
+ const MarkdownTextImpl = () => {
11
+ return (_jsx(MarkdownTextPrimitive, { remarkPlugins: [remarkGfm], className: "aui-md", components: defaultComponents, defer: true }));
12
+ };
13
+ export const MarkdownText = memo(MarkdownTextImpl);
14
+ const CodeHeader = ({ language, code }) => {
15
+ const { isCopied, copyToClipboard } = useCopyToClipboard({
16
+ text: code,
17
+ timeout: 3000,
18
+ skipWhileCopied: true,
19
+ });
20
+ const onCopy = () => {
21
+ if (!code || isCopied)
22
+ return;
23
+ void copyToClipboard();
24
+ };
25
+ return (_jsxs("div", { className: "aui-code-header-root border-border/50 bg-muted/50 mt-3 flex items-center justify-between rounded-t-xl border border-b-0 px-3.5 py-1.5 text-xs", children: [_jsx("span", { className: "aui-code-header-language text-muted-foreground font-medium lowercase", children: language }), _jsxs(TooltipIconButton, { tooltip: "Copy", onClick: onCopy, children: [!isCopied && _jsx(CopyIcon, {}), isCopied && _jsx(CheckIcon, {})] })] }));
26
+ };
27
+ const defaultComponents = memoizeMarkdownComponents({
28
+ h1: ({ className, ...props }) => (_jsx("h1", { className: cn("aui-md-h1 mt-5 mb-2 scroll-m-20 text-xl font-semibold first:mt-0 last:mb-0", className), ...props })),
29
+ h2: ({ className, ...props }) => (_jsx("h2", { className: cn("aui-md-h2 mt-5 mb-2 scroll-m-20 text-lg font-semibold first:mt-0 last:mb-0", className), ...props })),
30
+ h3: ({ className, ...props }) => (_jsx("h3", { className: cn("aui-md-h3 mt-4 mb-1.5 scroll-m-20 text-base font-semibold first:mt-0 last:mb-0", className), ...props })),
31
+ h4: ({ className, ...props }) => (_jsx("h4", { className: cn("aui-md-h4 mt-3.5 mb-1 scroll-m-20 text-base font-medium first:mt-0 last:mb-0", className), ...props })),
32
+ h5: ({ className, ...props }) => (_jsx("h5", { className: cn("aui-md-h5 mt-3 mb-1 text-sm font-semibold first:mt-0 last:mb-0", className), ...props })),
33
+ h6: ({ className, ...props }) => (_jsx("h6", { className: cn("aui-md-h6 mt-3 mb-1 text-sm font-medium first:mt-0 last:mb-0", className), ...props })),
34
+ p: ({ className, ...props }) => (_jsx("p", { className: cn("aui-md-p my-3 leading-relaxed first:mt-0 last:mb-0", className), ...props })),
35
+ a: ({ className, ...props }) => (_jsx("a", { className: cn("aui-md-a text-primary hover:text-primary/80 underline underline-offset-2", className), ...props })),
36
+ blockquote: ({ className, ...props }) => (_jsx("blockquote", { className: cn("aui-md-blockquote border-muted-foreground/30 text-muted-foreground my-3 border-s-2 ps-4", className), ...props })),
37
+ ul: ({ className, ...props }) => (_jsx("ul", { className: cn("aui-md-ul marker:text-muted-foreground my-3 ms-5 list-disc [&>li]:mt-1", className), ...props })),
38
+ ol: ({ className, ...props }) => (_jsx("ol", { className: cn("aui-md-ol marker:text-muted-foreground my-3 ms-5 list-decimal [&>li]:mt-1", className), ...props })),
39
+ hr: ({ className, ...props }) => (_jsx("hr", { className: cn("aui-md-hr border-muted-foreground/20 my-3", className), ...props })),
40
+ table: ({ className, ...props }) => (_jsx("table", { className: cn("aui-md-table my-3 w-full border-separate border-spacing-0 overflow-y-auto", className), ...props })),
41
+ th: ({ className, ...props }) => (_jsx("th", { className: cn("aui-md-th bg-muted px-3 py-1.5 text-start font-medium first:rounded-ss-lg last:rounded-se-lg [[align=center]]:text-center [[align=right]]:text-right", className), ...props })),
42
+ td: ({ className, ...props }) => (_jsx("td", { className: cn("aui-md-td border-muted-foreground/20 border-s border-b px-3 py-1.5 text-start last:border-e [[align=center]]:text-center [[align=right]]:text-right", className), ...props })),
43
+ tr: ({ className, ...props }) => (_jsx("tr", { className: cn("aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-es-lg [&:last-child>td:last-child]:rounded-ee-lg", className), ...props })),
44
+ li: ({ className, ...props }) => (_jsx("li", { className: cn("aui-md-li leading-relaxed", className), ...props })),
45
+ strong: ({ className, ...props }) => (_jsx("strong", { className: cn("aui-md-strong font-semibold", className), ...props })),
46
+ sup: ({ className, ...props }) => (_jsx("sup", { className: cn("aui-md-sup [&>a]:text-xs [&>a]:no-underline", className), ...props })),
47
+ pre: ({ className, ...props }) => (_jsx("pre", { className: cn("aui-md-pre border-border/50 bg-muted/30 overflow-x-auto rounded-t-none rounded-b-xl border border-t-0 p-3.5 text-[13px] leading-relaxed", className), ...props })),
48
+ code: function Code({ className, ...props }) {
49
+ const isCodeBlock = useIsMarkdownCodeBlock();
50
+ return (_jsx("code", { className: cn(!isCodeBlock &&
51
+ "aui-md-inline-code bg-muted rounded-md px-1.5 py-0.5 font-mono text-[0.85em]", className), ...props }));
52
+ },
53
+ CodeHeader,
54
+ });
@@ -0,0 +1,31 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ import { type ReasoningMessagePartComponent } from "@assistant-ui/react";
3
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../../components/collapsible";
4
+ declare const reasoningVariants: (props?: ({
5
+ variant?: "outline" | "ghost" | "muted" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export type ReasoningRootProps = Omit<React.ComponentProps<typeof Collapsible>, "open" | "onOpenChange"> & VariantProps<typeof reasoningVariants> & {
8
+ open?: boolean;
9
+ onOpenChange?: (open: boolean) => void;
10
+ defaultOpen?: boolean;
11
+ /**
12
+ * Whether the reasoning is currently streaming. While `true` the
13
+ * disclosure is held open with a bottom-pinned live preview; when
14
+ * streaming ends it returns to `defaultOpen`, and the first manual
15
+ * toggle takes over the open/close state permanently. The live preview
16
+ * keeps following the newest tokens while the disclosure is open during
17
+ * streaming, even after a manual toggle, and pauses while the reader is
18
+ * scrolled up.
19
+ */
20
+ streaming?: boolean;
21
+ };
22
+ declare function ReasoningRoot({ className, variant, open: controlledOpen, onOpenChange: controlledOnOpenChange, defaultOpen, streaming, children, ...props }: ReasoningRootProps): import("react").JSX.Element;
23
+ declare function ReasoningTrigger({ active, duration, className, ...props }: React.ComponentProps<typeof CollapsibleTrigger> & {
24
+ active?: boolean;
25
+ duration?: number;
26
+ }): import("react").JSX.Element;
27
+ declare function ReasoningContent({ className, children, ...props }: React.ComponentProps<typeof CollapsibleContent>): import("react").JSX.Element;
28
+ declare function ReasoningText({ className, children, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
29
+ declare const Reasoning: ReasoningMessagePartComponent;
30
+ export { Reasoning, ReasoningRoot, ReasoningTrigger, ReasoningContent, ReasoningText };
31
+ //# sourceMappingURL=reasoning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning.d.ts","sourceRoot":"","sources":["../../../src/internal/assistant-ui/reasoning.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAiB,KAAK,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAExF,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAO/F,QAAA,MAAM,iBAAiB;;8EAWrB,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,KAAK,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,EACxC,MAAM,GAAG,cAAc,CACxB,GACC,YAAY,CAAC,OAAO,iBAAiB,CAAC,GAAG;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEJ,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,OAAO,EACP,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,sBAAsB,EACpC,WAAmB,EACnB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,kBAAkB,+BAsDpB;AAkCD,iBAAS,gBAAgB,CAAC,EACxB,MAAM,EACN,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,GAAG;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,+BA2CA;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,+BAmBjD;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+BA6DpF;AAID,QAAA,MAAM,SAAS,EAAqC,6BAA6B,CAAC;AAIlF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC"}