k2-im 0.2.7 → 0.2.9

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.
@@ -1755,6 +1755,7 @@ interface ImDirectoryItem<TKind extends ImDirectoryKind = ImDirectoryKind> {
1755
1755
  displayName: string;
1756
1756
  cardDisplayName: string;
1757
1757
  avatarUrl?: string;
1758
+ /** 面向用户展示的账号;HTTP 目录优先映射 mid(金刚号),与内部 id 分开。 */
1758
1759
  username?: string;
1759
1760
  }
1760
1761
  /** HTTP adapter 返回的页;页码只在 port 内可见,不进入产品 API。 */
@@ -1752,6 +1752,7 @@ interface ImDirectoryItem<TKind extends ImDirectoryKind = ImDirectoryKind> {
1752
1752
  displayName: string;
1753
1753
  cardDisplayName: string;
1754
1754
  avatarUrl?: string;
1755
+ /** 面向用户展示的账号;HTTP 目录优先映射 mid(金刚号),与内部 id 分开。 */
1755
1756
  username?: string;
1756
1757
  }
1757
1758
  /** HTTP adapter 返回的页;页码只在 port 内可见,不进入产品 API。 */
package/dist/index.d.ts CHANGED
@@ -1793,6 +1793,7 @@ interface ImDirectoryItem<TKind extends ImDirectoryKind = ImDirectoryKind> {
1793
1793
  displayName: string;
1794
1794
  cardDisplayName: string;
1795
1795
  avatarUrl?: string;
1796
+ /** 面向用户展示的账号;HTTP 目录优先映射 mid(金刚号),与内部 id 分开。 */
1796
1797
  username?: string;
1797
1798
  }
1798
1799
  /** HTTP adapter 返回的页;页码只在 port 内可见,不进入产品 API。 */
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,n,i)=>((t,n,i)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[n]=i)(t,"symbol"!=typeof n?n+"":n,i);import{getApplicationPage as n,ignoreApplication as i,acceptApplication as r}from"./requests/applications.js";class a extends Error{constructor(e,n){super(`application HTTP 失败(${e}):${n||"unknown error"}`),t(this,"code"),this.code=e,this.name="ApplicationHttpError"}}class o extends Error{constructor(e){super(`application 映射失败:${e}`),this.name="ApplicationMappingError"}}function s(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function u(e){const t=s(e);if(""===t)return;if(/^\d+$/.test(t)){const e=Number(t);if(!Number.isSafeInteger(e)||e<=0)return;return t.length>=13?e:1e3*e}const n=Date.parse(t);return Number.isFinite(n)?n:void 0}function c(e){const t=s(e.status);if(void 0===e.status||""===t)return!0;const n=function(e){switch(e){case 0:case 1:case 2:return e;default:return}}(Number(t));if(void 0===n)throw new o(`未知申请状态:${t}`);return 0===n}function p(e){const t=s(e.type);if(""===t)return!0;if(1!==Number(t))throw new o(`联系人申请页出现未知 type:${t}`);return!0}function l(e){const t=Number(s(e.type));if(2!==t&&3!==t&&4!==t&&5!==t)throw new o(`GROUP/CHANNEL 混合页出现未知 type:${s(e.type)||"<empty>"}`);return t}function f(e){if(!Number.isInteger(e.limit)||e.limit<=0||e.limit>50)throw new o("limit 必须为 1-50");if(void 0===e.cursor)return{page:1,pageSize:e.limit};if(!/^[1-9]\d*$/.test(e.cursor))throw new o("page cursor 必须为正十进制整数");const t=Number(e.cursor);if(!Number.isSafeInteger(t))throw new o("page cursor 超出安全整数范围");return{page:t,pageSize:e.limit}}function m(e){if(null!=e&&Array.isArray(e.list))return e.list;const t=e?.count??e?.total,n=0===t||"string"==typeof t&&/^0+$/.test(t.trim());if(null===e?.list&&n)return[];throw new o("data.list 必须是数组,或在 count=0 时为 null")}function d(e){const t=e.trim();if(""===t)throw new o("申请记录 id 不能为空");return t}function g(e){const t=d(s(e.id)||s(e.aid)),n=s(e.user_id)||s(e.user_info?.user_id),i=s(e.nick_name??e.nickname??e.name)||s(e.user_info?.nick_name??e.user_info?.nickname??e.user_info?.name);if(""===n||""===i)throw new o(`联系人申请人身份不能为空(applicationId=${t})`);const r=s(e.head_img_url??e.avatar)||s(e.user_info?.head_img_url??e.user_info?.avatar),a=s(e.user_info?.mid),c=u(e.create_time??e.createTime??e.update_version);return{applicationId:t,applicantId:n,applicantName:i,...""===r?{}:{applicantAvatar:r},...""===a?{}:{applicantDisplayId:a},message:s(e.remarks??e.introduce_self),...void 0===c?{}:{createdAt:c}}}function _(e){const t=d(s(e.id)||s(e.aid)),n=s(e.group_id)||s(e.group_info?.group_id);if(""===n)throw new o(`GROUP id 不能为空(applicationId=${t})`);const i=s(e.user_id)||s(e.user_info?.user_id),r=s(e.nick_name??e.nickname??e.name)||s(e.user_info?.nick_name??e.user_info?.nickname??e.user_info?.name);if(""===i||""===r)throw new o(`GROUP 申请人或邀请人身份不能为空(applicationId=${t})`);const a=s(e.head_img_url??e.avatar)||s(e.user_info?.head_img_url??e.user_info?.avatar),c=s(e.user_info?.mid),p=s(e.group_info?.name??e.group_info?.group_name);if(""===p)throw new o(`GROUP 名称不能为空(applicationId=${t})`);const l=s(e.group_info?.head_img_url??e.group_info?.avatar),f=u(e.create_time??e.createTime??e.update_version);return{applicationId:t,groupId:n,kind:3===Number(e.type)?"invite":"request",actor:{id:i,name:r,...""===a?{}:{avatarUrl:a},...""===c?{}:{displayId:c}},target:{id:n,name:p,...""===l?{}:{avatarUrl:l}},message:s(e.remarks??e.introduce_self),...void 0===f?{}:{createdAt:f}}}async function w(e,t,n){const i=await n(e.client,{applicationId:d(t),clientType:e.clientType});if(!i.ok)throw new a(i.code,i.message)}function h(e){return{listPendingApplications:async function(t){const{pageSize:i}=f(t);let{page:r}=f(t);for(let t=0;t<20;t+=1){const t=await n(e.client,{listType:1,page:r,pageSize:i,clientType:e.clientType});if(!t.ok)throw new a(t.code,t.message);const o=m(t.data),s=o.filter(e=>p(e)&&c(e)).map(g),u=o.length<i,l=r+1;if(s.length>0||u)return{items:s,exhausted:u,...u?{}:{nextCursor:String(l)}};r=l}return{items:[],exhausted:!1,nextCursor:String(r)}},acceptApplication:t=>w(e,t,r),ignoreApplication:t=>w(e,t,i)}}function y(e){return{listPendingApplications:async function(t){const{pageSize:i}=f(t);let{page:r}=f(t);for(let t=0;t<20;t+=1){const t=await n(e.client,{listType:2,page:r,pageSize:i,clientType:e.clientType});if(!t.ok)throw new a(t.code,t.message);const o=m(t.data),s=o.filter(e=>{const t=l(e);return(2===t||3===t)&&c(e)}).map(_),u=o.length<i,p=r+1;if(s.length>0||u)return{items:s,exhausted:u,...u?{}:{nextCursor:String(p)}};r=p}return{items:[],exhausted:!1,nextCursor:String(r)}},acceptApplication:t=>w(e,t,r),ignoreApplication:t=>w(e,t,i)}}export{a as ApplicationHttpError,o as ApplicationMappingError,h as createContactApplicationHttpAdapter,y as createGroupApplicationHttpAdapter};
1
+ var e=Object.defineProperty,t=(t,n,i)=>((t,n,i)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[n]=i)(t,"symbol"!=typeof n?n+"":n,i);import{getApplicationPage as n,ignoreApplication as i,acceptApplication as r}from"./requests/applications.js";class a extends Error{constructor(e,n){super(`application HTTP 失败(${e}):${n||"unknown error"}`),t(this,"code"),this.code=e,this.name="ApplicationHttpError"}}class o extends Error{constructor(e){super(`application 映射失败:${e}`),this.name="ApplicationMappingError"}}function s(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function u(e){const t=s(e);if(""===t)return;if(/^\d+$/.test(t)){const e=Number(t);if(!Number.isSafeInteger(e)||e<=0)return;return t.length>=13?e:1e3*e}const n=Date.parse(t);return Number.isFinite(n)?n:void 0}function c(e){const t=s(e.status);if(void 0===e.status||""===t)return!0;const n=function(e){switch(e){case 0:case 1:case 2:return e;default:return}}(Number(t));if(void 0===n)throw new o(`未知申请状态:${t}`);return 0===n}function p(e){const t=s(e.type);if(""===t)return!0;if(1!==Number(t))throw new o(`联系人申请页出现未知 type:${t}`);return!0}function l(e){const t=Number(s(e.type));if(2!==t&&3!==t&&4!==t&&5!==t)throw new o(`GROUP/CHANNEL 混合页出现未知 type:${s(e.type)||"<empty>"}`);return t}function f(e){if(!Number.isInteger(e.limit)||e.limit<=0||e.limit>50)throw new o("limit 必须为 1-50");if(void 0===e.cursor)return{page:1,pageSize:e.limit};if(!/^[1-9]\d*$/.test(e.cursor))throw new o("page cursor 必须为正十进制整数");const t=Number(e.cursor);if(!Number.isSafeInteger(t))throw new o("page cursor 超出安全整数范围");return{page:t,pageSize:e.limit}}function m(e){if(null!=e&&Array.isArray(e.list))return e.list;const t=e?.count??e?.total,n=0===t||"string"==typeof t&&/^0+$/.test(t.trim());if(null===e?.list&&n)return[];throw new o("data.list 必须是数组,或在 count=0 时为 null")}function d(e){const t=e.trim();if(""===t)throw new o("申请记录 id 不能为空");return t}function g(e){const t=d(s(e.id)||s(e.aid)),n=s(e.user_id)||s(e.user_info?.user_id),i=s(e.nick_name)||s(e.nickname)||s(e.name)||s(e.user_info?.nick_name)||s(e.user_info?.nickname)||s(e.user_info?.name);if(""===n||""===i)throw new o(`联系人申请人身份不能为空(applicationId=${t})`);const r=s(e.head_img_url)||s(e.avatar)||s(e.user_info?.head_img_url)||s(e.user_info?.avatar),a=s(e.user_info?.mid),c=u(e.create_time??e.createTime??e.update_version);return{applicationId:t,applicantId:n,applicantName:i,...""===r?{}:{applicantAvatar:r},...""===a?{}:{applicantDisplayId:a},message:s(e.remarks)||s(e.introduce_self),...void 0===c?{}:{createdAt:c}}}function _(e){const t=d(s(e.id)||s(e.aid)),n=s(e.group_id)||s(e.group_info?.group_id);if(""===n)throw new o(`GROUP id 不能为空(applicationId=${t})`);const i=s(e.user_id)||s(e.user_info?.user_id),r=s(e.nick_name)||s(e.nickname)||s(e.name)||s(e.user_info?.nick_name)||s(e.user_info?.nickname)||s(e.user_info?.name);if(""===i||""===r)throw new o(`GROUP 申请人或邀请人身份不能为空(applicationId=${t})`);const a=s(e.head_img_url)||s(e.avatar)||s(e.user_info?.head_img_url)||s(e.user_info?.avatar),c=s(e.user_info?.mid),p=s(e.group_info?.name)||s(e.group_info?.group_name);if(""===p)throw new o(`GROUP 名称不能为空(applicationId=${t})`);const l=s(e.group_info?.head_img_url)||s(e.group_info?.avatar),f=u(e.create_time??e.createTime??e.update_version);return{applicationId:t,groupId:n,kind:3===Number(e.type)?"invite":"request",actor:{id:i,name:r,...""===a?{}:{avatarUrl:a},...""===c?{}:{displayId:c}},target:{id:n,name:p,...""===l?{}:{avatarUrl:l}},message:s(e.remarks)||s(e.introduce_self),...void 0===f?{}:{createdAt:f}}}async function w(e,t,n){const i=await n(e.client,{applicationId:d(t),clientType:e.clientType});if(!i.ok)throw new a(i.code,i.message)}function h(e){return{listPendingApplications:async function(t){const{pageSize:i}=f(t);let{page:r}=f(t);for(let t=0;t<20;t+=1){const t=await n(e.client,{listType:1,page:r,pageSize:i,clientType:e.clientType});if(!t.ok)throw new a(t.code,t.message);const o=m(t.data),s=o.filter(e=>p(e)&&c(e)).map(g),u=o.length<i,l=r+1;if(s.length>0||u)return{items:s,exhausted:u,...u?{}:{nextCursor:String(l)}};r=l}return{items:[],exhausted:!1,nextCursor:String(r)}},acceptApplication:t=>w(e,t,r),ignoreApplication:t=>w(e,t,i)}}function y(e){return{listPendingApplications:async function(t){const{pageSize:i}=f(t);let{page:r}=f(t);for(let t=0;t<20;t+=1){const t=await n(e.client,{listType:2,page:r,pageSize:i,clientType:e.clientType});if(!t.ok)throw new a(t.code,t.message);const o=m(t.data),s=o.filter(e=>{const t=l(e);return(2===t||3===t)&&c(e)}).map(_),u=o.length<i,p=r+1;if(s.length>0||u)return{items:s,exhausted:u,...u?{}:{nextCursor:String(p)}};r=p}return{items:[],exhausted:!1,nextCursor:String(r)}},acceptApplication:t=>w(e,t,r),ignoreApplication:t=>w(e,t,i)}}export{a as ApplicationHttpError,o as ApplicationMappingError,h as createContactApplicationHttpAdapter,y as createGroupApplicationHttpAdapter};
@@ -1 +1 @@
1
- import{requestCoreJson as e}from"./requests/core-json-request.js";class i extends Error{constructor(e){super(e),this.name="DirectoryMappingError"}}function r(e,r){if(null===e||"object"!=typeof e||Array.isArray(e))throw new i(`${r} 必须是对象`);return e}function n(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function t(e){const i=n(e);return""===i?void 0:i}function a(e){const a=r(e,"联系人目录项"),o=void 0===a.user_info?a:r(a.user_info,"联系人 user_info"),d=n(o.user_id??a.friend_user_id??a.user_id);if(""===d)throw new i("联系人目录项缺少稳定 user_id");const s=n(a.remark_name)||n(a.contact_name)||n(o.nick_name)||n(o.username)||n(o.mid)||d,u=n(o.nick_name)||n(o.username)||n(o.mid)||d,c=t(o.head_img_url),p=t(o.username)??t(o.mid);return{id:d,kind:"individual",displayName:s,cardDisplayName:u,...void 0===c?{}:{avatarUrl:c},...void 0===p?{}:{username:p}}}function o(e){const a=r(e,"群组目录项"),o=n(a.group_id);if(""===o)throw new i("群组目录项缺少稳定 group_id");const d=t(a.head_img_url),s=n(a.name)||o;return{id:o,kind:"group",displayName:s,cardDisplayName:s,...void 0===d?{}:{avatarUrl:d}}}function d(e){const a=r(e,"社群目录项"),o=n(a.radio_id??a.id);if(""===o)throw new i("社群目录项缺少稳定 radio_id/id");const d=t(a.head_img_url),s=n(a.name)||o;return{id:o,kind:"channel",displayName:s,cardDisplayName:s,...void 0===d?{}:{avatarUrl:d}}}function s(r){return{async list(n){!function(e,r){if(!Number.isSafeInteger(e)||e<1)throw new i("目录 page 必须是正整数");if(!Number.isSafeInteger(r)||r<1||r>100)throw new i("目录 pageSize 必须是 1-100 的整数")}(n.page,n.pageSize);const t="individual"===n.kind?"/friend/list":"group"===n.kind?"/user_group/list":"/user_radio/list",s="channel"===n.kind&&void 0!==r.getUserId?String(await r.getUserId()).trim():"",u=(await e(r.client,t,{...""===s?{}:{user_id:s},update_version:0,page:n.page,page_size:n.pageSize},{responseMode:"strict",method:"GET",...void 0===r.clientType?{}:{headers:{"Client-type":String(r.clientType)}}})).data??[];if(!Array.isArray(u))throw new i(`${n.kind} 目录 data 必须是数组`);const c="individual"===n.kind?a:"group"===n.kind?o:d,p=/* @__PURE__ */new Map;for(const e of u){const i=c(e);p.set(i.id,i)}const m=u.length<n.pageSize;return{items:[...p.values()],...m?{}:{nextPage:n.page+1},exhausted:m}}}}export{i as DirectoryMappingError,s as createDirectoryHttpAdapter};
1
+ import{requestCoreJson as e}from"./requests/core-json-request.js";class i extends Error{constructor(e){super(e),this.name="DirectoryMappingError"}}function r(e,r){if(null===e||"object"!=typeof e||Array.isArray(e))throw new i(`${r} 必须是对象`);return e}function n(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function t(e){const i=n(e);return""===i?void 0:i}function a(e){const a=r(e,"联系人目录项"),o=void 0===a.user_info?a:r(a.user_info,"联系人 user_info"),d=n(o.user_id??a.friend_user_id??a.user_id);if(""===d)throw new i("联系人目录项缺少稳定 user_id");const s=n(a.remark_name)||n(a.contact_name)||n(o.nick_name)||n(o.username)||n(o.mid)||d,u=n(o.nick_name)||n(o.username)||n(o.mid)||d,c=t(o.head_img_url),p=t(o.mid)??t(o.username);return{id:d,kind:"individual",displayName:s,cardDisplayName:u,...void 0===c?{}:{avatarUrl:c},...void 0===p?{}:{username:p}}}function o(e){const a=r(e,"群组目录项"),o=n(a.group_id);if(""===o)throw new i("群组目录项缺少稳定 group_id");const d=t(a.head_img_url),s=n(a.name)||o;return{id:o,kind:"group",displayName:s,cardDisplayName:s,...void 0===d?{}:{avatarUrl:d}}}function d(e){const a=r(e,"社群目录项"),o=n(a.radio_id??a.id);if(""===o)throw new i("社群目录项缺少稳定 radio_id/id");const d=t(a.head_img_url),s=n(a.name)||o;return{id:o,kind:"channel",displayName:s,cardDisplayName:s,...void 0===d?{}:{avatarUrl:d}}}function s(r){return{async list(n){!function(e,r){if(!Number.isSafeInteger(e)||e<1)throw new i("目录 page 必须是正整数");if(!Number.isSafeInteger(r)||r<1||r>100)throw new i("目录 pageSize 必须是 1-100 的整数")}(n.page,n.pageSize);const t="individual"===n.kind?"/friend/list":"group"===n.kind?"/user_group/list":"/user_radio/list",s="channel"===n.kind&&void 0!==r.getUserId?String(await r.getUserId()).trim():"",u=(await e(r.client,t,{...""===s?{}:{user_id:s},update_version:0,page:n.page,page_size:n.pageSize},{responseMode:"strict",method:"GET",...void 0===r.clientType?{}:{headers:{"Client-type":String(r.clientType)}}})).data??[];if(!Array.isArray(u))throw new i(`${n.kind} 目录 data 必须是数组`);const c="individual"===n.kind?a:"group"===n.kind?o:d,p=/* @__PURE__ */new Map;for(const e of u){const i=c(e);p.set(i.id,i)}const m=u.length<n.pageSize;return{items:[...p.values()],...m?{}:{nextPage:n.page+1},exhausted:m}}}}export{i as DirectoryMappingError,s as createDirectoryHttpAdapter};
@@ -1 +1 @@
1
- import{defineStore as e}from"pinia";import{ref as t,shallowRef as o,computed as n}from"vue";import{getImChatKitContext as r,registerImChatKitStoreDisposer as a,resolveImChatKitPinia as i}from"./context.js";function c(e){return`${e.domain}:${e.applicationId}`}function l(e,t){const o="object"==typeof e&&null!==e?e:null;return Object.freeze({code:null!==o&&"string"==typeof o.code?o.code:"IM_CHAT_KIT_APPLICATIONS_ACTION_FAILED",category:null!==o&&(n=o.category,"auth"===n||"network"===n||"protocol"===n||"permission"===n||"validation"===n||"state"===n||"unsupported"===n||"contract"===n)?o.category:"state",operation:null!==o&&"string"==typeof o.operation?o.operation:`applications.${t}`,retryable:null!==o&&"boolean"==typeof o.retryable?o.retryable:"reload"===t});var n}function u(a){return e("k2-im-applications",()=>{const e=r(a).runtime,i=t([]),u=t(!1),p=o(null),s=t({}),f=o({}),d=n(()=>i.value.length),v=n(()=>{let e=0,t=0,o=0;for(const n of i.value)"contact"===n.ref.domain?e+=1:"group"===n.ref.domain?t+=1:o+=1;return Object.freeze({contact:e,group:t,channel:o})});let b=!1,O=0,g=0,j=0,y=!1,z=0;const I=/* @__PURE__ */new Map;function m(){O+=1,g+=1,j+=1,z+=1,y=!1,I.clear(),i.value=[],u.value=!1,p.value=null,s.value={},f.value={}}function k(t){return{client:t,generation:e.getGeneration(),stateEpoch:O}}function A(t){return!b&&t.client===e.getProductClient()&&t.generation===e.getGeneration()&&t.stateEpoch===O}async function _(){if(b)return Object.freeze({ok:!1,operation:"reload",reason:"stale"});const t=++g;let o;try{o=k(e.ensureProductClient())}catch(e){const t=l(e,"reload");return p.value=t,u.value=!1,Object.freeze({ok:!1,operation:"reload",reason:"failed",error:t})}u.value=!0,p.value=null;try{const e=await o.client.applications.listPending();return t===g&&A(o)?(i.value=Object.freeze([...e]),Object.freeze({ok:!0,operation:"reload"})):Object.freeze({ok:!1,operation:"reload",reason:"stale"})}catch(e){if(t!==g||!A(o))return Object.freeze({ok:!1,operation:"reload",reason:"stale"});const n=l(e,"reload");return p.value=n,Object.freeze({ok:!1,operation:"reload",reason:"failed",error:n})}finally{t===g&&A(o)&&(u.value=!1)}}const h=e.subscribeProductEvents(function(e){"contact-application:received"!==e.type&&"channel-join-application:received"!==e.type&&"application:updated"!==e.type||function(){if(b||y)return;y=!0;const e=O,t=++z;queueMicrotask(()=>{t===z&&(y=!1,b||e!==O||_())})}()});async function E(t,o){const n="contact"===(r=t).domain?Object.freeze({domain:"contact",applicationId:r.applicationId}):"group"===r.domain?Object.freeze({domain:"group",applicationId:r.applicationId,conversation:Object.freeze({conversationType:"group",conversationId:r.conversation.conversationId})}):Object.freeze({domain:"channel",applicationId:r.applicationId,conversation:Object.freeze({conversationType:"channel",conversationId:r.conversation.conversationId})});var r;const a=c(n);if(b)return Object.freeze({ok:!1,operation:o,reason:"stale",application:n});const p=++j;I.set(a,p),s.value={...s.value,[a]:o};const{[a]:d,...v}=f.value;let O;f.value=v;try{O=k(e.ensureProductClient())}catch(e){const t=l(e,o);f.value={...f.value,[a]:t};const{[a]:r,...i}=s.value;return s.value=i,I.delete(a),Object.freeze({ok:!1,operation:o,reason:"failed",application:n,error:t})}const y=()=>A(O)&&I.get(a)===p;try{return await O.client.applications[o](n),y()?(g+=1,u.value=!1,i.value=Object.freeze(i.value.filter(e=>c(e.ref)!==a)),Object.freeze({ok:!0,operation:o,application:n})):Object.freeze({ok:!1,operation:o,reason:"stale",application:n})}catch(e){if(!y())return Object.freeze({ok:!1,operation:o,reason:"stale",application:n});const t=l(e,o);return function(e){return"IM_SDK_APPLICATION_REQUEST_ALREADY_HANDLED"===e.code||"IM_SDK_APPLICATION_ALREADY_HANDLED"===e.code}(t)?(g+=1,u.value=!1,i.value=Object.freeze(i.value.filter(e=>c(e.ref)!==a)),Object.freeze({ok:!1,operation:o,reason:"failed",application:n,error:t})):(f.value={...f.value,[a]:t},Object.freeze({ok:!1,operation:o,reason:"failed",application:n,error:t}))}finally{if(y()){I.delete(a);const{[a]:e,...t}=s.value;s.value=t}}}return{items:i,loading:u,error:p,processingKeys:s,itemErrors:f,pendingCount:d,domainCounts:v,reload:_,accept:function(e){return E(e,"accept")},ignore:function(e){return E(e,"ignore")},reset:function(){b||m()},dispose:function(){b||(b=!0,h(),m())}}})}const p=/* @__PURE__ */new WeakMap,s=/* @__PURE__ */new WeakMap;function f(e=i()){r(e);let t=p.get(e);void 0===t&&(t=u(e),p.set(e,t));const o=t(e);return s.get(e)!==o&&(s.set(e,o),a(e,()=>{o.dispose(),o.$dispose(),s.get(e)===o&&s.delete(e)})),o}export{c as applicationKey,f as useImApplicationsStore};
1
+ import{defineStore as e}from"pinia";import{ref as t,shallowRef as n,computed as o}from"vue";import{getImChatKitContext as a,registerImChatKitStoreDisposer as r,resolveImChatKitPinia as i}from"./context.js";function c(e){return`${e.domain}:${e.applicationId}`}function l(e,t){const n="object"==typeof e&&null!==e?e:null;return Object.freeze({code:null!==n&&"string"==typeof n.code?n.code:"IM_CHAT_KIT_APPLICATIONS_ACTION_FAILED",category:null!==n&&(o=n.category,"auth"===o||"network"===o||"protocol"===o||"permission"===o||"validation"===o||"state"===o||"unsupported"===o||"contract"===o)?n.category:"state",operation:null!==n&&"string"==typeof n.operation?n.operation:`applications.${t}`,retryable:null!==n&&"boolean"==typeof n.retryable?n.retryable:"reload"===t});var o}function u(r){return e("k2-im-applications",()=>{const e=a(r).runtime,i=t([]),u=t(!1),p=n(null),s=t({}),f=n({}),d=o(()=>i.value.length),v=o(()=>{let e=0,t=0,n=0;for(const o of i.value)"contact"===o.ref.domain?e+=1:"group"===o.ref.domain?t+=1:n+=1;return Object.freeze({contact:e,group:t,channel:n})});let g=!1,b=0,O=0,j=0,y=0,z=0,I=!1;const m=/* @__PURE__ */new Map;function k(){b+=1,O+=1,j+=1,y+=1,z=0,I=!1,m.clear(),i.value=[],u.value=!1,p.value=null,s.value={},f.value={}}function h(t){return{client:t,generation:e.getGeneration(),stateEpoch:b}}function A(t){return!g&&t.client===e.getProductClient()&&t.generation===e.getGeneration()&&t.stateEpoch===b}async function _(){if(g)return Object.freeze({ok:!1,operation:"reload",reason:"stale"});z+=1;const t=++O;let n;try{n=h(e.ensureProductClient())}catch(e){const t=l(e,"reload");return p.value=t,u.value=!1,Object.freeze({ok:!1,operation:"reload",reason:"failed",error:t})}u.value=!0,p.value=null;try{const e=await n.client.applications.listPending();return t===O&&A(n)?(i.value=Object.freeze([...e]),Object.freeze({ok:!0,operation:"reload"})):Object.freeze({ok:!1,operation:"reload",reason:"stale"})}catch(e){if(t!==O||!A(n))return Object.freeze({ok:!1,operation:"reload",reason:"stale"});const o=l(e,"reload");return p.value=o,Object.freeze({ok:!1,operation:"reload",reason:"failed",error:o})}finally{t===O&&A(n)&&(u.value=!1)}}function P(){if(g)return;const t=b,n=e.getGeneration(),o=e.getProductClient(),a=z,r=++y;queueMicrotask(()=>{r===y&&(g||t!==b||n!==e.getGeneration()||o!==e.getProductClient()||a!==z||_())})}const C=e.subscribeProductEvents(function(e){if("connection:changed"===e.type){const t="authenticated"===e.snapshot.connectionState;return t&&!I&&z>0&&P(),void(I=t)}"contact-application:received"!==e.type&&"channel-join-application:received"!==e.type&&"application:updated"!==e.type||P()});async function E(t,n){const o="contact"===(a=t).domain?Object.freeze({domain:"contact",applicationId:a.applicationId}):"group"===a.domain?Object.freeze({domain:"group",applicationId:a.applicationId,conversation:Object.freeze({conversationType:"group",conversationId:a.conversation.conversationId})}):Object.freeze({domain:"channel",applicationId:a.applicationId,conversation:Object.freeze({conversationType:"channel",conversationId:a.conversation.conversationId})});var a;const r=c(o);if(g)return Object.freeze({ok:!1,operation:n,reason:"stale",application:o});const p=++j;m.set(r,p),s.value={...s.value,[r]:n};const{[r]:d,...v}=f.value;let b;f.value=v;try{b=h(e.ensureProductClient())}catch(e){const t=l(e,n);f.value={...f.value,[r]:t};const{[r]:a,...i}=s.value;return s.value=i,m.delete(r),Object.freeze({ok:!1,operation:n,reason:"failed",application:o,error:t})}const y=()=>A(b)&&m.get(r)===p;try{return await b.client.applications[n](o),y()?(O+=1,u.value=!1,i.value=Object.freeze(i.value.filter(e=>c(e.ref)!==r)),Object.freeze({ok:!0,operation:n,application:o})):Object.freeze({ok:!1,operation:n,reason:"stale",application:o})}catch(e){if(!y())return Object.freeze({ok:!1,operation:n,reason:"stale",application:o});const t=l(e,n);return function(e){return"IM_SDK_APPLICATION_REQUEST_ALREADY_HANDLED"===e.code||"IM_SDK_APPLICATION_ALREADY_HANDLED"===e.code}(t)?(O+=1,u.value=!1,i.value=Object.freeze(i.value.filter(e=>c(e.ref)!==r)),Object.freeze({ok:!1,operation:n,reason:"failed",application:o,error:t})):(f.value={...f.value,[r]:t},Object.freeze({ok:!1,operation:n,reason:"failed",application:o,error:t}))}finally{if(y()){m.delete(r);const{[r]:e,...t}=s.value;s.value=t}}}return{items:i,loading:u,error:p,processingKeys:s,itemErrors:f,pendingCount:d,domainCounts:v,reload:_,accept:function(e){return E(e,"accept")},ignore:function(e){return E(e,"ignore")},reset:function(){g||k()},dispose:function(){g||(g=!0,C(),k())}}})}const p=/* @__PURE__ */new WeakMap,s=/* @__PURE__ */new WeakMap;function f(e=i()){a(e);let t=p.get(e);void 0===t&&(t=u(e),p.set(e,t));const n=t(e);return s.get(e)!==n&&(s.set(e,n),r(e,()=>{n.dispose(),n.$dispose(),s.get(e)===n&&s.delete(e)})),n}export{c as applicationKey,f as useImApplicationsStore};
@@ -1 +1 @@
1
- import{defineComponent as e,ref as t,provide as o,watch as n,nextTick as i,onMounted as l,onBeforeUnmount as r,computed as s,h as a}from"vue";import{resolveImThreadActiveDate as c}from"../../thread/active-date.js";import{createNewMessageBadgeController as d}from"../../thread/new-message-badge.js";import{refreshPrependMessageAnchorPosition as u,isMessageVisibleForNewMessageBadge as v,resolvePrependMessageAnchorPosition as f,resolveCenteredMessageScrollTop as p,shouldPrefetchOlderHistory as h,shouldLoadNewerHistoryPage as g,resolvePrependMessageAnchorAdjustment as m}from"../../thread/viewport-rules.js";import{createThreadIdleTask as b}from"./thread-idle-task.js";import{createThreadLayoutMeasurements as y}from"./thread-layout-measurements.js";import{THREAD_VIEWPORT_REGISTRATION_KEY as T}from"./thread-viewport-context.js";const w=.5;function M(e){const t=e.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(void 0!==t&&Number.isFinite(t)&&t>0?t:1)}const O=e({name:"ImThreadViewport",props:{messageIds:{type:Array,required:!0},contentKey:{type:String,default:""},loadingOlder:{type:Boolean,default:!1},hasNewer:{type:Boolean,default:!1},loadingNewer:{type:Boolean,default:!1},followThreshold:{type:Number,default:120},olderPrefetchThreshold:{type:Number,default:120},followNewMessages:{type:Boolean,default:!0},shouldFollowAppendedMessage:{type:Function,default:void 0},pendingSendMessageIds:{type:Array,default:()=>[]},visibleMargin:{type:Number,default:8},resizeFollowEnabled:{type:Boolean,default:!0},activeDateOffset:{type:Number,default:16},activeDateEnabled:{type:Boolean,default:!1}},emits:{"reach-start":()=>!0,"reach-end":()=>!0,"visible-range":e=>!0,settled:e=>!0,"new-message-count":e=>!0,"user-scroll":()=>!0,"active-date-change":e=>!0},setup(e,{emit:O,expose:H,slots:x}){const E=t(null),N=t(null),L=/* @__PURE__ */new Map;let B;const P=/* @__PURE__ */new Map,A=/* @__PURE__ */new Set,R=/* @__PURE__ */new Map;let S,C,F,I,k=0,D=[];const Y=y({requestFrame:xe,observe:e=>F?.observe(e),unobserve:e=>{e===E.value||e===N.value||P.has(e)||F?.unobserve(e)}});let j,z,U=!1;const V=/* @__PURE__ */new Set;let q,K=!1,W=0,$="",G=1,J=!1,Q=!1,X=!0,Z=!1,_=!1,ee=!0,te=!1,oe=0,ne=-1,ie=-1;const le=b();let re,se,ae,ce;const de=t(!0),ue=t(0),ve=d(e=>{ue.value=e,O("new-message-count",e)});function fe(t){const o=Number.isFinite(e.followThreshold)?Math.max(0,e.followThreshold):0;return t.scrollHeight-t.clientHeight-t.scrollTop<=o}function pe(t=e.messageIds){return t.flatMap(e=>{const t=L.get(e);if(void 0===t)return[];const o=t.getBoundingClientRect(),n=t.querySelector("[data-im-thread-anchor-point]");return[{id:e,top:o.top,bottom:o.bottom,anchorTop:n?.getBoundingClientRect().top??o.top}]})}function he(e="",t=1){const o=Math.min(1,Math.max(0,t));""!==$&&$!==e&&R.get($)?.element.style.removeProperty("opacity"),$=e,G=o,""!==e&&R.get(e)?.element.style.setProperty("opacity",String(o))}function ge(){he()}function me(){const t=E.value;if(K||null===t||!e.activeDateEnabled)return;const o=[...R.entries()].filter(([,e])=>t.contains(e.element)).map(([e,t])=>{const o=t.element.getBoundingClientRect();return{key:e,label:t.label,top:o.top,height:o.height}}).sort((e,t)=>e.top-t.top),n=t.getBoundingClientRect(),i=o.find(e=>e.height>0)?.height??28,l=c({markers:o,viewportTop:n.top,overlayTop:Number.isFinite(e.activeDateOffset)?Math.max(0,e.activeDateOffset):0,overlayHeight:i});if(null===l)return ge(),void O("active-date-change",null);he(l.inlineDateKey,l.inlineOpacity),O("active-date-change",l)}function be(e){C={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight}}function ye(e){const t=C;if(void 0===t)return!1;const o=Math.max(0,e.scrollHeight-e.clientHeight);return o<t.scrollHeight-t.height&&t.scrollTop>o&&Math.abs(e.scrollTop-o)<=M(e)}function Te(e){return e.scrollTop<0||e.scrollTop>Math.max(0,e.scrollHeight-e.clientHeight)+M(e)}function we(e){return ye(e)||void 0!==q&&("smooth"===q.behavior||Math.abs(e.scrollTop-q.targetTop)<=M(e))?0:e.scrollTop-k}function Me(e,t){0!==t&&(k=e.scrollTop-t,q=void 0,Se(!0))}function Oe(t,o){const n=we(t);if(void 0!==ae)return ae.expectedOffset-=n,Ye(),Me(t,n),Z||Ue(),!1;const i=C;if(void 0===i)return!1;const l=S,r=void 0===l?void 0:pe([l.id])[0],s=t.scrollTop-i.scrollTop,a=ye(t)?0:s,c=void 0===l||void 0===r?0:(r.anchorTop??r.top)-o.top-l.offset+s;return(i.scrollHeight!==t.scrollHeight||i.width!==t.clientWidth||i.height!==t.clientHeight||Math.abs(c)>w)&&(C=void 0,!(J||Q||e.loadingOlder||e.loadingNewer||e.hasNewer||!e.resizeFollowEnabled||Te(t))&&de.value&&Math.abs(a)<=w?(lt(),!0):(void 0!==l&&function(e){const t=E.value;if(null===t||void 0===e)return;if(Te(t))return void Ve(e);const o=t.getBoundingClientRect(),n=m(e,pe([e.id]),{top:o.top,bottom:o.bottom});if(void 0!==n){const e=Math.max(0,t.scrollHeight-t.clientHeight),o=Math.min(e,Math.max(0,t.scrollTop+n));Fe(o),t.scrollTop=o,k=t.scrollTop,C=void 0}}({...l,offset:l.offset-a}),Me(t,n),!1))}function He(){const t=E.value;if(K||null===t)return;const o=t.getBoundingClientRect();if(Oe(t,o))return;const n=pe(void 0!==j&&U?e.messageIds.filter(e=>A.has(e)):e.messageIds);if(void 0!==j&&U&&0===n.length)return void(de.value=fe(t));const i=n.filter(t=>v({viewportTop:o.top,viewportBottom:o.bottom,messageTop:t.top,messageBottom:t.bottom,margin:e.visibleMargin})).map(e=>e.id),l=i.length!==D.length||i.some((e,t)=>D[t]!==e);D=Object.freeze(i),S=f(n,{top:o.top,bottom:o.bottom}),be(t),ve.acknowledgeVisible(i),de.value=fe(t),l&&O("visible-range",D),O("settled",{visibleMessageIds:D,...0===D.length?{}:{newestVisibleMessageId:D[D.length-1]},isAtBottom:de.value,newMessageCount:ue.value})}function xe(e){if(V.add(e),void 0!==z)return;const t=()=>{z=void 0;const e=[...V];V.clear(),e.forEach(e=>e())};z="function"==typeof globalThis.requestAnimationFrame?globalThis.requestAnimationFrame(t):globalThis.setTimeout(t,0)}function Ee(){xe(He)}function Ne(){const e=E.value;if(null===e)return;const t=e.getBoundingClientRect(),o=f(pe(),{top:t.top,bottom:t.bottom});void 0!==o&&(S=o,be(e))}function Le(){return X&&void 0===ae&&!Q&&!e.loadingOlder}function Be(){Ne(),X=!1,ne=oe,Q=!0,de.value=!1,O("reach-start"),xe(()=>{e.loadingOlder||(Q=!1)})}function Pe(t){return e.hasNewer&&!J&&!e.loadingOlder&&!e.loadingNewer&&fe(t)}function Ae(){Ne(),J=!0,de.value=!1,ie=oe,O("reach-end"),xe(()=>{e.loadingNewer||(J=!1)})}function Re(){const e=E.value;null!==e&&oe!==ie&&Pe(e)&&Ae()}function Se(t=!1){const o=E.value;if(K||null===o)return;const n=o.scrollTop,i=Math.max(0,o.scrollHeight-o.clientHeight),l=Math.min(i,Math.max(0,k)),r=Math.min(i,Math.max(0,n)),s=ye(o),a=q;let c=!1;if(void 0!==a){const e=Math.abs(n-a.targetTop)<=M(o);c="smooth"===a.behavior||e,("smooth"!==a.behavior||e)&&(q=void 0)}c||s||Z||!ee||void 0!==ae||n===k||(Z=!0,_=!0,oe+=1);const d=Z&&!c&&!s&&n!==k;d&&(W+=1,O("user-scroll"),xe(me)),Z&&!te&&Je(),!X&&_&&oe!==ne&&n<k&&n>qe()&&We(),void 0===ae||c||(Z?s||t||(ae.expectedOffset-=n-k):(Ye(),Ue())),Le()&&d&&h({previousScrollTop:l,currentScrollTop:r,topThreshold:e.olderPrefetchThreshold})&&Be(),d&&Pe(o)&&g({previousScrollTop:l,currentScrollTop:r,isAtBottom:fe(o),isHistoryWindow:e.hasNewer,isPageSettling:c})&&Ae(),k=n,Ee()}function Ce(){Se()}function Fe(e,t="auto"){q={targetTop:e,behavior:t}}function Ie(e){const t=ae,o=N.value;if(void 0!==t&&null!==o){if(t.visualOffset=Math.abs(e)<=w?0:e,0===t.visualOffset)return o.style.removeProperty("transform"),void o.style.removeProperty("will-change");o.style.setProperty("transform",`translate3d(0, ${t.visualOffset}px, 0)`),o.style.setProperty("will-change","transform")}}function ke(){void 0!==ce&&(clearTimeout(ce),ce=void 0),void 0!==ae&&0!==ae.visualOffset&&(S=void 0,C=void 0);const e=N.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),ae=void 0,q=void 0}function De(){const e=E.value,t=ae;if(null===e||void 0===t)return;const o=L.get(t.anchor.id);if(void 0===o)return;return(o.querySelector("[data-im-thread-anchor-point]")??o).getBoundingClientRect().top-e.getBoundingClientRect().top}function Ye(){const e=ae,t=De();if(void 0===e||void 0===t)return;const o=e.expectedOffset-t;if(Math.abs(o)<=w)return;const n=E.value;null!==n&&ye(n)&&(k=n.scrollTop),Ie(e.visualOffset+o),e.committed=!1,e.attempts=0}function je(){void 0!==ce&&clearTimeout(ce),ce=setTimeout(()=>{ce=void 0,Z||!0!==ae?.committed||ke()},500)}function ze(e,t=!1){const o=E.value,n=ae;if(K||null===o||void 0===n||Te(o)||Z&&!t)return;if(t){const e=we(o);n.expectedOffset-=e,Ye(),Me(o,e)}const i=e?.visualOffset??n.visualOffset;if(Math.abs(i)<=w)return n.committed=!0,void je();const l=Math.max(0,o.scrollHeight-o.clientHeight),r=o.scrollTop,s=Math.min(l,Math.max(0,r-i));Fe(s),o.scrollTop=s;const a=o.scrollTop,c=i+a-r,d=M(o),u=(r-i<0||r-i>l)&&Math.abs(a-s)<=d;if(k=a,Math.abs(c)>d&&!u)return Ie(c),Fe(a),n.committed=!1,n.attempts+=1,void(n.attempts<8&&!Z&&Ue());0!==n.visualOffset&&Ie(0),k=a,n.expectedOffset=void 0===e?De()??n.expectedOffset:e.currentOffset-(a-r),S={...n.anchor,offset:n.expectedOffset},be(o),n.committed=!0,n.attempts=0,je()}function Ue(){void 0===ae||ae.attempts>=8||(void 0!==ce&&clearTimeout(ce),ce=setTimeout(()=>{ce=void 0,ze()},120))}function Ve(e){if(void 0===e)return;void 0===ae&&(ae={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:!1,attempts:0});const t=E.value;if(!Z&&null!==t&&!Te(t)&&0===ae.visualOffset){const e=De();if(void 0!==e)return void ze({visualOffset:ae.expectedOffset-e,currentOffset:e})}Ye(),Z||ze()}function qe(){return Number.isFinite(e.olderPrefetchThreshold)?Math.max(0,e.olderPrefetchThreshold):0}function Ke(e=!1){W+=1,"smooth"===q?.behavior&&(q=void 0),_=!1,Z&&!e||(Z=!0,oe+=1),te&&le.cancel()}function We(){const t=E.value;if(null!==t&&oe!==ne&&!Q&&!e.loadingOlder){if(void 0!==ae){if(ze(void 0,!0),!ae.committed)return;ke()}X=!0,Le()&&t.scrollTop<=qe()&&Be()}}function $e(){W+=1,S=void 0,C=void 0,le.cancel(),ke(),Z=!1,_=!1,te=!1,re=void 0,se=void 0,oe+=1,ne=-1,ie=-1,X=!0,Q=!1,J=!1,q=void 0}function Ge(){te||null!==E.value&&Te(E.value)||(le.cancel(),Z=!1,_=!1,void 0!==ae&&(ae.attempts=0),ze())}function Je(){te||le.schedule(Ge,120)}function Qe(){q=void 0,Ge()}function Xe(e){ee=!1;const t=!te;te=!0,Ke(t),re=e.touches?.[0]?.clientY}function Ze(e){const t=e.touches?.[0]?.clientY;void 0!==t&&(void 0!==re&&t!==re&&(W+=1),void 0!==re&&t>re?We():void 0!==re&&t<re&&Re(),re=t)}function _e(){te=!1,re=void 0,Je()}function et(e){ee=!0,Ke(),e.deltaY<0?We():e.deltaY>0&&Re(),Je()}function tt(e){"touch"!==e.pointerType&&(ee=!0,Ke(),se=e.clientY,Je())}function ot(e){"touch"!==e.pointerType&&Z&&void 0!==se&&(e.clientY!==se&&(W+=1),e.clientY<se?We():e.clientY>se&&Re(),se=e.clientY,Je())}function nt(e){"touch"!==e.pointerType&&(se=void 0,Je())}function it(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(ee=!0,Ke(),"ArrowUp"===e.key||"PageUp"===e.key||"Home"===e.key||" "===e.key&&e.shiftKey?We():Re(),Je())}function lt(e="auto"){const t=E.value;if(null===t)return;W+=1,C=void 0,ke();const o=Math.max(0,t.scrollHeight-t.clientHeight);Fe(o,e),t.scrollTo?.({top:o,behavior:e}),t.scrollTop!==o&&(t.scrollTop=o),k=t.scrollTop,ve.clear(),U=!1,He()}function rt(){const e=E.value;return null!==e&&e.clientWidth>0&&e.clientHeight>0}function st(e,t){const o=E.value;if(null===o||void 0===e||!o.contains(e)||o.clientHeight<=0)return!1;W+=1,ke();const n=o.getBoundingClientRect(),i=e.getBoundingClientRect(),l=t.block??"center";let r;r="start"===l?o.scrollTop+i.top-n.top:"end"===l?o.scrollTop+i.bottom-n.bottom:"nearest"===l?i.top>=n.top&&i.bottom<=n.bottom?o.scrollTop:i.top<n.top?o.scrollTop+i.top-n.top:o.scrollTop+i.bottom-n.bottom:p({currentScrollTop:o.scrollTop,scrollHeight:o.scrollHeight,targetHeight:i.height,targetTop:i.top,viewportHeight:o.clientHeight,viewportTop:n.top});const s=Math.max(0,o.scrollHeight-o.clientHeight),a=Math.min(s,Math.max(0,r));C=void 0;const c=t.behavior??"auto";return Fe(a,c),o.scrollTo?.({top:a,behavior:c}),o.scrollTop!==a&&(o.scrollTop=a),k=o.scrollTop,U=!1,He(),!0}function at(e){const t=E.value;if(null===t||void 0===e||!t.contains(e)||t.clientHeight<=0)return null;const o=e.getBoundingClientRect(),n=t.scrollTop+o.top-t.getBoundingClientRect().top+o.height/2,i=t.clientHeight/2;return{older:n<i-1,newer:t.scrollHeight-n<i-1}}return o(T,{registerLayoutMeasurement:Y.register,registerMessageNode:function(e,t){const o=L.get(e);if(o!==t){if(void 0!==o&&(j?.unobserve(o),o.style.removeProperty("--im-thread-placeholder-play-state"),Y.hasTarget(o)||F?.unobserve?.(o),P.delete(o),A.delete(e)),null===t)return L.delete(e),void A.delete(e);L.set(e,t),P.set(t,e),"function"==typeof globalThis.IntersectionObserver&&t.style.setProperty("--im-thread-placeholder-play-state","paused"),j?.observe(t),F?.observe(t),Ee()}},registerDateNode:function(e,t,o){const n=R.get(e);null!==o?(R.set(e,{element:o,label:t}),$===e&&o.style.setProperty("opacity",String(G)),n?.element!==o&&(o.dataset.imThreadDateSeparator=e)):R.delete(e)},registerEntryUnreadNode:e=>{B=e??void 0}}),n(()=>e.contentKey,(e,t)=>{if(e===t)return;$e();const o=E.value;null!==o&&(k=o.scrollTop)},{flush:"sync"}),n(()=>e.messageIds,async(t,o)=>{if(t.length===o.length&&t.every((e,t)=>e===o[t]))return;const n=E.value;if(null===n)return;const l=new Set(o);o.length>0&&t.length>0&&!t.some(e=>l.has(e))&&$e();const r=e.contentKey,s=de.value,a=o[o.length-1],c=void 0===a?-1:t.indexOf(a),d=c<0?[]:t.slice(c+1).filter(e=>!l.has(e)),v=d.some(t=>e.pendingSendMessageIds.includes(t)),f=J||e.loadingNewer||Q||e.loadingOlder,p=t.length===o.length&&t.every(e=>l.has(e))&&t.some((e,t)=>e!==o[t]),h=o[0],g=void 0!==h&&t.indexOf(h)>0;let m;if(void 0!==S&&(g||d.length>0&&f)){Z&&0!==we(n)&&Se();const e=n.getBoundingClientRect(),o=t.includes(S.id)?pe([S.id]):[],i=o[0],r=void 0!==i&&i.bottom>e.top&&i.top<e.bottom?o:pe(t.filter(e=>l.has(e)));m=u(S,r,{top:e.top,bottom:e.bottom}),void 0===m||void 0===ae||t.includes(ae.anchor.id)||(ae.anchor=m,ae.expectedOffset=m.offset)}const b=W;if(await i(),!K&&e.contentKey===r&&W===b)if(v&&e.followNewMessages)lt();else if(p&&s&&e.followNewMessages&&e.resizeFollowEnabled&&!e.hasNewer&&!f)lt();else{if(g&&(Q=!1,Ve(m)),d.length>0){if(f)return J=!1,Ve(m),de.value=!1,void Ee();(s||d.some(t=>!0===e.shouldFollowAppendedMessage?.(t)))&&e.followNewMessages?lt():ve.add(d)}Ee()}},{flush:"pre"}),n(()=>e.loadingNewer,(t,o)=>{!t&&o&&J&&xe(()=>{e.loadingNewer||(J=!1)})},{flush:"pre"}),n(()=>e.loadingOlder,(e,t)=>{e?Q=!0:t&&Q&&(Q=!1)},{flush:"post"}),l(()=>{const t=E.value;if(null!==t){if(k=t.scrollTop,t.addEventListener("scroll",Ce,{passive:!0}),t.addEventListener("scrollend",Qe,{passive:!0}),t.addEventListener("touchstart",Xe,{passive:!0}),t.addEventListener("touchmove",Ze,{passive:!0}),t.addEventListener("touchend",_e,{passive:!0}),t.addEventListener("touchcancel",_e,{passive:!0}),t.addEventListener("wheel",et,{passive:!0}),t.addEventListener("pointerdown",tt,{passive:!0}),t.addEventListener("pointermove",ot,{passive:!0}),t.addEventListener("pointerup",nt,{passive:!0}),t.addEventListener("pointercancel",nt,{passive:!0}),t.addEventListener("keydown",it),"function"==typeof globalThis.ResizeObserver){F=new globalThis.ResizeObserver(e=>{if(K||null===E.value)return;Y.resized(e.map(e=>e.target));e.some(({target:e})=>e===t||e===N.value||P.has(e))&&He()}),F.observe(t),null!==N.value&&F.observe(N.value);for(const e of L.values())F.observe(e);Y.observeTargets()}if(I=t.ownerDocument.fonts,I?.addEventListener("loadingdone",Y.invalidateAll),"function"==typeof globalThis.IntersectionObserver){j=new globalThis.IntersectionObserver(e=>{for(const t of e){const e=P.get(t.target);if(void 0===e)continue;const o=t.target,n=t.isIntersecting?"running":"paused";o.style.getPropertyValue("--im-thread-placeholder-play-state")!==n&&o.style.setProperty("--im-thread-placeholder-play-state",n),t.isIntersecting?A.add(e):A.delete(e)}U=!0,Ee()},{root:t,rootMargin:`${Number.isFinite(e.visibleMargin)?Math.max(0,e.visibleMargin):0}px 0px`});for(const e of L.values())j.observe(e)}Ee()}}),r(()=>{K=!0;const e=E.value;null!==e&&e.removeEventListener("scroll",Ce),null!==e&&(e.removeEventListener("scrollend",Qe),e.removeEventListener("touchstart",Xe),e.removeEventListener("touchmove",Ze),e.removeEventListener("touchend",_e),e.removeEventListener("touchcancel",_e),e.removeEventListener("wheel",et),e.removeEventListener("pointerdown",tt),e.removeEventListener("pointermove",ot),e.removeEventListener("pointerup",nt),e.removeEventListener("pointercancel",nt),e.removeEventListener("keydown",it)),le.cancel(),ke(),void 0!==z&&("number"==typeof z&&"function"==typeof globalThis.cancelAnimationFrame?globalThis.cancelAnimationFrame(z):globalThis.clearTimeout(z),z=void 0,V.clear()),I?.removeEventListener("loadingdone",Y.invalidateAll),Y.dispose(),F?.disconnect(),j?.disconnect(),ge(),B=void 0;for(const e of L.values())e.style.removeProperty("--im-thread-placeholder-play-state");L.clear(),P.clear(),A.clear(),R.clear(),ve.clear()}),H({getViewportElement:()=>E.value,clearNewMessageBadge:function(){ve.clear()},clearActiveDate:ge,isAtBottom:s(()=>de.value),isMeasurable:rt,isScrollable:function(){const e=E.value;return rt()&&null!==e&&e.scrollHeight>e.clientHeight+1},getMessageCenteringNeeds:function(e){return at(L.get(e))},newMessageCount:s(()=>ue.value),prepareHistoryPageAppend:function(){J=!0,de.value=!1},cancelHistoryPageAppend:function(){J=!1,Ee()},trackRemoteMessageIds:(e,t)=>ve.trackRemote(e,t),scrollToLatest:lt,scrollToMessage:function(e,t={}){return st(L.get(e),t)},scrollToEntryUnread:()=>st(B,{block:"center",behavior:"auto"}),getEntryUnreadCenteringNeeds:function(){return at(B)},focusViewport:()=>E.value?.focus({preventScroll:!0})}),()=>a("div",{ref:E,"data-im-thread-viewport":"",role:"log",tabindex:-1},[a("div",{ref:N,"data-im-thread-viewport-content":""},x.default?.())])}});export{O as ImThreadViewport};
1
+ import{defineComponent as e,ref as t,provide as o,watch as n,nextTick as i,onMounted as l,onBeforeUnmount as r,computed as s,h as a}from"vue";import{resolveImThreadActiveDate as c}from"../../thread/active-date.js";import{createNewMessageBadgeController as d}from"../../thread/new-message-badge.js";import{refreshPrependMessageAnchorPosition as u,isMessageVisibleForNewMessageBadge as v,resolvePrependMessageAnchorPosition as f,resolveCenteredMessageScrollTop as p,shouldPrefetchOlderHistory as h,shouldLoadNewerHistoryPage as g,resolvePrependMessageAnchorAdjustment as m}from"../../thread/viewport-rules.js";import{createThreadIdleTask as b}from"./thread-idle-task.js";import{createThreadLayoutMeasurements as y}from"./thread-layout-measurements.js";import{THREAD_VIEWPORT_REGISTRATION_KEY as T}from"./thread-viewport-context.js";const w=.5;function M(e){const t=e.ownerDocument.defaultView?.devicePixelRatio;return 1+1/(void 0!==t&&Number.isFinite(t)&&t>0?t:1)}const O=e({name:"ImThreadViewport",props:{messageIds:{type:Array,required:!0},contentKey:{type:String,default:""},loadingOlder:{type:Boolean,default:!1},hasNewer:{type:Boolean,default:!1},loadingNewer:{type:Boolean,default:!1},followThreshold:{type:Number,default:120},olderPrefetchThreshold:{type:Number,default:120},followNewMessages:{type:Boolean,default:!0},shouldFollowAppendedMessage:{type:Function,default:void 0},pendingSendMessageIds:{type:Array,default:()=>[]},visibleMargin:{type:Number,default:8},resizeFollowEnabled:{type:Boolean,default:!0},activeDateOffset:{type:Number,default:16},activeDateEnabled:{type:Boolean,default:!1}},emits:{"reach-start":()=>!0,"reach-end":()=>!0,"visible-range":e=>!0,settled:e=>!0,"new-message-count":e=>!0,"user-scroll":()=>!0,"active-date-change":e=>!0},setup(e,{emit:O,expose:H,slots:x}){const E=t(null),N=t(null),L=/* @__PURE__ */new Map;let B;const P=/* @__PURE__ */new Map,A=/* @__PURE__ */new Set,R=/* @__PURE__ */new Map;let S,C,F,I,k=0,D=[];const Y=y({requestFrame:xe,observe:e=>F?.observe(e),unobserve:e=>{e===E.value||e===N.value||P.has(e)||F?.unobserve(e)}});let j,z,U=!1;const V=/* @__PURE__ */new Set;let q,K=!1,W=0,$="",G=1,J=!1,Q=!1,X=!0,Z=!1,_=!1,ee=!0,te=!1,oe=0,ne=-1,ie=-1;const le=b();let re,se,ae,ce;const de=t(!0),ue=t(0),ve=d(e=>{ue.value=e,O("new-message-count",e)});function fe(t){const o=Number.isFinite(e.followThreshold)?Math.max(0,e.followThreshold):0;return t.scrollHeight-t.clientHeight-t.scrollTop<=o}function pe(t=e.messageIds){return t.flatMap(e=>{const t=L.get(e);if(void 0===t)return[];const o=t.getBoundingClientRect(),n=t.querySelector("[data-im-thread-anchor-point]");return[{id:e,top:o.top,bottom:o.bottom,anchorTop:n?.getBoundingClientRect().top??o.top}]})}function he(e="",t=1){const o=Math.min(1,Math.max(0,t));""!==$&&$!==e&&R.get($)?.element.style.removeProperty("opacity"),$=e,G=o,""!==e&&R.get(e)?.element.style.setProperty("opacity",String(o))}function ge(){he()}function me(){const t=E.value;if(K||null===t||!e.activeDateEnabled)return;const o=[...R.entries()].filter(([,e])=>t.contains(e.element)).map(([e,t])=>{const o=t.element.getBoundingClientRect();return{key:e,label:t.label,top:o.top,height:o.height}}).sort((e,t)=>e.top-t.top),n=t.getBoundingClientRect(),i=o.find(e=>e.height>0)?.height??28,l=c({markers:o,viewportTop:n.top,overlayTop:Number.isFinite(e.activeDateOffset)?Math.max(0,e.activeDateOffset):0,overlayHeight:i});if(null===l)return ge(),void O("active-date-change",null);he(l.inlineDateKey,l.inlineOpacity),O("active-date-change",l)}function be(e){C={scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,width:e.clientWidth,height:e.clientHeight}}function ye(e){const t=C;if(void 0===t)return!1;const o=Math.max(0,e.scrollHeight-e.clientHeight);return o<t.scrollHeight-t.height&&t.scrollTop>o&&Math.abs(e.scrollTop-o)<=M(e)}function Te(e){return e.scrollTop<0||e.scrollTop>Math.max(0,e.scrollHeight-e.clientHeight)+M(e)}function we(e){return ye(e)||void 0!==q&&("smooth"===q.behavior||Math.abs(e.scrollTop-q.targetTop)<=M(e))?0:e.scrollTop-k}function Me(e,t){0!==t&&(k=e.scrollTop-t,q=void 0,Se(!0))}function Oe(t,o){const n=we(t);if(void 0!==ae)return ae.expectedOffset-=n,Ye(),Me(t,n),Z||Ue(),!1;const i=C;if(void 0===i)return!1;const l=S,r=void 0===l?void 0:pe([l.id])[0],s=t.scrollTop-i.scrollTop,a=ye(t)?0:s,c=void 0===l||void 0===r?0:(r.anchorTop??r.top)-o.top-l.offset+s;return(i.scrollHeight!==t.scrollHeight||i.width!==t.clientWidth||i.height!==t.clientHeight||Math.abs(c)>w)&&(C=void 0,!(J||Q||e.loadingOlder||e.loadingNewer||e.hasNewer||!e.resizeFollowEnabled||Te(t))&&de.value&&Math.abs(a)<=w?(lt(),!0):(void 0!==l&&function(e){const t=E.value;if(null===t||void 0===e)return;if(Te(t))return void Ve(e);const o=t.getBoundingClientRect(),n=m(e,pe([e.id]),{top:o.top,bottom:o.bottom});if(void 0!==n){const e=Math.max(0,t.scrollHeight-t.clientHeight),o=Math.min(e,Math.max(0,t.scrollTop+n));Fe(o),t.scrollTop=o,k=t.scrollTop,C=void 0}}({...l,offset:l.offset-a}),Me(t,n),!1))}function He(){const t=E.value;if(K||null===t)return;const o=t.getBoundingClientRect();if(Oe(t,o))return;const n=pe(void 0!==j&&U?e.messageIds.filter(e=>A.has(e)):e.messageIds);if(void 0!==j&&U&&0===n.length)return void(de.value=fe(t));const i=n.filter(t=>v({viewportTop:o.top,viewportBottom:o.bottom,messageTop:t.top,messageBottom:t.bottom,margin:e.visibleMargin})).map(e=>e.id),l=i.length!==D.length||i.some((e,t)=>D[t]!==e);D=Object.freeze(i),S=f(n,{top:o.top,bottom:o.bottom}),be(t),ve.acknowledgeVisible(i),de.value=fe(t),l&&O("visible-range",D),O("settled",{visibleMessageIds:D,...0===D.length?{}:{newestVisibleMessageId:D[D.length-1]},isAtBottom:de.value,newMessageCount:ue.value})}function xe(e){if(V.add(e),void 0!==z)return;const t=()=>{z=void 0;const e=[...V];V.clear(),e.forEach(e=>e())};z="function"==typeof globalThis.requestAnimationFrame?globalThis.requestAnimationFrame(t):globalThis.setTimeout(t,0)}function Ee(){xe(He)}function Ne(){const e=E.value;if(null===e)return;const t=e.getBoundingClientRect(),o=f(pe(),{top:t.top,bottom:t.bottom});void 0!==o&&(S=o,be(e))}function Le(){return X&&void 0===ae&&!Q&&!e.loadingOlder}function Be(){Ne(),X=!1,ne=oe,Q=!0,de.value=!1,O("reach-start"),xe(()=>{e.loadingOlder||(Q=!1)})}function Pe(t){return e.hasNewer&&!J&&!e.loadingOlder&&!e.loadingNewer&&fe(t)}function Ae(){Ne(),J=!0,de.value=!1,ie=oe,O("reach-end"),xe(()=>{e.loadingNewer||(J=!1)})}function Re(){const e=E.value;null!==e&&oe!==ie&&Pe(e)&&Ae()}function Se(t=!1){const o=E.value;if(K||null===o)return;const n=o.scrollTop,i=Math.max(0,o.scrollHeight-o.clientHeight),l=Math.min(i,Math.max(0,k)),r=Math.min(i,Math.max(0,n)),s=ye(o),a=q;let c=!1;if(void 0!==a){const e=Math.abs(n-a.targetTop)<=M(o);c="smooth"===a.behavior||e,("smooth"!==a.behavior||e)&&(q=void 0)}c||s||Z||!ee||void 0!==ae||n===k||(Z=!0,_=!0,oe+=1);const d=Z&&!c&&!s&&n!==k;d&&(W+=1,O("user-scroll"),xe(me)),Z&&!te&&Je(),!X&&_&&oe!==ne&&n<k&&n>qe()&&We(),void 0===ae||c||(Z?s||t||(ae.expectedOffset-=n-k):(Ye(),Ue())),Le()&&d&&h({previousScrollTop:l,currentScrollTop:r,topThreshold:e.olderPrefetchThreshold})&&Be(),d&&Pe(o)&&g({previousScrollTop:l,currentScrollTop:r,isAtBottom:fe(o),isHistoryWindow:e.hasNewer,isPageSettling:c})&&Ae(),k=n,s?He():Ee()}function Ce(){Se()}function Fe(e,t="auto"){q={targetTop:e,behavior:t}}function Ie(e){const t=ae,o=N.value;if(void 0!==t&&null!==o){if(t.visualOffset=Math.abs(e)<=w?0:e,0===t.visualOffset)return o.style.removeProperty("transform"),void o.style.removeProperty("will-change");o.style.setProperty("transform",`translate3d(0, ${t.visualOffset}px, 0)`),o.style.setProperty("will-change","transform")}}function ke(){void 0!==ce&&(clearTimeout(ce),ce=void 0),void 0!==ae&&0!==ae.visualOffset&&(S=void 0,C=void 0);const e=N.value;e?.style.removeProperty("transform"),e?.style.removeProperty("will-change"),ae=void 0,q=void 0}function De(){const e=E.value,t=ae;if(null===e||void 0===t)return;const o=L.get(t.anchor.id);if(void 0===o)return;return(o.querySelector("[data-im-thread-anchor-point]")??o).getBoundingClientRect().top-e.getBoundingClientRect().top}function Ye(){const e=ae,t=De();if(void 0===e||void 0===t)return;const o=e.expectedOffset-t;if(Math.abs(o)<=w)return;const n=E.value;null!==n&&ye(n)&&(k=n.scrollTop),Ie(e.visualOffset+o),e.committed=!1,e.attempts=0}function je(){void 0!==ce&&clearTimeout(ce),ce=setTimeout(()=>{ce=void 0,Z||!0!==ae?.committed||ke()},500)}function ze(e,t=!1){const o=E.value,n=ae;if(K||null===o||void 0===n||Te(o)||Z&&!t)return;if(t){const e=we(o);n.expectedOffset-=e,Ye(),Me(o,e)}const i=e?.visualOffset??n.visualOffset;if(Math.abs(i)<=w)return n.committed=!0,void je();const l=Math.max(0,o.scrollHeight-o.clientHeight),r=o.scrollTop,s=Math.min(l,Math.max(0,r-i));Fe(s),o.scrollTop=s;const a=o.scrollTop,c=i+a-r,d=M(o),u=(r-i<0||r-i>l)&&Math.abs(a-s)<=d;if(k=a,Math.abs(c)>d&&!u)return Ie(c),Fe(a),n.committed=!1,n.attempts+=1,void(n.attempts<8&&!Z&&Ue());0!==n.visualOffset&&Ie(0),k=a,n.expectedOffset=void 0===e?De()??n.expectedOffset:e.currentOffset-(a-r),S={...n.anchor,offset:n.expectedOffset},be(o),n.committed=!0,n.attempts=0,je()}function Ue(){void 0===ae||ae.attempts>=8||(void 0!==ce&&clearTimeout(ce),ce=setTimeout(()=>{ce=void 0,ze()},120))}function Ve(e){if(void 0===e)return;void 0===ae&&(ae={anchor:e,expectedOffset:e.offset,visualOffset:0,committed:!1,attempts:0});const t=E.value;if(!Z&&null!==t&&!Te(t)&&0===ae.visualOffset){const e=De();if(void 0!==e)return void ze({visualOffset:ae.expectedOffset-e,currentOffset:e})}Ye(),Z||ze()}function qe(){return Number.isFinite(e.olderPrefetchThreshold)?Math.max(0,e.olderPrefetchThreshold):0}function Ke(e=!1){W+=1,"smooth"===q?.behavior&&(q=void 0),_=!1,Z&&!e||(Z=!0,oe+=1),te&&le.cancel()}function We(){const t=E.value;if(null!==t&&oe!==ne&&!Q&&!e.loadingOlder){if(void 0!==ae){if(ze(void 0,!0),!ae.committed)return;ke()}X=!0,Le()&&t.scrollTop<=qe()&&Be()}}function $e(){W+=1,S=void 0,C=void 0,le.cancel(),ke(),Z=!1,_=!1,te=!1,re=void 0,se=void 0,oe+=1,ne=-1,ie=-1,X=!0,Q=!1,J=!1,q=void 0}function Ge(){te||null!==E.value&&Te(E.value)||(le.cancel(),Z=!1,_=!1,void 0!==ae&&(ae.attempts=0),ze())}function Je(){te||le.schedule(Ge,120)}function Qe(){q=void 0,Ge()}function Xe(e){ee=!1;const t=!te;te=!0,Ke(t),re=e.touches?.[0]?.clientY}function Ze(e){const t=e.touches?.[0]?.clientY;void 0!==t&&(void 0!==re&&t!==re&&(W+=1),void 0!==re&&t>re?We():void 0!==re&&t<re&&Re(),re=t)}function _e(){te=!1,re=void 0,Je()}function et(e){ee=!0,Ke(),e.deltaY<0?We():e.deltaY>0&&Re(),Je()}function tt(e){"touch"!==e.pointerType&&(ee=!0,Ke(),se=e.clientY,Je())}function ot(e){"touch"!==e.pointerType&&Z&&void 0!==se&&(e.clientY!==se&&(W+=1),e.clientY<se?We():e.clientY>se&&Re(),se=e.clientY,Je())}function nt(e){"touch"!==e.pointerType&&(se=void 0,Je())}function it(e){["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&(ee=!0,Ke(),"ArrowUp"===e.key||"PageUp"===e.key||"Home"===e.key||" "===e.key&&e.shiftKey?We():Re(),Je())}function lt(e="auto"){const t=E.value;if(null===t)return;W+=1,C=void 0,ke();const o=Math.max(0,t.scrollHeight-t.clientHeight);Fe(o,e),t.scrollTo?.({top:o,behavior:e}),t.scrollTop!==o&&(t.scrollTop=o),k=t.scrollTop,ve.clear(),U=!1,He()}function rt(){const e=E.value;return null!==e&&e.clientWidth>0&&e.clientHeight>0}function st(e,t){const o=E.value;if(null===o||void 0===e||!o.contains(e)||o.clientHeight<=0)return!1;W+=1,ke();const n=o.getBoundingClientRect(),i=e.getBoundingClientRect(),l=t.block??"center";let r;r="start"===l?o.scrollTop+i.top-n.top:"end"===l?o.scrollTop+i.bottom-n.bottom:"nearest"===l?i.top>=n.top&&i.bottom<=n.bottom?o.scrollTop:i.top<n.top?o.scrollTop+i.top-n.top:o.scrollTop+i.bottom-n.bottom:p({currentScrollTop:o.scrollTop,scrollHeight:o.scrollHeight,targetHeight:i.height,targetTop:i.top,viewportHeight:o.clientHeight,viewportTop:n.top});const s=Math.max(0,o.scrollHeight-o.clientHeight),a=Math.min(s,Math.max(0,r));C=void 0;const c=t.behavior??"auto";return Fe(a,c),o.scrollTo?.({top:a,behavior:c}),o.scrollTop!==a&&(o.scrollTop=a),k=o.scrollTop,U=!1,He(),!0}function at(e){const t=E.value;if(null===t||void 0===e||!t.contains(e)||t.clientHeight<=0)return null;const o=e.getBoundingClientRect(),n=t.scrollTop+o.top-t.getBoundingClientRect().top+o.height/2,i=t.clientHeight/2;return{older:n<i-1,newer:t.scrollHeight-n<i-1}}return o(T,{registerLayoutMeasurement:Y.register,registerMessageNode:function(e,t){const o=L.get(e);if(o!==t){if(void 0!==o&&(j?.unobserve(o),o.style.removeProperty("--im-thread-placeholder-play-state"),Y.hasTarget(o)||F?.unobserve?.(o),P.delete(o),A.delete(e)),null===t)return L.delete(e),void A.delete(e);L.set(e,t),P.set(t,e),"function"==typeof globalThis.IntersectionObserver&&t.style.setProperty("--im-thread-placeholder-play-state","paused"),j?.observe(t),F?.observe(t),Ee()}},registerDateNode:function(e,t,o){const n=R.get(e);null!==o?(R.set(e,{element:o,label:t}),$===e&&o.style.setProperty("opacity",String(G)),n?.element!==o&&(o.dataset.imThreadDateSeparator=e)):R.delete(e)},registerEntryUnreadNode:e=>{B=e??void 0}}),n(()=>e.contentKey,(e,t)=>{if(e===t)return;$e();const o=E.value;null!==o&&(k=o.scrollTop)},{flush:"sync"}),n(()=>e.messageIds,async(t,o)=>{if(t.length===o.length&&t.every((e,t)=>e===o[t]))return;const n=E.value;if(null===n)return;const l=new Set(o);o.length>0&&t.length>0&&!t.some(e=>l.has(e))&&$e();const r=e.contentKey,s=de.value,a=o[o.length-1],c=void 0===a?-1:t.indexOf(a),d=c<0?[]:t.slice(c+1).filter(e=>!l.has(e)),v=d.some(t=>e.pendingSendMessageIds.includes(t)),f=J||e.loadingNewer||Q||e.loadingOlder,p=t.length===o.length&&t.every(e=>l.has(e))&&t.some((e,t)=>e!==o[t]),h=o[0],g=void 0!==h&&t.indexOf(h)>0;let m;if(void 0!==S&&(g||d.length>0&&f)){Z&&0!==we(n)&&Se();const e=n.getBoundingClientRect(),o=t.includes(S.id)?pe([S.id]):[],i=o[0],r=void 0!==i&&i.bottom>e.top&&i.top<e.bottom?o:pe(t.filter(e=>l.has(e)));m=u(S,r,{top:e.top,bottom:e.bottom}),void 0===m||void 0===ae||t.includes(ae.anchor.id)||(ae.anchor=m,ae.expectedOffset=m.offset)}const b=W;if(await i(),!K&&e.contentKey===r&&W===b)if(v&&e.followNewMessages)lt();else if(p&&s&&e.followNewMessages&&e.resizeFollowEnabled&&!e.hasNewer&&!f)lt();else{if(g&&(Q=!1,Ve(m)),d.length>0){if(f)return J=!1,Ve(m),de.value=!1,void Ee();(s||d.some(t=>!0===e.shouldFollowAppendedMessage?.(t)))&&e.followNewMessages?lt():ve.add(d)}Ee()}},{flush:"pre"}),n(()=>e.loadingNewer,(t,o)=>{!t&&o&&J&&xe(()=>{e.loadingNewer||(J=!1)})},{flush:"pre"}),n(()=>e.loadingOlder,(e,t)=>{e?Q=!0:t&&Q&&(Q=!1)},{flush:"post"}),l(()=>{const t=E.value;if(null!==t){if(k=t.scrollTop,t.addEventListener("scroll",Ce,{passive:!0}),t.addEventListener("scrollend",Qe,{passive:!0}),t.addEventListener("touchstart",Xe,{passive:!0}),t.addEventListener("touchmove",Ze,{passive:!0}),t.addEventListener("touchend",_e,{passive:!0}),t.addEventListener("touchcancel",_e,{passive:!0}),t.addEventListener("wheel",et,{passive:!0}),t.addEventListener("pointerdown",tt,{passive:!0}),t.addEventListener("pointermove",ot,{passive:!0}),t.addEventListener("pointerup",nt,{passive:!0}),t.addEventListener("pointercancel",nt,{passive:!0}),t.addEventListener("keydown",it),"function"==typeof globalThis.ResizeObserver){F=new globalThis.ResizeObserver(e=>{if(K||null===E.value)return;Y.resized(e.map(e=>e.target));e.some(({target:e})=>e===t||e===N.value||P.has(e))&&He()}),F.observe(t),null!==N.value&&F.observe(N.value);for(const e of L.values())F.observe(e);Y.observeTargets()}if(I=t.ownerDocument.fonts,I?.addEventListener("loadingdone",Y.invalidateAll),"function"==typeof globalThis.IntersectionObserver){j=new globalThis.IntersectionObserver(e=>{for(const t of e){const e=P.get(t.target);if(void 0===e)continue;const o=t.target,n=t.isIntersecting?"running":"paused";o.style.getPropertyValue("--im-thread-placeholder-play-state")!==n&&o.style.setProperty("--im-thread-placeholder-play-state",n),t.isIntersecting?A.add(e):A.delete(e)}U=!0,Ee()},{root:t,rootMargin:`${Number.isFinite(e.visibleMargin)?Math.max(0,e.visibleMargin):0}px 0px`});for(const e of L.values())j.observe(e)}Ee()}}),r(()=>{K=!0;const e=E.value;null!==e&&e.removeEventListener("scroll",Ce),null!==e&&(e.removeEventListener("scrollend",Qe),e.removeEventListener("touchstart",Xe),e.removeEventListener("touchmove",Ze),e.removeEventListener("touchend",_e),e.removeEventListener("touchcancel",_e),e.removeEventListener("wheel",et),e.removeEventListener("pointerdown",tt),e.removeEventListener("pointermove",ot),e.removeEventListener("pointerup",nt),e.removeEventListener("pointercancel",nt),e.removeEventListener("keydown",it)),le.cancel(),ke(),void 0!==z&&("number"==typeof z&&"function"==typeof globalThis.cancelAnimationFrame?globalThis.cancelAnimationFrame(z):globalThis.clearTimeout(z),z=void 0,V.clear()),I?.removeEventListener("loadingdone",Y.invalidateAll),Y.dispose(),F?.disconnect(),j?.disconnect(),ge(),B=void 0;for(const e of L.values())e.style.removeProperty("--im-thread-placeholder-play-state");L.clear(),P.clear(),A.clear(),R.clear(),ve.clear()}),H({getViewportElement:()=>E.value,clearNewMessageBadge:function(){ve.clear()},clearActiveDate:ge,isAtBottom:s(()=>de.value),isMeasurable:rt,isScrollable:function(){const e=E.value;return rt()&&null!==e&&e.scrollHeight>e.clientHeight+1},getMessageCenteringNeeds:function(e){return at(L.get(e))},newMessageCount:s(()=>ue.value),prepareHistoryPageAppend:function(){J=!0,de.value=!1},cancelHistoryPageAppend:function(){J=!1,Ee()},trackRemoteMessageIds:(e,t)=>ve.trackRemote(e,t),scrollToLatest:lt,scrollToMessage:function(e,t={}){return st(L.get(e),t)},scrollToEntryUnread:()=>st(B,{block:"center",behavior:"auto"}),getEntryUnreadCenteringNeeds:function(){return at(B)},focusViewport:()=>E.value?.focus({preventScroll:!0})}),()=>a("div",{ref:E,"data-im-thread-viewport":"",role:"log",tabindex:-1},[a("div",{ref:N,"data-im-thread-viewport-content":""},x.default?.())])}});export{O as ImThreadViewport};
package/dist/sdk.d.ts CHANGED
@@ -1597,6 +1597,7 @@ interface ImDirectoryItem<TKind extends ImDirectoryKind = ImDirectoryKind> {
1597
1597
  displayName: string;
1598
1598
  cardDisplayName: string;
1599
1599
  avatarUrl?: string;
1600
+ /** 面向用户展示的账号;HTTP 目录优先映射 mid(金刚号),与内部 id 分开。 */
1600
1601
  username?: string;
1601
1602
  }
1602
1603
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "k2-im",
3
3
  "type": "module",
4
- "version": "0.2.7",
4
+ "version": "0.2.9",
5
5
  "private": false,
6
6
  "license": "MIT",
7
7
  "publishConfig": {