k2-im 0.1.36 → 0.1.38

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.
@@ -24,6 +24,8 @@ interface ConversationRef<TType extends ConversationType = ConversationType> {
24
24
  conversationType: TType;
25
25
  conversationId: string;
26
26
  }
27
+ /** 当前支持持久化草稿的会话类型;`supergroup` 必须继续 fail-fast。 */
28
+ type DraftConversationType = Exclude<ConversationType, 'supergroup'>;
27
29
  /** 消息内容类型。sticker=表情/贴图(BMessage contentType=7);call=单聊通话记录(contentType=10);transfer=转账(contentType=16);gift=礼品/刮刮卡(contentType=17);robot=机器人卡片(contentType=18);miniProgram=小程序分享卡(contentType=22);redPacket=红包卡(contentType=25);game=小游戏(contentType=27);未知 wire 正文统一归一为 unknown。 */
28
30
  type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'gift' | 'call' | 'redPacket' | 'mediaAlbum' | 'filesAlbum' | 'robot' | 'unknown';
29
31
  /**
@@ -184,6 +186,8 @@ interface ImVideoBody {
184
186
  width: number;
185
187
  /** 视频像素高(BMessage.height)。 */
186
188
  height: number;
189
+ /** 发送方显式选择了 HD 原视频(BMessage.hd);不按分辨率猜测。 */
190
+ hd?: boolean;
187
191
  /** 时长(秒,可含小数);移动端旧消息的毫秒值由 SDK 转换,宿主不得猜单位。 */
188
192
  duration?: number;
189
193
  /** SDK 已确认时长为秒的标记;兼容旧缓存时防止重复转换。缺省仍按公开 API 的秒约定传入。 */
@@ -724,7 +728,7 @@ interface ImMessage {
724
728
  };
725
729
  /**
726
730
  * CHANNEL 管理员/社群主全员删除终态。它与发送者本人撤回、`deleteLocal` 完全不同:服务端通过
727
- * `RADIO_ADMIN_CANCEL_*` 同步给全员,正文不可逆清空,产品统一展示“管理员删除了一条消息”。
731
+ * `RADIO_ADMIN_CANCEL_*` 同步给全员,正文不可逆清空;线程与会话摘要仅向群主、管理员展示删除提示,普通成员及未知角色隐藏。
728
732
  */
729
733
  deletedForEveryone?: {
730
734
  by: string;
@@ -904,6 +908,15 @@ interface ImSession {
904
908
  * 派生展示字段(随最新消息变化,会话列表据此显示发送中 loading / 失败图标);运行期真相,不持久化(persistSession 落盘时剔除)。
905
909
  */
906
910
  lastMessageSendState?: 'sending' | 'failed';
911
+ /**
912
+ * 最新一条己方已发送消息的回执态。
913
+ *
914
+ * 只在自己发出且 `status='sent'` 时投影;发送中/失败、对端消息、撤回、全员删除和系统提示都不给。
915
+ * `delivered` 与尚未回执一样投影为 `unread`;当前协议没有送达通知,不能把 `sent` 当作对端已收到。
916
+ * 该字段随最新消息变化,并随会话落盘,避免冷启动后
917
+ * 因「盘中缺字段 / 内存有字段」反复广播;对端已读变化必须刷新会话行。
918
+ */
919
+ lastMessageReceipt?: 'unread' | 'read';
907
920
  /** P0 我方已读游标(见 §4.3)。 */
908
921
  readCursor?: string;
909
922
  /** 群受限状态(仅 group;来自 0x2204 群通知 side-effect)。缺省视为 'active'(可正常发送)。 */
@@ -1239,6 +1252,22 @@ interface MediaTransferAdapterConfig {
1239
1252
  * 未知正文显式投影为 `unknown`,不能猜成文本。这里也集中生成稳定 SDK 错误,供所有产品域统一暴露。
1240
1253
  */
1241
1254
 
1255
+ /** 产品错误的大类;宿主按稳定 code/category 决策,不解析底层异常文案。 */
1256
+ type ImSdkErrorCategory = 'auth' | 'network' | 'protocol' | 'permission' | 'validation' | 'state' | 'unsupported' | 'contract';
1257
+ /**
1258
+ * 产品层稳定错误形状。
1259
+ *
1260
+ * @remarks `cause` 只用于诊断,不是 UI 决策合同;协议 command、HTTP path 与服务端原始 payload 不进入该结构。
1261
+ */
1262
+ interface ImSdkErrorShape {
1263
+ code: string;
1264
+ category: ImSdkErrorCategory;
1265
+ operation: string;
1266
+ retryable: boolean;
1267
+ conversation?: ConversationRef;
1268
+ details?: Readonly<Record<string, unknown>>;
1269
+ cause?: unknown;
1270
+ }
1242
1271
  /** 一种表情回应的稳定聚合;不包含内部事件 ID 或协议字段。 */
1243
1272
  interface ImMessageReactionAggregate {
1244
1273
  emoji: string;
@@ -1282,6 +1311,26 @@ type ImMessageView = Readonly<Omit<ImMessage, 'sortKey' | 'raw' | 'extensions' |
1282
1311
  body: ImMessageViewBody;
1283
1312
  reactions?: ImMessageReactions;
1284
1313
  }>;
1314
+ /** 结构化 mention 输入;direct handle 接收该形状但在 GROUP sibling 接入前显式返回 unsupported。 */
1315
+ interface MentionInput {
1316
+ userId: string;
1317
+ displayName: string;
1318
+ }
1319
+
1320
+ /**
1321
+ * 当前账号草稿的产品 DTO、跨组件 API 与 handle 绑定门面。
1322
+ * 草稿按复合会话身份串行持久化,SDK DomainState 是唯一真相;附件尚未闭合时非空输入明确拒绝。
1323
+ */
1324
+
1325
+ /** 当前产品草稿实体;只包含可持久化的 text/mention/reply,附件集合固定为空。 */
1326
+ interface ConversationDraft {
1327
+ ref: ConversationRef<DraftConversationType>;
1328
+ text: string;
1329
+ mentions: readonly MentionInput[];
1330
+ replyToMessageId?: string;
1331
+ attachments: readonly [];
1332
+ updatedAt: number;
1333
+ }
1285
1334
 
1286
1335
  /**
1287
1336
  * 将 Core 会话列表投影成 default 产品 DTO 和可订阅原子快照。
@@ -1302,6 +1351,55 @@ type ConversationEntryUnreadSnapshot = Readonly<{
1302
1351
  }> | Readonly<{
1303
1352
  state: 'unavailable';
1304
1353
  }>;
1354
+ /** 进入时冻结的导航提示;数量独立于会话已读,不暴露内部历史排序边界。 */
1355
+ type ConversationEntryUnreadNavigation = Readonly<{
1356
+ state: 'none';
1357
+ }> | Readonly<{
1358
+ state: 'pending' | 'unavailable';
1359
+ count: number;
1360
+ }> | Readonly<{
1361
+ state: 'located';
1362
+ count: number;
1363
+ firstMessageId: string;
1364
+ }> | Readonly<{
1365
+ state: 'failed';
1366
+ count: number;
1367
+ error: ImSdkErrorShape;
1368
+ }>;
1369
+
1370
+ /**
1371
+ * 绑定单个精确会话的产品句柄与独立连续消息窗口。
1372
+ * 句柄提供历史、消息、草稿、已读和免打扰动作;SDK/DomainState 仍拥有消息真相,关闭只释放窗口和订阅。
1373
+ * direct、GROUP、CHANNEL 使用 sibling 工厂,`supergroup` 不会 fallback。
1374
+ */
1375
+
1376
+ /** 当前已接线的产品 handle 会话类型;三者只在无会话语义原子层复用。 */
1377
+ type ProductHandleConversationType = 'direct' | 'group' | 'channel' | 'robot';
1378
+ /**
1379
+ * 产品会话的连续窗口快照;协议 cursor、窗口 id 与 generation 始终保持在 SDK 内部。
1380
+ *
1381
+ * @template TType 已注册 handle 的精确会话类型。
1382
+ */
1383
+ interface ConversationHandleSnapshot<TType extends ProductHandleConversationType = ProductHandleConversationType> {
1384
+ ref: ConversationRef<TType>;
1385
+ /** 已校验的聊天标题与头像;即使尚无会话列表项,宿主也可正常展示聊天头部。 */
1386
+ display?: Readonly<{
1387
+ title: string;
1388
+ avatar?: string;
1389
+ }>;
1390
+ messages: readonly ImMessageView[];
1391
+ /** 本次打开时冻结的未读入口;只用于产品 UI 分隔线,不作为 SDK 已读真相。 */
1392
+ entryUnread: ConversationEntryUnreadSnapshot;
1393
+ /** 显式请求的进入导航快照;旧消费者不请求时省略。 */
1394
+ entryUnreadNavigation?: ConversationEntryUnreadNavigation;
1395
+ /** 当前账号本机草稿;不承诺跨端同步。 */
1396
+ draft: ConversationDraft | null;
1397
+ loading: boolean;
1398
+ stale: boolean;
1399
+ hasOlder: boolean;
1400
+ hasNewer: boolean;
1401
+ error?: ImSdkErrorShape;
1402
+ }
1305
1403
 
1306
1404
  /**
1307
1405
  * SDK 对外的结构化诊断投影、过滤与 sink 装配。
@@ -1608,6 +1706,8 @@ interface ImThreadInitialViewportOptions {
1608
1706
  maxFillPages?: number;
1609
1707
  }
1610
1708
  /** 结构 slots 可调用的稳定 Surface actions。 */
1709
+ /** 区分定位完成、目标不可显示与用户取消,避免把正常中断误报为失败。 */
1710
+ type ImThreadEntryUnreadNavigationResult = 'located' | 'unavailable' | 'cancelled';
1611
1711
  interface ImThreadSurfaceSlotActions {
1612
1712
  /** 返回 Surface 唯一滚动根,供宿主媒体观察等平台能力复用;宿主不得建立第二套滚动控制器。 */
1613
1713
  getViewportElement: () => HTMLElement | null;
@@ -1616,6 +1716,8 @@ interface ImThreadSurfaceSlotActions {
1616
1716
  loadNewer: () => Promise<number>;
1617
1717
  retryNewer: () => Promise<number>;
1618
1718
  jumpToLatest: () => Promise<boolean>;
1719
+ /** 返回本次进入前的未读边界,与实时已读数量无关。 */
1720
+ jumpToEntryUnread: () => Promise<ImThreadEntryUnreadNavigationResult>;
1619
1721
  /** 在当前已加载窗口内定位消息;找不到或布局不可测时返回 false。 */
1620
1722
  scrollToMessage: (messageId: string, options?: ScrollIntoViewOptions) => boolean;
1621
1723
  /** 必要时先替换为目标附近窗口,再等待真实消息节点登记并完成定位。 */
@@ -1635,6 +1737,13 @@ interface ImThreadViewportSettledSnapshot {
1635
1737
  }
1636
1738
  /** Surface initial controller 可调用的无产品语义滚动能力。 */
1637
1739
  interface ImThreadViewportExposed {
1740
+ /** 将已登记的未读分割线居中;历史边缘按真实内容范围限制滚动,不补空白。 */
1741
+ scrollToEntryUnread: () => boolean;
1742
+ /** 测量分割线两侧是否各有半屏内容,供 Surface 决定是否继续加载对应历史。节点尚未注册时返回 null。 */
1743
+ getEntryUnreadCenteringNeeds: () => {
1744
+ older: boolean;
1745
+ newer: boolean;
1746
+ } | null;
1638
1747
  /** 返回 Surface 自己持有的唯一滚动根,供宿主媒体观察等平台能力复用;调用方不得修改其所有权。 */
1639
1748
  getViewportElement: () => HTMLElement | null;
1640
1749
  /** 清空当前视口维护的未见消息集合。 */
@@ -1732,6 +1841,10 @@ type ImThreadIntent = Readonly<{
1732
1841
  kind: 'load-newer';
1733
1842
  }> | Readonly<{
1734
1843
  kind: 'jump-to-latest';
1844
+ }> | Readonly<{
1845
+ kind: 'jump-to-entry-unread';
1846
+ }> | Readonly<{
1847
+ kind: 'mark-conversation-read';
1735
1848
  }> | Readonly<{
1736
1849
  kind: 'locate-message';
1737
1850
  messageId: string;
@@ -1754,6 +1867,8 @@ interface ImThreadSurfaceState {
1754
1867
  messages: readonly ImMessageView[];
1755
1868
  /** 打开会话时冻结的首条未读入口。 */
1756
1869
  entryUnread: ConversationEntryUnreadSnapshot;
1870
+ /** 存在时使用最新首屏与独立历史未读胶囊。 */
1871
+ entryUnreadNavigation?: ConversationHandleSnapshot['entryUnreadNavigation'];
1757
1872
  /** handle 首次快照是否已经可用。 */
1758
1873
  ready: boolean;
1759
1874
  /** 当前是否正在执行窗口操作。 */
@@ -1783,6 +1898,12 @@ interface ImThreadSurfaceState {
1783
1898
  }
1784
1899
  /** Surface 可以调用的共享 Thread actions;网络、窗口和 Outbox 真相仍由上游 Store/SDK 持有。 */
1785
1900
  interface ImThreadSurfaceActions {
1901
+ /** 按 SDK 本次进入前的冻结边界读取首未读窗口。 */
1902
+ loadEntryUnread?: () => Promise<boolean>;
1903
+ /** 可阅读页面的整会话结算,与实际可见回执独立。 */
1904
+ markConversationRead?: () => Promise<void>;
1905
+ /** 已确认可见的全部消息 ID,不代表整个游标区间。 */
1906
+ markVisibleMessages?: (messageIds: readonly string[]) => Promise<void>;
1786
1907
  /** 请求一页更早历史;返回实际新增消息数。 */
1787
1908
  loadOlder: (options?: {
1788
1909
  force?: boolean;
@@ -1917,4 +2038,4 @@ interface ThreadVisibilityTargetGroup<TItem> {
1917
2038
  declare function createThreadVisibilityTargetGroup<TItem>(groupOptions: ThreadVisibilityTargetGroupOptions): ThreadVisibilityTargetGroup<TItem>;
1918
2039
 
1919
2040
  export { ImThreadBodySwitch, ImThreadItems, ImThreadSurface, ImThreadViewport, createImThreadSurfaceContext, createMessageRendererRegistry, createThreadVisibilityTargetGroup, createThreadVisibilityTargets, provideImThreadSurfaceContext, useImText, useImThreadSurfaceContext, useOptionalImThreadReadActions };
1920
- export type { ImHostEnvironment, ImHostSession, ImMessageRendererRegistration, ImMessageRendererRegistry, ImTextContext, ImThreadActiveDateSlotState, ImThreadInitialViewportOptions, ImThreadSurfaceActions, ImThreadSurfaceContext, ImThreadSurfaceHooks, ImThreadSurfaceSlotActions, ImThreadSurfaceState, ImThreadViewportExposed, ImThreadViewportOptions, ImThreadViewportSettledSnapshot, ThreadVisibilityTargetGroup, ThreadVisibilityTargetGroupOptions, ThreadVisibilityTargets, ThreadVisibilityTargetsFactory, ThreadVisibilityTargetsOptions };
2041
+ export type { ImHostEnvironment, ImHostSession, ImMessageRendererRegistration, ImMessageRendererRegistry, ImTextContext, ImThreadActiveDateSlotState, ImThreadEntryUnreadNavigationResult, ImThreadInitialViewportOptions, ImThreadSurfaceActions, ImThreadSurfaceContext, ImThreadSurfaceHooks, ImThreadSurfaceSlotActions, ImThreadSurfaceState, ImThreadViewportExposed, ImThreadViewportOptions, ImThreadViewportSettledSnapshot, ThreadVisibilityTargetGroup, ThreadVisibilityTargetGroupOptions, ThreadVisibilityTargets, ThreadVisibilityTargetsFactory, ThreadVisibilityTargetsOptions };
@@ -1 +1 @@
1
- import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-SWQXHZDF.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-4WMIGRG4.js';import'./chunk-NB6MXFCH.js';import'./chunk-4CH72T6I.js';import'./chunk-ANHUDX3C.js';import'./chunk-WOT6VMZA.js';import {defineComponent,h as h$1,ref,provide,watch,nextTick,onMounted,onBeforeUnmount,computed,inject,isVNode,cloneVNode,Fragment,reactive}from'vue';function Gt(t){let o=0,g=0;for(let u of t)u.kind==="video"?g+=1:o+=1;return {imageCount:o,videoCount:g}}function zt(t){return {systemMessage:o=>o.body.system!==void 0?g$1(o.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:o=>i$1(o.contentType,{locale:t.locale(),durationMs:o.body.voice?.durationMs,stickerImageType:o.body.sticker?.imageType,gameType:o.body.game?.gameType,callKind:o.body.call?.callKind,...o.body.filesAlbum===void 0?{}:{filesAlbum:{count:o.body.filesAlbum.items.length,caption:o.body.filesAlbum.caption}},...o.body.mediaAlbum===void 0?{}:{mediaAlbum:Gt(o.body.mediaAlbum.items)}}),lastMessage:o=>o.lastMessageSummary!==void 0?h$2(o.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):o.lastMessagePreview,failureText:o=>o.failure?.displayCode!==void 0?f(o.failure.displayCode,{locale:t.locale(),mediaKind:o.failure.mediaKind,params:o.failure.params}):o.failure?.message??""}}var Ot=Symbol("ImThreadReadActions");function Vt(t){provide(Ot,t);}function Xt(){return inject(Ot,void 0)}var ze=defineComponent({name:"ImThreadBodySwitch",inheritAttrs:false,props:{message:{type:Object,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{attrs:o,slots:g}){return Vt(t.readActions),()=>{let u=h(t.message),f=t.rendererRegistry.resolve(u);return f!==void 0?h$1(f,{...o,message:t.message,presentation:t.presentation}):g["unsupported-body"]!==void 0?g["unsupported-body"]({kind:u,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":u,"aria-hidden":"true"})}}});var Ye=Symbol("ImThreadViewportRegistration");function Nt(){return inject(Ye,void 0)}var $e=defineComponent({name:"ImThreadItems",props:{items:{type:Array,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{slots:o}){let g=Nt();function u(i,d){let w=Array.isArray(d)?d:[d];return w.length===1&&isVNode(w[0])?cloneVNode(w[0],{key:i}):h$1(Fragment,{key:i},w)}function f(i){return d=>{g?.registerMessageNode(i,d instanceof HTMLElement?d:null);}}function C(i,d){return w=>{g?.registerDateNode(i,d,w instanceof HTMLElement?w:null);}}function U(i){return o.encryption?.({item:i})??h$1("div",{"data-im-thread-encryption":i.key})}function h(i){let d=C(i.key,i.label);return o["date-separator"]?.({item:i,setElement:d})??h$1("div",{ref:d,"data-im-thread-date-separator":i.key},i.label)}function A(i){return o["entry-unread"]?.({item:i})??h$1("div",{"data-im-thread-entry-unread":i.key,...i.count===void 0?{}:{"data-count":String(i.count)}})}function m(i){let d=f(i.message.id);return o.item!==void 0?o.item({item:i,setElement:d}):o.message!==void 0?o.message({item:i,setElement:d}):i.message.deletedForEveryone!==void 0?o["deleted-message"]?.({item:i,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":i.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):i.message.recalled!==void 0?o["recalled-message"]?.({item:i,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":i.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):i.kind==="system"&&o.system!==void 0?o.system({item:i,setElement:d}):h$1("article",{ref:d,"data-im-thread-message-id":i.message.id,"data-first-of-run":i.kind==="message"?String(i.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(ze,{message:i.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":o["unsupported-body"]===void 0?void 0:w=>o["unsupported-body"]?.(w)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(i=>{switch(i.kind){case "encryption":return o.item!==void 0?u(i.key,o.item({item:i})):u(i.key,U(i));case "date-separator":return o.item!==void 0?u(i.key,o.item({item:i,setElement:C(i.key,i.label)})):u(i.key,h(i));case "entry-unread":return o.item!==void 0?u(i.key,o.item({item:i})):u(i.key,A(i));case "system":case "message":return u(i.key,m(i))}return i}))}});var Lt=120,lr=500,Ae=.5,dr=8;function Xe(t){let o=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(o!==void 0&&Number.isFinite(o)&&o>0?o:1)}var Je=defineComponent({name:"ImThreadViewport",props:{messageIds:{type:Array,required:true},contentKey:{type:String,default:""},loadingOlder:{type:Boolean,default:false},hasNewer:{type:Boolean,default:false},loadingNewer:{type:Boolean,default:false},followThreshold:{type:Number,default:120},olderPrefetchThreshold:{type:Number,default:120},followNewMessages:{type:Boolean,default:true},shouldFollowAppendedMessage:{type:Function,default:void 0},visibleMargin:{type:Number,default:8},resizeFollowEnabled:{type:Boolean,default:true},activeDateOffset:{type:Number,default:16},activeDateEnabled:{type:Boolean,default:false}},emits:{"reach-start":()=>true,"reach-end":()=>true,"visible-range":t=>true,settled:t=>true,"new-message-count":t=>true,"user-scroll":()=>true,"active-date-change":t=>true},setup(t,{emit:o$1,expose:g$1,slots:u}){let f=ref(null),C$1=ref(null),U=new Map,h=new Map,A=new Set,m$1=new Map,i=0,d=[],w,_,x,P,G=false,S,Y=new Set,$=false,N,ne="",s=1,z$1=false,ie=false,K=true,L=false,Z=false,B$1=false,ee=0,te=-1,he=-1,F,ae,X,k,W,oe=ref(true),p$1=ref(0),T=C(e=>{p$1.value=e,o$1("new-message-count",e);});function v(e){let n=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=n}function H(e=t.messageIds){return e.flatMap(n=>{let a=U.get(n);if(a===void 0)return [];let y=a.getBoundingClientRect(),I=a.querySelector("[data-im-thread-anchor-point]");return [{id:n,top:y.top,bottom:y.bottom,anchorTop:I?.getBoundingClientRect().top??y.top}]})}function b(e="",n=1){let a=Math.min(1,Math.max(0,n));ne!==""&&ne!==e&&m$1.get(ne)?.element.style.removeProperty("opacity"),ne=e,s=a,e!==""&&m$1.get(e)?.element.style.setProperty("opacity",String(a));}function J(){b();}function E(){let e=f.value;if($||e===null||!t.activeDateEnabled)return;let n=[...m$1.entries()].filter(([,V])=>e.contains(V.element)).map(([V,D])=>{let Q=D.element.getBoundingClientRect();return {key:V,label:D.label,top:Q.top,height:Q.height}}).sort((V,D)=>V.top-D.top),a=e.getBoundingClientRect(),y=n.find(V=>V.height>0)?.height??28,I=g({markers:n,viewportTop:a.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:y});if(I===null){J(),o$1("active-date-change",null);return}b(I.inlineDateKey,I.inlineOpacity),o$1("active-date-change",I);}function j$1(e){_={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Oe(e){let n=_;if(n===void 0)return false;let a=Math.max(0,e.scrollHeight-e.clientHeight);return a<n.scrollHeight-n.height&&n.scrollTop>a&&Math.abs(e.scrollTop-a)<=Xe(e)}function Ke(e){return Oe(e)||N!==void 0&&(N.behavior==="smooth"||Math.abs(e.scrollTop-N.targetTop)<=Xe(e))?0:e.scrollTop-i}function Se(e,n){n!==0&&(i=e.scrollTop-n,N=void 0,l());}function be(e,n){let a=Ke(e);if(k!==void 0)return k.expectedOffset-=a,q$1(),Se(e,a),L||me(),false;let y=_;if(y===void 0)return false;let I=w,V=I===void 0?void 0:H([I.id])[0],D=e.scrollTop-y.scrollTop,Q=Oe(e)?0:D,Pe=I===void 0||V===void 0?0:(V.anchorTop??V.top)-n.top-I.offset+D;return y.scrollHeight!==e.scrollHeight||y.width!==e.clientWidth||y.height!==e.clientHeight||Math.abs(Pe)>Ae?(_=void 0,!z$1&&!t.loadingNewer&&t.resizeFollowEnabled&&oe.value&&Math.abs(Q)<=Ae?(Fe(),true):(I!==void 0&&we({...I,offset:I.offset-Q}),Se(e,a),false)):false}function Re(){let e=f.value;if($||e===null)return;let n=e.getBoundingClientRect();if(be(e,n))return;let a=P!==void 0&&G?t.messageIds.filter(D=>A.has(D)):t.messageIds,y=H(a);if(P!==void 0&&G&&y.length===0){oe.value=v(e);return}let I=y.filter(D=>B({viewportTop:n.top,viewportBottom:n.bottom,messageTop:D.top,messageBottom:D.bottom,margin:t.visibleMargin})).map(D=>D.id),V=I.length!==d.length||I.some((D,Q)=>d[Q]!==D);d=Object.freeze(I),w=o(y,{top:n.top,bottom:n.bottom}),j$1(e),T.acknowledgeVisible(I),oe.value=v(e),V&&o$1("visible-range",d),o$1("settled",{visibleMessageIds:d,...d.length===0?{}:{newestVisibleMessageId:d[d.length-1]},isAtBottom:oe.value,newMessageCount:p$1.value});}function re(e){if(Y.add(e),S!==void 0)return;let n=()=>{S=void 0;let a=[...Y];Y.clear(),a.forEach(y=>y());};typeof globalThis.requestAnimationFrame=="function"?S=globalThis.requestAnimationFrame(n):S=globalThis.setTimeout(n,0);}function qe(){S!==void 0&&(typeof S=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(S):globalThis.clearTimeout(S),S=void 0,Y.clear());}function se(){re(Re);}function Ce(){let e=f.value;if(e===null)return;let n=e.getBoundingClientRect(),a=o(H(),{top:n.top,bottom:n.bottom});a!==void 0&&(w=a,j$1(e));}function Ie(){return K&&k===void 0&&!ie&&!t.loadingOlder}function fe(){Ce(),K=false,te=ee,ie=true,o$1("reach-start"),re(()=>{t.loadingOlder||(ie=false);});}function Ne(e){return t.hasNewer&&!z$1&&!t.loadingOlder&&!t.loadingNewer&&v(e)}function Ve(){z$1=true,oe.value=false,he=ee,o$1("reach-end"),re(()=>{t.loadingNewer||(z$1=false);});}function r(){let e=f.value;e===null||ee===he||!Ne(e)||Ve();}function l(){let e=f.value;if($||e===null)return;let n=e.scrollTop,a=Oe(e),y=N,I=false;if(y!==void 0){let D=Math.abs(n-y.targetTop)<=Xe(e);I=y.behavior==="smooth"||D,(y.behavior!=="smooth"||D)&&(N=void 0);}!I&&!a&&!L&&k===void 0&&n!==i&&(L=true,Z=true,ee+=1);let V=L&&!I&&!a&&n!==i;if(V&&(o$1("user-scroll"),re(E)),L&&!B$1&&Me(),!K&&Z&&ee!==te&&n<i&&n>ke()&&(K=true),k!==void 0&&!I)if(L){let D=O();D!==void 0&&(k.expectedOffset=D);}else q$1(),me();Ie()&&V&&n>=0&&m({previousScrollTop:i,currentScrollTop:n,topThreshold:t.olderPrefetchThreshold})&&fe(),V&&Ne(e)&&z({previousScrollTop:i,currentScrollTop:n,isAtBottom:v(e),isHistoryWindow:t.hasNewer,isPageSettling:I})&&Ve(),i=n,se();}function c(e,n="auto"){N={targetTop:e,behavior:n};}function R(e){let n=k,a=C$1.value;if(!(n===void 0||a===null)){if(n.visualOffset=Math.abs(e)<=Ae?0:e,n.visualOffset===0){a.style.removeProperty("transform"),a.style.removeProperty("will-change");return}a.style.setProperty("transform",`translate3d(0, ${n.visualOffset}px, 0)`),a.style.setProperty("will-change","transform");}}function M(){W!==void 0&&(clearTimeout(W),W=void 0),k!==void 0&&k.visualOffset!==0&&(w=void 0,_=void 0);let e=C$1.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),k=void 0,N=void 0;}function O(){let e=f.value,n=k;if(e===null||n===void 0)return;let a=H().find(y=>y.id===n.anchor.id);if(a!==void 0)return (a.anchorTop??a.top)-e.getBoundingClientRect().top}function q$1(){let e=k,n=O();if(e===void 0||n===void 0)return;let a=e.expectedOffset-n;Math.abs(a)<=Ae||(R(e.visualOffset+a),e.committed=false,e.attempts=0);}function ue(){W!==void 0&&clearTimeout(W),W=setTimeout(()=>{W=void 0,!(L||k?.committed!==true)&&M();},lr);}function de(){let e=f.value,n=k;if($||e===null||n===void 0||L)return;let a=n.visualOffset;if(Math.abs(a)<=Ae){n.committed=true,ue();return}let y=Math.max(0,e.scrollHeight-e.clientHeight),I=Math.min(y,Math.max(0,e.scrollTop-a));if(c(I),e.scrollTop=I,Math.abs(e.scrollTop-I)>Ae){N=void 0,n.committed=false,n.attempts+=1,n.attempts<dr?me():(M(),N=void 0,i=e.scrollTop);return}R(0),i=e.scrollTop,n.expectedOffset=O()??n.expectedOffset,n.committed=true,n.attempts=0,ue();}function me(){W!==void 0&&clearTimeout(W),W=setTimeout(()=>{W=void 0,de();},Lt);}function ve(e){e!==void 0&&(k===void 0&&(k={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),q$1(),!L&&de());}function we(e){let n=f.value;if(n===null||e===void 0)return;let a=n.getBoundingClientRect(),y=q(e,H(),{top:a.top,bottom:a.bottom});if(y!==void 0){let I=Math.max(0,n.scrollHeight-n.clientHeight),V=Math.min(I,Math.max(0,n.scrollTop+y));c(V),n.scrollTop=V,i=n.scrollTop,_=void 0;}}function ke(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function De(){N?.behavior==="smooth"&&(N=void 0),Z=false,L||(L=true,ee+=1),F!==void 0&&(clearTimeout(F),F=void 0);}function Le(){let e=f.value;e===null||ee===te||(k!==void 0&&M(),K=true,e.scrollTop<=ke()&&Ie()&&fe());}function ot(){w=void 0,_=void 0,F!==void 0&&(clearTimeout(F),F=void 0),M(),L=false,Z=false,B$1=false,ae=void 0,X=void 0,ee+=1,te=-1,he=-1,K=true,ie=false,z$1=false,N=void 0;}function it(){B$1||(F!==void 0&&(clearTimeout(F),F=void 0),L=false,Z=false,k!==void 0&&(k.attempts=0),de());}function Me(){B$1||(F!==void 0&&clearTimeout(F),F=setTimeout(()=>{F=void 0,it();},Lt));}function at(){N=void 0,it();}function st(e){B$1=true,De(),ae=e.touches?.[0]?.clientY;}function lt(e){let n=e.touches?.[0]?.clientY;n!==void 0&&(ae!==void 0&&n>ae?Le():ae!==void 0&&n<ae&&r(),ae=n);}function He(){B$1=false,ae=void 0,Me();}function dt(e){De(),e.deltaY<0?Le():e.deltaY>0&&r(),Me();}function ut(e){e.pointerType!=="touch"&&(De(),X=e.clientY,Me());}function ct(e){e.pointerType==="touch"||!L||X===void 0||(e.clientY<X?Le():e.clientY>X&&r(),X=e.clientY,Me());}function Be(e){e.pointerType!=="touch"&&(X=void 0,Me());}function ft(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(De(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?Le():r(),Me());}function Fe(e="auto"){let n=f.value;if(n===null)return;_=void 0,M();let a=Math.max(0,n.scrollHeight-n.clientHeight);c(a,e),n.scrollTo?.({top:a,behavior:e}),n.scrollTop!==a&&(n.scrollTop=a),i=n.scrollTop,T.clear(),Re();}function mt(){let e=f.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function Bt(){let e=f.value;return mt()&&e!==null&&e.scrollHeight>e.clientHeight+1}function Ft(e,n={}){let a=f.value,y=U.get(e);if(a===null||y===void 0||!a.contains(y)||a.clientHeight<=0)return false;M();let I=a.getBoundingClientRect(),V=y.getBoundingClientRect(),D=n.block??"center",Q;D==="start"?Q=a.scrollTop+V.top-I.top:D==="end"?Q=a.scrollTop+V.bottom-I.bottom:D==="nearest"?V.top>=I.top&&V.bottom<=I.bottom?Q=a.scrollTop:V.top<I.top?Q=a.scrollTop+V.top-I.top:Q=a.scrollTop+V.bottom-I.bottom:Q=j({currentScrollTop:a.scrollTop,scrollHeight:a.scrollHeight,targetHeight:V.height,targetTop:V.top,viewportHeight:a.clientHeight,viewportTop:I.top});let Pe=Math.max(0,a.scrollHeight-a.clientHeight),Te=Math.min(Pe,Math.max(0,Q));_=void 0;let Ee=n.behavior??"auto";return c(Te,Ee),a.scrollTo?.({top:Te,behavior:Ee}),a.scrollTop!==Te&&(a.scrollTop=Te),i=a.scrollTop,Re(),true}function _t(){T.clear();}function jt(){z$1=true,oe.value=false;}function Ut(){z$1=false,se();}function Kt(e,n){let a=U.get(e);if(a!==void 0&&a!==n&&(P?.unobserve(a),x?.unobserve?.(a),h.delete(a),A.delete(e)),n===null){U.delete(e),A.delete(e);return}U.set(e,n),h.set(n,e),P?.observe(n),x?.observe(n),se();}function qt(e,n,a){let y=m$1.get(e);if(a===null){m$1.delete(e);return}m$1.set(e,{element:a,label:n}),ne===e&&a.style.setProperty("opacity",String(s)),y?.element!==a&&(a.dataset.imThreadDateSeparator=e);}return provide(Ye,{registerMessageNode:Kt,registerDateNode:qt}),watch(()=>t.contentKey,(e,n)=>{if(e===n)return;ot();let a=f.value;a!==null&&(i=a.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,n)=>{let a=f.value;if(a===null)return;let y=new Set(n);n.length>0&&e.length>0&&!e.some(ye=>y.has(ye))&&ot();let V=a.getBoundingClientRect(),D=p(w,H(),{top:V.top,bottom:V.bottom}),Q=oe.value,Pe=n[n.length-1],Te=Pe===void 0?-1:e.indexOf(Pe),Ee=Te<0?[]:e.slice(Te+1).filter(ye=>!y.has(ye)),gt=z$1||t.loadingNewer,Wt=e.length===n.length&&e.every(ye=>y.has(ye))&&e.some((ye,We)=>ye!==n[We]);if(await nextTick(),$)return;if(Wt&&Q&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!gt){Fe();return}let pt=n[0];if(pt!==void 0&&e.indexOf(pt)>0&&(ie=false,ve(D)),Ee.length>0){if(gt){z$1=false,k===void 0&&we(D),oe.value=false,se();return}(Q||Ee.some(We=>t.shouldFollowAppendedMessage?.(We)===true))&&t.followNewMessages?Fe():T.add(Ee);}se();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,n)=>{e||!n||!z$1||re(()=>{t.loadingNewer||(z$1=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,n)=>{e||!n||!ie||re(()=>{t.loadingOlder||(ie=false);});},{flush:"pre"}),onMounted(()=>{let e=f.value;if(e!==null){if(i=e.scrollTop,e.addEventListener("scroll",l,{passive:true}),e.addEventListener("scrollend",at,{passive:true}),e.addEventListener("touchstart",st,{passive:true}),e.addEventListener("touchmove",lt,{passive:true}),e.addEventListener("touchend",He,{passive:true}),e.addEventListener("touchcancel",He,{passive:true}),e.addEventListener("wheel",dt,{passive:true}),e.addEventListener("pointerdown",ut,{passive:true}),e.addEventListener("pointermove",ct,{passive:true}),e.addEventListener("pointerup",Be,{passive:true}),e.addEventListener("pointercancel",Be,{passive:true}),e.addEventListener("keydown",ft),typeof globalThis.ResizeObserver=="function"){x=new globalThis.ResizeObserver(()=>{$||f.value===null||Re();}),x.observe(e),C$1.value!==null&&x.observe(C$1.value);for(let n of U.values())x.observe(n);}if(typeof globalThis.IntersectionObserver=="function"){P=new globalThis.IntersectionObserver(n=>{for(let a of n){let y=h.get(a.target);y!==void 0&&(a.isIntersecting?A.add(y):A.delete(y));}G=true,se();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let n of U.values())P.observe(n);}se();}}),onBeforeUnmount(()=>{$=true;let e=f.value;e!==null&&e.removeEventListener("scroll",l),e!==null&&(e.removeEventListener("scrollend",at),e.removeEventListener("touchstart",st),e.removeEventListener("touchmove",lt),e.removeEventListener("touchend",He),e.removeEventListener("touchcancel",He),e.removeEventListener("wheel",dt),e.removeEventListener("pointerdown",ut),e.removeEventListener("pointermove",ct),e.removeEventListener("pointerup",Be),e.removeEventListener("pointercancel",Be),e.removeEventListener("keydown",ft)),F!==void 0&&clearTimeout(F),M(),qe(),x?.disconnect(),P?.disconnect(),J(),U.clear(),h.clear(),A.clear(),m$1.clear(),T.clear();}),g$1({getViewportElement:()=>f.value,clearNewMessageBadge:_t,clearActiveDate:J,isAtBottom:computed(()=>oe.value),isMeasurable:mt,isScrollable:Bt,newMessageCount:computed(()=>p$1.value),prepareHistoryPageAppend:jt,cancelHistoryPageAppend:Ut,trackRemoteMessageIds:(e,n)=>T.trackRemote(e,n),scrollToLatest:Fe,scrollToMessage:Ft,focusViewport:()=>f.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:f,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:C$1,"data-im-thread-viewport-content":""},u.default?.())])}});var Ht=Symbol("ImThreadSurfaceContext");function fr(t){if(typeof t.getState!="function")throw new TypeError("ImThreadSurfaceContext.getState \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.actions?.loadOlder!="function")throw new TypeError("ImThreadSurfaceContext.actions.loadOlder \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.formatDate!="function")throw new TypeError("ImThreadSurfaceContext.formatDate \u5FC5\u987B\u662F\u51FD\u6570");return Object.freeze({...t,actions:Object.freeze({...t.actions})})}function mr(t){provide(Ht,t);}function Qe(){let t=inject(Ht);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var et=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),tt=Object.freeze({enabled:true,maxFillPages:8}),hr=8,vr=160;function Tr(t,o){return t?.conversationType===o.conversationType&&t.conversationId===o.conversationId}var yr=defineComponent({name:"ImThreadSurface",props:{conversation:{type:Object,required:true},context:{type:Object,default:void 0},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0},viewportOptions:{type:Object,default:()=>({})},initialViewportOptions:{type:Object,default:()=>({})},hooks:{type:Object,default:void 0}},setup(t,{expose:o,slots:g}){let u=t.context??Qe(),f=ref(null),C=ref(0),U=ref(true),h=[],A,m=0,i$1=0,d=null,w="",_="",x="",P=false,G=false,S=ref(false),Y=ref(""),$=ref(false),N,ne,s=computed(()=>u.getState()),z=computed(()=>s.value.pageVisible??u.isPageVisible?.()??true),ie=computed(()=>s.value.pageEngaged??u.isPageEngaged?.()??true),K=computed(()=>Tr(s.value.activeConversation,t.conversation)),L=computed(()=>({...et,...t.viewportOptions})),Z=computed(()=>{let r=t.initialViewportOptions.maxFillPages??tt.maxFillPages;return {enabled:t.initialViewportOptions.enabled??tt.enabled,maxFillPages:Number.isFinite(r)?Math.max(0,Math.floor(r)):tt.maxFillPages}}),B=computed(()=>!K.value||!s.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ee=computed(()=>K.value?i({messages:s.value.messages,entryUnread:s.value.entryUnread,formatDate:u.formatDate,leadingItems:u.leadingItems?.(),beforeMessageItems:u.beforeMessageItems}):[]),te=computed(()=>ee.value.flatMap(r=>r.kind==="message"||r.kind==="system"?[r.message.id]:[]));function he(){N!==void 0&&(clearTimeout(N),N=void 0),ne!==void 0&&(clearTimeout(ne),ne=void 0);}function F(r=false){if(he(),$.value=false,r){f.value?.clearActiveDate(),Y.value="";return}ne=setTimeout(()=>{ne=void 0,!$.value&&(f.value?.clearActiveDate(),Y.value="");},vr);}function ae(r){if(r===null){F();return}he(),Y.value=r.label,$.value=true;let l=L.value.activeDateIdleDelay,c=Number.isFinite(l)?Math.max(0,l):et.activeDateIdleDelay;N=setTimeout(()=>{N=void 0,F();},c);}async function X(r,l){t.hooks?.beforeAction?.(r);try{let c=await l();return t.hooks?.afterAction?.(r,c),c}catch(c){throw t.hooks?.onError?.(r,c),c}}function k(r="automatic"){return !K.value||s.value.loading||!s.value.hasOlder?Promise.resolve(0):X({kind:"load-older",source:r},()=>u.actions.loadOlder())}function W(){let r=u.actions.loadNewer,l=s.value.loadingNewer??s.value.loading;return !K.value||l||!s.value.hasNewer||r===void 0?Promise.resolve(0):X({kind:"load-newer"},()=>r())}async function oe(r){for(let l=0;l<hr;l+=1){if(!K.value)return;let c=r==="older"?s.value.hasOlder:s.value.hasNewer,R=r==="older"?s.value.olderError:s.value.newerError;if(!c||R!==null||(r==="older"?await k("user-scroll"):await W())>0)return;let O=r==="older"?s.value.hasOlder:s.value.hasNewer,q=r==="older"?s.value.olderError:s.value.newerError;if(!O||q!==null)return}}async function p(){return !K.value||u.actions.loadNewer===void 0?0:v({kind:"load-newer"},()=>u.actions.retryNewer?.()??u.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function T(){return K.value?v({kind:"retry-older"},()=>u.actions.retryOlder?.()??u.actions.loadOlder({force:true})):0}async function v(r,l){let c=B.value,R=++m;d=null,x="";let M;try{M=await X(r,l);}catch(O){throw re(c,R)&&(x=c),O}return re(c,R)&&!S.value&&(d=null,Ie()),M}async function H(){if(!K.value)return false;let r=B.value,l=++i$1;return fe(true),P=true,w=r,_=se(s.value.entryUnread),!await X({kind:"jump-to-latest"},()=>u.actions.jumpToLatest?.()??Promise.resolve(!s.value.isHistoryWindow))||!E(r,l)||(await nextTick(),!E(r,l))?false:(f.value?.scrollToLatest(),true)}function b(r){U.value=r.isAtBottom,C.value=r.newMessageCount,Ie();}function J(r,l){return f.value?.scrollToMessage(r,l)??false}function E(r,l){return !G&&i$1===l&&B.value===r&&K.value}async function j(r,l,c,R){for(let M=0;M<60;M+=1){if(!E(r,l))return false;if(J(c,R))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(O=>window.requestAnimationFrame(()=>O()));}return false}async function Oe(r,l,c){let R=f.value;if(R===null||!R.isMeasurable()||R.isScrollable())return true;let M=0,O=!s.value.hasOlder,q=!s.value.hasNewer||u.actions.loadNewer===void 0,ue=async()=>(await nextTick(),await nextTick(),j(r,l,c,{behavior:"auto",block:"center"})),de=async ve=>{if(!E(r,l)||M>=Z.value.maxFillPages)return false;let we=0;if(ve==="older"){if(O||!s.value.hasOlder)return false;we=await k(),O=!s.value.hasOlder;}else {if(q||!s.value.hasNewer)return false;R.prepareHistoryPageAppend();try{we=await W();}catch(ke){throw R.cancelHistoryPageAppend(),ke}we<=0&&!s.value.hasNewer&&R.cancelHistoryPageAppend(),q=!s.value.hasNewer;}return M+=1,we>0?ue():!(ve==="older"?O:q)};!O&&!await de("older")&&(O=true),!q&&!await de("newer")&&(q=true);let me="older";for(;E(r,l)&&M<Z.value.maxFillPages&&R.isMeasurable()&&!R.isScrollable()&&(!O||!q);){let ve=me==="older"?O?"newer":"older":q?"older":"newer";me=ve==="older"?"newer":"older",await de(ve)||(ve==="older"?O=true:q=true);}return E(r,l)}async function Ke(r,l={behavior:"auto",block:"center"}){if(!K.value||r==="")return false;let c=B.value,R=++i$1;if(!te.value.includes(r)){let q=u.actions.loadAround;if(q===void 0||!await X({kind:"locate-message",messageId:r},()=>q(r))||!E(c,R))return false}return !await j(c,R,r,{...l,behavior:"auto"})||!await Oe(c,R,r)?false:j(c,R,r,l)}function Se(){A!==void 0&&(clearTimeout(A),A=void 0);}function be(){if(Se(),!S.value)return;let r=t.readActions;if(r===void 0||h.length===0)return;let l=Number.isFinite(L.value.visibleReadDelay)?Math.max(0,L.value.visibleReadDelay):et.visibleReadDelay;A=setTimeout(()=>{if(A=void 0,!K.value||!ie.value)return;let c=h[h.length-1];if(c===void 0)return;let R=r.resolveTarget===void 0?c:r.resolveTarget(c);R!=null&&Promise.resolve(r.markRead(R)).catch(M=>{t.hooks?.onError?.({kind:"visible-range",messageIds:h},M);});},l);}function Re(r){h=Object.freeze([...r]);let l={kind:"visible-range",messageIds:h};t.hooks?.beforeAction?.(l);try{u.actions.onVisibleRange?.(h),t.hooks?.afterAction?.(l,void 0);}catch(c){throw t.hooks?.onError?.(l,c),c}S.value?be():Ie();}function re(r,l){return !G&&m===l&&B.value===r&&!P}function qe(r,l){re(r,l)&&(w=r,_=se(s.value.entryUnread),S.value=true,be());}function se(r){return r.state!=="located"?r.state:`${r.state}:${r.firstMessageId}`}async function Ce(r,l,c){for(let R=0;R<60;R+=1){if(!re(r,l))return false;if(f.value?.scrollToMessage(c,{behavior:"auto",block:"center"})===true)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(O=>window.requestAnimationFrame(()=>O()));}return false}function Ie(){let r=B.value,l=se(s.value.entryUnread);if(r===""||s.value.loading||s.value.error!==null&&s.value.messages.length===0||w===r&&(_===l||_.startsWith("located:")||P)||x===r||d!==null)return;if(!Z.value.enabled){w=r,_=l,S.value=true,be();return}let c=++m;P=false,S.value=false;let R=(async()=>{if(await nextTick(),!re(r,c))return;let M=f.value;if(M===null||!M.isMeasurable())return;let O=s.value.entryUnread;if(O.state==="located"&&!te.value.includes(O.firstMessageId))return;let q=O.state==="located"?await Ce(r,c,O.firstMessageId):false;if(O.state==="located"&&!q)return;q||M.scrollToLatest();let ue=0;for(;re(r,c)&&ue<Z.value.maxFillPages&&s.value.error===null&&(s.value.hasOlder||s.value.hasNewer&&u.actions.loadNewer!==void 0)&&M.isMeasurable()&&!M.isScrollable();){if(s.value.hasNewer&&u.actions.loadNewer!==void 0&&(s.value.messages.length===0||!s.value.hasOlder)){let me=i$1;M.prepareHistoryPageAppend();try{await W(),await nextTick();}finally{B.value===r&&i$1===me&&(m===c||P)&&M.cancelHistoryPageAppend();}}else await k();if(!re(r,c)||(ue+=1,await nextTick(),await nextTick(),!M.isMeasurable()))return}if(!re(r,c)||!M.isMeasurable())return;let de=s.value.entryUnread;if(de.state==="located"){if(!te.value.includes(de.firstMessageId)||!await Ce(r,c,de.firstMessageId))return}else M.scrollToLatest();await nextTick(),qe(r,c);})().catch(()=>{re(r,c)&&(x=r);}).finally(()=>{d===R&&(d=null);});d=R;}function fe(r,l=false){m+=1,d=null,P=false,S.value=r,r||(w="",_="",l||(x="")),Se();}function Ne(){if(P=true,S.value)return;let r=B.value;m+=1,d=null,w=r,S.value=true,be();}let Ve=Object.freeze({getViewportElement:()=>f.value?.getViewportElement()??null,loadOlder:k,retryOlder:T,loadNewer:W,retryNewer:p,jumpToLatest:H,scrollToMessage:J,locateMessage:Ke,focusViewport:()=>f.value?.focusViewport()});return o(Ve),watch(ie,r=>{r&&S.value?be():Se();}),watch([()=>s.value.activeRemoteMessageRevision??0,f,B],()=>{let r=f.value;if(r===null||!K.value)return;let l=u.actions.drainActiveRemoteMessageIds?.()??[];r.trackRemoteMessageIds(l,{isAtBottom:U.value,isHistoryWindow:s.value.isHistoryWindow,isPageVisible:z.value})&&(U.value=false);},{flush:"post"}),watch([B,()=>s.value.loading,()=>s.value.error,()=>te.value.length,()=>s.value.hasOlder,()=>se(s.value.entryUnread),Z,()=>s.value.hasNewer],([r,l,c,R,,M],[O,,,q,,ue])=>{if(r!==O&&(i$1+=1,fe(false),F(true),f.value?.clearNewMessageBadge(),C.value=0,U.value=true),r!==""&&r===O&&q!==void 0&&q>0&&R===0&&(s.value.hasOlder||s.value.hasNewer)&&S.value&&fe(false,true),r!==""&&r===O&&M!==ue&&!_.startsWith("located:")&&!P&&M.startsWith("located:")&&(w="",_="",S.value=false),r===""){fe(false);return}if(c!==null&&s.value.messages.length===0){S.value||fe(false,true);return}l||Ie();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{G=true,i$1+=1,fe(false),F(true);}),()=>{let r={conversation:t.conversation,state:s.value,items:ee.value,actions:Ve,initialViewportSettled:B.value!==""&&(s.value.messages.length===0?!s.value.loading&&s.value.error===null&&!s.value.hasOlder&&!s.value.hasNewer:S.value&&w===B.value)},l=[g.header?.(r),g["before-list"]?.(r)];if(!K.value)l.push(g.unsupported?.(r)??h$1("div",{"data-im-thread-unsupported":""}));else if(!s.value.ready&&s.value.loading)l.push(g.loading?.(r)??h$1("div",{"data-im-thread-loading":""}));else if(s.value.error!==null&&s.value.messages.length===0)l.push(g.error?.(r)??h$1("div",{"data-im-thread-error":""}));else if(s.value.ready&&s.value.messages.length===0&&!s.value.hasOlder&&!s.value.hasNewer)l.push(g.empty?.(r)??h$1("div",{"data-im-thread-empty":""}));else {let c=h$1(Je,{ref:f,messageIds:te.value,contentKey:`${t.conversation.conversationType}\0${t.conversation.conversationId}`,loadingOlder:s.value.loadingOlder??s.value.loading,hasNewer:s.value.hasNewer,loadingNewer:s.value.loadingNewer??s.value.loading,followThreshold:L.value.followThreshold,olderPrefetchThreshold:L.value.olderPrefetchThreshold,visibleMargin:L.value.visibleMargin,activeDateOffset:L.value.activeDateOffset,activeDateEnabled:g["active-date"]!==void 0,resizeFollowEnabled:S.value,followNewMessages:z.value,shouldFollowAppendedMessage:R=>{let M=s.value.messages.find(O=>O.id===R);return M===void 0?false:u.shouldFollowMessage?.(M)===true},onReachStart:()=>{oe("older").catch(()=>{});},onReachEnd:()=>{oe("newer").catch(()=>{});},onSettled:b,onUserScroll:Ne,onActiveDateChange:ae,onVisibleRange:Re,onNewMessageCount:R=>{C.value=R;}},{default:()=>[g["viewport-before"]?.(r),h$1($e,{items:ee.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:g.item,"date-separator":g["date-separator"],"entry-unread":g["entry-unread"],encryption:g.encryption,system:g.system,message:g.message,"recalled-message":g["recalled-message"],"deleted-message":g["deleted-message"],"unsupported-body":g["unsupported-body"]}),g["viewport-after"]?.(r)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[g["active-date"]?.({label:Y.value,visible:$.value&&Y.value!==""}),c])),s.value.error!==null&&l.push(g.error?.(r)??h$1("div",{"data-im-thread-error":""}));}return l.push(g["after-list"]?.(r),g["jump-to-latest"]?.({...r,count:C.value,visible:!U.value||s.value.isHistoryWindow}),g["context-menu"]?.(r),g.composer?.(r)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},l)}}});function br(t){let o=new Map;for(let u of t){if(o.has(u.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${u.kind}`);o.set(u.kind,u.component);}let g=Object.freeze([...o.keys()]);return Object.freeze({kinds:g,resolve:u=>o.get(u)})}var wr=140,Mr=120;function Ue(t,o){if(t.width<=0||t.height<=0)return 0;let g=Math.max(0,Math.min(t.right,o.right)-Math.max(t.left,o.left)),u=Math.max(0,Math.min(t.bottom,o.bottom)-Math.max(t.top,o.top));return Math.min(1,g*u/(t.width*t.height))}function rt(t,o){return {x:t.x,y:t.top-o,top:t.top-o,bottom:t.bottom+o,left:t.left,right:t.right,width:t.width,height:t.height+o*2,toJSON:()=>({})}}function nt(t){let o=Math.max(0,t.scrollIdleMs??wr),g=Math.max(0,t.visibilityDwellMs??Mr),u=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),f=Math.max(0,t.revealMarginPx??0),C=Math.max(0,t.preloadMarginPx??0),U=Math.max(f,C),h=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),A=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),m=new Map,i=new Map,d=reactive(new Set),w=new Set,_=new Set,x=[],P=null,G=null,S=null,Y=false,$=false,N=false,ne=false,s,z;function ie(){s!==void 0&&clearTimeout(s),s=void 0;}function K(){z!==void 0&&clearTimeout(z),z=void 0;}function L(p=false){if(!p&&G!==null||P===null)return;let T=P.getBoundingClientRect(),v=rt(T,U);for(let[H,b]of m){let J=H.getBoundingClientRect();b.ratio=Ue(J,T),b.intersecting=b.ratio>0,b.revealIntersecting=U>0?Ue(J,v)>0:b.intersecting&&b.ratio>=u;}}function Z(p){return p.intersecting&&p.ratio>=u}function B(){for(let[p,T]of m)!T.revealIntersecting||d.has(T.key)||U>f&&(f===0&&!Z(T)||f>0&&(P===null||Ue(p.getBoundingClientRect(),rt(P.getBoundingClientRect(),f))<=0))||(d.add(T.key),t.onRevealed?.(T.item));}function ee(p,T=false){let v=new Set(p.map(b=>b.key));if(!(!(v.size!==_.size||[...v].some(b=>!_.has(b)))&&!T)){_.clear();for(let b of v)_.add(b);t.onSettledVisibleChange?.(p.map(b=>b.item));}}function te(p,T=false){!T&&p.length===x.length&&p.every((v,H)=>v.key===x[H]?.key&&v.item===x[H]?.item)||(x=p,t.onSettledPreloadChange?.(p.map(v=>v.item)));}function he(){if(N||Y)return;let p=$;$=false,L(),B();let T=P?.getBoundingClientRect(),v=T===void 0?0:(T.top+T.bottom)/2,H=[...m.entries()].filter(([,b])=>Z(b)).sort(([b],[J])=>{let E=b.getBoundingClientRect(),j=J.getBoundingClientRect();return Math.abs((E.top+E.bottom)/2-v)-Math.abs((j.top+j.bottom)/2-v)}).slice(0,A).map(([,b])=>b);if(ee(H,p),t.onSettledPreloadChange!==void 0&&T!==void 0){let b=rt(T,C),J=[...m.entries()].filter(([,E])=>E.revealIntersecting).map(([E,j])=>({target:j,rect:E.getBoundingClientRect()})).filter(({target:E,rect:j})=>Z(E)||C>0&&Ue(j,b)>0).sort((E,j)=>Number(Z(j.target))-Number(Z(E.target))||Math.abs((E.rect.top+E.rect.bottom)/2-v)-Math.abs((j.rect.top+j.rect.bottom)/2-v)).slice(0,h).map(({target:E})=>E);te(J,p);}for(let b of H)w.has(b.key)||(w.add(b.key),t.onActivated?.(b.item));}function F(){N||Y||(K(),z=setTimeout(()=>{z=void 0,he();},g));}function ae(){N||($=true,X(true),te([]),L(),B(),ee([]),K(),ie(),s=setTimeout(()=>{s=void 0,X(false),F();},o));}function X(p){Y!==p&&(Y=p,t.onScrollingChange?.(p));}function k(){P?.removeEventListener("scroll",ae),G?.disconnect(),S?.disconnect(),G=null,S=null,P=null;}function W(p=true){if(N)return;let T=t.getRoot();if(!(T===P&&P!==null)){if(te([]),k(),P=T,P===null){p&&!ne&&(ne=true,Promise.resolve().then(()=>{ne=false,N||(W(false),F());}));return}if(P.addEventListener("scroll",ae,{passive:true}),typeof IntersectionObserver<"u"){G=new IntersectionObserver(v=>{for(let H of v){let b=m.get(H.target);b!==void 0&&(b.intersecting=H.isIntersecting,b.ratio=H.intersectionRatio,U===0&&(b.revealIntersecting=H.isIntersecting&&H.intersectionRatio>=u));}B(),F();},{root:P,threshold:[0,u,1]}),U>0&&(S=new IntersectionObserver(v=>{for(let H of v){let b=m.get(H.target);b!==void 0&&(b.revealIntersecting=H.isIntersecting);}B(),F();},{root:P,rootMargin:`${U}px 0px`,threshold:0}));for(let v of m.keys())G.observe(v);for(let v of m.keys())S?.observe(v);}else L(),B();}}function oe(p){te(x.filter(T=>T.key!==p)),d.delete(p),w.delete(p),_.delete(p);}return {register(p,T){if(N)return;let v=t.getKey(p),H=d.has(v),b=w.has(v),J=T===null?void 0:m.get(T);J!==void 0&&J.key!==v&&(i.delete(J.key),m.delete(T),oe(J.key));let E=i.get(v);if(E!==void 0&&E!==T&&(G?.unobserve(E),S?.unobserve(E),m.delete(E),i.delete(v)),T===null){E!==void 0&&(G?.unobserve(E),S?.unobserve(E),m.delete(E),i.delete(v)),oe(v);return}let j=m.get(T);if(j?.key===v&&j.item===p){W();return}m.set(T,{item:p,key:v,intersecting:j?.key===v?j.intersecting:false,ratio:j?.key===v?j.ratio:0,revealIntersecting:j?.key===v?j.revealIntersecting:false}),i.set(v,T),W(),G?.observe(T),S?.observe(T),L(true),B(),H&&t.onRevealed?.(p),b&&t.onActivated?.(p),F();},isRevealed:p=>d.has(t.getKey(p)),isActivated:p=>w.has(t.getKey(p)),isSettledVisible:p=>_.has(t.getKey(p)),isScrolling:()=>Y,notifyScroll:ae,refresh(){W(),L(true),B(),F();},reset(){ie(),K(),X(false),$=false,ee([]),te([]),k(),m.clear(),i.clear(),d.clear(),w.clear();},dispose(){N||(ie(),K(),X(false),$=false,ee([]),te([]),k(),m.clear(),i.clear(),d.clear(),w.clear(),N=true);}}}function Sr(t){let o=new Map,g=new Map,u=false,f=h=>{let A=o.get(h.channel);return A===void 0?h.channel:`${h.channel}\0${A.getKey(h.item)}`},C=nt({getRoot:t.getRoot,getKey:f,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:h=>{for(let A of o.values())A.onScrollingChange?.(h);},onRevealed:h=>o.get(h.channel)?.onRevealed?.(h.item),onActivated:h=>o.get(h.channel)?.onActivated?.(h.item),onSettledPreloadChange:h=>{for(let[A,m]of o){let i=h.filter(d=>d.channel===A).map(d=>d.item);m.onSettledPreloadChange?.(i.slice(0,Math.max(0,m.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:h=>{for(let[A,m]of o){let i=h.filter(w=>w.channel===A).map(w=>w.item),d=m.maxSettledVisible===void 0?i:i.slice(0,m.maxSettledVisible);m.onSettledVisibleChange?.(d);}}});function U(h){return A=>{if(u)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(o.has(h))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${h}`);o.set(h,A);let m=new Map;g.set(h,m);let i=false,d=x=>({channel:h,item:x});function w(){for(let x of m.values())C.register(x.target,null);m.clear(),A.onScrollingChange?.(false),A.onSettledVisibleChange?.([]),A.onSettledPreloadChange?.([]);}return {register(x,P){if(i||u)return;let G=A.getKey(x),S=m.get(G);if(P===null){S!==void 0&&(C.register(S.target,null),m.delete(G));return}let Y=S?.target.item===x?S.target:d(x);m.set(G,{target:Y,element:P}),C.register(Y,P);},isRevealed:x=>C.isRevealed(d(x)),isActivated:x=>C.isActivated(d(x)),isSettledVisible:x=>C.isSettledVisible(d(x)),isScrolling:C.isScrolling,notifyScroll:C.notifyScroll,refresh:C.refresh,reset:w,dispose(){i||(w(),i=true,o.delete(h),g.delete(h));}}}}return {createFactory:U,refresh:C.refresh,dispose(){if(!u){for(let h of g.values())for(let A of h.values())C.register(A.target,null);for(let h of o.values())h.onSettledPreloadChange?.([]);g.clear(),o.clear(),C.dispose(),u=true;}}}}export{ze as ImThreadBodySwitch,$e as ImThreadItems,yr as ImThreadSurface,Je as ImThreadViewport,fr as createImThreadSurfaceContext,br as createMessageRendererRegistry,Sr as createThreadVisibilityTargetGroup,nt as createThreadVisibilityTargets,mr as provideImThreadSurfaceContext,zt as useImText,Qe as useImThreadSurfaceContext,Xt as useOptionalImThreadReadActions};
1
+ import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-HWA7NOXG.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-GHFHAGJ7.js';import'./chunk-LMP34HNC.js';import'./chunk-ZERTVCH2.js';import'./chunk-4I23ADH2.js';import'./chunk-WOT6VMZA.js';import {defineComponent,h as h$1,ref,provide,watch,nextTick,onMounted,onBeforeUnmount,computed,inject,isVNode,cloneVNode,Fragment,reactive}from'vue';function $t(t){let a=0,y=0;for(let c of t)c.kind==="video"?y+=1:a+=1;return {imageCount:a,videoCount:y}}function Xt(t){return {systemMessage:a=>a.body.system!==void 0?g$1(a.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:a=>i$1(a.contentType,{locale:t.locale(),durationMs:a.body.voice?.durationMs,stickerImageType:a.body.sticker?.imageType,gameType:a.body.game?.gameType,callKind:a.body.call?.callKind,...a.body.filesAlbum===void 0?{}:{filesAlbum:{count:a.body.filesAlbum.items.length,caption:a.body.filesAlbum.caption}},...a.body.mediaAlbum===void 0?{}:{mediaAlbum:$t(a.body.mediaAlbum.items)}}),lastMessage:a=>a.lastMessageSummary!==void 0?h$2(a.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):a.lastMessagePreview,failureText:a=>a.failure?.displayCode!==void 0?f(a.failure.displayCode,{locale:t.locale(),mediaKind:a.failure.mediaKind,params:a.failure.params}):a.failure?.message??""}}var Ct=Symbol("ImThreadReadActions");function Nt(t){provide(Ct,t);}function Zt(){return inject(Ct,void 0)}var rt=defineComponent({name:"ImThreadBodySwitch",inheritAttrs:false,props:{message:{type:Object,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{attrs:a,slots:y}){return Nt(t.readActions),()=>{let c=h(t.message),m=t.rendererRegistry.resolve(c);return m!==void 0?h$1(m,{...a,message:t.message,presentation:t.presentation}):y["unsupported-body"]!==void 0?y["unsupported-body"]({kind:c,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":c,"aria-hidden":"true"})}}});var ot=Symbol("ImThreadViewportRegistration");function Ht(){return inject(ot,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:a}){let y=Ht();function c(o,h){let C=Array.isArray(h)?h:[h];return C.length===1&&isVNode(C[0])?cloneVNode(C[0],{key:o}):h$1(Fragment,{key:o},C)}function m(o){return h=>{y?.registerMessageNode(o,h instanceof HTMLElement?h:null);}}function N(o,h){return C=>{y?.registerDateNode(o,h,C instanceof HTMLElement?C:null);}}function U(o){return a.encryption?.({item:o})??h$1("div",{"data-im-thread-encryption":o.key})}function T(o){let h=N(o.key,o.label);return a["date-separator"]?.({item:o,setElement:h})??h$1("div",{ref:h,"data-im-thread-date-separator":o.key},o.label)}function V(o){y?.registerEntryUnreadNode(o instanceof HTMLElement?o:null);}function w(o){return a["entry-unread"]?.({item:o,setElement:V})??h$1("div",{ref:V,"data-im-thread-entry-unread":o.key,...o.count===void 0?{}:{"data-count":String(o.count)}})}function k(o){let h=m(o.message.id);return a.item!==void 0?a.item({item:o,setElement:h}):a.message!==void 0?a.message({item:o,setElement:h}):o.message.deletedForEveryone!==void 0?a["deleted-message"]?.({item:o,setElement:h})??h$1("article",{ref:h,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.message.recalled!==void 0?a["recalled-message"]?.({item:o,setElement:h})??h$1("article",{ref:h,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.kind==="system"&&a.system!==void 0?a.system({item:o,setElement:h}):h$1("article",{ref:h,"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(rt,{message:o.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":a["unsupported-body"]===void 0?void 0:C=>a["unsupported-body"]?.(C)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(o=>{switch(o.kind){case "encryption":return a.item!==void 0?c(o.key,a.item({item:o})):c(o.key,U(o));case "date-separator":return a.item!==void 0?c(o.key,a.item({item:o,setElement:N(o.key,o.label)})):c(o.key,T(o));case "entry-unread":return a.item!==void 0?c(o.key,a.item({item:o,setElement:V})):c(o.key,w(o));case "system":case "message":return c(o.key,k(o))}return o}))}});var Ft=120,fn=500,Le=.5,mn=8;function at(t){let a=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(a!==void 0&&Number.isFinite(a)&&a>0?a:1)}var st=defineComponent({name:"ImThreadViewport",props:{messageIds:{type:Array,required:true},contentKey:{type:String,default:""},loadingOlder:{type:Boolean,default:false},hasNewer:{type:Boolean,default:false},loadingNewer:{type:Boolean,default:false},followThreshold:{type:Number,default:120},olderPrefetchThreshold:{type:Number,default:120},followNewMessages:{type:Boolean,default:true},shouldFollowAppendedMessage:{type:Function,default:void 0},visibleMargin:{type:Number,default:8},resizeFollowEnabled:{type:Boolean,default:true},activeDateOffset:{type:Number,default:16},activeDateEnabled:{type:Boolean,default:false}},emits:{"reach-start":()=>true,"reach-end":()=>true,"visible-range":t=>true,settled:t=>true,"new-message-count":t=>true,"user-scroll":()=>true,"active-date-change":t=>true},setup(t,{emit:a,expose:y,slots:c}){let m$1=ref(null),N=ref(null),U=new Map,T,V=new Map,w=new Set,k=new Map,o$1=0,h=[],C$1,S,E,_,G=false,L,J=new Set,K=false,D,re="",Z=1,Y=false,H=false,ee=true,q$1=false,Q=false,oe=false,i=0,he=-1,ie=-1,A,z$1,te,M,ne,f=ref(true),P=ref(0),p$1=C(e=>{P.value=e,a("new-message-count",e);});function j$1(e){let r=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=r}function v(e=t.messageIds){return e.flatMap(r=>{let s=U.get(r);if(s===void 0)return [];let g=s.getBoundingClientRect(),R=s.querySelector("[data-im-thread-anchor-point]");return [{id:r,top:g.top,bottom:g.bottom,anchorTop:R?.getBoundingClientRect().top??g.top}]})}function $(e="",r=1){let s=Math.min(1,Math.max(0,r));re!==""&&re!==e&&k.get(re)?.element.style.removeProperty("opacity"),re=e,Z=s,e!==""&&k.get(e)?.element.style.setProperty("opacity",String(s));}function x(){$();}function W(){let e=m$1.value;if(K||e===null||!t.activeDateEnabled)return;let r=[...k.entries()].filter(([,B])=>e.contains(B.element)).map(([B,O])=>{let de=O.element.getBoundingClientRect();return {key:B,label:O.label,top:de.top,height:de.height}}).sort((B,O)=>B.top-O.top),s=e.getBoundingClientRect(),g$1=r.find(B=>B.height>0)?.height??28,R=g({markers:r,viewportTop:s.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:g$1});if(R===null){x(),a("active-date-change",null);return}$(R.inlineDateKey,R.inlineOpacity),a("active-date-change",R);}function De(e){S={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Fe(e){let r=S;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)<=at(e)}function Xe(e){return Fe(e)||D!==void 0&&(D.behavior==="smooth"||Math.abs(e.scrollTop-D.targetTop)<=at(e))?0:e.scrollTop-o$1}function Be(e,r){r!==0&&(o$1=e.scrollTop-r,D=void 0,_e());}function Je(e,r){let s=Xe(e);if(M!==void 0)return M.expectedOffset-=s,je(),Be(e,s),q$1||Ne(),false;let g=S;if(g===void 0)return false;let R=C$1,B=R===void 0?void 0:v([R.id])[0],O=e.scrollTop-g.scrollTop,de=Fe(e)?0:O,Ie=R===void 0||B===void 0?0:(B.anchorTop??B.top)-r.top-R.offset+O;return g.scrollHeight!==e.scrollHeight||g.width!==e.clientWidth||g.height!==e.clientHeight||Math.abs(Ie)>Le?(S=void 0,!Y&&!t.loadingNewer&&t.resizeFollowEnabled&&f.value&&Math.abs(de)<=Le?(Ge(),true):(R!==void 0&&ge({...R,offset:R.offset-de}),Be(e,s),false)):false}function pe(){let e=m$1.value;if(K||e===null)return;let r=e.getBoundingClientRect();if(Je(e,r))return;let s=_!==void 0&&G?t.messageIds.filter(O=>w.has(O)):t.messageIds,g=v(s);if(_!==void 0&&G&&g.length===0){f.value=j$1(e);return}let R=g.filter(O=>B({viewportTop:r.top,viewportBottom:r.bottom,messageTop:O.top,messageBottom:O.bottom,margin:t.visibleMargin})).map(O=>O.id),B$1=R.length!==h.length||R.some((O,de)=>h[de]!==O);h=Object.freeze(R),C$1=o(g,{top:r.top,bottom:r.bottom}),De(e),p$1.acknowledgeVisible(R),f.value=j$1(e),B$1&&a("visible-range",h),a("settled",{visibleMessageIds:h,...h.length===0?{}:{newestVisibleMessageId:h[h.length-1]},isAtBottom:f.value,newMessageCount:P.value});}function fe(e){if(J.add(e),L!==void 0)return;let r=()=>{L=void 0;let s=[...J];J.clear(),s.forEach(g=>g());};typeof globalThis.requestAnimationFrame=="function"?L=globalThis.requestAnimationFrame(r):L=globalThis.setTimeout(r,0);}function Qe(){L!==void 0&&(typeof L=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(L):globalThis.clearTimeout(L),L=void 0,J.clear());}function me(){fe(pe);}function Ze(){let e=m$1.value;if(e===null)return;let r=e.getBoundingClientRect(),s=o(v(),{top:r.top,bottom:r.bottom});s!==void 0&&(C$1=s,De(e));}function Ke(){return ee&&M===void 0&&!H&&!t.loadingOlder}function Ue(){Ze(),ee=false,he=i,H=true,a("reach-start"),fe(()=>{t.loadingOlder||(H=false);});}function X(e){return t.hasNewer&&!Y&&!t.loadingOlder&&!t.loadingNewer&&j$1(e)}function Ve(){Y=true,f.value=false,ie=i,a("reach-end"),fe(()=>{t.loadingNewer||(Y=false);});}function Ce(){let e=m$1.value;e===null||i===ie||!X(e)||Ve();}function _e(){let e=m$1.value;if(K||e===null)return;let r=e.scrollTop,s=Fe(e),g=D,R=false;if(g!==void 0){let O=Math.abs(r-g.targetTop)<=at(e);R=g.behavior==="smooth"||O,(g.behavior!=="smooth"||O)&&(D=void 0);}!R&&!s&&!q$1&&M===void 0&&r!==o$1&&(q$1=true,Q=true,i+=1);let B=q$1&&!R&&!s&&r!==o$1;if(B&&(a("user-scroll"),fe(W)),q$1&&!oe&&u(),!ee&&Q&&i!==he&&r<o$1&&r>qe()&&(ee=true),M!==void 0&&!R)if(q$1){let O=ae();O!==void 0&&(M.expectedOffset=O);}else je(),Ne();Ke()&&B&&r>=0&&m({previousScrollTop:o$1,currentScrollTop:r,topThreshold:t.olderPrefetchThreshold})&&Ue(),B&&X(e)&&z({previousScrollTop:o$1,currentScrollTop:r,isAtBottom:j$1(e),isHistoryWindow:t.hasNewer,isPageSettling:R})&&Ve(),o$1=r,me();}function Pe(e,r="auto"){D={targetTop:e,behavior:r};}function Se(e){let r=M,s=N.value;if(!(r===void 0||s===null)){if(r.visualOffset=Math.abs(e)<=Le?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(){ne!==void 0&&(clearTimeout(ne),ne=void 0),M!==void 0&&M.visualOffset!==0&&(C$1=void 0,S=void 0);let e=N.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),M=void 0,D=void 0;}function ae(){let e=m$1.value,r=M;if(e===null||r===void 0)return;let s=v().find(g=>g.id===r.anchor.id);if(s!==void 0)return (s.anchorTop??s.top)-e.getBoundingClientRect().top}function je(){let e=M,r=ae();if(e===void 0||r===void 0)return;let s=e.expectedOffset-r;Math.abs(s)<=Le||(Se(e.visualOffset+s),e.committed=false,e.attempts=0);}function Te(){ne!==void 0&&clearTimeout(ne),ne=setTimeout(()=>{ne=void 0,!(q$1||M?.committed!==true)&&ye();},fn);}function Ee(){let e=m$1.value,r=M;if(K||e===null||r===void 0||q$1)return;let s=r.visualOffset;if(Math.abs(s)<=Le){r.committed=true,Te();return}let g=Math.max(0,e.scrollHeight-e.clientHeight),R=Math.min(g,Math.max(0,e.scrollTop-s));if(Pe(R),e.scrollTop=R,Math.abs(e.scrollTop-R)>Le){D=void 0,r.committed=false,r.attempts+=1,r.attempts<mn?Ne():(ye(),D=void 0,o$1=e.scrollTop);return}Se(0),o$1=e.scrollTop,r.expectedOffset=ae()??r.expectedOffset,r.committed=true,r.attempts=0,Te();}function Ne(){ne!==void 0&&clearTimeout(ne),ne=setTimeout(()=>{ne=void 0,Ee();},Ft);}function ke(e){e!==void 0&&(M===void 0&&(M={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),je(),!q$1&&Ee());}function ge(e){let r=m$1.value;if(r===null||e===void 0)return;let s=r.getBoundingClientRect(),g=q(e,v(),{top:s.top,bottom:s.bottom});if(g!==void 0){let R=Math.max(0,r.scrollHeight-r.clientHeight),B=Math.min(R,Math.max(0,r.scrollTop+g));Pe(B),r.scrollTop=B,o$1=r.scrollTop,S=void 0;}}function qe(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function Oe(){D?.behavior==="smooth"&&(D=void 0),Q=false,q$1||(q$1=true,i+=1),A!==void 0&&(clearTimeout(A),A=void 0);}function n(){let e=m$1.value;e===null||i===he||(M!==void 0&&ye(),ee=true,e.scrollTop<=qe()&&Ke()&&Ue());}function l(){C$1=void 0,S=void 0,A!==void 0&&(clearTimeout(A),A=void 0),ye(),q$1=false,Q=false,oe=false,z$1=void 0,te=void 0,i+=1,he=-1,ie=-1,ee=true,H=false,Y=false,D=void 0;}function d(){oe||(A!==void 0&&(clearTimeout(A),A=void 0),q$1=false,Q=false,M!==void 0&&(M.attempts=0),Ee());}function u(){oe||(A!==void 0&&clearTimeout(A),A=setTimeout(()=>{A=void 0,d();},Ft));}function b(){D=void 0,d();}function I(e){oe=true,Oe(),z$1=e.touches?.[0]?.clientY;}function F(e){let r=e.touches?.[0]?.clientY;r!==void 0&&(z$1!==void 0&&r>z$1?n():z$1!==void 0&&r<z$1&&Ce(),z$1=r);}function le(){oe=false,z$1=void 0,u();}function ve(e){Oe(),e.deltaY<0?n():e.deltaY>0&&Ce(),u();}function Ae(e){e.pointerType!=="touch"&&(Oe(),te=e.clientY,u());}function be(e){e.pointerType==="touch"||!q$1||te===void 0||(e.clientY<te?n():e.clientY>te&&Ce(),te=e.clientY,u());}function we(e){e.pointerType!=="touch"&&(te=void 0,u());}function We(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(Oe(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?n():Ce(),u());}function Ge(e="auto"){let r=m$1.value;if(r===null)return;S=void 0,ye();let s=Math.max(0,r.scrollHeight-r.clientHeight);Pe(s,e),r.scrollTo?.({top:s,behavior:e}),r.scrollTop!==s&&(r.scrollTop=s),o$1=r.scrollTop,p$1.clear(),pe();}function gt(){let e=m$1.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function Ut(){let e=m$1.value;return gt()&&e!==null&&e.scrollHeight>e.clientHeight+1}function _t(e,r={}){return vt(U.get(e),r)}function vt(e,r){let s=m$1.value;if(s===null||e===void 0||!s.contains(e)||s.clientHeight<=0)return false;ye();let g=s.getBoundingClientRect(),R=e.getBoundingClientRect(),B=r.block??"center",O;B==="start"?O=s.scrollTop+R.top-g.top:B==="end"?O=s.scrollTop+R.bottom-g.bottom:B==="nearest"?R.top>=g.top&&R.bottom<=g.bottom?O=s.scrollTop:R.top<g.top?O=s.scrollTop+R.top-g.top:O=s.scrollTop+R.bottom-g.bottom:O=j({currentScrollTop:s.scrollTop,scrollHeight:s.scrollHeight,targetHeight:R.height,targetTop:R.top,viewportHeight:s.clientHeight,viewportTop:g.top});let de=Math.max(0,s.scrollHeight-s.clientHeight),Ie=Math.min(de,Math.max(0,O));S=void 0;let He=r.behavior??"auto";return Pe(Ie,He),s.scrollTo?.({top:Ie,behavior:He}),s.scrollTop!==Ie&&(s.scrollTop=Ie),o$1=s.scrollTop,pe(),true}function jt(){let e=m$1.value;if(e===null||T===void 0||!e.contains(T)||e.clientHeight<=0)return null;let r=T.getBoundingClientRect(),s=e.scrollTop+r.top-e.getBoundingClientRect().top+r.height/2,g=e.clientHeight/2;return {older:s<g-1,newer:e.scrollHeight-s<g-1}}function Kt(){p$1.clear();}function qt(){Y=true,f.value=false;}function Wt(){Y=false,me();}function Gt(e,r){let s=U.get(e);if(s!==void 0&&s!==r&&(_?.unobserve(s),E?.unobserve?.(s),V.delete(s),w.delete(e)),r===null){U.delete(e),w.delete(e);return}U.set(e,r),V.set(r,e),_?.observe(r),E?.observe(r),me();}function zt(e,r,s){let g=k.get(e);if(s===null){k.delete(e);return}k.set(e,{element:s,label:r}),re===e&&s.style.setProperty("opacity",String(Z)),g?.element!==s&&(s.dataset.imThreadDateSeparator=e);}return provide(ot,{registerMessageNode:Gt,registerDateNode:zt,registerEntryUnreadNode:e=>{T=e??void 0;}}),watch(()=>t.contentKey,(e,r)=>{if(e===r)return;l();let s=m$1.value;s!==null&&(o$1=s.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,r)=>{let s=m$1.value;if(s===null)return;let g=new Set(r);r.length>0&&e.length>0&&!e.some(xe=>g.has(xe))&&l();let B=s.getBoundingClientRect(),O=p(C$1,v(),{top:B.top,bottom:B.bottom}),de=f.value,Ie=r[r.length-1],He=Ie===void 0?-1:e.indexOf(Ie),et=He<0?[]:e.slice(He+1).filter(xe=>!g.has(xe)),ht=Y||t.loadingNewer,Yt=e.length===r.length&&e.every(xe=>g.has(xe))&&e.some((xe,tt)=>xe!==r[tt]);if(await nextTick(),K)return;if(Yt&&de&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!ht){Ge();return}let pt=r[0];if(pt!==void 0&&e.indexOf(pt)>0&&(H=false,ke(O)),et.length>0){if(ht){Y=false,M===void 0&&ge(O),f.value=false,me();return}(de||et.some(tt=>t.shouldFollowAppendedMessage?.(tt)===true))&&t.followNewMessages?Ge():p$1.add(et);}me();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,r)=>{e||!r||!Y||fe(()=>{t.loadingNewer||(Y=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,r)=>{e||!r||!H||fe(()=>{t.loadingOlder||(H=false);});},{flush:"pre"}),onMounted(()=>{let e=m$1.value;if(e!==null){if(o$1=e.scrollTop,e.addEventListener("scroll",_e,{passive:true}),e.addEventListener("scrollend",b,{passive:true}),e.addEventListener("touchstart",I,{passive:true}),e.addEventListener("touchmove",F,{passive:true}),e.addEventListener("touchend",le,{passive:true}),e.addEventListener("touchcancel",le,{passive:true}),e.addEventListener("wheel",ve,{passive:true}),e.addEventListener("pointerdown",Ae,{passive:true}),e.addEventListener("pointermove",be,{passive:true}),e.addEventListener("pointerup",we,{passive:true}),e.addEventListener("pointercancel",we,{passive:true}),e.addEventListener("keydown",We),typeof globalThis.ResizeObserver=="function"){E=new globalThis.ResizeObserver(()=>{K||m$1.value===null||pe();}),E.observe(e),N.value!==null&&E.observe(N.value);for(let r of U.values())E.observe(r);}if(typeof globalThis.IntersectionObserver=="function"){_=new globalThis.IntersectionObserver(r=>{for(let s of r){let g=V.get(s.target);g!==void 0&&(s.isIntersecting?w.add(g):w.delete(g));}G=true,me();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let r of U.values())_.observe(r);}me();}}),onBeforeUnmount(()=>{K=true;let e=m$1.value;e!==null&&e.removeEventListener("scroll",_e),e!==null&&(e.removeEventListener("scrollend",b),e.removeEventListener("touchstart",I),e.removeEventListener("touchmove",F),e.removeEventListener("touchend",le),e.removeEventListener("touchcancel",le),e.removeEventListener("wheel",ve),e.removeEventListener("pointerdown",Ae),e.removeEventListener("pointermove",be),e.removeEventListener("pointerup",we),e.removeEventListener("pointercancel",we),e.removeEventListener("keydown",We)),A!==void 0&&clearTimeout(A),ye(),Qe(),E?.disconnect(),_?.disconnect(),x(),T=void 0,U.clear(),V.clear(),w.clear(),k.clear(),p$1.clear();}),y({getViewportElement:()=>m$1.value,clearNewMessageBadge:Kt,clearActiveDate:x,isAtBottom:computed(()=>f.value),isMeasurable:gt,isScrollable:Ut,newMessageCount:computed(()=>P.value),prepareHistoryPageAppend:qt,cancelHistoryPageAppend:Wt,trackRemoteMessageIds:(e,r)=>p$1.trackRemote(e,r),scrollToLatest:Ge,scrollToMessage:_t,scrollToEntryUnread:()=>vt(T,{block:"center",behavior:"auto"}),getEntryUnreadCenteringNeeds:jt,focusViewport:()=>m$1.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:m$1,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:N,"data-im-thread-viewport-content":""},c.default?.())])}});var Bt=Symbol("ImThreadSurfaceContext");function hn(t){if(typeof t.getState!="function")throw new TypeError("ImThreadSurfaceContext.getState \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.actions?.loadOlder!="function")throw new TypeError("ImThreadSurfaceContext.actions.loadOlder \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.formatDate!="function")throw new TypeError("ImThreadSurfaceContext.formatDate \u5FC5\u987B\u662F\u51FD\u6570");return Object.freeze({...t,actions:Object.freeze({...t.actions})})}function pn(t){provide(Bt,t);}function lt(){let t=inject(Bt);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var ut=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),ct=Object.freeze({enabled:true,maxFillPages:8}),bn=8,wn=160;function In(t,a){return t?.conversationType===a.conversationType&&t.conversationId===a.conversationId}var Mn=defineComponent({name:"ImThreadSurface",props:{conversation:{type:Object,required:true},context:{type:Object,default:void 0},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0},viewportOptions:{type:Object,default:()=>({})},initialViewportOptions:{type:Object,default:()=>({})},hooks:{type:Object,default:void 0}},setup(t,{expose:a,slots:y}){let c=t.context??lt(),m=ref(null),N=ref(0),U=ref(false),T=ref(false),V,w=ref(false),k=ref(false),o=ref(false),h=false,C,S=ref(true),E=[],_,G=0,L=0,J=null,K="",D="",re="",Z=false,Y=false,H=ref(false),ee=ref(""),q=ref(false),Q,oe,i$1=computed(()=>c.getState()),he=computed(()=>i$1.value.pageVisible??c.isPageVisible?.()??true),ie=computed(()=>i$1.value.pageEngaged??c.isPageEngaged?.()??true),A=computed(()=>In(i$1.value.activeConversation,t.conversation)),z=computed(()=>({...ut,...t.viewportOptions})),te=computed(()=>{let n=t.initialViewportOptions.maxFillPages??ct.maxFillPages;return {enabled:t.initialViewportOptions.enabled??ct.enabled,maxFillPages:Number.isFinite(n)?Math.max(0,Math.floor(n)):ct.maxFillPages}}),M=computed(()=>!A.value||!i$1.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ne=computed(()=>A.value?i({messages:i$1.value.messages,entryUnread:i$1.value.entryUnread,formatDate:c.formatDate,leadingItems:c.leadingItems?.(),beforeMessageItems:c.beforeMessageItems}):[]),f=computed(()=>ne.value.flatMap(n=>n.kind==="message"||n.kind==="system"?[n.message.id]:[]));function P(){Q!==void 0&&(clearTimeout(Q),Q=void 0),oe!==void 0&&(clearTimeout(oe),oe=void 0);}function p(n=false){if(P(),q.value=false,n){m.value?.clearActiveDate(),ee.value="";return}oe=setTimeout(()=>{oe=void 0,!q.value&&(m.value?.clearActiveDate(),ee.value="");},wn);}function j(n){if(n===null){p();return}P(),ee.value=n.label,q.value=true;let l=z.value.activeDateIdleDelay,d=Number.isFinite(l)?Math.max(0,l):ut.activeDateIdleDelay;Q=setTimeout(()=>{Q=void 0,p();},d);}async function v(n,l,d){t.hooks?.beforeAction?.(n);try{let u=await l();return d?.()!==!1&&t.hooks?.afterAction?.(n,u),u}catch(u){throw d?.()!==false&&t.hooks?.onError?.(n,u),u}}function $(n="automatic",l){return !A.value||i$1.value.loading||!i$1.value.hasOlder?Promise.resolve(0):v({kind:"load-older",source:n},()=>c.actions.loadOlder(),l)}function x(){return W()}function W(n){let l=c.actions.loadNewer,d=i$1.value.loadingNewer??i$1.value.loading;return !A.value||d||!i$1.value.hasNewer||l===void 0?Promise.resolve(0):v({kind:"load-newer"},()=>l(),n)}async function De(n){for(let l=0;l<bn;l+=1){if(!A.value)return;let d=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,u=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!d||u!==null||(n==="older"?await $("user-scroll"):await x())>0)return;let I=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,F=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!I||F!==null)return}}async function Fe(){return !A.value||c.actions.loadNewer===void 0?0:Be({kind:"load-newer"},()=>c.actions.retryNewer?.()??c.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function Xe(){return A.value?Be({kind:"retry-older"},()=>c.actions.retryOlder?.()??c.actions.loadOlder({force:true})):0}async function Be(n,l){let d=M.value,u=++G;J=null,re="";let b;try{b=await v(n,l);}catch(I){throw ae(d,u)&&(re=d),I}return ae(d,u)&&!H.value&&(J=null,ke()),b}async function Je(){if(!A.value)return false;let n=M.value,l=++L;return ge(true),Z=true,K=n,D=Ee(Te()),!await v({kind:"jump-to-latest"},()=>c.actions.jumpToLatest?.()??Promise.resolve(!i$1.value.isHistoryWindow))||!X(n,l)||(await nextTick(),!X(n,l))?false:(m.value?.scrollToLatest(),U.value=true,o.value=false,fe(),true)}function pe(n=false){let l=m.value,d=l?.getViewportElement();k.value=l?.isScrollable()===true;let u=i$1.value.entryUnreadNavigation;w.value=u?.state==="located"&&E.includes(u.firstMessageId),H.value&&w.value&&(U.value=true);let b=d==null?0:Math.max(0,d.scrollHeight-d.clientHeight-d.scrollTop);o.value=u!==void 0&&b>50,n&&u!==void 0&&d!==null&&d!==void 0&&d.clientHeight>0&&b>=d.clientHeight&&(U.value=true);}function fe(){let n=c.actions.markConversationRead;if(n===void 0||!ie.value||!A.value||!H.value||T.value||h&&(!S.value||i$1.value.hasNewer)||C!==void 0||i$1.value.error!==null)return;let l=M.value,d=n().then(()=>{C===d&&l===M.value&&(h=true);}).catch(u=>{!Y&&C===d&&l===M.value&&t.hooks?.onError?.({kind:"mark-conversation-read"},u);}).finally(()=>{C===d&&(C=void 0);});C=d;}async function Qe(){let n=c.actions.loadEntryUnread;if(!A.value||T.value||n===void 0)return "cancelled";let l=M.value,d=++L;V=d,T.value=true,ge(true),Z=true;try{let u=await v({kind:"jump-to-entry-unread"},n,()=>X(l,d));if(!X(l,d))return "cancelled";if(!u||i$1.value.entryUnread.state!=="located")return "unavailable";let I=await Ze(l,d);return I&&(U.value=!0),I?"located":X(l,d)?"unavailable":"cancelled"}catch(u){if(!X(l,d))return "cancelled";throw u}finally{V===d&&(V=void 0,T.value=false);}}async function me(n,l){for(let d=0;d<60;d+=1){if(!X(n,l))return false;if(m.value?.scrollToEntryUnread())return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(u=>window.requestAnimationFrame(()=>u()));}return false}async function Ze(n,l){let d=()=>X(n,l);if(!await me(n,l))return false;for(let u=0;u<te.value.maxFillPages;u+=1){if(!X(n,l))return false;let b=m.value,I=b?.getEntryUnreadCenteringNeeds();if(b===null||!I)return false;if(I.older&&i$1.value.hasOlder)await $("automatic",d);else if(I.newer&&i$1.value.hasNewer&&c.actions.loadNewer!==void 0){b.prepareHistoryPageAppend();try{await W(d)<=0&&X(n,l)&&b.cancelHistoryPageAppend();}catch(F){throw X(n,l)&&b.cancelHistoryPageAppend(),F}}else return true;if(await nextTick(),await nextTick(),!await me(n,l))return false}return X(n,l)}function Ke(n){S.value=n.isAtBottom,N.value=n.newMessageCount,pe(),ke();}function Ue(n,l){return m.value?.scrollToMessage(n,l)??false}function X(n,l){return !Y&&L===l&&M.value===n&&A.value}async function Ve(n,l,d,u){for(let b=0;b<60;b+=1){if(!X(n,l))return false;if(Ue(d,u))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(I=>window.requestAnimationFrame(()=>I()));}return false}async function Ce(n,l,d){let u=m.value;if(u===null||!u.isMeasurable()||u.isScrollable())return true;let b=0,I=!i$1.value.hasOlder,F=!i$1.value.hasNewer||c.actions.loadNewer===void 0,le=async()=>(await nextTick(),await nextTick(),Ve(n,l,d,{behavior:"auto",block:"center"})),ve=async be=>{if(!X(n,l)||b>=te.value.maxFillPages)return false;let we=0;if(be==="older"){if(I||!i$1.value.hasOlder)return false;we=await $(),I=!i$1.value.hasOlder;}else {if(F||!i$1.value.hasNewer)return false;u.prepareHistoryPageAppend();try{we=await x();}catch(We){throw u.cancelHistoryPageAppend(),We}we<=0&&!i$1.value.hasNewer&&u.cancelHistoryPageAppend(),F=!i$1.value.hasNewer;}return b+=1,we>0?le():!(be==="older"?I:F)};!I&&!await ve("older")&&(I=true),!F&&!await ve("newer")&&(F=true);let Ae="older";for(;X(n,l)&&b<te.value.maxFillPages&&u.isMeasurable()&&!u.isScrollable()&&(!I||!F);){let be=Ae==="older"?I?"newer":"older":F?"older":"newer";Ae=be==="older"?"newer":"older",await ve(be)||(be==="older"?I=true:F=true);}return X(n,l)}async function _e(n,l={behavior:"auto",block:"center"}){if(!A.value||n==="")return false;let d=M.value,u=++L;if(!f.value.includes(n)){let F=c.actions.loadAround;if(F===void 0||!await v({kind:"locate-message",messageId:n},()=>F(n))||!X(d,u))return false}return !await Ve(d,u,n,{...l,behavior:"auto"})||!await Ce(d,u,n)?false:Ve(d,u,n,l)}function Pe(){_!==void 0&&(clearTimeout(_),_=void 0);}function Se(){if(Pe(),!H.value)return;let n=t.readActions;if(n===void 0&&c.actions.markVisibleMessages===void 0)return;let l=Number.isFinite(z.value.visibleReadDelay)?Math.max(0,z.value.visibleReadDelay):ut.visibleReadDelay;_=setTimeout(()=>{if(_=void 0,!A.value||!ie.value)return;fe();let d=c.actions.markVisibleMessages;if(d!==void 0){let I=E;d(I).catch(F=>{t.hooks?.onError?.({kind:"visible-range",messageIds:I},F);});return}if(n===void 0)return;let u=E[E.length-1];if(u===void 0)return;let b=n.resolveTarget===void 0?u:n.resolveTarget(u);b!=null&&Promise.resolve(n.markRead(b)).catch(I=>{t.hooks?.onError?.({kind:"visible-range",messageIds:E},I);});},l);}function ye(n){E=Object.freeze([...n]),pe();let l={kind:"visible-range",messageIds:E};t.hooks?.beforeAction?.(l);try{c.actions.onVisibleRange?.(E),t.hooks?.afterAction?.(l,void 0);}catch(d){throw t.hooks?.onError?.(l,d),d}H.value?Se():ke();}function ae(n,l){return !Y&&G===l&&M.value===n&&!Z}function je(n,l){ae(n,l)&&(K=n,D=Ee(Te()),H.value=true,pe(),fe(),Se());}function Te(){return i$1.value.entryUnreadNavigation===void 0?i$1.value.entryUnread:{state:"none"}}function Ee(n){return n.state!=="located"?n.state:`${n.state}:${n.firstMessageId}`}async function Ne(n,l,d){for(let u=0;u<60;u+=1){if(!ae(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(I=>window.requestAnimationFrame(()=>I()));}return false}function ke(){let n=M.value,l=Ee(Te());if(n===""||i$1.value.loading||i$1.value.error!==null&&i$1.value.messages.length===0||K===n&&(D===l||D.startsWith("located:")||Z)||re===n||J!==null)return;if(!te.value.enabled){K=n,D=l,H.value=true,Se();return}let d=++G;Z=false,H.value=false;let u=(async()=>{if(await nextTick(),!ae(n,d))return;let b=m.value;if(b===null||!b.isMeasurable())return;let I=Te();if(I.state==="located"&&!f.value.includes(I.firstMessageId))return;let F=I.state==="located"?await Ne(n,d,I.firstMessageId):false;if(I.state==="located"&&!F)return;F||b.scrollToLatest();let le=0;for(;ae(n,d)&&le<te.value.maxFillPages&&i$1.value.error===null&&(i$1.value.hasOlder||i$1.value.hasNewer&&c.actions.loadNewer!==void 0)&&b.isMeasurable()&&!b.isScrollable();){if(i$1.value.hasNewer&&c.actions.loadNewer!==void 0&&(i$1.value.messages.length===0||!i$1.value.hasOlder)){let Ae=L;b.prepareHistoryPageAppend();try{await x(),await nextTick();}finally{M.value===n&&L===Ae&&(G===d||Z)&&b.cancelHistoryPageAppend();}}else await $();if(!ae(n,d)||(le+=1,await nextTick(),await nextTick(),!b.isMeasurable()))return}if(!ae(n,d)||!b.isMeasurable())return;let ve=Te();if(ve.state==="located"){if(!f.value.includes(ve.firstMessageId)||!await Ne(n,d,ve.firstMessageId))return}else b.scrollToLatest();await nextTick(),je(n,d);})().catch(()=>{ae(n,d)&&(re=n);}).finally(()=>{J===u&&(J=null);});J=u;}function ge(n,l=false){G+=1,J=null,Z=false,H.value=n,n||(K="",D="",l||(re="")),Pe();}function qe(){if(pe(true),T.value&&(L+=1),Z=true,H.value)return;let n=M.value;G+=1,J=null,K=n,H.value=true,Se();}let Oe=Object.freeze({getViewportElement:()=>m.value?.getViewportElement()??null,loadOlder:$,retryOlder:Xe,loadNewer:x,retryNewer:Fe,jumpToLatest:Je,jumpToEntryUnread:Qe,scrollToMessage:Ue,locateMessage:_e,focusViewport:()=>m.value?.focusViewport()});return a(Oe),watch(ie,n=>{n&&H.value?Se():Pe();}),watch([()=>i$1.value.activeRemoteMessageRevision??0,m,M],()=>{let n=m.value;if(n===null||!A.value)return;let l=c.actions.drainActiveRemoteMessageIds?.()??[];n.trackRemoteMessageIds(l,{isAtBottom:S.value,isHistoryWindow:i$1.value.isHistoryWindow,isPageVisible:he.value})&&(S.value=false);},{flush:"post"}),watch([M,()=>i$1.value.loading,()=>i$1.value.error,()=>f.value.length,()=>i$1.value.hasOlder,()=>Ee(Te()),te,()=>i$1.value.hasNewer],([n,l,d,u,,b],[I,,,F,,le])=>{if(n!==I&&(L+=1,ge(false),p(true),m.value?.clearNewMessageBadge(),N.value=0,S.value=true,E=[],U.value=false,w.value=false,k.value=false,o.value=false,T.value=false,V=void 0,h=false,C=void 0),n!==""&&n===I&&F!==void 0&&F>0&&u===0&&(i$1.value.hasOlder||i$1.value.hasNewer)&&H.value&&ge(false,true),n!==""&&n===I&&b!==le&&!D.startsWith("located:")&&!Z&&b.startsWith("located:")&&(K="",D="",H.value=false),n===""){ge(false);return}if(d!==null&&i$1.value.messages.length===0){H.value||ge(false,true);return}l||ke();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{Y=true,L+=1,ge(false),p(true);}),()=>{let n={conversation:t.conversation,state:i$1.value,items:ne.value,actions:Oe,initialViewportSettled:M.value!==""&&(i$1.value.messages.length===0?!i$1.value.loading&&i$1.value.error===null&&!i$1.value.hasOlder&&!i$1.value.hasNewer:H.value&&K===M.value)},l=[y.header?.(n),y["before-list"]?.(n)];if(!A.value)l.push(y.unsupported?.(n)??h$1("div",{"data-im-thread-unsupported":""}));else if(!i$1.value.ready&&i$1.value.loading)l.push(y.loading?.(n)??h$1("div",{"data-im-thread-loading":""}));else if(i$1.value.error!==null&&i$1.value.messages.length===0)l.push(y.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(y.empty?.(n)??h$1("div",{"data-im-thread-empty":""}));else {let d=h$1(st,{ref:m,messageIds:f.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:z.value.followThreshold,olderPrefetchThreshold:z.value.olderPrefetchThreshold,visibleMargin:z.value.visibleMargin,activeDateOffset:z.value.activeDateOffset,activeDateEnabled:y["active-date"]!==void 0,resizeFollowEnabled:H.value,followNewMessages:he.value,shouldFollowAppendedMessage:u=>{let b=i$1.value.messages.find(I=>I.id===u);return b===void 0?false:c.shouldFollowMessage?.(b)===true},onReachStart:()=>{De("older").catch(()=>{});},onReachEnd:()=>{De("newer").catch(()=>{});},onSettled:Ke,onUserScroll:qe,onActiveDateChange:j,onVisibleRange:ye,onNewMessageCount:u=>{N.value=u;}},{default:()=>[y["viewport-before"]?.(n),h$1(it,{items:ne.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:y.item,"date-separator":y["date-separator"],"entry-unread":y["entry-unread"],encryption:y.encryption,system:y.system,message:y.message,"recalled-message":y["recalled-message"],"deleted-message":y["deleted-message"],"unsupported-body":y["unsupported-body"]}),y["viewport-after"]?.(n)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[y["active-date"]?.({label:ee.value,visible:q.value&&ee.value!==""}),d,y["entry-unread-navigation"]?.({...n,count:i$1.value.entryUnreadNavigation?.state==="none"?0:i$1.value.entryUnreadNavigation?.count??0,loading:T.value,visible:n.initialViewportSettled&&!U.value&&!w.value&&!i$1.value.isHistoryWindow&&i$1.value.entryUnreadNavigation!==void 0&&i$1.value.entryUnreadNavigation.state!=="none"&&i$1.value.entryUnreadNavigation.count>0&&(k.value||i$1.value.hasOlder)})])),i$1.value.error!==null&&l.push(y.error?.(n)??h$1("div",{"data-im-thread-error":""}));}return l.push(y["after-list"]?.(n),y["jump-to-latest"]?.({...n,count:N.value,visible:o.value||!S.value||i$1.value.isHistoryWindow}),y["context-menu"]?.(n),y.composer?.(n)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},l)}}});function Rn(t){let a=new Map;for(let c of t){if(a.has(c.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${c.kind}`);a.set(c.kind,c.component);}let y=Object.freeze([...a.keys()]);return Object.freeze({kinds:y,resolve:c=>a.get(c)})}var Sn=140,En=120;function $e(t,a){if(t.width<=0||t.height<=0)return 0;let y=Math.max(0,Math.min(t.right,a.right)-Math.max(t.left,a.left)),c=Math.max(0,Math.min(t.bottom,a.bottom)-Math.max(t.top,a.top));return Math.min(1,y*c/(t.width*t.height))}function ft(t,a){return {x:t.x,y:t.top-a,top:t.top-a,bottom:t.bottom+a,left:t.left,right:t.right,width:t.width,height:t.height+a*2,toJSON:()=>({})}}function mt(t){let a=Math.max(0,t.scrollIdleMs??Sn),y=Math.max(0,t.visibilityDwellMs??En),c=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),m=Math.max(0,t.revealMarginPx??0),N=Math.max(0,t.preloadMarginPx??0),U=Math.max(m,N),T=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),V=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),w=new Map,k=new Map,o=reactive(new Set),h=new Set,C=new Set,S=[],E=null,_=null,G=null,L=false,J=false,K=false,D=false,re,Z;function Y(){re!==void 0&&clearTimeout(re),re=void 0;}function H(){Z!==void 0&&clearTimeout(Z),Z=void 0;}function ee(f=false){if(!f&&_!==null||E===null)return;let P=E.getBoundingClientRect(),p=ft(P,U);for(let[j,v]of w){let $=j.getBoundingClientRect();v.ratio=$e($,P),v.intersecting=v.ratio>0,v.revealIntersecting=U>0?$e($,p)>0:v.intersecting&&v.ratio>=c;}}function q(f){return f.intersecting&&f.ratio>=c}function Q(){for(let[f,P]of w)!P.revealIntersecting||o.has(P.key)||U>m&&(m===0&&!q(P)||m>0&&(E===null||$e(f.getBoundingClientRect(),ft(E.getBoundingClientRect(),m))<=0))||(o.add(P.key),t.onRevealed?.(P.item));}function oe(f,P=false){let p=new Set(f.map(v=>v.key));if(!(!(p.size!==C.size||[...p].some(v=>!C.has(v)))&&!P)){C.clear();for(let v of p)C.add(v);t.onSettledVisibleChange?.(f.map(v=>v.item));}}function i(f,P=false){!P&&f.length===S.length&&f.every((p,j)=>p.key===S[j]?.key&&p.item===S[j]?.item)||(S=f,t.onSettledPreloadChange?.(f.map(p=>p.item)));}function he(){if(K||L)return;let f=J;J=false,ee(),Q();let P=E?.getBoundingClientRect(),p=P===void 0?0:(P.top+P.bottom)/2,j=[...w.entries()].filter(([,v])=>q(v)).sort(([v],[$])=>{let x=v.getBoundingClientRect(),W=$.getBoundingClientRect();return Math.abs((x.top+x.bottom)/2-p)-Math.abs((W.top+W.bottom)/2-p)}).slice(0,V).map(([,v])=>v);if(oe(j,f),t.onSettledPreloadChange!==void 0&&P!==void 0){let v=ft(P,N),$=[...w.entries()].filter(([,x])=>x.revealIntersecting).map(([x,W])=>({target:W,rect:x.getBoundingClientRect()})).filter(({target:x,rect:W})=>q(x)||N>0&&$e(W,v)>0).sort((x,W)=>Number(q(W.target))-Number(q(x.target))||Math.abs((x.rect.top+x.rect.bottom)/2-p)-Math.abs((W.rect.top+W.rect.bottom)/2-p)).slice(0,T).map(({target:x})=>x);i($,f);}for(let v of j)h.has(v.key)||(h.add(v.key),t.onActivated?.(v.item));}function ie(){K||L||(H(),Z=setTimeout(()=>{Z=void 0,he();},y));}function A(){K||(J=true,z(true),i([]),ee(),Q(),oe([]),H(),Y(),re=setTimeout(()=>{re=void 0,z(false),ie();},a));}function z(f){L!==f&&(L=f,t.onScrollingChange?.(f));}function te(){E?.removeEventListener("scroll",A),_?.disconnect(),G?.disconnect(),_=null,G=null,E=null;}function M(f=true){if(K)return;let P=t.getRoot();if(!(P===E&&E!==null)){if(i([]),te(),E=P,E===null){f&&!D&&(D=true,Promise.resolve().then(()=>{D=false,K||(M(false),ie());}));return}if(E.addEventListener("scroll",A,{passive:true}),typeof IntersectionObserver<"u"){_=new IntersectionObserver(p=>{for(let j of p){let v=w.get(j.target);v!==void 0&&(v.intersecting=j.isIntersecting,v.ratio=j.intersectionRatio,U===0&&(v.revealIntersecting=j.isIntersecting&&j.intersectionRatio>=c));}Q(),ie();},{root:E,threshold:[0,c,1]}),U>0&&(G=new IntersectionObserver(p=>{for(let j of p){let v=w.get(j.target);v!==void 0&&(v.revealIntersecting=j.isIntersecting);}Q(),ie();},{root:E,rootMargin:`${U}px 0px`,threshold:0}));for(let p of w.keys())_.observe(p);for(let p of w.keys())G?.observe(p);}else ee(),Q();}}function ne(f){i(S.filter(P=>P.key!==f)),o.delete(f),h.delete(f),C.delete(f);}return {register(f,P){if(K)return;let p=t.getKey(f),j=o.has(p),v=h.has(p),$=P===null?void 0:w.get(P);$!==void 0&&$.key!==p&&(k.delete($.key),w.delete(P),ne($.key));let x=k.get(p);if(x!==void 0&&x!==P&&(_?.unobserve(x),G?.unobserve(x),w.delete(x),k.delete(p)),P===null){x!==void 0&&(_?.unobserve(x),G?.unobserve(x),w.delete(x),k.delete(p)),ne(p);return}let W=w.get(P);if(W?.key===p&&W.item===f){M();return}w.set(P,{item:f,key:p,intersecting:W?.key===p?W.intersecting:false,ratio:W?.key===p?W.ratio:0,revealIntersecting:W?.key===p?W.revealIntersecting:false}),k.set(p,P),M(),_?.observe(P),G?.observe(P),ee(true),Q(),j&&t.onRevealed?.(f),v&&t.onActivated?.(f),ie();},isRevealed:f=>o.has(t.getKey(f)),isActivated:f=>h.has(t.getKey(f)),isSettledVisible:f=>C.has(t.getKey(f)),isScrolling:()=>L,notifyScroll:A,refresh(){M(),ee(true),Q(),ie();},reset(){Y(),H(),z(false),J=false,oe([]),i([]),te(),w.clear(),k.clear(),o.clear(),h.clear();},dispose(){K||(Y(),H(),z(false),J=false,oe([]),i([]),te(),w.clear(),k.clear(),o.clear(),h.clear(),K=true);}}}function An(t){let a=new Map,y=new Map,c=false,m=T=>{let V=a.get(T.channel);return V===void 0?T.channel:`${T.channel}\0${V.getKey(T.item)}`},N=mt({getRoot:t.getRoot,getKey:m,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:T=>{for(let V of a.values())V.onScrollingChange?.(T);},onRevealed:T=>a.get(T.channel)?.onRevealed?.(T.item),onActivated:T=>a.get(T.channel)?.onActivated?.(T.item),onSettledPreloadChange:T=>{for(let[V,w]of a){let k=T.filter(o=>o.channel===V).map(o=>o.item);w.onSettledPreloadChange?.(k.slice(0,Math.max(0,w.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:T=>{for(let[V,w]of a){let k=T.filter(h=>h.channel===V).map(h=>h.item),o=w.maxSettledVisible===void 0?k:k.slice(0,w.maxSettledVisible);w.onSettledVisibleChange?.(o);}}});function U(T){return V=>{if(c)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(a.has(T))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${T}`);a.set(T,V);let w=new Map;y.set(T,w);let k=false,o=S=>({channel:T,item:S});function h(){for(let S of w.values())N.register(S.target,null);w.clear(),V.onScrollingChange?.(false),V.onSettledVisibleChange?.([]),V.onSettledPreloadChange?.([]);}return {register(S,E){if(k||c)return;let _=V.getKey(S),G=w.get(_);if(E===null){G!==void 0&&(N.register(G.target,null),w.delete(_));return}let L=G?.target.item===S?G.target:o(S);w.set(_,{target:L,element:E}),N.register(L,E);},isRevealed:S=>N.isRevealed(o(S)),isActivated:S=>N.isActivated(o(S)),isSettledVisible:S=>N.isSettledVisible(o(S)),isScrolling:N.isScrolling,notifyScroll:N.notifyScroll,refresh:N.refresh,reset:h,dispose(){k||(h(),k=true,a.delete(T),y.delete(T));}}}}return {createFactory:U,refresh:N.refresh,dispose(){if(!c){for(let T of y.values())for(let V of T.values())N.register(V.target,null);for(let T of a.values())T.onSettledPreloadChange?.([]);y.clear(),a.clear(),N.dispose(),c=true;}}}}export{rt as ImThreadBodySwitch,it as ImThreadItems,Mn as ImThreadSurface,st as ImThreadViewport,hn as createImThreadSurfaceContext,Rn as createMessageRendererRegistry,An as createThreadVisibilityTargetGroup,mt as createThreadVisibilityTargets,pn as provideImThreadSurfaceContext,Xt as useImText,lt as useImThreadSurfaceContext,Zt as useOptionalImThreadReadActions};