@easyv/biz-components 0.0.40 → 0.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index.es2.js +2 -2
- package/dist/_virtual/index.es3.js +2 -2
- package/dist/_virtual/index.es4.js +2 -2
- package/dist/components/AiMessageRender/AiMessageRender.d.ts +1 -0
- package/dist/components/AiMessageRender/AiMessageRender.es.js.map +1 -1
- package/dist/components/AiMessageRender/constants.d.ts +1 -0
- package/dist/components/AiMessageRender/constants.es.js +1 -0
- package/dist/components/AiMessageRender/constants.es.js.map +1 -1
- package/dist/components/AiMessageRender/index.less.es.js +1 -1
- package/dist/components/AiMessageRender/index.less.es.js.map +1 -1
- package/dist/components/AiMessageRender/types.d.ts +3 -1
- package/dist/components/AiMessageRender/utils.d.ts +6 -5
- package/dist/components/AiMessageRender/utils.es.js +21 -6
- package/dist/components/AiMessageRender/utils.es.js.map +1 -1
- package/dist/node_modules/.pnpm/classnames@2.3.2/node_modules/classnames/index.es.js +1 -1
- package/dist/node_modules/.pnpm/co-web-worker@1.0.1/node_modules/co-web-worker/index.es.js +1 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isNil.es.js +7 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isNil.es.js.map +1 -0
- package/dist/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.es.js +1 -1
- package/package.json +1 -1
|
@@ -11,6 +11,7 @@ export interface AiMessageRenderProps {
|
|
|
11
11
|
rootFontSize?: number;
|
|
12
12
|
/**隐藏默认样式 */
|
|
13
13
|
hideDefaultStyle?: boolean;
|
|
14
|
+
/** 并且应用于 元素的 style 属性上,而是把 string 放入 shadowDom的 style 标签内 */
|
|
14
15
|
markdownStyle?: string;
|
|
15
16
|
}
|
|
16
17
|
export declare const AiMessageRender: (props: AiMessageRenderProps) => JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiMessageRender.es.js","sources":["../../../src/components/AiMessageRender/AiMessageRender.tsx"],"sourcesContent":["import { CopyCircleOutlined } from '@easyv/react-icons';\nimport classNames from 'classnames';\nimport Markdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport { ShadowDom } from '../ShadowDom';\nimport messageRenderCss from './index.less?raw';\nimport { AiMessageContentItem } from './types';\n\nexport interface AiMessageRenderProps {\n className?: string;\n contents: AiMessageContentItem[];\n renderDashboardContent?: (msg: AiMessageContentItem) => React.ReactNode;\n showFooterButtons?: boolean;\n onCopy?: () => void;\n onRedo?: () => void;\n markdownClassName?: string;\n rootFontSize?: number;\n /**隐藏默认样式 */\n hideDefaultStyle?: boolean;\n markdownStyle?: string;\n}\n\nexport const AiMessageRender = (props: AiMessageRenderProps) => {\n const {\n className = '',\n onCopy,\n renderDashboardContent: propsRenderDashboardContent,\n showFooterButtons = false,\n contents,\n markdownClassName = '',\n rootFontSize,\n hideDefaultStyle,\n markdownStyle,\n } = props;\n\n let finalMarkdownStyle = hideDefaultStyle ? '' : messageRenderCss;\n if (markdownStyle) {\n finalMarkdownStyle += `\\n${markdownStyle}`;\n }\n const renderStringContent = (msg: AiMessageContentItem) => {\n return (\n <ShadowDom\n style={finalMarkdownStyle}\n shadowRootDivClassName={markdownClassName + ' markdown-container'}\n rootFontSize={rootFontSize}\n >\n <Markdown remarkPlugins={[remarkGfm]}>{msg.text}</Markdown>\n </ShadowDom>\n );\n };\n const renderDashboardContent = (msg: AiMessageContentItem) => {\n return propsRenderDashboardContent?.(msg);\n };\n\n return (\n <div\n className={classNames(\n 'biz-px-4 biz-py-3 biz-flex biz-flex-col biz-gap-3 biz-rounded-lg',\n 'biz-bg-[#FFFFFF14] biz-select-text',\n className,\n )}\n >\n {contents.map((msg, index) => {\n if (msg.text) {\n return (\n <div key={index} className='biz-contents'>\n {renderStringContent(msg)}\n </div>\n );\n } else {\n return (\n <div key={index} className='biz-contents'>\n {renderDashboardContent(msg)}\n </div>\n );\n }\n })}\n {showFooterButtons && (\n <div className='biz-flex biz-gap-1'>\n <div className='copy-btn biz-w-6 biz-h-6 biz-rounded-md biz-flex biz-justify-center biz-items-center biz-hover:bg-bg-white biz-cursor-pointer'>\n <CopyCircleOutlined\n className='biz-w-3.5 biz-h-3.5 biz-text-text-2'\n onClick={() => onCopy?.()}\n />\n </div>\n {/* <div className='redo-btn biz-w-6 biz-h-6 biz-rounded-md biz-flex biz-justify-center biz-items-center biz-hover:bg-bg-white biz-cursor-pointer'>\n <RedoOutlined className='biz-w-3.5 biz-h-3.5 biz-text-text-2' />\n </div> */}\n </div>\n )}\n </div>\n );\n};\n"],"names":["jsx","jsxs"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"AiMessageRender.es.js","sources":["../../../src/components/AiMessageRender/AiMessageRender.tsx"],"sourcesContent":["import { CopyCircleOutlined } from '@easyv/react-icons';\nimport classNames from 'classnames';\nimport Markdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport { ShadowDom } from '../ShadowDom';\nimport messageRenderCss from './index.less?raw';\nimport { AiMessageContentItem } from './types';\n\nexport interface AiMessageRenderProps {\n className?: string;\n contents: AiMessageContentItem[];\n renderDashboardContent?: (msg: AiMessageContentItem) => React.ReactNode;\n showFooterButtons?: boolean;\n onCopy?: () => void;\n onRedo?: () => void;\n markdownClassName?: string;\n rootFontSize?: number;\n /**隐藏默认样式 */\n hideDefaultStyle?: boolean;\n /** 并且应用于 元素的 style 属性上,而是把 string 放入 shadowDom的 style 标签内 */\n markdownStyle?: string;\n}\n\nexport const AiMessageRender = (props: AiMessageRenderProps) => {\n const {\n className = '',\n onCopy,\n renderDashboardContent: propsRenderDashboardContent,\n showFooterButtons = false,\n contents,\n markdownClassName = '',\n rootFontSize,\n hideDefaultStyle,\n markdownStyle,\n } = props;\n\n let finalMarkdownStyle = hideDefaultStyle ? '' : messageRenderCss;\n if (markdownStyle) {\n finalMarkdownStyle += `\\n${markdownStyle}`;\n }\n const renderStringContent = (msg: AiMessageContentItem) => {\n return (\n <ShadowDom\n style={finalMarkdownStyle}\n shadowRootDivClassName={markdownClassName + ' markdown-container'}\n rootFontSize={rootFontSize}\n >\n <Markdown remarkPlugins={[remarkGfm]}>{msg.text}</Markdown>\n </ShadowDom>\n );\n };\n const renderDashboardContent = (msg: AiMessageContentItem) => {\n return propsRenderDashboardContent?.(msg);\n };\n\n return (\n <div\n className={classNames(\n 'biz-px-4 biz-py-3 biz-flex biz-flex-col biz-gap-3 biz-rounded-lg',\n 'biz-bg-[#FFFFFF14] biz-select-text',\n className,\n )}\n >\n {contents.map((msg, index) => {\n if (msg.text) {\n return (\n <div key={index} className='biz-contents'>\n {renderStringContent(msg)}\n </div>\n );\n } else {\n return (\n <div key={index} className='biz-contents'>\n {renderDashboardContent(msg)}\n </div>\n );\n }\n })}\n {showFooterButtons && (\n <div className='biz-flex biz-gap-1'>\n <div className='copy-btn biz-w-6 biz-h-6 biz-rounded-md biz-flex biz-justify-center biz-items-center biz-hover:bg-bg-white biz-cursor-pointer'>\n <CopyCircleOutlined\n className='biz-w-3.5 biz-h-3.5 biz-text-text-2'\n onClick={() => onCopy?.()}\n />\n </div>\n {/* <div className='redo-btn biz-w-6 biz-h-6 biz-rounded-md biz-flex biz-justify-center biz-items-center biz-hover:bg-bg-white biz-cursor-pointer'>\n <RedoOutlined className='biz-w-3.5 biz-h-3.5 biz-text-text-2' />\n </div> */}\n </div>\n )}\n </div>\n );\n};\n"],"names":["jsx","jsxs"],"mappings":";;;;;;;AAuBa,MAAA,kBAAkB,CAAC,UAAgC;AACxD,QAAA;AAAA,IACJ,YAAY;AAAA,IACZ;AAAA,IACA,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB;AAAA,IACA,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEA,MAAA,qBAAqB,mBAAmB,KAAK;AACjD,MAAI,eAAe;AACK,0BAAA;AAAA,EAAK,aAAa;AAAA,EAAA;AAEpC,QAAA,sBAAsB,CAAC,QAA8B;AAEvD,WAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP,wBAAwB,oBAAoB;AAAA,QAC5C;AAAA,QAEA,gDAAC,UAAS,EAAA,eAAe,CAAC,SAAS,GAAI,cAAI,KAAK,CAAA;AAAA,MAAA;AAAA,IAClD;AAAA,EAEJ;AACM,QAAA,yBAAyB,CAAC,QAA8B;AAC5D,WAAO,2EAA8B;AAAA,EACvC;AAGE,SAAAC,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAEC,UAAA;AAAA,QAAS,SAAA,IAAI,CAAC,KAAK,UAAU;AAC5B,cAAI,IAAI,MAAM;AACZ,yDACG,OAAgB,EAAA,WAAU,gBACxB,UAAoB,oBAAA,GAAG,KADhB,KAEV;AAAA,UAAA,OAEG;AACL,yDACG,OAAgB,EAAA,WAAU,gBACxB,UAAuB,uBAAA,GAAG,KADnB,KAEV;AAAA,UAAA;AAAA,QAEJ,CACD;AAAA,QACA,2DACE,OAAI,EAAA,WAAU,sBACb,UAACD,kCAAA,IAAA,OAAA,EAAI,WAAU,iIACb,UAAAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,MAAM;AAAA,UAAS;AAAA,WAE5B,EAIF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ;AAEJ;"}
|
|
@@ -6,6 +6,7 @@ var AiAgentMessageType = /* @__PURE__ */ ((AiAgentMessageType2) => {
|
|
|
6
6
|
AiAgentMessageType2["TEXT"] = "text";
|
|
7
7
|
AiAgentMessageType2["QUESTION"] = "question";
|
|
8
8
|
AiAgentMessageType2["TITLE"] = "title";
|
|
9
|
+
AiAgentMessageType2["DASHBOARD_PLACEHOLDER"] = "dashboard_placeholder";
|
|
9
10
|
AiAgentMessageType2["ERROR"] = "error";
|
|
10
11
|
return AiAgentMessageType2;
|
|
11
12
|
})(AiAgentMessageType || {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.es.js","sources":["../../../src/components/AiMessageRender/constants.ts"],"sourcesContent":["export enum AiAgentMessageType {\n CONVERSION_START = 'conversation_start',\n CONVERSION_END = 'conversation_end',\n INSTRUCTION = 'instruction', // 指令 content 为纯文本\n /** 图表 的消息 */\n DASHBOARD = 'dashboard', // 消息为组件渲染相关内容\n /** 文本的消息 */\n TEXT = 'text', // 常规文字消息, content 为纯文本\n /** 用户的问题 */\n QUESTION = 'question', // 问题, content 为纯文本\n TITLE = 'title', // 标题, content 为纯文本\n ERROR = 'error',\n}\n"],"names":["AiAgentMessageType"],"mappings":"AAAY,IAAA,uCAAAA,wBAAL;AACLA,sBAAA,kBAAmB,IAAA;AACnBA,sBAAA,gBAAiB,IAAA;AACjBA,sBAAA,aAAc,IAAA;AAEdA,sBAAA,WAAY,IAAA;AAEZA,sBAAA,MAAO,IAAA;AAEPA,sBAAA,UAAW,IAAA;AACXA,sBAAA,OAAQ,IAAA;AACRA,sBAAA,OAAQ,IAAA;
|
|
1
|
+
{"version":3,"file":"constants.es.js","sources":["../../../src/components/AiMessageRender/constants.ts"],"sourcesContent":["export enum AiAgentMessageType {\n CONVERSION_START = 'conversation_start',\n CONVERSION_END = 'conversation_end',\n INSTRUCTION = 'instruction', // 指令 content 为纯文本\n /** 图表 的消息 */\n DASHBOARD = 'dashboard', // 消息为组件渲染相关内容\n /** 文本的消息 */\n TEXT = 'text', // 常规文字消息, content 为纯文本\n /** 用户的问题 */\n QUESTION = 'question', // 问题, content 为纯文本\n TITLE = 'title', // 标题, content 为纯文本\n DASHBOARD_PLACEHOLDER = 'dashboard_placeholder', // 图表组件渲染占位符\n ERROR = 'error',\n}\n"],"names":["AiAgentMessageType"],"mappings":"AAAY,IAAA,uCAAAA,wBAAL;AACLA,sBAAA,kBAAmB,IAAA;AACnBA,sBAAA,gBAAiB,IAAA;AACjBA,sBAAA,aAAc,IAAA;AAEdA,sBAAA,WAAY,IAAA;AAEZA,sBAAA,MAAO,IAAA;AAEPA,sBAAA,UAAW,IAAA;AACXA,sBAAA,OAAQ,IAAA;AACRA,sBAAA,uBAAwB,IAAA;AACxBA,sBAAA,OAAQ,IAAA;AAZEA,SAAAA;AAAA,GAAA,sBAAA,CAAA,CAAA;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const messageRenderCss = ".markdown-container {\n /* // 基础文本样式 */\n color: #fff;\n font-family: 'PingFang SC', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n line-height: 1.6;\n font-size: var(--base-font);\n font-style: normal;\n font-weight: 400;\n user-select: text;\n word-break: break-all;\n}\n\n/* // 重置一些元素的默认样式 */\n* {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\nimg {\n max-width: 50%;\n border-radius: calc(0.5 * var(--base-font));\n}\n\n/* // 标题样式 */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: calc(1.5 * var(--base-font));\n margin-bottom: calc(1.5 * var(--base-font));\n font-weight: 600;\n line-height: 1.25;\n
|
|
1
|
+
const messageRenderCss = ".markdown-container {\n /* // 基础文本样式 */\n color: #fff;\n font-family: 'PingFang SC', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n line-height: 1.6;\n font-size: var(--base-font);\n font-style: normal;\n font-weight: 400;\n user-select: text;\n word-break: break-all;\n}\n\n/* // 重置一些元素的默认样式 */\n* {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\nimg {\n max-width: 50%;\n border-radius: calc(0.5 * var(--base-font));\n}\n\n/* // 标题样式 */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: calc(1.5 * var(--base-font));\n margin-bottom: calc(1.5 * var(--base-font));\n font-weight: 600;\n line-height: 1.25;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\nh1 {\n font-size: calc(2 * var(--base-font));\n border-bottom: 1px solid #eaecef;\n padding-bottom: calc(0.3 * var(--base-font));\n}\n\nh2 {\n font-size: calc(1.5 * var(--base-font));\n border-bottom: 1px solid #eaecef;\n padding-bottom: calc(0.3 * var(--base-font));\n}\n\nh3 {\n font-size: calc(1.25 * var(--base-font));\n}\nh4 {\n font-size: var(--base-font);\n}\nh5 {\n font-size: calc(0.875 * var(--base-font));\n}\nh6 {\n font-size: calc(0.85 * var(--base-font));\n}\n\nstrong {\n font-weight: 600;\n}\n\nem {\n font-style: italic;\n}\n\n/* // 链接 */\na {\n color: #0366d6;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n}\n\n/* // 列表 */\nul,\nol {\n margin-bottom: var(--base-font);\n padding-left: calc(2 * var(--base-font));\n}\n\nli {\n margin-bottom: calc(0.25 * var(--base-font));\n\n > p {\n margin: 0;\n }\n}\n\n/* // 代码块和内联代码 */\npre {\n background-color: #fafafa;\n border-radius: calc(0.3 * var(--base-font));\n padding: var(--base-font);\n overflow: auto;\n margin-bottom: var(--base-font);\n line-height: 1.45;\n overflow-x: auto;\n\n code {\n color: #494949;\n background-color: transparent;\n padding: 0;\n border-radius: 0;\n border: none;\n }\n}\n\ncode {\n font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;\n background-color: #ececec;\n color: #404040;\n border-radius: calc(0.25 * var(--base-font));\n padding: calc(0.15 * var(--base-font)) calc(0.3 * var(--base-font));\n margin: 0 calc(0.15 * var(--base-font));\n font-size: calc(0.875 * var(--base-font));\n}\n\n/* // 表格样式 */\ntable {\n border-collapse: collapse;\n width: 100%;\n margin-bottom: var(--base-font);\n display: block;\n overflow-x: auto;\n color: #4a4e55;\n}\ntable th,\ntable td {\n padding: calc(0.75 * var(--base-font)) var(--base-font);\n border: 1px solid #dfe2e5;\n}\n\ntable th {\n background-color: #f6f8fa;\n font-weight: 600;\n text-align: left;\n}\n\ntable tr {\n background-color: #fff;\n border-top: 1px solid #c6cbd1;\n\n &:nth-child(2n) {\n background-color: #f6f8fa;\n }\n}\n\n/* // 引用块 */\nblockquote {\n border-left: calc(0.25 * var(--base-font)) solid #dfe2e5;\n color: #fff;\n padding: 0 var(--base-font);\n margin: 0 0 var(--base-font) 0;\n\n p {\n margin: 0;\n }\n}\n\n/* // 水平线 */\nhr {\n height: 1px;\n background-color: #e1e4e8;\n border: 0;\n margin: calc(1.5 * var(--base-font)) 0;\n}\n\n/* // 任务列表 */\n.task-list-item {\n list-style-type: none;\n\n input[type='checkbox'] {\n margin: 0 0calc (2 * var(--base-font)) calc(0.25 * var(--base-font)) -1.6em;\n vertical-align: middle;\n }\n}\n";
|
|
2
2
|
export {
|
|
3
3
|
messageRenderCss as default
|
|
4
4
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.less.es.js","sources":["../../../src/components/AiMessageRender/index.less?raw"],"sourcesContent":["export default \".markdown-container {\\n /* // 基础文本样式 */\\n color: #fff;\\n font-family: 'PingFang SC', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\\n line-height: 1.6;\\n font-size: var(--base-font);\\n font-style: normal;\\n font-weight: 400;\\n user-select: text;\\n word-break: break-all;\\n}\\n\\n/* // 重置一些元素的默认样式 */\\n* {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n}\\n\\nimg {\\n max-width: 50%;\\n border-radius: calc(0.5 * var(--base-font));\\n}\\n\\n/* // 标题样式 */\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n margin-top: calc(1.5 * var(--base-font));\\n margin-bottom: calc(1.5 * var(--base-font));\\n font-weight: 600;\\n line-height: 1.25;\\n
|
|
1
|
+
{"version":3,"file":"index.less.es.js","sources":["../../../src/components/AiMessageRender/index.less?raw"],"sourcesContent":["export default \".markdown-container {\\n /* // 基础文本样式 */\\n color: #fff;\\n font-family: 'PingFang SC', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\\n line-height: 1.6;\\n font-size: var(--base-font);\\n font-style: normal;\\n font-weight: 400;\\n user-select: text;\\n word-break: break-all;\\n}\\n\\n/* // 重置一些元素的默认样式 */\\n* {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n}\\n\\nimg {\\n max-width: 50%;\\n border-radius: calc(0.5 * var(--base-font));\\n}\\n\\n/* // 标题样式 */\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n margin-top: calc(1.5 * var(--base-font));\\n margin-bottom: calc(1.5 * var(--base-font));\\n font-weight: 600;\\n line-height: 1.25;\\n\\n &:first-child {\\n margin-top: 0;\\n }\\n}\\n\\nh1 {\\n font-size: calc(2 * var(--base-font));\\n border-bottom: 1px solid #eaecef;\\n padding-bottom: calc(0.3 * var(--base-font));\\n}\\n\\nh2 {\\n font-size: calc(1.5 * var(--base-font));\\n border-bottom: 1px solid #eaecef;\\n padding-bottom: calc(0.3 * var(--base-font));\\n}\\n\\nh3 {\\n font-size: calc(1.25 * var(--base-font));\\n}\\nh4 {\\n font-size: var(--base-font);\\n}\\nh5 {\\n font-size: calc(0.875 * var(--base-font));\\n}\\nh6 {\\n font-size: calc(0.85 * var(--base-font));\\n}\\n\\nstrong {\\n font-weight: 600;\\n}\\n\\nem {\\n font-style: italic;\\n}\\n\\n/* // 链接 */\\na {\\n color: #0366d6;\\n text-decoration: none;\\n\\n &:hover {\\n text-decoration: underline;\\n }\\n}\\n\\n/* // 列表 */\\nul,\\nol {\\n margin-bottom: var(--base-font);\\n padding-left: calc(2 * var(--base-font));\\n}\\n\\nli {\\n margin-bottom: calc(0.25 * var(--base-font));\\n\\n > p {\\n margin: 0;\\n }\\n}\\n\\n/* // 代码块和内联代码 */\\npre {\\n background-color: #fafafa;\\n border-radius: calc(0.3 * var(--base-font));\\n padding: var(--base-font);\\n overflow: auto;\\n margin-bottom: var(--base-font);\\n line-height: 1.45;\\n overflow-x: auto;\\n\\n code {\\n color: #494949;\\n background-color: transparent;\\n padding: 0;\\n border-radius: 0;\\n border: none;\\n }\\n}\\n\\ncode {\\n font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;\\n background-color: #ececec;\\n color: #404040;\\n border-radius: calc(0.25 * var(--base-font));\\n padding: calc(0.15 * var(--base-font)) calc(0.3 * var(--base-font));\\n margin: 0 calc(0.15 * var(--base-font));\\n font-size: calc(0.875 * var(--base-font));\\n}\\n\\n/* // 表格样式 */\\ntable {\\n border-collapse: collapse;\\n width: 100%;\\n margin-bottom: var(--base-font);\\n display: block;\\n overflow-x: auto;\\n color: #4a4e55;\\n}\\ntable th,\\ntable td {\\n padding: calc(0.75 * var(--base-font)) var(--base-font);\\n border: 1px solid #dfe2e5;\\n}\\n\\ntable th {\\n background-color: #f6f8fa;\\n font-weight: 600;\\n text-align: left;\\n}\\n\\ntable tr {\\n background-color: #fff;\\n border-top: 1px solid #c6cbd1;\\n\\n &:nth-child(2n) {\\n background-color: #f6f8fa;\\n }\\n}\\n\\n/* // 引用块 */\\nblockquote {\\n border-left: calc(0.25 * var(--base-font)) solid #dfe2e5;\\n color: #fff;\\n padding: 0 var(--base-font);\\n margin: 0 0 var(--base-font) 0;\\n\\n p {\\n margin: 0;\\n }\\n}\\n\\n/* // 水平线 */\\nhr {\\n height: 1px;\\n background-color: #e1e4e8;\\n border: 0;\\n margin: calc(1.5 * var(--base-font)) 0;\\n}\\n\\n/* // 任务列表 */\\n.task-list-item {\\n list-style-type: none;\\n\\n input[type='checkbox'] {\\n margin: 0 0calc (2 * var(--base-font)) calc(0.25 * var(--base-font)) -1.6em;\\n vertical-align: middle;\\n }\\n}\\n\""],"names":[],"mappings":"AAAA,MAAe,mBAAA;"}
|
|
@@ -18,6 +18,8 @@ export interface AiMessageContentItem {
|
|
|
18
18
|
plotContext?: EasyvPlot;
|
|
19
19
|
/** echarts 图表消息 */
|
|
20
20
|
echartsContext?: EchartsPlot;
|
|
21
|
+
/** 图表占位符的数量, 用于先展示一个图表的占位符,避免图表加载出来时跳动 */
|
|
22
|
+
chartPlaceHolderNumber?: number;
|
|
21
23
|
}
|
|
22
24
|
export interface AiChatMessageItem {
|
|
23
25
|
/** 消息 id, 同一次对话中 用户和ai的消息id一致 */
|
|
@@ -26,7 +28,7 @@ export interface AiChatMessageItem {
|
|
|
26
28
|
role: 'user' | 'ai';
|
|
27
29
|
contents: AiMessageContentItem[];
|
|
28
30
|
/** 时间, 需要是能被 dayjs 解析的格式 */
|
|
29
|
-
createTime
|
|
31
|
+
createTime?: string;
|
|
30
32
|
/** 用作消息排序 */
|
|
31
33
|
createTimeStamp?: number;
|
|
32
34
|
endTime?: string;
|
|
@@ -10,15 +10,16 @@ export declare function generateAiChatMessageFromSocketMessage(data: {
|
|
|
10
10
|
aiMsg: AiChatMessageItem | undefined;
|
|
11
11
|
userMsg: AiChatMessageItem | undefined;
|
|
12
12
|
};
|
|
13
|
+
export type AiChatResponseItem = Omit<AiMessageContentItem, 'text'> & {
|
|
14
|
+
content?: string;
|
|
15
|
+
};
|
|
13
16
|
interface AiChatDetailResItem {
|
|
14
17
|
id: string;
|
|
15
18
|
sessionId: string;
|
|
16
19
|
question: 'string';
|
|
17
|
-
response:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
createdAt: string;
|
|
21
|
-
updatedAt: string;
|
|
20
|
+
response: AiChatResponseItem[];
|
|
21
|
+
createdAt?: string;
|
|
22
|
+
updatedAt?: string;
|
|
22
23
|
}
|
|
23
24
|
export declare function generateAiChatMessageFromAiChatDetail(chatDetail: AiChatDetailResItem[]): AiChatMessageItem[];
|
|
24
25
|
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import dayjs from "../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.es.js";
|
|
2
2
|
import { AiAgentMessageType } from "./constants.es.js";
|
|
3
|
+
import isNil from "../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isNil.es.js";
|
|
3
4
|
function generateDefaultAiMsg(id) {
|
|
4
5
|
return {
|
|
5
6
|
id,
|
|
@@ -20,6 +21,7 @@ function generateAiChatMessageFromSocketMessage(data) {
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
socketMsgList.forEach((msg) => {
|
|
24
|
+
var _a;
|
|
23
25
|
switch (msg.type) {
|
|
24
26
|
case AiAgentMessageType.ERROR: {
|
|
25
27
|
onError == null ? void 0 : onError(msg);
|
|
@@ -60,16 +62,29 @@ function generateAiChatMessageFromSocketMessage(data) {
|
|
|
60
62
|
}
|
|
61
63
|
break;
|
|
62
64
|
}
|
|
65
|
+
case AiAgentMessageType.DASHBOARD_PLACEHOLDER: {
|
|
66
|
+
setDefaultAiMsg();
|
|
67
|
+
if (msg.content) {
|
|
68
|
+
aiMsg == null ? void 0 : aiMsg.contents.unshift({ chartPlaceHolderNumber: Number(msg.content) });
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
63
72
|
case AiAgentMessageType.DASHBOARD: {
|
|
64
73
|
setDefaultAiMsg();
|
|
65
|
-
|
|
66
|
-
|
|
74
|
+
const msgItem = {};
|
|
75
|
+
if (msg.plotContext) {
|
|
76
|
+
msgItem.plotContext = msg.plotContext;
|
|
77
|
+
}
|
|
78
|
+
if (msg.echartsContext) {
|
|
79
|
+
msgItem.echartsContext = msg.echartsContext;
|
|
67
80
|
}
|
|
68
|
-
if (msg.
|
|
69
|
-
|
|
81
|
+
if (msg.content) {
|
|
82
|
+
msgItem.text = msg.content;
|
|
70
83
|
}
|
|
71
|
-
if (aiMsg
|
|
72
|
-
aiMsg.contents.unshift(
|
|
84
|
+
if (isNil((_a = aiMsg == null ? void 0 : aiMsg.contents[0]) == null ? void 0 : _a.chartPlaceHolderNumber)) {
|
|
85
|
+
aiMsg == null ? void 0 : aiMsg.contents.unshift(msgItem);
|
|
86
|
+
} else {
|
|
87
|
+
aiMsg.contents[0] = msgItem;
|
|
73
88
|
}
|
|
74
89
|
break;
|
|
75
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.es.js","sources":["../../../src/components/AiMessageRender/utils.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AiAgentMessageType } from './constants';\nimport { AiAgentSocketMessagePayload, AiChatMessageItem, AiMessageContentItem } from './types';\n\nexport function generateDefaultAiMsg(id: string): AiChatMessageItem {\n return {\n id,\n contents: [],\n role: 'ai',\n createTime: dayjs().toString(),\n createTimeStamp: dayjs().unix(),\n };\n}\nexport function generateAiChatMessageFromSocketMessage(data: {\n socketMsgList: AiAgentSocketMessagePayload[];\n onReceiveConversationTitle?: (title: string) => void;\n onError?: (msg: AiAgentSocketMessagePayload) => void;\n currMsgId: string;\n}) {\n const { socketMsgList, currMsgId, onReceiveConversationTitle, onError } = data;\n let aiMsg: AiChatMessageItem | undefined;\n let userMsg: AiChatMessageItem | undefined;\n let oneQaMsg = '';\n function setDefaultAiMsg() {\n if (!aiMsg) {\n aiMsg = generateDefaultAiMsg(currMsgId);\n }\n }\n socketMsgList.forEach((msg) => {\n switch (msg.type) {\n case AiAgentMessageType.ERROR: {\n onError?.(msg);\n setDefaultAiMsg();\n if (aiMsg) {\n aiMsg.contents.push({ text: msg.content ?? '' });\n }\n break;\n }\n case AiAgentMessageType.TITLE: {\n if (msg.content) {\n onReceiveConversationTitle?.(msg.content);\n }\n break;\n }\n case AiAgentMessageType.QUESTION: {\n const userMsgInner: AiChatMessageItem = {\n id: currMsgId,\n contents: [{ text: msg.content ?? '' }],\n role: 'user',\n createTime: dayjs().toString(),\n createTimeStamp: dayjs().unix(),\n };\n userMsg = userMsgInner;\n setDefaultAiMsg();\n break;\n }\n case AiAgentMessageType.TEXT: {\n setDefaultAiMsg();\n oneQaMsg += (msg.content ?? '') as string;\n if (aiMsg) {\n const targetIndex = aiMsg.contents.findIndex((i) => i.text);\n if (targetIndex === -1) {\n aiMsg.contents.push({ text: oneQaMsg });\n } else {\n aiMsg.contents[targetIndex].text = oneQaMsg;\n }\n }\n break;\n }\n case AiAgentMessageType.
|
|
1
|
+
{"version":3,"file":"utils.es.js","sources":["../../../src/components/AiMessageRender/utils.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { isNil } from 'lodash-es';\nimport { AiAgentMessageType } from './constants';\nimport { AiAgentSocketMessagePayload, AiChatMessageItem, AiMessageContentItem } from './types';\n\nexport function generateDefaultAiMsg(id: string): AiChatMessageItem {\n return {\n id,\n contents: [],\n role: 'ai',\n createTime: dayjs().toString(),\n createTimeStamp: dayjs().unix(),\n };\n}\nexport function generateAiChatMessageFromSocketMessage(data: {\n socketMsgList: AiAgentSocketMessagePayload[];\n onReceiveConversationTitle?: (title: string) => void;\n onError?: (msg: AiAgentSocketMessagePayload) => void;\n currMsgId: string;\n}) {\n const { socketMsgList, currMsgId, onReceiveConversationTitle, onError } = data;\n let aiMsg: AiChatMessageItem | undefined;\n let userMsg: AiChatMessageItem | undefined;\n let oneQaMsg = '';\n function setDefaultAiMsg() {\n if (!aiMsg) {\n aiMsg = generateDefaultAiMsg(currMsgId);\n }\n }\n socketMsgList.forEach((msg) => {\n switch (msg.type) {\n case AiAgentMessageType.ERROR: {\n onError?.(msg);\n setDefaultAiMsg();\n if (aiMsg) {\n aiMsg.contents.push({ text: msg.content ?? '' });\n }\n break;\n }\n case AiAgentMessageType.TITLE: {\n if (msg.content) {\n onReceiveConversationTitle?.(msg.content);\n }\n break;\n }\n case AiAgentMessageType.QUESTION: {\n const userMsgInner: AiChatMessageItem = {\n id: currMsgId,\n contents: [{ text: msg.content ?? '' }],\n role: 'user',\n createTime: dayjs().toString(),\n createTimeStamp: dayjs().unix(),\n };\n userMsg = userMsgInner;\n setDefaultAiMsg();\n break;\n }\n case AiAgentMessageType.TEXT: {\n setDefaultAiMsg();\n oneQaMsg += (msg.content ?? '') as string;\n if (aiMsg) {\n const targetIndex = aiMsg.contents.findIndex((i) => i.text);\n if (targetIndex === -1) {\n aiMsg.contents.push({ text: oneQaMsg });\n } else {\n aiMsg.contents[targetIndex].text = oneQaMsg;\n }\n }\n break;\n }\n case AiAgentMessageType.DASHBOARD_PLACEHOLDER: {\n setDefaultAiMsg();\n if (msg.content) {\n aiMsg?.contents.unshift({ chartPlaceHolderNumber: Number(msg.content) });\n }\n break;\n }\n case AiAgentMessageType.DASHBOARD: {\n setDefaultAiMsg();\n const msgItem: AiMessageContentItem = {};\n if (msg.plotContext) {\n msgItem.plotContext = msg.plotContext;\n }\n if (msg.echartsContext) {\n msgItem.echartsContext = msg.echartsContext;\n }\n if (msg.content) {\n msgItem.text = msg.content;\n }\n // 没有占位符,直接添加,否则修改占位符那一项\n if (isNil(aiMsg?.contents[0]?.chartPlaceHolderNumber)) {\n aiMsg?.contents.unshift(msgItem);\n } else {\n aiMsg.contents[0] = msgItem;\n }\n break;\n }\n default: {\n break;\n }\n }\n });\n return { aiMsg, userMsg };\n}\n\nexport type AiChatResponseItem = Omit<AiMessageContentItem, 'text'> & { content?: string };\ninterface AiChatDetailResItem {\n id: string;\n sessionId: string;\n question: 'string';\n response: AiChatResponseItem[];\n createdAt?: string;\n updatedAt?: string;\n}\nexport function generateAiChatMessageFromAiChatDetail(\n chatDetail: AiChatDetailResItem[],\n): AiChatMessageItem[] {\n if (chatDetail.length === 0) {\n return [];\n }\n const resList: AiChatMessageItem[] = [];\n chatDetail.forEach((item) => {\n const { id, question, response } = item;\n if (question) {\n const userMsg: AiChatMessageItem = {\n id,\n contents: [{ text: question }],\n role: 'user',\n createTime: item.createdAt,\n };\n resList.push(userMsg);\n }\n if (response) {\n const aiMsg: AiChatMessageItem = {\n id,\n contents: response.map((i) => {\n if (i.content) {\n return { text: i.content };\n }\n return {\n plotContext: i.plotContext,\n echartsContext: i.echartsContext,\n };\n }),\n role: 'ai',\n createTime: item.createdAt,\n };\n resList.push(aiMsg);\n }\n });\n return resList;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getDefaultExportFromCjs } from "../../../../../_virtual/_commonjsHelpers.es.js";
|
|
2
|
-
import { __module as classnames$1 } from "../../../../../_virtual/index.
|
|
2
|
+
import { __module as classnames$1 } from "../../../../../_virtual/index.es4.js";
|
|
3
3
|
/*!
|
|
4
4
|
Copyright (c) 2018 Jed Watson.
|
|
5
5
|
Licensed under the MIT License (MIT), see
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getDefaultExportFromCjs } from "../../../../../_virtual/_commonjsHelpers.es.js";
|
|
2
|
-
import { __module as coWebWorker } from "../../../../../_virtual/index.
|
|
2
|
+
import { __module as coWebWorker } from "../../../../../_virtual/index.es2.js";
|
|
3
3
|
class CrossOriginWorker extends Worker {
|
|
4
4
|
constructor(scriptUrl) {
|
|
5
5
|
const b = new Blob([`importScripts('${new URL(scriptUrl).toString()}')`], { type: "application/javascript" });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isNil.es.js","sources":["../../../../../../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isNil.js"],"sourcesContent":["/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nexport default isNil;\n"],"names":[],"mappings":"AAoBA,SAAS,MAAM,OAAO;AACpB,SAAO,SAAS;AAClB;","x_google_ignoreList":[0]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getDefaultExportFromCjs } from "../../../../../_virtual/_commonjsHelpers.es.js";
|
|
2
|
-
import { __module as propTypes } from "../../../../../_virtual/index.
|
|
2
|
+
import { __module as propTypes } from "../../../../../_virtual/index.es3.js";
|
|
3
3
|
import { __require as requireReactIs } from "../../../react-is@16.13.1/node_modules/react-is/index.es.js";
|
|
4
4
|
import { __require as requireFactoryWithTypeCheckers } from "./factoryWithTypeCheckers.es.js";
|
|
5
5
|
import { __require as requireFactoryWithThrowingShims } from "./factoryWithThrowingShims.es.js";
|