vue-virtual-flow 0.0.6 → 0.0.8

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/README.md CHANGED
@@ -560,8 +560,21 @@ async function loadOlder() {
560
560
  </template>
561
561
  ```
562
562
 
563
- Prepend older data to the same keyed collection. The component calculates the
564
- height added above the viewport and restores the reader's position.
563
+ Prepend older data to the same keyed collection. The scroll container is anchored
564
+ at the bottom, so adding or measuring older messages above the reader does not
565
+ need a native scroll correction. Previously unseen messages are measured before
566
+ paint, and cached height updates use an incremental size index.
567
+
568
+ Use the exposed methods and the `scroll` event for positions measured from the
569
+ top. The internal DOM scroller uses negative `scrollTop` values (zero at the
570
+ bottom); code that directly reads or writes that DOM property must account for
571
+ this. Message DOM order remains oldest to newest.
572
+
573
+ For smooth media conversations, reserve image/video dimensions with `width`,
574
+ `height`, or `aspect-ratio`, use an estimate close to your message heights, and
575
+ avoid a `size` budget that removes most overscan. Set `loadOlderThreshold` high
576
+ enough to fetch the next page before the user reaches the oldest loaded message;
577
+ virtualization cannot hide network latency once that boundary is reached.
565
578
 
566
579
  #### Props
567
580
 
package/README.vi.md CHANGED
@@ -560,8 +560,21 @@ async function loadOlder() {
560
560
  </template>
561
561
  ```
562
562
 
563
- Hãy thêm dữ liệu cũ vào đầu cùng một collection có key ổn định. Component tính
564
- chiều cao được thêm phía trên viewport và khôi phục vị trí của người đọc.
563
+ Hãy thêm dữ liệu cũ vào đầu cùng một collection có key ổn định. Vùng cuộn lấy
564
+ đáy làm mốc nên việc thêm hoặc đo tin nhắn phía trên người đọc không cần sửa vị
565
+ trí cuộn native. Tin nhắn xuất hiện lần đầu được đo trước khi vẽ; các thay đổi chiều cao
566
+ được cập nhật riêng trong bảng chỉ mục.
567
+
568
+ Dùng các method qua ref và sự kiện `scroll` để thao tác với vị trí tính từ đầu
569
+ danh sách. Phần tử cuộn DOM bên trong dùng `scrollTop` âm (bằng 0 ở đáy); code
570
+ đọc hoặc ghi trực tiếp thuộc tính DOM này cần tính đến khác biệt đó. Thứ tự DOM
571
+ của tin nhắn vẫn từ cũ đến mới.
572
+
573
+ Để chat có ảnh/video cuộn mượt, hãy dành sẵn kích thước bằng `width`, `height`
574
+ hoặc `aspect-ratio`, đặt chiều cao ước lượng gần thực tế và tránh giới hạn `size`
575
+ quá thấp khiến mất phần lớn overscan. Đặt `loadOlderThreshold` đủ lớn để tải trang
576
+ kế tiếp trước khi người dùng chạm tin cũ nhất đã có; virtualization không thể che
577
+ độ trễ mạng sau khi đã chạm mốc này.
565
578
 
566
579
  #### Props
567
580
 
@@ -0,0 +1,15 @@
1
+ export interface SizeIndex {
2
+ readonly length: number;
3
+ readonly total: number;
4
+ getSize(index: number): number;
5
+ getOffset(index: number): number;
6
+ setSize(index: number, size: number): void;
7
+ findIndex(offset: number): number;
8
+ }
9
+ /**
10
+ * Indexes row sizes with O(n) construction and O(log n) prefix queries,
11
+ * updates, and offset lookups. The row count is fixed; rebuild when it changes.
12
+ * Callers provide finite, positive sizes and valid integer indices, with
13
+ * getOffset accepting length to query the end of the list.
14
+ */
15
+ export declare function createSizeIndex(initialSizes: readonly number[]): SizeIndex;
@@ -0,0 +1,15 @@
1
+ export interface SizeIndex {
2
+ readonly length: number;
3
+ readonly total: number;
4
+ getSize(index: number): number;
5
+ getOffset(index: number): number;
6
+ setSize(index: number, size: number): void;
7
+ findIndex(offset: number): number;
8
+ }
9
+ /**
10
+ * Indexes row sizes with O(n) construction and O(log n) prefix queries,
11
+ * updates, and offset lookups. The row count is fixed; rebuild when it changes.
12
+ * Callers provide finite, positive sizes and valid integer indices, with
13
+ * getOffset accepting length to query the end of the list.
14
+ */
15
+ export declare function createSizeIndex(initialSizes: readonly number[]): SizeIndex;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");function $e(o){return typeof o=="string"||typeof o=="number"||typeof o=="symbol"}function xe(o,D){const $=o[D];return $e($)?$:void 0}function Ve(o){return xe(o,"id")??xe(o,"key")}function me(o){function D(t,w){const f=o.itemKey();if(typeof f=="function")return f(t,w);if(t!==null&&typeof t=="object"){if(f!==void 0){const i=xe(t,f);if(i!==void 0)return i}const k=Ve(t);if(k!==void 0)return k}return w}function $(){}return e.watch(()=>[o.itemKey(),o.items()],$,{immediate:!0}),{getItemKey:D}}function pe(o){return o==="fill"?"100%":typeof o=="number"?`${o}px`:o}function ge(o){return(D,$)=>{typeof $=="string"&&($==="fill"||$.trim().endsWith("%"))}}const Le=["aria-label"],Ce={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},He=["aria-posinset","aria-setsize"],Me=e.defineComponent({name:"ChatVirtualScroll",__name:"ChatVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:5},size:{default:void 0},itemKey:{default:void 0},ariaLabel:{default:"Chat messages"},stickToBottom:{type:Boolean,default:!0},bottomThreshold:{default:80},initialScroll:{default:"bottom"},hasOlder:{type:Boolean,default:!1},loadingOlder:{type:Boolean,default:!1},loadOlderThreshold:{default:120}},emits:["scroll","loadOlder","bottomChange"],setup(o,{expose:D,emit:$}){const t=o,w=$,f=e.ref(),k=e.ref(0),i=e.ref(0),V=e.ref(0),N=e.ref(!0),R=new Map,K=new Map;let F,M,I=-1,z=!1;const B=ge(),{getItemKey:C}=me({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),H=e.computed(()=>Math.max(1,t.estimatedItemSize)),P=e.computed(()=>Math.max(0,Math.floor(t.overscan))),j=e.computed(()=>t.size!==void 0&&Number.isFinite(t.size)&&t.size>0?Math.max(1,Math.floor(t.size)):void 0),Z=e.computed(()=>i.value>0?i.value:typeof t.height=="number"?Math.max(0,t.height):H.value),x=e.computed(()=>{V.value;const r=new Array(t.items.length+1),c=new Array(t.items.length);r[0]=0;for(let s=0;s<t.items.length;s+=1){const y=C(t.items[s],s),h=R.get(y)??H.value;c[s]=h,r[s+1]=r[s]+h}return{offsets:r,sizes:c,total:r[t.items.length]??0}}),Y=e.computed(()=>{const r=new Map;return t.items.forEach((c,s)=>{r.set(C(c,s),s)}),r});function L(r){if(t.items.length===0)return 0;const c=x.value.offsets;let s=0,y=t.items.length;for(;s<y;){const h=Math.floor((s+y)/2);c[h+1]<=r?s=h+1:y=h}return Math.min(s,t.items.length-1)}const U=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const r=L(k.value),c=L(k.value+Z.value)+1,s=Math.max(0,r-P.value),y=Math.min(t.items.length,c+P.value),h=j.value;if(h===void 0||y-s<=h)return{start:s,end:y};const a=Math.max(0,h-(c-r)),l=r-s,n=y-c;let u=Math.min(l,Math.ceil(a/2));const v=Math.min(n,a-u);return u=Math.min(l,a-v),{start:r-u,end:c+v}}),G=e.computed(()=>U.value.start),X=e.computed(()=>U.value.end),q=e.computed(()=>t.items.slice(G.value,X.value).map((r,c)=>{const s=G.value+c;return{item:r,index:s,key:C(r,s),top:x.value.offsets[s]}})),p=e.computed(()=>({height:pe(t.height)}));function m(){const r=f.value;if(!r)return;const s=Math.max(0,x.value.total-r.scrollTop-r.clientHeight)<=Math.max(0,t.bottomThreshold);s!==N.value&&(N.value=s,z&&w("bottomChange",s))}function O(){var r;i.value=((r=f.value)==null?void 0:r.clientHeight)??0,B(f.value,t.height),e.nextTick(()=>{m(),W()})}function ee(r){k.value=r.currentTarget.scrollTop,m(),w("scroll",{scrollTop:k.value,startIndex:G.value,endIndex:X.value}),W()}function W(){const r=f.value;!z||!r||!t.hasOlder||t.loadingOlder||I===t.items.length||r.scrollTop<=Math.max(0,t.loadOlderThreshold)&&(I=t.items.length,w("loadOlder"))}function re(r){const c=r.borderBoxSize;if(c){const s=Array.isArray(c)?c[0]:c;if(s!=null&&s.blockSize)return s.blockSize}return r.contentRect.height}function J(r){const c=x.value,s=N.value&&t.stickToBottom;let y=0,h=!1;for(const a of r){const l=a.target,n=K.get(l),u=re(a);if(n===void 0||u<=0)continue;const v=R.get(n)??H.value;if(Math.abs(v-u)<.5)continue;const le=Y.value.get(n);le!==void 0&&c.offsets[le+1]<=k.value&&(y+=u-v),R.set(n,u),h=!0}h&&(V.value+=1,e.nextTick(()=>{const a=f.value;a&&(s?S("auto"):y!==0&&(a.scrollTop+=y,k.value=a.scrollTop,m()))}))}function Q(r,c){r instanceof HTMLElement&&(K.set(r,c),M==null||M.observe(r))}function te(){for(const[r]of K)r.isConnected||(M==null||M.unobserve(r),K.delete(r))}function ne(r,c={}){const s=f.value;if(!s)return;const y=Math.max(0,x.value.total-s.clientHeight),h=Math.min(Math.max(0,Number.isFinite(r)?r:0),y),a=c.behavior??"auto";a==="auto"&&(k.value=h),s.scrollTo({...c,top:h,behavior:a}),e.nextTick(m)}function g(r,c={}){const s=f.value;if(!s||t.items.length===0)return;const y=Math.min(t.items.length-1,Math.max(0,Math.floor(r))),{align:h="start",...a}=c,l=x.value.sizes[y];let n=x.value.offsets[y];h==="center"?n-=(s.clientHeight-l)/2:h==="end"&&(n-=s.clientHeight-l);const u=Math.max(0,Math.min(n,x.value.total-s.clientHeight)),v=a.behavior??"auto";v==="auto"&&(k.value=u),s.scrollTo({...a,top:u,behavior:v}),e.nextTick(m)}function E(r="auto"){const c=f.value;c&&(r==="auto"&&(k.value=0),c.scrollTo({top:0,behavior:r}),e.nextTick(m))}function S(r="auto"){const c=f.value;if(!c)return;const s=Math.max(0,x.value.total-c.clientHeight);r==="auto"?(c.scrollTop=s,k.value=s):c.scrollTo({top:s,behavior:r}),e.nextTick(m)}let A=t.items.map((r,c)=>C(r,c));return e.watch(()=>t.items.map((r,c)=>C(r,c)),async r=>{const c=A;A=r;const s=f.value,y=(s==null?void 0:s.scrollTop)??0,h=N.value&&t.stickToBottom,a=c[0],l=a===void 0?0:r.indexOf(a),n=l>0?r.slice(0,l).reduce((v,le)=>v+(R.get(le)??H.value),0):0,u=new Set(r);for(const v of R.keys())u.has(v)||R.delete(v);V.value+=1,await e.nextTick(),s&&(n>0?(s.scrollTop=y+n,k.value=s.scrollTop):r.length>c.length&&h&&S("auto"),m(),W())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([r])=>{r||(I=-1),await e.nextTick(),W()}),e.onMounted(()=>{if(O(),typeof ResizeObserver<"u"){F=new ResizeObserver(O),M=new ResizeObserver(J),f.value&&F.observe(f.value);for(const[r]of K)M.observe(r)}e.nextTick(()=>{t.initialScroll==="bottom"&&S("auto"),z=!0,m(),W()})}),e.onUpdated(te),e.onBeforeUnmount(()=>{F&&(F.disconnect(),F=void 0),M&&(M.disconnect(),M=void 0),K.clear()}),D({isAtBottom:N,scrollTo:ne,scrollToIndex:g,scrollToTop:E,scrollToBottom:S}),(r,c)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:f,class:"vue-chat-virtual-scroll",style:e.normalizeStyle(p.value),role:"log","aria-label":o.ariaLabel,"aria-live":"polite",tabindex:"0",onScrollPassive:ee},[o.loadingOlder?(e.openBlock(),e.createElementBlock("div",Ce,[e.createElementVNode("div",null,[e.renderSlot(r.$slots,"loadingOlder",{},()=>[c[0]||(c[0]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),o.items.length?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${x.value.total}px`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(q.value,({item:s,index:y,key:h,top:a})=>(e.openBlock(),e.createElementBlock("div",{key:h,ref_for:!0,ref:l=>Q(l,h),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${a}px)`}),role:"article","aria-posinset":y+1,"aria-setsize":o.items.length},[e.renderSlot(r.$slots,"default",{item:s,index:y})],12,He))),128))],4)):e.renderSlot(r.$slots,"empty",{},void 0,void 0,2)],44,Le))}});function ye(o){const D=e.ref(),$=e.ref(0),t=e.ref(!1),w=e.ref(!1),f=e.computed(()=>Math.max(1,o.threshold())),k=e.computed(()=>o.refreshing()||w.value?f.value:$.value),i=e.computed(()=>Math.min(1,$.value/f.value)),V=e.computed(()=>o.refreshing()||w.value?"Refreshing…":i.value>=1?"Release to refresh":"Pull to refresh");function N(){D.value=void 0,t.value=!1,$.value=0}function R(M){var B;const I=M.currentTarget,z=((B=o.scrollTop)==null?void 0:B.call(o))??I.scrollTop;!o.enabled()||o.refreshing()||z>0||M.touches.length!==1||(D.value=M.touches[0].clientY,t.value=!0)}function K(M){var C;if(D.value===void 0||!t.value)return;const I=M.currentTarget;if((((C=o.scrollTop)==null?void 0:C.call(o))??I.scrollTop)>0||M.touches.length!==1){N();return}const B=M.touches[0].clientY-D.value;if(B<=0){$.value=0;return}M.preventDefault(),$.value=Math.min(B*.5,f.value*2)}function F(){if(D.value===void 0)return;const M=$.value>=f.value&&o.enabled()&&!o.refreshing();if(D.value=void 0,t.value=!1,!M){$.value=0;return}$.value=f.value,w.value=!0,o.onRefresh(),e.nextTick(()=>{o.refreshing()||(w.value=!1,$.value=0)})}return e.watch(()=>o.refreshing(),(M,I)=>{M?(w.value=!1,$.value=f.value):I&&(w.value=!1,$.value=0)}),{pulling:t,pullDistance:$,pullOffset:k,pullProgress:i,refreshMessage:V,refreshThreshold:f,handleTouchStart:R,handleTouchMove:K,handleTouchEnd:F,handleTouchCancel:N}}const Re=["aria-label"],Oe=["aria-posinset","aria-setsize"],we=e.defineComponent({name:"DynamicVirtualScroll",__name:"DynamicVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Dynamic virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:D,emit:$}){const t=o,w=$,{pulling:f,pullDistance:k,pullOffset:i,pullProgress:V,refreshMessage:N,refreshThreshold:R,handleTouchStart:K,handleTouchMove:F,handleTouchEnd:M,handleTouchCancel:I}=ye({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>w("refresh")}),z=e.ref(),B=e.ref(0),C=e.ref(0),H=e.ref(0),P=new Map,j=new Map;let Z,x,Y=-1;const L=ge(),{getItemKey:U}=me({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),G=e.computed(()=>Math.max(1,t.estimatedItemSize)),X=e.computed(()=>Math.max(1,t.loadingItemSize??G.value)),q=e.computed(()=>Math.max(0,Math.floor(t.overscan))),p=e.computed(()=>C.value>0?C.value:typeof t.height=="number"?Math.max(0,t.height):G.value),m=e.computed(()=>{H.value;const a=new Array(t.items.length+1),l=new Array(t.items.length);a[0]=0;for(let n=0;n<t.items.length;n+=1){const u=U(t.items[n],n),v=P.get(u)??G.value;l[n]=v,a[n+1]=a[n]+v}return{offsets:a,sizes:l,total:a[t.items.length]??0}}),O=e.computed(()=>m.value.total+(t.loading?X.value:0)),ee=e.computed(()=>{const a=new Map;return t.items.forEach((l,n)=>{a.set(U(l,n),n)}),a});function W(a){if(t.items.length===0)return 0;const l=m.value.offsets;let n=0,u=t.items.length;for(;n<u;){const v=Math.floor((n+u)/2);l[v+1]<=a?n=v+1:u=v}return Math.min(n,t.items.length-1)}const re=e.computed(()=>Math.max(0,W(B.value)-q.value)),J=e.computed(()=>{if(t.items.length===0)return 0;const a=W(B.value+p.value)+1;return Math.min(t.items.length,a+q.value)}),Q=e.computed(()=>t.items.slice(re.value,J.value).map((a,l)=>{const n=re.value+l;return{item:a,index:n,key:U(a,n),top:m.value.offsets[n]}})),te=e.computed(()=>({height:pe(t.height)}));function ne(){var a;C.value=((a=z.value)==null?void 0:a.clientHeight)??0,L(z.value,t.height),e.nextTick(E)}function g(a){B.value=a.currentTarget.scrollTop,w("scroll",{scrollTop:B.value,startIndex:re.value,endIndex:J.value}),E()}function E(){const a=z.value;if(!a||!t.hasMore||t.loading||Y===t.items.length)return;const l=Math.max(0,t.loadMoreThreshold);O.value-a.scrollTop-a.clientHeight<=l&&(Y=t.items.length,w("loadMore"))}function S(a){const l=a.borderBoxSize;if(l){const n=Array.isArray(l)?l[0]:l;if(n!=null&&n.blockSize)return n.blockSize}return a.contentRect.height}function A(a){const l=m.value;let n=0,u=!1;for(const v of a){const le=v.target,ae=j.get(le),ie=S(v);if(ae===void 0||ie<=0)continue;const ce=P.get(ae)??G.value;if(Math.abs(ce-ie)<.5)continue;const de=ee.value.get(ae);de!==void 0&&l.offsets[de+1]<=B.value&&(n+=ie-ce),P.set(ae,ie),u=!0}u&&(H.value+=1,e.nextTick(E),n!==0&&e.nextTick(()=>{const v=z.value;v&&(v.scrollTop+=n,B.value=v.scrollTop)}))}function r(a,l){a instanceof HTMLElement&&(j.set(a,l),x==null||x.observe(a))}function c(){for(const[a]of j)a.isConnected||(x==null||x.unobserve(a),j.delete(a))}function s(a,l={}){const n=z.value;if(!n)return;const u=Math.max(0,O.value-n.clientHeight),v=Math.min(Math.max(0,Number.isFinite(a)?a:0),u),le=l.behavior??"auto";le==="auto"&&(B.value=v),n.scrollTo({...l,top:v,behavior:le})}function y(a,l={}){const n=z.value;if(!n||t.items.length===0)return;const u=Math.min(t.items.length-1,Math.max(0,Math.floor(a))),{align:v="start",...le}=l;let ae=m.value.offsets[u];const ie=m.value.sizes[u];v==="center"?ae-=(n.clientHeight-ie)/2:v==="end"&&(ae-=n.clientHeight-ie);const ce=Math.max(0,Math.min(ae,O.value-n.clientHeight)),de=le.behavior??"auto";de==="auto"&&(B.value=ce),n.scrollTo({...le,top:ce,behavior:de})}function h(a="auto"){var l;(l=z.value)==null||l.scrollTo({top:0,behavior:a})}return e.watch(()=>t.itemKey,()=>{P.clear(),H.value+=1}),e.watch(()=>t.items.length,async()=>{const a=new Set(t.items.map((u,v)=>U(u,v)));for(const u of P.keys())a.has(u)||P.delete(u);H.value+=1,await e.nextTick();const l=z.value;if(!l)return;const n=Math.max(0,O.value-l.clientHeight);l.scrollTop>n&&(l.scrollTop=n,B.value=n),E()}),e.watch(()=>[t.hasMore,t.loading],async([a])=>{a||(Y=-1),await e.nextTick(),E()}),e.onMounted(()=>{if(ne(),typeof ResizeObserver<"u"){Z=new ResizeObserver(ne),x=new ResizeObserver(A),z.value&&Z.observe(z.value);for(const[a]of j)x.observe(a)}e.nextTick(E)}),e.onUpdated(c),e.onBeforeUnmount(()=>{Z&&(Z.disconnect(),Z=void 0),x&&(x.disconnect(),x=void 0),j.clear()}),D({scrollTo:s,scrollToIndex:y,scrollToTop:h}),(a,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:z,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(f)}]),style:e.normalizeStyle(te.value),role:"list","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:g,onTouchstartPassive:l[0]||(l[0]=(...n)=>e.unref(K)&&e.unref(K)(...n)),onTouchmove:l[1]||(l[1]=(...n)=>e.unref(F)&&e.unref(F)(...n)),onTouchend:l[2]||(l[2]=(...n)=>e.unref(M)&&e.unref(M)(...n)),onTouchcancel:l[3]||(l[3]=(...n)=>e.unref(I)&&e.unref(I)(...n))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(R)}px`,transform:`translateY(${e.unref(i)-e.unref(R)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(a.$slots,"refresh",{pullDistance:e.unref(k),progress:e.unref(V),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(N)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${O.value}px`,transform:`translateY(${e.unref(i)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Q.value,({item:n,index:u,key:v,top:le})=>(e.openBlock(),e.createElementBlock("div",{key:v,ref_for:!0,ref:ae=>r(ae,v),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${le}px)`}),role:"listitem","aria-posinset":u+1,"aria-setsize":o.items.length},[e.renderSlot(a.$slots,"default",{item:n,index:u})],12,Oe))),128)),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${X.value}px`,transform:`translateY(${m.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(a.$slots,"loading",{},()=>[l[4]||(l[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(i)}px)`})},[e.renderSlot(a.$slots,"empty")],4))],46,Re))}}),Ne=["aria-label"],Ke=["aria-current","aria-posinset","aria-setsize"],De={key:1,class:"vue-short-media-feed__empty"},Te=e.defineComponent({name:"ShortMediaFeed",__name:"ShortMediaFeed",props:{items:{},activeIndex:{default:0},buffer:{default:1},height:{default:"100dvh"},itemKey:{default:void 0},ariaLabel:{default:"Short media feed"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(o,{expose:D,emit:$}){const t=o,w=$,f=e.ref(),k=e.ref(0),i=e.ref(Z(t.activeIndex));let V,N=-1;const R=ge(),{getItemKey:K}=me({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),F=e.computed(()=>Math.max(0,Math.floor(t.buffer))),M=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),I=e.computed(()=>k.value>0?k.value:typeof t.height=="number"?Math.max(1,t.height):0),z=e.computed(()=>Math.max(0,i.value-F.value)),B=e.computed(()=>Math.min(t.items.length,i.value+F.value+1)),C=e.computed(()=>t.items.slice(z.value,B.value).map((p,m)=>({item:p,index:z.value+m}))),H=e.computed(()=>z.value*I.value),P=e.computed(()=>(t.items.length-B.value)*I.value),j=e.computed(()=>({height:pe(t.height)}));function Z(p){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(p)?p:0)))}function x(){if(!t.hasMore||t.loading||N===t.items.length)return;(t.items.length===0?0:t.items.length-1-i.value)<=M.value&&(N=t.items.length,w("loadMore"))}function Y(p){const m=Z(p);m===i.value||t.items.length===0||(i.value=m,w("update:activeIndex",m),w("change",{index:m,item:t.items[m]}),m===0&&w("reachStart"),m===t.items.length-1&&w("reachEnd"),x())}function L(p,m={}){const O=f.value;O&&(typeof O.scrollTo=="function"?O.scrollTo({...m,top:p}):O.scrollTop=p)}function U(p,m={}){if(t.items.length===0)return;const O=Z(p);Y(O),L(O*I.value,m)}function G(p){if(I.value<=0)return;const m=p.currentTarget.scrollTop;Y(Math.round(m/I.value))}function X(p){let m;p.key==="ArrowDown"||p.key==="PageDown"?m=i.value+1:p.key==="ArrowUp"||p.key==="PageUp"?m=i.value-1:p.key==="Home"?m=0:p.key==="End"&&(m=t.items.length-1),m!==void 0&&(p.preventDefault(),U(m,{behavior:"smooth"}))}function q(){var m;const p=((m=f.value)==null?void 0:m.clientHeight)??0;R(f.value,t.height),!(p<=0||p===k.value)&&(k.value=p,e.nextTick(()=>{L(i.value*p)}))}return e.watch(()=>t.activeIndex,async p=>{const m=Z(p);m!==i.value&&(i.value=m,await e.nextTick(),L(m*I.value),x())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([p])=>{p||(N=-1),await e.nextTick(),x()}),e.watch(()=>t.items.length,async()=>{const p=Z(i.value);t.items.length===0?i.value!==0&&(i.value=0,w("update:activeIndex",0)):Y(p),await e.nextTick(),L(p*I.value),x()}),e.onMounted(async()=>{q(),typeof ResizeObserver<"u"&&f.value&&(V=new ResizeObserver(q),V.observe(f.value)),await e.nextTick(),L(i.value*I.value),x()}),e.onBeforeUnmount(()=>{V&&(V.disconnect(),V=void 0)}),D({scrollToIndex:U}),(p,m)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:f,class:"vue-short-media-feed",style:e.normalizeStyle(j.value),role:"list","aria-orientation":"vertical","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:G,onKeydown:X},[o.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[H.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${H.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,({item:O,index:ee})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(K)(O,ee),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${I.value}px`}),role:"listitem","aria-current":ee===i.value?"true":void 0,"aria-posinset":ee+1,"aria-setsize":o.items.length},[e.renderSlot(p.$slots,"default",{item:O,index:ee,active:ee===i.value})],12,Ke))),128)),P.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${P.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",De,[e.renderSlot(p.$slots,"empty")]))],44,Ne))}}),Pe=["aria-label"],Ae=e.defineComponent({__name:"SkeletonLoader",props:{width:{default:"100%"},height:{default:16},variant:{default:"rounded"},animated:{type:Boolean,default:!0},ariaLabel:{default:"Loading…"}},setup(o){const D=o;function $(w){return typeof w=="number"?`${Math.max(0,w)}px`:w}const t=e.computed(()=>({width:$(D.width),height:$(D.height)}));return(w,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vue-skeleton-loader",[`vue-skeleton-loader--${o.variant}`,{"vue-skeleton-loader--animated":o.animated}]]),style:e.normalizeStyle(t.value),role:"status","aria-label":o.ariaLabel},null,14,Pe))}}),Fe=(o,D)=>{const $=o.__vccOpts||o;for(const[t,w]of D)$[t]=w;return $},ke=Fe(Ae,[["__scopeId","data-v-fc92f61f"]]),We=["aria-label"],Ye={key:0,class:"vue-virtual-carousel__track",role:"list"},Ue=["aria-label","aria-current"],_e={key:1,class:"vue-virtual-carousel__empty"},Se=e.defineComponent({name:"VirtualCarousel",__name:"VirtualCarousel",props:{items:{},activeIndex:{default:0},slidesPerView:{default:1},slidesToScroll:{default:1},gap:{default:0},buffer:{default:1},height:{default:"auto"},itemKey:{default:void 0},ariaLabel:{default:"Carousel"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2},autoplay:{type:Boolean,default:!1},autoplayDelay:{default:3e3},autoplayLoop:{type:Boolean,default:!0},pauseOnHover:{type:Boolean,default:!0},responsive:{default:void 0}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(o,{expose:D,emit:$}){const t=o,w=$,f=e.ref(),k=e.ref(0),i=e.ref(0);let V,N=-1,R,K,F=!1;const M=e.ref(!1),{getItemKey:I}=me({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),z=e.computed(()=>Math.max(0,k.value)),B=e.computed(()=>{if(!t.responsive||t.responsive.length===0)return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap};const l=z.value,n=[...t.responsive].sort((u,v)=>v.breakpoint-u.breakpoint);for(const u of n)if(l>=u.breakpoint)return{slidesPerView:u.slidesPerView??t.slidesPerView,slidesToScroll:u.slidesToScroll??t.slidesToScroll,gap:u.gap??t.gap};return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap}}),C=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(B.value.slidesPerView)?B.value.slidesPerView:1))),H=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(B.value.slidesToScroll)?B.value.slidesToScroll:1))),P=e.computed(()=>Math.max(0,Number.isFinite(B.value.gap)?B.value.gap:0)),j=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.buffer)?t.buffer:0))),Z=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),x=e.computed(()=>Number.isFinite(t.autoplayDelay)?Math.max(1,t.autoplayDelay):3e3),Y=e.computed(()=>{if(z.value<=0)return 0;const l=(C.value-1)*P.value;return Math.max(1,(z.value-l)/C.value)}),L=e.computed(()=>Y.value+P.value),U=e.computed(()=>Math.max(0,t.items.length-C.value)),G=e.computed(()=>Math.max(0,i.value-j.value)),X=e.computed(()=>Math.min(t.items.length,i.value+C.value+j.value)),q=e.computed(()=>t.items.slice(G.value,X.value).map((l,n)=>({item:l,index:G.value+n}))),p=e.computed(()=>t.items.length===0?0:t.items.length*Y.value+(t.items.length-1)*P.value),m=e.computed(()=>G.value*L.value),O=e.computed(()=>Math.max(0,p.value-X.value*L.value)),ee=e.computed(()=>({height:pe(t.height)}));function W(l){return Math.min(U.value,Math.max(0,Math.floor(Number.isFinite(l)?l:0)))}i.value=W(t.activeIndex);function re(l){return l>=i.value&&l<Math.min(t.items.length,i.value+C.value)}function J(){if(!t.hasMore||t.loading||N===t.items.length)return;const l=t.items.length===0?-1:Math.min(t.items.length-1,i.value+C.value-1);t.items.length-1-l<=Z.value&&(N=t.items.length,w("loadMore"))}function Q(l){const n=W(l);n===i.value||t.items.length===0||(i.value=n,w("update:activeIndex",n),w("change",{index:n,item:t.items[n]}),n===0&&w("reachStart"),n===U.value&&w("reachEnd"),J(),t.autoplay&&!M.value&&S())}function te(l,n={}){const u=f.value;u&&(typeof u.scrollTo=="function"?u.scrollTo({...n,left:l}):u.scrollLeft=l)}function ne(l,n={}){if(t.items.length===0||L.value<=0)return;const u=W(l);K=n.behavior==="smooth"?u:void 0,Q(u),te(u*L.value,{...n,behavior:n.behavior})}function g(l="smooth"){ne(i.value+H.value,{behavior:l})}function E(l="smooth"){ne(i.value-H.value,{behavior:l})}function S(){A(),!(!t.autoplay||t.items.length===0)&&(R=setTimeout(()=>{i.value>=U.value?t.autoplayLoop?ne(0,{behavior:"smooth"}):A():g("smooth")},x.value))}function A(){R!==void 0&&(clearTimeout(R),R=void 0)}function r(){M.value=!0,t.pauseOnHover&&A()}function c(){M.value=!1,t.autoplay&&S()}function s(){K=void 0}function y(l){if(L.value<=0||F)return;const n=l.currentTarget.scrollLeft;if(K!==void 0){const u=K*L.value;if(Math.abs(n-u)>1)return;K=void 0}Q(Math.round(n/L.value))}function h(l){l.key==="ArrowRight"||l.key==="PageDown"?(l.preventDefault(),g()):l.key==="ArrowLeft"||l.key==="PageUp"?(l.preventDefault(),E()):l.key==="Home"?(l.preventDefault(),ne(0,{behavior:"smooth"})):l.key==="End"&&(l.preventDefault(),ne(U.value,{behavior:"auto"}))}function a(){var n;const l=((n=f.value)==null?void 0:n.clientWidth)??0;l<=0||l===k.value||(F=!0,k.value=l,e.nextTick(()=>{const u=W(i.value);te(u*L.value),F=!1}))}return e.watch(()=>t.activeIndex,async l=>{const n=W(l);n!==i.value&&(s(),i.value=n,await e.nextTick(),te(n*L.value),J())}),e.watch(()=>[t.items.length,B.value.slidesPerView,B.value.gap,B.value.slidesToScroll],async()=>{const l=W(i.value);t.items.length===0?i.value!==0&&(i.value=0,w("update:activeIndex",0)):Q(l),await e.nextTick(),te(l*L.value),J(),t.autoplay&&t.items.length>0&&!M.value&&S()}),e.watch(()=>t.responsive,()=>{e.nextTick(()=>{const l=W(i.value);te(l*L.value)})},{deep:!0}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([l])=>{l||(N=-1),await e.nextTick(),J()}),e.watch(()=>t.autoplay,l=>{l&&!M.value?S():A()}),e.watch(()=>t.autoplayDelay,()=>{t.autoplay&&!M.value&&S()}),e.watch(()=>t.autoplayLoop,l=>{!t.autoplay||M.value||(!l&&i.value>=U.value?A():S())}),e.watch(()=>t.pauseOnHover,l=>{l&&M.value?A():!l&&t.autoplay&&S()}),e.onMounted(async()=>{a(),typeof ResizeObserver<"u"&&f.value&&(V=new ResizeObserver(a),V.observe(f.value)),await e.nextTick(),te(i.value*L.value),J(),t.autoplay&&S()}),e.onBeforeUnmount(()=>{V&&(V.disconnect(),V=void 0),A()}),D({next:g,previous:E,scrollToIndex:ne,startAutoplay:S,stopAutoplay:A}),(l,n)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:f,class:"vue-virtual-carousel",style:e.normalizeStyle(ee.value),role:"region","aria-roledescription":"carousel","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:y,onPointerdown:s,onWheelPassive:s,onKeydown:h,onMouseenter:r,onMouseleave:c},[o.items.length?(e.openBlock(),e.createElementBlock("div",Ye,[m.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${m.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(q.value,({item:u,index:v})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(I)(u,v),class:"vue-virtual-carousel__item",style:e.normalizeStyle({flexBasis:`${Y.value}px`,marginRight:v<o.items.length-1?`${P.value}px`:"0px"}),role:"listitem","aria-roledescription":"slide","aria-label":`${v+1} of ${o.items.length}`,"aria-current":v===i.value?"true":void 0},[e.renderSlot(l.$slots,"default",{item:u,index:v,active:v===i.value,visible:re(v)})],12,Ue))),128)),O.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${O.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",_e,[e.renderSlot(l.$slots,"empty")]))],44,We))}}),Ge=["aria-label"],je=["aria-posinset","aria-setsize"],be=e.defineComponent({name:"VirtualScroll",__name:"VirtualScroll",props:{items:{},itemSize:{},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:D,emit:$}){const t=o,w=$,{pulling:f,pullDistance:k,pullOffset:i,pullProgress:V,refreshMessage:N,refreshThreshold:R,handleTouchStart:K,handleTouchMove:F,handleTouchEnd:M,handleTouchCancel:I}=ye({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>w("refresh")}),z=e.ref(),B=e.ref(0),C=e.ref(0);let H,P=-1;const j=ge(),{getItemKey:Z}=me({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),x=e.computed(()=>Math.max(1,t.itemSize)),Y=e.computed(()=>Math.max(0,Math.floor(t.overscan))),L=e.computed(()=>t.items.length*x.value),U=e.computed(()=>Math.max(1,t.loadingItemSize??x.value)),G=e.computed(()=>L.value+(t.loading?U.value:0)),X=e.computed(()=>C.value>0?C.value:typeof t.height=="number"?t.height:0),q=e.computed(()=>Math.max(0,Math.floor(B.value/x.value)-Y.value)),p=e.computed(()=>{const g=Math.ceil((B.value+X.value)/x.value);return Math.min(t.items.length,g+Y.value)}),m=e.computed(()=>t.items.slice(q.value,p.value).map((g,E)=>({item:g,index:q.value+E}))),O=e.computed(()=>({height:pe(t.height)})),ee=e.computed(()=>({transform:`translateY(${q.value*x.value}px)`}));function W(){var g;C.value=((g=z.value)==null?void 0:g.clientHeight)??0,j(z.value,t.height),e.nextTick(J)}function re(g){B.value=g.currentTarget.scrollTop,w("scroll",{scrollTop:B.value,startIndex:q.value,endIndex:p.value}),J()}function J(){const g=z.value;if(!g||!t.hasMore||t.loading||P===t.items.length)return;const E=Math.max(0,t.loadMoreThreshold);G.value-g.scrollTop-g.clientHeight<=E&&(P=t.items.length,w("loadMore"))}function Q(g,E={}){const S=z.value;if(!S)return;const A=Math.max(0,G.value-S.clientHeight),r=Math.min(Math.max(0,Number.isFinite(g)?g:0),A),c=E.behavior??"auto";c==="auto"&&(B.value=r),S.scrollTo({...E,top:r,behavior:c})}function te(g,E={}){const S=z.value;if(!S||t.items.length===0)return;const A=Math.min(t.items.length-1,Math.max(0,Math.floor(g))),{align:r="start",...c}=E;let s=A*x.value;r==="center"?s-=(S.clientHeight-x.value)/2:r==="end"&&(s-=S.clientHeight-x.value),S.scrollTo({...c,top:Math.max(0,Math.min(s,G.value-S.clientHeight))})}function ne(g="auto"){var E;(E=z.value)==null||E.scrollTo({top:0,behavior:g})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const g=z.value;if(!g)return;const E=Math.max(0,G.value-g.clientHeight);g.scrollTop>E&&(g.scrollTop=E,B.value=E),J()}),e.watch(()=>[t.hasMore,t.loading],async([g])=>{g||(P=-1),await e.nextTick(),J()}),e.onMounted(()=>{W(),typeof ResizeObserver<"u"&&z.value&&(H=new ResizeObserver(W),H.observe(z.value)),e.nextTick(J)}),e.onBeforeUnmount(()=>{H&&(H.disconnect(),H=void 0)}),D({scrollTo:Q,scrollToIndex:te,scrollToTop:ne}),(g,E)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:z,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(f)}]),style:e.normalizeStyle(O.value),role:"list","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:re,onTouchstartPassive:E[0]||(E[0]=(...S)=>e.unref(K)&&e.unref(K)(...S)),onTouchmove:E[1]||(E[1]=(...S)=>e.unref(F)&&e.unref(F)(...S)),onTouchend:E[2]||(E[2]=(...S)=>e.unref(M)&&e.unref(M)(...S)),onTouchcancel:E[3]||(E[3]=(...S)=>e.unref(I)&&e.unref(I)(...S))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(R)}px`,transform:`translateY(${e.unref(i)-e.unref(R)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(g.$slots,"refresh",{pullDistance:e.unref(k),progress:e.unref(V),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(N)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-scroll__spacer",style:e.normalizeStyle({height:`${G.value}px`,transform:`translateY(${e.unref(i)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(ee.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,({item:S,index:A})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(Z)(S,A),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${x.value}px`}),role:"listitem","aria-posinset":A+1,"aria-setsize":o.items.length},[e.renderSlot(g.$slots,"default",{item:S,index:A})],12,je))),128))],4),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${U.value}px`,transform:`translateY(${L.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(g.$slots,"loading",{},()=>[E[4]||(E[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(i)}px)`})},[e.renderSlot(g.$slots,"empty")],4))],46,Ge))}}),Ze=["aria-label"],qe=["aria-posinset","aria-setsize"],ze=e.defineComponent({name:"WindowDynamicVirtualScroll",__name:"WindowDynamicVirtualScroll",props:{items:{},estimatedItemSize:{default:48},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Window dynamic virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:D,emit:$}){const t=o,w=$,f=e.ref(),k=e.ref(0),i=e.ref(0),V=e.ref(0),N=e.ref(0),R=new Map,K=new Map,F=new Map;let M,I,z,B,C=!1,H=!1,P=-1;const{getItemKey:j}=me({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey});function Z(d){return typeof window.requestAnimationFrame=="function"?{id:window.requestAnimationFrame(d),type:"animation"}:{id:window.setTimeout(d,0),type:"timeout"}}function x(d){d&&(d.type==="animation"?window.cancelAnimationFrame(d.id):window.clearTimeout(d.id))}const{pulling:Y,pullDistance:L,pullOffset:U,pullProgress:G,refreshMessage:X,refreshThreshold:q,handleTouchStart:p,handleTouchMove:m,handleTouchEnd:O,handleTouchCancel:ee}=ye({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>w("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),W=e.computed(()=>Math.max(1,t.estimatedItemSize)),re=e.computed(()=>Math.max(1,t.loadingItemSize??W.value)),J=e.computed(()=>Math.max(0,Math.floor(t.overscan))),Q=e.computed(()=>{N.value;const d=new Array(t.items.length+1),b=new Array(t.items.length);d[0]=0;for(let T=0;T<t.items.length;T+=1){const oe=j(t.items[T],T),_=R.get(oe)??W.value;b[T]=_,d[T+1]=d[T]+_}return{offsets:d,sizes:b,total:d[t.items.length]??0}}),te=e.computed(()=>Q.value.total+(t.loading?re.value:0)),ne=e.computed(()=>{const d=new Map;return t.items.forEach((b,T)=>{d.set(j(b,T),T)}),d}),g=e.computed(()=>Math.max(0,k.value-V.value));function E(d){if(t.items.length===0)return 0;const b=Q.value.offsets;let T=0,oe=t.items.length;for(;T<oe;){const _=Math.floor((T+oe)/2);b[_+1]<=d?T=_+1:oe=_}return Math.min(T,t.items.length-1)}const S=e.computed(()=>Math.max(0,E(g.value)-J.value)),A=e.computed(()=>{if(t.items.length===0)return 0;const d=k.value+i.value-V.value,b=Math.max(W.value,d),T=E(b)+1;return Math.min(t.items.length,T+J.value)}),r=e.computed(()=>t.items.slice(S.value,A.value).map((d,b)=>{const T=S.value+b;return{item:d,index:T,key:j(d,T),top:Q.value.offsets[T]}}));function c(){typeof window>"u"||(k.value=Math.max(0,window.scrollY),i.value=window.innerHeight,f.value&&(V.value=f.value.getBoundingClientRect().top+k.value))}function s(){w("scroll",{scrollTop:g.value,startIndex:S.value,endIndex:A.value})}function y(d=!1){H&&(C||(C=d),!z&&(z=Z(()=>{z=void 0,c(),C&&(C=!1,s()),l()})))}function h(){y(!0)}function a(){y()}function l(){if(typeof window>"u"||!t.hasMore||t.loading||P===t.items.length)return;const d=Math.max(0,t.loadMoreThreshold),b=V.value+te.value,T=k.value+i.value;b-T<=d&&(P=t.items.length,w("loadMore"))}function n(d){const b=d.borderBoxSize;if(b){const T=Array.isArray(b)?b[0]:b;if(T!=null&&T.blockSize)return T.blockSize}return d.contentRect.height}function u(d){const b=Q.value;let T=0,oe=!1;for(const _ of d){const se=_.target,ue=K.get(se),fe=n(_);if(ue===void 0||fe<=0)continue;const ve=R.get(ue)??W.value;if(Math.abs(ve-fe)<.5)continue;const he=ne.value.get(ue);he!==void 0&&b.offsets[he+1]<=g.value&&(T+=fe-ve),R.set(ue,fe),oe=!0}oe&&(N.value+=1,e.nextTick(()=>{if(H){if(T!==0&&typeof window<"u"){const _=Math.max(0,k.value+T);k.value=_,window.scrollTo({top:_,behavior:"auto"})}c(),l()}}))}function v(d){if(H){for(const b of d)F.set(b.target,b);B||(B=Z(()=>{B=void 0;const b=Array.from(F.values());F.clear(),u(b)}))}}function le(d,b){d instanceof HTMLElement&&(K.set(d,b),I==null||I.observe(d))}function ae(){for(const[d]of K)d.isConnected||(I==null||I.unobserve(d),K.delete(d))}function ie(d,b={}){if(typeof window>"u")return;c();const T=Math.max(0,te.value-i.value),oe=Math.min(Math.max(0,Number.isFinite(d)?d:0),T),_=Math.max(0,V.value+oe),se=b.behavior??"auto";se==="auto"&&(k.value=_),window.scrollTo({...b,top:_,behavior:se})}function ce(d,b={}){if(typeof window>"u"||t.items.length===0)return;c();const T=Math.min(t.items.length-1,Math.max(0,Math.floor(d))),{align:oe="start",..._}=b,se=Q.value.sizes[T];let ue=V.value+Q.value.offsets[T];oe==="center"?ue-=(i.value-se)/2:oe==="end"&&(ue-=i.value-se);const fe=Math.max(V.value,V.value+te.value-i.value),ve=Math.max(0,Math.min(ue,fe)),he=_.behavior??"auto";he==="auto"&&(k.value=ve),window.scrollTo({..._,top:ve,behavior:he})}function de(d="auto"){typeof window>"u"||(c(),window.scrollTo({top:Math.max(0,V.value),behavior:d}))}return e.watch(()=>t.itemKey,()=>{R.clear(),N.value+=1,P=-1}),e.watch(()=>t.items.map((d,b)=>j(d,b)),async(d,b)=>{const T=d.length!==b.length||d.some((_,se)=>_!==b[se]),oe=new Set(d);for(const _ of R.keys())oe.has(_)||R.delete(_);T&&(P=-1),N.value+=1,await e.nextTick(),H&&(c(),l())}),e.watch(()=>[t.hasMore,t.loading],async([d])=>{d||(P=-1),await e.nextTick(),H&&(c(),l())}),e.onMounted(()=>{if(H=!0,c(),window.addEventListener("scroll",h,{passive:!0}),window.addEventListener("resize",a,{passive:!0}),typeof ResizeObserver<"u"){M=new ResizeObserver(()=>{y()}),I=new ResizeObserver(v),f.value&&M.observe(f.value);for(const[d]of K)I.observe(d)}e.nextTick(()=>{H&&l()})}),e.onUpdated(ae),e.onBeforeUnmount(()=>{H=!1,window.removeEventListener("scroll",h),window.removeEventListener("resize",a),x(z),x(B),z=void 0,B=void 0,C=!1,F.clear(),M&&(M.disconnect(),M=void 0),I&&(I.disconnect(),I=void 0),K.clear()}),D({scrollTo:ie,scrollToIndex:ce,scrollToTop:de}),(d,b)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:f,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(Y)}]),role:"list","aria-label":o.ariaLabel,onTouchstartPassive:b[0]||(b[0]=(...T)=>e.unref(p)&&e.unref(p)(...T)),onTouchmove:b[1]||(b[1]=(...T)=>e.unref(m)&&e.unref(m)(...T)),onTouchend:b[2]||(b[2]=(...T)=>e.unref(O)&&e.unref(O)(...T)),onTouchcancel:b[3]||(b[3]=(...T)=>e.unref(ee)&&e.unref(ee)(...T))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(q)}px`,transform:`translateY(${e.unref(U)-e.unref(q)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(d.$slots,"refresh",{pullDistance:e.unref(L),progress:e.unref(G),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(X)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${te.value}px`,transform:`translateY(${e.unref(U)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,({item:T,index:oe,key:_,top:se})=>(e.openBlock(),e.createElementBlock("div",{key:_,ref_for:!0,ref:ue=>le(ue,_),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${se}px)`}),role:"listitem","aria-posinset":oe+1,"aria-setsize":o.items.length},[e.renderSlot(d.$slots,"default",{item:T,index:oe})],12,qe))),128)),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${re.value}px`,transform:`translateY(${Q.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(d.$slots,"loading",{},()=>[b[4]||(b[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(U)}px)`})},[e.renderSlot(d.$slots,"empty")],4))],42,Ze))}}),Je=["aria-label"],Qe=["aria-posinset","aria-setsize"],Be=e.defineComponent({name:"WindowGirdVirtualScroll",__name:"WindowGirdVirtualScroll",props:{items:{},itemSize:{},columns:{default:2},gap:{default:0},overscan:{default:1},itemKey:{default:void 0},ariaLabel:{default:"Window virtual grid"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:D,emit:$}){const t=o,w=$,f=e.ref(),k=e.ref(0),i=e.ref(0),V=e.ref(0);let N,R=-1;const{getItemKey:K}=me({componentName:"WindowGirdVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:F,pullDistance:M,pullOffset:I,pullProgress:z,refreshMessage:B,refreshThreshold:C,handleTouchStart:H,handleTouchMove:P,handleTouchEnd:j,handleTouchCancel:Z}=ye({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>w("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),x=e.computed(()=>Math.max(1,t.itemSize)),Y=e.computed(()=>Math.max(1,Math.floor(t.columns))),L=e.computed(()=>Math.max(0,t.gap)),U=e.computed(()=>Math.max(0,Math.floor(t.overscan))),G=e.computed(()=>Math.max(1,t.loadingItemSize??x.value)),X=e.computed(()=>x.value+L.value),q=e.computed(()=>Math.ceil(t.items.length/Y.value)),p=e.computed(()=>q.value===0?0:q.value*x.value+(q.value-1)*L.value),m=e.computed(()=>p.value+(t.items.length?L.value:0)),O=e.computed(()=>p.value+(t.loading?G.value+(t.items.length?L.value:0):0)),ee=e.computed(()=>Math.max(0,k.value-V.value)),W=e.computed(()=>Math.max(0,Math.floor(ee.value/X.value)-U.value)),re=e.computed(()=>{if(q.value===0)return 0;const y=Math.max(x.value,k.value+i.value-V.value),h=Math.ceil((y+L.value)/X.value);return Math.min(q.value,h+U.value)}),J=e.computed(()=>Math.min(t.items.length,W.value*Y.value)),Q=e.computed(()=>Math.min(t.items.length,re.value*Y.value)),te=e.computed(()=>t.items.slice(J.value,Q.value).map((y,h)=>{const a=J.value+h;return{item:y,index:a,key:K(y,a),rowIndex:Math.floor(a/Y.value),columnIndex:a%Y.value}})),ne=e.computed(()=>({gridTemplateColumns:`repeat(${Y.value}, minmax(0, 1fr))`,columnGap:`${L.value}px`,rowGap:`${L.value}px`,transform:`translateY(${W.value*X.value}px)`}));function g(){typeof window>"u"||(k.value=Math.max(0,window.scrollY),i.value=window.innerHeight,f.value&&(V.value=f.value.getBoundingClientRect().top+k.value))}function E(){w("scroll",{scrollTop:ee.value,startIndex:J.value,endIndex:Q.value})}function S(){g(),E(),A()}function A(){if(typeof window>"u"||!t.hasMore||t.loading||R===t.items.length)return;const y=Math.max(0,t.loadMoreThreshold),h=V.value+O.value,a=k.value+i.value;h-a<=y&&(R=t.items.length,w("loadMore"))}function r(y,h={}){if(typeof window>"u")return;g();const a=Math.max(0,O.value-i.value),l=Math.min(Math.max(0,Number.isFinite(y)?y:0),a),n=Math.max(0,V.value+l),u=h.behavior??"auto";u==="auto"&&(k.value=n),window.scrollTo({...h,top:n,behavior:u})}function c(y,h={}){if(typeof window>"u"||t.items.length===0)return;g();const a=Math.min(t.items.length-1,Math.max(0,Math.floor(y))),l=Math.floor(a/Y.value),{align:n="start",...u}=h;let v=V.value+l*X.value;n==="center"?v-=(i.value-x.value)/2:n==="end"&&(v-=i.value-x.value);const le=Math.max(V.value,V.value+O.value-i.value),ae=Math.max(0,Math.min(v,le)),ie=u.behavior??"auto";ie==="auto"&&(k.value=ae),window.scrollTo({...u,top:ae,behavior:ie})}function s(y="auto"){typeof window>"u"||(g(),window.scrollTo({top:Math.max(0,V.value),behavior:y}))}return e.watch(()=>[t.items.length,t.itemSize,t.columns,t.gap],async()=>{await e.nextTick(),g(),A()}),e.watch(()=>[t.hasMore,t.loading],async([y])=>{y||(R=-1),await e.nextTick(),g(),A()}),e.onMounted(()=>{g(),window.addEventListener("scroll",S,{passive:!0}),window.addEventListener("resize",S,{passive:!0}),typeof ResizeObserver<"u"&&(N=new ResizeObserver(()=>{g(),A()}),f.value&&N.observe(f.value)),e.nextTick(A)}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",S),window.removeEventListener("resize",S),N&&(N.disconnect(),N=void 0)}),D({scrollTo:r,scrollToIndex:c,scrollToTop:s}),(y,h)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:f,class:e.normalizeClass(["vue-window-gird-virtual-scroll",{"vue-window-gird-virtual-scroll--pulling":e.unref(F)}]),role:"list","aria-label":o.ariaLabel,onTouchstartPassive:h[0]||(h[0]=(...a)=>e.unref(H)&&e.unref(H)(...a)),onTouchmove:h[1]||(h[1]=(...a)=>e.unref(P)&&e.unref(P)(...a)),onTouchend:h[2]||(h[2]=(...a)=>e.unref(j)&&e.unref(j)(...a)),onTouchcancel:h[3]||(h[3]=(...a)=>e.unref(Z)&&e.unref(Z)(...a))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(C)}px`,transform:`translateY(${e.unref(I)-e.unref(C)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(y.$slots,"refresh",{pullDistance:e.unref(M),progress:e.unref(z),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(B)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-gird-virtual-scroll__spacer",style:e.normalizeStyle({height:`${O.value}px`,transform:`translateY(${e.unref(I)}px)`})},[e.createElementVNode("div",{class:"vue-window-gird-virtual-scroll__content",style:e.normalizeStyle(ne.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(te.value,({item:a,index:l,key:n,rowIndex:u,columnIndex:v})=>(e.openBlock(),e.createElementBlock("div",{key:n,class:"vue-window-gird-virtual-scroll__item",style:e.normalizeStyle({height:`${x.value}px`}),role:"listitem","aria-posinset":l+1,"aria-setsize":o.items.length},[e.renderSlot(y.$slots,"default",{item:a,index:l,rowIndex:u,columnIndex:v})],12,Qe))),128))],4),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__loading",style:e.normalizeStyle({height:`${G.value}px`,transform:`translateY(${m.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(y.$slots,"loading",{},()=>[h[4]||(h[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-gird-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(I)}px)`})},[e.renderSlot(y.$slots,"empty")],4))],42,Je))}}),Ie=we,Ee={install(o){o.component("ChatVirtualScroll",Me),o.component("DynamicVirtualScroll",we),o.component("ShortMediaFeed",Te),o.component("SkeletonLoader",ke),o.component("VirtualCarousel",Se),o.component("VirtualList",Ie),o.component("VirtualScroll",be),o.component("WindowDynamicVirtualScroll",ze),o.component("WindowGirdVirtualScroll",Be)}};exports.ChatVirtualScroll=Me;exports.DynamicVirtualScroll=we;exports.ShortMediaFeed=Te;exports.SkeletonLoader=ke;exports.VirtualCarousel=Se;exports.VirtualList=Ie;exports.VirtualScroll=be;exports.VueVirtualScroll=Ee;exports.WindowDynamicVirtualScroll=ze;exports.WindowGirdVirtualScroll=Be;exports.default=Ee;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");function Ue(o){return typeof o=="string"||typeof o=="number"||typeof o=="symbol"}function Le(o,C){const x=o[C];return Ue(x)?x:void 0}function _e(o){return Le(o,"id")??Le(o,"key")}function be(o){function C(t,v){const u=o.itemKey();if(typeof u=="function")return u(t,v);if(t!==null&&typeof t=="object"){if(u!==void 0){const a=Le(t,u);if(a!==void 0)return a}const s=_e(t);if(s!==void 0)return s}return v}function x(){}return e.watch(()=>[o.itemKey(),o.items()],x,{immediate:!0}),{getItemKey:C}}function Ie(o){return o==="fill"?"100%":typeof o=="number"?`${o}px`:o}function $e(o){return(C,x)=>{typeof x=="string"&&(x==="fill"||x.trim().endsWith("%"))}}function je(o){const C=Float64Array.from(o),x=C.length,t=new Float64Array(x+1);let v=0;for(let s=1;s<=x;s+=1){const a=C[s-1];v+=a,t[s]+=a;const m=s+(s&-s);m<=x&&(t[m]+=t[s])}let u=1;for(;u*2<=x;)u*=2;return{length:x,get total(){return v},getSize(s){return C[s]},getOffset(s){let a=0;for(let m=s;m>0;m-=m&-m)a+=t[m];return a},setSize(s,a){const m=a-C[s];if(m!==0){C[s]=a,v+=m;for(let L=s+1;L<=x;L+=L&-L)t[L]+=m}},findIndex(s){if(x===0||s<=0)return 0;if(s>=v)return x-1;let a=0,m=0;for(let L=u;L>0;L=Math.floor(L/2)){const R=a+L;R<=x&&m+t[R]<=s&&(a=R,m+=t[R])}return Math.min(a,x-1)}}}const Ge=["aria-label"],qe={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},Ze=["aria-posinset","aria-setsize"],Ne=e.defineComponent({name:"ChatVirtualScroll",__name:"ChatVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:5},size:{default:void 0},itemKey:{default:void 0},ariaLabel:{default:"Chat messages"},stickToBottom:{type:Boolean,default:!0},bottomThreshold:{default:80},initialScroll:{default:"bottom"},hasOlder:{type:Boolean,default:!1},loadingOlder:{type:Boolean,default:!1},loadOlderThreshold:{default:120}},emits:["scroll","loadOlder","bottomChange"],setup(o,{expose:C,emit:x}){const t=o,v=x,u=e.ref(),s=e.ref(0),a=e.ref(0),m=e.ref(0),L=e.ref(0),R=e.ref(!0),_=new Map,j=new Map,E=new Set;let z,p,k=-1,P=!1,D=!1,H=!1,X,K=0,b=!1,q=0,$,J,F,ee=0;const le=$e(),{getItemKey:g}=be({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),M=e.computed(()=>Number.isFinite(t.estimatedItemSize)?Math.max(1,t.estimatedItemSize):48),W=e.computed(()=>Math.max(0,Math.floor(t.overscan))),re=e.computed(()=>t.size!==void 0&&Number.isFinite(t.size)&&t.size>0?Math.max(1,Math.floor(t.size)):void 0),G=e.computed(()=>m.value>0?m.value:typeof t.height=="number"?Math.max(0,t.height):M.value),oe=e.computed(()=>{const r=t.items.map((d,y)=>g(d,y));return{keys:r,indexes:new Map(r.map((d,y)=>[d,y])),sizes:je(r.map(d=>_.get(d)??M.value))}}),N=e.computed(()=>(L.value,{sizes:oe.value.sizes,total:oe.value.sizes.total}));function O(r=N.value.total){return Math.max(0,r-G.value)}function ne(r){return N.value.sizes.findIndex(r)}s.value=t.initialScroll==="bottom"?O():0;const se=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const r=ne(s.value),d=ne(s.value+G.value)+1,y=Math.max(0,r-W.value),V=Math.min(t.items.length,d+W.value),ce=re.value;if(ce===void 0||V-y<=ce)return{start:y,end:V};const fe=Math.max(0,ce-(d-r)),ve=r-y,pe=V-d;let Me=Math.min(ve,Math.ceil(fe/2));const ye=Math.min(pe,fe-Me);return Me=Math.min(ve,fe-ye),{start:r-Me,end:d+ye}}),h=e.computed(()=>se.value.start),B=e.computed(()=>se.value.end),I=e.computed(()=>t.items.slice(h.value,B.value).map((r,d)=>{const y=h.value+d;return{item:r,index:y,key:g(r,y),bottom:Math.max(N.value.total,G.value)-N.value.sizes.getOffset(y+1)+a.value}})),Z=e.computed(()=>({height:Ie(t.height)}));function Q(r=N.value.total){var V;const d=O(r),y=Math.min(0,((V=u.value)==null?void 0:V.scrollTop)??0);return Math.max(0,Math.min(d,d+y+K))}function te(r=!1){if(b||(H||F)&&!r||K===0)return;b=!0;const d=ee,y=++q;a.value=0,e.nextTick(()=>{if(y!==q)return;b=!1;const V=u.value;!V||d!==ee||K===0||(K=0,V.scrollTop=Math.min(0,s.value-O()),J=V.scrollTop,s.value=Q(),w(),ie())})}function de(r){const d=u.value;if(d){if(K+=r,s.value=Q(),K===0||O()===0){K=0,a.value=0;return}(H||F)&&!b?(a.value=K,d.scrollTop>=-1&&te(!0)):te()}}function A(){clearTimeout(X),X=void 0}function U(){if(D)return;A(),H=!1;const r=F;if(F=void 0,r){r();return}s.value=Q(),te()}function i(){A(),(H||F)&&!D&&(X=setTimeout(U,150))}function l(){$=void 0,F=void 0}function n(){l(),A(),D=!0,H=!0,a.value=K}function f(r){D=r.touches.length>0,i()}function w(){const r=u.value;if(!r)return;const y=Math.max(0,N.value.total-Q()-r.clientHeight)<=Math.max(0,t.bottomThreshold);y!==R.value&&(R.value=y,P&&v("bottomChange",y))}function me(){var r;m.value=((r=u.value)==null?void 0:r.clientHeight)??0,P&&(s.value=Q()),le(u.value,t.height),e.nextTick(()=>{w(),ie()})}function ue(){var r,d;$&&J!==void 0&&Math.abs((((r=u.value)==null?void 0:r.scrollTop)??0)-J)>1&&l(),s.value=Q(),K!==0&&(((d=u.value)==null?void 0:d.scrollTop)??0)>=-1&&te(!0),i(),w(),v("scroll",{scrollTop:s.value,startIndex:h.value,endIndex:B.value}),ie()}function ie(){const r=u.value;!P||!r||!t.hasOlder||t.loadingOlder||k===t.items.length||Q()<=Math.max(0,t.loadOlderThreshold)&&(k=t.items.length,v("loadOlder"))}function Te(r){const d=r.borderBoxSize;if(d){const y=Array.isArray(d)?d[0]:d;if(y!=null&&y.blockSize)return y.blockSize}return r.contentRect.height}function xe(r){const d=N.value.total,y=Q(),V=!H&&!F&&R.value&&t.stickToBottom&&(P||t.initialScroll==="bottom"),ce=ne(y+G.value-1),fe=!V&&y<=0;let ve=0,pe=!1;for(const{key:Re,height:ze}of r){if(!Number.isFinite(ze)||ze<=0)continue;const Ee=oe.value.indexes.get(Re);if(Ee===void 0)continue;const He=N.value.sizes.getSize(Ee);_.set(Re,ze),!(Math.abs(He-ze)<.5)&&(Ee<=ce&&(ve+=ze-He),N.value.sizes.setSize(Ee,ze),pe=!0)}if(!pe)return;L.value+=1;const Me=O()-O(d),ye=$&&oe.value.indexes.get($.key),Be=ye!==void 0&&$?ge(ye,$.align):V?O():fe?0:y+ve;de(Be-y-Me),e.nextTick(w)}function c(r){const d=[];for(const y of r){const V=j.get(y.target);V!==void 0&&d.push({key:V,height:Te(y)})}xe(d)}function S(){const r=[];for(const d of E){const y=j.get(d);y!==void 0&&d.isConnected&&r.push({key:y,height:d.getBoundingClientRect().height})}E.clear(),xe(r)}function T(r,d){r instanceof HTMLElement&&j.get(r)!==d&&(j.set(r,d),_.has(d)||E.add(r),p==null||p.observe(r))}function ae(){for(const[r]of j)r.isConnected||(p==null||p.unobserve(r),j.delete(r),E.delete(r))}function Y(r,d,y=!1){const V=u.value;if(!V)return;const ce=Q(),fe=a.value!==0,ve=++ee;q+=1,b=!1,$=void 0;const pe=d.behavior??"auto";F=pe==="smooth"?()=>he(r):void 0,K=0,a.value=0,H=!1,A(),pe==="auto"&&(s.value=r);const Me=()=>{u.value!==V||ve!==ee||(fe&&pe!=="auto"&&(V.scrollTop=ce-O()),y&&pe==="auto"?V.scrollTop=r-O():V.scrollTo({...d,top:r-O(),behavior:pe}),J=V.scrollTop,pe==="auto"?s.value=Q():i(),e.nextTick(w))};fe?e.nextTick(Me):Me()}function he(r,d={}){const y=u.value;if(!y)return;const V=Math.max(0,N.value.total-y.clientHeight),ce=Math.min(Math.max(0,Number.isFinite(r)?r:0),V);Y(ce,d)}function ge(r,d){const y=N.value.sizes.getSize(r);let V=N.value.sizes.getOffset(r);return d==="center"?V-=(G.value-y)/2:d==="end"&&(V-=G.value-y),Math.max(0,Math.min(V,O()))}function we(r,d={}){if(!u.value||t.items.length===0)return;const y=Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(r)?r:0))),{align:V="start",...ce}=d;Y(ge(y,V),ce);const fe=oe.value.keys[y];d.behavior==="smooth"?F=()=>{const ve=oe.value.indexes.get(fe);ve!==void 0&&we(ve,{align:V})}:$={key:fe,align:V}}function ke(r="auto"){Y(0,{behavior:r})}function Se(r="auto"){const d=u.value;if(!d)return;const y=Math.max(0,N.value.total-d.clientHeight);Y(y,{behavior:r},!0),r==="smooth"&&(F=()=>Se())}return e.watch(oe,async(r,d)=>{const y=d.sizes.total,V=Q(y),ce=!H&&!F&&R.value&&t.stickToBottom,fe=d.sizes.findIndex(V+G.value-1),ve=d.keys[fe],pe=ve===void 0?void 0:r.indexes.get(ve),Me=O()-O(y);for(const ye of _.keys())r.indexes.has(ye)||_.delete(ye);if(r.keys.length===0||pe===void 0){K=0,a.value=0,s.value=ce?O():Math.min(V,O());const ye=s.value,Be=ee;await e.nextTick(),Be===ee&&oe.value===r&&Y(ye,{},!0)}else{const ye=r.sizes.getOffset(pe+1)-d.sizes.getOffset(fe+1),Be=ce?O():V+ye;de(Be-V-Me),await e.nextTick()}u.value&&(s.value=Q(),w(),ie())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([r])=>{r||(k=-1),await e.nextTick(),ie()}),e.onMounted(()=>{if(me(),u.value&&(u.value.scrollTop=t.initialScroll==="bottom"?0:-O(),s.value=Q()),S(),typeof ResizeObserver<"u"){z=new ResizeObserver(me),p=new ResizeObserver(c),u.value&&z.observe(u.value);for(const[r]of j)p.observe(r)}e.nextTick(()=>{P=!0,w(),ie()})}),e.onUpdated(()=>{ae(),S()}),e.onBeforeUnmount(()=>{P=!1,A(),l(),K=0,ee+=1,q+=1,z&&(z.disconnect(),z=void 0),p&&(p.disconnect(),p=void 0),j.clear(),E.clear()}),C({isAtBottom:R,scrollTo:he,scrollToIndex:we,scrollToTop:ke,scrollToBottom:Se}),(r,d)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:u,class:"vue-chat-virtual-scroll",style:e.normalizeStyle(Z.value),role:"log","aria-label":o.ariaLabel,"aria-live":"polite",tabindex:"0",onScrollPassive:ue,onScrollendPassive:U,onPointerdownPassive:l,onWheelPassive:l,onKeydown:l,onTouchstartPassive:n,onTouchendPassive:f,onTouchcancelPassive:f},[e.createElementVNode("div",{class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${Math.max(G.value,N.value.total+a.value)}px`})},[o.loadingOlder?(e.openBlock(),e.createElementBlock("div",qe,[e.createElementVNode("div",null,[e.renderSlot(r.$slots,"loadingOlder",{},()=>[d[0]||(d[0]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,({item:y,index:V,key:ce,bottom:fe})=>(e.openBlock(),e.createElementBlock("div",{key:ce,ref_for:!0,ref:ve=>T(ve,ce),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${-fe}px)`}),role:"article","aria-posinset":V+1,"aria-setsize":o.items.length},[e.renderSlot(r.$slots,"default",{item:y,index:V})],12,Ze))),128)),o.items.length?e.createCommentVNode("",!0):e.renderSlot(r.$slots,"empty",{},void 0,void 0,1)],4)],44,Ge))}});function Ve(o){const C=e.ref(),x=e.ref(0),t=e.ref(!1),v=e.ref(!1),u=e.computed(()=>Math.max(1,o.threshold())),s=e.computed(()=>o.refreshing()||v.value?u.value:x.value),a=e.computed(()=>Math.min(1,x.value/u.value)),m=e.computed(()=>o.refreshing()||v.value?"Refreshing…":a.value>=1?"Release to refresh":"Pull to refresh");function L(){C.value=void 0,t.value=!1,x.value=0}function R(E){var k;const z=E.currentTarget,p=((k=o.scrollTop)==null?void 0:k.call(o))??z.scrollTop;!o.enabled()||o.refreshing()||p>0||E.touches.length!==1||(C.value=E.touches[0].clientY,t.value=!0)}function _(E){var P;if(C.value===void 0||!t.value)return;const z=E.currentTarget;if((((P=o.scrollTop)==null?void 0:P.call(o))??z.scrollTop)>0||E.touches.length!==1){L();return}const k=E.touches[0].clientY-C.value;if(k<=0){x.value=0;return}E.preventDefault(),x.value=Math.min(k*.5,u.value*2)}function j(){if(C.value===void 0)return;const E=x.value>=u.value&&o.enabled()&&!o.refreshing();if(C.value=void 0,t.value=!1,!E){x.value=0;return}x.value=u.value,v.value=!0,o.onRefresh(),e.nextTick(()=>{o.refreshing()||(v.value=!1,x.value=0)})}return e.watch(()=>o.refreshing(),(E,z)=>{E?(v.value=!1,x.value=u.value):z&&(v.value=!1,x.value=0)}),{pulling:t,pullDistance:x,pullOffset:s,pullProgress:a,refreshMessage:m,refreshThreshold:u,handleTouchStart:R,handleTouchMove:_,handleTouchEnd:j,handleTouchCancel:L}}const Je=["aria-label"],Qe=["aria-posinset","aria-setsize"],Ce=e.defineComponent({name:"DynamicVirtualScroll",__name:"DynamicVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Dynamic virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:C,emit:x}){const t=o,v=x,{pulling:u,pullDistance:s,pullOffset:a,pullProgress:m,refreshMessage:L,refreshThreshold:R,handleTouchStart:_,handleTouchMove:j,handleTouchEnd:E,handleTouchCancel:z}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>v("refresh")}),p=e.ref(),k=e.ref(0),P=e.ref(0),D=e.ref(0),H=new Map,X=new Map;let K,b,q=-1;const $=$e(),{getItemKey:J}=be({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),F=e.computed(()=>Math.max(1,t.estimatedItemSize)),ee=e.computed(()=>Math.max(1,t.loadingItemSize??F.value)),le=e.computed(()=>Math.max(0,Math.floor(t.overscan))),g=e.computed(()=>P.value>0?P.value:typeof t.height=="number"?Math.max(0,t.height):F.value),M=e.computed(()=>{D.value;const i=new Array(t.items.length+1),l=new Array(t.items.length);i[0]=0;for(let n=0;n<t.items.length;n+=1){const f=J(t.items[n],n),w=H.get(f)??F.value;l[n]=w,i[n+1]=i[n]+w}return{offsets:i,sizes:l,total:i[t.items.length]??0}}),W=e.computed(()=>M.value.total+(t.loading?ee.value:0)),re=e.computed(()=>{const i=new Map;return t.items.forEach((l,n)=>{i.set(J(l,n),n)}),i});function G(i){if(t.items.length===0)return 0;const l=M.value.offsets;let n=0,f=t.items.length;for(;n<f;){const w=Math.floor((n+f)/2);l[w+1]<=i?n=w+1:f=w}return Math.min(n,t.items.length-1)}const oe=e.computed(()=>Math.max(0,G(k.value)-le.value)),N=e.computed(()=>{if(t.items.length===0)return 0;const i=G(k.value+g.value)+1;return Math.min(t.items.length,i+le.value)}),O=e.computed(()=>t.items.slice(oe.value,N.value).map((i,l)=>{const n=oe.value+l;return{item:i,index:n,key:J(i,n),top:M.value.offsets[n]}})),ne=e.computed(()=>({height:Ie(t.height)}));function se(){var i;P.value=((i=p.value)==null?void 0:i.clientHeight)??0,$(p.value,t.height),e.nextTick(B)}function h(i){k.value=i.currentTarget.scrollTop,v("scroll",{scrollTop:k.value,startIndex:oe.value,endIndex:N.value}),B()}function B(){const i=p.value;if(!i||!t.hasMore||t.loading||q===t.items.length)return;const l=Math.max(0,t.loadMoreThreshold);W.value-i.scrollTop-i.clientHeight<=l&&(q=t.items.length,v("loadMore"))}function I(i){const l=i.borderBoxSize;if(l){const n=Array.isArray(l)?l[0]:l;if(n!=null&&n.blockSize)return n.blockSize}return i.contentRect.height}function Z(i){const l=M.value;let n=0,f=!1;for(const w of i){const me=w.target,ue=X.get(me),ie=I(w);if(ue===void 0||ie<=0)continue;const Te=H.get(ue)??F.value;if(Math.abs(Te-ie)<.5)continue;const xe=re.value.get(ue);xe!==void 0&&l.offsets[xe+1]<=k.value&&(n+=ie-Te),H.set(ue,ie),f=!0}f&&(D.value+=1,e.nextTick(B),n!==0&&e.nextTick(()=>{const w=p.value;w&&(w.scrollTop+=n,k.value=w.scrollTop)}))}function Q(i,l){i instanceof HTMLElement&&(X.set(i,l),b==null||b.observe(i))}function te(){for(const[i]of X)i.isConnected||(b==null||b.unobserve(i),X.delete(i))}function de(i,l={}){const n=p.value;if(!n)return;const f=Math.max(0,W.value-n.clientHeight),w=Math.min(Math.max(0,Number.isFinite(i)?i:0),f),me=l.behavior??"auto";me==="auto"&&(k.value=w),n.scrollTo({...l,top:w,behavior:me})}function A(i,l={}){const n=p.value;if(!n||t.items.length===0)return;const f=Math.min(t.items.length-1,Math.max(0,Math.floor(i))),{align:w="start",...me}=l;let ue=M.value.offsets[f];const ie=M.value.sizes[f];w==="center"?ue-=(n.clientHeight-ie)/2:w==="end"&&(ue-=n.clientHeight-ie);const Te=Math.max(0,Math.min(ue,W.value-n.clientHeight)),xe=me.behavior??"auto";xe==="auto"&&(k.value=Te),n.scrollTo({...me,top:Te,behavior:xe})}function U(i="auto"){var l;(l=p.value)==null||l.scrollTo({top:0,behavior:i})}return e.watch(()=>t.itemKey,()=>{H.clear(),D.value+=1}),e.watch(()=>t.items.length,async()=>{const i=new Set(t.items.map((f,w)=>J(f,w)));for(const f of H.keys())i.has(f)||H.delete(f);D.value+=1,await e.nextTick();const l=p.value;if(!l)return;const n=Math.max(0,W.value-l.clientHeight);l.scrollTop>n&&(l.scrollTop=n,k.value=n),B()}),e.watch(()=>[t.hasMore,t.loading],async([i])=>{i||(q=-1),await e.nextTick(),B()}),e.onMounted(()=>{if(se(),typeof ResizeObserver<"u"){K=new ResizeObserver(se),b=new ResizeObserver(Z),p.value&&K.observe(p.value);for(const[i]of X)b.observe(i)}e.nextTick(B)}),e.onUpdated(te),e.onBeforeUnmount(()=>{K&&(K.disconnect(),K=void 0),b&&(b.disconnect(),b=void 0),X.clear()}),C({scrollTo:de,scrollToIndex:A,scrollToTop:U}),(i,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:p,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(u)}]),style:e.normalizeStyle(ne.value),role:"list","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:h,onTouchstartPassive:l[0]||(l[0]=(...n)=>e.unref(_)&&e.unref(_)(...n)),onTouchmove:l[1]||(l[1]=(...n)=>e.unref(j)&&e.unref(j)(...n)),onTouchend:l[2]||(l[2]=(...n)=>e.unref(E)&&e.unref(E)(...n)),onTouchcancel:l[3]||(l[3]=(...n)=>e.unref(z)&&e.unref(z)(...n))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(R)}px`,transform:`translateY(${e.unref(a)-e.unref(R)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(i.$slots,"refresh",{pullDistance:e.unref(s),progress:e.unref(m),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(L)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${W.value}px`,transform:`translateY(${e.unref(a)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,({item:n,index:f,key:w,top:me})=>(e.openBlock(),e.createElementBlock("div",{key:w,ref_for:!0,ref:ue=>Q(ue,w),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${me}px)`}),role:"listitem","aria-posinset":f+1,"aria-setsize":o.items.length},[e.renderSlot(i.$slots,"default",{item:n,index:f})],12,Qe))),128)),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${ee.value}px`,transform:`translateY(${M.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(i.$slots,"loading",{},()=>[l[4]||(l[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(a)}px)`})},[e.renderSlot(i.$slots,"empty")],4))],46,Je))}}),Xe=["aria-label"],et=["aria-current","aria-posinset","aria-setsize"],tt={key:1,class:"vue-short-media-feed__empty"},Oe=e.defineComponent({name:"ShortMediaFeed",__name:"ShortMediaFeed",props:{items:{},activeIndex:{default:0},buffer:{default:1},height:{default:"100dvh"},itemKey:{default:void 0},ariaLabel:{default:"Short media feed"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(o,{expose:C,emit:x}){const t=o,v=x,u=e.ref(),s=e.ref(0),a=e.ref(K(t.activeIndex));let m,L=-1;const R=$e(),{getItemKey:_}=be({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),j=e.computed(()=>Math.max(0,Math.floor(t.buffer))),E=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),z=e.computed(()=>s.value>0?s.value:typeof t.height=="number"?Math.max(1,t.height):0),p=e.computed(()=>Math.max(0,a.value-j.value)),k=e.computed(()=>Math.min(t.items.length,a.value+j.value+1)),P=e.computed(()=>t.items.slice(p.value,k.value).map((g,M)=>({item:g,index:p.value+M}))),D=e.computed(()=>p.value*z.value),H=e.computed(()=>(t.items.length-k.value)*z.value),X=e.computed(()=>({height:Ie(t.height)}));function K(g){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(g)?g:0)))}function b(){if(!t.hasMore||t.loading||L===t.items.length)return;(t.items.length===0?0:t.items.length-1-a.value)<=E.value&&(L=t.items.length,v("loadMore"))}function q(g){const M=K(g);M===a.value||t.items.length===0||(a.value=M,v("update:activeIndex",M),v("change",{index:M,item:t.items[M]}),M===0&&v("reachStart"),M===t.items.length-1&&v("reachEnd"),b())}function $(g,M={}){const W=u.value;W&&(typeof W.scrollTo=="function"?W.scrollTo({...M,top:g}):W.scrollTop=g)}function J(g,M={}){if(t.items.length===0)return;const W=K(g);q(W),$(W*z.value,M)}function F(g){if(z.value<=0)return;const M=g.currentTarget.scrollTop;q(Math.round(M/z.value))}function ee(g){let M;g.key==="ArrowDown"||g.key==="PageDown"?M=a.value+1:g.key==="ArrowUp"||g.key==="PageUp"?M=a.value-1:g.key==="Home"?M=0:g.key==="End"&&(M=t.items.length-1),M!==void 0&&(g.preventDefault(),J(M,{behavior:"smooth"}))}function le(){var M;const g=((M=u.value)==null?void 0:M.clientHeight)??0;R(u.value,t.height),!(g<=0||g===s.value)&&(s.value=g,e.nextTick(()=>{$(a.value*g)}))}return e.watch(()=>t.activeIndex,async g=>{const M=K(g);M!==a.value&&(a.value=M,await e.nextTick(),$(M*z.value),b())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([g])=>{g||(L=-1),await e.nextTick(),b()}),e.watch(()=>t.items.length,async()=>{const g=K(a.value);t.items.length===0?a.value!==0&&(a.value=0,v("update:activeIndex",0)):q(g),await e.nextTick(),$(g*z.value),b()}),e.onMounted(async()=>{le(),typeof ResizeObserver<"u"&&u.value&&(m=new ResizeObserver(le),m.observe(u.value)),await e.nextTick(),$(a.value*z.value),b()}),e.onBeforeUnmount(()=>{m&&(m.disconnect(),m=void 0)}),C({scrollToIndex:J}),(g,M)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:u,class:"vue-short-media-feed",style:e.normalizeStyle(X.value),role:"list","aria-orientation":"vertical","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:F,onKeydown:ee},[o.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[D.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${D.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value,({item:W,index:re})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(_)(W,re),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${z.value}px`}),role:"listitem","aria-current":re===a.value?"true":void 0,"aria-posinset":re+1,"aria-setsize":o.items.length},[e.renderSlot(g.$slots,"default",{item:W,index:re,active:re===a.value})],12,et))),128)),H.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${H.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",tt,[e.renderSlot(g.$slots,"empty")]))],44,Xe))}}),lt=["aria-label"],ot=e.defineComponent({__name:"SkeletonLoader",props:{width:{default:"100%"},height:{default:16},variant:{default:"rounded"},animated:{type:Boolean,default:!0},ariaLabel:{default:"Loading…"}},setup(o){const C=o;function x(v){return typeof v=="number"?`${Math.max(0,v)}px`:v}const t=e.computed(()=>({width:x(C.width),height:x(C.height)}));return(v,u)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vue-skeleton-loader",[`vue-skeleton-loader--${o.variant}`,{"vue-skeleton-loader--animated":o.animated}]]),style:e.normalizeStyle(t.value),role:"status","aria-label":o.ariaLabel},null,14,lt))}}),nt=(o,C)=>{const x=o.__vccOpts||o;for(const[t,v]of C)x[t]=v;return x},Ke=nt(ot,[["__scopeId","data-v-fc92f61f"]]),at=["aria-label"],rt={key:0,class:"vue-virtual-carousel__track",role:"list"},it=["aria-label","aria-current"],st={key:1,class:"vue-virtual-carousel__empty"},Pe=e.defineComponent({name:"VirtualCarousel",__name:"VirtualCarousel",props:{items:{},activeIndex:{default:0},slidesPerView:{default:1},slidesToScroll:{default:1},gap:{default:0},buffer:{default:1},height:{default:"auto"},itemKey:{default:void 0},ariaLabel:{default:"Carousel"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2},autoplay:{type:Boolean,default:!1},autoplayDelay:{default:3e3},autoplayLoop:{type:Boolean,default:!0},pauseOnHover:{type:Boolean,default:!0},responsive:{default:void 0}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(o,{expose:C,emit:x}){const t=o,v=x,u=e.ref(),s=e.ref(0),a=e.ref(0);let m,L=-1,R,_,j=!1;const E=e.ref(!1),{getItemKey:z}=be({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),p=e.computed(()=>Math.max(0,s.value)),k=e.computed(()=>{if(!t.responsive||t.responsive.length===0)return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap};const l=p.value,n=[...t.responsive].sort((f,w)=>w.breakpoint-f.breakpoint);for(const f of n)if(l>=f.breakpoint)return{slidesPerView:f.slidesPerView??t.slidesPerView,slidesToScroll:f.slidesToScroll??t.slidesToScroll,gap:f.gap??t.gap};return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap}}),P=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(k.value.slidesPerView)?k.value.slidesPerView:1))),D=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(k.value.slidesToScroll)?k.value.slidesToScroll:1))),H=e.computed(()=>Math.max(0,Number.isFinite(k.value.gap)?k.value.gap:0)),X=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.buffer)?t.buffer:0))),K=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),b=e.computed(()=>Number.isFinite(t.autoplayDelay)?Math.max(1,t.autoplayDelay):3e3),q=e.computed(()=>{if(p.value<=0)return 0;const l=(P.value-1)*H.value;return Math.max(1,(p.value-l)/P.value)}),$=e.computed(()=>q.value+H.value),J=e.computed(()=>Math.max(0,t.items.length-P.value)),F=e.computed(()=>Math.max(0,a.value-X.value)),ee=e.computed(()=>Math.min(t.items.length,a.value+P.value+X.value)),le=e.computed(()=>t.items.slice(F.value,ee.value).map((l,n)=>({item:l,index:F.value+n}))),g=e.computed(()=>t.items.length===0?0:t.items.length*q.value+(t.items.length-1)*H.value),M=e.computed(()=>F.value*$.value),W=e.computed(()=>Math.max(0,g.value-ee.value*$.value)),re=e.computed(()=>({height:Ie(t.height)}));function G(l){return Math.min(J.value,Math.max(0,Math.floor(Number.isFinite(l)?l:0)))}a.value=G(t.activeIndex);function oe(l){return l>=a.value&&l<Math.min(t.items.length,a.value+P.value)}function N(){if(!t.hasMore||t.loading||L===t.items.length)return;const l=t.items.length===0?-1:Math.min(t.items.length-1,a.value+P.value-1);t.items.length-1-l<=K.value&&(L=t.items.length,v("loadMore"))}function O(l){const n=G(l);n===a.value||t.items.length===0||(a.value=n,v("update:activeIndex",n),v("change",{index:n,item:t.items[n]}),n===0&&v("reachStart"),n===J.value&&v("reachEnd"),N(),t.autoplay&&!E.value&&I())}function ne(l,n={}){const f=u.value;f&&(typeof f.scrollTo=="function"?f.scrollTo({...n,left:l}):f.scrollLeft=l)}function se(l,n={}){if(t.items.length===0||$.value<=0)return;const f=G(l);_=n.behavior==="smooth"?f:void 0,O(f),ne(f*$.value,{...n,behavior:n.behavior})}function h(l="smooth"){se(a.value+D.value,{behavior:l})}function B(l="smooth"){se(a.value-D.value,{behavior:l})}function I(){Z(),!(!t.autoplay||t.items.length===0)&&(R=setTimeout(()=>{a.value>=J.value?t.autoplayLoop?se(0,{behavior:"smooth"}):Z():h("smooth")},b.value))}function Z(){R!==void 0&&(clearTimeout(R),R=void 0)}function Q(){E.value=!0,t.pauseOnHover&&Z()}function te(){E.value=!1,t.autoplay&&I()}function de(){_=void 0}function A(l){if($.value<=0||j)return;const n=l.currentTarget.scrollLeft;if(_!==void 0){const f=_*$.value;if(Math.abs(n-f)>1)return;_=void 0}O(Math.round(n/$.value))}function U(l){l.key==="ArrowRight"||l.key==="PageDown"?(l.preventDefault(),h()):l.key==="ArrowLeft"||l.key==="PageUp"?(l.preventDefault(),B()):l.key==="Home"?(l.preventDefault(),se(0,{behavior:"smooth"})):l.key==="End"&&(l.preventDefault(),se(J.value,{behavior:"auto"}))}function i(){var n;const l=((n=u.value)==null?void 0:n.clientWidth)??0;l<=0||l===s.value||(j=!0,s.value=l,e.nextTick(()=>{const f=G(a.value);ne(f*$.value),j=!1}))}return e.watch(()=>t.activeIndex,async l=>{const n=G(l);n!==a.value&&(de(),a.value=n,await e.nextTick(),ne(n*$.value),N())}),e.watch(()=>[t.items.length,k.value.slidesPerView,k.value.gap,k.value.slidesToScroll],async()=>{const l=G(a.value);t.items.length===0?a.value!==0&&(a.value=0,v("update:activeIndex",0)):O(l),await e.nextTick(),ne(l*$.value),N(),t.autoplay&&t.items.length>0&&!E.value&&I()}),e.watch(()=>t.responsive,()=>{e.nextTick(()=>{const l=G(a.value);ne(l*$.value)})},{deep:!0}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([l])=>{l||(L=-1),await e.nextTick(),N()}),e.watch(()=>t.autoplay,l=>{l&&!E.value?I():Z()}),e.watch(()=>t.autoplayDelay,()=>{t.autoplay&&!E.value&&I()}),e.watch(()=>t.autoplayLoop,l=>{!t.autoplay||E.value||(!l&&a.value>=J.value?Z():I())}),e.watch(()=>t.pauseOnHover,l=>{l&&E.value?Z():!l&&t.autoplay&&I()}),e.onMounted(async()=>{i(),typeof ResizeObserver<"u"&&u.value&&(m=new ResizeObserver(i),m.observe(u.value)),await e.nextTick(),ne(a.value*$.value),N(),t.autoplay&&I()}),e.onBeforeUnmount(()=>{m&&(m.disconnect(),m=void 0),Z()}),C({next:h,previous:B,scrollToIndex:se,startAutoplay:I,stopAutoplay:Z}),(l,n)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:u,class:"vue-virtual-carousel",style:e.normalizeStyle(re.value),role:"region","aria-roledescription":"carousel","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:A,onPointerdown:de,onWheelPassive:de,onKeydown:U,onMouseenter:Q,onMouseleave:te},[o.items.length?(e.openBlock(),e.createElementBlock("div",rt,[M.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${M.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(le.value,({item:f,index:w})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(z)(f,w),class:"vue-virtual-carousel__item",style:e.normalizeStyle({flexBasis:`${q.value}px`,marginRight:w<o.items.length-1?`${H.value}px`:"0px"}),role:"listitem","aria-roledescription":"slide","aria-label":`${w+1} of ${o.items.length}`,"aria-current":w===a.value?"true":void 0},[e.renderSlot(l.$slots,"default",{item:f,index:w,active:w===a.value,visible:oe(w)})],12,it))),128)),W.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${W.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",st,[e.renderSlot(l.$slots,"empty")]))],44,at))}}),ut=["aria-label"],ct=["aria-posinset","aria-setsize"],Ae=e.defineComponent({name:"VirtualScroll",__name:"VirtualScroll",props:{items:{},itemSize:{},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:C,emit:x}){const t=o,v=x,{pulling:u,pullDistance:s,pullOffset:a,pullProgress:m,refreshMessage:L,refreshThreshold:R,handleTouchStart:_,handleTouchMove:j,handleTouchEnd:E,handleTouchCancel:z}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>v("refresh")}),p=e.ref(),k=e.ref(0),P=e.ref(0);let D,H=-1;const X=$e(),{getItemKey:K}=be({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),b=e.computed(()=>Math.max(1,t.itemSize)),q=e.computed(()=>Math.max(0,Math.floor(t.overscan))),$=e.computed(()=>t.items.length*b.value),J=e.computed(()=>Math.max(1,t.loadingItemSize??b.value)),F=e.computed(()=>$.value+(t.loading?J.value:0)),ee=e.computed(()=>P.value>0?P.value:typeof t.height=="number"?t.height:0),le=e.computed(()=>Math.max(0,Math.floor(k.value/b.value)-q.value)),g=e.computed(()=>{const h=Math.ceil((k.value+ee.value)/b.value);return Math.min(t.items.length,h+q.value)}),M=e.computed(()=>t.items.slice(le.value,g.value).map((h,B)=>({item:h,index:le.value+B}))),W=e.computed(()=>({height:Ie(t.height)})),re=e.computed(()=>({transform:`translateY(${le.value*b.value}px)`}));function G(){var h;P.value=((h=p.value)==null?void 0:h.clientHeight)??0,X(p.value,t.height),e.nextTick(N)}function oe(h){k.value=h.currentTarget.scrollTop,v("scroll",{scrollTop:k.value,startIndex:le.value,endIndex:g.value}),N()}function N(){const h=p.value;if(!h||!t.hasMore||t.loading||H===t.items.length)return;const B=Math.max(0,t.loadMoreThreshold);F.value-h.scrollTop-h.clientHeight<=B&&(H=t.items.length,v("loadMore"))}function O(h,B={}){const I=p.value;if(!I)return;const Z=Math.max(0,F.value-I.clientHeight),Q=Math.min(Math.max(0,Number.isFinite(h)?h:0),Z),te=B.behavior??"auto";te==="auto"&&(k.value=Q),I.scrollTo({...B,top:Q,behavior:te})}function ne(h,B={}){const I=p.value;if(!I||t.items.length===0)return;const Z=Math.min(t.items.length-1,Math.max(0,Math.floor(h))),{align:Q="start",...te}=B;let de=Z*b.value;Q==="center"?de-=(I.clientHeight-b.value)/2:Q==="end"&&(de-=I.clientHeight-b.value),I.scrollTo({...te,top:Math.max(0,Math.min(de,F.value-I.clientHeight))})}function se(h="auto"){var B;(B=p.value)==null||B.scrollTo({top:0,behavior:h})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const h=p.value;if(!h)return;const B=Math.max(0,F.value-h.clientHeight);h.scrollTop>B&&(h.scrollTop=B,k.value=B),N()}),e.watch(()=>[t.hasMore,t.loading],async([h])=>{h||(H=-1),await e.nextTick(),N()}),e.onMounted(()=>{G(),typeof ResizeObserver<"u"&&p.value&&(D=new ResizeObserver(G),D.observe(p.value)),e.nextTick(N)}),e.onBeforeUnmount(()=>{D&&(D.disconnect(),D=void 0)}),C({scrollTo:O,scrollToIndex:ne,scrollToTop:se}),(h,B)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:p,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(u)}]),style:e.normalizeStyle(W.value),role:"list","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:oe,onTouchstartPassive:B[0]||(B[0]=(...I)=>e.unref(_)&&e.unref(_)(...I)),onTouchmove:B[1]||(B[1]=(...I)=>e.unref(j)&&e.unref(j)(...I)),onTouchend:B[2]||(B[2]=(...I)=>e.unref(E)&&e.unref(E)(...I)),onTouchcancel:B[3]||(B[3]=(...I)=>e.unref(z)&&e.unref(z)(...I))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(R)}px`,transform:`translateY(${e.unref(a)-e.unref(R)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(h.$slots,"refresh",{pullDistance:e.unref(s),progress:e.unref(m),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(L)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-scroll__spacer",style:e.normalizeStyle({height:`${F.value}px`,transform:`translateY(${e.unref(a)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(re.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.value,({item:I,index:Z})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(K)(I,Z),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${b.value}px`}),role:"listitem","aria-posinset":Z+1,"aria-setsize":o.items.length},[e.renderSlot(h.$slots,"default",{item:I,index:Z})],12,ct))),128))],4),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${J.value}px`,transform:`translateY(${$.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(h.$slots,"loading",{},()=>[B[4]||(B[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(a)}px)`})},[e.renderSlot(h.$slots,"empty")],4))],46,ut))}}),dt=["aria-label"],mt=["aria-posinset","aria-setsize"],De=e.defineComponent({name:"WindowDynamicVirtualScroll",__name:"WindowDynamicVirtualScroll",props:{items:{},estimatedItemSize:{default:48},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Window dynamic virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:C,emit:x}){const t=o,v=x,u=e.ref(),s=e.ref(0),a=e.ref(0),m=e.ref(0),L=e.ref(0),R=new Map,_=new Map,j=new Map;let E,z,p,k,P=!1,D=!1,H=-1;const{getItemKey:X}=be({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey});function K(c){return typeof window.requestAnimationFrame=="function"?{id:window.requestAnimationFrame(c),type:"animation"}:{id:window.setTimeout(c,0),type:"timeout"}}function b(c){c&&(c.type==="animation"?window.cancelAnimationFrame(c.id):window.clearTimeout(c.id))}const{pulling:q,pullDistance:$,pullOffset:J,pullProgress:F,refreshMessage:ee,refreshThreshold:le,handleTouchStart:g,handleTouchMove:M,handleTouchEnd:W,handleTouchCancel:re}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>v("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),G=e.computed(()=>Math.max(1,t.estimatedItemSize)),oe=e.computed(()=>Math.max(1,t.loadingItemSize??G.value)),N=e.computed(()=>Math.max(0,Math.floor(t.overscan))),O=e.computed(()=>{L.value;const c=new Array(t.items.length+1),S=new Array(t.items.length);c[0]=0;for(let T=0;T<t.items.length;T+=1){const ae=X(t.items[T],T),Y=R.get(ae)??G.value;S[T]=Y,c[T+1]=c[T]+Y}return{offsets:c,sizes:S,total:c[t.items.length]??0}}),ne=e.computed(()=>O.value.total+(t.loading?oe.value:0)),se=e.computed(()=>{const c=new Map;return t.items.forEach((S,T)=>{c.set(X(S,T),T)}),c}),h=e.computed(()=>Math.max(0,s.value-m.value));function B(c){if(t.items.length===0)return 0;const S=O.value.offsets;let T=0,ae=t.items.length;for(;T<ae;){const Y=Math.floor((T+ae)/2);S[Y+1]<=c?T=Y+1:ae=Y}return Math.min(T,t.items.length-1)}const I=e.computed(()=>Math.max(0,B(h.value)-N.value)),Z=e.computed(()=>{if(t.items.length===0)return 0;const c=s.value+a.value-m.value,S=Math.max(G.value,c),T=B(S)+1;return Math.min(t.items.length,T+N.value)}),Q=e.computed(()=>t.items.slice(I.value,Z.value).map((c,S)=>{const T=I.value+S;return{item:c,index:T,key:X(c,T),top:O.value.offsets[T]}}));function te(){typeof window>"u"||(s.value=Math.max(0,window.scrollY),a.value=window.innerHeight,u.value&&(m.value=u.value.getBoundingClientRect().top+s.value))}function de(){v("scroll",{scrollTop:h.value,startIndex:I.value,endIndex:Z.value})}function A(c=!1){D&&(P||(P=c),!p&&(p=K(()=>{p=void 0,te(),P&&(P=!1,de()),l()})))}function U(){A(!0)}function i(){A()}function l(){if(typeof window>"u"||!t.hasMore||t.loading||H===t.items.length)return;const c=Math.max(0,t.loadMoreThreshold),S=m.value+ne.value,T=s.value+a.value;S-T<=c&&(H=t.items.length,v("loadMore"))}function n(c){const S=c.borderBoxSize;if(S){const T=Array.isArray(S)?S[0]:S;if(T!=null&&T.blockSize)return T.blockSize}return c.contentRect.height}function f(c){const S=O.value;let T=0,ae=!1;for(const Y of c){const he=Y.target,ge=_.get(he),we=n(Y);if(ge===void 0||we<=0)continue;const ke=R.get(ge)??G.value;if(Math.abs(ke-we)<.5)continue;const Se=se.value.get(ge);Se!==void 0&&S.offsets[Se+1]<=h.value&&(T+=we-ke),R.set(ge,we),ae=!0}ae&&(L.value+=1,e.nextTick(()=>{if(D){if(T!==0&&typeof window<"u"){const Y=Math.max(0,s.value+T);s.value=Y,window.scrollTo({top:Y,behavior:"auto"})}te(),l()}}))}function w(c){if(D){for(const S of c)j.set(S.target,S);k||(k=K(()=>{k=void 0;const S=Array.from(j.values());j.clear(),f(S)}))}}function me(c,S){c instanceof HTMLElement&&(_.set(c,S),z==null||z.observe(c))}function ue(){for(const[c]of _)c.isConnected||(z==null||z.unobserve(c),_.delete(c))}function ie(c,S={}){if(typeof window>"u")return;te();const T=Math.max(0,ne.value-a.value),ae=Math.min(Math.max(0,Number.isFinite(c)?c:0),T),Y=Math.max(0,m.value+ae),he=S.behavior??"auto";he==="auto"&&(s.value=Y),window.scrollTo({...S,top:Y,behavior:he})}function Te(c,S={}){if(typeof window>"u"||t.items.length===0)return;te();const T=Math.min(t.items.length-1,Math.max(0,Math.floor(c))),{align:ae="start",...Y}=S,he=O.value.sizes[T];let ge=m.value+O.value.offsets[T];ae==="center"?ge-=(a.value-he)/2:ae==="end"&&(ge-=a.value-he);const we=Math.max(m.value,m.value+ne.value-a.value),ke=Math.max(0,Math.min(ge,we)),Se=Y.behavior??"auto";Se==="auto"&&(s.value=ke),window.scrollTo({...Y,top:ke,behavior:Se})}function xe(c="auto"){typeof window>"u"||(te(),window.scrollTo({top:Math.max(0,m.value),behavior:c}))}return e.watch(()=>t.itemKey,()=>{R.clear(),L.value+=1,H=-1}),e.watch(()=>t.items.map((c,S)=>X(c,S)),async(c,S)=>{const T=c.length!==S.length||c.some((Y,he)=>Y!==S[he]),ae=new Set(c);for(const Y of R.keys())ae.has(Y)||R.delete(Y);T&&(H=-1),L.value+=1,await e.nextTick(),D&&(te(),l())}),e.watch(()=>[t.hasMore,t.loading],async([c])=>{c||(H=-1),await e.nextTick(),D&&(te(),l())}),e.onMounted(()=>{if(D=!0,te(),window.addEventListener("scroll",U,{passive:!0}),window.addEventListener("resize",i,{passive:!0}),typeof ResizeObserver<"u"){E=new ResizeObserver(()=>{A()}),z=new ResizeObserver(w),u.value&&E.observe(u.value);for(const[c]of _)z.observe(c)}e.nextTick(()=>{D&&l()})}),e.onUpdated(ue),e.onBeforeUnmount(()=>{D=!1,window.removeEventListener("scroll",U),window.removeEventListener("resize",i),b(p),b(k),p=void 0,k=void 0,P=!1,j.clear(),E&&(E.disconnect(),E=void 0),z&&(z.disconnect(),z=void 0),_.clear()}),C({scrollTo:ie,scrollToIndex:Te,scrollToTop:xe}),(c,S)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:u,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(q)}]),role:"list","aria-label":o.ariaLabel,onTouchstartPassive:S[0]||(S[0]=(...T)=>e.unref(g)&&e.unref(g)(...T)),onTouchmove:S[1]||(S[1]=(...T)=>e.unref(M)&&e.unref(M)(...T)),onTouchend:S[2]||(S[2]=(...T)=>e.unref(W)&&e.unref(W)(...T)),onTouchcancel:S[3]||(S[3]=(...T)=>e.unref(re)&&e.unref(re)(...T))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(le)}px`,transform:`translateY(${e.unref(J)-e.unref(le)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(c.$slots,"refresh",{pullDistance:e.unref($),progress:e.unref(F),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(ee)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${ne.value}px`,transform:`translateY(${e.unref(J)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Q.value,({item:T,index:ae,key:Y,top:he})=>(e.openBlock(),e.createElementBlock("div",{key:Y,ref_for:!0,ref:ge=>me(ge,Y),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${he}px)`}),role:"listitem","aria-posinset":ae+1,"aria-setsize":o.items.length},[e.renderSlot(c.$slots,"default",{item:T,index:ae})],12,mt))),128)),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${oe.value}px`,transform:`translateY(${O.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(c.$slots,"loading",{},()=>[S[4]||(S[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(J)}px)`})},[e.renderSlot(c.$slots,"empty")],4))],42,dt))}}),ft=["aria-label"],vt=["aria-posinset","aria-setsize"],Fe=e.defineComponent({name:"WindowGirdVirtualScroll",__name:"WindowGirdVirtualScroll",props:{items:{},itemSize:{},columns:{default:2},gap:{default:0},overscan:{default:1},itemKey:{default:void 0},ariaLabel:{default:"Window virtual grid"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:C,emit:x}){const t=o,v=x,u=e.ref(),s=e.ref(0),a=e.ref(0),m=e.ref(0);let L,R=-1;const{getItemKey:_}=be({componentName:"WindowGirdVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:j,pullDistance:E,pullOffset:z,pullProgress:p,refreshMessage:k,refreshThreshold:P,handleTouchStart:D,handleTouchMove:H,handleTouchEnd:X,handleTouchCancel:K}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>v("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),b=e.computed(()=>Math.max(1,t.itemSize)),q=e.computed(()=>Math.max(1,Math.floor(t.columns))),$=e.computed(()=>Math.max(0,t.gap)),J=e.computed(()=>Math.max(0,Math.floor(t.overscan))),F=e.computed(()=>Math.max(1,t.loadingItemSize??b.value)),ee=e.computed(()=>b.value+$.value),le=e.computed(()=>Math.ceil(t.items.length/q.value)),g=e.computed(()=>le.value===0?0:le.value*b.value+(le.value-1)*$.value),M=e.computed(()=>g.value+(t.items.length?$.value:0)),W=e.computed(()=>g.value+(t.loading?F.value+(t.items.length?$.value:0):0)),re=e.computed(()=>Math.max(0,s.value-m.value)),G=e.computed(()=>Math.max(0,Math.floor(re.value/ee.value)-J.value)),oe=e.computed(()=>{if(le.value===0)return 0;const A=Math.max(b.value,s.value+a.value-m.value),U=Math.ceil((A+$.value)/ee.value);return Math.min(le.value,U+J.value)}),N=e.computed(()=>Math.min(t.items.length,G.value*q.value)),O=e.computed(()=>Math.min(t.items.length,oe.value*q.value)),ne=e.computed(()=>t.items.slice(N.value,O.value).map((A,U)=>{const i=N.value+U;return{item:A,index:i,key:_(A,i),rowIndex:Math.floor(i/q.value),columnIndex:i%q.value}})),se=e.computed(()=>({gridTemplateColumns:`repeat(${q.value}, minmax(0, 1fr))`,columnGap:`${$.value}px`,rowGap:`${$.value}px`,transform:`translateY(${G.value*ee.value}px)`}));function h(){typeof window>"u"||(s.value=Math.max(0,window.scrollY),a.value=window.innerHeight,u.value&&(m.value=u.value.getBoundingClientRect().top+s.value))}function B(){v("scroll",{scrollTop:re.value,startIndex:N.value,endIndex:O.value})}function I(){h(),B(),Z()}function Z(){if(typeof window>"u"||!t.hasMore||t.loading||R===t.items.length)return;const A=Math.max(0,t.loadMoreThreshold),U=m.value+W.value,i=s.value+a.value;U-i<=A&&(R=t.items.length,v("loadMore"))}function Q(A,U={}){if(typeof window>"u")return;h();const i=Math.max(0,W.value-a.value),l=Math.min(Math.max(0,Number.isFinite(A)?A:0),i),n=Math.max(0,m.value+l),f=U.behavior??"auto";f==="auto"&&(s.value=n),window.scrollTo({...U,top:n,behavior:f})}function te(A,U={}){if(typeof window>"u"||t.items.length===0)return;h();const i=Math.min(t.items.length-1,Math.max(0,Math.floor(A))),l=Math.floor(i/q.value),{align:n="start",...f}=U;let w=m.value+l*ee.value;n==="center"?w-=(a.value-b.value)/2:n==="end"&&(w-=a.value-b.value);const me=Math.max(m.value,m.value+W.value-a.value),ue=Math.max(0,Math.min(w,me)),ie=f.behavior??"auto";ie==="auto"&&(s.value=ue),window.scrollTo({...f,top:ue,behavior:ie})}function de(A="auto"){typeof window>"u"||(h(),window.scrollTo({top:Math.max(0,m.value),behavior:A}))}return e.watch(()=>[t.items.length,t.itemSize,t.columns,t.gap],async()=>{await e.nextTick(),h(),Z()}),e.watch(()=>[t.hasMore,t.loading],async([A])=>{A||(R=-1),await e.nextTick(),h(),Z()}),e.onMounted(()=>{h(),window.addEventListener("scroll",I,{passive:!0}),window.addEventListener("resize",I,{passive:!0}),typeof ResizeObserver<"u"&&(L=new ResizeObserver(()=>{h(),Z()}),u.value&&L.observe(u.value)),e.nextTick(Z)}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",I),window.removeEventListener("resize",I),L&&(L.disconnect(),L=void 0)}),C({scrollTo:Q,scrollToIndex:te,scrollToTop:de}),(A,U)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:u,class:e.normalizeClass(["vue-window-gird-virtual-scroll",{"vue-window-gird-virtual-scroll--pulling":e.unref(j)}]),role:"list","aria-label":o.ariaLabel,onTouchstartPassive:U[0]||(U[0]=(...i)=>e.unref(D)&&e.unref(D)(...i)),onTouchmove:U[1]||(U[1]=(...i)=>e.unref(H)&&e.unref(H)(...i)),onTouchend:U[2]||(U[2]=(...i)=>e.unref(X)&&e.unref(X)(...i)),onTouchcancel:U[3]||(U[3]=(...i)=>e.unref(K)&&e.unref(K)(...i))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(P)}px`,transform:`translateY(${e.unref(z)-e.unref(P)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(A.$slots,"refresh",{pullDistance:e.unref(E),progress:e.unref(p),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(k)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-gird-virtual-scroll__spacer",style:e.normalizeStyle({height:`${W.value}px`,transform:`translateY(${e.unref(z)}px)`})},[e.createElementVNode("div",{class:"vue-window-gird-virtual-scroll__content",style:e.normalizeStyle(se.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ne.value,({item:i,index:l,key:n,rowIndex:f,columnIndex:w})=>(e.openBlock(),e.createElementBlock("div",{key:n,class:"vue-window-gird-virtual-scroll__item",style:e.normalizeStyle({height:`${b.value}px`}),role:"listitem","aria-posinset":l+1,"aria-setsize":o.items.length},[e.renderSlot(A.$slots,"default",{item:i,index:l,rowIndex:f,columnIndex:w})],12,vt))),128))],4),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__loading",style:e.normalizeStyle({height:`${F.value}px`,transform:`translateY(${M.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(A.$slots,"loading",{},()=>[U[4]||(U[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-gird-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(z)}px)`})},[e.renderSlot(A.$slots,"empty")],4))],42,ft))}}),We=Ce,Ye={install(o){o.component("ChatVirtualScroll",Ne),o.component("DynamicVirtualScroll",Ce),o.component("ShortMediaFeed",Oe),o.component("SkeletonLoader",Ke),o.component("VirtualCarousel",Pe),o.component("VirtualList",We),o.component("VirtualScroll",Ae),o.component("WindowDynamicVirtualScroll",De),o.component("WindowGirdVirtualScroll",Fe)}};exports.ChatVirtualScroll=Ne;exports.DynamicVirtualScroll=Ce;exports.ShortMediaFeed=Oe;exports.SkeletonLoader=Ke;exports.VirtualCarousel=Pe;exports.VirtualList=We;exports.VirtualScroll=Ae;exports.VueVirtualScroll=Ye;exports.WindowDynamicVirtualScroll=De;exports.WindowGirdVirtualScroll=Fe;exports.default=Ye;
@@ -1 +1 @@
1
- .vue-skeleton-loader[data-v-fc92f61f]{position:relative;flex-shrink:0;overflow:hidden;box-sizing:border-box;background:var(--skeleton-background, #e2e8f0)}.vue-skeleton-loader--rounded[data-v-fc92f61f]{border-radius:var(--skeleton-radius, 8px)}.vue-skeleton-loader--circle[data-v-fc92f61f]{border-radius:50%}.vue-skeleton-loader--animated[data-v-fc92f61f]:after{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,var(--skeleton-highlight, rgb(255 255 255 / 60%)),transparent);transform:translate(-100%);animation:skeleton-shimmer-fc92f61f 1.5s ease-in-out infinite;content:""}@keyframes skeleton-shimmer-fc92f61f{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.vue-skeleton-loader--animated[data-v-fc92f61f]:after{animation:none;content:none}}.vue-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-dynamic-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-window-dynamic-virtual-scroll,.vue-window-gird-virtual-scroll{position:relative;width:100%;box-sizing:border-box;overflow-anchor:none}.vue-chat-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-short-media-feed{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;overscroll-behavior:contain;overflow-anchor:none;scroll-snap-type:y mandatory;scrollbar-width:none;touch-action:pan-y;-webkit-overflow-scrolling:touch}.vue-short-media-feed::-webkit-scrollbar{display:none}.vue-short-media-feed__item{position:relative;width:100%;min-height:1px;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-short-media-feed__spacer{width:100%;pointer-events:none}.vue-short-media-feed__empty{width:100%;height:100%}.vue-virtual-carousel{position:relative;width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;box-sizing:border-box;overscroll-behavior-x:contain;overflow-anchor:none;scroll-snap-type:x mandatory;scrollbar-width:none;touch-action:pan-x;-webkit-overflow-scrolling:touch}.vue-virtual-carousel::-webkit-scrollbar{display:none}.vue-virtual-carousel__track{display:flex;align-items:stretch;width:max-content;min-width:100%;height:100%}.vue-virtual-carousel__item{position:relative;flex-grow:0;flex-shrink:0;min-width:1px;height:100%;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-virtual-carousel__spacer{flex-grow:0;flex-shrink:0;width:0;pointer-events:none}.vue-virtual-carousel__empty{width:100%;height:100%}.vue-virtual-scroll__spacer{position:relative;width:100%;pointer-events:none}.vue-virtual-scroll__content{position:absolute;inset:0 0 auto;width:100%;will-change:transform;pointer-events:auto}.vue-virtual-scroll__item{width:100%;overflow:hidden;box-sizing:border-box}.vue-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll__spacer,.vue-window-gird-virtual-scroll__spacer{position:relative;width:100%}.vue-window-gird-virtual-scroll__content{position:absolute;inset:0 0 auto;display:grid;width:100%;box-sizing:border-box;will-change:transform}.vue-window-gird-virtual-scroll__item{min-width:0;overflow:hidden;box-sizing:border-box}.vue-chat-virtual-scroll__spacer{position:relative;width:100%}.vue-dynamic-virtual-scroll__item,.vue-window-dynamic-virtual-scroll__item,.vue-chat-virtual-scroll__item{position:absolute;inset:0 0 auto;display:flow-root;width:100%;box-sizing:border-box;will-change:transform}.vue-chat-virtual-scroll__loading-older{position:sticky;top:0;z-index:2;height:0;color:#64748b;font-size:.875rem;font-weight:600;text-align:center;pointer-events:none}.vue-chat-virtual-scroll__loading-older>div{display:inline-flex;align-items:center;justify-content:center;min-height:2.5rem;padding:0 1rem;background:#ffffffeb;border-radius:999px;box-shadow:0 2px 12px #0f172a1a}.vue-virtual-scroll__loading,.vue-dynamic-virtual-scroll__loading,.vue-window-dynamic-virtual-scroll__loading,.vue-window-gird-virtual-scroll__loading{position:absolute;inset:0 0 auto;display:flex;align-items:center;justify-content:center;width:100%;padding:.75rem;color:#64748b;box-sizing:border-box}.vue-virtual-scroll__refresh,.vue-dynamic-virtual-scroll__refresh,.vue-window-dynamic-virtual-scroll__refresh,.vue-window-gird-virtual-scroll__refresh{position:absolute;inset:0 0 auto;z-index:1;display:flex;align-items:center;justify-content:center;width:100%;color:#475569;font-size:.875rem;font-weight:600;box-sizing:border-box;pointer-events:none;transition:transform .18s ease}.vue-virtual-scroll__spacer,.vue-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll__spacer,.vue-window-gird-virtual-scroll__spacer,.vue-virtual-scroll__empty,.vue-dynamic-virtual-scroll__empty,.vue-window-dynamic-virtual-scroll__empty,.vue-window-gird-virtual-scroll__empty{transition:transform .18s ease}.vue-virtual-scroll--pulling .vue-virtual-scroll__refresh,.vue-virtual-scroll--pulling .vue-virtual-scroll__spacer,.vue-virtual-scroll--pulling .vue-virtual-scroll__empty,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__refresh,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__spacer,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__empty,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__refresh,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__empty,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__refresh,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__spacer,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__empty{transition:none}
1
+ .vue-skeleton-loader[data-v-fc92f61f]{position:relative;flex-shrink:0;overflow:hidden;box-sizing:border-box;background:var(--skeleton-background, #e2e8f0)}.vue-skeleton-loader--rounded[data-v-fc92f61f]{border-radius:var(--skeleton-radius, 8px)}.vue-skeleton-loader--circle[data-v-fc92f61f]{border-radius:50%}.vue-skeleton-loader--animated[data-v-fc92f61f]:after{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,var(--skeleton-highlight, rgb(255 255 255 / 60%)),transparent);transform:translate(-100%);animation:skeleton-shimmer-fc92f61f 1.5s ease-in-out infinite;content:""}@keyframes skeleton-shimmer-fc92f61f{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.vue-skeleton-loader--animated[data-v-fc92f61f]:after{animation:none;content:none}}.vue-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-dynamic-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-window-dynamic-virtual-scroll,.vue-window-gird-virtual-scroll{position:relative;width:100%;box-sizing:border-box;overflow-anchor:none}.vue-chat-virtual-scroll{display:flex;flex-direction:column-reverse;position:relative;width:100%;overflow:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-short-media-feed{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;overscroll-behavior:contain;overflow-anchor:none;scroll-snap-type:y mandatory;scrollbar-width:none;touch-action:pan-y;-webkit-overflow-scrolling:touch}.vue-short-media-feed::-webkit-scrollbar{display:none}.vue-short-media-feed__item{position:relative;width:100%;min-height:1px;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-short-media-feed__spacer{width:100%;pointer-events:none}.vue-short-media-feed__empty{width:100%;height:100%}.vue-virtual-carousel{position:relative;width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;box-sizing:border-box;overscroll-behavior-x:contain;overflow-anchor:none;scroll-snap-type:x mandatory;scrollbar-width:none;touch-action:pan-x;-webkit-overflow-scrolling:touch}.vue-virtual-carousel::-webkit-scrollbar{display:none}.vue-virtual-carousel__track{display:flex;align-items:stretch;width:max-content;min-width:100%;height:100%}.vue-virtual-carousel__item{position:relative;flex-grow:0;flex-shrink:0;min-width:1px;height:100%;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-virtual-carousel__spacer{flex-grow:0;flex-shrink:0;width:0;pointer-events:none}.vue-virtual-carousel__empty{width:100%;height:100%}.vue-virtual-scroll__spacer{position:relative;width:100%;pointer-events:none}.vue-virtual-scroll__content{position:absolute;inset:0 0 auto;width:100%;will-change:transform;pointer-events:auto}.vue-virtual-scroll__item{width:100%;overflow:hidden;box-sizing:border-box}.vue-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll__spacer,.vue-window-gird-virtual-scroll__spacer{position:relative;width:100%}.vue-window-gird-virtual-scroll__content{position:absolute;inset:0 0 auto;display:grid;width:100%;box-sizing:border-box;will-change:transform}.vue-window-gird-virtual-scroll__item{min-width:0;overflow:hidden;box-sizing:border-box}.vue-chat-virtual-scroll__spacer{flex:0 0 auto;overflow:hidden;overflow:clip;position:relative;width:100%}.vue-dynamic-virtual-scroll__item,.vue-window-dynamic-virtual-scroll__item{position:absolute;inset:0 0 auto;display:flow-root;width:100%;box-sizing:border-box;will-change:transform}.vue-chat-virtual-scroll__item{position:absolute;inset:auto 0 0;display:flow-root;width:100%;box-sizing:border-box;will-change:transform}.vue-chat-virtual-scroll__loading-older{width:100%;position:sticky;top:0;z-index:2;height:0;color:#64748b;font-size:.875rem;font-weight:600;text-align:center;pointer-events:none}.vue-chat-virtual-scroll__loading-older>div{display:inline-flex;align-items:center;justify-content:center;min-height:2.5rem;padding:0 1rem;background:#ffffffeb;border-radius:999px;box-shadow:0 2px 12px #0f172a1a}.vue-virtual-scroll__loading,.vue-dynamic-virtual-scroll__loading,.vue-window-dynamic-virtual-scroll__loading,.vue-window-gird-virtual-scroll__loading{position:absolute;inset:0 0 auto;display:flex;align-items:center;justify-content:center;width:100%;padding:.75rem;color:#64748b;box-sizing:border-box}.vue-virtual-scroll__refresh,.vue-dynamic-virtual-scroll__refresh,.vue-window-dynamic-virtual-scroll__refresh,.vue-window-gird-virtual-scroll__refresh{position:absolute;inset:0 0 auto;z-index:1;display:flex;align-items:center;justify-content:center;width:100%;color:#475569;font-size:.875rem;font-weight:600;box-sizing:border-box;pointer-events:none;transition:transform .18s ease}.vue-virtual-scroll__spacer,.vue-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll__spacer,.vue-window-gird-virtual-scroll__spacer,.vue-virtual-scroll__empty,.vue-dynamic-virtual-scroll__empty,.vue-window-dynamic-virtual-scroll__empty,.vue-window-gird-virtual-scroll__empty{transition:transform .18s ease}.vue-virtual-scroll--pulling .vue-virtual-scroll__refresh,.vue-virtual-scroll--pulling .vue-virtual-scroll__spacer,.vue-virtual-scroll--pulling .vue-virtual-scroll__empty,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__refresh,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__spacer,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__empty,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__refresh,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__empty,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__refresh,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__spacer,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__empty{transition:none}