@chat-lab/ui 0.1.0-beta.31 → 0.1.0-beta.32

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 (37) hide show
  1. package/dist/components/Chatkit/chatController.d.ts +2 -0
  2. package/dist/components/Chatkit/chatController.d.ts.map +1 -0
  3. package/dist/components/Chatkit/index.cjs +24 -25
  4. package/dist/components/Chatkit/index.cjs.map +1 -1
  5. package/dist/components/Chatkit/index.d.ts +2 -2
  6. package/dist/components/Chatkit/index.d.ts.map +1 -1
  7. package/dist/components/Chatkit/index.js +24 -25
  8. package/dist/components/Chatkit/index.js.map +1 -1
  9. package/dist/components/assistant-ui/reasoning.cjs +1 -3
  10. package/dist/components/assistant-ui/reasoning.cjs.map +1 -1
  11. package/dist/components/assistant-ui/reasoning.d.ts.map +1 -1
  12. package/dist/components/assistant-ui/reasoning.js +1 -3
  13. package/dist/components/assistant-ui/reasoning.js.map +1 -1
  14. package/dist/components/assistant-ui/thread.cjs +23 -23
  15. package/dist/components/assistant-ui/thread.cjs.map +1 -1
  16. package/dist/components/assistant-ui/thread.d.ts +1 -1
  17. package/dist/components/assistant-ui/thread.d.ts.map +1 -1
  18. package/dist/components/assistant-ui/thread.js +23 -23
  19. package/dist/components/assistant-ui/thread.js.map +1 -1
  20. package/dist/contexts/ChatkitContext.cjs +0 -1
  21. package/dist/contexts/ChatkitContext.cjs.map +1 -1
  22. package/dist/contexts/ChatkitContext.d.ts +0 -2
  23. package/dist/contexts/ChatkitContext.d.ts.map +1 -1
  24. package/dist/contexts/ChatkitContext.js +0 -1
  25. package/dist/contexts/ChatkitContext.js.map +1 -1
  26. package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.cjs +6 -0
  27. package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.cjs.map +1 -0
  28. package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.js +4 -0
  29. package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.js.map +1 -0
  30. package/dist/plugins/adkPlugin.d.ts +11 -0
  31. package/dist/plugins/adkPlugin.d.ts.map +1 -0
  32. package/dist/plugins/getAdkConfig.cjs +9 -0
  33. package/dist/plugins/getAdkConfig.cjs.map +1 -1
  34. package/dist/plugins/getAdkConfig.d.ts.map +1 -1
  35. package/dist/plugins/getAdkConfig.js +9 -0
  36. package/dist/plugins/getAdkConfig.js.map +1 -1
  37. package/package.json +2 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chatController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatController.d.ts","sourceRoot":"","sources":["../../../src/components/Chatkit/chatController.ts"],"names":[],"mappings":""}
@@ -22,20 +22,19 @@ var v4 = require('../../node_modules/.pnpm/uuid@13.0.0/node_modules/uuid/dist/v4
22
22
  var AssistantRuntimeProvider = require('../../node_modules/.pnpm/@assistant-ui_react@0.11.37_patch_hash_ynfhbcwv6lgckkdmenopdkbtmq_@types_react-dom@17.0.2_@ty_7dz2xsf2ib2guiutzhjhoerypu/node_modules/@assistant-ui/react/dist/legacy-runtime/AssistantRuntimeProvider.cjs');
23
23
 
24
24
  const ChatkitImpl = React.forwardRef((props, ref$1) => {
25
- const { initialConfig, welcome, recommends, onError, plugins, threadList: threadList$1, showHeader = true, placeholder, expandToolGroup = false, expandReasoning = false, expandToolDetail = false, } = props;
25
+ const { initialConfig, welcome, recommends, onError, plugins, threadList: threadList$1, showHeader = true, placeholder, expandToolGroup = false, expandToolDetail = false, } = props;
26
26
  const { threadMap } = index$1.useThreadManagerStore();
27
27
  ref(ref$1, initialConfig, onError);
28
28
  return (jsxRuntime.jsx(ChatkitContext.ChatkitProvider, { value: {
29
29
  ref: ref$1,
30
30
  plugins: plugins || [],
31
31
  showThreadList: threadList$1 !== false,
32
- placeholder: placeholder || '请输入内容',
32
+ placeholder: placeholder || "请输入内容",
33
33
  showHeader,
34
34
  expandToolGroup,
35
35
  expandToolDetail,
36
- expandReasoning,
37
36
  }, children: jsxRuntime.jsxs("div", { className: "flex h-full w-full", children: [threadList$1 !== false &&
38
- (typeof threadList$1 === 'function' ? (threadList$1({
37
+ (typeof threadList$1 === "function" ? (threadList$1({
39
38
  threadList: cloneDeep(values(threadMap)),
40
39
  })) : (jsxRuntime.jsx(threadList, {}))), jsxRuntime.jsx("div", { className: "flex-1 h-full", children: jsxRuntime.jsx(thread.Thread, { welcome: welcome, recommends: recommends }) })] }) }));
41
40
  });
@@ -43,13 +42,13 @@ const Chatkit = (props, refFromProps) => {
43
42
  const { initialConfig, welcome, recommends, onError, toolDisplay, plugins, threadList, showHeader = true, placeholder, expandToolGroup, expandToolDetail, } = props;
44
43
  const { currentThread } = useThread();
45
44
  const { threadMap } = index$1.useThreadManagerStore();
46
- const messages = cloneDeep(threadMap[currentThread?.id || '']?.messages || []) || [];
45
+ const messages = cloneDeep(threadMap[currentThread?.id || ""]?.messages || []) || [];
47
46
  const uiMessages = React.useMemo(() => convertToAssistantMessage(messages, {
48
- toolDisplay: toolDisplay || 'group',
47
+ toolDisplay: toolDisplay || "group",
49
48
  }), [messages]);
50
49
  const innerRef = React.useRef(null);
51
50
  let ref;
52
- if (typeof refFromProps === 'function') {
51
+ if (typeof refFromProps === "function") {
53
52
  refFromProps(innerRef.current);
54
53
  ref = innerRef;
55
54
  }
@@ -62,8 +61,8 @@ const Chatkit = (props, refFromProps) => {
62
61
  const runtime = useExternalStoreRuntime.useExternalStoreRuntime({
63
62
  messages: uiMessages,
64
63
  isLoading: currentThread?.sending,
65
- isDisabled: !!currentThread?.metadata['isInitingSession'],
66
- convertMessage: message => message,
64
+ isDisabled: !!(currentThread?.metadata["isInitingSession"]),
65
+ convertMessage: (message) => message,
67
66
  onNew: async (message) => {
68
67
  const attachments = await Promise.all(message.attachments?.map(async (item) => {
69
68
  return {
@@ -72,19 +71,19 @@ const Chatkit = (props, refFromProps) => {
72
71
  };
73
72
  }) || []);
74
73
  ref.current?.sendMessage({
75
- attaches: attachments.map(item => ({
74
+ attaches: attachments.map((item) => ({
76
75
  id: item.id,
77
76
  attachId: item.id,
78
77
  url: item.base64,
79
- status: 'success',
78
+ status: "success",
80
79
  type: checkMedia(item.contentType),
81
80
  mimeType: item.contentType,
82
81
  })),
83
82
  content: compact([
84
- ...message.content.map(item => {
85
- if (item.type === 'text') {
83
+ ...message.content.map((item) => {
84
+ if (item.type === "text") {
86
85
  return {
87
- type: 'text',
86
+ type: "text",
88
87
  text: item.text,
89
88
  };
90
89
  }
@@ -96,10 +95,10 @@ const Chatkit = (props, refFromProps) => {
96
95
  if (currentThread?.id && parentId)
97
96
  ref.current?.reloadMessage(currentThread?.id, parentId);
98
97
  else {
99
- onError?.(new Error('未找到对应的对话'));
98
+ onError?.(new Error("未找到对应的对话"));
100
99
  useToast.toast({
101
- title: '重载失败',
102
- description: '未找到对应的对话',
100
+ title: "重载失败",
101
+ description: "未找到对应的对话",
103
102
  });
104
103
  }
105
104
  },
@@ -114,32 +113,32 @@ const Chatkit = (props, refFromProps) => {
114
113
  send: async ({ id, file }) => {
115
114
  return {
116
115
  id,
117
- type: 'image',
116
+ type: "image",
118
117
  name: file.name,
119
118
  contentType: file.type,
120
119
  content: [
121
120
  {
122
- type: 'image',
121
+ type: "image",
123
122
  image: file.name,
124
123
  },
125
124
  ],
126
125
  status: {
127
- type: 'complete',
126
+ type: "complete",
128
127
  },
129
128
  file,
130
129
  };
131
130
  },
132
- accept: 'image/*',
131
+ accept: "image/*",
133
132
  add: async ({ file }) => {
134
133
  return {
135
134
  file,
136
135
  id: v4(),
137
- type: 'image',
136
+ type: "image",
138
137
  name: file.name,
139
138
  contentType: file.type,
140
139
  status: {
141
- type: 'running',
142
- reason: 'uploading',
140
+ type: "running",
141
+ reason: "uploading",
143
142
  progress: 0,
144
143
  },
145
144
  };
@@ -147,7 +146,7 @@ const Chatkit = (props, refFromProps) => {
147
146
  },
148
147
  },
149
148
  });
150
- return (jsxRuntime.jsx("div", { className: 'chatkit-wrapper', style: { height: '100%' }, "data-chatkit": true, children: jsxRuntime.jsxs(AssistantRuntimeProvider.AssistantRuntimeProvider, { runtime: runtime, children: [jsxRuntime.jsx(ChatkitImpl, { ref: ref, showHeader: showHeader, recommends: recommends, initialConfig: initialConfig, expandToolGroup: expandToolGroup, expandToolDetail: expandToolDetail, placeholder: placeholder, welcome: welcome, onError: onError, plugins: plugins, threadList: threadList }), jsxRuntime.jsx(toaster.Toaster, {}), jsxRuntime.jsx(executionCard, {})] }) }));
149
+ return (jsxRuntime.jsx("div", { className: "chatkit-wrapper", style: { height: "100%" }, "data-chatkit": true, children: jsxRuntime.jsxs(AssistantRuntimeProvider.AssistantRuntimeProvider, { runtime: runtime, children: [jsxRuntime.jsx(ChatkitImpl, { ref: ref, showHeader: showHeader, recommends: recommends, initialConfig: initialConfig, expandToolGroup: expandToolGroup, expandToolDetail: expandToolDetail, placeholder: placeholder, welcome: welcome, onError: onError, plugins: plugins, threadList: threadList }), jsxRuntime.jsx(toaster.Toaster, {}), jsxRuntime.jsx(executionCard, {})] }) }));
151
150
  };
152
151
  var index = React.forwardRef(Chatkit);
153
152
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/Chatkit/index.tsx"],"sourcesContent":["import {\n ForwardedRef,\n forwardRef,\n MutableRefObject,\n Ref,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { v4 as uuid } from 'uuid';\nimport { ChatkitProps, ChatkitRef } from './types';\nimport { cloneDeep, compact, findLastIndex, isString, values } from 'lodash-es';\nimport { ChatkitProvider } from '@/contexts/ChatkitContext';\nimport useImperativeHandleChatkitRef from './ref';\nimport useThread from '@/hooks/useThread';\nimport { Thread } from '../assistant-ui/thread';\nimport {\n AssistantRuntimeProvider,\n ThreadMessageLike,\n useExternalStoreRuntime,\n} from '@assistant-ui/react';\nimport { useThreadManagerStore, sendMessage, Message } from '@chatkit/core';\nimport convertToAssistantMessage from '@/utils/convertToAssistantMessage';\nimport ThreadList from '../thread-list';\nimport { Thread as ThreadType } from '@chatkit/core/src/types/Thread';\nimport { Toaster } from '../ui/toaster';\nimport { toast } from '@/hooks/use-toast';\nimport ExecutionCard from '../assistant-ui-tools/execution-card';\nimport { convertToBase64 } from '@/utils/convertToBase64';\nimport checkMedia from '@/utils/checkMedia';\nimport { TextMessage } from '@chatkit/core/src/types/Message';\nimport Recommend from '../welcome';\nimport './style.less';\nconst ChatkitImpl = forwardRef(\n (\n props: {\n initialConfig: ChatkitProps['initialConfig'];\n welcome?: React.ReactNode;\n recommends?: string[];\n plugins?: React.ReactNode[];\n onError?: (error: Error) => void;\n placeholder?: string;\n threadList?:\n | React.ReactNode\n | boolean\n | ((props: { threadList: Readonly<ThreadType>[] }) => React.ReactNode);\n showHeader?: boolean;\n expandToolGroup?: boolean;\n expandToolDetail?: boolean;\n expandReasoning?: boolean;\n },\n ref: ForwardedRef<ChatkitRef>,\n ) => {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n plugins,\n threadList,\n showHeader = true,\n placeholder,\n expandToolGroup = false,\n expandReasoning = false,\n expandToolDetail = false,\n } = props;\n const { threadMap } = useThreadManagerStore();\n useImperativeHandleChatkitRef(ref, initialConfig, onError);\n\n return (\n <ChatkitProvider\n value={{\n ref: ref as MutableRefObject<ChatkitRef | null>,\n plugins: plugins || [],\n showThreadList: threadList !== false,\n placeholder: placeholder || '请输入内容',\n showHeader,\n expandToolGroup,\n expandToolDetail,\n expandReasoning,\n }}\n >\n <div className=\"flex h-full w-full\">\n {threadList !== false &&\n (typeof threadList === 'function' ? (\n threadList({\n threadList: cloneDeep(values(threadMap)) as ThreadType[],\n })\n ) : (\n <ThreadList />\n ))}\n <div className=\"flex-1 h-full\">\n <Thread welcome={welcome} recommends={recommends} />\n </div>\n </div>\n </ChatkitProvider>\n );\n },\n);\n\nconst Chatkit = (\n props: ChatkitProps,\n refFromProps: ForwardedRef<ChatkitRef>,\n) => {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n toolDisplay,\n plugins,\n threadList,\n showHeader = true,\n placeholder,\n expandToolGroup,\n expandToolDetail,\n } = props;\n\n const { currentThread } = useThread();\n\n const { threadMap } = useThreadManagerStore();\n const messages =\n cloneDeep(threadMap[currentThread?.id || '']?.messages || []) || [];\n const uiMessages = useMemo(\n () =>\n convertToAssistantMessage(messages as Readonly<Message>[], {\n toolDisplay: toolDisplay || 'group',\n }),\n [messages],\n );\n\n const innerRef = useRef<ChatkitRef>(null);\n\n let ref: MutableRefObject<ChatkitRef | null>;\n if (typeof refFromProps === 'function') {\n refFromProps(innerRef.current);\n ref = innerRef;\n } else if (refFromProps === null) {\n ref = innerRef;\n } else {\n ref = refFromProps;\n }\n\n const runtime = useExternalStoreRuntime({\n messages: uiMessages,\n isLoading: currentThread?.sending,\n isDisabled: !!currentThread?.metadata['isInitingSession'],\n convertMessage: message => message,\n onNew: async message => {\n const attachments = await Promise.all(\n message.attachments?.map(async item => {\n return {\n ...item,\n base64: await convertToBase64(item.file as File),\n };\n }) || [],\n );\n\n ref.current?.sendMessage({\n attaches: attachments.map(item => ({\n id: item.id,\n attachId: item.id,\n url: item.base64,\n status: 'success',\n type: checkMedia(item.contentType),\n mimeType: item.contentType,\n })),\n content: compact([\n ...message.content.map(item => {\n if (item.type === 'text') {\n return {\n type: 'text',\n text: item.text,\n } as TextMessage;\n }\n }),\n ]),\n });\n },\n onReload: async (parentId, config) => {\n if (currentThread?.id && parentId)\n ref.current?.reloadMessage(currentThread?.id, parentId);\n else {\n onError?.(new Error('未找到对应的对话'));\n toast({\n title: '重载失败',\n description: '未找到对应的对话',\n });\n }\n },\n onCancel: async () => {\n ref.current?.abortMessage();\n },\n adapters: {\n attachments: {\n remove: async ({ id }) => {\n console.log(id);\n },\n send: async ({ id, file }) => {\n return {\n id,\n type: 'image',\n name: file.name,\n contentType: file.type,\n content: [\n {\n type: 'image',\n image: file.name,\n },\n ],\n status: {\n type: 'complete',\n },\n file,\n };\n },\n accept: 'image/*',\n add: async ({ file }) => {\n return {\n file,\n id: uuid(),\n type: 'image',\n name: file.name,\n contentType: file.type,\n status: {\n type: 'running',\n reason: 'uploading',\n progress: 0,\n },\n };\n },\n },\n },\n });\n\n return (\n <div className={'chatkit-wrapper'} style={{ height: '100%' }} data-chatkit>\n <AssistantRuntimeProvider runtime={runtime}>\n <ChatkitImpl\n ref={ref}\n showHeader={showHeader}\n recommends={recommends}\n initialConfig={initialConfig}\n expandToolGroup={expandToolGroup}\n expandToolDetail={expandToolDetail}\n placeholder={placeholder}\n welcome={welcome}\n onError={onError}\n plugins={plugins}\n threadList={threadList}\n />\n <Toaster />\n <ExecutionCard />\n </AssistantRuntimeProvider>\n </div>\n );\n};\n\nexport default forwardRef(Chatkit);\n"],"names":["forwardRef","ref","threadList","useThreadManagerStore","useImperativeHandleChatkitRef","_jsx","ChatkitProvider","_jsxs","ThreadList","Thread","useMemo","useRef","useExternalStoreRuntime","convertToBase64","toast","uuid","AssistantRuntimeProvider","Toaster","ExecutionCard"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Chatkit/index.tsx"],"sourcesContent":["\nimport {\n ForwardedRef,\n forwardRef,\n MutableRefObject,\n Ref,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { v4 as uuid } from \"uuid\";\nimport { ChatkitProps, ChatkitRef } from \"./types\";\nimport { cloneDeep, compact, findLastIndex, isString, values } from \"lodash-es\";\nimport { ChatkitProvider,} from \"@/contexts/ChatkitContext\";\nimport useImperativeHandleChatkitRef from \"./ref\";\nimport useThread from \"@/hooks/useThread\";\nimport { Thread } from \"../assistant-ui/thread\";\nimport {\n AssistantRuntimeProvider,\n ThreadMessageLike,\n useExternalStoreRuntime,\n} from \"@assistant-ui/react\";\nimport { useThreadManagerStore, sendMessage, Message } from \"@chatkit/core\";\nimport convertToAssistantMessage from \"@/utils/convertToAssistantMessage\";\nimport ThreadList from \"../thread-list\";\nimport { Thread as ThreadType } from \"@chatkit/core/src/types/Thread\";\nimport { Toaster } from \"../ui/toaster\";\nimport { toast } from \"@/hooks/use-toast\";\nimport ExecutionCard from \"../assistant-ui-tools/execution-card\";\nimport { convertToBase64 } from \"@/utils/convertToBase64\";\nimport checkMedia from \"@/utils/checkMedia\";\nimport { TextMessage } from \"@chatkit/core/src/types/Message\";\nimport Recommend from \"../welcome\";\nimport \"./style.less\";\nconst ChatkitImpl = forwardRef(\n (\n props: {\n initialConfig: ChatkitProps[\"initialConfig\"];\n welcome?: React.ReactNode;\n recommends?: string[];\n plugins?: React.ReactNode[];\n onError?: (error: Error) => void;\n placeholder?: string;\n threadList?:\n | React.ReactNode\n | boolean\n | ((props: { threadList: Readonly<ThreadType>[] }) => React.ReactNode);\n showHeader?: boolean;\n expandToolGroup?: boolean;\n expandToolDetail?: boolean;\n },\n ref: ForwardedRef<ChatkitRef>\n ) => {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n plugins,\n threadList,\n showHeader = true,\n placeholder,\n expandToolGroup = false,\n expandToolDetail = false,\n } = props;\n const { threadMap } = useThreadManagerStore();\n useImperativeHandleChatkitRef(ref, initialConfig, onError);\n return (\n <ChatkitProvider\n value={{\n ref: ref as MutableRefObject<ChatkitRef | null>,\n plugins: plugins || [],\n showThreadList: threadList !== false,\n placeholder: placeholder || \"请输入内容\",\n showHeader,\n expandToolGroup,\n expandToolDetail,\n }}\n >\n <div className=\"flex h-full w-full\">\n {threadList !== false &&\n (typeof threadList === \"function\" ? (\n threadList({\n threadList: cloneDeep(values(threadMap)) as ThreadType[],\n })\n ) : (\n <ThreadList />\n ))}\n <div className=\"flex-1 h-full\">\n <Thread welcome={welcome} recommends={recommends} />\n </div>\n </div>\n </ChatkitProvider>\n );\n }\n);\n\nconst Chatkit = (\n props: ChatkitProps,\n refFromProps: ForwardedRef<ChatkitRef>\n) => {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n toolDisplay,\n plugins,\n threadList,\n showHeader = true,\n placeholder,\n expandToolGroup,\n expandToolDetail,\n } = props;\n\n const { currentThread } = useThread();\n\n const { threadMap } = useThreadManagerStore();\n const messages =\n cloneDeep(threadMap[currentThread?.id || \"\"]?.messages || []) || [];\n const uiMessages = useMemo(\n () =>\n convertToAssistantMessage(messages as Readonly<Message>[], {\n toolDisplay: toolDisplay || \"group\",\n }),\n [messages]\n );\n\n const innerRef = useRef<ChatkitRef>(null);\n\n let ref: MutableRefObject<ChatkitRef | null>;\n if (typeof refFromProps === \"function\") {\n refFromProps(innerRef.current);\n ref = innerRef;\n } else if (refFromProps === null) {\n ref = innerRef;\n } else {\n ref = refFromProps;\n }\n\n\n const runtime = useExternalStoreRuntime({\n messages: uiMessages,\n isLoading: currentThread?.sending,\n isDisabled: !!(currentThread?.metadata[\"isInitingSession\"]),\n convertMessage: (message) => message,\n onNew: async (message) => {\n const attachments = await Promise.all(\n message.attachments?.map(async (item) => {\n return {\n ...item,\n base64: await convertToBase64(item.file as File),\n };\n }) || []\n );\n\n ref.current?.sendMessage({\n attaches: attachments.map((item) => ({\n id: item.id,\n attachId: item.id,\n url: item.base64,\n status: \"success\",\n type: checkMedia(item.contentType),\n mimeType: item.contentType,\n })),\n content: compact([\n ...message.content.map((item) => {\n if (item.type === \"text\") {\n return {\n type: \"text\",\n text: item.text,\n } as TextMessage;\n }\n }),\n ]),\n });\n },\n onReload: async (parentId, config) => {\n if (currentThread?.id && parentId)\n ref.current?.reloadMessage(currentThread?.id, parentId);\n else {\n onError?.(new Error(\"未找到对应的对话\"));\n toast({\n title: \"重载失败\",\n description: \"未找到对应的对话\",\n });\n }\n },\n onCancel: async () => {\n ref.current?.abortMessage();\n },\n adapters: {\n attachments: {\n remove: async ({ id }) => {\n console.log(id);\n },\n send: async ({ id, file }) => {\n return {\n id,\n type: \"image\",\n name: file.name,\n contentType: file.type,\n content: [\n {\n type: \"image\",\n image: file.name,\n },\n ],\n status: {\n type: \"complete\",\n },\n file,\n };\n },\n accept: \"image/*\",\n add: async ({ file }) => {\n return {\n file,\n id: uuid(),\n type: \"image\",\n name: file.name,\n contentType: file.type,\n status: {\n type: \"running\",\n reason: \"uploading\",\n progress: 0,\n },\n };\n },\n },\n },\n });\n\n return (\n <div className={\"chatkit-wrapper\"} style={{ height: \"100%\" }} data-chatkit>\n <AssistantRuntimeProvider runtime={runtime}>\n <ChatkitImpl\n ref={ref}\n showHeader={showHeader}\n recommends={recommends}\n initialConfig={initialConfig}\n expandToolGroup={expandToolGroup}\n expandToolDetail={expandToolDetail}\n placeholder={placeholder}\n welcome={welcome}\n onError={onError}\n plugins={plugins}\n threadList={threadList}\n />\n <Toaster />\n <ExecutionCard />\n </AssistantRuntimeProvider>\n </div>\n );\n};\n\nexport default forwardRef(Chatkit);\n"],"names":["forwardRef","ref","threadList","useThreadManagerStore","useImperativeHandleChatkitRef","_jsx","ChatkitProvider","_jsxs","ThreadList","Thread","useMemo","useRef","useExternalStoreRuntime","convertToBase64","toast","uuid","AssistantRuntimeProvider","Toaster","ExecutionCard"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { ChatkitProps, ChatkitRef } from './types';
2
- import './style.less';
1
+ import { ChatkitProps, ChatkitRef } from "./types";
2
+ import "./style.less";
3
3
  declare const _default: import("react").ForwardRefExoticComponent<ChatkitProps & import("react").RefAttributes<ChatkitRef>>;
4
4
  export default _default;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Chatkit/index.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAsBnD,OAAO,cAAc,CAAC;;AAkOtB,wBAAmC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Chatkit/index.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAsBnD,OAAO,cAAc,CAAC;;AA+NtB,wBAAmC"}
@@ -20,20 +20,19 @@ import v4 from '../../node_modules/.pnpm/uuid@13.0.0/node_modules/uuid/dist/v4.j
20
20
  import { AssistantRuntimeProvider } from '../../node_modules/.pnpm/@assistant-ui_react@0.11.37_patch_hash_ynfhbcwv6lgckkdmenopdkbtmq_@types_react-dom@17.0.2_@ty_7dz2xsf2ib2guiutzhjhoerypu/node_modules/@assistant-ui/react/dist/legacy-runtime/AssistantRuntimeProvider.js';
21
21
 
22
22
  const ChatkitImpl = forwardRef((props, ref) => {
23
- const { initialConfig, welcome, recommends, onError, plugins, threadList, showHeader = true, placeholder, expandToolGroup = false, expandReasoning = false, expandToolDetail = false, } = props;
23
+ const { initialConfig, welcome, recommends, onError, plugins, threadList, showHeader = true, placeholder, expandToolGroup = false, expandToolDetail = false, } = props;
24
24
  const { threadMap } = useThreadManagerStore();
25
25
  useImperativeHandleChatkitRef(ref, initialConfig, onError);
26
26
  return (jsx(ChatkitProvider, { value: {
27
27
  ref: ref,
28
28
  plugins: plugins || [],
29
29
  showThreadList: threadList !== false,
30
- placeholder: placeholder || '请输入内容',
30
+ placeholder: placeholder || "请输入内容",
31
31
  showHeader,
32
32
  expandToolGroup,
33
33
  expandToolDetail,
34
- expandReasoning,
35
34
  }, children: jsxs("div", { className: "flex h-full w-full", children: [threadList !== false &&
36
- (typeof threadList === 'function' ? (threadList({
35
+ (typeof threadList === "function" ? (threadList({
37
36
  threadList: cloneDeep(values(threadMap)),
38
37
  })) : (jsx(ThreadList, {}))), jsx("div", { className: "flex-1 h-full", children: jsx(Thread, { welcome: welcome, recommends: recommends }) })] }) }));
39
38
  });
@@ -41,13 +40,13 @@ const Chatkit = (props, refFromProps) => {
41
40
  const { initialConfig, welcome, recommends, onError, toolDisplay, plugins, threadList, showHeader = true, placeholder, expandToolGroup, expandToolDetail, } = props;
42
41
  const { currentThread } = useThread();
43
42
  const { threadMap } = useThreadManagerStore();
44
- const messages = cloneDeep(threadMap[currentThread?.id || '']?.messages || []) || [];
43
+ const messages = cloneDeep(threadMap[currentThread?.id || ""]?.messages || []) || [];
45
44
  const uiMessages = useMemo(() => convertToAssistantMessage(messages, {
46
- toolDisplay: toolDisplay || 'group',
45
+ toolDisplay: toolDisplay || "group",
47
46
  }), [messages]);
48
47
  const innerRef = useRef(null);
49
48
  let ref;
50
- if (typeof refFromProps === 'function') {
49
+ if (typeof refFromProps === "function") {
51
50
  refFromProps(innerRef.current);
52
51
  ref = innerRef;
53
52
  }
@@ -60,8 +59,8 @@ const Chatkit = (props, refFromProps) => {
60
59
  const runtime = useExternalStoreRuntime({
61
60
  messages: uiMessages,
62
61
  isLoading: currentThread?.sending,
63
- isDisabled: !!currentThread?.metadata['isInitingSession'],
64
- convertMessage: message => message,
62
+ isDisabled: !!(currentThread?.metadata["isInitingSession"]),
63
+ convertMessage: (message) => message,
65
64
  onNew: async (message) => {
66
65
  const attachments = await Promise.all(message.attachments?.map(async (item) => {
67
66
  return {
@@ -70,19 +69,19 @@ const Chatkit = (props, refFromProps) => {
70
69
  };
71
70
  }) || []);
72
71
  ref.current?.sendMessage({
73
- attaches: attachments.map(item => ({
72
+ attaches: attachments.map((item) => ({
74
73
  id: item.id,
75
74
  attachId: item.id,
76
75
  url: item.base64,
77
- status: 'success',
76
+ status: "success",
78
77
  type: checkMedia(item.contentType),
79
78
  mimeType: item.contentType,
80
79
  })),
81
80
  content: compact([
82
- ...message.content.map(item => {
83
- if (item.type === 'text') {
81
+ ...message.content.map((item) => {
82
+ if (item.type === "text") {
84
83
  return {
85
- type: 'text',
84
+ type: "text",
86
85
  text: item.text,
87
86
  };
88
87
  }
@@ -94,10 +93,10 @@ const Chatkit = (props, refFromProps) => {
94
93
  if (currentThread?.id && parentId)
95
94
  ref.current?.reloadMessage(currentThread?.id, parentId);
96
95
  else {
97
- onError?.(new Error('未找到对应的对话'));
96
+ onError?.(new Error("未找到对应的对话"));
98
97
  toast({
99
- title: '重载失败',
100
- description: '未找到对应的对话',
98
+ title: "重载失败",
99
+ description: "未找到对应的对话",
101
100
  });
102
101
  }
103
102
  },
@@ -112,32 +111,32 @@ const Chatkit = (props, refFromProps) => {
112
111
  send: async ({ id, file }) => {
113
112
  return {
114
113
  id,
115
- type: 'image',
114
+ type: "image",
116
115
  name: file.name,
117
116
  contentType: file.type,
118
117
  content: [
119
118
  {
120
- type: 'image',
119
+ type: "image",
121
120
  image: file.name,
122
121
  },
123
122
  ],
124
123
  status: {
125
- type: 'complete',
124
+ type: "complete",
126
125
  },
127
126
  file,
128
127
  };
129
128
  },
130
- accept: 'image/*',
129
+ accept: "image/*",
131
130
  add: async ({ file }) => {
132
131
  return {
133
132
  file,
134
133
  id: v4(),
135
- type: 'image',
134
+ type: "image",
136
135
  name: file.name,
137
136
  contentType: file.type,
138
137
  status: {
139
- type: 'running',
140
- reason: 'uploading',
138
+ type: "running",
139
+ reason: "uploading",
141
140
  progress: 0,
142
141
  },
143
142
  };
@@ -145,7 +144,7 @@ const Chatkit = (props, refFromProps) => {
145
144
  },
146
145
  },
147
146
  });
148
- return (jsx("div", { className: 'chatkit-wrapper', style: { height: '100%' }, "data-chatkit": true, children: jsxs(AssistantRuntimeProvider, { runtime: runtime, children: [jsx(ChatkitImpl, { ref: ref, showHeader: showHeader, recommends: recommends, initialConfig: initialConfig, expandToolGroup: expandToolGroup, expandToolDetail: expandToolDetail, placeholder: placeholder, welcome: welcome, onError: onError, plugins: plugins, threadList: threadList }), jsx(Toaster, {}), jsx(ExecutionCard, {})] }) }));
147
+ return (jsx("div", { className: "chatkit-wrapper", style: { height: "100%" }, "data-chatkit": true, children: jsxs(AssistantRuntimeProvider, { runtime: runtime, children: [jsx(ChatkitImpl, { ref: ref, showHeader: showHeader, recommends: recommends, initialConfig: initialConfig, expandToolGroup: expandToolGroup, expandToolDetail: expandToolDetail, placeholder: placeholder, welcome: welcome, onError: onError, plugins: plugins, threadList: threadList }), jsx(Toaster, {}), jsx(ExecutionCard, {})] }) }));
149
148
  };
150
149
  var index = forwardRef(Chatkit);
151
150
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Chatkit/index.tsx"],"sourcesContent":["import {\n ForwardedRef,\n forwardRef,\n MutableRefObject,\n Ref,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { v4 as uuid } from 'uuid';\nimport { ChatkitProps, ChatkitRef } from './types';\nimport { cloneDeep, compact, findLastIndex, isString, values } from 'lodash-es';\nimport { ChatkitProvider } from '@/contexts/ChatkitContext';\nimport useImperativeHandleChatkitRef from './ref';\nimport useThread from '@/hooks/useThread';\nimport { Thread } from '../assistant-ui/thread';\nimport {\n AssistantRuntimeProvider,\n ThreadMessageLike,\n useExternalStoreRuntime,\n} from '@assistant-ui/react';\nimport { useThreadManagerStore, sendMessage, Message } from '@chatkit/core';\nimport convertToAssistantMessage from '@/utils/convertToAssistantMessage';\nimport ThreadList from '../thread-list';\nimport { Thread as ThreadType } from '@chatkit/core/src/types/Thread';\nimport { Toaster } from '../ui/toaster';\nimport { toast } from '@/hooks/use-toast';\nimport ExecutionCard from '../assistant-ui-tools/execution-card';\nimport { convertToBase64 } from '@/utils/convertToBase64';\nimport checkMedia from '@/utils/checkMedia';\nimport { TextMessage } from '@chatkit/core/src/types/Message';\nimport Recommend from '../welcome';\nimport './style.less';\nconst ChatkitImpl = forwardRef(\n (\n props: {\n initialConfig: ChatkitProps['initialConfig'];\n welcome?: React.ReactNode;\n recommends?: string[];\n plugins?: React.ReactNode[];\n onError?: (error: Error) => void;\n placeholder?: string;\n threadList?:\n | React.ReactNode\n | boolean\n | ((props: { threadList: Readonly<ThreadType>[] }) => React.ReactNode);\n showHeader?: boolean;\n expandToolGroup?: boolean;\n expandToolDetail?: boolean;\n expandReasoning?: boolean;\n },\n ref: ForwardedRef<ChatkitRef>,\n ) => {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n plugins,\n threadList,\n showHeader = true,\n placeholder,\n expandToolGroup = false,\n expandReasoning = false,\n expandToolDetail = false,\n } = props;\n const { threadMap } = useThreadManagerStore();\n useImperativeHandleChatkitRef(ref, initialConfig, onError);\n\n return (\n <ChatkitProvider\n value={{\n ref: ref as MutableRefObject<ChatkitRef | null>,\n plugins: plugins || [],\n showThreadList: threadList !== false,\n placeholder: placeholder || '请输入内容',\n showHeader,\n expandToolGroup,\n expandToolDetail,\n expandReasoning,\n }}\n >\n <div className=\"flex h-full w-full\">\n {threadList !== false &&\n (typeof threadList === 'function' ? (\n threadList({\n threadList: cloneDeep(values(threadMap)) as ThreadType[],\n })\n ) : (\n <ThreadList />\n ))}\n <div className=\"flex-1 h-full\">\n <Thread welcome={welcome} recommends={recommends} />\n </div>\n </div>\n </ChatkitProvider>\n );\n },\n);\n\nconst Chatkit = (\n props: ChatkitProps,\n refFromProps: ForwardedRef<ChatkitRef>,\n) => {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n toolDisplay,\n plugins,\n threadList,\n showHeader = true,\n placeholder,\n expandToolGroup,\n expandToolDetail,\n } = props;\n\n const { currentThread } = useThread();\n\n const { threadMap } = useThreadManagerStore();\n const messages =\n cloneDeep(threadMap[currentThread?.id || '']?.messages || []) || [];\n const uiMessages = useMemo(\n () =>\n convertToAssistantMessage(messages as Readonly<Message>[], {\n toolDisplay: toolDisplay || 'group',\n }),\n [messages],\n );\n\n const innerRef = useRef<ChatkitRef>(null);\n\n let ref: MutableRefObject<ChatkitRef | null>;\n if (typeof refFromProps === 'function') {\n refFromProps(innerRef.current);\n ref = innerRef;\n } else if (refFromProps === null) {\n ref = innerRef;\n } else {\n ref = refFromProps;\n }\n\n const runtime = useExternalStoreRuntime({\n messages: uiMessages,\n isLoading: currentThread?.sending,\n isDisabled: !!currentThread?.metadata['isInitingSession'],\n convertMessage: message => message,\n onNew: async message => {\n const attachments = await Promise.all(\n message.attachments?.map(async item => {\n return {\n ...item,\n base64: await convertToBase64(item.file as File),\n };\n }) || [],\n );\n\n ref.current?.sendMessage({\n attaches: attachments.map(item => ({\n id: item.id,\n attachId: item.id,\n url: item.base64,\n status: 'success',\n type: checkMedia(item.contentType),\n mimeType: item.contentType,\n })),\n content: compact([\n ...message.content.map(item => {\n if (item.type === 'text') {\n return {\n type: 'text',\n text: item.text,\n } as TextMessage;\n }\n }),\n ]),\n });\n },\n onReload: async (parentId, config) => {\n if (currentThread?.id && parentId)\n ref.current?.reloadMessage(currentThread?.id, parentId);\n else {\n onError?.(new Error('未找到对应的对话'));\n toast({\n title: '重载失败',\n description: '未找到对应的对话',\n });\n }\n },\n onCancel: async () => {\n ref.current?.abortMessage();\n },\n adapters: {\n attachments: {\n remove: async ({ id }) => {\n console.log(id);\n },\n send: async ({ id, file }) => {\n return {\n id,\n type: 'image',\n name: file.name,\n contentType: file.type,\n content: [\n {\n type: 'image',\n image: file.name,\n },\n ],\n status: {\n type: 'complete',\n },\n file,\n };\n },\n accept: 'image/*',\n add: async ({ file }) => {\n return {\n file,\n id: uuid(),\n type: 'image',\n name: file.name,\n contentType: file.type,\n status: {\n type: 'running',\n reason: 'uploading',\n progress: 0,\n },\n };\n },\n },\n },\n });\n\n return (\n <div className={'chatkit-wrapper'} style={{ height: '100%' }} data-chatkit>\n <AssistantRuntimeProvider runtime={runtime}>\n <ChatkitImpl\n ref={ref}\n showHeader={showHeader}\n recommends={recommends}\n initialConfig={initialConfig}\n expandToolGroup={expandToolGroup}\n expandToolDetail={expandToolDetail}\n placeholder={placeholder}\n welcome={welcome}\n onError={onError}\n plugins={plugins}\n threadList={threadList}\n />\n <Toaster />\n <ExecutionCard />\n </AssistantRuntimeProvider>\n </div>\n );\n};\n\nexport default forwardRef(Chatkit);\n"],"names":["_jsx","_jsxs","uuid"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Chatkit/index.tsx"],"sourcesContent":["\nimport {\n ForwardedRef,\n forwardRef,\n MutableRefObject,\n Ref,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { v4 as uuid } from \"uuid\";\nimport { ChatkitProps, ChatkitRef } from \"./types\";\nimport { cloneDeep, compact, findLastIndex, isString, values } from \"lodash-es\";\nimport { ChatkitProvider,} from \"@/contexts/ChatkitContext\";\nimport useImperativeHandleChatkitRef from \"./ref\";\nimport useThread from \"@/hooks/useThread\";\nimport { Thread } from \"../assistant-ui/thread\";\nimport {\n AssistantRuntimeProvider,\n ThreadMessageLike,\n useExternalStoreRuntime,\n} from \"@assistant-ui/react\";\nimport { useThreadManagerStore, sendMessage, Message } from \"@chatkit/core\";\nimport convertToAssistantMessage from \"@/utils/convertToAssistantMessage\";\nimport ThreadList from \"../thread-list\";\nimport { Thread as ThreadType } from \"@chatkit/core/src/types/Thread\";\nimport { Toaster } from \"../ui/toaster\";\nimport { toast } from \"@/hooks/use-toast\";\nimport ExecutionCard from \"../assistant-ui-tools/execution-card\";\nimport { convertToBase64 } from \"@/utils/convertToBase64\";\nimport checkMedia from \"@/utils/checkMedia\";\nimport { TextMessage } from \"@chatkit/core/src/types/Message\";\nimport Recommend from \"../welcome\";\nimport \"./style.less\";\nconst ChatkitImpl = forwardRef(\n (\n props: {\n initialConfig: ChatkitProps[\"initialConfig\"];\n welcome?: React.ReactNode;\n recommends?: string[];\n plugins?: React.ReactNode[];\n onError?: (error: Error) => void;\n placeholder?: string;\n threadList?:\n | React.ReactNode\n | boolean\n | ((props: { threadList: Readonly<ThreadType>[] }) => React.ReactNode);\n showHeader?: boolean;\n expandToolGroup?: boolean;\n expandToolDetail?: boolean;\n },\n ref: ForwardedRef<ChatkitRef>\n ) => {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n plugins,\n threadList,\n showHeader = true,\n placeholder,\n expandToolGroup = false,\n expandToolDetail = false,\n } = props;\n const { threadMap } = useThreadManagerStore();\n useImperativeHandleChatkitRef(ref, initialConfig, onError);\n return (\n <ChatkitProvider\n value={{\n ref: ref as MutableRefObject<ChatkitRef | null>,\n plugins: plugins || [],\n showThreadList: threadList !== false,\n placeholder: placeholder || \"请输入内容\",\n showHeader,\n expandToolGroup,\n expandToolDetail,\n }}\n >\n <div className=\"flex h-full w-full\">\n {threadList !== false &&\n (typeof threadList === \"function\" ? (\n threadList({\n threadList: cloneDeep(values(threadMap)) as ThreadType[],\n })\n ) : (\n <ThreadList />\n ))}\n <div className=\"flex-1 h-full\">\n <Thread welcome={welcome} recommends={recommends} />\n </div>\n </div>\n </ChatkitProvider>\n );\n }\n);\n\nconst Chatkit = (\n props: ChatkitProps,\n refFromProps: ForwardedRef<ChatkitRef>\n) => {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n toolDisplay,\n plugins,\n threadList,\n showHeader = true,\n placeholder,\n expandToolGroup,\n expandToolDetail,\n } = props;\n\n const { currentThread } = useThread();\n\n const { threadMap } = useThreadManagerStore();\n const messages =\n cloneDeep(threadMap[currentThread?.id || \"\"]?.messages || []) || [];\n const uiMessages = useMemo(\n () =>\n convertToAssistantMessage(messages as Readonly<Message>[], {\n toolDisplay: toolDisplay || \"group\",\n }),\n [messages]\n );\n\n const innerRef = useRef<ChatkitRef>(null);\n\n let ref: MutableRefObject<ChatkitRef | null>;\n if (typeof refFromProps === \"function\") {\n refFromProps(innerRef.current);\n ref = innerRef;\n } else if (refFromProps === null) {\n ref = innerRef;\n } else {\n ref = refFromProps;\n }\n\n\n const runtime = useExternalStoreRuntime({\n messages: uiMessages,\n isLoading: currentThread?.sending,\n isDisabled: !!(currentThread?.metadata[\"isInitingSession\"]),\n convertMessage: (message) => message,\n onNew: async (message) => {\n const attachments = await Promise.all(\n message.attachments?.map(async (item) => {\n return {\n ...item,\n base64: await convertToBase64(item.file as File),\n };\n }) || []\n );\n\n ref.current?.sendMessage({\n attaches: attachments.map((item) => ({\n id: item.id,\n attachId: item.id,\n url: item.base64,\n status: \"success\",\n type: checkMedia(item.contentType),\n mimeType: item.contentType,\n })),\n content: compact([\n ...message.content.map((item) => {\n if (item.type === \"text\") {\n return {\n type: \"text\",\n text: item.text,\n } as TextMessage;\n }\n }),\n ]),\n });\n },\n onReload: async (parentId, config) => {\n if (currentThread?.id && parentId)\n ref.current?.reloadMessage(currentThread?.id, parentId);\n else {\n onError?.(new Error(\"未找到对应的对话\"));\n toast({\n title: \"重载失败\",\n description: \"未找到对应的对话\",\n });\n }\n },\n onCancel: async () => {\n ref.current?.abortMessage();\n },\n adapters: {\n attachments: {\n remove: async ({ id }) => {\n console.log(id);\n },\n send: async ({ id, file }) => {\n return {\n id,\n type: \"image\",\n name: file.name,\n contentType: file.type,\n content: [\n {\n type: \"image\",\n image: file.name,\n },\n ],\n status: {\n type: \"complete\",\n },\n file,\n };\n },\n accept: \"image/*\",\n add: async ({ file }) => {\n return {\n file,\n id: uuid(),\n type: \"image\",\n name: file.name,\n contentType: file.type,\n status: {\n type: \"running\",\n reason: \"uploading\",\n progress: 0,\n },\n };\n },\n },\n },\n });\n\n return (\n <div className={\"chatkit-wrapper\"} style={{ height: \"100%\" }} data-chatkit>\n <AssistantRuntimeProvider runtime={runtime}>\n <ChatkitImpl\n ref={ref}\n showHeader={showHeader}\n recommends={recommends}\n initialConfig={initialConfig}\n expandToolGroup={expandToolGroup}\n expandToolDetail={expandToolDetail}\n placeholder={placeholder}\n welcome={welcome}\n onError={onError}\n plugins={plugins}\n threadList={threadList}\n />\n <Toaster />\n <ExecutionCard />\n </AssistantRuntimeProvider>\n </div>\n );\n};\n\nexport default forwardRef(Chatkit);\n"],"names":["_jsx","_jsxs","uuid"],"mappings":"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"}
@@ -6,7 +6,6 @@ var markdownText = require('./markdown-text.cjs');
6
6
  var collapsible = require('../ui/collapsible.cjs');
7
7
  var utils = require('../../lib/utils.cjs');
8
8
  var SpeakAiLineIcon = require('../../assets/SpeakAiLineIcon.cjs');
9
- var ChatkitContext = require('../../contexts/ChatkitContext.cjs');
10
9
  var useScrollLock = require('../../node_modules/.pnpm/@assistant-ui_react@0.11.37_patch_hash_ynfhbcwv6lgckkdmenopdkbtmq_@types_react-dom@17.0.2_@ty_7dz2xsf2ib2guiutzhjhoerypu/node_modules/@assistant-ui/react/dist/primitives/reasoning/useScrollLock.cjs');
11
10
  var chevronDown = require('../../node_modules/.pnpm/lucide-react@0.552.0_react@17.0.2/node_modules/lucide-react/dist/esm/icons/chevron-down.cjs');
12
11
  var useAssistantState = require('../../node_modules/.pnpm/@assistant-ui_react@0.11.37_patch_hash_ynfhbcwv6lgckkdmenopdkbtmq_@types_react-dom@17.0.2_@ty_7dz2xsf2ib2guiutzhjhoerypu/node_modules/@assistant-ui/react/dist/context/react/hooks/useAssistantState.cjs');
@@ -19,8 +18,7 @@ const SHIMMER_DURATION = 1000;
19
18
  */
20
19
  const ReasoningRoot = ({ className, children }) => {
21
20
  const collapsibleRef = React.useRef(null);
22
- const { expandReasoning } = ChatkitContext.useChatkitContext();
23
- const [isOpen, setIsOpen] = React.useState(expandReasoning);
21
+ const [isOpen, setIsOpen] = React.useState(false);
24
22
  const lockScroll = useScrollLock.useScrollLock(collapsibleRef, ANIMATION_DURATION);
25
23
  const handleOpenChange = React.useCallback((open) => {
26
24
  if (!open) {
@@ -1 +1 @@
1
- {"version":3,"file":"reasoning.cjs","sources":["../../../src/components/assistant-ui/reasoning.tsx"],"sourcesContent":["\"use client\";\n\nimport { BrainIcon, ChevronDownIcon } from \"lucide-react\";\nimport { createCollapsibleScope } from \"@radix-ui/react-collapsible\";\nimport {\n memo,\n useCallback,\n useContext,\n useRef,\n useState,\n type FC,\n type PropsWithChildren,\n} from \"react\";\n\nimport {\n useScrollLock,\n useAssistantState,\n type ReasoningMessagePartComponent,\n type ReasoningGroupComponent,\n} from \"@assistant-ui/react\";\n\nimport { MarkdownText } from \"@/components/assistant-ui/markdown-text\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\";\nimport { cn } from \"@/lib/utils\";\nimport SpeakAiLine from \"@/assets/SpeakAiLineIcon\";\nimport { useChatkitContext } from \"@/contexts/ChatkitContext\";\n\nconst ANIMATION_DURATION = 200;\nconst SHIMMER_DURATION = 1000;\n\n/**\n * Root collapsible container that manages open/closed state and scroll lock.\n * Provides animation timing via CSS variable and prevents scroll jumps on collapse.\n */\nconst ReasoningRoot: FC<\n PropsWithChildren<{\n className?: string;\n }>\n> = ({ className, children }) => {\n const collapsibleRef = useRef<HTMLDivElement>(null);\n const { expandReasoning }=useChatkitContext()\n const [isOpen, setIsOpen] = useState(expandReasoning);\n const lockScroll = useScrollLock(collapsibleRef, ANIMATION_DURATION);\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!open) {\n lockScroll();\n }\n setIsOpen(open);\n },\n [lockScroll]\n );\n return (\n <Collapsible\n ref={collapsibleRef}\n open={isOpen}\n onOpenChange={handleOpenChange}\n className={cn(\"aui-reasoning-root mb-4 h-fit w-full\", className)}\n style={\n {\n \"--animation-duration\": `${ANIMATION_DURATION}ms`,\n \"--shimmer-duration\": `${SHIMMER_DURATION}ms`,\n } as React.CSSProperties\n }\n >\n {children}\n </Collapsible>\n );\n};\n\nReasoningRoot.displayName = \"ReasoningRoot\";\n\n/**\n * Gradient overlay that softens the bottom edge during expand/collapse animations.\n * Animation: Fades out with delay when opening and fades back in when closing.\n */\nconst GradientFade: FC<{ className?: string }> = ({ className }) => (\n <div\n className={cn(\n \"aui-reasoning-fade pointer-events-none absolute inset-x-0 bottom-0 z-10 h-16\",\n \"bg-[linear-gradient(to_top,var(--color-background),transparent)]\",\n \"animate-in fade-in-0\",\n \"group-data-[state=open]/collapsible-content:animate-out\",\n \"group-data-[state=open]/collapsible-content:fade-out-0\",\n \"group-data-[state=open]/collapsible-content:delay-[calc(var(--animation-duration)*0.75)]\", // calc for timing the delay\n \"group-data-[state=open]/collapsible-content:fill-mode-forwards\",\n \"duration-(--animation-duration)\",\n \"group-data-[state=open]/collapsible-content:duration-(--animation-duration)\",\n className\n )}\n />\n);\n\n/**\n * Trigger button for the Reasoning collapsible.\n * Composed of icons, label, and text shimmer animation when reasoning is being streamed.\n */\nconst ReasoningTrigger: FC<{\n active: boolean;\n className?: string;\n isOpen: boolean;\n}> = ({ active, className, isOpen }) => {\n return (\n <CollapsibleTrigger\n asChild\n className={cn(\n \"aui-reasoning-trigger group/trigger data-[state=open]:border-b border-[##0000001a] flex items-center justify-between gap-2 py-[6px] pl-[8px] pr-[12px] text-sm text-muted-foreground transition-colors hover:text-foreground\",\n className\n )}\n >\n <div>\n <div className=\"flex items-center gap-0\">\n <div className=\"aui-reasoning-trigger-icon size-4 shrink-0 w-[28px] h-[28px] flex items-center justify-center\">\n <SpeakAiLine />\n </div>\n <span className=\"aui-reasoning-trigger-label-wrapper relative inline-block leading-none\">\n <span>{!active ? \"思考过程\" : \"深度思考中...\"}</span>\n </span>\n </div>\n <ChevronDownIcon\n className={cn(\n \"aui-reasoning-trigger-chevron mt-0.5 size-4 shrink-0\",\n \"transition-transform duration-(--animation-duration) ease-out\",\n \"group-data-[state=closed]/trigger:-rotate-90\",\n \"group-data-[state=open]/trigger:rotate-0\"\n )}\n />\n </div>\n </CollapsibleTrigger>\n );\n};\n/**\n * Collapsible content wrapper that handles height expand/collapse animation.\n * Animation: Height animates up (collapse) and down (expand).\n * Also provides group context for child animations via data-state attributes.\n */\nconst ReasoningContent: FC<\n PropsWithChildren<{\n className?: string;\n \"aria-busy\"?: boolean;\n }>\n> = ({ className, children, \"aria-busy\": ariaBusy }) => (\n <CollapsibleContent\n className={cn(\n \"aui-reasoning-content relative overflow-hidden text-sm text-muted-foreground outline-none\",\n \"group/collapsible-content ease-out\",\n \"data-[state=closed]:animate-collapsible-up\",\n \"data-[state=open]:animate-collapsible-down\",\n \"data-[state=closed]:fill-mode-forwards\",\n \"data-[state=closed]:pointer-events-none\",\n \"data-[state=open]:duration-(--animation-duration)\",\n \"data-[state=closed]:duration-(--animation-duration)\",\n className\n )}\n aria-busy={ariaBusy}\n >\n {children}\n <GradientFade />\n </CollapsibleContent>\n);\n\nReasoningContent.displayName = \"ReasoningContent\";\n\n/**\n * Text content wrapper that animates the reasoning text visibility.\n * Animation: Slides in from top + fades in when opening, reverses when closing.\n * Reacts to parent ReasoningContent's data-state via Radix group selectors.\n */\nconst ReasoningText: FC<\n PropsWithChildren<{\n className?: string;\n }>\n> = ({ className, children }) => (\n <div\n className={cn(\n \"aui-reasoning-text relative z-0 space-y-4 pt-4 pl-6 leading-relaxed\",\n \"transform-gpu transition-[transform,opacity]\",\n \"text-[#86909C]\",\n \"group-data-[state=open]/collapsible-content:animate-in\",\n \"group-data-[state=closed]/collapsible-content:animate-out\",\n \"group-data-[state=open]/collapsible-content:fade-in-0\",\n \"group-data-[state=closed]/collapsible-content:fade-out-0\",\n \"group-data-[state=open]/collapsible-content:slide-in-from-top-4\",\n \"group-data-[state=closed]/collapsible-content:slide-out-to-top-4\",\n \"group-data-[state=open]/collapsible-content:duration-(--animation-duration)\",\n \"group-data-[state=closed]/collapsible-content:duration-(--animation-duration)\",\n \"[&_p]:-mb-2\",\n className\n )}\n >\n {children}\n </div>\n);\n\nReasoningText.displayName = \"ReasoningText\";\n\n/**\n * Renders a single reasoning part's text with markdown support.\n * Consecutive reasoning parts are automatically grouped by ReasoningGroup.\n *\n * Pass Reasoning to MessagePrimitive.Parts in thread.tsx\n *\n * @example:\n * ```tsx\n * <MessagePrimitive.Parts\n * components={{\n * Reasoning: Reasoning,\n * ReasoningGroup: ReasoningGroup,\n * }}\n * />\n * ```\n */\nconst ReasoningImpl: ReasoningMessagePartComponent = () => <MarkdownText />;\n\n/**\n * Collapsible wrapper that groups consecutive reasoning parts together.\n * Includes scroll lock to prevent page jumps during collapse animation.\n *\n * Pass ReasoningGroup to MessagePrimitive.Parts in thread.tsx\n *\n * @example:\n * ```tsx\n * <MessagePrimitive.Parts\n * components={{\n * Reasoning: Reasoning,\n * ReasoningGroup: ReasoningGroup,\n * }}\n * />\n * ```\n */\nconst ReasoningGroupImpl: ReasoningGroupComponent = ({\n children,\n startIndex,\n endIndex,\n}) => {\n /**\n * Detects if reasoning is currently streaming within this group's range.\n */\n const isReasoningStreaming = useAssistantState(({ message }) => {\n if (message.status?.type !== \"running\") return false;\n const lastIndex = message.parts.length - 1;\n if (lastIndex < 0) return false;\n const lastType = message.parts[lastIndex]?.type;\n if (lastType !== \"reasoning\") return false;\n return lastIndex >= startIndex && lastIndex <= endIndex;\n });\n\n return (\n <ReasoningRoot className=\"border-[1px] rounded-[8px] border-[#0000001A] data-[state=closed]:w-[160px] data-[state=open]:w-full\">\n <ReasoningTrigger\n active={isReasoningStreaming}\n isOpen={isReasoningStreaming}\n />\n\n <ReasoningContent aria-busy={isReasoningStreaming}>\n <ReasoningText>{children}</ReasoningText>\n </ReasoningContent>\n </ReasoningRoot>\n );\n};\n\nexport const Reasoning = memo(ReasoningImpl);\nReasoning.displayName = \"Reasoning\";\n\nexport const ReasoningGroup = memo(ReasoningGroupImpl);\nReasoningGroup.displayName = \"ReasoningGroup\";\n"],"names":["useRef","useChatkitContext","useState","useScrollLock","useCallback","_jsx","Collapsible","cn","CollapsibleTrigger","_jsxs","SpeakAiLine","ChevronDownIcon","CollapsibleContent","MarkdownText","useAssistantState","memo"],"mappings":"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"}
1
+ {"version":3,"file":"reasoning.cjs","sources":["../../../src/components/assistant-ui/reasoning.tsx"],"sourcesContent":["\"use client\";\n\nimport { BrainIcon, ChevronDownIcon } from \"lucide-react\";\nimport { createCollapsibleScope } from \"@radix-ui/react-collapsible\";\nimport {\n memo,\n useCallback,\n useContext,\n useRef,\n useState,\n type FC,\n type PropsWithChildren,\n} from \"react\";\n\nimport {\n useScrollLock,\n useAssistantState,\n type ReasoningMessagePartComponent,\n type ReasoningGroupComponent,\n} from \"@assistant-ui/react\";\n\nimport { MarkdownText } from \"@/components/assistant-ui/markdown-text\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\";\nimport { cn } from \"@/lib/utils\";\nimport SpeakAiLine from \"@/assets/SpeakAiLineIcon\";\n\nconst ANIMATION_DURATION = 200;\nconst SHIMMER_DURATION = 1000;\n\n/**\n * Root collapsible container that manages open/closed state and scroll lock.\n * Provides animation timing via CSS variable and prevents scroll jumps on collapse.\n */\nconst ReasoningRoot: FC<\n PropsWithChildren<{\n className?: string;\n }>\n> = ({ className, children }) => {\n const collapsibleRef = useRef<HTMLDivElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n const lockScroll = useScrollLock(collapsibleRef, ANIMATION_DURATION);\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!open) {\n lockScroll();\n }\n setIsOpen(open);\n },\n [lockScroll]\n );\n return (\n <Collapsible\n ref={collapsibleRef}\n open={isOpen}\n onOpenChange={handleOpenChange}\n className={cn(\"aui-reasoning-root mb-4 h-fit w-full\", className)}\n style={\n {\n \"--animation-duration\": `${ANIMATION_DURATION}ms`,\n \"--shimmer-duration\": `${SHIMMER_DURATION}ms`,\n } as React.CSSProperties\n }\n >\n {children}\n </Collapsible>\n );\n};\n\nReasoningRoot.displayName = \"ReasoningRoot\";\n\n/**\n * Gradient overlay that softens the bottom edge during expand/collapse animations.\n * Animation: Fades out with delay when opening and fades back in when closing.\n */\nconst GradientFade: FC<{ className?: string }> = ({ className }) => (\n <div\n className={cn(\n \"aui-reasoning-fade pointer-events-none absolute inset-x-0 bottom-0 z-10 h-16\",\n \"bg-[linear-gradient(to_top,var(--color-background),transparent)]\",\n \"animate-in fade-in-0\",\n \"group-data-[state=open]/collapsible-content:animate-out\",\n \"group-data-[state=open]/collapsible-content:fade-out-0\",\n \"group-data-[state=open]/collapsible-content:delay-[calc(var(--animation-duration)*0.75)]\", // calc for timing the delay\n \"group-data-[state=open]/collapsible-content:fill-mode-forwards\",\n \"duration-(--animation-duration)\",\n \"group-data-[state=open]/collapsible-content:duration-(--animation-duration)\",\n className\n )}\n />\n);\n\n/**\n * Trigger button for the Reasoning collapsible.\n * Composed of icons, label, and text shimmer animation when reasoning is being streamed.\n */\nconst ReasoningTrigger: FC<{\n active: boolean;\n className?: string;\n isOpen: boolean;\n}> = ({ active, className, isOpen }) => {\n return (\n <CollapsibleTrigger\n asChild\n className={cn(\n \"aui-reasoning-trigger group/trigger data-[state=open]:border-b border-[##0000001a] flex items-center justify-between gap-2 py-[6px] pl-[8px] pr-[12px] text-sm text-muted-foreground transition-colors hover:text-foreground\",\n className\n )}\n >\n <div>\n <div className=\"flex items-center gap-0\">\n <div className=\"aui-reasoning-trigger-icon size-4 shrink-0 w-[28px] h-[28px] flex items-center justify-center\">\n <SpeakAiLine />\n </div>\n <span className=\"aui-reasoning-trigger-label-wrapper relative inline-block leading-none\">\n <span>{!active ? \"思考过程\" : \"深度思考中...\"}</span>\n </span>\n </div>\n <ChevronDownIcon\n className={cn(\n \"aui-reasoning-trigger-chevron mt-0.5 size-4 shrink-0\",\n \"transition-transform duration-(--animation-duration) ease-out\",\n \"group-data-[state=closed]/trigger:-rotate-90\",\n \"group-data-[state=open]/trigger:rotate-0\"\n )}\n />\n </div>\n </CollapsibleTrigger>\n );\n};\n/**\n * Collapsible content wrapper that handles height expand/collapse animation.\n * Animation: Height animates up (collapse) and down (expand).\n * Also provides group context for child animations via data-state attributes.\n */\nconst ReasoningContent: FC<\n PropsWithChildren<{\n className?: string;\n \"aria-busy\"?: boolean;\n }>\n> = ({ className, children, \"aria-busy\": ariaBusy }) => (\n <CollapsibleContent\n className={cn(\n \"aui-reasoning-content relative overflow-hidden text-sm text-muted-foreground outline-none\",\n \"group/collapsible-content ease-out\",\n \"data-[state=closed]:animate-collapsible-up\",\n \"data-[state=open]:animate-collapsible-down\",\n \"data-[state=closed]:fill-mode-forwards\",\n \"data-[state=closed]:pointer-events-none\",\n \"data-[state=open]:duration-(--animation-duration)\",\n \"data-[state=closed]:duration-(--animation-duration)\",\n className\n )}\n aria-busy={ariaBusy}\n >\n {children}\n <GradientFade />\n </CollapsibleContent>\n);\n\nReasoningContent.displayName = \"ReasoningContent\";\n\n/**\n * Text content wrapper that animates the reasoning text visibility.\n * Animation: Slides in from top + fades in when opening, reverses when closing.\n * Reacts to parent ReasoningContent's data-state via Radix group selectors.\n */\nconst ReasoningText: FC<\n PropsWithChildren<{\n className?: string;\n }>\n> = ({ className, children }) => (\n <div\n className={cn(\n \"aui-reasoning-text relative z-0 space-y-4 pt-4 pl-6 leading-relaxed\",\n \"transform-gpu transition-[transform,opacity]\",\n \"text-[#86909C]\",\n \"group-data-[state=open]/collapsible-content:animate-in\",\n \"group-data-[state=closed]/collapsible-content:animate-out\",\n \"group-data-[state=open]/collapsible-content:fade-in-0\",\n \"group-data-[state=closed]/collapsible-content:fade-out-0\",\n \"group-data-[state=open]/collapsible-content:slide-in-from-top-4\",\n \"group-data-[state=closed]/collapsible-content:slide-out-to-top-4\",\n \"group-data-[state=open]/collapsible-content:duration-(--animation-duration)\",\n \"group-data-[state=closed]/collapsible-content:duration-(--animation-duration)\",\n \"[&_p]:-mb-2\",\n className\n )}\n >\n {children}\n </div>\n);\n\nReasoningText.displayName = \"ReasoningText\";\n\n/**\n * Renders a single reasoning part's text with markdown support.\n * Consecutive reasoning parts are automatically grouped by ReasoningGroup.\n *\n * Pass Reasoning to MessagePrimitive.Parts in thread.tsx\n *\n * @example:\n * ```tsx\n * <MessagePrimitive.Parts\n * components={{\n * Reasoning: Reasoning,\n * ReasoningGroup: ReasoningGroup,\n * }}\n * />\n * ```\n */\nconst ReasoningImpl: ReasoningMessagePartComponent = () => <MarkdownText />;\n\n/**\n * Collapsible wrapper that groups consecutive reasoning parts together.\n * Includes scroll lock to prevent page jumps during collapse animation.\n *\n * Pass ReasoningGroup to MessagePrimitive.Parts in thread.tsx\n *\n * @example:\n * ```tsx\n * <MessagePrimitive.Parts\n * components={{\n * Reasoning: Reasoning,\n * ReasoningGroup: ReasoningGroup,\n * }}\n * />\n * ```\n */\nconst ReasoningGroupImpl: ReasoningGroupComponent = ({\n children,\n startIndex,\n endIndex,\n}) => {\n /**\n * Detects if reasoning is currently streaming within this group's range.\n */\n const isReasoningStreaming = useAssistantState(({ message }) => {\n if (message.status?.type !== \"running\") return false;\n const lastIndex = message.parts.length - 1;\n if (lastIndex < 0) return false;\n const lastType = message.parts[lastIndex]?.type;\n if (lastType !== \"reasoning\") return false;\n return lastIndex >= startIndex && lastIndex <= endIndex;\n });\n\n return (\n <ReasoningRoot className=\"border-[1px] rounded-[8px] border-[#0000001A] data-[state=closed]:w-[160px] data-[state=open]:w-full\">\n <ReasoningTrigger\n active={isReasoningStreaming}\n isOpen={isReasoningStreaming}\n />\n\n <ReasoningContent aria-busy={isReasoningStreaming}>\n <ReasoningText>{children}</ReasoningText>\n </ReasoningContent>\n </ReasoningRoot>\n );\n};\n\nexport const Reasoning = memo(ReasoningImpl);\nReasoning.displayName = \"Reasoning\";\n\nexport const ReasoningGroup = memo(ReasoningGroupImpl);\nReasoningGroup.displayName = \"ReasoningGroup\";\n"],"names":["useRef","useState","useScrollLock","useCallback","_jsx","Collapsible","cn","CollapsibleTrigger","_jsxs","SpeakAiLine","ChevronDownIcon","CollapsibleContent","MarkdownText","useAssistantState","memo"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reasoning.d.ts","sourceRoot":"","sources":["../../../src/components/assistant-ui/reasoning.tsx"],"names":[],"mappings":"AA0QA,eAAO,MAAM,SAAS;;EAAsB,CAAC;AAG7C,eAAO,MAAM,cAAc,yFAA2B,CAAC"}
1
+ {"version":3,"file":"reasoning.d.ts","sourceRoot":"","sources":["../../../src/components/assistant-ui/reasoning.tsx"],"names":[],"mappings":"AAwQA,eAAO,MAAM,SAAS;;EAAsB,CAAC;AAG7C,eAAO,MAAM,cAAc,yFAA2B,CAAC"}
@@ -4,7 +4,6 @@ import { MarkdownText } from './markdown-text.js';
4
4
  import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '../ui/collapsible.js';
5
5
  import { cn } from '../../lib/utils.js';
6
6
  import SpeakAiLineIcon from '../../assets/SpeakAiLineIcon.js';
7
- import { useChatkitContext } from '../../contexts/ChatkitContext.js';
8
7
  import { useScrollLock } from '../../node_modules/.pnpm/@assistant-ui_react@0.11.37_patch_hash_ynfhbcwv6lgckkdmenopdkbtmq_@types_react-dom@17.0.2_@ty_7dz2xsf2ib2guiutzhjhoerypu/node_modules/@assistant-ui/react/dist/primitives/reasoning/useScrollLock.js';
9
8
  import ChevronDown from '../../node_modules/.pnpm/lucide-react@0.552.0_react@17.0.2/node_modules/lucide-react/dist/esm/icons/chevron-down.js';
10
9
  import { useAssistantState } from '../../node_modules/.pnpm/@assistant-ui_react@0.11.37_patch_hash_ynfhbcwv6lgckkdmenopdkbtmq_@types_react-dom@17.0.2_@ty_7dz2xsf2ib2guiutzhjhoerypu/node_modules/@assistant-ui/react/dist/context/react/hooks/useAssistantState.js';
@@ -17,8 +16,7 @@ const SHIMMER_DURATION = 1000;
17
16
  */
18
17
  const ReasoningRoot = ({ className, children }) => {
19
18
  const collapsibleRef = useRef(null);
20
- const { expandReasoning } = useChatkitContext();
21
- const [isOpen, setIsOpen] = useState(expandReasoning);
19
+ const [isOpen, setIsOpen] = useState(false);
22
20
  const lockScroll = useScrollLock(collapsibleRef, ANIMATION_DURATION);
23
21
  const handleOpenChange = useCallback((open) => {
24
22
  if (!open) {