k2-im 0.1.49 → 0.1.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.js +1 -1
- package/dist/chat-kit-pinia.d.ts +15 -9
- package/dist/chat-kit-pinia.js +1 -1
- package/dist/chat-kit-vue.d.ts +26 -3
- package/dist/chat-kit-vue.js +1 -1
- package/dist/chat-kit.d.ts +13 -8
- package/dist/chat-kit.js +1 -1
- package/dist/{chunk-ZUL5OBYN.js → chunk-2LUSPYH5.js} +1 -1
- package/dist/chunk-6EPXLFLD.js +2 -0
- package/dist/{chunk-A6UPH4T4.js → chunk-DLZBFAYO.js} +1 -1
- package/dist/chunk-JHGB6KYI.js +2 -0
- package/dist/{chunk-EQSL3SQW.js → chunk-JOD67FT3.js} +1 -1
- package/dist/{chunk-YOS2232I.js → chunk-KFVKMPCY.js} +1 -1
- package/dist/chunk-Q2DEFN53.js +1 -0
- package/dist/{chunk-SWWW7C2U.js → chunk-ZFYM6YHK.js} +1 -1
- package/dist/i18n.d.ts +4 -1
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +13 -8
- package/dist/index.js +1 -1
- package/dist/sdk.d.ts +13 -8
- package/dist/sdk.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-527YCOBJ.js +0 -2
- package/dist/chunk-SEFYSJSB.js +0 -2
package/dist/chat-kit-vue.d.ts
CHANGED
|
@@ -98,8 +98,11 @@ type LastMessageSummary = {
|
|
|
98
98
|
kind: 'transfer';
|
|
99
99
|
} | {
|
|
100
100
|
kind: 'gift';
|
|
101
|
-
}
|
|
101
|
+
}
|
|
102
|
+
/** 直播间分享。`title` 与卡片主标题一致:先主播昵称,没有再用房间标题。 */
|
|
103
|
+
| {
|
|
102
104
|
kind: 'liveRoom';
|
|
105
|
+
title?: string;
|
|
103
106
|
} | {
|
|
104
107
|
kind: 'call';
|
|
105
108
|
callKind: ImCallKind;
|
|
@@ -1717,6 +1720,15 @@ declare function useImText(ctx: ImTextContext): {
|
|
|
1717
1720
|
failureText: (message: AdvancedMessage) => string;
|
|
1718
1721
|
};
|
|
1719
1722
|
|
|
1723
|
+
/** 消息定位的共享结果;宿主只负责把原因映射为当前平台的提示。 */
|
|
1724
|
+
type ImMessageLocateResult = Readonly<{
|
|
1725
|
+
ok: true;
|
|
1726
|
+
} | {
|
|
1727
|
+
ok: false;
|
|
1728
|
+
reason: 'not-found' | 'not-visible' | 'anchor-unavailable' | 'load-failed' | 'cancelled';
|
|
1729
|
+
cause?: unknown;
|
|
1730
|
+
}>;
|
|
1731
|
+
|
|
1720
1732
|
/** 根据 Core body kind 选择宿主 renderer 的无样式正文组件。 */
|
|
1721
1733
|
declare const ImThreadBodySwitch: any;
|
|
1722
1734
|
|
|
@@ -1763,6 +1775,8 @@ interface ImThreadSurfaceSlotActions {
|
|
|
1763
1775
|
scrollToMessage: (messageId: string, options?: ScrollIntoViewOptions) => boolean;
|
|
1764
1776
|
/** 必要时先替换为目标附近窗口,再等待真实消息节点登记并完成定位。 */
|
|
1765
1777
|
locateMessage: (messageId: string, options?: ScrollIntoViewOptions) => Promise<boolean>;
|
|
1778
|
+
/** 返回定位失败的具体原因;取消不会被当作加载失败,旧 boolean 方法继续可用。 */
|
|
1779
|
+
locateMessageDetailed: (messageId: string, options?: ScrollIntoViewOptions) => Promise<ImMessageLocateResult>;
|
|
1766
1780
|
/** 把焦点还给当前 Surface 的唯一消息滚动根,不查询宿主全局 DOM。 */
|
|
1767
1781
|
focusViewport: () => void;
|
|
1768
1782
|
}
|
|
@@ -1799,6 +1813,11 @@ interface ImThreadViewportExposed {
|
|
|
1799
1813
|
isMeasurable: () => boolean;
|
|
1800
1814
|
/** 当前已加载内容是否超过滚动根可视高度。 */
|
|
1801
1815
|
isScrollable: () => boolean;
|
|
1816
|
+
/** 测量指定消息上下是否各有半屏真实内容,供定位时选择继续加载的历史方向。 */
|
|
1817
|
+
getMessageCenteringNeeds: (messageId: string) => {
|
|
1818
|
+
older: boolean;
|
|
1819
|
+
newer: boolean;
|
|
1820
|
+
} | null;
|
|
1802
1821
|
/** 当前未见消息数量。 */
|
|
1803
1822
|
newMessageCount: Readonly<{
|
|
1804
1823
|
value: number;
|
|
@@ -1976,7 +1995,11 @@ interface ImThreadSurfaceActions {
|
|
|
1976
1995
|
/** 把 Thread Store 返回 latest;返回 false 表示失败或旧请求已失效。 */
|
|
1977
1996
|
jumpToLatest?: () => Promise<boolean>;
|
|
1978
1997
|
/** 用目标消息附近的连续窗口取代当前窗口;DOM 定位仍由 Surface 统一完成。 */
|
|
1979
|
-
loadAround?: (messageId: string
|
|
1998
|
+
loadAround?: (messageId: string, options?: {
|
|
1999
|
+
signal?: AbortSignal;
|
|
2000
|
+
}) => Promise<boolean>;
|
|
2001
|
+
/** 用户滚动接管阅读位置时取消宿主已发布的 pending 定位,包括尚在查询原文的 Search action。 */
|
|
2002
|
+
cancelMessageLocation?: () => void;
|
|
1980
2003
|
/** 原子取走尚未进入当前连续窗口的实时对端消息 id。 */
|
|
1981
2004
|
drainActiveRemoteMessageIds?: () => readonly string[];
|
|
1982
2005
|
/** 接收统一可见消息范围;不得在实现里重新扫描 DOM。 */
|
|
@@ -2107,4 +2130,4 @@ declare function createThreadVisibilityTargetGroup<TItem>(groupOptions: ThreadVi
|
|
|
2107
2130
|
declare function useImThreadLayoutMeasurement(read: ThreadLayoutRead): ThreadLayoutMeasurement;
|
|
2108
2131
|
|
|
2109
2132
|
export { ImThreadBodySwitch, ImThreadItems, ImThreadSurface, ImThreadViewport, createImThreadSurfaceContext, createMessageRendererRegistry, createThreadVisibilityTargetGroup, createThreadVisibilityTargets, provideImThreadSurfaceContext, useImText, useImThreadLayoutMeasurement, useImThreadSurfaceContext, useOptionalImThreadReadActions };
|
|
2110
|
-
export type { ImHostEnvironment, ImHostSession, ImMessageRendererRegistration, ImMessageRendererRegistry, ImTextContext, ImThreadActiveDateSlotState, ImThreadEntryUnreadNavigationResult, ImThreadInitialViewportOptions, ImThreadSurfaceActions, ImThreadSurfaceContext, ImThreadSurfaceHooks, ImThreadSurfaceSlotActions, ImThreadSurfaceState, ImThreadViewportExposed, ImThreadViewportOptions, ImThreadViewportSettledSnapshot, ThreadLayoutMeasurement, ThreadLayoutRead, ThreadVisibilityTargetGroup, ThreadVisibilityTargetGroupOptions, ThreadVisibilityTargets, ThreadVisibilityTargetsFactory, ThreadVisibilityTargetsOptions };
|
|
2133
|
+
export type { ImHostEnvironment, ImHostSession, ImMessageLocateResult, ImMessageRendererRegistration, ImMessageRendererRegistry, ImTextContext, ImThreadActiveDateSlotState, ImThreadEntryUnreadNavigationResult, ImThreadInitialViewportOptions, ImThreadSurfaceActions, ImThreadSurfaceContext, ImThreadSurfaceHooks, ImThreadSurfaceSlotActions, ImThreadSurfaceState, ImThreadViewportExposed, ImThreadViewportOptions, ImThreadViewportSettledSnapshot, ThreadLayoutMeasurement, ThreadLayoutRead, ThreadVisibilityTargetGroup, ThreadVisibilityTargetGroupOptions, ThreadVisibilityTargets, ThreadVisibilityTargetsFactory, ThreadVisibilityTargetsOptions };
|
package/dist/chat-kit-vue.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-ZUL5OBYN.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-EQSL3SQW.js';import'./chunk-SEFYSJSB.js';import'./chunk-SWWW7C2U.js';import'./chunk-527YCOBJ.js';import'./chunk-WOT6VMZA.js';import {defineComponent,h as h$1,onUpdated,onUnmounted,ref,provide,watch,nextTick,onMounted,onBeforeUnmount,computed,inject,isVNode,cloneVNode,Fragment,reactive,shallowReactive}from'vue';function dn(t){let o=0,v=0;for(let f of t)f.kind==="video"?v+=1:o+=1;return {imageCount:o,videoCount:v}}function un(t){return {systemMessage:o=>o.body.system!==void 0?g$1(o.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:o=>i$1(o.contentType,{locale:t.locale(),durationMs:o.body.voice?.durationMs,stickerImageType:o.body.sticker?.imageType,gameType:o.body.game?.gameType,callKind:o.body.call?.callKind,...o.body.filesAlbum===void 0?{}:{filesAlbum:{count:o.body.filesAlbum.items.length,caption:o.body.filesAlbum.caption}},...o.body.mediaAlbum===void 0?{}:{mediaAlbum:dn(o.body.mediaAlbum.items)}}),lastMessage:o=>o.lastMessageSummary!==void 0?h$2(o.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):o.lastMessagePreview,failureText:o=>o.failure?.displayCode!==void 0?f(o.failure.displayCode,{locale:t.locale(),mediaKind:o.failure.mediaKind,params:o.failure.params}):o.failure?.message??""}}var jt=Symbol("ImThreadReadActions");function _t(t){provide(jt,t);}function mn(){return inject(jt,void 0)}var mt=defineComponent({name:"ImThreadBodySwitch",inheritAttrs:false,props:{message:{type:Object,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{attrs:o,slots:v}){return _t(t.readActions),()=>{let f=h(t.message),m=t.rendererRegistry.resolve(f);return m!==void 0?h$1(m,{...o,message:t.message,presentation:t.presentation}):v["unsupported-body"]!==void 0?v["unsupported-body"]({kind:f,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":f,"aria-hidden":"true"})}}});var gt=Symbol("ImThreadViewportRegistration");function rt(){return inject(gt,void 0)}var vt=defineComponent({name:"ImThreadItems",props:{items:{type:Array,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{slots:o}){let v=rt(),f=new Map,m=new Map;onUpdated(()=>{let a=new Set,h=new Set;for(let c of t.items)c.kind==="message"||c.kind==="system"?a.add(c.key):c.kind==="date-separator"&&h.add(c.key);for(let c of f.keys())a.has(c)||f.delete(c);for(let c of m.keys())h.has(c)||m.delete(c);}),onUnmounted(()=>{f.clear(),m.clear();});function V(a,h){let c=Array.isArray(h)?h:[h];return c.length===1&&isVNode(c[0])?cloneVNode(c[0],{key:a}):h$1(Fragment,{key:a},c)}function U(a,h){let c=f.get(a);if(c?.messageId===h)return c.setElement;let M=H=>{v?.registerMessageNode(h,H instanceof HTMLElement?H:null);};return f.set(a,{messageId:h,setElement:M}),M}function k(a,h){let c=m.get(a);if(c!==void 0)return c.label=h,c.setElement;let M={label:h,setElement:H=>{v?.registerDateNode(a,M.label,H instanceof HTMLElement?H:null);}};return m.set(a,M),M.setElement}function R(a){return o.encryption?.({item:a})??h$1("div",{"data-im-thread-encryption":a.key})}function g(a){let h=k(a.key,a.label);return o["date-separator"]?.({item:a,setElement:h})??h$1("div",{ref:h,"data-im-thread-date-separator":a.key},a.label)}function L(a){v?.registerEntryUnreadNode(a instanceof HTMLElement?a:null);}function u(a){return o["entry-unread"]?.({item:a,setElement:L})??h$1("div",{ref:L,"data-im-thread-entry-unread":a.key,...a.count===void 0?{}:{"data-count":String(a.count)}})}function T(a){let h=U(a.key,a.message.id);return o.item!==void 0?o.item({item:a,setElement:h}):o.message!==void 0?o.message({item:a,setElement:h}):a.message.deletedForEveryone!==void 0?o["deleted-message"]?.({item:a,setElement:h})??h$1("article",{ref:h,"data-im-thread-message-id":a.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):a.message.recalled!==void 0?o["recalled-message"]?.({item:a,setElement:h})??h$1("article",{ref:h,"data-im-thread-message-id":a.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):a.kind==="system"&&o.system!==void 0?o.system({item:a,setElement:h}):h$1("article",{ref:h,"data-im-thread-message-id":a.message.id,"data-first-of-run":a.kind==="message"?String(a.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(mt,{message:a.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":o["unsupported-body"]===void 0?void 0:c=>o["unsupported-body"]?.(c)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(a=>{switch(a.kind){case "encryption":return o.item!==void 0?V(a.key,o.item({item:a})):V(a.key,R(a));case "date-separator":return o.item!==void 0?V(a.key,o.item({item:a,setElement:k(a.key,a.label)})):V(a.key,g(a));case "entry-unread":return o.item!==void 0?V(a.key,o.item({item:a,setElement:L})):V(a.key,u(a));case "system":case "message":return V(a.key,T(a))}return a}))}});function Qe(){let t,o=0,v=0,f;function m(){t!==void 0&&clearTimeout(t),t=void 0,f=void 0;}function V(){t=void 0;let k=o-performance.now();if(k>0){v=o,t=setTimeout(V,k);return}let R=f;f=void 0,R?.();}function U(k,R){o=performance.now()+R,f=k,!(t!==void 0&&o>=v)&&(t!==void 0&&clearTimeout(t),v=o,t=setTimeout(V,R));}return {schedule:U,cancel:m}}function qt(t){let o=new Set,v=new Map,f=new Set;function m(){let R=[...f];f.clear();let g=[],L=[];for(let u of R)if(u.active)try{g.push({job:u,commit:u.read()});}catch(T){L.push(T);}for(let{job:u,commit:T}of g)if(u.active)try{T?.();}catch(a){L.push(a);}L.length>0&&queueMicrotask(()=>{throw new AggregateError(L,"Thread layout measurement failed")});}function V(R){R.active&&(f.add(R),t.requestFrame(m));}function U(R,g){let L=v.get(g);L?.delete(R),L?.size===0&&(v.delete(g),t.unobserve(g));}function k(R){let g={read:R,elements:new Set,active:true};return o.add(g),{observe(L){if(!g.active)return;let u=new Set(L),T=u.size!==g.elements.size||[...u].some(a=>!g.elements.has(a));for(let a of g.elements)u.has(a)||U(g,a);for(let a of u){if(g.elements.has(a))continue;let h=v.get(a);h===void 0&&(h=new Set,v.set(a,h),t.observe(a)),h.add(g);}g.elements=u,T&&u.size>0&&V(g);},invalidate:()=>V(g),dispose(){g.active=false,f.delete(g),o.delete(g);for(let L of g.elements)U(g,L);g.elements.clear();}}}return {register:k,hasTarget:R=>v.has(R),observeTargets:()=>v.forEach((R,g)=>t.observe(g)),resized:R=>R.forEach(g=>v.get(g)?.forEach(V)),invalidateAll:()=>o.forEach(V),dispose(){for(let R of o)R.active=false;o.clear(),f.clear(),v.clear();}}}var Wt=120,Pn=500,Ge=.5,An=8;function ht(t){let o=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(o!==void 0&&Number.isFinite(o)&&o>0?o:1)}var pt=defineComponent({name:"ImThreadViewport",props:{messageIds:{type:Array,required:true},contentKey:{type:String,default:""},loadingOlder:{type:Boolean,default:false},hasNewer:{type:Boolean,default:false},loadingNewer:{type:Boolean,default:false},followThreshold:{type:Number,default:120},olderPrefetchThreshold:{type:Number,default:120},followNewMessages:{type:Boolean,default:true},shouldFollowAppendedMessage:{type:Function,default:void 0},pendingSendMessageIds:{type:Array,default:()=>[]},visibleMargin:{type:Number,default:8},resizeFollowEnabled:{type:Boolean,default:true},activeDateOffset:{type:Number,default:16},activeDateEnabled:{type:Boolean,default:false}},emits:{"reach-start":()=>true,"reach-end":()=>true,"visible-range":t=>true,settled:t=>true,"new-message-count":t=>true,"user-scroll":()=>true,"active-date-change":t=>true},setup(t,{emit:o$1,expose:v,slots:f}){let m$1=ref(null),V=ref(null),U=new Map,k,R=new Map,g$1=new Set,L=new Map,u=0,T=[],a,h,c,M,H=qt({requestFrame:ce,observe:e=>c?.observe(e),unobserve:e=>{e!==m$1.value&&e!==V.value&&!R.has(e)&&c?.unobserve(e);}}),oe,D=false,E,J=new Set,F=false,B$1,_=0,de="",ue=1,Z=false,N=false,ae=true,Y=false,ye=false,ee=true,i=false,X=0,ge=-1,Te=-1,q$1=Qe(),G,me,S,ie,te=ref(true),be=ref(0),Ie=C(e=>{be.value=e,o$1("new-message-count",e);});function Le(e){let r=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=r}function p$1(e=t.messageIds){return e.flatMap(r=>{let s=U.get(r);if(s===void 0)return [];let b=s.getBoundingClientRect(),A=s.querySelector("[data-im-thread-anchor-point]");return [{id:r,top:b.top,bottom:b.bottom,anchorTop:A?.getBoundingClientRect().top??b.top}]})}function O(e="",r=1){let s=Math.min(1,Math.max(0,r));de!==""&&de!==e&&L.get(de)?.element.style.removeProperty("opacity"),de=e,ue=s,e!==""&&L.get(e)?.element.style.setProperty("opacity",String(s));}function y(){O();}function P(){let e=m$1.value;if(F||e===null||!t.activeDateEnabled)return;let r=[...L.entries()].filter(([,K])=>e.contains(K.element)).map(([K,j])=>{let Ee=j.element.getBoundingClientRect();return {key:K,label:j.label,top:Ee.top,height:Ee.height}}).sort((K,j)=>K.top-j.top),s=e.getBoundingClientRect(),b=r.find(K=>K.height>0)?.height??28,A=g({markers:r,viewportTop:s.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:b});if(A===null){y(),o$1("active-date-change",null);return}O(A.inlineDateKey,A.inlineOpacity),o$1("active-date-change",A);}function C$1(e){h={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Q(e){let r=h;if(r===void 0)return false;let s=Math.max(0,e.scrollHeight-e.clientHeight);return s<r.scrollHeight-r.height&&r.scrollTop>s&&Math.abs(e.scrollTop-s)<=ht(e)}function z$1(e){return Q(e)||B$1!==void 0&&(B$1.behavior==="smooth"||Math.abs(e.scrollTop-B$1.targetTop)<=ht(e))?0:e.scrollTop-u}function ne(e,r){r!==0&&(u=e.scrollTop-r,B$1=void 0,Ye());}function Ae(e,r){let s=z$1(e);if(S!==void 0)return S.expectedOffset-=s,Me(),ne(e,s),Y||Ce(),false;let b=h;if(b===void 0)return false;let A=a,K=A===void 0?void 0:p$1([A.id])[0],j=e.scrollTop-b.scrollTop,Ee=Q(e)?0:j,Ne=A===void 0||K===void 0?0:(K.anchorTop??K.top)-r.top-A.offset+j;return b.scrollHeight!==e.scrollHeight||b.width!==e.clientWidth||b.height!==e.clientHeight||Math.abs(Ne)>Ge?(h=void 0,!Z&&!N&&!t.loadingOlder&&!t.loadingNewer&&!t.hasNewer&&t.resizeFollowEnabled&&te.value&&Math.abs(Ee)<=Ge?(_e(),true):(A!==void 0&&Ue({...A,offset:A.offset-Ee}),ne(e,s),false)):false}function W(){let e=m$1.value;if(F||e===null)return;let r=e.getBoundingClientRect();if(Ae(e,r))return;let s=oe!==void 0&&D?t.messageIds.filter(j=>g$1.has(j)):t.messageIds,b=p$1(s);if(oe!==void 0&&D&&b.length===0){te.value=Le(e);return}let A=b.filter(j=>B({viewportTop:r.top,viewportBottom:r.bottom,messageTop:j.top,messageBottom:j.bottom,margin:t.visibleMargin})).map(j=>j.id),K=A.length!==T.length||A.some((j,Ee)=>T[Ee]!==j);T=Object.freeze(A),a=o(b,{top:r.top,bottom:r.bottom}),C$1(e),Ie.acknowledgeVisible(A),te.value=Le(e),K&&o$1("visible-range",T),o$1("settled",{visibleMessageIds:T,...T.length===0?{}:{newestVisibleMessageId:T[T.length-1]},isAtBottom:te.value,newMessageCount:be.value});}function ce(e){if(J.add(e),E!==void 0)return;let r=()=>{E=void 0;let s=[...J];J.clear(),s.forEach(b=>b());};typeof globalThis.requestAnimationFrame=="function"?E=globalThis.requestAnimationFrame(r):E=globalThis.setTimeout(r,0);}function se(){E!==void 0&&(typeof E=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(E):globalThis.clearTimeout(E),E=void 0,J.clear());}function re(){ce(W);}function lt(){let e=m$1.value;if(e===null)return;let r=e.getBoundingClientRect(),s=o(p$1(),{top:r.top,bottom:r.bottom});s!==void 0&&(a=s,C$1(e));}function Ze(){return ae&&S===void 0&&!N&&!t.loadingOlder}function et(){lt(),ae=false,ge=X,N=true,te.value=false,o$1("reach-start"),ce(()=>{t.loadingOlder||(N=false);});}function We(e){return t.hasNewer&&!Z&&!t.loadingOlder&&!t.loadingNewer&&Le(e)}function le(){Z=true,te.value=false,Te=X,o$1("reach-end"),ce(()=>{t.loadingNewer||(Z=false);});}function Ke(){let e=m$1.value;e===null||X===Te||!We(e)||le();}function Ye(){let e=m$1.value;if(F||e===null)return;let r=e.scrollTop,s=Q(e),b=B$1,A=false;if(b!==void 0){let j=Math.abs(r-b.targetTop)<=ht(e);A=b.behavior==="smooth"||j,(b.behavior!=="smooth"||j)&&(B$1=void 0);}!A&&!s&&!Y&&ee&&S===void 0&&r!==u&&(Y=true,ye=true,X+=1);let K=Y&&!A&&!s&&r!==u;if(K&&(_+=1,o$1("user-scroll"),ce(P)),Y&&!i&&l(),!ae&&ye&&X!==ge&&r<u&&r>Re()&&Be(),S!==void 0&&!A)if(Y){let j=$e();j!==void 0&&(S.expectedOffset=j);}else Me(),Ce();Ze()&&K&&r>=0&&m({previousScrollTop:u,currentScrollTop:r,topThreshold:t.olderPrefetchThreshold})&&et(),K&&We(e)&&z({previousScrollTop:u,currentScrollTop:r,isAtBottom:Le(e),isHistoryWindow:t.hasNewer,isPageSettling:A})&&le(),u=r,re();}function qe(e,r="auto"){B$1={targetTop:e,behavior:r};}function Fe(e){let r=S,s=V.value;if(!(r===void 0||s===null)){if(r.visualOffset=Math.abs(e)<=Ge?0:e,r.visualOffset===0){s.style.removeProperty("transform"),s.style.removeProperty("will-change");return}s.style.setProperty("transform",`translate3d(0, ${r.visualOffset}px, 0)`),s.style.setProperty("will-change","transform");}}function we(){ie!==void 0&&(clearTimeout(ie),ie=void 0),S!==void 0&&S.visualOffset!==0&&(a=void 0,h=void 0);let e=V.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),S=void 0,B$1=void 0;}function $e(){let e=m$1.value,r=S;if(e===null||r===void 0)return;let s=U.get(r.anchor.id);return s===void 0?void 0:(s.querySelector("[data-im-thread-anchor-point]")??s).getBoundingClientRect().top-e.getBoundingClientRect().top}function Me(){let e=S,r=$e();if(e===void 0||r===void 0)return;let s=e.expectedOffset-r;Math.abs(s)<=Ge||(Fe(e.visualOffset+s),e.committed=false,e.attempts=0);}function tt(){ie!==void 0&&clearTimeout(ie),ie=setTimeout(()=>{ie=void 0,!(Y||S?.committed!==true)&&we();},Pn);}function Oe(){let e=m$1.value,r=S;if(F||e===null||r===void 0||Y)return;let s=r.visualOffset;if(Math.abs(s)<=Ge){r.committed=true,tt();return}let b=Math.max(0,e.scrollHeight-e.clientHeight),A=Math.min(b,Math.max(0,e.scrollTop-s));if(qe(A),e.scrollTop=A,Math.abs(e.scrollTop-A)>Ge){B$1=void 0,r.committed=false,r.attempts+=1,r.attempts<An?Ce():(we(),B$1=void 0,u=e.scrollTop);return}Fe(0),u=e.scrollTop,r.expectedOffset=$e()??r.expectedOffset,r.committed=true,r.attempts=0,tt();}function Ce(){ie!==void 0&&clearTimeout(ie),ie=setTimeout(()=>{ie=void 0,Oe();},Wt);}function nt(e){e!==void 0&&(S===void 0&&(S={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),Me(),!Y&&Oe());}function Ue(e){let r=m$1.value;if(r===null||e===void 0)return;let s=r.getBoundingClientRect(),b=q(e,p$1([e.id]),{top:s.top,bottom:s.bottom});if(b!==void 0){let A=Math.max(0,r.scrollHeight-r.clientHeight),K=Math.min(A,Math.max(0,r.scrollTop+b));qe(K),r.scrollTop=K,u=r.scrollTop,h=void 0;}}function Re(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function Ve(){_+=1,B$1?.behavior==="smooth"&&(B$1=void 0),ye=false,Y||(Y=true,X+=1),i&&q$1.cancel();}function Be(){let e=m$1.value;if(!(e===null||X===ge)){if(N||t.loadingOlder){ge=X,ae=false;return}S!==void 0&&we(),ae=true,Ze()&&e.scrollTop<=Re()&&et();}}function Je(){_+=1,a=void 0,h=void 0,q$1.cancel(),we(),Y=false,ye=false,i=false,G=void 0,me=void 0,X+=1,ge=-1,Te=-1,ae=true,N=false,Z=false,B$1=void 0;}function n(){i||(q$1.cancel(),Y=false,ye=false,S!==void 0&&(S.attempts=0),Oe());}function l(){i||q$1.schedule(n,Wt);}function d(){B$1=void 0,n();}function w(e){ee=false,i=true,Ve(),G=e.touches?.[0]?.clientY;}function I(e){let r=e.touches?.[0]?.clientY;r!==void 0&&(G!==void 0&&r!==G&&(_+=1),G!==void 0&&r>G?Be():G!==void 0&&r<G&&Ke(),G=r);}function x(){i=false,G=void 0,l();}function $(e){ee=true,Ve(),e.deltaY<0?Be():e.deltaY>0&&Ke(),l();}function ve(e){e.pointerType!=="touch"&&(ee=true,Ve(),me=e.clientY,l());}function ke(e){e.pointerType==="touch"||!Y||me===void 0||(e.clientY!==me&&(_+=1),e.clientY<me?Be():e.clientY>me&&Ke(),me=e.clientY,l());}function he(e){e.pointerType!=="touch"&&(me=void 0,l());}function je(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(ee=true,Ve(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?Be():Ke(),l());}function _e(e="auto"){let r=m$1.value;if(r===null)return;_+=1,h=void 0,we();let s=Math.max(0,r.scrollHeight-r.clientHeight);qe(s,e),r.scrollTo?.({top:s,behavior:e}),r.scrollTop!==s&&(r.scrollTop=s),u=r.scrollTop,Ie.clear(),D=false,W();}function Mt(){let e=m$1.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function Xt(){let e=m$1.value;return Mt()&&e!==null&&e.scrollHeight>e.clientHeight+1}function Qt(e,r={}){return Rt(U.get(e),r)}function Rt(e,r){let s=m$1.value;if(s===null||e===void 0||!s.contains(e)||s.clientHeight<=0)return false;_+=1,we();let b=s.getBoundingClientRect(),A=e.getBoundingClientRect(),K=r.block??"center",j$1;K==="start"?j$1=s.scrollTop+A.top-b.top:K==="end"?j$1=s.scrollTop+A.bottom-b.bottom:K==="nearest"?A.top>=b.top&&A.bottom<=b.bottom?j$1=s.scrollTop:A.top<b.top?j$1=s.scrollTop+A.top-b.top:j$1=s.scrollTop+A.bottom-b.bottom:j$1=j({currentScrollTop:s.scrollTop,scrollHeight:s.scrollHeight,targetHeight:A.height,targetTop:A.top,viewportHeight:s.clientHeight,viewportTop:b.top});let Ee=Math.max(0,s.scrollHeight-s.clientHeight),Ne=Math.min(Ee,Math.max(0,j$1));h=void 0;let ze=r.behavior??"auto";return qe(Ne,ze),s.scrollTo?.({top:Ne,behavior:ze}),s.scrollTop!==Ne&&(s.scrollTop=Ne),u=s.scrollTop,D=false,W(),true}function Zt(){let e=m$1.value;if(e===null||k===void 0||!e.contains(k)||e.clientHeight<=0)return null;let r=k.getBoundingClientRect(),s=e.scrollTop+r.top-e.getBoundingClientRect().top+r.height/2,b=e.clientHeight/2;return {older:s<b-1,newer:e.scrollHeight-s<b-1}}function en(){Ie.clear();}function tn(){Z=true,te.value=false;}function nn(){Z=false,re();}function rn(e,r){let s=U.get(e);if(s!==r){if(s!==void 0&&(oe?.unobserve(s),s.style.removeProperty("--im-thread-placeholder-play-state"),H.hasTarget(s)||c?.unobserve?.(s),R.delete(s),g$1.delete(e)),r===null){U.delete(e),g$1.delete(e);return}U.set(e,r),R.set(r,e),typeof globalThis.IntersectionObserver=="function"&&r.style.setProperty("--im-thread-placeholder-play-state","paused"),oe?.observe(r),c?.observe(r),re();}}function on(e,r,s){let b=L.get(e);if(s===null){L.delete(e);return}L.set(e,{element:s,label:r}),de===e&&s.style.setProperty("opacity",String(ue)),b?.element!==s&&(s.dataset.imThreadDateSeparator=e);}return provide(gt,{registerLayoutMeasurement:H.register,registerMessageNode:rn,registerDateNode:on,registerEntryUnreadNode:e=>{k=e??void 0;}}),watch(()=>t.contentKey,(e,r)=>{if(e===r)return;Je();let s=m$1.value;s!==null&&(u=s.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,r)=>{if(e.length===r.length&&e.every((fe,De)=>fe===r[De]))return;let s=m$1.value;if(s===null)return;let b=new Set(r);r.length>0&&e.length>0&&!e.some(fe=>b.has(fe))&&Je();let K=t.contentKey,j=_,Ee=te.value,Ne=r[r.length-1],ze=Ne===void 0?-1:e.indexOf(Ne),Xe=ze<0?[]:e.slice(ze+1).filter(fe=>!b.has(fe)),an=Xe.some(fe=>t.pendingSendMessageIds.includes(fe)),dt=Z||t.loadingNewer||N||t.loadingOlder,sn=e.length===r.length&&e.every(fe=>b.has(fe))&&e.some((fe,De)=>fe!==r[De]),Et=r[0],St=Et!==void 0&&e.indexOf(Et)>0,ut;if(a!==void 0&&(St||Xe.length>0&&dt)){let fe=s.getBoundingClientRect(),De=p$1([a.id]),ct=De[0],ln=ct!==void 0&&ct.bottom>fe.top&&ct.top<fe.bottom?De:p$1();ut=p(a,ln,{top:fe.top,bottom:fe.bottom});}if(await nextTick(),!(F||t.contentKey!==K||_!==j)){if(an&&t.followNewMessages){_e();return}if(sn&&Ee&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!dt){_e();return}if(St&&(N=false,nt(ut)),Xe.length>0){if(dt){Z=false,S===void 0&&Ue(ut),te.value=false,re();return}(Ee||Xe.some(De=>t.shouldFollowAppendedMessage?.(De)===true))&&t.followNewMessages?_e():Ie.add(Xe);}re();}},{flush:"pre"}),watch(()=>t.loadingNewer,(e,r)=>{e||!r||!Z||ce(()=>{t.loadingNewer||(Z=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,r)=>{if(e){N=true;return}!r||!N||ce(()=>{t.loadingOlder||(N=false);});},{flush:"pre"}),onMounted(()=>{let e=m$1.value;if(e!==null){if(u=e.scrollTop,e.addEventListener("scroll",Ye,{passive:true}),e.addEventListener("scrollend",d,{passive:true}),e.addEventListener("touchstart",w,{passive:true}),e.addEventListener("touchmove",I,{passive:true}),e.addEventListener("touchend",x,{passive:true}),e.addEventListener("touchcancel",x,{passive:true}),e.addEventListener("wheel",$,{passive:true}),e.addEventListener("pointerdown",ve,{passive:true}),e.addEventListener("pointermove",ke,{passive:true}),e.addEventListener("pointerup",he,{passive:true}),e.addEventListener("pointercancel",he,{passive:true}),e.addEventListener("keydown",je),typeof globalThis.ResizeObserver=="function"){c=new globalThis.ResizeObserver(r=>{if(F||m$1.value===null)return;H.resized(r.map(b=>b.target)),r.some(({target:b})=>b===e||b===V.value||R.has(b))&&W();}),c.observe(e),V.value!==null&&c.observe(V.value);for(let r of U.values())c.observe(r);H.observeTargets();}if(M=e.ownerDocument.fonts,M?.addEventListener("loadingdone",H.invalidateAll),typeof globalThis.IntersectionObserver=="function"){oe=new globalThis.IntersectionObserver(r=>{for(let s of r){let b=R.get(s.target);if(b===void 0)continue;let A=s.target,K=s.isIntersecting?"running":"paused";A.style.getPropertyValue("--im-thread-placeholder-play-state")!==K&&A.style.setProperty("--im-thread-placeholder-play-state",K),s.isIntersecting?g$1.add(b):g$1.delete(b);}D=true,re();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let r of U.values())oe.observe(r);}re();}}),onBeforeUnmount(()=>{F=true;let e=m$1.value;e!==null&&e.removeEventListener("scroll",Ye),e!==null&&(e.removeEventListener("scrollend",d),e.removeEventListener("touchstart",w),e.removeEventListener("touchmove",I),e.removeEventListener("touchend",x),e.removeEventListener("touchcancel",x),e.removeEventListener("wheel",$),e.removeEventListener("pointerdown",ve),e.removeEventListener("pointermove",ke),e.removeEventListener("pointerup",he),e.removeEventListener("pointercancel",he),e.removeEventListener("keydown",je)),q$1.cancel(),we(),se(),M?.removeEventListener("loadingdone",H.invalidateAll),H.dispose(),c?.disconnect(),oe?.disconnect(),y(),k=void 0;for(let r of U.values())r.style.removeProperty("--im-thread-placeholder-play-state");U.clear(),R.clear(),g$1.clear(),L.clear(),Ie.clear();}),v({getViewportElement:()=>m$1.value,clearNewMessageBadge:en,clearActiveDate:y,isAtBottom:computed(()=>te.value),isMeasurable:Mt,isScrollable:Xt,newMessageCount:computed(()=>be.value),prepareHistoryPageAppend:tn,cancelHistoryPageAppend:nn,trackRemoteMessageIds:(e,r)=>Ie.trackRemote(e,r),scrollToLatest:_e,scrollToMessage:Qt,scrollToEntryUnread:()=>Rt(k,{block:"center",behavior:"auto"}),getEntryUnreadCenteringNeeds:Zt,focusViewport:()=>m$1.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:m$1,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:V,"data-im-thread-viewport-content":""},f.default?.())])}});var Yt=Symbol("ImThreadSurfaceContext");function xn(t){if(typeof t.getState!="function")throw new TypeError("ImThreadSurfaceContext.getState \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.actions?.loadOlder!="function")throw new TypeError("ImThreadSurfaceContext.actions.loadOlder \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.formatDate!="function")throw new TypeError("ImThreadSurfaceContext.formatDate \u5FC5\u987B\u662F\u51FD\u6570");return Object.freeze({...t,actions:Object.freeze({...t.actions})})}function kn(t){provide(Yt,t);}function yt(){let t=inject(Yt);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}function Nn(t,o){if(t.key!==o.key||t.kind!==o.kind)return false;switch(o.kind){case "message":return t.kind==="message"&&t.message===o.message&&t.firstOfRun===o.firstOfRun;case "system":return t.kind==="system"&&t.message===o.message;case "date-separator":return t.kind==="date-separator"&&t.label===o.label;case "entry-unread":return t.kind==="entry-unread"&&t.count===o.count;case "encryption":return true}}function $t(t,o){if(t===void 0)return o;let v=new Map(t.map(m=>[m.key,m])),f=o.map(m=>{let V=v.get(m.key);return V!==void 0&&Nn(V,m)?V:m});return t.length===f.length&&f.every((m,V)=>m===t[V])?t:f}var Tt=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),bt=Object.freeze({enabled:true,maxFillPages:8}),Hn=8,Dn=160;function Fn(t,o){return t?.conversationType===o.conversationType&&t.conversationId===o.conversationId}var Un=defineComponent({name:"ImThreadSurface",props:{conversation:{type:Object,required:true},context:{type:Object,default:void 0},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0},viewportOptions:{type:Object,default:()=>({})},initialViewportOptions:{type:Object,default:()=>({})},hooks:{type:Object,default:void 0}},setup(t,{expose:o,slots:v}){let f=t.context??yt(),m=ref(null),V=ref(0),U=ref(false),k=ref(false),R=ref(false),g,L,u=ref(false),T=ref(false),a=ref(false),h=false,c,M=ref(true),H=[],oe=Qe(),D=0,E=0,J,F=null,B="",_="",de="",ue=false,Z=false,N=ref(false),ae=ref(""),Y=ref(false),ye=Qe(),ee,i$1=computed(()=>f.getState()),X=computed(()=>!!i$1.value.pendingLocationMessageId),ge=computed(()=>i$1.value.pageVisible??f.isPageVisible?.()??true),Te=computed(()=>i$1.value.pageEngaged??f.isPageEngaged?.()??true),q=computed(()=>Fn(i$1.value.activeConversation,t.conversation)),G=computed(()=>({...Tt,...t.viewportOptions})),me=computed(()=>{let n=t.initialViewportOptions.maxFillPages??bt.maxFillPages;return {enabled:t.initialViewportOptions.enabled??bt.enabled,maxFillPages:Number.isFinite(n)?Math.max(0,Math.floor(n)):bt.maxFillPages}}),S=computed(()=>!q.value||!i$1.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),ie="",te=computed(n=>{let l=q.value?`${t.conversation.conversationType}\0${t.conversation.conversationId}`:"",d=ie===l?n:void 0;return ie=l,q.value?$t(d,i({messages:i$1.value.messages,entryUnread:i$1.value.entryUnread,formatDate:f.formatDate,leadingItems:f.leadingItems?.(),beforeMessageItems:f.beforeMessageItems})):$t(d,[])}),be=computed(()=>te.value.flatMap(n=>n.kind==="message"||n.kind==="system"?[n.message.id]:[])),Ie=computed(()=>i$1.value.messages.filter(n=>(n.status==="pending"||n.status==="uploading"||n.status==="sending")&&f.shouldFollowMessage?.(n)===true).map(n=>n.id));function Le(){ye.cancel(),ee!==void 0&&(clearTimeout(ee),ee=void 0);}function p(n=false){if(Le(),Y.value=false,n){m.value?.clearActiveDate(),ae.value="";return}ee=setTimeout(()=>{ee=void 0,!Y.value&&(m.value?.clearActiveDate(),ae.value="");},Dn);}function O(n){if(n===null){p();return}ee!==void 0&&(clearTimeout(ee),ee=void 0),ae.value=n.label,Y.value=true;let l=G.value.activeDateIdleDelay,d=Number.isFinite(l)?Math.max(0,l):Tt.activeDateIdleDelay;ye.schedule(()=>p(),d);}async function y(n,l,d){t.hooks?.beforeAction?.(n);try{let w=await l();return d?.()!==!1&&t.hooks?.afterAction?.(n,w),w}catch(w){throw d?.()!==false&&t.hooks?.onError?.(n,w),w}}function P(n="automatic",l){return !q.value||i$1.value.loading||!i$1.value.hasOlder?Promise.resolve(0):y({kind:"load-older",source:n},()=>f.actions.loadOlder(),l)}function C(){return Q()}function Q(n){let l=f.actions.loadNewer,d=i$1.value.loadingNewer??i$1.value.loading;return !q.value||d||!i$1.value.hasNewer||l===void 0?Promise.resolve(0):y({kind:"load-newer"},()=>l(),n)}async function z(n){for(let l=0;l<Hn;l+=1){if(!q.value||R.value||k.value||X.value)return;let d=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,w=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!d||w!==null||(n==="older"?await P("user-scroll"):await C())>0)return;let x=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,$=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!x||$!==null)return}}async function ne(){return !q.value||f.actions.loadNewer===void 0?0:W({kind:"load-newer"},()=>f.actions.retryNewer?.()??f.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function Ae(){return q.value?W({kind:"retry-older"},()=>f.actions.retryOlder?.()??f.actions.loadOlder({force:true})):0}async function W(n,l){let d=S.value,w=++D;F=null,de="";let I;try{I=await y(n,l);}catch(x){throw Me(d,w)&&(de=d),x}return Me(d,w)&&!N.value&&(F=null,Ue()),I}async function ce(){if(!q.value)return false;let n=S.value;Ve();let l=++E;return R.value=false,Re(true),ue=true,B=n,_=Ce(Oe()),!await y({kind:"jump-to-latest"},()=>f.actions.jumpToLatest?.()??Promise.resolve(!i$1.value.isHistoryWindow),()=>le(n,l))||!le(n,l)||(await nextTick(),!le(n,l))?false:(m.value?.scrollToLatest(),U.value=true,a.value=false,re(),true)}function se(n=false){let l=m.value,d=l?.getViewportElement();T.value=l?.isScrollable()===true;let w=i$1.value.entryUnreadNavigation;u.value=w?.state==="located"&&H.includes(w.firstMessageId),N.value&&u.value&&(U.value=true);let I=d==null?0:Math.max(0,d.scrollHeight-d.clientHeight-d.scrollTop);a.value=w!==void 0&&I>50,n&&w!==void 0&&d!==null&&d!==void 0&&d.clientHeight>0&&I>=d.clientHeight&&(U.value=true);}function re(){let n=f.actions.markConversationRead;if(n===void 0||!Te.value||!q.value||!N.value||k.value||h&&(!M.value||i$1.value.hasNewer)||c!==void 0||i$1.value.error!==null)return;let l=S.value,d=n().then(()=>{c===d&&l===S.value&&(h=true);}).catch(w=>{!Z&&c===d&&l===S.value&&t.hooks?.onError?.({kind:"mark-conversation-read"},w);}).finally(()=>{c===d&&(c=void 0);});c=d;}async function lt(){let n=f.actions.loadEntryUnread;if(!q.value||k.value||n===void 0)return "cancelled";let l=S.value,d=++E;R.value=false;let w=new AbortController;L=w,g=d,k.value=true,Re(true),ue=true;try{let I=await y({kind:"jump-to-entry-unread"},()=>n({signal:w.signal}),()=>le(l,d));if(!le(l,d))return "cancelled";if(!I||i$1.value.entryUnread.state!=="located")return "unavailable";let $=await Ze(l,d);return $&&(U.value=!0),$?"located":le(l,d)?"unavailable":"cancelled"}catch(I){if(!le(l,d))return "cancelled";throw I}finally{g===d&&(g=void 0,L=void 0,k.value=false);}}async function Ze(n,l){await nextTick();for(let d=0;d<60;d+=1){if(!le(n,l))return false;if(m.value?.scrollToEntryUnread())return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(w=>window.requestAnimationFrame(()=>w()));}return false}function et(n){M.value=n.isAtBottom,V.value=n.newMessageCount,se(),Ue();}function We(n,l){return m.value?.scrollToMessage(n,l)??false}function le(n,l){return !Z&&E===l&&S.value===n&&q.value}async function Ke(n,l,d,w){for(let I=0;I<60;I+=1){if(!le(n,l))return false;if(We(d,w))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}async function Ye(n,l){let d=m.value;if(d===null||!d.isMeasurable()||d.isScrollable())return true;let w=0,I=!i$1.value.hasOlder,x=!i$1.value.hasNewer||f.actions.loadNewer===void 0,$=()=>le(n,l),ve=async he=>{if(!le(n,l)||w>=me.value.maxFillPages)return false;let je=0;if(he==="older"){if(I||!i$1.value.hasOlder)return false;je=await P("automatic",$),I=!i$1.value.hasOlder;}else {if(x||!i$1.value.hasNewer)return false;d.prepareHistoryPageAppend();try{je=await Q($);}catch(_e){throw $()&&d.cancelHistoryPageAppend(),_e}$()&&je<=0&&!i$1.value.hasNewer&&d.cancelHistoryPageAppend(),x=!i$1.value.hasNewer;}return w+=1,await nextTick(),await nextTick(),le(n,l)&&(je>0||!(he==="older"?I:x))};!I&&!await ve("older")&&(I=true),!x&&!await ve("newer")&&(x=true);let ke="older";for(;le(n,l)&&w<me.value.maxFillPages&&d.isMeasurable()&&!d.isScrollable()&&(!I||!x);){let he=ke==="older"?I?"newer":"older":x?"older":"newer";ke=he==="older"?"newer":"older",await ve(he)||(he==="older"?I=true:x=true);}return le(n,l)}async function qe(n,l={behavior:"auto",block:"center"}){if(!q.value||n==="")return false;let d=S.value;Ve();let w=R.value||J!==void 0||(i$1.value.loadingOlder??i$1.value.loading)||(i$1.value.loadingNewer??i$1.value.loading),I=++E;R.value=true,Re(true),ue=true,B=d,_=Ce(Oe());let x=()=>le(d,I);try{if(w||!be.value.includes(n)){let $=f.actions.loadAround;if($===void 0)return !1;let ve={};J=ve;try{if(!await y({kind:"locate-message",messageId:n},()=>$(n),x)||!x())return !1}finally{J===ve&&(J=void 0);}}return await nextTick(),await nextTick(),!x()||!await Ye(d,I)?!1:await Ke(d,I,n,l)}finally{E===I&&(R.value=false);}}function Fe(){oe.cancel();}function we(){if(!N.value){Fe();return}let n=t.readActions;if(n===void 0&&f.actions.markVisibleMessages===void 0){Fe();return}let l=Number.isFinite(G.value.visibleReadDelay)?Math.max(0,G.value.visibleReadDelay):Tt.visibleReadDelay;oe.schedule(()=>{if(!q.value||!Te.value)return;re();let d=f.actions.markVisibleMessages;if(d!==void 0){let x=H;d(x).catch($=>{t.hooks?.onError?.({kind:"visible-range",messageIds:x},$);});return}if(n===void 0)return;let w=H[H.length-1];if(w===void 0)return;let I=n.resolveTarget===void 0?w:n.resolveTarget(w);I!=null&&Promise.resolve(n.markRead(I)).catch(x=>{t.hooks?.onError?.({kind:"visible-range",messageIds:H},x);});},l);}function $e(n){H=Object.freeze([...n]),se();let l={kind:"visible-range",messageIds:H};t.hooks?.beforeAction?.(l);try{f.actions.onVisibleRange?.(H),t.hooks?.afterAction?.(l,void 0);}catch(d){throw t.hooks?.onError?.(l,d),d}N.value?we():Ue();}function Me(n,l){return !Z&&D===l&&S.value===n&&!ue&&!X.value}function tt(n,l){Me(n,l)&&(B=n,_=Ce(Oe()),N.value=true,se(),re(),we());}function Oe(){return i$1.value.entryUnreadNavigation===void 0?i$1.value.entryUnread:{state:"none"}}function Ce(n){return n.state!=="located"?n.state:`${n.state}:${n.firstMessageId}`}async function nt(n,l,d){for(let w=0;w<60;w+=1){if(!Me(n,l))return false;if(m.value?.scrollToMessage(d,{behavior:"auto",block:"center"})===true)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(x=>window.requestAnimationFrame(()=>x()));}return false}function Ue(){let n=S.value,l=Ce(Oe());if(n===""||i$1.value.loading||R.value||X.value||i$1.value.error!==null&&i$1.value.messages.length===0||B===n&&(_===l||_.startsWith("located:")||ue)||de===n||F!==null)return;if(!me.value.enabled){B=n,_=l,N.value=true,we();return}let d=++D;ue=false,N.value=false;let w=(async()=>{if(await nextTick(),!Me(n,d))return;let I=m.value;if(I===null||!I.isMeasurable())return;let x=Oe();if(x.state==="located"&&!be.value.includes(x.firstMessageId))return;let $=x.state==="located"?await nt(n,d,x.firstMessageId):false;if(x.state==="located"&&!$)return;$||I.scrollToLatest();let ve=0;for(;Me(n,d)&&ve<me.value.maxFillPages&&i$1.value.error===null&&(i$1.value.hasOlder||i$1.value.hasNewer&&f.actions.loadNewer!==void 0)&&I.isMeasurable()&&!I.isScrollable();){if(i$1.value.hasNewer&&f.actions.loadNewer!==void 0&&(i$1.value.messages.length===0||!i$1.value.hasOlder)){let he=E;I.prepareHistoryPageAppend();try{await C(),await nextTick();}finally{S.value===n&&E===he&&(D===d||ue)&&I.cancelHistoryPageAppend();}}else await P();if(!Me(n,d)||(ve+=1,await nextTick(),await nextTick(),!I.isMeasurable()))return}if(!Me(n,d)||!I.isMeasurable())return;let ke=Oe();if(ke.state==="located"){if(!be.value.includes(ke.firstMessageId)||!await nt(n,d,ke.firstMessageId))return}else I.scrollToLatest();await nextTick(),tt(n,d);})().catch(()=>{Me(n,d)&&(de=n);}).finally(()=>{F===w&&(F=null);});F=w;}function Re(n,l=false){D+=1,F=null,ue=false,N.value=n,n||(B="",_="",l||(de="")),Fe();}function Ve(){L!==void 0&&(E+=1,L.abort(),L=void 0,g=void 0,k.value=false);}function Be(){if(se(true),Ve(),ue=true,N.value)return;let n=S.value;D+=1,F=null,B=n,N.value=true,we();}let Je=Object.freeze({getViewportElement:()=>m.value?.getViewportElement()??null,loadOlder:P,retryOlder:Ae,loadNewer:C,retryNewer:ne,jumpToLatest:ce,jumpToEntryUnread:lt,scrollToMessage:We,locateMessage:qe,focusViewport:()=>m.value?.focusViewport()});return o(Je),watch(Te,n=>{n&&N.value?we():Fe();}),watch([()=>i$1.value.activeRemoteMessageRevision??0,m,S],()=>{let n=m.value;if(n===null||!q.value)return;let l=f.actions.drainActiveRemoteMessageIds?.()??[];n.trackRemoteMessageIds(l,{isAtBottom:M.value,isHistoryWindow:i$1.value.isHistoryWindow,isPageVisible:ge.value})&&(M.value=false);},{flush:"post"}),watch(()=>i$1.value.pendingLocationMessageId??"",n=>{(n!==""||R.value)&&(E+=1,R.value=false),n!==""&&(Ve(),N.value||Re(false));},{flush:"sync"}),watch([S,()=>i$1.value.loading,()=>i$1.value.error,()=>be.value.length,()=>i$1.value.hasOlder,()=>Ce(Oe()),me,()=>i$1.value.hasNewer,X],([n,l,d,w,,I],[x,,,$,,ve])=>{if(n!==x&&(Ve(),E+=1,R.value=false,J=void 0,Re(false),p(true),m.value?.clearNewMessageBadge(),V.value=0,M.value=true,H=[],U.value=false,u.value=false,T.value=false,a.value=false,k.value=false,g=void 0,h=false,c=void 0),n!==""&&n===x&&$!==void 0&&$>0&&w===0&&(i$1.value.hasOlder||i$1.value.hasNewer)&&N.value&&Re(false,true),n!==""&&n===x&&I!==ve&&!_.startsWith("located:")&&!ue&&I.startsWith("located:")&&(B="",_="",N.value=false),n===""){Re(false);return}if(d!==null&&i$1.value.messages.length===0){N.value||Re(false,true);return}l||Ue();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{Z=true,Ve(),E+=1,Re(false),p(true);}),()=>{let n={conversation:t.conversation,state:i$1.value,items:te.value,actions:Je,initialViewportSettled:S.value!==""&&(i$1.value.messages.length===0?!i$1.value.loading&&i$1.value.error===null&&!i$1.value.hasOlder&&!i$1.value.hasNewer:N.value&&B===S.value)},l=[v.header?.(n),v["before-list"]?.(n)];if(!q.value)l.push(v.unsupported?.(n)??h$1("div",{"data-im-thread-unsupported":""}));else if(!i$1.value.ready&&i$1.value.loading)l.push(v.loading?.(n)??h$1("div",{"data-im-thread-loading":""}));else if(i$1.value.error!==null&&i$1.value.messages.length===0)l.push(v.error?.(n)??h$1("div",{"data-im-thread-error":""}));else if(i$1.value.ready&&i$1.value.messages.length===0&&!i$1.value.hasOlder&&!i$1.value.hasNewer)l.push(v.empty?.(n)??h$1("div",{"data-im-thread-empty":""}));else {let d=h$1(pt,{ref:m,messageIds:be.value,contentKey:`${t.conversation.conversationType}\0${t.conversation.conversationId}`,loadingOlder:i$1.value.loadingOlder??i$1.value.loading,hasNewer:i$1.value.hasNewer,loadingNewer:i$1.value.loadingNewer??i$1.value.loading,followThreshold:G.value.followThreshold,olderPrefetchThreshold:G.value.olderPrefetchThreshold,visibleMargin:G.value.visibleMargin,activeDateOffset:G.value.activeDateOffset,activeDateEnabled:v["active-date"]!==void 0,resizeFollowEnabled:N.value&&!k.value&&!R.value&&!X.value,followNewMessages:ge.value&&!k.value&&!R.value&&!X.value,shouldFollowAppendedMessage:w=>{let I=i$1.value.messages.find(x=>x.id===w);return I===void 0?false:f.shouldFollowMessage?.(I)===true},pendingSendMessageIds:Ie.value,onReachStart:()=>{z("older").catch(()=>{});},onReachEnd:()=>{z("newer").catch(()=>{});},onSettled:et,onUserScroll:Be,onActiveDateChange:O,onVisibleRange:$e,onNewMessageCount:w=>{V.value=w;}},{default:()=>[v["viewport-before"]?.(n),h$1(vt,{items:te.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:v.item,"date-separator":v["date-separator"],"entry-unread":v["entry-unread"],encryption:v.encryption,system:v.system,message:v.message,"recalled-message":v["recalled-message"],"deleted-message":v["deleted-message"],"unsupported-body":v["unsupported-body"]}),v["viewport-after"]?.(n)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[v["active-date"]?.({label:ae.value,visible:Y.value&&ae.value!==""}),d,v["entry-unread-navigation"]?.({...n,count:i$1.value.entryUnreadNavigation?.state==="none"?0:i$1.value.entryUnreadNavigation?.count??0,loading:k.value,visible:n.initialViewportSettled&&!U.value&&!u.value&&!i$1.value.isHistoryWindow&&i$1.value.entryUnreadNavigation!==void 0&&i$1.value.entryUnreadNavigation.state!=="none"&&i$1.value.entryUnreadNavigation.count>0&&(T.value||i$1.value.hasOlder)})])),i$1.value.error!==null&&l.push(v.error?.(n)??h$1("div",{"data-im-thread-error":""}));}return l.push(v["after-list"]?.(n),v["jump-to-latest"]?.({...n,count:V.value,visible:a.value||!M.value||i$1.value.isHistoryWindow}),v["context-menu"]?.(n),v.composer?.(n)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},l)}}});function Bn(t){let o=new Map;for(let f of t){if(o.has(f.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${f.kind}`);o.set(f.kind,f.component);}let v=Object.freeze([...o.keys()]);return Object.freeze({kinds:v,resolve:f=>o.get(f)})}var Kn=140,qn=120;function st(t,o){if(t.width<=0||t.height<=0)return 0;let v=Math.max(0,Math.min(t.right,o.right)-Math.max(t.left,o.left)),f=Math.max(0,Math.min(t.bottom,o.bottom)-Math.max(t.top,o.top));return Math.min(1,v*f/(t.width*t.height))}function It(t,o){return {x:t.x,y:t.top-o,top:t.top-o,bottom:t.bottom+o,left:t.left,right:t.right,width:t.width,height:t.height+o*2,toJSON:()=>({})}}function wt(t){let o=Math.max(0,t.scrollIdleMs??Kn),v=Math.max(0,t.visibilityDwellMs??qn),f=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),m=Math.max(0,t.revealMarginPx??0),V=Math.max(0,t.preloadMarginPx??0),U=Math.max(m,V),k=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),R=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),g=new Map,L=new Map,u=reactive(new Set),T=new Set,a=new Set,h=[],c=null,M=null,H=null,oe=false,D=false,E=false,J=false,F=new Map,B=0,_=false;function de(){B+=1,_=false,F.clear();}function ue(p){let O=[...p].filter(([P,C])=>g.get(P)===C);if(O.length===0)return;let y=ee();i(true,y,O),Te(y,O);}function Z(p){if(!t.batchRegistration){ue(p);return}for(let[y,P]of p)F.set(y,P);if(_)return;_=true;let O=B;nextTick(()=>{if(E||O!==B)return;_=false;let y=[...F];F.clear(),ue(y),S();});}let N,ae;function Y(){N!==void 0&&clearTimeout(N),N=void 0;}function ye(){ae!==void 0&&clearTimeout(ae),ae=void 0;}function ee(){let p,O=new Map;return {getRootRect(){return p===void 0&&(p=c?.getBoundingClientRect()??null),p},getElementRect(y){let P=O.get(y);return P===void 0&&(P=y.getBoundingClientRect(),O.set(y,P)),P}}}function i(p=false,O=ee(),y=g){if(!p&&M!==null||c===null)return;let P=O.getRootRect();if(P===null)return;let C=It(P,U);for(let[Q,z]of y){let ne=O.getElementRect(Q);z.ratio=st(ne,P),z.intersecting=z.ratio>0,z.revealIntersecting=U>0?st(ne,C)>0:z.intersecting&&z.ratio>=f;}}function X(p){return p.intersecting&&p.ratio>=f}function ge(p){let O=L.get(p.key);return O!==void 0&&g.get(O)===p}function Te(p=ee(),O=g){let y=[];for(let[P,C]of O)if(!(!C.revealIntersecting||u.has(C.key))){if(U>m){if(m===0&&!X(C))continue;if(m>0){let Q=p.getRootRect();if(Q===null||st(p.getElementRect(P),It(Q,m))<=0)continue}}y.push(C);}for(let P of y)!ge(P)||u.has(P.key)||(u.add(P.key),t.onRevealed?.(P.item));}function q(p,O=false){let y=new Set(p.map(C=>C.key));if(!(!(y.size!==a.size||[...y].some(C=>!a.has(C)))&&!O)){a.clear();for(let C of y)a.add(C);t.onSettledVisibleChange?.(p.map(C=>C.item));}}function G(p,O=false){!O&&p.length===h.length&&p.every((y,P)=>y.key===h[P]?.key&&y.item===h[P]?.item)||(h=p,t.onSettledPreloadChange?.(p.map(y=>y.item)));}function me(){if(E||oe)return;let p=D;D=false;let O=B,y=c,P=()=>!E&&!oe&&O===B&&c===y,C=ee();i(false,C);let Q=C.getRootRect(),z=Q===null?0:(Q.top+Q.bottom)/2,ne=[...g.entries()].filter(([,W])=>X(W)).map(([W,ce])=>({target:ce,rect:C.getElementRect(W)})).sort((W,ce)=>Math.abs((W.rect.top+W.rect.bottom)/2-z)-Math.abs((ce.rect.top+ce.rect.bottom)/2-z)).slice(0,R).map(({target:W})=>W),Ae;if(t.onSettledPreloadChange!==void 0&&Q!==null){let W=It(Q,V);Ae=[...g.entries()].filter(([,se])=>se.revealIntersecting).map(([se,re])=>({target:re,rect:C.getElementRect(se)})).filter(({target:se,rect:re})=>X(se)||V>0&&st(re,W)>0).sort((se,re)=>Number(X(re.target))-Number(X(se.target))||Math.abs((se.rect.top+se.rect.bottom)/2-z)-Math.abs((re.rect.top+re.rect.bottom)/2-z)).slice(0,k).map(({target:se})=>se);}if(Te(C),!!P()&&(q(ne.filter(ge),p),!!P())){Ae!==void 0&&G(Ae.filter(ge),p);for(let W of ne){if(!P())return;!ge(W)||T.has(W.key)||(T.add(W.key),t.onActivated?.(W.item));}}}function S(){E||oe||(ye(),ae=setTimeout(()=>{ae=void 0,me();},v));}function ie(){E||(D=true,te(true),G([]),i(),Te(),q([]),ye(),Y(),N=setTimeout(()=>{N=void 0,te(false),S();},o));}function te(p){oe!==p&&(oe=p,t.onScrollingChange?.(p));}function be(){c?.removeEventListener("scroll",ie),M?.disconnect(),H?.disconnect(),M=null,H=null,c=null;}function Ie(p=true){if(E)return;let O=t.getRoot();if(!(O===c&&c!==null)){if(G([]),be(),c=O,c===null){p&&!J&&(J=true,Promise.resolve().then(()=>{J=false,E||(Ie(false),S());}));return}if(c.addEventListener("scroll",ie,{passive:true}),typeof IntersectionObserver<"u"){M=new IntersectionObserver(y=>{for(let P of y){let C=g.get(P.target);C!==void 0&&(C.intersecting=P.isIntersecting,C.ratio=P.intersectionRatio,U===0&&(C.revealIntersecting=P.isIntersecting&&P.intersectionRatio>=f));}Te(),S();},{root:c,threshold:[0,f,1]}),U>0&&(H=new IntersectionObserver(y=>{for(let P of y){let C=g.get(P.target);C!==void 0&&(C.revealIntersecting=P.isIntersecting);}Te(),S();},{root:c,rootMargin:`${U}px 0px`,threshold:0}));for(let y of g.keys())M.observe(y);for(let y of g.keys())H?.observe(y);}Z(g);}}function Le(p){G(h.filter(O=>O.key!==p)),u.delete(p),T.delete(p),a.delete(p);}return {register(p,O){if(E)return;let y=t.getKey(p),P=u.has(y),C=T.has(y),Q=O===null?void 0:g.get(O);Q!==void 0&&Q.key!==y&&(L.delete(Q.key),g.delete(O),Le(Q.key));let z=L.get(y);if(z!==void 0&&z!==O&&(M?.unobserve(z),H?.unobserve(z),g.delete(z),L.delete(y)),O===null){z!==void 0&&(M?.unobserve(z),H?.unobserve(z),g.delete(z),L.delete(y)),Le(y);return}let ne=g.get(O);if(ne?.key===y&&ne.item===p){let ce=c;Ie(),c!==ce&&S();return}let Ae={item:p,key:y,intersecting:ne?.key===y?ne.intersecting:false,ratio:ne?.key===y?ne.ratio:0,revealIntersecting:ne?.key===y?ne.revealIntersecting:false};g.set(O,Ae),L.set(y,O);let W=c;Ie(),c===W&&(M?.observe(O),H?.observe(O),Z([[O,Ae]])),P&&t.onRevealed?.(p),C&&ge(Ae)&&t.onActivated?.(p),S();},isRevealed:p=>u.has(t.getKey(p)),isActivated:p=>T.has(t.getKey(p)),isSettledVisible:p=>a.has(t.getKey(p)),isScrolling:()=>oe,notifyScroll:ie,refresh(){Ie(),de(),ue(g),S();},reset(){de(),Y(),ye(),te(false),D=false,q([]),G([]),be(),g.clear(),L.clear(),u.clear(),T.clear();},dispose(){E||(de(),Y(),ye(),te(false),D=false,q([]),G([]),be(),g.clear(),L.clear(),u.clear(),T.clear(),E=true);}}}function zn(t){let o=new Map,v=new Map,f=shallowReactive(new Map),m=[],V=false,U=u=>{let T=o.get(u.channel);return T===void 0?u.channel:`${u.channel}\0${T.getKey(u.item)}`},k=wt({getRoot:t.getRoot,batchRegistration:t.batchRegistration,getKey:u=>u.key,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:u=>{for(let T of o.values())T.onScrollingChange?.(u);},onRevealed:u=>u.targets.forEach(T=>o.get(T.channel)?.onRevealed?.(T.item)),onActivated:u=>u.targets.forEach(T=>o.get(T.channel)?.onActivated?.(T.item)),onSettledPreloadChange:u=>{let T=u.flatMap(a=>a.targets);for(let[a,h]of o){let c=T.filter(M=>M.channel===a).map(M=>M.item);h.onSettledPreloadChange?.(c.slice(0,Math.max(0,h.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:u=>{R(u.flatMap(T=>T.targets));}});function R(u){m=u;for(let[T,a]of o){let h=u.filter(M=>M.channel===T).map(M=>M.item),c=a.maxSettledVisible===void 0?h:h.slice(0,a.maxSettledVisible);a.onSettledVisibleChange?.(c);}}function g(u){let T=[...v.values()].flatMap(c=>[...c.values()].filter(M=>M.element===u).map(M=>M.target)),a=f.get(u);if(a!==void 0&&T.length===a.targets.length&&T.every((c,M)=>c===a.targets[M]))return;if(T.length===0)a!==void 0&&(f.delete(u),[...f.values()].some(c=>c.key===a.key)||k.register(a,null));else {let c={key:JSON.stringify(T.map(U)),targets:T};f.set(u,c),k.register(c,u);}let h=m.flatMap(c=>{let M=v.get(c.channel)?.get(o.get(c.channel).getKey(c.item));return M===void 0?[]:[M.target]});(h.length!==m.length||h.some((c,M)=>c!==m[M]))&&R(h);}function L(u){return T=>{if(V)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(o.has(u))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${u}`);o.set(u,T);let a=shallowReactive(new Map);v.set(u,a);let h=false,c=D=>({channel:u,item:D});function M(){let D=[...a.values()].map(E=>E.element);a.clear();for(let E of D)g(E);T.onScrollingChange?.(false),T.onSettledVisibleChange?.([]),T.onSettledPreloadChange?.([]);}function H(D,E){let J=a.get(T.getKey(D)),F=J===void 0?void 0:f.get(J.element);return F!==void 0&&E(F)}return {register(D,E){if(h||V)return;let J=T.getKey(D),F=a.get(J);if(E===null){F!==void 0&&(a.delete(J),g(F.element));return}if(F?.target.item===D&&F.element===E){let _=f.get(E);_!==void 0&&k.register(_,E);return}let B=F?.target.item===D?F.target:c(D);for(let[_,de]of a)_!==J&&de.element===E&&a.delete(_);a.set(J,{target:B,element:E}),g(E),F!==void 0&&F.element!==E&&g(F.element);},isRevealed:D=>H(D,k.isRevealed),isActivated:D=>H(D,k.isActivated),isSettledVisible:D=>H(D,k.isSettledVisible),isScrolling:k.isScrolling,notifyScroll:k.notifyScroll,refresh:k.refresh,reset:M,dispose(){h||(M(),h=true,o.delete(u),v.delete(u));}}}}return {createFactory:L,refresh:k.refresh,dispose(){if(!V){for(let u of f.values())k.register(u,null);f.clear();for(let u of o.values())u.onSettledPreloadChange?.([]);v.clear(),o.clear(),k.dispose(),V=true;}}}}function Wn(t){let o=rt();if(o===void 0)throw new Error("useImThreadLayoutMeasurement requires an ImThreadViewport");let v=o.registerLayoutMeasurement(t);return onBeforeUnmount(v.dispose),v}export{mt as ImThreadBodySwitch,vt as ImThreadItems,Un as ImThreadSurface,pt as ImThreadViewport,xn as createImThreadSurfaceContext,Bn as createMessageRendererRegistry,zn as createThreadVisibilityTargetGroup,wt as createThreadVisibilityTargets,kn as provideImThreadSurfaceContext,un as useImText,Wn as useImThreadLayoutMeasurement,yt as useImThreadSurfaceContext,mn as useOptionalImThreadReadActions};
|
|
1
|
+
import {h,C,p,i,q,m,z,B,o,j,g}from'./chunk-2LUSPYH5.js';import {f,h as h$2,i as i$1,g as g$1}from'./chunk-JOD67FT3.js';import {a}from'./chunk-Q2DEFN53.js';import'./chunk-6EPXLFLD.js';import'./chunk-ZFYM6YHK.js';import'./chunk-JHGB6KYI.js';import'./chunk-WOT6VMZA.js';import {defineComponent,h as h$1,onUpdated,onUnmounted,ref,provide,watch,nextTick,onMounted,onBeforeUnmount,computed,inject,isVNode,cloneVNode,Fragment,reactive,shallowReactive}from'vue';function fn(t){let o=0,v=0;for(let c of t)c.kind==="video"?v+=1:o+=1;return {imageCount:o,videoCount:v}}function mn(t){return {systemMessage:o=>o.body.system!==void 0?g$1(o.body.system,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):"",mediaPlaceholder:o=>i$1(o.contentType,{locale:t.locale(),durationMs:o.body.voice?.durationMs,stickerImageType:o.body.sticker?.imageType,gameType:o.body.game?.gameType,callKind:o.body.call?.callKind,...o.body.filesAlbum===void 0?{}:{filesAlbum:{count:o.body.filesAlbum.items.length,caption:o.body.filesAlbum.caption}},...o.body.mediaAlbum===void 0?{}:{mediaAlbum:fn(o.body.mediaAlbum.items)}}),lastMessage:o=>o.lastMessageSummary!==void 0?h$2(o.lastMessageSummary,{locale:t.locale(),resolveName:t.resolveName,selfId:t.selfId()}):o.lastMessagePreview,failureText:o=>o.failure?.displayCode!==void 0?f(o.failure.displayCode,{locale:t.locale(),mediaKind:o.failure.mediaKind,params:o.failure.params}):o.failure?.message??""}}var Gt=Symbol("ImThreadReadActions");function Wt(t){provide(Gt,t);}function hn(){return inject(Gt,void 0)}var Tt=defineComponent({name:"ImThreadBodySwitch",inheritAttrs:false,props:{message:{type:Object,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{attrs:o,slots:v}){return Wt(t.readActions),()=>{let c=h(t.message),m=t.rendererRegistry.resolve(c);return m!==void 0?h$1(m,{...o,message:t.message,presentation:t.presentation}):v["unsupported-body"]!==void 0?v["unsupported-body"]({kind:c,message:t.message}):h$1("span",{"data-im-thread-unsupported-body":c,"aria-hidden":"true"})}}});var bt=Symbol("ImThreadViewportRegistration");function ut(){return inject(bt,void 0)}var It=defineComponent({name:"ImThreadItems",props:{items:{type:Array,required:true},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0}},setup(t,{slots:o}){let v=ut(),c=new Map,m=new Map;onUpdated(()=>{let a=new Set,h=new Set;for(let f of t.items)f.kind==="message"||f.kind==="system"?a.add(f.key):f.kind==="date-separator"&&h.add(f.key);for(let f of c.keys())a.has(f)||c.delete(f);for(let f of m.keys())h.has(f)||m.delete(f);}),onUnmounted(()=>{c.clear(),m.clear();});function A(a,h){let f=Array.isArray(h)?h:[h];return f.length===1&&isVNode(f[0])?cloneVNode(f[0],{key:a}):h$1(Fragment,{key:a},f)}function C(a,h){let f=c.get(a);if(f?.messageId===h)return f.setElement;let R=D=>{v?.registerMessageNode(h,D instanceof HTMLElement?D:null);};return c.set(a,{messageId:h,setElement:R}),R}function V(a,h){let f=m.get(a);if(f!==void 0)return f.label=h,f.setElement;let R={label:h,setElement:D=>{v?.registerDateNode(a,R.label,D instanceof HTMLElement?D:null);}};return m.set(a,R),R.setElement}function M(a){return o.encryption?.({item:a})??h$1("div",{"data-im-thread-encryption":a.key})}function g(a){let h=V(a.key,a.label);return o["date-separator"]?.({item:a,setElement:h})??h$1("div",{ref:h,"data-im-thread-date-separator":a.key},a.label)}function x(a){v?.registerEntryUnreadNode(a instanceof HTMLElement?a:null);}function u(a){return o["entry-unread"]?.({item:a,setElement:x})??h$1("div",{ref:x,"data-im-thread-entry-unread":a.key,...a.count===void 0?{}:{"data-count":String(a.count)}})}function y(a){let h=C(a.key,a.message.id);return o.item!==void 0?o.item({item:a,setElement:h}):o.message!==void 0?o.message({item:a,setElement:h}):a.message.deletedForEveryone!==void 0?o["deleted-message"]?.({item:a,setElement:h})??h$1("article",{ref:h,"data-im-thread-message-id":a.message.id,"data-im-thread-message-terminal":"deleted-for-everyone"},[h$1("span",{"data-im-thread-anchor-point":""})]):a.message.recalled!==void 0?o["recalled-message"]?.({item:a,setElement:h})??h$1("article",{ref:h,"data-im-thread-message-id":a.message.id,"data-im-thread-message-terminal":"recalled"},[h$1("span",{"data-im-thread-anchor-point":""})]):a.kind==="system"&&o.system!==void 0?o.system({item:a,setElement:h}):h$1("article",{ref:h,"data-im-thread-message-id":a.message.id,"data-first-of-run":a.kind==="message"?String(a.firstOfRun):void 0},[h$1("span",{"data-im-thread-anchor-point":""}),h$1(Tt,{message:a.message,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{"unsupported-body":o["unsupported-body"]===void 0?void 0:f=>o["unsupported-body"]?.(f)})])}return ()=>h$1("div",{"data-im-thread-items":""},t.items.map(a=>{switch(a.kind){case "encryption":return o.item!==void 0?A(a.key,o.item({item:a})):A(a.key,M(a));case "date-separator":return o.item!==void 0?A(a.key,o.item({item:a,setElement:V(a.key,a.label)})):A(a.key,g(a));case "entry-unread":return o.item!==void 0?A(a.key,o.item({item:a,setElement:x})):A(a.key,u(a));case "system":case "message":return A(a.key,y(a))}return a}))}});function nt(){let t,o=0,v=0,c;function m(){t!==void 0&&clearTimeout(t),t=void 0,c=void 0;}function A(){t=void 0;let V=o-performance.now();if(V>0){v=o,t=setTimeout(A,V);return}let M=c;c=void 0,M?.();}function C(V,M){o=performance.now()+M,c=V,!(t!==void 0&&o>=v)&&(t!==void 0&&clearTimeout(t),v=o,t=setTimeout(A,M));}return {schedule:C,cancel:m}}function $t(t){let o=new Set,v=new Map,c=new Set;function m(){let M=[...c];c.clear();let g=[],x=[];for(let u of M)if(u.active)try{g.push({job:u,commit:u.read()});}catch(y){x.push(y);}for(let{job:u,commit:y}of g)if(u.active)try{y?.();}catch(a){x.push(a);}x.length>0&&queueMicrotask(()=>{throw new AggregateError(x,"Thread layout measurement failed")});}function A(M){M.active&&(c.add(M),t.requestFrame(m));}function C(M,g){let x=v.get(g);x?.delete(M),x?.size===0&&(v.delete(g),t.unobserve(g));}function V(M){let g={read:M,elements:new Set,active:true};return o.add(g),{observe(x){if(!g.active)return;let u=new Set(x),y=u.size!==g.elements.size||[...u].some(a=>!g.elements.has(a));for(let a of g.elements)u.has(a)||C(g,a);for(let a of u){if(g.elements.has(a))continue;let h=v.get(a);h===void 0&&(h=new Set,v.set(a,h),t.observe(a)),h.add(g);}g.elements=u,y&&u.size>0&&A(g);},invalidate:()=>A(g),dispose(){g.active=false,c.delete(g),o.delete(g);for(let x of g.elements)C(g,x);g.elements.clear();}}}return {register:V,hasTarget:M=>v.has(M),observeTargets:()=>v.forEach((M,g)=>t.observe(g)),resized:M=>M.forEach(g=>v.get(g)?.forEach(A)),invalidateAll:()=>o.forEach(A),dispose(){for(let M of o)M.active=false;o.clear(),c.clear(),v.clear();}}}var Qt=120,Vn=500,Ye=.5,xn=8;function wt(t){let o=t.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(o!==void 0&&Number.isFinite(o)&&o>0?o:1)}var Mt=defineComponent({name:"ImThreadViewport",props:{messageIds:{type:Array,required:true},contentKey:{type:String,default:""},loadingOlder:{type:Boolean,default:false},hasNewer:{type:Boolean,default:false},loadingNewer:{type:Boolean,default:false},followThreshold:{type:Number,default:120},olderPrefetchThreshold:{type:Number,default:120},followNewMessages:{type:Boolean,default:true},shouldFollowAppendedMessage:{type:Function,default:void 0},pendingSendMessageIds:{type:Array,default:()=>[]},visibleMargin:{type:Number,default:8},resizeFollowEnabled:{type:Boolean,default:true},activeDateOffset:{type:Number,default:16},activeDateEnabled:{type:Boolean,default:false}},emits:{"reach-start":()=>true,"reach-end":()=>true,"visible-range":t=>true,settled:t=>true,"new-message-count":t=>true,"user-scroll":()=>true,"active-date-change":t=>true},setup(t,{emit:o$1,expose:v,slots:c}){let m$1=ref(null),A=ref(null),C$1=new Map,V,M=new Map,g$1=new Set,x=new Map,u=0,y=[],a,h,f,R,D=$t({requestFrame:le,observe:e=>f?.observe(e),unobserve:e=>{e!==m$1.value&&e!==A.value&&!M.has(e)&&f?.unobserve(e);}}),$,B$1=false,O,z$1=new Set,j$1=false,K,q$1=0,te="",we=1,J=false,ee=false,_=true,X=false,ve=false,be=true,ne=false,i=0,ae=-1,Me=-1,pe=nt(),N,ie,H,F,se=ref(true),Pe=ref(0),ue=C(e=>{Pe.value=e,o$1("new-message-count",e);});function He(e){let r=Number.isFinite(t.followThreshold)?Math.max(0,t.followThreshold):0;return e.scrollHeight-e.clientHeight-e.scrollTop<=r}function p$1(e=t.messageIds){return e.flatMap(r=>{let s=C$1.get(r);if(s===void 0)return [];let T=s.getBoundingClientRect(),E=s.querySelector("[data-im-thread-anchor-point]");return [{id:r,top:T.top,bottom:T.bottom,anchorTop:E?.getBoundingClientRect().top??T.top}]})}function S(e="",r=1){let s=Math.min(1,Math.max(0,r));te!==""&&te!==e&&x.get(te)?.element.style.removeProperty("opacity"),te=e,we=s,e!==""&&x.get(e)?.element.style.setProperty("opacity",String(s));}function I(){S();}function P(){let e=m$1.value;if(j$1||e===null||!t.activeDateEnabled)return;let r=[...x.entries()].filter(([,W])=>e.contains(W.element)).map(([W,U])=>{let Ee=U.element.getBoundingClientRect();return {key:W,label:U.label,top:Ee.top,height:Ee.height}}).sort((W,U)=>W.top-U.top),s=e.getBoundingClientRect(),T=r.find(W=>W.height>0)?.height??28,E=g({markers:r,viewportTop:s.top,overlayTop:Number.isFinite(t.activeDateOffset)?Math.max(0,t.activeDateOffset):0,overlayHeight:T});if(E===null){I(),o$1("active-date-change",null);return}S(E.inlineDateKey,E.inlineOpacity),o$1("active-date-change",E);}function k(e){h={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight};}function Z(e){let r=h;if(r===void 0)return false;let s=Math.max(0,e.scrollHeight-e.clientHeight);return s<r.scrollHeight-r.height&&r.scrollTop>s&&Math.abs(e.scrollTop-s)<=wt(e)}function Y(e){return Z(e)||K!==void 0&&(K.behavior==="smooth"||Math.abs(e.scrollTop-K.targetTop)<=wt(e))?0:e.scrollTop-u}function re(e,r){r!==0&&(u=e.scrollTop-r,K=void 0,Xe());}function Ae(e,r){let s=Y(e);if(H!==void 0)return H.expectedOffset-=s,Qe(),re(e,s),X||Ze(),false;let T=h;if(T===void 0)return false;let E=a,W=E===void 0?void 0:p$1([E.id])[0],U=e.scrollTop-T.scrollTop,Ee=Z(e)?0:U,Ue=E===void 0||W===void 0?0:(W.anchorTop??W.top)-r.top-E.offset+U;return T.scrollHeight!==e.scrollHeight||T.width!==e.clientWidth||T.height!==e.clientHeight||Math.abs(Ue)>Ye?(h=void 0,!J&&!ee&&!t.loadingOlder&&!t.loadingNewer&&!t.hasNewer&&t.resizeFollowEnabled&&se.value&&Math.abs(Ee)<=Ye?(G(),true):(E!==void 0&<({...E,offset:E.offset-Ee}),re(e,s),false)):false}function Q(){let e=m$1.value;if(j$1||e===null)return;let r=e.getBoundingClientRect();if(Ae(e,r))return;let s=$!==void 0&&B$1?t.messageIds.filter(U=>g$1.has(U)):t.messageIds,T=p$1(s);if($!==void 0&&B$1&&T.length===0){se.value=He(e);return}let E=T.filter(U=>B({viewportTop:r.top,viewportBottom:r.bottom,messageTop:U.top,messageBottom:U.bottom,margin:t.visibleMargin})).map(U=>U.id),W=E.length!==y.length||E.some((U,Ee)=>y[Ee]!==U);y=Object.freeze(E),a=o(T,{top:r.top,bottom:r.bottom}),k(e),ue.acknowledgeVisible(E),se.value=He(e),W&&o$1("visible-range",y),o$1("settled",{visibleMessageIds:y,...y.length===0?{}:{newestVisibleMessageId:y[y.length-1]},isAtBottom:se.value,newMessageCount:Pe.value});}function le(e){if(z$1.add(e),O!==void 0)return;let r=()=>{O=void 0;let s=[...z$1];z$1.clear(),s.forEach(T=>T());};typeof globalThis.requestAnimationFrame=="function"?O=globalThis.requestAnimationFrame(r):O=globalThis.setTimeout(r,0);}function he(){O!==void 0&&(typeof O=="number"&&typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(O):globalThis.clearTimeout(O),O=void 0,z$1.clear());}function oe(){le(Q);}function $e(){let e=m$1.value;if(e===null)return;let r=e.getBoundingClientRect(),s=o(p$1(),{top:r.top,bottom:r.bottom});s!==void 0&&(a=s,k(e));}function ot(){return _&&H===void 0&&!ee&&!t.loadingOlder}function at(){$e(),_=false,ae=i,ee=true,se.value=false,o$1("reach-start"),le(()=>{t.loadingOlder||(ee=false);});}function it(e){return t.hasNewer&&!J&&!t.loadingOlder&&!t.loadingNewer&&He(e)}function Je(){J=true,se.value=false,Me=i,o$1("reach-end"),le(()=>{t.loadingNewer||(J=false);});}function de(){let e=m$1.value;e===null||i===Me||!it(e)||Je();}function Xe(){let e=m$1.value;if(j$1||e===null)return;let r=e.scrollTop,s=Z(e),T=K,E=false;if(T!==void 0){let U=Math.abs(r-T.targetTop)<=wt(e);E=T.behavior==="smooth"||U,(T.behavior!=="smooth"||U)&&(K=void 0);}!E&&!s&&!X&&be&&H===void 0&&r!==u&&(X=true,ve=true,i+=1);let W=X&&!E&&!s&&r!==u;if(W&&(q$1+=1,o$1("user-scroll"),le(P)),X&&!ne&&ye(),!_&&ve&&i!==ae&&r<u&&r>Le()&&je(),H!==void 0&&!E)if(X){let U=Ge();U!==void 0&&(H.expectedOffset=U);}else Qe(),Ze();ot()&&W&&r>=0&&m({previousScrollTop:u,currentScrollTop:r,topThreshold:t.olderPrefetchThreshold})&&at(),W&&it(e)&&z({previousScrollTop:u,currentScrollTop:r,isAtBottom:He(e),isHistoryWindow:t.hasNewer,isPageSettling:E})&&Je(),u=r,oe();}function ze(e,r="auto"){K={targetTop:e,behavior:r};}function st(e){let r=H,s=A.value;if(!(r===void 0||s===null)){if(r.visualOffset=Math.abs(e)<=Ye?0:e,r.visualOffset===0){s.style.removeProperty("transform"),s.style.removeProperty("will-change");return}s.style.setProperty("transform",`translate3d(0, ${r.visualOffset}px, 0)`),s.style.setProperty("will-change","transform");}}function De(){F!==void 0&&(clearTimeout(F),F=void 0),H!==void 0&&H.visualOffset!==0&&(a=void 0,h=void 0);let e=A.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),H=void 0,K=void 0;}function Ge(){let e=m$1.value,r=H;if(e===null||r===void 0)return;let s=C$1.get(r.anchor.id);return s===void 0?void 0:(s.querySelector("[data-im-thread-anchor-point]")??s).getBoundingClientRect().top-e.getBoundingClientRect().top}function Qe(){let e=H,r=Ge();if(e===void 0||r===void 0)return;let s=e.expectedOffset-r;Math.abs(s)<=Ye||(st(e.visualOffset+s),e.committed=false,e.attempts=0);}function _e(){F!==void 0&&clearTimeout(F),F=setTimeout(()=>{F=void 0,!(X||H?.committed!==true)&&De();},Vn);}function Fe(){let e=m$1.value,r=H;if(j$1||e===null||r===void 0||X)return;let s=r.visualOffset;if(Math.abs(s)<=Ye){r.committed=true,_e();return}let T=Math.max(0,e.scrollHeight-e.clientHeight),E=Math.min(T,Math.max(0,e.scrollTop-s));if(ze(E),e.scrollTop=E,Math.abs(e.scrollTop-E)>Ye){K=void 0,r.committed=false,r.attempts+=1,r.attempts<xn?Ze():(De(),K=void 0,u=e.scrollTop);return}st(0),u=e.scrollTop,r.expectedOffset=Ge()??r.expectedOffset,r.committed=true,r.attempts=0,_e();}function Ze(){F!==void 0&&clearTimeout(F),F=setTimeout(()=>{F=void 0,Fe();},Qt);}function Oe(e){e!==void 0&&(H===void 0&&(H={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:false,attempts:0}),Qe(),!X&&Fe());}function lt(e){let r=m$1.value;if(r===null||e===void 0)return;let s=r.getBoundingClientRect(),T=q(e,p$1([e.id]),{top:s.top,bottom:s.bottom});if(T!==void 0){let E=Math.max(0,r.scrollHeight-r.clientHeight),W=Math.min(E,Math.max(0,r.scrollTop+T));ze(W),r.scrollTop=W,u=r.scrollTop,h=void 0;}}function Le(){return Number.isFinite(t.olderPrefetchThreshold)?Math.max(0,t.olderPrefetchThreshold):0}function Ce(){q$1+=1,K?.behavior==="smooth"&&(K=void 0),ve=false,X||(X=true,i+=1),ne&&pe.cancel();}function je(){let e=m$1.value;if(!(e===null||i===ae)){if(ee||t.loadingOlder){ae=i,_=false;return}H!==void 0&&De(),_=true,ot()&&e.scrollTop<=Le()&&at();}}function qe(){q$1+=1,a=void 0,h=void 0,pe.cancel(),De(),X=false,ve=false,ne=false,N=void 0,ie=void 0,i+=1,ae=-1,Me=-1,_=true,ee=false,J=false,K=void 0;}function Re(){ne||(pe.cancel(),X=false,ve=false,H!==void 0&&(H.attempts=0),Fe());}function ye(){ne||pe.schedule(Re,Qt);}function Ne(){K=void 0,Re();}function dt(e){be=false,ne=true,Ce(),N=e.touches?.[0]?.clientY;}function et(e){let r=e.touches?.[0]?.clientY;r!==void 0&&(N!==void 0&&r!==N&&(q$1+=1),N!==void 0&&r>N?je():N!==void 0&&r<N&&de(),N=r);}function n(){ne=false,N=void 0,ye();}function l(e){be=true,Ce(),e.deltaY<0?je():e.deltaY>0&&de(),ye();}function d(e){e.pointerType!=="touch"&&(be=true,Ce(),ie=e.clientY,ye());}function b(e){e.pointerType==="touch"||!X||ie===void 0||(e.clientY!==ie&&(q$1+=1),e.clientY<ie?je():e.clientY>ie&&de(),ie=e.clientY,ye());}function w(e){e.pointerType!=="touch"&&(ie=void 0,ye());}function L(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(be=true,Ce(),e.key==="ArrowUp"||e.key==="PageUp"||e.key==="Home"||e.key===" "&&e.shiftKey?je():de(),ye());}function G(e="auto"){let r=m$1.value;if(r===null)return;q$1+=1,h=void 0,De();let s=Math.max(0,r.scrollHeight-r.clientHeight);ze(s,e),r.scrollTo?.({top:s,behavior:e}),r.scrollTop!==s&&(r.scrollTop=s),u=r.scrollTop,ue.clear(),B$1=false,Q();}function ge(){let e=m$1.value;return e!==null&&e.clientWidth>0&&e.clientHeight>0}function ce(){let e=m$1.value;return ge()&&e!==null&&e.scrollHeight>e.clientHeight+1}function Te(e,r={}){return Ve(C$1.get(e),r)}function Ve(e,r){let s=m$1.value;if(s===null||e===void 0||!s.contains(e)||s.clientHeight<=0)return false;q$1+=1,De();let T=s.getBoundingClientRect(),E=e.getBoundingClientRect(),W=r.block??"center",U;W==="start"?U=s.scrollTop+E.top-T.top:W==="end"?U=s.scrollTop+E.bottom-T.bottom:W==="nearest"?E.top>=T.top&&E.bottom<=T.bottom?U=s.scrollTop:E.top<T.top?U=s.scrollTop+E.top-T.top:U=s.scrollTop+E.bottom-T.bottom:U=j({currentScrollTop:s.scrollTop,scrollHeight:s.scrollHeight,targetHeight:E.height,targetTop:E.top,viewportHeight:s.clientHeight,viewportTop:T.top});let Ee=Math.max(0,s.scrollHeight-s.clientHeight),Ue=Math.min(Ee,Math.max(0,U));h=void 0;let We=r.behavior??"auto";return ze(Ue,We),s.scrollTo?.({top:Ue,behavior:We}),s.scrollTop!==Ue&&(s.scrollTop=Ue),u=s.scrollTop,B$1=false,Q(),true}function xe(e){let r=m$1.value;if(r===null||e===void 0||!r.contains(e)||r.clientHeight<=0)return null;let s=e.getBoundingClientRect(),T=r.scrollTop+s.top-r.getBoundingClientRect().top+s.height/2,E=r.clientHeight/2;return {older:T<E-1,newer:r.scrollHeight-T<E-1}}function gt(){return xe(V)}function nn(e){return xe(C$1.get(e))}function rn(){ue.clear();}function on(){J=true,se.value=false;}function an(){J=false,oe();}function sn(e,r){let s=C$1.get(e);if(s!==r){if(s!==void 0&&($?.unobserve(s),s.style.removeProperty("--im-thread-placeholder-play-state"),D.hasTarget(s)||f?.unobserve?.(s),M.delete(s),g$1.delete(e)),r===null){C$1.delete(e),g$1.delete(e);return}C$1.set(e,r),M.set(r,e),typeof globalThis.IntersectionObserver=="function"&&r.style.setProperty("--im-thread-placeholder-play-state","paused"),$?.observe(r),f?.observe(r),oe();}}function ln(e,r,s){let T=x.get(e);if(s===null){x.delete(e);return}x.set(e,{element:s,label:r}),te===e&&s.style.setProperty("opacity",String(we)),T?.element!==s&&(s.dataset.imThreadDateSeparator=e);}return provide(bt,{registerLayoutMeasurement:D.register,registerMessageNode:sn,registerDateNode:ln,registerEntryUnreadNode:e=>{V=e??void 0;}}),watch(()=>t.contentKey,(e,r)=>{if(e===r)return;qe();let s=m$1.value;s!==null&&(u=s.scrollTop);},{flush:"sync"}),watch(()=>t.messageIds,async(e,r)=>{if(e.length===r.length&&e.every((fe,Ke)=>fe===r[Ke]))return;let s=m$1.value;if(s===null)return;let T=new Set(r);r.length>0&&e.length>0&&!e.some(fe=>T.has(fe))&&qe();let W=t.contentKey,U=q$1,Ee=se.value,Ue=r[r.length-1],We=Ue===void 0?-1:e.indexOf(Ue),tt=We<0?[]:e.slice(We+1).filter(fe=>!T.has(fe)),dn=tt.some(fe=>t.pendingSendMessageIds.includes(fe)),vt=J||t.loadingNewer||ee||t.loadingOlder,un=e.length===r.length&&e.every(fe=>T.has(fe))&&e.some((fe,Ke)=>fe!==r[Ke]),Ot=r[0],Vt=Ot!==void 0&&e.indexOf(Ot)>0,ht;if(a!==void 0&&(Vt||tt.length>0&&vt)){let fe=s.getBoundingClientRect(),Ke=p$1([a.id]),pt=Ke[0],cn=pt!==void 0&&pt.bottom>fe.top&&pt.top<fe.bottom?Ke:p$1();ht=p(a,cn,{top:fe.top,bottom:fe.bottom});}if(await nextTick(),!(j$1||t.contentKey!==W||q$1!==U)){if(dn&&t.followNewMessages){G();return}if(un&&Ee&&t.followNewMessages&&t.resizeFollowEnabled&&!t.hasNewer&&!vt){G();return}if(Vt&&(ee=false,Oe(ht)),tt.length>0){if(vt){J=false,H===void 0&<(ht),se.value=false,oe();return}(Ee||tt.some(Ke=>t.shouldFollowAppendedMessage?.(Ke)===true))&&t.followNewMessages?G():ue.add(tt);}oe();}},{flush:"pre"}),watch(()=>t.loadingNewer,(e,r)=>{e||!r||!J||le(()=>{t.loadingNewer||(J=false);});},{flush:"pre"}),watch(()=>t.loadingOlder,(e,r)=>{if(e){ee=true;return}!r||!ee||le(()=>{t.loadingOlder||(ee=false);});},{flush:"pre"}),onMounted(()=>{let e=m$1.value;if(e!==null){if(u=e.scrollTop,e.addEventListener("scroll",Xe,{passive:true}),e.addEventListener("scrollend",Ne,{passive:true}),e.addEventListener("touchstart",dt,{passive:true}),e.addEventListener("touchmove",et,{passive:true}),e.addEventListener("touchend",n,{passive:true}),e.addEventListener("touchcancel",n,{passive:true}),e.addEventListener("wheel",l,{passive:true}),e.addEventListener("pointerdown",d,{passive:true}),e.addEventListener("pointermove",b,{passive:true}),e.addEventListener("pointerup",w,{passive:true}),e.addEventListener("pointercancel",w,{passive:true}),e.addEventListener("keydown",L),typeof globalThis.ResizeObserver=="function"){f=new globalThis.ResizeObserver(r=>{if(j$1||m$1.value===null)return;D.resized(r.map(T=>T.target)),r.some(({target:T})=>T===e||T===A.value||M.has(T))&&Q();}),f.observe(e),A.value!==null&&f.observe(A.value);for(let r of C$1.values())f.observe(r);D.observeTargets();}if(R=e.ownerDocument.fonts,R?.addEventListener("loadingdone",D.invalidateAll),typeof globalThis.IntersectionObserver=="function"){$=new globalThis.IntersectionObserver(r=>{for(let s of r){let T=M.get(s.target);if(T===void 0)continue;let E=s.target,W=s.isIntersecting?"running":"paused";E.style.getPropertyValue("--im-thread-placeholder-play-state")!==W&&E.style.setProperty("--im-thread-placeholder-play-state",W),s.isIntersecting?g$1.add(T):g$1.delete(T);}B$1=true,oe();},{root:e,rootMargin:`${Number.isFinite(t.visibleMargin)?Math.max(0,t.visibleMargin):0}px 0px`});for(let r of C$1.values())$.observe(r);}oe();}}),onBeforeUnmount(()=>{j$1=true;let e=m$1.value;e!==null&&e.removeEventListener("scroll",Xe),e!==null&&(e.removeEventListener("scrollend",Ne),e.removeEventListener("touchstart",dt),e.removeEventListener("touchmove",et),e.removeEventListener("touchend",n),e.removeEventListener("touchcancel",n),e.removeEventListener("wheel",l),e.removeEventListener("pointerdown",d),e.removeEventListener("pointermove",b),e.removeEventListener("pointerup",w),e.removeEventListener("pointercancel",w),e.removeEventListener("keydown",L)),pe.cancel(),De(),he(),R?.removeEventListener("loadingdone",D.invalidateAll),D.dispose(),f?.disconnect(),$?.disconnect(),I(),V=void 0;for(let r of C$1.values())r.style.removeProperty("--im-thread-placeholder-play-state");C$1.clear(),M.clear(),g$1.clear(),x.clear(),ue.clear();}),v({getViewportElement:()=>m$1.value,clearNewMessageBadge:rn,clearActiveDate:I,isAtBottom:computed(()=>se.value),isMeasurable:ge,isScrollable:ce,getMessageCenteringNeeds:nn,newMessageCount:computed(()=>Pe.value),prepareHistoryPageAppend:on,cancelHistoryPageAppend:an,trackRemoteMessageIds:(e,r)=>ue.trackRemote(e,r),scrollToLatest:G,scrollToMessage:Te,scrollToEntryUnread:()=>Ve(V,{block:"center",behavior:"auto"}),getEntryUnreadCenteringNeeds:gt,focusViewport:()=>m$1.value?.focus({preventScroll:true})}),()=>h$1("div",{ref:m$1,"data-im-thread-viewport":"",role:"log",tabindex:-1},[h$1("div",{ref:A,"data-im-thread-viewport-content":""},c.default?.())])}});var Zt=Symbol("ImThreadSurfaceContext");function Cn(t){if(typeof t.getState!="function")throw new TypeError("ImThreadSurfaceContext.getState \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.actions?.loadOlder!="function")throw new TypeError("ImThreadSurfaceContext.actions.loadOlder \u5FC5\u987B\u662F\u51FD\u6570");if(typeof t.formatDate!="function")throw new TypeError("ImThreadSurfaceContext.formatDate \u5FC5\u987B\u662F\u51FD\u6570");return Object.freeze({...t,actions:Object.freeze({...t.actions})})}function Nn(t){provide(Zt,t);}function Rt(){let t=inject(Zt);if(t===void 0)throw new Error("ImThreadSurface \u9700\u8981\u663E\u5F0F context prop \u6216 provideImThreadSurfaceContext");return t}function Fn(t,o){if(t.key!==o.key||t.kind!==o.kind)return false;switch(o.kind){case "message":return t.kind==="message"&&t.message===o.message&&t.firstOfRun===o.firstOfRun;case "system":return t.kind==="system"&&t.message===o.message;case "date-separator":return t.kind==="date-separator"&&t.label===o.label;case "entry-unread":return t.kind==="entry-unread"&&t.count===o.count;case "encryption":return true}}function en(t,o){if(t===void 0)return o;let v=new Map(t.map(m=>[m.key,m])),c=o.map(m=>{let A=v.get(m.key);return A!==void 0&&Fn(A,m)?A:m});return t.length===c.length&&c.every((m,A)=>m===t[A])?t:c}var Et=Object.freeze({followThreshold:120,olderPrefetchThreshold:120,visibleReadDelay:300,visibleMargin:8,activeDateOffset:16,activeDateIdleDelay:1500}),St=Object.freeze({enabled:true,maxFillPages:8}),Un=8,Bn=160;function jn(t,o){return t?.conversationType===o.conversationType&&t.conversationId===o.conversationId}var Kn=defineComponent({name:"ImThreadSurface",props:{conversation:{type:Object,required:true},context:{type:Object,default:void 0},rendererRegistry:{type:Object,required:true},presentation:{type:Object,default:void 0},readActions:{type:Object,default:void 0},viewportOptions:{type:Object,default:()=>({})},initialViewportOptions:{type:Object,default:()=>({})},hooks:{type:Object,default:void 0}},setup(t,{expose:o,slots:v}){let c=t.context??Rt(),m=ref(null),A=ref(0),C=ref(false),V=ref(false),M=ref(false),g,x,u,y=ref(false),a$1=ref(false),h=ref(false),f=false,R,D=ref(true),$=[],B=nt(),O=0,z=ref(0),j,K=null,q="",te="",we="",J=false,ee=false,_=ref(false),X=ref(""),ve=ref(false),be=nt(),ne,i$1=computed(()=>c.getState()),ae=computed(()=>!!i$1.value.pendingLocationMessageId),Me=computed(()=>i$1.value.pageVisible??c.isPageVisible?.()??true),pe=computed(()=>i$1.value.pageEngaged??c.isPageEngaged?.()??true),N=computed(()=>jn(i$1.value.activeConversation,t.conversation)),ie=computed(()=>({...Et,...t.viewportOptions})),H=computed(()=>{let n=t.initialViewportOptions.maxFillPages??St.maxFillPages;return {enabled:t.initialViewportOptions.enabled??St.enabled,maxFillPages:Number.isFinite(n)?Math.max(0,Math.floor(n)):St.maxFillPages}}),F=computed(()=>!N.value||!i$1.value.ready?"":`${t.conversation.conversationType}\0${t.conversation.conversationId}`),se="",Pe=computed(n=>{let l=N.value?`${t.conversation.conversationType}\0${t.conversation.conversationId}`:"",d=se===l?n:void 0;return se=l,N.value?en(d,i({messages:i$1.value.messages,entryUnread:i$1.value.entryUnread,formatDate:c.formatDate,leadingItems:c.leadingItems?.(),beforeMessageItems:c.beforeMessageItems})):en(d,[])}),ue=computed(()=>Pe.value.flatMap(n=>n.kind==="message"||n.kind==="system"?[n.message.id]:[])),He=computed(()=>i$1.value.messages.filter(n=>(n.status==="pending"||n.status==="uploading"||n.status==="sending")&&c.shouldFollowMessage?.(n)===true).map(n=>n.id));function p(){be.cancel(),ne!==void 0&&(clearTimeout(ne),ne=void 0);}function S(n=false){if(p(),ve.value=false,n){m.value?.clearActiveDate(),X.value="";return}ne=setTimeout(()=>{ne=void 0,!ve.value&&(m.value?.clearActiveDate(),X.value="");},Bn);}function I(n){if(n===null){S();return}ne!==void 0&&(clearTimeout(ne),ne=void 0),X.value=n.label,ve.value=true;let l=ie.value.activeDateIdleDelay,d=Number.isFinite(l)?Math.max(0,l):Et.activeDateIdleDelay;be.schedule(()=>S(),d);}async function P(n,l,d,b=true){t.hooks?.beforeAction?.(n);try{let w=await l();return d?.()!==!1&&t.hooks?.afterAction?.(n,w),w}catch(w){throw b&&d?.()!==false&&t.hooks?.onError?.(n,w),w}}function k(n="automatic",l,d=true){return !N.value||i$1.value.loading||!i$1.value.hasOlder?Promise.resolve(0):P({kind:"load-older",source:n},()=>c.actions.loadOlder(),l,d)}function Z(){return Y()}function Y(n,l=true){let d=c.actions.loadNewer,b=i$1.value.loadingNewer??i$1.value.loading;return !N.value||b||!i$1.value.hasNewer||d===void 0?Promise.resolve(0):P({kind:"load-newer"},()=>d(),n,l)}async function re(n){for(let l=0;l<Un;l+=1){if(!N.value||M.value||V.value||ae.value)return;let d=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,b=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!d||b!==null||(n==="older"?await k("user-scroll"):await Z())>0)return;let L=n==="older"?i$1.value.hasOlder:i$1.value.hasNewer,G=n==="older"?i$1.value.olderError:i$1.value.newerError;if(!L||G!==null)return}}async function Ae(){return !N.value||c.actions.loadNewer===void 0?0:le({kind:"load-newer"},()=>c.actions.retryNewer?.()??c.actions.loadNewer?.({force:true})??Promise.resolve(0))}async function Q(){return N.value?le({kind:"retry-older"},()=>c.actions.retryOlder?.()??c.actions.loadOlder({force:true})):0}async function le(n,l){let d=F.value,b=++O;K=null,we="";let w;try{w=await P(n,l);}catch(L){throw Oe(d,b)&&(we=d),L}return Oe(d,b)&&!_.value&&(K=null,qe()),w}async function he(){if(!N.value)return false;let n=F.value;ye(),Ne();let l=++z.value;return M.value=false,Re(true),J=true,q=n,te=Ce(Le()),!await P({kind:"jump-to-latest"},()=>c.actions.jumpToLatest?.()??Promise.resolve(!i$1.value.isHistoryWindow),()=>de(n,l))||!de(n,l)||(await nextTick(),!de(n,l))?false:(m.value?.scrollToLatest(),C.value=true,h.value=false,$e(),true)}function oe(n=false){let l=m.value,d=l?.getViewportElement();a$1.value=l?.isScrollable()===true;let b=i$1.value.entryUnreadNavigation;y.value=b?.state==="located"&&$.includes(b.firstMessageId),_.value&&y.value&&(C.value=true);let w=d==null?0:Math.max(0,d.scrollHeight-d.clientHeight-d.scrollTop);h.value=b!==void 0&&w>50,n&&b!==void 0&&d!==null&&d!==void 0&&d.clientHeight>0&&w>=d.clientHeight&&(C.value=true);}function $e(){let n=c.actions.markConversationRead;if(n===void 0||!pe.value||!N.value||!_.value||V.value||f&&(!D.value||i$1.value.hasNewer)||R!==void 0||i$1.value.error!==null)return;let l=F.value,d=n().then(()=>{R===d&&l===F.value&&(f=true);}).catch(b=>{!ee&&R===d&&l===F.value&&t.hooks?.onError?.({kind:"mark-conversation-read"},b);}).finally(()=>{R===d&&(R=void 0);});R=d;}async function ot(){let n=c.actions.loadEntryUnread;if(!N.value||V.value||n===void 0)return "cancelled";Ne();let l=F.value,d=++z.value;M.value=false;let b=new AbortController;u=b,x=d,V.value=true,Re(true),J=true;try{let w=await P({kind:"jump-to-entry-unread"},()=>n({signal:b.signal}),()=>de(l,d));if(!de(l,d))return "cancelled";if(!w||i$1.value.entryUnread.state!=="located")return "unavailable";let G=await at(l,d);return G&&(C.value=!0),G?"located":de(l,d)?"unavailable":"cancelled"}catch(w){if(!de(l,d))return "cancelled";throw w}finally{x===d&&(x=void 0,u=void 0,V.value=false);}}async function at(n,l){await nextTick();for(let d=0;d<60;d+=1){if(!de(n,l))return false;if(m.value?.scrollToEntryUnread())return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(b=>window.requestAnimationFrame(()=>b()));}return false}function it(n){D.value=n.isAtBottom,A.value=n.newMessageCount,oe(),qe();}function Je(n,l){return m.value?.scrollToMessage(n,l)??false}function de(n,l){return !ee&&z.value===l&&F.value===n&&N.value}async function Xe(n,l,d,b){for(let w=0;w<60;w+=1){if(!de(n,l))return false;if(Je(d,b))return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(L=>window.requestAnimationFrame(()=>L()));}return false}async function ze(n,l){for(let d=0;d<60;d+=1){if(!n())return false;if(m.value?.isMeasurable()&&m.value.getMessageCenteringNeeds(l)!=null)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(b=>window.requestAnimationFrame(()=>b()));}return false}async function st(n){let l=()=>!n()||!(i$1.value.loading||i$1.value.loadingOlder||i$1.value.loadingNewer);return l()||await new Promise(d=>{let b=watch(l,w=>{w&&(b(),d());},{flush:"sync"});}),await nextTick(),await nextTick(),n()}async function De(n,l,d){let b=m.value;if(b===null||!b.isMeasurable())return false;let w=0,L="older",G=()=>de(n,l),ge=async ce=>{let Te=0,Ve=ce==="older"?i$1.value.olderError:i$1.value.newerError,xe=Ve===void 0?i$1.value.error:Ve;if(xe!=null)throw xe;if(ce==="older")Te=await k("automatic",G,false);else {b.prepareHistoryPageAppend();try{Te=await Y(G,!1);}catch(gt){throw G()&&b.cancelHistoryPageAppend(),gt}Te<=0&&G()&&!i$1.value.hasNewer&&b.cancelHistoryPageAppend();}return w+=1,await nextTick(),await nextTick(),G()};for(;de(n,l)&&w<H.value.maxFillPages&&b.isMeasurable();){if(!await st(G))return false;let ce=b.getMessageCenteringNeeds(d);if(ce===null)return false;let Te=!i$1.value.hasOlder,Ve=!i$1.value.hasNewer||c.actions.loadNewer===void 0,xe=ce.older&&ce.newer&&!Te&&!Ve?L:ce.older&&!Te?"older":ce.newer&&!Ve?"newer":void 0;if(xe===void 0)break;if(L=xe==="older"?"newer":"older",!await ge(xe))return false}return de(n,l)}async function Ge(n,l={behavior:"auto",block:"center"}){if(!N.value||n==="")return {ok:false,reason:"cancelled"};let d=F.value,b=M.value;ye(),Ne();let w=b||j!==void 0||(i$1.value.loadingOlder??i$1.value.loading)||(i$1.value.loadingNewer??i$1.value.loading),L=++z.value;M.value=true;let G=new AbortController;g=G,Re(true),J=true,q=d,te=Ce(Le());let ge=()=>de(d,L);try{if(w&&c.actions.loadAround!==void 0||!ue.value.includes(n)){let Te=c.actions.loadAround;if(Te===void 0)return {ok:!1,reason:"anchor-unavailable"};let Ve={};j=Ve;try{let xe=await P({kind:"locate-message",messageId:n},()=>Te(n,{signal:G.signal}),ge,!1);if(!ge())return {ok:!1,reason:"cancelled"};if(!xe)return {ok:!1,reason:"not-visible"}}finally{j===Ve&&(j=void 0);}}return await nextTick(),await nextTick(),!await ze(ge,n)||!await De(d,L,n)?{ok:!1,reason:ge()?"not-visible":"cancelled"}:await Xe(d,L,n,l)?{ok:!0}:{ok:!1,reason:ge()?"not-visible":"cancelled"}}catch(ce){return ge()?a(ce):{ok:false,reason:"cancelled"}}finally{g===G&&(g=void 0),z.value===L&&(M.value=false);}}async function Qe(n,l){return (await Ge(n,l)).ok}function _e(){B.cancel();}function Fe(){if(!_.value){_e();return}let n=t.readActions;if(n===void 0&&c.actions.markVisibleMessages===void 0){_e();return}let l=Number.isFinite(ie.value.visibleReadDelay)?Math.max(0,ie.value.visibleReadDelay):Et.visibleReadDelay;B.schedule(()=>{if(!N.value||!pe.value)return;$e();let d=c.actions.markVisibleMessages;if(d!==void 0){let L=$;d(L).catch(G=>{t.hooks?.onError?.({kind:"visible-range",messageIds:L},G);});return}if(n===void 0)return;let b=$[$.length-1];if(b===void 0)return;let w=n.resolveTarget===void 0?b:n.resolveTarget(b);w!=null&&Promise.resolve(n.markRead(w)).catch(L=>{t.hooks?.onError?.({kind:"visible-range",messageIds:$},L);});},l);}function Ze(n){$=Object.freeze([...n]),oe();let l={kind:"visible-range",messageIds:$};t.hooks?.beforeAction?.(l);try{c.actions.onVisibleRange?.($),t.hooks?.afterAction?.(l,void 0);}catch(d){throw t.hooks?.onError?.(l,d),d}_.value?Fe():qe();}function Oe(n,l){return !ee&&O===l&&F.value===n&&!J&&!ae.value}function lt(n,l){Oe(n,l)&&(q=n,te=Ce(Le()),_.value=true,oe(),$e(),Fe());}function Le(){return i$1.value.entryUnreadNavigation===void 0?i$1.value.entryUnread:{state:"none"}}function Ce(n){return n.state!=="located"?n.state:`${n.state}:${n.firstMessageId}`}async function je(n,l,d){for(let b=0;b<60;b+=1){if(!Oe(n,l))return false;if(m.value?.scrollToMessage(d,{behavior:"auto",block:"center"})===true)return true;await nextTick(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"&&await new Promise(L=>window.requestAnimationFrame(()=>L()));}return false}function qe(){let n=F.value,l=Ce(Le());if(n===""||i$1.value.loading||M.value||ae.value||i$1.value.error!==null&&i$1.value.messages.length===0||q===n&&(te===l||te.startsWith("located:")||J)||we===n||K!==null)return;if(!H.value.enabled){q=n,te=l,_.value=true,Fe();return}let d=++O;J=false,_.value=false;let b=(async()=>{if(await nextTick(),!Oe(n,d))return;let w=m.value;if(w===null||!w.isMeasurable())return;let L=Le();if(L.state==="located"&&!ue.value.includes(L.firstMessageId))return;let G=L.state==="located"?await je(n,d,L.firstMessageId):false;if(L.state==="located"&&!G)return;G||w.scrollToLatest();let ge=0;for(;Oe(n,d)&&ge<H.value.maxFillPages&&i$1.value.error===null&&(i$1.value.hasOlder||i$1.value.hasNewer&&c.actions.loadNewer!==void 0)&&w.isMeasurable()&&!w.isScrollable();){if(i$1.value.hasNewer&&c.actions.loadNewer!==void 0&&(i$1.value.messages.length===0||!i$1.value.hasOlder)){let Te=z.value;w.prepareHistoryPageAppend();try{await Z(),await nextTick();}finally{F.value===n&&z.value===Te&&(O===d||J)&&w.cancelHistoryPageAppend();}}else await k();if(!Oe(n,d)||(ge+=1,await nextTick(),await nextTick(),!w.isMeasurable()))return}if(!Oe(n,d)||!w.isMeasurable())return;let ce=Le();if(ce.state==="located"){if(!ue.value.includes(ce.firstMessageId)||!await je(n,d,ce.firstMessageId))return}else w.scrollToLatest();await nextTick(),lt(n,d);})().catch(()=>{Oe(n,d)&&(we=n);}).finally(()=>{K===b&&(K=null);});K=b;}function Re(n,l=false){O+=1,K=null,J=false,_.value=n,n||(q="",te="",l||(we="")),_e();}function ye(){u!==void 0&&(z.value+=1,u.abort(),u=void 0,x=void 0,V.value=false);}function Ne(){!M.value&&g===void 0||(z.value+=1,g?.abort(),g=void 0,M.value=false);}function dt(){if(oe(true),ye(),Ne(),ae.value&&c.actions.cancelMessageLocation?.(),J=true,_.value)return;let n=F.value;O+=1,K=null,q=n,_.value=true,Fe();}let et=Object.freeze({getViewportElement:()=>m.value?.getViewportElement()??null,loadOlder:k,retryOlder:Q,loadNewer:Z,retryNewer:Ae,jumpToLatest:he,jumpToEntryUnread:ot,scrollToMessage:Je,locateMessage:Qe,locateMessageDetailed:Ge,focusViewport:()=>m.value?.focusViewport()});return o(et),watch(pe,n=>{n&&_.value?Fe():_e();}),watch([()=>i$1.value.activeRemoteMessageRevision??0,m,F],()=>{let n=m.value;if(n===null||!N.value)return;let l=c.actions.drainActiveRemoteMessageIds?.()??[];n.trackRemoteMessageIds(l,{isAtBottom:D.value,isHistoryWindow:i$1.value.isHistoryWindow,isPageVisible:Me.value})&&(D.value=false);},{flush:"post"}),watch(()=>i$1.value.pendingLocationMessageId??"",n=>{(n!==""||M.value)&&(Ne(),z.value+=1,M.value=false),n!==""&&(ye(),_.value||Re(false));},{flush:"sync"}),watch([F,()=>i$1.value.loading,()=>i$1.value.error,()=>ue.value.length,()=>i$1.value.hasOlder,()=>Ce(Le()),H,()=>i$1.value.hasNewer,ae],([n,l,d,b,,w],[L,,,G,,ge])=>{if(n!==L&&(ye(),Ne(),z.value+=1,M.value=false,j=void 0,Re(false),S(true),m.value?.clearNewMessageBadge(),A.value=0,D.value=true,$=[],C.value=false,y.value=false,a$1.value=false,h.value=false,V.value=false,x=void 0,f=false,R=void 0),n!==""&&n===L&&G!==void 0&&G>0&&b===0&&(i$1.value.hasOlder||i$1.value.hasNewer)&&_.value&&Re(false,true),n!==""&&n===L&&w!==ge&&!te.startsWith("located:")&&!J&&w.startsWith("located:")&&(q="",te="",_.value=false),n===""){Re(false);return}if(d!==null&&i$1.value.messages.length===0){_.value||Re(false,true);return}l||qe();},{flush:"post",immediate:true}),onBeforeUnmount(()=>{ee=true,ye(),Ne(),z.value+=1,Re(false),S(true);}),()=>{let n={conversation:t.conversation,state:i$1.value,items:Pe.value,actions:et,initialViewportSettled:F.value!==""&&(i$1.value.messages.length===0?!i$1.value.loading&&i$1.value.error===null&&!i$1.value.hasOlder&&!i$1.value.hasNewer:_.value&&q===F.value)},l=[v.header?.(n),v["before-list"]?.(n)];if(!N.value)l.push(v.unsupported?.(n)??h$1("div",{"data-im-thread-unsupported":""}));else if(!i$1.value.ready&&i$1.value.loading)l.push(v.loading?.(n)??h$1("div",{"data-im-thread-loading":""}));else if(i$1.value.error!==null&&i$1.value.messages.length===0)l.push(v.error?.(n)??h$1("div",{"data-im-thread-error":""}));else if(i$1.value.ready&&i$1.value.messages.length===0&&!i$1.value.hasOlder&&!i$1.value.hasNewer)l.push(v.empty?.(n)??h$1("div",{"data-im-thread-empty":""}));else {let d=h$1(Mt,{ref:m,messageIds:ue.value,contentKey:`${t.conversation.conversationType}\0${t.conversation.conversationId}`,loadingOlder:i$1.value.loadingOlder??i$1.value.loading,hasNewer:i$1.value.hasNewer,loadingNewer:i$1.value.loadingNewer??i$1.value.loading,followThreshold:ie.value.followThreshold,olderPrefetchThreshold:ie.value.olderPrefetchThreshold,visibleMargin:ie.value.visibleMargin,activeDateOffset:ie.value.activeDateOffset,activeDateEnabled:v["active-date"]!==void 0,resizeFollowEnabled:_.value&&!V.value&&!M.value&&!ae.value,followNewMessages:Me.value&&!V.value&&!M.value&&!ae.value,shouldFollowAppendedMessage:b=>{let w=i$1.value.messages.find(L=>L.id===b);return w===void 0?false:c.shouldFollowMessage?.(w)===true},pendingSendMessageIds:He.value,onReachStart:()=>{re("older").catch(()=>{});},onReachEnd:()=>{re("newer").catch(()=>{});},onSettled:it,onUserScroll:dt,onActiveDateChange:I,onVisibleRange:Ze,onNewMessageCount:b=>{A.value=b;}},{default:()=>[v["viewport-before"]?.(n),h$1(It,{items:Pe.value,rendererRegistry:t.rendererRegistry,presentation:t.presentation,readActions:t.readActions},{item:v.item,"date-separator":v["date-separator"],"entry-unread":v["entry-unread"],encryption:v.encryption,system:v.system,message:v.message,"recalled-message":v["recalled-message"],"deleted-message":v["deleted-message"],"unsupported-body":v["unsupported-body"]}),v["viewport-after"]?.(n)]});l.push(h$1("div",{"data-im-thread-viewport-shell":""},[v["active-date"]?.({label:X.value,visible:ve.value&&X.value!==""}),d,v["entry-unread-navigation"]?.({...n,count:i$1.value.entryUnreadNavigation?.state==="none"?0:i$1.value.entryUnreadNavigation?.count??0,loading:V.value,visible:n.initialViewportSettled&&!C.value&&!y.value&&!i$1.value.isHistoryWindow&&i$1.value.entryUnreadNavigation!==void 0&&i$1.value.entryUnreadNavigation.state!=="none"&&i$1.value.entryUnreadNavigation.count>0&&(a$1.value||i$1.value.hasOlder)})])),i$1.value.error!==null&&l.push(v.error?.(n)??h$1("div",{"data-im-thread-error":""}));}return l.push(v["after-list"]?.(n),v["jump-to-latest"]?.({...n,count:A.value,visible:h.value||!D.value||i$1.value.isHistoryWindow}),v["context-menu"]?.(n),v.composer?.(n)),h$1("section",{"data-im-thread-surface":"","data-conversation-type":t.conversation.conversationType,"data-conversation-id":t.conversation.conversationId},l)}}});function _n(t){let o=new Map;for(let c of t){if(o.has(c.kind))throw new Error(`\u6D88\u606F renderer kind \u91CD\u590D\u6CE8\u518C\uFF1A${c.kind}`);o.set(c.kind,c.component);}let v=Object.freeze([...o.keys()]);return Object.freeze({kinds:v,resolve:c=>o.get(c)})}var Gn=140,Wn=120;function mt(t,o){if(t.width<=0||t.height<=0)return 0;let v=Math.max(0,Math.min(t.right,o.right)-Math.max(t.left,o.left)),c=Math.max(0,Math.min(t.bottom,o.bottom)-Math.max(t.top,o.top));return Math.min(1,v*c/(t.width*t.height))}function Pt(t,o){return {x:t.x,y:t.top-o,top:t.top-o,bottom:t.bottom+o,left:t.left,right:t.right,width:t.width,height:t.height+o*2,toJSON:()=>({})}}function At(t){let o=Math.max(0,t.scrollIdleMs??Gn),v=Math.max(0,t.visibilityDwellMs??Wn),c=Math.min(1,Math.max(0,t.minimumIntersectionRatio??.01)),m=Math.max(0,t.revealMarginPx??0),A=Math.max(0,t.preloadMarginPx??0),C=Math.max(m,A),V=Math.max(0,t.maxPreloadTargets??Number.POSITIVE_INFINITY),M=Math.max(1,t.maxSettledVisible??Number.POSITIVE_INFINITY),g=new Map,x=new Map,u=reactive(new Set),y=new Set,a=new Set,h=[],f=null,R=null,D=null,$=false,B=false,O=false,z=false,j=new Map,K=0,q=false;function te(){K+=1,q=false,j.clear();}function we(p){let S=[...p].filter(([P,k])=>g.get(P)===k);if(S.length===0)return;let I=be();ne(true,I,S),Me(I,S);}function J(p){if(!t.batchRegistration){we(p);return}for(let[I,P]of p)j.set(I,P);if(q)return;q=true;let S=K;nextTick(()=>{if(O||S!==K)return;q=false;let I=[...j];j.clear(),we(I),H();});}let ee,_;function X(){ee!==void 0&&clearTimeout(ee),ee=void 0;}function ve(){_!==void 0&&clearTimeout(_),_=void 0;}function be(){let p,S=new Map;return {getRootRect(){return p===void 0&&(p=f?.getBoundingClientRect()??null),p},getElementRect(I){let P=S.get(I);return P===void 0&&(P=I.getBoundingClientRect(),S.set(I,P)),P}}}function ne(p=false,S=be(),I=g){if(!p&&R!==null||f===null)return;let P=S.getRootRect();if(P===null)return;let k=Pt(P,C);for(let[Z,Y]of I){let re=S.getElementRect(Z);Y.ratio=mt(re,P),Y.intersecting=Y.ratio>0,Y.revealIntersecting=C>0?mt(re,k)>0:Y.intersecting&&Y.ratio>=c;}}function i(p){return p.intersecting&&p.ratio>=c}function ae(p){let S=x.get(p.key);return S!==void 0&&g.get(S)===p}function Me(p=be(),S=g){let I=[];for(let[P,k]of S)if(!(!k.revealIntersecting||u.has(k.key))){if(C>m){if(m===0&&!i(k))continue;if(m>0){let Z=p.getRootRect();if(Z===null||mt(p.getElementRect(P),Pt(Z,m))<=0)continue}}I.push(k);}for(let P of I)!ae(P)||u.has(P.key)||(u.add(P.key),t.onRevealed?.(P.item));}function pe(p,S=false){let I=new Set(p.map(k=>k.key));if(!(!(I.size!==a.size||[...I].some(k=>!a.has(k)))&&!S)){a.clear();for(let k of I)a.add(k);t.onSettledVisibleChange?.(p.map(k=>k.item));}}function N(p,S=false){!S&&p.length===h.length&&p.every((I,P)=>I.key===h[P]?.key&&I.item===h[P]?.item)||(h=p,t.onSettledPreloadChange?.(p.map(I=>I.item)));}function ie(){if(O||$)return;let p=B;B=false;let S=K,I=f,P=()=>!O&&!$&&S===K&&f===I,k=be();ne(false,k);let Z=k.getRootRect(),Y=Z===null?0:(Z.top+Z.bottom)/2,re=[...g.entries()].filter(([,Q])=>i(Q)).map(([Q,le])=>({target:le,rect:k.getElementRect(Q)})).sort((Q,le)=>Math.abs((Q.rect.top+Q.rect.bottom)/2-Y)-Math.abs((le.rect.top+le.rect.bottom)/2-Y)).slice(0,M).map(({target:Q})=>Q),Ae;if(t.onSettledPreloadChange!==void 0&&Z!==null){let Q=Pt(Z,A);Ae=[...g.entries()].filter(([,he])=>he.revealIntersecting).map(([he,oe])=>({target:oe,rect:k.getElementRect(he)})).filter(({target:he,rect:oe})=>i(he)||A>0&&mt(oe,Q)>0).sort((he,oe)=>Number(i(oe.target))-Number(i(he.target))||Math.abs((he.rect.top+he.rect.bottom)/2-Y)-Math.abs((oe.rect.top+oe.rect.bottom)/2-Y)).slice(0,V).map(({target:he})=>he);}if(Me(k),!!P()&&(pe(re.filter(ae),p),!!P())){Ae!==void 0&&N(Ae.filter(ae),p);for(let Q of re){if(!P())return;!ae(Q)||y.has(Q.key)||(y.add(Q.key),t.onActivated?.(Q.item));}}}function H(){O||$||(ve(),_=setTimeout(()=>{_=void 0,ie();},v));}function F(){O||(B=true,se(true),N([]),ne(),Me(),pe([]),ve(),X(),ee=setTimeout(()=>{ee=void 0,se(false),H();},o));}function se(p){$!==p&&($=p,t.onScrollingChange?.(p));}function Pe(){f?.removeEventListener("scroll",F),R?.disconnect(),D?.disconnect(),R=null,D=null,f=null;}function ue(p=true){if(O)return;let S=t.getRoot();if(!(S===f&&f!==null)){if(N([]),Pe(),f=S,f===null){p&&!z&&(z=true,Promise.resolve().then(()=>{z=false,O||(ue(false),H());}));return}if(f.addEventListener("scroll",F,{passive:true}),typeof IntersectionObserver<"u"){R=new IntersectionObserver(I=>{for(let P of I){let k=g.get(P.target);k!==void 0&&(k.intersecting=P.isIntersecting,k.ratio=P.intersectionRatio,C===0&&(k.revealIntersecting=P.isIntersecting&&P.intersectionRatio>=c));}Me(),H();},{root:f,threshold:[0,c,1]}),C>0&&(D=new IntersectionObserver(I=>{for(let P of I){let k=g.get(P.target);k!==void 0&&(k.revealIntersecting=P.isIntersecting);}Me(),H();},{root:f,rootMargin:`${C}px 0px`,threshold:0}));for(let I of g.keys())R.observe(I);for(let I of g.keys())D?.observe(I);}J(g);}}function He(p){N(h.filter(S=>S.key!==p)),u.delete(p),y.delete(p),a.delete(p);}return {register(p,S){if(O)return;let I=t.getKey(p),P=u.has(I),k=y.has(I),Z=S===null?void 0:g.get(S);Z!==void 0&&Z.key!==I&&(x.delete(Z.key),g.delete(S),He(Z.key));let Y=x.get(I);if(Y!==void 0&&Y!==S&&(R?.unobserve(Y),D?.unobserve(Y),g.delete(Y),x.delete(I)),S===null){Y!==void 0&&(R?.unobserve(Y),D?.unobserve(Y),g.delete(Y),x.delete(I)),He(I);return}let re=g.get(S);if(re?.key===I&&re.item===p){let le=f;ue(),f!==le&&H();return}let Ae={item:p,key:I,intersecting:re?.key===I?re.intersecting:false,ratio:re?.key===I?re.ratio:0,revealIntersecting:re?.key===I?re.revealIntersecting:false};g.set(S,Ae),x.set(I,S);let Q=f;ue(),f===Q&&(R?.observe(S),D?.observe(S),J([[S,Ae]])),P&&t.onRevealed?.(p),k&&ae(Ae)&&t.onActivated?.(p),H();},isRevealed:p=>u.has(t.getKey(p)),isActivated:p=>y.has(t.getKey(p)),isSettledVisible:p=>a.has(t.getKey(p)),isScrolling:()=>$,notifyScroll:F,refresh(){ue(),te(),we(g),H();},reset(){te(),X(),ve(),se(false),B=false,pe([]),N([]),Pe(),g.clear(),x.clear(),u.clear(),y.clear();},dispose(){O||(te(),X(),ve(),se(false),B=false,pe([]),N([]),Pe(),g.clear(),x.clear(),u.clear(),y.clear(),O=true);}}}function Yn(t){let o=new Map,v=new Map,c=shallowReactive(new Map),m=[],A=false,C=u=>{let y=o.get(u.channel);return y===void 0?u.channel:`${u.channel}\0${y.getKey(u.item)}`},V=At({getRoot:t.getRoot,batchRegistration:t.batchRegistration,getKey:u=>u.key,revealMarginPx:t.revealMarginPx,preloadMarginPx:t.preloadMarginPx,minimumIntersectionRatio:t.minimumIntersectionRatio,scrollIdleMs:t.scrollIdleMs,visibilityDwellMs:t.visibilityDwellMs,onScrollingChange:u=>{for(let y of o.values())y.onScrollingChange?.(u);},onRevealed:u=>u.targets.forEach(y=>o.get(y.channel)?.onRevealed?.(y.item)),onActivated:u=>u.targets.forEach(y=>o.get(y.channel)?.onActivated?.(y.item)),onSettledPreloadChange:u=>{let y=u.flatMap(a=>a.targets);for(let[a,h]of o){let f=y.filter(R=>R.channel===a).map(R=>R.item);h.onSettledPreloadChange?.(f.slice(0,Math.max(0,h.maxPreloadTargets??Number.POSITIVE_INFINITY)));}},onSettledVisibleChange:u=>{M(u.flatMap(y=>y.targets));}});function M(u){m=u;for(let[y,a]of o){let h=u.filter(R=>R.channel===y).map(R=>R.item),f=a.maxSettledVisible===void 0?h:h.slice(0,a.maxSettledVisible);a.onSettledVisibleChange?.(f);}}function g(u){let y=[...v.values()].flatMap(f=>[...f.values()].filter(R=>R.element===u).map(R=>R.target)),a=c.get(u);if(a!==void 0&&y.length===a.targets.length&&y.every((f,R)=>f===a.targets[R]))return;if(y.length===0)a!==void 0&&(c.delete(u),[...c.values()].some(f=>f.key===a.key)||V.register(a,null));else {let f={key:JSON.stringify(y.map(C)),targets:y};c.set(u,f),V.register(f,u);}let h=m.flatMap(f=>{let R=v.get(f.channel)?.get(o.get(f.channel).getKey(f.item));return R===void 0?[]:[R.target]});(h.length!==m.length||h.some((f,R)=>f!==m[R]))&&M(h);}function x(u){return y=>{if(A)throw new Error("Thread visibility target group \u5DF2\u91CA\u653E");if(o.has(u))throw new Error(`Thread visibility channel \u5DF2\u5B58\u5728: ${u}`);o.set(u,y);let a=shallowReactive(new Map);v.set(u,a);let h=false,f=B=>({channel:u,item:B});function R(){let B=[...a.values()].map(O=>O.element);a.clear();for(let O of B)g(O);y.onScrollingChange?.(false),y.onSettledVisibleChange?.([]),y.onSettledPreloadChange?.([]);}function D(B,O){let z=a.get(y.getKey(B)),j=z===void 0?void 0:c.get(z.element);return j!==void 0&&O(j)}return {register(B,O){if(h||A)return;let z=y.getKey(B),j=a.get(z);if(O===null){j!==void 0&&(a.delete(z),g(j.element));return}if(j?.target.item===B&&j.element===O){let q=c.get(O);q!==void 0&&V.register(q,O);return}let K=j?.target.item===B?j.target:f(B);for(let[q,te]of a)q!==z&&te.element===O&&a.delete(q);a.set(z,{target:K,element:O}),g(O),j!==void 0&&j.element!==O&&g(j.element);},isRevealed:B=>D(B,V.isRevealed),isActivated:B=>D(B,V.isActivated),isSettledVisible:B=>D(B,V.isSettledVisible),isScrolling:V.isScrolling,notifyScroll:V.notifyScroll,refresh:V.refresh,reset:R,dispose(){h||(R(),h=true,o.delete(u),v.delete(u));}}}}return {createFactory:x,refresh:V.refresh,dispose(){if(!A){for(let u of c.values())V.register(u,null);c.clear();for(let u of o.values())u.onSettledPreloadChange?.([]);v.clear(),o.clear(),V.dispose(),A=true;}}}}function Jn(t){let o=ut();if(o===void 0)throw new Error("useImThreadLayoutMeasurement requires an ImThreadViewport");let v=o.registerLayoutMeasurement(t);return onBeforeUnmount(v.dispose),v}export{Tt as ImThreadBodySwitch,It as ImThreadItems,Kn as ImThreadSurface,Mt as ImThreadViewport,Cn as createImThreadSurfaceContext,_n as createMessageRendererRegistry,Yn as createThreadVisibilityTargetGroup,At as createThreadVisibilityTargets,Nn as provideImThreadSurfaceContext,mn as useImText,Jn as useImThreadLayoutMeasurement,Rt as useImThreadSurfaceContext,hn as useOptionalImThreadReadActions};
|
package/dist/chat-kit.d.ts
CHANGED
|
@@ -111,8 +111,11 @@ type LastMessageSummary = {
|
|
|
111
111
|
kind: 'transfer';
|
|
112
112
|
} | {
|
|
113
113
|
kind: 'gift';
|
|
114
|
-
}
|
|
114
|
+
}
|
|
115
|
+
/** 直播间分享。`title` 与卡片主标题一致:先主播昵称,没有再用房间标题。 */
|
|
116
|
+
| {
|
|
115
117
|
kind: 'liveRoom';
|
|
118
|
+
title?: string;
|
|
116
119
|
} | {
|
|
117
120
|
kind: 'call';
|
|
118
121
|
callKind: ImCallKind;
|
|
@@ -5281,14 +5284,16 @@ interface ConversationHandle<TType extends ProductHandleConversationType = Produ
|
|
|
5281
5284
|
/**
|
|
5282
5285
|
* 按稳定消息 id 打开目标附近的连续历史窗口。
|
|
5283
5286
|
*
|
|
5284
|
-
* @remarks
|
|
5285
|
-
*
|
|
5286
|
-
*
|
|
5287
|
-
*
|
|
5288
|
-
*
|
|
5289
|
-
*
|
|
5287
|
+
* @remarks 冷启动置顶和搜索结果只提供目标 id;目标不在当前窗口或本地原文时,须经精确会话
|
|
5288
|
+
* `by_id` 确认真实原文及排序位置。预览或搜索位置不能充当历史游标。
|
|
5289
|
+
* GROUP/CHANNEL 使用远端相邻页准备两侧上下文后一次替换窗口;失败保留原窗口。
|
|
5290
|
+
* `signal` 取消本次定位,阻止提交准备中的窗口;不会撤销共享按 ID 查询已取得的合法缓存。
|
|
5291
|
+
* @throws 仅 `by_id` 明确确认缺失时抛 `IM_SDK_MESSAGE_NOT_FOUND`;没有可信原文时抛
|
|
5292
|
+
* `IM_SDK_MESSAGE_ANCHOR_UNAVAILABLE`。存储、权限与协议异常保留原错误身份。
|
|
5290
5293
|
*/
|
|
5291
|
-
loadAround: (messageId: string
|
|
5294
|
+
loadAround: (messageId: string, options?: {
|
|
5295
|
+
signal?: AbortSignal;
|
|
5296
|
+
}) => Promise<void>;
|
|
5292
5297
|
/**
|
|
5293
5298
|
* 清空当前账号下此精确会话的本机历史。
|
|
5294
5299
|
*
|
package/dist/chat-kit.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{q as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,p as DEFAULT_LOADING_SHOW_DELAY_MS,x as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_HEIGHT,w as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_WIDTH,e as MINI_PROGRAM_LANG_NUMBERS,S as SPIKE_STEP,N as calculateMediaBox,E as canCopyMessageImage,t as canPromoteMediaPresentationSource,B as captureRuntimeClientOperation,A as captureRuntimeOperation,n as channelMiniProgramRelKey,z as createConversationPrefetchController,r as createDelayedLoadingIndicator,L as createLinkMatcher,F as createMessageImageCopySource,f as csvIncludes,d as decideChannelMiniProgramRelOpen,P as formatFileSize,O as formatMediaDuration,Q as getFileExtension,D as getMessageCopyImageUrl,C as getMessageCopyText,K as hasLinkCandidate,u as highlightSegments,a as isMiniProgramShowTypeOpenable,G as mediaService,J as normalizeLinkHref,V as placeholderWaveform,H as readService,U as resampleWaveform,s as resolveBestMediaPresentationSource,h as resolveChannelMiniProgramRelIcon,g as resolveChannelMiniProgramRelName,j as resolveChannelMiniProgramRelOpenSurface,i as resolveChannelMiniProgramRelUrl,k as resolveChannelPinnedGameCopy,o as resolveConversationListPresentation,M as resolveMediaPresentation,R as resolveMediaTransferPresentation,v as resolveMessageSearchPreview,c as resolveMiniProgramFloatLinkUrl,y as resolveMiniProgramGamePreviewLayout,b as resolveMiniProgramOpenUrl,I as resolveQuotedMessagePresentation,m as resolveVisibleChannelMiniProgramRels,l as sortChannelMiniProgramFloatingItems,T as spikeCountForDuration}from'./chunk-
|
|
1
|
+
export{q as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,p as DEFAULT_LOADING_SHOW_DELAY_MS,x as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_HEIGHT,w as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_WIDTH,e as MINI_PROGRAM_LANG_NUMBERS,S as SPIKE_STEP,N as calculateMediaBox,E as canCopyMessageImage,t as canPromoteMediaPresentationSource,B as captureRuntimeClientOperation,A as captureRuntimeOperation,n as channelMiniProgramRelKey,z as createConversationPrefetchController,r as createDelayedLoadingIndicator,L as createLinkMatcher,F as createMessageImageCopySource,f as csvIncludes,d as decideChannelMiniProgramRelOpen,P as formatFileSize,O as formatMediaDuration,Q as getFileExtension,D as getMessageCopyImageUrl,C as getMessageCopyText,K as hasLinkCandidate,u as highlightSegments,a as isMiniProgramShowTypeOpenable,G as mediaService,J as normalizeLinkHref,V as placeholderWaveform,H as readService,U as resampleWaveform,s as resolveBestMediaPresentationSource,h as resolveChannelMiniProgramRelIcon,g as resolveChannelMiniProgramRelName,j as resolveChannelMiniProgramRelOpenSurface,i as resolveChannelMiniProgramRelUrl,k as resolveChannelPinnedGameCopy,o as resolveConversationListPresentation,M as resolveMediaPresentation,R as resolveMediaTransferPresentation,v as resolveMessageSearchPreview,c as resolveMiniProgramFloatLinkUrl,y as resolveMiniProgramGamePreviewLayout,b as resolveMiniProgramOpenUrl,I as resolveQuotedMessagePresentation,m as resolveVisibleChannelMiniProgramRels,l as sortChannelMiniProgramFloatingItems,T as spikeCountForDuration}from'./chunk-KFVKMPCY.js';export{j as DEFAULT_EMOJI_ASSET_BASE,i as EMOJI_CATALOG,c as EMOJI_GAME_DICE_STABLE_KEY,b as EMOJI_GAME_RPS_STABLE_KEY,m as EMOJI_TOKEN_RE,P as MAX_BATCH_FILES,a as MAX_RECENT_EMOJI_COUNT,g as UNICODE_EMOJI_CATALOG,O as blockReasonForChannelSession,N as blockReasonForChannelState,V as blockReasonForGroupState,Y as blockReasonForSession,I as canEditMessage,w as canPinChannelMessage,v as canPinGroupMessage,x as canPinMessage,H as canRecallMessage,fa as cancelMediaUpload,T as classifyGifFile,S as classifyMediaFile,s as countUnreadConversations,u as createChatRuntime,p as createEmojiMatcher,K as decideConversationAction,M as decideMemberTargetAction,L as decideMessageAction,l as emojiAssetUrl,n as emojiUrlByCode,Fa as fetchConversationFileBatch,Ga as fetchConversationImageBatch,Da as fetchConversationMessageBatch,Ha as fetchConversationVideoBatch,Ia as fetchConversationVoiceBatch,Ja as fetchNextConversationSearchBatch,r as formatConversationUnreadBadge,ia as forwardService,o as hasEmojiCandidate,U as isGifFile,y as isPinnedMessageProtected,aa as isVoiceStorageConfigured,Q as mediaBatchBudgetBytes,na as messageService,e as parseUnicodeEmojiCode,sa as pinnedMessageService,d as prependRecentEmoji,Ca as profileService,$ as replaceInterruptedMediaFile,W as requiresConversationEncryption,D as resolveChannelMemberAvatarUrl,C as resolveChannelMemberDisplayName,k as resolveEmojiToken,G as resolveFriendDisplayName,ta as resolveImProfileAccessDestination,A as resolveMemberDisplayName,t as resolveMessageNotificationDecision,F as resolvePublicNickname,E as resolveSenderAvatarUrl,q as resolveStandaloneEmojiMessage,h as resolveUnicodeEmoji,ga as retryMessage,R as runMediaSendBatch,ea as sendAsFilesBatch,J as sendBlockReasonForDecision,ca as sendMediaAlbum,_ as sendMediaFile,da as sendMediaFilesBatch,Z as sendText,ba as sendVoice,X as supportsConversationMention,f as unicodeEmojiTextFromCode}from'./chunk-DLZBFAYO.js';export{C as createNewMessageBadgeController,i as createThreadItems,f as formatChatDateSeparator,e as formatConversationDisplayTime,c as getLocalDayKey,l as isMessageLocateScrollProtected,v as isMessageTailChangeFromOlderWindowTrim,k as isMessageViewportMeasurable,B as isMessageVisibleForNewMessageBadge,x as loadOlderUntilBoundary,p as refreshPrependMessageAnchorPosition,j as resolveCenteredMessageScrollTop,a as resolveDisplayTimestamp,g as resolveImThreadActiveDate,h as resolveMessageBodyKind,b as resolveMessageTimelineTimestamp,n as resolvePrependMessageAnchor,q as resolvePrependMessageAnchorAdjustment,o as resolvePrependMessageAnchorPosition,s as resolveSurvivingMessageAnchorAdjustment,r as resolveVisibleMessageAnchorPositions,t as shouldCompleteInitialViewport,y as shouldFillInitialHistoryViewport,u as shouldFollowIncomingMessage,z as shouldLoadNewerHistoryPage,m as shouldPrefetchOlderHistory,w as shouldRestoreMessageViewportFocus,d as shouldShowChatDateSeparator,A as shouldTrackRemoteMessageForBadge}from'./chunk-2LUSPYH5.js';import'./chunk-JOD67FT3.js';import'./chunk-6EPXLFLD.js';import'./chunk-ZFYM6YHK.js';export{Ea as canTransmit,Ca as canTransmitByType,Da as canTransmitContent,Ba as requiresForwardTypeConfirmation}from'./chunk-JHGB6KYI.js';import'./chunk-WOT6VMZA.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {c as c$1}from'./chunk-
|
|
1
|
+
import {c as c$1}from'./chunk-JOD67FT3.js';import {x as x$1}from'./chunk-JHGB6KYI.js';var v=864e5,w=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"];function u(e){return e!=null&&Number.isFinite(e)&&e>0&&!Number.isNaN(new Date(e).getTime())}function P(e,t){if(u(e))return e;if(u(t))return t}function b(e,t){return P(t,e)}function m(e){if(!u(e))return "";let t=new Date(e);return `${t.getFullYear()}-${t.getMonth()+1}-${t.getDate()}`}function h(e,t){return u(e)?u(t)?m(e)!==m(t):true:false}function F(e,t){return T(e,t,"conversation")}function L(e,t){return T(e,t,"separator")}function T(e,t,r){if(!u(e))return "";let n=t.now??new Date;if(Number.isNaN(n.getTime()))return "";let o=new Date(e),a=y(n)-y(o),i=c$1(t.locale);return o.getFullYear()!==n.getFullYear()?A(o):a===0?r==="conversation"?k(o):i.today:a===1?i.yesterday:a>=2&&a<=6?x(o,i):D(o)}function y(e){return Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())/v}function x(e,t){return t.weekdays[w[e.getDay()]]}function k(e){return `${c(e.getHours())}:${c(e.getMinutes())}`}function A(e){return `${e.getFullYear()}/${c(e.getMonth()+1)}/${c(e.getDate())}`}function D(e){return `${c(e.getMonth()+1)}/${c(e.getDate())}`}function c(e){return String(e).padStart(2,"0")}function K(e){if(e.markers.length===0)return null;let t=e.viewportTop+e.overlayTop;if(e.markers[0].top>t+1)return null;let r=0;for(let d=0;d<e.markers.length&&!(e.markers[d].top>t+1);d+=1)r=d;let n=e.markers[r],o=t+e.overlayHeight,a=e.markers.filter(d=>d.top<o+1&&d.top+d.height>t-1).at(-1),i=a===void 0?0:Math.max(0,Math.min(a.top+a.height,o)-Math.max(a.top,t)),s=a===void 0?1:Math.max(1,Math.min(a.height,e.overlayHeight)),l=Math.min(1,i/s);return {key:n.key,label:n.label,inlineOpacity:1-l,...a===void 0?{}:{inlineDateKey:a.key}}}var C={text:"text",image:"image",video:"video",voice:"voice",file:"file",filesAlbum:"filesAlbum",sticker:"sticker",contact:"contact",miniProgram:"miniProgram",robot:"robot",game:"game",transfer:"transfer",gift:"gift",redPacket:"redPacket",call:"call",liveRoom:"liveRoom",mediaAlbum:"mediaAlbum",system:"system",unknown:"unknown"};function S(e){switch(e.contentType){case "text":return typeof e.body.text=="string";case "image":return e.body.image!==void 0&&typeof e.body.image.url=="string";case "video":return e.body.video!==void 0&&typeof e.body.video.url=="string";case "voice":return e.body.voice!==void 0;case "filesAlbum":return (e.body.filesAlbum?.items.length??0)>0;case "file":return e.body.file!==void 0;case "sticker":return e.body.sticker!==void 0;case "contact":return e.body.contact!==void 0;case "miniProgram":return e.body.miniProgram!==void 0&&typeof e.body.miniProgram.appId=="string";case "robot":return e.body.robot!==void 0&&Array.isArray(e.body.robot.modules)&&Array.isArray(e.body.robot.commands);case "transfer":return e.body.transfer!==void 0&&typeof e.body.transfer.serialNumber=="string";case "gift":{let t=e.body.gift;return t!==void 0&&typeof t.serialNumber=="string"&&typeof t.giftName=="string"&&(t.giftType===0||t.giftType===1||t.giftType===2)}case "redPacket":{let t=e.body.redPacket;return t!==void 0&&t.packetId.trim()!==""&&(t.packetType===1||t.packetType===2||t.packetType===3||t.packetType===4)}case "call":return e.body.call!==void 0&&(e.body.call.callKind==="audio"||e.body.call.callKind==="video")&&typeof e.body.call.durationMs=="number";case "liveRoom":{let t=e.body.liveRoom;return t!==void 0&&typeof t.liveRoomId=="string"&&(t.liveType===""||t.liveType==="video"||t.liveType==="voice"||t.liveType==="dual-phone"||t.liveType==="screen-record"||t.liveType==="voice-chat")&&(t.liveRoomStatus==="preview"||t.liveRoomStatus==="live"||t.liveRoomStatus==="ended")&&typeof t.isFocus=="boolean"&&typeof t.isReservation=="boolean"}case "game":{let t=e.body.game;return t?.gameType==="dice"?Number.isInteger(t.value)&&t.value>=1&&t.value<=6:t?.gameType==="rock-paper-scissors"&&Number.isInteger(t.value)&&t.value>=1&&t.value<=3}case "mediaAlbum":{let t=e.body.mediaAlbum;return t!==void 0&&t.items.length>0&&t.items.every(r=>typeof r.url=="string"&&r.url!=="")}case "system":return e.body.system!==void 0;case "unknown":return e.body.unknown!==void 0}}function I(e){return e.encryption.decryptFailed===true?"decrypt-failed":S(e)?e.contentType==="sticker"?x$1(e.body.sticker.imageType):C[e.contentType]:"unknown"}function _(e){let t=[...e.leadingItems??[]],r=e.entryUnread.state==="located"?e.entryUnread:null,n,o=null,a=false;for(let i of e.messages){let s=b(i.createdAt,i.serverTime),l=s!==void 0&&h(s,n);s!==void 0&&l&&t.push({kind:"date-separator",key:`date-${m(s)}-${i.id}`,label:e.formatDate(s)}),n=s,!a&&r!==null&&i.id===r.firstMessageId&&(t.push({kind:"entry-unread",key:`entry-unread-${i.id}`,...r.count===void 0?{}:{count:r.count}}),a=true);let d=e.beforeMessageItems?.(i)??[];if(t.push(...d),I(i)==="system"){t.push({kind:"system",key:i.id,message:i}),o=null;continue}t.push({kind:"message",key:`message-${i.id}`,message:i,firstOfRun:l||i.senderId!==o}),o=i.senderId;}return t}function U(e){let t=e.targetTop-e.viewportTop,r=e.currentScrollTop+t-(e.viewportHeight-e.targetHeight)/2,n=Math.max(0,e.scrollHeight-e.viewportHeight);return Math.min(n,Math.max(0,r))}function j(e){return e!==null&&e.clientWidth>0&&e.clientHeight>0}function G(e){return e.locatedAt<=0||e.duration<0||e.now<e.locatedAt?false:e.now-e.locatedAt<=e.duration}function q(e){return !Number.isFinite(e.topThreshold)||e.topThreshold<0?false:e.currentScrollTop<e.previousScrollTop&&e.currentScrollTop<=e.topThreshold}function H(e,t){return e.find(r=>r.bottom>t.top&&r.top<t.bottom)??e[0]}function f(e){return e.anchorTop??e.top}function B(e,t){let r=H(e,t);return r===void 0?void 0:{id:r.id,offset:f(r)-t.top}}function J(e,t,r){if(e===void 0)return;let n=t.find(o=>o.id===e.id);return n!==void 0&&n.bottom>r.top&&n.top<r.bottom?{id:e.id,offset:f(n)-r.top}:B(t,r)??e}function V(e,t,r){if(e===void 0)return;let n=t.find(o=>o.id===e.id);return n===void 0?void 0:f(n)-r.top-e.offset}function Q(e,t,r=3){return !Number.isFinite(r)||r<=0?[]:e.filter(n=>n.bottom>t.top&&n.top<t.bottom).slice(0,Math.floor(r)).map(n=>({id:n.id,offset:f(n)-t.top}))}function X(e,t,r){for(let n of e){let o=V(n,t,r);if(o!==void 0)return o}}function Z(e){return e.sameConversation&&!e.isHistoryWindow&&!e.isLocating&&!e.isLocateProtected&&e.userKeptLatestIntent}function ee(e){return e.isPageVisible&&!e.isHistoryWindow&&!e.isLocating&&!e.isLocateProtected&&(e.isOwnMessage||e.isAtBottom)}function te(e){return e.isLoadingOlder&&e.previousTailId!==void 0&&e.previousTailId!==e.currentTailId&&e.previousMessageIds.includes(e.currentTailId)}function re(e,t){return e!==void 0&&!t.has(e)}async function ne(e,t){let r=0;for(;e()&&!(await t()<=0);)r+=1;return r}function oe(e){return e.hasMoreHistory&&Number.isFinite(e.scrollHeight)&&Number.isFinite(e.clientHeight)&&e.scrollHeight>0&&e.clientHeight>0&&e.scrollHeight<=e.clientHeight}function ie(e){return e.isHistoryWindow&&!e.isPageSettling&&e.isAtBottom&&(e.currentScrollTop>e.previousScrollTop||e.allowStationaryBoundary===true)}function M(e){return !e.isPageVisible||!e.isAtBottom||e.isHistoryWindow}function ae(e){let t=Math.max(0,e.margin);return e.messageTop<e.viewportBottom-t&&e.messageBottom>e.viewportTop+t}function le(e){let t=new Set;function r(s){return s===t.size?false:(e?.(t.size),true)}function n(s){let l=t.size;for(let d of s)d!==""&&t.add(d);return r(l)}function o(s,l){return M(l)&&n(s)}function a(s){let l=t.size;for(let d of s)t.delete(d);return r(l)}function i(){let s=t.size;return t.clear(),r(s)}return {get count(){return t.size},add:n,trackRemote:o,acknowledgeVisible:a,clear:i}}export{M as A,ae as B,le as C,P as a,b,m as c,h as d,F as e,L as f,K as g,I as h,_ as i,U as j,j as k,G as l,q as m,H as n,B as o,J as p,V as q,Q as r,X as s,Z as t,ee as u,te as v,re as w,ne as x,oe as y,ie as z};
|