@chat-lab/ui 0.1.0-beta.71 → 0.1.0-beta.74

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 (83) hide show
  1. package/dist/components/Chatkit/index.cjs +6 -4
  2. package/dist/components/Chatkit/index.cjs.map +1 -1
  3. package/dist/components/Chatkit/index.d.ts.map +1 -1
  4. package/dist/components/Chatkit/index.js +6 -4
  5. package/dist/components/Chatkit/index.js.map +1 -1
  6. package/dist/components/Chatkit/types.d.ts +1 -0
  7. package/dist/components/Chatkit/types.d.ts.map +1 -1
  8. package/dist/components/assistant-ui/markdown-text.cjs +17 -20
  9. package/dist/components/assistant-ui/markdown-text.cjs.map +1 -1
  10. package/dist/components/assistant-ui/markdown-text.d.ts +3 -1
  11. package/dist/components/assistant-ui/markdown-text.d.ts.map +1 -1
  12. package/dist/components/assistant-ui/markdown-text.js +19 -22
  13. package/dist/components/assistant-ui/markdown-text.js.map +1 -1
  14. package/dist/components/assistant-ui/thread.cjs +22 -11
  15. package/dist/components/assistant-ui/thread.cjs.map +1 -1
  16. package/dist/components/assistant-ui/thread.d.ts.map +1 -1
  17. package/dist/components/assistant-ui/thread.js +22 -11
  18. package/dist/components/assistant-ui/thread.js.map +1 -1
  19. package/dist/contexts/ChatkitContext.cjs.map +1 -1
  20. package/dist/contexts/ChatkitContext.d.ts +2 -0
  21. package/dist/contexts/ChatkitContext.d.ts.map +1 -1
  22. package/dist/contexts/ChatkitContext.js.map +1 -1
  23. package/dist/core/dist/index.cjs +10 -4
  24. package/dist/core/dist/index.cjs.map +1 -1
  25. package/dist/core/dist/index.js +10 -4
  26. package/dist/core/dist/index.js.map +1 -1
  27. package/dist/hooks/useClawChat/ClawProtocolAdaptor.cjs +11 -10
  28. package/dist/hooks/useClawChat/ClawProtocolAdaptor.cjs.map +1 -1
  29. package/dist/hooks/useClawChat/ClawProtocolAdaptor.d.ts.map +1 -1
  30. package/dist/hooks/useClawChat/ClawProtocolAdaptor.js +11 -10
  31. package/dist/hooks/useClawChat/ClawProtocolAdaptor.js.map +1 -1
  32. package/dist/hooks/useClawChat/clawCompletion.cjs +13 -7
  33. package/dist/hooks/useClawChat/clawCompletion.cjs.map +1 -1
  34. package/dist/hooks/useClawChat/clawCompletion.d.ts.map +1 -1
  35. package/dist/hooks/useClawChat/clawCompletion.js +13 -7
  36. package/dist/hooks/useClawChat/clawCompletion.js.map +1 -1
  37. package/dist/hooks/useClawChat/clawPlugin.cjs +24 -0
  38. package/dist/hooks/useClawChat/clawPlugin.cjs.map +1 -0
  39. package/dist/hooks/useClawChat/clawPlugin.d.ts +10 -0
  40. package/dist/hooks/useClawChat/clawPlugin.d.ts.map +1 -0
  41. package/dist/hooks/useClawChat/clawPlugin.js +22 -0
  42. package/dist/hooks/useClawChat/clawPlugin.js.map +1 -0
  43. package/dist/hooks/useClawChat/index.cjs +24 -8
  44. package/dist/hooks/useClawChat/index.cjs.map +1 -1
  45. package/dist/hooks/useClawChat/index.d.ts.map +1 -1
  46. package/dist/hooks/useClawChat/index.js +24 -8
  47. package/dist/hooks/useClawChat/index.js.map +1 -1
  48. package/dist/hooks/useClawChat/types.cjs +1 -1
  49. package/dist/hooks/useClawChat/types.cjs.map +1 -1
  50. package/dist/hooks/useClawChat/types.d.ts +12 -5
  51. package/dist/hooks/useClawChat/types.d.ts.map +1 -1
  52. package/dist/hooks/useClawChat/types.js +1 -1
  53. package/dist/hooks/useClawChat/types.js.map +1 -1
  54. package/dist/index.css +1 -1
  55. package/package.json +1 -1
  56. package/dist/assets/Attachment.cjs +0 -8
  57. package/dist/assets/Attachment.cjs.map +0 -1
  58. package/dist/assets/Attachment.js +0 -6
  59. package/dist/assets/Attachment.js.map +0 -1
  60. package/dist/assets/ClearIcon.cjs +0 -8
  61. package/dist/assets/ClearIcon.cjs.map +0 -1
  62. package/dist/assets/ClearIcon.js +0 -6
  63. package/dist/assets/ClearIcon.js.map +0 -1
  64. package/dist/assets/Download.cjs +0 -10
  65. package/dist/assets/Download.cjs.map +0 -1
  66. package/dist/assets/Download.js +0 -8
  67. package/dist/assets/Download.js.map +0 -1
  68. package/dist/assets/NewSession.cjs +0 -8
  69. package/dist/assets/NewSession.cjs.map +0 -1
  70. package/dist/assets/NewSession.js +0 -6
  71. package/dist/assets/NewSession.js.map +0 -1
  72. package/dist/assets/RefreshIcon.cjs +0 -8
  73. package/dist/assets/RefreshIcon.cjs.map +0 -1
  74. package/dist/assets/RefreshIcon.js +0 -6
  75. package/dist/assets/RefreshIcon.js.map +0 -1
  76. package/dist/assets/ThumbDownIcon.cjs +0 -8
  77. package/dist/assets/ThumbDownIcon.cjs.map +0 -1
  78. package/dist/assets/ThumbDownIcon.js +0 -6
  79. package/dist/assets/ThumbDownIcon.js.map +0 -1
  80. package/dist/assets/ThumbUpIcon.cjs +0 -8
  81. package/dist/assets/ThumbUpIcon.cjs.map +0 -1
  82. package/dist/assets/ThumbUpIcon.js +0 -6
  83. package/dist/assets/ThumbUpIcon.js.map +0 -1
@@ -17,7 +17,7 @@ var valtio = require('valtio');
17
17
 
18
18
  const ChatkitImpl = React.forwardRef((props, ref) => {
19
19
  const { t } = I18nContext.useI18n();
20
- 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;
20
+ 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, threadMaxWidth, } = props;
21
21
  const { controller } = props;
22
22
  const { threadMap, currentThreadId } = valtio.useSnapshot(controller.store.state);
23
23
  // useImperativeHandleChatkitRef(ref, controller, onError);
@@ -148,6 +148,7 @@ const ChatkitImpl = React.forwardRef((props, ref) => {
148
148
  // },
149
149
  });
150
150
  return (jsxRuntime.jsx(react.AssistantRuntimeProvider, { runtime: runtime, children: jsxRuntime.jsxs(ChatkitContext.ChatkitProvider, { value: {
151
+ threadMaxWidth,
151
152
  ref: ref,
152
153
  plugins: plugins || [],
153
154
  showThreadList: threadList$1 !== false,
@@ -161,17 +162,18 @@ const ChatkitImpl = React.forwardRef((props, ref) => {
161
162
  authors,
162
163
  composerDisabled,
163
164
  composerTop,
165
+ threadBottom,
164
166
  }, children: [jsxRuntime.jsxs("div", { className: "flex h-full w-full", children: [threadList$1 !== false
165
167
  && (typeof threadList$1 === 'function' ? (threadList$1({
166
168
  threadList: lodashEs.values(threadMap),
167
- })) : (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));
169
+ })) : (jsxRuntime.jsx(threadList, {}))), jsxRuntime.jsx("div", { className: "flex-1 h-full", children: jsxRuntime.jsx(thread.Thread, { welcome: welcome, recommends: recommends }) })] }), (tools || []).map((tool, index) => React.createElement(tool)), jsxRuntime.jsx(executionCard, {})] }) }, currentThreadId));
168
170
  });
169
171
  function Chatkit(props) {
170
- 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;
172
+ 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, threadMaxWidth, } = props;
171
173
  const controllerRef = React.useRef(chatControllerFromProps);
172
174
  const controller = controllerRef.current;
173
175
  const { currentThreadId, threadMap } = valtio.useSnapshot(controller.store.state);
174
- 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) }) }));
176
+ 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, threadMaxWidth: threadMaxWidth }, currentThreadId) }) }));
175
177
  }
176
178
  var index = React.forwardRef(Chatkit);
177
179
 
@@ -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 {\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 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","_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, last } 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 threadMaxWidth,\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 return (\n <AssistantRuntimeProvider key={currentThreadId} runtime={runtime}>\n <ChatkitProvider\n value={{\n threadMaxWidth,\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 threadBottom,\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\">\n <Thread welcome={welcome} recommends={recommends} />\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 threadMaxWidth,\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 threadMaxWidth={threadMaxWidth}\n />\n </div>\n </I18nProvider>\n );\n}\n\nexport default forwardRef(Chatkit);\n"],"names":["forwardRef","useI18n","threadList","useSnapshot","useMemo","useExternalStoreRuntime","convertToBase64","compact","_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;;AAiRnD,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;;AAqRnD,wBAAmC"}
@@ -15,7 +15,7 @@ import { useSnapshot } from 'valtio';
15
15
 
16
16
  const ChatkitImpl = forwardRef((props, ref) => {
17
17
  const { t } = useI18n();
18
- 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;
18
+ 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, threadMaxWidth, } = props;
19
19
  const { controller } = props;
20
20
  const { threadMap, currentThreadId } = useSnapshot(controller.store.state);
21
21
  // useImperativeHandleChatkitRef(ref, controller, onError);
@@ -146,6 +146,7 @@ const ChatkitImpl = forwardRef((props, ref) => {
146
146
  // },
147
147
  });
148
148
  return (jsx(AssistantRuntimeProvider, { runtime: runtime, children: jsxs(ChatkitProvider, { value: {
149
+ threadMaxWidth,
149
150
  ref: ref,
150
151
  plugins: plugins || [],
151
152
  showThreadList: threadList !== false,
@@ -159,17 +160,18 @@ const ChatkitImpl = forwardRef((props, ref) => {
159
160
  authors,
160
161
  composerDisabled,
161
162
  composerTop,
163
+ threadBottom,
162
164
  }, children: [jsxs("div", { className: "flex h-full w-full", children: [threadList !== false
163
165
  && (typeof threadList === 'function' ? (threadList({
164
166
  threadList: values(threadMap),
165
- })) : (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));
167
+ })) : (jsx(ThreadList, {}))), jsx("div", { className: "flex-1 h-full", children: jsx(Thread, { welcome: welcome, recommends: recommends }) })] }), (tools || []).map((tool, index) => React__default.createElement(tool)), jsx(ExecutionCard, {})] }) }, currentThreadId));
166
168
  });
167
169
  function Chatkit(props) {
168
- 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;
170
+ 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, threadMaxWidth, } = props;
169
171
  const controllerRef = useRef(chatControllerFromProps);
170
172
  const controller = controllerRef.current;
171
173
  const { currentThreadId, threadMap } = useSnapshot(controller.store.state);
172
- 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) }) }));
174
+ 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, threadMaxWidth: threadMaxWidth }, currentThreadId) }) }));
173
175
  }
174
176
  var index = forwardRef(Chatkit);
175
177
 
@@ -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 {\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 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":["_jsx","_jsxs","React"],"mappings":"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"}
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, last } 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 threadMaxWidth,\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 return (\n <AssistantRuntimeProvider key={currentThreadId} runtime={runtime}>\n <ChatkitProvider\n value={{\n threadMaxWidth,\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 threadBottom,\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\">\n <Thread welcome={welcome} recommends={recommends} />\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 threadMaxWidth,\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 threadMaxWidth={threadMaxWidth}\n />\n </div>\n </I18nProvider>\n );\n}\n\nexport default forwardRef(Chatkit);\n"],"names":["_jsx","_jsxs","React"],"mappings":"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"}
@@ -31,6 +31,7 @@ export interface ChatkitProps {
31
31
  expandReasoning?: boolean;
32
32
  controller: ChatController;
33
33
  composerDisabled?: boolean;
34
+ threadMaxWidth?: number;
34
35
  }
35
36
  export interface ChatkitRef {
36
37
  /**
@@ -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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"}
@@ -4,15 +4,16 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  require('@assistant-ui/react-markdown/styles/dot.css');
5
5
  var reactMarkdown = require('@assistant-ui/react-markdown');
6
6
  var remarkGfm = require('remark-gfm');
7
+ var remarkBreaks = require('remark-breaks');
7
8
  var rehypeRaw = require('rehype-raw');
8
9
  var rehypeSanitize = require('rehype-sanitize');
9
10
  var React = require('react');
10
11
  var lucideReact = require('lucide-react');
11
12
  var tooltipIconButton = require('./tooltip-icon-button.cjs');
12
13
  var utils = require('../../lib/utils.cjs');
13
- var shikiHighlighter = require('./shiki-highlighter.cjs');
14
14
  var useDebounce = require('../../hooks/useDebounce.cjs');
15
15
  var I18nContext = require('../../contexts/I18nContext.cjs');
16
+ var shikiHighlighter = require('./shiki-highlighter.cjs');
16
17
 
17
18
  const schema = {
18
19
  ...rehypeSanitize.defaultSchema,
@@ -51,15 +52,17 @@ const schema = {
51
52
  source: ['src', 'type'],
52
53
  },
53
54
  };
54
- const remarkPlugins = [remarkGfm];
55
+ const remarkPlugins = [remarkGfm, remarkBreaks];
55
56
  const rehypePlugins = [
56
57
  rehypeRaw,
57
58
  [rehypeSanitize, schema],
58
59
  // rehypeAppendCursor,
59
60
  ];
60
- const MarkdownTextImpl = () => {
61
- return (jsxRuntime.jsx(reactMarkdown.MarkdownTextPrimitive, { remarkPlugins: remarkPlugins, rehypePlugins: rehypePlugins, className: "aui-md", components: defaultComponents }));
62
- };
61
+ function MarkdownTextImpl() {
62
+ return (jsxRuntime.jsx(reactMarkdown.MarkdownTextPrimitive, { remarkPlugins: remarkPlugins, rehypePlugins: rehypePlugins, className: "aui-md",
63
+ // smooth={false}
64
+ components: defaultComponents }));
65
+ }
63
66
  const MarkdownText = React.memo(MarkdownTextImpl);
64
67
  const CodeHeader = ({ language, code }) => {
65
68
  const { isCopied, copyToClipboard } = useCopyToClipboard();
@@ -72,10 +75,10 @@ const CodeHeader = ({ language, code }) => {
72
75
  };
73
76
  return (jsxRuntime.jsxs("div", { className: "aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg border bg-muted-foreground/15 px-4 py-2 text-sm font-semibold text-foreground max-w-[800px] overflow-auto", children: [jsxRuntime.jsx("span", { className: "aui-code-header-language lowercase [&>span]:text-xs", children: processedLanguage }), jsxRuntime.jsxs(tooltipIconButton.TooltipIconButton, { tooltip: t('thread.copy'), onClick: onCopy, children: [!isCopied && jsxRuntime.jsx(lucideReact.CopyIcon, {}), isCopied && jsxRuntime.jsx(lucideReact.CheckIcon, {})] })] }));
74
77
  };
75
- const Video = ({ src, className, ...props }) => {
78
+ function Video({ src, className, ...props }) {
76
79
  const debouncedSrc = useDebounce.useDebounce(src, 500);
77
80
  return (jsxRuntime.jsx("video", { src: debouncedSrc, style: { maxWidth: 400 }, className: utils.cn('aui-md-video max-w-full rounded-lg', className), controls: true, ...props }));
78
- };
81
+ }
79
82
  const videoExtensions = [
80
83
  '.mp4',
81
84
  '.avi',
@@ -106,23 +109,19 @@ const defaultComponents = reactMarkdown.unstable_memoizeMarkdownComponents({
106
109
  h5: ({ className, ...props }) => (jsxRuntime.jsx("h5", { className: utils.cn('aui-md-h5 my-4 text-lg font-semibold first:mt-0 last:mb-0', className), ...props })),
107
110
  h6: ({ className, ...props }) => (jsxRuntime.jsx("h6", { className: utils.cn('aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0', className), ...props })),
108
111
  p: ({ className, ...props }) => (jsxRuntime.jsx("p", { className: utils.cn('aui-md-p text-[13px] mt-5 mb-5 leading-7 first:mt-0 last:mb-0 chatkit-md-text-p', className), ...props })),
109
- image: ({ className, ...props }) => {
110
- return (jsxRuntime.jsx("img", { src: props.href, style: { maxWidth: 400 }, className: utils.cn('aui-md-img max-w-full rounded-lg', className) }));
111
- },
112
+ image: ({ className, ...props }) => (jsxRuntime.jsx("img", { src: props.href, style: { maxWidth: 400 }, className: utils.cn('aui-md-img max-w-full rounded-lg', className) })),
112
113
  a: ({ className, ...props }) => {
113
114
  const isVideo = (href) => {
114
115
  if (!href)
115
116
  return false;
116
- return videoExtensions.some(ext => href.toLowerCase().includes(ext));
117
+ return videoExtensions.some((ext) => href.toLowerCase().includes(ext));
117
118
  };
118
119
  if (isVideo(props.href)) {
119
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(Video, { src: props.href, className: className, ...props }) }));
120
+ return jsxRuntime.jsx(Video, { src: props.href, className: className, ...props });
120
121
  }
121
122
  return (jsxRuntime.jsx("a", { className: utils.cn('aui-md-a font-medium text-primary underline underline-offset-4', className), ...props }));
122
123
  },
123
- video: ({ className, ...props }) => {
124
- return jsxRuntime.jsx(Video, { className: className, ...props });
125
- },
124
+ video: ({ className, ...props }) => (jsxRuntime.jsx(Video, { className: className, ...props })),
126
125
  blockquote: ({ className, ...props }) => (jsxRuntime.jsx("blockquote", { className: utils.cn('aui-md-blockquote border-l-2 pl-6 italic', className), ...props })),
127
126
  ul: ({ className, ...props }) => (jsxRuntime.jsx("ul", { className: utils.cn('aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2', className), ...props })),
128
127
  ol: ({ className, ...props }) => (jsxRuntime.jsx("ol", { className: utils.cn('aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2', className), ...props })),
@@ -136,13 +135,11 @@ const defaultComponents = reactMarkdown.unstable_memoizeMarkdownComponents({
136
135
  pre: ({ className, ...props }) => (jsxRuntime.jsx("pre", { className: utils.cn('aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg p-4', className), ...props })),
137
136
  code: function Code({ className, ...props }) {
138
137
  const isCodeBlock = reactMarkdown.useIsMarkdownCodeBlock();
139
- return (jsxRuntime.jsx("code", { className: utils.cn(!isCodeBlock &&
140
- 'aui-md-inline-code rounded border bg-muted font-semibold', className), ...props }));
138
+ return (jsxRuntime.jsx("code", { className: utils.cn(!isCodeBlock
139
+ && 'aui-md-inline-code rounded border bg-muted font-semibold', className), ...props }));
141
140
  },
142
141
  CodeHeader,
143
- div: ({ className, ...props }) => {
144
- return jsxRuntime.jsx("div", { className: className, ...props });
145
- },
142
+ div: ({ className, ...props }) => jsxRuntime.jsx("div", { className: className, ...props }),
146
143
  });
147
144
 
148
145
  exports.MarkdownText = MarkdownText;
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-text.cjs","sources":["../../../src/components/assistant-ui/markdown-text.tsx"],"sourcesContent":["'use client';\n\nimport '@assistant-ui/react-markdown/styles/dot.css';\n\nimport {\n type CodeHeaderProps,\n MarkdownTextPrimitive,\n unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,\n useIsMarkdownCodeBlock,\n} from '@assistant-ui/react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\nimport { type FC, memo, useState } from 'react';\nimport { CheckIcon, CopyIcon, Loader2 } from 'lucide-react';\nimport './index.less';\nimport { TooltipIconButton } from '@/components/assistant-ui/tooltip-icon-button';\nimport { cn } from '@/lib/utils';\nimport { SyntaxHighlighter } from './shiki-highlighter';\nimport { useDebounce } from '@/hooks/useDebounce';\nimport { PluggableList } from 'unified';\nimport { useI18n } from '@/contexts/I18nContext';\n\nconst schema = {\n ...defaultSchema,\n // 1. 添加标签到白名单\n tagNames: [...(defaultSchema.tagNames || []), 'video', 'source', 'iframe'],\n // 2. 添加允许的属性\n attributes: {\n ...defaultSchema.attributes,\n iframe: [\n 'src',\n 'width',\n 'height',\n 'frameborder',\n 'allow',\n 'allowfullscreen',\n ],\n // 允许 video 标签使用的属性\n video: [\n 'controls',\n 'width',\n 'height',\n 'poster',\n 'preload',\n 'src',\n 'muted',\n 'loop',\n 'autoPlay',\n 'playsInline',\n ],\n div: [\n ...(defaultSchema.attributes?.div || []),\n 'className', //\n 'data-content', // 如果你在插件里用了 data-content\n ],\n // 允许 source 标签使用的属性\n source: ['src', 'type'],\n },\n};\n\nconst remarkPlugins: PluggableList = [remarkGfm];\n\nconst rehypePlugins: PluggableList = [\n rehypeRaw,\n [rehypeSanitize, schema],\n // rehypeAppendCursor,\n];\nconst MarkdownTextImpl = () => {\n return (\n <MarkdownTextPrimitive\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n className=\"aui-md\"\n components={defaultComponents}\n />\n );\n};\n\nexport const MarkdownText = memo(MarkdownTextImpl);\n\nconst CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const processedLanguage = language == 'unknown' ? 'text' : language;\n const { t } = useI18n();\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg border bg-muted-foreground/15 px-4 py-2 text-sm font-semibold text-foreground max-w-[800px] overflow-auto\">\n <span className=\"aui-code-header-language lowercase [&>span]:text-xs\">\n {processedLanguage}\n </span>\n <TooltipIconButton tooltip={t('thread.copy')} onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n\nconst Video = ({\n src,\n className,\n ...props\n}: {\n src?: string;\n className?: string;\n}) => {\n const debouncedSrc = useDebounce(src, 500);\n return (\n <video\n src={debouncedSrc}\n style={{ maxWidth: 400 }}\n className={cn('aui-md-video max-w-full rounded-lg', className)}\n controls\n {...props}\n />\n );\n};\n\nconst videoExtensions = [\n '.mp4',\n '.avi',\n '.mov',\n '.wmv',\n '.flv',\n '.webm',\n '.mkv',\n '.m4v',\n];\n\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\nconst defaultComponents = memoizeMarkdownComponents({\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n 'aui-md-h1 mb-8 scroll-m-20 text-4xl font-extrabold tracking-tight last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n 'aui-md-h2 mt-6 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n 'aui-md-h3 mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h4: ({ className, ...props }) => (\n <h4\n className={cn(\n 'aui-md-h4 mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h5: ({ className, ...props }) => (\n <h5\n className={cn(\n 'aui-md-h5 my-4 text-lg font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h6: ({ className, ...props }) => (\n <h6\n className={cn(\n 'aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n 'aui-md-p text-[13px] mt-5 mb-5 leading-7 first:mt-0 last:mb-0 chatkit-md-text-p',\n className,\n )}\n {...props}\n />\n ),\n image: ({ className, ...props }) => {\n return (\n <img\n src={props.href}\n style={{ maxWidth: 400 }}\n className={cn('aui-md-img max-w-full rounded-lg', className)}\n />\n );\n },\n a: ({ className, ...props }) => {\n const isVideo = (href: string | undefined) => {\n if (!href) return false;\n return videoExtensions.some(ext => href.toLowerCase().includes(ext));\n };\n\n if (isVideo(props.href)) {\n return (\n <>\n <Video src={props.href} className={className} {...props} />\n </>\n );\n }\n\n return (\n <a\n className={cn(\n 'aui-md-a font-medium text-primary underline underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n },\n video: ({ className, ...props }) => {\n return <Video className={className} {...props} />;\n },\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn('aui-md-blockquote border-l-2 pl-6 italic', className)}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn('aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2', className)}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn('aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2', className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn('aui-md-hr my-5 border-b', className)} {...props} />\n ),\n table: ({ className, ...props }) => (\n <table\n className={cn(\n 'aui-md-table my-5 w-full border-separate border-spacing-0 overflow-y-auto',\n className,\n )}\n {...props}\n />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn(\n 'aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn(\n 'aui-md-td border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn(\n 'aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg',\n className,\n )}\n {...props}\n />\n ),\n sup: ({ className, ...props }) => (\n <sup\n className={cn('aui-md-sup [&>a]:text-xs [&>a]:no-underline', className)}\n {...props}\n />\n ),\n SyntaxHighlighter: SyntaxHighlighter,\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n 'aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg p-4',\n className,\n )}\n {...props}\n />\n ),\n code: function Code({ className, ...props }) {\n const isCodeBlock = useIsMarkdownCodeBlock();\n return (\n <code\n className={cn(\n !isCodeBlock &&\n 'aui-md-inline-code rounded border bg-muted font-semibold',\n className,\n )}\n {...props}\n />\n );\n },\n CodeHeader,\n div: ({ className, ...props }) => {\n return <div className={className} {...props} />;\n },\n});\n"],"names":["defaultSchema","_jsx","MarkdownTextPrimitive","memo","useI18n","_jsxs","TooltipIconButton","CopyIcon","CheckIcon","useDebounce","cn","useState","memoizeMarkdownComponents","_Fragment","SyntaxHighlighter","useIsMarkdownCodeBlock"],"mappings":"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"}
1
+ {"version":3,"file":"markdown-text.cjs","sources":["../../../src/components/assistant-ui/markdown-text.tsx"],"sourcesContent":["'use client';\n\nimport '@assistant-ui/react-markdown/styles/dot.css';\n\nimport {\n type CodeHeaderProps,\n MarkdownTextPrimitive,\n unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,\n useIsMarkdownCodeBlock,\n} from '@assistant-ui/react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remarkBreaks from 'remark-breaks';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\nimport { type FC, memo, useState } from 'react';\nimport { CheckIcon, CopyIcon, Loader2 } from 'lucide-react';\nimport './index.less';\nimport { TooltipIconButton } from '@/components/assistant-ui/tooltip-icon-button';\nimport { cn } from '@/lib/utils';\nimport { useDebounce } from '@/hooks/useDebounce';\nimport { PluggableList } from 'unified';\nimport { useI18n } from '@/contexts/I18nContext';\nimport { SyntaxHighlighter } from './shiki-highlighter';\n\nconst schema = {\n ...defaultSchema,\n // 1. 添加标签到白名单\n tagNames: [...(defaultSchema.tagNames || []), 'video', 'source', 'iframe'],\n // 2. 添加允许的属性\n attributes: {\n ...defaultSchema.attributes,\n iframe: [\n 'src',\n 'width',\n 'height',\n 'frameborder',\n 'allow',\n 'allowfullscreen',\n ],\n // 允许 video 标签使用的属性\n video: [\n 'controls',\n 'width',\n 'height',\n 'poster',\n 'preload',\n 'src',\n 'muted',\n 'loop',\n 'autoPlay',\n 'playsInline',\n ],\n div: [\n ...(defaultSchema.attributes?.div || []),\n 'className', //\n 'data-content', // 如果你在插件里用了 data-content\n ],\n // 允许 source 标签使用的属性\n source: ['src', 'type'],\n },\n};\n\nconst remarkPlugins: PluggableList = [remarkGfm, remarkBreaks];\n\nconst rehypePlugins: PluggableList = [\n rehypeRaw,\n [rehypeSanitize, schema],\n // rehypeAppendCursor,\n];\n\nfunction MarkdownTextImpl() {\n return (\n <MarkdownTextPrimitive\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n className=\"aui-md\"\n // smooth={false}\n components={defaultComponents}\n />\n );\n}\n\nexport const MarkdownText = memo(MarkdownTextImpl);\n\nconst CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const processedLanguage = language == 'unknown' ? 'text' : language;\n const { t } = useI18n();\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg border bg-muted-foreground/15 px-4 py-2 text-sm font-semibold text-foreground max-w-[800px] overflow-auto\">\n <span className=\"aui-code-header-language lowercase [&>span]:text-xs\">\n {processedLanguage}\n </span>\n <TooltipIconButton tooltip={t('thread.copy')} onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n\nfunction Video({\n src,\n className,\n ...props\n}: {\n src?: string;\n className?: string;\n}) {\n const debouncedSrc = useDebounce(src, 500);\n return (\n <video\n src={debouncedSrc}\n style={{ maxWidth: 400 }}\n className={cn('aui-md-video max-w-full rounded-lg', className)}\n controls\n {...props}\n />\n );\n}\n\nconst videoExtensions = [\n '.mp4',\n '.avi',\n '.mov',\n '.wmv',\n '.flv',\n '.webm',\n '.mkv',\n '.m4v',\n];\n\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\nconst defaultComponents = memoizeMarkdownComponents({\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n 'aui-md-h1 mb-8 scroll-m-20 text-4xl font-extrabold tracking-tight last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n 'aui-md-h2 mt-6 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n 'aui-md-h3 mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h4: ({ className, ...props }) => (\n <h4\n className={cn(\n 'aui-md-h4 mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h5: ({ className, ...props }) => (\n <h5\n className={cn(\n 'aui-md-h5 my-4 text-lg font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h6: ({ className, ...props }) => (\n <h6\n className={cn(\n 'aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n 'aui-md-p text-[13px] mt-5 mb-5 leading-7 first:mt-0 last:mb-0 chatkit-md-text-p',\n className,\n )}\n {...props}\n />\n ),\n image: ({ className, ...props }) => (\n <img\n src={props.href}\n style={{ maxWidth: 400 }}\n className={cn('aui-md-img max-w-full rounded-lg', className)}\n />\n ),\n a: ({ className, ...props }) => {\n const isVideo = (href: string | undefined) => {\n if (!href) return false;\n return videoExtensions.some((ext) => href.toLowerCase().includes(ext));\n };\n\n if (isVideo(props.href)) {\n return <Video src={props.href} className={className} {...props} />;\n }\n\n return (\n <a\n className={cn(\n 'aui-md-a font-medium text-primary underline underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n },\n video: ({ className, ...props }) => (\n <Video className={className} {...props} />\n ),\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn('aui-md-blockquote border-l-2 pl-6 italic', className)}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn('aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2', className)}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn('aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2', className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn('aui-md-hr my-5 border-b', className)} {...props} />\n ),\n table: ({ className, ...props }) => (\n <table\n className={cn(\n 'aui-md-table my-5 w-full border-separate border-spacing-0 overflow-y-auto',\n className,\n )}\n {...props}\n />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn(\n 'aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn(\n 'aui-md-td border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn(\n 'aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg',\n className,\n )}\n {...props}\n />\n ),\n sup: ({ className, ...props }) => (\n <sup\n className={cn('aui-md-sup [&>a]:text-xs [&>a]:no-underline', className)}\n {...props}\n />\n ),\n SyntaxHighlighter,\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n 'aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg p-4',\n className,\n )}\n {...props}\n />\n ),\n code: function Code({ className, ...props }) {\n const isCodeBlock = useIsMarkdownCodeBlock();\n return (\n <code\n className={cn(\n !isCodeBlock\n && 'aui-md-inline-code rounded border bg-muted font-semibold',\n className,\n )}\n {...props}\n />\n );\n },\n CodeHeader,\n div: ({ className, ...props }) => <div className={className} {...props} />,\n});\n"],"names":["defaultSchema","_jsx","MarkdownTextPrimitive","memo","useI18n","_jsxs","TooltipIconButton","CopyIcon","CheckIcon","useDebounce","cn","useState","memoizeMarkdownComponents","SyntaxHighlighter","useIsMarkdownCodeBlock"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import '@assistant-ui/react-markdown/styles/dot.css';
2
2
  import './index.less';
3
- export declare const MarkdownText: import("react").MemoExoticComponent<() => JSX.Element>;
3
+ declare function MarkdownTextImpl(): JSX.Element;
4
+ export declare const MarkdownText: import("react").MemoExoticComponent<typeof MarkdownTextImpl>;
5
+ export {};
4
6
  //# sourceMappingURL=markdown-text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-text.d.ts","sourceRoot":"","sources":["../../../src/components/assistant-ui/markdown-text.tsx"],"names":[],"mappings":"AAEA,OAAO,6CAA6C,CAAC;AAarD,OAAO,cAAc,CAAC;AAgEtB,eAAO,MAAM,YAAY,wDAAyB,CAAC"}
1
+ {"version":3,"file":"markdown-text.d.ts","sourceRoot":"","sources":["../../../src/components/assistant-ui/markdown-text.tsx"],"names":[],"mappings":"AAEA,OAAO,6CAA6C,CAAC;AAcrD,OAAO,cAAc,CAAC;AAsDtB,iBAAS,gBAAgB,gBAUxB;AAED,eAAO,MAAM,YAAY,8DAAyB,CAAC"}
@@ -1,16 +1,17 @@
1
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import '@assistant-ui/react-markdown/styles/dot.css';
3
3
  import { unstable_memoizeMarkdownComponents, useIsMarkdownCodeBlock, MarkdownTextPrimitive } from '@assistant-ui/react-markdown';
4
4
  import remarkGfm from 'remark-gfm';
5
+ import remarkBreaks from 'remark-breaks';
5
6
  import rehypeRaw from 'rehype-raw';
6
7
  import rehypeSanitize, { defaultSchema } from 'rehype-sanitize';
7
8
  import { memo, useState } from 'react';
8
9
  import { CopyIcon, CheckIcon } from 'lucide-react';
9
10
  import { TooltipIconButton } from './tooltip-icon-button.js';
10
11
  import { cn } from '../../lib/utils.js';
11
- import { SyntaxHighlighter } from './shiki-highlighter.js';
12
12
  import { useDebounce } from '../../hooks/useDebounce.js';
13
13
  import { useI18n } from '../../contexts/I18nContext.js';
14
+ import { SyntaxHighlighter } from './shiki-highlighter.js';
14
15
 
15
16
  const schema = {
16
17
  ...defaultSchema,
@@ -49,15 +50,17 @@ const schema = {
49
50
  source: ['src', 'type'],
50
51
  },
51
52
  };
52
- const remarkPlugins = [remarkGfm];
53
+ const remarkPlugins = [remarkGfm, remarkBreaks];
53
54
  const rehypePlugins = [
54
55
  rehypeRaw,
55
56
  [rehypeSanitize, schema],
56
57
  // rehypeAppendCursor,
57
58
  ];
58
- const MarkdownTextImpl = () => {
59
- return (jsx(MarkdownTextPrimitive, { remarkPlugins: remarkPlugins, rehypePlugins: rehypePlugins, className: "aui-md", components: defaultComponents }));
60
- };
59
+ function MarkdownTextImpl() {
60
+ return (jsx(MarkdownTextPrimitive, { remarkPlugins: remarkPlugins, rehypePlugins: rehypePlugins, className: "aui-md",
61
+ // smooth={false}
62
+ components: defaultComponents }));
63
+ }
61
64
  const MarkdownText = memo(MarkdownTextImpl);
62
65
  const CodeHeader = ({ language, code }) => {
63
66
  const { isCopied, copyToClipboard } = useCopyToClipboard();
@@ -70,10 +73,10 @@ const CodeHeader = ({ language, code }) => {
70
73
  };
71
74
  return (jsxs("div", { className: "aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg border bg-muted-foreground/15 px-4 py-2 text-sm font-semibold text-foreground max-w-[800px] overflow-auto", children: [jsx("span", { className: "aui-code-header-language lowercase [&>span]:text-xs", children: processedLanguage }), jsxs(TooltipIconButton, { tooltip: t('thread.copy'), onClick: onCopy, children: [!isCopied && jsx(CopyIcon, {}), isCopied && jsx(CheckIcon, {})] })] }));
72
75
  };
73
- const Video = ({ src, className, ...props }) => {
76
+ function Video({ src, className, ...props }) {
74
77
  const debouncedSrc = useDebounce(src, 500);
75
78
  return (jsx("video", { src: debouncedSrc, style: { maxWidth: 400 }, className: cn('aui-md-video max-w-full rounded-lg', className), controls: true, ...props }));
76
- };
79
+ }
77
80
  const videoExtensions = [
78
81
  '.mp4',
79
82
  '.avi',
@@ -104,23 +107,19 @@ const defaultComponents = unstable_memoizeMarkdownComponents({
104
107
  h5: ({ className, ...props }) => (jsx("h5", { className: cn('aui-md-h5 my-4 text-lg font-semibold first:mt-0 last:mb-0', className), ...props })),
105
108
  h6: ({ className, ...props }) => (jsx("h6", { className: cn('aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0', className), ...props })),
106
109
  p: ({ className, ...props }) => (jsx("p", { className: cn('aui-md-p text-[13px] mt-5 mb-5 leading-7 first:mt-0 last:mb-0 chatkit-md-text-p', className), ...props })),
107
- image: ({ className, ...props }) => {
108
- return (jsx("img", { src: props.href, style: { maxWidth: 400 }, className: cn('aui-md-img max-w-full rounded-lg', className) }));
109
- },
110
+ image: ({ className, ...props }) => (jsx("img", { src: props.href, style: { maxWidth: 400 }, className: cn('aui-md-img max-w-full rounded-lg', className) })),
110
111
  a: ({ className, ...props }) => {
111
112
  const isVideo = (href) => {
112
113
  if (!href)
113
114
  return false;
114
- return videoExtensions.some(ext => href.toLowerCase().includes(ext));
115
+ return videoExtensions.some((ext) => href.toLowerCase().includes(ext));
115
116
  };
116
117
  if (isVideo(props.href)) {
117
- return (jsx(Fragment, { children: jsx(Video, { src: props.href, className: className, ...props }) }));
118
+ return jsx(Video, { src: props.href, className: className, ...props });
118
119
  }
119
120
  return (jsx("a", { className: cn('aui-md-a font-medium text-primary underline underline-offset-4', className), ...props }));
120
121
  },
121
- video: ({ className, ...props }) => {
122
- return jsx(Video, { className: className, ...props });
123
- },
122
+ video: ({ className, ...props }) => (jsx(Video, { className: className, ...props })),
124
123
  blockquote: ({ className, ...props }) => (jsx("blockquote", { className: cn('aui-md-blockquote border-l-2 pl-6 italic', className), ...props })),
125
124
  ul: ({ className, ...props }) => (jsx("ul", { className: cn('aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2', className), ...props })),
126
125
  ol: ({ className, ...props }) => (jsx("ol", { className: cn('aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2', className), ...props })),
@@ -130,17 +129,15 @@ const defaultComponents = unstable_memoizeMarkdownComponents({
130
129
  td: ({ className, ...props }) => (jsx("td", { className: cn('aui-md-td border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right', className), ...props })),
131
130
  tr: ({ className, ...props }) => (jsx("tr", { className: cn('aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg', className), ...props })),
132
131
  sup: ({ className, ...props }) => (jsx("sup", { className: cn('aui-md-sup [&>a]:text-xs [&>a]:no-underline', className), ...props })),
133
- SyntaxHighlighter: SyntaxHighlighter,
132
+ SyntaxHighlighter,
134
133
  pre: ({ className, ...props }) => (jsx("pre", { className: cn('aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg p-4', className), ...props })),
135
134
  code: function Code({ className, ...props }) {
136
135
  const isCodeBlock = useIsMarkdownCodeBlock();
137
- return (jsx("code", { className: cn(!isCodeBlock &&
138
- 'aui-md-inline-code rounded border bg-muted font-semibold', className), ...props }));
136
+ return (jsx("code", { className: cn(!isCodeBlock
137
+ && 'aui-md-inline-code rounded border bg-muted font-semibold', className), ...props }));
139
138
  },
140
139
  CodeHeader,
141
- div: ({ className, ...props }) => {
142
- return jsx("div", { className: className, ...props });
143
- },
140
+ div: ({ className, ...props }) => jsx("div", { className: className, ...props }),
144
141
  });
145
142
 
146
143
  export { MarkdownText };