@ai-group/chat-sdk 3.7.5 → 3.8.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.
- package/README.md +36 -0
- package/dist/cjs/components/DislikeFeedback.js.map +2 -2
- package/dist/cjs/components/FileGallery/index.js +2 -1
- package/dist/cjs/components/FileGallery/index.js.map +3 -3
- package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
- package/dist/cjs/components/Sources/components/CarouselCard.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +94 -18
- package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
- package/dist/cjs/components/XAdkChatbot/styles.d.ts +3 -0
- package/dist/cjs/components/XAdkChatbot/styles.js +29 -0
- package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/utils.d.ts +14 -0
- package/dist/cjs/components/XAdkChatbot/utils.js +79 -0
- package/dist/cjs/components/XAdkChatbot/utils.js.map +7 -0
- package/dist/cjs/components/XAdkProvider/compound/DislikeFeedBack.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Messages.js +2 -0
- package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sidebar.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
- package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/index.js +3 -0
- package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
- package/dist/cjs/components/XAdkThoughtChain/index.js +23 -28
- package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
- package/dist/cjs/components/XAdkThoughtChain/styles.d.ts +3 -1
- package/dist/cjs/components/XAdkThoughtChain/styles.js +63 -29
- package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
- package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAiConversations/index.js +2 -1
- package/dist/cjs/components/XAiConversations/index.js.map +3 -3
- package/dist/cjs/components/XAiProvider/index.js.map +2 -2
- package/dist/cjs/components/XAiSender/index.js.map +2 -2
- package/dist/cjs/hooks/useADKChat.d.ts +6 -1
- package/dist/cjs/hooks/useADKChat.js +15 -1
- package/dist/cjs/hooks/useADKChat.js.map +2 -2
- package/dist/cjs/hooks/useADKMessageQueue.d.ts +22 -0
- package/dist/cjs/hooks/useADKMessageQueue.js +105 -0
- package/dist/cjs/hooks/useADKMessageQueue.js.map +7 -0
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/react/index.d.ts +2 -0
- package/dist/cjs/react/index.js +3 -0
- package/dist/cjs/react/index.js.map +2 -2
- package/dist/cjs/types/XAdkChatbot.d.ts +13 -0
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkProvider.d.ts +7 -0
- package/dist/cjs/types/XAdkProvider.js.map +2 -2
- package/dist/cjs/types/XAdkThoughtChain.d.ts +2 -0
- package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
- package/dist/cjs/types/antdx.d.ts +2 -2
- package/dist/cjs/types/antdx.js.map +1 -1
- package/dist/esm/components/DislikeFeedback.js.map +1 -1
- package/dist/esm/components/FileGallery/index.js +2 -1
- package/dist/esm/components/FileGallery/index.js.map +1 -1
- package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
- package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.js +89 -14
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/styles.d.ts +3 -0
- package/dist/esm/components/XAdkChatbot/styles.js +25 -22
- package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/utils.d.ts +14 -0
- package/dist/esm/components/XAdkChatbot/utils.js +66 -0
- package/dist/esm/components/XAdkChatbot/utils.js.map +1 -0
- package/dist/esm/components/XAdkProvider/compound/DislikeFeedBack.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Messages.js +5 -1
- package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Sidebar.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
- package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
- package/dist/esm/components/XAdkProvider/index.js +4 -2
- package/dist/esm/components/XAdkProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
- package/dist/esm/components/XAdkThoughtChain/index.js +52 -78
- package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
- package/dist/esm/components/XAdkThoughtChain/styles.d.ts +3 -1
- package/dist/esm/components/XAdkThoughtChain/styles.js +28 -26
- package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
- package/dist/esm/components/XAiChatbot/index.js.map +1 -1
- package/dist/esm/components/XAiConversations/index.js +2 -1
- package/dist/esm/components/XAiConversations/index.js.map +1 -1
- package/dist/esm/components/XAiProvider/index.js.map +1 -1
- package/dist/esm/components/XAiSender/index.js.map +1 -1
- package/dist/esm/hooks/useADKChat.d.ts +6 -1
- package/dist/esm/hooks/useADKChat.js +18 -1
- package/dist/esm/hooks/useADKChat.js.map +1 -1
- package/dist/esm/hooks/useADKMessageQueue.d.ts +22 -0
- package/dist/esm/hooks/useADKMessageQueue.js +157 -0
- package/dist/esm/hooks/useADKMessageQueue.js.map +1 -0
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/react/index.d.ts +2 -0
- package/dist/esm/react/index.js +1 -0
- package/dist/esm/react/index.js.map +1 -1
- package/dist/esm/types/XAdkChatbot.d.ts +13 -0
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkProvider.d.ts +7 -0
- package/dist/esm/types/XAdkProvider.js.map +1 -1
- package/dist/esm/types/XAdkThoughtChain.d.ts +2 -0
- package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
- package/dist/esm/types/antdx.d.ts +2 -2
- package/dist/esm/types/antdx.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- 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, {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useState,\n} 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 { ChatSenderStateContext } from \"./context/ChatSenderStateContext\";\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/runtime\";\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(preset ?? config?.preset, {\n ...config?.strategies,\n ...strategies,\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 allowUpload = config?.allowUpload ?? false;\n const draggable = config?.draggable ?? true;\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 url,\n token,\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 // Sender 输入框受控状态\n const [senderValue, setSenderValue] = useState(\"\");\n\n // Sender 专用状态 — 不包含 messages,避免轮询更新消息时导致 Sender 重渲染和焦点丢失\n const senderStateValue = useMemo(\n () => ({\n loading,\n uploadRequest,\n allowUpload,\n draggable,\n senderValue,\n setSenderValue,\n }),\n [loading, uploadRequest, allowUpload, draggable, senderValue],\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 <ChatSenderStateContext.Provider value={senderStateValue}>\n <div\n style={\n {\n ...cssVarStyle,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n </ChatSenderStateContext.Provider>\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,mBAKO;AACP,kBAA+B;AAC/B,eAA0B;AAC1B,8BAAiC;AACjC,+BAAkC;AAClC,4BAA+B;AAC/B,oCAAuC;AACvC,wBAAuB;AACvB,oBAA4B;AAC5B,oBAA4B;AAO5B,qBAGO;
|
|
4
|
+
"sourcesContent": ["import React, {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useState,\n} 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 { ChatSenderStateContext } from \"./context/ChatSenderStateContext\";\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/runtime\";\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(preset ?? config?.preset, {\n ...config?.strategies,\n ...strategies,\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 showUserActions = config?.showUserActions ?? true;\n const onFileClick = config?.onFileClick;\n const allowUpload = config?.allowUpload ?? false;\n const draggable = config?.draggable ?? true;\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 showUserActions,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n showUserActions,\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 // Sender 输入框受控状态\n const [senderValue, setSenderValue] = useState(\"\");\n\n // Sender 专用状态 — 不包含 messages,避免轮询更新消息时导致 Sender 重渲染和焦点丢失\n const senderStateValue = useMemo(\n () => ({\n loading,\n uploadRequest,\n allowUpload,\n draggable,\n senderValue,\n setSenderValue,\n }),\n [loading, uploadRequest, allowUpload, draggable, senderValue],\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 <ChatSenderStateContext.Provider value={senderStateValue}>\n <div\n style={\n {\n ...cssVarStyle,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n </ChatSenderStateContext.Provider>\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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",
|
|
6
6
|
"names": ["useADKChat", "Header", "Sidebar", "Messages", "Sender", "Chatbot", "DefaultLayout", "Welcome"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAdkSender/InputTags.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from \"react\";\nimport { Tag } from \"antd\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport type { MentionTag } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\nexport interface InputTagsProps {\n mentions: MentionTag[];\n onRemove: (id: string) => void;\n}\n\n// 输入框上方展示\nconst InputTags: React.FC<InputTagsProps> = ({ mentions, onRemove }) => {\n const styles = useStyles();\n\n if (!mentions.length) return null;\n\n // 非 inlineTags 模式下,Mention 以独立区域展示;inlineTags 模式由 InlineTagInput 接管混排和删除。\n return (\n <div className={styles.inputTags}>\n {mentions.map((mention) => (\n <Tag\n key={mention.id}\n className={styles.inputTag}\n closable\n onClose={(e) => {\n e.preventDefault();\n onRemove(mention.id);\n }}\n closeIcon={<CloseOutlined style={{ fontSize: 10 }} />}\n color={mention.color}\n icon={mention.icon}\n >\n {mention.displayName || mention.label}\n </Tag>\n ))}\n </div>\n );\n};\n\nexport default InputTags;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAoB;AACpB,mBAA8B;AAE9B,oBAA0B;AAyBL;AAjBrB,IAAM,YAAsC,CAAC,EAAE,UAAU,SAAS,MAAM;AACtE,QAAM,aAAS,yBAAU;AAEzB,MAAI,CAAC,SAAS;AAAQ,WAAO;AAG7B,SACE,4CAAC,SAAI,WAAW,OAAO,WACpB,mBAAS,IAAI,CAAC,YACb;AAAA,IAAC;AAAA;AAAA,MAEC,WAAW,OAAO;AAAA,MAClB,UAAQ;AAAA,MACR,SAAS,CAAC,
|
|
4
|
+
"sourcesContent": ["import React from \"react\";\nimport { Tag } from \"antd\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport type { MentionTag } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\nexport interface InputTagsProps {\n mentions: MentionTag[];\n onRemove: (id: string) => void;\n}\n\n// 输入框上方展示\nconst InputTags: React.FC<InputTagsProps> = ({ mentions, onRemove }) => {\n const styles = useStyles();\n\n if (!mentions.length) return null;\n\n // 非 inlineTags 模式下,Mention 以独立区域展示;inlineTags 模式由 InlineTagInput 接管混排和删除。\n return (\n <div className={styles.inputTags}>\n {mentions.map((mention) => (\n <Tag\n key={mention.id}\n className={styles.inputTag}\n closable\n onClose={(e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n onRemove(mention.id);\n }}\n closeIcon={<CloseOutlined style={{ fontSize: 10 }} />}\n color={mention.color}\n icon={mention.icon}\n >\n {mention.displayName || mention.label}\n </Tag>\n ))}\n </div>\n );\n};\n\nexport default InputTags;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAoB;AACpB,mBAA8B;AAE9B,oBAA0B;AAyBL;AAjBrB,IAAM,YAAsC,CAAC,EAAE,UAAU,SAAS,MAAM;AACtE,QAAM,aAAS,yBAAU;AAEzB,MAAI,CAAC,SAAS;AAAQ,WAAO;AAG7B,SACE,4CAAC,SAAI,WAAW,OAAO,WACpB,mBAAS,IAAI,CAAC,YACb;AAAA,IAAC;AAAA;AAAA,MAEC,WAAW,OAAO;AAAA,MAClB,UAAQ;AAAA,MACR,SAAS,CAAC,MAAqC;AAC7C,UAAE,eAAe;AACjB,iBAAS,QAAQ,EAAE;AAAA,MACrB;AAAA,MACA,WAAW,4CAAC,8BAAc,OAAO,EAAE,UAAU,GAAG,GAAG;AAAA,MACnD,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ;AAAA,MAEb,kBAAQ,eAAe,QAAQ;AAAA;AAAA,IAX3B,QAAQ;AAAA,EAYf,CACD,GACH;AAEJ;AAEA,IAAO,oBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -102,7 +102,7 @@ var TimelineToolItem = ({
|
|
|
102
102
|
const statusInfo = ((_f = (_e = msg.functionResponse) == null ? void 0 : _e.response) == null ? void 0 : _f.processData) || ((_h = (_g = msg.functionResponse) == null ? void 0 : _g.response) == null ? void 0 : _h.output);
|
|
103
103
|
const titleNode = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.toolTitleGroup, children: [
|
|
104
104
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: styles.toolName, children: toolName }),
|
|
105
|
-
isDone && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: styles.toolStatusTag, children: "
|
|
105
|
+
isDone && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: styles.toolStatusTag, children: "已完成" })
|
|
106
106
|
] });
|
|
107
107
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
108
108
|
TimelineItem,
|
|
@@ -129,18 +129,6 @@ 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
|
-
};
|
|
144
132
|
var XAdkThoughtChain = ({
|
|
145
133
|
collapsible: showCollapsibleHeader = false,
|
|
146
134
|
status,
|
|
@@ -149,6 +137,7 @@ var XAdkThoughtChain = ({
|
|
|
149
137
|
defaultOpen = false,
|
|
150
138
|
showFnCallDetail = false,
|
|
151
139
|
title = "思维链已完成",
|
|
140
|
+
activeStep,
|
|
152
141
|
items = [],
|
|
153
142
|
loading,
|
|
154
143
|
blink = false,
|
|
@@ -161,11 +150,13 @@ var XAdkThoughtChain = ({
|
|
|
161
150
|
const effectiveStatus = status ?? (loading ? "loading" : "success");
|
|
162
151
|
const isLoading = effectiveStatus === "loading";
|
|
163
152
|
const [isOpen, setIsOpen] = (0, import_react.useState)(defaultOpen);
|
|
153
|
+
const wasLoading = (0, import_react.useRef)(isLoading);
|
|
164
154
|
(0, import_react.useEffect)(() => {
|
|
165
|
-
if (isLoading)
|
|
166
|
-
|
|
155
|
+
if (wasLoading.current && !isLoading)
|
|
156
|
+
setIsOpen(false);
|
|
157
|
+
wasLoading.current = isLoading;
|
|
167
158
|
}, [isLoading]);
|
|
168
|
-
const shouldBlink = blink && isLoading;
|
|
159
|
+
const shouldBlink = blink && isLoading && !showCollapsibleHeader;
|
|
169
160
|
const renderTimeline = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.timeline, children: items.map(
|
|
170
161
|
(item, i) => item.type === "text" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
171
162
|
TimelineTextItem,
|
|
@@ -202,20 +193,24 @@ var XAdkThoughtChain = ({
|
|
|
202
193
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
203
194
|
"div",
|
|
204
195
|
{
|
|
205
|
-
className: `${styles.thoughtChainBlock}${className ? ` ${className}` : ""}`,
|
|
196
|
+
className: `${styles.thoughtChainBlock} ${styles.groupedBlock}${className ? ` ${className}` : ""}`,
|
|
206
197
|
style,
|
|
207
198
|
children: [
|
|
208
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
"
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
199
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
200
|
+
"button",
|
|
201
|
+
{
|
|
202
|
+
type: "button",
|
|
203
|
+
className: styles.thoughtHeader,
|
|
204
|
+
"aria-expanded": isOpen,
|
|
205
|
+
onClick: () => setIsOpen((open) => !open),
|
|
206
|
+
children: [
|
|
207
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: `${styles.caret} ${isOpen ? "open" : ""}`, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.RightOutlined, {}) }),
|
|
208
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: styles.headerTitle, children: isLoading ? "执行中" : title }),
|
|
209
|
+
isLoading && (activeStep == null ? void 0 : activeStep.trim()) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: styles.activeStep, children: activeStep.trim() }),
|
|
210
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: styles.headerAction, children: isOpen ? "收起执行过程" : "查看执行过程" })
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
),
|
|
219
214
|
isOpen && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.thinkingBody, children: renderTimeline() })
|
|
220
215
|
]
|
|
221
216
|
}
|
|
@@ -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
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import React, { useState, useEffect, useRef } from \"react\";\nimport {\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 collapsible: showCollapsibleHeader = false,\n status,\n className,\n style,\n defaultOpen = false,\n showFnCallDetail = false,\n title = \"思维链已完成\",\n activeStep,\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 = status ?? (loading ? \"loading\" : \"success\");\n const isLoading = effectiveStatus === \"loading\";\n\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const wasLoading = useRef(isLoading);\n useEffect(() => {\n if (wasLoading.current && !isLoading) setIsOpen(false);\n wasLoading.current = isLoading;\n }, [isLoading]);\n\n const shouldBlink = blink && isLoading && !showCollapsibleHeader;\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 // 显示可折叠的执行过程入口\n return (\n <div\n className={`${styles.thoughtChainBlock} ${styles.groupedBlock}${className ? ` ${className}` : \"\"}`}\n style={style}\n >\n <button\n type=\"button\"\n className={styles.thoughtHeader}\n aria-expanded={isOpen}\n onClick={() => setIsOpen((open) => !open)}\n >\n <span className={`${styles.caret} ${isOpen ? \"open\" : \"\"}`} aria-hidden=\"true\">\n <RightOutlined />\n </span>\n <span className={styles.headerTitle}>\n {isLoading ? \"执行中\" : title}\n </span>\n {isLoading && activeStep?.trim() && (\n <span className={styles.activeStep}>{activeStep.trim()}</span>\n )}\n <span className={styles.headerAction}>\n {isOpen ? \"收起执行过程\" : \"查看执行过程\"}\n </span>\n </button>\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
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export declare const useStyles: () => {
|
|
2
2
|
thoughtChainBlock: string;
|
|
3
|
+
groupedBlock: string;
|
|
3
4
|
thoughtHeader: string;
|
|
4
5
|
headerLeft: string;
|
|
5
6
|
caret: string;
|
|
6
7
|
statusIcon: string;
|
|
7
8
|
headerTitle: string;
|
|
8
|
-
|
|
9
|
+
headerAction: string;
|
|
10
|
+
activeStep: string;
|
|
9
11
|
thinkingBody: string;
|
|
10
12
|
timeline: string;
|
|
11
13
|
timelineItem: string;
|
|
@@ -26,11 +26,8 @@ var import_css = require("@emotion/css");
|
|
|
26
26
|
var import_common = require("../../styles/common");
|
|
27
27
|
var import_tokens = require("../../styles/tokens");
|
|
28
28
|
var blinkAnimation = import_css.keyframes`
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
50% { background-position-x: 0%; background-position-y: 100%; }
|
|
32
|
-
75% { background-position-x: 100%; background-position-y: 100%; }
|
|
33
|
-
100% { background-position-x: 200%; background-position-y: 100%; }
|
|
29
|
+
from { background-position: 200% center; }
|
|
30
|
+
to { background-position: -200% center; }
|
|
34
31
|
`;
|
|
35
32
|
var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
36
33
|
/* --- ThoughtChain --- */
|
|
@@ -39,16 +36,29 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
39
36
|
border-radius: ${(0, import_tokens.token)(import_tokens.tokens.borderRadius)};
|
|
40
37
|
overflow: hidden;
|
|
41
38
|
`,
|
|
39
|
+
groupedBlock: import_css.css`
|
|
40
|
+
border: 1px solid #e7e9ed;
|
|
41
|
+
background: #fff;
|
|
42
|
+
`,
|
|
42
43
|
thoughtHeader: import_css.css`
|
|
43
44
|
display: flex;
|
|
44
|
-
align-items:
|
|
45
|
-
|
|
45
|
+
align-items: baseline;
|
|
46
|
+
gap: 8px;
|
|
47
|
+
width: 100%;
|
|
48
|
+
border: 0;
|
|
49
|
+
background: #f8f9fb;
|
|
50
|
+
padding: 10px 12px;
|
|
51
|
+
text-align: left;
|
|
52
|
+
font: inherit;
|
|
46
53
|
cursor: pointer;
|
|
47
54
|
user-select: none;
|
|
48
55
|
transition: background 0.2s;
|
|
49
56
|
&:hover {
|
|
50
|
-
background:
|
|
51
|
-
|
|
57
|
+
background: #f2f4f7;
|
|
58
|
+
}
|
|
59
|
+
&:focus-visible {
|
|
60
|
+
outline: 2px solid ${(0, import_tokens.token)(import_tokens.tokens.colorPrimary)};
|
|
61
|
+
outline-offset: -2px;
|
|
52
62
|
}
|
|
53
63
|
`,
|
|
54
64
|
headerLeft: import_css.css`
|
|
@@ -57,8 +67,9 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
57
67
|
gap: ${(0, import_tokens.token)(import_tokens.tokens.spacingSm)};
|
|
58
68
|
`,
|
|
59
69
|
caret: import_css.css`
|
|
60
|
-
|
|
61
|
-
|
|
70
|
+
display: inline-flex;
|
|
71
|
+
font-size: 10px;
|
|
72
|
+
color: #6b7280;
|
|
62
73
|
transition: transform 0.2s;
|
|
63
74
|
&.open {
|
|
64
75
|
transform: rotate(90deg);
|
|
@@ -71,13 +82,39 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
71
82
|
`,
|
|
72
83
|
headerTitle: import_css.css`
|
|
73
84
|
font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
|
|
74
|
-
color:
|
|
75
|
-
font-weight:
|
|
85
|
+
color: #374151;
|
|
86
|
+
font-weight: 600;
|
|
87
|
+
white-space: nowrap;
|
|
88
|
+
`,
|
|
89
|
+
headerAction: import_css.css`
|
|
90
|
+
flex-shrink: 0;
|
|
91
|
+
color: #6b7280;
|
|
92
|
+
font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeSm)};
|
|
93
|
+
&::before {
|
|
94
|
+
content: "·";
|
|
95
|
+
margin-right: 8px;
|
|
96
|
+
}
|
|
97
|
+
`,
|
|
98
|
+
activeStep: import_css.css`
|
|
99
|
+
min-width: 0;
|
|
100
|
+
overflow: hidden;
|
|
101
|
+
text-overflow: ellipsis;
|
|
102
|
+
white-space: nowrap;
|
|
103
|
+
color: #6b7280;
|
|
104
|
+
font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeSm)};
|
|
105
|
+
background: linear-gradient(105deg, #6b7280 20%, #c4c9d1 46%, #6b7280 72%);
|
|
106
|
+
background-size: 200% 100%;
|
|
107
|
+
background-clip: text;
|
|
108
|
+
-webkit-background-clip: text;
|
|
109
|
+
-webkit-text-fill-color: transparent;
|
|
110
|
+
animation: ${blinkAnimation} 2.2s linear infinite;
|
|
111
|
+
@media (prefers-reduced-motion: reduce) {
|
|
112
|
+
animation: none;
|
|
113
|
+
}
|
|
76
114
|
`,
|
|
77
|
-
headerRight: import_css.css``,
|
|
78
115
|
thinkingBody: import_css.css`
|
|
79
|
-
padding:
|
|
80
|
-
|
|
116
|
+
padding: 10px 14px 4px;
|
|
117
|
+
border-top: 1px solid #eceef1;
|
|
81
118
|
`,
|
|
82
119
|
/* --- Timeline --- */
|
|
83
120
|
timeline: import_css.css`
|
|
@@ -96,13 +133,13 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
96
133
|
flex-shrink: 0;
|
|
97
134
|
`,
|
|
98
135
|
timelineIcon: import_css.css`
|
|
99
|
-
color:
|
|
100
|
-
font-size:
|
|
136
|
+
color: #9aa1ab;
|
|
137
|
+
font-size: 14px;
|
|
101
138
|
margin-top: 6px;
|
|
102
139
|
`,
|
|
103
140
|
timelineIconTool: import_css.css`
|
|
104
|
-
color:
|
|
105
|
-
font-size:
|
|
141
|
+
color: #9aa1ab;
|
|
142
|
+
font-size: 14px;
|
|
106
143
|
margin-top: 6px;
|
|
107
144
|
`,
|
|
108
145
|
timelineConnector: import_css.css`
|
|
@@ -138,8 +175,8 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
138
175
|
`,
|
|
139
176
|
titleText: import_css.css`
|
|
140
177
|
font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
|
|
141
|
-
font-weight:
|
|
142
|
-
color:
|
|
178
|
+
font-weight: 500;
|
|
179
|
+
color: #4b5563;
|
|
143
180
|
`,
|
|
144
181
|
toolTitleGroup: import_css.css`
|
|
145
182
|
display: flex;
|
|
@@ -149,19 +186,16 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
149
186
|
`,
|
|
150
187
|
toolName: import_css.css`
|
|
151
188
|
font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
|
|
152
|
-
font-weight:
|
|
153
|
-
color:
|
|
189
|
+
font-weight: 500;
|
|
190
|
+
color: #4b5563;
|
|
154
191
|
white-space: nowrap;
|
|
155
192
|
overflow: hidden;
|
|
156
193
|
text-overflow: ellipsis;
|
|
157
194
|
`,
|
|
158
195
|
toolStatusTag: import_css.css`
|
|
159
196
|
font-size: 11px;
|
|
160
|
-
color:
|
|
161
|
-
|
|
162
|
-
border: 1px solid #b7eb8f;
|
|
163
|
-
padding: 0 6px;
|
|
164
|
-
border-radius: 4px;
|
|
197
|
+
color: #8b929d;
|
|
198
|
+
padding: 0;
|
|
165
199
|
flex-shrink: 0;
|
|
166
200
|
`,
|
|
167
201
|
arrowIcon: import_css.css`
|
|
@@ -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 } from \"@/styles/common\";\nimport { token, tokens } from \"@/styles/tokens\";\n\nconst blinkAnimation = keyframes`\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA+B;AAC/B,oBAAgC;AAChC,oBAA8B;AAE9B,IAAM,iBAAiB;AAAA;AAAA;AAAA;
|
|
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 from { background-position: 200% center; }\n to { background-position: -200% center; }\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 groupedBlock: css`\n border: 1px solid #e7e9ed;\n background: #fff;\n `,\n\n thoughtHeader: css`\n display: flex;\n align-items: baseline;\n gap: 8px;\n width: 100%;\n border: 0;\n background: #f8f9fb;\n padding: 10px 12px;\n text-align: left;\n font: inherit;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n &:hover {\n background: #f2f4f7;\n }\n &:focus-visible {\n outline: 2px solid ${token(tokens.colorPrimary)};\n outline-offset: -2px;\n }\n `,\n\n headerLeft: css`\n display: flex;\n align-items: center;\n gap: ${token(tokens.spacingSm)};\n `,\n\n caret: css`\n display: inline-flex;\n font-size: 10px;\n color: #6b7280;\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: #374151;\n font-weight: 600;\n white-space: nowrap;\n `,\n\n headerAction: css`\n flex-shrink: 0;\n color: #6b7280;\n font-size: ${token(tokens.fontSizeSm)};\n &::before {\n content: \"·\";\n margin-right: 8px;\n }\n `,\n\n activeStep: css`\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: #6b7280;\n font-size: ${token(tokens.fontSizeSm)};\n background: linear-gradient(105deg, #6b7280 20%, #c4c9d1 46%, #6b7280 72%);\n background-size: 200% 100%;\n background-clip: text;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n animation: ${blinkAnimation} 2.2s linear infinite;\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n `,\n\n thinkingBody: css`\n padding: 10px 14px 4px;\n border-top: 1px solid #eceef1;\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: #9aa1ab;\n font-size: 14px;\n margin-top: 6px;\n `,\n\n timelineIconTool: css`\n color: #9aa1ab;\n font-size: 14px;\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: 500;\n color: #4b5563;\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: 500;\n color: #4b5563;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `,\n\n toolStatusTag: css`\n font-size: 11px;\n color: #8b929d;\n padding: 0;\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;AAKhB,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAG9C,mBAAmB;AAAA,yBACA,qBAAM,qBAAO,SAAS;AAAA,yBACtB,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA,EAI5C,cAAc;AAAA;AAAA;AAAA;AAAA,EAKd,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAiBU,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA,EAKlD,YAAY;AAAA;AAAA;AAAA,eAGH,qBAAM,qBAAO,SAAS;AAAA;AAAA,EAG/B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUP,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,aAAa;AAAA,qBACE,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxC,cAAc;AAAA;AAAA;AAAA,qBAGC,qBAAM,qBAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOtC,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAMG,qBAAM,qBAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAMvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf,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,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;AAAA;AAAA,EAKxC,gBAAgB;AAAA;AAAA;AAAA,eAGP,qBAAM,qBAAO,SAAS;AAAA;AAAA;AAAA,EAI/B,UAAU;AAAA,qBACK,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxC,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOf,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
|
}
|