{"version":3,"file":"use-render-tool.cjs","names":["useCopilotKit","defineToolCallRenderer"],"sources":["../../src/hooks/use-render-tool.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport type {\n  StandardSchemaV1,\n  InferSchemaOutput,\n} from \"@copilotkitnext/shared\";\nimport { useCopilotKit } from \"../providers/CopilotKitProvider\";\nimport { defineToolCallRenderer } from \"../types/defineToolCallRenderer\";\n\nconst EMPTY_DEPS: ReadonlyArray<unknown> = [];\n\nexport interface RenderToolInProgressProps<S extends StandardSchemaV1> {\n  name: string;\n  parameters: Partial<InferSchemaOutput<S>>;\n  status: \"inProgress\";\n  result: undefined;\n}\n\nexport interface RenderToolExecutingProps<S extends StandardSchemaV1> {\n  name: string;\n  parameters: InferSchemaOutput<S>;\n  status: \"executing\";\n  result: undefined;\n}\n\nexport interface RenderToolCompleteProps<S extends StandardSchemaV1> {\n  name: 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: (props: RenderToolProps<S>) => React.ReactElement;\n  agentId?: string;\n};\n\n/**\n * Registers a wildcard (`\"*\"`) renderer for tool calls.\n *\n * The wildcard renderer is used as a fallback when no exact name-matched\n * renderer is registered for a tool call.\n *\n * @param config - Wildcard renderer configuration.\n * @param deps - Optional dependencies to refresh registration.\n *\n * @example\n * ```tsx\n * useRenderTool(\n *   {\n *     name: \"*\",\n *     render: ({ name, status }) => (\n *       <div>\n *         {status === \"complete\" ? \"✓\" : \"⏳\"} {name}\n *       </div>\n *     ),\n *   },\n *   [],\n * );\n * ```\n */\nexport function useRenderTool(\n  config: {\n    name: \"*\";\n    render: (props: any) => React.ReactElement;\n    agentId?: string;\n  },\n  deps?: ReadonlyArray<unknown>,\n): void;\n\n/**\n * Registers a name-scoped renderer for tool calls.\n *\n * The provided `parameters` schema defines the typed shape of `props.parameters`\n * in `render` for `executing` and `complete` states. Accepts any Standard Schema V1\n * compatible library (Zod, Valibot, ArkType, etc.).\n *\n * @typeParam S - Schema type describing tool call parameters.\n * @param config - Named renderer configuration.\n * @param deps - Optional dependencies to refresh registration.\n *\n * @example\n * ```tsx\n * useRenderTool(\n *   {\n *     name: \"searchDocs\",\n *     parameters: z.object({ query: z.string() }),\n *     render: ({ status, parameters, result }) => {\n *       if (status === \"inProgress\") return <div>Preparing...</div>;\n *       if (status === \"executing\") return <div>Searching {parameters.query}</div>;\n *       return <div>{result}</div>;\n *     },\n *   },\n *   [],\n * );\n * ```\n */\nexport function useRenderTool<S extends StandardSchemaV1>(\n  config: {\n    name: string;\n    parameters: S;\n    render: (props: RenderToolProps<S>) => React.ReactElement;\n    agentId?: string;\n  },\n  deps?: ReadonlyArray<unknown>,\n): void;\n\n/**\n * Registers a renderer entry in CopilotKit's `renderToolCalls` registry.\n *\n * Key behavior:\n * - deduplicates by `agentId:name` (latest registration wins),\n * - keeps renderer entries on cleanup so historical chat tool calls can still render,\n * - refreshes registration when `deps` change.\n *\n * @typeParam S - Schema type describing tool call parameters.\n * @param config - Renderer config for wildcard or named tools.\n * @param deps - Optional dependencies to refresh registration.\n *\n * @example\n * ```tsx\n * useRenderTool(\n *   {\n *     name: \"searchDocs\",\n *     parameters: z.object({ query: z.string() }),\n *     render: ({ status, parameters, result }) => {\n *       if (status === \"executing\") return <div>Searching {parameters.query}</div>;\n *       if (status === \"complete\") return <div>{result}</div>;\n *       return <div>Preparing...</div>;\n *     },\n *   },\n *   [],\n * );\n * ```\n *\n * @example\n * ```tsx\n * useRenderTool(\n *   {\n *     name: \"summarize\",\n *     parameters: z.object({ text: z.string() }),\n *     agentId: \"research-agent\",\n *     render: ({ name, status }) => <div>{name}: {status}</div>,\n *   },\n *   [selectedAgentId],\n * );\n * ```\n */\nexport function useRenderTool<S extends StandardSchemaV1>(\n  config: RenderToolConfig<S>,\n  deps?: ReadonlyArray<unknown>,\n): void {\n  const { copilotkit } = useCopilotKit();\n  const extraDeps = deps ?? EMPTY_DEPS;\n\n  useEffect(() => {\n    // Build the ReactToolCallRenderer via defineToolCallRenderer\n    const renderer =\n      config.name === \"*\" && !config.parameters\n        ? defineToolCallRenderer({\n            name: \"*\",\n            render: (props) =>\n              config.render({ ...props, parameters: props.args }),\n            ...(config.agentId ? { agentId: config.agentId } : {}),\n          })\n        : defineToolCallRenderer({\n            name: config.name,\n            args: config.parameters!,\n            render: (props) =>\n              config.render({ ...props, parameters: props.args }),\n            ...(config.agentId ? { agentId: config.agentId } : {}),\n          });\n\n    copilotkit.addHookRenderToolCall(renderer);\n\n    // No cleanup removal — keeps renderer for chat history, same as useFrontendTool\n  }, [config.name, copilotkit, extraDeps.length, ...extraDeps]);\n}\n"],"mappings":";;;;;;AAQA,MAAM,aAAqC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkJ7C,SAAgB,cACd,QACA,MACM;CACN,MAAM,EAAE,eAAeA,0CAAe;CACtC,MAAM,YAAY,QAAQ;AAE1B,4BAAgB;EAEd,MAAM,WACJ,OAAO,SAAS,OAAO,CAAC,OAAO,aAC3BC,sDAAuB;GACrB,MAAM;GACN,SAAS,UACP,OAAO,OAAO;IAAE,GAAG;IAAO,YAAY,MAAM;IAAM,CAAC;GACrD,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;GACtD,CAAC,GACFA,sDAAuB;GACrB,MAAM,OAAO;GACb,MAAM,OAAO;GACb,SAAS,UACP,OAAO,OAAO;IAAE,GAAG;IAAO,YAAY,MAAM;IAAM,CAAC;GACrD,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;GACtD,CAAC;AAER,aAAW,sBAAsB,SAAS;IAGzC;EAAC,OAAO;EAAM;EAAY,UAAU;EAAQ,GAAG;EAAU,CAAC"}