lke-component 2.0.4-beta.1 → 2.0.4-beta.2

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=QN(t),t=KN(t),r&&(t=aO(t,n)),eO(t)||(t=tO(t),t=nO.clean(t)),t=RN(t),t=NN(t),t=MN(t),t=ON(t),t=EN(t),t=kN(t),t=jN(t),i||(t=LN(t)),t=IN(t),a&&(t=UN(t)),o&&(t=HN(t,s)),u?t=zN(t,l):t=VN(t),c&&c.length>0?t=$N(t,c):t=GN(t),f?t=WN(t):t=qN(t),h?t=ZN(t):t=YN(t),t=PN(t),t=rO.process(yE(t)),t}function aO(t,e){if(!t||Wb(window.location.hash,"from"))return t;let n=["lke.cloud.tencent.com","qidian"];e&&(n=e.concat(n));const i=XN(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 oO(t,e={}){return BN(t,r=>iO(r,e))}const sO={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 uO(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 lO(){const t=Date.now(),e=5*60*1e3;return Math.floor(t/e)*e}async function cO(){try{const t=window.tdWidgetSrc||"https://cdn.xiaowei.qq.com/webim/assets/static/widget/release/lib/js/",e=lO();return await uO(`${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 fO={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 cO(),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 hO=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)},dO=[],pO=pr(fO,hO,dO,!1,null,"c152fdb4",null,null);const Zb=pO.exports,Y=(...t)=>{console.log("[StreamAudioPlayer24]",...t)};let Yb=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}},sf="https://cdn.xiaowei.qq.com/adp/assets/static/iconfont-XzKaDZdEa7j2GPL-1201.js",Vu={};function vO(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 gO(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 Xb(t){let e=document.createElement("script");e.type="text/javascript",e.src=t,document.getElementsByTagName("head")[0].appendChild(e)}const mO=t=>{let e=!1,r=Object.keys(Vu);r.forEach(n=>{Vu[n]===t&&(e=!0)}),e||(Vu[r.length]=t,Xb(t))},yO={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=vO(e);if(e.data.style)for(let n in e.data.style)r[n]=e.data.style[n];return!Vu.defaultRemoteSrc&&sf&&e.props.loadDefaultRemoteIcons&&(Vu.defaultRemoteSrc=sf,Xb(sf)),e.props.remoteSrc&&mO(e.props.remoteSrc),t("svg",{class:gO(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"}})])}},_O=yO,bO=null,xO=null;var wO=pr(_O,bO,xO,!1,null,null,null,null);const n2=wO.exports;const SO={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 Yb,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 CO=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()])])])},AO=[],TO=pr(SO,CO,AO,!1,null,"c74077bd",null,null);const jb=TO.exports,DO={已完成所有任务:{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 EO(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 kO=EO(DO),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 MO(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 LO(t,e=w0){const r=MO(e),n=kO[r];return n[t]!==void 0?n[t]:t}function Kb(t,e){const r={};for(const n of e)r[n]=LO(n,t);return r}const IO={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 Kb(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 PO=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.跳过)+" ")])])])])},RO=[],NO=pr(IO,PO,RO,!1,null,"82dd6a75",null,null);const i2=NO.exports;const OO={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()])])])},FO=[],zO=pr(OO,BO,FO,!1,null,"99c3033c",null,null);const VO=zO.exports;let g1;const $O=new Uint8Array(16);function GO(){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($O)}const St=[];for(let t=0;t<256;++t)St.push((t+256).toString(16).slice(1));function HO(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 UO=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),sv={randomUUID:UO};function Qb(t,e,r){if(sv.randomUUID&&!e&&!t)return sv.randomUUID();t=t||{};const n=t.random||(t.rng||GO)();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 HO(n)}const WO=["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 qO{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=WO}){return await this.init(),new Promise((a,o)=>{if(!this.worker){o(new Error("Worker not init"));return}const s=Qb();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 qO),await m1.init(),m1}class ZO{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=Qb();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 Jb(){return y1||(y1=new ZO),await y1.init(),y1}async function j0(t){const r=await(await Jb()).zodToJsonSchemaAsync(t);return{keyMap:r.keyMap,jsonSchema:JSON.stringify(r.jsonSchema,null,2)}}function YO(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=XO(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 XO(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(),Jb()]).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 YO(...e)}decodeWidget(e){try{return JSON.parse(Buffer.from(e,"base64").toString()||"")}catch{return""}}}function jO(){return new a2}function KO(t){try{return jsxToJinja(t)}catch(e){return console.warn("getTemplate 执行出错:",e.message),""}}async function QO({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 eB={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(Zb),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(jb),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(VO),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()}},tB={methods:{_postrender(t){let e=t.replace(/&amp;gt;/g,"&gt;").replace(/&amp;lt;/g,"&lt;").replace("CURSOR_POINT",'<span class="cursor"></span>');const r=document.createElement("div");return r.innerHTML=e,r.querySelectorAll("img").forEach(n=>{const i=Wb(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||ov(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)}}),Db(r),this.$emit("postrender",this.currentIndex,this.$refs.containerRef&&(this.$refs.containerRef.$el||this.$refs.containerRef),this.recordId),r.innerHTML.replace(/--&gt;/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&&(ov(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 rB={name:"MsgContent",components:{MDRender:zP},mixins:[sO,eB,tB],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},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)},widgetList:{handler(t){this._updateWidgets(t)},deep:!0},audioList:{handler(t){this._updateAudioPlayers(t)},deep:!0}},created(){this._init()},mounted(){DN()},beforeDestroy(){this.clearTimer(),this._destroyAllEmbedded()},methods:{_getProcessedContent(t){return t?oO(t,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 nB=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}})},iB=[],aB=pr(rB,nB,iB,!1,null,null,null,null);const ex=aB.exports,X4=An(ex);const oB={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:wP,innerDetailVisible:this.detailVisible,renderedContent:"",xssHandler:new Un.FilterXSS(xP)}},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 sB=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)},uB=[],lB=pr(oB,sB,uB,!1,null,"60c16159",null,null);const cB=lB.exports,j4=An(cB);/*! *****************************************************************************
49
+ `))}return t=QN(t),t=KN(t),r&&(t=aO(t,n)),eO(t)||(t=tO(t),t=nO.clean(t)),t=RN(t),t=NN(t),t=MN(t),t=ON(t),t=EN(t),t=kN(t),t=jN(t),i||(t=LN(t)),t=IN(t),a&&(t=UN(t)),o&&(t=HN(t,s)),u?t=zN(t,l):t=VN(t),c&&c.length>0?t=$N(t,c):t=GN(t),f?t=WN(t):t=qN(t),h?t=ZN(t):t=YN(t),t=PN(t),t=rO.process(yE(t)),t}function aO(t,e){if(!t||Wb(window.location.hash,"from"))return t;let n=["lke.cloud.tencent.com","qidian"];e&&(n=e.concat(n));const i=XN(t);i.forEach((u,l)=>{t=t.replace(u,`IMG_URL${l}`)});const a=`${window.location.protocol}//${window.location.host}/adp/#/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 oO(t,e={}){return BN(t,r=>iO(r,e))}const sO={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 uO(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 lO(){const t=Date.now(),e=5*60*1e3;return Math.floor(t/e)*e}async function cO(){try{const t=window.tdWidgetSrc||"https://cdn.xiaowei.qq.com/webim/assets/static/widget/release/lib/js/",e=lO();return await uO(`${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 fO={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 cO(),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 hO=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)},dO=[],pO=pr(fO,hO,dO,!1,null,"c152fdb4",null,null);const Zb=pO.exports,Y=(...t)=>{console.log("[StreamAudioPlayer24]",...t)};let Yb=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}},sf="https://cdn.xiaowei.qq.com/adp/assets/static/iconfont-XzKaDZdEa7j2GPL-1201.js",Vu={};function vO(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 gO(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 Xb(t){let e=document.createElement("script");e.type="text/javascript",e.src=t,document.getElementsByTagName("head")[0].appendChild(e)}const mO=t=>{let e=!1,r=Object.keys(Vu);r.forEach(n=>{Vu[n]===t&&(e=!0)}),e||(Vu[r.length]=t,Xb(t))},yO={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=vO(e);if(e.data.style)for(let n in e.data.style)r[n]=e.data.style[n];return!Vu.defaultRemoteSrc&&sf&&e.props.loadDefaultRemoteIcons&&(Vu.defaultRemoteSrc=sf,Xb(sf)),e.props.remoteSrc&&mO(e.props.remoteSrc),t("svg",{class:gO(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"}})])}},_O=yO,bO=null,xO=null;var wO=pr(_O,bO,xO,!1,null,null,null,null);const n2=wO.exports;const SO={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 Yb,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 CO=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()])])])},AO=[],TO=pr(SO,CO,AO,!1,null,"c74077bd",null,null);const jb=TO.exports,DO={已完成所有任务:{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 EO(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 kO=EO(DO),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 MO(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 LO(t,e=w0){const r=MO(e),n=kO[r];return n[t]!==void 0?n[t]:t}function Kb(t,e){const r={};for(const n of e)r[n]=LO(n,t);return r}const IO={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 Kb(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 PO=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.跳过)+" ")])])])])},RO=[],NO=pr(IO,PO,RO,!1,null,"82dd6a75",null,null);const i2=NO.exports;const OO={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()])])])},FO=[],zO=pr(OO,BO,FO,!1,null,"99c3033c",null,null);const VO=zO.exports;let g1;const $O=new Uint8Array(16);function GO(){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($O)}const St=[];for(let t=0;t<256;++t)St.push((t+256).toString(16).slice(1));function HO(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 UO=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),sv={randomUUID:UO};function Qb(t,e,r){if(sv.randomUUID&&!e&&!t)return sv.randomUUID();t=t||{};const n=t.random||(t.rng||GO)();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 HO(n)}const WO=["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 qO{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=WO}){return await this.init(),new Promise((a,o)=>{if(!this.worker){o(new Error("Worker not init"));return}const s=Qb();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 qO),await m1.init(),m1}class ZO{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=Qb();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 Jb(){return y1||(y1=new ZO),await y1.init(),y1}async function j0(t){const r=await(await Jb()).zodToJsonSchemaAsync(t);return{keyMap:r.keyMap,jsonSchema:JSON.stringify(r.jsonSchema,null,2)}}function YO(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=XO(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 XO(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(),Jb()]).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 YO(...e)}decodeWidget(e){try{return JSON.parse(Buffer.from(e,"base64").toString()||"")}catch{return""}}}function jO(){return new a2}function KO(t){try{return jsxToJinja(t)}catch(e){return console.warn("getTemplate 执行出错:",e.message),""}}async function QO({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 eB={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(Zb),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(jb),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(VO),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()}},tB={methods:{_postrender(t){let e=t.replace(/&amp;gt;/g,"&gt;").replace(/&amp;lt;/g,"&lt;").replace("CURSOR_POINT",'<span class="cursor"></span>');const r=document.createElement("div");return r.innerHTML=e,r.querySelectorAll("img").forEach(n=>{const i=Wb(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||ov(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)}}),Db(r),this.$emit("postrender",this.currentIndex,this.$refs.containerRef&&(this.$refs.containerRef.$el||this.$refs.containerRef),this.recordId),r.innerHTML.replace(/--&gt;/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&&(ov(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 rB={name:"MsgContent",components:{MDRender:zP},mixins:[sO,eB,tB],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},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)},widgetList:{handler(t){this._updateWidgets(t)},deep:!0},audioList:{handler(t){this._updateAudioPlayers(t)},deep:!0}},created(){this._init()},mounted(){DN()},beforeDestroy(){this.clearTimer(),this._destroyAllEmbedded()},methods:{_getProcessedContent(t){return t?oO(t,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 nB=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}})},iB=[],aB=pr(rB,nB,iB,!1,null,null,null,null);const ex=aB.exports,X4=An(ex);const oB={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:wP,innerDetailVisible:this.detailVisible,renderedContent:"",xssHandler:new Un.FilterXSS(xP)}},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 sB=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)},uB=[],lB=pr(oB,sB,uB,!1,null,"60c16159",null,null);const cB=lB.exports,j4=An(cB);/*! *****************************************************************************
50
50
  Copyright (c) Microsoft Corporation.
51
51
 
52
52
  Permission to use, copy, modify, and/or distribute this software for any
@@ -13752,7 +13752,7 @@ function tO(t, e) {
13752
13752
  i.forEach((u, l) => {
13753
13753
  t = t.replace(u, `IMG_URL${l}`);
13754
13754
  });
13755
- const a = `${window.location.protocol}//${window.location.host}/lke#/link-info/redirect?target=`, o = n.map((u) => `(?!.*${u})`).join(""), s = new RegExp(
13755
+ const a = `${window.location.protocol}//${window.location.host}/adp/#/link-info/redirect?target=`, o = n.map((u) => `(?!.*${u})`).join(""), s = new RegExp(
13756
13756
  `(\\[([^\\]]+)\\]\\((https?:\\/\\/${o}[^\\s)]+)\\))|(<a\\s+[^>]*href="(${o}[^"]+)"[^>]*>(.*?)<\\/a>)`,
13757
13757
  "gi"
13758
13758
  );