@assistant-ui/mcp-docs-server 0.2.3 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/README.md +16 -43
  2. package/dist/index.d.ts +2 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -91
  5. package/dist/index.js.map +1 -1
  6. package/dist/proxy.d.ts +9 -0
  7. package/dist/proxy.d.ts.map +1 -0
  8. package/dist/proxy.js +91 -0
  9. package/dist/proxy.js.map +1 -0
  10. package/package.json +8 -12
  11. package/src/index.ts +3 -115
  12. package/src/proxy.test.ts +385 -0
  13. package/src/proxy.ts +126 -0
  14. package/.docs/organized/code-examples/waterfall.md +0 -807
  15. package/.docs/organized/code-examples/with-a2a.md +0 -675
  16. package/.docs/organized/code-examples/with-ag-ui.md +0 -553
  17. package/.docs/organized/code-examples/with-ai-sdk-v7.md +0 -466
  18. package/.docs/organized/code-examples/with-artifacts.md +0 -815
  19. package/.docs/organized/code-examples/with-assistant-transport.md +0 -576
  20. package/.docs/organized/code-examples/with-browser-extension.md +0 -371
  21. package/.docs/organized/code-examples/with-chain-of-thought.md +0 -962
  22. package/.docs/organized/code-examples/with-cloud-standalone.md +0 -681
  23. package/.docs/organized/code-examples/with-cloud.md +0 -439
  24. package/.docs/organized/code-examples/with-custom-thread-list.md +0 -569
  25. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +0 -527
  26. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +0 -697
  27. package/.docs/organized/code-examples/with-eve.md +0 -405
  28. package/.docs/organized/code-examples/with-expo.md +0 -2246
  29. package/.docs/organized/code-examples/with-external-store.md +0 -421
  30. package/.docs/organized/code-examples/with-ffmpeg.md +0 -829
  31. package/.docs/organized/code-examples/with-generative-ui.md +0 -1810
  32. package/.docs/organized/code-examples/with-google-adk.md +0 -368
  33. package/.docs/organized/code-examples/with-heat-graph.md +0 -304
  34. package/.docs/organized/code-examples/with-image-generation.md +0 -463
  35. package/.docs/organized/code-examples/with-interactables.md +0 -733
  36. package/.docs/organized/code-examples/with-langchain.md +0 -446
  37. package/.docs/organized/code-examples/with-langgraph.md +0 -855
  38. package/.docs/organized/code-examples/with-livekit.md +0 -643
  39. package/.docs/organized/code-examples/with-mcp.md +0 -782
  40. package/.docs/organized/code-examples/with-nuxt.md +0 -2428
  41. package/.docs/organized/code-examples/with-opencode.md +0 -1974
  42. package/.docs/organized/code-examples/with-openui.md +0 -450
  43. package/.docs/organized/code-examples/with-pi.md +0 -2084
  44. package/.docs/organized/code-examples/with-react-hook-form.md +0 -727
  45. package/.docs/organized/code-examples/with-react-ink-web.md +0 -740
  46. package/.docs/organized/code-examples/with-react-ink.md +0 -473
  47. package/.docs/organized/code-examples/with-react-router.md +0 -936
  48. package/.docs/organized/code-examples/with-resumable-stream.md +0 -668
  49. package/.docs/organized/code-examples/with-store.md +0 -679
  50. package/.docs/organized/code-examples/with-svelte.md +0 -415
  51. package/.docs/organized/code-examples/with-sveltekit.md +0 -1061
  52. package/.docs/organized/code-examples/with-tanstack.md +0 -812
  53. package/.docs/organized/code-examples/with-tap-runtime.md +0 -813
  54. package/.docs/organized/code-examples/with-virtualized-thread.md +0 -681
  55. package/.docs/organized/code-examples/with-vue.md +0 -408
  56. package/.docs/raw/docs/(getting-started)/architecture.mdx +0 -146
  57. package/.docs/raw/docs/(getting-started)/base-ui.mdx +0 -39
  58. package/.docs/raw/docs/(getting-started)/cli.mdx +0 -542
  59. package/.docs/raw/docs/(getting-started)/devtools.mdx +0 -79
  60. package/.docs/raw/docs/(getting-started)/index.mdx +0 -23
  61. package/.docs/raw/docs/(getting-started)/installation.mdx +0 -483
  62. package/.docs/raw/docs/(getting-started)/llm.mdx +0 -211
  63. package/.docs/raw/docs/(getting-started)/rtl.mdx +0 -78
  64. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +0 -36
  65. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +0 -20
  66. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +0 -34
  67. package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +0 -44
  68. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +0 -59
  69. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +0 -20
  70. package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +0 -26
  71. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +0 -84
  72. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +0 -22
  73. package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +0 -64
  74. package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +0 -22
  75. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +0 -57
  76. package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +0 -49
  77. package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +0 -40
  78. package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +0 -56
  79. package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +0 -86
  80. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +0 -39
  81. package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +0 -42
  82. package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +0 -84
  83. package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +0 -85
  84. package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +0 -45
  85. package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +0 -93
  86. package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +0 -62
  87. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +0 -129
  88. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +0 -31
  89. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +0 -34
  90. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +0 -350
  91. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +0 -28
  92. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +0 -97
  93. package/.docs/raw/docs/(reference)/api-reference/integrations/ai-sdk.mdx +0 -200
  94. package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +0 -24
  95. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +0 -118
  96. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +0 -28
  97. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -37
  98. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +0 -50
  99. package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +0 -22
  100. package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +0 -20
  101. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +0 -566
  102. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +0 -152
  103. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +0 -239
  104. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +0 -208
  105. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +0 -108
  106. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +0 -99
  107. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +0 -145
  108. package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +0 -82
  109. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +0 -637
  110. package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +0 -22
  111. package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +0 -65
  112. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +0 -73
  113. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +0 -117
  114. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +0 -339
  115. package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +0 -77
  116. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +0 -88
  117. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +0 -81
  118. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +0 -129
  119. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +0 -138
  120. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +0 -122
  121. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +0 -289
  122. package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +0 -20
  123. package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +0 -24
  124. package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +0 -32
  125. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +0 -43
  126. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +0 -43
  127. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +0 -24
  128. package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +0 -20
  129. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +0 -24
  130. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +0 -24
  131. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +0 -36
  132. package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +0 -85
  133. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +0 -45
  134. package/.docs/raw/docs/(reference)/api-reference/tools/interactables-legacy.mdx +0 -55
  135. package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +0 -151
  136. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +0 -106
  137. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -62
  138. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +0 -178
  139. package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +0 -48
  140. package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +0 -62
  141. package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +0 -22
  142. package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +0 -19
  143. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +0 -152
  144. package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +0 -22
  145. package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +0 -54
  146. package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +0 -36
  147. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +0 -527
  148. package/.docs/raw/docs/cloud/ai-sdk.mdx +0 -604
  149. package/.docs/raw/docs/cloud/authorization.mdx +0 -252
  150. package/.docs/raw/docs/cloud/index.mdx +0 -46
  151. package/.docs/raw/docs/cloud/langgraph.mdx +0 -554
  152. package/.docs/raw/docs/copilots/assistant-frame.mdx +0 -411
  153. package/.docs/raw/docs/copilots/make-assistant-visible.mdx +0 -82
  154. package/.docs/raw/docs/copilots/model-context.mdx +0 -156
  155. package/.docs/raw/docs/copilots/motivation.mdx +0 -202
  156. package/.docs/raw/docs/copilots/use-assistant-instructions.mdx +0 -64
  157. package/.docs/raw/docs/guides/attachments.mdx +0 -619
  158. package/.docs/raw/docs/guides/branching.mdx +0 -76
  159. package/.docs/raw/docs/guides/chain-of-thought.mdx +0 -164
  160. package/.docs/raw/docs/guides/chatgpt-subscription.mdx +0 -108
  161. package/.docs/raw/docs/guides/context-api.mdx +0 -619
  162. package/.docs/raw/docs/guides/dictation.mdx +0 -298
  163. package/.docs/raw/docs/guides/editing.mdx +0 -102
  164. package/.docs/raw/docs/guides/electron.mdx +0 -369
  165. package/.docs/raw/docs/guides/headless-composer-input.mdx +0 -113
  166. package/.docs/raw/docs/guides/image-generation.mdx +0 -74
  167. package/.docs/raw/docs/guides/index.mdx +0 -117
  168. package/.docs/raw/docs/guides/input-history.mdx +0 -55
  169. package/.docs/raw/docs/guides/latex.mdx +0 -158
  170. package/.docs/raw/docs/guides/mentions.mdx +0 -575
  171. package/.docs/raw/docs/guides/message-timing.mdx +0 -215
  172. package/.docs/raw/docs/guides/quoting.mdx +0 -169
  173. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +0 -212
  174. package/.docs/raw/docs/guides/resumable-stream-stores.mdx +0 -152
  175. package/.docs/raw/docs/guides/resumable-streams.mdx +0 -292
  176. package/.docs/raw/docs/guides/slash-commands.mdx +0 -358
  177. package/.docs/raw/docs/guides/speech.mdx +0 -172
  178. package/.docs/raw/docs/guides/suggestions.mdx +0 -384
  179. package/.docs/raw/docs/guides/virtualization.mdx +0 -133
  180. package/.docs/raw/docs/guides/voice.mdx +0 -310
  181. package/.docs/raw/docs/ink/adapters.mdx +0 -99
  182. package/.docs/raw/docs/ink/custom-backend.mdx +0 -254
  183. package/.docs/raw/docs/ink/hooks.mdx +0 -469
  184. package/.docs/raw/docs/ink/index.mdx +0 -237
  185. package/.docs/raw/docs/ink/migration.mdx +0 -138
  186. package/.docs/raw/docs/ink/primitives.mdx +0 -1259
  187. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +0 -528
  188. package/.docs/raw/docs/integrations/auth/better-auth.mdx +0 -188
  189. package/.docs/raw/docs/integrations/auth/clerk.mdx +0 -166
  190. package/.docs/raw/docs/integrations/auth/next-auth.mdx +0 -191
  191. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +0 -88
  192. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents.mdx +0 -283
  193. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +0 -188
  194. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +0 -57
  195. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +0 -201
  196. package/.docs/raw/docs/integrations/gateways/index.mdx +0 -162
  197. package/.docs/raw/docs/integrations/index.mdx +0 -178
  198. package/.docs/raw/docs/integrations/observability/helicone.mdx +0 -129
  199. package/.docs/raw/docs/integrations/observability/langfuse.mdx +0 -161
  200. package/.docs/raw/docs/integrations/observability/langsmith.mdx +0 -151
  201. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +0 -773
  202. package/.docs/raw/docs/migrations/deprecation-policy.mdx +0 -42
  203. package/.docs/raw/docs/migrations/index.mdx +0 -50
  204. package/.docs/raw/docs/migrations/react-compatibility.mdx +0 -74
  205. package/.docs/raw/docs/migrations/react-langgraph-v0-7.mdx +0 -328
  206. package/.docs/raw/docs/migrations/toolkit-tools.mdx +0 -236
  207. package/.docs/raw/docs/migrations/v0-11.mdx +0 -172
  208. package/.docs/raw/docs/migrations/v0-12.mdx +0 -302
  209. package/.docs/raw/docs/migrations/v0-14.mdx +0 -297
  210. package/.docs/raw/docs/migrations/v0-15.mdx +0 -270
  211. package/.docs/raw/docs/primitives/action-bar.mdx +0 -352
  212. package/.docs/raw/docs/primitives/assistant-modal.mdx +0 -216
  213. package/.docs/raw/docs/primitives/attachment.mdx +0 -217
  214. package/.docs/raw/docs/primitives/branch-picker.mdx +0 -222
  215. package/.docs/raw/docs/primitives/chain-of-thought.mdx +0 -315
  216. package/.docs/raw/docs/primitives/composer.mdx +0 -659
  217. package/.docs/raw/docs/primitives/error.mdx +0 -142
  218. package/.docs/raw/docs/primitives/index.mdx +0 -99
  219. package/.docs/raw/docs/primitives/message.mdx +0 -618
  220. package/.docs/raw/docs/primitives/selection-toolbar.mdx +0 -191
  221. package/.docs/raw/docs/primitives/suggestion.mdx +0 -254
  222. package/.docs/raw/docs/primitives/thread-list.mdx +0 -467
  223. package/.docs/raw/docs/primitives/thread.mdx +0 -509
  224. package/.docs/raw/docs/react-native/adapters.mdx +0 -94
  225. package/.docs/raw/docs/react-native/custom-backend.mdx +0 -207
  226. package/.docs/raw/docs/react-native/hooks.mdx +0 -339
  227. package/.docs/raw/docs/react-native/index.mdx +0 -289
  228. package/.docs/raw/docs/react-native/migration.mdx +0 -142
  229. package/.docs/raw/docs/react-native/primitives.mdx +0 -976
  230. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +0 -399
  231. package/.docs/raw/docs/runtimes/a2a/overview.mdx +0 -60
  232. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +0 -216
  233. package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +0 -124
  234. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +0 -70
  235. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +0 -243
  236. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +0 -267
  237. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +0 -61
  238. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +0 -122
  239. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +0 -135
  240. package/.docs/raw/docs/runtimes/ai-sdk/v6-legacy.mdx +0 -636
  241. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +0 -731
  242. package/.docs/raw/docs/runtimes/claude-managed-agents.mdx +0 -118
  243. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +0 -265
  244. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +0 -167
  245. package/.docs/raw/docs/runtimes/concepts/stability.mdx +0 -68
  246. package/.docs/raw/docs/runtimes/concepts/threads.mdx +0 -513
  247. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +0 -763
  248. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +0 -339
  249. package/.docs/raw/docs/runtimes/custom/external-store.mdx +0 -957
  250. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +0 -902
  251. package/.docs/raw/docs/runtimes/custom/overview.mdx +0 -71
  252. package/.docs/raw/docs/runtimes/eve/overview.mdx +0 -151
  253. package/.docs/raw/docs/runtimes/eve/quickstart.mdx +0 -192
  254. package/.docs/raw/docs/runtimes/google-adk/api.mdx +0 -256
  255. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +0 -784
  256. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +0 -69
  257. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +0 -229
  258. package/.docs/raw/docs/runtimes/langchain.mdx +0 -901
  259. package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +0 -181
  260. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +0 -305
  261. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +0 -104
  262. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +0 -84
  263. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +0 -496
  264. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +0 -144
  265. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +0 -113
  266. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +0 -29
  267. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -93
  268. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +0 -347
  269. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +0 -393
  270. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +0 -194
  271. package/.docs/raw/docs/runtimes/opencode/overview.mdx +0 -58
  272. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +0 -119
  273. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +0 -133
  274. package/.docs/raw/docs/tools/a2ui.mdx +0 -107
  275. package/.docs/raw/docs/tools/backend.mdx +0 -147
  276. package/.docs/raw/docs/tools/defining-tools.mdx +0 -574
  277. package/.docs/raw/docs/tools/dynamic-tools.mdx +0 -112
  278. package/.docs/raw/docs/tools/generative-ui-primitive.mdx +0 -180
  279. package/.docs/raw/docs/tools/generative-ui-slack.mdx +0 -167
  280. package/.docs/raw/docs/tools/generative-ui-teams.mdx +0 -160
  281. package/.docs/raw/docs/tools/generative-ui.mdx +0 -322
  282. package/.docs/raw/docs/tools/index.mdx +0 -72
  283. package/.docs/raw/docs/tools/interactables.mdx +0 -1084
  284. package/.docs/raw/docs/tools/mcp-apps.mdx +0 -363
  285. package/.docs/raw/docs/tools/mcp.mdx +0 -466
  286. package/.docs/raw/docs/tools/multi-agent.mdx +0 -237
  287. package/.docs/raw/docs/tools/openui.mdx +0 -175
  288. package/.docs/raw/docs/tools/tool-ui.mdx +0 -1020
  289. package/.docs/raw/docs/tools/user-managed-mcp.mdx +0 -428
  290. package/.docs/raw/docs/ui/assistant-modal.mdx +0 -166
  291. package/.docs/raw/docs/ui/assistant-sidebar.mdx +0 -89
  292. package/.docs/raw/docs/ui/attachment.mdx +0 -279
  293. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +0 -247
  294. package/.docs/raw/docs/ui/context-display.mdx +0 -148
  295. package/.docs/raw/docs/ui/directive-text.mdx +0 -114
  296. package/.docs/raw/docs/ui/file.mdx +0 -159
  297. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +0 -82
  298. package/.docs/raw/docs/ui/image.mdx +0 -102
  299. package/.docs/raw/docs/ui/markdown.mdx +0 -103
  300. package/.docs/raw/docs/ui/mcp-config.mdx +0 -107
  301. package/.docs/raw/docs/ui/mermaid.mdx +0 -92
  302. package/.docs/raw/docs/ui/message-timing.mdx +0 -93
  303. package/.docs/raw/docs/ui/model-selector.mdx +0 -455
  304. package/.docs/raw/docs/ui/part-grouping.mdx +0 -614
  305. package/.docs/raw/docs/ui/quote.mdx +0 -211
  306. package/.docs/raw/docs/ui/reasoning.mdx +0 -214
  307. package/.docs/raw/docs/ui/scrollbar.mdx +0 -77
  308. package/.docs/raw/docs/ui/sources.mdx +0 -186
  309. package/.docs/raw/docs/ui/streamdown.mdx +0 -392
  310. package/.docs/raw/docs/ui/syntax-highlighting.mdx +0 -205
  311. package/.docs/raw/docs/ui/thread-list.mdx +0 -411
  312. package/.docs/raw/docs/ui/thread.mdx +0 -559
  313. package/.docs/raw/docs/ui/tool-fallback.mdx +0 -141
  314. package/.docs/raw/docs/ui/tool-group.mdx +0 -240
  315. package/.docs/raw/docs/ui/voice.mdx +0 -173
  316. package/.docs/raw/docs/utilities/heat-graph.mdx +0 -237
  317. package/.docs/raw/docs/utilities/react-o11y.mdx +0 -362
  318. package/.docs/raw/docs/utilities/tw-shimmer.mdx +0 -212
  319. package/dist/constants.d.ts +0 -14
  320. package/dist/constants.d.ts.map +0 -1
  321. package/dist/constants.js +0 -19
  322. package/dist/constants.js.map +0 -1
  323. package/dist/prepare-docs/code-examples.d.ts +0 -5
  324. package/dist/prepare-docs/code-examples.d.ts.map +0 -1
  325. package/dist/prepare-docs/code-examples.js +0 -117
  326. package/dist/prepare-docs/code-examples.js.map +0 -1
  327. package/dist/prepare-docs/copy-raw.d.ts +0 -5
  328. package/dist/prepare-docs/copy-raw.d.ts.map +0 -1
  329. package/dist/prepare-docs/copy-raw.js +0 -49
  330. package/dist/prepare-docs/copy-raw.js.map +0 -1
  331. package/dist/prepare-docs/prepare.d.ts +0 -1
  332. package/dist/prepare-docs/prepare.js +0 -22
  333. package/dist/prepare-docs/prepare.js.map +0 -1
  334. package/dist/prompts/xulux-playground.d.ts +0 -12
  335. package/dist/prompts/xulux-playground.d.ts.map +0 -1
  336. package/dist/prompts/xulux-playground.js +0 -33
  337. package/dist/prompts/xulux-playground.js.map +0 -1
  338. package/dist/tools/docs.d.ts +0 -22
  339. package/dist/tools/docs.d.ts.map +0 -1
  340. package/dist/tools/docs.js +0 -177
  341. package/dist/tools/docs.js.map +0 -1
  342. package/dist/tools/examples.d.ts +0 -24
  343. package/dist/tools/examples.d.ts.map +0 -1
  344. package/dist/tools/examples.js +0 -87
  345. package/dist/tools/examples.js.map +0 -1
  346. package/dist/tools/resources.d.ts +0 -6
  347. package/dist/tools/resources.d.ts.map +0 -1
  348. package/dist/tools/resources.js +0 -75
  349. package/dist/tools/resources.js.map +0 -1
  350. package/dist/tools/search.d.ts +0 -24
  351. package/dist/tools/search.d.ts.map +0 -1
  352. package/dist/tools/search.js +0 -39
  353. package/dist/tools/search.js.map +0 -1
  354. package/dist/tools/tests/mcp-test-client.d.ts +0 -15
  355. package/dist/tools/tests/mcp-test-client.d.ts.map +0 -1
  356. package/dist/tools/tests/mcp-test-client.js +0 -68
  357. package/dist/tools/tests/mcp-test-client.js.map +0 -1
  358. package/dist/tools/tests/test-setup.d.ts +0 -7
  359. package/dist/tools/tests/test-setup.d.ts.map +0 -1
  360. package/dist/tools/tests/test-setup.js +0 -36
  361. package/dist/tools/tests/test-setup.js.map +0 -1
  362. package/dist/tools/xulux-templates.d.ts +0 -58
  363. package/dist/tools/xulux-templates.d.ts.map +0 -1
  364. package/dist/tools/xulux-templates.js +0 -84
  365. package/dist/tools/xulux-templates.js.map +0 -1
  366. package/dist/utils/cache.d.ts +0 -5
  367. package/dist/utils/cache.d.ts.map +0 -1
  368. package/dist/utils/cache.js +0 -18
  369. package/dist/utils/cache.js.map +0 -1
  370. package/dist/utils/logger.d.ts +0 -10
  371. package/dist/utils/logger.d.ts.map +0 -1
  372. package/dist/utils/logger.js +0 -20
  373. package/dist/utils/logger.js.map +0 -1
  374. package/dist/utils/mcp-format.d.ts +0 -11
  375. package/dist/utils/mcp-format.d.ts.map +0 -1
  376. package/dist/utils/mcp-format.js +0 -14
  377. package/dist/utils/mcp-format.js.map +0 -1
  378. package/dist/utils/mdx.d.ts +0 -12
  379. package/dist/utils/mdx.d.ts.map +0 -1
  380. package/dist/utils/mdx.js +0 -45
  381. package/dist/utils/mdx.js.map +0 -1
  382. package/dist/utils/paths.d.ts +0 -12
  383. package/dist/utils/paths.d.ts.map +0 -1
  384. package/dist/utils/paths.js +0 -93
  385. package/dist/utils/paths.js.map +0 -1
  386. package/dist/utils/search.d.ts +0 -10
  387. package/dist/utils/search.d.ts.map +0 -1
  388. package/dist/utils/search.js +0 -97
  389. package/dist/utils/search.js.map +0 -1
  390. package/dist/utils/security.d.ts +0 -5
  391. package/dist/utils/security.d.ts.map +0 -1
  392. package/dist/utils/security.js +0 -22
  393. package/dist/utils/security.js.map +0 -1
  394. package/dist/xulux/catalog-client.d.ts +0 -14
  395. package/dist/xulux/catalog-client.d.ts.map +0 -1
  396. package/dist/xulux/catalog-client.js +0 -112
  397. package/dist/xulux/catalog-client.js.map +0 -1
  398. package/dist/xulux/fallback-catalog.d.ts +0 -7
  399. package/dist/xulux/fallback-catalog.d.ts.map +0 -1
  400. package/dist/xulux/fallback-catalog.js +0 -47
  401. package/dist/xulux/fallback-catalog.js.map +0 -1
  402. package/dist/xulux/fetch-sandbox.d.ts +0 -5
  403. package/dist/xulux/fetch-sandbox.d.ts.map +0 -1
  404. package/dist/xulux/fetch-sandbox.js +0 -40
  405. package/dist/xulux/fetch-sandbox.js.map +0 -1
  406. package/dist/xulux/template-service.d.ts +0 -84
  407. package/dist/xulux/template-service.d.ts.map +0 -1
  408. package/dist/xulux/template-service.js +0 -223
  409. package/dist/xulux/template-service.js.map +0 -1
  410. package/dist/xulux/types.d.ts +0 -55
  411. package/dist/xulux/types.d.ts.map +0 -1
  412. package/dist/xulux/types.js +0 -6
  413. package/dist/xulux/types.js.map +0 -1
  414. package/src/constants.ts +0 -24
  415. package/src/prepare-docs/code-examples.ts +0 -158
  416. package/src/prepare-docs/copy-raw.ts +0 -50
  417. package/src/prepare-docs/prepare.ts +0 -24
  418. package/src/prompts/xulux-playground.ts +0 -36
  419. package/src/tools/docs.ts +0 -255
  420. package/src/tools/examples.ts +0 -114
  421. package/src/tools/resources.ts +0 -111
  422. package/src/tools/search.ts +0 -46
  423. package/src/tools/tests/completions.test.ts +0 -60
  424. package/src/tools/tests/directory-size-cap.test.ts +0 -50
  425. package/src/tools/tests/docs.test.ts +0 -147
  426. package/src/tools/tests/examples.test.ts +0 -94
  427. package/src/tools/tests/integration.test.ts +0 -45
  428. package/src/tools/tests/json-parsing.test.ts +0 -23
  429. package/src/tools/tests/listings-cache.test.ts +0 -19
  430. package/src/tools/tests/mcp-protocol.test.ts +0 -216
  431. package/src/tools/tests/mcp-test-client.ts +0 -111
  432. package/src/tools/tests/path-traversal.test.ts +0 -84
  433. package/src/tools/tests/resources.test.ts +0 -133
  434. package/src/tools/tests/search.test.ts +0 -37
  435. package/src/tools/tests/test-setup.ts +0 -50
  436. package/src/tools/tests/xulux-templates.test.ts +0 -325
  437. package/src/tools/xulux-templates.ts +0 -141
  438. package/src/utils/cache.ts +0 -20
  439. package/src/utils/logger.ts +0 -20
  440. package/src/utils/mcp-format.ts +0 -14
  441. package/src/utils/mdx.ts +0 -59
  442. package/src/utils/paths.ts +0 -139
  443. package/src/utils/search.ts +0 -131
  444. package/src/utils/security.ts +0 -52
  445. package/src/utils/tests/cache.test.ts +0 -51
  446. package/src/utils/tests/mcp-format.test.ts +0 -22
  447. package/src/utils/tests/security.test.ts +0 -119
  448. package/src/xulux/catalog-client.ts +0 -150
  449. package/src/xulux/fallback-catalog.ts +0 -63
  450. package/src/xulux/fetch-sandbox.ts +0 -56
  451. package/src/xulux/template-service.ts +0 -406
  452. package/src/xulux/types.ts +0 -64
@@ -1,659 +0,0 @@
1
- ---
2
- title: Composer
3
- description: Build custom message input UIs with full control over layout and behavior.
4
- platforms: ["react"]
5
- ---
6
-
7
- import { ComposerPrimitiveSample } from "@/components/pages/docs/samples/composer-primitive";
8
- import { ComposerPrimitive as ComposerPrimitiveDocs } from "@/generated/primitiveDocs";
9
-
10
- The Composer primitive is the interface for composing new messages or editing existing ones. It handles submit behavior, keyboard shortcuts, focus management, attachment state, and streaming status. You provide the UI.
11
-
12
- <Tabs items={["Preview", "Code"]}>
13
- <Tab>
14
- <ComposerPrimitiveSample />
15
- </Tab>
16
- <Tab>
17
- ```tsx
18
- import { ComposerPrimitive } from "@assistant-ui/react";
19
- import { ArrowUpIcon } from "lucide-react";
20
-
21
- export function MinimalComposer() {
22
- return (
23
- <ComposerPrimitive.Root className="flex w-full flex-col rounded-3xl border bg-muted">
24
- <ComposerPrimitive.Input
25
- placeholder="Ask anything..."
26
- className="min-h-10 w-full resize-none bg-transparent px-5 pt-4 pb-3 text-sm focus:outline-none"
27
- rows={1}
28
- />
29
- <div className="flex items-center justify-end px-3 pb-3">
30
- <ComposerPrimitive.Send className="flex size-8 items-center justify-center rounded-full bg-primary text-primary-foreground disabled:opacity-30">
31
- <ArrowUpIcon className="size-4" />
32
- </ComposerPrimitive.Send>
33
- </div>
34
- </ComposerPrimitive.Root>
35
- );
36
- }
37
- ```
38
- </Tab>
39
- </Tabs>
40
-
41
- ## Quick Start
42
-
43
- Minimal example:
44
-
45
- ```tsx
46
- import { ComposerPrimitive } from "@assistant-ui/react";
47
-
48
- <ComposerPrimitive.Root>
49
- <ComposerPrimitive.Input placeholder="Ask anything..." />
50
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
51
- </ComposerPrimitive.Root>
52
- ```
53
-
54
- `Root` renders a `<form>`, `Input` renders a `<textarea>`, and `Send` renders a `<button>`. Each part renders its native element by default, and supports `asChild` for element substitution.
55
-
56
- <Callout type="info">
57
- Runtime setup: primitives require runtime context. Wrap your UI in `AssistantRuntimeProvider` with a runtime (for example `useLocalRuntime(...)`). See [Pick a Runtime](/docs/runtimes/pick-a-runtime).
58
- </Callout>
59
-
60
- ## Core Concepts
61
-
62
- ### New Message vs Edit Mode
63
-
64
- A Composer placed inside a **Thread** composes new messages. A Composer placed inside a **Message** edits that message. The same primitives handle both, and the behavior changes automatically based on context.
65
-
66
- ```tsx
67
- // New message composer
68
- <ThreadPrimitive.Root>
69
- <ComposerPrimitive.Root>
70
- <ComposerPrimitive.Input />
71
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
72
- </ComposerPrimitive.Root>
73
- </ThreadPrimitive.Root>
74
-
75
- // Edit composer (inside a message)
76
- <MessagePrimitive.Root>
77
- <ComposerPrimitive.Root>
78
- <ComposerPrimitive.Input />
79
- <ComposerPrimitive.Send>Save</ComposerPrimitive.Send>
80
- <ComposerPrimitive.Cancel>Cancel</ComposerPrimitive.Cancel>
81
- </ComposerPrimitive.Root>
82
- </MessagePrimitive.Root>
83
- ```
84
-
85
- ### The `asChild` Pattern
86
-
87
- Every primitive part accepts `asChild` to merge its behavior onto your own element. This is how you use primitives with your own design system:
88
-
89
- ```tsx
90
- import { ComposerPrimitive } from "@assistant-ui/react";
91
-
92
- <ComposerPrimitive.Input asChild>
93
- <textarea
94
- className="my-custom-textarea"
95
- placeholder="Type here..."
96
- />
97
- </ComposerPrimitive.Input>
98
-
99
- <ComposerPrimitive.Send asChild>
100
- <MyButton variant="primary">Send</MyButton>
101
- </ComposerPrimitive.Send>
102
- ```
103
-
104
- The primitive's behavior (keyboard handling, disabled state, form submission) is merged onto your element. Your styles, your component, primitive wiring.
105
-
106
- <Callout type="info">
107
- Own the input DOM entirely, such as a `contentEditable` surface or editor
108
- library that cannot be expressed through `asChild` or `render`? See
109
- [Headless Composer Input](/docs/guides/headless-composer-input) for the
110
- unstable hook that supplies composer text and send gating without
111
- `ComposerPrimitive.Input`.
112
- </Callout>
113
-
114
- ### Unstable Trigger Popovers
115
-
116
- Composer includes an unstable **trigger popover** system for character-triggered popovers (e.g. `@` for mentions, `/` for slash commands). Multiple triggers coexist under a single `TriggerPopoverRoot`.
117
-
118
- ```tsx
119
- <ComposerPrimitive.Unstable_TriggerPopoverRoot>
120
- <ComposerPrimitive.Root>
121
- <ComposerPrimitive.Input placeholder="Type @ to mention, / for commands..." />
122
-
123
- {/* @ mention — inserts directive text into the message */}
124
- <ComposerPrimitive.Unstable_TriggerPopover
125
- char="@"
126
- adapter={mentionAdapter}
127
- >
128
- <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />
129
- {/* popover UI */}
130
- </ComposerPrimitive.Unstable_TriggerPopover>
131
-
132
- {/* / slash command — runs a handler on selection; leaves an audit-trail chip by default */}
133
- <ComposerPrimitive.Unstable_TriggerPopover
134
- char="/"
135
- adapter={slashAdapter}
136
- >
137
- <ComposerPrimitive.Unstable_TriggerPopover.Action
138
- formatter={formatter}
139
- onExecute={(item) => commandHandlers[item.id]?.()}
140
- />
141
- <ComposerPrimitive.Unstable_TriggerPopoverItems>
142
- {(items) => items.map(item => (
143
- <ComposerPrimitive.Unstable_TriggerPopoverItem key={item.id} item={item}>
144
- {item.label}
145
- </ComposerPrimitive.Unstable_TriggerPopoverItem>
146
- ))}
147
- </ComposerPrimitive.Unstable_TriggerPopoverItems>
148
- </ComposerPrimitive.Unstable_TriggerPopover>
149
- </ComposerPrimitive.Root>
150
- </ComposerPrimitive.Unstable_TriggerPopoverRoot>
151
- ```
152
-
153
- See the [Mentions guide](/docs/guides/mentions) and [Slash Commands guide](/docs/guides/slash-commands) for full documentation.
154
-
155
- ## Parts
156
-
157
- ### Root
158
-
159
- Form container for message composition. Renders a `<form>` element unless `asChild` is set.
160
-
161
- ```tsx
162
- <ComposerPrimitive.Root className="flex w-full flex-col rounded-3xl border bg-muted">
163
- <ComposerPrimitive.Input placeholder="Ask anything..." />
164
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
165
- </ComposerPrimitive.Root>
166
- ```
167
-
168
- #### Compact Mode
169
-
170
- Pass `compact` to opt into compact detection. While the input holds at most a single line of text and the composer has no attachments, quote, queued messages, or active dictation, the root renders a `data-compact` attribute. The prop only exposes this attribute for styling — it does not change the layout by itself. Target it with CSS to collapse the composer into a single row:
171
-
172
- ```tsx
173
- <ComposerPrimitive.Root
174
- compact
175
- className="group/composer flex flex-col data-[compact]:flex-row data-[compact]:items-center"
176
- >
177
- <ComposerPrimitive.Input placeholder="Ask anything..." />
178
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
179
- </ComposerPrimitive.Root>
180
- ```
181
-
182
- Once the text wraps onto a second line, the composer expands and stays expanded until the input is cleared, so the layout doesn't oscillate at the wrap boundary.
183
-
184
- ### Input
185
-
186
- Text input with keyboard shortcuts. Renders a `<textarea>` element unless `asChild` is set.
187
-
188
- ```tsx
189
- <ComposerPrimitive.Input
190
- submitMode="ctrlEnter"
191
- cancelOnEscape
192
- placeholder="Ask anything..."
193
- />
194
- ```
195
-
196
- <PrimitivesTypeTable type="ComposerPrimitiveInputProps" parameters={ComposerPrimitiveDocs.Input.props.filter(p => p.name !== "asChild")} />
197
-
198
- ### Send
199
-
200
- Submits the composer form. Renders a `<button>` element unless `asChild` is set.
201
-
202
- ```tsx
203
- <ComposerPrimitive.Send className="rounded-full bg-primary px-3 py-2 text-primary-foreground">
204
- Send
205
- </ComposerPrimitive.Send>
206
- ```
207
-
208
- ### Cancel
209
-
210
- Cancels the current composition or edit session. Renders a `<button>` element unless `asChild` is set.
211
-
212
- ```tsx
213
- <ComposerPrimitive.Cancel className="rounded-md px-3 py-2 text-sm hover:bg-muted">
214
- Cancel
215
- </ComposerPrimitive.Cancel>
216
- ```
217
-
218
- ### AddAttachment
219
-
220
- Opens file picker for attachments. Renders a `<button>` element unless `asChild` is set.
221
-
222
- ```tsx
223
- <ComposerPrimitive.AddAttachment multiple>
224
- Attach Files
225
- </ComposerPrimitive.AddAttachment>
226
- ```
227
-
228
- <PrimitivesTypeTable type="ComposerPrimitiveAddAttachmentProps" parameters={ComposerPrimitiveDocs.AddAttachment.props.filter(p => p.name !== "asChild")} />
229
-
230
- ### Attachments
231
-
232
- Renders each attachment. Prefer the children render function for new code.
233
-
234
- ```tsx
235
- <ComposerPrimitive.Attachments>
236
- {({ attachment }) => {
237
- if (attachment.type === "image") return <ImagePreview />;
238
- if (attachment.type === "document") return <DocumentPreview />;
239
- return <GenericPreview />;
240
- }}
241
- </ComposerPrimitive.Attachments>
242
- ```
243
-
244
- <PrimitivesTypeTable type="ComposerPrimitiveAttachmentsProps" parameters={ComposerPrimitiveDocs.Attachments.props} />
245
-
246
- ### AttachmentByIndex
247
-
248
- Renders a single attachment at a specific index.
249
-
250
- ```tsx
251
- <ComposerPrimitive.AttachmentByIndex
252
- index={0}
253
- components={{ Attachment: MyAttachment }}
254
- />
255
- ```
256
-
257
- <PrimitivesTypeTable type="ComposerPrimitiveAttachmentByIndexProps" parameters={ComposerPrimitiveDocs.AttachmentByIndex.props} />
258
-
259
- ### AttachmentDropzone
260
-
261
- Drag-and-drop zone for file attachments. Sets `data-dragging` when a file is being dragged over it and the runtime supports attachments; without the attachments capability the dropzone accepts no files and shows no highlight. Non-file drags (text, links) are ignored. Renders a `<div>` element unless `asChild` is set.
262
-
263
- ```tsx
264
- <ComposerPrimitive.AttachmentDropzone className="rounded-xl border-2 border-dashed data-[dragging]:border-primary data-[dragging]:bg-primary/5">
265
- <ComposerPrimitive.Root>
266
- ...
267
- </ComposerPrimitive.Root>
268
- </ComposerPrimitive.AttachmentDropzone>
269
- ```
270
-
271
- <PrimitivesTypeTable type="ComposerPrimitiveAttachmentDropzoneProps" parameters={ComposerPrimitiveDocs.AttachmentDropzone.props.filter(p => p.name !== "asChild")} />
272
-
273
- ### Dictate
274
-
275
- Starts a dictation session. Renders a `<button>` element unless `asChild` is set.
276
-
277
- ```tsx
278
- <ComposerPrimitive.Dictate className="rounded-md px-3 py-2 text-sm hover:bg-muted">
279
- Start Dictation
280
- </ComposerPrimitive.Dictate>
281
- ```
282
-
283
- ### StopDictation
284
-
285
- Stops the current dictation session. Renders a `<button>` element unless `asChild` is set.
286
-
287
- ```tsx
288
- <ComposerPrimitive.StopDictation className="rounded-md px-3 py-2 text-sm hover:bg-muted">
289
- Stop Dictation
290
- </ComposerPrimitive.StopDictation>
291
- ```
292
-
293
- ### DictationTranscript
294
-
295
- Renders the interim transcript while dictation is active. Renders a `<span>` element unless `asChild` is set.
296
-
297
- ```tsx
298
- <ComposerPrimitive.DictationTranscript className="text-sm text-muted-foreground" />
299
- ```
300
-
301
- ### If (deprecated)
302
-
303
- <Callout type="warn">
304
- Deprecated. Use [`AuiIf`](/docs/api-reference/primitives/assistant-if) instead.
305
- </Callout>
306
-
307
- ```tsx
308
- // Before (deprecated)
309
- <ComposerPrimitive.If editing>...</ComposerPrimitive.If>
310
- <ComposerPrimitive.If dictation>...</ComposerPrimitive.If>
311
-
312
- // After
313
- <AuiIf condition={(s) => s.composer.isEditing}>...</AuiIf>
314
- <AuiIf condition={(s) => s.composer.dictation != null}>...</AuiIf>
315
- ```
316
-
317
- ### Quote
318
-
319
- Container for quoted text preview inside the composer. Only renders when a quote is set. Renders a `<div>` element unless `asChild` is set.
320
-
321
- ```tsx
322
- <ComposerPrimitive.Quote className="rounded-lg border bg-background px-3 py-2 text-sm">
323
- <ComposerPrimitive.QuoteText />
324
- <ComposerPrimitive.QuoteDismiss className="ml-2" />
325
- </ComposerPrimitive.Quote>
326
- ```
327
-
328
- ### QuoteText
329
-
330
- Renders the quoted text content. Renders a `<span>` element unless `asChild` is set.
331
-
332
- ```tsx
333
- <ComposerPrimitive.QuoteText />
334
- ```
335
-
336
- ### QuoteDismiss
337
-
338
- Clears the active quote from the composer. Renders a `<button>` element unless `asChild` is set.
339
-
340
- ```tsx
341
- <ComposerPrimitive.QuoteDismiss className="rounded-full p-1 hover:bg-muted">
342
- Dismiss
343
- </ComposerPrimitive.QuoteDismiss>
344
- ```
345
-
346
- ### Unstable_TriggerPopoverRoot
347
-
348
- Root provider that groups one or more `TriggerPopover` declarations and owns the shared input plugin registry.
349
-
350
- ```tsx
351
- <ComposerPrimitive.Unstable_TriggerPopoverRoot>
352
- <ComposerPrimitive.Root>
353
- <LexicalComposerInput placeholder="Type @ to mention, / for commands..." />
354
- <ComposerPrimitive.Unstable_TriggerPopover char="@" adapter={mentionAdapter}>
355
- <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />
356
- ...
357
- </ComposerPrimitive.Unstable_TriggerPopover>
358
- </ComposerPrimitive.Root>
359
- </ComposerPrimitive.Unstable_TriggerPopoverRoot>
360
- ```
361
-
362
- ### Unstable_TriggerPopover
363
-
364
- Declares a trigger (by `char`, `adapter`) and renders the popover container. Selection behavior is declared by rendering exactly one behavior sub-primitive inside — either `<Unstable_TriggerPopover.Directive>` (insert a directive on selection) or `<Unstable_TriggerPopover.Action>` (run `onExecute` on selection). Only renders its DOM (and children) while the trigger is active in the composer input.
365
-
366
- ```tsx
367
- <ComposerPrimitive.Unstable_TriggerPopover
368
- char="@"
369
- adapter={mentionAdapter}
370
- className="rounded-lg border bg-popover p-1 shadow-md"
371
- >
372
- <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />
373
- <ComposerPrimitive.Unstable_TriggerPopoverCategories>
374
- {(categories) => categories.map((category) => (
375
- <ComposerPrimitive.Unstable_TriggerPopoverCategoryItem
376
- key={category.id}
377
- categoryId={category.id}
378
- >
379
- {category.label}
380
- </ComposerPrimitive.Unstable_TriggerPopoverCategoryItem>
381
- ))}
382
- </ComposerPrimitive.Unstable_TriggerPopoverCategories>
383
- </ComposerPrimitive.Unstable_TriggerPopover>
384
- ```
385
-
386
- Behavior is supplied by exactly one of two sub-primitives:
387
-
388
- - `<Unstable_TriggerPopover.Directive formatter={...} onInserted={...} />` — writes `:type[label]{name=id}` into the composer text (mention behavior)
389
- - `<Unstable_TriggerPopover.Action onExecute={...} removeOnExecute={...} />` — runs a callback on selection; leaves a directive chip behind by default (slash-command behavior)
390
-
391
- ### Unstable_TriggerPopover.Directive
392
-
393
- Behavior sub-primitive. Registers the directive-insert behavior with its parent `TriggerPopover`. Renders nothing.
394
-
395
- ```tsx
396
- <ComposerPrimitive.Unstable_TriggerPopover.Directive
397
- formatter={unstable_defaultDirectiveFormatter}
398
- onInserted={(item) => track("mention", item.id)}
399
- />
400
- ```
401
-
402
- ### Unstable_TriggerPopover.Action
403
-
404
- Behavior sub-primitive. Registers the action behavior with its parent `TriggerPopover`. Renders nothing. By default leaves a directive chip behind after executing (audit trail); pass `removeOnExecute` to strip the trigger text entirely.
405
-
406
- ```tsx
407
- <ComposerPrimitive.Unstable_TriggerPopover.Action
408
- onExecute={(item) => commandHandlers[item.id]?.()}
409
- removeOnExecute={false}
410
- />
411
- ```
412
-
413
- ### Unstable_TriggerPopoverCategories
414
-
415
- Render-function primitive for the top-level category list. Only renders while no category is active and search mode is off.
416
-
417
- ```tsx
418
- <ComposerPrimitive.Unstable_TriggerPopoverCategories>
419
- {(categories) => categories.map((category) => (
420
- <ComposerPrimitive.Unstable_TriggerPopoverCategoryItem
421
- key={category.id}
422
- categoryId={category.id}
423
- >
424
- {category.label}
425
- </ComposerPrimitive.Unstable_TriggerPopoverCategoryItem>
426
- ))}
427
- </ComposerPrimitive.Unstable_TriggerPopoverCategories>
428
- ```
429
-
430
- ### Unstable_TriggerPopoverCategoryItem
431
-
432
- Button that selects a category and drills into its items.
433
-
434
- ```tsx
435
- <ComposerPrimitive.Unstable_TriggerPopoverCategoryItem categoryId="tools">
436
- Tools
437
- </ComposerPrimitive.Unstable_TriggerPopoverCategoryItem>
438
- ```
439
-
440
- ### Unstable_TriggerPopoverItems
441
-
442
- Render-function primitive for the items inside the currently selected category (or global search results).
443
-
444
- ```tsx
445
- <ComposerPrimitive.Unstable_TriggerPopoverItems>
446
- {(items) => items.map((item) => (
447
- <ComposerPrimitive.Unstable_TriggerPopoverItem key={item.id} item={item} />
448
- ))}
449
- </ComposerPrimitive.Unstable_TriggerPopoverItems>
450
- ```
451
-
452
- ### Unstable_TriggerPopoverItem
453
-
454
- Selectable item inside the popover.
455
-
456
- ```tsx
457
- <ComposerPrimitive.Unstable_TriggerPopoverItem item={item}>
458
- {item.label}
459
- </ComposerPrimitive.Unstable_TriggerPopoverItem>
460
- ```
461
-
462
- ### Unstable_TriggerPopoverBack
463
-
464
- Back button used when drilling from categories into a specific item list.
465
-
466
- ```tsx
467
- <ComposerPrimitive.Unstable_TriggerPopoverBack className="rounded-md px-2 py-1 text-sm hover:bg-accent">
468
- Back
469
- </ComposerPrimitive.Unstable_TriggerPopoverBack>
470
- ```
471
-
472
- ## Patterns
473
-
474
- ### With Attachments
475
-
476
- ```tsx
477
- <ComposerPrimitive.Root>
478
- <ComposerPrimitive.Attachments>
479
- {({ attachment }) => {
480
- if (attachment.type === "image") return <ImagePreview />;
481
- if (attachment.type === "document") return <DocumentPreview />;
482
- return <GenericPreview />;
483
- }}
484
- </ComposerPrimitive.Attachments>
485
- <ComposerPrimitive.Input placeholder="Ask anything..." />
486
- <ComposerPrimitive.AddAttachment>
487
- Attach
488
- </ComposerPrimitive.AddAttachment>
489
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
490
- </ComposerPrimitive.Root>
491
- ```
492
-
493
- ### With Drag-and-Drop
494
-
495
- Wrap your composer with `AttachmentDropzone` to support dragging files directly onto the input area:
496
-
497
- ```tsx
498
- <ComposerPrimitive.AttachmentDropzone className="rounded-xl border-2 border-dashed data-[dragging]:border-primary data-[dragging]:bg-primary/5">
499
- <ComposerPrimitive.Root>
500
- <ComposerPrimitive.Attachments>
501
- {() => <MyAttachment />}
502
- </ComposerPrimitive.Attachments>
503
- <ComposerPrimitive.Input placeholder="Drop files or type..." />
504
- <ComposerPrimitive.AddAttachment>Attach</ComposerPrimitive.AddAttachment>
505
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
506
- </ComposerPrimitive.Root>
507
- </ComposerPrimitive.AttachmentDropzone>
508
- ```
509
-
510
- The dropzone sets `data-dragging` when a file is being dragged over it, so you can style the active state with CSS. It requires the runtime's attachments capability (an attachment adapter); without it the dropzone stays inert.
511
-
512
- ### With Voice Input
513
-
514
- ```tsx
515
- <ComposerPrimitive.Root>
516
- <ComposerPrimitive.Input placeholder="Ask or speak..." />
517
- <AuiIf condition={(s) => s.composer.dictation != null}>
518
- <ComposerPrimitive.DictationTranscript className="text-sm text-muted-foreground" />
519
- </AuiIf>
520
- <AuiIf condition={(s) => s.composer.dictation == null}>
521
- <ComposerPrimitive.Dictate>Mic</ComposerPrimitive.Dictate>
522
- </AuiIf>
523
- <AuiIf condition={(s) => s.composer.dictation != null}>
524
- <ComposerPrimitive.StopDictation>Stop</ComposerPrimitive.StopDictation>
525
- </AuiIf>
526
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
527
- </ComposerPrimitive.Root>
528
- ```
529
-
530
- `DictationTranscript` renders a `<span>` showing the interim speech-to-text transcript while the user is speaking.
531
-
532
- <Callout type="info">
533
- Voice input requires a `DictationAdapter` configured in your runtime. See [Dictation](/docs/guides/dictation) for setup.
534
- </Callout>
535
-
536
- ### Custom Submit Behavior
537
-
538
- Use `onSubmit` on `Root` to intercept submission:
539
-
540
- ```tsx
541
- <ComposerPrimitive.Root
542
- onSubmit={(e) => {
543
- // Runs before the message is sent
544
- // e.g., track analytics, transform input
545
- // Call e.preventDefault() to cancel the send
546
- }}
547
- >
548
- <ComposerPrimitive.Input />
549
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
550
- </ComposerPrimitive.Root>
551
- ```
552
-
553
- ### Gate Sending on External State
554
-
555
- Sometimes you want users to type while sending is temporarily blocked, for example while tool configuration, auth, or the first model context is still loading. Disabling the entire thread via `isDisabled` works but also disables the text input, which feels broken.
556
-
557
- Use `isSendDisabled` on the runtime adapter to keep the input usable while blocking send:
558
-
559
- ```tsx
560
- const runtime = useExternalStoreRuntime({
561
- isSendDisabled: !toolsLoaded,
562
- onNew,
563
- messages,
564
- // ...
565
- });
566
- ```
567
-
568
- When `isSendDisabled` is `true`:
569
-
570
- - `composer.canSend` becomes `false`
571
- - `<ComposerPrimitive.Send>` is disabled
572
- - Enter and the `Cmd/Ctrl+Shift+Enter` steer hotkey become no-ops
573
- - `aui.composer.send()` short-circuits at the runtime, so direct calls cannot escape the gate
574
-
575
- Read the same flag from React with `<AuiIf>` to render hints alongside the input:
576
-
577
- ```tsx
578
- <ComposerPrimitive.Root>
579
- <ComposerPrimitive.Input placeholder="Ask anything..." />
580
- <AuiIf condition={(s) => !s.composer.canSend}>
581
- <p className="text-sm text-muted-foreground">Loading tools, hang on...</p>
582
- </AuiIf>
583
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
584
- </ComposerPrimitive.Root>
585
- ```
586
-
587
- `canSend` reflects the composer's own willingness to send (editing mode, non-empty content, `isSendDisabled` not set). Cross-thread gating like an in-flight run without queue support is layered on top by `<ComposerPrimitive.Send>` automatically.
588
-
589
- `isSendDisabled` only gates the thread composer. Saving an in-progress message edit is unaffected, since it is a per-message action rather than a new send.
590
-
591
- For the difference between `isDisabled` and `isSendDisabled`, see the [external store adapter reference](/docs/runtimes/custom/external-store).
592
-
593
- ### Ctrl+Enter to Submit
594
-
595
- ```tsx
596
- <ComposerPrimitive.Root>
597
- <ComposerPrimitive.Input submitMode="ctrlEnter" />
598
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
599
- </ComposerPrimitive.Root>
600
- ```
601
-
602
- With `submitMode="ctrlEnter"`, plain Enter inserts a newline and Ctrl/Cmd+Enter submits.
603
-
604
- ### Mobile / touch devices
605
-
606
- ```tsx
607
- <ComposerPrimitive.Root>
608
- <ComposerPrimitive.Input unstable_insertNewlineOnTouchEnter />
609
- <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
610
- </ComposerPrimitive.Root>
611
- ```
612
-
613
- `unstable_insertNewlineOnTouchEnter` switches Enter to insert a newline on touch-primary devices (detected via `(pointer: coarse) and (not (any-pointer: fine))`), so the on-screen Return key never accidentally sends a half-finished message. Submission moves to the explicit Send button, matching WhatsApp, Slack, Discord, iMessage, ChatGPT, and Claude.ai.
614
-
615
- Desktop behavior is unchanged. A tablet paired with a hardware keyboard still gets `submitMode`'s usual semantics if you set `submitMode="ctrlEnter"` or `"none"` — the flag only downgrades the default `"enter"` mode.
616
-
617
- ### Floating Composer
618
-
619
- Primitives aren't bound to any layout. Here's how the floating composer on this docs site is built, using the same `ComposerPrimitive.Root` and `ComposerPrimitive.Input` positioned with CSS:
620
-
621
- ```tsx
622
- import { ComposerPrimitive } from "@assistant-ui/react";
623
-
624
- function FloatingComposer() {
625
- return (
626
- <div className="fixed bottom-6 left-1/2 z-40 w-full max-w-md -translate-x-1/2">
627
- <ComposerPrimitive.Root>
628
- <div className="rounded-xl border bg-background/80 shadow-lg backdrop-blur-sm">
629
- <ComposerPrimitive.Input
630
- asChild
631
- unstable_focusOnRunStart={false}
632
- unstable_focusOnScrollToBottom={false}
633
- >
634
- <textarea
635
- placeholder="Ask a question..."
636
- className="w-full resize-none bg-transparent px-3 py-2.5 text-sm focus:outline-none"
637
- rows={1}
638
- />
639
- </ComposerPrimitive.Input>
640
- </div>
641
- </ComposerPrimitive.Root>
642
- </div>
643
- );
644
- }
645
- ```
646
-
647
- The primitive handles everything about composing a message. The layout, animation, and visibility logic is all yours.
648
-
649
- ## Relationship to Components
650
-
651
- The [Thread](/docs/ui/thread) component includes a full composer built from these primitives. If you need a working chat UI fast, start there. When you need a composer that doesn't fit inside a thread, such as a floating input, a sidebar composer, or a multi-step form, reach for `ComposerPrimitive` directly.
652
-
653
- ## API Reference
654
-
655
- For full prop details on every part, see the [ComposerPrimitive API Reference](/docs/api-reference/primitives/composer).
656
-
657
- Related:
658
- - [ThreadPrimitive](/docs/primitives/thread)
659
- - [AttachmentPrimitive](/docs/primitives/attachment)