k2-im 0.1.43 → 0.1.45

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.
@@ -26,8 +26,8 @@ interface ConversationRef<TType extends ConversationType = ConversationType> {
26
26
  }
27
27
  /** 当前支持持久化草稿的会话类型;`supergroup` 必须继续 fail-fast。 */
28
28
  type DraftConversationType = Exclude<ConversationType, 'supergroup'>;
29
- /** 消息内容类型。sticker=表情/贴图(BMessage contentType=7);call=单聊通话记录(contentType=10);transfer=转账(contentType=16);gift=礼品/刮刮卡(contentType=17);robot=机器人卡片(contentType=18);miniProgram=小程序分享卡(contentType=22);redPacket=红包卡(contentType=25);game=小游戏(contentType=27);未知 wire 正文统一归一为 unknown。 */
30
- type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'gift' | 'call' | 'redPacket' | 'mediaAlbum' | 'filesAlbum' | 'robot' | 'unknown';
29
+ /** 消息内容类型。sticker=表情/贴图(BMessage contentType=7);call=单聊通话记录(contentType=10);transfer=转账(contentType=16);gift=礼品/刮刮卡(contentType=17);robot=机器人卡片(contentType=18);miniProgram=小程序分享卡(contentType=22);redPacket=红包卡(contentType=25);game=小游戏(contentType=27);liveRoom=直播间分享(contentType=30);未知 wire 正文统一归一为 unknown。 */
30
+ type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'gift' | 'call' | 'redPacket' | 'mediaAlbum' | 'filesAlbum' | 'robot' | 'liveRoom' | 'unknown';
31
31
  /**
32
32
  * 发送态(客户端态):消息从本地创建到服务端确认的生命周期。
33
33
  * `uploading` 仅媒体消息使用:文件上传阶段(uploading→pending→sending→sent);
@@ -98,6 +98,8 @@ type LastMessageSummary = {
98
98
  kind: 'transfer';
99
99
  } | {
100
100
  kind: 'gift';
101
+ } | {
102
+ kind: 'liveRoom';
101
103
  } | {
102
104
  kind: 'call';
103
105
  callKind: ImCallKind;
@@ -590,6 +592,40 @@ interface ImMediaAlbumBody {
590
592
  /** 媒体项,顺序即用户选择顺序(决定宫格 index 与首项朝向)。 */
591
593
  items: readonly ImMediaAlbumItem[];
592
594
  }
595
+ /** 直播间分享的直播类型。wire `liveType`:1 视频、2 语音、3 双手机、4 单手机录屏、5 语聊房。 */
596
+ type ImLiveRoomType = 'video' | 'voice' | 'dual-phone' | 'screen-record' | 'voice-chat';
597
+ /** 直播间分享的房间状态。wire `liveRoomStatus`:1 预告、2 直播中、3 已结束。 */
598
+ type ImLiveRoomStatus = 'preview' | 'live' | 'ended';
599
+ /**
600
+ * 直播间分享卡片正文(contentType==='liveRoom',协议 BMessage.contentType=30,fields 98-112)。
601
+ *
602
+ * @remarks 调用方先拿到直播间快照再写入本结构。Core 不请求直播接口,也不把缺省枚举猜成某一种直播。
603
+ * `uid` 是声网 SDK 初始化用的 UID,不是 IM 用户 id。
604
+ */
605
+ interface ImLiveRoomBody {
606
+ /** 直播间 ID(BMessage.liveRoomId)。 */
607
+ liveRoomId: string;
608
+ liveType: ImLiveRoomType;
609
+ liveRoomStatus: ImLiveRoomStatus;
610
+ /** 当前账号是否已关注主播。协议 bool 无法区分未设置,false 也是有效状态。 */
611
+ isFocus: boolean;
612
+ /** 当前账号是否已预约这场直播。 */
613
+ isReservation: boolean;
614
+ liveRecordId?: string;
615
+ /** 画面比例原文,例如 `16:9`。 */
616
+ screenRatio?: string;
617
+ broadcasterUserId?: string;
618
+ broadcasterUserName?: string;
619
+ /** 声网 SDK 初始化 UID(BMessage.uid)。 */
620
+ uid?: string;
621
+ liveCover?: string;
622
+ liveRoomName?: string;
623
+ /** 预告时间,秒级时间戳的十进制字符串。 */
624
+ livePreviewTime?: string;
625
+ livePreviewId?: string;
626
+ /** 直播间人数字符串,保持协议原文,不在 Core 换算。 */
627
+ liveRoomViewers?: string;
628
+ }
593
629
  interface ImMessageBody {
594
630
  /** P0 文本内容(明文,解密后的结果)。 */
595
631
  text?: string;
@@ -625,6 +661,8 @@ interface ImMessageBody {
625
661
  filesAlbum?: ImFilesAlbumBody;
626
662
  /** contentType==='robot' 时的机器人卡片。 */
627
663
  robot?: ImRobotBody;
664
+ /** contentType==='liveRoom' 时的直播间分享卡片。 */
665
+ liveRoom?: ImLiveRoomBody;
628
666
  /** contentType==='unknown' 时的稳定未知正文,不含原始 wire type。 */
629
667
  unknown?: UnknownMessageBody;
630
668
  }
@@ -2028,6 +2066,7 @@ interface ThreadVisibilityTargetGroup<TItem> {
2028
2066
  *
2029
2067
  * 同一通道只能创建一次;每个通道仍保留自己的 key 和回调,但底层共享一个 scroll listener
2030
2068
  * 与一组 IntersectionObserver,避免同一消息滚动根重复做可见性调度。
2069
+ * 多个通道可登记同一节点;注销其中一个通道不会移除其它通道的观察。
2031
2070
  */
2032
2071
  createFactory: (channel: string) => ThreadVisibilityTargetsFactory<TItem>;
2033
2072
  refresh: () => void;
@@ -1 +1 @@
1
- import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-7DZ5R7KR.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-TWSAZG5J.js';import'./chunk-DX6Q2DQD.js';import'./chunk-6FH2DBQE.js';import'./chunk-6WAB2ZRF.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 $t(t){let a=0,b=0;for(let c of t)c.kind==="video"?b+=1:a+=1;return {imageCount:a,videoCount:b}}function Xt(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,...a.body.filesAlbum===void 0?{}:{filesAlbum:{count:a.body.filesAlbum.items.length,caption:a.body.filesAlbum.caption}},...a.body.mediaAlbum===void 0?{}:{mediaAlbum:$t(a.body.mediaAlbum.items)}}),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 Nt=Symbol("ImThreadReadActions");function kt(t){provide(Nt,t);}function Zt(){return inject(Nt,void 0)}var at=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:b}){return kt(t.readActions),()=>{let c=h(t.message),m=t.rendererRegistry.resolve(c);return m!==void 0?h$1(m,{...a,message:t.message,presentation:t.presentation}):b["unsupported-body"]!==void 0?b["unsupported-body"]({kind:c,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":c,"aria-hidden":"true"})}}});var st=Symbol("ImThreadViewportRegistration");function Lt(){return inject(st,void 0)}var lt=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 b=Lt();function c(i,y){let k=Array.isArray(y)?y:[y];return k.length===1&&isVNode(k[0])?cloneVNode(k[0],{key:i}):h$1(Fragment,{key:i},k)}function m(i){return y=>{b?.registerMessageNode(i,y instanceof HTMLElement?y:null);}}function C(i,y){return k=>{b?.registerDateNode(i,y,k instanceof HTMLElement?k:null);}}function _(i){return a.encryption?.({item:i})??h$1("div",{"data-im-thread-encryption":i.key})}function p(i){let y=C(i.key,i.label);return a["date-separator"]?.({item:i,setElement:y})??h$1("div",{ref:y,"data-im-thread-date-separator":i.key},i.label)}function S(i){b?.registerEntryUnreadNode(i instanceof HTMLElement?i:null);}function I(i){return a["entry-unread"]?.({item:i,setElement:S})??h$1("div",{ref:S,"data-im-thread-entry-unread":i.key,...i.count===void 0?{}:{"data-count":String(i.count)}})}function O(i){let y=m(i.message.id);return a.item!==void 0?a.item({item:i,setElement:y}):a.message!==void 0?a.message({item:i,setElement:y}):i.message.deletedForEveryone!==void 0?a["deleted-message"]?.({item:i,setElement:y})??h$1("article",{ref:y,"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?a["recalled-message"]?.({item:i,setElement:y})??h$1("article",{ref:y,"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"&&a.system!==void 0?a.system({item:i,setElement:y}):h$1("article",{ref:y,"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(at,{message:i.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":a["unsupported-body"]===void 0?void 0:k=>a["unsupported-body"]?.(k)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(i=>{switch(i.kind){case "encryption":return a.item!==void 0?c(i.key,a.item({item:i})):c(i.key,_(i));case "date-separator":return a.item!==void 0?c(i.key,a.item({item:i,setElement:C(i.key,i.label)})):c(i.key,p(i));case "entry-unread":return a.item!==void 0?c(i.key,a.item({item:i,setElement:S})):c(i.key,I(i));case "system":case "message":return c(i.key,O(i))}return i}))}});var Bt=120,fn=500,Be=.5,mn=8;function dt(t){let a=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(a!==void 0&&Number.isFinite(a)&&a>0?a:1)}var ut=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:b,slots:c}){let m$1=ref(null),C$1=ref(null),_=new Map,p$1,S=new Map,I=new Set,O=new Map,i=0,y=[],k,E,P,B$1,L=false,q$1,te=new Set,D=false,W,$="",Z=1,j$1=false,ee=false,G=true,K=false,V=false,ne=false,X=0,ce=-1,oe=-1,o$1,J,ae,H,N,f=ref(true),w=ref(0),u=C(e=>{w.value=e,a("new-message-count",e);});function F(e){let r=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=r}function T(e=t.messageIds){return e.flatMap(r=>{let s=_.get(r);if(s===void 0)return [];let h=s.getBoundingClientRect(),M=s.querySelector("[data-im-thread-anchor-point]");return [{id:r,top:h.top,bottom:h.bottom,anchorTop:M?.getBoundingClientRect().top??h.top}]})}function re(e="",r=1){let s=Math.min(1,Math.max(0,r));$!==""&&$!==e&&O.get($)?.element.style.removeProperty("opacity"),$=e,Z=s,e!==""&&O.get(e)?.element.style.setProperty("opacity",String(s));}function A(){re();}function z$1(){let e=m$1.value;if(D||e===null||!t.activeDateEnabled)return;let r=[...O.entries()].filter(([,U])=>e.contains(U.element)).map(([U,x])=>{let fe=x.element.getBoundingClientRect();return {key:U,label:x.label,top:fe.top,height:fe.height}}).sort((U,x)=>U.top-x.top),s=e.getBoundingClientRect(),h=r.find(U=>U.height>0)?.height??28,M=g({markers:r,viewportTop:s.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:h});if(M===null){A(),a("active-date-change",null);return}re(M.inlineDateKey,M.inlineOpacity),a("active-date-change",M);}function ye(e){E={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Ee(e){let r=E;if(r===void 0)return false;let s=Math.max(0,e.scrollHeight-e.clientHeight);return s<r.scrollHeight-r.height&&r.scrollTop>s&&Math.abs(e.scrollTop-s)<=dt(e)}function Ue(e){return Ee(e)||W!==void 0&&(W.behavior==="smooth"||Math.abs(e.scrollTop-W.targetTop)<=dt(e))?0:e.scrollTop-i}function _e(e,r){r!==0&&(i=e.scrollTop-r,W=void 0,Q());}function qe(e,r){let s=Ue(e);if(H!==void 0)return H.expectedOffset-=s,Ie(),_e(e,s),K||je(),false;let h=E;if(h===void 0)return false;let M=k,U=M===void 0?void 0:T([M.id])[0],x=e.scrollTop-h.scrollTop,fe=Ee(e)?0:x,Se=M===void 0||U===void 0?0:(U.anchorTop??U.top)-r.top-M.offset+x;return h.scrollHeight!==e.scrollHeight||h.width!==e.clientWidth||h.height!==e.clientHeight||Math.abs(Se)>Be?(E=void 0,!j$1&&!t.loadingNewer&&!t.hasNewer&&t.resizeFollowEnabled&&f.value&&Math.abs(fe)<=Be?(le(),true):(M!==void 0&&xe({...M,offset:M.offset-fe}),_e(e,s),false)):false}function ke(){let e=m$1.value;if(D||e===null)return;let r=e.getBoundingClientRect();if(qe(e,r))return;let s=B$1!==void 0&&L?t.messageIds.filter(x=>I.has(x)):t.messageIds,h=T(s);if(B$1!==void 0&&L&&h.length===0){f.value=F(e);return}let M=h.filter(x=>B({viewportTop:r.top,viewportBottom:r.bottom,messageTop:x.top,messageBottom:x.bottom,margin:t.visibleMargin})).map(x=>x.id),U=M.length!==y.length||M.some((x,fe)=>y[fe]!==x);y=Object.freeze(M),k=o(h,{top:r.top,bottom:r.bottom}),ye(e),u.acknowledgeVisible(M),f.value=F(e),U&&a("visible-range",y),a("settled",{visibleMessageIds:y,...y.length===0?{}:{newestVisibleMessageId:y[y.length-1]},isAtBottom:f.value,newMessageCount:w.value});}function Ae(e){if(te.add(e),q$1!==void 0)return;let r=()=>{q$1=void 0;let s=[...te];te.clear(),s.forEach(h=>h());};typeof globalThis.requestAnimationFrame=="function"?q$1=globalThis.requestAnimationFrame(r):q$1=globalThis.setTimeout(r,0);}function We(){q$1!==void 0&&(typeof q$1=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(q$1):globalThis.clearTimeout(q$1),q$1=void 0,te.clear());}function Te(){Ae(ke);}function He(){let e=m$1.value;if(e===null)return;let r=e.getBoundingClientRect(),s=o(T(),{top:r.top,bottom:r.bottom});s!==void 0&&(k=s,ye(e));}function Le(){return G&&H===void 0&&!ee&&!t.loadingOlder}function Ge(){He(),G=false,ce=X,ee=true,a("reach-start"),Ae(()=>{t.loadingOlder||(ee=false);});}function ze(e){return t.hasNewer&&!j$1&&!t.loadingOlder&&!t.loadingNewer&&F(e)}function Ye(){j$1=true,f.value=false,oe=X,a("reach-end"),Ae(()=>{t.loadingNewer||(j$1=false);});}function Ve(){let e=m$1.value;e===null||X===oe||!ze(e)||Ye();}function Q(){let e=m$1.value;if(D||e===null)return;let r=e.scrollTop,s=Ee(e),h=W,M=false;if(h!==void 0){let x=Math.abs(r-h.targetTop)<=dt(e);M=h.behavior==="smooth"||x,(h.behavior!=="smooth"||x)&&(W=void 0);}!M&&!s&&!K&&H===void 0&&r!==i&&(K=true,V=true,X+=1);let U=K&&!M&&!s&&r!==i;if(U&&(a("user-scroll"),Ae(z$1)),K&&!ne&&ve(),!G&&V&&X!==ce&&r<i&&r>Ke()&&(G=true),H!==void 0&&!M)if(K){let x=Ce();x!==void 0&&(H.expectedOffset=x);}else Ie(),je();Le()&&U&&r>=0&&m({previousScrollTop:i,currentScrollTop:r,topThreshold:t.olderPrefetchThreshold})&&Ge(),U&&ze(e)&&z({previousScrollTop:i,currentScrollTop:r,isAtBottom:F(e),isHistoryWindow:t.hasNewer,isPageSettling:M})&&Ye(),i=r,Te();}function De(e,r="auto"){W={targetTop:e,behavior:r};}function $e(e){let r=H,s=C$1.value;if(!(r===void 0||s===null)){if(r.visualOffset=Math.abs(e)<=Be?0:e,r.visualOffset===0){s.style.removeProperty("transform"),s.style.removeProperty("will-change");return}s.style.setProperty("transform",`translate3d(0, ${r.visualOffset}px, 0)`),s.style.setProperty("will-change","transform");}}function be(){N!==void 0&&(clearTimeout(N),N=void 0),H!==void 0&&H.visualOffset!==0&&(k=void 0,E=void 0);let e=C$1.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),H=void 0,W=void 0;}function Ce(){let e=m$1.value,r=H;if(e===null||r===void 0)return;let s=T().find(h=>h.id===r.anchor.id);if(s!==void 0)return (s.anchorTop??s.top)-e.getBoundingClientRect().top}function Ie(){let e=H,r=Ce();if(e===void 0||r===void 0)return;let s=e.expectedOffset-r;Math.abs(s)<=Be||($e(e.visualOffset+s),e.committed=false,e.attempts=0);}function Xe(){N!==void 0&&clearTimeout(N),N=setTimeout(()=>{N=void 0,!(K||H?.committed!==true)&&be();},fn);}function ue(){let e=m$1.value,r=H;if(D||e===null||r===void 0||K)return;let s=r.visualOffset;if(Math.abs(s)<=Be){r.committed=true,Xe();return}let h=Math.max(0,e.scrollHeight-e.clientHeight),M=Math.min(h,Math.max(0,e.scrollTop-s));if(De(M),e.scrollTop=M,Math.abs(e.scrollTop-M)>Be){W=void 0,r.committed=false,r.attempts+=1,r.attempts<mn?je():(be(),W=void 0,i=e.scrollTop);return}$e(0),i=e.scrollTop,r.expectedOffset=Ce()??r.expectedOffset,r.committed=true,r.attempts=0,Xe();}function je(){N!==void 0&&clearTimeout(N),N=setTimeout(()=>{N=void 0,ue();},Bt);}function we(e){e!==void 0&&(H===void 0&&(H={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),Ie(),!K&&ue());}function xe(e){let r=m$1.value;if(r===null||e===void 0)return;let s=r.getBoundingClientRect(),h=q(e,T(),{top:s.top,bottom:s.bottom});if(h!==void 0){let M=Math.max(0,r.scrollHeight-r.clientHeight),U=Math.min(M,Math.max(0,r.scrollTop+h));De(U),r.scrollTop=U,i=r.scrollTop,E=void 0;}}function Ke(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function Me(){W?.behavior==="smooth"&&(W=void 0),V=false,K||(K=true,X+=1),o$1!==void 0&&(clearTimeout(o$1),o$1=void 0);}function se(){let e=m$1.value;e===null||X===ce||(H!==void 0&&be(),G=true,e.scrollTop<=Ke()&&Le()&&Ge());}function Re(){k=void 0,E=void 0,o$1!==void 0&&(clearTimeout(o$1),o$1=void 0),be(),K=false,V=false,ne=false,J=void 0,ae=void 0,X+=1,ce=-1,oe=-1,G=true,ee=false,j$1=false,W=void 0;}function Je(){ne||(o$1!==void 0&&(clearTimeout(o$1),o$1=void 0),K=false,V=false,H!==void 0&&(H.attempts=0),ue());}function ve(){ne||(o$1!==void 0&&clearTimeout(o$1),o$1=setTimeout(()=>{o$1=void 0,Je();},Bt));}function n(){W=void 0,Je();}function d(e){ne=true,Me(),J=e.touches?.[0]?.clientY;}function l(e){let r=e.touches?.[0]?.clientY;r!==void 0&&(J!==void 0&&r>J?se():J!==void 0&&r<J&&Ve(),J=r);}function g$1(){ne=false,J=void 0,ve();}function v(e){Me(),e.deltaY<0?se():e.deltaY>0&&Ve(),ve();}function R(e){e.pointerType!=="touch"&&(Me(),ae=e.clientY,ve());}function Y(e){e.pointerType==="touch"||!K||ae===void 0||(e.clientY<ae?se():e.clientY>ae&&Ve(),ae=e.clientY,ve());}function ie(e){e.pointerType!=="touch"&&(ae=void 0,ve());}function he(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(Me(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?se():Ve(),ve());}function le(e="auto"){let r=m$1.value;if(r===null)return;E=void 0,be();let s=Math.max(0,r.scrollHeight-r.clientHeight);De(s,e),r.scrollTo?.({top:s,behavior:e}),r.scrollTop!==s&&(r.scrollTop=s),i=r.scrollTop,u.clear(),L=false,ke();}function Ne(){let e=m$1.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function nt(){let e=m$1.value;return Ne()&&e!==null&&e.scrollHeight>e.clientHeight+1}function _t(e,r={}){return ht(_.get(e),r)}function ht(e,r){let s=m$1.value;if(s===null||e===void 0||!s.contains(e)||s.clientHeight<=0)return false;be();let h=s.getBoundingClientRect(),M=e.getBoundingClientRect(),U=r.block??"center",x;U==="start"?x=s.scrollTop+M.top-h.top:U==="end"?x=s.scrollTop+M.bottom-h.bottom:U==="nearest"?M.top>=h.top&&M.bottom<=h.bottom?x=s.scrollTop:M.top<h.top?x=s.scrollTop+M.top-h.top:x=s.scrollTop+M.bottom-h.bottom:x=j({currentScrollTop:s.scrollTop,scrollHeight:s.scrollHeight,targetHeight:M.height,targetTop:M.top,viewportHeight:s.clientHeight,viewportTop:h.top});let fe=Math.max(0,s.scrollHeight-s.clientHeight),Se=Math.min(fe,Math.max(0,x));E=void 0;let Fe=r.behavior??"auto";return De(Se,Fe),s.scrollTo?.({top:Se,behavior:Fe}),s.scrollTop!==Se&&(s.scrollTop=Se),i=s.scrollTop,L=false,ke(),true}function jt(){let e=m$1.value;if(e===null||p$1===void 0||!e.contains(p$1)||e.clientHeight<=0)return null;let r=p$1.getBoundingClientRect(),s=e.scrollTop+r.top-e.getBoundingClientRect().top+r.height/2,h=e.clientHeight/2;return {older:s<h-1,newer:e.scrollHeight-s<h-1}}function Kt(){u.clear();}function qt(){j$1=true,f.value=false;}function Wt(){j$1=false,Te();}function Gt(e,r){let s=_.get(e);if(s!==void 0&&s!==r&&(B$1?.unobserve(s),P?.unobserve?.(s),S.delete(s),I.delete(e)),r===null){_.delete(e),I.delete(e);return}_.set(e,r),S.set(r,e),B$1?.observe(r),P?.observe(r),Te();}function zt(e,r,s){let h=O.get(e);if(s===null){O.delete(e);return}O.set(e,{element:s,label:r}),$===e&&s.style.setProperty("opacity",String(Z)),h?.element!==s&&(s.dataset.imThreadDateSeparator=e);}return provide(st,{registerMessageNode:Gt,registerDateNode:zt,registerEntryUnreadNode:e=>{p$1=e??void 0;}}),watch(()=>t.contentKey,(e,r)=>{if(e===r)return;Re();let s=m$1.value;s!==null&&(i=s.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,r)=>{let s=m$1.value;if(s===null)return;let h=new Set(r);r.length>0&&e.length>0&&!e.some(Oe=>h.has(Oe))&&Re();let U=s.getBoundingClientRect(),x=p(k,T(),{top:U.top,bottom:U.bottom}),fe=f.value,Se=r[r.length-1],Fe=Se===void 0?-1:e.indexOf(Se),rt=Fe<0?[]:e.slice(Fe+1).filter(Oe=>!h.has(Oe)),pt=j$1||t.loadingNewer,Yt=e.length===r.length&&e.every(Oe=>h.has(Oe))&&e.some((Oe,ot)=>Oe!==r[ot]);if(await nextTick(),D)return;if(Yt&&fe&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!pt){le();return}let yt=r[0];if(yt!==void 0&&e.indexOf(yt)>0&&(ee=false,we(x)),rt.length>0){if(pt){j$1=false,H===void 0&&xe(x),f.value=false,Te();return}(fe||rt.some(ot=>t.shouldFollowAppendedMessage?.(ot)===true))&&t.followNewMessages?le():u.add(rt);}Te();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,r)=>{e||!r||!j$1||Ae(()=>{t.loadingNewer||(j$1=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,r)=>{e||!r||!ee||Ae(()=>{t.loadingOlder||(ee=false);});},{flush:"pre"}),onMounted(()=>{let e=m$1.value;if(e!==null){if(i=e.scrollTop,e.addEventListener("scroll",Q,{passive:true}),e.addEventListener("scrollend",n,{passive:true}),e.addEventListener("touchstart",d,{passive:true}),e.addEventListener("touchmove",l,{passive:true}),e.addEventListener("touchend",g$1,{passive:true}),e.addEventListener("touchcancel",g$1,{passive:true}),e.addEventListener("wheel",v,{passive:true}),e.addEventListener("pointerdown",R,{passive:true}),e.addEventListener("pointermove",Y,{passive:true}),e.addEventListener("pointerup",ie,{passive:true}),e.addEventListener("pointercancel",ie,{passive:true}),e.addEventListener("keydown",he),typeof globalThis.ResizeObserver=="function"){P=new globalThis.ResizeObserver(()=>{D||m$1.value===null||ke();}),P.observe(e),C$1.value!==null&&P.observe(C$1.value);for(let r of _.values())P.observe(r);}if(typeof globalThis.IntersectionObserver=="function"){B$1=new globalThis.IntersectionObserver(r=>{for(let s of r){let h=S.get(s.target);h!==void 0&&(s.isIntersecting?I.add(h):I.delete(h));}L=true,Te();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let r of _.values())B$1.observe(r);}Te();}}),onBeforeUnmount(()=>{D=true;let e=m$1.value;e!==null&&e.removeEventListener("scroll",Q),e!==null&&(e.removeEventListener("scrollend",n),e.removeEventListener("touchstart",d),e.removeEventListener("touchmove",l),e.removeEventListener("touchend",g$1),e.removeEventListener("touchcancel",g$1),e.removeEventListener("wheel",v),e.removeEventListener("pointerdown",R),e.removeEventListener("pointermove",Y),e.removeEventListener("pointerup",ie),e.removeEventListener("pointercancel",ie),e.removeEventListener("keydown",he)),o$1!==void 0&&clearTimeout(o$1),be(),We(),P?.disconnect(),B$1?.disconnect(),A(),p$1=void 0,_.clear(),S.clear(),I.clear(),O.clear(),u.clear();}),b({getViewportElement:()=>m$1.value,clearNewMessageBadge:Kt,clearActiveDate:A,isAtBottom:computed(()=>f.value),isMeasurable:Ne,isScrollable:nt,newMessageCount:computed(()=>w.value),prepareHistoryPageAppend:qt,cancelHistoryPageAppend:Wt,trackRemoteMessageIds:(e,r)=>u.trackRemote(e,r),scrollToLatest:le,scrollToMessage:_t,scrollToEntryUnread:()=>ht(p$1,{block:"center",behavior:"auto"}),getEntryUnreadCenteringNeeds:jt,focusViewport:()=>m$1.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:m$1,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:C$1,"data-im-thread-viewport-content":""},c.default?.())])}});var Ut=Symbol("ImThreadSurfaceContext");function hn(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 pn(t){provide(Ut,t);}function ct(){let t=inject(Ut);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var ft=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),mt=Object.freeze({enabled:true,maxFillPages:8}),bn=8,In=160;function wn(t,a){return t?.conversationType===a.conversationType&&t.conversationId===a.conversationId}var Mn=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:b}){let c=t.context??ct(),m=ref(null),C=ref(0),_=ref(false),p=ref(false),S=ref(false),I,O,i$1=ref(false),y=ref(false),k=ref(false),E=false,P,B=ref(true),L=[],q,te=0,D=0,W,$=null,Z="",j="",ee="",G=false,K=false,V=ref(false),ne=ref(""),X=ref(false),ce,oe,o=computed(()=>c.getState()),J=computed(()=>!!o.value.pendingLocationMessageId),ae=computed(()=>o.value.pageVisible??c.isPageVisible?.()??true),H=computed(()=>o.value.pageEngaged??c.isPageEngaged?.()??true),N=computed(()=>wn(o.value.activeConversation,t.conversation)),f=computed(()=>({...ft,...t.viewportOptions})),w=computed(()=>{let n=t.initialViewportOptions.maxFillPages??mt.maxFillPages;return {enabled:t.initialViewportOptions.enabled??mt.enabled,maxFillPages:Number.isFinite(n)?Math.max(0,Math.floor(n)):mt.maxFillPages}}),u=computed(()=>!N.value||!o.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),F=computed(()=>N.value?i({messages:o.value.messages,entryUnread:o.value.entryUnread,formatDate:c.formatDate,leadingItems:c.leadingItems?.(),beforeMessageItems:c.beforeMessageItems}):[]),T=computed(()=>F.value.flatMap(n=>n.kind==="message"||n.kind==="system"?[n.message.id]:[]));function re(){ce!==void 0&&(clearTimeout(ce),ce=void 0),oe!==void 0&&(clearTimeout(oe),oe=void 0);}function A(n=false){if(re(),X.value=false,n){m.value?.clearActiveDate(),ne.value="";return}oe=setTimeout(()=>{oe=void 0,!X.value&&(m.value?.clearActiveDate(),ne.value="");},In);}function z(n){if(n===null){A();return}re(),ne.value=n.label,X.value=true;let d=f.value.activeDateIdleDelay,l=Number.isFinite(d)?Math.max(0,d):ft.activeDateIdleDelay;ce=setTimeout(()=>{ce=void 0,A();},l);}async function ye(n,d,l){t.hooks?.beforeAction?.(n);try{let g=await d();return l?.()!==!1&&t.hooks?.afterAction?.(n,g),g}catch(g){throw l?.()!==false&&t.hooks?.onError?.(n,g),g}}function Ee(n="automatic",d){return !N.value||o.value.loading||!o.value.hasOlder?Promise.resolve(0):ye({kind:"load-older",source:n},()=>c.actions.loadOlder(),d)}function Ue(){return _e()}function _e(n){let d=c.actions.loadNewer,l=o.value.loadingNewer??o.value.loading;return !N.value||l||!o.value.hasNewer||d===void 0?Promise.resolve(0):ye({kind:"load-newer"},()=>d(),n)}async function qe(n){for(let d=0;d<bn;d+=1){if(!N.value||S.value||p.value||J.value)return;let l=n==="older"?o.value.hasOlder:o.value.hasNewer,g=n==="older"?o.value.olderError:o.value.newerError;if(!l||g!==null||(n==="older"?await Ee("user-scroll"):await Ue())>0)return;let R=n==="older"?o.value.hasOlder:o.value.hasNewer,Y=n==="older"?o.value.olderError:o.value.newerError;if(!R||Y!==null)return}}async function ke(){return !N.value||c.actions.loadNewer===void 0?0:We({kind:"load-newer"},()=>c.actions.retryNewer?.()??c.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function Ae(){return N.value?We({kind:"retry-older"},()=>c.actions.retryOlder?.()??c.actions.loadOlder({force:true})):0}async function We(n,d){let l=u.value,g=++te;$=null,ee="";let v;try{v=await ye(n,d);}catch(R){throw ue(l,g)&&(ee=l),R}return ue(l,g)&&!V.value&&($=null,Me()),v}async function Te(){if(!N.value)return false;let n=u.value;Re();let d=++D;return S.value=false,se(true),G=true,Z=n,j=xe(we()),!await ye({kind:"jump-to-latest"},()=>c.actions.jumpToLatest?.()??Promise.resolve(!o.value.isHistoryWindow),()=>Q(n,d))||!Q(n,d)||(await nextTick(),!Q(n,d))?false:(m.value?.scrollToLatest(),_.value=true,k.value=false,Le(),true)}function He(n=false){let d=m.value,l=d?.getViewportElement();y.value=d?.isScrollable()===true;let g=o.value.entryUnreadNavigation;i$1.value=g?.state==="located"&&L.includes(g.firstMessageId),V.value&&i$1.value&&(_.value=true);let v=l==null?0:Math.max(0,l.scrollHeight-l.clientHeight-l.scrollTop);k.value=g!==void 0&&v>50,n&&g!==void 0&&l!==null&&l!==void 0&&l.clientHeight>0&&v>=l.clientHeight&&(_.value=true);}function Le(){let n=c.actions.markConversationRead;if(n===void 0||!H.value||!N.value||!V.value||p.value||E&&(!B.value||o.value.hasNewer)||P!==void 0||o.value.error!==null)return;let d=u.value,l=n().then(()=>{P===l&&d===u.value&&(E=true);}).catch(g=>{!K&&P===l&&d===u.value&&t.hooks?.onError?.({kind:"mark-conversation-read"},g);}).finally(()=>{P===l&&(P=void 0);});P=l;}async function Ge(){let n=c.actions.loadEntryUnread;if(!N.value||p.value||n===void 0)return "cancelled";let d=u.value,l=++D;S.value=false;let g=new AbortController;O=g,I=l,p.value=true,se(true),G=true;try{let v=await ye({kind:"jump-to-entry-unread"},()=>n({signal:g.signal}),()=>Q(d,l));if(!Q(d,l))return "cancelled";if(!v||o.value.entryUnread.state!=="located")return "unavailable";let Y=await ze(d,l);return Y&&(_.value=!0),Y?"located":Q(d,l)?"unavailable":"cancelled"}catch(v){if(!Q(d,l))return "cancelled";throw v}finally{I===l&&(I=void 0,O=void 0,p.value=false);}}async function ze(n,d){await nextTick();for(let l=0;l<60;l+=1){if(!Q(n,d))return false;if(m.value?.scrollToEntryUnread())return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(g=>window.requestAnimationFrame(()=>g()));}return false}function Ye(n){B.value=n.isAtBottom,C.value=n.newMessageCount,He(),Me();}function Ve(n,d){return m.value?.scrollToMessage(n,d)??false}function Q(n,d){return !K&&D===d&&u.value===n&&N.value}async function De(n,d,l,g){for(let v=0;v<60;v+=1){if(!Q(n,d))return false;if(Ve(l,g))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(R=>window.requestAnimationFrame(()=>R()));}return false}async function $e(n,d){let l=m.value;if(l===null||!l.isMeasurable()||l.isScrollable())return true;let g=0,v=!o.value.hasOlder,R=!o.value.hasNewer||c.actions.loadNewer===void 0,Y=()=>Q(n,d),ie=async le=>{if(!Q(n,d)||g>=w.value.maxFillPages)return false;let Ne=0;if(le==="older"){if(v||!o.value.hasOlder)return false;Ne=await Ee("automatic",Y),v=!o.value.hasOlder;}else {if(R||!o.value.hasNewer)return false;l.prepareHistoryPageAppend();try{Ne=await _e(Y);}catch(nt){throw Y()&&l.cancelHistoryPageAppend(),nt}Y()&&Ne<=0&&!o.value.hasNewer&&l.cancelHistoryPageAppend(),R=!o.value.hasNewer;}return g+=1,await nextTick(),await nextTick(),Q(n,d)&&(Ne>0||!(le==="older"?v:R))};!v&&!await ie("older")&&(v=true),!R&&!await ie("newer")&&(R=true);let he="older";for(;Q(n,d)&&g<w.value.maxFillPages&&l.isMeasurable()&&!l.isScrollable()&&(!v||!R);){let le=he==="older"?v?"newer":"older":R?"older":"newer";he=le==="older"?"newer":"older",await ie(le)||(le==="older"?v=true:R=true);}return Q(n,d)}async function be(n,d={behavior:"auto",block:"center"}){if(!N.value||n==="")return false;let l=u.value;Re();let g=S.value||W!==void 0||(o.value.loadingOlder??o.value.loading)||(o.value.loadingNewer??o.value.loading),v=++D;S.value=true,se(true),G=true,Z=l,j=xe(we());let R=()=>Q(l,v);try{if(g||!T.value.includes(n)){let Y=c.actions.loadAround;if(Y===void 0)return !1;let ie={};W=ie;try{if(!await ye({kind:"locate-message",messageId:n},()=>Y(n),R)||!R())return !1}finally{W===ie&&(W=void 0);}}return await nextTick(),await nextTick(),!R()||!await $e(l,v)?!1:await De(l,v,n,d)}finally{D===v&&(S.value=false);}}function Ce(){q!==void 0&&(clearTimeout(q),q=void 0);}function Ie(){if(Ce(),!V.value)return;let n=t.readActions;if(n===void 0&&c.actions.markVisibleMessages===void 0)return;let d=Number.isFinite(f.value.visibleReadDelay)?Math.max(0,f.value.visibleReadDelay):ft.visibleReadDelay;q=setTimeout(()=>{if(q=void 0,!N.value||!H.value)return;Le();let l=c.actions.markVisibleMessages;if(l!==void 0){let R=L;l(R).catch(Y=>{t.hooks?.onError?.({kind:"visible-range",messageIds:R},Y);});return}if(n===void 0)return;let g=L[L.length-1];if(g===void 0)return;let v=n.resolveTarget===void 0?g:n.resolveTarget(g);v!=null&&Promise.resolve(n.markRead(v)).catch(R=>{t.hooks?.onError?.({kind:"visible-range",messageIds:L},R);});},d);}function Xe(n){L=Object.freeze([...n]),He();let d={kind:"visible-range",messageIds:L};t.hooks?.beforeAction?.(d);try{c.actions.onVisibleRange?.(L),t.hooks?.afterAction?.(d,void 0);}catch(l){throw t.hooks?.onError?.(d,l),l}V.value?Ie():Me();}function ue(n,d){return !K&&te===d&&u.value===n&&!G&&!J.value}function je(n,d){ue(n,d)&&(Z=n,j=xe(we()),V.value=true,He(),Le(),Ie());}function we(){return o.value.entryUnreadNavigation===void 0?o.value.entryUnread:{state:"none"}}function xe(n){return n.state!=="located"?n.state:`${n.state}:${n.firstMessageId}`}async function Ke(n,d,l){for(let g=0;g<60;g+=1){if(!ue(n,d))return false;if(m.value?.scrollToMessage(l,{behavior:"auto",block:"center"})===true)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(R=>window.requestAnimationFrame(()=>R()));}return false}function Me(){let n=u.value,d=xe(we());if(n===""||o.value.loading||S.value||J.value||o.value.error!==null&&o.value.messages.length===0||Z===n&&(j===d||j.startsWith("located:")||G)||ee===n||$!==null)return;if(!w.value.enabled){Z=n,j=d,V.value=true,Ie();return}let l=++te;G=false,V.value=false;let g=(async()=>{if(await nextTick(),!ue(n,l))return;let v=m.value;if(v===null||!v.isMeasurable())return;let R=we();if(R.state==="located"&&!T.value.includes(R.firstMessageId))return;let Y=R.state==="located"?await Ke(n,l,R.firstMessageId):false;if(R.state==="located"&&!Y)return;Y||v.scrollToLatest();let ie=0;for(;ue(n,l)&&ie<w.value.maxFillPages&&o.value.error===null&&(o.value.hasOlder||o.value.hasNewer&&c.actions.loadNewer!==void 0)&&v.isMeasurable()&&!v.isScrollable();){if(o.value.hasNewer&&c.actions.loadNewer!==void 0&&(o.value.messages.length===0||!o.value.hasOlder)){let le=D;v.prepareHistoryPageAppend();try{await Ue(),await nextTick();}finally{u.value===n&&D===le&&(te===l||G)&&v.cancelHistoryPageAppend();}}else await Ee();if(!ue(n,l)||(ie+=1,await nextTick(),await nextTick(),!v.isMeasurable()))return}if(!ue(n,l)||!v.isMeasurable())return;let he=we();if(he.state==="located"){if(!T.value.includes(he.firstMessageId)||!await Ke(n,l,he.firstMessageId))return}else v.scrollToLatest();await nextTick(),je(n,l);})().catch(()=>{ue(n,l)&&(ee=n);}).finally(()=>{$===g&&($=null);});$=g;}function se(n,d=false){te+=1,$=null,G=false,V.value=n,n||(Z="",j="",d||(ee="")),Ce();}function Re(){O!==void 0&&(D+=1,O.abort(),O=void 0,I=void 0,p.value=false);}function Je(){if(He(true),Re(),G=true,V.value)return;let n=u.value;te+=1,$=null,Z=n,V.value=true,Ie();}let ve=Object.freeze({getViewportElement:()=>m.value?.getViewportElement()??null,loadOlder:Ee,retryOlder:Ae,loadNewer:Ue,retryNewer:ke,jumpToLatest:Te,jumpToEntryUnread:Ge,scrollToMessage:Ve,locateMessage:be,focusViewport:()=>m.value?.focusViewport()});return a(ve),watch(H,n=>{n&&V.value?Ie():Ce();}),watch([()=>o.value.activeRemoteMessageRevision??0,m,u],()=>{let n=m.value;if(n===null||!N.value)return;let d=c.actions.drainActiveRemoteMessageIds?.()??[];n.trackRemoteMessageIds(d,{isAtBottom:B.value,isHistoryWindow:o.value.isHistoryWindow,isPageVisible:ae.value})&&(B.value=false);},{flush:"post"}),watch(()=>o.value.pendingLocationMessageId??"",n=>{(n!==""||S.value)&&(D+=1,S.value=false),n!==""&&(Re(),V.value||se(false));},{flush:"sync"}),watch([u,()=>o.value.loading,()=>o.value.error,()=>T.value.length,()=>o.value.hasOlder,()=>xe(we()),w,()=>o.value.hasNewer,J],([n,d,l,g,,v],[R,,,Y,,ie])=>{if(n!==R&&(Re(),D+=1,S.value=false,W=void 0,se(false),A(true),m.value?.clearNewMessageBadge(),C.value=0,B.value=true,L=[],_.value=false,i$1.value=false,y.value=false,k.value=false,p.value=false,I=void 0,E=false,P=void 0),n!==""&&n===R&&Y!==void 0&&Y>0&&g===0&&(o.value.hasOlder||o.value.hasNewer)&&V.value&&se(false,true),n!==""&&n===R&&v!==ie&&!j.startsWith("located:")&&!G&&v.startsWith("located:")&&(Z="",j="",V.value=false),n===""){se(false);return}if(l!==null&&o.value.messages.length===0){V.value||se(false,true);return}d||Me();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{K=true,Re(),D+=1,se(false),A(true);}),()=>{let n={conversation:t.conversation,state:o.value,items:F.value,actions:ve,initialViewportSettled:u.value!==""&&(o.value.messages.length===0?!o.value.loading&&o.value.error===null&&!o.value.hasOlder&&!o.value.hasNewer:V.value&&Z===u.value)},d=[b.header?.(n),b["before-list"]?.(n)];if(!N.value)d.push(b.unsupported?.(n)??h$1("div",{"data-im-thread-unsupported":""}));else if(!o.value.ready&&o.value.loading)d.push(b.loading?.(n)??h$1("div",{"data-im-thread-loading":""}));else if(o.value.error!==null&&o.value.messages.length===0)d.push(b.error?.(n)??h$1("div",{"data-im-thread-error":""}));else if(o.value.ready&&o.value.messages.length===0&&!o.value.hasOlder&&!o.value.hasNewer)d.push(b.empty?.(n)??h$1("div",{"data-im-thread-empty":""}));else {let l=h$1(ut,{ref:m,messageIds:T.value,contentKey:`${t.conversation.conversationType}\0${t.conversation.conversationId}`,loadingOlder:o.value.loadingOlder??o.value.loading,hasNewer:o.value.hasNewer,loadingNewer:o.value.loadingNewer??o.value.loading,followThreshold:f.value.followThreshold,olderPrefetchThreshold:f.value.olderPrefetchThreshold,visibleMargin:f.value.visibleMargin,activeDateOffset:f.value.activeDateOffset,activeDateEnabled:b["active-date"]!==void 0,resizeFollowEnabled:V.value&&!p.value&&!S.value&&!J.value,followNewMessages:ae.value&&!p.value&&!S.value&&!J.value,shouldFollowAppendedMessage:g=>{let v=o.value.messages.find(R=>R.id===g);return v===void 0?false:c.shouldFollowMessage?.(v)===true},onReachStart:()=>{qe("older").catch(()=>{});},onReachEnd:()=>{qe("newer").catch(()=>{});},onSettled:Ye,onUserScroll:Je,onActiveDateChange:z,onVisibleRange:Xe,onNewMessageCount:g=>{C.value=g;}},{default:()=>[b["viewport-before"]?.(n),h$1(lt,{items:F.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:b.item,"date-separator":b["date-separator"],"entry-unread":b["entry-unread"],encryption:b.encryption,system:b.system,message:b.message,"recalled-message":b["recalled-message"],"deleted-message":b["deleted-message"],"unsupported-body":b["unsupported-body"]}),b["viewport-after"]?.(n)]});d.push(h$1("div",{"data-im-thread-viewport-shell":""},[b["active-date"]?.({label:ne.value,visible:X.value&&ne.value!==""}),l,b["entry-unread-navigation"]?.({...n,count:o.value.entryUnreadNavigation?.state==="none"?0:o.value.entryUnreadNavigation?.count??0,loading:p.value,visible:n.initialViewportSettled&&!_.value&&!i$1.value&&!o.value.isHistoryWindow&&o.value.entryUnreadNavigation!==void 0&&o.value.entryUnreadNavigation.state!=="none"&&o.value.entryUnreadNavigation.count>0&&(y.value||o.value.hasOlder)})])),o.value.error!==null&&d.push(b.error?.(n)??h$1("div",{"data-im-thread-error":""}));}return d.push(b["after-list"]?.(n),b["jump-to-latest"]?.({...n,count:C.value,visible:k.value||!B.value||o.value.isHistoryWindow}),b["context-menu"]?.(n),b.composer?.(n)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},d)}}});function Rn(t){let a=new Map;for(let c of t){if(a.has(c.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${c.kind}`);a.set(c.kind,c.component);}let b=Object.freeze([...a.keys()]);return Object.freeze({kinds:b,resolve:c=>a.get(c)})}var Pn=140,En=120;function tt(t,a){if(t.width<=0||t.height<=0)return 0;let b=Math.max(0,Math.min(t.right,a.right)-Math.max(t.left,a.left)),c=Math.max(0,Math.min(t.bottom,a.bottom)-Math.max(t.top,a.top));return Math.min(1,b*c/(t.width*t.height))}function gt(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 vt(t){let a=Math.max(0,t.scrollIdleMs??Pn),b=Math.max(0,t.visibilityDwellMs??En),c=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),m=Math.max(0,t.revealMarginPx??0),C=Math.max(0,t.preloadMarginPx??0),_=Math.max(m,C),p=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),S=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),I=new Map,O=new Map,i=reactive(new Set),y=new Set,k=new Set,E=[],P=null,B=null,L=null,q=false,te=false,D=false,W=false,$,Z;function j(){$!==void 0&&clearTimeout($),$=void 0;}function ee(){Z!==void 0&&clearTimeout(Z),Z=void 0;}function G(f=false){if(!f&&B!==null||P===null)return;let w=P.getBoundingClientRect(),u=gt(w,_);for(let[F,T]of I){let re=F.getBoundingClientRect();T.ratio=tt(re,w),T.intersecting=T.ratio>0,T.revealIntersecting=_>0?tt(re,u)>0:T.intersecting&&T.ratio>=c;}}function K(f){return f.intersecting&&f.ratio>=c}function V(){for(let[f,w]of I)!w.revealIntersecting||i.has(w.key)||_>m&&(m===0&&!K(w)||m>0&&(P===null||tt(f.getBoundingClientRect(),gt(P.getBoundingClientRect(),m))<=0))||(i.add(w.key),t.onRevealed?.(w.item));}function ne(f,w=false){let u=new Set(f.map(T=>T.key));if(!(!(u.size!==k.size||[...u].some(T=>!k.has(T)))&&!w)){k.clear();for(let T of u)k.add(T);t.onSettledVisibleChange?.(f.map(T=>T.item));}}function X(f,w=false){!w&&f.length===E.length&&f.every((u,F)=>u.key===E[F]?.key&&u.item===E[F]?.item)||(E=f,t.onSettledPreloadChange?.(f.map(u=>u.item)));}function ce(){if(D||q)return;let f=te;te=false,G(),V();let w=P?.getBoundingClientRect(),u=w===void 0?0:(w.top+w.bottom)/2,F=[...I.entries()].filter(([,T])=>K(T)).sort(([T],[re])=>{let A=T.getBoundingClientRect(),z=re.getBoundingClientRect();return Math.abs((A.top+A.bottom)/2-u)-Math.abs((z.top+z.bottom)/2-u)}).slice(0,S).map(([,T])=>T);if(ne(F,f),t.onSettledPreloadChange!==void 0&&w!==void 0){let T=gt(w,C),re=[...I.entries()].filter(([,A])=>A.revealIntersecting).map(([A,z])=>({target:z,rect:A.getBoundingClientRect()})).filter(({target:A,rect:z})=>K(A)||C>0&&tt(z,T)>0).sort((A,z)=>Number(K(z.target))-Number(K(A.target))||Math.abs((A.rect.top+A.rect.bottom)/2-u)-Math.abs((z.rect.top+z.rect.bottom)/2-u)).slice(0,p).map(({target:A})=>A);X(re,f);}for(let T of F)y.has(T.key)||(y.add(T.key),t.onActivated?.(T.item));}function oe(){D||q||(ee(),Z=setTimeout(()=>{Z=void 0,ce();},b));}function o(){D||(te=true,J(true),X([]),G(),V(),ne([]),ee(),j(),$=setTimeout(()=>{$=void 0,J(false),oe();},a));}function J(f){q!==f&&(q=f,t.onScrollingChange?.(f));}function ae(){P?.removeEventListener("scroll",o),B?.disconnect(),L?.disconnect(),B=null,L=null,P=null;}function H(f=true){if(D)return;let w=t.getRoot();if(!(w===P&&P!==null)){if(X([]),ae(),P=w,P===null){f&&!W&&(W=true,Promise.resolve().then(()=>{W=false,D||(H(false),oe());}));return}if(P.addEventListener("scroll",o,{passive:true}),typeof IntersectionObserver<"u"){B=new IntersectionObserver(u=>{for(let F of u){let T=I.get(F.target);T!==void 0&&(T.intersecting=F.isIntersecting,T.ratio=F.intersectionRatio,_===0&&(T.revealIntersecting=F.isIntersecting&&F.intersectionRatio>=c));}V(),oe();},{root:P,threshold:[0,c,1]}),_>0&&(L=new IntersectionObserver(u=>{for(let F of u){let T=I.get(F.target);T!==void 0&&(T.revealIntersecting=F.isIntersecting);}V(),oe();},{root:P,rootMargin:`${_}px 0px`,threshold:0}));for(let u of I.keys())B.observe(u);for(let u of I.keys())L?.observe(u);}else G(),V();}}function N(f){X(E.filter(w=>w.key!==f)),i.delete(f),y.delete(f),k.delete(f);}return {register(f,w){if(D)return;let u=t.getKey(f),F=i.has(u),T=y.has(u),re=w===null?void 0:I.get(w);re!==void 0&&re.key!==u&&(O.delete(re.key),I.delete(w),N(re.key));let A=O.get(u);if(A!==void 0&&A!==w&&(B?.unobserve(A),L?.unobserve(A),I.delete(A),O.delete(u)),w===null){A!==void 0&&(B?.unobserve(A),L?.unobserve(A),I.delete(A),O.delete(u)),N(u);return}let z=I.get(w);if(z?.key===u&&z.item===f){H();return}I.set(w,{item:f,key:u,intersecting:z?.key===u?z.intersecting:false,ratio:z?.key===u?z.ratio:0,revealIntersecting:z?.key===u?z.revealIntersecting:false}),O.set(u,w),H(),B?.observe(w),L?.observe(w),G(true),V(),F&&t.onRevealed?.(f),T&&t.onActivated?.(f),oe();},isRevealed:f=>i.has(t.getKey(f)),isActivated:f=>y.has(t.getKey(f)),isSettledVisible:f=>k.has(t.getKey(f)),isScrolling:()=>q,notifyScroll:o,refresh(){H(),G(true),V(),oe();},reset(){j(),ee(),J(false),te=false,ne([]),X([]),ae(),I.clear(),O.clear(),i.clear(),y.clear();},dispose(){D||(j(),ee(),J(false),te=false,ne([]),X([]),ae(),I.clear(),O.clear(),i.clear(),y.clear(),D=true);}}}function An(t){let a=new Map,b=new Map,c=false,m=p=>{let S=a.get(p.channel);return S===void 0?p.channel:`${p.channel}\0${S.getKey(p.item)}`},C=vt({getRoot:t.getRoot,getKey:m,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:p=>{for(let S of a.values())S.onScrollingChange?.(p);},onRevealed:p=>a.get(p.channel)?.onRevealed?.(p.item),onActivated:p=>a.get(p.channel)?.onActivated?.(p.item),onSettledPreloadChange:p=>{for(let[S,I]of a){let O=p.filter(i=>i.channel===S).map(i=>i.item);I.onSettledPreloadChange?.(O.slice(0,Math.max(0,I.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:p=>{for(let[S,I]of a){let O=p.filter(y=>y.channel===S).map(y=>y.item),i=I.maxSettledVisible===void 0?O:O.slice(0,I.maxSettledVisible);I.onSettledVisibleChange?.(i);}}});function _(p){return S=>{if(c)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(a.has(p))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${p}`);a.set(p,S);let I=new Map;b.set(p,I);let O=false,i=E=>({channel:p,item:E});function y(){for(let E of I.values())C.register(E.target,null);I.clear(),S.onScrollingChange?.(false),S.onSettledVisibleChange?.([]),S.onSettledPreloadChange?.([]);}return {register(E,P){if(O||c)return;let B=S.getKey(E),L=I.get(B);if(P===null){L!==void 0&&(C.register(L.target,null),I.delete(B));return}let q=L?.target.item===E?L.target:i(E);I.set(B,{target:q,element:P}),C.register(q,P);},isRevealed:E=>C.isRevealed(i(E)),isActivated:E=>C.isActivated(i(E)),isSettledVisible:E=>C.isSettledVisible(i(E)),isScrolling:C.isScrolling,notifyScroll:C.notifyScroll,refresh:C.refresh,reset:y,dispose(){O||(y(),O=true,a.delete(p),b.delete(p));}}}}return {createFactory:_,refresh:C.refresh,dispose(){if(!c){for(let p of b.values())for(let S of p.values())C.register(S.target,null);for(let p of a.values())p.onSettledPreloadChange?.([]);b.clear(),a.clear(),C.dispose(),c=true;}}}}export{at as ImThreadBodySwitch,lt as ImThreadItems,Mn as ImThreadSurface,ut as ImThreadViewport,hn as createImThreadSurfaceContext,Rn as createMessageRendererRegistry,An as createThreadVisibilityTargetGroup,vt as createThreadVisibilityTargets,pn as provideImThreadSurfaceContext,Xt as useImText,ct as useImThreadSurfaceContext,Zt as useOptionalImThreadReadActions};
1
+ import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-EQVFLMM3.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-GISCLEZV.js';import'./chunk-YP6KFYYU.js';import'./chunk-SVYZRVHS.js';import'./chunk-XNBJ3NXF.js';import'./chunk-WOT6VMZA.js';import {defineComponent,h as h$1,ref,provide,watch,nextTick,onMounted,onBeforeUnmount,computed,inject,isVNode,cloneVNode,Fragment,reactive,shallowReactive}from'vue';function Xt(t){let a=0,b=0;for(let c of t)c.kind==="video"?b+=1:a+=1;return {imageCount:a,videoCount:b}}function Jt(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,...a.body.filesAlbum===void 0?{}:{filesAlbum:{count:a.body.filesAlbum.items.length,caption:a.body.filesAlbum.caption}},...a.body.mediaAlbum===void 0?{}:{mediaAlbum:Xt(a.body.mediaAlbum.items)}}),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 Nt=Symbol("ImThreadReadActions");function kt(t){provide(Nt,t);}function en(){return inject(Nt,void 0)}var at=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:b}){return kt(t.readActions),()=>{let c=h(t.message),g=t.rendererRegistry.resolve(c);return g!==void 0?h$1(g,{...a,message:t.message,presentation:t.presentation}):b["unsupported-body"]!==void 0?b["unsupported-body"]({kind:c,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":c,"aria-hidden":"true"})}}});var st=Symbol("ImThreadViewportRegistration");function Lt(){return inject(st,void 0)}var lt=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 b=Lt();function c(r,u){let v=Array.isArray(u)?u:[u];return v.length===1&&isVNode(v[0])?cloneVNode(v[0],{key:r}):h$1(Fragment,{key:r},v)}function g(r){return u=>{b?.registerMessageNode(r,u instanceof HTMLElement?u:null);}}function $(r,u){return v=>{b?.registerDateNode(r,u,v instanceof HTMLElement?v:null);}}function j(r){return a.encryption?.({item:r})??h$1("div",{"data-im-thread-encryption":r.key})}function A(r){let u=$(r.key,r.label);return a["date-separator"]?.({item:r,setElement:u})??h$1("div",{ref:u,"data-im-thread-date-separator":r.key},r.label)}function K(r){b?.registerEntryUnreadNode(r instanceof HTMLElement?r:null);}function P(r){return a["entry-unread"]?.({item:r,setElement:K})??h$1("div",{ref:K,"data-im-thread-entry-unread":r.key,...r.count===void 0?{}:{"data-count":String(r.count)}})}function q(r){let u=g(r.message.id);return a.item!==void 0?a.item({item:r,setElement:u}):a.message!==void 0?a.message({item:r,setElement:u}):r.message.deletedForEveryone!==void 0?a["deleted-message"]?.({item:r,setElement:u})??h$1("article",{ref:u,"data-im-thread-message-id":r.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):r.message.recalled!==void 0?a["recalled-message"]?.({item:r,setElement:u})??h$1("article",{ref:u,"data-im-thread-message-id":r.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):r.kind==="system"&&a.system!==void 0?a.system({item:r,setElement:u}):h$1("article",{ref:u,"data-im-thread-message-id":r.message.id,"data-first-of-run":r.kind==="message"?String(r.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(at,{message:r.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":a["unsupported-body"]===void 0?void 0:v=>a["unsupported-body"]?.(v)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(r=>{switch(r.kind){case "encryption":return a.item!==void 0?c(r.key,a.item({item:r})):c(r.key,j(r));case "date-separator":return a.item!==void 0?c(r.key,a.item({item:r,setElement:$(r.key,r.label)})):c(r.key,A(r));case "entry-unread":return a.item!==void 0?c(r.key,a.item({item:r,setElement:K})):c(r.key,P(r));case "system":case "message":return c(r.key,q(r))}return r}))}});var Bt=120,mn=500,Be=.5,gn=8;function dt(t){let a=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(a!==void 0&&Number.isFinite(a)&&a>0?a:1)}var ut=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:b,slots:c}){let g$1=ref(null),$=ref(null),j$1=new Map,A,K=new Map,P=new Set,q$1=new Map,r=0,u=[],v,N,T,E,U=false,X,x=new Set,M=false,k,O="",J=1,L=false,Q=false,W=true,G=false,H=false,ne=false,Z=0,ce=-1,oe=-1,i,ee,ae,F,D,m$1=ref(true),w=ref(0),f=C(e=>{w.value=e,a("new-message-count",e);});function B$1(e){let o=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=o}function I(e=t.messageIds){return e.flatMap(o=>{let s=j$1.get(o);if(s===void 0)return [];let y=s.getBoundingClientRect(),R=s.querySelector("[data-im-thread-anchor-point]");return [{id:o,top:y.top,bottom:y.bottom,anchorTop:R?.getBoundingClientRect().top??y.top}]})}function re(e="",o=1){let s=Math.min(1,Math.max(0,o));O!==""&&O!==e&&q$1.get(O)?.element.style.removeProperty("opacity"),O=e,J=s,e!==""&&q$1.get(e)?.element.style.setProperty("opacity",String(s));}function V(){re();}function z$1(){let e=g$1.value;if(M||e===null||!t.activeDateEnabled)return;let o=[...q$1.entries()].filter(([,_])=>e.contains(_.element)).map(([_,C])=>{let fe=C.element.getBoundingClientRect();return {key:_,label:C.label,top:fe.top,height:fe.height}}).sort((_,C)=>_.top-C.top),s=e.getBoundingClientRect(),y=o.find(_=>_.height>0)?.height??28,R=g({markers:o,viewportTop:s.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:y});if(R===null){V(),a("active-date-change",null);return}re(R.inlineDateKey,R.inlineOpacity),a("active-date-change",R);}function ye(e){N={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Pe(e){let o=N;if(o===void 0)return false;let s=Math.max(0,e.scrollHeight-e.clientHeight);return s<o.scrollHeight-o.height&&o.scrollTop>s&&Math.abs(e.scrollTop-s)<=dt(e)}function Ue(e){return Pe(e)||k!==void 0&&(k.behavior==="smooth"||Math.abs(e.scrollTop-k.targetTop)<=dt(e))?0:e.scrollTop-r}function _e(e,o){o!==0&&(r=e.scrollTop-o,k=void 0,te());}function qe(e,o){let s=Ue(e);if(F!==void 0)return F.expectedOffset-=s,Ie(),_e(e,s),G||je(),false;let y=N;if(y===void 0)return false;let R=v,_=R===void 0?void 0:I([R.id])[0],C=e.scrollTop-y.scrollTop,fe=Pe(e)?0:C,Se=R===void 0||_===void 0?0:(_.anchorTop??_.top)-o.top-R.offset+C;return y.scrollHeight!==e.scrollHeight||y.width!==e.clientWidth||y.height!==e.clientHeight||Math.abs(Se)>Be?(N=void 0,!L&&!t.loadingNewer&&!t.hasNewer&&t.resizeFollowEnabled&&m$1.value&&Math.abs(fe)<=Be?(le(),true):(R!==void 0&&xe({...R,offset:R.offset-fe}),_e(e,s),false)):false}function ke(){let e=g$1.value;if(M||e===null)return;let o$1=e.getBoundingClientRect();if(qe(e,o$1))return;let s=E!==void 0&&U?t.messageIds.filter(C=>P.has(C)):t.messageIds,y=I(s);if(E!==void 0&&U&&y.length===0){m$1.value=B$1(e);return}let R=y.filter(C=>B({viewportTop:o$1.top,viewportBottom:o$1.bottom,messageTop:C.top,messageBottom:C.bottom,margin:t.visibleMargin})).map(C=>C.id),_=R.length!==u.length||R.some((C,fe)=>u[fe]!==C);u=Object.freeze(R),v=o(y,{top:o$1.top,bottom:o$1.bottom}),ye(e),f.acknowledgeVisible(R),m$1.value=B$1(e),_&&a("visible-range",u),a("settled",{visibleMessageIds:u,...u.length===0?{}:{newestVisibleMessageId:u[u.length-1]},isAtBottom:m$1.value,newMessageCount:w.value});}function Ae(e){if(x.add(e),X!==void 0)return;let o=()=>{X=void 0;let s=[...x];x.clear(),s.forEach(y=>y());};typeof globalThis.requestAnimationFrame=="function"?X=globalThis.requestAnimationFrame(o):X=globalThis.setTimeout(o,0);}function Ge(){X!==void 0&&(typeof X=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(X):globalThis.clearTimeout(X),X=void 0,x.clear());}function Te(){Ae(ke);}function He(){let e=g$1.value;if(e===null)return;let o$1=e.getBoundingClientRect(),s=o(I(),{top:o$1.top,bottom:o$1.bottom});s!==void 0&&(v=s,ye(e));}function Le(){return W&&F===void 0&&!Q&&!t.loadingOlder}function We(){He(),W=false,ce=Z,Q=true,a("reach-start"),Ae(()=>{t.loadingOlder||(Q=false);});}function ze(e){return t.hasNewer&&!L&&!t.loadingOlder&&!t.loadingNewer&&B$1(e)}function Ye(){L=true,m$1.value=false,oe=Z,a("reach-end"),Ae(()=>{t.loadingNewer||(L=false);});}function Ve(){let e=g$1.value;e===null||Z===oe||!ze(e)||Ye();}function te(){let e=g$1.value;if(M||e===null)return;let o=e.scrollTop,s=Pe(e),y=k,R=false;if(y!==void 0){let C=Math.abs(o-y.targetTop)<=dt(e);R=y.behavior==="smooth"||C,(y.behavior!=="smooth"||C)&&(k=void 0);}!R&&!s&&!G&&F===void 0&&o!==r&&(G=true,H=true,Z+=1);let _=G&&!R&&!s&&o!==r;if(_&&(a("user-scroll"),Ae(z$1)),G&&!ne&&ve(),!W&&H&&Z!==ce&&o<r&&o>Ke()&&(W=true),F!==void 0&&!R)if(G){let C=Ce();C!==void 0&&(F.expectedOffset=C);}else Ie(),je();Le()&&_&&o>=0&&m({previousScrollTop:r,currentScrollTop:o,topThreshold:t.olderPrefetchThreshold})&&We(),_&&ze(e)&&z({previousScrollTop:r,currentScrollTop:o,isAtBottom:B$1(e),isHistoryWindow:t.hasNewer,isPageSettling:R})&&Ye(),r=o,Te();}function De(e,o="auto"){k={targetTop:e,behavior:o};}function $e(e){let o=F,s=$.value;if(!(o===void 0||s===null)){if(o.visualOffset=Math.abs(e)<=Be?0:e,o.visualOffset===0){s.style.removeProperty("transform"),s.style.removeProperty("will-change");return}s.style.setProperty("transform",`translate3d(0, ${o.visualOffset}px, 0)`),s.style.setProperty("will-change","transform");}}function be(){D!==void 0&&(clearTimeout(D),D=void 0),F!==void 0&&F.visualOffset!==0&&(v=void 0,N=void 0);let e=$.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),F=void 0,k=void 0;}function Ce(){let e=g$1.value,o=F;if(e===null||o===void 0)return;let s=I().find(y=>y.id===o.anchor.id);if(s!==void 0)return (s.anchorTop??s.top)-e.getBoundingClientRect().top}function Ie(){let e=F,o=Ce();if(e===void 0||o===void 0)return;let s=e.expectedOffset-o;Math.abs(s)<=Be||($e(e.visualOffset+s),e.committed=false,e.attempts=0);}function Xe(){D!==void 0&&clearTimeout(D),D=setTimeout(()=>{D=void 0,!(G||F?.committed!==true)&&be();},mn);}function ue(){let e=g$1.value,o=F;if(M||e===null||o===void 0||G)return;let s=o.visualOffset;if(Math.abs(s)<=Be){o.committed=true,Xe();return}let y=Math.max(0,e.scrollHeight-e.clientHeight),R=Math.min(y,Math.max(0,e.scrollTop-s));if(De(R),e.scrollTop=R,Math.abs(e.scrollTop-R)>Be){k=void 0,o.committed=false,o.attempts+=1,o.attempts<gn?je():(be(),k=void 0,r=e.scrollTop);return}$e(0),r=e.scrollTop,o.expectedOffset=Ce()??o.expectedOffset,o.committed=true,o.attempts=0,Xe();}function je(){D!==void 0&&clearTimeout(D),D=setTimeout(()=>{D=void 0,ue();},Bt);}function we(e){e!==void 0&&(F===void 0&&(F={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),Ie(),!G&&ue());}function xe(e){let o=g$1.value;if(o===null||e===void 0)return;let s=o.getBoundingClientRect(),y=q(e,I(),{top:s.top,bottom:s.bottom});if(y!==void 0){let R=Math.max(0,o.scrollHeight-o.clientHeight),_=Math.min(R,Math.max(0,o.scrollTop+y));De(_),o.scrollTop=_,r=o.scrollTop,N=void 0;}}function Ke(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function Me(){k?.behavior==="smooth"&&(k=void 0),H=false,G||(G=true,Z+=1),i!==void 0&&(clearTimeout(i),i=void 0);}function se(){let e=g$1.value;e===null||Z===ce||(F!==void 0&&be(),W=true,e.scrollTop<=Ke()&&Le()&&We());}function Re(){v=void 0,N=void 0,i!==void 0&&(clearTimeout(i),i=void 0),be(),G=false,H=false,ne=false,ee=void 0,ae=void 0,Z+=1,ce=-1,oe=-1,W=true,Q=false,L=false,k=void 0;}function Je(){ne||(i!==void 0&&(clearTimeout(i),i=void 0),G=false,H=false,F!==void 0&&(F.attempts=0),ue());}function ve(){ne||(i!==void 0&&clearTimeout(i),i=setTimeout(()=>{i=void 0,Je();},Bt));}function n(){k=void 0,Je();}function d(e){ne=true,Me(),ee=e.touches?.[0]?.clientY;}function l(e){let o=e.touches?.[0]?.clientY;o!==void 0&&(ee!==void 0&&o>ee?se():ee!==void 0&&o<ee&&Ve(),ee=o);}function p$1(){ne=false,ee=void 0,ve();}function h(e){Me(),e.deltaY<0?se():e.deltaY>0&&Ve(),ve();}function S(e){e.pointerType!=="touch"&&(Me(),ae=e.clientY,ve());}function Y(e){e.pointerType==="touch"||!G||ae===void 0||(e.clientY<ae?se():e.clientY>ae&&Ve(),ae=e.clientY,ve());}function ie(e){e.pointerType!=="touch"&&(ae=void 0,ve());}function pe(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(Me(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?se():Ve(),ve());}function le(e="auto"){let o=g$1.value;if(o===null)return;N=void 0,be();let s=Math.max(0,o.scrollHeight-o.clientHeight);De(s,e),o.scrollTo?.({top:s,behavior:e}),o.scrollTop!==s&&(o.scrollTop=s),r=o.scrollTop,f.clear(),U=false,ke();}function Ne(){let e=g$1.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function nt(){let e=g$1.value;return Ne()&&e!==null&&e.scrollHeight>e.clientHeight+1}function jt(e,o={}){return pt(j$1.get(e),o)}function pt(e,o){let s=g$1.value;if(s===null||e===void 0||!s.contains(e)||s.clientHeight<=0)return false;be();let y=s.getBoundingClientRect(),R=e.getBoundingClientRect(),_=o.block??"center",C;_==="start"?C=s.scrollTop+R.top-y.top:_==="end"?C=s.scrollTop+R.bottom-y.bottom:_==="nearest"?R.top>=y.top&&R.bottom<=y.bottom?C=s.scrollTop:R.top<y.top?C=s.scrollTop+R.top-y.top:C=s.scrollTop+R.bottom-y.bottom:C=j({currentScrollTop:s.scrollTop,scrollHeight:s.scrollHeight,targetHeight:R.height,targetTop:R.top,viewportHeight:s.clientHeight,viewportTop:y.top});let fe=Math.max(0,s.scrollHeight-s.clientHeight),Se=Math.min(fe,Math.max(0,C));N=void 0;let Fe=o.behavior??"auto";return De(Se,Fe),s.scrollTo?.({top:Se,behavior:Fe}),s.scrollTop!==Se&&(s.scrollTop=Se),r=s.scrollTop,U=false,ke(),true}function Kt(){let e=g$1.value;if(e===null||A===void 0||!e.contains(A)||e.clientHeight<=0)return null;let o=A.getBoundingClientRect(),s=e.scrollTop+o.top-e.getBoundingClientRect().top+o.height/2,y=e.clientHeight/2;return {older:s<y-1,newer:e.scrollHeight-s<y-1}}function qt(){f.clear();}function Gt(){L=true,m$1.value=false;}function Wt(){L=false,Te();}function zt(e,o){let s=j$1.get(e);if(s!==void 0&&s!==o&&(E?.unobserve(s),T?.unobserve?.(s),K.delete(s),P.delete(e)),o===null){j$1.delete(e),P.delete(e);return}j$1.set(e,o),K.set(o,e),E?.observe(o),T?.observe(o),Te();}function Yt(e,o,s){let y=q$1.get(e);if(s===null){q$1.delete(e);return}q$1.set(e,{element:s,label:o}),O===e&&s.style.setProperty("opacity",String(J)),y?.element!==s&&(s.dataset.imThreadDateSeparator=e);}return provide(st,{registerMessageNode:zt,registerDateNode:Yt,registerEntryUnreadNode:e=>{A=e??void 0;}}),watch(()=>t.contentKey,(e,o)=>{if(e===o)return;Re();let s=g$1.value;s!==null&&(r=s.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,o)=>{let s=g$1.value;if(s===null)return;let y=new Set(o);o.length>0&&e.length>0&&!e.some(Oe=>y.has(Oe))&&Re();let _=s.getBoundingClientRect(),C=p(v,I(),{top:_.top,bottom:_.bottom}),fe=m$1.value,Se=o[o.length-1],Fe=Se===void 0?-1:e.indexOf(Se),rt=Fe<0?[]:e.slice(Fe+1).filter(Oe=>!y.has(Oe)),ht=L||t.loadingNewer,$t=e.length===o.length&&e.every(Oe=>y.has(Oe))&&e.some((Oe,ot)=>Oe!==o[ot]);if(await nextTick(),M)return;if($t&&fe&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!ht){le();return}let yt=o[0];if(yt!==void 0&&e.indexOf(yt)>0&&(Q=false,we(C)),rt.length>0){if(ht){L=false,F===void 0&&xe(C),m$1.value=false,Te();return}(fe||rt.some(ot=>t.shouldFollowAppendedMessage?.(ot)===true))&&t.followNewMessages?le():f.add(rt);}Te();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,o)=>{e||!o||!L||Ae(()=>{t.loadingNewer||(L=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,o)=>{e||!o||!Q||Ae(()=>{t.loadingOlder||(Q=false);});},{flush:"pre"}),onMounted(()=>{let e=g$1.value;if(e!==null){if(r=e.scrollTop,e.addEventListener("scroll",te,{passive:true}),e.addEventListener("scrollend",n,{passive:true}),e.addEventListener("touchstart",d,{passive:true}),e.addEventListener("touchmove",l,{passive:true}),e.addEventListener("touchend",p$1,{passive:true}),e.addEventListener("touchcancel",p$1,{passive:true}),e.addEventListener("wheel",h,{passive:true}),e.addEventListener("pointerdown",S,{passive:true}),e.addEventListener("pointermove",Y,{passive:true}),e.addEventListener("pointerup",ie,{passive:true}),e.addEventListener("pointercancel",ie,{passive:true}),e.addEventListener("keydown",pe),typeof globalThis.ResizeObserver=="function"){T=new globalThis.ResizeObserver(()=>{M||g$1.value===null||ke();}),T.observe(e),$.value!==null&&T.observe($.value);for(let o of j$1.values())T.observe(o);}if(typeof globalThis.IntersectionObserver=="function"){E=new globalThis.IntersectionObserver(o=>{for(let s of o){let y=K.get(s.target);y!==void 0&&(s.isIntersecting?P.add(y):P.delete(y));}U=true,Te();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let o of j$1.values())E.observe(o);}Te();}}),onBeforeUnmount(()=>{M=true;let e=g$1.value;e!==null&&e.removeEventListener("scroll",te),e!==null&&(e.removeEventListener("scrollend",n),e.removeEventListener("touchstart",d),e.removeEventListener("touchmove",l),e.removeEventListener("touchend",p$1),e.removeEventListener("touchcancel",p$1),e.removeEventListener("wheel",h),e.removeEventListener("pointerdown",S),e.removeEventListener("pointermove",Y),e.removeEventListener("pointerup",ie),e.removeEventListener("pointercancel",ie),e.removeEventListener("keydown",pe)),i!==void 0&&clearTimeout(i),be(),Ge(),T?.disconnect(),E?.disconnect(),V(),A=void 0,j$1.clear(),K.clear(),P.clear(),q$1.clear(),f.clear();}),b({getViewportElement:()=>g$1.value,clearNewMessageBadge:qt,clearActiveDate:V,isAtBottom:computed(()=>m$1.value),isMeasurable:Ne,isScrollable:nt,newMessageCount:computed(()=>w.value),prepareHistoryPageAppend:Gt,cancelHistoryPageAppend:Wt,trackRemoteMessageIds:(e,o)=>f.trackRemote(e,o),scrollToLatest:le,scrollToMessage:jt,scrollToEntryUnread:()=>pt(A,{block:"center",behavior:"auto"}),getEntryUnreadCenteringNeeds:Kt,focusViewport:()=>g$1.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:g$1,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:$,"data-im-thread-viewport-content":""},c.default?.())])}});var Ut=Symbol("ImThreadSurfaceContext");function hn(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 yn(t){provide(Ut,t);}function ct(){let t=inject(Ut);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var ft=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),mt=Object.freeze({enabled:true,maxFillPages:8}),In=8,wn=160;function Mn(t,a){return t?.conversationType===a.conversationType&&t.conversationId===a.conversationId}var Rn=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:b}){let c=t.context??ct(),g=ref(null),$=ref(0),j=ref(false),A=ref(false),K=ref(false),P,q,r=ref(false),u=ref(false),v=ref(false),N=false,T,E=ref(true),U=[],X,x=0,M=0,k,O=null,J="",L="",Q="",W=false,G=false,H=ref(false),ne=ref(""),Z=ref(false),ce,oe,i$1=computed(()=>c.getState()),ee=computed(()=>!!i$1.value.pendingLocationMessageId),ae=computed(()=>i$1.value.pageVisible??c.isPageVisible?.()??true),F=computed(()=>i$1.value.pageEngaged??c.isPageEngaged?.()??true),D=computed(()=>Mn(i$1.value.activeConversation,t.conversation)),m=computed(()=>({...ft,...t.viewportOptions})),w=computed(()=>{let n=t.initialViewportOptions.maxFillPages??mt.maxFillPages;return {enabled:t.initialViewportOptions.enabled??mt.enabled,maxFillPages:Number.isFinite(n)?Math.max(0,Math.floor(n)):mt.maxFillPages}}),f=computed(()=>!D.value||!i$1.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),B=computed(()=>D.value?i({messages:i$1.value.messages,entryUnread:i$1.value.entryUnread,formatDate:c.formatDate,leadingItems:c.leadingItems?.(),beforeMessageItems:c.beforeMessageItems}):[]),I=computed(()=>B.value.flatMap(n=>n.kind==="message"||n.kind==="system"?[n.message.id]:[]));function re(){ce!==void 0&&(clearTimeout(ce),ce=void 0),oe!==void 0&&(clearTimeout(oe),oe=void 0);}function V(n=false){if(re(),Z.value=false,n){g.value?.clearActiveDate(),ne.value="";return}oe=setTimeout(()=>{oe=void 0,!Z.value&&(g.value?.clearActiveDate(),ne.value="");},wn);}function z(n){if(n===null){V();return}re(),ne.value=n.label,Z.value=true;let d=m.value.activeDateIdleDelay,l=Number.isFinite(d)?Math.max(0,d):ft.activeDateIdleDelay;ce=setTimeout(()=>{ce=void 0,V();},l);}async function ye(n,d,l){t.hooks?.beforeAction?.(n);try{let p=await d();return l?.()!==!1&&t.hooks?.afterAction?.(n,p),p}catch(p){throw l?.()!==false&&t.hooks?.onError?.(n,p),p}}function Pe(n="automatic",d){return !D.value||i$1.value.loading||!i$1.value.hasOlder?Promise.resolve(0):ye({kind:"load-older",source:n},()=>c.actions.loadOlder(),d)}function Ue(){return _e()}function _e(n){let d=c.actions.loadNewer,l=i$1.value.loadingNewer??i$1.value.loading;return !D.value||l||!i$1.value.hasNewer||d===void 0?Promise.resolve(0):ye({kind:"load-newer"},()=>d(),n)}async function qe(n){for(let d=0;d<In;d+=1){if(!D.value||K.value||A.value||ee.value)return;let l=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,p=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!l||p!==null||(n==="older"?await Pe("user-scroll"):await Ue())>0)return;let S=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,Y=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!S||Y!==null)return}}async function ke(){return !D.value||c.actions.loadNewer===void 0?0:Ge({kind:"load-newer"},()=>c.actions.retryNewer?.()??c.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function Ae(){return D.value?Ge({kind:"retry-older"},()=>c.actions.retryOlder?.()??c.actions.loadOlder({force:true})):0}async function Ge(n,d){let l=f.value,p=++x;O=null,Q="";let h;try{h=await ye(n,d);}catch(S){throw ue(l,p)&&(Q=l),S}return ue(l,p)&&!H.value&&(O=null,Me()),h}async function Te(){if(!D.value)return false;let n=f.value;Re();let d=++M;return K.value=false,se(true),W=true,J=n,L=xe(we()),!await ye({kind:"jump-to-latest"},()=>c.actions.jumpToLatest?.()??Promise.resolve(!i$1.value.isHistoryWindow),()=>te(n,d))||!te(n,d)||(await nextTick(),!te(n,d))?false:(g.value?.scrollToLatest(),j.value=true,v.value=false,Le(),true)}function He(n=false){let d=g.value,l=d?.getViewportElement();u.value=d?.isScrollable()===true;let p=i$1.value.entryUnreadNavigation;r.value=p?.state==="located"&&U.includes(p.firstMessageId),H.value&&r.value&&(j.value=true);let h=l==null?0:Math.max(0,l.scrollHeight-l.clientHeight-l.scrollTop);v.value=p!==void 0&&h>50,n&&p!==void 0&&l!==null&&l!==void 0&&l.clientHeight>0&&h>=l.clientHeight&&(j.value=true);}function Le(){let n=c.actions.markConversationRead;if(n===void 0||!F.value||!D.value||!H.value||A.value||N&&(!E.value||i$1.value.hasNewer)||T!==void 0||i$1.value.error!==null)return;let d=f.value,l=n().then(()=>{T===l&&d===f.value&&(N=true);}).catch(p=>{!G&&T===l&&d===f.value&&t.hooks?.onError?.({kind:"mark-conversation-read"},p);}).finally(()=>{T===l&&(T=void 0);});T=l;}async function We(){let n=c.actions.loadEntryUnread;if(!D.value||A.value||n===void 0)return "cancelled";let d=f.value,l=++M;K.value=false;let p=new AbortController;q=p,P=l,A.value=true,se(true),W=true;try{let h=await ye({kind:"jump-to-entry-unread"},()=>n({signal:p.signal}),()=>te(d,l));if(!te(d,l))return "cancelled";if(!h||i$1.value.entryUnread.state!=="located")return "unavailable";let Y=await ze(d,l);return Y&&(j.value=!0),Y?"located":te(d,l)?"unavailable":"cancelled"}catch(h){if(!te(d,l))return "cancelled";throw h}finally{P===l&&(P=void 0,q=void 0,A.value=false);}}async function ze(n,d){await nextTick();for(let l=0;l<60;l+=1){if(!te(n,d))return false;if(g.value?.scrollToEntryUnread())return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(p=>window.requestAnimationFrame(()=>p()));}return false}function Ye(n){E.value=n.isAtBottom,$.value=n.newMessageCount,He(),Me();}function Ve(n,d){return g.value?.scrollToMessage(n,d)??false}function te(n,d){return !G&&M===d&&f.value===n&&D.value}async function De(n,d,l,p){for(let h=0;h<60;h+=1){if(!te(n,d))return false;if(Ve(l,p))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(S=>window.requestAnimationFrame(()=>S()));}return false}async function $e(n,d){let l=g.value;if(l===null||!l.isMeasurable()||l.isScrollable())return true;let p=0,h=!i$1.value.hasOlder,S=!i$1.value.hasNewer||c.actions.loadNewer===void 0,Y=()=>te(n,d),ie=async le=>{if(!te(n,d)||p>=w.value.maxFillPages)return false;let Ne=0;if(le==="older"){if(h||!i$1.value.hasOlder)return false;Ne=await Pe("automatic",Y),h=!i$1.value.hasOlder;}else {if(S||!i$1.value.hasNewer)return false;l.prepareHistoryPageAppend();try{Ne=await _e(Y);}catch(nt){throw Y()&&l.cancelHistoryPageAppend(),nt}Y()&&Ne<=0&&!i$1.value.hasNewer&&l.cancelHistoryPageAppend(),S=!i$1.value.hasNewer;}return p+=1,await nextTick(),await nextTick(),te(n,d)&&(Ne>0||!(le==="older"?h:S))};!h&&!await ie("older")&&(h=true),!S&&!await ie("newer")&&(S=true);let pe="older";for(;te(n,d)&&p<w.value.maxFillPages&&l.isMeasurable()&&!l.isScrollable()&&(!h||!S);){let le=pe==="older"?h?"newer":"older":S?"older":"newer";pe=le==="older"?"newer":"older",await ie(le)||(le==="older"?h=true:S=true);}return te(n,d)}async function be(n,d={behavior:"auto",block:"center"}){if(!D.value||n==="")return false;let l=f.value;Re();let p=K.value||k!==void 0||(i$1.value.loadingOlder??i$1.value.loading)||(i$1.value.loadingNewer??i$1.value.loading),h=++M;K.value=true,se(true),W=true,J=l,L=xe(we());let S=()=>te(l,h);try{if(p||!I.value.includes(n)){let Y=c.actions.loadAround;if(Y===void 0)return !1;let ie={};k=ie;try{if(!await ye({kind:"locate-message",messageId:n},()=>Y(n),S)||!S())return !1}finally{k===ie&&(k=void 0);}}return await nextTick(),await nextTick(),!S()||!await $e(l,h)?!1:await De(l,h,n,d)}finally{M===h&&(K.value=false);}}function Ce(){X!==void 0&&(clearTimeout(X),X=void 0);}function Ie(){if(Ce(),!H.value)return;let n=t.readActions;if(n===void 0&&c.actions.markVisibleMessages===void 0)return;let d=Number.isFinite(m.value.visibleReadDelay)?Math.max(0,m.value.visibleReadDelay):ft.visibleReadDelay;X=setTimeout(()=>{if(X=void 0,!D.value||!F.value)return;Le();let l=c.actions.markVisibleMessages;if(l!==void 0){let S=U;l(S).catch(Y=>{t.hooks?.onError?.({kind:"visible-range",messageIds:S},Y);});return}if(n===void 0)return;let p=U[U.length-1];if(p===void 0)return;let h=n.resolveTarget===void 0?p:n.resolveTarget(p);h!=null&&Promise.resolve(n.markRead(h)).catch(S=>{t.hooks?.onError?.({kind:"visible-range",messageIds:U},S);});},d);}function Xe(n){U=Object.freeze([...n]),He();let d={kind:"visible-range",messageIds:U};t.hooks?.beforeAction?.(d);try{c.actions.onVisibleRange?.(U),t.hooks?.afterAction?.(d,void 0);}catch(l){throw t.hooks?.onError?.(d,l),l}H.value?Ie():Me();}function ue(n,d){return !G&&x===d&&f.value===n&&!W&&!ee.value}function je(n,d){ue(n,d)&&(J=n,L=xe(we()),H.value=true,He(),Le(),Ie());}function we(){return i$1.value.entryUnreadNavigation===void 0?i$1.value.entryUnread:{state:"none"}}function xe(n){return n.state!=="located"?n.state:`${n.state}:${n.firstMessageId}`}async function Ke(n,d,l){for(let p=0;p<60;p+=1){if(!ue(n,d))return false;if(g.value?.scrollToMessage(l,{behavior:"auto",block:"center"})===true)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(S=>window.requestAnimationFrame(()=>S()));}return false}function Me(){let n=f.value,d=xe(we());if(n===""||i$1.value.loading||K.value||ee.value||i$1.value.error!==null&&i$1.value.messages.length===0||J===n&&(L===d||L.startsWith("located:")||W)||Q===n||O!==null)return;if(!w.value.enabled){J=n,L=d,H.value=true,Ie();return}let l=++x;W=false,H.value=false;let p=(async()=>{if(await nextTick(),!ue(n,l))return;let h=g.value;if(h===null||!h.isMeasurable())return;let S=we();if(S.state==="located"&&!I.value.includes(S.firstMessageId))return;let Y=S.state==="located"?await Ke(n,l,S.firstMessageId):false;if(S.state==="located"&&!Y)return;Y||h.scrollToLatest();let ie=0;for(;ue(n,l)&&ie<w.value.maxFillPages&&i$1.value.error===null&&(i$1.value.hasOlder||i$1.value.hasNewer&&c.actions.loadNewer!==void 0)&&h.isMeasurable()&&!h.isScrollable();){if(i$1.value.hasNewer&&c.actions.loadNewer!==void 0&&(i$1.value.messages.length===0||!i$1.value.hasOlder)){let le=M;h.prepareHistoryPageAppend();try{await Ue(),await nextTick();}finally{f.value===n&&M===le&&(x===l||W)&&h.cancelHistoryPageAppend();}}else await Pe();if(!ue(n,l)||(ie+=1,await nextTick(),await nextTick(),!h.isMeasurable()))return}if(!ue(n,l)||!h.isMeasurable())return;let pe=we();if(pe.state==="located"){if(!I.value.includes(pe.firstMessageId)||!await Ke(n,l,pe.firstMessageId))return}else h.scrollToLatest();await nextTick(),je(n,l);})().catch(()=>{ue(n,l)&&(Q=n);}).finally(()=>{O===p&&(O=null);});O=p;}function se(n,d=false){x+=1,O=null,W=false,H.value=n,n||(J="",L="",d||(Q="")),Ce();}function Re(){q!==void 0&&(M+=1,q.abort(),q=void 0,P=void 0,A.value=false);}function Je(){if(He(true),Re(),W=true,H.value)return;let n=f.value;x+=1,O=null,J=n,H.value=true,Ie();}let ve=Object.freeze({getViewportElement:()=>g.value?.getViewportElement()??null,loadOlder:Pe,retryOlder:Ae,loadNewer:Ue,retryNewer:ke,jumpToLatest:Te,jumpToEntryUnread:We,scrollToMessage:Ve,locateMessage:be,focusViewport:()=>g.value?.focusViewport()});return a(ve),watch(F,n=>{n&&H.value?Ie():Ce();}),watch([()=>i$1.value.activeRemoteMessageRevision??0,g,f],()=>{let n=g.value;if(n===null||!D.value)return;let d=c.actions.drainActiveRemoteMessageIds?.()??[];n.trackRemoteMessageIds(d,{isAtBottom:E.value,isHistoryWindow:i$1.value.isHistoryWindow,isPageVisible:ae.value})&&(E.value=false);},{flush:"post"}),watch(()=>i$1.value.pendingLocationMessageId??"",n=>{(n!==""||K.value)&&(M+=1,K.value=false),n!==""&&(Re(),H.value||se(false));},{flush:"sync"}),watch([f,()=>i$1.value.loading,()=>i$1.value.error,()=>I.value.length,()=>i$1.value.hasOlder,()=>xe(we()),w,()=>i$1.value.hasNewer,ee],([n,d,l,p,,h],[S,,,Y,,ie])=>{if(n!==S&&(Re(),M+=1,K.value=false,k=void 0,se(false),V(true),g.value?.clearNewMessageBadge(),$.value=0,E.value=true,U=[],j.value=false,r.value=false,u.value=false,v.value=false,A.value=false,P=void 0,N=false,T=void 0),n!==""&&n===S&&Y!==void 0&&Y>0&&p===0&&(i$1.value.hasOlder||i$1.value.hasNewer)&&H.value&&se(false,true),n!==""&&n===S&&h!==ie&&!L.startsWith("located:")&&!W&&h.startsWith("located:")&&(J="",L="",H.value=false),n===""){se(false);return}if(l!==null&&i$1.value.messages.length===0){H.value||se(false,true);return}d||Me();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{G=true,Re(),M+=1,se(false),V(true);}),()=>{let n={conversation:t.conversation,state:i$1.value,items:B.value,actions:ve,initialViewportSettled:f.value!==""&&(i$1.value.messages.length===0?!i$1.value.loading&&i$1.value.error===null&&!i$1.value.hasOlder&&!i$1.value.hasNewer:H.value&&J===f.value)},d=[b.header?.(n),b["before-list"]?.(n)];if(!D.value)d.push(b.unsupported?.(n)??h$1("div",{"data-im-thread-unsupported":""}));else if(!i$1.value.ready&&i$1.value.loading)d.push(b.loading?.(n)??h$1("div",{"data-im-thread-loading":""}));else if(i$1.value.error!==null&&i$1.value.messages.length===0)d.push(b.error?.(n)??h$1("div",{"data-im-thread-error":""}));else if(i$1.value.ready&&i$1.value.messages.length===0&&!i$1.value.hasOlder&&!i$1.value.hasNewer)d.push(b.empty?.(n)??h$1("div",{"data-im-thread-empty":""}));else {let l=h$1(ut,{ref:g,messageIds:I.value,contentKey:`${t.conversation.conversationType}\0${t.conversation.conversationId}`,loadingOlder:i$1.value.loadingOlder??i$1.value.loading,hasNewer:i$1.value.hasNewer,loadingNewer:i$1.value.loadingNewer??i$1.value.loading,followThreshold:m.value.followThreshold,olderPrefetchThreshold:m.value.olderPrefetchThreshold,visibleMargin:m.value.visibleMargin,activeDateOffset:m.value.activeDateOffset,activeDateEnabled:b["active-date"]!==void 0,resizeFollowEnabled:H.value&&!A.value&&!K.value&&!ee.value,followNewMessages:ae.value&&!A.value&&!K.value&&!ee.value,shouldFollowAppendedMessage:p=>{let h=i$1.value.messages.find(S=>S.id===p);return h===void 0?false:c.shouldFollowMessage?.(h)===true},onReachStart:()=>{qe("older").catch(()=>{});},onReachEnd:()=>{qe("newer").catch(()=>{});},onSettled:Ye,onUserScroll:Je,onActiveDateChange:z,onVisibleRange:Xe,onNewMessageCount:p=>{$.value=p;}},{default:()=>[b["viewport-before"]?.(n),h$1(lt,{items:B.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:b.item,"date-separator":b["date-separator"],"entry-unread":b["entry-unread"],encryption:b.encryption,system:b.system,message:b.message,"recalled-message":b["recalled-message"],"deleted-message":b["deleted-message"],"unsupported-body":b["unsupported-body"]}),b["viewport-after"]?.(n)]});d.push(h$1("div",{"data-im-thread-viewport-shell":""},[b["active-date"]?.({label:ne.value,visible:Z.value&&ne.value!==""}),l,b["entry-unread-navigation"]?.({...n,count:i$1.value.entryUnreadNavigation?.state==="none"?0:i$1.value.entryUnreadNavigation?.count??0,loading:A.value,visible:n.initialViewportSettled&&!j.value&&!r.value&&!i$1.value.isHistoryWindow&&i$1.value.entryUnreadNavigation!==void 0&&i$1.value.entryUnreadNavigation.state!=="none"&&i$1.value.entryUnreadNavigation.count>0&&(u.value||i$1.value.hasOlder)})])),i$1.value.error!==null&&d.push(b.error?.(n)??h$1("div",{"data-im-thread-error":""}));}return d.push(b["after-list"]?.(n),b["jump-to-latest"]?.({...n,count:$.value,visible:v.value||!E.value||i$1.value.isHistoryWindow}),b["context-menu"]?.(n),b.composer?.(n)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},d)}}});function Sn(t){let a=new Map;for(let c of t){if(a.has(c.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${c.kind}`);a.set(c.kind,c.component);}let b=Object.freeze([...a.keys()]);return Object.freeze({kinds:b,resolve:c=>a.get(c)})}var Pn=140,An=120;function tt(t,a){if(t.width<=0||t.height<=0)return 0;let b=Math.max(0,Math.min(t.right,a.right)-Math.max(t.left,a.left)),c=Math.max(0,Math.min(t.bottom,a.bottom)-Math.max(t.top,a.top));return Math.min(1,b*c/(t.width*t.height))}function gt(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 vt(t){let a=Math.max(0,t.scrollIdleMs??Pn),b=Math.max(0,t.visibilityDwellMs??An),c=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),g=Math.max(0,t.revealMarginPx??0),$=Math.max(0,t.preloadMarginPx??0),j=Math.max(g,$),A=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),K=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),P=new Map,q=new Map,r=reactive(new Set),u=new Set,v=new Set,N=[],T=null,E=null,U=null,X=false,x=false,M=false,k=false,O,J;function L(){O!==void 0&&clearTimeout(O),O=void 0;}function Q(){J!==void 0&&clearTimeout(J),J=void 0;}function W(m=false){if(!m&&E!==null||T===null)return;let w=T.getBoundingClientRect(),f=gt(w,j);for(let[B,I]of P){let re=B.getBoundingClientRect();I.ratio=tt(re,w),I.intersecting=I.ratio>0,I.revealIntersecting=j>0?tt(re,f)>0:I.intersecting&&I.ratio>=c;}}function G(m){return m.intersecting&&m.ratio>=c}function H(){for(let[m,w]of P)!w.revealIntersecting||r.has(w.key)||j>g&&(g===0&&!G(w)||g>0&&(T===null||tt(m.getBoundingClientRect(),gt(T.getBoundingClientRect(),g))<=0))||(r.add(w.key),t.onRevealed?.(w.item));}function ne(m,w=false){let f=new Set(m.map(I=>I.key));if(!(!(f.size!==v.size||[...f].some(I=>!v.has(I)))&&!w)){v.clear();for(let I of f)v.add(I);t.onSettledVisibleChange?.(m.map(I=>I.item));}}function Z(m,w=false){!w&&m.length===N.length&&m.every((f,B)=>f.key===N[B]?.key&&f.item===N[B]?.item)||(N=m,t.onSettledPreloadChange?.(m.map(f=>f.item)));}function ce(){if(M||X)return;let m=x;x=false,W(),H();let w=T?.getBoundingClientRect(),f=w===void 0?0:(w.top+w.bottom)/2,B=[...P.entries()].filter(([,I])=>G(I)).sort(([I],[re])=>{let V=I.getBoundingClientRect(),z=re.getBoundingClientRect();return Math.abs((V.top+V.bottom)/2-f)-Math.abs((z.top+z.bottom)/2-f)}).slice(0,K).map(([,I])=>I);if(ne(B,m),t.onSettledPreloadChange!==void 0&&w!==void 0){let I=gt(w,$),re=[...P.entries()].filter(([,V])=>V.revealIntersecting).map(([V,z])=>({target:z,rect:V.getBoundingClientRect()})).filter(({target:V,rect:z})=>G(V)||$>0&&tt(z,I)>0).sort((V,z)=>Number(G(z.target))-Number(G(V.target))||Math.abs((V.rect.top+V.rect.bottom)/2-f)-Math.abs((z.rect.top+z.rect.bottom)/2-f)).slice(0,A).map(({target:V})=>V);Z(re,m);}for(let I of B)u.has(I.key)||(u.add(I.key),t.onActivated?.(I.item));}function oe(){M||X||(Q(),J=setTimeout(()=>{J=void 0,ce();},b));}function i(){M||(x=true,ee(true),Z([]),W(),H(),ne([]),Q(),L(),O=setTimeout(()=>{O=void 0,ee(false),oe();},a));}function ee(m){X!==m&&(X=m,t.onScrollingChange?.(m));}function ae(){T?.removeEventListener("scroll",i),E?.disconnect(),U?.disconnect(),E=null,U=null,T=null;}function F(m=true){if(M)return;let w=t.getRoot();if(!(w===T&&T!==null)){if(Z([]),ae(),T=w,T===null){m&&!k&&(k=true,Promise.resolve().then(()=>{k=false,M||(F(false),oe());}));return}if(T.addEventListener("scroll",i,{passive:true}),typeof IntersectionObserver<"u"){E=new IntersectionObserver(f=>{for(let B of f){let I=P.get(B.target);I!==void 0&&(I.intersecting=B.isIntersecting,I.ratio=B.intersectionRatio,j===0&&(I.revealIntersecting=B.isIntersecting&&B.intersectionRatio>=c));}H(),oe();},{root:T,threshold:[0,c,1]}),j>0&&(U=new IntersectionObserver(f=>{for(let B of f){let I=P.get(B.target);I!==void 0&&(I.revealIntersecting=B.isIntersecting);}H(),oe();},{root:T,rootMargin:`${j}px 0px`,threshold:0}));for(let f of P.keys())E.observe(f);for(let f of P.keys())U?.observe(f);}else W(),H();}}function D(m){Z(N.filter(w=>w.key!==m)),r.delete(m),u.delete(m),v.delete(m);}return {register(m,w){if(M)return;let f=t.getKey(m),B=r.has(f),I=u.has(f),re=w===null?void 0:P.get(w);re!==void 0&&re.key!==f&&(q.delete(re.key),P.delete(w),D(re.key));let V=q.get(f);if(V!==void 0&&V!==w&&(E?.unobserve(V),U?.unobserve(V),P.delete(V),q.delete(f)),w===null){V!==void 0&&(E?.unobserve(V),U?.unobserve(V),P.delete(V),q.delete(f)),D(f);return}let z=P.get(w);if(z?.key===f&&z.item===m){F();return}P.set(w,{item:m,key:f,intersecting:z?.key===f?z.intersecting:false,ratio:z?.key===f?z.ratio:0,revealIntersecting:z?.key===f?z.revealIntersecting:false}),q.set(f,w),F(),E?.observe(w),U?.observe(w),W(true),H(),B&&t.onRevealed?.(m),I&&t.onActivated?.(m),oe();},isRevealed:m=>r.has(t.getKey(m)),isActivated:m=>u.has(t.getKey(m)),isSettledVisible:m=>v.has(t.getKey(m)),isScrolling:()=>X,notifyScroll:i,refresh(){F(),W(true),H(),oe();},reset(){L(),Q(),ee(false),x=false,ne([]),Z([]),ae(),P.clear(),q.clear(),r.clear(),u.clear();},dispose(){M||(L(),Q(),ee(false),x=false,ne([]),Z([]),ae(),P.clear(),q.clear(),r.clear(),u.clear(),M=true);}}}function xn(t){let a=new Map,b=new Map,c=shallowReactive(new Map),g=[],$=false,j=r=>{let u=a.get(r.channel);return u===void 0?r.channel:`${r.channel}\0${u.getKey(r.item)}`},A=vt({getRoot:t.getRoot,getKey:r=>r.key,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:r=>{for(let u of a.values())u.onScrollingChange?.(r);},onRevealed:r=>r.targets.forEach(u=>a.get(u.channel)?.onRevealed?.(u.item)),onActivated:r=>r.targets.forEach(u=>a.get(u.channel)?.onActivated?.(u.item)),onSettledPreloadChange:r=>{let u=r.flatMap(v=>v.targets);for(let[v,N]of a){let T=u.filter(E=>E.channel===v).map(E=>E.item);N.onSettledPreloadChange?.(T.slice(0,Math.max(0,N.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:r=>{K(r.flatMap(u=>u.targets));}});function K(r){g=r;for(let[u,v]of a){let N=r.filter(E=>E.channel===u).map(E=>E.item),T=v.maxSettledVisible===void 0?N:N.slice(0,v.maxSettledVisible);v.onSettledVisibleChange?.(T);}}function P(r){let u=[...b.values()].flatMap(T=>[...T.values()].filter(E=>E.element===r).map(E=>E.target)),v=c.get(r);if(v!==void 0&&u.length===v.targets.length&&u.every((T,E)=>T===v.targets[E]))return;if(u.length===0)v!==void 0&&(c.delete(r),[...c.values()].some(T=>T.key===v.key)||A.register(v,null));else {let T={key:JSON.stringify(u.map(j)),targets:u};c.set(r,T),A.register(T,r);}let N=g.filter(T=>b.get(T.channel)?.get(a.get(T.channel).getKey(T.item))?.target===T);N.length!==g.length&&K(N);}function q(r){return u=>{if($)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(a.has(r))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${r}`);a.set(r,u);let v=shallowReactive(new Map);b.set(r,v);let N=false,T=x=>({channel:r,item:x});function E(){let x=[...v.values()].map(M=>M.element);v.clear();for(let M of x)P(M);u.onScrollingChange?.(false),u.onSettledVisibleChange?.([]),u.onSettledPreloadChange?.([]);}function U(x,M){let k=v.get(u.getKey(x)),O=k===void 0?void 0:c.get(k.element);return O!==void 0&&M(O)}return {register(x,M){if(N||$)return;let k=u.getKey(x),O=v.get(k);if(M===null){O!==void 0&&(v.delete(k),P(O.element));return}if(O?.target.item===x&&O.element===M){let L=c.get(M);L!==void 0&&A.register(L,M);return}let J=O?.target.item===x?O.target:T(x);for(let[L,Q]of v)L!==k&&Q.element===M&&v.delete(L);v.set(k,{target:J,element:M}),P(M),O!==void 0&&O.element!==M&&P(O.element);},isRevealed:x=>U(x,A.isRevealed),isActivated:x=>U(x,A.isActivated),isSettledVisible:x=>U(x,A.isSettledVisible),isScrolling:A.isScrolling,notifyScroll:A.notifyScroll,refresh:A.refresh,reset:E,dispose(){N||(E(),N=true,a.delete(r),b.delete(r));}}}}return {createFactory:q,refresh:A.refresh,dispose(){if(!$){for(let r of c.values())A.register(r,null);c.clear();for(let r of a.values())r.onSettledPreloadChange?.([]);b.clear(),a.clear(),A.dispose(),$=true;}}}}export{at as ImThreadBodySwitch,lt as ImThreadItems,Rn as ImThreadSurface,ut as ImThreadViewport,hn as createImThreadSurfaceContext,Sn as createMessageRendererRegistry,xn as createThreadVisibilityTargetGroup,vt as createThreadVisibilityTargets,yn as provideImThreadSurfaceContext,Jt as useImText,ct as useImThreadSurfaceContext,en as useOptionalImThreadReadActions};