@chat-lab/ui 0.1.0-beta.62 → 0.1.0-beta.63

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/dist/assets/ComposerAdd.cjs +10 -0
  2. package/dist/assets/ComposerAdd.cjs.map +1 -0
  3. package/dist/assets/ComposerAdd.d.ts +3 -0
  4. package/dist/assets/ComposerAdd.d.ts.map +1 -0
  5. package/dist/assets/ComposerAdd.js +8 -0
  6. package/dist/assets/ComposerAdd.js.map +1 -0
  7. package/dist/components/Chatkit/index.cjs +13 -10
  8. package/dist/components/Chatkit/index.cjs.map +1 -1
  9. package/dist/components/Chatkit/index.d.ts.map +1 -1
  10. package/dist/components/Chatkit/index.js +13 -10
  11. package/dist/components/Chatkit/index.js.map +1 -1
  12. package/dist/components/Chatkit/types.d.ts +6 -4
  13. package/dist/components/Chatkit/types.d.ts.map +1 -1
  14. package/dist/components/assistant-ui/attachment.cjs +23 -14
  15. package/dist/components/assistant-ui/attachment.cjs.map +1 -1
  16. package/dist/components/assistant-ui/attachment.d.ts +1 -0
  17. package/dist/components/assistant-ui/attachment.d.ts.map +1 -1
  18. package/dist/components/assistant-ui/attachment.js +24 -15
  19. package/dist/components/assistant-ui/attachment.js.map +1 -1
  20. package/dist/components/assistant-ui/reasoning.cjs +15 -15
  21. package/dist/components/assistant-ui/reasoning.cjs.map +1 -1
  22. package/dist/components/assistant-ui/reasoning.d.ts.map +1 -1
  23. package/dist/components/assistant-ui/reasoning.js +15 -15
  24. package/dist/components/assistant-ui/reasoning.js.map +1 -1
  25. package/dist/components/assistant-ui/thread.cjs +22 -59
  26. package/dist/components/assistant-ui/thread.cjs.map +1 -1
  27. package/dist/components/assistant-ui/thread.d.ts.map +1 -1
  28. package/dist/components/assistant-ui/thread.js +22 -59
  29. package/dist/components/assistant-ui/thread.js.map +1 -1
  30. package/dist/contexts/ChatkitContext.d.ts +4 -3
  31. package/dist/contexts/ChatkitContext.d.ts.map +1 -1
  32. package/dist/hooks/useClawChat/ClawProtocolAdaptor.cjs +2 -2
  33. package/dist/hooks/useClawChat/ClawProtocolAdaptor.cjs.map +1 -1
  34. package/dist/hooks/useClawChat/ClawProtocolAdaptor.js +2 -2
  35. package/dist/hooks/useClawChat/ClawProtocolAdaptor.js.map +1 -1
  36. package/dist/hooks/useClawChat/clawCompletion.cjs +4 -1
  37. package/dist/hooks/useClawChat/clawCompletion.cjs.map +1 -1
  38. package/dist/hooks/useClawChat/clawCompletion.d.ts +1 -1
  39. package/dist/hooks/useClawChat/clawCompletion.d.ts.map +1 -1
  40. package/dist/hooks/useClawChat/clawCompletion.js +4 -1
  41. package/dist/hooks/useClawChat/clawCompletion.js.map +1 -1
  42. package/dist/hooks/useClawChat/convertHistoryMessage.cjs +25 -16
  43. package/dist/hooks/useClawChat/convertHistoryMessage.cjs.map +1 -1
  44. package/dist/hooks/useClawChat/convertHistoryMessage.d.ts.map +1 -1
  45. package/dist/hooks/useClawChat/convertHistoryMessage.js +25 -16
  46. package/dist/hooks/useClawChat/convertHistoryMessage.js.map +1 -1
  47. package/dist/hooks/useClawChat/index.cjs +5 -1
  48. package/dist/hooks/useClawChat/index.cjs.map +1 -1
  49. package/dist/hooks/useClawChat/index.d.ts +1 -1
  50. package/dist/hooks/useClawChat/index.d.ts.map +1 -1
  51. package/dist/hooks/useClawChat/index.js +5 -1
  52. package/dist/hooks/useClawChat/index.js.map +1 -1
  53. package/dist/index.css +2 -2
  54. package/dist/utils/convertToAssistantMessage.cjs +3 -1
  55. package/dist/utils/convertToAssistantMessage.cjs.map +1 -1
  56. package/dist/utils/convertToAssistantMessage.d.ts +1 -0
  57. package/dist/utils/convertToAssistantMessage.d.ts.map +1 -1
  58. package/dist/utils/convertToAssistantMessage.js +3 -1
  59. package/dist/utils/convertToAssistantMessage.js.map +1 -1
  60. package/package.json +2 -1
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+
5
+ function ComposerAddIcon() {
6
+ return (jsxRuntime.jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsxRuntime.jsx("path", { d: "M5.75 4.25V0.75C5.75 0.335786 5.41421 0 5 0C4.58579 0 4.25 0.335786 4.25 0.75V4.25H0.75C0.335786 4.25 0 4.58579 0 5C0 5.41421 0.335787 5.75 0.75 5.75H4.25V9.25C4.25 9.66421 4.58579 10 5 10C5.41421 10 5.75 9.66421 5.75 9.25V5.75H9.25C9.66421 5.75 10 5.41421 10 5C10 4.58579 9.66421 4.25 9.25 4.25H5.75Z", fill: "#42464E" }) }));
7
+ }
8
+
9
+ module.exports = ComposerAddIcon;
10
+ //# sourceMappingURL=ComposerAdd.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerAdd.cjs","sources":["../../src/assets/ComposerAdd.tsx"],"sourcesContent":["function ComposerAddIcon() {\n return (\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.75 4.25V0.75C5.75 0.335786 5.41421 0 5 0C4.58579 0 4.25 0.335786 4.25 0.75V4.25H0.75C0.335786 4.25 0 4.58579 0 5C0 5.41421 0.335787 5.75 0.75 5.75H4.25V9.25C4.25 9.66421 4.58579 10 5 10C5.41421 10 5.75 9.66421 5.75 9.25V5.75H9.25C9.66421 5.75 10 5.41421 10 5C10 4.58579 9.66421 4.25 9.25 4.25H5.75Z\"\n fill=\"#42464E\"\n />\n </svg>\n );\n}\n\nexport default ComposerAddIcon;\n"],"names":["_jsx"],"mappings":";;;;AAAA,SAAS,eAAe,GAAA;AACtB,IAAA,QACEA,cAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,EAAA,QAAA,EAElCA,yBACE,CAAC,EAAC,+SAA+S,EACjT,IAAI,EAAC,SAAS,EACd,CAAA,EAAA,CACE,EACN;AACJ;;;;"}
@@ -0,0 +1,3 @@
1
+ declare function ComposerAddIcon(): JSX.Element;
2
+ export default ComposerAddIcon;
3
+ //# sourceMappingURL=ComposerAdd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerAdd.d.ts","sourceRoot":"","sources":["../../src/assets/ComposerAdd.tsx"],"names":[],"mappings":"AAAA,iBAAS,eAAe,gBAevB;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+
3
+ function ComposerAddIcon() {
4
+ return (jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M5.75 4.25V0.75C5.75 0.335786 5.41421 0 5 0C4.58579 0 4.25 0.335786 4.25 0.75V4.25H0.75C0.335786 4.25 0 4.58579 0 5C0 5.41421 0.335787 5.75 0.75 5.75H4.25V9.25C4.25 9.66421 4.58579 10 5 10C5.41421 10 5.75 9.66421 5.75 9.25V5.75H9.25C9.66421 5.75 10 5.41421 10 5C10 4.58579 9.66421 4.25 9.25 4.25H5.75Z", fill: "#42464E" }) }));
5
+ }
6
+
7
+ export { ComposerAddIcon as default };
8
+ //# sourceMappingURL=ComposerAdd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerAdd.js","sources":["../../src/assets/ComposerAdd.tsx"],"sourcesContent":["function ComposerAddIcon() {\n return (\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.75 4.25V0.75C5.75 0.335786 5.41421 0 5 0C4.58579 0 4.25 0.335786 4.25 0.75V4.25H0.75C0.335786 4.25 0 4.58579 0 5C0 5.41421 0.335787 5.75 0.75 5.75H4.25V9.25C4.25 9.66421 4.58579 10 5 10C5.41421 10 5.75 9.66421 5.75 9.25V5.75H9.25C9.66421 5.75 10 5.41421 10 5C10 4.58579 9.66421 4.25 9.25 4.25H5.75Z\"\n fill=\"#42464E\"\n />\n </svg>\n );\n}\n\nexport default ComposerAddIcon;\n"],"names":["_jsx"],"mappings":";;AAAA,SAAS,eAAe,GAAA;AACtB,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,EAAA,QAAA,EAElCA,cACE,CAAC,EAAC,+SAA+S,EACjT,IAAI,EAAC,SAAS,EACd,CAAA,EAAA,CACE,EACN;AACJ;;;;"}
@@ -4,10 +4,10 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var uuid = require('uuid');
6
6
  var lodashEs = require('lodash-es');
7
- var ChatkitContext = require('../../contexts/ChatkitContext.cjs');
8
- var I18nContext = require('../../contexts/I18nContext.cjs');
9
7
  var react = require('@assistant-ui/react');
10
8
  require('../../core/dist/index.cjs');
9
+ var ChatkitContext = require('../../contexts/ChatkitContext.cjs');
10
+ var I18nContext = require('../../contexts/I18nContext.cjs');
11
11
  var convertToAssistantMessage = require('../../utils/convertToAssistantMessage.cjs');
12
12
  var convertToBase64 = require('../../utils/convertToBase64.cjs');
13
13
  var checkMedia = require('../../utils/checkMedia.cjs');
@@ -18,7 +18,7 @@ var valtio = require('valtio');
18
18
 
19
19
  const ChatkitImpl = React.forwardRef((props, ref) => {
20
20
  const { t } = I18nContext.useI18n();
21
- const { initialConfig, tools, toolDisplay = 'group', welcome, recommends, plugins, threadList: threadList$1, showHeader = true, renderHeader, placeholder, expandToolGroup = false, expandReasoning = false, expandToolDetail = false, uploadBase64 = true, threadBottom, accept, } = props;
21
+ const { initialConfig, tools, toolDisplay = 'group', welcome, recommends, plugins, threadList: threadList$1, showHeader = true, renderHeader, showReasoning = true, placeholder, expandToolGroup = false, expandReasoning = false, expandToolDetail = false, uploadBase64 = true, threadBottom, composerTop, accept, composerDisabled = false, } = props;
22
22
  const { controller } = props;
23
23
  const { threadMap, currentThreadId } = valtio.useSnapshot(controller.store.state);
24
24
  // useImperativeHandleChatkitRef(ref, controller, onError);
@@ -26,13 +26,15 @@ const ChatkitImpl = React.forwardRef((props, ref) => {
26
26
  const messages = currentThread?.messages || [];
27
27
  const { uiMessages, authors } = React.useMemo(() => convertToAssistantMessage(messages, {
28
28
  toolDisplay: toolDisplay || 'group',
29
- }), [messages, toolDisplay]);
30
- console.log(JSON.stringify(messages, null, 2));
29
+ showReasoning,
30
+ }), [messages, toolDisplay, showReasoning]);
31
+ // const api = useAssistantApi();
32
+ // useEffect(() => {}, [composerDisabled, api]);
31
33
  const runtime = react.useExternalStoreRuntime({
32
34
  messages: uiMessages,
33
35
  isLoading: currentThread?.sending,
34
36
  isRunning: currentThread?.sending,
35
- isDisabled: !!currentThread?.metadata.isInitingSession,
37
+ isDisabled: composerDisabled,
36
38
  convertMessage: (message) => message,
37
39
  onNew: async (message) => {
38
40
  const attachments = uploadBase64
@@ -137,6 +139,7 @@ const ChatkitImpl = React.forwardRef((props, ref) => {
137
139
  },
138
140
  },
139
141
  });
142
+ console.log(composerTop);
140
143
  return (jsxRuntime.jsx(react.AssistantRuntimeProvider, { runtime: runtime, children: jsxRuntime.jsxs(ChatkitContext.ChatkitProvider, { value: {
141
144
  ref: ref,
142
145
  plugins: plugins || [],
@@ -149,19 +152,19 @@ const ChatkitImpl = React.forwardRef((props, ref) => {
149
152
  expandReasoning,
150
153
  controller,
151
154
  authors,
155
+ composerDisabled,
156
+ composerTop,
152
157
  }, children: [jsxRuntime.jsxs("div", { className: "flex h-full w-full", children: [threadList$1 !== false
153
158
  && (typeof threadList$1 === 'function' ? (threadList$1({
154
159
  threadList: lodashEs.values(threadMap),
155
160
  })) : (jsxRuntime.jsx(threadList, {}))), jsxRuntime.jsxs("div", { className: "flex-1 h-full w-[calc(100%-200px)]", children: [jsxRuntime.jsx(thread.Thread, { welcome: welcome, recommends: recommends }), threadBottom] })] }), (tools || []).map((tool, index) => React.createElement(tool)), jsxRuntime.jsx(executionCard, {})] }) }, currentThreadId));
156
161
  });
157
162
  function Chatkit(props) {
158
- const { initialConfig, welcome, recommends, onError, toolDisplay, plugins, tools, chatController: chatControllerFromProps = null, threadBottom, chatControllerPlugins, threadList, showHeader = true, renderHeader, placeholder, expandToolGroup, expandToolDetail, debugger: debuggerProps, locale, accept, uploadBase64, } = props;
163
+ const { initialConfig, welcome, recommends, onError, toolDisplay, showReasoning, plugins, tools, chatController: chatControllerFromProps = null, threadBottom, chatControllerPlugins, threadList, showHeader = true, renderHeader, placeholder, expandToolGroup, expandToolDetail, locale, accept, uploadBase64, composerDisabled, composerTop, } = props;
159
164
  const controllerRef = React.useRef(chatControllerFromProps);
160
165
  const controller = controllerRef.current;
161
166
  const { currentThreadId, threadMap } = valtio.useSnapshot(controller.store.state);
162
- const currentThread = currentThreadId ? threadMap[currentThreadId] : null;
163
- React.useMemo(() => threadMap[currentThread?.id || '']?.messages || [], [currentThread?.id, threadMap]);
164
- return (jsxRuntime.jsx(I18nContext.I18nProvider, { defaultLocale: locale, children: jsxRuntime.jsx("div", { className: "chatkit-wrapper", style: { height: '100%' }, "data-chatkit": true, children: jsxRuntime.jsx(ChatkitImpl, { uploadBase64: uploadBase64, tools: tools || [], showHeader: showHeader, renderHeader: renderHeader, recommends: recommends, initialConfig: initialConfig, expandToolGroup: expandToolGroup, toolDisplay: toolDisplay, expandToolDetail: expandToolDetail, placeholder: placeholder, welcome: welcome, plugins: plugins, threadList: threadList, threadBottom: threadBottom, controller: controller, accept: accept }, currentThreadId) }) }));
167
+ return (jsxRuntime.jsx(I18nContext.I18nProvider, { defaultLocale: locale, children: jsxRuntime.jsx("div", { className: "chatkit-wrapper", style: { height: '100%' }, "data-chatkit": true, children: jsxRuntime.jsx(ChatkitImpl, { uploadBase64: uploadBase64, showReasoning: showReasoning, tools: tools || [], showHeader: showHeader, renderHeader: renderHeader, recommends: recommends, initialConfig: initialConfig, expandToolGroup: expandToolGroup, toolDisplay: toolDisplay, expandToolDetail: expandToolDetail, placeholder: placeholder, welcome: welcome, plugins: plugins, threadList: threadList, threadBottom: threadBottom, controller: controller, accept: accept, composerDisabled: composerDisabled, composerTop: composerTop }, currentThreadId) }) }));
165
168
  }
166
169
  var index = React.forwardRef(Chatkit);
167
170
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/Chatkit/index.tsx"],"sourcesContent":["import React, {\n ForwardedRef,\n forwardRef,\n MutableRefObject,\n useMemo,\n useRef,\n useEffect,\n} from 'react';\nimport { v4 as uuid } from 'uuid';\nimport { compact, values } from 'lodash-es';\nimport { ChatkitProvider } from '@/contexts/ChatkitContext';\nimport { I18nProvider, useI18n } from '@/contexts/I18nContext';\n\nimport {\n AssistantRuntimeProvider,\n useExternalStoreRuntime,\n} from '@assistant-ui/react';\nimport {\n ChatMessage,\n ChatController,\n Thread as ThreadType,\n useSnapshot,\n TextMessage,\n} from '@chat-lab/core';\nimport convertToAssistantMessage from '@/utils/convertToAssistantMessage';\nimport { convertToBase64 } from '@/utils/convertToBase64';\nimport checkMedia from '@/utils/checkMedia';\nimport './style.less';\nimport ThreadList from '../thread-list';\nimport { ChatkitProps, ChatkitRef } from './types';\nimport { Thread } from '../assistant-ui/thread';\n\nimport ExecutionCard from '../assistant-ui-tools/execution-card';\n\nconst ChatkitImpl = forwardRef(\n (\n props: {\n uploadBase64?: boolean;\n initialConfig: ChatkitProps['initialConfig'];\n welcome?: React.ReactNode;\n recommends?: string[];\n plugins?: React.ReactNode[];\n tools?: React.ElementType[];\n placeholder?: string;\n threadList?:\n | React.ReactNode\n | boolean\n | ((props: { threadList: Readonly<ThreadType>[] }) => React.ReactNode);\n threadBottom?: React.ReactNode;\n showHeader?: boolean;\n renderHeader?: (props: { thread: ThreadType }) => React.ReactNode;\n\n expandToolGroup?: boolean;\n expandToolDetail?: boolean;\n toolDisplay?: 'group' | 'none' | 'step';\n expandReasoning?: boolean;\n controller: ChatController;\n accept?: string;\n },\n ref: ForwardedRef<ChatkitRef>,\n ) => {\n const { t } = useI18n();\n const {\n initialConfig,\n tools,\n toolDisplay = 'group',\n welcome,\n recommends,\n plugins,\n threadList,\n showHeader = true,\n renderHeader,\n placeholder,\n expandToolGroup = false,\n expandReasoning = false,\n expandToolDetail = false,\n uploadBase64 = true,\n threadBottom,\n accept,\n } = props;\n const { controller } = props;\n const { threadMap, currentThreadId } = useSnapshot(controller.store.state);\n // useImperativeHandleChatkitRef(ref, controller, onError);\n\n const currentThread = currentThreadId ? threadMap[currentThreadId] : null;\n const messages = currentThread?.messages || [];\n\n const { uiMessages, authors } = useMemo(\n () => convertToAssistantMessage(messages as Readonly<ChatMessage>[], {\n toolDisplay: toolDisplay || 'group',\n }),\n [messages, toolDisplay],\n );\n\n console.log(JSON.stringify(messages, null, 2));\n\n const runtime = useExternalStoreRuntime({\n messages: uiMessages,\n isLoading: currentThread?.sending,\n isRunning: currentThread?.sending,\n isDisabled: !!currentThread?.metadata.isInitingSession,\n convertMessage: (message) => message,\n onNew: async (message) => {\n const attachments = uploadBase64\n ? await Promise.all(\n message.attachments?.map(async (item) => ({\n ...item,\n base64: await convertToBase64(item.file as File),\n })) || [],\n )\n : message.attachments || [];\n\n controller?.sendMessage({\n attaches: attachments.map((item) => ({\n id: item.id,\n attachId: item.id,\n url: (item as { base64?: string })?.base64 || '',\n status: 'success',\n file: item.file,\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 controller?.reloadMessage({\n threadId: currentThread?.id,\n messageId: parentId,\n });\n } else {\n controller.onError?.(new Error(t('thread.notFound')));\n }\n },\n onCancel: async () => {\n controller?.abortMessage();\n },\n adapters: {\n attachments: {\n remove: async ({ id }) => {\n console.log(id);\n },\n send: async ({ id, file }) => {\n // Map media type to valid content type\n const baseMediaType = checkMedia(file.type) as\n | 'image'\n | 'video'\n | 'audio';\n const mediaType: 'image' | 'video' | 'audio' | 'file' = [\n 'image',\n 'video',\n 'audio',\n ].includes(baseMediaType)\n ? baseMediaType\n : 'file';\n\n const contentItem: {\n type: typeof mediaType;\n image?: string;\n video?: string;\n audio?: string;\n file?: string;\n } = {\n type: mediaType,\n };\n\n switch (mediaType) {\n case 'image':\n contentItem.image = file.name;\n break;\n case 'video':\n contentItem.video = file.name;\n break;\n case 'audio':\n contentItem.audio = file.name;\n break;\n case 'file':\n contentItem.file = file.name;\n break;\n }\n\n return {\n id,\n type: mediaType,\n name: file.name,\n contentType: file.type,\n content: [contentItem],\n status: {\n type: 'complete',\n },\n file,\n };\n },\n accept: accept || 'image/*',\n add: async ({ file }) => ({\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 return (\n <AssistantRuntimeProvider key={currentThreadId} runtime={runtime}>\n <ChatkitProvider\n value={{\n ref: ref as MutableRefObject<ChatkitRef | null>,\n plugins: plugins || [],\n showThreadList: threadList !== false,\n placeholder: placeholder || t('thread.prompt'),\n showHeader,\n renderHeader,\n expandToolGroup,\n expandToolDetail,\n expandReasoning,\n controller,\n authors,\n }}\n >\n <div className=\"flex h-full w-full\">\n {threadList !== false\n && (typeof threadList === 'function' ? (\n threadList({\n threadList: values(threadMap) as ThreadType[],\n })\n ) : (\n <ThreadList />\n ))}\n <div className=\"flex-1 h-full w-[calc(100%-200px)]\">\n <Thread welcome={welcome} recommends={recommends} />\n {threadBottom}\n </div>\n </div>\n {(tools || []).map((tool, index) => React.createElement(tool))}\n <ExecutionCard />\n </ChatkitProvider>\n </AssistantRuntimeProvider>\n );\n },\n);\n\nfunction Chatkit(props: ChatkitProps) {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n toolDisplay,\n plugins,\n tools,\n chatController: chatControllerFromProps = null,\n threadBottom,\n chatControllerPlugins,\n threadList,\n showHeader = true,\n renderHeader,\n placeholder,\n expandToolGroup,\n expandToolDetail,\n debugger: debuggerProps,\n locale,\n accept,\n uploadBase64,\n } = props;\n\n const controllerRef = useRef<ChatController | null>(chatControllerFromProps);\n\n const controller = controllerRef.current;\n\n const { currentThreadId, threadMap } = useSnapshot(controller!.store.state);\n\n const currentThread = currentThreadId ? threadMap[currentThreadId] : null;\n\n const messages = useMemo(\n () => threadMap[currentThread?.id || '']?.messages || [],\n [currentThread?.id, threadMap],\n );\n\n return (\n <I18nProvider defaultLocale={locale}>\n <div className=\"chatkit-wrapper\" style={{ height: '100%' }} data-chatkit>\n <ChatkitImpl\n uploadBase64={uploadBase64}\n key={currentThreadId}\n tools={tools || []}\n showHeader={showHeader}\n renderHeader={renderHeader}\n recommends={recommends}\n initialConfig={initialConfig}\n expandToolGroup={expandToolGroup}\n toolDisplay={toolDisplay}\n expandToolDetail={expandToolDetail}\n placeholder={placeholder}\n welcome={welcome}\n plugins={plugins}\n threadList={threadList}\n threadBottom={threadBottom}\n controller={controller!}\n accept={accept}\n />\n </div>\n </I18nProvider>\n );\n}\n\nexport default forwardRef(Chatkit);\n"],"names":["forwardRef","useI18n","threadList","useSnapshot","useMemo","useExternalStoreRuntime","convertToBase64","compact","uuid","_jsx","AssistantRuntimeProvider","_jsxs","ChatkitProvider","values","ThreadList","Thread","ExecutionCard","useRef","I18nProvider"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Chatkit/index.tsx"],"sourcesContent":["import React, {\n ForwardedRef,\n forwardRef,\n MutableRefObject,\n useMemo,\n useRef,\n useEffect,\n} from 'react';\nimport { v4 as uuid } from 'uuid';\nimport { compact, values } from 'lodash-es';\nimport {\n AssistantRuntimeProvider,\n useExternalStoreRuntime,\n} from '@assistant-ui/react';\nimport {\n ChatMessage,\n ChatController,\n Thread as ThreadType,\n useSnapshot,\n TextMessage,\n} from '@chat-lab/core';\nimport { ChatkitProvider } from '@/contexts/ChatkitContext';\nimport { I18nProvider, useI18n } from '@/contexts/I18nContext';\n\nimport convertToAssistantMessage from '@/utils/convertToAssistantMessage';\nimport { convertToBase64 } from '@/utils/convertToBase64';\nimport checkMedia from '@/utils/checkMedia';\nimport './style.less';\nimport ThreadList from '../thread-list';\nimport { ChatkitProps, ChatkitRef } from './types';\nimport { Thread } from '../assistant-ui/thread';\n\nimport ExecutionCard from '../assistant-ui-tools/execution-card';\n\nconst ChatkitImpl = forwardRef(\n (props: ChatkitProps, ref: ForwardedRef<ChatkitRef>) => {\n const { t } = useI18n();\n const {\n initialConfig,\n tools,\n toolDisplay = 'group',\n welcome,\n recommends,\n plugins,\n threadList,\n showHeader = true,\n renderHeader,\n showReasoning = true,\n placeholder,\n expandToolGroup = false,\n expandReasoning = false,\n expandToolDetail = false,\n uploadBase64 = true,\n threadBottom,\n composerTop,\n accept,\n composerDisabled = false,\n } = props;\n const { controller } = props;\n const { threadMap, currentThreadId } = useSnapshot(controller.store.state);\n // useImperativeHandleChatkitRef(ref, controller, onError);\n\n const currentThread = currentThreadId ? threadMap[currentThreadId] : null;\n const messages = currentThread?.messages || [];\n\n const { uiMessages, authors } = useMemo(\n () => convertToAssistantMessage(messages as Readonly<ChatMessage>[], {\n toolDisplay: toolDisplay || 'group',\n showReasoning,\n }),\n [messages, toolDisplay, showReasoning],\n );\n // const api = useAssistantApi();\n\n // useEffect(() => {}, [composerDisabled, api]);\n\n const runtime = useExternalStoreRuntime({\n messages: uiMessages,\n isLoading: currentThread?.sending,\n isRunning: currentThread?.sending,\n isDisabled: composerDisabled,\n convertMessage: (message) => message,\n onNew: async (message) => {\n const attachments = uploadBase64\n ? await Promise.all(\n message.attachments?.map(async (item) => ({\n ...item,\n base64: await convertToBase64(item.file as File),\n })) || [],\n )\n : message.attachments || [];\n\n controller?.sendMessage({\n attaches: attachments.map((item) => ({\n id: item.id,\n attachId: item.id,\n url: (item as { base64?: string })?.base64 || '',\n status: 'success',\n file: item.file,\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 controller?.reloadMessage({\n threadId: currentThread?.id,\n messageId: parentId,\n });\n } else {\n controller.onError?.(new Error(t('thread.notFound')));\n }\n },\n onCancel: async () => {\n controller?.abortMessage();\n },\n adapters: {\n attachments: {\n remove: async ({ id }) => {\n console.log(id);\n },\n send: async ({ id, file }) => {\n // Map media type to valid content type\n const baseMediaType = checkMedia(file.type) as\n | 'image'\n | 'video'\n | 'audio';\n const mediaType: 'image' | 'video' | 'audio' | 'file' = [\n 'image',\n 'video',\n 'audio',\n ].includes(baseMediaType)\n ? baseMediaType\n : 'file';\n\n const contentItem: {\n type: typeof mediaType;\n image?: string;\n video?: string;\n audio?: string;\n file?: string;\n } = {\n type: mediaType,\n };\n\n switch (mediaType) {\n case 'image':\n contentItem.image = file.name;\n break;\n case 'video':\n contentItem.video = file.name;\n break;\n case 'audio':\n contentItem.audio = file.name;\n break;\n case 'file':\n contentItem.file = file.name;\n break;\n }\n\n return {\n id,\n type: mediaType,\n name: file.name,\n contentType: file.type,\n content: [contentItem],\n status: {\n type: 'complete',\n },\n file,\n };\n },\n accept: accept || 'image/*',\n add: async ({ file }) => ({\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 console.log(composerTop);\n return (\n <AssistantRuntimeProvider key={currentThreadId} runtime={runtime}>\n <ChatkitProvider\n value={{\n ref: ref as MutableRefObject<ChatkitRef | null>,\n plugins: plugins || [],\n showThreadList: threadList !== false,\n placeholder: placeholder || t('thread.prompt'),\n showHeader,\n renderHeader,\n expandToolGroup,\n expandToolDetail,\n expandReasoning,\n controller,\n authors,\n composerDisabled,\n composerTop,\n }}\n >\n <div className=\"flex h-full w-full\">\n {threadList !== false\n && (typeof threadList === 'function' ? (\n threadList({\n threadList: values(threadMap) as ThreadType[],\n })\n ) : (\n <ThreadList />\n ))}\n <div className=\"flex-1 h-full w-[calc(100%-200px)]\">\n <Thread welcome={welcome} recommends={recommends} />\n {threadBottom}\n </div>\n </div>\n {(tools || []).map((tool, index) => React.createElement(tool))}\n <ExecutionCard />\n </ChatkitProvider>\n </AssistantRuntimeProvider>\n );\n },\n);\n\nfunction Chatkit(props: ChatkitProps) {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n toolDisplay,\n showReasoning,\n plugins,\n tools,\n chatController: chatControllerFromProps = null,\n threadBottom,\n chatControllerPlugins,\n threadList,\n showHeader = true,\n renderHeader,\n placeholder,\n expandToolGroup,\n expandToolDetail,\n locale,\n accept,\n uploadBase64,\n composerDisabled,\n composerTop,\n } = props;\n\n const controllerRef = useRef<ChatController | null>(chatControllerFromProps);\n\n const controller = controllerRef.current;\n\n const { currentThreadId, threadMap } = useSnapshot(controller!.store.state);\n\n return (\n <I18nProvider defaultLocale={locale}>\n <div className=\"chatkit-wrapper\" style={{ height: '100%' }} data-chatkit>\n <ChatkitImpl\n uploadBase64={uploadBase64}\n key={currentThreadId}\n showReasoning={showReasoning}\n tools={tools || []}\n showHeader={showHeader}\n renderHeader={renderHeader}\n recommends={recommends}\n initialConfig={initialConfig}\n expandToolGroup={expandToolGroup}\n toolDisplay={toolDisplay}\n expandToolDetail={expandToolDetail}\n placeholder={placeholder}\n welcome={welcome}\n plugins={plugins}\n threadList={threadList}\n threadBottom={threadBottom}\n controller={controller!}\n accept={accept}\n composerDisabled={composerDisabled}\n composerTop={composerTop}\n />\n </div>\n </I18nProvider>\n );\n}\n\nexport default forwardRef(Chatkit);\n"],"names":["forwardRef","useI18n","threadList","useSnapshot","useMemo","useExternalStoreRuntime","convertToBase64","compact","uuid","_jsx","AssistantRuntimeProvider","_jsxs","ChatkitProvider","values","ThreadList","Thread","ExecutionCard","useRef","I18nProvider"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Chatkit/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAoBf,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,YAAY,EAAc,MAAM,SAAS,CAAC;;AAsSnD,wBAAmC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Chatkit/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAoBf,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,YAAY,EAAc,MAAM,SAAS,CAAC;;AAkRnD,wBAAmC"}
@@ -2,10 +2,10 @@ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import React__default, { forwardRef, useMemo, useRef } from 'react';
3
3
  import { v4 } from 'uuid';
4
4
  import { compact, values } from 'lodash-es';
5
- import { ChatkitProvider } from '../../contexts/ChatkitContext.js';
6
- import { useI18n, I18nProvider } from '../../contexts/I18nContext.js';
7
5
  import { useExternalStoreRuntime, AssistantRuntimeProvider } from '@assistant-ui/react';
8
6
  import '../../core/dist/index.js';
7
+ import { ChatkitProvider } from '../../contexts/ChatkitContext.js';
8
+ import { useI18n, I18nProvider } from '../../contexts/I18nContext.js';
9
9
  import convertToAssistantMessage from '../../utils/convertToAssistantMessage.js';
10
10
  import { convertToBase64 } from '../../utils/convertToBase64.js';
11
11
  import checkMedia from '../../utils/checkMedia.js';
@@ -16,7 +16,7 @@ import { useSnapshot } from 'valtio';
16
16
 
17
17
  const ChatkitImpl = forwardRef((props, ref) => {
18
18
  const { t } = useI18n();
19
- const { initialConfig, tools, toolDisplay = 'group', welcome, recommends, plugins, threadList, showHeader = true, renderHeader, placeholder, expandToolGroup = false, expandReasoning = false, expandToolDetail = false, uploadBase64 = true, threadBottom, accept, } = props;
19
+ const { initialConfig, tools, toolDisplay = 'group', welcome, recommends, plugins, threadList, showHeader = true, renderHeader, showReasoning = true, placeholder, expandToolGroup = false, expandReasoning = false, expandToolDetail = false, uploadBase64 = true, threadBottom, composerTop, accept, composerDisabled = false, } = props;
20
20
  const { controller } = props;
21
21
  const { threadMap, currentThreadId } = useSnapshot(controller.store.state);
22
22
  // useImperativeHandleChatkitRef(ref, controller, onError);
@@ -24,13 +24,15 @@ const ChatkitImpl = forwardRef((props, ref) => {
24
24
  const messages = currentThread?.messages || [];
25
25
  const { uiMessages, authors } = useMemo(() => convertToAssistantMessage(messages, {
26
26
  toolDisplay: toolDisplay || 'group',
27
- }), [messages, toolDisplay]);
28
- console.log(JSON.stringify(messages, null, 2));
27
+ showReasoning,
28
+ }), [messages, toolDisplay, showReasoning]);
29
+ // const api = useAssistantApi();
30
+ // useEffect(() => {}, [composerDisabled, api]);
29
31
  const runtime = useExternalStoreRuntime({
30
32
  messages: uiMessages,
31
33
  isLoading: currentThread?.sending,
32
34
  isRunning: currentThread?.sending,
33
- isDisabled: !!currentThread?.metadata.isInitingSession,
35
+ isDisabled: composerDisabled,
34
36
  convertMessage: (message) => message,
35
37
  onNew: async (message) => {
36
38
  const attachments = uploadBase64
@@ -135,6 +137,7 @@ const ChatkitImpl = forwardRef((props, ref) => {
135
137
  },
136
138
  },
137
139
  });
140
+ console.log(composerTop);
138
141
  return (jsx(AssistantRuntimeProvider, { runtime: runtime, children: jsxs(ChatkitProvider, { value: {
139
142
  ref: ref,
140
143
  plugins: plugins || [],
@@ -147,19 +150,19 @@ const ChatkitImpl = forwardRef((props, ref) => {
147
150
  expandReasoning,
148
151
  controller,
149
152
  authors,
153
+ composerDisabled,
154
+ composerTop,
150
155
  }, children: [jsxs("div", { className: "flex h-full w-full", children: [threadList !== false
151
156
  && (typeof threadList === 'function' ? (threadList({
152
157
  threadList: values(threadMap),
153
158
  })) : (jsx(ThreadList, {}))), jsxs("div", { className: "flex-1 h-full w-[calc(100%-200px)]", children: [jsx(Thread, { welcome: welcome, recommends: recommends }), threadBottom] })] }), (tools || []).map((tool, index) => React__default.createElement(tool)), jsx(ExecutionCard, {})] }) }, currentThreadId));
154
159
  });
155
160
  function Chatkit(props) {
156
- const { initialConfig, welcome, recommends, onError, toolDisplay, plugins, tools, chatController: chatControllerFromProps = null, threadBottom, chatControllerPlugins, threadList, showHeader = true, renderHeader, placeholder, expandToolGroup, expandToolDetail, debugger: debuggerProps, locale, accept, uploadBase64, } = props;
161
+ const { initialConfig, welcome, recommends, onError, toolDisplay, showReasoning, plugins, tools, chatController: chatControllerFromProps = null, threadBottom, chatControllerPlugins, threadList, showHeader = true, renderHeader, placeholder, expandToolGroup, expandToolDetail, locale, accept, uploadBase64, composerDisabled, composerTop, } = props;
157
162
  const controllerRef = useRef(chatControllerFromProps);
158
163
  const controller = controllerRef.current;
159
164
  const { currentThreadId, threadMap } = useSnapshot(controller.store.state);
160
- const currentThread = currentThreadId ? threadMap[currentThreadId] : null;
161
- useMemo(() => threadMap[currentThread?.id || '']?.messages || [], [currentThread?.id, threadMap]);
162
- return (jsx(I18nProvider, { defaultLocale: locale, children: jsx("div", { className: "chatkit-wrapper", style: { height: '100%' }, "data-chatkit": true, children: jsx(ChatkitImpl, { uploadBase64: uploadBase64, tools: tools || [], showHeader: showHeader, renderHeader: renderHeader, recommends: recommends, initialConfig: initialConfig, expandToolGroup: expandToolGroup, toolDisplay: toolDisplay, expandToolDetail: expandToolDetail, placeholder: placeholder, welcome: welcome, plugins: plugins, threadList: threadList, threadBottom: threadBottom, controller: controller, accept: accept }, currentThreadId) }) }));
165
+ return (jsx(I18nProvider, { defaultLocale: locale, children: jsx("div", { className: "chatkit-wrapper", style: { height: '100%' }, "data-chatkit": true, children: jsx(ChatkitImpl, { uploadBase64: uploadBase64, showReasoning: showReasoning, tools: tools || [], showHeader: showHeader, renderHeader: renderHeader, recommends: recommends, initialConfig: initialConfig, expandToolGroup: expandToolGroup, toolDisplay: toolDisplay, expandToolDetail: expandToolDetail, placeholder: placeholder, welcome: welcome, plugins: plugins, threadList: threadList, threadBottom: threadBottom, controller: controller, accept: accept, composerDisabled: composerDisabled, composerTop: composerTop }, currentThreadId) }) }));
163
166
  }
164
167
  var index = forwardRef(Chatkit);
165
168
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Chatkit/index.tsx"],"sourcesContent":["import React, {\n ForwardedRef,\n forwardRef,\n MutableRefObject,\n useMemo,\n useRef,\n useEffect,\n} from 'react';\nimport { v4 as uuid } from 'uuid';\nimport { compact, values } from 'lodash-es';\nimport { ChatkitProvider } from '@/contexts/ChatkitContext';\nimport { I18nProvider, useI18n } from '@/contexts/I18nContext';\n\nimport {\n AssistantRuntimeProvider,\n useExternalStoreRuntime,\n} from '@assistant-ui/react';\nimport {\n ChatMessage,\n ChatController,\n Thread as ThreadType,\n useSnapshot,\n TextMessage,\n} from '@chat-lab/core';\nimport convertToAssistantMessage from '@/utils/convertToAssistantMessage';\nimport { convertToBase64 } from '@/utils/convertToBase64';\nimport checkMedia from '@/utils/checkMedia';\nimport './style.less';\nimport ThreadList from '../thread-list';\nimport { ChatkitProps, ChatkitRef } from './types';\nimport { Thread } from '../assistant-ui/thread';\n\nimport ExecutionCard from '../assistant-ui-tools/execution-card';\n\nconst ChatkitImpl = forwardRef(\n (\n props: {\n uploadBase64?: boolean;\n initialConfig: ChatkitProps['initialConfig'];\n welcome?: React.ReactNode;\n recommends?: string[];\n plugins?: React.ReactNode[];\n tools?: React.ElementType[];\n placeholder?: string;\n threadList?:\n | React.ReactNode\n | boolean\n | ((props: { threadList: Readonly<ThreadType>[] }) => React.ReactNode);\n threadBottom?: React.ReactNode;\n showHeader?: boolean;\n renderHeader?: (props: { thread: ThreadType }) => React.ReactNode;\n\n expandToolGroup?: boolean;\n expandToolDetail?: boolean;\n toolDisplay?: 'group' | 'none' | 'step';\n expandReasoning?: boolean;\n controller: ChatController;\n accept?: string;\n },\n ref: ForwardedRef<ChatkitRef>,\n ) => {\n const { t } = useI18n();\n const {\n initialConfig,\n tools,\n toolDisplay = 'group',\n welcome,\n recommends,\n plugins,\n threadList,\n showHeader = true,\n renderHeader,\n placeholder,\n expandToolGroup = false,\n expandReasoning = false,\n expandToolDetail = false,\n uploadBase64 = true,\n threadBottom,\n accept,\n } = props;\n const { controller } = props;\n const { threadMap, currentThreadId } = useSnapshot(controller.store.state);\n // useImperativeHandleChatkitRef(ref, controller, onError);\n\n const currentThread = currentThreadId ? threadMap[currentThreadId] : null;\n const messages = currentThread?.messages || [];\n\n const { uiMessages, authors } = useMemo(\n () => convertToAssistantMessage(messages as Readonly<ChatMessage>[], {\n toolDisplay: toolDisplay || 'group',\n }),\n [messages, toolDisplay],\n );\n\n console.log(JSON.stringify(messages, null, 2));\n\n const runtime = useExternalStoreRuntime({\n messages: uiMessages,\n isLoading: currentThread?.sending,\n isRunning: currentThread?.sending,\n isDisabled: !!currentThread?.metadata.isInitingSession,\n convertMessage: (message) => message,\n onNew: async (message) => {\n const attachments = uploadBase64\n ? await Promise.all(\n message.attachments?.map(async (item) => ({\n ...item,\n base64: await convertToBase64(item.file as File),\n })) || [],\n )\n : message.attachments || [];\n\n controller?.sendMessage({\n attaches: attachments.map((item) => ({\n id: item.id,\n attachId: item.id,\n url: (item as { base64?: string })?.base64 || '',\n status: 'success',\n file: item.file,\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 controller?.reloadMessage({\n threadId: currentThread?.id,\n messageId: parentId,\n });\n } else {\n controller.onError?.(new Error(t('thread.notFound')));\n }\n },\n onCancel: async () => {\n controller?.abortMessage();\n },\n adapters: {\n attachments: {\n remove: async ({ id }) => {\n console.log(id);\n },\n send: async ({ id, file }) => {\n // Map media type to valid content type\n const baseMediaType = checkMedia(file.type) as\n | 'image'\n | 'video'\n | 'audio';\n const mediaType: 'image' | 'video' | 'audio' | 'file' = [\n 'image',\n 'video',\n 'audio',\n ].includes(baseMediaType)\n ? baseMediaType\n : 'file';\n\n const contentItem: {\n type: typeof mediaType;\n image?: string;\n video?: string;\n audio?: string;\n file?: string;\n } = {\n type: mediaType,\n };\n\n switch (mediaType) {\n case 'image':\n contentItem.image = file.name;\n break;\n case 'video':\n contentItem.video = file.name;\n break;\n case 'audio':\n contentItem.audio = file.name;\n break;\n case 'file':\n contentItem.file = file.name;\n break;\n }\n\n return {\n id,\n type: mediaType,\n name: file.name,\n contentType: file.type,\n content: [contentItem],\n status: {\n type: 'complete',\n },\n file,\n };\n },\n accept: accept || 'image/*',\n add: async ({ file }) => ({\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 return (\n <AssistantRuntimeProvider key={currentThreadId} runtime={runtime}>\n <ChatkitProvider\n value={{\n ref: ref as MutableRefObject<ChatkitRef | null>,\n plugins: plugins || [],\n showThreadList: threadList !== false,\n placeholder: placeholder || t('thread.prompt'),\n showHeader,\n renderHeader,\n expandToolGroup,\n expandToolDetail,\n expandReasoning,\n controller,\n authors,\n }}\n >\n <div className=\"flex h-full w-full\">\n {threadList !== false\n && (typeof threadList === 'function' ? (\n threadList({\n threadList: values(threadMap) as ThreadType[],\n })\n ) : (\n <ThreadList />\n ))}\n <div className=\"flex-1 h-full w-[calc(100%-200px)]\">\n <Thread welcome={welcome} recommends={recommends} />\n {threadBottom}\n </div>\n </div>\n {(tools || []).map((tool, index) => React.createElement(tool))}\n <ExecutionCard />\n </ChatkitProvider>\n </AssistantRuntimeProvider>\n );\n },\n);\n\nfunction Chatkit(props: ChatkitProps) {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n toolDisplay,\n plugins,\n tools,\n chatController: chatControllerFromProps = null,\n threadBottom,\n chatControllerPlugins,\n threadList,\n showHeader = true,\n renderHeader,\n placeholder,\n expandToolGroup,\n expandToolDetail,\n debugger: debuggerProps,\n locale,\n accept,\n uploadBase64,\n } = props;\n\n const controllerRef = useRef<ChatController | null>(chatControllerFromProps);\n\n const controller = controllerRef.current;\n\n const { currentThreadId, threadMap } = useSnapshot(controller!.store.state);\n\n const currentThread = currentThreadId ? threadMap[currentThreadId] : null;\n\n const messages = useMemo(\n () => threadMap[currentThread?.id || '']?.messages || [],\n [currentThread?.id, threadMap],\n );\n\n return (\n <I18nProvider defaultLocale={locale}>\n <div className=\"chatkit-wrapper\" style={{ height: '100%' }} data-chatkit>\n <ChatkitImpl\n uploadBase64={uploadBase64}\n key={currentThreadId}\n tools={tools || []}\n showHeader={showHeader}\n renderHeader={renderHeader}\n recommends={recommends}\n initialConfig={initialConfig}\n expandToolGroup={expandToolGroup}\n toolDisplay={toolDisplay}\n expandToolDetail={expandToolDetail}\n placeholder={placeholder}\n welcome={welcome}\n plugins={plugins}\n threadList={threadList}\n threadBottom={threadBottom}\n controller={controller!}\n accept={accept}\n />\n </div>\n </I18nProvider>\n );\n}\n\nexport default forwardRef(Chatkit);\n"],"names":["uuid","_jsx","_jsxs","React"],"mappings":";;;;;;;;;;;;;;;;AAkCA,MAAM,WAAW,GAAG,UAAU,CAC5B,CACE,KAsBC,EACD,GAA6B,KAC3B;AACF,IAAA,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IACxB,MAAM,EACJ,aAAa,EACb,KAAK,EACL,WAAW,GAAG,OAAO,EACrB,OAAO,EACP,UAAU,EACV,OAAO,EACP,UAAU,EACV,UAAU,GAAG,IAAI,EACjB,YAAY,EACZ,WAAW,EACX,eAAe,GAAG,KAAK,EACvB,eAAe,GAAG,KAAK,EACvB,gBAAgB,GAAG,KAAK,EACxB,YAAY,GAAG,IAAI,EACnB,YAAY,EACZ,MAAM,GACP,GAAG,KAAK,CAAC;AACV,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;AAC7B,IAAA,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;AAG3E,IAAA,MAAM,aAAa,GAAG,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;AAC1E,IAAA,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAC;AAE/C,IAAA,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CACrC,MAAM,yBAAyB,CAAC,QAAmC,EAAE;QACnE,WAAW,EAAE,WAAW,IAAI,OAAO;AACpC,KAAA,CAAC,EACF,CAAC,QAAQ,EAAE,WAAW,CAAC,CACxB,CAAC;AAEF,IAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,uBAAuB,CAAC;AACtC,QAAA,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,aAAa,EAAE,OAAO;QACjC,SAAS,EAAE,aAAa,EAAE,OAAO;AACjC,QAAA,UAAU,EAAE,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,gBAAgB;AACtD,QAAA,cAAc,EAAE,CAAC,OAAO,KAAK,OAAO;AACpC,QAAA,KAAK,EAAE,OAAO,OAAO,KAAI;YACvB,MAAM,WAAW,GAAG,YAAY;AAC9B,kBAAE,MAAM,OAAO,CAAC,GAAG,CACjB,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM;AACxC,oBAAA,GAAG,IAAI;AACP,oBAAA,MAAM,EAAE,MAAM,eAAe,CAAC,IAAI,CAAC,IAAY,CAAC;iBACjD,CAAC,CAAC,IAAI,EAAE,CACV;AACD,kBAAE,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;YAE9B,UAAU,EAAE,WAAW,CAAC;gBACtB,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;oBACnC,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,QAAQ,EAAE,IAAI,CAAC,EAAE;AACjB,oBAAA,GAAG,EAAG,IAA4B,EAAE,MAAM,IAAI,EAAE;AAChD,oBAAA,MAAM,EAAE,SAAS;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,oBAAA,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;oBAClC,QAAQ,EAAE,IAAI,CAAC,WAAW;AAC3B,iBAAA,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,CAAC;oBACf,IAAI,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,KAAI;AACjC,wBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;4BACxB,OAAO;AACL,gCAAA,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,IAAI,CAAC,IAAI;6BACD,CAAC;yBAClB;qBACF,CAAC,IAAI,EAAE,CAAC;iBACV,CAAC;AACH,aAAA,CAAC,CAAC;SACJ;AACD,QAAA,QAAQ,EAAE,OAAO,QAAQ,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,aAAa,EAAE,EAAE,IAAI,QAAQ,EAAE;gBACjC,UAAU,EAAE,aAAa,CAAC;oBACxB,QAAQ,EAAE,aAAa,EAAE,EAAE;AAC3B,oBAAA,SAAS,EAAE,QAAQ;AACpB,iBAAA,CAAC,CAAC;aACJ;iBAAM;AACL,gBAAA,UAAU,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;aACvD;SACF;QACD,QAAQ,EAAE,YAAW;YACnB,UAAU,EAAE,YAAY,EAAE,CAAC;SAC5B;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,WAAW,EAAE;AACX,gBAAA,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAI;AACvB,oBAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBACjB;gBACD,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAI;;oBAE3B,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAG/B,CAAC;AACZ,oBAAA,MAAM,SAAS,GAAyC;wBACtD,OAAO;wBACP,OAAO;wBACP,OAAO;qBACR,CAAC,QAAQ,CAAC,aAAa,CAAC;AACvB,0BAAE,aAAa;0BACb,MAAM,CAAC;AAEX,oBAAA,MAAM,WAAW,GAMb;AACF,wBAAA,IAAI,EAAE,SAAS;qBAChB,CAAC;oBAEF,QAAQ,SAAS;AACf,wBAAA,KAAK,OAAO;AACV,4BAAA,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;4BAC9B,MAAM;AACR,wBAAA,KAAK,OAAO;AACV,4BAAA,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;4BAC9B,MAAM;AACR,wBAAA,KAAK,OAAO;AACV,4BAAA,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;4BAC9B,MAAM;AACR,wBAAA,KAAK,MAAM;AACT,4BAAA,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;4BAC7B,MAAM;qBACT;oBAED,OAAO;wBACL,EAAE;AACF,wBAAA,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,WAAW,EAAE,IAAI,CAAC,IAAI;wBACtB,OAAO,EAAE,CAAC,WAAW,CAAC;AACtB,wBAAA,MAAM,EAAE;AACN,4BAAA,IAAI,EAAE,UAAU;AACjB,yBAAA;wBACD,IAAI;qBACL,CAAC;iBACH;gBACD,MAAM,EAAE,MAAM,IAAI,SAAS;gBAC3B,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM;oBACxB,IAAI;oBACJ,EAAE,EAAEA,EAAI,EAAE;AACV,oBAAA,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,IAAI;AACtB,oBAAA,MAAM,EAAE;AACN,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,MAAM,EAAE,WAAW;AACnB,wBAAA,QAAQ,EAAE,CAAC;AACZ,qBAAA;iBACF,CAAC;AACH,aAAA;AACF,SAAA;AACF,KAAA,CAAC,CAAC;AAEH,IAAA,QACEC,GAAA,CAAC,wBAAwB,EAAA,EAAuB,OAAO,EAAE,OAAO,EAAA,QAAA,EAC9DC,IAAC,CAAA,eAAe,EACd,EAAA,KAAK,EAAE;AACL,gBAAA,GAAG,EAAE,GAA0C;gBAC/C,OAAO,EAAE,OAAO,IAAI,EAAE;gBACtB,cAAc,EAAE,UAAU,KAAK,KAAK;AACpC,gBAAA,WAAW,EAAE,WAAW,IAAI,CAAC,CAAC,eAAe,CAAC;gBAC9C,UAAU;gBACV,YAAY;gBACZ,eAAe;gBACf,gBAAgB;gBAChB,eAAe;gBACf,UAAU;gBACV,OAAO;AACR,aAAA,EAAA,QAAA,EAAA,CAEDA,cAAK,SAAS,EAAC,oBAAoB,EAChC,QAAA,EAAA,CAAA,UAAU,KAAK,KAAK;gCACf,OAAO,UAAU,KAAK,UAAU,IAClC,UAAU,CAAC;AACT,gCAAA,UAAU,EAAE,MAAM,CAAC,SAAS,CAAiB;AAC9C,6BAAA,CAAC,KAEFD,GAAA,CAAC,UAAU,EAAA,EAAA,CAAG,CACf,CAAC,EACJC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oCAAoC,EAAA,QAAA,EAAA,CACjDD,GAAC,CAAA,MAAM,EAAC,EAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAI,CAAA,EACnD,YAAY,CACT,EAAA,CAAA,CAAA,EAAA,CACF,EACL,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAKE,cAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAC9DF,GAAA,CAAC,aAAa,EAAA,EAAA,CAAG,CACD,EAAA,CAAA,EAAA,EAhCW,eAAe,CAiCnB,EAC3B;AACJ,CAAC,CACF,CAAC;AAEF,SAAS,OAAO,CAAC,KAAmB,EAAA;IAClC,MAAM,EACJ,aAAa,EACb,OAAO,EACP,UAAU,EACV,OAAO,EACP,WAAW,EACX,OAAO,EACP,KAAK,EACL,cAAc,EAAE,uBAAuB,GAAG,IAAI,EAC9C,YAAY,EACZ,qBAAqB,EACrB,UAAU,EACV,UAAU,GAAG,IAAI,EACjB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,QAAQ,EAAE,aAAa,EACvB,MAAM,EACN,MAAM,EACN,YAAY,GACb,GAAG,KAAK,CAAC;AAEV,IAAA,MAAM,aAAa,GAAG,MAAM,CAAwB,uBAAuB,CAAC,CAAC;AAE7E,IAAA,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC;AAEzC,IAAA,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,UAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAE5E,IAAA,MAAM,aAAa,GAAG,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;AAE1E,IAAiB,OAAO,CACtB,MAAM,SAAS,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,IAAI,EAAE,EACxD,CAAC,aAAa,EAAE,EAAE,EAAE,SAAS,CAAC,EAC9B;IAEF,QACEA,IAAC,YAAY,EAAA,EAAC,aAAa,EAAE,MAAM,YACjCA,GAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EACxD,cAAA,EAAA,IAAA,EAAA,QAAA,EAAAA,GAAA,CAAC,WAAW,EACV,EAAA,YAAY,EAAE,YAAY,EAE1B,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAW,EACvB,MAAM,EAAE,MAAM,EAAA,EAfT,eAAe,CAgBpB,EAAA,CACE,EACO,CAAA,EACf;AACJ,CAAC;AAED,YAAe,UAAU,CAAC,OAAO,CAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Chatkit/index.tsx"],"sourcesContent":["import React, {\n ForwardedRef,\n forwardRef,\n MutableRefObject,\n useMemo,\n useRef,\n useEffect,\n} from 'react';\nimport { v4 as uuid } from 'uuid';\nimport { compact, values } from 'lodash-es';\nimport {\n AssistantRuntimeProvider,\n useExternalStoreRuntime,\n} from '@assistant-ui/react';\nimport {\n ChatMessage,\n ChatController,\n Thread as ThreadType,\n useSnapshot,\n TextMessage,\n} from '@chat-lab/core';\nimport { ChatkitProvider } from '@/contexts/ChatkitContext';\nimport { I18nProvider, useI18n } from '@/contexts/I18nContext';\n\nimport convertToAssistantMessage from '@/utils/convertToAssistantMessage';\nimport { convertToBase64 } from '@/utils/convertToBase64';\nimport checkMedia from '@/utils/checkMedia';\nimport './style.less';\nimport ThreadList from '../thread-list';\nimport { ChatkitProps, ChatkitRef } from './types';\nimport { Thread } from '../assistant-ui/thread';\n\nimport ExecutionCard from '../assistant-ui-tools/execution-card';\n\nconst ChatkitImpl = forwardRef(\n (props: ChatkitProps, ref: ForwardedRef<ChatkitRef>) => {\n const { t } = useI18n();\n const {\n initialConfig,\n tools,\n toolDisplay = 'group',\n welcome,\n recommends,\n plugins,\n threadList,\n showHeader = true,\n renderHeader,\n showReasoning = true,\n placeholder,\n expandToolGroup = false,\n expandReasoning = false,\n expandToolDetail = false,\n uploadBase64 = true,\n threadBottom,\n composerTop,\n accept,\n composerDisabled = false,\n } = props;\n const { controller } = props;\n const { threadMap, currentThreadId } = useSnapshot(controller.store.state);\n // useImperativeHandleChatkitRef(ref, controller, onError);\n\n const currentThread = currentThreadId ? threadMap[currentThreadId] : null;\n const messages = currentThread?.messages || [];\n\n const { uiMessages, authors } = useMemo(\n () => convertToAssistantMessage(messages as Readonly<ChatMessage>[], {\n toolDisplay: toolDisplay || 'group',\n showReasoning,\n }),\n [messages, toolDisplay, showReasoning],\n );\n // const api = useAssistantApi();\n\n // useEffect(() => {}, [composerDisabled, api]);\n\n const runtime = useExternalStoreRuntime({\n messages: uiMessages,\n isLoading: currentThread?.sending,\n isRunning: currentThread?.sending,\n isDisabled: composerDisabled,\n convertMessage: (message) => message,\n onNew: async (message) => {\n const attachments = uploadBase64\n ? await Promise.all(\n message.attachments?.map(async (item) => ({\n ...item,\n base64: await convertToBase64(item.file as File),\n })) || [],\n )\n : message.attachments || [];\n\n controller?.sendMessage({\n attaches: attachments.map((item) => ({\n id: item.id,\n attachId: item.id,\n url: (item as { base64?: string })?.base64 || '',\n status: 'success',\n file: item.file,\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 controller?.reloadMessage({\n threadId: currentThread?.id,\n messageId: parentId,\n });\n } else {\n controller.onError?.(new Error(t('thread.notFound')));\n }\n },\n onCancel: async () => {\n controller?.abortMessage();\n },\n adapters: {\n attachments: {\n remove: async ({ id }) => {\n console.log(id);\n },\n send: async ({ id, file }) => {\n // Map media type to valid content type\n const baseMediaType = checkMedia(file.type) as\n | 'image'\n | 'video'\n | 'audio';\n const mediaType: 'image' | 'video' | 'audio' | 'file' = [\n 'image',\n 'video',\n 'audio',\n ].includes(baseMediaType)\n ? baseMediaType\n : 'file';\n\n const contentItem: {\n type: typeof mediaType;\n image?: string;\n video?: string;\n audio?: string;\n file?: string;\n } = {\n type: mediaType,\n };\n\n switch (mediaType) {\n case 'image':\n contentItem.image = file.name;\n break;\n case 'video':\n contentItem.video = file.name;\n break;\n case 'audio':\n contentItem.audio = file.name;\n break;\n case 'file':\n contentItem.file = file.name;\n break;\n }\n\n return {\n id,\n type: mediaType,\n name: file.name,\n contentType: file.type,\n content: [contentItem],\n status: {\n type: 'complete',\n },\n file,\n };\n },\n accept: accept || 'image/*',\n add: async ({ file }) => ({\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 console.log(composerTop);\n return (\n <AssistantRuntimeProvider key={currentThreadId} runtime={runtime}>\n <ChatkitProvider\n value={{\n ref: ref as MutableRefObject<ChatkitRef | null>,\n plugins: plugins || [],\n showThreadList: threadList !== false,\n placeholder: placeholder || t('thread.prompt'),\n showHeader,\n renderHeader,\n expandToolGroup,\n expandToolDetail,\n expandReasoning,\n controller,\n authors,\n composerDisabled,\n composerTop,\n }}\n >\n <div className=\"flex h-full w-full\">\n {threadList !== false\n && (typeof threadList === 'function' ? (\n threadList({\n threadList: values(threadMap) as ThreadType[],\n })\n ) : (\n <ThreadList />\n ))}\n <div className=\"flex-1 h-full w-[calc(100%-200px)]\">\n <Thread welcome={welcome} recommends={recommends} />\n {threadBottom}\n </div>\n </div>\n {(tools || []).map((tool, index) => React.createElement(tool))}\n <ExecutionCard />\n </ChatkitProvider>\n </AssistantRuntimeProvider>\n );\n },\n);\n\nfunction Chatkit(props: ChatkitProps) {\n const {\n initialConfig,\n welcome,\n recommends,\n onError,\n toolDisplay,\n showReasoning,\n plugins,\n tools,\n chatController: chatControllerFromProps = null,\n threadBottom,\n chatControllerPlugins,\n threadList,\n showHeader = true,\n renderHeader,\n placeholder,\n expandToolGroup,\n expandToolDetail,\n locale,\n accept,\n uploadBase64,\n composerDisabled,\n composerTop,\n } = props;\n\n const controllerRef = useRef<ChatController | null>(chatControllerFromProps);\n\n const controller = controllerRef.current;\n\n const { currentThreadId, threadMap } = useSnapshot(controller!.store.state);\n\n return (\n <I18nProvider defaultLocale={locale}>\n <div className=\"chatkit-wrapper\" style={{ height: '100%' }} data-chatkit>\n <ChatkitImpl\n uploadBase64={uploadBase64}\n key={currentThreadId}\n showReasoning={showReasoning}\n tools={tools || []}\n showHeader={showHeader}\n renderHeader={renderHeader}\n recommends={recommends}\n initialConfig={initialConfig}\n expandToolGroup={expandToolGroup}\n toolDisplay={toolDisplay}\n expandToolDetail={expandToolDetail}\n placeholder={placeholder}\n welcome={welcome}\n plugins={plugins}\n threadList={threadList}\n threadBottom={threadBottom}\n controller={controller!}\n accept={accept}\n composerDisabled={composerDisabled}\n composerTop={composerTop}\n />\n </div>\n </I18nProvider>\n );\n}\n\nexport default forwardRef(Chatkit);\n"],"names":["uuid","_jsx","_jsxs","React"],"mappings":"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"}
@@ -4,7 +4,8 @@ export interface ChatkitProps {
4
4
  threadList: Thread[];
5
5
  }) => React.ReactNode) | boolean;
6
6
  threadBottom?: React.ReactNode;
7
- initialConfig: {
7
+ composerTop?: React.ReactNode;
8
+ initialConfig?: {
8
9
  protocolOptions: ProtocolBaseOption;
9
10
  requestOptions: RequestOptions;
10
11
  };
@@ -23,12 +24,13 @@ export interface ChatkitProps {
23
24
  chatControllerPlugins?: ChatkitPlugin[];
24
25
  onError?: (error: any) => void;
25
26
  welcome?: React.ReactNode;
26
- debugger?: false | {
27
- region: string;
28
- };
29
27
  locale?: 'zh-CN' | 'en-US';
30
28
  accept?: string;
31
29
  uploadBase64?: boolean;
30
+ showReasoning?: boolean;
31
+ expandReasoning?: boolean;
32
+ controller: ChatController;
33
+ composerDisabled?: boolean;
32
34
  }
33
35
  export interface ChatkitRef {
34
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Chatkit/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Chatkit/types.ts"],"names":[],"mappings":"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"}
@@ -10,14 +10,15 @@ require('@radix-ui/react-dialog');
10
10
  var utils = require('../../lib/utils.cjs');
11
11
  require('@radix-ui/react-avatar');
12
12
  var tooltipIconButton = require('./tooltip-icon-button.cjs');
13
- var Attachment = require('../../assets/Attachment.cjs');
13
+ var ComposerAdd = require('../../assets/ComposerAdd.cjs');
14
+ var ChatkitContext = require('../../contexts/ChatkitContext.cjs');
14
15
 
15
16
  const AttachmentUI = () => {
16
17
  const api = react.useAssistantApi();
17
18
  const isComposer = api.attachment.source === 'composer';
18
19
  const isImage = react.useAssistantState(({ attachment }) => attachment.type === 'image');
19
20
  react.useAssistantState(({ attachment }) => {
20
- const type = attachment.type;
21
+ const { type } = attachment;
21
22
  switch (type) {
22
23
  case 'image':
23
24
  return 'Image';
@@ -28,20 +29,28 @@ const AttachmentUI = () => {
28
29
  }
29
30
  });
30
31
  const name = react.useAssistantState(({ attachment }) => attachment.name);
31
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(react.AttachmentPrimitive.Root, { className: utils.cn('aui-attachment-root relative', isImage &&
32
- 'aui-attachment-root-composer only:[&>#attachment-tile]:size-24'), children: [jsxRuntime.jsxs("div", { className: "flex flex-row items-center p-2 rounded-xl bg-muted/50 border gap-2", children: [jsxRuntime.jsx("div", { className: "h-10 w-10 bg-background rounded-lg flex items-center justify-center shrink-0", children: jsxRuntime.jsx(lucideReact.FileText, { className: "text-blue-500", size: 24 }) }), jsxRuntime.jsx("div", { className: "flex flex-col overflow-hidden max-w-[80px]", children: jsxRuntime.jsxs(tooltip.Tooltip, { children: [jsxRuntime.jsx(tooltip.TooltipTrigger, { asChild: true, children: jsxRuntime.jsx("div", { className: "truncate text-sm font-medium", children: jsxRuntime.jsx(react.AttachmentPrimitive.Name, {}) }) }), jsxRuntime.jsx(tooltip.TooltipContent, { children: jsxRuntime.jsx("div", { style: { backgroundColor: 'white', color: '#111827', padding: '8px', borderRadius: '6px', boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', border: '1px solid #e5e7eb', maxWidth: '20rem', whiteSpace: 'normal', wordBreak: 'break-all' }, children: name }) })] }) })] }), isComposer && jsxRuntime.jsx(AttachmentRemove, {})] }) }));
33
- };
34
- const AttachmentRemove = () => {
35
- return (jsxRuntime.jsx(react.AttachmentPrimitive.Remove, { asChild: true, children: jsxRuntime.jsx(tooltipIconButton.TooltipIconButton, { tooltip: "Remove file", className: "aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:!bg-white [&_svg]:text-black hover:[&_svg]:text-destructive", side: "top", children: jsxRuntime.jsx(lucideReact.XIcon, { className: "aui-attachment-remove-icon size-3" }) }) }));
36
- };
37
- const UserMessageAttachments = () => {
38
- return (jsxRuntime.jsx("div", { className: "aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2", children: jsxRuntime.jsx(react.MessagePrimitive.Attachments, { components: { Attachment: AttachmentUI } }) }));
39
- };
40
- const ComposerAttachments = () => {
41
- return (jsxRuntime.jsx("div", { className: "aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden", children: jsxRuntime.jsx(react.ComposerPrimitive.Attachments, { components: { Attachment: AttachmentUI } }) }));
32
+ return (jsxRuntime.jsxs(react.AttachmentPrimitive.Root, { className: utils.cn('aui-attachment-root relative', isImage
33
+ && 'aui-attachment-root-composer only:[&>#attachment-tile]:size-24'), children: [jsxRuntime.jsxs("div", { className: "flex flex-row items-center p-2 rounded-xl bg-muted/50 border gap-2", children: [jsxRuntime.jsx("div", { className: "h-10 w-10 bg-background rounded-lg flex items-center justify-center shrink-0", children: jsxRuntime.jsx(lucideReact.FileText, { className: "text-blue-500", size: 24 }) }), jsxRuntime.jsx("div", { className: "flex flex-col overflow-hidden max-w-[80px]", children: jsxRuntime.jsxs(tooltip.Tooltip, { children: [jsxRuntime.jsx(tooltip.TooltipTrigger, { asChild: true, children: jsxRuntime.jsx("div", { className: "truncate text-sm font-medium", children: jsxRuntime.jsx(react.AttachmentPrimitive.Name, {}) }) }), jsxRuntime.jsx(tooltip.TooltipContent, { children: jsxRuntime.jsx("div", { style: {
34
+ backgroundColor: 'white',
35
+ color: '#111827',
36
+ padding: '8px',
37
+ borderRadius: '6px',
38
+ boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
39
+ border: '1px solid #e5e7eb',
40
+ maxWidth: '20rem',
41
+ whiteSpace: 'normal',
42
+ wordBreak: 'break-all',
43
+ }, children: name }) })] }) })] }), isComposer && jsxRuntime.jsx(AttachmentRemove, {})] }));
42
44
  };
45
+ const AttachmentRemove = () => (jsxRuntime.jsx(react.AttachmentPrimitive.Remove, { asChild: true, children: jsxRuntime.jsx(tooltipIconButton.TooltipIconButton, { tooltip: "Remove file", className: "aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:!bg-white [&_svg]:text-black hover:[&_svg]:text-destructive", side: "top", children: jsxRuntime.jsx(lucideReact.XIcon, { className: "aui-attachment-remove-icon size-3" }) }) }));
46
+ const UserMessageAttachments = () => (jsxRuntime.jsx("div", { className: "aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2", children: jsxRuntime.jsx(react.MessagePrimitive.Attachments, { components: { Attachment: AttachmentUI } }) }));
47
+ const ComposerAttachments = () => (jsxRuntime.jsx("div", { className: "aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden", children: jsxRuntime.jsx(react.ComposerPrimitive.Attachments, { components: { Attachment: AttachmentUI } }) }));
43
48
  const ComposerAddAttachment = () => {
44
- return (jsxRuntime.jsx(react.ComposerPrimitive.AddAttachment, { asChild: true, children: jsxRuntime.jsx("div", { className: "aui-composer-add-attachment size-[16px] p-0 rounded-full text-xs font-semibold hover:bg-muted-foreground/15 flex items-center", "aria-label": "Add Attachment", children: jsxRuntime.jsx(Attachment, { className: "aui-attachment-add-icon size-[16px] stroke-[2px]" }) }) }));
49
+ const { composerDisabled } = ChatkitContext.useChatkitContext();
50
+ return (jsxRuntime.jsx(react.ComposerPrimitive.AddAttachment, { asChild: true, disabled: composerDisabled, children: jsxRuntime.jsx("div", { className: utils.cn('size-[28px] rounded-[6px] rounded-lg border border-gray-300 flex items-center justify-center cursor-pointer hover:bg-gray-100', composerDisabled && 'cursor-not-allowed opacity-50'), onClick: () => {
51
+ if (composerDisabled)
52
+ return;
53
+ }, "aria-label": "Add Attachment", children: jsxRuntime.jsx("span", { className: "text-gray-500 text-lg", children: jsxRuntime.jsx(ComposerAdd, {}) }) }) }));
45
54
  };
46
55
 
47
56
  exports.ComposerAddAttachment = ComposerAddAttachment;
@@ -1 +1 @@
1
- {"version":3,"file":"attachment.cjs","sources":["../../../src/components/assistant-ui/attachment.tsx"],"sourcesContent":["'use client';\n\nimport { PropsWithChildren, useEffect, useState, type FC } from 'react';\nimport { XIcon, PlusIcon, FileText } from 'lucide-react';\nimport {\n AttachmentPrimitive,\n ComposerPrimitive,\n MessagePrimitive,\n useAssistantState,\n useAssistantApi,\n} from '@assistant-ui/react';\nimport { useShallow } from 'zustand/shallow';\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@/components/ui/tooltip';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogTrigger,\n DialogDescription,\n} from '@/components/ui/dialog';\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar';\nimport { TooltipIconButton } from '@/components/assistant-ui/tooltip-icon-button';\nimport { cn } from '@/lib/utils';\nimport AttachmentIcon from '@/assets/Attachment';\n\nconst useFileSrc = (file: File | undefined) => {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n\n return () => {\n URL.revokeObjectURL(objectUrl);\n };\n }, [file]);\n\n return src;\n};\n\nconst useAttachmentSrc = () => {\n const { file, src } = useAssistantState(\n useShallow(({ attachment }): { file?: File; src?: string } => {\n if (attachment.type !== 'image') return {};\n if (attachment.file) return { file: attachment.file };\n const src = attachment.content?.filter(c => c.type === 'image')[0]?.image;\n if (!src) return {};\n return { src };\n }),\n );\n\n return useFileSrc(file) ?? src;\n};\n\ntype AttachmentPreviewProps = {\n src: string;\n};\n\nconst AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {\n const [isLoaded, setIsLoaded] = useState(false);\n return (\n <img\n src={src}\n alt=\"Image Preview\"\n width={1}\n height={1}\n className={\n isLoaded\n ? 'aui-attachment-preview-image-loaded block h-auto max-h-[80vh] w-auto max-w-full object-contain'\n : 'aui-attachment-preview-image-loading hidden'\n }\n onLoadCapture={() => setIsLoaded(true)}\n // priority={false}\n />\n );\n};\n\nconst AttachmentPreviewDialog: FC<{ children: React.ReactElement }> = ({\n children,\n}) => {\n const src = useAttachmentSrc();\n\n if (!src) return children;\n\n return (\n <Dialog>\n <DialogTrigger\n className=\"aui-attachment-preview-trigger cursor-pointer transition-colors hover:bg-accent/50\"\n asChild\n >\n {children}\n </DialogTrigger>\n <DialogContent className=\"aui-attachment-preview-dialog-content p-2 sm:max-w-3xl [&_svg]:text-background [&>button]:rounded-full [&>button]:bg-foreground/60 [&>button]:p-1 [&>button]:opacity-100 [&>button]:!ring-0 [&>button]:hover:[&_svg]:text-destructive\">\n <DialogTitle className=\"aui-sr-only sr-only\">\n Image Attachment Preview\n </DialogTitle>\n <DialogDescription className=\"sr-only\">\n Preview of attached image file\n </DialogDescription>\n <div className=\"aui-attachment-preview relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden bg-background\">\n <AttachmentPreview src={src} />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst AttachmentThumb: FC = () => {\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === 'image',\n );\n const src = useAttachmentSrc();\n\n return (\n <Avatar className=\"aui-attachment-tile-avatar h-full w-full rounded-none\">\n <AvatarImage\n src={src}\n alt=\"Attachment preview\"\n className=\"aui-attachment-tile-image object-cover\"\n />\n <AvatarFallback delayMs={isImage ? 200 : 0}>\n <FileText className=\"aui-attachment-tile-fallback-icon size-8 text-muted-foreground\" />\n </AvatarFallback>\n </Avatar>\n );\n};\n\nconst AttachmentUI: FC = () => {\n const api = useAssistantApi();\n const isComposer = api.attachment.source === 'composer';\n\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === 'image',\n );\n const typeLabel = useAssistantState(({ attachment }) => {\n const type = attachment.type;\n switch (type) {\n case 'image':\n return 'Image';\n case 'document':\n return 'Document';\n case 'file':\n return 'File';\n default:\n const _exhaustiveCheck: never = type;\n }\n });\n\n const name = useAssistantState(({ attachment }) => attachment.name);\n\n return (\n <>\n <AttachmentPrimitive.Root\n className={cn(\n 'aui-attachment-root relative',\n isImage &&\n 'aui-attachment-root-composer only:[&>#attachment-tile]:size-24',\n )}\n >\n <div className=\"flex flex-row items-center p-2 rounded-xl bg-muted/50 border gap-2\">\n <div className=\"h-10 w-10 bg-background rounded-lg flex items-center justify-center shrink-0\">\n <FileText className=\"text-blue-500\" size={24} />\n </div>\n <div className=\"flex flex-col overflow-hidden max-w-[80px]\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"truncate text-sm font-medium\">\n <AttachmentPrimitive.Name />\n </div>\n </TooltipTrigger>\n <TooltipContent>\n <div style={{ backgroundColor: 'white', color: '#111827', padding: '8px', borderRadius: '6px', boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', border: '1px solid #e5e7eb', maxWidth: '20rem', whiteSpace: 'normal', wordBreak: 'break-all' }}>\n {name}\n </div>\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n {isComposer && <AttachmentRemove />}\n </AttachmentPrimitive.Root>\n </>\n );\n};\n\nconst AttachmentRemove: FC = () => {\n return (\n <AttachmentPrimitive.Remove asChild>\n <TooltipIconButton\n tooltip=\"Remove file\"\n className=\"aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:!bg-white [&_svg]:text-black hover:[&_svg]:text-destructive\"\n side=\"top\"\n >\n <XIcon className=\"aui-attachment-remove-icon size-3\" />\n </TooltipIconButton>\n </AttachmentPrimitive.Remove>\n );\n};\n\nexport const UserMessageAttachments: FC = () => {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments components={{ Attachment: AttachmentUI }} />\n </div>\n );\n};\n\nexport const ComposerAttachments: FC = () => {\n return (\n <div className=\"aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden\">\n <ComposerPrimitive.Attachments\n components={{ Attachment: AttachmentUI }}\n />\n </div>\n );\n};\n\nexport const ComposerAddAttachment: FC = () => {\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <div\n className=\"aui-composer-add-attachment size-[16px] p-0 rounded-full text-xs font-semibold hover:bg-muted-foreground/15 flex items-center\"\n aria-label=\"Add Attachment\"\n >\n <AttachmentIcon className=\"aui-attachment-add-icon size-[16px] stroke-[2px]\" />\n </div>\n </ComposerPrimitive.AddAttachment>\n );\n};\n"],"names":["useAssistantApi","useAssistantState","_jsx","_Fragment","_jsxs","AttachmentPrimitive","cn","FileText","Tooltip","TooltipTrigger","TooltipContent","TooltipIconButton","XIcon","MessagePrimitive","ComposerPrimitive","AttachmentIcon"],"mappings":"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"}
1
+ {"version":3,"file":"attachment.cjs","sources":["../../../src/components/assistant-ui/attachment.tsx"],"sourcesContent":["'use client';\n\nimport {\n PropsWithChildren, useEffect, useState, type FC,\n} from 'react';\nimport { XIcon, PlusIcon, FileText } from 'lucide-react';\nimport {\n AttachmentPrimitive,\n ComposerPrimitive,\n MessagePrimitive,\n useAssistantState,\n useAssistantApi,\n} from '@assistant-ui/react';\nimport { useShallow } from 'zustand/shallow';\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@/components/ui/tooltip';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogTrigger,\n DialogDescription,\n} from '@/components/ui/dialog';\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar';\nimport { TooltipIconButton } from '@/components/assistant-ui/tooltip-icon-button';\nimport { cn } from '@/lib/utils';\nimport AttachmentIcon from '@/assets/Attachment';\nimport ComposerAddIcon from '@/assets/ComposerAdd';\nimport { useChatkitContext } from '@/contexts/ChatkitContext';\n\nconst useFileSrc = (file: File | undefined) => {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n\n return () => {\n URL.revokeObjectURL(objectUrl);\n };\n }, [file]);\n\n return src;\n};\n\nconst useAttachmentSrc = () => {\n const { file, src } = useAssistantState(\n useShallow(({ attachment }): { file?: File; src?: string } => {\n if (attachment.type !== 'image') return {};\n if (attachment.file) return { file: attachment.file };\n const src = attachment.content?.filter((c) => c.type === 'image')[0]?.image;\n if (!src) return {};\n return { src };\n }),\n );\n\n return useFileSrc(file) ?? src;\n};\n\ntype AttachmentPreviewProps = {\n src: string;\n};\n\nconst AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {\n const [isLoaded, setIsLoaded] = useState(false);\n return (\n <img\n src={src}\n alt=\"Image Preview\"\n width={1}\n height={1}\n className={\n isLoaded\n ? 'aui-attachment-preview-image-loaded block h-auto max-h-[80vh] w-auto max-w-full object-contain'\n : 'aui-attachment-preview-image-loading hidden'\n }\n onLoadCapture={() => setIsLoaded(true)}\n // priority={false}\n />\n );\n};\n\nconst AttachmentPreviewDialog: FC<{ children: React.ReactElement }> = ({\n children,\n}) => {\n const src = useAttachmentSrc();\n\n if (!src) return children;\n\n return (\n <Dialog>\n <DialogTrigger\n className=\"aui-attachment-preview-trigger cursor-pointer transition-colors hover:bg-accent/50\"\n asChild\n >\n {children}\n </DialogTrigger>\n <DialogContent className=\"aui-attachment-preview-dialog-content p-2 sm:max-w-3xl [&_svg]:text-background [&>button]:rounded-full [&>button]:bg-foreground/60 [&>button]:p-1 [&>button]:opacity-100 [&>button]:!ring-0 [&>button]:hover:[&_svg]:text-destructive\">\n <DialogTitle className=\"aui-sr-only sr-only\">\n Image Attachment Preview\n </DialogTitle>\n <DialogDescription className=\"sr-only\">\n Preview of attached image file\n </DialogDescription>\n <div className=\"aui-attachment-preview relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden bg-background\">\n <AttachmentPreview src={src} />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst AttachmentThumb: FC = () => {\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === 'image',\n );\n const src = useAttachmentSrc();\n\n return (\n <Avatar className=\"aui-attachment-tile-avatar h-full w-full rounded-none\">\n <AvatarImage\n src={src}\n alt=\"Attachment preview\"\n className=\"aui-attachment-tile-image object-cover\"\n />\n <AvatarFallback delayMs={isImage ? 200 : 0}>\n <FileText className=\"aui-attachment-tile-fallback-icon size-8 text-muted-foreground\" />\n </AvatarFallback>\n </Avatar>\n );\n};\n\nconst AttachmentUI: FC = () => {\n const api = useAssistantApi();\n const isComposer = api.attachment.source === 'composer';\n\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === 'image',\n );\n const typeLabel = useAssistantState(({ attachment }) => {\n const { type } = attachment;\n switch (type) {\n case 'image':\n return 'Image';\n case 'document':\n return 'Document';\n case 'file':\n return 'File';\n default:\n const _exhaustiveCheck: never = type;\n }\n });\n\n const name = useAssistantState(({ attachment }) => attachment.name);\n\n return (\n <AttachmentPrimitive.Root\n className={cn(\n 'aui-attachment-root relative',\n isImage\n && 'aui-attachment-root-composer only:[&>#attachment-tile]:size-24',\n )}\n >\n <div className=\"flex flex-row items-center p-2 rounded-xl bg-muted/50 border gap-2\">\n <div className=\"h-10 w-10 bg-background rounded-lg flex items-center justify-center shrink-0\">\n <FileText className=\"text-blue-500\" size={24} />\n </div>\n <div className=\"flex flex-col overflow-hidden max-w-[80px]\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"truncate text-sm font-medium\">\n <AttachmentPrimitive.Name />\n </div>\n </TooltipTrigger>\n <TooltipContent>\n <div\n style={{\n backgroundColor: 'white',\n color: '#111827',\n padding: '8px',\n borderRadius: '6px',\n boxShadow:\n '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n border: '1px solid #e5e7eb',\n maxWidth: '20rem',\n whiteSpace: 'normal',\n wordBreak: 'break-all',\n }}\n >\n {name}\n </div>\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n {isComposer && <AttachmentRemove />}\n </AttachmentPrimitive.Root>\n );\n};\n\nconst AttachmentRemove: FC = () => (\n <AttachmentPrimitive.Remove asChild>\n <TooltipIconButton\n tooltip=\"Remove file\"\n className=\"aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:!bg-white [&_svg]:text-black hover:[&_svg]:text-destructive\"\n side=\"top\"\n >\n <XIcon className=\"aui-attachment-remove-icon size-3\" />\n </TooltipIconButton>\n </AttachmentPrimitive.Remove>\n);\n\nexport const UserMessageAttachments: FC = () => (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments components={{ Attachment: AttachmentUI }} />\n </div>\n);\n\nexport const ComposerAttachments: FC = () => (\n <div className=\"aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden\">\n <ComposerPrimitive.Attachments components={{ Attachment: AttachmentUI }} />\n </div>\n);\n\nexport const ComposerAddAttachment: FC = () => {\n const { composerDisabled } = useChatkitContext();\n return (\n <ComposerPrimitive.AddAttachment asChild disabled={composerDisabled}>\n <div\n className={cn(\n 'size-[28px] rounded-[6px] rounded-lg border border-gray-300 flex items-center justify-center cursor-pointer hover:bg-gray-100',\n composerDisabled && 'cursor-not-allowed opacity-50',\n )}\n onClick={() => {\n if (composerDisabled) return;\n }}\n aria-label=\"Add Attachment\"\n >\n <span className=\"text-gray-500 text-lg\">\n <ComposerAddIcon />\n </span>\n </div>\n </ComposerPrimitive.AddAttachment>\n );\n};\n\nexport const ComposerAddAttachmentForOpenClaw = ComposerAddAttachment;\n"],"names":["useAssistantApi","useAssistantState","_jsxs","AttachmentPrimitive","cn","_jsx","FileText","Tooltip","TooltipTrigger","TooltipContent","TooltipIconButton","XIcon","MessagePrimitive","ComposerPrimitive","useChatkitContext","ComposerAddIcon"],"mappings":"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"}
@@ -2,4 +2,5 @@ import { type FC } from 'react';
2
2
  export declare const UserMessageAttachments: FC;
3
3
  export declare const ComposerAttachments: FC;
4
4
  export declare const ComposerAddAttachment: FC;
5
+ export declare const ComposerAddAttachmentForOpenClaw: FC;
5
6
  //# sourceMappingURL=attachment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../../src/components/assistant-ui/attachment.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA0C,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AA6MxE,eAAO,MAAM,sBAAsB,EAAE,EAMpC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,EAQjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,EAWnC,CAAC"}
1
+ {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../../src/components/assistant-ui/attachment.tsx"],"names":[],"mappings":"AAEA,OAAO,EACmC,KAAK,EAAE,EAChD,MAAM,OAAO,CAAC;AAwNf,eAAO,MAAM,sBAAsB,EAAE,EAIpC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,EAIjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,EAoBnC,CAAC;AAEF,eAAO,MAAM,gCAAgC,IAAwB,CAAC"}