@easyv/biz-components 2.1.2 → 2.1.3
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/lib/_virtual/index.es2.js +2 -2
- package/dist/lib/_virtual/index.es3.js +2 -2
- package/dist/lib/components/ai-components/mobile-voice-input/mobile-voice-input.es.js +2 -2
- package/dist/lib/components/ai-components/mobile-voice-input/mobile-voice-input.es.js.map +1 -1
- package/dist/lib/components/easyv-reactgrid/easyv-react-grid.es.js +11 -12
- package/dist/lib/components/easyv-reactgrid/easyv-react-grid.es.js.map +1 -1
- package/dist/lib/node_modules/.pnpm/co-web-worker@1.0.1/node_modules/co-web-worker/index.es.js +1 -1
- package/dist/lib/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.es.js +1 -1
- package/dist/lib/stats.html +1 -1
- package/dist/tailwindcss.pkg.css +4 -0
- package/package.json +1 -1
|
@@ -210,7 +210,7 @@ const MobileVoiceInputCpn = (props, ref) => {
|
|
|
210
210
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
211
211
|
Button,
|
|
212
212
|
{
|
|
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]:!ml-0",
|
|
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",
|
|
214
214
|
icon: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
215
215
|
CloseCircleOutlined,
|
|
216
216
|
{
|
|
@@ -227,7 +227,7 @@ const MobileVoiceInputCpn = (props, ref) => {
|
|
|
227
227
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
228
228
|
Button,
|
|
229
229
|
{
|
|
230
|
-
className: "biz-rounded-2xl biz-gap-4 biz-h-[5rem] biz-px-8 biz-flex biz-flex-center biz-text-[2rem] rp-[span]:!ml-0",
|
|
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",
|
|
231
231
|
type: "primary",
|
|
232
232
|
disabled: !voiceRecognizeRes,
|
|
233
233
|
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]:!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]:!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":";;;;;;;;;;AAsCA,MAAM,sBAAsB,CAAC,OAA8B,QAAkC;AACrF,QAAA;AAAA,IACJ,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAS,EAAE;AAC7D,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,cAAc,eAAe,IAAI,SAA+C,MAAM;AAC7F,QAAM,cAAc,iBAAiB;AAE/B,QAAA,qBAAqB,OAAe,CAAC;AACrC,QAAA,WAAW,OAAqB,IAAI;AAG1C,QAAM,+BACJ,gBAAgB,CAAC,iBAAiB,iBAAiB;AAE/C,QAAA,6BAA6B,gBAAgB,CAAC,iBAAiB;AAErE,QAAM,EAAE,kBAAkB,iBAAiB,gBAAA,IAAoB,8BAA8B;AAAA,IAC3F;AAAA,IACA,aAAa,CAAC,WAAW;AAEnB,UAAA,CAAC,yBAAyB;AAC5B,6BAAqB,MAAM;AAAA,MAAA;AAAA,IAC7B;AAAA,EACF,CACD;AAED,sBAAoB,KAAK,OAAO;AAAA,IAC9B;AAAA,EAAA,EACA;AAEI,QAAA,oBAAoB,cAAc,MAAM;AAC5C,QAAI,iBAAiB,8BAA8B;AACjD;AAAA,IAAA;AAEF,QAAI,CAAC,aAAa;AAChB,sBAAgB,WAAW;AACN;AACJ,uBAAA;AACE,yBAAA,UAAU,KAAK,IAAI;AAAA,IAAA,OACjC;AACL,sBAAgB,aAAa;AACT;AACpB,UAAI,iBAAiB;AACrB,YAAM,aAAa,KAAK,IAAI,IAAI,mBAAmB;AACnD,UAAI,aAAa,KAAK;AACpB,6BAAqB,EAAE;AACN,yBAAA;AACjB,gBAAQ,MAAM,QAAQ;AAAA,MAAA;AAEpB,UAAA,aAAa,KAAK,KAAM;AAC1B,6BAAqB,EAAE;AACN,yBAAA;AACjB,gBAAQ,MAAM,aAAa;AAAA,MAAA;AAE7B,sBAAgB,cAAc;AAAA,IAAA;AAAA,EAChC,CACD;AAEK,QAAA,aAAa,cAAc,CAAC,WAAoB;AACpD,yBAAqB,EAAE;AACvB,yCAAW;AACX,qCAAS,UAAU;AAAA,EAAK,CACzB;AAEK,QAAA,cAAc,gBAAgB,aAAa;AAEjD,QAAM,aACJA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,mBAAmB;AAAA,MACzC,SAAS,MAAM;AACF,mBAAA;AAAA,MACb;AAAA,MACA,MACEA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAEF,QAAM,aACJA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,kBAAkB;AAAA,MACxC,SAAS,MAAM;AACJ;AAAA,MACX;AAAA,MACA,MACEA,kCAAAA,IAAC,2BAA0B,EAAA,WAAU,0DAA0D,CAAA;AAAA,IAAA;AAAA,EAEnG;AAEF,QAAM,cACJA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,kBAAkB;AAAA,MACxC,SAAS,CAAC,MAAM;AACd,wBAAgB,IAAI;AACpB,UAAE,gBAAgB;AAAA,MACpB;AAAA,MACA,MAAMA,kCAAAA,IAAC,eAAc,EAAA,WAAU,sDAAsD,CAAA;AAAA,IAAA;AAAA,EACvF;AAEF,QAAM,iBACJA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,kBAAkB;AAAA,MACxC,SAAS,CAAC,MAAM;AACd,wBAAgB,KAAK;AACrB,UAAE,gBAAgB;AAAA,MACpB;AAAA,MACA,MAAMA,kCAAAA,IAAC,kBAAiB,EAAA,WAAU,sDAAsD,CAAA;AAAA,IAAA;AAAA,EAC1F;AAGF,QAAM,WACJC,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AAAA,MAEA,UAAA;AAAA,QAAAD,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YACA,UAAU,CAAC,WAAW;AACpB,mDAAW;AAAA,YACb;AAAA,YACA,SAAS,MAAM,WAAW,IAAI;AAAA,YAC9B,QAAQ,MAAM,WAAW,KAAK;AAAA,UAAA;AAAA,QAChC;AAAA,QAEAA,kCAAA,IAAC,OAAI,EAAA,WAAU,mEACZ,UAAA,gBAAgB,aAAgBA,kCAAAA,IAAAE,kBAAAA,UAAA,EAAA,UAAA,QAAQ,aAAa,YAAA,CAAY,EACpE,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AAGF,QAAM,oBAAoB;AAC1B,QAAM,uBAAuB,MAAM;AAC7B,QAAA,eAAe,oBAAoB,eAAe;AACpD,mDACG,OAAI,EAAA,WAAU,gCACb,UAACF,kCAAA,IAAA,OAAA,EAAI,WAAU,4BACb,UAAAA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,cAAa;AAAA,QAAA;AAAA,SAEjB,EACF,CAAA;AAAA,IAAA;AAGJ,WAAQA,kCAAA,IAAA,QAAA,EAAK,WAAU,oBAAoB,UAAS,UAAA;AAAA,EACtD;AACA,QAAM,sBAAsB,MAAM;AAChC,QAAI,8BAA8B;AAE9B,aAAAA,kCAAA,IAAC,OAAI,EAAA,WAAU,sEAAsE,CAAA;AAAA,IAAA;AAIvF,WAAAC,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACT,eAAe,CAAC,MAAM;AACpB,YAAE,eAAe;AAAA,QACnB;AAAA,QAEA,UAAA;AAAA,UAAAD,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,SAAS,oBAAoB,MAAM;AAAA,cACrC;AAAA,cAEC,UAAqB,qBAAA;AAAA,YAAA;AAAA,UACxB;AAAA,UACAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,0DAA0D,CAAA;AAAA,UAExE,CAAC,eACCA,sCAAA,OAAA,EAAI,WAAU,iIACZ,UAAA,gBAAgB,aAAa,eAChC,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ;AAAA,EAEJ;AAEM,QAAA,6DACH,OAAI,EAAA,WAAU,+EACb,UAACC,kCAAAA,KAAA,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,IAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEA,UAAA;AAAA,UAAAD,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,MACEA,kCAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAW,WAAW,oDAAoD;AAAA,gBAAA;AAAA,cAC5E;AAAA,cAEF,SAAS,MAAM;AACb,qCAAqB,EAAE;AACvB,gCAAgB,MAAM;AAAA,cACxB;AAAA,cACD,UAAA;AAAA,YAAA;AAAA,UAED;AAAA,UACAA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,UAAU,CAAC;AAAA,cACX,MACEA,kCAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,kBAAA;AAAA,gBACF;AAAA,cACF;AAAA,cAEF,SAAS,MAAM;AACb,oBAAI,CAAC,mBAAmB;AACtB;AAAA,gBAAA;AAEF,gCAAgB,MAAM;AACtB,2BAAW,iBAAiB;AAAA,cAC9B;AAAA,cACD,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED;AAAA,MAAA;AAAA,IACF;AAAA,IACAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,wDACb,UAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,aAAY;AAAA,QACZ,OAAO;AAAA,QACP,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,QAClC,UAAU,CAAC,MAAM;AACf,YAAE,gBAAgB;AACG,+BAAA,EAAE,OAAO,KAAK;AAAA,QAAA;AAAA,MACrC;AAAA,IAAA,EAEJ,CAAA;AAAA,EAAA,EAAA,CACF,EACF,CAAA;AAIA,SAAAC,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC,UAAA;AAAA,QAAgC,gCAAA;AAAA,QAEhC,8BACCD,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YACD,UAAA;AAAA,UAAA;AAAA,QAED;AAAA,QAED,CAAC,iCAAgC;AAAA,QACjC,eAAe,wBAAwB;AAAA,MAAA;AAAA,IAAA;AAAA,EAC1C;AAEJ;AAEa,MAAA,mBAAmB,WAAW,mBAAmB;"}
|
|
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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"}
|
|
@@ -169,20 +169,19 @@ const EasyvReactGrid = (props) => {
|
|
|
169
169
|
};
|
|
170
170
|
const handleContextMenu = (selectedRowIds, selectedColIds, _selectionMode, menuOptions) => {
|
|
171
171
|
var _a;
|
|
172
|
+
const menu = document.querySelector(".rg-context-menu");
|
|
172
173
|
const immediateHideMenu = () => {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
menu2.style.pointerEvents = "none";
|
|
174
|
+
if (menu) {
|
|
175
|
+
menu.style.opacity = "0";
|
|
176
|
+
menu.style.pointerEvents = "none";
|
|
177
177
|
setTimeout(() => {
|
|
178
|
-
if (
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
if (menu) {
|
|
179
|
+
menu.style.opacity = "";
|
|
180
|
+
menu.style.pointerEvents = "";
|
|
181
181
|
}
|
|
182
182
|
}, 300);
|
|
183
183
|
}
|
|
184
184
|
};
|
|
185
|
-
const menu = document.querySelector(".rg-context-menu");
|
|
186
185
|
if (((_a = menu == null ? void 0 : menu.style) == null ? void 0 : _a.visibility) === "visible") {
|
|
187
186
|
immediateHideMenu();
|
|
188
187
|
}
|
|
@@ -194,12 +193,12 @@ const EasyvReactGrid = (props) => {
|
|
|
194
193
|
{
|
|
195
194
|
id: "insertRowAbove",
|
|
196
195
|
label: "向上插入一行",
|
|
197
|
-
handler: () =>
|
|
196
|
+
handler: () => insertRow(rowIndices[0], "above")
|
|
198
197
|
},
|
|
199
198
|
{
|
|
200
199
|
id: "insertRowBelow",
|
|
201
200
|
label: "向下插入一行",
|
|
202
|
-
handler: () =>
|
|
201
|
+
handler: () => insertRow(rowIndices[rowIndices.length - 1], "below")
|
|
203
202
|
}
|
|
204
203
|
);
|
|
205
204
|
}
|
|
@@ -208,12 +207,12 @@ const EasyvReactGrid = (props) => {
|
|
|
208
207
|
{
|
|
209
208
|
id: "insertColumnLeft",
|
|
210
209
|
label: "向左插入一列",
|
|
211
|
-
handler: () =>
|
|
210
|
+
handler: () => insertColumn(colIndices[0], "left")
|
|
212
211
|
},
|
|
213
212
|
{
|
|
214
213
|
id: "insertColumnRight",
|
|
215
214
|
label: "向右插入一列",
|
|
216
|
-
handler: () =>
|
|
215
|
+
handler: () => insertColumn(colIndices[colIndices.length - 1], "right")
|
|
217
216
|
}
|
|
218
217
|
);
|
|
219
218
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"easyv-react-grid.es.js","sources":["../../../../src/components/easyv-reactgrid/easyv-react-grid.tsx"],"sourcesContent":["import React, { useMemo, useState } from \"react\";\nimport {\n CellChange,\n Column,\n Id,\n MenuOption,\n Range,\n ReactGrid,\n ReactGridProps,\n Row,\n SelectionMode,\n} from \"@silevis/reactgrid\";\nimport \"@silevis/reactgrid/styles.css\";\nimport classNames from \"classnames\";\nimport { produce } from \"immer\";\nimport { menuLabelMap } from \"./constants\";\nimport styles from \"./easyv-react-grid.module.less\";\nimport { getColumnLabel } from \"./utils\";\n\nexport interface EasyvReactGridProps extends Omit<ReactGridProps, \"columns\" | \"rows\"> {\n columns?: ReactGridProps[\"columns\"];\n rows?: ReactGridProps[\"rows\"];\n wrapClassName?: string;\n wrapStyle?: React.CSSProperties;\n data?: (string | number)[][];\n onDataChange?: (data: (string | number)[][]) => void;\n expandMinGrid?: boolean;\n minRows?: number;\n minCols?: number;\n}\n\nexport const EasyvReactGrid = (props: EasyvReactGridProps) => {\n const {\n wrapClassName = \"\",\n wrapStyle,\n data,\n onDataChange,\n columns: propsColumns,\n rows: propsRows,\n expandMinGrid = true,\n disableVirtualScrolling = true,\n ...restProps\n } = props;\n\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({});\n const [rowHeights, setRowHeights] = useState<Record<string, number>>({});\n const [selectedCellKeys, setSelectedCellKeys] = useState<Set<string>>(new Set());\n\n const dataProps = useMemo(() => {\n if (!data) return null;\n const colsCount = data[0]?.length || 0;\n const rowsCount = data.length || 0;\n const minRows = props.minRows ?? 50;\n const minCols = props.minCols ?? 26;\n const displayRowsCount = expandMinGrid ? Math.max(rowsCount, minRows) : rowsCount;\n const displayColsCount = expandMinGrid ? Math.max(colsCount, minCols) : colsCount;\n\n // 添加 Header Column (Row Index)\n const columns: Column[] = [\n { columnId: \"header-col\", width: columnWidths[\"header-col\"] ?? 75, resizable: true }, // 行头列\n ...Array.from({ length: displayColsCount }).map((_, idx) => ({\n columnId: String(idx),\n width: columnWidths[String(idx)] ?? 100,\n resizable: true,\n })),\n ];\n\n // 添加 Header Row (Column Headers)\n const headerRowStyle: React.CSSProperties = {\n background: \"#252830\",\n color: \"#c9cbd3\",\n };\n const headerRow: Row = {\n rowId: \"header-row\",\n height: rowHeights[\"header-row\"] ?? 32,\n cells: [\n {\n type: \"header\",\n text: \"\",\n style: { ...headerRowStyle },\n },\n ...Array.from({ length: displayColsCount }).map(\n (_, idx) =>\n ({\n type: \"header\",\n text: getColumnLabel(idx),\n style: { ...headerRowStyle },\n }) as any,\n ),\n ],\n resizable: true,\n };\n\n const dataRows: Row[] = Array.from({ length: displayRowsCount }).map((_, rowIndex) => {\n const rowArr = rowIndex < rowsCount ? data[rowIndex] : [];\n const cells = [\n {\n type: \"header\",\n text: String(rowIndex + 1),\n style: {\n background: \"#252830\",\n borderColor: \"#292c34\",\n color: \"#c9cbd3\",\n borderRightColor: \"#50535e\",\n },\n } as any,\n ...Array.from({ length: displayColsCount }).map((_, colIndex) => {\n const cellKey = `${rowIndex}:${colIndex}`;\n const isSelected = selectedCellKeys.has(cellKey);\n const baseStyle = isSelected\n ? { background: \"#1c2338\", borderColor: \"#337efe\" }\n : undefined;\n const hasValue = colIndex < colsCount && rowIndex < rowsCount;\n const cellValue = hasValue ? rowArr[colIndex] : \"\";\n return { type: \"text\", text: String(cellValue), style: baseStyle } as any;\n }),\n ];\n return {\n rowId: String(rowIndex),\n height: rowHeights[String(rowIndex)] ?? 32,\n cells,\n resizable: true,\n };\n });\n\n const rows = [headerRow, ...dataRows];\n\n return { columns, rows };\n }, [\n data,\n props.minRows,\n props.minCols,\n expandMinGrid,\n columnWidths,\n rowHeights,\n selectedCellKeys,\n ]);\n\n const finalColumns = dataProps ? dataProps.columns : propsColumns;\n const finalRows = dataProps ? dataProps.rows : propsRows;\n\n const handleCellsChanged = (changes: CellChange<any>[]) => {\n if (!data || !onDataChange) {\n restProps.onCellsChanged?.(changes);\n return;\n }\n\n const newData = produce(data, (draft) => {\n changes.forEach((change) => {\n const rowIndex = Number(change.rowId);\n const colIndex = Number(change.columnId);\n\n // 过滤掉 header-row 和 header-col 的变更(虽然它们通常不可编辑)\n if (change.rowId === \"header-row\" || change.columnId === \"header-col\") return;\n\n if (!Number.isNaN(rowIndex) && !Number.isNaN(colIndex)) {\n const currentRows = draft.length;\n const currentCols = draft[0]?.length || 0;\n const requiredCols = Math.max(currentCols, colIndex + 1);\n\n if (rowIndex >= currentRows) {\n const toAdd = rowIndex + 1 - currentRows;\n for (let i = 0; i < toAdd; i++) {\n draft.push(new Array(requiredCols).fill(\"\"));\n }\n }\n\n if (requiredCols > currentCols) {\n for (let r = 0; r < draft.length; r++) {\n while ((draft[r]?.length || 0) < requiredCols) {\n draft[r].push(\"\");\n }\n }\n }\n\n if (change.newCell.type === \"number\") {\n draft[rowIndex][colIndex] = change.newCell.value;\n } else if (change.newCell.type === \"text\") {\n draft[rowIndex][colIndex] = change.newCell.text;\n } else {\n draft[rowIndex][colIndex] = (change as any).newCell?.text ?? \"\";\n }\n }\n });\n });\n\n onDataChange(newData);\n };\n\n const insertRow = (targetIndex: number, position: \"above\" | \"below\") => {\n if (!data || !onDataChange) return;\n const newData = produce(data, (draft) => {\n const insertIdx = position === \"above\" ? targetIndex : targetIndex + 1;\n const colsCount = draft[0]?.length || 0;\n const newRow = new Array(colsCount).fill(\"\");\n draft.splice(insertIdx, 0, newRow);\n });\n onDataChange(newData);\n };\n\n const insertColumn = (targetIndex: number, position: \"left\" | \"right\") => {\n if (!data || !onDataChange) return;\n const newData = produce(data, (draft) => {\n const insertIdx = position === \"left\" ? targetIndex : targetIndex + 1;\n draft.forEach((row) => {\n row.splice(insertIdx, 0, \"\");\n });\n });\n onDataChange(newData);\n };\n\n const handleContextMenu = (\n selectedRowIds: Id[],\n selectedColIds: Id[],\n _selectionMode: SelectionMode,\n menuOptions: MenuOption[],\n ): MenuOption[] => {\n const immediateHideMenu = () => {\n // 尝试强制隐藏菜单,避免闪烁\n const menu = document.querySelector(\".rg-context-menu\") as HTMLElement;\n if (menu) {\n menu.style.opacity = \"0\";\n menu.style.pointerEvents = \"none\";\n // 500ms 后恢复样式,确保下次打开时菜单可见\n setTimeout(() => {\n if (menu) {\n menu.style.opacity = \"\";\n menu.style.pointerEvents = \"\";\n }\n }, 300);\n }\n };\n const menu = document.querySelector(\".rg-context-menu\") as HTMLElement;\n if (menu?.style?.visibility === \"visible\") {\n immediateHideMenu();\n }\n const rowIndices = selectedRowIds\n .map((id) => Number(id))\n .filter((idx) => !Number.isNaN(idx) && idx >= 0)\n .sort((a, b) => a - b);\n\n const colIndices = selectedColIds\n .map((id) => Number(id))\n .filter((idx) => !Number.isNaN(idx) && idx >= 0)\n .sort((a, b) => a - b);\n\n const options: MenuOption[] = [];\n\n if (rowIndices.length > 0) {\n options.push(\n {\n id: \"insertRowAbove\",\n label: \"向上插入一行\",\n handler: () => () => insertRow(rowIndices[0], \"above\"),\n },\n {\n id: \"insertRowBelow\",\n label: \"向下插入一行\",\n handler: () => () => insertRow(rowIndices[rowIndices.length - 1], \"below\"),\n },\n );\n }\n\n if (colIndices.length > 0) {\n options.push(\n {\n id: \"insertColumnLeft\",\n label: \"向左插入一列\",\n handler: () => () => insertColumn(colIndices[0], \"left\"),\n },\n {\n id: \"insertColumnRight\",\n label: \"向右插入一列\",\n handler: () => () => insertColumn(colIndices[colIndices.length - 1], \"right\"),\n },\n );\n }\n\n const originMenuOptions = menuOptions.map((item) => ({\n ...item,\n label: menuLabelMap[item.id as keyof typeof menuLabelMap] || item.label,\n }));\n return [...originMenuOptions, ...options];\n };\n\n const handleColumnResized = (columnId: Id, width: number, _selectedColIds: Id[]) => {\n setColumnWidths((prev) => ({\n ...prev,\n [String(columnId)]: width,\n }));\n };\n\n const handleRowResized = (rowId: Id, height: number, _selectedRowIds: Id[]) => {\n setRowHeights((prev) => ({\n ...prev,\n [String(rowId)]: height,\n }));\n };\n\n const handleSelectionChanged = (selectedRanges: Range[]) => {\n const keys = new Set<string>();\n (selectedRanges || []).forEach((range: any) => {\n if (Array.isArray(range)) {\n range.forEach((loc: any) => {\n if (loc && loc.rowId !== undefined && loc.columnId !== undefined) {\n keys.add(`${String(loc.rowId)}:${String(loc.columnId)}`);\n }\n });\n } else if (range && Array.isArray(range.rowIds) && Array.isArray(range.columnIds)) {\n range.rowIds.forEach((r: any) => {\n range.columnIds.forEach((c: any) => {\n keys.add(`${String(r)}:${String(c)}`);\n });\n });\n }\n });\n setSelectedCellKeys(keys);\n };\n\n return (\n <div\n className={classNames(\n styles[\"easyv-react-grid\"],\n \"easyv-react-grid\",\n \"biz-w-full biz-h-full biz-min-h-[100px] biz-min-w-[200px]\",\n wrapClassName,\n )}\n style={wrapStyle}\n >\n {finalColumns && finalRows ? (\n <ReactGrid\n columns={finalColumns}\n rows={finalRows}\n stickyTopRows={1}\n stickyLeftColumns={1}\n enableRangeSelection\n enableFillHandle\n enableRowSelection\n enableColumnSelection\n onSelectionChanged={handleSelectionChanged}\n disableVirtualScrolling={disableVirtualScrolling}\n {...restProps}\n onCellsChanged={handleCellsChanged}\n onContextMenu={handleContextMenu}\n onColumnResized={handleColumnResized}\n onRowResized={handleRowResized}\n />\n ) : (\n <div className=\"biz-flex-center biz-w-full biz-h-full biz-text-text-3\">\n No data provided\n </div>\n )}\n </div>\n );\n};\n"],"names":["_","_a","menu","jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"easyv-react-grid.es.js","sources":["../../../../src/components/easyv-reactgrid/easyv-react-grid.tsx"],"sourcesContent":["import React, { useMemo, useState } from \"react\";\nimport {\n CellChange,\n Column,\n Id,\n MenuOption,\n Range,\n ReactGrid,\n ReactGridProps,\n Row,\n SelectionMode,\n} from \"@silevis/reactgrid\";\nimport \"@silevis/reactgrid/styles.css\";\nimport classNames from \"classnames\";\nimport { produce } from \"immer\";\nimport { menuLabelMap } from \"./constants\";\nimport styles from \"./easyv-react-grid.module.less\";\nimport { getColumnLabel } from \"./utils\";\n\nexport interface EasyvReactGridProps extends Omit<ReactGridProps, \"columns\" | \"rows\"> {\n columns?: ReactGridProps[\"columns\"];\n rows?: ReactGridProps[\"rows\"];\n wrapClassName?: string;\n wrapStyle?: React.CSSProperties;\n data?: (string | number)[][];\n onDataChange?: (data: (string | number)[][]) => void;\n expandMinGrid?: boolean;\n minRows?: number;\n minCols?: number;\n}\n\nexport const EasyvReactGrid = (props: EasyvReactGridProps) => {\n const {\n wrapClassName = \"\",\n wrapStyle,\n data,\n onDataChange,\n columns: propsColumns,\n rows: propsRows,\n expandMinGrid = true,\n disableVirtualScrolling = true,\n ...restProps\n } = props;\n\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({});\n const [rowHeights, setRowHeights] = useState<Record<string, number>>({});\n const [selectedCellKeys, setSelectedCellKeys] = useState<Set<string>>(new Set());\n\n const dataProps = useMemo(() => {\n if (!data) return null;\n const colsCount = data[0]?.length || 0;\n const rowsCount = data.length || 0;\n const minRows = props.minRows ?? 50;\n const minCols = props.minCols ?? 26;\n const displayRowsCount = expandMinGrid ? Math.max(rowsCount, minRows) : rowsCount;\n const displayColsCount = expandMinGrid ? Math.max(colsCount, minCols) : colsCount;\n\n // 添加 Header Column (Row Index)\n const columns: Column[] = [\n { columnId: \"header-col\", width: columnWidths[\"header-col\"] ?? 75, resizable: true }, // 行头列\n ...Array.from({ length: displayColsCount }).map((_, idx) => ({\n columnId: String(idx),\n width: columnWidths[String(idx)] ?? 100,\n resizable: true,\n })),\n ];\n\n // 添加 Header Row (Column Headers)\n const headerRowStyle: React.CSSProperties = {\n background: \"#252830\",\n color: \"#c9cbd3\",\n };\n const headerRow: Row = {\n rowId: \"header-row\",\n height: rowHeights[\"header-row\"] ?? 32,\n cells: [\n {\n type: \"header\",\n text: \"\",\n style: { ...headerRowStyle },\n },\n ...Array.from({ length: displayColsCount }).map(\n (_, idx) =>\n ({\n type: \"header\",\n text: getColumnLabel(idx),\n style: { ...headerRowStyle },\n }) as any,\n ),\n ],\n resizable: true,\n };\n\n const dataRows: Row[] = Array.from({ length: displayRowsCount }).map((_, rowIndex) => {\n const rowArr = rowIndex < rowsCount ? data[rowIndex] : [];\n const cells = [\n {\n type: \"header\",\n text: String(rowIndex + 1),\n style: {\n background: \"#252830\",\n borderColor: \"#292c34\",\n color: \"#c9cbd3\",\n borderRightColor: \"#50535e\",\n },\n } as any,\n ...Array.from({ length: displayColsCount }).map((_, colIndex) => {\n const cellKey = `${rowIndex}:${colIndex}`;\n const isSelected = selectedCellKeys.has(cellKey);\n const baseStyle = isSelected\n ? { background: \"#1c2338\", borderColor: \"#337efe\" }\n : undefined;\n const hasValue = colIndex < colsCount && rowIndex < rowsCount;\n const cellValue = hasValue ? rowArr[colIndex] : \"\";\n return { type: \"text\", text: String(cellValue), style: baseStyle } as any;\n }),\n ];\n return {\n rowId: String(rowIndex),\n height: rowHeights[String(rowIndex)] ?? 32,\n cells,\n resizable: true,\n };\n });\n\n const rows = [headerRow, ...dataRows];\n\n return { columns, rows };\n }, [\n data,\n props.minRows,\n props.minCols,\n expandMinGrid,\n columnWidths,\n rowHeights,\n selectedCellKeys,\n ]);\n\n const finalColumns = dataProps ? dataProps.columns : propsColumns;\n const finalRows = dataProps ? dataProps.rows : propsRows;\n\n const handleCellsChanged = (changes: CellChange<any>[]) => {\n if (!data || !onDataChange) {\n restProps.onCellsChanged?.(changes);\n return;\n }\n\n const newData = produce(data, (draft) => {\n changes.forEach((change) => {\n const rowIndex = Number(change.rowId);\n const colIndex = Number(change.columnId);\n\n // 过滤掉 header-row 和 header-col 的变更(虽然它们通常不可编辑)\n if (change.rowId === \"header-row\" || change.columnId === \"header-col\") return;\n\n if (!Number.isNaN(rowIndex) && !Number.isNaN(colIndex)) {\n const currentRows = draft.length;\n const currentCols = draft[0]?.length || 0;\n const requiredCols = Math.max(currentCols, colIndex + 1);\n\n if (rowIndex >= currentRows) {\n const toAdd = rowIndex + 1 - currentRows;\n for (let i = 0; i < toAdd; i++) {\n draft.push(new Array(requiredCols).fill(\"\"));\n }\n }\n\n if (requiredCols > currentCols) {\n for (let r = 0; r < draft.length; r++) {\n while ((draft[r]?.length || 0) < requiredCols) {\n draft[r].push(\"\");\n }\n }\n }\n\n if (change.newCell.type === \"number\") {\n draft[rowIndex][colIndex] = change.newCell.value;\n } else if (change.newCell.type === \"text\") {\n draft[rowIndex][colIndex] = change.newCell.text;\n } else {\n draft[rowIndex][colIndex] = (change as any).newCell?.text ?? \"\";\n }\n }\n });\n });\n\n onDataChange(newData);\n };\n\n const insertRow = (targetIndex: number, position: \"above\" | \"below\") => {\n if (!data || !onDataChange) return;\n const newData = produce(data, (draft) => {\n const insertIdx = position === \"above\" ? targetIndex : targetIndex + 1;\n const colsCount = draft[0]?.length || 0;\n const newRow = new Array(colsCount).fill(\"\");\n draft.splice(insertIdx, 0, newRow);\n });\n onDataChange(newData);\n };\n\n const insertColumn = (targetIndex: number, position: \"left\" | \"right\") => {\n if (!data || !onDataChange) return;\n const newData = produce(data, (draft) => {\n const insertIdx = position === \"left\" ? targetIndex : targetIndex + 1;\n draft.forEach((row) => {\n row.splice(insertIdx, 0, \"\");\n });\n });\n onDataChange(newData);\n };\n\n const handleContextMenu = (\n selectedRowIds: Id[],\n selectedColIds: Id[],\n _selectionMode: SelectionMode,\n menuOptions: MenuOption[],\n ): MenuOption[] => {\n const menu = document.querySelector(\".rg-context-menu\") as HTMLElement;\n const immediateHideMenu = () => {\n // 尝试强制隐藏菜单,避免闪烁\n if (menu) {\n menu.style.opacity = \"0\";\n menu.style.pointerEvents = \"none\";\n // 500ms 后恢复样式,确保下次打开时菜单可见\n setTimeout(() => {\n if (menu) {\n menu.style.opacity = \"\";\n menu.style.pointerEvents = \"\";\n }\n }, 300);\n }\n };\n if (menu?.style?.visibility === \"visible\") {\n immediateHideMenu();\n }\n const rowIndices = selectedRowIds\n .map((id) => Number(id))\n .filter((idx) => !Number.isNaN(idx) && idx >= 0)\n .sort((a, b) => a - b);\n\n const colIndices = selectedColIds\n .map((id) => Number(id))\n .filter((idx) => !Number.isNaN(idx) && idx >= 0)\n .sort((a, b) => a - b);\n\n const options: MenuOption[] = [];\n\n if (rowIndices.length > 0) {\n options.push(\n {\n id: \"insertRowAbove\",\n label: \"向上插入一行\",\n handler: () => insertRow(rowIndices[0], \"above\"),\n },\n {\n id: \"insertRowBelow\",\n label: \"向下插入一行\",\n handler: () => insertRow(rowIndices[rowIndices.length - 1], \"below\"),\n },\n );\n }\n\n if (colIndices.length > 0) {\n options.push(\n {\n id: \"insertColumnLeft\",\n label: \"向左插入一列\",\n handler: () => insertColumn(colIndices[0], \"left\"),\n },\n {\n id: \"insertColumnRight\",\n label: \"向右插入一列\",\n handler: () => insertColumn(colIndices[colIndices.length - 1], \"right\"),\n },\n );\n }\n\n const originMenuOptions = menuOptions.map((item) => ({\n ...item,\n label: menuLabelMap[item.id as keyof typeof menuLabelMap] || item.label,\n }));\n return [...originMenuOptions, ...options];\n };\n\n const handleColumnResized = (columnId: Id, width: number, _selectedColIds: Id[]) => {\n setColumnWidths((prev) => ({\n ...prev,\n [String(columnId)]: width,\n }));\n };\n\n const handleRowResized = (rowId: Id, height: number, _selectedRowIds: Id[]) => {\n setRowHeights((prev) => ({\n ...prev,\n [String(rowId)]: height,\n }));\n };\n\n const handleSelectionChanged = (selectedRanges: Range[]) => {\n const keys = new Set<string>();\n (selectedRanges || []).forEach((range: any) => {\n if (Array.isArray(range)) {\n range.forEach((loc: any) => {\n if (loc && loc.rowId !== undefined && loc.columnId !== undefined) {\n keys.add(`${String(loc.rowId)}:${String(loc.columnId)}`);\n }\n });\n } else if (range && Array.isArray(range.rowIds) && Array.isArray(range.columnIds)) {\n range.rowIds.forEach((r: any) => {\n range.columnIds.forEach((c: any) => {\n keys.add(`${String(r)}:${String(c)}`);\n });\n });\n }\n });\n setSelectedCellKeys(keys);\n };\n\n return (\n <div\n className={classNames(\n styles[\"easyv-react-grid\"],\n \"easyv-react-grid\",\n \"biz-w-full biz-h-full biz-min-h-[100px] biz-min-w-[200px]\",\n wrapClassName,\n )}\n style={wrapStyle}\n >\n {finalColumns && finalRows ? (\n <ReactGrid\n columns={finalColumns}\n rows={finalRows}\n stickyTopRows={1}\n stickyLeftColumns={1}\n enableRangeSelection\n enableFillHandle\n enableRowSelection\n enableColumnSelection\n onSelectionChanged={handleSelectionChanged}\n disableVirtualScrolling={disableVirtualScrolling}\n {...restProps}\n onCellsChanged={handleCellsChanged}\n onContextMenu={handleContextMenu}\n onColumnResized={handleColumnResized}\n onRowResized={handleRowResized}\n />\n ) : (\n <div className=\"biz-flex-center biz-w-full biz-h-full biz-text-text-3\">\n No data provided\n </div>\n )}\n </div>\n );\n};\n"],"names":["_","_a","jsx"],"mappings":"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"}
|
package/dist/lib/node_modules/.pnpm/co-web-worker@1.0.1/node_modules/co-web-worker/index.es.js
CHANGED
|
@@ -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" });
|
|
@@ -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";
|