k2-im 0.1.48 → 0.1.50

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.
@@ -98,8 +98,11 @@ type LastMessageSummary = {
98
98
  kind: 'transfer';
99
99
  } | {
100
100
  kind: 'gift';
101
- } | {
101
+ }
102
+ /** 直播间分享。`title` 与卡片主标题一致:先主播昵称,没有再用房间标题。 */
103
+ | {
102
104
  kind: 'liveRoom';
105
+ title?: string;
103
106
  } | {
104
107
  kind: 'call';
105
108
  callKind: ImCallKind;
@@ -592,20 +595,21 @@ interface ImMediaAlbumBody {
592
595
  /** 媒体项,顺序即用户选择顺序(决定宫格 index 与首项朝向)。 */
593
596
  items: readonly ImMediaAlbumItem[];
594
597
  }
595
- /** 直播间分享的直播类型。wire `liveType`:1 视频、2 语音、3 双手机、4 单手机录屏、5 语聊房。 */
598
+ /** 直播间分享的直播类型。wire `liveType`:1 视频、2 语音、3 双手机、4 单手机录屏、5 语聊房。空字符串对应 wire 0,表示调用方没有类型,不猜成某一种直播。 */
596
599
  type ImLiveRoomType = 'video' | 'voice' | 'dual-phone' | 'screen-record' | 'voice-chat';
597
600
  /** 直播间分享的房间状态。wire `liveRoomStatus`:1 预告、2 直播中、3 已结束。 */
598
601
  type ImLiveRoomStatus = 'preview' | 'live' | 'ended';
599
602
  /**
600
- * 直播间分享卡片正文(contentType==='liveRoom',协议 BMessage.contentType=30,fields 98-112)。
603
+ * 直播间分享卡片正文(contentType==='liveRoom',协议 BMessage.contentType=30,fields 98-113)。
601
604
  *
602
605
  * @remarks 调用方先拿到直播间快照再写入本结构。Core 不请求直播接口,也不把缺省枚举猜成某一种直播。
603
606
  * `uid` 是声网 SDK 初始化用的 UID,不是 IM 用户 id。
604
607
  */
605
608
  interface ImLiveRoomBody {
606
- /** 直播间 ID(BMessage.liveRoomId)。 */
609
+ /** 直播间 ID(BMessage.liveRoomId)。没有房间号时为空字符串。 */
607
610
  liveRoomId: string;
608
- liveType: ImLiveRoomType;
611
+ /** 没有直播类型时为空字符串。 */
612
+ liveType: ImLiveRoomType | '';
609
613
  liveRoomStatus: ImLiveRoomStatus;
610
614
  /** 当前账号是否已关注主播。协议 bool 无法区分未设置,false 也是有效状态。 */
611
615
  isFocus: boolean;
@@ -625,6 +629,8 @@ interface ImLiveRoomBody {
625
629
  livePreviewId?: string;
626
630
  /** 直播间人数字符串,保持协议原文,不在 Core 换算。 */
627
631
  liveRoomViewers?: string;
632
+ /** 点赞数十进制字符串,保持协议原文,不在 Core 换算。 */
633
+ liveRoomLikes?: string;
628
634
  }
629
635
  interface ImMessageBody {
630
636
  /** P0 文本内容(明文,解密后的结果)。 */
@@ -1714,6 +1720,15 @@ declare function useImText(ctx: ImTextContext): {
1714
1720
  failureText: (message: AdvancedMessage) => string;
1715
1721
  };
1716
1722
 
1723
+ /** 消息定位的共享结果;宿主只负责把原因映射为当前平台的提示。 */
1724
+ type ImMessageLocateResult = Readonly<{
1725
+ ok: true;
1726
+ } | {
1727
+ ok: false;
1728
+ reason: 'not-found' | 'not-visible' | 'anchor-unavailable' | 'load-failed' | 'cancelled';
1729
+ cause?: unknown;
1730
+ }>;
1731
+
1717
1732
  /** 根据 Core body kind 选择宿主 renderer 的无样式正文组件。 */
1718
1733
  declare const ImThreadBodySwitch: any;
1719
1734
 
@@ -1760,6 +1775,8 @@ interface ImThreadSurfaceSlotActions {
1760
1775
  scrollToMessage: (messageId: string, options?: ScrollIntoViewOptions) => boolean;
1761
1776
  /** 必要时先替换为目标附近窗口,再等待真实消息节点登记并完成定位。 */
1762
1777
  locateMessage: (messageId: string, options?: ScrollIntoViewOptions) => Promise<boolean>;
1778
+ /** 返回定位失败的具体原因;取消不会被当作加载失败,旧 boolean 方法继续可用。 */
1779
+ locateMessageDetailed: (messageId: string, options?: ScrollIntoViewOptions) => Promise<ImMessageLocateResult>;
1763
1780
  /** 把焦点还给当前 Surface 的唯一消息滚动根,不查询宿主全局 DOM。 */
1764
1781
  focusViewport: () => void;
1765
1782
  }
@@ -1796,6 +1813,11 @@ interface ImThreadViewportExposed {
1796
1813
  isMeasurable: () => boolean;
1797
1814
  /** 当前已加载内容是否超过滚动根可视高度。 */
1798
1815
  isScrollable: () => boolean;
1816
+ /** 测量指定消息上下是否各有半屏真实内容,供定位时选择继续加载的历史方向。 */
1817
+ getMessageCenteringNeeds: (messageId: string) => {
1818
+ older: boolean;
1819
+ newer: boolean;
1820
+ } | null;
1799
1821
  /** 当前未见消息数量。 */
1800
1822
  newMessageCount: Readonly<{
1801
1823
  value: number;
@@ -1849,6 +1871,18 @@ interface ImMessageRendererRegistry {
1849
1871
  */
1850
1872
  declare function createMessageRendererRegistry(registrations: readonly ImMessageRendererRegistration[]): ImMessageRendererRegistry;
1851
1873
 
1874
+ /** 一次纯布局读取;返回的函数只提交测量结果,所有读取完成后才统一调用。 */
1875
+ type ThreadLayoutRead = () => (() => void) | undefined;
1876
+ /** 一个气泡的测量任务;尺寸变化、正文变化和组件释放均沿同一登记处理。 */
1877
+ interface ThreadLayoutMeasurement {
1878
+ /** 替换所需的尺寸观察节点;复用 Viewport 的 ResizeObserver。 */
1879
+ observe: (elements: readonly HTMLElement[]) => void;
1880
+ /** 内容或展示规则改变时请求下一批测量,同批重复调用只执行一次。 */
1881
+ invalidate: () => void;
1882
+ /** 取消未提交的结果并解除此任务的观察。 */
1883
+ dispose: () => void;
1884
+ }
1885
+
1852
1886
  /** 会话 sibling 可插入 timeline 的无产品样式装饰项。 */
1853
1887
  interface ImThreadEncryptionItem {
1854
1888
  kind: 'encryption';
@@ -1961,7 +1995,11 @@ interface ImThreadSurfaceActions {
1961
1995
  /** 把 Thread Store 返回 latest;返回 false 表示失败或旧请求已失效。 */
1962
1996
  jumpToLatest?: () => Promise<boolean>;
1963
1997
  /** 用目标消息附近的连续窗口取代当前窗口;DOM 定位仍由 Surface 统一完成。 */
1964
- loadAround?: (messageId: string) => Promise<boolean>;
1998
+ loadAround?: (messageId: string, options?: {
1999
+ signal?: AbortSignal;
2000
+ }) => Promise<boolean>;
2001
+ /** 用户滚动接管阅读位置时取消宿主已发布的 pending 定位,包括尚在查询原文的 Search action。 */
2002
+ cancelMessageLocation?: () => void;
1965
2003
  /** 原子取走尚未进入当前连续窗口的实时对端消息 id。 */
1966
2004
  drainActiveRemoteMessageIds?: () => readonly string[];
1967
2005
  /** 接收统一可见消息范围;不得在实现里重新扫描 DOM。 */
@@ -2003,7 +2041,9 @@ interface ThreadVisibilityTargetsOptions<TItem> {
2003
2041
  getRoot: () => HTMLElement | null;
2004
2042
  /** 返回目标在当前账号和会话内的稳定复合身份。 */
2005
2043
  getKey: (item: TItem) => string;
2006
- /** 节点首次进入视口时立即触发,适合创建缩略图或 poster。 */
2044
+ /** 同轮登记合并到 Vue 更新完成后、绘制前测量;默认保持同步登记。 */
2045
+ batchRegistration?: boolean;
2046
+ /** 节点首次进入视口时触发,适合创建缩略图或 poster。 */
2007
2047
  onRevealed?: (item: TItem) => void;
2008
2048
  /** 轻量资源在进入视口前多少像素开始准备;不会扩大稳定可见或高清缓存读取范围。 */
2009
2049
  revealMarginPx?: number;
@@ -2051,6 +2091,8 @@ declare function createThreadVisibilityTargets<TItem>(options: ThreadVisibilityT
2051
2091
  interface ThreadVisibilityTargetGroupOptions {
2052
2092
  /** 返回 Managed Surface 的唯一滚动根。 */
2053
2093
  getRoot: () => HTMLElement | null;
2094
+ /** 同轮媒体登记在 Vue 更新结束后统一测量,默认同步。 */
2095
+ batchRegistration?: boolean;
2054
2096
  /** 所有通道共享的轻量资源预热距离。 */
2055
2097
  revealMarginPx?: number;
2056
2098
  /** 所有通道共享的停稳后 cache-only 近邻距离,不扩大实际可见范围。 */
@@ -2080,5 +2122,12 @@ interface ThreadVisibilityTargetGroup<TItem> {
2080
2122
  */
2081
2123
  declare function createThreadVisibilityTargetGroup<TItem>(groupOptions: ThreadVisibilityTargetGroupOptions): ThreadVisibilityTargetGroup<TItem>;
2082
2124
 
2083
- export { ImThreadBodySwitch, ImThreadItems, ImThreadSurface, ImThreadViewport, createImThreadSurfaceContext, createMessageRendererRegistry, createThreadVisibilityTargetGroup, createThreadVisibilityTargets, provideImThreadSurfaceContext, useImText, useImThreadSurfaceContext, useOptionalImThreadReadActions };
2084
- export type { ImHostEnvironment, ImHostSession, ImMessageRendererRegistration, ImMessageRendererRegistry, ImTextContext, ImThreadActiveDateSlotState, ImThreadEntryUnreadNavigationResult, ImThreadInitialViewportOptions, ImThreadSurfaceActions, ImThreadSurfaceContext, ImThreadSurfaceHooks, ImThreadSurfaceSlotActions, ImThreadSurfaceState, ImThreadViewportExposed, ImThreadViewportOptions, ImThreadViewportSettledSnapshot, ThreadVisibilityTargetGroup, ThreadVisibilityTargetGroupOptions, ThreadVisibilityTargets, ThreadVisibilityTargetsFactory, ThreadVisibilityTargetsOptions };
2125
+ /**
2126
+ * 让 Surface 内的宿主气泡复用线程已有的尺寸观察和帧调度,不创建独立 Observer。
2127
+ * read 只读取布局并返回提交函数;内容改变调用 invalidate,节点改变调用 observe。
2128
+ * 必须在 ImThreadViewport/ImThreadSurface 的后代 setup 内调用,卸载自动释放任务。
2129
+ */
2130
+ declare function useImThreadLayoutMeasurement(read: ThreadLayoutRead): ThreadLayoutMeasurement;
2131
+
2132
+ export { ImThreadBodySwitch, ImThreadItems, ImThreadSurface, ImThreadViewport, createImThreadSurfaceContext, createMessageRendererRegistry, createThreadVisibilityTargetGroup, createThreadVisibilityTargets, provideImThreadSurfaceContext, useImText, useImThreadLayoutMeasurement, useImThreadSurfaceContext, useOptionalImThreadReadActions };
2133
+ export type { ImHostEnvironment, ImHostSession, ImMessageLocateResult, ImMessageRendererRegistration, ImMessageRendererRegistry, ImTextContext, ImThreadActiveDateSlotState, ImThreadEntryUnreadNavigationResult, ImThreadInitialViewportOptions, ImThreadSurfaceActions, ImThreadSurfaceContext, ImThreadSurfaceHooks, ImThreadSurfaceSlotActions, ImThreadSurfaceState, ImThreadViewportExposed, ImThreadViewportOptions, ImThreadViewportSettledSnapshot, ThreadLayoutMeasurement, ThreadLayoutRead, ThreadVisibilityTargetGroup, ThreadVisibilityTargetGroupOptions, ThreadVisibilityTargets, ThreadVisibilityTargetsFactory, ThreadVisibilityTargetsOptions };
@@ -1 +1 @@
1
- import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-PAEBGHDI.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-ICG32ESA.js';import'./chunk-HPS3TBSB.js';import'./chunk-ELGE657I.js';import'./chunk-FMEZINTJ.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 tn(t){let i=0,b=0;for(let f of t)f.kind==="video"?b+=1:i+=1;return {imageCount:i,videoCount:b}}function nn(t){return {systemMessage:i=>i.body.system!==void 0?g$1(i.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:i=>i$1(i.contentType,{locale:t.locale(),durationMs:i.body.voice?.durationMs,stickerImageType:i.body.sticker?.imageType,gameType:i.body.game?.gameType,callKind:i.body.call?.callKind,...i.body.filesAlbum===void 0?{}:{filesAlbum:{count:i.body.filesAlbum.items.length,caption:i.body.filesAlbum.caption}},...i.body.mediaAlbum===void 0?{}:{mediaAlbum:tn(i.body.mediaAlbum.items)}}),lastMessage:i=>i.lastMessageSummary!==void 0?h$2(i.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):i.lastMessagePreview,failureText:i=>i.failure?.displayCode!==void 0?f(i.failure.displayCode,{locale:t.locale(),mediaKind:i.failure.mediaKind,params:i.failure.params}):i.failure?.message??""}}var Lt=Symbol("ImThreadReadActions");function Dt(t){provide(Lt,t);}function an(){return inject(Lt,void 0)}var st=defineComponent({name:"ImThreadBodySwitch",inheritAttrs:false,props:{message:{type:Object,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{attrs:i,slots:b}){return Dt(t.readActions),()=>{let f=h(t.message),g=t.rendererRegistry.resolve(f);return g!==void 0?h$1(g,{...i,message:t.message,presentation:t.presentation}):b["unsupported-body"]!==void 0?b["unsupported-body"]({kind:f,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":f,"aria-hidden":"true"})}}});var lt=Symbol("ImThreadViewportRegistration");function Bt(){return inject(lt,void 0)}var dt=defineComponent({name:"ImThreadItems",props:{items:{type:Array,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{slots:i}){let b=Bt();function f(o,u){let v=Array.isArray(u)?u:[u];return v.length===1&&isVNode(v[0])?cloneVNode(v[0],{key:o}):h$1(Fragment,{key:o},v)}function g(o){return u=>{b?.registerMessageNode(o,u instanceof HTMLElement?u:null);}}function Y(o,u){return v=>{b?.registerDateNode(o,u,v instanceof HTMLElement?v:null);}}function _(o){return i.encryption?.({item:o})??h$1("div",{"data-im-thread-encryption":o.key})}function O(o){let u=Y(o.key,o.label);return i["date-separator"]?.({item:o,setElement:u})??h$1("div",{ref:u,"data-im-thread-date-separator":o.key},o.label)}function j(o){b?.registerEntryUnreadNode(o instanceof HTMLElement?o:null);}function x(o){return i["entry-unread"]?.({item:o,setElement:j})??h$1("div",{ref:j,"data-im-thread-entry-unread":o.key,...o.count===void 0?{}:{"data-count":String(o.count)}})}function q(o){let u=g(o.message.id);return i.item!==void 0?i.item({item:o,setElement:u}):i.message!==void 0?i.message({item:o,setElement:u}):o.message.deletedForEveryone!==void 0?i["deleted-message"]?.({item:o,setElement:u})??h$1("article",{ref:u,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.message.recalled!==void 0?i["recalled-message"]?.({item:o,setElement:u})??h$1("article",{ref:u,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.kind==="system"&&i.system!==void 0?i.system({item:o,setElement:u}):h$1("article",{ref:u,"data-im-thread-message-id":o.message.id,"data-first-of-run":o.kind==="message"?String(o.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(st,{message:o.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":i["unsupported-body"]===void 0?void 0:v=>i["unsupported-body"]?.(v)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(o=>{switch(o.kind){case "encryption":return i.item!==void 0?f(o.key,i.item({item:o})):f(o.key,_(o));case "date-separator":return i.item!==void 0?f(o.key,i.item({item:o,setElement:Y(o.key,o.label)})):f(o.key,O(o));case "entry-unread":return i.item!==void 0?f(o.key,i.item({item:o,setElement:j})):f(o.key,x(o));case "system":case "message":return f(o.key,q(o))}return o}))}});var jt=120,yn=500,He=.5,Tn=8;function ut(t){let i=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(i!==void 0&&Number.isFinite(i)&&i>0?i:1)}var ct=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:i,expose:b,slots:f}){let g$1=ref(null),Y=ref(null),_=new Map,O,j$1=new Map,x=new Set,q$1=new Map,o$1=0,u=[],v,N,y,M,D=false,$,V=new Set,S=false,k,A=0,W="",X=1,G=false,L=false,ne=true,P=false,oe=false,re=true,ae=false,J=0,a=-1,ie=-1,Q,ee,F,c,p$1,m$1=ref(true),B$1=ref(0),I=C(e=>{B$1.value=e,i("new-message-count",e);});function te(e){let r=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=r}function C$1(e=t.messageIds){return e.flatMap(r=>{let s=_.get(r);if(s===void 0)return [];let T=s.getBoundingClientRect(),R=s.querySelector("[data-im-thread-anchor-point]");return [{id:r,top:T.top,bottom:T.bottom,anchorTop:R?.getBoundingClientRect().top??T.top}]})}function U(e="",r=1){let s=Math.min(1,Math.max(0,r));W!==""&&W!==e&&q$1.get(W)?.element.style.removeProperty("opacity"),W=e,X=s,e!==""&&q$1.get(e)?.element.style.setProperty("opacity",String(s));}function Le(){U();}function Ee(){let e=g$1.value;if(S||e===null||!t.activeDateEnabled)return;let r=[...q$1.entries()].filter(([,K])=>e.contains(K.element)).map(([K,H])=>{let ve=H.element.getBoundingClientRect();return {key:K,label:H.label,top:ve.top,height:ve.height}}).sort((K,H)=>K.top-H.top),s=e.getBoundingClientRect(),T=r.find(K=>K.height>0)?.height??28,R=g({markers:r,viewportTop:s.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:T});if(R===null){Le(),i("active-date-change",null);return}U(R.inlineDateKey,R.inlineOpacity),i("active-date-change",R);}function Ae(e){N={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function xe(e){let r=N;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)<=ut(e)}function Ge(e){return xe(e)||k!==void 0&&(k.behavior==="smooth"||Math.abs(e.scrollTop-k.targetTop)<=ut(e))?0:e.scrollTop-o$1}function De(e,r){r!==0&&(o$1=e.scrollTop-r,k=void 0,Ue());}function rt(e,r){let s=Ge(e);if(c!==void 0)return c.expectedOffset-=s,_e(),De(e,s),P||Te(),false;let T=N;if(T===void 0)return false;let R=v,K=R===void 0?void 0:C$1([R.id])[0],H=e.scrollTop-T.scrollTop,ve=xe(e)?0:H,Re=R===void 0||K===void 0?0:(K.anchorTop??K.top)-r.top-R.offset+H;return T.scrollHeight!==e.scrollHeight||T.width!==e.clientWidth||T.height!==e.clientHeight||Math.abs(Re)>He?(N=void 0,!G&&!L&&!t.loadingOlder&&!t.loadingNewer&&!t.hasNewer&&t.resizeFollowEnabled&&m$1.value&&Math.abs(ve)<=He?(Ie(),true):(R!==void 0&&Ke({...R,offset:R.offset-ve}),De(e,s),false)):false}function Ce(){let e=g$1.value;if(S||e===null)return;let r=e.getBoundingClientRect();if(rt(e,r))return;let s=M!==void 0&&D?t.messageIds.filter(H=>x.has(H)):t.messageIds,T=C$1(s);if(M!==void 0&&D&&T.length===0){m$1.value=te(e);return}let R=T.filter(H=>B({viewportTop:r.top,viewportBottom:r.bottom,messageTop:H.top,messageBottom:H.bottom,margin:t.visibleMargin})).map(H=>H.id),K=R.length!==u.length||R.some((H,ve)=>u[ve]!==H);u=Object.freeze(R),v=o(T,{top:r.top,bottom:r.bottom}),Ae(e),I.acknowledgeVisible(R),m$1.value=te(e),K&&i("visible-range",u),i("settled",{visibleMessageIds:u,...u.length===0?{}:{newestVisibleMessageId:u[u.length-1]},isAtBottom:m$1.value,newMessageCount:B$1.value});}function Me(e){if(V.add(e),$!==void 0)return;let r=()=>{$=void 0;let s=[...V];V.clear(),s.forEach(T=>T());};typeof globalThis.requestAnimationFrame=="function"?$=globalThis.requestAnimationFrame(r):$=globalThis.setTimeout(r,0);}function ot(){$!==void 0&&(typeof $=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame($):globalThis.clearTimeout($),$=void 0,V.clear());}function ue(){Me(Ce);}function Fe(){let e=g$1.value;if(e===null)return;let r=e.getBoundingClientRect(),s=o(C$1(),{top:r.top,bottom:r.bottom});s!==void 0&&(v=s,Ae(e));}function We(){return ne&&c===void 0&&!L&&!t.loadingOlder}function ze(){Fe(),ne=false,a=J,L=true,m$1.value=false,i("reach-start"),Me(()=>{t.loadingOlder||(L=false);});}function Ye(e){return t.hasNewer&&!G&&!t.loadingOlder&&!t.loadingNewer&&te(e)}function Be(){G=true,m$1.value=false,ie=J,i("reach-end"),Me(()=>{t.loadingNewer||(G=false);});}function Z(){let e=g$1.value;e===null||J===ie||!Ye(e)||Be();}function Ue(){let e=g$1.value;if(S||e===null)return;let r=e.scrollTop,s=xe(e),T=k,R=false;if(T!==void 0){let H=Math.abs(r-T.targetTop)<=ut(e);R=T.behavior==="smooth"||H,(T.behavior!=="smooth"||H)&&(k=void 0);}!R&&!s&&!P&&re&&c===void 0&&r!==o$1&&(P=true,oe=true,J+=1);let K=P&&!R&&!s&&r!==o$1;if(K&&(A+=1,i("user-scroll"),Me(Ee)),P&&!ae&&n(),!ne&&oe&&J!==a&&r<o$1&&r>Ve()&&fe(),c!==void 0&&!R)if(P){let H=Se();H!==void 0&&(c.expectedOffset=H);}else _e(),Te();We()&&K&&r>=0&&m({previousScrollTop:o$1,currentScrollTop:r,topThreshold:t.olderPrefetchThreshold})&&ze(),K&&Ye(e)&&z({previousScrollTop:o$1,currentScrollTop:r,isAtBottom:te(e),isHistoryWindow:t.hasNewer,isPageSettling:R})&&Be(),o$1=r,ue();}function Ne(e,r="auto"){k={targetTop:e,behavior:r};}function $e(e){let r=c,s=Y.value;if(!(r===void 0||s===null)){if(r.visualOffset=Math.abs(e)<=He?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 ye(){p$1!==void 0&&(clearTimeout(p$1),p$1=void 0),c!==void 0&&c.visualOffset!==0&&(v=void 0,N=void 0);let e=Y.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),c=void 0,k=void 0;}function Se(){let e=g$1.value,r=c;if(e===null||r===void 0)return;let s=C$1().find(T=>T.id===r.anchor.id);if(s!==void 0)return (s.anchorTop??s.top)-e.getBoundingClientRect().top}function _e(){let e=c,r=Se();if(e===void 0||r===void 0)return;let s=e.expectedOffset-r;Math.abs(s)<=He||($e(e.visualOffset+s),e.committed=false,e.attempts=0);}function ce(){p$1!==void 0&&clearTimeout(p$1),p$1=setTimeout(()=>{p$1=void 0,!(P||c?.committed!==true)&&ye();},yn);}function je(){let e=g$1.value,r=c;if(S||e===null||r===void 0||P)return;let s=r.visualOffset;if(Math.abs(s)<=He){r.committed=true,ce();return}let T=Math.max(0,e.scrollHeight-e.clientHeight),R=Math.min(T,Math.max(0,e.scrollTop-s));if(Ne(R),e.scrollTop=R,Math.abs(e.scrollTop-R)>He){k=void 0,r.committed=false,r.attempts+=1,r.attempts<Tn?Te():(ye(),k=void 0,o$1=e.scrollTop);return}$e(0),o$1=e.scrollTop,r.expectedOffset=Se()??r.expectedOffset,r.committed=true,r.attempts=0,ce();}function Te(){p$1!==void 0&&clearTimeout(p$1),p$1=setTimeout(()=>{p$1=void 0,je();},jt);}function Oe(e){e!==void 0&&(c===void 0&&(c={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),_e(),!P&&je());}function Ke(e){let r=g$1.value;if(r===null||e===void 0)return;let s=r.getBoundingClientRect(),T=q(e,C$1(),{top:s.top,bottom:s.bottom});if(T!==void 0){let R=Math.max(0,r.scrollHeight-r.clientHeight),K=Math.min(R,Math.max(0,r.scrollTop+T));Ne(K),r.scrollTop=K,o$1=r.scrollTop,N=void 0;}}function Ve(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function se(){A+=1,k?.behavior==="smooth"&&(k=void 0),oe=false,P||(P=true,J+=1),Q!==void 0&&(clearTimeout(Q),Q=void 0);}function fe(){let e=g$1.value;if(!(e===null||J===a)){if(L||t.loadingOlder){a=J,ne=false;return}c!==void 0&&ye(),ne=true,e.scrollTop<=Ve()&&We()&&ze();}}function Xe(){A+=1,v=void 0,N=void 0,Q!==void 0&&(clearTimeout(Q),Q=void 0),ye(),P=false,oe=false,ae=false,ee=void 0,F=void 0,J+=1,a=-1,ie=-1,ne=true,L=false,G=false,k=void 0;}function qe(){ae||(Q!==void 0&&(clearTimeout(Q),Q=void 0),P=false,oe=false,c!==void 0&&(c.attempts=0),je());}function n(){ae||(Q!==void 0&&clearTimeout(Q),Q=setTimeout(()=>{Q=void 0,qe();},jt));}function d(){k=void 0,qe();}function l(e){re=false,ae=true,se(),ee=e.touches?.[0]?.clientY;}function w(e){let r=e.touches?.[0]?.clientY;r!==void 0&&(ee!==void 0&&r!==ee&&(A+=1),ee!==void 0&&r>ee?fe():ee!==void 0&&r<ee&&Z(),ee=r);}function h(){ae=false,ee=void 0,n();}function E(e){re=true,se(),e.deltaY<0?fe():e.deltaY>0&&Z(),n();}function z$1(e){e.pointerType!=="touch"&&(re=true,se(),F=e.clientY,n());}function le(e){e.pointerType==="touch"||!P||F===void 0||(e.clientY!==F&&(A+=1),e.clientY<F?fe():e.clientY>F&&Z(),F=e.clientY,n());}function me(e){e.pointerType!=="touch"&&(F=void 0,n());}function ge(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(re=true,se(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?fe():Z(),n());}function Ie(e="auto"){let r=g$1.value;if(r===null)return;A+=1,N=void 0,ye();let s=Math.max(0,r.scrollHeight-r.clientHeight);Ne(s,e),r.scrollTo?.({top:s,behavior:e}),r.scrollTop!==s&&(r.scrollTop=s),o$1=r.scrollTop,I.clear(),D=false,Ce();}function Je(){let e=g$1.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function Gt(){let e=g$1.value;return Je()&&e!==null&&e.scrollHeight>e.clientHeight+1}function Wt(e,r={}){return pt(_.get(e),r)}function pt(e,r){let s=g$1.value;if(s===null||e===void 0||!s.contains(e)||s.clientHeight<=0)return false;A+=1,ye();let T=s.getBoundingClientRect(),R=e.getBoundingClientRect(),K=r.block??"center",H;K==="start"?H=s.scrollTop+R.top-T.top:K==="end"?H=s.scrollTop+R.bottom-T.bottom:K==="nearest"?R.top>=T.top&&R.bottom<=T.bottom?H=s.scrollTop:R.top<T.top?H=s.scrollTop+R.top-T.top:H=s.scrollTop+R.bottom-T.bottom:H=j({currentScrollTop:s.scrollTop,scrollHeight:s.scrollHeight,targetHeight:R.height,targetTop:R.top,viewportHeight:s.clientHeight,viewportTop:T.top});let ve=Math.max(0,s.scrollHeight-s.clientHeight),Re=Math.min(ve,Math.max(0,H));N=void 0;let ke=r.behavior??"auto";return Ne(Re,ke),s.scrollTo?.({top:Re,behavior:ke}),s.scrollTop!==Re&&(s.scrollTop=Re),o$1=s.scrollTop,D=false,Ce(),true}function zt(){let e=g$1.value;if(e===null||O===void 0||!e.contains(O)||e.clientHeight<=0)return null;let r=O.getBoundingClientRect(),s=e.scrollTop+r.top-e.getBoundingClientRect().top+r.height/2,T=e.clientHeight/2;return {older:s<T-1,newer:e.scrollHeight-s<T-1}}function Yt(){I.clear();}function $t(){G=true,m$1.value=false;}function Xt(){G=false,ue();}function Jt(e,r){let s=_.get(e);if(s!==void 0&&s!==r&&(M?.unobserve(s),y?.unobserve?.(s),j$1.delete(s),x.delete(e)),r===null){_.delete(e),x.delete(e);return}_.set(e,r),j$1.set(r,e),M?.observe(r),y?.observe(r),ue();}function Qt(e,r,s){let T=q$1.get(e);if(s===null){q$1.delete(e);return}q$1.set(e,{element:s,label:r}),W===e&&s.style.setProperty("opacity",String(X)),T?.element!==s&&(s.dataset.imThreadDateSeparator=e);}return provide(lt,{registerMessageNode:Jt,registerDateNode:Qt,registerEntryUnreadNode:e=>{O=e??void 0;}}),watch(()=>t.contentKey,(e,r)=>{if(e===r)return;Xe();let s=g$1.value;s!==null&&(o$1=s.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,r)=>{let s=g$1.value;if(s===null)return;let T=new Set(r);r.length>0&&e.length>0&&!e.some(we=>T.has(we))&&Xe();let K=t.contentKey,H=A,ve=s.getBoundingClientRect(),Re=p(v,C$1(),{top:ve.top,bottom:ve.bottom}),ke=m$1.value,yt=r[r.length-1],Tt=yt===void 0?-1:e.indexOf(yt),Qe=Tt<0?[]:e.slice(Tt+1).filter(we=>!T.has(we)),Zt=Qe.some(we=>t.pendingSendMessageIds.includes(we)),bt=G||t.loadingNewer||L||t.loadingOlder,en=e.length===r.length&&e.every(we=>T.has(we))&&e.some((we,it)=>we!==r[it]);if(await nextTick(),S||t.contentKey!==K||A!==H)return;if(Zt&&t.followNewMessages){Ie();return}if(en&&ke&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!bt){Ie();return}let It=r[0];if(It!==void 0&&e.indexOf(It)>0&&(L=false,Oe(Re)),Qe.length>0){if(bt){G=false,c===void 0&&Ke(Re),m$1.value=false,ue();return}(ke||Qe.some(it=>t.shouldFollowAppendedMessage?.(it)===true))&&t.followNewMessages?Ie():I.add(Qe);}ue();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,r)=>{e||!r||!G||Me(()=>{t.loadingNewer||(G=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,r)=>{if(e){L=true;return}!r||!L||Me(()=>{t.loadingOlder||(L=false);});},{flush:"pre"}),onMounted(()=>{let e=g$1.value;if(e!==null){if(o$1=e.scrollTop,e.addEventListener("scroll",Ue,{passive:true}),e.addEventListener("scrollend",d,{passive:true}),e.addEventListener("touchstart",l,{passive:true}),e.addEventListener("touchmove",w,{passive:true}),e.addEventListener("touchend",h,{passive:true}),e.addEventListener("touchcancel",h,{passive:true}),e.addEventListener("wheel",E,{passive:true}),e.addEventListener("pointerdown",z$1,{passive:true}),e.addEventListener("pointermove",le,{passive:true}),e.addEventListener("pointerup",me,{passive:true}),e.addEventListener("pointercancel",me,{passive:true}),e.addEventListener("keydown",ge),typeof globalThis.ResizeObserver=="function"){y=new globalThis.ResizeObserver(()=>{S||g$1.value===null||Ce();}),y.observe(e),Y.value!==null&&y.observe(Y.value);for(let r of _.values())y.observe(r);}if(typeof globalThis.IntersectionObserver=="function"){M=new globalThis.IntersectionObserver(r=>{for(let s of r){let T=j$1.get(s.target);T!==void 0&&(s.isIntersecting?x.add(T):x.delete(T));}D=true,ue();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let r of _.values())M.observe(r);}ue();}}),onBeforeUnmount(()=>{S=true;let e=g$1.value;e!==null&&e.removeEventListener("scroll",Ue),e!==null&&(e.removeEventListener("scrollend",d),e.removeEventListener("touchstart",l),e.removeEventListener("touchmove",w),e.removeEventListener("touchend",h),e.removeEventListener("touchcancel",h),e.removeEventListener("wheel",E),e.removeEventListener("pointerdown",z$1),e.removeEventListener("pointermove",le),e.removeEventListener("pointerup",me),e.removeEventListener("pointercancel",me),e.removeEventListener("keydown",ge)),Q!==void 0&&clearTimeout(Q),ye(),ot(),y?.disconnect(),M?.disconnect(),Le(),O=void 0,_.clear(),j$1.clear(),x.clear(),q$1.clear(),I.clear();}),b({getViewportElement:()=>g$1.value,clearNewMessageBadge:Yt,clearActiveDate:Le,isAtBottom:computed(()=>m$1.value),isMeasurable:Je,isScrollable:Gt,newMessageCount:computed(()=>B$1.value),prepareHistoryPageAppend:$t,cancelHistoryPageAppend:Xt,trackRemoteMessageIds:(e,r)=>I.trackRemote(e,r),scrollToLatest:Ie,scrollToMessage:Wt,scrollToEntryUnread:()=>pt(O,{block:"center",behavior:"auto"}),getEntryUnreadCenteringNeeds:zt,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:Y,"data-im-thread-viewport-content":""},f.default?.())])}});var Kt=Symbol("ImThreadSurfaceContext");function wn(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 Mn(t){provide(Kt,t);}function ft(){let t=inject(Kt);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var mt=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),gt=Object.freeze({enabled:true,maxFillPages:8}),Pn=8,En=160;function An(t,i){return t?.conversationType===i.conversationType&&t.conversationId===i.conversationId}var xn=defineComponent({name:"ImThreadSurface",props:{conversation:{type:Object,required:true},context:{type:Object,default:void 0},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0},viewportOptions:{type:Object,default:()=>({})},initialViewportOptions:{type:Object,default:()=>({})},hooks:{type:Object,default:void 0}},setup(t,{expose:i$1,slots:b}){let f=t.context??ft(),g=ref(null),Y=ref(0),_=ref(false),O=ref(false),j=ref(false),x,q,o=ref(false),u=ref(false),v=ref(false),N=false,y,M=ref(true),D=[],$,V=0,S=0,k,A=null,W="",X="",G="",L=false,ne=false,P=ref(false),oe=ref(""),re=ref(false),ae,J,a=computed(()=>f.getState()),ie=computed(()=>!!a.value.pendingLocationMessageId),Q=computed(()=>a.value.pageVisible??f.isPageVisible?.()??true),ee=computed(()=>a.value.pageEngaged??f.isPageEngaged?.()??true),F=computed(()=>An(a.value.activeConversation,t.conversation)),c=computed(()=>({...mt,...t.viewportOptions})),p=computed(()=>{let n=t.initialViewportOptions.maxFillPages??gt.maxFillPages;return {enabled:t.initialViewportOptions.enabled??gt.enabled,maxFillPages:Number.isFinite(n)?Math.max(0,Math.floor(n)):gt.maxFillPages}}),m=computed(()=>!F.value||!a.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),B=computed(()=>F.value?i({messages:a.value.messages,entryUnread:a.value.entryUnread,formatDate:f.formatDate,leadingItems:f.leadingItems?.(),beforeMessageItems:f.beforeMessageItems}):[]),I=computed(()=>B.value.flatMap(n=>n.kind==="message"||n.kind==="system"?[n.message.id]:[])),te=computed(()=>a.value.messages.filter(n=>(n.status==="pending"||n.status==="uploading"||n.status==="sending")&&f.shouldFollowMessage?.(n)===true).map(n=>n.id));function C(){ae!==void 0&&(clearTimeout(ae),ae=void 0),J!==void 0&&(clearTimeout(J),J=void 0);}function U(n=false){if(C(),re.value=false,n){g.value?.clearActiveDate(),oe.value="";return}J=setTimeout(()=>{J=void 0,!re.value&&(g.value?.clearActiveDate(),oe.value="");},En);}function Le(n){if(n===null){U();return}C(),oe.value=n.label,re.value=true;let d=c.value.activeDateIdleDelay,l=Number.isFinite(d)?Math.max(0,d):mt.activeDateIdleDelay;ae=setTimeout(()=>{ae=void 0,U();},l);}async function Ee(n,d,l){t.hooks?.beforeAction?.(n);try{let w=await d();return l?.()!==!1&&t.hooks?.afterAction?.(n,w),w}catch(w){throw l?.()!==false&&t.hooks?.onError?.(n,w),w}}function Ae(n="automatic",d){return !F.value||a.value.loading||!a.value.hasOlder?Promise.resolve(0):Ee({kind:"load-older",source:n},()=>f.actions.loadOlder(),d)}function xe(){return Ge()}function Ge(n){let d=f.actions.loadNewer,l=a.value.loadingNewer??a.value.loading;return !F.value||l||!a.value.hasNewer||d===void 0?Promise.resolve(0):Ee({kind:"load-newer"},()=>d(),n)}async function De(n){for(let d=0;d<Pn;d+=1){if(!F.value||j.value||O.value||ie.value)return;let l=n==="older"?a.value.hasOlder:a.value.hasNewer,w=n==="older"?a.value.olderError:a.value.newerError;if(!l||w!==null||(n==="older"?await Ae("user-scroll"):await xe())>0)return;let E=n==="older"?a.value.hasOlder:a.value.hasNewer,z=n==="older"?a.value.olderError:a.value.newerError;if(!E||z!==null)return}}async function rt(){return !F.value||f.actions.loadNewer===void 0?0:Me({kind:"load-newer"},()=>f.actions.retryNewer?.()??f.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function Ce(){return F.value?Me({kind:"retry-older"},()=>f.actions.retryOlder?.()??f.actions.loadOlder({force:true})):0}async function Me(n,d){let l=m.value,w=++V;A=null,G="";let h;try{h=await Ee(n,d);}catch(E){throw ce(l,w)&&(G=l),E}return ce(l,w)&&!P.value&&(A=null,Ve()),h}async function ot(){if(!F.value)return false;let n=m.value;fe();let d=++S;return j.value=false,se(true),L=true,W=n,X=Oe(Te()),!await Ee({kind:"jump-to-latest"},()=>f.actions.jumpToLatest?.()??Promise.resolve(!a.value.isHistoryWindow),()=>Z(n,d))||!Z(n,d)||(await nextTick(),!Z(n,d))?false:(g.value?.scrollToLatest(),_.value=true,v.value=false,Fe(),true)}function ue(n=false){let d=g.value,l=d?.getViewportElement();u.value=d?.isScrollable()===true;let w=a.value.entryUnreadNavigation;o.value=w?.state==="located"&&D.includes(w.firstMessageId),P.value&&o.value&&(_.value=true);let h=l==null?0:Math.max(0,l.scrollHeight-l.clientHeight-l.scrollTop);v.value=w!==void 0&&h>50,n&&w!==void 0&&l!==null&&l!==void 0&&l.clientHeight>0&&h>=l.clientHeight&&(_.value=true);}function Fe(){let n=f.actions.markConversationRead;if(n===void 0||!ee.value||!F.value||!P.value||O.value||N&&(!M.value||a.value.hasNewer)||y!==void 0||a.value.error!==null)return;let d=m.value,l=n().then(()=>{y===l&&d===m.value&&(N=true);}).catch(w=>{!ne&&y===l&&d===m.value&&t.hooks?.onError?.({kind:"mark-conversation-read"},w);}).finally(()=>{y===l&&(y=void 0);});y=l;}async function We(){let n=f.actions.loadEntryUnread;if(!F.value||O.value||n===void 0)return "cancelled";let d=m.value,l=++S;j.value=false;let w=new AbortController;q=w,x=l,O.value=true,se(true),L=true;try{let h=await Ee({kind:"jump-to-entry-unread"},()=>n({signal:w.signal}),()=>Z(d,l));if(!Z(d,l))return "cancelled";if(!h||a.value.entryUnread.state!=="located")return "unavailable";let z=await ze(d,l);return z&&(_.value=!0),z?"located":Z(d,l)?"unavailable":"cancelled"}catch(h){if(!Z(d,l))return "cancelled";throw h}finally{x===l&&(x=void 0,q=void 0,O.value=false);}}async function ze(n,d){await nextTick();for(let l=0;l<60;l+=1){if(!Z(n,d))return false;if(g.value?.scrollToEntryUnread())return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(w=>window.requestAnimationFrame(()=>w()));}return false}function Ye(n){M.value=n.isAtBottom,Y.value=n.newMessageCount,ue(),Ve();}function Be(n,d){return g.value?.scrollToMessage(n,d)??false}function Z(n,d){return !ne&&S===d&&m.value===n&&F.value}async function Ue(n,d,l,w){for(let h=0;h<60;h+=1){if(!Z(n,d))return false;if(Be(l,w))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(E=>window.requestAnimationFrame(()=>E()));}return false}async function Ne(n,d){let l=g.value;if(l===null||!l.isMeasurable()||l.isScrollable())return true;let w=0,h=!a.value.hasOlder,E=!a.value.hasNewer||f.actions.loadNewer===void 0,z=()=>Z(n,d),le=async ge=>{if(!Z(n,d)||w>=p.value.maxFillPages)return false;let Ie=0;if(ge==="older"){if(h||!a.value.hasOlder)return false;Ie=await Ae("automatic",z),h=!a.value.hasOlder;}else {if(E||!a.value.hasNewer)return false;l.prepareHistoryPageAppend();try{Ie=await Ge(z);}catch(Je){throw z()&&l.cancelHistoryPageAppend(),Je}z()&&Ie<=0&&!a.value.hasNewer&&l.cancelHistoryPageAppend(),E=!a.value.hasNewer;}return w+=1,await nextTick(),await nextTick(),Z(n,d)&&(Ie>0||!(ge==="older"?h:E))};!h&&!await le("older")&&(h=true),!E&&!await le("newer")&&(E=true);let me="older";for(;Z(n,d)&&w<p.value.maxFillPages&&l.isMeasurable()&&!l.isScrollable()&&(!h||!E);){let ge=me==="older"?h?"newer":"older":E?"older":"newer";me=ge==="older"?"newer":"older",await le(ge)||(ge==="older"?h=true:E=true);}return Z(n,d)}async function $e(n,d={behavior:"auto",block:"center"}){if(!F.value||n==="")return false;let l=m.value;fe();let w=j.value||k!==void 0||(a.value.loadingOlder??a.value.loading)||(a.value.loadingNewer??a.value.loading),h=++S;j.value=true,se(true),L=true,W=l,X=Oe(Te());let E=()=>Z(l,h);try{if(w||!I.value.includes(n)){let z=f.actions.loadAround;if(z===void 0)return !1;let le={};k=le;try{if(!await Ee({kind:"locate-message",messageId:n},()=>z(n),E)||!E())return !1}finally{k===le&&(k=void 0);}}return await nextTick(),await nextTick(),!E()||!await Ne(l,h)?!1:await Ue(l,h,n,d)}finally{S===h&&(j.value=false);}}function ye(){$!==void 0&&(clearTimeout($),$=void 0);}function Se(){if(ye(),!P.value)return;let n=t.readActions;if(n===void 0&&f.actions.markVisibleMessages===void 0)return;let d=Number.isFinite(c.value.visibleReadDelay)?Math.max(0,c.value.visibleReadDelay):mt.visibleReadDelay;$=setTimeout(()=>{if($=void 0,!F.value||!ee.value)return;Fe();let l=f.actions.markVisibleMessages;if(l!==void 0){let E=D;l(E).catch(z=>{t.hooks?.onError?.({kind:"visible-range",messageIds:E},z);});return}if(n===void 0)return;let w=D[D.length-1];if(w===void 0)return;let h=n.resolveTarget===void 0?w:n.resolveTarget(w);h!=null&&Promise.resolve(n.markRead(h)).catch(E=>{t.hooks?.onError?.({kind:"visible-range",messageIds:D},E);});},d);}function _e(n){D=Object.freeze([...n]),ue();let d={kind:"visible-range",messageIds:D};t.hooks?.beforeAction?.(d);try{f.actions.onVisibleRange?.(D),t.hooks?.afterAction?.(d,void 0);}catch(l){throw t.hooks?.onError?.(d,l),l}P.value?Se():Ve();}function ce(n,d){return !ne&&V===d&&m.value===n&&!L&&!ie.value}function je(n,d){ce(n,d)&&(W=n,X=Oe(Te()),P.value=true,ue(),Fe(),Se());}function Te(){return a.value.entryUnreadNavigation===void 0?a.value.entryUnread:{state:"none"}}function Oe(n){return n.state!=="located"?n.state:`${n.state}:${n.firstMessageId}`}async function Ke(n,d,l){for(let w=0;w<60;w+=1){if(!ce(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 Ve(){let n=m.value,d=Oe(Te());if(n===""||a.value.loading||j.value||ie.value||a.value.error!==null&&a.value.messages.length===0||W===n&&(X===d||X.startsWith("located:")||L)||G===n||A!==null)return;if(!p.value.enabled){W=n,X=d,P.value=true,Se();return}let l=++V;L=false,P.value=false;let w=(async()=>{if(await nextTick(),!ce(n,l))return;let h=g.value;if(h===null||!h.isMeasurable())return;let E=Te();if(E.state==="located"&&!I.value.includes(E.firstMessageId))return;let z=E.state==="located"?await Ke(n,l,E.firstMessageId):false;if(E.state==="located"&&!z)return;z||h.scrollToLatest();let le=0;for(;ce(n,l)&&le<p.value.maxFillPages&&a.value.error===null&&(a.value.hasOlder||a.value.hasNewer&&f.actions.loadNewer!==void 0)&&h.isMeasurable()&&!h.isScrollable();){if(a.value.hasNewer&&f.actions.loadNewer!==void 0&&(a.value.messages.length===0||!a.value.hasOlder)){let ge=S;h.prepareHistoryPageAppend();try{await xe(),await nextTick();}finally{m.value===n&&S===ge&&(V===l||L)&&h.cancelHistoryPageAppend();}}else await Ae();if(!ce(n,l)||(le+=1,await nextTick(),await nextTick(),!h.isMeasurable()))return}if(!ce(n,l)||!h.isMeasurable())return;let me=Te();if(me.state==="located"){if(!I.value.includes(me.firstMessageId)||!await Ke(n,l,me.firstMessageId))return}else h.scrollToLatest();await nextTick(),je(n,l);})().catch(()=>{ce(n,l)&&(G=n);}).finally(()=>{A===w&&(A=null);});A=w;}function se(n,d=false){V+=1,A=null,L=false,P.value=n,n||(W="",X="",d||(G="")),ye();}function fe(){q!==void 0&&(S+=1,q.abort(),q=void 0,x=void 0,O.value=false);}function Xe(){if(ue(true),fe(),L=true,P.value)return;let n=m.value;V+=1,A=null,W=n,P.value=true,Se();}let qe=Object.freeze({getViewportElement:()=>g.value?.getViewportElement()??null,loadOlder:Ae,retryOlder:Ce,loadNewer:xe,retryNewer:rt,jumpToLatest:ot,jumpToEntryUnread:We,scrollToMessage:Be,locateMessage:$e,focusViewport:()=>g.value?.focusViewport()});return i$1(qe),watch(ee,n=>{n&&P.value?Se():ye();}),watch([()=>a.value.activeRemoteMessageRevision??0,g,m],()=>{let n=g.value;if(n===null||!F.value)return;let d=f.actions.drainActiveRemoteMessageIds?.()??[];n.trackRemoteMessageIds(d,{isAtBottom:M.value,isHistoryWindow:a.value.isHistoryWindow,isPageVisible:Q.value})&&(M.value=false);},{flush:"post"}),watch(()=>a.value.pendingLocationMessageId??"",n=>{(n!==""||j.value)&&(S+=1,j.value=false),n!==""&&(fe(),P.value||se(false));},{flush:"sync"}),watch([m,()=>a.value.loading,()=>a.value.error,()=>I.value.length,()=>a.value.hasOlder,()=>Oe(Te()),p,()=>a.value.hasNewer,ie],([n,d,l,w,,h],[E,,,z,,le])=>{if(n!==E&&(fe(),S+=1,j.value=false,k=void 0,se(false),U(true),g.value?.clearNewMessageBadge(),Y.value=0,M.value=true,D=[],_.value=false,o.value=false,u.value=false,v.value=false,O.value=false,x=void 0,N=false,y=void 0),n!==""&&n===E&&z!==void 0&&z>0&&w===0&&(a.value.hasOlder||a.value.hasNewer)&&P.value&&se(false,true),n!==""&&n===E&&h!==le&&!X.startsWith("located:")&&!L&&h.startsWith("located:")&&(W="",X="",P.value=false),n===""){se(false);return}if(l!==null&&a.value.messages.length===0){P.value||se(false,true);return}d||Ve();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{ne=true,fe(),S+=1,se(false),U(true);}),()=>{let n={conversation:t.conversation,state:a.value,items:B.value,actions:qe,initialViewportSettled:m.value!==""&&(a.value.messages.length===0?!a.value.loading&&a.value.error===null&&!a.value.hasOlder&&!a.value.hasNewer:P.value&&W===m.value)},d=[b.header?.(n),b["before-list"]?.(n)];if(!F.value)d.push(b.unsupported?.(n)??h$1("div",{"data-im-thread-unsupported":""}));else if(!a.value.ready&&a.value.loading)d.push(b.loading?.(n)??h$1("div",{"data-im-thread-loading":""}));else if(a.value.error!==null&&a.value.messages.length===0)d.push(b.error?.(n)??h$1("div",{"data-im-thread-error":""}));else if(a.value.ready&&a.value.messages.length===0&&!a.value.hasOlder&&!a.value.hasNewer)d.push(b.empty?.(n)??h$1("div",{"data-im-thread-empty":""}));else {let l=h$1(ct,{ref:g,messageIds:I.value,contentKey:`${t.conversation.conversationType}\0${t.conversation.conversationId}`,loadingOlder:a.value.loadingOlder??a.value.loading,hasNewer:a.value.hasNewer,loadingNewer:a.value.loadingNewer??a.value.loading,followThreshold:c.value.followThreshold,olderPrefetchThreshold:c.value.olderPrefetchThreshold,visibleMargin:c.value.visibleMargin,activeDateOffset:c.value.activeDateOffset,activeDateEnabled:b["active-date"]!==void 0,resizeFollowEnabled:P.value&&!O.value&&!j.value&&!ie.value,followNewMessages:Q.value&&!O.value&&!j.value&&!ie.value,shouldFollowAppendedMessage:w=>{let h=a.value.messages.find(E=>E.id===w);return h===void 0?false:f.shouldFollowMessage?.(h)===true},pendingSendMessageIds:te.value,onReachStart:()=>{De("older").catch(()=>{});},onReachEnd:()=>{De("newer").catch(()=>{});},onSettled:Ye,onUserScroll:Xe,onActiveDateChange:Le,onVisibleRange:_e,onNewMessageCount:w=>{Y.value=w;}},{default:()=>[b["viewport-before"]?.(n),h$1(dt,{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:oe.value,visible:re.value&&oe.value!==""}),l,b["entry-unread-navigation"]?.({...n,count:a.value.entryUnreadNavigation?.state==="none"?0:a.value.entryUnreadNavigation?.count??0,loading:O.value,visible:n.initialViewportSettled&&!_.value&&!o.value&&!a.value.isHistoryWindow&&a.value.entryUnreadNavigation!==void 0&&a.value.entryUnreadNavigation.state!=="none"&&a.value.entryUnreadNavigation.count>0&&(u.value||a.value.hasOlder)})])),a.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:Y.value,visible:v.value||!M.value||a.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 On(t){let i=new Map;for(let f of t){if(i.has(f.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${f.kind}`);i.set(f.kind,f.component);}let b=Object.freeze([...i.keys()]);return Object.freeze({kinds:b,resolve:f=>i.get(f)})}var Cn=140,Nn=120;function nt(t,i){if(t.width<=0||t.height<=0)return 0;let b=Math.max(0,Math.min(t.right,i.right)-Math.max(t.left,i.left)),f=Math.max(0,Math.min(t.bottom,i.bottom)-Math.max(t.top,i.top));return Math.min(1,b*f/(t.width*t.height))}function vt(t,i){return {x:t.x,y:t.top-i,top:t.top-i,bottom:t.bottom+i,left:t.left,right:t.right,width:t.width,height:t.height+i*2,toJSON:()=>({})}}function ht(t){let i=Math.max(0,t.scrollIdleMs??Cn),b=Math.max(0,t.visibilityDwellMs??Nn),f=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),g=Math.max(0,t.revealMarginPx??0),Y=Math.max(0,t.preloadMarginPx??0),_=Math.max(g,Y),O=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),j=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),x=new Map,q=new Map,o=reactive(new Set),u=new Set,v=new Set,N=[],y=null,M=null,D=null,$=false,V=false,S=false,k=false,A,W;function X(){A!==void 0&&clearTimeout(A),A=void 0;}function G(){W!==void 0&&clearTimeout(W),W=void 0;}function L(c=false){if(!c&&M!==null||y===null)return;let p=y.getBoundingClientRect(),m=vt(p,_);for(let[B,I]of x){let te=B.getBoundingClientRect();I.ratio=nt(te,p),I.intersecting=I.ratio>0,I.revealIntersecting=_>0?nt(te,m)>0:I.intersecting&&I.ratio>=f;}}function ne(c){return c.intersecting&&c.ratio>=f}function P(){for(let[c,p]of x)!p.revealIntersecting||o.has(p.key)||_>g&&(g===0&&!ne(p)||g>0&&(y===null||nt(c.getBoundingClientRect(),vt(y.getBoundingClientRect(),g))<=0))||(o.add(p.key),t.onRevealed?.(p.item));}function oe(c,p=false){let m=new Set(c.map(I=>I.key));if(!(!(m.size!==v.size||[...m].some(I=>!v.has(I)))&&!p)){v.clear();for(let I of m)v.add(I);t.onSettledVisibleChange?.(c.map(I=>I.item));}}function re(c,p=false){!p&&c.length===N.length&&c.every((m,B)=>m.key===N[B]?.key&&m.item===N[B]?.item)||(N=c,t.onSettledPreloadChange?.(c.map(m=>m.item)));}function ae(){if(S||$)return;let c=V;V=false,L(),P();let p=y?.getBoundingClientRect(),m=p===void 0?0:(p.top+p.bottom)/2,B=[...x.entries()].filter(([,I])=>ne(I)).sort(([I],[te])=>{let C=I.getBoundingClientRect(),U=te.getBoundingClientRect();return Math.abs((C.top+C.bottom)/2-m)-Math.abs((U.top+U.bottom)/2-m)}).slice(0,j).map(([,I])=>I);if(oe(B,c),t.onSettledPreloadChange!==void 0&&p!==void 0){let I=vt(p,Y),te=[...x.entries()].filter(([,C])=>C.revealIntersecting).map(([C,U])=>({target:U,rect:C.getBoundingClientRect()})).filter(({target:C,rect:U})=>ne(C)||Y>0&&nt(U,I)>0).sort((C,U)=>Number(ne(U.target))-Number(ne(C.target))||Math.abs((C.rect.top+C.rect.bottom)/2-m)-Math.abs((U.rect.top+U.rect.bottom)/2-m)).slice(0,O).map(({target:C})=>C);re(te,c);}for(let I of B)u.has(I.key)||(u.add(I.key),t.onActivated?.(I.item));}function J(){S||$||(G(),W=setTimeout(()=>{W=void 0,ae();},b));}function a(){S||(V=true,ie(true),re([]),L(),P(),oe([]),G(),X(),A=setTimeout(()=>{A=void 0,ie(false),J();},i));}function ie(c){$!==c&&($=c,t.onScrollingChange?.(c));}function Q(){y?.removeEventListener("scroll",a),M?.disconnect(),D?.disconnect(),M=null,D=null,y=null;}function ee(c=true){if(S)return;let p=t.getRoot();if(!(p===y&&y!==null)){if(re([]),Q(),y=p,y===null){c&&!k&&(k=true,Promise.resolve().then(()=>{k=false,S||(ee(false),J());}));return}if(y.addEventListener("scroll",a,{passive:true}),typeof IntersectionObserver<"u"){M=new IntersectionObserver(m=>{for(let B of m){let I=x.get(B.target);I!==void 0&&(I.intersecting=B.isIntersecting,I.ratio=B.intersectionRatio,_===0&&(I.revealIntersecting=B.isIntersecting&&B.intersectionRatio>=f));}P(),J();},{root:y,threshold:[0,f,1]}),_>0&&(D=new IntersectionObserver(m=>{for(let B of m){let I=x.get(B.target);I!==void 0&&(I.revealIntersecting=B.isIntersecting);}P(),J();},{root:y,rootMargin:`${_}px 0px`,threshold:0}));for(let m of x.keys())M.observe(m);for(let m of x.keys())D?.observe(m);}else L(),P();}}function F(c){re(N.filter(p=>p.key!==c)),o.delete(c),u.delete(c),v.delete(c);}return {register(c,p){if(S)return;let m=t.getKey(c),B=o.has(m),I=u.has(m),te=p===null?void 0:x.get(p);te!==void 0&&te.key!==m&&(q.delete(te.key),x.delete(p),F(te.key));let C=q.get(m);if(C!==void 0&&C!==p&&(M?.unobserve(C),D?.unobserve(C),x.delete(C),q.delete(m)),p===null){C!==void 0&&(M?.unobserve(C),D?.unobserve(C),x.delete(C),q.delete(m)),F(m);return}let U=x.get(p);if(U?.key===m&&U.item===c){ee();return}x.set(p,{item:c,key:m,intersecting:U?.key===m?U.intersecting:false,ratio:U?.key===m?U.ratio:0,revealIntersecting:U?.key===m?U.revealIntersecting:false}),q.set(m,p),ee(),M?.observe(p),D?.observe(p),L(true),P(),B&&t.onRevealed?.(c),I&&t.onActivated?.(c),J();},isRevealed:c=>o.has(t.getKey(c)),isActivated:c=>u.has(t.getKey(c)),isSettledVisible:c=>v.has(t.getKey(c)),isScrolling:()=>$,notifyScroll:a,refresh(){ee(),L(true),P(),J();},reset(){X(),G(),ie(false),V=false,oe([]),re([]),Q(),x.clear(),q.clear(),o.clear(),u.clear();},dispose(){S||(X(),G(),ie(false),V=false,oe([]),re([]),Q(),x.clear(),q.clear(),o.clear(),u.clear(),S=true);}}}function kn(t){let i=new Map,b=new Map,f=shallowReactive(new Map),g=[],Y=false,_=o=>{let u=i.get(o.channel);return u===void 0?o.channel:`${o.channel}\0${u.getKey(o.item)}`},O=ht({getRoot:t.getRoot,getKey:o=>o.key,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:o=>{for(let u of i.values())u.onScrollingChange?.(o);},onRevealed:o=>o.targets.forEach(u=>i.get(u.channel)?.onRevealed?.(u.item)),onActivated:o=>o.targets.forEach(u=>i.get(u.channel)?.onActivated?.(u.item)),onSettledPreloadChange:o=>{let u=o.flatMap(v=>v.targets);for(let[v,N]of i){let y=u.filter(M=>M.channel===v).map(M=>M.item);N.onSettledPreloadChange?.(y.slice(0,Math.max(0,N.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:o=>{j(o.flatMap(u=>u.targets));}});function j(o){g=o;for(let[u,v]of i){let N=o.filter(M=>M.channel===u).map(M=>M.item),y=v.maxSettledVisible===void 0?N:N.slice(0,v.maxSettledVisible);v.onSettledVisibleChange?.(y);}}function x(o){let u=[...b.values()].flatMap(y=>[...y.values()].filter(M=>M.element===o).map(M=>M.target)),v=f.get(o);if(v!==void 0&&u.length===v.targets.length&&u.every((y,M)=>y===v.targets[M]))return;if(u.length===0)v!==void 0&&(f.delete(o),[...f.values()].some(y=>y.key===v.key)||O.register(v,null));else {let y={key:JSON.stringify(u.map(_)),targets:u};f.set(o,y),O.register(y,o);}let N=g.flatMap(y=>{let M=b.get(y.channel)?.get(i.get(y.channel).getKey(y.item));return M===void 0?[]:[M.target]});(N.length!==g.length||N.some((y,M)=>y!==g[M]))&&j(N);}function q(o){return u=>{if(Y)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(i.has(o))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${o}`);i.set(o,u);let v=shallowReactive(new Map);b.set(o,v);let N=false,y=V=>({channel:o,item:V});function M(){let V=[...v.values()].map(S=>S.element);v.clear();for(let S of V)x(S);u.onScrollingChange?.(false),u.onSettledVisibleChange?.([]),u.onSettledPreloadChange?.([]);}function D(V,S){let k=v.get(u.getKey(V)),A=k===void 0?void 0:f.get(k.element);return A!==void 0&&S(A)}return {register(V,S){if(N||Y)return;let k=u.getKey(V),A=v.get(k);if(S===null){A!==void 0&&(v.delete(k),x(A.element));return}if(A?.target.item===V&&A.element===S){let X=f.get(S);X!==void 0&&O.register(X,S);return}let W=A?.target.item===V?A.target:y(V);for(let[X,G]of v)X!==k&&G.element===S&&v.delete(X);v.set(k,{target:W,element:S}),x(S),A!==void 0&&A.element!==S&&x(A.element);},isRevealed:V=>D(V,O.isRevealed),isActivated:V=>D(V,O.isActivated),isSettledVisible:V=>D(V,O.isSettledVisible),isScrolling:O.isScrolling,notifyScroll:O.notifyScroll,refresh:O.refresh,reset:M,dispose(){N||(M(),N=true,i.delete(o),b.delete(o));}}}}return {createFactory:q,refresh:O.refresh,dispose(){if(!Y){for(let o of f.values())O.register(o,null);f.clear();for(let o of i.values())o.onSettledPreloadChange?.([]);b.clear(),i.clear(),O.dispose(),Y=true;}}}}export{st as ImThreadBodySwitch,dt as ImThreadItems,xn as ImThreadSurface,ct as ImThreadViewport,wn as createImThreadSurfaceContext,On as createMessageRendererRegistry,kn as createThreadVisibilityTargetGroup,ht as createThreadVisibilityTargets,Mn as provideImThreadSurfaceContext,nn as useImText,ft as useImThreadSurfaceContext,an as useOptionalImThreadReadActions};
1
+ import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-2LUSPYH5.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-JOD67FT3.js';import {a}from'./chunk-Q2DEFN53.js';import'./chunk-6EPXLFLD.js';import'./chunk-ZFYM6YHK.js';import'./chunk-JHGB6KYI.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 fn(t){let o=0,v=0;for(let c of t)c.kind==="video"?v+=1:o+=1;return {imageCount:o,videoCount:v}}function mn(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:fn(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 Gt=Symbol("ImThreadReadActions");function Wt(t){provide(Gt,t);}function hn(){return inject(Gt,void 0)}var Tt=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 Wt(t.readActions),()=>{let c=h(t.message),m=t.rendererRegistry.resolve(c);return m!==void 0?h$1(m,{...o,message:t.message,presentation:t.presentation}):v["unsupported-body"]!==void 0?v["unsupported-body"]({kind:c,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":c,"aria-hidden":"true"})}}});var bt=Symbol("ImThreadViewportRegistration");function ut(){return inject(bt,void 0)}var It=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=ut(),c=new Map,m=new Map;onUpdated(()=>{let a=new Set,h=new Set;for(let f of t.items)f.kind==="message"||f.kind==="system"?a.add(f.key):f.kind==="date-separator"&&h.add(f.key);for(let f of c.keys())a.has(f)||c.delete(f);for(let f of m.keys())h.has(f)||m.delete(f);}),onUnmounted(()=>{c.clear(),m.clear();});function A(a,h){let f=Array.isArray(h)?h:[h];return f.length===1&&isVNode(f[0])?cloneVNode(f[0],{key:a}):h$1(Fragment,{key:a},f)}function C(a,h){let f=c.get(a);if(f?.messageId===h)return f.setElement;let R=D=>{v?.registerMessageNode(h,D instanceof HTMLElement?D:null);};return c.set(a,{messageId:h,setElement:R}),R}function V(a,h){let f=m.get(a);if(f!==void 0)return f.label=h,f.setElement;let R={label:h,setElement:D=>{v?.registerDateNode(a,R.label,D instanceof HTMLElement?D:null);}};return m.set(a,R),R.setElement}function M(a){return o.encryption?.({item:a})??h$1("div",{"data-im-thread-encryption":a.key})}function g(a){let h=V(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 x(a){v?.registerEntryUnreadNode(a instanceof HTMLElement?a:null);}function u(a){return o["entry-unread"]?.({item:a,setElement:x})??h$1("div",{ref:x,"data-im-thread-entry-unread":a.key,...a.count===void 0?{}:{"data-count":String(a.count)}})}function y(a){let h=C(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(Tt,{message:a.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":o["unsupported-body"]===void 0?void 0:f=>o["unsupported-body"]?.(f)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(a=>{switch(a.kind){case "encryption":return o.item!==void 0?A(a.key,o.item({item:a})):A(a.key,M(a));case "date-separator":return o.item!==void 0?A(a.key,o.item({item:a,setElement:V(a.key,a.label)})):A(a.key,g(a));case "entry-unread":return o.item!==void 0?A(a.key,o.item({item:a,setElement:x})):A(a.key,u(a));case "system":case "message":return A(a.key,y(a))}return a}))}});function nt(){let t,o=0,v=0,c;function m(){t!==void 0&&clearTimeout(t),t=void 0,c=void 0;}function A(){t=void 0;let V=o-performance.now();if(V>0){v=o,t=setTimeout(A,V);return}let M=c;c=void 0,M?.();}function C(V,M){o=performance.now()+M,c=V,!(t!==void 0&&o>=v)&&(t!==void 0&&clearTimeout(t),v=o,t=setTimeout(A,M));}return {schedule:C,cancel:m}}function $t(t){let o=new Set,v=new Map,c=new Set;function m(){let M=[...c];c.clear();let g=[],x=[];for(let u of M)if(u.active)try{g.push({job:u,commit:u.read()});}catch(y){x.push(y);}for(let{job:u,commit:y}of g)if(u.active)try{y?.();}catch(a){x.push(a);}x.length>0&&queueMicrotask(()=>{throw new AggregateError(x,"Thread layout measurement failed")});}function A(M){M.active&&(c.add(M),t.requestFrame(m));}function C(M,g){let x=v.get(g);x?.delete(M),x?.size===0&&(v.delete(g),t.unobserve(g));}function V(M){let g={read:M,elements:new Set,active:true};return o.add(g),{observe(x){if(!g.active)return;let u=new Set(x),y=u.size!==g.elements.size||[...u].some(a=>!g.elements.has(a));for(let a of g.elements)u.has(a)||C(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,y&&u.size>0&&A(g);},invalidate:()=>A(g),dispose(){g.active=false,c.delete(g),o.delete(g);for(let x of g.elements)C(g,x);g.elements.clear();}}}return {register:V,hasTarget:M=>v.has(M),observeTargets:()=>v.forEach((M,g)=>t.observe(g)),resized:M=>M.forEach(g=>v.get(g)?.forEach(A)),invalidateAll:()=>o.forEach(A),dispose(){for(let M of o)M.active=false;o.clear(),c.clear(),v.clear();}}}var Qt=120,Vn=500,Ye=.5,xn=8;function wt(t){let o=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(o!==void 0&&Number.isFinite(o)&&o>0?o:1)}var Mt=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:c}){let m$1=ref(null),A=ref(null),C$1=new Map,V,M=new Map,g$1=new Set,x=new Map,u=0,y=[],a,h,f,R,D=$t({requestFrame:le,observe:e=>f?.observe(e),unobserve:e=>{e!==m$1.value&&e!==A.value&&!M.has(e)&&f?.unobserve(e);}}),$,B$1=false,O,z$1=new Set,j$1=false,K,q$1=0,te="",we=1,J=false,ee=false,_=true,X=false,ve=false,be=true,ne=false,i=0,ae=-1,Me=-1,pe=nt(),N,ie,H,F,se=ref(true),Pe=ref(0),ue=C(e=>{Pe.value=e,o$1("new-message-count",e);});function He(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=C$1.get(r);if(s===void 0)return [];let T=s.getBoundingClientRect(),E=s.querySelector("[data-im-thread-anchor-point]");return [{id:r,top:T.top,bottom:T.bottom,anchorTop:E?.getBoundingClientRect().top??T.top}]})}function S(e="",r=1){let s=Math.min(1,Math.max(0,r));te!==""&&te!==e&&x.get(te)?.element.style.removeProperty("opacity"),te=e,we=s,e!==""&&x.get(e)?.element.style.setProperty("opacity",String(s));}function I(){S();}function P(){let e=m$1.value;if(j$1||e===null||!t.activeDateEnabled)return;let r=[...x.entries()].filter(([,W])=>e.contains(W.element)).map(([W,U])=>{let Ee=U.element.getBoundingClientRect();return {key:W,label:U.label,top:Ee.top,height:Ee.height}}).sort((W,U)=>W.top-U.top),s=e.getBoundingClientRect(),T=r.find(W=>W.height>0)?.height??28,E=g({markers:r,viewportTop:s.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:T});if(E===null){I(),o$1("active-date-change",null);return}S(E.inlineDateKey,E.inlineOpacity),o$1("active-date-change",E);}function k(e){h={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Z(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)<=wt(e)}function Y(e){return Z(e)||K!==void 0&&(K.behavior==="smooth"||Math.abs(e.scrollTop-K.targetTop)<=wt(e))?0:e.scrollTop-u}function re(e,r){r!==0&&(u=e.scrollTop-r,K=void 0,Xe());}function Ae(e,r){let s=Y(e);if(H!==void 0)return H.expectedOffset-=s,Qe(),re(e,s),X||Ze(),false;let T=h;if(T===void 0)return false;let E=a,W=E===void 0?void 0:p$1([E.id])[0],U=e.scrollTop-T.scrollTop,Ee=Z(e)?0:U,Ue=E===void 0||W===void 0?0:(W.anchorTop??W.top)-r.top-E.offset+U;return T.scrollHeight!==e.scrollHeight||T.width!==e.clientWidth||T.height!==e.clientHeight||Math.abs(Ue)>Ye?(h=void 0,!J&&!ee&&!t.loadingOlder&&!t.loadingNewer&&!t.hasNewer&&t.resizeFollowEnabled&&se.value&&Math.abs(Ee)<=Ye?(G(),true):(E!==void 0&&lt({...E,offset:E.offset-Ee}),re(e,s),false)):false}function Q(){let e=m$1.value;if(j$1||e===null)return;let r=e.getBoundingClientRect();if(Ae(e,r))return;let s=$!==void 0&&B$1?t.messageIds.filter(U=>g$1.has(U)):t.messageIds,T=p$1(s);if($!==void 0&&B$1&&T.length===0){se.value=He(e);return}let E=T.filter(U=>B({viewportTop:r.top,viewportBottom:r.bottom,messageTop:U.top,messageBottom:U.bottom,margin:t.visibleMargin})).map(U=>U.id),W=E.length!==y.length||E.some((U,Ee)=>y[Ee]!==U);y=Object.freeze(E),a=o(T,{top:r.top,bottom:r.bottom}),k(e),ue.acknowledgeVisible(E),se.value=He(e),W&&o$1("visible-range",y),o$1("settled",{visibleMessageIds:y,...y.length===0?{}:{newestVisibleMessageId:y[y.length-1]},isAtBottom:se.value,newMessageCount:Pe.value});}function le(e){if(z$1.add(e),O!==void 0)return;let r=()=>{O=void 0;let s=[...z$1];z$1.clear(),s.forEach(T=>T());};typeof globalThis.requestAnimationFrame=="function"?O=globalThis.requestAnimationFrame(r):O=globalThis.setTimeout(r,0);}function he(){O!==void 0&&(typeof O=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(O):globalThis.clearTimeout(O),O=void 0,z$1.clear());}function oe(){le(Q);}function $e(){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,k(e));}function ot(){return _&&H===void 0&&!ee&&!t.loadingOlder}function at(){$e(),_=false,ae=i,ee=true,se.value=false,o$1("reach-start"),le(()=>{t.loadingOlder||(ee=false);});}function it(e){return t.hasNewer&&!J&&!t.loadingOlder&&!t.loadingNewer&&He(e)}function Je(){J=true,se.value=false,Me=i,o$1("reach-end"),le(()=>{t.loadingNewer||(J=false);});}function de(){let e=m$1.value;e===null||i===Me||!it(e)||Je();}function Xe(){let e=m$1.value;if(j$1||e===null)return;let r=e.scrollTop,s=Z(e),T=K,E=false;if(T!==void 0){let U=Math.abs(r-T.targetTop)<=wt(e);E=T.behavior==="smooth"||U,(T.behavior!=="smooth"||U)&&(K=void 0);}!E&&!s&&!X&&be&&H===void 0&&r!==u&&(X=true,ve=true,i+=1);let W=X&&!E&&!s&&r!==u;if(W&&(q$1+=1,o$1("user-scroll"),le(P)),X&&!ne&&ye(),!_&&ve&&i!==ae&&r<u&&r>Le()&&je(),H!==void 0&&!E)if(X){let U=Ge();U!==void 0&&(H.expectedOffset=U);}else Qe(),Ze();ot()&&W&&r>=0&&m({previousScrollTop:u,currentScrollTop:r,topThreshold:t.olderPrefetchThreshold})&&at(),W&&it(e)&&z({previousScrollTop:u,currentScrollTop:r,isAtBottom:He(e),isHistoryWindow:t.hasNewer,isPageSettling:E})&&Je(),u=r,oe();}function ze(e,r="auto"){K={targetTop:e,behavior:r};}function st(e){let r=H,s=A.value;if(!(r===void 0||s===null)){if(r.visualOffset=Math.abs(e)<=Ye?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 De(){F!==void 0&&(clearTimeout(F),F=void 0),H!==void 0&&H.visualOffset!==0&&(a=void 0,h=void 0);let e=A.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),H=void 0,K=void 0;}function Ge(){let e=m$1.value,r=H;if(e===null||r===void 0)return;let s=C$1.get(r.anchor.id);return s===void 0?void 0:(s.querySelector("[data-im-thread-anchor-point]")??s).getBoundingClientRect().top-e.getBoundingClientRect().top}function Qe(){let e=H,r=Ge();if(e===void 0||r===void 0)return;let s=e.expectedOffset-r;Math.abs(s)<=Ye||(st(e.visualOffset+s),e.committed=false,e.attempts=0);}function _e(){F!==void 0&&clearTimeout(F),F=setTimeout(()=>{F=void 0,!(X||H?.committed!==true)&&De();},Vn);}function Fe(){let e=m$1.value,r=H;if(j$1||e===null||r===void 0||X)return;let s=r.visualOffset;if(Math.abs(s)<=Ye){r.committed=true,_e();return}let T=Math.max(0,e.scrollHeight-e.clientHeight),E=Math.min(T,Math.max(0,e.scrollTop-s));if(ze(E),e.scrollTop=E,Math.abs(e.scrollTop-E)>Ye){K=void 0,r.committed=false,r.attempts+=1,r.attempts<xn?Ze():(De(),K=void 0,u=e.scrollTop);return}st(0),u=e.scrollTop,r.expectedOffset=Ge()??r.expectedOffset,r.committed=true,r.attempts=0,_e();}function Ze(){F!==void 0&&clearTimeout(F),F=setTimeout(()=>{F=void 0,Fe();},Qt);}function Oe(e){e!==void 0&&(H===void 0&&(H={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),Qe(),!X&&Fe());}function lt(e){let r=m$1.value;if(r===null||e===void 0)return;let s=r.getBoundingClientRect(),T=q(e,p$1([e.id]),{top:s.top,bottom:s.bottom});if(T!==void 0){let E=Math.max(0,r.scrollHeight-r.clientHeight),W=Math.min(E,Math.max(0,r.scrollTop+T));ze(W),r.scrollTop=W,u=r.scrollTop,h=void 0;}}function Le(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function Ce(){q$1+=1,K?.behavior==="smooth"&&(K=void 0),ve=false,X||(X=true,i+=1),ne&&pe.cancel();}function je(){let e=m$1.value;if(!(e===null||i===ae)){if(ee||t.loadingOlder){ae=i,_=false;return}H!==void 0&&De(),_=true,ot()&&e.scrollTop<=Le()&&at();}}function qe(){q$1+=1,a=void 0,h=void 0,pe.cancel(),De(),X=false,ve=false,ne=false,N=void 0,ie=void 0,i+=1,ae=-1,Me=-1,_=true,ee=false,J=false,K=void 0;}function Re(){ne||(pe.cancel(),X=false,ve=false,H!==void 0&&(H.attempts=0),Fe());}function ye(){ne||pe.schedule(Re,Qt);}function Ne(){K=void 0,Re();}function dt(e){be=false,ne=true,Ce(),N=e.touches?.[0]?.clientY;}function et(e){let r=e.touches?.[0]?.clientY;r!==void 0&&(N!==void 0&&r!==N&&(q$1+=1),N!==void 0&&r>N?je():N!==void 0&&r<N&&de(),N=r);}function n(){ne=false,N=void 0,ye();}function l(e){be=true,Ce(),e.deltaY<0?je():e.deltaY>0&&de(),ye();}function d(e){e.pointerType!=="touch"&&(be=true,Ce(),ie=e.clientY,ye());}function b(e){e.pointerType==="touch"||!X||ie===void 0||(e.clientY!==ie&&(q$1+=1),e.clientY<ie?je():e.clientY>ie&&de(),ie=e.clientY,ye());}function w(e){e.pointerType!=="touch"&&(ie=void 0,ye());}function L(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(be=true,Ce(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?je():de(),ye());}function G(e="auto"){let r=m$1.value;if(r===null)return;q$1+=1,h=void 0,De();let s=Math.max(0,r.scrollHeight-r.clientHeight);ze(s,e),r.scrollTo?.({top:s,behavior:e}),r.scrollTop!==s&&(r.scrollTop=s),u=r.scrollTop,ue.clear(),B$1=false,Q();}function ge(){let e=m$1.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function ce(){let e=m$1.value;return ge()&&e!==null&&e.scrollHeight>e.clientHeight+1}function Te(e,r={}){return Ve(C$1.get(e),r)}function Ve(e,r){let s=m$1.value;if(s===null||e===void 0||!s.contains(e)||s.clientHeight<=0)return false;q$1+=1,De();let T=s.getBoundingClientRect(),E=e.getBoundingClientRect(),W=r.block??"center",U;W==="start"?U=s.scrollTop+E.top-T.top:W==="end"?U=s.scrollTop+E.bottom-T.bottom:W==="nearest"?E.top>=T.top&&E.bottom<=T.bottom?U=s.scrollTop:E.top<T.top?U=s.scrollTop+E.top-T.top:U=s.scrollTop+E.bottom-T.bottom:U=j({currentScrollTop:s.scrollTop,scrollHeight:s.scrollHeight,targetHeight:E.height,targetTop:E.top,viewportHeight:s.clientHeight,viewportTop:T.top});let Ee=Math.max(0,s.scrollHeight-s.clientHeight),Ue=Math.min(Ee,Math.max(0,U));h=void 0;let We=r.behavior??"auto";return ze(Ue,We),s.scrollTo?.({top:Ue,behavior:We}),s.scrollTop!==Ue&&(s.scrollTop=Ue),u=s.scrollTop,B$1=false,Q(),true}function xe(e){let r=m$1.value;if(r===null||e===void 0||!r.contains(e)||r.clientHeight<=0)return null;let s=e.getBoundingClientRect(),T=r.scrollTop+s.top-r.getBoundingClientRect().top+s.height/2,E=r.clientHeight/2;return {older:T<E-1,newer:r.scrollHeight-T<E-1}}function gt(){return xe(V)}function nn(e){return xe(C$1.get(e))}function rn(){ue.clear();}function on(){J=true,se.value=false;}function an(){J=false,oe();}function sn(e,r){let s=C$1.get(e);if(s!==r){if(s!==void 0&&($?.unobserve(s),s.style.removeProperty("--im-thread-placeholder-play-state"),D.hasTarget(s)||f?.unobserve?.(s),M.delete(s),g$1.delete(e)),r===null){C$1.delete(e),g$1.delete(e);return}C$1.set(e,r),M.set(r,e),typeof globalThis.IntersectionObserver=="function"&&r.style.setProperty("--im-thread-placeholder-play-state","paused"),$?.observe(r),f?.observe(r),oe();}}function ln(e,r,s){let T=x.get(e);if(s===null){x.delete(e);return}x.set(e,{element:s,label:r}),te===e&&s.style.setProperty("opacity",String(we)),T?.element!==s&&(s.dataset.imThreadDateSeparator=e);}return provide(bt,{registerLayoutMeasurement:D.register,registerMessageNode:sn,registerDateNode:ln,registerEntryUnreadNode:e=>{V=e??void 0;}}),watch(()=>t.contentKey,(e,r)=>{if(e===r)return;qe();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,Ke)=>fe===r[Ke]))return;let s=m$1.value;if(s===null)return;let T=new Set(r);r.length>0&&e.length>0&&!e.some(fe=>T.has(fe))&&qe();let W=t.contentKey,U=q$1,Ee=se.value,Ue=r[r.length-1],We=Ue===void 0?-1:e.indexOf(Ue),tt=We<0?[]:e.slice(We+1).filter(fe=>!T.has(fe)),dn=tt.some(fe=>t.pendingSendMessageIds.includes(fe)),vt=J||t.loadingNewer||ee||t.loadingOlder,un=e.length===r.length&&e.every(fe=>T.has(fe))&&e.some((fe,Ke)=>fe!==r[Ke]),Ot=r[0],Vt=Ot!==void 0&&e.indexOf(Ot)>0,ht;if(a!==void 0&&(Vt||tt.length>0&&vt)){let fe=s.getBoundingClientRect(),Ke=p$1([a.id]),pt=Ke[0],cn=pt!==void 0&&pt.bottom>fe.top&&pt.top<fe.bottom?Ke:p$1();ht=p(a,cn,{top:fe.top,bottom:fe.bottom});}if(await nextTick(),!(j$1||t.contentKey!==W||q$1!==U)){if(dn&&t.followNewMessages){G();return}if(un&&Ee&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!vt){G();return}if(Vt&&(ee=false,Oe(ht)),tt.length>0){if(vt){J=false,H===void 0&&lt(ht),se.value=false,oe();return}(Ee||tt.some(Ke=>t.shouldFollowAppendedMessage?.(Ke)===true))&&t.followNewMessages?G():ue.add(tt);}oe();}},{flush:"pre"}),watch(()=>t.loadingNewer,(e,r)=>{e||!r||!J||le(()=>{t.loadingNewer||(J=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,r)=>{if(e){ee=true;return}!r||!ee||le(()=>{t.loadingOlder||(ee=false);});},{flush:"pre"}),onMounted(()=>{let e=m$1.value;if(e!==null){if(u=e.scrollTop,e.addEventListener("scroll",Xe,{passive:true}),e.addEventListener("scrollend",Ne,{passive:true}),e.addEventListener("touchstart",dt,{passive:true}),e.addEventListener("touchmove",et,{passive:true}),e.addEventListener("touchend",n,{passive:true}),e.addEventListener("touchcancel",n,{passive:true}),e.addEventListener("wheel",l,{passive:true}),e.addEventListener("pointerdown",d,{passive:true}),e.addEventListener("pointermove",b,{passive:true}),e.addEventListener("pointerup",w,{passive:true}),e.addEventListener("pointercancel",w,{passive:true}),e.addEventListener("keydown",L),typeof globalThis.ResizeObserver=="function"){f=new globalThis.ResizeObserver(r=>{if(j$1||m$1.value===null)return;D.resized(r.map(T=>T.target)),r.some(({target:T})=>T===e||T===A.value||M.has(T))&&Q();}),f.observe(e),A.value!==null&&f.observe(A.value);for(let r of C$1.values())f.observe(r);D.observeTargets();}if(R=e.ownerDocument.fonts,R?.addEventListener("loadingdone",D.invalidateAll),typeof globalThis.IntersectionObserver=="function"){$=new globalThis.IntersectionObserver(r=>{for(let s of r){let T=M.get(s.target);if(T===void 0)continue;let E=s.target,W=s.isIntersecting?"running":"paused";E.style.getPropertyValue("--im-thread-placeholder-play-state")!==W&&E.style.setProperty("--im-thread-placeholder-play-state",W),s.isIntersecting?g$1.add(T):g$1.delete(T);}B$1=true,oe();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let r of C$1.values())$.observe(r);}oe();}}),onBeforeUnmount(()=>{j$1=true;let e=m$1.value;e!==null&&e.removeEventListener("scroll",Xe),e!==null&&(e.removeEventListener("scrollend",Ne),e.removeEventListener("touchstart",dt),e.removeEventListener("touchmove",et),e.removeEventListener("touchend",n),e.removeEventListener("touchcancel",n),e.removeEventListener("wheel",l),e.removeEventListener("pointerdown",d),e.removeEventListener("pointermove",b),e.removeEventListener("pointerup",w),e.removeEventListener("pointercancel",w),e.removeEventListener("keydown",L)),pe.cancel(),De(),he(),R?.removeEventListener("loadingdone",D.invalidateAll),D.dispose(),f?.disconnect(),$?.disconnect(),I(),V=void 0;for(let r of C$1.values())r.style.removeProperty("--im-thread-placeholder-play-state");C$1.clear(),M.clear(),g$1.clear(),x.clear(),ue.clear();}),v({getViewportElement:()=>m$1.value,clearNewMessageBadge:rn,clearActiveDate:I,isAtBottom:computed(()=>se.value),isMeasurable:ge,isScrollable:ce,getMessageCenteringNeeds:nn,newMessageCount:computed(()=>Pe.value),prepareHistoryPageAppend:on,cancelHistoryPageAppend:an,trackRemoteMessageIds:(e,r)=>ue.trackRemote(e,r),scrollToLatest:G,scrollToMessage:Te,scrollToEntryUnread:()=>Ve(V,{block:"center",behavior:"auto"}),getEntryUnreadCenteringNeeds:gt,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:A,"data-im-thread-viewport-content":""},c.default?.())])}});var Zt=Symbol("ImThreadSurfaceContext");function Cn(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 Nn(t){provide(Zt,t);}function Rt(){let t=inject(Zt);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}function Fn(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 en(t,o){if(t===void 0)return o;let v=new Map(t.map(m=>[m.key,m])),c=o.map(m=>{let A=v.get(m.key);return A!==void 0&&Fn(A,m)?A:m});return t.length===c.length&&c.every((m,A)=>m===t[A])?t:c}var Et=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),St=Object.freeze({enabled:true,maxFillPages:8}),Un=8,Bn=160;function jn(t,o){return t?.conversationType===o.conversationType&&t.conversationId===o.conversationId}var Kn=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 c=t.context??Rt(),m=ref(null),A=ref(0),C=ref(false),V=ref(false),M=ref(false),g,x,u,y=ref(false),a$1=ref(false),h=ref(false),f=false,R,D=ref(true),$=[],B=nt(),O=0,z=ref(0),j,K=null,q="",te="",we="",J=false,ee=false,_=ref(false),X=ref(""),ve=ref(false),be=nt(),ne,i$1=computed(()=>c.getState()),ae=computed(()=>!!i$1.value.pendingLocationMessageId),Me=computed(()=>i$1.value.pageVisible??c.isPageVisible?.()??true),pe=computed(()=>i$1.value.pageEngaged??c.isPageEngaged?.()??true),N=computed(()=>jn(i$1.value.activeConversation,t.conversation)),ie=computed(()=>({...Et,...t.viewportOptions})),H=computed(()=>{let n=t.initialViewportOptions.maxFillPages??St.maxFillPages;return {enabled:t.initialViewportOptions.enabled??St.enabled,maxFillPages:Number.isFinite(n)?Math.max(0,Math.floor(n)):St.maxFillPages}}),F=computed(()=>!N.value||!i$1.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),se="",Pe=computed(n=>{let l=N.value?`${t.conversation.conversationType}\0${t.conversation.conversationId}`:"",d=se===l?n:void 0;return se=l,N.value?en(d,i({messages:i$1.value.messages,entryUnread:i$1.value.entryUnread,formatDate:c.formatDate,leadingItems:c.leadingItems?.(),beforeMessageItems:c.beforeMessageItems})):en(d,[])}),ue=computed(()=>Pe.value.flatMap(n=>n.kind==="message"||n.kind==="system"?[n.message.id]:[])),He=computed(()=>i$1.value.messages.filter(n=>(n.status==="pending"||n.status==="uploading"||n.status==="sending")&&c.shouldFollowMessage?.(n)===true).map(n=>n.id));function p(){be.cancel(),ne!==void 0&&(clearTimeout(ne),ne=void 0);}function S(n=false){if(p(),ve.value=false,n){m.value?.clearActiveDate(),X.value="";return}ne=setTimeout(()=>{ne=void 0,!ve.value&&(m.value?.clearActiveDate(),X.value="");},Bn);}function I(n){if(n===null){S();return}ne!==void 0&&(clearTimeout(ne),ne=void 0),X.value=n.label,ve.value=true;let l=ie.value.activeDateIdleDelay,d=Number.isFinite(l)?Math.max(0,l):Et.activeDateIdleDelay;be.schedule(()=>S(),d);}async function P(n,l,d,b=true){t.hooks?.beforeAction?.(n);try{let w=await l();return d?.()!==!1&&t.hooks?.afterAction?.(n,w),w}catch(w){throw b&&d?.()!==false&&t.hooks?.onError?.(n,w),w}}function k(n="automatic",l,d=true){return !N.value||i$1.value.loading||!i$1.value.hasOlder?Promise.resolve(0):P({kind:"load-older",source:n},()=>c.actions.loadOlder(),l,d)}function Z(){return Y()}function Y(n,l=true){let d=c.actions.loadNewer,b=i$1.value.loadingNewer??i$1.value.loading;return !N.value||b||!i$1.value.hasNewer||d===void 0?Promise.resolve(0):P({kind:"load-newer"},()=>d(),n,l)}async function re(n){for(let l=0;l<Un;l+=1){if(!N.value||M.value||V.value||ae.value)return;let d=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,b=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!d||b!==null||(n==="older"?await k("user-scroll"):await Z())>0)return;let L=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,G=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!L||G!==null)return}}async function Ae(){return !N.value||c.actions.loadNewer===void 0?0:le({kind:"load-newer"},()=>c.actions.retryNewer?.()??c.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function Q(){return N.value?le({kind:"retry-older"},()=>c.actions.retryOlder?.()??c.actions.loadOlder({force:true})):0}async function le(n,l){let d=F.value,b=++O;K=null,we="";let w;try{w=await P(n,l);}catch(L){throw Oe(d,b)&&(we=d),L}return Oe(d,b)&&!_.value&&(K=null,qe()),w}async function he(){if(!N.value)return false;let n=F.value;ye(),Ne();let l=++z.value;return M.value=false,Re(true),J=true,q=n,te=Ce(Le()),!await P({kind:"jump-to-latest"},()=>c.actions.jumpToLatest?.()??Promise.resolve(!i$1.value.isHistoryWindow),()=>de(n,l))||!de(n,l)||(await nextTick(),!de(n,l))?false:(m.value?.scrollToLatest(),C.value=true,h.value=false,$e(),true)}function oe(n=false){let l=m.value,d=l?.getViewportElement();a$1.value=l?.isScrollable()===true;let b=i$1.value.entryUnreadNavigation;y.value=b?.state==="located"&&$.includes(b.firstMessageId),_.value&&y.value&&(C.value=true);let w=d==null?0:Math.max(0,d.scrollHeight-d.clientHeight-d.scrollTop);h.value=b!==void 0&&w>50,n&&b!==void 0&&d!==null&&d!==void 0&&d.clientHeight>0&&w>=d.clientHeight&&(C.value=true);}function $e(){let n=c.actions.markConversationRead;if(n===void 0||!pe.value||!N.value||!_.value||V.value||f&&(!D.value||i$1.value.hasNewer)||R!==void 0||i$1.value.error!==null)return;let l=F.value,d=n().then(()=>{R===d&&l===F.value&&(f=true);}).catch(b=>{!ee&&R===d&&l===F.value&&t.hooks?.onError?.({kind:"mark-conversation-read"},b);}).finally(()=>{R===d&&(R=void 0);});R=d;}async function ot(){let n=c.actions.loadEntryUnread;if(!N.value||V.value||n===void 0)return "cancelled";Ne();let l=F.value,d=++z.value;M.value=false;let b=new AbortController;u=b,x=d,V.value=true,Re(true),J=true;try{let w=await P({kind:"jump-to-entry-unread"},()=>n({signal:b.signal}),()=>de(l,d));if(!de(l,d))return "cancelled";if(!w||i$1.value.entryUnread.state!=="located")return "unavailable";let G=await at(l,d);return G&&(C.value=!0),G?"located":de(l,d)?"unavailable":"cancelled"}catch(w){if(!de(l,d))return "cancelled";throw w}finally{x===d&&(x=void 0,u=void 0,V.value=false);}}async function at(n,l){await nextTick();for(let d=0;d<60;d+=1){if(!de(n,l))return false;if(m.value?.scrollToEntryUnread())return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(b=>window.requestAnimationFrame(()=>b()));}return false}function it(n){D.value=n.isAtBottom,A.value=n.newMessageCount,oe(),qe();}function Je(n,l){return m.value?.scrollToMessage(n,l)??false}function de(n,l){return !ee&&z.value===l&&F.value===n&&N.value}async function Xe(n,l,d,b){for(let w=0;w<60;w+=1){if(!de(n,l))return false;if(Je(d,b))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(L=>window.requestAnimationFrame(()=>L()));}return false}async function ze(n,l){for(let d=0;d<60;d+=1){if(!n())return false;if(m.value?.isMeasurable()&&m.value.getMessageCenteringNeeds(l)!=null)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(b=>window.requestAnimationFrame(()=>b()));}return false}async function st(n){let l=()=>!n()||!(i$1.value.loading||i$1.value.loadingOlder||i$1.value.loadingNewer);return l()||await new Promise(d=>{let b=watch(l,w=>{w&&(b(),d());},{flush:"sync"});}),await nextTick(),await nextTick(),n()}async function De(n,l,d){let b=m.value;if(b===null||!b.isMeasurable())return false;let w=0,L="older",G=()=>de(n,l),ge=async ce=>{let Te=0,Ve=ce==="older"?i$1.value.olderError:i$1.value.newerError,xe=Ve===void 0?i$1.value.error:Ve;if(xe!=null)throw xe;if(ce==="older")Te=await k("automatic",G,false);else {b.prepareHistoryPageAppend();try{Te=await Y(G,!1);}catch(gt){throw G()&&b.cancelHistoryPageAppend(),gt}Te<=0&&G()&&!i$1.value.hasNewer&&b.cancelHistoryPageAppend();}return w+=1,await nextTick(),await nextTick(),G()};for(;de(n,l)&&w<H.value.maxFillPages&&b.isMeasurable();){if(!await st(G))return false;let ce=b.getMessageCenteringNeeds(d);if(ce===null)return false;let Te=!i$1.value.hasOlder,Ve=!i$1.value.hasNewer||c.actions.loadNewer===void 0,xe=ce.older&&ce.newer&&!Te&&!Ve?L:ce.older&&!Te?"older":ce.newer&&!Ve?"newer":void 0;if(xe===void 0)break;if(L=xe==="older"?"newer":"older",!await ge(xe))return false}return de(n,l)}async function Ge(n,l={behavior:"auto",block:"center"}){if(!N.value||n==="")return {ok:false,reason:"cancelled"};let d=F.value,b=M.value;ye(),Ne();let w=b||j!==void 0||(i$1.value.loadingOlder??i$1.value.loading)||(i$1.value.loadingNewer??i$1.value.loading),L=++z.value;M.value=true;let G=new AbortController;g=G,Re(true),J=true,q=d,te=Ce(Le());let ge=()=>de(d,L);try{if(w&&c.actions.loadAround!==void 0||!ue.value.includes(n)){let Te=c.actions.loadAround;if(Te===void 0)return {ok:!1,reason:"anchor-unavailable"};let Ve={};j=Ve;try{let xe=await P({kind:"locate-message",messageId:n},()=>Te(n,{signal:G.signal}),ge,!1);if(!ge())return {ok:!1,reason:"cancelled"};if(!xe)return {ok:!1,reason:"not-visible"}}finally{j===Ve&&(j=void 0);}}return await nextTick(),await nextTick(),!await ze(ge,n)||!await De(d,L,n)?{ok:!1,reason:ge()?"not-visible":"cancelled"}:await Xe(d,L,n,l)?{ok:!0}:{ok:!1,reason:ge()?"not-visible":"cancelled"}}catch(ce){return ge()?a(ce):{ok:false,reason:"cancelled"}}finally{g===G&&(g=void 0),z.value===L&&(M.value=false);}}async function Qe(n,l){return (await Ge(n,l)).ok}function _e(){B.cancel();}function Fe(){if(!_.value){_e();return}let n=t.readActions;if(n===void 0&&c.actions.markVisibleMessages===void 0){_e();return}let l=Number.isFinite(ie.value.visibleReadDelay)?Math.max(0,ie.value.visibleReadDelay):Et.visibleReadDelay;B.schedule(()=>{if(!N.value||!pe.value)return;$e();let d=c.actions.markVisibleMessages;if(d!==void 0){let L=$;d(L).catch(G=>{t.hooks?.onError?.({kind:"visible-range",messageIds:L},G);});return}if(n===void 0)return;let b=$[$.length-1];if(b===void 0)return;let w=n.resolveTarget===void 0?b:n.resolveTarget(b);w!=null&&Promise.resolve(n.markRead(w)).catch(L=>{t.hooks?.onError?.({kind:"visible-range",messageIds:$},L);});},l);}function Ze(n){$=Object.freeze([...n]),oe();let l={kind:"visible-range",messageIds:$};t.hooks?.beforeAction?.(l);try{c.actions.onVisibleRange?.($),t.hooks?.afterAction?.(l,void 0);}catch(d){throw t.hooks?.onError?.(l,d),d}_.value?Fe():qe();}function Oe(n,l){return !ee&&O===l&&F.value===n&&!J&&!ae.value}function lt(n,l){Oe(n,l)&&(q=n,te=Ce(Le()),_.value=true,oe(),$e(),Fe());}function Le(){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 je(n,l,d){for(let b=0;b<60;b+=1){if(!Oe(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(L=>window.requestAnimationFrame(()=>L()));}return false}function qe(){let n=F.value,l=Ce(Le());if(n===""||i$1.value.loading||M.value||ae.value||i$1.value.error!==null&&i$1.value.messages.length===0||q===n&&(te===l||te.startsWith("located:")||J)||we===n||K!==null)return;if(!H.value.enabled){q=n,te=l,_.value=true,Fe();return}let d=++O;J=false,_.value=false;let b=(async()=>{if(await nextTick(),!Oe(n,d))return;let w=m.value;if(w===null||!w.isMeasurable())return;let L=Le();if(L.state==="located"&&!ue.value.includes(L.firstMessageId))return;let G=L.state==="located"?await je(n,d,L.firstMessageId):false;if(L.state==="located"&&!G)return;G||w.scrollToLatest();let ge=0;for(;Oe(n,d)&&ge<H.value.maxFillPages&&i$1.value.error===null&&(i$1.value.hasOlder||i$1.value.hasNewer&&c.actions.loadNewer!==void 0)&&w.isMeasurable()&&!w.isScrollable();){if(i$1.value.hasNewer&&c.actions.loadNewer!==void 0&&(i$1.value.messages.length===0||!i$1.value.hasOlder)){let Te=z.value;w.prepareHistoryPageAppend();try{await Z(),await nextTick();}finally{F.value===n&&z.value===Te&&(O===d||J)&&w.cancelHistoryPageAppend();}}else await k();if(!Oe(n,d)||(ge+=1,await nextTick(),await nextTick(),!w.isMeasurable()))return}if(!Oe(n,d)||!w.isMeasurable())return;let ce=Le();if(ce.state==="located"){if(!ue.value.includes(ce.firstMessageId)||!await je(n,d,ce.firstMessageId))return}else w.scrollToLatest();await nextTick(),lt(n,d);})().catch(()=>{Oe(n,d)&&(we=n);}).finally(()=>{K===b&&(K=null);});K=b;}function Re(n,l=false){O+=1,K=null,J=false,_.value=n,n||(q="",te="",l||(we="")),_e();}function ye(){u!==void 0&&(z.value+=1,u.abort(),u=void 0,x=void 0,V.value=false);}function Ne(){!M.value&&g===void 0||(z.value+=1,g?.abort(),g=void 0,M.value=false);}function dt(){if(oe(true),ye(),Ne(),ae.value&&c.actions.cancelMessageLocation?.(),J=true,_.value)return;let n=F.value;O+=1,K=null,q=n,_.value=true,Fe();}let et=Object.freeze({getViewportElement:()=>m.value?.getViewportElement()??null,loadOlder:k,retryOlder:Q,loadNewer:Z,retryNewer:Ae,jumpToLatest:he,jumpToEntryUnread:ot,scrollToMessage:Je,locateMessage:Qe,locateMessageDetailed:Ge,focusViewport:()=>m.value?.focusViewport()});return o(et),watch(pe,n=>{n&&_.value?Fe():_e();}),watch([()=>i$1.value.activeRemoteMessageRevision??0,m,F],()=>{let n=m.value;if(n===null||!N.value)return;let l=c.actions.drainActiveRemoteMessageIds?.()??[];n.trackRemoteMessageIds(l,{isAtBottom:D.value,isHistoryWindow:i$1.value.isHistoryWindow,isPageVisible:Me.value})&&(D.value=false);},{flush:"post"}),watch(()=>i$1.value.pendingLocationMessageId??"",n=>{(n!==""||M.value)&&(Ne(),z.value+=1,M.value=false),n!==""&&(ye(),_.value||Re(false));},{flush:"sync"}),watch([F,()=>i$1.value.loading,()=>i$1.value.error,()=>ue.value.length,()=>i$1.value.hasOlder,()=>Ce(Le()),H,()=>i$1.value.hasNewer,ae],([n,l,d,b,,w],[L,,,G,,ge])=>{if(n!==L&&(ye(),Ne(),z.value+=1,M.value=false,j=void 0,Re(false),S(true),m.value?.clearNewMessageBadge(),A.value=0,D.value=true,$=[],C.value=false,y.value=false,a$1.value=false,h.value=false,V.value=false,x=void 0,f=false,R=void 0),n!==""&&n===L&&G!==void 0&&G>0&&b===0&&(i$1.value.hasOlder||i$1.value.hasNewer)&&_.value&&Re(false,true),n!==""&&n===L&&w!==ge&&!te.startsWith("located:")&&!J&&w.startsWith("located:")&&(q="",te="",_.value=false),n===""){Re(false);return}if(d!==null&&i$1.value.messages.length===0){_.value||Re(false,true);return}l||qe();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{ee=true,ye(),Ne(),z.value+=1,Re(false),S(true);}),()=>{let n={conversation:t.conversation,state:i$1.value,items:Pe.value,actions:et,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:_.value&&q===F.value)},l=[v.header?.(n),v["before-list"]?.(n)];if(!N.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(Mt,{ref:m,messageIds:ue.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:ie.value.followThreshold,olderPrefetchThreshold:ie.value.olderPrefetchThreshold,visibleMargin:ie.value.visibleMargin,activeDateOffset:ie.value.activeDateOffset,activeDateEnabled:v["active-date"]!==void 0,resizeFollowEnabled:_.value&&!V.value&&!M.value&&!ae.value,followNewMessages:Me.value&&!V.value&&!M.value&&!ae.value,shouldFollowAppendedMessage:b=>{let w=i$1.value.messages.find(L=>L.id===b);return w===void 0?false:c.shouldFollowMessage?.(w)===true},pendingSendMessageIds:He.value,onReachStart:()=>{re("older").catch(()=>{});},onReachEnd:()=>{re("newer").catch(()=>{});},onSettled:it,onUserScroll:dt,onActiveDateChange:I,onVisibleRange:Ze,onNewMessageCount:b=>{A.value=b;}},{default:()=>[v["viewport-before"]?.(n),h$1(It,{items:Pe.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:X.value,visible:ve.value&&X.value!==""}),d,v["entry-unread-navigation"]?.({...n,count:i$1.value.entryUnreadNavigation?.state==="none"?0:i$1.value.entryUnreadNavigation?.count??0,loading:V.value,visible:n.initialViewportSettled&&!C.value&&!y.value&&!i$1.value.isHistoryWindow&&i$1.value.entryUnreadNavigation!==void 0&&i$1.value.entryUnreadNavigation.state!=="none"&&i$1.value.entryUnreadNavigation.count>0&&(a$1.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:A.value,visible:h.value||!D.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 _n(t){let o=new Map;for(let c of t){if(o.has(c.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${c.kind}`);o.set(c.kind,c.component);}let v=Object.freeze([...o.keys()]);return Object.freeze({kinds:v,resolve:c=>o.get(c)})}var Gn=140,Wn=120;function mt(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)),c=Math.max(0,Math.min(t.bottom,o.bottom)-Math.max(t.top,o.top));return Math.min(1,v*c/(t.width*t.height))}function Pt(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 At(t){let o=Math.max(0,t.scrollIdleMs??Gn),v=Math.max(0,t.visibilityDwellMs??Wn),c=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),m=Math.max(0,t.revealMarginPx??0),A=Math.max(0,t.preloadMarginPx??0),C=Math.max(m,A),V=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),M=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),g=new Map,x=new Map,u=reactive(new Set),y=new Set,a=new Set,h=[],f=null,R=null,D=null,$=false,B=false,O=false,z=false,j=new Map,K=0,q=false;function te(){K+=1,q=false,j.clear();}function we(p){let S=[...p].filter(([P,k])=>g.get(P)===k);if(S.length===0)return;let I=be();ne(true,I,S),Me(I,S);}function J(p){if(!t.batchRegistration){we(p);return}for(let[I,P]of p)j.set(I,P);if(q)return;q=true;let S=K;nextTick(()=>{if(O||S!==K)return;q=false;let I=[...j];j.clear(),we(I),H();});}let ee,_;function X(){ee!==void 0&&clearTimeout(ee),ee=void 0;}function ve(){_!==void 0&&clearTimeout(_),_=void 0;}function be(){let p,S=new Map;return {getRootRect(){return p===void 0&&(p=f?.getBoundingClientRect()??null),p},getElementRect(I){let P=S.get(I);return P===void 0&&(P=I.getBoundingClientRect(),S.set(I,P)),P}}}function ne(p=false,S=be(),I=g){if(!p&&R!==null||f===null)return;let P=S.getRootRect();if(P===null)return;let k=Pt(P,C);for(let[Z,Y]of I){let re=S.getElementRect(Z);Y.ratio=mt(re,P),Y.intersecting=Y.ratio>0,Y.revealIntersecting=C>0?mt(re,k)>0:Y.intersecting&&Y.ratio>=c;}}function i(p){return p.intersecting&&p.ratio>=c}function ae(p){let S=x.get(p.key);return S!==void 0&&g.get(S)===p}function Me(p=be(),S=g){let I=[];for(let[P,k]of S)if(!(!k.revealIntersecting||u.has(k.key))){if(C>m){if(m===0&&!i(k))continue;if(m>0){let Z=p.getRootRect();if(Z===null||mt(p.getElementRect(P),Pt(Z,m))<=0)continue}}I.push(k);}for(let P of I)!ae(P)||u.has(P.key)||(u.add(P.key),t.onRevealed?.(P.item));}function pe(p,S=false){let I=new Set(p.map(k=>k.key));if(!(!(I.size!==a.size||[...I].some(k=>!a.has(k)))&&!S)){a.clear();for(let k of I)a.add(k);t.onSettledVisibleChange?.(p.map(k=>k.item));}}function N(p,S=false){!S&&p.length===h.length&&p.every((I,P)=>I.key===h[P]?.key&&I.item===h[P]?.item)||(h=p,t.onSettledPreloadChange?.(p.map(I=>I.item)));}function ie(){if(O||$)return;let p=B;B=false;let S=K,I=f,P=()=>!O&&!$&&S===K&&f===I,k=be();ne(false,k);let Z=k.getRootRect(),Y=Z===null?0:(Z.top+Z.bottom)/2,re=[...g.entries()].filter(([,Q])=>i(Q)).map(([Q,le])=>({target:le,rect:k.getElementRect(Q)})).sort((Q,le)=>Math.abs((Q.rect.top+Q.rect.bottom)/2-Y)-Math.abs((le.rect.top+le.rect.bottom)/2-Y)).slice(0,M).map(({target:Q})=>Q),Ae;if(t.onSettledPreloadChange!==void 0&&Z!==null){let Q=Pt(Z,A);Ae=[...g.entries()].filter(([,he])=>he.revealIntersecting).map(([he,oe])=>({target:oe,rect:k.getElementRect(he)})).filter(({target:he,rect:oe})=>i(he)||A>0&&mt(oe,Q)>0).sort((he,oe)=>Number(i(oe.target))-Number(i(he.target))||Math.abs((he.rect.top+he.rect.bottom)/2-Y)-Math.abs((oe.rect.top+oe.rect.bottom)/2-Y)).slice(0,V).map(({target:he})=>he);}if(Me(k),!!P()&&(pe(re.filter(ae),p),!!P())){Ae!==void 0&&N(Ae.filter(ae),p);for(let Q of re){if(!P())return;!ae(Q)||y.has(Q.key)||(y.add(Q.key),t.onActivated?.(Q.item));}}}function H(){O||$||(ve(),_=setTimeout(()=>{_=void 0,ie();},v));}function F(){O||(B=true,se(true),N([]),ne(),Me(),pe([]),ve(),X(),ee=setTimeout(()=>{ee=void 0,se(false),H();},o));}function se(p){$!==p&&($=p,t.onScrollingChange?.(p));}function Pe(){f?.removeEventListener("scroll",F),R?.disconnect(),D?.disconnect(),R=null,D=null,f=null;}function ue(p=true){if(O)return;let S=t.getRoot();if(!(S===f&&f!==null)){if(N([]),Pe(),f=S,f===null){p&&!z&&(z=true,Promise.resolve().then(()=>{z=false,O||(ue(false),H());}));return}if(f.addEventListener("scroll",F,{passive:true}),typeof IntersectionObserver<"u"){R=new IntersectionObserver(I=>{for(let P of I){let k=g.get(P.target);k!==void 0&&(k.intersecting=P.isIntersecting,k.ratio=P.intersectionRatio,C===0&&(k.revealIntersecting=P.isIntersecting&&P.intersectionRatio>=c));}Me(),H();},{root:f,threshold:[0,c,1]}),C>0&&(D=new IntersectionObserver(I=>{for(let P of I){let k=g.get(P.target);k!==void 0&&(k.revealIntersecting=P.isIntersecting);}Me(),H();},{root:f,rootMargin:`${C}px 0px`,threshold:0}));for(let I of g.keys())R.observe(I);for(let I of g.keys())D?.observe(I);}J(g);}}function He(p){N(h.filter(S=>S.key!==p)),u.delete(p),y.delete(p),a.delete(p);}return {register(p,S){if(O)return;let I=t.getKey(p),P=u.has(I),k=y.has(I),Z=S===null?void 0:g.get(S);Z!==void 0&&Z.key!==I&&(x.delete(Z.key),g.delete(S),He(Z.key));let Y=x.get(I);if(Y!==void 0&&Y!==S&&(R?.unobserve(Y),D?.unobserve(Y),g.delete(Y),x.delete(I)),S===null){Y!==void 0&&(R?.unobserve(Y),D?.unobserve(Y),g.delete(Y),x.delete(I)),He(I);return}let re=g.get(S);if(re?.key===I&&re.item===p){let le=f;ue(),f!==le&&H();return}let Ae={item:p,key:I,intersecting:re?.key===I?re.intersecting:false,ratio:re?.key===I?re.ratio:0,revealIntersecting:re?.key===I?re.revealIntersecting:false};g.set(S,Ae),x.set(I,S);let Q=f;ue(),f===Q&&(R?.observe(S),D?.observe(S),J([[S,Ae]])),P&&t.onRevealed?.(p),k&&ae(Ae)&&t.onActivated?.(p),H();},isRevealed:p=>u.has(t.getKey(p)),isActivated:p=>y.has(t.getKey(p)),isSettledVisible:p=>a.has(t.getKey(p)),isScrolling:()=>$,notifyScroll:F,refresh(){ue(),te(),we(g),H();},reset(){te(),X(),ve(),se(false),B=false,pe([]),N([]),Pe(),g.clear(),x.clear(),u.clear(),y.clear();},dispose(){O||(te(),X(),ve(),se(false),B=false,pe([]),N([]),Pe(),g.clear(),x.clear(),u.clear(),y.clear(),O=true);}}}function Yn(t){let o=new Map,v=new Map,c=shallowReactive(new Map),m=[],A=false,C=u=>{let y=o.get(u.channel);return y===void 0?u.channel:`${u.channel}\0${y.getKey(u.item)}`},V=At({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 y of o.values())y.onScrollingChange?.(u);},onRevealed:u=>u.targets.forEach(y=>o.get(y.channel)?.onRevealed?.(y.item)),onActivated:u=>u.targets.forEach(y=>o.get(y.channel)?.onActivated?.(y.item)),onSettledPreloadChange:u=>{let y=u.flatMap(a=>a.targets);for(let[a,h]of o){let f=y.filter(R=>R.channel===a).map(R=>R.item);h.onSettledPreloadChange?.(f.slice(0,Math.max(0,h.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:u=>{M(u.flatMap(y=>y.targets));}});function M(u){m=u;for(let[y,a]of o){let h=u.filter(R=>R.channel===y).map(R=>R.item),f=a.maxSettledVisible===void 0?h:h.slice(0,a.maxSettledVisible);a.onSettledVisibleChange?.(f);}}function g(u){let y=[...v.values()].flatMap(f=>[...f.values()].filter(R=>R.element===u).map(R=>R.target)),a=c.get(u);if(a!==void 0&&y.length===a.targets.length&&y.every((f,R)=>f===a.targets[R]))return;if(y.length===0)a!==void 0&&(c.delete(u),[...c.values()].some(f=>f.key===a.key)||V.register(a,null));else {let f={key:JSON.stringify(y.map(C)),targets:y};c.set(u,f),V.register(f,u);}let h=m.flatMap(f=>{let R=v.get(f.channel)?.get(o.get(f.channel).getKey(f.item));return R===void 0?[]:[R.target]});(h.length!==m.length||h.some((f,R)=>f!==m[R]))&&M(h);}function x(u){return y=>{if(A)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,y);let a=shallowReactive(new Map);v.set(u,a);let h=false,f=B=>({channel:u,item:B});function R(){let B=[...a.values()].map(O=>O.element);a.clear();for(let O of B)g(O);y.onScrollingChange?.(false),y.onSettledVisibleChange?.([]),y.onSettledPreloadChange?.([]);}function D(B,O){let z=a.get(y.getKey(B)),j=z===void 0?void 0:c.get(z.element);return j!==void 0&&O(j)}return {register(B,O){if(h||A)return;let z=y.getKey(B),j=a.get(z);if(O===null){j!==void 0&&(a.delete(z),g(j.element));return}if(j?.target.item===B&&j.element===O){let q=c.get(O);q!==void 0&&V.register(q,O);return}let K=j?.target.item===B?j.target:f(B);for(let[q,te]of a)q!==z&&te.element===O&&a.delete(q);a.set(z,{target:K,element:O}),g(O),j!==void 0&&j.element!==O&&g(j.element);},isRevealed:B=>D(B,V.isRevealed),isActivated:B=>D(B,V.isActivated),isSettledVisible:B=>D(B,V.isSettledVisible),isScrolling:V.isScrolling,notifyScroll:V.notifyScroll,refresh:V.refresh,reset:R,dispose(){h||(R(),h=true,o.delete(u),v.delete(u));}}}}return {createFactory:x,refresh:V.refresh,dispose(){if(!A){for(let u of c.values())V.register(u,null);c.clear();for(let u of o.values())u.onSettledPreloadChange?.([]);v.clear(),o.clear(),V.dispose(),A=true;}}}}function Jn(t){let o=ut();if(o===void 0)throw new Error("useImThreadLayoutMeasurement requires an ImThreadViewport");let v=o.registerLayoutMeasurement(t);return onBeforeUnmount(v.dispose),v}export{Tt as ImThreadBodySwitch,It as ImThreadItems,Kn as ImThreadSurface,Mt as ImThreadViewport,Cn as createImThreadSurfaceContext,_n as createMessageRendererRegistry,Yn as createThreadVisibilityTargetGroup,At as createThreadVisibilityTargets,Nn as provideImThreadSurfaceContext,mn as useImText,Jn as useImThreadLayoutMeasurement,Rt as useImThreadSurfaceContext,hn as useOptionalImThreadReadActions};
@@ -111,8 +111,11 @@ type LastMessageSummary = {
111
111
  kind: 'transfer';
112
112
  } | {
113
113
  kind: 'gift';
114
- } | {
114
+ }
115
+ /** 直播间分享。`title` 与卡片主标题一致:先主播昵称,没有再用房间标题。 */
116
+ | {
115
117
  kind: 'liveRoom';
118
+ title?: string;
116
119
  } | {
117
120
  kind: 'call';
118
121
  callKind: ImCallKind;
@@ -611,20 +614,21 @@ interface ImMediaAlbumBody {
611
614
  /** 媒体项,顺序即用户选择顺序(决定宫格 index 与首项朝向)。 */
612
615
  items: readonly ImMediaAlbumItem[];
613
616
  }
614
- /** 直播间分享的直播类型。wire `liveType`:1 视频、2 语音、3 双手机、4 单手机录屏、5 语聊房。 */
617
+ /** 直播间分享的直播类型。wire `liveType`:1 视频、2 语音、3 双手机、4 单手机录屏、5 语聊房。空字符串对应 wire 0,表示调用方没有类型,不猜成某一种直播。 */
615
618
  type ImLiveRoomType = 'video' | 'voice' | 'dual-phone' | 'screen-record' | 'voice-chat';
616
619
  /** 直播间分享的房间状态。wire `liveRoomStatus`:1 预告、2 直播中、3 已结束。 */
617
620
  type ImLiveRoomStatus = 'preview' | 'live' | 'ended';
618
621
  /**
619
- * 直播间分享卡片正文(contentType==='liveRoom',协议 BMessage.contentType=30,fields 98-112)。
622
+ * 直播间分享卡片正文(contentType==='liveRoom',协议 BMessage.contentType=30,fields 98-113)。
620
623
  *
621
624
  * @remarks 调用方先拿到直播间快照再写入本结构。Core 不请求直播接口,也不把缺省枚举猜成某一种直播。
622
625
  * `uid` 是声网 SDK 初始化用的 UID,不是 IM 用户 id。
623
626
  */
624
627
  interface ImLiveRoomBody {
625
- /** 直播间 ID(BMessage.liveRoomId)。 */
628
+ /** 直播间 ID(BMessage.liveRoomId)。没有房间号时为空字符串。 */
626
629
  liveRoomId: string;
627
- liveType: ImLiveRoomType;
630
+ /** 没有直播类型时为空字符串。 */
631
+ liveType: ImLiveRoomType | '';
628
632
  liveRoomStatus: ImLiveRoomStatus;
629
633
  /** 当前账号是否已关注主播。协议 bool 无法区分未设置,false 也是有效状态。 */
630
634
  isFocus: boolean;
@@ -644,6 +648,8 @@ interface ImLiveRoomBody {
644
648
  livePreviewId?: string;
645
649
  /** 直播间人数字符串,保持协议原文,不在 Core 换算。 */
646
650
  liveRoomViewers?: string;
651
+ /** 点赞数十进制字符串,保持协议原文,不在 Core 换算。 */
652
+ liveRoomLikes?: string;
647
653
  }
648
654
  interface ImMessageBody {
649
655
  /** P0 文本内容(明文,解密后的结果)。 */
@@ -1946,10 +1952,10 @@ interface ImProfilePort {
1946
1952
  * 会话收藏可展示的内容类型;与 iOS `isSupportCollectionMsgType` 对齐。
1947
1953
  *
1948
1954
  * @remarks 这些值与收藏接口的 `content_type` 数值一一对应,而那个数值就是消息自己的 contentType
1949
- * (1=文本 2=图片 3=视频 4=语音 5=位置 11=文件 28=媒体合集 29=文件合集),不是另一套收藏专用枚举。
1955
+ * (1=文本 2=图片 3=视频 4=语音 5=位置 11=文件 28=媒体合集 29=文件合集 30=直播间分享),不是另一套收藏专用枚举。
1950
1956
  * Android `MessageCollectExecute` 直接写 `message.getContentType()`,iOS 写 `msg.msgType`,两端一致。
1951
1957
  */
1952
- type ImSessionFavoriteKind = 'text' | 'image' | 'video' | 'voice' | 'location' | 'file' | 'mediaAlbum' | 'filesAlbum';
1958
+ type ImSessionFavoriteKind = 'text' | 'image' | 'video' | 'voice' | 'location' | 'file' | 'mediaAlbum' | 'filesAlbum' | 'liveRoom';
1953
1959
  /** 服务端一条会话收藏快照;列表以 HTTP 为准,不回写原消息。 */
1954
1960
  interface ImSessionFavoriteItem$1 {
1955
1961
  readonly collectId: string;
@@ -5278,14 +5284,16 @@ interface ConversationHandle<TType extends ProductHandleConversationType = Produ
5278
5284
  /**
5279
5285
  * 按稳定消息 id 打开目标附近的连续历史窗口。
5280
5286
  *
5281
- * @remarks GROUP 完整置顶预览可按消息时间定位;CHANNEL 置顶未缓存时先按 ID 取回正式历史记录,
5282
- * 以服务端游标准备前后相邻页后一次替换窗口;准备失败保留原窗口。只含控制行的页每侧最多继续四页,
5283
- * 预算用完仍保留分页能力。短期搜索结果只作为只读锚点;partial 置顶和过期搜索结果明确拒绝定位。
5284
- * @throws 没有可用锚点、远端确认缺失或目标不属于当前复合会话时,抛出稳定 `IM_SDK_MESSAGE_NOT_FOUND`
5285
- * (`category: 'state'`、`retryable: false`、`details.messageId`)。这是常见产品结果而非链路异常,
5286
- * 调用方应据此与真正的存储/协议失败区分反馈,不要解析错误文案。
5287
+ * @remarks 冷启动置顶和搜索结果只提供目标 id;目标不在当前窗口或本地原文时,须经精确会话
5288
+ * `by_id` 确认真实原文及排序位置。预览或搜索位置不能充当历史游标。
5289
+ * GROUP/CHANNEL 使用远端相邻页准备两侧上下文后一次替换窗口;失败保留原窗口。
5290
+ * `signal` 取消本次定位,阻止提交准备中的窗口;不会撤销共享按 ID 查询已取得的合法缓存。
5291
+ * @throws 仅 `by_id` 明确确认缺失时抛 `IM_SDK_MESSAGE_NOT_FOUND`;没有可信原文时抛
5292
+ * `IM_SDK_MESSAGE_ANCHOR_UNAVAILABLE`。存储、权限与协议异常保留原错误身份。
5287
5293
  */
5288
- loadAround: (messageId: string) => Promise<void>;
5294
+ loadAround: (messageId: string, options?: {
5295
+ signal?: AbortSignal;
5296
+ }) => Promise<void>;
5289
5297
  /**
5290
5298
  * 清空当前账号下此精确会话的本机历史。
5291
5299
  *
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-ZAX3Q5WO.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-RDTT34ZF.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-PAEBGHDI.js';import'./chunk-ICG32ESA.js';import'./chunk-HPS3TBSB.js';import'./chunk-ELGE657I.js';export{Ea as canTransmit,Ca as canTransmitByType,Da as canTransmitContent,Ba as requiresForwardTypeConfirmation}from'./chunk-FMEZINTJ.js';import'./chunk-WOT6VMZA.js';
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-KFVKMPCY.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-DLZBFAYO.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-2LUSPYH5.js';import'./chunk-JOD67FT3.js';import'./chunk-6EPXLFLD.js';import'./chunk-ZFYM6YHK.js';export{Ea as canTransmit,Ca as canTransmitByType,Da as canTransmitContent,Ba as requiresForwardTypeConfirmation}from'./chunk-JHGB6KYI.js';import'./chunk-WOT6VMZA.js';
@@ -0,0 +1 @@
1
+ import {c as c$1}from'./chunk-JOD67FT3.js';import {x as x$1}from'./chunk-JHGB6KYI.js';var v=864e5,w=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"];function u(e){return e!=null&&Number.isFinite(e)&&e>0&&!Number.isNaN(new Date(e).getTime())}function P(e,t){if(u(e))return e;if(u(t))return t}function b(e,t){return P(t,e)}function m(e){if(!u(e))return "";let t=new Date(e);return `${t.getFullYear()}-${t.getMonth()+1}-${t.getDate()}`}function h(e,t){return u(e)?u(t)?m(e)!==m(t):true:false}function F(e,t){return T(e,t,"conversation")}function L(e,t){return T(e,t,"separator")}function T(e,t,r){if(!u(e))return "";let n=t.now??new Date;if(Number.isNaN(n.getTime()))return "";let o=new Date(e),a=y(n)-y(o),i=c$1(t.locale);return o.getFullYear()!==n.getFullYear()?A(o):a===0?r==="conversation"?k(o):i.today:a===1?i.yesterday:a>=2&&a<=6?x(o,i):D(o)}function y(e){return Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())/v}function x(e,t){return t.weekdays[w[e.getDay()]]}function k(e){return `${c(e.getHours())}:${c(e.getMinutes())}`}function A(e){return `${e.getFullYear()}/${c(e.getMonth()+1)}/${c(e.getDate())}`}function D(e){return `${c(e.getMonth()+1)}/${c(e.getDate())}`}function c(e){return String(e).padStart(2,"0")}function K(e){if(e.markers.length===0)return null;let t=e.viewportTop+e.overlayTop;if(e.markers[0].top>t+1)return null;let r=0;for(let d=0;d<e.markers.length&&!(e.markers[d].top>t+1);d+=1)r=d;let n=e.markers[r],o=t+e.overlayHeight,a=e.markers.filter(d=>d.top<o+1&&d.top+d.height>t-1).at(-1),i=a===void 0?0:Math.max(0,Math.min(a.top+a.height,o)-Math.max(a.top,t)),s=a===void 0?1:Math.max(1,Math.min(a.height,e.overlayHeight)),l=Math.min(1,i/s);return {key:n.key,label:n.label,inlineOpacity:1-l,...a===void 0?{}:{inlineDateKey:a.key}}}var C={text:"text",image:"image",video:"video",voice:"voice",file:"file",filesAlbum:"filesAlbum",sticker:"sticker",contact:"contact",miniProgram:"miniProgram",robot:"robot",game:"game",transfer:"transfer",gift:"gift",redPacket:"redPacket",call:"call",liveRoom:"liveRoom",mediaAlbum:"mediaAlbum",system:"system",unknown:"unknown"};function S(e){switch(e.contentType){case "text":return typeof e.body.text=="string";case "image":return e.body.image!==void 0&&typeof e.body.image.url=="string";case "video":return e.body.video!==void 0&&typeof e.body.video.url=="string";case "voice":return e.body.voice!==void 0;case "filesAlbum":return (e.body.filesAlbum?.items.length??0)>0;case "file":return e.body.file!==void 0;case "sticker":return e.body.sticker!==void 0;case "contact":return e.body.contact!==void 0;case "miniProgram":return e.body.miniProgram!==void 0&&typeof e.body.miniProgram.appId=="string";case "robot":return e.body.robot!==void 0&&Array.isArray(e.body.robot.modules)&&Array.isArray(e.body.robot.commands);case "transfer":return e.body.transfer!==void 0&&typeof e.body.transfer.serialNumber=="string";case "gift":{let t=e.body.gift;return t!==void 0&&typeof t.serialNumber=="string"&&typeof t.giftName=="string"&&(t.giftType===0||t.giftType===1||t.giftType===2)}case "redPacket":{let t=e.body.redPacket;return t!==void 0&&t.packetId.trim()!==""&&(t.packetType===1||t.packetType===2||t.packetType===3||t.packetType===4)}case "call":return e.body.call!==void 0&&(e.body.call.callKind==="audio"||e.body.call.callKind==="video")&&typeof e.body.call.durationMs=="number";case "liveRoom":{let t=e.body.liveRoom;return t!==void 0&&typeof t.liveRoomId=="string"&&(t.liveType===""||t.liveType==="video"||t.liveType==="voice"||t.liveType==="dual-phone"||t.liveType==="screen-record"||t.liveType==="voice-chat")&&(t.liveRoomStatus==="preview"||t.liveRoomStatus==="live"||t.liveRoomStatus==="ended")&&typeof t.isFocus=="boolean"&&typeof t.isReservation=="boolean"}case "game":{let t=e.body.game;return t?.gameType==="dice"?Number.isInteger(t.value)&&t.value>=1&&t.value<=6:t?.gameType==="rock-paper-scissors"&&Number.isInteger(t.value)&&t.value>=1&&t.value<=3}case "mediaAlbum":{let t=e.body.mediaAlbum;return t!==void 0&&t.items.length>0&&t.items.every(r=>typeof r.url=="string"&&r.url!=="")}case "system":return e.body.system!==void 0;case "unknown":return e.body.unknown!==void 0}}function I(e){return e.encryption.decryptFailed===true?"decrypt-failed":S(e)?e.contentType==="sticker"?x$1(e.body.sticker.imageType):C[e.contentType]:"unknown"}function _(e){let t=[...e.leadingItems??[]],r=e.entryUnread.state==="located"?e.entryUnread:null,n,o=null,a=false;for(let i of e.messages){let s=b(i.createdAt,i.serverTime),l=s!==void 0&&h(s,n);s!==void 0&&l&&t.push({kind:"date-separator",key:`date-${m(s)}-${i.id}`,label:e.formatDate(s)}),n=s,!a&&r!==null&&i.id===r.firstMessageId&&(t.push({kind:"entry-unread",key:`entry-unread-${i.id}`,...r.count===void 0?{}:{count:r.count}}),a=true);let d=e.beforeMessageItems?.(i)??[];if(t.push(...d),I(i)==="system"){t.push({kind:"system",key:i.id,message:i}),o=null;continue}t.push({kind:"message",key:`message-${i.id}`,message:i,firstOfRun:l||i.senderId!==o}),o=i.senderId;}return t}function U(e){let t=e.targetTop-e.viewportTop,r=e.currentScrollTop+t-(e.viewportHeight-e.targetHeight)/2,n=Math.max(0,e.scrollHeight-e.viewportHeight);return Math.min(n,Math.max(0,r))}function j(e){return e!==null&&e.clientWidth>0&&e.clientHeight>0}function G(e){return e.locatedAt<=0||e.duration<0||e.now<e.locatedAt?false:e.now-e.locatedAt<=e.duration}function q(e){return !Number.isFinite(e.topThreshold)||e.topThreshold<0?false:e.currentScrollTop<e.previousScrollTop&&e.currentScrollTop<=e.topThreshold}function H(e,t){return e.find(r=>r.bottom>t.top&&r.top<t.bottom)??e[0]}function f(e){return e.anchorTop??e.top}function B(e,t){let r=H(e,t);return r===void 0?void 0:{id:r.id,offset:f(r)-t.top}}function J(e,t,r){if(e===void 0)return;let n=t.find(o=>o.id===e.id);return n!==void 0&&n.bottom>r.top&&n.top<r.bottom?{id:e.id,offset:f(n)-r.top}:B(t,r)??e}function V(e,t,r){if(e===void 0)return;let n=t.find(o=>o.id===e.id);return n===void 0?void 0:f(n)-r.top-e.offset}function Q(e,t,r=3){return !Number.isFinite(r)||r<=0?[]:e.filter(n=>n.bottom>t.top&&n.top<t.bottom).slice(0,Math.floor(r)).map(n=>({id:n.id,offset:f(n)-t.top}))}function X(e,t,r){for(let n of e){let o=V(n,t,r);if(o!==void 0)return o}}function Z(e){return e.sameConversation&&!e.isHistoryWindow&&!e.isLocating&&!e.isLocateProtected&&e.userKeptLatestIntent}function ee(e){return e.isPageVisible&&!e.isHistoryWindow&&!e.isLocating&&!e.isLocateProtected&&(e.isOwnMessage||e.isAtBottom)}function te(e){return e.isLoadingOlder&&e.previousTailId!==void 0&&e.previousTailId!==e.currentTailId&&e.previousMessageIds.includes(e.currentTailId)}function re(e,t){return e!==void 0&&!t.has(e)}async function ne(e,t){let r=0;for(;e()&&!(await t()<=0);)r+=1;return r}function oe(e){return e.hasMoreHistory&&Number.isFinite(e.scrollHeight)&&Number.isFinite(e.clientHeight)&&e.scrollHeight>0&&e.clientHeight>0&&e.scrollHeight<=e.clientHeight}function ie(e){return e.isHistoryWindow&&!e.isPageSettling&&e.isAtBottom&&(e.currentScrollTop>e.previousScrollTop||e.allowStationaryBoundary===true)}function M(e){return !e.isPageVisible||!e.isAtBottom||e.isHistoryWindow}function ae(e){let t=Math.max(0,e.margin);return e.messageTop<e.viewportBottom-t&&e.messageBottom>e.viewportTop+t}function le(e){let t=new Set;function r(s){return s===t.size?false:(e?.(t.size),true)}function n(s){let l=t.size;for(let d of s)d!==""&&t.add(d);return r(l)}function o(s,l){return M(l)&&n(s)}function a(s){let l=t.size;for(let d of s)t.delete(d);return r(l)}function i(){let s=t.size;return t.clear(),r(s)}return {get count(){return t.size},add:n,trackRemote:o,acknowledgeVisible:a,clear:i}}export{M as A,ae as B,le as C,P as a,b,m as c,h as d,F as e,L as f,K as g,I as h,_ as i,U as j,j as k,G as l,q as m,H as n,B as o,J as p,V as q,Q as r,X as s,Z as t,ee as u,te as v,re as w,ne as x,oe as y,ie as z};