k2-im 0.1.35 → 0.1.36

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.
@@ -705,6 +705,8 @@ interface ImMessage {
705
705
  serverTime?: number;
706
706
  /** P0 默认 'unread'。 */
707
707
  receipt: MessageReceipt;
708
+ /** 离线单聊服务端标记当前账号已在其它端读过;仅用于本地未读投影,不改变对端回执 receipt。 */
709
+ readBySelf?: boolean;
708
710
  encryption: ImMessageEncryption;
709
711
  /** 群消息 @ 提及(仅群 @ 消息有;解析自 MESGrpChat 明文字段 + extend)。展示走 resolveMentionSegments。 */
710
712
  mention?: ImMessageMention;
@@ -1276,7 +1278,7 @@ interface ImMessageViewBody extends Omit<ImMessageBody, 'image' | 'video' | 'voi
1276
1278
  * `sortKey`、原始协议 `raw`、包含 history cursor 的 `extensions` 以及媒体 key。定位和下载必须继续
1277
1279
  * 通过绑定精确 `ConversationRef` 的 SDK handle/capability 完成,UI 不得从 DTO 恢复内部字段。
1278
1280
  */
1279
- type ImMessageView = Readonly<Omit<ImMessage, 'sortKey' | 'raw' | 'extensions' | 'body' | 'reactions'> & {
1281
+ type ImMessageView = Readonly<Omit<ImMessage, 'sortKey' | 'raw' | 'extensions' | 'body' | 'reactions' | 'readBySelf'> & {
1280
1282
  body: ImMessageViewBody;
1281
1283
  reactions?: ImMessageReactions;
1282
1284
  }>;
@@ -1 +1 @@
1
- import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-BIE4T7BJ.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-PEI5RIM7.js';import'./chunk-DHHXLOOH.js';import'./chunk-EBZORU2A.js';import'./chunk-6OC4FEH7.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 Gt(t){let o=0,g=0;for(let u of t)u.kind==="video"?g+=1:o+=1;return {imageCount:o,videoCount:g}}function zt(t){return {systemMessage:o=>o.body.system!==void 0?g$1(o.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:o=>i$1(o.contentType,{locale:t.locale(),durationMs:o.body.voice?.durationMs,stickerImageType:o.body.sticker?.imageType,gameType:o.body.game?.gameType,callKind:o.body.call?.callKind,...o.body.filesAlbum===void 0?{}:{filesAlbum:{count:o.body.filesAlbum.items.length,caption:o.body.filesAlbum.caption}},...o.body.mediaAlbum===void 0?{}:{mediaAlbum:Gt(o.body.mediaAlbum.items)}}),lastMessage:o=>o.lastMessageSummary!==void 0?h$2(o.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):o.lastMessagePreview,failureText:o=>o.failure?.displayCode!==void 0?f(o.failure.displayCode,{locale:t.locale(),mediaKind:o.failure.mediaKind,params:o.failure.params}):o.failure?.message??""}}var Ot=Symbol("ImThreadReadActions");function Vt(t){provide(Ot,t);}function Xt(){return inject(Ot,void 0)}var ze=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:o,slots:g}){return Vt(t.readActions),()=>{let u=h(t.message),f=t.rendererRegistry.resolve(u);return f!==void 0?h$1(f,{...o,message:t.message,presentation:t.presentation}):g["unsupported-body"]!==void 0?g["unsupported-body"]({kind:u,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":u,"aria-hidden":"true"})}}});var Ye=Symbol("ImThreadViewportRegistration");function Nt(){return inject(Ye,void 0)}var $e=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:o}){let g=Nt();function u(i,d){let w=Array.isArray(d)?d:[d];return w.length===1&&isVNode(w[0])?cloneVNode(w[0],{key:i}):h$1(Fragment,{key:i},w)}function f(i){return d=>{g?.registerMessageNode(i,d instanceof HTMLElement?d:null);}}function C(i,d){return w=>{g?.registerDateNode(i,d,w instanceof HTMLElement?w:null);}}function U(i){return o.encryption?.({item:i})??h$1("div",{"data-im-thread-encryption":i.key})}function h(i){let d=C(i.key,i.label);return o["date-separator"]?.({item:i,setElement:d})??h$1("div",{ref:d,"data-im-thread-date-separator":i.key},i.label)}function A(i){return o["entry-unread"]?.({item:i})??h$1("div",{"data-im-thread-entry-unread":i.key,...i.count===void 0?{}:{"data-count":String(i.count)}})}function m(i){let d=f(i.message.id);return o.item!==void 0?o.item({item:i,setElement:d}):o.message!==void 0?o.message({item:i,setElement:d}):i.message.deletedForEveryone!==void 0?o["deleted-message"]?.({item:i,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":i.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):i.message.recalled!==void 0?o["recalled-message"]?.({item:i,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":i.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):i.kind==="system"&&o.system!==void 0?o.system({item:i,setElement:d}):h$1("article",{ref:d,"data-im-thread-message-id":i.message.id,"data-first-of-run":i.kind==="message"?String(i.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(ze,{message:i.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":o["unsupported-body"]===void 0?void 0:w=>o["unsupported-body"]?.(w)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(i=>{switch(i.kind){case "encryption":return o.item!==void 0?u(i.key,o.item({item:i})):u(i.key,U(i));case "date-separator":return o.item!==void 0?u(i.key,o.item({item:i,setElement:C(i.key,i.label)})):u(i.key,h(i));case "entry-unread":return o.item!==void 0?u(i.key,o.item({item:i})):u(i.key,A(i));case "system":case "message":return u(i.key,m(i))}return i}))}});var Lt=120,lr=500,Ae=.5,dr=8;function Xe(t){let o=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(o!==void 0&&Number.isFinite(o)&&o>0?o:1)}var Je=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:o$1,expose:g$1,slots:u}){let f=ref(null),C$1=ref(null),U=new Map,h=new Map,A=new Set,m$1=new Map,i=0,d=[],w,_,x,P,G=false,S,Y=new Set,$=false,N,ne="",s=1,z$1=false,ie=false,K=true,L=false,Z=false,B$1=false,ee=0,te=-1,he=-1,F,ae,X,k,W,oe=ref(true),p$1=ref(0),T=C(e=>{p$1.value=e,o$1("new-message-count",e);});function v(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=U.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));ne!==""&&ne!==e&&m$1.get(ne)?.element.style.removeProperty("opacity"),ne=e,s=a,e!==""&&m$1.get(e)?.element.style.setProperty("opacity",String(a));}function J(){b();}function E(){let e=f.value;if($||e===null||!t.activeDateEnabled)return;let n=[...m$1.entries()].filter(([,V])=>e.contains(V.element)).map(([V,D])=>{let Q=D.element.getBoundingClientRect();return {key:V,label:D.label,top:Q.top,height:Q.height}}).sort((V,D)=>V.top-D.top),a=e.getBoundingClientRect(),y=n.find(V=>V.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){J(),o$1("active-date-change",null);return}b(I.inlineDateKey,I.inlineOpacity),o$1("active-date-change",I);}function j$1(e){_={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Oe(e){let n=_;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)<=Xe(e)}function Ke(e){return Oe(e)||N!==void 0&&(N.behavior==="smooth"||Math.abs(e.scrollTop-N.targetTop)<=Xe(e))?0:e.scrollTop-i}function Se(e,n){n!==0&&(i=e.scrollTop-n,N=void 0,l());}function be(e,n){let a=Ke(e);if(k!==void 0)return k.expectedOffset-=a,q$1(),Se(e,a),L||me(),false;let y=_;if(y===void 0)return false;let I=w,V=I===void 0?void 0:H([I.id])[0],D=e.scrollTop-y.scrollTop,Q=Oe(e)?0:D,Pe=I===void 0||V===void 0?0:(V.anchorTop??V.top)-n.top-I.offset+D;return y.scrollHeight!==e.scrollHeight||y.width!==e.clientWidth||y.height!==e.clientHeight||Math.abs(Pe)>Ae?(_=void 0,!z$1&&!t.loadingNewer&&t.resizeFollowEnabled&&oe.value&&Math.abs(Q)<=Ae?(Fe(),true):(I!==void 0&&we({...I,offset:I.offset-Q}),Se(e,a),false)):false}function Re(){let e=f.value;if($||e===null)return;let n=e.getBoundingClientRect();if(be(e,n))return;let a=P!==void 0&&G?t.messageIds.filter(D=>A.has(D)):t.messageIds,y=H(a);if(P!==void 0&&G&&y.length===0){oe.value=v(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),V=I.length!==d.length||I.some((D,Q)=>d[Q]!==D);d=Object.freeze(I),w=o(y,{top:n.top,bottom:n.bottom}),j$1(e),T.acknowledgeVisible(I),oe.value=v(e),V&&o$1("visible-range",d),o$1("settled",{visibleMessageIds:d,...d.length===0?{}:{newestVisibleMessageId:d[d.length-1]},isAtBottom:oe.value,newMessageCount:p$1.value});}function re(e){if(Y.add(e),S!==void 0)return;let n=()=>{S=void 0;let a=[...Y];Y.clear(),a.forEach(y=>y());};typeof globalThis.requestAnimationFrame=="function"?S=globalThis.requestAnimationFrame(n):S=globalThis.setTimeout(n,0);}function qe(){S!==void 0&&(typeof S=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(S):globalThis.clearTimeout(S),S=void 0,Y.clear());}function se(){re(Re);}function Ce(){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,j$1(e));}function Ie(){return K&&k===void 0&&!ie&&!t.loadingOlder}function fe(){Ce(),K=false,te=ee,ie=true,o$1("reach-start"),re(()=>{t.loadingOlder||(ie=false);});}function Ne(e){return t.hasNewer&&!z$1&&!t.loadingOlder&&!t.loadingNewer&&v(e)}function Ve(){z$1=true,oe.value=false,he=ee,o$1("reach-end"),re(()=>{t.loadingNewer||(z$1=false);});}function r(){let e=f.value;e===null||ee===he||!Ne(e)||Ve();}function l(){let e=f.value;if($||e===null)return;let n=e.scrollTop,a=Oe(e),y=N,I=false;if(y!==void 0){let D=Math.abs(n-y.targetTop)<=Xe(e);I=y.behavior==="smooth"||D,(y.behavior!=="smooth"||D)&&(N=void 0);}!I&&!a&&!L&&k===void 0&&n!==i&&(L=true,Z=true,ee+=1);let V=L&&!I&&!a&&n!==i;if(V&&(o$1("user-scroll"),re(E)),L&&!B$1&&Me(),!K&&Z&&ee!==te&&n<i&&n>ke()&&(K=true),k!==void 0&&!I)if(L){let D=O();D!==void 0&&(k.expectedOffset=D);}else q$1(),me();Ie()&&V&&n>=0&&m({previousScrollTop:i,currentScrollTop:n,topThreshold:t.olderPrefetchThreshold})&&fe(),V&&Ne(e)&&z({previousScrollTop:i,currentScrollTop:n,isAtBottom:v(e),isHistoryWindow:t.hasNewer,isPageSettling:I})&&Ve(),i=n,se();}function c(e,n="auto"){N={targetTop:e,behavior:n};}function R(e){let n=k,a=C$1.value;if(!(n===void 0||a===null)){if(n.visualOffset=Math.abs(e)<=Ae?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 M(){W!==void 0&&(clearTimeout(W),W=void 0),k!==void 0&&k.visualOffset!==0&&(w=void 0,_=void 0);let e=C$1.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),k=void 0,N=void 0;}function O(){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 q$1(){let e=k,n=O();if(e===void 0||n===void 0)return;let a=e.expectedOffset-n;Math.abs(a)<=Ae||(R(e.visualOffset+a),e.committed=false,e.attempts=0);}function ue(){W!==void 0&&clearTimeout(W),W=setTimeout(()=>{W=void 0,!(L||k?.committed!==true)&&M();},lr);}function de(){let e=f.value,n=k;if($||e===null||n===void 0||L)return;let a=n.visualOffset;if(Math.abs(a)<=Ae){n.committed=true,ue();return}let y=Math.max(0,e.scrollHeight-e.clientHeight),I=Math.min(y,Math.max(0,e.scrollTop-a));if(c(I),e.scrollTop=I,Math.abs(e.scrollTop-I)>Ae){N=void 0,n.committed=false,n.attempts+=1,n.attempts<dr?me():(M(),N=void 0,i=e.scrollTop);return}R(0),i=e.scrollTop,n.expectedOffset=O()??n.expectedOffset,n.committed=true,n.attempts=0,ue();}function me(){W!==void 0&&clearTimeout(W),W=setTimeout(()=>{W=void 0,de();},Lt);}function ve(e){e!==void 0&&(k===void 0&&(k={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),q$1(),!L&&de());}function we(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),V=Math.min(I,Math.max(0,n.scrollTop+y));c(V),n.scrollTop=V,i=n.scrollTop,_=void 0;}}function ke(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function De(){N?.behavior==="smooth"&&(N=void 0),Z=false,L||(L=true,ee+=1),F!==void 0&&(clearTimeout(F),F=void 0);}function Le(){let e=f.value;e===null||ee===te||(k!==void 0&&M(),K=true,e.scrollTop<=ke()&&Ie()&&fe());}function ot(){w=void 0,_=void 0,F!==void 0&&(clearTimeout(F),F=void 0),M(),L=false,Z=false,B$1=false,ae=void 0,X=void 0,ee+=1,te=-1,he=-1,K=true,ie=false,z$1=false,N=void 0;}function it(){B$1||(F!==void 0&&(clearTimeout(F),F=void 0),L=false,Z=false,k!==void 0&&(k.attempts=0),de());}function Me(){B$1||(F!==void 0&&clearTimeout(F),F=setTimeout(()=>{F=void 0,it();},Lt));}function at(){N=void 0,it();}function st(e){B$1=true,De(),ae=e.touches?.[0]?.clientY;}function lt(e){let n=e.touches?.[0]?.clientY;n!==void 0&&(ae!==void 0&&n>ae?Le():ae!==void 0&&n<ae&&r(),ae=n);}function He(){B$1=false,ae=void 0,Me();}function dt(e){De(),e.deltaY<0?Le():e.deltaY>0&&r(),Me();}function ut(e){e.pointerType!=="touch"&&(De(),X=e.clientY,Me());}function ct(e){e.pointerType==="touch"||!L||X===void 0||(e.clientY<X?Le():e.clientY>X&&r(),X=e.clientY,Me());}function Be(e){e.pointerType!=="touch"&&(X=void 0,Me());}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():r(),Me());}function Fe(e="auto"){let n=f.value;if(n===null)return;_=void 0,M();let a=Math.max(0,n.scrollHeight-n.clientHeight);c(a,e),n.scrollTo?.({top:a,behavior:e}),n.scrollTop!==a&&(n.scrollTop=a),i=n.scrollTop,T.clear(),Re();}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=U.get(e);if(a===null||y===void 0||!a.contains(y)||a.clientHeight<=0)return false;M();let I=a.getBoundingClientRect(),V=y.getBoundingClientRect(),D=n.block??"center",Q;D==="start"?Q=a.scrollTop+V.top-I.top:D==="end"?Q=a.scrollTop+V.bottom-I.bottom:D==="nearest"?V.top>=I.top&&V.bottom<=I.bottom?Q=a.scrollTop:V.top<I.top?Q=a.scrollTop+V.top-I.top:Q=a.scrollTop+V.bottom-I.bottom:Q=j({currentScrollTop:a.scrollTop,scrollHeight:a.scrollHeight,targetHeight:V.height,targetTop:V.top,viewportHeight:a.clientHeight,viewportTop:I.top});let Pe=Math.max(0,a.scrollHeight-a.clientHeight),Te=Math.min(Pe,Math.max(0,Q));_=void 0;let Ee=n.behavior??"auto";return c(Te,Ee),a.scrollTo?.({top:Te,behavior:Ee}),a.scrollTop!==Te&&(a.scrollTop=Te),i=a.scrollTop,Re(),true}function _t(){T.clear();}function jt(){z$1=true,oe.value=false;}function Ut(){z$1=false,se();}function Kt(e,n){let a=U.get(e);if(a!==void 0&&a!==n&&(P?.unobserve(a),x?.unobserve?.(a),h.delete(a),A.delete(e)),n===null){U.delete(e),A.delete(e);return}U.set(e,n),h.set(n,e),P?.observe(n),x?.observe(n),se();}function qt(e,n,a){let y=m$1.get(e);if(a===null){m$1.delete(e);return}m$1.set(e,{element:a,label:n}),ne===e&&a.style.setProperty("opacity",String(s)),y?.element!==a&&(a.dataset.imThreadDateSeparator=e);}return provide(Ye,{registerMessageNode:Kt,registerDateNode:qt}),watch(()=>t.contentKey,(e,n)=>{if(e===n)return;ot();let a=f.value;a!==null&&(i=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(ye=>y.has(ye))&&ot();let V=a.getBoundingClientRect(),D=p(w,H(),{top:V.top,bottom:V.bottom}),Q=oe.value,Pe=n[n.length-1],Te=Pe===void 0?-1:e.indexOf(Pe),Ee=Te<0?[]:e.slice(Te+1).filter(ye=>!y.has(ye)),gt=z$1||t.loadingNewer,Wt=e.length===n.length&&e.every(ye=>y.has(ye))&&e.some((ye,We)=>ye!==n[We]);if(await nextTick(),$)return;if(Wt&&Q&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!gt){Fe();return}let pt=n[0];if(pt!==void 0&&e.indexOf(pt)>0&&(ie=false,ve(D)),Ee.length>0){if(gt){z$1=false,k===void 0&&we(D),oe.value=false,se();return}(Q||Ee.some(We=>t.shouldFollowAppendedMessage?.(We)===true))&&t.followNewMessages?Fe():T.add(Ee);}se();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,n)=>{e||!n||!z$1||re(()=>{t.loadingNewer||(z$1=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,n)=>{e||!n||!ie||re(()=>{t.loadingOlder||(ie=false);});},{flush:"pre"}),onMounted(()=>{let e=f.value;if(e!==null){if(i=e.scrollTop,e.addEventListener("scroll",l,{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"){x=new globalThis.ResizeObserver(()=>{$||f.value===null||Re();}),x.observe(e),C$1.value!==null&&x.observe(C$1.value);for(let n of U.values())x.observe(n);}if(typeof globalThis.IntersectionObserver=="function"){P=new globalThis.IntersectionObserver(n=>{for(let a of n){let y=h.get(a.target);y!==void 0&&(a.isIntersecting?A.add(y):A.delete(y));}G=true,se();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let n of U.values())P.observe(n);}se();}}),onBeforeUnmount(()=>{$=true;let e=f.value;e!==null&&e.removeEventListener("scroll",l),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)),F!==void 0&&clearTimeout(F),M(),qe(),x?.disconnect(),P?.disconnect(),J(),U.clear(),h.clear(),A.clear(),m$1.clear(),T.clear();}),g$1({getViewportElement:()=>f.value,clearNewMessageBadge:_t,clearActiveDate:J,isAtBottom:computed(()=>oe.value),isMeasurable:mt,isScrollable:Bt,newMessageCount:computed(()=>p$1.value),prepareHistoryPageAppend:jt,cancelHistoryPageAppend:Ut,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:C$1,"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 Qe(){let t=inject(Ht);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var et=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),tt=Object.freeze({enabled:true,maxFillPages:8}),hr=8,vr=160;function Tr(t,o){return t?.conversationType===o.conversationType&&t.conversationId===o.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:o,slots:g}){let u=t.context??Qe(),f=ref(null),C=ref(0),U=ref(true),h=[],A,m=0,i$1=0,d=null,w="",_="",x="",P=false,G=false,S=ref(false),Y=ref(""),$=ref(false),N,ne,s=computed(()=>u.getState()),z=computed(()=>s.value.pageVisible??u.isPageVisible?.()??true),ie=computed(()=>s.value.pageEngaged??u.isPageEngaged?.()??true),K=computed(()=>Tr(s.value.activeConversation,t.conversation)),L=computed(()=>({...et,...t.viewportOptions})),Z=computed(()=>{let r=t.initialViewportOptions.maxFillPages??tt.maxFillPages;return {enabled:t.initialViewportOptions.enabled??tt.enabled,maxFillPages:Number.isFinite(r)?Math.max(0,Math.floor(r)):tt.maxFillPages}}),B=computed(()=>!K.value||!s.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ee=computed(()=>K.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 he(){N!==void 0&&(clearTimeout(N),N=void 0),ne!==void 0&&(clearTimeout(ne),ne=void 0);}function F(r=false){if(he(),$.value=false,r){f.value?.clearActiveDate(),Y.value="";return}ne=setTimeout(()=>{ne=void 0,!$.value&&(f.value?.clearActiveDate(),Y.value="");},vr);}function ae(r){if(r===null){F();return}he(),Y.value=r.label,$.value=true;let l=L.value.activeDateIdleDelay,c=Number.isFinite(l)?Math.max(0,l):et.activeDateIdleDelay;N=setTimeout(()=>{N=void 0,F();},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 !K.value||s.value.loading||!s.value.hasOlder?Promise.resolve(0):X({kind:"load-older",source:r},()=>u.actions.loadOlder())}function W(){let r=u.actions.loadNewer,l=s.value.loadingNewer??s.value.loading;return !K.value||l||!s.value.hasNewer||r===void 0?Promise.resolve(0):X({kind:"load-newer"},()=>r())}async function oe(r){for(let l=0;l<hr;l+=1){if(!K.value)return;let c=r==="older"?s.value.hasOlder:s.value.hasNewer,R=r==="older"?s.value.olderError:s.value.newerError;if(!c||R!==null||(r==="older"?await k("user-scroll"):await W())>0)return;let O=r==="older"?s.value.hasOlder:s.value.hasNewer,q=r==="older"?s.value.olderError:s.value.newerError;if(!O||q!==null)return}}async function p(){return !K.value||u.actions.loadNewer===void 0?0:v({kind:"load-newer"},()=>u.actions.retryNewer?.()??u.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function T(){return K.value?v({kind:"retry-older"},()=>u.actions.retryOlder?.()??u.actions.loadOlder({force:true})):0}async function v(r,l){let c=B.value,R=++m;d=null,x="";let M;try{M=await X(r,l);}catch(O){throw re(c,R)&&(x=c),O}return re(c,R)&&!S.value&&(d=null,Ie()),M}async function H(){if(!K.value)return false;let r=B.value,l=++i$1;return fe(true),P=true,w=r,_=se(s.value.entryUnread),!await X({kind:"jump-to-latest"},()=>u.actions.jumpToLatest?.()??Promise.resolve(!s.value.isHistoryWindow))||!E(r,l)||(await nextTick(),!E(r,l))?false:(f.value?.scrollToLatest(),true)}function b(r){U.value=r.isAtBottom,C.value=r.newMessageCount,Ie();}function J(r,l){return f.value?.scrollToMessage(r,l)??false}function E(r,l){return !G&&i$1===l&&B.value===r&&K.value}async function j(r,l,c,R){for(let M=0;M<60;M+=1){if(!E(r,l))return false;if(J(c,R))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(O=>window.requestAnimationFrame(()=>O()));}return false}async function Oe(r,l,c){let R=f.value;if(R===null||!R.isMeasurable()||R.isScrollable())return true;let M=0,O=!s.value.hasOlder,q=!s.value.hasNewer||u.actions.loadNewer===void 0,ue=async()=>(await nextTick(),await nextTick(),j(r,l,c,{behavior:"auto",block:"center"})),de=async ve=>{if(!E(r,l)||M>=Z.value.maxFillPages)return false;let we=0;if(ve==="older"){if(O||!s.value.hasOlder)return false;we=await k(),O=!s.value.hasOlder;}else {if(q||!s.value.hasNewer)return false;R.prepareHistoryPageAppend();try{we=await W();}catch(ke){throw R.cancelHistoryPageAppend(),ke}we<=0&&!s.value.hasNewer&&R.cancelHistoryPageAppend(),q=!s.value.hasNewer;}return M+=1,we>0?ue():!(ve==="older"?O:q)};!O&&!await de("older")&&(O=true),!q&&!await de("newer")&&(q=true);let me="older";for(;E(r,l)&&M<Z.value.maxFillPages&&R.isMeasurable()&&!R.isScrollable()&&(!O||!q);){let ve=me==="older"?O?"newer":"older":q?"older":"newer";me=ve==="older"?"newer":"older",await de(ve)||(ve==="older"?O=true:q=true);}return E(r,l)}async function Ke(r,l={behavior:"auto",block:"center"}){if(!K.value||r==="")return false;let c=B.value,R=++i$1;if(!te.value.includes(r)){let q=u.actions.loadAround;if(q===void 0||!await X({kind:"locate-message",messageId:r},()=>q(r))||!E(c,R))return false}return !await j(c,R,r,{...l,behavior:"auto"})||!await Oe(c,R,r)?false:j(c,R,r,l)}function Se(){A!==void 0&&(clearTimeout(A),A=void 0);}function be(){if(Se(),!S.value)return;let r=t.readActions;if(r===void 0||h.length===0)return;let l=Number.isFinite(L.value.visibleReadDelay)?Math.max(0,L.value.visibleReadDelay):et.visibleReadDelay;A=setTimeout(()=>{if(A=void 0,!K.value||!ie.value)return;let c=h[h.length-1];if(c===void 0)return;let R=r.resolveTarget===void 0?c:r.resolveTarget(c);R!=null&&Promise.resolve(r.markRead(R)).catch(M=>{t.hooks?.onError?.({kind:"visible-range",messageIds:h},M);});},l);}function Re(r){h=Object.freeze([...r]);let l={kind:"visible-range",messageIds:h};t.hooks?.beforeAction?.(l);try{u.actions.onVisibleRange?.(h),t.hooks?.afterAction?.(l,void 0);}catch(c){throw t.hooks?.onError?.(l,c),c}S.value?be():Ie();}function re(r,l){return !G&&m===l&&B.value===r&&!P}function qe(r,l){re(r,l)&&(w=r,_=se(s.value.entryUnread),S.value=true,be());}function se(r){return r.state!=="located"?r.state:`${r.state}:${r.firstMessageId}`}async function Ce(r,l,c){for(let R=0;R<60;R+=1){if(!re(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(O=>window.requestAnimationFrame(()=>O()));}return false}function Ie(){let r=B.value,l=se(s.value.entryUnread);if(r===""||s.value.loading||s.value.error!==null&&s.value.messages.length===0||w===r&&(_===l||_.startsWith("located:")||P)||x===r||d!==null)return;if(!Z.value.enabled){w=r,_=l,S.value=true,be();return}let c=++m;P=false,S.value=false;let R=(async()=>{if(await nextTick(),!re(r,c))return;let M=f.value;if(M===null||!M.isMeasurable())return;let O=s.value.entryUnread;if(O.state==="located"&&!te.value.includes(O.firstMessageId))return;let q=O.state==="located"?await Ce(r,c,O.firstMessageId):false;if(O.state==="located"&&!q)return;q||M.scrollToLatest();let ue=0;for(;re(r,c)&&ue<Z.value.maxFillPages&&s.value.error===null&&(s.value.hasOlder||s.value.hasNewer&&u.actions.loadNewer!==void 0)&&M.isMeasurable()&&!M.isScrollable();){if(s.value.hasNewer&&u.actions.loadNewer!==void 0&&(s.value.messages.length===0||!s.value.hasOlder)){let me=i$1;M.prepareHistoryPageAppend();try{await W(),await nextTick();}finally{B.value===r&&i$1===me&&(m===c||P)&&M.cancelHistoryPageAppend();}}else await k();if(!re(r,c)||(ue+=1,await nextTick(),await nextTick(),!M.isMeasurable()))return}if(!re(r,c)||!M.isMeasurable())return;let de=s.value.entryUnread;if(de.state==="located"){if(!te.value.includes(de.firstMessageId)||!await Ce(r,c,de.firstMessageId))return}else M.scrollToLatest();await nextTick(),qe(r,c);})().catch(()=>{re(r,c)&&(x=r);}).finally(()=>{d===R&&(d=null);});d=R;}function fe(r,l=false){m+=1,d=null,P=false,S.value=r,r||(w="",_="",l||(x="")),Se();}function Ne(){if(P=true,S.value)return;let r=B.value;m+=1,d=null,w=r,S.value=true,be();}let Ve=Object.freeze({getViewportElement:()=>f.value?.getViewportElement()??null,loadOlder:k,retryOlder:T,loadNewer:W,retryNewer:p,jumpToLatest:H,scrollToMessage:J,locateMessage:Ke,focusViewport:()=>f.value?.focusViewport()});return o(Ve),watch(ie,r=>{r&&S.value?be():Se();}),watch([()=>s.value.activeRemoteMessageRevision??0,f,B],()=>{let r=f.value;if(r===null||!K.value)return;let l=u.actions.drainActiveRemoteMessageIds?.()??[];r.trackRemoteMessageIds(l,{isAtBottom:U.value,isHistoryWindow:s.value.isHistoryWindow,isPageVisible:z.value})&&(U.value=false);},{flush:"post"}),watch([B,()=>s.value.loading,()=>s.value.error,()=>te.value.length,()=>s.value.hasOlder,()=>se(s.value.entryUnread),Z,()=>s.value.hasNewer],([r,l,c,R,,M],[O,,,q,,ue])=>{if(r!==O&&(i$1+=1,fe(false),F(true),f.value?.clearNewMessageBadge(),C.value=0,U.value=true),r!==""&&r===O&&q!==void 0&&q>0&&R===0&&(s.value.hasOlder||s.value.hasNewer)&&S.value&&fe(false,true),r!==""&&r===O&&M!==ue&&!_.startsWith("located:")&&!P&&M.startsWith("located:")&&(w="",_="",S.value=false),r===""){fe(false);return}if(c!==null&&s.value.messages.length===0){S.value||fe(false,true);return}l||Ie();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{G=true,i$1+=1,fe(false),F(true);}),()=>{let r={conversation:t.conversation,state:s.value,items:ee.value,actions:Ve,initialViewportSettled:B.value!==""&&(s.value.messages.length===0?!s.value.loading&&s.value.error===null&&!s.value.hasOlder&&!s.value.hasNewer:S.value&&w===B.value)},l=[g.header?.(r),g["before-list"]?.(r)];if(!K.value)l.push(g.unsupported?.(r)??h$1("div",{"data-im-thread-unsupported":""}));else if(!s.value.ready&&s.value.loading)l.push(g.loading?.(r)??h$1("div",{"data-im-thread-loading":""}));else if(s.value.error!==null&&s.value.messages.length===0)l.push(g.error?.(r)??h$1("div",{"data-im-thread-error":""}));else if(s.value.ready&&s.value.messages.length===0&&!s.value.hasOlder&&!s.value.hasNewer)l.push(g.empty?.(r)??h$1("div",{"data-im-thread-empty":""}));else {let c=h$1(Je,{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:g["active-date"]!==void 0,resizeFollowEnabled:S.value,followNewMessages:z.value,shouldFollowAppendedMessage:R=>{let M=s.value.messages.find(O=>O.id===R);return M===void 0?false:u.shouldFollowMessage?.(M)===true},onReachStart:()=>{oe("older").catch(()=>{});},onReachEnd:()=>{oe("newer").catch(()=>{});},onSettled:b,onUserScroll:Ne,onActiveDateChange:ae,onVisibleRange:Re,onNewMessageCount:R=>{C.value=R;}},{default:()=>[g["viewport-before"]?.(r),h$1($e,{items:ee.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:g.item,"date-separator":g["date-separator"],"entry-unread":g["entry-unread"],encryption:g.encryption,system:g.system,message:g.message,"recalled-message":g["recalled-message"],"deleted-message":g["deleted-message"],"unsupported-body":g["unsupported-body"]}),g["viewport-after"]?.(r)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[g["active-date"]?.({label:Y.value,visible:$.value&&Y.value!==""}),c])),s.value.error!==null&&l.push(g.error?.(r)??h$1("div",{"data-im-thread-error":""}));}return l.push(g["after-list"]?.(r),g["jump-to-latest"]?.({...r,count:C.value,visible:!U.value||s.value.isHistoryWindow}),g["context-menu"]?.(r),g.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 o=new Map;for(let u of t){if(o.has(u.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${u.kind}`);o.set(u.kind,u.component);}let g=Object.freeze([...o.keys()]);return Object.freeze({kinds:g,resolve:u=>o.get(u)})}var wr=140,Mr=120;function Ue(t,o){if(t.width<=0||t.height<=0)return 0;let g=Math.max(0,Math.min(t.right,o.right)-Math.max(t.left,o.left)),u=Math.max(0,Math.min(t.bottom,o.bottom)-Math.max(t.top,o.top));return Math.min(1,g*u/(t.width*t.height))}function rt(t,o){return {x:t.x,y:t.top-o,top:t.top-o,bottom:t.bottom+o,left:t.left,right:t.right,width:t.width,height:t.height+o*2,toJSON:()=>({})}}function nt(t){let o=Math.max(0,t.scrollIdleMs??wr),g=Math.max(0,t.visibilityDwellMs??Mr),u=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),f=Math.max(0,t.revealMarginPx??0),C=Math.max(0,t.preloadMarginPx??0),U=Math.max(f,C),h=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),A=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),m=new Map,i=new Map,d=reactive(new Set),w=new Set,_=new Set,x=[],P=null,G=null,S=null,Y=false,$=false,N=false,ne=false,s,z;function ie(){s!==void 0&&clearTimeout(s),s=void 0;}function K(){z!==void 0&&clearTimeout(z),z=void 0;}function L(p=false){if(!p&&G!==null||P===null)return;let T=P.getBoundingClientRect(),v=rt(T,U);for(let[H,b]of m){let J=H.getBoundingClientRect();b.ratio=Ue(J,T),b.intersecting=b.ratio>0,b.revealIntersecting=U>0?Ue(J,v)>0:b.intersecting&&b.ratio>=u;}}function Z(p){return p.intersecting&&p.ratio>=u}function B(){for(let[p,T]of m)!T.revealIntersecting||d.has(T.key)||U>f&&(f===0&&!Z(T)||f>0&&(P===null||Ue(p.getBoundingClientRect(),rt(P.getBoundingClientRect(),f))<=0))||(d.add(T.key),t.onRevealed?.(T.item));}function ee(p,T=false){let v=new Set(p.map(b=>b.key));if(!(!(v.size!==_.size||[...v].some(b=>!_.has(b)))&&!T)){_.clear();for(let b of v)_.add(b);t.onSettledVisibleChange?.(p.map(b=>b.item));}}function te(p,T=false){!T&&p.length===x.length&&p.every((v,H)=>v.key===x[H]?.key&&v.item===x[H]?.item)||(x=p,t.onSettledPreloadChange?.(p.map(v=>v.item)));}function he(){if(N||Y)return;let p=$;$=false,L(),B();let T=P?.getBoundingClientRect(),v=T===void 0?0:(T.top+T.bottom)/2,H=[...m.entries()].filter(([,b])=>Z(b)).sort(([b],[J])=>{let E=b.getBoundingClientRect(),j=J.getBoundingClientRect();return Math.abs((E.top+E.bottom)/2-v)-Math.abs((j.top+j.bottom)/2-v)}).slice(0,A).map(([,b])=>b);if(ee(H,p),t.onSettledPreloadChange!==void 0&&T!==void 0){let b=rt(T,C),J=[...m.entries()].filter(([,E])=>E.revealIntersecting).map(([E,j])=>({target:j,rect:E.getBoundingClientRect()})).filter(({target:E,rect:j})=>Z(E)||C>0&&Ue(j,b)>0).sort((E,j)=>Number(Z(j.target))-Number(Z(E.target))||Math.abs((E.rect.top+E.rect.bottom)/2-v)-Math.abs((j.rect.top+j.rect.bottom)/2-v)).slice(0,h).map(({target:E})=>E);te(J,p);}for(let b of H)w.has(b.key)||(w.add(b.key),t.onActivated?.(b.item));}function F(){N||Y||(K(),z=setTimeout(()=>{z=void 0,he();},g));}function ae(){N||($=true,X(true),te([]),L(),B(),ee([]),K(),ie(),s=setTimeout(()=>{s=void 0,X(false),F();},o));}function X(p){Y!==p&&(Y=p,t.onScrollingChange?.(p));}function k(){P?.removeEventListener("scroll",ae),G?.disconnect(),S?.disconnect(),G=null,S=null,P=null;}function W(p=true){if(N)return;let T=t.getRoot();if(!(T===P&&P!==null)){if(te([]),k(),P=T,P===null){p&&!ne&&(ne=true,Promise.resolve().then(()=>{ne=false,N||(W(false),F());}));return}if(P.addEventListener("scroll",ae,{passive:true}),typeof IntersectionObserver<"u"){G=new IntersectionObserver(v=>{for(let H of v){let b=m.get(H.target);b!==void 0&&(b.intersecting=H.isIntersecting,b.ratio=H.intersectionRatio,U===0&&(b.revealIntersecting=H.isIntersecting&&H.intersectionRatio>=u));}B(),F();},{root:P,threshold:[0,u,1]}),U>0&&(S=new IntersectionObserver(v=>{for(let H of v){let b=m.get(H.target);b!==void 0&&(b.revealIntersecting=H.isIntersecting);}B(),F();},{root:P,rootMargin:`${U}px 0px`,threshold:0}));for(let v of m.keys())G.observe(v);for(let v of m.keys())S?.observe(v);}else L(),B();}}function oe(p){te(x.filter(T=>T.key!==p)),d.delete(p),w.delete(p),_.delete(p);}return {register(p,T){if(N)return;let v=t.getKey(p),H=d.has(v),b=w.has(v),J=T===null?void 0:m.get(T);J!==void 0&&J.key!==v&&(i.delete(J.key),m.delete(T),oe(J.key));let E=i.get(v);if(E!==void 0&&E!==T&&(G?.unobserve(E),S?.unobserve(E),m.delete(E),i.delete(v)),T===null){E!==void 0&&(G?.unobserve(E),S?.unobserve(E),m.delete(E),i.delete(v)),oe(v);return}let j=m.get(T);if(j?.key===v&&j.item===p){W();return}m.set(T,{item:p,key:v,intersecting:j?.key===v?j.intersecting:false,ratio:j?.key===v?j.ratio:0,revealIntersecting:j?.key===v?j.revealIntersecting:false}),i.set(v,T),W(),G?.observe(T),S?.observe(T),L(true),B(),H&&t.onRevealed?.(p),b&&t.onActivated?.(p),F();},isRevealed:p=>d.has(t.getKey(p)),isActivated:p=>w.has(t.getKey(p)),isSettledVisible:p=>_.has(t.getKey(p)),isScrolling:()=>Y,notifyScroll:ae,refresh(){W(),L(true),B(),F();},reset(){ie(),K(),X(false),$=false,ee([]),te([]),k(),m.clear(),i.clear(),d.clear(),w.clear();},dispose(){N||(ie(),K(),X(false),$=false,ee([]),te([]),k(),m.clear(),i.clear(),d.clear(),w.clear(),N=true);}}}function Sr(t){let o=new Map,g=new Map,u=false,f=h=>{let A=o.get(h.channel);return A===void 0?h.channel:`${h.channel}\0${A.getKey(h.item)}`},C=nt({getRoot:t.getRoot,getKey:f,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:h=>{for(let A of o.values())A.onScrollingChange?.(h);},onRevealed:h=>o.get(h.channel)?.onRevealed?.(h.item),onActivated:h=>o.get(h.channel)?.onActivated?.(h.item),onSettledPreloadChange:h=>{for(let[A,m]of o){let i=h.filter(d=>d.channel===A).map(d=>d.item);m.onSettledPreloadChange?.(i.slice(0,Math.max(0,m.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:h=>{for(let[A,m]of o){let i=h.filter(w=>w.channel===A).map(w=>w.item),d=m.maxSettledVisible===void 0?i:i.slice(0,m.maxSettledVisible);m.onSettledVisibleChange?.(d);}}});function U(h){return A=>{if(u)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(o.has(h))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${h}`);o.set(h,A);let m=new Map;g.set(h,m);let i=false,d=x=>({channel:h,item:x});function w(){for(let x of m.values())C.register(x.target,null);m.clear(),A.onScrollingChange?.(false),A.onSettledVisibleChange?.([]),A.onSettledPreloadChange?.([]);}return {register(x,P){if(i||u)return;let G=A.getKey(x),S=m.get(G);if(P===null){S!==void 0&&(C.register(S.target,null),m.delete(G));return}let Y=S?.target.item===x?S.target:d(x);m.set(G,{target:Y,element:P}),C.register(Y,P);},isRevealed:x=>C.isRevealed(d(x)),isActivated:x=>C.isActivated(d(x)),isSettledVisible:x=>C.isSettledVisible(d(x)),isScrolling:C.isScrolling,notifyScroll:C.notifyScroll,refresh:C.refresh,reset:w,dispose(){i||(w(),i=true,o.delete(h),g.delete(h));}}}}return {createFactory:U,refresh:C.refresh,dispose(){if(!u){for(let h of g.values())for(let A of h.values())C.register(A.target,null);for(let h of o.values())h.onSettledPreloadChange?.([]);g.clear(),o.clear(),C.dispose(),u=true;}}}}export{ze as ImThreadBodySwitch,$e as ImThreadItems,yr as ImThreadSurface,Je as ImThreadViewport,fr as createImThreadSurfaceContext,br as createMessageRendererRegistry,Sr as createThreadVisibilityTargetGroup,nt as createThreadVisibilityTargets,mr as provideImThreadSurfaceContext,zt as useImText,Qe as useImThreadSurfaceContext,Xt as useOptionalImThreadReadActions};
1
+ import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-SWQXHZDF.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-4WMIGRG4.js';import'./chunk-NB6MXFCH.js';import'./chunk-4CH72T6I.js';import'./chunk-ANHUDX3C.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 Gt(t){let o=0,g=0;for(let u of t)u.kind==="video"?g+=1:o+=1;return {imageCount:o,videoCount:g}}function zt(t){return {systemMessage:o=>o.body.system!==void 0?g$1(o.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:o=>i$1(o.contentType,{locale:t.locale(),durationMs:o.body.voice?.durationMs,stickerImageType:o.body.sticker?.imageType,gameType:o.body.game?.gameType,callKind:o.body.call?.callKind,...o.body.filesAlbum===void 0?{}:{filesAlbum:{count:o.body.filesAlbum.items.length,caption:o.body.filesAlbum.caption}},...o.body.mediaAlbum===void 0?{}:{mediaAlbum:Gt(o.body.mediaAlbum.items)}}),lastMessage:o=>o.lastMessageSummary!==void 0?h$2(o.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):o.lastMessagePreview,failureText:o=>o.failure?.displayCode!==void 0?f(o.failure.displayCode,{locale:t.locale(),mediaKind:o.failure.mediaKind,params:o.failure.params}):o.failure?.message??""}}var Ot=Symbol("ImThreadReadActions");function Vt(t){provide(Ot,t);}function Xt(){return inject(Ot,void 0)}var ze=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:o,slots:g}){return Vt(t.readActions),()=>{let u=h(t.message),f=t.rendererRegistry.resolve(u);return f!==void 0?h$1(f,{...o,message:t.message,presentation:t.presentation}):g["unsupported-body"]!==void 0?g["unsupported-body"]({kind:u,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":u,"aria-hidden":"true"})}}});var Ye=Symbol("ImThreadViewportRegistration");function Nt(){return inject(Ye,void 0)}var $e=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:o}){let g=Nt();function u(i,d){let w=Array.isArray(d)?d:[d];return w.length===1&&isVNode(w[0])?cloneVNode(w[0],{key:i}):h$1(Fragment,{key:i},w)}function f(i){return d=>{g?.registerMessageNode(i,d instanceof HTMLElement?d:null);}}function C(i,d){return w=>{g?.registerDateNode(i,d,w instanceof HTMLElement?w:null);}}function U(i){return o.encryption?.({item:i})??h$1("div",{"data-im-thread-encryption":i.key})}function h(i){let d=C(i.key,i.label);return o["date-separator"]?.({item:i,setElement:d})??h$1("div",{ref:d,"data-im-thread-date-separator":i.key},i.label)}function A(i){return o["entry-unread"]?.({item:i})??h$1("div",{"data-im-thread-entry-unread":i.key,...i.count===void 0?{}:{"data-count":String(i.count)}})}function m(i){let d=f(i.message.id);return o.item!==void 0?o.item({item:i,setElement:d}):o.message!==void 0?o.message({item:i,setElement:d}):i.message.deletedForEveryone!==void 0?o["deleted-message"]?.({item:i,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":i.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):i.message.recalled!==void 0?o["recalled-message"]?.({item:i,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":i.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):i.kind==="system"&&o.system!==void 0?o.system({item:i,setElement:d}):h$1("article",{ref:d,"data-im-thread-message-id":i.message.id,"data-first-of-run":i.kind==="message"?String(i.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(ze,{message:i.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":o["unsupported-body"]===void 0?void 0:w=>o["unsupported-body"]?.(w)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(i=>{switch(i.kind){case "encryption":return o.item!==void 0?u(i.key,o.item({item:i})):u(i.key,U(i));case "date-separator":return o.item!==void 0?u(i.key,o.item({item:i,setElement:C(i.key,i.label)})):u(i.key,h(i));case "entry-unread":return o.item!==void 0?u(i.key,o.item({item:i})):u(i.key,A(i));case "system":case "message":return u(i.key,m(i))}return i}))}});var Lt=120,lr=500,Ae=.5,dr=8;function Xe(t){let o=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(o!==void 0&&Number.isFinite(o)&&o>0?o:1)}var Je=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:o$1,expose:g$1,slots:u}){let f=ref(null),C$1=ref(null),U=new Map,h=new Map,A=new Set,m$1=new Map,i=0,d=[],w,_,x,P,G=false,S,Y=new Set,$=false,N,ne="",s=1,z$1=false,ie=false,K=true,L=false,Z=false,B$1=false,ee=0,te=-1,he=-1,F,ae,X,k,W,oe=ref(true),p$1=ref(0),T=C(e=>{p$1.value=e,o$1("new-message-count",e);});function v(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=U.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));ne!==""&&ne!==e&&m$1.get(ne)?.element.style.removeProperty("opacity"),ne=e,s=a,e!==""&&m$1.get(e)?.element.style.setProperty("opacity",String(a));}function J(){b();}function E(){let e=f.value;if($||e===null||!t.activeDateEnabled)return;let n=[...m$1.entries()].filter(([,V])=>e.contains(V.element)).map(([V,D])=>{let Q=D.element.getBoundingClientRect();return {key:V,label:D.label,top:Q.top,height:Q.height}}).sort((V,D)=>V.top-D.top),a=e.getBoundingClientRect(),y=n.find(V=>V.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){J(),o$1("active-date-change",null);return}b(I.inlineDateKey,I.inlineOpacity),o$1("active-date-change",I);}function j$1(e){_={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Oe(e){let n=_;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)<=Xe(e)}function Ke(e){return Oe(e)||N!==void 0&&(N.behavior==="smooth"||Math.abs(e.scrollTop-N.targetTop)<=Xe(e))?0:e.scrollTop-i}function Se(e,n){n!==0&&(i=e.scrollTop-n,N=void 0,l());}function be(e,n){let a=Ke(e);if(k!==void 0)return k.expectedOffset-=a,q$1(),Se(e,a),L||me(),false;let y=_;if(y===void 0)return false;let I=w,V=I===void 0?void 0:H([I.id])[0],D=e.scrollTop-y.scrollTop,Q=Oe(e)?0:D,Pe=I===void 0||V===void 0?0:(V.anchorTop??V.top)-n.top-I.offset+D;return y.scrollHeight!==e.scrollHeight||y.width!==e.clientWidth||y.height!==e.clientHeight||Math.abs(Pe)>Ae?(_=void 0,!z$1&&!t.loadingNewer&&t.resizeFollowEnabled&&oe.value&&Math.abs(Q)<=Ae?(Fe(),true):(I!==void 0&&we({...I,offset:I.offset-Q}),Se(e,a),false)):false}function Re(){let e=f.value;if($||e===null)return;let n=e.getBoundingClientRect();if(be(e,n))return;let a=P!==void 0&&G?t.messageIds.filter(D=>A.has(D)):t.messageIds,y=H(a);if(P!==void 0&&G&&y.length===0){oe.value=v(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),V=I.length!==d.length||I.some((D,Q)=>d[Q]!==D);d=Object.freeze(I),w=o(y,{top:n.top,bottom:n.bottom}),j$1(e),T.acknowledgeVisible(I),oe.value=v(e),V&&o$1("visible-range",d),o$1("settled",{visibleMessageIds:d,...d.length===0?{}:{newestVisibleMessageId:d[d.length-1]},isAtBottom:oe.value,newMessageCount:p$1.value});}function re(e){if(Y.add(e),S!==void 0)return;let n=()=>{S=void 0;let a=[...Y];Y.clear(),a.forEach(y=>y());};typeof globalThis.requestAnimationFrame=="function"?S=globalThis.requestAnimationFrame(n):S=globalThis.setTimeout(n,0);}function qe(){S!==void 0&&(typeof S=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(S):globalThis.clearTimeout(S),S=void 0,Y.clear());}function se(){re(Re);}function Ce(){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,j$1(e));}function Ie(){return K&&k===void 0&&!ie&&!t.loadingOlder}function fe(){Ce(),K=false,te=ee,ie=true,o$1("reach-start"),re(()=>{t.loadingOlder||(ie=false);});}function Ne(e){return t.hasNewer&&!z$1&&!t.loadingOlder&&!t.loadingNewer&&v(e)}function Ve(){z$1=true,oe.value=false,he=ee,o$1("reach-end"),re(()=>{t.loadingNewer||(z$1=false);});}function r(){let e=f.value;e===null||ee===he||!Ne(e)||Ve();}function l(){let e=f.value;if($||e===null)return;let n=e.scrollTop,a=Oe(e),y=N,I=false;if(y!==void 0){let D=Math.abs(n-y.targetTop)<=Xe(e);I=y.behavior==="smooth"||D,(y.behavior!=="smooth"||D)&&(N=void 0);}!I&&!a&&!L&&k===void 0&&n!==i&&(L=true,Z=true,ee+=1);let V=L&&!I&&!a&&n!==i;if(V&&(o$1("user-scroll"),re(E)),L&&!B$1&&Me(),!K&&Z&&ee!==te&&n<i&&n>ke()&&(K=true),k!==void 0&&!I)if(L){let D=O();D!==void 0&&(k.expectedOffset=D);}else q$1(),me();Ie()&&V&&n>=0&&m({previousScrollTop:i,currentScrollTop:n,topThreshold:t.olderPrefetchThreshold})&&fe(),V&&Ne(e)&&z({previousScrollTop:i,currentScrollTop:n,isAtBottom:v(e),isHistoryWindow:t.hasNewer,isPageSettling:I})&&Ve(),i=n,se();}function c(e,n="auto"){N={targetTop:e,behavior:n};}function R(e){let n=k,a=C$1.value;if(!(n===void 0||a===null)){if(n.visualOffset=Math.abs(e)<=Ae?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 M(){W!==void 0&&(clearTimeout(W),W=void 0),k!==void 0&&k.visualOffset!==0&&(w=void 0,_=void 0);let e=C$1.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),k=void 0,N=void 0;}function O(){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 q$1(){let e=k,n=O();if(e===void 0||n===void 0)return;let a=e.expectedOffset-n;Math.abs(a)<=Ae||(R(e.visualOffset+a),e.committed=false,e.attempts=0);}function ue(){W!==void 0&&clearTimeout(W),W=setTimeout(()=>{W=void 0,!(L||k?.committed!==true)&&M();},lr);}function de(){let e=f.value,n=k;if($||e===null||n===void 0||L)return;let a=n.visualOffset;if(Math.abs(a)<=Ae){n.committed=true,ue();return}let y=Math.max(0,e.scrollHeight-e.clientHeight),I=Math.min(y,Math.max(0,e.scrollTop-a));if(c(I),e.scrollTop=I,Math.abs(e.scrollTop-I)>Ae){N=void 0,n.committed=false,n.attempts+=1,n.attempts<dr?me():(M(),N=void 0,i=e.scrollTop);return}R(0),i=e.scrollTop,n.expectedOffset=O()??n.expectedOffset,n.committed=true,n.attempts=0,ue();}function me(){W!==void 0&&clearTimeout(W),W=setTimeout(()=>{W=void 0,de();},Lt);}function ve(e){e!==void 0&&(k===void 0&&(k={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),q$1(),!L&&de());}function we(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),V=Math.min(I,Math.max(0,n.scrollTop+y));c(V),n.scrollTop=V,i=n.scrollTop,_=void 0;}}function ke(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function De(){N?.behavior==="smooth"&&(N=void 0),Z=false,L||(L=true,ee+=1),F!==void 0&&(clearTimeout(F),F=void 0);}function Le(){let e=f.value;e===null||ee===te||(k!==void 0&&M(),K=true,e.scrollTop<=ke()&&Ie()&&fe());}function ot(){w=void 0,_=void 0,F!==void 0&&(clearTimeout(F),F=void 0),M(),L=false,Z=false,B$1=false,ae=void 0,X=void 0,ee+=1,te=-1,he=-1,K=true,ie=false,z$1=false,N=void 0;}function it(){B$1||(F!==void 0&&(clearTimeout(F),F=void 0),L=false,Z=false,k!==void 0&&(k.attempts=0),de());}function Me(){B$1||(F!==void 0&&clearTimeout(F),F=setTimeout(()=>{F=void 0,it();},Lt));}function at(){N=void 0,it();}function st(e){B$1=true,De(),ae=e.touches?.[0]?.clientY;}function lt(e){let n=e.touches?.[0]?.clientY;n!==void 0&&(ae!==void 0&&n>ae?Le():ae!==void 0&&n<ae&&r(),ae=n);}function He(){B$1=false,ae=void 0,Me();}function dt(e){De(),e.deltaY<0?Le():e.deltaY>0&&r(),Me();}function ut(e){e.pointerType!=="touch"&&(De(),X=e.clientY,Me());}function ct(e){e.pointerType==="touch"||!L||X===void 0||(e.clientY<X?Le():e.clientY>X&&r(),X=e.clientY,Me());}function Be(e){e.pointerType!=="touch"&&(X=void 0,Me());}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():r(),Me());}function Fe(e="auto"){let n=f.value;if(n===null)return;_=void 0,M();let a=Math.max(0,n.scrollHeight-n.clientHeight);c(a,e),n.scrollTo?.({top:a,behavior:e}),n.scrollTop!==a&&(n.scrollTop=a),i=n.scrollTop,T.clear(),Re();}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=U.get(e);if(a===null||y===void 0||!a.contains(y)||a.clientHeight<=0)return false;M();let I=a.getBoundingClientRect(),V=y.getBoundingClientRect(),D=n.block??"center",Q;D==="start"?Q=a.scrollTop+V.top-I.top:D==="end"?Q=a.scrollTop+V.bottom-I.bottom:D==="nearest"?V.top>=I.top&&V.bottom<=I.bottom?Q=a.scrollTop:V.top<I.top?Q=a.scrollTop+V.top-I.top:Q=a.scrollTop+V.bottom-I.bottom:Q=j({currentScrollTop:a.scrollTop,scrollHeight:a.scrollHeight,targetHeight:V.height,targetTop:V.top,viewportHeight:a.clientHeight,viewportTop:I.top});let Pe=Math.max(0,a.scrollHeight-a.clientHeight),Te=Math.min(Pe,Math.max(0,Q));_=void 0;let Ee=n.behavior??"auto";return c(Te,Ee),a.scrollTo?.({top:Te,behavior:Ee}),a.scrollTop!==Te&&(a.scrollTop=Te),i=a.scrollTop,Re(),true}function _t(){T.clear();}function jt(){z$1=true,oe.value=false;}function Ut(){z$1=false,se();}function Kt(e,n){let a=U.get(e);if(a!==void 0&&a!==n&&(P?.unobserve(a),x?.unobserve?.(a),h.delete(a),A.delete(e)),n===null){U.delete(e),A.delete(e);return}U.set(e,n),h.set(n,e),P?.observe(n),x?.observe(n),se();}function qt(e,n,a){let y=m$1.get(e);if(a===null){m$1.delete(e);return}m$1.set(e,{element:a,label:n}),ne===e&&a.style.setProperty("opacity",String(s)),y?.element!==a&&(a.dataset.imThreadDateSeparator=e);}return provide(Ye,{registerMessageNode:Kt,registerDateNode:qt}),watch(()=>t.contentKey,(e,n)=>{if(e===n)return;ot();let a=f.value;a!==null&&(i=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(ye=>y.has(ye))&&ot();let V=a.getBoundingClientRect(),D=p(w,H(),{top:V.top,bottom:V.bottom}),Q=oe.value,Pe=n[n.length-1],Te=Pe===void 0?-1:e.indexOf(Pe),Ee=Te<0?[]:e.slice(Te+1).filter(ye=>!y.has(ye)),gt=z$1||t.loadingNewer,Wt=e.length===n.length&&e.every(ye=>y.has(ye))&&e.some((ye,We)=>ye!==n[We]);if(await nextTick(),$)return;if(Wt&&Q&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!gt){Fe();return}let pt=n[0];if(pt!==void 0&&e.indexOf(pt)>0&&(ie=false,ve(D)),Ee.length>0){if(gt){z$1=false,k===void 0&&we(D),oe.value=false,se();return}(Q||Ee.some(We=>t.shouldFollowAppendedMessage?.(We)===true))&&t.followNewMessages?Fe():T.add(Ee);}se();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,n)=>{e||!n||!z$1||re(()=>{t.loadingNewer||(z$1=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,n)=>{e||!n||!ie||re(()=>{t.loadingOlder||(ie=false);});},{flush:"pre"}),onMounted(()=>{let e=f.value;if(e!==null){if(i=e.scrollTop,e.addEventListener("scroll",l,{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"){x=new globalThis.ResizeObserver(()=>{$||f.value===null||Re();}),x.observe(e),C$1.value!==null&&x.observe(C$1.value);for(let n of U.values())x.observe(n);}if(typeof globalThis.IntersectionObserver=="function"){P=new globalThis.IntersectionObserver(n=>{for(let a of n){let y=h.get(a.target);y!==void 0&&(a.isIntersecting?A.add(y):A.delete(y));}G=true,se();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let n of U.values())P.observe(n);}se();}}),onBeforeUnmount(()=>{$=true;let e=f.value;e!==null&&e.removeEventListener("scroll",l),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)),F!==void 0&&clearTimeout(F),M(),qe(),x?.disconnect(),P?.disconnect(),J(),U.clear(),h.clear(),A.clear(),m$1.clear(),T.clear();}),g$1({getViewportElement:()=>f.value,clearNewMessageBadge:_t,clearActiveDate:J,isAtBottom:computed(()=>oe.value),isMeasurable:mt,isScrollable:Bt,newMessageCount:computed(()=>p$1.value),prepareHistoryPageAppend:jt,cancelHistoryPageAppend:Ut,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:C$1,"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 Qe(){let t=inject(Ht);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var et=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),tt=Object.freeze({enabled:true,maxFillPages:8}),hr=8,vr=160;function Tr(t,o){return t?.conversationType===o.conversationType&&t.conversationId===o.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:o,slots:g}){let u=t.context??Qe(),f=ref(null),C=ref(0),U=ref(true),h=[],A,m=0,i$1=0,d=null,w="",_="",x="",P=false,G=false,S=ref(false),Y=ref(""),$=ref(false),N,ne,s=computed(()=>u.getState()),z=computed(()=>s.value.pageVisible??u.isPageVisible?.()??true),ie=computed(()=>s.value.pageEngaged??u.isPageEngaged?.()??true),K=computed(()=>Tr(s.value.activeConversation,t.conversation)),L=computed(()=>({...et,...t.viewportOptions})),Z=computed(()=>{let r=t.initialViewportOptions.maxFillPages??tt.maxFillPages;return {enabled:t.initialViewportOptions.enabled??tt.enabled,maxFillPages:Number.isFinite(r)?Math.max(0,Math.floor(r)):tt.maxFillPages}}),B=computed(()=>!K.value||!s.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ee=computed(()=>K.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 he(){N!==void 0&&(clearTimeout(N),N=void 0),ne!==void 0&&(clearTimeout(ne),ne=void 0);}function F(r=false){if(he(),$.value=false,r){f.value?.clearActiveDate(),Y.value="";return}ne=setTimeout(()=>{ne=void 0,!$.value&&(f.value?.clearActiveDate(),Y.value="");},vr);}function ae(r){if(r===null){F();return}he(),Y.value=r.label,$.value=true;let l=L.value.activeDateIdleDelay,c=Number.isFinite(l)?Math.max(0,l):et.activeDateIdleDelay;N=setTimeout(()=>{N=void 0,F();},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 !K.value||s.value.loading||!s.value.hasOlder?Promise.resolve(0):X({kind:"load-older",source:r},()=>u.actions.loadOlder())}function W(){let r=u.actions.loadNewer,l=s.value.loadingNewer??s.value.loading;return !K.value||l||!s.value.hasNewer||r===void 0?Promise.resolve(0):X({kind:"load-newer"},()=>r())}async function oe(r){for(let l=0;l<hr;l+=1){if(!K.value)return;let c=r==="older"?s.value.hasOlder:s.value.hasNewer,R=r==="older"?s.value.olderError:s.value.newerError;if(!c||R!==null||(r==="older"?await k("user-scroll"):await W())>0)return;let O=r==="older"?s.value.hasOlder:s.value.hasNewer,q=r==="older"?s.value.olderError:s.value.newerError;if(!O||q!==null)return}}async function p(){return !K.value||u.actions.loadNewer===void 0?0:v({kind:"load-newer"},()=>u.actions.retryNewer?.()??u.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function T(){return K.value?v({kind:"retry-older"},()=>u.actions.retryOlder?.()??u.actions.loadOlder({force:true})):0}async function v(r,l){let c=B.value,R=++m;d=null,x="";let M;try{M=await X(r,l);}catch(O){throw re(c,R)&&(x=c),O}return re(c,R)&&!S.value&&(d=null,Ie()),M}async function H(){if(!K.value)return false;let r=B.value,l=++i$1;return fe(true),P=true,w=r,_=se(s.value.entryUnread),!await X({kind:"jump-to-latest"},()=>u.actions.jumpToLatest?.()??Promise.resolve(!s.value.isHistoryWindow))||!E(r,l)||(await nextTick(),!E(r,l))?false:(f.value?.scrollToLatest(),true)}function b(r){U.value=r.isAtBottom,C.value=r.newMessageCount,Ie();}function J(r,l){return f.value?.scrollToMessage(r,l)??false}function E(r,l){return !G&&i$1===l&&B.value===r&&K.value}async function j(r,l,c,R){for(let M=0;M<60;M+=1){if(!E(r,l))return false;if(J(c,R))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(O=>window.requestAnimationFrame(()=>O()));}return false}async function Oe(r,l,c){let R=f.value;if(R===null||!R.isMeasurable()||R.isScrollable())return true;let M=0,O=!s.value.hasOlder,q=!s.value.hasNewer||u.actions.loadNewer===void 0,ue=async()=>(await nextTick(),await nextTick(),j(r,l,c,{behavior:"auto",block:"center"})),de=async ve=>{if(!E(r,l)||M>=Z.value.maxFillPages)return false;let we=0;if(ve==="older"){if(O||!s.value.hasOlder)return false;we=await k(),O=!s.value.hasOlder;}else {if(q||!s.value.hasNewer)return false;R.prepareHistoryPageAppend();try{we=await W();}catch(ke){throw R.cancelHistoryPageAppend(),ke}we<=0&&!s.value.hasNewer&&R.cancelHistoryPageAppend(),q=!s.value.hasNewer;}return M+=1,we>0?ue():!(ve==="older"?O:q)};!O&&!await de("older")&&(O=true),!q&&!await de("newer")&&(q=true);let me="older";for(;E(r,l)&&M<Z.value.maxFillPages&&R.isMeasurable()&&!R.isScrollable()&&(!O||!q);){let ve=me==="older"?O?"newer":"older":q?"older":"newer";me=ve==="older"?"newer":"older",await de(ve)||(ve==="older"?O=true:q=true);}return E(r,l)}async function Ke(r,l={behavior:"auto",block:"center"}){if(!K.value||r==="")return false;let c=B.value,R=++i$1;if(!te.value.includes(r)){let q=u.actions.loadAround;if(q===void 0||!await X({kind:"locate-message",messageId:r},()=>q(r))||!E(c,R))return false}return !await j(c,R,r,{...l,behavior:"auto"})||!await Oe(c,R,r)?false:j(c,R,r,l)}function Se(){A!==void 0&&(clearTimeout(A),A=void 0);}function be(){if(Se(),!S.value)return;let r=t.readActions;if(r===void 0||h.length===0)return;let l=Number.isFinite(L.value.visibleReadDelay)?Math.max(0,L.value.visibleReadDelay):et.visibleReadDelay;A=setTimeout(()=>{if(A=void 0,!K.value||!ie.value)return;let c=h[h.length-1];if(c===void 0)return;let R=r.resolveTarget===void 0?c:r.resolveTarget(c);R!=null&&Promise.resolve(r.markRead(R)).catch(M=>{t.hooks?.onError?.({kind:"visible-range",messageIds:h},M);});},l);}function Re(r){h=Object.freeze([...r]);let l={kind:"visible-range",messageIds:h};t.hooks?.beforeAction?.(l);try{u.actions.onVisibleRange?.(h),t.hooks?.afterAction?.(l,void 0);}catch(c){throw t.hooks?.onError?.(l,c),c}S.value?be():Ie();}function re(r,l){return !G&&m===l&&B.value===r&&!P}function qe(r,l){re(r,l)&&(w=r,_=se(s.value.entryUnread),S.value=true,be());}function se(r){return r.state!=="located"?r.state:`${r.state}:${r.firstMessageId}`}async function Ce(r,l,c){for(let R=0;R<60;R+=1){if(!re(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(O=>window.requestAnimationFrame(()=>O()));}return false}function Ie(){let r=B.value,l=se(s.value.entryUnread);if(r===""||s.value.loading||s.value.error!==null&&s.value.messages.length===0||w===r&&(_===l||_.startsWith("located:")||P)||x===r||d!==null)return;if(!Z.value.enabled){w=r,_=l,S.value=true,be();return}let c=++m;P=false,S.value=false;let R=(async()=>{if(await nextTick(),!re(r,c))return;let M=f.value;if(M===null||!M.isMeasurable())return;let O=s.value.entryUnread;if(O.state==="located"&&!te.value.includes(O.firstMessageId))return;let q=O.state==="located"?await Ce(r,c,O.firstMessageId):false;if(O.state==="located"&&!q)return;q||M.scrollToLatest();let ue=0;for(;re(r,c)&&ue<Z.value.maxFillPages&&s.value.error===null&&(s.value.hasOlder||s.value.hasNewer&&u.actions.loadNewer!==void 0)&&M.isMeasurable()&&!M.isScrollable();){if(s.value.hasNewer&&u.actions.loadNewer!==void 0&&(s.value.messages.length===0||!s.value.hasOlder)){let me=i$1;M.prepareHistoryPageAppend();try{await W(),await nextTick();}finally{B.value===r&&i$1===me&&(m===c||P)&&M.cancelHistoryPageAppend();}}else await k();if(!re(r,c)||(ue+=1,await nextTick(),await nextTick(),!M.isMeasurable()))return}if(!re(r,c)||!M.isMeasurable())return;let de=s.value.entryUnread;if(de.state==="located"){if(!te.value.includes(de.firstMessageId)||!await Ce(r,c,de.firstMessageId))return}else M.scrollToLatest();await nextTick(),qe(r,c);})().catch(()=>{re(r,c)&&(x=r);}).finally(()=>{d===R&&(d=null);});d=R;}function fe(r,l=false){m+=1,d=null,P=false,S.value=r,r||(w="",_="",l||(x="")),Se();}function Ne(){if(P=true,S.value)return;let r=B.value;m+=1,d=null,w=r,S.value=true,be();}let Ve=Object.freeze({getViewportElement:()=>f.value?.getViewportElement()??null,loadOlder:k,retryOlder:T,loadNewer:W,retryNewer:p,jumpToLatest:H,scrollToMessage:J,locateMessage:Ke,focusViewport:()=>f.value?.focusViewport()});return o(Ve),watch(ie,r=>{r&&S.value?be():Se();}),watch([()=>s.value.activeRemoteMessageRevision??0,f,B],()=>{let r=f.value;if(r===null||!K.value)return;let l=u.actions.drainActiveRemoteMessageIds?.()??[];r.trackRemoteMessageIds(l,{isAtBottom:U.value,isHistoryWindow:s.value.isHistoryWindow,isPageVisible:z.value})&&(U.value=false);},{flush:"post"}),watch([B,()=>s.value.loading,()=>s.value.error,()=>te.value.length,()=>s.value.hasOlder,()=>se(s.value.entryUnread),Z,()=>s.value.hasNewer],([r,l,c,R,,M],[O,,,q,,ue])=>{if(r!==O&&(i$1+=1,fe(false),F(true),f.value?.clearNewMessageBadge(),C.value=0,U.value=true),r!==""&&r===O&&q!==void 0&&q>0&&R===0&&(s.value.hasOlder||s.value.hasNewer)&&S.value&&fe(false,true),r!==""&&r===O&&M!==ue&&!_.startsWith("located:")&&!P&&M.startsWith("located:")&&(w="",_="",S.value=false),r===""){fe(false);return}if(c!==null&&s.value.messages.length===0){S.value||fe(false,true);return}l||Ie();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{G=true,i$1+=1,fe(false),F(true);}),()=>{let r={conversation:t.conversation,state:s.value,items:ee.value,actions:Ve,initialViewportSettled:B.value!==""&&(s.value.messages.length===0?!s.value.loading&&s.value.error===null&&!s.value.hasOlder&&!s.value.hasNewer:S.value&&w===B.value)},l=[g.header?.(r),g["before-list"]?.(r)];if(!K.value)l.push(g.unsupported?.(r)??h$1("div",{"data-im-thread-unsupported":""}));else if(!s.value.ready&&s.value.loading)l.push(g.loading?.(r)??h$1("div",{"data-im-thread-loading":""}));else if(s.value.error!==null&&s.value.messages.length===0)l.push(g.error?.(r)??h$1("div",{"data-im-thread-error":""}));else if(s.value.ready&&s.value.messages.length===0&&!s.value.hasOlder&&!s.value.hasNewer)l.push(g.empty?.(r)??h$1("div",{"data-im-thread-empty":""}));else {let c=h$1(Je,{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:g["active-date"]!==void 0,resizeFollowEnabled:S.value,followNewMessages:z.value,shouldFollowAppendedMessage:R=>{let M=s.value.messages.find(O=>O.id===R);return M===void 0?false:u.shouldFollowMessage?.(M)===true},onReachStart:()=>{oe("older").catch(()=>{});},onReachEnd:()=>{oe("newer").catch(()=>{});},onSettled:b,onUserScroll:Ne,onActiveDateChange:ae,onVisibleRange:Re,onNewMessageCount:R=>{C.value=R;}},{default:()=>[g["viewport-before"]?.(r),h$1($e,{items:ee.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:g.item,"date-separator":g["date-separator"],"entry-unread":g["entry-unread"],encryption:g.encryption,system:g.system,message:g.message,"recalled-message":g["recalled-message"],"deleted-message":g["deleted-message"],"unsupported-body":g["unsupported-body"]}),g["viewport-after"]?.(r)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[g["active-date"]?.({label:Y.value,visible:$.value&&Y.value!==""}),c])),s.value.error!==null&&l.push(g.error?.(r)??h$1("div",{"data-im-thread-error":""}));}return l.push(g["after-list"]?.(r),g["jump-to-latest"]?.({...r,count:C.value,visible:!U.value||s.value.isHistoryWindow}),g["context-menu"]?.(r),g.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 o=new Map;for(let u of t){if(o.has(u.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${u.kind}`);o.set(u.kind,u.component);}let g=Object.freeze([...o.keys()]);return Object.freeze({kinds:g,resolve:u=>o.get(u)})}var wr=140,Mr=120;function Ue(t,o){if(t.width<=0||t.height<=0)return 0;let g=Math.max(0,Math.min(t.right,o.right)-Math.max(t.left,o.left)),u=Math.max(0,Math.min(t.bottom,o.bottom)-Math.max(t.top,o.top));return Math.min(1,g*u/(t.width*t.height))}function rt(t,o){return {x:t.x,y:t.top-o,top:t.top-o,bottom:t.bottom+o,left:t.left,right:t.right,width:t.width,height:t.height+o*2,toJSON:()=>({})}}function nt(t){let o=Math.max(0,t.scrollIdleMs??wr),g=Math.max(0,t.visibilityDwellMs??Mr),u=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),f=Math.max(0,t.revealMarginPx??0),C=Math.max(0,t.preloadMarginPx??0),U=Math.max(f,C),h=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),A=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),m=new Map,i=new Map,d=reactive(new Set),w=new Set,_=new Set,x=[],P=null,G=null,S=null,Y=false,$=false,N=false,ne=false,s,z;function ie(){s!==void 0&&clearTimeout(s),s=void 0;}function K(){z!==void 0&&clearTimeout(z),z=void 0;}function L(p=false){if(!p&&G!==null||P===null)return;let T=P.getBoundingClientRect(),v=rt(T,U);for(let[H,b]of m){let J=H.getBoundingClientRect();b.ratio=Ue(J,T),b.intersecting=b.ratio>0,b.revealIntersecting=U>0?Ue(J,v)>0:b.intersecting&&b.ratio>=u;}}function Z(p){return p.intersecting&&p.ratio>=u}function B(){for(let[p,T]of m)!T.revealIntersecting||d.has(T.key)||U>f&&(f===0&&!Z(T)||f>0&&(P===null||Ue(p.getBoundingClientRect(),rt(P.getBoundingClientRect(),f))<=0))||(d.add(T.key),t.onRevealed?.(T.item));}function ee(p,T=false){let v=new Set(p.map(b=>b.key));if(!(!(v.size!==_.size||[...v].some(b=>!_.has(b)))&&!T)){_.clear();for(let b of v)_.add(b);t.onSettledVisibleChange?.(p.map(b=>b.item));}}function te(p,T=false){!T&&p.length===x.length&&p.every((v,H)=>v.key===x[H]?.key&&v.item===x[H]?.item)||(x=p,t.onSettledPreloadChange?.(p.map(v=>v.item)));}function he(){if(N||Y)return;let p=$;$=false,L(),B();let T=P?.getBoundingClientRect(),v=T===void 0?0:(T.top+T.bottom)/2,H=[...m.entries()].filter(([,b])=>Z(b)).sort(([b],[J])=>{let E=b.getBoundingClientRect(),j=J.getBoundingClientRect();return Math.abs((E.top+E.bottom)/2-v)-Math.abs((j.top+j.bottom)/2-v)}).slice(0,A).map(([,b])=>b);if(ee(H,p),t.onSettledPreloadChange!==void 0&&T!==void 0){let b=rt(T,C),J=[...m.entries()].filter(([,E])=>E.revealIntersecting).map(([E,j])=>({target:j,rect:E.getBoundingClientRect()})).filter(({target:E,rect:j})=>Z(E)||C>0&&Ue(j,b)>0).sort((E,j)=>Number(Z(j.target))-Number(Z(E.target))||Math.abs((E.rect.top+E.rect.bottom)/2-v)-Math.abs((j.rect.top+j.rect.bottom)/2-v)).slice(0,h).map(({target:E})=>E);te(J,p);}for(let b of H)w.has(b.key)||(w.add(b.key),t.onActivated?.(b.item));}function F(){N||Y||(K(),z=setTimeout(()=>{z=void 0,he();},g));}function ae(){N||($=true,X(true),te([]),L(),B(),ee([]),K(),ie(),s=setTimeout(()=>{s=void 0,X(false),F();},o));}function X(p){Y!==p&&(Y=p,t.onScrollingChange?.(p));}function k(){P?.removeEventListener("scroll",ae),G?.disconnect(),S?.disconnect(),G=null,S=null,P=null;}function W(p=true){if(N)return;let T=t.getRoot();if(!(T===P&&P!==null)){if(te([]),k(),P=T,P===null){p&&!ne&&(ne=true,Promise.resolve().then(()=>{ne=false,N||(W(false),F());}));return}if(P.addEventListener("scroll",ae,{passive:true}),typeof IntersectionObserver<"u"){G=new IntersectionObserver(v=>{for(let H of v){let b=m.get(H.target);b!==void 0&&(b.intersecting=H.isIntersecting,b.ratio=H.intersectionRatio,U===0&&(b.revealIntersecting=H.isIntersecting&&H.intersectionRatio>=u));}B(),F();},{root:P,threshold:[0,u,1]}),U>0&&(S=new IntersectionObserver(v=>{for(let H of v){let b=m.get(H.target);b!==void 0&&(b.revealIntersecting=H.isIntersecting);}B(),F();},{root:P,rootMargin:`${U}px 0px`,threshold:0}));for(let v of m.keys())G.observe(v);for(let v of m.keys())S?.observe(v);}else L(),B();}}function oe(p){te(x.filter(T=>T.key!==p)),d.delete(p),w.delete(p),_.delete(p);}return {register(p,T){if(N)return;let v=t.getKey(p),H=d.has(v),b=w.has(v),J=T===null?void 0:m.get(T);J!==void 0&&J.key!==v&&(i.delete(J.key),m.delete(T),oe(J.key));let E=i.get(v);if(E!==void 0&&E!==T&&(G?.unobserve(E),S?.unobserve(E),m.delete(E),i.delete(v)),T===null){E!==void 0&&(G?.unobserve(E),S?.unobserve(E),m.delete(E),i.delete(v)),oe(v);return}let j=m.get(T);if(j?.key===v&&j.item===p){W();return}m.set(T,{item:p,key:v,intersecting:j?.key===v?j.intersecting:false,ratio:j?.key===v?j.ratio:0,revealIntersecting:j?.key===v?j.revealIntersecting:false}),i.set(v,T),W(),G?.observe(T),S?.observe(T),L(true),B(),H&&t.onRevealed?.(p),b&&t.onActivated?.(p),F();},isRevealed:p=>d.has(t.getKey(p)),isActivated:p=>w.has(t.getKey(p)),isSettledVisible:p=>_.has(t.getKey(p)),isScrolling:()=>Y,notifyScroll:ae,refresh(){W(),L(true),B(),F();},reset(){ie(),K(),X(false),$=false,ee([]),te([]),k(),m.clear(),i.clear(),d.clear(),w.clear();},dispose(){N||(ie(),K(),X(false),$=false,ee([]),te([]),k(),m.clear(),i.clear(),d.clear(),w.clear(),N=true);}}}function Sr(t){let o=new Map,g=new Map,u=false,f=h=>{let A=o.get(h.channel);return A===void 0?h.channel:`${h.channel}\0${A.getKey(h.item)}`},C=nt({getRoot:t.getRoot,getKey:f,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:h=>{for(let A of o.values())A.onScrollingChange?.(h);},onRevealed:h=>o.get(h.channel)?.onRevealed?.(h.item),onActivated:h=>o.get(h.channel)?.onActivated?.(h.item),onSettledPreloadChange:h=>{for(let[A,m]of o){let i=h.filter(d=>d.channel===A).map(d=>d.item);m.onSettledPreloadChange?.(i.slice(0,Math.max(0,m.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:h=>{for(let[A,m]of o){let i=h.filter(w=>w.channel===A).map(w=>w.item),d=m.maxSettledVisible===void 0?i:i.slice(0,m.maxSettledVisible);m.onSettledVisibleChange?.(d);}}});function U(h){return A=>{if(u)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(o.has(h))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${h}`);o.set(h,A);let m=new Map;g.set(h,m);let i=false,d=x=>({channel:h,item:x});function w(){for(let x of m.values())C.register(x.target,null);m.clear(),A.onScrollingChange?.(false),A.onSettledVisibleChange?.([]),A.onSettledPreloadChange?.([]);}return {register(x,P){if(i||u)return;let G=A.getKey(x),S=m.get(G);if(P===null){S!==void 0&&(C.register(S.target,null),m.delete(G));return}let Y=S?.target.item===x?S.target:d(x);m.set(G,{target:Y,element:P}),C.register(Y,P);},isRevealed:x=>C.isRevealed(d(x)),isActivated:x=>C.isActivated(d(x)),isSettledVisible:x=>C.isSettledVisible(d(x)),isScrolling:C.isScrolling,notifyScroll:C.notifyScroll,refresh:C.refresh,reset:w,dispose(){i||(w(),i=true,o.delete(h),g.delete(h));}}}}return {createFactory:U,refresh:C.refresh,dispose(){if(!u){for(let h of g.values())for(let A of h.values())C.register(A.target,null);for(let h of o.values())h.onSettledPreloadChange?.([]);g.clear(),o.clear(),C.dispose(),u=true;}}}}export{ze as ImThreadBodySwitch,$e as ImThreadItems,yr as ImThreadSurface,Je as ImThreadViewport,fr as createImThreadSurfaceContext,br as createMessageRendererRegistry,Sr as createThreadVisibilityTargetGroup,nt as createThreadVisibilityTargets,mr as provideImThreadSurfaceContext,zt as useImText,Qe as useImThreadSurfaceContext,Xt as useOptionalImThreadReadActions};
@@ -752,6 +752,8 @@ interface ImMessage {
752
752
  serverTime?: number;
753
753
  /** P0 默认 'unread'。 */
754
754
  receipt: MessageReceipt;
755
+ /** 离线单聊服务端标记当前账号已在其它端读过;仅用于本地未读投影,不改变对端回执 receipt。 */
756
+ readBySelf?: boolean;
755
757
  encryption: ImMessageEncryption;
756
758
  /** 群消息 @ 提及(仅群 @ 消息有;解析自 MESGrpChat 明文字段 + extend)。展示走 resolveMentionSegments。 */
757
759
  mention?: ImMessageMention;
@@ -3175,7 +3177,7 @@ interface ImMessageViewBody extends Omit<ImMessageBody, 'image' | 'video' | 'voi
3175
3177
  * `sortKey`、原始协议 `raw`、包含 history cursor 的 `extensions` 以及媒体 key。定位和下载必须继续
3176
3178
  * 通过绑定精确 `ConversationRef` 的 SDK handle/capability 完成,UI 不得从 DTO 恢复内部字段。
3177
3179
  */
3178
- type ImMessageView = Readonly<Omit<ImMessage, 'sortKey' | 'raw' | 'extensions' | 'body' | 'reactions'> & {
3180
+ type ImMessageView = Readonly<Omit<ImMessage, 'sortKey' | 'raw' | 'extensions' | 'body' | 'reactions' | 'readBySelf'> & {
3179
3181
  body: ImMessageViewBody;
3180
3182
  reactions?: ImMessageReactions;
3181
3183
  }>;
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,Q as SPIKE_STEP,M as calculateMediaBox,C as canCopyMessageImage,t as canPromoteMediaPresentationSource,z as captureRuntimeClientOperation,y as captureRuntimeOperation,n as channelMiniProgramRelKey,x as createConversationPrefetchController,r as createDelayedLoadingIndicator,K as createLinkMatcher,D as createMessageImageCopySource,f as csvIncludes,d as decideChannelMiniProgramRelOpen,O as formatFileSize,N as formatMediaDuration,P as getFileExtension,B as getMessageCopyImageUrl,A as getMessageCopyText,J as hasLinkCandidate,H as highlightSegments,a as isMiniProgramShowTypeOpenable,E as mediaService,I as normalizeLinkHref,T as placeholderWaveform,F as readService,S as resampleWaveform,s as resolveBestMediaPresentationSource,h as resolveChannelMiniProgramRelIcon,g as resolveChannelMiniProgramRelName,j as resolveChannelMiniProgramRelOpenSurface,i as resolveChannelMiniProgramRelUrl,k as resolveChannelPinnedGameCopy,o as resolveConversationListPresentation,L as resolveMediaPresentation,c as resolveMiniProgramFloatLinkUrl,w as resolveMiniProgramGamePreviewLayout,b as resolveMiniProgramOpenUrl,G as resolveQuotedMessagePresentation,m as resolveVisibleChannelMiniProgramRels,l as sortChannelMiniProgramFloatingItems,R as spikeCountForDuration}from'./chunk-SP6V2AFT.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-WYYUGVXE.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-BIE4T7BJ.js';import'./chunk-PEI5RIM7.js';import'./chunk-DHHXLOOH.js';import'./chunk-EBZORU2A.js';export{va as canTransmit,ta as canTransmitByType,ua as canTransmitContent,sa as requiresForwardTypeConfirmation}from'./chunk-6OC4FEH7.js';import'./chunk-WOT6VMZA.js';
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,Q as SPIKE_STEP,M as calculateMediaBox,C as canCopyMessageImage,t as canPromoteMediaPresentationSource,z as captureRuntimeClientOperation,y as captureRuntimeOperation,n as channelMiniProgramRelKey,x as createConversationPrefetchController,r as createDelayedLoadingIndicator,K as createLinkMatcher,D as createMessageImageCopySource,f as csvIncludes,d as decideChannelMiniProgramRelOpen,O as formatFileSize,N as formatMediaDuration,P as getFileExtension,B as getMessageCopyImageUrl,A as getMessageCopyText,J as hasLinkCandidate,H as highlightSegments,a as isMiniProgramShowTypeOpenable,E as mediaService,I as normalizeLinkHref,T as placeholderWaveform,F as readService,S as resampleWaveform,s as resolveBestMediaPresentationSource,h as resolveChannelMiniProgramRelIcon,g as resolveChannelMiniProgramRelName,j as resolveChannelMiniProgramRelOpenSurface,i as resolveChannelMiniProgramRelUrl,k as resolveChannelPinnedGameCopy,o as resolveConversationListPresentation,L as resolveMediaPresentation,c as resolveMiniProgramFloatLinkUrl,w as resolveMiniProgramGamePreviewLayout,b as resolveMiniProgramOpenUrl,G as resolveQuotedMessagePresentation,m as resolveVisibleChannelMiniProgramRels,l as sortChannelMiniProgramFloatingItems,R as spikeCountForDuration}from'./chunk-R3FWUQK4.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-UKL2AULH.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-SWQXHZDF.js';import'./chunk-4WMIGRG4.js';import'./chunk-NB6MXFCH.js';import'./chunk-4CH72T6I.js';export{va as canTransmit,ta as canTransmitByType,ua as canTransmitContent,sa as requiresForwardTypeConfirmation}from'./chunk-ANHUDX3C.js';import'./chunk-WOT6VMZA.js';
@@ -1,4 +1,4 @@
1
- import {wa as wa$1,G,J as J$1,f,g,i,Y as Y$1,Z,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 as K$1,H as H$1,N,P,R,Q as Q$1,S,T,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,_,$,l,s,Ca as Ca$1,Ba as Ba$1,ca as ca$1,da as da$1}from'./chunk-6OC4FEH7.js';import*as W from'node-forge';import W__default from'node-forge';import {deleteDB,openDB}from'idb';import {createSHA256}from'hash-wasm';function Li(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)}function tt(){return typeof navigator<"u"&&typeof ClipboardItem=="function"&&typeof navigator.clipboard?.write=="function"}function ee(e){if(!e.isCurrent())throw new DOMException("Image copy is no longer active","AbortError")}async function nt(e,n){if(ee(n),e.size===0)throw new Error("Empty clipboard image");let t=URL.createObjectURL(e),r=new Image,o;try{if(await new Promise((s,d)=>{r.onload=()=>s(),r.onerror=()=>d(new Error("Clipboard image decode failed")),r.src=t;}),ee(n),r.naturalWidth<=0||r.naturalHeight<=0)throw new Error("Invalid clipboard image dimensions");if(e.type==="image/png")return e;if(r.naturalWidth*r.naturalHeight>16777216)throw new Error("Clipboard image exceeds canvas pixel limit");o=document.createElement("canvas"),o.width=r.naturalWidth,o.height=r.naturalHeight;let i=o.getContext("2d");if(i===null)throw new Error("Clipboard canvas unavailable");i.drawImage(r,0,0);let a=await new Promise((s,d)=>{o.toBlob(c=>c===null?d(new Error("Clipboard PNG encoding failed")):s(c),"image/png");});return ee(n),a}finally{r.onload=null,r.onerror=null,r.src="",URL.revokeObjectURL(t),o!==void 0&&(o.width=o.height=0);}}async function Hi(e,n){if(n!==void 0&&n!==""){ee(e);let s=false,d={...e,isCurrent:()=>!s&&e.isCurrent()};try{if(!tt())throw new Error("Image Clipboard API unavailable");let c=(async()=>nt(await e.loadOriginal(),d))();return c.catch(()=>{}),await navigator.clipboard.write([new ClipboardItem({"image/png":c,"text/plain":new Blob([n],{type:"text/plain"})})]),ee(e),"original"}catch{return s=true,ee(e),await navigator.clipboard.writeText(n),ee(e),"text"}finally{s=true;}}if(!tt())throw new Error("Image Clipboard API unavailable");ee(e);let t=false,r={...e,isCurrent:()=>!t&&e.isCurrent()},o={quality:"original"},i=async()=>(ee(r),o.quality="thumbnail",nt(await e.loadThumbnail(),r)),a=(async()=>{try{return await nt(await e.loadOriginal(),r)}catch(s){ee(r);try{return await i()}catch(d){throw ee(r),new AggregateError([s,d],"Original and thumbnail copy failed")}}})();a.catch(()=>{});try{try{await navigator.clipboard.write([new ClipboardItem({"image/png":a})]);}catch(s){if(ee(r),typeof s=="object"&&s!==null&&"name"in s&&(s.name==="NotAllowedError"||s.name==="SecurityError")||(await a,ee(r),o.quality==="thumbnail"))throw s;let d=i();d.catch(()=>{}),await navigator.clipboard.write([new ClipboardItem({"image/png":d})]);}return ee(r),o.quality}finally{t=true;}}var K=class extends Error{code;constructor(n,t,r){super(t??n,r),this.name="MediaTransferError",this.code=n;}};function Fi(e){return e instanceof K?e.code:void 0}function Te(e){if(e instanceof K)return e.code==="upload-timeout"?"timeout":e.code!=="multipart-upload-failed"?void 0:Te(e.cause);if(!(e instanceof Error))return;let n=e;if(["ExpiredToken","ExpiredTokenException","RequestExpired","TokenRefreshRequired"].includes(n.Code??n.name))return "credentials-expired";let t=n.$metadata?.httpStatusCode;if(t===429||t!==void 0&&t>=500&&t<=599||n.message.startsWith("XHR_HTTP_HANDLER_ERROR:")||n.name==="NetworkError")return "network"}var $i=3600*1e3,ji=300*1e3;function be(...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 qi(e){let n=Number(e);if(!(!Number.isFinite(n)||n<=0))return n>1e12?n/1e3:n}function Ji(e){let n=e.replace(/\/+$/,"");return n===""?"":/^https?:\/\//i.test(n)?n:`https://${n}`}function kr(e){if(e===null||typeof e!="object")throw new K("credentials-invalid","S3 \u4E0A\u4F20\u51ED\u8BC1\u683C\u5F0F\u65E0\u6548\uFF1A\u56DE\u5305\u4E0D\u662F\u5BF9\u8C61");let n=e,t=be(n.access_key_id,n.accessKeyId),r=be(n.secret_key,n.secretKey,n.secretAccessKey),o=be(n.session_token,n.sessionToken).replace(/\s+/g,""),i=be(n.bucket),a=be(n.region),s=Ji(be(n.dns_point,n.dnsPoint)),d=[t===""?"access_key_id":"",r===""?"secret_key":"",o===""?"session_token":"",i===""?"bucket":"",a===""?"region":"",s===""?"dns_point":""].filter(h=>h!=="");if(d.length>0)throw new K("credentials-invalid",`S3 \u4E0A\u4F20\u51ED\u8BC1\u683C\u5F0F\u65E0\u6548\uFF1A\u7F3A\u5C11 ${d.join("\u3001")}`);let c=qi(n.expiration??n.expiresAtSeconds),m=be(n.key_prefix,n.keyPrefix),w=be(n.identity_id,n.identityId);return {accessKeyId:t,secretAccessKey:r,sessionToken:o,bucket:i,region:a,dnsPoint:s,...c===void 0?{}:{expiresAtSeconds:c},...m===""?{}:{keyPrefix:m},...w===""?{}:{identityId:w}}}function Vi(e,n){if(n-e.fetchedAtMs>=$i)return false;let{expiresAtSeconds:t}=e.credential;return t===void 0?true:t*1e3-ji>n}function Tr(e){let n=new Map,t=new Map;async function r(o,i){let a;try{a=await e({bucket:o,forceRefresh:i});}catch(d){let c=d instanceof Error?d.message:String(d);throw new K("credentials-request-failed",`S3 \u4E0A\u4F20\u51ED\u8BC1\u83B7\u53D6\u5931\u8D25\uFF1Abucket=${o}\uFF1B\u539F\u56E0\uFF1A${c}`,{cause:d})}let s=kr(a);return n.set(o,{credential:s,fetchedAtMs:Date.now()}),s}return {resolve(o,i){if(e===void 0)return Promise.reject(new K("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&&Vi(s,Date.now()))return Promise.resolve(s.credential);n.delete(o);let d=t.get(o);if(d!==void 0)return d;let c=r(o,a).finally(()=>{t.get(o)===c&&t.delete(o);});return t.set(o,c),c}}}function zi(){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 H=class extends Error{code;constructor(n,t,r){super(t??n,r),this.name="VoiceError",this.code=n;}};function Pn(e){return e instanceof H?e.code:void 0}function Dr(e){switch(e instanceof DOMException||e instanceof Error?e.name:""){case "NotAllowedError":case "SecurityError":case "PermissionDeniedError":return new H("permission-denied","\u9EA6\u514B\u98CE\u6743\u9650\u88AB\u62D2\u7EDD",{cause:e});case "NotFoundError":case "DevicesNotFoundError":return new H("device-not-found","\u672A\u627E\u5230\u53EF\u7528\u9EA6\u514B\u98CE",{cause:e});case "NotReadableError":case "TrackStartError":case "AbortError":return new H("device-busy","\u9EA6\u514B\u98CE\u88AB\u5360\u7528\u6216\u542F\u52A8\u5931\u8D25",{cause:e});default:return new H("device-busy",e instanceof Error?e.message:"\u9EA6\u514B\u98CE\u542F\u52A8\u5931\u8D25",{cause:e})}}var se=16e3,Wi=new URL("./speex-runtime.txt",import.meta.url).href,rt=null,Yi=15e3;async function Qi(){document.querySelector('script[data-speex-runtime="true"]')?.remove();let e=new AbortController,n=setTimeout(()=>e.abort(new Error("Speex runtime fetch timeout")),Yi),t;try{t=await fetch(Wi,{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 ot(){let e=typeof window>"u"?void 0:window;return e?.__speexInH5!==void 0?e.__speexInH5:(rt??=(async()=>{if(e===void 0||typeof document>"u")throw new H("codec-unavailable","Speex \u8FD0\u884C\u65F6\u4EC5\u53EF\u5728\u6D4F\u89C8\u5668\u73AF\u5883\u52A0\u8F7D");if(await Qi(),e.__speexInH5===void 0&&e.initAudio?.(),e.__speexInH5===void 0)throw new H("codec-unavailable","Speex \u8FD0\u884C\u65F6\u521D\u59CB\u5316\u5931\u8D25");return e.__speexInH5})().catch(n=>{throw rt=null,n instanceof H?n:new H("codec-unavailable","Speex \u8FD0\u884C\u65F6\u52A0\u8F7D\u5931\u8D25",{cause:n})}),rt)}function Ur(){ot().catch(()=>{});}function we(e,n,t){for(let r=0;r<t.length;r+=1)e.setUint8(n+r,t.charCodeAt(r));}function Xi(e,n){let r=new ArrayBuffer(44+e.length*2),o=new DataView(r);we(o,0,"RIFF"),o.setUint32(4,36+e.length*2,true),we(o,8,"WAVE"),we(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),we(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 it(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 Zi=40,at=120,ea=40,st=80;function na(e,n){let t=Math.min(Math.floor(n*Zi/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 ct(e,n){if(e.length===0)return e;let t=Math.min(Math.floor(n*at/1e3),Math.max(0,e.length-1)),r=t>0?e.subarray(t):e,o=new Float32Array(r),i=Math.min(Math.floor(n*ea/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 d=o.length-1-a;o[d]=(o[d]??0)*s;}return o}function In(e,n){let r=new ArrayBuffer(44+e.length*2),o=new DataView(r);return we(o,0,"RIFF"),o.setUint32(4,36+e.length*2,true),we(o,8,"WAVE"),we(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),we(o,36,"data"),o.setUint32(40,e.length*2,true),new Int16Array(r,44).set(e),new Uint8Array(r)}function ta(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 ra(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 Or(e,n){let t=await ot(),r=Math.floor(n*st/1e3),o=new Float32Array(r+e.length);o.set(e,r);let i=Xi(o,n);try{return ta(t.encodeFile(i))}catch(a){throw new H("encode-failed","\u8BED\u97F3\u7F16\u7801\u5931\u8D25",{cause:a})}}async function Br(e){let n=await ot();try{let[t,r]=n.decodeFile(ra(e));if(t.length===0)throw new Error("decoded empty pcm");let o=na(it(t),r.rate>0?r.rate:se),i=r.rate>0?r.rate:se;return {samples:o,sampleRate:i,durationMs:Math.round(o.length/i*1e3)}}catch(t){throw t instanceof H?t:new H("decode-failed","\u8BED\u97F3\u89E3\u7801\u5931\u8D25",{cause:t})}}async function Nr(e){let n=await Br(e);return {wavData:In(n.samples,n.sampleRate),durationMs:n.durationMs}}var oa=.5,ia=2;function Kr(e){if(typeof e!="number"||!Number.isFinite(e))throw new H("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,oa),ia)}function aa(e={}){let n=e.cacheMax??8,t={activeId:"",isPlaying:false,loadingId:"",progress:0,currentTimeMs:0,errorIds:new Set,playbackRate:e.playbackRate===void 0?1:Kr(e.playbackRate)},r=new Set;function o(){for(let f of r)f(t);}let i=null,a=new Map,s=0,d=false,c=false;function m(f){let P=a.get(f);return P!==void 0&&(a.delete(f),a.set(f,P)),P}function w(f,P){if(d)return URL.revokeObjectURL(P.url),P;let E=a.get(f);if(E!==void 0)return URL.revokeObjectURL(P.url),a.delete(f),a.set(f,E),E;for(a.set(f,P);a.size>n;){let R;for(let M of a.keys())if(M!==t.activeId){R=M;break}if(R===void 0)break;let O=a.get(R);a.delete(R),O!==void 0&&URL.revokeObjectURL(O.url);}return P}function h(f){f.paused||f.pause(),f.removeAttribute("src");try{f.load();}catch{}}function l(f,P){return !d&&f===s&&t.activeId===P}function b(f){f.defaultPlaybackRate=t.playbackRate,f.playbackRate=t.playbackRate;}function I(){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 _(){s+=1,c=false,t.loadingId="",A(),i!==null&&h(i),o();}function T(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 v(f,P){let E=m(f);if(E!==void 0)return {entry:E};let R;try{R=await P();}catch(O){return {entry:null,error:{code:Pn(O),cause:O}}}if(R===null)return {entry:null};try{let{wavData:O,durationMs:M}=await Nr(R),k={url:URL.createObjectURL(new Blob([O],{type:"audio/wav"})),durationMs:M};return {entry:w(f,k)}}catch(O){return {entry:null,error:{code:Pn(O),cause:O}}}}async function u(f,P){if(d)return;let E=I();if(x(f),t.activeId===f){if(t.isPlaying){E.pause();return}let M=++s;try{await E.play();}catch{if(!l(M,f))return;T(f),o();return}if(!l(M,f))return;t.isPlaying=true,o(),P.onPlayStart?.();return}if(t.loadingId===f)return;_();let R=++s;t.loadingId=f,o();let O=await v(f,P.load);if(R===s){if(t.loadingId="",O.entry===null){T(f),o(),O.error!==void 0&&P.onDecodeError?.(O.error.code,O.error.cause);return}E.src=O.entry.url,b(E),t.activeId=f,t.progress=0,t.currentTimeMs=0,o();try{await E.play();}catch(M){if(!l(R,f))return;A(),h(E),T(f),o(),P.onDecodeError?.(void 0,M);return}l(R,f)&&(t.isPlaying=true,o(),P.onPlayStart?.());}}function g(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 C(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)&&(T(f),o());});}function y(f){let P=Kr(f);P!==t.playbackRate&&(t.playbackRate=P,i!==null&&b(i),o());}function S(){if(!d){d=true,_();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:u,seek:g,beginScrub:C,endScrub:p,setPlaybackRate:y,stop:_,dispose:S}}function sa(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 ca(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,d=.2;s<200?d=.15:s<300?d=.4:s<=3400?d=1:s<=6e3&&(d=.45),o+=(e[a]??0)/255*d,i+=d;}return i>0?o/i:0}function Gr(e){let n=sa(e.timeDomain),t=ca(e.frequency,e.sampleRate,e.fftSize),r=n*.55+t*.45;return Math.min(1,r*e.boost)**.72}var vn=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 da=5e3,dt=15e3,ua=25e3,la=25e3;function ze(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 pa(){if(typeof navigator>"u"||navigator.mediaDevices?.getUserMedia===void 0)throw new H("no-media-devices","\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u9EA6\u514B\u98CE\u91C7\u96C6");let e=navigator.mediaDevices.getUserMedia({audio:fa()});try{return await ze(e,la,"\u9EA6\u514B\u98CE\u6388\u6743\u8BF7\u6C42\u8D85\u65F6")}catch(n){throw e.then(t=>t.getTracks().forEach(r=>r.stop())).catch(()=>{}),Dr(n)}}function fa(){return {channelCount:1,echoCancellation:true,noiseSuppression:true,autoGainControl:true}}var ma=50,ga=.12,ya=2.6,ha=.06,ba=256;function wa(){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 Ca(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 H("audio-context-blocked","AudioContext \u4E0D\u53EF\u7528");let i=t??new r,a=t==null;try{i.state==="suspended"&&await ze(i.resume(),dt,"audioContext.resume timeout").catch(()=>{});let s=await ze(i.decodeAudioData(await e.arrayBuffer()),dt,"decodeAudioData timeout"),d=Math.max(1,Math.ceil(s.duration*n)),c=new o(1,d,n),m=c.createBufferSource();return m.buffer=s,m.connect(c.destination),m.start(0),(await ze(c.startRendering(),dt,"offlineAudioContext.startRendering timeout")).getChannelData(0).slice()}catch(s){throw s instanceof H?s:new H("decode-failed","\u5F55\u97F3\u6BB5\u89E3\u7801\u5931\u8D25",{cause:s})}finally{a&&i.close().catch(()=>{});}}function Lr(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 Pa(e={}){if(typeof MediaRecorder>"u")throw new H("no-media-recorder","\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5F55\u97F3");let n;e.stream!==void 0?n=e.stream:n=await pa(),Ur();let t=wa(),r=e.maxDurationMs??6e4,o="recording",i=[],a=0,s=[],d=null,c=null,m=null,w=[],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 w=[],f.ondataavailable=P=>{P.data.size>0&&w.push(P.data);},f.start(250),h=Date.now(),f}catch(f){throw f instanceof H?f:new H("device-busy","\u5F55\u97F3\u5668\u542F\u52A8\u5931\u8D25",{cause:f})}}let I=e.amplitude?.intervalMs??ma,A=e.amplitude?.boost??ya,_=e.amplitude?.smoothing??ga,T=e.amplitude?.minVolume??ha;function x(){let f=Math.floor(r/1e3*se),P=0;for(let R of i)P+=R.length;if(P>f){let R=f,O=[];for(let M of i){if(R<=0)break;M.length<=R?(O.push(M),R-=M.length):(O.push(M.slice(0,R)),R=0);}i.length=0,i.push(...O);}a=Math.min(a,r);let E=Math.max(0,Math.ceil(r/I));s.length>E&&(s.length=E);}async function v(){if(o!=="recording"){e.onMaxDuration?.();return}e.onMaxDuration?.(),o="paused";let f=S().then(()=>x());m=f;try{await f;}catch(P){console.warn("[im-browser] pauseAtMaxDuration settle failed",P);}}let u=setInterval(()=>{!l&&o==="recording"&&p()>=r&&(l=true,v());},250),g=null,C=null;try{let f=window.AudioContext??window.webkitAudioContext;if(f!==void 0){g=new f,g.state==="suspended"&&g.resume().catch(()=>{});let P=g.createMediaStreamSource(n),E=g.createAnalyser();E.fftSize=ba,E.smoothingTimeConstant=_,P.connect(E);let R=new Uint8Array(E.frequencyBinCount),O=new Uint8Array(E.fftSize),M=new vn;C=setInterval(()=>{if(o!=="recording"||d===null)return;E.getByteFrequencyData(R),E.getByteTimeDomainData(O);let k=Gr({timeDomain:O,frequency:R,sampleRate:g.sampleRate,fftSize:E.fftSize,boost:A}),U=M.next(k),N=U<T?0:U;s.push(Math.round(N*255)),e.onAmplitude?.(N);},I);}}catch(f){console.warn("[im-browser] amplitude analyser setup failed",f);}function p(){let f=o==="recording"&&d!==null?Date.now()-h:0;return a+f}function y(){u!==null&&(clearInterval(u),u=null),C!==null&&(clearInterval(C),C=null),g?.close().catch(()=>{}),g=null;for(let f of n.getTracks())f.stop();}function S(){if(c!==null)return c;let f=d;return f===null?Promise.resolve():(d=null,c=(async()=>{await new Promise(R=>{if(f.state==="inactive"){R();return}let O=setTimeout(()=>{console.warn("[im-browser] recorder onstop timed out, settling with received chunks"),R();},da);f.onstop=()=>{clearTimeout(O),R();},f.stop();});let P=new Blob(w,{type:f.mimeType||t||"audio/webm"});if(w=[],P.size===0)return;let E=await Ca(P,se,g);E.length!==0&&(i.push(E),a+=E.length/se*1e3);})().finally(()=>{c=null;}),c)}try{d=b();}catch(f){throw o="closed",y(),f}return {getState:()=>o,recordedMs:p,async pause(){o==="recording"&&(o="paused",await S(),(l||a>=r)&&x());},async resume(){o!=="paused"||l||(d=b(),o="recording");},async finish(){if(o==="closed")throw new H("empty-recording","\u5F55\u97F3\u4F1A\u8BDD\u5DF2\u7ED3\u675F");o="closed";let f=async()=>{try{m!==null?await m:await S(),x();}finally{y();}let P=Lr(i);if(P.length===0)throw new H("empty-recording","\u5F55\u97F3\u5185\u5BB9\u4E3A\u7A7A");let E=ct(P,se);if(E.length===0)throw new H("empty-recording","\u5F55\u97F3\u5185\u5BB9\u4E3A\u7A7A");let R=Math.min(s.length,Math.ceil(at/I));return {data:await Or(E,se),durationMs:Math.round(E.length/se*1e3)+st,waveform:s.slice(R),filename:`AUDIO_${Date.now()}.ogg`,mimeType:"audio/ogg"}};try{return await ze(f(),ua,"\u5F55\u97F3\u5B9A\u7A3F\u8D85\u65F6")}catch(P){throw y(),P instanceof H?P:new H("encode-failed","\u5F55\u97F3\u5B9A\u7A3F\u5931\u8D25",{cause:P})}},cancel(){o="closed";let f=d;if(d=null,f!==null&&(f.ondataavailable=null,f.onstop=null,f.state!=="inactive"))try{f.stop();}catch{}i.length=0,y();},async previewWav(){m!==null?await m:c!==null&&await c,x();let f=Lr(i),P=ct(f,se);if(P.length===0)throw new H("empty-recording","\u6682\u65E0\u53EF\u8BD5\u542C\u7684\u5F55\u97F3\u5185\u5BB9");return {wavData:In(it(P),se),durationMs:Math.round(P.length/se*1e3)}}}}function De(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 Hr(e,n){return e.length===n.length&&e.every((t,r)=>t===n[r])}var ce=class extends Error{constructor(n,t){super(n,t),this.name="ChannelKeyError";}};function Fr(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 ce("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 ce("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 ce("channel secret_key Base64 \u89E3\u7801\u7ED3\u679C\u4E3A\u7A7A");let s=new Uint8Array(16);s.set(a.subarray(0,s.length));let d=n.length===16&&/^[\x20-\x7E]+$/.test(n)?Uint8Array.from(n,c=>c.charCodeAt(0)):void 0;return {canonical:s,...d===void 0?{}:{legacyAscii:d},metadata:{channelKeyCharLength:n.length,decodedByteLength:a.length,padByteCount:Math.max(0,16-a.length),legacyAsciiCandidate:d!==void 0}}}function Ia(e){let n=new Map,t=new Map,r=new Map,o=new Map,i=De(Hr);function a(v){return {canonical:v.canonical.slice(),...v.legacyAscii===void 0?{}:{legacyAscii:v.legacyAscii.slice()},metadata:{...v.metadata}}}function s(v){return [{strategy:"canonical-base64-pad",key:v.canonical.slice()},...v.legacyAscii===void 0?[]:[{strategy:"legacy-ascii16",key:v.legacyAscii.slice()}]]}function d(v){n.delete(v),t.delete(v),r.delete(v),o.set(v,(o.get(v)??0)+1);}function c(v){let u=o.get(v)??0,g=(async()=>{try{let C=await e.loadSecretKey(v);if(C===null||C.trim()==="")throw new ce(`channel secret_key \u7F3A\u5931\uFF08channelId=${v}\uFF09`);let p=Fr(C);return (o.get(v)??0)===u&&n.set(v,a(p)),p}catch(C){let p=C instanceof ce?C:new ce(`channel secret_key \u52A0\u8F7D\u5931\u8D25\uFF08channelId=${v}\uFF09`,{cause:C});throw e.onError?.(p.message,C),p}})().finally(()=>{t.get(v)===g&&t.delete(v);});return t.set(v,g),g}function m(v,u){let g=t.get(v);if(g!==void 0)return g;i.shouldRenegotiate(v,u.staleKey,n.get(v)?.canonical)&&d(v);}function w(v,u){let g=v.trim();if(g===""){let p=new ce("channel id \u4E0D\u80FD\u4E3A\u7A7A");return e.onError?.(p.message),Promise.reject(p)}if(u!==void 0){let p=m(g,u);if(p!==void 0)return p.then(a)}let C=n.get(g);return C!==void 0?Promise.resolve(a(C)):t.get(g)??c(g)}function h(v,u){let g=v.trim();if(g===""){let S=new ce("channel id \u4E0D\u80FD\u4E3A\u7A7A");return e.onError?.(S.message),Promise.reject(S)}if(u!==void 0){let S=m(g,u);if(S!==void 0)return S.then(f=>f.canonical.slice())}let C=n.get(g);if(C!==void 0)return Promise.resolve(C.canonical.slice());let p=r.get(g);if(p!==void 0)return p;let y=(t.get(g)??c(g)).then(S=>S.canonical.slice()).finally(()=>{r.get(g)===y&&r.delete(g);});return r.set(g,y),y}function l(v){return n.get(v.trim())?.canonical.slice()??null}async function b(v,u){let g=await w(v,u);return s(g)}function I(v){let u=n.get(v.trim());return u===void 0?[]:s(u)}function A(v){let u=n.get(v.trim());return u===void 0?null:{...u.metadata}}function _(v,u){let g=v.trim();if(g==="")throw new ce("channel id \u4E0D\u80FD\u4E3A\u7A7A");let C=Fr(u);d(g),i.reset(g),n.set(g,a(C));}function T(v){let u=v.trim();u!==""&&(d(u),i.reset(u));}function x(){let v=new Set([...n.keys(),...t.keys(),...r.keys(),...o.keys()]);for(let u of v)o.set(u,(o.get(u)??0)+1),i.reset(u);n.clear(),t.clear(),r.clear();}return {getChannelKey:h,getCachedChannelKey:l,getChannelKeyCandidates:b,getCachedChannelKeyCandidates:I,getCachedChannelKeyMetadata:A,primeChannelKey:_,clearChannelKey:T,clearAll:x}}function ut(){let e=globalThis.scheduler;return typeof e?.yield=="function"?e.yield():new Promise(n=>setTimeout(n,0))}var ft=2654435769,$r=16,Ue=8,lt=16,jr=32;function qr(e){if(e.length<lt)throw new Error(`TEA key \u957F\u5EA6\u4E0D\u8DB3\uFF1A${e.length}\uFF0C\u9700 \u2265 ${lt} \u5B57\u8282`);let n=new DataView(e.buffer,e.byteOffset,lt);return [n.getUint32(0,true),n.getUint32(4,true),n.getUint32(8,true),n.getUint32(12,true)]}function mt([e,n],[t,r,o,i]){let a=e>>>0,s=n>>>0,d=Math.imul(ft,16)>>>0;for(let c=0;c<$r;c++)s=s-(Math.imul(a,16)+o^a+d^(a>>>5)+i)>>>0,a=a-(Math.imul(s,16)+t^s+d^(s>>>5)+r)>>>0,d=d-ft>>>0;return [a,s]}function gt([e,n],[t,r,o,i]){let a=e>>>0,s=n>>>0,d=0;for(let c=0;c<$r;c++)d=d+ft>>>0,a=a+(Math.imul(s,16)+t^s+d^(s>>>5)+r)>>>0,s=s+(Math.imul(a,16)+o^a+d^(a>>>5)+i)>>>0;return [a,s]}function We(e,n,t,r){let o=qr(n),i=new Uint8Array(e.length),a=Math.floor(e.length/Ue),s=r===void 0?a:Math.min(a,Math.floor(r/Ue)),d=new DataView(e.buffer,e.byteOffset,e.byteLength),c=new DataView(i.buffer);for(let w=0;w<s;w++){let h=w*Ue,[l,b]=t([d.getUint32(h,true),d.getUint32(h+4,true)],o);c.setUint32(h,l,true),c.setUint32(h+4,b,true);}let m=s*Ue;return m<e.length&&i.set(e.subarray(m),m),i}function Ye(e,n){return We(n,e,mt)}function Qe(e,n){return We(n,e,gt)}function Jr(e,n){return We(n,e,gt,jr)}function Vr(e,n){return We(n,e,mt,jr)}var va=1024*1024;function Sa(){return ut()}function pt(e){if(e?.aborted)throw new DOMException("TEA \u5206\u5757\u5904\u7406\u5DF2\u53D6\u6D88","AbortError")}async function yt(e,n,t,r=va,o={}){if(!Number.isInteger(r)||r<=0||r%Ue!==0)throw new RangeError(`TEA \u5206\u5757\u5927\u5C0F\u5FC5\u987B\u662F ${Ue} \u7684\u6B63\u6574\u6570\u500D\uFF1A${r}`);qr(e);let i=t==="encrypt"?gt:mt,a=o.yieldToMain??Sa,s=n.size,d=[],c=0;for(;c<s;){pt(o.signal);let m=Math.min(c+r,s),w=new Uint8Array(await n.slice(c,m).arrayBuffer());pt(o.signal),d.push(new Blob([We(w,e,i)])),c=m,o.onProgress?.(c,s),c<s&&await a();}return pt(o.signal),new Blob(d)}var zr=8,Sn=16;function Aa(e){let n=W.md.md5.create();return n.update(e,"utf8"),n.digest().toHex()}function Yr(e){return new TextEncoder().encode(e)}function Ma(e){let n=e.length;for(;n>0&&e[n-1]===0;)n-=1;return new TextDecoder().decode(e.subarray(0,n))}function _a(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 xa(e){let n="";for(let t of e)n+=String.fromCharCode(t);return btoa(n)}function Ea(e){let n=Math.ceil(e.length/zr)*zr;if(n===e.length)return e;let t=new Uint8Array(n);return t.set(e),t}function Qr(e,n=Aa){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<Sn)throw new Error("collect TEA key: MD5 \u957F\u5EA6\u4E0D\u8DB3");let o=Yr(r.slice(0,Sn).toUpperCase());if(o.length<Sn)throw new Error("collect TEA key: \u6D3E\u751F\u7ED3\u679C\u4E0D\u8DB3 16 \u5B57\u8282");return o.subarray(0,Sn)}function Xr(e,n,t){return xa(Qe(Qr(n,t),Ea(Yr(e))))}function Ra(e,n,t){return Ma(Ye(Qr(n,t),_a(e)))}function ka(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function ht(e){let n=e.trim();if(n===""||!n.startsWith("{"))return null;try{return ka(JSON.parse(n))}catch{return null}}function Ta(e){let n=e.trim(),t=n.indexOf("}");return t>=0?n.slice(0,t+1):n}function Zr(e,n,t){let r=ht(e);if(r!==null)return r;if(e.trim()===""||n.trim()==="")return null;try{let o=Ra(e,n,t);return ht(o)??ht(Ta(o))}catch{return null}}var Da="core";var Xe=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";}},z=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 D(e,n,t,r){let o=r!==void 0&&"responseMode"in r&&r.responseMode==="strict",i;try{i=await e(n,{target:Da,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 Xe(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 Xe(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 eo(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 D(e,"/user/encrypt_info/info",t,r)}function Ua(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 Oa(e){let n=e.clientType,t=new Map,r=new Map,o=De((h,l)=>h===l),i=null,a=null;function s(h,l){e.onError?.(h,l);}function d(){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 d();}catch(_){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u751F\u6210\u4E34\u65F6 RSA \u5BC6\u94A5\u5931\u8D25\uFF08userId=${h}\uFF09`,_),null}let b;try{b=await eo(e.client,{publicKey:l.publicKeyBase64,clientType:n});}catch(_){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\u8BF7\u6C42\u5F02\u5E38\uFF08userId=${h}\uFF09`,_),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 I=b.data.prv_key??b.data.prvKey??"",A=String(b.data.version??"").trim();if(I==="")return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\u54CD\u5E94\u7F3A\u5C11 prv_key\uFF08userId=${h}\uFF09`),null;try{let _=e.crypto.rsaDecryptPkcs1({data:Ua(I),privateKey:l.privateKey}),T=new TextDecoder().decode(_).trim();if(T==="")return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u89E3\u51FA\u7684\u79C1\u94A5\u4E3A\u7A7A\uFF08userId=${h}\uFF09`),null;let x={privateKey:T,version:A};return t.set(h,x),x}catch(_){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u4E34\u65F6\u79C1\u94A5\u89E3 prv_key \u5931\u8D25\uFF08userId=${h}\uFF09`,_),null}}function m(h,l){let b=h.trim();if(b==="")return Promise.resolve(null);if(l!==void 0){let T=r.get(b);if(T!==void 0)return T;o.shouldRenegotiate(b,l.staleKey,t.get(b)?.privateKey)&&t.delete(b);}let I=t.get(b);if(I!==void 0)return Promise.resolve(I);let A=r.get(b);if(A!==void 0)return A;let _=c(b).finally(()=>{r.get(b)===_&&r.delete(b);});return r.set(b,_),_}function w(h){return t.get(h.trim())??null}return {getUserPrivateKey:m,getCachedPrivateKey:w}}function no(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 D(e,"/user_group/encrypt_info",t,r)}function Ba(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 Na(e){let n=e.clientType,t=new Map,r=new Map,o=new Map,i=De((l,b)=>l===b),a=null,s=null;function d(){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,I;try{I=await d();}catch(u){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u751F\u6210\u4E34\u65F6 RSA \u5BC6\u94A5\u5931\u8D25\uFF08groupId=${l}\uFF09`,u),null}let A;try{A=await no(e.client,{groupId:l,publicKey:I.publicKeyBase64,clientType:n});}catch(u){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\u8BF7\u6C42\u5F02\u5E38\uFF08groupId=${l}\uFF09`,u),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 _=A.data,T=String(_.prv_key??_.prvKey??_.private_key??"").trim(),x=String(_.pub_key??_.pubKey??_.public_key??"").trim(),v=String(_.version??"").trim();if(T==="")return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\u54CD\u5E94\u7F3A\u5C11 prv_key\uFF08groupId=${l}\uFF09`),null;try{let u=e.crypto.rsaDecryptPkcs1({data:Ba(T),privateKey:I.privateKey}),g=new TextDecoder().decode(u).trim();if(g==="")return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u89E3\u51FA\u7684\u7FA4\u79C1\u94A5\u4E3A\u7A7A\uFF08groupId=${l}\uFF09`),null;let C={privateKey:g,publicKey:x,version:v};return (o.get(l)??0)===b&&t.set(l,C),C}catch(u){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u4E34\u65F6\u79C1\u94A5\u89E3 prv_key \u5931\u8D25\uFF08groupId=${l}\uFF09`,u),null}}function m(l,b){let I=l.trim();if(I==="")return Promise.resolve(null);if(b!==void 0){let x=r.get(I);if(x!==void 0)return x;i.shouldRenegotiate(I,b.staleKey,t.get(I)?.privateKey)&&t.delete(I);}let A=t.get(I);if(A!==void 0)return Promise.resolve(A);let _=r.get(I);if(_!==void 0)return _;let T=c(I).finally(()=>{r.get(I)===T&&r.delete(I);});return r.set(I,T),T}function w(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:m,getCachedGroupKeys:w,getCachedGroupKeyVersion:l=>t.get(l.trim())?.version??null,clearGroupKeys:h}}async function Ze(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 D(e,"/user/info/other",t,r)).data}function Ka(e){let n=e.clientType,t=new Map,r=new Map;async function o(a){try{let d=((await Ze(e.client,{userId:a,clientType:n}))?.public_key??"").trim();return d===""?(e.onError?.(`\u53D6\u5BF9\u7AEF\u516C\u94A5\uFF1A/user/info/other \u65E0 public_key\uFF08userId=${a}\uFF09`),null):(t.set(a,d),d)}catch(s){return e.onError?.(`\u53D6\u5BF9\u7AEF\u516C\u94A5\u8BF7\u6C42\u5F02\u5E38\uFF08userId=${a}\uFF09`,s),null}}function i(a,s){let d=a.trim();if(d==="")return Promise.resolve(null);s?.force===true&&t.delete(d);let c=t.get(d);if(c!==void 0)return Promise.resolve(c);let m=r.get(d);if(m!==void 0)return m;let w=o(d).finally(()=>{r.get(d)===w&&r.delete(d);});return r.set(d,w),w}return {getPeerPublicKey:i}}var Se=16;function to(e){let n="";for(let t of e)n+=String.fromCharCode(t);return n}function ro(e){let n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t)&255;return n}function oo(e){return e.replace(/(.{64})/g,`$1
1
+ import {wa as wa$1,G,J as J$1,f,g,i,Y as Y$1,Z,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 as K$1,H as H$1,N,P,R,Q as Q$1,S,T,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,_,$,l,s,Ca as Ca$1,Ba as Ba$1,ca as ca$1,da as da$1}from'./chunk-ANHUDX3C.js';import*as W from'node-forge';import W__default from'node-forge';import {deleteDB,openDB}from'idb';import {createSHA256}from'hash-wasm';function Li(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)}function tt(){return typeof navigator<"u"&&typeof ClipboardItem=="function"&&typeof navigator.clipboard?.write=="function"}function ee(e){if(!e.isCurrent())throw new DOMException("Image copy is no longer active","AbortError")}async function nt(e,n){if(ee(n),e.size===0)throw new Error("Empty clipboard image");let t=URL.createObjectURL(e),r=new Image,o;try{if(await new Promise((s,d)=>{r.onload=()=>s(),r.onerror=()=>d(new Error("Clipboard image decode failed")),r.src=t;}),ee(n),r.naturalWidth<=0||r.naturalHeight<=0)throw new Error("Invalid clipboard image dimensions");if(e.type==="image/png")return e;if(r.naturalWidth*r.naturalHeight>16777216)throw new Error("Clipboard image exceeds canvas pixel limit");o=document.createElement("canvas"),o.width=r.naturalWidth,o.height=r.naturalHeight;let i=o.getContext("2d");if(i===null)throw new Error("Clipboard canvas unavailable");i.drawImage(r,0,0);let a=await new Promise((s,d)=>{o.toBlob(c=>c===null?d(new Error("Clipboard PNG encoding failed")):s(c),"image/png");});return ee(n),a}finally{r.onload=null,r.onerror=null,r.src="",URL.revokeObjectURL(t),o!==void 0&&(o.width=o.height=0);}}async function Hi(e,n){if(n!==void 0&&n!==""){ee(e);let s=false,d={...e,isCurrent:()=>!s&&e.isCurrent()};try{if(!tt())throw new Error("Image Clipboard API unavailable");let c=(async()=>nt(await e.loadOriginal(),d))();return c.catch(()=>{}),await navigator.clipboard.write([new ClipboardItem({"image/png":c,"text/plain":new Blob([n],{type:"text/plain"})})]),ee(e),"original"}catch{return s=true,ee(e),await navigator.clipboard.writeText(n),ee(e),"text"}finally{s=true;}}if(!tt())throw new Error("Image Clipboard API unavailable");ee(e);let t=false,r={...e,isCurrent:()=>!t&&e.isCurrent()},o={quality:"original"},i=async()=>(ee(r),o.quality="thumbnail",nt(await e.loadThumbnail(),r)),a=(async()=>{try{return await nt(await e.loadOriginal(),r)}catch(s){ee(r);try{return await i()}catch(d){throw ee(r),new AggregateError([s,d],"Original and thumbnail copy failed")}}})();a.catch(()=>{});try{try{await navigator.clipboard.write([new ClipboardItem({"image/png":a})]);}catch(s){if(ee(r),typeof s=="object"&&s!==null&&"name"in s&&(s.name==="NotAllowedError"||s.name==="SecurityError")||(await a,ee(r),o.quality==="thumbnail"))throw s;let d=i();d.catch(()=>{}),await navigator.clipboard.write([new ClipboardItem({"image/png":d})]);}return ee(r),o.quality}finally{t=true;}}var K=class extends Error{code;constructor(n,t,r){super(t??n,r),this.name="MediaTransferError",this.code=n;}};function Fi(e){return e instanceof K?e.code:void 0}function Te(e){if(e instanceof K)return e.code==="upload-timeout"?"timeout":e.code!=="multipart-upload-failed"?void 0:Te(e.cause);if(!(e instanceof Error))return;let n=e;if(["ExpiredToken","ExpiredTokenException","RequestExpired","TokenRefreshRequired"].includes(n.Code??n.name))return "credentials-expired";let t=n.$metadata?.httpStatusCode;if(t===429||t!==void 0&&t>=500&&t<=599||n.message.startsWith("XHR_HTTP_HANDLER_ERROR:")||n.name==="NetworkError")return "network"}var $i=3600*1e3,ji=300*1e3;function be(...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 qi(e){let n=Number(e);if(!(!Number.isFinite(n)||n<=0))return n>1e12?n/1e3:n}function Ji(e){let n=e.replace(/\/+$/,"");return n===""?"":/^https?:\/\//i.test(n)?n:`https://${n}`}function kr(e){if(e===null||typeof e!="object")throw new K("credentials-invalid","S3 \u4E0A\u4F20\u51ED\u8BC1\u683C\u5F0F\u65E0\u6548\uFF1A\u56DE\u5305\u4E0D\u662F\u5BF9\u8C61");let n=e,t=be(n.access_key_id,n.accessKeyId),r=be(n.secret_key,n.secretKey,n.secretAccessKey),o=be(n.session_token,n.sessionToken).replace(/\s+/g,""),i=be(n.bucket),a=be(n.region),s=Ji(be(n.dns_point,n.dnsPoint)),d=[t===""?"access_key_id":"",r===""?"secret_key":"",o===""?"session_token":"",i===""?"bucket":"",a===""?"region":"",s===""?"dns_point":""].filter(h=>h!=="");if(d.length>0)throw new K("credentials-invalid",`S3 \u4E0A\u4F20\u51ED\u8BC1\u683C\u5F0F\u65E0\u6548\uFF1A\u7F3A\u5C11 ${d.join("\u3001")}`);let c=qi(n.expiration??n.expiresAtSeconds),m=be(n.key_prefix,n.keyPrefix),w=be(n.identity_id,n.identityId);return {accessKeyId:t,secretAccessKey:r,sessionToken:o,bucket:i,region:a,dnsPoint:s,...c===void 0?{}:{expiresAtSeconds:c},...m===""?{}:{keyPrefix:m},...w===""?{}:{identityId:w}}}function Vi(e,n){if(n-e.fetchedAtMs>=$i)return false;let{expiresAtSeconds:t}=e.credential;return t===void 0?true:t*1e3-ji>n}function Tr(e){let n=new Map,t=new Map;async function r(o,i){let a;try{a=await e({bucket:o,forceRefresh:i});}catch(d){let c=d instanceof Error?d.message:String(d);throw new K("credentials-request-failed",`S3 \u4E0A\u4F20\u51ED\u8BC1\u83B7\u53D6\u5931\u8D25\uFF1Abucket=${o}\uFF1B\u539F\u56E0\uFF1A${c}`,{cause:d})}let s=kr(a);return n.set(o,{credential:s,fetchedAtMs:Date.now()}),s}return {resolve(o,i){if(e===void 0)return Promise.reject(new K("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&&Vi(s,Date.now()))return Promise.resolve(s.credential);n.delete(o);let d=t.get(o);if(d!==void 0)return d;let c=r(o,a).finally(()=>{t.get(o)===c&&t.delete(o);});return t.set(o,c),c}}}function zi(){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 H=class extends Error{code;constructor(n,t,r){super(t??n,r),this.name="VoiceError",this.code=n;}};function Pn(e){return e instanceof H?e.code:void 0}function Dr(e){switch(e instanceof DOMException||e instanceof Error?e.name:""){case "NotAllowedError":case "SecurityError":case "PermissionDeniedError":return new H("permission-denied","\u9EA6\u514B\u98CE\u6743\u9650\u88AB\u62D2\u7EDD",{cause:e});case "NotFoundError":case "DevicesNotFoundError":return new H("device-not-found","\u672A\u627E\u5230\u53EF\u7528\u9EA6\u514B\u98CE",{cause:e});case "NotReadableError":case "TrackStartError":case "AbortError":return new H("device-busy","\u9EA6\u514B\u98CE\u88AB\u5360\u7528\u6216\u542F\u52A8\u5931\u8D25",{cause:e});default:return new H("device-busy",e instanceof Error?e.message:"\u9EA6\u514B\u98CE\u542F\u52A8\u5931\u8D25",{cause:e})}}var se=16e3,Wi=new URL("./speex-runtime.txt",import.meta.url).href,rt=null,Yi=15e3;async function Qi(){document.querySelector('script[data-speex-runtime="true"]')?.remove();let e=new AbortController,n=setTimeout(()=>e.abort(new Error("Speex runtime fetch timeout")),Yi),t;try{t=await fetch(Wi,{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 ot(){let e=typeof window>"u"?void 0:window;return e?.__speexInH5!==void 0?e.__speexInH5:(rt??=(async()=>{if(e===void 0||typeof document>"u")throw new H("codec-unavailable","Speex \u8FD0\u884C\u65F6\u4EC5\u53EF\u5728\u6D4F\u89C8\u5668\u73AF\u5883\u52A0\u8F7D");if(await Qi(),e.__speexInH5===void 0&&e.initAudio?.(),e.__speexInH5===void 0)throw new H("codec-unavailable","Speex \u8FD0\u884C\u65F6\u521D\u59CB\u5316\u5931\u8D25");return e.__speexInH5})().catch(n=>{throw rt=null,n instanceof H?n:new H("codec-unavailable","Speex \u8FD0\u884C\u65F6\u52A0\u8F7D\u5931\u8D25",{cause:n})}),rt)}function Ur(){ot().catch(()=>{});}function we(e,n,t){for(let r=0;r<t.length;r+=1)e.setUint8(n+r,t.charCodeAt(r));}function Xi(e,n){let r=new ArrayBuffer(44+e.length*2),o=new DataView(r);we(o,0,"RIFF"),o.setUint32(4,36+e.length*2,true),we(o,8,"WAVE"),we(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),we(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 it(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 Zi=40,at=120,ea=40,st=80;function na(e,n){let t=Math.min(Math.floor(n*Zi/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 ct(e,n){if(e.length===0)return e;let t=Math.min(Math.floor(n*at/1e3),Math.max(0,e.length-1)),r=t>0?e.subarray(t):e,o=new Float32Array(r),i=Math.min(Math.floor(n*ea/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 d=o.length-1-a;o[d]=(o[d]??0)*s;}return o}function In(e,n){let r=new ArrayBuffer(44+e.length*2),o=new DataView(r);return we(o,0,"RIFF"),o.setUint32(4,36+e.length*2,true),we(o,8,"WAVE"),we(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),we(o,36,"data"),o.setUint32(40,e.length*2,true),new Int16Array(r,44).set(e),new Uint8Array(r)}function ta(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 ra(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 Or(e,n){let t=await ot(),r=Math.floor(n*st/1e3),o=new Float32Array(r+e.length);o.set(e,r);let i=Xi(o,n);try{return ta(t.encodeFile(i))}catch(a){throw new H("encode-failed","\u8BED\u97F3\u7F16\u7801\u5931\u8D25",{cause:a})}}async function Br(e){let n=await ot();try{let[t,r]=n.decodeFile(ra(e));if(t.length===0)throw new Error("decoded empty pcm");let o=na(it(t),r.rate>0?r.rate:se),i=r.rate>0?r.rate:se;return {samples:o,sampleRate:i,durationMs:Math.round(o.length/i*1e3)}}catch(t){throw t instanceof H?t:new H("decode-failed","\u8BED\u97F3\u89E3\u7801\u5931\u8D25",{cause:t})}}async function Nr(e){let n=await Br(e);return {wavData:In(n.samples,n.sampleRate),durationMs:n.durationMs}}var oa=.5,ia=2;function Kr(e){if(typeof e!="number"||!Number.isFinite(e))throw new H("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,oa),ia)}function aa(e={}){let n=e.cacheMax??8,t={activeId:"",isPlaying:false,loadingId:"",progress:0,currentTimeMs:0,errorIds:new Set,playbackRate:e.playbackRate===void 0?1:Kr(e.playbackRate)},r=new Set;function o(){for(let f of r)f(t);}let i=null,a=new Map,s=0,d=false,c=false;function m(f){let P=a.get(f);return P!==void 0&&(a.delete(f),a.set(f,P)),P}function w(f,P){if(d)return URL.revokeObjectURL(P.url),P;let E=a.get(f);if(E!==void 0)return URL.revokeObjectURL(P.url),a.delete(f),a.set(f,E),E;for(a.set(f,P);a.size>n;){let R;for(let M of a.keys())if(M!==t.activeId){R=M;break}if(R===void 0)break;let O=a.get(R);a.delete(R),O!==void 0&&URL.revokeObjectURL(O.url);}return P}function h(f){f.paused||f.pause(),f.removeAttribute("src");try{f.load();}catch{}}function l(f,P){return !d&&f===s&&t.activeId===P}function b(f){f.defaultPlaybackRate=t.playbackRate,f.playbackRate=t.playbackRate;}function I(){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 _(){s+=1,c=false,t.loadingId="",A(),i!==null&&h(i),o();}function T(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 v(f,P){let E=m(f);if(E!==void 0)return {entry:E};let R;try{R=await P();}catch(O){return {entry:null,error:{code:Pn(O),cause:O}}}if(R===null)return {entry:null};try{let{wavData:O,durationMs:M}=await Nr(R),k={url:URL.createObjectURL(new Blob([O],{type:"audio/wav"})),durationMs:M};return {entry:w(f,k)}}catch(O){return {entry:null,error:{code:Pn(O),cause:O}}}}async function u(f,P){if(d)return;let E=I();if(x(f),t.activeId===f){if(t.isPlaying){E.pause();return}let M=++s;try{await E.play();}catch{if(!l(M,f))return;T(f),o();return}if(!l(M,f))return;t.isPlaying=true,o(),P.onPlayStart?.();return}if(t.loadingId===f)return;_();let R=++s;t.loadingId=f,o();let O=await v(f,P.load);if(R===s){if(t.loadingId="",O.entry===null){T(f),o(),O.error!==void 0&&P.onDecodeError?.(O.error.code,O.error.cause);return}E.src=O.entry.url,b(E),t.activeId=f,t.progress=0,t.currentTimeMs=0,o();try{await E.play();}catch(M){if(!l(R,f))return;A(),h(E),T(f),o(),P.onDecodeError?.(void 0,M);return}l(R,f)&&(t.isPlaying=true,o(),P.onPlayStart?.());}}function g(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 C(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)&&(T(f),o());});}function y(f){let P=Kr(f);P!==t.playbackRate&&(t.playbackRate=P,i!==null&&b(i),o());}function S(){if(!d){d=true,_();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:u,seek:g,beginScrub:C,endScrub:p,setPlaybackRate:y,stop:_,dispose:S}}function sa(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 ca(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,d=.2;s<200?d=.15:s<300?d=.4:s<=3400?d=1:s<=6e3&&(d=.45),o+=(e[a]??0)/255*d,i+=d;}return i>0?o/i:0}function Gr(e){let n=sa(e.timeDomain),t=ca(e.frequency,e.sampleRate,e.fftSize),r=n*.55+t*.45;return Math.min(1,r*e.boost)**.72}var vn=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 da=5e3,dt=15e3,ua=25e3,la=25e3;function ze(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 pa(){if(typeof navigator>"u"||navigator.mediaDevices?.getUserMedia===void 0)throw new H("no-media-devices","\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u9EA6\u514B\u98CE\u91C7\u96C6");let e=navigator.mediaDevices.getUserMedia({audio:fa()});try{return await ze(e,la,"\u9EA6\u514B\u98CE\u6388\u6743\u8BF7\u6C42\u8D85\u65F6")}catch(n){throw e.then(t=>t.getTracks().forEach(r=>r.stop())).catch(()=>{}),Dr(n)}}function fa(){return {channelCount:1,echoCancellation:true,noiseSuppression:true,autoGainControl:true}}var ma=50,ga=.12,ya=2.6,ha=.06,ba=256;function wa(){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 Ca(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 H("audio-context-blocked","AudioContext \u4E0D\u53EF\u7528");let i=t??new r,a=t==null;try{i.state==="suspended"&&await ze(i.resume(),dt,"audioContext.resume timeout").catch(()=>{});let s=await ze(i.decodeAudioData(await e.arrayBuffer()),dt,"decodeAudioData timeout"),d=Math.max(1,Math.ceil(s.duration*n)),c=new o(1,d,n),m=c.createBufferSource();return m.buffer=s,m.connect(c.destination),m.start(0),(await ze(c.startRendering(),dt,"offlineAudioContext.startRendering timeout")).getChannelData(0).slice()}catch(s){throw s instanceof H?s:new H("decode-failed","\u5F55\u97F3\u6BB5\u89E3\u7801\u5931\u8D25",{cause:s})}finally{a&&i.close().catch(()=>{});}}function Lr(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 Pa(e={}){if(typeof MediaRecorder>"u")throw new H("no-media-recorder","\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5F55\u97F3");let n;e.stream!==void 0?n=e.stream:n=await pa(),Ur();let t=wa(),r=e.maxDurationMs??6e4,o="recording",i=[],a=0,s=[],d=null,c=null,m=null,w=[],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 w=[],f.ondataavailable=P=>{P.data.size>0&&w.push(P.data);},f.start(250),h=Date.now(),f}catch(f){throw f instanceof H?f:new H("device-busy","\u5F55\u97F3\u5668\u542F\u52A8\u5931\u8D25",{cause:f})}}let I=e.amplitude?.intervalMs??ma,A=e.amplitude?.boost??ya,_=e.amplitude?.smoothing??ga,T=e.amplitude?.minVolume??ha;function x(){let f=Math.floor(r/1e3*se),P=0;for(let R of i)P+=R.length;if(P>f){let R=f,O=[];for(let M of i){if(R<=0)break;M.length<=R?(O.push(M),R-=M.length):(O.push(M.slice(0,R)),R=0);}i.length=0,i.push(...O);}a=Math.min(a,r);let E=Math.max(0,Math.ceil(r/I));s.length>E&&(s.length=E);}async function v(){if(o!=="recording"){e.onMaxDuration?.();return}e.onMaxDuration?.(),o="paused";let f=S().then(()=>x());m=f;try{await f;}catch(P){console.warn("[im-browser] pauseAtMaxDuration settle failed",P);}}let u=setInterval(()=>{!l&&o==="recording"&&p()>=r&&(l=true,v());},250),g=null,C=null;try{let f=window.AudioContext??window.webkitAudioContext;if(f!==void 0){g=new f,g.state==="suspended"&&g.resume().catch(()=>{});let P=g.createMediaStreamSource(n),E=g.createAnalyser();E.fftSize=ba,E.smoothingTimeConstant=_,P.connect(E);let R=new Uint8Array(E.frequencyBinCount),O=new Uint8Array(E.fftSize),M=new vn;C=setInterval(()=>{if(o!=="recording"||d===null)return;E.getByteFrequencyData(R),E.getByteTimeDomainData(O);let k=Gr({timeDomain:O,frequency:R,sampleRate:g.sampleRate,fftSize:E.fftSize,boost:A}),U=M.next(k),N=U<T?0:U;s.push(Math.round(N*255)),e.onAmplitude?.(N);},I);}}catch(f){console.warn("[im-browser] amplitude analyser setup failed",f);}function p(){let f=o==="recording"&&d!==null?Date.now()-h:0;return a+f}function y(){u!==null&&(clearInterval(u),u=null),C!==null&&(clearInterval(C),C=null),g?.close().catch(()=>{}),g=null;for(let f of n.getTracks())f.stop();}function S(){if(c!==null)return c;let f=d;return f===null?Promise.resolve():(d=null,c=(async()=>{await new Promise(R=>{if(f.state==="inactive"){R();return}let O=setTimeout(()=>{console.warn("[im-browser] recorder onstop timed out, settling with received chunks"),R();},da);f.onstop=()=>{clearTimeout(O),R();},f.stop();});let P=new Blob(w,{type:f.mimeType||t||"audio/webm"});if(w=[],P.size===0)return;let E=await Ca(P,se,g);E.length!==0&&(i.push(E),a+=E.length/se*1e3);})().finally(()=>{c=null;}),c)}try{d=b();}catch(f){throw o="closed",y(),f}return {getState:()=>o,recordedMs:p,async pause(){o==="recording"&&(o="paused",await S(),(l||a>=r)&&x());},async resume(){o!=="paused"||l||(d=b(),o="recording");},async finish(){if(o==="closed")throw new H("empty-recording","\u5F55\u97F3\u4F1A\u8BDD\u5DF2\u7ED3\u675F");o="closed";let f=async()=>{try{m!==null?await m:await S(),x();}finally{y();}let P=Lr(i);if(P.length===0)throw new H("empty-recording","\u5F55\u97F3\u5185\u5BB9\u4E3A\u7A7A");let E=ct(P,se);if(E.length===0)throw new H("empty-recording","\u5F55\u97F3\u5185\u5BB9\u4E3A\u7A7A");let R=Math.min(s.length,Math.ceil(at/I));return {data:await Or(E,se),durationMs:Math.round(E.length/se*1e3)+st,waveform:s.slice(R),filename:`AUDIO_${Date.now()}.ogg`,mimeType:"audio/ogg"}};try{return await ze(f(),ua,"\u5F55\u97F3\u5B9A\u7A3F\u8D85\u65F6")}catch(P){throw y(),P instanceof H?P:new H("encode-failed","\u5F55\u97F3\u5B9A\u7A3F\u5931\u8D25",{cause:P})}},cancel(){o="closed";let f=d;if(d=null,f!==null&&(f.ondataavailable=null,f.onstop=null,f.state!=="inactive"))try{f.stop();}catch{}i.length=0,y();},async previewWav(){m!==null?await m:c!==null&&await c,x();let f=Lr(i),P=ct(f,se);if(P.length===0)throw new H("empty-recording","\u6682\u65E0\u53EF\u8BD5\u542C\u7684\u5F55\u97F3\u5185\u5BB9");return {wavData:In(it(P),se),durationMs:Math.round(P.length/se*1e3)}}}}function De(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 Hr(e,n){return e.length===n.length&&e.every((t,r)=>t===n[r])}var ce=class extends Error{constructor(n,t){super(n,t),this.name="ChannelKeyError";}};function Fr(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 ce("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 ce("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 ce("channel secret_key Base64 \u89E3\u7801\u7ED3\u679C\u4E3A\u7A7A");let s=new Uint8Array(16);s.set(a.subarray(0,s.length));let d=n.length===16&&/^[\x20-\x7E]+$/.test(n)?Uint8Array.from(n,c=>c.charCodeAt(0)):void 0;return {canonical:s,...d===void 0?{}:{legacyAscii:d},metadata:{channelKeyCharLength:n.length,decodedByteLength:a.length,padByteCount:Math.max(0,16-a.length),legacyAsciiCandidate:d!==void 0}}}function Ia(e){let n=new Map,t=new Map,r=new Map,o=new Map,i=De(Hr);function a(v){return {canonical:v.canonical.slice(),...v.legacyAscii===void 0?{}:{legacyAscii:v.legacyAscii.slice()},metadata:{...v.metadata}}}function s(v){return [{strategy:"canonical-base64-pad",key:v.canonical.slice()},...v.legacyAscii===void 0?[]:[{strategy:"legacy-ascii16",key:v.legacyAscii.slice()}]]}function d(v){n.delete(v),t.delete(v),r.delete(v),o.set(v,(o.get(v)??0)+1);}function c(v){let u=o.get(v)??0,g=(async()=>{try{let C=await e.loadSecretKey(v);if(C===null||C.trim()==="")throw new ce(`channel secret_key \u7F3A\u5931\uFF08channelId=${v}\uFF09`);let p=Fr(C);return (o.get(v)??0)===u&&n.set(v,a(p)),p}catch(C){let p=C instanceof ce?C:new ce(`channel secret_key \u52A0\u8F7D\u5931\u8D25\uFF08channelId=${v}\uFF09`,{cause:C});throw e.onError?.(p.message,C),p}})().finally(()=>{t.get(v)===g&&t.delete(v);});return t.set(v,g),g}function m(v,u){let g=t.get(v);if(g!==void 0)return g;i.shouldRenegotiate(v,u.staleKey,n.get(v)?.canonical)&&d(v);}function w(v,u){let g=v.trim();if(g===""){let p=new ce("channel id \u4E0D\u80FD\u4E3A\u7A7A");return e.onError?.(p.message),Promise.reject(p)}if(u!==void 0){let p=m(g,u);if(p!==void 0)return p.then(a)}let C=n.get(g);return C!==void 0?Promise.resolve(a(C)):t.get(g)??c(g)}function h(v,u){let g=v.trim();if(g===""){let S=new ce("channel id \u4E0D\u80FD\u4E3A\u7A7A");return e.onError?.(S.message),Promise.reject(S)}if(u!==void 0){let S=m(g,u);if(S!==void 0)return S.then(f=>f.canonical.slice())}let C=n.get(g);if(C!==void 0)return Promise.resolve(C.canonical.slice());let p=r.get(g);if(p!==void 0)return p;let y=(t.get(g)??c(g)).then(S=>S.canonical.slice()).finally(()=>{r.get(g)===y&&r.delete(g);});return r.set(g,y),y}function l(v){return n.get(v.trim())?.canonical.slice()??null}async function b(v,u){let g=await w(v,u);return s(g)}function I(v){let u=n.get(v.trim());return u===void 0?[]:s(u)}function A(v){let u=n.get(v.trim());return u===void 0?null:{...u.metadata}}function _(v,u){let g=v.trim();if(g==="")throw new ce("channel id \u4E0D\u80FD\u4E3A\u7A7A");let C=Fr(u);d(g),i.reset(g),n.set(g,a(C));}function T(v){let u=v.trim();u!==""&&(d(u),i.reset(u));}function x(){let v=new Set([...n.keys(),...t.keys(),...r.keys(),...o.keys()]);for(let u of v)o.set(u,(o.get(u)??0)+1),i.reset(u);n.clear(),t.clear(),r.clear();}return {getChannelKey:h,getCachedChannelKey:l,getChannelKeyCandidates:b,getCachedChannelKeyCandidates:I,getCachedChannelKeyMetadata:A,primeChannelKey:_,clearChannelKey:T,clearAll:x}}function ut(){let e=globalThis.scheduler;return typeof e?.yield=="function"?e.yield():new Promise(n=>setTimeout(n,0))}var ft=2654435769,$r=16,Ue=8,lt=16,jr=32;function qr(e){if(e.length<lt)throw new Error(`TEA key \u957F\u5EA6\u4E0D\u8DB3\uFF1A${e.length}\uFF0C\u9700 \u2265 ${lt} \u5B57\u8282`);let n=new DataView(e.buffer,e.byteOffset,lt);return [n.getUint32(0,true),n.getUint32(4,true),n.getUint32(8,true),n.getUint32(12,true)]}function mt([e,n],[t,r,o,i]){let a=e>>>0,s=n>>>0,d=Math.imul(ft,16)>>>0;for(let c=0;c<$r;c++)s=s-(Math.imul(a,16)+o^a+d^(a>>>5)+i)>>>0,a=a-(Math.imul(s,16)+t^s+d^(s>>>5)+r)>>>0,d=d-ft>>>0;return [a,s]}function gt([e,n],[t,r,o,i]){let a=e>>>0,s=n>>>0,d=0;for(let c=0;c<$r;c++)d=d+ft>>>0,a=a+(Math.imul(s,16)+t^s+d^(s>>>5)+r)>>>0,s=s+(Math.imul(a,16)+o^a+d^(a>>>5)+i)>>>0;return [a,s]}function We(e,n,t,r){let o=qr(n),i=new Uint8Array(e.length),a=Math.floor(e.length/Ue),s=r===void 0?a:Math.min(a,Math.floor(r/Ue)),d=new DataView(e.buffer,e.byteOffset,e.byteLength),c=new DataView(i.buffer);for(let w=0;w<s;w++){let h=w*Ue,[l,b]=t([d.getUint32(h,true),d.getUint32(h+4,true)],o);c.setUint32(h,l,true),c.setUint32(h+4,b,true);}let m=s*Ue;return m<e.length&&i.set(e.subarray(m),m),i}function Ye(e,n){return We(n,e,mt)}function Qe(e,n){return We(n,e,gt)}function Jr(e,n){return We(n,e,gt,jr)}function Vr(e,n){return We(n,e,mt,jr)}var va=1024*1024;function Sa(){return ut()}function pt(e){if(e?.aborted)throw new DOMException("TEA \u5206\u5757\u5904\u7406\u5DF2\u53D6\u6D88","AbortError")}async function yt(e,n,t,r=va,o={}){if(!Number.isInteger(r)||r<=0||r%Ue!==0)throw new RangeError(`TEA \u5206\u5757\u5927\u5C0F\u5FC5\u987B\u662F ${Ue} \u7684\u6B63\u6574\u6570\u500D\uFF1A${r}`);qr(e);let i=t==="encrypt"?gt:mt,a=o.yieldToMain??Sa,s=n.size,d=[],c=0;for(;c<s;){pt(o.signal);let m=Math.min(c+r,s),w=new Uint8Array(await n.slice(c,m).arrayBuffer());pt(o.signal),d.push(new Blob([We(w,e,i)])),c=m,o.onProgress?.(c,s),c<s&&await a();}return pt(o.signal),new Blob(d)}var zr=8,Sn=16;function Aa(e){let n=W.md.md5.create();return n.update(e,"utf8"),n.digest().toHex()}function Yr(e){return new TextEncoder().encode(e)}function Ma(e){let n=e.length;for(;n>0&&e[n-1]===0;)n-=1;return new TextDecoder().decode(e.subarray(0,n))}function _a(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 xa(e){let n="";for(let t of e)n+=String.fromCharCode(t);return btoa(n)}function Ea(e){let n=Math.ceil(e.length/zr)*zr;if(n===e.length)return e;let t=new Uint8Array(n);return t.set(e),t}function Qr(e,n=Aa){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<Sn)throw new Error("collect TEA key: MD5 \u957F\u5EA6\u4E0D\u8DB3");let o=Yr(r.slice(0,Sn).toUpperCase());if(o.length<Sn)throw new Error("collect TEA key: \u6D3E\u751F\u7ED3\u679C\u4E0D\u8DB3 16 \u5B57\u8282");return o.subarray(0,Sn)}function Xr(e,n,t){return xa(Qe(Qr(n,t),Ea(Yr(e))))}function Ra(e,n,t){return Ma(Ye(Qr(n,t),_a(e)))}function ka(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function ht(e){let n=e.trim();if(n===""||!n.startsWith("{"))return null;try{return ka(JSON.parse(n))}catch{return null}}function Ta(e){let n=e.trim(),t=n.indexOf("}");return t>=0?n.slice(0,t+1):n}function Zr(e,n,t){let r=ht(e);if(r!==null)return r;if(e.trim()===""||n.trim()==="")return null;try{let o=Ra(e,n,t);return ht(o)??ht(Ta(o))}catch{return null}}var Da="core";var Xe=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";}},z=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 D(e,n,t,r){let o=r!==void 0&&"responseMode"in r&&r.responseMode==="strict",i;try{i=await e(n,{target:Da,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 Xe(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 Xe(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 eo(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 D(e,"/user/encrypt_info/info",t,r)}function Ua(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 Oa(e){let n=e.clientType,t=new Map,r=new Map,o=De((h,l)=>h===l),i=null,a=null;function s(h,l){e.onError?.(h,l);}function d(){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 d();}catch(_){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u751F\u6210\u4E34\u65F6 RSA \u5BC6\u94A5\u5931\u8D25\uFF08userId=${h}\uFF09`,_),null}let b;try{b=await eo(e.client,{publicKey:l.publicKeyBase64,clientType:n});}catch(_){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\u8BF7\u6C42\u5F02\u5E38\uFF08userId=${h}\uFF09`,_),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 I=b.data.prv_key??b.data.prvKey??"",A=String(b.data.version??"").trim();if(I==="")return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\u54CD\u5E94\u7F3A\u5C11 prv_key\uFF08userId=${h}\uFF09`),null;try{let _=e.crypto.rsaDecryptPkcs1({data:Ua(I),privateKey:l.privateKey}),T=new TextDecoder().decode(_).trim();if(T==="")return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u89E3\u51FA\u7684\u79C1\u94A5\u4E3A\u7A7A\uFF08userId=${h}\uFF09`),null;let x={privateKey:T,version:A};return t.set(h,x),x}catch(_){return s(`\u7528\u6237\u5BC6\u94A5\u534F\u5546\uFF1A\u4E34\u65F6\u79C1\u94A5\u89E3 prv_key \u5931\u8D25\uFF08userId=${h}\uFF09`,_),null}}function m(h,l){let b=h.trim();if(b==="")return Promise.resolve(null);if(l!==void 0){let T=r.get(b);if(T!==void 0)return T;o.shouldRenegotiate(b,l.staleKey,t.get(b)?.privateKey)&&t.delete(b);}let I=t.get(b);if(I!==void 0)return Promise.resolve(I);let A=r.get(b);if(A!==void 0)return A;let _=c(b).finally(()=>{r.get(b)===_&&r.delete(b);});return r.set(b,_),_}function w(h){return t.get(h.trim())??null}return {getUserPrivateKey:m,getCachedPrivateKey:w}}function no(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 D(e,"/user_group/encrypt_info",t,r)}function Ba(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 Na(e){let n=e.clientType,t=new Map,r=new Map,o=new Map,i=De((l,b)=>l===b),a=null,s=null;function d(){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,I;try{I=await d();}catch(u){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u751F\u6210\u4E34\u65F6 RSA \u5BC6\u94A5\u5931\u8D25\uFF08groupId=${l}\uFF09`,u),null}let A;try{A=await no(e.client,{groupId:l,publicKey:I.publicKeyBase64,clientType:n});}catch(u){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\u8BF7\u6C42\u5F02\u5E38\uFF08groupId=${l}\uFF09`,u),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 _=A.data,T=String(_.prv_key??_.prvKey??_.private_key??"").trim(),x=String(_.pub_key??_.pubKey??_.public_key??"").trim(),v=String(_.version??"").trim();if(T==="")return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\u54CD\u5E94\u7F3A\u5C11 prv_key\uFF08groupId=${l}\uFF09`),null;try{let u=e.crypto.rsaDecryptPkcs1({data:Ba(T),privateKey:I.privateKey}),g=new TextDecoder().decode(u).trim();if(g==="")return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u89E3\u51FA\u7684\u7FA4\u79C1\u94A5\u4E3A\u7A7A\uFF08groupId=${l}\uFF09`),null;let C={privateKey:g,publicKey:x,version:v};return (o.get(l)??0)===b&&t.set(l,C),C}catch(u){return e.onError?.(`\u7FA4\u5BC6\u94A5\u534F\u5546\uFF1A\u4E34\u65F6\u79C1\u94A5\u89E3 prv_key \u5931\u8D25\uFF08groupId=${l}\uFF09`,u),null}}function m(l,b){let I=l.trim();if(I==="")return Promise.resolve(null);if(b!==void 0){let x=r.get(I);if(x!==void 0)return x;i.shouldRenegotiate(I,b.staleKey,t.get(I)?.privateKey)&&t.delete(I);}let A=t.get(I);if(A!==void 0)return Promise.resolve(A);let _=r.get(I);if(_!==void 0)return _;let T=c(I).finally(()=>{r.get(I)===T&&r.delete(I);});return r.set(I,T),T}function w(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:m,getCachedGroupKeys:w,getCachedGroupKeyVersion:l=>t.get(l.trim())?.version??null,clearGroupKeys:h}}async function Ze(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 D(e,"/user/info/other",t,r)).data}function Ka(e){let n=e.clientType,t=new Map,r=new Map;async function o(a){try{let d=((await Ze(e.client,{userId:a,clientType:n}))?.public_key??"").trim();return d===""?(e.onError?.(`\u53D6\u5BF9\u7AEF\u516C\u94A5\uFF1A/user/info/other \u65E0 public_key\uFF08userId=${a}\uFF09`),null):(t.set(a,d),d)}catch(s){return e.onError?.(`\u53D6\u5BF9\u7AEF\u516C\u94A5\u8BF7\u6C42\u5F02\u5E38\uFF08userId=${a}\uFF09`,s),null}}function i(a,s){let d=a.trim();if(d==="")return Promise.resolve(null);s?.force===true&&t.delete(d);let c=t.get(d);if(c!==void 0)return Promise.resolve(c);let m=r.get(d);if(m!==void 0)return m;let w=o(d).finally(()=>{r.get(d)===w&&r.delete(d);});return r.set(d,w),w}return {getPeerPublicKey:i}}var Se=16;function to(e){let n="";for(let t of e)n+=String.fromCharCode(t);return n}function ro(e){let n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t)&255;return n}function oo(e){return e.replace(/(.{64})/g,`$1
2
2
  `).trim()}function Ga(e){return e.replace(/-----BEGIN[^-]+-----/g,"").replace(/-----END[^-]+-----/g,"").replace(/\s+/g,"")}function La(e){let n=(e??"").trim();if(n==="")throw new Error("RSA \u79C1\u94A5\u4E3A\u7A7A");if(n.includes("-----BEGIN"))return W.pki.privateKeyFromPem(n);let t=n.replace(/\s+/g,""),r=[];try{return W.pki.privateKeyFromAsn1(W.asn1.fromDer(W.util.decode64(t)))}catch(i){r.push(i);}let o=oo(t);for(let i of ["PRIVATE KEY","RSA PRIVATE KEY"])try{return W.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 io(e){let n=La(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 d=0;d<r.length;d+=t){let c=Math.min(d+t,r.length);try{let m=n.decrypt(to(r.subarray(d,c)),"RSAES-PKCS1-V1_5");o.push(ro(m));}catch(m){let w=m instanceof Error?m.message:String(m);throw new Error(`RSA-PKCS1 \u89E3\u5BC6\u5931\u8D25\uFF08\u5BC6\u6587 ${r.length}B\uFF0C\u5757 ${d}..${c}\uFF0CkeySize ${t}B\uFF0C\u79C1\u94A5 ${n.n.bitLength()}bit\uFF09\uFF1A${w}`)}}let i=o.reduce((d,c)=>d+c.length,0),a=new Uint8Array(i),s=0;for(let d of o)a.set(d,s),s+=d.length;return a}function Ha(e){let n=io({data:e.secretKey,privateKey:e.privateKey});if(n.length<Se)throw new Error(`\u7AEF\u5230\u7AEF\u89E3\u5BC6\u5931\u8D25\uFF1ARSA \u89E3\u51FA\u7684 teaKey \u957F\u5EA6 ${n.length} < ${Se}`);return Ye(n,e.cipherData)}function Fa(e){let n=(e??"").trim();if(n==="")throw new Error("RSA \u516C\u94A5\u4E3A\u7A7A");if(n.includes("-----BEGIN"))return W.pki.publicKeyFromPem(n);let t=n.replace(/\s+/g,""),r=[];try{return W.pki.publicKeyFromAsn1(W.asn1.fromDer(W.util.decode64(t)))}catch(i){r.push(i);}let o=oo(t);for(let i of ["PUBLIC KEY","RSA PUBLIC KEY"])try{return W.pki.publicKeyFromPem(`-----BEGIN ${i}-----