k2-im 0.1.9 → 0.1.10

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.
@@ -1 +1 @@
1
- import {h,C,p,i,q,m,z,j,g,B,o}from'./chunk-MKV7J6WB.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-TQF5HUEX.js';import'./chunk-DFE2F575.js';import'./chunk-6QR5GVQ3.js';import'./chunk-BO5YFCS4.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 Vt(t){return {systemMessage:a=>a.body.system!==void 0?g$1(a.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:a=>i$1(a.contentType,{locale:t.locale(),durationMs:a.body.voice?.durationMs,stickerImageType:a.body.sticker?.imageType,gameType:a.body.game?.gameType,callKind:a.body.call?.callKind}),lastMessage:a=>a.lastMessageSummary!==void 0?h$2(a.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):a.lastMessagePreview,failureText:a=>a.failure?.displayCode!==void 0?f(a.failure.displayCode,{locale:t.locale(),mediaKind:a.failure.mediaKind,params:a.failure.params}):a.failure?.message??""}}var mt=Symbol("ImThreadReadActions");function gt(t){provide(mt,t);}function Nt(){return inject(mt,void 0)}var _e=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:a,slots:T}){return gt(t.readActions),()=>{let u=h(t.message),f=t.rendererRegistry.resolve(u);return f!==void 0?h$1(f,{...a,message:t.message,presentation:t.presentation}):T["unsupported-body"]!==void 0?T["unsupported-body"]({kind:u,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":u,"aria-hidden":"true"})}}});var je=Symbol("ImThreadViewportRegistration");function vt(){return inject(je,void 0)}var Ke=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:a}){let T=vt();function u(o,l){let b=Array.isArray(l)?l:[l];return b.length===1&&isVNode(b[0])?cloneVNode(b[0],{key:o}):h$1(Fragment,{key:o},b)}function f(o){return l=>{T?.registerMessageNode(o,l instanceof HTMLElement?l:null);}}function V(o,l){return b=>{T?.registerDateNode(o,l,b instanceof HTMLElement?b:null);}}function M(o){return a.encryption?.({item:o})??h$1("div",{"data-im-thread-encryption":o.key})}function m(o){let l=V(o.key,o.label);return a["date-separator"]?.({item:o,setElement:l})??h$1("div",{ref:l,"data-im-thread-date-separator":o.key},o.label)}function w(o){return a["entry-unread"]?.({item:o})??h$1("div",{"data-im-thread-entry-unread":o.key,...o.count===void 0?{}:{"data-count":String(o.count)}})}function R(o){let l=f(o.message.id);return a.item!==void 0?a.item({item:o,setElement:l}):a.message!==void 0?a.message({item:o,setElement:l}):o.message.deletedForEveryone!==void 0?a["deleted-message"]?.({item:o,setElement:l})??h$1("article",{ref:l,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.message.recalled!==void 0?a["recalled-message"]?.({item:o,setElement:l})??h$1("article",{ref:l,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.kind==="system"&&a.system!==void 0?a.system({item:o,setElement:l}):h$1("article",{ref:l,"data-im-thread-message-id":o.message.id,"data-first-of-run":o.kind==="message"?String(o.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(_e,{message:o.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":a["unsupported-body"]===void 0?void 0:b=>a["unsupported-body"]?.(b)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(o=>{switch(o.kind){case "encryption":return a.item!==void 0?u(o.key,a.item({item:o})):u(o.key,M(o));case "date-separator":return a.item!==void 0?u(o.key,a.item({item:o,setElement:V(o.key,o.label)})):u(o.key,m(o));case "entry-unread":return a.item!==void 0?u(o.key,a.item({item:o})):u(o.key,w(o));case "system":case "message":return u(o.key,R(o))}return o}))}});var yt=120,zt=500,Ae=.5,Wt=8,Ue=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:a,expose:T,slots:u}){let f=ref(null),V=ref(null),M=new Map,m$1=new Map,w=new Set,R=new Map,o$1=0,l=[],b,B$1,S,L=false,F,C$1=new Set,_=false,U,W="",J=1,s=false,q$1=false,X=true,E=false,G=false,Y=false,H=0,Z=-1,k,ee,c,h,p$1,v=ref(true),N=ref(0),j$1=C(e=>{N.value=e,a("new-message-count",e);});function z$1(e){let n=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=n}function $(e=t.messageIds){return e.flatMap(n=>{let i=M.get(n);if(i===void 0)return [];let I=i.getBoundingClientRect(),P=i.querySelector("[data-im-thread-anchor-point]");return [{id:n,top:I.top,bottom:I.bottom,anchorTop:P?.getBoundingClientRect().top??I.top}]})}function Ee(e="",n=1){let i=Math.min(1,Math.max(0,n));W!==""&&W!==e&&R.get(W)?.element.style.removeProperty("opacity"),W=e,J=i,e!==""&&R.get(e)?.element.style.setProperty("opacity",String(i));}function Re(){Ee();}function xe(){let e=f.value;if(_||e===null||!t.activeDateEnabled)return;let n=[...R.entries()].filter(([,A])=>e.contains(A.element)).map(([A,K])=>{let Q=K.element.getBoundingClientRect();return {key:A,label:K.label,top:Q.top,height:Q.height}}).sort((A,K)=>A.top-K.top),i=e.getBoundingClientRect(),I=n.find(A=>A.height>0)?.height??28,P=g({markers:n,viewportTop:i.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:I});if(P===null){Re(),a("active-date-change",null);return}Ee(P.inlineDateKey,P.inlineOpacity),a("active-date-change",P);}function oe(){let e=f.value;if(_||e===null)return;let n=e.getBoundingClientRect(),i=S!==void 0&&L?t.messageIds.filter(K=>w.has(K)):t.messageIds,I=$(i);if(S!==void 0&&L&&I.length===0){v.value=z$1(e);return}let P=I.filter(K=>B({viewportTop:n.top,viewportBottom:n.bottom,messageTop:K.top,messageBottom:K.bottom,margin:t.visibleMargin})).map(K=>K.id),A=P.length!==l.length||P.some((K,Q)=>l[Q]!==K);l=Object.freeze(P),b=o(I,{top:n.top,bottom:n.bottom}),j$1.acknowledgeVisible(P),v.value=z$1(e),A&&a("visible-range",l),a("settled",{visibleMessageIds:l,...l.length===0?{}:{newestVisibleMessageId:l[l.length-1]},isAtBottom:v.value,newMessageCount:N.value});}function re(e){if(C$1.add(e),F!==void 0)return;let n=()=>{F=void 0;let i=[...C$1];C$1.clear(),i.forEach(I=>I());};typeof globalThis.requestAnimationFrame=="function"?F=globalThis.requestAnimationFrame(n):F=globalThis.setTimeout(n,0);}function He(){F!==void 0&&(typeof F=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(F):globalThis.clearTimeout(F),F=void 0,C$1.clear());}function ae(){re(oe);}function Se(){let e=f.value;if(e===null)return;let n=e.getBoundingClientRect(),i=o($(),{top:n.top,bottom:n.bottom});i!==void 0&&(b=i);}function fe(){let e=f.value;if(_||e===null)return;let n=e.scrollTop,i=U,I=false;if(i!==void 0){let A=Math.abs(n-i.targetTop)<=Ae;I=i.behavior==="smooth"||A,(i.behavior!=="smooth"||A)&&(U=void 0);}!I&&!E&&h===void 0&&n!==o$1&&(E=true,G=true,H+=1);let P=E&&!I&&n!==o$1;if(P&&(a("user-scroll"),re(xe)),E&&!Y&&D(),!X&&G&&H!==Z&&n<o$1&&n>d()&&(X=true),h!==void 0&&!I)if(E){let A=ge();A!==void 0&&(h.expectedOffset=A);}else be(),Pe();X&&h===void 0&&!q$1&&!t.loadingOlder&&P&&n>=0&&m({previousScrollTop:o$1,currentScrollTop:n,topThreshold:t.olderPrefetchThreshold})&&(Se(),X=false,Z=H,q$1=true,a("reach-start"),re(()=>{t.loadingOlder||(q$1=false);})),!s&&!t.loadingOlder&&!t.loadingNewer&&t.hasNewer&&P&&z({previousScrollTop:o$1,currentScrollTop:n,isAtBottom:z$1(e),isHistoryWindow:t.hasNewer,isPageSettling:I})&&(s=true,v.value=false,a("reach-end"),re(()=>{t.loadingNewer||(s=false);})),o$1=n,ae();}function ye(e,n="auto"){U={targetTop:e,behavior:n};}function se(e){let n=h,i=V.value;if(!(n===void 0||i===null)){if(n.visualOffset=Math.abs(e)<=Ae?0:e,n.visualOffset===0){i.style.removeProperty("transform"),i.style.removeProperty("will-change");return}i.style.setProperty("transform",`translate3d(0, ${n.visualOffset}px, 0)`),i.style.setProperty("will-change","transform");}}function le(){p$1!==void 0&&(clearTimeout(p$1),p$1=void 0);let e=V.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),h=void 0,U=void 0;}function ge(){let e=f.value,n=h;if(e===null||n===void 0)return;let i=$().find(I=>I.id===n.anchor.id);if(i!==void 0)return (i.anchorTop??i.top)-e.getBoundingClientRect().top}function be(){let e=h,n=ge();if(e===void 0||n===void 0)return;let i=e.expectedOffset-n;Math.abs(i)<=Ae||(se(e.visualOffset+i),e.committed=false,e.attempts=0);}function pe(){p$1!==void 0&&clearTimeout(p$1),p$1=setTimeout(()=>{p$1=void 0,!(E||h?.committed!==true)&&le();},zt);}function ve(){let e=f.value,n=h;if(_||e===null||n===void 0||E)return;let i=n.visualOffset;if(Math.abs(i)<=Ae){n.committed=true,pe();return}let I=Math.max(0,e.scrollHeight-e.clientHeight),P=Math.min(I,Math.max(0,e.scrollTop-i));if(ye(P),e.scrollTop=P,Math.abs(e.scrollTop-P)>Ae){U=void 0,n.committed=false,n.attempts+=1,n.attempts<Wt?Pe():(le(),U=void 0,o$1=e.scrollTop);return}se(0),o$1=e.scrollTop,n.expectedOffset=ge()??n.expectedOffset,n.committed=true,n.attempts=0,pe();}function Pe(){p$1!==void 0&&clearTimeout(p$1),p$1=setTimeout(()=>{p$1=void 0,ve();},yt);}function Oe(e){e!==void 0&&(h===void 0&&(h={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),be(),!E&&ve());}function r(e){let n=f.value;if(n===null||e===void 0)return;let i=n.getBoundingClientRect(),I=q(e,$(),{top:i.top,bottom:i.bottom});if(I!==void 0){let P=Math.max(0,n.scrollHeight-n.clientHeight),A=Math.min(P,Math.max(0,n.scrollTop+I));ye(A),n.scrollTop=A,o$1=n.scrollTop;}}function d(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function g$1(){U?.behavior==="smooth"&&(U=void 0),G=false,E||(E=true,H+=1),k!==void 0&&(clearTimeout(k),k=void 0);}function y(){let e=f.value;X||H===Z||e===null||e.scrollTop<=d()||(h?.committed===true&&le(),h===void 0&&(X=true));}function x(){k!==void 0&&(clearTimeout(k),k=void 0),le(),E=false,G=false,Y=false,ee=void 0,c=void 0,H+=1,Z=-1,X=true,q$1=false,s=false,U=void 0;}function O(){Y||(k!==void 0&&(clearTimeout(k),k=void 0),E=false,G=false,h!==void 0&&(h.attempts=0),ve());}function D(){Y||(k!==void 0&&clearTimeout(k),k=setTimeout(()=>{k=void 0,O();},yt));}function me(){U=void 0,O();}function ie(e){Y=true,g$1(),ee=e.touches?.[0]?.clientY;}function Ie(e){let n=e.touches?.[0]?.clientY;n!==void 0&&(ee!==void 0&&n>ee&&y(),ee=n);}function ne(){Y=false,ee=void 0,D();}function he(e){g$1(),e.deltaY<0&&y(),D();}function Ve(e){e.pointerType!=="touch"&&(g$1(),c=e.clientY,D());}function $e(e){e.pointerType==="touch"||!E||c===void 0||(e.clientY<c&&y(),c=e.clientY,D());}function Ce(e){e.pointerType!=="touch"&&(c=void 0,D());}function Xe(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(g$1(),(e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey)&&y(),D());}function Be(e="auto"){let n=f.value;if(n===null)return;le();let i=Math.max(0,n.scrollHeight-n.clientHeight);ye(i,e),n.scrollTo?.({top:i,behavior:e}),n.scrollTop!==i&&(n.scrollTop=i),o$1=n.scrollTop,j$1.clear(),oe();}function Je(){let e=f.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function wt(){let e=f.value;return Je()&&e!==null&&e.scrollHeight>e.clientHeight+1}function Mt(e,n={}){let i=f.value,I=M.get(e);if(i===null||I===void 0||!i.contains(I)||i.clientHeight<=0)return false;le();let P=i.getBoundingClientRect(),A=I.getBoundingClientRect(),K=n.block??"center",Q;K==="start"?Q=i.scrollTop+A.top-P.top:K==="end"?Q=i.scrollTop+A.bottom-P.bottom:K==="nearest"?A.top>=P.top&&A.bottom<=P.bottom?Q=i.scrollTop:A.top<P.top?Q=i.scrollTop+A.top-P.top:Q=i.scrollTop+A.bottom-P.bottom:Q=j({currentScrollTop:i.scrollTop,scrollHeight:i.scrollHeight,targetHeight:A.height,targetTop:A.top,viewportHeight:i.clientHeight,viewportTop:P.top});let ke=Math.max(0,i.scrollHeight-i.clientHeight),Te=Math.min(ke,Math.max(0,Q)),we=n.behavior??"auto";return ye(Te,we),i.scrollTo?.({top:Te,behavior:we}),i.scrollTop!==Te&&(i.scrollTop=Te),o$1=i.scrollTop,oe(),true}function Rt(){j$1.clear();}function St(){s=true,v.value=false;}function Pt(){s=false,ae();}function At(e,n){let i=M.get(e);if(i!==void 0&&i!==n&&(S?.unobserve(i),B$1?.unobserve?.(i),m$1.delete(i),w.delete(e)),n===null){M.delete(e),w.delete(e);return}M.set(e,n),m$1.set(n,e),S?.observe(n),B$1?.observe(n),ae();}function Et(e,n,i){let I=R.get(e);if(i===null){R.delete(e);return}R.set(e,{element:i,label:n}),W===e&&i.style.setProperty("opacity",String(J)),I?.element!==i&&(i.dataset.imThreadDateSeparator=e);}return provide(je,{registerMessageNode:At,registerDateNode:Et}),watch(()=>t.contentKey,(e,n)=>{if(e===n)return;x();let i=f.value;i!==null&&(o$1=i.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,n)=>{let i=f.value;if(i===null)return;let I=new Set(n);n.length>0&&e.length>0&&!e.some(Ne=>I.has(Ne))&&x();let A=i.getBoundingClientRect(),K=p(b,$(),{top:A.top,bottom:A.bottom}),Q=v.value,ke=n[n.length-1],Te=ke===void 0?-1:e.indexOf(ke),we=Te<0?[]:e.slice(Te+1).filter(Ne=>!I.has(Ne)),xt=s||t.loadingNewer;if(await nextTick(),_)return;let Qe=n[0];if(Qe!==void 0&&e.indexOf(Qe)>0&&(q$1=false,Oe(K)),we.length>0){if(xt){s=false,h===void 0&&r(K),v.value=false,ae();return}(Q||we.some(Ot=>t.shouldFollowAppendedMessage?.(Ot)===true))&&t.followNewMessages?Be():j$1.add(we);}ae();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,n)=>{e||!n||!s||re(()=>{t.loadingNewer||(s=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,n)=>{e||!n||!q$1||re(()=>{t.loadingOlder||(q$1=false);});},{flush:"pre"}),onMounted(()=>{let e=f.value;if(e!==null){if(o$1=e.scrollTop,e.addEventListener("scroll",fe,{passive:true}),e.addEventListener("scrollend",me,{passive:true}),e.addEventListener("touchstart",ie,{passive:true}),e.addEventListener("touchmove",Ie,{passive:true}),e.addEventListener("touchend",ne,{passive:true}),e.addEventListener("touchcancel",ne,{passive:true}),e.addEventListener("wheel",he,{passive:true}),e.addEventListener("pointerdown",Ve,{passive:true}),e.addEventListener("pointermove",$e,{passive:true}),e.addEventListener("pointerup",Ce,{passive:true}),e.addEventListener("pointercancel",Ce,{passive:true}),e.addEventListener("keydown",Xe),typeof globalThis.ResizeObserver=="function"){B$1=new globalThis.ResizeObserver(()=>{let n=b;re(()=>{f.value!==null&&(h!==void 0?(be(),E||Pe()):s||t.loadingNewer?r(n):t.resizeFollowEnabled&&v.value?Be():r(n),oe());});}),B$1.observe(e);for(let n of M.values())B$1.observe(n);}if(typeof globalThis.IntersectionObserver=="function"){S=new globalThis.IntersectionObserver(n=>{for(let i of n){let I=m$1.get(i.target);I!==void 0&&(i.isIntersecting?w.add(I):w.delete(I));}L=true,ae();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let n of M.values())S.observe(n);}ae();}}),onBeforeUnmount(()=>{_=true;let e=f.value;e!==null&&e.removeEventListener("scroll",fe),e!==null&&(e.removeEventListener("scrollend",me),e.removeEventListener("touchstart",ie),e.removeEventListener("touchmove",Ie),e.removeEventListener("touchend",ne),e.removeEventListener("touchcancel",ne),e.removeEventListener("wheel",he),e.removeEventListener("pointerdown",Ve),e.removeEventListener("pointermove",$e),e.removeEventListener("pointerup",Ce),e.removeEventListener("pointercancel",Ce),e.removeEventListener("keydown",Xe)),k!==void 0&&clearTimeout(k),le(),He(),B$1?.disconnect(),S?.disconnect(),Re(),M.clear(),m$1.clear(),w.clear(),R.clear(),j$1.clear();}),T({getViewportElement:()=>f.value,clearNewMessageBadge:Rt,clearActiveDate:Re,isAtBottom:computed(()=>v.value),isMeasurable:Je,isScrollable:wt,newMessageCount:computed(()=>N.value),prepareHistoryPageAppend:St,cancelHistoryPageAppend:Pt,trackRemoteMessageIds:(e,n)=>j$1.trackRemote(e,n),scrollToLatest:Be,scrollToMessage:Mt,focusViewport:()=>f.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:f,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:V,"data-im-thread-viewport-content":""},u.default?.())])}});var bt=Symbol("ImThreadSurfaceContext");function Xt(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 Jt(t){provide(bt,t);}function Ge(){let t=inject(bt);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var ze=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),We=Object.freeze({enabled:true,maxFillPages:8}),er=8,tr=160;function rr(t,a){return t?.conversationType===a.conversationType&&t.conversationId===a.conversationId}var nr=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:a,slots:T}){let u=t.context??Ge(),f=ref(null),V=ref(0),M=ref(true),m=[],w,R=0,o=0,l=null,b="",B="",S="",L=false,F=false,C=ref(false),_=ref(""),U=ref(false),W,J,s=computed(()=>u.getState()),q=computed(()=>s.value.pageVisible??u.isPageVisible?.()??true),X=computed(()=>s.value.pageEngaged??u.isPageEngaged?.()??true),E=computed(()=>rr(s.value.activeConversation,t.conversation)),G=computed(()=>({...ze,...t.viewportOptions})),Y=computed(()=>{let r=t.initialViewportOptions.maxFillPages??We.maxFillPages;return {enabled:t.initialViewportOptions.enabled??We.enabled,maxFillPages:Number.isFinite(r)?Math.max(0,Math.floor(r)):We.maxFillPages}}),H=computed(()=>!E.value||!s.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),Z=computed(()=>E.value?i({messages:s.value.messages,entryUnread:s.value.entryUnread,formatDate:u.formatDate,leadingItems:u.leadingItems?.(),beforeMessageItems:u.beforeMessageItems}):[]),k=computed(()=>Z.value.flatMap(r=>r.kind==="message"||r.kind==="system"?[r.message.id]:[]));function ee(){W!==void 0&&(clearTimeout(W),W=void 0),J!==void 0&&(clearTimeout(J),J=void 0);}function c(r=false){if(ee(),U.value=false,r){f.value?.clearActiveDate(),_.value="";return}J=setTimeout(()=>{J=void 0,!U.value&&(f.value?.clearActiveDate(),_.value="");},tr);}function h(r){if(r===null){c();return}ee(),_.value=r.label,U.value=true;let d=G.value.activeDateIdleDelay,g=Number.isFinite(d)?Math.max(0,d):ze.activeDateIdleDelay;W=setTimeout(()=>{W=void 0,c();},g);}async function p(r,d){t.hooks?.beforeAction?.(r);try{let g=await d();return t.hooks?.afterAction?.(r,g),g}catch(g){throw t.hooks?.onError?.(r,g),g}}function v(){return !E.value||s.value.loading||!s.value.hasOlder?Promise.resolve(0):p({kind:"load-older"},()=>u.actions.loadOlder())}function N(){let r=u.actions.loadNewer,d=s.value.loadingNewer??s.value.loading;return !E.value||d||!s.value.hasNewer||r===void 0?Promise.resolve(0):p({kind:"load-newer"},()=>r())}async function j(r){for(let d=0;d<er;d+=1){if(!E.value)return;let g=r==="older"?s.value.hasOlder:s.value.hasNewer,y=r==="older"?s.value.olderError:s.value.newerError;if(!g||y!==null||(r==="older"?await v():await N())>0)return;let O=r==="older"?s.value.hasOlder:s.value.hasNewer,D=r==="older"?s.value.olderError:s.value.newerError;if(!O||D!==null)return}}async function z(){return !E.value||u.actions.loadNewer===void 0?0:p({kind:"load-newer"},()=>u.actions.retryNewer?.()??u.actions.loadNewer?.({force:!0})??Promise.resolve(0))}async function $(){if(!E.value)return 0;let r=H.value;S="";let d;try{d=await p({kind:"retry-older"},()=>u.actions.retryOlder?.()??u.actions.loadOlder({force:!0}));}catch(g){throw H.value===r&&(S=r),g}return C.value||(l=null,pe()),d}async function Ee(){if(!E.value)return false;let r=await p({kind:"jump-to-latest"},()=>u.actions.jumpToLatest?.()??Promise.resolve(!s.value.isHistoryWindow));return r&&(await nextTick(),f.value?.scrollToLatest()),r}function Re(r){M.value=r.isAtBottom,V.value=r.newMessageCount,pe();}function xe(r,d){return f.value?.scrollToMessage(r,d)??false}function oe(r,d){return !F&&o===d&&H.value===r&&E.value}async function re(r,d,g,y){for(let x=0;x<60;x+=1){if(!oe(r,d))return false;if(xe(g,y))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(O=>window.requestAnimationFrame(()=>O()));}return false}async function He(r,d,g){let y=f.value;if(y===null||!y.isMeasurable()||y.isScrollable())return true;let x=0,O=!s.value.hasOlder,D=!s.value.hasNewer||u.actions.loadNewer===void 0,me=async()=>(await nextTick(),await nextTick(),re(r,d,g,{behavior:"auto",block:"center"})),ie=async ne=>{if(!oe(r,d)||x>=Y.value.maxFillPages)return false;let he=0;if(ne==="older"){if(O||!s.value.hasOlder)return false;he=await v(),O=!s.value.hasOlder;}else {if(D||!s.value.hasNewer)return false;y.prepareHistoryPageAppend();try{he=await N();}catch(Ve){throw y.cancelHistoryPageAppend(),Ve}he<=0&&!s.value.hasNewer&&y.cancelHistoryPageAppend(),D=!s.value.hasNewer;}return x+=1,he>0?me():!(ne==="older"?O:D)};!O&&!await ie("older")&&(O=true),!D&&!await ie("newer")&&(D=true);let Ie="older";for(;oe(r,d)&&x<Y.value.maxFillPages&&y.isMeasurable()&&!y.isScrollable()&&(!O||!D);){let ne=Ie==="older"?O?"newer":"older":D?"older":"newer";Ie=ne==="older"?"newer":"older",await ie(ne)||(ne==="older"?O=true:D=true);}return oe(r,d)}async function ae(r,d={behavior:"auto",block:"center"}){if(!E.value||r==="")return false;let g=H.value,y=++o;if(!k.value.includes(r)){let D=u.actions.loadAround;if(D===void 0||!await p({kind:"locate-message",messageId:r},()=>D(r))||!oe(g,y))return false}return !await re(g,y,r,{...d,behavior:"auto"})||!await He(g,y,r)?false:re(g,y,r,d)}function Se(){w!==void 0&&(clearTimeout(w),w=void 0);}function fe(){if(Se(),!C.value)return;let r=t.readActions;if(r===void 0||m.length===0)return;let d=Number.isFinite(G.value.visibleReadDelay)?Math.max(0,G.value.visibleReadDelay):ze.visibleReadDelay;w=setTimeout(()=>{if(w=void 0,!E.value||!X.value)return;let g=m[m.length-1];if(g===void 0)return;let y=r.resolveTarget===void 0?g:r.resolveTarget(g);y!=null&&Promise.resolve(r.markRead(y)).catch(x=>{t.hooks?.onError?.({kind:"visible-range",messageIds:m},x);});},d);}function ye(r){m=Object.freeze([...r]);let d={kind:"visible-range",messageIds:m};t.hooks?.beforeAction?.(d);try{u.actions.onVisibleRange?.(m),t.hooks?.afterAction?.(d,void 0);}catch(g){throw t.hooks?.onError?.(d,g),g}C.value?fe():pe();}function se(r,d){return !F&&R===d&&H.value===r&&!L}function le(r,d){se(r,d)&&(b=r,B=ge(s.value.entryUnread),C.value=true,fe());}function ge(r){return r.state!=="located"?r.state:`${r.state}:${r.firstMessageId}`}async function be(r,d,g){for(let y=0;y<60;y+=1){if(!se(r,d))return false;if(f.value?.scrollToMessage(g,{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 pe(){let r=H.value,d=ge(s.value.entryUnread);if(r===""||s.value.loading||s.value.error!==null||b===r&&(B===d||L)||S===r||l!==null)return;if(!Y.value.enabled){b=r,B=d,C.value=true,fe();return}let g=++R;L=false,C.value=false;let y=(async()=>{if(await nextTick(),!se(r,g))return;let x=f.value;if(x===null||!x.isMeasurable())return;let O=s.value.entryUnread;if(O.state==="located"&&!k.value.includes(O.firstMessageId))return;let D=O.state==="located"?await be(r,g,O.firstMessageId):false;if(O.state==="located"&&!D)return;D||x.scrollToLatest();let me=0;for(;se(r,g)&&me<Y.value.maxFillPages&&s.value.hasOlder&&x.isMeasurable()&&!x.isScrollable();)if(await v(),!se(r,g)||(me+=1,await nextTick(),await nextTick(),!x.isMeasurable()))return;if(!se(r,g)||!x.isMeasurable())return;let ie=s.value.entryUnread;if(ie.state==="located"){if(!k.value.includes(ie.firstMessageId)||!await be(r,g,ie.firstMessageId))return}else x.scrollToLatest();await nextTick(),le(r,g);})().catch(()=>{H.value===r&&(S=r);}).finally(()=>{l===y&&(l=null);});l=y;}function ve(r){R+=1,l=null,L=false,C.value=r,(b="",B="",S=""),Se();}function Pe(){if(C.value)return;let r=H.value;L=true,R+=1,l=null,b=r,C.value=true,fe();}let Oe=Object.freeze({getViewportElement:()=>f.value?.getViewportElement()??null,loadOlder:v,retryOlder:$,loadNewer:N,retryNewer:z,jumpToLatest:Ee,scrollToMessage:xe,locateMessage:ae,focusViewport:()=>f.value?.focusViewport()});return a(Oe),watch(X,r=>{r&&C.value?fe():Se();}),watch([()=>s.value.activeRemoteMessageRevision??0,f,H],()=>{let r=f.value;if(r===null||!E.value)return;let d=u.actions.drainActiveRemoteMessageIds?.()??[];r.trackRemoteMessageIds(d,{isAtBottom:M.value,isHistoryWindow:s.value.isHistoryWindow,isPageVisible:q.value})&&(M.value=false);},{flush:"post"}),watch([H,()=>s.value.loading,()=>s.value.error,()=>k.value.length,()=>s.value.hasOlder,()=>ge(s.value.entryUnread),Y],([r,d,g,,,y],[x,,,,,O])=>{if(r!==x&&(o+=1,ve(false),c(true),f.value?.clearNewMessageBadge(),V.value=0,M.value=true),r!==""&&r===x&&y!==O&&!L&&y.startsWith("located:")&&(b="",B="",C.value=false),r===""||g!==null){ve(false);return}d||pe();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{F=true,o+=1,ve(false),c(true);}),()=>{let r={conversation:t.conversation,state:s.value,items:Z.value,actions:Oe},d=[T.header?.(r),T["before-list"]?.(r)];if(!E.value)d.push(T.unsupported?.(r)??h$1("div",{"data-im-thread-unsupported":""}));else if(!s.value.ready&&s.value.loading)d.push(T.loading?.(r)??h$1("div",{"data-im-thread-loading":""}));else if(s.value.error!==null&&s.value.messages.length===0)d.push(T.error?.(r)??h$1("div",{"data-im-thread-error":""}));else if(s.value.ready&&s.value.messages.length===0&&!s.value.hasOlder)d.push(T.empty?.(r)??h$1("div",{"data-im-thread-empty":""}));else {let g=h$1(Ue,{ref:f,messageIds:k.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:G.value.followThreshold,olderPrefetchThreshold:G.value.olderPrefetchThreshold,visibleMargin:G.value.visibleMargin,activeDateOffset:G.value.activeDateOffset,activeDateEnabled:T["active-date"]!==void 0,resizeFollowEnabled:C.value,followNewMessages:q.value,shouldFollowAppendedMessage:y=>{let x=s.value.messages.find(O=>O.id===y);return x===void 0?false:u.shouldFollowMessage?.(x)===true},onReachStart:()=>{j("older").catch(()=>{});},onReachEnd:()=>{j("newer").catch(()=>{});},onSettled:Re,onUserScroll:Pe,onActiveDateChange:h,onVisibleRange:ye,onNewMessageCount:y=>{V.value=y;}},{default:()=>[T["viewport-before"]?.(r),h$1(Ke,{items:Z.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:T.item,"date-separator":T["date-separator"],"entry-unread":T["entry-unread"],encryption:T.encryption,system:T.system,message:T.message,"recalled-message":T["recalled-message"],"deleted-message":T["deleted-message"],"unsupported-body":T["unsupported-body"]}),T["viewport-after"]?.(r)]});d.push(h$1("div",{"data-im-thread-viewport-shell":""},[T["active-date"]?.({label:_.value,visible:U.value&&_.value!==""}),g])),s.value.error!==null&&d.push(T.error?.(r)??h$1("div",{"data-im-thread-error":""}));}return d.push(T["after-list"]?.(r),T["jump-to-latest"]?.({...r,count:V.value,visible:!M.value||s.value.isHistoryWindow}),T["context-menu"]?.(r),T.composer?.(r)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},d)}}});function or(t){let a=new Map;for(let u of t){if(a.has(u.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${u.kind}`);a.set(u.kind,u.component);}let T=Object.freeze([...a.keys()]);return Object.freeze({kinds:T,resolve:u=>a.get(u)})}var ar=140,sr=120;function It(t,a){if(t.width<=0||t.height<=0)return 0;let T=Math.max(0,Math.min(t.right,a.right)-Math.max(t.left,a.left)),u=Math.max(0,Math.min(t.bottom,a.bottom)-Math.max(t.top,a.top));return Math.min(1,T*u/(t.width*t.height))}function lr(t,a){return {x:t.x,y:t.top-a,top:t.top-a,bottom:t.bottom+a,left:t.left,right:t.right,width:t.width,height:t.height+a*2,toJSON:()=>({})}}function Ye(t){let a=Math.max(0,t.scrollIdleMs??ar),T=Math.max(0,t.visibilityDwellMs??sr),u=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),f=Math.max(0,t.revealMarginPx??0),V=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),M=new Map,m=new Map,w=reactive(new Set),R=new Set,o=new Set,l=null,b=null,B=null,S=false,L=false,F=false,C,_;function U(){C!==void 0&&clearTimeout(C),C=void 0;}function W(){_!==void 0&&clearTimeout(_),_=void 0;}function J(c=false){if(!c&&b!==null||l===null)return;let h=l.getBoundingClientRect(),p=lr(h,f);for(let[v,N]of M){let j=v.getBoundingClientRect();N.ratio=It(j,h),N.intersecting=N.ratio>0,N.revealIntersecting=f>0?It(j,p)>0:N.intersecting&&N.ratio>=u;}}function s(c){return c.intersecting&&c.ratio>=u}function q(){for(let c of M.values())!c.revealIntersecting||w.has(c.key)||(w.add(c.key),t.onRevealed?.(c.item));}function X(c){let h=new Set(c.map(v=>v.key));if(h.size!==o.size||[...h].some(v=>!o.has(v))){o.clear();for(let v of h)o.add(v);t.onSettledVisibleChange?.(c.map(v=>v.item));}}function E(){if(L||S)return;J(),q();let c=l?.getBoundingClientRect(),h=c===void 0?0:(c.top+c.bottom)/2,p=[...M.entries()].filter(([,v])=>s(v)).sort(([v],[N])=>{let j=v.getBoundingClientRect(),z=N.getBoundingClientRect();return Math.abs((j.top+j.bottom)/2-h)-Math.abs((z.top+z.bottom)/2-h)}).slice(0,V).map(([,v])=>v);X(p);for(let v of p)R.has(v.key)||(R.add(v.key),t.onActivated?.(v.item));}function G(){L||S||(W(),_=setTimeout(()=>{_=void 0,E();},T));}function Y(){L||(H(true),J(),q(),X([]),W(),U(),C=setTimeout(()=>{C=void 0,H(false),G();},a));}function H(c){S!==c&&(S=c,t.onScrollingChange?.(c));}function Z(){l?.removeEventListener("scroll",Y),b?.disconnect(),B?.disconnect(),b=null,B=null,l=null;}function k(c=true){if(L)return;let h=t.getRoot();if(!(h===l&&l!==null)){if(Z(),l=h,l===null){c&&!F&&(F=true,Promise.resolve().then(()=>{F=false,L||(k(false),G());}));return}if(l.addEventListener("scroll",Y,{passive:true}),typeof IntersectionObserver<"u"){b=new IntersectionObserver(p=>{for(let v of p){let N=M.get(v.target);N!==void 0&&(N.intersecting=v.isIntersecting,N.ratio=v.intersectionRatio,f===0&&(N.revealIntersecting=v.isIntersecting&&v.intersectionRatio>=u));}q(),G();},{root:l,threshold:[0,u,1]}),f>0&&(B=new IntersectionObserver(p=>{for(let v of p){let N=M.get(v.target);N!==void 0&&(N.revealIntersecting=v.isIntersecting);}q();},{root:l,rootMargin:`${f}px 0px`,threshold:0}));for(let p of M.keys())b.observe(p);for(let p of M.keys())B?.observe(p);}else J(),q();}}function ee(c){w.delete(c),R.delete(c),o.delete(c);}return {register(c,h){if(L)return;let p=t.getKey(c),v=w.has(p),N=R.has(p),j=h===null?void 0:M.get(h);j!==void 0&&j.key!==p&&(m.delete(j.key),M.delete(h),ee(j.key));let z=m.get(p);if(z!==void 0&&z!==h&&(b?.unobserve(z),B?.unobserve(z),M.delete(z),m.delete(p)),h===null){z!==void 0&&(b?.unobserve(z),B?.unobserve(z),M.delete(z),m.delete(p)),ee(p);return}let $=M.get(h);if($?.key===p&&$.item===c){k();return}M.set(h,{item:c,key:p,intersecting:$?.key===p?$.intersecting:false,ratio:$?.key===p?$.ratio:0,revealIntersecting:$?.key===p?$.revealIntersecting:false}),m.set(p,h),k(),b?.observe(h),B?.observe(h),J(true),q(),v&&t.onRevealed?.(c),N?t.onActivated?.(c):G();},isRevealed:c=>w.has(t.getKey(c)),isActivated:c=>R.has(t.getKey(c)),isSettledVisible:c=>o.has(t.getKey(c)),isScrolling:()=>S,notifyScroll:Y,refresh(){k(),J(true),q(),G();},reset(){U(),W(),H(false),X([]),Z(),M.clear(),m.clear(),w.clear(),R.clear();},dispose(){L||(U(),W(),H(false),X([]),Z(),M.clear(),m.clear(),w.clear(),R.clear(),L=true);}}}function dr(t){let a=new Map,T=new Map,u=false,f=m=>{let w=a.get(m.channel);return w===void 0?m.channel:`${m.channel}\0${w.getKey(m.item)}`},V=Ye({getRoot:t.getRoot,getKey:f,revealMarginPx:t.revealMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:m=>{for(let w of a.values())w.onScrollingChange?.(m);},onRevealed:m=>a.get(m.channel)?.onRevealed?.(m.item),onActivated:m=>a.get(m.channel)?.onActivated?.(m.item),onSettledVisibleChange:m=>{for(let[w,R]of a){let o=m.filter(b=>b.channel===w).map(b=>b.item),l=R.maxSettledVisible===void 0?o:o.slice(0,R.maxSettledVisible);R.onSettledVisibleChange?.(l);}}});function M(m){return w=>{if(u)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(a.has(m))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${m}`);a.set(m,w);let R=new Map;T.set(m,R);let o=false,l=S=>({channel:m,item:S});function b(){for(let S of R.values())V.register(S.target,null);R.clear(),w.onScrollingChange?.(false),w.onSettledVisibleChange?.([]);}return {register(S,L){if(o||u)return;let F=w.getKey(S),C=R.get(F);if(L===null){C!==void 0&&(V.register(C.target,null),R.delete(F));return}let _=l(S);R.set(F,{target:_,element:L}),V.register(_,L);},isRevealed:S=>V.isRevealed(l(S)),isActivated:S=>V.isActivated(l(S)),isSettledVisible:S=>V.isSettledVisible(l(S)),isScrolling:V.isScrolling,notifyScroll:V.notifyScroll,refresh:V.refresh,reset:b,dispose(){o||(b(),o=true,a.delete(m),T.delete(m));}}}}return {createFactory:M,refresh:V.refresh,dispose(){if(!u){for(let m of T.values())for(let w of m.values())V.register(w.target,null);T.clear(),a.clear(),V.dispose(),u=true;}}}}export{_e as ImThreadBodySwitch,Ke as ImThreadItems,nr as ImThreadSurface,Ue as ImThreadViewport,Xt as createImThreadSurfaceContext,or as createMessageRendererRegistry,dr as createThreadVisibilityTargetGroup,Ye as createThreadVisibilityTargets,Jt as provideImThreadSurfaceContext,Vt as useImText,Ge as useImThreadSurfaceContext,Nt as useOptionalImThreadReadActions};
1
+ import {h,C,p,i,q,m,z,j,g,B,o}from'./chunk-MKV7J6WB.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-TQF5HUEX.js';import'./chunk-DFE2F575.js';import'./chunk-6QR5GVQ3.js';import'./chunk-BO5YFCS4.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 kt(t){return {systemMessage:a=>a.body.system!==void 0?g$1(a.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:a=>i$1(a.contentType,{locale:t.locale(),durationMs:a.body.voice?.durationMs,stickerImageType:a.body.sticker?.imageType,gameType:a.body.game?.gameType,callKind:a.body.call?.callKind}),lastMessage:a=>a.lastMessageSummary!==void 0?h$2(a.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):a.lastMessagePreview,failureText:a=>a.failure?.displayCode!==void 0?f(a.failure.displayCode,{locale:t.locale(),mediaKind:a.failure.mediaKind,params:a.failure.params}):a.failure?.message??""}}var pt=Symbol("ImThreadReadActions");function vt(t){provide(pt,t);}function Lt(){return inject(pt,void 0)}var _e=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:a,slots:h$2}){return vt(t.readActions),()=>{let u=h(t.message),f=t.rendererRegistry.resolve(u);return f!==void 0?h$1(f,{...a,message:t.message,presentation:t.presentation}):h$2["unsupported-body"]!==void 0?h$2["unsupported-body"]({kind:u,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":u,"aria-hidden":"true"})}}});var je=Symbol("ImThreadViewportRegistration");function Tt(){return inject(je,void 0)}var Ke=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:a}){let h=Tt();function u(o,l){let y=Array.isArray(l)?l:[l];return y.length===1&&isVNode(y[0])?cloneVNode(y[0],{key:o}):h$1(Fragment,{key:o},y)}function f(o){return l=>{h?.registerMessageNode(o,l instanceof HTMLElement?l:null);}}function V(o,l){return y=>{h?.registerDateNode(o,l,y instanceof HTMLElement?y:null);}}function M(o){return a.encryption?.({item:o})??h$1("div",{"data-im-thread-encryption":o.key})}function m(o){let l=V(o.key,o.label);return a["date-separator"]?.({item:o,setElement:l})??h$1("div",{ref:l,"data-im-thread-date-separator":o.key},o.label)}function I(o){return a["entry-unread"]?.({item:o})??h$1("div",{"data-im-thread-entry-unread":o.key,...o.count===void 0?{}:{"data-count":String(o.count)}})}function R(o){let l=f(o.message.id);return a.item!==void 0?a.item({item:o,setElement:l}):a.message!==void 0?a.message({item:o,setElement:l}):o.message.deletedForEveryone!==void 0?a["deleted-message"]?.({item:o,setElement:l})??h$1("article",{ref:l,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.message.recalled!==void 0?a["recalled-message"]?.({item:o,setElement:l})??h$1("article",{ref:l,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.kind==="system"&&a.system!==void 0?a.system({item:o,setElement:l}):h$1("article",{ref:l,"data-im-thread-message-id":o.message.id,"data-first-of-run":o.kind==="message"?String(o.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(_e,{message:o.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":a["unsupported-body"]===void 0?void 0:y=>a["unsupported-body"]?.(y)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(o=>{switch(o.kind){case "encryption":return a.item!==void 0?u(o.key,a.item({item:o})):u(o.key,M(o));case "date-separator":return a.item!==void 0?u(o.key,a.item({item:o,setElement:V(o.key,o.label)})):u(o.key,m(o));case "entry-unread":return a.item!==void 0?u(o.key,a.item({item:o})):u(o.key,I(o));case "system":case "message":return u(o.key,R(o))}return o}))}});var It=120,Yt=500,Ae=.5,$t=8,Ue=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:a,expose:h,slots:u}){let f=ref(null),V=ref(null),M=new Map,m$1=new Map,I=new Set,R=new Map,o$1=0,l=[],y,H,S,D=false,B$1,C$1=new Set,F=false,K,W="",Q=1,s=false,q$1=false,X=true,O=false,U=false,Y=false,L=0,ee=-1,k,te,c,T,g$1,v=ref(true),N=ref(0),_=C(e=>{N.value=e,a("new-message-count",e);});function z$1(e){let n=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=n}function $(e=t.messageIds){return e.flatMap(n=>{let i=M.get(n);if(i===void 0)return [];let b=i.getBoundingClientRect(),A=i.querySelector("[data-im-thread-anchor-point]");return [{id:n,top:b.top,bottom:b.bottom,anchorTop:A?.getBoundingClientRect().top??b.top}]})}function Ee(e="",n=1){let i=Math.min(1,Math.max(0,n));W!==""&&W!==e&&R.get(W)?.element.style.removeProperty("opacity"),W=e,Q=i,e!==""&&R.get(e)?.element.style.setProperty("opacity",String(i));}function Se(){Ee();}function Oe(){let e=f.value;if(F||e===null||!t.activeDateEnabled)return;let n=[...R.entries()].filter(([,E])=>e.contains(E.element)).map(([E,j])=>{let Z=j.element.getBoundingClientRect();return {key:E,label:j.label,top:Z.top,height:Z.height}}).sort((E,j)=>E.top-j.top),i=e.getBoundingClientRect(),b=n.find(E=>E.height>0)?.height??28,A=g({markers:n,viewportTop:i.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:b});if(A===null){Se(),a("active-date-change",null);return}Ee(A.inlineDateKey,A.inlineOpacity),a("active-date-change",A);}function oe(){let e=f.value;if(F||e===null)return;let n=e.getBoundingClientRect(),i=S!==void 0&&D?t.messageIds.filter(j=>I.has(j)):t.messageIds,b=$(i);if(S!==void 0&&D&&b.length===0){v.value=z$1(e);return}let A=b.filter(j=>B({viewportTop:n.top,viewportBottom:n.bottom,messageTop:j.top,messageBottom:j.bottom,margin:t.visibleMargin})).map(j=>j.id),E=A.length!==l.length||A.some((j,Z)=>l[Z]!==j);l=Object.freeze(A),y=o(b,{top:n.top,bottom:n.bottom}),_.acknowledgeVisible(A),v.value=z$1(e),E&&a("visible-range",l),a("settled",{visibleMessageIds:l,...l.length===0?{}:{newestVisibleMessageId:l[l.length-1]},isAtBottom:v.value,newMessageCount:N.value});}function ne(e){if(C$1.add(e),B$1!==void 0)return;let n=()=>{B$1=void 0;let i=[...C$1];C$1.clear(),i.forEach(b=>b());};typeof globalThis.requestAnimationFrame=="function"?B$1=globalThis.requestAnimationFrame(n):B$1=globalThis.setTimeout(n,0);}function He(){B$1!==void 0&&(typeof B$1=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(B$1):globalThis.clearTimeout(B$1),B$1=void 0,C$1.clear());}function ae(){ne(oe);}function Pe(){let e=f.value;if(e===null)return;let n=e.getBoundingClientRect(),i=o($(),{top:n.top,bottom:n.bottom});i!==void 0&&(y=i);}function fe(){return X&&T===void 0&&!q$1&&!t.loadingOlder}function xe(){Pe(),X=false,ee=L,q$1=true,a("reach-start"),ne(()=>{t.loadingOlder||(q$1=false);});}function se(){let e=f.value;if(F||e===null)return;let n=e.scrollTop,i=K,b=false;if(i!==void 0){let E=Math.abs(n-i.targetTop)<=Ae;b=i.behavior==="smooth"||E,(i.behavior!=="smooth"||E)&&(K=void 0);}!b&&!O&&T===void 0&&n!==o$1&&(O=true,U=true,L+=1);let A=O&&!b&&n!==o$1;if(A&&(a("user-scroll"),ne(Oe)),O&&!Y&&J(),!X&&U&&L!==ee&&n<o$1&&n>w()&&(X=true),T!==void 0&&!b)if(O){let E=me();E!==void 0&&(T.expectedOffset=E);}else pe(),r();fe()&&A&&n>=0&&m({previousScrollTop:o$1,currentScrollTop:n,topThreshold:t.olderPrefetchThreshold})&&xe(),!s&&!t.loadingOlder&&!t.loadingNewer&&t.hasNewer&&A&&z({previousScrollTop:o$1,currentScrollTop:n,isAtBottom:z$1(e),isHistoryWindow:t.hasNewer,isPageSettling:b})&&(s=true,v.value=false,a("reach-end"),ne(()=>{t.loadingNewer||(s=false);})),o$1=n,ae();}function Te(e,n="auto"){K={targetTop:e,behavior:n};}function ye(e){let n=T,i=V.value;if(!(n===void 0||i===null)){if(n.visualOffset=Math.abs(e)<=Ae?0:e,n.visualOffset===0){i.style.removeProperty("transform"),i.style.removeProperty("will-change");return}i.style.setProperty("transform",`translate3d(0, ${n.visualOffset}px, 0)`),i.style.setProperty("will-change","transform");}}function ie(){g$1!==void 0&&(clearTimeout(g$1),g$1=void 0);let e=V.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),T=void 0,K=void 0;}function me(){let e=f.value,n=T;if(e===null||n===void 0)return;let i=$().find(b=>b.id===n.anchor.id);if(i!==void 0)return (i.anchorTop??i.top)-e.getBoundingClientRect().top}function pe(){let e=T,n=me();if(e===void 0||n===void 0)return;let i=e.expectedOffset-n;Math.abs(i)<=Ae||(ye(e.visualOffset+i),e.committed=false,e.attempts=0);}function Ve(){g$1!==void 0&&clearTimeout(g$1),g$1=setTimeout(()=>{g$1=void 0,!(O||T?.committed!==true)&&ie();},Yt);}function be(){let e=f.value,n=T;if(F||e===null||n===void 0||O)return;let i=n.visualOffset;if(Math.abs(i)<=Ae){n.committed=true,Ve();return}let b=Math.max(0,e.scrollHeight-e.clientHeight),A=Math.min(b,Math.max(0,e.scrollTop-i));if(Te(A),e.scrollTop=A,Math.abs(e.scrollTop-A)>Ae){K=void 0,n.committed=false,n.attempts+=1,n.attempts<$t?r():(ie(),K=void 0,o$1=e.scrollTop);return}ye(0),o$1=e.scrollTop,n.expectedOffset=me()??n.expectedOffset,n.committed=true,n.attempts=0,Ve();}function r(){g$1!==void 0&&clearTimeout(g$1),g$1=setTimeout(()=>{g$1=void 0,be();},It);}function d(e){e!==void 0&&(T===void 0&&(T={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),pe(),!O&&be());}function p$1(e){let n=f.value;if(n===null||e===void 0)return;let i=n.getBoundingClientRect(),b=q(e,$(),{top:i.top,bottom:i.bottom});if(b!==void 0){let A=Math.max(0,n.scrollHeight-n.clientHeight),E=Math.min(A,Math.max(0,n.scrollTop+b));Te(E),n.scrollTop=E,o$1=n.scrollTop;}}function w(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function P(){K?.behavior==="smooth"&&(K=void 0),U=false,O||(O=true,L+=1),k!==void 0&&(clearTimeout(k),k=void 0);}function x(){let e=f.value;X||L===ee||e===null||(T!==void 0&&ie(),X=true,e.scrollTop<=w()&&fe()&&xe());}function G(){k!==void 0&&(clearTimeout(k),k=void 0),ie(),O=false,U=false,Y=false,te=void 0,c=void 0,L+=1,ee=-1,X=true,q$1=false,s=false,K=void 0;}function ge(){Y||(k!==void 0&&(clearTimeout(k),k=void 0),O=false,U=false,T!==void 0&&(T.attempts=0),be());}function J(){Y||(k!==void 0&&clearTimeout(k),k=setTimeout(()=>{k=void 0,ge();},It));}function Ie(){K=void 0,ge();}function le(e){Y=true,P(),te=e.touches?.[0]?.clientY;}function ve(e){let n=e.touches?.[0]?.clientY;n!==void 0&&(te!==void 0&&n>te&&x(),te=n);}function we(){Y=false,te=void 0,J();}function $e(e){P(),e.deltaY<0&&x(),J();}function Xe(e){e.pointerType!=="touch"&&(P(),c=e.clientY,J());}function Je(e){e.pointerType==="touch"||!O||c===void 0||(e.clientY<c&&x(),c=e.clientY,J());}function Ce(e){e.pointerType!=="touch"&&(c=void 0,J());}function Qe(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(P(),(e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey)&&x(),J());}function Be(e="auto"){let n=f.value;if(n===null)return;ie();let i=Math.max(0,n.scrollHeight-n.clientHeight);Te(i,e),n.scrollTo?.({top:i,behavior:e}),n.scrollTop!==i&&(n.scrollTop=i),o$1=n.scrollTop,_.clear(),oe();}function Ze(){let e=f.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function Rt(){let e=f.value;return Ze()&&e!==null&&e.scrollHeight>e.clientHeight+1}function St(e,n={}){let i=f.value,b=M.get(e);if(i===null||b===void 0||!i.contains(b)||i.clientHeight<=0)return false;ie();let A=i.getBoundingClientRect(),E=b.getBoundingClientRect(),j$1=n.block??"center",Z;j$1==="start"?Z=i.scrollTop+E.top-A.top:j$1==="end"?Z=i.scrollTop+E.bottom-A.bottom:j$1==="nearest"?E.top>=A.top&&E.bottom<=A.bottom?Z=i.scrollTop:E.top<A.top?Z=i.scrollTop+E.top-A.top:Z=i.scrollTop+E.bottom-A.bottom:Z=j({currentScrollTop:i.scrollTop,scrollHeight:i.scrollHeight,targetHeight:E.height,targetTop:E.top,viewportHeight:i.clientHeight,viewportTop:A.top});let ke=Math.max(0,i.scrollHeight-i.clientHeight),he=Math.min(ke,Math.max(0,Z)),Me=n.behavior??"auto";return Te(he,Me),i.scrollTo?.({top:he,behavior:Me}),i.scrollTop!==he&&(i.scrollTop=he),o$1=i.scrollTop,oe(),true}function Pt(){_.clear();}function At(){s=true,v.value=false;}function Et(){s=false,ae();}function Ot(e,n){let i=M.get(e);if(i!==void 0&&i!==n&&(S?.unobserve(i),H?.unobserve?.(i),m$1.delete(i),I.delete(e)),n===null){M.delete(e),I.delete(e);return}M.set(e,n),m$1.set(n,e),S?.observe(n),H?.observe(n),ae();}function xt(e,n,i){let b=R.get(e);if(i===null){R.delete(e);return}R.set(e,{element:i,label:n}),W===e&&i.style.setProperty("opacity",String(Q)),b?.element!==i&&(i.dataset.imThreadDateSeparator=e);}return provide(je,{registerMessageNode:Ot,registerDateNode:xt}),watch(()=>t.contentKey,(e,n)=>{if(e===n)return;G();let i=f.value;i!==null&&(o$1=i.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,n)=>{let i=f.value;if(i===null)return;let b=new Set(n);n.length>0&&e.length>0&&!e.some(Ne=>b.has(Ne))&&G();let E=i.getBoundingClientRect(),j=p(y,$(),{top:E.top,bottom:E.bottom}),Z=v.value,ke=n[n.length-1],he=ke===void 0?-1:e.indexOf(ke),Me=he<0?[]:e.slice(he+1).filter(Ne=>!b.has(Ne)),Vt=s||t.loadingNewer;if(await nextTick(),F)return;let et=n[0];if(et!==void 0&&e.indexOf(et)>0&&(q$1=false,d(j)),Me.length>0){if(Vt){s=false,T===void 0&&p$1(j),v.value=false,ae();return}(Z||Me.some(Ct=>t.shouldFollowAppendedMessage?.(Ct)===true))&&t.followNewMessages?Be():_.add(Me);}ae();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,n)=>{e||!n||!s||ne(()=>{t.loadingNewer||(s=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,n)=>{e||!n||!q$1||ne(()=>{t.loadingOlder||(q$1=false);});},{flush:"pre"}),onMounted(()=>{let e=f.value;if(e!==null){if(o$1=e.scrollTop,e.addEventListener("scroll",se,{passive:true}),e.addEventListener("scrollend",Ie,{passive:true}),e.addEventListener("touchstart",le,{passive:true}),e.addEventListener("touchmove",ve,{passive:true}),e.addEventListener("touchend",we,{passive:true}),e.addEventListener("touchcancel",we,{passive:true}),e.addEventListener("wheel",$e,{passive:true}),e.addEventListener("pointerdown",Xe,{passive:true}),e.addEventListener("pointermove",Je,{passive:true}),e.addEventListener("pointerup",Ce,{passive:true}),e.addEventListener("pointercancel",Ce,{passive:true}),e.addEventListener("keydown",Qe),typeof globalThis.ResizeObserver=="function"){H=new globalThis.ResizeObserver(()=>{let n=y;ne(()=>{f.value!==null&&(T!==void 0?(pe(),O||r()):s||t.loadingNewer?p$1(n):t.resizeFollowEnabled&&v.value?Be():p$1(n),oe());});}),H.observe(e);for(let n of M.values())H.observe(n);}if(typeof globalThis.IntersectionObserver=="function"){S=new globalThis.IntersectionObserver(n=>{for(let i of n){let b=m$1.get(i.target);b!==void 0&&(i.isIntersecting?I.add(b):I.delete(b));}D=true,ae();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let n of M.values())S.observe(n);}ae();}}),onBeforeUnmount(()=>{F=true;let e=f.value;e!==null&&e.removeEventListener("scroll",se),e!==null&&(e.removeEventListener("scrollend",Ie),e.removeEventListener("touchstart",le),e.removeEventListener("touchmove",ve),e.removeEventListener("touchend",we),e.removeEventListener("touchcancel",we),e.removeEventListener("wheel",$e),e.removeEventListener("pointerdown",Xe),e.removeEventListener("pointermove",Je),e.removeEventListener("pointerup",Ce),e.removeEventListener("pointercancel",Ce),e.removeEventListener("keydown",Qe)),k!==void 0&&clearTimeout(k),ie(),He(),H?.disconnect(),S?.disconnect(),Se(),M.clear(),m$1.clear(),I.clear(),R.clear(),_.clear();}),h({getViewportElement:()=>f.value,clearNewMessageBadge:Pt,clearActiveDate:Se,isAtBottom:computed(()=>v.value),isMeasurable:Ze,isScrollable:Rt,newMessageCount:computed(()=>N.value),prepareHistoryPageAppend:At,cancelHistoryPageAppend:Et,trackRemoteMessageIds:(e,n)=>_.trackRemote(e,n),scrollToLatest:Be,scrollToMessage:St,focusViewport:()=>f.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:f,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:V,"data-im-thread-viewport-content":""},u.default?.())])}});var wt=Symbol("ImThreadSurfaceContext");function Qt(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 Zt(t){provide(wt,t);}function Ge(){let t=inject(wt);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var ze=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),We=Object.freeze({enabled:true,maxFillPages:8}),rr=8,nr=160;function or(t,a){return t?.conversationType===a.conversationType&&t.conversationId===a.conversationId}var ir=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:a,slots:h}){let u=t.context??Ge(),f=ref(null),V=ref(0),M=ref(true),m=[],I,R=0,o=0,l=null,y="",H="",S="",D=false,B=false,C=ref(false),F=ref(""),K=ref(false),W,Q,s=computed(()=>u.getState()),q=computed(()=>s.value.pageVisible??u.isPageVisible?.()??true),X=computed(()=>s.value.pageEngaged??u.isPageEngaged?.()??true),O=computed(()=>or(s.value.activeConversation,t.conversation)),U=computed(()=>({...ze,...t.viewportOptions})),Y=computed(()=>{let r=t.initialViewportOptions.maxFillPages??We.maxFillPages;return {enabled:t.initialViewportOptions.enabled??We.enabled,maxFillPages:Number.isFinite(r)?Math.max(0,Math.floor(r)):We.maxFillPages}}),L=computed(()=>!O.value||!s.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ee=computed(()=>O.value?i({messages:s.value.messages,entryUnread:s.value.entryUnread,formatDate:u.formatDate,leadingItems:u.leadingItems?.(),beforeMessageItems:u.beforeMessageItems}):[]),k=computed(()=>ee.value.flatMap(r=>r.kind==="message"||r.kind==="system"?[r.message.id]:[]));function te(){W!==void 0&&(clearTimeout(W),W=void 0),Q!==void 0&&(clearTimeout(Q),Q=void 0);}function c(r=false){if(te(),K.value=false,r){f.value?.clearActiveDate(),F.value="";return}Q=setTimeout(()=>{Q=void 0,!K.value&&(f.value?.clearActiveDate(),F.value="");},nr);}function T(r){if(r===null){c();return}te(),F.value=r.label,K.value=true;let d=U.value.activeDateIdleDelay,p=Number.isFinite(d)?Math.max(0,d):ze.activeDateIdleDelay;W=setTimeout(()=>{W=void 0,c();},p);}async function g(r,d){t.hooks?.beforeAction?.(r);try{let p=await d();return t.hooks?.afterAction?.(r,p),p}catch(p){throw t.hooks?.onError?.(r,p),p}}function v(){return !O.value||s.value.loading||!s.value.hasOlder?Promise.resolve(0):g({kind:"load-older"},()=>u.actions.loadOlder())}function N(){let r=u.actions.loadNewer,d=s.value.loadingNewer??s.value.loading;return !O.value||d||!s.value.hasNewer||r===void 0?Promise.resolve(0):g({kind:"load-newer"},()=>r())}async function _(r){for(let d=0;d<rr;d+=1){if(!O.value)return;let p=r==="older"?s.value.hasOlder:s.value.hasNewer,w=r==="older"?s.value.olderError:s.value.newerError;if(!p||w!==null||(r==="older"?await v():await N())>0)return;let x=r==="older"?s.value.hasOlder:s.value.hasNewer,G=r==="older"?s.value.olderError:s.value.newerError;if(!x||G!==null)return}}async function z(){return !O.value||u.actions.loadNewer===void 0?0:g({kind:"load-newer"},()=>u.actions.retryNewer?.()??u.actions.loadNewer?.({force:!0})??Promise.resolve(0))}async function $(){if(!O.value)return 0;let r=L.value;S="";let d;try{d=await g({kind:"retry-older"},()=>u.actions.retryOlder?.()??u.actions.loadOlder({force:!0}));}catch(p){throw L.value===r&&(S=r),p}return C.value||(l=null,me()),d}async function Ee(){if(!O.value)return false;let r=await g({kind:"jump-to-latest"},()=>u.actions.jumpToLatest?.()??Promise.resolve(!s.value.isHistoryWindow));return r&&(await nextTick(),f.value?.scrollToLatest()),r}function Se(r){M.value=r.isAtBottom,V.value=r.newMessageCount,me();}function Oe(r,d){return f.value?.scrollToMessage(r,d)??false}function oe(r,d){return !B&&o===d&&L.value===r&&O.value}async function ne(r,d,p,w){for(let P=0;P<60;P+=1){if(!oe(r,d))return false;if(Oe(p,w))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}async function He(r,d,p){let w=f.value;if(w===null||!w.isMeasurable()||w.isScrollable())return true;let P=0,x=!s.value.hasOlder,G=!s.value.hasNewer||u.actions.loadNewer===void 0,ge=async()=>(await nextTick(),await nextTick(),ne(r,d,p,{behavior:"auto",block:"center"})),J=async le=>{if(!oe(r,d)||P>=Y.value.maxFillPages)return false;let ve=0;if(le==="older"){if(x||!s.value.hasOlder)return false;ve=await v(),x=!s.value.hasOlder;}else {if(G||!s.value.hasNewer)return false;w.prepareHistoryPageAppend();try{ve=await N();}catch(we){throw w.cancelHistoryPageAppend(),we}ve<=0&&!s.value.hasNewer&&w.cancelHistoryPageAppend(),G=!s.value.hasNewer;}return P+=1,ve>0?ge():!(le==="older"?x:G)};!x&&!await J("older")&&(x=true),!G&&!await J("newer")&&(G=true);let Ie="older";for(;oe(r,d)&&P<Y.value.maxFillPages&&w.isMeasurable()&&!w.isScrollable()&&(!x||!G);){let le=Ie==="older"?x?"newer":"older":G?"older":"newer";Ie=le==="older"?"newer":"older",await J(le)||(le==="older"?x=true:G=true);}return oe(r,d)}async function ae(r,d={behavior:"auto",block:"center"}){if(!O.value||r==="")return false;let p=L.value,w=++o;if(!k.value.includes(r)){let G=u.actions.loadAround;if(G===void 0||!await g({kind:"locate-message",messageId:r},()=>G(r))||!oe(p,w))return false}return !await ne(p,w,r,{...d,behavior:"auto"})||!await He(p,w,r)?false:ne(p,w,r,d)}function Pe(){I!==void 0&&(clearTimeout(I),I=void 0);}function fe(){if(Pe(),!C.value)return;let r=t.readActions;if(r===void 0||m.length===0)return;let d=Number.isFinite(U.value.visibleReadDelay)?Math.max(0,U.value.visibleReadDelay):ze.visibleReadDelay;I=setTimeout(()=>{if(I=void 0,!O.value||!X.value)return;let p=m[m.length-1];if(p===void 0)return;let w=r.resolveTarget===void 0?p:r.resolveTarget(p);w!=null&&Promise.resolve(r.markRead(w)).catch(P=>{t.hooks?.onError?.({kind:"visible-range",messageIds:m},P);});},d);}function xe(r){m=Object.freeze([...r]);let d={kind:"visible-range",messageIds:m};t.hooks?.beforeAction?.(d);try{u.actions.onVisibleRange?.(m),t.hooks?.afterAction?.(d,void 0);}catch(p){throw t.hooks?.onError?.(d,p),p}C.value?fe():me();}function se(r,d){return !B&&R===d&&L.value===r&&!D}function Te(r,d){se(r,d)&&(y=r,H=ye(s.value.entryUnread),C.value=true,fe());}function ye(r){return r.state!=="located"?r.state:`${r.state}:${r.firstMessageId}`}async function ie(r,d,p){for(let w=0;w<60;w+=1){if(!se(r,d))return false;if(f.value?.scrollToMessage(p,{behavior:"auto",block:"center"})===true)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}function me(){let r=L.value,d=ye(s.value.entryUnread);if(r===""||s.value.loading||s.value.error!==null||y===r&&(H===d||D)||S===r||l!==null)return;if(!Y.value.enabled){y=r,H=d,C.value=true,fe();return}let p=++R;D=false,C.value=false;let w=(async()=>{if(await nextTick(),!se(r,p))return;let P=f.value;if(P===null||!P.isMeasurable())return;let x=s.value.entryUnread;if(x.state==="located"&&!k.value.includes(x.firstMessageId))return;let G=x.state==="located"?await ie(r,p,x.firstMessageId):false;if(x.state==="located"&&!G)return;G||P.scrollToLatest();let ge=0;for(;se(r,p)&&ge<Y.value.maxFillPages&&s.value.hasOlder&&P.isMeasurable()&&!P.isScrollable();)if(await v(),!se(r,p)||(ge+=1,await nextTick(),await nextTick(),!P.isMeasurable()))return;if(!se(r,p)||!P.isMeasurable())return;let J=s.value.entryUnread;if(J.state==="located"){if(!k.value.includes(J.firstMessageId)||!await ie(r,p,J.firstMessageId))return}else P.scrollToLatest();await nextTick(),Te(r,p);})().catch(()=>{L.value===r&&(S=r);}).finally(()=>{l===w&&(l=null);});l=w;}function pe(r){R+=1,l=null,D=false,C.value=r,(y="",H="",S=""),Pe();}function Ve(){if(C.value)return;let r=L.value;D=true,R+=1,l=null,y=r,C.value=true,fe();}let be=Object.freeze({getViewportElement:()=>f.value?.getViewportElement()??null,loadOlder:v,retryOlder:$,loadNewer:N,retryNewer:z,jumpToLatest:Ee,scrollToMessage:Oe,locateMessage:ae,focusViewport:()=>f.value?.focusViewport()});return a(be),watch(X,r=>{r&&C.value?fe():Pe();}),watch([()=>s.value.activeRemoteMessageRevision??0,f,L],()=>{let r=f.value;if(r===null||!O.value)return;let d=u.actions.drainActiveRemoteMessageIds?.()??[];r.trackRemoteMessageIds(d,{isAtBottom:M.value,isHistoryWindow:s.value.isHistoryWindow,isPageVisible:q.value})&&(M.value=false);},{flush:"post"}),watch([L,()=>s.value.loading,()=>s.value.error,()=>k.value.length,()=>s.value.hasOlder,()=>ye(s.value.entryUnread),Y],([r,d,p,,,w],[P,,,,,x])=>{if(r!==P&&(o+=1,pe(false),c(true),f.value?.clearNewMessageBadge(),V.value=0,M.value=true),r!==""&&r===P&&w!==x&&!D&&w.startsWith("located:")&&(y="",H="",C.value=false),r===""||p!==null){pe(false);return}d||me();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{B=true,o+=1,pe(false),c(true);}),()=>{let r={conversation:t.conversation,state:s.value,items:ee.value,actions:be},d=[h.header?.(r),h["before-list"]?.(r)];if(!O.value)d.push(h.unsupported?.(r)??h$1("div",{"data-im-thread-unsupported":""}));else if(!s.value.ready&&s.value.loading)d.push(h.loading?.(r)??h$1("div",{"data-im-thread-loading":""}));else if(s.value.error!==null&&s.value.messages.length===0)d.push(h.error?.(r)??h$1("div",{"data-im-thread-error":""}));else if(s.value.ready&&s.value.messages.length===0&&!s.value.hasOlder)d.push(h.empty?.(r)??h$1("div",{"data-im-thread-empty":""}));else {let p=h$1(Ue,{ref:f,messageIds:k.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:U.value.followThreshold,olderPrefetchThreshold:U.value.olderPrefetchThreshold,visibleMargin:U.value.visibleMargin,activeDateOffset:U.value.activeDateOffset,activeDateEnabled:h["active-date"]!==void 0,resizeFollowEnabled:C.value,followNewMessages:q.value,shouldFollowAppendedMessage:w=>{let P=s.value.messages.find(x=>x.id===w);return P===void 0?false:u.shouldFollowMessage?.(P)===true},onReachStart:()=>{_("older").catch(()=>{});},onReachEnd:()=>{_("newer").catch(()=>{});},onSettled:Se,onUserScroll:Ve,onActiveDateChange:T,onVisibleRange:xe,onNewMessageCount:w=>{V.value=w;}},{default:()=>[h["viewport-before"]?.(r),h$1(Ke,{items:ee.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:h.item,"date-separator":h["date-separator"],"entry-unread":h["entry-unread"],encryption:h.encryption,system:h.system,message:h.message,"recalled-message":h["recalled-message"],"deleted-message":h["deleted-message"],"unsupported-body":h["unsupported-body"]}),h["viewport-after"]?.(r)]});d.push(h$1("div",{"data-im-thread-viewport-shell":""},[h["active-date"]?.({label:F.value,visible:K.value&&F.value!==""}),p])),s.value.error!==null&&d.push(h.error?.(r)??h$1("div",{"data-im-thread-error":""}));}return d.push(h["after-list"]?.(r),h["jump-to-latest"]?.({...r,count:V.value,visible:!M.value||s.value.isHistoryWindow}),h["context-menu"]?.(r),h.composer?.(r)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},d)}}});function ar(t){let a=new Map;for(let u of t){if(a.has(u.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${u.kind}`);a.set(u.kind,u.component);}let h=Object.freeze([...a.keys()]);return Object.freeze({kinds:h,resolve:u=>a.get(u)})}var lr=140,dr=120;function Mt(t,a){if(t.width<=0||t.height<=0)return 0;let h=Math.max(0,Math.min(t.right,a.right)-Math.max(t.left,a.left)),u=Math.max(0,Math.min(t.bottom,a.bottom)-Math.max(t.top,a.top));return Math.min(1,h*u/(t.width*t.height))}function ur(t,a){return {x:t.x,y:t.top-a,top:t.top-a,bottom:t.bottom+a,left:t.left,right:t.right,width:t.width,height:t.height+a*2,toJSON:()=>({})}}function Ye(t){let a=Math.max(0,t.scrollIdleMs??lr),h=Math.max(0,t.visibilityDwellMs??dr),u=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),f=Math.max(0,t.revealMarginPx??0),V=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),M=new Map,m=new Map,I=reactive(new Set),R=new Set,o=new Set,l=null,y=null,H=null,S=false,D=false,B=false,C,F;function K(){C!==void 0&&clearTimeout(C),C=void 0;}function W(){F!==void 0&&clearTimeout(F),F=void 0;}function Q(c=false){if(!c&&y!==null||l===null)return;let T=l.getBoundingClientRect(),g=ur(T,f);for(let[v,N]of M){let _=v.getBoundingClientRect();N.ratio=Mt(_,T),N.intersecting=N.ratio>0,N.revealIntersecting=f>0?Mt(_,g)>0:N.intersecting&&N.ratio>=u;}}function s(c){return c.intersecting&&c.ratio>=u}function q(){for(let c of M.values())!c.revealIntersecting||I.has(c.key)||(I.add(c.key),t.onRevealed?.(c.item));}function X(c){let T=new Set(c.map(v=>v.key));if(T.size!==o.size||[...T].some(v=>!o.has(v))){o.clear();for(let v of T)o.add(v);t.onSettledVisibleChange?.(c.map(v=>v.item));}}function O(){if(D||S)return;Q(),q();let c=l?.getBoundingClientRect(),T=c===void 0?0:(c.top+c.bottom)/2,g=[...M.entries()].filter(([,v])=>s(v)).sort(([v],[N])=>{let _=v.getBoundingClientRect(),z=N.getBoundingClientRect();return Math.abs((_.top+_.bottom)/2-T)-Math.abs((z.top+z.bottom)/2-T)}).slice(0,V).map(([,v])=>v);X(g);for(let v of g)R.has(v.key)||(R.add(v.key),t.onActivated?.(v.item));}function U(){D||S||(W(),F=setTimeout(()=>{F=void 0,O();},h));}function Y(){D||(L(true),Q(),q(),X([]),W(),K(),C=setTimeout(()=>{C=void 0,L(false),U();},a));}function L(c){S!==c&&(S=c,t.onScrollingChange?.(c));}function ee(){l?.removeEventListener("scroll",Y),y?.disconnect(),H?.disconnect(),y=null,H=null,l=null;}function k(c=true){if(D)return;let T=t.getRoot();if(!(T===l&&l!==null)){if(ee(),l=T,l===null){c&&!B&&(B=true,Promise.resolve().then(()=>{B=false,D||(k(false),U());}));return}if(l.addEventListener("scroll",Y,{passive:true}),typeof IntersectionObserver<"u"){y=new IntersectionObserver(g=>{for(let v of g){let N=M.get(v.target);N!==void 0&&(N.intersecting=v.isIntersecting,N.ratio=v.intersectionRatio,f===0&&(N.revealIntersecting=v.isIntersecting&&v.intersectionRatio>=u));}q(),U();},{root:l,threshold:[0,u,1]}),f>0&&(H=new IntersectionObserver(g=>{for(let v of g){let N=M.get(v.target);N!==void 0&&(N.revealIntersecting=v.isIntersecting);}q();},{root:l,rootMargin:`${f}px 0px`,threshold:0}));for(let g of M.keys())y.observe(g);for(let g of M.keys())H?.observe(g);}else Q(),q();}}function te(c){I.delete(c),R.delete(c),o.delete(c);}return {register(c,T){if(D)return;let g=t.getKey(c),v=I.has(g),N=R.has(g),_=T===null?void 0:M.get(T);_!==void 0&&_.key!==g&&(m.delete(_.key),M.delete(T),te(_.key));let z=m.get(g);if(z!==void 0&&z!==T&&(y?.unobserve(z),H?.unobserve(z),M.delete(z),m.delete(g)),T===null){z!==void 0&&(y?.unobserve(z),H?.unobserve(z),M.delete(z),m.delete(g)),te(g);return}let $=M.get(T);if($?.key===g&&$.item===c){k();return}M.set(T,{item:c,key:g,intersecting:$?.key===g?$.intersecting:false,ratio:$?.key===g?$.ratio:0,revealIntersecting:$?.key===g?$.revealIntersecting:false}),m.set(g,T),k(),y?.observe(T),H?.observe(T),Q(true),q(),v&&t.onRevealed?.(c),N?t.onActivated?.(c):U();},isRevealed:c=>I.has(t.getKey(c)),isActivated:c=>R.has(t.getKey(c)),isSettledVisible:c=>o.has(t.getKey(c)),isScrolling:()=>S,notifyScroll:Y,refresh(){k(),Q(true),q(),U();},reset(){K(),W(),L(false),X([]),ee(),M.clear(),m.clear(),I.clear(),R.clear();},dispose(){D||(K(),W(),L(false),X([]),ee(),M.clear(),m.clear(),I.clear(),R.clear(),D=true);}}}function cr(t){let a=new Map,h=new Map,u=false,f=m=>{let I=a.get(m.channel);return I===void 0?m.channel:`${m.channel}\0${I.getKey(m.item)}`},V=Ye({getRoot:t.getRoot,getKey:f,revealMarginPx:t.revealMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:m=>{for(let I of a.values())I.onScrollingChange?.(m);},onRevealed:m=>a.get(m.channel)?.onRevealed?.(m.item),onActivated:m=>a.get(m.channel)?.onActivated?.(m.item),onSettledVisibleChange:m=>{for(let[I,R]of a){let o=m.filter(y=>y.channel===I).map(y=>y.item),l=R.maxSettledVisible===void 0?o:o.slice(0,R.maxSettledVisible);R.onSettledVisibleChange?.(l);}}});function M(m){return I=>{if(u)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(a.has(m))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${m}`);a.set(m,I);let R=new Map;h.set(m,R);let o=false,l=S=>({channel:m,item:S});function y(){for(let S of R.values())V.register(S.target,null);R.clear(),I.onScrollingChange?.(false),I.onSettledVisibleChange?.([]);}return {register(S,D){if(o||u)return;let B=I.getKey(S),C=R.get(B);if(D===null){C!==void 0&&(V.register(C.target,null),R.delete(B));return}let F=l(S);R.set(B,{target:F,element:D}),V.register(F,D);},isRevealed:S=>V.isRevealed(l(S)),isActivated:S=>V.isActivated(l(S)),isSettledVisible:S=>V.isSettledVisible(l(S)),isScrolling:V.isScrolling,notifyScroll:V.notifyScroll,refresh:V.refresh,reset:y,dispose(){o||(y(),o=true,a.delete(m),h.delete(m));}}}}return {createFactory:M,refresh:V.refresh,dispose(){if(!u){for(let m of h.values())for(let I of m.values())V.register(I.target,null);h.clear(),a.clear(),V.dispose(),u=true;}}}}export{_e as ImThreadBodySwitch,Ke as ImThreadItems,ir as ImThreadSurface,Ue as ImThreadViewport,Qt as createImThreadSurfaceContext,ar as createMessageRendererRegistry,cr as createThreadVisibilityTargetGroup,Ye as createThreadVisibilityTargets,Zt as provideImThreadSurfaceContext,kt as useImText,Ge as useImThreadSurfaceContext,Lt as useOptionalImThreadReadActions};
@@ -6465,7 +6465,7 @@ declare function loadImageObjectUrl(runtime: ChatRuntime, message: ImMessageView
6465
6465
  * 仅读取 SDK 已持久化的图片明文资产并创建 object URL。
6466
6466
  *
6467
6467
  * 未缓存、类型不匹配、账号切换或缓存读取失败都返回 `null`;该入口永不触发网络下载,也不显示用户提示,
6468
- * 供消息气泡在刷新或切回会话后后台恢复高清源。
6468
+ * 供用户打开图片预览时优先复用已持久化的明文资源。
6469
6469
  */
6470
6470
  declare function loadCachedImageObjectUrl(runtime: ChatRuntime, message: ImMessageView): Promise<string | null>;
6471
6471
  /**
package/dist/index.d.ts CHANGED
@@ -7368,7 +7368,7 @@ declare function loadImageObjectUrl(runtime: ChatRuntime, message: ImMessageView
7368
7368
  * 仅读取 SDK 已持久化的图片明文资产并创建 object URL。
7369
7369
  *
7370
7370
  * 未缓存、类型不匹配、账号切换或缓存读取失败都返回 `null`;该入口永不触发网络下载,也不显示用户提示,
7371
- * 供消息气泡在刷新或切回会话后后台恢复高清源。
7371
+ * 供用户打开图片预览时优先复用已持久化的明文资源。
7372
7372
  */
7373
7373
  declare function loadCachedImageObjectUrl(runtime: ChatRuntime, message: ImMessageView): Promise<string | null>;
7374
7374
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "k2-im",
3
3
  "type": "module",
4
- "version": "0.1.9",
4
+ "version": "0.1.10",
5
5
  "private": false,
6
6
  "license": "MIT",
7
7
  "publishConfig": {