@tdesign-react/chat 1.0.0 → 1.0.2-alpha.0

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 (60) hide show
  1. package/es/_util/reactify.js +4 -5
  2. package/es/_util/reactify.js.map +1 -1
  3. package/es/_util/useDynamicStyle.js +2 -2
  4. package/es/_util/useDynamicStyle.js.map +1 -1
  5. package/es/attachments/index.d.ts +5 -0
  6. package/es/attachments/index.js +26 -0
  7. package/es/attachments/index.js.map +1 -0
  8. package/es/chat-actionbar/index.js +2 -2
  9. package/es/chat-attachments/index.js +1 -3
  10. package/es/chat-attachments/index.js.map +1 -1
  11. package/es/chat-engine/components/provider/agent-state.js +2 -2
  12. package/es/chat-engine/components/toolcall/index.js +2 -2
  13. package/es/chat-engine/components/toolcall/registry.js +2 -2
  14. package/es/chat-engine/components/toolcall/render.js +13 -13
  15. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  16. package/es/chat-engine/components/toolcall/types.d.ts +12 -4
  17. package/es/chat-engine/components/toolcall/types.js +2 -2
  18. package/es/chat-engine/components/toolcall/types.js.map +1 -1
  19. package/es/chat-engine/hooks/useAgentState.js +2 -2
  20. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  21. package/es/chat-engine/hooks/useAgentToolcall.js +2 -2
  22. package/es/chat-engine/hooks/useAgentToolcall.js.map +1 -1
  23. package/es/chat-engine/hooks/useChat.js +2 -2
  24. package/es/chat-engine/hooks/useChat.js.map +1 -1
  25. package/es/chat-engine/index.js +2 -2
  26. package/es/chat-filecard/index.js +2 -2
  27. package/es/chat-loading/index.js +2 -2
  28. package/es/chat-markdown/index.js +2 -2
  29. package/es/chat-message/index.js +2 -2
  30. package/es/chat-sender/index.js +2 -2
  31. package/es/chat-thinking/index.js +2 -2
  32. package/es/chatbot/components/provider/agent-state.d.ts +5 -0
  33. package/es/chatbot/components/provider/agent-state.js +28 -0
  34. package/es/chatbot/components/provider/agent-state.js.map +1 -0
  35. package/es/chatbot/components/toolcall/index.d.ts +3 -0
  36. package/es/chatbot/components/toolcall/index.js +19 -0
  37. package/es/chatbot/components/toolcall/index.js.map +1 -0
  38. package/es/chatbot/components/toolcall/registry.d.ts +35 -0
  39. package/es/chatbot/components/toolcall/registry.js +75 -0
  40. package/es/chatbot/components/toolcall/registry.js.map +1 -0
  41. package/es/chatbot/components/toolcall/render.d.ts +13 -0
  42. package/es/chatbot/components/toolcall/render.js +207 -0
  43. package/es/chatbot/components/toolcall/render.js.map +1 -0
  44. package/es/chatbot/components/toolcall/types.d.ts +57 -0
  45. package/es/chatbot/components/toolcall/types.js +15 -0
  46. package/es/chatbot/components/toolcall/types.js.map +1 -0
  47. package/es/chatbot/hooks/useAgentState.d.ts +40 -0
  48. package/es/chatbot/hooks/useAgentState.js +76 -0
  49. package/es/chatbot/hooks/useAgentState.js.map +1 -0
  50. package/es/chatbot/hooks/useAgentToolcall.d.ts +28 -0
  51. package/es/chatbot/hooks/useAgentToolcall.js +78 -0
  52. package/es/chatbot/hooks/useAgentToolcall.js.map +1 -0
  53. package/es/chatbot/hooks/useChat.d.ts +11 -0
  54. package/es/chatbot/hooks/useChat.js +66 -0
  55. package/es/chatbot/hooks/useChat.js.map +1 -0
  56. package/es/chatbot/index.js +2 -2
  57. package/es/index.d.ts +1 -2
  58. package/es/index.js +3 -3
  59. package/es/style/index.js +2 -2
  60. package/package.json +4 -5
@@ -1,6 +1,6 @@
1
1
  /**
2
- * tdesign v1.0.0
3
- * (c) 2025 tdesign
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
@@ -18,7 +18,7 @@ import React, { createRef, createElement, Component, forwardRef } from 'react';
18
18
  import ReactDOM from 'react-dom';
19
19
  import { createRoot } from 'react-dom/client';
20
20
 
21
- var _excluded = ["children", "className", "innerRef"];
21
+ var _excluded = ["children", "className"];
22
22
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
23
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24
24
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
@@ -27,7 +27,7 @@ var isReact18Plus = function isReact18Plus() {
27
27
  return typeof createRoot !== "undefined";
28
28
  };
29
29
  var isReact19Plus = function isReact19Plus() {
30
- var majorVersion = parseInt(React.version.split(".")[0]);
30
+ var majorVersion = parseInt(React.version.split(".")[0], 10);
31
31
  return majorVersion >= 19;
32
32
  };
33
33
  var rootCache = /* @__PURE__ */new WeakMap();
@@ -371,7 +371,6 @@ var reactify = function reactify(WC) {
371
371
  var _this$props = this.props,
372
372
  children = _this$props.children,
373
373
  className = _this$props.className,
374
- innerRef = _this$props.innerRef,
375
374
  rest = _objectWithoutProperties(_this$props, _excluded);
376
375
  return /*#__PURE__*/createElement(WC, _objectSpread(_objectSpread({
377
376
  "class": className
@@ -1 +1 @@
1
- {"version":3,"file":"reactify.js","sources":["../../../pro-components/chat/_util/reactify.tsx"],"sourcesContent":["import React, { Component, createRef, createElement, forwardRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport { createRoot } from 'react-dom/client';\n\n// 检测 React 版本\nconst isReact18Plus = () => typeof createRoot !== 'undefined';\nconst isReact19Plus = (): boolean => {\n const majorVersion = parseInt(React.version.split('.')[0]);\n return majorVersion >= 19;\n};\n\n// 增强版本的缓存管理\nconst rootCache = new WeakMap<\n HTMLElement,\n {\n root: ReturnType<typeof createRoot>;\n lastElement?: React.ReactElement;\n }\n>();\n\nconst createRenderer = (container: HTMLElement) => {\n if (isReact18Plus()) {\n let cached = rootCache.get(container);\n if (!cached) {\n cached = { root: createRoot(container) };\n rootCache.set(container, cached);\n }\n\n return {\n render: (element: React.ReactElement) => {\n // 可选:避免相同元素的重复渲染\n if (cached.lastElement !== element) {\n cached.root.render(element);\n cached.lastElement = element;\n }\n },\n unmount: () => {\n cached.root.unmount();\n rootCache.delete(container);\n },\n };\n }\n\n // React 17的实现\n return {\n render: (element: React.ReactElement) => {\n ReactDOM.render(element, container);\n },\n unmount: () => {\n ReactDOM.unmountComponentAtNode(container);\n },\n };\n};\n\n// 检查是否是React元素\nconst isReactElement = (obj: any): obj is React.ReactElement =>\n obj && typeof obj === 'object' && obj.$$typeof && obj.$$typeof.toString().includes('react');\n\n// 检查是否是有效的React节点\nconst isValidReactNode = (node: any): node is React.ReactNode =>\n node !== null &&\n node !== undefined &&\n (typeof node === 'string' ||\n typeof node === 'number' ||\n typeof node === 'boolean' ||\n isReactElement(node) ||\n Array.isArray(node));\n\ntype AnyProps = {\n [key: string]: any;\n};\n\nconst hyphenateRE = /\\B([A-Z])/g;\n\nexport function hyphenate(str: string): string {\n return str.replace(hyphenateRE, '-$1').toLowerCase();\n}\n\nconst styleObjectToString = (style: any) => {\n if (!style || typeof style !== 'object') return '';\n\n const unitlessKeys = new Set([\n 'animationIterationCount',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'fillOpacity',\n 'flex',\n 'flexGrow',\n 'flexShrink',\n 'fontWeight',\n 'lineClamp',\n 'lineHeight',\n 'opacity',\n 'order',\n 'orphans',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n ]);\n\n return Object.entries(style)\n .filter(([, value]) => value != null && value !== '') // 过滤无效值\n .map(([key, value]) => {\n // 转换驼峰式为连字符格式\n const cssKey = key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\n // 处理数值类型值\n let cssValue = value;\n if (typeof value === 'number' && value !== 0 && !unitlessKeys.has(key)) {\n cssValue = `${value}px`;\n }\n\n return `${cssKey}:${cssValue};`;\n })\n .join(' ');\n};\n\nconst reactify = <T extends AnyProps = AnyProps>(\n WC: string,\n): React.ForwardRefExoticComponent<Omit<T, 'ref'> & React.RefAttributes<HTMLElement | undefined>> => {\n class Reactify extends Component<AnyProps> {\n eventHandlers: [string, EventListener][];\n\n slotRenderers: Map<string, () => void>;\n\n ref: React.RefObject<HTMLElement>;\n\n constructor(props: AnyProps) {\n super(props);\n this.eventHandlers = [];\n this.slotRenderers = new Map();\n const { innerRef } = props;\n this.ref = innerRef || createRef();\n }\n\n setEvent(event: string, val: EventListener) {\n this.eventHandlers.push([event, val]);\n this.ref.current?.addEventListener(event, val);\n }\n\n // 防止重复处理的标记\n private processingSlots = new Set<string>();\n\n // 处理slot相关的prop\n handleSlotProp(prop: string, val: any) {\n const webComponent = this.ref.current as any;\n if (!webComponent) return;\n\n // 防止重复处理同一个slot\n if (this.processingSlots.has(prop)) {\n return;\n }\n\n // 检查是否需要更新(避免相同内容的重复渲染)\n const currentRenderer = this.slotRenderers.get(prop);\n if (currentRenderer && this.isSameReactElement(prop, val)) {\n return; // 相同内容,跳过更新\n }\n\n // 标记正在处理\n this.processingSlots.add(prop);\n\n // 立即缓存新元素,防止重复调用\n if (isValidReactNode(val)) {\n this.lastRenderedElements.set(prop, val);\n }\n\n // 清理旧的渲染器\n if (currentRenderer) {\n this.cleanupSlotRenderer(prop);\n }\n\n // 如果val是函数,为WebComponent提供一个函数,该函数返回渲染后的DOM\n if (typeof val === 'function') {\n const renderSlot = (params?: any) => {\n const reactNode = val(params);\n return this.renderReactNodeToSlot(reactNode, prop);\n };\n webComponent[prop] = renderSlot;\n // 函数类型处理完成后立即移除标记\n this.processingSlots.delete(prop);\n }\n // 如果val是ReactNode,直接渲染到slot\n else if (isValidReactNode(val)) {\n // 先设置属性,让组件知道这个prop有值\n webComponent[prop] = true;\n\n // 使用微任务延迟渲染,确保在当前渲染周期完成后执行\n Promise.resolve().then(() => {\n if (webComponent.update) {\n webComponent.update();\n }\n this.renderReactNodeToSlot(val, prop);\n // 渲染完成后移除处理标记\n this.processingSlots.delete(prop);\n });\n }\n }\n\n // 清理slot渲染器的统一方法\n private cleanupSlotRenderer(slotName: string) {\n const renderer = this.slotRenderers.get(slotName);\n if (!renderer) return;\n\n // 立即清理DOM容器\n this.clearSlotContainers(slotName);\n\n // 总是异步清理React渲染器,避免竞态条件\n Promise.resolve().then(() => {\n this.safeCleanupRenderer(renderer);\n });\n\n this.slotRenderers.delete(slotName);\n }\n\n // 安全清理渲染器\n private safeCleanupRenderer(cleanup: () => void) {\n try {\n cleanup();\n } catch (error) {\n console.warn('Error cleaning up React renderer:', error);\n }\n }\n\n // 立即清理指定slot的所有容器\n private clearSlotContainers(slotName: string) {\n const webComponent = this.ref.current;\n if (!webComponent) return;\n\n // 查找并移除所有匹配的slot容器\n const containers = webComponent.querySelectorAll(`[slot=\"${slotName}\"]`);\n containers.forEach((container: Element) => {\n if (container.parentNode) {\n container.parentNode.removeChild(container);\n }\n });\n }\n\n // 缓存最后渲染的React元素,用于比较\n private lastRenderedElements = new Map<string, any>();\n\n // 检查是否是相同的React元素\n private isSameReactElement(prop: string, val: any): boolean {\n const lastElement = this.lastRenderedElements.get(prop);\n\n if (!lastElement || !isValidReactNode(val)) {\n return false;\n }\n\n // 简单比较:如果是相同的React元素引用,则认为相同\n if (lastElement === val) {\n return true;\n }\n\n // 对于React元素,比较type、key和props\n if (React.isValidElement(lastElement) && React.isValidElement(val)) {\n const typeMatch = lastElement.type === val.type;\n const keyMatch = lastElement.key === val.key;\n const propsMatch = JSON.stringify(lastElement.props) === JSON.stringify(val.props);\n return typeMatch && keyMatch && propsMatch;\n }\n\n return false;\n }\n\n // 将React节点渲染到slot中\n renderReactNodeToSlot(reactNode: React.ReactNode, slotName: string) {\n const webComponent = this.ref.current;\n if (!webComponent) return;\n\n // 检查是否已经有相同的slot容器存在,避免重复创建\n const existingContainers = webComponent.querySelectorAll(`[slot=\"${slotName}\"]`);\n if (existingContainers.length > 0) {\n return;\n }\n\n // 直接创建容器并添加到Web Component中\n const container = document.createElement('div');\n container.style.display = 'contents'; // 不影响布局\n container.setAttribute('slot', slotName); // 设置slot属性,Web Components会自动处理\n\n // 将容器添加到Web Component中\n webComponent.appendChild(container);\n\n // 根据不同类型的reactNode创建不同的清理函数\n let cleanupFn: (() => void) | null = null;\n\n if (isValidReactNode(reactNode)) {\n if (React.isValidElement(reactNode)) {\n try {\n const renderer = createRenderer(container);\n renderer.render(reactNode);\n cleanupFn = () => {\n try {\n renderer.unmount();\n } catch (error) {\n console.warn('Error unmounting React renderer:', error);\n }\n };\n } catch (error) {\n console.warn('Error creating React renderer:', error);\n }\n } else if (typeof reactNode === 'string' || typeof reactNode === 'number') {\n container.textContent = String(reactNode);\n cleanupFn = () => {\n container.textContent = '';\n };\n } else if (Array.isArray(reactNode)) {\n try {\n const renderer = createRenderer(container);\n const wrapper = React.createElement(\n 'div',\n { style: { display: 'contents' } },\n ...reactNode.filter(isValidReactNode),\n );\n renderer.render(wrapper);\n cleanupFn = () => {\n try {\n renderer.unmount();\n } catch (error) {\n console.warn('Error unmounting React renderer:', error);\n }\n };\n } catch (error) {\n console.warn('Error creating React renderer for array:', error);\n }\n }\n }\n\n // 保存cleanup函数\n this.slotRenderers.set(slotName, () => {\n // 清理缓存\n this.lastRenderedElements.delete(slotName);\n // 异步unmount避免竞态条件\n Promise.resolve().then(() => {\n if (cleanupFn) {\n cleanupFn();\n }\n if (container.parentNode) {\n container.parentNode.removeChild(container);\n }\n });\n });\n }\n\n update() {\n this.clearEventHandlers();\n if (!this.ref.current) return;\n\n Object.entries(this.props).forEach(([prop, val]) => {\n if (['innerRef', 'children'].includes(prop)) return;\n\n // event handler\n if (typeof val === 'function' && prop.match(/^on[A-Za-z]/)) {\n const eventName = prop.slice(2);\n const omiEventName = eventName[0].toLowerCase() + eventName.slice(1);\n this.setEvent(omiEventName, val as EventListener);\n return;\n }\n\n // render functions or slot props\n if (typeof val === 'function' && prop.match(/^render[A-Za-z]/)) {\n this.handleSlotProp(prop, val);\n return;\n }\n\n // 检查是否是slot prop(通过组件的slotProps静态属性或Slot后缀)\n if (isReactElement(val) && !prop.match(/^on[A-Za-z]/) && !prop.match(/^render[A-Za-z]/)) {\n const componentClass = this.ref.current?.constructor as any;\n const declaredSlots = componentClass?.slotProps || [];\n\n if (declaredSlots.includes(prop) || prop.endsWith('Slot')) {\n this.handleSlotProp(prop, val);\n return;\n }\n }\n\n // Complex object处理\n if (typeof val === 'object' && val !== null) {\n // style特殊处理\n if (prop === 'style') {\n this.ref.current?.setAttribute('style', styleObjectToString(val));\n return;\n }\n // 其他复杂对象直接设置为属性\n (this.ref.current as any)[prop] = val;\n return;\n }\n\n // 函数类型但不是事件处理器也不是render函数的,直接设置为属性\n if (typeof val === 'function') {\n (this.ref.current as any)[prop] = val;\n return;\n }\n\n // camel case to kebab-case for attributes\n if (prop.match(hyphenateRE)) {\n this.ref.current?.setAttribute(hyphenate(prop), val);\n this.ref.current?.removeAttribute(prop);\n return;\n }\n if (!isReact19Plus()) {\n (this.ref.current as any)[prop] = val;\n }\n });\n }\n\n componentDidUpdate() {\n this.update();\n }\n\n componentDidMount() {\n this.update();\n }\n\n componentWillUnmount() {\n this.clearEventHandlers();\n this.clearSlotRenderers();\n }\n\n clearEventHandlers() {\n this.eventHandlers.forEach(([event, handler]) => {\n this.ref.current?.removeEventListener(event, handler);\n });\n this.eventHandlers = [];\n }\n\n clearSlotRenderers() {\n this.slotRenderers.forEach((cleanup) => {\n this.safeCleanupRenderer(cleanup);\n });\n this.slotRenderers.clear();\n this.processingSlots.clear();\n }\n\n render() {\n const { children, className, innerRef, ...rest } = this.props;\n\n return createElement(WC, { class: className, ...rest, ref: this.ref }, children);\n }\n }\n\n return forwardRef<HTMLElement, AnyProps>((props, ref) =>\n createElement(Reactify, { ...props, innerRef: ref }),\n ) as React.ForwardRefExoticComponent<Omit<T, 'ref'> & React.RefAttributes<HTMLElement | undefined>>;\n};\n\nexport default reactify;\n"],"names":["isReact18Plus","createRoot","isReact19Plus","majorVersion","parseInt","React","version","split","rootCache","WeakMap","createRenderer","container","cached","get","root","set","render","element","lastElement","unmount","ReactDOM","unmountComponentAtNode","isReactElement","obj","_typeof","$$typeof","toString","includes","isValidReactNode","node","Array","isArray","hyphenateRE","hyphenate","str","replace","toLowerCase","styleObjectToString","style","unitlessKeys","Set","Object","entries","filter","_ref","_ref2","_slicedToArray","value","map","_ref3","_ref4","key","cssKey","m","concat","cssValue","has","join","reactify","WC","Reactify","props","_this","_classCallCheck","_callSuper","_defineProperty","Map","eventHandlers","slotRenderers","innerRef","ref","createRef","_inherits","_Component","_createClass","setEvent","event","val","_this$ref$current","push","current","addEventListener","handleSlotProp","prop","_this2","webComponent","processingSlots","currentRenderer","isSameReactElement","add","lastRenderedElements","cleanupSlotRenderer","renderSlot","params","reactNode","renderReactNodeToSlot","Promise","resolve","then","update","slotName","_this3","renderer","clearSlotContainers","safeCleanupRenderer","cleanup","error","console","warn","containers","querySelectorAll","forEach","parentNode","removeChild","isValidElement","typeMatch","type","keyMatch","propsMatch","JSON","stringify","_this4","existingContainers","length","document","createElement","display","setAttribute","appendChild","cleanupFn","textContent","String","wrapper","apply","_toConsumableArray","_this5","clearEventHandlers","_ref5","_ref6","match","eventName","slice","omiEventName","_this5$ref$current","componentClass","constructor","declaredSlots","slotProps","endsWith","_this5$ref$current2","_this5$ref$current3","_this5$ref$current4","removeAttribute","componentDidUpdate","componentDidMount","componentWillUnmount","clearSlotRenderers","_this6","_ref7","_this6$ref$current","_ref8","handler","removeEventListener","_this7","clear","_this$props","children","className","rest","_objectWithoutProperties","_excluded","_objectSpread","Component","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"reactify.js","sources":["../../../pro-components/chat/_util/reactify.tsx"],"sourcesContent":["import React, { Component, createRef, createElement, forwardRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport { createRoot } from 'react-dom/client';\n\n// 检测 React 版本\nconst isReact18Plus = () => typeof createRoot !== 'undefined';\nconst isReact19Plus = (): boolean => {\n const majorVersion = parseInt(React.version.split('.')[0], 10);\n return majorVersion >= 19;\n};\n\n// 增强版本的缓存管理\nconst rootCache = new WeakMap<\n HTMLElement,\n {\n root: ReturnType<typeof createRoot>;\n lastElement?: React.ReactElement;\n }\n>();\n\nconst createRenderer = (container: HTMLElement) => {\n if (isReact18Plus()) {\n let cached = rootCache.get(container);\n if (!cached) {\n cached = { root: createRoot(container) };\n rootCache.set(container, cached);\n }\n\n return {\n render: (element: React.ReactElement) => {\n // 可选:避免相同元素的重复渲染\n if (cached.lastElement !== element) {\n cached.root.render(element);\n cached.lastElement = element;\n }\n },\n unmount: () => {\n cached.root.unmount();\n rootCache.delete(container);\n },\n };\n }\n\n // React 17的实现\n return {\n render: (element: React.ReactElement) => {\n ReactDOM.render(element, container);\n },\n unmount: () => {\n ReactDOM.unmountComponentAtNode(container);\n },\n };\n};\n\n// 检查是否是React元素\nconst isReactElement = (obj: any): obj is React.ReactElement =>\n obj && typeof obj === 'object' && obj.$$typeof && obj.$$typeof.toString().includes('react');\n\n// 检查是否是有效的React节点\nconst isValidReactNode = (node: any): node is React.ReactNode =>\n node !== null &&\n node !== undefined &&\n (typeof node === 'string' ||\n typeof node === 'number' ||\n typeof node === 'boolean' ||\n isReactElement(node) ||\n Array.isArray(node));\n\ntype AnyProps = {\n [key: string]: any;\n};\n\nconst hyphenateRE = /\\B([A-Z])/g;\n\nexport function hyphenate(str: string): string {\n return str.replace(hyphenateRE, '-$1').toLowerCase();\n}\n\nconst styleObjectToString = (style: any) => {\n if (!style || typeof style !== 'object') return '';\n\n const unitlessKeys = new Set([\n 'animationIterationCount',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'fillOpacity',\n 'flex',\n 'flexGrow',\n 'flexShrink',\n 'fontWeight',\n 'lineClamp',\n 'lineHeight',\n 'opacity',\n 'order',\n 'orphans',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n ]);\n\n return Object.entries(style)\n .filter(([, value]) => value != null && value !== '') // 过滤无效值\n .map(([key, value]) => {\n // 转换驼峰式为连字符格式\n const cssKey = key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\n // 处理数值类型值\n let cssValue = value;\n if (typeof value === 'number' && value !== 0 && !unitlessKeys.has(key)) {\n cssValue = `${value}px`;\n }\n\n return `${cssKey}:${cssValue};`;\n })\n .join(' ');\n};\n\nconst reactify = <T extends AnyProps = AnyProps>(\n WC: string,\n): React.ForwardRefExoticComponent<Omit<T, 'ref'> & React.RefAttributes<HTMLElement | undefined>> => {\n class Reactify extends Component<AnyProps> {\n eventHandlers: [string, EventListener][];\n\n slotRenderers: Map<string, () => void>;\n\n ref: React.RefObject<HTMLElement>;\n\n constructor(props: AnyProps) {\n super(props);\n this.eventHandlers = [];\n this.slotRenderers = new Map();\n const { innerRef } = props;\n this.ref = innerRef || createRef();\n }\n\n setEvent(event: string, val: EventListener) {\n this.eventHandlers.push([event, val]);\n this.ref.current?.addEventListener(event, val);\n }\n\n // 防止重复处理的标记\n private processingSlots = new Set<string>();\n\n // 处理slot相关的prop\n handleSlotProp(prop: string, val: any) {\n const webComponent = this.ref.current as any;\n if (!webComponent) return;\n\n // 防止重复处理同一个slot\n if (this.processingSlots.has(prop)) {\n return;\n }\n\n // 检查是否需要更新(避免相同内容的重复渲染)\n const currentRenderer = this.slotRenderers.get(prop);\n if (currentRenderer && this.isSameReactElement(prop, val)) {\n return; // 相同内容,跳过更新\n }\n\n // 标记正在处理\n this.processingSlots.add(prop);\n\n // 立即缓存新元素,防止重复调用\n if (isValidReactNode(val)) {\n this.lastRenderedElements.set(prop, val);\n }\n\n // 清理旧的渲染器\n if (currentRenderer) {\n this.cleanupSlotRenderer(prop);\n }\n\n // 如果val是函数,为WebComponent提供一个函数,该函数返回渲染后的DOM\n if (typeof val === 'function') {\n const renderSlot = (params?: any) => {\n const reactNode = val(params);\n return this.renderReactNodeToSlot(reactNode, prop);\n };\n webComponent[prop] = renderSlot;\n // 函数类型处理完成后立即移除标记\n this.processingSlots.delete(prop);\n }\n // 如果val是ReactNode,直接渲染到slot\n else if (isValidReactNode(val)) {\n // 先设置属性,让组件知道这个prop有值\n webComponent[prop] = true;\n\n // 使用微任务延迟渲染,确保在当前渲染周期完成后执行\n Promise.resolve().then(() => {\n if (webComponent.update) {\n webComponent.update();\n }\n this.renderReactNodeToSlot(val, prop);\n // 渲染完成后移除处理标记\n this.processingSlots.delete(prop);\n });\n }\n }\n\n // 清理slot渲染器的统一方法\n private cleanupSlotRenderer(slotName: string) {\n const renderer = this.slotRenderers.get(slotName);\n if (!renderer) return;\n\n // 立即清理DOM容器\n this.clearSlotContainers(slotName);\n\n // 总是异步清理React渲染器,避免竞态条件\n Promise.resolve().then(() => {\n this.safeCleanupRenderer(renderer);\n });\n\n this.slotRenderers.delete(slotName);\n }\n\n // 安全清理渲染器\n // eslint-disable-next-line class-methods-use-this\n private safeCleanupRenderer(cleanup: () => void) {\n try {\n cleanup();\n } catch (error) {\n console.warn('Error cleaning up React renderer:', error);\n }\n }\n\n // 立即清理指定slot的所有容器\n private clearSlotContainers(slotName: string) {\n const webComponent = this.ref.current;\n if (!webComponent) return;\n\n // 查找并移除所有匹配的slot容器\n const containers = webComponent.querySelectorAll(`[slot=\"${slotName}\"]`);\n containers.forEach((container: Element) => {\n if (container.parentNode) {\n container.parentNode.removeChild(container);\n }\n });\n }\n\n // 缓存最后渲染的React元素,用于比较\n private lastRenderedElements = new Map<string, any>();\n\n // 检查是否是相同的React元素\n private isSameReactElement(prop: string, val: any): boolean {\n const lastElement = this.lastRenderedElements.get(prop);\n\n if (!lastElement || !isValidReactNode(val)) {\n return false;\n }\n\n // 简单比较:如果是相同的React元素引用,则认为相同\n if (lastElement === val) {\n return true;\n }\n\n // 对于React元素,比较type、key和props\n if (React.isValidElement(lastElement) && React.isValidElement(val)) {\n const typeMatch = lastElement.type === val.type;\n const keyMatch = lastElement.key === val.key;\n const propsMatch = JSON.stringify(lastElement.props) === JSON.stringify(val.props);\n return typeMatch && keyMatch && propsMatch;\n }\n\n return false;\n }\n\n // 将React节点渲染到slot中\n renderReactNodeToSlot(reactNode: React.ReactNode, slotName: string) {\n const webComponent = this.ref.current;\n if (!webComponent) return;\n\n // 检查是否已经有相同的slot容器存在,避免重复创建\n const existingContainers = webComponent.querySelectorAll(`[slot=\"${slotName}\"]`);\n if (existingContainers.length > 0) {\n return;\n }\n\n // 直接创建容器并添加到Web Component中\n const container = document.createElement('div');\n container.style.display = 'contents'; // 不影响布局\n container.setAttribute('slot', slotName); // 设置slot属性,Web Components会自动处理\n\n // 将容器添加到Web Component中\n webComponent.appendChild(container);\n\n // 根据不同类型的reactNode创建不同的清理函数\n let cleanupFn: (() => void) | null = null;\n\n if (isValidReactNode(reactNode)) {\n if (React.isValidElement(reactNode)) {\n try {\n const renderer = createRenderer(container);\n renderer.render(reactNode);\n cleanupFn = () => {\n try {\n renderer.unmount();\n } catch (error) {\n console.warn('Error unmounting React renderer:', error);\n }\n };\n } catch (error) {\n console.warn('Error creating React renderer:', error);\n }\n } else if (typeof reactNode === 'string' || typeof reactNode === 'number') {\n container.textContent = String(reactNode);\n cleanupFn = () => {\n container.textContent = '';\n };\n } else if (Array.isArray(reactNode)) {\n try {\n const renderer = createRenderer(container);\n const wrapper = React.createElement(\n 'div',\n { style: { display: 'contents' } },\n ...reactNode.filter(isValidReactNode),\n );\n renderer.render(wrapper);\n cleanupFn = () => {\n try {\n renderer.unmount();\n } catch (error) {\n console.warn('Error unmounting React renderer:', error);\n }\n };\n } catch (error) {\n console.warn('Error creating React renderer for array:', error);\n }\n }\n }\n\n // 保存cleanup函数\n this.slotRenderers.set(slotName, () => {\n // 清理缓存\n this.lastRenderedElements.delete(slotName);\n // 异步unmount避免竞态条件\n Promise.resolve().then(() => {\n if (cleanupFn) {\n cleanupFn();\n }\n if (container.parentNode) {\n container.parentNode.removeChild(container);\n }\n });\n });\n }\n\n update() {\n this.clearEventHandlers();\n if (!this.ref.current) return;\n\n Object.entries(this.props).forEach(([prop, val]) => {\n if (['innerRef', 'children'].includes(prop)) return;\n\n // event handler\n if (typeof val === 'function' && prop.match(/^on[A-Za-z]/)) {\n const eventName = prop.slice(2);\n const omiEventName = eventName[0].toLowerCase() + eventName.slice(1);\n this.setEvent(omiEventName, val as EventListener);\n return;\n }\n\n // render functions or slot props\n if (typeof val === 'function' && prop.match(/^render[A-Za-z]/)) {\n this.handleSlotProp(prop, val);\n return;\n }\n\n // 检查是否是slot prop(通过组件的slotProps静态属性或Slot后缀)\n if (isReactElement(val) && !prop.match(/^on[A-Za-z]/) && !prop.match(/^render[A-Za-z]/)) {\n const componentClass = this.ref.current?.constructor as any;\n const declaredSlots = componentClass?.slotProps || [];\n\n if (declaredSlots.includes(prop) || prop.endsWith('Slot')) {\n this.handleSlotProp(prop, val);\n return;\n }\n }\n\n // Complex object处理\n if (typeof val === 'object' && val !== null) {\n // style特殊处理\n if (prop === 'style') {\n this.ref.current?.setAttribute('style', styleObjectToString(val));\n return;\n }\n // 其他复杂对象直接设置为属性\n (this.ref.current as any)[prop] = val;\n return;\n }\n\n // 函数类型但不是事件处理器也不是render函数的,直接设置为属性\n if (typeof val === 'function') {\n (this.ref.current as any)[prop] = val;\n return;\n }\n\n // camel case to kebab-case for attributes\n if (prop.match(hyphenateRE)) {\n this.ref.current?.setAttribute(hyphenate(prop), val);\n this.ref.current?.removeAttribute(prop);\n return;\n }\n if (!isReact19Plus()) {\n (this.ref.current as any)[prop] = val;\n }\n });\n }\n\n componentDidUpdate() {\n this.update();\n }\n\n componentDidMount() {\n this.update();\n }\n\n componentWillUnmount() {\n this.clearEventHandlers();\n this.clearSlotRenderers();\n }\n\n clearEventHandlers() {\n this.eventHandlers.forEach(([event, handler]) => {\n this.ref.current?.removeEventListener(event, handler);\n });\n this.eventHandlers = [];\n }\n\n clearSlotRenderers() {\n this.slotRenderers.forEach((cleanup) => {\n this.safeCleanupRenderer(cleanup);\n });\n this.slotRenderers.clear();\n this.processingSlots.clear();\n }\n\n render() {\n const { children, className, ...rest } = this.props;\n\n return createElement(WC, { class: className, ...rest, ref: this.ref }, children);\n }\n }\n\n return forwardRef<HTMLElement, AnyProps>((props, ref) =>\n createElement(Reactify, { ...props, innerRef: ref }),\n ) as React.ForwardRefExoticComponent<Omit<T, 'ref'> & React.RefAttributes<HTMLElement | undefined>>;\n};\n\nexport default reactify;\n"],"names":["isReact18Plus","createRoot","isReact19Plus","majorVersion","parseInt","React","version","split","rootCache","WeakMap","createRenderer","container","cached","get","root","set","render","element","lastElement","unmount","ReactDOM","unmountComponentAtNode","isReactElement","obj","_typeof","$$typeof","toString","includes","isValidReactNode","node","Array","isArray","hyphenateRE","hyphenate","str","replace","toLowerCase","styleObjectToString","style","unitlessKeys","Set","Object","entries","filter","_ref","_ref2","_slicedToArray","value","map","_ref3","_ref4","key","cssKey","m","concat","cssValue","has","join","reactify","WC","Reactify","props","_this","_classCallCheck","_callSuper","_defineProperty","Map","eventHandlers","slotRenderers","innerRef","ref","createRef","_inherits","_Component","_createClass","setEvent","event","val","_this$ref$current","push","current","addEventListener","handleSlotProp","prop","_this2","webComponent","processingSlots","currentRenderer","isSameReactElement","add","lastRenderedElements","cleanupSlotRenderer","renderSlot","params","reactNode","renderReactNodeToSlot","Promise","resolve","then","update","slotName","_this3","renderer","clearSlotContainers","safeCleanupRenderer","cleanup","error","console","warn","containers","querySelectorAll","forEach","parentNode","removeChild","isValidElement","typeMatch","type","keyMatch","propsMatch","JSON","stringify","_this4","existingContainers","length","document","createElement","display","setAttribute","appendChild","cleanupFn","textContent","String","wrapper","apply","_toConsumableArray","_this5","clearEventHandlers","_ref5","_ref6","match","eventName","slice","omiEventName","_this5$ref$current","componentClass","constructor","declaredSlots","slotProps","endsWith","_this5$ref$current2","_this5$ref$current3","_this5$ref$current4","removeAttribute","componentDidUpdate","componentDidMount","componentWillUnmount","clearSlotRenderers","_this6","_ref7","_this6$ref$current","_ref8","handler","removeEventListener","_this7","clear","_this$props","children","className","rest","_objectWithoutProperties","_excluded","_objectSpread","Component","forwardRef"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * tdesign v1.0.0
3
- * (c) 2025 tdesign
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"useDynamicStyle.js","sources":["../../../pro-components/chat/_util/useDynamicStyle.ts"],"sourcesContent":["import { useRef, useEffect, MutableRefObject } from 'react';\n\ntype StyleVariables = Record<string, string>;\n\n// 用于动态管理组件作用域样式\nexport const useDynamicStyle = (elementRef: MutableRefObject<HTMLElement | null>, cssVariables: StyleVariables) => {\n const styleId = useRef(`dynamic-styles-${Math.random().toString(36).slice(2, 11)}`);\n\n // 生成带作用域的CSS样式\n const generateScopedStyles = (vars: StyleVariables) => {\n const variables = Object.entries(vars)\n .map(([key, value]) => `${key}: ${value};`)\n .join('\\n');\n\n return `\n .${styleId.current} {\n ${variables}\n }\n `;\n };\n\n useEffect(() => {\n if (!elementRef?.current) return;\n const styleElement = document.createElement('style');\n styleElement.innerHTML = generateScopedStyles(cssVariables);\n document.head.appendChild(styleElement);\n\n // 绑定样式类到目标元素\n const currentElement = elementRef.current;\n if (currentElement) {\n currentElement.classList.add(styleId.current);\n }\n\n return () => {\n document.head.removeChild(styleElement);\n if (currentElement) {\n currentElement.classList.remove(styleId.current);\n }\n };\n }, [cssVariables]);\n};\n"],"names":["useDynamicStyle","elementRef","cssVariables","styleId","useRef","concat","Math","random","toString","slice","generateScopedStyles","vars","variables","Object","entries","map","_ref","_ref2","_slicedToArray","key","value","join","current","useEffect","styleElement","document","createElement","innerHTML","head","appendChild","currentElement","classList","add","removeChild","remove"],"mappings":";;;;;;;;;AAKa,IAAAA,eAAA,GAAkB,SAAlBA,eAAAA,CAAmBC,UAAA,EAAkDC,YAAiC,EAAA;EACjH,IAAMC,OAAU,GAAAC,MAAA,CAAAC,iBAAAA,CAAAA,MAAA,CAAyBC,IAAA,CAAKC,MAAO,EAAA,CAAEC,QAAS,CAAA,EAAE,CAAE,CAAAC,KAAA,CAAM,CAAG,EAAA,EAAE,CAAG,CAAA,CAAA,CAAA;AAG5E,EAAA,IAAAC,oBAAA,GAAuB,SAAvBA,oBAAAA,CAAwBC,IAAyB,EAAA;AACrD,IAAA,IAAMC,YAAYC,MAAO,CAAAC,OAAA,CAAQH,IAAI,CAAA,CAClCI,IAAI,UAAAC,IAAA,EAAA;AAAA,MAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,IAAA,EAAA,CAAA,CAAA;AAAEG,QAAAA,GAAK,GAAAF,KAAA,CAAA,CAAA,CAAA;AAAAG,QAAAA,KAAK,GAAAH,KAAA,CAAA,CAAA,CAAA,CAAA;AAAA,MAAA,OAAA,EAAA,CAAAZ,MAAA,CAASc,GAAA,EAAAd,IAAAA,CAAAA,CAAAA,MAAA,CAAQe,KAAQ,EAAA,GAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CACzCC,KAAK,IAAI,CAAA,CAAA;IAEL,OAAAhB,WAAAA,CAAAA,MAAA,CACFF,OAAQ,CAAAmB,OAAA,EAAAjB,cAAAA,CAAAA,CAAAA,MAAA,CACPO,SAAA,EAAA,iBAAA,CAAA,CAAA;GAGR,CAAA;AAEAW,EAAAA,SAAA,CAAU,YAAM;IACd,IAAI,EAACtB,UAAY,KAAZA,IAAAA,IAAAA,UAAY,eAAZA,UAAY,CAAAqB,OAAA,CAAS,EAAA,OAAA;AACpB,IAAA,IAAAE,YAAA,GAAeC,QAAS,CAAAC,aAAA,CAAc,OAAO,CAAA,CAAA;AACtCF,IAAAA,YAAA,CAAAG,SAAA,GAAYjB,qBAAqBR,YAAY,CAAA,CAAA;AACjDuB,IAAAA,QAAA,CAAAG,IAAA,CAAKC,YAAYL,YAAY,CAAA,CAAA;AAGtC,IAAA,IAAMM,iBAAiB7B,UAAW,CAAAqB,OAAA,CAAA;AAClC,IAAA,IAAIQ,cAAgB,EAAA;MACHA,cAAA,CAAAC,SAAA,CAAUC,GAAI,CAAA7B,OAAA,CAAQmB,OAAO,CAAA,CAAA;AAC9C,KAAA;AAEA,IAAA,OAAO,YAAM;AACFG,MAAAA,QAAA,CAAAG,IAAA,CAAKK,YAAYT,YAAY,CAAA,CAAA;AACtC,MAAA,IAAIM,cAAgB,EAAA;QACHA,cAAA,CAAAC,SAAA,CAAUG,MAAO,CAAA/B,OAAA,CAAQmB,OAAO,CAAA,CAAA;AACjD,OAAA;KACF,CAAA;AACF,GAAA,EAAG,CAACpB,YAAY,CAAC,CAAA,CAAA;AACnB;;;;"}
1
+ {"version":3,"file":"useDynamicStyle.js","sources":["../../../pro-components/chat/_util/useDynamicStyle.ts"],"sourcesContent":["import { useRef, useEffect, MutableRefObject } from 'react';\n\ntype StyleVariables = Record<string, string>;\n\n// 用于动态管理组件作用域样式\nexport const useDynamicStyle = (elementRef: MutableRefObject<HTMLElement | null>, cssVariables: StyleVariables) => {\n const styleId = useRef(`dynamic-styles-${Math.random().toString(36).slice(2, 11)}`);\n\n // 生成带作用域的CSS样式\n const generateScopedStyles = (vars: StyleVariables) => {\n const variables = Object.entries(vars)\n .map(([key, value]) => `${key}: ${value};`)\n .join('\\n');\n\n return `\n .${styleId.current} {\n ${variables}\n }\n `;\n };\n\n useEffect(() => {\n if (!elementRef?.current) return;\n const styleElement = document.createElement('style');\n styleElement.innerHTML = generateScopedStyles(cssVariables);\n document.head.appendChild(styleElement);\n\n // 绑定样式类到目标元素\n const currentElement = elementRef.current;\n if (currentElement) {\n currentElement.classList.add(styleId.current);\n }\n\n return () => {\n document.head.removeChild(styleElement);\n if (currentElement) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n currentElement.classList.remove(styleId.current);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [cssVariables]);\n};\n"],"names":["useDynamicStyle","elementRef","cssVariables","styleId","useRef","concat","Math","random","toString","slice","generateScopedStyles","vars","variables","Object","entries","map","_ref","_ref2","_slicedToArray","key","value","join","current","useEffect","styleElement","document","createElement","innerHTML","head","appendChild","currentElement","classList","add","removeChild","remove"],"mappings":";;;;;;;;;AAKa,IAAAA,eAAA,GAAkB,SAAlBA,eAAAA,CAAmBC,UAAA,EAAkDC,YAAiC,EAAA;EACjH,IAAMC,OAAU,GAAAC,MAAA,CAAAC,iBAAAA,CAAAA,MAAA,CAAyBC,IAAA,CAAKC,MAAO,EAAA,CAAEC,QAAS,CAAA,EAAE,CAAE,CAAAC,KAAA,CAAM,CAAG,EAAA,EAAE,CAAG,CAAA,CAAA,CAAA;AAG5E,EAAA,IAAAC,oBAAA,GAAuB,SAAvBA,oBAAAA,CAAwBC,IAAyB,EAAA;AACrD,IAAA,IAAMC,YAAYC,MAAO,CAAAC,OAAA,CAAQH,IAAI,CAAA,CAClCI,IAAI,UAAAC,IAAA,EAAA;AAAA,MAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,IAAA,EAAA,CAAA,CAAA;AAAEG,QAAAA,GAAK,GAAAF,KAAA,CAAA,CAAA,CAAA;AAAAG,QAAAA,KAAK,GAAAH,KAAA,CAAA,CAAA,CAAA,CAAA;AAAA,MAAA,OAAA,EAAA,CAAAZ,MAAA,CAASc,GAAA,EAAAd,IAAAA,CAAAA,CAAAA,MAAA,CAAQe,KAAQ,EAAA,GAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CACzCC,KAAK,IAAI,CAAA,CAAA;IAEL,OAAAhB,WAAAA,CAAAA,MAAA,CACFF,OAAQ,CAAAmB,OAAA,EAAAjB,cAAAA,CAAAA,CAAAA,MAAA,CACPO,SAAA,EAAA,iBAAA,CAAA,CAAA;GAGR,CAAA;AAEAW,EAAAA,SAAA,CAAU,YAAM;IACd,IAAI,EAACtB,UAAY,KAAZA,IAAAA,IAAAA,UAAY,eAAZA,UAAY,CAAAqB,OAAA,CAAS,EAAA,OAAA;AACpB,IAAA,IAAAE,YAAA,GAAeC,QAAS,CAAAC,aAAA,CAAc,OAAO,CAAA,CAAA;AACtCF,IAAAA,YAAA,CAAAG,SAAA,GAAYjB,qBAAqBR,YAAY,CAAA,CAAA;AACjDuB,IAAAA,QAAA,CAAAG,IAAA,CAAKC,YAAYL,YAAY,CAAA,CAAA;AAGtC,IAAA,IAAMM,iBAAiB7B,UAAW,CAAAqB,OAAA,CAAA;AAClC,IAAA,IAAIQ,cAAgB,EAAA;MACHA,cAAA,CAAAC,SAAA,CAAUC,GAAI,CAAA7B,OAAA,CAAQmB,OAAO,CAAA,CAAA;AAC9C,KAAA;AAEA,IAAA,OAAO,YAAM;AACFG,MAAAA,QAAA,CAAAG,IAAA,CAAKK,YAAYT,YAAY,CAAA,CAAA;AACtC,MAAA,IAAIM,cAAgB,EAAA;QAEHA,cAAA,CAAAC,SAAA,CAAUG,MAAO,CAAA/B,OAAA,CAAQmB,OAAO,CAAA,CAAA;AACjD,OAAA;KACF,CAAA;AAEF,GAAA,EAAG,CAACpB,YAAY,CAAC,CAAA,CAAA;AACnB;;;;"}
@@ -0,0 +1,5 @@
1
+ import { TdAttachmentsProps } from 'tdesign-web-components';
2
+ import 'tdesign-web-components/lib/attachments';
3
+ export declare const Attachments: React.ForwardRefExoticComponent<Omit<TdAttachmentsProps, 'ref'> & React.RefAttributes<HTMLElement | undefined>>;
4
+ export default Attachments;
5
+ export type { TdAttachmentsProps, TdAttachmentItem } from 'tdesign-web-components';
@@ -0,0 +1,26 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import 'tdesign-web-components/lib/attachments';
8
+ import reactify from '../_util/reactify.js';
9
+ import '@babel/runtime/helpers/objectWithoutProperties';
10
+ import '@babel/runtime/helpers/toConsumableArray';
11
+ import '@babel/runtime/helpers/classCallCheck';
12
+ import '@babel/runtime/helpers/createClass';
13
+ import '@babel/runtime/helpers/possibleConstructorReturn';
14
+ import '@babel/runtime/helpers/getPrototypeOf';
15
+ import '@babel/runtime/helpers/inherits';
16
+ import '@babel/runtime/helpers/defineProperty';
17
+ import '@babel/runtime/helpers/slicedToArray';
18
+ import '@babel/runtime/helpers/typeof';
19
+ import 'react';
20
+ import 'react-dom';
21
+ import 'react-dom/client';
22
+
23
+ var Attachments = reactify("t-attachments");
24
+
25
+ export { Attachments, Attachments as default };
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../pro-components/chat/attachments/index.ts"],"sourcesContent":["import { TdAttachmentsProps } from 'tdesign-web-components';\nimport 'tdesign-web-components/lib/attachments';\nimport reactify from '../_util/reactify';\n\nexport const Attachments: React.ForwardRefExoticComponent<\n Omit<TdAttachmentsProps, 'ref'> & React.RefAttributes<HTMLElement | undefined>\n> = reactify<TdAttachmentsProps>('t-attachments');\n\nexport default Attachments;\n\nexport type { TdAttachmentsProps, TdAttachmentItem } from 'tdesign-web-components';\n"],"names":["Attachments","reactify"],"mappings":";;;;;;;;;;;;;;;;;;;;;;IAIaA,WAAA,GAETC,SAA6B,eAAe;;;;"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * tdesign v1.0.0
3
- * (c) 2025 tdesign
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.0
2
+ * tdesign v1.0.0-beta.4
3
3
  * (c) 2025 tdesign
4
4
  * @license MIT
5
5
  */
@@ -17,8 +17,6 @@ import '@babel/runtime/helpers/defineProperty';
17
17
  import '@babel/runtime/helpers/slicedToArray';
18
18
  import '@babel/runtime/helpers/typeof';
19
19
  import 'react';
20
- import 'react-dom';
21
- import 'react-dom/client';
22
20
 
23
21
  var Attachments = reactify("t-attachments");
24
22
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../pro-components/chat/chat-attachments/index.ts"],"sourcesContent":["import { TdAttachmentsProps } from 'tdesign-web-components';\nimport 'tdesign-web-components/lib/attachments';\nimport reactify from '../_util/reactify';\n\nexport const Attachments: React.ForwardRefExoticComponent<\n Omit<TdAttachmentsProps, 'ref'> & React.RefAttributes<HTMLElement | undefined>\n> = reactify<TdAttachmentsProps>('t-attachments');\n\nexport default Attachments;\n\nexport type { TdAttachmentsProps, TdAttachmentItem } from 'tdesign-web-components';\n"],"names":["Attachments","reactify"],"mappings":";;;;;;;;;;;;;;;;;;;;;;IAIaA,WAAA,GAETC,SAA6B,eAAe;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../pro-components/chat/chat-attachments/index.ts"],"sourcesContent":["import { TdAttachmentsProps } from 'tdesign-web-components';\nimport 'tdesign-web-components/lib/attachments';\nimport reactify from '../_util/reactify';\n\nexport const Attachments: React.ForwardRefExoticComponent<\n Omit<TdAttachmentsProps, 'ref'> & React.RefAttributes<HTMLElement | undefined>\n> = reactify<TdAttachmentsProps>('t-attachments');\n\nexport default Attachments;\n\nexport type { TdAttachmentsProps, TdAttachmentItem } from 'tdesign-web-components';\n"],"names":["Attachments","reactify"],"mappings":";;;;;;;;;;;;;;;;;;;;IAIaA,WAAA,GAETC,SAA6B,eAAe;;;;"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * tdesign v1.0.0
3
- * (c) 2025 tdesign
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
- * tdesign v1.0.0
3
- * (c) 2025 tdesign
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
- * tdesign v1.0.0
3
- * (c) 2025 tdesign
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
- * tdesign v1.0.0
3
- * (c) 2025 tdesign
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
@@ -61,8 +61,8 @@ var ToolCallRenderer = /*#__PURE__*/React.memo(function (_ref) {
61
61
  if (isNonInteractiveConfig(config)) {
62
62
  var executeHandler = /*#__PURE__*/function () {
63
63
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
64
- var backendResult, result, _t;
65
- return _regeneratorRuntime.wrap(function (_context) {
64
+ var backendResult, result;
65
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
66
66
  while (1) switch (_context.prev = _context.next) {
67
67
  case 0:
68
68
  _context.prev = 0;
@@ -77,28 +77,28 @@ var ToolCallRenderer = /*#__PURE__*/React.memo(function (_ref) {
77
77
  backendResult = toolCall.result;
78
78
  }
79
79
  }
80
- _context.next = 1;
80
+ _context.next = 5;
81
81
  return config.handler(args, backendResult);
82
- case 1:
82
+ case 5:
83
83
  result = _context.sent;
84
84
  setActionState({
85
85
  status: "complete",
86
86
  result: result
87
87
  });
88
- _context.next = 3;
88
+ _context.next = 12;
89
89
  break;
90
- case 2:
91
- _context.prev = 2;
92
- _t = _context["catch"](0);
90
+ case 9:
91
+ _context.prev = 9;
92
+ _context.t0 = _context["catch"](0);
93
93
  setActionState({
94
94
  status: "error",
95
- error: _t
95
+ error: _context.t0
96
96
  });
97
- case 3:
97
+ case 12:
98
98
  case "end":
99
99
  return _context.stop();
100
100
  }
101
- }, _callee, null, [[0, 2]]);
101
+ }, _callee, null, [[0, 9]]);
102
102
  }));
103
103
  return function executeHandler() {
104
104
  return _ref2.apply(this, arguments);
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sources":["../../../../../pro-components/chat/chat-engine/components/toolcall/render.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport type { ToolCall } from 'tdesign-web-components/lib/chat-engine';\nimport { isNonInteractiveConfig, type ToolcallComponentProps } from './types';\nimport { agentToolcallRegistry } from './registry';\nimport { AgentStateContext, useAgentStateDataByKey } from '../../hooks/useAgentState';\n\ninterface ToolCallRendererProps {\n toolCall: ToolCall;\n onRespond?: (toolCall: ToolCall, response: any) => void;\n}\n\nexport const ToolCallRenderer = React.memo<ToolCallRendererProps>(\n ({ toolCall, onRespond }) => {\n const [actionState, setActionState] = useState<{\n status: ToolcallComponentProps['status'];\n result?: any;\n error?: Error;\n }>({\n status: 'idle',\n });\n\n // 缓存配置获取\n const config = useMemo(() => {\n const cfg = agentToolcallRegistry.get(toolCall.toolCallName);\n return cfg;\n }, [toolCall.toolCallName]);\n\n // 添加注册状态监听\n const [isRegistered, setIsRegistered] = useState(\n () => !!agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n );\n\n // 缓存参数解析\n const args = useMemo(() => {\n try {\n return toolCall.args ? JSON.parse(toolCall.args) : {};\n } catch (error) {\n console.error('解析工具调用参数失败:', error);\n return {};\n }\n }, [toolCall.args]);\n\n const handleRespond = useCallback(\n (response: any) => {\n if (onRespond) {\n onRespond(toolCall, response);\n setActionState((prev) => ({\n ...prev,\n status: 'complete',\n result: response,\n }));\n }\n },\n [toolCall.toolCallId, onRespond],\n );\n\n // 执行 handler(如果存在)- 必须在条件判断之前调用\n useEffect(() => {\n if (!config) return;\n\n if (isNonInteractiveConfig(config)) {\n // 非交互式:执行 handler\n const executeHandler = async () => {\n try {\n setActionState({ status: 'executing' });\n\n // 解析后端返回的结果作为 handler 的第二个参数\n let backendResult;\n if (toolCall.result) {\n try {\n backendResult = JSON.parse(toolCall.result);\n } catch (error) {\n console.warn('解析后端结果失败,使用原始字符串:', error);\n backendResult = toolCall.result;\n }\n }\n\n // 调用 handler,传入 args 和 backendResult\n const result = await config.handler(args, backendResult);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n };\n\n executeHandler();\n } else if (toolCall.result) {\n // 交互式:已有结果,显示完成状态\n try {\n const result = JSON.parse(toolCall.result);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n } else {\n // 等待用户交互\n setActionState({ status: 'executing' });\n }\n }, [config, args, toolCall.result]);\n\n // 从配置中获取 subscribeKey 提取函数\n const subscribeKeyExtractor = useMemo(() => config?.subscribeKey, [config]);\n\n // 使用配置的提取函数来获取 targetStateKey\n const targetStateKey = useMemo(() => {\n if (!subscribeKeyExtractor) return undefined;\n\n // 构造完整的 props 对象传给提取函数\n const fullProps = {\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n };\n\n return subscribeKeyExtractor(fullProps);\n }, [subscribeKeyExtractor, args, actionState]);\n\n // 监听组件注册事件, 无论何时注册,都能正确触发重新渲染\n useEffect(() => {\n if (!isRegistered) {\n const handleRegistered = (event: CustomEvent) => {\n if (event.detail?.name === toolCall.toolCallName) {\n setIsRegistered(true);\n }\n };\n\n // 添加事件监听\n window.addEventListener('toolcall-registered', handleRegistered as EventListener);\n\n return () => {\n window.removeEventListener('toolcall-registered', handleRegistered as EventListener);\n };\n }\n }, [toolCall.toolCallName, isRegistered]);\n\n // 使用精确订阅\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n // 缓存组件 props\n const componentProps = useMemo<ToolcallComponentProps>(\n () => ({\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n agentState,\n }),\n [actionState.status, args, actionState.result, actionState.error, handleRespond, agentState],\n );\n\n // 使用registry的缓存渲染函数\n const MemoizedComponent = useMemo(\n () => agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n [toolCall.toolCallName, isRegistered],\n );\n\n if (!MemoizedComponent) {\n return null;\n }\n\n return <MemoizedComponent {...componentProps} />;\n },\n (prevProps, nextProps) =>\n prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId &&\n prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName &&\n prevProps.toolCall.args === nextProps.toolCall.args &&\n prevProps.toolCall.result === nextProps.toolCall.result &&\n prevProps.onRespond === nextProps.onRespond,\n);\n// 用于调试,可以在控制台查看每次渲染的参数\n// (prevProps, nextProps) => {\n// const toolCallIdSame = prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId;\n// const toolCallNameSame = prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName;\n// const argsSame = prevProps.toolCall.args === nextProps.toolCall.args;\n// const resultSame = prevProps.toolCall.result === nextProps.toolCall.result;\n// const onRespondSame = prevProps.onRespond === nextProps.onRespond;\n\n// console.log(`ToolCallRenderer memo 详细检查 [${prevProps.toolCall.toolCallName}]:`, {\n// toolCallIdSame,\n// toolCallNameSame,\n// argsSame,\n// resultSame,\n// onRespondSame,\n// prevToolCallId: prevProps.toolCall.toolCallId,\n// nextToolCallId: nextProps.toolCall.toolCallId,\n// prevOnRespond: prevProps.onRespond,\n// nextOnRespond: nextProps.onRespond,\n// });\n\n// const shouldSkip = toolCallIdSame && toolCallNameSame && argsSame && resultSame && onRespondSame;\n\n// console.log(`ToolCallRenderer memo 检查 [${prevProps.toolCall.toolCallName}]:`, shouldSkip ? '跳过渲染' : '需要重新渲染');\n// return shouldSkip\n// },\n// );\n\n// 定义增强后的 Props 类型\ntype WithAgentStateProps<P> = P & { agentState?: Record<string, any> };\n\nexport const withAgentStateToolcall1 = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => (\n <AgentStateContext.Consumer>\n {(context) => {\n if (!context) {\n console.warn('AgentStateContext not found, component will render without state');\n return <Component {...props} />;\n }\n\n return <Component {...props} agentState={context.stateMap} />;\n }}\n </AgentStateContext.Consumer>\n );\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n\nexport const withAgentStateToolcall = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n subscribeKeyExtractor?: (props: P) => string | undefined,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => {\n // 计算需要订阅的 stateKey\n const targetStateKey = useMemo(() => (subscribeKeyExtractor ? subscribeKeyExtractor(props) : undefined), [props]);\n\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n return <Component {...props} agentState={agentState} />;\n };\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n"],"names":["ToolCallRenderer","React","memo","_ref","toolCall","onRespond","_useState","useState","status","_useState2","_slicedToArray","actionState","setActionState","config","useMemo","cfg","agentToolcallRegistry","get","toolCallName","_useState3","getRenderFunction","_useState4","isRegistered","setIsRegistered","args","JSON","parse","error","console","handleRespond","useCallback","response","prev","_objectSpread","result","toolCallId","useEffect","isNonInteractiveConfig","executeHandler","_callee","backendResult","_t","_regeneratorRuntime","wrap","_context","next","warn","handler","sent","stop","subscribeKeyExtractor","subscribeKey","targetStateKey","fullProps","respond","handleRegistered","event","_event$detail","detail","name","window","addEventListener","removeEventListener","agentState","useAgentStateDataByKey","componentProps","MemoizedComponent","createElement","prevProps","nextProps","withAgentStateToolcall1","Component","WrappedComponent","props","AgentStateContext","Consumer","context","stateMap","displayName","concat","withAgentStateToolcall"],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sources":["../../../../../pro-components/chat/chat-engine/components/toolcall/render.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport type { ToolCall } from 'tdesign-web-components/lib/chat-engine';\nimport { isNonInteractiveConfig, type ToolcallComponentProps } from './types';\nimport { agentToolcallRegistry } from './registry';\nimport { AgentStateContext, useAgentStateDataByKey } from '../../hooks/useAgentState';\n\ninterface ToolCallRendererProps {\n toolCall: ToolCall;\n onRespond?: (toolCall: ToolCall, response: any) => void;\n}\n\nexport const ToolCallRenderer = React.memo<ToolCallRendererProps>(\n ({ toolCall, onRespond }) => {\n const [actionState, setActionState] = useState<{\n status: ToolcallComponentProps['status'];\n result?: any;\n error?: Error;\n }>({\n status: 'idle',\n });\n\n // 缓存配置获取\n const config = useMemo(() => {\n const cfg = agentToolcallRegistry.get(toolCall.toolCallName);\n return cfg;\n }, [toolCall.toolCallName]);\n\n // 添加注册状态监听\n const [isRegistered, setIsRegistered] = useState(\n () => !!agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n );\n\n // 缓存参数解析\n const args = useMemo(() => {\n try {\n return toolCall.args ? JSON.parse(toolCall.args) : {};\n } catch (error) {\n console.error('解析工具调用参数失败:', error);\n return {};\n }\n }, [toolCall.args]);\n\n const handleRespond = useCallback(\n (response: any) => {\n if (onRespond) {\n onRespond(toolCall, response);\n setActionState((prev) => ({\n ...prev,\n status: 'complete',\n result: response,\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallId, onRespond],\n );\n\n // 执行 handler(如果存在)- 必须在条件判断之前调用\n useEffect(() => {\n if (!config) return;\n\n if (isNonInteractiveConfig(config)) {\n // 非交互式:执行 handler\n const executeHandler = async () => {\n try {\n setActionState({ status: 'executing' });\n\n // 解析后端返回的结果作为 handler 的第二个参数\n let backendResult;\n if (toolCall.result) {\n try {\n backendResult = JSON.parse(toolCall.result);\n } catch (error) {\n console.warn('解析后端结果失败,使用原始字符串:', error);\n backendResult = toolCall.result;\n }\n }\n\n // 调用 handler,传入 args 和 backendResult\n const result = await config.handler(args, backendResult);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n };\n\n executeHandler();\n } else if (toolCall.result) {\n // 交互式:已有结果,显示完成状态\n try {\n const result = JSON.parse(toolCall.result);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n } else {\n // 等待用户交互\n setActionState({ status: 'executing' });\n }\n }, [config, args, toolCall.result]);\n\n // 从配置中获取 subscribeKey 提取函数\n const subscribeKeyExtractor = useMemo(() => config?.subscribeKey, [config]);\n\n // 使用配置的提取函数来获取 targetStateKey\n const targetStateKey = useMemo(() => {\n if (!subscribeKeyExtractor) return undefined;\n\n // 构造完整的 props 对象传给提取函数\n const fullProps = {\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n };\n\n return subscribeKeyExtractor(fullProps);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribeKeyExtractor, args, actionState]);\n\n // 监听组件注册事件, 无论何时注册,都能正确触发重新渲染\n useEffect(() => {\n if (!isRegistered) {\n const handleRegistered = (event: CustomEvent) => {\n if (event.detail?.name === toolCall.toolCallName) {\n setIsRegistered(true);\n }\n };\n\n // 添加事件监听\n window.addEventListener('toolcall-registered', handleRegistered as EventListener);\n\n return () => {\n window.removeEventListener('toolcall-registered', handleRegistered as EventListener);\n };\n }\n }, [toolCall.toolCallName, isRegistered]);\n\n // 使用精确订阅\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n // 缓存组件 props\n const componentProps = useMemo<ToolcallComponentProps>(\n () => ({\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n agentState,\n }),\n [actionState.status, args, actionState.result, actionState.error, handleRespond, agentState],\n );\n\n // 使用registry的缓存渲染函数\n const MemoizedComponent = useMemo(\n () => agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallName, isRegistered],\n );\n\n if (!MemoizedComponent) {\n return null;\n }\n\n return <MemoizedComponent {...componentProps} />;\n },\n (prevProps, nextProps) =>\n prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId &&\n prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName &&\n prevProps.toolCall.args === nextProps.toolCall.args &&\n prevProps.toolCall.result === nextProps.toolCall.result &&\n prevProps.onRespond === nextProps.onRespond,\n);\n// 用于调试,可以在控制台查看每次渲染的参数\n// (prevProps, nextProps) => {\n// const toolCallIdSame = prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId;\n// const toolCallNameSame = prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName;\n// const argsSame = prevProps.toolCall.args === nextProps.toolCall.args;\n// const resultSame = prevProps.toolCall.result === nextProps.toolCall.result;\n// const onRespondSame = prevProps.onRespond === nextProps.onRespond;\n\n// console.log(`ToolCallRenderer memo 详细检查 [${prevProps.toolCall.toolCallName}]:`, {\n// toolCallIdSame,\n// toolCallNameSame,\n// argsSame,\n// resultSame,\n// onRespondSame,\n// prevToolCallId: prevProps.toolCall.toolCallId,\n// nextToolCallId: nextProps.toolCall.toolCallId,\n// prevOnRespond: prevProps.onRespond,\n// nextOnRespond: nextProps.onRespond,\n// });\n\n// const shouldSkip = toolCallIdSame && toolCallNameSame && argsSame && resultSame && onRespondSame;\n\n// console.log(`ToolCallRenderer memo 检查 [${prevProps.toolCall.toolCallName}]:`, shouldSkip ? '跳过渲染' : '需要重新渲染');\n// return shouldSkip\n// },\n// );\n\n// 定义增强后的 Props 类型\ntype WithAgentStateProps<P> = P & { agentState?: Record<string, any> };\n\nexport const withAgentStateToolcall1 = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => (\n <AgentStateContext.Consumer>\n {(context) => {\n if (!context) {\n console.warn('AgentStateContext not found, component will render without state');\n return <Component {...props} />;\n }\n\n return <Component {...props} agentState={context.stateMap} />;\n }}\n </AgentStateContext.Consumer>\n );\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n\nexport const withAgentStateToolcall = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n subscribeKeyExtractor?: (props: P) => string | undefined,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => {\n // 计算需要订阅的 stateKey\n const targetStateKey = useMemo(() => (subscribeKeyExtractor ? subscribeKeyExtractor(props) : undefined), [props]);\n\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n return <Component {...props} agentState={agentState} />;\n };\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n"],"names":["ToolCallRenderer","React","memo","_ref","toolCall","onRespond","_useState","useState","status","_useState2","_slicedToArray","actionState","setActionState","config","useMemo","cfg","agentToolcallRegistry","get","toolCallName","_useState3","getRenderFunction","_useState4","isRegistered","setIsRegistered","args","JSON","parse","error","console","handleRespond","useCallback","response","prev","_objectSpread","result","toolCallId","useEffect","isNonInteractiveConfig","executeHandler","_callee","backendResult","_regeneratorRuntime","wrap","_callee$","_context","next","warn","handler","sent","t0","stop","subscribeKeyExtractor","subscribeKey","targetStateKey","fullProps","respond","handleRegistered","event","_event$detail","detail","name","window","addEventListener","removeEventListener","agentState","useAgentStateDataByKey","componentProps","MemoizedComponent","createElement","prevProps","nextProps","withAgentStateToolcall1","Component","WrappedComponent","props","AgentStateContext","Consumer","context","stateMap","displayName","concat","withAgentStateToolcall"],"mappings":"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"}
@@ -4,7 +4,7 @@ import React from 'react';
4
4
  */
5
5
  export interface ToolcallComponentProps<TArgs extends object = any, TResult = any, TResponse = any> {
6
6
  /** 组件的当前渲染状态 */
7
- status: 'idle' | 'inProgress' | 'executing' | 'complete' | 'error';
7
+ status: 'idle' | 'executing' | 'complete' | 'error';
8
8
  /** Agent 调用时传入的初始参数 */
9
9
  args: TArgs;
10
10
  /** 当 status 为 'complete' 时,包含 Toolcall 的最终执行结果 */
@@ -20,8 +20,12 @@ export interface ToolcallComponentProps<TArgs extends object = any, TResult = an
20
20
  }
21
21
  interface NonInteractiveToolcallConfig<TArgs extends object, TResult> {
22
22
  name: string;
23
- description: string;
24
- parameters: any[];
23
+ description?: string;
24
+ parameters?: Array<{
25
+ name: string;
26
+ type: string;
27
+ required?: boolean;
28
+ }>;
25
29
  /** 业务逻辑执行器,支持可选的后端结果作为第二个参数 */
26
30
  handler: (args: TArgs, backendResult?: any) => Promise<TResult>;
27
31
  /** 状态显示组件 */
@@ -32,7 +36,11 @@ interface NonInteractiveToolcallConfig<TArgs extends object, TResult> {
32
36
  interface InteractiveToolcallConfig<TArgs extends object, TResult, TResponse> {
33
37
  name: string;
34
38
  description: string;
35
- parameters?: any[];
39
+ parameters?: Array<{
40
+ name: string;
41
+ type: string;
42
+ required?: boolean;
43
+ }>;
36
44
  /** 交互式UI组件 */
37
45
  component: React.FC<ToolcallComponentProps<TArgs, TResult, TResponse>>;
38
46
  /** handler 属性不存在,以此作为区分标志 */
@@ -1,6 +1,6 @@
1
1
  /**
2
- * tdesign v1.0.0
3
- * (c) 2025 tdesign
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../../pro-components/chat/chat-engine/components/toolcall/types.ts"],"sourcesContent":["import React from 'react';\n\n/**\n * 智能体可交互组件的标准 Props 接口\n */\nexport interface ToolcallComponentProps<TArgs extends object = any, TResult = any, TResponse = any> {\n /** 组件的当前渲染状态 */\n status: 'idle' | 'inProgress' | 'executing' | 'complete' | 'error';\n /** Agent 调用时传入的初始参数 */\n args: TArgs;\n /** 当 status 为 'complete' 时,包含 Toolcall 的最终执行结果 */\n result?: TResult;\n /** 当 status 为 'error' 时,包含错误信息 */\n error?: Error;\n /**\n * 【交互核心】一个回调函数,用于将用户的交互结果返回给宿主环境。\n * 仅在\"交互式\"场景下由宿主提供。\n */\n respond?: (response: TResponse) => void;\n agentState?: Record<string, any>;\n}\n\n// 场景一:非交互式 Toolcall 的配置 (有 handler)\ninterface NonInteractiveToolcallConfig<TArgs extends object, TResult> {\n name: string;\n description: string;\n parameters: any[];\n /** 业务逻辑执行器,支持可选的后端结果作为第二个参数 */\n handler: (args: TArgs, backendResult?: any) => Promise<TResult>;\n /** 状态显示组件 */\n component: React.FC<ToolcallComponentProps<TArgs, TResult>>;\n /** 订阅statekey提取函数 */\n subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;\n}\n\n// 场景二:交互式 Toolcall 的配置 (无 handler)\ninterface InteractiveToolcallConfig<TArgs extends object, TResult, TResponse> {\n name: string;\n description: string;\n parameters?: any[];\n /** 交互式UI组件 */\n component: React.FC<ToolcallComponentProps<TArgs, TResult, TResponse>>;\n /** handler 属性不存在,以此作为区分标志 */\n handler?: never;\n /** 订阅statekey提取函数 */\n subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;\n}\n\n// 最终的配置类型\nexport type AgentToolcallConfig<TArgs extends object = any, TResult = any, TResponse = any> =\n | NonInteractiveToolcallConfig<TArgs, TResult>\n | InteractiveToolcallConfig<TArgs, TResult, TResponse>;\n\n// 类型守卫:判断是否为非交互式配置\nexport function isNonInteractive<TArgs extends object, TResult>(\n config: AgentToolcallConfig<TArgs, TResult, any>,\n): config is NonInteractiveToolcallConfig<TArgs, TResult> {\n return typeof (config as any).handler === 'function';\n}\n\n// Agent Toolcall 注册表\nexport interface AgentToolcallRegistry {\n [ToolcallName: string]: AgentToolcallConfig;\n}\n\n// 内部状态管理\nexport interface AgentToolcallState<TArgs extends object = any, TResult = any> {\n status: ToolcallComponentProps['status'];\n args?: TArgs;\n result?: TResult;\n error?: Error;\n}\n\n// 类型守卫函数\nexport const isNonInteractiveConfig = (cfg: AgentToolcallConfig): cfg is AgentToolcallConfig & { handler: Function } =>\n typeof (cfg as any).handler === 'function';\n"],"names":["isNonInteractive","config","handler","isNonInteractiveConfig","cfg"],"mappings":";;;;;;AAsDO,SAASA,iBACdC,MACwD,EAAA;AACjD,EAAA,OAAA,OAAQA,OAAeC,OAAY,KAAA,UAAA,CAAA;AAC5C,CAAA;IAgBaC,sBAAyB,GAAA,SAAzBA,sBAAyBA,CAACC,GACrC,EAAA;AAAA,EAAA,OAAA,OAAQA,IAAYF,OAAY,KAAA,UAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../../../pro-components/chat/chat-engine/components/toolcall/types.ts"],"sourcesContent":["import React from 'react';\n\n/**\n * 智能体可交互组件的标准 Props 接口\n */\nexport interface ToolcallComponentProps<TArgs extends object = any, TResult = any, TResponse = any> {\n /** 组件的当前渲染状态 */\n status: 'idle' | 'executing' | 'complete' | 'error';\n /** Agent 调用时传入的初始参数 */\n args: TArgs;\n /** 当 status 为 'complete' 时,包含 Toolcall 的最终执行结果 */\n result?: TResult;\n /** 当 status 为 'error' 时,包含错误信息 */\n error?: Error;\n /**\n * 【交互核心】一个回调函数,用于将用户的交互结果返回给宿主环境。\n * 仅在\"交互式\"场景下由宿主提供。\n */\n respond?: (response: TResponse) => void;\n agentState?: Record<string, any>;\n}\n\n// 场景一:非交互式 Toolcall 的配置 (有 handler)\ninterface NonInteractiveToolcallConfig<TArgs extends object, TResult> {\n name: string;\n description?: string;\n parameters?: Array<{ name: string; type: string; required?: boolean }>;\n /** 业务逻辑执行器,支持可选的后端结果作为第二个参数 */\n handler: (args: TArgs, backendResult?: any) => Promise<TResult>;\n /** 状态显示组件 */\n component: React.FC<ToolcallComponentProps<TArgs, TResult>>;\n /** 订阅statekey提取函数 */\n subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;\n}\n\n// 场景二:交互式 Toolcall 的配置 (无 handler)\ninterface InteractiveToolcallConfig<TArgs extends object, TResult, TResponse> {\n name: string;\n description: string;\n parameters?: Array<{ name: string; type: string; required?: boolean }>;\n /** 交互式UI组件 */\n component: React.FC<ToolcallComponentProps<TArgs, TResult, TResponse>>;\n /** handler 属性不存在,以此作为区分标志 */\n handler?: never;\n /** 订阅statekey提取函数 */\n subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;\n}\n\n// 最终的配置类型\nexport type AgentToolcallConfig<TArgs extends object = any, TResult = any, TResponse = any> =\n | NonInteractiveToolcallConfig<TArgs, TResult>\n | InteractiveToolcallConfig<TArgs, TResult, TResponse>;\n\n// 类型守卫:判断是否为非交互式配置\nexport function isNonInteractive<TArgs extends object, TResult>(\n config: AgentToolcallConfig<TArgs, TResult, any>,\n): config is NonInteractiveToolcallConfig<TArgs, TResult> {\n return typeof (config as any).handler === 'function';\n}\n\n// Agent Toolcall 注册表\nexport interface AgentToolcallRegistry {\n [ToolcallName: string]: AgentToolcallConfig;\n}\n\n// 内部状态管理\nexport interface AgentToolcallState<TArgs extends object = any, TResult = any> {\n status: ToolcallComponentProps['status'];\n args?: TArgs;\n result?: TResult;\n error?: Error;\n}\n\n// 类型守卫函数\nexport const isNonInteractiveConfig = (cfg: AgentToolcallConfig): cfg is AgentToolcallConfig & { handler: Function } =>\n typeof (cfg as any).handler === 'function';\n"],"names":["isNonInteractive","config","handler","isNonInteractiveConfig","cfg"],"mappings":";;;;;;AAsDO,SAASA,iBACdC,MACwD,EAAA;AACjD,EAAA,OAAA,OAAQA,OAAeC,OAAY,KAAA,UAAA,CAAA;AAC5C,CAAA;IAgBaC,sBAAyB,GAAA,SAAzBA,sBAAyBA,CAACC,GACrC,EAAA;AAAA,EAAA,OAAA,OAAQA,IAAYF,OAAY,KAAA,UAAA,CAAA;AAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * tdesign v1.0.0
3
- * (c) 2025 tdesign
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"useAgentState.js","sources":["../../../../pro-components/chat/chat-engine/hooks/useAgentState.ts"],"sourcesContent":["import { useState, useEffect, useRef, createContext, useContext, useMemo } from 'react';\nimport { stateManager } from 'tdesign-web-components/lib/chat-engine';\n\n/**\n * 状态订阅相关类型定义\n */\n\nexport interface StateActionOptions {\n /**\n * 初始状态\n */\n initialState?: Record<string, any>;\n /**\n * 只订阅特定key的变化\n */\n subscribeKey?: string;\n}\n\nexport interface UseStateActionReturn {\n /**\n * 全量状态Map - 包含所有stateKey的状态\n * 格式: { [stateKey]: stateData }\n */\n stateMap: Record<string, any>;\n /**\n * 当前最新的状态key\n */\n currentStateKey: string | null;\n /**\n * 设置状态Map,用于加载历史对话消息中的state数据\n */\n setStateMap: (stateMap: Record<string, any> | ((prev: Record<string, any>) => Record<string, any>)) => void;\n /**\n * 获取当前完整状态的方法\n */\n getCurrentState: () => Record<string, any>;\n /**\n * 获取特定 key 状态的方法\n */\n getStateByKey: (key: string) => any;\n}\n\nexport const useAgentState = <T = any>(options: StateActionOptions = {}): UseStateActionReturn => {\n const { initialState, subscribeKey } = options;\n const [stateMap, setStateMap] = useState<Record<string, any>>(initialState || {});\n const [currentStateKey, setCurrentStateKey] = useState<string | null>(null);\n\n // 使用 ref 来避免不必要的重新渲染\n const stateMapRef = useRef(stateMap);\n stateMapRef.current = stateMap;\n\n useEffect(\n () =>\n stateManager.subscribeToLatest((newState: T, newStateKey: string) => {\n // 如果指定了 subscribeKey,只有匹配时才更新状态\n if (subscribeKey && newStateKey !== subscribeKey) {\n // 仍然更新内部状态,但不触发重新渲染\n stateMapRef.current = {\n ...stateMapRef.current,\n [newStateKey]: newState,\n };\n return;\n }\n\n setStateMap((prev) => ({\n ...prev,\n [newStateKey]: newState,\n }));\n setCurrentStateKey(newStateKey);\n }),\n [subscribeKey],\n );\n\n return {\n stateMap: stateMapRef.current,\n currentStateKey,\n setStateMap,\n getCurrentState: () => stateMapRef.current,\n getStateByKey: (key: string) => stateMapRef.current[key],\n };\n};\n\n// 创建 AgentState Context\nexport const AgentStateContext = createContext<UseStateActionReturn | null>(null);\n\n// 简化的状态选择器\nexport const useAgentStateDataByKey = (stateKey?: string) => {\n const contextState = useContext(AgentStateContext);\n const independentState = useAgentState({ subscribeKey: stateKey });\n\n return useMemo(() => {\n if (contextState) {\n // 有 Provider,使用 Context 状态\n const { stateMap } = contextState;\n return stateKey ? stateMap[stateKey] : stateMap;\n }\n\n // 没有 Provider,使用独立状态\n const { stateMap } = independentState;\n return stateKey ? stateMap[stateKey] : stateMap;\n }, [\n stateKey,\n // 关键:添加和 useAgentStateByKey 相同的深度依赖逻辑\n contextState && (stateKey ? contextState.stateMap[stateKey] : JSON.stringify(contextState.stateMap)),\n independentState && (stateKey ? independentState.stateMap[stateKey] : JSON.stringify(independentState.stateMap)),\n ]);\n};\n\n// 导出 Context Hook\nexport const useAgentStateContext = (): UseStateActionReturn => {\n const context = useContext(AgentStateContext);\n\n if (!context) {\n throw new Error('useAgentState must be used within AgentStateProvider');\n }\n\n return context;\n};\n"],"names":["useAgentState","options","arguments","length","undefined","initialState","subscribeKey","_useState","useState","_useState2","_slicedToArray","stateMap","setStateMap","_useState3","_useState4","currentStateKey","setCurrentStateKey","stateMapRef","useRef","current","useEffect","stateManager","subscribeToLatest","newState","newStateKey","_objectSpread","_defineProperty","prev","getCurrentState","getStateByKey","key","AgentStateContext","createContext","useAgentStateDataByKey","stateKey","contextState","useContext","independentState","useMemo","JSON","stringify","useAgentStateContext","context","Error"],"mappings":";;;;;;;;;;;;;IA0CaA,aAAgB,GAAA,SAAhBA,aAAgBA,GAAqE;AAAA,EAAA,IAA3DC,OAA8B,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAA,EAA6B,CAAA;AAC1F,EAAA,IAAEG,YAAc,GAAiBJ,OAAA,CAA/BI,YAAc;IAAAC,YAAA,GAAiBL,OAAA,CAAjBK,YAAA,CAAA;EACtB,IAAAC,SAAA,GAAgCC,QAA8B,CAAAH,YAAA,IAAgB,EAAE,CAAA;IAAAI,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAAzEI,IAAAA,QAAU,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAAG,IAAAA,WAAW,GAAAH,UAAA,CAAA,CAAA,CAAA,CAAA;AAC5B,EAAA,IAAAI,UAAA,GAA8CL,SAAwB,IAAI,CAAA;IAAAM,UAAA,GAAAJ,cAAA,CAAAG,UAAA,EAAA,CAAA,CAAA;AAAnEE,IAAAA,eAAA,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAiBE,IAAAA,kBAAkB,GAAAF,UAAA,CAAA,CAAA,CAAA,CAAA;AAGpC,EAAA,IAAAG,WAAA,GAAcC,OAAOP,QAAQ,CAAA,CAAA;EACnCM,WAAA,CAAYE,OAAU,GAAAR,QAAA,CAAA;AAEtBS,EAAAA,SAAA,CACE,YAAA;IAAA,OACEC,YAAA,CAAaC,iBAAkB,CAAA,UAACC,UAAaC,WAAwB,EAAA;AAE/D,MAAA,IAAAlB,YAAA,IAAgBkB,gBAAgBlB,YAAc,EAAA;AAEhDW,QAAAA,WAAA,CAAYE,OAAU,GAAAM,aAAA,CAAAA,aAAA,CACjBR,EAAAA,EAAAA,WAAY,CAAAE,OAAA,OAAAO,eAAA,CAAA,EAAA,EACdF,WAAc,EAAAD,QAAA,CACjB,CAAA,CAAA;AACA,QAAA,OAAA;AACF,OAAA;MAEAX,WAAA,CAAY,UAACe,IAAU,EAAA;QAAA,OAAAF,aAAA,CAAAA,aAAA,CAClBE,EAAAA,EAAAA,IAAA,OAAAD,eAAA,CAAA,EAAA,EACFF,WAAc,EAAAD,QAAA,CAAA,CAAA,CAAA;AAAA,OACf,CAAA,CAAA;MACFP,kBAAA,CAAmBQ,WAAW,CAAA,CAAA;AAChC,KAAC,CAAA,CAAA;GACH,EAAA,CAAClB,YAAY,CACf,CAAA,CAAA;EAEO,OAAA;IACLK,UAAUM,WAAY,CAAAE,OAAA;AACtBJ,IAAAA,eAAA,EAAAA,eAAA;AACAH,IAAAA,WAAA,EAAAA,WAAA;IACAgB,eAAA,EAAiB,SAAjBA,eAAAA,GAAA;MAAA,OAAuBX,WAAY,CAAAE,OAAA,CAAA;AAAA,KAAA;AACnCU,IAAAA,aAAe,EAAA,SAAfA,aAAeA,CAACC,GAAgB,EAAA;AAAA,MAAA,OAAAb,WAAA,CAAYE,OAAQ,CAAAW,GAAA,CAAA,CAAA;AAAA,KAAA;GACtD,CAAA;AACF,EAAA;IAGaC,iBAAA,gBAAoBC,cAA2C,IAAI,EAAA;IAGnEC,sBAAA,GAAyB,SAAzBA,sBAAAA,CAA0BC,QAAsB,EAAA;AACrD,EAAA,IAAAC,YAAA,GAAeC,WAAWL,iBAAiB,CAAA,CAAA;EACjD,IAAMM,gBAAmB,GAAArC,aAAA,CAAc;AAAEM,IAAAA,YAAA,EAAc4B,QAAAA;AAAS,GAAC,CAAA,CAAA;EAEjE,OAAOI,QAAQ,YAAM;AACnB,IAAA,IAAIH,YAAc,EAAA;AAEV,MAAA,IAAExB,SAAAA,GAAawB,YAAA,CAAbxB,QAAAA,CAAAA;AACD,MAAA,OAAAuB,QAAA,GAAWvB,UAASuB,QAAYvB,CAAAA,GAAAA,SAAAA,CAAAA;AACzC,KAAA;AAGM,IAAA,IAAEA,WAAa0B,gBAAA,CAAb1B;AACD,IAAA,OAAAuB,QAAA,GAAWvB,SAASuB,QAAY,CAAA,GAAAvB,QAAA,CAAA;GACtC,EAAA,CACDuB,QAAA,EAEAC,YAAA,KAAiBD,WAAWC,YAAa,CAAAxB,QAAA,CAASuB,YAAYK,IAAK,CAAAC,SAAA,CAAUL,aAAaxB,QAAQ,CAAA,CAAA,EAClG0B,gBAAA,KAAqBH,WAAWG,gBAAiB,CAAA1B,QAAA,CAASuB,YAAYK,IAAK,CAAAC,SAAA,CAAUH,iBAAiB1B,QAAQ,CAAA,CAAA,CAC/G,CAAA,CAAA;AACH,EAAA;IAGa8B,uBAAuB,SAAvBA,uBAAmD;AACxD,EAAA,IAAAC,OAAA,GAAUN,WAAWL,iBAAiB,CAAA,CAAA;EAE5C,IAAI,CAACW,OAAS,EAAA;AACN,IAAA,MAAA,IAAIC,MAAM,sDAAsD,CAAA,CAAA;AACxE,GAAA;AAEO,EAAA,OAAAD,OAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"useAgentState.js","sources":["../../../../pro-components/chat/chat-engine/hooks/useAgentState.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport { useState, useEffect, useRef, createContext, useContext, useMemo } from 'react';\nimport { stateManager } from 'tdesign-web-components/lib/chat-engine';\n\n/**\n * 状态订阅相关类型定义\n */\n\nexport interface StateActionOptions {\n /**\n * 初始状态\n */\n initialState?: Record<string, any>;\n /**\n * 只订阅特定key的变化\n */\n subscribeKey?: string;\n}\n\nexport interface UseStateActionReturn {\n /**\n * 全量状态Map - 包含所有stateKey的状态\n * 格式: { [stateKey]: stateData }\n */\n stateMap: Record<string, any>;\n /**\n * 当前最新的状态key\n */\n currentStateKey: string | null;\n /**\n * 设置状态Map,用于加载历史对话消息中的state数据\n */\n setStateMap: (stateMap: Record<string, any> | ((prev: Record<string, any>) => Record<string, any>)) => void;\n /**\n * 获取当前完整状态的方法\n */\n getCurrentState: () => Record<string, any>;\n /**\n * 获取特定 key 状态的方法\n */\n getStateByKey: (key: string) => any;\n}\n\nexport const useAgentState = <T = any>(options: StateActionOptions = {}): UseStateActionReturn => {\n const { initialState, subscribeKey } = options;\n const [stateMap, setStateMap] = useState<Record<string, any>>(initialState || {});\n const [currentStateKey, setCurrentStateKey] = useState<string | null>(null);\n\n // 使用 ref 来避免不必要的重新渲染\n const stateMapRef = useRef(stateMap);\n stateMapRef.current = stateMap;\n\n useEffect(\n () =>\n stateManager.subscribeToLatest((newState: T, newStateKey: string) => {\n // 如果指定了 subscribeKey,只有匹配时才更新状态\n if (subscribeKey && newStateKey !== subscribeKey) {\n // 仍然更新内部状态,但不触发重新渲染\n stateMapRef.current = {\n ...stateMapRef.current,\n [newStateKey]: newState,\n };\n return;\n }\n\n setStateMap((prev) => ({\n ...prev,\n [newStateKey]: newState,\n }));\n setCurrentStateKey(newStateKey);\n }),\n [subscribeKey],\n );\n\n return {\n stateMap: stateMapRef.current,\n currentStateKey,\n setStateMap,\n getCurrentState: () => stateMapRef.current,\n getStateByKey: (key: string) => stateMapRef.current[key],\n };\n};\n\n// 创建 AgentState Context\nexport const AgentStateContext = createContext<UseStateActionReturn | null>(null);\n\n// 简化的状态选择器\nexport const useAgentStateDataByKey = (stateKey?: string) => {\n const contextState = useContext(AgentStateContext);\n const independentState = useAgentState({ subscribeKey: stateKey });\n\n return useMemo(() => {\n if (contextState) {\n // 有 Provider,使用 Context 状态\n const { stateMap } = contextState;\n return stateKey ? stateMap[stateKey] : stateMap;\n }\n\n // 没有 Provider,使用独立状态\n const { stateMap } = independentState;\n return stateKey ? stateMap[stateKey] : stateMap;\n }, [\n stateKey,\n // 关键:添加和 useAgentStateByKey 相同的深度依赖逻辑\n contextState && (stateKey ? contextState.stateMap[stateKey] : JSON.stringify(contextState.stateMap)),\n independentState && (stateKey ? independentState.stateMap[stateKey] : JSON.stringify(independentState.stateMap)),\n ]);\n};\n\n// 导出 Context Hook\nexport const useAgentStateContext = (): UseStateActionReturn => {\n const context = useContext(AgentStateContext);\n\n if (!context) {\n throw new Error('useAgentState must be used within AgentStateProvider');\n }\n\n return context;\n};\n"],"names":["useAgentState","options","arguments","length","undefined","initialState","subscribeKey","_useState","useState","_useState2","_slicedToArray","stateMap","setStateMap","_useState3","_useState4","currentStateKey","setCurrentStateKey","stateMapRef","useRef","current","useEffect","stateManager","subscribeToLatest","newState","newStateKey","_objectSpread","_defineProperty","prev","getCurrentState","getStateByKey","key","AgentStateContext","createContext","useAgentStateDataByKey","stateKey","contextState","useContext","independentState","useMemo","JSON","stringify","useAgentStateContext","context","Error"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * tdesign v1.0.0
3
- * (c) 2025 tdesign
2
+ * tdesign v1.0.2-alpha.0
3
+ * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6