@ai-group/chat-sdk 3.5.13 → 3.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/cjs/components/FileGallery/index.js +1 -1
  2. package/dist/cjs/components/FileGallery/index.js.map +1 -1
  3. package/dist/cjs/components/FolderTree/DirectoryTree.d.ts +6 -0
  4. package/dist/cjs/components/FolderTree/DirectoryTree.js +5 -2
  5. package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
  6. package/dist/cjs/components/FolderTree/index.js +28 -27
  7. package/dist/cjs/components/FolderTree/index.js.map +2 -2
  8. package/dist/cjs/components/FolderTree/styles.js +4 -1
  9. package/dist/cjs/components/FolderTree/styles.js.map +2 -2
  10. package/dist/cjs/components/FolderTree/types.d.ts +5 -0
  11. package/dist/cjs/components/FolderTree/types.js.map +1 -1
  12. package/dist/cjs/components/XAdkProvider/index.js +2 -0
  13. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  14. package/dist/cjs/components/XAdkThoughtChain/index.js +75 -39
  15. package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
  16. package/dist/cjs/components/XAdkThoughtChain/styles.js +27 -26
  17. package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
  18. package/dist/cjs/index.d.ts +2 -1
  19. package/dist/cjs/index.js +9 -0
  20. package/dist/cjs/index.js.map +2 -2
  21. package/dist/cjs/styles/tokens.d.ts +27 -0
  22. package/dist/cjs/styles/tokens.js +72 -0
  23. package/dist/cjs/styles/tokens.js.map +7 -0
  24. package/dist/cjs/types/XAdkThoughtChain.d.ts +13 -0
  25. package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
  26. package/dist/esm/components/FileGallery/index.js +1 -1
  27. package/dist/esm/components/FileGallery/index.js.map +1 -1
  28. package/dist/esm/components/FolderTree/DirectoryTree.d.ts +6 -0
  29. package/dist/esm/components/FolderTree/DirectoryTree.js +6 -2
  30. package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
  31. package/dist/esm/components/FolderTree/index.js +32 -28
  32. package/dist/esm/components/FolderTree/index.js.map +1 -1
  33. package/dist/esm/components/FolderTree/styles.js +2 -2
  34. package/dist/esm/components/FolderTree/styles.js.map +1 -1
  35. package/dist/esm/components/FolderTree/types.d.ts +5 -0
  36. package/dist/esm/components/FolderTree/types.js.map +1 -1
  37. package/dist/esm/components/XAdkProvider/index.js +3 -2
  38. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  39. package/dist/esm/components/XAdkThoughtChain/index.js +100 -50
  40. package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
  41. package/dist/esm/components/XAdkThoughtChain/styles.js +20 -19
  42. package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
  43. package/dist/esm/index.d.ts +2 -1
  44. package/dist/esm/index.js +3 -0
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/styles/tokens.d.ts +27 -0
  47. package/dist/esm/styles/tokens.js +42 -0
  48. package/dist/esm/styles/tokens.js.map +1 -0
  49. package/dist/esm/types/XAdkThoughtChain.d.ts +13 -0
  50. package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
  51. package/dist/umd/chat-sdk.min.js +1 -1
  52. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAdkProvider/index.tsx"],
4
- "sourcesContent": ["import React, { forwardRef, useImperativeHandle, useMemo } from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\nimport {\n mergeChatStrategies,\n resolvePresetUploadRequest,\n} from \"@/presets/xGroupAdk\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n preset,\n strategies,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n const mergedStrategies = useMemo(\n () =>\n mergeChatStrategies(\n preset ?? config?.preset,\n {\n ...config?.strategies,\n ...strategies,\n },\n ),\n [preset, strategies, config?.preset, config?.strategies],\n );\n\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n strategies: mergedStrategies,\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const onFileClick = config?.onFileClick;\n const presetUploadRequest = useMemo(\n () =>\n resolvePresetUploadRequest(preset ?? config?.preset, {\n url,\n token,\n appNo: config?.appNo,\n }),\n [preset, config?.preset, url, token, config?.appNo],\n );\n const uploadRequest = config?.uploadRequest ?? presetUploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n showFeedback,\n onFileClick,\n uploadRequest,\n mergedStrategies,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {children}\n </div>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import React, { forwardRef, useImperativeHandle, useMemo } from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport { cssVarStyle } from \"@/styles/tokens\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\nimport {\n mergeChatStrategies,\n resolvePresetUploadRequest,\n} from \"@/presets/xGroupAdk\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n preset,\n strategies,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n const mergedStrategies = useMemo(\n () =>\n mergeChatStrategies(\n preset ?? config?.preset,\n {\n ...config?.strategies,\n ...strategies,\n },\n ),\n [preset, strategies, config?.preset, config?.strategies],\n );\n\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n strategies: mergedStrategies,\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const onFileClick = config?.onFileClick;\n const presetUploadRequest = useMemo(\n () =>\n resolvePresetUploadRequest(preset ?? config?.preset, {\n url,\n token,\n appNo: config?.appNo,\n }),\n [preset, config?.preset, url, token, config?.appNo],\n );\n const uploadRequest = config?.uploadRequest ?? presetUploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n showFeedback,\n onFileClick,\n uploadRequest,\n mergedStrategies,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <div\n style={{\n ...cssVarStyle,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n } as React.CSSProperties}\n >\n {children}\n </div>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgE;AAChE,kBAA+B;AAC/B,eAA0B;AAC1B,8BAAiC;AACjC,+BAAkC;AAClC,4BAA+B;AAC/B,wBAAuB;AACvB,oBAA4B;AAC5B,oBAA4B;AAO5B,uBAGO;AA4TP,oBAAmB;AACnB,qBAAoB;AACpB,sBAAqB;AACrB,oBAAmB;AACnB,qBAAoB;AACpB,qBAAoB;AACpB,2BAA0B;AA7BV;AAnNhB,IAAM,4BAAwB;AAAA,EAI5B,CACE;AAAA,IACE,MAAM,OAAO,SAAS;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GACA,QACG;AACH,UAAM,uBAAmB;AAAA,MACvB,UACE;AAAA,QACE,WAAU,iCAAQ;AAAA,QAClB;AAAA,UACE,GAAG,iCAAQ;AAAA,UACX,GAAG;AAAA,QACL;AAAA,MACF;AAAA,MACF,CAAC,QAAQ,YAAY,iCAAQ,QAAQ,iCAAQ,UAAU;AAAA,IACzD;AAGA,UAAM,mBAAe,kBAAAA,SAAW;AAAA,MAC9B;AAAA,MACA,OAAO,SAAS;AAAA,MAChB,QAAQ,UAAU,CAAC;AAAA,MACnB,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA,SAAS,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;AAAA,IACnC,CAAC;AAGD,UAAM,OAAO,YAAY;AAGzB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,YAAY;AAAA,MAC1B,gBAAgB,MAAM;AAAA,MAAC;AAAA,IACzB,IAAI;AAEJ,UAAM,gBAAe,iCAAQ,iBAAgB;AAC7C,UAAM,cAAc,iCAAQ;AAC5B,UAAM,0BAAsB;AAAA,MAC1B,UACE,6CAA2B,WAAU,iCAAQ,SAAQ;AAAA,QACnD;AAAA,QACA;AAAA,QACA,OAAO,iCAAQ;AAAA,MACjB,CAAC;AAAA,MACH,CAAC,QAAQ,iCAAQ,QAAQ,KAAK,OAAO,iCAAQ,KAAK;AAAA,IACpD;AACA,UAAM,iBAAgB,iCAAQ,kBAAiB;AAG/C;AAAA,MACE;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY,MAAM;AAAA,QAClB,aAAa,MAAM;AAAA,QACnB,aAAa,MAAM;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,UAAM,qBAAiB;AAAA,MACrB,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,UAAM,sBAAkB;AAAA,MACtB,OAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,UAAM,mBAAe;AAAA,MACnB,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,YACL,eAAc,mCAAS,aAAY;AAAA,UACrC;AAAA,QACF;AAAA,QAEA,sDAAC,sBACC,sDAAC,yCAAiB,UAAjB,EAA0B,OAAO,gBAChC,sDAAC,2CAAkB,UAAlB,EAA2B,OAAO,iBACjC,sDAAC,qCAAe,UAAf,EAAwB,OAAO,cAC9B;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,GAAG;AAAA,cACH,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,UAAU;AAAA,YACZ;AAAA,YAEC;AAAA;AAAA,QACH,GACF,GACF,GACF,GACF;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,sBAAsB,cAAc;AAYpC,IAAM,eAAe;AAWrB,aAAa,SAAS,cAAAC;AACtB,aAAa,UAAU,eAAAC;AACvB,aAAa,WAAW,gBAAAC;AACxB,aAAa,SAAS,cAAAC;AACtB,aAAa,UAAU,eAAAC;AACvB,aAAa,gBAAgB,qBAAAC;AAC7B,aAAa,UAAU,eAAAC;AAEvB,IAAO,uBAAQ;",
6
6
  "names": ["useADKChat", "Header", "Sidebar", "Messages", "Sender", "Chatbot", "DefaultLayout", "Welcome"]
7
7
  }
@@ -129,7 +129,23 @@ var TimelineToolItem = ({
129
129
  }
130
130
  );
131
131
  };
132
+ var StatusIcon = ({ status }) => {
133
+ switch (status) {
134
+ case "loading":
135
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.SyncOutlined, { spin: true, style: { color: "#1677ff" } });
136
+ case "success":
137
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CheckCircleFilled, { style: { color: "#52c41a" } });
138
+ case "error":
139
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CloseCircleFilled, { style: { color: "#ff4d4f" } });
140
+ case "pending":
141
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.ClockCircleOutlined, { style: { color: "#8c8c8c" } });
142
+ }
143
+ };
132
144
  var XAdkThoughtChain = ({
145
+ collapsible: showCollapsibleHeader = false,
146
+ status,
147
+ className,
148
+ style,
133
149
  defaultOpen = false,
134
150
  showFnCallDetail = false,
135
151
  title = "思维链已完成",
@@ -142,48 +158,68 @@ var XAdkThoughtChain = ({
142
158
  strategies
143
159
  }) => {
144
160
  const styles = (0, import_styles.useStyles)();
161
+ const effectiveStatus = status ?? (loading ? "loading" : "success");
162
+ const isLoading = effectiveStatus === "loading";
145
163
  const [isOpen, setIsOpen] = (0, import_react.useState)(defaultOpen);
146
164
  (0, import_react.useEffect)(() => {
147
- if (loading)
165
+ if (isLoading)
148
166
  Promise.resolve().then(() => setIsOpen(true));
149
- }, [loading]);
150
- const shouldBlink = blink && loading;
151
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.thoughtChainBlock, children: [
152
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.thoughtHeader, onClick: () => setIsOpen(!isOpen), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.headerLeft, children: [
153
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.statusIcon, children: loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.SyncOutlined, { spin: true, style: { color: "#1677ff" } }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CheckCircleFilled, { style: { color: "#52c41a" } }) }),
154
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
155
- "span",
156
- {
157
- className: `${styles.headerTitle}${shouldBlink ? ` ${styles.blink}` : ""}`,
158
- children: loading ? "深度思考与执行中..." : title
159
- }
160
- ),
161
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: `${styles.caret} ${isOpen ? "open" : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.RightOutlined, {}) })
162
- ] }) }),
163
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.thinkingBody, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.timeline, children: items.map(
164
- (item, i) => item.type === "text" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
165
- TimelineTextItem,
166
- {
167
- item,
168
- blink: shouldBlink
169
- },
170
- item.key || i
171
- ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
172
- TimelineToolItem,
173
- {
174
- msg: item.msg,
175
- collapsible: item.collapsible,
176
- showFnCallDetail,
177
- onConfirm,
178
- blink: shouldBlink,
179
- renderFunctionCall,
180
- toolKindResolver,
181
- strategies
182
- },
183
- `tool-${item.key || i}`
184
- )
185
- ) }) })
186
- ] });
167
+ }, [isLoading]);
168
+ const shouldBlink = blink && isLoading;
169
+ const renderTimeline = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.timeline, children: items.map(
170
+ (item, i) => item.type === "text" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
171
+ TimelineTextItem,
172
+ {
173
+ item,
174
+ blink: shouldBlink
175
+ },
176
+ item.key || i
177
+ ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
178
+ TimelineToolItem,
179
+ {
180
+ msg: item.msg,
181
+ collapsible: item.collapsible,
182
+ showFnCallDetail,
183
+ onConfirm,
184
+ blink: shouldBlink,
185
+ renderFunctionCall,
186
+ toolKindResolver,
187
+ strategies
188
+ },
189
+ `tool-${item.key || i}`
190
+ )
191
+ ) });
192
+ if (!showCollapsibleHeader) {
193
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
194
+ "div",
195
+ {
196
+ className: `${styles.thoughtChainBlock}${className ? ` ${className}` : ""}`,
197
+ style,
198
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.thinkingBody, children: renderTimeline() })
199
+ }
200
+ );
201
+ }
202
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
203
+ "div",
204
+ {
205
+ className: `${styles.thoughtChainBlock}${className ? ` ${className}` : ""}`,
206
+ style,
207
+ children: [
208
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.thoughtHeader, onClick: () => setIsOpen(!isOpen), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.headerLeft, children: [
209
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.statusIcon, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StatusIcon, { status: effectiveStatus }) }),
210
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
211
+ "span",
212
+ {
213
+ className: `${styles.headerTitle}${shouldBlink ? ` ${styles.blink}` : ""}`,
214
+ children: isLoading ? "深度思考与执行中..." : title
215
+ }
216
+ ),
217
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: `${styles.caret} ${isOpen ? "open" : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.RightOutlined, {}) })
218
+ ] }) }),
219
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.thinkingBody, children: renderTimeline() })
220
+ ]
221
+ }
222
+ );
187
223
  };
188
224
  var XAdkThoughtChain_default = XAdkThoughtChain;
189
225
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAdkThoughtChain/index.tsx"],
4
- "sourcesContent": ["import React, { useState, useEffect } from \"react\";\nimport {\n CheckCircleFilled,\n SyncOutlined,\n ThunderboltOutlined,\n PartitionOutlined,\n RightOutlined,\n DownOutlined,\n} from \"@ant-design/icons\";\nimport MarkdownRender from \"@/components/XAdkChatbot/components/MarkdownRender\";\nimport FunctionCallRender from \"@/components/XAdkChatbot/components/FunctionCallRender\";\nimport { useStyles } from \"./styles\";\nimport {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n TimelineItemProps,\n FunctionCall,\n IMessage,\n RenderFunctionCall,\n ToolRenderKind,\n} from \"@/types\";\nimport { defaultToolKindResolver } from \"@/types/FunctionCallRender\";\nimport { cleanProcessText } from \"@/utils\";\n\nconst TimelineItem = ({\n icon,\n title,\n children,\n collapsible = true,\n defaultOpen = true,\n blink,\n}: TimelineItemProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const styles = useStyles();\n\n return (\n <div className={styles.timelineItem}>\n <div className={styles.timelineLeft}>\n {icon}\n <div className={styles.timelineConnector} />\n </div>\n <div className={styles.timelineRight}>\n <div\n className={styles.collapsibleHeader}\n onClick={() => (collapsible ? setIsOpen(!isOpen) : undefined)}\n >\n <div className={blink ? styles.blink : undefined}>{title}</div>\n {collapsible && (\n <span className={styles.arrowIcon}>\n {isOpen ? <DownOutlined /> : <RightOutlined />}\n </span>\n )}\n </div>\n\n {isOpen && <div className={styles.stepContent}>{children}</div>}\n </div>\n </div>\n );\n};\n\nconst TimelineTextItem: React.FC<{\n item: ThoughtChainItemType;\n blink?: boolean;\n}> = ({ item, blink }) => {\n return (\n <TimelineItem\n icon={\n <span className={useStyles().timelineIcon}>\n <PartitionOutlined />\n </span>\n }\n title={<span className={useStyles().titleText}>{item.title}</span>}\n blink={blink}\n >\n <MarkdownRender text={cleanProcessText(item.content)} />\n </TimelineItem>\n );\n};\n\nconst TimelineToolItem: React.FC<{\n msg: IMessage;\n collapsible?: boolean;\n showFnCallDetail: boolean;\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n blink?: boolean;\n renderFunctionCall?: RenderFunctionCall;\n toolKindResolver: (name: string | undefined) => ToolRenderKind;\n strategies?: XAdkThoughtChainProps[\"strategies\"];\n}> = ({\n msg,\n collapsible,\n onConfirm,\n showFnCallDetail,\n blink,\n renderFunctionCall,\n toolKindResolver,\n strategies,\n}) => {\n const styles = useStyles();\n const fnName = msg.functionCall?.name;\n const kind = toolKindResolver(fnName);\n const needsConfirm = msg.functionCall && !msg.functionResponse;\n const isDone = !!msg.functionResponse;\n\n const toolName =\n msg.functionCall?.args?.componentName ||\n msg.functionCall?.name ||\n \"组件执行\";\n\n const statusInfo =\n msg.functionResponse?.response?.processData ||\n msg.functionResponse?.response?.output;\n\n const titleNode = (\n <div className={styles.toolTitleGroup}>\n <span className={styles.toolName}>{toolName}</span>\n {isDone && <span className={styles.toolStatusTag}>执行成功</span>}\n </div>\n );\n\n return (\n <TimelineItem\n icon={\n <span className={styles.timelineIconTool}>\n <ThunderboltOutlined />\n </span>\n }\n title={titleNode}\n collapsible={collapsible}\n defaultOpen={needsConfirm}\n blink={blink}\n >\n {statusInfo && typeof statusInfo === \"string\" && (\n <div className={styles.statusInfo}>{statusInfo}</div>\n )}\n {renderFunctionCall?.(msg) ?? (\n <FunctionCallRender\n msg={msg}\n showDetail={showFnCallDetail}\n onConfirm={onConfirm}\n kind={kind}\n renderApproval={strategies?.renderApproval}\n renderHandoff={strategies?.renderHandoff}\n />\n )}\n </TimelineItem>\n );\n};\n\nconst XAdkThoughtChain: React.FC<XAdkThoughtChainProps> = ({\n defaultOpen = false,\n showFnCallDetail = false,\n title = \"思维链已完成\",\n items = [],\n loading,\n blink = false,\n onConfirm,\n renderFunctionCall,\n toolKindResolver = defaultToolKindResolver,\n strategies,\n}) => {\n const styles = useStyles();\n const [isOpen, setIsOpen] = useState(defaultOpen);\n useEffect(() => {\n if (loading) Promise.resolve().then(() => setIsOpen(true));\n }, [loading]);\n\n const shouldBlink = blink && loading;\n\n return (\n <div className={styles.thoughtChainBlock}>\n <div className={styles.thoughtHeader} onClick={() => setIsOpen(!isOpen)}>\n <div className={styles.headerLeft}>\n <div className={styles.statusIcon}>\n {loading ? (\n <SyncOutlined spin style={{ color: \"#1677ff\" }} />\n ) : (\n <CheckCircleFilled style={{ color: \"#52c41a\" }} />\n )}\n </div>\n <span\n className={`${styles.headerTitle}${shouldBlink ? ` ${styles.blink}` : \"\"}`}\n >\n {loading ? \"深度思考与执行中...\" : title}\n </span>\n <div className={`${styles.caret} ${isOpen ? \"open\" : \"\"}`}>\n <RightOutlined />\n </div>\n </div>\n </div>\n {isOpen && (\n <div className={styles.thinkingBody}>\n <div className={styles.timeline}>\n {items.map((item, i) =>\n item.type === \"text\" ? (\n <TimelineTextItem\n key={item.key || i}\n item={item}\n blink={shouldBlink}\n />\n ) : (\n <TimelineToolItem\n key={`tool-${item.key || i}`}\n msg={item.msg!}\n collapsible={item.collapsible}\n showFnCallDetail={showFnCallDetail}\n onConfirm={onConfirm}\n blink={shouldBlink}\n renderFunctionCall={renderFunctionCall}\n toolKindResolver={toolKindResolver}\n strategies={strategies}\n />\n ),\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default XAdkThoughtChain;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import React, { useState, useEffect } from \"react\";\nimport {\n CheckCircleFilled,\n CloseCircleFilled,\n ClockCircleOutlined,\n SyncOutlined,\n ThunderboltOutlined,\n PartitionOutlined,\n RightOutlined,\n DownOutlined,\n} from \"@ant-design/icons\";\nimport MarkdownRender from \"@/components/XAdkChatbot/components/MarkdownRender\";\nimport FunctionCallRender from \"@/components/XAdkChatbot/components/FunctionCallRender\";\nimport { useStyles } from \"./styles\";\nimport {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n ThoughtChainStatus,\n TimelineItemProps,\n FunctionCall,\n IMessage,\n RenderFunctionCall,\n ToolRenderKind,\n} from \"@/types\";\nimport { defaultToolKindResolver } from \"@/types/FunctionCallRender\";\nimport { cleanProcessText } from \"@/utils\";\n\nconst TimelineItem = ({\n icon,\n title,\n children,\n collapsible = true,\n defaultOpen = true,\n blink,\n}: TimelineItemProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const styles = useStyles();\n\n return (\n <div className={styles.timelineItem}>\n <div className={styles.timelineLeft}>\n {icon}\n <div className={styles.timelineConnector} />\n </div>\n <div className={styles.timelineRight}>\n <div\n className={styles.collapsibleHeader}\n onClick={() => (collapsible ? setIsOpen(!isOpen) : undefined)}\n >\n <div className={blink ? styles.blink : undefined}>{title}</div>\n {collapsible && (\n <span className={styles.arrowIcon}>\n {isOpen ? <DownOutlined /> : <RightOutlined />}\n </span>\n )}\n </div>\n\n {isOpen && <div className={styles.stepContent}>{children}</div>}\n </div>\n </div>\n );\n};\n\nconst TimelineTextItem: React.FC<{\n item: ThoughtChainItemType;\n blink?: boolean;\n}> = ({ item, blink }) => {\n return (\n <TimelineItem\n icon={\n <span className={useStyles().timelineIcon}>\n <PartitionOutlined />\n </span>\n }\n title={<span className={useStyles().titleText}>{item.title}</span>}\n blink={blink}\n >\n <MarkdownRender text={cleanProcessText(item.content)} />\n </TimelineItem>\n );\n};\n\nconst TimelineToolItem: React.FC<{\n msg: IMessage;\n collapsible?: boolean;\n showFnCallDetail: boolean;\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n blink?: boolean;\n renderFunctionCall?: RenderFunctionCall;\n toolKindResolver: (name: string | undefined) => ToolRenderKind;\n strategies?: XAdkThoughtChainProps[\"strategies\"];\n}> = ({\n msg,\n collapsible,\n onConfirm,\n showFnCallDetail,\n blink,\n renderFunctionCall,\n toolKindResolver,\n strategies,\n}) => {\n const styles = useStyles();\n const fnName = msg.functionCall?.name;\n const kind = toolKindResolver(fnName);\n const needsConfirm = msg.functionCall && !msg.functionResponse;\n const isDone = !!msg.functionResponse;\n\n const toolName =\n msg.functionCall?.args?.componentName ||\n msg.functionCall?.name ||\n \"组件执行\";\n\n const statusInfo =\n msg.functionResponse?.response?.processData ||\n msg.functionResponse?.response?.output;\n\n const titleNode = (\n <div className={styles.toolTitleGroup}>\n <span className={styles.toolName}>{toolName}</span>\n {isDone && <span className={styles.toolStatusTag}>执行成功</span>}\n </div>\n );\n\n return (\n <TimelineItem\n icon={\n <span className={styles.timelineIconTool}>\n <ThunderboltOutlined />\n </span>\n }\n title={titleNode}\n collapsible={collapsible}\n defaultOpen={needsConfirm}\n blink={blink}\n >\n {statusInfo && typeof statusInfo === \"string\" && (\n <div className={styles.statusInfo}>{statusInfo}</div>\n )}\n {renderFunctionCall?.(msg) ?? (\n <FunctionCallRender\n msg={msg}\n showDetail={showFnCallDetail}\n onConfirm={onConfirm}\n kind={kind}\n renderApproval={strategies?.renderApproval}\n renderHandoff={strategies?.renderHandoff}\n />\n )}\n </TimelineItem>\n );\n};\n\nconst StatusIcon: React.FC<{ status: ThoughtChainStatus }> = ({ status }) => {\n switch (status) {\n case \"loading\":\n return <SyncOutlined spin style={{ color: \"#1677ff\" }} />;\n case \"success\":\n return <CheckCircleFilled style={{ color: \"#52c41a\" }} />;\n case \"error\":\n return <CloseCircleFilled style={{ color: \"#ff4d4f\" }} />;\n case \"pending\":\n return <ClockCircleOutlined style={{ color: \"#8c8c8c\" }} />;\n }\n};\n\nconst XAdkThoughtChain: React.FC<XAdkThoughtChainProps> = ({\n collapsible: showCollapsibleHeader = false,\n status,\n className,\n style,\n defaultOpen = false,\n showFnCallDetail = false,\n title = \"思维链已完成\",\n items = [],\n loading,\n blink = false,\n onConfirm,\n renderFunctionCall,\n toolKindResolver = defaultToolKindResolver,\n strategies,\n}) => {\n const styles = useStyles();\n\n // status 优先,loading 向后兼容\n const effectiveStatus: ThoughtChainStatus =\n status ?? (loading ? \"loading\" : \"success\");\n const isLoading = effectiveStatus === \"loading\";\n\n const [isOpen, setIsOpen] = useState(defaultOpen);\n useEffect(() => {\n if (isLoading) Promise.resolve().then(() => setIsOpen(true));\n }, [isLoading]);\n\n const shouldBlink = blink && isLoading;\n\n const renderTimeline = () => (\n <div className={styles.timeline}>\n {items.map((item, i) =>\n item.type === \"text\" ? (\n <TimelineTextItem\n key={item.key || i}\n item={item}\n blink={shouldBlink}\n />\n ) : (\n <TimelineToolItem\n key={`tool-${item.key || i}`}\n msg={item.msg!}\n collapsible={item.collapsible}\n showFnCallDetail={showFnCallDetail}\n onConfirm={onConfirm}\n blink={shouldBlink}\n renderFunctionCall={renderFunctionCall}\n toolKindResolver={toolKindResolver}\n strategies={strategies}\n />\n ),\n )}\n </div>\n );\n\n // 不显示外层 header,直接渲染 timeline\n if (!showCollapsibleHeader) {\n return (\n <div\n className={`${styles.thoughtChainBlock}${className ? ` ${className}` : \"\"}`}\n style={style}\n >\n <div className={styles.thinkingBody}>{renderTimeline()}</div>\n </div>\n );\n }\n\n // 显示可折叠 header\n return (\n <div\n className={`${styles.thoughtChainBlock}${className ? ` ${className}` : \"\"}`}\n style={style}\n >\n <div className={styles.thoughtHeader} onClick={() => setIsOpen(!isOpen)}>\n <div className={styles.headerLeft}>\n <div className={styles.statusIcon}>\n <StatusIcon status={effectiveStatus} />\n </div>\n <span\n className={`${styles.headerTitle}${shouldBlink ? ` ${styles.blink}` : \"\"}`}\n >\n {isLoading ? \"深度思考与执行中...\" : title}\n </span>\n <div className={`${styles.caret} ${isOpen ? \"open\" : \"\"}`}>\n <RightOutlined />\n </div>\n </div>\n </div>\n {isOpen && (\n <div className={styles.thinkingBody}>{renderTimeline()}</div>\n )}\n </div>\n );\n};\n\nexport default XAdkThoughtChain;\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_FunctionCallRender", "MarkdownRender", "FunctionCallRender"]
7
7
  }
@@ -24,6 +24,7 @@ __export(styles_exports, {
24
24
  module.exports = __toCommonJS(styles_exports);
25
25
  var import_css = require("@emotion/css");
26
26
  var import_common = require("../../styles/common");
27
+ var import_tokens = require("../../styles/tokens");
27
28
  var blinkAnimation = import_css.keyframes`
28
29
  0% { background-position-x: -200%; background-position-y: 100%; }
29
30
  25% { background-position-x: -100%; background-position-y: 100%; }
@@ -34,8 +35,8 @@ var blinkAnimation = import_css.keyframes`
34
35
  var useStyles = (0, import_common.withBasicStyles)(() => ({
35
36
  /* --- ThoughtChain --- */
36
37
  thoughtChainBlock: import_css.css`
37
- margin-bottom: 16px;
38
- border-radius: 8px;
38
+ margin-bottom: ${(0, import_tokens.token)(import_tokens.tokens.spacingMd)};
39
+ border-radius: ${(0, import_tokens.token)(import_tokens.tokens.borderRadius)};
39
40
  overflow: hidden;
40
41
  `,
41
42
  thoughtHeader: import_css.css`
@@ -46,18 +47,18 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
46
47
  user-select: none;
47
48
  transition: background 0.2s;
48
49
  &:hover {
49
- background: #f0f0f0;
50
+ background: ${(0, import_tokens.token)(import_tokens.tokens.colorBgHover)};
50
51
  border-color: #ccc;
51
52
  }
52
53
  `,
53
54
  headerLeft: import_css.css`
54
55
  display: flex;
55
56
  align-items: center;
56
- gap: 8px;
57
+ gap: ${(0, import_tokens.token)(import_tokens.tokens.spacingSm)};
57
58
  `,
58
59
  caret: import_css.css`
59
- font-size: 12px;
60
- color: #8194ad;
60
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeSm)};
61
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
61
62
  transition: transform 0.2s;
62
63
  &.open {
63
64
  transform: rotate(90deg);
@@ -69,13 +70,13 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
69
70
  align-items: center;
70
71
  `,
71
72
  headerTitle: import_css.css`
72
- font-size: 13px;
73
- color: #8194ad;
73
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
74
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
74
75
  font-weight: 500;
75
76
  `,
76
77
  headerRight: import_css.css``,
77
78
  thinkingBody: import_css.css`
78
- padding: 0 16px;
79
+ padding: 0 ${(0, import_tokens.token)(import_tokens.tokens.spacingMd)};
79
80
  animation: fadeIn 0.2s ease-in-out;
80
81
  `,
81
82
  /* --- Timeline --- */
@@ -95,19 +96,19 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
95
96
  flex-shrink: 0;
96
97
  `,
97
98
  timelineIcon: import_css.css`
98
- color: #8194ad;
99
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
99
100
  font-size: 16px;
100
101
  margin-top: 6px;
101
102
  `,
102
103
  timelineIconTool: import_css.css`
103
- color: #faad14;
104
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorWarning)};
104
105
  font-size: 16px;
105
106
  margin-top: 6px;
106
107
  `,
107
108
  timelineConnector: import_css.css`
108
109
  flex: 1;
109
110
  width: 1px;
110
- background-color: #e5e5e5;
111
+ background-color: ${(0, import_tokens.token)(import_tokens.tokens.colorBorder)};
111
112
  margin: 4px 0;
112
113
  min-height: 12px;
113
114
  `,
@@ -117,7 +118,7 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
117
118
  `,
118
119
  timelineRight: import_css.css`
119
120
  flex: 1;
120
- padding-bottom: 8px;
121
+ padding-bottom: ${(0, import_tokens.token)(import_tokens.tokens.spacingSm)};
121
122
  min-width: 0;
122
123
  `,
123
124
  collapsibleHeader: import_css.css`
@@ -132,31 +133,31 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
132
133
  user-select: none;
133
134
 
134
135
  &:hover {
135
- background: #f5f5f5;
136
+ background: ${(0, import_tokens.token)(import_tokens.tokens.colorBgHover)};
136
137
  }
137
138
  `,
138
139
  titleText: import_css.css`
139
- font-size: 13px;
140
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
140
141
  font-weight: 600;
141
- color: #8194ad;
142
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
142
143
  `,
143
144
  toolTitleGroup: import_css.css`
144
145
  display: flex;
145
146
  align-items: center;
146
- gap: 8px;
147
+ gap: ${(0, import_tokens.token)(import_tokens.tokens.spacingSm)};
147
148
  overflow: hidden;
148
149
  `,
149
150
  toolName: import_css.css`
150
- font-size: 13px;
151
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
151
152
  font-weight: 600;
152
- color: #8194ad;
153
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
153
154
  white-space: nowrap;
154
155
  overflow: hidden;
155
156
  text-overflow: ellipsis;
156
157
  `,
157
158
  toolStatusTag: import_css.css`
158
159
  font-size: 11px;
159
- color: #52c41a;
160
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorSuccess)};
160
161
  background: #f6ffed;
161
162
  border: 1px solid #b7eb8f;
162
163
  padding: 0 6px;
@@ -166,22 +167,22 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
166
167
  arrowIcon: import_css.css`
167
168
  font-size: 10px;
168
169
  color: #bbb;
169
- margin-left: 8px;
170
+ margin-left: ${(0, import_tokens.token)(import_tokens.tokens.spacingSm)};
170
171
  `,
171
172
  stepContent: import_css.css`
172
- font-size: 13px;
173
- color: #8194ad;
173
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
174
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
174
175
  line-height: 1.6;
175
176
  padding-left: 4px;
176
177
  `,
177
178
  statusInfo: import_css.css`
178
- font-size: 12px;
179
- color: #8194ad;
179
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeSm)};
180
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
180
181
  margin-bottom: 4px;
181
182
  font-style: italic;
182
183
  `,
183
184
  blink: import_css.css`
184
- color: #8194ad;
185
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
185
186
  background-image: linear-gradient(
186
187
  90deg,
187
188
  transparent,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAdkThoughtChain/styles.tsx"],
4
- "sourcesContent": ["/* eslint-disable import/prefer-default-export */\nimport { css, keyframes } from \"@emotion/css\";\nimport { withBasicStyles, lightBlue, primaryBlue } from \"@/styles/common\";\n\nconst blinkAnimation = keyframes`\n 0% { background-position-x: -200%; background-position-y: 100%; }\n 25% { background-position-x: -100%; background-position-y: 100%; }\n 50% { background-position-x: 0%; background-position-y: 100%; }\n 75% { background-position-x: 100%; background-position-y: 100%; }\n 100% { background-position-x: 200%; background-position-y: 100%; }\n`;\n\nexport const useStyles = withBasicStyles(() => ({\n /* --- ThoughtChain --- */\n\n thoughtChainBlock: css`\n margin-bottom: 16px;\n border-radius: 8px;\n overflow: hidden;\n `,\n\n thoughtHeader: css`\n display: flex;\n align-items: center;\n padding: 10px 14px;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n &:hover {\n background: #f0f0f0;\n border-color: #ccc;\n }\n `,\n\n headerLeft: css`\n display: flex;\n align-items: center;\n gap: 8px;\n `,\n\n caret: css`\n font-size: 12px;\n color: #8194ad;\n transition: transform 0.2s;\n &.open {\n transform: rotate(90deg);\n }\n `,\n\n statusIcon: css`\n font-size: 14px;\n display: flex;\n align-items: center;\n `,\n\n headerTitle: css`\n font-size: 13px;\n color: #8194ad;\n font-weight: 500;\n `,\n\n headerRight: css``,\n\n thinkingBody: css`\n padding: 0 16px;\n animation: fadeIn 0.2s ease-in-out;\n `,\n\n /* --- Timeline --- */\n\n timeline: css`\n width: 100%;\n `,\n\n timelineItem: css`\n display: flex;\n gap: 12px;\n position: relative;\n `,\n\n timelineLeft: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 20px;\n flex-shrink: 0;\n `,\n\n timelineIcon: css`\n color: #8194ad;\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineIconTool: css`\n color: #faad14;\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineConnector: css`\n flex: 1;\n width: 1px;\n background-color: #e5e5e5;\n margin: 4px 0;\n min-height: 12px;\n `,\n\n /* Hide connector on last item */\n timelineItemLastConnector: css`\n display: none;\n `,\n\n timelineRight: css`\n flex: 1;\n padding-bottom: 8px;\n min-width: 0;\n `,\n\n collapsibleHeader: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px 8px;\n margin: 0 -8px 4px -8px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n user-select: none;\n\n &:hover {\n background: #f5f5f5;\n }\n `,\n\n titleText: css`\n font-size: 13px;\n font-weight: 600;\n color: #8194ad;\n `,\n\n toolTitleGroup: css`\n display: flex;\n align-items: center;\n gap: 8px;\n overflow: hidden;\n `,\n\n toolName: css`\n font-size: 13px;\n font-weight: 600;\n color: #8194ad;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `,\n\n toolStatusTag: css`\n font-size: 11px;\n color: #52c41a;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n padding: 0 6px;\n border-radius: 4px;\n flex-shrink: 0;\n `,\n\n arrowIcon: css`\n font-size: 10px;\n color: #bbb;\n margin-left: 8px;\n `,\n\n stepContent: css`\n font-size: 13px;\n color: #8194ad;\n line-height: 1.6;\n padding-left: 4px;\n `,\n\n statusInfo: css`\n font-size: 12px;\n color: #8194ad;\n margin-bottom: 4px;\n font-style: italic;\n `,\n\n blink: css`\n color: #8194ad;\n background-image: linear-gradient(\n 90deg,\n transparent,\n rgba(0, 0, 0, 0.88),\n transparent\n );\n background-clip: text;\n -webkit-background-clip: text;\n background-size: 50%;\n background-repeat: no-repeat;\n animation-name: ${blinkAnimation};\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n `,\n}));\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA+B;AAC/B,oBAAwD;AAExD,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAG9C,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaf,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASP,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAMb,aAAa;AAAA,EAEb,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAOd,UAAU;AAAA;AAAA;AAAA,EAIV,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnB,2BAA2B;AAAA;AAAA;AAAA,EAI3B,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBnB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASV,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUf,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOZ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAYa;AAAA;AAAA;AAAA;AAAA;AAAA;AAMtB,EAAE;",
4
+ "sourcesContent": ["/* eslint-disable import/prefer-default-export */\nimport { css, keyframes } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\nimport { token, tokens } from \"@/styles/tokens\";\n\nconst blinkAnimation = keyframes`\n 0% { background-position-x: -200%; background-position-y: 100%; }\n 25% { background-position-x: -100%; background-position-y: 100%; }\n 50% { background-position-x: 0%; background-position-y: 100%; }\n 75% { background-position-x: 100%; background-position-y: 100%; }\n 100% { background-position-x: 200%; background-position-y: 100%; }\n`;\n\nexport const useStyles = withBasicStyles(() => ({\n /* --- ThoughtChain --- */\n\n thoughtChainBlock: css`\n margin-bottom: ${token(tokens.spacingMd)};\n border-radius: ${token(tokens.borderRadius)};\n overflow: hidden;\n `,\n\n thoughtHeader: css`\n display: flex;\n align-items: center;\n padding: 10px 14px;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n &:hover {\n background: ${token(tokens.colorBgHover)};\n border-color: #ccc;\n }\n `,\n\n headerLeft: css`\n display: flex;\n align-items: center;\n gap: ${token(tokens.spacingSm)};\n `,\n\n caret: css`\n font-size: ${token(tokens.fontSizeSm)};\n color: ${token(tokens.colorTextSecondary)};\n transition: transform 0.2s;\n &.open {\n transform: rotate(90deg);\n }\n `,\n\n statusIcon: css`\n font-size: 14px;\n display: flex;\n align-items: center;\n `,\n\n headerTitle: css`\n font-size: ${token(tokens.fontSizeBase)};\n color: ${token(tokens.colorTextSecondary)};\n font-weight: 500;\n `,\n\n headerRight: css``,\n\n thinkingBody: css`\n padding: 0 ${token(tokens.spacingMd)};\n animation: fadeIn 0.2s ease-in-out;\n `,\n\n /* --- Timeline --- */\n\n timeline: css`\n width: 100%;\n `,\n\n timelineItem: css`\n display: flex;\n gap: 12px;\n position: relative;\n `,\n\n timelineLeft: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 20px;\n flex-shrink: 0;\n `,\n\n timelineIcon: css`\n color: ${token(tokens.colorTextSecondary)};\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineIconTool: css`\n color: ${token(tokens.colorWarning)};\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineConnector: css`\n flex: 1;\n width: 1px;\n background-color: ${token(tokens.colorBorder)};\n margin: 4px 0;\n min-height: 12px;\n `,\n\n /* Hide connector on last item */\n timelineItemLastConnector: css`\n display: none;\n `,\n\n timelineRight: css`\n flex: 1;\n padding-bottom: ${token(tokens.spacingSm)};\n min-width: 0;\n `,\n\n collapsibleHeader: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px 8px;\n margin: 0 -8px 4px -8px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n user-select: none;\n\n &:hover {\n background: ${token(tokens.colorBgHover)};\n }\n `,\n\n titleText: css`\n font-size: ${token(tokens.fontSizeBase)};\n font-weight: 600;\n color: ${token(tokens.colorTextSecondary)};\n `,\n\n toolTitleGroup: css`\n display: flex;\n align-items: center;\n gap: ${token(tokens.spacingSm)};\n overflow: hidden;\n `,\n\n toolName: css`\n font-size: ${token(tokens.fontSizeBase)};\n font-weight: 600;\n color: ${token(tokens.colorTextSecondary)};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `,\n\n toolStatusTag: css`\n font-size: 11px;\n color: ${token(tokens.colorSuccess)};\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n padding: 0 6px;\n border-radius: 4px;\n flex-shrink: 0;\n `,\n\n arrowIcon: css`\n font-size: 10px;\n color: #bbb;\n margin-left: ${token(tokens.spacingSm)};\n `,\n\n stepContent: css`\n font-size: ${token(tokens.fontSizeBase)};\n color: ${token(tokens.colorTextSecondary)};\n line-height: 1.6;\n padding-left: 4px;\n `,\n\n statusInfo: css`\n font-size: ${token(tokens.fontSizeSm)};\n color: ${token(tokens.colorTextSecondary)};\n margin-bottom: 4px;\n font-style: italic;\n `,\n\n blink: css`\n color: ${token(tokens.colorTextSecondary)};\n background-image: linear-gradient(\n 90deg,\n transparent,\n rgba(0, 0, 0, 0.88),\n transparent\n );\n background-clip: text;\n -webkit-background-clip: text;\n background-size: 50%;\n background-repeat: no-repeat;\n animation-name: ${blinkAnimation};\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n `,\n}));\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA+B;AAC/B,oBAAgC;AAChC,oBAA8B;AAE9B,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAG9C,mBAAmB;AAAA,yBACA,qBAAM,qBAAO,SAAS;AAAA,yBACtB,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA,EAI5C,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQG,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA,EAK3C,YAAY;AAAA;AAAA;AAAA,eAGH,qBAAM,qBAAO,SAAS;AAAA;AAAA,EAG/B,OAAO;AAAA,qBACQ,qBAAM,qBAAO,UAAU;AAAA,iBAC3B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,aAAa;AAAA,qBACE,qBAAM,qBAAO,YAAY;AAAA,iBAC7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA,EAI1C,aAAa;AAAA,EAEb,cAAc;AAAA,qBACC,qBAAM,qBAAO,SAAS;AAAA;AAAA;AAAA;AAAA,EAMrC,UAAU;AAAA;AAAA;AAAA,EAIV,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,cAAc;AAAA,iBACH,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAK1C,kBAAkB;AAAA,iBACP,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA,EAKpC,mBAAmB;AAAA;AAAA;AAAA,4BAGG,qBAAM,qBAAO,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9C,2BAA2B;AAAA;AAAA;AAAA,EAI3B,eAAe;AAAA;AAAA,0BAEK,qBAAM,qBAAO,SAAS;AAAA;AAAA;AAAA,EAI1C,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAYD,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA,EAI3C,WAAW;AAAA,qBACI,qBAAM,qBAAO,YAAY;AAAA;AAAA,iBAE7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA,EAG1C,gBAAgB;AAAA;AAAA;AAAA,eAGP,qBAAM,qBAAO,SAAS;AAAA;AAAA;AAAA,EAI/B,UAAU;AAAA,qBACK,qBAAM,qBAAO,YAAY;AAAA;AAAA,iBAE7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,eAAe;AAAA;AAAA,iBAEJ,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQpC,WAAW;AAAA;AAAA;AAAA,uBAGM,qBAAM,qBAAO,SAAS;AAAA;AAAA,EAGvC,aAAa;AAAA,qBACE,qBAAM,qBAAO,YAAY;AAAA,iBAC7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAK1C,YAAY;AAAA,qBACG,qBAAM,qBAAO,UAAU;AAAA,iBAC3B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAK1C,OAAO;AAAA,iBACI,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAWtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAMtB,EAAE;",
6
6
  "names": []
7
7
  }
@@ -27,4 +27,5 @@ export { default as FunctionCallRender } from "./components/XAdkChatbot/componen
27
27
  export { default as ThinkRender } from "./components/XAdkChatbot/components/ThinkRender";
28
28
  export type { MarkdownRenderProps } from "./components/XAdkChatbot/components/MarkdownRender";
29
29
  export type { FunctionCallRenderProps } from "./types/FunctionCallRender";
30
- export type { XAdkThoughtChainProps, ThoughtChainItemType, } from "./types/XAdkThoughtChain";
30
+ export type { XAdkThoughtChainProps, ThoughtChainItemType, ThoughtChainStatus, } from "./types/XAdkThoughtChain";
31
+ export { tokens, tokenDefaults, token, cssVarStyle } from "./styles/tokens";
package/dist/cjs/index.js CHANGED
@@ -49,10 +49,14 @@ __export(src_exports, {
49
49
  basePreset: () => import_xGroupAdk.basePreset,
50
50
  baseToolKindResolver: () => import_xGroupAdk.baseToolKindResolver,
51
51
  createXGroupUploadRequest: () => import_xGroupAdk.createXGroupUploadRequest,
52
+ cssVarStyle: () => import_tokens.cssVarStyle,
52
53
  mergeChatStrategies: () => import_xGroupAdk.mergeChatStrategies,
53
54
  request: () => import_request.default,
54
55
  resolveChatPreset: () => import_xGroupAdk.resolveChatPreset,
55
56
  resolvePresetUploadRequest: () => import_xGroupAdk.resolvePresetUploadRequest,
57
+ token: () => import_tokens.token,
58
+ tokenDefaults: () => import_tokens.tokenDefaults,
59
+ tokens: () => import_tokens.tokens,
56
60
  useADKChat: () => import_useADKChat.default,
57
61
  useChatActions: () => import_context.useChatActions,
58
62
  useChatState: () => import_context.useChatState,
@@ -85,6 +89,7 @@ var import_FolderTree = __toESM(require("./components/FolderTree"));
85
89
  var import_MarkdownRender = __toESM(require("./components/XAdkChatbot/components/MarkdownRender"));
86
90
  var import_FunctionCallRender = __toESM(require("./components/XAdkChatbot/components/FunctionCallRender"));
87
91
  var import_ThinkRender = __toESM(require("./components/XAdkChatbot/components/ThinkRender"));
92
+ var import_tokens = require("./styles/tokens");
88
93
  // Annotate the CommonJS export names for ESM import in node:
89
94
  0 && (module.exports = {
90
95
  FileGallery,
@@ -106,10 +111,14 @@ var import_ThinkRender = __toESM(require("./components/XAdkChatbot/components/Th
106
111
  basePreset,
107
112
  baseToolKindResolver,
108
113
  createXGroupUploadRequest,
114
+ cssVarStyle,
109
115
  mergeChatStrategies,
110
116
  request,
111
117
  resolveChatPreset,
112
118
  resolvePresetUploadRequest,
119
+ token,
120
+ tokenDefaults,
121
+ tokens,
113
122
  useADKChat,
114
123
  useChatActions,
115
124
  useChatState,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport XAdkSenderSwitch from \"./components/XAdkSender/Switch\";\nimport useADKChat from \"./hooks/useADKChat\";\nimport {\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n createXGroupUploadRequest,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n} from \"./presets/xGroupAdk\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n XAdkSenderSwitch,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n createXGroupUploadRequest,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n};\n\n// FolderTree 文件树组件\nimport FolderTree from \"./components/FolderTree\";\nexport { FolderTree };\nexport type {\n FolderTreeProps,\n FolderTreeData,\n FileContentService,\n FolderTreeRef,\n} from \"./components/FolderTree\";\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./types/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n} from \"./types/XAdkThoughtChain\";\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AAGpB,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,oBAA6B;AAC7B,wBAAuB;AACvB,uBAUO;AAGP,qBAIO;AAEP,wBAAc,oBArCd;AA2EA,wBAAuB;AAUvB,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;",
4
+ "sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport XAdkSenderSwitch from \"./components/XAdkSender/Switch\";\nimport useADKChat from \"./hooks/useADKChat\";\nimport {\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n createXGroupUploadRequest,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n} from \"./presets/xGroupAdk\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n XAdkSenderSwitch,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n createXGroupUploadRequest,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n};\n\n// FolderTree 文件树组件\nimport FolderTree from \"./components/FolderTree\";\nexport { FolderTree };\nexport type {\n FolderTreeProps,\n FolderTreeData,\n FileContentService,\n FolderTreeRef,\n} from \"./components/FolderTree\";\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./types/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n ThoughtChainStatus,\n} from \"./types/XAdkThoughtChain\";\n\n// 设计令牌导出 - 供引用方覆盖样式\nexport { tokens, tokenDefaults, token, cssVarStyle } from \"./styles/tokens\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AAGpB,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,oBAA6B;AAC7B,wBAAuB;AACvB,uBAUO;AAGP,qBAIO;AAEP,wBAAc,oBArCd;AA2EA,wBAAuB;AAUvB,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;AAYvC,oBAA0D;",
6
6
  "names": ["FileGallery", "FolderTree", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAdkSenderSwitch", "XAdkThoughtChain", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "request", "useADKChat", "useXAiSDK"]
7
7
  }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * CSS Variables 设计令牌统一管理
3
+ *
4
+ * 引用方可通过在父容器设置同名 CSS 变量来覆盖组件样式:
5
+ * .my-app { --xadk-color-primary: #7c3aed; }
6
+ */
7
+ /** CSS 变量名常量 */
8
+ export declare const tokens: {
9
+ readonly colorPrimary: "--xadk-color-primary";
10
+ readonly colorSuccess: "--xadk-color-success";
11
+ readonly colorError: "--xadk-color-error";
12
+ readonly colorWarning: "--xadk-color-warning";
13
+ readonly colorTextSecondary: "--xadk-color-text-secondary";
14
+ readonly colorBorder: "--xadk-color-border";
15
+ readonly colorBgHover: "--xadk-color-bg-hover";
16
+ readonly fontSizeSm: "--xadk-font-size-sm";
17
+ readonly fontSizeBase: "--xadk-font-size-base";
18
+ readonly borderRadius: "--xadk-border-radius";
19
+ readonly spacingSm: "--xadk-spacing-sm";
20
+ readonly spacingMd: "--xadk-spacing-md";
21
+ };
22
+ /** 默认值映射 */
23
+ export declare const tokenDefaults: Record<string, string>;
24
+ /** 生成 var() 引用(带 fallback 默认值) */
25
+ export declare const token: (name: string, fallback?: string) => string;
26
+ /** 将 tokenDefaults 转为可注入到 style 属性的对象 */
27
+ export declare const cssVarStyle: Record<string, string>;