k2-im 0.1.30 → 0.1.32
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 +160 -19
- package/dist/chat-kit-pinia.js +1 -1
- package/dist/chat-kit-vue.d.ts +52 -7
- package/dist/chat-kit-vue.js +1 -1
- package/dist/chat-kit.d.ts +207 -21
- package/dist/chat-kit.js +1 -1
- package/dist/chunk-GAAHNTJM.js +7 -0
- package/dist/chunk-HSVVRLGM.js +1 -0
- package/dist/chunk-JA5TKCQ2.js +2 -0
- package/dist/chunk-MIFIQ45I.js +2 -0
- package/dist/chunk-OYH7COTJ.js +1 -0
- package/dist/chunk-QQ23QYWK.js +2 -0
- package/dist/chunk-SEHHXKP7.js +1 -0
- package/dist/i18n.d.ts +55 -6
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +211 -21
- package/dist/index.js +1 -1
- package/dist/sdk.d.ts +153 -17
- package/dist/sdk.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-37HOEWMF.js +0 -1
- package/dist/chunk-4KPJTXQN.js +0 -2
- package/dist/chunk-GHZUH7RB.js +0 -7
- package/dist/chunk-MNWNUGIV.js +0 -2
- package/dist/chunk-SLFKCTEX.js +0 -1
- package/dist/chunk-VRGWQLDM.js +0 -1
- package/dist/chunk-XA4W5PWT.js +0 -2
package/dist/chat-kit-vue.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ type ImLocale = 'en-US' | 'th-TH' | 'vi-VN' | 'zh-CN' | 'zh-TW';
|
|
|
6
6
|
/** 媒体业务类型:实现据此选对象存储逻辑桶;sticker 对应 app-sticker。 */
|
|
7
7
|
type MediaKind = 'image' | 'video' | 'voice' | 'file' | 'sticker';
|
|
8
8
|
|
|
9
|
-
/** 会话类型。P0 只用 direct / group。 */
|
|
10
|
-
type ConversationType = 'direct' | 'group' | 'channel' | 'supergroup';
|
|
9
|
+
/** 会话类型。P0 只用 direct / group;`robot` 是独立私聊 sibling,不得并入 direct。 */
|
|
10
|
+
type ConversationType = 'direct' | 'group' | 'channel' | 'supergroup' | 'robot';
|
|
11
11
|
/**
|
|
12
12
|
* 会话复合身份;`conversationId` 只在对应 `conversationType` 的领域内唯一。
|
|
13
13
|
*
|
|
@@ -24,8 +24,8 @@ interface ConversationRef<TType extends ConversationType = ConversationType> {
|
|
|
24
24
|
conversationType: TType;
|
|
25
25
|
conversationId: string;
|
|
26
26
|
}
|
|
27
|
-
/** 消息内容类型。sticker=表情/贴图(BMessage contentType=7);call=单聊通话记录(contentType=10);transfer=转账(contentType=16);robot=机器人卡片(contentType=18);miniProgram=小程序分享卡(contentType=22);redPacket=红包卡(contentType=25);game=小游戏(contentType=27);未知 wire 正文统一归一为 unknown。 */
|
|
28
|
-
type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'call' | 'redPacket' | 'mediaAlbum' | 'robot' | 'unknown';
|
|
27
|
+
/** 消息内容类型。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
|
+
type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'gift' | 'call' | 'redPacket' | 'mediaAlbum' | 'robot' | 'unknown';
|
|
29
29
|
/**
|
|
30
30
|
* 发送态(客户端态):消息从本地创建到服务端确认的生命周期。
|
|
31
31
|
* `uploading` 仅媒体消息使用:文件上传阶段(uploading→pending→sending→sent);
|
|
@@ -94,6 +94,8 @@ type LastMessageSummary = {
|
|
|
94
94
|
gameType: ImGameType;
|
|
95
95
|
} | {
|
|
96
96
|
kind: 'transfer';
|
|
97
|
+
} | {
|
|
98
|
+
kind: 'gift';
|
|
97
99
|
} | {
|
|
98
100
|
kind: 'call';
|
|
99
101
|
callKind: ImCallKind;
|
|
@@ -293,13 +295,14 @@ type ImGameBody = {
|
|
|
293
295
|
* - `default`:0,普通可点卡片
|
|
294
296
|
* - `board-game`:1,棋牌样式且不可点
|
|
295
297
|
* - `board-game-link`:2,棋牌样式且可点
|
|
298
|
+
* - `game-preview`:3,气泡内嵌游戏预览 WebView
|
|
296
299
|
* - `unknown`:必须同时保留 `rawShowType`,不得猜成可点/不可点
|
|
297
300
|
*/
|
|
298
|
-
type ImMiniProgramShowType = 'default' | 'board-game' | 'board-game-link' | 'unknown';
|
|
301
|
+
type ImMiniProgramShowType = 'default' | 'board-game' | 'board-game-link' | 'game-preview' | 'unknown';
|
|
299
302
|
/**
|
|
300
303
|
* 小程序分享卡片正文(contentType==='miniProgram',协议 BMessage.contentType=22)。
|
|
301
304
|
*
|
|
302
|
-
* @remarks 字段来自 iOS `IMMiniProgramMessageBody` / proto 61-67、80-82、90-
|
|
305
|
+
* @remarks 字段来自 iOS `IMMiniProgramMessageBody` / proto 61-67、80-82、90-96。
|
|
303
306
|
* `currencySource` 对应 proto field 90(无 miniProgram 前缀):`xj` 现金公司、`xy` 信用公司。
|
|
304
307
|
* `subGameName` 保持服务端 JSON 字符串,不在 Core 解析语种表。打开小程序与 X 币/信用 ID 属于宿主,不进本 DTO。
|
|
305
308
|
*/
|
|
@@ -323,6 +326,12 @@ interface ImMiniProgramBody {
|
|
|
323
326
|
gamePath?: string;
|
|
324
327
|
/** 多语言子游戏名 JSON 字符串,例如 `{"ch":"...","en":"..."}`。 */
|
|
325
328
|
subGameName?: string;
|
|
329
|
+
/** 游戏预览页地址(BMessage.miniProgramGamePreviewUrl,showType=3)。 */
|
|
330
|
+
gamePreviewUrl?: string;
|
|
331
|
+
/** 游戏预览设计宽(BMessage.miniProgramGamePreviewWidth)。 */
|
|
332
|
+
gamePreviewWidth?: number;
|
|
333
|
+
/** 游戏预览设计高(BMessage.miniProgramGamePreviewHeight)。 */
|
|
334
|
+
gamePreviewHeight?: number;
|
|
326
335
|
}
|
|
327
336
|
/**
|
|
328
337
|
* 机器人卡片文本模块(wire `section`)。
|
|
@@ -401,6 +410,40 @@ interface ImTransferBody {
|
|
|
401
410
|
coinName?: string;
|
|
402
411
|
coinIcon?: string;
|
|
403
412
|
}
|
|
413
|
+
/** 礼品类型。协议注释为刮刮卡 1 / 奖品 2;Android 当前会把 WelfareGiftType=0 写进消息,入站必须接受 0。 */
|
|
414
|
+
type ImGiftType = 0 | 1 | 2;
|
|
415
|
+
/** 礼品状态。0 待领取 / 1 已收款 / 2 已退还 / 3 已过期(对齐 iOS IMGiftMessageBody)。 */
|
|
416
|
+
type ImGiftStatus = 0 | 1 | 2 | 3;
|
|
417
|
+
/** 礼品会话类型。1 个人 / 2 群(BMessage.sessionType)。 */
|
|
418
|
+
type ImGiftSessionType = 1 | 2;
|
|
419
|
+
/**
|
|
420
|
+
* 礼品卡片正文(contentType==='gift',协议 BMessage.contentType=17)。
|
|
421
|
+
*
|
|
422
|
+
* @remarks 字段来自 iOS `IMGiftMessageBody` / proto 51-59,并复用转账字段族的 fromUid/toUid/serialNumber。
|
|
423
|
+
* 赠卡 HTTP 属于宿主;本 DTO 只承载会话卡片。H5 出站刮刮卡写 giftType=1。
|
|
424
|
+
*/
|
|
425
|
+
interface ImGiftBody {
|
|
426
|
+
fromUid: string;
|
|
427
|
+
toUid: string;
|
|
428
|
+
fromUserName?: string;
|
|
429
|
+
toUserName?: string;
|
|
430
|
+
giftType: ImGiftType;
|
|
431
|
+
giftName: string;
|
|
432
|
+
giftIcon?: string;
|
|
433
|
+
explain?: string;
|
|
434
|
+
state: ImGiftStatus;
|
|
435
|
+
serialNumber: string;
|
|
436
|
+
sessionType: ImGiftSessionType;
|
|
437
|
+
initiateTime: number;
|
|
438
|
+
/** 单张金额的十进制字符串;0 或缺省表示未带金额。 */
|
|
439
|
+
amount?: string;
|
|
440
|
+
receiveTime?: number;
|
|
441
|
+
returnTime?: number;
|
|
442
|
+
isRead?: boolean;
|
|
443
|
+
zhangCount?: string;
|
|
444
|
+
benCount?: string;
|
|
445
|
+
fissionNumber?: string;
|
|
446
|
+
}
|
|
404
447
|
/** 领域通话媒体类型;已从各端 wire 0/1 对调口径归一,宿主禁止再读 raw callType。 */
|
|
405
448
|
type ImCallKind = 'audio' | 'video';
|
|
406
449
|
/**
|
|
@@ -553,6 +596,8 @@ interface ImMessageBody {
|
|
|
553
596
|
game?: ImGameBody;
|
|
554
597
|
/** contentType==='transfer' 时的转账卡片。 */
|
|
555
598
|
transfer?: ImTransferBody;
|
|
599
|
+
/** contentType==='gift' 时的礼品/刮刮卡卡片。 */
|
|
600
|
+
gift?: ImGiftBody;
|
|
556
601
|
/** contentType==='call' 时的单聊通话记录。 */
|
|
557
602
|
call?: ImCallRecordBody;
|
|
558
603
|
/** contentType==='redPacket' 时的红包卡片。 */
|
|
@@ -1224,7 +1269,7 @@ type ImMessageView = Readonly<Omit<ImMessage, 'sortKey' | 'raw' | 'extensions' |
|
|
|
1224
1269
|
*/
|
|
1225
1270
|
|
|
1226
1271
|
/** default 会话列表支持的精确类型;`supergroup` 继续受产品 Gate 约束。 */
|
|
1227
|
-
type ProductConversationListType = 'direct' | 'group' | 'channel';
|
|
1272
|
+
type ProductConversationListType = 'direct' | 'group' | 'channel' | 'robot';
|
|
1228
1273
|
|
|
1229
1274
|
type ConversationEntryUnreadSnapshot = Readonly<{
|
|
1230
1275
|
state: 'none';
|
package/dist/chat-kit-vue.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-SLFKCTEX.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-37HOEWMF.js';import'./chunk-MNWNUGIV.js';import'./chunk-GHZUH7RB.js';import'./chunk-4KPJTXQN.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 a=0,m=0;for(let u of t)u.kind==="video"?m+=1:a+=1;return {imageCount:a,videoCount:m}}function Wt(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.mediaAlbum===void 0?{}:{mediaAlbum:Gt(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 At=Symbol("ImThreadReadActions");function Ot(t){provide(At,t);}function $t(){return inject(At,void 0)}var We=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:m}){return Ot(t.readActions),()=>{let u=h(t.message),f=t.rendererRegistry.resolve(u);return f!==void 0?h$1(f,{...a,message:t.message,presentation:t.presentation}):m["unsupported-body"]!==void 0?m["unsupported-body"]({kind:u,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":u,"aria-hidden":"true"})}}});var ze=Symbol("ImThreadViewportRegistration");function Ct(){return inject(ze,void 0)}var Ye=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 m=Ct();function u(o,d){let w=Array.isArray(d)?d:[d];return w.length===1&&isVNode(w[0])?cloneVNode(w[0],{key:o}):h$1(Fragment,{key:o},w)}function f(o){return d=>{m?.registerMessageNode(o,d instanceof HTMLElement?d:null);}}function O(o,d){return w=>{m?.registerDateNode(o,d,w instanceof HTMLElement?w:null);}}function _(o){return a.encryption?.({item:o})??h$1("div",{"data-im-thread-encryption":o.key})}function h(o){let d=O(o.key,o.label);return a["date-separator"]?.({item:o,setElement:d})??h$1("div",{ref:d,"data-im-thread-date-separator":o.key},o.label)}function P(o){return a["entry-unread"]?.({item:o})??h$1("div",{"data-im-thread-entry-unread":o.key,...o.count===void 0?{}:{"data-count":String(o.count)}})}function g(o){let d=f(o.message.id);return a.item!==void 0?a.item({item:o,setElement:d}):a.message!==void 0?a.message({item:o,setElement:d}):o.message.deletedForEveryone!==void 0?a["deleted-message"]?.({item:o,setElement:d})??h$1("article",{ref:d,"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:d})??h$1("article",{ref:d,"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:d}):h$1("article",{ref:d,"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(We,{message:o.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":a["unsupported-body"]===void 0?void 0:w=>a["unsupported-body"]?.(w)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(o=>{switch(o.kind){case "encryption":return a.item!==void 0?u(o.key,a.item({item:o})):u(o.key,_(o));case "date-separator":return a.item!==void 0?u(o.key,a.item({item:o,setElement:O(o.key,o.label)})):u(o.key,h(o));case "entry-unread":return a.item!==void 0?u(o.key,a.item({item:o})):u(o.key,P(o));case "system":case "message":return u(o.key,g(o))}return o}))}});var Dt=120,sr=500,fe=.5,lr=8,$e=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:m$1,slots:u}){let f=ref(null),O=ref(null),_=new Map,h=new Map,P=new Set,g$1=new Map,o$1=0,d=[],w,K,E,R,G=false,S,$=new Set,J=false,C$1,re="",s=1,W=false,oe=false,j$1=true,L=false,Z=false,F=false,ee=0,te=-1,he=-1,B$1,ie,X,k,z$1,ne=ref(true),p$1=ref(0),T=C(e=>{p$1.value=e,a("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 i=_.get(n);if(i===void 0)return [];let y=i.getBoundingClientRect(),I=i.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 i=Math.min(1,Math.max(0,n));re!==""&&re!==e&&g$1.get(re)?.element.style.removeProperty("opacity"),re=e,s=i,e!==""&&g$1.get(e)?.element.style.setProperty("opacity",String(i));}function q$1(){b();}function V(){let e=f.value;if(J||e===null||!t.activeDateEnabled)return;let n=[...g$1.entries()].filter(([,A])=>e.contains(A.element)).map(([A,D])=>{let Q=D.element.getBoundingClientRect();return {key:A,label:D.label,top:Q.top,height:Q.height}}).sort((A,D)=>A.top-D.top),i=e.getBoundingClientRect(),y=n.find(A=>A.height>0)?.height??28,I=g({markers:n,viewportTop:i.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:y});if(I===null){q$1(),a("active-date-change",null);return}b(I.inlineDateKey,I.inlineOpacity),a("active-date-change",I);}function U(e){K={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Oe(e){let n=K;if(n===void 0)return false;let i=Math.max(0,e.scrollHeight-e.clientHeight);return i<n.scrollHeight-n.height&&n.scrollTop>i&&Math.abs(e.scrollTop-i)<=fe}function Ve(e){return Oe(e)||C$1!==void 0&&(C$1.behavior==="smooth"||Math.abs(e.scrollTop-C$1.targetTop)<=fe)?0:e.scrollTop-o$1}function ve(e,n){n!==0&&(o$1=e.scrollTop-n,C$1=void 0,c());}function Ue(e,n){let i=Ve(e);if(k!==void 0)return k.expectedOffset-=i,ce(),ve(e,i),L||ue(),false;let y=K;if(y===void 0)return false;let I=w,A=I===void 0?void 0:H([I.id])[0],D=e.scrollTop-y.scrollTop,Q=Oe(e)?0:D,Ee=I===void 0||A===void 0?0:(A.anchorTop??A.top)-n.top-I.offset+D;return y.scrollHeight!==e.scrollHeight||y.width!==e.clientWidth||y.height!==e.clientHeight||Math.abs(Ee)>fe?(K=void 0,!W&&!t.loadingNewer&&t.resizeFollowEnabled&&ne.value&&Math.abs(Q)<=fe?(Fe(),true):(I!==void 0&&Ne({...I,offset:I.offset-Q}),ve(e,i),false)):false}function ae(){let e=f.value;if(J||e===null)return;let n=e.getBoundingClientRect();if(Ue(e,n))return;let i=R!==void 0&&G?t.messageIds.filter(D=>P.has(D)):t.messageIds,y=H(i);if(R!==void 0&&G&&y.length===0){ne.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),A=I.length!==d.length||I.some((D,Q)=>d[Q]!==D);d=Object.freeze(I),w=o(y,{top:n.top,bottom:n.bottom}),U(e),T.acknowledgeVisible(I),ne.value=v(e),A&&a("visible-range",d),a("settled",{visibleMessageIds:d,...d.length===0?{}:{newestVisibleMessageId:d[d.length-1]},isAtBottom:ne.value,newMessageCount:p$1.value});}function Te(e){if($.add(e),S!==void 0)return;let n=()=>{S=void 0;let i=[...$];$.clear(),i.forEach(y=>y());};typeof globalThis.requestAnimationFrame=="function"?S=globalThis.requestAnimationFrame(n):S=globalThis.setTimeout(n,0);}function Se(){S!==void 0&&(typeof S=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(S):globalThis.clearTimeout(S),S=void 0,$.clear());}function le(){Te(ae);}function Re(){let e=f.value;if(e===null)return;let n=e.getBoundingClientRect(),i=o(H(),{top:n.top,bottom:n.bottom});i!==void 0&&(w=i,U(e));}function ye(){return j$1&&k===void 0&&!oe&&!t.loadingOlder}function ke(){Re(),j$1=false,te=ee,oe=true,a("reach-start"),Te(()=>{t.loadingOlder||(oe=false);});}function Ce(e){return t.hasNewer&&!W&&!t.loadingOlder&&!t.loadingNewer&&v(e)}function r(){W=true,ne.value=false,he=ee,a("reach-end"),Te(()=>{t.loadingNewer||(W=false);});}function l(){let e=f.value;e===null||ee===he||!Ce(e)||r();}function c(){let e=f.value;if(J||e===null)return;let n=e.scrollTop,i=Oe(e),y=C$1,I=false;if(y!==void 0){let D=Math.abs(n-y.targetTop)<=fe;I=y.behavior==="smooth"||D,(y.behavior!=="smooth"||D)&&(C$1=void 0);}!I&&!i&&!L&&k===void 0&&n!==o$1&&(L=true,Z=true,ee+=1);let A=L&&!I&&!i&&n!==o$1;if(A&&(a("user-scroll"),Te(V)),L&&!F&&Me(),!j$1&&Z&&ee!==te&&n<o$1&&n>rt()&&(j$1=true),k!==void 0&&!I)if(L){let D=Y();D!==void 0&&(k.expectedOffset=D);}else ce(),ue();ye()&&A&&n>=0&&m({previousScrollTop:o$1,currentScrollTop:n,topThreshold:t.olderPrefetchThreshold})&&ke(),A&&Ce(e)&&z({previousScrollTop:o$1,currentScrollTop:n,isAtBottom:v(e),isHistoryWindow:t.hasNewer,isPageSettling:I})&&r(),o$1=n,le();}function M(e,n="auto"){C$1={targetTop:e,behavior:n};}function N(e){let n=k,i=O.value;if(!(n===void 0||i===null)){if(n.visualOffset=Math.abs(e)<=fe?0:e,n.visualOffset===0){i.style.removeProperty("transform"),i.style.removeProperty("will-change");return}i.style.setProperty("transform",`translate3d(0, ${n.visualOffset}px, 0)`),i.style.setProperty("will-change","transform");}}function x(){z$1!==void 0&&(clearTimeout(z$1),z$1=void 0),k!==void 0&&k.visualOffset!==0&&(w=void 0,K=void 0);let e=O.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),k=void 0,C$1=void 0;}function Y(){let e=f.value,n=k;if(e===null||n===void 0)return;let i=H().find(y=>y.id===n.anchor.id);if(i!==void 0)return (i.anchorTop??i.top)-e.getBoundingClientRect().top}function ce(){let e=k,n=Y();if(e===void 0||n===void 0)return;let i=e.expectedOffset-n;Math.abs(i)<=fe||(N(e.visualOffset+i),e.committed=false,e.attempts=0);}function de(){z$1!==void 0&&clearTimeout(z$1),z$1=setTimeout(()=>{z$1=void 0,!(L||k?.committed!==true)&&x();},sr);}function we(){let e=f.value,n=k;if(J||e===null||n===void 0||L)return;let i=n.visualOffset;if(Math.abs(i)<=fe){n.committed=true,de();return}let y=Math.max(0,e.scrollHeight-e.clientHeight),I=Math.min(y,Math.max(0,e.scrollTop-i));if(M(I),e.scrollTop=I,Math.abs(e.scrollTop-I)>fe){C$1=void 0,n.committed=false,n.attempts+=1,n.attempts<lr?ue():(x(),C$1=void 0,o$1=e.scrollTop);return}N(0),o$1=e.scrollTop,n.expectedOffset=Y()??n.expectedOffset,n.committed=true,n.attempts=0,de();}function ue(){z$1!==void 0&&clearTimeout(z$1),z$1=setTimeout(()=>{z$1=void 0,we();},Dt);}function Pe(e){e!==void 0&&(k===void 0&&(k={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),ce(),!L&&we());}function Ne(e){let n=f.value;if(n===null||e===void 0)return;let i=n.getBoundingClientRect(),y=q(e,H(),{top:i.top,bottom:i.bottom});if(y!==void 0){let I=Math.max(0,n.scrollHeight-n.clientHeight),A=Math.min(I,Math.max(0,n.scrollTop+y));M(A),n.scrollTop=A,o$1=n.scrollTop,K=void 0;}}function rt(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function De(){C$1?.behavior==="smooth"&&(C$1=void 0),Z=false,L||(L=true,ee+=1),B$1!==void 0&&(clearTimeout(B$1),B$1=void 0);}function Le(){let e=f.value;e===null||ee===te||(k!==void 0&&x(),j$1=true,e.scrollTop<=rt()&&ye()&&ke());}function nt(){w=void 0,K=void 0,B$1!==void 0&&(clearTimeout(B$1),B$1=void 0),x(),L=false,Z=false,F=false,ie=void 0,X=void 0,ee+=1,te=-1,he=-1,j$1=true,oe=false,W=false,C$1=void 0;}function ot(){F||(B$1!==void 0&&(clearTimeout(B$1),B$1=void 0),L=false,Z=false,k!==void 0&&(k.attempts=0),we());}function Me(){F||(B$1!==void 0&&clearTimeout(B$1),B$1=setTimeout(()=>{B$1=void 0,ot();},Dt));}function it(){C$1=void 0,ot();}function at(e){F=true,De(),ie=e.touches?.[0]?.clientY;}function st(e){let n=e.touches?.[0]?.clientY;n!==void 0&&(ie!==void 0&&n>ie?Le():ie!==void 0&&n<ie&&l(),ie=n);}function He(){F=false,ie=void 0,Me();}function lt(e){De(),e.deltaY<0?Le():e.deltaY>0&&l(),Me();}function dt(e){e.pointerType!=="touch"&&(De(),X=e.clientY,Me());}function ut(e){e.pointerType==="touch"||!L||X===void 0||(e.clientY<X?Le():e.clientY>X&&l(),X=e.clientY,Me());}function Be(e){e.pointerType!=="touch"&&(X=void 0,Me());}function ct(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():l(),Me());}function Fe(e="auto"){let n=f.value;if(n===null)return;K=void 0,x();let i=Math.max(0,n.scrollHeight-n.clientHeight);M(i,e),n.scrollTo?.({top:i,behavior:e}),n.scrollTop!==i&&(n.scrollTop=i),o$1=n.scrollTop,T.clear(),ae();}function ft(){let e=f.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function Ht(){let e=f.value;return ft()&&e!==null&&e.scrollHeight>e.clientHeight+1}function Bt(e,n={}){let i=f.value,y=_.get(e);if(i===null||y===void 0||!i.contains(y)||i.clientHeight<=0)return false;x();let I=i.getBoundingClientRect(),A=y.getBoundingClientRect(),D=n.block??"center",Q;D==="start"?Q=i.scrollTop+A.top-I.top:D==="end"?Q=i.scrollTop+A.bottom-I.bottom:D==="nearest"?A.top>=I.top&&A.bottom<=I.bottom?Q=i.scrollTop:A.top<I.top?Q=i.scrollTop+A.top-I.top:Q=i.scrollTop+A.bottom-I.bottom:Q=j({currentScrollTop:i.scrollTop,scrollHeight:i.scrollHeight,targetHeight:A.height,targetTop:A.top,viewportHeight:i.clientHeight,viewportTop:I.top});let Ee=Math.max(0,i.scrollHeight-i.clientHeight),be=Math.min(Ee,Math.max(0,Q));K=void 0;let xe=n.behavior??"auto";return M(be,xe),i.scrollTo?.({top:be,behavior:xe}),i.scrollTop!==be&&(i.scrollTop=be),o$1=i.scrollTop,ae(),true}function Ft(){T.clear();}function _t(){W=true,ne.value=false;}function jt(){W=false,le();}function Kt(e,n){let i=_.get(e);if(i!==void 0&&i!==n&&(R?.unobserve(i),E?.unobserve?.(i),h.delete(i),P.delete(e)),n===null){_.delete(e),P.delete(e);return}_.set(e,n),h.set(n,e),R?.observe(n),E?.observe(n),le();}function Ut(e,n,i){let y=g$1.get(e);if(i===null){g$1.delete(e);return}g$1.set(e,{element:i,label:n}),re===e&&i.style.setProperty("opacity",String(s)),y?.element!==i&&(i.dataset.imThreadDateSeparator=e);}return provide(ze,{registerMessageNode:Kt,registerDateNode:Ut}),watch(()=>t.contentKey,(e,n)=>{if(e===n)return;nt();let i=f.value;i!==null&&(o$1=i.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,n)=>{let i=f.value;if(i===null)return;let y=new Set(n);n.length>0&&e.length>0&&!e.some(Ie=>y.has(Ie))&&nt();let A=i.getBoundingClientRect(),D=p(w,H(),{top:A.top,bottom:A.bottom}),Q=ne.value,Ee=n[n.length-1],be=Ee===void 0?-1:e.indexOf(Ee),xe=be<0?[]:e.slice(be+1).filter(Ie=>!y.has(Ie)),mt=W||t.loadingNewer,qt=e.length===n.length&&e.every(Ie=>y.has(Ie))&&e.some((Ie,qe)=>Ie!==n[qe]);if(await nextTick(),J)return;if(qt&&Q&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!mt){Fe();return}let gt=n[0];if(gt!==void 0&&e.indexOf(gt)>0&&(oe=false,Pe(D)),xe.length>0){if(mt){W=false,k===void 0&&Ne(D),ne.value=false,le();return}(Q||xe.some(qe=>t.shouldFollowAppendedMessage?.(qe)===true))&&t.followNewMessages?Fe():T.add(xe);}le();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,n)=>{e||!n||!W||Te(()=>{t.loadingNewer||(W=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,n)=>{e||!n||!oe||Te(()=>{t.loadingOlder||(oe=false);});},{flush:"pre"}),onMounted(()=>{let e=f.value;if(e!==null){if(o$1=e.scrollTop,e.addEventListener("scroll",c,{passive:true}),e.addEventListener("scrollend",it,{passive:true}),e.addEventListener("touchstart",at,{passive:true}),e.addEventListener("touchmove",st,{passive:true}),e.addEventListener("touchend",He,{passive:true}),e.addEventListener("touchcancel",He,{passive:true}),e.addEventListener("wheel",lt,{passive:true}),e.addEventListener("pointerdown",dt,{passive:true}),e.addEventListener("pointermove",ut,{passive:true}),e.addEventListener("pointerup",Be,{passive:true}),e.addEventListener("pointercancel",Be,{passive:true}),e.addEventListener("keydown",ct),typeof globalThis.ResizeObserver=="function"){E=new globalThis.ResizeObserver(()=>{J||f.value===null||ae();}),E.observe(e),O.value!==null&&E.observe(O.value);for(let n of _.values())E.observe(n);}if(typeof globalThis.IntersectionObserver=="function"){R=new globalThis.IntersectionObserver(n=>{for(let i of n){let y=h.get(i.target);y!==void 0&&(i.isIntersecting?P.add(y):P.delete(y));}G=true,le();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let n of _.values())R.observe(n);}le();}}),onBeforeUnmount(()=>{J=true;let e=f.value;e!==null&&e.removeEventListener("scroll",c),e!==null&&(e.removeEventListener("scrollend",it),e.removeEventListener("touchstart",at),e.removeEventListener("touchmove",st),e.removeEventListener("touchend",He),e.removeEventListener("touchcancel",He),e.removeEventListener("wheel",lt),e.removeEventListener("pointerdown",dt),e.removeEventListener("pointermove",ut),e.removeEventListener("pointerup",Be),e.removeEventListener("pointercancel",Be),e.removeEventListener("keydown",ct)),B$1!==void 0&&clearTimeout(B$1),x(),Se(),E?.disconnect(),R?.disconnect(),q$1(),_.clear(),h.clear(),P.clear(),g$1.clear(),T.clear();}),m$1({getViewportElement:()=>f.value,clearNewMessageBadge:Ft,clearActiveDate:q$1,isAtBottom:computed(()=>ne.value),isMeasurable:ft,isScrollable:Ht,newMessageCount:computed(()=>p$1.value),prepareHistoryPageAppend:_t,cancelHistoryPageAppend:jt,trackRemoteMessageIds:(e,n)=>T.trackRemote(e,n),scrollToLatest:Fe,scrollToMessage:Bt,focusViewport:()=>f.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:f,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:O,"data-im-thread-viewport-content":""},u.default?.())])}});var Lt=Symbol("ImThreadSurfaceContext");function cr(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 fr(t){provide(Lt,t);}function Xe(){let t=inject(Lt);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var Qe=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),Ze=Object.freeze({enabled:true,maxFillPages:8}),pr=8,hr=160;function vr(t,a){return t?.conversationType===a.conversationType&&t.conversationId===a.conversationId}var Tr=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:m}){let u=t.context??Xe(),f=ref(null),O=ref(0),_=ref(true),h=[],P,g=0,o=0,d=null,w="",K="",E="",R=false,G=false,S=ref(false),$=ref(""),J=ref(false),C,re,s=computed(()=>u.getState()),W=computed(()=>s.value.pageVisible??u.isPageVisible?.()??true),oe=computed(()=>s.value.pageEngaged??u.isPageEngaged?.()??true),j=computed(()=>vr(s.value.activeConversation,t.conversation)),L=computed(()=>({...Qe,...t.viewportOptions})),Z=computed(()=>{let r=t.initialViewportOptions.maxFillPages??Ze.maxFillPages;return {enabled:t.initialViewportOptions.enabled??Ze.enabled,maxFillPages:Number.isFinite(r)?Math.max(0,Math.floor(r)):Ze.maxFillPages}}),F=computed(()=>!j.value||!s.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ee=computed(()=>j.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(){C!==void 0&&(clearTimeout(C),C=void 0),re!==void 0&&(clearTimeout(re),re=void 0);}function B(r=false){if(he(),J.value=false,r){f.value?.clearActiveDate(),$.value="";return}re=setTimeout(()=>{re=void 0,!J.value&&(f.value?.clearActiveDate(),$.value="");},hr);}function ie(r){if(r===null){B();return}he(),$.value=r.label,J.value=true;let l=L.value.activeDateIdleDelay,c=Number.isFinite(l)?Math.max(0,l):Qe.activeDateIdleDelay;C=setTimeout(()=>{C=void 0,B();},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 !j.value||s.value.loading||!s.value.hasOlder?Promise.resolve(0):X({kind:"load-older",source:r},()=>u.actions.loadOlder())}function z(){let r=u.actions.loadNewer,l=s.value.loadingNewer??s.value.loading;return !j.value||l||!s.value.hasNewer||r===void 0?Promise.resolve(0):X({kind:"load-newer"},()=>r())}async function ne(r){for(let l=0;l<pr;l+=1){if(!j.value)return;let c=r==="older"?s.value.hasOlder:s.value.hasNewer,M=r==="older"?s.value.olderError:s.value.newerError;if(!c||M!==null||(r==="older"?await k("user-scroll"):await z())>0)return;let x=r==="older"?s.value.hasOlder:s.value.hasNewer,Y=r==="older"?s.value.olderError:s.value.newerError;if(!x||Y!==null)return}}async function p(){return !j.value||u.actions.loadNewer===void 0?0:X({kind:"load-newer"},()=>u.actions.retryNewer?.()??u.actions.loadNewer?.({force:!0})??Promise.resolve(0))}async function T(){if(!j.value)return 0;let r=F.value,l=++g;d=null,E="";let c;try{c=await X({kind:"retry-older"},()=>u.actions.retryOlder?.()??u.actions.loadOlder({force:!0}));}catch(M){throw ae(r,l)&&(E=r),M}return ae(r,l)&&!S.value&&(d=null,Re()),c}async function v(){if(!j.value)return false;let r=F.value,l=++o;return ye(true),R=true,w=r,K=Se(s.value.entryUnread),!await X({kind:"jump-to-latest"},()=>u.actions.jumpToLatest?.()??Promise.resolve(!s.value.isHistoryWindow))||!q(r,l)||(await nextTick(),!q(r,l))?false:(f.value?.scrollToLatest(),true)}function H(r){_.value=r.isAtBottom,O.value=r.newMessageCount,Re();}function b(r,l){return f.value?.scrollToMessage(r,l)??false}function q(r,l){return !G&&o===l&&F.value===r&&j.value}async function V(r,l,c,M){for(let N=0;N<60;N+=1){if(!q(r,l))return false;if(b(c,M))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}async function U(r,l,c){let M=f.value;if(M===null||!M.isMeasurable()||M.isScrollable())return true;let N=0,x=!s.value.hasOlder,Y=!s.value.hasNewer||u.actions.loadNewer===void 0,ce=async()=>(await nextTick(),await nextTick(),V(r,l,c,{behavior:"auto",block:"center"})),de=async ue=>{if(!q(r,l)||N>=Z.value.maxFillPages)return false;let Pe=0;if(ue==="older"){if(x||!s.value.hasOlder)return false;Pe=await k(),x=!s.value.hasOlder;}else {if(Y||!s.value.hasNewer)return false;M.prepareHistoryPageAppend();try{Pe=await z();}catch(Ne){throw M.cancelHistoryPageAppend(),Ne}Pe<=0&&!s.value.hasNewer&&M.cancelHistoryPageAppend(),Y=!s.value.hasNewer;}return N+=1,Pe>0?ce():!(ue==="older"?x:Y)};!x&&!await de("older")&&(x=true),!Y&&!await de("newer")&&(Y=true);let we="older";for(;q(r,l)&&N<Z.value.maxFillPages&&M.isMeasurable()&&!M.isScrollable()&&(!x||!Y);){let ue=we==="older"?x?"newer":"older":Y?"older":"newer";we=ue==="older"?"newer":"older",await de(ue)||(ue==="older"?x=true:Y=true);}return q(r,l)}async function Oe(r,l={behavior:"auto",block:"center"}){if(!j.value||r==="")return false;let c=F.value,M=++o;if(!te.value.includes(r)){let Y=u.actions.loadAround;if(Y===void 0||!await X({kind:"locate-message",messageId:r},()=>Y(r))||!q(c,M))return false}return !await V(c,M,r,{...l,behavior:"auto"})||!await U(c,M,r)?false:V(c,M,r,l)}function Ve(){P!==void 0&&(clearTimeout(P),P=void 0);}function ve(){if(Ve(),!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):Qe.visibleReadDelay;P=setTimeout(()=>{if(P=void 0,!j.value||!oe.value)return;let c=h[h.length-1];if(c===void 0)return;let M=r.resolveTarget===void 0?c:r.resolveTarget(c);M!=null&&Promise.resolve(r.markRead(M)).catch(N=>{t.hooks?.onError?.({kind:"visible-range",messageIds:h},N);});},l);}function Ue(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?ve():Re();}function ae(r,l){return !G&&g===l&&F.value===r&&!R}function Te(r,l){ae(r,l)&&(w=r,K=Se(s.value.entryUnread),S.value=true,ve());}function Se(r){return r.state!=="located"?r.state:`${r.state}:${r.firstMessageId}`}async function le(r,l,c){for(let M=0;M<60;M+=1){if(!ae(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(x=>window.requestAnimationFrame(()=>x()));}return false}function Re(){let r=F.value,l=Se(s.value.entryUnread);if(r===""||s.value.loading||s.value.error!==null&&s.value.messages.length===0||w===r&&(K===l||R)||E===r||d!==null)return;if(!Z.value.enabled){w=r,K=l,S.value=true,ve();return}let c=++g;R=false,S.value=false;let M=(async()=>{if(await nextTick(),!ae(r,c))return;let N=f.value;if(N===null||!N.isMeasurable())return;let x=s.value.entryUnread;if(x.state==="located"&&!te.value.includes(x.firstMessageId))return;let Y=x.state==="located"?await le(r,c,x.firstMessageId):false;if(x.state==="located"&&!Y)return;Y||N.scrollToLatest();let ce=0;for(;ae(r,c)&&ce<Z.value.maxFillPages&&s.value.error===null&&s.value.hasOlder&&N.isMeasurable()&&!N.isScrollable();)if(await k(),!ae(r,c)||(ce+=1,await nextTick(),await nextTick(),!N.isMeasurable()))return;if(!ae(r,c)||!N.isMeasurable())return;let de=s.value.entryUnread;if(de.state==="located"){if(!te.value.includes(de.firstMessageId)||!await le(r,c,de.firstMessageId))return}else N.scrollToLatest();await nextTick(),Te(r,c);})().catch(()=>{ae(r,c)&&(E=r);}).finally(()=>{d===M&&(d=null);});d=M;}function ye(r,l=false){g+=1,d=null,R=false,S.value=r,r||(w="",K="",l||(E="")),Ve();}function ke(){if(S.value)return;let r=F.value;R=true,g+=1,d=null,w=r,S.value=true,ve();}let Ce=Object.freeze({getViewportElement:()=>f.value?.getViewportElement()??null,loadOlder:k,retryOlder:T,loadNewer:z,retryNewer:p,jumpToLatest:v,scrollToMessage:b,locateMessage:Oe,focusViewport:()=>f.value?.focusViewport()});return a(Ce),watch(oe,r=>{r&&S.value?ve():Ve();}),watch([()=>s.value.activeRemoteMessageRevision??0,f,F],()=>{let r=f.value;if(r===null||!j.value)return;let l=u.actions.drainActiveRemoteMessageIds?.()??[];r.trackRemoteMessageIds(l,{isAtBottom:_.value,isHistoryWindow:s.value.isHistoryWindow,isPageVisible:W.value})&&(_.value=false);},{flush:"post"}),watch([F,()=>s.value.loading,()=>s.value.error,()=>te.value.length,()=>s.value.hasOlder,()=>Se(s.value.entryUnread),Z],([r,l,c,,,M],[N,,,,,x])=>{if(r!==N&&(o+=1,ye(false),B(true),f.value?.clearNewMessageBadge(),O.value=0,_.value=true),r!==""&&r===N&&M!==x&&!R&&M.startsWith("located:")&&(w="",K="",S.value=false),r===""){ye(false);return}if(c!==null&&s.value.messages.length===0){S.value||ye(false,true);return}l||Re();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{G=true,o+=1,ye(false),B(true);}),()=>{let r={conversation:t.conversation,state:s.value,items:ee.value,actions:Ce,initialViewportSettled:F.value!==""&&(s.value.messages.length===0?!s.value.loading&&s.value.error===null&&!s.value.hasOlder:S.value&&w===F.value)},l=[m.header?.(r),m["before-list"]?.(r)];if(!j.value)l.push(m.unsupported?.(r)??h$1("div",{"data-im-thread-unsupported":""}));else if(!s.value.ready&&s.value.loading)l.push(m.loading?.(r)??h$1("div",{"data-im-thread-loading":""}));else if(s.value.error!==null&&s.value.messages.length===0)l.push(m.error?.(r)??h$1("div",{"data-im-thread-error":""}));else if(s.value.ready&&s.value.messages.length===0&&!s.value.hasOlder)l.push(m.empty?.(r)??h$1("div",{"data-im-thread-empty":""}));else {let c=h$1($e,{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:m["active-date"]!==void 0,resizeFollowEnabled:S.value,followNewMessages:W.value,shouldFollowAppendedMessage:M=>{let N=s.value.messages.find(x=>x.id===M);return N===void 0?false:u.shouldFollowMessage?.(N)===true},onReachStart:()=>{ne("older").catch(()=>{});},onReachEnd:()=>{ne("newer").catch(()=>{});},onSettled:H,onUserScroll:ke,onActiveDateChange:ie,onVisibleRange:Ue,onNewMessageCount:M=>{O.value=M;}},{default:()=>[m["viewport-before"]?.(r),h$1(Ye,{items:ee.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:m.item,"date-separator":m["date-separator"],"entry-unread":m["entry-unread"],encryption:m.encryption,system:m.system,message:m.message,"recalled-message":m["recalled-message"],"deleted-message":m["deleted-message"],"unsupported-body":m["unsupported-body"]}),m["viewport-after"]?.(r)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[m["active-date"]?.({label:$.value,visible:J.value&&$.value!==""}),c])),s.value.error!==null&&l.push(m.error?.(r)??h$1("div",{"data-im-thread-error":""}));}return l.push(m["after-list"]?.(r),m["jump-to-latest"]?.({...r,count:O.value,visible:!_.value||s.value.isHistoryWindow}),m["context-menu"]?.(r),m.composer?.(r)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},l)}}});function yr(t){let a=new Map;for(let u of t){if(a.has(u.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${u.kind}`);a.set(u.kind,u.component);}let m=Object.freeze([...a.keys()]);return Object.freeze({kinds:m,resolve:u=>a.get(u)})}var Ir=140,wr=120;function Ke(t,a){if(t.width<=0||t.height<=0)return 0;let m=Math.max(0,Math.min(t.right,a.right)-Math.max(t.left,a.left)),u=Math.max(0,Math.min(t.bottom,a.bottom)-Math.max(t.top,a.top));return Math.min(1,m*u/(t.width*t.height))}function et(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 tt(t){let a=Math.max(0,t.scrollIdleMs??Ir),m=Math.max(0,t.visibilityDwellMs??wr),u=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),f=Math.max(0,t.revealMarginPx??0),O=Math.max(0,t.preloadMarginPx??0),_=Math.max(f,O),h=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),P=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),g=new Map,o=new Map,d=reactive(new Set),w=new Set,K=new Set,E=[],R=null,G=null,S=null,$=false,J=false,C=false,re=false,s,W;function oe(){s!==void 0&&clearTimeout(s),s=void 0;}function j(){W!==void 0&&clearTimeout(W),W=void 0;}function L(p=false){if(!p&&G!==null||R===null)return;let T=R.getBoundingClientRect(),v=et(T,_);for(let[H,b]of g){let q=H.getBoundingClientRect();b.ratio=Ke(q,T),b.intersecting=b.ratio>0,b.revealIntersecting=_>0?Ke(q,v)>0:b.intersecting&&b.ratio>=u;}}function Z(p){return p.intersecting&&p.ratio>=u}function F(){for(let[p,T]of g)!T.revealIntersecting||d.has(T.key)||_>f&&(f===0&&!Z(T)||f>0&&(R===null||Ke(p.getBoundingClientRect(),et(R.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!==K.size||[...v].some(b=>!K.has(b)))&&!T)){K.clear();for(let b of v)K.add(b);t.onSettledVisibleChange?.(p.map(b=>b.item));}}function te(p,T=false){!T&&p.length===E.length&&p.every((v,H)=>v.key===E[H]?.key&&v.item===E[H]?.item)||(E=p,t.onSettledPreloadChange?.(p.map(v=>v.item)));}function he(){if(C||$)return;let p=J;J=false,L(),F();let T=R?.getBoundingClientRect(),v=T===void 0?0:(T.top+T.bottom)/2,H=[...g.entries()].filter(([,b])=>Z(b)).sort(([b],[q])=>{let V=b.getBoundingClientRect(),U=q.getBoundingClientRect();return Math.abs((V.top+V.bottom)/2-v)-Math.abs((U.top+U.bottom)/2-v)}).slice(0,P).map(([,b])=>b);if(ee(H,p),t.onSettledPreloadChange!==void 0&&T!==void 0){let b=et(T,O),q=[...g.entries()].filter(([,V])=>V.revealIntersecting).map(([V,U])=>({target:U,rect:V.getBoundingClientRect()})).filter(({target:V,rect:U})=>Z(V)||O>0&&Ke(U,b)>0).sort((V,U)=>Number(Z(U.target))-Number(Z(V.target))||Math.abs((V.rect.top+V.rect.bottom)/2-v)-Math.abs((U.rect.top+U.rect.bottom)/2-v)).slice(0,h).map(({target:V})=>V);te(q,p);}for(let b of H)w.has(b.key)||(w.add(b.key),t.onActivated?.(b.item));}function B(){C||$||(j(),W=setTimeout(()=>{W=void 0,he();},m));}function ie(){C||(J=true,X(true),te([]),L(),F(),ee([]),j(),oe(),s=setTimeout(()=>{s=void 0,X(false),B();},a));}function X(p){$!==p&&($=p,t.onScrollingChange?.(p));}function k(){R?.removeEventListener("scroll",ie),G?.disconnect(),S?.disconnect(),G=null,S=null,R=null;}function z(p=true){if(C)return;let T=t.getRoot();if(!(T===R&&R!==null)){if(te([]),k(),R=T,R===null){p&&!re&&(re=true,Promise.resolve().then(()=>{re=false,C||(z(false),B());}));return}if(R.addEventListener("scroll",ie,{passive:true}),typeof IntersectionObserver<"u"){G=new IntersectionObserver(v=>{for(let H of v){let b=g.get(H.target);b!==void 0&&(b.intersecting=H.isIntersecting,b.ratio=H.intersectionRatio,_===0&&(b.revealIntersecting=H.isIntersecting&&H.intersectionRatio>=u));}F(),B();},{root:R,threshold:[0,u,1]}),_>0&&(S=new IntersectionObserver(v=>{for(let H of v){let b=g.get(H.target);b!==void 0&&(b.revealIntersecting=H.isIntersecting);}F(),B();},{root:R,rootMargin:`${_}px 0px`,threshold:0}));for(let v of g.keys())G.observe(v);for(let v of g.keys())S?.observe(v);}else L(),F();}}function ne(p){te(E.filter(T=>T.key!==p)),d.delete(p),w.delete(p),K.delete(p);}return {register(p,T){if(C)return;let v=t.getKey(p),H=d.has(v),b=w.has(v),q=T===null?void 0:g.get(T);q!==void 0&&q.key!==v&&(o.delete(q.key),g.delete(T),ne(q.key));let V=o.get(v);if(V!==void 0&&V!==T&&(G?.unobserve(V),S?.unobserve(V),g.delete(V),o.delete(v)),T===null){V!==void 0&&(G?.unobserve(V),S?.unobserve(V),g.delete(V),o.delete(v)),ne(v);return}let U=g.get(T);if(U?.key===v&&U.item===p){z();return}g.set(T,{item:p,key:v,intersecting:U?.key===v?U.intersecting:false,ratio:U?.key===v?U.ratio:0,revealIntersecting:U?.key===v?U.revealIntersecting:false}),o.set(v,T),z(),G?.observe(T),S?.observe(T),L(true),F(),H&&t.onRevealed?.(p),b&&t.onActivated?.(p),B();},isRevealed:p=>d.has(t.getKey(p)),isActivated:p=>w.has(t.getKey(p)),isSettledVisible:p=>K.has(t.getKey(p)),isScrolling:()=>$,notifyScroll:ie,refresh(){z(),L(true),F(),B();},reset(){oe(),j(),X(false),J=false,ee([]),te([]),k(),g.clear(),o.clear(),d.clear(),w.clear();},dispose(){C||(oe(),j(),X(false),J=false,ee([]),te([]),k(),g.clear(),o.clear(),d.clear(),w.clear(),C=true);}}}function Mr(t){let a=new Map,m=new Map,u=false,f=h=>{let P=a.get(h.channel);return P===void 0?h.channel:`${h.channel}\0${P.getKey(h.item)}`},O=tt({getRoot:t.getRoot,getKey:f,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:h=>{for(let P of a.values())P.onScrollingChange?.(h);},onRevealed:h=>a.get(h.channel)?.onRevealed?.(h.item),onActivated:h=>a.get(h.channel)?.onActivated?.(h.item),onSettledPreloadChange:h=>{for(let[P,g]of a){let o=h.filter(d=>d.channel===P).map(d=>d.item);g.onSettledPreloadChange?.(o.slice(0,Math.max(0,g.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:h=>{for(let[P,g]of a){let o=h.filter(w=>w.channel===P).map(w=>w.item),d=g.maxSettledVisible===void 0?o:o.slice(0,g.maxSettledVisible);g.onSettledVisibleChange?.(d);}}});function _(h){return P=>{if(u)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(a.has(h))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${h}`);a.set(h,P);let g=new Map;m.set(h,g);let o=false,d=E=>({channel:h,item:E});function w(){for(let E of g.values())O.register(E.target,null);g.clear(),P.onScrollingChange?.(false),P.onSettledVisibleChange?.([]),P.onSettledPreloadChange?.([]);}return {register(E,R){if(o||u)return;let G=P.getKey(E),S=g.get(G);if(R===null){S!==void 0&&(O.register(S.target,null),g.delete(G));return}let $=S?.target.item===E?S.target:d(E);g.set(G,{target:$,element:R}),O.register($,R);},isRevealed:E=>O.isRevealed(d(E)),isActivated:E=>O.isActivated(d(E)),isSettledVisible:E=>O.isSettledVisible(d(E)),isScrolling:O.isScrolling,notifyScroll:O.notifyScroll,refresh:O.refresh,reset:w,dispose(){o||(w(),o=true,a.delete(h),m.delete(h));}}}}return {createFactory:_,refresh:O.refresh,dispose(){if(!u){for(let h of m.values())for(let P of h.values())O.register(P.target,null);for(let h of a.values())h.onSettledPreloadChange?.([]);m.clear(),a.clear(),O.dispose(),u=true;}}}}export{We as ImThreadBodySwitch,Ye as ImThreadItems,Tr as ImThreadSurface,$e as ImThreadViewport,cr as createImThreadSurfaceContext,yr as createMessageRendererRegistry,Mr as createThreadVisibilityTargetGroup,tt as createThreadVisibilityTargets,fr as provideImThreadSurfaceContext,Wt as useImText,Xe as useImThreadSurfaceContext,$t as useOptionalImThreadReadActions};
|
|
1
|
+
import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-OYH7COTJ.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-SEHHXKP7.js';import'./chunk-MIFIQ45I.js';import'./chunk-GAAHNTJM.js';import'./chunk-QQ23QYWK.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 Wt(t){let i=0,m=0;for(let u of t)u.kind==="video"?m+=1:i+=1;return {imageCount:i,videoCount:m}}function zt(t){return {systemMessage:i=>i.body.system!==void 0?g$1(i.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:i=>i$1(i.contentType,{locale:t.locale(),durationMs:i.body.voice?.durationMs,stickerImageType:i.body.sticker?.imageType,gameType:i.body.game?.gameType,callKind:i.body.call?.callKind,...i.body.mediaAlbum===void 0?{}:{mediaAlbum:Wt(i.body.mediaAlbum.items)}}),lastMessage:i=>i.lastMessageSummary!==void 0?h$2(i.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):i.lastMessagePreview,failureText:i=>i.failure?.displayCode!==void 0?f(i.failure.displayCode,{locale:t.locale(),mediaKind:i.failure.mediaKind,params:i.failure.params}):i.failure?.message??""}}var Ot=Symbol("ImThreadReadActions");function Vt(t){provide(Ot,t);}function Xt(){return inject(Ot,void 0)}var We=defineComponent({name:"ImThreadBodySwitch",inheritAttrs:false,props:{message:{type:Object,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{attrs:i,slots:m}){return Vt(t.readActions),()=>{let u=h(t.message),f=t.rendererRegistry.resolve(u);return f!==void 0?h$1(f,{...i,message:t.message,presentation:t.presentation}):m["unsupported-body"]!==void 0?m["unsupported-body"]({kind:u,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":u,"aria-hidden":"true"})}}});var ze=Symbol("ImThreadViewportRegistration");function kt(){return inject(ze,void 0)}var Ye=defineComponent({name:"ImThreadItems",props:{items:{type:Array,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{slots:i}){let m=kt();function u(o,d){let w=Array.isArray(d)?d:[d];return w.length===1&&isVNode(w[0])?cloneVNode(w[0],{key:o}):h$1(Fragment,{key:o},w)}function f(o){return d=>{m?.registerMessageNode(o,d instanceof HTMLElement?d:null);}}function O(o,d){return w=>{m?.registerDateNode(o,d,w instanceof HTMLElement?w:null);}}function _(o){return i.encryption?.({item:o})??h$1("div",{"data-im-thread-encryption":o.key})}function v(o){let d=O(o.key,o.label);return i["date-separator"]?.({item:o,setElement:d})??h$1("div",{ref:d,"data-im-thread-date-separator":o.key},o.label)}function P(o){return i["entry-unread"]?.({item:o})??h$1("div",{"data-im-thread-entry-unread":o.key,...o.count===void 0?{}:{"data-count":String(o.count)}})}function g(o){let d=f(o.message.id);return i.item!==void 0?i.item({item:o,setElement:d}):i.message!==void 0?i.message({item:o,setElement:d}):o.message.deletedForEveryone!==void 0?i["deleted-message"]?.({item:o,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.message.recalled!==void 0?i["recalled-message"]?.({item:o,setElement:d})??h$1("article",{ref:d,"data-im-thread-message-id":o.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):o.kind==="system"&&i.system!==void 0?i.system({item:o,setElement:d}):h$1("article",{ref:d,"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(We,{message:o.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":i["unsupported-body"]===void 0?void 0:w=>i["unsupported-body"]?.(w)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(o=>{switch(o.kind){case "encryption":return i.item!==void 0?u(o.key,i.item({item:o})):u(o.key,_(o));case "date-separator":return i.item!==void 0?u(o.key,i.item({item:o,setElement:O(o.key,o.label)})):u(o.key,v(o));case "entry-unread":return i.item!==void 0?u(o.key,i.item({item:o})):u(o.key,P(o));case "system":case "message":return u(o.key,g(o))}return o}))}});var Lt=120,lr=500,xe=.5,dr=8;function $e(t){let i=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(i!==void 0&&Number.isFinite(i)&&i>0?i:1)}var Xe=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:i,expose:m$1,slots:u}){let f=ref(null),O=ref(null),_=new Map,v=new Map,P=new Set,g$1=new Map,o$1=0,d=[],w,K,E,R,G=false,S,$=new Set,J=false,C$1,re="",s=1,W=false,oe=false,j$1=true,L=false,Z=false,F=false,ee=0,te=-1,pe=-1,B$1,ie,X,k,z$1,ne=ref(true),p$1=ref(0),T=C(e=>{p$1.value=e,i("new-message-count",e);});function h(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=_.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));re!==""&&re!==e&&g$1.get(re)?.element.style.removeProperty("opacity"),re=e,s=a,e!==""&&g$1.get(e)?.element.style.setProperty("opacity",String(a));}function q$1(){b();}function V(){let e=f.value;if(J||e===null||!t.activeDateEnabled)return;let n=[...g$1.entries()].filter(([,A])=>e.contains(A.element)).map(([A,D])=>{let Q=D.element.getBoundingClientRect();return {key:A,label:D.label,top:Q.top,height:Q.height}}).sort((A,D)=>A.top-D.top),a=e.getBoundingClientRect(),y=n.find(A=>A.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){q$1(),i("active-date-change",null);return}b(I.inlineDateKey,I.inlineOpacity),i("active-date-change",I);}function U(e){K={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Oe(e){let n=K;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)<=$e(e)}function Ve(e){return Oe(e)||C$1!==void 0&&(C$1.behavior==="smooth"||Math.abs(e.scrollTop-C$1.targetTop)<=$e(e))?0:e.scrollTop-o$1}function ve(e,n){n!==0&&(o$1=e.scrollTop-n,C$1=void 0,c());}function Ue(e,n){let a=Ve(e);if(k!==void 0)return k.expectedOffset-=a,ce(),ve(e,a),L||ue(),false;let y=K;if(y===void 0)return false;let I=w,A=I===void 0?void 0:H([I.id])[0],D=e.scrollTop-y.scrollTop,Q=Oe(e)?0:D,Pe=I===void 0||A===void 0?0:(A.anchorTop??A.top)-n.top-I.offset+D;return y.scrollHeight!==e.scrollHeight||y.width!==e.clientWidth||y.height!==e.clientHeight||Math.abs(Pe)>xe?(K=void 0,!W&&!t.loadingNewer&&t.resizeFollowEnabled&&ne.value&&Math.abs(Q)<=xe?(Fe(),true):(I!==void 0&&Ne({...I,offset:I.offset-Q}),ve(e,a),false)):false}function ae(){let e=f.value;if(J||e===null)return;let n=e.getBoundingClientRect();if(Ue(e,n))return;let a=R!==void 0&&G?t.messageIds.filter(D=>P.has(D)):t.messageIds,y=H(a);if(R!==void 0&&G&&y.length===0){ne.value=h(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),A=I.length!==d.length||I.some((D,Q)=>d[Q]!==D);d=Object.freeze(I),w=o(y,{top:n.top,bottom:n.bottom}),U(e),T.acknowledgeVisible(I),ne.value=h(e),A&&i("visible-range",d),i("settled",{visibleMessageIds:d,...d.length===0?{}:{newestVisibleMessageId:d[d.length-1]},isAtBottom:ne.value,newMessageCount:p$1.value});}function he(e){if($.add(e),S!==void 0)return;let n=()=>{S=void 0;let a=[...$];$.clear(),a.forEach(y=>y());};typeof globalThis.requestAnimationFrame=="function"?S=globalThis.requestAnimationFrame(n):S=globalThis.setTimeout(n,0);}function Me(){S!==void 0&&(typeof S=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(S):globalThis.clearTimeout(S),S=void 0,$.clear());}function le(){he(ae);}function Se(){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,U(e));}function Te(){return j$1&&k===void 0&&!oe&&!t.loadingOlder}function ke(){Se(),j$1=false,te=ee,oe=true,i("reach-start"),he(()=>{t.loadingOlder||(oe=false);});}function Ce(e){return t.hasNewer&&!W&&!t.loadingOlder&&!t.loadingNewer&&h(e)}function r(){W=true,ne.value=false,pe=ee,i("reach-end"),he(()=>{t.loadingNewer||(W=false);});}function l(){let e=f.value;e===null||ee===pe||!Ce(e)||r();}function c(){let e=f.value;if(J||e===null)return;let n=e.scrollTop,a=Oe(e),y=C$1,I=false;if(y!==void 0){let D=Math.abs(n-y.targetTop)<=$e(e);I=y.behavior==="smooth"||D,(y.behavior!=="smooth"||D)&&(C$1=void 0);}!I&&!a&&!L&&k===void 0&&n!==o$1&&(L=true,Z=true,ee+=1);let A=L&&!I&&!a&&n!==o$1;if(A&&(i("user-scroll"),he(V)),L&&!F&&we(),!j$1&&Z&&ee!==te&&n<o$1&&n>nt()&&(j$1=true),k!==void 0&&!I)if(L){let D=Y();D!==void 0&&(k.expectedOffset=D);}else ce(),ue();Te()&&A&&n>=0&&m({previousScrollTop:o$1,currentScrollTop:n,topThreshold:t.olderPrefetchThreshold})&&ke(),A&&Ce(e)&&z({previousScrollTop:o$1,currentScrollTop:n,isAtBottom:h(e),isHistoryWindow:t.hasNewer,isPageSettling:I})&&r(),o$1=n,le();}function M(e,n="auto"){C$1={targetTop:e,behavior:n};}function N(e){let n=k,a=O.value;if(!(n===void 0||a===null)){if(n.visualOffset=Math.abs(e)<=xe?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 x(){z$1!==void 0&&(clearTimeout(z$1),z$1=void 0),k!==void 0&&k.visualOffset!==0&&(w=void 0,K=void 0);let e=O.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),k=void 0,C$1=void 0;}function Y(){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 ce(){let e=k,n=Y();if(e===void 0||n===void 0)return;let a=e.expectedOffset-n;Math.abs(a)<=xe||(N(e.visualOffset+a),e.committed=false,e.attempts=0);}function de(){z$1!==void 0&&clearTimeout(z$1),z$1=setTimeout(()=>{z$1=void 0,!(L||k?.committed!==true)&&x();},lr);}function Ie(){let e=f.value,n=k;if(J||e===null||n===void 0||L)return;let a=n.visualOffset;if(Math.abs(a)<=xe){n.committed=true,de();return}let y=Math.max(0,e.scrollHeight-e.clientHeight),I=Math.min(y,Math.max(0,e.scrollTop-a));if(M(I),e.scrollTop=I,Math.abs(e.scrollTop-I)>xe){C$1=void 0,n.committed=false,n.attempts+=1,n.attempts<dr?ue():(x(),C$1=void 0,o$1=e.scrollTop);return}N(0),o$1=e.scrollTop,n.expectedOffset=Y()??n.expectedOffset,n.committed=true,n.attempts=0,de();}function ue(){z$1!==void 0&&clearTimeout(z$1),z$1=setTimeout(()=>{z$1=void 0,Ie();},Lt);}function Re(e){e!==void 0&&(k===void 0&&(k={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),ce(),!L&&Ie());}function Ne(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),A=Math.min(I,Math.max(0,n.scrollTop+y));M(A),n.scrollTop=A,o$1=n.scrollTop,K=void 0;}}function nt(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function De(){C$1?.behavior==="smooth"&&(C$1=void 0),Z=false,L||(L=true,ee+=1),B$1!==void 0&&(clearTimeout(B$1),B$1=void 0);}function Le(){let e=f.value;e===null||ee===te||(k!==void 0&&x(),j$1=true,e.scrollTop<=nt()&&Te()&&ke());}function ot(){w=void 0,K=void 0,B$1!==void 0&&(clearTimeout(B$1),B$1=void 0),x(),L=false,Z=false,F=false,ie=void 0,X=void 0,ee+=1,te=-1,pe=-1,j$1=true,oe=false,W=false,C$1=void 0;}function it(){F||(B$1!==void 0&&(clearTimeout(B$1),B$1=void 0),L=false,Z=false,k!==void 0&&(k.attempts=0),Ie());}function we(){F||(B$1!==void 0&&clearTimeout(B$1),B$1=setTimeout(()=>{B$1=void 0,it();},Lt));}function at(){C$1=void 0,it();}function st(e){F=true,De(),ie=e.touches?.[0]?.clientY;}function lt(e){let n=e.touches?.[0]?.clientY;n!==void 0&&(ie!==void 0&&n>ie?Le():ie!==void 0&&n<ie&&l(),ie=n);}function He(){F=false,ie=void 0,we();}function dt(e){De(),e.deltaY<0?Le():e.deltaY>0&&l(),we();}function ut(e){e.pointerType!=="touch"&&(De(),X=e.clientY,we());}function ct(e){e.pointerType==="touch"||!L||X===void 0||(e.clientY<X?Le():e.clientY>X&&l(),X=e.clientY,we());}function Be(e){e.pointerType!=="touch"&&(X=void 0,we());}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():l(),we());}function Fe(e="auto"){let n=f.value;if(n===null)return;K=void 0,x();let a=Math.max(0,n.scrollHeight-n.clientHeight);M(a,e),n.scrollTo?.({top:a,behavior:e}),n.scrollTop!==a&&(n.scrollTop=a),o$1=n.scrollTop,T.clear(),ae();}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=_.get(e);if(a===null||y===void 0||!a.contains(y)||a.clientHeight<=0)return false;x();let I=a.getBoundingClientRect(),A=y.getBoundingClientRect(),D=n.block??"center",Q;D==="start"?Q=a.scrollTop+A.top-I.top:D==="end"?Q=a.scrollTop+A.bottom-I.bottom:D==="nearest"?A.top>=I.top&&A.bottom<=I.bottom?Q=a.scrollTop:A.top<I.top?Q=a.scrollTop+A.top-I.top:Q=a.scrollTop+A.bottom-I.bottom:Q=j({currentScrollTop:a.scrollTop,scrollHeight:a.scrollHeight,targetHeight:A.height,targetTop:A.top,viewportHeight:a.clientHeight,viewportTop:I.top});let Pe=Math.max(0,a.scrollHeight-a.clientHeight),ye=Math.min(Pe,Math.max(0,Q));K=void 0;let Ee=n.behavior??"auto";return M(ye,Ee),a.scrollTo?.({top:ye,behavior:Ee}),a.scrollTop!==ye&&(a.scrollTop=ye),o$1=a.scrollTop,ae(),true}function _t(){T.clear();}function jt(){W=true,ne.value=false;}function Kt(){W=false,le();}function Ut(e,n){let a=_.get(e);if(a!==void 0&&a!==n&&(R?.unobserve(a),E?.unobserve?.(a),v.delete(a),P.delete(e)),n===null){_.delete(e),P.delete(e);return}_.set(e,n),v.set(n,e),R?.observe(n),E?.observe(n),le();}function qt(e,n,a){let y=g$1.get(e);if(a===null){g$1.delete(e);return}g$1.set(e,{element:a,label:n}),re===e&&a.style.setProperty("opacity",String(s)),y?.element!==a&&(a.dataset.imThreadDateSeparator=e);}return provide(ze,{registerMessageNode:Ut,registerDateNode:qt}),watch(()=>t.contentKey,(e,n)=>{if(e===n)return;ot();let a=f.value;a!==null&&(o$1=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(be=>y.has(be))&&ot();let A=a.getBoundingClientRect(),D=p(w,H(),{top:A.top,bottom:A.bottom}),Q=ne.value,Pe=n[n.length-1],ye=Pe===void 0?-1:e.indexOf(Pe),Ee=ye<0?[]:e.slice(ye+1).filter(be=>!y.has(be)),gt=W||t.loadingNewer,Gt=e.length===n.length&&e.every(be=>y.has(be))&&e.some((be,qe)=>be!==n[qe]);if(await nextTick(),J)return;if(Gt&&Q&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!gt){Fe();return}let pt=n[0];if(pt!==void 0&&e.indexOf(pt)>0&&(oe=false,Re(D)),Ee.length>0){if(gt){W=false,k===void 0&&Ne(D),ne.value=false,le();return}(Q||Ee.some(qe=>t.shouldFollowAppendedMessage?.(qe)===true))&&t.followNewMessages?Fe():T.add(Ee);}le();},{flush:"pre"}),watch(()=>t.loadingNewer,(e,n)=>{e||!n||!W||he(()=>{t.loadingNewer||(W=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,n)=>{e||!n||!oe||he(()=>{t.loadingOlder||(oe=false);});},{flush:"pre"}),onMounted(()=>{let e=f.value;if(e!==null){if(o$1=e.scrollTop,e.addEventListener("scroll",c,{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"){E=new globalThis.ResizeObserver(()=>{J||f.value===null||ae();}),E.observe(e),O.value!==null&&E.observe(O.value);for(let n of _.values())E.observe(n);}if(typeof globalThis.IntersectionObserver=="function"){R=new globalThis.IntersectionObserver(n=>{for(let a of n){let y=v.get(a.target);y!==void 0&&(a.isIntersecting?P.add(y):P.delete(y));}G=true,le();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let n of _.values())R.observe(n);}le();}}),onBeforeUnmount(()=>{J=true;let e=f.value;e!==null&&e.removeEventListener("scroll",c),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)),B$1!==void 0&&clearTimeout(B$1),x(),Me(),E?.disconnect(),R?.disconnect(),q$1(),_.clear(),v.clear(),P.clear(),g$1.clear(),T.clear();}),m$1({getViewportElement:()=>f.value,clearNewMessageBadge:_t,clearActiveDate:q$1,isAtBottom:computed(()=>ne.value),isMeasurable:mt,isScrollable:Bt,newMessageCount:computed(()=>p$1.value),prepareHistoryPageAppend:jt,cancelHistoryPageAppend:Kt,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:O,"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 Je(){let t=inject(Ht);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}var Ze=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),et=Object.freeze({enabled:true,maxFillPages:8}),vr=8,hr=160;function Tr(t,i){return t?.conversationType===i.conversationType&&t.conversationId===i.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:i$1,slots:m}){let u=t.context??Je(),f=ref(null),O=ref(0),_=ref(true),v=[],P,g=0,o=0,d=null,w="",K="",E="",R=false,G=false,S=ref(false),$=ref(""),J=ref(false),C,re,s=computed(()=>u.getState()),W=computed(()=>s.value.pageVisible??u.isPageVisible?.()??true),oe=computed(()=>s.value.pageEngaged??u.isPageEngaged?.()??true),j=computed(()=>Tr(s.value.activeConversation,t.conversation)),L=computed(()=>({...Ze,...t.viewportOptions})),Z=computed(()=>{let r=t.initialViewportOptions.maxFillPages??et.maxFillPages;return {enabled:t.initialViewportOptions.enabled??et.enabled,maxFillPages:Number.isFinite(r)?Math.max(0,Math.floor(r)):et.maxFillPages}}),F=computed(()=>!j.value||!s.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ee=computed(()=>j.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 pe(){C!==void 0&&(clearTimeout(C),C=void 0),re!==void 0&&(clearTimeout(re),re=void 0);}function B(r=false){if(pe(),J.value=false,r){f.value?.clearActiveDate(),$.value="";return}re=setTimeout(()=>{re=void 0,!J.value&&(f.value?.clearActiveDate(),$.value="");},hr);}function ie(r){if(r===null){B();return}pe(),$.value=r.label,J.value=true;let l=L.value.activeDateIdleDelay,c=Number.isFinite(l)?Math.max(0,l):Ze.activeDateIdleDelay;C=setTimeout(()=>{C=void 0,B();},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 !j.value||s.value.loading||!s.value.hasOlder?Promise.resolve(0):X({kind:"load-older",source:r},()=>u.actions.loadOlder())}function z(){let r=u.actions.loadNewer,l=s.value.loadingNewer??s.value.loading;return !j.value||l||!s.value.hasNewer||r===void 0?Promise.resolve(0):X({kind:"load-newer"},()=>r())}async function ne(r){for(let l=0;l<vr;l+=1){if(!j.value)return;let c=r==="older"?s.value.hasOlder:s.value.hasNewer,M=r==="older"?s.value.olderError:s.value.newerError;if(!c||M!==null||(r==="older"?await k("user-scroll"):await z())>0)return;let x=r==="older"?s.value.hasOlder:s.value.hasNewer,Y=r==="older"?s.value.olderError:s.value.newerError;if(!x||Y!==null)return}}async function p(){return !j.value||u.actions.loadNewer===void 0?0:X({kind:"load-newer"},()=>u.actions.retryNewer?.()??u.actions.loadNewer?.({force:!0})??Promise.resolve(0))}async function T(){if(!j.value)return 0;let r=F.value,l=++g;d=null,E="";let c;try{c=await X({kind:"retry-older"},()=>u.actions.retryOlder?.()??u.actions.loadOlder({force:!0}));}catch(M){throw ae(r,l)&&(E=r),M}return ae(r,l)&&!S.value&&(d=null,Se()),c}async function h(){if(!j.value)return false;let r=F.value,l=++o;return Te(true),R=true,w=r,K=Me(s.value.entryUnread),!await X({kind:"jump-to-latest"},()=>u.actions.jumpToLatest?.()??Promise.resolve(!s.value.isHistoryWindow))||!q(r,l)||(await nextTick(),!q(r,l))?false:(f.value?.scrollToLatest(),true)}function H(r){_.value=r.isAtBottom,O.value=r.newMessageCount,Se();}function b(r,l){return f.value?.scrollToMessage(r,l)??false}function q(r,l){return !G&&o===l&&F.value===r&&j.value}async function V(r,l,c,M){for(let N=0;N<60;N+=1){if(!q(r,l))return false;if(b(c,M))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}async function U(r,l,c){let M=f.value;if(M===null||!M.isMeasurable()||M.isScrollable())return true;let N=0,x=!s.value.hasOlder,Y=!s.value.hasNewer||u.actions.loadNewer===void 0,ce=async()=>(await nextTick(),await nextTick(),V(r,l,c,{behavior:"auto",block:"center"})),de=async ue=>{if(!q(r,l)||N>=Z.value.maxFillPages)return false;let Re=0;if(ue==="older"){if(x||!s.value.hasOlder)return false;Re=await k(),x=!s.value.hasOlder;}else {if(Y||!s.value.hasNewer)return false;M.prepareHistoryPageAppend();try{Re=await z();}catch(Ne){throw M.cancelHistoryPageAppend(),Ne}Re<=0&&!s.value.hasNewer&&M.cancelHistoryPageAppend(),Y=!s.value.hasNewer;}return N+=1,Re>0?ce():!(ue==="older"?x:Y)};!x&&!await de("older")&&(x=true),!Y&&!await de("newer")&&(Y=true);let Ie="older";for(;q(r,l)&&N<Z.value.maxFillPages&&M.isMeasurable()&&!M.isScrollable()&&(!x||!Y);){let ue=Ie==="older"?x?"newer":"older":Y?"older":"newer";Ie=ue==="older"?"newer":"older",await de(ue)||(ue==="older"?x=true:Y=true);}return q(r,l)}async function Oe(r,l={behavior:"auto",block:"center"}){if(!j.value||r==="")return false;let c=F.value,M=++o;if(!te.value.includes(r)){let Y=u.actions.loadAround;if(Y===void 0||!await X({kind:"locate-message",messageId:r},()=>Y(r))||!q(c,M))return false}return !await V(c,M,r,{...l,behavior:"auto"})||!await U(c,M,r)?false:V(c,M,r,l)}function Ve(){P!==void 0&&(clearTimeout(P),P=void 0);}function ve(){if(Ve(),!S.value)return;let r=t.readActions;if(r===void 0||v.length===0)return;let l=Number.isFinite(L.value.visibleReadDelay)?Math.max(0,L.value.visibleReadDelay):Ze.visibleReadDelay;P=setTimeout(()=>{if(P=void 0,!j.value||!oe.value)return;let c=v[v.length-1];if(c===void 0)return;let M=r.resolveTarget===void 0?c:r.resolveTarget(c);M!=null&&Promise.resolve(r.markRead(M)).catch(N=>{t.hooks?.onError?.({kind:"visible-range",messageIds:v},N);});},l);}function Ue(r){v=Object.freeze([...r]);let l={kind:"visible-range",messageIds:v};t.hooks?.beforeAction?.(l);try{u.actions.onVisibleRange?.(v),t.hooks?.afterAction?.(l,void 0);}catch(c){throw t.hooks?.onError?.(l,c),c}S.value?ve():Se();}function ae(r,l){return !G&&g===l&&F.value===r&&!R}function he(r,l){ae(r,l)&&(w=r,K=Me(s.value.entryUnread),S.value=true,ve());}function Me(r){return r.state!=="located"?r.state:`${r.state}:${r.firstMessageId}`}async function le(r,l,c){for(let M=0;M<60;M+=1){if(!ae(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(x=>window.requestAnimationFrame(()=>x()));}return false}function Se(){let r=F.value,l=Me(s.value.entryUnread);if(r===""||s.value.loading||s.value.error!==null&&s.value.messages.length===0||w===r&&(K===l||R)||E===r||d!==null)return;if(!Z.value.enabled){w=r,K=l,S.value=true,ve();return}let c=++g;R=false,S.value=false;let M=(async()=>{if(await nextTick(),!ae(r,c))return;let N=f.value;if(N===null||!N.isMeasurable())return;let x=s.value.entryUnread;if(x.state==="located"&&!te.value.includes(x.firstMessageId))return;let Y=x.state==="located"?await le(r,c,x.firstMessageId):false;if(x.state==="located"&&!Y)return;Y||N.scrollToLatest();let ce=0;for(;ae(r,c)&&ce<Z.value.maxFillPages&&s.value.error===null&&s.value.hasOlder&&N.isMeasurable()&&!N.isScrollable();)if(await k(),!ae(r,c)||(ce+=1,await nextTick(),await nextTick(),!N.isMeasurable()))return;if(!ae(r,c)||!N.isMeasurable())return;let de=s.value.entryUnread;if(de.state==="located"){if(!te.value.includes(de.firstMessageId)||!await le(r,c,de.firstMessageId))return}else N.scrollToLatest();await nextTick(),he(r,c);})().catch(()=>{ae(r,c)&&(E=r);}).finally(()=>{d===M&&(d=null);});d=M;}function Te(r,l=false){g+=1,d=null,R=false,S.value=r,r||(w="",K="",l||(E="")),Ve();}function ke(){if(S.value)return;let r=F.value;R=true,g+=1,d=null,w=r,S.value=true,ve();}let Ce=Object.freeze({getViewportElement:()=>f.value?.getViewportElement()??null,loadOlder:k,retryOlder:T,loadNewer:z,retryNewer:p,jumpToLatest:h,scrollToMessage:b,locateMessage:Oe,focusViewport:()=>f.value?.focusViewport()});return i$1(Ce),watch(oe,r=>{r&&S.value?ve():Ve();}),watch([()=>s.value.activeRemoteMessageRevision??0,f,F],()=>{let r=f.value;if(r===null||!j.value)return;let l=u.actions.drainActiveRemoteMessageIds?.()??[];r.trackRemoteMessageIds(l,{isAtBottom:_.value,isHistoryWindow:s.value.isHistoryWindow,isPageVisible:W.value})&&(_.value=false);},{flush:"post"}),watch([F,()=>s.value.loading,()=>s.value.error,()=>te.value.length,()=>s.value.hasOlder,()=>Me(s.value.entryUnread),Z],([r,l,c,,,M],[N,,,,,x])=>{if(r!==N&&(o+=1,Te(false),B(true),f.value?.clearNewMessageBadge(),O.value=0,_.value=true),r!==""&&r===N&&M!==x&&!R&&M.startsWith("located:")&&(w="",K="",S.value=false),r===""){Te(false);return}if(c!==null&&s.value.messages.length===0){S.value||Te(false,true);return}l||Se();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{G=true,o+=1,Te(false),B(true);}),()=>{let r={conversation:t.conversation,state:s.value,items:ee.value,actions:Ce,initialViewportSettled:F.value!==""&&(s.value.messages.length===0?!s.value.loading&&s.value.error===null&&!s.value.hasOlder:S.value&&w===F.value)},l=[m.header?.(r),m["before-list"]?.(r)];if(!j.value)l.push(m.unsupported?.(r)??h$1("div",{"data-im-thread-unsupported":""}));else if(!s.value.ready&&s.value.loading)l.push(m.loading?.(r)??h$1("div",{"data-im-thread-loading":""}));else if(s.value.error!==null&&s.value.messages.length===0)l.push(m.error?.(r)??h$1("div",{"data-im-thread-error":""}));else if(s.value.ready&&s.value.messages.length===0&&!s.value.hasOlder)l.push(m.empty?.(r)??h$1("div",{"data-im-thread-empty":""}));else {let c=h$1(Xe,{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:m["active-date"]!==void 0,resizeFollowEnabled:S.value,followNewMessages:W.value,shouldFollowAppendedMessage:M=>{let N=s.value.messages.find(x=>x.id===M);return N===void 0?false:u.shouldFollowMessage?.(N)===true},onReachStart:()=>{ne("older").catch(()=>{});},onReachEnd:()=>{ne("newer").catch(()=>{});},onSettled:H,onUserScroll:ke,onActiveDateChange:ie,onVisibleRange:Ue,onNewMessageCount:M=>{O.value=M;}},{default:()=>[m["viewport-before"]?.(r),h$1(Ye,{items:ee.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:m.item,"date-separator":m["date-separator"],"entry-unread":m["entry-unread"],encryption:m.encryption,system:m.system,message:m.message,"recalled-message":m["recalled-message"],"deleted-message":m["deleted-message"],"unsupported-body":m["unsupported-body"]}),m["viewport-after"]?.(r)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[m["active-date"]?.({label:$.value,visible:J.value&&$.value!==""}),c])),s.value.error!==null&&l.push(m.error?.(r)??h$1("div",{"data-im-thread-error":""}));}return l.push(m["after-list"]?.(r),m["jump-to-latest"]?.({...r,count:O.value,visible:!_.value||s.value.isHistoryWindow}),m["context-menu"]?.(r),m.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 i=new Map;for(let u of t){if(i.has(u.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${u.kind}`);i.set(u.kind,u.component);}let m=Object.freeze([...i.keys()]);return Object.freeze({kinds:m,resolve:u=>i.get(u)})}var wr=140,Mr=120;function Ke(t,i){if(t.width<=0||t.height<=0)return 0;let m=Math.max(0,Math.min(t.right,i.right)-Math.max(t.left,i.left)),u=Math.max(0,Math.min(t.bottom,i.bottom)-Math.max(t.top,i.top));return Math.min(1,m*u/(t.width*t.height))}function tt(t,i){return {x:t.x,y:t.top-i,top:t.top-i,bottom:t.bottom+i,left:t.left,right:t.right,width:t.width,height:t.height+i*2,toJSON:()=>({})}}function rt(t){let i=Math.max(0,t.scrollIdleMs??wr),m=Math.max(0,t.visibilityDwellMs??Mr),u=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),f=Math.max(0,t.revealMarginPx??0),O=Math.max(0,t.preloadMarginPx??0),_=Math.max(f,O),v=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),P=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),g=new Map,o=new Map,d=reactive(new Set),w=new Set,K=new Set,E=[],R=null,G=null,S=null,$=false,J=false,C=false,re=false,s,W;function oe(){s!==void 0&&clearTimeout(s),s=void 0;}function j(){W!==void 0&&clearTimeout(W),W=void 0;}function L(p=false){if(!p&&G!==null||R===null)return;let T=R.getBoundingClientRect(),h=tt(T,_);for(let[H,b]of g){let q=H.getBoundingClientRect();b.ratio=Ke(q,T),b.intersecting=b.ratio>0,b.revealIntersecting=_>0?Ke(q,h)>0:b.intersecting&&b.ratio>=u;}}function Z(p){return p.intersecting&&p.ratio>=u}function F(){for(let[p,T]of g)!T.revealIntersecting||d.has(T.key)||_>f&&(f===0&&!Z(T)||f>0&&(R===null||Ke(p.getBoundingClientRect(),tt(R.getBoundingClientRect(),f))<=0))||(d.add(T.key),t.onRevealed?.(T.item));}function ee(p,T=false){let h=new Set(p.map(b=>b.key));if(!(!(h.size!==K.size||[...h].some(b=>!K.has(b)))&&!T)){K.clear();for(let b of h)K.add(b);t.onSettledVisibleChange?.(p.map(b=>b.item));}}function te(p,T=false){!T&&p.length===E.length&&p.every((h,H)=>h.key===E[H]?.key&&h.item===E[H]?.item)||(E=p,t.onSettledPreloadChange?.(p.map(h=>h.item)));}function pe(){if(C||$)return;let p=J;J=false,L(),F();let T=R?.getBoundingClientRect(),h=T===void 0?0:(T.top+T.bottom)/2,H=[...g.entries()].filter(([,b])=>Z(b)).sort(([b],[q])=>{let V=b.getBoundingClientRect(),U=q.getBoundingClientRect();return Math.abs((V.top+V.bottom)/2-h)-Math.abs((U.top+U.bottom)/2-h)}).slice(0,P).map(([,b])=>b);if(ee(H,p),t.onSettledPreloadChange!==void 0&&T!==void 0){let b=tt(T,O),q=[...g.entries()].filter(([,V])=>V.revealIntersecting).map(([V,U])=>({target:U,rect:V.getBoundingClientRect()})).filter(({target:V,rect:U})=>Z(V)||O>0&&Ke(U,b)>0).sort((V,U)=>Number(Z(U.target))-Number(Z(V.target))||Math.abs((V.rect.top+V.rect.bottom)/2-h)-Math.abs((U.rect.top+U.rect.bottom)/2-h)).slice(0,v).map(({target:V})=>V);te(q,p);}for(let b of H)w.has(b.key)||(w.add(b.key),t.onActivated?.(b.item));}function B(){C||$||(j(),W=setTimeout(()=>{W=void 0,pe();},m));}function ie(){C||(J=true,X(true),te([]),L(),F(),ee([]),j(),oe(),s=setTimeout(()=>{s=void 0,X(false),B();},i));}function X(p){$!==p&&($=p,t.onScrollingChange?.(p));}function k(){R?.removeEventListener("scroll",ie),G?.disconnect(),S?.disconnect(),G=null,S=null,R=null;}function z(p=true){if(C)return;let T=t.getRoot();if(!(T===R&&R!==null)){if(te([]),k(),R=T,R===null){p&&!re&&(re=true,Promise.resolve().then(()=>{re=false,C||(z(false),B());}));return}if(R.addEventListener("scroll",ie,{passive:true}),typeof IntersectionObserver<"u"){G=new IntersectionObserver(h=>{for(let H of h){let b=g.get(H.target);b!==void 0&&(b.intersecting=H.isIntersecting,b.ratio=H.intersectionRatio,_===0&&(b.revealIntersecting=H.isIntersecting&&H.intersectionRatio>=u));}F(),B();},{root:R,threshold:[0,u,1]}),_>0&&(S=new IntersectionObserver(h=>{for(let H of h){let b=g.get(H.target);b!==void 0&&(b.revealIntersecting=H.isIntersecting);}F(),B();},{root:R,rootMargin:`${_}px 0px`,threshold:0}));for(let h of g.keys())G.observe(h);for(let h of g.keys())S?.observe(h);}else L(),F();}}function ne(p){te(E.filter(T=>T.key!==p)),d.delete(p),w.delete(p),K.delete(p);}return {register(p,T){if(C)return;let h=t.getKey(p),H=d.has(h),b=w.has(h),q=T===null?void 0:g.get(T);q!==void 0&&q.key!==h&&(o.delete(q.key),g.delete(T),ne(q.key));let V=o.get(h);if(V!==void 0&&V!==T&&(G?.unobserve(V),S?.unobserve(V),g.delete(V),o.delete(h)),T===null){V!==void 0&&(G?.unobserve(V),S?.unobserve(V),g.delete(V),o.delete(h)),ne(h);return}let U=g.get(T);if(U?.key===h&&U.item===p){z();return}g.set(T,{item:p,key:h,intersecting:U?.key===h?U.intersecting:false,ratio:U?.key===h?U.ratio:0,revealIntersecting:U?.key===h?U.revealIntersecting:false}),o.set(h,T),z(),G?.observe(T),S?.observe(T),L(true),F(),H&&t.onRevealed?.(p),b&&t.onActivated?.(p),B();},isRevealed:p=>d.has(t.getKey(p)),isActivated:p=>w.has(t.getKey(p)),isSettledVisible:p=>K.has(t.getKey(p)),isScrolling:()=>$,notifyScroll:ie,refresh(){z(),L(true),F(),B();},reset(){oe(),j(),X(false),J=false,ee([]),te([]),k(),g.clear(),o.clear(),d.clear(),w.clear();},dispose(){C||(oe(),j(),X(false),J=false,ee([]),te([]),k(),g.clear(),o.clear(),d.clear(),w.clear(),C=true);}}}function Sr(t){let i=new Map,m=new Map,u=false,f=v=>{let P=i.get(v.channel);return P===void 0?v.channel:`${v.channel}\0${P.getKey(v.item)}`},O=rt({getRoot:t.getRoot,getKey:f,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:v=>{for(let P of i.values())P.onScrollingChange?.(v);},onRevealed:v=>i.get(v.channel)?.onRevealed?.(v.item),onActivated:v=>i.get(v.channel)?.onActivated?.(v.item),onSettledPreloadChange:v=>{for(let[P,g]of i){let o=v.filter(d=>d.channel===P).map(d=>d.item);g.onSettledPreloadChange?.(o.slice(0,Math.max(0,g.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:v=>{for(let[P,g]of i){let o=v.filter(w=>w.channel===P).map(w=>w.item),d=g.maxSettledVisible===void 0?o:o.slice(0,g.maxSettledVisible);g.onSettledVisibleChange?.(d);}}});function _(v){return P=>{if(u)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(i.has(v))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${v}`);i.set(v,P);let g=new Map;m.set(v,g);let o=false,d=E=>({channel:v,item:E});function w(){for(let E of g.values())O.register(E.target,null);g.clear(),P.onScrollingChange?.(false),P.onSettledVisibleChange?.([]),P.onSettledPreloadChange?.([]);}return {register(E,R){if(o||u)return;let G=P.getKey(E),S=g.get(G);if(R===null){S!==void 0&&(O.register(S.target,null),g.delete(G));return}let $=S?.target.item===E?S.target:d(E);g.set(G,{target:$,element:R}),O.register($,R);},isRevealed:E=>O.isRevealed(d(E)),isActivated:E=>O.isActivated(d(E)),isSettledVisible:E=>O.isSettledVisible(d(E)),isScrolling:O.isScrolling,notifyScroll:O.notifyScroll,refresh:O.refresh,reset:w,dispose(){o||(w(),o=true,i.delete(v),m.delete(v));}}}}return {createFactory:_,refresh:O.refresh,dispose(){if(!u){for(let v of m.values())for(let P of v.values())O.register(P.target,null);for(let v of i.values())v.onSettledPreloadChange?.([]);m.clear(),i.clear(),O.dispose(),u=true;}}}}export{We as ImThreadBodySwitch,Ye as ImThreadItems,yr as ImThreadSurface,Xe as ImThreadViewport,fr as createImThreadSurfaceContext,br as createMessageRendererRegistry,Sr as createThreadVisibilityTargetGroup,rt as createThreadVisibilityTargets,mr as provideImThreadSurfaceContext,zt as useImText,Je as useImThreadSurfaceContext,Xt as useOptionalImThreadReadActions};
|