k2-im 0.1.31 → 0.1.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.js +1 -1
- package/dist/chat-kit-pinia.d.ts +18 -1
- package/dist/chat-kit-pinia.js +1 -1
- package/dist/chat-kit-vue.js +1 -1
- package/dist/chat-kit.d.ts +16 -1
- package/dist/chat-kit.js +1 -1
- package/dist/{chunk-SMWPQSGR.js → chunk-GAAHNTJM.js} +1 -1
- package/dist/{chunk-PJVCTNC5.js → chunk-HSVVRLGM.js} +1 -1
- package/dist/{chunk-7463JUEH.js → chunk-JA5TKCQ2.js} +1 -1
- package/dist/chunk-MIFIQ45I.js +2 -0
- package/dist/{chunk-MKKCUSUP.js → chunk-OYH7COTJ.js} +1 -1
- package/dist/chunk-QQ23QYWK.js +2 -0
- package/dist/{chunk-UFGEIUBV.js → chunk-SEHHXKP7.js} +1 -1
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +16 -1
- package/dist/index.js +1 -1
- package/dist/sdk.d.ts +16 -1
- package/dist/sdk.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-CIY4WBFJ.js +0 -2
- package/dist/chunk-O23EXDM5.js +0 -2
package/dist/chat-kit-vue.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-MKKCUSUP.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-UFGEIUBV.js';import'./chunk-O23EXDM5.js';import'./chunk-SMWPQSGR.js';import'./chunk-CIY4WBFJ.js';import'./chunk-WOT6VMZA.js';import {defineComponent,h as h$1,ref,provide,watch,nextTick,onMounted,onBeforeUnmount,computed,inject,isVNode,cloneVNode,Fragment,reactive}from'vue';function Wt(t){let i=0,m=0;for(let u of t)u.kind==="video"?m+=1:i+=1;return {imageCount:i,videoCount:m}}function zt(t){return {systemMessage:i=>i.body.system!==void 0?g$1(i.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:i=>i$1(i.contentType,{locale:t.locale(),durationMs:i.body.voice?.durationMs,stickerImageType:i.body.sticker?.imageType,gameType:i.body.game?.gameType,callKind:i.body.call?.callKind,...i.body.mediaAlbum===void 0?{}:{mediaAlbum:Wt(i.body.mediaAlbum.items)}}),lastMessage:i=>i.lastMessageSummary!==void 0?h$2(i.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):i.lastMessagePreview,failureText:i=>i.failure?.displayCode!==void 0?f(i.failure.displayCode,{locale:t.locale(),mediaKind:i.failure.mediaKind,params:i.failure.params}):i.failure?.message??""}}var Ot=Symbol("ImThreadReadActions");function Vt(t){provide(Ot,t);}function Xt(){return inject(Ot,void 0)}var We=defineComponent({name:"ImThreadBodySwitch",inheritAttrs:false,props:{message:{type:Object,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{attrs:i,slots:m}){return Vt(t.readActions),()=>{let u=h(t.message),f=t.rendererRegistry.resolve(u);return f!==void 0?h$1(f,{...i,message:t.message,presentation:t.presentation}):m["unsupported-body"]!==void 0?m["unsupported-body"]({kind:u,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":u,"aria-hidden":"true"})}}});var ze=Symbol("ImThreadViewportRegistration");function kt(){return inject(ze,void 0)}var Ye=defineComponent({name:"ImThreadItems",props:{items:{type:Array,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{slots:i}){let m=kt();function u(o,d){let w=Array.isArray(d)?d:[d];return w.length===1&&isVNode(w[0])?cloneVNode(w[0],{key:o}):h$1(Fragment,{key:o},w)}function f(o){return d=>{m?.registerMessageNode(o,d instanceof HTMLElement?d:null);}}function O(o,d){return w=>{m?.registerDateNode(o,d,w instanceof HTMLElement?w:null);}}function _(o){return i.encryption?.({item:o})??h$1("div",{"data-im-thread-encryption":o.key})}function v(o){let d=O(o.key,o.label);return i["date-separator"]?.({item:o,setElement:d})??h$1("div",{ref:d,"data-im-thread-date-separator":o.key},o.label)}function P(o){return i["entry-unread"]?.({item:o})??h$1("div",{"data-im-thread-entry-unread":o.key,...o.count===void 0?{}:{"data-count":String(o.count)}})}function g(o){let d=f(o.message.id);return i.item!==void 0?i.item({item:o,setElement:d}):i.message!==void 0?i.message({item:o,setElement:d}):o.message.deletedForEveryone!==void 0?i["deleted-message"]?.({item:o,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.message.recalled!==void 0?i["recalled-message"]?.({item:o,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.kind==="system"&&i.system!==void 0?i.system({item:o,setElement:d}):h$1("article",{ref:d,"data-im-thread-message-id":o.message.id,"data-first-of-run":o.kind==="message"?String(o.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(We,{message:o.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":i["unsupported-body"]===void 0?void 0:w=>i["unsupported-body"]?.(w)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(o=>{switch(o.kind){case "encryption":return i.item!==void 0?u(o.key,i.item({item:o})):u(o.key,_(o));case "date-separator":return i.item!==void 0?u(o.key,i.item({item:o,setElement:O(o.key,o.label)})):u(o.key,v(o));case "entry-unread":return i.item!==void 0?u(o.key,i.item({item:o})):u(o.key,P(o));case "system":case "message":return u(o.key,g(o))}return o}))}});var Lt=120,lr=500,xe=.5,dr=8;function $e(t){let i=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(i!==void 0&&Number.isFinite(i)&&i>0?i:1)}var Xe=defineComponent({name:"ImThreadViewport",props:{messageIds:{type:Array,required:true},contentKey:{type:String,default:""},loadingOlder:{type:Boolean,default:false},hasNewer:{type:Boolean,default:false},loadingNewer:{type:Boolean,default:false},followThreshold:{type:Number,default:120},olderPrefetchThreshold:{type:Number,default:120},followNewMessages:{type:Boolean,default:true},shouldFollowAppendedMessage:{type:Function,default:void 0},visibleMargin:{type:Number,default:8},resizeFollowEnabled:{type:Boolean,default:true},activeDateOffset:{type:Number,default:16},activeDateEnabled:{type:Boolean,default:false}},emits:{"reach-start":()=>true,"reach-end":()=>true,"visible-range":t=>true,settled:t=>true,"new-message-count":t=>true,"user-scroll":()=>true,"active-date-change":t=>true},setup(t,{emit:i,expose:m$1,slots:u}){let f=ref(null),O=ref(null),_=new Map,v=new Map,P=new Set,g$1=new Map,o$1=0,d=[],w,K,E,R,G=false,S,$=new Set,J=false,C$1,re="",s=1,W=false,oe=false,j$1=true,L=false,Z=false,F=false,ee=0,te=-1,pe=-1,B$1,ie,X,k,z$1,ne=ref(true),p$1=ref(0),T=C(e=>{p$1.value=e,i("new-message-count",e);});function h(e){let n=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=n}function H(e=t.messageIds){return e.flatMap(n=>{let a=_.get(n);if(a===void 0)return [];let y=a.getBoundingClientRect(),I=a.querySelector("[data-im-thread-anchor-point]");return [{id:n,top:y.top,bottom:y.bottom,anchorTop:I?.getBoundingClientRect().top??y.top}]})}function b(e="",n=1){let a=Math.min(1,Math.max(0,n));re!==""&&re!==e&&g$1.get(re)?.element.style.removeProperty("opacity"),re=e,s=a,e!==""&&g$1.get(e)?.element.style.setProperty("opacity",String(a));}function q$1(){b();}function V(){let e=f.value;if(J||e===null||!t.activeDateEnabled)return;let n=[...g$1.entries()].filter(([,A])=>e.contains(A.element)).map(([A,D])=>{let Q=D.element.getBoundingClientRect();return {key:A,label:D.label,top:Q.top,height:Q.height}}).sort((A,D)=>A.top-D.top),a=e.getBoundingClientRect(),y=n.find(A=>A.height>0)?.height??28,I=g({markers:n,viewportTop:a.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:y});if(I===null){q$1(),i("active-date-change",null);return}b(I.inlineDateKey,I.inlineOpacity),i("active-date-change",I);}function U(e){K={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Oe(e){let n=K;if(n===void 0)return false;let a=Math.max(0,e.scrollHeight-e.clientHeight);return a<n.scrollHeight-n.height&&n.scrollTop>a&&Math.abs(e.scrollTop-a)<=$e(e)}function Ve(e){return Oe(e)||C$1!==void 0&&(C$1.behavior==="smooth"||Math.abs(e.scrollTop-C$1.targetTop)<=$e(e))?0:e.scrollTop-o$1}function ve(e,n){n!==0&&(o$1=e.scrollTop-n,C$1=void 0,c());}function Ue(e,n){let a=Ve(e);if(k!==void 0)return k.expectedOffset-=a,ce(),ve(e,a),L||ue(),false;let y=K;if(y===void 0)return false;let I=w,A=I===void 0?void 0:H([I.id])[0],D=e.scrollTop-y.scrollTop,Q=Oe(e)?0:D,Pe=I===void 0||A===void 0?0:(A.anchorTop??A.top)-n.top-I.offset+D;return y.scrollHeight!==e.scrollHeight||y.width!==e.clientWidth||y.height!==e.clientHeight||Math.abs(Pe)>xe?(K=void 0,!W&&!t.loadingNewer&&t.resizeFollowEnabled&&ne.value&&Math.abs(Q)<=xe?(Fe(),true):(I!==void 0&&Ne({...I,offset:I.offset-Q}),ve(e,a),false)):false}function ae(){let e=f.value;if(J||e===null)return;let n=e.getBoundingClientRect();if(Ue(e,n))return;let a=R!==void 0&&G?t.messageIds.filter(D=>P.has(D)):t.messageIds,y=H(a);if(R!==void 0&&G&&y.length===0){ne.value=h(e);return}let I=y.filter(D=>B({viewportTop:n.top,viewportBottom:n.bottom,messageTop:D.top,messageBottom:D.bottom,margin:t.visibleMargin})).map(D=>D.id),A=I.length!==d.length||I.some((D,Q)=>d[Q]!==D);d=Object.freeze(I),w=o(y,{top:n.top,bottom:n.bottom}),U(e),T.acknowledgeVisible(I),ne.value=h(e),A&&i("visible-range",d),i("settled",{visibleMessageIds:d,...d.length===0?{}:{newestVisibleMessageId:d[d.length-1]},isAtBottom:ne.value,newMessageCount:p$1.value});}function he(e){if($.add(e),S!==void 0)return;let n=()=>{S=void 0;let a=[...$];$.clear(),a.forEach(y=>y());};typeof globalThis.requestAnimationFrame=="function"?S=globalThis.requestAnimationFrame(n):S=globalThis.setTimeout(n,0);}function Me(){S!==void 0&&(typeof S=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(S):globalThis.clearTimeout(S),S=void 0,$.clear());}function le(){he(ae);}function Se(){let e=f.value;if(e===null)return;let n=e.getBoundingClientRect(),a=o(H(),{top:n.top,bottom:n.bottom});a!==void 0&&(w=a,U(e));}function Te(){return j$1&&k===void 0&&!oe&&!t.loadingOlder}function ke(){Se(),j$1=false,te=ee,oe=true,i("reach-start"),he(()=>{t.loadingOlder||(oe=false);});}function Ce(e){return t.hasNewer&&!W&&!t.loadingOlder&&!t.loadingNewer&&h(e)}function r(){W=true,ne.value=false,pe=ee,i("reach-end"),he(()=>{t.loadingNewer||(W=false);});}function l(){let e=f.value;e===null||ee===pe||!Ce(e)||r();}function c(){let e=f.value;if(J||e===null)return;let n=e.scrollTop,a=Oe(e),y=C$1,I=false;if(y!==void 0){let D=Math.abs(n-y.targetTop)<=$e(e);I=y.behavior==="smooth"||D,(y.behavior!=="smooth"||D)&&(C$1=void 0);}!I&&!a&&!L&&k===void 0&&n!==o$1&&(L=true,Z=true,ee+=1);let A=L&&!I&&!a&&n!==o$1;if(A&&(i("user-scroll"),he(V)),L&&!F&&we(),!j$1&&Z&&ee!==te&&n<o$1&&n>nt()&&(j$1=true),k!==void 0&&!I)if(L){let D=Y();D!==void 0&&(k.expectedOffset=D);}else ce(),ue();Te()&&A&&n>=0&&m({previousScrollTop:o$1,currentScrollTop:n,topThreshold:t.olderPrefetchThreshold})&&ke(),A&&Ce(e)&&z({previousScrollTop:o$1,currentScrollTop:n,isAtBottom:h(e),isHistoryWindow:t.hasNewer,isPageSettling:I})&&r(),o$1=n,le();}function M(e,n="auto"){C$1={targetTop:e,behavior:n};}function N(e){let n=k,a=O.value;if(!(n===void 0||a===null)){if(n.visualOffset=Math.abs(e)<=xe?0:e,n.visualOffset===0){a.style.removeProperty("transform"),a.style.removeProperty("will-change");return}a.style.setProperty("transform",`translate3d(0, ${n.visualOffset}px, 0)`),a.style.setProperty("will-change","transform");}}function x(){z$1!==void 0&&(clearTimeout(z$1),z$1=void 0),k!==void 0&&k.visualOffset!==0&&(w=void 0,K=void 0);let e=O.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),k=void 0,C$1=void 0;}function Y(){let e=f.value,n=k;if(e===null||n===void 0)return;let a=H().find(y=>y.id===n.anchor.id);if(a!==void 0)return (a.anchorTop??a.top)-e.getBoundingClientRect().top}function ce(){let e=k,n=Y();if(e===void 0||n===void 0)return;let a=e.expectedOffset-n;Math.abs(a)<=xe||(N(e.visualOffset+a),e.committed=false,e.attempts=0);}function de(){z$1!==void 0&&clearTimeout(z$1),z$1=setTimeout(()=>{z$1=void 0,!(L||k?.committed!==true)&&x();},lr);}function Ie(){let e=f.value,n=k;if(J||e===null||n===void 0||L)return;let a=n.visualOffset;if(Math.abs(a)<=xe){n.committed=true,de();return}let y=Math.max(0,e.scrollHeight-e.clientHeight),I=Math.min(y,Math.max(0,e.scrollTop-a));if(M(I),e.scrollTop=I,Math.abs(e.scrollTop-I)>xe){C$1=void 0,n.committed=false,n.attempts+=1,n.attempts<dr?ue():(x(),C$1=void 0,o$1=e.scrollTop);return}N(0),o$1=e.scrollTop,n.expectedOffset=Y()??n.expectedOffset,n.committed=true,n.attempts=0,de();}function ue(){z$1!==void 0&&clearTimeout(z$1),z$1=setTimeout(()=>{z$1=void 0,Ie();},Lt);}function Re(e){e!==void 0&&(k===void 0&&(k={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),ce(),!L&&Ie());}function Ne(e){let n=f.value;if(n===null||e===void 0)return;let a=n.getBoundingClientRect(),y=q(e,H(),{top:a.top,bottom:a.bottom});if(y!==void 0){let I=Math.max(0,n.scrollHeight-n.clientHeight),A=Math.min(I,Math.max(0,n.scrollTop+y));M(A),n.scrollTop=A,o$1=n.scrollTop,K=void 0;}}function nt(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function De(){C$1?.behavior==="smooth"&&(C$1=void 0),Z=false,L||(L=true,ee+=1),B$1!==void 0&&(clearTimeout(B$1),B$1=void 0);}function Le(){let e=f.value;e===null||ee===te||(k!==void 0&&x(),j$1=true,e.scrollTop<=nt()&&Te()&&ke());}function ot(){w=void 0,K=void 0,B$1!==void 0&&(clearTimeout(B$1),B$1=void 0),x(),L=false,Z=false,F=false,ie=void 0,X=void 0,ee+=1,te=-1,pe=-1,j$1=true,oe=false,W=false,C$1=void 0;}function it(){F||(B$1!==void 0&&(clearTimeout(B$1),B$1=void 0),L=false,Z=false,k!==void 0&&(k.attempts=0),Ie());}function we(){F||(B$1!==void 0&&clearTimeout(B$1),B$1=setTimeout(()=>{B$1=void 0,it();},Lt));}function at(){C$1=void 0,it();}function st(e){F=true,De(),ie=e.touches?.[0]?.clientY;}function lt(e){let n=e.touches?.[0]?.clientY;n!==void 0&&(ie!==void 0&&n>ie?Le():ie!==void 0&&n<ie&&l(),ie=n);}function He(){F=false,ie=void 0,we();}function dt(e){De(),e.deltaY<0?Le():e.deltaY>0&&l(),we();}function ut(e){e.pointerType!=="touch"&&(De(),X=e.clientY,we());}function ct(e){e.pointerType==="touch"||!L||X===void 0||(e.clientY<X?Le():e.clientY>X&&l(),X=e.clientY,we());}function Be(e){e.pointerType!=="touch"&&(X=void 0,we());}function ft(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(De(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?Le():l(),we());}function Fe(e="auto"){let n=f.value;if(n===null)return;K=void 0,x();let a=Math.max(0,n.scrollHeight-n.clientHeight);M(a,e),n.scrollTo?.({top:a,behavior:e}),n.scrollTop!==a&&(n.scrollTop=a),o$1=n.scrollTop,T.clear(),ae();}function mt(){let e=f.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function Bt(){let e=f.value;return mt()&&e!==null&&e.scrollHeight>e.clientHeight+1}function Ft(e,n={}){let a=f.value,y=_.get(e);if(a===null||y===void 0||!a.contains(y)||a.clientHeight<=0)return false;x();let I=a.getBoundingClientRect(),A=y.getBoundingClientRect(),D=n.block??"center",Q;D==="start"?Q=a.scrollTop+A.top-I.top:D==="end"?Q=a.scrollTop+A.bottom-I.bottom:D==="nearest"?A.top>=I.top&&A.bottom<=I.bottom?Q=a.scrollTop:A.top<I.top?Q=a.scrollTop+A.top-I.top:Q=a.scrollTop+A.bottom-I.bottom:Q=j({currentScrollTop:a.scrollTop,scrollHeight:a.scrollHeight,targetHeight:A.height,targetTop:A.top,viewportHeight:a.clientHeight,viewportTop:I.top});let Pe=Math.max(0,a.scrollHeight-a.clientHeight),ye=Math.min(Pe,Math.max(0,Q));K=void 0;let Ee=n.behavior??"auto";return M(ye,Ee),a.scrollTo?.({top:ye,behavior:Ee}),a.scrollTop!==ye&&(a.scrollTop=ye),o$1=a.scrollTop,ae(),true}function _t(){T.clear();}function jt(){W=true,ne.value=false;}function Kt(){W=false,le();}function Ut(e,n){let a=_.get(e);if(a!==void 0&&a!==n&&(R?.unobserve(a),E?.unobserve?.(a),v.delete(a),P.delete(e)),n===null){_.delete(e),P.delete(e);return}_.set(e,n),v.set(n,e),R?.observe(n),E?.observe(n),le();}function qt(e,n,a){let y=g$1.get(e);if(a===null){g$1.delete(e);return}g$1.set(e,{element:a,label:n}),re===e&&a.style.setProperty("opacity",String(s)),y?.element!==a&&(a.dataset.imThreadDateSeparator=e);}return provide(ze,{registerMessageNode:Ut,registerDateNode:qt}),watch(()=>t.contentKey,(e,n)=>{if(e===n)return;ot();let a=f.value;a!==null&&(o$1=a.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,n)=>{let a=f.value;if(a===null)return;let y=new Set(n);n.length>0&&e.length>0&&!e.some(be=>y.has(be))&&ot();let A=a.getBoundingClientRect(),D=p(w,H(),{top:A.top,bottom:A.bottom}),Q=ne.value,Pe=n[n.length-1],ye=Pe===void 0?-1:e.indexOf(Pe),Ee=ye<0?[]:e.slice(ye+1).filter(be=>!y.has(be)),gt=W||t.loadingNewer,Gt=e.length===n.length&&e.every(be=>y.has(be))&&e.some((be,qe)=>be!==n[qe]);if(await nextTick(),J)return;if(Gt&&Q&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!gt){Fe();return}let pt=n[0];if(pt!==void 0&&e.indexOf(pt)>0&&(oe=false,Re(D)),Ee.length>0){if(gt){W=false,k===void 0&&Ne(D),ne.value=false,le();return}(Q||Ee.some(qe=>t.shouldFollowAppendedMessage?.(qe)===true))&&t.followNewMessages?Fe():T.add(Ee);}le();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,n)=>{e||!n||!W||he(()=>{t.loadingNewer||(W=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,n)=>{e||!n||!oe||he(()=>{t.loadingOlder||(oe=false);});},{flush:"pre"}),onMounted(()=>{let e=f.value;if(e!==null){if(o$1=e.scrollTop,e.addEventListener("scroll",c,{passive:true}),e.addEventListener("scrollend",at,{passive:true}),e.addEventListener("touchstart",st,{passive:true}),e.addEventListener("touchmove",lt,{passive:true}),e.addEventListener("touchend",He,{passive:true}),e.addEventListener("touchcancel",He,{passive:true}),e.addEventListener("wheel",dt,{passive:true}),e.addEventListener("pointerdown",ut,{passive:true}),e.addEventListener("pointermove",ct,{passive:true}),e.addEventListener("pointerup",Be,{passive:true}),e.addEventListener("pointercancel",Be,{passive:true}),e.addEventListener("keydown",ft),typeof globalThis.ResizeObserver=="function"){E=new globalThis.ResizeObserver(()=>{J||f.value===null||ae();}),E.observe(e),O.value!==null&&E.observe(O.value);for(let n of _.values())E.observe(n);}if(typeof globalThis.IntersectionObserver=="function"){R=new globalThis.IntersectionObserver(n=>{for(let a of n){let y=v.get(a.target);y!==void 0&&(a.isIntersecting?P.add(y):P.delete(y));}G=true,le();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let n of _.values())R.observe(n);}le();}}),onBeforeUnmount(()=>{J=true;let e=f.value;e!==null&&e.removeEventListener("scroll",c),e!==null&&(e.removeEventListener("scrollend",at),e.removeEventListener("touchstart",st),e.removeEventListener("touchmove",lt),e.removeEventListener("touchend",He),e.removeEventListener("touchcancel",He),e.removeEventListener("wheel",dt),e.removeEventListener("pointerdown",ut),e.removeEventListener("pointermove",ct),e.removeEventListener("pointerup",Be),e.removeEventListener("pointercancel",Be),e.removeEventListener("keydown",ft)),B$1!==void 0&&clearTimeout(B$1),x(),Me(),E?.disconnect(),R?.disconnect(),q$1(),_.clear(),v.clear(),P.clear(),g$1.clear(),T.clear();}),m$1({getViewportElement:()=>f.value,clearNewMessageBadge:_t,clearActiveDate:q$1,isAtBottom:computed(()=>ne.value),isMeasurable:mt,isScrollable:Bt,newMessageCount:computed(()=>p$1.value),prepareHistoryPageAppend:jt,cancelHistoryPageAppend:Kt,trackRemoteMessageIds:(e,n)=>T.trackRemote(e,n),scrollToLatest:Fe,scrollToMessage:Ft,focusViewport:()=>f.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:f,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:O,"data-im-thread-viewport-content":""},u.default?.())])}});var Ht=Symbol("ImThreadSurfaceContext");function fr(t){if(typeof t.getState!="function")throw new TypeError("ImThreadSurfaceContext.getState \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.actions?.loadOlder!="function")throw new TypeError("ImThreadSurfaceContext.actions.loadOlder \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.formatDate!="function")throw new TypeError("ImThreadSurfaceContext.formatDate \u5FC5\u987B\u662F\u51FD\u6570");return Object.freeze({...t,actions:Object.freeze({...t.actions})})}function mr(t){provide(Ht,t);}function Je(){let t=inject(Ht);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var Ze=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),et=Object.freeze({enabled:true,maxFillPages:8}),vr=8,hr=160;function Tr(t,i){return t?.conversationType===i.conversationType&&t.conversationId===i.conversationId}var yr=defineComponent({name:"ImThreadSurface",props:{conversation:{type:Object,required:true},context:{type:Object,default:void 0},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0},viewportOptions:{type:Object,default:()=>({})},initialViewportOptions:{type:Object,default:()=>({})},hooks:{type:Object,default:void 0}},setup(t,{expose:i$1,slots:m}){let u=t.context??Je(),f=ref(null),O=ref(0),_=ref(true),v=[],P,g=0,o=0,d=null,w="",K="",E="",R=false,G=false,S=ref(false),$=ref(""),J=ref(false),C,re,s=computed(()=>u.getState()),W=computed(()=>s.value.pageVisible??u.isPageVisible?.()??true),oe=computed(()=>s.value.pageEngaged??u.isPageEngaged?.()??true),j=computed(()=>Tr(s.value.activeConversation,t.conversation)),L=computed(()=>({...Ze,...t.viewportOptions})),Z=computed(()=>{let r=t.initialViewportOptions.maxFillPages??et.maxFillPages;return {enabled:t.initialViewportOptions.enabled??et.enabled,maxFillPages:Number.isFinite(r)?Math.max(0,Math.floor(r)):et.maxFillPages}}),F=computed(()=>!j.value||!s.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ee=computed(()=>j.value?i({messages:s.value.messages,entryUnread:s.value.entryUnread,formatDate:u.formatDate,leadingItems:u.leadingItems?.(),beforeMessageItems:u.beforeMessageItems}):[]),te=computed(()=>ee.value.flatMap(r=>r.kind==="message"||r.kind==="system"?[r.message.id]:[]));function pe(){C!==void 0&&(clearTimeout(C),C=void 0),re!==void 0&&(clearTimeout(re),re=void 0);}function B(r=false){if(pe(),J.value=false,r){f.value?.clearActiveDate(),$.value="";return}re=setTimeout(()=>{re=void 0,!J.value&&(f.value?.clearActiveDate(),$.value="");},hr);}function ie(r){if(r===null){B();return}pe(),$.value=r.label,J.value=true;let l=L.value.activeDateIdleDelay,c=Number.isFinite(l)?Math.max(0,l):Ze.activeDateIdleDelay;C=setTimeout(()=>{C=void 0,B();},c);}async function X(r,l){t.hooks?.beforeAction?.(r);try{let c=await l();return t.hooks?.afterAction?.(r,c),c}catch(c){throw t.hooks?.onError?.(r,c),c}}function k(r="automatic"){return !j.value||s.value.loading||!s.value.hasOlder?Promise.resolve(0):X({kind:"load-older",source:r},()=>u.actions.loadOlder())}function z(){let r=u.actions.loadNewer,l=s.value.loadingNewer??s.value.loading;return !j.value||l||!s.value.hasNewer||r===void 0?Promise.resolve(0):X({kind:"load-newer"},()=>r())}async function ne(r){for(let l=0;l<vr;l+=1){if(!j.value)return;let c=r==="older"?s.value.hasOlder:s.value.hasNewer,M=r==="older"?s.value.olderError:s.value.newerError;if(!c||M!==null||(r==="older"?await k("user-scroll"):await z())>0)return;let x=r==="older"?s.value.hasOlder:s.value.hasNewer,Y=r==="older"?s.value.olderError:s.value.newerError;if(!x||Y!==null)return}}async function p(){return !j.value||u.actions.loadNewer===void 0?0:X({kind:"load-newer"},()=>u.actions.retryNewer?.()??u.actions.loadNewer?.({force:!0})??Promise.resolve(0))}async function T(){if(!j.value)return 0;let r=F.value,l=++g;d=null,E="";let c;try{c=await X({kind:"retry-older"},()=>u.actions.retryOlder?.()??u.actions.loadOlder({force:!0}));}catch(M){throw ae(r,l)&&(E=r),M}return ae(r,l)&&!S.value&&(d=null,Se()),c}async function h(){if(!j.value)return false;let r=F.value,l=++o;return Te(true),R=true,w=r,K=Me(s.value.entryUnread),!await X({kind:"jump-to-latest"},()=>u.actions.jumpToLatest?.()??Promise.resolve(!s.value.isHistoryWindow))||!q(r,l)||(await nextTick(),!q(r,l))?false:(f.value?.scrollToLatest(),true)}function H(r){_.value=r.isAtBottom,O.value=r.newMessageCount,Se();}function b(r,l){return f.value?.scrollToMessage(r,l)??false}function q(r,l){return !G&&o===l&&F.value===r&&j.value}async function V(r,l,c,M){for(let N=0;N<60;N+=1){if(!q(r,l))return false;if(b(c,M))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}async function U(r,l,c){let M=f.value;if(M===null||!M.isMeasurable()||M.isScrollable())return true;let N=0,x=!s.value.hasOlder,Y=!s.value.hasNewer||u.actions.loadNewer===void 0,ce=async()=>(await nextTick(),await nextTick(),V(r,l,c,{behavior:"auto",block:"center"})),de=async ue=>{if(!q(r,l)||N>=Z.value.maxFillPages)return false;let Re=0;if(ue==="older"){if(x||!s.value.hasOlder)return false;Re=await k(),x=!s.value.hasOlder;}else {if(Y||!s.value.hasNewer)return false;M.prepareHistoryPageAppend();try{Re=await z();}catch(Ne){throw M.cancelHistoryPageAppend(),Ne}Re<=0&&!s.value.hasNewer&&M.cancelHistoryPageAppend(),Y=!s.value.hasNewer;}return N+=1,Re>0?ce():!(ue==="older"?x:Y)};!x&&!await de("older")&&(x=true),!Y&&!await de("newer")&&(Y=true);let Ie="older";for(;q(r,l)&&N<Z.value.maxFillPages&&M.isMeasurable()&&!M.isScrollable()&&(!x||!Y);){let ue=Ie==="older"?x?"newer":"older":Y?"older":"newer";Ie=ue==="older"?"newer":"older",await de(ue)||(ue==="older"?x=true:Y=true);}return q(r,l)}async function Oe(r,l={behavior:"auto",block:"center"}){if(!j.value||r==="")return false;let c=F.value,M=++o;if(!te.value.includes(r)){let Y=u.actions.loadAround;if(Y===void 0||!await X({kind:"locate-message",messageId:r},()=>Y(r))||!q(c,M))return false}return !await V(c,M,r,{...l,behavior:"auto"})||!await U(c,M,r)?false:V(c,M,r,l)}function Ve(){P!==void 0&&(clearTimeout(P),P=void 0);}function ve(){if(Ve(),!S.value)return;let r=t.readActions;if(r===void 0||v.length===0)return;let l=Number.isFinite(L.value.visibleReadDelay)?Math.max(0,L.value.visibleReadDelay):Ze.visibleReadDelay;P=setTimeout(()=>{if(P=void 0,!j.value||!oe.value)return;let c=v[v.length-1];if(c===void 0)return;let M=r.resolveTarget===void 0?c:r.resolveTarget(c);M!=null&&Promise.resolve(r.markRead(M)).catch(N=>{t.hooks?.onError?.({kind:"visible-range",messageIds:v},N);});},l);}function Ue(r){v=Object.freeze([...r]);let l={kind:"visible-range",messageIds:v};t.hooks?.beforeAction?.(l);try{u.actions.onVisibleRange?.(v),t.hooks?.afterAction?.(l,void 0);}catch(c){throw t.hooks?.onError?.(l,c),c}S.value?ve():Se();}function ae(r,l){return !G&&g===l&&F.value===r&&!R}function he(r,l){ae(r,l)&&(w=r,K=Me(s.value.entryUnread),S.value=true,ve());}function Me(r){return r.state!=="located"?r.state:`${r.state}:${r.firstMessageId}`}async function le(r,l,c){for(let M=0;M<60;M+=1){if(!ae(r,l))return false;if(f.value?.scrollToMessage(c,{behavior:"auto",block:"center"})===true)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}function Se(){let r=F.value,l=Me(s.value.entryUnread);if(r===""||s.value.loading||s.value.error!==null&&s.value.messages.length===0||w===r&&(K===l||R)||E===r||d!==null)return;if(!Z.value.enabled){w=r,K=l,S.value=true,ve();return}let c=++g;R=false,S.value=false;let M=(async()=>{if(await nextTick(),!ae(r,c))return;let N=f.value;if(N===null||!N.isMeasurable())return;let x=s.value.entryUnread;if(x.state==="located"&&!te.value.includes(x.firstMessageId))return;let Y=x.state==="located"?await le(r,c,x.firstMessageId):false;if(x.state==="located"&&!Y)return;Y||N.scrollToLatest();let ce=0;for(;ae(r,c)&&ce<Z.value.maxFillPages&&s.value.error===null&&s.value.hasOlder&&N.isMeasurable()&&!N.isScrollable();)if(await k(),!ae(r,c)||(ce+=1,await nextTick(),await nextTick(),!N.isMeasurable()))return;if(!ae(r,c)||!N.isMeasurable())return;let de=s.value.entryUnread;if(de.state==="located"){if(!te.value.includes(de.firstMessageId)||!await le(r,c,de.firstMessageId))return}else N.scrollToLatest();await nextTick(),he(r,c);})().catch(()=>{ae(r,c)&&(E=r);}).finally(()=>{d===M&&(d=null);});d=M;}function Te(r,l=false){g+=1,d=null,R=false,S.value=r,r||(w="",K="",l||(E="")),Ve();}function ke(){if(S.value)return;let r=F.value;R=true,g+=1,d=null,w=r,S.value=true,ve();}let Ce=Object.freeze({getViewportElement:()=>f.value?.getViewportElement()??null,loadOlder:k,retryOlder:T,loadNewer:z,retryNewer:p,jumpToLatest:h,scrollToMessage:b,locateMessage:Oe,focusViewport:()=>f.value?.focusViewport()});return i$1(Ce),watch(oe,r=>{r&&S.value?ve():Ve();}),watch([()=>s.value.activeRemoteMessageRevision??0,f,F],()=>{let r=f.value;if(r===null||!j.value)return;let l=u.actions.drainActiveRemoteMessageIds?.()??[];r.trackRemoteMessageIds(l,{isAtBottom:_.value,isHistoryWindow:s.value.isHistoryWindow,isPageVisible:W.value})&&(_.value=false);},{flush:"post"}),watch([F,()=>s.value.loading,()=>s.value.error,()=>te.value.length,()=>s.value.hasOlder,()=>Me(s.value.entryUnread),Z],([r,l,c,,,M],[N,,,,,x])=>{if(r!==N&&(o+=1,Te(false),B(true),f.value?.clearNewMessageBadge(),O.value=0,_.value=true),r!==""&&r===N&&M!==x&&!R&&M.startsWith("located:")&&(w="",K="",S.value=false),r===""){Te(false);return}if(c!==null&&s.value.messages.length===0){S.value||Te(false,true);return}l||Se();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{G=true,o+=1,Te(false),B(true);}),()=>{let r={conversation:t.conversation,state:s.value,items:ee.value,actions:Ce,initialViewportSettled:F.value!==""&&(s.value.messages.length===0?!s.value.loading&&s.value.error===null&&!s.value.hasOlder:S.value&&w===F.value)},l=[m.header?.(r),m["before-list"]?.(r)];if(!j.value)l.push(m.unsupported?.(r)??h$1("div",{"data-im-thread-unsupported":""}));else if(!s.value.ready&&s.value.loading)l.push(m.loading?.(r)??h$1("div",{"data-im-thread-loading":""}));else if(s.value.error!==null&&s.value.messages.length===0)l.push(m.error?.(r)??h$1("div",{"data-im-thread-error":""}));else if(s.value.ready&&s.value.messages.length===0&&!s.value.hasOlder)l.push(m.empty?.(r)??h$1("div",{"data-im-thread-empty":""}));else {let c=h$1(Xe,{ref:f,messageIds:te.value,contentKey:`${t.conversation.conversationType}\0${t.conversation.conversationId}`,loadingOlder:s.value.loadingOlder??s.value.loading,hasNewer:s.value.hasNewer,loadingNewer:s.value.loadingNewer??s.value.loading,followThreshold:L.value.followThreshold,olderPrefetchThreshold:L.value.olderPrefetchThreshold,visibleMargin:L.value.visibleMargin,activeDateOffset:L.value.activeDateOffset,activeDateEnabled:m["active-date"]!==void 0,resizeFollowEnabled:S.value,followNewMessages:W.value,shouldFollowAppendedMessage:M=>{let N=s.value.messages.find(x=>x.id===M);return N===void 0?false:u.shouldFollowMessage?.(N)===true},onReachStart:()=>{ne("older").catch(()=>{});},onReachEnd:()=>{ne("newer").catch(()=>{});},onSettled:H,onUserScroll:ke,onActiveDateChange:ie,onVisibleRange:Ue,onNewMessageCount:M=>{O.value=M;}},{default:()=>[m["viewport-before"]?.(r),h$1(Ye,{items:ee.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:m.item,"date-separator":m["date-separator"],"entry-unread":m["entry-unread"],encryption:m.encryption,system:m.system,message:m.message,"recalled-message":m["recalled-message"],"deleted-message":m["deleted-message"],"unsupported-body":m["unsupported-body"]}),m["viewport-after"]?.(r)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[m["active-date"]?.({label:$.value,visible:J.value&&$.value!==""}),c])),s.value.error!==null&&l.push(m.error?.(r)??h$1("div",{"data-im-thread-error":""}));}return l.push(m["after-list"]?.(r),m["jump-to-latest"]?.({...r,count:O.value,visible:!_.value||s.value.isHistoryWindow}),m["context-menu"]?.(r),m.composer?.(r)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},l)}}});function br(t){let i=new Map;for(let u of t){if(i.has(u.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${u.kind}`);i.set(u.kind,u.component);}let m=Object.freeze([...i.keys()]);return Object.freeze({kinds:m,resolve:u=>i.get(u)})}var wr=140,Mr=120;function Ke(t,i){if(t.width<=0||t.height<=0)return 0;let m=Math.max(0,Math.min(t.right,i.right)-Math.max(t.left,i.left)),u=Math.max(0,Math.min(t.bottom,i.bottom)-Math.max(t.top,i.top));return Math.min(1,m*u/(t.width*t.height))}function tt(t,i){return {x:t.x,y:t.top-i,top:t.top-i,bottom:t.bottom+i,left:t.left,right:t.right,width:t.width,height:t.height+i*2,toJSON:()=>({})}}function rt(t){let i=Math.max(0,t.scrollIdleMs??wr),m=Math.max(0,t.visibilityDwellMs??Mr),u=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),f=Math.max(0,t.revealMarginPx??0),O=Math.max(0,t.preloadMarginPx??0),_=Math.max(f,O),v=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),P=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),g=new Map,o=new Map,d=reactive(new Set),w=new Set,K=new Set,E=[],R=null,G=null,S=null,$=false,J=false,C=false,re=false,s,W;function oe(){s!==void 0&&clearTimeout(s),s=void 0;}function j(){W!==void 0&&clearTimeout(W),W=void 0;}function L(p=false){if(!p&&G!==null||R===null)return;let T=R.getBoundingClientRect(),h=tt(T,_);for(let[H,b]of g){let q=H.getBoundingClientRect();b.ratio=Ke(q,T),b.intersecting=b.ratio>0,b.revealIntersecting=_>0?Ke(q,h)>0:b.intersecting&&b.ratio>=u;}}function Z(p){return p.intersecting&&p.ratio>=u}function F(){for(let[p,T]of g)!T.revealIntersecting||d.has(T.key)||_>f&&(f===0&&!Z(T)||f>0&&(R===null||Ke(p.getBoundingClientRect(),tt(R.getBoundingClientRect(),f))<=0))||(d.add(T.key),t.onRevealed?.(T.item));}function ee(p,T=false){let h=new Set(p.map(b=>b.key));if(!(!(h.size!==K.size||[...h].some(b=>!K.has(b)))&&!T)){K.clear();for(let b of h)K.add(b);t.onSettledVisibleChange?.(p.map(b=>b.item));}}function te(p,T=false){!T&&p.length===E.length&&p.every((h,H)=>h.key===E[H]?.key&&h.item===E[H]?.item)||(E=p,t.onSettledPreloadChange?.(p.map(h=>h.item)));}function pe(){if(C||$)return;let p=J;J=false,L(),F();let T=R?.getBoundingClientRect(),h=T===void 0?0:(T.top+T.bottom)/2,H=[...g.entries()].filter(([,b])=>Z(b)).sort(([b],[q])=>{let V=b.getBoundingClientRect(),U=q.getBoundingClientRect();return Math.abs((V.top+V.bottom)/2-h)-Math.abs((U.top+U.bottom)/2-h)}).slice(0,P).map(([,b])=>b);if(ee(H,p),t.onSettledPreloadChange!==void 0&&T!==void 0){let b=tt(T,O),q=[...g.entries()].filter(([,V])=>V.revealIntersecting).map(([V,U])=>({target:U,rect:V.getBoundingClientRect()})).filter(({target:V,rect:U})=>Z(V)||O>0&&Ke(U,b)>0).sort((V,U)=>Number(Z(U.target))-Number(Z(V.target))||Math.abs((V.rect.top+V.rect.bottom)/2-h)-Math.abs((U.rect.top+U.rect.bottom)/2-h)).slice(0,v).map(({target:V})=>V);te(q,p);}for(let b of H)w.has(b.key)||(w.add(b.key),t.onActivated?.(b.item));}function B(){C||$||(j(),W=setTimeout(()=>{W=void 0,pe();},m));}function ie(){C||(J=true,X(true),te([]),L(),F(),ee([]),j(),oe(),s=setTimeout(()=>{s=void 0,X(false),B();},i));}function X(p){$!==p&&($=p,t.onScrollingChange?.(p));}function k(){R?.removeEventListener("scroll",ie),G?.disconnect(),S?.disconnect(),G=null,S=null,R=null;}function z(p=true){if(C)return;let T=t.getRoot();if(!(T===R&&R!==null)){if(te([]),k(),R=T,R===null){p&&!re&&(re=true,Promise.resolve().then(()=>{re=false,C||(z(false),B());}));return}if(R.addEventListener("scroll",ie,{passive:true}),typeof IntersectionObserver<"u"){G=new IntersectionObserver(h=>{for(let H of h){let b=g.get(H.target);b!==void 0&&(b.intersecting=H.isIntersecting,b.ratio=H.intersectionRatio,_===0&&(b.revealIntersecting=H.isIntersecting&&H.intersectionRatio>=u));}F(),B();},{root:R,threshold:[0,u,1]}),_>0&&(S=new IntersectionObserver(h=>{for(let H of h){let b=g.get(H.target);b!==void 0&&(b.revealIntersecting=H.isIntersecting);}F(),B();},{root:R,rootMargin:`${_}px 0px`,threshold:0}));for(let h of g.keys())G.observe(h);for(let h of g.keys())S?.observe(h);}else L(),F();}}function ne(p){te(E.filter(T=>T.key!==p)),d.delete(p),w.delete(p),K.delete(p);}return {register(p,T){if(C)return;let h=t.getKey(p),H=d.has(h),b=w.has(h),q=T===null?void 0:g.get(T);q!==void 0&&q.key!==h&&(o.delete(q.key),g.delete(T),ne(q.key));let V=o.get(h);if(V!==void 0&&V!==T&&(G?.unobserve(V),S?.unobserve(V),g.delete(V),o.delete(h)),T===null){V!==void 0&&(G?.unobserve(V),S?.unobserve(V),g.delete(V),o.delete(h)),ne(h);return}let U=g.get(T);if(U?.key===h&&U.item===p){z();return}g.set(T,{item:p,key:h,intersecting:U?.key===h?U.intersecting:false,ratio:U?.key===h?U.ratio:0,revealIntersecting:U?.key===h?U.revealIntersecting:false}),o.set(h,T),z(),G?.observe(T),S?.observe(T),L(true),F(),H&&t.onRevealed?.(p),b&&t.onActivated?.(p),B();},isRevealed:p=>d.has(t.getKey(p)),isActivated:p=>w.has(t.getKey(p)),isSettledVisible:p=>K.has(t.getKey(p)),isScrolling:()=>$,notifyScroll:ie,refresh(){z(),L(true),F(),B();},reset(){oe(),j(),X(false),J=false,ee([]),te([]),k(),g.clear(),o.clear(),d.clear(),w.clear();},dispose(){C||(oe(),j(),X(false),J=false,ee([]),te([]),k(),g.clear(),o.clear(),d.clear(),w.clear(),C=true);}}}function Sr(t){let i=new Map,m=new Map,u=false,f=v=>{let P=i.get(v.channel);return P===void 0?v.channel:`${v.channel}\0${P.getKey(v.item)}`},O=rt({getRoot:t.getRoot,getKey:f,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:v=>{for(let P of i.values())P.onScrollingChange?.(v);},onRevealed:v=>i.get(v.channel)?.onRevealed?.(v.item),onActivated:v=>i.get(v.channel)?.onActivated?.(v.item),onSettledPreloadChange:v=>{for(let[P,g]of i){let o=v.filter(d=>d.channel===P).map(d=>d.item);g.onSettledPreloadChange?.(o.slice(0,Math.max(0,g.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:v=>{for(let[P,g]of i){let o=v.filter(w=>w.channel===P).map(w=>w.item),d=g.maxSettledVisible===void 0?o:o.slice(0,g.maxSettledVisible);g.onSettledVisibleChange?.(d);}}});function _(v){return P=>{if(u)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(i.has(v))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${v}`);i.set(v,P);let g=new Map;m.set(v,g);let o=false,d=E=>({channel:v,item:E});function w(){for(let E of g.values())O.register(E.target,null);g.clear(),P.onScrollingChange?.(false),P.onSettledVisibleChange?.([]),P.onSettledPreloadChange?.([]);}return {register(E,R){if(o||u)return;let G=P.getKey(E),S=g.get(G);if(R===null){S!==void 0&&(O.register(S.target,null),g.delete(G));return}let $=S?.target.item===E?S.target:d(E);g.set(G,{target:$,element:R}),O.register($,R);},isRevealed:E=>O.isRevealed(d(E)),isActivated:E=>O.isActivated(d(E)),isSettledVisible:E=>O.isSettledVisible(d(E)),isScrolling:O.isScrolling,notifyScroll:O.notifyScroll,refresh:O.refresh,reset:w,dispose(){o||(w(),o=true,i.delete(v),m.delete(v));}}}}return {createFactory:_,refresh:O.refresh,dispose(){if(!u){for(let v of m.values())for(let P of v.values())O.register(P.target,null);for(let v of i.values())v.onSettledPreloadChange?.([]);m.clear(),i.clear(),O.dispose(),u=true;}}}}export{We as ImThreadBodySwitch,Ye as ImThreadItems,yr as ImThreadSurface,Xe as ImThreadViewport,fr as createImThreadSurfaceContext,br as createMessageRendererRegistry,Sr as createThreadVisibilityTargetGroup,rt as createThreadVisibilityTargets,mr as provideImThreadSurfaceContext,zt as useImText,Je as useImThreadSurfaceContext,Xt as useOptionalImThreadReadActions};
|
|
1
|
+
import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-OYH7COTJ.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-SEHHXKP7.js';import'./chunk-MIFIQ45I.js';import'./chunk-GAAHNTJM.js';import'./chunk-QQ23QYWK.js';import'./chunk-WOT6VMZA.js';import {defineComponent,h as h$1,ref,provide,watch,nextTick,onMounted,onBeforeUnmount,computed,inject,isVNode,cloneVNode,Fragment,reactive}from'vue';function Wt(t){let i=0,m=0;for(let u of t)u.kind==="video"?m+=1:i+=1;return {imageCount:i,videoCount:m}}function zt(t){return {systemMessage:i=>i.body.system!==void 0?g$1(i.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:i=>i$1(i.contentType,{locale:t.locale(),durationMs:i.body.voice?.durationMs,stickerImageType:i.body.sticker?.imageType,gameType:i.body.game?.gameType,callKind:i.body.call?.callKind,...i.body.mediaAlbum===void 0?{}:{mediaAlbum:Wt(i.body.mediaAlbum.items)}}),lastMessage:i=>i.lastMessageSummary!==void 0?h$2(i.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):i.lastMessagePreview,failureText:i=>i.failure?.displayCode!==void 0?f(i.failure.displayCode,{locale:t.locale(),mediaKind:i.failure.mediaKind,params:i.failure.params}):i.failure?.message??""}}var Ot=Symbol("ImThreadReadActions");function Vt(t){provide(Ot,t);}function Xt(){return inject(Ot,void 0)}var We=defineComponent({name:"ImThreadBodySwitch",inheritAttrs:false,props:{message:{type:Object,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{attrs:i,slots:m}){return Vt(t.readActions),()=>{let u=h(t.message),f=t.rendererRegistry.resolve(u);return f!==void 0?h$1(f,{...i,message:t.message,presentation:t.presentation}):m["unsupported-body"]!==void 0?m["unsupported-body"]({kind:u,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":u,"aria-hidden":"true"})}}});var ze=Symbol("ImThreadViewportRegistration");function kt(){return inject(ze,void 0)}var Ye=defineComponent({name:"ImThreadItems",props:{items:{type:Array,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{slots:i}){let m=kt();function u(o,d){let w=Array.isArray(d)?d:[d];return w.length===1&&isVNode(w[0])?cloneVNode(w[0],{key:o}):h$1(Fragment,{key:o},w)}function f(o){return d=>{m?.registerMessageNode(o,d instanceof HTMLElement?d:null);}}function O(o,d){return w=>{m?.registerDateNode(o,d,w instanceof HTMLElement?w:null);}}function _(o){return i.encryption?.({item:o})??h$1("div",{"data-im-thread-encryption":o.key})}function v(o){let d=O(o.key,o.label);return i["date-separator"]?.({item:o,setElement:d})??h$1("div",{ref:d,"data-im-thread-date-separator":o.key},o.label)}function P(o){return i["entry-unread"]?.({item:o})??h$1("div",{"data-im-thread-entry-unread":o.key,...o.count===void 0?{}:{"data-count":String(o.count)}})}function g(o){let d=f(o.message.id);return i.item!==void 0?i.item({item:o,setElement:d}):i.message!==void 0?i.message({item:o,setElement:d}):o.message.deletedForEveryone!==void 0?i["deleted-message"]?.({item:o,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.message.recalled!==void 0?i["recalled-message"]?.({item:o,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.kind==="system"&&i.system!==void 0?i.system({item:o,setElement:d}):h$1("article",{ref:d,"data-im-thread-message-id":o.message.id,"data-first-of-run":o.kind==="message"?String(o.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(We,{message:o.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":i["unsupported-body"]===void 0?void 0:w=>i["unsupported-body"]?.(w)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(o=>{switch(o.kind){case "encryption":return i.item!==void 0?u(o.key,i.item({item:o})):u(o.key,_(o));case "date-separator":return i.item!==void 0?u(o.key,i.item({item:o,setElement:O(o.key,o.label)})):u(o.key,v(o));case "entry-unread":return i.item!==void 0?u(o.key,i.item({item:o})):u(o.key,P(o));case "system":case "message":return u(o.key,g(o))}return o}))}});var Lt=120,lr=500,xe=.5,dr=8;function $e(t){let i=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(i!==void 0&&Number.isFinite(i)&&i>0?i:1)}var Xe=defineComponent({name:"ImThreadViewport",props:{messageIds:{type:Array,required:true},contentKey:{type:String,default:""},loadingOlder:{type:Boolean,default:false},hasNewer:{type:Boolean,default:false},loadingNewer:{type:Boolean,default:false},followThreshold:{type:Number,default:120},olderPrefetchThreshold:{type:Number,default:120},followNewMessages:{type:Boolean,default:true},shouldFollowAppendedMessage:{type:Function,default:void 0},visibleMargin:{type:Number,default:8},resizeFollowEnabled:{type:Boolean,default:true},activeDateOffset:{type:Number,default:16},activeDateEnabled:{type:Boolean,default:false}},emits:{"reach-start":()=>true,"reach-end":()=>true,"visible-range":t=>true,settled:t=>true,"new-message-count":t=>true,"user-scroll":()=>true,"active-date-change":t=>true},setup(t,{emit:i,expose:m$1,slots:u}){let f=ref(null),O=ref(null),_=new Map,v=new Map,P=new Set,g$1=new Map,o$1=0,d=[],w,K,E,R,G=false,S,$=new Set,J=false,C$1,re="",s=1,W=false,oe=false,j$1=true,L=false,Z=false,F=false,ee=0,te=-1,pe=-1,B$1,ie,X,k,z$1,ne=ref(true),p$1=ref(0),T=C(e=>{p$1.value=e,i("new-message-count",e);});function h(e){let n=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=n}function H(e=t.messageIds){return e.flatMap(n=>{let a=_.get(n);if(a===void 0)return [];let y=a.getBoundingClientRect(),I=a.querySelector("[data-im-thread-anchor-point]");return [{id:n,top:y.top,bottom:y.bottom,anchorTop:I?.getBoundingClientRect().top??y.top}]})}function b(e="",n=1){let a=Math.min(1,Math.max(0,n));re!==""&&re!==e&&g$1.get(re)?.element.style.removeProperty("opacity"),re=e,s=a,e!==""&&g$1.get(e)?.element.style.setProperty("opacity",String(a));}function q$1(){b();}function V(){let e=f.value;if(J||e===null||!t.activeDateEnabled)return;let n=[...g$1.entries()].filter(([,A])=>e.contains(A.element)).map(([A,D])=>{let Q=D.element.getBoundingClientRect();return {key:A,label:D.label,top:Q.top,height:Q.height}}).sort((A,D)=>A.top-D.top),a=e.getBoundingClientRect(),y=n.find(A=>A.height>0)?.height??28,I=g({markers:n,viewportTop:a.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:y});if(I===null){q$1(),i("active-date-change",null);return}b(I.inlineDateKey,I.inlineOpacity),i("active-date-change",I);}function U(e){K={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Oe(e){let n=K;if(n===void 0)return false;let a=Math.max(0,e.scrollHeight-e.clientHeight);return a<n.scrollHeight-n.height&&n.scrollTop>a&&Math.abs(e.scrollTop-a)<=$e(e)}function Ve(e){return Oe(e)||C$1!==void 0&&(C$1.behavior==="smooth"||Math.abs(e.scrollTop-C$1.targetTop)<=$e(e))?0:e.scrollTop-o$1}function ve(e,n){n!==0&&(o$1=e.scrollTop-n,C$1=void 0,c());}function Ue(e,n){let a=Ve(e);if(k!==void 0)return k.expectedOffset-=a,ce(),ve(e,a),L||ue(),false;let y=K;if(y===void 0)return false;let I=w,A=I===void 0?void 0:H([I.id])[0],D=e.scrollTop-y.scrollTop,Q=Oe(e)?0:D,Pe=I===void 0||A===void 0?0:(A.anchorTop??A.top)-n.top-I.offset+D;return y.scrollHeight!==e.scrollHeight||y.width!==e.clientWidth||y.height!==e.clientHeight||Math.abs(Pe)>xe?(K=void 0,!W&&!t.loadingNewer&&t.resizeFollowEnabled&&ne.value&&Math.abs(Q)<=xe?(Fe(),true):(I!==void 0&&Ne({...I,offset:I.offset-Q}),ve(e,a),false)):false}function ae(){let e=f.value;if(J||e===null)return;let n=e.getBoundingClientRect();if(Ue(e,n))return;let a=R!==void 0&&G?t.messageIds.filter(D=>P.has(D)):t.messageIds,y=H(a);if(R!==void 0&&G&&y.length===0){ne.value=h(e);return}let I=y.filter(D=>B({viewportTop:n.top,viewportBottom:n.bottom,messageTop:D.top,messageBottom:D.bottom,margin:t.visibleMargin})).map(D=>D.id),A=I.length!==d.length||I.some((D,Q)=>d[Q]!==D);d=Object.freeze(I),w=o(y,{top:n.top,bottom:n.bottom}),U(e),T.acknowledgeVisible(I),ne.value=h(e),A&&i("visible-range",d),i("settled",{visibleMessageIds:d,...d.length===0?{}:{newestVisibleMessageId:d[d.length-1]},isAtBottom:ne.value,newMessageCount:p$1.value});}function he(e){if($.add(e),S!==void 0)return;let n=()=>{S=void 0;let a=[...$];$.clear(),a.forEach(y=>y());};typeof globalThis.requestAnimationFrame=="function"?S=globalThis.requestAnimationFrame(n):S=globalThis.setTimeout(n,0);}function Me(){S!==void 0&&(typeof S=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(S):globalThis.clearTimeout(S),S=void 0,$.clear());}function le(){he(ae);}function Se(){let e=f.value;if(e===null)return;let n=e.getBoundingClientRect(),a=o(H(),{top:n.top,bottom:n.bottom});a!==void 0&&(w=a,U(e));}function Te(){return j$1&&k===void 0&&!oe&&!t.loadingOlder}function ke(){Se(),j$1=false,te=ee,oe=true,i("reach-start"),he(()=>{t.loadingOlder||(oe=false);});}function Ce(e){return t.hasNewer&&!W&&!t.loadingOlder&&!t.loadingNewer&&h(e)}function r(){W=true,ne.value=false,pe=ee,i("reach-end"),he(()=>{t.loadingNewer||(W=false);});}function l(){let e=f.value;e===null||ee===pe||!Ce(e)||r();}function c(){let e=f.value;if(J||e===null)return;let n=e.scrollTop,a=Oe(e),y=C$1,I=false;if(y!==void 0){let D=Math.abs(n-y.targetTop)<=$e(e);I=y.behavior==="smooth"||D,(y.behavior!=="smooth"||D)&&(C$1=void 0);}!I&&!a&&!L&&k===void 0&&n!==o$1&&(L=true,Z=true,ee+=1);let A=L&&!I&&!a&&n!==o$1;if(A&&(i("user-scroll"),he(V)),L&&!F&&we(),!j$1&&Z&&ee!==te&&n<o$1&&n>nt()&&(j$1=true),k!==void 0&&!I)if(L){let D=Y();D!==void 0&&(k.expectedOffset=D);}else ce(),ue();Te()&&A&&n>=0&&m({previousScrollTop:o$1,currentScrollTop:n,topThreshold:t.olderPrefetchThreshold})&&ke(),A&&Ce(e)&&z({previousScrollTop:o$1,currentScrollTop:n,isAtBottom:h(e),isHistoryWindow:t.hasNewer,isPageSettling:I})&&r(),o$1=n,le();}function M(e,n="auto"){C$1={targetTop:e,behavior:n};}function N(e){let n=k,a=O.value;if(!(n===void 0||a===null)){if(n.visualOffset=Math.abs(e)<=xe?0:e,n.visualOffset===0){a.style.removeProperty("transform"),a.style.removeProperty("will-change");return}a.style.setProperty("transform",`translate3d(0, ${n.visualOffset}px, 0)`),a.style.setProperty("will-change","transform");}}function x(){z$1!==void 0&&(clearTimeout(z$1),z$1=void 0),k!==void 0&&k.visualOffset!==0&&(w=void 0,K=void 0);let e=O.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),k=void 0,C$1=void 0;}function Y(){let e=f.value,n=k;if(e===null||n===void 0)return;let a=H().find(y=>y.id===n.anchor.id);if(a!==void 0)return (a.anchorTop??a.top)-e.getBoundingClientRect().top}function ce(){let e=k,n=Y();if(e===void 0||n===void 0)return;let a=e.expectedOffset-n;Math.abs(a)<=xe||(N(e.visualOffset+a),e.committed=false,e.attempts=0);}function de(){z$1!==void 0&&clearTimeout(z$1),z$1=setTimeout(()=>{z$1=void 0,!(L||k?.committed!==true)&&x();},lr);}function Ie(){let e=f.value,n=k;if(J||e===null||n===void 0||L)return;let a=n.visualOffset;if(Math.abs(a)<=xe){n.committed=true,de();return}let y=Math.max(0,e.scrollHeight-e.clientHeight),I=Math.min(y,Math.max(0,e.scrollTop-a));if(M(I),e.scrollTop=I,Math.abs(e.scrollTop-I)>xe){C$1=void 0,n.committed=false,n.attempts+=1,n.attempts<dr?ue():(x(),C$1=void 0,o$1=e.scrollTop);return}N(0),o$1=e.scrollTop,n.expectedOffset=Y()??n.expectedOffset,n.committed=true,n.attempts=0,de();}function ue(){z$1!==void 0&&clearTimeout(z$1),z$1=setTimeout(()=>{z$1=void 0,Ie();},Lt);}function Re(e){e!==void 0&&(k===void 0&&(k={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),ce(),!L&&Ie());}function Ne(e){let n=f.value;if(n===null||e===void 0)return;let a=n.getBoundingClientRect(),y=q(e,H(),{top:a.top,bottom:a.bottom});if(y!==void 0){let I=Math.max(0,n.scrollHeight-n.clientHeight),A=Math.min(I,Math.max(0,n.scrollTop+y));M(A),n.scrollTop=A,o$1=n.scrollTop,K=void 0;}}function nt(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function De(){C$1?.behavior==="smooth"&&(C$1=void 0),Z=false,L||(L=true,ee+=1),B$1!==void 0&&(clearTimeout(B$1),B$1=void 0);}function Le(){let e=f.value;e===null||ee===te||(k!==void 0&&x(),j$1=true,e.scrollTop<=nt()&&Te()&&ke());}function ot(){w=void 0,K=void 0,B$1!==void 0&&(clearTimeout(B$1),B$1=void 0),x(),L=false,Z=false,F=false,ie=void 0,X=void 0,ee+=1,te=-1,pe=-1,j$1=true,oe=false,W=false,C$1=void 0;}function it(){F||(B$1!==void 0&&(clearTimeout(B$1),B$1=void 0),L=false,Z=false,k!==void 0&&(k.attempts=0),Ie());}function we(){F||(B$1!==void 0&&clearTimeout(B$1),B$1=setTimeout(()=>{B$1=void 0,it();},Lt));}function at(){C$1=void 0,it();}function st(e){F=true,De(),ie=e.touches?.[0]?.clientY;}function lt(e){let n=e.touches?.[0]?.clientY;n!==void 0&&(ie!==void 0&&n>ie?Le():ie!==void 0&&n<ie&&l(),ie=n);}function He(){F=false,ie=void 0,we();}function dt(e){De(),e.deltaY<0?Le():e.deltaY>0&&l(),we();}function ut(e){e.pointerType!=="touch"&&(De(),X=e.clientY,we());}function ct(e){e.pointerType==="touch"||!L||X===void 0||(e.clientY<X?Le():e.clientY>X&&l(),X=e.clientY,we());}function Be(e){e.pointerType!=="touch"&&(X=void 0,we());}function ft(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(De(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?Le():l(),we());}function Fe(e="auto"){let n=f.value;if(n===null)return;K=void 0,x();let a=Math.max(0,n.scrollHeight-n.clientHeight);M(a,e),n.scrollTo?.({top:a,behavior:e}),n.scrollTop!==a&&(n.scrollTop=a),o$1=n.scrollTop,T.clear(),ae();}function mt(){let e=f.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function Bt(){let e=f.value;return mt()&&e!==null&&e.scrollHeight>e.clientHeight+1}function Ft(e,n={}){let a=f.value,y=_.get(e);if(a===null||y===void 0||!a.contains(y)||a.clientHeight<=0)return false;x();let I=a.getBoundingClientRect(),A=y.getBoundingClientRect(),D=n.block??"center",Q;D==="start"?Q=a.scrollTop+A.top-I.top:D==="end"?Q=a.scrollTop+A.bottom-I.bottom:D==="nearest"?A.top>=I.top&&A.bottom<=I.bottom?Q=a.scrollTop:A.top<I.top?Q=a.scrollTop+A.top-I.top:Q=a.scrollTop+A.bottom-I.bottom:Q=j({currentScrollTop:a.scrollTop,scrollHeight:a.scrollHeight,targetHeight:A.height,targetTop:A.top,viewportHeight:a.clientHeight,viewportTop:I.top});let Pe=Math.max(0,a.scrollHeight-a.clientHeight),ye=Math.min(Pe,Math.max(0,Q));K=void 0;let Ee=n.behavior??"auto";return M(ye,Ee),a.scrollTo?.({top:ye,behavior:Ee}),a.scrollTop!==ye&&(a.scrollTop=ye),o$1=a.scrollTop,ae(),true}function _t(){T.clear();}function jt(){W=true,ne.value=false;}function Kt(){W=false,le();}function Ut(e,n){let a=_.get(e);if(a!==void 0&&a!==n&&(R?.unobserve(a),E?.unobserve?.(a),v.delete(a),P.delete(e)),n===null){_.delete(e),P.delete(e);return}_.set(e,n),v.set(n,e),R?.observe(n),E?.observe(n),le();}function qt(e,n,a){let y=g$1.get(e);if(a===null){g$1.delete(e);return}g$1.set(e,{element:a,label:n}),re===e&&a.style.setProperty("opacity",String(s)),y?.element!==a&&(a.dataset.imThreadDateSeparator=e);}return provide(ze,{registerMessageNode:Ut,registerDateNode:qt}),watch(()=>t.contentKey,(e,n)=>{if(e===n)return;ot();let a=f.value;a!==null&&(o$1=a.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,n)=>{let a=f.value;if(a===null)return;let y=new Set(n);n.length>0&&e.length>0&&!e.some(be=>y.has(be))&&ot();let A=a.getBoundingClientRect(),D=p(w,H(),{top:A.top,bottom:A.bottom}),Q=ne.value,Pe=n[n.length-1],ye=Pe===void 0?-1:e.indexOf(Pe),Ee=ye<0?[]:e.slice(ye+1).filter(be=>!y.has(be)),gt=W||t.loadingNewer,Gt=e.length===n.length&&e.every(be=>y.has(be))&&e.some((be,qe)=>be!==n[qe]);if(await nextTick(),J)return;if(Gt&&Q&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!gt){Fe();return}let pt=n[0];if(pt!==void 0&&e.indexOf(pt)>0&&(oe=false,Re(D)),Ee.length>0){if(gt){W=false,k===void 0&&Ne(D),ne.value=false,le();return}(Q||Ee.some(qe=>t.shouldFollowAppendedMessage?.(qe)===true))&&t.followNewMessages?Fe():T.add(Ee);}le();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,n)=>{e||!n||!W||he(()=>{t.loadingNewer||(W=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,n)=>{e||!n||!oe||he(()=>{t.loadingOlder||(oe=false);});},{flush:"pre"}),onMounted(()=>{let e=f.value;if(e!==null){if(o$1=e.scrollTop,e.addEventListener("scroll",c,{passive:true}),e.addEventListener("scrollend",at,{passive:true}),e.addEventListener("touchstart",st,{passive:true}),e.addEventListener("touchmove",lt,{passive:true}),e.addEventListener("touchend",He,{passive:true}),e.addEventListener("touchcancel",He,{passive:true}),e.addEventListener("wheel",dt,{passive:true}),e.addEventListener("pointerdown",ut,{passive:true}),e.addEventListener("pointermove",ct,{passive:true}),e.addEventListener("pointerup",Be,{passive:true}),e.addEventListener("pointercancel",Be,{passive:true}),e.addEventListener("keydown",ft),typeof globalThis.ResizeObserver=="function"){E=new globalThis.ResizeObserver(()=>{J||f.value===null||ae();}),E.observe(e),O.value!==null&&E.observe(O.value);for(let n of _.values())E.observe(n);}if(typeof globalThis.IntersectionObserver=="function"){R=new globalThis.IntersectionObserver(n=>{for(let a of n){let y=v.get(a.target);y!==void 0&&(a.isIntersecting?P.add(y):P.delete(y));}G=true,le();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let n of _.values())R.observe(n);}le();}}),onBeforeUnmount(()=>{J=true;let e=f.value;e!==null&&e.removeEventListener("scroll",c),e!==null&&(e.removeEventListener("scrollend",at),e.removeEventListener("touchstart",st),e.removeEventListener("touchmove",lt),e.removeEventListener("touchend",He),e.removeEventListener("touchcancel",He),e.removeEventListener("wheel",dt),e.removeEventListener("pointerdown",ut),e.removeEventListener("pointermove",ct),e.removeEventListener("pointerup",Be),e.removeEventListener("pointercancel",Be),e.removeEventListener("keydown",ft)),B$1!==void 0&&clearTimeout(B$1),x(),Me(),E?.disconnect(),R?.disconnect(),q$1(),_.clear(),v.clear(),P.clear(),g$1.clear(),T.clear();}),m$1({getViewportElement:()=>f.value,clearNewMessageBadge:_t,clearActiveDate:q$1,isAtBottom:computed(()=>ne.value),isMeasurable:mt,isScrollable:Bt,newMessageCount:computed(()=>p$1.value),prepareHistoryPageAppend:jt,cancelHistoryPageAppend:Kt,trackRemoteMessageIds:(e,n)=>T.trackRemote(e,n),scrollToLatest:Fe,scrollToMessage:Ft,focusViewport:()=>f.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:f,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:O,"data-im-thread-viewport-content":""},u.default?.())])}});var Ht=Symbol("ImThreadSurfaceContext");function fr(t){if(typeof t.getState!="function")throw new TypeError("ImThreadSurfaceContext.getState \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.actions?.loadOlder!="function")throw new TypeError("ImThreadSurfaceContext.actions.loadOlder \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.formatDate!="function")throw new TypeError("ImThreadSurfaceContext.formatDate \u5FC5\u987B\u662F\u51FD\u6570");return Object.freeze({...t,actions:Object.freeze({...t.actions})})}function mr(t){provide(Ht,t);}function Je(){let t=inject(Ht);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var Ze=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),et=Object.freeze({enabled:true,maxFillPages:8}),vr=8,hr=160;function Tr(t,i){return t?.conversationType===i.conversationType&&t.conversationId===i.conversationId}var yr=defineComponent({name:"ImThreadSurface",props:{conversation:{type:Object,required:true},context:{type:Object,default:void 0},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0},viewportOptions:{type:Object,default:()=>({})},initialViewportOptions:{type:Object,default:()=>({})},hooks:{type:Object,default:void 0}},setup(t,{expose:i$1,slots:m}){let u=t.context??Je(),f=ref(null),O=ref(0),_=ref(true),v=[],P,g=0,o=0,d=null,w="",K="",E="",R=false,G=false,S=ref(false),$=ref(""),J=ref(false),C,re,s=computed(()=>u.getState()),W=computed(()=>s.value.pageVisible??u.isPageVisible?.()??true),oe=computed(()=>s.value.pageEngaged??u.isPageEngaged?.()??true),j=computed(()=>Tr(s.value.activeConversation,t.conversation)),L=computed(()=>({...Ze,...t.viewportOptions})),Z=computed(()=>{let r=t.initialViewportOptions.maxFillPages??et.maxFillPages;return {enabled:t.initialViewportOptions.enabled??et.enabled,maxFillPages:Number.isFinite(r)?Math.max(0,Math.floor(r)):et.maxFillPages}}),F=computed(()=>!j.value||!s.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ee=computed(()=>j.value?i({messages:s.value.messages,entryUnread:s.value.entryUnread,formatDate:u.formatDate,leadingItems:u.leadingItems?.(),beforeMessageItems:u.beforeMessageItems}):[]),te=computed(()=>ee.value.flatMap(r=>r.kind==="message"||r.kind==="system"?[r.message.id]:[]));function pe(){C!==void 0&&(clearTimeout(C),C=void 0),re!==void 0&&(clearTimeout(re),re=void 0);}function B(r=false){if(pe(),J.value=false,r){f.value?.clearActiveDate(),$.value="";return}re=setTimeout(()=>{re=void 0,!J.value&&(f.value?.clearActiveDate(),$.value="");},hr);}function ie(r){if(r===null){B();return}pe(),$.value=r.label,J.value=true;let l=L.value.activeDateIdleDelay,c=Number.isFinite(l)?Math.max(0,l):Ze.activeDateIdleDelay;C=setTimeout(()=>{C=void 0,B();},c);}async function X(r,l){t.hooks?.beforeAction?.(r);try{let c=await l();return t.hooks?.afterAction?.(r,c),c}catch(c){throw t.hooks?.onError?.(r,c),c}}function k(r="automatic"){return !j.value||s.value.loading||!s.value.hasOlder?Promise.resolve(0):X({kind:"load-older",source:r},()=>u.actions.loadOlder())}function z(){let r=u.actions.loadNewer,l=s.value.loadingNewer??s.value.loading;return !j.value||l||!s.value.hasNewer||r===void 0?Promise.resolve(0):X({kind:"load-newer"},()=>r())}async function ne(r){for(let l=0;l<vr;l+=1){if(!j.value)return;let c=r==="older"?s.value.hasOlder:s.value.hasNewer,M=r==="older"?s.value.olderError:s.value.newerError;if(!c||M!==null||(r==="older"?await k("user-scroll"):await z())>0)return;let x=r==="older"?s.value.hasOlder:s.value.hasNewer,Y=r==="older"?s.value.olderError:s.value.newerError;if(!x||Y!==null)return}}async function p(){return !j.value||u.actions.loadNewer===void 0?0:X({kind:"load-newer"},()=>u.actions.retryNewer?.()??u.actions.loadNewer?.({force:!0})??Promise.resolve(0))}async function T(){if(!j.value)return 0;let r=F.value,l=++g;d=null,E="";let c;try{c=await X({kind:"retry-older"},()=>u.actions.retryOlder?.()??u.actions.loadOlder({force:!0}));}catch(M){throw ae(r,l)&&(E=r),M}return ae(r,l)&&!S.value&&(d=null,Se()),c}async function h(){if(!j.value)return false;let r=F.value,l=++o;return Te(true),R=true,w=r,K=Me(s.value.entryUnread),!await X({kind:"jump-to-latest"},()=>u.actions.jumpToLatest?.()??Promise.resolve(!s.value.isHistoryWindow))||!q(r,l)||(await nextTick(),!q(r,l))?false:(f.value?.scrollToLatest(),true)}function H(r){_.value=r.isAtBottom,O.value=r.newMessageCount,Se();}function b(r,l){return f.value?.scrollToMessage(r,l)??false}function q(r,l){return !G&&o===l&&F.value===r&&j.value}async function V(r,l,c,M){for(let N=0;N<60;N+=1){if(!q(r,l))return false;if(b(c,M))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}async function U(r,l,c){let M=f.value;if(M===null||!M.isMeasurable()||M.isScrollable())return true;let N=0,x=!s.value.hasOlder,Y=!s.value.hasNewer||u.actions.loadNewer===void 0,ce=async()=>(await nextTick(),await nextTick(),V(r,l,c,{behavior:"auto",block:"center"})),de=async ue=>{if(!q(r,l)||N>=Z.value.maxFillPages)return false;let Re=0;if(ue==="older"){if(x||!s.value.hasOlder)return false;Re=await k(),x=!s.value.hasOlder;}else {if(Y||!s.value.hasNewer)return false;M.prepareHistoryPageAppend();try{Re=await z();}catch(Ne){throw M.cancelHistoryPageAppend(),Ne}Re<=0&&!s.value.hasNewer&&M.cancelHistoryPageAppend(),Y=!s.value.hasNewer;}return N+=1,Re>0?ce():!(ue==="older"?x:Y)};!x&&!await de("older")&&(x=true),!Y&&!await de("newer")&&(Y=true);let Ie="older";for(;q(r,l)&&N<Z.value.maxFillPages&&M.isMeasurable()&&!M.isScrollable()&&(!x||!Y);){let ue=Ie==="older"?x?"newer":"older":Y?"older":"newer";Ie=ue==="older"?"newer":"older",await de(ue)||(ue==="older"?x=true:Y=true);}return q(r,l)}async function Oe(r,l={behavior:"auto",block:"center"}){if(!j.value||r==="")return false;let c=F.value,M=++o;if(!te.value.includes(r)){let Y=u.actions.loadAround;if(Y===void 0||!await X({kind:"locate-message",messageId:r},()=>Y(r))||!q(c,M))return false}return !await V(c,M,r,{...l,behavior:"auto"})||!await U(c,M,r)?false:V(c,M,r,l)}function Ve(){P!==void 0&&(clearTimeout(P),P=void 0);}function ve(){if(Ve(),!S.value)return;let r=t.readActions;if(r===void 0||v.length===0)return;let l=Number.isFinite(L.value.visibleReadDelay)?Math.max(0,L.value.visibleReadDelay):Ze.visibleReadDelay;P=setTimeout(()=>{if(P=void 0,!j.value||!oe.value)return;let c=v[v.length-1];if(c===void 0)return;let M=r.resolveTarget===void 0?c:r.resolveTarget(c);M!=null&&Promise.resolve(r.markRead(M)).catch(N=>{t.hooks?.onError?.({kind:"visible-range",messageIds:v},N);});},l);}function Ue(r){v=Object.freeze([...r]);let l={kind:"visible-range",messageIds:v};t.hooks?.beforeAction?.(l);try{u.actions.onVisibleRange?.(v),t.hooks?.afterAction?.(l,void 0);}catch(c){throw t.hooks?.onError?.(l,c),c}S.value?ve():Se();}function ae(r,l){return !G&&g===l&&F.value===r&&!R}function he(r,l){ae(r,l)&&(w=r,K=Me(s.value.entryUnread),S.value=true,ve());}function Me(r){return r.state!=="located"?r.state:`${r.state}:${r.firstMessageId}`}async function le(r,l,c){for(let M=0;M<60;M+=1){if(!ae(r,l))return false;if(f.value?.scrollToMessage(c,{behavior:"auto",block:"center"})===true)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}function Se(){let r=F.value,l=Me(s.value.entryUnread);if(r===""||s.value.loading||s.value.error!==null&&s.value.messages.length===0||w===r&&(K===l||R)||E===r||d!==null)return;if(!Z.value.enabled){w=r,K=l,S.value=true,ve();return}let c=++g;R=false,S.value=false;let M=(async()=>{if(await nextTick(),!ae(r,c))return;let N=f.value;if(N===null||!N.isMeasurable())return;let x=s.value.entryUnread;if(x.state==="located"&&!te.value.includes(x.firstMessageId))return;let Y=x.state==="located"?await le(r,c,x.firstMessageId):false;if(x.state==="located"&&!Y)return;Y||N.scrollToLatest();let ce=0;for(;ae(r,c)&&ce<Z.value.maxFillPages&&s.value.error===null&&s.value.hasOlder&&N.isMeasurable()&&!N.isScrollable();)if(await k(),!ae(r,c)||(ce+=1,await nextTick(),await nextTick(),!N.isMeasurable()))return;if(!ae(r,c)||!N.isMeasurable())return;let de=s.value.entryUnread;if(de.state==="located"){if(!te.value.includes(de.firstMessageId)||!await le(r,c,de.firstMessageId))return}else N.scrollToLatest();await nextTick(),he(r,c);})().catch(()=>{ae(r,c)&&(E=r);}).finally(()=>{d===M&&(d=null);});d=M;}function Te(r,l=false){g+=1,d=null,R=false,S.value=r,r||(w="",K="",l||(E="")),Ve();}function ke(){if(S.value)return;let r=F.value;R=true,g+=1,d=null,w=r,S.value=true,ve();}let Ce=Object.freeze({getViewportElement:()=>f.value?.getViewportElement()??null,loadOlder:k,retryOlder:T,loadNewer:z,retryNewer:p,jumpToLatest:h,scrollToMessage:b,locateMessage:Oe,focusViewport:()=>f.value?.focusViewport()});return i$1(Ce),watch(oe,r=>{r&&S.value?ve():Ve();}),watch([()=>s.value.activeRemoteMessageRevision??0,f,F],()=>{let r=f.value;if(r===null||!j.value)return;let l=u.actions.drainActiveRemoteMessageIds?.()??[];r.trackRemoteMessageIds(l,{isAtBottom:_.value,isHistoryWindow:s.value.isHistoryWindow,isPageVisible:W.value})&&(_.value=false);},{flush:"post"}),watch([F,()=>s.value.loading,()=>s.value.error,()=>te.value.length,()=>s.value.hasOlder,()=>Me(s.value.entryUnread),Z],([r,l,c,,,M],[N,,,,,x])=>{if(r!==N&&(o+=1,Te(false),B(true),f.value?.clearNewMessageBadge(),O.value=0,_.value=true),r!==""&&r===N&&M!==x&&!R&&M.startsWith("located:")&&(w="",K="",S.value=false),r===""){Te(false);return}if(c!==null&&s.value.messages.length===0){S.value||Te(false,true);return}l||Se();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{G=true,o+=1,Te(false),B(true);}),()=>{let r={conversation:t.conversation,state:s.value,items:ee.value,actions:Ce,initialViewportSettled:F.value!==""&&(s.value.messages.length===0?!s.value.loading&&s.value.error===null&&!s.value.hasOlder:S.value&&w===F.value)},l=[m.header?.(r),m["before-list"]?.(r)];if(!j.value)l.push(m.unsupported?.(r)??h$1("div",{"data-im-thread-unsupported":""}));else if(!s.value.ready&&s.value.loading)l.push(m.loading?.(r)??h$1("div",{"data-im-thread-loading":""}));else if(s.value.error!==null&&s.value.messages.length===0)l.push(m.error?.(r)??h$1("div",{"data-im-thread-error":""}));else if(s.value.ready&&s.value.messages.length===0&&!s.value.hasOlder)l.push(m.empty?.(r)??h$1("div",{"data-im-thread-empty":""}));else {let c=h$1(Xe,{ref:f,messageIds:te.value,contentKey:`${t.conversation.conversationType}\0${t.conversation.conversationId}`,loadingOlder:s.value.loadingOlder??s.value.loading,hasNewer:s.value.hasNewer,loadingNewer:s.value.loadingNewer??s.value.loading,followThreshold:L.value.followThreshold,olderPrefetchThreshold:L.value.olderPrefetchThreshold,visibleMargin:L.value.visibleMargin,activeDateOffset:L.value.activeDateOffset,activeDateEnabled:m["active-date"]!==void 0,resizeFollowEnabled:S.value,followNewMessages:W.value,shouldFollowAppendedMessage:M=>{let N=s.value.messages.find(x=>x.id===M);return N===void 0?false:u.shouldFollowMessage?.(N)===true},onReachStart:()=>{ne("older").catch(()=>{});},onReachEnd:()=>{ne("newer").catch(()=>{});},onSettled:H,onUserScroll:ke,onActiveDateChange:ie,onVisibleRange:Ue,onNewMessageCount:M=>{O.value=M;}},{default:()=>[m["viewport-before"]?.(r),h$1(Ye,{items:ee.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:m.item,"date-separator":m["date-separator"],"entry-unread":m["entry-unread"],encryption:m.encryption,system:m.system,message:m.message,"recalled-message":m["recalled-message"],"deleted-message":m["deleted-message"],"unsupported-body":m["unsupported-body"]}),m["viewport-after"]?.(r)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[m["active-date"]?.({label:$.value,visible:J.value&&$.value!==""}),c])),s.value.error!==null&&l.push(m.error?.(r)??h$1("div",{"data-im-thread-error":""}));}return l.push(m["after-list"]?.(r),m["jump-to-latest"]?.({...r,count:O.value,visible:!_.value||s.value.isHistoryWindow}),m["context-menu"]?.(r),m.composer?.(r)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},l)}}});function br(t){let i=new Map;for(let u of t){if(i.has(u.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${u.kind}`);i.set(u.kind,u.component);}let m=Object.freeze([...i.keys()]);return Object.freeze({kinds:m,resolve:u=>i.get(u)})}var wr=140,Mr=120;function Ke(t,i){if(t.width<=0||t.height<=0)return 0;let m=Math.max(0,Math.min(t.right,i.right)-Math.max(t.left,i.left)),u=Math.max(0,Math.min(t.bottom,i.bottom)-Math.max(t.top,i.top));return Math.min(1,m*u/(t.width*t.height))}function tt(t,i){return {x:t.x,y:t.top-i,top:t.top-i,bottom:t.bottom+i,left:t.left,right:t.right,width:t.width,height:t.height+i*2,toJSON:()=>({})}}function rt(t){let i=Math.max(0,t.scrollIdleMs??wr),m=Math.max(0,t.visibilityDwellMs??Mr),u=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),f=Math.max(0,t.revealMarginPx??0),O=Math.max(0,t.preloadMarginPx??0),_=Math.max(f,O),v=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),P=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),g=new Map,o=new Map,d=reactive(new Set),w=new Set,K=new Set,E=[],R=null,G=null,S=null,$=false,J=false,C=false,re=false,s,W;function oe(){s!==void 0&&clearTimeout(s),s=void 0;}function j(){W!==void 0&&clearTimeout(W),W=void 0;}function L(p=false){if(!p&&G!==null||R===null)return;let T=R.getBoundingClientRect(),h=tt(T,_);for(let[H,b]of g){let q=H.getBoundingClientRect();b.ratio=Ke(q,T),b.intersecting=b.ratio>0,b.revealIntersecting=_>0?Ke(q,h)>0:b.intersecting&&b.ratio>=u;}}function Z(p){return p.intersecting&&p.ratio>=u}function F(){for(let[p,T]of g)!T.revealIntersecting||d.has(T.key)||_>f&&(f===0&&!Z(T)||f>0&&(R===null||Ke(p.getBoundingClientRect(),tt(R.getBoundingClientRect(),f))<=0))||(d.add(T.key),t.onRevealed?.(T.item));}function ee(p,T=false){let h=new Set(p.map(b=>b.key));if(!(!(h.size!==K.size||[...h].some(b=>!K.has(b)))&&!T)){K.clear();for(let b of h)K.add(b);t.onSettledVisibleChange?.(p.map(b=>b.item));}}function te(p,T=false){!T&&p.length===E.length&&p.every((h,H)=>h.key===E[H]?.key&&h.item===E[H]?.item)||(E=p,t.onSettledPreloadChange?.(p.map(h=>h.item)));}function pe(){if(C||$)return;let p=J;J=false,L(),F();let T=R?.getBoundingClientRect(),h=T===void 0?0:(T.top+T.bottom)/2,H=[...g.entries()].filter(([,b])=>Z(b)).sort(([b],[q])=>{let V=b.getBoundingClientRect(),U=q.getBoundingClientRect();return Math.abs((V.top+V.bottom)/2-h)-Math.abs((U.top+U.bottom)/2-h)}).slice(0,P).map(([,b])=>b);if(ee(H,p),t.onSettledPreloadChange!==void 0&&T!==void 0){let b=tt(T,O),q=[...g.entries()].filter(([,V])=>V.revealIntersecting).map(([V,U])=>({target:U,rect:V.getBoundingClientRect()})).filter(({target:V,rect:U})=>Z(V)||O>0&&Ke(U,b)>0).sort((V,U)=>Number(Z(U.target))-Number(Z(V.target))||Math.abs((V.rect.top+V.rect.bottom)/2-h)-Math.abs((U.rect.top+U.rect.bottom)/2-h)).slice(0,v).map(({target:V})=>V);te(q,p);}for(let b of H)w.has(b.key)||(w.add(b.key),t.onActivated?.(b.item));}function B(){C||$||(j(),W=setTimeout(()=>{W=void 0,pe();},m));}function ie(){C||(J=true,X(true),te([]),L(),F(),ee([]),j(),oe(),s=setTimeout(()=>{s=void 0,X(false),B();},i));}function X(p){$!==p&&($=p,t.onScrollingChange?.(p));}function k(){R?.removeEventListener("scroll",ie),G?.disconnect(),S?.disconnect(),G=null,S=null,R=null;}function z(p=true){if(C)return;let T=t.getRoot();if(!(T===R&&R!==null)){if(te([]),k(),R=T,R===null){p&&!re&&(re=true,Promise.resolve().then(()=>{re=false,C||(z(false),B());}));return}if(R.addEventListener("scroll",ie,{passive:true}),typeof IntersectionObserver<"u"){G=new IntersectionObserver(h=>{for(let H of h){let b=g.get(H.target);b!==void 0&&(b.intersecting=H.isIntersecting,b.ratio=H.intersectionRatio,_===0&&(b.revealIntersecting=H.isIntersecting&&H.intersectionRatio>=u));}F(),B();},{root:R,threshold:[0,u,1]}),_>0&&(S=new IntersectionObserver(h=>{for(let H of h){let b=g.get(H.target);b!==void 0&&(b.revealIntersecting=H.isIntersecting);}F(),B();},{root:R,rootMargin:`${_}px 0px`,threshold:0}));for(let h of g.keys())G.observe(h);for(let h of g.keys())S?.observe(h);}else L(),F();}}function ne(p){te(E.filter(T=>T.key!==p)),d.delete(p),w.delete(p),K.delete(p);}return {register(p,T){if(C)return;let h=t.getKey(p),H=d.has(h),b=w.has(h),q=T===null?void 0:g.get(T);q!==void 0&&q.key!==h&&(o.delete(q.key),g.delete(T),ne(q.key));let V=o.get(h);if(V!==void 0&&V!==T&&(G?.unobserve(V),S?.unobserve(V),g.delete(V),o.delete(h)),T===null){V!==void 0&&(G?.unobserve(V),S?.unobserve(V),g.delete(V),o.delete(h)),ne(h);return}let U=g.get(T);if(U?.key===h&&U.item===p){z();return}g.set(T,{item:p,key:h,intersecting:U?.key===h?U.intersecting:false,ratio:U?.key===h?U.ratio:0,revealIntersecting:U?.key===h?U.revealIntersecting:false}),o.set(h,T),z(),G?.observe(T),S?.observe(T),L(true),F(),H&&t.onRevealed?.(p),b&&t.onActivated?.(p),B();},isRevealed:p=>d.has(t.getKey(p)),isActivated:p=>w.has(t.getKey(p)),isSettledVisible:p=>K.has(t.getKey(p)),isScrolling:()=>$,notifyScroll:ie,refresh(){z(),L(true),F(),B();},reset(){oe(),j(),X(false),J=false,ee([]),te([]),k(),g.clear(),o.clear(),d.clear(),w.clear();},dispose(){C||(oe(),j(),X(false),J=false,ee([]),te([]),k(),g.clear(),o.clear(),d.clear(),w.clear(),C=true);}}}function Sr(t){let i=new Map,m=new Map,u=false,f=v=>{let P=i.get(v.channel);return P===void 0?v.channel:`${v.channel}\0${P.getKey(v.item)}`},O=rt({getRoot:t.getRoot,getKey:f,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:v=>{for(let P of i.values())P.onScrollingChange?.(v);},onRevealed:v=>i.get(v.channel)?.onRevealed?.(v.item),onActivated:v=>i.get(v.channel)?.onActivated?.(v.item),onSettledPreloadChange:v=>{for(let[P,g]of i){let o=v.filter(d=>d.channel===P).map(d=>d.item);g.onSettledPreloadChange?.(o.slice(0,Math.max(0,g.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:v=>{for(let[P,g]of i){let o=v.filter(w=>w.channel===P).map(w=>w.item),d=g.maxSettledVisible===void 0?o:o.slice(0,g.maxSettledVisible);g.onSettledVisibleChange?.(d);}}});function _(v){return P=>{if(u)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(i.has(v))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${v}`);i.set(v,P);let g=new Map;m.set(v,g);let o=false,d=E=>({channel:v,item:E});function w(){for(let E of g.values())O.register(E.target,null);g.clear(),P.onScrollingChange?.(false),P.onSettledVisibleChange?.([]),P.onSettledPreloadChange?.([]);}return {register(E,R){if(o||u)return;let G=P.getKey(E),S=g.get(G);if(R===null){S!==void 0&&(O.register(S.target,null),g.delete(G));return}let $=S?.target.item===E?S.target:d(E);g.set(G,{target:$,element:R}),O.register($,R);},isRevealed:E=>O.isRevealed(d(E)),isActivated:E=>O.isActivated(d(E)),isSettledVisible:E=>O.isSettledVisible(d(E)),isScrolling:O.isScrolling,notifyScroll:O.notifyScroll,refresh:O.refresh,reset:w,dispose(){o||(w(),o=true,i.delete(v),m.delete(v));}}}}return {createFactory:_,refresh:O.refresh,dispose(){if(!u){for(let v of m.values())for(let P of v.values())O.register(P.target,null);for(let v of i.values())v.onSettledPreloadChange?.([]);m.clear(),i.clear(),O.dispose(),u=true;}}}}export{We as ImThreadBodySwitch,Ye as ImThreadItems,yr as ImThreadSurface,Xe as ImThreadViewport,fr as createImThreadSurfaceContext,br as createMessageRendererRegistry,Sr as createThreadVisibilityTargetGroup,rt as createThreadVisibilityTargets,mr as provideImThreadSurfaceContext,zt as useImText,Je as useImThreadSurfaceContext,Xt as useOptionalImThreadReadActions};
|
package/dist/chat-kit.d.ts
CHANGED
|
@@ -2287,6 +2287,11 @@ type ImEvent = {
|
|
|
2287
2287
|
type: 'session:updated';
|
|
2288
2288
|
session: ImSession;
|
|
2289
2289
|
conversation: ConversationRef;
|
|
2290
|
+
}
|
|
2291
|
+
/** 已打开聊天的资料或权限变化,不代表新增会话列表项。 */
|
|
2292
|
+
| {
|
|
2293
|
+
type: 'conversation-context:updated';
|
|
2294
|
+
conversation: ConversationRef;
|
|
2290
2295
|
} | {
|
|
2291
2296
|
type: 'session:removed';
|
|
2292
2297
|
conversationId: string;
|
|
@@ -4756,6 +4761,11 @@ interface ConversationOpenOptions {
|
|
|
4756
4761
|
*/
|
|
4757
4762
|
interface ConversationHandleSnapshot<TType extends ProductHandleConversationType = ProductHandleConversationType> {
|
|
4758
4763
|
ref: ConversationRef<TType>;
|
|
4764
|
+
/** 已校验的聊天标题与头像;即使尚无会话列表项,宿主也可正常展示聊天头部。 */
|
|
4765
|
+
display?: Readonly<{
|
|
4766
|
+
title: string;
|
|
4767
|
+
avatar?: string;
|
|
4768
|
+
}>;
|
|
4759
4769
|
messages: readonly ImMessageView[];
|
|
4760
4770
|
/** 本次打开时冻结的未读入口;只用于产品 UI 分隔线,不作为 SDK 已读真相。 */
|
|
4761
4771
|
entryUnread: ConversationEntryUnreadSnapshot;
|
|
@@ -6340,13 +6350,18 @@ interface AdvancedChannelsApi extends ImDirectoryApi<'channel'> {
|
|
|
6340
6350
|
/** advanced 会话门面:保留兼容列表动作,同时暴露与 default 共用的背景产品能力。 */
|
|
6341
6351
|
interface AdvancedConversationsApi extends ImConversationsApi, ImConversationBackgroundApi {
|
|
6342
6352
|
/**
|
|
6343
|
-
* 为产品 `openConversation`
|
|
6353
|
+
* 为产品 `openConversation` 完成本地对象/资料/访问校验;打开本身不创建会话列表项。
|
|
6344
6354
|
*
|
|
6345
6355
|
* advanced/testing 的原始 handle 测试不得把它当成第二个宿主入口。
|
|
6346
6356
|
*
|
|
6347
6357
|
* @internal
|
|
6348
6358
|
*/
|
|
6349
6359
|
ensureOpenableConversation: (ref: ConversationRef) => Promise<ConversationRef<'direct' | 'group' | 'channel' | 'robot'>>;
|
|
6360
|
+
/**
|
|
6361
|
+
* 读取已有会话或本次账号内已校验的目标资料;返回值不代表列表成员资格。
|
|
6362
|
+
* @internal
|
|
6363
|
+
*/
|
|
6364
|
+
getContext: (ref: ConversationRef) => ImSession | undefined;
|
|
6350
6365
|
}
|
|
6351
6366
|
/**
|
|
6352
6367
|
* 普通宿主的真实 default client。
|
package/dist/chat-kit.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{q as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,p as DEFAULT_LOADING_SHOW_DELAY_MS,v as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_HEIGHT,u as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_WIDTH,e as MINI_PROGRAM_LANG_NUMBERS,M as SPIKE_STEP,I as calculateMediaBox,t as canPromoteMediaPresentationSource,z as captureRuntimeClientOperation,y as captureRuntimeOperation,n as channelMiniProgramRelKey,x as createConversationPrefetchController,r as createDelayedLoadingIndicator,G as createLinkMatcher,f as csvIncludes,d as decideChannelMiniProgramRelOpen,K as formatFileSize,J as formatMediaDuration,L as getFileExtension,F as hasLinkCandidate,D as highlightSegments,a as isMiniProgramShowTypeOpenable,A as mediaService,E as normalizeLinkHref,P as placeholderWaveform,B as readService,O as resampleWaveform,s as resolveBestMediaPresentationSource,h as resolveChannelMiniProgramRelIcon,g as resolveChannelMiniProgramRelName,j as resolveChannelMiniProgramRelOpenSurface,i as resolveChannelMiniProgramRelUrl,k as resolveChannelPinnedGameCopy,o as resolveConversationListPresentation,H as resolveMediaPresentation,c as resolveMiniProgramFloatLinkUrl,w as resolveMiniProgramGamePreviewLayout,b as resolveMiniProgramOpenUrl,C as resolveQuotedMessagePresentation,m as resolveVisibleChannelMiniProgramRels,l as sortChannelMiniProgramFloatingItems,N as spikeCountForDuration}from'./chunk-
|
|
1
|
+
export{q as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,p as DEFAULT_LOADING_SHOW_DELAY_MS,v as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_HEIGHT,u as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_WIDTH,e as MINI_PROGRAM_LANG_NUMBERS,M as SPIKE_STEP,I as calculateMediaBox,t as canPromoteMediaPresentationSource,z as captureRuntimeClientOperation,y as captureRuntimeOperation,n as channelMiniProgramRelKey,x as createConversationPrefetchController,r as createDelayedLoadingIndicator,G as createLinkMatcher,f as csvIncludes,d as decideChannelMiniProgramRelOpen,K as formatFileSize,J as formatMediaDuration,L as getFileExtension,F as hasLinkCandidate,D as highlightSegments,a as isMiniProgramShowTypeOpenable,A as mediaService,E as normalizeLinkHref,P as placeholderWaveform,B as readService,O as resampleWaveform,s as resolveBestMediaPresentationSource,h as resolveChannelMiniProgramRelIcon,g as resolveChannelMiniProgramRelName,j as resolveChannelMiniProgramRelOpenSurface,i as resolveChannelMiniProgramRelUrl,k as resolveChannelPinnedGameCopy,o as resolveConversationListPresentation,H as resolveMediaPresentation,c as resolveMiniProgramFloatLinkUrl,w as resolveMiniProgramGamePreviewLayout,b as resolveMiniProgramOpenUrl,C as resolveQuotedMessagePresentation,m as resolveVisibleChannelMiniProgramRels,l as sortChannelMiniProgramFloatingItems,N as spikeCountForDuration}from'./chunk-JA5TKCQ2.js';export{j as DEFAULT_EMOJI_ASSET_BASE,i as EMOJI_CATALOG,c as EMOJI_GAME_DICE_STABLE_KEY,b as EMOJI_GAME_RPS_STABLE_KEY,m as EMOJI_TOKEN_RE,N as MAX_BATCH_FILES,a as MAX_RECENT_EMOJI_COUNT,g as UNICODE_EMOJI_CATALOG,M as blockReasonForChannelSession,L as blockReasonForChannelState,T as blockReasonForGroupState,W as blockReasonForSession,G as canEditMessage,w as canPinChannelMessage,v as canPinGroupMessage,x as canPinMessage,F as canRecallMessage,da as cancelMediaUpload,R as classifyGifFile,Q as classifyMediaFile,s as countUnreadConversations,u as createChatRuntime,p as createEmojiMatcher,I as decideConversationAction,K as decideMemberTargetAction,J as decideMessageAction,l as emojiAssetUrl,n as emojiUrlByCode,Da as fetchConversationFileBatch,Ea as fetchConversationImageBatch,Ba as fetchConversationMessageBatch,Fa as fetchConversationVideoBatch,Ga as fetchConversationVoiceBatch,Ha as fetchNextConversationSearchBatch,r as formatConversationUnreadBadge,ga as forwardService,o as hasEmojiCandidate,S as isGifFile,y as isPinnedMessageProtected,_ as isVoiceStorageConfigured,O as mediaBatchBudgetBytes,la as messageService,e as parseUnicodeEmojiCode,qa as pinnedMessageService,d as prependRecentEmoji,Aa as profileService,Z as replaceInterruptedMediaFile,U as requiresConversationEncryption,B as resolveChannelMemberAvatarUrl,A as resolveChannelMemberDisplayName,k as resolveEmojiToken,E as resolveFriendDisplayName,ra as resolveImProfileAccessDestination,z as resolveMemberDisplayName,t as resolveMessageNotificationDecision,D as resolvePublicNickname,C as resolveSenderAvatarUrl,q as resolveStandaloneEmojiMessage,h as resolveUnicodeEmoji,ea as retryMessage,P as runMediaSendBatch,ca as sendAsFilesBatch,H as sendBlockReasonForDecision,aa as sendMediaAlbum,Y as sendMediaFile,ba as sendMediaFilesBatch,X as sendText,$ as sendVoice,V as supportsConversationMention,f as unicodeEmojiTextFromCode}from'./chunk-HSVVRLGM.js';export{C as createNewMessageBadgeController,i as createThreadItems,f as formatChatDateSeparator,e as formatConversationDisplayTime,c as getLocalDayKey,l as isMessageLocateScrollProtected,v as isMessageTailChangeFromOlderWindowTrim,k as isMessageViewportMeasurable,B as isMessageVisibleForNewMessageBadge,x as loadOlderUntilBoundary,p as refreshPrependMessageAnchorPosition,j as resolveCenteredMessageScrollTop,a as resolveDisplayTimestamp,g as resolveImThreadActiveDate,h as resolveMessageBodyKind,b as resolveMessageTimelineTimestamp,n as resolvePrependMessageAnchor,q as resolvePrependMessageAnchorAdjustment,o as resolvePrependMessageAnchorPosition,s as resolveSurvivingMessageAnchorAdjustment,r as resolveVisibleMessageAnchorPositions,t as shouldCompleteInitialViewport,y as shouldFillInitialHistoryViewport,u as shouldFollowIncomingMessage,z as shouldLoadNewerHistoryPage,m as shouldPrefetchOlderHistory,w as shouldRestoreMessageViewportFocus,d as shouldShowChatDateSeparator,A as shouldTrackRemoteMessageForBadge}from'./chunk-OYH7COTJ.js';import'./chunk-SEHHXKP7.js';import'./chunk-MIFIQ45I.js';import'./chunk-GAAHNTJM.js';export{va as canTransmit,ta as canTransmitByType,ua as canTransmitContent,sa as requiresForwardTypeConfirmation}from'./chunk-QQ23QYWK.js';import'./chunk-WOT6VMZA.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {wa as wa$1,G as G$1,J as J$1,f,g,i,Y as Y$1,Z as Z$1,aa as aa$1,ba as ba$1,W as W$1,X as X$1,L as L$1,M,F as F$1,I,m,e,K,H as H$1,N,P,R,Q as Q$1,S,T as T$1,U,V as V$1,ia as ia$1,ja as ja$1,xb,Ha as Ha$1,Ga as Ga$1,Fa as Fa$1,ga as ga$1,ka as ka$1,ea as ea$1,Ea as Ea$1,_,$ as $$1,l,s,Ca as Ca$1,Ba as Ba$1,ca as ca$1,da as da$1}from'./chunk-CIY4WBFJ.js';import*as V from'node-forge';import {deleteDB,openDB}from'idb';function wi(e,n=async t=>{let{createBrowserApiProtocolClient:r}=await import('./browser-YLMJKRLM.js');return r(t)}){let t=null;function r(){if(t!==null)return t;let o=n(e);return t=o,o.catch(()=>{t===o&&(t=null);}),o}return async(o,i)=>(await r())(o,i)}var F=class extends Error{code;constructor(n,t,r){super(t??n,r),this.name="MediaTransferError",this.code=n;}};function Pi(e){return e instanceof F?e.code:void 0}var Ii=3600*1e3,vi=300*1e3;function le(...e){for(let n of e){if(typeof n!="string"&&typeof n!="number")continue;let t=String(n).trim();if(t!=="")return t}return ""}function Si(e){let n=Number(e);if(!(!Number.isFinite(n)||n<=0))return n>1e12?n/1e3:n}function Ai(e){let n=e.replace(/\/+$/,"");return n===""?"":/^https?:\/\//i.test(n)?n:`https://${n}`}function fr(e){if(e===null||typeof e!="object")throw new F("credentials-invalid","S3 \u4E0A\u4F20\u51ED\u8BC1\u683C\u5F0F\u65E0\u6548\uFF1A\u56DE\u5305\u4E0D\u662F\u5BF9\u8C61");let n=e,t=le(n.access_key_id,n.accessKeyId),r=le(n.secret_key,n.secretKey,n.secretAccessKey),o=le(n.session_token,n.sessionToken).replace(/\s+/g,""),i=le(n.bucket),a=le(n.region),s=Ai(le(n.dns_point,n.dnsPoint)),u=[t===""?"access_key_id":"",r===""?"secret_key":"",o===""?"session_token":"",i===""?"bucket":"",a===""?"region":"",s===""?"dns_point":""].filter(h=>h!=="");if(u.length>0)throw new F("credentials-invalid",`S3 \u4E0A\u4F20\u51ED\u8BC1\u683C\u5F0F\u65E0\u6548\uFF1A\u7F3A\u5C11 ${u.join("\u3001")}`);let c=Si(n.expiration??n.expiresAtSeconds),g=le(n.key_prefix,n.keyPrefix),C=le(n.identity_id,n.identityId);return {accessKeyId:t,secretAccessKey:r,sessionToken:o,bucket:i,region:a,dnsPoint:s,...c===void 0?{}:{expiresAtSeconds:c},...g===""?{}:{keyPrefix:g},...C===""?{}:{identityId:C}}}function Mi(e,n){if(n-e.fetchedAtMs>=Ii)return false;let{expiresAtSeconds:t}=e.credential;return t===void 0?true:t*1e3-vi>n}function mr(e){let n=new Map,t=new Map;async function r(o,i){let a;try{a=await e({bucket:o,forceRefresh:i});}catch(u){let c=u instanceof Error?u.message:String(u);throw new F("credentials-request-failed",`S3 \u4E0A\u4F20\u51ED\u8BC1\u83B7\u53D6\u5931\u8D25\uFF1Abucket=${o}\uFF1B\u539F\u56E0\uFF1A${c}`,{cause:u})}let s=fr(a);return n.set(o,{credential:s,fetchedAtMs:Date.now()}),s}return {resolve(o,i){if(e===void 0)return Promise.reject(new F("credentials-provider-missing","media upload: \u5BBF\u4E3B\u672A\u6CE8\u5165 getUploadCredentials\uFF0C\u65E0\u6CD5\u7533\u8BF7 S3 \u4E34\u65F6\u51ED\u8BC1"));let a=i?.forceRefresh===true,s=a?void 0:n.get(o);if(s!==void 0&&Mi(s,Date.now()))return Promise.resolve(s.credential);n.delete(o);let u=t.get(o);if(u!==void 0)return u;let c=r(o,a).finally(()=>{t.get(o)===c&&t.delete(o);});return t.set(o,c),c}}}function _i(){if(typeof window>"u"||typeof document>"u")return {recordingSupported:false,recordingBlockers:["no-media-devices"],playbackSupported:false};let e=[];window.isSecureContext===false&&e.push("insecure-context"),(typeof navigator>"u"||navigator.mediaDevices?.getUserMedia===void 0)&&e.push("no-media-devices"),typeof MediaRecorder>"u"&&e.push("no-media-recorder");let n=window,t=window.AudioContext!==void 0||n.webkitAudioContext!==void 0,r=window.OfflineAudioContext!==void 0||n.webkitOfflineAudioContext!==void 0;return (!t||!r)&&e.push("audio-context-blocked"),{recordingSupported:e.length===0,recordingBlockers:e,playbackSupported:typeof Audio<"u"}}var L=class extends Error{code;constructor(n,t,r){super(t??n,r),this.name="VoiceError",this.code=n;}};function un(e){return e instanceof L?e.code:void 0}function gr(e){switch(e instanceof DOMException||e instanceof Error?e.name:""){case "NotAllowedError":case "SecurityError":case "PermissionDeniedError":return new L("permission-denied","\u9EA6\u514B\u98CE\u6743\u9650\u88AB\u62D2\u7EDD",{cause:e});case "NotFoundError":case "DevicesNotFoundError":return new L("device-not-found","\u672A\u627E\u5230\u53EF\u7528\u9EA6\u514B\u98CE",{cause:e});case "NotReadableError":case "TrackStartError":case "AbortError":return new L("device-busy","\u9EA6\u514B\u98CE\u88AB\u5360\u7528\u6216\u542F\u52A8\u5931\u8D25",{cause:e});default:return new L("device-busy",e instanceof Error?e.message:"\u9EA6\u514B\u98CE\u542F\u52A8\u5931\u8D25",{cause:e})}}var te=16e3,xi=new URL("./speex-runtime.txt",import.meta.url).href,Ln=null,Ei=15e3;async function Ri(){document.querySelector('script[data-speex-runtime="true"]')?.remove();let e=new AbortController,n=setTimeout(()=>e.abort(new Error("Speex runtime fetch timeout")),Ei),t;try{t=await fetch(xi,{signal:e.signal});}finally{clearTimeout(n);}if(!t.ok)throw new Error(`Speex runtime fetch failed: ${t.status}`);let r=await t.text();if(r.trimStart().startsWith("<"))throw new Error("Speex runtime fetch returned HTML instead of script");let o=document.createElement("script");o.dataset.speexRuntime="true",o.text=r,document.head.appendChild(o);}async function Hn(){let e=typeof window>"u"?void 0:window;return e?.__speexInH5!==void 0?e.__speexInH5:(Ln??=(async()=>{if(e===void 0||typeof document>"u")throw new L("codec-unavailable","Speex \u8FD0\u884C\u65F6\u4EC5\u53EF\u5728\u6D4F\u89C8\u5668\u73AF\u5883\u52A0\u8F7D");if(await Ri(),e.__speexInH5===void 0&&e.initAudio?.(),e.__speexInH5===void 0)throw new L("codec-unavailable","Speex \u8FD0\u884C\u65F6\u521D\u59CB\u5316\u5931\u8D25");return e.__speexInH5})().catch(n=>{throw Ln=null,n instanceof L?n:new L("codec-unavailable","Speex \u8FD0\u884C\u65F6\u52A0\u8F7D\u5931\u8D25",{cause:n})}),Ln)}function yr(){Hn().catch(()=>{});}function pe(e,n,t){for(let r=0;r<t.length;r+=1)e.setUint8(n+r,t.charCodeAt(r));}function Ti(e,n){let r=new ArrayBuffer(44+e.length*2),o=new DataView(r);pe(o,0,"RIFF"),o.setUint32(4,36+e.length*2,true),pe(o,8,"WAVE"),pe(o,12,"fmt "),o.setUint32(16,16,true),o.setUint16(20,1,true),o.setUint16(22,1,true),o.setUint32(24,n,true),o.setUint32(28,n*2,true),o.setUint16(32,2,true),o.setUint16(34,16,true),pe(o,36,"data"),o.setUint32(40,e.length*2,true);let i=44;for(let a=0;a<e.length;a+=1){let s=Math.max(-1,Math.min(1,e[a]??0));o.setInt16(i,s<0?s*32768:s*32767,true),i+=2;}return r}function Fn(e){if(e instanceof Int16Array)return e;let n=new Int16Array(e.length);for(let t=0;t<e.length;t+=1){let r=Math.max(-1,Math.min(1,e[t]??0));n[t]=r<0?r*32768:r*32767;}return n}var ki=40,$n=120,Di=40,jn=80;function Ui(e,n){let t=Math.min(Math.floor(n*ki/1e3),Math.floor(e.length/2));for(let r=0;r<t;r+=1){let o=r/t;e[r]=Math.round((e[r]??0)*o);let i=e.length-1-r;e[i]=Math.round((e[i]??0)*o);}return e}function qn(e,n){if(e.length===0)return e;let t=Math.min(Math.floor(n*$n/1e3),Math.max(0,e.length-1)),r=t>0?e.subarray(t):e,o=new Float32Array(r),i=Math.min(Math.floor(n*Di/1e3),Math.floor(o.length/2));for(let a=0;a<i;a+=1){let s=a/i;o[a]=(o[a]??0)*s;let u=o.length-1-a;o[u]=(o[u]??0)*s;}return o}function ln(e,n){let r=new ArrayBuffer(44+e.length*2),o=new DataView(r);return pe(o,0,"RIFF"),o.setUint32(4,36+e.length*2,true),pe(o,8,"WAVE"),pe(o,12,"fmt "),o.setUint32(16,16,true),o.setUint16(20,1,true),o.setUint16(22,1,true),o.setUint32(24,n,true),o.setUint32(28,n*2,true),o.setUint16(32,2,true),o.setUint16(34,16,true),pe(o,36,"data"),o.setUint32(40,e.length*2,true),new Int16Array(r,44).set(e),new Uint8Array(r)}function Oi(e){let n=new Uint8Array(e.length);for(let t=0;t<e.length;t+=1)n[t]=e.charCodeAt(t)&255;return n}function Bi(e){let t="";for(let r=0;r<e.length;r+=32768)t+=String.fromCharCode(...e.subarray(r,Math.min(r+32768,e.length)));return t}async function hr(e,n){let t=await Hn(),r=Math.floor(n*jn/1e3),o=new Float32Array(r+e.length);o.set(e,r);let i=Ti(o,n);try{return Oi(t.encodeFile(i))}catch(a){throw new L("encode-failed","\u8BED\u97F3\u7F16\u7801\u5931\u8D25",{cause:a})}}async function br(e){let n=await Hn();try{let[t,r]=n.decodeFile(Bi(e));if(t.length===0)throw new Error("decoded empty pcm");let o=Ui(Fn(t),r.rate>0?r.rate:te),i=r.rate>0?r.rate:te;return {samples:o,sampleRate:i,durationMs:Math.round(o.length/i*1e3)}}catch(t){throw t instanceof L?t:new L("decode-failed","\u8BED\u97F3\u89E3\u7801\u5931\u8D25",{cause:t})}}async function Cr(e){let n=await br(e);return {wavData:ln(n.samples,n.sampleRate),durationMs:n.durationMs}}var Ni=.5,Ki=2;function wr(e){if(typeof e!="number"||!Number.isFinite(e))throw new L("invalid-playback-rate",`\u64AD\u653E\u901F\u7387\u5FC5\u987B\u662F\u6709\u9650\u6570\u5B57\uFF0C\u6536\u5230 ${String(e)}`);return Math.min(Math.max(e,Ni),Ki)}function Gi(e={}){let n=e.cacheMax??8,t={activeId:"",isPlaying:false,loadingId:"",progress:0,currentTimeMs:0,errorIds:new Set,playbackRate:e.playbackRate===void 0?1:wr(e.playbackRate)},r=new Set;function o(){for(let f of r)f(t);}let i=null,a=new Map,s=0,u=false,c=false;function g(f){let P=a.get(f);return P!==void 0&&(a.delete(f),a.set(f,P)),P}function C(f,P){if(u)return URL.revokeObjectURL(P.url),P;let _=a.get(f);if(_!==void 0)return URL.revokeObjectURL(P.url),a.delete(f),a.set(f,_),_;for(a.set(f,P);a.size>n;){let M;for(let E of a.keys())if(E!==t.activeId){M=E;break}if(M===void 0)break;let D=a.get(M);a.delete(M),D!==void 0&&URL.revokeObjectURL(D.url);}return P}function h(f){f.paused||f.pause(),f.removeAttribute("src");try{f.load();}catch{}}function l(f,P){return !u&&f===s&&t.activeId===P}function b(f){f.defaultPlaybackRate=t.playbackRate,f.playbackRate=t.playbackRate;}function v(){if(i!==null)return i;let f=new Audio;return f.preload="auto",b(f),f.addEventListener("timeupdate",()=>{t.activeId!==""&&(t.currentTimeMs=f.currentTime*1e3,t.progress=f.duration>0?Math.min(1,f.currentTime/f.duration):0,o());}),f.addEventListener("ended",()=>{A(),h(f),o();}),f.addEventListener("pause",()=>{t.activeId!==""&&(t.isPlaying=false,o());}),i=f,f}function A(){t.activeId="",t.isPlaying=false,t.progress=0,t.currentTimeMs=0;}function R(){s+=1,c=false,t.loadingId="",A(),i!==null&&h(i),o();}function k(f){t.errorIds=new Set([...t.errorIds,f]);}function x(f){if(!t.errorIds.has(f))return;let P=new Set(t.errorIds);P.delete(f),t.errorIds=P;}async function S(f,P){let _=g(f);if(_!==void 0)return {entry:_};let M;try{M=await P();}catch(D){return {entry:null,error:{code:un(D),cause:D}}}if(M===null)return {entry:null};try{let{wavData:D,durationMs:E}=await Cr(M),U={url:URL.createObjectURL(new Blob([D],{type:"audio/wav"})),durationMs:E};return {entry:C(f,U)}}catch(D){return {entry:null,error:{code:un(D),cause:D}}}}async function d(f,P){if(u)return;let _=v();if(x(f),t.activeId===f){if(t.isPlaying){_.pause();return}let E=++s;try{await _.play();}catch{if(!l(E,f))return;k(f),o();return}if(!l(E,f))return;t.isPlaying=true,o(),P.onPlayStart?.();return}if(t.loadingId===f)return;R();let M=++s;t.loadingId=f,o();let D=await S(f,P.load);if(M===s){if(t.loadingId="",D.entry===null){k(f),o(),D.error!==void 0&&P.onDecodeError?.(D.error.code,D.error.cause);return}_.src=D.entry.url,b(_),t.activeId=f,t.progress=0,t.currentTimeMs=0,o();try{await _.play();}catch(E){if(!l(M,f))return;A(),h(_),k(f),o(),P.onDecodeError?.(void 0,E);return}l(M,f)&&(t.isPlaying=true,o(),P.onPlayStart?.());}}function m(f,P){i===null||t.activeId!==f||!Number.isFinite(i.duration)||i.duration<=0||(i.currentTime=Math.min(Math.max(P,0),.999)*i.duration);}function w(f){i===null||t.activeId!==f||t.isPlaying&&(c=true,i.pause());}function p(f){if(i===null||t.activeId!==f||!c)return;c=false;let P=++s;i.play().then(()=>{l(P,f)&&(t.isPlaying=true,o());}).catch(()=>{l(P,f)&&(k(f),o());});}function y(f){let P=wr(f);P!==t.playbackRate&&(t.playbackRate=P,i!==null&&b(i),o());}function I(){if(!u){u=true,R();for(let f of a.values())URL.revokeObjectURL(f.url);a.clear(),r.clear(),i=null;}}return {getState:()=>t,subscribe:f=>(r.add(f),()=>r.delete(f)),toggle:d,seek:m,beginScrub:w,endScrub:p,setPlaybackRate:y,stop:R,dispose:I}}function Li(e){if(e.length===0)return 0;let n=0;for(let t=0;t<e.length;t+=1){let r=((e[t]??128)-128)/128;n+=r*r;}return Math.min(1,Math.sqrt(n/e.length)*Math.SQRT2)}function Hi(e,n,t){if(e.length===0||n<=0||t<=0)return 0;let r=n/t,o=0,i=0;for(let a=0;a<e.length;a+=1){let s=a*r,u=.2;s<200?u=.15:s<300?u=.4:s<=3400?u=1:s<=6e3&&(u=.45),o+=(e[a]??0)/255*u,i+=u;}return i>0?o/i:0}function Pr(e){let n=Li(e.timeDomain),t=Hi(e.frequency,e.sampleRate,e.fftSize),r=n*.55+t*.45;return Math.min(1,r*e.boost)**.72}var pn=class{constructor(n=.45,t=.18){this.attack=n;this.release=t;}attack;release;value=0;next(n){let t=Math.min(1,Math.max(0,n));return t>this.value?this.value+=(t-this.value)*this.attack:this.value+=(t-this.value)*this.release,this.value}};var Fi=5e3,Jn=15e3,$i=25e3,ji=25e3;function Ne(e,n,t){return new Promise((r,o)=>{let i=setTimeout(()=>o(new Error(t)),n);e.then(a=>{clearTimeout(i),r(a);},a=>{clearTimeout(i),o(a);});})}async function qi(){if(typeof navigator>"u"||navigator.mediaDevices?.getUserMedia===void 0)throw new L("no-media-devices","\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u9EA6\u514B\u98CE\u91C7\u96C6");let e=navigator.mediaDevices.getUserMedia({audio:Ji()});try{return await Ne(e,ji,"\u9EA6\u514B\u98CE\u6388\u6743\u8BF7\u6C42\u8D85\u65F6")}catch(n){throw e.then(t=>t.getTracks().forEach(r=>r.stop())).catch(()=>{}),gr(n)}}function Ji(){return {channelCount:1,echoCancellation:true,noiseSuppression:true,autoGainControl:true}}var Vi=50,zi=.12,Wi=2.6,Yi=.06,Qi=256;function Xi(){return typeof MediaRecorder>"u"?"":["audio/webm","audio/webm;codecs=opus","audio/mp4","audio/aac","audio/ogg;codecs=opus"].find(n=>MediaRecorder.isTypeSupported(n))??""}async function Zi(e,n,t){let r=window.AudioContext??window.webkitAudioContext,o=window.OfflineAudioContext??window.webkitOfflineAudioContext;if(o===void 0||t==null&&r===void 0)throw new L("audio-context-blocked","AudioContext \u4E0D\u53EF\u7528");let i=t??new r,a=t==null;try{i.state==="suspended"&&await Ne(i.resume(),Jn,"audioContext.resume timeout").catch(()=>{});let s=await Ne(i.decodeAudioData(await e.arrayBuffer()),Jn,"decodeAudioData timeout"),u=Math.max(1,Math.ceil(s.duration*n)),c=new o(1,u,n),g=c.createBufferSource();return g.buffer=s,g.connect(c.destination),g.start(0),(await Ne(c.startRendering(),Jn,"offlineAudioContext.startRendering timeout")).getChannelData(0).slice()}catch(s){throw s instanceof L?s:new L("decode-failed","\u5F55\u97F3\u6BB5\u89E3\u7801\u5931\u8D25",{cause:s})}finally{a&&i.close().catch(()=>{});}}function Ir(e){let n=0;for(let o of e)n+=o.length;let t=new Float32Array(n),r=0;for(let o of e)t.set(o,r),r+=o.length;return t}async function ea(e={}){if(typeof MediaRecorder>"u")throw new L("no-media-recorder","\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5F55\u97F3");let n;e.stream!==void 0?n=e.stream:n=await qi(),yr();let t=Xi(),r=e.maxDurationMs??6e4,o="recording",i=[],a=0,s=[],u=null,c=null,g=null,C=[],h=0,l=false;function b(){try{let f;try{f=t!==""?new MediaRecorder(n,{mimeType:t}):new MediaRecorder(n);}catch{f=new MediaRecorder(n);}return C=[],f.ondataavailable=P=>{P.data.size>0&&C.push(P.data);},f.start(250),h=Date.now(),f}catch(f){throw f instanceof L?f:new L("device-busy","\u5F55\u97F3\u5668\u542F\u52A8\u5931\u8D25",{cause:f})}}let v=e.amplitude?.intervalMs??Vi,A=e.amplitude?.boost??Wi,R=e.amplitude?.smoothing??zi,k=e.amplitude?.minVolume??Yi;function x(){let f=Math.floor(r/1e3*te),P=0;for(let M of i)P+=M.length;if(P>f){let M=f,D=[];for(let E of i){if(M<=0)break;E.length<=M?(D.push(E),M-=E.length):(D.push(E.slice(0,M)),M=0);}i.length=0,i.push(...D);}a=Math.min(a,r);let _=Math.max(0,Math.ceil(r/v));s.length>_&&(s.length=_);}async function S(){if(o!=="recording"){e.onMaxDuration?.();return}e.onMaxDuration?.(),o="paused";let f=I().then(()=>x());g=f;try{await f;}catch(P){console.warn("[im-browser] pauseAtMaxDuration settle failed",P);}}let d=setInterval(()=>{!l&&o==="recording"&&p()>=r&&(l=true,S());},250),m=null,w=null;try{let f=window.AudioContext??window.webkitAudioContext;if(f!==void 0){m=new f,m.state==="suspended"&&m.resume().catch(()=>{});let P=m.createMediaStreamSource(n),_=m.createAnalyser();_.fftSize=Qi,_.smoothingTimeConstant=R,P.connect(_);let M=new Uint8Array(_.frequencyBinCount),D=new Uint8Array(_.fftSize),E=new pn;w=setInterval(()=>{if(o!=="recording"||u===null)return;_.getByteFrequencyData(M),_.getByteTimeDomainData(D);let U=Pr({timeDomain:D,frequency:M,sampleRate:m.sampleRate,fftSize:_.fftSize,boost:A}),O=E.next(U),N=O<k?0:O;s.push(Math.round(N*255)),e.onAmplitude?.(N);},v);}}catch(f){console.warn("[im-browser] amplitude analyser setup failed",f);}function p(){let f=o==="recording"&&u!==null?Date.now()-h:0;return a+f}function y(){d!==null&&(clearInterval(d),d=null),w!==null&&(clearInterval(w),w=null),m?.close().catch(()=>{}),m=null;for(let f of n.getTracks())f.stop();}function I(){if(c!==null)return c;let f=u;return f===null?Promise.resolve():(u=null,c=(async()=>{await new Promise(M=>{if(f.state==="inactive"){M();return}let D=setTimeout(()=>{console.warn("[im-browser] recorder onstop timed out, settling with received chunks"),M();},Fi);f.onstop=()=>{clearTimeout(D),M();},f.stop();});let P=new Blob(C,{type:f.mimeType||t||"audio/webm"});if(C=[],P.size===0)return;let _=await Zi(P,te,m);_.length!==0&&(i.push(_),a+=_.length/te*1e3);})().finally(()=>{c=null;}),c)}try{u=b();}catch(f){throw o="closed",y(),f}return {getState:()=>o,recordedMs:p,async pause(){o==="recording"&&(o="paused",await I(),(l||a>=r)&&x());},async resume(){o!=="paused"||l||(u=b(),o="recording");},async finish(){if(o==="closed")throw new L("empty-recording","\u5F55\u97F3\u4F1A\u8BDD\u5DF2\u7ED3\u675F");o="closed";let f=async()=>{try{g!==null?await g:await I(),x();}finally{y();}let P=Ir(i);if(P.length===0)throw new L("empty-recording","\u5F55\u97F3\u5185\u5BB9\u4E3A\u7A7A");let _=qn(P,te);if(_.length===0)throw new L("empty-recording","\u5F55\u97F3\u5185\u5BB9\u4E3A\u7A7A");let M=Math.min(s.length,Math.ceil($n/v));return {data:await hr(_,te),durationMs:Math.round(_.length/te*1e3)+jn,waveform:s.slice(M),filename:`AUDIO_${Date.now()}.ogg`,mimeType:"audio/ogg"}};try{return await Ne(f(),$i,"\u5F55\u97F3\u5B9A\u7A3F\u8D85\u65F6")}catch(P){throw y(),P instanceof L?P:new L("encode-failed","\u5F55\u97F3\u5B9A\u7A3F\u5931\u8D25",{cause:P})}},cancel(){o="closed";let f=u;if(u=null,f!==null&&(f.ondataavailable=null,f.onstop=null,f.state!=="inactive"))try{f.stop();}catch{}i.length=0,y();},async previewWav(){g!==null?await g:c!==null&&await c,x();let f=Ir(i),P=qn(f,te);if(P.length===0)throw new L("empty-recording","\u6682\u65E0\u53EF\u8BD5\u542C\u7684\u5F55\u97F3\u5185\u5BB9");return {wavData:ln(Fn(P),te),durationMs:Math.round(P.length/te*1e3)}}}}function ve(e){let n=new Map;return {shouldRenegotiate(t,r,o){if(r===void 0)return true;if(o!==void 0&&!e(o,r))return false;let i=n.get(t);return i!==void 0&&e(i,r)?false:(n.set(t,r),true)},reset(t){n.delete(t);}}}function vr(e,n){return e.length===n.length&&e.every((t,r)=>t===n[r])}var re=class extends Error{constructor(n,t){super(n,t),this.name="ChannelKeyError";}};function Sr(e){let n=e.trim(),t=n.replace(/-/g,"+").replace(/_/g,"/");if(t===""||!/^[A-Z0-9+/]*={0,2}$/i.test(t)||t.length%4===1)throw new re("channel secret_key \u4E0D\u662F\u5408\u6CD5 Base64");let r=t.replace(/=+$/,""),o=r+"=".repeat((4-r.length%4)%4),i;try{i=atob(o);}catch(c){throw new re("channel secret_key Base64 \u89E3\u7801\u5931\u8D25",{cause:c})}let a=Uint8Array.from(i,c=>c.charCodeAt(0)&255);if(a.length===0)throw new re("channel secret_key Base64 \u89E3\u7801\u7ED3\u679C\u4E3A\u7A7A");let s=new Uint8Array(16);s.set(a.subarray(0,s.length));let u=n.length===16&&/^[\x20-\x7E]+$/.test(n)?Uint8Array.from(n,c=>c.charCodeAt(0)):void 0;return {canonical:s,...u===void 0?{}:{legacyAscii:u},metadata:{channelKeyCharLength:n.length,decodedByteLength:a.length,padByteCount:Math.max(0,16-a.length),legacyAsciiCandidate:u!==void 0}}}function na(e){let n=new Map,t=new Map,r=new Map,o=new Map,i=ve(vr);function a(S){return {canonical:S.canonical.slice(),...S.legacyAscii===void 0?{}:{legacyAscii:S.legacyAscii.slice()},metadata:{...S.metadata}}}function s(S){return [{strategy:"canonical-base64-pad",key:S.canonical.slice()},...S.legacyAscii===void 0?[]:[{strategy:"legacy-ascii16",key:S.legacyAscii.slice()}]]}function u(S){n.delete(S),t.delete(S),r.delete(S),o.set(S,(o.get(S)??0)+1);}function c(S){let d=o.get(S)??0,m=(async()=>{try{let w=await e.loadSecretKey(S);if(w===null||w.trim()==="")throw new re(`channel secret_key \u7F3A\u5931\uFF08channelId=${S}\uFF09`);let p=Sr(w);return (o.get(S)??0)===d&&n.set(S,a(p)),p}catch(w){let p=w instanceof re?w:new re(`channel secret_key \u52A0\u8F7D\u5931\u8D25\uFF08channelId=${S}\uFF09`,{cause:w});throw e.onError?.(p.message,w),p}})().finally(()=>{t.get(S)===m&&t.delete(S);});return t.set(S,m),m}function g(S,d){let m=t.get(S);if(m!==void 0)return m;i.shouldRenegotiate(S,d.staleKey,n.get(S)?.canonical)&&u(S);}function C(S,d){let m=S.trim();if(m===""){let p=new re("channel id \u4E0D\u80FD\u4E3A\u7A7A");return e.onError?.(p.message),Promise.reject(p)}if(d!==void 0){let p=g(m,d);if(p!==void 0)return p.then(a)}let w=n.get(m);return w!==void 0?Promise.resolve(a(w)):t.get(m)??c(m)}function h(S,d){let m=S.trim();if(m===""){let I=new re("channel id \u4E0D\u80FD\u4E3A\u7A7A");return e.onError?.(I.message),Promise.reject(I)}if(d!==void 0){let I=g(m,d);if(I!==void 0)return I.then(f=>f.canonical.slice())}let w=n.get(m);if(w!==void 0)return Promise.resolve(w.canonical.slice());let p=r.get(m);if(p!==void 0)return p;let y=(t.get(m)??c(m)).then(I=>I.canonical.slice()).finally(()=>{r.get(m)===y&&r.delete(m);});return r.set(m,y),y}function l(S){return n.get(S.trim())?.canonical.slice()??null}async function b(S,d){let m=await C(S,d);return s(m)}function v(S){let d=n.get(S.trim());return d===void 0?[]:s(d)}function A(S){let d=n.get(S.trim());return d===void 0?null:{...d.metadata}}function R(S,d){let m=S.trim();if(m==="")throw new re("channel id \u4E0D\u80FD\u4E3A\u7A7A");let w=Sr(d);u(m),i.reset(m),n.set(m,a(w));}function k(S){let d=S.trim();d!==""&&(u(d),i.reset(d));}function x(){let S=new Set([...n.keys(),...t.keys(),...r.keys(),...o.keys()]);for(let d of S)o.set(d,(o.get(d)??0)+1),i.reset(d);n.clear(),t.clear(),r.clear();}return {getChannelKey:h,getCachedChannelKey:l,getChannelKeyCandidates:b,getCachedChannelKeyCandidates:v,getCachedChannelKeyMetadata:A,primeChannelKey:R,clearChannelKey:k,clearAll:x}}function Vn(){let e=globalThis.scheduler;return typeof e?.yield=="function"?e.yield():new Promise(n=>setTimeout(n,0))}var Yn=2654435769,Ar=16,Se=8,zn=16,Mr=32;function _r(e){if(e.length<zn)throw new Error(`TEA key \u957F\u5EA6\u4E0D\u8DB3\uFF1A${e.length}\uFF0C\u9700 \u2265 ${zn} \u5B57\u8282`);let n=new DataView(e.buffer,e.byteOffset,zn);return [n.getUint32(0,true),n.getUint32(4,true),n.getUint32(8,true),n.getUint32(12,true)]}function Qn([e,n],[t,r,o,i]){let a=e>>>0,s=n>>>0,u=Math.imul(Yn,16)>>>0;for(let c=0;c<Ar;c++)s=s-(Math.imul(a,16)+o^a+u^(a>>>5)+i)>>>0,a=a-(Math.imul(s,16)+t^s+u^(s>>>5)+r)>>>0,u=u-Yn>>>0;return [a,s]}function Xn([e,n],[t,r,o,i]){let a=e>>>0,s=n>>>0,u=0;for(let c=0;c<Ar;c++)u=u+Yn>>>0,a=a+(Math.imul(s,16)+t^s+u^(s>>>5)+r)>>>0,s=s+(Math.imul(a,16)+o^a+u^(a>>>5)+i)>>>0;return [a,s]}function Ke(e,n,t,r){let o=_r(n),i=new Uint8Array(e.length),a=Math.floor(e.length/Se),s=r===void 0?a:Math.min(a,Math.floor(r/Se)),u=new DataView(e.buffer,e.byteOffset,e.byteLength),c=new DataView(i.buffer);for(let C=0;C<s;C++){let h=C*Se,[l,b]=t([u.getUint32(h,true),u.getUint32(h+4,true)],o);c.setUint32(h,l,true),c.setUint32(h+4,b,true);}let g=s*Se;return g<e.length&&i.set(e.subarray(g),g),i}function Ge(e,n){return Ke(n,e,Qn)}function Le(e,n){return Ke(n,e,Xn)}function xr(e,n){return Ke(n,e,Xn,Mr)}function Er(e,n){return Ke(n,e,Qn,Mr)}var ta=1024*1024;function ra(){return Vn()}function Wn(e){if(e?.aborted)throw new DOMException("TEA \u5206\u5757\u5904\u7406\u5DF2\u53D6\u6D88","AbortError")}async function Zn(e,n,t,r=ta,o={}){if(!Number.isInteger(r)||r<=0||r%Se!==0)throw new RangeError(`TEA \u5206\u5757\u5927\u5C0F\u5FC5\u987B\u662F ${Se} \u7684\u6B63\u6574\u6570\u500D\uFF1A${r}`);_r(e);let i=t==="encrypt"?Xn:Qn,a=o.yieldToMain??ra,s=n.size,u=[],c=0;for(;c<s;){Wn(o.signal);let g=Math.min(c+r,s),C=new Uint8Array(await n.slice(c,g).arrayBuffer());Wn(o.signal),u.push(new Blob([Ke(C,e,i)])),c=g,o.onProgress?.(c,s),c<s&&await a();}return Wn(o.signal),new Blob(u)}var Rr=8,fn=16;function oa(e){let n=V.md.md5.create();return n.update(e,"utf8"),n.digest().toHex()}function kr(e){return new TextEncoder().encode(e)}function ia(e){let n=e.length;for(;n>0&&e[n-1]===0;)n-=1;return new TextDecoder().decode(e.subarray(0,n))}function aa(e){let n=atob(e),t=new Uint8Array(n.length);for(let r=0;r<n.length;r++)t[r]=n.charCodeAt(r);return t}function sa(e){let n="";for(let t of e)n+=String.fromCharCode(t);return btoa(n)}function ca(e){let n=Math.ceil(e.length/Rr)*Rr;if(n===e.length)return e;let t=new Uint8Array(n);return t.set(e),t}function Dr(e,n=oa){let t=e.trim();if(t==="")throw new Error("collect TEA key: userId \u4E3A\u7A7A");let r=n(t).replace(/[^0-9a-f]/gi,"");if(r.length<fn)throw new Error("collect TEA key: MD5 \u957F\u5EA6\u4E0D\u8DB3");let o=kr(r.slice(0,fn).toUpperCase());if(o.length<fn)throw new Error("collect TEA key: \u6D3E\u751F\u7ED3\u679C\u4E0D\u8DB3 16 \u5B57\u8282");return o.subarray(0,fn)}function Ur(e,n,t){return sa(Le(Dr(n,t),ca(kr(e))))}function da(e,n,t){return ia(Ge(Dr(n,t),aa(e)))}function ua(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function et(e){let n=e.trim();if(n===""||!n.startsWith("{"))return null;try{return ua(JSON.parse(n))}catch{return null}}function la(e){let n=e.trim(),t=n.indexOf("}");return t>=0?n.slice(0,t+1):n}function Or(e,n,t){let r=et(e);if(r!==null)return r;if(e.trim()===""||n.trim()==="")return null;try{let o=da(e,n,t);return et(o)??et(la(o))}catch{return null}}var pa="core";var He=class extends Error{code=502;constructor(n,t){super(`core JSON \u4F20\u8F93\u5931\u8D25\uFF1A${n||"unknown transport error"}`,t===void 0?void 0:{cause:t}),this.name="CoreJsonTransportError";}},J=class extends Error{businessCode;operation;constructor(n,t,r){super(`${n}\u5931\u8D25\uFF1Acode=${t}${r?` ${r}`:""}`),this.name="CoreJsonBusinessError",this.businessCode=t,this.operation=n;}};async function T(e,n,t,r){let o=r!==void 0&&"responseMode"in r&&r.responseMode==="strict",i;try{i=await e(n,{target:pa,data:t,...r?.method===void 0?{}:{method:r.method},...r?.headers===void 0?{}:{headers:r.headers},...r?.prefix===void 0?{}:{prefix:r.prefix}});}catch(a){throw o?new He(a instanceof Error?a.message:String(a),a):a}if(o){let a=typeof i.msg=="string"?i.msg:"";if(i.code===502)throw new He(a);return i.code!==200?{ok:false,code:i.code,message:a,data:i.data}:{ok:true,code:200,message:a,data:i.data}}return {code:i.code,data:i.code===200&&i.data!=null?i.data:null}}function Br(e,n){let t=n.clientType===void 0?{public_key:n.publicKey}:{public_key:n.publicKey,clientType:n.clientType},r=n.clientType===void 0?void 0:{headers:{"Client-type":String(n.clientType)}};return T(e,"/user/encrypt_info/info",t,r)}function fa(e){let n=e.trim().replace(/-/g,"+").replace(/_/g,"/"),t=n+"=".repeat((4-n.length%4)%4),r=atob(t),o=new Uint8Array(r.length);for(let i=0;i<r.length;i++)o[i]=r.charCodeAt(i)&255;return o}function ma(e){let n=e.clientType,t=new Map,r=new Map,o=ve((h,l)=>h===l),i=null,a=null;function s(h,l){e.onError?.(h,l);}function u(){if(i!==null)return Promise.resolve(i);if(a!==null)return a;let h=Promise.resolve().then(()=>e.crypto.generateTempKeyPair()).then(l=>(i=l,l)).finally(()=>{a===h&&(a=null);});return a=h,h}async function c(h){let l;try{l=await u();}catch(R){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u751F\u6210\u4E34\u65F6 RSA \u5BC6\u94A5\u5931\u8D25\uFF08userId=${h}\uFF09`,R),null}let b;try{b=await Br(e.client,{publicKey:l.publicKeyBase64,clientType:n});}catch(R){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\u8BF7\u6C42\u5F02\u5E38\uFF08userId=${h}\uFF09`,R),null}if(b.data===null)return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\u4E1A\u52A1\u5931\u8D25\uFF08userId=${h}\uFF0Ccode=${b.code}\uFF09`),null;let v=b.data.prv_key??b.data.prvKey??"",A=String(b.data.version??"").trim();if(v==="")return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\u54CD\u5E94\u7F3A\u5C11 prv_key\uFF08userId=${h}\uFF09`),null;try{let R=e.crypto.rsaDecryptPkcs1({data:fa(v),privateKey:l.privateKey}),k=new TextDecoder().decode(R).trim();if(k==="")return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u89E3\u51FA\u7684\u79C1\u94A5\u4E3A\u7A7A\uFF08userId=${h}\uFF09`),null;let x={privateKey:k,version:A};return t.set(h,x),x}catch(R){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u4E34\u65F6\u79C1\u94A5\u89E3 prv_key \u5931\u8D25\uFF08userId=${h}\uFF09`,R),null}}function g(h,l){let b=h.trim();if(b==="")return Promise.resolve(null);if(l!==void 0){let k=r.get(b);if(k!==void 0)return k;o.shouldRenegotiate(b,l.staleKey,t.get(b)?.privateKey)&&t.delete(b);}let v=t.get(b);if(v!==void 0)return Promise.resolve(v);let A=r.get(b);if(A!==void 0)return A;let R=c(b).finally(()=>{r.get(b)===R&&r.delete(b);});return r.set(b,R),R}function C(h){return t.get(h.trim())??null}return {getUserPrivateKey:g,getCachedPrivateKey:C}}function Nr(e,n){let t=n.clientType===void 0?{group_id:n.groupId,public_key:n.publicKey}:{group_id:n.groupId,public_key:n.publicKey,clientType:n.clientType},r=n.clientType===void 0?void 0:{headers:{"Client-type":String(n.clientType)}};return T(e,"/user_group/encrypt_info",t,r)}function ga(e){let n=e.trim().replace(/-/g,"+").replace(/_/g,"/"),t=n+"=".repeat((4-n.length%4)%4),r=atob(t),o=new Uint8Array(r.length);for(let i=0;i<r.length;i++)o[i]=r.charCodeAt(i)&255;return o}function ya(e){let n=e.clientType,t=new Map,r=new Map,o=new Map,i=ve((l,b)=>l===b),a=null,s=null;function u(){if(a!==null)return Promise.resolve(a);if(s!==null)return s;let l=Promise.resolve().then(()=>e.crypto.generateTempKeyPair()).then(b=>(a=b,b)).finally(()=>{s===l&&(s=null);});return s=l,l}async function c(l){let b=o.get(l)??0,v;try{v=await u();}catch(d){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u751F\u6210\u4E34\u65F6 RSA \u5BC6\u94A5\u5931\u8D25\uFF08groupId=${l}\uFF09`,d),null}let A;try{A=await Nr(e.client,{groupId:l,publicKey:v.publicKeyBase64,clientType:n});}catch(d){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\u8BF7\u6C42\u5F02\u5E38\uFF08groupId=${l}\uFF09`,d),null}if(A.data===null)return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\u4E1A\u52A1\u5931\u8D25\uFF08groupId=${l}\uFF0Ccode=${A.code}\uFF09`),null;let R=A.data,k=String(R.prv_key??R.prvKey??R.private_key??"").trim(),x=String(R.pub_key??R.pubKey??R.public_key??"").trim(),S=String(R.version??"").trim();if(k==="")return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\u54CD\u5E94\u7F3A\u5C11 prv_key\uFF08groupId=${l}\uFF09`),null;try{let d=e.crypto.rsaDecryptPkcs1({data:ga(k),privateKey:v.privateKey}),m=new TextDecoder().decode(d).trim();if(m==="")return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u89E3\u51FA\u7684\u7FA4\u79C1\u94A5\u4E3A\u7A7A\uFF08groupId=${l}\uFF09`),null;let w={privateKey:m,publicKey:x,version:S};return (o.get(l)??0)===b&&t.set(l,w),w}catch(d){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u4E34\u65F6\u79C1\u94A5\u89E3 prv_key \u5931\u8D25\uFF08groupId=${l}\uFF09`,d),null}}function g(l,b){let v=l.trim();if(v==="")return Promise.resolve(null);if(b!==void 0){let x=r.get(v);if(x!==void 0)return x;i.shouldRenegotiate(v,b.staleKey,t.get(v)?.privateKey)&&t.delete(v);}let A=t.get(v);if(A!==void 0)return Promise.resolve(A);let R=r.get(v);if(R!==void 0)return R;let k=c(v).finally(()=>{r.get(v)===k&&r.delete(v);});return r.set(v,k),k}function C(l){return t.get(l.trim())??null}function h(l){let b=l.trim();t.delete(b),r.delete(b),o.set(b,(o.get(b)??0)+1),i.reset(b);}return {getGroupKeys:g,getCachedGroupKeys:C,getCachedGroupKeyVersion:l=>t.get(l.trim())?.version??null,clearGroupKeys:h}}async function Fe(e,n){let t=n.clientType===void 0?{other_user_openid:n.userId}:{other_user_openid:n.userId,clientType:n.clientType},r=n.clientType===void 0?void 0:{headers:{"Client-type":String(n.clientType)}};return (await T(e,"/user/info/other",t,r)).data}function ha(e){let n=e.clientType,t=new Map,r=new Map;async function o(a){try{let u=((await Fe(e.client,{userId:a,clientType:n}))?.public_key??"").trim();return u===""?(e.onError?.(`\u53D6\u5BF9\u7AEF\u516C\u94A5\uFF1A/user/info/other \u65E0 public_key\uFF08userId=${a}\uFF09`),null):(t.set(a,u),u)}catch(s){return e.onError?.(`\u53D6\u5BF9\u7AEF\u516C\u94A5\u8BF7\u6C42\u5F02\u5E38\uFF08userId=${a}\uFF09`,s),null}}function i(a,s){let u=a.trim();if(u==="")return Promise.resolve(null);s?.force===true&&t.delete(u);let c=t.get(u);if(c!==void 0)return Promise.resolve(c);let g=r.get(u);if(g!==void 0)return g;let C=o(u).finally(()=>{r.get(u)===C&&r.delete(u);});return r.set(u,C),C}return {getPeerPublicKey:i}}var ge=16;function Kr(e){let n="";for(let t of e)n+=String.fromCharCode(t);return n}function Gr(e){let n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t)&255;return n}function Lr(e){return e.replace(/(.{64})/g,`$1
|
|
1
|
+
import {wa as wa$1,G as G$1,J as J$1,f,g,i,Y as Y$1,Z as Z$1,aa as aa$1,ba as ba$1,W as W$1,X as X$1,L as L$1,M,F as F$1,I,m,e,K,H as H$1,N,P,R,Q as Q$1,S,T as T$1,U,V as V$1,ia as ia$1,ja as ja$1,xb,Ha as Ha$1,Ga as Ga$1,Fa as Fa$1,ga as ga$1,ka as ka$1,ea as ea$1,Ea as Ea$1,_,$ as $$1,l,s,Ca as Ca$1,Ba as Ba$1,ca as ca$1,da as da$1}from'./chunk-QQ23QYWK.js';import*as V from'node-forge';import {deleteDB,openDB}from'idb';function wi(e,n=async t=>{let{createBrowserApiProtocolClient:r}=await import('./browser-YLMJKRLM.js');return r(t)}){let t=null;function r(){if(t!==null)return t;let o=n(e);return t=o,o.catch(()=>{t===o&&(t=null);}),o}return async(o,i)=>(await r())(o,i)}var F=class extends Error{code;constructor(n,t,r){super(t??n,r),this.name="MediaTransferError",this.code=n;}};function Pi(e){return e instanceof F?e.code:void 0}var Ii=3600*1e3,vi=300*1e3;function le(...e){for(let n of e){if(typeof n!="string"&&typeof n!="number")continue;let t=String(n).trim();if(t!=="")return t}return ""}function Si(e){let n=Number(e);if(!(!Number.isFinite(n)||n<=0))return n>1e12?n/1e3:n}function Ai(e){let n=e.replace(/\/+$/,"");return n===""?"":/^https?:\/\//i.test(n)?n:`https://${n}`}function fr(e){if(e===null||typeof e!="object")throw new F("credentials-invalid","S3 \u4E0A\u4F20\u51ED\u8BC1\u683C\u5F0F\u65E0\u6548\uFF1A\u56DE\u5305\u4E0D\u662F\u5BF9\u8C61");let n=e,t=le(n.access_key_id,n.accessKeyId),r=le(n.secret_key,n.secretKey,n.secretAccessKey),o=le(n.session_token,n.sessionToken).replace(/\s+/g,""),i=le(n.bucket),a=le(n.region),s=Ai(le(n.dns_point,n.dnsPoint)),u=[t===""?"access_key_id":"",r===""?"secret_key":"",o===""?"session_token":"",i===""?"bucket":"",a===""?"region":"",s===""?"dns_point":""].filter(h=>h!=="");if(u.length>0)throw new F("credentials-invalid",`S3 \u4E0A\u4F20\u51ED\u8BC1\u683C\u5F0F\u65E0\u6548\uFF1A\u7F3A\u5C11 ${u.join("\u3001")}`);let c=Si(n.expiration??n.expiresAtSeconds),g=le(n.key_prefix,n.keyPrefix),C=le(n.identity_id,n.identityId);return {accessKeyId:t,secretAccessKey:r,sessionToken:o,bucket:i,region:a,dnsPoint:s,...c===void 0?{}:{expiresAtSeconds:c},...g===""?{}:{keyPrefix:g},...C===""?{}:{identityId:C}}}function Mi(e,n){if(n-e.fetchedAtMs>=Ii)return false;let{expiresAtSeconds:t}=e.credential;return t===void 0?true:t*1e3-vi>n}function mr(e){let n=new Map,t=new Map;async function r(o,i){let a;try{a=await e({bucket:o,forceRefresh:i});}catch(u){let c=u instanceof Error?u.message:String(u);throw new F("credentials-request-failed",`S3 \u4E0A\u4F20\u51ED\u8BC1\u83B7\u53D6\u5931\u8D25\uFF1Abucket=${o}\uFF1B\u539F\u56E0\uFF1A${c}`,{cause:u})}let s=fr(a);return n.set(o,{credential:s,fetchedAtMs:Date.now()}),s}return {resolve(o,i){if(e===void 0)return Promise.reject(new F("credentials-provider-missing","media upload: \u5BBF\u4E3B\u672A\u6CE8\u5165 getUploadCredentials\uFF0C\u65E0\u6CD5\u7533\u8BF7 S3 \u4E34\u65F6\u51ED\u8BC1"));let a=i?.forceRefresh===true,s=a?void 0:n.get(o);if(s!==void 0&&Mi(s,Date.now()))return Promise.resolve(s.credential);n.delete(o);let u=t.get(o);if(u!==void 0)return u;let c=r(o,a).finally(()=>{t.get(o)===c&&t.delete(o);});return t.set(o,c),c}}}function _i(){if(typeof window>"u"||typeof document>"u")return {recordingSupported:false,recordingBlockers:["no-media-devices"],playbackSupported:false};let e=[];window.isSecureContext===false&&e.push("insecure-context"),(typeof navigator>"u"||navigator.mediaDevices?.getUserMedia===void 0)&&e.push("no-media-devices"),typeof MediaRecorder>"u"&&e.push("no-media-recorder");let n=window,t=window.AudioContext!==void 0||n.webkitAudioContext!==void 0,r=window.OfflineAudioContext!==void 0||n.webkitOfflineAudioContext!==void 0;return (!t||!r)&&e.push("audio-context-blocked"),{recordingSupported:e.length===0,recordingBlockers:e,playbackSupported:typeof Audio<"u"}}var L=class extends Error{code;constructor(n,t,r){super(t??n,r),this.name="VoiceError",this.code=n;}};function un(e){return e instanceof L?e.code:void 0}function gr(e){switch(e instanceof DOMException||e instanceof Error?e.name:""){case "NotAllowedError":case "SecurityError":case "PermissionDeniedError":return new L("permission-denied","\u9EA6\u514B\u98CE\u6743\u9650\u88AB\u62D2\u7EDD",{cause:e});case "NotFoundError":case "DevicesNotFoundError":return new L("device-not-found","\u672A\u627E\u5230\u53EF\u7528\u9EA6\u514B\u98CE",{cause:e});case "NotReadableError":case "TrackStartError":case "AbortError":return new L("device-busy","\u9EA6\u514B\u98CE\u88AB\u5360\u7528\u6216\u542F\u52A8\u5931\u8D25",{cause:e});default:return new L("device-busy",e instanceof Error?e.message:"\u9EA6\u514B\u98CE\u542F\u52A8\u5931\u8D25",{cause:e})}}var te=16e3,xi=new URL("./speex-runtime.txt",import.meta.url).href,Ln=null,Ei=15e3;async function Ri(){document.querySelector('script[data-speex-runtime="true"]')?.remove();let e=new AbortController,n=setTimeout(()=>e.abort(new Error("Speex runtime fetch timeout")),Ei),t;try{t=await fetch(xi,{signal:e.signal});}finally{clearTimeout(n);}if(!t.ok)throw new Error(`Speex runtime fetch failed: ${t.status}`);let r=await t.text();if(r.trimStart().startsWith("<"))throw new Error("Speex runtime fetch returned HTML instead of script");let o=document.createElement("script");o.dataset.speexRuntime="true",o.text=r,document.head.appendChild(o);}async function Hn(){let e=typeof window>"u"?void 0:window;return e?.__speexInH5!==void 0?e.__speexInH5:(Ln??=(async()=>{if(e===void 0||typeof document>"u")throw new L("codec-unavailable","Speex \u8FD0\u884C\u65F6\u4EC5\u53EF\u5728\u6D4F\u89C8\u5668\u73AF\u5883\u52A0\u8F7D");if(await Ri(),e.__speexInH5===void 0&&e.initAudio?.(),e.__speexInH5===void 0)throw new L("codec-unavailable","Speex \u8FD0\u884C\u65F6\u521D\u59CB\u5316\u5931\u8D25");return e.__speexInH5})().catch(n=>{throw Ln=null,n instanceof L?n:new L("codec-unavailable","Speex \u8FD0\u884C\u65F6\u52A0\u8F7D\u5931\u8D25",{cause:n})}),Ln)}function yr(){Hn().catch(()=>{});}function pe(e,n,t){for(let r=0;r<t.length;r+=1)e.setUint8(n+r,t.charCodeAt(r));}function Ti(e,n){let r=new ArrayBuffer(44+e.length*2),o=new DataView(r);pe(o,0,"RIFF"),o.setUint32(4,36+e.length*2,true),pe(o,8,"WAVE"),pe(o,12,"fmt "),o.setUint32(16,16,true),o.setUint16(20,1,true),o.setUint16(22,1,true),o.setUint32(24,n,true),o.setUint32(28,n*2,true),o.setUint16(32,2,true),o.setUint16(34,16,true),pe(o,36,"data"),o.setUint32(40,e.length*2,true);let i=44;for(let a=0;a<e.length;a+=1){let s=Math.max(-1,Math.min(1,e[a]??0));o.setInt16(i,s<0?s*32768:s*32767,true),i+=2;}return r}function Fn(e){if(e instanceof Int16Array)return e;let n=new Int16Array(e.length);for(let t=0;t<e.length;t+=1){let r=Math.max(-1,Math.min(1,e[t]??0));n[t]=r<0?r*32768:r*32767;}return n}var ki=40,$n=120,Di=40,jn=80;function Ui(e,n){let t=Math.min(Math.floor(n*ki/1e3),Math.floor(e.length/2));for(let r=0;r<t;r+=1){let o=r/t;e[r]=Math.round((e[r]??0)*o);let i=e.length-1-r;e[i]=Math.round((e[i]??0)*o);}return e}function qn(e,n){if(e.length===0)return e;let t=Math.min(Math.floor(n*$n/1e3),Math.max(0,e.length-1)),r=t>0?e.subarray(t):e,o=new Float32Array(r),i=Math.min(Math.floor(n*Di/1e3),Math.floor(o.length/2));for(let a=0;a<i;a+=1){let s=a/i;o[a]=(o[a]??0)*s;let u=o.length-1-a;o[u]=(o[u]??0)*s;}return o}function ln(e,n){let r=new ArrayBuffer(44+e.length*2),o=new DataView(r);return pe(o,0,"RIFF"),o.setUint32(4,36+e.length*2,true),pe(o,8,"WAVE"),pe(o,12,"fmt "),o.setUint32(16,16,true),o.setUint16(20,1,true),o.setUint16(22,1,true),o.setUint32(24,n,true),o.setUint32(28,n*2,true),o.setUint16(32,2,true),o.setUint16(34,16,true),pe(o,36,"data"),o.setUint32(40,e.length*2,true),new Int16Array(r,44).set(e),new Uint8Array(r)}function Oi(e){let n=new Uint8Array(e.length);for(let t=0;t<e.length;t+=1)n[t]=e.charCodeAt(t)&255;return n}function Bi(e){let t="";for(let r=0;r<e.length;r+=32768)t+=String.fromCharCode(...e.subarray(r,Math.min(r+32768,e.length)));return t}async function hr(e,n){let t=await Hn(),r=Math.floor(n*jn/1e3),o=new Float32Array(r+e.length);o.set(e,r);let i=Ti(o,n);try{return Oi(t.encodeFile(i))}catch(a){throw new L("encode-failed","\u8BED\u97F3\u7F16\u7801\u5931\u8D25",{cause:a})}}async function br(e){let n=await Hn();try{let[t,r]=n.decodeFile(Bi(e));if(t.length===0)throw new Error("decoded empty pcm");let o=Ui(Fn(t),r.rate>0?r.rate:te),i=r.rate>0?r.rate:te;return {samples:o,sampleRate:i,durationMs:Math.round(o.length/i*1e3)}}catch(t){throw t instanceof L?t:new L("decode-failed","\u8BED\u97F3\u89E3\u7801\u5931\u8D25",{cause:t})}}async function Cr(e){let n=await br(e);return {wavData:ln(n.samples,n.sampleRate),durationMs:n.durationMs}}var Ni=.5,Ki=2;function wr(e){if(typeof e!="number"||!Number.isFinite(e))throw new L("invalid-playback-rate",`\u64AD\u653E\u901F\u7387\u5FC5\u987B\u662F\u6709\u9650\u6570\u5B57\uFF0C\u6536\u5230 ${String(e)}`);return Math.min(Math.max(e,Ni),Ki)}function Gi(e={}){let n=e.cacheMax??8,t={activeId:"",isPlaying:false,loadingId:"",progress:0,currentTimeMs:0,errorIds:new Set,playbackRate:e.playbackRate===void 0?1:wr(e.playbackRate)},r=new Set;function o(){for(let f of r)f(t);}let i=null,a=new Map,s=0,u=false,c=false;function g(f){let P=a.get(f);return P!==void 0&&(a.delete(f),a.set(f,P)),P}function C(f,P){if(u)return URL.revokeObjectURL(P.url),P;let _=a.get(f);if(_!==void 0)return URL.revokeObjectURL(P.url),a.delete(f),a.set(f,_),_;for(a.set(f,P);a.size>n;){let M;for(let E of a.keys())if(E!==t.activeId){M=E;break}if(M===void 0)break;let D=a.get(M);a.delete(M),D!==void 0&&URL.revokeObjectURL(D.url);}return P}function h(f){f.paused||f.pause(),f.removeAttribute("src");try{f.load();}catch{}}function l(f,P){return !u&&f===s&&t.activeId===P}function b(f){f.defaultPlaybackRate=t.playbackRate,f.playbackRate=t.playbackRate;}function v(){if(i!==null)return i;let f=new Audio;return f.preload="auto",b(f),f.addEventListener("timeupdate",()=>{t.activeId!==""&&(t.currentTimeMs=f.currentTime*1e3,t.progress=f.duration>0?Math.min(1,f.currentTime/f.duration):0,o());}),f.addEventListener("ended",()=>{A(),h(f),o();}),f.addEventListener("pause",()=>{t.activeId!==""&&(t.isPlaying=false,o());}),i=f,f}function A(){t.activeId="",t.isPlaying=false,t.progress=0,t.currentTimeMs=0;}function R(){s+=1,c=false,t.loadingId="",A(),i!==null&&h(i),o();}function k(f){t.errorIds=new Set([...t.errorIds,f]);}function x(f){if(!t.errorIds.has(f))return;let P=new Set(t.errorIds);P.delete(f),t.errorIds=P;}async function S(f,P){let _=g(f);if(_!==void 0)return {entry:_};let M;try{M=await P();}catch(D){return {entry:null,error:{code:un(D),cause:D}}}if(M===null)return {entry:null};try{let{wavData:D,durationMs:E}=await Cr(M),U={url:URL.createObjectURL(new Blob([D],{type:"audio/wav"})),durationMs:E};return {entry:C(f,U)}}catch(D){return {entry:null,error:{code:un(D),cause:D}}}}async function d(f,P){if(u)return;let _=v();if(x(f),t.activeId===f){if(t.isPlaying){_.pause();return}let E=++s;try{await _.play();}catch{if(!l(E,f))return;k(f),o();return}if(!l(E,f))return;t.isPlaying=true,o(),P.onPlayStart?.();return}if(t.loadingId===f)return;R();let M=++s;t.loadingId=f,o();let D=await S(f,P.load);if(M===s){if(t.loadingId="",D.entry===null){k(f),o(),D.error!==void 0&&P.onDecodeError?.(D.error.code,D.error.cause);return}_.src=D.entry.url,b(_),t.activeId=f,t.progress=0,t.currentTimeMs=0,o();try{await _.play();}catch(E){if(!l(M,f))return;A(),h(_),k(f),o(),P.onDecodeError?.(void 0,E);return}l(M,f)&&(t.isPlaying=true,o(),P.onPlayStart?.());}}function m(f,P){i===null||t.activeId!==f||!Number.isFinite(i.duration)||i.duration<=0||(i.currentTime=Math.min(Math.max(P,0),.999)*i.duration);}function w(f){i===null||t.activeId!==f||t.isPlaying&&(c=true,i.pause());}function p(f){if(i===null||t.activeId!==f||!c)return;c=false;let P=++s;i.play().then(()=>{l(P,f)&&(t.isPlaying=true,o());}).catch(()=>{l(P,f)&&(k(f),o());});}function y(f){let P=wr(f);P!==t.playbackRate&&(t.playbackRate=P,i!==null&&b(i),o());}function I(){if(!u){u=true,R();for(let f of a.values())URL.revokeObjectURL(f.url);a.clear(),r.clear(),i=null;}}return {getState:()=>t,subscribe:f=>(r.add(f),()=>r.delete(f)),toggle:d,seek:m,beginScrub:w,endScrub:p,setPlaybackRate:y,stop:R,dispose:I}}function Li(e){if(e.length===0)return 0;let n=0;for(let t=0;t<e.length;t+=1){let r=((e[t]??128)-128)/128;n+=r*r;}return Math.min(1,Math.sqrt(n/e.length)*Math.SQRT2)}function Hi(e,n,t){if(e.length===0||n<=0||t<=0)return 0;let r=n/t,o=0,i=0;for(let a=0;a<e.length;a+=1){let s=a*r,u=.2;s<200?u=.15:s<300?u=.4:s<=3400?u=1:s<=6e3&&(u=.45),o+=(e[a]??0)/255*u,i+=u;}return i>0?o/i:0}function Pr(e){let n=Li(e.timeDomain),t=Hi(e.frequency,e.sampleRate,e.fftSize),r=n*.55+t*.45;return Math.min(1,r*e.boost)**.72}var pn=class{constructor(n=.45,t=.18){this.attack=n;this.release=t;}attack;release;value=0;next(n){let t=Math.min(1,Math.max(0,n));return t>this.value?this.value+=(t-this.value)*this.attack:this.value+=(t-this.value)*this.release,this.value}};var Fi=5e3,Jn=15e3,$i=25e3,ji=25e3;function Ne(e,n,t){return new Promise((r,o)=>{let i=setTimeout(()=>o(new Error(t)),n);e.then(a=>{clearTimeout(i),r(a);},a=>{clearTimeout(i),o(a);});})}async function qi(){if(typeof navigator>"u"||navigator.mediaDevices?.getUserMedia===void 0)throw new L("no-media-devices","\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u9EA6\u514B\u98CE\u91C7\u96C6");let e=navigator.mediaDevices.getUserMedia({audio:Ji()});try{return await Ne(e,ji,"\u9EA6\u514B\u98CE\u6388\u6743\u8BF7\u6C42\u8D85\u65F6")}catch(n){throw e.then(t=>t.getTracks().forEach(r=>r.stop())).catch(()=>{}),gr(n)}}function Ji(){return {channelCount:1,echoCancellation:true,noiseSuppression:true,autoGainControl:true}}var Vi=50,zi=.12,Wi=2.6,Yi=.06,Qi=256;function Xi(){return typeof MediaRecorder>"u"?"":["audio/webm","audio/webm;codecs=opus","audio/mp4","audio/aac","audio/ogg;codecs=opus"].find(n=>MediaRecorder.isTypeSupported(n))??""}async function Zi(e,n,t){let r=window.AudioContext??window.webkitAudioContext,o=window.OfflineAudioContext??window.webkitOfflineAudioContext;if(o===void 0||t==null&&r===void 0)throw new L("audio-context-blocked","AudioContext \u4E0D\u53EF\u7528");let i=t??new r,a=t==null;try{i.state==="suspended"&&await Ne(i.resume(),Jn,"audioContext.resume timeout").catch(()=>{});let s=await Ne(i.decodeAudioData(await e.arrayBuffer()),Jn,"decodeAudioData timeout"),u=Math.max(1,Math.ceil(s.duration*n)),c=new o(1,u,n),g=c.createBufferSource();return g.buffer=s,g.connect(c.destination),g.start(0),(await Ne(c.startRendering(),Jn,"offlineAudioContext.startRendering timeout")).getChannelData(0).slice()}catch(s){throw s instanceof L?s:new L("decode-failed","\u5F55\u97F3\u6BB5\u89E3\u7801\u5931\u8D25",{cause:s})}finally{a&&i.close().catch(()=>{});}}function Ir(e){let n=0;for(let o of e)n+=o.length;let t=new Float32Array(n),r=0;for(let o of e)t.set(o,r),r+=o.length;return t}async function ea(e={}){if(typeof MediaRecorder>"u")throw new L("no-media-recorder","\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5F55\u97F3");let n;e.stream!==void 0?n=e.stream:n=await qi(),yr();let t=Xi(),r=e.maxDurationMs??6e4,o="recording",i=[],a=0,s=[],u=null,c=null,g=null,C=[],h=0,l=false;function b(){try{let f;try{f=t!==""?new MediaRecorder(n,{mimeType:t}):new MediaRecorder(n);}catch{f=new MediaRecorder(n);}return C=[],f.ondataavailable=P=>{P.data.size>0&&C.push(P.data);},f.start(250),h=Date.now(),f}catch(f){throw f instanceof L?f:new L("device-busy","\u5F55\u97F3\u5668\u542F\u52A8\u5931\u8D25",{cause:f})}}let v=e.amplitude?.intervalMs??Vi,A=e.amplitude?.boost??Wi,R=e.amplitude?.smoothing??zi,k=e.amplitude?.minVolume??Yi;function x(){let f=Math.floor(r/1e3*te),P=0;for(let M of i)P+=M.length;if(P>f){let M=f,D=[];for(let E of i){if(M<=0)break;E.length<=M?(D.push(E),M-=E.length):(D.push(E.slice(0,M)),M=0);}i.length=0,i.push(...D);}a=Math.min(a,r);let _=Math.max(0,Math.ceil(r/v));s.length>_&&(s.length=_);}async function S(){if(o!=="recording"){e.onMaxDuration?.();return}e.onMaxDuration?.(),o="paused";let f=I().then(()=>x());g=f;try{await f;}catch(P){console.warn("[im-browser] pauseAtMaxDuration settle failed",P);}}let d=setInterval(()=>{!l&&o==="recording"&&p()>=r&&(l=true,S());},250),m=null,w=null;try{let f=window.AudioContext??window.webkitAudioContext;if(f!==void 0){m=new f,m.state==="suspended"&&m.resume().catch(()=>{});let P=m.createMediaStreamSource(n),_=m.createAnalyser();_.fftSize=Qi,_.smoothingTimeConstant=R,P.connect(_);let M=new Uint8Array(_.frequencyBinCount),D=new Uint8Array(_.fftSize),E=new pn;w=setInterval(()=>{if(o!=="recording"||u===null)return;_.getByteFrequencyData(M),_.getByteTimeDomainData(D);let U=Pr({timeDomain:D,frequency:M,sampleRate:m.sampleRate,fftSize:_.fftSize,boost:A}),O=E.next(U),N=O<k?0:O;s.push(Math.round(N*255)),e.onAmplitude?.(N);},v);}}catch(f){console.warn("[im-browser] amplitude analyser setup failed",f);}function p(){let f=o==="recording"&&u!==null?Date.now()-h:0;return a+f}function y(){d!==null&&(clearInterval(d),d=null),w!==null&&(clearInterval(w),w=null),m?.close().catch(()=>{}),m=null;for(let f of n.getTracks())f.stop();}function I(){if(c!==null)return c;let f=u;return f===null?Promise.resolve():(u=null,c=(async()=>{await new Promise(M=>{if(f.state==="inactive"){M();return}let D=setTimeout(()=>{console.warn("[im-browser] recorder onstop timed out, settling with received chunks"),M();},Fi);f.onstop=()=>{clearTimeout(D),M();},f.stop();});let P=new Blob(C,{type:f.mimeType||t||"audio/webm"});if(C=[],P.size===0)return;let _=await Zi(P,te,m);_.length!==0&&(i.push(_),a+=_.length/te*1e3);})().finally(()=>{c=null;}),c)}try{u=b();}catch(f){throw o="closed",y(),f}return {getState:()=>o,recordedMs:p,async pause(){o==="recording"&&(o="paused",await I(),(l||a>=r)&&x());},async resume(){o!=="paused"||l||(u=b(),o="recording");},async finish(){if(o==="closed")throw new L("empty-recording","\u5F55\u97F3\u4F1A\u8BDD\u5DF2\u7ED3\u675F");o="closed";let f=async()=>{try{g!==null?await g:await I(),x();}finally{y();}let P=Ir(i);if(P.length===0)throw new L("empty-recording","\u5F55\u97F3\u5185\u5BB9\u4E3A\u7A7A");let _=qn(P,te);if(_.length===0)throw new L("empty-recording","\u5F55\u97F3\u5185\u5BB9\u4E3A\u7A7A");let M=Math.min(s.length,Math.ceil($n/v));return {data:await hr(_,te),durationMs:Math.round(_.length/te*1e3)+jn,waveform:s.slice(M),filename:`AUDIO_${Date.now()}.ogg`,mimeType:"audio/ogg"}};try{return await Ne(f(),$i,"\u5F55\u97F3\u5B9A\u7A3F\u8D85\u65F6")}catch(P){throw y(),P instanceof L?P:new L("encode-failed","\u5F55\u97F3\u5B9A\u7A3F\u5931\u8D25",{cause:P})}},cancel(){o="closed";let f=u;if(u=null,f!==null&&(f.ondataavailable=null,f.onstop=null,f.state!=="inactive"))try{f.stop();}catch{}i.length=0,y();},async previewWav(){g!==null?await g:c!==null&&await c,x();let f=Ir(i),P=qn(f,te);if(P.length===0)throw new L("empty-recording","\u6682\u65E0\u53EF\u8BD5\u542C\u7684\u5F55\u97F3\u5185\u5BB9");return {wavData:ln(Fn(P),te),durationMs:Math.round(P.length/te*1e3)}}}}function ve(e){let n=new Map;return {shouldRenegotiate(t,r,o){if(r===void 0)return true;if(o!==void 0&&!e(o,r))return false;let i=n.get(t);return i!==void 0&&e(i,r)?false:(n.set(t,r),true)},reset(t){n.delete(t);}}}function vr(e,n){return e.length===n.length&&e.every((t,r)=>t===n[r])}var re=class extends Error{constructor(n,t){super(n,t),this.name="ChannelKeyError";}};function Sr(e){let n=e.trim(),t=n.replace(/-/g,"+").replace(/_/g,"/");if(t===""||!/^[A-Z0-9+/]*={0,2}$/i.test(t)||t.length%4===1)throw new re("channel secret_key \u4E0D\u662F\u5408\u6CD5 Base64");let r=t.replace(/=+$/,""),o=r+"=".repeat((4-r.length%4)%4),i;try{i=atob(o);}catch(c){throw new re("channel secret_key Base64 \u89E3\u7801\u5931\u8D25",{cause:c})}let a=Uint8Array.from(i,c=>c.charCodeAt(0)&255);if(a.length===0)throw new re("channel secret_key Base64 \u89E3\u7801\u7ED3\u679C\u4E3A\u7A7A");let s=new Uint8Array(16);s.set(a.subarray(0,s.length));let u=n.length===16&&/^[\x20-\x7E]+$/.test(n)?Uint8Array.from(n,c=>c.charCodeAt(0)):void 0;return {canonical:s,...u===void 0?{}:{legacyAscii:u},metadata:{channelKeyCharLength:n.length,decodedByteLength:a.length,padByteCount:Math.max(0,16-a.length),legacyAsciiCandidate:u!==void 0}}}function na(e){let n=new Map,t=new Map,r=new Map,o=new Map,i=ve(vr);function a(S){return {canonical:S.canonical.slice(),...S.legacyAscii===void 0?{}:{legacyAscii:S.legacyAscii.slice()},metadata:{...S.metadata}}}function s(S){return [{strategy:"canonical-base64-pad",key:S.canonical.slice()},...S.legacyAscii===void 0?[]:[{strategy:"legacy-ascii16",key:S.legacyAscii.slice()}]]}function u(S){n.delete(S),t.delete(S),r.delete(S),o.set(S,(o.get(S)??0)+1);}function c(S){let d=o.get(S)??0,m=(async()=>{try{let w=await e.loadSecretKey(S);if(w===null||w.trim()==="")throw new re(`channel secret_key \u7F3A\u5931\uFF08channelId=${S}\uFF09`);let p=Sr(w);return (o.get(S)??0)===d&&n.set(S,a(p)),p}catch(w){let p=w instanceof re?w:new re(`channel secret_key \u52A0\u8F7D\u5931\u8D25\uFF08channelId=${S}\uFF09`,{cause:w});throw e.onError?.(p.message,w),p}})().finally(()=>{t.get(S)===m&&t.delete(S);});return t.set(S,m),m}function g(S,d){let m=t.get(S);if(m!==void 0)return m;i.shouldRenegotiate(S,d.staleKey,n.get(S)?.canonical)&&u(S);}function C(S,d){let m=S.trim();if(m===""){let p=new re("channel id \u4E0D\u80FD\u4E3A\u7A7A");return e.onError?.(p.message),Promise.reject(p)}if(d!==void 0){let p=g(m,d);if(p!==void 0)return p.then(a)}let w=n.get(m);return w!==void 0?Promise.resolve(a(w)):t.get(m)??c(m)}function h(S,d){let m=S.trim();if(m===""){let I=new re("channel id \u4E0D\u80FD\u4E3A\u7A7A");return e.onError?.(I.message),Promise.reject(I)}if(d!==void 0){let I=g(m,d);if(I!==void 0)return I.then(f=>f.canonical.slice())}let w=n.get(m);if(w!==void 0)return Promise.resolve(w.canonical.slice());let p=r.get(m);if(p!==void 0)return p;let y=(t.get(m)??c(m)).then(I=>I.canonical.slice()).finally(()=>{r.get(m)===y&&r.delete(m);});return r.set(m,y),y}function l(S){return n.get(S.trim())?.canonical.slice()??null}async function b(S,d){let m=await C(S,d);return s(m)}function v(S){let d=n.get(S.trim());return d===void 0?[]:s(d)}function A(S){let d=n.get(S.trim());return d===void 0?null:{...d.metadata}}function R(S,d){let m=S.trim();if(m==="")throw new re("channel id \u4E0D\u80FD\u4E3A\u7A7A");let w=Sr(d);u(m),i.reset(m),n.set(m,a(w));}function k(S){let d=S.trim();d!==""&&(u(d),i.reset(d));}function x(){let S=new Set([...n.keys(),...t.keys(),...r.keys(),...o.keys()]);for(let d of S)o.set(d,(o.get(d)??0)+1),i.reset(d);n.clear(),t.clear(),r.clear();}return {getChannelKey:h,getCachedChannelKey:l,getChannelKeyCandidates:b,getCachedChannelKeyCandidates:v,getCachedChannelKeyMetadata:A,primeChannelKey:R,clearChannelKey:k,clearAll:x}}function Vn(){let e=globalThis.scheduler;return typeof e?.yield=="function"?e.yield():new Promise(n=>setTimeout(n,0))}var Yn=2654435769,Ar=16,Se=8,zn=16,Mr=32;function _r(e){if(e.length<zn)throw new Error(`TEA key \u957F\u5EA6\u4E0D\u8DB3\uFF1A${e.length}\uFF0C\u9700 \u2265 ${zn} \u5B57\u8282`);let n=new DataView(e.buffer,e.byteOffset,zn);return [n.getUint32(0,true),n.getUint32(4,true),n.getUint32(8,true),n.getUint32(12,true)]}function Qn([e,n],[t,r,o,i]){let a=e>>>0,s=n>>>0,u=Math.imul(Yn,16)>>>0;for(let c=0;c<Ar;c++)s=s-(Math.imul(a,16)+o^a+u^(a>>>5)+i)>>>0,a=a-(Math.imul(s,16)+t^s+u^(s>>>5)+r)>>>0,u=u-Yn>>>0;return [a,s]}function Xn([e,n],[t,r,o,i]){let a=e>>>0,s=n>>>0,u=0;for(let c=0;c<Ar;c++)u=u+Yn>>>0,a=a+(Math.imul(s,16)+t^s+u^(s>>>5)+r)>>>0,s=s+(Math.imul(a,16)+o^a+u^(a>>>5)+i)>>>0;return [a,s]}function Ke(e,n,t,r){let o=_r(n),i=new Uint8Array(e.length),a=Math.floor(e.length/Se),s=r===void 0?a:Math.min(a,Math.floor(r/Se)),u=new DataView(e.buffer,e.byteOffset,e.byteLength),c=new DataView(i.buffer);for(let C=0;C<s;C++){let h=C*Se,[l,b]=t([u.getUint32(h,true),u.getUint32(h+4,true)],o);c.setUint32(h,l,true),c.setUint32(h+4,b,true);}let g=s*Se;return g<e.length&&i.set(e.subarray(g),g),i}function Ge(e,n){return Ke(n,e,Qn)}function Le(e,n){return Ke(n,e,Xn)}function xr(e,n){return Ke(n,e,Xn,Mr)}function Er(e,n){return Ke(n,e,Qn,Mr)}var ta=1024*1024;function ra(){return Vn()}function Wn(e){if(e?.aborted)throw new DOMException("TEA \u5206\u5757\u5904\u7406\u5DF2\u53D6\u6D88","AbortError")}async function Zn(e,n,t,r=ta,o={}){if(!Number.isInteger(r)||r<=0||r%Se!==0)throw new RangeError(`TEA \u5206\u5757\u5927\u5C0F\u5FC5\u987B\u662F ${Se} \u7684\u6B63\u6574\u6570\u500D\uFF1A${r}`);_r(e);let i=t==="encrypt"?Xn:Qn,a=o.yieldToMain??ra,s=n.size,u=[],c=0;for(;c<s;){Wn(o.signal);let g=Math.min(c+r,s),C=new Uint8Array(await n.slice(c,g).arrayBuffer());Wn(o.signal),u.push(new Blob([Ke(C,e,i)])),c=g,o.onProgress?.(c,s),c<s&&await a();}return Wn(o.signal),new Blob(u)}var Rr=8,fn=16;function oa(e){let n=V.md.md5.create();return n.update(e,"utf8"),n.digest().toHex()}function kr(e){return new TextEncoder().encode(e)}function ia(e){let n=e.length;for(;n>0&&e[n-1]===0;)n-=1;return new TextDecoder().decode(e.subarray(0,n))}function aa(e){let n=atob(e),t=new Uint8Array(n.length);for(let r=0;r<n.length;r++)t[r]=n.charCodeAt(r);return t}function sa(e){let n="";for(let t of e)n+=String.fromCharCode(t);return btoa(n)}function ca(e){let n=Math.ceil(e.length/Rr)*Rr;if(n===e.length)return e;let t=new Uint8Array(n);return t.set(e),t}function Dr(e,n=oa){let t=e.trim();if(t==="")throw new Error("collect TEA key: userId \u4E3A\u7A7A");let r=n(t).replace(/[^0-9a-f]/gi,"");if(r.length<fn)throw new Error("collect TEA key: MD5 \u957F\u5EA6\u4E0D\u8DB3");let o=kr(r.slice(0,fn).toUpperCase());if(o.length<fn)throw new Error("collect TEA key: \u6D3E\u751F\u7ED3\u679C\u4E0D\u8DB3 16 \u5B57\u8282");return o.subarray(0,fn)}function Ur(e,n,t){return sa(Le(Dr(n,t),ca(kr(e))))}function da(e,n,t){return ia(Ge(Dr(n,t),aa(e)))}function ua(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function et(e){let n=e.trim();if(n===""||!n.startsWith("{"))return null;try{return ua(JSON.parse(n))}catch{return null}}function la(e){let n=e.trim(),t=n.indexOf("}");return t>=0?n.slice(0,t+1):n}function Or(e,n,t){let r=et(e);if(r!==null)return r;if(e.trim()===""||n.trim()==="")return null;try{let o=da(e,n,t);return et(o)??et(la(o))}catch{return null}}var pa="core";var He=class extends Error{code=502;constructor(n,t){super(`core JSON \u4F20\u8F93\u5931\u8D25\uFF1A${n||"unknown transport error"}`,t===void 0?void 0:{cause:t}),this.name="CoreJsonTransportError";}},J=class extends Error{businessCode;operation;constructor(n,t,r){super(`${n}\u5931\u8D25\uFF1Acode=${t}${r?` ${r}`:""}`),this.name="CoreJsonBusinessError",this.businessCode=t,this.operation=n;}};async function T(e,n,t,r){let o=r!==void 0&&"responseMode"in r&&r.responseMode==="strict",i;try{i=await e(n,{target:pa,data:t,...r?.method===void 0?{}:{method:r.method},...r?.headers===void 0?{}:{headers:r.headers},...r?.prefix===void 0?{}:{prefix:r.prefix}});}catch(a){throw o?new He(a instanceof Error?a.message:String(a),a):a}if(o){let a=typeof i.msg=="string"?i.msg:"";if(i.code===502)throw new He(a);return i.code!==200?{ok:false,code:i.code,message:a,data:i.data}:{ok:true,code:200,message:a,data:i.data}}return {code:i.code,data:i.code===200&&i.data!=null?i.data:null}}function Br(e,n){let t=n.clientType===void 0?{public_key:n.publicKey}:{public_key:n.publicKey,clientType:n.clientType},r=n.clientType===void 0?void 0:{headers:{"Client-type":String(n.clientType)}};return T(e,"/user/encrypt_info/info",t,r)}function fa(e){let n=e.trim().replace(/-/g,"+").replace(/_/g,"/"),t=n+"=".repeat((4-n.length%4)%4),r=atob(t),o=new Uint8Array(r.length);for(let i=0;i<r.length;i++)o[i]=r.charCodeAt(i)&255;return o}function ma(e){let n=e.clientType,t=new Map,r=new Map,o=ve((h,l)=>h===l),i=null,a=null;function s(h,l){e.onError?.(h,l);}function u(){if(i!==null)return Promise.resolve(i);if(a!==null)return a;let h=Promise.resolve().then(()=>e.crypto.generateTempKeyPair()).then(l=>(i=l,l)).finally(()=>{a===h&&(a=null);});return a=h,h}async function c(h){let l;try{l=await u();}catch(R){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u751F\u6210\u4E34\u65F6 RSA \u5BC6\u94A5\u5931\u8D25\uFF08userId=${h}\uFF09`,R),null}let b;try{b=await Br(e.client,{publicKey:l.publicKeyBase64,clientType:n});}catch(R){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\u8BF7\u6C42\u5F02\u5E38\uFF08userId=${h}\uFF09`,R),null}if(b.data===null)return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\u4E1A\u52A1\u5931\u8D25\uFF08userId=${h}\uFF0Ccode=${b.code}\uFF09`),null;let v=b.data.prv_key??b.data.prvKey??"",A=String(b.data.version??"").trim();if(v==="")return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\u54CD\u5E94\u7F3A\u5C11 prv_key\uFF08userId=${h}\uFF09`),null;try{let R=e.crypto.rsaDecryptPkcs1({data:fa(v),privateKey:l.privateKey}),k=new TextDecoder().decode(R).trim();if(k==="")return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u89E3\u51FA\u7684\u79C1\u94A5\u4E3A\u7A7A\uFF08userId=${h}\uFF09`),null;let x={privateKey:k,version:A};return t.set(h,x),x}catch(R){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u4E34\u65F6\u79C1\u94A5\u89E3 prv_key \u5931\u8D25\uFF08userId=${h}\uFF09`,R),null}}function g(h,l){let b=h.trim();if(b==="")return Promise.resolve(null);if(l!==void 0){let k=r.get(b);if(k!==void 0)return k;o.shouldRenegotiate(b,l.staleKey,t.get(b)?.privateKey)&&t.delete(b);}let v=t.get(b);if(v!==void 0)return Promise.resolve(v);let A=r.get(b);if(A!==void 0)return A;let R=c(b).finally(()=>{r.get(b)===R&&r.delete(b);});return r.set(b,R),R}function C(h){return t.get(h.trim())??null}return {getUserPrivateKey:g,getCachedPrivateKey:C}}function Nr(e,n){let t=n.clientType===void 0?{group_id:n.groupId,public_key:n.publicKey}:{group_id:n.groupId,public_key:n.publicKey,clientType:n.clientType},r=n.clientType===void 0?void 0:{headers:{"Client-type":String(n.clientType)}};return T(e,"/user_group/encrypt_info",t,r)}function ga(e){let n=e.trim().replace(/-/g,"+").replace(/_/g,"/"),t=n+"=".repeat((4-n.length%4)%4),r=atob(t),o=new Uint8Array(r.length);for(let i=0;i<r.length;i++)o[i]=r.charCodeAt(i)&255;return o}function ya(e){let n=e.clientType,t=new Map,r=new Map,o=new Map,i=ve((l,b)=>l===b),a=null,s=null;function u(){if(a!==null)return Promise.resolve(a);if(s!==null)return s;let l=Promise.resolve().then(()=>e.crypto.generateTempKeyPair()).then(b=>(a=b,b)).finally(()=>{s===l&&(s=null);});return s=l,l}async function c(l){let b=o.get(l)??0,v;try{v=await u();}catch(d){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u751F\u6210\u4E34\u65F6 RSA \u5BC6\u94A5\u5931\u8D25\uFF08groupId=${l}\uFF09`,d),null}let A;try{A=await Nr(e.client,{groupId:l,publicKey:v.publicKeyBase64,clientType:n});}catch(d){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\u8BF7\u6C42\u5F02\u5E38\uFF08groupId=${l}\uFF09`,d),null}if(A.data===null)return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\u4E1A\u52A1\u5931\u8D25\uFF08groupId=${l}\uFF0Ccode=${A.code}\uFF09`),null;let R=A.data,k=String(R.prv_key??R.prvKey??R.private_key??"").trim(),x=String(R.pub_key??R.pubKey??R.public_key??"").trim(),S=String(R.version??"").trim();if(k==="")return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\u54CD\u5E94\u7F3A\u5C11 prv_key\uFF08groupId=${l}\uFF09`),null;try{let d=e.crypto.rsaDecryptPkcs1({data:ga(k),privateKey:v.privateKey}),m=new TextDecoder().decode(d).trim();if(m==="")return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u89E3\u51FA\u7684\u7FA4\u79C1\u94A5\u4E3A\u7A7A\uFF08groupId=${l}\uFF09`),null;let w={privateKey:m,publicKey:x,version:S};return (o.get(l)??0)===b&&t.set(l,w),w}catch(d){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u4E34\u65F6\u79C1\u94A5\u89E3 prv_key \u5931\u8D25\uFF08groupId=${l}\uFF09`,d),null}}function g(l,b){let v=l.trim();if(v==="")return Promise.resolve(null);if(b!==void 0){let x=r.get(v);if(x!==void 0)return x;i.shouldRenegotiate(v,b.staleKey,t.get(v)?.privateKey)&&t.delete(v);}let A=t.get(v);if(A!==void 0)return Promise.resolve(A);let R=r.get(v);if(R!==void 0)return R;let k=c(v).finally(()=>{r.get(v)===k&&r.delete(v);});return r.set(v,k),k}function C(l){return t.get(l.trim())??null}function h(l){let b=l.trim();t.delete(b),r.delete(b),o.set(b,(o.get(b)??0)+1),i.reset(b);}return {getGroupKeys:g,getCachedGroupKeys:C,getCachedGroupKeyVersion:l=>t.get(l.trim())?.version??null,clearGroupKeys:h}}async function Fe(e,n){let t=n.clientType===void 0?{other_user_openid:n.userId}:{other_user_openid:n.userId,clientType:n.clientType},r=n.clientType===void 0?void 0:{headers:{"Client-type":String(n.clientType)}};return (await T(e,"/user/info/other",t,r)).data}function ha(e){let n=e.clientType,t=new Map,r=new Map;async function o(a){try{let u=((await Fe(e.client,{userId:a,clientType:n}))?.public_key??"").trim();return u===""?(e.onError?.(`\u53D6\u5BF9\u7AEF\u516C\u94A5\uFF1A/user/info/other \u65E0 public_key\uFF08userId=${a}\uFF09`),null):(t.set(a,u),u)}catch(s){return e.onError?.(`\u53D6\u5BF9\u7AEF\u516C\u94A5\u8BF7\u6C42\u5F02\u5E38\uFF08userId=${a}\uFF09`,s),null}}function i(a,s){let u=a.trim();if(u==="")return Promise.resolve(null);s?.force===true&&t.delete(u);let c=t.get(u);if(c!==void 0)return Promise.resolve(c);let g=r.get(u);if(g!==void 0)return g;let C=o(u).finally(()=>{r.get(u)===C&&r.delete(u);});return r.set(u,C),C}return {getPeerPublicKey:i}}var ge=16;function Kr(e){let n="";for(let t of e)n+=String.fromCharCode(t);return n}function Gr(e){let n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t)&255;return n}function Lr(e){return e.replace(/(.{64})/g,`$1
|
|
2
2
|
`).trim()}function ba(e){return e.replace(/-----BEGIN[^-]+-----/g,"").replace(/-----END[^-]+-----/g,"").replace(/\s+/g,"")}function Ca(e){let n=(e??"").trim();if(n==="")throw new Error("RSA \u79C1\u94A5\u4E3A\u7A7A");if(n.includes("-----BEGIN"))return V.pki.privateKeyFromPem(n);let t=n.replace(/\s+/g,""),r=[];try{return V.pki.privateKeyFromAsn1(V.asn1.fromDer(V.util.decode64(t)))}catch(i){r.push(i);}let o=Lr(t);for(let i of ["PRIVATE KEY","RSA PRIVATE KEY"])try{return V.pki.privateKeyFromPem(`-----BEGIN ${i}-----
|
|
3
3
|
${o}
|
|
4
4
|
-----END ${i}-----`)}catch(a){r.push(a);}throw new Error(`RSA \u79C1\u94A5\u89E3\u6790\u5931\u8D25\uFF08\u5DF2\u8BD5 PKCS1-DER / PKCS8-PEM / PKCS1-PEM\uFF09\uFF1A${r[0]instanceof Error?r[0].message:String(r[0])}`)}function Hr(e){let n=Ca(e.privateKey),t=Math.ceil(n.n.bitLength()/8),{data:r}=e;if(r.length===0)throw new Error("RSA \u89E3\u5BC6\uFF1A\u5BC6\u6587\u4E3A\u7A7A");let o=[];for(let u=0;u<r.length;u+=t){let c=Math.min(u+t,r.length);try{let g=n.decrypt(Kr(r.subarray(u,c)),"RSAES-PKCS1-V1_5");o.push(Gr(g));}catch(g){let C=g instanceof Error?g.message:String(g);throw new Error(`RSA-PKCS1 \u89E3\u5BC6\u5931\u8D25\uFF08\u5BC6\u6587 ${r.length}B\uFF0C\u5757 ${u}..${c}\uFF0CkeySize ${t}B\uFF0C\u79C1\u94A5 ${n.n.bitLength()}bit\uFF09\uFF1A${C}`)}}let i=o.reduce((u,c)=>u+c.length,0),a=new Uint8Array(i),s=0;for(let u of o)a.set(u,s),s+=u.length;return a}function wa(e){let n=Hr({data:e.secretKey,privateKey:e.privateKey});if(n.length<ge)throw new Error(`\u7AEF\u5230\u7AEF\u89E3\u5BC6\u5931\u8D25\uFF1ARSA \u89E3\u51FA\u7684 teaKey \u957F\u5EA6 ${n.length} < ${ge}`);return Ge(n,e.cipherData)}function Pa(e){let n=(e??"").trim();if(n==="")throw new Error("RSA \u516C\u94A5\u4E3A\u7A7A");if(n.includes("-----BEGIN"))return V.pki.publicKeyFromPem(n);let t=n.replace(/\s+/g,""),r=[];try{return V.pki.publicKeyFromAsn1(V.asn1.fromDer(V.util.decode64(t)))}catch(i){r.push(i);}let o=Lr(t);for(let i of ["PUBLIC KEY","RSA PUBLIC KEY"])try{return V.pki.publicKeyFromPem(`-----BEGIN ${i}-----
|