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.
- package/dist/browser.js +1 -1
- package/dist/chat-kit-pinia.d.ts +157 -19
- package/dist/chat-kit-pinia.js +1 -1
- package/dist/chat-kit-vue.d.ts +123 -2
- package/dist/chat-kit-vue.js +1 -1
- package/dist/chat-kit.d.ts +162 -16
- package/dist/chat-kit.js +1 -1
- package/dist/chunk-3ST5E6YS.js +1 -0
- package/dist/chunk-4I23ADH2.js +2 -0
- package/dist/{chunk-4WMIGRG4.js → chunk-GHFHAGJ7.js} +1 -1
- package/dist/{chunk-SWQXHZDF.js → chunk-HWA7NOXG.js} +1 -1
- package/dist/chunk-ITOAFWZU.js +2 -0
- package/dist/chunk-LMP34HNC.js +2 -0
- package/dist/chunk-ZERTVCH2.js +7 -0
- package/dist/i18n.d.ts +3 -1
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +164 -17
- package/dist/index.js +1 -1
- package/dist/sdk.d.ts +96 -11
- package/dist/sdk.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-4CH72T6I.js +0 -7
- package/dist/chunk-ANHUDX3C.js +0 -2
- package/dist/chunk-NB6MXFCH.js +0 -2
- package/dist/chunk-R3FWUQK4.js +0 -2
- package/dist/chunk-UKL2AULH.js +0 -1
package/dist/chat-kit-vue.d.ts
CHANGED
|
@@ -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 };
|
package/dist/chat-kit-vue.js
CHANGED
|
@@ -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};
|