lke-component 2.0.1-beta.2 → 2.0.1-beta.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.
|
@@ -46,7 +46,7 @@ https://github.com/highlightjs/highlight.js/issues/2277`),B=L,R=O),P===void 0&&(
|
|
|
46
46
|
|
|
47
47
|
<div class="video-placeholder"></div>
|
|
48
48
|
|
|
49
|
-
`))}return t=jN(t),t=XN(t),r&&(t=nO(t,n)),QN(t)||(t=JN(t),t=tO.clean(t)),t=IN(t),t=PN(t),t=EN(t),t=RN(t),t=TN(t),t=DN(t),t=YN(t),i||(t=kN(t)),t=MN(t),a&&(t=GN(t)),o&&(t=$N(t,s)),u?t=BN(t,l):t=FN(t),c&&c.length>0?t=zN(t,c):t=VN(t),f?t=HN(t):t=UN(t),h?t=WN(t):t=qN(t),t=LN(t),t=eO.process(mE(t)),t}function nO(t,e){if(!t||Ub(window.location.hash,"from"))return t;let n=["lke.cloud.tencent.com","qidian"];e&&(n=e.concat(n));const i=ZN(t);i.forEach((u,l)=>{t=t.replace(u,`IMG_URL${l}`)});const a=`${window.location.protocol}//${window.location.host}/lke#/link-info/redirect?target=`,o=n.map(u=>`(?!.*${u})`).join(""),s=new RegExp(`(\\[([^\\]]+)\\]\\((https?:\\/\\/${o}[^\\s)]+)\\))|(<a\\s+[^>]*href="(${o}[^"]+)"[^>]*>(.*?)<\\/a>)`,"gi");return t=t.replace(s,(u,l,c,f,h,d,p)=>l&&c?`[${c}](${a}${encodeURIComponent(f)})`:d&&!d.startsWith("#")?`<a href="${a}${encodeURIComponent(d)}">${p}</a>`:u),i.forEach((u,l)=>{t=t.replace(`IMG_URL${l}`,u)}),t}function sf(t,e={}){return NN(t,r=>rO(r,e))}const iO={data(){return{currentTimer:null,currentIndex:0}},methods:{clearTimer(){this.currentTimer&&(clearTimeout(this.currentTimer),this.currentTimer=null)},startCurrentTimer(t={}){const{printCount:e=1,printCountTime:r=16,hideCursorPoint:n=!1,isFinal:i=!1}=t;this.clearTimer(),this.currentTimer=setTimeout(()=>{const a=e;this.currentIndex+=a,this.renderText=n?this.currentText.substring(0,this.currentIndex):this.currentText.substring(0,this.currentIndex)+"CURSOR_POINT",(this.currentIndex<this.currentText.length||!i)&&this.startCurrentTimer(t)},r)}},beforeDestroy(){this.clearTimer()}};function aO(t,e={}){const{type:r="text/javascript",crossOrigin:n}=e;return new Promise((i,a)=>{if(document.querySelector(`script[src="${t}"]`)){i();return}const o=document.createElement("script");o.src=t,o.type=r,n&&(o.crossOrigin=n),o.onload=i,o.onerror=()=>a(new Error(`Failed to load: ${t}`)),document.head.appendChild(o)})}function oO(){const t=Date.now(),e=5*60*1e3;return Math.floor(t/e)*e}async function sO(){try{const t=window.tdWidgetSrc||"https://cdn.xiaowei.qq.com/webim/assets/static/widget/release/lib/js/",e=oO();return await aO(`${t}adp-widget.js?nounce=${e}`,{type:"module"}),!0}catch(t){throw console.error("Failed to load adp-widget:",t),t}}Pa.config&&!Pa.config.ignoredElements.includes("adp-widget")&&Pa.config.ignoredElements.push("adp-widget");const uO={name:"MsgWidget",props:{output:{type:String,default:""},locale:{type:String,default:"zh-CN"},disable:{type:Boolean,default:!1}},data(){return{loaded:!1}},async mounted(){try{await sO(),this.loaded=!0}catch(t){console.error("[MsgWidget] 加载 adp-widget 失败:",t)}},methods:{handleAction(t){const{action:e}=t.detail||{};this.$emit("widget-action",e),this.$emit("widget-event",t)},handleRendered(t){const{success:e,config:r,error:n,timestamp:i}=t.detail||{};this.$emit("widget-rendered",{success:e,config:r,error:n,timestamp:i})}}};var lO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"lke__widget-container"},[e.output&&e.loaded?r("adp-widget",{ref:"widget",attrs:{locale:e.locale,"widget-json":e.output,disable:e.disable},on:{"widget-rendered":e.handleRendered,"widget-action":e.handleAction}}):e._e()],1)},cO=[],fO=pr(uO,lO,cO,!1,null,"c152fdb4",null,null);const qb=fO.exports,Y=(...t)=>{console.log("[StreamAudioPlayer24]",...t)};let Zb=class{constructor(){this.playMode=null,this.audioContext=null,this.audioQueue=[],this.pendingChunks=[],this.isPlaying=!1,this.totalDuration=0,this.estimatedDuration=0,this.pausedAt=0,this.startedAt=0,this.timeUpdateInterval=null,this.scheduledSources=[],this.nextScheduleTime=0,this.scheduledCount=0,this.autoPlayCheckInterval=null,this.autoPlayCheckWaitTime=0,this.processedChunkCount=0,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.decodeAheadCount=1;const e=this.isMobileDevice();this.maxDecodedBuffers=e?8:20,this.playedBufferCount=0,this.audioElement=null,this.iosUnlockAudio=null,this.mediaStreamDestination=null,this.wasPlayingBeforeHidden=!1,this.handleVisibilityChange=null,this.onPlayCallback=null,this.onPauseCallback=null,this.onEndCallback=null,this.onErrorCallback=null,this.onTimeUpdateCallback=null,this.onDurationChangeCallback=null,this.onUrlReadyCallback=null,this.generationComplete=!1,this.durationFromUrlSet=!1,this.urlReady=!1,this.fullAudioUrl=null,this.preloadedAudioElement=null}isMobileDevice(){return typeof navigator>"u"?!1:/Android|iPhone|iPad|iPod|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}initAudioContext(){if(!this.audioContext)try{const e=window.AudioContext||window.webkitAudioContext;this.audioContext=new e,Y("[initAudioContext] AudioContext 创建成功",{state:this.audioContext.state,sampleRate:this.audioContext.sampleRate,isIOS:/iPhone|iPad|iPod/i.test(navigator.userAgent)}),this.audioContext.onstatechange=()=>{if(Y("[AudioContext.onstatechange] 状态变化:",this.audioContext.state),(this.audioContext.state==="interrupted"||this.audioContext.state==="suspended")&&this.isPlaying&&this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[AudioContext.onstatechange] iOS audio 元素已暂停")}catch{}},this.handleVisibilityChange=()=>{var r,n,i,a;document.hidden?(this.wasPlayingBeforeHidden=this.isPlaying,Y("[visibilitychange] 页面隐藏,记录播放状态:",this.wasPlayingBeforeHidden)):(Y("[visibilitychange] 页面可见",{wasPlayingBeforeHidden:this.wasPlayingBeforeHidden,isPlaying:this.isPlaying,audioContextState:(r=this.audioContext)==null?void 0:r.state}),this.wasPlayingBeforeHidden&&(((n=this.audioContext)==null?void 0:n.state)==="suspended"||((i=this.audioContext)==null?void 0:i.state)==="interrupted"?this.audioContext.resume().then(()=>{Y("[visibilitychange] AudioContext 已恢复"),this.isPlaying&&this.iosUnlockAudio&&this.iosUnlockAudio.play().catch(o=>{Y("[visibilitychange] iOS audio 恢复播放失败:",o)})}).catch(o=>{Y("[visibilitychange] AudioContext 恢复失败:",o),this.isPlaying&&(this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback())}):((a=this.audioContext)==null?void 0:a.state)==="running"&&this.isPlaying&&this.iosUnlockAudio&&this.iosUnlockAudio.play().catch(o=>{Y("[visibilitychange] iOS audio 恢复播放失败:",o)})),this.wasPlayingBeforeHidden=!1)},document.addEventListener("visibilitychange",this.handleVisibilityChange),/iPhone|iPad|iPod/i.test(navigator.userAgent)&&this.setupIOSAudioRoute()}catch(e){console.error("[initAudioContext] 创建 AudioContext 失败:",e),this.onErrorCallback&&this.onErrorCallback(new Error("浏览器不支持音频播放"))}}setupIOSAudioRoute(){if(this.audioContext)try{if(typeof this.audioContext.createMediaStreamDestination!="function"){Y("[setupIOSAudioRoute] 浏览器不支持 createMediaStreamDestination");return}this.mediaStreamDestination=this.audioContext.createMediaStreamDestination(),this.iosUnlockAudio=document.createElement("audio"),this.iosUnlockAudio.srcObject=this.mediaStreamDestination.stream,this.iosUnlockAudio.setAttribute("playsinline","true"),this.iosUnlockAudio.setAttribute("webkit-playsinline","true"),this.iosUnlockAudio.onerror=e=>{Y("[setupIOSAudioRoute] iOS audio 元素错误:",e)},Y("[setupIOSAudioRoute] iOS 音频路由设置完成")}catch(e){console.error("[setupIOSAudioRoute] 设置失败:",e),this.mediaStreamDestination=null,this.iosUnlockAudio=null}}getAudioDestination(){return this.mediaStreamDestination?this.mediaStreamDestination:this.audioContext?this.audioContext.destination:null}async startIOSAudioElement(){if(this.iosUnlockAudio)try{await this.iosUnlockAudio.play(),Y("[startIOSAudioElement] iOS audio 元素播放启动成功")}catch(e){Y("[startIOSAudioElement] iOS audio 元素播放失败:",e)}}initAudioElement(){this.audioElement||(this.audioElement=new Audio,this.audioElement.preload="metadata",this.audioElement.addEventListener("play",()=>{this.isPlaying=!0,this.onPlayCallback&&this.onPlayCallback()}),this.audioElement.addEventListener("pause",()=>{this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback()}),this.audioElement.addEventListener("ended",()=>{this.isPlaying=!1,this.onEndCallback&&this.onEndCallback()}),this.audioElement.addEventListener("timeupdate",()=>{this.onTimeUpdateCallback&&this.onTimeUpdateCallback(this.audioElement.currentTime,this.audioElement.duration||0)}),this.audioElement.addEventListener("durationchange",()=>{this.totalDuration=this.audioElement.duration||0,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}),this.audioElement.addEventListener("error",e=>{this.onErrorCallback&&this.onErrorCallback(new Error("音频加载失败: "+(e.message||"未知错误")))}),this.audioElement.addEventListener("loadedmetadata",()=>{this.totalDuration=this.audioElement.duration||0,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}))}setPlayMode(e){this.playMode!==e&&(this.playMode==="stream"?this.clearStreamMode():this.playMode==="url"&&this.clearUrlMode(),this.playMode=e,e==="stream"?this.initAudioContext():e==="url"&&this.initAudioElement())}clearStreamMode(){this.stop(),this.audioQueue=[],this.pendingChunks=[],this.totalDuration=0,this.estimatedDuration=0,this.scheduledCount=0,this.nextScheduleTime=0,this.processedChunkCount=0,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.playedBufferCount=0,this.generationComplete=!1,this.fullAudioUrl=null,this.urlReady=!1,this.preloadedAudioElement=null,this.iosUnlockAudio&&(this.iosUnlockAudio.pause(),this.iosUnlockAudio.srcObject=null,this.iosUnlockAudio=null),this.mediaStreamDestination=null,this.handleVisibilityChange&&(document.removeEventListener("visibilitychange",this.handleVisibilityChange),this.handleVisibilityChange=null),this.audioContext&&(this.audioContext.onstatechange=null,this.audioContext.close().catch(()=>{}),this.audioContext=null),this.wasPlayingBeforeHidden=!1}clearUrlMode(){this.audioElement&&(this.audioElement.pause(),this.audioElement.src="")}setAudioUrl(e){e&&(this.setPlayMode("url"),this.audioElement.src=e,this.audioElement.load())}async ensureAudioContextRunning(){if(!this.audioContext)throw new Error("AudioContext not initialized");if(Y("[ensureAudioContextRunning] 当前状态:",this.audioContext.state),this.audioContext.state==="suspended")try{await this.audioContext.resume(),Y("[ensureAudioContextRunning] resume 成功,新状态:",this.audioContext.state),/iPhone|iPad|iPod/i.test(navigator.userAgent)&&await this.playUnlockSound()}catch(e){throw console.error("[ensureAudioContextRunning] resume 失败:",e),new Error("无法激活音频上下文")}else if(this.audioContext.state==="interrupted")try{await this.audioContext.resume(),Y("[ensureAudioContextRunning] 从 interrupted 状态恢复")}catch(e){throw console.error("[ensureAudioContextRunning] 从 interrupted 恢复失败:",e),new Error("无法恢复音频上下文")}}async playUnlockSound(){if(this.audioContext)try{const e=this.audioContext.createBuffer(1,1,this.audioContext.sampleRate),r=this.audioContext.createBufferSource();r.buffer=e,r.connect(this.getAudioDestination()),r.start(0),Y("[playUnlockSound] 播放解锁音频完成")}catch(e){Y("[playUnlockSound] 播放解锁音频失败(可忽略):",e)}}addBase64ChunkLazy(e,r=1){if(!e)return;this.setPlayMode("stream"),this.pendingChunks.push(e);const n=(e.length*.75/1024).toFixed(2);Y(`[addBase64ChunkLazy] 添加第 ${this.pendingChunks.length+this.processedChunkCount} 个chunk`,{chunkSize:`${n} KB`,pendingChunks:this.pendingChunks.length,processedChunkCount:this.processedChunkCount,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,isPlaying:this.isPlaying,totalDuration:this.totalDuration.toFixed(2),estimatedDuration:this.estimatedDuration.toFixed(2)}),this.estimatedDuration+=r,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration()),this.autoPlayCheckWaitTime>0&&(Y("[addBase64ChunkLazy] 重置等待超时时间"),this.autoPlayCheckWaitTime=0),this.isPlaying?(Y("[addBase64ChunkLazy] 正在播放,触发 decodeAhead"),this.decodeAhead()):Y("[addBase64ChunkLazy] 未在播放状态,不触发解码")}async addBase64Chunk(e){e&&this.addBase64ChunkLazy(e)}getDisplayDuration(){return Math.floor(this.totalDuration+this.estimatedDuration)}async decodeAhead(){let e=0;if(this.audioQueue.forEach(i=>{e+=i.duration}),Y("[decodeAhead] 开始",{decodingInProgress:this.decodingInProgress,pendingChunks:this.pendingChunks.length,audioQueueLength:this.audioQueue.length,currentQueueDuration:e.toFixed(2),scheduledCount:this.scheduledCount,isPlaying:this.isPlaying,generationComplete:this.generationComplete,totalDuration:this.totalDuration.toFixed(2)}),this.decodingInProgress){Y("[decodeAhead] 已在解码中,跳过");return}if(this.pendingChunks.length===0){Y("[decodeAhead] 没有待解码的 chunk,跳过");return}const r=this.audioQueue.length-this.scheduledCount;if(Y("[decodeAhead] 未调度数量检查",{unscheduledCount:r,decodeAheadCount:this.decodeAheadCount,needMoreDecode:r<this.decodeAheadCount}),r>=this.decodeAheadCount&&this.pendingChunks.length>0){Y("[decodeAhead] 已有足够预解码 buffer,100ms 后再检查"),setTimeout(()=>this.decodeAhead(),100);return}this.decodingInProgress=!0;const n=this.processedChunkCount+1;try{const i=this.pendingChunks.shift(),a=(i.length*.75/1024).toFixed(2);Y(`[decodeAhead] 开始解码第 ${n} 个chunk`,{size:`${a} KB`});const o=window.atob(i),s=new Uint8Array(o.length);for(let l=0;l<o.length;l++)s[l]=o.charCodeAt(l);const u=s.buffer;await this.addAudioChunkInternal(u),Y(`[decodeAhead] 第 ${n} 个chunk 解码完成`,{audioQueueLength:this.audioQueue.length,totalDuration:this.totalDuration.toFixed(2),durationFromUrlSet:this.durationFromUrlSet}),this.durationFromUrlSet||(this.estimatedDuration>0&&(this.estimatedDuration=Math.max(0,this.estimatedDuration-1)),this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration()))}catch(i){console.error(`[decodeAhead] 解码第 ${n} 个chunk 失败:`,i),this.onErrorCallback&&this.onErrorCallback(i)}finally{this.decodingInProgress=!1}this.pendingChunks.length>0&&this.isPlaying?(Y("[decodeAhead] 继续解码下一个chunk"),setTimeout(()=>this.decodeAhead(),0)):Y("[decodeAhead] 解码结束",{pendingChunks:this.pendingChunks.length,isPlaying:this.isPlaying})}async processAudioDataArray(e){if(!e||!Array.isArray(e))return;const r=e.slice(this.processedChunkCount);Y("[processAudioDataArray] 处理音频数据数组",{totalLength:e.length,processedChunkCount:this.processedChunkCount,newChunksCount:r.length});for(const n of r)await this.addBase64Chunk(n),this.processedChunkCount++;Y("[processAudioDataArray] 处理完成",{processedChunkCount:this.processedChunkCount})}decodeAudioDataCompat(e){const r=(e.byteLength/1024).toFixed(2);return Y("[decodeAudioDataCompat] 开始解码",{size:`${r} KB`}),new Promise((n,i)=>{const a=this.audioContext.decodeAudioData(e,o=>{Y("[decodeAudioDataCompat] 解码成功",{duration:o.duration.toFixed(2),sampleRate:o.sampleRate,channels:o.numberOfChannels}),n(o)},o=>{console.error("[decodeAudioDataCompat] 解码失败",{error:(o==null?void 0:o.message)||o,bufferSize:`${r} KB`}),i(o||new Error("解码音频数据失败"))});a&&typeof a.then=="function"&&a.then(n).catch(o=>{console.error("[decodeAudioDataCompat] Promise 解码失败",{error:(o==null?void 0:o.message)||o,bufferSize:`${r} KB`}),i(o)})})}async addAudioChunk(e){return this.addAudioChunkInternal(e)}async addAudioChunkInternal(e){if(this.setPlayMode("stream"),!this.audioContext)throw new Error("AudioContext not initialized");try{let r;e instanceof Blob?r=await e.arrayBuffer():r=e;const n=(r.byteLength/1024).toFixed(2);Y("[addAudioChunkInternal] 开始解码 ArrayBuffer",{size:`${n} KB`});const i=r.slice(0),a=await this.decodeAudioDataCompat(i),o=this.audioQueue.length,s=this.totalDuration;this.audioQueue.push(a),this.durationFromUrlSet||(this.totalDuration+=a.duration),Y("[addAudioChunkInternal] 解码成功",{bufferDuration:a.duration.toFixed(2),sampleRate:a.sampleRate,numberOfChannels:a.numberOfChannels,length:a.length,audioQueueLength:`${o} -> ${this.audioQueue.length}`,totalDuration:`${s.toFixed(2)} -> ${this.totalDuration.toFixed(2)}`,durationFromUrlSet:this.durationFromUrlSet}),this.isPlaying&&!this.isSchedulingFromPosition?(Y("[addAudioChunkInternal] 正在播放,调用 scheduleNewChunks"),this.scheduleNewChunks()):this.isSchedulingFromPosition?Y("[addAudioChunkInternal] 正在执行 scheduleFromPosition,跳过 scheduleNewChunks"):Y("[addAudioChunkInternal] 未在播放状态,不调度"),this.onDurationChangeCallback&&!this.durationFromUrlSet&&this.onDurationChangeCallback(this.getDisplayDuration())}catch(r){console.error("[addAudioChunkInternal] 解码音频数据失败:",r),this.onErrorCallback&&this.onErrorCallback(r)}}async addPCMChunk(e,r=24e3,n=1,i=16){if(this.setPlayMode("stream"),!this.audioContext)throw new Error("AudioContext not initialized");try{const a=i/8,o=e.byteLength/(a*n),s=this.audioContext.createBuffer(n,o,r),u=new DataView(e);for(let l=0;l<n;l++){const c=s.getChannelData(l);for(let f=0;f<o;f++){let h;if(i===16)h=u.getInt16((f*n+l)*2,!0)/32768;else if(i===8)h=(u.getUint8(f*n+l)-128)/128;else if(i===32)h=u.getFloat32((f*n+l)*4,!0);else throw new Error(`Unsupported bits per sample: ${i}`);c[f]=h}}this.audioQueue.push(s),this.totalDuration+=s.duration,this.isPlaying&&this.audioContext&&this.scheduleNewChunks(),this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}catch(a){this.onErrorCallback&&this.onErrorCallback(a)}}scheduleNewChunks(){if(!this.audioContext||!this.isPlaying){Y("[scheduleNewChunks] 跳过",{hasAudioContext:!!this.audioContext,isPlaying:this.isPlaying});return}const e=this.audioContext.currentTime,r=this.scheduledCount;this.scheduledCount>this.audioQueue.length&&(Y("[scheduleNewChunks] 警告:scheduledCount 超出 audioQueue 长度!",{scheduledCount:this.scheduledCount,audioQueueLength:this.audioQueue.length,playedBufferCount:this.playedBufferCount}),this.scheduledCount=this.audioQueue.length),Y("[scheduleNewChunks] 开始调度",{audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,toSchedule:this.audioQueue.length-this.scheduledCount,currentTime:e.toFixed(3),nextScheduleTime:this.nextScheduleTime.toFixed(3),pendingChunks:this.pendingChunks.length});for(let n=this.scheduledCount;n<this.audioQueue.length;n++){const i=this.audioQueue[n],a=this.audioContext.createBufferSource();a.buffer=i,a.connect(this.getAudioDestination());const o=Math.max(e,this.nextScheduleTime);Y(`[scheduleNewChunks] 调度第 ${n+1} 个buffer`,{bufferDuration:i.duration.toFixed(2),scheduleTime:o.toFixed(3),currentTime:e.toFixed(3)}),a.start(o,0,i.duration),this.nextScheduleTime=o+i.duration,this.scheduledCount++,this.scheduledSources.push(a),a.onended=()=>{const s=this.scheduledSources.indexOf(a);if(s===-1){Y(`[sourceNode.onended] 第 ${n+1} 个buffer 被手动停止,跳过后续逻辑`);return}if(this.scheduledSources.splice(s,1),this.playedBufferCount++,this.cleanupOldBuffers(),Y(`[sourceNode.onended] 第 ${n+1} 个buffer 播放结束`,{scheduledSourcesLength:this.scheduledSources.length,isPlaying:this.isPlaying,pendingChunks:this.pendingChunks.length,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,generationComplete:this.generationComplete,playedBufferCount:this.playedBufferCount}),this.decodeAhead(),this.scheduledSources.length===0&&this.isPlaying){let u=0;this.audioQueue.forEach(l=>{u+=l.duration}),Y("[sourceNode.onended] 所有已调度片段播放完毕,尝试调度新片段",{audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledCount:this.audioQueue.length-this.scheduledCount,remainingQueueDuration:u.toFixed(2),pendingChunks:this.pendingChunks.length}),this.scheduleNewChunks(),this.scheduledSources.length===0&&(Y("[sourceNode.onended] 调度后仍无片段",{pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledBuffers:this.audioQueue.length-this.scheduledCount}),this.pendingChunks.length>0?(Y("[sourceNode.onended] 还有待解码chunk,启动 autoPlayCheck"),this.startAutoPlayCheck()):this.audioQueue.length>this.scheduledCount?(Y("[sourceNode.onended] 还有未调度的buffer,重新调度"),this.scheduleNewChunks()):this.generationComplete?(Y("[sourceNode.onended] 生成完成,结束播放"),this.handlePlaybackEnd()):(Y("[sourceNode.onended] 等待新数据,启动 autoPlayCheck"),this.startAutoPlayCheck()))}}}Y("[scheduleNewChunks] 调度完成",{scheduledCount:`${r} -> ${this.scheduledCount}`,scheduledSourcesLength:this.scheduledSources.length,nextScheduleTime:this.nextScheduleTime.toFixed(3)})}async play(){if(this.playMode==="url"&&this.audioElement){try{await this.audioElement.play()}catch(e){this.onErrorCallback&&this.onErrorCallback(e)}return}if(!this.audioContext){this.onErrorCallback&&this.onErrorCallback(new Error("AudioContext not initialized"));return}if(!this.isPlaying){try{await this.ensureAudioContextRunning(),await this.startIOSAudioElement()}catch(e){this.onErrorCallback&&this.onErrorCallback(e);return}if(this.audioQueue.length===0&&this.pendingChunks.length>0&&await this.decodeFirstChunk(),this.audioQueue.length===0){Y("[play] 没有可播放的音频数据");return}this.isPlaying=!0,this.startedAt=this.audioContext.currentTime-this.pausedAt,this.pausedAt===0&&(this.scheduledCount=0,this.nextScheduleTime=this.audioContext.currentTime),this.pausedAt===0?this.scheduleNewChunks():this.scheduleFromPosition(this.pausedAt),this.decodeAhead(),this.onPlayCallback&&this.onPlayCallback(),this.startTimeUpdate(),Y("[play] 播放开始",{audioContextState:this.audioContext.state,audioQueueLength:this.audioQueue.length,pausedAt:this.pausedAt,isIOS:/iPhone|iPad|iPod/i.test(navigator.userAgent)})}}async decodeFirstChunk(){if(this.pendingChunks.length===0)return;const e=this.pendingChunks.shift();try{const r=window.atob(e),n=new Uint8Array(r.length);for(let a=0;a<r.length;a++)n[a]=r.charCodeAt(a);const i=n.buffer;await this.addAudioChunkInternal(i),this.estimatedDuration>0&&(this.estimatedDuration=Math.max(0,this.estimatedDuration-1))}catch(r){console.error("解码首个 chunk 失败:",r)}}scheduleFromPosition(e){if(!this.audioContext)return;this.isSchedulingFromPosition=!0;let r=0;const n=this.audioContext.currentTime;let i=n,a=0;for(let o=0;o<this.audioQueue.length;o++){const s=this.audioQueue[o],u=r,l=r+s.duration;if(l>e){const c=this.audioContext.createBufferSource();c.buffer=s,c.connect(this.getAudioDestination());let f=0,h=s.duration;e>u&&(f=e-u,h=s.duration-f,i=n),c.start(i,f,h),i+=h,this.scheduledSources.push(c),a++,c.onended=()=>{const d=this.scheduledSources.indexOf(c);if(d===-1){Y("[scheduleFromPosition.onended] sourceNode 被手动停止,跳过后续逻辑");return}this.scheduledSources.splice(d,1),this.playedBufferCount++,this.cleanupOldBuffers(),this.decodeAhead(),this.scheduledSources.length===0&&this.isPlaying&&(this.scheduleNewChunks(),this.scheduledSources.length===0&&(Y("[scheduleFromPosition.onended] 调度后仍无片段",{pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledBuffers:this.audioQueue.length-this.scheduledCount}),this.pendingChunks.length>0?(Y("[scheduleFromPosition.onended] 还有待解码chunk,启动 autoPlayCheck"),this.startAutoPlayCheck()):this.audioQueue.length>this.scheduledCount?(Y("[scheduleFromPosition.onended] 还有未调度的buffer,重新调度"),this.scheduleNewChunks()):this.generationComplete?(Y("[scheduleFromPosition.onended] 生成完成,结束播放"),this.handlePlaybackEnd()):(Y("[scheduleFromPosition.onended] 等待新数据,启动 autoPlayCheck"),this.startAutoPlayCheck())))}}r=l}this.scheduledCount=this.audioQueue.length,this.nextScheduleTime=i,this.isSchedulingFromPosition=!1,Y("[scheduleFromPosition] 调度完成",{startPosition:e.toFixed(2),scheduledInThisCall:a,scheduledCount:this.scheduledCount,nextScheduleTime:this.nextScheduleTime.toFixed(3),scheduledSourcesLength:this.scheduledSources.length})}pause(){if(this.playMode==="url"&&this.audioElement){this.audioElement.pause();return}if(!(!this.isPlaying||!this.audioContext)){this.pausedAt=this.audioContext.currentTime-this.startedAt;for(const e of this.scheduledSources)try{e.stop()}catch{}if(this.scheduledSources=[],this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[pause] iOS audio 元素已暂停")}catch{}this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback(),this.stopTimeUpdate(),this.stopAutoPlayCheck()}}stop(){if(this.playMode==="url"&&this.audioElement){this.audioElement.pause(),this.audioElement.currentTime=0,this.isPlaying=!1;return}this.pause(),this.pausedAt=0,this.startedAt=0,this.scheduledCount=0,this.nextScheduleTime=0,this.stopTimeUpdate(),this.stopAutoPlayCheck()}clear(){this.stop(),this.audioQueue=[],this.pendingChunks=[],this.totalDuration=0,this.estimatedDuration=0,this.scheduledCount=0,this.nextScheduleTime=0,this.processedChunkCount=0,this.generationComplete=!1,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.durationFromUrlSet=!1}handlePlaybackEnd(){let e=0;if(this.audioQueue.forEach(r=>{e+=r.duration}),Y("[handlePlaybackEnd] 播放结束",{totalDuration:this.totalDuration.toFixed(2),actualDecodedDuration:e.toFixed(2),audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,processedChunkCount:this.processedChunkCount,scheduledCount:this.scheduledCount,playedBufferCount:this.playedBufferCount,generationComplete:this.generationComplete,durationFromUrlSet:this.durationFromUrlSet}),this.isPlaying=!1,this.pausedAt=0,this.startedAt=0,this.stopTimeUpdate(),this.stopAutoPlayCheck(),this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[handlePlaybackEnd] iOS audio 元素已暂停")}catch{}this.onEndCallback&&this.onEndCallback()}async markGenerationComplete(e){let r=0;this.audioQueue.forEach(n=>{r+=n.duration}),Y("[markGenerationComplete] 标记生成完成",{audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,scheduledSourcesLength:this.scheduledSources.length,totalDuration:this.totalDuration.toFixed(2),currentDecodedDuration:r.toFixed(2),estimatedDuration:this.estimatedDuration.toFixed(2),isPlaying:this.isPlaying,hasAudioUrl:!!e,processedChunkCount:this.processedChunkCount}),this.generationComplete=!0,e&&(this.fullAudioUrl=e),this.isPlaying&&this.pendingChunks.length>0&&(Y("[markGenerationComplete] 正在播放,触发按需解码"),this.decodeAhead()),this.autoPlayCheckInterval&&this.scheduledSources.length===0&&this.pendingChunks.length===0&&(Y("[markGenerationComplete] 正在等待且无剩余片段,立即结束"),this.handlePlaybackEnd()),e?this.getDurationFromUrl(e):this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration())}getDurationFromUrl(e){Y("[getDurationFromUrl] 开始从 URL 获取时长并预加载",{audioUrl:e}),this.preloadedAudioElement=new Audio,this.preloadedAudioElement.preload="auto";const r=this.preloadedAudioElement;let n=!1;const i=()=>{if(n)return;n=!0;const s=r.duration;Y("[getDurationFromUrl] 获取时长成功",{duration:s.toFixed(2)}),this.totalDuration=s,this.estimatedDuration=0,this.durationFromUrlSet=!0,this.onDurationChangeCallback&&this.onDurationChangeCallback(Math.floor(s))},a=()=>{Y("[getDurationFromUrl] URL 预加载完成,可以 seek"),this.urlReady=!0,this.onUrlReadyCallback&&this.onUrlReadyCallback()},o=s=>{Y("[getDurationFromUrl] 获取时长/预加载失败",s),this.urlReady=!0,this.preloadedAudioElement=null,this.onDurationChangeCallback&&!n&&this.onDurationChangeCallback(this.getDisplayDuration()),this.onUrlReadyCallback&&this.onUrlReadyCallback()};r.addEventListener("loadedmetadata",i),r.addEventListener("canplay",a),r.addEventListener("canplaythrough",a),r.addEventListener("error",o),r.src=e,r.load()}async decodeAllPendingChunks(){for(Y("[decodeAllPendingChunks] 开始解码所有待解码 chunk",{pendingChunks:this.pendingChunks.length});this.pendingChunks.length>0;){const e=this.pendingChunks.shift(),r=this.processedChunkCount+1;try{const n=(e.length*.75/1024).toFixed(2);Y(`[decodeAllPendingChunks] 解码第 ${r} 个chunk`,{size:`${n} KB`});const i=window.atob(e),a=new Uint8Array(i.length);for(let s=0;s<i.length;s++)a[s]=i.charCodeAt(s);const o=a.buffer;await this.addAudioChunkInternal(o),this.processedChunkCount++,Y(`[decodeAllPendingChunks] 第 ${r} 个chunk 解码完成`,{totalDuration:this.totalDuration.toFixed(2)})}catch(n){console.error(`[decodeAllPendingChunks] 解码第 ${r} 个chunk 失败:`,n)}}Y("[decodeAllPendingChunks] 所有 chunk 解码完成",{audioQueueLength:this.audioQueue.length,totalDuration:this.totalDuration.toFixed(2)})}cleanupOldBuffers(){const e=this.audioQueue.length;if(Y("[cleanupOldBuffers] 检查",{currentQueueLength:e,maxDecodedBuffers:this.maxDecodedBuffers,playedBufferCount:this.playedBufferCount,scheduledCount:this.scheduledCount,pendingChunks:this.pendingChunks.length,totalDuration:this.totalDuration.toFixed(2)}),e>this.maxDecodedBuffers&&this.playedBufferCount>0){const r=Math.min(e-this.maxDecodedBuffers,this.playedBufferCount);if(r>0){let n=0;for(let o=0;o<r;o++)n+=this.audioQueue[o].duration;const i=this.audioQueue.splice(0,r);this.scheduledCount=Math.max(0,this.scheduledCount-r),this.playedBufferCount=Math.max(0,this.playedBufferCount-r);let a=0;i.forEach(o=>{a+=o.length*o.numberOfChannels*4/1024}),Y("[cleanupOldBuffers] 内存回收",{cleanedCount:r,cleanedDuration:n.toFixed(2),freedMemoryKB:a.toFixed(2),remainingQueueLength:this.audioQueue.length,newScheduledCount:this.scheduledCount,newPlayedBufferCount:this.playedBufferCount,isMobile:this.isMobileDevice()})}}}startAutoPlayCheck(){if(this.autoPlayCheckInterval){Y("[startAutoPlayCheck] 已有检查定时器,跳过");return}Y("[startAutoPlayCheck] 启动等待新数据检查"),this.autoPlayCheckWaitTime=0;const e=180*1e3;this.autoPlayCheckInterval=window.setInterval(()=>{this.autoPlayCheckWaitTime+=200,Y("[autoPlayCheck] 检查",{waitTime:this.autoPlayCheckWaitTime,scheduledCount:this.scheduledCount,audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,scheduledSourcesLength:this.scheduledSources.length}),this.scheduledCount<this.audioQueue.length?(Y("[autoPlayCheck] 发现新片段,调度"),this.scheduleNewChunks(),this.scheduledSources.length>0&&(Y("[autoPlayCheck] 调度成功,停止检查"),this.stopAutoPlayCheck())):this.scheduledSources.length>0?(Y("[autoPlayCheck] 还有片段在播放中,停止检查"),this.stopAutoPlayCheck()):this.pendingChunks.length>0?(Y("[autoPlayCheck] 还有待解码chunk,触发解码"),this.decodeAhead()):this.generationComplete?(Y("[autoPlayCheck] 生成完成且无播放片段和待解码chunk,结束播放"),this.handlePlaybackEnd()):this.autoPlayCheckWaitTime>=e&&(Y("[autoPlayCheck] 等待超时,结束播放"),this.handlePlaybackEnd())},200)}stopAutoPlayCheck(){this.autoPlayCheckInterval&&(clearInterval(this.autoPlayCheckInterval),this.autoPlayCheckInterval=null)}startTimeUpdate(){this.timeUpdateInterval||(this.timeUpdateInterval=window.setInterval(()=>{if(this.isPlaying&&this.audioContext){const e=this.audioContext.currentTime-this.startedAt;this.onTimeUpdateCallback&&this.onTimeUpdateCallback(e,this.totalDuration)}},100))}stopTimeUpdate(){this.timeUpdateInterval&&(clearInterval(this.timeUpdateInterval),this.timeUpdateInterval=null)}seek(e){if(Y("[seek] 开始",{time:e,playMode:this.playMode,generationComplete:this.generationComplete,urlReady:this.urlReady,hasPreloadedAudio:!!this.preloadedAudioElement,isPlaying:this.isPlaying}),this.playMode==="url"&&this.audioElement){this.audioElement.currentTime=Math.max(0,Math.min(e,this.audioElement.duration||0));return}if(this.playMode==="stream"){if(this.generationComplete&&this.urlReady&&this.preloadedAudioElement){Y("[seek] 切换到 URL 模式(使用预加载的 audio 元素)");const n=this.isPlaying;this.stopTimeUpdate();for(const i of this.scheduledSources)try{i.stop()}catch{}this.scheduledSources=[],this.isPlaying=!1,this.audioElement=this.preloadedAudioElement,this.preloadedAudioElement=null,this.playMode="url",this.bindAudioElementEvents(),this.audioElement.currentTime=Math.max(0,Math.min(e,this.audioElement.duration||0)),n&&this.audioElement.play().catch(i=>{Y("[seek] 播放失败:",i)});return}const r=this.isPlaying;r&&this.pause(),this.pausedAt=Math.max(0,Math.min(e,this.totalDuration)),r&&this.play()}}bindAudioElementEvents(){this.audioElement&&(this.audioElement.addEventListener("play",()=>{this.isPlaying=!0,this.onPlayCallback&&this.onPlayCallback()}),this.audioElement.addEventListener("pause",()=>{this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback()}),this.audioElement.addEventListener("ended",()=>{this.isPlaying=!1,this.onEndCallback&&this.onEndCallback()}),this.audioElement.addEventListener("timeupdate",()=>{this.onTimeUpdateCallback&&this.onTimeUpdateCallback(this.audioElement.currentTime,this.audioElement.duration||0)}),this.audioElement.addEventListener("error",e=>{this.onErrorCallback&&this.onErrorCallback(new Error("音频加载失败: "+(e.message||"未知错误")))}))}getPlayState(){return this.isPlaying}getDuration(){return this.playMode==="url"&&this.audioElement?this.audioElement.duration||0:this.getDisplayDuration()}getCurrentTime(){return this.playMode==="url"&&this.audioElement?this.audioElement.currentTime||0:this.isPlaying&&this.audioContext?this.audioContext.currentTime-this.startedAt:this.pausedAt}getAudioQueue(){return[...this.audioQueue]}async getAudioData(){const e=[];for(const r of this.audioQueue){const n=r.numberOfChannels,i=r.length,a=new ArrayBuffer(i*n*2),o=new DataView(a);for(let s=0;s<n;s++){const u=r.getChannelData(s);for(let l=0;l<i;l++){const c=Math.max(-1,Math.min(1,u[l])),f=c<0?c*32768:c*32767;o.setInt16((l*n+s)*2,f,!0)}}e.push(a)}return e}onPlay(e){this.onPlayCallback=e}onPause(e){this.onPauseCallback=e}onEnd(e){this.onEndCallback=e}onError(e){this.onErrorCallback=e}onTimeUpdate(e){this.onTimeUpdateCallback=e}onDurationChange(e){this.onDurationChangeCallback=e}onUrlReady(e){this.onUrlReadyCallback=e}isUrlReady(){return this.urlReady}destroy(){this.stop(),this.stopTimeUpdate(),this.stopAutoPlayCheck(),this.handleVisibilityChange&&(document.removeEventListener("visibilitychange",this.handleVisibilityChange),this.handleVisibilityChange=null),this.audioContext&&(this.audioContext.onstatechange=null,this.audioContext.close(),this.audioContext=null),this.audioQueue=[],this.iosUnlockAudio&&(this.iosUnlockAudio.pause(),this.iosUnlockAudio.srcObject=null,this.iosUnlockAudio=null),this.mediaStreamDestination=null,this.audioElement&&(this.audioElement.pause(),this.audioElement.src="",this.audioElement=null),this.playMode=null}},uf="https://cdn.xiaowei.qq.com/adp/assets/static/iconfont-XzKaDZdEa7j2GPL-1201.js",Vu={};function hO(t){const e={};return t.props.size&&(e.width=`${t.props.size}px`,e.height=`${t.props.size}px`),t.props.valign&&(e.verticalAlign=`${t.props.valign}px`),t.props.rotate&&(e.transform=`rotate(${t.props.rotate}deg)`),e}function dO(t){const e=t.props;return{"v-icon":!0,"is-horizontal":e.flip==="horizontal","is-vertical":e.flip==="vertical","v-icon--stroke":e.useStroke,"v-icon--fill":!e.useStroke}}function Yb(t){let e=document.createElement("script");e.type="text/javascript",e.src=t,document.getElementsByTagName("head")[0].appendChild(e)}const pO=t=>{let e=!1,r=Object.keys(Vu);r.forEach(n=>{Vu[n]===t&&(e=!0)}),e||(Vu[r.length]=t,Yb(t))},vO={name:"VIcon",functional:!0,props:{name:{type:String,required:!0},remote:{type:Boolean,default:!1},remoteSrc:{type:String,default:""},remotePrefix:{type:String,default:"v-"},loadDefaultRemoteIcons:{type:Boolean,default:!0},label:String,rotate:[Number,String],size:[Number,String],valign:[Number,String],flip:String,useStroke:Boolean,clazz:String,scoped:String},render(t,e){const r=hO(e);if(e.data.style)for(let n in e.data.style)r[n]=e.data.style[n];return!Vu.defaultRemoteSrc&&uf&&e.props.loadDefaultRemoteIcons&&(Vu.defaultRemoteSrc=uf,Yb(uf)),e.props.remoteSrc&&pO(e.props.remoteSrc),t("svg",{class:dO(e),style:r,attrs:{role:e.props.label?"img":"presentation","aria-label":e.props.label},on:e.data.nativeOn},[t("use",{attrs:{"xlink:href":"#"+e.props.remotePrefix+e.props.name,class:e.props.clazz},style:{pointerEvents:"none"}})])}},gO=vO,mO=null,yO=null;var _O=pr(gO,mO,yO,!1,null,null,null,null);const n2=_O.exports;const bO={name:"StreamAudioPlayer",components:{VIcon:n2},props:{audioData:{type:Object,required:!0}},data(){return{player:null,internalStatus:"pending",currentTime:0,duration:0,isDragging:!1,isHoveringProgress:!1,lastProcessedChunkCount:0,playModeDecided:!1,lastKnownIsComplete:!1,urlReady:!1,dragCleanup:null}},computed:{isGenerating(){return!this.audioData.isComplete},hasPlayableContent(){const t=!!this.audioData.audio_url,e=this.audioData.audio_data&&this.audioData.audio_data.length>0;return t||e},isDisabled(){return!this.hasPlayableContent},canSeek(){return!this.isGenerating&&this.urlReady},displayFileName(){return this.audioData.title?this.audioData.title:this.isGenerating?"音频生成中...":"音频文件"},statusText(){if(this.isDisabled)return"暂无音频";if(this.isGenerating&&this.duration===0)return"生成中...";const t=this.formatTime(this.currentTime),e=this.isGenerating?"生成中":this.formatTime(this.duration);return`${t} / ${e}`},statusClass(){return{generating:this.isGenerating,completed:this.internalStatus==="completed",playing:this.internalStatus==="playing",paused:this.internalStatus==="paused",disabled:this.isDisabled}},cardClass(){return{generating:this.isGenerating,completed:this.internalStatus==="completed",playing:this.internalStatus==="playing",paused:this.internalStatus==="paused",disabled:this.isDisabled,hoverable:!this.isDisabled&&!this.isGenerating}},progressPercentage(){return this.duration===0?0:this.currentTime/this.duration*100},showHandle(){return(this.isHoveringProgress||this.isDragging)&&!this.isDisabled&&!this.isGenerating},canPlay(){return!(this.isDisabled||this.isGenerating&&this.duration===0)},canDownload(){return!!this.audioData.audio_url},playButtonTitle(){return this.isDisabled?"暂无音频":this.isGenerating&&this.duration===0?"等待音频生成":this.internalStatus==="playing"?"暂停":"播放"},downloadButtonTitle(){return this.canDownload?"下载":this.isGenerating?"生成中,暂不可下载":"暂无可下载的音频"}},watch:{audioData:{handler(t){var r;if(!t||!this.player)return;console.log("[StreamAudioPlayer] audioData watch 触发:",{hasAudioUrl:!!t.audio_url,audioDataLength:(r=t.audio_data)==null?void 0:r.length,isComplete:t.isComplete,playModeDecided:this.playModeDecided,lastProcessedChunkCount:this.lastProcessedChunkCount,lastKnownIsComplete:this.lastKnownIsComplete,internalStatus:this.internalStatus}),!this.playModeDecided&&t.audio_url&&(console.log("[StreamAudioPlayer] 切换到 URL 模式"),this.handleAudioUrlChange(t.audio_url)),t.audio_data&&Array.isArray(t.audio_data)&&t.audio_data.length>this.lastProcessedChunkCount&&(!this.playModeDecided||this.player.playMode==="stream")&&(console.log("[StreamAudioPlayer] 处理新的音频片段"),this.handleAudioDataChange(t.audio_data)),!!t.isComplete&&!this.lastKnownIsComplete&&(this.lastKnownIsComplete=!0,this.handleGenerationComplete())},deep:!0,immediate:!1}},mounted(){this.initPlayer(),this.audioData&&(this.audioData.audio_data&&this.audioData.audio_data.length>0?this.handleAudioDataChange(this.audioData.audio_data):this.audioData.audio_url&&this.handleAudioUrlChange(this.audioData.audio_url),this.audioData.isComplete&&(this.lastKnownIsComplete=!0,this.handleGenerationComplete()))},beforeDestroy(){this.destroyPlayer()},beforeUnmount(){this.destroyPlayer()},methods:{initPlayer(){this.player=new Zb,this.player.onPlay(()=>{this.internalStatus="playing",this.$emit("play",this.audioData)}),this.player.onPause(()=>{this.internalStatus="paused",this.$emit("pause",this.audioData)}),this.player.onEnd(()=>{this.player.playMode==="url"?this.internalStatus="completed":this.isGenerating?this.internalStatus="paused":this.internalStatus="completed",this.currentTime=0,this.$emit("end",this.audioData)}),this.player.onTimeUpdate((t,e)=>{this.isDragging||(this.currentTime=t),this.duration=e,t>=e&&e>0&&!this.isGenerating&&(this.player.pause(),this.internalStatus="completed",this.currentTime=e)}),this.player.onDurationChange(t=>{this.duration=t}),this.player.onError(t=>{console.error("音频播放错误:",t),this.$emit("error",t)}),this.player.onUrlReady(()=>{console.log("[StreamAudioPlayer.vue] URL 预加载完成回调"),this.urlReady=!0}),this.checkInitialState()},checkInitialState(){this.isDisabled?this.internalStatus="disabled":this.isGenerating?this.internalStatus="generating":this.internalStatus="completed"},handleAudioUrlChange(t){!this.player||!t||this.playModeDecided&&this.player.playMode!=="url"||(this.player.setAudioUrl(t),this.playModeDecided=!0,this.internalStatus="completed")},handleAudioDataChange(t){var r,n,i,a,o;if(!this.player||!t)return;this.playModeDecided=!0;const e=t.length-this.lastProcessedChunkCount;if(console.log("[StreamAudioPlayer.vue] handleAudioDataChange",{totalChunks:t.length,lastProcessedChunkCount:this.lastProcessedChunkCount,newChunksCount:e,playerPendingChunks:(r=this.player.pendingChunks)==null?void 0:r.length,playerAudioQueueLength:(n=this.player.audioQueue)==null?void 0:n.length,playerScheduledCount:this.player.scheduledCount,playerIsPlaying:this.player.isPlaying,internalStatus:this.internalStatus}),e<=0){console.log("[StreamAudioPlayer.vue] 没有新片段,跳过");return}(this.internalStatus==="disabled"||this.internalStatus==="pending")&&(this.internalStatus="generating");for(let s=this.lastProcessedChunkCount;s<t.length;s++){const u=t[s];console.log(`[StreamAudioPlayer.vue] 添加第 ${s+1} 个chunk,大小: ${(u.length*.75/1024).toFixed(2)} KB`),this.player.addBase64Chunk(u),this.lastProcessedChunkCount++,this.$emit("chunk-added",{duration:this.duration,queueLength:((i=this.player.pendingChunks)==null?void 0:i.length)||0})}console.log("[StreamAudioPlayer.vue] handleAudioDataChange 完成",{lastProcessedChunkCount:this.lastProcessedChunkCount,playerPendingChunks:(a=this.player.pendingChunks)==null?void 0:a.length,playerAudioQueueLength:(o=this.player.audioQueue)==null?void 0:o.length})},handleGenerationComplete(){var t,e,r,n,i,a,o;console.log("[StreamAudioPlayer.vue] handleGenerationComplete",{playerAudioQueueLength:(e=(t=this.player)==null?void 0:t.audioQueue)==null?void 0:e.length,playerPendingChunks:(n=(r=this.player)==null?void 0:r.pendingChunks)==null?void 0:n.length,playerTotalDuration:(a=(i=this.player)==null?void 0:i.totalDuration)==null?void 0:a.toFixed(2),playerScheduledCount:(o=this.player)==null?void 0:o.scheduledCount,internalStatus:this.internalStatus,hasAudioUrl:!!this.audioData.audio_url}),this.player&&this.player.markGenerationComplete(this.audioData.audio_url),this.player&&(this.duration=this.player.getDuration(),console.log("[StreamAudioPlayer.vue] 最终时长:",this.duration.toFixed(2))),this.internalStatus!=="playing"&&(this.internalStatus="completed"),this.audioData.audio_url||(this.urlReady=!0)},async addAudioChunk(t){var e;if(!this.player){console.warn("播放器未初始化");return}try{typeof t=="string"?await this.player.addBase64Chunk(t):await this.player.addAudioChunk(t),this.$emit("chunk-added",{duration:this.duration,queueLength:((e=this.player.audioQueue)==null?void 0:e.length)||0})}catch(r){console.error("添加音频片段失败:",r),this.$emit("error",r)}},markGenerationComplete(){this.handleGenerationComplete()},async handlePlayPause(){if(!(!this.player||!this.canPlay))try{this.internalStatus==="playing"?this.player.pause():(this.currentTime>=this.duration&&this.duration>0&&(this.currentTime=0,this.player.pausedAt=0),await this.player.play())}catch(t){console.error("播放控制错误:",t)}},handleDownload(){if(!this.canDownload)return;const t=this.audioData.audio_url,e=this.audioData.title||"音频文件",r=document.createElement("a");r.href=t,r.download=e,r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),this.$emit("audio-download",{url:t,fileName:e})},formatTime(t){if(!t||isNaN(t))return"00:00";const e=Math.floor(t/60),r=Math.floor(t%60);return`${e.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`},handleMouseEnter(){},handleMouseLeave(){},handleProgressMouseEnter(){!this.isDisabled&&!this.isGenerating&&(this.isHoveringProgress=!0)},handleProgressMouseLeave(){this.isDragging||(this.isHoveringProgress=!1)},handleProgressMouseDown(t){this.isDisabled||!this.canSeek||this.seekToPosition(t)},handleDragStart(t){if(this.isDisabled||!this.canSeek)return;this.isDragging=!0,t.preventDefault();const e=n=>{this.seekToPosition(n)},r=()=>{this.isDragging=!1,this.isHoveringProgress||(this.isHoveringProgress=!1),document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r),this.dragCleanup=null};this.dragCleanup=()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r)},document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)},seekToPosition(t){if(!this.player||!this.$refs.progressTrack)return;const r=this.$refs.progressTrack.getBoundingClientRect(),n=t.clientX-r.left,a=Math.max(0,Math.min(1,n/r.width))*this.duration;this.currentTime=a,this.player.seek(a)},destroyPlayer(){this.dragCleanup&&(this.dragCleanup(),this.dragCleanup=null),this.player&&(this.player.destroy(),this.player=null),this.internalStatus="pending",this.currentTime=0,this.duration=0,this.lastProcessedChunkCount=0,this.playModeDecided=!1,this.urlReady=!1,this.lastKnownIsComplete=!1}}};var xO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"stream-audio-player-card",class:e.cardClass,on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave}},[r("div",{staticClass:"audio-content"},[r("div",{staticClass:"audio-icon"},[r("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"30",height:"34",viewBox:"0 0 30 34",fill:"none"}},[r("path",{staticStyle:{fill:"color(display-p3 0.9569 0.9333 0.9882)","fill-opacity":"1"},attrs:{d:"M1.55782e-06 5.33333C1.66168e-06 3.46649 1.71361e-06 2.53307 0.363313 1.82003C0.682891 1.19282 1.19283 0.682889 1.82003 0.363312C2.53307 1.40931e-07 3.46649 1.92863e-07 5.33334 2.96727e-07L21.1242 1.17527e-06C21.9395 1.22063e-06 22.3472 1.24331e-06 22.7308 0.0921015C23.0709 0.173757 23.396 0.308438 23.6943 0.491201C24.0307 0.69734 24.3189 0.985593 24.8954 1.5621L28.4379 5.10457C29.0144 5.68108 29.3027 5.96933 29.5088 6.30572C29.6916 6.60396 29.8262 6.92911 29.9079 7.26923C30 7.65285 30 8.0605 30 8.87581L30 28C30 29.8668 30 30.8003 29.6367 31.5133C29.3171 32.1405 28.8072 32.6504 28.18 32.97C27.4669 33.3333 26.5335 33.3333 24.6667 33.3333L5.33333 33.3333C3.46649 33.3333 2.53307 33.3333 1.82003 32.97C1.19282 32.6504 0.68289 32.1405 0.363312 31.5133C1.40931e-07 30.8003 1.92863e-07 29.8668 2.96727e-07 28L1.55782e-06 5.33333Z",fill:"#F4EEFC"}}),r("path",{staticStyle:{fill:"color(display-p3 0.8863 0.8353 0.9725)","fill-opacity":"1"},attrs:{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M29.1667 28L29.1667 8.87581C29.1667 8.02084 29.1613 7.72918 29.0976 7.46377C29.0364 7.20868 28.9353 6.96481 28.7983 6.74113C28.6557 6.5084 28.4532 6.29838 27.8487 5.69383L24.3062 2.15135C23.7016 1.5468 23.4916 1.34435 23.2589 1.20173C23.0352 1.06466 22.7913 0.963651 22.5362 0.90241C22.2708 0.83869 21.9792 0.833334 21.1242 0.833334L5.33334 0.833333C4.38616 0.833333 3.7259 0.833981 3.21187 0.87598C2.70756 0.917183 2.41782 0.993995 2.19836 1.10582C1.72795 1.3455 1.3455 1.72795 1.10582 2.19836C0.993997 2.41782 0.917185 2.70756 0.875981 3.21187C0.833983 3.7259 0.833335 4.38616 0.833335 5.33333L0.833334 28C0.833334 28.9472 0.833982 29.6074 0.87598 30.1215C0.917183 30.6258 0.993995 30.9155 1.10582 31.135C1.3455 31.6054 1.72795 31.9878 2.19836 32.2275C2.41782 32.3393 2.70756 32.4161 3.21187 32.4573C3.7259 32.4993 4.38616 32.5 5.33333 32.5L24.6667 32.5C25.6138 32.5 26.2741 32.4993 26.7881 32.4573C27.2924 32.4161 27.5822 32.3393 27.8016 32.2275C28.2721 31.9878 28.6545 31.6054 28.8942 31.135C29.006 30.9155 29.0828 30.6258 29.124 30.1215C29.166 29.6074 29.1667 28.9472 29.1667 28ZM0.363313 1.82003C1.71361e-06 2.53307 1.66168e-06 3.46649 1.55782e-06 5.33333L2.96727e-07 28C1.92863e-07 29.8668 1.40931e-07 30.8003 0.363312 31.5133C0.68289 32.1405 1.19282 32.6504 1.82003 32.97C2.53307 33.3333 3.46649 33.3333 5.33333 33.3333L24.6667 33.3333C26.5335 33.3333 27.4669 33.3333 28.18 32.97C28.8072 32.6504 29.3171 32.1405 29.6367 31.5133C30 30.8003 30 29.8668 30 28L30 8.87581C30 8.0605 30 7.65285 29.9079 7.26923C29.8262 6.92911 29.6916 6.60396 29.5088 6.30572C29.3027 5.96933 29.0144 5.68108 28.4379 5.10457L24.8954 1.5621C24.3189 0.985593 24.0307 0.69734 23.6943 0.491201C23.396 0.308438 23.0709 0.173757 22.7308 0.0921015C22.3472 1.24331e-06 21.9395 1.22063e-06 21.1242 1.17527e-06L5.33334 2.96727e-07C3.46649 1.92863e-07 2.53307 1.40931e-07 1.82003 0.363312C1.19283 0.682889 0.682891 1.19282 0.363313 1.82003Z",fill:"#E2D5F8"}}),r("path",{staticStyle:{fill:"color(display-p3 0.4157 0.2706 0.8980)","fill-opacity":"1"},attrs:{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M22.1277 22.689L22.129 8.92249L10.0345 10.5529L10.0335 22.0895C9.69971 21.9846 9.34054 21.9276 8.96638 21.9276C7.19825 21.9276 5.76489 23.2017 5.76489 24.7734C5.76489 26.345 7.19825 27.6191 8.96638 27.6191C10.7157 27.6191 12.1374 26.3719 12.1674 24.8233L12.1676 24.8233L12.1676 24.8123L12.1679 24.7734L12.1676 24.7347L12.168 13.7622L19.9939 12.5435L19.9935 19.9543C19.6596 19.8493 19.3001 19.7922 18.9257 19.7922C17.1576 19.7922 15.7242 21.0663 15.7242 22.6379C15.7242 24.2096 17.1576 25.4837 18.9257 25.4837C20.6746 25.4837 22.096 24.2371 22.1267 22.689L22.1277 22.689Z",fill:"#6A45E5"}})])]),r("div",{staticClass:"file-info"},[r("div",{staticClass:"file-name",attrs:{title:e.displayFileName}},[e._v(e._s(e.displayFileName))]),r("div",{staticClass:"file-status"},[r("span",{staticClass:"status-text",class:e.statusClass},[e._v(" "+e._s(e.statusText)+" ")])])]),r("div",{staticClass:"audio-controls"},[r("button",{staticClass:"control-btn download-btn",attrs:{disabled:!e.canDownload,title:e.downloadButtonTitle},on:{click:e.handleDownload}},[r("v-icon",{attrs:{name:"basic_download2_line",size:18}})],1),r("button",{staticClass:"control-btn play-btn",attrs:{disabled:!e.canPlay,title:e.playButtonTitle},on:{click:e.handlePlayPause}},[e.internalStatus==="playing"?r("v-icon",{attrs:{name:"basic_pause_line",size:18}}):r("v-icon",{attrs:{name:"basic_play_line",size:18}})],1)])]),r("div",{staticClass:"progress-container"},[r("div",{ref:"progressTrack",staticClass:"progress-track",on:{mousedown:e.handleProgressMouseDown,mouseenter:e.handleProgressMouseEnter,mouseleave:e.handleProgressMouseLeave}},[e.isGenerating?e._e():r("div",{staticClass:"progress-played",class:{"no-transition":e.isDragging},style:{width:e.progressPercentage+"%"}}),e.showHandle?r("div",{staticClass:"progress-handle",class:{"no-transition":e.isDragging},style:{left:e.progressPercentage+"%"},on:{mousedown:function(n){return n.stopPropagation(),e.handleDragStart.apply(null,arguments)}}}):e._e()])])])},wO=[],SO=pr(bO,xO,wO,!1,null,"c74077bd",null,null);const Xb=SO.exports,CO={已完成所有任务:{zh:"已完成所有任务",en:"All tasks completed"},已停止:{zh:"已停止",en:"Stopped"},任务进度:{zh:"任务进度",en:"Task progress"},问题澄清:{zh:"问题澄清",en:"Question Clarification"},支持多选:{zh:"(支持多选)",en:"(Multiple selection)"},提交:{zh:"提交",en:"Submit"},已提交:{zh:"已提交",en:"Submitted"},跳过:{zh:"跳过",en:"Skip"}};function AO(t){const e={"zh-CN":{},"en-US":{}};for(const[r,n]of Object.entries(t))e["zh-CN"][r]=n.zh,e["en-US"][r]=n.en;return e}const TO=AO(CO),w0="zh-CN",ri={"zh-cn":"zh-CN",zh_cn:"zh-CN","zh-hans":"zh-CN","zh-hans-cn":"zh-CN",zh:"zh-CN",cn:"zh-CN",chinese:"zh-CN","chinese-simplified":"zh-CN","simplified-chinese":"zh-CN",simplifiedchinese:"zh-CN",chs:"zh-CN",zhs:"zh-CN",hans:"zh-CN","zh-sg":"zh-CN",zh_sg:"zh-CN","zh-tw":"zh-CN",zh_tw:"zh-CN","zh-hk":"zh-CN",zh_hk:"zh-CN","zh-hant":"zh-CN","zh-hant-tw":"zh-CN","zh-hant-hk":"zh-CN",cht:"zh-CN",zht:"zh-CN",hant:"zh-CN","chinese-traditional":"zh-CN","traditional-chinese":"zh-CN",traditionalchinese:"zh-CN","en-us":"en-US",en_us:"en-US","en-gb":"en-US",en_gb:"en-US","en-au":"en-US",en_au:"en-US","en-ca":"en-US",en_ca:"en-US",en:"en-US",us:"en-US",gb:"en-US",uk:"en-US",english:"en-US",eng:"en-US","en-in":"en-US",en_in:"en-US","en-nz":"en-US",en_nz:"en-US","en-ie":"en-US",en_ie:"en-US"};function DO(t){if(!t||typeof t!="string")return w0;const e=t.trim().toLowerCase();if(!e)return w0;if(ri[e])return ri[e];const r=e.replace(/-/g,"_");if(ri[r])return ri[r];const n=e.replace(/_/g,"-");if(ri[n])return ri[n];const i=e.split(/[-_]/)[0];return ri[i]?ri[i]:e==="zh-cn"||e==="zh_cn"?"zh-CN":e==="en-us"||e==="en_us"?"en-US":w0}function EO(t,e=w0){const r=DO(e),n=TO[r];return n[t]!==void 0?n[t]:t}function jb(t,e){const r={};for(const n of e)r[n]=EO(n,t);return r}const kO={name:"ClassifyTag",props:{title:{type:String,default:""},questions:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},defaultAnswers:{type:Array,default:()=>[]},locale:{type:String,default:"zh-CN"}},data(){return{collapsed:!1,selectedAnswers:{},submitted:!1}},watch:{defaultAnswers:{handler(t){t&&t.length>0&&this._applyDefaultAnswers(t)},immediate:!0}},computed:{i18nText(){return jb(this.locale,["问题澄清","支持多选","提交","已提交","跳过"])},displayTitle(){return this.title||this.i18nText.问题澄清},normalizedQuestions(){return!this.questions||!this.questions.length?[]:this.questions.map((t,e)=>({id:t.id!==void 0?t.id:e,text:t.text||t.question||"",isMulti:t.type===2,options:(t.options||[]).map(r=>typeof r=="string"?{label:r,description:""}:{label:r.label||r.Label||"",description:r.description||r.Description||""})}))},allAnswered(){return!this.normalizedQuestions||this.normalizedQuestions.length===0?!1:this.normalizedQuestions.every(t=>{const e=this.selectedAnswers[t.id];return t.isMulti?Array.isArray(e)&&e.length>0:e!==void 0})}},methods:{_applyDefaultAnswers(t){t.forEach(e=>{if(e.questionId!==void 0){if(e.selectedIndices&&Array.isArray(e.selectedIndices))this.$set(this.selectedAnswers,e.questionId,[...e.selectedIndices]);else if(e.selectedIndex!==void 0){const r=this.normalizedQuestions.find(n=>n.id===e.questionId);r&&r.isMulti?this.$set(this.selectedAnswers,e.questionId,[e.selectedIndex]):this.$set(this.selectedAnswers,e.questionId,e.selectedIndex)}}}),this.submitted=!0},toggleCollapse(){this.collapsed=!this.collapsed},selectOption(t,e){this.submitted||this.disabled||this.$set(this.selectedAnswers,t,e)},isChecked(t,e){const r=this.selectedAnswers[t];return Array.isArray(r)&&r.includes(e)},toggleCheckbox(t,e){if(this.submitted||this.disabled)return;let r=this.selectedAnswers[t];Array.isArray(r)?r=[...r]:r=[];const n=r.indexOf(e);n!==-1?r.splice(n,1):r.push(e),this.$set(this.selectedAnswers,t,r)},handleSubmit(){if(!this.allAnswered||this.submitted)return;this.submitted=!0;const t=this.normalizedQuestions.map(e=>{const r=this.selectedAnswers[e.id];if(e.isMulti){const i=Array.isArray(r)?r:[],a=i.map(o=>e.options[o]?e.options[o].label:"");return{questionId:String(e.id),questionText:e.text,isMulti:!0,selectedOptions:a,selectedOption:a[0]||"",selectedIndices:i,selectedIndex:i[0]!==void 0?i[0]:-1}}const n=e.options[r];return{questionId:String(e.id),questionText:e.text,isMulti:!1,selectedOption:n?n.label:"",selectedOptions:[n?n.label:""],selectedIndex:r,selectedIndices:[r]}});this.$emit("submit",t)},handleSkip(){this.submitted||this.disabled||this.$emit("skip")}}};var MO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"classify-tag",class:{"classify-tag--collapsed":e.collapsed}},[r("div",{staticClass:"classify-tag__header",on:{click:e.toggleCollapse}},[r("svg",{staticClass:"classify-tag__icon",attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M8 1C4.13401 1 1 4.13401 1 8C1 11.866 4.13401 15 8 15C11.866 15 8 15 8 15",stroke:"#4A70FF","stroke-width":"1.5","stroke-linecap":"round",fill:"none"}}),r("path",{attrs:{d:"M8 5V8.5",stroke:"#4A70FF","stroke-width":"1.5","stroke-linecap":"round"}}),r("circle",{attrs:{cx:"8",cy:"11",r:"0.75",fill:"#4A70FF"}}),r("path",{attrs:{d:"M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1Z",stroke:"#4A70FF","stroke-width":"1.5",fill:"none"}})]),r("span",{staticClass:"classify-tag__title"},[e._v(e._s(e.displayTitle))]),r("svg",{staticClass:"classify-tag__arrow",class:{"classify-tag__arrow--up":!e.collapsed},attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M4 6L8 10L12 6",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"classify-tag__content"},e._l(e.normalizedQuestions,function(n,i){return r("div",{key:n.id||i,staticClass:"classify-tag__question-group"},[r("div",{staticClass:"classify-tag__question-text"},[e._v(" "+e._s(i+1)+"、"+e._s(n.text)+" "),n.isMulti?r("span",{staticClass:"classify-tag__multi-hint"},[e._v(e._s(e.i18nText.支持多选))]):e._e()]),r("div",{staticClass:"classify-tag__options"},[n.isMulti?e._l(n.options,function(a,o){return r("label",{key:o,staticClass:"classify-tag__checkbox",class:{"classify-tag__checkbox--checked":e.isChecked(n.id||i,o),"classify-tag__checkbox--rich":a.description},on:{click:function(s){return e.toggleCheckbox(n.id||i,o)}}},[r("span",{staticClass:"classify-tag__checkbox-box"},[e.isChecked(n.id||i,o)?r("svg",{staticClass:"classify-tag__checkbox-tick",attrs:{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M1 4L3.5 6.5L9 1",stroke:"#fff","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})]):e._e()]),r("span",{staticClass:"classify-tag__radio-content"},[r("span",{staticClass:"classify-tag__radio-label"},[e._v(e._s(a.label))]),a.description?r("span",{staticClass:"classify-tag__radio-desc"},[e._v(e._s(a.description))]):e._e()])])}):e._l(n.options,function(a,o){return r("label",{key:o,staticClass:"classify-tag__radio",class:{"classify-tag__radio--checked":e.selectedAnswers[n.id||i]===o,"classify-tag__radio--rich":a.description},on:{click:function(s){return e.selectOption(n.id||i,o)}}},[r("span",{staticClass:"classify-tag__radio-circle"},[e.selectedAnswers[n.id||i]===o?r("span",{staticClass:"classify-tag__radio-dot"}):e._e()]),r("span",{staticClass:"classify-tag__radio-content"},[r("span",{staticClass:"classify-tag__radio-label"},[e._v(e._s(a.label))]),a.description?r("span",{staticClass:"classify-tag__radio-desc"},[e._v(e._s(a.description))]):e._e()])])})],2)])}),0),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"classify-tag__footer"},[r("div",{staticClass:"classify-tag__footer-divider"}),r("div",{staticClass:"classify-tag__footer-actions"},[r("button",{staticClass:"classify-tag__btn classify-tag__btn--primary",attrs:{disabled:!e.allAnswered||e.submitted},on:{click:e.handleSubmit}},[e._v(" "+e._s(e.submitted?e.i18nText.已提交:e.i18nText.提交)+" ")]),e.submitted?e._e():r("button",{staticClass:"classify-tag__btn classify-tag__btn--secondary",on:{click:e.handleSkip}},[e._v(" "+e._s(e.i18nText.跳过)+" ")])])])])},LO=[],IO=pr(kO,MO,LO,!1,null,"0e944fef",null,null);const i2=IO.exports;const PO={name:"PlanConfirm",props:{title:{type:String,default:"计划确认"},planText:{type:String,default:""},disabled:{type:Boolean,default:!1}},data(){return{collapsed:!1,confirmed:!1,skipped:!1}},methods:{toggleCollapse(){this.collapsed=!this.collapsed},handleConfirm(){this.confirmed||this.skipped||this.disabled||(this.confirmed=!0,this.$emit("confirm",this.planText))},handleSkip(){this.confirmed||this.skipped||this.disabled||(this.skipped=!0,this.$emit("skip",this.planText))}}};var RO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"plan-confirm",class:{"plan-confirm--collapsed":e.collapsed}},[r("div",{staticClass:"plan-confirm__header",on:{click:e.toggleCollapse}},[r("svg",{staticClass:"plan-confirm__icon",attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M13.5 5.5L6.5 12.5L2.5 8.5",stroke:"#4A70FF","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}}),r("rect",{attrs:{x:"1",y:"1",width:"14",height:"14",rx:"2",stroke:"#4A70FF","stroke-width":"1.5",fill:"none"}})]),r("span",{staticClass:"plan-confirm__title"},[e._v(e._s(e.title))]),r("svg",{staticClass:"plan-confirm__arrow",class:{"plan-confirm__arrow--up":!e.collapsed},attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M4 6L8 10L12 6",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"plan-confirm__content"},[r("div",{staticClass:"plan-confirm__text"},[e._v(e._s(e.planText))])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"plan-confirm__footer"},[r("div",{staticClass:"plan-confirm__footer-divider"}),r("div",{staticClass:"plan-confirm__footer-actions"},[!e.confirmed&&!e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--primary",on:{click:e.handleConfirm}},[e._v(" 确定 ")]):e._e(),e.confirmed?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--primary",attrs:{disabled:""}},[e._v(" 已确定 ")]):e._e(),!e.confirmed&&!e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--secondary",on:{click:e.handleSkip}},[e._v(" 跳过 ")]):e._e(),e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--secondary",attrs:{disabled:""}},[e._v(" 已跳过 ")]):e._e()])])])},NO=[],OO=pr(PO,RO,NO,!1,null,"99c3033c",null,null);const BO=OO.exports;let g1;const FO=new Uint8Array(16);function zO(){if(!g1&&(g1=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!g1))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return g1(FO)}const St=[];for(let t=0;t<256;++t)St.push((t+256).toString(16).slice(1));function VO(t,e=0){return St[t[e+0]]+St[t[e+1]]+St[t[e+2]]+St[t[e+3]]+"-"+St[t[e+4]]+St[t[e+5]]+"-"+St[t[e+6]]+St[t[e+7]]+"-"+St[t[e+8]]+St[t[e+9]]+"-"+St[t[e+10]]+St[t[e+11]]+St[t[e+12]]+St[t[e+13]]+St[t[e+14]]+St[t[e+15]]}const $O=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ov={randomUUID:$O};function Kb(t,e,r){if(ov.randomUUID&&!e&&!t)return ov.randomUUID();t=t||{};const n=t.random||(t.rng||zO)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,e){r=r||0;for(let i=0;i<16;++i)e[r+i]=n[i];return e}return VO(n)}const GO=["Basic","Card","ListView","ListViewItem","Badge","Box","Row","Col","Button","Caption","Chart","Checkbox","DatePicker","Divider","Form","Icon","Image","Input","Label","Markdown","RadioGroup","Select","Spacer","Text","Textarea","Title","Transition","Video","Audio","Countdown","Clickable","ImageSelect"];class HO{constructor(){this.worker=null,this.callbacks=new Map,this.initializing=!1,this.initPromise=null,this.blobUrl=null}async init(){return this.worker?Promise.resolve():this.initializing&&this.initPromise?this.initPromise:(this.initializing=!0,this.initPromise=new Promise((e,r)=>{try{const n=window.tsxToJsonWorkerSrc||"https://cdn.xiaowei.qq.com/adp/assets/static/tsxToJSON.worker.js",i=new Blob([`importScripts('${n}')`],{type:"application/javascript"});this.blobUrl=URL.createObjectURL(i),this.worker=new Worker(this.blobUrl),this.worker.onmessage=a=>{const{ok:o,out:s,error:u,nonce:l}=a.data,c=this.callbacks.get(l);c&&(this.callbacks.delete(l),o?c.resolve(s):c.reject(new Error(u||"Worker Parse error")))},this.worker.onerror=a=>{console.error("tsxToJSON Worker 错误:",a)},this.initializing=!1,e()}catch(n){this.initializing=!1,console.error("初始化 tsxToJSON Worker 失败:",n),r(n)}}),this.initPromise)}destroy(){this.worker&&(this.worker.terminate(),this.worker=null),this.blobUrl&&(URL.revokeObjectURL(this.blobUrl),this.blobUrl=null),this.callbacks.forEach(e=>{e.reject(new Error("Worker destroy"))}),this.callbacks.clear(),this.initializing=!1,this.initPromise=null}async parse({view:e,state:r,keyMap:n,componentNames:i=GO}){return await this.init(),new Promise((a,o)=>{if(!this.worker){o(new Error("Worker not init"));return}const s=Kb();this.callbacks.set(s,{resolve:a,reject:o}),this.worker.postMessage({type:"parse",view:e,state:r||{},keyMap:n,componentNames:i||[],nonce:s})})}isInitialized(){return!!this.worker}}let m1=null;async function Gh(){return m1||(m1=new HO),await m1.init(),m1}class UO{constructor(){this.worker=null,this.callbacks=new Map,this.initializing=!1,this.initPromise=null,this.blobUrl=null}async init(){return this.worker?Promise.resolve():this.initializing&&this.initPromise?this.initPromise:(this.initializing=!0,this.initPromise=new Promise((e,r)=>{try{const n=window.schemaWorkerSrc||"https://cdn.xiaowei.qq.com/adp/assets/static/schemaWorker.js",i=new Blob([`importScripts('${n}')`],{type:"application/javascript"});this.blobUrl=URL.createObjectURL(i),this.worker=new Worker(this.blobUrl),this.worker.onmessage=a=>{const{ok:o,keyMap:s,jsonSchema:u,error:l,nonce:c}=a.data,f=this.callbacks.get(c);f&&(this.callbacks.delete(c),o?f.resolve({keyMap:s,jsonSchema:u}):f.reject(new Error(l||"Worker parse failed")))},this.worker.onerror=a=>{console.error("zodSchema Worker 错误:",a)},this.initializing=!1,e()}catch(n){this.initializing=!1,console.error("初始化 zodSchema Worker 失败:",n),r(n)}}),this.initPromise)}destroy(){this.worker&&(this.worker.terminate(),this.worker=null),this.blobUrl&&(URL.revokeObjectURL(this.blobUrl),this.blobUrl=null),this.callbacks.forEach(e=>{e.reject(new Error("Worker destroyed"))}),this.callbacks.clear(),this.initializing=!1,this.initPromise=null}async zodToJsonSchema({src:e,includeJSONSchema:r=!0}){return await this.init(),new Promise((n,i)=>{if(!this.worker){i(new Error("Worker not init"));return}const a=Kb();this.callbacks.set(a,{resolve:n,reject:i}),this.worker.postMessage({type:"parse",src:e,includeJSONSchema:r,nonce:a})})}async zodToJsonSchemaAsync(e){return await this.zodToJsonSchema({src:e,includeJSONSchema:!0})}isInitialized(){return!!this.worker}}let y1=null;async function Qb(){return y1||(y1=new UO),await y1.init(),y1}async function j0(t){const r=await(await Qb()).zodToJsonSchemaAsync(t);return{keyMap:r.keyMap,jsonSchema:JSON.stringify(r.jsonSchema,null,2)}}function WO(t,e){let r;try{r=JSON.parse(t)}catch(i){return console.warn(`unmarshal view failed, err: ${i}`),t}let n;try{n=JSON.parse(e)}catch(i){return console.warn(`unmarshal payload failed, err: ${i}`),t}Hh(r,n);try{return JSON.stringify(r)}catch(i){return console.warn(`marshal view failed, err: ${i}`),t}}function Hh(t,e){if(Array.isArray(t))for(let r=0;r<t.length;r++)Hh(t[r],e);else if(t!==null&&typeof t=="object"){const r=t.name;if(typeof r=="string"){const n=typeof t.type=="string"?t.type:"unknown",i=qO(r,e);if(i.exists){const a=i.value;switch(n){case"DatePicker":t.defaultValue=a;break;case"Select":t.defaultValue=a;break;case"Checkbox":t.defaultChecked=a;break;case"RadioGroup":t.defaultValue=a;break;case"Input":t.defaultValue=a;break;case"Textarea":t.defaultValue=a;break;default:t.defaultValue=a}}}if(Array.isArray(t.children))for(let n=0;n<t.children.length;n++)Hh(t.children[n],e)}}function qO(t,e){const r=t.split(".");let n=e;for(const i of r){if(n===null||typeof n!="object"||Array.isArray(n))return{value:null,exists:!1};if(!(i in n))return{value:null,exists:!1};n=n[i]}return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?{value:n,exists:!0}:{value:String(n),exists:!0}}class a2{constructor(){this.initPromise=null,this.initialized=!1,this._preload()}_preload(){return this.initPromise?this.initPromise:(this.initPromise=Promise.all([Gh(),Qb()]).then(()=>{this.initialized=!0,console.log("WidgetHelper: Workers 预加载完成")}).catch(e=>{console.warn("WidgetHelper: Workers 预加载失败:",e.message)}),this.initPromise)}async waitForReady(){this.initPromise&&await this.initPromise}isReady(){return this.initialized}async getTemplate(e){try{return""}catch(r){return console.warn("getTemplate 执行出错:",r.message),""}}async getPreview({view:e,schema:r,defaultState:n}){try{if(await this.waitForReady(),n!=null&&n!==""){const s=typeof n=="string"?JSON.parse(n):n;if(typeof s!="object"||s===null)throw new Error("defaultState 必须是一个有效的 JSON 对象")}const{keyMap:i}=await j0(r);return await(await Gh()).parse({view:e,state:JSON.parse(n),keyMap:i})}catch(i){return console.warn("getPreview 执行出错:",i.message),""}}async getJsonSchema(e){try{await this.waitForReady();const{jsonSchema:r}=await j0(e);return r}catch(r){return console.warn("getJsonSchema 执行出错:",r.message),""}}genarateSnapshot(...e){return WO(...e)}decodeWidget(e){try{return JSON.parse(Buffer.from(e,"base64").toString()||"")}catch{return""}}}function ZO(){return new a2}function YO(t){try{return jsxToJinja(t)}catch(e){return console.warn("getTemplate 执行出错:",e.message),""}}async function XO({view:t,schema:e,defaultState:r}){try{if(r!=null&&r!==""){const o=typeof r=="string"?JSON.parse(r):r;if(typeof o!="object"||o===null)throw new Error("defaultState 必须是一个有效的 JSON 对象")}const{keyMap:n}=await j0(e);return await(await Gh()).parse({view:t,state:JSON.parse(r),keyMap:n})}catch(n){return console.warn("getPreview 执行出错:",n.message),""}}async function jO(t){try{const{jsonSchema:e}=await j0(t);return e}catch(e){return console.warn("getJsonSchema 执行出错:",e.message),""}}const KO={data(){return{_widgetHelper:null}},created(){this._widgetHelper=new a2,this._widgetInstancesMap={},this._audioInstancesMap={},this._classifyTagInstancesMap={},this._planConfirmInstancesMap={},this._audioStateCache={}},methods:{_scaleWidgetIfNeeded(t,e){const r=this.widgetList&&this.widgetList.find(s=>s.widget_run_id===e),n=r&&r.scale,i=this._widgetInstancesMap[e],a=i&&i.instance&&i.instance.$el;if(!a)return;if(!n){t.style.width="",t.style.height="",a.style.transform="",a.style.transformOrigin="";return}let o;if(typeof n=="number")o=n;else if(n===!0){const s=this.$refs.containerRef&&(this.$refs.containerRef.$el||this.$refs.containerRef);if(!s)return;const u=s.clientWidth,l=a.style.transform;a.style.transform="";const c=a.scrollWidth||a.offsetWidth;if(a.style.transform=l,u<=0||c<=u){t.style.width="",t.style.height="",a.style.transform="",a.style.transformOrigin="";return}o=u/c}if(o&&o>0){a.style.transform="";const s=a.scrollWidth||a.offsetWidth,u=a.scrollHeight||a.offsetHeight;t.style.width=`${s*o}px`,t.style.height=`${u*o}px`,a.style.transform=`scale(${o})`,a.style.transformOrigin="top left"}},async _mountWidgets(t){if(!this.showWidget)return;const e=t.querySelectorAll(".widget-container");for(const r of e){if(r._widgetMounted||r._widgetMounting)continue;r._widgetMounting=!0;const n=r.getAttribute("data-widget-run-id"),i=r.getAttribute("data-widget-id"),a=r.getAttribute("data-widget-view"),o=r.getAttribute("data-widget-encoded-widget"),s=r.getAttribute("data-widget-state"),u=r.getAttribute("data-widget-payload"),l=r.getAttribute("data-widget-disable")==="true";if(!a&&!o){r._widgetMounting=!1;continue}const c=s?decodeURIComponent(escape(atob(s))):"",f=u?decodeURIComponent(escape(atob(u))):"",h=a?decodeURIComponent(escape(atob(a))):"";let d="";if(h)d=h;else try{const{view:b,schema:x}=this._widgetHelper.decodeWidget(o);d=await this._widgetHelper.getPreview({view:b,schema:x,defaultState:c}),d=JSON.stringify(d),f&&(d=this._widgetHelper.genarateSnapshot(d,f))}catch(b){console.error("[MsgContent] decodeWidget error",b),r._widgetMounting=!1;continue}const p=Pa.extend(qb),v=new p({propsData:{output:d,disable:l,locale:this.locale}});v.$on("widget-action",b=>this.$emit("widget-action",b,n,i)),v.$on("widget-event",b=>this.$emit("widget-event",b,n,i)),v.$on("widget-rendered",b=>{this.$emit("widget-rendered",b,n,i),this.$nextTick(()=>this._scaleWidgetIfNeeded(r,n))}),v.$mount(),r.appendChild(v.$el),r._widgetMounted=!0,r._widgetMounting=!1;const g=r.getAttribute("data-widget-view")||"",m=r.getAttribute("data-widget-payload")||"",y=r.getAttribute("data-widget-state")||"",_=r.getAttribute("data-widget-encoded-widget")||"";this._widgetInstancesMap[n]={instance:v,container:r,_lastDataKey:`${g}|${m}|${y}|${_}`}}},_mountAudioPlayers(t){if(!this.audioList||this.audioList.length===0)return;t.querySelectorAll(".audio-stream-container").forEach(r=>{const n=r.getAttribute("data-audio-symbol-id");if(this._audioInstancesMap[n]){r.children.length===0&&r.appendChild(this._audioInstancesMap[n].instance.$el);return}if(r.children.length>0)return;const i=this.audioList&&this.audioList.find(a=>a.audioSymbolId===n);if(i)try{const a=Pa.extend(Xb),o=new a({propsData:{audioData:i}});o.$on("play",s=>this.$emit("audio-play",s,n)),o.$on("pause",s=>this.$emit("audio-pause",s,n)),o.$on("end",s=>this.$emit("audio-end",s,n)),o.$on("audio-download",s=>this.$emit("audio-download",s,n)),o.$on("chunk-added",s=>this.$emit("audio-chunk-added",s,n)),o.$on("error",s=>this.$emit("audio-error",s,n)),o.$mount(),r.appendChild(o.$el),this._audioInstancesMap[n]={instance:o,container:r}}catch(a){console.error("[MsgContent] 创建音频播放器失败:",a)}})},_mountClassifyTags(t){if(!this.showClassifyTag)return;t.querySelectorAll(".classify-tag-container").forEach((r,n)=>{if(r._classifyTagMounted)return;const i=r.getAttribute("data-classify-tag");if(i)try{const a=decodeURIComponent(escape(atob(i))),o=JSON.parse(a),s=Pa.extend(i2),u=new s({propsData:{title:o.title||"",questions:o.questions||[],disabled:!1,locale:this.locale}});u.$on("submit",l=>this.$emit("classify-tag-submit",l,o)),u.$on("skip",()=>this.$emit("classify-tag-skip",o)),u.$mount(),r.appendChild(u.$el),r._classifyTagMounted=!0,this._classifyTagInstancesMap[n]={instance:u,container:r}}catch(a){console.error("[MsgContent] ClassifyTag mount error:",a)}})},_mountPlanConfirms(t){if(!this.showPlanConfirm)return;t.querySelectorAll(".plan-confirm-container").forEach((r,n)=>{if(r._planConfirmMounted)return;const i=r.getAttribute("data-plan-confirm");if(i)try{const a=decodeURIComponent(escape(atob(i))),o=JSON.parse(a),s=Pa.extend(BO),u=new s({propsData:{title:o.title||"计划确认",planText:o.planText||"",disabled:!1}});u.$on("confirm",l=>this.$emit("plan-confirm",l,o)),u.$on("skip",l=>this.$emit("plan-skip",l,o)),u.$mount(),r.appendChild(u.$el),r._planConfirmMounted=!0,this._planConfirmInstancesMap[n]={instance:u,container:r}}catch(a){console.error("[MsgContent] PlanConfirm mount error:",a)}})},_mountAll(t){this.$nextTick(()=>{this._mountWidgets(t),this._mountAudioPlayers(t),this._mountClassifyTags(t),this._mountPlanConfirms(t)})},async _updateWidgets(t){if(!t)return;const e=this.$refs.containerRef,r=e&&(e.$el||e);if(!r)return;await this.$nextTick();const n=r.querySelectorAll(".widget-container");for(const i of n){const a=i.getAttribute("data-widget-run-id"),o=this._widgetInstancesMap[a];if(!a||!o)continue;const s=i.getAttribute("data-widget-view")||"",u=i.getAttribute("data-widget-payload")||"",l=i.getAttribute("data-widget-state")||"",c=i.getAttribute("data-widget-encoded-widget")||"",f=i.getAttribute("data-widget-disable")==="true",h=`${s}|${u}|${l}|${c}`;if(o._lastDataKey!==h){o._lastDataKey=h;const d=s?decodeURIComponent(escape(atob(s))):"",p=u?decodeURIComponent(escape(atob(u))):"";let v="";if(d)v=d;else if(c){const g=l?decodeURIComponent(escape(atob(l))):"";try{const{view:m,schema:y}=this._widgetHelper.decodeWidget(c);v=await this._widgetHelper.getPreview({view:m,schema:y,defaultState:g}),v=JSON.stringify(v),p&&(v=this._widgetHelper.genarateSnapshot(v,p))}catch{}}o.instance&&(o.instance.output=v)}o.instance&&(o.instance.disable=f),this._scaleWidgetIfNeeded(i,a)}},_updateAudioPlayers(t){t&&Object.keys(this._audioInstancesMap).forEach(e=>{const r=this._audioInstancesMap[e];if(!r||!r.instance)return;const n=t.find(s=>s.audioSymbolId===e);if(!n)return;const i=n.audio_data&&n.audio_data.length||0,a=!!n.isComplete,o=this._audioStateCache[e]||{length:0,isComplete:!1};(i!==o.length||a!==o.isComplete)&&(this._audioStateCache[e]={length:i,isComplete:a},r.instance.audioData=n)})},_destroyAllEmbedded(){Object.keys(this._widgetInstancesMap).forEach(t=>{try{this._widgetInstancesMap[t].instance.$destroy()}catch{}delete this._widgetInstancesMap[t]}),Object.keys(this._audioInstancesMap).forEach(t=>{try{this._audioInstancesMap[t].instance.$destroy()}catch{}delete this._audioInstancesMap[t]}),Object.keys(this._classifyTagInstancesMap).forEach(t=>{try{this._classifyTagInstancesMap[t].instance.$destroy()}catch{}delete this._classifyTagInstancesMap[t]}),Object.keys(this._planConfirmInstancesMap).forEach(t=>{try{this._planConfirmInstancesMap[t].instance.$destroy()}catch{}delete this._planConfirmInstancesMap[t]}),this._audioStateCache={}}},beforeDestroy(){this._destroyAllEmbedded()}},QO={methods:{_postrender(t){let e=t.replace(/&gt;/g,">").replace(/&lt;/g,"<").replace("CURSOR_POINT",'<span class="cursor"></span>');const r=document.createElement("div");return r.innerHTML=e,r.querySelectorAll("img").forEach(n=>{const i=Ub(n.src,"size"),a=i&&i.split("|")||[];let o,s;if(a[1]){const u=a[1].split("*");o=u[0],u[1]&&(s=u[0]/u[1])}a[0]&&(a[0]==="min"&&(!o||o<24)?o=this.imgMinWidth||"24":a[0]==="mid"&&o>320?o=this.imgMaxWidth||"320":a[0]==="max"&&(o=this.imgMaxWidth||"320")),o&&(n.style.width=o===this.imgMaxWidth||o===this.imgMinWidth?o:`${o}px`),s&&(n.style.height=`${o/s}px`)}),r.querySelectorAll("pre code:not(.language-mermaid)").forEach((n,i,a)=>{if(Array.from(n.classList).some(s=>s.startsWith("language-"))?this.incremental||of(n):n.classList.add("hljs"),this.isFinal){this.incremental||av(n);const s=n.parentNode.querySelector(".cursor");s&&s.remove()}else if(this.isPrintAnimate&&!r.querySelector(".cursor")&&i===a.length-1&&!this.isFinal&&n.parentElement===r.lastElementChild){const s=document.createElement("span");s.className="cursor",n.append(s)}if(!this.incremental&&!n.parentNode.querySelector(".code-language-label")&&n.result&&n.result.language){const s=document.createElement("div");s.className="code-language-label",this.codeHeaderRender?s.innerHTML=this.codeHeaderRender(n.result.language,this.content,i):s.textContent=n.result.language,n.parentNode.insertBefore(s,n)}}),Tb(r),this.$emit("postrender",this.currentIndex,this.$refs.containerRef&&(this.$refs.containerRef.$el||this.$refs.containerRef),this.recordId),r.innerHTML.replace(/-->/g,"-->")},_onImageClick(t){this.$emit("imageClick",t)},_onDownloadCardClick(t,e){this.$emit("downloadCardClick",t,e)},_onMDRendered(t){t&&(this.incremental&&t.querySelectorAll("pre code:not(.language-mermaid)").forEach((e,r,n)=>{if(Array.from(e.classList).some(a=>a.startsWith("language-"))&&!e._highlighted&&(r===n.length-1&&!this.isFinal?of(e):(of(e),e._highlighted=!0)),this.isFinal&&!e._lineNumbered&&(av(e),e._lineNumbered=!0),!e.parentNode.querySelector(".code-language-label")&&e.result&&e.result.language){const a=document.createElement("div");a.className="code-language-label",this.codeHeaderRender?a.innerHTML=this.codeHeaderRender(e.result.language,this.content,r):a.textContent=e.result.language,e.parentNode.insertBefore(a,e)}}),this.isFinal?(this.incremental?t.querySelectorAll(".question-text img, .answer-md img").forEach(e=>{e._imgClickBound||(e.addEventListener("click",this._onImageClick),e._imgClickBound=!0)}):(t.querySelectorAll(".question-text img").forEach(e=>{e.removeEventListener("click",this._onImageClick),e.addEventListener("click",this._onImageClick)}),t.querySelectorAll(".answer-md img").forEach(e=>{e.removeEventListener("click",this._onImageClick),e.addEventListener("click",this._onImageClick)})),t.querySelectorAll(`.${this.clazzMd||"answer-md"} a`).forEach(e=>{e.setAttribute("target","_blank")}),t.querySelectorAll(".video-placeholder").forEach(e=>e.remove()),t.querySelectorAll("video").forEach(e=>{e.style.display="block"})):t.querySelectorAll(".video-placeholder").forEach(e=>{this.incremental&&e._videoPlaceholderSet||(e.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" style="animation: video-placeholder-spin 1s linear infinite; flex-shrink: 0;"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.36131 2.32604C0.902925 3.77517 0 5.78264 0 8.00101C0 12.4193 3.58172 16.001 8 16.001C12.4183 16.001 16 12.4193 16 8.00101C16 3.58326 12.4191 0.00187492 8.00161 0.00100708L8.85183 1.6572C11.9837 2.07373 14.4 4.7552 14.4 8.00101C14.4 11.5356 11.5346 14.401 8 14.401C4.46538 14.401 1.6 11.5356 1.6 8.00101C1.6 6.40633 2.18324 4.94787 3.14803 3.82731L2.36131 2.32604Z" fill="currentColor"/></svg>视频加载中...',this.incremental&&(e._videoPlaceholderSet=!0))}),this.showTags&&t.querySelectorAll(".tags-container").forEach(e=>{this.incremental&&e._tagClickBound||(this.incremental?(e.addEventListener("click",()=>this.$emit("littleTagClick",e,this.recordId)),e._tagClickBound=!0):(e.removeEventListener("click",this._tagClickHandler),e.addEventListener("click",()=>this.$emit("littleTagClick",e,this.recordId))))}),this.showDownloadCard&&t.querySelectorAll(".download-card").forEach(e=>{this.incremental&&e._downloadClickBound||(e.addEventListener("click",r=>{const n=r.currentTarget.getAttribute("data-file-id");this._onDownloadCardClick(n,r);try{r&&r.preventDefault&&r.preventDefault()}catch{}}),this.incremental&&(e._downloadClickBound=!0))}),this.isMermaidRenderAfterOutput?this.isFinal&&setTimeout(()=>{h1.onMermaidLoaded(()=>{h1.renderAll(t)})},0):setTimeout(()=>{h1.onMermaidLoaded(()=>{h1.renderAll(t)})},0),this._mountAll(t))}}};const JO={name:"MsgContent",components:{MDRender:BP},mixins:[iO,KO,QO],props:{showDownloadCard:{type:Boolean,default:!1},showTags:{type:Boolean,default:!1},fullFiles:{type:Array,default:()=>[]},recordId:String,content:{type:String,default:""},isFinal:{type:Boolean,default:!1},loadingMessage:{type:Boolean,default:!1},isMdExpand:{type:[Boolean,void 0],default:void 0},isReplaceLinks:{type:Boolean,default:!1},isPrintAnimate:{type:Boolean,default:!1},styleObj:Object,clazzTable:String,clazzMd:String,anchorAttributes:Object,linkify:{type:Boolean,default:!1},imgMinWidth:[Number,String],imgMaxWidth:[Number,String],printCount:Number,printCountTime:Number,hideCursorPoint:Boolean,chartDataArr:Array,codeHeaderRender:Function,replaceLinksWhitelist:Array,isMermaidRenderAfterOutput:{type:Boolean,default:!1},showWidget:{type:Boolean,default:!1},widgetList:{type:Array,default:()=>[]},audioList:{type:Array,default:()=>[]},locale:{type:String,default:"zh-CN"},incremental:{type:Boolean,default:!0},showClassifyTag:{type:Boolean,default:!1},showPlanConfirm:{type:Boolean,default:!1}},data(){return{currentText:"",renderText:""}},computed:{processOptions(){return{isReplaceLinks:this.isReplaceLinks,replaceLinksWhitelist:this.replaceLinksWhitelist,isFinal:this.isFinal,showTags:this.showTags,showDownloadCard:this.showDownloadCard,fullFiles:this.fullFiles,showWidget:this.showWidget,widgetList:this.widgetList,audioList:this.audioList,showClassifyTag:this.showClassifyTag,showPlanConfirm:this.showPlanConfirm}}},watch:{content(t){this.clearTimer(),this.currentIndex=this.currentText.length,this.currentText=this._getProcessedContent(t),this.isPrintAnimate?this._startPrint():this.renderText=this.currentText},isFinal(t){t&&this.content&&(this.clearTimer(),this.currentText=this._getProcessedContent(this.content),this.renderText=this.currentText,this.currentIndex=this.currentText.length)},isMdExpand(t){t?this.currentText=sf(this.content,this.processOptions):this.currentText=sf((this.content||"").substr(0,3e3),this.processOptions),this.renderText=this.currentText,this.clearTimer(),this.currentIndex=this.currentText.length},widgetList:{handler(t){this._updateWidgets(t)},deep:!0},audioList:{handler(t){this._updateAudioPlayers(t)},deep:!0}},created(){this._init()},mounted(){AN()},beforeDestroy(){this.clearTimer(),this._destroyAllEmbedded()},methods:{_getProcessedContent(t){if(!t)return"";const e=this.isMdExpand===void 0||this.isMdExpand?1e6:1e4;return sf(t.substr(0,e),this.processOptions)},_startPrint(){this.startCurrentTimer({printCount:this.printCount||1,printCountTime:this.printCountTime||16,hideCursorPoint:this.hideCursorPoint,isFinal:this.isFinal})},_init(){const t=this._getProcessedContent(this.content||"");this.currentText=t,!this.isPrintAnimate||this.isFinal?(this.renderText=t,this.currentIndex=t.length,this.clearTimer()):this._startPrint()}}};var eB=function(){var e=this,r=e._self._c;return r("MDRender",{ref:"containerRef",class:e.clazzMd||"answer-md",style:e.styleObj,attrs:{highlight:!0,"table-class":e.clazzTable||(e.isFinal?"table-style":"table"),source:e.renderText,"anchor-attributes":e.anchorAttributes||{target:"_blank"},linkify:e.linkify,incremental:e.incremental,postrender:e._postrender},on:{rendered:e._onMDRendered}})},tB=[],rB=pr(JO,eB,tB,!1,null,null,null,null);const Jb=rB.exports,X4=An(Jb);const nB={name:"MsgThought",components:{VIcon:n2},props:{titleRender:{type:[Object,Function],default:null},isMobile:Boolean,content:String,title:String,titleIcon:String,nodeName:String,status:String,elapsed:{type:Number,default:0},detailVisible:{type:Boolean,default:!0}},data(){return{THOUGHT_STATUS:bP,innerDetailVisible:this.detailVisible,renderedContent:"",xssHandler:new Un.FilterXSS(_P)}},computed:{elapsedSeconds(){return this.elapsed?(this.elapsed/1e3).toFixed(1):0}},watch:{content:{immediate:!0,handler(t){const e=(t||"").replace(/^\n+/,"").replace(/\n/g,"<br>");this.renderedContent=this.xssHandler.process(e)}},detailVisible(t){this.innerDetailVisible=t}},methods:{onTitleClick(){const t=!this.innerDetailVisible;this.innerDetailVisible=t,this.$emit("update:detailVisible",t)}}};var iB=function(){var e=this,r=e._self._c;return r("div",{staticClass:"thought-clps-content"},[e.titleRender?r(e.titleRender,{tag:"component"}):e._e(),e.titleRender?e._e():r("div",{staticClass:"thought-title",on:{click:e.onTitleClick}},[r("div",{staticClass:"thought-title-container"},[r("img",{staticClass:"thought-title-icon",attrs:{src:e.titleIcon}}),r("span",{staticClass:"thought-title-name"},[e._v(" "+e._s(e.title)+" "),e.nodeName?r("span",{staticClass:"thought-clps-modellabel"},[e._v(" -"+e._s(e.nodeName)+" ")]):e._e()]),e.status===e.THOUGHT_STATUS.failed?r("v-icon",{style:{color:"#FF8345"},attrs:{name:"basic_warning_line",size:"16"}}):e._e(),e.status===e.THOUGHT_STATUS.success?r("v-icon",{style:{color:"#0FB87F"},attrs:{name:"basic_finish_line",size:"16"}}):e._e(),e.status===e.THOUGHT_STATUS.stop?r("v-icon",{style:{color:"rgba(1,11,50,0.41)"},attrs:{name:"basic_stop_line",size:"16"}}):e._e()],1),r("div",{staticClass:"thought-title-container thought-title-elapsed"},[r("span",[e._v(e._s(e.elapsedSeconds)+"s")]),r("v-icon",{staticClass:"thought__header__icon",attrs:{name:"arrow_down_small_line",rotate:e.innerDetailVisible?180:0,size:"12"}})],1)]),e.innerDetailVisible?r("div",{staticClass:"thought-detail"},[r("div",{staticClass:"question-text",class:{"question-text-mobile":e.isMobile},domProps:{innerHTML:e._s(e.renderedContent)}})]):e._e()],1)},aB=[],oB=pr(nB,iB,aB,!1,null,"60c16159",null,null);const sB=oB.exports,j4=An(sB);/*! *****************************************************************************
|
|
49
|
+
`))}return t=jN(t),t=XN(t),r&&(t=nO(t,n)),QN(t)||(t=JN(t),t=tO.clean(t)),t=IN(t),t=PN(t),t=EN(t),t=RN(t),t=TN(t),t=DN(t),t=YN(t),i||(t=kN(t)),t=MN(t),a&&(t=GN(t)),o&&(t=$N(t,s)),u?t=BN(t,l):t=FN(t),c&&c.length>0?t=zN(t,c):t=VN(t),f?t=HN(t):t=UN(t),h?t=WN(t):t=qN(t),t=LN(t),t=eO.process(mE(t)),t}function nO(t,e){if(!t||Ub(window.location.hash,"from"))return t;let n=["lke.cloud.tencent.com","qidian"];e&&(n=e.concat(n));const i=ZN(t);i.forEach((u,l)=>{t=t.replace(u,`IMG_URL${l}`)});const a=`${window.location.protocol}//${window.location.host}/lke#/link-info/redirect?target=`,o=n.map(u=>`(?!.*${u})`).join(""),s=new RegExp(`(\\[([^\\]]+)\\]\\((https?:\\/\\/${o}[^\\s)]+)\\))|(<a\\s+[^>]*href="(${o}[^"]+)"[^>]*>(.*?)<\\/a>)`,"gi");return t=t.replace(s,(u,l,c,f,h,d,p)=>l&&c?`[${c}](${a}${encodeURIComponent(f)})`:d&&!d.startsWith("#")?`<a href="${a}${encodeURIComponent(d)}">${p}</a>`:u),i.forEach((u,l)=>{t=t.replace(`IMG_URL${l}`,u)}),t}function sf(t,e={}){return NN(t,r=>rO(r,e))}const iO={data(){return{currentTimer:null,currentIndex:0}},methods:{clearTimer(){this.currentTimer&&(clearTimeout(this.currentTimer),this.currentTimer=null)},startCurrentTimer(t={}){const{printCount:e=1,printCountTime:r=16,hideCursorPoint:n=!1,isFinal:i=!1}=t;this.clearTimer(),this.currentTimer=setTimeout(()=>{const a=e;this.currentIndex+=a,this.renderText=n?this.currentText.substring(0,this.currentIndex):this.currentText.substring(0,this.currentIndex)+"CURSOR_POINT",(this.currentIndex<this.currentText.length||!i)&&this.startCurrentTimer(t)},r)}},beforeDestroy(){this.clearTimer()}};function aO(t,e={}){const{type:r="text/javascript",crossOrigin:n}=e;return new Promise((i,a)=>{if(document.querySelector(`script[src="${t}"]`)){i();return}const o=document.createElement("script");o.src=t,o.type=r,n&&(o.crossOrigin=n),o.onload=i,o.onerror=()=>a(new Error(`Failed to load: ${t}`)),document.head.appendChild(o)})}function oO(){const t=Date.now(),e=5*60*1e3;return Math.floor(t/e)*e}async function sO(){try{const t=window.tdWidgetSrc||"https://cdn.xiaowei.qq.com/webim/assets/static/widget/release/lib/js/",e=oO();return await aO(`${t}adp-widget.js?nounce=${e}`,{type:"module"}),!0}catch(t){throw console.error("Failed to load adp-widget:",t),t}}Pa.config&&!Pa.config.ignoredElements.includes("adp-widget")&&Pa.config.ignoredElements.push("adp-widget");const uO={name:"MsgWidget",props:{output:{type:String,default:""},locale:{type:String,default:"zh-CN"},disable:{type:Boolean,default:!1}},data(){return{loaded:!1}},async mounted(){try{await sO(),this.loaded=!0}catch(t){console.error("[MsgWidget] 加载 adp-widget 失败:",t)}},methods:{handleAction(t){const{action:e}=t.detail||{};this.$emit("widget-action",e),this.$emit("widget-event",t)},handleRendered(t){const{success:e,config:r,error:n,timestamp:i}=t.detail||{};this.$emit("widget-rendered",{success:e,config:r,error:n,timestamp:i})}}};var lO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"lke__widget-container"},[e.output&&e.loaded?r("adp-widget",{ref:"widget",attrs:{locale:e.locale,"widget-json":e.output,disable:e.disable},on:{"widget-rendered":e.handleRendered,"widget-action":e.handleAction}}):e._e()],1)},cO=[],fO=pr(uO,lO,cO,!1,null,"c152fdb4",null,null);const qb=fO.exports,Y=(...t)=>{console.log("[StreamAudioPlayer24]",...t)};let Zb=class{constructor(){this.playMode=null,this.audioContext=null,this.audioQueue=[],this.pendingChunks=[],this.isPlaying=!1,this.totalDuration=0,this.estimatedDuration=0,this.pausedAt=0,this.startedAt=0,this.timeUpdateInterval=null,this.scheduledSources=[],this.nextScheduleTime=0,this.scheduledCount=0,this.autoPlayCheckInterval=null,this.autoPlayCheckWaitTime=0,this.processedChunkCount=0,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.decodeAheadCount=1;const e=this.isMobileDevice();this.maxDecodedBuffers=e?8:20,this.playedBufferCount=0,this.audioElement=null,this.iosUnlockAudio=null,this.mediaStreamDestination=null,this.wasPlayingBeforeHidden=!1,this.handleVisibilityChange=null,this.onPlayCallback=null,this.onPauseCallback=null,this.onEndCallback=null,this.onErrorCallback=null,this.onTimeUpdateCallback=null,this.onDurationChangeCallback=null,this.onUrlReadyCallback=null,this.generationComplete=!1,this.durationFromUrlSet=!1,this.urlReady=!1,this.fullAudioUrl=null,this.preloadedAudioElement=null}isMobileDevice(){return typeof navigator>"u"?!1:/Android|iPhone|iPad|iPod|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}initAudioContext(){if(!this.audioContext)try{const e=window.AudioContext||window.webkitAudioContext;this.audioContext=new e,Y("[initAudioContext] AudioContext 创建成功",{state:this.audioContext.state,sampleRate:this.audioContext.sampleRate,isIOS:/iPhone|iPad|iPod/i.test(navigator.userAgent)}),this.audioContext.onstatechange=()=>{if(Y("[AudioContext.onstatechange] 状态变化:",this.audioContext.state),(this.audioContext.state==="interrupted"||this.audioContext.state==="suspended")&&this.isPlaying&&this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[AudioContext.onstatechange] iOS audio 元素已暂停")}catch{}},this.handleVisibilityChange=()=>{var r,n,i,a;document.hidden?(this.wasPlayingBeforeHidden=this.isPlaying,Y("[visibilitychange] 页面隐藏,记录播放状态:",this.wasPlayingBeforeHidden)):(Y("[visibilitychange] 页面可见",{wasPlayingBeforeHidden:this.wasPlayingBeforeHidden,isPlaying:this.isPlaying,audioContextState:(r=this.audioContext)==null?void 0:r.state}),this.wasPlayingBeforeHidden&&(((n=this.audioContext)==null?void 0:n.state)==="suspended"||((i=this.audioContext)==null?void 0:i.state)==="interrupted"?this.audioContext.resume().then(()=>{Y("[visibilitychange] AudioContext 已恢复"),this.isPlaying&&this.iosUnlockAudio&&this.iosUnlockAudio.play().catch(o=>{Y("[visibilitychange] iOS audio 恢复播放失败:",o)})}).catch(o=>{Y("[visibilitychange] AudioContext 恢复失败:",o),this.isPlaying&&(this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback())}):((a=this.audioContext)==null?void 0:a.state)==="running"&&this.isPlaying&&this.iosUnlockAudio&&this.iosUnlockAudio.play().catch(o=>{Y("[visibilitychange] iOS audio 恢复播放失败:",o)})),this.wasPlayingBeforeHidden=!1)},document.addEventListener("visibilitychange",this.handleVisibilityChange),/iPhone|iPad|iPod/i.test(navigator.userAgent)&&this.setupIOSAudioRoute()}catch(e){console.error("[initAudioContext] 创建 AudioContext 失败:",e),this.onErrorCallback&&this.onErrorCallback(new Error("浏览器不支持音频播放"))}}setupIOSAudioRoute(){if(this.audioContext)try{if(typeof this.audioContext.createMediaStreamDestination!="function"){Y("[setupIOSAudioRoute] 浏览器不支持 createMediaStreamDestination");return}this.mediaStreamDestination=this.audioContext.createMediaStreamDestination(),this.iosUnlockAudio=document.createElement("audio"),this.iosUnlockAudio.srcObject=this.mediaStreamDestination.stream,this.iosUnlockAudio.setAttribute("playsinline","true"),this.iosUnlockAudio.setAttribute("webkit-playsinline","true"),this.iosUnlockAudio.onerror=e=>{Y("[setupIOSAudioRoute] iOS audio 元素错误:",e)},Y("[setupIOSAudioRoute] iOS 音频路由设置完成")}catch(e){console.error("[setupIOSAudioRoute] 设置失败:",e),this.mediaStreamDestination=null,this.iosUnlockAudio=null}}getAudioDestination(){return this.mediaStreamDestination?this.mediaStreamDestination:this.audioContext?this.audioContext.destination:null}async startIOSAudioElement(){if(this.iosUnlockAudio)try{await this.iosUnlockAudio.play(),Y("[startIOSAudioElement] iOS audio 元素播放启动成功")}catch(e){Y("[startIOSAudioElement] iOS audio 元素播放失败:",e)}}initAudioElement(){this.audioElement||(this.audioElement=new Audio,this.audioElement.preload="metadata",this.audioElement.addEventListener("play",()=>{this.isPlaying=!0,this.onPlayCallback&&this.onPlayCallback()}),this.audioElement.addEventListener("pause",()=>{this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback()}),this.audioElement.addEventListener("ended",()=>{this.isPlaying=!1,this.onEndCallback&&this.onEndCallback()}),this.audioElement.addEventListener("timeupdate",()=>{this.onTimeUpdateCallback&&this.onTimeUpdateCallback(this.audioElement.currentTime,this.audioElement.duration||0)}),this.audioElement.addEventListener("durationchange",()=>{this.totalDuration=this.audioElement.duration||0,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}),this.audioElement.addEventListener("error",e=>{this.onErrorCallback&&this.onErrorCallback(new Error("音频加载失败: "+(e.message||"未知错误")))}),this.audioElement.addEventListener("loadedmetadata",()=>{this.totalDuration=this.audioElement.duration||0,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}))}setPlayMode(e){this.playMode!==e&&(this.playMode==="stream"?this.clearStreamMode():this.playMode==="url"&&this.clearUrlMode(),this.playMode=e,e==="stream"?this.initAudioContext():e==="url"&&this.initAudioElement())}clearStreamMode(){this.stop(),this.audioQueue=[],this.pendingChunks=[],this.totalDuration=0,this.estimatedDuration=0,this.scheduledCount=0,this.nextScheduleTime=0,this.processedChunkCount=0,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.playedBufferCount=0,this.generationComplete=!1,this.fullAudioUrl=null,this.urlReady=!1,this.preloadedAudioElement=null,this.iosUnlockAudio&&(this.iosUnlockAudio.pause(),this.iosUnlockAudio.srcObject=null,this.iosUnlockAudio=null),this.mediaStreamDestination=null,this.handleVisibilityChange&&(document.removeEventListener("visibilitychange",this.handleVisibilityChange),this.handleVisibilityChange=null),this.audioContext&&(this.audioContext.onstatechange=null,this.audioContext.close().catch(()=>{}),this.audioContext=null),this.wasPlayingBeforeHidden=!1}clearUrlMode(){this.audioElement&&(this.audioElement.pause(),this.audioElement.src="")}setAudioUrl(e){e&&(this.setPlayMode("url"),this.audioElement.src=e,this.audioElement.load())}async ensureAudioContextRunning(){if(!this.audioContext)throw new Error("AudioContext not initialized");if(Y("[ensureAudioContextRunning] 当前状态:",this.audioContext.state),this.audioContext.state==="suspended")try{await this.audioContext.resume(),Y("[ensureAudioContextRunning] resume 成功,新状态:",this.audioContext.state),/iPhone|iPad|iPod/i.test(navigator.userAgent)&&await this.playUnlockSound()}catch(e){throw console.error("[ensureAudioContextRunning] resume 失败:",e),new Error("无法激活音频上下文")}else if(this.audioContext.state==="interrupted")try{await this.audioContext.resume(),Y("[ensureAudioContextRunning] 从 interrupted 状态恢复")}catch(e){throw console.error("[ensureAudioContextRunning] 从 interrupted 恢复失败:",e),new Error("无法恢复音频上下文")}}async playUnlockSound(){if(this.audioContext)try{const e=this.audioContext.createBuffer(1,1,this.audioContext.sampleRate),r=this.audioContext.createBufferSource();r.buffer=e,r.connect(this.getAudioDestination()),r.start(0),Y("[playUnlockSound] 播放解锁音频完成")}catch(e){Y("[playUnlockSound] 播放解锁音频失败(可忽略):",e)}}addBase64ChunkLazy(e,r=1){if(!e)return;this.setPlayMode("stream"),this.pendingChunks.push(e);const n=(e.length*.75/1024).toFixed(2);Y(`[addBase64ChunkLazy] 添加第 ${this.pendingChunks.length+this.processedChunkCount} 个chunk`,{chunkSize:`${n} KB`,pendingChunks:this.pendingChunks.length,processedChunkCount:this.processedChunkCount,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,isPlaying:this.isPlaying,totalDuration:this.totalDuration.toFixed(2),estimatedDuration:this.estimatedDuration.toFixed(2)}),this.estimatedDuration+=r,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration()),this.autoPlayCheckWaitTime>0&&(Y("[addBase64ChunkLazy] 重置等待超时时间"),this.autoPlayCheckWaitTime=0),this.isPlaying?(Y("[addBase64ChunkLazy] 正在播放,触发 decodeAhead"),this.decodeAhead()):Y("[addBase64ChunkLazy] 未在播放状态,不触发解码")}async addBase64Chunk(e){e&&this.addBase64ChunkLazy(e)}getDisplayDuration(){return Math.floor(this.totalDuration+this.estimatedDuration)}async decodeAhead(){let e=0;if(this.audioQueue.forEach(i=>{e+=i.duration}),Y("[decodeAhead] 开始",{decodingInProgress:this.decodingInProgress,pendingChunks:this.pendingChunks.length,audioQueueLength:this.audioQueue.length,currentQueueDuration:e.toFixed(2),scheduledCount:this.scheduledCount,isPlaying:this.isPlaying,generationComplete:this.generationComplete,totalDuration:this.totalDuration.toFixed(2)}),this.decodingInProgress){Y("[decodeAhead] 已在解码中,跳过");return}if(this.pendingChunks.length===0){Y("[decodeAhead] 没有待解码的 chunk,跳过");return}const r=this.audioQueue.length-this.scheduledCount;if(Y("[decodeAhead] 未调度数量检查",{unscheduledCount:r,decodeAheadCount:this.decodeAheadCount,needMoreDecode:r<this.decodeAheadCount}),r>=this.decodeAheadCount&&this.pendingChunks.length>0){Y("[decodeAhead] 已有足够预解码 buffer,100ms 后再检查"),setTimeout(()=>this.decodeAhead(),100);return}this.decodingInProgress=!0;const n=this.processedChunkCount+1;try{const i=this.pendingChunks.shift(),a=(i.length*.75/1024).toFixed(2);Y(`[decodeAhead] 开始解码第 ${n} 个chunk`,{size:`${a} KB`});const o=window.atob(i),s=new Uint8Array(o.length);for(let l=0;l<o.length;l++)s[l]=o.charCodeAt(l);const u=s.buffer;await this.addAudioChunkInternal(u),Y(`[decodeAhead] 第 ${n} 个chunk 解码完成`,{audioQueueLength:this.audioQueue.length,totalDuration:this.totalDuration.toFixed(2),durationFromUrlSet:this.durationFromUrlSet}),this.durationFromUrlSet||(this.estimatedDuration>0&&(this.estimatedDuration=Math.max(0,this.estimatedDuration-1)),this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration()))}catch(i){console.error(`[decodeAhead] 解码第 ${n} 个chunk 失败:`,i),this.onErrorCallback&&this.onErrorCallback(i)}finally{this.decodingInProgress=!1}this.pendingChunks.length>0&&this.isPlaying?(Y("[decodeAhead] 继续解码下一个chunk"),setTimeout(()=>this.decodeAhead(),0)):Y("[decodeAhead] 解码结束",{pendingChunks:this.pendingChunks.length,isPlaying:this.isPlaying})}async processAudioDataArray(e){if(!e||!Array.isArray(e))return;const r=e.slice(this.processedChunkCount);Y("[processAudioDataArray] 处理音频数据数组",{totalLength:e.length,processedChunkCount:this.processedChunkCount,newChunksCount:r.length});for(const n of r)await this.addBase64Chunk(n),this.processedChunkCount++;Y("[processAudioDataArray] 处理完成",{processedChunkCount:this.processedChunkCount})}decodeAudioDataCompat(e){const r=(e.byteLength/1024).toFixed(2);return Y("[decodeAudioDataCompat] 开始解码",{size:`${r} KB`}),new Promise((n,i)=>{const a=this.audioContext.decodeAudioData(e,o=>{Y("[decodeAudioDataCompat] 解码成功",{duration:o.duration.toFixed(2),sampleRate:o.sampleRate,channels:o.numberOfChannels}),n(o)},o=>{console.error("[decodeAudioDataCompat] 解码失败",{error:(o==null?void 0:o.message)||o,bufferSize:`${r} KB`}),i(o||new Error("解码音频数据失败"))});a&&typeof a.then=="function"&&a.then(n).catch(o=>{console.error("[decodeAudioDataCompat] Promise 解码失败",{error:(o==null?void 0:o.message)||o,bufferSize:`${r} KB`}),i(o)})})}async addAudioChunk(e){return this.addAudioChunkInternal(e)}async addAudioChunkInternal(e){if(this.setPlayMode("stream"),!this.audioContext)throw new Error("AudioContext not initialized");try{let r;e instanceof Blob?r=await e.arrayBuffer():r=e;const n=(r.byteLength/1024).toFixed(2);Y("[addAudioChunkInternal] 开始解码 ArrayBuffer",{size:`${n} KB`});const i=r.slice(0),a=await this.decodeAudioDataCompat(i),o=this.audioQueue.length,s=this.totalDuration;this.audioQueue.push(a),this.durationFromUrlSet||(this.totalDuration+=a.duration),Y("[addAudioChunkInternal] 解码成功",{bufferDuration:a.duration.toFixed(2),sampleRate:a.sampleRate,numberOfChannels:a.numberOfChannels,length:a.length,audioQueueLength:`${o} -> ${this.audioQueue.length}`,totalDuration:`${s.toFixed(2)} -> ${this.totalDuration.toFixed(2)}`,durationFromUrlSet:this.durationFromUrlSet}),this.isPlaying&&!this.isSchedulingFromPosition?(Y("[addAudioChunkInternal] 正在播放,调用 scheduleNewChunks"),this.scheduleNewChunks()):this.isSchedulingFromPosition?Y("[addAudioChunkInternal] 正在执行 scheduleFromPosition,跳过 scheduleNewChunks"):Y("[addAudioChunkInternal] 未在播放状态,不调度"),this.onDurationChangeCallback&&!this.durationFromUrlSet&&this.onDurationChangeCallback(this.getDisplayDuration())}catch(r){console.error("[addAudioChunkInternal] 解码音频数据失败:",r),this.onErrorCallback&&this.onErrorCallback(r)}}async addPCMChunk(e,r=24e3,n=1,i=16){if(this.setPlayMode("stream"),!this.audioContext)throw new Error("AudioContext not initialized");try{const a=i/8,o=e.byteLength/(a*n),s=this.audioContext.createBuffer(n,o,r),u=new DataView(e);for(let l=0;l<n;l++){const c=s.getChannelData(l);for(let f=0;f<o;f++){let h;if(i===16)h=u.getInt16((f*n+l)*2,!0)/32768;else if(i===8)h=(u.getUint8(f*n+l)-128)/128;else if(i===32)h=u.getFloat32((f*n+l)*4,!0);else throw new Error(`Unsupported bits per sample: ${i}`);c[f]=h}}this.audioQueue.push(s),this.totalDuration+=s.duration,this.isPlaying&&this.audioContext&&this.scheduleNewChunks(),this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}catch(a){this.onErrorCallback&&this.onErrorCallback(a)}}scheduleNewChunks(){if(!this.audioContext||!this.isPlaying){Y("[scheduleNewChunks] 跳过",{hasAudioContext:!!this.audioContext,isPlaying:this.isPlaying});return}const e=this.audioContext.currentTime,r=this.scheduledCount;this.scheduledCount>this.audioQueue.length&&(Y("[scheduleNewChunks] 警告:scheduledCount 超出 audioQueue 长度!",{scheduledCount:this.scheduledCount,audioQueueLength:this.audioQueue.length,playedBufferCount:this.playedBufferCount}),this.scheduledCount=this.audioQueue.length),Y("[scheduleNewChunks] 开始调度",{audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,toSchedule:this.audioQueue.length-this.scheduledCount,currentTime:e.toFixed(3),nextScheduleTime:this.nextScheduleTime.toFixed(3),pendingChunks:this.pendingChunks.length});for(let n=this.scheduledCount;n<this.audioQueue.length;n++){const i=this.audioQueue[n],a=this.audioContext.createBufferSource();a.buffer=i,a.connect(this.getAudioDestination());const o=Math.max(e,this.nextScheduleTime);Y(`[scheduleNewChunks] 调度第 ${n+1} 个buffer`,{bufferDuration:i.duration.toFixed(2),scheduleTime:o.toFixed(3),currentTime:e.toFixed(3)}),a.start(o,0,i.duration),this.nextScheduleTime=o+i.duration,this.scheduledCount++,this.scheduledSources.push(a),a.onended=()=>{const s=this.scheduledSources.indexOf(a);if(s===-1){Y(`[sourceNode.onended] 第 ${n+1} 个buffer 被手动停止,跳过后续逻辑`);return}if(this.scheduledSources.splice(s,1),this.playedBufferCount++,this.cleanupOldBuffers(),Y(`[sourceNode.onended] 第 ${n+1} 个buffer 播放结束`,{scheduledSourcesLength:this.scheduledSources.length,isPlaying:this.isPlaying,pendingChunks:this.pendingChunks.length,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,generationComplete:this.generationComplete,playedBufferCount:this.playedBufferCount}),this.decodeAhead(),this.scheduledSources.length===0&&this.isPlaying){let u=0;this.audioQueue.forEach(l=>{u+=l.duration}),Y("[sourceNode.onended] 所有已调度片段播放完毕,尝试调度新片段",{audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledCount:this.audioQueue.length-this.scheduledCount,remainingQueueDuration:u.toFixed(2),pendingChunks:this.pendingChunks.length}),this.scheduleNewChunks(),this.scheduledSources.length===0&&(Y("[sourceNode.onended] 调度后仍无片段",{pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledBuffers:this.audioQueue.length-this.scheduledCount}),this.pendingChunks.length>0?(Y("[sourceNode.onended] 还有待解码chunk,启动 autoPlayCheck"),this.startAutoPlayCheck()):this.audioQueue.length>this.scheduledCount?(Y("[sourceNode.onended] 还有未调度的buffer,重新调度"),this.scheduleNewChunks()):this.generationComplete?(Y("[sourceNode.onended] 生成完成,结束播放"),this.handlePlaybackEnd()):(Y("[sourceNode.onended] 等待新数据,启动 autoPlayCheck"),this.startAutoPlayCheck()))}}}Y("[scheduleNewChunks] 调度完成",{scheduledCount:`${r} -> ${this.scheduledCount}`,scheduledSourcesLength:this.scheduledSources.length,nextScheduleTime:this.nextScheduleTime.toFixed(3)})}async play(){if(this.playMode==="url"&&this.audioElement){try{await this.audioElement.play()}catch(e){this.onErrorCallback&&this.onErrorCallback(e)}return}if(!this.audioContext){this.onErrorCallback&&this.onErrorCallback(new Error("AudioContext not initialized"));return}if(!this.isPlaying){try{await this.ensureAudioContextRunning(),await this.startIOSAudioElement()}catch(e){this.onErrorCallback&&this.onErrorCallback(e);return}if(this.audioQueue.length===0&&this.pendingChunks.length>0&&await this.decodeFirstChunk(),this.audioQueue.length===0){Y("[play] 没有可播放的音频数据");return}this.isPlaying=!0,this.startedAt=this.audioContext.currentTime-this.pausedAt,this.pausedAt===0&&(this.scheduledCount=0,this.nextScheduleTime=this.audioContext.currentTime),this.pausedAt===0?this.scheduleNewChunks():this.scheduleFromPosition(this.pausedAt),this.decodeAhead(),this.onPlayCallback&&this.onPlayCallback(),this.startTimeUpdate(),Y("[play] 播放开始",{audioContextState:this.audioContext.state,audioQueueLength:this.audioQueue.length,pausedAt:this.pausedAt,isIOS:/iPhone|iPad|iPod/i.test(navigator.userAgent)})}}async decodeFirstChunk(){if(this.pendingChunks.length===0)return;const e=this.pendingChunks.shift();try{const r=window.atob(e),n=new Uint8Array(r.length);for(let a=0;a<r.length;a++)n[a]=r.charCodeAt(a);const i=n.buffer;await this.addAudioChunkInternal(i),this.estimatedDuration>0&&(this.estimatedDuration=Math.max(0,this.estimatedDuration-1))}catch(r){console.error("解码首个 chunk 失败:",r)}}scheduleFromPosition(e){if(!this.audioContext)return;this.isSchedulingFromPosition=!0;let r=0;const n=this.audioContext.currentTime;let i=n,a=0;for(let o=0;o<this.audioQueue.length;o++){const s=this.audioQueue[o],u=r,l=r+s.duration;if(l>e){const c=this.audioContext.createBufferSource();c.buffer=s,c.connect(this.getAudioDestination());let f=0,h=s.duration;e>u&&(f=e-u,h=s.duration-f,i=n),c.start(i,f,h),i+=h,this.scheduledSources.push(c),a++,c.onended=()=>{const d=this.scheduledSources.indexOf(c);if(d===-1){Y("[scheduleFromPosition.onended] sourceNode 被手动停止,跳过后续逻辑");return}this.scheduledSources.splice(d,1),this.playedBufferCount++,this.cleanupOldBuffers(),this.decodeAhead(),this.scheduledSources.length===0&&this.isPlaying&&(this.scheduleNewChunks(),this.scheduledSources.length===0&&(Y("[scheduleFromPosition.onended] 调度后仍无片段",{pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledBuffers:this.audioQueue.length-this.scheduledCount}),this.pendingChunks.length>0?(Y("[scheduleFromPosition.onended] 还有待解码chunk,启动 autoPlayCheck"),this.startAutoPlayCheck()):this.audioQueue.length>this.scheduledCount?(Y("[scheduleFromPosition.onended] 还有未调度的buffer,重新调度"),this.scheduleNewChunks()):this.generationComplete?(Y("[scheduleFromPosition.onended] 生成完成,结束播放"),this.handlePlaybackEnd()):(Y("[scheduleFromPosition.onended] 等待新数据,启动 autoPlayCheck"),this.startAutoPlayCheck())))}}r=l}this.scheduledCount=this.audioQueue.length,this.nextScheduleTime=i,this.isSchedulingFromPosition=!1,Y("[scheduleFromPosition] 调度完成",{startPosition:e.toFixed(2),scheduledInThisCall:a,scheduledCount:this.scheduledCount,nextScheduleTime:this.nextScheduleTime.toFixed(3),scheduledSourcesLength:this.scheduledSources.length})}pause(){if(this.playMode==="url"&&this.audioElement){this.audioElement.pause();return}if(!(!this.isPlaying||!this.audioContext)){this.pausedAt=this.audioContext.currentTime-this.startedAt;for(const e of this.scheduledSources)try{e.stop()}catch{}if(this.scheduledSources=[],this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[pause] iOS audio 元素已暂停")}catch{}this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback(),this.stopTimeUpdate(),this.stopAutoPlayCheck()}}stop(){if(this.playMode==="url"&&this.audioElement){this.audioElement.pause(),this.audioElement.currentTime=0,this.isPlaying=!1;return}this.pause(),this.pausedAt=0,this.startedAt=0,this.scheduledCount=0,this.nextScheduleTime=0,this.stopTimeUpdate(),this.stopAutoPlayCheck()}clear(){this.stop(),this.audioQueue=[],this.pendingChunks=[],this.totalDuration=0,this.estimatedDuration=0,this.scheduledCount=0,this.nextScheduleTime=0,this.processedChunkCount=0,this.generationComplete=!1,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.durationFromUrlSet=!1}handlePlaybackEnd(){let e=0;if(this.audioQueue.forEach(r=>{e+=r.duration}),Y("[handlePlaybackEnd] 播放结束",{totalDuration:this.totalDuration.toFixed(2),actualDecodedDuration:e.toFixed(2),audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,processedChunkCount:this.processedChunkCount,scheduledCount:this.scheduledCount,playedBufferCount:this.playedBufferCount,generationComplete:this.generationComplete,durationFromUrlSet:this.durationFromUrlSet}),this.isPlaying=!1,this.pausedAt=0,this.startedAt=0,this.stopTimeUpdate(),this.stopAutoPlayCheck(),this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[handlePlaybackEnd] iOS audio 元素已暂停")}catch{}this.onEndCallback&&this.onEndCallback()}async markGenerationComplete(e){let r=0;this.audioQueue.forEach(n=>{r+=n.duration}),Y("[markGenerationComplete] 标记生成完成",{audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,scheduledSourcesLength:this.scheduledSources.length,totalDuration:this.totalDuration.toFixed(2),currentDecodedDuration:r.toFixed(2),estimatedDuration:this.estimatedDuration.toFixed(2),isPlaying:this.isPlaying,hasAudioUrl:!!e,processedChunkCount:this.processedChunkCount}),this.generationComplete=!0,e&&(this.fullAudioUrl=e),this.isPlaying&&this.pendingChunks.length>0&&(Y("[markGenerationComplete] 正在播放,触发按需解码"),this.decodeAhead()),this.autoPlayCheckInterval&&this.scheduledSources.length===0&&this.pendingChunks.length===0&&(Y("[markGenerationComplete] 正在等待且无剩余片段,立即结束"),this.handlePlaybackEnd()),e?this.getDurationFromUrl(e):this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration())}getDurationFromUrl(e){Y("[getDurationFromUrl] 开始从 URL 获取时长并预加载",{audioUrl:e}),this.preloadedAudioElement=new Audio,this.preloadedAudioElement.preload="auto";const r=this.preloadedAudioElement;let n=!1;const i=()=>{if(n)return;n=!0;const s=r.duration;Y("[getDurationFromUrl] 获取时长成功",{duration:s.toFixed(2)}),this.totalDuration=s,this.estimatedDuration=0,this.durationFromUrlSet=!0,this.onDurationChangeCallback&&this.onDurationChangeCallback(Math.floor(s))},a=()=>{Y("[getDurationFromUrl] URL 预加载完成,可以 seek"),this.urlReady=!0,this.onUrlReadyCallback&&this.onUrlReadyCallback()},o=s=>{Y("[getDurationFromUrl] 获取时长/预加载失败",s),this.urlReady=!0,this.preloadedAudioElement=null,this.onDurationChangeCallback&&!n&&this.onDurationChangeCallback(this.getDisplayDuration()),this.onUrlReadyCallback&&this.onUrlReadyCallback()};r.addEventListener("loadedmetadata",i),r.addEventListener("canplay",a),r.addEventListener("canplaythrough",a),r.addEventListener("error",o),r.src=e,r.load()}async decodeAllPendingChunks(){for(Y("[decodeAllPendingChunks] 开始解码所有待解码 chunk",{pendingChunks:this.pendingChunks.length});this.pendingChunks.length>0;){const e=this.pendingChunks.shift(),r=this.processedChunkCount+1;try{const n=(e.length*.75/1024).toFixed(2);Y(`[decodeAllPendingChunks] 解码第 ${r} 个chunk`,{size:`${n} KB`});const i=window.atob(e),a=new Uint8Array(i.length);for(let s=0;s<i.length;s++)a[s]=i.charCodeAt(s);const o=a.buffer;await this.addAudioChunkInternal(o),this.processedChunkCount++,Y(`[decodeAllPendingChunks] 第 ${r} 个chunk 解码完成`,{totalDuration:this.totalDuration.toFixed(2)})}catch(n){console.error(`[decodeAllPendingChunks] 解码第 ${r} 个chunk 失败:`,n)}}Y("[decodeAllPendingChunks] 所有 chunk 解码完成",{audioQueueLength:this.audioQueue.length,totalDuration:this.totalDuration.toFixed(2)})}cleanupOldBuffers(){const e=this.audioQueue.length;if(Y("[cleanupOldBuffers] 检查",{currentQueueLength:e,maxDecodedBuffers:this.maxDecodedBuffers,playedBufferCount:this.playedBufferCount,scheduledCount:this.scheduledCount,pendingChunks:this.pendingChunks.length,totalDuration:this.totalDuration.toFixed(2)}),e>this.maxDecodedBuffers&&this.playedBufferCount>0){const r=Math.min(e-this.maxDecodedBuffers,this.playedBufferCount);if(r>0){let n=0;for(let o=0;o<r;o++)n+=this.audioQueue[o].duration;const i=this.audioQueue.splice(0,r);this.scheduledCount=Math.max(0,this.scheduledCount-r),this.playedBufferCount=Math.max(0,this.playedBufferCount-r);let a=0;i.forEach(o=>{a+=o.length*o.numberOfChannels*4/1024}),Y("[cleanupOldBuffers] 内存回收",{cleanedCount:r,cleanedDuration:n.toFixed(2),freedMemoryKB:a.toFixed(2),remainingQueueLength:this.audioQueue.length,newScheduledCount:this.scheduledCount,newPlayedBufferCount:this.playedBufferCount,isMobile:this.isMobileDevice()})}}}startAutoPlayCheck(){if(this.autoPlayCheckInterval){Y("[startAutoPlayCheck] 已有检查定时器,跳过");return}Y("[startAutoPlayCheck] 启动等待新数据检查"),this.autoPlayCheckWaitTime=0;const e=180*1e3;this.autoPlayCheckInterval=window.setInterval(()=>{this.autoPlayCheckWaitTime+=200,Y("[autoPlayCheck] 检查",{waitTime:this.autoPlayCheckWaitTime,scheduledCount:this.scheduledCount,audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,scheduledSourcesLength:this.scheduledSources.length}),this.scheduledCount<this.audioQueue.length?(Y("[autoPlayCheck] 发现新片段,调度"),this.scheduleNewChunks(),this.scheduledSources.length>0&&(Y("[autoPlayCheck] 调度成功,停止检查"),this.stopAutoPlayCheck())):this.scheduledSources.length>0?(Y("[autoPlayCheck] 还有片段在播放中,停止检查"),this.stopAutoPlayCheck()):this.pendingChunks.length>0?(Y("[autoPlayCheck] 还有待解码chunk,触发解码"),this.decodeAhead()):this.generationComplete?(Y("[autoPlayCheck] 生成完成且无播放片段和待解码chunk,结束播放"),this.handlePlaybackEnd()):this.autoPlayCheckWaitTime>=e&&(Y("[autoPlayCheck] 等待超时,结束播放"),this.handlePlaybackEnd())},200)}stopAutoPlayCheck(){this.autoPlayCheckInterval&&(clearInterval(this.autoPlayCheckInterval),this.autoPlayCheckInterval=null)}startTimeUpdate(){this.timeUpdateInterval||(this.timeUpdateInterval=window.setInterval(()=>{if(this.isPlaying&&this.audioContext){const e=this.audioContext.currentTime-this.startedAt;this.onTimeUpdateCallback&&this.onTimeUpdateCallback(e,this.totalDuration)}},100))}stopTimeUpdate(){this.timeUpdateInterval&&(clearInterval(this.timeUpdateInterval),this.timeUpdateInterval=null)}seek(e){if(Y("[seek] 开始",{time:e,playMode:this.playMode,generationComplete:this.generationComplete,urlReady:this.urlReady,hasPreloadedAudio:!!this.preloadedAudioElement,isPlaying:this.isPlaying}),this.playMode==="url"&&this.audioElement){this.audioElement.currentTime=Math.max(0,Math.min(e,this.audioElement.duration||0));return}if(this.playMode==="stream"){if(this.generationComplete&&this.urlReady&&this.preloadedAudioElement){Y("[seek] 切换到 URL 模式(使用预加载的 audio 元素)");const n=this.isPlaying;this.stopTimeUpdate();for(const i of this.scheduledSources)try{i.stop()}catch{}this.scheduledSources=[],this.isPlaying=!1,this.audioElement=this.preloadedAudioElement,this.preloadedAudioElement=null,this.playMode="url",this.bindAudioElementEvents(),this.audioElement.currentTime=Math.max(0,Math.min(e,this.audioElement.duration||0)),n&&this.audioElement.play().catch(i=>{Y("[seek] 播放失败:",i)});return}const r=this.isPlaying;r&&this.pause(),this.pausedAt=Math.max(0,Math.min(e,this.totalDuration)),r&&this.play()}}bindAudioElementEvents(){this.audioElement&&(this.audioElement.addEventListener("play",()=>{this.isPlaying=!0,this.onPlayCallback&&this.onPlayCallback()}),this.audioElement.addEventListener("pause",()=>{this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback()}),this.audioElement.addEventListener("ended",()=>{this.isPlaying=!1,this.onEndCallback&&this.onEndCallback()}),this.audioElement.addEventListener("timeupdate",()=>{this.onTimeUpdateCallback&&this.onTimeUpdateCallback(this.audioElement.currentTime,this.audioElement.duration||0)}),this.audioElement.addEventListener("error",e=>{this.onErrorCallback&&this.onErrorCallback(new Error("音频加载失败: "+(e.message||"未知错误")))}))}getPlayState(){return this.isPlaying}getDuration(){return this.playMode==="url"&&this.audioElement?this.audioElement.duration||0:this.getDisplayDuration()}getCurrentTime(){return this.playMode==="url"&&this.audioElement?this.audioElement.currentTime||0:this.isPlaying&&this.audioContext?this.audioContext.currentTime-this.startedAt:this.pausedAt}getAudioQueue(){return[...this.audioQueue]}async getAudioData(){const e=[];for(const r of this.audioQueue){const n=r.numberOfChannels,i=r.length,a=new ArrayBuffer(i*n*2),o=new DataView(a);for(let s=0;s<n;s++){const u=r.getChannelData(s);for(let l=0;l<i;l++){const c=Math.max(-1,Math.min(1,u[l])),f=c<0?c*32768:c*32767;o.setInt16((l*n+s)*2,f,!0)}}e.push(a)}return e}onPlay(e){this.onPlayCallback=e}onPause(e){this.onPauseCallback=e}onEnd(e){this.onEndCallback=e}onError(e){this.onErrorCallback=e}onTimeUpdate(e){this.onTimeUpdateCallback=e}onDurationChange(e){this.onDurationChangeCallback=e}onUrlReady(e){this.onUrlReadyCallback=e}isUrlReady(){return this.urlReady}destroy(){this.stop(),this.stopTimeUpdate(),this.stopAutoPlayCheck(),this.handleVisibilityChange&&(document.removeEventListener("visibilitychange",this.handleVisibilityChange),this.handleVisibilityChange=null),this.audioContext&&(this.audioContext.onstatechange=null,this.audioContext.close(),this.audioContext=null),this.audioQueue=[],this.iosUnlockAudio&&(this.iosUnlockAudio.pause(),this.iosUnlockAudio.srcObject=null,this.iosUnlockAudio=null),this.mediaStreamDestination=null,this.audioElement&&(this.audioElement.pause(),this.audioElement.src="",this.audioElement=null),this.playMode=null}},uf="https://cdn.xiaowei.qq.com/adp/assets/static/iconfont-XzKaDZdEa7j2GPL-1201.js",Vu={};function hO(t){const e={};return t.props.size&&(e.width=`${t.props.size}px`,e.height=`${t.props.size}px`),t.props.valign&&(e.verticalAlign=`${t.props.valign}px`),t.props.rotate&&(e.transform=`rotate(${t.props.rotate}deg)`),e}function dO(t){const e=t.props;return{"v-icon":!0,"is-horizontal":e.flip==="horizontal","is-vertical":e.flip==="vertical","v-icon--stroke":e.useStroke,"v-icon--fill":!e.useStroke}}function Yb(t){let e=document.createElement("script");e.type="text/javascript",e.src=t,document.getElementsByTagName("head")[0].appendChild(e)}const pO=t=>{let e=!1,r=Object.keys(Vu);r.forEach(n=>{Vu[n]===t&&(e=!0)}),e||(Vu[r.length]=t,Yb(t))},vO={name:"VIcon",functional:!0,props:{name:{type:String,required:!0},remote:{type:Boolean,default:!1},remoteSrc:{type:String,default:""},remotePrefix:{type:String,default:"v-"},loadDefaultRemoteIcons:{type:Boolean,default:!0},label:String,rotate:[Number,String],size:[Number,String],valign:[Number,String],flip:String,useStroke:Boolean,clazz:String,scoped:String},render(t,e){const r=hO(e);if(e.data.style)for(let n in e.data.style)r[n]=e.data.style[n];return!Vu.defaultRemoteSrc&&uf&&e.props.loadDefaultRemoteIcons&&(Vu.defaultRemoteSrc=uf,Yb(uf)),e.props.remoteSrc&&pO(e.props.remoteSrc),t("svg",{class:dO(e),style:r,attrs:{role:e.props.label?"img":"presentation","aria-label":e.props.label},on:e.data.nativeOn},[t("use",{attrs:{"xlink:href":"#"+e.props.remotePrefix+e.props.name,class:e.props.clazz},style:{pointerEvents:"none"}})])}},gO=vO,mO=null,yO=null;var _O=pr(gO,mO,yO,!1,null,null,null,null);const n2=_O.exports;const bO={name:"StreamAudioPlayer",components:{VIcon:n2},props:{audioData:{type:Object,required:!0}},data(){return{player:null,internalStatus:"pending",currentTime:0,duration:0,isDragging:!1,isHoveringProgress:!1,lastProcessedChunkCount:0,playModeDecided:!1,lastKnownIsComplete:!1,urlReady:!1,dragCleanup:null}},computed:{isGenerating(){return!this.audioData.isComplete},hasPlayableContent(){const t=!!this.audioData.audio_url,e=this.audioData.audio_data&&this.audioData.audio_data.length>0;return t||e},isDisabled(){return!this.hasPlayableContent},canSeek(){return!this.isGenerating&&this.urlReady},displayFileName(){return this.audioData.title?this.audioData.title:this.isGenerating?"音频生成中...":"音频文件"},statusText(){if(this.isDisabled)return"暂无音频";if(this.isGenerating&&this.duration===0)return"生成中...";const t=this.formatTime(this.currentTime),e=this.isGenerating?"生成中":this.formatTime(this.duration);return`${t} / ${e}`},statusClass(){return{generating:this.isGenerating,completed:this.internalStatus==="completed",playing:this.internalStatus==="playing",paused:this.internalStatus==="paused",disabled:this.isDisabled}},cardClass(){return{generating:this.isGenerating,completed:this.internalStatus==="completed",playing:this.internalStatus==="playing",paused:this.internalStatus==="paused",disabled:this.isDisabled,hoverable:!this.isDisabled&&!this.isGenerating}},progressPercentage(){return this.duration===0?0:this.currentTime/this.duration*100},showHandle(){return(this.isHoveringProgress||this.isDragging)&&!this.isDisabled&&!this.isGenerating},canPlay(){return!(this.isDisabled||this.isGenerating&&this.duration===0)},canDownload(){return!!this.audioData.audio_url},playButtonTitle(){return this.isDisabled?"暂无音频":this.isGenerating&&this.duration===0?"等待音频生成":this.internalStatus==="playing"?"暂停":"播放"},downloadButtonTitle(){return this.canDownload?"下载":this.isGenerating?"生成中,暂不可下载":"暂无可下载的音频"}},watch:{audioData:{handler(t){var r;if(!t||!this.player)return;console.log("[StreamAudioPlayer] audioData watch 触发:",{hasAudioUrl:!!t.audio_url,audioDataLength:(r=t.audio_data)==null?void 0:r.length,isComplete:t.isComplete,playModeDecided:this.playModeDecided,lastProcessedChunkCount:this.lastProcessedChunkCount,lastKnownIsComplete:this.lastKnownIsComplete,internalStatus:this.internalStatus}),!this.playModeDecided&&t.audio_url&&(console.log("[StreamAudioPlayer] 切换到 URL 模式"),this.handleAudioUrlChange(t.audio_url)),t.audio_data&&Array.isArray(t.audio_data)&&t.audio_data.length>this.lastProcessedChunkCount&&(!this.playModeDecided||this.player.playMode==="stream")&&(console.log("[StreamAudioPlayer] 处理新的音频片段"),this.handleAudioDataChange(t.audio_data)),!!t.isComplete&&!this.lastKnownIsComplete&&(this.lastKnownIsComplete=!0,this.handleGenerationComplete())},deep:!0,immediate:!1}},mounted(){this.initPlayer(),this.audioData&&(this.audioData.audio_data&&this.audioData.audio_data.length>0?this.handleAudioDataChange(this.audioData.audio_data):this.audioData.audio_url&&this.handleAudioUrlChange(this.audioData.audio_url),this.audioData.isComplete&&(this.lastKnownIsComplete=!0,this.handleGenerationComplete()))},beforeDestroy(){this.destroyPlayer()},beforeUnmount(){this.destroyPlayer()},methods:{initPlayer(){this.player=new Zb,this.player.onPlay(()=>{this.internalStatus="playing",this.$emit("play",this.audioData)}),this.player.onPause(()=>{this.internalStatus="paused",this.$emit("pause",this.audioData)}),this.player.onEnd(()=>{this.player.playMode==="url"?this.internalStatus="completed":this.isGenerating?this.internalStatus="paused":this.internalStatus="completed",this.currentTime=0,this.$emit("end",this.audioData)}),this.player.onTimeUpdate((t,e)=>{this.isDragging||(this.currentTime=t),this.duration=e,t>=e&&e>0&&!this.isGenerating&&(this.player.pause(),this.internalStatus="completed",this.currentTime=e)}),this.player.onDurationChange(t=>{this.duration=t}),this.player.onError(t=>{console.error("音频播放错误:",t),this.$emit("error",t)}),this.player.onUrlReady(()=>{console.log("[StreamAudioPlayer.vue] URL 预加载完成回调"),this.urlReady=!0}),this.checkInitialState()},checkInitialState(){this.isDisabled?this.internalStatus="disabled":this.isGenerating?this.internalStatus="generating":this.internalStatus="completed"},handleAudioUrlChange(t){!this.player||!t||this.playModeDecided&&this.player.playMode!=="url"||(this.player.setAudioUrl(t),this.playModeDecided=!0,this.internalStatus="completed")},handleAudioDataChange(t){var r,n,i,a,o;if(!this.player||!t)return;this.playModeDecided=!0;const e=t.length-this.lastProcessedChunkCount;if(console.log("[StreamAudioPlayer.vue] handleAudioDataChange",{totalChunks:t.length,lastProcessedChunkCount:this.lastProcessedChunkCount,newChunksCount:e,playerPendingChunks:(r=this.player.pendingChunks)==null?void 0:r.length,playerAudioQueueLength:(n=this.player.audioQueue)==null?void 0:n.length,playerScheduledCount:this.player.scheduledCount,playerIsPlaying:this.player.isPlaying,internalStatus:this.internalStatus}),e<=0){console.log("[StreamAudioPlayer.vue] 没有新片段,跳过");return}(this.internalStatus==="disabled"||this.internalStatus==="pending")&&(this.internalStatus="generating");for(let s=this.lastProcessedChunkCount;s<t.length;s++){const u=t[s];console.log(`[StreamAudioPlayer.vue] 添加第 ${s+1} 个chunk,大小: ${(u.length*.75/1024).toFixed(2)} KB`),this.player.addBase64Chunk(u),this.lastProcessedChunkCount++,this.$emit("chunk-added",{duration:this.duration,queueLength:((i=this.player.pendingChunks)==null?void 0:i.length)||0})}console.log("[StreamAudioPlayer.vue] handleAudioDataChange 完成",{lastProcessedChunkCount:this.lastProcessedChunkCount,playerPendingChunks:(a=this.player.pendingChunks)==null?void 0:a.length,playerAudioQueueLength:(o=this.player.audioQueue)==null?void 0:o.length})},handleGenerationComplete(){var t,e,r,n,i,a,o;console.log("[StreamAudioPlayer.vue] handleGenerationComplete",{playerAudioQueueLength:(e=(t=this.player)==null?void 0:t.audioQueue)==null?void 0:e.length,playerPendingChunks:(n=(r=this.player)==null?void 0:r.pendingChunks)==null?void 0:n.length,playerTotalDuration:(a=(i=this.player)==null?void 0:i.totalDuration)==null?void 0:a.toFixed(2),playerScheduledCount:(o=this.player)==null?void 0:o.scheduledCount,internalStatus:this.internalStatus,hasAudioUrl:!!this.audioData.audio_url}),this.player&&this.player.markGenerationComplete(this.audioData.audio_url),this.player&&(this.duration=this.player.getDuration(),console.log("[StreamAudioPlayer.vue] 最终时长:",this.duration.toFixed(2))),this.internalStatus!=="playing"&&(this.internalStatus="completed"),this.audioData.audio_url||(this.urlReady=!0)},async addAudioChunk(t){var e;if(!this.player){console.warn("播放器未初始化");return}try{typeof t=="string"?await this.player.addBase64Chunk(t):await this.player.addAudioChunk(t),this.$emit("chunk-added",{duration:this.duration,queueLength:((e=this.player.audioQueue)==null?void 0:e.length)||0})}catch(r){console.error("添加音频片段失败:",r),this.$emit("error",r)}},markGenerationComplete(){this.handleGenerationComplete()},async handlePlayPause(){if(!(!this.player||!this.canPlay))try{this.internalStatus==="playing"?this.player.pause():(this.currentTime>=this.duration&&this.duration>0&&(this.currentTime=0,this.player.pausedAt=0),await this.player.play())}catch(t){console.error("播放控制错误:",t)}},handleDownload(){if(!this.canDownload)return;const t=this.audioData.audio_url,e=this.audioData.title||"音频文件",r=document.createElement("a");r.href=t,r.download=e,r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),this.$emit("audio-download",{url:t,fileName:e})},formatTime(t){if(!t||isNaN(t))return"00:00";const e=Math.floor(t/60),r=Math.floor(t%60);return`${e.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`},handleMouseEnter(){},handleMouseLeave(){},handleProgressMouseEnter(){!this.isDisabled&&!this.isGenerating&&(this.isHoveringProgress=!0)},handleProgressMouseLeave(){this.isDragging||(this.isHoveringProgress=!1)},handleProgressMouseDown(t){this.isDisabled||!this.canSeek||this.seekToPosition(t)},handleDragStart(t){if(this.isDisabled||!this.canSeek)return;this.isDragging=!0,t.preventDefault();const e=n=>{this.seekToPosition(n)},r=()=>{this.isDragging=!1,this.isHoveringProgress||(this.isHoveringProgress=!1),document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r),this.dragCleanup=null};this.dragCleanup=()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r)},document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)},seekToPosition(t){if(!this.player||!this.$refs.progressTrack)return;const r=this.$refs.progressTrack.getBoundingClientRect(),n=t.clientX-r.left,a=Math.max(0,Math.min(1,n/r.width))*this.duration;this.currentTime=a,this.player.seek(a)},destroyPlayer(){this.dragCleanup&&(this.dragCleanup(),this.dragCleanup=null),this.player&&(this.player.destroy(),this.player=null),this.internalStatus="pending",this.currentTime=0,this.duration=0,this.lastProcessedChunkCount=0,this.playModeDecided=!1,this.urlReady=!1,this.lastKnownIsComplete=!1}}};var xO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"stream-audio-player-card",class:e.cardClass,on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave}},[r("div",{staticClass:"audio-content"},[r("div",{staticClass:"audio-icon"},[r("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"30",height:"34",viewBox:"0 0 30 34",fill:"none"}},[r("path",{staticStyle:{fill:"color(display-p3 0.9569 0.9333 0.9882)","fill-opacity":"1"},attrs:{d:"M1.55782e-06 5.33333C1.66168e-06 3.46649 1.71361e-06 2.53307 0.363313 1.82003C0.682891 1.19282 1.19283 0.682889 1.82003 0.363312C2.53307 1.40931e-07 3.46649 1.92863e-07 5.33334 2.96727e-07L21.1242 1.17527e-06C21.9395 1.22063e-06 22.3472 1.24331e-06 22.7308 0.0921015C23.0709 0.173757 23.396 0.308438 23.6943 0.491201C24.0307 0.69734 24.3189 0.985593 24.8954 1.5621L28.4379 5.10457C29.0144 5.68108 29.3027 5.96933 29.5088 6.30572C29.6916 6.60396 29.8262 6.92911 29.9079 7.26923C30 7.65285 30 8.0605 30 8.87581L30 28C30 29.8668 30 30.8003 29.6367 31.5133C29.3171 32.1405 28.8072 32.6504 28.18 32.97C27.4669 33.3333 26.5335 33.3333 24.6667 33.3333L5.33333 33.3333C3.46649 33.3333 2.53307 33.3333 1.82003 32.97C1.19282 32.6504 0.68289 32.1405 0.363312 31.5133C1.40931e-07 30.8003 1.92863e-07 29.8668 2.96727e-07 28L1.55782e-06 5.33333Z",fill:"#F4EEFC"}}),r("path",{staticStyle:{fill:"color(display-p3 0.8863 0.8353 0.9725)","fill-opacity":"1"},attrs:{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M29.1667 28L29.1667 8.87581C29.1667 8.02084 29.1613 7.72918 29.0976 7.46377C29.0364 7.20868 28.9353 6.96481 28.7983 6.74113C28.6557 6.5084 28.4532 6.29838 27.8487 5.69383L24.3062 2.15135C23.7016 1.5468 23.4916 1.34435 23.2589 1.20173C23.0352 1.06466 22.7913 0.963651 22.5362 0.90241C22.2708 0.83869 21.9792 0.833334 21.1242 0.833334L5.33334 0.833333C4.38616 0.833333 3.7259 0.833981 3.21187 0.87598C2.70756 0.917183 2.41782 0.993995 2.19836 1.10582C1.72795 1.3455 1.3455 1.72795 1.10582 2.19836C0.993997 2.41782 0.917185 2.70756 0.875981 3.21187C0.833983 3.7259 0.833335 4.38616 0.833335 5.33333L0.833334 28C0.833334 28.9472 0.833982 29.6074 0.87598 30.1215C0.917183 30.6258 0.993995 30.9155 1.10582 31.135C1.3455 31.6054 1.72795 31.9878 2.19836 32.2275C2.41782 32.3393 2.70756 32.4161 3.21187 32.4573C3.7259 32.4993 4.38616 32.5 5.33333 32.5L24.6667 32.5C25.6138 32.5 26.2741 32.4993 26.7881 32.4573C27.2924 32.4161 27.5822 32.3393 27.8016 32.2275C28.2721 31.9878 28.6545 31.6054 28.8942 31.135C29.006 30.9155 29.0828 30.6258 29.124 30.1215C29.166 29.6074 29.1667 28.9472 29.1667 28ZM0.363313 1.82003C1.71361e-06 2.53307 1.66168e-06 3.46649 1.55782e-06 5.33333L2.96727e-07 28C1.92863e-07 29.8668 1.40931e-07 30.8003 0.363312 31.5133C0.68289 32.1405 1.19282 32.6504 1.82003 32.97C2.53307 33.3333 3.46649 33.3333 5.33333 33.3333L24.6667 33.3333C26.5335 33.3333 27.4669 33.3333 28.18 32.97C28.8072 32.6504 29.3171 32.1405 29.6367 31.5133C30 30.8003 30 29.8668 30 28L30 8.87581C30 8.0605 30 7.65285 29.9079 7.26923C29.8262 6.92911 29.6916 6.60396 29.5088 6.30572C29.3027 5.96933 29.0144 5.68108 28.4379 5.10457L24.8954 1.5621C24.3189 0.985593 24.0307 0.69734 23.6943 0.491201C23.396 0.308438 23.0709 0.173757 22.7308 0.0921015C22.3472 1.24331e-06 21.9395 1.22063e-06 21.1242 1.17527e-06L5.33334 2.96727e-07C3.46649 1.92863e-07 2.53307 1.40931e-07 1.82003 0.363312C1.19283 0.682889 0.682891 1.19282 0.363313 1.82003Z",fill:"#E2D5F8"}}),r("path",{staticStyle:{fill:"color(display-p3 0.4157 0.2706 0.8980)","fill-opacity":"1"},attrs:{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M22.1277 22.689L22.129 8.92249L10.0345 10.5529L10.0335 22.0895C9.69971 21.9846 9.34054 21.9276 8.96638 21.9276C7.19825 21.9276 5.76489 23.2017 5.76489 24.7734C5.76489 26.345 7.19825 27.6191 8.96638 27.6191C10.7157 27.6191 12.1374 26.3719 12.1674 24.8233L12.1676 24.8233L12.1676 24.8123L12.1679 24.7734L12.1676 24.7347L12.168 13.7622L19.9939 12.5435L19.9935 19.9543C19.6596 19.8493 19.3001 19.7922 18.9257 19.7922C17.1576 19.7922 15.7242 21.0663 15.7242 22.6379C15.7242 24.2096 17.1576 25.4837 18.9257 25.4837C20.6746 25.4837 22.096 24.2371 22.1267 22.689L22.1277 22.689Z",fill:"#6A45E5"}})])]),r("div",{staticClass:"file-info"},[r("div",{staticClass:"file-name",attrs:{title:e.displayFileName}},[e._v(e._s(e.displayFileName))]),r("div",{staticClass:"file-status"},[r("span",{staticClass:"status-text",class:e.statusClass},[e._v(" "+e._s(e.statusText)+" ")])])]),r("div",{staticClass:"audio-controls"},[r("button",{staticClass:"control-btn download-btn",attrs:{disabled:!e.canDownload,title:e.downloadButtonTitle},on:{click:e.handleDownload}},[r("v-icon",{attrs:{name:"basic_download2_line",size:18}})],1),r("button",{staticClass:"control-btn play-btn",attrs:{disabled:!e.canPlay,title:e.playButtonTitle},on:{click:e.handlePlayPause}},[e.internalStatus==="playing"?r("v-icon",{attrs:{name:"basic_pause_line",size:18}}):r("v-icon",{attrs:{name:"basic_play_line",size:18}})],1)])]),r("div",{staticClass:"progress-container"},[r("div",{ref:"progressTrack",staticClass:"progress-track",on:{mousedown:e.handleProgressMouseDown,mouseenter:e.handleProgressMouseEnter,mouseleave:e.handleProgressMouseLeave}},[e.isGenerating?e._e():r("div",{staticClass:"progress-played",class:{"no-transition":e.isDragging},style:{width:e.progressPercentage+"%"}}),e.showHandle?r("div",{staticClass:"progress-handle",class:{"no-transition":e.isDragging},style:{left:e.progressPercentage+"%"},on:{mousedown:function(n){return n.stopPropagation(),e.handleDragStart.apply(null,arguments)}}}):e._e()])])])},wO=[],SO=pr(bO,xO,wO,!1,null,"c74077bd",null,null);const Xb=SO.exports,CO={已完成所有任务:{zh:"已完成所有任务",en:"All tasks completed"},已停止:{zh:"已停止",en:"Stopped"},任务进度:{zh:"任务进度",en:"Task progress"},问题澄清:{zh:"问题澄清",en:"Question Clarification"},支持多选:{zh:"(支持多选)",en:"(Multiple selection)"},提交:{zh:"提交",en:"Submit"},已提交:{zh:"已提交",en:"Submitted"},跳过:{zh:"跳过",en:"Skip"}};function AO(t){const e={"zh-CN":{},"en-US":{}};for(const[r,n]of Object.entries(t))e["zh-CN"][r]=n.zh,e["en-US"][r]=n.en;return e}const TO=AO(CO),w0="zh-CN",ri={"zh-cn":"zh-CN",zh_cn:"zh-CN","zh-hans":"zh-CN","zh-hans-cn":"zh-CN",zh:"zh-CN",cn:"zh-CN",chinese:"zh-CN","chinese-simplified":"zh-CN","simplified-chinese":"zh-CN",simplifiedchinese:"zh-CN",chs:"zh-CN",zhs:"zh-CN",hans:"zh-CN","zh-sg":"zh-CN",zh_sg:"zh-CN","zh-tw":"zh-CN",zh_tw:"zh-CN","zh-hk":"zh-CN",zh_hk:"zh-CN","zh-hant":"zh-CN","zh-hant-tw":"zh-CN","zh-hant-hk":"zh-CN",cht:"zh-CN",zht:"zh-CN",hant:"zh-CN","chinese-traditional":"zh-CN","traditional-chinese":"zh-CN",traditionalchinese:"zh-CN","en-us":"en-US",en_us:"en-US","en-gb":"en-US",en_gb:"en-US","en-au":"en-US",en_au:"en-US","en-ca":"en-US",en_ca:"en-US",en:"en-US",us:"en-US",gb:"en-US",uk:"en-US",english:"en-US",eng:"en-US","en-in":"en-US",en_in:"en-US","en-nz":"en-US",en_nz:"en-US","en-ie":"en-US",en_ie:"en-US"};function DO(t){if(!t||typeof t!="string")return w0;const e=t.trim().toLowerCase();if(!e)return w0;if(ri[e])return ri[e];const r=e.replace(/-/g,"_");if(ri[r])return ri[r];const n=e.replace(/_/g,"-");if(ri[n])return ri[n];const i=e.split(/[-_]/)[0];return ri[i]?ri[i]:e==="zh-cn"||e==="zh_cn"?"zh-CN":e==="en-us"||e==="en_us"?"en-US":w0}function EO(t,e=w0){const r=DO(e),n=TO[r];return n[t]!==void 0?n[t]:t}function jb(t,e){const r={};for(const n of e)r[n]=EO(n,t);return r}const kO={name:"ClassifyTag",props:{title:{type:String,default:""},questions:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},defaultAnswers:{type:Array,default:()=>[]},locale:{type:String,default:"zh-CN"}},data(){return{collapsed:!1,selectedAnswers:{},submitted:!1}},watch:{defaultAnswers:{handler(t){t&&t.length>0&&this._applyDefaultAnswers(t)},immediate:!0}},computed:{i18nText(){return jb(this.locale,["问题澄清","支持多选","提交","已提交","跳过"])},displayTitle(){return this.title||this.i18nText.问题澄清},normalizedQuestions(){return!this.questions||!this.questions.length?[]:this.questions.map((t,e)=>({id:t.id!==void 0?t.id:e,text:t.text||t.question||"",isMulti:t.type===2,options:(t.options||[]).map(r=>typeof r=="string"?{label:r,description:""}:{label:r.label||r.Label||"",description:r.description||r.Description||""})}))},allAnswered(){return!this.normalizedQuestions||this.normalizedQuestions.length===0?!1:this.normalizedQuestions.every(t=>{const e=this.selectedAnswers[t.id];return t.isMulti?Array.isArray(e)&&e.length>0:e!==void 0})}},methods:{_applyDefaultAnswers(t){t.forEach(e=>{if(e.questionId!==void 0){if(e.selectedIndices&&Array.isArray(e.selectedIndices))this.$set(this.selectedAnswers,e.questionId,[...e.selectedIndices]);else if(e.selectedIndex!==void 0){const r=this.normalizedQuestions.find(n=>n.id===e.questionId);r&&r.isMulti?this.$set(this.selectedAnswers,e.questionId,[e.selectedIndex]):this.$set(this.selectedAnswers,e.questionId,e.selectedIndex)}}}),this.submitted=!0},toggleCollapse(){this.collapsed=!this.collapsed},selectOption(t,e){this.submitted||this.disabled||this.$set(this.selectedAnswers,t,e)},isChecked(t,e){const r=this.selectedAnswers[t];return Array.isArray(r)&&r.includes(e)},toggleCheckbox(t,e){if(this.submitted||this.disabled)return;let r=this.selectedAnswers[t];Array.isArray(r)?r=[...r]:r=[];const n=r.indexOf(e);n!==-1?r.splice(n,1):r.push(e),this.$set(this.selectedAnswers,t,r)},handleSubmit(){if(!this.allAnswered||this.submitted)return;this.submitted=!0;const t=this.normalizedQuestions.map(e=>{const r=this.selectedAnswers[e.id];if(e.isMulti){const i=Array.isArray(r)?r:[],a=i.map(o=>e.options[o]?e.options[o].label:"");return{questionId:String(e.id),questionText:e.text,isMulti:!0,selectedOptions:a,selectedOption:a[0]||"",selectedIndices:i,selectedIndex:i[0]!==void 0?i[0]:-1}}const n=e.options[r];return{questionId:String(e.id),questionText:e.text,isMulti:!1,selectedOption:n?n.label:"",selectedOptions:[n?n.label:""],selectedIndex:r,selectedIndices:[r]}});this.$emit("submit",t)},handleSkip(){this.submitted||this.disabled||this.$emit("skip")}}};var MO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"classify-tag",class:{"classify-tag--collapsed":e.collapsed}},[r("div",{staticClass:"classify-tag__header",on:{click:e.toggleCollapse}},[r("svg",{attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{staticStyle:{fill:"color(display-p3 0.2902 0.4392 1.0000)","fill-opacity":"1"},attrs:{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M14.6673 8.0026C14.6673 4.32071 11.6825 1.33594 8.00065 1.33594C4.31875 1.33594 1.33398 4.32071 1.33398 8.0026C1.33398 11.6845 4.31875 14.6693 8.00065 14.6693C9.30211 14.6693 10.5165 14.2963 11.5427 13.6515L14.0003 14.0026L13.6493 11.5451C14.2943 10.5188 14.6673 9.30427 14.6673 8.0026ZM9.53271 4.90821C9.17249 4.59038 8.69733 4.42965 8.09538 4.42965C7.40443 4.42965 6.87353 4.62549 6.49142 5.00899L6.49031 5.01011C6.10731 5.38555 5.91113 5.89787 5.91113 6.55934V6.58788H6.92834V6.55934C6.92834 6.186 7.00316 5.88407 7.16637 5.66942C7.35011 5.41021 7.64478 5.29692 8.03181 5.29692C8.34206 5.29692 8.6007 5.37861 8.78036 5.55472L8.78283 5.55714C8.95394 5.7338 9.03537 5.97228 9.03537 6.26554C9.03537 6.4892 8.94804 6.6972 8.78703 6.89889L8.78139 6.90595L8.62913 7.07178L8.35539 7.31521L8.23731 7.42503L8.0271 7.63165C7.80455 7.86045 7.6682 8.03969 7.60292 8.17753L7.60164 8.18025L7.56817 8.2469C7.47946 8.44276 7.42756 8.73331 7.41978 9.22348H8.4573C8.49181 8.50677 8.80055 8.14573 8.96934 8.00587L9.28505 7.73273L9.58341 7.46308L9.67835 7.37044L9.73842 7.30517C9.96924 7.01379 10.0889 6.64468 10.0889 6.20321C10.0889 5.65678 9.90079 5.22396 9.53412 4.90944L9.53271 4.90821ZM7.94792 11.3333C8.31611 11.3333 8.61458 11.0349 8.61458 10.6667C8.61458 10.2985 8.31611 10 7.94792 10C7.57973 10 7.28125 10.2985 7.28125 10.6667C7.28125 11.0349 7.57973 11.3333 7.94792 11.3333Z",fill:"#4A70FF"}})]),r("span",{staticClass:"classify-tag__title"},[e._v(e._s(e.displayTitle))]),r("svg",{staticClass:"classify-tag__arrow",class:{"classify-tag__arrow--up":!e.collapsed},attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M4 6L8 10L12 6",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"classify-tag__content"},e._l(e.normalizedQuestions,function(n,i){return r("div",{key:n.id||i,staticClass:"classify-tag__question-group"},[r("div",{staticClass:"classify-tag__question-text"},[e._v(" "+e._s(i+1)+"、"+e._s(n.text)+" "),n.isMulti?r("span",{staticClass:"classify-tag__multi-hint"},[e._v(e._s(e.i18nText.支持多选))]):e._e()]),r("div",{staticClass:"classify-tag__options"},[n.isMulti?e._l(n.options,function(a,o){return r("label",{key:o,staticClass:"classify-tag__checkbox",class:{"classify-tag__checkbox--checked":e.isChecked(n.id||i,o),"classify-tag__checkbox--rich":a.description},on:{click:function(s){return e.toggleCheckbox(n.id||i,o)}}},[r("span",{staticClass:"classify-tag__checkbox-box"},[e.isChecked(n.id||i,o)?r("svg",{staticClass:"classify-tag__checkbox-tick",attrs:{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M1 4L3.5 6.5L9 1",stroke:"#fff","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})]):e._e()]),r("span",{staticClass:"classify-tag__radio-content"},[r("span",{staticClass:"classify-tag__radio-label"},[e._v(e._s(a.label))]),a.description?r("span",{staticClass:"classify-tag__radio-desc"},[e._v(e._s(a.description))]):e._e()])])}):e._l(n.options,function(a,o){return r("label",{key:o,staticClass:"classify-tag__radio",class:{"classify-tag__radio--checked":e.selectedAnswers[n.id||i]===o,"classify-tag__radio--rich":a.description},on:{click:function(s){return e.selectOption(n.id||i,o)}}},[r("span",{staticClass:"classify-tag__radio-circle"},[e.selectedAnswers[n.id||i]===o?r("span",{staticClass:"classify-tag__radio-dot"}):e._e()]),r("span",{staticClass:"classify-tag__radio-content"},[r("span",{staticClass:"classify-tag__radio-label"},[e._v(e._s(a.label))]),a.description?r("span",{staticClass:"classify-tag__radio-desc"},[e._v(e._s(a.description))]):e._e()])])})],2)])}),0),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"classify-tag__footer"},[r("div",{staticClass:"classify-tag__footer-divider"}),r("div",{staticClass:"classify-tag__footer-actions"},[r("button",{staticClass:"classify-tag__btn classify-tag__btn--primary",attrs:{disabled:!e.allAnswered||e.submitted},on:{click:e.handleSubmit}},[e._v(" "+e._s(e.submitted?e.i18nText.已提交:e.i18nText.提交)+" ")]),e.submitted?e._e():r("button",{staticClass:"classify-tag__btn classify-tag__btn--secondary",on:{click:e.handleSkip}},[e._v(" "+e._s(e.i18nText.跳过)+" ")])])])])},LO=[],IO=pr(kO,MO,LO,!1,null,"82dd6a75",null,null);const i2=IO.exports;const PO={name:"PlanConfirm",props:{title:{type:String,default:"计划确认"},planText:{type:String,default:""},disabled:{type:Boolean,default:!1}},data(){return{collapsed:!1,confirmed:!1,skipped:!1}},methods:{toggleCollapse(){this.collapsed=!this.collapsed},handleConfirm(){this.confirmed||this.skipped||this.disabled||(this.confirmed=!0,this.$emit("confirm",this.planText))},handleSkip(){this.confirmed||this.skipped||this.disabled||(this.skipped=!0,this.$emit("skip",this.planText))}}};var RO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"plan-confirm",class:{"plan-confirm--collapsed":e.collapsed}},[r("div",{staticClass:"plan-confirm__header",on:{click:e.toggleCollapse}},[r("svg",{staticClass:"plan-confirm__icon",attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M13.5 5.5L6.5 12.5L2.5 8.5",stroke:"#4A70FF","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}}),r("rect",{attrs:{x:"1",y:"1",width:"14",height:"14",rx:"2",stroke:"#4A70FF","stroke-width":"1.5",fill:"none"}})]),r("span",{staticClass:"plan-confirm__title"},[e._v(e._s(e.title))]),r("svg",{staticClass:"plan-confirm__arrow",class:{"plan-confirm__arrow--up":!e.collapsed},attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M4 6L8 10L12 6",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"plan-confirm__content"},[r("div",{staticClass:"plan-confirm__text"},[e._v(e._s(e.planText))])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"plan-confirm__footer"},[r("div",{staticClass:"plan-confirm__footer-divider"}),r("div",{staticClass:"plan-confirm__footer-actions"},[!e.confirmed&&!e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--primary",on:{click:e.handleConfirm}},[e._v(" 确定 ")]):e._e(),e.confirmed?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--primary",attrs:{disabled:""}},[e._v(" 已确定 ")]):e._e(),!e.confirmed&&!e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--secondary",on:{click:e.handleSkip}},[e._v(" 跳过 ")]):e._e(),e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--secondary",attrs:{disabled:""}},[e._v(" 已跳过 ")]):e._e()])])])},NO=[],OO=pr(PO,RO,NO,!1,null,"99c3033c",null,null);const BO=OO.exports;let g1;const FO=new Uint8Array(16);function zO(){if(!g1&&(g1=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!g1))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return g1(FO)}const St=[];for(let t=0;t<256;++t)St.push((t+256).toString(16).slice(1));function VO(t,e=0){return St[t[e+0]]+St[t[e+1]]+St[t[e+2]]+St[t[e+3]]+"-"+St[t[e+4]]+St[t[e+5]]+"-"+St[t[e+6]]+St[t[e+7]]+"-"+St[t[e+8]]+St[t[e+9]]+"-"+St[t[e+10]]+St[t[e+11]]+St[t[e+12]]+St[t[e+13]]+St[t[e+14]]+St[t[e+15]]}const $O=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ov={randomUUID:$O};function Kb(t,e,r){if(ov.randomUUID&&!e&&!t)return ov.randomUUID();t=t||{};const n=t.random||(t.rng||zO)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,e){r=r||0;for(let i=0;i<16;++i)e[r+i]=n[i];return e}return VO(n)}const GO=["Basic","Card","ListView","ListViewItem","Badge","Box","Row","Col","Button","Caption","Chart","Checkbox","DatePicker","Divider","Form","Icon","Image","Input","Label","Markdown","RadioGroup","Select","Spacer","Text","Textarea","Title","Transition","Video","Audio","Countdown","Clickable","ImageSelect"];class HO{constructor(){this.worker=null,this.callbacks=new Map,this.initializing=!1,this.initPromise=null,this.blobUrl=null}async init(){return this.worker?Promise.resolve():this.initializing&&this.initPromise?this.initPromise:(this.initializing=!0,this.initPromise=new Promise((e,r)=>{try{const n=window.tsxToJsonWorkerSrc||"https://cdn.xiaowei.qq.com/adp/assets/static/tsxToJSON.worker.js",i=new Blob([`importScripts('${n}')`],{type:"application/javascript"});this.blobUrl=URL.createObjectURL(i),this.worker=new Worker(this.blobUrl),this.worker.onmessage=a=>{const{ok:o,out:s,error:u,nonce:l}=a.data,c=this.callbacks.get(l);c&&(this.callbacks.delete(l),o?c.resolve(s):c.reject(new Error(u||"Worker Parse error")))},this.worker.onerror=a=>{console.error("tsxToJSON Worker 错误:",a)},this.initializing=!1,e()}catch(n){this.initializing=!1,console.error("初始化 tsxToJSON Worker 失败:",n),r(n)}}),this.initPromise)}destroy(){this.worker&&(this.worker.terminate(),this.worker=null),this.blobUrl&&(URL.revokeObjectURL(this.blobUrl),this.blobUrl=null),this.callbacks.forEach(e=>{e.reject(new Error("Worker destroy"))}),this.callbacks.clear(),this.initializing=!1,this.initPromise=null}async parse({view:e,state:r,keyMap:n,componentNames:i=GO}){return await this.init(),new Promise((a,o)=>{if(!this.worker){o(new Error("Worker not init"));return}const s=Kb();this.callbacks.set(s,{resolve:a,reject:o}),this.worker.postMessage({type:"parse",view:e,state:r||{},keyMap:n,componentNames:i||[],nonce:s})})}isInitialized(){return!!this.worker}}let m1=null;async function Gh(){return m1||(m1=new HO),await m1.init(),m1}class UO{constructor(){this.worker=null,this.callbacks=new Map,this.initializing=!1,this.initPromise=null,this.blobUrl=null}async init(){return this.worker?Promise.resolve():this.initializing&&this.initPromise?this.initPromise:(this.initializing=!0,this.initPromise=new Promise((e,r)=>{try{const n=window.schemaWorkerSrc||"https://cdn.xiaowei.qq.com/adp/assets/static/schemaWorker.js",i=new Blob([`importScripts('${n}')`],{type:"application/javascript"});this.blobUrl=URL.createObjectURL(i),this.worker=new Worker(this.blobUrl),this.worker.onmessage=a=>{const{ok:o,keyMap:s,jsonSchema:u,error:l,nonce:c}=a.data,f=this.callbacks.get(c);f&&(this.callbacks.delete(c),o?f.resolve({keyMap:s,jsonSchema:u}):f.reject(new Error(l||"Worker parse failed")))},this.worker.onerror=a=>{console.error("zodSchema Worker 错误:",a)},this.initializing=!1,e()}catch(n){this.initializing=!1,console.error("初始化 zodSchema Worker 失败:",n),r(n)}}),this.initPromise)}destroy(){this.worker&&(this.worker.terminate(),this.worker=null),this.blobUrl&&(URL.revokeObjectURL(this.blobUrl),this.blobUrl=null),this.callbacks.forEach(e=>{e.reject(new Error("Worker destroyed"))}),this.callbacks.clear(),this.initializing=!1,this.initPromise=null}async zodToJsonSchema({src:e,includeJSONSchema:r=!0}){return await this.init(),new Promise((n,i)=>{if(!this.worker){i(new Error("Worker not init"));return}const a=Kb();this.callbacks.set(a,{resolve:n,reject:i}),this.worker.postMessage({type:"parse",src:e,includeJSONSchema:r,nonce:a})})}async zodToJsonSchemaAsync(e){return await this.zodToJsonSchema({src:e,includeJSONSchema:!0})}isInitialized(){return!!this.worker}}let y1=null;async function Qb(){return y1||(y1=new UO),await y1.init(),y1}async function j0(t){const r=await(await Qb()).zodToJsonSchemaAsync(t);return{keyMap:r.keyMap,jsonSchema:JSON.stringify(r.jsonSchema,null,2)}}function WO(t,e){let r;try{r=JSON.parse(t)}catch(i){return console.warn(`unmarshal view failed, err: ${i}`),t}let n;try{n=JSON.parse(e)}catch(i){return console.warn(`unmarshal payload failed, err: ${i}`),t}Hh(r,n);try{return JSON.stringify(r)}catch(i){return console.warn(`marshal view failed, err: ${i}`),t}}function Hh(t,e){if(Array.isArray(t))for(let r=0;r<t.length;r++)Hh(t[r],e);else if(t!==null&&typeof t=="object"){const r=t.name;if(typeof r=="string"){const n=typeof t.type=="string"?t.type:"unknown",i=qO(r,e);if(i.exists){const a=i.value;switch(n){case"DatePicker":t.defaultValue=a;break;case"Select":t.defaultValue=a;break;case"Checkbox":t.defaultChecked=a;break;case"RadioGroup":t.defaultValue=a;break;case"Input":t.defaultValue=a;break;case"Textarea":t.defaultValue=a;break;default:t.defaultValue=a}}}if(Array.isArray(t.children))for(let n=0;n<t.children.length;n++)Hh(t.children[n],e)}}function qO(t,e){const r=t.split(".");let n=e;for(const i of r){if(n===null||typeof n!="object"||Array.isArray(n))return{value:null,exists:!1};if(!(i in n))return{value:null,exists:!1};n=n[i]}return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?{value:n,exists:!0}:{value:String(n),exists:!0}}class a2{constructor(){this.initPromise=null,this.initialized=!1,this._preload()}_preload(){return this.initPromise?this.initPromise:(this.initPromise=Promise.all([Gh(),Qb()]).then(()=>{this.initialized=!0,console.log("WidgetHelper: Workers 预加载完成")}).catch(e=>{console.warn("WidgetHelper: Workers 预加载失败:",e.message)}),this.initPromise)}async waitForReady(){this.initPromise&&await this.initPromise}isReady(){return this.initialized}async getTemplate(e){try{return""}catch(r){return console.warn("getTemplate 执行出错:",r.message),""}}async getPreview({view:e,schema:r,defaultState:n}){try{if(await this.waitForReady(),n!=null&&n!==""){const s=typeof n=="string"?JSON.parse(n):n;if(typeof s!="object"||s===null)throw new Error("defaultState 必须是一个有效的 JSON 对象")}const{keyMap:i}=await j0(r);return await(await Gh()).parse({view:e,state:JSON.parse(n),keyMap:i})}catch(i){return console.warn("getPreview 执行出错:",i.message),""}}async getJsonSchema(e){try{await this.waitForReady();const{jsonSchema:r}=await j0(e);return r}catch(r){return console.warn("getJsonSchema 执行出错:",r.message),""}}genarateSnapshot(...e){return WO(...e)}decodeWidget(e){try{return JSON.parse(Buffer.from(e,"base64").toString()||"")}catch{return""}}}function ZO(){return new a2}function YO(t){try{return jsxToJinja(t)}catch(e){return console.warn("getTemplate 执行出错:",e.message),""}}async function XO({view:t,schema:e,defaultState:r}){try{if(r!=null&&r!==""){const o=typeof r=="string"?JSON.parse(r):r;if(typeof o!="object"||o===null)throw new Error("defaultState 必须是一个有效的 JSON 对象")}const{keyMap:n}=await j0(e);return await(await Gh()).parse({view:t,state:JSON.parse(r),keyMap:n})}catch(n){return console.warn("getPreview 执行出错:",n.message),""}}async function jO(t){try{const{jsonSchema:e}=await j0(t);return e}catch(e){return console.warn("getJsonSchema 执行出错:",e.message),""}}const KO={data(){return{_widgetHelper:null}},created(){this._widgetHelper=new a2,this._widgetInstancesMap={},this._audioInstancesMap={},this._classifyTagInstancesMap={},this._planConfirmInstancesMap={},this._audioStateCache={}},methods:{_scaleWidgetIfNeeded(t,e){const r=this.widgetList&&this.widgetList.find(s=>s.widget_run_id===e),n=r&&r.scale,i=this._widgetInstancesMap[e],a=i&&i.instance&&i.instance.$el;if(!a)return;if(!n){t.style.width="",t.style.height="",a.style.transform="",a.style.transformOrigin="";return}let o;if(typeof n=="number")o=n;else if(n===!0){const s=this.$refs.containerRef&&(this.$refs.containerRef.$el||this.$refs.containerRef);if(!s)return;const u=s.clientWidth,l=a.style.transform;a.style.transform="";const c=a.scrollWidth||a.offsetWidth;if(a.style.transform=l,u<=0||c<=u){t.style.width="",t.style.height="",a.style.transform="",a.style.transformOrigin="";return}o=u/c}if(o&&o>0){a.style.transform="";const s=a.scrollWidth||a.offsetWidth,u=a.scrollHeight||a.offsetHeight;t.style.width=`${s*o}px`,t.style.height=`${u*o}px`,a.style.transform=`scale(${o})`,a.style.transformOrigin="top left"}},async _mountWidgets(t){if(!this.showWidget)return;const e=t.querySelectorAll(".widget-container");for(const r of e){if(r._widgetMounted||r._widgetMounting)continue;r._widgetMounting=!0;const n=r.getAttribute("data-widget-run-id"),i=r.getAttribute("data-widget-id"),a=r.getAttribute("data-widget-view"),o=r.getAttribute("data-widget-encoded-widget"),s=r.getAttribute("data-widget-state"),u=r.getAttribute("data-widget-payload"),l=r.getAttribute("data-widget-disable")==="true";if(!a&&!o){r._widgetMounting=!1;continue}const c=s?decodeURIComponent(escape(atob(s))):"",f=u?decodeURIComponent(escape(atob(u))):"",h=a?decodeURIComponent(escape(atob(a))):"";let d="";if(h)d=h;else try{const{view:b,schema:x}=this._widgetHelper.decodeWidget(o);d=await this._widgetHelper.getPreview({view:b,schema:x,defaultState:c}),d=JSON.stringify(d),f&&(d=this._widgetHelper.genarateSnapshot(d,f))}catch(b){console.error("[MsgContent] decodeWidget error",b),r._widgetMounting=!1;continue}const p=Pa.extend(qb),v=new p({propsData:{output:d,disable:l,locale:this.locale}});v.$on("widget-action",b=>this.$emit("widget-action",b,n,i)),v.$on("widget-event",b=>this.$emit("widget-event",b,n,i)),v.$on("widget-rendered",b=>{this.$emit("widget-rendered",b,n,i),this.$nextTick(()=>this._scaleWidgetIfNeeded(r,n))}),v.$mount(),r.appendChild(v.$el),r._widgetMounted=!0,r._widgetMounting=!1;const g=r.getAttribute("data-widget-view")||"",m=r.getAttribute("data-widget-payload")||"",y=r.getAttribute("data-widget-state")||"",_=r.getAttribute("data-widget-encoded-widget")||"";this._widgetInstancesMap[n]={instance:v,container:r,_lastDataKey:`${g}|${m}|${y}|${_}`}}},_mountAudioPlayers(t){if(!this.audioList||this.audioList.length===0)return;t.querySelectorAll(".audio-stream-container").forEach(r=>{const n=r.getAttribute("data-audio-symbol-id");if(this._audioInstancesMap[n]){r.children.length===0&&r.appendChild(this._audioInstancesMap[n].instance.$el);return}if(r.children.length>0)return;const i=this.audioList&&this.audioList.find(a=>a.audioSymbolId===n);if(i)try{const a=Pa.extend(Xb),o=new a({propsData:{audioData:i}});o.$on("play",s=>this.$emit("audio-play",s,n)),o.$on("pause",s=>this.$emit("audio-pause",s,n)),o.$on("end",s=>this.$emit("audio-end",s,n)),o.$on("audio-download",s=>this.$emit("audio-download",s,n)),o.$on("chunk-added",s=>this.$emit("audio-chunk-added",s,n)),o.$on("error",s=>this.$emit("audio-error",s,n)),o.$mount(),r.appendChild(o.$el),this._audioInstancesMap[n]={instance:o,container:r}}catch(a){console.error("[MsgContent] 创建音频播放器失败:",a)}})},_mountClassifyTags(t){if(!this.showClassifyTag)return;t.querySelectorAll(".classify-tag-container").forEach((r,n)=>{if(r._classifyTagMounted)return;const i=r.getAttribute("data-classify-tag");if(i)try{const a=decodeURIComponent(escape(atob(i))),o=JSON.parse(a),s=Pa.extend(i2),u=new s({propsData:{title:o.title||"",questions:o.questions||[],disabled:!1,locale:this.locale}});u.$on("submit",l=>this.$emit("classify-tag-submit",l,o)),u.$on("skip",()=>this.$emit("classify-tag-skip",o)),u.$mount(),r.appendChild(u.$el),r._classifyTagMounted=!0,this._classifyTagInstancesMap[n]={instance:u,container:r}}catch(a){console.error("[MsgContent] ClassifyTag mount error:",a)}})},_mountPlanConfirms(t){if(!this.showPlanConfirm)return;t.querySelectorAll(".plan-confirm-container").forEach((r,n)=>{if(r._planConfirmMounted)return;const i=r.getAttribute("data-plan-confirm");if(i)try{const a=decodeURIComponent(escape(atob(i))),o=JSON.parse(a),s=Pa.extend(BO),u=new s({propsData:{title:o.title||"计划确认",planText:o.planText||"",disabled:!1}});u.$on("confirm",l=>this.$emit("plan-confirm",l,o)),u.$on("skip",l=>this.$emit("plan-skip",l,o)),u.$mount(),r.appendChild(u.$el),r._planConfirmMounted=!0,this._planConfirmInstancesMap[n]={instance:u,container:r}}catch(a){console.error("[MsgContent] PlanConfirm mount error:",a)}})},_mountAll(t){this.$nextTick(()=>{this._mountWidgets(t),this._mountAudioPlayers(t),this._mountClassifyTags(t),this._mountPlanConfirms(t)})},async _updateWidgets(t){if(!t)return;const e=this.$refs.containerRef,r=e&&(e.$el||e);if(!r)return;await this.$nextTick();const n=r.querySelectorAll(".widget-container");for(const i of n){const a=i.getAttribute("data-widget-run-id"),o=this._widgetInstancesMap[a];if(!a||!o)continue;const s=i.getAttribute("data-widget-view")||"",u=i.getAttribute("data-widget-payload")||"",l=i.getAttribute("data-widget-state")||"",c=i.getAttribute("data-widget-encoded-widget")||"",f=i.getAttribute("data-widget-disable")==="true",h=`${s}|${u}|${l}|${c}`;if(o._lastDataKey!==h){o._lastDataKey=h;const d=s?decodeURIComponent(escape(atob(s))):"",p=u?decodeURIComponent(escape(atob(u))):"";let v="";if(d)v=d;else if(c){const g=l?decodeURIComponent(escape(atob(l))):"";try{const{view:m,schema:y}=this._widgetHelper.decodeWidget(c);v=await this._widgetHelper.getPreview({view:m,schema:y,defaultState:g}),v=JSON.stringify(v),p&&(v=this._widgetHelper.genarateSnapshot(v,p))}catch{}}o.instance&&(o.instance.output=v)}o.instance&&(o.instance.disable=f),this._scaleWidgetIfNeeded(i,a)}},_updateAudioPlayers(t){t&&Object.keys(this._audioInstancesMap).forEach(e=>{const r=this._audioInstancesMap[e];if(!r||!r.instance)return;const n=t.find(s=>s.audioSymbolId===e);if(!n)return;const i=n.audio_data&&n.audio_data.length||0,a=!!n.isComplete,o=this._audioStateCache[e]||{length:0,isComplete:!1};(i!==o.length||a!==o.isComplete)&&(this._audioStateCache[e]={length:i,isComplete:a},r.instance.audioData=n)})},_destroyAllEmbedded(){Object.keys(this._widgetInstancesMap).forEach(t=>{try{this._widgetInstancesMap[t].instance.$destroy()}catch{}delete this._widgetInstancesMap[t]}),Object.keys(this._audioInstancesMap).forEach(t=>{try{this._audioInstancesMap[t].instance.$destroy()}catch{}delete this._audioInstancesMap[t]}),Object.keys(this._classifyTagInstancesMap).forEach(t=>{try{this._classifyTagInstancesMap[t].instance.$destroy()}catch{}delete this._classifyTagInstancesMap[t]}),Object.keys(this._planConfirmInstancesMap).forEach(t=>{try{this._planConfirmInstancesMap[t].instance.$destroy()}catch{}delete this._planConfirmInstancesMap[t]}),this._audioStateCache={}}},beforeDestroy(){this._destroyAllEmbedded()}},QO={methods:{_postrender(t){let e=t.replace(/&gt;/g,">").replace(/&lt;/g,"<").replace("CURSOR_POINT",'<span class="cursor"></span>');const r=document.createElement("div");return r.innerHTML=e,r.querySelectorAll("img").forEach(n=>{const i=Ub(n.src,"size"),a=i&&i.split("|")||[];let o,s;if(a[1]){const u=a[1].split("*");o=u[0],u[1]&&(s=u[0]/u[1])}a[0]&&(a[0]==="min"&&(!o||o<24)?o=this.imgMinWidth||"24":a[0]==="mid"&&o>320?o=this.imgMaxWidth||"320":a[0]==="max"&&(o=this.imgMaxWidth||"320")),o&&(n.style.width=o===this.imgMaxWidth||o===this.imgMinWidth?o:`${o}px`),s&&(n.style.height=`${o/s}px`)}),r.querySelectorAll("pre code:not(.language-mermaid)").forEach((n,i,a)=>{if(Array.from(n.classList).some(s=>s.startsWith("language-"))?this.incremental||of(n):n.classList.add("hljs"),this.isFinal){this.incremental||av(n);const s=n.parentNode.querySelector(".cursor");s&&s.remove()}else if(this.isPrintAnimate&&!r.querySelector(".cursor")&&i===a.length-1&&!this.isFinal&&n.parentElement===r.lastElementChild){const s=document.createElement("span");s.className="cursor",n.append(s)}if(!this.incremental&&!n.parentNode.querySelector(".code-language-label")&&n.result&&n.result.language){const s=document.createElement("div");s.className="code-language-label",this.codeHeaderRender?s.innerHTML=this.codeHeaderRender(n.result.language,this.content,i):s.textContent=n.result.language,n.parentNode.insertBefore(s,n)}}),Tb(r),this.$emit("postrender",this.currentIndex,this.$refs.containerRef&&(this.$refs.containerRef.$el||this.$refs.containerRef),this.recordId),r.innerHTML.replace(/-->/g,"-->")},_onImageClick(t){this.$emit("imageClick",t)},_onDownloadCardClick(t,e){this.$emit("downloadCardClick",t,e)},_onMDRendered(t){t&&(this.incremental&&t.querySelectorAll("pre code:not(.language-mermaid)").forEach((e,r,n)=>{if(Array.from(e.classList).some(a=>a.startsWith("language-"))&&!e._highlighted&&(r===n.length-1&&!this.isFinal?of(e):(of(e),e._highlighted=!0)),this.isFinal&&!e._lineNumbered&&(av(e),e._lineNumbered=!0),!e.parentNode.querySelector(".code-language-label")&&e.result&&e.result.language){const a=document.createElement("div");a.className="code-language-label",this.codeHeaderRender?a.innerHTML=this.codeHeaderRender(e.result.language,this.content,r):a.textContent=e.result.language,e.parentNode.insertBefore(a,e)}}),this.isFinal?(this.incremental?t.querySelectorAll(".question-text img, .answer-md img").forEach(e=>{e._imgClickBound||(e.addEventListener("click",this._onImageClick),e._imgClickBound=!0)}):(t.querySelectorAll(".question-text img").forEach(e=>{e.removeEventListener("click",this._onImageClick),e.addEventListener("click",this._onImageClick)}),t.querySelectorAll(".answer-md img").forEach(e=>{e.removeEventListener("click",this._onImageClick),e.addEventListener("click",this._onImageClick)})),t.querySelectorAll(`.${this.clazzMd||"answer-md"} a`).forEach(e=>{e.setAttribute("target","_blank")}),t.querySelectorAll(".video-placeholder").forEach(e=>e.remove()),t.querySelectorAll("video").forEach(e=>{e.style.display="block"})):t.querySelectorAll(".video-placeholder").forEach(e=>{this.incremental&&e._videoPlaceholderSet||(e.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" style="animation: video-placeholder-spin 1s linear infinite; flex-shrink: 0;"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.36131 2.32604C0.902925 3.77517 0 5.78264 0 8.00101C0 12.4193 3.58172 16.001 8 16.001C12.4183 16.001 16 12.4193 16 8.00101C16 3.58326 12.4191 0.00187492 8.00161 0.00100708L8.85183 1.6572C11.9837 2.07373 14.4 4.7552 14.4 8.00101C14.4 11.5356 11.5346 14.401 8 14.401C4.46538 14.401 1.6 11.5356 1.6 8.00101C1.6 6.40633 2.18324 4.94787 3.14803 3.82731L2.36131 2.32604Z" fill="currentColor"/></svg>视频加载中...',this.incremental&&(e._videoPlaceholderSet=!0))}),this.showTags&&t.querySelectorAll(".tags-container").forEach(e=>{this.incremental&&e._tagClickBound||(this.incremental?(e.addEventListener("click",()=>this.$emit("littleTagClick",e,this.recordId)),e._tagClickBound=!0):(e.removeEventListener("click",this._tagClickHandler),e.addEventListener("click",()=>this.$emit("littleTagClick",e,this.recordId))))}),this.showDownloadCard&&t.querySelectorAll(".download-card").forEach(e=>{this.incremental&&e._downloadClickBound||(e.addEventListener("click",r=>{const n=r.currentTarget.getAttribute("data-file-id");this._onDownloadCardClick(n,r);try{r&&r.preventDefault&&r.preventDefault()}catch{}}),this.incremental&&(e._downloadClickBound=!0))}),this.isMermaidRenderAfterOutput?this.isFinal&&setTimeout(()=>{h1.onMermaidLoaded(()=>{h1.renderAll(t)})},0):setTimeout(()=>{h1.onMermaidLoaded(()=>{h1.renderAll(t)})},0),this._mountAll(t))}}};const JO={name:"MsgContent",components:{MDRender:BP},mixins:[iO,KO,QO],props:{showDownloadCard:{type:Boolean,default:!1},showTags:{type:Boolean,default:!1},fullFiles:{type:Array,default:()=>[]},recordId:String,content:{type:String,default:""},isFinal:{type:Boolean,default:!1},loadingMessage:{type:Boolean,default:!1},isMdExpand:{type:[Boolean,void 0],default:void 0},isReplaceLinks:{type:Boolean,default:!1},isPrintAnimate:{type:Boolean,default:!1},styleObj:Object,clazzTable:String,clazzMd:String,anchorAttributes:Object,linkify:{type:Boolean,default:!1},imgMinWidth:[Number,String],imgMaxWidth:[Number,String],printCount:Number,printCountTime:Number,hideCursorPoint:Boolean,chartDataArr:Array,codeHeaderRender:Function,replaceLinksWhitelist:Array,isMermaidRenderAfterOutput:{type:Boolean,default:!1},showWidget:{type:Boolean,default:!1},widgetList:{type:Array,default:()=>[]},audioList:{type:Array,default:()=>[]},locale:{type:String,default:"zh-CN"},incremental:{type:Boolean,default:!0},showClassifyTag:{type:Boolean,default:!1},showPlanConfirm:{type:Boolean,default:!1}},data(){return{currentText:"",renderText:""}},computed:{processOptions(){return{isReplaceLinks:this.isReplaceLinks,replaceLinksWhitelist:this.replaceLinksWhitelist,isFinal:this.isFinal,showTags:this.showTags,showDownloadCard:this.showDownloadCard,fullFiles:this.fullFiles,showWidget:this.showWidget,widgetList:this.widgetList,audioList:this.audioList,showClassifyTag:this.showClassifyTag,showPlanConfirm:this.showPlanConfirm}}},watch:{content(t){this.clearTimer(),this.currentIndex=this.currentText.length,this.currentText=this._getProcessedContent(t),this.isPrintAnimate?this._startPrint():this.renderText=this.currentText},isFinal(t){t&&this.content&&(this.clearTimer(),this.currentText=this._getProcessedContent(this.content),this.renderText=this.currentText,this.currentIndex=this.currentText.length)},isMdExpand(t){t?this.currentText=sf(this.content,this.processOptions):this.currentText=sf((this.content||"").substr(0,3e3),this.processOptions),this.renderText=this.currentText,this.clearTimer(),this.currentIndex=this.currentText.length},widgetList:{handler(t){this._updateWidgets(t)},deep:!0},audioList:{handler(t){this._updateAudioPlayers(t)},deep:!0}},created(){this._init()},mounted(){AN()},beforeDestroy(){this.clearTimer(),this._destroyAllEmbedded()},methods:{_getProcessedContent(t){if(!t)return"";const e=this.isMdExpand===void 0||this.isMdExpand?1e6:1e4;return sf(t.substr(0,e),this.processOptions)},_startPrint(){this.startCurrentTimer({printCount:this.printCount||1,printCountTime:this.printCountTime||16,hideCursorPoint:this.hideCursorPoint,isFinal:this.isFinal})},_init(){const t=this._getProcessedContent(this.content||"");this.currentText=t,!this.isPrintAnimate||this.isFinal?(this.renderText=t,this.currentIndex=t.length,this.clearTimer()):this._startPrint()}}};var eB=function(){var e=this,r=e._self._c;return r("MDRender",{ref:"containerRef",class:e.clazzMd||"answer-md",style:e.styleObj,attrs:{highlight:!0,"table-class":e.clazzTable||(e.isFinal?"table-style":"table"),source:e.renderText,"anchor-attributes":e.anchorAttributes||{target:"_blank"},linkify:e.linkify,incremental:e.incremental,postrender:e._postrender},on:{rendered:e._onMDRendered}})},tB=[],rB=pr(JO,eB,tB,!1,null,null,null,null);const Jb=rB.exports,X4=An(Jb);const nB={name:"MsgThought",components:{VIcon:n2},props:{titleRender:{type:[Object,Function],default:null},isMobile:Boolean,content:String,title:String,titleIcon:String,nodeName:String,status:String,elapsed:{type:Number,default:0},detailVisible:{type:Boolean,default:!0}},data(){return{THOUGHT_STATUS:bP,innerDetailVisible:this.detailVisible,renderedContent:"",xssHandler:new Un.FilterXSS(_P)}},computed:{elapsedSeconds(){return this.elapsed?(this.elapsed/1e3).toFixed(1):0}},watch:{content:{immediate:!0,handler(t){const e=(t||"").replace(/^\n+/,"").replace(/\n/g,"<br>");this.renderedContent=this.xssHandler.process(e)}},detailVisible(t){this.innerDetailVisible=t}},methods:{onTitleClick(){const t=!this.innerDetailVisible;this.innerDetailVisible=t,this.$emit("update:detailVisible",t)}}};var iB=function(){var e=this,r=e._self._c;return r("div",{staticClass:"thought-clps-content"},[e.titleRender?r(e.titleRender,{tag:"component"}):e._e(),e.titleRender?e._e():r("div",{staticClass:"thought-title",on:{click:e.onTitleClick}},[r("div",{staticClass:"thought-title-container"},[r("img",{staticClass:"thought-title-icon",attrs:{src:e.titleIcon}}),r("span",{staticClass:"thought-title-name"},[e._v(" "+e._s(e.title)+" "),e.nodeName?r("span",{staticClass:"thought-clps-modellabel"},[e._v(" -"+e._s(e.nodeName)+" ")]):e._e()]),e.status===e.THOUGHT_STATUS.failed?r("v-icon",{style:{color:"#FF8345"},attrs:{name:"basic_warning_line",size:"16"}}):e._e(),e.status===e.THOUGHT_STATUS.success?r("v-icon",{style:{color:"#0FB87F"},attrs:{name:"basic_finish_line",size:"16"}}):e._e(),e.status===e.THOUGHT_STATUS.stop?r("v-icon",{style:{color:"rgba(1,11,50,0.41)"},attrs:{name:"basic_stop_line",size:"16"}}):e._e()],1),r("div",{staticClass:"thought-title-container thought-title-elapsed"},[r("span",[e._v(e._s(e.elapsedSeconds)+"s")]),r("v-icon",{staticClass:"thought__header__icon",attrs:{name:"arrow_down_small_line",rotate:e.innerDetailVisible?180:0,size:"12"}})],1)]),e.innerDetailVisible?r("div",{staticClass:"thought-detail"},[r("div",{staticClass:"question-text",class:{"question-text-mobile":e.isMobile},domProps:{innerHTML:e._s(e.renderedContent)}})]):e._e()],1)},aB=[],oB=pr(nB,iB,aB,!1,null,"60c16159",null,null);const sB=oB.exports,j4=An(sB);/*! *****************************************************************************
|
|
50
50
|
Copyright (c) Microsoft Corporation.
|
|
51
51
|
|
|
52
52
|
Permission to use, copy, modify, and/or distribute this software for any
|
package/dist/lke-component.es.js
CHANGED
|
@@ -15617,7 +15617,7 @@ const AO = {
|
|
|
15617
15617
|
};
|
|
15618
15618
|
var TO = function() {
|
|
15619
15619
|
var e = this, r = e._self._c;
|
|
15620
|
-
return r("div", { staticClass: "classify-tag", class: { "classify-tag--collapsed": e.collapsed } }, [r("div", { staticClass: "classify-tag__header", on: { click: e.toggleCollapse } }, [r("svg", {
|
|
15620
|
+
return r("div", { staticClass: "classify-tag", class: { "classify-tag--collapsed": e.collapsed } }, [r("div", { staticClass: "classify-tag__header", on: { click: e.toggleCollapse } }, [r("svg", { attrs: { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" } }, [r("path", { staticStyle: { fill: "color(display-p3 0.2902 0.4392 1.0000)", "fill-opacity": "1" }, attrs: { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M14.6673 8.0026C14.6673 4.32071 11.6825 1.33594 8.00065 1.33594C4.31875 1.33594 1.33398 4.32071 1.33398 8.0026C1.33398 11.6845 4.31875 14.6693 8.00065 14.6693C9.30211 14.6693 10.5165 14.2963 11.5427 13.6515L14.0003 14.0026L13.6493 11.5451C14.2943 10.5188 14.6673 9.30427 14.6673 8.0026ZM9.53271 4.90821C9.17249 4.59038 8.69733 4.42965 8.09538 4.42965C7.40443 4.42965 6.87353 4.62549 6.49142 5.00899L6.49031 5.01011C6.10731 5.38555 5.91113 5.89787 5.91113 6.55934V6.58788H6.92834V6.55934C6.92834 6.186 7.00316 5.88407 7.16637 5.66942C7.35011 5.41021 7.64478 5.29692 8.03181 5.29692C8.34206 5.29692 8.6007 5.37861 8.78036 5.55472L8.78283 5.55714C8.95394 5.7338 9.03537 5.97228 9.03537 6.26554C9.03537 6.4892 8.94804 6.6972 8.78703 6.89889L8.78139 6.90595L8.62913 7.07178L8.35539 7.31521L8.23731 7.42503L8.0271 7.63165C7.80455 7.86045 7.6682 8.03969 7.60292 8.17753L7.60164 8.18025L7.56817 8.2469C7.47946 8.44276 7.42756 8.73331 7.41978 9.22348H8.4573C8.49181 8.50677 8.80055 8.14573 8.96934 8.00587L9.28505 7.73273L9.58341 7.46308L9.67835 7.37044L9.73842 7.30517C9.96924 7.01379 10.0889 6.64468 10.0889 6.20321C10.0889 5.65678 9.90079 5.22396 9.53412 4.90944L9.53271 4.90821ZM7.94792 11.3333C8.31611 11.3333 8.61458 11.0349 8.61458 10.6667C8.61458 10.2985 8.31611 10 7.94792 10C7.57973 10 7.28125 10.2985 7.28125 10.6667C7.28125 11.0349 7.57973 11.3333 7.94792 11.3333Z", fill: "#4A70FF" } })]), r("span", { staticClass: "classify-tag__title" }, [e._v(e._s(e.displayTitle))]), r("svg", { staticClass: "classify-tag__arrow", class: { "classify-tag__arrow--up": !e.collapsed }, attrs: { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" } }, [r("path", { attrs: { d: "M4 6L8 10L12 6", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" } })])]), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.collapsed, expression: "!collapsed" }], staticClass: "classify-tag__content" }, e._l(e.normalizedQuestions, function(n, i) {
|
|
15621
15621
|
return r("div", { key: n.id || i, staticClass: "classify-tag__question-group" }, [r("div", { staticClass: "classify-tag__question-text" }, [e._v(" " + e._s(i + 1) + "、" + e._s(n.text) + " "), n.isMulti ? r("span", { staticClass: "classify-tag__multi-hint" }, [e._v(e._s(e.i18nText.支持多选))]) : e._e()]), r("div", { staticClass: "classify-tag__options" }, [n.isMulti ? e._l(n.options, function(a, o) {
|
|
15622
15622
|
return r("label", { key: o, staticClass: "classify-tag__checkbox", class: {
|
|
15623
15623
|
"classify-tag__checkbox--checked": e.isChecked(n.id || i, o),
|
|
@@ -15640,7 +15640,7 @@ var TO = function() {
|
|
|
15640
15640
|
DO,
|
|
15641
15641
|
!1,
|
|
15642
15642
|
null,
|
|
15643
|
-
"
|
|
15643
|
+
"82dd6a75",
|
|
15644
15644
|
null,
|
|
15645
15645
|
null
|
|
15646
15646
|
);
|
|
@@ -46,7 +46,7 @@ https://github.com/highlightjs/highlight.js/issues/2277`),B=L,R=O),P===void 0&&(
|
|
|
46
46
|
|
|
47
47
|
<div class="video-placeholder"></div>
|
|
48
48
|
|
|
49
|
-
`))}return t=VN(t),t=zN(t),r&&(t=ZN(t,n)),GN(t)||(t=HN(t),t=WN.clean(t)),t=wN(t),t=SN(t),t=yN(t),t=CN(t),t=gN(t),t=mN(t),t=FN(t),i||(t=_N(t)),t=bN(t),a&&(t=IN(t)),o&&(t=LN(t,s)),u?t=DN(t,l):t=EN(t),c&&c.length>0?t=kN(t,c):t=MN(t),f?t=PN(t):t=RN(t),h?t=NN(t):t=ON(t),t=xN(t),t=UN.process(gE(t)),t}function ZN(t,e){if(!t||P3(window.location.hash,"from"))return t;let n=["lke.cloud.tencent.com","qidian"];e&&(n=e.concat(n));const i=BN(t);i.forEach((u,l)=>{t=t.replace(u,`IMG_URL${l}`)});const a=`${window.location.protocol}//${window.location.host}/lke#/link-info/redirect?target=`,o=n.map(u=>`(?!.*${u})`).join(""),s=new RegExp(`(\\[([^\\]]+)\\]\\((https?:\\/\\/${o}[^\\s)]+)\\))|(<a\\s+[^>]*href="(${o}[^"]+)"[^>]*>(.*?)<\\/a>)`,"gi");return t=t.replace(s,(u,l,c,f,h,d,p)=>l&&c?`[${c}](${a}${encodeURIComponent(f)})`:d&&!d.startsWith("#")?`<a href="${a}${encodeURIComponent(d)}">${p}</a>`:u),i.forEach((u,l)=>{t=t.replace(`IMG_URL${l}`,u)}),t}function kf(t,e={}){return AN(t,r=>qN(r,e))}const YN={data(){return{currentTimer:null,currentIndex:0}},methods:{clearTimer(){this.currentTimer&&(clearTimeout(this.currentTimer),this.currentTimer=null)},startCurrentTimer(t={}){const{printCount:e=1,printCountTime:r=16,hideCursorPoint:n=!1,isFinal:i=!1}=t;this.clearTimer(),this.currentTimer=setTimeout(()=>{const a=e;this.currentIndex+=a,this.renderText=n?this.currentText.substring(0,this.currentIndex):this.currentText.substring(0,this.currentIndex)+"CURSOR_POINT",(this.currentIndex<this.currentText.length||!i)&&this.startCurrentTimer(t)},r)}},beforeDestroy(){this.clearTimer()}};function XN(t,e={}){const{type:r="text/javascript",crossOrigin:n}=e;return new Promise((i,a)=>{if(document.querySelector(`script[src="${t}"]`)){i();return}const o=document.createElement("script");o.src=t,o.type=r,n&&(o.crossOrigin=n),o.onload=i,o.onerror=()=>a(new Error(`Failed to load: ${t}`)),document.head.appendChild(o)})}function jN(){const t=Date.now(),e=5*60*1e3;return Math.floor(t/e)*e}async function KN(){try{const t=window.tdWidgetSrc||"https://cdn.xiaowei.qq.com/webim/assets/static/widget/release/lib/js/",e=jN();return await XN(`${t}adp-widget.js?nounce=${e}`,{type:"module"}),!0}catch(t){throw console.error("Failed to load adp-widget:",t),t}}const cle="";Vr.config&&!Vr.config.ignoredElements.includes("adp-widget")&&Vr.config.ignoredElements.push("adp-widget");const QN={name:"MsgWidget",props:{output:{type:String,default:""},locale:{type:String,default:"zh-CN"},disable:{type:Boolean,default:!1}},data(){return{loaded:!1}},async mounted(){try{await KN(),this.loaded=!0}catch(t){console.error("[MsgWidget] 加载 adp-widget 失败:",t)}},methods:{handleAction(t){const{action:e}=t.detail||{};this.$emit("widget-action",e),this.$emit("widget-event",t)},handleRendered(t){const{success:e,config:r,error:n,timestamp:i}=t.detail||{};this.$emit("widget-rendered",{success:e,config:r,error:n,timestamp:i})}}};var JN=function(){var e=this,r=e._self._c;return r("div",{staticClass:"lke__widget-container"},[e.output&&e.loaded?r("adp-widget",{ref:"widget",attrs:{locale:e.locale,"widget-json":e.output,disable:e.disable},on:{"widget-rendered":e.handleRendered,"widget-action":e.handleAction}}):e._e()],1)},eO=[],tO=ur(QN,JN,eO,!1,null,"c152fdb4",null,null);const N3=tO.exports,Y=(...t)=>{console.log("[StreamAudioPlayer24]",...t)};let O3=class{constructor(){this.playMode=null,this.audioContext=null,this.audioQueue=[],this.pendingChunks=[],this.isPlaying=!1,this.totalDuration=0,this.estimatedDuration=0,this.pausedAt=0,this.startedAt=0,this.timeUpdateInterval=null,this.scheduledSources=[],this.nextScheduleTime=0,this.scheduledCount=0,this.autoPlayCheckInterval=null,this.autoPlayCheckWaitTime=0,this.processedChunkCount=0,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.decodeAheadCount=1;const e=this.isMobileDevice();this.maxDecodedBuffers=e?8:20,this.playedBufferCount=0,this.audioElement=null,this.iosUnlockAudio=null,this.mediaStreamDestination=null,this.wasPlayingBeforeHidden=!1,this.handleVisibilityChange=null,this.onPlayCallback=null,this.onPauseCallback=null,this.onEndCallback=null,this.onErrorCallback=null,this.onTimeUpdateCallback=null,this.onDurationChangeCallback=null,this.onUrlReadyCallback=null,this.generationComplete=!1,this.durationFromUrlSet=!1,this.urlReady=!1,this.fullAudioUrl=null,this.preloadedAudioElement=null}isMobileDevice(){return typeof navigator>"u"?!1:/Android|iPhone|iPad|iPod|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}initAudioContext(){if(!this.audioContext)try{const e=window.AudioContext||window.webkitAudioContext;this.audioContext=new e,Y("[initAudioContext] AudioContext 创建成功",{state:this.audioContext.state,sampleRate:this.audioContext.sampleRate,isIOS:/iPhone|iPad|iPod/i.test(navigator.userAgent)}),this.audioContext.onstatechange=()=>{if(Y("[AudioContext.onstatechange] 状态变化:",this.audioContext.state),(this.audioContext.state==="interrupted"||this.audioContext.state==="suspended")&&this.isPlaying&&this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[AudioContext.onstatechange] iOS audio 元素已暂停")}catch{}},this.handleVisibilityChange=()=>{var r,n,i,a;document.hidden?(this.wasPlayingBeforeHidden=this.isPlaying,Y("[visibilitychange] 页面隐藏,记录播放状态:",this.wasPlayingBeforeHidden)):(Y("[visibilitychange] 页面可见",{wasPlayingBeforeHidden:this.wasPlayingBeforeHidden,isPlaying:this.isPlaying,audioContextState:(r=this.audioContext)==null?void 0:r.state}),this.wasPlayingBeforeHidden&&(((n=this.audioContext)==null?void 0:n.state)==="suspended"||((i=this.audioContext)==null?void 0:i.state)==="interrupted"?this.audioContext.resume().then(()=>{Y("[visibilitychange] AudioContext 已恢复"),this.isPlaying&&this.iosUnlockAudio&&this.iosUnlockAudio.play().catch(o=>{Y("[visibilitychange] iOS audio 恢复播放失败:",o)})}).catch(o=>{Y("[visibilitychange] AudioContext 恢复失败:",o),this.isPlaying&&(this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback())}):((a=this.audioContext)==null?void 0:a.state)==="running"&&this.isPlaying&&this.iosUnlockAudio&&this.iosUnlockAudio.play().catch(o=>{Y("[visibilitychange] iOS audio 恢复播放失败:",o)})),this.wasPlayingBeforeHidden=!1)},document.addEventListener("visibilitychange",this.handleVisibilityChange),/iPhone|iPad|iPod/i.test(navigator.userAgent)&&this.setupIOSAudioRoute()}catch(e){console.error("[initAudioContext] 创建 AudioContext 失败:",e),this.onErrorCallback&&this.onErrorCallback(new Error("浏览器不支持音频播放"))}}setupIOSAudioRoute(){if(this.audioContext)try{if(typeof this.audioContext.createMediaStreamDestination!="function"){Y("[setupIOSAudioRoute] 浏览器不支持 createMediaStreamDestination");return}this.mediaStreamDestination=this.audioContext.createMediaStreamDestination(),this.iosUnlockAudio=document.createElement("audio"),this.iosUnlockAudio.srcObject=this.mediaStreamDestination.stream,this.iosUnlockAudio.setAttribute("playsinline","true"),this.iosUnlockAudio.setAttribute("webkit-playsinline","true"),this.iosUnlockAudio.onerror=e=>{Y("[setupIOSAudioRoute] iOS audio 元素错误:",e)},Y("[setupIOSAudioRoute] iOS 音频路由设置完成")}catch(e){console.error("[setupIOSAudioRoute] 设置失败:",e),this.mediaStreamDestination=null,this.iosUnlockAudio=null}}getAudioDestination(){return this.mediaStreamDestination?this.mediaStreamDestination:this.audioContext?this.audioContext.destination:null}async startIOSAudioElement(){if(this.iosUnlockAudio)try{await this.iosUnlockAudio.play(),Y("[startIOSAudioElement] iOS audio 元素播放启动成功")}catch(e){Y("[startIOSAudioElement] iOS audio 元素播放失败:",e)}}initAudioElement(){this.audioElement||(this.audioElement=new Audio,this.audioElement.preload="metadata",this.audioElement.addEventListener("play",()=>{this.isPlaying=!0,this.onPlayCallback&&this.onPlayCallback()}),this.audioElement.addEventListener("pause",()=>{this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback()}),this.audioElement.addEventListener("ended",()=>{this.isPlaying=!1,this.onEndCallback&&this.onEndCallback()}),this.audioElement.addEventListener("timeupdate",()=>{this.onTimeUpdateCallback&&this.onTimeUpdateCallback(this.audioElement.currentTime,this.audioElement.duration||0)}),this.audioElement.addEventListener("durationchange",()=>{this.totalDuration=this.audioElement.duration||0,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}),this.audioElement.addEventListener("error",e=>{this.onErrorCallback&&this.onErrorCallback(new Error("音频加载失败: "+(e.message||"未知错误")))}),this.audioElement.addEventListener("loadedmetadata",()=>{this.totalDuration=this.audioElement.duration||0,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}))}setPlayMode(e){this.playMode!==e&&(this.playMode==="stream"?this.clearStreamMode():this.playMode==="url"&&this.clearUrlMode(),this.playMode=e,e==="stream"?this.initAudioContext():e==="url"&&this.initAudioElement())}clearStreamMode(){this.stop(),this.audioQueue=[],this.pendingChunks=[],this.totalDuration=0,this.estimatedDuration=0,this.scheduledCount=0,this.nextScheduleTime=0,this.processedChunkCount=0,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.playedBufferCount=0,this.generationComplete=!1,this.fullAudioUrl=null,this.urlReady=!1,this.preloadedAudioElement=null,this.iosUnlockAudio&&(this.iosUnlockAudio.pause(),this.iosUnlockAudio.srcObject=null,this.iosUnlockAudio=null),this.mediaStreamDestination=null,this.handleVisibilityChange&&(document.removeEventListener("visibilitychange",this.handleVisibilityChange),this.handleVisibilityChange=null),this.audioContext&&(this.audioContext.onstatechange=null,this.audioContext.close().catch(()=>{}),this.audioContext=null),this.wasPlayingBeforeHidden=!1}clearUrlMode(){this.audioElement&&(this.audioElement.pause(),this.audioElement.src="")}setAudioUrl(e){e&&(this.setPlayMode("url"),this.audioElement.src=e,this.audioElement.load())}async ensureAudioContextRunning(){if(!this.audioContext)throw new Error("AudioContext not initialized");if(Y("[ensureAudioContextRunning] 当前状态:",this.audioContext.state),this.audioContext.state==="suspended")try{await this.audioContext.resume(),Y("[ensureAudioContextRunning] resume 成功,新状态:",this.audioContext.state),/iPhone|iPad|iPod/i.test(navigator.userAgent)&&await this.playUnlockSound()}catch(e){throw console.error("[ensureAudioContextRunning] resume 失败:",e),new Error("无法激活音频上下文")}else if(this.audioContext.state==="interrupted")try{await this.audioContext.resume(),Y("[ensureAudioContextRunning] 从 interrupted 状态恢复")}catch(e){throw console.error("[ensureAudioContextRunning] 从 interrupted 恢复失败:",e),new Error("无法恢复音频上下文")}}async playUnlockSound(){if(this.audioContext)try{const e=this.audioContext.createBuffer(1,1,this.audioContext.sampleRate),r=this.audioContext.createBufferSource();r.buffer=e,r.connect(this.getAudioDestination()),r.start(0),Y("[playUnlockSound] 播放解锁音频完成")}catch(e){Y("[playUnlockSound] 播放解锁音频失败(可忽略):",e)}}addBase64ChunkLazy(e,r=1){if(!e)return;this.setPlayMode("stream"),this.pendingChunks.push(e);const n=(e.length*.75/1024).toFixed(2);Y(`[addBase64ChunkLazy] 添加第 ${this.pendingChunks.length+this.processedChunkCount} 个chunk`,{chunkSize:`${n} KB`,pendingChunks:this.pendingChunks.length,processedChunkCount:this.processedChunkCount,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,isPlaying:this.isPlaying,totalDuration:this.totalDuration.toFixed(2),estimatedDuration:this.estimatedDuration.toFixed(2)}),this.estimatedDuration+=r,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration()),this.autoPlayCheckWaitTime>0&&(Y("[addBase64ChunkLazy] 重置等待超时时间"),this.autoPlayCheckWaitTime=0),this.isPlaying?(Y("[addBase64ChunkLazy] 正在播放,触发 decodeAhead"),this.decodeAhead()):Y("[addBase64ChunkLazy] 未在播放状态,不触发解码")}async addBase64Chunk(e){e&&this.addBase64ChunkLazy(e)}getDisplayDuration(){return Math.floor(this.totalDuration+this.estimatedDuration)}async decodeAhead(){let e=0;if(this.audioQueue.forEach(i=>{e+=i.duration}),Y("[decodeAhead] 开始",{decodingInProgress:this.decodingInProgress,pendingChunks:this.pendingChunks.length,audioQueueLength:this.audioQueue.length,currentQueueDuration:e.toFixed(2),scheduledCount:this.scheduledCount,isPlaying:this.isPlaying,generationComplete:this.generationComplete,totalDuration:this.totalDuration.toFixed(2)}),this.decodingInProgress){Y("[decodeAhead] 已在解码中,跳过");return}if(this.pendingChunks.length===0){Y("[decodeAhead] 没有待解码的 chunk,跳过");return}const r=this.audioQueue.length-this.scheduledCount;if(Y("[decodeAhead] 未调度数量检查",{unscheduledCount:r,decodeAheadCount:this.decodeAheadCount,needMoreDecode:r<this.decodeAheadCount}),r>=this.decodeAheadCount&&this.pendingChunks.length>0){Y("[decodeAhead] 已有足够预解码 buffer,100ms 后再检查"),setTimeout(()=>this.decodeAhead(),100);return}this.decodingInProgress=!0;const n=this.processedChunkCount+1;try{const i=this.pendingChunks.shift(),a=(i.length*.75/1024).toFixed(2);Y(`[decodeAhead] 开始解码第 ${n} 个chunk`,{size:`${a} KB`});const o=window.atob(i),s=new Uint8Array(o.length);for(let l=0;l<o.length;l++)s[l]=o.charCodeAt(l);const u=s.buffer;await this.addAudioChunkInternal(u),Y(`[decodeAhead] 第 ${n} 个chunk 解码完成`,{audioQueueLength:this.audioQueue.length,totalDuration:this.totalDuration.toFixed(2),durationFromUrlSet:this.durationFromUrlSet}),this.durationFromUrlSet||(this.estimatedDuration>0&&(this.estimatedDuration=Math.max(0,this.estimatedDuration-1)),this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration()))}catch(i){console.error(`[decodeAhead] 解码第 ${n} 个chunk 失败:`,i),this.onErrorCallback&&this.onErrorCallback(i)}finally{this.decodingInProgress=!1}this.pendingChunks.length>0&&this.isPlaying?(Y("[decodeAhead] 继续解码下一个chunk"),setTimeout(()=>this.decodeAhead(),0)):Y("[decodeAhead] 解码结束",{pendingChunks:this.pendingChunks.length,isPlaying:this.isPlaying})}async processAudioDataArray(e){if(!e||!Array.isArray(e))return;const r=e.slice(this.processedChunkCount);Y("[processAudioDataArray] 处理音频数据数组",{totalLength:e.length,processedChunkCount:this.processedChunkCount,newChunksCount:r.length});for(const n of r)await this.addBase64Chunk(n),this.processedChunkCount++;Y("[processAudioDataArray] 处理完成",{processedChunkCount:this.processedChunkCount})}decodeAudioDataCompat(e){const r=(e.byteLength/1024).toFixed(2);return Y("[decodeAudioDataCompat] 开始解码",{size:`${r} KB`}),new Promise((n,i)=>{const a=this.audioContext.decodeAudioData(e,o=>{Y("[decodeAudioDataCompat] 解码成功",{duration:o.duration.toFixed(2),sampleRate:o.sampleRate,channels:o.numberOfChannels}),n(o)},o=>{console.error("[decodeAudioDataCompat] 解码失败",{error:(o==null?void 0:o.message)||o,bufferSize:`${r} KB`}),i(o||new Error("解码音频数据失败"))});a&&typeof a.then=="function"&&a.then(n).catch(o=>{console.error("[decodeAudioDataCompat] Promise 解码失败",{error:(o==null?void 0:o.message)||o,bufferSize:`${r} KB`}),i(o)})})}async addAudioChunk(e){return this.addAudioChunkInternal(e)}async addAudioChunkInternal(e){if(this.setPlayMode("stream"),!this.audioContext)throw new Error("AudioContext not initialized");try{let r;e instanceof Blob?r=await e.arrayBuffer():r=e;const n=(r.byteLength/1024).toFixed(2);Y("[addAudioChunkInternal] 开始解码 ArrayBuffer",{size:`${n} KB`});const i=r.slice(0),a=await this.decodeAudioDataCompat(i),o=this.audioQueue.length,s=this.totalDuration;this.audioQueue.push(a),this.durationFromUrlSet||(this.totalDuration+=a.duration),Y("[addAudioChunkInternal] 解码成功",{bufferDuration:a.duration.toFixed(2),sampleRate:a.sampleRate,numberOfChannels:a.numberOfChannels,length:a.length,audioQueueLength:`${o} -> ${this.audioQueue.length}`,totalDuration:`${s.toFixed(2)} -> ${this.totalDuration.toFixed(2)}`,durationFromUrlSet:this.durationFromUrlSet}),this.isPlaying&&!this.isSchedulingFromPosition?(Y("[addAudioChunkInternal] 正在播放,调用 scheduleNewChunks"),this.scheduleNewChunks()):this.isSchedulingFromPosition?Y("[addAudioChunkInternal] 正在执行 scheduleFromPosition,跳过 scheduleNewChunks"):Y("[addAudioChunkInternal] 未在播放状态,不调度"),this.onDurationChangeCallback&&!this.durationFromUrlSet&&this.onDurationChangeCallback(this.getDisplayDuration())}catch(r){console.error("[addAudioChunkInternal] 解码音频数据失败:",r),this.onErrorCallback&&this.onErrorCallback(r)}}async addPCMChunk(e,r=24e3,n=1,i=16){if(this.setPlayMode("stream"),!this.audioContext)throw new Error("AudioContext not initialized");try{const a=i/8,o=e.byteLength/(a*n),s=this.audioContext.createBuffer(n,o,r),u=new DataView(e);for(let l=0;l<n;l++){const c=s.getChannelData(l);for(let f=0;f<o;f++){let h;if(i===16)h=u.getInt16((f*n+l)*2,!0)/32768;else if(i===8)h=(u.getUint8(f*n+l)-128)/128;else if(i===32)h=u.getFloat32((f*n+l)*4,!0);else throw new Error(`Unsupported bits per sample: ${i}`);c[f]=h}}this.audioQueue.push(s),this.totalDuration+=s.duration,this.isPlaying&&this.audioContext&&this.scheduleNewChunks(),this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}catch(a){this.onErrorCallback&&this.onErrorCallback(a)}}scheduleNewChunks(){if(!this.audioContext||!this.isPlaying){Y("[scheduleNewChunks] 跳过",{hasAudioContext:!!this.audioContext,isPlaying:this.isPlaying});return}const e=this.audioContext.currentTime,r=this.scheduledCount;this.scheduledCount>this.audioQueue.length&&(Y("[scheduleNewChunks] 警告:scheduledCount 超出 audioQueue 长度!",{scheduledCount:this.scheduledCount,audioQueueLength:this.audioQueue.length,playedBufferCount:this.playedBufferCount}),this.scheduledCount=this.audioQueue.length),Y("[scheduleNewChunks] 开始调度",{audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,toSchedule:this.audioQueue.length-this.scheduledCount,currentTime:e.toFixed(3),nextScheduleTime:this.nextScheduleTime.toFixed(3),pendingChunks:this.pendingChunks.length});for(let n=this.scheduledCount;n<this.audioQueue.length;n++){const i=this.audioQueue[n],a=this.audioContext.createBufferSource();a.buffer=i,a.connect(this.getAudioDestination());const o=Math.max(e,this.nextScheduleTime);Y(`[scheduleNewChunks] 调度第 ${n+1} 个buffer`,{bufferDuration:i.duration.toFixed(2),scheduleTime:o.toFixed(3),currentTime:e.toFixed(3)}),a.start(o,0,i.duration),this.nextScheduleTime=o+i.duration,this.scheduledCount++,this.scheduledSources.push(a),a.onended=()=>{const s=this.scheduledSources.indexOf(a);if(s===-1){Y(`[sourceNode.onended] 第 ${n+1} 个buffer 被手动停止,跳过后续逻辑`);return}if(this.scheduledSources.splice(s,1),this.playedBufferCount++,this.cleanupOldBuffers(),Y(`[sourceNode.onended] 第 ${n+1} 个buffer 播放结束`,{scheduledSourcesLength:this.scheduledSources.length,isPlaying:this.isPlaying,pendingChunks:this.pendingChunks.length,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,generationComplete:this.generationComplete,playedBufferCount:this.playedBufferCount}),this.decodeAhead(),this.scheduledSources.length===0&&this.isPlaying){let u=0;this.audioQueue.forEach(l=>{u+=l.duration}),Y("[sourceNode.onended] 所有已调度片段播放完毕,尝试调度新片段",{audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledCount:this.audioQueue.length-this.scheduledCount,remainingQueueDuration:u.toFixed(2),pendingChunks:this.pendingChunks.length}),this.scheduleNewChunks(),this.scheduledSources.length===0&&(Y("[sourceNode.onended] 调度后仍无片段",{pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledBuffers:this.audioQueue.length-this.scheduledCount}),this.pendingChunks.length>0?(Y("[sourceNode.onended] 还有待解码chunk,启动 autoPlayCheck"),this.startAutoPlayCheck()):this.audioQueue.length>this.scheduledCount?(Y("[sourceNode.onended] 还有未调度的buffer,重新调度"),this.scheduleNewChunks()):this.generationComplete?(Y("[sourceNode.onended] 生成完成,结束播放"),this.handlePlaybackEnd()):(Y("[sourceNode.onended] 等待新数据,启动 autoPlayCheck"),this.startAutoPlayCheck()))}}}Y("[scheduleNewChunks] 调度完成",{scheduledCount:`${r} -> ${this.scheduledCount}`,scheduledSourcesLength:this.scheduledSources.length,nextScheduleTime:this.nextScheduleTime.toFixed(3)})}async play(){if(this.playMode==="url"&&this.audioElement){try{await this.audioElement.play()}catch(e){this.onErrorCallback&&this.onErrorCallback(e)}return}if(!this.audioContext){this.onErrorCallback&&this.onErrorCallback(new Error("AudioContext not initialized"));return}if(!this.isPlaying){try{await this.ensureAudioContextRunning(),await this.startIOSAudioElement()}catch(e){this.onErrorCallback&&this.onErrorCallback(e);return}if(this.audioQueue.length===0&&this.pendingChunks.length>0&&await this.decodeFirstChunk(),this.audioQueue.length===0){Y("[play] 没有可播放的音频数据");return}this.isPlaying=!0,this.startedAt=this.audioContext.currentTime-this.pausedAt,this.pausedAt===0&&(this.scheduledCount=0,this.nextScheduleTime=this.audioContext.currentTime),this.pausedAt===0?this.scheduleNewChunks():this.scheduleFromPosition(this.pausedAt),this.decodeAhead(),this.onPlayCallback&&this.onPlayCallback(),this.startTimeUpdate(),Y("[play] 播放开始",{audioContextState:this.audioContext.state,audioQueueLength:this.audioQueue.length,pausedAt:this.pausedAt,isIOS:/iPhone|iPad|iPod/i.test(navigator.userAgent)})}}async decodeFirstChunk(){if(this.pendingChunks.length===0)return;const e=this.pendingChunks.shift();try{const r=window.atob(e),n=new Uint8Array(r.length);for(let a=0;a<r.length;a++)n[a]=r.charCodeAt(a);const i=n.buffer;await this.addAudioChunkInternal(i),this.estimatedDuration>0&&(this.estimatedDuration=Math.max(0,this.estimatedDuration-1))}catch(r){console.error("解码首个 chunk 失败:",r)}}scheduleFromPosition(e){if(!this.audioContext)return;this.isSchedulingFromPosition=!0;let r=0;const n=this.audioContext.currentTime;let i=n,a=0;for(let o=0;o<this.audioQueue.length;o++){const s=this.audioQueue[o],u=r,l=r+s.duration;if(l>e){const c=this.audioContext.createBufferSource();c.buffer=s,c.connect(this.getAudioDestination());let f=0,h=s.duration;e>u&&(f=e-u,h=s.duration-f,i=n),c.start(i,f,h),i+=h,this.scheduledSources.push(c),a++,c.onended=()=>{const d=this.scheduledSources.indexOf(c);if(d===-1){Y("[scheduleFromPosition.onended] sourceNode 被手动停止,跳过后续逻辑");return}this.scheduledSources.splice(d,1),this.playedBufferCount++,this.cleanupOldBuffers(),this.decodeAhead(),this.scheduledSources.length===0&&this.isPlaying&&(this.scheduleNewChunks(),this.scheduledSources.length===0&&(Y("[scheduleFromPosition.onended] 调度后仍无片段",{pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledBuffers:this.audioQueue.length-this.scheduledCount}),this.pendingChunks.length>0?(Y("[scheduleFromPosition.onended] 还有待解码chunk,启动 autoPlayCheck"),this.startAutoPlayCheck()):this.audioQueue.length>this.scheduledCount?(Y("[scheduleFromPosition.onended] 还有未调度的buffer,重新调度"),this.scheduleNewChunks()):this.generationComplete?(Y("[scheduleFromPosition.onended] 生成完成,结束播放"),this.handlePlaybackEnd()):(Y("[scheduleFromPosition.onended] 等待新数据,启动 autoPlayCheck"),this.startAutoPlayCheck())))}}r=l}this.scheduledCount=this.audioQueue.length,this.nextScheduleTime=i,this.isSchedulingFromPosition=!1,Y("[scheduleFromPosition] 调度完成",{startPosition:e.toFixed(2),scheduledInThisCall:a,scheduledCount:this.scheduledCount,nextScheduleTime:this.nextScheduleTime.toFixed(3),scheduledSourcesLength:this.scheduledSources.length})}pause(){if(this.playMode==="url"&&this.audioElement){this.audioElement.pause();return}if(!(!this.isPlaying||!this.audioContext)){this.pausedAt=this.audioContext.currentTime-this.startedAt;for(const e of this.scheduledSources)try{e.stop()}catch{}if(this.scheduledSources=[],this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[pause] iOS audio 元素已暂停")}catch{}this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback(),this.stopTimeUpdate(),this.stopAutoPlayCheck()}}stop(){if(this.playMode==="url"&&this.audioElement){this.audioElement.pause(),this.audioElement.currentTime=0,this.isPlaying=!1;return}this.pause(),this.pausedAt=0,this.startedAt=0,this.scheduledCount=0,this.nextScheduleTime=0,this.stopTimeUpdate(),this.stopAutoPlayCheck()}clear(){this.stop(),this.audioQueue=[],this.pendingChunks=[],this.totalDuration=0,this.estimatedDuration=0,this.scheduledCount=0,this.nextScheduleTime=0,this.processedChunkCount=0,this.generationComplete=!1,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.durationFromUrlSet=!1}handlePlaybackEnd(){let e=0;if(this.audioQueue.forEach(r=>{e+=r.duration}),Y("[handlePlaybackEnd] 播放结束",{totalDuration:this.totalDuration.toFixed(2),actualDecodedDuration:e.toFixed(2),audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,processedChunkCount:this.processedChunkCount,scheduledCount:this.scheduledCount,playedBufferCount:this.playedBufferCount,generationComplete:this.generationComplete,durationFromUrlSet:this.durationFromUrlSet}),this.isPlaying=!1,this.pausedAt=0,this.startedAt=0,this.stopTimeUpdate(),this.stopAutoPlayCheck(),this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[handlePlaybackEnd] iOS audio 元素已暂停")}catch{}this.onEndCallback&&this.onEndCallback()}async markGenerationComplete(e){let r=0;this.audioQueue.forEach(n=>{r+=n.duration}),Y("[markGenerationComplete] 标记生成完成",{audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,scheduledSourcesLength:this.scheduledSources.length,totalDuration:this.totalDuration.toFixed(2),currentDecodedDuration:r.toFixed(2),estimatedDuration:this.estimatedDuration.toFixed(2),isPlaying:this.isPlaying,hasAudioUrl:!!e,processedChunkCount:this.processedChunkCount}),this.generationComplete=!0,e&&(this.fullAudioUrl=e),this.isPlaying&&this.pendingChunks.length>0&&(Y("[markGenerationComplete] 正在播放,触发按需解码"),this.decodeAhead()),this.autoPlayCheckInterval&&this.scheduledSources.length===0&&this.pendingChunks.length===0&&(Y("[markGenerationComplete] 正在等待且无剩余片段,立即结束"),this.handlePlaybackEnd()),e?this.getDurationFromUrl(e):this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration())}getDurationFromUrl(e){Y("[getDurationFromUrl] 开始从 URL 获取时长并预加载",{audioUrl:e}),this.preloadedAudioElement=new Audio,this.preloadedAudioElement.preload="auto";const r=this.preloadedAudioElement;let n=!1;const i=()=>{if(n)return;n=!0;const s=r.duration;Y("[getDurationFromUrl] 获取时长成功",{duration:s.toFixed(2)}),this.totalDuration=s,this.estimatedDuration=0,this.durationFromUrlSet=!0,this.onDurationChangeCallback&&this.onDurationChangeCallback(Math.floor(s))},a=()=>{Y("[getDurationFromUrl] URL 预加载完成,可以 seek"),this.urlReady=!0,this.onUrlReadyCallback&&this.onUrlReadyCallback()},o=s=>{Y("[getDurationFromUrl] 获取时长/预加载失败",s),this.urlReady=!0,this.preloadedAudioElement=null,this.onDurationChangeCallback&&!n&&this.onDurationChangeCallback(this.getDisplayDuration()),this.onUrlReadyCallback&&this.onUrlReadyCallback()};r.addEventListener("loadedmetadata",i),r.addEventListener("canplay",a),r.addEventListener("canplaythrough",a),r.addEventListener("error",o),r.src=e,r.load()}async decodeAllPendingChunks(){for(Y("[decodeAllPendingChunks] 开始解码所有待解码 chunk",{pendingChunks:this.pendingChunks.length});this.pendingChunks.length>0;){const e=this.pendingChunks.shift(),r=this.processedChunkCount+1;try{const n=(e.length*.75/1024).toFixed(2);Y(`[decodeAllPendingChunks] 解码第 ${r} 个chunk`,{size:`${n} KB`});const i=window.atob(e),a=new Uint8Array(i.length);for(let s=0;s<i.length;s++)a[s]=i.charCodeAt(s);const o=a.buffer;await this.addAudioChunkInternal(o),this.processedChunkCount++,Y(`[decodeAllPendingChunks] 第 ${r} 个chunk 解码完成`,{totalDuration:this.totalDuration.toFixed(2)})}catch(n){console.error(`[decodeAllPendingChunks] 解码第 ${r} 个chunk 失败:`,n)}}Y("[decodeAllPendingChunks] 所有 chunk 解码完成",{audioQueueLength:this.audioQueue.length,totalDuration:this.totalDuration.toFixed(2)})}cleanupOldBuffers(){const e=this.audioQueue.length;if(Y("[cleanupOldBuffers] 检查",{currentQueueLength:e,maxDecodedBuffers:this.maxDecodedBuffers,playedBufferCount:this.playedBufferCount,scheduledCount:this.scheduledCount,pendingChunks:this.pendingChunks.length,totalDuration:this.totalDuration.toFixed(2)}),e>this.maxDecodedBuffers&&this.playedBufferCount>0){const r=Math.min(e-this.maxDecodedBuffers,this.playedBufferCount);if(r>0){let n=0;for(let o=0;o<r;o++)n+=this.audioQueue[o].duration;const i=this.audioQueue.splice(0,r);this.scheduledCount=Math.max(0,this.scheduledCount-r),this.playedBufferCount=Math.max(0,this.playedBufferCount-r);let a=0;i.forEach(o=>{a+=o.length*o.numberOfChannels*4/1024}),Y("[cleanupOldBuffers] 内存回收",{cleanedCount:r,cleanedDuration:n.toFixed(2),freedMemoryKB:a.toFixed(2),remainingQueueLength:this.audioQueue.length,newScheduledCount:this.scheduledCount,newPlayedBufferCount:this.playedBufferCount,isMobile:this.isMobileDevice()})}}}startAutoPlayCheck(){if(this.autoPlayCheckInterval){Y("[startAutoPlayCheck] 已有检查定时器,跳过");return}Y("[startAutoPlayCheck] 启动等待新数据检查"),this.autoPlayCheckWaitTime=0;const e=180*1e3;this.autoPlayCheckInterval=window.setInterval(()=>{this.autoPlayCheckWaitTime+=200,Y("[autoPlayCheck] 检查",{waitTime:this.autoPlayCheckWaitTime,scheduledCount:this.scheduledCount,audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,scheduledSourcesLength:this.scheduledSources.length}),this.scheduledCount<this.audioQueue.length?(Y("[autoPlayCheck] 发现新片段,调度"),this.scheduleNewChunks(),this.scheduledSources.length>0&&(Y("[autoPlayCheck] 调度成功,停止检查"),this.stopAutoPlayCheck())):this.scheduledSources.length>0?(Y("[autoPlayCheck] 还有片段在播放中,停止检查"),this.stopAutoPlayCheck()):this.pendingChunks.length>0?(Y("[autoPlayCheck] 还有待解码chunk,触发解码"),this.decodeAhead()):this.generationComplete?(Y("[autoPlayCheck] 生成完成且无播放片段和待解码chunk,结束播放"),this.handlePlaybackEnd()):this.autoPlayCheckWaitTime>=e&&(Y("[autoPlayCheck] 等待超时,结束播放"),this.handlePlaybackEnd())},200)}stopAutoPlayCheck(){this.autoPlayCheckInterval&&(clearInterval(this.autoPlayCheckInterval),this.autoPlayCheckInterval=null)}startTimeUpdate(){this.timeUpdateInterval||(this.timeUpdateInterval=window.setInterval(()=>{if(this.isPlaying&&this.audioContext){const e=this.audioContext.currentTime-this.startedAt;this.onTimeUpdateCallback&&this.onTimeUpdateCallback(e,this.totalDuration)}},100))}stopTimeUpdate(){this.timeUpdateInterval&&(clearInterval(this.timeUpdateInterval),this.timeUpdateInterval=null)}seek(e){if(Y("[seek] 开始",{time:e,playMode:this.playMode,generationComplete:this.generationComplete,urlReady:this.urlReady,hasPreloadedAudio:!!this.preloadedAudioElement,isPlaying:this.isPlaying}),this.playMode==="url"&&this.audioElement){this.audioElement.currentTime=Math.max(0,Math.min(e,this.audioElement.duration||0));return}if(this.playMode==="stream"){if(this.generationComplete&&this.urlReady&&this.preloadedAudioElement){Y("[seek] 切换到 URL 模式(使用预加载的 audio 元素)");const n=this.isPlaying;this.stopTimeUpdate();for(const i of this.scheduledSources)try{i.stop()}catch{}this.scheduledSources=[],this.isPlaying=!1,this.audioElement=this.preloadedAudioElement,this.preloadedAudioElement=null,this.playMode="url",this.bindAudioElementEvents(),this.audioElement.currentTime=Math.max(0,Math.min(e,this.audioElement.duration||0)),n&&this.audioElement.play().catch(i=>{Y("[seek] 播放失败:",i)});return}const r=this.isPlaying;r&&this.pause(),this.pausedAt=Math.max(0,Math.min(e,this.totalDuration)),r&&this.play()}}bindAudioElementEvents(){this.audioElement&&(this.audioElement.addEventListener("play",()=>{this.isPlaying=!0,this.onPlayCallback&&this.onPlayCallback()}),this.audioElement.addEventListener("pause",()=>{this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback()}),this.audioElement.addEventListener("ended",()=>{this.isPlaying=!1,this.onEndCallback&&this.onEndCallback()}),this.audioElement.addEventListener("timeupdate",()=>{this.onTimeUpdateCallback&&this.onTimeUpdateCallback(this.audioElement.currentTime,this.audioElement.duration||0)}),this.audioElement.addEventListener("error",e=>{this.onErrorCallback&&this.onErrorCallback(new Error("音频加载失败: "+(e.message||"未知错误")))}))}getPlayState(){return this.isPlaying}getDuration(){return this.playMode==="url"&&this.audioElement?this.audioElement.duration||0:this.getDisplayDuration()}getCurrentTime(){return this.playMode==="url"&&this.audioElement?this.audioElement.currentTime||0:this.isPlaying&&this.audioContext?this.audioContext.currentTime-this.startedAt:this.pausedAt}getAudioQueue(){return[...this.audioQueue]}async getAudioData(){const e=[];for(const r of this.audioQueue){const n=r.numberOfChannels,i=r.length,a=new ArrayBuffer(i*n*2),o=new DataView(a);for(let s=0;s<n;s++){const u=r.getChannelData(s);for(let l=0;l<i;l++){const c=Math.max(-1,Math.min(1,u[l])),f=c<0?c*32768:c*32767;o.setInt16((l*n+s)*2,f,!0)}}e.push(a)}return e}onPlay(e){this.onPlayCallback=e}onPause(e){this.onPauseCallback=e}onEnd(e){this.onEndCallback=e}onError(e){this.onErrorCallback=e}onTimeUpdate(e){this.onTimeUpdateCallback=e}onDurationChange(e){this.onDurationChangeCallback=e}onUrlReady(e){this.onUrlReadyCallback=e}isUrlReady(){return this.urlReady}destroy(){this.stop(),this.stopTimeUpdate(),this.stopAutoPlayCheck(),this.handleVisibilityChange&&(document.removeEventListener("visibilitychange",this.handleVisibilityChange),this.handleVisibilityChange=null),this.audioContext&&(this.audioContext.onstatechange=null,this.audioContext.close(),this.audioContext=null),this.audioQueue=[],this.iosUnlockAudio&&(this.iosUnlockAudio.pause(),this.iosUnlockAudio.srcObject=null,this.iosUnlockAudio=null),this.mediaStreamDestination=null,this.audioElement&&(this.audioElement.pause(),this.audioElement.src="",this.audioElement=null),this.playMode=null}},Mf="https://cdn.xiaowei.qq.com/adp/assets/static/iconfont-XzKaDZdEa7j2GPL-1201.js",uu={};function rO(t){const e={};return t.props.size&&(e.width=`${t.props.size}px`,e.height=`${t.props.size}px`),t.props.valign&&(e.verticalAlign=`${t.props.valign}px`),t.props.rotate&&(e.transform=`rotate(${t.props.rotate}deg)`),e}function nO(t){const e=t.props;return{"v-icon":!0,"is-horizontal":e.flip==="horizontal","is-vertical":e.flip==="vertical","v-icon--stroke":e.useStroke,"v-icon--fill":!e.useStroke}}function B3(t){let e=document.createElement("script");e.type="text/javascript",e.src=t,document.getElementsByTagName("head")[0].appendChild(e)}const iO=t=>{let e=!1,r=Object.keys(uu);r.forEach(n=>{uu[n]===t&&(e=!0)}),e||(uu[r.length]=t,B3(t))};var aO=ur({name:"VIcon",functional:!0,props:{name:{type:String,required:!0},remote:{type:Boolean,default:!1},remoteSrc:{type:String,default:""},remotePrefix:{type:String,default:"v-"},loadDefaultRemoteIcons:{type:Boolean,default:!0},label:String,rotate:[Number,String],size:[Number,String],valign:[Number,String],flip:String,useStroke:Boolean,clazz:String,scoped:String},render(t,e){const r=rO(e);if(e.data.style)for(let n in e.data.style)r[n]=e.data.style[n];return!uu.defaultRemoteSrc&&Mf&&e.props.loadDefaultRemoteIcons&&(uu.defaultRemoteSrc=Mf,B3(Mf)),e.props.remoteSrc&&iO(e.props.remoteSrc),t("svg",{class:nO(e),style:r,attrs:{role:e.props.label?"img":"presentation","aria-label":e.props.label},on:e.data.nativeOn},[t("use",{attrs:{"xlink:href":"#"+e.props.remotePrefix+e.props.name,class:e.props.clazz},style:{pointerEvents:"none"}})])}},null,null,!1,null,null,null,null);const P1=aO.exports,vle="",oO={name:"StreamAudioPlayer",components:{VIcon:P1},props:{audioData:{type:Object,required:!0}},data(){return{player:null,internalStatus:"pending",currentTime:0,duration:0,isDragging:!1,isHoveringProgress:!1,lastProcessedChunkCount:0,playModeDecided:!1,lastKnownIsComplete:!1,urlReady:!1,dragCleanup:null}},computed:{isGenerating(){return!this.audioData.isComplete},hasPlayableContent(){const t=!!this.audioData.audio_url,e=this.audioData.audio_data&&this.audioData.audio_data.length>0;return t||e},isDisabled(){return!this.hasPlayableContent},canSeek(){return!this.isGenerating&&this.urlReady},displayFileName(){return this.audioData.title?this.audioData.title:this.isGenerating?"音频生成中...":"音频文件"},statusText(){if(this.isDisabled)return"暂无音频";if(this.isGenerating&&this.duration===0)return"生成中...";const t=this.formatTime(this.currentTime),e=this.isGenerating?"生成中":this.formatTime(this.duration);return`${t} / ${e}`},statusClass(){return{generating:this.isGenerating,completed:this.internalStatus==="completed",playing:this.internalStatus==="playing",paused:this.internalStatus==="paused",disabled:this.isDisabled}},cardClass(){return{generating:this.isGenerating,completed:this.internalStatus==="completed",playing:this.internalStatus==="playing",paused:this.internalStatus==="paused",disabled:this.isDisabled,hoverable:!this.isDisabled&&!this.isGenerating}},progressPercentage(){return this.duration===0?0:this.currentTime/this.duration*100},showHandle(){return(this.isHoveringProgress||this.isDragging)&&!this.isDisabled&&!this.isGenerating},canPlay(){return!(this.isDisabled||this.isGenerating&&this.duration===0)},canDownload(){return!!this.audioData.audio_url},playButtonTitle(){return this.isDisabled?"暂无音频":this.isGenerating&&this.duration===0?"等待音频生成":this.internalStatus==="playing"?"暂停":"播放"},downloadButtonTitle(){return this.canDownload?"下载":this.isGenerating?"生成中,暂不可下载":"暂无可下载的音频"}},watch:{audioData:{handler(t){var r;if(!t||!this.player)return;console.log("[StreamAudioPlayer] audioData watch 触发:",{hasAudioUrl:!!t.audio_url,audioDataLength:(r=t.audio_data)==null?void 0:r.length,isComplete:t.isComplete,playModeDecided:this.playModeDecided,lastProcessedChunkCount:this.lastProcessedChunkCount,lastKnownIsComplete:this.lastKnownIsComplete,internalStatus:this.internalStatus}),!this.playModeDecided&&t.audio_url&&(console.log("[StreamAudioPlayer] 切换到 URL 模式"),this.handleAudioUrlChange(t.audio_url)),t.audio_data&&Array.isArray(t.audio_data)&&t.audio_data.length>this.lastProcessedChunkCount&&(!this.playModeDecided||this.player.playMode==="stream")&&(console.log("[StreamAudioPlayer] 处理新的音频片段"),this.handleAudioDataChange(t.audio_data)),!!t.isComplete&&!this.lastKnownIsComplete&&(this.lastKnownIsComplete=!0,this.handleGenerationComplete())},deep:!0,immediate:!1}},mounted(){this.initPlayer(),this.audioData&&(this.audioData.audio_data&&this.audioData.audio_data.length>0?this.handleAudioDataChange(this.audioData.audio_data):this.audioData.audio_url&&this.handleAudioUrlChange(this.audioData.audio_url),this.audioData.isComplete&&(this.lastKnownIsComplete=!0,this.handleGenerationComplete()))},beforeDestroy(){this.destroyPlayer()},beforeUnmount(){this.destroyPlayer()},methods:{initPlayer(){this.player=new O3,this.player.onPlay(()=>{this.internalStatus="playing",this.$emit("play",this.audioData)}),this.player.onPause(()=>{this.internalStatus="paused",this.$emit("pause",this.audioData)}),this.player.onEnd(()=>{this.player.playMode==="url"?this.internalStatus="completed":this.isGenerating?this.internalStatus="paused":this.internalStatus="completed",this.currentTime=0,this.$emit("end",this.audioData)}),this.player.onTimeUpdate((t,e)=>{this.isDragging||(this.currentTime=t),this.duration=e,t>=e&&e>0&&!this.isGenerating&&(this.player.pause(),this.internalStatus="completed",this.currentTime=e)}),this.player.onDurationChange(t=>{this.duration=t}),this.player.onError(t=>{console.error("音频播放错误:",t),this.$emit("error",t)}),this.player.onUrlReady(()=>{console.log("[StreamAudioPlayer.vue] URL 预加载完成回调"),this.urlReady=!0}),this.checkInitialState()},checkInitialState(){this.isDisabled?this.internalStatus="disabled":this.isGenerating?this.internalStatus="generating":this.internalStatus="completed"},handleAudioUrlChange(t){!this.player||!t||this.playModeDecided&&this.player.playMode!=="url"||(this.player.setAudioUrl(t),this.playModeDecided=!0,this.internalStatus="completed")},handleAudioDataChange(t){var r,n,i,a,o;if(!this.player||!t)return;this.playModeDecided=!0;const e=t.length-this.lastProcessedChunkCount;if(console.log("[StreamAudioPlayer.vue] handleAudioDataChange",{totalChunks:t.length,lastProcessedChunkCount:this.lastProcessedChunkCount,newChunksCount:e,playerPendingChunks:(r=this.player.pendingChunks)==null?void 0:r.length,playerAudioQueueLength:(n=this.player.audioQueue)==null?void 0:n.length,playerScheduledCount:this.player.scheduledCount,playerIsPlaying:this.player.isPlaying,internalStatus:this.internalStatus}),e<=0){console.log("[StreamAudioPlayer.vue] 没有新片段,跳过");return}(this.internalStatus==="disabled"||this.internalStatus==="pending")&&(this.internalStatus="generating");for(let s=this.lastProcessedChunkCount;s<t.length;s++){const u=t[s];console.log(`[StreamAudioPlayer.vue] 添加第 ${s+1} 个chunk,大小: ${(u.length*.75/1024).toFixed(2)} KB`),this.player.addBase64Chunk(u),this.lastProcessedChunkCount++,this.$emit("chunk-added",{duration:this.duration,queueLength:((i=this.player.pendingChunks)==null?void 0:i.length)||0})}console.log("[StreamAudioPlayer.vue] handleAudioDataChange 完成",{lastProcessedChunkCount:this.lastProcessedChunkCount,playerPendingChunks:(a=this.player.pendingChunks)==null?void 0:a.length,playerAudioQueueLength:(o=this.player.audioQueue)==null?void 0:o.length})},handleGenerationComplete(){var t,e,r,n,i,a,o;console.log("[StreamAudioPlayer.vue] handleGenerationComplete",{playerAudioQueueLength:(e=(t=this.player)==null?void 0:t.audioQueue)==null?void 0:e.length,playerPendingChunks:(n=(r=this.player)==null?void 0:r.pendingChunks)==null?void 0:n.length,playerTotalDuration:(a=(i=this.player)==null?void 0:i.totalDuration)==null?void 0:a.toFixed(2),playerScheduledCount:(o=this.player)==null?void 0:o.scheduledCount,internalStatus:this.internalStatus,hasAudioUrl:!!this.audioData.audio_url}),this.player&&this.player.markGenerationComplete(this.audioData.audio_url),this.player&&(this.duration=this.player.getDuration(),console.log("[StreamAudioPlayer.vue] 最终时长:",this.duration.toFixed(2))),this.internalStatus!=="playing"&&(this.internalStatus="completed"),this.audioData.audio_url||(this.urlReady=!0)},async addAudioChunk(t){var e;if(!this.player){console.warn("播放器未初始化");return}try{typeof t=="string"?await this.player.addBase64Chunk(t):await this.player.addAudioChunk(t),this.$emit("chunk-added",{duration:this.duration,queueLength:((e=this.player.audioQueue)==null?void 0:e.length)||0})}catch(r){console.error("添加音频片段失败:",r),this.$emit("error",r)}},markGenerationComplete(){this.handleGenerationComplete()},async handlePlayPause(){if(!(!this.player||!this.canPlay))try{this.internalStatus==="playing"?this.player.pause():(this.currentTime>=this.duration&&this.duration>0&&(this.currentTime=0,this.player.pausedAt=0),await this.player.play())}catch(t){console.error("播放控制错误:",t)}},handleDownload(){if(!this.canDownload)return;const t=this.audioData.audio_url,e=this.audioData.title||"音频文件",r=document.createElement("a");r.href=t,r.download=e,r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),this.$emit("audio-download",{url:t,fileName:e})},formatTime(t){if(!t||isNaN(t))return"00:00";const e=Math.floor(t/60),r=Math.floor(t%60);return`${e.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`},handleMouseEnter(){},handleMouseLeave(){},handleProgressMouseEnter(){!this.isDisabled&&!this.isGenerating&&(this.isHoveringProgress=!0)},handleProgressMouseLeave(){this.isDragging||(this.isHoveringProgress=!1)},handleProgressMouseDown(t){this.isDisabled||!this.canSeek||this.seekToPosition(t)},handleDragStart(t){if(this.isDisabled||!this.canSeek)return;this.isDragging=!0,t.preventDefault();const e=n=>{this.seekToPosition(n)},r=()=>{this.isDragging=!1,this.isHoveringProgress||(this.isHoveringProgress=!1),document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r),this.dragCleanup=null};this.dragCleanup=()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r)},document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)},seekToPosition(t){if(!this.player||!this.$refs.progressTrack)return;const r=this.$refs.progressTrack.getBoundingClientRect(),n=t.clientX-r.left,a=Math.max(0,Math.min(1,n/r.width))*this.duration;this.currentTime=a,this.player.seek(a)},destroyPlayer(){this.dragCleanup&&(this.dragCleanup(),this.dragCleanup=null),this.player&&(this.player.destroy(),this.player=null),this.internalStatus="pending",this.currentTime=0,this.duration=0,this.lastProcessedChunkCount=0,this.playModeDecided=!1,this.urlReady=!1,this.lastKnownIsComplete=!1}}};var sO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"stream-audio-player-card",class:e.cardClass,on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave}},[r("div",{staticClass:"audio-content"},[r("div",{staticClass:"audio-icon"},[r("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"30",height:"34",viewBox:"0 0 30 34",fill:"none"}},[r("path",{staticStyle:{fill:"color(display-p3 0.9569 0.9333 0.9882)","fill-opacity":"1"},attrs:{d:"M1.55782e-06 5.33333C1.66168e-06 3.46649 1.71361e-06 2.53307 0.363313 1.82003C0.682891 1.19282 1.19283 0.682889 1.82003 0.363312C2.53307 1.40931e-07 3.46649 1.92863e-07 5.33334 2.96727e-07L21.1242 1.17527e-06C21.9395 1.22063e-06 22.3472 1.24331e-06 22.7308 0.0921015C23.0709 0.173757 23.396 0.308438 23.6943 0.491201C24.0307 0.69734 24.3189 0.985593 24.8954 1.5621L28.4379 5.10457C29.0144 5.68108 29.3027 5.96933 29.5088 6.30572C29.6916 6.60396 29.8262 6.92911 29.9079 7.26923C30 7.65285 30 8.0605 30 8.87581L30 28C30 29.8668 30 30.8003 29.6367 31.5133C29.3171 32.1405 28.8072 32.6504 28.18 32.97C27.4669 33.3333 26.5335 33.3333 24.6667 33.3333L5.33333 33.3333C3.46649 33.3333 2.53307 33.3333 1.82003 32.97C1.19282 32.6504 0.68289 32.1405 0.363312 31.5133C1.40931e-07 30.8003 1.92863e-07 29.8668 2.96727e-07 28L1.55782e-06 5.33333Z",fill:"#F4EEFC"}}),r("path",{staticStyle:{fill:"color(display-p3 0.8863 0.8353 0.9725)","fill-opacity":"1"},attrs:{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M29.1667 28L29.1667 8.87581C29.1667 8.02084 29.1613 7.72918 29.0976 7.46377C29.0364 7.20868 28.9353 6.96481 28.7983 6.74113C28.6557 6.5084 28.4532 6.29838 27.8487 5.69383L24.3062 2.15135C23.7016 1.5468 23.4916 1.34435 23.2589 1.20173C23.0352 1.06466 22.7913 0.963651 22.5362 0.90241C22.2708 0.83869 21.9792 0.833334 21.1242 0.833334L5.33334 0.833333C4.38616 0.833333 3.7259 0.833981 3.21187 0.87598C2.70756 0.917183 2.41782 0.993995 2.19836 1.10582C1.72795 1.3455 1.3455 1.72795 1.10582 2.19836C0.993997 2.41782 0.917185 2.70756 0.875981 3.21187C0.833983 3.7259 0.833335 4.38616 0.833335 5.33333L0.833334 28C0.833334 28.9472 0.833982 29.6074 0.87598 30.1215C0.917183 30.6258 0.993995 30.9155 1.10582 31.135C1.3455 31.6054 1.72795 31.9878 2.19836 32.2275C2.41782 32.3393 2.70756 32.4161 3.21187 32.4573C3.7259 32.4993 4.38616 32.5 5.33333 32.5L24.6667 32.5C25.6138 32.5 26.2741 32.4993 26.7881 32.4573C27.2924 32.4161 27.5822 32.3393 27.8016 32.2275C28.2721 31.9878 28.6545 31.6054 28.8942 31.135C29.006 30.9155 29.0828 30.6258 29.124 30.1215C29.166 29.6074 29.1667 28.9472 29.1667 28ZM0.363313 1.82003C1.71361e-06 2.53307 1.66168e-06 3.46649 1.55782e-06 5.33333L2.96727e-07 28C1.92863e-07 29.8668 1.40931e-07 30.8003 0.363312 31.5133C0.68289 32.1405 1.19282 32.6504 1.82003 32.97C2.53307 33.3333 3.46649 33.3333 5.33333 33.3333L24.6667 33.3333C26.5335 33.3333 27.4669 33.3333 28.18 32.97C28.8072 32.6504 29.3171 32.1405 29.6367 31.5133C30 30.8003 30 29.8668 30 28L30 8.87581C30 8.0605 30 7.65285 29.9079 7.26923C29.8262 6.92911 29.6916 6.60396 29.5088 6.30572C29.3027 5.96933 29.0144 5.68108 28.4379 5.10457L24.8954 1.5621C24.3189 0.985593 24.0307 0.69734 23.6943 0.491201C23.396 0.308438 23.0709 0.173757 22.7308 0.0921015C22.3472 1.24331e-06 21.9395 1.22063e-06 21.1242 1.17527e-06L5.33334 2.96727e-07C3.46649 1.92863e-07 2.53307 1.40931e-07 1.82003 0.363312C1.19283 0.682889 0.682891 1.19282 0.363313 1.82003Z",fill:"#E2D5F8"}}),r("path",{staticStyle:{fill:"color(display-p3 0.4157 0.2706 0.8980)","fill-opacity":"1"},attrs:{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M22.1277 22.689L22.129 8.92249L10.0345 10.5529L10.0335 22.0895C9.69971 21.9846 9.34054 21.9276 8.96638 21.9276C7.19825 21.9276 5.76489 23.2017 5.76489 24.7734C5.76489 26.345 7.19825 27.6191 8.96638 27.6191C10.7157 27.6191 12.1374 26.3719 12.1674 24.8233L12.1676 24.8233L12.1676 24.8123L12.1679 24.7734L12.1676 24.7347L12.168 13.7622L19.9939 12.5435L19.9935 19.9543C19.6596 19.8493 19.3001 19.7922 18.9257 19.7922C17.1576 19.7922 15.7242 21.0663 15.7242 22.6379C15.7242 24.2096 17.1576 25.4837 18.9257 25.4837C20.6746 25.4837 22.096 24.2371 22.1267 22.689L22.1277 22.689Z",fill:"#6A45E5"}})])]),r("div",{staticClass:"file-info"},[r("div",{staticClass:"file-name",attrs:{title:e.displayFileName}},[e._v(e._s(e.displayFileName))]),r("div",{staticClass:"file-status"},[r("span",{staticClass:"status-text",class:e.statusClass},[e._v(" "+e._s(e.statusText)+" ")])])]),r("div",{staticClass:"audio-controls"},[r("button",{staticClass:"control-btn download-btn",attrs:{disabled:!e.canDownload,title:e.downloadButtonTitle},on:{click:e.handleDownload}},[r("v-icon",{attrs:{name:"basic_download2_line",size:18}})],1),r("button",{staticClass:"control-btn play-btn",attrs:{disabled:!e.canPlay,title:e.playButtonTitle},on:{click:e.handlePlayPause}},[e.internalStatus==="playing"?r("v-icon",{attrs:{name:"basic_pause_line",size:18}}):r("v-icon",{attrs:{name:"basic_play_line",size:18}})],1)])]),r("div",{staticClass:"progress-container"},[r("div",{ref:"progressTrack",staticClass:"progress-track",on:{mousedown:e.handleProgressMouseDown,mouseenter:e.handleProgressMouseEnter,mouseleave:e.handleProgressMouseLeave}},[e.isGenerating?e._e():r("div",{staticClass:"progress-played",class:{"no-transition":e.isDragging},style:{width:e.progressPercentage+"%"}}),e.showHandle?r("div",{staticClass:"progress-handle",class:{"no-transition":e.isDragging},style:{left:e.progressPercentage+"%"},on:{mousedown:function(n){return n.stopPropagation(),e.handleDragStart.apply(null,arguments)}}}):e._e()])])])},uO=[],lO=ur(oO,sO,uO,!1,null,"c74077bd",null,null);const F3=lO.exports,cO={已完成所有任务:{zh:"已完成所有任务",en:"All tasks completed"},已停止:{zh:"已停止",en:"Stopped"},任务进度:{zh:"任务进度",en:"Task progress"},问题澄清:{zh:"问题澄清",en:"Question Clarification"},支持多选:{zh:"(支持多选)",en:"(Multiple selection)"},提交:{zh:"提交",en:"Submit"},已提交:{zh:"已提交",en:"Submitted"},跳过:{zh:"跳过",en:"Skip"}};function fO(t){const e={"zh-CN":{},"en-US":{}};for(const[r,n]of Object.entries(t))e["zh-CN"][r]=n.zh,e["en-US"][r]=n.en;return e}const hO=fO(cO),R1="zh-CN",hi={"zh-cn":"zh-CN",zh_cn:"zh-CN","zh-hans":"zh-CN","zh-hans-cn":"zh-CN",zh:"zh-CN",cn:"zh-CN",chinese:"zh-CN","chinese-simplified":"zh-CN","simplified-chinese":"zh-CN",simplifiedchinese:"zh-CN",chs:"zh-CN",zhs:"zh-CN",hans:"zh-CN","zh-sg":"zh-CN",zh_sg:"zh-CN","zh-tw":"zh-CN",zh_tw:"zh-CN","zh-hk":"zh-CN",zh_hk:"zh-CN","zh-hant":"zh-CN","zh-hant-tw":"zh-CN","zh-hant-hk":"zh-CN",cht:"zh-CN",zht:"zh-CN",hant:"zh-CN","chinese-traditional":"zh-CN","traditional-chinese":"zh-CN",traditionalchinese:"zh-CN","en-us":"en-US",en_us:"en-US","en-gb":"en-US",en_gb:"en-US","en-au":"en-US",en_au:"en-US","en-ca":"en-US",en_ca:"en-US",en:"en-US",us:"en-US",gb:"en-US",uk:"en-US",english:"en-US",eng:"en-US","en-in":"en-US",en_in:"en-US","en-nz":"en-US",en_nz:"en-US","en-ie":"en-US",en_ie:"en-US"};function dO(t){if(!t||typeof t!="string")return R1;const e=t.trim().toLowerCase();if(!e)return R1;if(hi[e])return hi[e];const r=e.replace(/-/g,"_");if(hi[r])return hi[r];const n=e.replace(/_/g,"-");if(hi[n])return hi[n];const i=e.split(/[-_]/)[0];return hi[i]?hi[i]:e==="zh-cn"||e==="zh_cn"?"zh-CN":e==="en-us"||e==="en_us"?"en-US":R1}function pO(t,e=R1){const r=dO(e),n=hO[r];return n[t]!==void 0?n[t]:t}function z3(t,e){const r={};for(const n of e)r[n]=pO(n,t);return r}const gle="",vO={name:"ClassifyTag",props:{title:{type:String,default:""},questions:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},defaultAnswers:{type:Array,default:()=>[]},locale:{type:String,default:"zh-CN"}},data(){return{collapsed:!1,selectedAnswers:{},submitted:!1}},watch:{defaultAnswers:{handler(t){t&&t.length>0&&this._applyDefaultAnswers(t)},immediate:!0}},computed:{i18nText(){return z3(this.locale,["问题澄清","支持多选","提交","已提交","跳过"])},displayTitle(){return this.title||this.i18nText.问题澄清},normalizedQuestions(){return!this.questions||!this.questions.length?[]:this.questions.map((t,e)=>({id:t.id!==void 0?t.id:e,text:t.text||t.question||"",isMulti:t.type===2,options:(t.options||[]).map(r=>typeof r=="string"?{label:r,description:""}:{label:r.label||r.Label||"",description:r.description||r.Description||""})}))},allAnswered(){return!this.normalizedQuestions||this.normalizedQuestions.length===0?!1:this.normalizedQuestions.every(t=>{const e=this.selectedAnswers[t.id];return t.isMulti?Array.isArray(e)&&e.length>0:e!==void 0})}},methods:{_applyDefaultAnswers(t){t.forEach(e=>{if(e.questionId!==void 0){if(e.selectedIndices&&Array.isArray(e.selectedIndices))this.$set(this.selectedAnswers,e.questionId,[...e.selectedIndices]);else if(e.selectedIndex!==void 0){const r=this.normalizedQuestions.find(n=>n.id===e.questionId);r&&r.isMulti?this.$set(this.selectedAnswers,e.questionId,[e.selectedIndex]):this.$set(this.selectedAnswers,e.questionId,e.selectedIndex)}}}),this.submitted=!0},toggleCollapse(){this.collapsed=!this.collapsed},selectOption(t,e){this.submitted||this.disabled||this.$set(this.selectedAnswers,t,e)},isChecked(t,e){const r=this.selectedAnswers[t];return Array.isArray(r)&&r.includes(e)},toggleCheckbox(t,e){if(this.submitted||this.disabled)return;let r=this.selectedAnswers[t];Array.isArray(r)?r=[...r]:r=[];const n=r.indexOf(e);n!==-1?r.splice(n,1):r.push(e),this.$set(this.selectedAnswers,t,r)},handleSubmit(){if(!this.allAnswered||this.submitted)return;this.submitted=!0;const t=this.normalizedQuestions.map(e=>{const r=this.selectedAnswers[e.id];if(e.isMulti){const i=Array.isArray(r)?r:[],a=i.map(o=>e.options[o]?e.options[o].label:"");return{questionId:String(e.id),questionText:e.text,isMulti:!0,selectedOptions:a,selectedOption:a[0]||"",selectedIndices:i,selectedIndex:i[0]!==void 0?i[0]:-1}}const n=e.options[r];return{questionId:String(e.id),questionText:e.text,isMulti:!1,selectedOption:n?n.label:"",selectedOptions:[n?n.label:""],selectedIndex:r,selectedIndices:[r]}});this.$emit("submit",t)},handleSkip(){this.submitted||this.disabled||this.$emit("skip")}}};var gO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"classify-tag",class:{"classify-tag--collapsed":e.collapsed}},[r("div",{staticClass:"classify-tag__header",on:{click:e.toggleCollapse}},[r("svg",{staticClass:"classify-tag__icon",attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M8 1C4.13401 1 1 4.13401 1 8C1 11.866 4.13401 15 8 15C11.866 15 8 15 8 15",stroke:"#4A70FF","stroke-width":"1.5","stroke-linecap":"round",fill:"none"}}),r("path",{attrs:{d:"M8 5V8.5",stroke:"#4A70FF","stroke-width":"1.5","stroke-linecap":"round"}}),r("circle",{attrs:{cx:"8",cy:"11",r:"0.75",fill:"#4A70FF"}}),r("path",{attrs:{d:"M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1Z",stroke:"#4A70FF","stroke-width":"1.5",fill:"none"}})]),r("span",{staticClass:"classify-tag__title"},[e._v(e._s(e.displayTitle))]),r("svg",{staticClass:"classify-tag__arrow",class:{"classify-tag__arrow--up":!e.collapsed},attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M4 6L8 10L12 6",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"classify-tag__content"},e._l(e.normalizedQuestions,function(n,i){return r("div",{key:n.id||i,staticClass:"classify-tag__question-group"},[r("div",{staticClass:"classify-tag__question-text"},[e._v(" "+e._s(i+1)+"、"+e._s(n.text)+" "),n.isMulti?r("span",{staticClass:"classify-tag__multi-hint"},[e._v(e._s(e.i18nText.支持多选))]):e._e()]),r("div",{staticClass:"classify-tag__options"},[n.isMulti?e._l(n.options,function(a,o){return r("label",{key:o,staticClass:"classify-tag__checkbox",class:{"classify-tag__checkbox--checked":e.isChecked(n.id||i,o),"classify-tag__checkbox--rich":a.description},on:{click:function(s){return e.toggleCheckbox(n.id||i,o)}}},[r("span",{staticClass:"classify-tag__checkbox-box"},[e.isChecked(n.id||i,o)?r("svg",{staticClass:"classify-tag__checkbox-tick",attrs:{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M1 4L3.5 6.5L9 1",stroke:"#fff","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})]):e._e()]),r("span",{staticClass:"classify-tag__radio-content"},[r("span",{staticClass:"classify-tag__radio-label"},[e._v(e._s(a.label))]),a.description?r("span",{staticClass:"classify-tag__radio-desc"},[e._v(e._s(a.description))]):e._e()])])}):e._l(n.options,function(a,o){return r("label",{key:o,staticClass:"classify-tag__radio",class:{"classify-tag__radio--checked":e.selectedAnswers[n.id||i]===o,"classify-tag__radio--rich":a.description},on:{click:function(s){return e.selectOption(n.id||i,o)}}},[r("span",{staticClass:"classify-tag__radio-circle"},[e.selectedAnswers[n.id||i]===o?r("span",{staticClass:"classify-tag__radio-dot"}):e._e()]),r("span",{staticClass:"classify-tag__radio-content"},[r("span",{staticClass:"classify-tag__radio-label"},[e._v(e._s(a.label))]),a.description?r("span",{staticClass:"classify-tag__radio-desc"},[e._v(e._s(a.description))]):e._e()])])})],2)])}),0),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"classify-tag__footer"},[r("div",{staticClass:"classify-tag__footer-divider"}),r("div",{staticClass:"classify-tag__footer-actions"},[r("button",{staticClass:"classify-tag__btn classify-tag__btn--primary",attrs:{disabled:!e.allAnswered||e.submitted},on:{click:e.handleSubmit}},[e._v(" "+e._s(e.submitted?e.i18nText.已提交:e.i18nText.提交)+" ")]),e.submitted?e._e():r("button",{staticClass:"classify-tag__btn classify-tag__btn--secondary",on:{click:e.handleSkip}},[e._v(" "+e._s(e.i18nText.跳过)+" ")])])])])},mO=[],yO=ur(vO,gO,mO,!1,null,"0e944fef",null,null);const N1=yO.exports,mle="",_O={name:"PlanConfirm",props:{title:{type:String,default:"计划确认"},planText:{type:String,default:""},disabled:{type:Boolean,default:!1}},data(){return{collapsed:!1,confirmed:!1,skipped:!1}},methods:{toggleCollapse(){this.collapsed=!this.collapsed},handleConfirm(){this.confirmed||this.skipped||this.disabled||(this.confirmed=!0,this.$emit("confirm",this.planText))},handleSkip(){this.confirmed||this.skipped||this.disabled||(this.skipped=!0,this.$emit("skip",this.planText))}}};var bO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"plan-confirm",class:{"plan-confirm--collapsed":e.collapsed}},[r("div",{staticClass:"plan-confirm__header",on:{click:e.toggleCollapse}},[r("svg",{staticClass:"plan-confirm__icon",attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M13.5 5.5L6.5 12.5L2.5 8.5",stroke:"#4A70FF","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}}),r("rect",{attrs:{x:"1",y:"1",width:"14",height:"14",rx:"2",stroke:"#4A70FF","stroke-width":"1.5",fill:"none"}})]),r("span",{staticClass:"plan-confirm__title"},[e._v(e._s(e.title))]),r("svg",{staticClass:"plan-confirm__arrow",class:{"plan-confirm__arrow--up":!e.collapsed},attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M4 6L8 10L12 6",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"plan-confirm__content"},[r("div",{staticClass:"plan-confirm__text"},[e._v(e._s(e.planText))])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"plan-confirm__footer"},[r("div",{staticClass:"plan-confirm__footer-divider"}),r("div",{staticClass:"plan-confirm__footer-actions"},[!e.confirmed&&!e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--primary",on:{click:e.handleConfirm}},[e._v(" 确定 ")]):e._e(),e.confirmed?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--primary",attrs:{disabled:""}},[e._v(" 已确定 ")]):e._e(),!e.confirmed&&!e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--secondary",on:{click:e.handleSkip}},[e._v(" 跳过 ")]):e._e(),e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--secondary",attrs:{disabled:""}},[e._v(" 已跳过 ")]):e._e()])])])},xO=[],wO=ur(_O,bO,xO,!1,null,"99c3033c",null,null);const SO=wO.exports;let O1;const CO=new Uint8Array(16);function AO(){if(!O1&&(O1=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!O1))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return O1(CO)}const Ct=[];for(let t=0;t<256;++t)Ct.push((t+256).toString(16).slice(1));function TO(t,e=0){return Ct[t[e+0]]+Ct[t[e+1]]+Ct[t[e+2]]+Ct[t[e+3]]+"-"+Ct[t[e+4]]+Ct[t[e+5]]+"-"+Ct[t[e+6]]+Ct[t[e+7]]+"-"+Ct[t[e+8]]+Ct[t[e+9]]+"-"+Ct[t[e+10]]+Ct[t[e+11]]+Ct[t[e+12]]+Ct[t[e+13]]+Ct[t[e+14]]+Ct[t[e+15]]}const V3={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function $3(t,e,r){if(V3.randomUUID&&!e&&!t)return V3.randomUUID();t=t||{};const n=t.random||(t.rng||AO)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,e){r=r||0;for(let i=0;i<16;++i)e[r+i]=n[i];return e}return TO(n)}const DO=["Basic","Card","ListView","ListViewItem","Badge","Box","Row","Col","Button","Caption","Chart","Checkbox","DatePicker","Divider","Form","Icon","Image","Input","Label","Markdown","RadioGroup","Select","Spacer","Text","Textarea","Title","Transition","Video","Audio","Countdown","Clickable","ImageSelect"];class EO{constructor(){this.worker=null,this.callbacks=new Map,this.initializing=!1,this.initPromise=null,this.blobUrl=null}async init(){return this.worker?Promise.resolve():this.initializing&&this.initPromise?this.initPromise:(this.initializing=!0,this.initPromise=new Promise((e,r)=>{try{const n=window.tsxToJsonWorkerSrc||"https://cdn.xiaowei.qq.com/adp/assets/static/tsxToJSON.worker.js",i=new Blob([`importScripts('${n}')`],{type:"application/javascript"});this.blobUrl=URL.createObjectURL(i),this.worker=new Worker(this.blobUrl),this.worker.onmessage=a=>{const{ok:o,out:s,error:u,nonce:l}=a.data,c=this.callbacks.get(l);c&&(this.callbacks.delete(l),o?c.resolve(s):c.reject(new Error(u||"Worker Parse error")))},this.worker.onerror=a=>{console.error("tsxToJSON Worker 错误:",a)},this.initializing=!1,e()}catch(n){this.initializing=!1,console.error("初始化 tsxToJSON Worker 失败:",n),r(n)}}),this.initPromise)}destroy(){this.worker&&(this.worker.terminate(),this.worker=null),this.blobUrl&&(URL.revokeObjectURL(this.blobUrl),this.blobUrl=null),this.callbacks.forEach(e=>{e.reject(new Error("Worker destroy"))}),this.callbacks.clear(),this.initializing=!1,this.initPromise=null}async parse({view:e,state:r,keyMap:n,componentNames:i=DO}){return await this.init(),new Promise((a,o)=>{if(!this.worker){o(new Error("Worker not init"));return}const s=$3();this.callbacks.set(s,{resolve:a,reject:o}),this.worker.postMessage({type:"parse",view:e,state:r||{},keyMap:n,componentNames:i||[],nonce:s})})}isInitialized(){return!!this.worker}}let B1=null;async function Lf(){return B1||(B1=new EO),await B1.init(),B1}class kO{constructor(){this.worker=null,this.callbacks=new Map,this.initializing=!1,this.initPromise=null,this.blobUrl=null}async init(){return this.worker?Promise.resolve():this.initializing&&this.initPromise?this.initPromise:(this.initializing=!0,this.initPromise=new Promise((e,r)=>{try{const n=window.schemaWorkerSrc||"https://cdn.xiaowei.qq.com/adp/assets/static/schemaWorker.js",i=new Blob([`importScripts('${n}')`],{type:"application/javascript"});this.blobUrl=URL.createObjectURL(i),this.worker=new Worker(this.blobUrl),this.worker.onmessage=a=>{const{ok:o,keyMap:s,jsonSchema:u,error:l,nonce:c}=a.data,f=this.callbacks.get(c);f&&(this.callbacks.delete(c),o?f.resolve({keyMap:s,jsonSchema:u}):f.reject(new Error(l||"Worker parse failed")))},this.worker.onerror=a=>{console.error("zodSchema Worker 错误:",a)},this.initializing=!1,e()}catch(n){this.initializing=!1,console.error("初始化 zodSchema Worker 失败:",n),r(n)}}),this.initPromise)}destroy(){this.worker&&(this.worker.terminate(),this.worker=null),this.blobUrl&&(URL.revokeObjectURL(this.blobUrl),this.blobUrl=null),this.callbacks.forEach(e=>{e.reject(new Error("Worker destroyed"))}),this.callbacks.clear(),this.initializing=!1,this.initPromise=null}async zodToJsonSchema({src:e,includeJSONSchema:r=!0}){return await this.init(),new Promise((n,i)=>{if(!this.worker){i(new Error("Worker not init"));return}const a=$3();this.callbacks.set(a,{resolve:n,reject:i}),this.worker.postMessage({type:"parse",src:e,includeJSONSchema:r,nonce:a})})}async zodToJsonSchemaAsync(e){return await this.zodToJsonSchema({src:e,includeJSONSchema:!0})}isInitialized(){return!!this.worker}}let F1=null;async function G3(){return F1||(F1=new kO),await F1.init(),F1}async function z1(t){const r=await(await G3()).zodToJsonSchemaAsync(t);return{keyMap:r.keyMap,jsonSchema:JSON.stringify(r.jsonSchema,null,2)}}function MO(t,e){let r;try{r=JSON.parse(t)}catch(i){return console.warn(`unmarshal view failed, err: ${i}`),t}let n;try{n=JSON.parse(e)}catch(i){return console.warn(`unmarshal payload failed, err: ${i}`),t}If(r,n);try{return JSON.stringify(r)}catch(i){return console.warn(`marshal view failed, err: ${i}`),t}}function If(t,e){if(Array.isArray(t))for(let r=0;r<t.length;r++)If(t[r],e);else if(t!==null&&typeof t=="object"){const r=t.name;if(typeof r=="string"){const n=typeof t.type=="string"?t.type:"unknown",i=LO(r,e);if(i.exists){const a=i.value;switch(n){case"DatePicker":t.defaultValue=a;break;case"Select":t.defaultValue=a;break;case"Checkbox":t.defaultChecked=a;break;case"RadioGroup":t.defaultValue=a;break;case"Input":t.defaultValue=a;break;case"Textarea":t.defaultValue=a;break;default:t.defaultValue=a}}}if(Array.isArray(t.children))for(let n=0;n<t.children.length;n++)If(t.children[n],e)}}function LO(t,e){const r=t.split(".");let n=e;for(const i of r){if(n===null||typeof n!="object"||Array.isArray(n))return{value:null,exists:!1};if(!(i in n))return{value:null,exists:!1};n=n[i]}return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?{value:n,exists:!0}:{value:String(n),exists:!0}}class V1{constructor(){this.initPromise=null,this.initialized=!1,this._preload()}_preload(){return this.initPromise?this.initPromise:(this.initPromise=Promise.all([Lf(),G3()]).then(()=>{this.initialized=!0,console.log("WidgetHelper: Workers 预加载完成")}).catch(e=>{console.warn("WidgetHelper: Workers 预加载失败:",e.message)}),this.initPromise)}async waitForReady(){this.initPromise&&await this.initPromise}isReady(){return this.initialized}async getTemplate(e){try{return""}catch(r){return console.warn("getTemplate 执行出错:",r.message),""}}async getPreview({view:e,schema:r,defaultState:n}){try{if(await this.waitForReady(),n!=null&&n!==""){const s=typeof n=="string"?JSON.parse(n):n;if(typeof s!="object"||s===null)throw new Error("defaultState 必须是一个有效的 JSON 对象")}const{keyMap:i}=await z1(r);return await(await Lf()).parse({view:e,state:JSON.parse(n),keyMap:i})}catch(i){return console.warn("getPreview 执行出错:",i.message),""}}async getJsonSchema(e){try{await this.waitForReady();const{jsonSchema:r}=await z1(e);return r}catch(r){return console.warn("getJsonSchema 执行出错:",r.message),""}}genarateSnapshot(...e){return MO(...e)}decodeWidget(e){try{return JSON.parse(Buffer.from(e,"base64").toString()||"")}catch{return""}}}function IO(){return new V1}function PO(t){try{return jsxToJinja(t)}catch(e){return console.warn("getTemplate 执行出错:",e.message),""}}async function RO({view:t,schema:e,defaultState:r}){try{if(r!=null&&r!==""){const o=typeof r=="string"?JSON.parse(r):r;if(typeof o!="object"||o===null)throw new Error("defaultState 必须是一个有效的 JSON 对象")}const{keyMap:n}=await z1(e);return await(await Lf()).parse({view:t,state:JSON.parse(r),keyMap:n})}catch(n){return console.warn("getPreview 执行出错:",n.message),""}}async function NO(t){try{const{jsonSchema:e}=await z1(t);return e}catch(e){return console.warn("getJsonSchema 执行出错:",e.message),""}}const OO={data(){return{_widgetHelper:null}},created(){this._widgetHelper=new V1,this._widgetInstancesMap={},this._audioInstancesMap={},this._classifyTagInstancesMap={},this._planConfirmInstancesMap={},this._audioStateCache={}},methods:{_scaleWidgetIfNeeded(t,e){const r=this.widgetList&&this.widgetList.find(s=>s.widget_run_id===e),n=r&&r.scale,i=this._widgetInstancesMap[e],a=i&&i.instance&&i.instance.$el;if(!a)return;if(!n){t.style.width="",t.style.height="",a.style.transform="",a.style.transformOrigin="";return}let o;if(typeof n=="number")o=n;else if(n===!0){const s=this.$refs.containerRef&&(this.$refs.containerRef.$el||this.$refs.containerRef);if(!s)return;const u=s.clientWidth,l=a.style.transform;a.style.transform="";const c=a.scrollWidth||a.offsetWidth;if(a.style.transform=l,u<=0||c<=u){t.style.width="",t.style.height="",a.style.transform="",a.style.transformOrigin="";return}o=u/c}if(o&&o>0){a.style.transform="";const s=a.scrollWidth||a.offsetWidth,u=a.scrollHeight||a.offsetHeight;t.style.width=`${s*o}px`,t.style.height=`${u*o}px`,a.style.transform=`scale(${o})`,a.style.transformOrigin="top left"}},async _mountWidgets(t){if(!this.showWidget)return;const e=t.querySelectorAll(".widget-container");for(const r of e){if(r._widgetMounted||r._widgetMounting)continue;r._widgetMounting=!0;const n=r.getAttribute("data-widget-run-id"),i=r.getAttribute("data-widget-id"),a=r.getAttribute("data-widget-view"),o=r.getAttribute("data-widget-encoded-widget"),s=r.getAttribute("data-widget-state"),u=r.getAttribute("data-widget-payload"),l=r.getAttribute("data-widget-disable")==="true";if(!a&&!o){r._widgetMounting=!1;continue}const c=s?decodeURIComponent(escape(atob(s))):"",f=u?decodeURIComponent(escape(atob(u))):"",h=a?decodeURIComponent(escape(atob(a))):"";let d="";if(h)d=h;else try{const{view:b,schema:x}=this._widgetHelper.decodeWidget(o);d=await this._widgetHelper.getPreview({view:b,schema:x,defaultState:c}),d=JSON.stringify(d),f&&(d=this._widgetHelper.genarateSnapshot(d,f))}catch(b){console.error("[MsgContent] decodeWidget error",b),r._widgetMounting=!1;continue}const p=Vr.extend(N3),v=new p({propsData:{output:d,disable:l,locale:this.locale}});v.$on("widget-action",b=>this.$emit("widget-action",b,n,i)),v.$on("widget-event",b=>this.$emit("widget-event",b,n,i)),v.$on("widget-rendered",b=>{this.$emit("widget-rendered",b,n,i),this.$nextTick(()=>this._scaleWidgetIfNeeded(r,n))}),v.$mount(),r.appendChild(v.$el),r._widgetMounted=!0,r._widgetMounting=!1;const g=r.getAttribute("data-widget-view")||"",m=r.getAttribute("data-widget-payload")||"",y=r.getAttribute("data-widget-state")||"",_=r.getAttribute("data-widget-encoded-widget")||"";this._widgetInstancesMap[n]={instance:v,container:r,_lastDataKey:`${g}|${m}|${y}|${_}`}}},_mountAudioPlayers(t){if(!this.audioList||this.audioList.length===0)return;t.querySelectorAll(".audio-stream-container").forEach(r=>{const n=r.getAttribute("data-audio-symbol-id");if(this._audioInstancesMap[n]){r.children.length===0&&r.appendChild(this._audioInstancesMap[n].instance.$el);return}if(r.children.length>0)return;const i=this.audioList&&this.audioList.find(a=>a.audioSymbolId===n);if(i)try{const a=Vr.extend(F3),o=new a({propsData:{audioData:i}});o.$on("play",s=>this.$emit("audio-play",s,n)),o.$on("pause",s=>this.$emit("audio-pause",s,n)),o.$on("end",s=>this.$emit("audio-end",s,n)),o.$on("audio-download",s=>this.$emit("audio-download",s,n)),o.$on("chunk-added",s=>this.$emit("audio-chunk-added",s,n)),o.$on("error",s=>this.$emit("audio-error",s,n)),o.$mount(),r.appendChild(o.$el),this._audioInstancesMap[n]={instance:o,container:r}}catch(a){console.error("[MsgContent] 创建音频播放器失败:",a)}})},_mountClassifyTags(t){if(!this.showClassifyTag)return;t.querySelectorAll(".classify-tag-container").forEach((r,n)=>{if(r._classifyTagMounted)return;const i=r.getAttribute("data-classify-tag");if(i)try{const a=decodeURIComponent(escape(atob(i))),o=JSON.parse(a),s=Vr.extend(N1),u=new s({propsData:{title:o.title||"",questions:o.questions||[],disabled:!1,locale:this.locale}});u.$on("submit",l=>this.$emit("classify-tag-submit",l,o)),u.$on("skip",()=>this.$emit("classify-tag-skip",o)),u.$mount(),r.appendChild(u.$el),r._classifyTagMounted=!0,this._classifyTagInstancesMap[n]={instance:u,container:r}}catch(a){console.error("[MsgContent] ClassifyTag mount error:",a)}})},_mountPlanConfirms(t){if(!this.showPlanConfirm)return;t.querySelectorAll(".plan-confirm-container").forEach((r,n)=>{if(r._planConfirmMounted)return;const i=r.getAttribute("data-plan-confirm");if(i)try{const a=decodeURIComponent(escape(atob(i))),o=JSON.parse(a),s=Vr.extend(SO),u=new s({propsData:{title:o.title||"计划确认",planText:o.planText||"",disabled:!1}});u.$on("confirm",l=>this.$emit("plan-confirm",l,o)),u.$on("skip",l=>this.$emit("plan-skip",l,o)),u.$mount(),r.appendChild(u.$el),r._planConfirmMounted=!0,this._planConfirmInstancesMap[n]={instance:u,container:r}}catch(a){console.error("[MsgContent] PlanConfirm mount error:",a)}})},_mountAll(t){this.$nextTick(()=>{this._mountWidgets(t),this._mountAudioPlayers(t),this._mountClassifyTags(t),this._mountPlanConfirms(t)})},async _updateWidgets(t){if(!t)return;const e=this.$refs.containerRef,r=e&&(e.$el||e);if(!r)return;await this.$nextTick();const n=r.querySelectorAll(".widget-container");for(const i of n){const a=i.getAttribute("data-widget-run-id"),o=this._widgetInstancesMap[a];if(!a||!o)continue;const s=i.getAttribute("data-widget-view")||"",u=i.getAttribute("data-widget-payload")||"",l=i.getAttribute("data-widget-state")||"",c=i.getAttribute("data-widget-encoded-widget")||"",f=i.getAttribute("data-widget-disable")==="true",h=`${s}|${u}|${l}|${c}`;if(o._lastDataKey!==h){o._lastDataKey=h;const d=s?decodeURIComponent(escape(atob(s))):"",p=u?decodeURIComponent(escape(atob(u))):"";let v="";if(d)v=d;else if(c){const g=l?decodeURIComponent(escape(atob(l))):"";try{const{view:m,schema:y}=this._widgetHelper.decodeWidget(c);v=await this._widgetHelper.getPreview({view:m,schema:y,defaultState:g}),v=JSON.stringify(v),p&&(v=this._widgetHelper.genarateSnapshot(v,p))}catch{}}o.instance&&(o.instance.output=v)}o.instance&&(o.instance.disable=f),this._scaleWidgetIfNeeded(i,a)}},_updateAudioPlayers(t){t&&Object.keys(this._audioInstancesMap).forEach(e=>{const r=this._audioInstancesMap[e];if(!r||!r.instance)return;const n=t.find(s=>s.audioSymbolId===e);if(!n)return;const i=n.audio_data&&n.audio_data.length||0,a=!!n.isComplete,o=this._audioStateCache[e]||{length:0,isComplete:!1};(i!==o.length||a!==o.isComplete)&&(this._audioStateCache[e]={length:i,isComplete:a},r.instance.audioData=n)})},_destroyAllEmbedded(){Object.keys(this._widgetInstancesMap).forEach(t=>{try{this._widgetInstancesMap[t].instance.$destroy()}catch{}delete this._widgetInstancesMap[t]}),Object.keys(this._audioInstancesMap).forEach(t=>{try{this._audioInstancesMap[t].instance.$destroy()}catch{}delete this._audioInstancesMap[t]}),Object.keys(this._classifyTagInstancesMap).forEach(t=>{try{this._classifyTagInstancesMap[t].instance.$destroy()}catch{}delete this._classifyTagInstancesMap[t]}),Object.keys(this._planConfirmInstancesMap).forEach(t=>{try{this._planConfirmInstancesMap[t].instance.$destroy()}catch{}delete this._planConfirmInstancesMap[t]}),this._audioStateCache={}}},beforeDestroy(){this._destroyAllEmbedded()}},BO={methods:{_postrender(t){let e=t.replace(/&gt;/g,">").replace(/&lt;/g,"<").replace("CURSOR_POINT",'<span class="cursor"></span>');const r=document.createElement("div");return r.innerHTML=e,r.querySelectorAll("img").forEach(n=>{const i=P3(n.src,"size"),a=i&&i.split("|")||[];let o,s;if(a[1]){const u=a[1].split("*");o=u[0],u[1]&&(s=u[0]/u[1])}a[0]&&(a[0]==="min"&&(!o||o<24)?o=this.imgMinWidth||"24":a[0]==="mid"&&o>320?o=this.imgMaxWidth||"320":a[0]==="max"&&(o=this.imgMaxWidth||"320")),o&&(n.style.width=o===this.imgMaxWidth||o===this.imgMinWidth?o:`${o}px`),s&&(n.style.height=`${o/s}px`)}),r.querySelectorAll("pre code:not(.language-mermaid)").forEach((n,i,a)=>{if(Array.from(n.classList).some(s=>s.startsWith("language-"))?this.incremental||Ef(n):n.classList.add("hljs"),this.isFinal){this.incremental||I3(n);const s=n.parentNode.querySelector(".cursor");s&&s.remove()}else if(this.isPrintAnimate&&!r.querySelector(".cursor")&&i===a.length-1&&!this.isFinal&&n.parentElement===r.lastElementChild){const s=document.createElement("span");s.className="cursor",n.append(s)}if(!this.incremental&&!n.parentNode.querySelector(".code-language-label")&&n.result&&n.result.language){const s=document.createElement("div");s.className="code-language-label",this.codeHeaderRender?s.innerHTML=this.codeHeaderRender(n.result.language,this.content,i):s.textContent=n.result.language,n.parentNode.insertBefore(s,n)}}),n3(r),this.$emit("postrender",this.currentIndex,this.$refs.containerRef&&(this.$refs.containerRef.$el||this.$refs.containerRef),this.recordId),r.innerHTML.replace(/-->/g,"-->")},_onImageClick(t){this.$emit("imageClick",t)},_onDownloadCardClick(t,e){this.$emit("downloadCardClick",t,e)},_onMDRendered(t){t&&(this.incremental&&t.querySelectorAll("pre code:not(.language-mermaid)").forEach((e,r,n)=>{if(Array.from(e.classList).some(a=>a.startsWith("language-"))&&!e._highlighted&&(r===n.length-1&&!this.isFinal?Ef(e):(Ef(e),e._highlighted=!0)),this.isFinal&&!e._lineNumbered&&(I3(e),e._lineNumbered=!0),!e.parentNode.querySelector(".code-language-label")&&e.result&&e.result.language){const a=document.createElement("div");a.className="code-language-label",this.codeHeaderRender?a.innerHTML=this.codeHeaderRender(e.result.language,this.content,r):a.textContent=e.result.language,e.parentNode.insertBefore(a,e)}}),this.isFinal?(this.incremental?t.querySelectorAll(".question-text img, .answer-md img").forEach(e=>{e._imgClickBound||(e.addEventListener("click",this._onImageClick),e._imgClickBound=!0)}):(t.querySelectorAll(".question-text img").forEach(e=>{e.removeEventListener("click",this._onImageClick),e.addEventListener("click",this._onImageClick)}),t.querySelectorAll(".answer-md img").forEach(e=>{e.removeEventListener("click",this._onImageClick),e.addEventListener("click",this._onImageClick)})),t.querySelectorAll(`.${this.clazzMd||"answer-md"} a`).forEach(e=>{e.setAttribute("target","_blank")}),t.querySelectorAll(".video-placeholder").forEach(e=>e.remove()),t.querySelectorAll("video").forEach(e=>{e.style.display="block"})):t.querySelectorAll(".video-placeholder").forEach(e=>{this.incremental&&e._videoPlaceholderSet||(e.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" style="animation: video-placeholder-spin 1s linear infinite; flex-shrink: 0;"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.36131 2.32604C0.902925 3.77517 0 5.78264 0 8.00101C0 12.4193 3.58172 16.001 8 16.001C12.4183 16.001 16 12.4193 16 8.00101C16 3.58326 12.4191 0.00187492 8.00161 0.00100708L8.85183 1.6572C11.9837 2.07373 14.4 4.7552 14.4 8.00101C14.4 11.5356 11.5346 14.401 8 14.401C4.46538 14.401 1.6 11.5356 1.6 8.00101C1.6 6.40633 2.18324 4.94787 3.14803 3.82731L2.36131 2.32604Z" fill="currentColor"/></svg>视频加载中...',this.incremental&&(e._videoPlaceholderSet=!0))}),this.showTags&&t.querySelectorAll(".tags-container").forEach(e=>{this.incremental&&e._tagClickBound||(this.incremental?(e.addEventListener("click",()=>this.$emit("littleTagClick",e,this.recordId)),e._tagClickBound=!0):(e.removeEventListener("click",this._tagClickHandler),e.addEventListener("click",()=>this.$emit("littleTagClick",e,this.recordId))))}),this.showDownloadCard&&t.querySelectorAll(".download-card").forEach(e=>{this.incremental&&e._downloadClickBound||(e.addEventListener("click",r=>{const n=r.currentTarget.getAttribute("data-file-id");this._onDownloadCardClick(n,r);try{r&&r.preventDefault&&r.preventDefault()}catch{}}),this.incremental&&(e._downloadClickBound=!0))}),this.isMermaidRenderAfterOutput?this.isFinal&&setTimeout(()=>{D1.onMermaidLoaded(()=>{D1.renderAll(t)})},0):setTimeout(()=>{D1.onMermaidLoaded(()=>{D1.renderAll(t)})},0),this._mountAll(t))}}},_le="",FO={name:"MsgContent",components:{MDRender:EP},mixins:[YN,OO,BO],props:{showDownloadCard:{type:Boolean,default:!1},showTags:{type:Boolean,default:!1},fullFiles:{type:Array,default:()=>[]},recordId:String,content:{type:String,default:""},isFinal:{type:Boolean,default:!1},loadingMessage:{type:Boolean,default:!1},isMdExpand:{type:[Boolean,void 0],default:void 0},isReplaceLinks:{type:Boolean,default:!1},isPrintAnimate:{type:Boolean,default:!1},styleObj:Object,clazzTable:String,clazzMd:String,anchorAttributes:Object,linkify:{type:Boolean,default:!1},imgMinWidth:[Number,String],imgMaxWidth:[Number,String],printCount:Number,printCountTime:Number,hideCursorPoint:Boolean,chartDataArr:Array,codeHeaderRender:Function,replaceLinksWhitelist:Array,isMermaidRenderAfterOutput:{type:Boolean,default:!1},showWidget:{type:Boolean,default:!1},widgetList:{type:Array,default:()=>[]},audioList:{type:Array,default:()=>[]},locale:{type:String,default:"zh-CN"},incremental:{type:Boolean,default:!0},showClassifyTag:{type:Boolean,default:!1},showPlanConfirm:{type:Boolean,default:!1}},data(){return{currentText:"",renderText:""}},computed:{processOptions(){return{isReplaceLinks:this.isReplaceLinks,replaceLinksWhitelist:this.replaceLinksWhitelist,isFinal:this.isFinal,showTags:this.showTags,showDownloadCard:this.showDownloadCard,fullFiles:this.fullFiles,showWidget:this.showWidget,widgetList:this.widgetList,audioList:this.audioList,showClassifyTag:this.showClassifyTag,showPlanConfirm:this.showPlanConfirm}}},watch:{content(t){this.clearTimer(),this.currentIndex=this.currentText.length,this.currentText=this._getProcessedContent(t),this.isPrintAnimate?this._startPrint():this.renderText=this.currentText},isFinal(t){t&&this.content&&(this.clearTimer(),this.currentText=this._getProcessedContent(this.content),this.renderText=this.currentText,this.currentIndex=this.currentText.length)},isMdExpand(t){t?this.currentText=kf(this.content,this.processOptions):this.currentText=kf((this.content||"").substr(0,3e3),this.processOptions),this.renderText=this.currentText,this.clearTimer(),this.currentIndex=this.currentText.length},widgetList:{handler(t){this._updateWidgets(t)},deep:!0},audioList:{handler(t){this._updateAudioPlayers(t)},deep:!0}},created(){this._init()},mounted(){vN()},beforeDestroy(){this.clearTimer(),this._destroyAllEmbedded()},methods:{_getProcessedContent(t){if(!t)return"";const e=this.isMdExpand===void 0||this.isMdExpand?1e6:1e4;return kf(t.substr(0,e),this.processOptions)},_startPrint(){this.startCurrentTimer({printCount:this.printCount||1,printCountTime:this.printCountTime||16,hideCursorPoint:this.hideCursorPoint,isFinal:this.isFinal})},_init(){const t=this._getProcessedContent(this.content||"");this.currentText=t,!this.isPrintAnimate||this.isFinal?(this.renderText=t,this.currentIndex=t.length,this.clearTimer()):this._startPrint()}}};var zO=function(){var e=this,r=e._self._c;return r("MDRender",{ref:"containerRef",class:e.clazzMd||"answer-md",style:e.styleObj,attrs:{highlight:!0,"table-class":e.clazzTable||(e.isFinal?"table-style":"table"),source:e.renderText,"anchor-attributes":e.anchorAttributes||{target:"_blank"},linkify:e.linkify,incremental:e.incremental,postrender:e._postrender},on:{rendered:e._onMDRendered}})},VO=[],$O=ur(FO,zO,VO,!1,null,null,null,null);const H3=$O.exports,Pf=nn(H3),ble="",GO={name:"MsgThought",components:{VIcon:P1},props:{titleRender:{type:[Object,Function],default:null},isMobile:Boolean,content:String,title:String,titleIcon:String,nodeName:String,status:String,elapsed:{type:Number,default:0},detailVisible:{type:Boolean,default:!0}},data(){return{THOUGHT_STATUS:fP,innerDetailVisible:this.detailVisible,renderedContent:"",xssHandler:new In.FilterXSS(cP)}},computed:{elapsedSeconds(){return this.elapsed?(this.elapsed/1e3).toFixed(1):0}},watch:{content:{immediate:!0,handler(t){const e=(t||"").replace(/^\n+/,"").replace(/\n/g,"<br>");this.renderedContent=this.xssHandler.process(e)}},detailVisible(t){this.innerDetailVisible=t}},methods:{onTitleClick(){const t=!this.innerDetailVisible;this.innerDetailVisible=t,this.$emit("update:detailVisible",t)}}};var HO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"thought-clps-content"},[e.titleRender?r(e.titleRender,{tag:"component"}):e._e(),e.titleRender?e._e():r("div",{staticClass:"thought-title",on:{click:e.onTitleClick}},[r("div",{staticClass:"thought-title-container"},[r("img",{staticClass:"thought-title-icon",attrs:{src:e.titleIcon}}),r("span",{staticClass:"thought-title-name"},[e._v(" "+e._s(e.title)+" "),e.nodeName?r("span",{staticClass:"thought-clps-modellabel"},[e._v(" -"+e._s(e.nodeName)+" ")]):e._e()]),e.status===e.THOUGHT_STATUS.failed?r("v-icon",{style:{color:"#FF8345"},attrs:{name:"basic_warning_line",size:"16"}}):e._e(),e.status===e.THOUGHT_STATUS.success?r("v-icon",{style:{color:"#0FB87F"},attrs:{name:"basic_finish_line",size:"16"}}):e._e(),e.status===e.THOUGHT_STATUS.stop?r("v-icon",{style:{color:"rgba(1,11,50,0.41)"},attrs:{name:"basic_stop_line",size:"16"}}):e._e()],1),r("div",{staticClass:"thought-title-container thought-title-elapsed"},[r("span",[e._v(e._s(e.elapsedSeconds)+"s")]),r("v-icon",{staticClass:"thought__header__icon",attrs:{name:"arrow_down_small_line",rotate:e.innerDetailVisible?180:0,size:"12"}})],1)]),e.innerDetailVisible?r("div",{staticClass:"thought-detail"},[r("div",{staticClass:"question-text",class:{"question-text-mobile":e.isMobile},domProps:{innerHTML:e._s(e.renderedContent)}})]):e._e()],1)},UO=[],WO=ur(GO,HO,UO,!1,null,"60c16159",null,null);const qO=WO.exports,Rf=nn(qO);/*! *****************************************************************************
|
|
49
|
+
`))}return t=VN(t),t=zN(t),r&&(t=ZN(t,n)),GN(t)||(t=HN(t),t=WN.clean(t)),t=wN(t),t=SN(t),t=yN(t),t=CN(t),t=gN(t),t=mN(t),t=FN(t),i||(t=_N(t)),t=bN(t),a&&(t=IN(t)),o&&(t=LN(t,s)),u?t=DN(t,l):t=EN(t),c&&c.length>0?t=kN(t,c):t=MN(t),f?t=PN(t):t=RN(t),h?t=NN(t):t=ON(t),t=xN(t),t=UN.process(gE(t)),t}function ZN(t,e){if(!t||P3(window.location.hash,"from"))return t;let n=["lke.cloud.tencent.com","qidian"];e&&(n=e.concat(n));const i=BN(t);i.forEach((u,l)=>{t=t.replace(u,`IMG_URL${l}`)});const a=`${window.location.protocol}//${window.location.host}/lke#/link-info/redirect?target=`,o=n.map(u=>`(?!.*${u})`).join(""),s=new RegExp(`(\\[([^\\]]+)\\]\\((https?:\\/\\/${o}[^\\s)]+)\\))|(<a\\s+[^>]*href="(${o}[^"]+)"[^>]*>(.*?)<\\/a>)`,"gi");return t=t.replace(s,(u,l,c,f,h,d,p)=>l&&c?`[${c}](${a}${encodeURIComponent(f)})`:d&&!d.startsWith("#")?`<a href="${a}${encodeURIComponent(d)}">${p}</a>`:u),i.forEach((u,l)=>{t=t.replace(`IMG_URL${l}`,u)}),t}function kf(t,e={}){return AN(t,r=>qN(r,e))}const YN={data(){return{currentTimer:null,currentIndex:0}},methods:{clearTimer(){this.currentTimer&&(clearTimeout(this.currentTimer),this.currentTimer=null)},startCurrentTimer(t={}){const{printCount:e=1,printCountTime:r=16,hideCursorPoint:n=!1,isFinal:i=!1}=t;this.clearTimer(),this.currentTimer=setTimeout(()=>{const a=e;this.currentIndex+=a,this.renderText=n?this.currentText.substring(0,this.currentIndex):this.currentText.substring(0,this.currentIndex)+"CURSOR_POINT",(this.currentIndex<this.currentText.length||!i)&&this.startCurrentTimer(t)},r)}},beforeDestroy(){this.clearTimer()}};function XN(t,e={}){const{type:r="text/javascript",crossOrigin:n}=e;return new Promise((i,a)=>{if(document.querySelector(`script[src="${t}"]`)){i();return}const o=document.createElement("script");o.src=t,o.type=r,n&&(o.crossOrigin=n),o.onload=i,o.onerror=()=>a(new Error(`Failed to load: ${t}`)),document.head.appendChild(o)})}function jN(){const t=Date.now(),e=5*60*1e3;return Math.floor(t/e)*e}async function KN(){try{const t=window.tdWidgetSrc||"https://cdn.xiaowei.qq.com/webim/assets/static/widget/release/lib/js/",e=jN();return await XN(`${t}adp-widget.js?nounce=${e}`,{type:"module"}),!0}catch(t){throw console.error("Failed to load adp-widget:",t),t}}const cle="";Vr.config&&!Vr.config.ignoredElements.includes("adp-widget")&&Vr.config.ignoredElements.push("adp-widget");const QN={name:"MsgWidget",props:{output:{type:String,default:""},locale:{type:String,default:"zh-CN"},disable:{type:Boolean,default:!1}},data(){return{loaded:!1}},async mounted(){try{await KN(),this.loaded=!0}catch(t){console.error("[MsgWidget] 加载 adp-widget 失败:",t)}},methods:{handleAction(t){const{action:e}=t.detail||{};this.$emit("widget-action",e),this.$emit("widget-event",t)},handleRendered(t){const{success:e,config:r,error:n,timestamp:i}=t.detail||{};this.$emit("widget-rendered",{success:e,config:r,error:n,timestamp:i})}}};var JN=function(){var e=this,r=e._self._c;return r("div",{staticClass:"lke__widget-container"},[e.output&&e.loaded?r("adp-widget",{ref:"widget",attrs:{locale:e.locale,"widget-json":e.output,disable:e.disable},on:{"widget-rendered":e.handleRendered,"widget-action":e.handleAction}}):e._e()],1)},eO=[],tO=ur(QN,JN,eO,!1,null,"c152fdb4",null,null);const N3=tO.exports,Y=(...t)=>{console.log("[StreamAudioPlayer24]",...t)};let O3=class{constructor(){this.playMode=null,this.audioContext=null,this.audioQueue=[],this.pendingChunks=[],this.isPlaying=!1,this.totalDuration=0,this.estimatedDuration=0,this.pausedAt=0,this.startedAt=0,this.timeUpdateInterval=null,this.scheduledSources=[],this.nextScheduleTime=0,this.scheduledCount=0,this.autoPlayCheckInterval=null,this.autoPlayCheckWaitTime=0,this.processedChunkCount=0,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.decodeAheadCount=1;const e=this.isMobileDevice();this.maxDecodedBuffers=e?8:20,this.playedBufferCount=0,this.audioElement=null,this.iosUnlockAudio=null,this.mediaStreamDestination=null,this.wasPlayingBeforeHidden=!1,this.handleVisibilityChange=null,this.onPlayCallback=null,this.onPauseCallback=null,this.onEndCallback=null,this.onErrorCallback=null,this.onTimeUpdateCallback=null,this.onDurationChangeCallback=null,this.onUrlReadyCallback=null,this.generationComplete=!1,this.durationFromUrlSet=!1,this.urlReady=!1,this.fullAudioUrl=null,this.preloadedAudioElement=null}isMobileDevice(){return typeof navigator>"u"?!1:/Android|iPhone|iPad|iPod|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}initAudioContext(){if(!this.audioContext)try{const e=window.AudioContext||window.webkitAudioContext;this.audioContext=new e,Y("[initAudioContext] AudioContext 创建成功",{state:this.audioContext.state,sampleRate:this.audioContext.sampleRate,isIOS:/iPhone|iPad|iPod/i.test(navigator.userAgent)}),this.audioContext.onstatechange=()=>{if(Y("[AudioContext.onstatechange] 状态变化:",this.audioContext.state),(this.audioContext.state==="interrupted"||this.audioContext.state==="suspended")&&this.isPlaying&&this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[AudioContext.onstatechange] iOS audio 元素已暂停")}catch{}},this.handleVisibilityChange=()=>{var r,n,i,a;document.hidden?(this.wasPlayingBeforeHidden=this.isPlaying,Y("[visibilitychange] 页面隐藏,记录播放状态:",this.wasPlayingBeforeHidden)):(Y("[visibilitychange] 页面可见",{wasPlayingBeforeHidden:this.wasPlayingBeforeHidden,isPlaying:this.isPlaying,audioContextState:(r=this.audioContext)==null?void 0:r.state}),this.wasPlayingBeforeHidden&&(((n=this.audioContext)==null?void 0:n.state)==="suspended"||((i=this.audioContext)==null?void 0:i.state)==="interrupted"?this.audioContext.resume().then(()=>{Y("[visibilitychange] AudioContext 已恢复"),this.isPlaying&&this.iosUnlockAudio&&this.iosUnlockAudio.play().catch(o=>{Y("[visibilitychange] iOS audio 恢复播放失败:",o)})}).catch(o=>{Y("[visibilitychange] AudioContext 恢复失败:",o),this.isPlaying&&(this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback())}):((a=this.audioContext)==null?void 0:a.state)==="running"&&this.isPlaying&&this.iosUnlockAudio&&this.iosUnlockAudio.play().catch(o=>{Y("[visibilitychange] iOS audio 恢复播放失败:",o)})),this.wasPlayingBeforeHidden=!1)},document.addEventListener("visibilitychange",this.handleVisibilityChange),/iPhone|iPad|iPod/i.test(navigator.userAgent)&&this.setupIOSAudioRoute()}catch(e){console.error("[initAudioContext] 创建 AudioContext 失败:",e),this.onErrorCallback&&this.onErrorCallback(new Error("浏览器不支持音频播放"))}}setupIOSAudioRoute(){if(this.audioContext)try{if(typeof this.audioContext.createMediaStreamDestination!="function"){Y("[setupIOSAudioRoute] 浏览器不支持 createMediaStreamDestination");return}this.mediaStreamDestination=this.audioContext.createMediaStreamDestination(),this.iosUnlockAudio=document.createElement("audio"),this.iosUnlockAudio.srcObject=this.mediaStreamDestination.stream,this.iosUnlockAudio.setAttribute("playsinline","true"),this.iosUnlockAudio.setAttribute("webkit-playsinline","true"),this.iosUnlockAudio.onerror=e=>{Y("[setupIOSAudioRoute] iOS audio 元素错误:",e)},Y("[setupIOSAudioRoute] iOS 音频路由设置完成")}catch(e){console.error("[setupIOSAudioRoute] 设置失败:",e),this.mediaStreamDestination=null,this.iosUnlockAudio=null}}getAudioDestination(){return this.mediaStreamDestination?this.mediaStreamDestination:this.audioContext?this.audioContext.destination:null}async startIOSAudioElement(){if(this.iosUnlockAudio)try{await this.iosUnlockAudio.play(),Y("[startIOSAudioElement] iOS audio 元素播放启动成功")}catch(e){Y("[startIOSAudioElement] iOS audio 元素播放失败:",e)}}initAudioElement(){this.audioElement||(this.audioElement=new Audio,this.audioElement.preload="metadata",this.audioElement.addEventListener("play",()=>{this.isPlaying=!0,this.onPlayCallback&&this.onPlayCallback()}),this.audioElement.addEventListener("pause",()=>{this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback()}),this.audioElement.addEventListener("ended",()=>{this.isPlaying=!1,this.onEndCallback&&this.onEndCallback()}),this.audioElement.addEventListener("timeupdate",()=>{this.onTimeUpdateCallback&&this.onTimeUpdateCallback(this.audioElement.currentTime,this.audioElement.duration||0)}),this.audioElement.addEventListener("durationchange",()=>{this.totalDuration=this.audioElement.duration||0,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}),this.audioElement.addEventListener("error",e=>{this.onErrorCallback&&this.onErrorCallback(new Error("音频加载失败: "+(e.message||"未知错误")))}),this.audioElement.addEventListener("loadedmetadata",()=>{this.totalDuration=this.audioElement.duration||0,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}))}setPlayMode(e){this.playMode!==e&&(this.playMode==="stream"?this.clearStreamMode():this.playMode==="url"&&this.clearUrlMode(),this.playMode=e,e==="stream"?this.initAudioContext():e==="url"&&this.initAudioElement())}clearStreamMode(){this.stop(),this.audioQueue=[],this.pendingChunks=[],this.totalDuration=0,this.estimatedDuration=0,this.scheduledCount=0,this.nextScheduleTime=0,this.processedChunkCount=0,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.playedBufferCount=0,this.generationComplete=!1,this.fullAudioUrl=null,this.urlReady=!1,this.preloadedAudioElement=null,this.iosUnlockAudio&&(this.iosUnlockAudio.pause(),this.iosUnlockAudio.srcObject=null,this.iosUnlockAudio=null),this.mediaStreamDestination=null,this.handleVisibilityChange&&(document.removeEventListener("visibilitychange",this.handleVisibilityChange),this.handleVisibilityChange=null),this.audioContext&&(this.audioContext.onstatechange=null,this.audioContext.close().catch(()=>{}),this.audioContext=null),this.wasPlayingBeforeHidden=!1}clearUrlMode(){this.audioElement&&(this.audioElement.pause(),this.audioElement.src="")}setAudioUrl(e){e&&(this.setPlayMode("url"),this.audioElement.src=e,this.audioElement.load())}async ensureAudioContextRunning(){if(!this.audioContext)throw new Error("AudioContext not initialized");if(Y("[ensureAudioContextRunning] 当前状态:",this.audioContext.state),this.audioContext.state==="suspended")try{await this.audioContext.resume(),Y("[ensureAudioContextRunning] resume 成功,新状态:",this.audioContext.state),/iPhone|iPad|iPod/i.test(navigator.userAgent)&&await this.playUnlockSound()}catch(e){throw console.error("[ensureAudioContextRunning] resume 失败:",e),new Error("无法激活音频上下文")}else if(this.audioContext.state==="interrupted")try{await this.audioContext.resume(),Y("[ensureAudioContextRunning] 从 interrupted 状态恢复")}catch(e){throw console.error("[ensureAudioContextRunning] 从 interrupted 恢复失败:",e),new Error("无法恢复音频上下文")}}async playUnlockSound(){if(this.audioContext)try{const e=this.audioContext.createBuffer(1,1,this.audioContext.sampleRate),r=this.audioContext.createBufferSource();r.buffer=e,r.connect(this.getAudioDestination()),r.start(0),Y("[playUnlockSound] 播放解锁音频完成")}catch(e){Y("[playUnlockSound] 播放解锁音频失败(可忽略):",e)}}addBase64ChunkLazy(e,r=1){if(!e)return;this.setPlayMode("stream"),this.pendingChunks.push(e);const n=(e.length*.75/1024).toFixed(2);Y(`[addBase64ChunkLazy] 添加第 ${this.pendingChunks.length+this.processedChunkCount} 个chunk`,{chunkSize:`${n} KB`,pendingChunks:this.pendingChunks.length,processedChunkCount:this.processedChunkCount,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,isPlaying:this.isPlaying,totalDuration:this.totalDuration.toFixed(2),estimatedDuration:this.estimatedDuration.toFixed(2)}),this.estimatedDuration+=r,this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration()),this.autoPlayCheckWaitTime>0&&(Y("[addBase64ChunkLazy] 重置等待超时时间"),this.autoPlayCheckWaitTime=0),this.isPlaying?(Y("[addBase64ChunkLazy] 正在播放,触发 decodeAhead"),this.decodeAhead()):Y("[addBase64ChunkLazy] 未在播放状态,不触发解码")}async addBase64Chunk(e){e&&this.addBase64ChunkLazy(e)}getDisplayDuration(){return Math.floor(this.totalDuration+this.estimatedDuration)}async decodeAhead(){let e=0;if(this.audioQueue.forEach(i=>{e+=i.duration}),Y("[decodeAhead] 开始",{decodingInProgress:this.decodingInProgress,pendingChunks:this.pendingChunks.length,audioQueueLength:this.audioQueue.length,currentQueueDuration:e.toFixed(2),scheduledCount:this.scheduledCount,isPlaying:this.isPlaying,generationComplete:this.generationComplete,totalDuration:this.totalDuration.toFixed(2)}),this.decodingInProgress){Y("[decodeAhead] 已在解码中,跳过");return}if(this.pendingChunks.length===0){Y("[decodeAhead] 没有待解码的 chunk,跳过");return}const r=this.audioQueue.length-this.scheduledCount;if(Y("[decodeAhead] 未调度数量检查",{unscheduledCount:r,decodeAheadCount:this.decodeAheadCount,needMoreDecode:r<this.decodeAheadCount}),r>=this.decodeAheadCount&&this.pendingChunks.length>0){Y("[decodeAhead] 已有足够预解码 buffer,100ms 后再检查"),setTimeout(()=>this.decodeAhead(),100);return}this.decodingInProgress=!0;const n=this.processedChunkCount+1;try{const i=this.pendingChunks.shift(),a=(i.length*.75/1024).toFixed(2);Y(`[decodeAhead] 开始解码第 ${n} 个chunk`,{size:`${a} KB`});const o=window.atob(i),s=new Uint8Array(o.length);for(let l=0;l<o.length;l++)s[l]=o.charCodeAt(l);const u=s.buffer;await this.addAudioChunkInternal(u),Y(`[decodeAhead] 第 ${n} 个chunk 解码完成`,{audioQueueLength:this.audioQueue.length,totalDuration:this.totalDuration.toFixed(2),durationFromUrlSet:this.durationFromUrlSet}),this.durationFromUrlSet||(this.estimatedDuration>0&&(this.estimatedDuration=Math.max(0,this.estimatedDuration-1)),this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration()))}catch(i){console.error(`[decodeAhead] 解码第 ${n} 个chunk 失败:`,i),this.onErrorCallback&&this.onErrorCallback(i)}finally{this.decodingInProgress=!1}this.pendingChunks.length>0&&this.isPlaying?(Y("[decodeAhead] 继续解码下一个chunk"),setTimeout(()=>this.decodeAhead(),0)):Y("[decodeAhead] 解码结束",{pendingChunks:this.pendingChunks.length,isPlaying:this.isPlaying})}async processAudioDataArray(e){if(!e||!Array.isArray(e))return;const r=e.slice(this.processedChunkCount);Y("[processAudioDataArray] 处理音频数据数组",{totalLength:e.length,processedChunkCount:this.processedChunkCount,newChunksCount:r.length});for(const n of r)await this.addBase64Chunk(n),this.processedChunkCount++;Y("[processAudioDataArray] 处理完成",{processedChunkCount:this.processedChunkCount})}decodeAudioDataCompat(e){const r=(e.byteLength/1024).toFixed(2);return Y("[decodeAudioDataCompat] 开始解码",{size:`${r} KB`}),new Promise((n,i)=>{const a=this.audioContext.decodeAudioData(e,o=>{Y("[decodeAudioDataCompat] 解码成功",{duration:o.duration.toFixed(2),sampleRate:o.sampleRate,channels:o.numberOfChannels}),n(o)},o=>{console.error("[decodeAudioDataCompat] 解码失败",{error:(o==null?void 0:o.message)||o,bufferSize:`${r} KB`}),i(o||new Error("解码音频数据失败"))});a&&typeof a.then=="function"&&a.then(n).catch(o=>{console.error("[decodeAudioDataCompat] Promise 解码失败",{error:(o==null?void 0:o.message)||o,bufferSize:`${r} KB`}),i(o)})})}async addAudioChunk(e){return this.addAudioChunkInternal(e)}async addAudioChunkInternal(e){if(this.setPlayMode("stream"),!this.audioContext)throw new Error("AudioContext not initialized");try{let r;e instanceof Blob?r=await e.arrayBuffer():r=e;const n=(r.byteLength/1024).toFixed(2);Y("[addAudioChunkInternal] 开始解码 ArrayBuffer",{size:`${n} KB`});const i=r.slice(0),a=await this.decodeAudioDataCompat(i),o=this.audioQueue.length,s=this.totalDuration;this.audioQueue.push(a),this.durationFromUrlSet||(this.totalDuration+=a.duration),Y("[addAudioChunkInternal] 解码成功",{bufferDuration:a.duration.toFixed(2),sampleRate:a.sampleRate,numberOfChannels:a.numberOfChannels,length:a.length,audioQueueLength:`${o} -> ${this.audioQueue.length}`,totalDuration:`${s.toFixed(2)} -> ${this.totalDuration.toFixed(2)}`,durationFromUrlSet:this.durationFromUrlSet}),this.isPlaying&&!this.isSchedulingFromPosition?(Y("[addAudioChunkInternal] 正在播放,调用 scheduleNewChunks"),this.scheduleNewChunks()):this.isSchedulingFromPosition?Y("[addAudioChunkInternal] 正在执行 scheduleFromPosition,跳过 scheduleNewChunks"):Y("[addAudioChunkInternal] 未在播放状态,不调度"),this.onDurationChangeCallback&&!this.durationFromUrlSet&&this.onDurationChangeCallback(this.getDisplayDuration())}catch(r){console.error("[addAudioChunkInternal] 解码音频数据失败:",r),this.onErrorCallback&&this.onErrorCallback(r)}}async addPCMChunk(e,r=24e3,n=1,i=16){if(this.setPlayMode("stream"),!this.audioContext)throw new Error("AudioContext not initialized");try{const a=i/8,o=e.byteLength/(a*n),s=this.audioContext.createBuffer(n,o,r),u=new DataView(e);for(let l=0;l<n;l++){const c=s.getChannelData(l);for(let f=0;f<o;f++){let h;if(i===16)h=u.getInt16((f*n+l)*2,!0)/32768;else if(i===8)h=(u.getUint8(f*n+l)-128)/128;else if(i===32)h=u.getFloat32((f*n+l)*4,!0);else throw new Error(`Unsupported bits per sample: ${i}`);c[f]=h}}this.audioQueue.push(s),this.totalDuration+=s.duration,this.isPlaying&&this.audioContext&&this.scheduleNewChunks(),this.onDurationChangeCallback&&this.onDurationChangeCallback(this.totalDuration)}catch(a){this.onErrorCallback&&this.onErrorCallback(a)}}scheduleNewChunks(){if(!this.audioContext||!this.isPlaying){Y("[scheduleNewChunks] 跳过",{hasAudioContext:!!this.audioContext,isPlaying:this.isPlaying});return}const e=this.audioContext.currentTime,r=this.scheduledCount;this.scheduledCount>this.audioQueue.length&&(Y("[scheduleNewChunks] 警告:scheduledCount 超出 audioQueue 长度!",{scheduledCount:this.scheduledCount,audioQueueLength:this.audioQueue.length,playedBufferCount:this.playedBufferCount}),this.scheduledCount=this.audioQueue.length),Y("[scheduleNewChunks] 开始调度",{audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,toSchedule:this.audioQueue.length-this.scheduledCount,currentTime:e.toFixed(3),nextScheduleTime:this.nextScheduleTime.toFixed(3),pendingChunks:this.pendingChunks.length});for(let n=this.scheduledCount;n<this.audioQueue.length;n++){const i=this.audioQueue[n],a=this.audioContext.createBufferSource();a.buffer=i,a.connect(this.getAudioDestination());const o=Math.max(e,this.nextScheduleTime);Y(`[scheduleNewChunks] 调度第 ${n+1} 个buffer`,{bufferDuration:i.duration.toFixed(2),scheduleTime:o.toFixed(3),currentTime:e.toFixed(3)}),a.start(o,0,i.duration),this.nextScheduleTime=o+i.duration,this.scheduledCount++,this.scheduledSources.push(a),a.onended=()=>{const s=this.scheduledSources.indexOf(a);if(s===-1){Y(`[sourceNode.onended] 第 ${n+1} 个buffer 被手动停止,跳过后续逻辑`);return}if(this.scheduledSources.splice(s,1),this.playedBufferCount++,this.cleanupOldBuffers(),Y(`[sourceNode.onended] 第 ${n+1} 个buffer 播放结束`,{scheduledSourcesLength:this.scheduledSources.length,isPlaying:this.isPlaying,pendingChunks:this.pendingChunks.length,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,generationComplete:this.generationComplete,playedBufferCount:this.playedBufferCount}),this.decodeAhead(),this.scheduledSources.length===0&&this.isPlaying){let u=0;this.audioQueue.forEach(l=>{u+=l.duration}),Y("[sourceNode.onended] 所有已调度片段播放完毕,尝试调度新片段",{audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledCount:this.audioQueue.length-this.scheduledCount,remainingQueueDuration:u.toFixed(2),pendingChunks:this.pendingChunks.length}),this.scheduleNewChunks(),this.scheduledSources.length===0&&(Y("[sourceNode.onended] 调度后仍无片段",{pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledBuffers:this.audioQueue.length-this.scheduledCount}),this.pendingChunks.length>0?(Y("[sourceNode.onended] 还有待解码chunk,启动 autoPlayCheck"),this.startAutoPlayCheck()):this.audioQueue.length>this.scheduledCount?(Y("[sourceNode.onended] 还有未调度的buffer,重新调度"),this.scheduleNewChunks()):this.generationComplete?(Y("[sourceNode.onended] 生成完成,结束播放"),this.handlePlaybackEnd()):(Y("[sourceNode.onended] 等待新数据,启动 autoPlayCheck"),this.startAutoPlayCheck()))}}}Y("[scheduleNewChunks] 调度完成",{scheduledCount:`${r} -> ${this.scheduledCount}`,scheduledSourcesLength:this.scheduledSources.length,nextScheduleTime:this.nextScheduleTime.toFixed(3)})}async play(){if(this.playMode==="url"&&this.audioElement){try{await this.audioElement.play()}catch(e){this.onErrorCallback&&this.onErrorCallback(e)}return}if(!this.audioContext){this.onErrorCallback&&this.onErrorCallback(new Error("AudioContext not initialized"));return}if(!this.isPlaying){try{await this.ensureAudioContextRunning(),await this.startIOSAudioElement()}catch(e){this.onErrorCallback&&this.onErrorCallback(e);return}if(this.audioQueue.length===0&&this.pendingChunks.length>0&&await this.decodeFirstChunk(),this.audioQueue.length===0){Y("[play] 没有可播放的音频数据");return}this.isPlaying=!0,this.startedAt=this.audioContext.currentTime-this.pausedAt,this.pausedAt===0&&(this.scheduledCount=0,this.nextScheduleTime=this.audioContext.currentTime),this.pausedAt===0?this.scheduleNewChunks():this.scheduleFromPosition(this.pausedAt),this.decodeAhead(),this.onPlayCallback&&this.onPlayCallback(),this.startTimeUpdate(),Y("[play] 播放开始",{audioContextState:this.audioContext.state,audioQueueLength:this.audioQueue.length,pausedAt:this.pausedAt,isIOS:/iPhone|iPad|iPod/i.test(navigator.userAgent)})}}async decodeFirstChunk(){if(this.pendingChunks.length===0)return;const e=this.pendingChunks.shift();try{const r=window.atob(e),n=new Uint8Array(r.length);for(let a=0;a<r.length;a++)n[a]=r.charCodeAt(a);const i=n.buffer;await this.addAudioChunkInternal(i),this.estimatedDuration>0&&(this.estimatedDuration=Math.max(0,this.estimatedDuration-1))}catch(r){console.error("解码首个 chunk 失败:",r)}}scheduleFromPosition(e){if(!this.audioContext)return;this.isSchedulingFromPosition=!0;let r=0;const n=this.audioContext.currentTime;let i=n,a=0;for(let o=0;o<this.audioQueue.length;o++){const s=this.audioQueue[o],u=r,l=r+s.duration;if(l>e){const c=this.audioContext.createBufferSource();c.buffer=s,c.connect(this.getAudioDestination());let f=0,h=s.duration;e>u&&(f=e-u,h=s.duration-f,i=n),c.start(i,f,h),i+=h,this.scheduledSources.push(c),a++,c.onended=()=>{const d=this.scheduledSources.indexOf(c);if(d===-1){Y("[scheduleFromPosition.onended] sourceNode 被手动停止,跳过后续逻辑");return}this.scheduledSources.splice(d,1),this.playedBufferCount++,this.cleanupOldBuffers(),this.decodeAhead(),this.scheduledSources.length===0&&this.isPlaying&&(this.scheduleNewChunks(),this.scheduledSources.length===0&&(Y("[scheduleFromPosition.onended] 调度后仍无片段",{pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,audioQueueLength:this.audioQueue.length,scheduledCount:this.scheduledCount,unscheduledBuffers:this.audioQueue.length-this.scheduledCount}),this.pendingChunks.length>0?(Y("[scheduleFromPosition.onended] 还有待解码chunk,启动 autoPlayCheck"),this.startAutoPlayCheck()):this.audioQueue.length>this.scheduledCount?(Y("[scheduleFromPosition.onended] 还有未调度的buffer,重新调度"),this.scheduleNewChunks()):this.generationComplete?(Y("[scheduleFromPosition.onended] 生成完成,结束播放"),this.handlePlaybackEnd()):(Y("[scheduleFromPosition.onended] 等待新数据,启动 autoPlayCheck"),this.startAutoPlayCheck())))}}r=l}this.scheduledCount=this.audioQueue.length,this.nextScheduleTime=i,this.isSchedulingFromPosition=!1,Y("[scheduleFromPosition] 调度完成",{startPosition:e.toFixed(2),scheduledInThisCall:a,scheduledCount:this.scheduledCount,nextScheduleTime:this.nextScheduleTime.toFixed(3),scheduledSourcesLength:this.scheduledSources.length})}pause(){if(this.playMode==="url"&&this.audioElement){this.audioElement.pause();return}if(!(!this.isPlaying||!this.audioContext)){this.pausedAt=this.audioContext.currentTime-this.startedAt;for(const e of this.scheduledSources)try{e.stop()}catch{}if(this.scheduledSources=[],this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[pause] iOS audio 元素已暂停")}catch{}this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback(),this.stopTimeUpdate(),this.stopAutoPlayCheck()}}stop(){if(this.playMode==="url"&&this.audioElement){this.audioElement.pause(),this.audioElement.currentTime=0,this.isPlaying=!1;return}this.pause(),this.pausedAt=0,this.startedAt=0,this.scheduledCount=0,this.nextScheduleTime=0,this.stopTimeUpdate(),this.stopAutoPlayCheck()}clear(){this.stop(),this.audioQueue=[],this.pendingChunks=[],this.totalDuration=0,this.estimatedDuration=0,this.scheduledCount=0,this.nextScheduleTime=0,this.processedChunkCount=0,this.generationComplete=!1,this.decodingInProgress=!1,this.isSchedulingFromPosition=!1,this.durationFromUrlSet=!1}handlePlaybackEnd(){let e=0;if(this.audioQueue.forEach(r=>{e+=r.duration}),Y("[handlePlaybackEnd] 播放结束",{totalDuration:this.totalDuration.toFixed(2),actualDecodedDuration:e.toFixed(2),audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,processedChunkCount:this.processedChunkCount,scheduledCount:this.scheduledCount,playedBufferCount:this.playedBufferCount,generationComplete:this.generationComplete,durationFromUrlSet:this.durationFromUrlSet}),this.isPlaying=!1,this.pausedAt=0,this.startedAt=0,this.stopTimeUpdate(),this.stopAutoPlayCheck(),this.iosUnlockAudio)try{this.iosUnlockAudio.pause(),Y("[handlePlaybackEnd] iOS audio 元素已暂停")}catch{}this.onEndCallback&&this.onEndCallback()}async markGenerationComplete(e){let r=0;this.audioQueue.forEach(n=>{r+=n.duration}),Y("[markGenerationComplete] 标记生成完成",{audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,scheduledSourcesLength:this.scheduledSources.length,totalDuration:this.totalDuration.toFixed(2),currentDecodedDuration:r.toFixed(2),estimatedDuration:this.estimatedDuration.toFixed(2),isPlaying:this.isPlaying,hasAudioUrl:!!e,processedChunkCount:this.processedChunkCount}),this.generationComplete=!0,e&&(this.fullAudioUrl=e),this.isPlaying&&this.pendingChunks.length>0&&(Y("[markGenerationComplete] 正在播放,触发按需解码"),this.decodeAhead()),this.autoPlayCheckInterval&&this.scheduledSources.length===0&&this.pendingChunks.length===0&&(Y("[markGenerationComplete] 正在等待且无剩余片段,立即结束"),this.handlePlaybackEnd()),e?this.getDurationFromUrl(e):this.onDurationChangeCallback&&this.onDurationChangeCallback(this.getDisplayDuration())}getDurationFromUrl(e){Y("[getDurationFromUrl] 开始从 URL 获取时长并预加载",{audioUrl:e}),this.preloadedAudioElement=new Audio,this.preloadedAudioElement.preload="auto";const r=this.preloadedAudioElement;let n=!1;const i=()=>{if(n)return;n=!0;const s=r.duration;Y("[getDurationFromUrl] 获取时长成功",{duration:s.toFixed(2)}),this.totalDuration=s,this.estimatedDuration=0,this.durationFromUrlSet=!0,this.onDurationChangeCallback&&this.onDurationChangeCallback(Math.floor(s))},a=()=>{Y("[getDurationFromUrl] URL 预加载完成,可以 seek"),this.urlReady=!0,this.onUrlReadyCallback&&this.onUrlReadyCallback()},o=s=>{Y("[getDurationFromUrl] 获取时长/预加载失败",s),this.urlReady=!0,this.preloadedAudioElement=null,this.onDurationChangeCallback&&!n&&this.onDurationChangeCallback(this.getDisplayDuration()),this.onUrlReadyCallback&&this.onUrlReadyCallback()};r.addEventListener("loadedmetadata",i),r.addEventListener("canplay",a),r.addEventListener("canplaythrough",a),r.addEventListener("error",o),r.src=e,r.load()}async decodeAllPendingChunks(){for(Y("[decodeAllPendingChunks] 开始解码所有待解码 chunk",{pendingChunks:this.pendingChunks.length});this.pendingChunks.length>0;){const e=this.pendingChunks.shift(),r=this.processedChunkCount+1;try{const n=(e.length*.75/1024).toFixed(2);Y(`[decodeAllPendingChunks] 解码第 ${r} 个chunk`,{size:`${n} KB`});const i=window.atob(e),a=new Uint8Array(i.length);for(let s=0;s<i.length;s++)a[s]=i.charCodeAt(s);const o=a.buffer;await this.addAudioChunkInternal(o),this.processedChunkCount++,Y(`[decodeAllPendingChunks] 第 ${r} 个chunk 解码完成`,{totalDuration:this.totalDuration.toFixed(2)})}catch(n){console.error(`[decodeAllPendingChunks] 解码第 ${r} 个chunk 失败:`,n)}}Y("[decodeAllPendingChunks] 所有 chunk 解码完成",{audioQueueLength:this.audioQueue.length,totalDuration:this.totalDuration.toFixed(2)})}cleanupOldBuffers(){const e=this.audioQueue.length;if(Y("[cleanupOldBuffers] 检查",{currentQueueLength:e,maxDecodedBuffers:this.maxDecodedBuffers,playedBufferCount:this.playedBufferCount,scheduledCount:this.scheduledCount,pendingChunks:this.pendingChunks.length,totalDuration:this.totalDuration.toFixed(2)}),e>this.maxDecodedBuffers&&this.playedBufferCount>0){const r=Math.min(e-this.maxDecodedBuffers,this.playedBufferCount);if(r>0){let n=0;for(let o=0;o<r;o++)n+=this.audioQueue[o].duration;const i=this.audioQueue.splice(0,r);this.scheduledCount=Math.max(0,this.scheduledCount-r),this.playedBufferCount=Math.max(0,this.playedBufferCount-r);let a=0;i.forEach(o=>{a+=o.length*o.numberOfChannels*4/1024}),Y("[cleanupOldBuffers] 内存回收",{cleanedCount:r,cleanedDuration:n.toFixed(2),freedMemoryKB:a.toFixed(2),remainingQueueLength:this.audioQueue.length,newScheduledCount:this.scheduledCount,newPlayedBufferCount:this.playedBufferCount,isMobile:this.isMobileDevice()})}}}startAutoPlayCheck(){if(this.autoPlayCheckInterval){Y("[startAutoPlayCheck] 已有检查定时器,跳过");return}Y("[startAutoPlayCheck] 启动等待新数据检查"),this.autoPlayCheckWaitTime=0;const e=180*1e3;this.autoPlayCheckInterval=window.setInterval(()=>{this.autoPlayCheckWaitTime+=200,Y("[autoPlayCheck] 检查",{waitTime:this.autoPlayCheckWaitTime,scheduledCount:this.scheduledCount,audioQueueLength:this.audioQueue.length,pendingChunks:this.pendingChunks.length,generationComplete:this.generationComplete,scheduledSourcesLength:this.scheduledSources.length}),this.scheduledCount<this.audioQueue.length?(Y("[autoPlayCheck] 发现新片段,调度"),this.scheduleNewChunks(),this.scheduledSources.length>0&&(Y("[autoPlayCheck] 调度成功,停止检查"),this.stopAutoPlayCheck())):this.scheduledSources.length>0?(Y("[autoPlayCheck] 还有片段在播放中,停止检查"),this.stopAutoPlayCheck()):this.pendingChunks.length>0?(Y("[autoPlayCheck] 还有待解码chunk,触发解码"),this.decodeAhead()):this.generationComplete?(Y("[autoPlayCheck] 生成完成且无播放片段和待解码chunk,结束播放"),this.handlePlaybackEnd()):this.autoPlayCheckWaitTime>=e&&(Y("[autoPlayCheck] 等待超时,结束播放"),this.handlePlaybackEnd())},200)}stopAutoPlayCheck(){this.autoPlayCheckInterval&&(clearInterval(this.autoPlayCheckInterval),this.autoPlayCheckInterval=null)}startTimeUpdate(){this.timeUpdateInterval||(this.timeUpdateInterval=window.setInterval(()=>{if(this.isPlaying&&this.audioContext){const e=this.audioContext.currentTime-this.startedAt;this.onTimeUpdateCallback&&this.onTimeUpdateCallback(e,this.totalDuration)}},100))}stopTimeUpdate(){this.timeUpdateInterval&&(clearInterval(this.timeUpdateInterval),this.timeUpdateInterval=null)}seek(e){if(Y("[seek] 开始",{time:e,playMode:this.playMode,generationComplete:this.generationComplete,urlReady:this.urlReady,hasPreloadedAudio:!!this.preloadedAudioElement,isPlaying:this.isPlaying}),this.playMode==="url"&&this.audioElement){this.audioElement.currentTime=Math.max(0,Math.min(e,this.audioElement.duration||0));return}if(this.playMode==="stream"){if(this.generationComplete&&this.urlReady&&this.preloadedAudioElement){Y("[seek] 切换到 URL 模式(使用预加载的 audio 元素)");const n=this.isPlaying;this.stopTimeUpdate();for(const i of this.scheduledSources)try{i.stop()}catch{}this.scheduledSources=[],this.isPlaying=!1,this.audioElement=this.preloadedAudioElement,this.preloadedAudioElement=null,this.playMode="url",this.bindAudioElementEvents(),this.audioElement.currentTime=Math.max(0,Math.min(e,this.audioElement.duration||0)),n&&this.audioElement.play().catch(i=>{Y("[seek] 播放失败:",i)});return}const r=this.isPlaying;r&&this.pause(),this.pausedAt=Math.max(0,Math.min(e,this.totalDuration)),r&&this.play()}}bindAudioElementEvents(){this.audioElement&&(this.audioElement.addEventListener("play",()=>{this.isPlaying=!0,this.onPlayCallback&&this.onPlayCallback()}),this.audioElement.addEventListener("pause",()=>{this.isPlaying=!1,this.onPauseCallback&&this.onPauseCallback()}),this.audioElement.addEventListener("ended",()=>{this.isPlaying=!1,this.onEndCallback&&this.onEndCallback()}),this.audioElement.addEventListener("timeupdate",()=>{this.onTimeUpdateCallback&&this.onTimeUpdateCallback(this.audioElement.currentTime,this.audioElement.duration||0)}),this.audioElement.addEventListener("error",e=>{this.onErrorCallback&&this.onErrorCallback(new Error("音频加载失败: "+(e.message||"未知错误")))}))}getPlayState(){return this.isPlaying}getDuration(){return this.playMode==="url"&&this.audioElement?this.audioElement.duration||0:this.getDisplayDuration()}getCurrentTime(){return this.playMode==="url"&&this.audioElement?this.audioElement.currentTime||0:this.isPlaying&&this.audioContext?this.audioContext.currentTime-this.startedAt:this.pausedAt}getAudioQueue(){return[...this.audioQueue]}async getAudioData(){const e=[];for(const r of this.audioQueue){const n=r.numberOfChannels,i=r.length,a=new ArrayBuffer(i*n*2),o=new DataView(a);for(let s=0;s<n;s++){const u=r.getChannelData(s);for(let l=0;l<i;l++){const c=Math.max(-1,Math.min(1,u[l])),f=c<0?c*32768:c*32767;o.setInt16((l*n+s)*2,f,!0)}}e.push(a)}return e}onPlay(e){this.onPlayCallback=e}onPause(e){this.onPauseCallback=e}onEnd(e){this.onEndCallback=e}onError(e){this.onErrorCallback=e}onTimeUpdate(e){this.onTimeUpdateCallback=e}onDurationChange(e){this.onDurationChangeCallback=e}onUrlReady(e){this.onUrlReadyCallback=e}isUrlReady(){return this.urlReady}destroy(){this.stop(),this.stopTimeUpdate(),this.stopAutoPlayCheck(),this.handleVisibilityChange&&(document.removeEventListener("visibilitychange",this.handleVisibilityChange),this.handleVisibilityChange=null),this.audioContext&&(this.audioContext.onstatechange=null,this.audioContext.close(),this.audioContext=null),this.audioQueue=[],this.iosUnlockAudio&&(this.iosUnlockAudio.pause(),this.iosUnlockAudio.srcObject=null,this.iosUnlockAudio=null),this.mediaStreamDestination=null,this.audioElement&&(this.audioElement.pause(),this.audioElement.src="",this.audioElement=null),this.playMode=null}},Mf="https://cdn.xiaowei.qq.com/adp/assets/static/iconfont-XzKaDZdEa7j2GPL-1201.js",uu={};function rO(t){const e={};return t.props.size&&(e.width=`${t.props.size}px`,e.height=`${t.props.size}px`),t.props.valign&&(e.verticalAlign=`${t.props.valign}px`),t.props.rotate&&(e.transform=`rotate(${t.props.rotate}deg)`),e}function nO(t){const e=t.props;return{"v-icon":!0,"is-horizontal":e.flip==="horizontal","is-vertical":e.flip==="vertical","v-icon--stroke":e.useStroke,"v-icon--fill":!e.useStroke}}function B3(t){let e=document.createElement("script");e.type="text/javascript",e.src=t,document.getElementsByTagName("head")[0].appendChild(e)}const iO=t=>{let e=!1,r=Object.keys(uu);r.forEach(n=>{uu[n]===t&&(e=!0)}),e||(uu[r.length]=t,B3(t))};var aO=ur({name:"VIcon",functional:!0,props:{name:{type:String,required:!0},remote:{type:Boolean,default:!1},remoteSrc:{type:String,default:""},remotePrefix:{type:String,default:"v-"},loadDefaultRemoteIcons:{type:Boolean,default:!0},label:String,rotate:[Number,String],size:[Number,String],valign:[Number,String],flip:String,useStroke:Boolean,clazz:String,scoped:String},render(t,e){const r=rO(e);if(e.data.style)for(let n in e.data.style)r[n]=e.data.style[n];return!uu.defaultRemoteSrc&&Mf&&e.props.loadDefaultRemoteIcons&&(uu.defaultRemoteSrc=Mf,B3(Mf)),e.props.remoteSrc&&iO(e.props.remoteSrc),t("svg",{class:nO(e),style:r,attrs:{role:e.props.label?"img":"presentation","aria-label":e.props.label},on:e.data.nativeOn},[t("use",{attrs:{"xlink:href":"#"+e.props.remotePrefix+e.props.name,class:e.props.clazz},style:{pointerEvents:"none"}})])}},null,null,!1,null,null,null,null);const P1=aO.exports,vle="",oO={name:"StreamAudioPlayer",components:{VIcon:P1},props:{audioData:{type:Object,required:!0}},data(){return{player:null,internalStatus:"pending",currentTime:0,duration:0,isDragging:!1,isHoveringProgress:!1,lastProcessedChunkCount:0,playModeDecided:!1,lastKnownIsComplete:!1,urlReady:!1,dragCleanup:null}},computed:{isGenerating(){return!this.audioData.isComplete},hasPlayableContent(){const t=!!this.audioData.audio_url,e=this.audioData.audio_data&&this.audioData.audio_data.length>0;return t||e},isDisabled(){return!this.hasPlayableContent},canSeek(){return!this.isGenerating&&this.urlReady},displayFileName(){return this.audioData.title?this.audioData.title:this.isGenerating?"音频生成中...":"音频文件"},statusText(){if(this.isDisabled)return"暂无音频";if(this.isGenerating&&this.duration===0)return"生成中...";const t=this.formatTime(this.currentTime),e=this.isGenerating?"生成中":this.formatTime(this.duration);return`${t} / ${e}`},statusClass(){return{generating:this.isGenerating,completed:this.internalStatus==="completed",playing:this.internalStatus==="playing",paused:this.internalStatus==="paused",disabled:this.isDisabled}},cardClass(){return{generating:this.isGenerating,completed:this.internalStatus==="completed",playing:this.internalStatus==="playing",paused:this.internalStatus==="paused",disabled:this.isDisabled,hoverable:!this.isDisabled&&!this.isGenerating}},progressPercentage(){return this.duration===0?0:this.currentTime/this.duration*100},showHandle(){return(this.isHoveringProgress||this.isDragging)&&!this.isDisabled&&!this.isGenerating},canPlay(){return!(this.isDisabled||this.isGenerating&&this.duration===0)},canDownload(){return!!this.audioData.audio_url},playButtonTitle(){return this.isDisabled?"暂无音频":this.isGenerating&&this.duration===0?"等待音频生成":this.internalStatus==="playing"?"暂停":"播放"},downloadButtonTitle(){return this.canDownload?"下载":this.isGenerating?"生成中,暂不可下载":"暂无可下载的音频"}},watch:{audioData:{handler(t){var r;if(!t||!this.player)return;console.log("[StreamAudioPlayer] audioData watch 触发:",{hasAudioUrl:!!t.audio_url,audioDataLength:(r=t.audio_data)==null?void 0:r.length,isComplete:t.isComplete,playModeDecided:this.playModeDecided,lastProcessedChunkCount:this.lastProcessedChunkCount,lastKnownIsComplete:this.lastKnownIsComplete,internalStatus:this.internalStatus}),!this.playModeDecided&&t.audio_url&&(console.log("[StreamAudioPlayer] 切换到 URL 模式"),this.handleAudioUrlChange(t.audio_url)),t.audio_data&&Array.isArray(t.audio_data)&&t.audio_data.length>this.lastProcessedChunkCount&&(!this.playModeDecided||this.player.playMode==="stream")&&(console.log("[StreamAudioPlayer] 处理新的音频片段"),this.handleAudioDataChange(t.audio_data)),!!t.isComplete&&!this.lastKnownIsComplete&&(this.lastKnownIsComplete=!0,this.handleGenerationComplete())},deep:!0,immediate:!1}},mounted(){this.initPlayer(),this.audioData&&(this.audioData.audio_data&&this.audioData.audio_data.length>0?this.handleAudioDataChange(this.audioData.audio_data):this.audioData.audio_url&&this.handleAudioUrlChange(this.audioData.audio_url),this.audioData.isComplete&&(this.lastKnownIsComplete=!0,this.handleGenerationComplete()))},beforeDestroy(){this.destroyPlayer()},beforeUnmount(){this.destroyPlayer()},methods:{initPlayer(){this.player=new O3,this.player.onPlay(()=>{this.internalStatus="playing",this.$emit("play",this.audioData)}),this.player.onPause(()=>{this.internalStatus="paused",this.$emit("pause",this.audioData)}),this.player.onEnd(()=>{this.player.playMode==="url"?this.internalStatus="completed":this.isGenerating?this.internalStatus="paused":this.internalStatus="completed",this.currentTime=0,this.$emit("end",this.audioData)}),this.player.onTimeUpdate((t,e)=>{this.isDragging||(this.currentTime=t),this.duration=e,t>=e&&e>0&&!this.isGenerating&&(this.player.pause(),this.internalStatus="completed",this.currentTime=e)}),this.player.onDurationChange(t=>{this.duration=t}),this.player.onError(t=>{console.error("音频播放错误:",t),this.$emit("error",t)}),this.player.onUrlReady(()=>{console.log("[StreamAudioPlayer.vue] URL 预加载完成回调"),this.urlReady=!0}),this.checkInitialState()},checkInitialState(){this.isDisabled?this.internalStatus="disabled":this.isGenerating?this.internalStatus="generating":this.internalStatus="completed"},handleAudioUrlChange(t){!this.player||!t||this.playModeDecided&&this.player.playMode!=="url"||(this.player.setAudioUrl(t),this.playModeDecided=!0,this.internalStatus="completed")},handleAudioDataChange(t){var r,n,i,a,o;if(!this.player||!t)return;this.playModeDecided=!0;const e=t.length-this.lastProcessedChunkCount;if(console.log("[StreamAudioPlayer.vue] handleAudioDataChange",{totalChunks:t.length,lastProcessedChunkCount:this.lastProcessedChunkCount,newChunksCount:e,playerPendingChunks:(r=this.player.pendingChunks)==null?void 0:r.length,playerAudioQueueLength:(n=this.player.audioQueue)==null?void 0:n.length,playerScheduledCount:this.player.scheduledCount,playerIsPlaying:this.player.isPlaying,internalStatus:this.internalStatus}),e<=0){console.log("[StreamAudioPlayer.vue] 没有新片段,跳过");return}(this.internalStatus==="disabled"||this.internalStatus==="pending")&&(this.internalStatus="generating");for(let s=this.lastProcessedChunkCount;s<t.length;s++){const u=t[s];console.log(`[StreamAudioPlayer.vue] 添加第 ${s+1} 个chunk,大小: ${(u.length*.75/1024).toFixed(2)} KB`),this.player.addBase64Chunk(u),this.lastProcessedChunkCount++,this.$emit("chunk-added",{duration:this.duration,queueLength:((i=this.player.pendingChunks)==null?void 0:i.length)||0})}console.log("[StreamAudioPlayer.vue] handleAudioDataChange 完成",{lastProcessedChunkCount:this.lastProcessedChunkCount,playerPendingChunks:(a=this.player.pendingChunks)==null?void 0:a.length,playerAudioQueueLength:(o=this.player.audioQueue)==null?void 0:o.length})},handleGenerationComplete(){var t,e,r,n,i,a,o;console.log("[StreamAudioPlayer.vue] handleGenerationComplete",{playerAudioQueueLength:(e=(t=this.player)==null?void 0:t.audioQueue)==null?void 0:e.length,playerPendingChunks:(n=(r=this.player)==null?void 0:r.pendingChunks)==null?void 0:n.length,playerTotalDuration:(a=(i=this.player)==null?void 0:i.totalDuration)==null?void 0:a.toFixed(2),playerScheduledCount:(o=this.player)==null?void 0:o.scheduledCount,internalStatus:this.internalStatus,hasAudioUrl:!!this.audioData.audio_url}),this.player&&this.player.markGenerationComplete(this.audioData.audio_url),this.player&&(this.duration=this.player.getDuration(),console.log("[StreamAudioPlayer.vue] 最终时长:",this.duration.toFixed(2))),this.internalStatus!=="playing"&&(this.internalStatus="completed"),this.audioData.audio_url||(this.urlReady=!0)},async addAudioChunk(t){var e;if(!this.player){console.warn("播放器未初始化");return}try{typeof t=="string"?await this.player.addBase64Chunk(t):await this.player.addAudioChunk(t),this.$emit("chunk-added",{duration:this.duration,queueLength:((e=this.player.audioQueue)==null?void 0:e.length)||0})}catch(r){console.error("添加音频片段失败:",r),this.$emit("error",r)}},markGenerationComplete(){this.handleGenerationComplete()},async handlePlayPause(){if(!(!this.player||!this.canPlay))try{this.internalStatus==="playing"?this.player.pause():(this.currentTime>=this.duration&&this.duration>0&&(this.currentTime=0,this.player.pausedAt=0),await this.player.play())}catch(t){console.error("播放控制错误:",t)}},handleDownload(){if(!this.canDownload)return;const t=this.audioData.audio_url,e=this.audioData.title||"音频文件",r=document.createElement("a");r.href=t,r.download=e,r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),this.$emit("audio-download",{url:t,fileName:e})},formatTime(t){if(!t||isNaN(t))return"00:00";const e=Math.floor(t/60),r=Math.floor(t%60);return`${e.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`},handleMouseEnter(){},handleMouseLeave(){},handleProgressMouseEnter(){!this.isDisabled&&!this.isGenerating&&(this.isHoveringProgress=!0)},handleProgressMouseLeave(){this.isDragging||(this.isHoveringProgress=!1)},handleProgressMouseDown(t){this.isDisabled||!this.canSeek||this.seekToPosition(t)},handleDragStart(t){if(this.isDisabled||!this.canSeek)return;this.isDragging=!0,t.preventDefault();const e=n=>{this.seekToPosition(n)},r=()=>{this.isDragging=!1,this.isHoveringProgress||(this.isHoveringProgress=!1),document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r),this.dragCleanup=null};this.dragCleanup=()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r)},document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)},seekToPosition(t){if(!this.player||!this.$refs.progressTrack)return;const r=this.$refs.progressTrack.getBoundingClientRect(),n=t.clientX-r.left,a=Math.max(0,Math.min(1,n/r.width))*this.duration;this.currentTime=a,this.player.seek(a)},destroyPlayer(){this.dragCleanup&&(this.dragCleanup(),this.dragCleanup=null),this.player&&(this.player.destroy(),this.player=null),this.internalStatus="pending",this.currentTime=0,this.duration=0,this.lastProcessedChunkCount=0,this.playModeDecided=!1,this.urlReady=!1,this.lastKnownIsComplete=!1}}};var sO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"stream-audio-player-card",class:e.cardClass,on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave}},[r("div",{staticClass:"audio-content"},[r("div",{staticClass:"audio-icon"},[r("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"30",height:"34",viewBox:"0 0 30 34",fill:"none"}},[r("path",{staticStyle:{fill:"color(display-p3 0.9569 0.9333 0.9882)","fill-opacity":"1"},attrs:{d:"M1.55782e-06 5.33333C1.66168e-06 3.46649 1.71361e-06 2.53307 0.363313 1.82003C0.682891 1.19282 1.19283 0.682889 1.82003 0.363312C2.53307 1.40931e-07 3.46649 1.92863e-07 5.33334 2.96727e-07L21.1242 1.17527e-06C21.9395 1.22063e-06 22.3472 1.24331e-06 22.7308 0.0921015C23.0709 0.173757 23.396 0.308438 23.6943 0.491201C24.0307 0.69734 24.3189 0.985593 24.8954 1.5621L28.4379 5.10457C29.0144 5.68108 29.3027 5.96933 29.5088 6.30572C29.6916 6.60396 29.8262 6.92911 29.9079 7.26923C30 7.65285 30 8.0605 30 8.87581L30 28C30 29.8668 30 30.8003 29.6367 31.5133C29.3171 32.1405 28.8072 32.6504 28.18 32.97C27.4669 33.3333 26.5335 33.3333 24.6667 33.3333L5.33333 33.3333C3.46649 33.3333 2.53307 33.3333 1.82003 32.97C1.19282 32.6504 0.68289 32.1405 0.363312 31.5133C1.40931e-07 30.8003 1.92863e-07 29.8668 2.96727e-07 28L1.55782e-06 5.33333Z",fill:"#F4EEFC"}}),r("path",{staticStyle:{fill:"color(display-p3 0.8863 0.8353 0.9725)","fill-opacity":"1"},attrs:{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M29.1667 28L29.1667 8.87581C29.1667 8.02084 29.1613 7.72918 29.0976 7.46377C29.0364 7.20868 28.9353 6.96481 28.7983 6.74113C28.6557 6.5084 28.4532 6.29838 27.8487 5.69383L24.3062 2.15135C23.7016 1.5468 23.4916 1.34435 23.2589 1.20173C23.0352 1.06466 22.7913 0.963651 22.5362 0.90241C22.2708 0.83869 21.9792 0.833334 21.1242 0.833334L5.33334 0.833333C4.38616 0.833333 3.7259 0.833981 3.21187 0.87598C2.70756 0.917183 2.41782 0.993995 2.19836 1.10582C1.72795 1.3455 1.3455 1.72795 1.10582 2.19836C0.993997 2.41782 0.917185 2.70756 0.875981 3.21187C0.833983 3.7259 0.833335 4.38616 0.833335 5.33333L0.833334 28C0.833334 28.9472 0.833982 29.6074 0.87598 30.1215C0.917183 30.6258 0.993995 30.9155 1.10582 31.135C1.3455 31.6054 1.72795 31.9878 2.19836 32.2275C2.41782 32.3393 2.70756 32.4161 3.21187 32.4573C3.7259 32.4993 4.38616 32.5 5.33333 32.5L24.6667 32.5C25.6138 32.5 26.2741 32.4993 26.7881 32.4573C27.2924 32.4161 27.5822 32.3393 27.8016 32.2275C28.2721 31.9878 28.6545 31.6054 28.8942 31.135C29.006 30.9155 29.0828 30.6258 29.124 30.1215C29.166 29.6074 29.1667 28.9472 29.1667 28ZM0.363313 1.82003C1.71361e-06 2.53307 1.66168e-06 3.46649 1.55782e-06 5.33333L2.96727e-07 28C1.92863e-07 29.8668 1.40931e-07 30.8003 0.363312 31.5133C0.68289 32.1405 1.19282 32.6504 1.82003 32.97C2.53307 33.3333 3.46649 33.3333 5.33333 33.3333L24.6667 33.3333C26.5335 33.3333 27.4669 33.3333 28.18 32.97C28.8072 32.6504 29.3171 32.1405 29.6367 31.5133C30 30.8003 30 29.8668 30 28L30 8.87581C30 8.0605 30 7.65285 29.9079 7.26923C29.8262 6.92911 29.6916 6.60396 29.5088 6.30572C29.3027 5.96933 29.0144 5.68108 28.4379 5.10457L24.8954 1.5621C24.3189 0.985593 24.0307 0.69734 23.6943 0.491201C23.396 0.308438 23.0709 0.173757 22.7308 0.0921015C22.3472 1.24331e-06 21.9395 1.22063e-06 21.1242 1.17527e-06L5.33334 2.96727e-07C3.46649 1.92863e-07 2.53307 1.40931e-07 1.82003 0.363312C1.19283 0.682889 0.682891 1.19282 0.363313 1.82003Z",fill:"#E2D5F8"}}),r("path",{staticStyle:{fill:"color(display-p3 0.4157 0.2706 0.8980)","fill-opacity":"1"},attrs:{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M22.1277 22.689L22.129 8.92249L10.0345 10.5529L10.0335 22.0895C9.69971 21.9846 9.34054 21.9276 8.96638 21.9276C7.19825 21.9276 5.76489 23.2017 5.76489 24.7734C5.76489 26.345 7.19825 27.6191 8.96638 27.6191C10.7157 27.6191 12.1374 26.3719 12.1674 24.8233L12.1676 24.8233L12.1676 24.8123L12.1679 24.7734L12.1676 24.7347L12.168 13.7622L19.9939 12.5435L19.9935 19.9543C19.6596 19.8493 19.3001 19.7922 18.9257 19.7922C17.1576 19.7922 15.7242 21.0663 15.7242 22.6379C15.7242 24.2096 17.1576 25.4837 18.9257 25.4837C20.6746 25.4837 22.096 24.2371 22.1267 22.689L22.1277 22.689Z",fill:"#6A45E5"}})])]),r("div",{staticClass:"file-info"},[r("div",{staticClass:"file-name",attrs:{title:e.displayFileName}},[e._v(e._s(e.displayFileName))]),r("div",{staticClass:"file-status"},[r("span",{staticClass:"status-text",class:e.statusClass},[e._v(" "+e._s(e.statusText)+" ")])])]),r("div",{staticClass:"audio-controls"},[r("button",{staticClass:"control-btn download-btn",attrs:{disabled:!e.canDownload,title:e.downloadButtonTitle},on:{click:e.handleDownload}},[r("v-icon",{attrs:{name:"basic_download2_line",size:18}})],1),r("button",{staticClass:"control-btn play-btn",attrs:{disabled:!e.canPlay,title:e.playButtonTitle},on:{click:e.handlePlayPause}},[e.internalStatus==="playing"?r("v-icon",{attrs:{name:"basic_pause_line",size:18}}):r("v-icon",{attrs:{name:"basic_play_line",size:18}})],1)])]),r("div",{staticClass:"progress-container"},[r("div",{ref:"progressTrack",staticClass:"progress-track",on:{mousedown:e.handleProgressMouseDown,mouseenter:e.handleProgressMouseEnter,mouseleave:e.handleProgressMouseLeave}},[e.isGenerating?e._e():r("div",{staticClass:"progress-played",class:{"no-transition":e.isDragging},style:{width:e.progressPercentage+"%"}}),e.showHandle?r("div",{staticClass:"progress-handle",class:{"no-transition":e.isDragging},style:{left:e.progressPercentage+"%"},on:{mousedown:function(n){return n.stopPropagation(),e.handleDragStart.apply(null,arguments)}}}):e._e()])])])},uO=[],lO=ur(oO,sO,uO,!1,null,"c74077bd",null,null);const F3=lO.exports,cO={已完成所有任务:{zh:"已完成所有任务",en:"All tasks completed"},已停止:{zh:"已停止",en:"Stopped"},任务进度:{zh:"任务进度",en:"Task progress"},问题澄清:{zh:"问题澄清",en:"Question Clarification"},支持多选:{zh:"(支持多选)",en:"(Multiple selection)"},提交:{zh:"提交",en:"Submit"},已提交:{zh:"已提交",en:"Submitted"},跳过:{zh:"跳过",en:"Skip"}};function fO(t){const e={"zh-CN":{},"en-US":{}};for(const[r,n]of Object.entries(t))e["zh-CN"][r]=n.zh,e["en-US"][r]=n.en;return e}const hO=fO(cO),R1="zh-CN",hi={"zh-cn":"zh-CN",zh_cn:"zh-CN","zh-hans":"zh-CN","zh-hans-cn":"zh-CN",zh:"zh-CN",cn:"zh-CN",chinese:"zh-CN","chinese-simplified":"zh-CN","simplified-chinese":"zh-CN",simplifiedchinese:"zh-CN",chs:"zh-CN",zhs:"zh-CN",hans:"zh-CN","zh-sg":"zh-CN",zh_sg:"zh-CN","zh-tw":"zh-CN",zh_tw:"zh-CN","zh-hk":"zh-CN",zh_hk:"zh-CN","zh-hant":"zh-CN","zh-hant-tw":"zh-CN","zh-hant-hk":"zh-CN",cht:"zh-CN",zht:"zh-CN",hant:"zh-CN","chinese-traditional":"zh-CN","traditional-chinese":"zh-CN",traditionalchinese:"zh-CN","en-us":"en-US",en_us:"en-US","en-gb":"en-US",en_gb:"en-US","en-au":"en-US",en_au:"en-US","en-ca":"en-US",en_ca:"en-US",en:"en-US",us:"en-US",gb:"en-US",uk:"en-US",english:"en-US",eng:"en-US","en-in":"en-US",en_in:"en-US","en-nz":"en-US",en_nz:"en-US","en-ie":"en-US",en_ie:"en-US"};function dO(t){if(!t||typeof t!="string")return R1;const e=t.trim().toLowerCase();if(!e)return R1;if(hi[e])return hi[e];const r=e.replace(/-/g,"_");if(hi[r])return hi[r];const n=e.replace(/_/g,"-");if(hi[n])return hi[n];const i=e.split(/[-_]/)[0];return hi[i]?hi[i]:e==="zh-cn"||e==="zh_cn"?"zh-CN":e==="en-us"||e==="en_us"?"en-US":R1}function pO(t,e=R1){const r=dO(e),n=hO[r];return n[t]!==void 0?n[t]:t}function z3(t,e){const r={};for(const n of e)r[n]=pO(n,t);return r}const gle="",vO={name:"ClassifyTag",props:{title:{type:String,default:""},questions:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},defaultAnswers:{type:Array,default:()=>[]},locale:{type:String,default:"zh-CN"}},data(){return{collapsed:!1,selectedAnswers:{},submitted:!1}},watch:{defaultAnswers:{handler(t){t&&t.length>0&&this._applyDefaultAnswers(t)},immediate:!0}},computed:{i18nText(){return z3(this.locale,["问题澄清","支持多选","提交","已提交","跳过"])},displayTitle(){return this.title||this.i18nText.问题澄清},normalizedQuestions(){return!this.questions||!this.questions.length?[]:this.questions.map((t,e)=>({id:t.id!==void 0?t.id:e,text:t.text||t.question||"",isMulti:t.type===2,options:(t.options||[]).map(r=>typeof r=="string"?{label:r,description:""}:{label:r.label||r.Label||"",description:r.description||r.Description||""})}))},allAnswered(){return!this.normalizedQuestions||this.normalizedQuestions.length===0?!1:this.normalizedQuestions.every(t=>{const e=this.selectedAnswers[t.id];return t.isMulti?Array.isArray(e)&&e.length>0:e!==void 0})}},methods:{_applyDefaultAnswers(t){t.forEach(e=>{if(e.questionId!==void 0){if(e.selectedIndices&&Array.isArray(e.selectedIndices))this.$set(this.selectedAnswers,e.questionId,[...e.selectedIndices]);else if(e.selectedIndex!==void 0){const r=this.normalizedQuestions.find(n=>n.id===e.questionId);r&&r.isMulti?this.$set(this.selectedAnswers,e.questionId,[e.selectedIndex]):this.$set(this.selectedAnswers,e.questionId,e.selectedIndex)}}}),this.submitted=!0},toggleCollapse(){this.collapsed=!this.collapsed},selectOption(t,e){this.submitted||this.disabled||this.$set(this.selectedAnswers,t,e)},isChecked(t,e){const r=this.selectedAnswers[t];return Array.isArray(r)&&r.includes(e)},toggleCheckbox(t,e){if(this.submitted||this.disabled)return;let r=this.selectedAnswers[t];Array.isArray(r)?r=[...r]:r=[];const n=r.indexOf(e);n!==-1?r.splice(n,1):r.push(e),this.$set(this.selectedAnswers,t,r)},handleSubmit(){if(!this.allAnswered||this.submitted)return;this.submitted=!0;const t=this.normalizedQuestions.map(e=>{const r=this.selectedAnswers[e.id];if(e.isMulti){const i=Array.isArray(r)?r:[],a=i.map(o=>e.options[o]?e.options[o].label:"");return{questionId:String(e.id),questionText:e.text,isMulti:!0,selectedOptions:a,selectedOption:a[0]||"",selectedIndices:i,selectedIndex:i[0]!==void 0?i[0]:-1}}const n=e.options[r];return{questionId:String(e.id),questionText:e.text,isMulti:!1,selectedOption:n?n.label:"",selectedOptions:[n?n.label:""],selectedIndex:r,selectedIndices:[r]}});this.$emit("submit",t)},handleSkip(){this.submitted||this.disabled||this.$emit("skip")}}};var gO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"classify-tag",class:{"classify-tag--collapsed":e.collapsed}},[r("div",{staticClass:"classify-tag__header",on:{click:e.toggleCollapse}},[r("svg",{attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{staticStyle:{fill:"color(display-p3 0.2902 0.4392 1.0000)","fill-opacity":"1"},attrs:{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M14.6673 8.0026C14.6673 4.32071 11.6825 1.33594 8.00065 1.33594C4.31875 1.33594 1.33398 4.32071 1.33398 8.0026C1.33398 11.6845 4.31875 14.6693 8.00065 14.6693C9.30211 14.6693 10.5165 14.2963 11.5427 13.6515L14.0003 14.0026L13.6493 11.5451C14.2943 10.5188 14.6673 9.30427 14.6673 8.0026ZM9.53271 4.90821C9.17249 4.59038 8.69733 4.42965 8.09538 4.42965C7.40443 4.42965 6.87353 4.62549 6.49142 5.00899L6.49031 5.01011C6.10731 5.38555 5.91113 5.89787 5.91113 6.55934V6.58788H6.92834V6.55934C6.92834 6.186 7.00316 5.88407 7.16637 5.66942C7.35011 5.41021 7.64478 5.29692 8.03181 5.29692C8.34206 5.29692 8.6007 5.37861 8.78036 5.55472L8.78283 5.55714C8.95394 5.7338 9.03537 5.97228 9.03537 6.26554C9.03537 6.4892 8.94804 6.6972 8.78703 6.89889L8.78139 6.90595L8.62913 7.07178L8.35539 7.31521L8.23731 7.42503L8.0271 7.63165C7.80455 7.86045 7.6682 8.03969 7.60292 8.17753L7.60164 8.18025L7.56817 8.2469C7.47946 8.44276 7.42756 8.73331 7.41978 9.22348H8.4573C8.49181 8.50677 8.80055 8.14573 8.96934 8.00587L9.28505 7.73273L9.58341 7.46308L9.67835 7.37044L9.73842 7.30517C9.96924 7.01379 10.0889 6.64468 10.0889 6.20321C10.0889 5.65678 9.90079 5.22396 9.53412 4.90944L9.53271 4.90821ZM7.94792 11.3333C8.31611 11.3333 8.61458 11.0349 8.61458 10.6667C8.61458 10.2985 8.31611 10 7.94792 10C7.57973 10 7.28125 10.2985 7.28125 10.6667C7.28125 11.0349 7.57973 11.3333 7.94792 11.3333Z",fill:"#4A70FF"}})]),r("span",{staticClass:"classify-tag__title"},[e._v(e._s(e.displayTitle))]),r("svg",{staticClass:"classify-tag__arrow",class:{"classify-tag__arrow--up":!e.collapsed},attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M4 6L8 10L12 6",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"classify-tag__content"},e._l(e.normalizedQuestions,function(n,i){return r("div",{key:n.id||i,staticClass:"classify-tag__question-group"},[r("div",{staticClass:"classify-tag__question-text"},[e._v(" "+e._s(i+1)+"、"+e._s(n.text)+" "),n.isMulti?r("span",{staticClass:"classify-tag__multi-hint"},[e._v(e._s(e.i18nText.支持多选))]):e._e()]),r("div",{staticClass:"classify-tag__options"},[n.isMulti?e._l(n.options,function(a,o){return r("label",{key:o,staticClass:"classify-tag__checkbox",class:{"classify-tag__checkbox--checked":e.isChecked(n.id||i,o),"classify-tag__checkbox--rich":a.description},on:{click:function(s){return e.toggleCheckbox(n.id||i,o)}}},[r("span",{staticClass:"classify-tag__checkbox-box"},[e.isChecked(n.id||i,o)?r("svg",{staticClass:"classify-tag__checkbox-tick",attrs:{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M1 4L3.5 6.5L9 1",stroke:"#fff","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})]):e._e()]),r("span",{staticClass:"classify-tag__radio-content"},[r("span",{staticClass:"classify-tag__radio-label"},[e._v(e._s(a.label))]),a.description?r("span",{staticClass:"classify-tag__radio-desc"},[e._v(e._s(a.description))]):e._e()])])}):e._l(n.options,function(a,o){return r("label",{key:o,staticClass:"classify-tag__radio",class:{"classify-tag__radio--checked":e.selectedAnswers[n.id||i]===o,"classify-tag__radio--rich":a.description},on:{click:function(s){return e.selectOption(n.id||i,o)}}},[r("span",{staticClass:"classify-tag__radio-circle"},[e.selectedAnswers[n.id||i]===o?r("span",{staticClass:"classify-tag__radio-dot"}):e._e()]),r("span",{staticClass:"classify-tag__radio-content"},[r("span",{staticClass:"classify-tag__radio-label"},[e._v(e._s(a.label))]),a.description?r("span",{staticClass:"classify-tag__radio-desc"},[e._v(e._s(a.description))]):e._e()])])})],2)])}),0),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"classify-tag__footer"},[r("div",{staticClass:"classify-tag__footer-divider"}),r("div",{staticClass:"classify-tag__footer-actions"},[r("button",{staticClass:"classify-tag__btn classify-tag__btn--primary",attrs:{disabled:!e.allAnswered||e.submitted},on:{click:e.handleSubmit}},[e._v(" "+e._s(e.submitted?e.i18nText.已提交:e.i18nText.提交)+" ")]),e.submitted?e._e():r("button",{staticClass:"classify-tag__btn classify-tag__btn--secondary",on:{click:e.handleSkip}},[e._v(" "+e._s(e.i18nText.跳过)+" ")])])])])},mO=[],yO=ur(vO,gO,mO,!1,null,"82dd6a75",null,null);const N1=yO.exports,mle="",_O={name:"PlanConfirm",props:{title:{type:String,default:"计划确认"},planText:{type:String,default:""},disabled:{type:Boolean,default:!1}},data(){return{collapsed:!1,confirmed:!1,skipped:!1}},methods:{toggleCollapse(){this.collapsed=!this.collapsed},handleConfirm(){this.confirmed||this.skipped||this.disabled||(this.confirmed=!0,this.$emit("confirm",this.planText))},handleSkip(){this.confirmed||this.skipped||this.disabled||(this.skipped=!0,this.$emit("skip",this.planText))}}};var bO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"plan-confirm",class:{"plan-confirm--collapsed":e.collapsed}},[r("div",{staticClass:"plan-confirm__header",on:{click:e.toggleCollapse}},[r("svg",{staticClass:"plan-confirm__icon",attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M13.5 5.5L6.5 12.5L2.5 8.5",stroke:"#4A70FF","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}}),r("rect",{attrs:{x:"1",y:"1",width:"14",height:"14",rx:"2",stroke:"#4A70FF","stroke-width":"1.5",fill:"none"}})]),r("span",{staticClass:"plan-confirm__title"},[e._v(e._s(e.title))]),r("svg",{staticClass:"plan-confirm__arrow",class:{"plan-confirm__arrow--up":!e.collapsed},attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[r("path",{attrs:{d:"M4 6L8 10L12 6",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}})])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"plan-confirm__content"},[r("div",{staticClass:"plan-confirm__text"},[e._v(e._s(e.planText))])]),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsed,expression:"!collapsed"}],staticClass:"plan-confirm__footer"},[r("div",{staticClass:"plan-confirm__footer-divider"}),r("div",{staticClass:"plan-confirm__footer-actions"},[!e.confirmed&&!e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--primary",on:{click:e.handleConfirm}},[e._v(" 确定 ")]):e._e(),e.confirmed?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--primary",attrs:{disabled:""}},[e._v(" 已确定 ")]):e._e(),!e.confirmed&&!e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--secondary",on:{click:e.handleSkip}},[e._v(" 跳过 ")]):e._e(),e.skipped?r("button",{staticClass:"plan-confirm__btn plan-confirm__btn--secondary",attrs:{disabled:""}},[e._v(" 已跳过 ")]):e._e()])])])},xO=[],wO=ur(_O,bO,xO,!1,null,"99c3033c",null,null);const SO=wO.exports;let O1;const CO=new Uint8Array(16);function AO(){if(!O1&&(O1=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!O1))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return O1(CO)}const Ct=[];for(let t=0;t<256;++t)Ct.push((t+256).toString(16).slice(1));function TO(t,e=0){return Ct[t[e+0]]+Ct[t[e+1]]+Ct[t[e+2]]+Ct[t[e+3]]+"-"+Ct[t[e+4]]+Ct[t[e+5]]+"-"+Ct[t[e+6]]+Ct[t[e+7]]+"-"+Ct[t[e+8]]+Ct[t[e+9]]+"-"+Ct[t[e+10]]+Ct[t[e+11]]+Ct[t[e+12]]+Ct[t[e+13]]+Ct[t[e+14]]+Ct[t[e+15]]}const V3={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function $3(t,e,r){if(V3.randomUUID&&!e&&!t)return V3.randomUUID();t=t||{};const n=t.random||(t.rng||AO)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,e){r=r||0;for(let i=0;i<16;++i)e[r+i]=n[i];return e}return TO(n)}const DO=["Basic","Card","ListView","ListViewItem","Badge","Box","Row","Col","Button","Caption","Chart","Checkbox","DatePicker","Divider","Form","Icon","Image","Input","Label","Markdown","RadioGroup","Select","Spacer","Text","Textarea","Title","Transition","Video","Audio","Countdown","Clickable","ImageSelect"];class EO{constructor(){this.worker=null,this.callbacks=new Map,this.initializing=!1,this.initPromise=null,this.blobUrl=null}async init(){return this.worker?Promise.resolve():this.initializing&&this.initPromise?this.initPromise:(this.initializing=!0,this.initPromise=new Promise((e,r)=>{try{const n=window.tsxToJsonWorkerSrc||"https://cdn.xiaowei.qq.com/adp/assets/static/tsxToJSON.worker.js",i=new Blob([`importScripts('${n}')`],{type:"application/javascript"});this.blobUrl=URL.createObjectURL(i),this.worker=new Worker(this.blobUrl),this.worker.onmessage=a=>{const{ok:o,out:s,error:u,nonce:l}=a.data,c=this.callbacks.get(l);c&&(this.callbacks.delete(l),o?c.resolve(s):c.reject(new Error(u||"Worker Parse error")))},this.worker.onerror=a=>{console.error("tsxToJSON Worker 错误:",a)},this.initializing=!1,e()}catch(n){this.initializing=!1,console.error("初始化 tsxToJSON Worker 失败:",n),r(n)}}),this.initPromise)}destroy(){this.worker&&(this.worker.terminate(),this.worker=null),this.blobUrl&&(URL.revokeObjectURL(this.blobUrl),this.blobUrl=null),this.callbacks.forEach(e=>{e.reject(new Error("Worker destroy"))}),this.callbacks.clear(),this.initializing=!1,this.initPromise=null}async parse({view:e,state:r,keyMap:n,componentNames:i=DO}){return await this.init(),new Promise((a,o)=>{if(!this.worker){o(new Error("Worker not init"));return}const s=$3();this.callbacks.set(s,{resolve:a,reject:o}),this.worker.postMessage({type:"parse",view:e,state:r||{},keyMap:n,componentNames:i||[],nonce:s})})}isInitialized(){return!!this.worker}}let B1=null;async function Lf(){return B1||(B1=new EO),await B1.init(),B1}class kO{constructor(){this.worker=null,this.callbacks=new Map,this.initializing=!1,this.initPromise=null,this.blobUrl=null}async init(){return this.worker?Promise.resolve():this.initializing&&this.initPromise?this.initPromise:(this.initializing=!0,this.initPromise=new Promise((e,r)=>{try{const n=window.schemaWorkerSrc||"https://cdn.xiaowei.qq.com/adp/assets/static/schemaWorker.js",i=new Blob([`importScripts('${n}')`],{type:"application/javascript"});this.blobUrl=URL.createObjectURL(i),this.worker=new Worker(this.blobUrl),this.worker.onmessage=a=>{const{ok:o,keyMap:s,jsonSchema:u,error:l,nonce:c}=a.data,f=this.callbacks.get(c);f&&(this.callbacks.delete(c),o?f.resolve({keyMap:s,jsonSchema:u}):f.reject(new Error(l||"Worker parse failed")))},this.worker.onerror=a=>{console.error("zodSchema Worker 错误:",a)},this.initializing=!1,e()}catch(n){this.initializing=!1,console.error("初始化 zodSchema Worker 失败:",n),r(n)}}),this.initPromise)}destroy(){this.worker&&(this.worker.terminate(),this.worker=null),this.blobUrl&&(URL.revokeObjectURL(this.blobUrl),this.blobUrl=null),this.callbacks.forEach(e=>{e.reject(new Error("Worker destroyed"))}),this.callbacks.clear(),this.initializing=!1,this.initPromise=null}async zodToJsonSchema({src:e,includeJSONSchema:r=!0}){return await this.init(),new Promise((n,i)=>{if(!this.worker){i(new Error("Worker not init"));return}const a=$3();this.callbacks.set(a,{resolve:n,reject:i}),this.worker.postMessage({type:"parse",src:e,includeJSONSchema:r,nonce:a})})}async zodToJsonSchemaAsync(e){return await this.zodToJsonSchema({src:e,includeJSONSchema:!0})}isInitialized(){return!!this.worker}}let F1=null;async function G3(){return F1||(F1=new kO),await F1.init(),F1}async function z1(t){const r=await(await G3()).zodToJsonSchemaAsync(t);return{keyMap:r.keyMap,jsonSchema:JSON.stringify(r.jsonSchema,null,2)}}function MO(t,e){let r;try{r=JSON.parse(t)}catch(i){return console.warn(`unmarshal view failed, err: ${i}`),t}let n;try{n=JSON.parse(e)}catch(i){return console.warn(`unmarshal payload failed, err: ${i}`),t}If(r,n);try{return JSON.stringify(r)}catch(i){return console.warn(`marshal view failed, err: ${i}`),t}}function If(t,e){if(Array.isArray(t))for(let r=0;r<t.length;r++)If(t[r],e);else if(t!==null&&typeof t=="object"){const r=t.name;if(typeof r=="string"){const n=typeof t.type=="string"?t.type:"unknown",i=LO(r,e);if(i.exists){const a=i.value;switch(n){case"DatePicker":t.defaultValue=a;break;case"Select":t.defaultValue=a;break;case"Checkbox":t.defaultChecked=a;break;case"RadioGroup":t.defaultValue=a;break;case"Input":t.defaultValue=a;break;case"Textarea":t.defaultValue=a;break;default:t.defaultValue=a}}}if(Array.isArray(t.children))for(let n=0;n<t.children.length;n++)If(t.children[n],e)}}function LO(t,e){const r=t.split(".");let n=e;for(const i of r){if(n===null||typeof n!="object"||Array.isArray(n))return{value:null,exists:!1};if(!(i in n))return{value:null,exists:!1};n=n[i]}return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?{value:n,exists:!0}:{value:String(n),exists:!0}}class V1{constructor(){this.initPromise=null,this.initialized=!1,this._preload()}_preload(){return this.initPromise?this.initPromise:(this.initPromise=Promise.all([Lf(),G3()]).then(()=>{this.initialized=!0,console.log("WidgetHelper: Workers 预加载完成")}).catch(e=>{console.warn("WidgetHelper: Workers 预加载失败:",e.message)}),this.initPromise)}async waitForReady(){this.initPromise&&await this.initPromise}isReady(){return this.initialized}async getTemplate(e){try{return""}catch(r){return console.warn("getTemplate 执行出错:",r.message),""}}async getPreview({view:e,schema:r,defaultState:n}){try{if(await this.waitForReady(),n!=null&&n!==""){const s=typeof n=="string"?JSON.parse(n):n;if(typeof s!="object"||s===null)throw new Error("defaultState 必须是一个有效的 JSON 对象")}const{keyMap:i}=await z1(r);return await(await Lf()).parse({view:e,state:JSON.parse(n),keyMap:i})}catch(i){return console.warn("getPreview 执行出错:",i.message),""}}async getJsonSchema(e){try{await this.waitForReady();const{jsonSchema:r}=await z1(e);return r}catch(r){return console.warn("getJsonSchema 执行出错:",r.message),""}}genarateSnapshot(...e){return MO(...e)}decodeWidget(e){try{return JSON.parse(Buffer.from(e,"base64").toString()||"")}catch{return""}}}function IO(){return new V1}function PO(t){try{return jsxToJinja(t)}catch(e){return console.warn("getTemplate 执行出错:",e.message),""}}async function RO({view:t,schema:e,defaultState:r}){try{if(r!=null&&r!==""){const o=typeof r=="string"?JSON.parse(r):r;if(typeof o!="object"||o===null)throw new Error("defaultState 必须是一个有效的 JSON 对象")}const{keyMap:n}=await z1(e);return await(await Lf()).parse({view:t,state:JSON.parse(r),keyMap:n})}catch(n){return console.warn("getPreview 执行出错:",n.message),""}}async function NO(t){try{const{jsonSchema:e}=await z1(t);return e}catch(e){return console.warn("getJsonSchema 执行出错:",e.message),""}}const OO={data(){return{_widgetHelper:null}},created(){this._widgetHelper=new V1,this._widgetInstancesMap={},this._audioInstancesMap={},this._classifyTagInstancesMap={},this._planConfirmInstancesMap={},this._audioStateCache={}},methods:{_scaleWidgetIfNeeded(t,e){const r=this.widgetList&&this.widgetList.find(s=>s.widget_run_id===e),n=r&&r.scale,i=this._widgetInstancesMap[e],a=i&&i.instance&&i.instance.$el;if(!a)return;if(!n){t.style.width="",t.style.height="",a.style.transform="",a.style.transformOrigin="";return}let o;if(typeof n=="number")o=n;else if(n===!0){const s=this.$refs.containerRef&&(this.$refs.containerRef.$el||this.$refs.containerRef);if(!s)return;const u=s.clientWidth,l=a.style.transform;a.style.transform="";const c=a.scrollWidth||a.offsetWidth;if(a.style.transform=l,u<=0||c<=u){t.style.width="",t.style.height="",a.style.transform="",a.style.transformOrigin="";return}o=u/c}if(o&&o>0){a.style.transform="";const s=a.scrollWidth||a.offsetWidth,u=a.scrollHeight||a.offsetHeight;t.style.width=`${s*o}px`,t.style.height=`${u*o}px`,a.style.transform=`scale(${o})`,a.style.transformOrigin="top left"}},async _mountWidgets(t){if(!this.showWidget)return;const e=t.querySelectorAll(".widget-container");for(const r of e){if(r._widgetMounted||r._widgetMounting)continue;r._widgetMounting=!0;const n=r.getAttribute("data-widget-run-id"),i=r.getAttribute("data-widget-id"),a=r.getAttribute("data-widget-view"),o=r.getAttribute("data-widget-encoded-widget"),s=r.getAttribute("data-widget-state"),u=r.getAttribute("data-widget-payload"),l=r.getAttribute("data-widget-disable")==="true";if(!a&&!o){r._widgetMounting=!1;continue}const c=s?decodeURIComponent(escape(atob(s))):"",f=u?decodeURIComponent(escape(atob(u))):"",h=a?decodeURIComponent(escape(atob(a))):"";let d="";if(h)d=h;else try{const{view:b,schema:x}=this._widgetHelper.decodeWidget(o);d=await this._widgetHelper.getPreview({view:b,schema:x,defaultState:c}),d=JSON.stringify(d),f&&(d=this._widgetHelper.genarateSnapshot(d,f))}catch(b){console.error("[MsgContent] decodeWidget error",b),r._widgetMounting=!1;continue}const p=Vr.extend(N3),v=new p({propsData:{output:d,disable:l,locale:this.locale}});v.$on("widget-action",b=>this.$emit("widget-action",b,n,i)),v.$on("widget-event",b=>this.$emit("widget-event",b,n,i)),v.$on("widget-rendered",b=>{this.$emit("widget-rendered",b,n,i),this.$nextTick(()=>this._scaleWidgetIfNeeded(r,n))}),v.$mount(),r.appendChild(v.$el),r._widgetMounted=!0,r._widgetMounting=!1;const g=r.getAttribute("data-widget-view")||"",m=r.getAttribute("data-widget-payload")||"",y=r.getAttribute("data-widget-state")||"",_=r.getAttribute("data-widget-encoded-widget")||"";this._widgetInstancesMap[n]={instance:v,container:r,_lastDataKey:`${g}|${m}|${y}|${_}`}}},_mountAudioPlayers(t){if(!this.audioList||this.audioList.length===0)return;t.querySelectorAll(".audio-stream-container").forEach(r=>{const n=r.getAttribute("data-audio-symbol-id");if(this._audioInstancesMap[n]){r.children.length===0&&r.appendChild(this._audioInstancesMap[n].instance.$el);return}if(r.children.length>0)return;const i=this.audioList&&this.audioList.find(a=>a.audioSymbolId===n);if(i)try{const a=Vr.extend(F3),o=new a({propsData:{audioData:i}});o.$on("play",s=>this.$emit("audio-play",s,n)),o.$on("pause",s=>this.$emit("audio-pause",s,n)),o.$on("end",s=>this.$emit("audio-end",s,n)),o.$on("audio-download",s=>this.$emit("audio-download",s,n)),o.$on("chunk-added",s=>this.$emit("audio-chunk-added",s,n)),o.$on("error",s=>this.$emit("audio-error",s,n)),o.$mount(),r.appendChild(o.$el),this._audioInstancesMap[n]={instance:o,container:r}}catch(a){console.error("[MsgContent] 创建音频播放器失败:",a)}})},_mountClassifyTags(t){if(!this.showClassifyTag)return;t.querySelectorAll(".classify-tag-container").forEach((r,n)=>{if(r._classifyTagMounted)return;const i=r.getAttribute("data-classify-tag");if(i)try{const a=decodeURIComponent(escape(atob(i))),o=JSON.parse(a),s=Vr.extend(N1),u=new s({propsData:{title:o.title||"",questions:o.questions||[],disabled:!1,locale:this.locale}});u.$on("submit",l=>this.$emit("classify-tag-submit",l,o)),u.$on("skip",()=>this.$emit("classify-tag-skip",o)),u.$mount(),r.appendChild(u.$el),r._classifyTagMounted=!0,this._classifyTagInstancesMap[n]={instance:u,container:r}}catch(a){console.error("[MsgContent] ClassifyTag mount error:",a)}})},_mountPlanConfirms(t){if(!this.showPlanConfirm)return;t.querySelectorAll(".plan-confirm-container").forEach((r,n)=>{if(r._planConfirmMounted)return;const i=r.getAttribute("data-plan-confirm");if(i)try{const a=decodeURIComponent(escape(atob(i))),o=JSON.parse(a),s=Vr.extend(SO),u=new s({propsData:{title:o.title||"计划确认",planText:o.planText||"",disabled:!1}});u.$on("confirm",l=>this.$emit("plan-confirm",l,o)),u.$on("skip",l=>this.$emit("plan-skip",l,o)),u.$mount(),r.appendChild(u.$el),r._planConfirmMounted=!0,this._planConfirmInstancesMap[n]={instance:u,container:r}}catch(a){console.error("[MsgContent] PlanConfirm mount error:",a)}})},_mountAll(t){this.$nextTick(()=>{this._mountWidgets(t),this._mountAudioPlayers(t),this._mountClassifyTags(t),this._mountPlanConfirms(t)})},async _updateWidgets(t){if(!t)return;const e=this.$refs.containerRef,r=e&&(e.$el||e);if(!r)return;await this.$nextTick();const n=r.querySelectorAll(".widget-container");for(const i of n){const a=i.getAttribute("data-widget-run-id"),o=this._widgetInstancesMap[a];if(!a||!o)continue;const s=i.getAttribute("data-widget-view")||"",u=i.getAttribute("data-widget-payload")||"",l=i.getAttribute("data-widget-state")||"",c=i.getAttribute("data-widget-encoded-widget")||"",f=i.getAttribute("data-widget-disable")==="true",h=`${s}|${u}|${l}|${c}`;if(o._lastDataKey!==h){o._lastDataKey=h;const d=s?decodeURIComponent(escape(atob(s))):"",p=u?decodeURIComponent(escape(atob(u))):"";let v="";if(d)v=d;else if(c){const g=l?decodeURIComponent(escape(atob(l))):"";try{const{view:m,schema:y}=this._widgetHelper.decodeWidget(c);v=await this._widgetHelper.getPreview({view:m,schema:y,defaultState:g}),v=JSON.stringify(v),p&&(v=this._widgetHelper.genarateSnapshot(v,p))}catch{}}o.instance&&(o.instance.output=v)}o.instance&&(o.instance.disable=f),this._scaleWidgetIfNeeded(i,a)}},_updateAudioPlayers(t){t&&Object.keys(this._audioInstancesMap).forEach(e=>{const r=this._audioInstancesMap[e];if(!r||!r.instance)return;const n=t.find(s=>s.audioSymbolId===e);if(!n)return;const i=n.audio_data&&n.audio_data.length||0,a=!!n.isComplete,o=this._audioStateCache[e]||{length:0,isComplete:!1};(i!==o.length||a!==o.isComplete)&&(this._audioStateCache[e]={length:i,isComplete:a},r.instance.audioData=n)})},_destroyAllEmbedded(){Object.keys(this._widgetInstancesMap).forEach(t=>{try{this._widgetInstancesMap[t].instance.$destroy()}catch{}delete this._widgetInstancesMap[t]}),Object.keys(this._audioInstancesMap).forEach(t=>{try{this._audioInstancesMap[t].instance.$destroy()}catch{}delete this._audioInstancesMap[t]}),Object.keys(this._classifyTagInstancesMap).forEach(t=>{try{this._classifyTagInstancesMap[t].instance.$destroy()}catch{}delete this._classifyTagInstancesMap[t]}),Object.keys(this._planConfirmInstancesMap).forEach(t=>{try{this._planConfirmInstancesMap[t].instance.$destroy()}catch{}delete this._planConfirmInstancesMap[t]}),this._audioStateCache={}}},beforeDestroy(){this._destroyAllEmbedded()}},BO={methods:{_postrender(t){let e=t.replace(/&gt;/g,">").replace(/&lt;/g,"<").replace("CURSOR_POINT",'<span class="cursor"></span>');const r=document.createElement("div");return r.innerHTML=e,r.querySelectorAll("img").forEach(n=>{const i=P3(n.src,"size"),a=i&&i.split("|")||[];let o,s;if(a[1]){const u=a[1].split("*");o=u[0],u[1]&&(s=u[0]/u[1])}a[0]&&(a[0]==="min"&&(!o||o<24)?o=this.imgMinWidth||"24":a[0]==="mid"&&o>320?o=this.imgMaxWidth||"320":a[0]==="max"&&(o=this.imgMaxWidth||"320")),o&&(n.style.width=o===this.imgMaxWidth||o===this.imgMinWidth?o:`${o}px`),s&&(n.style.height=`${o/s}px`)}),r.querySelectorAll("pre code:not(.language-mermaid)").forEach((n,i,a)=>{if(Array.from(n.classList).some(s=>s.startsWith("language-"))?this.incremental||Ef(n):n.classList.add("hljs"),this.isFinal){this.incremental||I3(n);const s=n.parentNode.querySelector(".cursor");s&&s.remove()}else if(this.isPrintAnimate&&!r.querySelector(".cursor")&&i===a.length-1&&!this.isFinal&&n.parentElement===r.lastElementChild){const s=document.createElement("span");s.className="cursor",n.append(s)}if(!this.incremental&&!n.parentNode.querySelector(".code-language-label")&&n.result&&n.result.language){const s=document.createElement("div");s.className="code-language-label",this.codeHeaderRender?s.innerHTML=this.codeHeaderRender(n.result.language,this.content,i):s.textContent=n.result.language,n.parentNode.insertBefore(s,n)}}),n3(r),this.$emit("postrender",this.currentIndex,this.$refs.containerRef&&(this.$refs.containerRef.$el||this.$refs.containerRef),this.recordId),r.innerHTML.replace(/-->/g,"-->")},_onImageClick(t){this.$emit("imageClick",t)},_onDownloadCardClick(t,e){this.$emit("downloadCardClick",t,e)},_onMDRendered(t){t&&(this.incremental&&t.querySelectorAll("pre code:not(.language-mermaid)").forEach((e,r,n)=>{if(Array.from(e.classList).some(a=>a.startsWith("language-"))&&!e._highlighted&&(r===n.length-1&&!this.isFinal?Ef(e):(Ef(e),e._highlighted=!0)),this.isFinal&&!e._lineNumbered&&(I3(e),e._lineNumbered=!0),!e.parentNode.querySelector(".code-language-label")&&e.result&&e.result.language){const a=document.createElement("div");a.className="code-language-label",this.codeHeaderRender?a.innerHTML=this.codeHeaderRender(e.result.language,this.content,r):a.textContent=e.result.language,e.parentNode.insertBefore(a,e)}}),this.isFinal?(this.incremental?t.querySelectorAll(".question-text img, .answer-md img").forEach(e=>{e._imgClickBound||(e.addEventListener("click",this._onImageClick),e._imgClickBound=!0)}):(t.querySelectorAll(".question-text img").forEach(e=>{e.removeEventListener("click",this._onImageClick),e.addEventListener("click",this._onImageClick)}),t.querySelectorAll(".answer-md img").forEach(e=>{e.removeEventListener("click",this._onImageClick),e.addEventListener("click",this._onImageClick)})),t.querySelectorAll(`.${this.clazzMd||"answer-md"} a`).forEach(e=>{e.setAttribute("target","_blank")}),t.querySelectorAll(".video-placeholder").forEach(e=>e.remove()),t.querySelectorAll("video").forEach(e=>{e.style.display="block"})):t.querySelectorAll(".video-placeholder").forEach(e=>{this.incremental&&e._videoPlaceholderSet||(e.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" style="animation: video-placeholder-spin 1s linear infinite; flex-shrink: 0;"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.36131 2.32604C0.902925 3.77517 0 5.78264 0 8.00101C0 12.4193 3.58172 16.001 8 16.001C12.4183 16.001 16 12.4193 16 8.00101C16 3.58326 12.4191 0.00187492 8.00161 0.00100708L8.85183 1.6572C11.9837 2.07373 14.4 4.7552 14.4 8.00101C14.4 11.5356 11.5346 14.401 8 14.401C4.46538 14.401 1.6 11.5356 1.6 8.00101C1.6 6.40633 2.18324 4.94787 3.14803 3.82731L2.36131 2.32604Z" fill="currentColor"/></svg>视频加载中...',this.incremental&&(e._videoPlaceholderSet=!0))}),this.showTags&&t.querySelectorAll(".tags-container").forEach(e=>{this.incremental&&e._tagClickBound||(this.incremental?(e.addEventListener("click",()=>this.$emit("littleTagClick",e,this.recordId)),e._tagClickBound=!0):(e.removeEventListener("click",this._tagClickHandler),e.addEventListener("click",()=>this.$emit("littleTagClick",e,this.recordId))))}),this.showDownloadCard&&t.querySelectorAll(".download-card").forEach(e=>{this.incremental&&e._downloadClickBound||(e.addEventListener("click",r=>{const n=r.currentTarget.getAttribute("data-file-id");this._onDownloadCardClick(n,r);try{r&&r.preventDefault&&r.preventDefault()}catch{}}),this.incremental&&(e._downloadClickBound=!0))}),this.isMermaidRenderAfterOutput?this.isFinal&&setTimeout(()=>{D1.onMermaidLoaded(()=>{D1.renderAll(t)})},0):setTimeout(()=>{D1.onMermaidLoaded(()=>{D1.renderAll(t)})},0),this._mountAll(t))}}},_le="",FO={name:"MsgContent",components:{MDRender:EP},mixins:[YN,OO,BO],props:{showDownloadCard:{type:Boolean,default:!1},showTags:{type:Boolean,default:!1},fullFiles:{type:Array,default:()=>[]},recordId:String,content:{type:String,default:""},isFinal:{type:Boolean,default:!1},loadingMessage:{type:Boolean,default:!1},isMdExpand:{type:[Boolean,void 0],default:void 0},isReplaceLinks:{type:Boolean,default:!1},isPrintAnimate:{type:Boolean,default:!1},styleObj:Object,clazzTable:String,clazzMd:String,anchorAttributes:Object,linkify:{type:Boolean,default:!1},imgMinWidth:[Number,String],imgMaxWidth:[Number,String],printCount:Number,printCountTime:Number,hideCursorPoint:Boolean,chartDataArr:Array,codeHeaderRender:Function,replaceLinksWhitelist:Array,isMermaidRenderAfterOutput:{type:Boolean,default:!1},showWidget:{type:Boolean,default:!1},widgetList:{type:Array,default:()=>[]},audioList:{type:Array,default:()=>[]},locale:{type:String,default:"zh-CN"},incremental:{type:Boolean,default:!0},showClassifyTag:{type:Boolean,default:!1},showPlanConfirm:{type:Boolean,default:!1}},data(){return{currentText:"",renderText:""}},computed:{processOptions(){return{isReplaceLinks:this.isReplaceLinks,replaceLinksWhitelist:this.replaceLinksWhitelist,isFinal:this.isFinal,showTags:this.showTags,showDownloadCard:this.showDownloadCard,fullFiles:this.fullFiles,showWidget:this.showWidget,widgetList:this.widgetList,audioList:this.audioList,showClassifyTag:this.showClassifyTag,showPlanConfirm:this.showPlanConfirm}}},watch:{content(t){this.clearTimer(),this.currentIndex=this.currentText.length,this.currentText=this._getProcessedContent(t),this.isPrintAnimate?this._startPrint():this.renderText=this.currentText},isFinal(t){t&&this.content&&(this.clearTimer(),this.currentText=this._getProcessedContent(this.content),this.renderText=this.currentText,this.currentIndex=this.currentText.length)},isMdExpand(t){t?this.currentText=kf(this.content,this.processOptions):this.currentText=kf((this.content||"").substr(0,3e3),this.processOptions),this.renderText=this.currentText,this.clearTimer(),this.currentIndex=this.currentText.length},widgetList:{handler(t){this._updateWidgets(t)},deep:!0},audioList:{handler(t){this._updateAudioPlayers(t)},deep:!0}},created(){this._init()},mounted(){vN()},beforeDestroy(){this.clearTimer(),this._destroyAllEmbedded()},methods:{_getProcessedContent(t){if(!t)return"";const e=this.isMdExpand===void 0||this.isMdExpand?1e6:1e4;return kf(t.substr(0,e),this.processOptions)},_startPrint(){this.startCurrentTimer({printCount:this.printCount||1,printCountTime:this.printCountTime||16,hideCursorPoint:this.hideCursorPoint,isFinal:this.isFinal})},_init(){const t=this._getProcessedContent(this.content||"");this.currentText=t,!this.isPrintAnimate||this.isFinal?(this.renderText=t,this.currentIndex=t.length,this.clearTimer()):this._startPrint()}}};var zO=function(){var e=this,r=e._self._c;return r("MDRender",{ref:"containerRef",class:e.clazzMd||"answer-md",style:e.styleObj,attrs:{highlight:!0,"table-class":e.clazzTable||(e.isFinal?"table-style":"table"),source:e.renderText,"anchor-attributes":e.anchorAttributes||{target:"_blank"},linkify:e.linkify,incremental:e.incremental,postrender:e._postrender},on:{rendered:e._onMDRendered}})},VO=[],$O=ur(FO,zO,VO,!1,null,null,null,null);const H3=$O.exports,Pf=nn(H3),ble="",GO={name:"MsgThought",components:{VIcon:P1},props:{titleRender:{type:[Object,Function],default:null},isMobile:Boolean,content:String,title:String,titleIcon:String,nodeName:String,status:String,elapsed:{type:Number,default:0},detailVisible:{type:Boolean,default:!0}},data(){return{THOUGHT_STATUS:fP,innerDetailVisible:this.detailVisible,renderedContent:"",xssHandler:new In.FilterXSS(cP)}},computed:{elapsedSeconds(){return this.elapsed?(this.elapsed/1e3).toFixed(1):0}},watch:{content:{immediate:!0,handler(t){const e=(t||"").replace(/^\n+/,"").replace(/\n/g,"<br>");this.renderedContent=this.xssHandler.process(e)}},detailVisible(t){this.innerDetailVisible=t}},methods:{onTitleClick(){const t=!this.innerDetailVisible;this.innerDetailVisible=t,this.$emit("update:detailVisible",t)}}};var HO=function(){var e=this,r=e._self._c;return r("div",{staticClass:"thought-clps-content"},[e.titleRender?r(e.titleRender,{tag:"component"}):e._e(),e.titleRender?e._e():r("div",{staticClass:"thought-title",on:{click:e.onTitleClick}},[r("div",{staticClass:"thought-title-container"},[r("img",{staticClass:"thought-title-icon",attrs:{src:e.titleIcon}}),r("span",{staticClass:"thought-title-name"},[e._v(" "+e._s(e.title)+" "),e.nodeName?r("span",{staticClass:"thought-clps-modellabel"},[e._v(" -"+e._s(e.nodeName)+" ")]):e._e()]),e.status===e.THOUGHT_STATUS.failed?r("v-icon",{style:{color:"#FF8345"},attrs:{name:"basic_warning_line",size:"16"}}):e._e(),e.status===e.THOUGHT_STATUS.success?r("v-icon",{style:{color:"#0FB87F"},attrs:{name:"basic_finish_line",size:"16"}}):e._e(),e.status===e.THOUGHT_STATUS.stop?r("v-icon",{style:{color:"rgba(1,11,50,0.41)"},attrs:{name:"basic_stop_line",size:"16"}}):e._e()],1),r("div",{staticClass:"thought-title-container thought-title-elapsed"},[r("span",[e._v(e._s(e.elapsedSeconds)+"s")]),r("v-icon",{staticClass:"thought__header__icon",attrs:{name:"arrow_down_small_line",rotate:e.innerDetailVisible?180:0,size:"12"}})],1)]),e.innerDetailVisible?r("div",{staticClass:"thought-detail"},[r("div",{staticClass:"question-text",class:{"question-text-mobile":e.isMobile},domProps:{innerHTML:e._s(e.renderedContent)}})]):e._e()],1)},UO=[],WO=ur(GO,HO,UO,!1,null,"60c16159",null,null);const qO=WO.exports,Rf=nn(qO);/*! *****************************************************************************
|
|
50
50
|
Copyright (c) Microsoft Corporation.
|
|
51
51
|
|
|
52
52
|
Permission to use, copy, modify, and/or distribute this software for any
|
package/dist/style.css
CHANGED
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
Website: https://highlightjs.org/
|
|
7
7
|
License: see project LICENSE
|
|
8
8
|
Touched: 2021
|
|
9
|
-
*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:700}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#800}.hljs-title,.hljs-section{color:#800;font-weight:700}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.lke__widget-container[data-v-c152fdb4]{width:fit-content;background-color:transparent}.stream-audio-player-card[data-v-c74077bd]{position:relative;display:flex;width:100%;max-width:var(--bubble-max-width-structured-msg, 300px);padding:10px 16px;flex-direction:column;gap:8px;border-radius:var(--bubble---c-bubble-radius, 6px);background:var(--components-bubble---bubble-structured-bg-normal, #fff);box-shadow:0 2px 12px #12131a0f,0 0 6px #12131a05,0 0 1px #12131a14;box-shadow:0 2px 12px 0 color(display-p3 .0706 .0745 .098 / .06),0 0 6px 0 color(display-p3 .0706 .0745 .098 / .02),0 0 1px 0 color(display-p3 .0706 .0745 .098 / .08)}.stream-audio-player-card.disabled[data-v-c74077bd]{opacity:.6}.audio-content[data-v-c74077bd]{display:flex;flex-direction:row;align-items:center;gap:8px}.audio-icon[data-v-c74077bd]{display:flex;width:46px;height:46px;padding:3.333px 5px;justify-content:center;align-items:center}.file-info[data-v-c74077bd]{flex:1;min-width:0}.file-name[data-v-c74077bd]{overflow:hidden;color:#00010ced;text-overflow:ellipsis;white-space:nowrap;font-family:PingFang SC;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.file-status[data-v-c74077bd]{color:#000b3669;font-family:PingFang SC;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.status-text.disabled[data-v-c74077bd]{color:#000b3640}.audio-controls[data-v-c74077bd]{display:flex;align-items:center;gap:8px;margin-left:auto}.control-btn[data-v-c74077bd]{display:flex;padding:8px;justify-content:center;align-items:center;border:0;outline:0;background:transparent;cursor:pointer;color:#00010aed}.control-btn .v-icon[data-v-c74077bd]{fill:currentColor}.control-btn[data-v-c74077bd]:disabled{color:#06154233;cursor:not-allowed}.progress-container[data-v-c74077bd]{width:100%;padding:0}.progress-track[data-v-c74077bd]{position:relative;width:100%;height:3px;border-radius:9999px;background:rgba(18,42,79,.08);cursor:pointer}.stream-audio-player-card.disabled .progress-track[data-v-c74077bd]{cursor:not-allowed}.progress-played[data-v-c74077bd]{position:absolute;top:0;left:0;height:100%;border-radius:9999px;background:rgba(180,184,196,1);pointer-events:none;transition:width .1s linear}.progress-played.no-transition[data-v-c74077bd]{transition:none}.progress-handle[data-v-c74077bd]{position:absolute;top:50%;width:8px;height:8px;aspect-ratio:1/1;border-radius:50%;background:#b3b8c5;background:color(display-p3 .7059 .7216 .7686);transform:translate(-50%,-50%);cursor:grab;transition:left .1s linear,transform .1s ease}.progress-handle.no-transition[data-v-c74077bd]{transition:transform .1s ease}.progress-handle[data-v-c74077bd]:active{cursor:grabbing;transform:translate(-50%,-50%) scale(1.2)}@keyframes pulse-c74077bd{0%,to{opacity:1}50%{opacity:.5}}.classify-tag[data-v-0e944fef]{border:1px solid rgba(18,42,79,.08);border-radius:6px;background:#fff;overflow:hidden;font-family:PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;margin:8px 0}.classify-tag__header[data-v-0e944fef]{display:flex;align-items:center;padding:8px 12px;background:#f7f8fa;border-bottom:1px solid rgba(18,42,79,.08);cursor:pointer;-webkit-user-select:none;user-select:none;gap:8px}.classify-tag--collapsed .classify-tag__header[data-v-0e944fef]{border-bottom:none}.classify-tag__icon[data-v-0e944fef]{flex-shrink:0;width:16px;height:16px}.classify-tag__title[data-v-0e944fef]{flex:1;font-size:12px;font-weight:400;color:#030a26a6;line-height:16px;font-family:Monaco,monospace}.classify-tag__arrow[data-v-0e944fef]{flex-shrink:0;width:16px;height:16px;color:#010b3269;transition:transform .2s ease}.classify-tag__arrow--up[data-v-0e944fef]{transform:rotate(180deg)}.classify-tag__content[data-v-0e944fef]{padding:12px;display:flex;flex-direction:column;gap:16px;border-top:1px solid rgba(18,42,79,.08)}.classify-tag__question-group[data-v-0e944fef]{display:flex;flex-direction:column;gap:8px}.classify-tag__question-text[data-v-0e944fef]{font-size:12px;font-weight:400;color:#00010aed;line-height:24px}.classify-tag__multi-hint[data-v-0e944fef]{font-size:11px;color:#4a70ff;font-weight:400}.classify-tag__options[data-v-0e944fef]{display:flex;flex-direction:column;gap:12px}.classify-tag__radio[data-v-0e944fef]{display:flex;align-items:flex-start;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;min-height:20px}.classify-tag__radio-circle[data-v-0e944fef]{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;border:1px solid rgba(18,42,79,.2);background:#fff;flex-shrink:0;transition:border-color .2s ease;margin-top:2px}.classify-tag__radio--checked .classify-tag__radio-circle[data-v-0e944fef]{border-color:#4a70ff}.classify-tag__radio-dot[data-v-0e944fef]{width:8px;height:8px;border-radius:50%;background:#4A70FF}.classify-tag__radio-content[data-v-0e944fef]{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.classify-tag__radio-label[data-v-0e944fef]{font-size:12px;font-weight:400;color:#00010aed;line-height:20px}.classify-tag__radio-desc[data-v-0e944fef]{font-size:11px;font-weight:400;color:#00010a73;line-height:16px}.classify-tag__radio:hover .classify-tag__radio-circle[data-v-0e944fef]{border-color:#4a70ff}.classify-tag__checkbox[data-v-0e944fef]{display:flex;align-items:flex-start;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;min-height:20px}.classify-tag__checkbox-box[data-v-0e944fef]{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;border:1px solid rgba(18,42,79,.2);background:#fff;flex-shrink:0;transition:all .2s ease;margin-top:2px}.classify-tag__checkbox--checked .classify-tag__checkbox-box[data-v-0e944fef]{border-color:#4a70ff;background:#4A70FF}.classify-tag__checkbox-tick[data-v-0e944fef]{display:block}.classify-tag__checkbox:hover .classify-tag__checkbox-box[data-v-0e944fef]{border-color:#4a70ff}.classify-tag__footer[data-v-0e944fef]{position:relative;padding:16px}.classify-tag__footer-divider[data-v-0e944fef]{position:absolute;top:0;left:0;right:0;height:1px;background:rgba(18,42,79,.08)}.classify-tag__footer-actions[data-v-0e944fef]{display:flex;justify-content:flex-end;align-items:center;gap:8px}.classify-tag__btn[data-v-0e944fef]{display:inline-flex;align-items:center;justify-content:center;padding:6px 16px;border-radius:3px;font-size:13px;font-weight:400;line-height:20px;cursor:pointer;border:none;outline:none;transition:all .2s ease;font-family:PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.classify-tag__btn--primary[data-v-0e944fef]{background:rgba(54,79,129,.04);color:#364f8173;border:1px solid rgba(18,42,79,.08)}.classify-tag__btn--primary[data-v-0e944fef]:not(:disabled){background:#4A70FF;color:#fff;border-color:#4a70ff}.classify-tag__btn--primary[data-v-0e944fef]:not(:disabled):hover{background:#3B5DE0;border-color:#3b5de0}.classify-tag__btn--primary[data-v-0e944fef]:disabled{cursor:not-allowed}.classify-tag__btn--secondary[data-v-0e944fef]{background:#fff;color:#00010aed;border:1px solid rgba(17,32,70,.13)}.classify-tag__btn--secondary[data-v-0e944fef]:hover{background:#f5f6f8}.plan-confirm[data-v-99c3033c]{border:1px solid rgba(18,42,79,.08);border-radius:6px;background:#fff;overflow:hidden;font-family:PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;margin:8px 0}.plan-confirm__header[data-v-99c3033c]{display:flex;align-items:center;padding:8px 12px;background:#f7f8fa;border-bottom:1px solid rgba(18,42,79,.08);cursor:pointer;-webkit-user-select:none;user-select:none;gap:8px}.plan-confirm--collapsed .plan-confirm__header[data-v-99c3033c]{border-bottom:none}.plan-confirm__icon[data-v-99c3033c]{flex-shrink:0;width:16px;height:16px}.plan-confirm__title[data-v-99c3033c]{flex:1;font-size:12px;font-weight:400;color:#030a26a6;line-height:16px;font-family:Monaco,monospace}.plan-confirm__arrow[data-v-99c3033c]{flex-shrink:0;width:16px;height:16px;color:#010b3269;transition:transform .2s ease}.plan-confirm__arrow--up[data-v-99c3033c]{transform:rotate(180deg)}.plan-confirm__content[data-v-99c3033c]{padding:12px;border-top:1px solid rgba(18,42,79,.08)}.plan-confirm__text[data-v-99c3033c]{font-size:12px;font-weight:400;color:#00010aed;line-height:24px;white-space:pre-wrap;word-break:break-word}.plan-confirm__footer[data-v-99c3033c]{position:relative;padding:16px}.plan-confirm__footer-divider[data-v-99c3033c]{position:absolute;top:0;left:0;right:0;height:1px;background:rgba(18,42,79,.08)}.plan-confirm__footer-actions[data-v-99c3033c]{display:flex;justify-content:flex-end;align-items:center;gap:8px}.plan-confirm__btn[data-v-99c3033c]{display:inline-flex;align-items:center;justify-content:center;padding:6px 16px;border-radius:3px;font-size:13px;font-weight:400;line-height:20px;cursor:pointer;border:none;outline:none;transition:all .2s ease;font-family:PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.plan-confirm__btn--primary[data-v-99c3033c]{background:#4A70FF;color:#fff;border:1px solid #4A70FF}.plan-confirm__btn--primary[data-v-99c3033c]:not(:disabled):hover{background:#3B5DE0;border-color:#3b5de0}.plan-confirm__btn--primary[data-v-99c3033c]:disabled{background:rgba(54,79,129,.04);color:#364f8173;border:1px solid rgba(18,42,79,.08);cursor:not-allowed}.plan-confirm__btn--secondary[data-v-99c3033c]{background:#fff;color:#00010aed;border:1px solid rgba(17,32,70,.13)}.plan-confirm__btn--secondary[data-v-99c3033c]:not(:disabled):hover{background:#f5f6f8}.plan-confirm__btn--secondary[data-v-99c3033c]:disabled{color:#00010a73;cursor:not-allowed}.cursor{display:inline-block;width:2px;height:17px;vertical-align:text-bottom;background-color:#000;animation:blink 1s infinite}@keyframes blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}mjx-container mjx-math{display:block;white-space:normal;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}mjx-container{display:inline-block}mjx-assistive-mml{right:0;bottom:0}@keyframes video-placeholder-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.video-placeholder{display:flex;align-items:center;gap:6px;padding:6px 12px;color:#010b3269;font-size:14px}.answer-md{word-break:break-word;word-wrap:break-word}.answer-md video{display:none}.answer-md .code-language-label{position:absolute;top:0;right:0;background:#f0f0f0;color:#333;padding:2px 8px;font-size:12px;border-bottom-left-radius:4px}.answer-md .hljs{color:#121319;background:#ffffff}.answer-md .hljs-comment,.answer-md .hljs-quote{color:#979baa;font-style:italic}.answer-md .hljs-doctag,.answer-md .hljs-keyword,.answer-md .hljs-formula{color:#4a70ff}.answer-md .hljs-section,.answer-md .hljs-name,.answer-md .hljs-selector-tag,.answer-md .hljs-deletion,.answer-md .hljs-subst{color:#ff8345}.answer-md .hljs-literal{color:#1492ff}.answer-md .hljs-string,.answer-md .hljs-regexp,.answer-md .hljs-addition,.answer-md .hljs-attribute,.answer-md .hljs-meta .hljs-string{color:#0fb87f}.answer-md .hljs-attr,.answer-md .hljs-variable,.answer-md .hljs-template-variable,.answer-md .hljs-type,.answer-md .hljs-selector-class,.answer-md .hljs-selector-attr,.answer-md .hljs-selector-pseudo,.answer-md .hljs-number{color:#ffa436}.answer-md .hljs-symbol,.answer-md .hljs-bullet,.answer-md .hljs-link,.answer-md .hljs-meta,.answer-md .hljs-selector-id,.answer-md .hljs-title{color:#d20fd2}.answer-md .hljs-built_in,.answer-md .hljs-title.class_,.answer-md .hljs-class .hljs-title{color:#f7c51e}.answer-md .hljs-emphasis{font-style:italic}.answer-md .hljs-strong{font-weight:700}.answer-md .hljs-link{text-decoration:underline}.answer-md .hljs-ln{border-collapse:collapse}.answer-md .hljs-ln td{padding:0}.answer-md .hljs-ln td.hljs-ln-numbers{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:left;vertical-align:top;padding:0 10px;color:#abb2bf!important;white-space:nowrap;border-right:1px solid #c5c5c5!important}.answer-md .hljs-ln td.hljs-ln-code{padding-left:10px}.answer-md .hljs-ln-n:before{content:attr(data-line-number)}.answer-md pre{position:relative}.answer-md .table:not(.hljs-ln) ::-webkit-scrollbar-track{background:transparent}.answer-md .table:not(.hljs-ln) ::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(17,32,70,.13)}.answer-md blockquote{margin:8px 0;padding:4px 12px;border-left:4px solid rgba(1,11,50,.15);border-radius:0 4px 4px 0}.answer-md blockquote p{margin:0}.answer-md img{max-width:100%;cursor:pointer;border-radius:6px}.answer-md p{word-break:break-word;word-wrap:break-word}.answer-md ::marker{color:#010b3269}.answer-md h1{font-size:18px;padding-top:18px}.answer-md h2,.answer-md h3,.answer-md h4,.answer-md h5,.answer-md h6{font-size:16px}.answer-md code{white-space:break-spaces}.answer-md table:not(.hljs-ln){display:inline-block;overflow-x:scroll;background:white;border-spacing:0;border-collapse:collapse;border-bottom:1px solid rgba(18,42,79,.08);border-right:1px solid rgba(18,42,79,.08);max-width:100%}.answer-md table:not(.hljs-ln) th{background:#eaecef;color:#010b3269}.answer-md table:not(.hljs-ln) td,.answer-md table:not(.hljs-ln) th{border-left:1px solid rgba(18,42,79,.08);border-top:1px solid rgba(18,42,79,.08)}.answer-md table:not(.hljs-ln) td{padding:8px 12px;min-width:20px}.answer-md .table-style:not(.hljs-ln){display:block;max-width:100%;overflow-x:auto;background:white;border-spacing:0;border-collapse:collapse}.answer-md .table-style:not(.hljs-ln) th{color:#010b3269;padding:12px;font-weight:400;background:#eaecef;white-space:nowrap}.answer-md .table-style:not(.hljs-ln) td,.answer-md .table-style:not(.hljs-ln) th{border:1px solid rgba(18,42,79,.08)}.answer-md .table-style:not(.hljs-ln) td{padding:8px 4px;min-width:45px;overflow-wrap:break-word;white-space:break-spaces}.question-text[data-v-60c16159],.question-text-mobile[data-v-60c16159]{width:100%}.thought-clps-title[data-v-60c16159]{color:#010b3269;font-size:12px;font-style:normal;font-weight:400;line-height:16px;cursor:pointer;padding:12px 0 8px;display:flex;align-items:center;gap:4px}.thought-clps-content[data-v-60c16159]{display:flex;flex-direction:column;gap:12px;align-self:stretch}.thought-clps-content p[data-v-60c16159]{margin:0}.thought-clps-content .thought-title[data-v-60c16159]{display:flex;align-items:center;justify-content:space-between;cursor:pointer}.thought-clps-content .thought-title .thought-title-container[data-v-60c16159]{display:flex;align-items:center;gap:5px}.thought-clps-content .thought-title .thought-title-icon[data-v-60c16159]{display:flex;width:16px;height:16px;flex-direction:column;justify-content:center;border-radius:8px}.thought-clps-content .thought-title .thought-title-name[data-v-60c16159]{color:#00010aed;font-size:14px;font-style:normal;font-weight:600;line-height:normal}.thought-clps-content .thought-title .thought-title-elapsed[data-v-60c16159]{color:#010b3269;font-family:Monaco;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.thought-clps-content .thought-detail[data-v-60c16159]{display:flex;padding:12px 0;gap:10px;border-bottom:.5px solid rgba(18,42,79,.08);color:#030a26a6;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.thought-clps-content .thought-detail p[data-v-60c16159]{word-break:break-all;word-wrap:break-word;margin:0}.thought-clps-content .thought-detail.last-item[data-v-60c16159]{border-bottom:1.5px solid #cdd0d9}.call-info[data-v-e50f6d7c]{display:flex;margin-top:16px;margin-bottom:16px;padding:var(--spacing-quite-loose);align-items:flex-start;align-self:stretch;border:1px solid #DADEE7}.call-info .content[data-v-e50f6d7c]{display:flex;padding:var(--spacing-none);flex-direction:column;align-items:flex-start;flex:1 0 0}.call-info .content .title[data-v-e50f6d7c]{color:var(--text---color-text-primary);font-family:PingFang SC;font-size:14px;font-weight:400;line-height:20px}.call-info .content .number[data-v-e50f6d7c]{color:var(--text---color-text-primary);font-family:PingFang TC;font-size:36px;font-weight:500;line-height:normal}.loadingWithoutIcon[data-v-5c1bbe0d]{margin:1em 0;width:fit-content;display:flex;align-items:center}.loadingWithoutIcon[data-v-5c1bbe0d]:after{content:".";animation:ellipsis-5c1bbe0d 1.5s steps(1,end) infinite}.loading[data-v-5c1bbe0d]{margin:1em 0;width:fit-content;display:flex;align-items:center}.loading[data-v-5c1bbe0d]:after{content:".";animation:ellipsis-5c1bbe0d 1.5s steps(1,end) infinite}.loading[data-v-5c1bbe0d]:before{content:"";display:inline-block;height:22px;width:22px;margin-right:8px;background-image:var(--bgurl);background-repeat:no-repeat;background-size:contain}@keyframes ellipsis-5c1bbe0d{0%{content:"."}33%{content:".."}66%{content:"..."}to{content:"."}}.stream-audio-player-card[data-v-439cf304]{position:relative;display:flex;width:100%;max-width:var(--bubble-max-width-structured-msg, 380px);padding:10px 16px;flex-direction:column;gap:8px;border-radius:var(--bubble---c-bubble-radius, 6px);background:var(--components-bubble---bubble-structured-bg-normal, #FFF);box-shadow:0 2px 12px #12131a0f,0 0 6px #12131a05,0 0 1px #12131a14;box-shadow:0 2px 12px 0 color(display-p3 .0706 .0745 .098 / .06),0 0 6px 0 color(display-p3 .0706 .0745 .098 / .02),0 0 1px 0 color(display-p3 .0706 .0745 .098 / .08)}.audio-content[data-v-439cf304]{display:flex;flex-direction:row;align-items:center;gap:12px}.audio-icon[data-v-439cf304]{display:flex;width:46px;height:46px;padding:3.333px 5px;justify-content:center;align-items:center}.file-info[data-v-439cf304]{flex:1;min-width:0}.file-name[data-v-439cf304]{overflow:hidden;color:#00010ced;text-overflow:ellipsis;white-space:nowrap;font-family:PingFang SC;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.file-status[data-v-439cf304]{color:#000b3669;font-family:PingFang SC;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.audio-controls[data-v-439cf304]{display:flex;align-items:center;gap:8px;margin-left:auto}.control-btn[data-v-439cf304]{display:flex;padding:8px;justify-content:center;align-items:center;border:0;outline:0;background:transparent;cursor:pointer;color:#00010aed}.control-btn .v-icon[data-v-439cf304]{fill:currentColor}.control-btn[data-v-439cf304]:disabled{color:#06154233;cursor:not-allowed}.progress-container[data-v-439cf304]{width:100%;padding:0}.progress-track[data-v-439cf304]{position:relative;width:100%;height:3px;border-radius:9999px;background:rgba(18,42,79,.08);cursor:pointer}.progress-played[data-v-439cf304]{position:absolute;top:0;left:0;height:100%;border-radius:9999px;background:rgba(180,184,196,1);pointer-events:none;transition:width .1s linear}.progress-played.no-transition[data-v-439cf304]{transition:none}.progress-handle[data-v-439cf304]{position:absolute;top:50%;width:8px;height:8px;aspect-ratio:1/1;border-radius:50%;background:#B3B8C5;background:color(display-p3 .7059 .7216 .7686);transform:translate(-50%,-50%);cursor:grab;transition:left .1s linear,transform .1s ease}.progress-handle.no-transition[data-v-439cf304]{transition:transform .1s ease}.progress-handle[data-v-439cf304]:active{cursor:grabbing;transform:translate(-50%,-50%) scale(1.2)}@keyframes pulse-439cf304{0%,to{opacity:1}50%{opacity:.5}}.msg-task-list[data-v-258cd050]{margin:8px 0}.task-card[data-v-258cd050]{background:#FFFFFF;border-radius:16px;box-shadow:0 4px 16px #0000000f;overflow:hidden}.task-header[data-v-258cd050]{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .2s}.task-header[data-v-258cd050]:hover{background:rgba(0,0,0,.02)}.task-header-left[data-v-258cd050]{display:flex;align-items:center;gap:6px;min-width:0;flex:1;padding-left:20px}.header-icon[data-v-258cd050]{width:14px;height:14px;flex-shrink:0}.task-progress-text[data-v-258cd050]{font-family:Monaco,Courier New,monospace;font-size:12px;line-height:18px;color:#030a26a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-arrow[data-v-258cd050]{width:12px;height:12px;flex-shrink:0;margin-left:8px;transition:transform .25s cubic-bezier(.4,0,.2,1)}.header-arrow.expanded[data-v-258cd050]{transform:rotate(180deg)}.task-list-wrapper[data-v-258cd050]{padding:0 12px 12px}.task-list-divider[data-v-258cd050]{height:1px;background:rgba(18,42,79,.08);margin-bottom:12px}.task-list[data-v-258cd050]{display:flex;flex-direction:column;gap:8px;padding:0 20px}.task-item[data-v-258cd050]{display:flex;align-items:center;gap:8px;min-height:20px}.task-icon[data-v-258cd050]{width:14px;height:14px;flex-shrink:0;display:block}.task-name[data-v-258cd050]{font-family:Monaco,Courier New,monospace;font-size:12px;line-height:20px;color:#030a26a6}.task-completed .task-name[data-v-258cd050]{color:#030a2669}.task-stopped .task-name[data-v-258cd050]{color:#92400e}.icon-spinner[data-v-258cd050]{animation:spin-258cd050 1s linear infinite}@keyframes spin-258cd050{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
|
|
9
|
+
*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:700}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#800}.hljs-title,.hljs-section{color:#800;font-weight:700}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.lke__widget-container[data-v-c152fdb4]{width:fit-content;background-color:transparent}.stream-audio-player-card[data-v-c74077bd]{position:relative;display:flex;width:100%;max-width:var(--bubble-max-width-structured-msg, 300px);padding:10px 16px;flex-direction:column;gap:8px;border-radius:var(--bubble---c-bubble-radius, 6px);background:var(--components-bubble---bubble-structured-bg-normal, #fff);box-shadow:0 2px 12px #12131a0f,0 0 6px #12131a05,0 0 1px #12131a14;box-shadow:0 2px 12px 0 color(display-p3 .0706 .0745 .098 / .06),0 0 6px 0 color(display-p3 .0706 .0745 .098 / .02),0 0 1px 0 color(display-p3 .0706 .0745 .098 / .08)}.stream-audio-player-card.disabled[data-v-c74077bd]{opacity:.6}.audio-content[data-v-c74077bd]{display:flex;flex-direction:row;align-items:center;gap:8px}.audio-icon[data-v-c74077bd]{display:flex;width:46px;height:46px;padding:3.333px 5px;justify-content:center;align-items:center}.file-info[data-v-c74077bd]{flex:1;min-width:0}.file-name[data-v-c74077bd]{overflow:hidden;color:#00010ced;text-overflow:ellipsis;white-space:nowrap;font-family:PingFang SC;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.file-status[data-v-c74077bd]{color:#000b3669;font-family:PingFang SC;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.status-text.disabled[data-v-c74077bd]{color:#000b3640}.audio-controls[data-v-c74077bd]{display:flex;align-items:center;gap:8px;margin-left:auto}.control-btn[data-v-c74077bd]{display:flex;padding:8px;justify-content:center;align-items:center;border:0;outline:0;background:transparent;cursor:pointer;color:#00010aed}.control-btn .v-icon[data-v-c74077bd]{fill:currentColor}.control-btn[data-v-c74077bd]:disabled{color:#06154233;cursor:not-allowed}.progress-container[data-v-c74077bd]{width:100%;padding:0}.progress-track[data-v-c74077bd]{position:relative;width:100%;height:3px;border-radius:9999px;background:rgba(18,42,79,.08);cursor:pointer}.stream-audio-player-card.disabled .progress-track[data-v-c74077bd]{cursor:not-allowed}.progress-played[data-v-c74077bd]{position:absolute;top:0;left:0;height:100%;border-radius:9999px;background:rgba(180,184,196,1);pointer-events:none;transition:width .1s linear}.progress-played.no-transition[data-v-c74077bd]{transition:none}.progress-handle[data-v-c74077bd]{position:absolute;top:50%;width:8px;height:8px;aspect-ratio:1/1;border-radius:50%;background:#b3b8c5;background:color(display-p3 .7059 .7216 .7686);transform:translate(-50%,-50%);cursor:grab;transition:left .1s linear,transform .1s ease}.progress-handle.no-transition[data-v-c74077bd]{transition:transform .1s ease}.progress-handle[data-v-c74077bd]:active{cursor:grabbing;transform:translate(-50%,-50%) scale(1.2)}@keyframes pulse-c74077bd{0%,to{opacity:1}50%{opacity:.5}}.classify-tag[data-v-82dd6a75]{border:1px solid rgba(18,42,79,.08);border-radius:6px;background:#fff;overflow:hidden;font-family:PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;margin:8px 0}.classify-tag__header[data-v-82dd6a75]{display:flex;align-items:center;padding:8px 12px;background:#f7f8fa;cursor:pointer;-webkit-user-select:none;user-select:none;gap:8px}.classify-tag--collapsed .classify-tag__header[data-v-82dd6a75]{border-bottom:none}.classify-tag__icon[data-v-82dd6a75]{flex-shrink:0;width:16px;height:16px}.classify-tag__title[data-v-82dd6a75]{flex:1;font-size:12px;font-weight:400;color:#030a26a6;line-height:16px;font-family:Monaco,monospace}.classify-tag__arrow[data-v-82dd6a75]{flex-shrink:0;width:16px;height:16px;color:#010b3269;transition:transform .2s ease}.classify-tag__arrow--up[data-v-82dd6a75]{transform:rotate(180deg)}.classify-tag__content[data-v-82dd6a75]{padding:12px;display:flex;flex-direction:column;gap:16px;border-top:1px solid rgba(18,42,79,.08)}.classify-tag__question-group[data-v-82dd6a75]{display:flex;flex-direction:column;gap:8px}.classify-tag__question-text[data-v-82dd6a75]{font-size:12px;font-weight:400;color:#00010aed;line-height:24px}.classify-tag__multi-hint[data-v-82dd6a75]{font-size:11px;color:#4a70ff;font-weight:400}.classify-tag__options[data-v-82dd6a75]{display:flex;flex-direction:column;gap:12px}.classify-tag__radio[data-v-82dd6a75]{display:flex;align-items:flex-start;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;min-height:20px}.classify-tag__radio-circle[data-v-82dd6a75]{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;border:1px solid rgba(18,42,79,.2);background:#fff;flex-shrink:0;transition:border-color .2s ease;margin-top:2px}.classify-tag__radio--checked .classify-tag__radio-circle[data-v-82dd6a75]{border-color:#4a70ff}.classify-tag__radio-dot[data-v-82dd6a75]{width:8px;height:8px;border-radius:50%;background:#4A70FF}.classify-tag__radio-content[data-v-82dd6a75]{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.classify-tag__radio-label[data-v-82dd6a75]{font-size:12px;font-weight:400;color:#00010aed;line-height:20px}.classify-tag__radio-desc[data-v-82dd6a75]{font-size:11px;font-weight:400;color:#00010a73;line-height:16px}.classify-tag__radio:hover .classify-tag__radio-circle[data-v-82dd6a75]{border-color:#4a70ff}.classify-tag__checkbox[data-v-82dd6a75]{display:flex;align-items:flex-start;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;min-height:20px}.classify-tag__checkbox-box[data-v-82dd6a75]{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;border:1px solid rgba(18,42,79,.2);background:#fff;flex-shrink:0;transition:all .2s ease;margin-top:2px}.classify-tag__checkbox--checked .classify-tag__checkbox-box[data-v-82dd6a75]{border-color:#4a70ff;background:#4A70FF}.classify-tag__checkbox-tick[data-v-82dd6a75]{display:block}.classify-tag__checkbox:hover .classify-tag__checkbox-box[data-v-82dd6a75]{border-color:#4a70ff}.classify-tag__footer[data-v-82dd6a75]{position:relative;padding:16px}.classify-tag__footer-divider[data-v-82dd6a75]{position:absolute;top:0;left:0;right:0;height:1px;background:rgba(18,42,79,.08)}.classify-tag__footer-actions[data-v-82dd6a75]{display:flex;justify-content:flex-end;align-items:center;gap:8px}.classify-tag__btn[data-v-82dd6a75]{display:inline-flex;align-items:center;justify-content:center;padding:6px 16px;border-radius:3px;font-size:13px;font-weight:400;line-height:20px;cursor:pointer;border:none;outline:none;transition:all .2s ease;font-family:PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.classify-tag__btn--primary[data-v-82dd6a75]{background:rgba(54,79,129,.04);color:#364f8173;border:1px solid rgba(18,42,79,.08)}.classify-tag__btn--primary[data-v-82dd6a75]:not(:disabled){background:#4A70FF;color:#fff;border-color:#4a70ff}.classify-tag__btn--primary[data-v-82dd6a75]:not(:disabled):hover{background:#3B5DE0;border-color:#3b5de0}.classify-tag__btn--primary[data-v-82dd6a75]:disabled{cursor:not-allowed}.classify-tag__btn--secondary[data-v-82dd6a75]{background:#fff;color:#00010aed;border:1px solid rgba(17,32,70,.13)}.classify-tag__btn--secondary[data-v-82dd6a75]:hover{background:#f5f6f8}.plan-confirm[data-v-99c3033c]{border:1px solid rgba(18,42,79,.08);border-radius:6px;background:#fff;overflow:hidden;font-family:PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;margin:8px 0}.plan-confirm__header[data-v-99c3033c]{display:flex;align-items:center;padding:8px 12px;background:#f7f8fa;border-bottom:1px solid rgba(18,42,79,.08);cursor:pointer;-webkit-user-select:none;user-select:none;gap:8px}.plan-confirm--collapsed .plan-confirm__header[data-v-99c3033c]{border-bottom:none}.plan-confirm__icon[data-v-99c3033c]{flex-shrink:0;width:16px;height:16px}.plan-confirm__title[data-v-99c3033c]{flex:1;font-size:12px;font-weight:400;color:#030a26a6;line-height:16px;font-family:Monaco,monospace}.plan-confirm__arrow[data-v-99c3033c]{flex-shrink:0;width:16px;height:16px;color:#010b3269;transition:transform .2s ease}.plan-confirm__arrow--up[data-v-99c3033c]{transform:rotate(180deg)}.plan-confirm__content[data-v-99c3033c]{padding:12px;border-top:1px solid rgba(18,42,79,.08)}.plan-confirm__text[data-v-99c3033c]{font-size:12px;font-weight:400;color:#00010aed;line-height:24px;white-space:pre-wrap;word-break:break-word}.plan-confirm__footer[data-v-99c3033c]{position:relative;padding:16px}.plan-confirm__footer-divider[data-v-99c3033c]{position:absolute;top:0;left:0;right:0;height:1px;background:rgba(18,42,79,.08)}.plan-confirm__footer-actions[data-v-99c3033c]{display:flex;justify-content:flex-end;align-items:center;gap:8px}.plan-confirm__btn[data-v-99c3033c]{display:inline-flex;align-items:center;justify-content:center;padding:6px 16px;border-radius:3px;font-size:13px;font-weight:400;line-height:20px;cursor:pointer;border:none;outline:none;transition:all .2s ease;font-family:PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.plan-confirm__btn--primary[data-v-99c3033c]{background:#4A70FF;color:#fff;border:1px solid #4A70FF}.plan-confirm__btn--primary[data-v-99c3033c]:not(:disabled):hover{background:#3B5DE0;border-color:#3b5de0}.plan-confirm__btn--primary[data-v-99c3033c]:disabled{background:rgba(54,79,129,.04);color:#364f8173;border:1px solid rgba(18,42,79,.08);cursor:not-allowed}.plan-confirm__btn--secondary[data-v-99c3033c]{background:#fff;color:#00010aed;border:1px solid rgba(17,32,70,.13)}.plan-confirm__btn--secondary[data-v-99c3033c]:not(:disabled):hover{background:#f5f6f8}.plan-confirm__btn--secondary[data-v-99c3033c]:disabled{color:#00010a73;cursor:not-allowed}.cursor{display:inline-block;width:2px;height:17px;vertical-align:text-bottom;background-color:#000;animation:blink 1s infinite}@keyframes blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}mjx-container mjx-math{display:block;white-space:normal;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}mjx-container{display:inline-block}mjx-assistive-mml{right:0;bottom:0}@keyframes video-placeholder-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.video-placeholder{display:flex;align-items:center;gap:6px;padding:6px 12px;color:#010b3269;font-size:14px}.answer-md{word-break:break-word;word-wrap:break-word}.answer-md video{display:none}.answer-md .code-language-label{position:absolute;top:0;right:0;background:#f0f0f0;color:#333;padding:2px 8px;font-size:12px;border-bottom-left-radius:4px}.answer-md .hljs{color:#121319;background:#ffffff}.answer-md .hljs-comment,.answer-md .hljs-quote{color:#979baa;font-style:italic}.answer-md .hljs-doctag,.answer-md .hljs-keyword,.answer-md .hljs-formula{color:#4a70ff}.answer-md .hljs-section,.answer-md .hljs-name,.answer-md .hljs-selector-tag,.answer-md .hljs-deletion,.answer-md .hljs-subst{color:#ff8345}.answer-md .hljs-literal{color:#1492ff}.answer-md .hljs-string,.answer-md .hljs-regexp,.answer-md .hljs-addition,.answer-md .hljs-attribute,.answer-md .hljs-meta .hljs-string{color:#0fb87f}.answer-md .hljs-attr,.answer-md .hljs-variable,.answer-md .hljs-template-variable,.answer-md .hljs-type,.answer-md .hljs-selector-class,.answer-md .hljs-selector-attr,.answer-md .hljs-selector-pseudo,.answer-md .hljs-number{color:#ffa436}.answer-md .hljs-symbol,.answer-md .hljs-bullet,.answer-md .hljs-link,.answer-md .hljs-meta,.answer-md .hljs-selector-id,.answer-md .hljs-title{color:#d20fd2}.answer-md .hljs-built_in,.answer-md .hljs-title.class_,.answer-md .hljs-class .hljs-title{color:#f7c51e}.answer-md .hljs-emphasis{font-style:italic}.answer-md .hljs-strong{font-weight:700}.answer-md .hljs-link{text-decoration:underline}.answer-md .hljs-ln{border-collapse:collapse}.answer-md .hljs-ln td{padding:0}.answer-md .hljs-ln td.hljs-ln-numbers{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:left;vertical-align:top;padding:0 10px;color:#abb2bf!important;white-space:nowrap;border-right:1px solid #c5c5c5!important}.answer-md .hljs-ln td.hljs-ln-code{padding-left:10px}.answer-md .hljs-ln-n:before{content:attr(data-line-number)}.answer-md pre{position:relative}.answer-md .table:not(.hljs-ln) ::-webkit-scrollbar-track{background:transparent}.answer-md .table:not(.hljs-ln) ::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(17,32,70,.13)}.answer-md blockquote{margin:8px 0;padding:4px 12px;border-left:4px solid rgba(1,11,50,.15);border-radius:0 4px 4px 0}.answer-md blockquote p{margin:0}.answer-md img{max-width:100%;cursor:pointer;border-radius:6px}.answer-md p{word-break:break-word;word-wrap:break-word}.answer-md ::marker{color:#010b3269}.answer-md h1{font-size:18px;padding-top:18px}.answer-md h2,.answer-md h3,.answer-md h4,.answer-md h5,.answer-md h6{font-size:16px}.answer-md code{white-space:break-spaces}.answer-md table:not(.hljs-ln){display:inline-block;overflow-x:scroll;background:white;border-spacing:0;border-collapse:collapse;border-bottom:1px solid rgba(18,42,79,.08);border-right:1px solid rgba(18,42,79,.08);max-width:100%}.answer-md table:not(.hljs-ln) th{background:#eaecef;color:#010b3269}.answer-md table:not(.hljs-ln) td,.answer-md table:not(.hljs-ln) th{border-left:1px solid rgba(18,42,79,.08);border-top:1px solid rgba(18,42,79,.08)}.answer-md table:not(.hljs-ln) td{padding:8px 12px;min-width:20px}.answer-md .table-style:not(.hljs-ln){display:block;max-width:100%;overflow-x:auto;background:white;border-spacing:0;border-collapse:collapse}.answer-md .table-style:not(.hljs-ln) th{color:#010b3269;padding:12px;font-weight:400;background:#eaecef;white-space:nowrap}.answer-md .table-style:not(.hljs-ln) td,.answer-md .table-style:not(.hljs-ln) th{border:1px solid rgba(18,42,79,.08)}.answer-md .table-style:not(.hljs-ln) td{padding:8px 4px;min-width:45px;overflow-wrap:break-word;white-space:break-spaces}.question-text[data-v-60c16159],.question-text-mobile[data-v-60c16159]{width:100%}.thought-clps-title[data-v-60c16159]{color:#010b3269;font-size:12px;font-style:normal;font-weight:400;line-height:16px;cursor:pointer;padding:12px 0 8px;display:flex;align-items:center;gap:4px}.thought-clps-content[data-v-60c16159]{display:flex;flex-direction:column;gap:12px;align-self:stretch}.thought-clps-content p[data-v-60c16159]{margin:0}.thought-clps-content .thought-title[data-v-60c16159]{display:flex;align-items:center;justify-content:space-between;cursor:pointer}.thought-clps-content .thought-title .thought-title-container[data-v-60c16159]{display:flex;align-items:center;gap:5px}.thought-clps-content .thought-title .thought-title-icon[data-v-60c16159]{display:flex;width:16px;height:16px;flex-direction:column;justify-content:center;border-radius:8px}.thought-clps-content .thought-title .thought-title-name[data-v-60c16159]{color:#00010aed;font-size:14px;font-style:normal;font-weight:600;line-height:normal}.thought-clps-content .thought-title .thought-title-elapsed[data-v-60c16159]{color:#010b3269;font-family:Monaco;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.thought-clps-content .thought-detail[data-v-60c16159]{display:flex;padding:12px 0;gap:10px;border-bottom:.5px solid rgba(18,42,79,.08);color:#030a26a6;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.thought-clps-content .thought-detail p[data-v-60c16159]{word-break:break-all;word-wrap:break-word;margin:0}.thought-clps-content .thought-detail.last-item[data-v-60c16159]{border-bottom:1.5px solid #cdd0d9}.call-info[data-v-e50f6d7c]{display:flex;margin-top:16px;margin-bottom:16px;padding:var(--spacing-quite-loose);align-items:flex-start;align-self:stretch;border:1px solid #DADEE7}.call-info .content[data-v-e50f6d7c]{display:flex;padding:var(--spacing-none);flex-direction:column;align-items:flex-start;flex:1 0 0}.call-info .content .title[data-v-e50f6d7c]{color:var(--text---color-text-primary);font-family:PingFang SC;font-size:14px;font-weight:400;line-height:20px}.call-info .content .number[data-v-e50f6d7c]{color:var(--text---color-text-primary);font-family:PingFang TC;font-size:36px;font-weight:500;line-height:normal}.loadingWithoutIcon[data-v-5c1bbe0d]{margin:1em 0;width:fit-content;display:flex;align-items:center}.loadingWithoutIcon[data-v-5c1bbe0d]:after{content:".";animation:ellipsis-5c1bbe0d 1.5s steps(1,end) infinite}.loading[data-v-5c1bbe0d]{margin:1em 0;width:fit-content;display:flex;align-items:center}.loading[data-v-5c1bbe0d]:after{content:".";animation:ellipsis-5c1bbe0d 1.5s steps(1,end) infinite}.loading[data-v-5c1bbe0d]:before{content:"";display:inline-block;height:22px;width:22px;margin-right:8px;background-image:var(--bgurl);background-repeat:no-repeat;background-size:contain}@keyframes ellipsis-5c1bbe0d{0%{content:"."}33%{content:".."}66%{content:"..."}to{content:"."}}.stream-audio-player-card[data-v-439cf304]{position:relative;display:flex;width:100%;max-width:var(--bubble-max-width-structured-msg, 380px);padding:10px 16px;flex-direction:column;gap:8px;border-radius:var(--bubble---c-bubble-radius, 6px);background:var(--components-bubble---bubble-structured-bg-normal, #FFF);box-shadow:0 2px 12px #12131a0f,0 0 6px #12131a05,0 0 1px #12131a14;box-shadow:0 2px 12px 0 color(display-p3 .0706 .0745 .098 / .06),0 0 6px 0 color(display-p3 .0706 .0745 .098 / .02),0 0 1px 0 color(display-p3 .0706 .0745 .098 / .08)}.audio-content[data-v-439cf304]{display:flex;flex-direction:row;align-items:center;gap:12px}.audio-icon[data-v-439cf304]{display:flex;width:46px;height:46px;padding:3.333px 5px;justify-content:center;align-items:center}.file-info[data-v-439cf304]{flex:1;min-width:0}.file-name[data-v-439cf304]{overflow:hidden;color:#00010ced;text-overflow:ellipsis;white-space:nowrap;font-family:PingFang SC;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.file-status[data-v-439cf304]{color:#000b3669;font-family:PingFang SC;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.audio-controls[data-v-439cf304]{display:flex;align-items:center;gap:8px;margin-left:auto}.control-btn[data-v-439cf304]{display:flex;padding:8px;justify-content:center;align-items:center;border:0;outline:0;background:transparent;cursor:pointer;color:#00010aed}.control-btn .v-icon[data-v-439cf304]{fill:currentColor}.control-btn[data-v-439cf304]:disabled{color:#06154233;cursor:not-allowed}.progress-container[data-v-439cf304]{width:100%;padding:0}.progress-track[data-v-439cf304]{position:relative;width:100%;height:3px;border-radius:9999px;background:rgba(18,42,79,.08);cursor:pointer}.progress-played[data-v-439cf304]{position:absolute;top:0;left:0;height:100%;border-radius:9999px;background:rgba(180,184,196,1);pointer-events:none;transition:width .1s linear}.progress-played.no-transition[data-v-439cf304]{transition:none}.progress-handle[data-v-439cf304]{position:absolute;top:50%;width:8px;height:8px;aspect-ratio:1/1;border-radius:50%;background:#B3B8C5;background:color(display-p3 .7059 .7216 .7686);transform:translate(-50%,-50%);cursor:grab;transition:left .1s linear,transform .1s ease}.progress-handle.no-transition[data-v-439cf304]{transition:transform .1s ease}.progress-handle[data-v-439cf304]:active{cursor:grabbing;transform:translate(-50%,-50%) scale(1.2)}@keyframes pulse-439cf304{0%,to{opacity:1}50%{opacity:.5}}.msg-task-list[data-v-258cd050]{margin:8px 0}.task-card[data-v-258cd050]{background:#FFFFFF;border-radius:16px;box-shadow:0 4px 16px #0000000f;overflow:hidden}.task-header[data-v-258cd050]{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .2s}.task-header[data-v-258cd050]:hover{background:rgba(0,0,0,.02)}.task-header-left[data-v-258cd050]{display:flex;align-items:center;gap:6px;min-width:0;flex:1;padding-left:20px}.header-icon[data-v-258cd050]{width:14px;height:14px;flex-shrink:0}.task-progress-text[data-v-258cd050]{font-family:Monaco,Courier New,monospace;font-size:12px;line-height:18px;color:#030a26a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-arrow[data-v-258cd050]{width:12px;height:12px;flex-shrink:0;margin-left:8px;transition:transform .25s cubic-bezier(.4,0,.2,1)}.header-arrow.expanded[data-v-258cd050]{transform:rotate(180deg)}.task-list-wrapper[data-v-258cd050]{padding:0 12px 12px}.task-list-divider[data-v-258cd050]{height:1px;background:rgba(18,42,79,.08);margin-bottom:12px}.task-list[data-v-258cd050]{display:flex;flex-direction:column;gap:8px;padding:0 20px}.task-item[data-v-258cd050]{display:flex;align-items:center;gap:8px;min-height:20px}.task-icon[data-v-258cd050]{width:14px;height:14px;flex-shrink:0;display:block}.task-name[data-v-258cd050]{font-family:Monaco,Courier New,monospace;font-size:12px;line-height:20px;color:#030a26a6}.task-completed .task-name[data-v-258cd050]{color:#030a2669}.task-stopped .task-name[data-v-258cd050]{color:#92400e}.icon-spinner[data-v-258cd050]{animation:spin-258cd050 1s linear infinite}@keyframes spin-258cd050{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
|