@copilotkit/vue 2.0.0-rc.2 → 2.0.0-rc.21

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 (335) hide show
  1. package/PARITY.md +3 -3
  2. package/dist/hooks/use-copilot-action.d.ts.map +1 -1
  3. package/dist/hooks/use-frontend-tool.d.ts +1 -1
  4. package/dist/hooks/use-frontend-tool.d.ts.map +1 -1
  5. package/dist/hooks/zod-parameters.d.ts +14 -0
  6. package/dist/hooks/zod-parameters.d.ts.map +1 -0
  7. package/dist/index.cjs +1 -73
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.mjs +365 -16920
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/use-render-activity-message-BAhbpSDh.js +16200 -0
  12. package/dist/use-render-activity-message-BAhbpSDh.js.map +1 -0
  13. package/dist/use-render-activity-message-DJ6q1qHV.cjs +114 -0
  14. package/dist/use-render-activity-message-DJ6q1qHV.cjs.map +1 -0
  15. package/dist/v2/components/A2UIMessageRenderer.d.ts +14 -0
  16. package/dist/v2/components/A2UIMessageRenderer.d.ts.map +1 -1
  17. package/dist/v2/components/A2UISurfaceActivityRenderer.vue.d.ts +10 -3
  18. package/dist/v2/components/A2UISurfaceActivityRenderer.vue.d.ts.map +1 -1
  19. package/dist/v2/components/CopilotKitInspector.vue.d.ts +5 -1
  20. package/dist/v2/components/CopilotKitInspector.vue.d.ts.map +1 -1
  21. package/dist/v2/components/InlineFeatureWarning.vue.d.ts.map +1 -1
  22. package/dist/v2/components/LicenseWarningBanner.vue.d.ts +2 -2
  23. package/dist/v2/components/LicenseWarningBanner.vue.d.ts.map +1 -1
  24. package/dist/v2/components/MCPAppsActivityRenderer.d.ts.map +1 -1
  25. package/dist/v2/components/OpenGenerativeUIRenderer.d.ts +13 -59
  26. package/dist/v2/components/OpenGenerativeUIRenderer.d.ts.map +1 -1
  27. package/dist/v2/components/a2ui/A2UIBuiltInToolCallRenderer.d.ts +0 -5
  28. package/dist/v2/components/a2ui/A2UIBuiltInToolCallRenderer.d.ts.map +1 -1
  29. package/dist/v2/components/a2ui/A2UICatalogContext.d.ts +10 -15
  30. package/dist/v2/components/a2ui/A2UICatalogContext.d.ts.map +1 -1
  31. package/dist/v2/components/a2ui/A2UIRecoveryStates.d.ts +14 -130
  32. package/dist/v2/components/a2ui/A2UIRecoveryStates.d.ts.map +1 -1
  33. package/dist/v2/components/a2ui/catalog.d.ts.map +1 -1
  34. package/dist/v2/components/a2ui/utils.d.ts +3 -15
  35. package/dist/v2/components/a2ui/utils.d.ts.map +1 -1
  36. package/dist/v2/components/a2ui.d.ts +9 -8
  37. package/dist/v2/components/a2ui.d.ts.map +1 -1
  38. package/dist/v2/components/chat/CopilotChat.vue.d.ts +2 -2
  39. package/dist/v2/components/chat/CopilotChat.vue.d.ts.map +1 -1
  40. package/dist/v2/components/chat/CopilotChatAssistantMessage.vue.d.ts.map +1 -1
  41. package/dist/v2/components/chat/CopilotChatAttachmentQueue.vue.d.ts.map +1 -1
  42. package/dist/v2/components/chat/CopilotChatAttachmentRenderer.vue.d.ts.map +1 -1
  43. package/dist/v2/components/chat/CopilotChatAudioRecorder.vue.d.ts +4 -8
  44. package/dist/v2/components/chat/CopilotChatAudioRecorder.vue.d.ts.map +1 -1
  45. package/dist/v2/components/chat/CopilotChatFeedbackCommentPopover.vue.d.ts +1 -1
  46. package/dist/v2/components/chat/CopilotChatFeedbackCommentPopover.vue.d.ts.map +1 -1
  47. package/dist/v2/components/chat/CopilotChatInput.vue.d.ts +6 -270
  48. package/dist/v2/components/chat/CopilotChatInput.vue.d.ts.map +1 -1
  49. package/dist/v2/components/chat/CopilotChatInspectorButton.vue.d.ts.map +1 -1
  50. package/dist/v2/components/chat/CopilotChatLightbox.vue.d.ts.map +1 -1
  51. package/dist/v2/components/chat/CopilotChatMessageView.vue.d.ts +1 -1
  52. package/dist/v2/components/chat/CopilotChatMessageView.vue.d.ts.map +1 -1
  53. package/dist/v2/components/chat/CopilotChatReasoningMessage.vue.d.ts.map +1 -1
  54. package/dist/v2/components/chat/CopilotChatToolCallGroup.vue.d.ts +1 -1
  55. package/dist/v2/components/chat/CopilotChatToolCallGroup.vue.d.ts.map +1 -1
  56. package/dist/v2/components/chat/CopilotChatToolCallItem.vue.d.ts.map +1 -1
  57. package/dist/v2/components/chat/CopilotChatToolCallsView.vue.d.ts +1 -1
  58. package/dist/v2/components/chat/CopilotChatToolCallsView.vue.d.ts.map +1 -1
  59. package/dist/v2/components/chat/CopilotChatUserMessage.vue.d.ts.map +1 -1
  60. package/dist/v2/components/chat/CopilotChatView.vue.d.ts +3 -3
  61. package/dist/v2/components/chat/CopilotChatView.vue.d.ts.map +1 -1
  62. package/dist/v2/components/chat/CopilotChatWorkSummary.vue.d.ts.map +1 -1
  63. package/dist/v2/components/chat/CopilotModalHeader.vue.d.ts.map +1 -1
  64. package/dist/v2/components/chat/CopilotPopup.vue.d.ts +8 -3
  65. package/dist/v2/components/chat/CopilotPopup.vue.d.ts.map +1 -1
  66. package/dist/v2/components/chat/CopilotPopupView.vue.d.ts +5 -3
  67. package/dist/v2/components/chat/CopilotPopupView.vue.d.ts.map +1 -1
  68. package/dist/v2/components/chat/CopilotPopupViewInternal.vue.d.ts +5 -3
  69. package/dist/v2/components/chat/CopilotPopupViewInternal.vue.d.ts.map +1 -1
  70. package/dist/v2/components/chat/CopilotSidebar.vue.d.ts +8 -3
  71. package/dist/v2/components/chat/CopilotSidebar.vue.d.ts.map +1 -1
  72. package/dist/v2/components/chat/CopilotSidebarView.vue.d.ts +6 -4
  73. package/dist/v2/components/chat/CopilotSidebarView.vue.d.ts.map +1 -1
  74. package/dist/v2/components/chat/CopilotSidebarViewInternal.vue.d.ts +6 -4
  75. package/dist/v2/components/chat/CopilotSidebarViewInternal.vue.d.ts.map +1 -1
  76. package/dist/v2/components/chat/CopilotThreadsDrawer.vue.d.ts.map +1 -1
  77. package/dist/v2/components/chat/StreamingMarkdownDefault.vue.d.ts +1 -0
  78. package/dist/v2/components/chat/StreamingMarkdownDefault.vue.d.ts.map +1 -1
  79. package/dist/v2/components/chat/audioRecorder.d.ts +3 -4
  80. package/dist/v2/components/chat/audioRecorder.d.ts.map +1 -1
  81. package/dist/v2/components/chat/copilotChatToolCallItemRender.d.ts +3 -3
  82. package/dist/v2/components/chat/copilotChatToolCallItemRender.d.ts.map +1 -1
  83. package/dist/v2/components/chat/forwarded-slots.d.ts +12 -0
  84. package/dist/v2/components/chat/forwarded-slots.d.ts.map +1 -0
  85. package/dist/v2/components/chat/index.d.ts +34 -31
  86. package/dist/v2/components/chat/index.d.ts.map +1 -1
  87. package/dist/v2/components/chat/inspector-shortcuts.d.ts +2 -1
  88. package/dist/v2/components/chat/inspector-shortcuts.d.ts.map +1 -1
  89. package/dist/v2/components/chat/message-feedback.d.ts +18 -49
  90. package/dist/v2/components/chat/message-feedback.d.ts.map +1 -1
  91. package/dist/v2/components/chat/tool-call-display-context.d.ts +4 -19
  92. package/dist/v2/components/chat/tool-call-display-context.d.ts.map +1 -1
  93. package/dist/v2/components/chat/tool-call-group-parts.d.ts +7 -20
  94. package/dist/v2/components/chat/tool-call-group-parts.d.ts.map +1 -1
  95. package/dist/v2/components/chat/turn-work.d.ts +0 -2
  96. package/dist/v2/components/chat/turn-work.d.ts.map +1 -1
  97. package/dist/v2/components/chat/types.d.ts +9 -4
  98. package/dist/v2/components/chat/types.d.ts.map +1 -1
  99. package/dist/v2/components/chat/use-chat-labels.d.ts +8 -0
  100. package/dist/v2/components/chat/use-chat-labels.d.ts.map +1 -0
  101. package/dist/v2/components/chat/use-copy-feedback.d.ts +11 -0
  102. package/dist/v2/components/chat/use-copy-feedback.d.ts.map +1 -0
  103. package/dist/v2/components/chat/use-lightbox.d.ts.map +1 -1
  104. package/dist/v2/components/icons/index.d.ts +968 -1
  105. package/dist/v2/components/icons/index.d.ts.map +1 -1
  106. package/dist/v2/components/ui/CopilotDropdownMenuContent.vue.d.ts +1 -1
  107. package/dist/v2/components/ui/CopilotDropdownMenuContent.vue.d.ts.map +1 -1
  108. package/dist/v2/hooks/use-agent-context.d.ts +2 -3
  109. package/dist/v2/hooks/use-agent-context.d.ts.map +1 -1
  110. package/dist/v2/hooks/use-agent.d.ts +4 -1
  111. package/dist/v2/hooks/use-agent.d.ts.map +1 -1
  112. package/dist/v2/hooks/use-attachments.d.ts +7 -0
  113. package/dist/v2/hooks/use-attachments.d.ts.map +1 -1
  114. package/dist/v2/hooks/use-capabilities.d.ts.map +1 -1
  115. package/dist/v2/hooks/use-component.d.ts +1 -0
  116. package/dist/v2/hooks/use-component.d.ts.map +1 -1
  117. package/dist/v2/hooks/use-configure-suggestions.d.ts +4 -9
  118. package/dist/v2/hooks/use-configure-suggestions.d.ts.map +1 -1
  119. package/dist/v2/hooks/use-default-render-tool.d.ts.map +1 -1
  120. package/dist/v2/hooks/use-frontend-tool.d.ts +5 -0
  121. package/dist/v2/hooks/use-frontend-tool.d.ts.map +1 -1
  122. package/dist/v2/hooks/use-human-in-the-loop.d.ts +2 -1
  123. package/dist/v2/hooks/use-human-in-the-loop.d.ts.map +1 -1
  124. package/dist/v2/hooks/use-interrupt.d.ts +0 -1
  125. package/dist/v2/hooks/use-interrupt.d.ts.map +1 -1
  126. package/dist/v2/hooks/use-keyboard-height.d.ts +1 -1
  127. package/dist/v2/hooks/use-keyboard-height.d.ts.map +1 -1
  128. package/dist/v2/hooks/use-pin-to-send.d.ts +4 -12
  129. package/dist/v2/hooks/use-pin-to-send.d.ts.map +1 -1
  130. package/dist/v2/hooks/use-render-activity-message.d.ts +13 -9
  131. package/dist/v2/hooks/use-render-activity-message.d.ts.map +1 -1
  132. package/dist/v2/hooks/use-render-custom-messages.d.ts +5 -7
  133. package/dist/v2/hooks/use-render-custom-messages.d.ts.map +1 -1
  134. package/dist/v2/hooks/use-suggestions.d.ts.map +1 -1
  135. package/dist/v2/hooks/use-threads.d.ts +0 -8
  136. package/dist/v2/hooks/use-threads.d.ts.map +1 -1
  137. package/dist/v2/index.cjs +1 -1
  138. package/dist/v2/index.mjs +197 -200
  139. package/dist/v2/index.mjs.map +1 -1
  140. package/dist/v2/lib/processPartialHtml.d.ts +1 -2
  141. package/dist/v2/lib/processPartialHtml.d.ts.map +1 -1
  142. package/dist/v2/lib/shallow-stable.d.ts.map +1 -1
  143. package/dist/v2/lib/vue-core.d.ts +12 -12
  144. package/dist/v2/lib/vue-core.d.ts.map +1 -1
  145. package/dist/v2/providers/CopilotChatConfigurationProvider.vue.d.ts.map +1 -1
  146. package/dist/v2/providers/CopilotKitProvider.types.d.ts +9 -129
  147. package/dist/v2/providers/CopilotKitProvider.types.d.ts.map +1 -1
  148. package/dist/v2/providers/CopilotKitProvider.vue.d.ts +9 -10
  149. package/dist/v2/providers/CopilotKitProvider.vue.d.ts.map +1 -1
  150. package/dist/v2/providers/chat-configuration-store-key.d.ts +8 -0
  151. package/dist/v2/providers/chat-configuration-store-key.d.ts.map +1 -0
  152. package/dist/v2/providers/markdown-renderer.d.ts +4 -2
  153. package/dist/v2/providers/markdown-renderer.d.ts.map +1 -1
  154. package/dist/v2/providers/types.d.ts +3 -46
  155. package/dist/v2/providers/types.d.ts.map +1 -1
  156. package/dist/v2/providers/use-inspector-thread-override.d.ts +5 -0
  157. package/dist/v2/providers/use-inspector-thread-override.d.ts.map +1 -1
  158. package/dist/v2/types/human-in-the-loop.d.ts +8 -29
  159. package/dist/v2/types/human-in-the-loop.d.ts.map +1 -1
  160. package/dist/v2/types/interrupt.d.ts +1 -22
  161. package/dist/v2/types/interrupt.d.ts.map +1 -1
  162. package/dist/v2/types/vue-activity-message-renderer.d.ts +16 -15
  163. package/dist/v2/types/vue-activity-message-renderer.d.ts.map +1 -1
  164. package/dist/v2/types/vue-custom-message-renderer.d.ts +7 -16
  165. package/dist/v2/types/vue-custom-message-renderer.d.ts.map +1 -1
  166. package/dist/v2/types/vue-tool-call-renderer.d.ts +16 -35
  167. package/dist/v2/types/vue-tool-call-renderer.d.ts.map +1 -1
  168. package/package.json +10 -11
  169. package/src/__tests__/build-entries.test.ts +27 -0
  170. package/src/hooks/__tests__/zod-parameters.test.ts +520 -0
  171. package/src/hooks/use-copilot-action.ts +2 -1
  172. package/src/hooks/use-frontend-tool.ts +3 -6
  173. package/src/hooks/zod-parameters.ts +162 -0
  174. package/src/v2/__tests__/exports.test.ts +10 -0
  175. package/src/v2/__tests__/mocks/web-inspector.ts +6 -0
  176. package/src/v2/__tests__/utils/test-helpers.ts +34 -4
  177. package/src/v2/components/A2UIMessageRenderer.ts +98 -68
  178. package/src/v2/components/A2UISurfaceActivityRenderer.vue +68 -103
  179. package/src/v2/components/CopilotKitInspector.vue +104 -51
  180. package/src/v2/components/InlineFeatureWarning.vue +20 -21
  181. package/src/v2/components/LicenseWarningBanner.vue +27 -135
  182. package/src/v2/components/MCPAppsActivityRenderer.ts +75 -201
  183. package/src/v2/components/OpenGenerativeUIRenderer.ts +122 -446
  184. package/src/v2/components/__tests__/A2UIMessageRenderer.test.ts +171 -8
  185. package/src/v2/components/__tests__/CopilotKitInspector.test.ts +42 -0
  186. package/src/v2/components/__tests__/LicenseWarningBanner.test.ts +60 -0
  187. package/src/v2/components/__tests__/OpenGenerativeUIRenderer.test.ts +64 -8
  188. package/src/v2/components/__tests__/OpenGenerativeUIToolRenderer.test.ts +38 -0
  189. package/src/v2/components/a2ui/A2UIBuiltInToolCallRenderer.ts +2 -7
  190. package/src/v2/components/a2ui/A2UICatalogContext.ts +27 -185
  191. package/src/v2/components/a2ui/A2UIRecoveryStates.ts +127 -327
  192. package/src/v2/components/a2ui/catalog.ts +3 -3
  193. package/src/v2/components/a2ui/utils.ts +13 -65
  194. package/src/v2/components/a2ui.ts +15 -22
  195. package/src/v2/components/chat/CopilotChat.vue +147 -356
  196. package/src/v2/components/chat/CopilotChatAssistantMessage.vue +19 -43
  197. package/src/v2/components/chat/CopilotChatAttachmentQueue.vue +36 -55
  198. package/src/v2/components/chat/CopilotChatAttachmentRenderer.vue +14 -6
  199. package/src/v2/components/chat/CopilotChatAudioRecorder.vue +19 -246
  200. package/src/v2/components/chat/CopilotChatFeedbackCommentPopover.vue +2 -2
  201. package/src/v2/components/chat/CopilotChatInput.vue +108 -436
  202. package/src/v2/components/chat/CopilotChatInspectorButton.vue +45 -108
  203. package/src/v2/components/chat/CopilotChatLightbox.vue +10 -31
  204. package/src/v2/components/chat/CopilotChatMessageView.vue +82 -210
  205. package/src/v2/components/chat/CopilotChatReasoningMessage.vue +7 -15
  206. package/src/v2/components/chat/CopilotChatToolCallGroup.vue +63 -71
  207. package/src/v2/components/chat/CopilotChatToolCallItem.vue +8 -6
  208. package/src/v2/components/chat/CopilotChatToolCallsView.vue +31 -32
  209. package/src/v2/components/chat/CopilotChatUserMessage.vue +24 -112
  210. package/src/v2/components/chat/CopilotChatView.vue +33 -28
  211. package/src/v2/components/chat/CopilotChatWorkSummary.vue +26 -36
  212. package/src/v2/components/chat/CopilotModalHeader.vue +11 -23
  213. package/src/v2/components/chat/CopilotPopup.vue +23 -25
  214. package/src/v2/components/chat/CopilotPopupView.vue +10 -39
  215. package/src/v2/components/chat/CopilotPopupViewInternal.vue +35 -131
  216. package/src/v2/components/chat/CopilotSidebar.vue +23 -25
  217. package/src/v2/components/chat/CopilotSidebarView.vue +10 -39
  218. package/src/v2/components/chat/CopilotSidebarViewInternal.vue +38 -59
  219. package/src/v2/components/chat/CopilotThreadsDrawer.vue +37 -102
  220. package/src/v2/components/chat/StreamingMarkdownDefault.vue +15 -28
  221. package/src/v2/components/chat/__tests__/CopilotChat.labels.test.ts +19 -4
  222. package/src/v2/components/chat/__tests__/CopilotChat.test.ts +12 -10
  223. package/src/v2/components/chat/__tests__/CopilotChatActivityRendering.e2e.test.ts +26 -9
  224. package/src/v2/components/chat/__tests__/CopilotChatAssistantMessage.learningFeedback.test.ts +5 -5
  225. package/src/v2/components/chat/__tests__/CopilotChatAttachmentQueue.test.ts +28 -0
  226. package/src/v2/components/chat/__tests__/CopilotChatInput.test.ts +89 -1
  227. package/src/v2/components/chat/__tests__/CopilotChatMessageView.test.ts +247 -403
  228. package/src/v2/components/chat/__tests__/CopilotChatMessageView.toolCallDisplay.test.ts +1 -99
  229. package/src/v2/components/chat/__tests__/CopilotPopup.test.ts +90 -1
  230. package/src/v2/components/chat/__tests__/CopilotPopupView.test.ts +19 -0
  231. package/src/v2/components/chat/__tests__/CopilotSidebar.test.ts +90 -1
  232. package/src/v2/components/chat/__tests__/CopilotSidebarView.position.test.ts +32 -8
  233. package/src/v2/components/chat/__tests__/CopilotSidebarView.test.ts +2 -1
  234. package/src/v2/components/chat/__tests__/StreamingMarkdownDefault.test.ts +54 -0
  235. package/src/v2/components/chat/audioRecorder.ts +4 -7
  236. package/src/v2/components/chat/copilotChatToolCallItemRender.ts +24 -89
  237. package/src/v2/components/chat/forwarded-slots.ts +17 -0
  238. package/src/v2/components/chat/index.ts +0 -1
  239. package/src/v2/components/chat/inspector-shortcuts.ts +10 -16
  240. package/src/v2/components/chat/message-feedback.ts +62 -197
  241. package/src/v2/components/chat/tool-call-display-context.ts +6 -22
  242. package/src/v2/components/chat/tool-call-group-parts.ts +47 -108
  243. package/src/v2/components/chat/turn-work.ts +0 -9
  244. package/src/v2/components/chat/types.ts +12 -4
  245. package/src/v2/components/chat/use-chat-labels.ts +16 -0
  246. package/src/v2/components/chat/use-copy-feedback.ts +21 -0
  247. package/src/v2/components/chat/use-lightbox.ts +15 -33
  248. package/src/v2/components/icons/__tests__/icons.test.ts +72 -68
  249. package/src/v2/components/icons/index.ts +109 -27
  250. package/src/v2/hooks/__tests__/use-agent-error-state.test.ts +5 -3
  251. package/src/v2/hooks/__tests__/use-agent-stability.test.ts +25 -4
  252. package/src/v2/hooks/__tests__/use-agent-throttle.test.ts +5 -1
  253. package/src/v2/hooks/__tests__/use-agent.test.ts +6 -3
  254. package/src/v2/hooks/__tests__/use-component.test.ts +21 -0
  255. package/src/v2/hooks/__tests__/use-configure-suggestions.test.ts +30 -1
  256. package/src/v2/hooks/__tests__/use-default-render-tool.test.ts +10 -10
  257. package/src/v2/hooks/__tests__/use-frontend-tool.e2e.test.ts +66 -1
  258. package/src/v2/hooks/__tests__/use-human-in-the-loop.e2e.test.ts +6 -1
  259. package/src/v2/hooks/__tests__/use-human-in-the-loop.test.ts +187 -12
  260. package/src/v2/hooks/__tests__/use-interrupt.test.ts +97 -0
  261. package/src/v2/hooks/__tests__/use-render-activity-message.test.ts +106 -0
  262. package/src/v2/hooks/__tests__/use-render-tool.test.ts +3 -6
  263. package/src/v2/hooks/__tests__/use-threads.test.ts +48 -6
  264. package/src/v2/hooks/__tests__/zod-regression.test.ts +5 -4
  265. package/src/v2/hooks/use-agent-context.ts +4 -10
  266. package/src/v2/hooks/use-agent.ts +86 -290
  267. package/src/v2/hooks/use-attachments.ts +48 -168
  268. package/src/v2/hooks/use-capabilities.ts +2 -7
  269. package/src/v2/hooks/use-component.ts +7 -4
  270. package/src/v2/hooks/use-configure-suggestions.ts +28 -218
  271. package/src/v2/hooks/use-default-render-tool.ts +34 -94
  272. package/src/v2/hooks/use-frontend-tool.ts +10 -10
  273. package/src/v2/hooks/use-human-in-the-loop.ts +11 -80
  274. package/src/v2/hooks/use-interrupt.ts +29 -308
  275. package/src/v2/hooks/use-keyboard-height.ts +17 -40
  276. package/src/v2/hooks/use-pin-to-send.ts +15 -99
  277. package/src/v2/hooks/use-render-activity-message.ts +31 -55
  278. package/src/v2/hooks/use-render-custom-messages.ts +24 -88
  279. package/src/v2/hooks/use-suggestions.ts +9 -33
  280. package/src/v2/hooks/use-threads.ts +43 -273
  281. package/src/v2/lib/__tests__/shallow-stable.test.ts +54 -0
  282. package/src/v2/lib/__tests__/vue-core-renderers.test.ts +42 -0
  283. package/src/v2/lib/processPartialHtml.ts +6 -21
  284. package/src/v2/lib/shallow-stable.ts +2 -16
  285. package/src/v2/lib/vue-core.ts +69 -78
  286. package/src/v2/providers/CopilotChatConfigurationProvider.vue +48 -186
  287. package/src/v2/providers/CopilotKitProvider.types.ts +12 -132
  288. package/src/v2/providers/CopilotKitProvider.vue +237 -510
  289. package/src/v2/providers/__tests__/CopilotChatConfigurationProvider.test.ts +22 -2
  290. package/src/v2/providers/__tests__/CopilotKitProvider.a2ui.test.ts +20 -2
  291. package/src/v2/providers/__tests__/CopilotKitProvider.config.test.ts +124 -0
  292. package/src/v2/providers/__tests__/CopilotKitProvider.headersAtSendTime.test.ts +3 -3
  293. package/src/v2/providers/__tests__/CopilotKitProvider.learning.test.ts +3 -1
  294. package/src/v2/providers/__tests__/CopilotKitProvider.sandboxFunctions.test.ts +4 -1
  295. package/src/v2/providers/__tests__/CopilotKitProvider.test.ts +53 -26
  296. package/src/v2/providers/chat-configuration-store-key.ts +9 -0
  297. package/src/v2/providers/markdown-renderer.ts +8 -2
  298. package/src/v2/providers/types.ts +3 -49
  299. package/src/v2/providers/use-inspector-thread-override.ts +22 -80
  300. package/src/v2/types/__tests__/defineToolCallRenderer.test.ts +28 -33
  301. package/src/v2/types/defineToolCallRenderer.ts +5 -4
  302. package/src/v2/types/human-in-the-loop.ts +8 -32
  303. package/src/v2/types/interrupt.ts +7 -31
  304. package/src/v2/types/vue-activity-message-renderer.ts +24 -15
  305. package/src/v2/types/vue-custom-message-renderer.ts +12 -16
  306. package/src/v2/types/vue-tool-call-renderer.ts +23 -38
  307. package/tsconfig.json +0 -1
  308. package/vite.config.ts +8 -5
  309. package/vitest.config.ts +12 -7
  310. package/dist/v2/components/chat/BasicMarkdown.vue.d.ts +0 -9
  311. package/dist/v2/components/chat/BasicMarkdown.vue.d.ts.map +0 -1
  312. package/dist/v2/components/chat/normalize-auto-scroll.d.ts +0 -3
  313. package/dist/v2/components/chat/normalize-auto-scroll.d.ts.map +0 -1
  314. package/dist/v2/components/chat/tool-call-layout.d.ts +0 -115
  315. package/dist/v2/components/chat/tool-call-layout.d.ts.map +0 -1
  316. package/dist/v2/lib/is-mobile-viewport.d.ts +0 -15
  317. package/dist/v2/lib/is-mobile-viewport.d.ts.map +0 -1
  318. package/dist/v2/lib/message-feedback.d.ts +0 -33
  319. package/dist/v2/lib/message-feedback.d.ts.map +0 -1
  320. package/dist/v2/lib/transcription-client.d.ts +0 -19
  321. package/dist/v2/lib/transcription-client.d.ts.map +0 -1
  322. package/src/v2/components/__tests__/A2UICatalogContext.test.ts +0 -63
  323. package/src/v2/components/a2ui/__tests__/A2UIRecoveryStates.test.ts +0 -175
  324. package/src/v2/components/chat/BasicMarkdown.vue +0 -160
  325. package/src/v2/components/chat/__tests__/BasicMarkdown.test.ts +0 -69
  326. package/src/v2/components/chat/__tests__/normalize-auto-scroll.test.ts +0 -39
  327. package/src/v2/components/chat/normalize-auto-scroll.ts +0 -17
  328. package/src/v2/components/chat/tool-call-layout.ts +0 -304
  329. package/src/v2/lib/__tests__/is-mobile-viewport.test.ts +0 -48
  330. package/src/v2/lib/__tests__/message-feedback.test.ts +0 -152
  331. package/src/v2/lib/__tests__/processPartialHtml.test.ts +0 -84
  332. package/src/v2/lib/__tests__/transcription-client.test.ts +0 -67
  333. package/src/v2/lib/is-mobile-viewport.ts +0 -23
  334. package/src/v2/lib/message-feedback.ts +0 -120
  335. package/src/v2/lib/transcription-client.ts +0 -151
@@ -8,13 +8,20 @@ import {
8
8
  useAttrs,
9
9
  watch,
10
10
  } from "vue";
11
+ import {
12
+ ɵPOPUP_ANIMATION_MS,
13
+ ɵbindPopupDismiss,
14
+ ɵdimensionToCss,
15
+ } from "@copilotkit/core";
11
16
  import { CopilotChatDefaultLabels } from "../../providers/types";
12
17
  import { useCopilotChatConfiguration } from "../../providers/useCopilotChatConfiguration";
13
18
  import CopilotChatToggleButton from "./CopilotChatToggleButton.vue";
14
19
  import CopilotChatView from "./CopilotChatView.vue";
15
20
  import CopilotModalHeader from "./CopilotModalHeader.vue";
21
+ import { forwardedSlotNames } from "./forwarded-slots";
16
22
  import type {
17
23
  CopilotChatFeatherSlotProps,
24
+ CopilotChatInterruptSlotProps,
18
25
  CopilotChatMessageViewSlotProps,
19
26
  CopilotChatScrollToBottomButtonSlotProps,
20
27
  CopilotChatScrollViewSlotProps,
@@ -30,7 +37,7 @@ defineOptions({ inheritAttrs: false });
30
37
 
31
38
  const DEFAULT_POPUP_WIDTH = 420;
32
39
  const DEFAULT_POPUP_HEIGHT = 560;
33
- const POPUP_ANIMATION_MS = 200;
40
+ const POPUP_ANIMATION_MS = ɵPOPUP_ANIMATION_MS;
34
41
 
35
42
  const props = withDefaults(
36
43
  defineProps<Omit<CopilotPopupViewProps, "defaultOpen">>(),
@@ -61,14 +68,22 @@ defineSlots<{
61
68
  "scroll-to-bottom-button"?: (
62
69
  props: CopilotChatScrollToBottomButtonSlotProps,
63
70
  ) => unknown;
71
+ interrupt?: (props: CopilotChatInterruptSlotProps) => unknown;
64
72
  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;
65
73
  "suggestion-view"?: (
66
74
  props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,
67
75
  ) => unknown;
68
76
  "welcome-screen"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;
69
77
  "welcome-message"?: () => unknown;
78
+ // Any other slot goes to the chat view, as on CopilotChat.
79
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
+ [key: string]: ((props: any) => unknown) | undefined;
70
81
  }>();
71
82
 
83
+ // Slots this component renders itself. It passes every other slot to the
84
+ // chat view.
85
+ const OWN_SLOTS = ["header", "toggle-button"] as const;
86
+
72
87
  const emit = defineEmits<{
73
88
  "submit-message": [value: string];
74
89
  stop: [];
@@ -90,7 +105,6 @@ const containerRef = ref<HTMLElement | null>(null);
90
105
  const isRendered = ref(config.value?.isModalOpen ?? false);
91
106
  const isAnimatingOut = ref(false);
92
107
  let animationTimer: ReturnType<typeof setTimeout> | undefined;
93
- let focusTimer: ReturnType<typeof setTimeout> | undefined;
94
108
 
95
109
  const isPopupOpen = computed(() => config.value?.isModalOpen ?? false);
96
110
  const labels = computed(() => config.value?.labels ?? CopilotChatDefaultLabels);
@@ -103,8 +117,11 @@ const popupAnimationClass = computed(() =>
103
117
  const popupStyle = computed(
104
118
  () =>
105
119
  ({
106
- "--copilot-popup-width": dimensionToCss(props.width, DEFAULT_POPUP_WIDTH),
107
- "--copilot-popup-height": dimensionToCss(
120
+ "--copilot-popup-width": ɵdimensionToCss(
121
+ props.width,
122
+ DEFAULT_POPUP_WIDTH,
123
+ ),
124
+ "--copilot-popup-height": ɵdimensionToCss(
108
125
  props.height,
109
126
  DEFAULT_POPUP_HEIGHT,
110
127
  ),
@@ -117,19 +134,6 @@ const popupStyle = computed(
117
134
  }) as Record<string, string>,
118
135
  );
119
136
 
120
- function dimensionToCss(
121
- value: number | string | undefined,
122
- fallback: number,
123
- ): string {
124
- if (typeof value === "number" && Number.isFinite(value)) {
125
- return `${value}px`;
126
- }
127
- if (typeof value === "string" && value.trim().length > 0) {
128
- return value;
129
- }
130
- return `${fallback}px`;
131
- }
132
-
133
137
  function closePopup() {
134
138
  config.value?.setModalOpen?.(false);
135
139
  }
@@ -236,87 +240,20 @@ watch(
236
240
  { immediate: true },
237
241
  );
238
242
 
239
- watch(
240
- isPopupOpen,
241
- (open, _old, onCleanup) => {
242
- if (!open || typeof window === "undefined") {
243
- return;
244
- }
245
-
246
- const handleKeyDown = (event: KeyboardEvent) => {
247
- if (event.key === "Escape") {
248
- event.preventDefault();
249
- closePopup();
250
- }
251
- };
252
-
253
- window.addEventListener("keydown", handleKeyDown);
254
- onCleanup(() => {
255
- window.removeEventListener("keydown", handleKeyDown);
256
- });
257
- },
258
- { immediate: true },
259
- );
260
-
261
- watch(
262
- isPopupOpen,
263
- (open, _old, onCleanup) => {
264
- if (!open) {
265
- return;
266
- }
267
-
268
- focusTimer = setTimeout(() => {
269
- if (typeof document === "undefined") {
270
- return;
271
- }
272
- const container = containerRef.value;
273
- if (container && !container.contains(document.activeElement)) {
274
- container.focus({ preventScroll: true });
275
- }
276
- }, POPUP_ANIMATION_MS);
277
-
278
- onCleanup(() => {
279
- if (focusTimer) {
280
- clearTimeout(focusTimer);
281
- focusTimer = undefined;
282
- }
283
- });
284
- },
285
- { immediate: true },
286
- );
287
-
243
+ // Escape, a click outside (when enabled), and focus once the popup opens.
288
244
  watch(
289
245
  [isPopupOpen, () => props.clickOutsideToClose],
290
- ([open, allowClose], _old, onCleanup) => {
291
- if (!open || !allowClose || typeof document === "undefined") {
246
+ ([open, clickOutsideToClose], _old, onCleanup) => {
247
+ if (!open) {
292
248
  return;
293
249
  }
294
-
295
- const handlePointerDown = (event: PointerEvent) => {
296
- const target = event.target as Node | null;
297
- if (!target) {
298
- return;
299
- }
300
-
301
- const container = containerRef.value;
302
- if (container?.contains(target)) {
303
- return;
304
- }
305
-
306
- const toggleButton = document.querySelector(
307
- "[data-slot='chat-toggle-button']",
308
- );
309
- if (toggleButton?.contains(target)) {
310
- return;
311
- }
312
-
313
- closePopup();
314
- };
315
-
316
- document.addEventListener("pointerdown", handlePointerDown);
317
- onCleanup(() => {
318
- document.removeEventListener("pointerdown", handlePointerDown);
319
- });
250
+ onCleanup(
251
+ ɵbindPopupDismiss({
252
+ getContainer: () => containerRef.value,
253
+ onDismiss: closePopup,
254
+ clickOutsideToClose: clickOutsideToClose === true,
255
+ }),
256
+ );
320
257
  },
321
258
  { immediate: true },
322
259
  );
@@ -329,9 +266,6 @@ onBeforeUnmount(() => {
329
266
  if (animationTimer) {
330
267
  clearTimeout(animationTimer);
331
268
  }
332
- if (focusTimer) {
333
- clearTimeout(focusTimer);
334
- }
335
269
  });
336
270
  </script>
337
271
 
@@ -385,42 +319,12 @@ onBeforeUnmount(() => {
385
319
  :on-finish-transcribe-with-audio="onFinishTranscribeWithAudio"
386
320
  v-bind="chatViewBindings"
387
321
  >
388
- <template v-if="$slots['message-view']" #message-view="slotProps">
389
- <slot name="message-view" v-bind="slotProps" />
390
- </template>
391
-
392
- <template v-if="$slots['scroll-view']" #scroll-view="slotProps">
393
- <slot name="scroll-view" v-bind="slotProps" />
394
- </template>
395
-
396
- <template v-if="$slots.feather" #feather>
397
- <slot name="feather" />
398
- </template>
399
-
400
322
  <template
401
- v-if="$slots['scroll-to-bottom-button']"
402
- #scroll-to-bottom-button="slotProps"
323
+ v-for="slotName in forwardedSlotNames($slots, OWN_SLOTS)"
324
+ :key="slotName"
325
+ #[slotName]="slotProps"
403
326
  >
404
- <slot name="scroll-to-bottom-button" v-bind="slotProps" />
405
- </template>
406
-
407
- <template v-if="$slots.input" #input="slotProps">
408
- <slot name="input" v-bind="slotProps" />
409
- </template>
410
-
411
- <template
412
- v-if="$slots['suggestion-view']"
413
- #suggestion-view="slotProps"
414
- >
415
- <slot name="suggestion-view" v-bind="slotProps" />
416
- </template>
417
-
418
- <template v-if="$slots['welcome-screen']" #welcome-screen="slotProps">
419
- <slot name="welcome-screen" v-bind="slotProps" />
420
- </template>
421
-
422
- <template v-if="$slots['welcome-message']" #welcome-message>
423
- <slot name="welcome-message" />
327
+ <slot :name="slotName" v-bind="slotProps" />
424
328
  </template>
425
329
  </CopilotChatView>
426
330
  </div>
@@ -4,9 +4,14 @@ import CopilotChat from "./CopilotChat.vue";
4
4
  import CopilotSidebarView from "./CopilotSidebarView.vue";
5
5
  import CopilotSidebarWelcomeScreen from "./CopilotSidebarWelcomeScreen.vue";
6
6
  import InlineFeatureWarning from "../InlineFeatureWarning.vue";
7
+ import { forwardedSlotNames } from "./forwarded-slots";
7
8
  import { useLicenseContext } from "../../providers/useLicenseContext";
8
9
  import type {
10
+ CopilotChatFeatherSlotProps,
11
+ CopilotChatInterruptSlotProps,
9
12
  CopilotChatMessageViewSlotProps,
13
+ CopilotChatScrollToBottomButtonSlotProps,
14
+ CopilotChatScrollViewSlotProps,
10
15
  CopilotChatViewOverrideSlotProps,
11
16
  CopilotChatWelcomeScreenSlotProps,
12
17
  CopilotSidebarProps,
@@ -52,14 +57,28 @@ defineSlots<{
52
57
  "toggle-button"?: (props: CopilotSidebarViewToggleButtonSlotProps) => unknown;
53
58
  "chat-view"?: (props: CopilotChatViewOverrideSlotProps) => unknown;
54
59
  "message-view"?: (props: CopilotChatMessageViewSlotProps) => unknown;
60
+ "scroll-view"?: (props: CopilotChatScrollViewSlotProps) => unknown;
61
+ feather?: (props: CopilotChatFeatherSlotProps) => unknown;
62
+ "scroll-to-bottom-button"?: (
63
+ props: CopilotChatScrollToBottomButtonSlotProps,
64
+ ) => unknown;
65
+ interrupt?: (props: CopilotChatInterruptSlotProps) => unknown;
55
66
  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;
56
67
  "suggestion-view"?: (
57
68
  props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,
58
69
  ) => unknown;
59
70
  "welcome-screen"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;
60
71
  "welcome-message"?: () => unknown;
72
+ // Any other slot goes to the chat view, as on CopilotChat.
73
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
74
+ [key: string]: ((props: any) => unknown) | undefined;
61
75
  }>();
62
76
 
77
+ // Slots this component renders itself and does not pass to the view. It passes
78
+ // every other slot to the view. It also renders `input` and `suggestion-view`
79
+ // in its welcome screen, so those two go to both places.
80
+ const OWN_SLOTS = ["chat-view", "welcome-screen", "welcome-message"] as const;
81
+
63
82
  defineEmits<{
64
83
  "submit-message": [value: string];
65
84
  stop: [];
@@ -123,15 +142,12 @@ watch(
123
142
  :on-finish-transcribe-with-audio="slotProps.onFinishTranscribeWithAudio"
124
143
  v-bind="sidebarViewEventBindings(slotProps)"
125
144
  >
126
- <template v-if="$slots.header" #header="headerProps">
127
- <slot name="header" v-bind="headerProps" />
128
- </template>
129
-
130
145
  <template
131
- v-if="$slots['toggle-button']"
132
- #toggle-button="toggleButtonProps"
146
+ v-for="slotName in forwardedSlotNames($slots, OWN_SLOTS)"
147
+ :key="slotName"
148
+ #[slotName]="forwardedProps"
133
149
  >
134
- <slot name="toggle-button" v-bind="toggleButtonProps" />
150
+ <slot :name="slotName" v-bind="forwardedProps" />
135
151
  </template>
136
152
 
137
153
  <template #welcome-screen="welcomeScreenProps">
@@ -157,24 +173,6 @@ watch(
157
173
  </template>
158
174
  </CopilotSidebarWelcomeScreen>
159
175
  </template>
160
-
161
- <template
162
- v-if="$slots['message-view']"
163
- #message-view="messageViewProps"
164
- >
165
- <slot name="message-view" v-bind="messageViewProps" />
166
- </template>
167
-
168
- <template v-if="$slots.input" #input="inputProps">
169
- <slot name="input" v-bind="inputProps" />
170
- </template>
171
-
172
- <template
173
- v-if="$slots['suggestion-view']"
174
- #suggestion-view="suggestionViewProps"
175
- >
176
- <slot name="suggestion-view" v-bind="suggestionViewProps" />
177
- </template>
178
176
  </CopilotSidebarView>
179
177
  </template>
180
178
  </CopilotChat>
@@ -1,9 +1,11 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, useAttrs } from "vue";
3
3
  import CopilotChatConfigurationProvider from "../../providers/CopilotChatConfigurationProvider.vue";
4
+ import { forwardedSlotNames } from "./forwarded-slots";
4
5
  import CopilotSidebarViewInternal from "./CopilotSidebarViewInternal.vue";
5
6
  import type {
6
7
  CopilotChatFeatherSlotProps,
8
+ CopilotChatInterruptSlotProps,
7
9
  CopilotChatWelcomeScreenSlotProps,
8
10
  CopilotChatMessageViewSlotProps,
9
11
  CopilotChatScrollToBottomButtonSlotProps,
@@ -50,12 +52,16 @@ defineSlots<{
50
52
  "scroll-to-bottom-button"?: (
51
53
  props: CopilotChatScrollToBottomButtonSlotProps,
52
54
  ) => unknown;
55
+ interrupt?: (props: CopilotChatInterruptSlotProps) => unknown;
53
56
  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;
54
57
  "suggestion-view"?: (
55
58
  props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,
56
59
  ) => unknown;
57
60
  "welcome-screen"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;
58
61
  "welcome-message"?: () => unknown;
62
+ // Any other slot goes to the chat view, as on CopilotChat.
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ [key: string]: ((props: any) => unknown) | undefined;
59
65
  }>();
60
66
 
61
67
  const emit = defineEmits<{
@@ -117,47 +123,12 @@ const forwardedEventListeners = computed(() => {
117
123
  <template>
118
124
  <CopilotChatConfigurationProvider :is-modal-default-open="defaultOpen">
119
125
  <CopilotSidebarViewInternal v-bind="internalBindings">
120
- <template v-if="$slots.header" #header="slotProps">
121
- <slot name="header" v-bind="slotProps" />
122
- </template>
123
-
124
- <template v-if="$slots['toggle-button']" #toggle-button="slotProps">
125
- <slot name="toggle-button" v-bind="slotProps" />
126
- </template>
127
-
128
- <template v-if="$slots['message-view']" #message-view="slotProps">
129
- <slot name="message-view" v-bind="slotProps" />
130
- </template>
131
-
132
- <template v-if="$slots['scroll-view']" #scroll-view="slotProps">
133
- <slot name="scroll-view" v-bind="slotProps" />
134
- </template>
135
-
136
- <template v-if="$slots.feather" #feather="slotProps">
137
- <slot name="feather" v-bind="slotProps" />
138
- </template>
139
-
140
126
  <template
141
- v-if="$slots['scroll-to-bottom-button']"
142
- #scroll-to-bottom-button="slotProps"
127
+ v-for="slotName in forwardedSlotNames($slots)"
128
+ :key="slotName"
129
+ #[slotName]="slotProps"
143
130
  >
144
- <slot name="scroll-to-bottom-button" v-bind="slotProps" />
145
- </template>
146
-
147
- <template v-if="$slots.input" #input="slotProps">
148
- <slot name="input" v-bind="slotProps" />
149
- </template>
150
-
151
- <template v-if="$slots['suggestion-view']" #suggestion-view="slotProps">
152
- <slot name="suggestion-view" v-bind="slotProps" />
153
- </template>
154
-
155
- <template v-if="$slots['welcome-screen']" #welcome-screen="slotProps">
156
- <slot name="welcome-screen" v-bind="slotProps" />
157
- </template>
158
-
159
- <template v-if="$slots['welcome-message']" #welcome-message>
160
- <slot name="welcome-message" />
131
+ <slot :name="slotName" v-bind="slotProps" />
161
132
  </template>
162
133
  </CopilotSidebarViewInternal>
163
134
  </CopilotChatConfigurationProvider>
@@ -8,13 +8,17 @@ import {
8
8
  useAttrs,
9
9
  watch,
10
10
  } from "vue";
11
+ import { ɵcreateDockedSidebar, ɵdimensionToCss } from "@copilotkit/core";
12
+ import type { ɵDockedSidebar } from "@copilotkit/core";
11
13
  import { CopilotChatDefaultLabels } from "../../providers/types";
12
14
  import { useCopilotChatConfiguration } from "../../providers/useCopilotChatConfiguration";
13
15
  import CopilotChatToggleButton from "./CopilotChatToggleButton.vue";
14
16
  import CopilotChatView from "./CopilotChatView.vue";
15
17
  import CopilotModalHeader from "./CopilotModalHeader.vue";
18
+ import { forwardedSlotNames } from "./forwarded-slots";
16
19
  import type {
17
20
  CopilotChatFeatherSlotProps,
21
+ CopilotChatInterruptSlotProps,
18
22
  CopilotChatMessageViewSlotProps,
19
23
  CopilotChatScrollToBottomButtonSlotProps,
20
24
  CopilotChatScrollViewSlotProps,
@@ -59,14 +63,22 @@ defineSlots<{
59
63
  "scroll-to-bottom-button"?: (
60
64
  props: CopilotChatScrollToBottomButtonSlotProps,
61
65
  ) => unknown;
66
+ interrupt?: (props: CopilotChatInterruptSlotProps) => unknown;
62
67
  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;
63
68
  "suggestion-view"?: (
64
69
  props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,
65
70
  ) => unknown;
66
71
  "welcome-screen"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;
67
72
  "welcome-message"?: () => unknown;
73
+ // Any other slot goes to the chat view, as on CopilotChat.
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
+ [key: string]: ((props: any) => unknown) | undefined;
68
76
  }>();
69
77
 
78
+ // Slots this component renders itself. It passes every other slot to the
79
+ // chat view.
80
+ const OWN_SLOTS = ["header", "toggle-button"] as const;
81
+
70
82
  const emit = defineEmits<{
71
83
  "submit-message": [value: string];
72
84
  stop: [];
@@ -112,32 +124,23 @@ const asideAttrs = computed(() => {
112
124
  const asideStyle = computed(
113
125
  () =>
114
126
  ({
115
- "--sidebar-width": widthToCss(resolvedSidebarWidth.value),
127
+ "--sidebar-width": widthCss.value,
116
128
  paddingTop: "env(safe-area-inset-top)",
117
129
  paddingBottom: "env(safe-area-inset-bottom)",
118
130
  }) as Record<string, string>,
119
131
  );
120
- // The page makes room on the docked edge (desktop only).
121
- const bodyMarginStyle = computed(() => {
122
- const margin =
123
- props.position === "left" ? "margin-inline-start" : "margin-inline-end";
124
- return `
125
- @media (min-width: 768px) {
126
- body {
127
- ${margin}: ${widthToMargin(resolvedSidebarWidth.value)};
128
- transition: ${margin} ${SIDEBAR_TRANSITION_MS}ms ease;
129
- }
130
- }
131
- `;
132
- });
133
-
134
- function widthToCss(width: number | string): string {
135
- return typeof width === "number" ? `${width}px` : width;
136
- }
132
+ const widthCss = computed(() =>
133
+ ɵdimensionToCss(resolvedSidebarWidth.value, DEFAULT_SIDEBAR_WIDTH),
134
+ );
137
135
 
138
- function widthToMargin(width: number | string): string {
139
- return typeof width === "number" ? `${width}px` : width;
140
- }
136
+ // The page makes room on the docked edge (desktop only).
137
+ let dock: ɵDockedSidebar | undefined;
138
+ watch(
139
+ [isSidebarOpen, () => props.position, widthCss],
140
+ ([open, position, width]) => {
141
+ dock?.set({ open, position, width });
142
+ },
143
+ );
141
144
 
142
145
  function updateMeasuredWidth() {
143
146
  if (props.width !== undefined || !sidebarRef.value) {
@@ -235,6 +238,14 @@ watch(
235
238
  );
236
239
 
237
240
  onMounted(async () => {
241
+ dock = ɵcreateDockedSidebar(document, {
242
+ transitionMs: SIDEBAR_TRANSITION_MS,
243
+ });
244
+ dock.set({
245
+ open: isSidebarOpen.value,
246
+ position: props.position,
247
+ width: widthCss.value,
248
+ });
238
249
  await nextTick();
239
250
  updateMeasuredWidth();
240
251
 
@@ -253,16 +264,14 @@ onMounted(async () => {
253
264
  });
254
265
 
255
266
  onBeforeUnmount(() => {
267
+ dock?.dispose();
268
+ dock = undefined;
256
269
  resizeObserver?.disconnect();
257
270
  resizeObserver = null;
258
271
  });
259
272
  </script>
260
273
 
261
274
  <template>
262
- <component :is="'style'" v-if="isSidebarOpen">
263
- {{ bodyMarginStyle }}
264
- </component>
265
-
266
275
  <slot
267
276
  name="toggle-button"
268
277
  :is-open="isSidebarOpen"
@@ -317,42 +326,12 @@ onBeforeUnmount(() => {
317
326
  :on-finish-transcribe-with-audio="onFinishTranscribeWithAudio"
318
327
  v-bind="chatViewEventProps"
319
328
  >
320
- <template v-if="$slots['message-view']" #message-view="slotProps">
321
- <slot name="message-view" v-bind="slotProps" />
322
- </template>
323
-
324
- <template v-if="$slots['scroll-view']" #scroll-view="slotProps">
325
- <slot name="scroll-view" v-bind="slotProps" />
326
- </template>
327
-
328
- <template v-if="$slots.feather" #feather>
329
- <slot name="feather" />
330
- </template>
331
-
332
- <template
333
- v-if="$slots['scroll-to-bottom-button']"
334
- #scroll-to-bottom-button="slotProps"
335
- >
336
- <slot name="scroll-to-bottom-button" v-bind="slotProps" />
337
- </template>
338
-
339
- <template v-if="$slots.input" #input="slotProps">
340
- <slot name="input" v-bind="slotProps" />
341
- </template>
342
-
343
329
  <template
344
- v-if="$slots['suggestion-view']"
345
- #suggestion-view="slotProps"
330
+ v-for="slotName in forwardedSlotNames($slots, OWN_SLOTS)"
331
+ :key="slotName"
332
+ #[slotName]="slotProps"
346
333
  >
347
- <slot name="suggestion-view" v-bind="slotProps" />
348
- </template>
349
-
350
- <template v-if="$slots['welcome-screen']" #welcome-screen="slotProps">
351
- <slot name="welcome-screen" v-bind="slotProps" />
352
- </template>
353
-
354
- <template v-if="$slots['welcome-message']" #welcome-message>
355
- <slot name="welcome-message" />
334
+ <slot :name="slotName" v-bind="slotProps" />
356
335
  </template>
357
336
  </CopilotChatView>
358
337
  </div>