@easyv/biz-components 2.1.3 → 2.1.4

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 (147) hide show
  1. package/dist/lib/components/ai-components/ai-message-render/ai-message-render.es.js +1 -0
  2. package/dist/lib/components/ai-components/ai-message-render/ai-message-render.es.js.map +1 -1
  3. package/dist/lib/components/ai-components/mobile-voice-input/icon-button.es.js +3 -2
  4. package/dist/lib/components/ai-components/mobile-voice-input/icon-button.es.js.map +1 -1
  5. package/dist/lib/components/ai-components/mobile-voice-input/mobile-voice-input.es.js +11 -8
  6. package/dist/lib/components/ai-components/mobile-voice-input/mobile-voice-input.es.js.map +1 -1
  7. package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid/test/easyv-react-grid.cy.d.ts +1 -0
  8. package/dist/lib/easyv-biz-components/src/components/voice-animation/test/voice-animation.cy.d.ts +1 -0
  9. package/dist/lib/easyv-biz-components/src/index.d.ts +4 -0
  10. package/dist/lib/easyv-biz-components/src/utils/show-modal/test/show-modal.cy.d.ts +1 -0
  11. package/dist/lib/hooks/use-tencent-sentence-recognition/use-tencent-sentence-recognition.es.js +3 -2
  12. package/dist/lib/hooks/use-tencent-sentence-recognition/use-tencent-sentence-recognition.es.js.map +1 -1
  13. package/dist/lib/index.d.ts +1 -4
  14. package/dist/lib/packages/easyv-arco/dist/lib/chunks/button-Dip6wfc7.es.es.js +29 -0
  15. package/dist/lib/packages/easyv-arco/dist/lib/chunks/button-Dip6wfc7.es.es.js.map +1 -0
  16. package/dist/lib/packages/easyv-arco/dist/lib/chunks/index-EAFzPBke.es.es.js +720 -0
  17. package/dist/lib/packages/easyv-arco/dist/lib/chunks/index-EAFzPBke.es.es.js.map +1 -0
  18. package/dist/lib/packages/easyv-arco/dist/lib/chunks/index-zvVd1BJp.es.es.js +3508 -0
  19. package/dist/lib/packages/easyv-arco/dist/lib/chunks/index-zvVd1BJp.es.es.js.map +1 -0
  20. package/dist/lib/packages/easyv-arco/dist/lib/chunks/input-Dhdn9e9Z.es.es.js +1276 -0
  21. package/dist/lib/packages/easyv-arco/dist/lib/chunks/input-Dhdn9e9Z.es.es.js.map +1 -0
  22. package/dist/lib/packages/easyv-arco/dist/lib/chunks/keycode-DOHuQiUY.es.es.js +77 -0
  23. package/dist/lib/packages/easyv-arco/dist/lib/chunks/keycode-DOHuQiUY.es.es.js.map +1 -0
  24. package/dist/lib/packages/easyv-arco/dist/lib/index.es.es.js +2 -0
  25. package/dist/lib/packages/easyv-arco/dist/lib/index.es.es.js.map +1 -0
  26. package/dist/lib/stats.html +1 -1
  27. package/dist/lib/utils/show-modal/show-modal.es.js +5 -5
  28. package/dist/lib/utils/show-modal/show-modal.es.js.map +1 -1
  29. package/dist/tailwindcss.pkg.css +0 -4
  30. package/package.json +3 -2
  31. package/dist/lib/components/ai-components/ai-message-render/test/ai-message-render.cy.d.ts +0 -1
  32. package/dist/lib/components/ai-components/ai-message-render/test/ai-message-table.cy.d.ts +0 -1
  33. package/dist/lib/utils/show-modal/test/show-modal.cy.d.ts +0 -1
  34. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-components/ai-message-render/ai-message-render.d.ts +0 -0
  35. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-components/ai-message-render/constants.d.ts +0 -0
  36. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-components/ai-message-render/image-preview.d.ts +0 -0
  37. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-components/ai-message-render/index.d.ts +0 -0
  38. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-components/ai-message-render/render-utils.d.ts +0 -0
  39. /package/dist/lib/{components/easyv-monaco-editor/test/easyv-monaco-editor.cy.d.ts → easyv-biz-components/src/components/ai-components/ai-message-render/test/ai-message-render.cy.d.ts} +0 -0
  40. /package/dist/lib/{components/easyv-reactgrid/test/easyv-react-grid.cy.d.ts → easyv-biz-components/src/components/ai-components/ai-message-render/test/ai-message-table.cy.d.ts} +0 -0
  41. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-components/ai-message-render/types.d.ts +0 -0
  42. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-components/ai-message-render/utils.d.ts +0 -0
  43. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-components/mobile-voice-input/icon-button.d.ts +0 -0
  44. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-components/mobile-voice-input/index.d.ts +0 -0
  45. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-components/mobile-voice-input/mobile-voice-input.d.ts +0 -0
  46. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-model-select/ai-model-select-panel.d.ts +0 -0
  47. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-model-select/iconBtn.d.ts +0 -0
  48. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-model-select/index.d.ts +0 -0
  49. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-model-select/test/ai-model-select-panel.cy.d.ts +0 -0
  50. /package/dist/lib/{components → easyv-biz-components/src/components}/ai-model-select/types.d.ts +0 -0
  51. /package/dist/lib/{components → easyv-biz-components/src/components}/circle-loading/circle-loading.d.ts +0 -0
  52. /package/dist/lib/{components → easyv-biz-components/src/components}/circle-loading/index.d.ts +0 -0
  53. /package/dist/lib/{components → easyv-biz-components/src/components}/circle-loading/test/circle-loading.cy.d.ts +0 -0
  54. /package/dist/lib/{components → easyv-biz-components/src/components}/code-mirror-editor/code-mirror-editor.d.ts +0 -0
  55. /package/dist/lib/{components → easyv-biz-components/src/components}/code-mirror-editor/constants.d.ts +0 -0
  56. /package/dist/lib/{components → easyv-biz-components/src/components}/code-mirror-editor/format-utils.d.ts +0 -0
  57. /package/dist/lib/{components → easyv-biz-components/src/components}/code-mirror-editor/index.d.ts +0 -0
  58. /package/dist/lib/{components → easyv-biz-components/src/components}/code-mirror-editor/test/CodeEditor.cy.d.ts +0 -0
  59. /package/dist/lib/{components → easyv-biz-components/src/components}/code-mirror-editor/theme.d.ts +0 -0
  60. /package/dist/lib/{components → easyv-biz-components/src/components}/code-mirror-editor/types.d.ts +0 -0
  61. /package/dist/lib/{components → easyv-biz-components/src/components}/code-mirror-editor/utils.d.ts +0 -0
  62. /package/dist/lib/{components → easyv-biz-components/src/components}/easyv-monaco-editor/easyv-monaco-editor.d.ts +0 -0
  63. /package/dist/lib/{components → easyv-biz-components/src/components}/easyv-monaco-editor/index.d.ts +0 -0
  64. /package/dist/lib/{components/voice-animation/test/voice-animation.cy.d.ts → easyv-biz-components/src/components/easyv-monaco-editor/test/easyv-monaco-editor.cy.d.ts} +0 -0
  65. /package/dist/lib/{components → easyv-biz-components/src/components}/easyv-monaco-editor/types.d.ts +0 -0
  66. /package/dist/lib/{components → easyv-biz-components/src/components}/easyv-reactgrid/constants.d.ts +0 -0
  67. /package/dist/lib/{components → easyv-biz-components/src/components}/easyv-reactgrid/easyv-react-grid.d.ts +0 -0
  68. /package/dist/lib/{components → easyv-biz-components/src/components}/easyv-reactgrid/index.d.ts +0 -0
  69. /package/dist/lib/{components → easyv-biz-components/src/components}/easyv-reactgrid/utils.d.ts +0 -0
  70. /package/dist/lib/{components → easyv-biz-components/src/components}/echarts-render/constants.d.ts +0 -0
  71. /package/dist/lib/{components → easyv-biz-components/src/components}/echarts-render/echarts-render.d.ts +0 -0
  72. /package/dist/lib/{components → easyv-biz-components/src/components}/echarts-render/index.d.ts +0 -0
  73. /package/dist/lib/{components → easyv-biz-components/src/components}/echarts-render/test/echarts.cy.d.ts +0 -0
  74. /package/dist/lib/{components → easyv-biz-components/src/components}/echarts-render/types.d.ts +0 -0
  75. /package/dist/lib/{components → easyv-biz-components/src/components}/error-boundary/error-boundary.d.ts +0 -0
  76. /package/dist/lib/{components → easyv-biz-components/src/components}/error-boundary/index.d.ts +0 -0
  77. /package/dist/lib/{components → easyv-biz-components/src/components}/index.d.ts +0 -0
  78. /package/dist/lib/{components → easyv-biz-components/src/components}/scroll-controller/index.d.ts +0 -0
  79. /package/dist/lib/{components → easyv-biz-components/src/components}/scroll-controller/scroll-controller.d.ts +0 -0
  80. /package/dist/lib/{components → easyv-biz-components/src/components}/shadow-dom/index.d.ts +0 -0
  81. /package/dist/lib/{components → easyv-biz-components/src/components}/shadow-dom/shadow-dom.d.ts +0 -0
  82. /package/dist/lib/{components → easyv-biz-components/src/components}/voice-animation/index.d.ts +0 -0
  83. /package/dist/lib/{components → easyv-biz-components/src/components}/voice-animation/voice-animation.d.ts +0 -0
  84. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/index.d.ts +0 -0
  85. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-ai-agent-message/constants.d.ts +0 -0
  86. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-ai-agent-message/index.d.ts +0 -0
  87. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-ai-agent-message/types.d.ts +0 -0
  88. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-ai-agent-message/use-ai-agent-message.d.ts +0 -0
  89. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-ai-agent-message/utils.d.ts +0 -0
  90. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-div-auto-scroll.d.ts +0 -0
  91. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-document-unmount/index.d.ts +0 -0
  92. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-document-unmount/use-document-unmount.d.ts +0 -0
  93. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-initialized.d.ts +0 -0
  94. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-socket-events/constant.d.ts +0 -0
  95. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-socket-events/index.d.ts +0 -0
  96. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-socket-events/types.d.ts +0 -0
  97. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-socket-events/use-socket-events.d.ts +0 -0
  98. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-tencent-sentence-recognition/index.d.ts +0 -0
  99. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-tencent-sentence-recognition/use-tencent-sentence-recognition.d.ts +0 -0
  100. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-watch-value/playground.cy.d.ts +0 -0
  101. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-watch-value/use-watch-value.cy.d.ts +0 -0
  102. /package/dist/lib/{hooks → easyv-biz-components/src/hooks}/use-watch-value/use-watch-value.d.ts +0 -0
  103. /package/dist/lib/{types → easyv-biz-components/src/types}/ai-agent.d.ts +0 -0
  104. /package/dist/lib/{types → easyv-biz-components/src/types}/common.d.ts +0 -0
  105. /package/dist/lib/{types → easyv-biz-components/src/types}/index.d.ts +0 -0
  106. /package/dist/lib/{utils → easyv-biz-components/src/utils}/ai-agent-message-manager/ai-agent-message-manager.d.ts +0 -0
  107. /package/dist/lib/{utils → easyv-biz-components/src/utils}/ai-agent-message-manager/constants.d.ts +0 -0
  108. /package/dist/lib/{utils → easyv-biz-components/src/utils}/ai-agent-message-manager/index.d.ts +0 -0
  109. /package/dist/lib/{utils → easyv-biz-components/src/utils}/ai-agent-message-manager/types.d.ts +0 -0
  110. /package/dist/lib/{utils → easyv-biz-components/src/utils}/ai-agent-message-manager/utils.d.ts +0 -0
  111. /package/dist/lib/{utils → easyv-biz-components/src/utils}/common/common.d.ts +0 -0
  112. /package/dist/lib/{utils → easyv-biz-components/src/utils}/common/index.d.ts +0 -0
  113. /package/dist/lib/{utils → easyv-biz-components/src/utils}/common/url.d.ts +0 -0
  114. /package/dist/lib/{utils → easyv-biz-components/src/utils}/common/voice-helper-utils.d.ts +0 -0
  115. /package/dist/lib/{utils → easyv-biz-components/src/utils}/easyv-gui-helper/common.d.ts +0 -0
  116. /package/dist/lib/{utils → easyv-biz-components/src/utils}/easyv-gui-helper/component-dimension.d.ts +0 -0
  117. /package/dist/lib/{utils → easyv-biz-components/src/utils}/easyv-gui-helper/constants.d.ts +0 -0
  118. /package/dist/lib/{utils → easyv-biz-components/src/utils}/easyv-gui-helper/easyv-gui-helper.d.ts +0 -0
  119. /package/dist/lib/{utils → easyv-biz-components/src/utils}/easyv-gui-helper/index.d.ts +0 -0
  120. /package/dist/lib/{utils → easyv-biz-components/src/utils}/easyv-gui-helper/test/get-config-value.cy.d.ts +0 -0
  121. /package/dist/lib/{utils → easyv-biz-components/src/utils}/easyv-gui-helper/test/get-new-config-from-value.cy.d.ts +0 -0
  122. /package/dist/lib/{utils → easyv-biz-components/src/utils}/easyv-gui-helper/test/test-data.d.ts +0 -0
  123. /package/dist/lib/{utils → easyv-biz-components/src/utils}/easyv-gui-helper/test/update-gui-config-list.cy.d.ts +0 -0
  124. /package/dist/lib/{utils → easyv-biz-components/src/utils}/easyv-gui-helper/types.d.ts +0 -0
  125. /package/dist/lib/{utils → easyv-biz-components/src/utils}/fetch-knowledge/fetch-knowledge.d.ts +0 -0
  126. /package/dist/lib/{utils → easyv-biz-components/src/utils}/fetch-knowledge/index.d.ts +0 -0
  127. /package/dist/lib/{utils → easyv-biz-components/src/utils}/fun-ASR/fun-ASR-manager.d.ts +0 -0
  128. /package/dist/lib/{utils → easyv-biz-components/src/utils}/fun-ASR/index.d.ts +0 -0
  129. /package/dist/lib/{utils → easyv-biz-components/src/utils}/index.d.ts +0 -0
  130. /package/dist/lib/{utils → easyv-biz-components/src/utils}/show-modal/index.d.ts +0 -0
  131. /package/dist/lib/{utils → easyv-biz-components/src/utils}/show-modal/show-modal.d.ts +0 -0
  132. /package/dist/lib/{utils → easyv-biz-components/src/utils}/voice-record-manager/index.d.ts +0 -0
  133. /package/dist/lib/{utils → easyv-biz-components/src/utils}/voice-record-manager/voice-record-manager.d.ts +0 -0
  134. /package/dist/lib/{utils → easyv-biz-components/src/utils}/vosk-browser-manager/audio-manager/audio-manager.d.ts +0 -0
  135. /package/dist/lib/{utils → easyv-biz-components/src/utils}/vosk-browser-manager/audio-manager/test/audio-manager.cy.d.ts +0 -0
  136. /package/dist/lib/{utils → easyv-biz-components/src/utils}/vosk-browser-manager/audio-manager/types.d.ts +0 -0
  137. /package/dist/lib/{utils → easyv-biz-components/src/utils}/vosk-browser-manager/index.d.ts +0 -0
  138. /package/dist/lib/{utils → easyv-biz-components/src/utils}/vosk-browser-manager/test/voskBrowserManager.cy.d.ts +0 -0
  139. /package/dist/lib/{utils → easyv-biz-components/src/utils}/vosk-browser-manager/vosk-browser-manager.d.ts +0 -0
  140. /package/dist/lib/{utils → easyv-biz-components/src/utils}/wait-something/index.d.ts +0 -0
  141. /package/dist/lib/{utils → easyv-biz-components/src/utils}/xun-fei-voice/XF-stream-voice-manager.d.ts +0 -0
  142. /package/dist/lib/{utils → easyv-biz-components/src/utils}/xun-fei-voice/index.d.ts +0 -0
  143. /package/dist/lib/{utils → easyv-biz-components/src/utils}/xun-fei-voice/recorder-manager/RecorderManager-draft.d.ts +0 -0
  144. /package/dist/lib/{utils → easyv-biz-components/src/utils}/xun-fei-voice/recorder-manager/index.d.ts +0 -0
  145. /package/dist/lib/{utils → easyv-biz-components/src/utils}/xun-fei-voice/test/RecorderManager.cy.d.ts +0 -0
  146. /package/dist/lib/{utils → easyv-biz-components/src/utils}/xun-fei-voice/test/XunFeiVoiceManager.cy.d.ts +0 -0
  147. /package/dist/lib/{utils → easyv-biz-components/src/utils}/xun-fei-voice/types.d.ts +0 -0
@@ -128,6 +128,7 @@ ${markdownStyle}`;
128
128
  } else if (msg.echartsContext || msg.chartPlaceHolderNumber || msg.plotContext) {
129
129
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "biz-contents", children: renderDashboardContent(msg) }, index);
130
130
  }
131
+ return null;
131
132
  })
132
133
  ] }),
133
134
  showFooterButtons && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "biz-flex biz-gap-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("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", children: React__default.createElement(CopyCircleOutlined, {
@@ -1 +1 @@
1
- {"version":3,"file":"ai-message-render.es.js","sources":["../../../../../src/components/ai-components/ai-message-render/ai-message-render.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { CopyCircleOutlined } from \"@easyv/react-icons\";\nimport classNames from \"classnames\";\nimport Markdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport AgentStepHintIcon from \"@/asserts/icons/agent-step-hint-icon.svg?react\";\nimport { ShadowDom } from \"../../shadow-dom\";\nimport messageRenderCss from \"./index.less?raw\";\nimport styles from \"./index.module.less\";\nimport { AiMessageContentItem } from \"./types\";\n\nexport interface AiMessageRenderProps {\n className?: string;\n contents: AiMessageContentItem[];\n renderDashboardContent?: (msg: AiMessageContentItem) => React.ReactNode;\n renderStepHintContent?: (hintContent: string) => 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 stepHintClassName?: string;\n /** 阶段提示图标的动画 */\n stepHintAnimation?: boolean;\n /** markdown 里图片的 className */\n imgClassName?: string;\n /** 是否启用图片预览 @default true */\n useImgPreview?: boolean;\n showPreviewImg?: (imgInfo: PreviewImgInfo) => void;\n /** 主题模式 @default dark */\n themeMode?: \"light\" | \"dark\";\n}\ninterface PreviewImgInfo {\n src: string;\n alt?: string;\n}\n\nexport const AiMessageRender = (props: AiMessageRenderProps) => {\n const {\n className = \"\",\n onCopy,\n renderDashboardContent: propsRenderDashboardContent,\n renderStepHintContent: propsRenderStepHintContent,\n showFooterButtons = false,\n contents,\n markdownClassName = \"\",\n rootFontSize,\n hideDefaultStyle,\n markdownStyle,\n stepHintClassName,\n stepHintAnimation,\n imgClassName,\n showPreviewImg,\n themeMode = \"dark\",\n } = props;\n\n let finalMarkdownStyle = hideDefaultStyle ? \"\" : messageRenderCss;\n if (markdownStyle) {\n finalMarkdownStyle += `\\n${markdownStyle}`;\n }\n\n // 自定义图片渲染器\n const ImageRenderer = ({ src, alt }: { src?: string; alt?: string }) => {\n if (!src) return null;\n\n return (\n <img\n src={src}\n alt={alt}\n style={{ cursor: \"pointer\", maxWidth: \"100%\", height: \"auto\" }}\n className={imgClassName}\n // 添加原生事件处理作为备用方案\n ref={(imgRef) => {\n if (imgRef) {\n const handleNativeClick = (e: Event) => {\n e.stopPropagation();\n showPreviewImg?.({ src, alt });\n };\n\n // 移除之前的监听器(如果存在)\n imgRef.removeEventListener(\"click\", handleNativeClick);\n // 添加原生事件监听器\n imgRef.addEventListener(\"click\", handleNativeClick, { capture: true });\n }\n }}\n />\n );\n };\n\n const renderStringContent = (contentString: string) => {\n return (\n <ShadowDom\n style={finalMarkdownStyle}\n shadowRootDivClassName={markdownClassName + \" markdown-container\"}\n rootFontSize={rootFontSize}\n themeMode={themeMode}\n >\n <Markdown\n remarkPlugins={[remarkGfm]}\n components={{\n img: ImageRenderer,\n table: ({ children }) => (\n <div className=\"biz-overflow-auto biz-w-full table-wrapper\">\n <table>{children}</table>\n </div>\n ),\n }}\n >\n {contentString}\n </Markdown>\n </ShadowDom>\n );\n };\n const renderDashboardContent = (msg: AiMessageContentItem) => {\n return propsRenderDashboardContent?.(msg);\n };\n\n const { stepHintContent, otherContents } = useMemo(() => {\n const stepHintContent = contents.find((item) => item.aiAgentStepMessage)?.aiAgentStepMessage;\n const otherContents = contents.filter((item) => item.aiAgentStepMessage === undefined);\n return { stepHintContent, otherContents };\n }, [contents]);\n\n const renderStepHintContent = (hintContent: string) => {\n return (\n propsRenderStepHintContent?.(hintContent) || (\n <div\n className={classNames(\n \"step-hint-wrapper biz-gap-1\",\n \"biz-h-6 biz-text-text-3 biz-text-[0.875rem] biz-flex biz-items-baseline\",\n stepHintClassName,\n )}\n >\n <AgentStepHintIcon\n className={classNames(\n \"biz-w-4 biz-h-4 biz-text-text-3\",\n stepHintAnimation && styles[\"step-hint-animated\"],\n )}\n />\n {hintContent}\n </div>\n )\n );\n };\n\n return (\n <>\n <div\n className={classNames(\n \"total-wrapper\",\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 <div className=\"chat-text-wrapper biz-flex biz-flex-col biz-gap-2\">\n {stepHintContent && renderStepHintContent(stepHintContent)}\n {otherContents.map((msg, index) => {\n if (msg.text) {\n return (\n <div key={index} className=\"biz-contents\">\n {renderStringContent(msg.text)}\n </div>\n );\n } else if (msg.markdownChatString) {\n return (\n <div key={index} className=\"biz-contents\">\n {renderStringContent(msg.markdownChatString)}\n </div>\n );\n } else if (msg.echartsContext || msg.chartPlaceHolderNumber || msg.plotContext) {\n return (\n <div key={index} className=\"biz-contents\">\n {renderDashboardContent(msg)}\n </div>\n );\n }\n })}\n </div>\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 {React.createElement(CopyCircleOutlined as any, {\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};\n"],"names":["jsx","stepHintContent","otherContents","jsxs","AgentStepHintIcon","Fragment","React"],"mappings":"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"}
1
+ {"version":3,"file":"ai-message-render.es.js","sources":["../../../../../src/components/ai-components/ai-message-render/ai-message-render.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { CopyCircleOutlined } from \"@easyv/react-icons\";\nimport classNames from \"classnames\";\nimport Markdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport AgentStepHintIcon from \"@/asserts/icons/agent-step-hint-icon.svg?react\";\nimport { ShadowDom } from \"../../shadow-dom\";\nimport messageRenderCss from \"./index.less?raw\";\nimport styles from \"./index.module.less\";\nimport { AiMessageContentItem } from \"./types\";\n\nexport interface AiMessageRenderProps {\n className?: string;\n contents: AiMessageContentItem[];\n renderDashboardContent?: (msg: AiMessageContentItem) => React.ReactNode;\n renderStepHintContent?: (hintContent: string) => 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 stepHintClassName?: string;\n /** 阶段提示图标的动画 */\n stepHintAnimation?: boolean;\n /** markdown 里图片的 className */\n imgClassName?: string;\n /** 是否启用图片预览 @default true */\n useImgPreview?: boolean;\n showPreviewImg?: (imgInfo: PreviewImgInfo) => void;\n /** 主题模式 @default dark */\n themeMode?: \"light\" | \"dark\";\n}\ninterface PreviewImgInfo {\n src: string;\n alt?: string;\n}\n\nexport const AiMessageRender = (props: AiMessageRenderProps) => {\n const {\n className = \"\",\n onCopy,\n renderDashboardContent: propsRenderDashboardContent,\n renderStepHintContent: propsRenderStepHintContent,\n showFooterButtons = false,\n contents,\n markdownClassName = \"\",\n rootFontSize,\n hideDefaultStyle,\n markdownStyle,\n stepHintClassName,\n stepHintAnimation,\n imgClassName,\n showPreviewImg,\n themeMode = \"dark\",\n } = props;\n\n let finalMarkdownStyle = hideDefaultStyle ? \"\" : messageRenderCss;\n if (markdownStyle) {\n finalMarkdownStyle += `\\n${markdownStyle}`;\n }\n\n // 自定义图片渲染器\n const ImageRenderer = ({ src, alt }: { src?: string; alt?: string }) => {\n if (!src) return null;\n\n return (\n <img\n src={src}\n alt={alt}\n style={{ cursor: \"pointer\", maxWidth: \"100%\", height: \"auto\" }}\n className={imgClassName}\n // 添加原生事件处理作为备用方案\n ref={(imgRef) => {\n if (imgRef) {\n const handleNativeClick = (e: Event) => {\n e.stopPropagation();\n showPreviewImg?.({ src, alt });\n };\n\n // 移除之前的监听器(如果存在)\n imgRef.removeEventListener(\"click\", handleNativeClick);\n // 添加原生事件监听器\n imgRef.addEventListener(\"click\", handleNativeClick, { capture: true });\n }\n }}\n />\n );\n };\n\n const renderStringContent = (contentString: string) => {\n return (\n <ShadowDom\n style={finalMarkdownStyle}\n shadowRootDivClassName={markdownClassName + \" markdown-container\"}\n rootFontSize={rootFontSize}\n themeMode={themeMode}\n >\n <Markdown\n remarkPlugins={[remarkGfm]}\n components={{\n img: ImageRenderer,\n table: ({ children }) => (\n <div className=\"biz-overflow-auto biz-w-full table-wrapper\">\n <table>{children}</table>\n </div>\n ),\n }}\n >\n {contentString}\n </Markdown>\n </ShadowDom>\n );\n };\n const renderDashboardContent = (msg: AiMessageContentItem) => {\n return propsRenderDashboardContent?.(msg);\n };\n\n const { stepHintContent, otherContents } = useMemo(() => {\n const stepHintContent = contents.find((item) => item.aiAgentStepMessage)?.aiAgentStepMessage;\n const otherContents = contents.filter((item) => item.aiAgentStepMessage === undefined);\n return { stepHintContent, otherContents };\n }, [contents]);\n\n const renderStepHintContent = (hintContent: string) => {\n return (\n propsRenderStepHintContent?.(hintContent) || (\n <div\n className={classNames(\n \"step-hint-wrapper biz-gap-1\",\n \"biz-h-6 biz-text-text-3 biz-text-[0.875rem] biz-flex biz-items-baseline\",\n stepHintClassName,\n )}\n >\n <AgentStepHintIcon\n className={classNames(\n \"biz-w-4 biz-h-4 biz-text-text-3\",\n stepHintAnimation && styles[\"step-hint-animated\"],\n )}\n />\n {hintContent}\n </div>\n )\n );\n };\n\n return (\n <>\n <div\n className={classNames(\n \"total-wrapper\",\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 <div className=\"chat-text-wrapper biz-flex biz-flex-col biz-gap-2\">\n {stepHintContent && renderStepHintContent(stepHintContent)}\n {otherContents.map((msg, index) => {\n if (msg.text) {\n return (\n <div key={index} className=\"biz-contents\">\n {renderStringContent(msg.text)}\n </div>\n );\n } else if (msg.markdownChatString) {\n return (\n <div key={index} className=\"biz-contents\">\n {renderStringContent(msg.markdownChatString)}\n </div>\n );\n } else if (msg.echartsContext || msg.chartPlaceHolderNumber || msg.plotContext) {\n return (\n <div key={index} className=\"biz-contents\">\n {renderDashboardContent(msg)}\n </div>\n );\n }\n return null;\n })}\n </div>\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 {React.createElement(CopyCircleOutlined as any, {\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};\n"],"names":["jsx","stepHintContent","otherContents","jsxs","AgentStepHintIcon","Fragment","React"],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { j as jsxRuntimeExports } from "../../../node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.es.js";
2
- import { Button } from "@easyv/react-components";
2
+ import "../../../packages/easyv-arco/dist/lib/index.es.es.js";
3
3
  import classNames from "../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.es.js";
4
+ import { A } from "../../../packages/easyv-arco/dist/lib/chunks/button-Dip6wfc7.es.es.js";
4
5
  const IconButton = (props) => {
5
6
  const { className = "", icon, onClick } = props;
6
7
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
7
- Button,
8
+ A,
8
9
  {
9
10
  className: classNames(
10
11
  "!biz-bg-bg-white biz-h-[4.25rem] biz-w-[4.25rem]",
@@ -1 +1 @@
1
- {"version":3,"file":"icon-button.es.js","sources":["../../../../../src/components/ai-components/mobile-voice-input/icon-button.tsx"],"sourcesContent":["import { Button } from \"@easyv/react-components\";\nimport classNames from \"classnames\";\n\nexport interface IconButtonProps {\n className?: string;\n icon?: React.ReactNode;\n onClick?: (e: Event) => void;\n}\n\n/** 输入框右侧的 图标控制按钮 */\nexport const IconButton = (props: IconButtonProps) => {\n const { className = \"\", icon, onClick } = props;\n\n return (\n <Button\n className={classNames(\n \"!biz-bg-bg-white biz-h-[4.25rem] biz-w-[4.25rem]\",\n \"biz-flex biz-flex-center biz-rounded-2xl biz-border-none\",\n className,\n )}\n icon={icon}\n onClick={onClick}\n />\n );\n};\n"],"names":["jsx"],"mappings":";;;AAUa,MAAA,aAAa,CAAC,UAA2B;AACpD,QAAM,EAAE,YAAY,IAAI,MAAM,QAAY,IAAA;AAGxC,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"icon-button.es.js","sources":["../../../../../src/components/ai-components/mobile-voice-input/icon-button.tsx"],"sourcesContent":["import { ArcoButton } from \"@easyv/arco\";\nimport classNames from \"classnames\";\n\nexport interface IconButtonProps {\n className?: string;\n icon?: React.ReactNode;\n onClick?: (e: Event) => void;\n}\n\n/** 输入框右侧的 图标控制按钮 */\nexport const IconButton = (props: IconButtonProps) => {\n const { className = \"\", icon, onClick } = props;\n\n return (\n <ArcoButton\n className={classNames(\n \"!biz-bg-bg-white biz-h-[4.25rem] biz-w-[4.25rem]\",\n \"biz-flex biz-flex-center biz-rounded-2xl biz-border-none\",\n className,\n )}\n icon={icon}\n onClick={onClick}\n />\n );\n};\n"],"names":["jsx","ArcoButton"],"mappings":";;;;AAUa,MAAA,aAAa,CAAC,UAA2B;AACpD,QAAM,EAAE,YAAY,IAAI,MAAM,QAAY,IAAA;AAGxC,SAAAA,kCAAA;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEJ;"}
@@ -1,11 +1,14 @@
1
1
  import { j as jsxRuntimeExports } from "../../../node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.es.js";
2
2
  import { forwardRef, useState, useRef, useImperativeHandle } from "react";
3
- import { message, Input, Button } from "@easyv/react-components";
3
+ import "../../../packages/easyv-arco/dist/lib/index.es.es.js";
4
4
  import { MouseOutlined, TerminationSquareOutlined, AudioOutlined, KeyboardOutlined, CloseCircleOutlined } from "../../../node_modules/.pnpm/@easyv_react-icons@6.13.1/node_modules/@easyv/react-icons/dist/index.esm.es.js";
5
5
  import useMemoizedFn from "../../../node_modules/.pnpm/ahooks@3.8.5_react@18.2.0/node_modules/ahooks/es/useMemoizedFn/index.es.js";
6
6
  import classNames from "../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.es.js";
7
7
  import { IconButton } from "./icon-button.es.js";
8
8
  import { useTencentSentenceRecognition } from "../../../hooks/use-tencent-sentence-recognition/use-tencent-sentence-recognition.es.js";
9
+ import { M as Ie } from "../../../packages/easyv-arco/dist/lib/chunks/index-zvVd1BJp.es.es.js";
10
+ import { A as Jn } from "../../../packages/easyv-arco/dist/lib/chunks/input-Dhdn9e9Z.es.es.js";
11
+ import { A } from "../../../packages/easyv-arco/dist/lib/chunks/button-Dip6wfc7.es.es.js";
9
12
  import { VoiceAnimation } from "../../voice-animation/voice-animation.es.js";
10
13
  import { getIsPrivateDeployEnv } from "../../../utils/common/common.es.js";
11
14
  const MobileVoiceInputCpn = (props, ref) => {
@@ -58,12 +61,12 @@ const MobileVoiceInputCpn = (props, ref) => {
58
61
  if (recordTime < 500) {
59
62
  setVoiceRecognizeRes("");
60
63
  needRequestAsr = false;
61
- message.error("录音时间过短");
64
+ Ie.error("录音时间过短");
62
65
  }
63
66
  if (recordTime > 59 * 1e3) {
64
67
  setVoiceRecognizeRes("");
65
68
  needRequestAsr = false;
66
- message.error("录音时间最多支持一分钟");
69
+ Ie.error("录音时间最多支持一分钟");
67
70
  }
68
71
  stopVoiceRecord(needRequestAsr);
69
72
  }
@@ -133,7 +136,7 @@ const MobileVoiceInputCpn = (props, ref) => {
133
136
  ),
134
137
  children: [
135
138
  /* @__PURE__ */ jsxRuntimeExports.jsx(
136
- Input,
139
+ Jn,
137
140
  {
138
141
  ref: inputRef,
139
142
  value,
@@ -208,9 +211,9 @@ const MobileVoiceInputCpn = (props, ref) => {
208
211
  ),
209
212
  children: [
210
213
  /* @__PURE__ */ jsxRuntimeExports.jsx(
211
- Button,
214
+ A,
212
215
  {
213
- className: "biz-rounded-2xl biz-gap-4 biz-h-[5rem] biz-px-8 biz-flex biz-flex-center biz-text-[2rem] !biz-bg-bg-1 !biz-text-white rp-[span]:!biz-ml-0",
216
+ className: "biz-rounded-2xl biz-gap-4 biz-h-[5rem] biz-px-8 biz-flex biz-flex-center biz-text-[2rem] !biz-bg-bg-1 !biz-text-white",
214
217
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(
215
218
  CloseCircleOutlined,
216
219
  {
@@ -225,9 +228,9 @@ const MobileVoiceInputCpn = (props, ref) => {
225
228
  }
226
229
  ),
227
230
  /* @__PURE__ */ jsxRuntimeExports.jsx(
228
- Button,
231
+ A,
229
232
  {
230
- className: "biz-rounded-2xl biz-gap-4 biz-h-[5rem] biz-px-8 biz-flex biz-flex-center biz-text-[2rem] rp-[span]:!biz-ml-0",
233
+ className: "biz-rounded-2xl biz-gap-4 biz-h-[5rem] biz-px-8 biz-flex biz-flex-center biz-text-[2rem]",
231
234
  type: "primary",
232
235
  disabled: !voiceRecognizeRes,
233
236
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"mobile-voice-input.es.js","sources":["../../../../../src/components/ai-components/mobile-voice-input/mobile-voice-input.tsx"],"sourcesContent":["import React, { forwardRef, Ref, useImperativeHandle, useRef, useState } from \"react\";\nimport { Button, Input, message, RefInputType } from \"@easyv/react-components\";\nimport {\n AudioOutlined,\n CloseCircleOutlined,\n KeyboardOutlined,\n MouseOutlined,\n TerminationSquareOutlined,\n} from \"@easyv/react-icons\";\nimport { useMemoizedFn } from \"ahooks\";\nimport classNames from \"classnames\";\nimport { VoiceAnimation } from \"@/components/voice-animation\";\nimport { useTencentSentenceRecognition } from \"@/hooks\";\nimport { getIsPrivateDeployEnv } from \"@/utils\";\nimport { IconButton } from \"./icon-button\";\n\nexport interface MobileVoiceInputProps {\n className?: string;\n isAiAnswering?: boolean;\n onClickStartRecord?: () => void;\n onClickStopRecord?: () => void;\n onSend?: (value?: string) => void;\n onStop?: () => void;\n value?: string;\n onChange?: (value?: string) => void;\n getSentenceRecognizeRes: (data: Blob) => Promise<string>;\n /** 这个是本地语音识别管理器,用于在移动端识别语音。\n * - workspace 和 screen 里的 class 不一样, 而且没有迁移到 biz-components 中 所以先写个 any。\n * - workspace 里的 class 是 LocalMobileVoiceRecognitionManager ,screen 里的 class 是 LocalVoiceRecognitionManager\n */\n // localManager?: any;\n renderSomethingOnVoiceInput?: () => React.ReactNode;\n}\n\nexport interface MobileVoiceInputRef {\n setVoiceRecognizeRes: (value: string) => void;\n}\n\nconst MobileVoiceInputCpn = (props: MobileVoiceInputProps, ref: Ref<MobileVoiceInputRef>) => {\n const {\n className = \"\",\n isAiAnswering,\n onClickStartRecord,\n onClickStopRecord,\n onSend,\n onStop,\n value,\n onChange,\n getSentenceRecognizeRes,\n renderSomethingOnVoiceInput,\n } = props;\n const [voiceRecognizeRes, setVoiceRecognizeRes] = useState(\"\");\n const [isVoiceInput, setIsVoiceInput] = useState(false); // 是否使用语音输入\n const [focused, setFocused] = useState(false); // 是否聚焦\n const [recordStatus, setRecordStatus] = useState<\"init\" | \"recording\" | \"afterRecord\">(\"init\");\n const isRecording = recordStatus === \"recording\";\n\n const startRecordTimeRef = useRef<number>(0); // 时间小于 500 ms 和 大于 59 秒都不发给后端\n const inputRef = useRef<RefInputType>(null);\n\n /** 是否展示语音识别结果的预览 */\n const showPreviewVoiceRecognizeRes =\n isVoiceInput && !isAiAnswering && recordStatus === \"afterRecord\";\n /** 是否展示语音识别的提示信息 */\n const showVoiceRecognizeHintInfo = isVoiceInput && !isAiAnswering && isRecording;\n\n const { startVoiceRecord, stopVoiceRecord, recognizeStatus } = useTencentSentenceRecognition({\n getSentenceRecognizeRes,\n onAsrResult: (result) => {\n // 本地录音不使用这个结果,依赖外部去设置 voiceRecognizeRes\n if (!getIsPrivateDeployEnv()) {\n setVoiceRecognizeRes(result);\n }\n },\n });\n\n useImperativeHandle(ref, () => ({\n setVoiceRecognizeRes,\n }));\n\n const toggleVoiceRecord = useMemoizedFn(() => {\n if (isAiAnswering || showPreviewVoiceRecognizeRes) {\n return;\n }\n if (!isRecording) {\n setRecordStatus(\"recording\");\n onClickStartRecord?.();\n startVoiceRecord();\n startRecordTimeRef.current = Date.now();\n } else {\n setRecordStatus(\"afterRecord\");\n onClickStopRecord?.();\n let needRequestAsr = true;\n const recordTime = Date.now() - startRecordTimeRef.current;\n if (recordTime < 500) {\n setVoiceRecognizeRes(\"\");\n needRequestAsr = false;\n message.error(\"录音时间过短\");\n }\n if (recordTime > 59 * 1000) {\n setVoiceRecognizeRes(\"\");\n needRequestAsr = false;\n message.error(\"录音时间最多支持一分钟\");\n }\n stopVoiceRecord(needRequestAsr);\n }\n });\n\n const handleSend = useMemoizedFn((_value?: string) => {\n setVoiceRecognizeRes(\"\");\n onChange?.(\"\");\n onSend?.(_value || value);\n });\n\n const placeholder = isAiAnswering ? \"正在回答中...\" : \"问点什么\";\n\n const sendButton = (\n <IconButton\n className={classNames(\"!biz-bg-primary-6\")}\n onClick={() => {\n handleSend();\n }}\n icon={\n <MouseOutlined\n className={classNames(\n \"biz-h-10 biz-w-10 biz-text-[2.5rem] biz-text-white biz--scale-x-100 biz-scale-y-100\",\n )}\n />\n }\n />\n );\n const stopButton = (\n <IconButton\n className={classNames(\"biz-bg-primary-1\")}\n onClick={() => {\n onStop?.();\n }}\n icon={\n <TerminationSquareOutlined className=\"biz-h-10 biz-w-10 biz-text-[2.5rem] !biz-text-[#3A89FE]\" />\n }\n />\n );\n const voiceButton = (\n <IconButton\n className={classNames(\"!biz-bg-bg-white\")}\n onClick={(e) => {\n setIsVoiceInput(true);\n e.stopPropagation();\n }}\n icon={<AudioOutlined className=\"biz-text-text-2 biz-h-10 biz-w-10 biz-text-[2.5rem]\" />}\n />\n );\n const keyboardButton = (\n <IconButton\n className={classNames(\"!biz-bg-bg-white\")}\n onClick={(e) => {\n setIsVoiceInput(false);\n e.stopPropagation();\n }}\n icon={<KeyboardOutlined className=\"biz-text-text-2 biz-h-10 biz-w-10 biz-text-[2.5rem]\" />}\n />\n );\n\n const inputDom = (\n <div\n className={classNames(\n \"biz-flex-center biz-h-[6rem] biz-rounded-3xl biz-pl-8 biz-pr-[0.875rem]\",\n \"biz-border-one biz-bg-bg-white !biz-border-[0.125rem]\",\n focused && \"!biz-border-primary-6\",\n )}\n >\n <Input\n ref={inputRef}\n value={value}\n placeholder={placeholder}\n className={classNames(\n \"biz-text-text-1 biz-flex biz-w-0 biz-flex-1 biz-resize-none biz-items-center biz-border-none biz-bg-transparent biz-text-[2rem]\",\n \"!biz-p-0 biz-font-normal biz-leading-[3rem] !biz-bg-transparent !biz-shadow-none\",\n )}\n onChange={(_value) => {\n onChange?.(_value);\n }}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n />\n {/* 控制按钮 */}\n <div className=\"biz-flex-center biz-h-[4.25rem] biz-w-[4.25rem] biz-rounded-2xl\">\n {isAiAnswering ? stopButton : <>{value ? sendButton : voiceButton}</>}\n </div>\n </div>\n );\n\n const disableVoiceInput = isAiAnswering; // 允许录制时点击结束\n const renderVoiceRecordDom = () => {\n if (isRecording || recognizeStatus === \"translating\") {\n return (\n <div className=\"biz-w-full biz-px-8 biz-py-6\">\n <div className=\"biz-flex-center biz-h-10\">\n <VoiceAnimation\n className=\"biz-h-[2.5rem] !biz-w-[26.25rem]\"\n barClassName=\"!biz-bg-[#fff]\"\n />\n </div>\n </div>\n );\n }\n return <span className=\"!biz-select-none\">{`点击开始说话`}</span>;\n };\n const renderVoiceInputDom = () => {\n if (showPreviewVoiceRecognizeRes) {\n return (\n <div className=\"voice-input-place-holder-dom biz-relative biz-h-[9.5rem] biz-w-full\"></div>\n );\n }\n return (\n <div\n className={classNames(\n \"biz-flex-center biz-relative biz-h-[6rem] biz-rounded-3xl biz-py-5\",\n \"biz-border-one biz-bg-primary-1 !biz-select-none !biz-border-[0.125rem]\",\n )}\n onClick={toggleVoiceRecord}\n onContextMenu={(e) => {\n e.preventDefault();\n }}\n >\n <div\n className=\"biz-flex-center biz-text-primary-6 biz-w-full !biz-select-none biz-text-[2rem]\"\n style={{\n opacity: disableVoiceInput ? 0.5 : 1,\n }}\n >\n {renderVoiceRecordDom()}\n </div>\n <div className=\"absolute left-0 top-0 z-10 h-full w-full bg-transparent\"></div>\n {/* 控制按钮 */}\n {!isRecording && (\n <div className=\"biz-flex-center biz-absolute biz-right-[0.875rem] biz-top-[0.875rem] biz-z-20 biz-h-[4.25rem] biz-w-[4.25rem] biz-rounded-2xl\">\n {isAiAnswering ? stopButton : keyboardButton}\n </div>\n )}\n </div>\n );\n };\n\n const voiceRecognizeResDom = (\n <div className=\"biz-absolute biz-z-10 biz-w-full biz-bg-transparent biz-left-0 biz-bottom-0\">\n <div className=\"biz-flex biz-flex-col biz-gap-8\">\n <div\n className={classNames(\n \"biz-text-[2rem] biz-leading-[4rem] biz-text-text-2\",\n \"biz-w-full biz-flex biz-flex-center biz-gap-9\",\n )}\n >\n <Button\n className=\"biz-rounded-2xl biz-gap-4 biz-h-[5rem] biz-px-8 biz-flex biz-flex-center biz-text-[2rem] !biz-bg-bg-1 !biz-text-white rp-[span]:!biz-ml-0\"\n icon={\n <CloseCircleOutlined\n className={classNames(\"biz-h-10 biz-w-10 biz-text-[2.5rem] biz-text-white\")}\n />\n }\n onClick={() => {\n setVoiceRecognizeRes(\"\");\n setRecordStatus(\"init\");\n }}\n >\n 取消\n </Button>\n <Button\n className=\"biz-rounded-2xl biz-gap-4 biz-h-[5rem] biz-px-8 biz-flex biz-flex-center biz-text-[2rem] rp-[span]:!biz-ml-0\"\n type=\"primary\"\n disabled={!voiceRecognizeRes}\n icon={\n <MouseOutlined\n className={classNames(\n \"biz-h-10 biz-w-10 biz-text-[2.5rem] biz--scale-x-100 biz-scale-y-100 biz-text-inherit\",\n )}\n />\n }\n onClick={() => {\n if (!voiceRecognizeRes) {\n return;\n }\n setRecordStatus(\"init\");\n handleSend(voiceRecognizeRes);\n }}\n >\n 发送\n </Button>\n </div>\n <div className=\"voice-recognize-res-dom biz-w-full biz-pb-6 biz-px-8\">\n <textarea\n placeholder=\"未识别到内容\"\n value={voiceRecognizeRes}\n className={classNames(\n \"biz-w-full biz-px-8 biz-py-7 biz-rounded-3xl biz-text-text-1 biz-text-[2rem]\",\n \"biz-border-solid biz-border-[2px] biz-border-[rgba(58,137,254,0.1)]\",\n \"biz-bg-[rgba(58,137,254,0.1)] biz-h-[8rem]\",\n )}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => {\n e.stopPropagation();\n setVoiceRecognizeRes(e.target.value);\n }}\n />\n </div>\n </div>\n </div>\n );\n\n return (\n <div\n className={classNames(\n \"biz-w-full biz-px-8 biz-py-6 biz-relative biz-flex biz-flex-col biz-gap-6\",\n className,\n )}\n >\n {showPreviewVoiceRecognizeRes && voiceRecognizeResDom}\n\n {showVoiceRecognizeHintInfo && (\n <div\n className={classNames(\n \"biz-text-[2rem] biz-leading-[4rem] biz-text-text-2\",\n \"biz-w-full biz-flex biz-flex-center\",\n )}\n >\n 正在聆听,点击结束\n </div>\n )}\n {!showPreviewVoiceRecognizeRes && renderSomethingOnVoiceInput?.()}\n {isVoiceInput ? renderVoiceInputDom() : inputDom}\n </div>\n );\n};\n\nexport const MobileVoiceInput = forwardRef(MobileVoiceInputCpn);\n"],"names":["jsx","jsxs","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"mobile-voice-input.es.js","sources":["../../../../../src/components/ai-components/mobile-voice-input/mobile-voice-input.tsx"],"sourcesContent":["import React, { forwardRef, Ref, useImperativeHandle, useRef, useState } from \"react\";\nimport { ArcoButton, ArcoInput, ArcoInputRef, ArcoMessage } from \"@easyv/arco\";\nimport {\n AudioOutlined,\n CloseCircleOutlined,\n KeyboardOutlined,\n MouseOutlined,\n TerminationSquareOutlined,\n} from \"@easyv/react-icons\";\nimport { useMemoizedFn } from \"ahooks\";\nimport classNames from \"classnames\";\nimport { VoiceAnimation } from \"@/components/voice-animation\";\nimport { useTencentSentenceRecognition } from \"@/hooks\";\nimport { getIsPrivateDeployEnv } from \"@/utils\";\nimport { IconButton } from \"./icon-button\";\n\nexport interface MobileVoiceInputProps {\n className?: string;\n isAiAnswering?: boolean;\n onClickStartRecord?: () => void;\n onClickStopRecord?: () => void;\n onSend?: (value?: string) => void;\n onStop?: () => void;\n value?: string;\n onChange?: (value?: string) => void;\n getSentenceRecognizeRes: (data: Blob) => Promise<string>;\n /** 这个是本地语音识别管理器,用于在移动端识别语音。\n * - workspace 和 screen 里的 class 不一样, 而且没有迁移到 biz-components 中 所以先写个 any。\n * - workspace 里的 class 是 LocalMobileVoiceRecognitionManager ,screen 里的 class 是 LocalVoiceRecognitionManager\n */\n // localManager?: any;\n renderSomethingOnVoiceInput?: () => React.ReactNode;\n}\n\nexport interface MobileVoiceInputRef {\n setVoiceRecognizeRes: (value: string) => void;\n}\n\nconst MobileVoiceInputCpn = (props: MobileVoiceInputProps, ref: Ref<MobileVoiceInputRef>) => {\n const {\n className = \"\",\n isAiAnswering,\n onClickStartRecord,\n onClickStopRecord,\n onSend,\n onStop,\n value,\n onChange,\n getSentenceRecognizeRes,\n renderSomethingOnVoiceInput,\n } = props;\n const [voiceRecognizeRes, setVoiceRecognizeRes] = useState(\"\");\n const [isVoiceInput, setIsVoiceInput] = useState(false); // 是否使用语音输入\n const [focused, setFocused] = useState(false); // 是否聚焦\n const [recordStatus, setRecordStatus] = useState<\"init\" | \"recording\" | \"afterRecord\">(\"init\");\n const isRecording = recordStatus === \"recording\";\n\n const startRecordTimeRef = useRef<number>(0); // 时间小于 500 ms 和 大于 59 秒都不发给后端\n const inputRef = useRef<ArcoInputRef>(null);\n\n /** 是否展示语音识别结果的预览 */\n const showPreviewVoiceRecognizeRes =\n isVoiceInput && !isAiAnswering && recordStatus === \"afterRecord\";\n /** 是否展示语音识别的提示信息 */\n const showVoiceRecognizeHintInfo = isVoiceInput && !isAiAnswering && isRecording;\n\n const { startVoiceRecord, stopVoiceRecord, recognizeStatus } = useTencentSentenceRecognition({\n getSentenceRecognizeRes,\n onAsrResult: (result) => {\n // 本地录音不使用这个结果,依赖外部去设置 voiceRecognizeRes\n if (!getIsPrivateDeployEnv()) {\n setVoiceRecognizeRes(result);\n }\n },\n });\n\n useImperativeHandle(ref, () => ({\n setVoiceRecognizeRes,\n }));\n\n const toggleVoiceRecord = useMemoizedFn(() => {\n if (isAiAnswering || showPreviewVoiceRecognizeRes) {\n return;\n }\n if (!isRecording) {\n setRecordStatus(\"recording\");\n onClickStartRecord?.();\n startVoiceRecord();\n startRecordTimeRef.current = Date.now();\n } else {\n setRecordStatus(\"afterRecord\");\n onClickStopRecord?.();\n let needRequestAsr = true;\n const recordTime = Date.now() - startRecordTimeRef.current;\n if (recordTime < 500) {\n setVoiceRecognizeRes(\"\");\n needRequestAsr = false;\n ArcoMessage.error(\"录音时间过短\");\n }\n if (recordTime > 59 * 1000) {\n setVoiceRecognizeRes(\"\");\n needRequestAsr = false;\n ArcoMessage.error(\"录音时间最多支持一分钟\");\n }\n stopVoiceRecord(needRequestAsr);\n }\n });\n\n const handleSend = useMemoizedFn((_value?: string) => {\n setVoiceRecognizeRes(\"\");\n onChange?.(\"\");\n onSend?.(_value || value);\n });\n\n const placeholder = isAiAnswering ? \"正在回答中...\" : \"问点什么\";\n\n const sendButton = (\n <IconButton\n className={classNames(\"!biz-bg-primary-6\")}\n onClick={() => {\n handleSend();\n }}\n icon={\n <MouseOutlined\n className={classNames(\n \"biz-h-10 biz-w-10 biz-text-[2.5rem] biz-text-white biz--scale-x-100 biz-scale-y-100\",\n )}\n />\n }\n />\n );\n const stopButton = (\n <IconButton\n className={classNames(\"biz-bg-primary-1\")}\n onClick={() => {\n onStop?.();\n }}\n icon={\n <TerminationSquareOutlined className=\"biz-h-10 biz-w-10 biz-text-[2.5rem] !biz-text-[#3A89FE]\" />\n }\n />\n );\n const voiceButton = (\n <IconButton\n className={classNames(\"!biz-bg-bg-white\")}\n onClick={(e) => {\n setIsVoiceInput(true);\n e.stopPropagation();\n }}\n icon={<AudioOutlined className=\"biz-text-text-2 biz-h-10 biz-w-10 biz-text-[2.5rem]\" />}\n />\n );\n const keyboardButton = (\n <IconButton\n className={classNames(\"!biz-bg-bg-white\")}\n onClick={(e) => {\n setIsVoiceInput(false);\n e.stopPropagation();\n }}\n icon={<KeyboardOutlined className=\"biz-text-text-2 biz-h-10 biz-w-10 biz-text-[2.5rem]\" />}\n />\n );\n\n const inputDom = (\n <div\n className={classNames(\n \"biz-flex-center biz-h-[6rem] biz-rounded-3xl biz-pl-8 biz-pr-[0.875rem]\",\n \"biz-border-one biz-bg-bg-white !biz-border-[0.125rem]\",\n focused && \"!biz-border-primary-6\",\n )}\n >\n <ArcoInput\n ref={inputRef}\n value={value}\n placeholder={placeholder}\n className={classNames(\n \"biz-text-text-1 biz-flex biz-w-0 biz-flex-1 biz-resize-none biz-items-center biz-border-none biz-bg-transparent biz-text-[2rem]\",\n \"!biz-p-0 biz-font-normal biz-leading-[3rem] !biz-bg-transparent !biz-shadow-none\",\n )}\n onChange={(_value) => {\n onChange?.(_value);\n }}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n />\n {/* 控制按钮 */}\n <div className=\"biz-flex-center biz-h-[4.25rem] biz-w-[4.25rem] biz-rounded-2xl\">\n {isAiAnswering ? stopButton : <>{value ? sendButton : voiceButton}</>}\n </div>\n </div>\n );\n\n const disableVoiceInput = isAiAnswering; // 允许录制时点击结束\n const renderVoiceRecordDom = () => {\n if (isRecording || recognizeStatus === \"translating\") {\n return (\n <div className=\"biz-w-full biz-px-8 biz-py-6\">\n <div className=\"biz-flex-center biz-h-10\">\n <VoiceAnimation\n className=\"biz-h-[2.5rem] !biz-w-[26.25rem]\"\n barClassName=\"!biz-bg-[#fff]\"\n />\n </div>\n </div>\n );\n }\n return <span className=\"!biz-select-none\">{`点击开始说话`}</span>;\n };\n const renderVoiceInputDom = () => {\n if (showPreviewVoiceRecognizeRes) {\n return (\n <div className=\"voice-input-place-holder-dom biz-relative biz-h-[9.5rem] biz-w-full\"></div>\n );\n }\n return (\n <div\n className={classNames(\n \"biz-flex-center biz-relative biz-h-[6rem] biz-rounded-3xl biz-py-5\",\n \"biz-border-one biz-bg-primary-1 !biz-select-none !biz-border-[0.125rem]\",\n )}\n onClick={toggleVoiceRecord}\n onContextMenu={(e) => {\n e.preventDefault();\n }}\n >\n <div\n className=\"biz-flex-center biz-text-primary-6 biz-w-full !biz-select-none biz-text-[2rem]\"\n style={{\n opacity: disableVoiceInput ? 0.5 : 1,\n }}\n >\n {renderVoiceRecordDom()}\n </div>\n <div className=\"absolute left-0 top-0 z-10 h-full w-full bg-transparent\"></div>\n {/* 控制按钮 */}\n {!isRecording && (\n <div className=\"biz-flex-center biz-absolute biz-right-[0.875rem] biz-top-[0.875rem] biz-z-20 biz-h-[4.25rem] biz-w-[4.25rem] biz-rounded-2xl\">\n {isAiAnswering ? stopButton : keyboardButton}\n </div>\n )}\n </div>\n );\n };\n\n const voiceRecognizeResDom = (\n <div className=\"biz-absolute biz-z-10 biz-w-full biz-bg-transparent biz-left-0 biz-bottom-0\">\n <div className=\"biz-flex biz-flex-col biz-gap-8\">\n <div\n className={classNames(\n \"biz-text-[2rem] biz-leading-[4rem] biz-text-text-2\",\n \"biz-w-full biz-flex biz-flex-center biz-gap-9\",\n )}\n >\n <ArcoButton\n className=\"biz-rounded-2xl biz-gap-4 biz-h-[5rem] biz-px-8 biz-flex biz-flex-center biz-text-[2rem] !biz-bg-bg-1 !biz-text-white\"\n icon={\n <CloseCircleOutlined\n className={classNames(\"biz-h-10 biz-w-10 biz-text-[2.5rem] biz-text-white\")}\n />\n }\n onClick={() => {\n setVoiceRecognizeRes(\"\");\n setRecordStatus(\"init\");\n }}\n >\n 取消\n </ArcoButton>\n <ArcoButton\n className=\"biz-rounded-2xl biz-gap-4 biz-h-[5rem] biz-px-8 biz-flex biz-flex-center biz-text-[2rem]\"\n type=\"primary\"\n disabled={!voiceRecognizeRes}\n icon={\n <MouseOutlined\n className={classNames(\n \"biz-h-10 biz-w-10 biz-text-[2.5rem] biz--scale-x-100 biz-scale-y-100 biz-text-inherit\",\n )}\n />\n }\n onClick={() => {\n if (!voiceRecognizeRes) {\n return;\n }\n setRecordStatus(\"init\");\n handleSend(voiceRecognizeRes);\n }}\n >\n 发送\n </ArcoButton>\n </div>\n <div className=\"voice-recognize-res-dom biz-w-full biz-pb-6 biz-px-8\">\n <textarea\n placeholder=\"未识别到内容\"\n value={voiceRecognizeRes}\n className={classNames(\n \"biz-w-full biz-px-8 biz-py-7 biz-rounded-3xl biz-text-text-1 biz-text-[2rem]\",\n \"biz-border-solid biz-border-[2px] biz-border-[rgba(58,137,254,0.1)]\",\n \"biz-bg-[rgba(58,137,254,0.1)] biz-h-[8rem]\",\n )}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => {\n e.stopPropagation();\n setVoiceRecognizeRes(e.target.value);\n }}\n />\n </div>\n </div>\n </div>\n );\n\n return (\n <div\n className={classNames(\n \"biz-w-full biz-px-8 biz-py-6 biz-relative biz-flex biz-flex-col biz-gap-6\",\n className,\n )}\n >\n {showPreviewVoiceRecognizeRes && voiceRecognizeResDom}\n\n {showVoiceRecognizeHintInfo && (\n <div\n className={classNames(\n \"biz-text-[2rem] biz-leading-[4rem] biz-text-text-2\",\n \"biz-w-full biz-flex biz-flex-center\",\n )}\n >\n 正在聆听,点击结束\n </div>\n )}\n {!showPreviewVoiceRecognizeRes && renderSomethingOnVoiceInput?.()}\n {isVoiceInput ? renderVoiceInputDom() : inputDom}\n </div>\n );\n};\n\nexport const MobileVoiceInput = forwardRef(MobileVoiceInputCpn);\n"],"names":["ArcoMessage","jsx","jsxs","ArcoInput","Fragment","ArcoButton"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './components';
2
+ export * from './hooks';
3
+ export * from './utils';
4
+ export * from './types';
@@ -1,8 +1,9 @@
1
1
  import { useState } from "react";
2
- import { message } from "@easyv/react-components";
2
+ import "../../packages/easyv-arco/dist/lib/index.es.es.js";
3
3
  import useUnmount from "../../node_modules/.pnpm/ahooks@3.8.5_react@18.2.0/node_modules/ahooks/es/useUnmount/index.es.js";
4
4
  import { VoiceRecordManager } from "../../utils/voice-record-manager/voice-record-manager.es.js";
5
5
  import { getIsPrivateDeployEnv } from "../../utils/common/common.es.js";
6
+ import { M as Ie } from "../../packages/easyv-arco/dist/lib/chunks/index-zvVd1BJp.es.es.js";
6
7
  const useTencentSentenceRecognition = (params) => {
7
8
  const { onAsrResult, getSentenceRecognizeRes } = params;
8
9
  const [voiceRecordManager] = useState(new VoiceRecordManager());
@@ -13,7 +14,7 @@ const useTencentSentenceRecognition = (params) => {
13
14
  await voiceRecordManager.start().then(() => {
14
15
  setRecognizeStatus("listening");
15
16
  }).catch(() => {
16
- message.error("录音启动失败");
17
+ Ie.error("录音启动失败");
17
18
  setRecognizeStatus("none");
18
19
  });
19
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use-tencent-sentence-recognition.es.js","sources":["../../../../src/hooks/use-tencent-sentence-recognition/use-tencent-sentence-recognition.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { message } from \"@easyv/react-components\";\nimport { useUnmount } from \"ahooks\";\nimport { getIsPrivateDeployEnv, VoiceRecordManager } from \"@/utils\";\n\nexport interface UseTencentSentenceRecognitionParams {\n onAsrResult?: (value: string) => void;\n getSentenceRecognizeRes: (data: Blob) => Promise<string>;\n}\nexport const useTencentSentenceRecognition = (params: UseTencentSentenceRecognitionParams) => {\n const { onAsrResult, getSentenceRecognizeRes } = params;\n const [voiceRecordManager] = useState(new VoiceRecordManager());\n const [recognizeStatus, setRecognizeStatus] = useState<\"none\" | \"listening\" | \"translating\">(\n \"none\",\n );\n\n const startOneRecordFn = async () => {\n await voiceRecordManager\n .start()\n .then(() => {\n setRecognizeStatus(\"listening\");\n })\n .catch(() => {\n message.error(\"录音启动失败\");\n setRecognizeStatus(\"none\");\n });\n };\n\n // 停止录音\n const stopOneRecordFn: (needRequest?: boolean) => Promise<string | void> = async (\n needRequest = true,\n ) => {\n try {\n if (getIsPrivateDeployEnv()) {\n setRecognizeStatus(\"none\");\n return;\n }\n const wavBlob = await voiceRecordManager.stop();\n if (!wavBlob) {\n setRecognizeStatus(\"none\");\n return;\n }\n setRecognizeStatus(\"translating\");\n if (needRequest) {\n const res = await getSentenceRecognizeRes(wavBlob);\n onAsrResult?.(res);\n }\n } catch (error) {\n console.log(\"停止录音失败:\", error);\n } finally {\n setRecognizeStatus(\"none\");\n }\n };\n\n useUnmount(() => {\n voiceRecordManager.destroy();\n });\n\n return {\n recognizeStatus,\n startVoiceRecord: startOneRecordFn,\n stopVoiceRecord: stopOneRecordFn,\n };\n};\n"],"names":[],"mappings":";;;;;AASa,MAAA,gCAAgC,CAAC,WAAgD;AACtF,QAAA,EAAE,aAAa,wBAAA,IAA4B;AACjD,QAAM,CAAC,kBAAkB,IAAI,SAAS,IAAI,oBAAoB;AACxD,QAAA,CAAC,iBAAiB,kBAAkB,IAAI;AAAA,IAC5C;AAAA,EACF;AAEA,QAAM,mBAAmB,YAAY;AACnC,UAAM,mBACH,QACA,KAAK,MAAM;AACV,yBAAmB,WAAW;AAAA,IAAA,CAC/B,EACA,MAAM,MAAM;AACX,cAAQ,MAAM,QAAQ;AACtB,yBAAmB,MAAM;AAAA,IAAA,CAC1B;AAAA,EACL;AAGM,QAAA,kBAAqE,OACzE,cAAc,SACX;AACC,QAAA;AACF,UAAI,yBAAyB;AAC3B,2BAAmB,MAAM;AACzB;AAAA,MAAA;AAEI,YAAA,UAAU,MAAM,mBAAmB,KAAK;AAC9C,UAAI,CAAC,SAAS;AACZ,2BAAmB,MAAM;AACzB;AAAA,MAAA;AAEF,yBAAmB,aAAa;AAChC,UAAI,aAAa;AACT,cAAA,MAAM,MAAM,wBAAwB,OAAO;AACjD,mDAAc;AAAA,MAAG;AAAA,aAEZ,OAAO;AACN,cAAA,IAAI,WAAW,KAAK;AAAA,IAAA,UAC5B;AACA,yBAAmB,MAAM;AAAA,IAAA;AAAA,EAE7B;AAEA,aAAW,MAAM;AACf,uBAAmB,QAAQ;AAAA,EAAA,CAC5B;AAEM,SAAA;AAAA,IACL;AAAA,IACA,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,EACnB;AACF;"}
1
+ {"version":3,"file":"use-tencent-sentence-recognition.es.js","sources":["../../../../src/hooks/use-tencent-sentence-recognition/use-tencent-sentence-recognition.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { ArcoMessage } from \"@easyv/arco\";\nimport { useUnmount } from \"ahooks\";\nimport { getIsPrivateDeployEnv, VoiceRecordManager } from \"@/utils\";\n\nexport interface UseTencentSentenceRecognitionParams {\n onAsrResult?: (value: string) => void;\n getSentenceRecognizeRes: (data: Blob) => Promise<string>;\n}\nexport const useTencentSentenceRecognition = (params: UseTencentSentenceRecognitionParams) => {\n const { onAsrResult, getSentenceRecognizeRes } = params;\n const [voiceRecordManager] = useState(new VoiceRecordManager());\n const [recognizeStatus, setRecognizeStatus] = useState<\"none\" | \"listening\" | \"translating\">(\n \"none\",\n );\n\n const startOneRecordFn = async () => {\n await voiceRecordManager\n .start()\n .then(() => {\n setRecognizeStatus(\"listening\");\n })\n .catch(() => {\n ArcoMessage.error(\"录音启动失败\");\n setRecognizeStatus(\"none\");\n });\n };\n\n // 停止录音\n const stopOneRecordFn: (needRequest?: boolean) => Promise<string | void> = async (\n needRequest = true,\n ) => {\n try {\n if (getIsPrivateDeployEnv()) {\n setRecognizeStatus(\"none\");\n return;\n }\n const wavBlob = await voiceRecordManager.stop();\n if (!wavBlob) {\n setRecognizeStatus(\"none\");\n return;\n }\n setRecognizeStatus(\"translating\");\n if (needRequest) {\n const res = await getSentenceRecognizeRes(wavBlob);\n onAsrResult?.(res);\n }\n } catch (error) {\n console.log(\"停止录音失败:\", error);\n } finally {\n setRecognizeStatus(\"none\");\n }\n };\n\n useUnmount(() => {\n voiceRecordManager.destroy();\n });\n\n return {\n recognizeStatus,\n startVoiceRecord: startOneRecordFn,\n stopVoiceRecord: stopOneRecordFn,\n };\n};\n"],"names":["ArcoMessage"],"mappings":";;;;;;AASa,MAAA,gCAAgC,CAAC,WAAgD;AACtF,QAAA,EAAE,aAAa,wBAAA,IAA4B;AACjD,QAAM,CAAC,kBAAkB,IAAI,SAAS,IAAI,oBAAoB;AACxD,QAAA,CAAC,iBAAiB,kBAAkB,IAAI;AAAA,IAC5C;AAAA,EACF;AAEA,QAAM,mBAAmB,YAAY;AACnC,UAAM,mBACH,QACA,KAAK,MAAM;AACV,yBAAmB,WAAW;AAAA,IAAA,CAC/B,EACA,MAAM,MAAM;AACXA,SAAY,MAAM,QAAQ;AAC1B,yBAAmB,MAAM;AAAA,IAAA,CAC1B;AAAA,EACL;AAGM,QAAA,kBAAqE,OACzE,cAAc,SACX;AACC,QAAA;AACF,UAAI,yBAAyB;AAC3B,2BAAmB,MAAM;AACzB;AAAA,MAAA;AAEI,YAAA,UAAU,MAAM,mBAAmB,KAAK;AAC9C,UAAI,CAAC,SAAS;AACZ,2BAAmB,MAAM;AACzB;AAAA,MAAA;AAEF,yBAAmB,aAAa;AAChC,UAAI,aAAa;AACT,cAAA,MAAM,MAAM,wBAAwB,OAAO;AACjD,mDAAc;AAAA,MAAG;AAAA,aAEZ,OAAO;AACN,cAAA,IAAI,WAAW,KAAK;AAAA,IAAA,UAC5B;AACA,yBAAmB,MAAM;AAAA,IAAA;AAAA,EAE7B;AAEA,aAAW,MAAM;AACf,uBAAmB,QAAQ;AAAA,EAAA,CAC5B;AAEM,SAAA;AAAA,IACL;AAAA,IACA,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,EACnB;AACF;"}
@@ -1,4 +1 @@
1
- export * from './components';
2
- export * from './hooks';
3
- export * from './utils';
4
- export * from './types';
1
+ export * from './easyv-biz-components/src/index'
@@ -0,0 +1,29 @@
1
+ import { j as kr, B as _e } from "./index-EAFzPBke.es.es.js";
2
+ var a = Object.defineProperty;
3
+ var s = Object.getOwnPropertySymbols;
4
+ var m = Object.prototype.hasOwnProperty, p = Object.prototype.propertyIsEnumerable;
5
+ var e = (t, o, n) => o in t ? a(t, o, { enumerable: true, configurable: true, writable: true, value: n }) : t[o] = n, u = (t, o) => {
6
+ for (var n in o || (o = {}))
7
+ m.call(o, n) && e(t, n, o[n]);
8
+ if (s)
9
+ for (var n of s(o))
10
+ p.call(o, n) && e(t, n, o[n]);
11
+ return t;
12
+ };
13
+ var x = (t, o) => {
14
+ var n = {};
15
+ for (var r in t)
16
+ m.call(t, r) && o.indexOf(r) < 0 && (n[r] = t[r]);
17
+ if (t != null && s)
18
+ for (var r of s(t))
19
+ o.indexOf(r) < 0 && p.call(t, r) && (n[r] = t[r]);
20
+ return n;
21
+ };
22
+ const A = (n) => {
23
+ var r = n, { className: t = "" } = r, o = x(r, ["className"]);
24
+ return /* @__PURE__ */ kr.jsx(_e, u({ className: t }, o));
25
+ };
26
+ export {
27
+ A
28
+ };
29
+ //# sourceMappingURL=button-Dip6wfc7.es.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-Dip6wfc7.es.es.js","sources":["../../../../../../../../easyv-arco/dist/lib/chunks/button-Dip6wfc7.es.js"],"sourcesContent":["var a = Object.defineProperty;\nvar s = Object.getOwnPropertySymbols;\nvar m = Object.prototype.hasOwnProperty, p = Object.prototype.propertyIsEnumerable;\nvar e = (t, o, n) => o in t ? a(t, o, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[o] = n, u = (t, o) => {\n for (var n in o || (o = {}))\n m.call(o, n) && e(t, n, o[n]);\n if (s)\n for (var n of s(o))\n p.call(o, n) && e(t, n, o[n]);\n return t;\n};\nvar x = (t, o) => {\n var n = {};\n for (var r in t)\n m.call(t, r) && o.indexOf(r) < 0 && (n[r] = t[r]);\n if (t != null && s)\n for (var r of s(t))\n o.indexOf(r) < 0 && p.call(t, r) && (n[r] = t[r]);\n return n;\n};\nimport { j, B } from \"./index-EAFzPBke.es.js\";\nconst A = (n) => {\n var r = n, { className: t = \"\" } = r, o = x(r, [\"className\"]);\n return /* @__PURE__ */ j.jsx(B, u({ className: t }, o));\n};\nexport {\n A\n};\n"],"names":["j","B"],"mappings":";AAAA,IAAI,IAAI,OAAO;AACf,IAAI,IAAI,OAAO;AACf,IAAI,IAAI,OAAO,UAAU,gBAAgB,IAAI,OAAO,UAAU;AAC9D,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,KAAK,IAAI,EAAE,GAAG,GAAG,EAAE,YAAY,MAAI,cAAc,MAAI,UAAU,MAAI,OAAO,EAAG,CAAA,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM;AAC5H,WAAS,KAAK,MAAM,IAAI,CAAA;AACtB,MAAE,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC9B,MAAI;AACF,aAAS,KAAK,EAAE,CAAC;AACf,QAAE,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAChC,SAAO;AACT;AACA,IAAI,IAAI,CAAC,GAAG,MAAM;AAChB,MAAI,IAAI,CAAE;AACV,WAAS,KAAK;AACZ,MAAE,KAAK,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AACjD,MAAI,KAAK,QAAQ;AACf,aAAS,KAAK,EAAE,CAAC;AACf,QAAE,QAAQ,CAAC,IAAI,KAAK,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AACnD,SAAO;AACT;AAEK,MAAC,IAAI,CAAC,MAAM;AACf,MAAI,IAAI,GAAG,EAAE,WAAW,IAAI,GAAE,IAAK,GAAG,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC;AAC5D,SAAuBA,mBAAE,IAAIC,IAAG,EAAE,EAAE,WAAW,KAAK,CAAC,CAAC;AACxD;"}