k2-im 0.1.47 → 0.1.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.js +1 -1
- package/dist/chat-kit-pinia.d.ts +17 -8
- package/dist/chat-kit-pinia.js +1 -1
- package/dist/chat-kit-vue.d.ts +33 -7
- package/dist/chat-kit-vue.js +1 -1
- package/dist/chat-kit.d.ts +9 -6
- package/dist/chat-kit.js +1 -1
- package/dist/chunk-527YCOBJ.js +2 -0
- package/dist/chunk-A6UPH4T4.js +1 -0
- package/dist/{chunk-EQWMFGJV.js → chunk-EQSL3SQW.js} +1 -1
- package/dist/chunk-SEFYSJSB.js +2 -0
- package/dist/chunk-SWWW7C2U.js +7 -0
- package/dist/{chunk-QZEZUDJQ.js → chunk-YOS2232I.js} +1 -1
- package/dist/chunk-ZUL5OBYN.js +1 -0
- package/dist/i18n.d.ts +7 -4
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +31 -14
- package/dist/index.js +1 -1
- package/dist/sdk.d.ts +31 -14
- package/dist/sdk.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-7DVPMFWS.js +0 -1
- package/dist/chunk-7PCBQBZL.js +0 -2
- package/dist/chunk-M4QPM7FW.js +0 -2
- package/dist/chunk-R3MSZLO6.js +0 -7
- package/dist/chunk-TIIRB2JK.js +0 -1
package/dist/chat-kit-vue.d.ts
CHANGED
|
@@ -592,20 +592,21 @@ interface ImMediaAlbumBody {
|
|
|
592
592
|
/** 媒体项,顺序即用户选择顺序(决定宫格 index 与首项朝向)。 */
|
|
593
593
|
items: readonly ImMediaAlbumItem[];
|
|
594
594
|
}
|
|
595
|
-
/** 直播间分享的直播类型。wire `liveType`:1 视频、2 语音、3 双手机、4 单手机录屏、5
|
|
595
|
+
/** 直播间分享的直播类型。wire `liveType`:1 视频、2 语音、3 双手机、4 单手机录屏、5 语聊房。空字符串对应 wire 0,表示调用方没有类型,不猜成某一种直播。 */
|
|
596
596
|
type ImLiveRoomType = 'video' | 'voice' | 'dual-phone' | 'screen-record' | 'voice-chat';
|
|
597
597
|
/** 直播间分享的房间状态。wire `liveRoomStatus`:1 预告、2 直播中、3 已结束。 */
|
|
598
598
|
type ImLiveRoomStatus = 'preview' | 'live' | 'ended';
|
|
599
599
|
/**
|
|
600
|
-
* 直播间分享卡片正文(contentType==='liveRoom',协议 BMessage.contentType=30,fields 98-
|
|
600
|
+
* 直播间分享卡片正文(contentType==='liveRoom',协议 BMessage.contentType=30,fields 98-113)。
|
|
601
601
|
*
|
|
602
602
|
* @remarks 调用方先拿到直播间快照再写入本结构。Core 不请求直播接口,也不把缺省枚举猜成某一种直播。
|
|
603
603
|
* `uid` 是声网 SDK 初始化用的 UID,不是 IM 用户 id。
|
|
604
604
|
*/
|
|
605
605
|
interface ImLiveRoomBody {
|
|
606
|
-
/** 直播间 ID(BMessage.liveRoomId
|
|
606
|
+
/** 直播间 ID(BMessage.liveRoomId)。没有房间号时为空字符串。 */
|
|
607
607
|
liveRoomId: string;
|
|
608
|
-
|
|
608
|
+
/** 没有直播类型时为空字符串。 */
|
|
609
|
+
liveType: ImLiveRoomType | '';
|
|
609
610
|
liveRoomStatus: ImLiveRoomStatus;
|
|
610
611
|
/** 当前账号是否已关注主播。协议 bool 无法区分未设置,false 也是有效状态。 */
|
|
611
612
|
isFocus: boolean;
|
|
@@ -625,6 +626,8 @@ interface ImLiveRoomBody {
|
|
|
625
626
|
livePreviewId?: string;
|
|
626
627
|
/** 直播间人数字符串,保持协议原文,不在 Core 换算。 */
|
|
627
628
|
liveRoomViewers?: string;
|
|
629
|
+
/** 点赞数十进制字符串,保持协议原文,不在 Core 换算。 */
|
|
630
|
+
liveRoomLikes?: string;
|
|
628
631
|
}
|
|
629
632
|
interface ImMessageBody {
|
|
630
633
|
/** P0 文本内容(明文,解密后的结果)。 */
|
|
@@ -1849,6 +1852,18 @@ interface ImMessageRendererRegistry {
|
|
|
1849
1852
|
*/
|
|
1850
1853
|
declare function createMessageRendererRegistry(registrations: readonly ImMessageRendererRegistration[]): ImMessageRendererRegistry;
|
|
1851
1854
|
|
|
1855
|
+
/** 一次纯布局读取;返回的函数只提交测量结果,所有读取完成后才统一调用。 */
|
|
1856
|
+
type ThreadLayoutRead = () => (() => void) | undefined;
|
|
1857
|
+
/** 一个气泡的测量任务;尺寸变化、正文变化和组件释放均沿同一登记处理。 */
|
|
1858
|
+
interface ThreadLayoutMeasurement {
|
|
1859
|
+
/** 替换所需的尺寸观察节点;复用 Viewport 的 ResizeObserver。 */
|
|
1860
|
+
observe: (elements: readonly HTMLElement[]) => void;
|
|
1861
|
+
/** 内容或展示规则改变时请求下一批测量,同批重复调用只执行一次。 */
|
|
1862
|
+
invalidate: () => void;
|
|
1863
|
+
/** 取消未提交的结果并解除此任务的观察。 */
|
|
1864
|
+
dispose: () => void;
|
|
1865
|
+
}
|
|
1866
|
+
|
|
1852
1867
|
/** 会话 sibling 可插入 timeline 的无产品样式装饰项。 */
|
|
1853
1868
|
interface ImThreadEncryptionItem {
|
|
1854
1869
|
kind: 'encryption';
|
|
@@ -2003,7 +2018,9 @@ interface ThreadVisibilityTargetsOptions<TItem> {
|
|
|
2003
2018
|
getRoot: () => HTMLElement | null;
|
|
2004
2019
|
/** 返回目标在当前账号和会话内的稳定复合身份。 */
|
|
2005
2020
|
getKey: (item: TItem) => string;
|
|
2006
|
-
/**
|
|
2021
|
+
/** 同轮登记合并到 Vue 更新完成后、绘制前测量;默认保持同步登记。 */
|
|
2022
|
+
batchRegistration?: boolean;
|
|
2023
|
+
/** 节点首次进入视口时触发,适合创建缩略图或 poster。 */
|
|
2007
2024
|
onRevealed?: (item: TItem) => void;
|
|
2008
2025
|
/** 轻量资源在进入视口前多少像素开始准备;不会扩大稳定可见或高清缓存读取范围。 */
|
|
2009
2026
|
revealMarginPx?: number;
|
|
@@ -2051,6 +2068,8 @@ declare function createThreadVisibilityTargets<TItem>(options: ThreadVisibilityT
|
|
|
2051
2068
|
interface ThreadVisibilityTargetGroupOptions {
|
|
2052
2069
|
/** 返回 Managed Surface 的唯一滚动根。 */
|
|
2053
2070
|
getRoot: () => HTMLElement | null;
|
|
2071
|
+
/** 同轮媒体登记在 Vue 更新结束后统一测量,默认同步。 */
|
|
2072
|
+
batchRegistration?: boolean;
|
|
2054
2073
|
/** 所有通道共享的轻量资源预热距离。 */
|
|
2055
2074
|
revealMarginPx?: number;
|
|
2056
2075
|
/** 所有通道共享的停稳后 cache-only 近邻距离,不扩大实际可见范围。 */
|
|
@@ -2080,5 +2099,12 @@ interface ThreadVisibilityTargetGroup<TItem> {
|
|
|
2080
2099
|
*/
|
|
2081
2100
|
declare function createThreadVisibilityTargetGroup<TItem>(groupOptions: ThreadVisibilityTargetGroupOptions): ThreadVisibilityTargetGroup<TItem>;
|
|
2082
2101
|
|
|
2083
|
-
|
|
2084
|
-
|
|
2102
|
+
/**
|
|
2103
|
+
* 让 Surface 内的宿主气泡复用线程已有的尺寸观察和帧调度,不创建独立 Observer。
|
|
2104
|
+
* read 只读取布局并返回提交函数;内容改变调用 invalidate,节点改变调用 observe。
|
|
2105
|
+
* 必须在 ImThreadViewport/ImThreadSurface 的后代 setup 内调用,卸载自动释放任务。
|
|
2106
|
+
*/
|
|
2107
|
+
declare function useImThreadLayoutMeasurement(read: ThreadLayoutRead): ThreadLayoutMeasurement;
|
|
2108
|
+
|
|
2109
|
+
export { ImThreadBodySwitch, ImThreadItems, ImThreadSurface, ImThreadViewport, createImThreadSurfaceContext, createMessageRendererRegistry, createThreadVisibilityTargetGroup, createThreadVisibilityTargets, provideImThreadSurfaceContext, useImText, useImThreadLayoutMeasurement, useImThreadSurfaceContext, useOptionalImThreadReadActions };
|
|
2110
|
+
export type { ImHostEnvironment, ImHostSession, ImMessageRendererRegistration, ImMessageRendererRegistry, ImTextContext, ImThreadActiveDateSlotState, ImThreadEntryUnreadNavigationResult, ImThreadInitialViewportOptions, ImThreadSurfaceActions, ImThreadSurfaceContext, ImThreadSurfaceHooks, ImThreadSurfaceSlotActions, ImThreadSurfaceState, ImThreadViewportExposed, ImThreadViewportOptions, ImThreadViewportSettledSnapshot, ThreadLayoutMeasurement, ThreadLayoutRead, ThreadVisibilityTargetGroup, ThreadVisibilityTargetGroupOptions, ThreadVisibilityTargets, ThreadVisibilityTargetsFactory, ThreadVisibilityTargetsOptions };
|
package/dist/chat-kit-vue.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-7DVPMFWS.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-EQWMFGJV.js';import'./chunk-M4QPM7FW.js';import'./chunk-R3MSZLO6.js';import'./chunk-7PCBQBZL.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,O,p$1,w,U=false,X,x=new Set,R=false,k,V="",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),M=ref(0),f=C(e=>{M.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 T=s.getBoundingClientRect(),S=s.querySelector("[data-im-thread-anchor-point]");return [{id:o,top:T.top,bottom:T.bottom,anchorTop:S?.getBoundingClientRect().top??T.top}]})}function re(e="",o=1){let s=Math.min(1,Math.max(0,o));V!==""&&V!==e&&q$1.get(V)?.element.style.removeProperty("opacity"),V=e,J=s,e!==""&&q$1.get(e)?.element.style.setProperty("opacity",String(s));}function C$1(){re();}function z$1(){let e=g$1.value;if(R||e===null||!t.activeDateEnabled)return;let o=[...q$1.entries()].filter(([,_])=>e.contains(_.element)).map(([_,N])=>{let fe=N.element.getBoundingClientRect();return {key:_,label:N.label,top:fe.top,height:fe.height}}).sort((_,N)=>_.top-N.top),s=e.getBoundingClientRect(),T=o.find(_=>_.height>0)?.height??28,S=g({markers:o,viewportTop:s.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:T});if(S===null){C$1(),a("active-date-change",null);return}re(S.inlineDateKey,S.inlineOpacity),a("active-date-change",S);}function ye(e){O={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Pe(e){let o=O;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 T=O;if(T===void 0)return false;let S=v,_=S===void 0?void 0:I([S.id])[0],N=e.scrollTop-T.scrollTop,fe=Pe(e)?0:N,Se=S===void 0||_===void 0?0:(_.anchorTop??_.top)-o.top-S.offset+N;return T.scrollHeight!==e.scrollHeight||T.width!==e.clientWidth||T.height!==e.clientHeight||Math.abs(Se)>Be?(O=void 0,!L&&!t.loadingNewer&&!t.hasNewer&&t.resizeFollowEnabled&&m$1.value&&Math.abs(fe)<=Be?(le(),true):(S!==void 0&&xe({...S,offset:S.offset-fe}),_e(e,s),false)):false}function ke(){let e=g$1.value;if(R||e===null)return;let o$1=e.getBoundingClientRect();if(qe(e,o$1))return;let s=w!==void 0&&U?t.messageIds.filter(N=>P.has(N)):t.messageIds,T=I(s);if(w!==void 0&&U&&T.length===0){m$1.value=B$1(e);return}let S=T.filter(N=>B({viewportTop:o$1.top,viewportBottom:o$1.bottom,messageTop:N.top,messageBottom:N.bottom,margin:t.visibleMargin})).map(N=>N.id),_=S.length!==u.length||S.some((N,fe)=>u[fe]!==N);u=Object.freeze(S),v=o(T,{top:o$1.top,bottom:o$1.bottom}),ye(e),f.acknowledgeVisible(S),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:M.value});}function Ae(e){if(x.add(e),X!==void 0)return;let o=()=>{X=void 0;let s=[...x];x.clear(),s.forEach(T=>T());};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(R||e===null)return;let o=e.scrollTop,s=Pe(e),T=k,S=false;if(T!==void 0){let N=Math.abs(o-T.targetTop)<=dt(e);S=T.behavior==="smooth"||N,(T.behavior!=="smooth"||N)&&(k=void 0);}!S&&!s&&!G&&F===void 0&&o!==r&&(G=true,H=true,Z+=1);let _=G&&!S&&!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&&!S)if(G){let N=Ce();N!==void 0&&(F.expectedOffset=N);}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:S})&&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,O=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(T=>T.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(R||e===null||o===void 0||G)return;let s=o.visualOffset;if(Math.abs(s)<=Be){o.committed=true,Xe();return}let T=Math.max(0,e.scrollHeight-e.clientHeight),S=Math.min(T,Math.max(0,e.scrollTop-s));if(De(S),e.scrollTop=S,Math.abs(e.scrollTop-S)>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(),T=q(e,I(),{top:s.top,bottom:s.bottom});if(T!==void 0){let S=Math.max(0,o.scrollHeight-o.clientHeight),_=Math.min(S,Math.max(0,o.scrollTop+T));De(_),o.scrollTop=_,r=o.scrollTop,O=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,O=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 h(){ne=false,ee=void 0,ve();}function y(e){Me(),e.deltaY<0?se():e.deltaY>0&&Ve(),ve();}function E(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;O=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 T=s.getBoundingClientRect(),S=e.getBoundingClientRect(),_=o.block??"center",N;_==="start"?N=s.scrollTop+S.top-T.top:_==="end"?N=s.scrollTop+S.bottom-T.bottom:_==="nearest"?S.top>=T.top&&S.bottom<=T.bottom?N=s.scrollTop:S.top<T.top?N=s.scrollTop+S.top-T.top:N=s.scrollTop+S.bottom-T.bottom:N=j({currentScrollTop:s.scrollTop,scrollHeight:s.scrollHeight,targetHeight:S.height,targetTop:S.top,viewportHeight:s.clientHeight,viewportTop:T.top});let fe=Math.max(0,s.scrollHeight-s.clientHeight),Se=Math.min(fe,Math.max(0,N));O=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,T=e.clientHeight/2;return {older:s<T-1,newer:e.scrollHeight-s<T-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&&(w?.unobserve(s),p$1?.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),w?.observe(o),p$1?.observe(o),Te();}function Yt(e,o,s){let T=q$1.get(e);if(s===null){q$1.delete(e);return}q$1.set(e,{element:s,label:o}),V===e&&s.style.setProperty("opacity",String(J)),T?.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 T=new Set(o);o.length>0&&e.length>0&&!e.some(Oe=>T.has(Oe))&&Re();let _=s.getBoundingClientRect(),N=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=>!T.has(Oe)),ht=L||t.loadingNewer,$t=e.length===o.length&&e.every(Oe=>T.has(Oe))&&e.some((Oe,ot)=>Oe!==o[ot]);if(await nextTick(),R)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(N)),rt.length>0){if(ht){L=false,F===void 0&&xe(N),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",h,{passive:true}),e.addEventListener("touchcancel",h,{passive:true}),e.addEventListener("wheel",y,{passive:true}),e.addEventListener("pointerdown",E,{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"){p$1=new globalThis.ResizeObserver(()=>{R||g$1.value===null||ke();}),p$1.observe(e),$.value!==null&&p$1.observe($.value);for(let o of j$1.values())p$1.observe(o);}if(typeof globalThis.IntersectionObserver=="function"){w=new globalThis.IntersectionObserver(o=>{for(let s of o){let T=K.get(s.target);T!==void 0&&(s.isIntersecting?P.add(T):P.delete(T));}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())w.observe(o);}Te();}}),onBeforeUnmount(()=>{R=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",h),e.removeEventListener("touchcancel",h),e.removeEventListener("wheel",y),e.removeEventListener("pointerdown",E),e.removeEventListener("pointermove",Y),e.removeEventListener("pointerup",ie),e.removeEventListener("pointercancel",ie),e.removeEventListener("keydown",pe)),i!==void 0&&clearTimeout(i),be(),Ge(),p$1?.disconnect(),w?.disconnect(),C$1(),A=void 0,j$1.clear(),K.clear(),P.clear(),q$1.clear(),f.clear();}),b({getViewportElement:()=>g$1.value,clearNewMessageBadge:qt,clearActiveDate:C$1,isAtBottom:computed(()=>m$1.value),isMeasurable:Ne,isScrollable:nt,newMessageCount:computed(()=>M.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),O=false,p,w=ref(true),U=[],X,x=0,R=0,k,V=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})),M=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 C(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){C();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,C();},l);}async function ye(n,d,l){t.hooks?.beforeAction?.(n);try{let h=await d();return l?.()!==!1&&t.hooks?.afterAction?.(n,h),h}catch(h){throw l?.()!==false&&t.hooks?.onError?.(n,h),h}}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,h=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!l||h!==null||(n==="older"?await Pe("user-scroll"):await Ue())>0)return;let E=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,Y=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!E||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,h=++x;V=null,Q="";let y;try{y=await ye(n,d);}catch(E){throw ue(l,h)&&(Q=l),E}return ue(l,h)&&!H.value&&(V=null,Me()),y}async function Te(){if(!D.value)return false;let n=f.value;Re();let d=++R;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 h=i$1.value.entryUnreadNavigation;r.value=h?.state==="located"&&U.includes(h.firstMessageId),H.value&&r.value&&(j.value=true);let y=l==null?0:Math.max(0,l.scrollHeight-l.clientHeight-l.scrollTop);v.value=h!==void 0&&y>50,n&&h!==void 0&&l!==null&&l!==void 0&&l.clientHeight>0&&y>=l.clientHeight&&(j.value=true);}function Le(){let n=c.actions.markConversationRead;if(n===void 0||!F.value||!D.value||!H.value||A.value||O&&(!w.value||i$1.value.hasNewer)||p!==void 0||i$1.value.error!==null)return;let d=f.value,l=n().then(()=>{p===l&&d===f.value&&(O=true);}).catch(h=>{!G&&p===l&&d===f.value&&t.hooks?.onError?.({kind:"mark-conversation-read"},h);}).finally(()=>{p===l&&(p=void 0);});p=l;}async function We(){let n=c.actions.loadEntryUnread;if(!D.value||A.value||n===void 0)return "cancelled";let d=f.value,l=++R;K.value=false;let h=new AbortController;q=h,P=l,A.value=true,se(true),W=true;try{let y=await ye({kind:"jump-to-entry-unread"},()=>n({signal:h.signal}),()=>te(d,l));if(!te(d,l))return "cancelled";if(!y||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(y){if(!te(d,l))return "cancelled";throw y}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(h=>window.requestAnimationFrame(()=>h()));}return false}function Ye(n){w.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&&R===d&&f.value===n&&D.value}async function De(n,d,l,h){for(let y=0;y<60;y+=1){if(!te(n,d))return false;if(Ve(l,h))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(E=>window.requestAnimationFrame(()=>E()));}return false}async function $e(n,d){let l=g.value;if(l===null||!l.isMeasurable()||l.isScrollable())return true;let h=0,y=!i$1.value.hasOlder,E=!i$1.value.hasNewer||c.actions.loadNewer===void 0,Y=()=>te(n,d),ie=async le=>{if(!te(n,d)||h>=M.value.maxFillPages)return false;let Ne=0;if(le==="older"){if(y||!i$1.value.hasOlder)return false;Ne=await Pe("automatic",Y),y=!i$1.value.hasOlder;}else {if(E||!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(),E=!i$1.value.hasNewer;}return h+=1,await nextTick(),await nextTick(),te(n,d)&&(Ne>0||!(le==="older"?y:E))};!y&&!await ie("older")&&(y=true),!E&&!await ie("newer")&&(E=true);let pe="older";for(;te(n,d)&&h<M.value.maxFillPages&&l.isMeasurable()&&!l.isScrollable()&&(!y||!E);){let le=pe==="older"?y?"newer":"older":E?"older":"newer";pe=le==="older"?"newer":"older",await ie(le)||(le==="older"?y=true:E=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 h=K.value||k!==void 0||(i$1.value.loadingOlder??i$1.value.loading)||(i$1.value.loadingNewer??i$1.value.loading),y=++R;K.value=true,se(true),W=true,J=l,L=xe(we());let E=()=>te(l,y);try{if(h||!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),E)||!E())return !1}finally{k===ie&&(k=void 0);}}return await nextTick(),await nextTick(),!E()||!await $e(l,y)?!1:await De(l,y,n,d)}finally{R===y&&(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 E=U;l(E).catch(Y=>{t.hooks?.onError?.({kind:"visible-range",messageIds:E},Y);});return}if(n===void 0)return;let h=U[U.length-1];if(h===void 0)return;let y=n.resolveTarget===void 0?h:n.resolveTarget(h);y!=null&&Promise.resolve(n.markRead(y)).catch(E=>{t.hooks?.onError?.({kind:"visible-range",messageIds:U},E);});},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 h=0;h<60;h+=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(E=>window.requestAnimationFrame(()=>E()));}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||V!==null)return;if(!M.value.enabled){J=n,L=d,H.value=true,Ie();return}let l=++x;W=false,H.value=false;let h=(async()=>{if(await nextTick(),!ue(n,l))return;let y=g.value;if(y===null||!y.isMeasurable())return;let E=we();if(E.state==="located"&&!I.value.includes(E.firstMessageId))return;let Y=E.state==="located"?await Ke(n,l,E.firstMessageId):false;if(E.state==="located"&&!Y)return;Y||y.scrollToLatest();let ie=0;for(;ue(n,l)&&ie<M.value.maxFillPages&&i$1.value.error===null&&(i$1.value.hasOlder||i$1.value.hasNewer&&c.actions.loadNewer!==void 0)&&y.isMeasurable()&&!y.isScrollable();){if(i$1.value.hasNewer&&c.actions.loadNewer!==void 0&&(i$1.value.messages.length===0||!i$1.value.hasOlder)){let le=R;y.prepareHistoryPageAppend();try{await Ue(),await nextTick();}finally{f.value===n&&R===le&&(x===l||W)&&y.cancelHistoryPageAppend();}}else await Pe();if(!ue(n,l)||(ie+=1,await nextTick(),await nextTick(),!y.isMeasurable()))return}if(!ue(n,l)||!y.isMeasurable())return;let pe=we();if(pe.state==="located"){if(!I.value.includes(pe.firstMessageId)||!await Ke(n,l,pe.firstMessageId))return}else y.scrollToLatest();await nextTick(),je(n,l);})().catch(()=>{ue(n,l)&&(Q=n);}).finally(()=>{V===h&&(V=null);});V=h;}function se(n,d=false){x+=1,V=null,W=false,H.value=n,n||(J="",L="",d||(Q="")),Ce();}function Re(){q!==void 0&&(R+=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,V=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:w.value,isHistoryWindow:i$1.value.isHistoryWindow,isPageVisible:ae.value})&&(w.value=false);},{flush:"post"}),watch(()=>i$1.value.pendingLocationMessageId??"",n=>{(n!==""||K.value)&&(R+=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()),M,()=>i$1.value.hasNewer,ee],([n,d,l,h,,y],[E,,,Y,,ie])=>{if(n!==E&&(Re(),R+=1,K.value=false,k=void 0,se(false),C(true),g.value?.clearNewMessageBadge(),$.value=0,w.value=true,U=[],j.value=false,r.value=false,u.value=false,v.value=false,A.value=false,P=void 0,O=false,p=void 0),n!==""&&n===E&&Y!==void 0&&Y>0&&h===0&&(i$1.value.hasOlder||i$1.value.hasNewer)&&H.value&&se(false,true),n!==""&&n===E&&y!==ie&&!L.startsWith("located:")&&!W&&y.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(),R+=1,se(false),C(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:h=>{let y=i$1.value.messages.find(E=>E.id===h);return y===void 0?false:c.shouldFollowMessage?.(y)===true},onReachStart:()=>{qe("older").catch(()=>{});},onReachEnd:()=>{qe("newer").catch(()=>{});},onSettled:Ye,onUserScroll:Je,onActiveDateChange:z,onVisibleRange:Xe,onNewMessageCount:h=>{$.value=h;}},{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||!w.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,O=[],p=null,w=null,U=null,X=false,x=false,R=false,k=false,V,J;function L(){V!==void 0&&clearTimeout(V),V=void 0;}function Q(){J!==void 0&&clearTimeout(J),J=void 0;}function W(m=false){if(!m&&w!==null||p===null)return;let M=p.getBoundingClientRect(),f=gt(M,j);for(let[B,I]of P){let re=B.getBoundingClientRect();I.ratio=tt(re,M),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,M]of P)!M.revealIntersecting||r.has(M.key)||j>g&&(g===0&&!G(M)||g>0&&(p===null||tt(m.getBoundingClientRect(),gt(p.getBoundingClientRect(),g))<=0))||(r.add(M.key),t.onRevealed?.(M.item));}function ne(m,M=false){let f=new Set(m.map(I=>I.key));if(!(!(f.size!==v.size||[...f].some(I=>!v.has(I)))&&!M)){v.clear();for(let I of f)v.add(I);t.onSettledVisibleChange?.(m.map(I=>I.item));}}function Z(m,M=false){!M&&m.length===O.length&&m.every((f,B)=>f.key===O[B]?.key&&f.item===O[B]?.item)||(O=m,t.onSettledPreloadChange?.(m.map(f=>f.item)));}function ce(){if(R||X)return;let m=x;x=false,W(),H();let M=p?.getBoundingClientRect(),f=M===void 0?0:(M.top+M.bottom)/2,B=[...P.entries()].filter(([,I])=>G(I)).sort(([I],[re])=>{let C=I.getBoundingClientRect(),z=re.getBoundingClientRect();return Math.abs((C.top+C.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&&M!==void 0){let I=gt(M,$),re=[...P.entries()].filter(([,C])=>C.revealIntersecting).map(([C,z])=>({target:z,rect:C.getBoundingClientRect()})).filter(({target:C,rect:z})=>G(C)||$>0&&tt(z,I)>0).sort((C,z)=>Number(G(z.target))-Number(G(C.target))||Math.abs((C.rect.top+C.rect.bottom)/2-f)-Math.abs((z.rect.top+z.rect.bottom)/2-f)).slice(0,A).map(({target:C})=>C);Z(re,m);}for(let I of B)u.has(I.key)||(u.add(I.key),t.onActivated?.(I.item));}function oe(){R||X||(Q(),J=setTimeout(()=>{J=void 0,ce();},b));}function i(){R||(x=true,ee(true),Z([]),W(),H(),ne([]),Q(),L(),V=setTimeout(()=>{V=void 0,ee(false),oe();},a));}function ee(m){X!==m&&(X=m,t.onScrollingChange?.(m));}function ae(){p?.removeEventListener("scroll",i),w?.disconnect(),U?.disconnect(),w=null,U=null,p=null;}function F(m=true){if(R)return;let M=t.getRoot();if(!(M===p&&p!==null)){if(Z([]),ae(),p=M,p===null){m&&!k&&(k=true,Promise.resolve().then(()=>{k=false,R||(F(false),oe());}));return}if(p.addEventListener("scroll",i,{passive:true}),typeof IntersectionObserver<"u"){w=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:p,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:p,rootMargin:`${j}px 0px`,threshold:0}));for(let f of P.keys())w.observe(f);for(let f of P.keys())U?.observe(f);}else W(),H();}}function D(m){Z(O.filter(M=>M.key!==m)),r.delete(m),u.delete(m),v.delete(m);}return {register(m,M){if(R)return;let f=t.getKey(m),B=r.has(f),I=u.has(f),re=M===null?void 0:P.get(M);re!==void 0&&re.key!==f&&(q.delete(re.key),P.delete(M),D(re.key));let C=q.get(f);if(C!==void 0&&C!==M&&(w?.unobserve(C),U?.unobserve(C),P.delete(C),q.delete(f)),M===null){C!==void 0&&(w?.unobserve(C),U?.unobserve(C),P.delete(C),q.delete(f)),D(f);return}let z=P.get(M);if(z?.key===f&&z.item===m){F();return}P.set(M,{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,M),F(),w?.observe(M),U?.observe(M),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(){R||(L(),Q(),ee(false),x=false,ne([]),Z([]),ae(),P.clear(),q.clear(),r.clear(),u.clear(),R=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,O]of a){let p=u.filter(w=>w.channel===v).map(w=>w.item);O.onSettledPreloadChange?.(p.slice(0,Math.max(0,O.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:r=>{K(r.flatMap(u=>u.targets));}});function K(r){g=r;for(let[u,v]of a){let O=r.filter(w=>w.channel===u).map(w=>w.item),p=v.maxSettledVisible===void 0?O:O.slice(0,v.maxSettledVisible);v.onSettledVisibleChange?.(p);}}function P(r){let u=[...b.values()].flatMap(p=>[...p.values()].filter(w=>w.element===r).map(w=>w.target)),v=c.get(r);if(v!==void 0&&u.length===v.targets.length&&u.every((p,w)=>p===v.targets[w]))return;if(u.length===0)v!==void 0&&(c.delete(r),[...c.values()].some(p=>p.key===v.key)||A.register(v,null));else {let p={key:JSON.stringify(u.map(j)),targets:u};c.set(r,p),A.register(p,r);}let O=g.flatMap(p=>{let w=b.get(p.channel)?.get(a.get(p.channel).getKey(p.item));return w===void 0?[]:[w.target]});(O.length!==g.length||O.some((p,w)=>p!==g[w]))&&K(O);}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 O=false,p=x=>({channel:r,item:x});function w(){let x=[...v.values()].map(R=>R.element);v.clear();for(let R of x)P(R);u.onScrollingChange?.(false),u.onSettledVisibleChange?.([]),u.onSettledPreloadChange?.([]);}function U(x,R){let k=v.get(u.getKey(x)),V=k===void 0?void 0:c.get(k.element);return V!==void 0&&R(V)}return {register(x,R){if(O||$)return;let k=u.getKey(x),V=v.get(k);if(R===null){V!==void 0&&(v.delete(k),P(V.element));return}if(V?.target.item===x&&V.element===R){let L=c.get(R);L!==void 0&&A.register(L,R);return}let J=V?.target.item===x?V.target:p(x);for(let[L,Q]of v)L!==k&&Q.element===R&&v.delete(L);v.set(k,{target:J,element:R}),P(R),V!==void 0&&V.element!==R&&P(V.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:w,dispose(){O||(w(),O=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};
|
|
1
|
+
import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-ZUL5OBYN.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-EQSL3SQW.js';import'./chunk-SEFYSJSB.js';import'./chunk-SWWW7C2U.js';import'./chunk-527YCOBJ.js';import'./chunk-WOT6VMZA.js';import {defineComponent,h as h$1,onUpdated,onUnmounted,ref,provide,watch,nextTick,onMounted,onBeforeUnmount,computed,inject,isVNode,cloneVNode,Fragment,reactive,shallowReactive}from'vue';function dn(t){let o=0,v=0;for(let f of t)f.kind==="video"?v+=1:o+=1;return {imageCount:o,videoCount:v}}function un(t){return {systemMessage:o=>o.body.system!==void 0?g$1(o.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:o=>i$1(o.contentType,{locale:t.locale(),durationMs:o.body.voice?.durationMs,stickerImageType:o.body.sticker?.imageType,gameType:o.body.game?.gameType,callKind:o.body.call?.callKind,...o.body.filesAlbum===void 0?{}:{filesAlbum:{count:o.body.filesAlbum.items.length,caption:o.body.filesAlbum.caption}},...o.body.mediaAlbum===void 0?{}:{mediaAlbum:dn(o.body.mediaAlbum.items)}}),lastMessage:o=>o.lastMessageSummary!==void 0?h$2(o.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):o.lastMessagePreview,failureText:o=>o.failure?.displayCode!==void 0?f(o.failure.displayCode,{locale:t.locale(),mediaKind:o.failure.mediaKind,params:o.failure.params}):o.failure?.message??""}}var jt=Symbol("ImThreadReadActions");function _t(t){provide(jt,t);}function mn(){return inject(jt,void 0)}var mt=defineComponent({name:"ImThreadBodySwitch",inheritAttrs:false,props:{message:{type:Object,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{attrs:o,slots:v}){return _t(t.readActions),()=>{let f=h(t.message),m=t.rendererRegistry.resolve(f);return m!==void 0?h$1(m,{...o,message:t.message,presentation:t.presentation}):v["unsupported-body"]!==void 0?v["unsupported-body"]({kind:f,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":f,"aria-hidden":"true"})}}});var gt=Symbol("ImThreadViewportRegistration");function rt(){return inject(gt,void 0)}var vt=defineComponent({name:"ImThreadItems",props:{items:{type:Array,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{slots:o}){let v=rt(),f=new Map,m=new Map;onUpdated(()=>{let a=new Set,h=new Set;for(let c of t.items)c.kind==="message"||c.kind==="system"?a.add(c.key):c.kind==="date-separator"&&h.add(c.key);for(let c of f.keys())a.has(c)||f.delete(c);for(let c of m.keys())h.has(c)||m.delete(c);}),onUnmounted(()=>{f.clear(),m.clear();});function V(a,h){let c=Array.isArray(h)?h:[h];return c.length===1&&isVNode(c[0])?cloneVNode(c[0],{key:a}):h$1(Fragment,{key:a},c)}function U(a,h){let c=f.get(a);if(c?.messageId===h)return c.setElement;let M=H=>{v?.registerMessageNode(h,H instanceof HTMLElement?H:null);};return f.set(a,{messageId:h,setElement:M}),M}function k(a,h){let c=m.get(a);if(c!==void 0)return c.label=h,c.setElement;let M={label:h,setElement:H=>{v?.registerDateNode(a,M.label,H instanceof HTMLElement?H:null);}};return m.set(a,M),M.setElement}function R(a){return o.encryption?.({item:a})??h$1("div",{"data-im-thread-encryption":a.key})}function g(a){let h=k(a.key,a.label);return o["date-separator"]?.({item:a,setElement:h})??h$1("div",{ref:h,"data-im-thread-date-separator":a.key},a.label)}function L(a){v?.registerEntryUnreadNode(a instanceof HTMLElement?a:null);}function u(a){return o["entry-unread"]?.({item:a,setElement:L})??h$1("div",{ref:L,"data-im-thread-entry-unread":a.key,...a.count===void 0?{}:{"data-count":String(a.count)}})}function T(a){let h=U(a.key,a.message.id);return o.item!==void 0?o.item({item:a,setElement:h}):o.message!==void 0?o.message({item:a,setElement:h}):a.message.deletedForEveryone!==void 0?o["deleted-message"]?.({item:a,setElement:h})??h$1("article",{ref:h,"data-im-thread-message-id":a.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):a.message.recalled!==void 0?o["recalled-message"]?.({item:a,setElement:h})??h$1("article",{ref:h,"data-im-thread-message-id":a.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):a.kind==="system"&&o.system!==void 0?o.system({item:a,setElement:h}):h$1("article",{ref:h,"data-im-thread-message-id":a.message.id,"data-first-of-run":a.kind==="message"?String(a.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(mt,{message:a.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":o["unsupported-body"]===void 0?void 0:c=>o["unsupported-body"]?.(c)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(a=>{switch(a.kind){case "encryption":return o.item!==void 0?V(a.key,o.item({item:a})):V(a.key,R(a));case "date-separator":return o.item!==void 0?V(a.key,o.item({item:a,setElement:k(a.key,a.label)})):V(a.key,g(a));case "entry-unread":return o.item!==void 0?V(a.key,o.item({item:a,setElement:L})):V(a.key,u(a));case "system":case "message":return V(a.key,T(a))}return a}))}});function Qe(){let t,o=0,v=0,f;function m(){t!==void 0&&clearTimeout(t),t=void 0,f=void 0;}function V(){t=void 0;let k=o-performance.now();if(k>0){v=o,t=setTimeout(V,k);return}let R=f;f=void 0,R?.();}function U(k,R){o=performance.now()+R,f=k,!(t!==void 0&&o>=v)&&(t!==void 0&&clearTimeout(t),v=o,t=setTimeout(V,R));}return {schedule:U,cancel:m}}function qt(t){let o=new Set,v=new Map,f=new Set;function m(){let R=[...f];f.clear();let g=[],L=[];for(let u of R)if(u.active)try{g.push({job:u,commit:u.read()});}catch(T){L.push(T);}for(let{job:u,commit:T}of g)if(u.active)try{T?.();}catch(a){L.push(a);}L.length>0&&queueMicrotask(()=>{throw new AggregateError(L,"Thread layout measurement failed")});}function V(R){R.active&&(f.add(R),t.requestFrame(m));}function U(R,g){let L=v.get(g);L?.delete(R),L?.size===0&&(v.delete(g),t.unobserve(g));}function k(R){let g={read:R,elements:new Set,active:true};return o.add(g),{observe(L){if(!g.active)return;let u=new Set(L),T=u.size!==g.elements.size||[...u].some(a=>!g.elements.has(a));for(let a of g.elements)u.has(a)||U(g,a);for(let a of u){if(g.elements.has(a))continue;let h=v.get(a);h===void 0&&(h=new Set,v.set(a,h),t.observe(a)),h.add(g);}g.elements=u,T&&u.size>0&&V(g);},invalidate:()=>V(g),dispose(){g.active=false,f.delete(g),o.delete(g);for(let L of g.elements)U(g,L);g.elements.clear();}}}return {register:k,hasTarget:R=>v.has(R),observeTargets:()=>v.forEach((R,g)=>t.observe(g)),resized:R=>R.forEach(g=>v.get(g)?.forEach(V)),invalidateAll:()=>o.forEach(V),dispose(){for(let R of o)R.active=false;o.clear(),f.clear(),v.clear();}}}var Wt=120,Pn=500,Ge=.5,An=8;function ht(t){let o=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(o!==void 0&&Number.isFinite(o)&&o>0?o:1)}var pt=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},pendingSendMessageIds:{type:Array,default:()=>[]},visibleMargin:{type:Number,default:8},resizeFollowEnabled:{type:Boolean,default:true},activeDateOffset:{type:Number,default:16},activeDateEnabled:{type:Boolean,default:false}},emits:{"reach-start":()=>true,"reach-end":()=>true,"visible-range":t=>true,settled:t=>true,"new-message-count":t=>true,"user-scroll":()=>true,"active-date-change":t=>true},setup(t,{emit:o$1,expose:v,slots:f}){let m$1=ref(null),V=ref(null),U=new Map,k,R=new Map,g$1=new Set,L=new Map,u=0,T=[],a,h,c,M,H=qt({requestFrame:ce,observe:e=>c?.observe(e),unobserve:e=>{e!==m$1.value&&e!==V.value&&!R.has(e)&&c?.unobserve(e);}}),oe,D=false,E,J=new Set,F=false,B$1,_=0,de="",ue=1,Z=false,N=false,ae=true,Y=false,ye=false,ee=true,i=false,X=0,ge=-1,Te=-1,q$1=Qe(),G,me,S,ie,te=ref(true),be=ref(0),Ie=C(e=>{be.value=e,o$1("new-message-count",e);});function Le(e){let r=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=r}function p$1(e=t.messageIds){return e.flatMap(r=>{let s=U.get(r);if(s===void 0)return [];let b=s.getBoundingClientRect(),A=s.querySelector("[data-im-thread-anchor-point]");return [{id:r,top:b.top,bottom:b.bottom,anchorTop:A?.getBoundingClientRect().top??b.top}]})}function O(e="",r=1){let s=Math.min(1,Math.max(0,r));de!==""&&de!==e&&L.get(de)?.element.style.removeProperty("opacity"),de=e,ue=s,e!==""&&L.get(e)?.element.style.setProperty("opacity",String(s));}function y(){O();}function P(){let e=m$1.value;if(F||e===null||!t.activeDateEnabled)return;let r=[...L.entries()].filter(([,K])=>e.contains(K.element)).map(([K,j])=>{let Ee=j.element.getBoundingClientRect();return {key:K,label:j.label,top:Ee.top,height:Ee.height}}).sort((K,j)=>K.top-j.top),s=e.getBoundingClientRect(),b=r.find(K=>K.height>0)?.height??28,A=g({markers:r,viewportTop:s.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:b});if(A===null){y(),o$1("active-date-change",null);return}O(A.inlineDateKey,A.inlineOpacity),o$1("active-date-change",A);}function C$1(e){h={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Q(e){let r=h;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)<=ht(e)}function z$1(e){return Q(e)||B$1!==void 0&&(B$1.behavior==="smooth"||Math.abs(e.scrollTop-B$1.targetTop)<=ht(e))?0:e.scrollTop-u}function ne(e,r){r!==0&&(u=e.scrollTop-r,B$1=void 0,Ye());}function Ae(e,r){let s=z$1(e);if(S!==void 0)return S.expectedOffset-=s,Me(),ne(e,s),Y||Ce(),false;let b=h;if(b===void 0)return false;let A=a,K=A===void 0?void 0:p$1([A.id])[0],j=e.scrollTop-b.scrollTop,Ee=Q(e)?0:j,Ne=A===void 0||K===void 0?0:(K.anchorTop??K.top)-r.top-A.offset+j;return b.scrollHeight!==e.scrollHeight||b.width!==e.clientWidth||b.height!==e.clientHeight||Math.abs(Ne)>Ge?(h=void 0,!Z&&!N&&!t.loadingOlder&&!t.loadingNewer&&!t.hasNewer&&t.resizeFollowEnabled&&te.value&&Math.abs(Ee)<=Ge?(_e(),true):(A!==void 0&&Ue({...A,offset:A.offset-Ee}),ne(e,s),false)):false}function W(){let e=m$1.value;if(F||e===null)return;let r=e.getBoundingClientRect();if(Ae(e,r))return;let s=oe!==void 0&&D?t.messageIds.filter(j=>g$1.has(j)):t.messageIds,b=p$1(s);if(oe!==void 0&&D&&b.length===0){te.value=Le(e);return}let A=b.filter(j=>B({viewportTop:r.top,viewportBottom:r.bottom,messageTop:j.top,messageBottom:j.bottom,margin:t.visibleMargin})).map(j=>j.id),K=A.length!==T.length||A.some((j,Ee)=>T[Ee]!==j);T=Object.freeze(A),a=o(b,{top:r.top,bottom:r.bottom}),C$1(e),Ie.acknowledgeVisible(A),te.value=Le(e),K&&o$1("visible-range",T),o$1("settled",{visibleMessageIds:T,...T.length===0?{}:{newestVisibleMessageId:T[T.length-1]},isAtBottom:te.value,newMessageCount:be.value});}function ce(e){if(J.add(e),E!==void 0)return;let r=()=>{E=void 0;let s=[...J];J.clear(),s.forEach(b=>b());};typeof globalThis.requestAnimationFrame=="function"?E=globalThis.requestAnimationFrame(r):E=globalThis.setTimeout(r,0);}function se(){E!==void 0&&(typeof E=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(E):globalThis.clearTimeout(E),E=void 0,J.clear());}function re(){ce(W);}function lt(){let e=m$1.value;if(e===null)return;let r=e.getBoundingClientRect(),s=o(p$1(),{top:r.top,bottom:r.bottom});s!==void 0&&(a=s,C$1(e));}function Ze(){return ae&&S===void 0&&!N&&!t.loadingOlder}function et(){lt(),ae=false,ge=X,N=true,te.value=false,o$1("reach-start"),ce(()=>{t.loadingOlder||(N=false);});}function We(e){return t.hasNewer&&!Z&&!t.loadingOlder&&!t.loadingNewer&&Le(e)}function le(){Z=true,te.value=false,Te=X,o$1("reach-end"),ce(()=>{t.loadingNewer||(Z=false);});}function Ke(){let e=m$1.value;e===null||X===Te||!We(e)||le();}function Ye(){let e=m$1.value;if(F||e===null)return;let r=e.scrollTop,s=Q(e),b=B$1,A=false;if(b!==void 0){let j=Math.abs(r-b.targetTop)<=ht(e);A=b.behavior==="smooth"||j,(b.behavior!=="smooth"||j)&&(B$1=void 0);}!A&&!s&&!Y&&ee&&S===void 0&&r!==u&&(Y=true,ye=true,X+=1);let K=Y&&!A&&!s&&r!==u;if(K&&(_+=1,o$1("user-scroll"),ce(P)),Y&&!i&&l(),!ae&&ye&&X!==ge&&r<u&&r>Re()&&Be(),S!==void 0&&!A)if(Y){let j=$e();j!==void 0&&(S.expectedOffset=j);}else Me(),Ce();Ze()&&K&&r>=0&&m({previousScrollTop:u,currentScrollTop:r,topThreshold:t.olderPrefetchThreshold})&&et(),K&&We(e)&&z({previousScrollTop:u,currentScrollTop:r,isAtBottom:Le(e),isHistoryWindow:t.hasNewer,isPageSettling:A})&&le(),u=r,re();}function qe(e,r="auto"){B$1={targetTop:e,behavior:r};}function Fe(e){let r=S,s=V.value;if(!(r===void 0||s===null)){if(r.visualOffset=Math.abs(e)<=Ge?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 we(){ie!==void 0&&(clearTimeout(ie),ie=void 0),S!==void 0&&S.visualOffset!==0&&(a=void 0,h=void 0);let e=V.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),S=void 0,B$1=void 0;}function $e(){let e=m$1.value,r=S;if(e===null||r===void 0)return;let s=U.get(r.anchor.id);return s===void 0?void 0:(s.querySelector("[data-im-thread-anchor-point]")??s).getBoundingClientRect().top-e.getBoundingClientRect().top}function Me(){let e=S,r=$e();if(e===void 0||r===void 0)return;let s=e.expectedOffset-r;Math.abs(s)<=Ge||(Fe(e.visualOffset+s),e.committed=false,e.attempts=0);}function tt(){ie!==void 0&&clearTimeout(ie),ie=setTimeout(()=>{ie=void 0,!(Y||S?.committed!==true)&&we();},Pn);}function Oe(){let e=m$1.value,r=S;if(F||e===null||r===void 0||Y)return;let s=r.visualOffset;if(Math.abs(s)<=Ge){r.committed=true,tt();return}let b=Math.max(0,e.scrollHeight-e.clientHeight),A=Math.min(b,Math.max(0,e.scrollTop-s));if(qe(A),e.scrollTop=A,Math.abs(e.scrollTop-A)>Ge){B$1=void 0,r.committed=false,r.attempts+=1,r.attempts<An?Ce():(we(),B$1=void 0,u=e.scrollTop);return}Fe(0),u=e.scrollTop,r.expectedOffset=$e()??r.expectedOffset,r.committed=true,r.attempts=0,tt();}function Ce(){ie!==void 0&&clearTimeout(ie),ie=setTimeout(()=>{ie=void 0,Oe();},Wt);}function nt(e){e!==void 0&&(S===void 0&&(S={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),Me(),!Y&&Oe());}function Ue(e){let r=m$1.value;if(r===null||e===void 0)return;let s=r.getBoundingClientRect(),b=q(e,p$1([e.id]),{top:s.top,bottom:s.bottom});if(b!==void 0){let A=Math.max(0,r.scrollHeight-r.clientHeight),K=Math.min(A,Math.max(0,r.scrollTop+b));qe(K),r.scrollTop=K,u=r.scrollTop,h=void 0;}}function Re(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function Ve(){_+=1,B$1?.behavior==="smooth"&&(B$1=void 0),ye=false,Y||(Y=true,X+=1),i&&q$1.cancel();}function Be(){let e=m$1.value;if(!(e===null||X===ge)){if(N||t.loadingOlder){ge=X,ae=false;return}S!==void 0&&we(),ae=true,Ze()&&e.scrollTop<=Re()&&et();}}function Je(){_+=1,a=void 0,h=void 0,q$1.cancel(),we(),Y=false,ye=false,i=false,G=void 0,me=void 0,X+=1,ge=-1,Te=-1,ae=true,N=false,Z=false,B$1=void 0;}function n(){i||(q$1.cancel(),Y=false,ye=false,S!==void 0&&(S.attempts=0),Oe());}function l(){i||q$1.schedule(n,Wt);}function d(){B$1=void 0,n();}function w(e){ee=false,i=true,Ve(),G=e.touches?.[0]?.clientY;}function I(e){let r=e.touches?.[0]?.clientY;r!==void 0&&(G!==void 0&&r!==G&&(_+=1),G!==void 0&&r>G?Be():G!==void 0&&r<G&&Ke(),G=r);}function x(){i=false,G=void 0,l();}function $(e){ee=true,Ve(),e.deltaY<0?Be():e.deltaY>0&&Ke(),l();}function ve(e){e.pointerType!=="touch"&&(ee=true,Ve(),me=e.clientY,l());}function ke(e){e.pointerType==="touch"||!Y||me===void 0||(e.clientY!==me&&(_+=1),e.clientY<me?Be():e.clientY>me&&Ke(),me=e.clientY,l());}function he(e){e.pointerType!=="touch"&&(me=void 0,l());}function je(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(ee=true,Ve(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?Be():Ke(),l());}function _e(e="auto"){let r=m$1.value;if(r===null)return;_+=1,h=void 0,we();let s=Math.max(0,r.scrollHeight-r.clientHeight);qe(s,e),r.scrollTo?.({top:s,behavior:e}),r.scrollTop!==s&&(r.scrollTop=s),u=r.scrollTop,Ie.clear(),D=false,W();}function Mt(){let e=m$1.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function Xt(){let e=m$1.value;return Mt()&&e!==null&&e.scrollHeight>e.clientHeight+1}function Qt(e,r={}){return Rt(U.get(e),r)}function Rt(e,r){let s=m$1.value;if(s===null||e===void 0||!s.contains(e)||s.clientHeight<=0)return false;_+=1,we();let b=s.getBoundingClientRect(),A=e.getBoundingClientRect(),K=r.block??"center",j$1;K==="start"?j$1=s.scrollTop+A.top-b.top:K==="end"?j$1=s.scrollTop+A.bottom-b.bottom:K==="nearest"?A.top>=b.top&&A.bottom<=b.bottom?j$1=s.scrollTop:A.top<b.top?j$1=s.scrollTop+A.top-b.top:j$1=s.scrollTop+A.bottom-b.bottom:j$1=j({currentScrollTop:s.scrollTop,scrollHeight:s.scrollHeight,targetHeight:A.height,targetTop:A.top,viewportHeight:s.clientHeight,viewportTop:b.top});let Ee=Math.max(0,s.scrollHeight-s.clientHeight),Ne=Math.min(Ee,Math.max(0,j$1));h=void 0;let ze=r.behavior??"auto";return qe(Ne,ze),s.scrollTo?.({top:Ne,behavior:ze}),s.scrollTop!==Ne&&(s.scrollTop=Ne),u=s.scrollTop,D=false,W(),true}function Zt(){let e=m$1.value;if(e===null||k===void 0||!e.contains(k)||e.clientHeight<=0)return null;let r=k.getBoundingClientRect(),s=e.scrollTop+r.top-e.getBoundingClientRect().top+r.height/2,b=e.clientHeight/2;return {older:s<b-1,newer:e.scrollHeight-s<b-1}}function en(){Ie.clear();}function tn(){Z=true,te.value=false;}function nn(){Z=false,re();}function rn(e,r){let s=U.get(e);if(s!==r){if(s!==void 0&&(oe?.unobserve(s),s.style.removeProperty("--im-thread-placeholder-play-state"),H.hasTarget(s)||c?.unobserve?.(s),R.delete(s),g$1.delete(e)),r===null){U.delete(e),g$1.delete(e);return}U.set(e,r),R.set(r,e),typeof globalThis.IntersectionObserver=="function"&&r.style.setProperty("--im-thread-placeholder-play-state","paused"),oe?.observe(r),c?.observe(r),re();}}function on(e,r,s){let b=L.get(e);if(s===null){L.delete(e);return}L.set(e,{element:s,label:r}),de===e&&s.style.setProperty("opacity",String(ue)),b?.element!==s&&(s.dataset.imThreadDateSeparator=e);}return provide(gt,{registerLayoutMeasurement:H.register,registerMessageNode:rn,registerDateNode:on,registerEntryUnreadNode:e=>{k=e??void 0;}}),watch(()=>t.contentKey,(e,r)=>{if(e===r)return;Je();let s=m$1.value;s!==null&&(u=s.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,r)=>{if(e.length===r.length&&e.every((fe,De)=>fe===r[De]))return;let s=m$1.value;if(s===null)return;let b=new Set(r);r.length>0&&e.length>0&&!e.some(fe=>b.has(fe))&&Je();let K=t.contentKey,j=_,Ee=te.value,Ne=r[r.length-1],ze=Ne===void 0?-1:e.indexOf(Ne),Xe=ze<0?[]:e.slice(ze+1).filter(fe=>!b.has(fe)),an=Xe.some(fe=>t.pendingSendMessageIds.includes(fe)),dt=Z||t.loadingNewer||N||t.loadingOlder,sn=e.length===r.length&&e.every(fe=>b.has(fe))&&e.some((fe,De)=>fe!==r[De]),Et=r[0],St=Et!==void 0&&e.indexOf(Et)>0,ut;if(a!==void 0&&(St||Xe.length>0&&dt)){let fe=s.getBoundingClientRect(),De=p$1([a.id]),ct=De[0],ln=ct!==void 0&&ct.bottom>fe.top&&ct.top<fe.bottom?De:p$1();ut=p(a,ln,{top:fe.top,bottom:fe.bottom});}if(await nextTick(),!(F||t.contentKey!==K||_!==j)){if(an&&t.followNewMessages){_e();return}if(sn&&Ee&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!dt){_e();return}if(St&&(N=false,nt(ut)),Xe.length>0){if(dt){Z=false,S===void 0&&Ue(ut),te.value=false,re();return}(Ee||Xe.some(De=>t.shouldFollowAppendedMessage?.(De)===true))&&t.followNewMessages?_e():Ie.add(Xe);}re();}},{flush:"pre"}),watch(()=>t.loadingNewer,(e,r)=>{e||!r||!Z||ce(()=>{t.loadingNewer||(Z=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,r)=>{if(e){N=true;return}!r||!N||ce(()=>{t.loadingOlder||(N=false);});},{flush:"pre"}),onMounted(()=>{let e=m$1.value;if(e!==null){if(u=e.scrollTop,e.addEventListener("scroll",Ye,{passive:true}),e.addEventListener("scrollend",d,{passive:true}),e.addEventListener("touchstart",w,{passive:true}),e.addEventListener("touchmove",I,{passive:true}),e.addEventListener("touchend",x,{passive:true}),e.addEventListener("touchcancel",x,{passive:true}),e.addEventListener("wheel",$,{passive:true}),e.addEventListener("pointerdown",ve,{passive:true}),e.addEventListener("pointermove",ke,{passive:true}),e.addEventListener("pointerup",he,{passive:true}),e.addEventListener("pointercancel",he,{passive:true}),e.addEventListener("keydown",je),typeof globalThis.ResizeObserver=="function"){c=new globalThis.ResizeObserver(r=>{if(F||m$1.value===null)return;H.resized(r.map(b=>b.target)),r.some(({target:b})=>b===e||b===V.value||R.has(b))&&W();}),c.observe(e),V.value!==null&&c.observe(V.value);for(let r of U.values())c.observe(r);H.observeTargets();}if(M=e.ownerDocument.fonts,M?.addEventListener("loadingdone",H.invalidateAll),typeof globalThis.IntersectionObserver=="function"){oe=new globalThis.IntersectionObserver(r=>{for(let s of r){let b=R.get(s.target);if(b===void 0)continue;let A=s.target,K=s.isIntersecting?"running":"paused";A.style.getPropertyValue("--im-thread-placeholder-play-state")!==K&&A.style.setProperty("--im-thread-placeholder-play-state",K),s.isIntersecting?g$1.add(b):g$1.delete(b);}D=true,re();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let r of U.values())oe.observe(r);}re();}}),onBeforeUnmount(()=>{F=true;let e=m$1.value;e!==null&&e.removeEventListener("scroll",Ye),e!==null&&(e.removeEventListener("scrollend",d),e.removeEventListener("touchstart",w),e.removeEventListener("touchmove",I),e.removeEventListener("touchend",x),e.removeEventListener("touchcancel",x),e.removeEventListener("wheel",$),e.removeEventListener("pointerdown",ve),e.removeEventListener("pointermove",ke),e.removeEventListener("pointerup",he),e.removeEventListener("pointercancel",he),e.removeEventListener("keydown",je)),q$1.cancel(),we(),se(),M?.removeEventListener("loadingdone",H.invalidateAll),H.dispose(),c?.disconnect(),oe?.disconnect(),y(),k=void 0;for(let r of U.values())r.style.removeProperty("--im-thread-placeholder-play-state");U.clear(),R.clear(),g$1.clear(),L.clear(),Ie.clear();}),v({getViewportElement:()=>m$1.value,clearNewMessageBadge:en,clearActiveDate:y,isAtBottom:computed(()=>te.value),isMeasurable:Mt,isScrollable:Xt,newMessageCount:computed(()=>be.value),prepareHistoryPageAppend:tn,cancelHistoryPageAppend:nn,trackRemoteMessageIds:(e,r)=>Ie.trackRemote(e,r),scrollToLatest:_e,scrollToMessage:Qt,scrollToEntryUnread:()=>Rt(k,{block:"center",behavior:"auto"}),getEntryUnreadCenteringNeeds:Zt,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:V,"data-im-thread-viewport-content":""},f.default?.())])}});var Yt=Symbol("ImThreadSurfaceContext");function xn(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 kn(t){provide(Yt,t);}function yt(){let t=inject(Yt);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}function Nn(t,o){if(t.key!==o.key||t.kind!==o.kind)return false;switch(o.kind){case "message":return t.kind==="message"&&t.message===o.message&&t.firstOfRun===o.firstOfRun;case "system":return t.kind==="system"&&t.message===o.message;case "date-separator":return t.kind==="date-separator"&&t.label===o.label;case "entry-unread":return t.kind==="entry-unread"&&t.count===o.count;case "encryption":return true}}function $t(t,o){if(t===void 0)return o;let v=new Map(t.map(m=>[m.key,m])),f=o.map(m=>{let V=v.get(m.key);return V!==void 0&&Nn(V,m)?V:m});return t.length===f.length&&f.every((m,V)=>m===t[V])?t:f}var Tt=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),bt=Object.freeze({enabled:true,maxFillPages:8}),Hn=8,Dn=160;function Fn(t,o){return t?.conversationType===o.conversationType&&t.conversationId===o.conversationId}var Un=defineComponent({name:"ImThreadSurface",props:{conversation:{type:Object,required:true},context:{type:Object,default:void 0},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0},viewportOptions:{type:Object,default:()=>({})},initialViewportOptions:{type:Object,default:()=>({})},hooks:{type:Object,default:void 0}},setup(t,{expose:o,slots:v}){let f=t.context??yt(),m=ref(null),V=ref(0),U=ref(false),k=ref(false),R=ref(false),g,L,u=ref(false),T=ref(false),a=ref(false),h=false,c,M=ref(true),H=[],oe=Qe(),D=0,E=0,J,F=null,B="",_="",de="",ue=false,Z=false,N=ref(false),ae=ref(""),Y=ref(false),ye=Qe(),ee,i$1=computed(()=>f.getState()),X=computed(()=>!!i$1.value.pendingLocationMessageId),ge=computed(()=>i$1.value.pageVisible??f.isPageVisible?.()??true),Te=computed(()=>i$1.value.pageEngaged??f.isPageEngaged?.()??true),q=computed(()=>Fn(i$1.value.activeConversation,t.conversation)),G=computed(()=>({...Tt,...t.viewportOptions})),me=computed(()=>{let n=t.initialViewportOptions.maxFillPages??bt.maxFillPages;return {enabled:t.initialViewportOptions.enabled??bt.enabled,maxFillPages:Number.isFinite(n)?Math.max(0,Math.floor(n)):bt.maxFillPages}}),S=computed(()=>!q.value||!i$1.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ie="",te=computed(n=>{let l=q.value?`${t.conversation.conversationType}\0${t.conversation.conversationId}`:"",d=ie===l?n:void 0;return ie=l,q.value?$t(d,i({messages:i$1.value.messages,entryUnread:i$1.value.entryUnread,formatDate:f.formatDate,leadingItems:f.leadingItems?.(),beforeMessageItems:f.beforeMessageItems})):$t(d,[])}),be=computed(()=>te.value.flatMap(n=>n.kind==="message"||n.kind==="system"?[n.message.id]:[])),Ie=computed(()=>i$1.value.messages.filter(n=>(n.status==="pending"||n.status==="uploading"||n.status==="sending")&&f.shouldFollowMessage?.(n)===true).map(n=>n.id));function Le(){ye.cancel(),ee!==void 0&&(clearTimeout(ee),ee=void 0);}function p(n=false){if(Le(),Y.value=false,n){m.value?.clearActiveDate(),ae.value="";return}ee=setTimeout(()=>{ee=void 0,!Y.value&&(m.value?.clearActiveDate(),ae.value="");},Dn);}function O(n){if(n===null){p();return}ee!==void 0&&(clearTimeout(ee),ee=void 0),ae.value=n.label,Y.value=true;let l=G.value.activeDateIdleDelay,d=Number.isFinite(l)?Math.max(0,l):Tt.activeDateIdleDelay;ye.schedule(()=>p(),d);}async function y(n,l,d){t.hooks?.beforeAction?.(n);try{let w=await l();return d?.()!==!1&&t.hooks?.afterAction?.(n,w),w}catch(w){throw d?.()!==false&&t.hooks?.onError?.(n,w),w}}function P(n="automatic",l){return !q.value||i$1.value.loading||!i$1.value.hasOlder?Promise.resolve(0):y({kind:"load-older",source:n},()=>f.actions.loadOlder(),l)}function C(){return Q()}function Q(n){let l=f.actions.loadNewer,d=i$1.value.loadingNewer??i$1.value.loading;return !q.value||d||!i$1.value.hasNewer||l===void 0?Promise.resolve(0):y({kind:"load-newer"},()=>l(),n)}async function z(n){for(let l=0;l<Hn;l+=1){if(!q.value||R.value||k.value||X.value)return;let d=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,w=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!d||w!==null||(n==="older"?await P("user-scroll"):await C())>0)return;let x=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,$=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!x||$!==null)return}}async function ne(){return !q.value||f.actions.loadNewer===void 0?0:W({kind:"load-newer"},()=>f.actions.retryNewer?.()??f.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function Ae(){return q.value?W({kind:"retry-older"},()=>f.actions.retryOlder?.()??f.actions.loadOlder({force:true})):0}async function W(n,l){let d=S.value,w=++D;F=null,de="";let I;try{I=await y(n,l);}catch(x){throw Me(d,w)&&(de=d),x}return Me(d,w)&&!N.value&&(F=null,Ue()),I}async function ce(){if(!q.value)return false;let n=S.value;Ve();let l=++E;return R.value=false,Re(true),ue=true,B=n,_=Ce(Oe()),!await y({kind:"jump-to-latest"},()=>f.actions.jumpToLatest?.()??Promise.resolve(!i$1.value.isHistoryWindow),()=>le(n,l))||!le(n,l)||(await nextTick(),!le(n,l))?false:(m.value?.scrollToLatest(),U.value=true,a.value=false,re(),true)}function se(n=false){let l=m.value,d=l?.getViewportElement();T.value=l?.isScrollable()===true;let w=i$1.value.entryUnreadNavigation;u.value=w?.state==="located"&&H.includes(w.firstMessageId),N.value&&u.value&&(U.value=true);let I=d==null?0:Math.max(0,d.scrollHeight-d.clientHeight-d.scrollTop);a.value=w!==void 0&&I>50,n&&w!==void 0&&d!==null&&d!==void 0&&d.clientHeight>0&&I>=d.clientHeight&&(U.value=true);}function re(){let n=f.actions.markConversationRead;if(n===void 0||!Te.value||!q.value||!N.value||k.value||h&&(!M.value||i$1.value.hasNewer)||c!==void 0||i$1.value.error!==null)return;let l=S.value,d=n().then(()=>{c===d&&l===S.value&&(h=true);}).catch(w=>{!Z&&c===d&&l===S.value&&t.hooks?.onError?.({kind:"mark-conversation-read"},w);}).finally(()=>{c===d&&(c=void 0);});c=d;}async function lt(){let n=f.actions.loadEntryUnread;if(!q.value||k.value||n===void 0)return "cancelled";let l=S.value,d=++E;R.value=false;let w=new AbortController;L=w,g=d,k.value=true,Re(true),ue=true;try{let I=await y({kind:"jump-to-entry-unread"},()=>n({signal:w.signal}),()=>le(l,d));if(!le(l,d))return "cancelled";if(!I||i$1.value.entryUnread.state!=="located")return "unavailable";let $=await Ze(l,d);return $&&(U.value=!0),$?"located":le(l,d)?"unavailable":"cancelled"}catch(I){if(!le(l,d))return "cancelled";throw I}finally{g===d&&(g=void 0,L=void 0,k.value=false);}}async function Ze(n,l){await nextTick();for(let d=0;d<60;d+=1){if(!le(n,l))return false;if(m.value?.scrollToEntryUnread())return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(w=>window.requestAnimationFrame(()=>w()));}return false}function et(n){M.value=n.isAtBottom,V.value=n.newMessageCount,se(),Ue();}function We(n,l){return m.value?.scrollToMessage(n,l)??false}function le(n,l){return !Z&&E===l&&S.value===n&&q.value}async function Ke(n,l,d,w){for(let I=0;I<60;I+=1){if(!le(n,l))return false;if(We(d,w))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}async function Ye(n,l){let d=m.value;if(d===null||!d.isMeasurable()||d.isScrollable())return true;let w=0,I=!i$1.value.hasOlder,x=!i$1.value.hasNewer||f.actions.loadNewer===void 0,$=()=>le(n,l),ve=async he=>{if(!le(n,l)||w>=me.value.maxFillPages)return false;let je=0;if(he==="older"){if(I||!i$1.value.hasOlder)return false;je=await P("automatic",$),I=!i$1.value.hasOlder;}else {if(x||!i$1.value.hasNewer)return false;d.prepareHistoryPageAppend();try{je=await Q($);}catch(_e){throw $()&&d.cancelHistoryPageAppend(),_e}$()&&je<=0&&!i$1.value.hasNewer&&d.cancelHistoryPageAppend(),x=!i$1.value.hasNewer;}return w+=1,await nextTick(),await nextTick(),le(n,l)&&(je>0||!(he==="older"?I:x))};!I&&!await ve("older")&&(I=true),!x&&!await ve("newer")&&(x=true);let ke="older";for(;le(n,l)&&w<me.value.maxFillPages&&d.isMeasurable()&&!d.isScrollable()&&(!I||!x);){let he=ke==="older"?I?"newer":"older":x?"older":"newer";ke=he==="older"?"newer":"older",await ve(he)||(he==="older"?I=true:x=true);}return le(n,l)}async function qe(n,l={behavior:"auto",block:"center"}){if(!q.value||n==="")return false;let d=S.value;Ve();let w=R.value||J!==void 0||(i$1.value.loadingOlder??i$1.value.loading)||(i$1.value.loadingNewer??i$1.value.loading),I=++E;R.value=true,Re(true),ue=true,B=d,_=Ce(Oe());let x=()=>le(d,I);try{if(w||!be.value.includes(n)){let $=f.actions.loadAround;if($===void 0)return !1;let ve={};J=ve;try{if(!await y({kind:"locate-message",messageId:n},()=>$(n),x)||!x())return !1}finally{J===ve&&(J=void 0);}}return await nextTick(),await nextTick(),!x()||!await Ye(d,I)?!1:await Ke(d,I,n,l)}finally{E===I&&(R.value=false);}}function Fe(){oe.cancel();}function we(){if(!N.value){Fe();return}let n=t.readActions;if(n===void 0&&f.actions.markVisibleMessages===void 0){Fe();return}let l=Number.isFinite(G.value.visibleReadDelay)?Math.max(0,G.value.visibleReadDelay):Tt.visibleReadDelay;oe.schedule(()=>{if(!q.value||!Te.value)return;re();let d=f.actions.markVisibleMessages;if(d!==void 0){let x=H;d(x).catch($=>{t.hooks?.onError?.({kind:"visible-range",messageIds:x},$);});return}if(n===void 0)return;let w=H[H.length-1];if(w===void 0)return;let I=n.resolveTarget===void 0?w:n.resolveTarget(w);I!=null&&Promise.resolve(n.markRead(I)).catch(x=>{t.hooks?.onError?.({kind:"visible-range",messageIds:H},x);});},l);}function $e(n){H=Object.freeze([...n]),se();let l={kind:"visible-range",messageIds:H};t.hooks?.beforeAction?.(l);try{f.actions.onVisibleRange?.(H),t.hooks?.afterAction?.(l,void 0);}catch(d){throw t.hooks?.onError?.(l,d),d}N.value?we():Ue();}function Me(n,l){return !Z&&D===l&&S.value===n&&!ue&&!X.value}function tt(n,l){Me(n,l)&&(B=n,_=Ce(Oe()),N.value=true,se(),re(),we());}function Oe(){return i$1.value.entryUnreadNavigation===void 0?i$1.value.entryUnread:{state:"none"}}function Ce(n){return n.state!=="located"?n.state:`${n.state}:${n.firstMessageId}`}async function nt(n,l,d){for(let w=0;w<60;w+=1){if(!Me(n,l))return false;if(m.value?.scrollToMessage(d,{behavior:"auto",block:"center"})===true)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}function Ue(){let n=S.value,l=Ce(Oe());if(n===""||i$1.value.loading||R.value||X.value||i$1.value.error!==null&&i$1.value.messages.length===0||B===n&&(_===l||_.startsWith("located:")||ue)||de===n||F!==null)return;if(!me.value.enabled){B=n,_=l,N.value=true,we();return}let d=++D;ue=false,N.value=false;let w=(async()=>{if(await nextTick(),!Me(n,d))return;let I=m.value;if(I===null||!I.isMeasurable())return;let x=Oe();if(x.state==="located"&&!be.value.includes(x.firstMessageId))return;let $=x.state==="located"?await nt(n,d,x.firstMessageId):false;if(x.state==="located"&&!$)return;$||I.scrollToLatest();let ve=0;for(;Me(n,d)&&ve<me.value.maxFillPages&&i$1.value.error===null&&(i$1.value.hasOlder||i$1.value.hasNewer&&f.actions.loadNewer!==void 0)&&I.isMeasurable()&&!I.isScrollable();){if(i$1.value.hasNewer&&f.actions.loadNewer!==void 0&&(i$1.value.messages.length===0||!i$1.value.hasOlder)){let he=E;I.prepareHistoryPageAppend();try{await C(),await nextTick();}finally{S.value===n&&E===he&&(D===d||ue)&&I.cancelHistoryPageAppend();}}else await P();if(!Me(n,d)||(ve+=1,await nextTick(),await nextTick(),!I.isMeasurable()))return}if(!Me(n,d)||!I.isMeasurable())return;let ke=Oe();if(ke.state==="located"){if(!be.value.includes(ke.firstMessageId)||!await nt(n,d,ke.firstMessageId))return}else I.scrollToLatest();await nextTick(),tt(n,d);})().catch(()=>{Me(n,d)&&(de=n);}).finally(()=>{F===w&&(F=null);});F=w;}function Re(n,l=false){D+=1,F=null,ue=false,N.value=n,n||(B="",_="",l||(de="")),Fe();}function Ve(){L!==void 0&&(E+=1,L.abort(),L=void 0,g=void 0,k.value=false);}function Be(){if(se(true),Ve(),ue=true,N.value)return;let n=S.value;D+=1,F=null,B=n,N.value=true,we();}let Je=Object.freeze({getViewportElement:()=>m.value?.getViewportElement()??null,loadOlder:P,retryOlder:Ae,loadNewer:C,retryNewer:ne,jumpToLatest:ce,jumpToEntryUnread:lt,scrollToMessage:We,locateMessage:qe,focusViewport:()=>m.value?.focusViewport()});return o(Je),watch(Te,n=>{n&&N.value?we():Fe();}),watch([()=>i$1.value.activeRemoteMessageRevision??0,m,S],()=>{let n=m.value;if(n===null||!q.value)return;let l=f.actions.drainActiveRemoteMessageIds?.()??[];n.trackRemoteMessageIds(l,{isAtBottom:M.value,isHistoryWindow:i$1.value.isHistoryWindow,isPageVisible:ge.value})&&(M.value=false);},{flush:"post"}),watch(()=>i$1.value.pendingLocationMessageId??"",n=>{(n!==""||R.value)&&(E+=1,R.value=false),n!==""&&(Ve(),N.value||Re(false));},{flush:"sync"}),watch([S,()=>i$1.value.loading,()=>i$1.value.error,()=>be.value.length,()=>i$1.value.hasOlder,()=>Ce(Oe()),me,()=>i$1.value.hasNewer,X],([n,l,d,w,,I],[x,,,$,,ve])=>{if(n!==x&&(Ve(),E+=1,R.value=false,J=void 0,Re(false),p(true),m.value?.clearNewMessageBadge(),V.value=0,M.value=true,H=[],U.value=false,u.value=false,T.value=false,a.value=false,k.value=false,g=void 0,h=false,c=void 0),n!==""&&n===x&&$!==void 0&&$>0&&w===0&&(i$1.value.hasOlder||i$1.value.hasNewer)&&N.value&&Re(false,true),n!==""&&n===x&&I!==ve&&!_.startsWith("located:")&&!ue&&I.startsWith("located:")&&(B="",_="",N.value=false),n===""){Re(false);return}if(d!==null&&i$1.value.messages.length===0){N.value||Re(false,true);return}l||Ue();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{Z=true,Ve(),E+=1,Re(false),p(true);}),()=>{let n={conversation:t.conversation,state:i$1.value,items:te.value,actions:Je,initialViewportSettled:S.value!==""&&(i$1.value.messages.length===0?!i$1.value.loading&&i$1.value.error===null&&!i$1.value.hasOlder&&!i$1.value.hasNewer:N.value&&B===S.value)},l=[v.header?.(n),v["before-list"]?.(n)];if(!q.value)l.push(v.unsupported?.(n)??h$1("div",{"data-im-thread-unsupported":""}));else if(!i$1.value.ready&&i$1.value.loading)l.push(v.loading?.(n)??h$1("div",{"data-im-thread-loading":""}));else if(i$1.value.error!==null&&i$1.value.messages.length===0)l.push(v.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)l.push(v.empty?.(n)??h$1("div",{"data-im-thread-empty":""}));else {let d=h$1(pt,{ref:m,messageIds:be.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:G.value.followThreshold,olderPrefetchThreshold:G.value.olderPrefetchThreshold,visibleMargin:G.value.visibleMargin,activeDateOffset:G.value.activeDateOffset,activeDateEnabled:v["active-date"]!==void 0,resizeFollowEnabled:N.value&&!k.value&&!R.value&&!X.value,followNewMessages:ge.value&&!k.value&&!R.value&&!X.value,shouldFollowAppendedMessage:w=>{let I=i$1.value.messages.find(x=>x.id===w);return I===void 0?false:f.shouldFollowMessage?.(I)===true},pendingSendMessageIds:Ie.value,onReachStart:()=>{z("older").catch(()=>{});},onReachEnd:()=>{z("newer").catch(()=>{});},onSettled:et,onUserScroll:Be,onActiveDateChange:O,onVisibleRange:$e,onNewMessageCount:w=>{V.value=w;}},{default:()=>[v["viewport-before"]?.(n),h$1(vt,{items:te.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:v.item,"date-separator":v["date-separator"],"entry-unread":v["entry-unread"],encryption:v.encryption,system:v.system,message:v.message,"recalled-message":v["recalled-message"],"deleted-message":v["deleted-message"],"unsupported-body":v["unsupported-body"]}),v["viewport-after"]?.(n)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[v["active-date"]?.({label:ae.value,visible:Y.value&&ae.value!==""}),d,v["entry-unread-navigation"]?.({...n,count:i$1.value.entryUnreadNavigation?.state==="none"?0:i$1.value.entryUnreadNavigation?.count??0,loading:k.value,visible:n.initialViewportSettled&&!U.value&&!u.value&&!i$1.value.isHistoryWindow&&i$1.value.entryUnreadNavigation!==void 0&&i$1.value.entryUnreadNavigation.state!=="none"&&i$1.value.entryUnreadNavigation.count>0&&(T.value||i$1.value.hasOlder)})])),i$1.value.error!==null&&l.push(v.error?.(n)??h$1("div",{"data-im-thread-error":""}));}return l.push(v["after-list"]?.(n),v["jump-to-latest"]?.({...n,count:V.value,visible:a.value||!M.value||i$1.value.isHistoryWindow}),v["context-menu"]?.(n),v.composer?.(n)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},l)}}});function Bn(t){let o=new Map;for(let f of t){if(o.has(f.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${f.kind}`);o.set(f.kind,f.component);}let v=Object.freeze([...o.keys()]);return Object.freeze({kinds:v,resolve:f=>o.get(f)})}var Kn=140,qn=120;function st(t,o){if(t.width<=0||t.height<=0)return 0;let v=Math.max(0,Math.min(t.right,o.right)-Math.max(t.left,o.left)),f=Math.max(0,Math.min(t.bottom,o.bottom)-Math.max(t.top,o.top));return Math.min(1,v*f/(t.width*t.height))}function It(t,o){return {x:t.x,y:t.top-o,top:t.top-o,bottom:t.bottom+o,left:t.left,right:t.right,width:t.width,height:t.height+o*2,toJSON:()=>({})}}function wt(t){let o=Math.max(0,t.scrollIdleMs??Kn),v=Math.max(0,t.visibilityDwellMs??qn),f=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),m=Math.max(0,t.revealMarginPx??0),V=Math.max(0,t.preloadMarginPx??0),U=Math.max(m,V),k=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),R=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),g=new Map,L=new Map,u=reactive(new Set),T=new Set,a=new Set,h=[],c=null,M=null,H=null,oe=false,D=false,E=false,J=false,F=new Map,B=0,_=false;function de(){B+=1,_=false,F.clear();}function ue(p){let O=[...p].filter(([P,C])=>g.get(P)===C);if(O.length===0)return;let y=ee();i(true,y,O),Te(y,O);}function Z(p){if(!t.batchRegistration){ue(p);return}for(let[y,P]of p)F.set(y,P);if(_)return;_=true;let O=B;nextTick(()=>{if(E||O!==B)return;_=false;let y=[...F];F.clear(),ue(y),S();});}let N,ae;function Y(){N!==void 0&&clearTimeout(N),N=void 0;}function ye(){ae!==void 0&&clearTimeout(ae),ae=void 0;}function ee(){let p,O=new Map;return {getRootRect(){return p===void 0&&(p=c?.getBoundingClientRect()??null),p},getElementRect(y){let P=O.get(y);return P===void 0&&(P=y.getBoundingClientRect(),O.set(y,P)),P}}}function i(p=false,O=ee(),y=g){if(!p&&M!==null||c===null)return;let P=O.getRootRect();if(P===null)return;let C=It(P,U);for(let[Q,z]of y){let ne=O.getElementRect(Q);z.ratio=st(ne,P),z.intersecting=z.ratio>0,z.revealIntersecting=U>0?st(ne,C)>0:z.intersecting&&z.ratio>=f;}}function X(p){return p.intersecting&&p.ratio>=f}function ge(p){let O=L.get(p.key);return O!==void 0&&g.get(O)===p}function Te(p=ee(),O=g){let y=[];for(let[P,C]of O)if(!(!C.revealIntersecting||u.has(C.key))){if(U>m){if(m===0&&!X(C))continue;if(m>0){let Q=p.getRootRect();if(Q===null||st(p.getElementRect(P),It(Q,m))<=0)continue}}y.push(C);}for(let P of y)!ge(P)||u.has(P.key)||(u.add(P.key),t.onRevealed?.(P.item));}function q(p,O=false){let y=new Set(p.map(C=>C.key));if(!(!(y.size!==a.size||[...y].some(C=>!a.has(C)))&&!O)){a.clear();for(let C of y)a.add(C);t.onSettledVisibleChange?.(p.map(C=>C.item));}}function G(p,O=false){!O&&p.length===h.length&&p.every((y,P)=>y.key===h[P]?.key&&y.item===h[P]?.item)||(h=p,t.onSettledPreloadChange?.(p.map(y=>y.item)));}function me(){if(E||oe)return;let p=D;D=false;let O=B,y=c,P=()=>!E&&!oe&&O===B&&c===y,C=ee();i(false,C);let Q=C.getRootRect(),z=Q===null?0:(Q.top+Q.bottom)/2,ne=[...g.entries()].filter(([,W])=>X(W)).map(([W,ce])=>({target:ce,rect:C.getElementRect(W)})).sort((W,ce)=>Math.abs((W.rect.top+W.rect.bottom)/2-z)-Math.abs((ce.rect.top+ce.rect.bottom)/2-z)).slice(0,R).map(({target:W})=>W),Ae;if(t.onSettledPreloadChange!==void 0&&Q!==null){let W=It(Q,V);Ae=[...g.entries()].filter(([,se])=>se.revealIntersecting).map(([se,re])=>({target:re,rect:C.getElementRect(se)})).filter(({target:se,rect:re})=>X(se)||V>0&&st(re,W)>0).sort((se,re)=>Number(X(re.target))-Number(X(se.target))||Math.abs((se.rect.top+se.rect.bottom)/2-z)-Math.abs((re.rect.top+re.rect.bottom)/2-z)).slice(0,k).map(({target:se})=>se);}if(Te(C),!!P()&&(q(ne.filter(ge),p),!!P())){Ae!==void 0&&G(Ae.filter(ge),p);for(let W of ne){if(!P())return;!ge(W)||T.has(W.key)||(T.add(W.key),t.onActivated?.(W.item));}}}function S(){E||oe||(ye(),ae=setTimeout(()=>{ae=void 0,me();},v));}function ie(){E||(D=true,te(true),G([]),i(),Te(),q([]),ye(),Y(),N=setTimeout(()=>{N=void 0,te(false),S();},o));}function te(p){oe!==p&&(oe=p,t.onScrollingChange?.(p));}function be(){c?.removeEventListener("scroll",ie),M?.disconnect(),H?.disconnect(),M=null,H=null,c=null;}function Ie(p=true){if(E)return;let O=t.getRoot();if(!(O===c&&c!==null)){if(G([]),be(),c=O,c===null){p&&!J&&(J=true,Promise.resolve().then(()=>{J=false,E||(Ie(false),S());}));return}if(c.addEventListener("scroll",ie,{passive:true}),typeof IntersectionObserver<"u"){M=new IntersectionObserver(y=>{for(let P of y){let C=g.get(P.target);C!==void 0&&(C.intersecting=P.isIntersecting,C.ratio=P.intersectionRatio,U===0&&(C.revealIntersecting=P.isIntersecting&&P.intersectionRatio>=f));}Te(),S();},{root:c,threshold:[0,f,1]}),U>0&&(H=new IntersectionObserver(y=>{for(let P of y){let C=g.get(P.target);C!==void 0&&(C.revealIntersecting=P.isIntersecting);}Te(),S();},{root:c,rootMargin:`${U}px 0px`,threshold:0}));for(let y of g.keys())M.observe(y);for(let y of g.keys())H?.observe(y);}Z(g);}}function Le(p){G(h.filter(O=>O.key!==p)),u.delete(p),T.delete(p),a.delete(p);}return {register(p,O){if(E)return;let y=t.getKey(p),P=u.has(y),C=T.has(y),Q=O===null?void 0:g.get(O);Q!==void 0&&Q.key!==y&&(L.delete(Q.key),g.delete(O),Le(Q.key));let z=L.get(y);if(z!==void 0&&z!==O&&(M?.unobserve(z),H?.unobserve(z),g.delete(z),L.delete(y)),O===null){z!==void 0&&(M?.unobserve(z),H?.unobserve(z),g.delete(z),L.delete(y)),Le(y);return}let ne=g.get(O);if(ne?.key===y&&ne.item===p){let ce=c;Ie(),c!==ce&&S();return}let Ae={item:p,key:y,intersecting:ne?.key===y?ne.intersecting:false,ratio:ne?.key===y?ne.ratio:0,revealIntersecting:ne?.key===y?ne.revealIntersecting:false};g.set(O,Ae),L.set(y,O);let W=c;Ie(),c===W&&(M?.observe(O),H?.observe(O),Z([[O,Ae]])),P&&t.onRevealed?.(p),C&&ge(Ae)&&t.onActivated?.(p),S();},isRevealed:p=>u.has(t.getKey(p)),isActivated:p=>T.has(t.getKey(p)),isSettledVisible:p=>a.has(t.getKey(p)),isScrolling:()=>oe,notifyScroll:ie,refresh(){Ie(),de(),ue(g),S();},reset(){de(),Y(),ye(),te(false),D=false,q([]),G([]),be(),g.clear(),L.clear(),u.clear(),T.clear();},dispose(){E||(de(),Y(),ye(),te(false),D=false,q([]),G([]),be(),g.clear(),L.clear(),u.clear(),T.clear(),E=true);}}}function zn(t){let o=new Map,v=new Map,f=shallowReactive(new Map),m=[],V=false,U=u=>{let T=o.get(u.channel);return T===void 0?u.channel:`${u.channel}\0${T.getKey(u.item)}`},k=wt({getRoot:t.getRoot,batchRegistration:t.batchRegistration,getKey:u=>u.key,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:u=>{for(let T of o.values())T.onScrollingChange?.(u);},onRevealed:u=>u.targets.forEach(T=>o.get(T.channel)?.onRevealed?.(T.item)),onActivated:u=>u.targets.forEach(T=>o.get(T.channel)?.onActivated?.(T.item)),onSettledPreloadChange:u=>{let T=u.flatMap(a=>a.targets);for(let[a,h]of o){let c=T.filter(M=>M.channel===a).map(M=>M.item);h.onSettledPreloadChange?.(c.slice(0,Math.max(0,h.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:u=>{R(u.flatMap(T=>T.targets));}});function R(u){m=u;for(let[T,a]of o){let h=u.filter(M=>M.channel===T).map(M=>M.item),c=a.maxSettledVisible===void 0?h:h.slice(0,a.maxSettledVisible);a.onSettledVisibleChange?.(c);}}function g(u){let T=[...v.values()].flatMap(c=>[...c.values()].filter(M=>M.element===u).map(M=>M.target)),a=f.get(u);if(a!==void 0&&T.length===a.targets.length&&T.every((c,M)=>c===a.targets[M]))return;if(T.length===0)a!==void 0&&(f.delete(u),[...f.values()].some(c=>c.key===a.key)||k.register(a,null));else {let c={key:JSON.stringify(T.map(U)),targets:T};f.set(u,c),k.register(c,u);}let h=m.flatMap(c=>{let M=v.get(c.channel)?.get(o.get(c.channel).getKey(c.item));return M===void 0?[]:[M.target]});(h.length!==m.length||h.some((c,M)=>c!==m[M]))&&R(h);}function L(u){return T=>{if(V)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(o.has(u))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${u}`);o.set(u,T);let a=shallowReactive(new Map);v.set(u,a);let h=false,c=D=>({channel:u,item:D});function M(){let D=[...a.values()].map(E=>E.element);a.clear();for(let E of D)g(E);T.onScrollingChange?.(false),T.onSettledVisibleChange?.([]),T.onSettledPreloadChange?.([]);}function H(D,E){let J=a.get(T.getKey(D)),F=J===void 0?void 0:f.get(J.element);return F!==void 0&&E(F)}return {register(D,E){if(h||V)return;let J=T.getKey(D),F=a.get(J);if(E===null){F!==void 0&&(a.delete(J),g(F.element));return}if(F?.target.item===D&&F.element===E){let _=f.get(E);_!==void 0&&k.register(_,E);return}let B=F?.target.item===D?F.target:c(D);for(let[_,de]of a)_!==J&&de.element===E&&a.delete(_);a.set(J,{target:B,element:E}),g(E),F!==void 0&&F.element!==E&&g(F.element);},isRevealed:D=>H(D,k.isRevealed),isActivated:D=>H(D,k.isActivated),isSettledVisible:D=>H(D,k.isSettledVisible),isScrolling:k.isScrolling,notifyScroll:k.notifyScroll,refresh:k.refresh,reset:M,dispose(){h||(M(),h=true,o.delete(u),v.delete(u));}}}}return {createFactory:L,refresh:k.refresh,dispose(){if(!V){for(let u of f.values())k.register(u,null);f.clear();for(let u of o.values())u.onSettledPreloadChange?.([]);v.clear(),o.clear(),k.dispose(),V=true;}}}}function Wn(t){let o=rt();if(o===void 0)throw new Error("useImThreadLayoutMeasurement requires an ImThreadViewport");let v=o.registerLayoutMeasurement(t);return onBeforeUnmount(v.dispose),v}export{mt as ImThreadBodySwitch,vt as ImThreadItems,Un as ImThreadSurface,pt as ImThreadViewport,xn as createImThreadSurfaceContext,Bn as createMessageRendererRegistry,zn as createThreadVisibilityTargetGroup,wt as createThreadVisibilityTargets,kn as provideImThreadSurfaceContext,un as useImText,Wn as useImThreadLayoutMeasurement,yt as useImThreadSurfaceContext,mn as useOptionalImThreadReadActions};
|
package/dist/chat-kit.d.ts
CHANGED
|
@@ -611,20 +611,21 @@ interface ImMediaAlbumBody {
|
|
|
611
611
|
/** 媒体项,顺序即用户选择顺序(决定宫格 index 与首项朝向)。 */
|
|
612
612
|
items: readonly ImMediaAlbumItem[];
|
|
613
613
|
}
|
|
614
|
-
/** 直播间分享的直播类型。wire `liveType`:1 视频、2 语音、3 双手机、4 单手机录屏、5
|
|
614
|
+
/** 直播间分享的直播类型。wire `liveType`:1 视频、2 语音、3 双手机、4 单手机录屏、5 语聊房。空字符串对应 wire 0,表示调用方没有类型,不猜成某一种直播。 */
|
|
615
615
|
type ImLiveRoomType = 'video' | 'voice' | 'dual-phone' | 'screen-record' | 'voice-chat';
|
|
616
616
|
/** 直播间分享的房间状态。wire `liveRoomStatus`:1 预告、2 直播中、3 已结束。 */
|
|
617
617
|
type ImLiveRoomStatus = 'preview' | 'live' | 'ended';
|
|
618
618
|
/**
|
|
619
|
-
* 直播间分享卡片正文(contentType==='liveRoom',协议 BMessage.contentType=30,fields 98-
|
|
619
|
+
* 直播间分享卡片正文(contentType==='liveRoom',协议 BMessage.contentType=30,fields 98-113)。
|
|
620
620
|
*
|
|
621
621
|
* @remarks 调用方先拿到直播间快照再写入本结构。Core 不请求直播接口,也不把缺省枚举猜成某一种直播。
|
|
622
622
|
* `uid` 是声网 SDK 初始化用的 UID,不是 IM 用户 id。
|
|
623
623
|
*/
|
|
624
624
|
interface ImLiveRoomBody {
|
|
625
|
-
/** 直播间 ID(BMessage.liveRoomId
|
|
625
|
+
/** 直播间 ID(BMessage.liveRoomId)。没有房间号时为空字符串。 */
|
|
626
626
|
liveRoomId: string;
|
|
627
|
-
|
|
627
|
+
/** 没有直播类型时为空字符串。 */
|
|
628
|
+
liveType: ImLiveRoomType | '';
|
|
628
629
|
liveRoomStatus: ImLiveRoomStatus;
|
|
629
630
|
/** 当前账号是否已关注主播。协议 bool 无法区分未设置,false 也是有效状态。 */
|
|
630
631
|
isFocus: boolean;
|
|
@@ -644,6 +645,8 @@ interface ImLiveRoomBody {
|
|
|
644
645
|
livePreviewId?: string;
|
|
645
646
|
/** 直播间人数字符串,保持协议原文,不在 Core 换算。 */
|
|
646
647
|
liveRoomViewers?: string;
|
|
648
|
+
/** 点赞数十进制字符串,保持协议原文,不在 Core 换算。 */
|
|
649
|
+
liveRoomLikes?: string;
|
|
647
650
|
}
|
|
648
651
|
interface ImMessageBody {
|
|
649
652
|
/** P0 文本内容(明文,解密后的结果)。 */
|
|
@@ -1946,10 +1949,10 @@ interface ImProfilePort {
|
|
|
1946
1949
|
* 会话收藏可展示的内容类型;与 iOS `isSupportCollectionMsgType` 对齐。
|
|
1947
1950
|
*
|
|
1948
1951
|
* @remarks 这些值与收藏接口的 `content_type` 数值一一对应,而那个数值就是消息自己的 contentType
|
|
1949
|
-
* (1=文本 2=图片 3=视频 4=语音 5=位置 11=文件
|
|
1952
|
+
* (1=文本 2=图片 3=视频 4=语音 5=位置 11=文件 28=媒体合集 29=文件合集 30=直播间分享),不是另一套收藏专用枚举。
|
|
1950
1953
|
* Android `MessageCollectExecute` 直接写 `message.getContentType()`,iOS 写 `msg.msgType`,两端一致。
|
|
1951
1954
|
*/
|
|
1952
|
-
type ImSessionFavoriteKind = 'text' | 'image' | 'video' | 'voice' | 'location' | 'file' | 'mediaAlbum';
|
|
1955
|
+
type ImSessionFavoriteKind = 'text' | 'image' | 'video' | 'voice' | 'location' | 'file' | 'mediaAlbum' | 'filesAlbum' | 'liveRoom';
|
|
1953
1956
|
/** 服务端一条会话收藏快照;列表以 HTTP 为准,不回写原消息。 */
|
|
1954
1957
|
interface ImSessionFavoriteItem$1 {
|
|
1955
1958
|
readonly collectId: string;
|
package/dist/chat-kit.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{q as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,p as DEFAULT_LOADING_SHOW_DELAY_MS,x as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_HEIGHT,w as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_WIDTH,e as MINI_PROGRAM_LANG_NUMBERS,S as SPIKE_STEP,N as calculateMediaBox,E as canCopyMessageImage,t as canPromoteMediaPresentationSource,B as captureRuntimeClientOperation,A as captureRuntimeOperation,n as channelMiniProgramRelKey,z as createConversationPrefetchController,r as createDelayedLoadingIndicator,L as createLinkMatcher,F as createMessageImageCopySource,f as csvIncludes,d as decideChannelMiniProgramRelOpen,P as formatFileSize,O as formatMediaDuration,Q as getFileExtension,D as getMessageCopyImageUrl,C as getMessageCopyText,K as hasLinkCandidate,u as highlightSegments,a as isMiniProgramShowTypeOpenable,G as mediaService,J as normalizeLinkHref,V as placeholderWaveform,H as readService,U as resampleWaveform,s as resolveBestMediaPresentationSource,h as resolveChannelMiniProgramRelIcon,g as resolveChannelMiniProgramRelName,j as resolveChannelMiniProgramRelOpenSurface,i as resolveChannelMiniProgramRelUrl,k as resolveChannelPinnedGameCopy,o as resolveConversationListPresentation,M as resolveMediaPresentation,R as resolveMediaTransferPresentation,v as resolveMessageSearchPreview,c as resolveMiniProgramFloatLinkUrl,y as resolveMiniProgramGamePreviewLayout,b as resolveMiniProgramOpenUrl,I as resolveQuotedMessagePresentation,m as resolveVisibleChannelMiniProgramRels,l as sortChannelMiniProgramFloatingItems,T as spikeCountForDuration}from'./chunk-
|
|
1
|
+
export{q as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,p as DEFAULT_LOADING_SHOW_DELAY_MS,x as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_HEIGHT,w as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_WIDTH,e as MINI_PROGRAM_LANG_NUMBERS,S as SPIKE_STEP,N as calculateMediaBox,E as canCopyMessageImage,t as canPromoteMediaPresentationSource,B as captureRuntimeClientOperation,A as captureRuntimeOperation,n as channelMiniProgramRelKey,z as createConversationPrefetchController,r as createDelayedLoadingIndicator,L as createLinkMatcher,F as createMessageImageCopySource,f as csvIncludes,d as decideChannelMiniProgramRelOpen,P as formatFileSize,O as formatMediaDuration,Q as getFileExtension,D as getMessageCopyImageUrl,C as getMessageCopyText,K as hasLinkCandidate,u as highlightSegments,a as isMiniProgramShowTypeOpenable,G as mediaService,J as normalizeLinkHref,V as placeholderWaveform,H as readService,U as resampleWaveform,s as resolveBestMediaPresentationSource,h as resolveChannelMiniProgramRelIcon,g as resolveChannelMiniProgramRelName,j as resolveChannelMiniProgramRelOpenSurface,i as resolveChannelMiniProgramRelUrl,k as resolveChannelPinnedGameCopy,o as resolveConversationListPresentation,M as resolveMediaPresentation,R as resolveMediaTransferPresentation,v as resolveMessageSearchPreview,c as resolveMiniProgramFloatLinkUrl,y as resolveMiniProgramGamePreviewLayout,b as resolveMiniProgramOpenUrl,I as resolveQuotedMessagePresentation,m as resolveVisibleChannelMiniProgramRels,l as sortChannelMiniProgramFloatingItems,T as spikeCountForDuration}from'./chunk-YOS2232I.js';export{j as DEFAULT_EMOJI_ASSET_BASE,i as EMOJI_CATALOG,c as EMOJI_GAME_DICE_STABLE_KEY,b as EMOJI_GAME_RPS_STABLE_KEY,m as EMOJI_TOKEN_RE,P as MAX_BATCH_FILES,a as MAX_RECENT_EMOJI_COUNT,g as UNICODE_EMOJI_CATALOG,O as blockReasonForChannelSession,N as blockReasonForChannelState,V as blockReasonForGroupState,Y as blockReasonForSession,I as canEditMessage,w as canPinChannelMessage,v as canPinGroupMessage,x as canPinMessage,H as canRecallMessage,fa as cancelMediaUpload,T as classifyGifFile,S as classifyMediaFile,s as countUnreadConversations,u as createChatRuntime,p as createEmojiMatcher,K as decideConversationAction,M as decideMemberTargetAction,L as decideMessageAction,l as emojiAssetUrl,n as emojiUrlByCode,Fa as fetchConversationFileBatch,Ga as fetchConversationImageBatch,Da as fetchConversationMessageBatch,Ha as fetchConversationVideoBatch,Ia as fetchConversationVoiceBatch,Ja as fetchNextConversationSearchBatch,r as formatConversationUnreadBadge,ia as forwardService,o as hasEmojiCandidate,U as isGifFile,y as isPinnedMessageProtected,aa as isVoiceStorageConfigured,Q as mediaBatchBudgetBytes,na as messageService,e as parseUnicodeEmojiCode,sa as pinnedMessageService,d as prependRecentEmoji,Ca as profileService,$ as replaceInterruptedMediaFile,W as requiresConversationEncryption,D as resolveChannelMemberAvatarUrl,C as resolveChannelMemberDisplayName,k as resolveEmojiToken,G as resolveFriendDisplayName,ta as resolveImProfileAccessDestination,A as resolveMemberDisplayName,t as resolveMessageNotificationDecision,F as resolvePublicNickname,E as resolveSenderAvatarUrl,q as resolveStandaloneEmojiMessage,h as resolveUnicodeEmoji,ga as retryMessage,R as runMediaSendBatch,ea as sendAsFilesBatch,J as sendBlockReasonForDecision,ca as sendMediaAlbum,_ as sendMediaFile,da as sendMediaFilesBatch,Z as sendText,ba as sendVoice,X as supportsConversationMention,f as unicodeEmojiTextFromCode}from'./chunk-A6UPH4T4.js';export{C as createNewMessageBadgeController,i as createThreadItems,f as formatChatDateSeparator,e as formatConversationDisplayTime,c as getLocalDayKey,l as isMessageLocateScrollProtected,v as isMessageTailChangeFromOlderWindowTrim,k as isMessageViewportMeasurable,B as isMessageVisibleForNewMessageBadge,x as loadOlderUntilBoundary,p as refreshPrependMessageAnchorPosition,j as resolveCenteredMessageScrollTop,a as resolveDisplayTimestamp,g as resolveImThreadActiveDate,h as resolveMessageBodyKind,b as resolveMessageTimelineTimestamp,n as resolvePrependMessageAnchor,q as resolvePrependMessageAnchorAdjustment,o as resolvePrependMessageAnchorPosition,s as resolveSurvivingMessageAnchorAdjustment,r as resolveVisibleMessageAnchorPositions,t as shouldCompleteInitialViewport,y as shouldFillInitialHistoryViewport,u as shouldFollowIncomingMessage,z as shouldLoadNewerHistoryPage,m as shouldPrefetchOlderHistory,w as shouldRestoreMessageViewportFocus,d as shouldShowChatDateSeparator,A as shouldTrackRemoteMessageForBadge}from'./chunk-ZUL5OBYN.js';import'./chunk-EQSL3SQW.js';import'./chunk-SEFYSJSB.js';import'./chunk-SWWW7C2U.js';export{Ea as canTransmit,Ca as canTransmitByType,Da as canTransmitContent,Ba as requiresForwardTypeConfirmation}from'./chunk-527YCOBJ.js';import'./chunk-WOT6VMZA.js';
|