{"version":3,"file":"use-render-activity-message-CiFAWxYV.cjs","sources":["../src/v2/components/CopilotKitInspector.vue","../src/v2/providers/keys.ts","../src/v2/providers/useCopilotKit.ts","../src/v2/components/MCPAppsActivityRenderer.ts","../src/v2/components/a2ui.ts","../src/v2/lib/vue-core.ts","../src/v2/components/A2UIMessageRenderer.ts","../src/v2/types/defineToolCallRenderer.ts","../src/v2/components/a2ui/A2UIBuiltInToolCallRenderer.ts","../src/v2/components/a2ui/adapter.ts","../src/v2/components/a2ui/utils.ts","../src/v2/components/a2ui/catalog.ts","../src/v2/components/a2ui/A2UICatalogContext.ts","../src/v2/lib/processPartialHtml.ts","../src/v2/providers/SandboxFunctionsContext.ts","../src/v2/components/OpenGenerativeUIRenderer.ts","../src/v2/providers/license-context.ts","../src/v2/components/LicenseWarningBanner.vue","../src/v2/providers/CopilotKitProvider.vue","../src/v2/providers/types.ts","../src/v2/lib/shallow-stable.ts","../src/v2/providers/CopilotChatConfigurationProvider.vue","../src/v2/providers/useLicenseContext.ts","../src/v2/providers/useCopilotChatConfiguration.ts","../src/v2/components/a2ui/VueSurface.ts","../src/v2/components/A2UISurfaceActivityRenderer.vue","../src/v2/components/chat/CopilotChatToolCallsView.vue","../src/v2/hooks/use-katex-styles.ts","../src/v2/components/chat/CopilotChatAssistantMessage.vue","../src/v2/components/chat/audioRecorder.ts","../src/v2/components/chat/CopilotChatAudioRecorder.vue","../src/v2/components/InlineFeatureWarning.vue","../src/v2/hooks/use-agent.ts","../src/v2/hooks/use-suggestions.ts","../src/v2/hooks/use-attachments.ts","../src/v2/lib/transcription-client.ts","../src/v2/hooks/use-keyboard-height.ts","../src/v2/components/chat/last-user-message-context.ts","../src/v2/hooks/use-pin-to-send.ts","../src/v2/components/chat/CopilotChatInput.vue","../src/v2/components/chat/CopilotChatAttachmentQueue.vue","../src/v2/components/chat/CopilotChatReasoningMessage.vue","../src/v2/components/chat/CopilotChatUserMessage.vue","../src/v2/components/chat/CopilotChatMessageView.vue","../src/v2/components/chat/CopilotChatSuggestionPill.vue","../src/v2/components/chat/CopilotChatSuggestionView.vue","../src/v2/components/chat/normalize-auto-scroll.ts","../src/v2/components/chat/CopilotChatView.vue","../src/v2/components/chat/CopilotChat.vue","../src/v2/components/chat/CopilotChatAttachmentRenderer.vue","../src/v2/components/chat/CopilotChatToggleButtonCloseIcon.ts","../src/v2/components/chat/CopilotChatToggleButtonOpenIcon.ts","../src/v2/components/chat/CopilotChatToggleButton.vue","../src/v2/components/chat/CopilotModalHeaderCloseButton.ts","../src/v2/components/chat/CopilotModalHeaderTitle.ts","../src/v2/components/chat/CopilotModalHeader.vue","../src/v2/components/chat/CopilotPopupViewInternal.vue","../src/v2/components/chat/CopilotPopupView.vue","../src/v2/components/chat/CopilotPopupWelcomeScreen.vue","../src/v2/components/chat/CopilotSidebarViewInternal.vue","../src/v2/components/chat/CopilotSidebarView.vue","../src/v2/components/chat/CopilotSidebarWelcomeScreen.vue","../src/v2/components/chat/CopilotPopup.vue","../src/v2/components/chat/CopilotSidebar.vue","../src/v2/components/chat/index.ts","../src/v2/hooks/use-agent-context.ts","../src/v2/hooks/use-frontend-tool.ts","../src/v2/hooks/use-component.ts","../src/v2/hooks/use-render-tool.ts","../src/v2/hooks/use-default-render-tool.ts","../src/v2/hooks/use-human-in-the-loop.ts","../src/v2/hooks/use-configure-suggestions.ts","../src/v2/hooks/use-interrupt.ts","../src/v2/hooks/use-threads.ts","../src/v2/hooks/use-capabilities.ts","../src/v2/hooks/use-render-custom-messages.ts","../src/v2/hooks/use-render-activity-message.ts"],"sourcesContent":["<script setup lang=\"ts\">\ndefineOptions({\n  inheritAttrs: false,\n});\n\nimport { onMounted, onUnmounted, shallowRef, useAttrs } from \"vue\";\nimport type { CopilotKitCoreVue } from \"../lib/vue-core\";\n\nconst props = defineProps<{\n  core?: CopilotKitCoreVue | null;\n}>();\n\nconst attrs = useAttrs();\nconst inspectorTag = shallowRef<string | null>(null);\n\nlet isMounted = true;\n\nonMounted(() => {\n  void import(\"@copilotkit/web-inspector\")\n    .then((mod) => {\n      mod.defineWebInspector?.();\n      if (!isMounted) return;\n      inspectorTag.value = mod.WEB_INSPECTOR_TAG;\n    })\n    .catch((error: unknown) => {\n      console.error(\"Failed to load CopilotKit inspector:\", error);\n    });\n});\n\nonUnmounted(() => {\n  isMounted = false;\n});\n</script>\n\n<template>\n  <component\n    :is=\"inspectorTag\"\n    v-if=\"inspectorTag\"\n    v-bind=\"attrs\"\n    :core.prop=\"props.core ?? null\"\n  />\n</template>\n","import type { ComputedRef, InjectionKey, Ref, ShallowRef } from \"vue\";\nimport type { CopilotKitCoreVue } from \"../lib/vue-core\";\nimport type { CopilotChatConfigurationValue } from \"./types\";\nimport type { A2UITheme } from \"../types\";\nimport type { SandboxFunction } from \"../types\";\n\nexport interface CopilotKitContextValue {\n  copilotkit: ShallowRef<CopilotKitCoreVue>;\n  executingToolCallIds: Ref<ReadonlySet<string>>;\n  a2uiTheme: ComputedRef<A2UITheme | undefined>;\n  a2uiCatalog: ComputedRef<unknown>;\n  a2uiLoadingComponent: ComputedRef<unknown>;\n  a2uiIncludeSchema: ComputedRef<boolean>;\n}\n\nexport const CopilotKitKey: InjectionKey<CopilotKitContextValue> =\n  Symbol(\"CopilotKit\");\n\nexport const CopilotChatConfigurationKey: InjectionKey<\n  ComputedRef<CopilotChatConfigurationValue>\n> = Symbol(\"CopilotChatConfiguration\");\n\nexport const SandboxFunctionsKey: InjectionKey<\n  Ref<readonly SandboxFunction[]>\n> = Symbol(\"SandboxFunctions\");\n","import { inject } from \"vue\";\nimport { CopilotKitKey } from \"./keys\";\n\nexport function useCopilotKit() {\n  const context = inject(CopilotKitKey);\n  if (!context) {\n    throw new Error(\"useCopilotKit must be used within CopilotKitProvider\");\n  }\n\n  return context;\n}\n","import { computed, defineComponent, h, onBeforeUnmount, ref, watch } from \"vue\";\nimport type { PropType } from \"vue\";\nimport { z } from \"zod\";\nimport type { AbstractAgent, RunAgentResult } from \"@ag-ui/client\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport type { VueActivityMessageRendererProps } from \"../types\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\n\nconst PROTOCOL_VERSION = \"2025-06-18\";\n\nfunction buildSandboxHTML(extraCspDomains?: string[]): string {\n  const baseScriptSrc =\n    \"'self' 'wasm-unsafe-eval' 'unsafe-inline' 'unsafe-eval' blob: data: http://localhost:* https://localhost:*\";\n  const baseFrameSrc = \"* blob: data: http://localhost:* https://localhost:*\";\n  const extra = extraCspDomains?.length ? ` ${extraCspDomains.join(\" \")}` : \"\";\n  const scriptSrc = `${baseScriptSrc}${extra}`;\n  const frameSrc = `${baseFrameSrc}${extra}`;\n\n  return `<!doctype html>\n<html>\n<head>\n<meta charset=\"utf-8\" />\n<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'self'; img-src * data: blob: 'unsafe-inline'; media-src * blob: data:; font-src * blob: data:; script-src ${scriptSrc}; style-src * blob: data: 'unsafe-inline'; connect-src *; frame-src ${frameSrc}; base-uri 'self';\" />\n<style>html,body{margin:0;padding:0;height:100%;width:100%;overflow:hidden}*{box-sizing:border-box}iframe{background-color:transparent;border:none;padding:0;overflow:hidden;width:100%;height:100%}</style>\n</head>\n<body>\n<script>\nif(window.self===window.top){throw new Error(\"This file must be used in an iframe.\")}\nconst inner=document.createElement(\"iframe\");\ninner.style=\"width:100%;height:100%;border:none;\";\ninner.setAttribute(\"sandbox\",\"allow-scripts allow-same-origin allow-forms\");\ndocument.body.appendChild(inner);\nwindow.addEventListener(\"message\",async(event)=>{\nif(event.source===window.parent){\nif(event.data&&event.data.method===\"ui/notifications/sandbox-resource-ready\"){\nconst{html,sandbox}=event.data.params;\nif(typeof sandbox===\"string\")inner.setAttribute(\"sandbox\",sandbox);\nif(typeof html===\"string\")inner.srcdoc=html;\n}else if(inner&&inner.contentWindow){\ninner.contentWindow.postMessage(event.data,\"*\");\n}\n}else if(event.source===inner.contentWindow){\nwindow.parent.postMessage(event.data,\"*\");\n}\n});\nwindow.parent.postMessage({jsonrpc:\"2.0\",method:\"ui/notifications/sandbox-proxy-ready\",params:{}},\"*\");\n</script>\n</body>\n</html>`;\n}\n\nclass MCPAppsRequestQueue {\n  private queues = new Map<\n    string,\n    Array<{\n      execute: () => Promise<RunAgentResult>;\n      resolve: (result: RunAgentResult) => void;\n      reject: (error: Error) => void;\n    }>\n  >();\n\n  private processing = new Map<string, boolean>();\n\n  async enqueue(\n    agent: AbstractAgent,\n    request: () => Promise<RunAgentResult>,\n  ): Promise<RunAgentResult> {\n    const threadId = agent.threadId || \"default\";\n\n    return new Promise((resolve, reject) => {\n      let queue = this.queues.get(threadId);\n      if (!queue) {\n        queue = [];\n        this.queues.set(threadId, queue);\n      }\n\n      queue.push({ execute: request, resolve, reject });\n      void this.processQueue(threadId, agent);\n    });\n  }\n\n  private async processQueue(\n    threadId: string,\n    agent: AbstractAgent,\n  ): Promise<void> {\n    if (this.processing.get(threadId)) {\n      return;\n    }\n\n    this.processing.set(threadId, true);\n    try {\n      const queue = this.queues.get(threadId);\n      if (!queue) return;\n\n      while (queue.length > 0) {\n        const item = queue[0]!;\n        try {\n          await this.waitForAgentIdle(agent);\n          const result = await item.execute();\n          item.resolve(result);\n        } catch (error) {\n          item.reject(\n            error instanceof Error ? error : new Error(String(error)),\n          );\n        }\n        queue.shift();\n      }\n    } finally {\n      this.processing.set(threadId, false);\n    }\n  }\n\n  cancel(threadId: string): void {\n    const queue = this.queues.get(threadId);\n    if (queue) {\n      for (const item of queue) {\n        item.reject(new Error(\"MCPAppsRequestQueue cancelled on unmount\"));\n      }\n      queue.length = 0;\n    }\n    this.queues.delete(threadId);\n    this.processing.delete(threadId);\n  }\n\n  private waitForAgentIdle(agent: AbstractAgent): Promise<void> {\n    return new Promise((resolve, reject) => {\n      if (!agent.isRunning) {\n        resolve();\n        return;\n      }\n\n      let done = false;\n\n      const timeout = setTimeout(() => {\n        if (done) return;\n        done = true;\n        clearInterval(checkInterval);\n        sub.unsubscribe();\n        reject(\n          new Error(\"[CopilotKit] Timed out waiting for agent to become idle\"),\n        );\n      }, 30_000);\n\n      const finish = () => {\n        if (done) return;\n        done = true;\n        clearTimeout(timeout);\n        clearInterval(checkInterval);\n        sub.unsubscribe();\n        resolve();\n      };\n\n      const sub = agent.subscribe({\n        onRunFinalized: finish,\n        onRunFailed: finish,\n      });\n\n      const checkInterval = setInterval(() => {\n        if (!agent.isRunning) {\n          finish();\n        }\n      }, 500);\n    });\n  }\n}\n\nconst mcpAppsRequestQueue = new MCPAppsRequestQueue();\n\nexport const MCPAppsActivityType = \"mcp-apps\";\n\nexport const MCPAppsActivityContentSchema = z.object({\n  result: z.object({\n    content: z.array(z.any()).optional(),\n    structuredContent: z.any().optional(),\n    isError: z.boolean().optional(),\n  }),\n  resourceUri: z.string(),\n  serverHash: z.string(),\n  serverId: z.string().optional(),\n  toolInput: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type MCPAppsActivityContent = z.infer<\n  typeof MCPAppsActivityContentSchema\n>;\n\ninterface FetchedResource {\n  uri: string;\n  mimeType?: string;\n  text?: string;\n  blob?: string;\n  _meta?: {\n    ui?: {\n      prefersBorder?: boolean;\n      csp?: {\n        connectDomains?: string[];\n        resourceDomains?: string[];\n      };\n    };\n  };\n}\n\ninterface JSONRPCRequest {\n  jsonrpc: \"2.0\";\n  id: string | number;\n  method: string;\n  params?: Record<string, unknown>;\n}\n\ninterface JSONRPCResponse {\n  jsonrpc: \"2.0\";\n  id: string | number;\n  result?: unknown;\n  error?: { code: number; message: string };\n}\n\ninterface JSONRPCNotification {\n  jsonrpc: \"2.0\";\n  method: string;\n  params?: Record<string, unknown>;\n}\n\ntype JSONRPCMessage = JSONRPCRequest | JSONRPCResponse | JSONRPCNotification;\n\nfunction isRequest(message: JSONRPCMessage): message is JSONRPCRequest {\n  return \"id\" in message && \"method\" in message;\n}\n\nfunction isNotification(\n  message: JSONRPCMessage,\n): message is JSONRPCNotification {\n  return !(\"id\" in message) && \"method\" in message;\n}\n\nexport const MCPAppsActivityRenderer = defineComponent({\n  name: \"MCPAppsActivityRenderer\",\n  props: {\n    activityType: {\n      type: String,\n      required: true,\n    },\n    content: {\n      type: Object as PropType<MCPAppsActivityContent>,\n      required: true,\n    },\n    message: {\n      type: Object as PropType<\n        VueActivityMessageRendererProps<MCPAppsActivityContent>[\"message\"]\n      >,\n      required: true,\n    },\n    agent: {\n      type: Object as PropType<AbstractAgent | undefined>,\n      required: false,\n      default: undefined,\n    },\n  },\n  setup(props) {\n    const { copilotkit } = useCopilotKit();\n    const containerRef = ref<HTMLDivElement | null>(null);\n    const iframeRef = ref<HTMLIFrameElement | null>(null);\n    const iframeReady = ref(false);\n    const error = ref<Error | null>(null);\n    const isLoading = ref(true);\n    const iframeSize = ref<{ width?: number; height?: number }>({});\n    const fetchedResource = ref<FetchedResource | null>(null);\n\n    const fetchStateRef = ref<{\n      inProgress: boolean;\n      promise: Promise<FetchedResource | null> | null;\n      resourceUri: string | null;\n    }>({\n      inProgress: false,\n      promise: null,\n      resourceUri: null,\n    });\n\n    const sendToIframe = (message: JSONRPCMessage) => {\n      if (iframeRef.value?.contentWindow) {\n        iframeRef.value.contentWindow.postMessage(message, \"*\");\n      }\n    };\n\n    const sendResponse = (id: string | number, result: unknown) => {\n      sendToIframe({\n        jsonrpc: \"2.0\",\n        id,\n        result,\n      });\n    };\n\n    const sendErrorResponse = (\n      id: string | number,\n      code: number,\n      message: string,\n    ) => {\n      sendToIframe({\n        jsonrpc: \"2.0\",\n        id,\n        error: { code, message },\n      });\n    };\n\n    const sendNotification = (\n      method: string,\n      params?: Record<string, unknown>,\n    ) => {\n      sendToIframe({\n        jsonrpc: \"2.0\",\n        method,\n        params: params || {},\n      });\n    };\n\n    watch(\n      [() => props.agent, () => props.content],\n      ([agent, content]) => {\n        isLoading.value = true;\n        error.value = null;\n        iframeReady.value = false;\n        iframeSize.value = {};\n        fetchedResource.value = null;\n\n        const { resourceUri, serverHash, serverId } = content;\n\n        if (\n          fetchStateRef.value.inProgress &&\n          fetchStateRef.value.resourceUri === resourceUri\n        ) {\n          void fetchStateRef.value.promise\n            ?.then((resource) => {\n              if (resource) {\n                fetchedResource.value = resource;\n                isLoading.value = false;\n              }\n            })\n            .catch((err: unknown) => {\n              error.value = err instanceof Error ? err : new Error(String(err));\n              isLoading.value = false;\n            });\n          return;\n        }\n\n        if (!agent) {\n          error.value = new Error(\"No agent available to fetch resource\");\n          isLoading.value = false;\n          return;\n        }\n\n        fetchStateRef.value.inProgress = true;\n        fetchStateRef.value.resourceUri = resourceUri;\n\n        const fetchPromise = (async (): Promise<FetchedResource | null> => {\n          try {\n            const runResult = await mcpAppsRequestQueue.enqueue(agent, () =>\n              agent.runAgent({\n                forwardedProps: {\n                  __proxiedMCPRequest: {\n                    serverHash,\n                    serverId,\n                    method: \"resources/read\",\n                    params: { uri: resourceUri },\n                  },\n                },\n              }),\n            );\n\n            const resultData = runResult.result as\n              | { contents?: FetchedResource[] }\n              | undefined;\n            const resource = resultData?.contents?.[0];\n\n            if (!resource) {\n              throw new Error(\"No resource content in response\");\n            }\n\n            return resource;\n          } finally {\n            fetchStateRef.value.inProgress = false;\n          }\n        })();\n\n        fetchStateRef.value.promise = fetchPromise;\n\n        void fetchPromise\n          .then((resource) => {\n            if (resource) {\n              fetchedResource.value = resource;\n              isLoading.value = false;\n            }\n          })\n          .catch((err: unknown) => {\n            error.value = err instanceof Error ? err : new Error(String(err));\n            isLoading.value = false;\n          });\n      },\n      { immediate: true },\n    );\n\n    watch(\n      [isLoading, fetchedResource],\n      ([loading, resource], _old, onCleanup) => {\n        if (loading || !resource) {\n          return;\n        }\n\n        const container = containerRef.value;\n        if (!container) {\n          return;\n        }\n\n        let mounted = true;\n        let messageHandler: ((event: MessageEvent) => void) | null = null;\n        let initialListener: ((event: MessageEvent) => void) | null = null;\n        let createdIframe: HTMLIFrameElement | null = null;\n\n        const setup = async () => {\n          try {\n            const iframe = document.createElement(\"iframe\");\n            createdIframe = iframe;\n            iframe.style.width = \"100%\";\n            iframe.style.height = \"100px\";\n            iframe.style.border = \"none\";\n            iframe.style.backgroundColor = \"transparent\";\n            iframe.style.display = \"block\";\n            iframe.setAttribute(\n              \"sandbox\",\n              \"allow-scripts allow-same-origin allow-forms\",\n            );\n\n            const sandboxReady = new Promise<void>((resolve) => {\n              initialListener = (event: MessageEvent) => {\n                if (\n                  event.source === iframe.contentWindow &&\n                  event.data?.method === \"ui/notifications/sandbox-proxy-ready\"\n                ) {\n                  if (initialListener) {\n                    window.removeEventListener(\"message\", initialListener);\n                    initialListener = null;\n                  }\n                  resolve();\n                }\n              };\n              window.addEventListener(\"message\", initialListener);\n            });\n\n            if (!mounted) {\n              if (initialListener) {\n                window.removeEventListener(\"message\", initialListener);\n                initialListener = null;\n              }\n              return;\n            }\n\n            const cspDomains =\n              fetchedResource.value?._meta?.ui?.csp?.resourceDomains;\n            iframe.srcdoc = buildSandboxHTML(cspDomains);\n            iframeRef.value = iframe;\n            container.appendChild(iframe);\n\n            await sandboxReady;\n            if (!mounted) return;\n\n            messageHandler = async (event: MessageEvent) => {\n              if (event.source !== iframe.contentWindow) return;\n\n              const msg = event.data as JSONRPCMessage;\n              if (!msg || typeof msg !== \"object\" || msg.jsonrpc !== \"2.0\") {\n                return;\n              }\n\n              if (isRequest(msg)) {\n                switch (msg.method) {\n                  case \"ui/initialize\": {\n                    sendResponse(msg.id, {\n                      protocolVersion: PROTOCOL_VERSION,\n                      hostInfo: {\n                        name: \"CopilotKit MCP Apps Host\",\n                        version: \"1.0.0\",\n                      },\n                      hostCapabilities: {\n                        openLinks: {},\n                        logging: {},\n                      },\n                      hostContext: {\n                        theme: \"light\",\n                        platform: \"web\",\n                      },\n                    });\n                    break;\n                  }\n\n                  case \"ui/message\": {\n                    const currentAgent = props.agent;\n                    if (!currentAgent) {\n                      sendResponse(msg.id, { isError: false });\n                      break;\n                    }\n\n                    try {\n                      const params = msg.params as\n                        | {\n                            role?: string;\n                            content?: Array<{ type: string; text?: string }>;\n                            followUp?: boolean;\n                          }\n                        | undefined;\n\n                      const role =\n                        (params?.role as \"user\" | \"assistant\") || \"user\";\n                      const textContent =\n                        params?.content\n                          ?.filter((part) => part.type === \"text\" && part.text)\n                          .map((part) => part.text)\n                          .join(\"\\n\") || \"\";\n\n                      if (textContent) {\n                        currentAgent.addMessage({\n                          id: randomUUID(),\n                          role,\n                          content: textContent,\n                        });\n                      }\n\n                      sendResponse(msg.id, { isError: false });\n\n                      const shouldFollowUp =\n                        params?.followUp ?? role === \"user\";\n                      if (shouldFollowUp && textContent) {\n                        void mcpAppsRequestQueue\n                          .enqueue(currentAgent, () =>\n                            copilotkit.value.runAgent({ agent: currentAgent }),\n                          )\n                          .catch((err) => {\n                            console.error(\n                              \"[MCPAppsRenderer] ui/message agent run failed:\",\n                              err,\n                            );\n                          });\n                      }\n                    } catch (err) {\n                      console.error(\n                        \"[CopilotKit] MCPApps ui/message handler error:\",\n                        err,\n                      );\n                      sendResponse(msg.id, { isError: true });\n                    }\n                    break;\n                  }\n\n                  case \"ui/open-link\": {\n                    const url = msg.params?.url as string | undefined;\n                    if (!url) {\n                      sendErrorResponse(\n                        msg.id,\n                        -32602,\n                        \"Missing url parameter\",\n                      );\n                      break;\n                    }\n                    window.open(url, \"_blank\", \"noopener,noreferrer\");\n                    sendResponse(msg.id, { isError: false });\n                    break;\n                  }\n\n                  case \"tools/call\": {\n                    const { serverHash, serverId } = props.content;\n                    const currentAgent = props.agent;\n\n                    if (!serverHash) {\n                      sendErrorResponse(\n                        msg.id,\n                        -32603,\n                        \"No server hash available for proxying\",\n                      );\n                      break;\n                    }\n                    if (!currentAgent) {\n                      sendErrorResponse(\n                        msg.id,\n                        -32603,\n                        \"No agent available for proxying\",\n                      );\n                      break;\n                    }\n\n                    try {\n                      const runResult = await mcpAppsRequestQueue.enqueue(\n                        currentAgent,\n                        () =>\n                          currentAgent.runAgent({\n                            forwardedProps: {\n                              __proxiedMCPRequest: {\n                                serverHash,\n                                serverId,\n                                method: \"tools/call\",\n                                params: msg.params,\n                              },\n                            },\n                          }),\n                      );\n                      sendResponse(msg.id, runResult.result || {});\n                    } catch (err) {\n                      sendErrorResponse(msg.id, -32603, String(err));\n                    }\n                    break;\n                  }\n\n                  default: {\n                    sendErrorResponse(\n                      msg.id,\n                      -32601,\n                      `Method not found: ${msg.method}`,\n                    );\n                  }\n                }\n              }\n\n              if (isNotification(msg)) {\n                switch (msg.method) {\n                  case \"ui/notifications/initialized\":\n                    if (mounted) {\n                      iframeReady.value = true;\n                    }\n                    break;\n\n                  case \"ui/notifications/size-changed\": {\n                    const { width, height } = msg.params || {};\n                    if (mounted) {\n                      iframeSize.value = {\n                        width: typeof width === \"number\" ? width : undefined,\n                        height: typeof height === \"number\" ? height : undefined,\n                      };\n                    }\n                    break;\n                  }\n                }\n              }\n            };\n\n            window.addEventListener(\"message\", messageHandler);\n\n            const html = resource.text\n              ? resource.text\n              : resource.blob\n                ? atob(resource.blob)\n                : null;\n\n            if (!html) {\n              throw new Error(\"Resource has no text or blob content\");\n            }\n\n            sendNotification(\"ui/notifications/sandbox-resource-ready\", {\n              html,\n            });\n          } catch (err) {\n            if (mounted) {\n              error.value = err instanceof Error ? err : new Error(String(err));\n            }\n          }\n        };\n\n        void setup();\n\n        onCleanup(() => {\n          mounted = false;\n          if (initialListener) {\n            window.removeEventListener(\"message\", initialListener);\n            initialListener = null;\n          }\n          if (messageHandler) {\n            window.removeEventListener(\"message\", messageHandler);\n          }\n          if (createdIframe) {\n            createdIframe.remove();\n            createdIframe = null;\n          }\n          iframeRef.value = null;\n        });\n      },\n      { flush: \"post\" },\n    );\n\n    watch(\n      iframeSize,\n      (size) => {\n        if (!iframeRef.value) return;\n        if (size.width !== undefined) {\n          iframeRef.value.style.minWidth = `min(${size.width}px, 100%)`;\n          iframeRef.value.style.width = \"100%\";\n        }\n        if (size.height !== undefined) {\n          iframeRef.value.style.height = `${size.height}px`;\n        }\n      },\n      { deep: true },\n    );\n\n    watch(\n      [iframeReady, () => props.content.toolInput],\n      ([ready, toolInput]) => {\n        if (ready && toolInput) {\n          sendNotification(\"ui/notifications/tool-input\", {\n            arguments: toolInput,\n          });\n        }\n      },\n      { deep: true },\n    );\n\n    watch(\n      [iframeReady, () => props.content.result],\n      ([ready, result]) => {\n        if (ready && result) {\n          sendNotification(\n            \"ui/notifications/tool-result\",\n            result as Record<string, unknown>,\n          );\n        }\n      },\n      { deep: true },\n    );\n\n    const borderStyle = computed(() => {\n      const prefersBorder = fetchedResource.value?._meta?.ui?.prefersBorder;\n      if (prefersBorder !== true) return {};\n      return {\n        borderRadius: \"8px\",\n        backgroundColor: \"#f9f9f9\",\n        border: \"1px solid #e0e0e0\",\n      };\n    });\n\n    onBeforeUnmount(() => {\n      const threadId = props.agent?.threadId || \"default\";\n      mcpAppsRequestQueue.cancel(threadId);\n    });\n\n    return () =>\n      h(\n        \"div\",\n        {\n          ref: containerRef,\n          style: {\n            width: \"100%\",\n            height:\n              iframeSize.value.height !== undefined\n                ? `${iframeSize.value.height}px`\n                : \"auto\",\n            minHeight: \"100px\",\n            overflow: \"hidden\",\n            position: \"relative\",\n            ...borderStyle.value,\n          },\n        },\n        [\n          isLoading.value\n            ? h(\n                \"div\",\n                { style: { padding: \"1rem\", color: \"#666\" } },\n                \"Loading...\",\n              )\n            : null,\n          error.value\n            ? h(\n                \"div\",\n                { style: { color: \"red\", padding: \"1rem\" } },\n                `Error: ${error.value.message}`,\n              )\n            : null,\n        ],\n      );\n  },\n});\n\nexport default MCPAppsActivityRenderer;\n","import { z } from \"zod\";\n\nexport type A2UIOperation = Record<string, unknown>;\n\nexport const A2UISurfaceActivityType = \"a2ui-surface\";\n\nexport const A2UIActivityContentSchema = z.object({\n  operations: z.array(z.record(z.string(), z.unknown())),\n});\n\nexport function getOperationSurfaceId(operation: A2UIOperation): string {\n  const surfaceId =\n    (operation.surfaceId as string | undefined) ??\n    ((operation.beginRendering as { surfaceId?: string } | undefined)\n      ?.surfaceId as string | undefined) ??\n    ((operation.surfaceUpdate as { surfaceId?: string } | undefined)\n      ?.surfaceId as string | undefined) ??\n    ((operation.dataModelUpdate as { surfaceId?: string } | undefined)\n      ?.surfaceId as string | undefined) ??\n    ((operation.deleteSurface as { surfaceId?: string } | undefined)\n      ?.surfaceId as string | undefined) ??\n    ((operation.createSurface as { surfaceId?: string } | undefined)\n      ?.surfaceId as string | undefined) ??\n    ((operation.updateComponents as { surfaceId?: string } | undefined)\n      ?.surfaceId as string | undefined) ??\n    ((operation.updateDataModel as { surfaceId?: string } | undefined)\n      ?.surfaceId as string | undefined);\n\n  return surfaceId ?? \"default\";\n}\n","import { nextTick } from \"vue\";\nimport type {\n  VueActivityMessageRenderer,\n  VueToolCallRenderer,\n  VueCustomMessageRenderer,\n} from \"../types\";\nimport type { InterruptRenderProps } from \"../types/interrupt\";\nimport { CopilotKitCore } from \"@copilotkit/core\";\nimport type {\n  CopilotKitCoreConfig,\n  CopilotKitCoreSubscriber,\n  CopilotKitCoreSubscription,\n} from \"@copilotkit/core\";\n\nexport interface CopilotKitCoreVueConfig extends CopilotKitCoreConfig {\n  renderToolCalls?: VueToolCallRenderer<unknown>[];\n  renderActivityMessages?: VueActivityMessageRenderer<unknown>[];\n  renderCustomMessages?: VueCustomMessageRenderer[];\n}\n\nexport interface CopilotKitCoreVueSubscriber extends CopilotKitCoreSubscriber {\n  onRenderToolCallsChanged?: (event: {\n    copilotkit: CopilotKitCoreVue;\n    renderToolCalls: VueToolCallRenderer<unknown>[];\n  }) => void | Promise<void>;\n  onRenderCustomMessagesChanged?: (event: {\n    copilotkit: CopilotKitCoreVue;\n    renderCustomMessages: VueCustomMessageRenderer[];\n  }) => void | Promise<void>;\n  onInterruptStateChanged?: (event: {\n    copilotkit: CopilotKitCoreVue;\n    interruptState: InterruptRenderProps<unknown, unknown> | null;\n  }) => void | Promise<void>;\n}\n\nexport class CopilotKitCoreVue extends CopilotKitCore {\n  private _renderToolCalls: VueToolCallRenderer<unknown>[] = [];\n  private _hookRenderToolCalls: Map<string, VueToolCallRenderer<unknown>> =\n    new Map();\n  private _cachedMergedRenderToolCalls: VueToolCallRenderer<unknown>[] | null =\n    null;\n  private _renderCustomMessages: VueCustomMessageRenderer[] = [];\n  private _renderActivityMessages: VueActivityMessageRenderer<unknown>[] = [];\n  private _interruptState: InterruptRenderProps<unknown, unknown> | null = null;\n\n  constructor(config: CopilotKitCoreVueConfig) {\n    super(config);\n    this._renderToolCalls = config.renderToolCalls ?? [];\n    this._renderCustomMessages = config.renderCustomMessages ?? [];\n    this._renderActivityMessages = config.renderActivityMessages ?? [];\n  }\n\n  get renderCustomMessages(): Readonly<VueCustomMessageRenderer[]> {\n    return this._renderCustomMessages;\n  }\n\n  get renderActivityMessages(): Readonly<\n    VueActivityMessageRenderer<unknown>[]\n  > {\n    return this._renderActivityMessages;\n  }\n\n  setRenderActivityMessages(\n    renderers: VueActivityMessageRenderer<unknown>[],\n  ): void {\n    this._renderActivityMessages = [...renderers];\n  }\n\n  setRenderCustomMessages(renderers: VueCustomMessageRenderer[]): void {\n    this._renderCustomMessages = [...renderers];\n    void this.notifySubscribers((subscriber) => {\n      const vueSubscriber = subscriber as CopilotKitCoreVueSubscriber;\n      vueSubscriber.onRenderCustomMessagesChanged?.({\n        copilotkit: this,\n        renderCustomMessages: [...this.renderCustomMessages],\n      });\n    }, \"Subscriber onRenderCustomMessagesChanged error:\");\n  }\n\n  get propRenderToolCalls(): Readonly<VueToolCallRenderer<unknown>[]> {\n    return this._renderToolCalls;\n  }\n\n  get renderToolCalls(): Readonly<VueToolCallRenderer<unknown>[]> {\n    if (this._hookRenderToolCalls.size === 0) {\n      return this._renderToolCalls;\n    }\n    if (this._cachedMergedRenderToolCalls) {\n      return this._cachedMergedRenderToolCalls;\n    }\n    const merged = new Map<string, VueToolCallRenderer<unknown>>();\n    for (const rc of this._renderToolCalls) {\n      merged.set(`${rc.agentId ?? \"\"}:${rc.name}`, rc);\n    }\n    for (const [key, rc] of this._hookRenderToolCalls) {\n      merged.set(key, rc);\n    }\n    this._cachedMergedRenderToolCalls = Array.from(merged.values());\n    return this._cachedMergedRenderToolCalls;\n  }\n\n  get interruptState(): InterruptRenderProps<unknown, unknown> | null {\n    return this._interruptState;\n  }\n\n  setRenderToolCalls(renderToolCalls: VueToolCallRenderer<unknown>[]): void {\n    this._renderToolCalls = [...renderToolCalls];\n    this._cachedMergedRenderToolCalls = null;\n    this._notifyRenderToolCallsChanged();\n  }\n\n  addHookRenderToolCall(entry: VueToolCallRenderer<unknown>): void {\n    const key = `${entry.agentId ?? \"\"}:${entry.name}`;\n    this._hookRenderToolCalls.set(key, entry);\n    this._cachedMergedRenderToolCalls = null;\n    this._notifyRenderToolCallsChanged();\n  }\n\n  removeHookRenderToolCall(name: string, agentId?: string): void {\n    const key = `${agentId ?? \"\"}:${name}`;\n    if (this._hookRenderToolCalls.delete(key)) {\n      this._cachedMergedRenderToolCalls = null;\n      this._notifyRenderToolCallsChanged();\n    }\n  }\n\n  private _notifyRenderToolCallsChanged(): void {\n    void this.notifySubscribers((subscriber) => {\n      const vueSubscriber = subscriber as CopilotKitCoreVueSubscriber;\n      if (vueSubscriber.onRenderToolCallsChanged) {\n        vueSubscriber.onRenderToolCallsChanged({\n          copilotkit: this,\n          renderToolCalls: [...this.renderToolCalls],\n        });\n      }\n    }, \"Subscriber onRenderToolCallsChanged error:\");\n  }\n\n  setInterruptState(\n    interruptState: InterruptRenderProps<unknown, unknown> | null,\n  ): void {\n    this._interruptState = interruptState;\n    void this.notifySubscribers((subscriber) => {\n      const vueSubscriber = subscriber as CopilotKitCoreVueSubscriber;\n      vueSubscriber.onInterruptStateChanged?.({\n        copilotkit: this,\n        interruptState: this._interruptState,\n      });\n    }, \"Subscriber onInterruptStateChanged error:\");\n  }\n\n  subscribe(\n    subscriber: CopilotKitCoreVueSubscriber,\n  ): CopilotKitCoreSubscription {\n    return super.subscribe(subscriber);\n  }\n\n  async waitForPendingFrameworkUpdates(): Promise<void> {\n    await nextTick();\n  }\n}\n","import { computed, defineComponent, h, type PropType } from \"vue\";\nimport { z } from \"zod\";\nimport type { VueActivityMessageRenderer } from \"../types\";\nimport type { A2UITheme } from \"../types\";\nimport A2UISurfaceActivityRenderer from \"./A2UISurfaceActivityRenderer.vue\";\n\nconst A2UI_OPERATIONS_KEY = \"a2ui_operations\";\n\nexport type A2UIMessageRendererOptions = {\n  theme: A2UITheme;\n  catalog?: any;\n  loadingComponent?: unknown;\n};\n\n/**\n * Default loading component shown while an A2UI surface is generating.\n * Mirrors React's `DefaultA2UILoading` in\n * `packages/react-core/src/v2/a2ui/A2UIMessageRenderer.tsx`:\n * an animated dot + \"Generating UI...\" label + three shimmer bars\n * (80% / 60% / 40% widths) with staggered `cpk-a2ui-pulse` opacity animation.\n */\nconst DefaultA2UILoading = defineComponent({\n  name: \"DefaultA2UILoading\",\n  setup() {\n    const barWidths = [0.8, 0.6, 0.4] as const;\n    return () =>\n      h(\n        \"div\",\n        {\n          class:\n            \"cpk:flex cpk:flex-col cpk:gap-3 cpk:rounded-xl cpk:border cpk:border-gray-100 cpk:bg-gray-50/50 cpk:p-5\",\n          style: { minHeight: \"120px\" },\n          \"data-testid\": \"a2ui-loading\",\n        },\n        [\n          h(\"div\", { class: \"cpk:flex cpk:items-center cpk:gap-2\" }, [\n            h(\"div\", {\n              class: \"cpk:h-3 cpk:w-3 cpk:rounded-full cpk:bg-gray-200\",\n              style: {\n                animation: \"cpk-a2ui-pulse 1.5s ease-in-out infinite\",\n              },\n              \"data-testid\": \"a2ui-loading-dot\",\n            }),\n            h(\n              \"span\",\n              {\n                class: \"cpk:text-xs cpk:font-medium cpk:text-gray-400\",\n              },\n              \"Generating UI...\",\n            ),\n          ]),\n          h(\n            \"div\",\n            { class: \"cpk:flex cpk:flex-col cpk:gap-2\" },\n            barWidths.map((width, i) =>\n              h(\"div\", {\n                key: i,\n                class: \"cpk:h-3 cpk:rounded cpk:bg-gray-200/70\",\n                style: {\n                  width: `${width * 100}%`,\n                  animation: `cpk-a2ui-pulse 1.5s ease-in-out ${i * 0.15}s infinite`,\n                },\n                \"data-testid\": \"a2ui-loading-bar\",\n              }),\n            ),\n          ),\n          h(\n            \"style\",\n            {},\n            `@keyframes cpk-a2ui-pulse {\n  0%, 100% { opacity: 0.4; }\n  50% { opacity: 1; }\n}`,\n          ),\n        ],\n      );\n  },\n});\n\nexport function createA2UIMessageRenderer(\n  options: A2UIMessageRendererOptions,\n): VueActivityMessageRenderer<any> {\n  return {\n    activityType: \"a2ui-surface\",\n    content: z.any(),\n    render: defineComponent({\n      name: \"A2UIMessageRendererHost\",\n      props: {\n        activityType: { type: String, required: true },\n        content: { type: Object as PropType<any>, required: true },\n        message: { type: Object as PropType<any>, required: true },\n        agent: {\n          type: Object as PropType<any>,\n          required: false,\n          default: undefined,\n        },\n      },\n      setup(props) {\n        const operations = computed(() =>\n          Array.isArray(props.content?.[A2UI_OPERATIONS_KEY])\n            ? props.content[A2UI_OPERATIONS_KEY]\n            : [],\n        );\n\n        return () => {\n          if (operations.value.length === 0) {\n            if (options.loadingComponent) {\n              return h(options.loadingComponent as any);\n            }\n            return h(DefaultA2UILoading);\n          }\n\n          return h(A2UISurfaceActivityRenderer, {\n            activityType: \"a2ui-surface\",\n            content: { operations: operations.value },\n            message: props.message,\n            agent: props.agent,\n            theme: options.theme,\n            catalog: options.catalog,\n          });\n        };\n      },\n    }),\n  };\n}\n","import { z } from \"zod\";\nimport type { StandardSchemaV1, InferSchemaOutput } from \"@copilotkit/shared\";\nimport type { VueToolCallRenderer } from \"./vue-tool-call-renderer\";\nimport type { VueToolCallRendererRenderFn } from \"./vue-tool-call-renderer\";\n\nexport function defineToolCallRenderer(def: {\n  name: \"*\";\n  render: VueToolCallRendererRenderFn<unknown>;\n  agentId?: string;\n}): VueToolCallRenderer<unknown>;\n\nexport function defineToolCallRenderer<S extends StandardSchemaV1>(def: {\n  name: string;\n  args: S;\n  render: VueToolCallRendererRenderFn<InferSchemaOutput<S>>;\n  agentId?: string;\n}): VueToolCallRenderer<InferSchemaOutput<S>>;\n\nexport function defineToolCallRenderer<S extends StandardSchemaV1>(def: {\n  name: string;\n  args?: S;\n  render: VueToolCallRendererRenderFn<unknown>;\n  agentId?: string;\n}): VueToolCallRenderer<unknown> {\n  const argsSchema = def.name === \"*\" && !def.args ? z.any() : def.args;\n  return {\n    name: def.name,\n    args: argsSchema as StandardSchemaV1<any, unknown>,\n    render: def.render as VueToolCallRenderer<unknown>[\"render\"],\n    ...(def.agentId ? { agentId: def.agentId } : {}),\n  };\n}\n","import { h, watch, type VNodeChild } from \"vue\";\nimport type { ShallowRef } from \"vue\";\nimport { z } from \"zod\";\nimport type { ToolCallStatus } from \"@copilotkit/core\";\nimport type { CopilotKitCoreVue } from \"../../lib/vue-core\";\nimport { defineToolCallRenderer } from \"../../types/defineToolCallRenderer\";\n\n/**\n * Tool name used by the dynamic A2UI generation secondary LLM.\n * This renderer is auto-registered when A2UI is enabled.\n */\nexport const RENDER_A2UI_TOOL_NAME = \"render_a2ui\";\n\n/**\n * Registers the built-in `render_a2ui` tool call renderer via the props-based\n * `setRenderToolCalls` mechanism (not `useRenderTool`).\n *\n * This ensures user-registered `useRenderTool({ name: \"render_a2ui\", ... })`\n * hooks automatically override the built-in, since the merge logic in\n * vue-core.ts gives hook-based entries priority over prop-based entries.\n *\n * Call from the provider's setup function and pass a cleanup callback.\n */\nexport function registerA2UIBuiltInToolCallRenderer(\n  copilotkit: ShallowRef<CopilotKitCoreVue>,\n  enabled: () => boolean,\n): void {\n  watch(\n    [() => copilotkit.value, enabled],\n    ([core, isEnabled], _prev, onCleanup) => {\n      if (!isEnabled) return;\n\n      const renderer = defineToolCallRenderer({\n        name: RENDER_A2UI_TOOL_NAME,\n        args: z.any(),\n        render: ({\n          status,\n          args: parameters,\n        }: {\n          status: ToolCallStatus;\n          args: unknown;\n          [key: string]: unknown;\n        }): VNodeChild => {\n          if (status === \"complete\") return null;\n          const params = parameters as Record<string, unknown>;\n          // Hide skeleton once the A2UI surface has enough data to render.\n          const items = params?.items;\n          if (Array.isArray(items) && items.length > 0) return null;\n          const components = params?.components;\n          if (Array.isArray(components) && components.length > 2) return null;\n          return renderA2UIProgressIndicator(parameters);\n        },\n      });\n\n      // Register via props-based mechanism so useRenderTool hooks take priority\n      const existing = core.propRenderToolCalls;\n      core.setRenderToolCalls([\n        ...existing.filter((rc) => rc.name !== RENDER_A2UI_TOOL_NAME),\n        renderer,\n      ]);\n\n      onCleanup(() => {\n        const current = core.propRenderToolCalls;\n        core.setRenderToolCalls(\n          current.filter((rc) => rc.name !== RENDER_A2UI_TOOL_NAME),\n        );\n        progressState.clear();\n      });\n    },\n    { immediate: true },\n  );\n}\n\n/**\n * Vue render-function equivalent of the React A2UIProgressIndicator.\n * Shows a skeleton wireframe that progressively reveals as tokens stream in.\n */\nconst progressState = new Map<\n  string,\n  { lastTime: number; lastTokens: number }\n>();\n\nfunction renderA2UIProgressIndicator(parameters: unknown): VNodeChild {\n  const params = parameters as Record<string, unknown> | null | undefined;\n  const key = typeof params?.name === \"string\" ? params.name : \"__default__\";\n  let state = progressState.get(key);\n  if (!state) {\n    state = { lastTime: 0, lastTokens: 0 };\n    progressState.set(key, state);\n  }\n\n  const now = Date.now();\n  let tokens = state.lastTokens;\n  if (now - state.lastTime > 200) {\n    const chars = JSON.stringify(parameters ?? {}).length;\n    tokens = Math.round(chars / 4);\n    state.lastTime = now;\n    state.lastTokens = tokens;\n  }\n\n  const phase = tokens < 50 ? 0 : tokens < 200 ? 1 : tokens < 400 ? 2 : 3;\n\n  const dot = () =>\n    h(\"div\", {\n      style: {\n        width: \"7px\",\n        height: \"7px\",\n        borderRadius: \"50%\",\n        backgroundColor: \"#d4d4d8\",\n        flexShrink: 0,\n      },\n    });\n\n  const spacer = () => h(\"div\", { style: { width: \"12px\" } });\n\n  const bar = (\n    w: number,\n    ht: number,\n    bg: string,\n    anim?: number,\n    opacity?: number,\n    transition?: string,\n  ) =>\n    h(\"div\", {\n      style: {\n        width: `${w}px`,\n        height: `${ht}px`,\n        borderRadius: \"9999px\",\n        backgroundColor: bg,\n        ...(anim !== undefined\n          ? {\n              animation: `cpk-a2ui-fade 2.4s ease-in-out ${anim}s infinite`,\n            }\n          : {}),\n        ...(opacity !== undefined ? { opacity } : {}),\n        ...(transition ? { transition } : {}),\n      },\n    });\n\n  const row = (show: boolean, delay: number, children: VNodeChild[]) =>\n    h(\n      \"div\",\n      {\n        style: {\n          display: \"flex\",\n          alignItems: \"center\",\n          gap: \"6px\",\n          opacity: show ? 1 : 0,\n          transition: `opacity 0.4s ${delay}s`,\n        },\n      },\n      children,\n    );\n\n  return h(\"div\", { style: { margin: \"12px 0\", maxWidth: \"320px\" } }, [\n    h(\n      \"div\",\n      {\n        style: {\n          position: \"relative\",\n          overflow: \"hidden\",\n          borderRadius: \"12px\",\n          border: \"1px solid rgba(228,228,231,0.8)\",\n          backgroundColor: \"#fff\",\n          boxShadow: \"0 1px 2px rgba(0,0,0,0.04)\",\n          padding: \"16px 18px 14px\",\n        },\n      },\n      [\n        // Top bar\n        h(\n          \"div\",\n          {\n            style: {\n              display: \"flex\",\n              alignItems: \"center\",\n              gap: \"8px\",\n              marginBottom: \"12px\",\n            },\n          },\n          [\n            h(\"div\", { style: { display: \"flex\", gap: \"4px\" } }, [\n              dot(),\n              dot(),\n              dot(),\n            ]),\n            bar(\n              64,\n              6,\n              \"#e4e4e7\",\n              undefined,\n              phase >= 1 ? 1 : 0.4,\n              \"opacity 0.5s\",\n            ),\n          ],\n        ),\n        // Skeleton lines\n        h(\"div\", { style: { display: \"grid\", gap: \"7px\" } }, [\n          row(phase >= 0, 0, [\n            bar(36, 7, \"rgba(147,197,253,0.7)\", 0),\n            bar(80, 7, \"rgba(219,234,254,0.8)\", 0.2),\n          ]),\n          row(phase >= 0, 0.1, [\n            spacer(),\n            dot(),\n            bar(100, 7, \"rgba(24,24,27,0.2)\", 0.3),\n          ]),\n          row(phase >= 1, 0.15, [\n            spacer(),\n            bar(48, 7, \"rgba(24,24,27,0.15)\", 0.1),\n            bar(40, 7, \"rgba(153,246,228,0.6)\", 0.5),\n            bar(56, 7, \"rgba(147,197,253,0.6)\", 0.3),\n          ]),\n          row(phase >= 1, 0.2, [\n            spacer(),\n            dot(),\n            bar(60, 7, \"rgba(24,24,27,0.15)\", 0.4),\n          ]),\n          row(phase >= 2, 0.25, [\n            bar(40, 7, \"rgba(153,246,228,0.5)\", 0.2),\n            dot(),\n            bar(48, 7, \"rgba(24,24,27,0.15)\", 0.6),\n            bar(64, 7, \"rgba(147,197,253,0.5)\", 0.1),\n          ]),\n          row(phase >= 2, 0.3, [\n            bar(36, 7, \"rgba(147,197,253,0.6)\", 0.5),\n            bar(36, 7, \"rgba(24,24,27,0.12)\", 0.7),\n          ]),\n          row(phase >= 3, 0.35, [\n            dot(),\n            bar(44, 7, \"rgba(24,24,27,0.18)\", 0.3),\n            dot(),\n            bar(56, 7, \"rgba(153,246,228,0.5)\", 0.8),\n            bar(48, 7, \"rgba(147,197,253,0.5)\", 0.4),\n          ]),\n        ]),\n        // Shimmer\n        h(\"div\", {\n          style: {\n            pointerEvents: \"none\",\n            position: \"absolute\",\n            inset: \"0\",\n            background:\n              \"linear-gradient(105deg, transparent 0%, transparent 40%, rgba(255,255,255,0.6) 50%, transparent 60%, transparent 100%)\",\n            backgroundSize: \"250% 100%\",\n            animation: \"cpk-a2ui-sweep 3s ease-in-out infinite\",\n          },\n        }),\n      ],\n    ),\n    // Label\n    h(\n      \"div\",\n      {\n        style: {\n          display: \"flex\",\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          gap: \"8px\",\n          marginTop: \"8px\",\n        },\n      },\n      [\n        h(\n          \"span\",\n          {\n            style: {\n              fontSize: \"12px\",\n              color: \"#a1a1aa\",\n              letterSpacing: \"0.025em\",\n            },\n          },\n          \"Building interface\",\n        ),\n        ...(tokens > 0\n          ? [\n              h(\n                \"span\",\n                {\n                  style: {\n                    fontSize: \"11px\",\n                    color: \"#d4d4d8\",\n                    fontVariantNumeric: \"tabular-nums\",\n                  },\n                },\n                `~${tokens.toLocaleString()} tokens`,\n              ),\n            ]\n          : []),\n      ],\n    ),\n    // Keyframe styles\n    h(\n      \"style\",\n      `\n      @keyframes cpk-a2ui-fade {\n        0%, 100% { opacity: 1; }\n        50% { opacity: 0.5; }\n      }\n      @keyframes cpk-a2ui-sweep {\n        0% { background-position: 250% 0; }\n        100% { background-position: -250% 0; }\n      }\n    `,\n    ),\n  ]);\n}\n","/**\n * Vue adapter for @a2ui/web_core v0.9 component rendering.\n *\n * Provides createVueComponent — the Vue equivalent of createReactComponent\n * from the React renderer. Uses GenericBinder for reactive data binding\n * and Vue's render functions for component output.\n */\n\nimport {\n  defineComponent,\n  ref,\n  onUnmounted,\n  watch,\n  type VNode,\n  type PropType,\n} from \"vue\";\nimport {\n  ComponentContext,\n  GenericBinder,\n  type ComponentApi,\n  type InferredComponentApiSchemaType,\n  type ResolveA2uiProps,\n} from \"@a2ui/web_core/v0_9\";\n\n/** Props passed to a Vue A2UI component's render function. */\nexport interface VueA2uiComponentProps<T, S = void> {\n  props: T;\n  buildChild: (id: string, basePath?: string) => VNode;\n  context: ComponentContext;\n  state: S;\n}\n\n/**\n * A Vue component implementation registered with the A2UI Catalog.\n * Mirrors ReactComponentImplementation but uses Vue's component system.\n */\nexport interface VueComponentImplementation extends ComponentApi {\n  /** The Vue component that handles rendering. */\n  render: ReturnType<typeof defineComponent>;\n}\n\n/**\n * Creates a Vue component implementation using the GenericBinder.\n * This is the Vue equivalent of createReactComponent from the React adapter.\n */\nexport function createVueComponent<Api extends ComponentApi, S = void>(\n  api: Api,\n  renderFn: (\n    componentProps: VueA2uiComponentProps<\n      ResolveA2uiProps<InferredComponentApiSchemaType<Api>>,\n      S\n    >,\n  ) => VNode | VNode[] | null,\n  setupState?: () => S,\n): VueComponentImplementation {\n  type Props = ResolveA2uiProps<InferredComponentApiSchemaType<Api>>;\n\n  const VueWrapper = defineComponent({\n    name: `A2UI_${api.name}`,\n    props: {\n      context: {\n        type: Object as PropType<ComponentContext>,\n        required: true,\n      },\n      buildChild: {\n        type: Function as PropType<(id: string, basePath?: string) => VNode>,\n        required: true,\n      },\n    },\n    setup(wrapperProps) {\n      const resolvedProps = ref<Props>({} as Props);\n      let binder: GenericBinder<Props> | null = null;\n      const state = setupState ? setupState() : (undefined as S);\n\n      function initBinder(context: ComponentContext) {\n        if (binder) {\n          binder.dispose();\n        }\n        binder = new GenericBinder<Props>(context, api.schema);\n        resolvedProps.value = binder.snapshot;\n        binder.subscribe((newProps: Props) => {\n          resolvedProps.value = newProps;\n        });\n      }\n\n      initBinder(wrapperProps.context);\n\n      watch(\n        () => wrapperProps.context,\n        (newContext) => {\n          initBinder(newContext);\n        },\n      );\n\n      onUnmounted(() => {\n        if (binder) {\n          binder.dispose();\n          binder = null;\n        }\n      });\n\n      return () =>\n        renderFn({\n          props: resolvedProps.value,\n          buildChild: wrapperProps.buildChild,\n          context: wrapperProps.context,\n          state,\n        });\n    },\n  });\n\n  return {\n    name: api.name,\n    schema: api.schema,\n    render: VueWrapper,\n  };\n}\n\n/**\n * Creates a Vue component implementation without the generic binder\n * (for components that manage their own context bindings).\n */\nexport function createBinderlessVueComponent(\n  api: ComponentApi,\n  renderFn: (componentProps: {\n    context: ComponentContext;\n    buildChild: (id: string, basePath?: string) => VNode;\n  }) => VNode | VNode[] | null,\n): VueComponentImplementation {\n  const VueWrapper = defineComponent({\n    name: `A2UI_${api.name}`,\n    props: {\n      context: {\n        type: Object as PropType<ComponentContext>,\n        required: true,\n      },\n      buildChild: {\n        type: Function as PropType<(id: string, basePath?: string) => VNode>,\n        required: true,\n      },\n    },\n    setup(wrapperProps) {\n      return () =>\n        renderFn({\n          context: wrapperProps.context,\n          buildChild: wrapperProps.buildChild,\n        });\n    },\n  });\n\n  return {\n    name: api.name,\n    schema: api.schema,\n    render: VueWrapper,\n  };\n}\n","/**\n * Style utilities for Vue A2UI basic catalog components.\n * Mirrors the React renderer's catalog/basic/utils.ts.\n */\n\nimport type { CSSProperties } from \"vue\";\n\n/** Standard leaf margin from the implementation guide. */\nexport const LEAF_MARGIN = \"8px\";\n\n/** Standard internal padding for visually bounded containers. */\nexport const CONTAINER_PADDING = \"16px\";\n\n/** Standard border for cards and inputs. */\nexport const STANDARD_BORDER = \"1px solid #ccc\";\n\n/** Standard border radius. */\nexport const STANDARD_RADIUS = \"8px\";\n\nexport const mapJustify = (j?: string): string => {\n  switch (j) {\n    case \"center\":\n      return \"center\";\n    case \"end\":\n      return \"flex-end\";\n    case \"spaceAround\":\n      return \"space-around\";\n    case \"spaceBetween\":\n      return \"space-between\";\n    case \"spaceEvenly\":\n      return \"space-evenly\";\n    case \"start\":\n      return \"flex-start\";\n    case \"stretch\":\n      return \"stretch\";\n    default:\n      return \"flex-start\";\n  }\n};\n\nexport const mapAlign = (a?: string): string => {\n  switch (a) {\n    case \"start\":\n      return \"flex-start\";\n    case \"center\":\n      return \"center\";\n    case \"end\":\n      return \"flex-end\";\n    case \"stretch\":\n      return \"stretch\";\n    default:\n      return \"stretch\";\n  }\n};\n\nexport const getBaseLeafStyle = (): CSSProperties => ({\n  margin: LEAF_MARGIN,\n  boxSizing: \"border-box\",\n});\n\nexport const getBaseContainerStyle = (): CSSProperties => ({\n  margin: LEAF_MARGIN,\n  padding: CONTAINER_PADDING,\n  border: STANDARD_BORDER,\n  borderRadius: STANDARD_RADIUS,\n  boxSizing: \"border-box\",\n});\n","/**\n * Vue basic catalog for A2UI v0.9.\n *\n * Provides Vue component implementations for all 18 basic catalog components,\n * mirroring the React renderer's catalog/basic/.\n */\n\nimport { h, ref, type CSSProperties, type VNode } from \"vue\";\nimport { Catalog } from \"@a2ui/web_core/v0_9\";\nimport {\n  TextApi,\n  ImageApi,\n  IconApi,\n  VideoApi,\n  AudioPlayerApi,\n  RowApi,\n  ColumnApi,\n  ListApi,\n  CardApi,\n  TabsApi,\n  DividerApi,\n  ModalApi,\n  ButtonApi,\n  TextFieldApi,\n  CheckBoxApi,\n  ChoicePickerApi,\n  SliderApi,\n  DateTimeInputApi,\n  BASIC_FUNCTIONS,\n} from \"@a2ui/web_core/v0_9/basic_catalog\";\n\nimport { createVueComponent, type VueComponentImplementation } from \"./adapter\";\nimport {\n  LEAF_MARGIN,\n  STANDARD_BORDER,\n  STANDARD_RADIUS,\n  getBaseLeafStyle,\n  getBaseContainerStyle,\n  mapJustify,\n  mapAlign,\n} from \"./utils\";\n\n// -- Helper: render a child list (arrays of { id, basePath } or string IDs) --\nfunction renderChildList(\n  childList: unknown,\n  buildChild: (id: string, basePath?: string) => VNode,\n): VNode[] {\n  if (!Array.isArray(childList)) return [];\n  return childList\n    .map((item: unknown) => {\n      if (item && typeof item === \"object\" && \"id\" in item) {\n        const node = item as { id: string; basePath?: string };\n        return buildChild(node.id, node.basePath);\n      }\n      if (typeof item === \"string\") {\n        return buildChild(item);\n      }\n      return null;\n    })\n    .filter((v): v is VNode => v !== null);\n}\n\n// -- Unique ID counter for form elements --\nlet a2uiIdCounter = 0;\nfunction useA2UIUniqueId(): string {\n  return `a2ui-vue-${++a2uiIdCounter}`;\n}\n\n// ============================================================\n// Component Implementations\n// ============================================================\n\nconst Text = createVueComponent(TextApi, ({ props }) => {\n  const text = props.text ?? \"\";\n  const style = { ...getBaseLeafStyle(), display: \"inline-block\" };\n\n  switch (props.variant) {\n    case \"h1\":\n      return h(\"h1\", { style }, text);\n    case \"h2\":\n      return h(\"h2\", { style }, text);\n    case \"h3\":\n      return h(\"h3\", { style }, text);\n    case \"h4\":\n      return h(\"h4\", { style }, text);\n    case \"h5\":\n      return h(\"h5\", { style }, text);\n    case \"caption\":\n      return h(\n        \"small\",\n        { style: { ...style, color: \"#666\", textAlign: \"left\" } },\n        text,\n      );\n    case \"body\":\n    default:\n      return h(\"span\", { style }, text);\n  }\n});\n\nconst Image = createVueComponent(ImageApi, ({ props }) => {\n  const mapFit = (fit?: string): string => {\n    if (fit === \"scaleDown\") return \"scale-down\";\n    return fit || \"fill\";\n  };\n\n  const style: CSSProperties = {\n    ...getBaseLeafStyle(),\n    objectFit: mapFit(props.fit) as CSSProperties[\"objectFit\"],\n    width: \"100%\",\n    height: \"auto\",\n    display: \"block\",\n  };\n\n  if (props.variant === \"icon\") {\n    style.width = \"24px\";\n    style.height = \"24px\";\n  } else if (props.variant === \"avatar\") {\n    style.width = \"40px\";\n    style.height = \"40px\";\n    style.borderRadius = \"50%\";\n  } else if (props.variant === \"smallFeature\") {\n    style.maxWidth = \"100px\";\n  } else if (props.variant === \"largeFeature\") {\n    style.maxHeight = \"400px\";\n  } else if (props.variant === \"header\") {\n    style.height = \"200px\";\n    style.objectFit = \"cover\";\n  }\n\n  return h(\"img\", { src: props.url, alt: props.description || \"\", style });\n});\n\nconst Icon = createVueComponent(IconApi, ({ props }) => {\n  const iconName =\n    typeof props.name === \"string\"\n      ? props.name\n      : (props.name as { path?: string })?.path;\n  const style = {\n    ...getBaseLeafStyle(),\n    fontSize: \"24px\",\n    width: \"24px\",\n    height: \"24px\",\n    display: \"inline-flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  };\n\n  return h(\"span\", { class: \"material-symbols-outlined\", style }, iconName);\n});\n\nconst Video = createVueComponent(VideoApi, ({ props }) => {\n  const style = {\n    ...getBaseLeafStyle(),\n    width: \"100%\",\n    aspectRatio: \"16/9\",\n  };\n\n  return h(\"video\", { src: props.url, controls: true, style });\n});\n\nconst AudioPlayer = createVueComponent(AudioPlayerApi, ({ props }) => {\n  const style = { ...getBaseLeafStyle(), width: \"100%\" };\n\n  return h(\n    \"div\",\n    {\n      style: {\n        display: \"flex\",\n        flexDirection: \"column\",\n        gap: \"4px\",\n        width: \"100%\",\n      },\n    },\n    [\n      props.description\n        ? h(\n            \"span\",\n            { style: { fontSize: \"12px\", color: \"#666\" } },\n            props.description,\n          )\n        : null,\n      h(\"audio\", { src: props.url, controls: true, style }),\n    ],\n  );\n});\n\nconst Row = createVueComponent(RowApi, ({ props, buildChild }) => {\n  return h(\n    \"div\",\n    {\n      style: {\n        display: \"flex\",\n        flexDirection: \"row\",\n        justifyContent: mapJustify(props.justify),\n        alignItems: mapAlign(props.align),\n        width: \"100%\",\n        margin: \"0\",\n        padding: \"0\",\n      },\n    },\n    renderChildList(props.children, buildChild),\n  );\n});\n\nconst Column = createVueComponent(ColumnApi, ({ props, buildChild }) => {\n  return h(\n    \"div\",\n    {\n      style: {\n        display: \"flex\",\n        flexDirection: \"column\",\n        justifyContent: mapJustify(props.justify),\n        alignItems: mapAlign(props.align),\n        width: \"100%\",\n        margin: \"0\",\n        padding: \"0\",\n      },\n    },\n    renderChildList(props.children, buildChild),\n  );\n});\n\nconst List = createVueComponent(ListApi, ({ props, buildChild }) => {\n  const isHorizontal = props.direction === \"horizontal\";\n  const style = {\n    display: \"flex\",\n    flexDirection: isHorizontal ? (\"row\" as const) : (\"column\" as const),\n    alignItems: mapAlign(props.align),\n    overflowX: isHorizontal ? (\"auto\" as const) : (\"hidden\" as const),\n    overflowY: isHorizontal ? (\"hidden\" as const) : (\"auto\" as const),\n    width: \"100%\",\n    margin: \"0\",\n    padding: \"0\",\n  };\n\n  return h(\"div\", { style }, renderChildList(props.children, buildChild));\n});\n\nconst Card = createVueComponent(CardApi, ({ props, buildChild }) => {\n  const style = {\n    ...getBaseContainerStyle(),\n    backgroundColor: \"#fff\",\n    boxShadow: \"0 2px 4px rgba(0,0,0,0.1)\",\n    width: \"100%\",\n  };\n\n  return h(\"div\", { style }, [props.child ? buildChild(props.child) : null]);\n});\n\nconst Tabs = createVueComponent(\n  TabsApi,\n  ({ props, buildChild, state }) => {\n    const tabs = props.tabs || [];\n\n    return h(\n      \"div\",\n      {\n        style: {\n          display: \"flex\",\n          flexDirection: \"column\",\n          width: \"100%\",\n          margin: LEAF_MARGIN,\n        },\n      },\n      [\n        h(\n          \"div\",\n          {\n            style: {\n              display: \"flex\",\n              borderBottom: \"1px solid #ccc\",\n              marginBottom: \"8px\",\n            },\n          },\n          tabs.map((tab, i: number) => {\n            const title =\n              typeof tab.title === \"string\"\n                ? tab.title\n                : String(tab.title ?? \"\");\n            return h(\n              \"button\",\n              {\n                key: i,\n                onClick: () => {\n                  state.selectedIndex.value = i;\n                },\n                style: {\n                  padding: \"8px 16px\",\n                  border: \"none\",\n                  background: \"none\",\n                  borderBottom:\n                    state.selectedIndex.value === i\n                      ? \"2px solid var(--a2ui-primary-color, #007bff)\"\n                      : \"none\",\n                  fontWeight:\n                    state.selectedIndex.value === i ? \"bold\" : \"normal\",\n                  cursor: \"pointer\",\n                  color:\n                    state.selectedIndex.value === i\n                      ? \"var(--a2ui-primary-color, #007bff)\"\n                      : \"inherit\",\n                },\n              },\n              title,\n            );\n          }),\n        ),\n        h(\"div\", { style: { flex: \"1\" } }, [\n          tabs[state.selectedIndex.value]?.child\n            ? buildChild(tabs[state.selectedIndex.value]!.child)\n            : null,\n        ]),\n      ],\n    );\n  },\n  () => ({ selectedIndex: ref(0) }),\n);\n\nconst Divider = createVueComponent(DividerApi, ({ props }) => {\n  const isVertical = props.axis === \"vertical\";\n  const style: Record<string, string> = {\n    margin: LEAF_MARGIN,\n    border: \"none\",\n    backgroundColor: \"#ccc\",\n  };\n\n  if (isVertical) {\n    style.width = \"1px\";\n    style.height = \"100%\";\n  } else {\n    style.width = \"100%\";\n    style.height = \"1px\";\n  }\n\n  return h(\"div\", { style });\n});\n\nconst Modal = createVueComponent(\n  ModalApi,\n  ({ props, buildChild, state }) => {\n    return h(\"div\", {}, [\n      h(\n        \"div\",\n        {\n          onClick: () => {\n            state.isOpen.value = true;\n          },\n          style: { display: \"inline-block\" },\n        },\n        [props.trigger ? buildChild(props.trigger) : null],\n      ),\n      state.isOpen.value\n        ? h(\n            \"div\",\n            {\n              style: {\n                position: \"fixed\",\n                top: \"0\",\n                left: \"0\",\n                right: \"0\",\n                bottom: \"0\",\n                backgroundColor: \"rgba(0,0,0,0.5)\",\n                display: \"flex\",\n                alignItems: \"center\",\n                justifyContent: \"center\",\n                zIndex: \"1000\",\n              },\n              onClick: () => {\n                state.isOpen.value = false;\n              },\n            },\n            [\n              h(\n                \"div\",\n                {\n                  style: {\n                    backgroundColor: \"#fff\",\n                    padding: \"24px\",\n                    borderRadius: \"8px\",\n                    maxWidth: \"90%\",\n                    maxHeight: \"90%\",\n                    overflow: \"auto\",\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                  },\n                  onClick: (e: Event) => e.stopPropagation(),\n                },\n                [\n                  h(\n                    \"div\",\n                    { style: { display: \"flex\", justifyContent: \"flex-end\" } },\n                    [\n                      h(\n                        \"button\",\n                        {\n                          onClick: () => {\n                            state.isOpen.value = false;\n                          },\n                          style: {\n                            border: \"none\",\n                            background: \"none\",\n                            fontSize: \"20px\",\n                            cursor: \"pointer\",\n                            padding: \"4px\",\n                          },\n                        },\n                        \"\\u00D7\",\n                      ),\n                    ],\n                  ),\n                  h(\"div\", { style: { flex: \"1\" } }, [\n                    props.content ? buildChild(props.content) : null,\n                  ]),\n                ],\n              ),\n            ],\n          )\n        : null,\n    ]);\n  },\n  () => ({ isOpen: ref(false) }),\n);\n\nconst Button = createVueComponent(ButtonApi, ({ props, buildChild }) => {\n  const style = {\n    margin: LEAF_MARGIN,\n    padding: \"8px 16px\",\n    cursor: \"pointer\",\n    border: props.variant === \"borderless\" ? \"none\" : \"1px solid #ccc\",\n    backgroundColor:\n      props.variant === \"primary\"\n        ? \"var(--a2ui-primary-color, #007bff)\"\n        : props.variant === \"borderless\"\n          ? \"transparent\"\n          : \"#fff\",\n    color: props.variant === \"primary\" ? \"#fff\" : \"inherit\",\n    borderRadius: \"4px\",\n    display: \"inline-flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    boxSizing: \"border-box\",\n  };\n\n  return h(\n    \"button\",\n    {\n      style,\n      onClick: props.action,\n      disabled: props.isValid === false,\n    },\n    [props.child ? buildChild(props.child) : null],\n  );\n});\n\nconst TextField = createVueComponent(\n  TextFieldApi,\n  ({ props, state }) => {\n    const uniqueId = state.id;\n    const isLong = props.variant === \"longText\";\n    const type =\n      props.variant === \"number\"\n        ? \"number\"\n        : props.variant === \"obscured\"\n          ? \"password\"\n          : \"text\";\n\n    const inputStyle = {\n      padding: \"8px\",\n      width: \"100%\",\n      border:\n        props.validationErrors && props.validationErrors.length > 0\n          ? \"1px solid red\"\n          : STANDARD_BORDER,\n      borderRadius: STANDARD_RADIUS,\n      boxSizing: \"border-box\",\n    };\n\n    const hasError =\n      props.validationErrors && props.validationErrors.length > 0;\n\n    return h(\n      \"div\",\n      {\n        style: {\n          display: \"flex\",\n          flexDirection: \"column\",\n          gap: \"4px\",\n          width: \"100%\",\n          margin: LEAF_MARGIN,\n        },\n      },\n      [\n        props.label\n          ? h(\n              \"label\",\n              {\n                for: uniqueId,\n                style: { fontSize: \"14px\", fontWeight: \"bold\" },\n              },\n              props.label,\n            )\n          : null,\n        isLong\n          ? h(\"textarea\", {\n              id: uniqueId,\n              style: inputStyle,\n              value: props.value || \"\",\n              onInput: (e: Event) =>\n                props.setValue((e.target as HTMLTextAreaElement).value),\n            })\n          : h(\"input\", {\n              id: uniqueId,\n              type,\n              style: inputStyle,\n              value: props.value || \"\",\n              onInput: (e: Event) =>\n                props.setValue((e.target as HTMLInputElement).value),\n            }),\n        hasError\n          ? h(\n              \"span\",\n              { style: { fontSize: \"12px\", color: \"red\" } },\n              props.validationErrors![0],\n            )\n          : null,\n      ],\n    );\n  },\n  () => ({ id: useA2UIUniqueId() }),\n);\n\nconst CheckBox = createVueComponent(\n  CheckBoxApi,\n  ({ props, state }) => {\n    const uniqueId = state.id;\n    const hasError =\n      props.validationErrors && props.validationErrors.length > 0;\n\n    return h(\n      \"div\",\n      {\n        style: {\n          display: \"flex\",\n          flexDirection: \"column\",\n          margin: LEAF_MARGIN,\n        },\n      },\n      [\n        h(\n          \"div\",\n          { style: { display: \"flex\", alignItems: \"center\", gap: \"8px\" } },\n          [\n            h(\"input\", {\n              id: uniqueId,\n              type: \"checkbox\",\n              checked: !!props.value,\n              onChange: (e: Event) =>\n                props.setValue((e.target as HTMLInputElement).checked),\n              style: {\n                cursor: \"pointer\",\n                outline: hasError ? \"1px solid red\" : \"none\",\n              },\n            }),\n            props.label\n              ? h(\n                  \"label\",\n                  {\n                    for: uniqueId,\n                    style: {\n                      cursor: \"pointer\",\n                      color: hasError ? \"red\" : \"inherit\",\n                    },\n                  },\n                  props.label,\n                )\n              : null,\n          ],\n        ),\n        hasError\n          ? h(\n              \"span\",\n              {\n                style: { fontSize: \"12px\", color: \"red\", marginTop: \"4px\" },\n              },\n              props.validationErrors?.[0],\n            )\n          : null,\n      ],\n    );\n  },\n  () => ({ id: useA2UIUniqueId() }),\n);\n\nconst ChoicePicker = createVueComponent(\n  ChoicePickerApi,\n  ({ props, context, state }) => {\n    const values = Array.isArray(props.value) ? props.value : [];\n    const isMutuallyExclusive = props.variant === \"mutuallyExclusive\";\n\n    const onToggle = (val: string) => {\n      if (isMutuallyExclusive) {\n        props.setValue([val]);\n      } else {\n        const newValues = values.includes(val)\n          ? values.filter((v: string) => v !== val)\n          : [...values, val];\n        props.setValue(newValues);\n      }\n    };\n\n    type ChoiceOption = {\n      label?: string | Record<string, unknown>;\n      value: string;\n    };\n    const options = (props.options || []).filter(\n      (opt: ChoiceOption) =>\n        !props.filterable ||\n        state.filter.value === \"\" ||\n        String(typeof opt.label === \"string\" ? opt.label : \"\")\n          .toLowerCase()\n          .includes(state.filter.value.toLowerCase()),\n    );\n\n    return h(\n      \"div\",\n      {\n        style: {\n          display: \"flex\",\n          flexDirection: \"column\",\n          gap: \"8px\",\n          margin: LEAF_MARGIN,\n          width: \"100%\",\n        },\n      },\n      [\n        props.label\n          ? h(\"strong\", { style: { fontSize: \"14px\" } }, props.label)\n          : null,\n        props.filterable\n          ? h(\"input\", {\n              type: \"text\",\n              placeholder: \"Filter options...\",\n              value: state.filter.value,\n              onInput: (e: Event) => {\n                state.filter.value = (e.target as HTMLInputElement).value;\n              },\n              style: {\n                padding: \"4px 8px\",\n                border: STANDARD_BORDER,\n                borderRadius: STANDARD_RADIUS,\n              },\n            })\n          : null,\n        h(\n          \"div\",\n          {\n            style: {\n              display: \"flex\",\n              flexDirection: props.displayStyle === \"chips\" ? \"row\" : \"column\",\n              flexWrap: props.displayStyle === \"chips\" ? \"wrap\" : \"nowrap\",\n              gap: \"8px\",\n            },\n          },\n          options.map((opt: ChoiceOption, i: number) => {\n            const isSelected = values.includes(opt.value);\n            const label =\n              typeof opt.label === \"string\"\n                ? opt.label\n                : String(opt.label ?? opt.value);\n            if (props.displayStyle === \"chips\") {\n              return h(\n                \"button\",\n                {\n                  key: i,\n                  onClick: () => onToggle(opt.value),\n                  style: {\n                    padding: \"4px 12px\",\n                    borderRadius: \"16px\",\n                    border: isSelected\n                      ? \"1px solid var(--a2ui-primary-color, #007bff)\"\n                      : STANDARD_BORDER,\n                    backgroundColor: isSelected\n                      ? \"var(--a2ui-primary-color, #007bff)\"\n                      : \"#fff\",\n                    color: isSelected ? \"#fff\" : \"inherit\",\n                    cursor: \"pointer\",\n                    fontSize: \"12px\",\n                  },\n                },\n                label,\n              );\n            }\n            return h(\n              \"label\",\n              {\n                key: i,\n                style: {\n                  display: \"flex\",\n                  alignItems: \"center\",\n                  gap: \"8px\",\n                  cursor: \"pointer\",\n                },\n              },\n              [\n                h(\"input\", {\n                  type: isMutuallyExclusive ? \"radio\" : \"checkbox\",\n                  checked: isSelected,\n                  onChange: () => onToggle(opt.value),\n                  name: isMutuallyExclusive\n                    ? `choice-${context.componentModel.id}`\n                    : undefined,\n                }),\n                h(\"span\", { style: { fontSize: \"14px\" } }, label),\n              ],\n            );\n          }),\n        ),\n      ],\n    );\n  },\n  () => ({ filter: ref(\"\") }),\n);\n\nconst Slider = createVueComponent(\n  SliderApi,\n  ({ props, state }) => {\n    const uniqueId = state.id;\n\n    return h(\n      \"div\",\n      {\n        style: {\n          display: \"flex\",\n          flexDirection: \"column\",\n          gap: \"4px\",\n          margin: LEAF_MARGIN,\n          width: \"100%\",\n        },\n      },\n      [\n        h(\n          \"div\",\n          { style: { display: \"flex\", justifyContent: \"space-between\" } },\n          [\n            props.label\n              ? h(\n                  \"label\",\n                  {\n                    for: uniqueId,\n                    style: { fontSize: \"14px\", fontWeight: \"bold\" },\n                  },\n                  props.label,\n                )\n              : null,\n            h(\n              \"span\",\n              { style: { fontSize: \"12px\", color: \"#666\" } },\n              String(props.value),\n            ),\n          ],\n        ),\n        h(\"input\", {\n          id: uniqueId,\n          type: \"range\",\n          min: props.min ?? 0,\n          max: props.max,\n          value: props.value ?? 0,\n          onInput: (e: Event) =>\n            props.setValue(Number((e.target as HTMLInputElement).value)),\n          style: { width: \"100%\", cursor: \"pointer\" },\n        }),\n      ],\n    );\n  },\n  () => ({ id: useA2UIUniqueId() }),\n);\n\nconst DateTimeInput = createVueComponent(\n  DateTimeInputApi,\n  ({ props, state }) => {\n    const uniqueId = state.id;\n\n    let type = \"datetime-local\";\n    if (props.enableDate && !props.enableTime) type = \"date\";\n    if (!props.enableDate && props.enableTime) type = \"time\";\n\n    const style = {\n      padding: \"8px\",\n      width: \"100%\",\n      border: STANDARD_BORDER,\n      borderRadius: STANDARD_RADIUS,\n      boxSizing: \"border-box\",\n    };\n\n    return h(\n      \"div\",\n      {\n        style: {\n          display: \"flex\",\n          flexDirection: \"column\",\n          gap: \"4px\",\n          width: \"100%\",\n          margin: LEAF_MARGIN,\n        },\n      },\n      [\n        props.label\n          ? h(\n              \"label\",\n              {\n                for: uniqueId,\n                style: { fontSize: \"14px\", fontWeight: \"bold\" },\n              },\n              props.label,\n            )\n          : null,\n        h(\"input\", {\n          id: uniqueId,\n          type,\n          style,\n          value: props.value || \"\",\n          onInput: (e: Event) =>\n            props.setValue((e.target as HTMLInputElement).value),\n          min: typeof props.min === \"string\" ? props.min : undefined,\n          max: typeof props.max === \"string\" ? props.max : undefined,\n        }),\n      ],\n    );\n  },\n  () => ({ id: useA2UIUniqueId() }),\n);\n\n// ============================================================\n// Catalog Assembly\n// ============================================================\n\nconst vueBasicComponents: VueComponentImplementation[] = [\n  Text,\n  Image,\n  Icon,\n  Video,\n  AudioPlayer,\n  Row,\n  Column,\n  List,\n  Card,\n  Tabs,\n  Divider,\n  Modal,\n  Button,\n  TextField,\n  CheckBox,\n  ChoicePicker,\n  Slider,\n  DateTimeInput,\n];\n\nexport const vueBasicCatalog = new Catalog<VueComponentImplementation>(\n  \"https://a2ui.org/specification/v0_9/basic_catalog.json\",\n  vueBasicComponents,\n  BASIC_FUNCTIONS,\n);\n\nexport {\n  Text,\n  Image,\n  Icon,\n  Video,\n  AudioPlayer,\n  Row,\n  Column,\n  List,\n  Card,\n  Tabs,\n  Divider,\n  Modal,\n  Button,\n  TextField,\n  CheckBox,\n  ChoicePicker,\n  Slider,\n  DateTimeInput,\n};\n","import { computed, watch } from \"vue\";\nimport type { ShallowRef } from \"vue\";\nimport type { Catalog, ComponentApi } from \"@a2ui/web_core/v0_9\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport {\n  A2UI_DEFAULT_GENERATION_GUIDELINES,\n  A2UI_DEFAULT_DESIGN_GUIDELINES,\n} from \"@copilotkit/shared\";\nimport type { CopilotKitCoreVue } from \"../../lib/vue-core\";\nimport { vueBasicCatalog } from \"./catalog\";\n\n/**\n * Context description used to identify the A2UI component schema in\n * RunAgentInput.context.  Must match the constant in @ag-ui/a2ui-middleware\n * so the middleware can overwrite a frontend-provided schema with a\n * server-side one.\n *\n * Duplicated from @copilotkit/a2ui-renderer/catalog-utils to avoid pulling\n * in React dependencies.\n */\nconst A2UI_SCHEMA_CONTEXT_DESCRIPTION =\n  \"A2UI Component Schema — available components for generating UI surfaces. \" +\n  \"Use these component names and properties when creating A2UI operations.\";\n\n/**\n * Build a context string describing the available A2UI catalog.\n * Vue-native equivalent of buildCatalogContextValue from a2ui-renderer.\n */\nfunction buildCatalogContextValue(catalog?: Catalog<ComponentApi>): string {\n  const resolved = catalog ?? vueBasicCatalog;\n  const BASIC_CATALOG_ID =\n    \"https://a2ui.org/specification/v0_9/basic_catalog.json\";\n  const lines: string[] = [];\n  lines.push(\"Available A2UI catalog:\");\n\n  if (resolved.id === BASIC_CATALOG_ID) {\n    lines.push(`- ${resolved.id} (basic catalog)`);\n    return lines.join(\"\\n\");\n  }\n\n  // Check if the resolved catalog extends the basic catalog\n  let isSuperset = true;\n  for (const name of vueBasicCatalog.components.keys()) {\n    if (!resolved.components.has(name)) {\n      isSuperset = false;\n      break;\n    }\n  }\n\n  // Identify custom components (not in basic catalog)\n  const customNames: string[] = [];\n  for (const name of resolved.components.keys()) {\n    if (!vueBasicCatalog.components.has(name)) {\n      customNames.push(name);\n    }\n  }\n\n  lines.push(`- ${resolved.id}`);\n  if (isSuperset) {\n    lines.push(\n      \"  Extends the basic catalog with all standard components plus:\",\n    );\n  } else {\n    lines.push(\"  Custom catalog (does NOT include all basic components).\");\n    lines.push(\"  Custom components:\");\n  }\n\n  for (const name of customNames) {\n    const comp = resolved.components.get(name);\n    if (!comp) continue;\n    const jsonSchema = zodToJsonSchema(comp.schema);\n    lines.push(`  - ${name}:`);\n    lines.push(\n      `    ${JSON.stringify(jsonSchema, null, 2).split(\"\\n\").join(\"\\n    \")}`,\n    );\n  }\n\n  return lines.join(\"\\n\");\n}\n\n/**\n * Extract component schemas from a catalog in A2UI v0.9 inline format.\n * Vue-native equivalent of extractCatalogComponentSchemas.\n */\nfunction extractCatalogComponentSchemas(catalog?: Catalog<ComponentApi>): {\n  catalogId: string;\n  components: Record<string, Record<string, unknown>>;\n} {\n  const resolved = catalog ?? vueBasicCatalog;\n  const components: Record<string, Record<string, unknown>> = {};\n\n  for (const [name, comp] of resolved.components) {\n    const zodSchema = zodToJsonSchema(comp.schema, {\n      target: \"jsonSchema2019-09\",\n    }) as { properties?: Record<string, unknown>; required?: string[] };\n\n    components[name] = {\n      allOf: [\n        { $ref: \"common_types.json#/$defs/ComponentCommon\" },\n        {\n          properties: {\n            component: { const: name },\n            ...(zodSchema.properties ?? {}),\n          },\n          required: [\"component\", ...(zodSchema.required ?? [])],\n        },\n      ],\n    };\n  }\n\n  return { catalogId: resolved.id, components };\n}\n\n/**\n * Registers agent context describing the available A2UI catalog, component\n * schemas, and generation/design guidelines.\n *\n * Vue-native equivalent of React's `<A2UICatalogContext>` component.\n * Call from the provider's setup function.\n */\nexport function registerA2UICatalogContext(\n  copilotkit: ShallowRef<CopilotKitCoreVue>,\n  options: {\n    enabled: () => boolean;\n    catalog: () => Catalog<ComponentApi> | undefined;\n    includeSchema: () => boolean;\n  },\n): void {\n  const contextValue = computed(() =>\n    buildCatalogContextValue(options.catalog()),\n  );\n\n  // Register catalog capabilities context\n  watch(\n    [() => copilotkit.value, options.enabled, contextValue],\n    ([core, isEnabled, value], _prev, onCleanup) => {\n      if (!isEnabled) return;\n      const id = core.addContext({\n        description:\n          \"A2UI catalog capabilities: available catalog IDs and \" +\n          \"custom component definitions the client can render.\",\n        value,\n      });\n      onCleanup(() => core.removeContext(id));\n    },\n    { immediate: true },\n  );\n\n  // Register schema + generation/design guidelines\n  const schemaValue = computed(() => {\n    if (!options.includeSchema()) return null;\n    return JSON.stringify(extractCatalogComponentSchemas(options.catalog()));\n  });\n\n  watch(\n    [() => copilotkit.value, options.enabled, schemaValue],\n    ([core, isEnabled, schema], _prev, onCleanup) => {\n      if (!isEnabled || !schema) return;\n      const ids: string[] = [];\n      ids.push(\n        core.addContext({\n          description: A2UI_SCHEMA_CONTEXT_DESCRIPTION,\n          value: schema,\n        }),\n      );\n      ids.push(\n        core.addContext({\n          description:\n            \"A2UI generation guidelines — protocol rules, tool arguments, \" +\n            \"path rules, data model format, and \" +\n            \"form/two-way-binding instructions.\",\n          value: A2UI_DEFAULT_GENERATION_GUIDELINES,\n        }),\n      );\n      ids.push(\n        core.addContext({\n          description:\n            \"A2UI design guidelines — visual design rules, component \" +\n            \"hierarchy tips, and action handler patterns.\",\n          value: A2UI_DEFAULT_DESIGN_GUIDELINES,\n        }),\n      );\n      onCleanup(() => {\n        for (const id of ids) core.removeContext(id);\n      });\n    },\n    { immediate: true },\n  );\n}\n","export function extractCompleteStyles(html: string): string {\n  const matches = html.match(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi);\n  return matches ? matches.join(\"\") : \"\";\n}\n\nexport function processPartialHtml(html: string): string {\n  let result = html;\n\n  result = result.replace(/<[^>]*$/, \"\");\n  result = result.replace(/<(style|script|head)\\b[^>]*>[\\s\\S]*?<\\/\\1>/gi, \"\");\n  result = result.replace(/<(style|script|head)\\b[^>]*>[\\s\\S]*$/gi, \"\");\n  result = result.replace(/&[a-zA-Z0-9#]*$/, \"\");\n\n  const bodyMatch = result.match(/<body[^>]*>([\\s\\S]*)/i);\n  if (bodyMatch) {\n    result = bodyMatch[1]!;\n    result = result.replace(/<\\/body>[\\s\\S]*/i, \"\");\n  }\n\n  return result;\n}\n","import { computed, inject, type ComputedRef, type Ref } from \"vue\";\nimport type { SandboxFunction } from \"../types\";\nimport { SandboxFunctionsKey } from \"./keys\";\n\nexport function useSandboxFunctions(): ComputedRef<readonly SandboxFunction[]> {\n  const functionsRef = inject<Ref<readonly SandboxFunction[]>>(\n    SandboxFunctionsKey,\n    computed(() => []),\n  );\n  return computed(() => functionsRef.value);\n}\n","import {\n  computed,\n  defineComponent,\n  h,\n  onBeforeUnmount,\n  ref,\n  watch,\n  type PropType,\n} from \"vue\";\nimport { z } from \"zod\";\nimport { ToolCallStatus } from \"@copilotkit/core\";\nimport {\n  processPartialHtml,\n  extractCompleteStyles,\n} from \"../lib/processPartialHtml\";\nimport { useSandboxFunctions } from \"../providers/SandboxFunctionsContext\";\n\nexport const OpenGenerativeUIActivityType = \"open-generative-ui\";\n\nexport const OpenGenerativeUIContentSchema = z.object({\n  initialHeight: z.number().optional(),\n  generating: z.boolean().optional(),\n  css: z.string().optional(),\n  cssComplete: z.boolean().optional(),\n  html: z.array(z.string()).optional(),\n  htmlComplete: z.boolean().optional(),\n  jsFunctions: z.string().optional(),\n  jsFunctionsComplete: z.boolean().optional(),\n  jsExpressions: z.array(z.string()).optional(),\n  jsExpressionsComplete: z.boolean().optional(),\n});\n\nexport type OpenGenerativeUIContent = z.infer<\n  typeof OpenGenerativeUIContentSchema\n>;\n\nexport const GenerateSandboxedUiArgsSchema = z.object({\n  initialHeight: z.number().optional(),\n  placeholderMessages: z.array(z.string()).optional(),\n  css: z.string().optional(),\n  html: z.string().optional(),\n  jsFunctions: z.string().optional(),\n  jsExpressions: z.array(z.string()).optional(),\n});\n\nexport type GenerateSandboxedUiArgs = z.infer<\n  typeof GenerateSandboxedUiArgsSchema\n>;\n\nfunction shouldFlushImmediately(\n  previous: OpenGenerativeUIContent | null,\n  next: OpenGenerativeUIContent,\n): boolean {\n  if (next.cssComplete && (!previous || !previous.cssComplete)) return true;\n  if (next.htmlComplete) return true;\n  if (next.generating === false) return true;\n  if (next.jsFunctions && (!previous || !previous.jsFunctions)) return true;\n  if (\n    (next.jsExpressions?.length ?? 0) > (previous?.jsExpressions?.length ?? 0)\n  )\n    return true;\n  if (next.html?.length && (!previous || !previous.html?.length)) return true;\n  return false;\n}\n\nfunction ensureHead(html: string): string {\n  if (/<head[\\s>]/i.test(html)) return html;\n  return `<head></head>${html}`;\n}\n\nfunction injectCssIntoHtml(html: string, css: string): string {\n  const headCloseIdx = html.indexOf(\"</head>\");\n  if (headCloseIdx !== -1) {\n    return (\n      html.slice(0, headCloseIdx) +\n      `<style>${css}</style>` +\n      html.slice(headCloseIdx)\n    );\n  }\n  return `<head><style>${css}</style></head>${html}`;\n}\n\ntype SandboxInstance = {\n  iframe: HTMLIFrameElement;\n  promise: Promise<unknown>;\n  run: (code: string | Function) => Promise<unknown>;\n  destroy: () => void;\n};\n\ntype WebsandboxModule = {\n  create: (\n    localApi: Record<string, unknown>,\n    options: {\n      frameContainer: HTMLElement;\n      frameContent: string;\n      allowAdditionalAttributes: string;\n    },\n  ) => SandboxInstance;\n};\n\nasync function loadWebsandbox(): Promise<WebsandboxModule> {\n  const mod = (await import(\"@jetbrains/websandbox\")) as any;\n  return (mod.default?.default ?? mod.default) as WebsandboxModule;\n}\n\nexport const OpenGenerativeUIRenderer = defineComponent({\n  name: \"OpenGenerativeUIRenderer\",\n  props: {\n    content: {\n      type: Object as PropType<OpenGenerativeUIContent>,\n      required: true,\n    },\n  },\n  setup(props) {\n    const sandboxFunctions = useSandboxFunctions();\n    const containerRef = ref<HTMLElement | null>(null);\n    const throttledContent = ref<OpenGenerativeUIContent>(props.content);\n    const latestContent = ref<OpenGenerativeUIContent>(props.content);\n    const throttleTimer = ref<number | null>(null);\n    const sandboxRef = ref<SandboxInstance | null>(null);\n    const previewSandboxRef = ref<SandboxInstance | null>(null);\n    const sandboxReady = ref(false);\n    const previewReady = ref(false);\n    const executedExpressionIndex = ref(0);\n    const jsFunctionsInjected = ref(false);\n    const pendingQueue = ref<string[]>([]);\n\n    const localApi = computed(() => {\n      const api: Record<string, unknown> = {};\n      for (const fn of sandboxFunctions.value) {\n        api[fn.name] = fn.handler;\n      }\n      return api;\n    });\n\n    watch(\n      () => props.content,\n      (next) => {\n        latestContent.value = next;\n        if (shouldFlushImmediately(throttledContent.value, next)) {\n          if (throttleTimer.value !== null) {\n            window.clearTimeout(throttleTimer.value);\n            throttleTimer.value = null;\n          }\n          throttledContent.value = next;\n          return;\n        }\n        if (throttleTimer.value === null) {\n          throttleTimer.value = window.setTimeout(() => {\n            throttledContent.value = latestContent.value;\n            throttleTimer.value = null;\n          }, 1000);\n        }\n      },\n      { immediate: true },\n    );\n\n    onBeforeUnmount(() => {\n      if (throttleTimer.value !== null) {\n        window.clearTimeout(throttleTimer.value);\n      }\n    });\n\n    const partialHtml = computed(() => {\n      if (throttledContent.value.htmlComplete) return undefined;\n      if (!throttledContent.value.html?.length) return undefined;\n      return throttledContent.value.html.join(\"\");\n    });\n    const previewBody = computed(() =>\n      partialHtml.value ? processPartialHtml(partialHtml.value) : undefined,\n    );\n    const previewStyles = computed(() =>\n      partialHtml.value ? extractCompleteStyles(partialHtml.value) : \"\",\n    );\n    const fullHtml = computed(() =>\n      throttledContent.value.htmlComplete && throttledContent.value.html?.length\n        ? throttledContent.value.html.join(\"\")\n        : undefined,\n    );\n    const css = computed(() =>\n      throttledContent.value.cssComplete\n        ? throttledContent.value.css\n        : undefined,\n    );\n    const hasPreview = computed(\n      () =>\n        !!throttledContent.value.cssComplete &&\n        !!previewBody.value &&\n        previewBody.value.trim().length > 0,\n    );\n    const hasVisibleSandbox = computed(\n      () => !!fullHtml.value || hasPreview.value,\n    );\n    const resolvedHeight = computed(\n      () => `${throttledContent.value.initialHeight ?? 200}px`,\n    );\n\n    const destroyPreview = () => {\n      if (previewSandboxRef.value) {\n        previewSandboxRef.value.destroy();\n        previewSandboxRef.value = null;\n      }\n      previewReady.value = false;\n    };\n\n    const destroyFinal = () => {\n      if (sandboxRef.value) {\n        sandboxRef.value.destroy();\n        sandboxRef.value = null;\n      }\n      sandboxReady.value = false;\n      pendingQueue.value = [];\n      executedExpressionIndex.value = 0;\n      jsFunctionsInjected.value = false;\n    };\n\n    watch(\n      [\n        hasPreview,\n        fullHtml,\n        css,\n        previewBody,\n        previewStyles,\n        () => containerRef.value,\n      ],\n      async ([previewVisible, htmlComplete], _previous, onCleanup) => {\n        if (!previewVisible || htmlComplete || !containerRef.value) return;\n        if (previewSandboxRef.value) return;\n\n        let cancelled = false;\n        try {\n          const Websandbox = await loadWebsandbox();\n          if (cancelled || !containerRef.value) return;\n\n          const sandbox = Websandbox.create(\n            {},\n            {\n              frameContainer: containerRef.value,\n              frameContent: \"<head></head><body></body>\",\n              allowAdditionalAttributes: \"\",\n            },\n          );\n          previewSandboxRef.value = sandbox;\n          sandbox.iframe.setAttribute(\n            \"data-testid\",\n            \"open-generative-ui-preview-sandbox\",\n          );\n          sandbox.iframe.style.width = \"100%\";\n          sandbox.iframe.style.height = \"100%\";\n          sandbox.iframe.style.border = \"none\";\n          sandbox.iframe.style.backgroundColor = \"transparent\";\n\n          sandbox.promise.then(() => {\n            if (cancelled || !previewSandboxRef.value) return;\n            previewReady.value = true;\n            void sandbox.run(\n              \"var s=document.createElement('style');s.textContent='html, body { overflow: hidden !important; }';document.head.appendChild(s);\",\n            );\n          });\n        } catch (error) {\n          console.error(\n            \"[OpenGenerativeUI] Failed to load sandbox module:\",\n            error,\n          );\n        }\n\n        onCleanup(() => {\n          cancelled = true;\n        });\n      },\n      { immediate: true },\n    );\n\n    watch(\n      [previewBody, previewStyles, css, previewReady],\n      ([body, styles, cssText, ready]) => {\n        if (!previewSandboxRef.value || !ready) return;\n        const headParts: string[] = [];\n        if (cssText) headParts.push(`<style>${cssText}</style>`);\n        if (styles) headParts.push(styles);\n        if (headParts.length) {\n          void previewSandboxRef.value.run(\n            `document.head.innerHTML = ${JSON.stringify(headParts.join(\"\"))}`,\n          );\n        }\n        if (body) {\n          void previewSandboxRef.value.run(\n            `document.body.innerHTML = ${JSON.stringify(body)}`,\n          );\n        }\n      },\n      { immediate: true },\n    );\n\n    watch(\n      [fullHtml, css, localApi, () => containerRef.value],\n      async ([html, cssText, api], _previous, onCleanup) => {\n        destroyFinal();\n        if (!html || !containerRef.value) return;\n        destroyPreview();\n\n        let cancelled = false;\n        try {\n          const Websandbox = await loadWebsandbox();\n          if (cancelled || !containerRef.value) return;\n          const htmlWithHead = ensureHead(html);\n          const htmlWithCss = cssText\n            ? injectCssIntoHtml(htmlWithHead, cssText)\n            : htmlWithHead;\n          const sandbox = Websandbox.create(api, {\n            frameContainer: containerRef.value,\n            frameContent: htmlWithCss,\n            allowAdditionalAttributes: \"\",\n          });\n          sandboxRef.value = sandbox;\n          sandbox.iframe.setAttribute(\n            \"data-testid\",\n            \"open-generative-ui-final-sandbox\",\n          );\n          sandbox.iframe.style.width = \"100%\";\n          sandbox.iframe.style.height = \"100%\";\n          sandbox.iframe.style.border = \"none\";\n          sandbox.iframe.style.backgroundColor = \"transparent\";\n\n          sandbox.promise.then(() => {\n            if (cancelled || !sandboxRef.value) return;\n            sandboxReady.value = true;\n            void sandbox.run(\n              \"var s=document.createElement('style');s.textContent='html, body { overflow: hidden !important; }';document.head.appendChild(s);\",\n            );\n            const functionsCode = throttledContent.value.jsFunctions;\n            if (functionsCode && !jsFunctionsInjected.value) {\n              jsFunctionsInjected.value = true;\n              pendingQueue.value.unshift(functionsCode);\n            }\n            const expressions = throttledContent.value.jsExpressions;\n            if (expressions?.length) {\n              const startIndex = executedExpressionIndex.value;\n              if (startIndex < expressions.length) {\n                pendingQueue.value.push(...expressions.slice(startIndex));\n                executedExpressionIndex.value = expressions.length;\n              }\n            }\n            const queue = [...pendingQueue.value];\n            pendingQueue.value = [];\n            for (const code of queue) {\n              void sandbox.run(code);\n            }\n          });\n        } catch (error) {\n          console.error(\n            \"[OpenGenerativeUI] Failed to load sandbox module:\",\n            error,\n          );\n        }\n\n        onCleanup(() => {\n          cancelled = true;\n        });\n      },\n      { immediate: true },\n    );\n\n    watch(\n      () => throttledContent.value.jsFunctions,\n      (functionsCode) => {\n        if (!functionsCode || jsFunctionsInjected.value) return;\n        jsFunctionsInjected.value = true;\n        if (sandboxReady.value && sandboxRef.value) {\n          void sandboxRef.value.run(functionsCode);\n        } else {\n          pendingQueue.value.push(functionsCode);\n        }\n      },\n    );\n\n    watch(\n      () => throttledContent.value.jsExpressions,\n      (expressions) => {\n        if (!expressions?.length) return;\n        const startIndex = executedExpressionIndex.value;\n        if (startIndex >= expressions.length) return;\n        const newExpressions = expressions.slice(startIndex);\n        executedExpressionIndex.value = expressions.length;\n        if (sandboxReady.value && sandboxRef.value) {\n          for (const expression of newExpressions) {\n            void sandboxRef.value.run(expression);\n          }\n        } else {\n          pendingQueue.value.push(...newExpressions);\n        }\n      },\n      { deep: true },\n    );\n\n    const isGenerating = computed(\n      () => throttledContent.value.generating !== false,\n    );\n    watch(\n      [hasPreview, fullHtml],\n      ([previewVisible, html]) => {\n        if (html) destroyPreview();\n        if (!previewVisible) destroyPreview();\n      },\n      { immediate: true },\n    );\n\n    onBeforeUnmount(() => {\n      if (throttleTimer.value !== null) {\n        window.clearTimeout(throttleTimer.value);\n      }\n      destroyPreview();\n      destroyFinal();\n    });\n\n    return () =>\n      h(\n        \"div\",\n        {\n          ref: containerRef,\n          \"data-testid\": \"open-generative-ui-renderer\",\n          style: {\n            position: \"relative\",\n            width: \"100%\",\n            height: resolvedHeight.value,\n            borderRadius: \"8px\",\n            backgroundColor: hasVisibleSandbox.value\n              ? \"transparent\"\n              : \"#f5f5f5\",\n            border: hasVisibleSandbox.value ? \"none\" : \"1px solid #e0e0e0\",\n            overflow: \"hidden\",\n            display: hasVisibleSandbox.value ? \"block\" : \"flex\",\n            alignItems: hasVisibleSandbox.value ? undefined : \"center\",\n            justifyContent: hasVisibleSandbox.value ? undefined : \"center\",\n          },\n        },\n        [\n          !hasVisibleSandbox.value\n            ? h(\"div\", { \"data-testid\": \"open-generative-ui-placeholder\" }, [\n                h(\n                  \"svg\",\n                  {\n                    width: \"48\",\n                    height: \"48\",\n                    viewBox: \"0 0 24 24\",\n                    fill: \"none\",\n                    style: { animation: \"ck-spin 1s linear infinite\" },\n                  },\n                  [\n                    h(\"circle\", {\n                      cx: \"12\",\n                      cy: \"12\",\n                      r: \"10\",\n                      stroke: \"#e0e0e0\",\n                      \"stroke-width\": \"3\",\n                    }),\n                    h(\"path\", {\n                      d: \"M12 2a10 10 0 0 1 10 10\",\n                      stroke: \"#999\",\n                      \"stroke-width\": \"3\",\n                      \"stroke-linecap\": \"round\",\n                    }),\n                  ],\n                ),\n                h(\n                  \"style\",\n                  \"@keyframes ck-spin { to { transform: rotate(360deg) } }\",\n                ),\n              ])\n            : null,\n          isGenerating.value\n            ? h(\"div\", {\n                \"data-testid\": \"open-generative-ui-progress-overlay\",\n                style: {\n                  position: \"absolute\",\n                  inset: 0,\n                  backgroundColor: \"rgba(255,255,255,0.45)\",\n                },\n              })\n            : null,\n        ],\n      );\n  },\n});\n\nexport const OpenGenerativeUIActivityRenderer = defineComponent({\n  name: \"OpenGenerativeUIActivityRenderer\",\n  props: {\n    activityType: { type: String, required: true },\n    content: {\n      type: Object as PropType<OpenGenerativeUIContent>,\n      required: true,\n    },\n    message: { type: Object as PropType<unknown>, required: true },\n    agent: {\n      type: Object as PropType<unknown>,\n      required: false,\n      default: undefined,\n    },\n  },\n  setup(props) {\n    return () => h(OpenGenerativeUIRenderer, { content: props.content });\n  },\n});\n\nexport const OpenGenerativeUIToolRenderer = defineComponent({\n  name: \"OpenGenerativeUIToolRenderer\",\n  props: {\n    name: { type: String, required: true },\n    args: {\n      type: Object as PropType<Partial<GenerateSandboxedUiArgs>>,\n      required: true,\n    },\n    status: { type: String as PropType<ToolCallStatus>, required: true },\n    result: { type: String as PropType<string | undefined>, required: false },\n  },\n  setup(props) {\n    const visibleMessageIndex = ref(0);\n\n    watch(\n      () => props.args.placeholderMessages,\n      (messages, _, onCleanup) => {\n        if (!messages?.length || props.status === ToolCallStatus.Complete)\n          return;\n        visibleMessageIndex.value = Math.max(messages.length - 1, 0);\n        const timer = window.setInterval(() => {\n          visibleMessageIndex.value =\n            (visibleMessageIndex.value + 1) % Math.max(messages.length, 1);\n        }, 5000);\n        onCleanup(() => window.clearInterval(timer));\n      },\n      { immediate: true },\n    );\n\n    return () => {\n      if (props.status === ToolCallStatus.Complete) return null;\n      const messages = props.args.placeholderMessages;\n      if (!messages?.length) return null;\n      const currentMessage = messages[visibleMessageIndex.value] ?? messages[0];\n      return h(\n        \"div\",\n        {\n          style: { padding: \"8px 12px\", color: \"#999\", fontSize: \"14px\" },\n          \"data-testid\": \"open-generative-ui-tool-placeholder\",\n        },\n        currentMessage,\n      );\n    };\n  },\n});\n","import type { InjectionKey, Ref } from \"vue\";\nimport { ref } from \"vue\";\nimport {\n  createLicenseContextValue,\n  type LicenseContextValue,\n} from \"@copilotkit/shared\";\n\nexport type { LicenseContextValue };\nexport { createLicenseContextValue };\n\nexport const LicenseContextKey: InjectionKey<Ref<LicenseContextValue>> =\n  Symbol(\"LicenseContext\");\n\nexport function createDefaultLicenseRef(): Ref<LicenseContextValue> {\n  return ref(createLicenseContextValue(null));\n}\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, onBeforeUnmount, onMounted } from \"vue\";\n\n// Total reserved vertical space for the fixed license banner: banner height\n// (~36px) + bottom offset (8px) + visual gap above the chat input (~8px).\nconst LICENSE_BANNER_OFFSET_PX = 52;\nconst LICENSE_BANNER_OFFSET_VAR = \"--copilotkit-license-banner-offset\";\n\ntype LicenseBannerType =\n  | \"no_license\"\n  | \"expired\"\n  | \"expiring\"\n  | \"invalid\"\n  | \"feature_unlicensed\";\n\nconst props = withDefaults(\n  defineProps<{\n    type: LicenseBannerType;\n    featureName?: string;\n    expiryDate?: string;\n    graceRemaining?: number;\n  }>(),\n  {\n    featureName: undefined,\n    expiryDate: undefined,\n    graceRemaining: undefined,\n  },\n);\n\nconst emit = defineEmits<{\n  dismiss: [];\n}>();\n\ninterface BannerSpec {\n  severity: \"info\" | \"warning\" | \"critical\";\n  message: string;\n  actionLabel: string;\n  actionUrl: string;\n}\n\nconst spec = computed<BannerSpec | null>(() => {\n  switch (props.type) {\n    case \"no_license\":\n      return {\n        severity: \"info\",\n        message: \"Powered by CopilotKit\",\n        actionLabel: \"Get a license\",\n        actionUrl: \"https://copilotkit.ai/pricing\",\n      };\n    case \"feature_unlicensed\":\n      return {\n        severity: \"warning\",\n        message: `⚠ The \"${props.featureName ?? \"\"}\" feature requires a CopilotKit license.`,\n        actionLabel: \"Get a license\",\n        actionUrl: \"https://copilotkit.ai/pricing\",\n      };\n    case \"expiring\": {\n      const days = props.graceRemaining;\n      const dayLabel = days === 1 ? \"day\" : \"days\";\n      return {\n        severity: \"warning\",\n        message: `Your CopilotKit license expires in ${days} ${dayLabel}. Please renew.`,\n        actionLabel: \"Renew\",\n        actionUrl: \"https://cloud.copilotkit.ai\",\n      };\n    }\n    case \"expired\":\n      return {\n        severity: \"critical\",\n        message: `Your CopilotKit license expired${props.expiryDate ? ` on ${props.expiryDate}` : \"\"}. Please renew at copilotkit.ai/pricing`,\n        actionLabel: \"Renew now\",\n        actionUrl: \"https://copilotkit.ai/pricing\",\n      };\n    case \"invalid\":\n      return {\n        severity: \"critical\",\n        message:\n          \"Invalid CopilotKit license token. Please check your configuration.\",\n        actionLabel: \"Get a license\",\n        actionUrl: \"https://copilotkit.ai/pricing\",\n      };\n    default:\n      return null;\n  }\n});\n\nconst baseStyle = {\n  position: \"fixed\",\n  bottom: \"8px\",\n  left: \"50%\",\n  transform: \"translateX(-50%)\",\n  zIndex: 99999,\n  display: \"inline-flex\",\n  alignItems: \"center\",\n  gap: \"12px\",\n  whiteSpace: \"nowrap\",\n  padding: \"8px 16px\",\n  fontSize: \"13px\",\n  fontFamily:\n    \"-apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif\",\n  borderRadius: \"6px\",\n  boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n} as const;\n\nconst severityStyle = computed(() => {\n  switch (spec.value?.severity) {\n    case \"warning\":\n      return {\n        backgroundColor: \"#fffbeb\",\n        border: \"1px solid #fbbf24\",\n        color: \"#92400e\",\n      };\n    case \"critical\":\n      return {\n        backgroundColor: \"#fef2f2\",\n        border: \"1px solid #fca5a5\",\n        color: \"#991b1b\",\n      };\n    default:\n      return {\n        backgroundColor: \"#eff6ff\",\n        border: \"1px solid #93c5fd\",\n        color: \"#1e40af\",\n      };\n  }\n});\n\nconst containerStyle = computed(() => ({\n  ...baseStyle,\n  ...severityStyle.value,\n}));\n\nconst instance = getCurrentInstance();\nconst hasDismissListener = computed(() => {\n  const vnodeProps = (instance?.vnode.props ?? {}) as Record<string, unknown>;\n  return typeof vnodeProps.onDismiss === \"function\";\n});\n\nfunction handleDismiss() {\n  emit(\"dismiss\");\n}\n\n// Publish the banner's reserved bottom offset so the chat input can lift\n// itself above it via padding-bottom: var(--copilotkit-license-banner-offset).\nonMounted(() => {\n  if (typeof document === \"undefined\") return;\n  document.documentElement.style.setProperty(\n    LICENSE_BANNER_OFFSET_VAR,\n    `${LICENSE_BANNER_OFFSET_PX}px`,\n  );\n});\n\nonBeforeUnmount(() => {\n  if (typeof document === \"undefined\") return;\n  document.documentElement.style.removeProperty(LICENSE_BANNER_OFFSET_VAR);\n});\n</script>\n\n<template>\n  <div v-if=\"spec\" :style=\"containerStyle\" data-testid=\"copilot-license-banner\">\n    <span>{{ spec.message }}</span>\n    <div\n      :style=\"{\n        display: 'flex',\n        gap: '8px',\n        alignItems: 'center',\n      }\"\n    >\n      <a\n        :href=\"spec.actionUrl\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n        :style=\"{\n          fontWeight: 600,\n          textDecoration: 'underline',\n          color: 'inherit',\n        }\"\n      >\n        {{ spec.actionLabel }}\n      </a>\n      <button\n        v-if=\"hasDismissListener\"\n        :style=\"{\n          background: 'none',\n          border: 'none',\n          cursor: 'pointer',\n          color: 'inherit',\n          fontSize: '16px',\n        }\"\n        @click=\"handleDismiss\"\n      >\n        ×\n      </button>\n    </div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  onMounted,\n  provide,\n  ref,\n  shallowRef,\n  triggerRef,\n  watch,\n} from \"vue\";\nimport { z } from \"zod\";\nimport type { AbstractAgent } from \"@ag-ui/client\";\nimport type {\n  CopilotKitCoreErrorCode,\n  CopilotKitCoreSubscriber,\n  FrontendTool,\n} from \"@copilotkit/core\";\nimport { schemaToJsonSchema } from \"@copilotkit/shared\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { CopilotKitCoreVue } from \"../lib/vue-core\";\nimport { createA2UIMessageRenderer } from \"../components/A2UIMessageRenderer\";\nimport { registerA2UIBuiltInToolCallRenderer } from \"../components/a2ui/A2UIBuiltInToolCallRenderer\";\nimport { registerA2UICatalogContext } from \"../components/a2ui/A2UICatalogContext\";\nimport {\n  GenerateSandboxedUiArgsSchema,\n  OpenGenerativeUIActivityRenderer,\n  OpenGenerativeUIActivityType,\n  OpenGenerativeUIContentSchema,\n  OpenGenerativeUIToolRenderer,\n} from \"../components/OpenGenerativeUIRenderer\";\nimport {\n  MCPAppsActivityContentSchema,\n  MCPAppsActivityRenderer,\n  MCPAppsActivityType,\n} from \"../components/MCPAppsActivityRenderer\";\nimport { CopilotKitKey, SandboxFunctionsKey } from \"./keys\";\nimport {\n  LicenseContextKey,\n  createLicenseContextValue,\n  type LicenseContextValue,\n} from \"./license-context\";\nimport CopilotKitInspector from \"../components/CopilotKitInspector.vue\";\nimport LicenseWarningBanner from \"../components/LicenseWarningBanner.vue\";\nimport type { CopilotKitProviderProps } from \"./CopilotKitProvider.types\";\nimport type {\n  SandboxFunction,\n  VueActivityMessageRenderer,\n  VueFrontendTool,\n  VueHumanInTheLoop,\n  VueToolCallRenderer,\n} from \"../types\";\n\nconst HEADER_NAME = \"X-CopilotCloud-Public-Api-Key\";\nconst COPILOT_CLOUD_CHAT_URL = \"https://api.cloud.copilotkit.ai/copilotkit/v1\";\n\n// Canonical A2UI viewer theme default (matches @copilotkit/a2ui-renderer).\n// Defined locally to avoid pulling React dependencies from a2ui-renderer.\nconst viewerTheme: Record<string, unknown> = {};\n\nconst FRONTEND_TOOLS_STABLE_WARNING =\n  \"frontendTools must be a stable array. If you want to dynamically add or remove tools, use `useFrontendTool` instead.\";\nconst HUMAN_IN_THE_LOOP_STABLE_WARNING =\n  \"humanInTheLoop must be a stable array. If you want to dynamically add or remove human-in-the-loop tools, use `useHumanInTheLoop` instead.\";\nconst RENDER_CUSTOM_MESSAGES_STABLE_WARNING =\n  \"renderCustomMessages must be a stable array.\";\nconst RENDER_ACTIVITY_MESSAGES_STABLE_WARNING =\n  \"renderActivityMessages must be a stable array.\";\nconst SANDBOX_FUNCTIONS_STABLE_WARNING =\n  \"openGenerativeUI.sandboxFunctions must be a stable array.\";\nconst DEFAULT_DESIGN_SKILL = `When generating UI with generateSandboxedUi, follow these design principles inspired by shadcn/ui:\n\n- Use a minimal, flat aesthetic. Avoid drop shadows and gradients — rely on subtle borders (1px solid, light gray like #e5e7eb) to define surfaces.\n- Neutral base palette: white backgrounds, zinc/slate gray text (#09090b for headings, #71717a for secondary text). One accent color for interactive elements.\n- Use system font stacks (system-ui, -apple-system, sans-serif) at readable sizes (14px body, 600 weight for headings). Tight line-heights.\n- Small, consistent border-radius (6–8px). Cards and containers use border, not shadow, for separation.\n- Buttons: solid fill for primary (dark bg, white text), outline for secondary (border + transparent bg). Subtle hover state (slight opacity or background shift).\n- Use CSS Grid or Flexbox for layout. Ensure the UI looks good at any width.\n- Minimal transitions (150ms) for hover/focus states only. No decorative animations.\n- Keep the UI focused and dense — avoid excessive padding. Use compact spacing (8–12px gaps, 10–14px padding in controls).`;\n\nconst GENERATE_SANDBOXED_UI_DESCRIPTION =\n  \"Generate sandboxed UI. \" +\n  \"IMPORTANT: The generated code runs in a sandboxed iframe WITHOUT same-origin access. \" +\n  \"Do NOT use localStorage, sessionStorage, document.cookie, IndexedDB, or fetch/XMLHttpRequest to same-origin URLs. \" +\n  \"To communicate with the host application, use Websandbox.connection.remote.<functionName>(args) which returns a Promise.\\n\\n\" +\n  \"You CAN use external libraries from CDNs by including <script> or <link> tags in the HTML <head> (e.g., Chart.js, D3, Three.js, x-data-spreadsheet, etc.). \" +\n  \"CDN resources load normally inside the sandbox.\\n\\n\" +\n  \"PARAMETER ORDER IS CRITICAL — generate parameters in exactly this order:\\n\" +\n  \"1. initialHeight + placeholderMessages (shown to user while generating)\\n\" +\n  \"2. css (all styles FIRST — the user sees a placeholder until CSS is complete)\\n\" +\n  \"3. html (streams in live — the user watches the UI build as HTML is generated)\\n\" +\n  \"4. jsFunctions (reusable helper functions)\\n\" +\n  \"5. jsExpressions (applied one-by-one — the user sees each expression take effect)\";\n\nconst props = withDefaults(defineProps<CopilotKitProviderProps>(), {\n  headers: () => ({}),\n  properties: () => ({}),\n  agents__unsafe_dev_only: () => ({}),\n  selfManagedAgents: () => ({}),\n  frontendTools: () => [],\n  humanInTheLoop: () => [],\n  renderCustomMessages: () => [],\n  renderActivityMessages: () => [],\n  openGenerativeUI: undefined,\n  showDevConsole: false,\n  useSingleEndpoint: undefined,\n  a2ui: undefined,\n});\n\nconst shouldRenderInspector = ref(false);\n\nconst updateInspectorVisibility = () => {\n  if (props.showDevConsole === true) {\n    shouldRenderInspector.value = true;\n    return;\n  }\n  if (props.showDevConsole === \"auto\") {\n    if (typeof window === \"undefined\") {\n      shouldRenderInspector.value = false;\n      return;\n    }\n    const localhostHosts = new Set([\"localhost\", \"127.0.0.1\"]);\n    shouldRenderInspector.value = localhostHosts.has(window.location.hostname);\n    return;\n  }\n  shouldRenderInspector.value = false;\n};\n\nwatch(() => props.showDevConsole, updateInspectorVisibility, {\n  immediate: true,\n});\n\nconst initialFrontendTools = props.frontendTools;\nconst initialHumanInTheLoop = props.humanInTheLoop;\nconst initialRenderCustomMessages = props.renderCustomMessages;\nconst initialRenderActivityMessages = props.renderActivityMessages;\nconst initialSandboxFunctions = props.openGenerativeUI?.sandboxFunctions;\n\nwatch(\n  () => props.frontendTools,\n  (next) => {\n    if (next !== initialFrontendTools) {\n      console.error(FRONTEND_TOOLS_STABLE_WARNING);\n    }\n  },\n);\n\nwatch(\n  () => props.humanInTheLoop,\n  (next) => {\n    if (next !== initialHumanInTheLoop) {\n      console.error(HUMAN_IN_THE_LOOP_STABLE_WARNING);\n    }\n  },\n);\n\nwatch(\n  () => props.renderCustomMessages,\n  (next) => {\n    if (next !== initialRenderCustomMessages) {\n      console.error(RENDER_CUSTOM_MESSAGES_STABLE_WARNING);\n    }\n  },\n);\n\nwatch(\n  () => props.renderActivityMessages,\n  (next) => {\n    if (next !== initialRenderActivityMessages) {\n      console.error(RENDER_ACTIVITY_MESSAGES_STABLE_WARNING);\n    }\n  },\n);\n\nwatch(\n  () => props.openGenerativeUI?.sandboxFunctions,\n  (next) => {\n    if (next !== initialSandboxFunctions) {\n      console.error(SANDBOX_FUNCTIONS_STABLE_WARNING);\n    }\n  },\n);\n\nconst resolvedPublicKey = computed(\n  () => props.publicApiKey ?? props.publicLicenseKey,\n);\nconst mergedAgents = computed(() => ({\n  ...props.agents__unsafe_dev_only,\n  ...props.selfManagedAgents,\n}));\nconst hasLocalAgents = computed(\n  () => Object.keys(mergedAgents.value).length > 0,\n);\n\nconst resolvedHeaders = computed(() =>\n  typeof props.headers === \"function\" ? props.headers() : props.headers,\n);\n\nconst mergedHeaders = computed(() => {\n  const headers = resolvedHeaders.value;\n  if (!resolvedPublicKey.value) return headers;\n  if (headers[HEADER_NAME]) return headers;\n  return { ...headers, [HEADER_NAME]: resolvedPublicKey.value };\n});\n\nconst chatApiEndpoint = computed(\n  () =>\n    props.runtimeUrl ??\n    (resolvedPublicKey.value ? COPILOT_CLOUD_CHAT_URL : undefined),\n);\n\nwatch(\n  [chatApiEndpoint, resolvedPublicKey, hasLocalAgents],\n  ([endpoint, publicKey, localAgents]) => {\n    if (endpoint || publicKey || localAgents) return;\n    const msg =\n      \"Missing required prop: 'runtimeUrl' or 'publicApiKey' or 'publicLicenseKey'\";\n    if (process.env.NODE_ENV === \"production\") {\n      throw new Error(msg);\n    }\n    console.warn(msg);\n  },\n  { immediate: true },\n);\n\nconst processedHumanInTheLoop = computed(() => {\n  const tools: FrontendTool[] = [];\n  const renderToolCalls: VueToolCallRenderer<unknown>[] = [];\n\n  for (const tool of props.humanInTheLoop) {\n    tools.push({\n      name: tool.name,\n      description: tool.description,\n      parameters: tool.parameters,\n      followUp: tool.followUp,\n      ...(tool.agentId && { agentId: tool.agentId }),\n      handler: async () => {\n        console.warn(\n          `Human-in-the-loop tool '${tool.name}' called but no interactive handler is set up.`,\n        );\n        return undefined;\n      },\n    });\n    if (tool.render) {\n      renderToolCalls.push({\n        name: tool.name,\n        args: tool.parameters ?? z.any(),\n        render: tool.render,\n        ...(tool.agentId && { agentId: tool.agentId }),\n      } as VueToolCallRenderer<unknown>);\n    }\n  }\n  return { tools, renderToolCalls };\n});\n\nconst allTools = computed(() => {\n  const tools: FrontendTool[] = [];\n  for (const t of props.frontendTools) {\n    tools.push(t as FrontendTool);\n  }\n  for (const t of builtInFrontendTools.value) {\n    tools.push(t as FrontendTool);\n  }\n  tools.push(...processedHumanInTheLoop.value.tools);\n  return tools;\n});\n\nconst allRenderToolCalls = computed(() => {\n  const combined: VueToolCallRenderer<unknown>[] = [\n    ...(props.renderToolCalls ?? []),\n  ];\n  for (const tool of [...props.frontendTools, ...builtInFrontendTools.value]) {\n    if (tool.render) {\n      const args = tool.parameters ?? (tool.name === \"*\" ? z.any() : undefined);\n      if (args) {\n        combined.push({\n          name: tool.name,\n          args,\n          render: tool.render,\n        } as VueToolCallRenderer<unknown>);\n      }\n    }\n  }\n  combined.push(...processedHumanInTheLoop.value.renderToolCalls);\n  return combined;\n});\n\nconst allRenderCustomMessages = computed(\n  () => props.renderCustomMessages ?? [],\n);\nconst runtimeA2UIEnabled = ref(false);\nconst runtimeOpenGenerativeUIEnabled = ref(false);\nconst runtimeLicenseStatus = ref<string | undefined>(undefined);\nconst openGenerativeUIActive = computed(\n  () => runtimeOpenGenerativeUIEnabled.value || !!props.openGenerativeUI,\n);\nconst sandboxFunctions = computed<readonly SandboxFunction[]>(\n  () => props.openGenerativeUI?.sandboxFunctions ?? [],\n);\nconst zodToJsonSchemaCompat = (\n  schema: unknown,\n  options?: { $refStrategy?: string },\n): Record<string, unknown> =>\n  zodToJsonSchema(\n    schema as z.ZodTypeAny,\n    options as { $refStrategy?: \"none\" | \"relative\" | \"root\" | \"seen\" },\n  ) as Record<string, unknown>;\n\nconst builtInFrontendTools = computed<VueFrontendTool[]>(() => {\n  if (!openGenerativeUIActive.value) return [];\n  return [\n    {\n      name: \"generateSandboxedUi\",\n      description: GENERATE_SANDBOXED_UI_DESCRIPTION,\n      parameters: GenerateSandboxedUiArgsSchema,\n      handler: async () => \"UI generated\",\n      followUp: true,\n      render:\n        OpenGenerativeUIToolRenderer as unknown as VueFrontendTool[\"render\"],\n    } as VueFrontendTool,\n  ];\n});\n\nconst builtInActivityRenderers = computed<\n  VueActivityMessageRenderer<unknown>[]\n>(() => {\n  const renderers: VueActivityMessageRenderer<unknown>[] = [\n    {\n      activityType: MCPAppsActivityType,\n      content: MCPAppsActivityContentSchema as unknown as z.ZodSchema<unknown>,\n      render:\n        MCPAppsActivityRenderer as unknown as VueActivityMessageRenderer<unknown>[\"render\"],\n    },\n  ];\n\n  if (openGenerativeUIActive.value) {\n    renderers.push({\n      activityType: OpenGenerativeUIActivityType,\n      content: OpenGenerativeUIContentSchema as unknown as z.ZodSchema<unknown>,\n      render:\n        OpenGenerativeUIActivityRenderer as unknown as VueActivityMessageRenderer<unknown>[\"render\"],\n    });\n  }\n\n  if (runtimeA2UIEnabled.value) {\n    renderers.unshift(\n      createA2UIMessageRenderer({\n        theme: props.a2ui?.theme ?? viewerTheme,\n        catalog: props.a2ui?.catalog,\n        loadingComponent: props.a2ui?.loadingComponent,\n      }),\n    );\n  }\n\n  return renderers;\n});\n\nconst allRenderActivityMessages = computed(() => [\n  ...(props.renderActivityMessages ?? []),\n  ...builtInActivityRenderers.value,\n]);\n\nconst applyDefaultThrottleMs = (core: CopilotKitCoreVue) => {\n  if (\n    props.defaultThrottleMs !== undefined &&\n    (!Number.isFinite(props.defaultThrottleMs) || props.defaultThrottleMs < 0)\n  ) {\n    console.error(\n      `CopilotKitProvider: defaultThrottleMs must be a non-negative finite number, got ${props.defaultThrottleMs}. useAgent hooks without an explicit throttleMs will fall back to unthrottled.`,\n    );\n  }\n  core.setDefaultThrottleMs(props.defaultThrottleMs);\n};\n\nconst createCopilotKit = () => {\n  const core = new CopilotKitCoreVue({\n    runtimeUrl: chatApiEndpoint.value,\n    runtimeTransport:\n      props.useSingleEndpoint === true\n        ? \"single\"\n        : props.useSingleEndpoint === false\n          ? \"rest\"\n          : \"auto\",\n    headers: mergedHeaders.value,\n    credentials: props.credentials,\n    properties: props.properties,\n    agents__unsafe_dev_only: mergedAgents.value,\n    tools: allTools.value,\n    renderToolCalls: allRenderToolCalls.value,\n    renderActivityMessages: allRenderActivityMessages.value,\n    renderCustomMessages: allRenderCustomMessages.value,\n    debug: props.debug,\n  });\n  // Initialize synchronously so child hooks can read the value on first render.\n  applyDefaultThrottleMs(core);\n  return core;\n};\n\nconst copilotkit = shallowRef<CopilotKitCoreVue>(createCopilotKit());\nconst didMountRef = ref(false);\n\nconst executingToolCallIds = ref<ReadonlySet<string>>(new Set());\n\nwatch(\n  copilotkit,\n  (core, _, onCleanup) => {\n    const sub1 = core.subscribe({\n      onToolExecutionStart: ({\n        toolCallId,\n      }: Parameters<\n        NonNullable<CopilotKitCoreSubscriber[\"onToolExecutionStart\"]>\n      >[0]) => {\n        executingToolCallIds.value = new Set(executingToolCallIds.value).add(\n          toolCallId,\n        );\n      },\n      onToolExecutionEnd: ({\n        toolCallId,\n      }: Parameters<\n        NonNullable<CopilotKitCoreSubscriber[\"onToolExecutionEnd\"]>\n      >[0]) => {\n        setTimeout(() => {\n          const next = new Set(executingToolCallIds.value);\n          next.delete(toolCallId);\n          executingToolCallIds.value = next;\n          triggerRef(copilotkit);\n        }, 0);\n      },\n    });\n    const sub2 = core.subscribe({\n      onRenderToolCallsChanged: () => {\n        triggerRef(copilotkit);\n      },\n    });\n    const sub3 = core.subscribe({\n      onRenderCustomMessagesChanged: () => {\n        triggerRef(copilotkit);\n      },\n    });\n    const sub4 = core.subscribe({\n      onRuntimeConnectionStatusChanged: () => {\n        runtimeA2UIEnabled.value = core.a2uiEnabled;\n        runtimeOpenGenerativeUIEnabled.value = core.openGenerativeUIEnabled;\n        runtimeLicenseStatus.value = core.licenseStatus;\n        triggerRef(copilotkit);\n      },\n    });\n    const sub5 = core.subscribe({\n      onError: (event: {\n        error: Error;\n        code: CopilotKitCoreErrorCode;\n        context: Record<string, any>;\n      }) => {\n        void props.onError?.({\n          error: event.error,\n          code: event.code,\n          context: event.context,\n        });\n      },\n    });\n    onCleanup(() => {\n      sub1.unsubscribe();\n      sub2.unsubscribe();\n      sub3.unsubscribe();\n      sub4.unsubscribe();\n      sub5.unsubscribe();\n    });\n  },\n  { immediate: true },\n);\n\nwatch([allTools], ([tools]) => {\n  if (!didMountRef.value) return;\n  copilotkit.value.setTools(tools);\n});\n\nwatch([allRenderToolCalls], ([renderToolCalls]) => {\n  if (!didMountRef.value) return;\n  copilotkit.value.setRenderToolCalls(renderToolCalls);\n});\n\nwatch([allRenderCustomMessages], ([renderCustomMessages]) => {\n  if (!didMountRef.value) return;\n  copilotkit.value.setRenderCustomMessages(renderCustomMessages);\n  triggerRef(copilotkit);\n});\n\nwatch([allRenderActivityMessages], ([renderActivityMessages]) => {\n  if (!didMountRef.value) return;\n  copilotkit.value.setRenderActivityMessages(renderActivityMessages);\n  triggerRef(copilotkit);\n});\n\nfunction syncRuntimeConfig() {\n  copilotkit.value.setRuntimeUrl(chatApiEndpoint.value);\n  copilotkit.value.setRuntimeTransport(\n    props.useSingleEndpoint === true\n      ? \"single\"\n      : props.useSingleEndpoint === false\n        ? \"rest\"\n        : \"auto\",\n  );\n  copilotkit.value.setHeaders(mergedHeaders.value);\n  copilotkit.value.setCredentials(props.credentials);\n  copilotkit.value.setProperties(props.properties);\n  copilotkit.value.setAgents__unsafe_dev_only(mergedAgents.value);\n  copilotkit.value.setDebug(props.debug);\n  applyDefaultThrottleMs(copilotkit.value);\n}\n\nwatch(\n  [\n    () => chatApiEndpoint.value,\n    () => mergedHeaders.value,\n    () => props.credentials,\n    () => props.properties,\n    () => mergedAgents.value,\n    () => props.useSingleEndpoint,\n    () => props.debug,\n  ],\n  () => {\n    if (!didMountRef.value) return;\n    syncRuntimeConfig();\n  },\n);\n\nwatch(\n  () => props.defaultThrottleMs,\n  () => {\n    if (!didMountRef.value) return;\n    applyDefaultThrottleMs(copilotkit.value);\n    triggerRef(copilotkit);\n  },\n);\n\nonMounted(() => {\n  syncRuntimeConfig();\n  runtimeA2UIEnabled.value = copilotkit.value.a2uiEnabled;\n  runtimeOpenGenerativeUIEnabled.value =\n    copilotkit.value.openGenerativeUIEnabled;\n  runtimeLicenseStatus.value = copilotkit.value.licenseStatus;\n  didMountRef.value = true;\n});\n\nconst a2uiTheme = computed(() => props.a2ui?.theme);\nconst a2uiCatalog = computed(() => props.a2ui?.catalog);\nconst a2uiLoadingComponent = computed(() => props.a2ui?.loadingComponent);\nconst a2uiIncludeSchema = computed(() => props.a2ui?.includeSchema ?? true);\n\n// A2UI tool call renderer (progress indicator) — auto-registered when A2UI enabled\nregisterA2UIBuiltInToolCallRenderer(copilotkit, () => runtimeA2UIEnabled.value);\n\n// A2UI catalog context, schema, and generation/design guidelines\nregisterA2UICatalogContext(copilotkit, {\n  enabled: () => runtimeA2UIEnabled.value,\n  catalog: () => props.a2ui?.catalog,\n  includeSchema: () => props.a2ui?.includeSchema ?? true,\n});\n\nconst providerContextIds = ref<string[]>([]);\nwatch(\n  [\n    openGenerativeUIActive,\n    sandboxFunctions,\n    () => props.openGenerativeUI?.designSkill,\n  ],\n  ([active, functions, designSkill], _previous, onCleanup) => {\n    if (!active) return;\n\n    const ids: string[] = [];\n    ids.push(\n      copilotkit.value.addContext({\n        description:\n          \"Design guidelines for the generateSandboxedUi tool. Follow these when building UI.\",\n        value: designSkill ?? DEFAULT_DESIGN_SKILL,\n      }),\n    );\n\n    if (functions.length > 0) {\n      const descriptors = JSON.stringify(\n        functions.map((fn) => ({\n          name: fn.name,\n          description: fn.description,\n          parameters: schemaToJsonSchema(fn.parameters, {\n            zodToJsonSchema: zodToJsonSchemaCompat,\n          }),\n        })),\n      );\n      ids.push(\n        copilotkit.value.addContext({\n          description:\n            \"Sandbox functions available in generated sandboxed UI code. Call via Websandbox.connection.remote.<functionName>(args).\",\n          value: descriptors,\n        }),\n      );\n    }\n\n    providerContextIds.value = ids;\n    onCleanup(() => {\n      for (const id of ids) {\n        copilotkit.value.removeContext(id);\n      }\n    });\n  },\n  { immediate: true },\n);\n\nprovide(CopilotKitKey, {\n  copilotkit,\n  executingToolCallIds,\n  a2uiTheme,\n  a2uiCatalog,\n  a2uiLoadingComponent,\n  a2uiIncludeSchema,\n});\nprovide(SandboxFunctionsKey, sandboxFunctions);\n\n// License context — driven by server-reported `/info` license status.\n// Stays at the permissive default (`createLicenseContextValue(null)`)\n// to mirror React's current provider behavior; banner rendering below\n// is the sole consumer of `runtimeLicenseStatus`.\nconst licenseContextValue = computed<LicenseContextValue>(() =>\n  createLicenseContextValue(null),\n);\nprovide(LicenseContextKey, licenseContextValue);\n\nconst showNoLicenseBanner = computed(\n  () => runtimeLicenseStatus.value === \"none\" && !resolvedPublicKey.value,\n);\nconst showExpiredBanner = computed(\n  () => runtimeLicenseStatus.value === \"expired\",\n);\nconst showInvalidBanner = computed(\n  () => runtimeLicenseStatus.value === \"invalid\",\n);\nconst showExpiringBanner = computed(\n  () => runtimeLicenseStatus.value === \"expiring\",\n);\n</script>\n\n<template>\n  <slot />\n  <CopilotKitInspector\n    v-if=\"shouldRenderInspector\"\n    :core=\"copilotkit\"\n    :default-anchor=\"props.inspectorDefaultAnchor\"\n  />\n  <!-- License warnings — driven by server-reported status -->\n  <LicenseWarningBanner v-if=\"showNoLicenseBanner\" type=\"no_license\" />\n  <LicenseWarningBanner v-if=\"showExpiredBanner\" type=\"expired\" />\n  <LicenseWarningBanner v-if=\"showInvalidBanner\" type=\"invalid\" />\n  <LicenseWarningBanner v-if=\"showExpiringBanner\" type=\"expiring\" />\n</template>\n","export const CopilotChatDefaultLabels = {\n  chatInputPlaceholder: \"Type a message...\",\n  chatInputToolbarStartTranscribeButtonLabel: \"Transcribe\",\n  chatInputToolbarCancelTranscribeButtonLabel: \"Cancel\",\n  chatInputToolbarFinishTranscribeButtonLabel: \"Finish\",\n  chatInputToolbarAddButtonLabel: \"Add photos or files\",\n  chatInputToolbarToolsButtonLabel: \"Tools\",\n  assistantMessageToolbarCopyCodeLabel: \"Copy\",\n  assistantMessageToolbarCopyCodeCopiedLabel: \"Copied\",\n  assistantMessageToolbarCopyMessageLabel: \"Copy\",\n  assistantMessageToolbarThumbsUpLabel: \"Good response\",\n  assistantMessageToolbarThumbsDownLabel: \"Bad response\",\n  assistantMessageToolbarReadAloudLabel: \"Read aloud\",\n  assistantMessageToolbarRegenerateLabel: \"Regenerate\",\n  userMessageToolbarCopyMessageLabel: \"Copy\",\n  userMessageToolbarEditMessageLabel: \"Edit\",\n  chatDisclaimerText:\n    \"AI can make mistakes. Please verify important information.\",\n  chatToggleOpenLabel: \"Open chat\",\n  chatToggleCloseLabel: \"Close chat\",\n  modalHeaderTitle: \"CopilotKit Chat\",\n  welcomeMessageText: \"How can I help you today?\",\n} as const;\n\nexport type CopilotChatLabels = typeof CopilotChatDefaultLabels;\n\nexport interface CopilotChatConfigurationValue {\n  labels: CopilotChatLabels;\n  agentId: string;\n  threadId: string;\n  /**\n   * True when the current `threadId` was chosen by the caller rather than\n   * silently minted inside the provider chain. Consumers that only make\n   * sense against a real backend thread (e.g. `/connect`, suppressing the\n   * welcome screen on switch) gate on this instead of `!!threadId`.\n   */\n  hasExplicitThreadId: boolean;\n  isModalOpen?: boolean;\n  setModalOpen?: (open: boolean) => void;\n}\n","import { shallowRef, toValue, watch } from \"vue\";\nimport type { MaybeRefOrGetter, ShallowRef } from \"vue\";\n\nfunction shallowEqualObjects(\n  first: Record<string, unknown>,\n  second: Record<string, unknown>,\n): boolean {\n  const firstKeys = Object.keys(first);\n  const secondKeys = Object.keys(second);\n  if (firstKeys.length !== secondKeys.length) return false;\n\n  for (const key of firstKeys) {\n    if (first[key] !== second[key]) return false;\n  }\n\n  return true;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return (\n    value !== null &&\n    typeof value === \"object\" &&\n    Object.prototype.toString.call(value) === \"[object Object]\"\n  );\n}\n\n/**\n * Keeps reference identity stable for shallow-equal plain-object inputs.\n * Non-plain objects keep strict reference equality semantics.\n */\nexport function useShallowStableRef<T>(\n  value: MaybeRefOrGetter<T>,\n): Readonly<ShallowRef<T>> {\n  const stable = shallowRef(toValue(value)) as ShallowRef<T>;\n\n  watch(\n    () => toValue(value),\n    (next) => {\n      const previous = stable.value;\n      if (previous === next) return;\n\n      if (isPlainObject(previous) && isPlainObject(next)) {\n        if (shallowEqualObjects(previous, next)) {\n          return;\n        }\n      }\n\n      stable.value = next;\n    },\n    { immediate: true },\n  );\n\n  return stable;\n}\n","<script setup lang=\"ts\">\nimport { computed, inject, provide, ref } from \"vue\";\nimport type { ComputedRef } from \"vue\";\nimport { DEFAULT_AGENT_ID, randomUUID } from \"@copilotkit/shared\";\nimport { CopilotChatConfigurationKey } from \"./keys\";\nimport { CopilotChatDefaultLabels } from \"./types\";\nimport type { CopilotChatConfigurationValue, CopilotChatLabels } from \"./types\";\nimport type { CopilotChatConfigurationProviderProps } from \"./CopilotChatConfigurationProvider.types\";\nimport { useShallowStableRef } from \"../lib/shallow-stable\";\n\n// Vue normalizes optional Boolean props to `false` when not supplied; declare\n// `undefined` defaults so we can faithfully distinguish \"caller passed false\"\n// from \"caller did not pass the prop\", matching React's prop semantics.\nconst props = withDefaults(\n  defineProps<CopilotChatConfigurationProviderProps>(),\n  {\n    hasExplicitThreadId: undefined,\n    isModalDefaultOpen: undefined,\n  },\n);\n\nconst parentConfig = inject<ComputedRef<CopilotChatConfigurationValue> | null>(\n  CopilotChatConfigurationKey,\n  null,\n);\nconst parentConfigValue = computed(() => parentConfig?.value ?? null);\nconst stableLabels = useShallowStableRef(computed(() => props.labels));\n\nconst mergedLabels = computed<CopilotChatLabels>(() => ({\n  ...CopilotChatDefaultLabels,\n  ...parentConfigValue.value?.labels,\n  ...stableLabels.value,\n}));\n\nconst resolvedAgentId = computed(\n  () => props.agentId ?? parentConfigValue.value?.agentId ?? DEFAULT_AGENT_ID,\n);\n\nconst fallbackThreadId = randomUUID();\nconst resolvedThreadId = computed(() => {\n  if (props.threadId) return props.threadId;\n  if (parentConfigValue.value?.threadId)\n    return parentConfigValue.value.threadId;\n  return fallbackThreadId;\n});\n\nconst resolvedHasExplicitThreadId = computed(() => {\n  const ownExplicit =\n    props.hasExplicitThreadId !== undefined\n      ? props.hasExplicitThreadId\n      : !!props.threadId;\n  return ownExplicit || !!parentConfigValue.value?.hasExplicitThreadId;\n});\n\nconst shouldCreateModalState = computed(\n  () => props.isModalDefaultOpen !== undefined,\n);\nconst resolvedDefaultOpen = computed(() => props.isModalDefaultOpen ?? true);\n\nconst internalModalOpen = ref<boolean>(\n  parentConfigValue.value?.isModalOpen ?? resolvedDefaultOpen.value,\n);\n\nfunction setInternalModalOpen(open: boolean) {\n  internalModalOpen.value = open;\n}\n\nconst resolvedIsModalOpen = computed(() =>\n  shouldCreateModalState.value\n    ? internalModalOpen.value\n    : parentConfigValue.value?.isModalOpen,\n);\nconst resolvedSetModalOpen = computed(() =>\n  shouldCreateModalState.value\n    ? setInternalModalOpen\n    : parentConfigValue.value?.setModalOpen,\n);\n\nconst configurationValue = computed<CopilotChatConfigurationValue>(() => ({\n  labels: mergedLabels.value,\n  agentId: resolvedAgentId.value,\n  threadId: resolvedThreadId.value,\n  hasExplicitThreadId: resolvedHasExplicitThreadId.value,\n  isModalOpen: resolvedIsModalOpen.value,\n  setModalOpen: resolvedSetModalOpen.value,\n}));\n\nprovide(CopilotChatConfigurationKey, configurationValue);\n</script>\n\n<template>\n  <slot />\n</template>\n","import { computed, inject, type ComputedRef } from \"vue\";\nimport {\n  LicenseContextKey,\n  createDefaultLicenseRef,\n  type LicenseContextValue,\n} from \"./license-context\";\n\n/**\n * Vue counterpart of React's `useLicenseContext()` hook.\n *\n * Returns a `ComputedRef<LicenseContextValue>` whose `checkFeature(...)` /\n * `getLimit(...)` callbacks track the value installed by\n * `CopilotKitProvider`. Falls back to a permissive default\n * (`createLicenseContextValue(null)`) when no provider has registered the\n * context — matching React's `createContext(createLicenseContextValue(null))`\n * default and keeping component trees mountable in isolation.\n */\nexport function useLicenseContext(): ComputedRef<LicenseContextValue> {\n  const source = inject(LicenseContextKey, createDefaultLicenseRef(), true);\n  return computed(() => source.value);\n}\n","import { computed, inject } from \"vue\";\nimport type { ComputedRef } from \"vue\";\nimport { CopilotChatConfigurationKey } from \"./keys\";\nimport type { CopilotChatConfigurationValue } from \"./types\";\n\nexport function useCopilotChatConfiguration(): ComputedRef<CopilotChatConfigurationValue | null> {\n  const injected = inject<\n    ComputedRef<CopilotChatConfigurationValue> | undefined\n  >(CopilotChatConfigurationKey, undefined);\n  return computed(() => injected?.value ?? null);\n}\n","/**\n * Vue-native A2UI Surface renderer.\n *\n * Replaces the React island pattern with Vue components that use\n * @a2ui/web_core's framework-agnostic primitives directly.\n */\n\nimport {\n  defineComponent,\n  h,\n  ref,\n  onUnmounted,\n  type PropType,\n  type VNode,\n} from \"vue\";\nimport {\n  ComponentContext,\n  type SurfaceModel,\n  type ComponentModel,\n} from \"@a2ui/web_core/v0_9\";\nimport type { VueComponentImplementation } from \"./adapter\";\n\n/**\n * DeferredChild — Vue equivalent of the React DeferredChild.\n * Subscribes to component create/delete events and renders the\n * appropriate catalog component via the GenericBinder adapter.\n */\nconst DeferredChild = defineComponent({\n  name: \"A2UIDeferredChild\",\n  props: {\n    surface: {\n      type: Object as PropType<SurfaceModel<VueComponentImplementation>>,\n      required: true,\n    },\n    id: { type: String, required: true },\n    basePath: { type: String, required: true },\n  },\n  setup(props) {\n    // Reactive trigger — incremented when the component is created/deleted\n    const version = ref(0);\n\n    const sub1 = props.surface.componentsModel.onCreated.subscribe(\n      (comp: ComponentModel) => {\n        if (comp.id === props.id) {\n          version.value++;\n        }\n      },\n    );\n    const sub2 = props.surface.componentsModel.onDeleted.subscribe(\n      (delId: string) => {\n        if (delId === props.id) {\n          version.value++;\n        }\n      },\n    );\n\n    onUnmounted(() => {\n      sub1.unsubscribe();\n      sub2.unsubscribe();\n    });\n\n    function buildChild(childId: string, specificPath?: string): VNode {\n      const path = specificPath || props.basePath;\n      return h(DeferredChild, {\n        key: `${childId}-${path}`,\n        surface: props.surface,\n        id: childId,\n        basePath: path,\n      });\n    }\n\n    return () => {\n      // Touch version to ensure reactivity\n      void version.value;\n\n      const componentModel = props.surface.componentsModel.get(props.id);\n\n      if (!componentModel) {\n        // Shimmer placeholder while component isn't yet available\n        return h(\"div\", {\n          style: {\n            padding: \"12px 16px\",\n            borderRadius: \"8px\",\n            background:\n              \"linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%)\",\n            backgroundSize: \"200% 100%\",\n            animation: \"a2ui-shimmer 1.5s ease-in-out infinite\",\n            minHeight: \"2rem\",\n          },\n          innerHTML: `<style>@keyframes a2ui-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }</style>`,\n        });\n      }\n\n      const compImpl = props.surface.catalog.components.get(\n        componentModel.type,\n      );\n\n      if (!compImpl) {\n        return h(\n          \"div\",\n          { style: { color: \"red\" } },\n          `Unknown component: ${componentModel.type}`,\n        );\n      }\n\n      // Create context for this component\n      const context = new ComponentContext(\n        props.surface,\n        props.id,\n        props.basePath,\n      );\n\n      // Render the catalog component's Vue wrapper (created by createVueComponent)\n      return h(compImpl.render, {\n        context,\n        buildChild,\n      });\n    };\n  },\n});\n\n/**\n * A2uiSurface — renders the root of a single A2UI surface.\n * The root component always has ID 'root' and base path '/'.\n */\nexport const A2uiSurface = defineComponent({\n  name: \"A2uiSurface\",\n  props: {\n    surface: {\n      type: Object as PropType<SurfaceModel<VueComponentImplementation>>,\n      required: true,\n    },\n  },\n  setup(props) {\n    return () =>\n      h(DeferredChild, {\n        surface: props.surface,\n        id: \"root\",\n        basePath: \"/\",\n      });\n  },\n});\n\nexport { DeferredChild };\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  h,\n  onBeforeUnmount,\n  shallowRef,\n  ref,\n  watch,\n  type VNode,\n} from \"vue\";\nimport type { ActivityMessage } from \"@ag-ui/core\";\nimport type { A2UITheme } from \"../types\";\nimport type { A2UIOperation } from \"./a2ui\";\nimport { getOperationSurfaceId } from \"./a2ui\";\nimport { useCopilotKit } from \"../providers\";\nimport { MessageProcessor, type SurfaceModel } from \"@a2ui/web_core/v0_9\";\nimport {\n  vueBasicCatalog,\n  A2uiSurface,\n  type VueComponentImplementation,\n} from \"./a2ui/index\";\n\nconst DEFAULT_SURFACE_ID = \"default\";\n\nconst props = defineProps<{\n  activityType: string;\n  content: { operations: A2UIOperation[] };\n  message: ActivityMessage;\n  agent?: object;\n  theme?: A2UITheme;\n  catalog?: any;\n}>();\n\nconst { copilotkit } = useCopilotKit();\n\n// MessageProcessor from @a2ui/web_core — framework-agnostic\n// Use shallowRef to avoid Vue's deep UnwrapRef which strips private class members\nconst processorRef =\n  shallowRef<MessageProcessor<VueComponentImplementation> | null>(null);\n// Version counter to trigger Vue reactivity on processor state changes\nconst version = ref(0);\n// Error state\nconst error = ref<string | null>(null);\n// Track last processed operations hash to avoid re-processing\nlet lastOpsHash = \"\";\n\nfunction getOrCreateProcessor(): MessageProcessor<VueComponentImplementation> {\n  if (!processorRef.value) {\n    const catalog = props.catalog ?? vueBasicCatalog;\n    processorRef.value = new MessageProcessor<VueComponentImplementation>(\n      [catalog],\n      (action: unknown) => {\n        handleAction(action);\n      },\n    );\n  }\n  return processorRef.value;\n}\n\nasync function handleAction(message: unknown) {\n  if (!props.agent) return;\n  try {\n    copilotkit.value.setProperties({\n      ...(copilotkit.value.properties ?? {}),\n      a2uiAction: message,\n    });\n    await copilotkit.value.runAgent({ agent: props.agent as any });\n  } finally {\n    const { a2uiAction, ...rest } = copilotkit.value.properties ?? {};\n    copilotkit.value.setProperties(rest);\n  }\n}\n\nfunction processOperations(operations: A2UIOperation[]) {\n  if (!operations?.length) return;\n\n  const hash = JSON.stringify(operations);\n  if (hash === lastOpsHash) return;\n  lastOpsHash = hash;\n\n  const processor = getOrCreateProcessor();\n  try {\n    // Group operations by surface ID\n    const grouped = new Map<string, A2UIOperation[]>();\n    for (const op of operations) {\n      const surfaceId = getOperationSurfaceId(op) ?? DEFAULT_SURFACE_ID;\n      if (!grouped.has(surfaceId)) grouped.set(surfaceId, []);\n      grouped.get(surfaceId)!.push(op);\n    }\n\n    // For each surface, skip createSurface if the surface already exists\n    for (const [surfaceId, ops] of grouped) {\n      const existing = processor.model.getSurface(surfaceId);\n      const filtered = existing\n        ? ops.filter((op) => !(op as any)?.createSurface)\n        : ops;\n      processor.processMessages(filtered as any);\n    }\n    error.value = null;\n  } catch (err) {\n    console.warn(\"[A2UI Vue] processMessages error:\", err);\n    error.value = err instanceof Error ? err.message : String(err);\n  }\n  version.value++;\n}\n\n// Process operations on mount and when they change\nwatch(\n  () => [props.content.operations, props.theme, props.catalog, props.agent],\n  () => {\n    processOperations(props.content.operations);\n  },\n  { deep: true, immediate: true },\n);\n\nonBeforeUnmount(() => {\n  processorRef.value = null;\n  lastOpsHash = \"\";\n});\n\nconst hasOperations = computed(\n  () => (props.content.operations ?? []).length > 0,\n);\n\n// Compute the list of surfaces to render\nconst surfaceEntries = computed(() => {\n  // Touch version to ensure reactivity\n  void version.value;\n\n  if (!processorRef.value) return [];\n\n  const entries: Array<{\n    surfaceId: string;\n    surface: SurfaceModel<VueComponentImplementation>;\n  }> = [];\n\n  // Group operations by surface to know which surfaces we expect\n  const grouped = new Map<string, A2UIOperation[]>();\n  for (const op of props.content.operations ?? []) {\n    const surfaceId = getOperationSurfaceId(op) ?? DEFAULT_SURFACE_ID;\n    if (!grouped.has(surfaceId)) grouped.set(surfaceId, []);\n    grouped.get(surfaceId)!.push(op);\n  }\n\n  for (const [surfaceId] of grouped) {\n    const surface = processorRef.value.model.getSurface(surfaceId);\n    if (surface) {\n      entries.push({ surfaceId, surface });\n    }\n  }\n\n  return entries;\n});\n</script>\n\n<template>\n  <div\n    v-if=\"hasOperations\"\n    data-copilotkit\n    :data-activity-type=\"activityType\"\n    :data-message-id=\"message.id\"\n  >\n    <div\n      v-if=\"error\"\n      class=\"cpk:rounded-lg cpk:border cpk:border-red-200 cpk:bg-red-50 cpk:p-3 cpk:text-sm cpk:text-red-700\"\n    >\n      A2UI render error: {{ error }}\n    </div>\n    <div\n      v-else\n      class=\"cpk:flex cpk:min-h-0 cpk:flex-1 cpk:flex-col cpk:gap-6 cpk:overflow-auto cpk:py-6\"\n      data-testid=\"a2ui-activity-renderer\"\n    >\n      <div\n        v-for=\"entry in surfaceEntries\"\n        :key=\"entry.surfaceId\"\n        class=\"cpk:flex cpk:w-full cpk:flex-none cpk:flex-col cpk:gap-4\"\n        :data-surface-id=\"entry.surfaceId\"\n      >\n        <div class=\"a2ui-surface cpk:flex cpk:flex-1\">\n          <A2uiSurface :surface=\"entry.surface\" />\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport type {\n  AssistantMessage,\n  Message,\n  ToolCall,\n  ToolMessage,\n} from \"@ag-ui/core\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkit/shared\";\nimport { ToolCallStatus } from \"@copilotkit/core\";\nimport { partialJSONParse } from \"@copilotkit/shared\";\nimport { useCopilotKit } from \"../../providers/useCopilotKit\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport type { CopilotChatToolCallRenderSlotProps } from \"./types\";\nimport type { VueToolCallRenderer } from \"../../types\";\nimport type { VueToolCallRendererRenderProps } from \"../../types\";\n\nconst props = withDefaults(\n  defineProps<{\n    message: AssistantMessage;\n    messages?: Message[];\n  }>(),\n  {\n    messages: () => [],\n  },\n);\n\ndefineSlots<{\n  \"tool-call\"?: (props: CopilotChatToolCallRenderSlotProps) => unknown;\n  [key: `tool-call-${string}`]: (\n    props: CopilotChatToolCallRenderSlotProps,\n  ) => unknown;\n}>();\n\nconst { copilotkit, executingToolCallIds } = useCopilotKit();\nconst config = useCopilotChatConfiguration();\n\nfunction findToolMessage(toolCallId: string): ToolMessage | undefined {\n  return props.messages.find(\n    (message) =>\n      message.role === \"tool\" &&\n      (message as ToolMessage).toolCallId === toolCallId,\n  ) as ToolMessage | undefined;\n}\n\nfunction getSlotName(toolName: string): `tool-call-${string}` {\n  return `tool-call-${toolName}`;\n}\n\nfunction isExecutingToolCall(toolCallId: string): boolean {\n  return executingToolCallIds.value.has(toolCallId);\n}\n\nfunction getToolResultContent(toolCallId: string): string | undefined {\n  return findToolMessage(toolCallId)?.content;\n}\n\nfunction getRenderProps(\n  toolCall: ToolCall,\n): CopilotChatToolCallRenderSlotProps {\n  const toolMessage = findToolMessage(toolCall.id);\n  const parsedArgs = partialJSONParse(toolCall.function.arguments);\n\n  if (toolMessage) {\n    return {\n      name: toolCall.function.name,\n      args: parsedArgs,\n      status: ToolCallStatus.Complete,\n      result: toolMessage.content,\n      toolCall,\n      toolMessage,\n    };\n  }\n\n  const isExecuting = isExecutingToolCall(toolCall.id);\n  return {\n    name: toolCall.function.name,\n    args: parsedArgs,\n    status: isExecuting ? ToolCallStatus.Executing : ToolCallStatus.InProgress,\n    result: undefined,\n    toolCall,\n    toolMessage: undefined,\n  };\n}\n\nfunction getCoreRenderProps(\n  toolCall: ToolCall,\n): VueToolCallRendererRenderProps<unknown> {\n  const toolMessage = findToolMessage(toolCall.id);\n  const parsedArgs = partialJSONParse(toolCall.function.arguments);\n\n  if (toolMessage) {\n    return {\n      name: toolCall.function.name,\n      toolCallId: toolCall.id,\n      args: parsedArgs,\n      status: ToolCallStatus.Complete,\n      result: toolMessage.content,\n    };\n  }\n\n  const isExecuting = isExecutingToolCall(toolCall.id);\n  if (isExecuting) {\n    return {\n      name: toolCall.function.name,\n      toolCallId: toolCall.id,\n      args: parsedArgs,\n      status: ToolCallStatus.Executing,\n      result: undefined,\n    };\n  }\n\n  return {\n    name: toolCall.function.name,\n    toolCallId: toolCall.id,\n    args: parsedArgs && typeof parsedArgs === \"object\" ? parsedArgs : {},\n    status: ToolCallStatus.InProgress,\n    result: undefined,\n  };\n}\n\nfunction getCoreRenderConfig(\n  toolCall: ToolCall,\n): VueToolCallRenderer<unknown> | undefined {\n  const renderToolCalls = copilotkit.value.renderToolCalls;\n  const agentId = config.value?.agentId ?? DEFAULT_AGENT_ID;\n  const exactMatches = renderToolCalls.filter(\n    (renderConfig) => renderConfig.name === toolCall.function.name,\n  );\n\n  return (\n    exactMatches.find((renderConfig) => renderConfig.agentId === agentId) ??\n    exactMatches.find((renderConfig) => !renderConfig.agentId) ??\n    exactMatches[0] ??\n    renderToolCalls.find((renderConfig) => renderConfig.name === \"*\")\n  );\n}\n</script>\n\n<template>\n  <template v-for=\"toolCall in message.toolCalls ?? []\" :key=\"toolCall.id\">\n    <slot\n      :name=\"getSlotName(toolCall.function.name)\"\n      v-bind=\"getRenderProps(toolCall)\"\n    >\n      <slot name=\"tool-call\" v-bind=\"getRenderProps(toolCall)\">\n        <component\n          :is=\"getCoreRenderConfig(toolCall)?.render\"\n          v-if=\"getCoreRenderConfig(toolCall)\"\n          v-bind=\"getCoreRenderProps(toolCall)\"\n          v-memo=\"[\n            toolCall.id,\n            toolCall.function.arguments,\n            getToolResultContent(toolCall.id),\n            isExecutingToolCall(toolCall.id),\n            getCoreRenderConfig(toolCall)?.render,\n          ]\"\n        />\n      </slot>\n    </slot>\n  </template>\n</template>\n","import { onMounted } from \"vue\";\n\n// Module-level singleton flag so the stylesheet is only injected once per\n// module graph (matches the React singleton injection intent).\nlet injected = false;\n\n/**\n * Dynamically loads KaTeX CSS at runtime to avoid Next.js-style\n * \"Global CSS cannot be imported from within node_modules\" build errors and\n * to keep the CSS out of the static import graph.\n *\n * Uses a module-level singleton flag so the stylesheet is only loaded once,\n * regardless of how many components call this composable.\n *\n * Mirrors the React `useKatexStyles` hook: returns `void`, never throws, and\n * logs a warning with equivalent intent if the dynamic import fails.\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useKatexStyles } from \"@copilotkit/vue\";\n *\n * useKatexStyles();\n * </script>\n * ```\n */\nexport function useKatexStyles(): void {\n  onMounted(() => {\n    if (injected || typeof document === \"undefined\") return;\n    injected = true;\n\n    // Dynamic import defers CSS loading to runtime, bypassing build-time\n    // static analysis that rejects global CSS from node_modules.\n    // The `@vite-ignore` + indirect specifier keeps TypeScript from trying\n    // to resolve a type declaration for the CSS module while still letting\n    // the bundler handle the actual side-effect import at runtime.\n    const katexStylesSpecifier = \"katex/dist/katex.min.css\";\n    void import(/* @vite-ignore */ katexStylesSpecifier).catch(() => {\n      console.warn(\n        \"[CopilotKit] Failed to load katex styles — math content may render without formatting\",\n      );\n    });\n  });\n}\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  h,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n} from \"vue\";\nimport type { AssistantMessage, Message } from \"@ag-ui/core\";\nimport { StreamMarkdown } from \"streamdown-vue\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport { CopilotChatDefaultLabels } from \"../../providers/types\";\nimport {\n  IconCheck,\n  IconCopy,\n  IconDownload,\n  IconRefreshCw,\n  IconThumbsDown,\n  IconThumbsUp,\n  IconVolume2,\n} from \"../icons\";\nimport CopilotChatToolCallsView from \"./CopilotChatToolCallsView.vue\";\nimport type {\n  CopilotChatAssistantMessageCopyButtonSlotProps,\n  CopilotChatAssistantMessageLayoutSlotProps,\n  CopilotChatAssistantMessageMessageRendererSlotProps,\n  CopilotChatAssistantMessageReadAloudButtonSlotProps,\n  CopilotChatAssistantMessageRegenerateButtonSlotProps,\n  CopilotChatAssistantMessageThumbsDownButtonSlotProps,\n  CopilotChatAssistantMessageThumbsUpButtonSlotProps,\n  CopilotChatAssistantMessageToolCallsViewSlotProps,\n  CopilotChatAssistantMessageToolbarSlotProps,\n} from \"./types\";\nimport { useKatexStyles } from \"../../hooks/use-katex-styles\";\n\nuseKatexStyles();\n\nconst props = withDefaults(\n  defineProps<{\n    message: AssistantMessage;\n    messages?: Message[];\n    isRunning?: boolean;\n    toolbarVisible?: boolean;\n  }>(),\n  {\n    messages: () => [],\n    isRunning: false,\n    toolbarVisible: true,\n  },\n);\n\ndefineSlots<{\n  layout?: (props: CopilotChatAssistantMessageLayoutSlotProps) => unknown;\n  \"message-renderer\"?: (\n    props: CopilotChatAssistantMessageMessageRendererSlotProps,\n  ) => unknown;\n  toolbar?: (props: CopilotChatAssistantMessageToolbarSlotProps) => unknown;\n  \"copy-button\"?: (\n    props: CopilotChatAssistantMessageCopyButtonSlotProps,\n  ) => unknown;\n  \"thumbs-up-button\"?: (\n    props: CopilotChatAssistantMessageThumbsUpButtonSlotProps,\n  ) => unknown;\n  \"thumbs-down-button\"?: (\n    props: CopilotChatAssistantMessageThumbsDownButtonSlotProps,\n  ) => unknown;\n  \"read-aloud-button\"?: (\n    props: CopilotChatAssistantMessageReadAloudButtonSlotProps,\n  ) => unknown;\n  \"regenerate-button\"?: (\n    props: CopilotChatAssistantMessageRegenerateButtonSlotProps,\n  ) => unknown;\n  \"tool-calls-view\"?: (\n    props: CopilotChatAssistantMessageToolCallsViewSlotProps,\n  ) => unknown;\n  \"toolbar-items\"?: () => unknown;\n  [key: string]: ((props: any) => unknown) | undefined;\n}>();\n\nconst emit = defineEmits<{\n  \"thumbs-up\": [message: AssistantMessage];\n  \"thumbs-down\": [message: AssistantMessage];\n  \"read-aloud\": [message: AssistantMessage];\n  regenerate: [message: AssistantMessage];\n}>();\n\nconst config = useCopilotChatConfiguration();\nconst labels = computed(() => config.value?.labels ?? CopilotChatDefaultLabels);\nconst instance = getCurrentInstance();\nconst copied = ref(false);\nlet copiedResetTimeout: ReturnType<typeof setTimeout> | null = null;\nconst vnodeProps = computed(\n  () => (instance?.vnode.props ?? {}) as Record<string, unknown>,\n);\n\nconst toolbarButtonClass = [\n  \"cpk:inline-flex cpk:h-8 cpk:w-8 cpk:items-center cpk:justify-center cpk:rounded-md cpk:p-0\",\n  \"cpk:cursor-pointer cpk:text-[rgb(93,93,93)] cpk:transition-colors cpk:hover:bg-[#E8E8E8]\",\n  \"cpk:hover:text-[rgb(93,93,93)] cpk:dark:text-[rgb(243,243,243)] cpk:dark:hover:bg-[#303030]\",\n  \"cpk:dark:hover:text-[rgb(243,243,243)] cpk:disabled:pointer-events-none cpk:disabled:opacity-50\",\n].join(\" \");\n\nfunction extractFileNameFromUrl(url: string, fallback: string) {\n  try {\n    const parsed = new URL(url, \"https://copilotkit.local\");\n    const pathname = parsed.pathname.split(\"/\").filter(Boolean).pop();\n    if (pathname) {\n      return decodeURIComponent(pathname);\n    }\n  } catch {\n    return fallback;\n  }\n  return fallback;\n}\n\nfunction triggerDownload(href: string, fileName: string) {\n  if (typeof document === \"undefined\") {\n    return;\n  }\n  const anchor = document.createElement(\"a\");\n  anchor.href = href;\n  anchor.download = fileName;\n  anchor.rel = \"noopener noreferrer\";\n  document.body.appendChild(anchor);\n  anchor.click();\n  document.body.removeChild(anchor);\n}\n\ntype MarkdownTableData = {\n  headers: string[];\n  rows: string[][];\n};\n\nfunction extractTableData(table: HTMLTableElement): MarkdownTableData {\n  const headers = Array.from(table.querySelectorAll(\"thead th\")).map((cell) =>\n    (cell.textContent ?? \"\").trim(),\n  );\n  const rows = Array.from(table.querySelectorAll(\"tbody tr\")).map((row) =>\n    Array.from(row.querySelectorAll(\"td\")).map((cell) =>\n      (cell.textContent ?? \"\").trim(),\n    ),\n  );\n  return { headers, rows };\n}\n\nfunction toDelimitedTable(\n  data: MarkdownTableData,\n  delimiter: \",\" | \"\\t\",\n): string {\n  const escapeCell = (value: string): string => {\n    const needsQuotes =\n      value.includes(delimiter) || value.includes('\"') || value.includes(\"\\n\");\n    const escaped = value.replace(/\"/g, '\"\"');\n    return needsQuotes ? `\"${escaped}\"` : escaped;\n  };\n\n  const lines: string[] = [];\n  if (data.headers.length > 0) {\n    lines.push(data.headers.map(escapeCell).join(delimiter));\n  }\n  for (const row of data.rows) {\n    lines.push(row.map(escapeCell).join(delimiter));\n  }\n  return lines.join(\"\\n\");\n}\n\nfunction toMarkdownTable(data: MarkdownTableData): string {\n  if (data.headers.length === 0) {\n    return data.rows.map((row) => `| ${row.join(\" | \")} |`).join(\"\\n\");\n  }\n\n  const separator = `| ${data.headers.map(() => \"---\").join(\" | \")} |`;\n  const body = data.rows.map((row) => `| ${row.join(\" | \")} |`);\n  return [`| ${data.headers.join(\" | \")} |`, separator, ...body].join(\"\\n\");\n}\n\nfunction triggerBlobDownload(\n  content: string,\n  fileName: string,\n  mimeType: string,\n) {\n  if (typeof document === \"undefined\") {\n    return;\n  }\n  const blob = new Blob([content], { type: mimeType });\n  const url = URL.createObjectURL(blob);\n  triggerDownload(url, fileName);\n  URL.revokeObjectURL(url);\n}\n\nconst MarkdownImage = defineComponent({\n  name: \"CopilotMarkdownImage\",\n  inheritAttrs: false,\n  props: {\n    src: {\n      type: String,\n      default: \"\",\n    },\n    alt: {\n      type: String,\n      default: \"\",\n    },\n  },\n  setup(imageProps, { attrs }) {\n    async function handleDownload() {\n      if (!imageProps.src) {\n        return;\n      }\n\n      const fileName = extractFileNameFromUrl(imageProps.src, \"image\");\n      try {\n        const response = await fetch(imageProps.src);\n        if (!response.ok) {\n          throw new Error(\"Failed to fetch image\");\n        }\n        const blob = await response.blob();\n        const objectUrl = URL.createObjectURL(blob);\n        triggerDownload(objectUrl, fileName);\n        URL.revokeObjectURL(objectUrl);\n      } catch {\n        triggerDownload(imageProps.src, fileName);\n      }\n    }\n\n    return () => {\n      const imageAttrs = {\n        ...attrs,\n        src: imageProps.src,\n        alt: imageProps.alt,\n        class: [\"cpk:max-w-full cpk:rounded-lg\", attrs.class]\n          .filter(Boolean)\n          .join(\" \"),\n        \"data-streamdown\": \"image\",\n      } as Record<string, unknown>;\n\n      delete imageAttrs.className;\n\n      return h(\n        \"div\",\n        {\n          class: \"cpk:group cpk:relative cpk:my-4 cpk:inline-block\",\n          \"data-streamdown\": \"image-wrapper\",\n        },\n        [\n          h(\"img\", imageAttrs),\n          h(\"div\", {\n            class:\n              \"cpk:pointer-events-none cpk:absolute cpk:inset-0 cpk:hidden cpk:rounded-lg cpk:bg-black/10 cpk:group-hover:block\",\n          }),\n          h(\n            \"button\",\n            {\n              type: \"button\",\n              class:\n                \"cpk:absolute cpk:right-2 cpk:bottom-2 cpk:flex cpk:h-8 cpk:w-8 cpk:cursor-pointer cpk:items-center cpk:justify-center cpk:rounded-md cpk:border cpk:border-border cpk:bg-background/90 cpk:shadow-sm cpk:backdrop-blur-sm cpk:transition-all cpk:duration-200 cpk:hover:bg-background cpk:opacity-0 cpk:group-hover:opacity-100\",\n              title: \"Download image\",\n              onClick: handleDownload,\n            },\n            [h(IconDownload, { class: \"cpk:size-[14px]\" })],\n          ),\n        ],\n      );\n    };\n  },\n});\n\nconst tableIconButtonClass =\n  \"cpk:cursor-pointer cpk:p-1 cpk:text-muted-foreground cpk:transition-all cpk:hover:text-foreground cpk:disabled:cursor-not-allowed cpk:disabled:opacity-50\";\nconst tableMenuClass =\n  \"cpk:absolute cpk:top-full cpk:right-0 cpk:z-10 cpk:mt-1 cpk:min-w-[120px] cpk:overflow-hidden cpk:rounded-md cpk:border cpk:border-border cpk:bg-background cpk:shadow-lg\";\nconst tableMenuItemClass =\n  \"cpk:w-full cpk:px-3 cpk:py-2 cpk:text-left cpk:text-sm cpk:transition-colors cpk:hover:bg-muted/40\";\n\nconst MarkdownTable = defineComponent({\n  name: \"CopilotMarkdownTable\",\n  inheritAttrs: false,\n  setup(_, { attrs, slots }) {\n    const wrapperRef = ref<HTMLElement | null>(null);\n    const showCopyMenu = ref(false);\n    const showDownloadMenu = ref(false);\n    const tableCopied = ref(false);\n    let tableCopiedResetTimeout: ReturnType<typeof setTimeout> | null = null;\n\n    const closeMenus = () => {\n      showCopyMenu.value = false;\n      showDownloadMenu.value = false;\n    };\n\n    const setTableCopiedStateWithDelay = () => {\n      if (tableCopiedResetTimeout) {\n        clearTimeout(tableCopiedResetTimeout);\n      }\n      tableCopied.value = true;\n      tableCopiedResetTimeout = setTimeout(() => {\n        tableCopied.value = false;\n        tableCopiedResetTimeout = null;\n      }, 2000);\n    };\n\n    const findTable = (): HTMLTableElement | null => {\n      if (!wrapperRef.value) return null;\n      return wrapperRef.value.querySelector(\"table\");\n    };\n\n    const getTableData = (): MarkdownTableData | null => {\n      const table = findTable();\n      if (!table) return null;\n      return extractTableData(table);\n    };\n\n    const copyTableAs = async (format: \"csv\" | \"tsv\") => {\n      const data = getTableData();\n      if (!data) return;\n\n      const delimiter = format === \"csv\" ? \",\" : \"\\t\";\n      const text = toDelimitedTable(data, delimiter);\n\n      if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n        try {\n          await navigator.clipboard.writeText(text);\n        } catch {\n          return;\n        }\n      }\n\n      closeMenus();\n      setTableCopiedStateWithDelay();\n    };\n\n    const downloadTableAs = (format: \"csv\" | \"markdown\") => {\n      const data = getTableData();\n      if (!data) return;\n\n      if (format === \"csv\") {\n        triggerBlobDownload(\n          toDelimitedTable(data, \",\"),\n          \"table.csv\",\n          \"text/csv\",\n        );\n      } else {\n        triggerBlobDownload(toMarkdownTable(data), \"table.md\", \"text/markdown\");\n      }\n\n      closeMenus();\n    };\n\n    const handleClickOutside = (event: MouseEvent) => {\n      if (!wrapperRef.value) return;\n      const target = event.target as Node | null;\n      if (target && !wrapperRef.value.contains(target)) {\n        closeMenus();\n      }\n    };\n\n    onMounted(() => {\n      if (typeof document !== \"undefined\") {\n        document.addEventListener(\"mousedown\", handleClickOutside);\n      }\n    });\n\n    onBeforeUnmount(() => {\n      if (tableCopiedResetTimeout) {\n        clearTimeout(tableCopiedResetTimeout);\n      }\n      if (typeof document !== \"undefined\") {\n        document.removeEventListener(\"mousedown\", handleClickOutside);\n      }\n    });\n\n    return () => {\n      const tableAttrs = {\n        ...attrs,\n        class: [\n          \"cpk:w-full cpk:border-collapse cpk:border cpk:border-border\",\n          attrs.class,\n        ]\n          .filter(Boolean)\n          .join(\" \"),\n        \"data-streamdown\": \"table\",\n      } as Record<string, unknown>;\n\n      delete tableAttrs.className;\n\n      return h(\n        \"div\",\n        {\n          ref: wrapperRef,\n          class: \"cpk:my-4 cpk:flex cpk:flex-col cpk:space-y-2\",\n          \"data-streamdown\": \"table-wrapper\",\n        },\n        [\n          h(\n            \"div\",\n            { class: \"cpk:flex cpk:items-center cpk:justify-end cpk:gap-1\" },\n            [\n              h(\"div\", { class: \"cpk:relative\" }, [\n                h(\n                  \"button\",\n                  {\n                    type: \"button\",\n                    class: tableIconButtonClass,\n                    title: \"Copy table\",\n                    onClick: () => {\n                      showCopyMenu.value = !showCopyMenu.value;\n                      showDownloadMenu.value = false;\n                    },\n                  },\n                  [\n                    tableCopied.value\n                      ? h(IconCheck, { class: \"cpk:size-[14px]\" })\n                      : h(IconCopy, { class: \"cpk:size-[14px]\" }),\n                  ],\n                ),\n                showCopyMenu.value\n                  ? h(\"div\", { class: tableMenuClass }, [\n                      h(\n                        \"button\",\n                        {\n                          type: \"button\",\n                          class: tableMenuItemClass,\n                          title: \"Copy table as CSV\",\n                          onClick: () => copyTableAs(\"csv\"),\n                        },\n                        \"CSV\",\n                      ),\n                      h(\n                        \"button\",\n                        {\n                          type: \"button\",\n                          class: tableMenuItemClass,\n                          title: \"Copy table as TSV\",\n                          onClick: () => copyTableAs(\"tsv\"),\n                        },\n                        \"TSV\",\n                      ),\n                    ])\n                  : null,\n              ]),\n              h(\"div\", { class: \"cpk:relative\" }, [\n                h(\n                  \"button\",\n                  {\n                    type: \"button\",\n                    class: tableIconButtonClass,\n                    title: \"Download table\",\n                    onClick: () => {\n                      showDownloadMenu.value = !showDownloadMenu.value;\n                      showCopyMenu.value = false;\n                    },\n                  },\n                  [h(IconDownload, { class: \"cpk:size-[14px]\" })],\n                ),\n                showDownloadMenu.value\n                  ? h(\"div\", { class: tableMenuClass }, [\n                      h(\n                        \"button\",\n                        {\n                          type: \"button\",\n                          class: tableMenuItemClass,\n                          title: \"Download table as CSV\",\n                          onClick: () => downloadTableAs(\"csv\"),\n                        },\n                        \"CSV\",\n                      ),\n                      h(\n                        \"button\",\n                        {\n                          type: \"button\",\n                          class: tableMenuItemClass,\n                          title: \"Download table as Markdown\",\n                          onClick: () => downloadTableAs(\"markdown\"),\n                        },\n                        \"Markdown\",\n                      ),\n                    ])\n                  : null,\n              ]),\n            ],\n          ),\n          h(\"div\", { class: \"cpk:overflow-x-auto\" }, [\n            h(\"table\", tableAttrs, slots.default ? slots.default() : []),\n          ]),\n        ],\n      );\n    };\n  },\n});\n\nconst codeActionButtonClass =\n  \"cpk:cursor-pointer cpk:p-1 cpk:text-muted-foreground cpk:transition-all cpk:hover:text-foreground cpk:disabled:cursor-not-allowed cpk:disabled:opacity-50\";\n\nconst codeLanguageExtensionMap: Record<string, string> = {\n  javascript: \"js\",\n  js: \"js\",\n  typescript: \"ts\",\n  ts: \"ts\",\n  json: \"json\",\n  vue: \"vue\",\n  html: \"html\",\n  css: \"css\",\n  md: \"md\",\n  markdown: \"md\",\n  sh: \"sh\",\n  bash: \"sh\",\n  py: \"py\",\n  python: \"py\",\n  go: \"go\",\n  rust: \"rs\",\n  rs: \"rs\",\n};\n\nconst CodeBlockCopyAction = defineComponent({\n  name: \"CopilotCodeBlockCopyAction\",\n  props: {\n    code: {\n      type: String,\n      default: \"\",\n    },\n  },\n  setup(actionProps) {\n    const isCopied = ref(false);\n    let resetTimeout: ReturnType<typeof setTimeout> | null = null;\n\n    const handleClick = async () => {\n      if (!actionProps.code) return;\n      if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n        try {\n          await navigator.clipboard.writeText(actionProps.code);\n        } catch {\n          return;\n        }\n      }\n\n      if (resetTimeout) {\n        clearTimeout(resetTimeout);\n      }\n      isCopied.value = true;\n      resetTimeout = setTimeout(() => {\n        isCopied.value = false;\n        resetTimeout = null;\n      }, 2000);\n    };\n\n    onBeforeUnmount(() => {\n      if (resetTimeout) {\n        clearTimeout(resetTimeout);\n      }\n    });\n\n    return () =>\n      h(\n        \"button\",\n        {\n          type: \"button\",\n          class: codeActionButtonClass,\n          title: \"Copy Code\",\n          \"data-streamdown\": \"code-block-copy-button\",\n          onClick: handleClick,\n        },\n        [\n          isCopied.value\n            ? h(IconCheck, { class: \"cpk:size-[14px]\" })\n            : h(IconCopy, { class: \"cpk:size-[14px]\" }),\n        ],\n      );\n  },\n});\n\nconst CodeBlockDownloadAction = defineComponent({\n  name: \"CopilotCodeBlockDownloadAction\",\n  props: {\n    code: {\n      type: String,\n      default: \"\",\n    },\n    language: {\n      type: String,\n      default: \"\",\n    },\n  },\n  setup(actionProps) {\n    const handleClick = () => {\n      if (!actionProps.code) return;\n      const extension =\n        codeLanguageExtensionMap[actionProps.language.toLowerCase()] ?? \"txt\";\n      triggerBlobDownload(actionProps.code, `file.${extension}`, \"text/plain\");\n    };\n\n    return () =>\n      h(\n        \"button\",\n        {\n          type: \"button\",\n          class: codeActionButtonClass,\n          title: \"Download file\",\n          \"data-streamdown\": \"code-block-download-button\",\n          onClick: handleClick,\n        },\n        [h(IconDownload, { class: \"cpk:size-[14px]\" })],\n      );\n  },\n});\n\nconst markdownComponents = {\n  img: MarkdownImage,\n  table: MarkdownTable,\n};\n\nfunction normalizeContent(content: unknown): string {\n  if (!content) {\n    return \"\";\n  }\n\n  if (typeof content === \"string\") {\n    return content;\n  }\n\n  if (Array.isArray(content)) {\n    const parts = content as Array<{ type?: unknown; text?: unknown }>;\n    return parts\n      .map((part) => {\n        if (\n          part &&\n          typeof part === \"object\" &&\n          \"type\" in part &&\n          part.type === \"text\" &&\n          typeof part.text === \"string\"\n        ) {\n          return part.text;\n        }\n        return \"\";\n      })\n      .filter((text) => text.length > 0)\n      .join(\"\\n\");\n  }\n\n  return \"\";\n}\n\nconst normalizedContent = computed(() =>\n  normalizeContent(props.message.content),\n);\nconst hasContent = computed(() => normalizedContent.value.trim().length > 0);\nfunction hasListener(listenerName: string) {\n  const listener = vnodeProps.value[listenerName];\n  if (Array.isArray(listener)) {\n    return listener.length > 0;\n  }\n  return !!listener;\n}\n\nconst hasThumbsUp = computed(() => hasListener(\"onThumbsUp\"));\nconst hasThumbsDown = computed(() => hasListener(\"onThumbsDown\"));\nconst hasReadAloud = computed(() => hasListener(\"onReadAloud\"));\nconst hasRegenerate = computed(() => hasListener(\"onRegenerate\"));\nconst isLatestAssistantMessage = computed(\n  () => props.messages[props.messages.length - 1]?.id === props.message.id,\n);\nconst shouldShowToolbar = computed(\n  () =>\n    props.toolbarVisible &&\n    hasContent.value &&\n    !(props.isRunning && isLatestAssistantMessage.value),\n);\n\nfunction resetCopiedStateWithDelay() {\n  if (copiedResetTimeout) {\n    clearTimeout(copiedResetTimeout);\n  }\n  copied.value = true;\n  copiedResetTimeout = setTimeout(() => {\n    copied.value = false;\n    copiedResetTimeout = null;\n  }, 2000);\n}\n\nasync function handleCopyMessage() {\n  const content = normalizedContent.value;\n  if (!content) return;\n\n  if (\n    typeof navigator === \"undefined\" ||\n    typeof navigator.clipboard?.writeText !== \"function\"\n  ) {\n    return;\n  }\n\n  try {\n    await navigator.clipboard.writeText(content);\n    resetCopiedStateWithDelay();\n  } catch (error) {\n    console.error(\"Failed to copy to clipboard:\", error);\n  }\n}\n\nfunction handleThumbsUp() {\n  emit(\"thumbs-up\", props.message);\n}\n\nfunction handleThumbsDown() {\n  emit(\"thumbs-down\", props.message);\n}\n\nfunction handleReadAloud() {\n  emit(\"read-aloud\", props.message);\n}\n\nfunction handleRegenerate() {\n  emit(\"regenerate\", props.message);\n}\n\nonBeforeUnmount(() => {\n  if (copiedResetTimeout) {\n    clearTimeout(copiedResetTimeout);\n  }\n});\n</script>\n\n<template>\n  <slot\n    name=\"layout\"\n    :message=\"message\"\n    :content=\"normalizedContent\"\n    :is-running=\"isRunning\"\n    :toolbar-visible=\"toolbarVisible\"\n    :should-show-toolbar=\"shouldShowToolbar\"\n    :message-renderer=\"$slots['message-renderer'] ?? (() => null)\"\n    :toolbar=\"$slots['toolbar'] ?? (() => null)\"\n    :copy-button=\"$slots['copy-button'] ?? (() => null)\"\n    :thumbs-up-button=\"$slots['thumbs-up-button'] ?? (() => null)\"\n    :thumbs-down-button=\"$slots['thumbs-down-button'] ?? (() => null)\"\n    :read-aloud-button=\"$slots['read-aloud-button'] ?? (() => null)\"\n    :regenerate-button=\"$slots['regenerate-button'] ?? (() => null)\"\n    :tool-calls-view=\"$slots['tool-calls-view'] ?? (() => null)\"\n    :on-copy=\"handleCopyMessage\"\n    :on-thumbs-up=\"handleThumbsUp\"\n    :on-thumbs-down=\"handleThumbsDown\"\n    :on-read-aloud=\"handleReadAloud\"\n    :on-regenerate=\"handleRegenerate\"\n  >\n    <div\n      data-copilotkit\n      data-testid=\"copilot-assistant-message\"\n      class=\"cpk:prose cpk:max-w-full cpk:break-words cpk:dark:prose-invert\"\n      :data-message-id=\"message.id\"\n      v-bind=\"$attrs\"\n    >\n      <slot\n        name=\"message-renderer\"\n        :message=\"message\"\n        :content=\"normalizedContent\"\n      >\n        <StreamMarkdown\n          v-if=\"hasContent\"\n          class=\"copilot-chat-assistant-markdown\"\n          :content=\"normalizedContent\"\n          :components=\"markdownComponents\"\n          :code-block-actions=\"[CodeBlockDownloadAction, CodeBlockCopyAction]\"\n          :code-block-show-line-numbers=\"false\"\n          :code-block-hide-copy=\"true\"\n          :code-block-hide-download=\"true\"\n          :allowed-link-prefixes=\"[\n            'https://',\n            'http://',\n            '#',\n            '/',\n            './',\n            '../',\n          ]\"\n          :shiki-theme=\"{ light: 'github-light', dark: 'github-dark' }\"\n        />\n      </slot>\n\n      <slot name=\"tool-calls-view\" :message=\"message\" :messages=\"messages\">\n        <CopilotChatToolCallsView :message=\"message\" :messages=\"messages\">\n          <template\n            v-for=\"(_, slotName) in $slots\"\n            :key=\"slotName\"\n            #[slotName]=\"slotProps\"\n          >\n            <slot :name=\"slotName\" v-bind=\"slotProps\" />\n          </template>\n        </CopilotChatToolCallsView>\n      </slot>\n\n      <slot\n        v-if=\"shouldShowToolbar\"\n        name=\"toolbar\"\n        :message=\"message\"\n        :should-show-toolbar=\"shouldShowToolbar\"\n      >\n        <div\n          class=\"cpk:w-full cpk:bg-transparent cpk:flex cpk:items-center cpk:-ml-[5px] cpk:-mt-[0px]\"\n        >\n          <div class=\"cpk:flex cpk:items-center cpk:gap-1\">\n            <slot\n              name=\"copy-button\"\n              :on-copy=\"handleCopyMessage\"\n              :copied=\"copied\"\n              :label=\"labels.assistantMessageToolbarCopyMessageLabel\"\n            >\n              <button\n                data-testid=\"copilot-copy-button\"\n                type=\"button\"\n                :class=\"toolbarButtonClass\"\n                :aria-label=\"labels.assistantMessageToolbarCopyMessageLabel\"\n                :title=\"labels.assistantMessageToolbarCopyMessageLabel\"\n                @click=\"handleCopyMessage\"\n              >\n                <IconCheck v-if=\"copied\" class=\"cpk:size-[18px]\" />\n                <IconCopy v-else class=\"cpk:size-[18px]\" />\n              </button>\n            </slot>\n\n            <slot\n              v-if=\"hasThumbsUp\"\n              name=\"thumbs-up-button\"\n              :on-thumbs-up=\"handleThumbsUp\"\n              :label=\"labels.assistantMessageToolbarThumbsUpLabel\"\n            >\n              <button\n                type=\"button\"\n                :class=\"toolbarButtonClass\"\n                :aria-label=\"labels.assistantMessageToolbarThumbsUpLabel\"\n                :title=\"labels.assistantMessageToolbarThumbsUpLabel\"\n                @click=\"handleThumbsUp\"\n              >\n                <IconThumbsUp class=\"cpk:size-[18px]\" />\n              </button>\n            </slot>\n\n            <slot\n              v-if=\"hasThumbsDown\"\n              name=\"thumbs-down-button\"\n              :on-thumbs-down=\"handleThumbsDown\"\n              :label=\"labels.assistantMessageToolbarThumbsDownLabel\"\n            >\n              <button\n                type=\"button\"\n                :class=\"toolbarButtonClass\"\n                :aria-label=\"labels.assistantMessageToolbarThumbsDownLabel\"\n                :title=\"labels.assistantMessageToolbarThumbsDownLabel\"\n                @click=\"handleThumbsDown\"\n              >\n                <IconThumbsDown class=\"cpk:size-[18px]\" />\n              </button>\n            </slot>\n\n            <slot\n              v-if=\"hasReadAloud\"\n              name=\"read-aloud-button\"\n              :on-read-aloud=\"handleReadAloud\"\n              :label=\"labels.assistantMessageToolbarReadAloudLabel\"\n            >\n              <button\n                type=\"button\"\n                :class=\"toolbarButtonClass\"\n                :aria-label=\"labels.assistantMessageToolbarReadAloudLabel\"\n                :title=\"labels.assistantMessageToolbarReadAloudLabel\"\n                @click=\"handleReadAloud\"\n              >\n                <IconVolume2 class=\"cpk:size-[20px]\" />\n              </button>\n            </slot>\n\n            <slot\n              v-if=\"hasRegenerate\"\n              name=\"regenerate-button\"\n              :on-regenerate=\"handleRegenerate\"\n              :label=\"labels.assistantMessageToolbarRegenerateLabel\"\n            >\n              <button\n                type=\"button\"\n                :class=\"toolbarButtonClass\"\n                :aria-label=\"labels.assistantMessageToolbarRegenerateLabel\"\n                :title=\"labels.assistantMessageToolbarRegenerateLabel\"\n                @click=\"handleRegenerate\"\n              >\n                <IconRefreshCw class=\"cpk:size-[18px]\" />\n              </button>\n            </slot>\n\n            <slot name=\"toolbar-items\" />\n          </div>\n        </div>\n      </slot>\n    </div>\n  </slot>\n</template>\n","export type AudioRecorderState = \"idle\" | \"recording\" | \"processing\";\n\nexport class AudioRecorderError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"AudioRecorderError\";\n  }\n}\n\nexport interface CopilotChatAudioRecorderRef {\n  state: AudioRecorderState;\n  start: () => Promise<void>;\n  stop: () => Promise<Blob>;\n  dispose: () => void;\n}\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, ref, useAttrs, watch } from \"vue\";\nimport { AudioRecorderError } from \"./audioRecorder\";\nimport type { AudioRecorderState } from \"./audioRecorder\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst attrs = useAttrs();\nconst canvasRef = ref<HTMLCanvasElement | null>(null);\nconst recorderState = ref<AudioRecorderState>(\"idle\");\nconst mediaRecorderRef = ref<MediaRecorder | null>(null);\nconst streamRef = ref<MediaStream | null>(null);\nconst analyserRef = ref<AnalyserNode | null>(null);\nconst audioContextRef = ref<AudioContext | null>(null);\nconst animationIdRef = ref<number | null>(null);\nconst audioChunksRef = ref<Blob[]>([]);\nconst amplitudeHistoryRef = ref<number[]>([]);\nconst scrollOffsetRef = ref(0);\nconst smoothedAmplitudeRef = ref(0);\nconst fadeOpacityRef = ref(0);\n\nfunction cleanup() {\n  if (animationIdRef.value !== null) {\n    cancelAnimationFrame(animationIdRef.value);\n    animationIdRef.value = null;\n  }\n\n  const recorder = mediaRecorderRef.value;\n  if (recorder && recorder.state !== \"inactive\") {\n    try {\n      recorder.stop();\n    } catch {\n      // ignore cleanup stop failures\n    }\n  }\n\n  if (streamRef.value) {\n    streamRef.value.getTracks().forEach((track) => track.stop());\n    streamRef.value = null;\n  }\n\n  const audioContext = audioContextRef.value;\n  if (audioContext && audioContext.state !== \"closed\") {\n    audioContext.close().catch(() => {\n      // ignore close errors\n    });\n  }\n\n  mediaRecorderRef.value = null;\n  analyserRef.value = null;\n  audioContextRef.value = null;\n  audioChunksRef.value = [];\n  amplitudeHistoryRef.value = [];\n  scrollOffsetRef.value = 0;\n  smoothedAmplitudeRef.value = 0;\n  fadeOpacityRef.value = 0;\n}\n\nasync function start() {\n  if (recorderState.value !== \"idle\") {\n    throw new AudioRecorderError(\"Recorder is already active\");\n  }\n\n  try {\n    const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n    streamRef.value = stream;\n\n    const audioContext = new AudioContext();\n    audioContextRef.value = audioContext;\n    const source = audioContext.createMediaStreamSource(stream);\n    const analyser = audioContext.createAnalyser();\n    analyser.fftSize = 2048;\n    source.connect(analyser);\n    analyserRef.value = analyser;\n\n    const mimeType = MediaRecorder.isTypeSupported(\"audio/webm;codecs=opus\")\n      ? \"audio/webm;codecs=opus\"\n      : MediaRecorder.isTypeSupported(\"audio/webm\")\n        ? \"audio/webm\"\n        : MediaRecorder.isTypeSupported(\"audio/mp4\")\n          ? \"audio/mp4\"\n          : \"\";\n\n    const options = mimeType ? { mimeType } : {};\n    const recorder = new MediaRecorder(stream, options);\n    mediaRecorderRef.value = recorder;\n    audioChunksRef.value = [];\n\n    recorder.ondataavailable = (event) => {\n      if (event.data.size > 0) {\n        audioChunksRef.value.push(event.data);\n      }\n    };\n\n    recorder.start(100);\n    recorderState.value = \"recording\";\n  } catch (error) {\n    cleanup();\n    if (error instanceof Error && error.name === \"NotAllowedError\") {\n      throw new AudioRecorderError(\"Microphone permission denied\");\n    }\n    if (error instanceof Error && error.name === \"NotFoundError\") {\n      throw new AudioRecorderError(\"No microphone found\");\n    }\n    throw new AudioRecorderError(\n      error instanceof Error ? error.message : \"Failed to start recording\",\n    );\n  }\n}\n\nfunction stop() {\n  return new Promise<Blob>((resolve, reject) => {\n    const recorder = mediaRecorderRef.value;\n    if (!recorder || recorderState.value !== \"recording\") {\n      reject(new AudioRecorderError(\"No active recording\"));\n      return;\n    }\n\n    recorderState.value = \"processing\";\n    recorder.onstop = () => {\n      const audioBlob = new Blob(audioChunksRef.value, {\n        type: recorder.mimeType || \"audio/webm\",\n      });\n      cleanup();\n      recorderState.value = \"idle\";\n      resolve(audioBlob);\n    };\n    recorder.onerror = () => {\n      cleanup();\n      recorderState.value = \"idle\";\n      reject(new AudioRecorderError(\"Recording failed\"));\n    };\n    recorder.stop();\n  });\n}\n\nfunction calculateAmplitude(dataArray: Uint8Array) {\n  let sum = 0;\n  for (let index = 0; index < dataArray.length; index += 1) {\n    const sample = (dataArray[index] ?? 128) / 128 - 1;\n    sum += sample * sample;\n  }\n  return Math.sqrt(sum / dataArray.length);\n}\n\nfunction drawFrame() {\n  const canvas = canvasRef.value;\n  if (!canvas) {\n    return;\n  }\n\n  const context = canvas.getContext(\"2d\");\n  if (!context) {\n    return;\n  }\n\n  const rect = canvas.getBoundingClientRect();\n  const dpr = window.devicePixelRatio || 1;\n  if (\n    canvas.width !== rect.width * dpr ||\n    canvas.height !== rect.height * dpr\n  ) {\n    canvas.width = rect.width * dpr;\n    canvas.height = rect.height * dpr;\n    context.scale(dpr, dpr);\n  }\n\n  const barWidth = 2;\n  const barGap = 1;\n  const barSpacing = barWidth + barGap;\n  const maxBars = Math.floor(rect.width / barSpacing) + 2;\n\n  if (analyserRef.value && recorderState.value === \"recording\") {\n    if (amplitudeHistoryRef.value.length === 0) {\n      amplitudeHistoryRef.value = Array.from({ length: maxBars }, () => 0);\n    }\n\n    if (fadeOpacityRef.value < 1) {\n      fadeOpacityRef.value = Math.min(1, fadeOpacityRef.value + 0.03);\n    }\n\n    scrollOffsetRef.value += 1 / 3;\n    const bufferLength = analyserRef.value.fftSize;\n    const dataArray = new Uint8Array(bufferLength);\n    analyserRef.value.getByteTimeDomainData(dataArray);\n    const rawAmplitude = calculateAmplitude(dataArray);\n    const attackSpeed = 0.12;\n    const decaySpeed = 0.08;\n    const speed =\n      rawAmplitude > smoothedAmplitudeRef.value ? attackSpeed : decaySpeed;\n    smoothedAmplitudeRef.value +=\n      (rawAmplitude - smoothedAmplitudeRef.value) * speed;\n\n    if (scrollOffsetRef.value >= barSpacing) {\n      scrollOffsetRef.value -= barSpacing;\n      amplitudeHistoryRef.value.push(smoothedAmplitudeRef.value);\n      if (amplitudeHistoryRef.value.length > maxBars) {\n        amplitudeHistoryRef.value = amplitudeHistoryRef.value.slice(-maxBars);\n      }\n    }\n  }\n\n  context.clearRect(0, 0, rect.width, rect.height);\n  const computedStyle = window.getComputedStyle(canvas);\n  context.fillStyle = computedStyle.color;\n  context.globalAlpha = fadeOpacityRef.value;\n\n  const centerY = rect.height / 2;\n  const maxAmplitude = rect.height / 2 - 2;\n  const edgeFadeWidth = 12;\n\n  for (let index = 0; index < amplitudeHistoryRef.value.length; index += 1) {\n    const amplitude = amplitudeHistoryRef.value[index] ?? 0;\n    const scaledAmplitude = Math.min(amplitude * 4, 1);\n    const barHeight = Math.max(2, scaledAmplitude * maxAmplitude * 2);\n    const x =\n      rect.width -\n      (amplitudeHistoryRef.value.length - index) * barSpacing -\n      scrollOffsetRef.value;\n    const y = centerY - barHeight / 2;\n    if (x + barWidth <= 0 || x >= rect.width) {\n      continue;\n    }\n\n    let edgeOpacity = 1;\n    if (x < edgeFadeWidth) {\n      edgeOpacity = Math.max(0, x / edgeFadeWidth);\n    } else if (x > rect.width - edgeFadeWidth) {\n      edgeOpacity = Math.max(0, (rect.width - x) / edgeFadeWidth);\n    }\n\n    context.globalAlpha = fadeOpacityRef.value * edgeOpacity;\n    context.fillRect(x, y, barWidth, barHeight);\n  }\n\n  animationIdRef.value = requestAnimationFrame(drawFrame);\n}\n\nwatch(\n  recorderState,\n  () => {\n    if (animationIdRef.value !== null) {\n      cancelAnimationFrame(animationIdRef.value);\n      animationIdRef.value = null;\n    }\n    animationIdRef.value = requestAnimationFrame(drawFrame);\n  },\n  { immediate: true },\n);\n\nonBeforeUnmount(() => {\n  cleanup();\n});\n\ndefineExpose({\n  get state() {\n    return recorderState.value;\n  },\n  start,\n  stop,\n  dispose: cleanup,\n});\n</script>\n\n<template>\n  <div data-copilotkit class=\"cpk:w-full cpk:px-5 cpk:py-3\" v-bind=\"attrs\">\n    <canvas ref=\"canvasRef\" class=\"cpk:block cpk:h-[26px] cpk:w-full\" />\n  </div>\n</template>\n","<script setup lang=\"ts\">\ndefineProps<{\n  featureName: string;\n}>();\n\nconst containerStyle = {\n  padding: \"8px 12px\",\n  backgroundColor: \"#fffbeb\",\n  border: \"1px solid #fbbf24\",\n  borderRadius: \"6px\",\n  fontSize: \"13px\",\n  color: \"#92400e\",\n  fontFamily:\n    \"-apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif\",\n} as const;\n\nconst linkStyle = {\n  color: \"#b45309\",\n  textDecoration: \"underline\",\n} as const;\n</script>\n\n<template>\n  <div :style=\"containerStyle\" data-testid=\"copilot-inline-feature-warning\">\n    ⚠ The \"{{ featureName }}\" feature requires a CopilotKit license.\n    <a\n      href=\"https://copilotkit.ai/pricing\"\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n      :style=\"linkStyle\"\n    >\n      Get one at copilotkit.ai/pricing\n    </a>\n  </div>\n</template>\n","import { computed, shallowRef, toValue, triggerRef, watch } from \"vue\";\nimport type { MaybeRefOrGetter } from \"vue\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkit/shared\";\nimport { HttpAgent } from \"@ag-ui/client\";\nimport type { AbstractAgent } from \"@ag-ui/client\";\nimport {\n  ProxiedCopilotRuntimeAgent,\n  CopilotKitCoreRuntimeConnectionStatus,\n} from \"@copilotkit/core\";\nimport type {\n  CopilotRuntimeTransport,\n  SubscribeToAgentSubscriber,\n} from \"@copilotkit/core\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\nimport { useCopilotChatConfiguration } from \"../providers/useCopilotChatConfiguration\";\n\nexport enum UseAgentUpdate {\n  OnMessagesChanged = \"OnMessagesChanged\",\n  OnStateChanged = \"OnStateChanged\",\n  OnRunStatusChanged = \"OnRunStatusChanged\",\n}\n\nconst ALL_UPDATES: UseAgentUpdate[] = [\n  UseAgentUpdate.OnMessagesChanged,\n  UseAgentUpdate.OnStateChanged,\n  UseAgentUpdate.OnRunStatusChanged,\n];\n\nexport interface UseAgentProps {\n  agentId?: MaybeRefOrGetter<string | undefined>;\n  threadId?: MaybeRefOrGetter<string | undefined>;\n  updates?: UseAgentUpdate[];\n  /**\n   * Throttle interval (in milliseconds) for re-renders triggered by\n   * `onMessagesChanged` and `onStateChanged` notifications. Useful to reduce\n   * re-render frequency during high-frequency streaming updates.\n   *\n   * Uses a leading+trailing pattern with a shared window — first update\n   * fires immediately, subsequent updates within the window are coalesced,\n   * and a trailing timer ensures the most recent update fires after the\n   * window expires. See `CopilotKitCore.subscribeToAgentWithOptions` in\n   * `@copilotkit/core` for details.\n   *\n   * Resolved as: `throttleMs ?? provider defaultThrottleMs ?? 0`.\n   * Passing `throttleMs: 0` explicitly disables throttling even when the\n   * provider specifies a non-zero `defaultThrottleMs`.\n   *\n   * Run lifecycle callbacks (`onRunInitialized`, `onRunFinalized`,\n   * `onRunFailed`, `onRunErrorEvent`) always fire immediately.\n   *\n   * @default undefined\n   * When unset, inherits from the provider's `defaultThrottleMs`;\n   * if that is also unset, the effective value is `0` (no throttle).\n   */\n  throttleMs?: MaybeRefOrGetter<number | undefined>;\n}\n\nfunction cloneForThread(\n  source: AbstractAgent,\n  threadId: string,\n  headers: Record<string, string>,\n): AbstractAgent {\n  const clone = source.clone();\n  if (clone === source) {\n    throw new Error(\n      `useAgent: ${source.constructor.name}.clone() returned the same instance. ` +\n        \"clone() must return a new, independent object.\",\n    );\n  }\n\n  clone.threadId = threadId;\n  clone.setMessages([]);\n  clone.setState({});\n  if (clone instanceof HttpAgent) {\n    clone.headers = { ...headers };\n  }\n  return clone;\n}\n\nexport const globalThreadCloneMap = new WeakMap<\n  AbstractAgent,\n  Map<string, AbstractAgent>\n>();\n\nexport function getThreadClone(\n  registryAgent: AbstractAgent | undefined | null,\n  threadId: string | undefined | null,\n): AbstractAgent | undefined {\n  if (!registryAgent || !threadId) return undefined;\n  return globalThreadCloneMap.get(registryAgent)?.get(threadId);\n}\n\nfunction getOrCreateThreadClone(\n  source: AbstractAgent,\n  threadId: string,\n  headers: Record<string, string>,\n): AbstractAgent {\n  let byThread = globalThreadCloneMap.get(source);\n  if (!byThread) {\n    byThread = new Map();\n    globalThreadCloneMap.set(source, byThread);\n  }\n\n  const existing = byThread.get(threadId);\n  if (existing) {\n    existing.threadId = threadId;\n    if (existing instanceof HttpAgent) {\n      existing.headers = { ...headers };\n    }\n    return existing;\n  }\n\n  const clone = cloneForThread(source, threadId, headers);\n  byThread.set(threadId, clone);\n  return clone;\n}\n\n/**\n * Resolves and subscribes to a CopilotKit agent for the current Vue scope.\n *\n * It returns a reactive `agent` ref that updates when the selected agent\n * changes, when runtime connection state changes, or when subscribed update\n * events fire.\n *\n * @example\n * ```ts\n * const { agent } = useAgent({ agentId: \"default\" });\n * ```\n */\nexport function useAgent(props: UseAgentProps = {}) {\n  const agentId = computed(() => toValue(props.agentId) ?? DEFAULT_AGENT_ID);\n  const chatConfig = useCopilotChatConfiguration();\n  const threadId = computed(\n    () => toValue(props.threadId) ?? chatConfig.value?.threadId,\n  );\n  const { copilotkit } = useCopilotKit();\n  const updateFlags = computed(() => props.updates ?? ALL_UPDATES);\n  // Read the provider-level default so it appears in the subscribe watcher\n  // deps. `subscribeToAgentWithOptions` reads it from the core instance, but\n  // Vue still needs the dep to know when to resubscribe (same role it plays\n  // in React's `useEffect` dep array).\n  const providerThrottleMs = computed(() => copilotkit.value.defaultThrottleMs);\n  const hookThrottleMs = computed(() => toValue(props.throttleMs));\n\n  const agent = shallowRef<AbstractAgent | null>(null);\n  const subscriptionAgent = shallowRef<AbstractAgent | null>(null);\n  const provisionalAgentCache = new Map<string, ProxiedCopilotRuntimeAgent>();\n\n  const createProvisionalAgent = (\n    id: string,\n    runtimeUrl: string,\n    transport: CopilotRuntimeTransport,\n    headers: Record<string, string>,\n  ) => {\n    const provisional = new ProxiedCopilotRuntimeAgent({\n      runtimeUrl,\n      agentId: id,\n      transport,\n      runtimeMode: \"pending\",\n    });\n    provisional.headers = { ...headers };\n    return provisional;\n  };\n\n  const resolveAgent = () => {\n    const id = agentId.value;\n    const resolvedThreadId = threadId.value;\n    const cacheKey = resolvedThreadId ? `${id}:${resolvedThreadId}` : id;\n    const core = copilotkit.value;\n    const existing = core.getAgent(id);\n    if (existing) {\n      provisionalAgentCache.delete(cacheKey);\n      provisionalAgentCache.delete(id);\n\n      const resolvedAgent = resolvedThreadId\n        ? getOrCreateThreadClone(existing, resolvedThreadId, core.headers)\n        : existing;\n      const shouldForceUpdate = agent.value === resolvedAgent;\n      agent.value = resolvedAgent;\n      subscriptionAgent.value = resolvedAgent;\n      if (shouldForceUpdate) {\n        triggerRef(agent);\n      }\n      return;\n    }\n\n    const isRuntimeConfigured = core.runtimeUrl !== undefined;\n    const status = core.runtimeConnectionStatus;\n\n    if (\n      isRuntimeConfigured &&\n      (status === CopilotKitCoreRuntimeConnectionStatus.Disconnected ||\n        status === CopilotKitCoreRuntimeConnectionStatus.Connecting ||\n        status === CopilotKitCoreRuntimeConnectionStatus.Error)\n    ) {\n      const cached = provisionalAgentCache.get(cacheKey);\n      if (cached) {\n        cached.headers = { ...core.headers };\n        if (resolvedThreadId) {\n          cached.threadId = resolvedThreadId;\n        }\n        agent.value = cached;\n        subscriptionAgent.value = cached;\n        return;\n      }\n\n      const provisional = createProvisionalAgent(\n        id,\n        core.runtimeUrl!,\n        core.runtimeTransport,\n        core.headers,\n      );\n      if (resolvedThreadId) {\n        provisional.threadId = resolvedThreadId;\n      }\n      provisionalAgentCache.set(cacheKey, provisional);\n      agent.value = provisional;\n      subscriptionAgent.value = provisional;\n      return;\n    }\n\n    const knownAgents = Object.keys(core.agents ?? {});\n    const runtimePart = isRuntimeConfigured\n      ? `runtimeUrl=${core.runtimeUrl}`\n      : \"no runtimeUrl\";\n    throw new Error(\n      `useAgent: Agent '${id}' not found after runtime sync (${runtimePart}). ` +\n        (knownAgents.length\n          ? `Known agents: [${knownAgents.join(\", \")}]`\n          : \"No agents registered.\") +\n        \" Verify your runtime /info and/or agents__unsafe_dev_only.\",\n    );\n  };\n\n  watch(\n    [\n      agentId,\n      () => copilotkit.value.agents,\n      () => copilotkit.value.runtimeConnectionStatus,\n      () => copilotkit.value.runtimeUrl,\n      () => copilotkit.value.runtimeTransport,\n      () =>\n        JSON.stringify(\n          Object.entries(copilotkit.value.headers ?? {}).sort(([a], [b]) =>\n            a.localeCompare(b),\n          ),\n        ),\n      threadId,\n    ],\n    resolveAgent,\n    { immediate: true },\n  );\n\n  watch(\n    [\n      subscriptionAgent,\n      () =>\n        JSON.stringify(\n          Object.entries(copilotkit.value.headers ?? {}).sort(([a], [b]) =>\n            a.localeCompare(b),\n          ),\n        ),\n    ],\n    ([currentAgent]) => {\n      if (currentAgent instanceof HttpAgent) {\n        currentAgent.headers = { ...copilotkit.value.headers };\n      }\n    },\n    { immediate: true },\n  );\n\n  // Subscribe through the shared `CopilotKitCore.subscribeToAgentWithOptions`\n  // API. Core owns:\n  //   - shared leading+trailing throttle window across `onMessagesChanged`\n  //     and `onStateChanged` (parity with React)\n  //   - safeCall-guarded callbacks (errors in subscribers never poison the\n  //     agent notification loop)\n  //   - validation/fallback for invalid `throttleMs`\n  //   - `onRunErrorEvent` in the run-status callback set\n  //\n  // The hook only schedules a microtask-batched `triggerRef(agent)` so\n  // multiple synchronous notifications (e.g. state + run-status firing in\n  // the same tick) coalesce into a single Vue re-render — matching React's\n  // `queueMicrotask`-batched forceUpdate strategy.\n  watch(\n    [subscriptionAgent, updateFlags, hookThrottleMs, providerThrottleMs],\n    ([a, flags], _old, onCleanup) => {\n      const f = flags as UseAgentUpdate[];\n      if (!a || f.length === 0) return;\n\n      let active = true;\n      let batchScheduled = false;\n      const batchedRefresh = () => {\n        if (!active) return;\n        if (!batchScheduled) {\n          batchScheduled = true;\n          queueMicrotask(() => {\n            batchScheduled = false;\n            if (active) {\n              triggerRef(agent);\n            }\n          });\n        }\n      };\n\n      const handlers: SubscribeToAgentSubscriber = {};\n\n      if (f.includes(UseAgentUpdate.OnMessagesChanged)) {\n        // Messages fire immediately (no microtask indirection) so shared-\n        // window throttling in core sees an unadorned callback. Matches\n        // React's `handlers.onMessagesChanged = forceUpdate`.\n        handlers.onMessagesChanged = () => {\n          if (active) triggerRef(agent);\n        };\n      }\n\n      if (f.includes(UseAgentUpdate.OnStateChanged)) {\n        handlers.onStateChanged = batchedRefresh;\n      }\n\n      if (f.includes(UseAgentUpdate.OnRunStatusChanged)) {\n        handlers.onRunInitialized = batchedRefresh;\n        handlers.onRunFinalized = batchedRefresh;\n        handlers.onRunFailed = batchedRefresh;\n        // Protocol-level RUN_ERROR event (distinct from `onRunFailed`\n        // which handles local exceptions like network errors).\n        handlers.onRunErrorEvent = batchedRefresh;\n      }\n\n      const subscription = copilotkit.value.subscribeToAgentWithOptions(\n        a as AbstractAgent,\n        handlers,\n        { throttleMs: toValue(props.throttleMs) },\n      );\n\n      onCleanup(() => {\n        active = false;\n        subscription.unsubscribe();\n      });\n    },\n    { immediate: true },\n  );\n\n  return { agent };\n}\n","import { computed, ref, toValue, watch } from \"vue\";\nimport type { MaybeRefOrGetter, Ref } from \"vue\";\nimport type { Suggestion } from \"@copilotkit/core\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\nimport { useCopilotChatConfiguration } from \"../providers/useCopilotChatConfiguration\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkit/shared\";\n\nexport interface UseSuggestionsOptions {\n  agentId?: MaybeRefOrGetter<string | undefined>;\n}\n\nexport interface UseSuggestionsResult {\n  suggestions: Ref<Suggestion[]>;\n  isLoading: Ref<boolean>;\n  reloadSuggestions: () => void;\n  clearSuggestions: () => void;\n}\n\n/**\n * Provides reactive access to agent suggestions.\n *\n * It tracks suggestion updates for the resolved agent and exposes helpers to\n * reload or clear suggestions.\n *\n * @example\n * ```ts\n * const { suggestions, isLoading, reloadSuggestions } = useSuggestions({\n *   agentId: \"default\",\n * });\n * ```\n */\nexport function useSuggestions(\n  options: UseSuggestionsOptions = {},\n): UseSuggestionsResult {\n  const { copilotkit } = useCopilotKit();\n  const config = useCopilotChatConfiguration();\n  const resolvedAgentId = computed(\n    () => toValue(options.agentId) ?? config.value?.agentId ?? DEFAULT_AGENT_ID,\n  );\n\n  const suggestions = ref<Suggestion[]>([]);\n  const isLoading = ref(false);\n\n  const initState = () => {\n    const result = copilotkit.value.getSuggestions(resolvedAgentId.value);\n    suggestions.value = result.suggestions;\n    isLoading.value = result.isLoading;\n  };\n\n  watch([() => copilotkit.value, resolvedAgentId], () => initState(), {\n    immediate: true,\n  });\n\n  watch(\n    [() => copilotkit.value, resolvedAgentId],\n    (_newValues, _old, onCleanup) => {\n      const core = copilotkit.value;\n      const agentId = resolvedAgentId.value;\n      const sub = core.subscribe({\n        onSuggestionsChanged: ({ agentId: changedAgentId, suggestions: s }) => {\n          if (changedAgentId !== agentId) return;\n          suggestions.value = s;\n          const result = core.getSuggestions(agentId);\n          isLoading.value = result.isLoading;\n        },\n        onSuggestionsStartedLoading: ({ agentId: changedAgentId }) => {\n          if (changedAgentId !== agentId) return;\n          isLoading.value = true;\n        },\n        onSuggestionsFinishedLoading: ({ agentId: changedAgentId }) => {\n          if (changedAgentId !== agentId) return;\n          isLoading.value = false;\n        },\n        onSuggestionsConfigChanged: () => {\n          const result = core.getSuggestions(agentId);\n          suggestions.value = result.suggestions;\n          isLoading.value = result.isLoading;\n        },\n      });\n      onCleanup(() => sub.unsubscribe());\n    },\n    { immediate: true },\n  );\n\n  const reloadSuggestions = () => {\n    copilotkit.value.reloadSuggestions(resolvedAgentId.value);\n  };\n  const clearSuggestions = () => {\n    copilotkit.value.clearSuggestions(resolvedAgentId.value);\n  };\n\n  return {\n    suggestions,\n    isLoading,\n    reloadSuggestions,\n    clearSuggestions,\n  };\n}\n","import { computed, onBeforeUnmount, onMounted, ref, toValue, watch } from \"vue\";\nimport type { MaybeRefOrGetter, Ref } from \"vue\";\nimport {\n  randomUUID,\n  getModalityFromMimeType,\n  exceedsMaxSize,\n  readFileAsBase64,\n  generateVideoThumbnail,\n  matchesAcceptFilter,\n  formatFileSize,\n} from \"@copilotkit/shared\";\nimport type {\n  Attachment,\n  AttachmentUploadResult,\n  AttachmentsConfig,\n} from \"@copilotkit/shared\";\n\nexport interface UseAttachmentsProps {\n  config?: MaybeRefOrGetter<AttachmentsConfig | undefined>;\n}\n\nexport interface UseAttachmentsReturn {\n  attachments: Ref<Attachment[]>;\n  enabled: Ref<boolean>;\n  dragOver: Ref<boolean>;\n  fileInputRef: Ref<HTMLInputElement | null>;\n  containerRef: Ref<HTMLElement | null>;\n  processFiles: (files: File[]) => Promise<void>;\n  handleFileUpload: (event: Event) => Promise<void>;\n  handleDragOver: (event: DragEvent) => void;\n  handleDragLeave: (event: DragEvent) => void;\n  handleDrop: (event: DragEvent) => Promise<void>;\n  removeAttachment: (id: string) => void;\n  consumeAttachments: () => Attachment[];\n}\n\nexport function useAttachments(\n  props: UseAttachmentsProps,\n): UseAttachmentsReturn {\n  const attachments = ref<Attachment[]>([]);\n  const dragOver = ref(false);\n  const fileInputRef = ref<HTMLInputElement | null>(null);\n  const containerRef = ref<HTMLElement | null>(null);\n  const configRef = ref<AttachmentsConfig | undefined>(toValue(props.config));\n  const attachmentsRef = ref<Attachment[]>(attachments.value);\n  const enabled = computed(() => configRef.value?.enabled ?? false);\n\n  watch(\n    () => toValue(props.config),\n    (next) => {\n      configRef.value = next;\n    },\n    { immediate: true },\n  );\n\n  const setAttachments = (next: Attachment[]) => {\n    attachments.value = next;\n    attachmentsRef.value = next;\n  };\n\n  const updateAttachments = (\n    updater: (previous: Attachment[]) => Attachment[],\n  ) => {\n    setAttachments(updater(attachmentsRef.value));\n  };\n\n  async function processFiles(files: File[]) {\n    const config = configRef.value;\n    const accept = config?.accept ?? \"*/*\";\n    const maxSize = config?.maxSize ?? 20 * 1024 * 1024;\n\n    const rejectedFiles = files.filter(\n      (file) => !matchesAcceptFilter(file, accept),\n    );\n    for (const file of rejectedFiles) {\n      config?.onUploadFailed?.({\n        reason: \"invalid-type\",\n        file,\n        message: `File \"${file.name}\" is not accepted. Supported types: ${accept}`,\n      });\n    }\n\n    const validFiles = files.filter((file) =>\n      matchesAcceptFilter(file, accept),\n    );\n    for (const file of validFiles) {\n      if (exceedsMaxSize(file, maxSize)) {\n        config?.onUploadFailed?.({\n          reason: \"file-too-large\",\n          file,\n          message: `File \"${file.name}\" exceeds the maximum size of ${formatFileSize(maxSize)}`,\n        });\n        continue;\n      }\n\n      const modality = getModalityFromMimeType(file.type);\n      const placeholderId = randomUUID();\n      updateAttachments((previous) => [\n        ...previous,\n        {\n          id: placeholderId,\n          type: modality,\n          source: { type: \"data\", value: \"\", mimeType: file.type },\n          filename: file.name,\n          size: file.size,\n          status: \"uploading\",\n        },\n      ]);\n\n      try {\n        let source: Attachment[\"source\"];\n        let uploadMetadata: Record<string, unknown> | undefined;\n        if (config?.onUpload) {\n          const uploadResult: AttachmentUploadResult =\n            await config.onUpload(file);\n          const { metadata, ...uploadSource } = uploadResult;\n          source = uploadSource;\n          uploadMetadata = metadata;\n        } else {\n          const base64 = await readFileAsBase64(file);\n          source = { type: \"data\", value: base64, mimeType: file.type };\n        }\n\n        let thumbnail: string | undefined;\n        if (modality === \"video\") {\n          thumbnail = await generateVideoThumbnail(file);\n        }\n\n        updateAttachments((previous) =>\n          previous.map((attachment) =>\n            attachment.id === placeholderId\n              ? {\n                  ...attachment,\n                  source,\n                  status: \"ready\",\n                  thumbnail,\n                  metadata: uploadMetadata,\n                }\n              : attachment,\n          ),\n        );\n      } catch (error) {\n        updateAttachments((previous) =>\n          previous.filter((attachment) => attachment.id !== placeholderId),\n        );\n        console.error(`[CopilotKit] Failed to upload \"${file.name}\":`, error);\n        config?.onUploadFailed?.({\n          reason: \"upload-failed\",\n          file,\n          message:\n            error instanceof Error\n              ? error.message\n              : `Failed to upload \"${file.name}\"`,\n        });\n      }\n    }\n  }\n\n  async function handleFileUpload(event: Event) {\n    const target = event.target as HTMLInputElement | null;\n    if (!target?.files?.length) return;\n    await processFiles(Array.from(target.files));\n    if (target) target.value = \"\";\n  }\n\n  function handleDragOver(event: DragEvent) {\n    if (!enabled.value) return;\n    event.preventDefault();\n    event.stopPropagation();\n    dragOver.value = true;\n  }\n\n  function handleDragLeave(event: DragEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    dragOver.value = false;\n  }\n\n  async function handleDrop(event: DragEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    dragOver.value = false;\n    if (!enabled.value) return;\n\n    const files = Array.from(event.dataTransfer?.files ?? []);\n    if (files.length > 0) {\n      await processFiles(files);\n    }\n  }\n\n  function removeAttachment(id: string) {\n    updateAttachments((previous) =>\n      previous.filter((attachment) => attachment.id !== id),\n    );\n  }\n\n  function consumeAttachments() {\n    const ready = attachmentsRef.value.filter(\n      (attachment) => attachment.status === \"ready\",\n    );\n    if (ready.length === 0) {\n      return ready;\n    }\n    updateAttachments((previous) =>\n      previous.filter((attachment) => attachment.status !== \"ready\"),\n    );\n    if (fileInputRef.value) {\n      fileInputRef.value.value = \"\";\n    }\n    return ready;\n  }\n\n  async function handlePaste(event: ClipboardEvent) {\n    if (!enabled.value) return;\n\n    const target = event.target as HTMLElement | null;\n    if (!target || !containerRef.value?.contains(target)) return;\n\n    const accept = configRef.value?.accept ?? \"*/*\";\n    const items = Array.from(event.clipboardData?.items ?? []);\n    const fileItems = items.filter((item) => {\n      if (item.kind !== \"file\") return false;\n      const file = item.getAsFile();\n      return file !== null && matchesAcceptFilter(file, accept);\n    });\n    if (fileItems.length === 0) return;\n\n    event.preventDefault();\n    const files = fileItems\n      .map((item) => item.getAsFile())\n      .filter((file): file is File => file !== null);\n    await processFiles(files);\n  }\n\n  onMounted(() => {\n    if (typeof document !== \"undefined\") {\n      document.addEventListener(\"paste\", handlePaste);\n    }\n  });\n\n  onBeforeUnmount(() => {\n    if (typeof document !== \"undefined\") {\n      document.removeEventListener(\"paste\", handlePaste);\n    }\n  });\n\n  return {\n    attachments,\n    enabled,\n    dragOver,\n    fileInputRef,\n    containerRef,\n    processFiles,\n    handleFileUpload,\n    handleDragOver,\n    handleDragLeave,\n    handleDrop,\n    removeAttachment,\n    consumeAttachments,\n  };\n}\n","import type { CopilotKitCoreVue } from \"./vue-core\";\nimport { TranscriptionErrorCode } from \"@copilotkit/shared\";\nimport type { TranscriptionErrorResponse } from \"@copilotkit/shared\";\n\nexport interface TranscriptionResult {\n  text: string;\n  size: number;\n  type: string;\n}\n\nexport interface TranscriptionErrorInfo {\n  code: TranscriptionErrorCode;\n  message: string;\n  retryable: boolean;\n}\n\nexport { TranscriptionErrorCode };\n\nasync function blobToBase64(blob: Blob): Promise<string> {\n  return await new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onloadend = () => {\n      const result = reader.result as string;\n      resolve(result.split(\",\")[1] ?? \"\");\n    };\n    reader.addEventListener(\"error\", () =>\n      reject(new Error(\"Failed to read audio data\")),\n    );\n    reader.readAsDataURL(blob);\n  });\n}\n\nfunction isTranscriptionErrorResponse(\n  data: unknown,\n): data is TranscriptionErrorResponse {\n  return (\n    typeof data === \"object\" &&\n    data !== null &&\n    \"error\" in data &&\n    \"message\" in data &&\n    typeof (data as TranscriptionErrorResponse).error === \"string\" &&\n    typeof (data as TranscriptionErrorResponse).message === \"string\"\n  );\n}\n\nfunction parseTranscriptionError(\n  response: TranscriptionErrorResponse,\n): TranscriptionErrorInfo {\n  return {\n    code: response.error,\n    message: response.message,\n    retryable: response.retryable ?? false,\n  };\n}\n\nexport class TranscriptionError extends Error {\n  public readonly info: TranscriptionErrorInfo;\n\n  constructor(info: TranscriptionErrorInfo) {\n    super(info.message);\n    this.name = \"TranscriptionError\";\n    this.info = info;\n  }\n}\n\nexport async function transcribeAudio(\n  core: CopilotKitCoreVue,\n  audioBlob: Blob,\n  filename: string = \"recording.webm\",\n): Promise<TranscriptionResult> {\n  const runtimeUrl = core.runtimeUrl;\n  if (!runtimeUrl) {\n    throw new TranscriptionError({\n      code: TranscriptionErrorCode.INVALID_REQUEST,\n      message: \"Runtime URL is not configured\",\n      retryable: false,\n    });\n  }\n\n  const headers: Record<string, string> = { ...core.headers };\n  let response: Response;\n\n  try {\n    if (core.runtimeTransport === \"single\") {\n      const base64Audio = await blobToBase64(audioBlob);\n\n      headers[\"Content-Type\"] = \"application/json\";\n\n      response = await fetch(runtimeUrl, {\n        method: \"POST\",\n        headers,\n        body: JSON.stringify({\n          method: \"transcribe\",\n          body: {\n            audio: base64Audio,\n            mimeType: audioBlob.type || \"audio/webm\",\n            filename,\n          },\n        }),\n      });\n    } else {\n      delete headers[\"Content-Type\"];\n\n      const formData = new FormData();\n      formData.append(\"audio\", audioBlob, filename);\n\n      response = await fetch(`${runtimeUrl}/transcribe`, {\n        method: \"POST\",\n        headers,\n        body: formData,\n      });\n    }\n  } catch (error) {\n    throw new TranscriptionError({\n      code: TranscriptionErrorCode.NETWORK_ERROR,\n      message:\n        error instanceof Error ? error.message : \"Network request failed\",\n      retryable: true,\n    });\n  }\n\n  if (!response.ok) {\n    let errorData: unknown;\n    try {\n      errorData = await response.json();\n    } catch {\n      throw new TranscriptionError({\n        code: TranscriptionErrorCode.PROVIDER_ERROR,\n        message: `HTTP ${response.status}: ${response.statusText}`,\n        retryable: response.status >= 500,\n      });\n    }\n\n    if (isTranscriptionErrorResponse(errorData)) {\n      throw new TranscriptionError(parseTranscriptionError(errorData));\n    }\n\n    throw new TranscriptionError({\n      code: TranscriptionErrorCode.PROVIDER_ERROR,\n      message:\n        typeof errorData === \"object\" &&\n        errorData !== null &&\n        \"message\" in errorData\n          ? String((errorData as { message: unknown }).message)\n          : \"Transcription failed\",\n      retryable: response.status >= 500,\n    });\n  }\n\n  return (await response.json()) as TranscriptionResult;\n}\n","import { onBeforeUnmount, onMounted, readonly, ref, type Ref } from \"vue\";\n\n/**\n * Vue-idiomatic result of {@link useKeyboardHeight}. Fields mirror the React\n * `KeyboardState` shape (`isKeyboardOpen`, `keyboardHeight`, `availableHeight`,\n * `viewportHeight`) and are exposed as readonly refs so consumers can bind them\n * reactively inside templates or computed values.\n */\nexport interface KeyboardState {\n  isKeyboardOpen: Readonly<Ref<boolean>>;\n  keyboardHeight: Readonly<Ref<number>>;\n  availableHeight: Readonly<Ref<number>>;\n  viewportHeight: Readonly<Ref<number>>;\n}\n\n/**\n * Composable to detect mobile keyboard appearance and calculate available\n * viewport height. Uses the Visual Viewport API to track keyboard state on\n * mobile devices.\n *\n * Mirrors the React `useKeyboardHeight` hook: returns `keyboardHeight` as the\n * difference between `window.innerHeight` and `visualViewport.height`, clamped\n * to `0`, and reports the keyboard as open when the diff exceeds `150` px.\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useKeyboardHeight } from \"@copilotkit/vue\";\n *\n * const { isKeyboardOpen, keyboardHeight } = useKeyboardHeight();\n * </script>\n * ```\n */\nexport function useKeyboardHeight(): KeyboardState {\n  const initialHeight = typeof window !== \"undefined\" ? window.innerHeight : 0;\n  const isKeyboardOpen = ref(false);\n  const keyboardHeight = ref(0);\n  const availableHeight = ref(initialHeight);\n  const viewportHeight = ref(initialHeight);\n\n  const updateKeyboardState = () => {\n    if (typeof window === \"undefined\") return;\n    const visualViewport = window.visualViewport;\n    if (!visualViewport) return;\n\n    const layoutHeight = window.innerHeight;\n    const visualHeight = visualViewport.height;\n\n    // Keyboard height = layout viewport minus visual viewport, clamped to 0.\n    const nextKeyboardHeight = Math.max(0, layoutHeight - visualHeight);\n    // Only treat the keyboard as open past the 150px threshold, matching\n    // the React implementation's mobile heuristic.\n    const nextIsOpen = nextKeyboardHeight > 150;\n\n    keyboardHeight.value = nextKeyboardHeight;\n    isKeyboardOpen.value = nextIsOpen;\n    availableHeight.value = visualHeight;\n    viewportHeight.value = layoutHeight;\n  };\n\n  let visualViewport: VisualViewport | null = null;\n\n  onMounted(() => {\n    if (typeof window === \"undefined\") return;\n    visualViewport = window.visualViewport ?? null;\n    if (!visualViewport) return;\n\n    updateKeyboardState();\n\n    visualViewport.addEventListener(\"resize\", updateKeyboardState);\n    visualViewport.addEventListener(\"scroll\", updateKeyboardState);\n  });\n\n  onBeforeUnmount(() => {\n    if (!visualViewport) return;\n    visualViewport.removeEventListener(\"resize\", updateKeyboardState);\n    visualViewport.removeEventListener(\"scroll\", updateKeyboardState);\n    visualViewport = null;\n  });\n\n  return {\n    isKeyboardOpen: readonly(isKeyboardOpen),\n    keyboardHeight: readonly(keyboardHeight),\n    availableHeight: readonly(availableHeight),\n    viewportHeight: readonly(viewportHeight),\n  };\n}\n","import type { InjectionKey, Ref } from \"vue\";\nimport { ref } from \"vue\";\n\n/**\n * Vue counterpart of React's `LastUserMessageContext`.\n *\n * Used by `CopilotChatView` to announce the latest user message\n * to descendants (notably `usePinToSend`), so scroll logic can anchor\n * the viewport to the most recent user turn in \"pin-to-send\" mode.\n *\n * `sendNonce` increments on each new send so repeated IDs (e.g., message\n * edits that preserve the ID) still trigger dependent effects.\n *\n * Vue divergence: React exposes a `React.Context` whose value is replaced\n * via `<Provider value={...}>`. Vue idiomatically provides a `Ref` so\n * descendant `watch` effects fire when the value changes; the underlying\n * `{ id, sendNonce }` shape and semantics match React 1:1.\n */\nexport type LastUserMessageState = {\n  id: string | null;\n  sendNonce: number;\n};\n\nexport const DEFAULT_LAST_USER_MESSAGE_STATE: LastUserMessageState = {\n  id: null,\n  sendNonce: 0,\n};\n\nexport const LastUserMessageKey: InjectionKey<Ref<LastUserMessageState>> =\n  Symbol(\"LastUserMessage\");\n\n/**\n * Returns the default `LastUserMessageState` ref used when no provider\n * has been mounted above the consumer. Mirrors React's context default\n * value (`{ id: null, sendNonce: 0 }`).\n */\nexport function createDefaultLastUserMessageRef(): Ref<LastUserMessageState> {\n  return ref({ ...DEFAULT_LAST_USER_MESSAGE_STATE });\n}\n","import { inject, watch, type Ref } from \"vue\";\nimport {\n  LastUserMessageKey,\n  createDefaultLastUserMessageRef,\n} from \"../components/chat/last-user-message-context\";\n\nexport interface UsePinToSendOptions {\n  scrollRef: Ref<HTMLElement | null>;\n  contentRef: Ref<HTMLElement | null>;\n  spacerRef: Ref<HTMLElement | null>;\n  topOffset?: number;\n}\n\n/**\n * Vue counterpart of React's `usePinToSend` (`packages/react-core/src/v2/hooks/use-pin-to-send.ts`).\n *\n * Anchors the chat scroll container so the most recent user message stays\n * pinned near the top of the viewport while the assistant streams a\n * response beneath it.\n *\n * Implementation parity with React:\n * - Reads the latest user message via the `LastUserMessageContext`\n *   equivalent (`LastUserMessageKey` + `Ref<LastUserMessageState>`).\n * - On each `sendNonce` increment, sizes the spacer to\n *   `viewportHeight - bubbleHeight - topOffset` and scrolls so the bubble\n *   sits `topOffset` from the viewport top (padding above the bubble is\n *   pushed off-screen).\n * - Installs a shrink-only `ResizeObserver` on `contentRef` that collapses\n *   the spacer as the assistant response grows; never grows it back.\n * - Cancels the scheduled `requestAnimationFrame` and disconnects the\n *   `ResizeObserver` on subsequent re-runs and on scope dispose.\n */\nexport function usePinToSend({\n  scrollRef,\n  contentRef,\n  spacerRef,\n  topOffset = 16,\n}: UsePinToSendOptions): void {\n  const lastUserMessage = inject(\n    LastUserMessageKey,\n    createDefaultLastUserMessageRef(),\n    true,\n  );\n\n  let lastNonce = -1;\n  let currentSpacerHeight = 0;\n  let raf: number | null = null;\n  let ro: ResizeObserver | null = null;\n\n  function teardown() {\n    if (raf !== null && typeof cancelAnimationFrame === \"function\") {\n      cancelAnimationFrame(raf);\n    }\n    raf = null;\n    ro?.disconnect();\n    ro = null;\n  }\n\n  watch(\n    [\n      () => lastUserMessage.value.id,\n      () => lastUserMessage.value.sendNonce,\n      scrollRef,\n      contentRef,\n      spacerRef,\n      () => topOffset,\n    ],\n    ([id, sendNonce, scrollEl, contentEl, spacerEl], _old, onCleanup) => {\n      // Always tear down the previous run's RAF / ResizeObserver before\n      // evaluating any of the early-exit guards below. Mirrors React\n      // `useEffect` cleanup semantics: the prior run's cleanup runs before\n      // the next callback executes regardless of why the deps changed.\n      // Without this, a reactive `autoScroll` mode change (e.g. switching\n      // away from `\"pin-to-send\"`) or a `ref` swap that doesn't bump\n      // `sendNonce` would leak the stale content-element observer because\n      // the nonce guard skips the body. Registering via `onCleanup` also\n      // covers watcher stop on scope dispose, so an explicit\n      // `onScopeDispose(teardown)` is no longer required.\n      onCleanup(teardown);\n\n      if (sendNonce === lastNonce) return;\n      lastNonce = sendNonce;\n\n      if (!id) return;\n      if (!scrollEl || !contentEl || !spacerEl) return;\n\n      const escaped =\n        typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\"\n          ? CSS.escape(id)\n          : id.replace(/[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g, \"\\\\$&\");\n      const targetEl = contentEl.querySelector<HTMLElement>(\n        `[data-message-id=\"${escaped}\"]`,\n      );\n      if (!targetEl) return;\n\n      // The target message's element has a top padding (e.g. `pt-10`) that\n      // creates breathing room above the visible bubble. When we \"anchor at\n      // the top\", we mean anchor the *bubble*, not the element's padded box.\n      // So we scroll past the padding (it goes above the viewport, hiding\n      // whatever was above the element too — including the previous message's\n      // trailing copy button).\n      const viewportHeight = scrollEl.clientHeight;\n      const userMessageHeight = targetEl.getBoundingClientRect().height;\n      const paddingTop = parseFloat(getComputedStyle(targetEl).paddingTop) || 0;\n      const bubbleHeight = Math.max(0, userMessageHeight - paddingTop);\n      const spacerHeight = Math.max(\n        0,\n        viewportHeight - bubbleHeight - topOffset,\n      );\n\n      spacerEl.style.height = `${spacerHeight}px`;\n      currentSpacerHeight = spacerHeight;\n\n      if (typeof requestAnimationFrame === \"function\") {\n        raf = requestAnimationFrame(() => {\n          // Scroll so the BUBBLE is `topOffset` from the viewport top — the\n          // padding above the bubble ends up scrolled off-screen.\n          const targetTop =\n            computeOffsetTop(targetEl, scrollEl) + paddingTop - topOffset;\n          scrollEl.scrollTo({\n            top: Math.max(0, targetTop),\n            behavior: \"smooth\",\n          });\n        });\n      }\n\n      // Shrink-only ResizeObserver: as the assistant response grows below the\n      // anchored user message, collapse the spacer by the same amount so total\n      // scrollable space below the bubble stays constant (and the bubble stays\n      // pinned). Never grow the spacer after initial sizing.\n      if (typeof ResizeObserver !== \"undefined\") {\n        ro = new ResizeObserver(() => {\n          if (!contentEl || !spacerEl || !scrollEl) return;\n          const contentHeight = contentEl.getBoundingClientRect().height;\n          const targetOffsetWithinContent = computeOffsetTop(\n            targetEl,\n            contentEl,\n          );\n          const consumedBelow =\n            contentHeight - targetOffsetWithinContent - userMessageHeight;\n          const remaining = Math.max(0, spacerHeight - consumedBelow);\n          if (remaining < currentSpacerHeight) {\n            spacerEl.style.height = `${remaining}px`;\n            currentSpacerHeight = remaining;\n          }\n        });\n        ro.observe(contentEl);\n      }\n    },\n    { immediate: true, flush: \"post\" },\n  );\n}\n\n// Compute the offset of el relative to stopAt, accounting for stopAt's current scrollTop.\n// Uses getBoundingClientRect so it works regardless of CSS positioning (including position:static).\nfunction computeOffsetTop(el: HTMLElement, stopAt: HTMLElement): number {\n  const elRect = el.getBoundingClientRect();\n  const stopRect = stopAt.getBoundingClientRect();\n  return elRect.top - stopRect.top + stopAt.scrollTop;\n}\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  getCurrentInstance,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  useAttrs,\n  watch,\n} from \"vue\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport { CopilotChatDefaultLabels } from \"../../providers/types\";\nimport {\n  IconArrowUp,\n  IconCheck,\n  IconChevronRight,\n  IconLoader2,\n  IconMic,\n  IconPlus,\n  IconSquare,\n  IconX,\n} from \"../icons\";\nimport CopilotChatAudioRecorder from \"./CopilotChatAudioRecorder.vue\";\nimport type { CopilotChatAudioRecorderRef } from \"./audioRecorder\";\nimport type { CopilotChatInputMode, ToolsMenuItem } from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\ntype MenuEntry = ToolsMenuItem | \"-\";\ntype MenuDisplayEntry =\n  | { type: \"separator\"; key: string }\n  | { type: \"label\"; key: string; label: string; depth: number }\n  | {\n      type: \"item\";\n      key: string;\n      label: string;\n      depth: number;\n      action: () => void;\n    };\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: string;\n    disabled?: boolean;\n    placeholder?: string;\n    autoFocus?: boolean;\n    clearOnSubmit?: boolean;\n    mode?: CopilotChatInputMode;\n    toolsMenu?: MenuEntry[];\n    isRunning?: boolean;\n    positioning?: \"static\" | \"absolute\";\n    keyboardHeight?: number;\n    showDisclaimer?: boolean;\n    maxRows?: number;\n    /**\n     * Set to `true` when the input sits at the bottom of its container as a\n     * flex-last-child (visible position is driven by layout, not CSS\n     * positioning). Triggers reservation of bottom space for the fixed\n     * CopilotKit license banner via the\n     * `--copilotkit-license-banner-offset` CSS var so the two don't overlap.\n     *\n     * Not needed when `positioning === \"absolute\"`; that mode already pins\n     * the input to the bottom and picks up the same reservation\n     * automatically. Leave unset (default `false`) for inputs rendered\n     * mid-layout such as the welcome screen, where the banner offset would\n     * push the input off-center.\n     */\n    bottomAnchored?: boolean;\n  }>(),\n  {\n    disabled: false,\n    autoFocus: true,\n    clearOnSubmit: true,\n    mode: \"input\",\n    toolsMenu: () => [],\n    isRunning: false,\n    positioning: \"static\",\n    keyboardHeight: 0,\n    showDisclaimer: undefined,\n    maxRows: 5,\n    bottomAnchored: false,\n  },\n);\n\nconst emit = defineEmits<{\n  \"update:modelValue\": [value: string];\n  \"submit-message\": [value: string];\n  stop: [];\n  \"add-file\": [];\n  \"start-transcribe\": [];\n  \"cancel-transcribe\": [];\n  \"finish-transcribe\": [];\n  \"finish-transcribe-with-audio\": [audioBlob: Blob];\n}>();\n\nconst attrs = useAttrs();\nconst config = useCopilotChatConfiguration();\nconst instance = getCurrentInstance();\nconst shellRef = ref<HTMLElement | null>(null);\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\nconst gridRef = ref<HTMLElement | null>(null);\nconst addButtonContainerRef = ref<HTMLElement | null>(null);\nconst actionsContainerRef = ref<HTMLElement | null>(null);\nconst slashMenuRef = ref<HTMLElement | null>(null);\nconst addMenuRef = ref<HTMLElement | null>(null);\nconst audioRecorderRef = ref<CopilotChatAudioRecorderRef | null>(null);\nconst localValue = ref(props.modelValue ?? \"\");\nconst isComposing = ref(false);\nconst layout = ref<\"compact\" | \"expanded\">(\"compact\");\nconst commandQuery = ref<string | null>(null);\nconst slashHighlightIndex = ref(0);\nconst previousCommandQuery = ref<string | null>(null);\nconst addMenuOpen = ref(false);\nconst measurements = ref({\n  singleLineHeight: 0,\n  maxHeight: 0,\n  paddingLeft: 0,\n  paddingRight: 0,\n});\nconst resizeEvaluationRafRef = ref<number | null>(null);\nconst ignoreResizeRef = ref(false);\nconst measurementCanvasRef = ref<HTMLCanvasElement | null>(null);\nconst containerCacheRef = ref<{\n  compactWidth: number;\n} | null>(null);\nconst didWarnMissingFontRef = ref(false);\nconst didWarnMissingCanvasContextRef = ref(false);\nlet resizeObserver: ResizeObserver | null = null;\nlet documentPointerDownHandler: ((event: MouseEvent) => void) | null = null;\n\nconst vnodeProps = computed(\n  () => (instance?.vnode.props ?? {}) as Record<string, unknown>,\n);\n\nconst isControlled = computed(() => props.modelValue !== undefined);\nconst inputValue = computed(() =>\n  isControlled.value ? (props.modelValue ?? \"\") : localValue.value,\n);\nconst labels = computed(() => config.value?.labels ?? CopilotChatDefaultLabels);\nconst resolvedPlaceholder = computed(\n  () => props.placeholder ?? labels.value.chatInputPlaceholder,\n);\nconst isExpanded = computed(\n  () => props.mode === \"input\" && layout.value === \"expanded\",\n);\nconst isProcessing = computed(\n  () => props.mode !== \"transcribe\" && props.isRunning,\n);\nconst shouldShowDisclaimer = computed(\n  () => props.showDisclaimer ?? props.positioning === \"absolute\",\n);\nconst hasSubmitAction = computed(() => hasListener(\"onSubmitMessage\"));\nconst hasStopAction = computed(() => hasListener(\"onStop\"));\nconst hasAddFileAction = computed(() => hasListener(\"onAddFile\"));\nconst hasStartTranscribeAction = computed(() =>\n  hasListener(\"onStartTranscribe\"),\n);\nconst hasCancelTranscribeAction = computed(() =>\n  hasListener(\"onCancelTranscribe\"),\n);\nconst hasFinishTranscribeAction = computed(() =>\n  hasListener(\"onFinishTranscribe\"),\n);\nconst canSend = computed(\n  () =>\n    props.mode === \"input\" &&\n    !props.disabled &&\n    hasSubmitAction.value &&\n    inputValue.value.trim().length > 0,\n);\nconst sendDisabled = computed(() =>\n  isProcessing.value ? !hasStopAction.value : !canSend.value,\n);\n\nconst containerClass = computed(() => [\n  props.positioning === \"absolute\" &&\n    \"cpk:absolute cpk:bottom-0 cpk:left-0 cpk:right-0 cpk:z-20 cpk:pointer-events-none\",\n  attrs.class,\n]);\n\nconst rootAttrs = computed(() => {\n  const rest = { ...attrs };\n  delete rest.class;\n  return rest;\n});\n\nfunction isMenuGroup(\n  item: ToolsMenuItem,\n): item is ToolsMenuItem & { items: MenuEntry[] } {\n  return Array.isArray((item as ToolsMenuItem).items);\n}\n\nfunction hasListener(listenerName: string) {\n  const listener = vnodeProps.value[listenerName];\n  if (Array.isArray(listener)) {\n    return listener.length > 0;\n  }\n  return !!listener;\n}\n\nfunction createDefaultAddItem(): ToolsMenuItem | null {\n  if (!hasAddFileAction.value) {\n    return null;\n  }\n  return {\n    label: labels.value.chatInputToolbarAddButtonLabel,\n    action: () => emit(\"add-file\"),\n  };\n}\n\nfunction normalizeMenuItems() {\n  const items: MenuEntry[] = [];\n  const addItem = createDefaultAddItem();\n  if (addItem) {\n    items.push(addItem);\n  }\n\n  if (props.toolsMenu.length > 0) {\n    if (items.length > 0) {\n      items.push(\"-\");\n    }\n\n    for (const menuEntry of props.toolsMenu) {\n      if (menuEntry === \"-\") {\n        if (items.length === 0 || items[items.length - 1] === \"-\") {\n          continue;\n        }\n        items.push(\"-\");\n        continue;\n      }\n\n      items.push(menuEntry);\n    }\n  }\n\n  while (items.length > 0 && items[items.length - 1] === \"-\") {\n    items.pop();\n  }\n\n  return items;\n}\n\nconst menuItems = computed(() => normalizeMenuItems());\nconst hasMenuItems = computed(() => menuItems.value.length > 0);\n\nfunction flattenMenuForCommands(items: MenuEntry[]) {\n  const seen = new Set<string>();\n  const commands: ToolsMenuItem[] = [];\n\n  const walk = (entryList: MenuEntry[]) => {\n    for (const entry of entryList) {\n      if (entry === \"-\") {\n        continue;\n      }\n\n      if (isMenuGroup(entry) && entry.items.length > 0) {\n        walk(entry.items);\n        continue;\n      }\n\n      if (!entry.action || seen.has(entry.label)) {\n        continue;\n      }\n\n      seen.add(entry.label);\n      commands.push(entry);\n    }\n  };\n\n  walk(items);\n  return commands;\n}\n\nconst commandItems = computed(() => flattenMenuForCommands(menuItems.value));\n\nfunction flattenMenuDisplay(items: MenuEntry[], depth = 0, prefix = \"root\") {\n  const entries: MenuDisplayEntry[] = [];\n  for (const [index, item] of items.entries()) {\n    const key = `${prefix}-${index}`;\n    if (item === \"-\") {\n      entries.push({ type: \"separator\", key: `sep-${key}` });\n      continue;\n    }\n    if (isMenuGroup(item) && item.items.length > 0) {\n      entries.push({\n        type: \"label\",\n        key: `label-${key}`,\n        label: item.label,\n        depth,\n      });\n      entries.push(...flattenMenuDisplay(item.items, depth + 1, key));\n      continue;\n    }\n    if (item.action) {\n      entries.push({\n        type: \"item\",\n        key: `item-${key}`,\n        label: item.label,\n        depth,\n        action: item.action,\n      });\n    }\n  }\n  return entries;\n}\n\nconst menuDisplayItems = computed(() => flattenMenuDisplay(menuItems.value));\n\nconst filteredCommands = computed(() => {\n  if (commandQuery.value === null || commandItems.value.length === 0) {\n    return [] as ToolsMenuItem[];\n  }\n\n  const normalized = commandQuery.value.trim().toLowerCase();\n  if (normalized.length === 0) {\n    return commandItems.value;\n  }\n\n  const startsWith: ToolsMenuItem[] = [];\n  const contains: ToolsMenuItem[] = [];\n\n  for (const command of commandItems.value) {\n    const label = command.label.toLowerCase();\n    if (label.startsWith(normalized)) {\n      startsWith.push(command);\n      continue;\n    }\n    if (label.includes(normalized)) {\n      contains.push(command);\n    }\n  }\n\n  return [...startsWith, ...contains];\n});\n\nconst slashMenuVisible = computed(\n  () => commandQuery.value !== null && commandItems.value.length > 0,\n);\n\nfunction updateInputValue(nextValue: string) {\n  if (!isControlled.value) {\n    localValue.value = nextValue;\n  }\n  emit(\"update:modelValue\", nextValue);\n}\n\nfunction clearInputValue() {\n  updateInputValue(\"\");\n}\n\nfunction updateSlashState(value: string) {\n  if (commandItems.value.length === 0) {\n    commandQuery.value = null;\n    return;\n  }\n\n  if (value.startsWith(\"/\")) {\n    const firstLine = value.split(/\\r?\\n/, 1)[0] ?? \"\";\n    commandQuery.value = firstLine.slice(1);\n    return;\n  }\n\n  commandQuery.value = null;\n}\n\nfunction runCommand(command: ToolsMenuItem) {\n  clearInputValue();\n  command.action?.();\n  commandQuery.value = null;\n  slashHighlightIndex.value = 0;\n  requestAnimationFrame(() => {\n    textareaRef.value?.focus();\n  });\n}\n\nfunction submit() {\n  if (props.mode !== \"input\" || props.disabled || !hasSubmitAction.value) {\n    return;\n  }\n  // In controlled mode, parent-updated modelValue can lag one tick behind\n  // the actual textarea value during intense runtime/connect churn.\n  const rawValue = textareaRef.value?.value ?? inputValue.value;\n  const trimmed = rawValue.trim();\n  if (!trimmed) {\n    return;\n  }\n\n  emit(\"submit-message\", trimmed);\n\n  if (props.clearOnSubmit) {\n    clearInputValue();\n  }\n\n  textareaRef.value?.focus();\n}\n\nfunction handleInput(event: Event) {\n  const nextValue = (event.target as HTMLTextAreaElement).value;\n  updateInputValue(nextValue);\n  updateSlashState(nextValue);\n}\n\nfunction handleSendButtonClick() {\n  if (isProcessing.value) {\n    if (hasStopAction.value) {\n      emit(\"stop\");\n    }\n    return;\n  }\n  submit();\n}\n\nfunction handleKeydown(event: KeyboardEvent) {\n  if (props.disabled) {\n    return;\n  }\n\n  if (isComposing.value || event.isComposing || event.keyCode === 229) {\n    return;\n  }\n\n  if (commandQuery.value !== null && props.mode === \"input\") {\n    if (event.key === \"ArrowDown\") {\n      if (filteredCommands.value.length > 0) {\n        event.preventDefault();\n        slashHighlightIndex.value =\n          slashHighlightIndex.value < 0\n            ? 0\n            : (slashHighlightIndex.value + 1) % filteredCommands.value.length;\n      }\n      return;\n    }\n\n    if (event.key === \"ArrowUp\") {\n      if (filteredCommands.value.length > 0) {\n        event.preventDefault();\n        if (slashHighlightIndex.value < 0) {\n          slashHighlightIndex.value = filteredCommands.value.length - 1;\n        } else {\n          slashHighlightIndex.value =\n            slashHighlightIndex.value <= 0\n              ? filteredCommands.value.length - 1\n              : slashHighlightIndex.value - 1;\n        }\n      }\n      return;\n    }\n\n    if (event.key === \"Enter\") {\n      const selected =\n        slashHighlightIndex.value >= 0\n          ? filteredCommands.value[slashHighlightIndex.value]\n          : undefined;\n      if (selected) {\n        event.preventDefault();\n        runCommand(selected);\n        return;\n      }\n    }\n\n    if (event.key === \"Escape\") {\n      event.preventDefault();\n      commandQuery.value = null;\n      return;\n    }\n  }\n\n  if (event.key === \"Enter\" && !event.shiftKey && props.mode === \"input\") {\n    event.preventDefault();\n    if (isProcessing.value) {\n      if (hasStopAction.value) {\n        emit(\"stop\");\n      }\n      return;\n    }\n    submit();\n  }\n}\n\nfunction toggleAddMenu() {\n  if (!hasMenuItems.value || props.mode === \"transcribe\" || props.disabled) {\n    return;\n  }\n  addMenuOpen.value = !addMenuOpen.value;\n}\n\nfunction closeAddMenu() {\n  addMenuOpen.value = false;\n}\n\nfunction handleMenuAction(action: () => void) {\n  action();\n  closeAddMenu();\n  nextTick(() => {\n    textareaRef.value?.focus();\n  });\n}\n\nasync function handleFinishTranscribe() {\n  const recorder = audioRecorderRef.value;\n  if (recorder && recorder.state === \"recording\") {\n    try {\n      const blob = await recorder.stop();\n      emit(\"finish-transcribe-with-audio\", blob);\n    } catch (error) {\n      console.error(\"Failed to stop recording:\", error);\n    }\n  }\n  emit(\"finish-transcribe\");\n}\n\nfunction handleContainerClick(event: MouseEvent) {\n  const target = event.target as HTMLElement | null;\n  if (!target || props.mode !== \"input\") {\n    return;\n  }\n  if (target.tagName === \"BUTTON\" || target.closest(\"button\")) {\n    return;\n  }\n  textareaRef.value?.focus();\n}\n\nfunction ensureMeasurements() {\n  const textarea = textareaRef.value;\n  if (!textarea || isComposing.value) {\n    return;\n  }\n\n  const previousValue = textarea.value;\n  const previousHeight = textarea.style.height;\n  textarea.style.height = \"auto\";\n\n  const computedStyle = window.getComputedStyle(textarea);\n  const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;\n  const paddingRight = parseFloat(computedStyle.paddingRight) || 0;\n  const paddingTop = parseFloat(computedStyle.paddingTop) || 0;\n  const paddingBottom = parseFloat(computedStyle.paddingBottom) || 0;\n\n  textarea.value = \"\";\n  const singleLineHeight = textarea.scrollHeight;\n  textarea.value = previousValue;\n\n  const contentHeight = singleLineHeight - paddingTop - paddingBottom;\n  const maxHeight = contentHeight * props.maxRows + paddingTop + paddingBottom;\n\n  measurements.value = {\n    singleLineHeight,\n    maxHeight,\n    paddingLeft,\n    paddingRight,\n  };\n\n  textarea.style.height = previousHeight;\n  textarea.style.maxHeight = `${maxHeight}px`;\n}\n\nfunction adjustTextareaHeight() {\n  const textarea = textareaRef.value;\n  if (!textarea) {\n    return 0;\n  }\n\n  if (measurements.value.singleLineHeight === 0) {\n    ensureMeasurements();\n  }\n\n  const { maxHeight } = measurements.value;\n  if (maxHeight) {\n    textarea.style.maxHeight = `${maxHeight}px`;\n  }\n\n  textarea.style.height = \"auto\";\n  const scrollHeight = textarea.scrollHeight;\n  textarea.style.height = `${maxHeight ? Math.min(scrollHeight, maxHeight) : scrollHeight}px`;\n  return scrollHeight;\n}\n\nfunction updateLayout(nextLayout: \"compact\" | \"expanded\") {\n  if (layout.value === nextLayout) {\n    return;\n  }\n  ignoreResizeRef.value = true;\n  layout.value = nextLayout;\n}\n\nfunction resolveTextareaFont(textarea: HTMLTextAreaElement): string | null {\n  const textareaStyles = window.getComputedStyle(textarea);\n  if (textareaStyles.font?.trim()) {\n    return textareaStyles.font;\n  }\n\n  if (textareaStyles.fontSize && textareaStyles.fontFamily) {\n    const fallbackFont =\n      `${textareaStyles.fontStyle} ${textareaStyles.fontVariant} ` +\n      `${textareaStyles.fontWeight} ${textareaStyles.fontSize}/${textareaStyles.lineHeight} ` +\n      `${textareaStyles.fontFamily}`;\n    if (fallbackFont.trim()) {\n      return fallbackFont;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\" && !didWarnMissingFontRef.value) {\n    didWarnMissingFontRef.value = true;\n    console.warn(\n      \"[CopilotChatInput] Could not resolve textarea font for layout measurement. \" +\n        \"Text-width-based expansion will be skipped until the next container resize.\",\n    );\n  }\n  return null;\n}\n\nfunction updateContainerCache() {\n  const grid = gridRef.value;\n  const addContainer = addButtonContainerRef.value;\n  const actionsContainer = actionsContainerRef.value;\n  if (!grid || !addContainer || !actionsContainer) {\n    containerCacheRef.value = null;\n    return null;\n  }\n\n  const gridStyles = window.getComputedStyle(grid);\n  const paddingLeft = parseFloat(gridStyles.paddingLeft) || 0;\n  const paddingRight = parseFloat(gridStyles.paddingRight) || 0;\n  const columnGap = parseFloat(gridStyles.columnGap) || 0;\n  const gridAvailableWidth = grid.clientWidth - paddingLeft - paddingRight;\n  if (gridAvailableWidth <= 0) {\n    containerCacheRef.value = null;\n    return null;\n  }\n\n  const addWidth = addContainer.getBoundingClientRect().width;\n  const actionsWidth = actionsContainer.getBoundingClientRect().width;\n  const compactWidth = Math.max(\n    gridAvailableWidth - addWidth - actionsWidth - columnGap * 2,\n    0,\n  );\n  if (compactWidth <= 0) {\n    containerCacheRef.value = null;\n    return null;\n  }\n\n  const cache = { compactWidth };\n  containerCacheRef.value = cache;\n  return cache;\n}\n\nfunction evaluateLayout() {\n  if (props.mode !== \"input\") {\n    updateLayout(\"compact\");\n    return;\n  }\n\n  if (\n    typeof window.matchMedia === \"function\" &&\n    window.matchMedia(\"(max-width: 767px)\").matches\n  ) {\n    ensureMeasurements();\n    adjustTextareaHeight();\n    updateLayout(\"expanded\");\n    return;\n  }\n\n  const textarea = textareaRef.value;\n  if (\n    !textarea ||\n    !gridRef.value ||\n    !addButtonContainerRef.value ||\n    !actionsContainerRef.value\n  ) {\n    return;\n  }\n\n  if (measurements.value.singleLineHeight === 0) {\n    ensureMeasurements();\n  }\n\n  const scrollHeight = adjustTextareaHeight();\n  const baseline = measurements.value.singleLineHeight;\n  const hasExplicitBreak = inputValue.value.includes(\"\\n\");\n  const renderedMultiline = baseline > 0 ? scrollHeight > baseline + 1 : false;\n  let shouldExpand = hasExplicitBreak || renderedMultiline;\n\n  if (!shouldExpand) {\n    const cache = containerCacheRef.value ?? updateContainerCache();\n    if (cache && cache.compactWidth > 0) {\n      const compactInnerWidth = Math.max(\n        cache.compactWidth -\n          measurements.value.paddingLeft -\n          measurements.value.paddingRight,\n        0,\n      );\n\n      if (compactInnerWidth > 0) {\n        const canvas =\n          measurementCanvasRef.value ?? document.createElement(\"canvas\");\n        if (!measurementCanvasRef.value) {\n          measurementCanvasRef.value = canvas;\n        }\n\n        const context = canvas.getContext(\"2d\");\n        if (context) {\n          const resolvedFont = resolveTextareaFont(textarea);\n          if (resolvedFont) {\n            context.font = resolvedFont;\n            const lines =\n              inputValue.value.length > 0 ? inputValue.value.split(\"\\n\") : [\"\"];\n            let longestLine = 0;\n            for (const line of lines) {\n              const width = context.measureText(line || \" \").width;\n              if (width > longestLine) {\n                longestLine = width;\n              }\n            }\n            if (longestLine > compactInnerWidth) {\n              shouldExpand = true;\n            }\n          }\n        } else if (\n          process.env.NODE_ENV !== \"production\" &&\n          !didWarnMissingCanvasContextRef.value\n        ) {\n          didWarnMissingCanvasContextRef.value = true;\n          console.warn(\n            \"[CopilotChatInput] canvas.getContext('2d') returned null. \" +\n              \"Text-width-based expansion will be skipped.\",\n          );\n        }\n      }\n    }\n  }\n\n  updateLayout(shouldExpand ? \"expanded\" : \"compact\");\n}\n\nfunction scheduleLayoutEvaluation(invalidateCache: boolean) {\n  if (ignoreResizeRef.value) {\n    ignoreResizeRef.value = false;\n    return;\n  }\n\n  if (invalidateCache) {\n    containerCacheRef.value = null;\n    didWarnMissingFontRef.value = false;\n    didWarnMissingCanvasContextRef.value = false;\n  }\n\n  if (resizeEvaluationRafRef.value !== null) {\n    cancelAnimationFrame(resizeEvaluationRafRef.value);\n  }\n\n  resizeEvaluationRafRef.value = requestAnimationFrame(() => {\n    resizeEvaluationRafRef.value = null;\n    evaluateLayout();\n  });\n}\n\nwatch(\n  () => props.modelValue,\n  (next) => {\n    if (isControlled.value) {\n      localValue.value = next ?? \"\";\n    }\n  },\n);\n\nwatch(inputValue, (value) => {\n  updateSlashState(value);\n  evaluateLayout();\n});\n\nwatch(commandItems, () => {\n  if (commandItems.value.length === 0) {\n    commandQuery.value = null;\n  }\n});\n\nwatch(\n  [commandQuery, () => filteredCommands.value.length],\n  ([query, filteredCount]) => {\n    if (\n      query !== null &&\n      query !== previousCommandQuery.value &&\n      filteredCount > 0\n    ) {\n      slashHighlightIndex.value = 0;\n    }\n\n    previousCommandQuery.value = query;\n  },\n  { immediate: true },\n);\n\nwatch(\n  [commandQuery, filteredCommands],\n  () => {\n    if (commandQuery.value === null) {\n      slashHighlightIndex.value = 0;\n      return;\n    }\n    if (filteredCommands.value.length === 0) {\n      slashHighlightIndex.value = -1;\n      return;\n    }\n    if (\n      slashHighlightIndex.value < 0 ||\n      slashHighlightIndex.value >= filteredCommands.value.length\n    ) {\n      slashHighlightIndex.value = 0;\n    }\n  },\n  { immediate: true },\n);\n\nwatch(\n  () => props.mode,\n  async (mode) => {\n    if (mode !== \"input\") {\n      layout.value = \"compact\";\n      commandQuery.value = null;\n      closeAddMenu();\n    }\n\n    const recorder = audioRecorderRef.value;\n    if (!recorder) {\n      return;\n    }\n\n    if (mode === \"transcribe\") {\n      try {\n        await recorder.start();\n      } catch (error) {\n        console.error(error);\n      }\n      return;\n    }\n\n    if (recorder.state === \"recording\") {\n      try {\n        await recorder.stop();\n      } catch {\n        // ignore transition stop failures\n      }\n    }\n  },\n  { immediate: true },\n);\n\nwatch(\n  audioRecorderRef,\n  async (recorder) => {\n    if (!recorder || props.mode !== \"transcribe\") {\n      return;\n    }\n    if (recorder.state === \"idle\") {\n      try {\n        await recorder.start();\n      } catch (error) {\n        console.error(error);\n      }\n    }\n  },\n  { immediate: true },\n);\n\nwatch(slashHighlightIndex, async (index) => {\n  if (!slashMenuVisible.value || index < 0) {\n    return;\n  }\n  await nextTick();\n  const active = slashMenuRef.value?.querySelector<HTMLElement>(\n    `[data-slash-index=\"${index}\"]`,\n  );\n  active?.scrollIntoView?.({ block: \"nearest\" });\n});\n\nwatch(\n  () => props.disabled,\n  (disabled) => {\n    if (disabled) {\n      closeAddMenu();\n    }\n  },\n);\n\nonMounted(() => {\n  if (props.autoFocus && props.mode === \"input\") {\n    textareaRef.value?.focus();\n  }\n\n  evaluateLayout();\n\n  if (typeof ResizeObserver !== \"undefined\") {\n    const containerTargets = new Set<HTMLElement>();\n    if (gridRef.value) containerTargets.add(gridRef.value);\n    if (addButtonContainerRef.value)\n      containerTargets.add(addButtonContainerRef.value);\n    if (actionsContainerRef.value)\n      containerTargets.add(actionsContainerRef.value);\n\n    resizeObserver = new ResizeObserver((entries) => {\n      const shouldInvalidate = entries.some((entry) =>\n        containerTargets.has(entry.target as HTMLElement),\n      );\n      scheduleLayoutEvaluation(shouldInvalidate);\n    });\n\n    if (gridRef.value) resizeObserver.observe(gridRef.value);\n    if (addButtonContainerRef.value)\n      resizeObserver.observe(addButtonContainerRef.value);\n    if (actionsContainerRef.value)\n      resizeObserver.observe(actionsContainerRef.value);\n    if (textareaRef.value) resizeObserver.observe(textareaRef.value);\n  }\n\n  documentPointerDownHandler = (event: MouseEvent) => {\n    if (!addMenuOpen.value) {\n      return;\n    }\n    const target = event.target as Node | null;\n    if (!target) {\n      return;\n    }\n    if (\n      addMenuRef.value?.contains(target) ||\n      addButtonContainerRef.value?.contains(target)\n    ) {\n      return;\n    }\n    closeAddMenu();\n  };\n\n  document.addEventListener(\"mousedown\", documentPointerDownHandler);\n});\n\nonBeforeUnmount(() => {\n  if (documentPointerDownHandler) {\n    document.removeEventListener(\"mousedown\", documentPointerDownHandler);\n    documentPointerDownHandler = null;\n  }\n  resizeObserver?.disconnect();\n  resizeObserver = null;\n  if (resizeEvaluationRafRef.value !== null) {\n    cancelAnimationFrame(resizeEvaluationRafRef.value);\n    resizeEvaluationRafRef.value = null;\n  }\n});\n</script>\n\n<template>\n  <div\n    data-copilotkit\n    data-testid=\"copilot-chat-input-container\"\n    :class=\"containerClass\"\n    :style=\"{\n      transform:\n        keyboardHeight > 0 ? `translateY(-${keyboardHeight}px)` : undefined,\n      transition: 'transform 0.2s ease-out',\n      ...(positioning === 'absolute' || bottomAnchored\n        ? { paddingBottom: 'var(--copilotkit-license-banner-offset, 0px)' }\n        : {}),\n    }\"\n    v-bind=\"rootAttrs\"\n  >\n    <div\n      class=\"cpk:pointer-events-auto cpk:mx-auto cpk:max-w-3xl cpk:px-4 cpk:py-0 cpk:sm:px-0 cpk:[div[data-sidebar-chat]_&]:px-8 cpk:[div[data-popup-chat]_&]:px-4\"\n    >\n      <slot\n        name=\"layout\"\n        :mode=\"mode\"\n        :is-multiline=\"isExpanded\"\n        :value=\"inputValue\"\n        :disabled=\"disabled\"\n        :placeholder=\"resolvedPlaceholder\"\n        :is-processing=\"isProcessing\"\n        :send-disabled=\"sendDisabled\"\n        :menu-open=\"addMenuOpen\"\n        :menu-items=\"menuDisplayItems\"\n        :on-toggle-menu=\"toggleAddMenu\"\n        :on-menu-action=\"handleMenuAction\"\n        :on-update-value=\"updateInputValue\"\n        :on-submit=\"submit\"\n        :on-keydown=\"handleKeydown\"\n        :on-send-click=\"handleSendButtonClick\"\n        :on-start-transcribe=\"() => emit('start-transcribe')\"\n        :on-cancel-transcribe=\"() => emit('cancel-transcribe')\"\n        :on-finish-transcribe=\"handleFinishTranscribe\"\n      >\n        <div\n          ref=\"shellRef\"\n          data-testid=\"copilot-chat-input-shell\"\n          class=\"cpk:flex cpk:w-full cpk:cursor-text cpk:flex-col cpk:items-center cpk:justify-center cpk:overflow-visible cpk:rounded-[28px] cpk:bg-white cpk:bg-clip-padding cpk:shadow-[0_4px_4px_0_#0000000a,0_0_1px_0_#0000009e] cpk:contain-inline-size cpk:dark:bg-[#303030]\"\n          :data-layout=\"isExpanded ? 'expanded' : 'compact'\"\n          @click=\"handleContainerClick\"\n        >\n          <div\n            ref=\"gridRef\"\n            :class=\"[\n              'cpk:grid cpk:w-full cpk:gap-x-3 cpk:gap-y-3 cpk:px-3 cpk:py-2',\n              isExpanded\n                ? 'cpk:grid-cols-[auto_minmax(0,1fr)_auto] cpk:grid-rows-[auto_auto]'\n                : 'cpk:grid-cols-[auto_minmax(0,1fr)_auto] cpk:items-center',\n            ]\"\n            :data-layout=\"isExpanded ? 'expanded' : 'compact'\"\n          >\n            <div\n              ref=\"addButtonContainerRef\"\n              :class=\"[\n                'cpk:relative cpk:flex cpk:items-center cpk:col-start-1',\n                isExpanded ? 'cpk:row-start-2' : 'cpk:row-start-1',\n              ]\"\n            >\n              <slot\n                name=\"add-menu-button\"\n                :disabled=\"disabled || mode === 'transcribe' || !hasMenuItems\"\n                :menu-open=\"addMenuOpen\"\n                :toggle-menu=\"toggleAddMenu\"\n                :labels=\"labels\"\n              >\n                <button\n                  type=\"button\"\n                  data-testid=\"copilot-chat-input-add\"\n                  :aria-label=\"labels.chatInputToolbarAddButtonLabel\"\n                  :disabled=\"disabled || mode === 'transcribe' || !hasMenuItems\"\n                  class=\"cpk:ml-1 cpk:inline-flex cpk:h-9 cpk:w-9 cpk:shrink-0 cpk:items-center cpk:justify-center cpk:rounded-full cpk:bg-transparent cpk:text-[#444444] cpk:transition-colors cpk:hover:bg-[#f8f8f8] cpk:hover:text-[#333333] cpk:disabled:cursor-not-allowed cpk:disabled:opacity-50 cpk:disabled:hover:bg-transparent cpk:disabled:hover:text-[#444444] cpk:dark:text-white cpk:dark:hover:bg-[#404040] cpk:dark:hover:text-[#FFFFFF] cpk:dark:disabled:hover:bg-transparent cpk:dark:disabled:hover:text-[#CCCCCC]\"\n                  @click.stop=\"toggleAddMenu\"\n                >\n                  <IconPlus class=\"cpk:size-[20px]\" />\n                </button>\n              </slot>\n\n              <div\n                v-if=\"addMenuOpen && hasMenuItems\"\n                ref=\"addMenuRef\"\n                class=\"cpk:absolute cpk:bottom-full cpk:left-0 cpk:z-30 cpk:mb-2 cpk:min-w-[220px] cpk:overflow-hidden cpk:rounded-lg cpk:border cpk:border-border cpk:bg-white cpk:shadow-lg cpk:dark:border-[#3a3a3a] cpk:dark:bg-[#1f1f1f]\"\n                data-testid=\"copilot-chat-input-add-menu\"\n              >\n                <template v-for=\"entry in menuDisplayItems\" :key=\"entry.key\">\n                  <div\n                    v-if=\"entry.type === 'separator'\"\n                    class=\"cpk:my-1 cpk:h-px cpk:bg-border cpk:dark:bg-[#333333]\"\n                  />\n                  <div\n                    v-else-if=\"entry.type === 'label'\"\n                    class=\"cpk:flex cpk:items-center cpk:gap-1 cpk:px-3 cpk:py-1.5 cpk:text-xs cpk:font-semibold cpk:text-muted-foreground\"\n                    :style=\"{ paddingLeft: `${12 + entry.depth * 12}px` }\"\n                  >\n                    <span>{{ entry.label }}</span>\n                    <IconChevronRight class=\"cpk:size-3\" />\n                  </div>\n                  <button\n                    v-else\n                    type=\"button\"\n                    role=\"menuitem\"\n                    class=\"cpk:w-full cpk:px-3 cpk:py-2 cpk:text-left cpk:text-sm cpk:transition-colors cpk:hover:bg-muted cpk:dark:hover:bg-[#2f2f2f]\"\n                    :style=\"{ paddingLeft: `${12 + entry.depth * 12}px` }\"\n                    @click=\"handleMenuAction(entry.action)\"\n                  >\n                    {{ entry.label }}\n                  </button>\n                </template>\n              </div>\n            </div>\n\n            <div\n              :class=\"[\n                'cpk:relative cpk:flex cpk:min-h-[50px] cpk:min-w-0 cpk:flex-col cpk:justify-center',\n                isExpanded\n                  ? 'cpk:col-span-3 cpk:row-start-1'\n                  : 'cpk:col-start-2 cpk:row-start-1',\n              ]\"\n            >\n              <template v-if=\"mode === 'transcribe'\">\n                <slot name=\"audio-recorder\">\n                  <CopilotChatAudioRecorder ref=\"audioRecorderRef\" />\n                </slot>\n              </template>\n              <template v-else-if=\"mode === 'processing'\">\n                <div\n                  class=\"cpk:flex cpk:w-full cpk:items-center cpk:justify-center cpk:px-5 cpk:py-3\"\n                >\n                  <IconLoader2\n                    class=\"cpk:size-[26px] cpk:animate-spin cpk:text-muted-foreground\"\n                  />\n                </div>\n              </template>\n              <template v-else>\n                <slot\n                  name=\"text-area\"\n                  :value=\"inputValue\"\n                  :disabled=\"disabled\"\n                  :placeholder=\"resolvedPlaceholder\"\n                  :on-input=\"handleInput\"\n                  :on-keydown=\"handleKeydown\"\n                  :auto-focus=\"autoFocus\"\n                  :is-expanded=\"isExpanded\"\n                  :rows=\"1\"\n                  :labels=\"labels\"\n                >\n                  <textarea\n                    ref=\"textareaRef\"\n                    data-testid=\"copilot-chat-input-textarea\"\n                    :value=\"inputValue\"\n                    :placeholder=\"resolvedPlaceholder\"\n                    :disabled=\"disabled\"\n                    rows=\"1\"\n                    :class=\"[\n                      'cpk:w-full cpk:bg-transparent cpk:py-3 cpk:text-[16px] cpk:font-normal cpk:leading-relaxed cpk:text-foreground cpk:antialiased cpk:outline-none cpk:placeholder:text-[#00000077] cpk:dark:placeholder:text-[#fffc]',\n                      isExpanded ? 'cpk:px-5' : 'cpk:pr-5',\n                    ]\"\n                    style=\"overflow: auto; resize: none\"\n                    @input=\"handleInput\"\n                    @keydown=\"handleKeydown\"\n                    @compositionstart=\"isComposing = true\"\n                    @compositionend=\"isComposing = false\"\n                  />\n                </slot>\n\n                <div\n                  v-if=\"slashMenuVisible\"\n                  ref=\"slashMenuRef\"\n                  data-testid=\"copilot-slash-menu\"\n                  role=\"listbox\"\n                  aria-label=\"Slash commands\"\n                  class=\"cpk:absolute cpk:bottom-full cpk:left-0 cpk:right-0 cpk:z-30 cpk:mb-2 cpk:max-h-64 cpk:overflow-y-auto cpk:rounded-lg cpk:border cpk:border-border cpk:bg-white cpk:shadow-lg cpk:dark:border-[#3a3a3a] cpk:dark:bg-[#1f1f1f]\"\n                  :style=\"{ maxHeight: `${5 * 40}px` }\"\n                >\n                  <div\n                    v-if=\"filteredCommands.length === 0\"\n                    class=\"cpk:px-3 cpk:py-2 cpk:text-sm cpk:text-muted-foreground\"\n                  >\n                    No commands found\n                  </div>\n                  <button\n                    v-for=\"(command, index) in filteredCommands\"\n                    v-else\n                    :key=\"`${command.label}-${index}`\"\n                    type=\"button\"\n                    role=\"option\"\n                    :data-slash-index=\"index\"\n                    :aria-selected=\"index === slashHighlightIndex\"\n                    :data-active=\"\n                      index === slashHighlightIndex ? 'true' : undefined\n                    \"\n                    :class=\"[\n                      'cpk:w-full cpk:px-3 cpk:py-2 cpk:text-left cpk:text-sm cpk:transition-colors cpk:hover:bg-muted cpk:dark:hover:bg-[#2f2f2f]',\n                      index === slashHighlightIndex\n                        ? 'cpk:bg-muted cpk:dark:bg-[#2f2f2f]'\n                        : 'cpk:bg-transparent',\n                    ]\"\n                    @mouseenter=\"slashHighlightIndex = index\"\n                    @mousedown.prevent=\"runCommand(command)\"\n                  >\n                    {{ command.label }}\n                  </button>\n                </div>\n              </template>\n            </div>\n\n            <div\n              ref=\"actionsContainerRef\"\n              :class=\"[\n                'cpk:flex cpk:items-center cpk:justify-end cpk:gap-2',\n                isExpanded\n                  ? 'cpk:col-start-3 cpk:row-start-2'\n                  : 'cpk:col-start-3 cpk:row-start-1',\n              ]\"\n            >\n              <template v-if=\"mode === 'transcribe'\">\n                <slot\n                  v-if=\"hasCancelTranscribeAction\"\n                  name=\"cancel-transcribe-button\"\n                  :disabled=\"disabled\"\n                  :on-click=\"() => emit('cancel-transcribe')\"\n                  :labels=\"labels\"\n                >\n                  <button\n                    type=\"button\"\n                    data-testid=\"copilot-chat-input-cancel-transcribe\"\n                    :aria-label=\"\n                      labels.chatInputToolbarCancelTranscribeButtonLabel\n                    \"\n                    :disabled=\"disabled\"\n                    class=\"cpk:mr-2 cpk:inline-flex cpk:h-9 cpk:w-9 cpk:shrink-0 cpk:items-center cpk:justify-center cpk:rounded-full cpk:bg-transparent cpk:text-[#444444] cpk:transition-colors cpk:hover:bg-[#f8f8f8] cpk:hover:text-[#333333] cpk:disabled:cursor-not-allowed cpk:disabled:opacity-50 cpk:dark:text-white cpk:dark:hover:bg-[#404040] cpk:dark:hover:text-[#FFFFFF]\"\n                    @click=\"emit('cancel-transcribe')\"\n                  >\n                    <IconX class=\"cpk:size-[18px]\" />\n                  </button>\n                </slot>\n                <slot\n                  v-if=\"hasFinishTranscribeAction\"\n                  name=\"finish-transcribe-button\"\n                  :disabled=\"disabled\"\n                  :on-click=\"handleFinishTranscribe\"\n                  :labels=\"labels\"\n                >\n                  <button\n                    type=\"button\"\n                    data-testid=\"copilot-chat-input-finish-transcribe\"\n                    :aria-label=\"\n                      labels.chatInputToolbarFinishTranscribeButtonLabel\n                    \"\n                    :disabled=\"disabled\"\n                    class=\"cpk:mr-[10px] cpk:inline-flex cpk:h-9 cpk:w-9 cpk:shrink-0 cpk:items-center cpk:justify-center cpk:rounded-full cpk:bg-transparent cpk:text-[#444444] cpk:transition-colors cpk:hover:bg-[#f8f8f8] cpk:hover:text-[#333333] cpk:disabled:cursor-not-allowed cpk:disabled:opacity-50 cpk:dark:text-white cpk:dark:hover:bg-[#404040] cpk:dark:hover:text-[#FFFFFF]\"\n                    @click=\"handleFinishTranscribe\"\n                  >\n                    <IconCheck class=\"cpk:size-[18px]\" />\n                  </button>\n                </slot>\n              </template>\n              <template v-else>\n                <slot\n                  v-if=\"hasStartTranscribeAction\"\n                  name=\"start-transcribe-button\"\n                  :disabled=\"disabled\"\n                  :on-click=\"() => emit('start-transcribe')\"\n                  :labels=\"labels\"\n                >\n                  <button\n                    type=\"button\"\n                    data-testid=\"copilot-chat-input-start-transcribe\"\n                    :aria-label=\"\n                      labels.chatInputToolbarStartTranscribeButtonLabel\n                    \"\n                    :disabled=\"disabled\"\n                    class=\"cpk:mr-2 cpk:inline-flex cpk:h-9 cpk:w-9 cpk:shrink-0 cpk:items-center cpk:justify-center cpk:rounded-full cpk:bg-transparent cpk:text-[#444444] cpk:transition-colors cpk:hover:bg-[#f8f8f8] cpk:hover:text-[#333333] cpk:disabled:cursor-not-allowed cpk:disabled:opacity-50 cpk:disabled:hover:bg-transparent cpk:disabled:hover:text-[#444444] cpk:dark:text-white cpk:dark:hover:bg-[#404040] cpk:dark:hover:text-[#FFFFFF] cpk:dark:disabled:hover:bg-transparent cpk:dark:disabled:hover:text-[#CCCCCC]\"\n                    @click=\"emit('start-transcribe')\"\n                  >\n                    <IconMic class=\"cpk:size-[18px]\" />\n                  </button>\n                </slot>\n                <slot\n                  name=\"send-button\"\n                  :disabled=\"sendDisabled\"\n                  :is-processing=\"isProcessing\"\n                  :on-click=\"handleSendButtonClick\"\n                >\n                  <div class=\"cpk:mr-[10px]\">\n                    <button\n                      type=\"button\"\n                      data-testid=\"copilot-chat-input-send\"\n                      aria-label=\"Send message\"\n                      :disabled=\"sendDisabled\"\n                      class=\"cpk:inline-flex cpk:h-9 cpk:w-9 cpk:shrink-0 cpk:items-center cpk:justify-center cpk:rounded-full cpk:bg-black cpk:text-white cpk:transition-colors cpk:hover:opacity-70 cpk:disabled:cursor-not-allowed cpk:disabled:opacity-50 cpk:disabled:bg-[#00000014] cpk:disabled:text-[rgb(13,13,13)] cpk:disabled:hover:opacity-100 cpk:dark:bg-white cpk:dark:text-black cpk:dark:disabled:bg-[#454545] cpk:dark:disabled:text-white\"\n                      @click=\"handleSendButtonClick\"\n                    >\n                      <IconSquare\n                        v-if=\"isProcessing && hasStopAction\"\n                        class=\"cpk:size-[18px] cpk:fill-current\"\n                      />\n                      <IconArrowUp v-else class=\"cpk:size-[18px]\" />\n                    </button>\n                  </div>\n                </slot>\n              </template>\n            </div>\n          </div>\n        </div>\n      </slot>\n    </div>\n\n    <slot v-if=\"shouldShowDisclaimer\" name=\"disclaimer\" :labels=\"labels\">\n      <p\n        data-testid=\"copilot-chat-input-disclaimer\"\n        class=\"cpk:mx-auto cpk:max-w-3xl cpk:px-4 cpk:py-3 cpk:text-center cpk:text-xs cpk:text-muted-foreground\"\n      >\n        {{ labels.chatDisclaimerText }}\n      </p>\n    </slot>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from \"vue\";\nimport {\n  formatFileSize,\n  getDocumentIcon,\n  getSourceUrl,\n} from \"@copilotkit/shared\";\nimport type { Attachment } from \"@copilotkit/shared\";\nimport type { CopilotChatAttachmentQueueProps } from \"./types\";\n\nconst props = withDefaults(defineProps<CopilotChatAttachmentQueueProps>(), {\n  attachments: () => [],\n  className: \"\",\n});\n\nconst emit = defineEmits<{\n  \"remove-attachment\": [id: string];\n}>();\n\nconst activeLightboxAttachment = ref<Attachment | null>(null);\nconst documentBlobUrl = ref<string | null>(null);\n\nconst isLightboxOpen = computed(() => activeLightboxAttachment.value !== null);\nconst isPreviewableDocument = computed(() => {\n  const attachment = activeLightboxAttachment.value;\n  if (!attachment || attachment.type !== \"document\") return false;\n  const mimeType = attachment.source.mimeType;\n  return isPdf(mimeType) || isText(mimeType);\n});\nconst decodedTextPreview = computed(() => {\n  const attachment = activeLightboxAttachment.value;\n  if (!attachment || attachment.type !== \"document\") return null;\n  const mimeType = attachment.source.mimeType;\n  if (!isText(mimeType) || attachment.source.type !== \"data\") return null;\n  try {\n    return atob(attachment.source.value);\n  } catch {\n    return attachment.source.value;\n  }\n});\nconst lightboxDocumentSource = computed(() => {\n  const attachment = activeLightboxAttachment.value;\n  if (!attachment || attachment.type !== \"document\") return null;\n  if (attachment.source.type === \"url\") return attachment.source.value;\n  return documentBlobUrl.value;\n});\n\nwatch(\n  activeLightboxAttachment,\n  (next, previous) => {\n    if (documentBlobUrl.value) {\n      URL.revokeObjectURL(documentBlobUrl.value);\n      documentBlobUrl.value = null;\n    }\n\n    if (\n      !next ||\n      next.type !== \"document\" ||\n      next.source.type !== \"data\" ||\n      typeof window === \"undefined\"\n    ) {\n      return;\n    }\n\n    const mimeType = next.source.mimeType;\n    if (!isPdf(mimeType) && !isText(mimeType)) {\n      return;\n    }\n\n    const blobUrl = createBlobUrl(next.source.value, mimeType);\n    documentBlobUrl.value = blobUrl;\n  },\n  { immediate: true },\n);\n\nwatch(isLightboxOpen, (open, _previous, onCleanup) => {\n  if (!open || typeof document === \"undefined\") return;\n\n  const handleKeydown = (event: KeyboardEvent) => {\n    if (event.key === \"Escape\") {\n      closeLightbox();\n    }\n  };\n  document.addEventListener(\"keydown\", handleKeydown);\n  onCleanup(() => {\n    document.removeEventListener(\"keydown\", handleKeydown);\n  });\n});\n\nonBeforeUnmount(() => {\n  if (documentBlobUrl.value) {\n    URL.revokeObjectURL(documentBlobUrl.value);\n    documentBlobUrl.value = null;\n  }\n});\n\nfunction openLightbox(attachment: Attachment) {\n  if (typeof document !== \"undefined\") {\n    const withTransition = document as Document & {\n      startViewTransition?: (cb: () => void) => unknown;\n    };\n    if (typeof withTransition.startViewTransition === \"function\") {\n      withTransition.startViewTransition(() => {\n        activeLightboxAttachment.value = attachment;\n      });\n      return;\n    }\n  }\n  activeLightboxAttachment.value = attachment;\n}\n\nfunction closeLightbox() {\n  activeLightboxAttachment.value = null;\n}\n\nfunction cardClassName(attachment: Attachment) {\n  if (attachment.type === \"image\" || attachment.type === \"video\") {\n    return \"cpk:w-[72px] cpk:h-[72px]\";\n  }\n  if (attachment.type === \"audio\") {\n    return \"cpk:min-w-[200px] cpk:max-w-[280px] cpk:flex-col cpk:p-1 cpk:pr-8\";\n  }\n  return \"cpk:p-2 cpk:px-3 cpk:pr-8 cpk:max-w-[240px]\";\n}\n\nfunction isPdf(mimeType: string | undefined): boolean {\n  return !!mimeType && mimeType.includes(\"pdf\");\n}\n\nfunction isText(mimeType: string | undefined): boolean {\n  return !!mimeType && mimeType.startsWith(\"text/\");\n}\n\nfunction createBlobUrl(\n  base64Value: string,\n  mimeType: string | undefined,\n): string | null {\n  try {\n    const binary = atob(base64Value);\n    const bytes = new Uint8Array(binary.length);\n    for (let i = 0; i < binary.length; i += 1) {\n      bytes[i] = binary.charCodeAt(i);\n    }\n    const blob = new Blob([bytes], {\n      type: mimeType || \"application/octet-stream\",\n    });\n    return URL.createObjectURL(blob);\n  } catch (error) {\n    console.error(\"[CopilotKit] Failed to decode attachment data:\", error);\n    return null;\n  }\n}\n</script>\n\n<template>\n  <div\n    v-if=\"props.attachments.length > 0\"\n    class=\"cpk:flex cpk:flex-wrap cpk:gap-2 cpk:p-2\"\n    :class=\"props.className\"\n    data-testid=\"copilot-chat-attachment-queue\"\n  >\n    <div\n      v-for=\"attachment in props.attachments\"\n      :key=\"attachment.id\"\n      class=\"cpk:relative cpk:inline-flex cpk:rounded-lg cpk:overflow-hidden cpk:border cpk:border-border\"\n      :class=\"cardClassName(attachment)\"\n      data-testid=\"copilot-chat-attachment-item\"\n      :data-card-type=\"attachment.type\"\n    >\n      <div\n        v-if=\"attachment.status === 'uploading'\"\n        class=\"cpk:absolute cpk:inset-0 cpk:flex cpk:items-center cpk:justify-center cpk:bg-black/40 cpk:z-10\"\n        data-testid=\"copilot-chat-attachment-uploading-overlay\"\n      >\n        <div\n          class=\"cpk:w-5 cpk:h-5 cpk:border-2 cpk:border-white cpk:border-t-transparent cpk:rounded-full cpk:animate-spin\"\n        />\n      </div>\n\n      <template v-if=\"attachment.status === 'ready'\">\n        <button\n          v-if=\"attachment.type === 'image'\"\n          type=\"button\"\n          class=\"cpk:w-full cpk:h-full cpk:border-none cpk:bg-transparent cpk:p-0 cpk:cursor-pointer\"\n          data-testid=\"copilot-chat-attachment-image-button\"\n          @click=\"openLightbox(attachment)\"\n        >\n          <img\n            :src=\"getSourceUrl(attachment.source)\"\n            :alt=\"attachment.filename || 'Image attachment'\"\n            class=\"cpk:w-full cpk:h-full cpk:object-cover\"\n            data-testid=\"copilot-chat-attachment-image-thumbnail\"\n          />\n        </button>\n\n        <div\n          v-else-if=\"attachment.type === 'video'\"\n          class=\"cpk:w-full cpk:h-full cpk:relative\"\n        >\n          <img\n            v-if=\"attachment.thumbnail\"\n            :src=\"attachment.thumbnail\"\n            :alt=\"attachment.filename || 'Video thumbnail'\"\n            class=\"cpk:w-full cpk:h-full cpk:object-cover\"\n            data-testid=\"copilot-chat-attachment-video-thumbnail\"\n          />\n          <video\n            v-else\n            :src=\"getSourceUrl(attachment.source)\"\n            preload=\"metadata\"\n            muted\n            class=\"cpk:w-full cpk:h-full cpk:object-cover\"\n            data-testid=\"copilot-chat-attachment-video-fallback\"\n          />\n          <button\n            type=\"button\"\n            class=\"cpk:absolute cpk:inset-0 cpk:flex cpk:items-center cpk:justify-center cpk:z-10 cpk:cursor-pointer cpk:bg-black/20 cpk:border-none cpk:p-0\"\n            aria-label=\"Play video\"\n            data-testid=\"copilot-chat-attachment-video-play\"\n            @click=\"openLightbox(attachment)\"\n          >\n            <div\n              class=\"cpk:w-8 cpk:h-8 cpk:rounded-full cpk:bg-black/60 cpk:flex cpk:items-center cpk:justify-center cpk:text-white cpk:text-xs cpk:font-semibold\"\n            >\n              ▶\n            </div>\n          </button>\n        </div>\n\n        <div\n          v-else-if=\"attachment.type === 'audio'\"\n          class=\"cpk:flex cpk:flex-col cpk:gap-1 cpk:w-full\"\n        >\n          <audio\n            :src=\"getSourceUrl(attachment.source)\"\n            controls\n            preload=\"metadata\"\n            class=\"cpk:w-full cpk:h-8\"\n            data-testid=\"copilot-chat-attachment-audio-player\"\n          />\n          <span\n            v-if=\"attachment.filename\"\n            class=\"cpk:text-xs cpk:font-medium cpk:overflow-hidden cpk:text-ellipsis cpk:whitespace-nowrap\"\n          >\n            {{ attachment.filename }}\n          </span>\n        </div>\n\n        <button\n          v-else\n          type=\"button\"\n          class=\"cpk:flex cpk:items-center cpk:gap-2 cpk:w-full cpk:border-none cpk:bg-transparent cpk:p-0 cpk:text-left\"\n          :class=\"\n            isPdf(attachment.source.mimeType) ||\n            isText(attachment.source.mimeType)\n              ? 'cpk:cursor-pointer'\n              : 'cpk:cursor-default'\n          \"\n          data-testid=\"copilot-chat-attachment-document-button\"\n          @click=\"\n            (isPdf(attachment.source.mimeType) ||\n              isText(attachment.source.mimeType)) &&\n            openLightbox(attachment)\n          \"\n        >\n          <div\n            class=\"cpk:w-8 cpk:h-8 cpk:rounded-md cpk:bg-primary cpk:text-primary-foreground cpk:flex cpk:items-center cpk:justify-center cpk:text-[10px] cpk:font-semibold cpk:shrink-0\"\n          >\n            {{ getDocumentIcon(attachment.source.mimeType ?? \"\") }}\n          </div>\n          <div class=\"cpk:flex cpk:flex-col cpk:min-w-0\">\n            <span\n              class=\"cpk:text-xs cpk:font-medium cpk:break-all cpk:leading-tight\"\n              data-testid=\"copilot-chat-attachment-document-filename\"\n            >\n              {{ attachment.filename || \"Document\" }}\n            </span>\n            <span\n              v-if=\"attachment.size != null\"\n              class=\"cpk:text-[11px] cpk:text-muted-foreground\"\n            >\n              {{ formatFileSize(attachment.size) }}\n            </span>\n          </div>\n        </button>\n      </template>\n\n      <div\n        v-else\n        class=\"cpk:w-full cpk:h-full cpk:bg-muted-foreground/20\"\n        data-testid=\"copilot-chat-attachment-placeholder\"\n      />\n\n      <button\n        type=\"button\"\n        class=\"cpk:absolute cpk:bg-black/60 cpk:text-white cpk:border-none cpk:rounded-full cpk:w-5 cpk:h-5 cpk:flex cpk:items-center cpk:justify-center cpk:cursor-pointer cpk:text-[10px] cpk:z-20 cpk:top-1 cpk:right-1\"\n        aria-label=\"Remove attachment\"\n        @click=\"emit('remove-attachment', attachment.id)\"\n      >\n        ✕\n      </button>\n    </div>\n  </div>\n\n  <Teleport to=\"body\">\n    <div\n      v-if=\"activeLightboxAttachment\"\n      class=\"cpk:fixed cpk:inset-0 cpk:z-[9999] cpk:flex cpk:items-center cpk:justify-center cpk:bg-black/80\"\n      data-testid=\"copilot-chat-attachment-lightbox\"\n      @click=\"closeLightbox\"\n    >\n      <button\n        type=\"button\"\n        class=\"cpk:absolute cpk:top-4 cpk:right-4 cpk:text-white cpk:bg-white/10 cpk:hover:bg-white/20 cpk:rounded-full cpk:w-10 cpk:h-10 cpk:flex cpk:items-center cpk:justify-center cpk:cursor-pointer cpk:border-none\"\n        aria-label=\"Close preview\"\n        @click.stop=\"closeLightbox\"\n      >\n        ✕\n      </button>\n\n      <div data-testid=\"copilot-chat-attachment-lightbox-content\" @click.stop>\n        <img\n          v-if=\"activeLightboxAttachment.type === 'image'\"\n          :src=\"getSourceUrl(activeLightboxAttachment.source)\"\n          :alt=\"activeLightboxAttachment.filename || 'Image attachment'\"\n          class=\"cpk:max-w-[90vw] cpk:max-h-[90vh] cpk:object-contain cpk:rounded-lg\"\n          data-testid=\"copilot-chat-attachment-lightbox-image\"\n        />\n\n        <video\n          v-else-if=\"activeLightboxAttachment.type === 'video'\"\n          :src=\"getSourceUrl(activeLightboxAttachment.source)\"\n          controls\n          autoplay\n          class=\"cpk:max-w-[90vw] cpk:max-h-[90vh] cpk:rounded-lg\"\n          data-testid=\"copilot-chat-attachment-lightbox-video\"\n        />\n\n        <template v-else-if=\"activeLightboxAttachment.type === 'document'\">\n          <iframe\n            v-if=\"\n              isPreviewableDocument &&\n              isPdf(activeLightboxAttachment.source.mimeType) &&\n              lightboxDocumentSource\n            \"\n            :src=\"lightboxDocumentSource\"\n            :title=\"activeLightboxAttachment.filename || 'PDF preview'\"\n            class=\"cpk:w-[90vw] cpk:h-[90vh] cpk:max-w-[1000px] cpk:rounded-lg cpk:bg-white\"\n            data-testid=\"copilot-chat-attachment-lightbox-document-iframe\"\n          />\n\n          <div\n            v-else-if=\"\n              isPreviewableDocument &&\n              isText(activeLightboxAttachment.source.mimeType)\n            \"\n            class=\"cpk:w-[90vw] cpk:max-w-[800px] cpk:max-h-[90vh] cpk:overflow-auto cpk:rounded-lg cpk:bg-white cpk:dark:bg-gray-900 cpk:p-6\"\n          >\n            <pre\n              v-if=\"decodedTextPreview !== null\"\n              class=\"cpk:text-sm cpk:whitespace-pre-wrap cpk:wrap-break-word cpk:text-gray-800 cpk:dark:text-gray-200 cpk:font-mono cpk:m-0\"\n              data-testid=\"copilot-chat-attachment-lightbox-document-text\"\n              >{{ decodedTextPreview }}</pre\n            >\n            <iframe\n              v-else-if=\"lightboxDocumentSource\"\n              :src=\"lightboxDocumentSource\"\n              :title=\"activeLightboxAttachment.filename || 'Text preview'\"\n              class=\"cpk:w-full cpk:h-[80vh] cpk:border-none\"\n              data-testid=\"copilot-chat-attachment-lightbox-document-iframe\"\n            />\n          </div>\n\n          <div\n            v-else\n            class=\"cpk:flex cpk:flex-col cpk:items-center cpk:gap-4 cpk:p-8 cpk:rounded-lg cpk:bg-white cpk:dark:bg-gray-900\"\n            data-testid=\"copilot-chat-attachment-lightbox-document-fallback\"\n          >\n            <div\n              class=\"cpk:w-16 cpk:h-16 cpk:rounded-xl cpk:bg-primary cpk:text-primary-foreground cpk:flex cpk:items-center cpk:justify-center cpk:text-xl cpk:font-bold\"\n            >\n              {{\n                getDocumentIcon(activeLightboxAttachment.source.mimeType ?? \"\")\n              }}\n            </div>\n            <div class=\"cpk:text-center\">\n              <div\n                class=\"cpk:text-base cpk:font-medium cpk:text-gray-800 cpk:dark:text-gray-200\"\n              >\n                {{ activeLightboxAttachment.filename || \"Document\" }}\n              </div>\n              <div\n                class=\"cpk:text-sm cpk:text-gray-500 cpk:dark:text-gray-400 cpk:mt-1\"\n              >\n                {{ activeLightboxAttachment.source.mimeType || \"Unknown type\" }}\n                {{\n                  activeLightboxAttachment.size != null\n                    ? ` · ${formatFileSize(activeLightboxAttachment.size)}`\n                    : \"\"\n                }}\n              </div>\n            </div>\n            <div class=\"cpk:text-xs cpk:text-gray-400 cpk:dark:text-gray-500\">\n              No preview available for this file type\n            </div>\n          </div>\n        </template>\n      </div>\n    </div>\n  </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from \"vue\";\nimport type { Message, ReasoningMessage } from \"@ag-ui/core\";\nimport { StreamMarkdown } from \"streamdown-vue\";\nimport { IconChevronRight } from \"../icons\";\n\nconst props = withDefaults(\n  defineProps<{\n    message: ReasoningMessage;\n    messages?: Message[];\n    isRunning?: boolean;\n  }>(),\n  {\n    messages: () => [],\n    isRunning: false,\n  },\n);\n\ndefineSlots<{\n  layout?: (props: {\n    message: ReasoningMessage;\n    messages: Message[];\n    isRunning: boolean;\n    header: {\n      isOpen: boolean;\n      label: string;\n      hasContent: boolean;\n      isStreaming: boolean;\n      onClick?: () => void;\n    };\n    contentView: {\n      isStreaming: boolean;\n      hasContent: boolean;\n      content: string;\n    };\n    toggle: {\n      isOpen: boolean;\n      contentView: {\n        isStreaming: boolean;\n        hasContent: boolean;\n        content: string;\n      };\n    };\n  }) => unknown;\n  header?: (props: {\n    isOpen: boolean;\n    label: string;\n    hasContent: boolean;\n    isStreaming: boolean;\n    onClick?: () => void;\n  }) => unknown;\n  \"content-view\"?: (props: {\n    isStreaming: boolean;\n    hasContent: boolean;\n    content: string;\n  }) => unknown;\n  toggle?: (props: {\n    isOpen: boolean;\n    contentView: {\n      isStreaming: boolean;\n      hasContent: boolean;\n      content: string;\n    };\n  }) => unknown;\n}>();\n\nfunction formatDuration(seconds: number): string {\n  if (seconds < 1) return \"a few seconds\";\n  if (seconds < 60) return `${Math.round(seconds)} seconds`;\n  const mins = Math.floor(seconds / 60);\n  const secs = Math.round(seconds % 60);\n  if (secs === 0) return `${mins} minute${mins > 1 ? \"s\" : \"\"}`;\n  return `${mins}m ${secs}s`;\n}\n\nconst normalizedContent = computed(() =>\n  typeof props.message.content === \"string\" ? props.message.content : \"\",\n);\nconst hasContent = computed(() => normalizedContent.value.length > 0);\nconst isLatest = computed(\n  () => props.messages[props.messages.length - 1]?.id === props.message.id,\n);\nconst isStreaming = computed(() => !!(props.isRunning && isLatest.value));\n\nconst elapsed = ref(0);\nconst isOpen = ref(isStreaming.value);\nconst userToggledDuringStreaming = ref(false);\nlet startTimeMs: number | null = null;\nlet elapsedInterval: ReturnType<typeof setInterval> | null = null;\n\nfunction clearElapsedInterval() {\n  if (elapsedInterval) {\n    clearInterval(elapsedInterval);\n    elapsedInterval = null;\n  }\n}\n\nfunction updateElapsedNow() {\n  if (startTimeMs !== null) {\n    elapsed.value = (Date.now() - startTimeMs) / 1000;\n  }\n}\n\nwatch(\n  isStreaming,\n  (nextIsStreaming) => {\n    if (nextIsStreaming) {\n      if (startTimeMs === null) {\n        startTimeMs = Date.now();\n      }\n      clearElapsedInterval();\n      elapsedInterval = setInterval(updateElapsedNow, 1000);\n      userToggledDuringStreaming.value = false;\n      isOpen.value = true;\n      return;\n    }\n\n    clearElapsedInterval();\n    updateElapsedNow();\n    if (!userToggledDuringStreaming.value) {\n      isOpen.value = false;\n    }\n  },\n  { immediate: true },\n);\n\nonBeforeUnmount(() => {\n  clearElapsedInterval();\n});\n\nconst label = computed(() =>\n  isStreaming.value\n    ? \"Thinking…\"\n    : `Thought for ${formatDuration(elapsed.value)}`,\n);\n\nfunction toggleOpen() {\n  if (!hasContent.value) return;\n  userToggledDuringStreaming.value = true;\n  isOpen.value = !isOpen.value;\n}\n</script>\n\n<template>\n  <div data-copilotkit class=\"cpk:my-1\" :data-message-id=\"message.id\">\n    <slot\n      name=\"layout\"\n      :message=\"message\"\n      :messages=\"messages\"\n      :is-running=\"isRunning\"\n      :header=\"{\n        isOpen,\n        label,\n        hasContent,\n        isStreaming,\n        onClick: hasContent ? toggleOpen : undefined,\n      }\"\n      :content-view=\"{\n        isStreaming,\n        hasContent,\n        content: normalizedContent,\n      }\"\n      :toggle=\"{\n        isOpen,\n        contentView: {\n          isStreaming,\n          hasContent,\n          content: normalizedContent,\n        },\n      }\"\n    >\n      <slot\n        name=\"header\"\n        :is-open=\"isOpen\"\n        :label=\"label\"\n        :has-content=\"hasContent\"\n        :is-streaming=\"isStreaming\"\n        :on-click=\"hasContent ? toggleOpen : undefined\"\n      >\n        <button\n          type=\"button\"\n          class=\"cpk:inline-flex cpk:items-center cpk:gap-1 cpk:py-1 cpk:text-sm cpk:text-muted-foreground cpk:transition-colors cpk:select-none\"\n          :class=\"\n            hasContent\n              ? 'cpk:hover:text-foreground cpk:cursor-pointer'\n              : 'cpk:cursor-default'\n          \"\n          :aria-expanded=\"hasContent ? isOpen : undefined\"\n          @click=\"hasContent ? toggleOpen() : undefined\"\n        >\n          <span class=\"cpk:font-medium\">{{ label }}</span>\n          <span\n            v-if=\"isStreaming && !hasContent\"\n            class=\"cpk:inline-flex cpk:items-center cpk:ml-1\"\n          >\n            <span\n              class=\"cpk:w-1.5 cpk:h-1.5 cpk:rounded-full cpk:bg-muted-foreground cpk:animate-pulse\"\n            />\n          </span>\n          <IconChevronRight\n            v-if=\"hasContent\"\n            class=\"cpk:size-3.5 cpk:shrink-0 cpk:transition-transform cpk:duration-200\"\n            :class=\"{ 'cpk:rotate-90': isOpen }\"\n          />\n        </button>\n      </slot>\n\n      <slot\n        name=\"toggle\"\n        :is-open=\"isOpen\"\n        :content-view=\"{\n          isStreaming,\n          hasContent,\n          content: normalizedContent,\n        }\"\n      >\n        <div\n          class=\"cpk:grid cpk:transition-[grid-template-rows] cpk:duration-200 cpk:ease-in-out\"\n          :style=\"{ gridTemplateRows: isOpen ? '1fr' : '0fr' }\"\n        >\n          <div class=\"cpk:overflow-hidden\">\n            <slot\n              name=\"content-view\"\n              :is-streaming=\"isStreaming\"\n              :has-content=\"hasContent\"\n              :content=\"normalizedContent\"\n            >\n              <div v-if=\"hasContent || isStreaming\" class=\"cpk:pb-2 cpk:pt-1\">\n                <div class=\"cpk:text-sm cpk:text-muted-foreground\">\n                  <StreamMarkdown :content=\"normalizedContent\" />\n                  <span\n                    v-if=\"isStreaming && hasContent\"\n                    class=\"cpk:inline-flex cpk:items-center cpk:ml-1 cpk:align-middle\"\n                  >\n                    <span\n                      class=\"cpk:w-2 cpk:h-2 cpk:rounded-full cpk:bg-muted-foreground cpk:animate-pulse-cursor\"\n                    />\n                  </span>\n                </div>\n              </div>\n            </slot>\n          </div>\n        </div>\n      </slot>\n    </slot>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, onBeforeUnmount, ref } from \"vue\";\nimport type { UserMessage } from \"@ag-ui/core\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport { CopilotChatDefaultLabels } from \"../../providers/types\";\nimport {\n  IconCheck,\n  IconChevronLeft,\n  IconChevronRight,\n  IconCopy,\n  IconEdit,\n} from \"../icons\";\nimport type {\n  CopilotChatUserMessageBranchNavigationSlotProps,\n  CopilotChatUserMessageCopyButtonSlotProps,\n  CopilotChatUserMessageEditButtonSlotProps,\n  CopilotChatUserMessageLayoutSlotProps,\n  CopilotChatUserMessageMessageRendererSlotProps,\n  CopilotChatUserMessageOnEditMessageProps,\n  CopilotChatUserMessageOnSwitchToBranchProps,\n  CopilotChatUserMessageToolbarSlotProps,\n} from \"./types\";\n\nconst props = withDefaults(\n  defineProps<{\n    message: UserMessage;\n    branchIndex?: number;\n    numberOfBranches?: number;\n  }>(),\n  {\n    branchIndex: 0,\n    numberOfBranches: 1,\n  },\n);\n\ndefineSlots<{\n  \"message-renderer\"?: (\n    props: CopilotChatUserMessageMessageRendererSlotProps,\n  ) => unknown;\n  toolbar?: (props: CopilotChatUserMessageToolbarSlotProps) => unknown;\n  \"copy-button\"?: (props: CopilotChatUserMessageCopyButtonSlotProps) => unknown;\n  \"edit-button\"?: (props: CopilotChatUserMessageEditButtonSlotProps) => unknown;\n  \"branch-navigation\"?: (\n    props: CopilotChatUserMessageBranchNavigationSlotProps,\n  ) => unknown;\n  layout?: (props: CopilotChatUserMessageLayoutSlotProps) => unknown;\n  \"toolbar-items\"?: () => unknown;\n}>();\n\nconst emit = defineEmits<{\n  \"edit-message\": [payload: CopilotChatUserMessageOnEditMessageProps];\n  \"switch-to-branch\": [payload: CopilotChatUserMessageOnSwitchToBranchProps];\n}>();\n\nconst config = useCopilotChatConfiguration();\nconst labels = computed(() => config.value?.labels ?? CopilotChatDefaultLabels);\nconst instance = getCurrentInstance();\nconst copied = ref(false);\nlet copiedResetTimeout: ReturnType<typeof setTimeout> | null = null;\nconst vnodeProps = computed(\n  () => (instance?.vnode.props ?? {}) as Record<string, unknown>,\n);\n\nconst toolbarButtonClass = [\n  \"cpk:inline-flex cpk:h-8 cpk:w-8 cpk:items-center cpk:justify-center cpk:rounded-md cpk:p-0\",\n  \"cpk:cursor-pointer cpk:text-[rgb(93,93,93)] cpk:transition-colors cpk:hover:bg-[#E8E8E8]\",\n  \"cpk:hover:text-[rgb(93,93,93)] cpk:dark:text-[rgb(243,243,243)] cpk:dark:hover:bg-[#303030]\",\n  \"cpk:dark:hover:text-[rgb(243,243,243)] cpk:disabled:pointer-events-none cpk:disabled:opacity-50\",\n].join(\" \");\n\nfunction flattenUserMessageContent(content?: UserMessage[\"content\"]): string {\n  if (!content) {\n    return \"\";\n  }\n\n  if (typeof content === \"string\") {\n    return content;\n  }\n\n  return content\n    .map((part) => {\n      if (\n        part &&\n        typeof part === \"object\" &&\n        \"type\" in part &&\n        (part as { type?: unknown }).type === \"text\" &&\n        typeof (part as { text?: unknown }).text === \"string\"\n      ) {\n        return (part as { text: string }).text;\n      }\n      return \"\";\n    })\n    .filter((text) => text.length > 0)\n    .join(\"\\n\");\n}\n\nconst flattenedContent = computed(() =>\n  flattenUserMessageContent(props.message.content),\n);\nconst isMultiline = computed(() => flattenedContent.value.includes(\"\\n\"));\nfunction hasListener(listenerName: string) {\n  const listener = vnodeProps.value[listenerName];\n  if (Array.isArray(listener)) {\n    return listener.length > 0;\n  }\n  return !!listener;\n}\n\nconst hasEditAction = computed(() => hasListener(\"onEditMessage\"));\nconst showBranchNavigation = computed(\n  () => props.numberOfBranches > 1 && hasListener(\"onSwitchToBranch\"),\n);\n\nconst canGoPrev = computed(() => props.branchIndex > 0);\nconst canGoNext = computed(\n  () => props.branchIndex < props.numberOfBranches - 1,\n);\n\nfunction resetCopiedStateWithDelay() {\n  if (copiedResetTimeout) {\n    clearTimeout(copiedResetTimeout);\n  }\n  copied.value = true;\n  copiedResetTimeout = setTimeout(() => {\n    copied.value = false;\n    copiedResetTimeout = null;\n  }, 2000);\n}\n\nasync function handleCopyMessage() {\n  if (!flattenedContent.value) return;\n\n  if (\n    typeof navigator === \"undefined\" ||\n    typeof navigator.clipboard?.writeText !== \"function\"\n  ) {\n    return;\n  }\n\n  try {\n    await navigator.clipboard.writeText(flattenedContent.value);\n    resetCopiedStateWithDelay();\n  } catch (error) {\n    console.error(\"Failed to copy to clipboard:\", error);\n  }\n}\n\nfunction handleEditMessage() {\n  if (!hasEditAction.value) {\n    return;\n  }\n  const payload = { message: props.message };\n  emit(\"edit-message\", payload);\n}\n\nfunction switchToBranch(branchIndex: number) {\n  if (!showBranchNavigation.value) {\n    return;\n  }\n  const payload = {\n    branchIndex,\n    numberOfBranches: props.numberOfBranches,\n    message: props.message,\n  };\n  emit(\"switch-to-branch\", payload);\n}\n\nfunction goPrev() {\n  if (!canGoPrev.value) {\n    return;\n  }\n  switchToBranch(props.branchIndex - 1);\n}\n\nfunction goNext() {\n  if (!canGoNext.value) {\n    return;\n  }\n  switchToBranch(props.branchIndex + 1);\n}\n\nonBeforeUnmount(() => {\n  if (copiedResetTimeout) {\n    clearTimeout(copiedResetTimeout);\n  }\n});\n</script>\n\n<template>\n  <slot\n    name=\"layout\"\n    :message=\"message\"\n    :content=\"flattenedContent\"\n    :is-multiline=\"isMultiline\"\n    :show-branch-navigation=\"showBranchNavigation\"\n    :has-edit-action=\"hasEditAction\"\n    :branch-index=\"branchIndex\"\n    :number-of-branches=\"numberOfBranches\"\n    :can-go-prev=\"canGoPrev\"\n    :can-go-next=\"canGoNext\"\n    :on-copy=\"handleCopyMessage\"\n    :on-edit=\"handleEditMessage\"\n    :go-prev=\"goPrev\"\n    :go-next=\"goNext\"\n    :copied=\"copied\"\n  >\n    <div\n      data-copilotkit\n      data-testid=\"copilot-user-message\"\n      class=\"cpk:flex cpk:flex-col cpk:items-end cpk:group cpk:pt-10\"\n      :data-message-id=\"message.id\"\n      v-bind=\"$attrs\"\n    >\n      <slot\n        name=\"message-renderer\"\n        :message=\"message\"\n        :content=\"flattenedContent\"\n        :is-multiline=\"isMultiline\"\n      >\n        <div\n          class=\"cpk:prose cpk:dark:prose-invert cpk:bg-muted cpk:relative cpk:max-w-[80%] cpk:rounded-[18px] cpk:px-4 cpk:py-1.5 cpk:inline-block cpk:whitespace-pre-wrap\"\n          :data-multiline=\"isMultiline ? 'true' : undefined\"\n          :class=\"{ 'cpk:py-3': isMultiline }\"\n        >\n          {{ flattenedContent }}\n        </div>\n      </slot>\n\n      <slot\n        name=\"toolbar\"\n        :message=\"message\"\n        :show-branch-navigation=\"showBranchNavigation\"\n        :has-edit-action=\"hasEditAction\"\n      >\n        <div\n          class=\"cpk:w-full cpk:bg-transparent cpk:flex cpk:items-center cpk:justify-end cpk:-mr-[5px] cpk:mt-[4px] cpk:invisible cpk:group-hover:visible\"\n        >\n          <div class=\"cpk:flex cpk:items-center cpk:gap-1 cpk:justify-end\">\n            <slot name=\"toolbar-items\" />\n\n            <slot\n              name=\"copy-button\"\n              :on-copy=\"handleCopyMessage\"\n              :copied=\"copied\"\n              :label=\"labels.userMessageToolbarCopyMessageLabel\"\n            >\n              <button\n                data-testid=\"copilot-user-copy-button\"\n                type=\"button\"\n                :class=\"toolbarButtonClass\"\n                :aria-label=\"labels.userMessageToolbarCopyMessageLabel\"\n                :title=\"labels.userMessageToolbarCopyMessageLabel\"\n                @click=\"handleCopyMessage\"\n              >\n                <IconCheck v-if=\"copied\" class=\"cpk:size-[18px]\" />\n                <IconCopy v-else class=\"cpk:size-[18px]\" />\n              </button>\n            </slot>\n\n            <slot\n              v-if=\"hasEditAction\"\n              name=\"edit-button\"\n              :on-edit=\"handleEditMessage\"\n              :label=\"labels.userMessageToolbarEditMessageLabel\"\n            >\n              <button\n                type=\"button\"\n                :class=\"toolbarButtonClass\"\n                :aria-label=\"labels.userMessageToolbarEditMessageLabel\"\n                :title=\"labels.userMessageToolbarEditMessageLabel\"\n                @click=\"handleEditMessage\"\n              >\n                <IconEdit class=\"cpk:size-[18px]\" />\n              </button>\n            </slot>\n\n            <slot\n              v-if=\"showBranchNavigation\"\n              name=\"branch-navigation\"\n              :branch-index=\"branchIndex\"\n              :number-of-branches=\"numberOfBranches\"\n              :can-go-prev=\"canGoPrev\"\n              :can-go-next=\"canGoNext\"\n              :go-prev=\"goPrev\"\n              :go-next=\"goNext\"\n            >\n              <div class=\"cpk:flex cpk:items-center cpk:gap-1\">\n                <button\n                  type=\"button\"\n                  :class=\"toolbarButtonClass\"\n                  class=\"cpk:h-6 cpk:w-6 cpk:p-0\"\n                  :disabled=\"!canGoPrev\"\n                  aria-label=\"Previous branch\"\n                  title=\"Previous branch\"\n                  @click=\"goPrev\"\n                >\n                  <IconChevronLeft class=\"cpk:size-[20px]\" />\n                </button>\n                <span\n                  class=\"cpk:text-sm cpk:text-muted-foreground cpk:px-0 cpk:font-medium\"\n                >\n                  {{ branchIndex + 1 }}/{{ numberOfBranches }}\n                </span>\n                <button\n                  type=\"button\"\n                  :class=\"toolbarButtonClass\"\n                  class=\"cpk:h-6 cpk:w-6 cpk:p-0\"\n                  :disabled=\"!canGoNext\"\n                  aria-label=\"Next branch\"\n                  title=\"Next branch\"\n                  @click=\"goNext\"\n                >\n                  <IconChevronRight class=\"cpk:size-[20px]\" />\n                </button>\n              </div>\n            </slot>\n          </div>\n        </div>\n      </slot>\n    </div>\n  </slot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useSlots, watch } from \"vue\";\nimport type { Component } from \"vue\";\nimport type {\n  ActivityMessage,\n  AssistantMessage,\n  Message,\n  ReasoningMessage,\n  ToolMessage,\n  UserMessage,\n} from \"@ag-ui/core\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkit/shared\";\nimport type {\n  InterruptRenderProps,\n  VueCustomMessageRendererProps,\n} from \"../../types\";\nimport { getThreadClone } from \"../../hooks/use-agent\";\nimport { useCopilotKit } from \"../../providers/useCopilotKit\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport CopilotChatAssistantMessage from \"./CopilotChatAssistantMessage.vue\";\nimport CopilotChatReasoningMessage from \"./CopilotChatReasoningMessage.vue\";\nimport CopilotChatUserMessage from \"./CopilotChatUserMessage.vue\";\n\ninterface MessageMetaProps {\n  message: Message;\n  position: \"before\" | \"after\";\n  runId: string;\n  messageIndex: number;\n  messageIndexInRun: number;\n  numberOfMessagesInRun: number;\n  agentId: string;\n  stateSnapshot: unknown;\n}\n\ninterface ActivitySlotProps {\n  activityType: string;\n  content: unknown;\n  message: ActivityMessage;\n  agent: unknown;\n}\n\ntype InterruptSlotProps = InterruptRenderProps<unknown, unknown>;\ntype CustomMessagePosition = VueCustomMessageRendererProps[\"position\"];\ntype ResolvedCustomMessageRenderer = {\n  renderer:\n    | Component<VueCustomMessageRendererProps>\n    | ((props: VueCustomMessageRendererProps) => unknown);\n  props: VueCustomMessageRendererProps;\n};\n\nconst props = withDefaults(\n  defineProps<{\n    messages?: Message[];\n    isRunning?: boolean;\n  }>(),\n  {\n    messages: () => [],\n    isRunning: false,\n  },\n);\n\ndefineSlots<{\n  \"message-before\"?: (props: MessageMetaProps) => unknown;\n  \"message-after\"?: (props: MessageMetaProps) => unknown;\n  interrupt?: (props: InterruptSlotProps) => unknown;\n  \"assistant-message\"?: (props: {\n    message: AssistantMessage;\n    messages: Message[];\n    isRunning: boolean;\n  }) => unknown;\n  \"user-message\"?: (props: { message: UserMessage }) => unknown;\n  \"reasoning-message\"?: (props: {\n    message: ReasoningMessage;\n    messages: Message[];\n    isRunning: boolean;\n  }) => unknown;\n  \"activity-message\"?: (props: ActivitySlotProps) => unknown;\n  [key: string]: ((props: any) => unknown) | undefined;\n  cursor?: () => unknown;\n  \"tool-call\"?: (props: {\n    name: string;\n    args: unknown;\n    status: string;\n    result: string | undefined;\n    toolCall: unknown;\n    toolMessage: ToolMessage | undefined;\n  }) => unknown;\n  [key: `tool-call-${string}`]: (props: {\n    name: string;\n    args: unknown;\n    status: string;\n    result: string | undefined;\n    toolCall: unknown;\n    toolMessage: ToolMessage | undefined;\n  }) => unknown;\n}>();\n\nconst { copilotkit } = useCopilotKit();\nconst config = useCopilotChatConfiguration();\nconst stateTick = ref(0);\nconst interruptState = ref<InterruptSlotProps | null>(null);\nconst componentSlots = useSlots() as Record<string, (props?: any) => unknown>;\nconst forwardedSlotNames = computed(() => Object.keys(componentSlots));\nconst resolvedAgentId = computed(\n  () => config.value?.agentId ?? DEFAULT_AGENT_ID,\n);\nconst resolvedThreadAgent = computed(() => {\n  const agentId = resolvedAgentId.value;\n  const registryAgent = copilotkit.value.getAgent(agentId);\n  return getThreadClone(registryAgent, config.value?.threadId) ?? registryAgent;\n});\n\nwatch(\n  [\n    resolvedAgentId,\n    () => config.value?.threadId,\n    () => copilotkit.value,\n    () => copilotkit.value.runtimeConnectionStatus,\n  ],\n  ([_agentId, threadId], _prev, onCleanup) => {\n    const registryAgent = copilotkit.value.getAgent(resolvedAgentId.value);\n    const agent = getThreadClone(registryAgent, threadId) ?? registryAgent;\n    if (!agent) return;\n\n    const sub = agent.subscribe({\n      onStateChanged: () => {\n        stateTick.value += 1;\n      },\n      onRunStartedEvent: () => {\n        stateTick.value += 1;\n      },\n      onRunFinishedEvent: () => {\n        stateTick.value += 1;\n      },\n      onRunErrorEvent: () => {\n        stateTick.value += 1;\n      },\n    });\n\n    onCleanup(() => sub.unsubscribe());\n  },\n  { immediate: true },\n);\n\nwatch(\n  () => copilotkit.value,\n  (core, _previous, onCleanup) => {\n    interruptState.value = core.interruptState as InterruptSlotProps | null;\n    const sub = core.subscribe({\n      onInterruptStateChanged: ({ interruptState: nextInterruptState }) => {\n        interruptState.value = nextInterruptState as InterruptSlotProps | null;\n      },\n      onRuntimeConnectionStatusChanged: () => {\n        stateTick.value += 1;\n      },\n    });\n\n    onCleanup(() => sub.unsubscribe());\n  },\n  { immediate: true },\n);\n\nfunction deduplicateMessages(messages: Message[]): Message[] {\n  const byId = new Map<string, Message>();\n  for (const message of messages) {\n    const existing = byId.get(message.id);\n    if (\n      existing &&\n      message.role === \"assistant\" &&\n      existing.role === \"assistant\"\n    ) {\n      const content = message.content || existing.content;\n      const toolCalls = message.toolCalls ?? existing.toolCalls;\n      byId.set(message.id, {\n        ...existing,\n        ...message,\n        content,\n        toolCalls,\n      } as AssistantMessage);\n    } else {\n      byId.set(message.id, message);\n    }\n  }\n  return [...byId.values()];\n}\n\nconst deduplicatedMessages = computed(() =>\n  deduplicateMessages(props.messages),\n);\nconst lastMessage = computed(() => props.messages[props.messages.length - 1]);\nconst showCursor = computed(\n  () => props.isRunning && lastMessage.value?.role !== \"reasoning\",\n);\n\nwatch(\n  [() => props.messages.length, () => deduplicatedMessages.value.length],\n  ([messageCount, deduplicatedCount]) => {\n    if (\n      process.env.NODE_ENV === \"development\" &&\n      deduplicatedCount < messageCount\n    ) {\n      console.warn(\n        `CopilotChatMessageView: Deduplicated ${messageCount - deduplicatedCount} message(s) with duplicate IDs.`,\n      );\n    }\n  },\n  { immediate: true },\n);\n\nfunction getMeta(\n  message: Message,\n): Omit<MessageMetaProps, \"position\" | \"message\"> {\n  stateTick.value += 0;\n  const agentId = resolvedAgentId.value;\n  const threadId = config.value?.threadId ?? \"\";\n  const core = copilotkit.value;\n\n  const resolvedRunId =\n    core.getRunIdForMessage(agentId, threadId, message.id) ??\n    core.getRunIdsForThread(agentId, threadId).slice(-1)[0];\n  const runId = resolvedRunId ?? `missing-run-id:${message.id}`;\n\n  const agent = resolvedThreadAgent.value ?? core.getAgent(agentId);\n\n  const messageIdsInRun =\n    resolvedRunId && agent\n      ? agent.messages\n          .filter(\n            (msg) =>\n              core.getRunIdForMessage(agentId, threadId, msg.id) ===\n              resolvedRunId,\n          )\n          .map((msg) => msg.id)\n      : [message.id];\n\n  const rawMessageIndex = agent\n    ? agent.messages.findIndex((msg) => msg.id === message.id)\n    : -1;\n  const messageIndex = rawMessageIndex >= 0 ? rawMessageIndex : 0;\n  const messageIndexInRun = resolvedRunId\n    ? Math.max(messageIdsInRun.indexOf(message.id), 0)\n    : 0;\n  const numberOfMessagesInRun = resolvedRunId ? messageIdsInRun.length : 1;\n  const stateSnapshot = resolvedRunId\n    ? core.getStateByRun(agentId, threadId, resolvedRunId)\n    : undefined;\n\n  return {\n    runId,\n    messageIndex,\n    messageIndexInRun,\n    numberOfMessagesInRun,\n    agentId,\n    stateSnapshot,\n  };\n}\n\nfunction getActivitySlotName(activityType: string): `activity-${string}` {\n  return `activity-${activityType}`;\n}\n\nfunction resolveCustomMessageRenderer(\n  message: Message,\n  position: CustomMessagePosition,\n): ResolvedCustomMessageRenderer | null {\n  stateTick.value += 0;\n  const slotName = position === \"before\" ? \"message-before\" : \"message-after\";\n  if (componentSlots[slotName]) {\n    return null;\n  }\n\n  const agentId = resolvedAgentId.value;\n  const renderers = [...copilotkit.value.renderCustomMessages]\n    .filter(\n      (renderer) =>\n        renderer.agentId === undefined || renderer.agentId === agentId,\n    )\n    .sort((a, b) => {\n      const aHasAgent = a.agentId !== undefined;\n      const bHasAgent = b.agentId !== undefined;\n      if (aHasAgent === bHasAgent) return 0;\n      return aHasAgent ? -1 : 1;\n    });\n\n  const selected = renderers[0];\n  if (!selected?.render) {\n    return null;\n  }\n\n  return {\n    renderer: selected.render as ResolvedCustomMessageRenderer[\"renderer\"],\n    props: {\n      ...getMeta(message),\n      message,\n      position,\n    },\n  };\n}\n\nfunction resolveActivityRenderer(\n  message: ActivityMessage,\n): { renderer: Component; props: ActivitySlotProps } | null {\n  stateTick.value += 0;\n\n  const agentId = resolvedAgentId.value;\n  const renderer = [...copilotkit.value.renderActivityMessages]\n    .filter(\n      (entry) =>\n        entry.activityType === message.activityType &&\n        (entry.agentId === undefined || entry.agentId === agentId),\n    )\n    .sort((a, b) => {\n      const aScoped = a.agentId !== undefined;\n      const bScoped = b.agentId !== undefined;\n      if (aScoped === bScoped) return 0;\n      return aScoped ? -1 : 1;\n    })[0];\n\n  if (!renderer) return null;\n  const parsed = renderer.content.safeParse(message.content);\n  if (!parsed.success) return null;\n\n  return {\n    renderer: renderer.render as Component,\n    props: {\n      activityType: message.activityType,\n      content: parsed.data,\n      message,\n      agent: resolvedThreadAgent.value,\n    },\n  };\n}\n\nfunction resolveToolMessage(\n  message: Message,\n  toolCallId: string,\n): ToolMessage | undefined {\n  return props.messages.find(\n    (candidate) =>\n      candidate.role === \"tool\" &&\n      (candidate as ToolMessage).toolCallId === toolCallId,\n  ) as ToolMessage | undefined;\n}\n</script>\n\n<template>\n  <div data-copilotkit class=\"cpk:flex cpk:flex-col\" v-bind=\"$attrs\">\n    <template v-for=\"message in deduplicatedMessages\" :key=\"message.id\">\n      <slot\n        v-if=\"componentSlots['message-before']\"\n        name=\"message-before\"\n        :message=\"message\"\n        position=\"before\"\n        :run-id=\"getMeta(message).runId\"\n        :message-index=\"getMeta(message).messageIndex\"\n        :message-index-in-run=\"getMeta(message).messageIndexInRun\"\n        :number-of-messages-in-run=\"getMeta(message).numberOfMessagesInRun\"\n        :agent-id=\"getMeta(message).agentId\"\n        :state-snapshot=\"getMeta(message).stateSnapshot\"\n      />\n      <component\n        v-else-if=\"resolveCustomMessageRenderer(message, 'before')\"\n        :is=\"resolveCustomMessageRenderer(message, 'before')!.renderer\"\n        v-bind=\"resolveCustomMessageRenderer(message, 'before')!.props\"\n      />\n\n      <slot\n        v-if=\"message.role === 'assistant'\"\n        name=\"assistant-message\"\n        :message=\"message\"\n        :messages=\"messages\"\n        :is-running=\"isRunning\"\n      >\n        <CopilotChatAssistantMessage\n          :message=\"message\"\n          :messages=\"messages\"\n          :is-running=\"isRunning\"\n        >\n          <template\n            v-for=\"slotName in forwardedSlotNames\"\n            :key=\"slotName\"\n            #[slotName]=\"slotProps\"\n          >\n            <slot :name=\"slotName\" v-bind=\"slotProps\" />\n          </template>\n        </CopilotChatAssistantMessage>\n      </slot>\n\n      <slot\n        v-else-if=\"message.role === 'user'\"\n        name=\"user-message\"\n        :message=\"message\"\n      >\n        <CopilotChatUserMessage :message=\"message\">\n          <template\n            v-for=\"slotName in forwardedSlotNames\"\n            :key=\"slotName\"\n            #[slotName]=\"slotProps\"\n          >\n            <slot :name=\"slotName\" v-bind=\"slotProps\" />\n          </template>\n        </CopilotChatUserMessage>\n      </slot>\n\n      <slot\n        v-else-if=\"message.role === 'reasoning'\"\n        name=\"reasoning-message\"\n        :message=\"message\"\n        :messages=\"messages\"\n        :is-running=\"isRunning\"\n      >\n        <CopilotChatReasoningMessage\n          :message=\"message\"\n          :messages=\"messages\"\n          :is-running=\"isRunning\"\n        />\n      </slot>\n\n      <slot\n        v-else-if=\"message.role === 'activity'\"\n        :name=\"getActivitySlotName(message.activityType)\"\n        :activity-type=\"message.activityType\"\n        :content=\"message.content\"\n        :message=\"message\"\n        :agent=\"resolvedThreadAgent\"\n      >\n        <slot\n          name=\"activity-message\"\n          :activity-type=\"message.activityType\"\n          :content=\"message.content\"\n          :message=\"message\"\n          :agent=\"resolvedThreadAgent\"\n        >\n          <component\n            v-if=\"resolveActivityRenderer(message)\"\n            :is=\"resolveActivityRenderer(message)!.renderer\"\n            v-bind=\"resolveActivityRenderer(message)!.props\"\n          />\n        </slot>\n      </slot>\n\n      <slot\n        v-if=\"componentSlots['message-after']\"\n        name=\"message-after\"\n        :message=\"message\"\n        position=\"after\"\n        :run-id=\"getMeta(message).runId\"\n        :message-index=\"getMeta(message).messageIndex\"\n        :message-index-in-run=\"getMeta(message).messageIndexInRun\"\n        :number-of-messages-in-run=\"getMeta(message).numberOfMessagesInRun\"\n        :agent-id=\"getMeta(message).agentId\"\n        :state-snapshot=\"getMeta(message).stateSnapshot\"\n      />\n      <component\n        v-else-if=\"resolveCustomMessageRenderer(message, 'after')\"\n        :is=\"resolveCustomMessageRenderer(message, 'after')!.renderer\"\n        v-bind=\"resolveCustomMessageRenderer(message, 'after')!.props\"\n      />\n    </template>\n\n    <slot\n      v-if=\"interruptState\"\n      name=\"interrupt\"\n      :event=\"interruptState.event\"\n      :result=\"interruptState.result\"\n      :resolve=\"interruptState.resolve\"\n    />\n\n    <slot v-if=\"showCursor\" name=\"cursor\">\n      <div\n        class=\"cpk:w-[11px] cpk:h-[11px] cpk:rounded-full cpk:bg-foreground cpk:animate-pulse cpk:ml-1\"\n        data-testid=\"copilot-loading-cursor\"\n      />\n    </slot>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { Component } from \"vue\";\nimport { computed } from \"vue\";\nimport { IconLoader2 } from \"../icons\";\n\nconst props = withDefaults(\n  defineProps<{\n    icon?: Component;\n    isLoading?: boolean;\n    disabled?: boolean;\n    type?: \"button\" | \"submit\" | \"reset\";\n  }>(),\n  {\n    icon: undefined,\n    isLoading: false,\n    disabled: false,\n    type: \"button\",\n  },\n);\n\nconst isDisabled = computed(() => props.isLoading || props.disabled);\n</script>\n\n<template>\n  <button\n    data-copilotkit\n    data-slot=\"suggestion-pill\"\n    data-testid=\"copilot-chat-suggestion-pill\"\n    :type=\"type\"\n    :aria-busy=\"isLoading ? 'true' : undefined\"\n    :disabled=\"isDisabled\"\n    class=\"cpk:group cpk:inline-flex cpk:h-7 cpk:w-fit cpk:items-center cpk:gap-1 cpk:rounded-full cpk:border cpk:border-border/60 cpk:bg-background cpk:px-2.5 cpk:text-[11px] cpk:leading-none cpk:text-foreground cpk:transition-colors cpk:cursor-pointer cpk:hover:bg-accent/60 cpk:hover:text-foreground cpk:focus-visible:outline-none cpk:focus-visible:ring-2 cpk:focus-visible:ring-ring cpk:focus-visible:ring-offset-2 cpk:focus-visible:ring-offset-background cpk:disabled:cursor-not-allowed cpk:disabled:text-muted-foreground cpk:disabled:hover:bg-background cpk:disabled:hover:text-muted-foreground cpk:pointer-events-auto cpk:sm:h-8 cpk:sm:gap-1.5 cpk:sm:px-3 cpk:sm:text-xs\"\n    v-bind=\"$attrs\"\n  >\n    <span\n      v-if=\"isLoading\"\n      class=\"cpk:flex cpk:h-3.5 cpk:w-3.5 cpk:items-center cpk:justify-center cpk:text-muted-foreground cpk:sm:h-4 cpk:sm:w-4\"\n    >\n      <IconLoader2\n        class=\"cpk:h-3.5 cpk:w-3.5 cpk:animate-spin cpk:sm:h-4 cpk:sm:w-4\"\n        aria-hidden=\"true\"\n      />\n    </span>\n    <span\n      v-else-if=\"$slots.icon || icon\"\n      class=\"cpk:flex cpk:h-3.5 cpk:w-3.5 cpk:items-center cpk:justify-center cpk:text-muted-foreground cpk:sm:h-4 cpk:sm:w-4\"\n    >\n      <slot name=\"icon\">\n        <component :is=\"icon\" />\n      </slot>\n    </span>\n    <span class=\"cpk:whitespace-nowrap cpk:font-medium cpk:leading-none\">\n      <slot />\n    </span>\n  </button>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from \"vue\";\nimport type { Suggestion } from \"@copilotkit/core\";\nimport CopilotChatSuggestionPill from \"./CopilotChatSuggestionPill.vue\";\nimport type {\n  CopilotChatSuggestionViewContainerSlotProps,\n  CopilotChatSuggestionViewLayoutSlotProps,\n  CopilotChatSuggestionViewSuggestionSlotProps,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n  defineProps<{\n    suggestions: Suggestion[];\n    loadingIndexes?: ReadonlyArray<number>;\n  }>(),\n  {\n    loadingIndexes: () => [],\n  },\n);\n\ndefineSlots<{\n  suggestion?: (props: CopilotChatSuggestionViewSuggestionSlotProps) => unknown;\n  container?: (props: CopilotChatSuggestionViewContainerSlotProps) => unknown;\n  layout?: (props: CopilotChatSuggestionViewLayoutSlotProps) => unknown;\n}>();\n\nconst emit = defineEmits<{\n  \"select-suggestion\": [suggestion: Suggestion, index: number];\n}>();\n\nconst attrs = useAttrs();\nconst loadingSet = computed(() => new Set(props.loadingIndexes));\nconst containerClass = computed(() => [\n  \"cpk:flex cpk:flex-wrap cpk:items-center cpk:gap-1.5 cpk:pl-0 cpk:pr-4 cpk:pointer-events-none cpk:sm:gap-2 cpk:sm:px-0\",\n  attrs.class,\n]);\nconst containerAttrs = computed(() => {\n  const { class: _className, ...rest } = attrs;\n  return rest;\n});\n\nfunction isLoading(index: number, suggestion: Suggestion) {\n  return loadingSet.value.has(index) || suggestion.isLoading === true;\n}\n\nfunction handleSelectSuggestion(suggestion: Suggestion, index: number) {\n  emit(\"select-suggestion\", suggestion, index);\n}\n\nconst slotProps = computed<CopilotChatSuggestionViewContainerSlotProps>(() => ({\n  suggestions: props.suggestions,\n  loadingIndexes: props.loadingIndexes,\n  onSelectSuggestion: handleSelectSuggestion,\n  containerClass: containerClass.value,\n  containerAttrs: containerAttrs.value as Record<string, unknown>,\n}));\n</script>\n\n<template>\n  <slot name=\"layout\" v-bind=\"slotProps\">\n    <slot name=\"container\" v-bind=\"slotProps\">\n      <div\n        data-copilotkit\n        data-testid=\"copilot-chat-suggestion-view\"\n        :class=\"containerClass\"\n        v-bind=\"containerAttrs\"\n      >\n        <template\n          v-for=\"(suggestion, index) in suggestions\"\n          :key=\"`${suggestion.title}-${index}`\"\n        >\n          <slot\n            name=\"suggestion\"\n            :suggestion=\"suggestion\"\n            :index=\"index\"\n            :is-loading=\"isLoading(index, suggestion)\"\n            :on-select=\"() => handleSelectSuggestion(suggestion, index)\"\n          >\n            <CopilotChatSuggestionPill\n              :is-loading=\"isLoading(index, suggestion)\"\n              type=\"button\"\n              @click=\"handleSelectSuggestion(suggestion, index)\"\n            >\n              {{ suggestion.title }}\n            </CopilotChatSuggestionPill>\n          </slot>\n        </template>\n      </div>\n    </slot>\n  </slot>\n</template>\n","export type AutoScrollMode = \"pin-to-bottom\" | \"pin-to-send\" | \"none\";\n\nconst VALID: readonly AutoScrollMode[] = [\n  \"pin-to-bottom\",\n  \"pin-to-send\",\n  \"none\",\n];\n\nexport function normalizeAutoScroll(\n  value: AutoScrollMode | boolean | undefined,\n): AutoScrollMode {\n  if (value === undefined) return \"pin-to-bottom\";\n  if (value === true) return \"pin-to-bottom\";\n  if (value === false) return \"none\";\n  if ((VALID as readonly string[]).includes(value)) return value;\n  return \"pin-to-bottom\";\n}\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  getCurrentInstance,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  useSlots,\n  watch,\n} from \"vue\";\nimport type { Message } from \"@ag-ui/core\";\nimport type { Suggestion } from \"@copilotkit/core\";\nimport type { Attachment } from \"@copilotkit/shared\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport { CopilotChatDefaultLabels } from \"../../providers/types\";\nimport { useKeyboardHeight } from \"../../hooks/use-keyboard-height\";\nimport { usePinToSend } from \"../../hooks/use-pin-to-send\";\nimport { IconChevronDown } from \"../icons\";\nimport CopilotChatInput from \"./CopilotChatInput.vue\";\nimport CopilotChatAttachmentQueue from \"./CopilotChatAttachmentQueue.vue\";\nimport CopilotChatMessageView from \"./CopilotChatMessageView.vue\";\nimport CopilotChatSuggestionView from \"./CopilotChatSuggestionView.vue\";\nimport { normalizeAutoScroll } from \"./normalize-auto-scroll\";\nimport type {\n  CopilotChatInputMode,\n  CopilotChatInterruptSlotProps,\n  CopilotChatViewProps,\n  ToolsMenuItem,\n} from \"./types\";\n\n// Vertical gap between the scroll-to-bottom button and the input container.\n// Mirrors React `CopilotChatView` `SCROLL_BUTTON_OFFSET`.\nconst SCROLL_BUTTON_OFFSET = 16;\nconst SCROLL_BOTTOM_THRESHOLD = 12;\n\nconst props = withDefaults(defineProps<CopilotChatViewProps>(), {\n  messages: () => [],\n  autoScroll: true,\n  isRunning: false,\n  suggestions: () => [],\n  suggestionLoadingIndexes: () => [],\n  welcomeScreen: true,\n  inputValue: undefined,\n  inputMode: \"input\",\n  inputToolsMenu: () => [],\n  isConnecting: false,\n  hasExplicitThreadId: false,\n  onFinishTranscribeWithAudio: undefined,\n});\n\ndefineSlots<{\n  \"message-view\"?: (props: {\n    messages: Message[];\n    isRunning: boolean;\n  }) => unknown;\n  \"scroll-view\"?: (props: {\n    messages: Message[];\n    isRunning: boolean;\n    suggestions: Suggestion[];\n    loadingIndexes: ReadonlyArray<number>;\n    messagePaddingBottom: string;\n    showScrollToBottomButton: boolean;\n    onSelectSuggestion: (suggestion: Suggestion, index: number) => void;\n    onScroll: () => void;\n    scrollToBottom: () => void;\n  }) => unknown;\n  feather?: () => unknown;\n  \"scroll-to-bottom-button\"?: (props: { onClick: () => void }) => unknown;\n  interrupt?: (props: CopilotChatInterruptSlotProps) => unknown;\n  input?: (props: {\n    modelValue: string;\n    isRunning: boolean;\n    inputMode: CopilotChatInputMode;\n    inputToolsMenu: (ToolsMenuItem | \"-\")[];\n    attachments: Attachment[];\n    onUpdateModelValue: (value: string) => void;\n    onSubmitMessage: (value: string) => void;\n    onStop?: () => void;\n    onAddFile: () => void;\n    onStartTranscribe: () => void;\n    onCancelTranscribe: () => void;\n    onFinishTranscribe: () => void;\n    onFinishTranscribeWithAudio: (audioBlob: Blob) => void | Promise<void>;\n  }) => unknown;\n  \"suggestion-view\"?: (props: {\n    suggestions: Suggestion[];\n    loadingIndexes: ReadonlyArray<number>;\n    onSelectSuggestion: (suggestion: Suggestion, index: number) => void;\n  }) => unknown;\n  \"welcome-screen\"?: (props: {\n    suggestions: Suggestion[];\n    loadingIndexes: ReadonlyArray<number>;\n    attachments: Attachment[];\n    modelValue: string;\n    isRunning: boolean;\n    inputMode: CopilotChatInputMode;\n    inputToolsMenu: (ToolsMenuItem | \"-\")[];\n    onUpdateModelValue: (value: string) => void;\n    onSubmitMessage: (value: string) => void;\n    onStop?: () => void;\n    onAddFile: () => void;\n    onStartTranscribe: () => void;\n    onCancelTranscribe: () => void;\n    onFinishTranscribe: () => void;\n    onFinishTranscribeWithAudio: (audioBlob: Blob) => void | Promise<void>;\n    onSelectSuggestion: (suggestion: Suggestion, index: number) => void;\n  }) => unknown;\n  \"welcome-message\"?: () => unknown;\n  [key: string]: ((props: any) => unknown) | undefined;\n}>();\n\nconst emit = defineEmits<{\n  \"submit-message\": [value: string];\n  stop: [];\n  \"input-change\": [value: string];\n  \"select-suggestion\": [suggestion: Suggestion, index: number];\n  \"add-file\": [];\n  \"start-transcribe\": [];\n  \"cancel-transcribe\": [];\n  \"finish-transcribe\": [];\n}>();\n\nconst config = useCopilotChatConfiguration();\nconst labels = computed(() => config.value?.labels ?? CopilotChatDefaultLabels);\nconst instance = getCurrentInstance();\nconst componentSlots = useSlots();\n\nconst scrollContainerRef = ref<HTMLElement | null>(null);\nconst scrollContentRef = ref<HTMLElement | null>(null);\nconst spacerRef = ref<HTMLElement | null>(null);\nconst inputContainerRef = ref<HTMLElement | null>(null);\nconst inputContainerHeight = ref(0);\nconst isAtBottom = ref(true);\nconst isControlledInput = computed(() => props.inputValue !== undefined);\nconst localInputValue = ref(props.inputValue ?? \"\");\n\n// Normalize the `autoScroll` prop into the canonical mode triplet\n// (`pin-to-bottom` | `pin-to-send` | `none`). Boolean back-compat is\n// preserved by `normalizeAutoScroll` (parity with React).\nconst autoScrollMode = computed(() => normalizeAutoScroll(props.autoScroll));\nconst isPinToBottomMode = computed(\n  () => autoScrollMode.value === \"pin-to-bottom\",\n);\nconst isPinToSendMode = computed(() => autoScrollMode.value === \"pin-to-send\");\n\n// `usePinToSend` is always wired but bails internally when the spacer ref\n// is null — i.e. unless `pin-to-send` mode is active and the spacer div\n// has been mounted in the template.\nusePinToSend({\n  scrollRef: scrollContainerRef,\n  contentRef: scrollContentRef,\n  spacerRef,\n  topOffset: 16,\n});\n\n// Track mobile keyboard state so the input can translate itself above the\n// on-screen keyboard (matches React CopilotChatView behavior).\nconst { isKeyboardOpen, keyboardHeight } = useKeyboardHeight();\nconst effectiveKeyboardHeight = computed(() =>\n  isKeyboardOpen.value ? keyboardHeight.value : 0,\n);\n\nconst resolvedInputValue = computed(() =>\n  isControlledInput.value ? (props.inputValue ?? \"\") : localInputValue.value,\n);\nconst hasSuggestions = computed(\n  () =>\n    !props.isConnecting &&\n    !props.isRunning &&\n    Array.isArray(props.suggestions) &&\n    props.suggestions.length > 0,\n);\nconst hasAttachments = computed(\n  () => Array.isArray(props.attachments) && props.attachments.length > 0,\n);\nconst vnodeProps = computed(\n  () => (instance?.vnode.props ?? {}) as Record<string, unknown>,\n);\nconst forwardedMessageViewSlotNames = computed(() =>\n  Object.keys(componentSlots).filter(\n    (slotName) =>\n      slotName !== \"message-view\" &&\n      slotName !== \"scroll-view\" &&\n      slotName !== \"feather\" &&\n      slotName !== \"scroll-to-bottom-button\" &&\n      slotName !== \"input\" &&\n      slotName !== \"suggestion-view\" &&\n      slotName !== \"welcome-screen\" &&\n      slotName !== \"welcome-message\",\n  ),\n);\nconst shouldShowWelcomeScreen = computed(\n  () =>\n    props.messages.length === 0 &&\n    props.welcomeScreen !== false &&\n    !props.isConnecting &&\n    !props.hasExplicitThreadId,\n);\nconst hasAddFileAction = computed(() => hasListener(\"onAddFile\"));\nconst hasStopAction = computed(() => hasListener(\"onStop\"));\nconst hasStartTranscribeAction = computed(() =>\n  hasListener(\"onStartTranscribe\"),\n);\nconst hasCancelTranscribeAction = computed(() =>\n  hasListener(\"onCancelTranscribe\"),\n);\nconst hasFinishTranscribeAction = computed(() =>\n  hasListener(\"onFinishTranscribe\"),\n);\nconst hasFinishTranscribeWithAudioAction = computed(\n  () => typeof props.onFinishTranscribeWithAudio === \"function\",\n);\n// Mirrors React: `paddingBottom = inputContainerHeight + (hasSuggestions ? 4 : 32)`.\n// React intentionally does NOT add bonus padding for attachments — the\n// attachment queue lives inside the input overlay, so its height is already\n// captured by the overlay's measured `inputContainerHeight`.\nconst messagePaddingBottom = computed(\n  () => `${inputContainerHeight.value + (hasSuggestions.value ? 4 : 32)}px`,\n);\nconst showScrollToBottomButton = computed(\n  () => !shouldShowWelcomeScreen.value && !isAtBottom.value,\n);\n\nlet inputResizeObserver: ResizeObserver | null = null;\nlet contentResizeObserver: ResizeObserver | null = null;\n\nfunction attachInputOverlayObserver() {\n  if (typeof ResizeObserver === \"undefined\") return;\n\n  inputResizeObserver?.disconnect();\n  inputResizeObserver = null;\n\n  const el = inputContainerRef.value;\n  if (!el) return;\n\n  inputResizeObserver = new ResizeObserver((entries) => {\n    const wasAtBottom = isAtBottom.value;\n    const measured = entries[0]?.contentRect?.height;\n    if (typeof measured === \"number\") {\n      inputContainerHeight.value = measured;\n    } else {\n      syncInputContainerHeight();\n    }\n    updateIsAtBottom();\n    if (isPinToBottomMode.value && wasAtBottom) {\n      scrollToBottom(\"auto\");\n    }\n  });\n  inputResizeObserver.observe(el);\n}\n\nfunction attachScrollContentObserver() {\n  if (typeof ResizeObserver === \"undefined\") return;\n\n  contentResizeObserver?.disconnect();\n  contentResizeObserver = null;\n\n  const el = scrollContentRef.value;\n  if (!el) return;\n\n  contentResizeObserver = new ResizeObserver(() => {\n    const wasAtBottom = isAtBottom.value;\n    updateIsAtBottom();\n    if (isPinToBottomMode.value && wasAtBottom) {\n      scrollToBottom(\"auto\");\n    }\n  });\n  contentResizeObserver.observe(el);\n}\n\n// When the welcome screen disappears and the main chat view (with the input\n// overlay) appears, the template-ref elements become non-null. Re-attach\n// observers that were skipped during the initial mount.\nwatch(shouldShowWelcomeScreen, async (show) => {\n  if (show) return;\n  await nextTick();\n  syncInputContainerHeight();\n  attachInputOverlayObserver();\n  attachScrollContentObserver();\n});\n\nwatch(\n  () => props.inputValue,\n  (next) => {\n    if (isControlledInput.value) {\n      localInputValue.value = next ?? \"\";\n    }\n  },\n);\n\nwatch(\n  [() => props.messages, () => props.suggestions, () => props.isRunning],\n  async () => {\n    const wasAtBottom = isAtBottom.value;\n    await nextTick();\n    if (!isPinToBottomMode.value || !wasAtBottom) {\n      return;\n    }\n    scrollToBottom(\"auto\");\n    if (typeof requestAnimationFrame === \"function\") {\n      requestAnimationFrame(() => {\n        scrollToBottom(\"auto\");\n      });\n    }\n  },\n  { deep: true },\n);\n\nfunction updateIsAtBottom() {\n  const element = scrollContainerRef.value;\n  if (!element) {\n    isAtBottom.value = true;\n    return;\n  }\n\n  const distance =\n    element.scrollHeight - element.scrollTop - element.clientHeight;\n  isAtBottom.value = distance <= SCROLL_BOTTOM_THRESHOLD;\n}\n\nfunction syncInputContainerHeight() {\n  const element = inputContainerRef.value;\n  inputContainerHeight.value = element?.offsetHeight ?? 0;\n}\n\nfunction scrollToBottom(behavior: ScrollBehavior = \"smooth\") {\n  const element = scrollContainerRef.value;\n  if (!element) return;\n\n  if (typeof element.scrollTo === \"function\") {\n    element.scrollTo({\n      top: element.scrollHeight,\n      behavior,\n    });\n  } else {\n    element.scrollTop = element.scrollHeight;\n  }\n  updateIsAtBottom();\n}\n\nfunction handleScroll() {\n  updateIsAtBottom();\n}\n\nfunction hasListener(listenerName: string) {\n  const listener = vnodeProps.value[listenerName];\n  if (Array.isArray(listener)) {\n    return listener.length > 0;\n  }\n  return !!listener;\n}\n\nfunction handleInputValueChange(value: string) {\n  if (!isControlledInput.value) {\n    localInputValue.value = value;\n  }\n  emit(\"input-change\", value);\n}\n\nfunction handleSubmitMessage(value: string) {\n  emit(\"submit-message\", value);\n}\n\nfunction handleStop() {\n  emit(\"stop\");\n}\n\nfunction handleSelectSuggestion(suggestion: Suggestion, index: number) {\n  emit(\"select-suggestion\", suggestion, index);\n}\n\nfunction handleAddFile() {\n  emit(\"add-file\");\n}\n\nfunction handleDragOver(event: DragEvent) {\n  props.onDragOver?.(event);\n}\n\nfunction handleDragLeave(event: DragEvent) {\n  props.onDragLeave?.(event);\n}\n\nfunction handleDrop(event: DragEvent) {\n  void props.onDrop?.(event);\n}\n\nfunction handleStartTranscribe() {\n  emit(\"start-transcribe\");\n}\n\nfunction handleCancelTranscribe() {\n  emit(\"cancel-transcribe\");\n}\n\nfunction handleFinishTranscribe() {\n  emit(\"finish-transcribe\");\n}\n\nasync function handleFinishTranscribeWithAudio(audioBlob: Blob) {\n  await props.onFinishTranscribeWithAudio?.(audioBlob);\n}\n\nconst inputEventProps = computed(() => {\n  const listeners: Record<string, unknown> = {\n    \"onUpdate:modelValue\": handleInputValueChange,\n    onSubmitMessage: handleSubmitMessage,\n  };\n\n  if (hasStopAction.value) {\n    listeners.onStop = handleStop;\n  }\n  if (hasAddFileAction.value) {\n    listeners.onAddFile = handleAddFile;\n  }\n  if (hasStartTranscribeAction.value) {\n    listeners.onStartTranscribe = handleStartTranscribe;\n  }\n  if (hasCancelTranscribeAction.value) {\n    listeners.onCancelTranscribe = handleCancelTranscribe;\n  }\n  if (hasFinishTranscribeAction.value) {\n    listeners.onFinishTranscribe = handleFinishTranscribe;\n  }\n  if (hasFinishTranscribeWithAudioAction.value) {\n    listeners.onFinishTranscribeWithAudio = handleFinishTranscribeWithAudio;\n  }\n\n  return listeners;\n});\n\nonMounted(async () => {\n  await nextTick();\n  syncInputContainerHeight();\n  updateIsAtBottom();\n  if (isPinToBottomMode.value) {\n    scrollToBottom(\"auto\");\n    if (typeof requestAnimationFrame === \"function\") {\n      requestAnimationFrame(() => {\n        scrollToBottom(\"auto\");\n      });\n    }\n  }\n\n  attachInputOverlayObserver();\n  attachScrollContentObserver();\n});\n\nonBeforeUnmount(() => {\n  inputResizeObserver?.disconnect();\n  contentResizeObserver?.disconnect();\n  inputResizeObserver = null;\n  contentResizeObserver = null;\n});\n</script>\n\n<template>\n  <div\n    data-copilotkit\n    class=\"cpk:relative cpk:h-full\"\n    data-testid=\"copilot-chat-view\"\n    v-bind=\"$attrs\"\n    @dragover=\"handleDragOver\"\n    @dragleave=\"handleDragLeave\"\n    @drop=\"handleDrop\"\n  >\n    <div\n      v-if=\"dragOver\"\n      class=\"cpk:absolute cpk:inset-0 cpk:z-50 cpk:pointer-events-none cpk:flex cpk:items-center cpk:justify-center cpk:bg-primary/5 cpk:border-2 cpk:border-dashed cpk:border-primary/40 cpk:rounded-lg cpk:m-2\"\n      data-testid=\"copilot-chat-drop-overlay\"\n    >\n      <span class=\"cpk:text-sm cpk:font-medium cpk:text-primary/70\">\n        Drop files here\n      </span>\n    </div>\n    <slot\n      v-if=\"shouldShowWelcomeScreen\"\n      name=\"welcome-screen\"\n      :suggestions=\"suggestions\"\n      :loading-indexes=\"suggestionLoadingIndexes\"\n      :attachments=\"attachments ?? []\"\n      :model-value=\"resolvedInputValue\"\n      :is-running=\"isRunning\"\n      :input-mode=\"inputMode\"\n      :input-tools-menu=\"inputToolsMenu\"\n      :on-update-model-value=\"handleInputValueChange\"\n      :on-submit-message=\"handleSubmitMessage\"\n      :on-stop=\"hasStopAction ? handleStop : undefined\"\n      :on-add-file=\"handleAddFile\"\n      :on-start-transcribe=\"handleStartTranscribe\"\n      :on-cancel-transcribe=\"handleCancelTranscribe\"\n      :on-finish-transcribe=\"handleFinishTranscribe\"\n      :on-finish-transcribe-with-audio=\"handleFinishTranscribeWithAudio\"\n      :on-select-suggestion=\"handleSelectSuggestion\"\n    >\n      <div\n        class=\"cpk:flex cpk:h-full cpk:flex-col cpk:items-center cpk:justify-center cpk:px-4\"\n        data-testid=\"copilot-chat-view-welcome-screen\"\n      >\n        <div\n          class=\"cpk:w-full cpk:max-w-3xl cpk:flex cpk:flex-col cpk:items-center\"\n        >\n          <div class=\"cpk:mb-6\">\n            <slot name=\"welcome-message\">\n              <h1\n                class=\"cpk:text-xl cpk:sm:text-2xl cpk:font-medium cpk:text-foreground cpk:text-center\"\n              >\n                {{ labels.welcomeMessageText }}\n              </h1>\n            </slot>\n          </div>\n\n          <div class=\"cpk:w-full\">\n            <CopilotChatAttachmentQueue\n              v-if=\"hasAttachments\"\n              :attachments=\"attachments ?? []\"\n              class-name=\"cpk:mb-2\"\n              @remove-attachment=\"\n                (id: string) => onRemoveAttachment && onRemoveAttachment(id)\n              \"\n            />\n            <slot\n              name=\"input\"\n              :model-value=\"resolvedInputValue\"\n              :is-running=\"isRunning\"\n              :input-mode=\"inputMode\"\n              :input-tools-menu=\"inputToolsMenu\"\n              :attachments=\"attachments ?? []\"\n              :on-update-model-value=\"handleInputValueChange\"\n              :on-submit-message=\"handleSubmitMessage\"\n              :on-stop=\"hasStopAction ? handleStop : undefined\"\n              :on-add-file=\"handleAddFile\"\n              :on-start-transcribe=\"handleStartTranscribe\"\n              :on-cancel-transcribe=\"handleCancelTranscribe\"\n              :on-finish-transcribe=\"handleFinishTranscribe\"\n              :on-finish-transcribe-with-audio=\"handleFinishTranscribeWithAudio\"\n            >\n              <CopilotChatInput\n                :model-value=\"resolvedInputValue\"\n                :is-running=\"isRunning\"\n                :mode=\"inputMode\"\n                :tools-menu=\"inputToolsMenu\"\n                positioning=\"static\"\n                :show-disclaimer=\"true\"\n                :keyboard-height=\"effectiveKeyboardHeight\"\n                v-bind=\"inputEventProps\"\n              />\n            </slot>\n          </div>\n\n          <div\n            v-if=\"hasSuggestions\"\n            class=\"cpk:mt-4 cpk:flex cpk:justify-center\"\n          >\n            <slot\n              name=\"suggestion-view\"\n              :suggestions=\"suggestions\"\n              :loading-indexes=\"suggestionLoadingIndexes\"\n              :on-select-suggestion=\"handleSelectSuggestion\"\n            >\n              <CopilotChatSuggestionView\n                :suggestions=\"suggestions\"\n                :loading-indexes=\"suggestionLoadingIndexes\"\n                @select-suggestion=\"handleSelectSuggestion\"\n              />\n            </slot>\n          </div>\n        </div>\n      </div>\n    </slot>\n\n    <template v-else>\n      <slot\n        name=\"scroll-view\"\n        :messages=\"messages\"\n        :is-running=\"isRunning\"\n        :suggestions=\"suggestions\"\n        :loading-indexes=\"suggestionLoadingIndexes\"\n        :message-padding-bottom=\"messagePaddingBottom\"\n        :show-scroll-to-bottom-button=\"showScrollToBottomButton\"\n        :on-select-suggestion=\"handleSelectSuggestion\"\n        :on-scroll=\"handleScroll\"\n        :scroll-to-bottom=\"scrollToBottom\"\n      >\n        <div\n          ref=\"scrollContainerRef\"\n          data-testid=\"copilot-chat-view-scroll\"\n          class=\"cpk:h-full cpk:max-h-full cpk:min-h-0 cpk:overflow-y-scroll cpk:overflow-x-hidden cpk:relative\"\n          @scroll=\"handleScroll\"\n        >\n          <div\n            class=\"cpk:px-4 cpk:sm:px-0 cpk:[div[data-sidebar-chat]_&]:px-8 cpk:[div[data-popup-chat]_&]:px-6\"\n          >\n            <div\n              ref=\"scrollContentRef\"\n              data-testid=\"copilot-scroll-content\"\n              :style=\"{ paddingBottom: messagePaddingBottom }\"\n            >\n              <div class=\"cpk:max-w-3xl cpk:mx-auto\">\n                <slot\n                  name=\"message-view\"\n                  :messages=\"messages\"\n                  :is-running=\"isRunning\"\n                >\n                  <CopilotChatMessageView\n                    :messages=\"messages\"\n                    :is-running=\"isRunning\"\n                  >\n                    <template\n                      v-for=\"slotName in forwardedMessageViewSlotNames\"\n                      :key=\"slotName\"\n                      #[slotName]=\"slotProps\"\n                    >\n                      <slot :name=\"slotName\" v-bind=\"slotProps\" />\n                    </template>\n                  </CopilotChatMessageView>\n                </slot>\n                <div\n                  v-if=\"hasSuggestions\"\n                  class=\"cpk:mt-4 cpk:pl-0 cpk:pr-4 cpk:sm:px-0\"\n                >\n                  <slot\n                    name=\"suggestion-view\"\n                    :suggestions=\"suggestions\"\n                    :loading-indexes=\"suggestionLoadingIndexes\"\n                    :on-select-suggestion=\"handleSelectSuggestion\"\n                  >\n                    <CopilotChatSuggestionView\n                      class=\"cpk:mb-3 cpk:lg:ml-4 cpk:lg:mr-4 cpk:ml-0 cpk:mr-0\"\n                      :suggestions=\"suggestions\"\n                      :loading-indexes=\"suggestionLoadingIndexes\"\n                      @select-suggestion=\"handleSelectSuggestion\"\n                    />\n                  </slot>\n                </div>\n              </div>\n            </div>\n            <!--\n              `pin-to-send` spacer. Sized to anchor the latest user message\n              near the top of the viewport while the assistant streams a\n              response. `usePinToSend` reads this ref and only activates\n              when the spacer is present in the tree.\n            -->\n            <div\n              v-if=\"isPinToSendMode\"\n              ref=\"spacerRef\"\n              data-pin-to-send-spacer\n              aria-hidden=\"true\"\n              :style=\"{ height: '0px', flex: '0 0 auto' }\"\n            />\n          </div>\n        </div>\n      </slot>\n\n      <slot name=\"feather\">\n        <!--\n          Default renders an empty div — no visual, but the element is\n          still in the tree so a slot override / consumer styling can\n          still apply (mirrors React `CopilotChatView.Feather`).\n        -->\n        <div data-testid=\"copilot-chat-view-feather\" />\n      </slot>\n\n      <div\n        v-if=\"showScrollToBottomButton\"\n        class=\"cpk:absolute cpk:inset-x-0 cpk:flex cpk:justify-center cpk:z-30 cpk:pointer-events-none\"\n        :style=\"{ bottom: `${inputContainerHeight + SCROLL_BUTTON_OFFSET}px` }\"\n      >\n        <slot name=\"scroll-to-bottom-button\" :on-click=\"() => scrollToBottom()\">\n          <button\n            type=\"button\"\n            data-testid=\"copilot-chat-view-scroll-to-bottom\"\n            class=\"cpk:rounded-full cpk:w-10 cpk:h-10 cpk:p-0 cpk:pointer-events-auto cpk:bg-white cpk:dark:bg-gray-900 cpk:shadow-lg cpk:border cpk:border-gray-200 cpk:dark:border-gray-700 cpk:hover:bg-gray-50 cpk:dark:hover:bg-gray-800 cpk:flex cpk:items-center cpk:justify-center cpk:cursor-pointer\"\n            @click=\"scrollToBottom()\"\n          >\n            <IconChevronDown\n              class=\"cpk:w-4 cpk:h-4 cpk:text-gray-600 cpk:dark:text-white\"\n            />\n          </button>\n        </slot>\n      </div>\n\n      <!--\n        Input overlay. Mirrors React `CopilotChatView` `copilot-input-overlay`:\n        absolutely positioned at the bottom, holds both the attachment queue\n        and the chat input. The input itself uses `positioning=\"static\"` so\n        the overlay wrapper alone owns the absolute positioning, and the\n        attachment queue is layered visually above the input via DOM order.\n        The welcome-screen path intentionally does NOT use this overlay.\n      -->\n      <div\n        ref=\"inputContainerRef\"\n        class=\"cpk:absolute cpk:bottom-0 cpk:left-0 cpk:right-0 cpk:z-20 cpk:pointer-events-none\"\n        data-testid=\"copilot-input-overlay\"\n      >\n        <div\n          v-if=\"hasAttachments\"\n          class=\"cpk:max-w-3xl cpk:mx-auto cpk:w-full cpk:pointer-events-auto\"\n        >\n          <CopilotChatAttachmentQueue\n            :attachments=\"attachments ?? []\"\n            class-name=\"cpk:px-4\"\n            @remove-attachment=\"\n              (id: string) => onRemoveAttachment && onRemoveAttachment(id)\n            \"\n          />\n        </div>\n        <slot\n          name=\"input\"\n          :model-value=\"resolvedInputValue\"\n          :is-running=\"isRunning\"\n          :input-mode=\"inputMode\"\n          :input-tools-menu=\"inputToolsMenu\"\n          :attachments=\"attachments ?? []\"\n          :on-update-model-value=\"handleInputValueChange\"\n          :on-submit-message=\"handleSubmitMessage\"\n          :on-stop=\"hasStopAction ? handleStop : undefined\"\n          :on-add-file=\"handleAddFile\"\n          :on-start-transcribe=\"handleStartTranscribe\"\n          :on-cancel-transcribe=\"handleCancelTranscribe\"\n          :on-finish-transcribe=\"handleFinishTranscribe\"\n          :on-finish-transcribe-with-audio=\"handleFinishTranscribeWithAudio\"\n        >\n          <CopilotChatInput\n            :model-value=\"resolvedInputValue\"\n            :is-running=\"isRunning\"\n            :mode=\"inputMode\"\n            :tools-menu=\"inputToolsMenu\"\n            positioning=\"static\"\n            :show-disclaimer=\"true\"\n            :keyboard-height=\"effectiveKeyboardHeight\"\n            :bottom-anchored=\"true\"\n            v-bind=\"inputEventProps\"\n          />\n        </slot>\n      </div>\n    </template>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n  AGUIConnectNotImplementedError,\n  AbstractAgent,\n  HttpAgent,\n} from \"@ag-ui/client\";\nimport {\n  DEFAULT_AGENT_ID,\n  randomUUID,\n  TranscriptionErrorCode,\n} from \"@copilotkit/shared\";\nimport {\n  computed,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  ref,\n  shallowRef,\n  useAttrs,\n  useSlots,\n  watch,\n} from \"vue\";\nimport type { Suggestion } from \"@copilotkit/core\";\nimport CopilotChatConfigurationProvider from \"../../providers/CopilotChatConfigurationProvider.vue\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport { useCopilotKit } from \"../../providers/useCopilotKit\";\nimport { useLicenseContext } from \"../../providers/useLicenseContext\";\nimport InlineFeatureWarning from \"../InlineFeatureWarning.vue\";\nimport { useAgent } from \"../../hooks/use-agent\";\nimport { useSuggestions } from \"../../hooks/use-suggestions\";\nimport { useAttachments } from \"../../hooks/use-attachments\";\nimport { useShallowStableRef } from \"../../lib/shallow-stable\";\nimport {\n  transcribeAudio,\n  TranscriptionError,\n} from \"../../lib/transcription-client\";\nimport CopilotChatView from \"./CopilotChatView.vue\";\nimport {\n  LastUserMessageKey,\n  type LastUserMessageState,\n} from \"./last-user-message-context\";\nimport type { Message } from \"@ag-ui/core\";\nimport type { InputContent } from \"@copilotkit/shared\";\nimport type {\n  CopilotChatInputSlotProps,\n  CopilotChatProps,\n  CopilotChatInterruptSlotProps,\n  CopilotChatSuggestionViewSlotProps,\n  CopilotChatViewOverrideSlotProps,\n  CopilotChatWelcomeScreenSlotProps,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CopilotChatProps>(), {\n  autoScroll: true,\n  welcomeScreen: true,\n  inputValue: undefined,\n  inputMode: \"input\",\n  inputToolsMenu: () => [],\n  onFinishTranscribeWithAudio: undefined,\n});\n\ndefineSlots<{\n  \"chat-view\"?: (props: CopilotChatViewOverrideSlotProps) => unknown;\n  \"message-view\"?: (props: {\n    messages: Message[];\n    isRunning: boolean;\n  }) => unknown;\n  interrupt?: (props: CopilotChatInterruptSlotProps) => unknown;\n  input?: (props: CopilotChatInputSlotProps) => unknown;\n  \"suggestion-view\"?: (props: CopilotChatSuggestionViewSlotProps) => unknown;\n  \"welcome-screen\"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;\n  \"welcome-message\"?: () => unknown;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [key: string]: ((props: any) => unknown) | undefined;\n}>();\n\nconst emit = defineEmits<{\n  \"submit-message\": [value: string];\n  stop: [];\n  \"input-change\": [value: string];\n  \"select-suggestion\": [suggestion: Suggestion, index: number];\n  \"add-file\": [];\n  \"start-transcribe\": [];\n  \"cancel-transcribe\": [];\n  \"finish-transcribe\": [];\n}>();\n\nconst attrs = useAttrs();\nconst componentSlots = useSlots();\nconst existingConfig = useCopilotChatConfiguration();\nconst { copilotkit } = useCopilotKit();\nconst forwardedChatViewSlotNames = computed(() =>\n  Object.keys(componentSlots).filter((slotName) => slotName !== \"chat-view\"),\n);\n\nconst generatedThreadId = ref(randomUUID());\nconst transcribeMode = ref<\"input\" | \"transcribe\" | \"processing\">(\"input\");\nconst inputValue = ref(props.inputValue ?? \"\");\nconst transcriptionError = ref<string | null>(null);\nconst isTranscribing = ref(false);\nconst isMounted = ref(false);\nconst isUnmounting = ref(false);\n\ntype ActiveConnectCycle = {\n  core: object;\n  agent: AbstractAgent;\n  threadId: string;\n  abortController: AbortController;\n  detached: boolean;\n};\n\nconst activeConnectCycle = shallowRef<ActiveConnectCycle | null>(null);\n\nconst resolvedAgentId = computed(\n  () => props.agentId ?? existingConfig.value?.agentId ?? DEFAULT_AGENT_ID,\n);\n// \"Provided\" — supplied by either the caller's prop or a wrapping\n// CopilotChatConfigurationProvider. Distinct from `resolvedThreadId`, which\n// falls back to a locally minted UUID when neither source is set. We only\n// gate `/connect` on a provided id; the local UUID has never been seen by\n// the backend and would always 404.\nconst providedThreadId = computed(\n  () => props.threadId ?? existingConfig.value?.threadId,\n);\nconst resolvedThreadId = computed(\n  () => providedThreadId.value ?? generatedThreadId.value,\n);\n// \"Explicit\" means the caller actually picked this thread — via the\n// `threadId` prop on CopilotChat or a wrapping provider that flagged its\n// threadId as caller-chosen. An auto-minted UUID leaking down through a\n// CopilotChatConfigurationProvider does NOT count.\nconst hasExplicitThreadId = computed(\n  () => !!props.threadId || !!existingConfig.value?.hasExplicitThreadId,\n);\nconst lastConnectedThreadId = ref<string | null>(null);\nconst isConnecting = computed(\n  () =>\n    hasExplicitThreadId.value &&\n    lastConnectedThreadId.value !== resolvedThreadId.value,\n);\nconst stableLabels = useShallowStableRef(computed(() => props.labels));\nconst resolvedLabels = computed(() => stableLabels.value);\n\nconst { agent } = useAgent({\n  agentId: resolvedAgentId,\n  threadId: resolvedThreadId,\n  throttleMs: computed(() => props.throttleMs),\n});\nconst { suggestions: autoSuggestions } = useSuggestions({\n  agentId: resolvedAgentId,\n});\n\nconst license = useLicenseContext();\nconst isChatLicensed = computed(() => license.value.checkFeature(\"chat\"));\n\nwatch(\n  isChatLicensed,\n  (licensed) => {\n    if (!licensed) {\n      console.warn(\n        '[CopilotKit] Warning: \"chat\" feature is not licensed. Visit copilotkit.ai/pricing',\n      );\n    }\n  },\n  { immediate: true },\n);\n\nconst isTranscriptionEnabled = computed(\n  () => copilotkit.value.audioFileTranscriptionEnabled,\n);\nconst isMediaRecorderSupported = computed(\n  () => typeof window !== \"undefined\" && typeof MediaRecorder !== \"undefined\",\n);\nconst showTranscription = computed(\n  () => isTranscriptionEnabled.value && isMediaRecorderSupported.value,\n);\nconst {\n  attachments,\n  enabled: attachmentsEnabled,\n  dragOver,\n  fileInputRef,\n  containerRef: attachmentContainerRef,\n  handleFileUpload,\n  handleDragOver,\n  handleDragLeave,\n  handleDrop,\n  removeAttachment,\n  consumeAttachments,\n} = useAttachments({\n  config: computed(() => props.attachments),\n});\nconst effectiveMode = computed<\"input\" | \"transcribe\" | \"processing\">(() =>\n  isTranscribing.value ? \"processing\" : transcribeMode.value,\n);\nconst runLifecycleTick = ref(0);\nconst messages = computed(() => [...(agent.value?.messages ?? [])]);\nconst isRunning = computed(() => {\n  void runLifecycleTick.value;\n  return agent.value?.isRunning ?? false;\n});\nconst shouldAllowStop = computed(\n  () => isRunning.value && messages.value.length > 0,\n);\n\n// Track the latest user message id so descendants (notably `usePinToSend`\n// inside `CopilotChatView`) can anchor to the most recent user turn.\n// Mirrors React `CopilotChat.tsx` `lastUserMessageId` + `sendNonce` state.\nconst lastUserMessageId = computed<string | null>(() => {\n  for (let i = messages.value.length - 1; i >= 0; i--) {\n    const message = messages.value[i];\n    if (message?.role === \"user\") return message.id;\n  }\n  return null;\n});\nconst sendNonce = ref(0);\n// Seed with the current value so restoring a thread with existing messages\n// does not count as a new send. Only later id transitions bump.\nlet prevLastUserMessageId: string | null = lastUserMessageId.value;\nwatch(lastUserMessageId, (next) => {\n  if (next && next !== prevLastUserMessageId) {\n    sendNonce.value += 1;\n    prevLastUserMessageId = next;\n  }\n});\nconst lastUserMessageState = computed<LastUserMessageState>(() => ({\n  id: lastUserMessageId.value,\n  sendNonce: sendNonce.value,\n}));\nprovide(LastUserMessageKey, lastUserMessageState);\n\nwatch(\n  () => agent.value,\n  (currentAgent, _previous, onCleanup) => {\n    if (!currentAgent) return;\n    const sub = currentAgent.subscribe({\n      onRunStartedEvent: () => {\n        runLifecycleTick.value += 1;\n      },\n      onRunFinishedEvent: () => {\n        runLifecycleTick.value += 1;\n      },\n      onRunErrorEvent: () => {\n        runLifecycleTick.value += 1;\n      },\n    });\n    onCleanup(() => sub.unsubscribe());\n  },\n  { immediate: true },\n);\n\nwatch(\n  () => props.inputValue,\n  (next) => {\n    if (next !== undefined) {\n      inputValue.value = next;\n    }\n  },\n);\n\nwatch(\n  [() => props.threadId, () => existingConfig.value?.threadId],\n  ([threadId, inheritedThreadId], previousValues) => {\n    if (threadId || inheritedThreadId) {\n      return;\n    }\n\n    if (previousValues && (previousValues[0] || previousValues[1])) {\n      generatedThreadId.value = randomUUID();\n    }\n  },\n);\n\nwatch(\n  [() => copilotkit.value, resolvedAgentId, () => props.onError],\n  ([core, agentId, onError], _old, onCleanup) => {\n    if (!onError) {\n      return;\n    }\n\n    const subscription = core.subscribe({\n      onError: (event) => {\n        if (event.context?.agentId === agentId || !event.context?.agentId) {\n          void onError({\n            error: event.error,\n            code: event.code,\n            context: event.context,\n          });\n        }\n      },\n    });\n\n    onCleanup(() => subscription.unsubscribe());\n  },\n  { immediate: true },\n);\n\nwatch(\n  [\n    isMounted,\n    () => copilotkit.value,\n    () => agent.value,\n    resolvedThreadId,\n    hasExplicitThreadId,\n  ],\n  ([mounted, core, currentAgent, threadId, isExplicit], _old, onCleanup) => {\n    if (!mounted) {\n      return;\n    }\n    if (typeof window === \"undefined\") {\n      return;\n    }\n    if (!currentAgent) {\n      return;\n    }\n    // When the caller hasn't picked a specific thread, resolvedThreadId is\n    // a UUID minted locally. The backend has never seen it, so /connect\n    // would always 404 — skip the call. A real thread is only created\n    // once the user runs the agent for the first time.\n    if (!isExplicit) {\n      return;\n    }\n\n    const abstractAgentPrototype = AbstractAgent.prototype as unknown as {\n      connect?: unknown;\n      connectAgent?: unknown;\n    };\n    const inspectableAgent = currentAgent as unknown as {\n      connect?: unknown;\n      connectAgent?: unknown;\n    };\n    const hasCustomConnect =\n      inspectableAgent.connect !== abstractAgentPrototype.connect;\n    const hasCustomConnectAgent =\n      inspectableAgent.connectAgent !== abstractAgentPrototype.connectAgent;\n    if (!hasCustomConnect && !hasCustomConnectAgent) {\n      // No custom connect to wait for — mark as connected so the welcome\n      // suppression / suggestion gating release immediately.\n      lastConnectedThreadId.value = threadId;\n      return;\n    }\n\n    const existingCycle = activeConnectCycle.value;\n    const hasSameDeps =\n      existingCycle &&\n      existingCycle.core === (core as object) &&\n      existingCycle.agent === currentAgent &&\n      existingCycle.threadId === threadId;\n\n    let cycle: ActiveConnectCycle;\n    if (hasSameDeps && existingCycle) {\n      cycle = existingCycle;\n    } else {\n      const connectAbortController = new AbortController();\n      if (currentAgent instanceof HttpAgent) {\n        currentAgent.abortController = connectAbortController;\n      }\n\n      cycle = {\n        core: core as object,\n        agent: currentAgent,\n        threadId,\n        abortController: connectAbortController,\n        detached: false,\n      };\n      activeConnectCycle.value = cycle;\n\n      void core\n        .connectAgent({ agent: currentAgent })\n        .catch((error: unknown) => {\n          if (cycle.detached) {\n            return;\n          }\n          if (error instanceof AGUIConnectNotImplementedError) {\n            return;\n          }\n          console.error(\"CopilotChat: connectAgent failed\", error);\n        })\n        .finally(() => {\n          // Whether the connect succeeded or failed, we're no longer in\n          // the transitional \"connecting\" state for this thread — release\n          // the welcome / suggestion gating so the view can settle.\n          //\n          // Defer one animation frame so any trailing reactive commits\n          // from the bootstrap replay (final assistant message content)\n          // paint before isConnecting flips off. Without this, suggestions\n          // can briefly render against an incompletely-laid-out message\n          // tree and visibly snap once the last text chunk lands.\n          if (cycle.detached) {\n            return;\n          }\n          const raf =\n            typeof requestAnimationFrame === \"function\"\n              ? requestAnimationFrame\n              : (cb: () => void) => setTimeout(cb, 16);\n          raf(() => {\n            if (cycle.detached) return;\n            lastConnectedThreadId.value = cycle.threadId;\n          });\n        });\n    }\n\n    onCleanup(() => {\n      const activeCycle = activeConnectCycle.value;\n      if (!activeCycle || activeCycle !== cycle) {\n        return;\n      }\n\n      const shouldDetach =\n        isUnmounting.value ||\n        copilotkit.value !== activeCycle.core ||\n        agent.value !== activeCycle.agent ||\n        resolvedThreadId.value !== activeCycle.threadId;\n      if (!shouldDetach) {\n        return;\n      }\n\n      activeCycle.detached = true;\n      activeCycle.abortController.abort();\n      void activeCycle.agent.detachActiveRun?.();\n      activeConnectCycle.value = null;\n    });\n  },\n  { immediate: true },\n);\n\nonBeforeUnmount(() => {\n  isUnmounting.value = true;\n});\n\nonMounted(() => {\n  isMounted.value = true;\n});\n\nwatch(transcriptionError, (next, _old, onCleanup) => {\n  if (!next) {\n    return;\n  }\n  const timer = setTimeout(() => {\n    transcriptionError.value = null;\n  }, 5000);\n  onCleanup(() => clearTimeout(timer));\n});\n\nasync function runCurrentAgent() {\n  const currentAgent = agent.value;\n  if (!currentAgent) {\n    return;\n  }\n\n  try {\n    const activeCycle = activeConnectCycle.value;\n    if (\n      activeCycle &&\n      activeCycle.agent === currentAgent &&\n      activeCycle.threadId === resolvedThreadId.value\n    ) {\n      activeCycle.detached = true;\n      activeCycle.abortController.abort();\n      activeConnectCycle.value = null;\n      await activeCycle.agent.detachActiveRun?.();\n    }\n    await copilotkit.value.runAgent({ agent: currentAgent });\n  } catch (error) {\n    console.error(\"CopilotChat: runAgent failed\", error);\n  }\n}\n\nasync function handleSubmitMessage(value: string) {\n  const hasUploading = attachments.value.some(\n    (attachment) => attachment.status === \"uploading\",\n  );\n  if (hasUploading) {\n    console.error(\"[CopilotKit] Cannot send while attachments are uploading\");\n    return;\n  }\n\n  emit(\"submit-message\", value);\n\n  if (!agent.value) {\n    console.error(\"[CopilotKit] Cannot send message: no agent available\");\n    return;\n  }\n\n  const readyAttachments = consumeAttachments();\n  if (readyAttachments.length > 0) {\n    const contentParts: InputContent[] = [];\n    if (value.trim()) {\n      contentParts.push({ type: \"text\", text: value });\n    }\n    for (const attachment of readyAttachments) {\n      contentParts.push({\n        type: attachment.type,\n        source: attachment.source,\n        metadata: {\n          ...(attachment.filename ? { filename: attachment.filename } : {}),\n          ...attachment.metadata,\n        },\n      } as InputContent);\n    }\n    agent.value.addMessage({\n      id: randomUUID(),\n      role: \"user\",\n      content: contentParts,\n    });\n  } else {\n    agent.value.addMessage({\n      id: randomUUID(),\n      role: \"user\",\n      content: value,\n    });\n  }\n\n  inputValue.value = \"\";\n  await runCurrentAgent();\n}\n\nasync function handleSelectSuggestion(suggestion: Suggestion, index: number) {\n  emit(\"select-suggestion\", suggestion, index);\n  agent.value?.addMessage({\n    id: randomUUID(),\n    role: \"user\",\n    content: suggestion.message,\n  });\n  await runCurrentAgent();\n}\n\nfunction stopCurrentRun() {\n  const currentAgent = agent.value;\n  if (!currentAgent) {\n    return;\n  }\n\n  try {\n    copilotkit.value.stopAgent({ agent: currentAgent });\n  } catch (error) {\n    console.error(\"CopilotChat: stopAgent failed\", error);\n    try {\n      currentAgent.abortRun();\n    } catch (abortError) {\n      console.error(\"CopilotChat: abortRun fallback failed\", abortError);\n    }\n  }\n}\n\nfunction handleStop() {\n  emit(\"stop\");\n  if (shouldAllowStop.value) {\n    stopCurrentRun();\n  }\n}\n\nfunction handleInputChange(value: string) {\n  inputValue.value = value;\n  emit(\"input-change\", value);\n}\n\nfunction handleAddFile() {\n  emit(\"add-file\");\n  if (!attachmentsEnabled.value) {\n    return;\n  }\n  setTimeout(() => {\n    fileInputRef.value?.click();\n  }, 100);\n}\n\nfunction handleStartTranscribe() {\n  transcriptionError.value = null;\n  transcribeMode.value = \"transcribe\";\n  emit(\"start-transcribe\");\n}\n\nfunction handleCancelTranscribe() {\n  transcriptionError.value = null;\n  transcribeMode.value = \"input\";\n  emit(\"cancel-transcribe\");\n}\n\nfunction handleFinishTranscribe() {\n  transcribeMode.value = \"input\";\n  emit(\"finish-transcribe\");\n}\n\nasync function handleFinishTranscribeWithAudio(audioBlob: Blob) {\n  if (props.onFinishTranscribeWithAudio) {\n    await props.onFinishTranscribeWithAudio(audioBlob);\n    return;\n  }\n\n  isTranscribing.value = true;\n  try {\n    transcriptionError.value = null;\n    const result = await transcribeAudio(copilotkit.value, audioBlob);\n    const trimmedPrevious = inputValue.value.trim();\n    inputValue.value = trimmedPrevious\n      ? `${trimmedPrevious} ${result.text}`\n      : result.text;\n  } catch (error) {\n    console.error(\"CopilotChat: Transcription failed\", error);\n    if (error instanceof TranscriptionError) {\n      const { code, retryable, message } = error.info;\n      switch (code) {\n        case TranscriptionErrorCode.RATE_LIMITED:\n          transcriptionError.value = \"Too many requests. Please wait a moment.\";\n          break;\n        case TranscriptionErrorCode.AUTH_FAILED:\n          transcriptionError.value =\n            \"Authentication error. Please check your configuration.\";\n          break;\n        case TranscriptionErrorCode.AUDIO_TOO_LONG:\n          transcriptionError.value =\n            \"Recording is too long. Please try a shorter recording.\";\n          break;\n        case TranscriptionErrorCode.AUDIO_TOO_SHORT:\n          transcriptionError.value =\n            \"Recording is too short. Please try again.\";\n          break;\n        case TranscriptionErrorCode.INVALID_AUDIO_FORMAT:\n          transcriptionError.value = \"Audio format not supported.\";\n          break;\n        case TranscriptionErrorCode.SERVICE_NOT_CONFIGURED:\n          transcriptionError.value = \"Transcription service is not available.\";\n          break;\n        case TranscriptionErrorCode.NETWORK_ERROR:\n          transcriptionError.value =\n            \"Network error. Please check your connection.\";\n          break;\n        default:\n          transcriptionError.value = retryable\n            ? \"Transcription failed. Please try again.\"\n            : message;\n      }\n    } else {\n      transcriptionError.value = \"Transcription failed. Please try again.\";\n    }\n  } finally {\n    isTranscribing.value = false;\n  }\n}\n\nconst chatViewSlotProps = computed<CopilotChatViewOverrideSlotProps>(() => ({\n  messages: messages.value,\n  autoScroll: props.autoScroll,\n  isRunning: isRunning.value,\n  suggestions: autoSuggestions.value,\n  suggestionLoadingIndexes: [],\n  welcomeScreen: props.welcomeScreen,\n  attachments: attachments.value,\n  dragOver: dragOver.value,\n  inputValue: inputValue.value,\n  inputMode: effectiveMode.value,\n  inputToolsMenu: props.inputToolsMenu,\n  isConnecting: isConnecting.value,\n  hasExplicitThreadId: hasExplicitThreadId.value,\n  onSubmitMessage: handleSubmitMessage,\n  onStop: shouldAllowStop.value ? handleStop : undefined,\n  onInputChange: handleInputChange,\n  onSelectSuggestion: handleSelectSuggestion,\n  onRemoveAttachment: removeAttachment,\n  onAddFile: attachmentsEnabled.value ? handleAddFile : undefined,\n  onDragOver: attachmentsEnabled.value ? handleDragOver : undefined,\n  onDragLeave: attachmentsEnabled.value ? handleDragLeave : undefined,\n  onDrop: attachmentsEnabled.value ? handleDrop : undefined,\n  onStartTranscribe: showTranscription.value\n    ? handleStartTranscribe\n    : undefined,\n  onCancelTranscribe: showTranscription.value\n    ? handleCancelTranscribe\n    : undefined,\n  onFinishTranscribe: showTranscription.value\n    ? handleFinishTranscribe\n    : undefined,\n  onFinishTranscribeWithAudio: showTranscription.value\n    ? handleFinishTranscribeWithAudio\n    : undefined,\n}));\n\nconst defaultChatViewBindings = computed(() => {\n  const listeners: Record<string, unknown> = {\n    ...attrs,\n    onSubmitMessage: handleSubmitMessage,\n    onInputChange: handleInputChange,\n    onSelectSuggestion: handleSelectSuggestion,\n  };\n\n  if (shouldAllowStop.value) {\n    listeners.onStop = handleStop;\n  }\n  if (attachmentsEnabled.value) {\n    listeners.onAddFile = handleAddFile;\n    listeners.attachments = attachments.value;\n    listeners.onRemoveAttachment = removeAttachment;\n    listeners.dragOver = dragOver.value;\n    listeners.onDragOver = handleDragOver;\n    listeners.onDragLeave = handleDragLeave;\n    listeners.onDrop = handleDrop;\n  }\n  if (showTranscription.value) {\n    listeners.onStartTranscribe = handleStartTranscribe;\n    listeners.onCancelTranscribe = handleCancelTranscribe;\n    listeners.onFinishTranscribe = handleFinishTranscribe;\n  }\n\n  return listeners;\n});\n</script>\n\n<template>\n  <CopilotChatConfigurationProvider\n    :agent-id=\"resolvedAgentId\"\n    :thread-id=\"resolvedThreadId\"\n    :has-explicit-thread-id=\"hasExplicitThreadId\"\n    :labels=\"resolvedLabels\"\n  >\n    <div ref=\"attachmentContainerRef\" style=\"display: contents\">\n      <input\n        v-if=\"attachmentsEnabled\"\n        ref=\"fileInputRef\"\n        type=\"file\"\n        multiple\n        :accept=\"props.attachments?.accept ?? '*/*'\"\n        style=\"display: none\"\n        @change=\"(event) => void handleFileUpload(event)\"\n      />\n      <InlineFeatureWarning v-if=\"!isChatLicensed\" feature-name=\"Chat\" />\n      <div\n        v-if=\"transcriptionError\"\n        style=\"\n          position: absolute;\n          bottom: 100px;\n          left: 50%;\n          transform: translateX(-50%);\n          background-color: #ef4444;\n          color: white;\n          padding: 8px 16px;\n          border-radius: 8px;\n          font-size: 14px;\n          z-index: 50;\n        \"\n      >\n        {{ transcriptionError }}\n      </div>\n\n      <slot name=\"chat-view\" v-bind=\"chatViewSlotProps\">\n        <CopilotChatView\n          v-bind=\"defaultChatViewBindings\"\n          :messages=\"chatViewSlotProps.messages\"\n          :auto-scroll=\"chatViewSlotProps.autoScroll\"\n          :is-running=\"chatViewSlotProps.isRunning\"\n          :suggestions=\"chatViewSlotProps.suggestions\"\n          :suggestion-loading-indexes=\"\n            chatViewSlotProps.suggestionLoadingIndexes\n          \"\n          :welcome-screen=\"chatViewSlotProps.welcomeScreen\"\n          :input-value=\"chatViewSlotProps.inputValue\"\n          :input-mode=\"chatViewSlotProps.inputMode\"\n          :input-tools-menu=\"chatViewSlotProps.inputToolsMenu\"\n          :is-connecting=\"chatViewSlotProps.isConnecting\"\n          :has-explicit-thread-id=\"chatViewSlotProps.hasExplicitThreadId\"\n          :on-finish-transcribe-with-audio=\"\n            chatViewSlotProps.onFinishTranscribeWithAudio\n          \"\n        >\n          <template\n            v-for=\"slotName in forwardedChatViewSlotNames\"\n            :key=\"slotName\"\n            #[slotName]=\"slotProps\"\n          >\n            <slot :name=\"slotName\" v-bind=\"slotProps\" />\n          </template>\n        </CopilotChatView>\n      </slot>\n    </div>\n  </CopilotChatConfigurationProvider>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport { getDocumentIcon, getSourceUrl } from \"@copilotkit/shared\";\nimport type { CopilotChatAttachmentRendererProps } from \"./types\";\n\nconst props = withDefaults(defineProps<CopilotChatAttachmentRendererProps>(), {\n  filename: undefined,\n  className: \"\",\n});\n\nconst imageLoadFailed = ref(false);\nconst sourceUrl = computed(() => getSourceUrl(props.source));\nconst documentLabel = computed(\n  () => props.filename || props.source.mimeType || \"Unknown type\",\n);\n</script>\n\n<template>\n  <img\n    v-if=\"props.type === 'image' && !imageLoadFailed\"\n    :src=\"sourceUrl\"\n    alt=\"Image attachment\"\n    class=\"cpk:max-w-full cpk:h-auto cpk:rounded-lg\"\n    :class=\"props.className\"\n    data-testid=\"copilot-chat-attachment-renderer-image\"\n    @error=\"imageLoadFailed = true\"\n  />\n  <div\n    v-else-if=\"props.type === 'image'\"\n    class=\"cpk:flex cpk:flex-col cpk:items-center cpk:justify-center cpk:rounded-lg cpk:bg-muted cpk:p-4 cpk:text-sm cpk:text-muted-foreground\"\n    :class=\"props.className\"\n    data-testid=\"copilot-chat-attachment-renderer-image-fallback\"\n  >\n    <span>Failed to load image</span>\n  </div>\n\n  <div\n    v-else-if=\"props.type === 'audio'\"\n    class=\"cpk:flex cpk:flex-col cpk:gap-1\"\n    :class=\"props.className\"\n    data-testid=\"copilot-chat-attachment-renderer-audio\"\n  >\n    <audio\n      :src=\"sourceUrl\"\n      controls\n      preload=\"metadata\"\n      class=\"cpk:max-w-[300px] cpk:w-full cpk:h-10\"\n    />\n    <span\n      v-if=\"props.filename\"\n      class=\"cpk:text-xs cpk:text-muted-foreground cpk:truncate cpk:max-w-[300px]\"\n      data-testid=\"copilot-chat-attachment-renderer-audio-filename\"\n    >\n      {{ props.filename }}\n    </span>\n  </div>\n\n  <video\n    v-else-if=\"props.type === 'video'\"\n    :src=\"sourceUrl\"\n    controls\n    preload=\"metadata\"\n    class=\"cpk:max-w-[400px] cpk:w-full cpk:rounded-lg\"\n    :class=\"props.className\"\n    data-testid=\"copilot-chat-attachment-renderer-video\"\n  />\n\n  <div\n    v-else\n    class=\"cpk:inline-flex cpk:items-center cpk:gap-2 cpk:px-3 cpk:py-2 cpk:border cpk:border-border cpk:rounded-lg cpk:bg-muted\"\n    :class=\"props.className\"\n    data-testid=\"copilot-chat-attachment-renderer-document\"\n  >\n    <span\n      class=\"cpk:text-xs cpk:font-bold cpk:uppercase\"\n      data-testid=\"copilot-chat-attachment-renderer-document-icon\"\n    >\n      {{ getDocumentIcon(props.source.mimeType ?? \"\") }}\n    </span>\n    <span\n      class=\"cpk:text-sm cpk:text-muted-foreground cpk:truncate\"\n      data-testid=\"copilot-chat-attachment-renderer-document-label\"\n    >\n      {{ documentLabel }}\n    </span>\n  </div>\n</template>\n","import { defineComponent, h } from \"vue\";\nimport { IconX } from \"../icons\";\n\nexport default defineComponent({\n  name: \"CopilotChatToggleButtonCloseIcon\",\n  inheritAttrs: false,\n  setup(_, { attrs }) {\n    return () => {\n      const { class: className, ...rest } = attrs as Record<string, unknown>;\n      return h(IconX, {\n        ...rest,\n        class: [\"cpk:h-6 cpk:w-6\", className],\n        strokeWidth: 1.75,\n      });\n    };\n  },\n});\n","import { defineComponent, h } from \"vue\";\nimport { IconMessageCircle } from \"../icons\";\n\nexport default defineComponent({\n  name: \"CopilotChatToggleButtonOpenIcon\",\n  inheritAttrs: false,\n  setup(_, { attrs }) {\n    return () => {\n      const { class: className, ...rest } = attrs as Record<string, unknown>;\n      return h(IconMessageCircle, {\n        ...rest,\n        class: [\"cpk:h-6 cpk:w-6\", className],\n        strokeWidth: 1.75,\n        fill: \"currentColor\",\n      });\n    };\n  },\n});\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from \"vue\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport { CopilotChatDefaultLabels } from \"../../providers/types\";\nimport CopilotChatToggleButtonCloseIcon from \"./CopilotChatToggleButtonCloseIcon\";\nimport CopilotChatToggleButtonOpenIcon from \"./CopilotChatToggleButtonOpenIcon\";\nimport type {\n  CopilotChatToggleButtonIconSlotProps,\n  CopilotChatToggleButtonProps,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CopilotChatToggleButtonProps>(), {\n  disabled: false,\n  type: \"button\",\n});\n\ndefineSlots<{\n  \"open-icon\"?: (props: CopilotChatToggleButtonIconSlotProps) => unknown;\n  \"close-icon\"?: (props: CopilotChatToggleButtonIconSlotProps) => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst config = useCopilotChatConfiguration();\nconst fallbackOpen = ref(false);\n\nconst labels = computed(() => config.value?.labels ?? CopilotChatDefaultLabels);\nconst isOpen = computed(() => config.value?.isModalOpen ?? fallbackOpen.value);\nconst ariaLabel = computed(() =>\n  isOpen.value\n    ? labels.value.chatToggleCloseLabel\n    : labels.value.chatToggleOpenLabel,\n);\nconst buttonClass = computed(() => [\n  \"cpk:fixed cpk:bottom-6 cpk:right-6 cpk:z-[1100] cpk:flex cpk:h-14 cpk:w-14 cpk:items-center cpk:justify-center\",\n  \"cpk:rounded-full cpk:border cpk:border-primary cpk:bg-primary cpk:text-primary-foreground\",\n  \"cpk:shadow-sm cpk:transition-all cpk:duration-200 cpk:ease-out\",\n  \"cpk:hover:scale-[1.04] cpk:hover:shadow-md cpk:cursor-pointer cpk:active:scale-[0.96]\",\n  \"cpk:focus-visible:outline-none cpk:focus-visible:ring-2 cpk:focus-visible:ring-primary/50 cpk:focus-visible:ring-offset-2 cpk:focus-visible:ring-offset-background\",\n  \"cpk:disabled:pointer-events-none cpk:disabled:opacity-60\",\n  attrs.class,\n]);\nconst buttonAttrs = computed(() => {\n  const { class: _className, onClick: _onClick, ...rest } = attrs;\n  return rest;\n});\n\nconst iconClass = \"cpk:h-6 cpk:w-6\";\nconst iconTransitionStyle = Object.freeze({\n  transition:\n    \"opacity 120ms ease-out, transform 260ms cubic-bezier(0.22, 1, 0.36, 1)\",\n});\nconst iconWrapperBase =\n  \"cpk:pointer-events-none cpk:absolute cpk:inset-0 cpk:flex cpk:items-center cpk:justify-center cpk:will-change-transform\";\n\nfunction setModalOpen(open: boolean) {\n  if (config.value?.setModalOpen) {\n    config.value.setModalOpen(open);\n    return;\n  }\n  fallbackOpen.value = open;\n}\n\nfunction getClickListeners() {\n  const listener = attrs.onClick;\n  if (Array.isArray(listener)) {\n    return listener.filter(\n      (item): item is (event: MouseEvent) => void => typeof item === \"function\",\n    );\n  }\n  return typeof listener === \"function\"\n    ? [listener as (event: MouseEvent) => void]\n    : [];\n}\n\nfunction handleClick(event: MouseEvent) {\n  if (props.disabled) {\n    return;\n  }\n\n  for (const listener of getClickListeners()) {\n    listener(event);\n  }\n\n  if (event.defaultPrevented) {\n    return;\n  }\n\n  setModalOpen(!isOpen.value);\n}\n</script>\n\n<template>\n  <button\n    data-copilotkit\n    :type=\"type\"\n    data-slot=\"chat-toggle-button\"\n    :data-state=\"isOpen ? 'open' : 'closed'\"\n    :class=\"buttonClass\"\n    :aria-label=\"ariaLabel\"\n    :aria-pressed=\"isOpen\"\n    :disabled=\"disabled\"\n    v-bind=\"buttonAttrs\"\n    @click=\"handleClick\"\n  >\n    <span\n      aria-hidden=\"true\"\n      data-slot=\"chat-toggle-button-open-icon\"\n      :class=\"iconWrapperBase\"\n      :style=\"{\n        ...iconTransitionStyle,\n        opacity: isOpen ? 0 : 1,\n        transform: `scale(${isOpen ? 0.75 : 1}) rotate(${isOpen ? 90 : 0}deg)`,\n      }\"\n    >\n      <slot name=\"open-icon\" :icon-class=\"iconClass\" :is-open=\"isOpen\">\n        <CopilotChatToggleButtonOpenIcon\n          :class=\"iconClass\"\n          aria-hidden=\"true\"\n          :focusable=\"false\"\n        />\n      </slot>\n    </span>\n\n    <span\n      aria-hidden=\"true\"\n      data-slot=\"chat-toggle-button-close-icon\"\n      :class=\"iconWrapperBase\"\n      :style=\"{\n        ...iconTransitionStyle,\n        opacity: isOpen ? 1 : 0,\n        transform: `scale(${isOpen ? 1 : 0.75}) rotate(${isOpen ? 0 : -90}deg)`,\n      }\"\n    >\n      <slot name=\"close-icon\" :icon-class=\"iconClass\" :is-open=\"isOpen\">\n        <CopilotChatToggleButtonCloseIcon\n          :class=\"iconClass\"\n          aria-hidden=\"true\"\n          :focusable=\"false\"\n        />\n      </slot>\n    </span>\n  </button>\n</template>\n","import { computed, defineComponent, h, useAttrs } from \"vue\";\nimport { IconX } from \"../icons\";\n\nexport default defineComponent({\n  name: \"CopilotModalHeaderCloseButton\",\n  inheritAttrs: false,\n  setup(_, { slots }) {\n    const attrs = useAttrs();\n    const ariaLabel = computed(() =>\n      typeof attrs[\"aria-label\"] === \"string\" ? attrs[\"aria-label\"] : \"Close\",\n    );\n\n    return () => {\n      const {\n        class: className,\n        type,\n        ...rest\n      } = attrs as Record<string, unknown>;\n\n      return h(\n        \"button\",\n        {\n          ...rest,\n          type: typeof type === \"string\" ? type : \"button\",\n          class: [\n            \"cpk:inline-flex cpk:size-8 cpk:items-center cpk:justify-center cpk:rounded-full cpk:text-muted-foreground cpk:transition cpk:cursor-pointer\",\n            \"cpk:hover:bg-muted cpk:hover:text-foreground cpk:focus-visible:outline-none cpk:focus-visible:ring-2 cpk:focus-visible:ring-ring\",\n            className,\n          ],\n          \"aria-label\": ariaLabel.value,\n        },\n        slots.default\n          ? slots.default()\n          : [h(IconX, { class: \"cpk:h-4 cpk:w-4\", \"aria-hidden\": true })],\n      );\n    };\n  },\n});\n","import { defineComponent, h } from \"vue\";\n\nexport default defineComponent({\n  name: \"CopilotModalHeaderTitle\",\n  inheritAttrs: false,\n  setup(_, { attrs, slots }) {\n    return () => {\n      const { class: className, ...rest } = attrs as Record<string, unknown>;\n      return h(\n        \"div\",\n        {\n          ...rest,\n          class: [\n            \"cpk:w-full cpk:text-base cpk:font-medium cpk:leading-none cpk:tracking-tight cpk:text-foreground\",\n            className,\n          ],\n        },\n        slots.default ? slots.default() : [],\n      );\n    };\n  },\n});\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from \"vue\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport { CopilotChatDefaultLabels } from \"../../providers/types\";\nimport CopilotModalHeaderCloseButton from \"./CopilotModalHeaderCloseButton\";\nimport CopilotModalHeaderTitle from \"./CopilotModalHeaderTitle\";\nimport type {\n  CopilotModalHeaderCloseButtonSlotProps,\n  CopilotModalHeaderLayoutSlotProps,\n  CopilotModalHeaderProps,\n  CopilotModalHeaderTitleContentSlotProps,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps<CopilotModalHeaderProps>();\n\ndefineSlots<{\n  \"title-content\"?: (props: CopilotModalHeaderTitleContentSlotProps) => unknown;\n  \"close-button\"?: (props: CopilotModalHeaderCloseButtonSlotProps) => unknown;\n  layout?: (props: CopilotModalHeaderLayoutSlotProps) => unknown;\n}>();\n\nconst attrs = useAttrs();\nconst config = useCopilotChatConfiguration();\n\nconst resolvedTitle = computed(\n  () =>\n    props.title ??\n    config.value?.labels.modalHeaderTitle ??\n    CopilotChatDefaultLabels.modalHeaderTitle,\n);\nconst headerClass = computed(() => [\n  \"cpk:flex cpk:items-center cpk:justify-between cpk:border-b cpk:border-border cpk:px-4 cpk:py-4\",\n  \"cpk:bg-background/95 cpk:backdrop-blur cpk:supports-[backdrop-filter]:bg-background/80\",\n  attrs.class,\n]);\nconst headerAttrs = computed(() => {\n  const { class: _className, ...rest } = attrs;\n  return rest;\n});\n\nfunction handleClose() {\n  config.value?.setModalOpen?.(false);\n}\n</script>\n\n<template>\n  <header\n    data-copilotkit\n    data-slot=\"copilot-modal-header\"\n    :class=\"headerClass\"\n    v-bind=\"headerAttrs\"\n  >\n    <slot name=\"layout\" :title=\"resolvedTitle\" :on-close=\"handleClose\">\n      <div class=\"cpk:flex cpk:w-full cpk:items-center cpk:gap-2\">\n        <div class=\"cpk:flex cpk:flex-1\" aria-hidden=\"true\" />\n        <div class=\"cpk:flex cpk:flex-1 cpk:justify-center cpk:text-center\">\n          <slot name=\"title-content\" :title=\"resolvedTitle\">\n            <CopilotModalHeaderTitle>\n              {{ resolvedTitle }}\n            </CopilotModalHeaderTitle>\n          </slot>\n        </div>\n        <div class=\"cpk:flex cpk:flex-1 cpk:justify-end\">\n          <slot name=\"close-button\" :on-close=\"handleClose\">\n            <CopilotModalHeaderCloseButton @click=\"handleClose\" />\n          </slot>\n        </div>\n      </div>\n    </slot>\n  </header>\n</template>\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  getCurrentInstance,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  useAttrs,\n  watch,\n} from \"vue\";\nimport { CopilotChatDefaultLabels } from \"../../providers/types\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport CopilotChatToggleButton from \"./CopilotChatToggleButton.vue\";\nimport CopilotChatView from \"./CopilotChatView.vue\";\nimport CopilotModalHeader from \"./CopilotModalHeader.vue\";\nimport type {\n  CopilotChatFeatherSlotProps,\n  CopilotChatMessageViewSlotProps,\n  CopilotChatScrollToBottomButtonSlotProps,\n  CopilotChatScrollViewSlotProps,\n  CopilotChatWelcomeScreenSlotProps,\n  CopilotPopupViewHeaderSlotProps,\n  CopilotPopupViewProps,\n  CopilotPopupViewToggleButtonSlotProps,\n  CopilotSidebarWelcomeScreenInputSlotProps,\n  CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst DEFAULT_POPUP_WIDTH = 420;\nconst DEFAULT_POPUP_HEIGHT = 560;\nconst POPUP_ANIMATION_MS = 200;\n\nconst props = withDefaults(\n  defineProps<Omit<CopilotPopupViewProps, \"defaultOpen\">>(),\n  {\n    messages: () => [],\n    autoScroll: true,\n    isRunning: false,\n    suggestions: () => [],\n    suggestionLoadingIndexes: () => [],\n    welcomeScreen: true,\n    inputValue: undefined,\n    inputMode: \"input\",\n    inputToolsMenu: () => [],\n    width: undefined,\n    height: undefined,\n    clickOutsideToClose: false,\n    onFinishTranscribeWithAudio: undefined,\n  },\n);\n\ndefineSlots<{\n  header?: (props: CopilotPopupViewHeaderSlotProps) => unknown;\n  \"toggle-button\"?: (props: CopilotPopupViewToggleButtonSlotProps) => unknown;\n  \"message-view\"?: (props: CopilotChatMessageViewSlotProps) => unknown;\n  \"scroll-view\"?: (props: CopilotChatScrollViewSlotProps) => unknown;\n  feather?: (props: CopilotChatFeatherSlotProps) => unknown;\n  \"scroll-to-bottom-button\"?: (\n    props: CopilotChatScrollToBottomButtonSlotProps,\n  ) => unknown;\n  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;\n  \"suggestion-view\"?: (\n    props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n  ) => unknown;\n  \"welcome-screen\"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;\n  \"welcome-message\"?: () => unknown;\n}>();\n\nconst emit = defineEmits<{\n  \"submit-message\": [value: string];\n  stop: [];\n  \"input-change\": [value: string];\n  \"select-suggestion\": [\n    suggestion: (typeof props.suggestions)[number],\n    index: number,\n  ];\n  \"add-file\": [];\n  \"start-transcribe\": [];\n  \"cancel-transcribe\": [];\n  \"finish-transcribe\": [];\n}>();\n\nconst attrs = useAttrs();\nconst config = useCopilotChatConfiguration();\nconst instance = getCurrentInstance();\nconst vnodeProps = computed(\n  () => (instance?.vnode.props ?? {}) as Record<string, unknown>,\n);\n\nconst containerRef = ref<HTMLElement | null>(null);\nconst isRendered = ref(config.value?.isModalOpen ?? false);\nconst isAnimatingOut = ref(false);\nlet animationTimer: ReturnType<typeof setTimeout> | undefined;\nlet focusTimer: ReturnType<typeof setTimeout> | undefined;\n\nconst isPopupOpen = computed(() => config.value?.isModalOpen ?? false);\nconst labels = computed(() => config.value?.labels ?? CopilotChatDefaultLabels);\nconst headerTitle = computed(() => labels.value.modalHeaderTitle);\nconst hasStopAction = computed(() => hasListener(\"onStop\"));\nconst popupAnimationClass = computed(() =>\n  isPopupOpen.value && !isAnimatingOut.value\n    ? \"cpk:pointer-events-auto cpk:translate-y-0 cpk:opacity-100 cpk:md:scale-100\"\n    : \"cpk:pointer-events-none cpk:translate-y-4 cpk:opacity-0 cpk:md:translate-y-5 cpk:md:scale-[0.95]\",\n);\nconst popupStyle = computed(\n  () =>\n    ({\n      \"--copilot-popup-width\": dimensionToCss(props.width, DEFAULT_POPUP_WIDTH),\n      \"--copilot-popup-height\": dimensionToCss(\n        props.height,\n        DEFAULT_POPUP_HEIGHT,\n      ),\n      \"--copilot-popup-max-width\": \"calc(100vw - 3rem)\",\n      \"--copilot-popup-max-height\": \"calc(100dvh - 7.5rem)\",\n      width: \"var(--copilot-popup-width)\",\n      height: \"var(--copilot-popup-height)\",\n      maxWidth: \"var(--copilot-popup-max-width)\",\n      maxHeight: \"var(--copilot-popup-max-height)\",\n      paddingTop: \"env(safe-area-inset-top)\",\n      paddingBottom: \"env(safe-area-inset-bottom)\",\n      paddingLeft: \"env(safe-area-inset-left)\",\n      paddingRight: \"env(safe-area-inset-right)\",\n    }) as Record<string, string>,\n);\n\nfunction dimensionToCss(\n  value: number | string | undefined,\n  fallback: number,\n): string {\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    return `${value}px`;\n  }\n  if (typeof value === \"string\" && value.trim().length > 0) {\n    return value;\n  }\n  return `${fallback}px`;\n}\n\nfunction hasListener(listenerName: string) {\n  const listener = vnodeProps.value[listenerName];\n  if (Array.isArray(listener)) {\n    return listener.length > 0;\n  }\n  return !!listener;\n}\n\nfunction closePopup() {\n  config.value?.setModalOpen?.(false);\n}\n\nfunction openPopup() {\n  config.value?.setModalOpen?.(true);\n}\n\nfunction togglePopup() {\n  config.value?.setModalOpen?.(!isPopupOpen.value);\n}\n\nfunction handleSubmitMessage(value: string) {\n  emit(\"submit-message\", value);\n}\n\nfunction handleStop() {\n  emit(\"stop\");\n}\n\nfunction handleInputChange(value: string) {\n  emit(\"input-change\", value);\n}\n\nfunction handleSelectSuggestion(\n  suggestion: (typeof props.suggestions)[number],\n  index: number,\n) {\n  emit(\"select-suggestion\", suggestion, index);\n}\n\nfunction handleAddFile() {\n  emit(\"add-file\");\n}\n\nfunction handleStartTranscribe() {\n  emit(\"start-transcribe\");\n}\n\nfunction handleCancelTranscribe() {\n  emit(\"cancel-transcribe\");\n}\n\nfunction handleFinishTranscribe() {\n  emit(\"finish-transcribe\");\n}\n\nconst chatViewEventProps = computed(() => {\n  const listeners: Record<string, unknown> = {\n    onSubmitMessage: handleSubmitMessage,\n    onInputChange: handleInputChange,\n    onSelectSuggestion: handleSelectSuggestion,\n  };\n\n  if (hasStopAction.value) {\n    listeners.onStop = handleStop;\n  }\n  if (hasListener(\"onAddFile\")) {\n    listeners.onAddFile = handleAddFile;\n  }\n  if (hasListener(\"onStartTranscribe\")) {\n    listeners.onStartTranscribe = handleStartTranscribe;\n  }\n  if (hasListener(\"onCancelTranscribe\")) {\n    listeners.onCancelTranscribe = handleCancelTranscribe;\n  }\n  if (hasListener(\"onFinishTranscribe\")) {\n    listeners.onFinishTranscribe = handleFinishTranscribe;\n  }\n\n  return listeners;\n});\n\nconst chatViewBindings = computed(() => ({\n  ...attrs,\n  ...chatViewEventProps.value,\n}));\n\nwatch(\n  isPopupOpen,\n  (open) => {\n    if (animationTimer) {\n      clearTimeout(animationTimer);\n      animationTimer = undefined;\n    }\n\n    if (open) {\n      isRendered.value = true;\n      isAnimatingOut.value = false;\n      return;\n    }\n\n    if (!isRendered.value) {\n      return;\n    }\n\n    isAnimatingOut.value = true;\n    animationTimer = setTimeout(() => {\n      isRendered.value = false;\n      isAnimatingOut.value = false;\n      animationTimer = undefined;\n    }, POPUP_ANIMATION_MS);\n  },\n  { immediate: true },\n);\n\nwatch(\n  isPopupOpen,\n  (open, _old, onCleanup) => {\n    if (!open || typeof window === \"undefined\") {\n      return;\n    }\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === \"Escape\") {\n        event.preventDefault();\n        closePopup();\n      }\n    };\n\n    window.addEventListener(\"keydown\", handleKeyDown);\n    onCleanup(() => {\n      window.removeEventListener(\"keydown\", handleKeyDown);\n    });\n  },\n  { immediate: true },\n);\n\nwatch(\n  isPopupOpen,\n  (open, _old, onCleanup) => {\n    if (!open) {\n      return;\n    }\n\n    focusTimer = setTimeout(() => {\n      if (typeof document === \"undefined\") {\n        return;\n      }\n      const container = containerRef.value;\n      if (container && !container.contains(document.activeElement)) {\n        container.focus({ preventScroll: true });\n      }\n    }, POPUP_ANIMATION_MS);\n\n    onCleanup(() => {\n      if (focusTimer) {\n        clearTimeout(focusTimer);\n        focusTimer = undefined;\n      }\n    });\n  },\n  { immediate: true },\n);\n\nwatch(\n  [isPopupOpen, () => props.clickOutsideToClose],\n  ([open, allowClose], _old, onCleanup) => {\n    if (!open || !allowClose || typeof document === \"undefined\") {\n      return;\n    }\n\n    const handlePointerDown = (event: PointerEvent) => {\n      const target = event.target as Node | null;\n      if (!target) {\n        return;\n      }\n\n      const container = containerRef.value;\n      if (container?.contains(target)) {\n        return;\n      }\n\n      const toggleButton = document.querySelector(\n        \"[data-slot='chat-toggle-button']\",\n      );\n      if (toggleButton?.contains(target)) {\n        return;\n      }\n\n      closePopup();\n    };\n\n    document.addEventListener(\"pointerdown\", handlePointerDown);\n    onCleanup(() => {\n      document.removeEventListener(\"pointerdown\", handlePointerDown);\n    });\n  },\n  { immediate: true },\n);\n\nonMounted(async () => {\n  await nextTick();\n});\n\nonBeforeUnmount(() => {\n  if (animationTimer) {\n    clearTimeout(animationTimer);\n  }\n  if (focusTimer) {\n    clearTimeout(focusTimer);\n  }\n});\n</script>\n\n<template>\n  <slot\n    name=\"toggle-button\"\n    :is-open=\"isPopupOpen\"\n    :toggle=\"togglePopup\"\n    :open=\"openPopup\"\n    :close=\"closePopup\"\n  >\n    <CopilotChatToggleButton />\n  </slot>\n\n  <div\n    v-if=\"isRendered\"\n    data-copilotkit\n    class=\"cpk:fixed cpk:inset-0 cpk:z-[1200] cpk:flex cpk:max-w-full cpk:flex-col cpk:items-stretch cpk:md:inset-auto cpk:md:bottom-24 cpk:md:right-6 cpk:md:items-end cpk:md:gap-4\"\n  >\n    <div\n      ref=\"containerRef\"\n      tabindex=\"-1\"\n      role=\"dialog\"\n      :aria-label=\"labels.modalHeaderTitle\"\n      data-copilot-popup\n      :class=\"[\n        'cpk:relative cpk:flex cpk:h-full cpk:w-full cpk:flex-col cpk:overflow-hidden cpk:bg-background cpk:text-foreground',\n        'cpk:origin-bottom cpk:focus:outline-none cpk:transform-gpu cpk:transition-transform cpk:transition-opacity cpk:duration-200 cpk:ease-out',\n        'cpk:md:transition-transform cpk:md:transition-opacity',\n        'cpk:rounded-none cpk:border cpk:border-border/0 cpk:shadow-none cpk:ring-0',\n        'cpk:md:h-[var(--copilot-popup-height)] cpk:md:w-[var(--copilot-popup-width)]',\n        'cpk:md:max-h-[var(--copilot-popup-max-height)] cpk:md:max-w-[var(--copilot-popup-max-width)]',\n        'cpk:md:origin-bottom-right cpk:md:rounded-2xl cpk:md:border-border cpk:md:shadow-xl cpk:md:ring-1 cpk:md:ring-border/40',\n        popupAnimationClass,\n      ]\"\n      :style=\"popupStyle\"\n    >\n      <slot\n        name=\"header\"\n        :title=\"headerTitle\"\n        :on-close=\"closePopup\"\n        :is-open=\"isPopupOpen\"\n      >\n        <CopilotModalHeader :title=\"headerTitle\" />\n      </slot>\n\n      <div class=\"cpk:flex-1 cpk:overflow-hidden\" data-popup-chat>\n        <CopilotChatView\n          :messages=\"messages\"\n          :auto-scroll=\"autoScroll\"\n          :is-running=\"isRunning\"\n          :suggestions=\"suggestions\"\n          :suggestion-loading-indexes=\"suggestionLoadingIndexes\"\n          :welcome-screen=\"welcomeScreen\"\n          :input-value=\"inputValue\"\n          :input-mode=\"inputMode\"\n          :input-tools-menu=\"inputToolsMenu\"\n          :on-finish-transcribe-with-audio=\"onFinishTranscribeWithAudio\"\n          v-bind=\"chatViewBindings\"\n        >\n          <template v-if=\"$slots['message-view']\" #message-view=\"slotProps\">\n            <slot name=\"message-view\" v-bind=\"slotProps\" />\n          </template>\n\n          <template v-if=\"$slots['scroll-view']\" #scroll-view=\"slotProps\">\n            <slot name=\"scroll-view\" v-bind=\"slotProps\" />\n          </template>\n\n          <template v-if=\"$slots.feather\" #feather>\n            <slot name=\"feather\" />\n          </template>\n\n          <template\n            v-if=\"$slots['scroll-to-bottom-button']\"\n            #scroll-to-bottom-button=\"slotProps\"\n          >\n            <slot name=\"scroll-to-bottom-button\" v-bind=\"slotProps\" />\n          </template>\n\n          <template v-if=\"$slots.input\" #input=\"slotProps\">\n            <slot name=\"input\" v-bind=\"slotProps\" />\n          </template>\n\n          <template\n            v-if=\"$slots['suggestion-view']\"\n            #suggestion-view=\"slotProps\"\n          >\n            <slot name=\"suggestion-view\" v-bind=\"slotProps\" />\n          </template>\n\n          <template v-if=\"$slots['welcome-screen']\" #welcome-screen=\"slotProps\">\n            <slot name=\"welcome-screen\" v-bind=\"slotProps\" />\n          </template>\n\n          <template v-if=\"$slots['welcome-message']\" #welcome-message>\n            <slot name=\"welcome-message\" />\n          </template>\n        </CopilotChatView>\n      </div>\n    </div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, useAttrs } from \"vue\";\nimport CopilotChatConfigurationProvider from \"../../providers/CopilotChatConfigurationProvider.vue\";\nimport CopilotPopupViewInternal from \"./CopilotPopupViewInternal.vue\";\nimport type {\n  CopilotChatFeatherSlotProps,\n  CopilotChatMessageViewSlotProps,\n  CopilotChatScrollToBottomButtonSlotProps,\n  CopilotChatScrollViewSlotProps,\n  CopilotChatWelcomeScreenSlotProps,\n  CopilotPopupViewHeaderSlotProps,\n  CopilotPopupViewProps,\n  CopilotPopupViewToggleButtonSlotProps,\n  CopilotSidebarWelcomeScreenInputSlotProps,\n  CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CopilotPopupViewProps>(), {\n  messages: () => [],\n  autoScroll: true,\n  isRunning: false,\n  suggestions: () => [],\n  suggestionLoadingIndexes: () => [],\n  welcomeScreen: true,\n  inputValue: undefined,\n  inputMode: \"input\",\n  inputToolsMenu: () => [],\n  width: undefined,\n  height: undefined,\n  clickOutsideToClose: false,\n  defaultOpen: true,\n  onFinishTranscribeWithAudio: undefined,\n});\n\ndefineSlots<{\n  header?: (props: CopilotPopupViewHeaderSlotProps) => unknown;\n  \"toggle-button\"?: (props: CopilotPopupViewToggleButtonSlotProps) => unknown;\n  \"message-view\"?: (props: CopilotChatMessageViewSlotProps) => unknown;\n  \"scroll-view\"?: (props: CopilotChatScrollViewSlotProps) => unknown;\n  feather?: (props: CopilotChatFeatherSlotProps) => unknown;\n  \"scroll-to-bottom-button\"?: (\n    props: CopilotChatScrollToBottomButtonSlotProps,\n  ) => unknown;\n  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;\n  \"suggestion-view\"?: (\n    props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n  ) => unknown;\n  \"welcome-screen\"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;\n  \"welcome-message\"?: () => unknown;\n}>();\n\nconst emit = defineEmits<{\n  \"submit-message\": [value: string];\n  stop: [];\n  \"input-change\": [value: string];\n  \"select-suggestion\": [\n    suggestion: (typeof props.suggestions)[number],\n    index: number,\n  ];\n  \"add-file\": [];\n  \"start-transcribe\": [];\n  \"cancel-transcribe\": [];\n  \"finish-transcribe\": [];\n}>();\n\nconst attrs = useAttrs();\nconst instance = getCurrentInstance();\nconst vnodeProps = computed(\n  () => (instance?.vnode.props ?? {}) as Record<string, unknown>,\n);\n\nfunction hasListener(listenerName: string) {\n  const listener = vnodeProps.value[listenerName];\n  if (Array.isArray(listener)) {\n    return listener.length > 0;\n  }\n  return !!listener;\n}\n\nconst internalProps = computed(() => {\n  const { defaultOpen: _defaultOpen, ...rest } = props;\n  return rest;\n});\n\nconst forwardedEventListeners = computed(() => {\n  const listeners: Record<string, unknown> = {\n    onSubmitMessage: (value: string) => emit(\"submit-message\", value),\n    onStop: () => emit(\"stop\"),\n    onInputChange: (value: string) => emit(\"input-change\", value),\n    onSelectSuggestion: (\n      suggestion: (typeof props.suggestions)[number],\n      index: number,\n    ) => emit(\"select-suggestion\", suggestion, index),\n  };\n\n  if (hasListener(\"onAddFile\")) {\n    listeners.onAddFile = () => emit(\"add-file\");\n  }\n  if (hasListener(\"onStartTranscribe\")) {\n    listeners.onStartTranscribe = () => emit(\"start-transcribe\");\n  }\n  if (hasListener(\"onCancelTranscribe\")) {\n    listeners.onCancelTranscribe = () => emit(\"cancel-transcribe\");\n  }\n  if (hasListener(\"onFinishTranscribe\")) {\n    listeners.onFinishTranscribe = () => emit(\"finish-transcribe\");\n  }\n\n  return listeners;\n});\n\nconst internalBindings = computed(() => ({\n  ...attrs,\n  ...internalProps.value,\n  ...forwardedEventListeners.value,\n}));\n</script>\n\n<template>\n  <CopilotChatConfigurationProvider :is-modal-default-open=\"defaultOpen\">\n    <CopilotPopupViewInternal v-bind=\"internalBindings\">\n      <template v-if=\"$slots.header\" #header=\"slotProps\">\n        <slot name=\"header\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['toggle-button']\" #toggle-button=\"slotProps\">\n        <slot name=\"toggle-button\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['message-view']\" #message-view=\"slotProps\">\n        <slot name=\"message-view\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['scroll-view']\" #scroll-view=\"slotProps\">\n        <slot name=\"scroll-view\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots.feather\" #feather=\"slotProps\">\n        <slot name=\"feather\" v-bind=\"slotProps\" />\n      </template>\n\n      <template\n        v-if=\"$slots['scroll-to-bottom-button']\"\n        #scroll-to-bottom-button=\"slotProps\"\n      >\n        <slot name=\"scroll-to-bottom-button\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots.input\" #input=\"slotProps\">\n        <slot name=\"input\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['suggestion-view']\" #suggestion-view=\"slotProps\">\n        <slot name=\"suggestion-view\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['welcome-screen']\" #welcome-screen=\"slotProps\">\n        <slot name=\"welcome-screen\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['welcome-message']\" #welcome-message>\n        <slot name=\"welcome-message\" />\n      </template>\n    </CopilotPopupViewInternal>\n  </CopilotChatConfigurationProvider>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport { CopilotChatDefaultLabels } from \"../../providers/types\";\nimport CopilotChatInput from \"./CopilotChatInput.vue\";\nimport CopilotChatSuggestionView from \"./CopilotChatSuggestionView.vue\";\nimport type {\n  CopilotPopupWelcomeScreenInputSlotProps,\n  CopilotPopupWelcomeScreenLayoutSlotProps,\n  CopilotPopupWelcomeScreenProps,\n  CopilotPopupWelcomeScreenSuggestionViewSlotProps,\n} from \"./types\";\n\nconst props = withDefaults(defineProps<CopilotPopupWelcomeScreenProps>(), {\n  suggestions: () => [],\n  loadingIndexes: () => [],\n  modelValue: \"\",\n  isRunning: false,\n  inputMode: \"input\",\n  inputToolsMenu: () => [],\n  onAddFile: undefined,\n  onStartTranscribe: undefined,\n  onCancelTranscribe: undefined,\n  onFinishTranscribe: undefined,\n  onFinishTranscribeWithAudio: undefined,\n});\n\ndefineSlots<{\n  \"welcome-message\"?: () => unknown;\n  input?: (props: CopilotPopupWelcomeScreenInputSlotProps) => unknown;\n  \"suggestion-view\"?: (\n    props: CopilotPopupWelcomeScreenSuggestionViewSlotProps,\n  ) => unknown;\n  layout?: (props: CopilotPopupWelcomeScreenLayoutSlotProps) => unknown;\n}>();\n\nconst config = useCopilotChatConfiguration();\nconst labels = computed(() => config.value?.labels ?? CopilotChatDefaultLabels);\n\nconst inputSlotProps = computed<CopilotPopupWelcomeScreenInputSlotProps>(\n  () => ({\n    modelValue: props.modelValue,\n    isRunning: props.isRunning,\n    inputMode: props.inputMode,\n    inputToolsMenu: props.inputToolsMenu,\n    onUpdateModelValue: props.onUpdateModelValue,\n    onSubmitMessage: props.onSubmitMessage,\n    onStop: props.onStop,\n    onAddFile: props.onAddFile,\n    onStartTranscribe: props.onStartTranscribe,\n    onCancelTranscribe: props.onCancelTranscribe,\n    onFinishTranscribe: props.onFinishTranscribe,\n    onFinishTranscribeWithAudio: props.onFinishTranscribeWithAudio,\n  }),\n);\nconst suggestionViewSlotProps =\n  computed<CopilotPopupWelcomeScreenSuggestionViewSlotProps>(() => ({\n    suggestions: props.suggestions,\n    loadingIndexes: props.loadingIndexes,\n    onSelectSuggestion: props.onSelectSuggestion,\n  }));\nconst layoutSlotProps = computed<CopilotPopupWelcomeScreenLayoutSlotProps>(\n  () => ({\n    ...inputSlotProps.value,\n    ...suggestionViewSlotProps.value,\n  }),\n);\n\nconst inputEventProps = computed(() => {\n  const listeners: Record<string, unknown> = {\n    \"onUpdate:modelValue\": props.onUpdateModelValue,\n    onSubmitMessage: props.onSubmitMessage,\n    onStop: props.onStop,\n  };\n\n  if (props.onAddFile) {\n    listeners.onAddFile = props.onAddFile;\n  }\n  if (props.onStartTranscribe) {\n    listeners.onStartTranscribe = props.onStartTranscribe;\n  }\n  if (props.onCancelTranscribe) {\n    listeners.onCancelTranscribe = props.onCancelTranscribe;\n  }\n  if (props.onFinishTranscribe) {\n    listeners.onFinishTranscribe = props.onFinishTranscribe;\n  }\n  if (props.onFinishTranscribeWithAudio) {\n    listeners.onFinishTranscribeWithAudio = props.onFinishTranscribeWithAudio;\n  }\n\n  return listeners;\n});\n</script>\n\n<template>\n  <slot name=\"layout\" v-bind=\"layoutSlotProps\">\n    <div\n      data-copilotkit\n      class=\"cpk:h-full cpk:flex cpk:flex-col\"\n      data-testid=\"copilot-popup-welcome-screen\"\n    >\n      <div\n        class=\"cpk:flex-1 cpk:flex cpk:flex-col cpk:items-center cpk:justify-center cpk:px-4\"\n      >\n        <slot name=\"welcome-message\">\n          <h1\n            class=\"cpk:text-xl cpk:sm:text-2xl cpk:font-medium cpk:text-foreground cpk:text-center\"\n          >\n            {{ labels.welcomeMessageText }}\n          </h1>\n        </slot>\n      </div>\n\n      <div>\n        <div class=\"cpk:mb-4 cpk:flex cpk:justify-center cpk:px-4\">\n          <slot name=\"suggestion-view\" v-bind=\"suggestionViewSlotProps\">\n            <CopilotChatSuggestionView\n              :suggestions=\"suggestions\"\n              :loading-indexes=\"loadingIndexes\"\n              @select-suggestion=\"onSelectSuggestion\"\n            />\n          </slot>\n        </div>\n\n        <slot name=\"input\" v-bind=\"inputSlotProps\">\n          <CopilotChatInput\n            :model-value=\"modelValue\"\n            :is-running=\"isRunning\"\n            :mode=\"inputMode\"\n            :tools-menu=\"inputToolsMenu\"\n            positioning=\"static\"\n            :show-disclaimer=\"true\"\n            v-bind=\"inputEventProps\"\n          />\n        </slot>\n      </div>\n    </div>\n  </slot>\n</template>\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  getCurrentInstance,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  useAttrs,\n  watch,\n} from \"vue\";\nimport { CopilotChatDefaultLabels } from \"../../providers/types\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport CopilotChatToggleButton from \"./CopilotChatToggleButton.vue\";\nimport CopilotChatView from \"./CopilotChatView.vue\";\nimport CopilotModalHeader from \"./CopilotModalHeader.vue\";\nimport type {\n  CopilotChatFeatherSlotProps,\n  CopilotChatMessageViewSlotProps,\n  CopilotChatScrollToBottomButtonSlotProps,\n  CopilotChatScrollViewSlotProps,\n  CopilotChatWelcomeScreenSlotProps,\n  CopilotSidebarWelcomeScreenInputSlotProps,\n  CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n  CopilotSidebarViewHeaderSlotProps,\n  CopilotSidebarViewProps,\n  CopilotSidebarViewToggleButtonSlotProps,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst DEFAULT_SIDEBAR_WIDTH = 480;\nconst SIDEBAR_TRANSITION_MS = 260;\n\nconst props = withDefaults(\n  defineProps<Omit<CopilotSidebarViewProps, \"defaultOpen\">>(),\n  {\n    messages: () => [],\n    autoScroll: true,\n    isRunning: false,\n    suggestions: () => [],\n    suggestionLoadingIndexes: () => [],\n    welcomeScreen: true,\n    inputValue: undefined,\n    inputMode: \"input\",\n    inputToolsMenu: () => [],\n    width: undefined,\n    onFinishTranscribeWithAudio: undefined,\n  },\n);\n\ndefineSlots<{\n  header?: (props: CopilotSidebarViewHeaderSlotProps) => unknown;\n  \"toggle-button\"?: (props: CopilotSidebarViewToggleButtonSlotProps) => unknown;\n  \"message-view\"?: (props: CopilotChatMessageViewSlotProps) => unknown;\n  \"scroll-view\"?: (props: CopilotChatScrollViewSlotProps) => unknown;\n  feather?: (props: CopilotChatFeatherSlotProps) => unknown;\n  \"scroll-to-bottom-button\"?: (\n    props: CopilotChatScrollToBottomButtonSlotProps,\n  ) => unknown;\n  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;\n  \"suggestion-view\"?: (\n    props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n  ) => unknown;\n  \"welcome-screen\"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;\n  \"welcome-message\"?: () => unknown;\n}>();\n\nconst emit = defineEmits<{\n  \"submit-message\": [value: string];\n  stop: [];\n  \"input-change\": [value: string];\n  \"select-suggestion\": [\n    suggestion: (typeof props.suggestions)[number],\n    index: number,\n  ];\n  \"add-file\": [];\n  \"start-transcribe\": [];\n  \"cancel-transcribe\": [];\n  \"finish-transcribe\": [];\n}>();\n\nconst attrs = useAttrs();\nconst config = useCopilotChatConfiguration();\nconst instance = getCurrentInstance();\nconst vnodeProps = computed(\n  () => (instance?.vnode.props ?? {}) as Record<string, unknown>,\n);\n\nconst sidebarRef = ref<HTMLElement | null>(null);\nconst measuredSidebarWidth = ref<number | string>(\n  props.width ?? DEFAULT_SIDEBAR_WIDTH,\n);\nlet resizeObserver: ResizeObserver | null = null;\n\nconst isSidebarOpen = computed(() => config.value?.isModalOpen ?? false);\nconst resolvedSidebarWidth = computed(\n  () => props.width ?? measuredSidebarWidth.value,\n);\nconst headerTitle = computed(\n  () =>\n    config.value?.labels.modalHeaderTitle ??\n    CopilotChatDefaultLabels.modalHeaderTitle,\n);\nconst asideClass = computed(() => [\n  \"cpk:fixed cpk:right-0 cpk:top-0 cpk:z-[1200] cpk:flex cpk:h-[100vh] cpk:h-[100dvh] cpk:max-h-screen cpk:w-full\",\n  \"cpk:border-l cpk:border-border cpk:bg-background cpk:text-foreground cpk:shadow-xl\",\n  \"cpk:transition-transform cpk:duration-300 cpk:ease-out\",\n  isSidebarOpen.value\n    ? \"cpk:translate-x-0\"\n    : \"cpk:translate-x-full cpk:pointer-events-none\",\n  attrs.class,\n]);\nconst asideAttrs = computed(() => {\n  const { class: _className, ...rest } = attrs;\n  return rest;\n});\nconst hasStopAction = computed(() => hasListener(\"onStop\"));\nconst asideStyle = computed(\n  () =>\n    ({\n      \"--sidebar-width\": widthToCss(resolvedSidebarWidth.value),\n      paddingTop: \"env(safe-area-inset-top)\",\n      paddingBottom: \"env(safe-area-inset-bottom)\",\n    }) as Record<string, string>,\n);\nconst bodyMarginStyle = computed(\n  () => `\n@media (min-width: 768px) {\n  body {\n    margin-inline-end: ${widthToMargin(resolvedSidebarWidth.value)};\n    transition: margin-inline-end ${SIDEBAR_TRANSITION_MS}ms ease;\n  }\n}\n`,\n);\n\nfunction hasListener(listenerName: string) {\n  const listener = vnodeProps.value[listenerName];\n  if (Array.isArray(listener)) {\n    return listener.length > 0;\n  }\n  return !!listener;\n}\n\nfunction widthToCss(width: number | string): string {\n  return typeof width === \"number\" ? `${width}px` : width;\n}\n\nfunction widthToMargin(width: number | string): string {\n  return typeof width === \"number\" ? `${width}px` : width;\n}\n\nfunction updateMeasuredWidth() {\n  if (props.width !== undefined || !sidebarRef.value) {\n    return;\n  }\n\n  const nextWidth = sidebarRef.value.getBoundingClientRect().width;\n  if (nextWidth > 0) {\n    measuredSidebarWidth.value = nextWidth;\n  }\n}\n\nfunction closeSidebar() {\n  config.value?.setModalOpen?.(false);\n}\n\nfunction openSidebar() {\n  config.value?.setModalOpen?.(true);\n}\n\nfunction toggleSidebar() {\n  config.value?.setModalOpen?.(!isSidebarOpen.value);\n}\n\nfunction handleSubmitMessage(value: string) {\n  emit(\"submit-message\", value);\n}\n\nfunction handleStop() {\n  emit(\"stop\");\n}\n\nfunction handleInputChange(value: string) {\n  emit(\"input-change\", value);\n}\n\nfunction handleSelectSuggestion(\n  suggestion: (typeof props.suggestions)[number],\n  index: number,\n) {\n  emit(\"select-suggestion\", suggestion, index);\n}\n\nfunction handleAddFile() {\n  emit(\"add-file\");\n}\n\nfunction handleStartTranscribe() {\n  emit(\"start-transcribe\");\n}\n\nfunction handleCancelTranscribe() {\n  emit(\"cancel-transcribe\");\n}\n\nfunction handleFinishTranscribe() {\n  emit(\"finish-transcribe\");\n}\n\nconst chatViewEventProps = computed(() => {\n  const listeners: Record<string, unknown> = {\n    onSubmitMessage: handleSubmitMessage,\n    onInputChange: handleInputChange,\n    onSelectSuggestion: handleSelectSuggestion,\n  };\n\n  if (hasStopAction.value) {\n    listeners.onStop = handleStop;\n  }\n  if (hasListener(\"onAddFile\")) {\n    listeners.onAddFile = handleAddFile;\n  }\n  if (hasListener(\"onStartTranscribe\")) {\n    listeners.onStartTranscribe = handleStartTranscribe;\n  }\n  if (hasListener(\"onCancelTranscribe\")) {\n    listeners.onCancelTranscribe = handleCancelTranscribe;\n  }\n  if (hasListener(\"onFinishTranscribe\")) {\n    listeners.onFinishTranscribe = handleFinishTranscribe;\n  }\n\n  return listeners;\n});\n\nwatch(\n  () => props.width,\n  (nextWidth) => {\n    if (nextWidth !== undefined) {\n      measuredSidebarWidth.value = nextWidth;\n      return;\n    }\n    updateMeasuredWidth();\n  },\n);\n\nonMounted(async () => {\n  await nextTick();\n  updateMeasuredWidth();\n\n  if (\n    props.width !== undefined ||\n    !sidebarRef.value ||\n    typeof ResizeObserver === \"undefined\"\n  ) {\n    return;\n  }\n\n  resizeObserver = new ResizeObserver(() => {\n    updateMeasuredWidth();\n  });\n  resizeObserver.observe(sidebarRef.value);\n});\n\nonBeforeUnmount(() => {\n  resizeObserver?.disconnect();\n  resizeObserver = null;\n});\n</script>\n\n<template>\n  <component :is=\"'style'\" v-if=\"isSidebarOpen\">\n    {{ bodyMarginStyle }}\n  </component>\n\n  <slot\n    name=\"toggle-button\"\n    :is-open=\"isSidebarOpen\"\n    :toggle=\"toggleSidebar\"\n    :open=\"openSidebar\"\n    :close=\"closeSidebar\"\n  >\n    <CopilotChatToggleButton />\n  </slot>\n\n  <aside\n    ref=\"sidebarRef\"\n    data-copilotkit\n    data-copilot-sidebar\n    :class=\"asideClass\"\n    :style=\"asideStyle\"\n    aria-label=\"Copilot chat sidebar\"\n    :aria-hidden=\"!isSidebarOpen\"\n    role=\"complementary\"\n    v-bind=\"asideAttrs\"\n  >\n    <div\n      class=\"cpk:flex cpk:h-full cpk:w-full cpk:flex-col cpk:overflow-hidden\"\n    >\n      <slot\n        name=\"header\"\n        :title=\"headerTitle\"\n        :on-close=\"closeSidebar\"\n        :is-open=\"isSidebarOpen\"\n      >\n        <CopilotModalHeader :title=\"headerTitle\" />\n      </slot>\n\n      <div class=\"cpk:flex-1 cpk:overflow-hidden\" data-sidebar-chat>\n        <CopilotChatView\n          :messages=\"messages\"\n          :auto-scroll=\"autoScroll\"\n          :is-running=\"isRunning\"\n          :suggestions=\"suggestions\"\n          :suggestion-loading-indexes=\"suggestionLoadingIndexes\"\n          :welcome-screen=\"welcomeScreen\"\n          :input-value=\"inputValue\"\n          :input-mode=\"inputMode\"\n          :input-tools-menu=\"inputToolsMenu\"\n          :on-finish-transcribe-with-audio=\"onFinishTranscribeWithAudio\"\n          v-bind=\"chatViewEventProps\"\n        >\n          <template v-if=\"$slots['message-view']\" #message-view=\"slotProps\">\n            <slot name=\"message-view\" v-bind=\"slotProps\" />\n          </template>\n\n          <template v-if=\"$slots['scroll-view']\" #scroll-view=\"slotProps\">\n            <slot name=\"scroll-view\" v-bind=\"slotProps\" />\n          </template>\n\n          <template v-if=\"$slots.feather\" #feather>\n            <slot name=\"feather\" />\n          </template>\n\n          <template\n            v-if=\"$slots['scroll-to-bottom-button']\"\n            #scroll-to-bottom-button=\"slotProps\"\n          >\n            <slot name=\"scroll-to-bottom-button\" v-bind=\"slotProps\" />\n          </template>\n\n          <template v-if=\"$slots.input\" #input=\"slotProps\">\n            <slot name=\"input\" v-bind=\"slotProps\" />\n          </template>\n\n          <template\n            v-if=\"$slots['suggestion-view']\"\n            #suggestion-view=\"slotProps\"\n          >\n            <slot name=\"suggestion-view\" v-bind=\"slotProps\" />\n          </template>\n\n          <template v-if=\"$slots['welcome-screen']\" #welcome-screen=\"slotProps\">\n            <slot name=\"welcome-screen\" v-bind=\"slotProps\" />\n          </template>\n\n          <template v-if=\"$slots['welcome-message']\" #welcome-message>\n            <slot name=\"welcome-message\" />\n          </template>\n        </CopilotChatView>\n      </div>\n    </div>\n  </aside>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, useAttrs } from \"vue\";\nimport CopilotChatConfigurationProvider from \"../../providers/CopilotChatConfigurationProvider.vue\";\nimport CopilotSidebarViewInternal from \"./CopilotSidebarViewInternal.vue\";\nimport type {\n  CopilotChatFeatherSlotProps,\n  CopilotChatWelcomeScreenSlotProps,\n  CopilotChatMessageViewSlotProps,\n  CopilotChatScrollToBottomButtonSlotProps,\n  CopilotChatScrollViewSlotProps,\n  CopilotSidebarWelcomeScreenInputSlotProps,\n  CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n  CopilotSidebarViewProps,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CopilotSidebarViewProps>(), {\n  messages: () => [],\n  autoScroll: true,\n  isRunning: false,\n  suggestions: () => [],\n  suggestionLoadingIndexes: () => [],\n  welcomeScreen: true,\n  inputValue: undefined,\n  inputMode: \"input\",\n  inputToolsMenu: () => [],\n  width: undefined,\n  defaultOpen: true,\n  onFinishTranscribeWithAudio: undefined,\n});\n\ndefineSlots<{\n  header?: (props: {\n    title: string;\n    onClose: () => void;\n    isOpen: boolean;\n  }) => unknown;\n  \"toggle-button\"?: (props: {\n    isOpen: boolean;\n    toggle: () => void;\n    open: () => void;\n    close: () => void;\n  }) => unknown;\n  \"message-view\"?: (props: CopilotChatMessageViewSlotProps) => unknown;\n  \"scroll-view\"?: (props: CopilotChatScrollViewSlotProps) => unknown;\n  feather?: (props: CopilotChatFeatherSlotProps) => unknown;\n  \"scroll-to-bottom-button\"?: (\n    props: CopilotChatScrollToBottomButtonSlotProps,\n  ) => unknown;\n  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;\n  \"suggestion-view\"?: (\n    props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n  ) => unknown;\n  \"welcome-screen\"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;\n  \"welcome-message\"?: () => unknown;\n}>();\n\nconst emit = defineEmits<{\n  \"submit-message\": [value: string];\n  stop: [];\n  \"input-change\": [value: string];\n  \"select-suggestion\": [\n    suggestion: (typeof props.suggestions)[number],\n    index: number,\n  ];\n  \"add-file\": [];\n  \"start-transcribe\": [];\n  \"cancel-transcribe\": [];\n  \"finish-transcribe\": [];\n}>();\n\nconst attrs = useAttrs();\nconst instance = getCurrentInstance();\nconst vnodeProps = computed(\n  () => (instance?.vnode.props ?? {}) as Record<string, unknown>,\n);\n\nconst internalProps = computed(() => {\n  const { defaultOpen: _defaultOpen, ...rest } = props;\n  return rest;\n});\nconst internalBindings = computed(() => ({\n  ...attrs,\n  ...internalProps.value,\n  ...forwardedEventListeners.value,\n}));\n\nfunction hasListener(listenerName: string) {\n  const listener = vnodeProps.value[listenerName];\n  if (Array.isArray(listener)) {\n    return listener.length > 0;\n  }\n  return !!listener;\n}\n\nconst forwardedEventListeners = computed(() => {\n  const listeners: Record<string, unknown> = {\n    onSubmitMessage: (value: string) => emit(\"submit-message\", value),\n    onStop: () => emit(\"stop\"),\n    onInputChange: (value: string) => emit(\"input-change\", value),\n    onSelectSuggestion: (\n      suggestion: (typeof props.suggestions)[number],\n      index: number,\n    ) => emit(\"select-suggestion\", suggestion, index),\n  };\n\n  if (hasListener(\"onAddFile\")) {\n    listeners.onAddFile = () => emit(\"add-file\");\n  }\n  if (hasListener(\"onStartTranscribe\")) {\n    listeners.onStartTranscribe = () => emit(\"start-transcribe\");\n  }\n  if (hasListener(\"onCancelTranscribe\")) {\n    listeners.onCancelTranscribe = () => emit(\"cancel-transcribe\");\n  }\n  if (hasListener(\"onFinishTranscribe\")) {\n    listeners.onFinishTranscribe = () => emit(\"finish-transcribe\");\n  }\n\n  return listeners;\n});\n</script>\n\n<template>\n  <CopilotChatConfigurationProvider :is-modal-default-open=\"defaultOpen\">\n    <CopilotSidebarViewInternal v-bind=\"internalBindings\">\n      <template v-if=\"$slots.header\" #header=\"slotProps\">\n        <slot name=\"header\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['toggle-button']\" #toggle-button=\"slotProps\">\n        <slot name=\"toggle-button\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['message-view']\" #message-view=\"slotProps\">\n        <slot name=\"message-view\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['scroll-view']\" #scroll-view=\"slotProps\">\n        <slot name=\"scroll-view\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots.feather\" #feather=\"slotProps\">\n        <slot name=\"feather\" v-bind=\"slotProps\" />\n      </template>\n\n      <template\n        v-if=\"$slots['scroll-to-bottom-button']\"\n        #scroll-to-bottom-button=\"slotProps\"\n      >\n        <slot name=\"scroll-to-bottom-button\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots.input\" #input=\"slotProps\">\n        <slot name=\"input\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['suggestion-view']\" #suggestion-view=\"slotProps\">\n        <slot name=\"suggestion-view\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['welcome-screen']\" #welcome-screen=\"slotProps\">\n        <slot name=\"welcome-screen\" v-bind=\"slotProps\" />\n      </template>\n\n      <template v-if=\"$slots['welcome-message']\" #welcome-message>\n        <slot name=\"welcome-message\" />\n      </template>\n    </CopilotSidebarViewInternal>\n  </CopilotChatConfigurationProvider>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { useCopilotChatConfiguration } from \"../../providers/useCopilotChatConfiguration\";\nimport { CopilotChatDefaultLabels } from \"../../providers/types\";\nimport CopilotChatInput from \"./CopilotChatInput.vue\";\nimport CopilotChatSuggestionView from \"./CopilotChatSuggestionView.vue\";\nimport type {\n  CopilotSidebarWelcomeScreenInputSlotProps,\n  CopilotSidebarWelcomeScreenLayoutSlotProps,\n  CopilotSidebarWelcomeScreenProps,\n  CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n} from \"./types\";\n\nconst props = withDefaults(defineProps<CopilotSidebarWelcomeScreenProps>(), {\n  suggestions: () => [],\n  loadingIndexes: () => [],\n  modelValue: \"\",\n  isRunning: false,\n  inputMode: \"input\",\n  inputToolsMenu: () => [],\n  onAddFile: undefined,\n  onStartTranscribe: undefined,\n  onCancelTranscribe: undefined,\n  onFinishTranscribe: undefined,\n  onFinishTranscribeWithAudio: undefined,\n});\n\ndefineSlots<{\n  \"welcome-message\"?: () => unknown;\n  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;\n  \"suggestion-view\"?: (\n    props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n  ) => unknown;\n  layout?: (props: CopilotSidebarWelcomeScreenLayoutSlotProps) => unknown;\n}>();\n\nconst config = useCopilotChatConfiguration();\nconst labels = computed(() => config.value?.labels ?? CopilotChatDefaultLabels);\n\nconst inputSlotProps = computed<CopilotSidebarWelcomeScreenInputSlotProps>(\n  () => ({\n    modelValue: props.modelValue,\n    isRunning: props.isRunning,\n    inputMode: props.inputMode,\n    inputToolsMenu: props.inputToolsMenu,\n    onUpdateModelValue: props.onUpdateModelValue,\n    onSubmitMessage: props.onSubmitMessage,\n    onStop: props.onStop,\n    onAddFile: props.onAddFile,\n    onStartTranscribe: props.onStartTranscribe,\n    onCancelTranscribe: props.onCancelTranscribe,\n    onFinishTranscribe: props.onFinishTranscribe,\n    onFinishTranscribeWithAudio: props.onFinishTranscribeWithAudio,\n  }),\n);\nconst suggestionViewSlotProps =\n  computed<CopilotSidebarWelcomeScreenSuggestionViewSlotProps>(() => ({\n    suggestions: props.suggestions,\n    loadingIndexes: props.loadingIndexes,\n    onSelectSuggestion: props.onSelectSuggestion,\n  }));\nconst layoutSlotProps = computed<CopilotSidebarWelcomeScreenLayoutSlotProps>(\n  () => ({\n    ...inputSlotProps.value,\n    ...suggestionViewSlotProps.value,\n  }),\n);\n\nconst inputEventProps = computed(() => {\n  const listeners: Record<string, unknown> = {\n    \"onUpdate:modelValue\": props.onUpdateModelValue,\n    onSubmitMessage: props.onSubmitMessage,\n    onStop: props.onStop,\n  };\n\n  if (props.onAddFile) {\n    listeners.onAddFile = props.onAddFile;\n  }\n  if (props.onStartTranscribe) {\n    listeners.onStartTranscribe = props.onStartTranscribe;\n  }\n  if (props.onCancelTranscribe) {\n    listeners.onCancelTranscribe = props.onCancelTranscribe;\n  }\n  if (props.onFinishTranscribe) {\n    listeners.onFinishTranscribe = props.onFinishTranscribe;\n  }\n  if (props.onFinishTranscribeWithAudio) {\n    listeners.onFinishTranscribeWithAudio = props.onFinishTranscribeWithAudio;\n  }\n\n  return listeners;\n});\n</script>\n\n<template>\n  <slot name=\"layout\" v-bind=\"layoutSlotProps\">\n    <div\n      data-copilotkit\n      class=\"cpk:h-full cpk:flex cpk:flex-col\"\n      data-testid=\"copilot-sidebar-welcome-screen\"\n    >\n      <div\n        class=\"cpk:flex-1 cpk:flex cpk:flex-col cpk:items-center cpk:justify-center cpk:px-4\"\n      >\n        <slot name=\"welcome-message\">\n          <h1\n            class=\"cpk:text-xl cpk:sm:text-2xl cpk:font-medium cpk:text-foreground cpk:text-center\"\n          >\n            {{ labels.welcomeMessageText }}\n          </h1>\n        </slot>\n      </div>\n\n      <div class=\"cpk:px-8 cpk:pb-4\">\n        <div class=\"cpk:max-w-3xl cpk:mx-auto\">\n          <div class=\"cpk:mb-4 cpk:flex cpk:justify-center\">\n            <slot name=\"suggestion-view\" v-bind=\"suggestionViewSlotProps\">\n              <CopilotChatSuggestionView\n                :suggestions=\"suggestions\"\n                :loading-indexes=\"loadingIndexes\"\n                @select-suggestion=\"onSelectSuggestion\"\n              />\n            </slot>\n          </div>\n\n          <slot name=\"input\" v-bind=\"inputSlotProps\">\n            <CopilotChatInput\n              :model-value=\"modelValue\"\n              :is-running=\"isRunning\"\n              :mode=\"inputMode\"\n              :tools-menu=\"inputToolsMenu\"\n              positioning=\"static\"\n              :show-disclaimer=\"true\"\n              v-bind=\"inputEventProps\"\n            />\n          </slot>\n        </div>\n      </div>\n    </div>\n  </slot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, watch } from \"vue\";\nimport CopilotChat from \"./CopilotChat.vue\";\nimport CopilotPopupView from \"./CopilotPopupView.vue\";\nimport CopilotPopupWelcomeScreen from \"./CopilotPopupWelcomeScreen.vue\";\nimport InlineFeatureWarning from \"../InlineFeatureWarning.vue\";\nimport { useLicenseContext } from \"../../providers/useLicenseContext\";\nimport type {\n  CopilotChatMessageViewSlotProps,\n  CopilotChatViewOverrideSlotProps,\n  CopilotChatWelcomeScreenSlotProps,\n  CopilotPopupProps,\n  CopilotPopupViewHeaderSlotProps,\n  CopilotPopupViewToggleButtonSlotProps,\n  CopilotSidebarWelcomeScreenInputSlotProps,\n  CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n} from \"./types\";\nimport type { Suggestion } from \"@copilotkit/core\";\n\nfunction popupViewEventBindings(slotProps: CopilotChatViewOverrideSlotProps) {\n  return {\n    onSubmitMessage: slotProps.onSubmitMessage,\n    onInputChange: slotProps.onInputChange,\n    onSelectSuggestion: slotProps.onSelectSuggestion,\n    ...(slotProps.onStop ? { onStop: slotProps.onStop } : {}),\n    ...(slotProps.onAddFile ? { onAddFile: slotProps.onAddFile } : {}),\n    ...(slotProps.onStartTranscribe\n      ? { onStartTranscribe: slotProps.onStartTranscribe }\n      : {}),\n    ...(slotProps.onCancelTranscribe\n      ? { onCancelTranscribe: slotProps.onCancelTranscribe }\n      : {}),\n    ...(slotProps.onFinishTranscribe\n      ? { onFinishTranscribe: slotProps.onFinishTranscribe }\n      : {}),\n  };\n}\n\nconst props = withDefaults(defineProps<CopilotPopupProps>(), {\n  autoScroll: true,\n  welcomeScreen: true,\n  inputValue: undefined,\n  inputMode: \"input\",\n  inputToolsMenu: () => [],\n  width: undefined,\n  height: undefined,\n  clickOutsideToClose: false,\n  defaultOpen: true,\n  onFinishTranscribeWithAudio: undefined,\n});\n\ndefineSlots<{\n  header?: (props: CopilotPopupViewHeaderSlotProps) => unknown;\n  \"toggle-button\"?: (props: CopilotPopupViewToggleButtonSlotProps) => unknown;\n  \"chat-view\"?: (props: CopilotChatViewOverrideSlotProps) => unknown;\n  \"message-view\"?: (props: CopilotChatMessageViewSlotProps) => unknown;\n  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;\n  \"suggestion-view\"?: (\n    props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n  ) => unknown;\n  \"welcome-screen\"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;\n  \"welcome-message\"?: () => unknown;\n}>();\n\ndefineEmits<{\n  \"submit-message\": [value: string];\n  stop: [];\n  \"input-change\": [value: string];\n  \"select-suggestion\": [suggestion: Suggestion, index: number];\n  \"add-file\": [];\n  \"start-transcribe\": [];\n  \"cancel-transcribe\": [];\n  \"finish-transcribe\": [];\n}>();\n\nconst license = useLicenseContext();\nconst isPopupLicensed = computed(() => license.value.checkFeature(\"popup\"));\n\nwatch(\n  isPopupLicensed,\n  (licensed) => {\n    if (!licensed) {\n      console.warn(\n        '[CopilotKit] Warning: \"popup\" feature is not licensed. Visit copilotkit.ai/pricing',\n      );\n    }\n  },\n  { immediate: true },\n);\n</script>\n\n<template>\n  <InlineFeatureWarning v-if=\"!isPopupLicensed\" feature-name=\"Popup\" />\n  <CopilotChat\n    v-bind=\"props\"\n    @submit-message=\"$emit('submit-message', $event)\"\n    @stop=\"$emit('stop')\"\n    @input-change=\"$emit('input-change', $event)\"\n    @select-suggestion=\"\n      (suggestion, index) => $emit('select-suggestion', suggestion, index)\n    \"\n    @add-file=\"$emit('add-file')\"\n    @start-transcribe=\"$emit('start-transcribe')\"\n    @cancel-transcribe=\"$emit('cancel-transcribe')\"\n    @finish-transcribe=\"$emit('finish-transcribe')\"\n  >\n    <template #chat-view=\"slotProps\">\n      <slot v-if=\"$slots['chat-view']\" name=\"chat-view\" v-bind=\"slotProps\" />\n      <CopilotPopupView\n        v-else\n        :messages=\"slotProps.messages\"\n        :auto-scroll=\"slotProps.autoScroll\"\n        :is-running=\"slotProps.isRunning\"\n        :suggestions=\"slotProps.suggestions\"\n        :suggestion-loading-indexes=\"slotProps.suggestionLoadingIndexes\"\n        :welcome-screen=\"slotProps.welcomeScreen\"\n        :input-value=\"slotProps.inputValue\"\n        :input-mode=\"slotProps.inputMode\"\n        :input-tools-menu=\"slotProps.inputToolsMenu\"\n        :width=\"width\"\n        :height=\"height\"\n        :click-outside-to-close=\"clickOutsideToClose\"\n        :default-open=\"defaultOpen\"\n        :on-finish-transcribe-with-audio=\"slotProps.onFinishTranscribeWithAudio\"\n        v-bind=\"popupViewEventBindings(slotProps)\"\n      >\n        <template v-if=\"$slots.header\" #header=\"headerProps\">\n          <slot name=\"header\" v-bind=\"headerProps\" />\n        </template>\n\n        <template\n          v-if=\"$slots['toggle-button']\"\n          #toggle-button=\"toggleButtonProps\"\n        >\n          <slot name=\"toggle-button\" v-bind=\"toggleButtonProps\" />\n        </template>\n\n        <template #welcome-screen=\"welcomeScreenProps\">\n          <slot\n            v-if=\"$slots['welcome-screen']\"\n            name=\"welcome-screen\"\n            v-bind=\"welcomeScreenProps\"\n          />\n          <CopilotPopupWelcomeScreen v-else v-bind=\"welcomeScreenProps\">\n            <template v-if=\"$slots['welcome-message']\" #welcome-message>\n              <slot name=\"welcome-message\" />\n            </template>\n\n            <template\n              v-if=\"$slots['suggestion-view']\"\n              #suggestion-view=\"suggestionViewProps\"\n            >\n              <slot name=\"suggestion-view\" v-bind=\"suggestionViewProps\" />\n            </template>\n\n            <template v-if=\"$slots.input\" #input=\"inputProps\">\n              <slot name=\"input\" v-bind=\"inputProps\" />\n            </template>\n          </CopilotPopupWelcomeScreen>\n        </template>\n\n        <template\n          v-if=\"$slots['message-view']\"\n          #message-view=\"messageViewProps\"\n        >\n          <slot name=\"message-view\" v-bind=\"messageViewProps\" />\n        </template>\n\n        <template v-if=\"$slots.input\" #input=\"inputProps\">\n          <slot name=\"input\" v-bind=\"inputProps\" />\n        </template>\n\n        <template\n          v-if=\"$slots['suggestion-view']\"\n          #suggestion-view=\"suggestionViewProps\"\n        >\n          <slot name=\"suggestion-view\" v-bind=\"suggestionViewProps\" />\n        </template>\n      </CopilotPopupView>\n    </template>\n  </CopilotChat>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, watch } from \"vue\";\nimport CopilotChat from \"./CopilotChat.vue\";\nimport CopilotSidebarView from \"./CopilotSidebarView.vue\";\nimport CopilotSidebarWelcomeScreen from \"./CopilotSidebarWelcomeScreen.vue\";\nimport InlineFeatureWarning from \"../InlineFeatureWarning.vue\";\nimport { useLicenseContext } from \"../../providers/useLicenseContext\";\nimport type {\n  CopilotChatMessageViewSlotProps,\n  CopilotChatViewOverrideSlotProps,\n  CopilotChatWelcomeScreenSlotProps,\n  CopilotSidebarProps,\n  CopilotSidebarViewHeaderSlotProps,\n  CopilotSidebarViewToggleButtonSlotProps,\n  CopilotSidebarWelcomeScreenInputSlotProps,\n  CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n} from \"./types\";\nimport type { Suggestion } from \"@copilotkit/core\";\n\nfunction sidebarViewEventBindings(slotProps: CopilotChatViewOverrideSlotProps) {\n  return {\n    onSubmitMessage: slotProps.onSubmitMessage,\n    onInputChange: slotProps.onInputChange,\n    onSelectSuggestion: slotProps.onSelectSuggestion,\n    ...(slotProps.onStop ? { onStop: slotProps.onStop } : {}),\n    ...(slotProps.onAddFile ? { onAddFile: slotProps.onAddFile } : {}),\n    ...(slotProps.onStartTranscribe\n      ? { onStartTranscribe: slotProps.onStartTranscribe }\n      : {}),\n    ...(slotProps.onCancelTranscribe\n      ? { onCancelTranscribe: slotProps.onCancelTranscribe }\n      : {}),\n    ...(slotProps.onFinishTranscribe\n      ? { onFinishTranscribe: slotProps.onFinishTranscribe }\n      : {}),\n  };\n}\n\nconst props = withDefaults(defineProps<CopilotSidebarProps>(), {\n  autoScroll: true,\n  welcomeScreen: true,\n  inputValue: undefined,\n  inputMode: \"input\",\n  inputToolsMenu: () => [],\n  width: undefined,\n  defaultOpen: true,\n  onFinishTranscribeWithAudio: undefined,\n});\n\ndefineSlots<{\n  header?: (props: CopilotSidebarViewHeaderSlotProps) => unknown;\n  \"toggle-button\"?: (props: CopilotSidebarViewToggleButtonSlotProps) => unknown;\n  \"chat-view\"?: (props: CopilotChatViewOverrideSlotProps) => unknown;\n  \"message-view\"?: (props: CopilotChatMessageViewSlotProps) => unknown;\n  input?: (props: CopilotSidebarWelcomeScreenInputSlotProps) => unknown;\n  \"suggestion-view\"?: (\n    props: CopilotSidebarWelcomeScreenSuggestionViewSlotProps,\n  ) => unknown;\n  \"welcome-screen\"?: (props: CopilotChatWelcomeScreenSlotProps) => unknown;\n  \"welcome-message\"?: () => unknown;\n}>();\n\ndefineEmits<{\n  \"submit-message\": [value: string];\n  stop: [];\n  \"input-change\": [value: string];\n  \"select-suggestion\": [suggestion: Suggestion, index: number];\n  \"add-file\": [];\n  \"start-transcribe\": [];\n  \"cancel-transcribe\": [];\n  \"finish-transcribe\": [];\n}>();\n\nconst license = useLicenseContext();\nconst isSidebarLicensed = computed(() => license.value.checkFeature(\"sidebar\"));\n\nwatch(\n  isSidebarLicensed,\n  (licensed) => {\n    if (!licensed) {\n      console.warn(\n        '[CopilotKit] Warning: \"sidebar\" feature is not licensed. Visit copilotkit.ai/pricing',\n      );\n    }\n  },\n  { immediate: true },\n);\n</script>\n\n<template>\n  <InlineFeatureWarning v-if=\"!isSidebarLicensed\" feature-name=\"Sidebar\" />\n  <CopilotChat\n    v-bind=\"props\"\n    @submit-message=\"$emit('submit-message', $event)\"\n    @stop=\"$emit('stop')\"\n    @input-change=\"$emit('input-change', $event)\"\n    @select-suggestion=\"\n      (suggestion, index) => $emit('select-suggestion', suggestion, index)\n    \"\n    @add-file=\"$emit('add-file')\"\n    @start-transcribe=\"$emit('start-transcribe')\"\n    @cancel-transcribe=\"$emit('cancel-transcribe')\"\n    @finish-transcribe=\"$emit('finish-transcribe')\"\n  >\n    <template #chat-view=\"slotProps\">\n      <slot v-if=\"$slots['chat-view']\" name=\"chat-view\" v-bind=\"slotProps\" />\n      <CopilotSidebarView\n        v-else\n        :messages=\"slotProps.messages\"\n        :auto-scroll=\"slotProps.autoScroll\"\n        :is-running=\"slotProps.isRunning\"\n        :suggestions=\"slotProps.suggestions\"\n        :suggestion-loading-indexes=\"slotProps.suggestionLoadingIndexes\"\n        :welcome-screen=\"slotProps.welcomeScreen\"\n        :input-value=\"slotProps.inputValue\"\n        :input-mode=\"slotProps.inputMode\"\n        :input-tools-menu=\"slotProps.inputToolsMenu\"\n        :width=\"width\"\n        :default-open=\"defaultOpen\"\n        :on-finish-transcribe-with-audio=\"slotProps.onFinishTranscribeWithAudio\"\n        v-bind=\"sidebarViewEventBindings(slotProps)\"\n      >\n        <template v-if=\"$slots.header\" #header=\"headerProps\">\n          <slot name=\"header\" v-bind=\"headerProps\" />\n        </template>\n\n        <template\n          v-if=\"$slots['toggle-button']\"\n          #toggle-button=\"toggleButtonProps\"\n        >\n          <slot name=\"toggle-button\" v-bind=\"toggleButtonProps\" />\n        </template>\n\n        <template #welcome-screen=\"welcomeScreenProps\">\n          <slot\n            v-if=\"$slots['welcome-screen']\"\n            name=\"welcome-screen\"\n            v-bind=\"welcomeScreenProps\"\n          />\n          <CopilotSidebarWelcomeScreen v-else v-bind=\"welcomeScreenProps\">\n            <template v-if=\"$slots['welcome-message']\" #welcome-message>\n              <slot name=\"welcome-message\" />\n            </template>\n\n            <template\n              v-if=\"$slots['suggestion-view']\"\n              #suggestion-view=\"suggestionViewProps\"\n            >\n              <slot name=\"suggestion-view\" v-bind=\"suggestionViewProps\" />\n            </template>\n\n            <template v-if=\"$slots.input\" #input=\"inputProps\">\n              <slot name=\"input\" v-bind=\"inputProps\" />\n            </template>\n          </CopilotSidebarWelcomeScreen>\n        </template>\n\n        <template\n          v-if=\"$slots['message-view']\"\n          #message-view=\"messageViewProps\"\n        >\n          <slot name=\"message-view\" v-bind=\"messageViewProps\" />\n        </template>\n\n        <template v-if=\"$slots.input\" #input=\"inputProps\">\n          <slot name=\"input\" v-bind=\"inputProps\" />\n        </template>\n\n        <template\n          v-if=\"$slots['suggestion-view']\"\n          #suggestion-view=\"suggestionViewProps\"\n        >\n          <slot name=\"suggestion-view\" v-bind=\"suggestionViewProps\" />\n        </template>\n      </CopilotSidebarView>\n    </template>\n  </CopilotChat>\n</template>\n","export * from \"./types\";\nexport { default as CopilotChatAssistantMessage } from \"./CopilotChatAssistantMessage.vue\";\nexport { default as CopilotChatAudioRecorder } from \"./CopilotChatAudioRecorder.vue\";\nimport _CopilotChat from \"./CopilotChat.vue\";\nimport _CopilotChatView from \"./CopilotChatView.vue\";\nexport { default as CopilotChatInput } from \"./CopilotChatInput.vue\";\nexport { default as CopilotChatAttachmentQueue } from \"./CopilotChatAttachmentQueue.vue\";\nexport { default as CopilotChatAttachmentRenderer } from \"./CopilotChatAttachmentRenderer.vue\";\nexport { default as CopilotChatMessageView } from \"./CopilotChatMessageView.vue\";\nexport { default as CopilotChatReasoningMessage } from \"./CopilotChatReasoningMessage.vue\";\nexport { default as CopilotChatSuggestionPill } from \"./CopilotChatSuggestionPill.vue\";\nexport { default as CopilotChatSuggestionView } from \"./CopilotChatSuggestionView.vue\";\nexport { default as CopilotChatToolCallsView } from \"./CopilotChatToolCallsView.vue\";\nexport { default as CopilotChatUserMessage } from \"./CopilotChatUserMessage.vue\";\nexport { default as CopilotChatView } from \"./CopilotChatView.vue\";\nimport _CopilotChatToggleButton from \"./CopilotChatToggleButton.vue\";\nimport CopilotChatToggleButtonCloseIcon from \"./CopilotChatToggleButtonCloseIcon\";\nimport CopilotChatToggleButtonOpenIcon from \"./CopilotChatToggleButtonOpenIcon\";\nimport _CopilotModalHeader from \"./CopilotModalHeader.vue\";\nimport CopilotModalHeaderCloseButton from \"./CopilotModalHeaderCloseButton\";\nimport CopilotModalHeaderTitle from \"./CopilotModalHeaderTitle\";\nimport _CopilotPopupView from \"./CopilotPopupView.vue\";\nimport CopilotPopupWelcomeScreen from \"./CopilotPopupWelcomeScreen.vue\";\nimport _CopilotSidebarView from \"./CopilotSidebarView.vue\";\nimport CopilotSidebarWelcomeScreen from \"./CopilotSidebarWelcomeScreen.vue\";\n\nexport const CopilotChat = Object.assign(_CopilotChat, {\n  View: _CopilotChatView,\n});\n\nexport const CopilotChatToggleButton = Object.assign(_CopilotChatToggleButton, {\n  OpenIcon: CopilotChatToggleButtonOpenIcon,\n  CloseIcon: CopilotChatToggleButtonCloseIcon,\n});\n\nexport { CopilotChatToggleButtonOpenIcon, CopilotChatToggleButtonCloseIcon };\n\nexport const CopilotModalHeader = Object.assign(_CopilotModalHeader, {\n  Title: CopilotModalHeaderTitle,\n  CloseButton: CopilotModalHeaderCloseButton,\n});\n\nexport const CopilotPopupView = Object.assign(_CopilotPopupView, {\n  WelcomeScreen: CopilotPopupWelcomeScreen,\n});\n\nexport { default as CopilotPopup } from \"./CopilotPopup.vue\";\nexport { default as CopilotSidebar } from \"./CopilotSidebar.vue\";\n\nexport const CopilotSidebarView = Object.assign(_CopilotSidebarView, {\n  WelcomeScreen: CopilotSidebarWelcomeScreen,\n});\n","import { computed, toValue, watch } from \"vue\";\nimport type { MaybeRefOrGetter } from \"vue\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\n\nexport type JsonSerializable =\n  | string\n  | number\n  | boolean\n  | null\n  | JsonSerializable[]\n  | { [key: string]: JsonSerializable };\n\nexport interface AgentContextInput {\n  description: MaybeRefOrGetter<string>;\n  value: MaybeRefOrGetter<JsonSerializable>;\n}\n\n/**\n * Registers reactive contextual data that is sent with agent runs.\n *\n * The context entry is added when the composable is active and removed\n * automatically on scope cleanup.\n *\n * @example\n * ```ts\n * useAgentContext({\n *   description: \"Current workspace\",\n *   value: \"copilotkit-vue\",\n * });\n * ```\n */\nexport function useAgentContext(context: AgentContextInput): void {\n  const { copilotkit } = useCopilotKit();\n  const resolvedDescription = computed(() => toValue(context.description));\n  const resolvedValue = computed(() => toValue(context.value));\n\n  const stringValue = computed(() =>\n    typeof resolvedValue.value === \"string\"\n      ? resolvedValue.value\n      : JSON.stringify(resolvedValue.value),\n  );\n\n  watch(\n    [() => copilotkit.value, resolvedDescription, stringValue],\n    (_newValues, _old, onCleanup) => {\n      const core = copilotkit.value;\n      const id = core.addContext({\n        description: resolvedDescription.value,\n        value: stringValue.value,\n      });\n      onCleanup(() => core.removeContext(id));\n    },\n    { immediate: true },\n  );\n}\n","import { watch } from \"vue\";\nimport type { WatchSource } from \"vue\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\nimport type { VueFrontendTool } from \"../types\";\nimport type { VueToolCallRenderer } from \"../types\";\n\nconst EMPTY_DEPS: WatchSource<unknown>[] = [];\n\n/**\n * Registers a frontend tool and optional renderer with CopilotKit core.\n *\n * The tool registration is reactive to provided dependencies and is cleaned up\n * automatically when the current scope is disposed.\n *\n * @example\n * ```ts\n * useFrontendTool({\n *   name: \"sayHello\",\n *   parameters: z.object({ name: z.string() }),\n *   handler: async ({ name }) => `Hello ${name}`,\n * });\n * ```\n */\nexport function useFrontendTool<T extends Record<string, unknown>>(\n  tool: VueFrontendTool<T>,\n  deps?: WatchSource<unknown>[],\n) {\n  const { copilotkit } = useCopilotKit();\n  const extraDeps = deps ?? EMPTY_DEPS;\n\n  watch(\n    [\n      () => tool.name,\n      () => tool.available,\n      () => extraDeps.length,\n      ...extraDeps,\n    ],\n    (_newValues, _old, onCleanup) => {\n      const core = copilotkit.value;\n      const name = tool.name;\n\n      if (core.getTool({ toolName: name, agentId: tool.agentId })) {\n        console.warn(\n          `Tool '${name}' already exists for agent '${tool.agentId || \"global\"}'. Overriding with latest registration.`,\n        );\n        core.removeTool(name, tool.agentId);\n      }\n      core.addTool(tool);\n\n      // The render function is registered even when tool.parameters is\n      // undefined — tools like HITL confirm dialogs have no parameters\n      // but still need their UI rendered in the chat.\n      if (tool.render) {\n        core.addHookRenderToolCall({\n          name,\n          args: tool.parameters,\n          agentId: tool.agentId,\n          render: tool.render,\n        } as VueToolCallRenderer<unknown>);\n      }\n\n      onCleanup(() => {\n        core.removeTool(name, tool.agentId);\n      });\n    },\n    { immediate: true },\n  );\n}\n","import type { StandardSchemaV1, InferSchemaOutput } from \"@copilotkit/shared\";\nimport type { Component } from \"vue\";\nimport { h } from \"vue\";\nimport type { WatchSource } from \"vue\";\nimport { useFrontendTool } from \"./use-frontend-tool\";\n\ntype InferRenderProps<T> = T extends StandardSchemaV1\n  ? InferSchemaOutput<T>\n  : any;\n\nexport function useComponent<\n  TSchema extends StandardSchemaV1 | undefined = undefined,\n>(\n  config: {\n    name: string;\n    description?: string;\n    parameters?: TSchema;\n    render: Component<NoInfer<InferRenderProps<TSchema>>>;\n    agentId?: string;\n  },\n  deps?: WatchSource<unknown>[],\n): void {\n  const prefix = `Use this tool to display the \"${config.name}\" component in the chat. This tool renders a visual UI component for the user.`;\n  const fullDescription = config.description\n    ? `${prefix}\\n\\n${config.description}`\n    : prefix;\n\n  useFrontendTool(\n    {\n      name: config.name,\n      description: fullDescription,\n      parameters: config.parameters as\n        | StandardSchemaV1<any, Record<string, unknown>>\n        | undefined,\n      render: ({ args }: { args: unknown }) => {\n        const RenderComponent = config.render;\n        return h(\n          RenderComponent as Component,\n          args as InferRenderProps<TSchema>,\n        );\n      },\n      agentId: config.agentId,\n    },\n    deps,\n  );\n}\n","import { h, watch } from \"vue\";\nimport type { Component, WatchSource, VNodeChild } from \"vue\";\nimport type { StandardSchemaV1, InferSchemaOutput } from \"@copilotkit/shared\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\nimport { defineToolCallRenderer } from \"../types/defineToolCallRenderer\";\nimport type {\n  VueToolCallRenderer,\n  VueToolCallRendererRenderProps,\n} from \"../types\";\n\nconst EMPTY_DEPS: WatchSource<unknown>[] = [];\n\nexport interface RenderToolInProgressProps<S extends StandardSchemaV1> {\n  name: string;\n  toolCallId: string;\n  parameters: Partial<InferSchemaOutput<S>>;\n  status: \"inProgress\";\n  result: undefined;\n}\n\nexport interface RenderToolExecutingProps<S extends StandardSchemaV1> {\n  name: string;\n  toolCallId: string;\n  parameters: InferSchemaOutput<S>;\n  status: \"executing\";\n  result: undefined;\n}\n\nexport interface RenderToolCompleteProps<S extends StandardSchemaV1> {\n  name: string;\n  toolCallId: string;\n  parameters: InferSchemaOutput<S>;\n  status: \"complete\";\n  result: string;\n}\n\nexport type RenderToolProps<S extends StandardSchemaV1> =\n  | RenderToolInProgressProps<S>\n  | RenderToolExecutingProps<S>\n  | RenderToolCompleteProps<S>;\n\ntype RenderToolConfig<S extends StandardSchemaV1> = {\n  name: string;\n  parameters?: S;\n  render:\n    | ((props: RenderToolProps<S>) => VNodeChild)\n    | Component<RenderToolProps<S>>;\n  agentId?: string;\n};\n\nexport function useRenderTool(\n  config: {\n    name: \"*\";\n    render: ((props: any) => VNodeChild) | Component<any>;\n    agentId?: string;\n  },\n  deps?: WatchSource<unknown>[],\n): void;\n\nexport function useRenderTool<S extends StandardSchemaV1>(\n  config: {\n    name: string;\n    parameters: S;\n    render:\n      | ((props: RenderToolProps<S>) => VNodeChild)\n      | Component<RenderToolProps<S>>;\n    agentId?: string;\n  },\n  deps?: WatchSource<unknown>[],\n): void;\n\nexport function useRenderTool<S extends StandardSchemaV1>(\n  config: RenderToolConfig<S>,\n  deps?: WatchSource<unknown>[],\n): void {\n  const { copilotkit } = useCopilotKit();\n  const extraDeps = deps ?? EMPTY_DEPS;\n\n  watch(\n    [\n      () => copilotkit.value,\n      () => config.name,\n      () => config.agentId,\n      () => extraDeps.length,\n      ...extraDeps,\n    ],\n    () => {\n      const renderTool = (props: RenderToolProps<S>): VNodeChild => {\n        if (typeof config.render === \"function\") {\n          return (config.render as (props: RenderToolProps<S>) => VNodeChild)(\n            props,\n          );\n        }\n        return h(config.render, props);\n      };\n\n      const renderer =\n        config.name === \"*\" && !config.parameters\n          ? defineToolCallRenderer({\n              name: \"*\",\n              render: (props: VueToolCallRendererRenderProps<unknown>) =>\n                renderTool({\n                  ...props,\n                  parameters: props.args,\n                } as RenderToolProps<S>),\n              ...(config.agentId ? { agentId: config.agentId } : {}),\n            })\n          : defineToolCallRenderer({\n              name: config.name,\n              args: config.parameters!,\n              render: (\n                props: VueToolCallRendererRenderProps<InferSchemaOutput<S>>,\n              ) =>\n                renderTool({\n                  ...props,\n                  parameters: props.args,\n                } as RenderToolProps<S>),\n              ...(config.agentId ? { agentId: config.agentId } : {}),\n            });\n\n      copilotkit.value.addHookRenderToolCall(\n        renderer as VueToolCallRenderer<unknown>,\n      );\n      // Intentionally no cleanup removal to preserve renderers for chat history.\n    },\n    { immediate: true },\n  );\n}\n","import { defineComponent, h, ref } from \"vue\";\nimport type { WatchSource } from \"vue\";\nimport type { Component, VNodeChild } from \"vue\";\nimport { ToolCallStatus } from \"@copilotkit/core\";\nimport { useRenderTool } from \"./use-render-tool\";\n\ntype DefaultRenderProps = {\n  name: string;\n  toolCallId: string;\n  parameters: unknown;\n  status: \"inProgress\" | \"executing\" | \"complete\";\n  result: string | undefined;\n};\n\n/**\n * Module-level dedup set so an unknown status value only emits a console\n * warning the FIRST time we encounter it. Otherwise a stuck/unmapped status\n * would log on every re-render (potentially many per second).\n */\nconst warnedUnknownStatuses = new Set<string>();\n\n/**\n * Map a {@link ToolCallStatus} enum value to the documented string-union\n * status the {@link DefaultRenderProps} contract exposes. Unknown / future\n * enum members log a warning (once per distinct value) and fall back to\n * `\"inProgress\"`.\n */\nfunction mapToolCallStatus(\n  status: ToolCallStatus,\n): DefaultRenderProps[\"status\"] {\n  switch (status) {\n    case ToolCallStatus.Complete:\n      return \"complete\";\n    case ToolCallStatus.Executing:\n      return \"executing\";\n    case ToolCallStatus.InProgress:\n      return \"inProgress\";\n    default: {\n      const key = String(status);\n      if (!warnedUnknownStatuses.has(key)) {\n        warnedUnknownStatuses.add(key);\n        console.warn(\n          `[CopilotKit] Unknown ToolCallStatus \"${key}\" in default tool-call renderer; falling back to \"inProgress\".`,\n        );\n      }\n      return \"inProgress\";\n    }\n  }\n}\n\n/**\n * Convert framework-internal raw renderer props (`args`, enum status) to the\n * documented DefaultRenderProps shape. Idempotent on already-documented input\n * — if the caller passes `parameters` and a string-union `status`, those win.\n */\ntype AdaptInput = {\n  name?: unknown;\n  toolCallId?: unknown;\n  args?: unknown;\n  parameters?: unknown;\n  status?: unknown;\n  result?: unknown;\n};\n\nfunction adaptRendererProps(raw: AdaptInput): DefaultRenderProps {\n  const parameters = raw.parameters !== undefined ? raw.parameters : raw.args;\n  const rawStatus = raw.status;\n  const status: DefaultRenderProps[\"status\"] =\n    rawStatus === \"inProgress\" ||\n    rawStatus === \"executing\" ||\n    rawStatus === \"complete\"\n      ? rawStatus\n      : mapToolCallStatus(rawStatus as ToolCallStatus);\n  return {\n    name: raw.name as string,\n    toolCallId: raw.toolCallId as string,\n    parameters,\n    status,\n    result: raw.result as string | undefined,\n  };\n}\n\n/**\n * Guarded JSON.stringify for the expanded `<pre>` blocks. A circular reference\n * would otherwise crash the Vue render.\n */\nfunction safeStringifyForPre(value: unknown): string {\n  try {\n    return JSON.stringify(value, null, 2);\n  } catch (err) {\n    console.warn(\n      \"[CopilotKit] Failed to JSON.stringify tool-call payload for default renderer; falling back to String():\",\n      err,\n    );\n    try {\n      return String(value);\n    } catch (innerErr) {\n      console.warn(\n        \"[CopilotKit] safeStringifyForPre: value could not be stringified:\",\n        innerErr,\n      );\n      return \"[unserializable]\";\n    }\n  }\n}\n\nconst DefaultToolCallRenderer = defineComponent({\n  props: {\n    name: {\n      type: String,\n      required: true,\n    },\n    toolCallId: {\n      type: String,\n      required: true,\n    },\n    parameters: {\n      type: null,\n      required: false,\n      default: undefined,\n    },\n    status: {\n      type: String as () => \"inProgress\" | \"executing\" | \"complete\",\n      required: true,\n    },\n    result: {\n      // Typeless on purpose: the renderer body handles both string results\n      // and structured (object) results via `safeStringifyForPre`. Declaring\n      // `type: String` would trip Vue's dev-mode prop-type warning on every\n      // non-string result and make the defensive branch unreachable.\n      type: null,\n      required: false,\n      default: undefined,\n    },\n  },\n  setup(props) {\n    const isExpanded = ref(false);\n\n    return () => {\n      const isActive =\n        props.status === \"inProgress\" || props.status === \"executing\";\n      const isComplete = props.status === \"complete\";\n      const statusLabel = isActive\n        ? \"Running\"\n        : isComplete\n          ? \"Done\"\n          : props.status;\n\n      return h(\n        \"div\",\n        {\n          \"data-testid\": \"copilot-tool-render\",\n          \"data-tool-name\": props.name,\n          \"data-tool-call-id\": props.toolCallId,\n          \"data-status\": props.status,\n          \"data-args\": safeStringifyForAttr(props.parameters),\n          \"data-result\": safeStringifyForAttr(props.result),\n          style: { marginTop: \"8px\", paddingBottom: \"8px\" },\n        },\n        [\n          h(\n            \"div\",\n            {\n              style: {\n                borderRadius: \"12px\",\n                border: \"1px solid #e4e4e7\",\n                backgroundColor: \"#fafafa\",\n                padding: \"14px 16px\",\n              },\n            },\n            [\n              h(\n                \"button\",\n                {\n                  type: \"button\",\n                  \"aria-expanded\": String(isExpanded.value),\n                  onClick: () => {\n                    isExpanded.value = !isExpanded.value;\n                  },\n                  style: {\n                    width: \"100%\",\n                    display: \"flex\",\n                    alignItems: \"center\",\n                    justifyContent: \"space-between\",\n                    gap: \"10px\",\n                    cursor: \"pointer\",\n                    border: \"none\",\n                    padding: 0,\n                    margin: 0,\n                    background: \"transparent\",\n                    textAlign: \"left\",\n                  },\n                },\n                [\n                  h(\n                    \"span\",\n                    {\n                      \"data-testid\": \"copilot-tool-render-name\",\n                      style: { fontWeight: \"600\" },\n                    },\n                    props.name,\n                  ),\n                  h(\n                    \"span\",\n                    { \"data-testid\": \"copilot-tool-render-status\" },\n                    statusLabel,\n                  ),\n                ],\n              ),\n              isExpanded.value\n                ? h(\"div\", { style: { marginTop: \"12px\" } }, [\n                    h(\"div\", \"Arguments\"),\n                    h(\"pre\", safeStringifyForPre(props.parameters ?? {})),\n                    props.result !== undefined\n                      ? h(\"div\", [\n                          h(\"div\", \"Result\"),\n                          h(\n                            \"pre\",\n                            typeof props.result === \"string\"\n                              ? props.result\n                              : safeStringifyForPre(props.result),\n                          ),\n                        ])\n                      : null,\n                  ])\n                : null,\n            ],\n          ),\n        ],\n      );\n    };\n  },\n});\n\nfunction safeStringifyForAttr(value: unknown): string {\n  if (value === undefined || value === null) return \"\";\n  if (typeof value === \"string\") return value;\n  try {\n    return JSON.stringify(value);\n  } catch (err) {\n    console.warn(\n      \"[CopilotKit] Failed to JSON.stringify tool-call payload for data-* attribute; falling back to String():\",\n      err,\n    );\n    try {\n      return String(value);\n    } catch (innerErr) {\n      console.warn(\n        \"[CopilotKit] safeStringifyForAttr: value could not be stringified:\",\n        innerErr,\n      );\n      return \"\";\n    }\n  }\n}\n\nexport function useDefaultRenderTool(\n  config?: {\n    render?:\n      | ((props: DefaultRenderProps) => VNodeChild)\n      | Component<DefaultRenderProps>;\n  },\n  deps?: WatchSource<unknown>[],\n): void {\n  const userRender = config?.render;\n\n  // When the user supplies a function render, wrap it so they receive the\n  // documented {@link DefaultRenderProps} shape regardless of whether the\n  // call site passes `args + enum status` (CopilotChatToolCallsView's core\n  // path) or `parameters + string status` (an already-adapted call site).\n  // Component-typed renders are also wrapped — Vue would bind whatever attrs\n  // the call site passes, which means a component-typed render would receive\n  // the raw `{ args, status: <enum> }` shape instead of the documented\n  // `{ parameters, status: <string-union> }` shape. Wrap so the user\n  // component sees `DefaultRenderProps`.\n  let registeredRender:\n    | ((props: DefaultRenderProps) => VNodeChild)\n    | Component<DefaultRenderProps>;\n\n  if (typeof userRender === \"function\") {\n    const fn = userRender as (props: DefaultRenderProps) => VNodeChild;\n    registeredRender = ((rawProps: AdaptInput) => {\n      const adapted = adaptRendererProps(rawProps);\n      return fn(adapted);\n    }) as (props: DefaultRenderProps) => VNodeChild;\n  } else if (userRender) {\n    const userComponent = userRender;\n    registeredRender = ((rawProps: AdaptInput) => {\n      const adapted = adaptRendererProps(rawProps);\n      return h(userComponent as Component, {\n        name: adapted.name,\n        toolCallId: adapted.toolCallId,\n        parameters: adapted.parameters,\n        status: adapted.status,\n        result: adapted.result,\n      });\n    }) as (props: DefaultRenderProps) => VNodeChild;\n  } else {\n    registeredRender = ((rawProps: AdaptInput) => {\n      const adapted = adaptRendererProps(rawProps);\n      return h(DefaultToolCallRenderer, {\n        name: adapted.name,\n        toolCallId: adapted.toolCallId,\n        parameters: adapted.parameters,\n        status: adapted.status,\n        result: adapted.result,\n      });\n    }) as (props: DefaultRenderProps) => VNodeChild;\n  }\n\n  useRenderTool(\n    {\n      name: \"*\",\n      render: registeredRender,\n    },\n    deps,\n  );\n}\n","import { onScopeDispose, ref } from \"vue\";\nimport type { WatchSource } from \"vue\";\nimport { h } from \"vue\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\nimport { useFrontendTool } from \"./use-frontend-tool\";\nimport type {\n  VueFrontendTool,\n  VueHumanInTheLoop,\n  VueToolCallRenderer,\n  VueToolCallRendererRenderProps,\n} from \"../types\";\n\n/**\n * Registers a human-in-the-loop frontend tool.\n *\n * The tool pauses execution until `respond` is called from the rendered\n * component during the `executing` phase.\n *\n * @example\n * ```ts\n * useHumanInTheLoop({\n *   name: \"approveAction\",\n *   parameters: z.object({ reason: z.string() }),\n *   render: ApprovalCard,\n * });\n * ```\n */\nexport function useHumanInTheLoop<T extends Record<string, unknown>>(\n  tool: VueHumanInTheLoop<T>,\n  deps?: WatchSource<unknown>[],\n) {\n  const { copilotkit } = useCopilotKit();\n  const resolvePromiseRef = ref<((result: unknown) => void) | null>(null);\n\n  const respond = async (result: unknown) => {\n    if (resolvePromiseRef.value) {\n      resolvePromiseRef.value(result);\n      resolvePromiseRef.value = null;\n    }\n  };\n\n  const handler = async () => {\n    return new Promise((resolve) => {\n      resolvePromiseRef.value = resolve;\n    });\n  };\n\n  const RenderComponent: VueToolCallRenderer<T>[\"render\"] = (\n    props: VueToolCallRendererRenderProps<T>,\n  ) => {\n    const ToolComponent = tool.render;\n    if (props.status === \"inProgress\") {\n      return h(ToolComponent as Parameters<typeof h>[0], {\n        ...props,\n        name: tool.name,\n        description: tool.description || \"\",\n        respond: undefined,\n      });\n    }\n    if (props.status === \"executing\") {\n      return h(ToolComponent as Parameters<typeof h>[0], {\n        ...props,\n        name: tool.name,\n        description: tool.description || \"\",\n        respond,\n      });\n    }\n    if (props.status === \"complete\") {\n      return h(ToolComponent as Parameters<typeof h>[0], {\n        ...props,\n        name: tool.name,\n        description: tool.description || \"\",\n        respond: undefined,\n      });\n    }\n    return h(ToolComponent as Parameters<typeof h>[0], props);\n  };\n\n  const frontendTool: VueFrontendTool<T> = {\n    ...tool,\n    handler,\n    render: RenderComponent,\n  };\n\n  useFrontendTool(frontendTool, deps);\n\n  onScopeDispose(() => {\n    copilotkit.value.removeHookRenderToolCall(tool.name, tool.agentId);\n  });\n}\n","import { computed, ref, watch } from \"vue\";\nimport type { WatchSource } from \"vue\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\nimport { useCopilotChatConfiguration } from \"../providers/useCopilotChatConfiguration\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkit/shared\";\nimport type {\n  DynamicSuggestionsConfig,\n  Suggestion,\n  StaticSuggestionsConfig,\n  SuggestionsConfig,\n} from \"@copilotkit/core\";\n\ntype StaticSuggestionInput = Omit<Suggestion, \"isLoading\"> &\n  Partial<Pick<Suggestion, \"isLoading\">>;\n\ntype StaticSuggestionsConfigInput = Omit<\n  StaticSuggestionsConfig,\n  \"suggestions\"\n> & {\n  suggestions: StaticSuggestionInput[];\n};\n\ntype SuggestionsConfigInput =\n  | DynamicSuggestionsConfig\n  | StaticSuggestionsConfigInput;\n\nfunction isDynamicConfig(\n  config: SuggestionsConfigInput,\n): config is DynamicSuggestionsConfig {\n  return \"instructions\" in config;\n}\n\nfunction normalizeStaticSuggestions(\n  suggestions: StaticSuggestionInput[],\n): Suggestion[] {\n  return suggestions.map((s) => ({\n    ...s,\n    isLoading: s.isLoading ?? false,\n  }));\n}\n\n/**\n * Registers a suggestions configuration (dynamic or static) for the current\n * chat context.\n *\n * Configuration is kept in sync reactively and removed on scope cleanup.\n *\n * @example\n * ```ts\n * useConfigureSuggestions({\n *   instructions: \"Suggest concise next steps for the user\",\n *   available: \"always\",\n * });\n * ```\n */\nexport function useConfigureSuggestions(\n  config: SuggestionsConfigInput | null | undefined,\n  deps?: WatchSource<unknown>[],\n): void {\n  const { copilotkit } = useCopilotKit();\n  const chatConfig = useCopilotChatConfiguration();\n  const extraDeps = deps ?? [];\n\n  const resolvedConsumerAgentId = computed(\n    () => chatConfig.value?.agentId ?? DEFAULT_AGENT_ID,\n  );\n  const rawConsumerAgentId = computed(() =>\n    config ? (config as SuggestionsConfigInput).consumerAgentId : undefined,\n  );\n\n  const normalizedConfig = computed<SuggestionsConfig | null>(() => {\n    if (\n      !config ||\n      (config as { available?: string }).available === \"disabled\"\n    ) {\n      return null;\n    }\n    if (isDynamicConfig(config)) {\n      return { ...config };\n    }\n    const normalizedSuggestions = normalizeStaticSuggestions(\n      config.suggestions,\n    );\n    return { ...config, suggestions: normalizedSuggestions };\n  });\n  const serializedConfig = computed(() =>\n    normalizedConfig.value ? JSON.stringify(normalizedConfig.value) : null,\n  );\n\n  const targetAgentId = computed(() => {\n    if (!normalizedConfig.value) return resolvedConsumerAgentId.value;\n    const consumer = (\n      normalizedConfig.value as\n        | StaticSuggestionsConfig\n        | DynamicSuggestionsConfig\n    ).consumerAgentId;\n    if (!consumer || consumer === \"*\") return resolvedConsumerAgentId.value;\n    return consumer;\n  });\n\n  const isGlobalConfig = computed(\n    () =>\n      rawConsumerAgentId.value === undefined ||\n      rawConsumerAgentId.value === \"*\",\n  );\n  const pendingGlobalReload = ref(false);\n  const pendingReloadTimer = ref<ReturnType<typeof setTimeout> | null>(null);\n  const previousSerializedConfig = ref<string | null>(null);\n\n  const flushPendingGlobalReload = () => {\n    if (!pendingGlobalReload.value || !isGlobalConfig.value) {\n      return;\n    }\n    const hasRunning = Object.values(copilotkit.value.agents ?? {}).some(\n      (entry) => !!entry.agentId && entry.isRunning,\n    );\n    if (hasRunning) {\n      pendingReloadTimer.value = setTimeout(() => {\n        pendingReloadTimer.value = null;\n        flushPendingGlobalReload();\n      }, 0);\n      return;\n    }\n\n    pendingGlobalReload.value = false;\n    requestReload();\n  };\n\n  const requestReload = () => {\n    if (!normalizedConfig.value) {\n      return;\n    }\n\n    if (isGlobalConfig.value) {\n      let skippedBecauseRunning = false;\n      const agents = Object.values(copilotkit.value.agents ?? {});\n      for (const entry of agents) {\n        const aid = entry.agentId;\n        if (!aid) {\n          continue;\n        }\n        if (!entry.isRunning) {\n          copilotkit.value.reloadSuggestions(aid);\n        } else {\n          skippedBecauseRunning = true;\n        }\n      }\n      pendingGlobalReload.value = skippedBecauseRunning;\n      if (skippedBecauseRunning && pendingReloadTimer.value === null) {\n        pendingReloadTimer.value = setTimeout(() => {\n          pendingReloadTimer.value = null;\n          flushPendingGlobalReload();\n        }, 0);\n      }\n      return;\n    }\n\n    if (targetAgentId.value) {\n      copilotkit.value.reloadSuggestions(targetAgentId.value);\n    }\n  };\n\n  watch(\n    [() => copilotkit.value, serializedConfig],\n    ([_core, serialized], _old, onCleanup) => {\n      if (!serialized || !normalizedConfig.value) {\n        return;\n      }\n\n      const core = copilotkit.value;\n      const cfg = normalizedConfig.value;\n      const id = core.addSuggestionsConfig(cfg);\n      requestReload();\n\n      onCleanup(() => core.removeSuggestionsConfig(id));\n    },\n    { immediate: true },\n  );\n\n  watch(\n    [normalizedConfig, serializedConfig],\n    ([cfg, serialized]) => {\n      if (!cfg) {\n        previousSerializedConfig.value = null;\n        return;\n      }\n\n      if (serialized && previousSerializedConfig.value === serialized) {\n        return;\n      }\n\n      if (serialized) {\n        previousSerializedConfig.value = serialized;\n      }\n\n      requestReload();\n    },\n    { immediate: false },\n  );\n\n  watch(\n    [normalizedConfig, () => extraDeps.length, ...extraDeps],\n    ([cfg]) => {\n      if (!cfg || extraDeps.length === 0) {\n        return;\n      }\n      requestReload();\n    },\n    { immediate: true },\n  );\n\n  watch(\n    [() => copilotkit.value, pendingGlobalReload],\n    (_vals, _old, onCleanup) => {\n      onCleanup(() => {\n        if (pendingReloadTimer.value !== null) {\n          clearTimeout(pendingReloadTimer.value);\n          pendingReloadTimer.value = null;\n        }\n      });\n    },\n    { immediate: true },\n  );\n\n  watch(\n    [() => copilotkit.value, isGlobalConfig],\n    ([core, global], _old, onCleanup) => {\n      if (!global) {\n        return;\n      }\n\n      const agentSubscriptions = Object.values(core.agents ?? {})\n        .filter((agent): agent is NonNullable<typeof agent> => !!agent)\n        .map((agent) =>\n          agent.subscribe({\n            onRunStartedEvent: flushPendingGlobalReload,\n            onRunFinishedEvent: flushPendingGlobalReload,\n            onRunFinalized: flushPendingGlobalReload,\n            onRunFailed: flushPendingGlobalReload,\n            onRunErrorEvent: flushPendingGlobalReload,\n          }),\n        );\n\n      onCleanup(() => {\n        for (const sub of agentSubscriptions) {\n          sub.unsubscribe();\n        }\n      });\n    },\n    { immediate: true },\n  );\n}\n","import { computed, onScopeDispose, shallowRef, watch } from \"vue\";\nimport type { ComputedRef, Ref } from \"vue\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\nimport { useAgent } from \"./use-agent\";\nimport type {\n  InterruptEvent,\n  InterruptHandlerProps,\n  InterruptRenderProps,\n} from \"../types/interrupt\";\n\nexport type { InterruptEvent, InterruptHandlerProps, InterruptRenderProps };\n\nconst INTERRUPT_EVENT_NAME = \"on_interrupt\";\n\ntype InterruptHandlerFn<TValue, TResult> = (\n  props: InterruptHandlerProps<TValue>,\n) => TResult | PromiseLike<TResult>;\n\ntype InterruptResultFromHandler<THandler> = THandler extends (\n  ...args: never[]\n) => infer TResult\n  ? TResult extends PromiseLike<infer TResolved>\n    ? TResolved | null\n    : TResult | null\n  : null;\n\ntype InterruptResult<TValue, TResult> = InterruptResultFromHandler<\n  InterruptHandlerFn<TValue, TResult>\n>;\n\nexport interface UseInterruptConfig<TValue = unknown, TResult = never> {\n  handler?: InterruptHandlerFn<TValue, TResult>;\n  enabled?: (event: InterruptEvent<TValue>) => boolean;\n  agentId?: string;\n  renderInChat?: boolean;\n}\n\nexport interface UseInterruptResult<TValue = unknown, TResult = never> {\n  interrupt: Ref<InterruptEvent<TValue> | null>;\n  result: Ref<InterruptResult<TValue, TResult>>;\n  hasInterrupt: ComputedRef<boolean>;\n  resolveInterrupt: (response: unknown) => void;\n  slotProps: ComputedRef<InterruptRenderProps<\n    TValue,\n    InterruptResult<TValue, TResult>\n  > | null>;\n}\n\nexport function isPromiseLike<TValue>(\n  value: TValue | PromiseLike<TValue>,\n): value is PromiseLike<TValue> {\n  return (\n    (typeof value === \"object\" || typeof value === \"function\") &&\n    value !== null &&\n    typeof Reflect.get(value, \"then\") === \"function\"\n  );\n}\n\nfunction normalizeAsyncResult<TValue>(\n  value: PromiseLike<TValue>,\n): Promise<TValue> {\n  if (value instanceof Promise) {\n    return value;\n  }\n\n  return new Promise<TValue>((resolve, reject) => {\n    try {\n      value.then(resolve, reject);\n    } catch (error) {\n      reject(error);\n    }\n  });\n}\n\n/**\n * Vue composable for handling `on_interrupt` custom events from an agent.\n *\n * It tracks the latest pending interrupt, optionally derives UI data via\n * `handler`, and can publish slot state into `CopilotChat` so consumers render\n * interrupts through the `#interrupt` slot instead of render functions/TSX.\n *\n * @example\n * ```ts\n * const { interrupt, hasInterrupt, resolveInterrupt } = useInterrupt({\n *   handler: ({ event }) => ({ label: String(event.value) }),\n * });\n * ```\n */\nexport function useInterrupt<TValue = unknown, TResult = never>(\n  config: UseInterruptConfig<TValue, TResult> = {},\n): UseInterruptResult<TValue, TResult> {\n  const { copilotkit } = useCopilotKit();\n  const { agent } = useAgent({ agentId: config.agentId });\n  const interrupt = shallowRef<InterruptEvent<TValue> | null>(null);\n  const result = shallowRef<InterruptResult<TValue, TResult>>(null);\n\n  watch(\n    agent,\n    (resolvedAgent, _previousAgent, onCleanup) => {\n      if (!resolvedAgent) {\n        interrupt.value = null;\n        result.value = null;\n        return;\n      }\n\n      let localInterrupt: InterruptEvent<TValue> | null = null;\n      const subscription = resolvedAgent.subscribe({\n        onCustomEvent: ({ event }) => {\n          if (event.name === INTERRUPT_EVENT_NAME) {\n            localInterrupt = {\n              name: event.name,\n              value: event.value as TValue,\n            };\n          }\n        },\n        onRunStartedEvent: () => {\n          localInterrupt = null;\n          interrupt.value = null;\n        },\n        onRunFinalized: () => {\n          if (localInterrupt) {\n            interrupt.value = localInterrupt;\n            localInterrupt = null;\n          }\n        },\n        onRunFailed: () => {\n          localInterrupt = null;\n        },\n      });\n\n      onCleanup(() => subscription.unsubscribe());\n    },\n    { immediate: true },\n  );\n\n  const resolveInterrupt = (response: unknown) => {\n    const resolvedAgent = agent.value;\n    if (!resolvedAgent) return;\n\n    const interruptEventValue = interrupt.value?.value;\n    interrupt.value = null;\n    void copilotkit.value\n      .runAgent({\n        agent: resolvedAgent,\n        forwardedProps: {\n          command: {\n            resume: response,\n            interruptEvent: interruptEventValue,\n          },\n        },\n      })\n      .catch((error) => {\n        console.error(\n          \"[CopilotKit] useInterrupt: failed to resume agent:\",\n          error,\n        );\n      });\n  };\n\n  watch(\n    interrupt,\n    (pendingEvent, _previous, onCleanup) => {\n      if (!pendingEvent) {\n        result.value = null;\n        return;\n      }\n      if (config.enabled && !config.enabled(pendingEvent)) {\n        result.value = null;\n        return;\n      }\n      const handler = config.handler;\n      if (!handler) {\n        result.value = null;\n        return;\n      }\n\n      let cancelled = false;\n      const maybePromise = handler({\n        event: pendingEvent,\n        resolve: resolveInterrupt,\n      });\n\n      if (isPromiseLike(maybePromise)) {\n        normalizeAsyncResult(maybePromise)\n          .then((resolved) => {\n            if (!cancelled) {\n              result.value = resolved;\n            }\n          })\n          .catch((err) => {\n            if (!cancelled) {\n              console.error(\"[CopilotKit] useInterrupt handler failed:\", err);\n              result.value = null;\n            }\n          });\n      } else {\n        result.value = maybePromise;\n      }\n\n      onCleanup(() => {\n        cancelled = true;\n      });\n    },\n    { immediate: true },\n  );\n\n  const slotProps = computed<InterruptRenderProps<\n    TValue,\n    InterruptResult<TValue, TResult>\n  > | null>(() => {\n    if (!interrupt.value) return null;\n    if (config.enabled && !config.enabled(interrupt.value)) return null;\n\n    return {\n      event: interrupt.value,\n      result: result.value,\n      resolve: resolveInterrupt,\n    };\n  });\n\n  watch(\n    [() => copilotkit.value, slotProps, () => config.renderInChat !== false],\n    ([core, nextSlotProps, shouldRenderInChat], _previous, onCleanup) => {\n      if (!shouldRenderInChat) {\n        return;\n      }\n\n      core.setInterruptState(\n        nextSlotProps as InterruptRenderProps<any, any> | null,\n      );\n      const publishedState = nextSlotProps;\n\n      onCleanup(() => {\n        if (core.interruptState === publishedState) {\n          core.setInterruptState(null);\n        }\n      });\n    },\n    { immediate: true },\n  );\n\n  onScopeDispose(() => {\n    const core = copilotkit.value;\n    if (\n      config.renderInChat !== false &&\n      core.interruptState === slotProps.value\n    ) {\n      core.setInterruptState(null);\n    }\n  });\n\n  return {\n    interrupt: interrupt as Ref<InterruptEvent<TValue> | null>,\n    result: result as Ref<InterruptResult<TValue, TResult>>,\n    hasInterrupt: computed(() => slotProps.value !== null),\n    resolveInterrupt,\n    slotProps: slotProps as ComputedRef<InterruptRenderProps<\n      TValue,\n      InterruptResult<TValue, TResult>\n    > | null>,\n  };\n}\n","import { computed, onScopeDispose, ref, toValue, watch } from \"vue\";\nimport type { MaybeRefOrGetter, Ref } from \"vue\";\nimport {\n  CopilotKitCoreRuntimeConnectionStatus,\n  ɵcreateThreadStore,\n  ɵselectHasNextPage,\n  ɵselectIsFetchingNextPage,\n  ɵselectThreads,\n  ɵselectThreadsError,\n  ɵselectThreadsIsLoading,\n} from \"@copilotkit/core\";\nimport type { ɵThreadRuntimeContext, ɵThreadStore } from \"@copilotkit/core\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\n\nexport interface Thread {\n  id: string;\n  agentId: string;\n  name: string | null;\n  archived: boolean;\n  createdAt: string;\n  updatedAt: string;\n  /**\n   * ISO-8601 timestamp of the most recent agent run on this thread. Absent\n   * when the thread has never been run. Prefer this over `updatedAt` for\n   * user-facing \"last activity\" displays — it is not bumped by metadata-only\n   * actions like rename or archive.\n   */\n  lastRunAt?: string;\n}\n\nexport interface UseThreadsInput {\n  agentId: MaybeRefOrGetter<string>;\n  includeArchived?: MaybeRefOrGetter<boolean | undefined>;\n  limit?: MaybeRefOrGetter<number | undefined>;\n}\n\nexport interface UseThreadsResult {\n  threads: Ref<Thread[]>;\n  isLoading: Ref<boolean>;\n  error: Ref<Error | null>;\n  hasMoreThreads: Ref<boolean>;\n  isFetchingMoreThreads: Ref<boolean>;\n  fetchMoreThreads: () => void;\n  renameThread: (threadId: string, name: string) => Promise<void>;\n  archiveThread: (threadId: string) => Promise<void>;\n  deleteThread: (threadId: string) => Promise<void>;\n}\n\nfunction bindThreadStoreSelector<T>(\n  store: ɵThreadStore,\n  selector: (state: ReturnType<ɵThreadStore[\"getState\"]>) => T,\n  target: Ref<T>,\n): void {\n  target.value = selector(store.getState());\n  const subscription = store.select(selector).subscribe(() => {\n    target.value = selector(store.getState());\n  });\n  onScopeDispose(() => subscription.unsubscribe());\n}\n\n/**\n * Vue composable for listing and managing Intelligence platform threads.\n *\n * The hook fetches threads for the runtime-authenticated user and the given\n * `agentId`, then keeps the result in sync via the core thread store's realtime\n * channel when available. Inputs accept refs/computeds to make thread context\n * changes reactive.\n */\nexport function useThreads(input: UseThreadsInput): UseThreadsResult {\n  const { copilotkit } = useCopilotKit();\n  const store = ɵcreateThreadStore({\n    fetch: globalThis.fetch,\n  });\n\n  const resolvedAgentId = computed(() => toValue(input.agentId));\n  const resolvedIncludeArchived = computed(() =>\n    toValue(input.includeArchived),\n  );\n  const resolvedLimit = computed(() => toValue(input.limit));\n  const headersKey = computed(() =>\n    JSON.stringify(\n      Object.entries(copilotkit.value.headers ?? {}).sort(([left], [right]) =>\n        left.localeCompare(right),\n      ),\n    ),\n  );\n\n  const threads = ref<Thread[]>([]);\n  const storeIsLoading = ref(false);\n  const storeError = ref<Error | null>(null);\n  const hasMoreThreads = ref(false);\n  const isFetchingMoreThreads = ref(false);\n\n  bindThreadStoreSelector(store, ɵselectThreads, threads as Ref<Thread[]>);\n  bindThreadStoreSelector(store, ɵselectThreadsIsLoading, storeIsLoading);\n  bindThreadStoreSelector(store, ɵselectThreadsError, storeError);\n  bindThreadStoreSelector(store, ɵselectHasNextPage, hasMoreThreads);\n  bindThreadStoreSelector(\n    store,\n    ɵselectIsFetchingNextPage,\n    isFetchingMoreThreads,\n  );\n\n  store.start();\n  onScopeDispose(() => {\n    store.stop();\n  });\n\n  // Tracks whether we've dispatched the first real context to the store.\n  // The store itself starts with `isLoading: false`, so before we dispatch\n  // consumers would otherwise see an empty, non-loading state (empty-list\n  // flash). While runtimeUrl is set and we haven't dispatched yet, we\n  // synthesize `isLoading: true` so the UI keeps its loading indicator until\n  // the first fetch is in flight (at which point the store's own\n  // isLoading takes over).\n  const hasDispatchedContext = ref(false);\n\n  // Defer setting the context until the runtime reports Connected. Before\n  // `/info` resolves we don't know `intelligence.wsUrl`, so dispatching the\n  // context early would issue a list fetch with `wsUrl: undefined`, then a\n  // second list fetch (and a `/threads/subscribe`) once the flag lands.\n  // Waiting lets the hook issue just one `/threads?…` + one `/threads/subscribe`.\n  //\n  // When `runtimeUrl` is absent we dispatch `null` to clear the store. For\n  // transient states (Disconnected/Connecting/Error with a URL still set) we\n  // leave the previously-dispatched context in place — any in-flight\n  // realtime subscription or cached thread list stays usable while the\n  // runtime recovers, and we don't re-trigger a fetch storm on transitions.\n  watch(\n    [\n      () => copilotkit.value.runtimeUrl,\n      () => copilotkit.value.runtimeConnectionStatus,\n      headersKey,\n      () => copilotkit.value.intelligence?.wsUrl,\n      resolvedAgentId,\n      resolvedIncludeArchived,\n      resolvedLimit,\n    ],\n    ([runtimeUrl, runtimeStatus, , wsUrl, agentId, includeArchived, limit]) => {\n      if (!runtimeUrl) {\n        store.setContext(null);\n        return;\n      }\n\n      if (runtimeStatus !== CopilotKitCoreRuntimeConnectionStatus.Connected) {\n        return;\n      }\n\n      const context: ɵThreadRuntimeContext = {\n        runtimeUrl,\n        headers: { ...copilotkit.value.headers },\n        wsUrl,\n        agentId,\n        includeArchived,\n        limit,\n      };\n\n      store.setContext(context);\n      hasDispatchedContext.value = true;\n    },\n    { immediate: true },\n  );\n\n  const runtimeError = computed<Error | null>(() =>\n    copilotkit.value.runtimeUrl\n      ? null\n      : new Error(\"Runtime URL is not configured\"),\n  );\n\n  const preConnectLoading = computed(\n    () => !!copilotkit.value.runtimeUrl && !hasDispatchedContext.value,\n  );\n\n  const isLoading = computed(() =>\n    runtimeError.value\n      ? false\n      : preConnectLoading.value || storeIsLoading.value,\n  );\n\n  const error = computed<Error | null>(\n    () => runtimeError.value ?? storeError.value,\n  );\n\n  return {\n    threads: computed(() =>\n      threads.value.map(\n        ({ id, agentId, name, archived, createdAt, updatedAt, lastRunAt }) => ({\n          id,\n          agentId,\n          name,\n          archived,\n          createdAt,\n          updatedAt,\n          ...(lastRunAt !== undefined ? { lastRunAt } : {}),\n        }),\n      ),\n    ),\n    isLoading,\n    error,\n    hasMoreThreads,\n    isFetchingMoreThreads,\n    fetchMoreThreads: () => store.fetchNextPage(),\n    renameThread: (threadId: string, name: string) =>\n      store.renameThread(threadId, name),\n    archiveThread: (threadId: string) => store.archiveThread(threadId),\n    deleteThread: (threadId: string) => store.deleteThread(threadId),\n  };\n}\n","import type { AgentCapabilities } from \"@ag-ui/core\";\nimport { computed } from \"vue\";\nimport type { ComputedRef } from \"vue\";\nimport { useAgent } from \"./use-agent\";\n\n/**\n * Returns the capabilities declared by the given agent (or the default agent).\n *\n * Capabilities are populated from the runtime `/info` response at connection\n * time. The composable reads them synchronously from the agent instance — there\n * is no separate loading state, but the value will be `undefined` until the\n * runtime handshake completes.\n *\n * @param agentId - Optional agent ID. If omitted, uses the default agent.\n * @returns A computed ref containing the agent's capabilities, or `undefined`\n *          if the agent doesn't declare capabilities.\n */\nexport function useCapabilities(\n  agentId?: string,\n): ComputedRef<AgentCapabilities | undefined> {\n  const { agent } = useAgent({ agentId });\n\n  return computed(() => {\n    const a = agent.value;\n    if (a && \"capabilities\" in a) {\n      return (a as { capabilities?: AgentCapabilities }).capabilities;\n    }\n    return undefined;\n  });\n}\n","import type { Component, VNodeChild } from \"vue\";\nimport type { Message } from \"@ag-ui/core\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkit/shared\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\nimport { useCopilotChatConfiguration } from \"../providers/useCopilotChatConfiguration\";\nimport type {\n  VueCustomMessageRendererPosition,\n  VueCustomMessageRendererProps,\n} from \"../types\";\n\ninterface UseRenderCustomMessagesParams {\n  message: Message;\n  position: VueCustomMessageRendererPosition;\n}\n\ninterface CustomMessageRendererResult {\n  renderer:\n    | Component<VueCustomMessageRendererProps>\n    | ((props: VueCustomMessageRendererProps) => VNodeChild);\n  props: VueCustomMessageRendererProps;\n}\n\n/**\n * Returns a function that resolves the appropriate custom message renderer for\n * a given message and position.\n *\n * Matches the React `useRenderCustomMessages` API: filters registered\n * renderers by the current agent, preferring agent-scoped renderers over\n * global ones, and computes the full renderer props (runId, indices, state\n * snapshot).\n *\n * The returned function yields `null` if no chat configuration is available\n * (i.e. when called outside a `CopilotChat` component tree) or if no\n * matching renderer is found.\n */\nexport function useRenderCustomMessages() {\n  const { copilotkit } = useCopilotKit();\n  const config = useCopilotChatConfiguration();\n\n  return function renderCustomMessage(\n    params: UseRenderCustomMessagesParams,\n  ): CustomMessageRendererResult | null {\n    const configValue = config.value;\n    if (!configValue) return null;\n\n    const agentId = configValue.agentId || DEFAULT_AGENT_ID;\n    const { threadId } = configValue;\n    const core = copilotkit.value;\n\n    const customMessageRenderers = [...core.renderCustomMessages]\n      .filter(\n        (renderer) =>\n          renderer.agentId === undefined || renderer.agentId === agentId,\n      )\n      .sort((a, b) => {\n        const aHasAgent = a.agentId !== undefined;\n        const bHasAgent = b.agentId !== undefined;\n        if (aHasAgent === bHasAgent) return 0;\n        return aHasAgent ? -1 : 1;\n      });\n\n    if (!customMessageRenderers.length) {\n      return null;\n    }\n\n    const { message, position } = params;\n    const resolvedRunId =\n      core.getRunIdForMessage(agentId, threadId, message.id) ??\n      core.getRunIdsForThread(agentId, threadId).slice(-1)[0];\n    const runId = resolvedRunId ?? `missing-run-id:${message.id}`;\n    const agent = core.getAgent(agentId);\n    if (!agent) {\n      return null;\n    }\n\n    const messagesIdsInRun = resolvedRunId\n      ? agent.messages\n          .filter(\n            (msg) =>\n              core.getRunIdForMessage(agentId, threadId, msg.id) ===\n              resolvedRunId,\n          )\n          .map((msg) => msg.id)\n      : [message.id];\n\n    const rawMessageIndex = agent.messages.findIndex(\n      (msg) => msg.id === message.id,\n    );\n    if (rawMessageIndex < 0) {\n      console.warn(\n        `[CopilotKit] useRenderCustomMessages: message \"${message.id}\" ` +\n          `not found in agent \"${agentId}\" messages`,\n      );\n    }\n    const messageIndex = Math.max(0, rawMessageIndex);\n    const messageIndexInRun = resolvedRunId\n      ? Math.max(messagesIdsInRun.indexOf(message.id), 0)\n      : 0;\n    const numberOfMessagesInRun = resolvedRunId ? messagesIdsInRun.length : 1;\n    const stateSnapshot = resolvedRunId\n      ? core.getStateByRun(agentId, threadId, resolvedRunId)\n      : undefined;\n\n    const props: CustomMessageRendererResult[\"props\"] = {\n      message,\n      position,\n      runId,\n      messageIndex,\n      messageIndexInRun,\n      numberOfMessagesInRun,\n      agentId,\n      stateSnapshot,\n    };\n\n    // Iterate renderers like React: try each one and use the first that\n    // returns a non-null render function.\n    for (const candidate of customMessageRenderers) {\n      if (!candidate.render) {\n        continue;\n      }\n      return {\n        renderer: candidate.render as CustomMessageRendererResult[\"renderer\"],\n        props,\n      };\n    }\n\n    return null;\n  };\n}\n","import { computed } from \"vue\";\nimport type { Component } from \"vue\";\nimport type { ActivityMessage } from \"@ag-ui/core\";\nimport type { AbstractAgent } from \"@ag-ui/client\";\nimport { DEFAULT_AGENT_ID } from \"@copilotkit/shared\";\nimport { useCopilotKit } from \"../providers/useCopilotKit\";\nimport { useCopilotChatConfiguration } from \"../providers/useCopilotChatConfiguration\";\nimport type {\n  VueActivityMessageRenderer,\n  VueActivityMessageRendererProps,\n} from \"../types\";\n\ninterface ActivityRendererResult {\n  renderer: Component<VueActivityMessageRendererProps<unknown>>;\n  props: VueActivityMessageRendererProps<unknown>;\n}\n\n/**\n * Returns helpers for rendering activity messages.\n *\n * Matches the React `useRenderActivityMessage` API: `findRenderer` locates a\n * registered renderer by activity type (preferring agent-scoped over global,\n * with `\"*\"` as a wildcard fallback), and `renderActivityMessage` resolves the\n * renderer and validates the content schema.\n */\nexport function useRenderActivityMessage() {\n  const { copilotkit } = useCopilotKit();\n  const config = useCopilotChatConfiguration();\n  const agentId = computed(() => config.value?.agentId ?? DEFAULT_AGENT_ID);\n\n  const renderers = computed(() => [\n    ...copilotkit.value.renderActivityMessages,\n  ]);\n\n  function findRenderer(\n    activityType: string,\n  ): VueActivityMessageRenderer<unknown> | null {\n    const list = renderers.value;\n    if (!list.length) {\n      return null;\n    }\n\n    const matches = list.filter(\n      (renderer) => renderer.activityType === activityType,\n    );\n\n    return (\n      matches.find((candidate) => candidate.agentId === agentId.value) ??\n      matches.find((candidate) => candidate.agentId === undefined) ??\n      list.find((candidate) => candidate.activityType === \"*\") ??\n      null\n    );\n  }\n\n  function renderActivityMessage(\n    message: ActivityMessage,\n  ): ActivityRendererResult | null {\n    const renderer = findRenderer(message.activityType);\n\n    if (!renderer) {\n      return null;\n    }\n\n    const parseResult = renderer.content.safeParse(message.content);\n\n    if (!parseResult.success) {\n      console.warn(\n        `Failed to parse content for activity message ` +\n          `'${message.activityType}':`,\n        parseResult.error,\n      );\n      return null;\n    }\n\n    const agent: AbstractAgent | undefined = copilotkit.value.getAgent(\n      agentId.value,\n    );\n\n    return {\n      renderer: renderer.render as Component<\n        VueActivityMessageRendererProps<unknown>\n      >,\n      props: {\n        activityType: message.activityType,\n        content: parseResult.data,\n        message,\n        agent,\n      },\n    };\n  }\n\n  return { renderActivityMessage, findRenderer };\n}\n"],"names":["props","__props","attrs","useAttrs","inspectorTag","shallowRef","isMounted","onMounted","mod","error","onUnmounted","_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","_unref","CopilotKitKey","CopilotChatConfigurationKey","SandboxFunctionsKey","useCopilotKit","context","inject","PROTOCOL_VERSION","buildSandboxHTML","extraCspDomains","baseScriptSrc","baseFrameSrc","extra","scriptSrc","frameSrc","MCPAppsRequestQueue","agent","request","threadId","resolve","reject","queue","item","result","done","timeout","checkInterval","sub","finish","mcpAppsRequestQueue","MCPAppsActivityType","MCPAppsActivityContentSchema","z","isRequest","message","isNotification","MCPAppsActivityRenderer","defineComponent","copilotkit","containerRef","ref","iframeRef","iframeReady","isLoading","iframeSize","fetchedResource","fetchStateRef","sendToIframe","sendResponse","id","sendErrorResponse","code","sendNotification","method","params","watch","content","resourceUri","serverHash","serverId","resource","err","fetchPromise","loading","_old","onCleanup","container","mounted","messageHandler","initialListener","createdIframe","iframe","sandboxReady","event","cspDomains","msg","currentAgent","role","textContent","part","randomUUID","url","runResult","width","height","html","size","ready","toolInput","borderStyle","computed","onBeforeUnmount","h","A2UISurfaceActivityType","A2UIActivityContentSchema","getOperationSurfaceId","operation","CopilotKitCoreVue","CopilotKitCore","config","renderers","subscriber","merged","rc","key","renderToolCalls","entry","name","agentId","vueSubscriber","interruptState","nextTick","A2UI_OPERATIONS_KEY","DefaultA2UILoading","barWidths","i","createA2UIMessageRenderer","options","operations","A2UISurfaceActivityRenderer","defineToolCallRenderer","def","argsSchema","RENDER_A2UI_TOOL_NAME","registerA2UIBuiltInToolCallRenderer","enabled","core","isEnabled","_prev","renderer","status","parameters","items","components","renderA2UIProgressIndicator","existing","current","progressState","state","now","tokens","chars","phase","dot","spacer","bar","w","ht","bg","anim","opacity","transition","row","show","delay","children","createVueComponent","api","renderFn","setupState","VueWrapper","wrapperProps","resolvedProps","binder","initBinder","GenericBinder","newProps","newContext","LEAF_MARGIN","CONTAINER_PADDING","STANDARD_BORDER","STANDARD_RADIUS","mapJustify","j","mapAlign","a","getBaseLeafStyle","getBaseContainerStyle","renderChildList","childList","buildChild","node","v","a2uiIdCounter","useA2UIUniqueId","Text","TextApi","text","style","Image","ImageApi","mapFit","fit","Icon","IconApi","iconName","Video","VideoApi","AudioPlayer","AudioPlayerApi","Row","RowApi","Column","ColumnApi","List","ListApi","isHorizontal","Card","CardApi","Tabs","TabsApi","tabs","tab","title","Divider","DividerApi","isVertical","Modal","ModalApi","e","Button","ButtonApi","TextField","TextFieldApi","uniqueId","isLong","type","inputStyle","hasError","CheckBox","CheckBoxApi","ChoicePicker","ChoicePickerApi","values","isMutuallyExclusive","onToggle","val","newValues","opt","isSelected","label","Slider","SliderApi","DateTimeInput","DateTimeInputApi","vueBasicComponents","vueBasicCatalog","Catalog","BASIC_FUNCTIONS","A2UI_SCHEMA_CONTEXT_DESCRIPTION","buildCatalogContextValue","catalog","resolved","BASIC_CATALOG_ID","lines","isSuperset","customNames","comp","jsonSchema","zodToJsonSchema","extractCatalogComponentSchemas","zodSchema","registerA2UICatalogContext","contextValue","value","schemaValue","schema","ids","A2UI_DEFAULT_GENERATION_GUIDELINES","A2UI_DEFAULT_DESIGN_GUIDELINES","extractCompleteStyles","matches","processPartialHtml","bodyMatch","useSandboxFunctions","functionsRef","OpenGenerativeUIActivityType","OpenGenerativeUIContentSchema","GenerateSandboxedUiArgsSchema","shouldFlushImmediately","previous","next","ensureHead","injectCssIntoHtml","css","headCloseIdx","loadWebsandbox","OpenGenerativeUIRenderer","sandboxFunctions","throttledContent","latestContent","throttleTimer","sandboxRef","previewSandboxRef","previewReady","executedExpressionIndex","jsFunctionsInjected","pendingQueue","localApi","fn","partialHtml","previewBody","previewStyles","fullHtml","hasPreview","hasVisibleSandbox","resolvedHeight","destroyPreview","destroyFinal","previewVisible","htmlComplete","_previous","cancelled","Websandbox","sandbox","body","styles","cssText","headParts","htmlWithHead","htmlWithCss","functionsCode","expressions","startIndex","newExpressions","expression","isGenerating","OpenGenerativeUIActivityRenderer","OpenGenerativeUIToolRenderer","visibleMessageIndex","messages","_","ToolCallStatus","timer","currentMessage","LicenseContextKey","createDefaultLicenseRef","createLicenseContextValue","LICENSE_BANNER_OFFSET_PX","LICENSE_BANNER_OFFSET_VAR","emit","__emit","spec","days","baseStyle","severityStyle","containerStyle","instance","getCurrentInstance","hasDismissListener","handleDismiss","_createElementBlock","_createElementVNode","_toDisplayString","_hoisted_1","_hoisted_2","HEADER_NAME","COPILOT_CLOUD_CHAT_URL","FRONTEND_TOOLS_STABLE_WARNING","HUMAN_IN_THE_LOOP_STABLE_WARNING","RENDER_CUSTOM_MESSAGES_STABLE_WARNING","RENDER_ACTIVITY_MESSAGES_STABLE_WARNING","SANDBOX_FUNCTIONS_STABLE_WARNING","DEFAULT_DESIGN_SKILL","GENERATE_SANDBOXED_UI_DESCRIPTION","viewerTheme","shouldRenderInspector","updateInspectorVisibility","localhostHosts","initialFrontendTools","initialHumanInTheLoop","initialRenderCustomMessages","initialRenderActivityMessages","initialSandboxFunctions","resolvedPublicKey","mergedAgents","hasLocalAgents","resolvedHeaders","mergedHeaders","headers","chatApiEndpoint","endpoint","publicKey","localAgents","processedHumanInTheLoop","tools","tool","allTools","t","builtInFrontendTools","allRenderToolCalls","combined","args","allRenderCustomMessages","runtimeA2UIEnabled","runtimeOpenGenerativeUIEnabled","runtimeLicenseStatus","openGenerativeUIActive","zodToJsonSchemaCompat","builtInActivityRenderers","allRenderActivityMessages","applyDefaultThrottleMs","createCopilotKit","didMountRef","executingToolCallIds","sub1","toolCallId","triggerRef","sub2","sub3","sub4","sub5","renderCustomMessages","renderActivityMessages","syncRuntimeConfig","a2uiTheme","a2uiCatalog","a2uiLoadingComponent","a2uiIncludeSchema","providerContextIds","active","functions","designSkill","descriptors","schemaToJsonSchema","provide","licenseContextValue","showNoLicenseBanner","showExpiredBanner","showInvalidBanner","showExpiringBanner","_renderSlot","_ctx","CopilotKitInspector","LicenseWarningBanner","CopilotChatDefaultLabels","shallowEqualObjects","first","second","firstKeys","secondKeys","isPlainObject","useShallowStableRef","stable","toValue","parentConfig","parentConfigValue","stableLabels","mergedLabels","resolvedAgentId","DEFAULT_AGENT_ID","fallbackThreadId","resolvedThreadId","resolvedHasExplicitThreadId","shouldCreateModalState","resolvedDefaultOpen","internalModalOpen","setInternalModalOpen","open","resolvedIsModalOpen","resolvedSetModalOpen","configurationValue","useLicenseContext","source","useCopilotChatConfiguration","injected","DeferredChild","version","delId","childId","specificPath","path","componentModel","compImpl","ComponentContext","A2uiSurface","DEFAULT_SURFACE_ID","processorRef","lastOpsHash","getOrCreateProcessor","MessageProcessor","action","handleAction","a2uiAction","rest","processOperations","hash","processor","grouped","op","surfaceId","ops","filtered","hasOperations","surfaceEntries","entries","surface","_hoisted_3","_Fragment","_renderList","_hoisted_5","_createVNode","findToolMessage","getSlotName","toolName","isExecutingToolCall","getToolResultContent","getRenderProps","toolCall","toolMessage","parsedArgs","partialJSONParse","isExecuting","getCoreRenderProps","getCoreRenderConfig","exactMatches","renderConfig","_cache","useKatexStyles","tableIconButtonClass","tableMenuClass","tableMenuItemClass","codeActionButtonClass","labels","copied","copiedResetTimeout","vnodeProps","toolbarButtonClass","extractFileNameFromUrl","fallback","pathname","triggerDownload","href","fileName","anchor","extractTableData","table","cell","rows","toDelimitedTable","data","delimiter","escapeCell","needsQuotes","escaped","toMarkdownTable","separator","triggerBlobDownload","mimeType","blob","MarkdownImage","imageProps","handleDownload","response","objectUrl","imageAttrs","IconDownload","MarkdownTable","slots","wrapperRef","showCopyMenu","showDownloadMenu","tableCopied","tableCopiedResetTimeout","closeMenus","setTableCopiedStateWithDelay","findTable","getTableData","copyTableAs","format","downloadTableAs","handleClickOutside","target","tableAttrs","IconCheck","IconCopy","codeLanguageExtensionMap","CodeBlockCopyAction","actionProps","isCopied","resetTimeout","handleClick","CodeBlockDownloadAction","extension","markdownComponents","normalizeContent","normalizedContent","hasContent","hasListener","listenerName","listener","hasThumbsUp","hasThumbsDown","hasReadAloud","hasRegenerate","isLatestAssistantMessage","shouldShowToolbar","resetCopiedStateWithDelay","handleCopyMessage","handleThumbsUp","handleThumbsDown","handleReadAloud","handleRegenerate","$slots","$attrs","StreamMarkdown","CopilotChatToolCallsView","slotName","_withCtx","slotProps","_normalizeProps","_guardReactiveProps","IconThumbsUp","IconThumbsDown","IconVolume2","IconRefreshCw","AudioRecorderError","canvasRef","recorderState","mediaRecorderRef","streamRef","analyserRef","audioContextRef","animationIdRef","audioChunksRef","amplitudeHistoryRef","scrollOffsetRef","smoothedAmplitudeRef","fadeOpacityRef","cleanup","recorder","track","audioContext","start","stream","analyser","stop","audioBlob","calculateAmplitude","dataArray","sum","index","sample","drawFrame","canvas","rect","dpr","barWidth","barSpacing","maxBars","bufferLength","rawAmplitude","speed","computedStyle","centerY","maxAmplitude","edgeFadeWidth","amplitude","scaledAmplitude","barHeight","x","y","edgeOpacity","__expose","linkStyle","UseAgentUpdate","ALL_UPDATES","cloneForThread","clone","HttpAgent","globalThreadCloneMap","getThreadClone","registryAgent","getOrCreateThreadClone","byThread","useAgent","chatConfig","updateFlags","providerThrottleMs","hookThrottleMs","subscriptionAgent","provisionalAgentCache","createProvisionalAgent","runtimeUrl","transport","provisional","ProxiedCopilotRuntimeAgent","resolveAgent","cacheKey","resolvedAgent","shouldForceUpdate","isRuntimeConfigured","CopilotKitCoreRuntimeConnectionStatus","cached","knownAgents","runtimePart","b","flags","f","batchScheduled","batchedRefresh","handlers","subscription","useSuggestions","suggestions","initState","_newValues","changedAgentId","s","useAttachments","attachments","dragOver","fileInputRef","configRef","attachmentsRef","setAttachments","updateAttachments","updater","processFiles","files","accept","maxSize","rejectedFiles","file","matchesAcceptFilter","validFiles","exceedsMaxSize","formatFileSize","modality","getModalityFromMimeType","placeholderId","uploadMetadata","uploadResult","metadata","uploadSource","readFileAsBase64","thumbnail","generateVideoThumbnail","attachment","handleFileUpload","handleDragOver","handleDragLeave","handleDrop","removeAttachment","consumeAttachments","handlePaste","fileItems","blobToBase64","reader","isTranscriptionErrorResponse","parseTranscriptionError","TranscriptionError","info","transcribeAudio","filename","TranscriptionErrorCode","base64Audio","formData","errorData","useKeyboardHeight","initialHeight","isKeyboardOpen","keyboardHeight","availableHeight","viewportHeight","updateKeyboardState","visualViewport","layoutHeight","visualHeight","nextKeyboardHeight","nextIsOpen","readonly","DEFAULT_LAST_USER_MESSAGE_STATE","LastUserMessageKey","createDefaultLastUserMessageRef","usePinToSend","scrollRef","contentRef","spacerRef","topOffset","lastUserMessage","lastNonce","currentSpacerHeight","raf","ro","teardown","sendNonce","scrollEl","contentEl","spacerEl","targetEl","userMessageHeight","paddingTop","bubbleHeight","spacerHeight","targetTop","computeOffsetTop","contentHeight","targetOffsetWithinContent","consumedBelow","remaining","el","stopAt","elRect","stopRect","shellRef","textareaRef","gridRef","addButtonContainerRef","actionsContainerRef","slashMenuRef","addMenuRef","audioRecorderRef","localValue","isComposing","layout","commandQuery","slashHighlightIndex","previousCommandQuery","addMenuOpen","measurements","resizeEvaluationRafRef","ignoreResizeRef","measurementCanvasRef","containerCacheRef","didWarnMissingFontRef","didWarnMissingCanvasContextRef","resizeObserver","documentPointerDownHandler","isControlled","inputValue","resolvedPlaceholder","isExpanded","isProcessing","shouldShowDisclaimer","hasSubmitAction","hasStopAction","hasAddFileAction","hasStartTranscribeAction","hasCancelTranscribeAction","hasFinishTranscribeAction","canSend","sendDisabled","containerClass","rootAttrs","isMenuGroup","createDefaultAddItem","normalizeMenuItems","addItem","menuEntry","menuItems","hasMenuItems","flattenMenuForCommands","seen","commands","walk","entryList","commandItems","flattenMenuDisplay","depth","prefix","menuDisplayItems","filteredCommands","normalized","startsWith","contains","command","slashMenuVisible","updateInputValue","nextValue","clearInputValue","updateSlashState","firstLine","runCommand","submit","trimmed","handleInput","handleSendButtonClick","handleKeydown","selected","toggleAddMenu","closeAddMenu","handleMenuAction","handleFinishTranscribe","handleContainerClick","ensureMeasurements","textarea","previousValue","previousHeight","paddingLeft","paddingRight","paddingBottom","singleLineHeight","maxHeight","adjustTextareaHeight","scrollHeight","updateLayout","nextLayout","resolveTextareaFont","textareaStyles","fallbackFont","updateContainerCache","grid","addContainer","actionsContainer","gridStyles","columnGap","gridAvailableWidth","addWidth","actionsWidth","compactWidth","cache","evaluateLayout","baseline","hasExplicitBreak","renderedMultiline","shouldExpand","compactInnerWidth","resolvedFont","longestLine","line","scheduleLayoutEvaluation","invalidateCache","query","filteredCount","mode","disabled","containerTargets","shouldInvalidate","_normalizeClass","IconPlus","_normalizeStyle","IconChevronRight","$event","_hoisted_6","CopilotChatAudioRecorder","_hoisted_7","IconLoader2","_hoisted_9","_withModifiers","_hoisted_10","IconX","IconMic","_hoisted_14","IconSquare","IconArrowUp","_hoisted_16","activeLightboxAttachment","documentBlobUrl","isLightboxOpen","isPreviewableDocument","isPdf","isText","decodedTextPreview","lightboxDocumentSource","blobUrl","createBlobUrl","closeLightbox","openLightbox","withTransition","cardClassName","base64Value","binary","bytes","getSourceUrl","_hoisted_11","_hoisted_13","getDocumentIcon","_hoisted_15","_hoisted_17","_hoisted_18","_Teleport","_hoisted_22","_hoisted_23","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","formatDuration","seconds","mins","secs","isLatest","isStreaming","elapsed","isOpen","userToggledDuringStreaming","startTimeMs","elapsedInterval","clearElapsedInterval","updateElapsedNow","nextIsStreaming","toggleOpen","_hoisted_4","_hoisted_8","flattenUserMessageContent","flattenedContent","isMultiline","hasEditAction","showBranchNavigation","canGoPrev","canGoNext","handleEditMessage","payload","switchToBranch","branchIndex","goPrev","goNext","IconEdit","IconChevronLeft","stateTick","componentSlots","useSlots","forwardedSlotNames","resolvedThreadAgent","_agentId","nextInterruptState","deduplicateMessages","byId","toolCalls","deduplicatedMessages","lastMessage","showCursor","messageCount","deduplicatedCount","getMeta","resolvedRunId","runId","messageIdsInRun","rawMessageIndex","messageIndex","messageIndexInRun","numberOfMessagesInRun","stateSnapshot","getActivitySlotName","activityType","resolveCustomMessageRenderer","position","aHasAgent","bHasAgent","resolveActivityRenderer","aScoped","bScoped","parsed","CopilotChatAssistantMessage","CopilotChatUserMessage","_createSlots","CopilotChatReasoningMessage","isDisabled","loadingSet","containerAttrs","_className","suggestion","handleSelectSuggestion","CopilotChatSuggestionPill","_createTextVNode","VALID","normalizeAutoScroll","SCROLL_BUTTON_OFFSET","SCROLL_BOTTOM_THRESHOLD","scrollContainerRef","scrollContentRef","inputContainerRef","inputContainerHeight","isAtBottom","isControlledInput","localInputValue","autoScrollMode","isPinToBottomMode","isPinToSendMode","effectiveKeyboardHeight","resolvedInputValue","hasSuggestions","hasAttachments","forwardedMessageViewSlotNames","shouldShowWelcomeScreen","hasFinishTranscribeWithAudioAction","messagePaddingBottom","showScrollToBottomButton","inputResizeObserver","contentResizeObserver","attachInputOverlayObserver","wasAtBottom","measured","syncInputContainerHeight","updateIsAtBottom","scrollToBottom","attachScrollContentObserver","element","distance","behavior","handleScroll","handleInputValueChange","handleSubmitMessage","handleStop","handleAddFile","handleStartTranscribe","handleCancelTranscribe","handleFinishTranscribeWithAudio","inputEventProps","listeners","CopilotChatAttachmentQueue","CopilotChatInput","CopilotChatSuggestionView","CopilotChatMessageView","IconChevronDown","existingConfig","forwardedChatViewSlotNames","generatedThreadId","transcribeMode","transcriptionError","isTranscribing","isUnmounting","activeConnectCycle","providedThreadId","hasExplicitThreadId","lastConnectedThreadId","isConnecting","resolvedLabels","autoSuggestions","license","isChatLicensed","licensed","isTranscriptionEnabled","isMediaRecorderSupported","showTranscription","attachmentsEnabled","attachmentContainerRef","effectiveMode","runLifecycleTick","isRunning","shouldAllowStop","lastUserMessageId","prevLastUserMessageId","lastUserMessageState","inheritedThreadId","previousValues","onError","isExplicit","abstractAgentPrototype","AbstractAgent","inspectableAgent","hasCustomConnect","hasCustomConnectAgent","existingCycle","hasSameDeps","cycle","connectAbortController","AGUIConnectNotImplementedError","cb","activeCycle","runCurrentAgent","readyAttachments","contentParts","stopCurrentRun","abortError","handleInputChange","trimmedPrevious","retryable","chatViewSlotProps","defaultChatViewBindings","CopilotChatConfigurationProvider","InlineFeatureWarning","CopilotChatView","imageLoadFailed","sourceUrl","documentLabel","CopilotChatToggleButtonCloseIcon","className","CopilotChatToggleButtonOpenIcon","IconMessageCircle","iconClass","iconWrapperBase","fallbackOpen","ariaLabel","buttonClass","buttonAttrs","_onClick","iconTransitionStyle","setModalOpen","getClickListeners","CopilotModalHeaderCloseButton","CopilotModalHeaderTitle","resolvedTitle","headerClass","headerAttrs","handleClose","DEFAULT_POPUP_WIDTH","DEFAULT_POPUP_HEIGHT","POPUP_ANIMATION_MS","isRendered","isAnimatingOut","animationTimer","focusTimer","isPopupOpen","headerTitle","popupAnimationClass","popupStyle","dimensionToCss","closePopup","openPopup","togglePopup","chatViewEventProps","chatViewBindings","handleKeyDown","allowClose","handlePointerDown","CopilotChatToggleButton","CopilotModalHeader","internalProps","_defaultOpen","forwardedEventListeners","internalBindings","CopilotPopupViewInternal","inputSlotProps","suggestionViewSlotProps","layoutSlotProps","DEFAULT_SIDEBAR_WIDTH","SIDEBAR_TRANSITION_MS","sidebarRef","measuredSidebarWidth","isSidebarOpen","resolvedSidebarWidth","asideClass","asideAttrs","asideStyle","widthToCss","bodyMarginStyle","widthToMargin","updateMeasuredWidth","nextWidth","closeSidebar","openSidebar","toggleSidebar","CopilotSidebarViewInternal","popupViewEventBindings","isPopupLicensed","CopilotChat","$emit","CopilotPopupView","welcomeScreenProps","CopilotPopupWelcomeScreen","suggestionViewProps","inputProps","headerProps","toggleButtonProps","messageViewProps","sidebarViewEventBindings","isSidebarLicensed","CopilotSidebarView","CopilotSidebarWelcomeScreen","_CopilotChat","_CopilotChatView","_CopilotChatToggleButton","_CopilotModalHeader","_CopilotPopupView","_CopilotSidebarView","useAgentContext","resolvedDescription","resolvedValue","stringValue","EMPTY_DEPS","useFrontendTool","deps","extraDeps","useComponent","fullDescription","RenderComponent","useRenderTool","renderTool","warnedUnknownStatuses","mapToolCallStatus","adaptRendererProps","raw","rawStatus","safeStringifyForPre","innerErr","DefaultToolCallRenderer","isActive","isComplete","statusLabel","safeStringifyForAttr","useDefaultRenderTool","userRender","registeredRender","rawProps","adapted","userComponent","useHumanInTheLoop","resolvePromiseRef","respond","frontendTool","ToolComponent","onScopeDispose","isDynamicConfig","normalizeStaticSuggestions","useConfigureSuggestions","resolvedConsumerAgentId","rawConsumerAgentId","normalizedConfig","normalizedSuggestions","serializedConfig","targetAgentId","consumer","isGlobalConfig","pendingGlobalReload","pendingReloadTimer","previousSerializedConfig","flushPendingGlobalReload","requestReload","skippedBecauseRunning","agents","aid","_core","serialized","cfg","_vals","global","agentSubscriptions","INTERRUPT_EVENT_NAME","isPromiseLike","normalizeAsyncResult","useInterrupt","interrupt","_previousAgent","localInterrupt","resolveInterrupt","interruptEventValue","pendingEvent","handler","maybePromise","nextSlotProps","shouldRenderInChat","publishedState","bindThreadStoreSelector","store","selector","useThreads","input","ɵcreateThreadStore","resolvedIncludeArchived","resolvedLimit","headersKey","left","right","threads","storeIsLoading","storeError","hasMoreThreads","isFetchingMoreThreads","ɵselectThreads","ɵselectThreadsIsLoading","ɵselectThreadsError","ɵselectHasNextPage","ɵselectIsFetchingNextPage","hasDispatchedContext","runtimeStatus","wsUrl","includeArchived","limit","runtimeError","preConnectLoading","archived","createdAt","updatedAt","lastRunAt","useCapabilities","useRenderCustomMessages","configValue","customMessageRenderers","messagesIdsInRun","candidate","useRenderActivityMessage","findRenderer","list","renderActivityMessage","parseResult"],"mappings":"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"}