vue-virtual-flow 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
 
@@ -707,8 +720,11 @@ These keys work while the viewport is focused:
707
720
  | `Home` | Moves to the first position. |
708
721
  | `End` | Moves to the last item. |
709
722
 
710
- For an unbounded feed, page data with `load-more` and keep a reasonable item
711
- window in the parent. Virtualization limits mounted DOM and media elements,
723
+ The viewport also converts mouse-wheel input into slide transitions. The wheel
724
+ handler in the component is enabled by default; nothing extra is required from
725
+ the parent. For touch input, native scroll-snap continues to handle swipes.
726
+
727
+ For an unbounded feed, page data with `load-more` and handle parents. Virtualization limits mounted DOM and media elements,
712
728
  but it does not remove objects from `items`.
713
729
 
714
730
  ### VirtualCarousel
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
 
@@ -707,6 +720,10 @@ Các phím sau hoạt động khi viewport có focus:
707
720
  | `Home` | Chuyển tới vị trí đầu. |
708
721
  | `End` | Chuyển tới item cuối. |
709
722
 
723
+ Viewport còn chuyển cả input bánh xe chuột thành chuyển slide. Handler wheel đã
724
+ bật sẵn trong component, parent không phải làm gì thêm. Còn touch để trackpad
725
+ snap gốc của trình duyệt xử lý.
726
+
710
727
  Với feed không giới hạn, hãy tải theo trang bằng `load-more` và chỉ giữ một cửa
711
728
  sổ dữ liệu hợp lý ở component cha. Virtualization giới hạn DOM và media element
712
729
  đang mount, nhưng không xóa object khỏi `items`.
@@ -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 He(n){return typeof n=="string"||typeof n=="number"||typeof n=="symbol"}function we(n,P){const B=n[P];return He(B)?B:void 0}function Re(n){return we(n,"id")??we(n,"key")}function pe(n){function P(t,g){const m=n.itemKey();if(typeof m=="function")return m(t,g);if(t!==null&&typeof t=="object"){if(m!==void 0){const s=we(t,m);if(s!==void 0)return s}const w=Re(t);if(w!==void 0)return w}return g}function B(){}return e.watch(()=>[n.itemKey(),n.items()],B,{immediate:!0}),{getItemKey:P}}function ge(n){return n==="fill"?"100%":typeof n=="number"?`${n}px`:n}function xe(n){return(P,B)=>{typeof B=="string"&&(B==="fill"||B.trim().endsWith("%"))}}const Oe=["aria-label"],Ne={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},Ke=["aria-posinset","aria-setsize"],be=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(n,{expose:P,emit:B}){const t=n,g=B,m=e.ref(),w=e.ref(0),s=e.ref(0),I=e.ref(0),F=e.ref(0),R=e.ref(!0),O=new Map,W=new Map;let z,p,T=-1,x=!1,C=!1,$=!1,N,L=0,G=!1,k=0;const j=xe(),{getItemKey:E}=pe({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),Y=e.computed(()=>Math.max(1,t.estimatedItemSize)),Z=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),J=e.computed(()=>I.value>0?I.value:typeof t.height=="number"?Math.max(0,t.height):Y.value),d=e.computed(()=>{F.value;const l=new Array(t.items.length+1),r=new Array(t.items.length);l[0]=0;for(let u=0;u<t.items.length;u+=1){const h=E(t.items[u],u),V=O.get(h)??Y.value;r[u]=V,l[u+1]=l[u]+V}return{offsets:l,sizes:r,total:l[t.items.length]??0}}),y=e.computed(()=>{const l=new Map;return t.items.forEach((r,u)=>{l.set(E(r,u),u)}),l});function H(l){if(t.items.length===0)return 0;const r=d.value.offsets;let u=0,h=t.items.length;for(;u<h;){const V=Math.floor((u+h)/2);r[V+1]<=l?u=V+1:h=V}return Math.min(u,t.items.length-1)}const ne=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const l=H(w.value),r=H(w.value+J.value)+1,u=Math.max(0,l-Z.value),h=Math.min(t.items.length,r+Z.value),V=re.value;if(V===void 0||h-u<=V)return{start:u,end:h};const _=Math.max(0,V-(r-l)),ee=l-u,le=h-r;let oe=Math.min(ee,Math.ceil(_/2));const he=Math.min(le,_-oe);return oe=Math.min(ee,_-he),{start:l-oe,end:r+he}}),q=e.computed(()=>ne.value.start),ce=e.computed(()=>ne.value.end),Q=e.computed(()=>t.items.slice(q.value,ce.value).map((l,r)=>{const u=q.value+r;return{item:l,index:u,key:E(l,u),top:d.value.offsets[u]-s.value}})),ae=e.computed(()=>({height:ge(t.height)}));function U(){var l;return(((l=m.value)==null?void 0:l.scrollTop)??0)+L}function ie(){G||(G=!0,e.nextTick(()=>{G=!1;const l=m.value;!l||$||L===0||(L=0,l.scrollTop=w.value,w.value=l.scrollTop,te(),i())}))}function v(l){!m.value||l===0||(L+=l,w.value=U(),$?s.value=L:ie())}function M(){clearTimeout(N),N=void 0}function S(){C||(M(),$=!1,w.value=U(),s.value=0,ie())}function D(){M(),$&&!C&&(N=setTimeout(S,150))}function de(){M(),C=!0,$=!0,s.value=L}function X(l){C=l.touches.length>0,D()}function te(){const l=m.value;if(!l)return;const u=Math.max(0,d.value.total-U()-l.clientHeight)<=Math.max(0,t.bottomThreshold);u!==R.value&&(R.value=u,x&&g("bottomChange",u))}function K(){var l;I.value=((l=m.value)==null?void 0:l.clientHeight)??0,j(m.value,t.height),e.nextTick(()=>{te(),i()})}function A(){var l;L<0&&U()<0&&(L=-Math.max(0,((l=m.value)==null?void 0:l.scrollTop)??0),$&&(s.value=L)),w.value=U(),D(),te(),g("scroll",{scrollTop:w.value,startIndex:q.value,endIndex:ce.value}),i()}function i(){const l=m.value;!x||!l||!t.hasOlder||t.loadingOlder||T===t.items.length||U()<=Math.max(0,t.loadOlderThreshold)&&(T=t.items.length,g("loadOlder"))}function o(l){const r=l.borderBoxSize;if(r){const u=Array.isArray(r)?r[0]:r;if(u!=null&&u.blockSize)return u.blockSize}return l.contentRect.height}function a(l){const r=d.value,u=U(),h=!$&&R.value&&t.stickToBottom;let V=0,_=!1;for(const le of l){const oe=le.target,he=W.get(oe),ye=o(le);if(he===void 0||ye<=0)continue;const Se=O.get(he)??Y.value;if(Math.abs(Se-ye)<.5)continue;const ke=y.value.get(he);ke!==void 0&&r.offsets[ke+1]<=u&&(V+=ye-Se),O.set(he,ye),_=!0}if(!_)return;F.value+=1;const ee=m.value;ee&&(v(h?Math.max(0,d.value.total-ee.clientHeight)-u:V),e.nextTick(te))}function f(l,r){l instanceof HTMLElement&&W.get(l)!==r&&(W.set(l,r),p==null||p.observe(l))}function b(){for(const[l]of W)l.isConnected||(p==null||p.unobserve(l),W.delete(l))}function se(l,r,u=!1){const h=m.value;if(!h)return;const V=U(),_=s.value!==0,ee=++k,le=r.behavior??"auto";L=0,s.value=0,$=!1,M(),le==="auto"&&(w.value=l);const oe=()=>{m.value!==h||ee!==k||(_&&le!=="auto"&&(h.scrollTop=V),u&&le==="auto"?h.scrollTop=l:h.scrollTo({...r,top:l,behavior:le}),e.nextTick(te))};_?e.nextTick(oe):oe()}function ue(l,r={}){const u=m.value;if(!u)return;const h=Math.max(0,d.value.total-u.clientHeight),V=Math.min(Math.max(0,Number.isFinite(l)?l:0),h);se(V,r)}function me(l,r={}){const u=m.value;if(!u||t.items.length===0)return;const h=Math.min(t.items.length-1,Math.max(0,Math.floor(l))),{align:V="start",..._}=r,ee=d.value.sizes[h];let le=d.value.offsets[h];V==="center"?le-=(u.clientHeight-ee)/2:V==="end"&&(le-=u.clientHeight-ee);const oe=Math.max(0,Math.min(le,d.value.total-u.clientHeight));se(oe,_)}function ve(l="auto"){se(0,{behavior:l})}function fe(l="auto"){const r=m.value;if(!r)return;const u=Math.max(0,d.value.total-r.clientHeight);se(u,{behavior:l},!0)}let c=t.items.map((l,r)=>E(l,r));return e.watch(()=>t.items.map((l,r)=>E(l,r)),async l=>{const r=c;c=l;const u=m.value,h=!$&&R.value&&t.stickToBottom,V=r[0],_=V===void 0?0:l.indexOf(V),ee=_>0?l.slice(0,_).reduce((oe,he)=>oe+(O.get(he)??Y.value),0):0,le=new Set(l);for(const oe of O.keys())le.has(oe)||O.delete(oe);F.value+=1,ee>0?v(ee):u&&l.length>r.length&&h?v(Math.max(0,d.value.total-u.clientHeight)-U()):(l.length===0||_<0)&&(L=0,s.value=0),await e.nextTick(),m.value&&(w.value=U(),te(),i())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([l])=>{l||(T=-1),await e.nextTick(),i()}),e.onMounted(()=>{if(K(),typeof ResizeObserver<"u"){z=new ResizeObserver(K),p=new ResizeObserver(a),m.value&&z.observe(m.value);for(const[l]of W)p.observe(l)}e.nextTick(()=>{t.initialScroll==="bottom"&&fe("auto"),x=!0,te(),i()})}),e.onUpdated(b),e.onBeforeUnmount(()=>{x=!1,M(),L=0,k+=1,z&&(z.disconnect(),z=void 0),p&&(p.disconnect(),p=void 0),W.clear()}),P({isAtBottom:R,scrollTo:ue,scrollToIndex:me,scrollToTop:ve,scrollToBottom:fe}),(l,r)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:m,class:"vue-chat-virtual-scroll",style:e.normalizeStyle(ae.value),role:"log","aria-label":n.ariaLabel,"aria-live":"polite",tabindex:"0",onScrollPassive:A,onScrollendPassive:S,onTouchstartPassive:de,onTouchendPassive:X,onTouchcancelPassive:X},[n.loadingOlder?(e.openBlock(),e.createElementBlock("div",Ne,[e.createElementVNode("div",null,[e.renderSlot(l.$slots,"loadingOlder",{},()=>[r[0]||(r[0]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),n.items.length?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${Math.max(0,d.value.total-s.value)}px`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Q.value,({item:u,index:h,key:V,top:_})=>(e.openBlock(),e.createElementBlock("div",{key:V,ref_for:!0,ref:ee=>f(ee,V),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${_}px)`}),role:"article","aria-posinset":h+1,"aria-setsize":n.items.length},[e.renderSlot(l.$slots,"default",{item:u,index:h})],12,Ke))),128))],4)):e.renderSlot(l.$slots,"empty",{},void 0,void 0,2)],44,Oe))}});function Me(n){const P=e.ref(),B=e.ref(0),t=e.ref(!1),g=e.ref(!1),m=e.computed(()=>Math.max(1,n.threshold())),w=e.computed(()=>n.refreshing()||g.value?m.value:B.value),s=e.computed(()=>Math.min(1,B.value/m.value)),I=e.computed(()=>n.refreshing()||g.value?"Refreshing…":s.value>=1?"Release to refresh":"Pull to refresh");function F(){P.value=void 0,t.value=!1,B.value=0}function R(z){var x;const p=z.currentTarget,T=((x=n.scrollTop)==null?void 0:x.call(n))??p.scrollTop;!n.enabled()||n.refreshing()||T>0||z.touches.length!==1||(P.value=z.touches[0].clientY,t.value=!0)}function O(z){var C;if(P.value===void 0||!t.value)return;const p=z.currentTarget;if((((C=n.scrollTop)==null?void 0:C.call(n))??p.scrollTop)>0||z.touches.length!==1){F();return}const x=z.touches[0].clientY-P.value;if(x<=0){B.value=0;return}z.preventDefault(),B.value=Math.min(x*.5,m.value*2)}function W(){if(P.value===void 0)return;const z=B.value>=m.value&&n.enabled()&&!n.refreshing();if(P.value=void 0,t.value=!1,!z){B.value=0;return}B.value=m.value,g.value=!0,n.onRefresh(),e.nextTick(()=>{n.refreshing()||(g.value=!1,B.value=0)})}return e.watch(()=>n.refreshing(),(z,p)=>{z?(g.value=!1,B.value=m.value):p&&(g.value=!1,B.value=0)}),{pulling:t,pullDistance:B,pullOffset:w,pullProgress:s,refreshMessage:I,refreshThreshold:m,handleTouchStart:R,handleTouchMove:O,handleTouchEnd:W,handleTouchCancel:F}}const Pe=["aria-label"],De=["aria-posinset","aria-setsize"],Te=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(n,{expose:P,emit:B}){const t=n,g=B,{pulling:m,pullDistance:w,pullOffset:s,pullProgress:I,refreshMessage:F,refreshThreshold:R,handleTouchStart:O,handleTouchMove:W,handleTouchEnd:z,handleTouchCancel:p}=Me({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>g("refresh")}),T=e.ref(),x=e.ref(0),C=e.ref(0),$=e.ref(0),N=new Map,L=new Map;let G,k,j=-1;const E=xe(),{getItemKey:Y}=pe({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),Z=e.computed(()=>Math.max(1,t.estimatedItemSize)),re=e.computed(()=>Math.max(1,t.loadingItemSize??Z.value)),J=e.computed(()=>Math.max(0,Math.floor(t.overscan))),d=e.computed(()=>C.value>0?C.value:typeof t.height=="number"?Math.max(0,t.height):Z.value),y=e.computed(()=>{$.value;const i=new Array(t.items.length+1),o=new Array(t.items.length);i[0]=0;for(let a=0;a<t.items.length;a+=1){const f=Y(t.items[a],a),b=N.get(f)??Z.value;o[a]=b,i[a+1]=i[a]+b}return{offsets:i,sizes:o,total:i[t.items.length]??0}}),H=e.computed(()=>y.value.total+(t.loading?re.value:0)),ne=e.computed(()=>{const i=new Map;return t.items.forEach((o,a)=>{i.set(Y(o,a),a)}),i});function q(i){if(t.items.length===0)return 0;const o=y.value.offsets;let a=0,f=t.items.length;for(;a<f;){const b=Math.floor((a+f)/2);o[b+1]<=i?a=b+1:f=b}return Math.min(a,t.items.length-1)}const ce=e.computed(()=>Math.max(0,q(x.value)-J.value)),Q=e.computed(()=>{if(t.items.length===0)return 0;const i=q(x.value+d.value)+1;return Math.min(t.items.length,i+J.value)}),ae=e.computed(()=>t.items.slice(ce.value,Q.value).map((i,o)=>{const a=ce.value+o;return{item:i,index:a,key:Y(i,a),top:y.value.offsets[a]}})),U=e.computed(()=>({height:ge(t.height)}));function ie(){var i;C.value=((i=T.value)==null?void 0:i.clientHeight)??0,E(T.value,t.height),e.nextTick(M)}function v(i){x.value=i.currentTarget.scrollTop,g("scroll",{scrollTop:x.value,startIndex:ce.value,endIndex:Q.value}),M()}function M(){const i=T.value;if(!i||!t.hasMore||t.loading||j===t.items.length)return;const o=Math.max(0,t.loadMoreThreshold);H.value-i.scrollTop-i.clientHeight<=o&&(j=t.items.length,g("loadMore"))}function S(i){const o=i.borderBoxSize;if(o){const a=Array.isArray(o)?o[0]:o;if(a!=null&&a.blockSize)return a.blockSize}return i.contentRect.height}function D(i){const o=y.value;let a=0,f=!1;for(const b of i){const se=b.target,ue=L.get(se),me=S(b);if(ue===void 0||me<=0)continue;const ve=N.get(ue)??Z.value;if(Math.abs(ve-me)<.5)continue;const fe=ne.value.get(ue);fe!==void 0&&o.offsets[fe+1]<=x.value&&(a+=me-ve),N.set(ue,me),f=!0}f&&($.value+=1,e.nextTick(M),a!==0&&e.nextTick(()=>{const b=T.value;b&&(b.scrollTop+=a,x.value=b.scrollTop)}))}function de(i,o){i instanceof HTMLElement&&(L.set(i,o),k==null||k.observe(i))}function X(){for(const[i]of L)i.isConnected||(k==null||k.unobserve(i),L.delete(i))}function te(i,o={}){const a=T.value;if(!a)return;const f=Math.max(0,H.value-a.clientHeight),b=Math.min(Math.max(0,Number.isFinite(i)?i:0),f),se=o.behavior??"auto";se==="auto"&&(x.value=b),a.scrollTo({...o,top:b,behavior:se})}function K(i,o={}){const a=T.value;if(!a||t.items.length===0)return;const f=Math.min(t.items.length-1,Math.max(0,Math.floor(i))),{align:b="start",...se}=o;let ue=y.value.offsets[f];const me=y.value.sizes[f];b==="center"?ue-=(a.clientHeight-me)/2:b==="end"&&(ue-=a.clientHeight-me);const ve=Math.max(0,Math.min(ue,H.value-a.clientHeight)),fe=se.behavior??"auto";fe==="auto"&&(x.value=ve),a.scrollTo({...se,top:ve,behavior:fe})}function A(i="auto"){var o;(o=T.value)==null||o.scrollTo({top:0,behavior:i})}return e.watch(()=>t.itemKey,()=>{N.clear(),$.value+=1}),e.watch(()=>t.items.length,async()=>{const i=new Set(t.items.map((f,b)=>Y(f,b)));for(const f of N.keys())i.has(f)||N.delete(f);$.value+=1,await e.nextTick();const o=T.value;if(!o)return;const a=Math.max(0,H.value-o.clientHeight);o.scrollTop>a&&(o.scrollTop=a,x.value=a),M()}),e.watch(()=>[t.hasMore,t.loading],async([i])=>{i||(j=-1),await e.nextTick(),M()}),e.onMounted(()=>{if(ie(),typeof ResizeObserver<"u"){G=new ResizeObserver(ie),k=new ResizeObserver(D),T.value&&G.observe(T.value);for(const[i]of L)k.observe(i)}e.nextTick(M)}),e.onUpdated(X),e.onBeforeUnmount(()=>{G&&(G.disconnect(),G=void 0),k&&(k.disconnect(),k=void 0),L.clear()}),P({scrollTo:te,scrollToIndex:K,scrollToTop:A}),(i,o)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:T,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(m)}]),style:e.normalizeStyle(U.value),role:"list","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:v,onTouchstartPassive:o[0]||(o[0]=(...a)=>e.unref(O)&&e.unref(O)(...a)),onTouchmove:o[1]||(o[1]=(...a)=>e.unref(W)&&e.unref(W)(...a)),onTouchend:o[2]||(o[2]=(...a)=>e.unref(z)&&e.unref(z)(...a)),onTouchcancel:o[3]||(o[3]=(...a)=>e.unref(p)&&e.unref(p)(...a))},[n.pullToRefresh||n.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(s)-e.unref(R)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(i.$slots,"refresh",{pullDistance:e.unref(w),progress:e.unref(I),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(F)),1)])],4)):e.createCommentVNode("",!0),n.items.length||n.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${H.value}px`,transform:`translateY(${e.unref(s)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ae.value,({item:a,index:f,key:b,top:se})=>(e.openBlock(),e.createElementBlock("div",{key:b,ref_for:!0,ref:ue=>de(ue,b),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${se}px)`}),role:"listitem","aria-posinset":f+1,"aria-setsize":n.items.length},[e.renderSlot(i.$slots,"default",{item:a,index:f})],12,De))),128)),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${re.value}px`,transform:`translateY(${y.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(i.$slots,"loading",{},()=>[o[4]||(o[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(s)}px)`})},[e.renderSlot(i.$slots,"empty")],4))],46,Pe))}}),Ae=["aria-label"],Fe=["aria-current","aria-posinset","aria-setsize"],We={key:1,class:"vue-short-media-feed__empty"},ze=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(n,{expose:P,emit:B}){const t=n,g=B,m=e.ref(),w=e.ref(0),s=e.ref(G(t.activeIndex));let I,F=-1;const R=xe(),{getItemKey:O}=pe({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),W=e.computed(()=>Math.max(0,Math.floor(t.buffer))),z=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),p=e.computed(()=>w.value>0?w.value:typeof t.height=="number"?Math.max(1,t.height):0),T=e.computed(()=>Math.max(0,s.value-W.value)),x=e.computed(()=>Math.min(t.items.length,s.value+W.value+1)),C=e.computed(()=>t.items.slice(T.value,x.value).map((d,y)=>({item:d,index:T.value+y}))),$=e.computed(()=>T.value*p.value),N=e.computed(()=>(t.items.length-x.value)*p.value),L=e.computed(()=>({height:ge(t.height)}));function G(d){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(d)?d:0)))}function k(){if(!t.hasMore||t.loading||F===t.items.length)return;(t.items.length===0?0:t.items.length-1-s.value)<=z.value&&(F=t.items.length,g("loadMore"))}function j(d){const y=G(d);y===s.value||t.items.length===0||(s.value=y,g("update:activeIndex",y),g("change",{index:y,item:t.items[y]}),y===0&&g("reachStart"),y===t.items.length-1&&g("reachEnd"),k())}function E(d,y={}){const H=m.value;H&&(typeof H.scrollTo=="function"?H.scrollTo({...y,top:d}):H.scrollTop=d)}function Y(d,y={}){if(t.items.length===0)return;const H=G(d);j(H),E(H*p.value,y)}function Z(d){if(p.value<=0)return;const y=d.currentTarget.scrollTop;j(Math.round(y/p.value))}function re(d){let y;d.key==="ArrowDown"||d.key==="PageDown"?y=s.value+1:d.key==="ArrowUp"||d.key==="PageUp"?y=s.value-1:d.key==="Home"?y=0:d.key==="End"&&(y=t.items.length-1),y!==void 0&&(d.preventDefault(),Y(y,{behavior:"smooth"}))}function J(){var y;const d=((y=m.value)==null?void 0:y.clientHeight)??0;R(m.value,t.height),!(d<=0||d===w.value)&&(w.value=d,e.nextTick(()=>{E(s.value*d)}))}return e.watch(()=>t.activeIndex,async d=>{const y=G(d);y!==s.value&&(s.value=y,await e.nextTick(),E(y*p.value),k())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([d])=>{d||(F=-1),await e.nextTick(),k()}),e.watch(()=>t.items.length,async()=>{const d=G(s.value);t.items.length===0?s.value!==0&&(s.value=0,g("update:activeIndex",0)):j(d),await e.nextTick(),E(d*p.value),k()}),e.onMounted(async()=>{J(),typeof ResizeObserver<"u"&&m.value&&(I=new ResizeObserver(J),I.observe(m.value)),await e.nextTick(),E(s.value*p.value),k()}),e.onBeforeUnmount(()=>{I&&(I.disconnect(),I=void 0)}),P({scrollToIndex:Y}),(d,y)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:m,class:"vue-short-media-feed",style:e.normalizeStyle(L.value),role:"list","aria-orientation":"vertical","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:Z,onKeydown:re},[n.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[$.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${$.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,({item:H,index:ne})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(O)(H,ne),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${p.value}px`}),role:"listitem","aria-current":ne===s.value?"true":void 0,"aria-posinset":ne+1,"aria-setsize":n.items.length},[e.renderSlot(d.$slots,"default",{item:H,index:ne,active:ne===s.value})],12,Fe))),128)),N.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${N.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",We,[e.renderSlot(d.$slots,"empty")]))],44,Ae))}}),Ye=["aria-label"],Ue=e.defineComponent({__name:"SkeletonLoader",props:{width:{default:"100%"},height:{default:16},variant:{default:"rounded"},animated:{type:Boolean,default:!0},ariaLabel:{default:"Loading…"}},setup(n){const P=n;function B(g){return typeof g=="number"?`${Math.max(0,g)}px`:g}const t=e.computed(()=>({width:B(P.width),height:B(P.height)}));return(g,m)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vue-skeleton-loader",[`vue-skeleton-loader--${n.variant}`,{"vue-skeleton-loader--animated":n.animated}]]),style:e.normalizeStyle(t.value),role:"status","aria-label":n.ariaLabel},null,14,Ye))}}),_e=(n,P)=>{const B=n.__vccOpts||n;for(const[t,g]of P)B[t]=g;return B},Be=_e(Ue,[["__scopeId","data-v-fc92f61f"]]),je=["aria-label"],Ge={key:0,class:"vue-virtual-carousel__track",role:"list"},qe=["aria-label","aria-current"],Ze={key:1,class:"vue-virtual-carousel__empty"},Ie=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(n,{expose:P,emit:B}){const t=n,g=B,m=e.ref(),w=e.ref(0),s=e.ref(0);let I,F=-1,R,O,W=!1;const z=e.ref(!1),{getItemKey:p}=pe({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),T=e.computed(()=>Math.max(0,w.value)),x=e.computed(()=>{if(!t.responsive||t.responsive.length===0)return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap};const o=T.value,a=[...t.responsive].sort((f,b)=>b.breakpoint-f.breakpoint);for(const f of a)if(o>=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}}),C=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(x.value.slidesPerView)?x.value.slidesPerView:1))),$=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(x.value.slidesToScroll)?x.value.slidesToScroll:1))),N=e.computed(()=>Math.max(0,Number.isFinite(x.value.gap)?x.value.gap:0)),L=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.buffer)?t.buffer:0))),G=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),k=e.computed(()=>Number.isFinite(t.autoplayDelay)?Math.max(1,t.autoplayDelay):3e3),j=e.computed(()=>{if(T.value<=0)return 0;const o=(C.value-1)*N.value;return Math.max(1,(T.value-o)/C.value)}),E=e.computed(()=>j.value+N.value),Y=e.computed(()=>Math.max(0,t.items.length-C.value)),Z=e.computed(()=>Math.max(0,s.value-L.value)),re=e.computed(()=>Math.min(t.items.length,s.value+C.value+L.value)),J=e.computed(()=>t.items.slice(Z.value,re.value).map((o,a)=>({item:o,index:Z.value+a}))),d=e.computed(()=>t.items.length===0?0:t.items.length*j.value+(t.items.length-1)*N.value),y=e.computed(()=>Z.value*E.value),H=e.computed(()=>Math.max(0,d.value-re.value*E.value)),ne=e.computed(()=>({height:ge(t.height)}));function q(o){return Math.min(Y.value,Math.max(0,Math.floor(Number.isFinite(o)?o:0)))}s.value=q(t.activeIndex);function ce(o){return o>=s.value&&o<Math.min(t.items.length,s.value+C.value)}function Q(){if(!t.hasMore||t.loading||F===t.items.length)return;const o=t.items.length===0?-1:Math.min(t.items.length-1,s.value+C.value-1);t.items.length-1-o<=G.value&&(F=t.items.length,g("loadMore"))}function ae(o){const a=q(o);a===s.value||t.items.length===0||(s.value=a,g("update:activeIndex",a),g("change",{index:a,item:t.items[a]}),a===0&&g("reachStart"),a===Y.value&&g("reachEnd"),Q(),t.autoplay&&!z.value&&S())}function U(o,a={}){const f=m.value;f&&(typeof f.scrollTo=="function"?f.scrollTo({...a,left:o}):f.scrollLeft=o)}function ie(o,a={}){if(t.items.length===0||E.value<=0)return;const f=q(o);O=a.behavior==="smooth"?f:void 0,ae(f),U(f*E.value,{...a,behavior:a.behavior})}function v(o="smooth"){ie(s.value+$.value,{behavior:o})}function M(o="smooth"){ie(s.value-$.value,{behavior:o})}function S(){D(),!(!t.autoplay||t.items.length===0)&&(R=setTimeout(()=>{s.value>=Y.value?t.autoplayLoop?ie(0,{behavior:"smooth"}):D():v("smooth")},k.value))}function D(){R!==void 0&&(clearTimeout(R),R=void 0)}function de(){z.value=!0,t.pauseOnHover&&D()}function X(){z.value=!1,t.autoplay&&S()}function te(){O=void 0}function K(o){if(E.value<=0||W)return;const a=o.currentTarget.scrollLeft;if(O!==void 0){const f=O*E.value;if(Math.abs(a-f)>1)return;O=void 0}ae(Math.round(a/E.value))}function A(o){o.key==="ArrowRight"||o.key==="PageDown"?(o.preventDefault(),v()):o.key==="ArrowLeft"||o.key==="PageUp"?(o.preventDefault(),M()):o.key==="Home"?(o.preventDefault(),ie(0,{behavior:"smooth"})):o.key==="End"&&(o.preventDefault(),ie(Y.value,{behavior:"auto"}))}function i(){var a;const o=((a=m.value)==null?void 0:a.clientWidth)??0;o<=0||o===w.value||(W=!0,w.value=o,e.nextTick(()=>{const f=q(s.value);U(f*E.value),W=!1}))}return e.watch(()=>t.activeIndex,async o=>{const a=q(o);a!==s.value&&(te(),s.value=a,await e.nextTick(),U(a*E.value),Q())}),e.watch(()=>[t.items.length,x.value.slidesPerView,x.value.gap,x.value.slidesToScroll],async()=>{const o=q(s.value);t.items.length===0?s.value!==0&&(s.value=0,g("update:activeIndex",0)):ae(o),await e.nextTick(),U(o*E.value),Q(),t.autoplay&&t.items.length>0&&!z.value&&S()}),e.watch(()=>t.responsive,()=>{e.nextTick(()=>{const o=q(s.value);U(o*E.value)})},{deep:!0}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([o])=>{o||(F=-1),await e.nextTick(),Q()}),e.watch(()=>t.autoplay,o=>{o&&!z.value?S():D()}),e.watch(()=>t.autoplayDelay,()=>{t.autoplay&&!z.value&&S()}),e.watch(()=>t.autoplayLoop,o=>{!t.autoplay||z.value||(!o&&s.value>=Y.value?D():S())}),e.watch(()=>t.pauseOnHover,o=>{o&&z.value?D():!o&&t.autoplay&&S()}),e.onMounted(async()=>{i(),typeof ResizeObserver<"u"&&m.value&&(I=new ResizeObserver(i),I.observe(m.value)),await e.nextTick(),U(s.value*E.value),Q(),t.autoplay&&S()}),e.onBeforeUnmount(()=>{I&&(I.disconnect(),I=void 0),D()}),P({next:v,previous:M,scrollToIndex:ie,startAutoplay:S,stopAutoplay:D}),(o,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:m,class:"vue-virtual-carousel",style:e.normalizeStyle(ne.value),role:"region","aria-roledescription":"carousel","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:K,onPointerdown:te,onWheelPassive:te,onKeydown:A,onMouseenter:de,onMouseleave:X},[n.items.length?(e.openBlock(),e.createElementBlock("div",Ge,[y.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${y.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(J.value,({item:f,index:b})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(p)(f,b),class:"vue-virtual-carousel__item",style:e.normalizeStyle({flexBasis:`${j.value}px`,marginRight:b<n.items.length-1?`${N.value}px`:"0px"}),role:"listitem","aria-roledescription":"slide","aria-label":`${b+1} of ${n.items.length}`,"aria-current":b===s.value?"true":void 0},[e.renderSlot(o.$slots,"default",{item:f,index:b,active:b===s.value,visible:ce(b)})],12,qe))),128)),H.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${H.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",Ze,[e.renderSlot(o.$slots,"empty")]))],44,je))}}),Je=["aria-label"],Qe=["aria-posinset","aria-setsize"],Ee=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(n,{expose:P,emit:B}){const t=n,g=B,{pulling:m,pullDistance:w,pullOffset:s,pullProgress:I,refreshMessage:F,refreshThreshold:R,handleTouchStart:O,handleTouchMove:W,handleTouchEnd:z,handleTouchCancel:p}=Me({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>g("refresh")}),T=e.ref(),x=e.ref(0),C=e.ref(0);let $,N=-1;const L=xe(),{getItemKey:G}=pe({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),k=e.computed(()=>Math.max(1,t.itemSize)),j=e.computed(()=>Math.max(0,Math.floor(t.overscan))),E=e.computed(()=>t.items.length*k.value),Y=e.computed(()=>Math.max(1,t.loadingItemSize??k.value)),Z=e.computed(()=>E.value+(t.loading?Y.value:0)),re=e.computed(()=>C.value>0?C.value:typeof t.height=="number"?t.height:0),J=e.computed(()=>Math.max(0,Math.floor(x.value/k.value)-j.value)),d=e.computed(()=>{const v=Math.ceil((x.value+re.value)/k.value);return Math.min(t.items.length,v+j.value)}),y=e.computed(()=>t.items.slice(J.value,d.value).map((v,M)=>({item:v,index:J.value+M}))),H=e.computed(()=>({height:ge(t.height)})),ne=e.computed(()=>({transform:`translateY(${J.value*k.value}px)`}));function q(){var v;C.value=((v=T.value)==null?void 0:v.clientHeight)??0,L(T.value,t.height),e.nextTick(Q)}function ce(v){x.value=v.currentTarget.scrollTop,g("scroll",{scrollTop:x.value,startIndex:J.value,endIndex:d.value}),Q()}function Q(){const v=T.value;if(!v||!t.hasMore||t.loading||N===t.items.length)return;const M=Math.max(0,t.loadMoreThreshold);Z.value-v.scrollTop-v.clientHeight<=M&&(N=t.items.length,g("loadMore"))}function ae(v,M={}){const S=T.value;if(!S)return;const D=Math.max(0,Z.value-S.clientHeight),de=Math.min(Math.max(0,Number.isFinite(v)?v:0),D),X=M.behavior??"auto";X==="auto"&&(x.value=de),S.scrollTo({...M,top:de,behavior:X})}function U(v,M={}){const S=T.value;if(!S||t.items.length===0)return;const D=Math.min(t.items.length-1,Math.max(0,Math.floor(v))),{align:de="start",...X}=M;let te=D*k.value;de==="center"?te-=(S.clientHeight-k.value)/2:de==="end"&&(te-=S.clientHeight-k.value),S.scrollTo({...X,top:Math.max(0,Math.min(te,Z.value-S.clientHeight))})}function ie(v="auto"){var M;(M=T.value)==null||M.scrollTo({top:0,behavior:v})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const v=T.value;if(!v)return;const M=Math.max(0,Z.value-v.clientHeight);v.scrollTop>M&&(v.scrollTop=M,x.value=M),Q()}),e.watch(()=>[t.hasMore,t.loading],async([v])=>{v||(N=-1),await e.nextTick(),Q()}),e.onMounted(()=>{q(),typeof ResizeObserver<"u"&&T.value&&($=new ResizeObserver(q),$.observe(T.value)),e.nextTick(Q)}),e.onBeforeUnmount(()=>{$&&($.disconnect(),$=void 0)}),P({scrollTo:ae,scrollToIndex:U,scrollToTop:ie}),(v,M)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:T,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(m)}]),style:e.normalizeStyle(H.value),role:"list","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:ce,onTouchstartPassive:M[0]||(M[0]=(...S)=>e.unref(O)&&e.unref(O)(...S)),onTouchmove:M[1]||(M[1]=(...S)=>e.unref(W)&&e.unref(W)(...S)),onTouchend:M[2]||(M[2]=(...S)=>e.unref(z)&&e.unref(z)(...S)),onTouchcancel:M[3]||(M[3]=(...S)=>e.unref(p)&&e.unref(p)(...S))},[n.pullToRefresh||n.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(s)-e.unref(R)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(v.$slots,"refresh",{pullDistance:e.unref(w),progress:e.unref(I),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(F)),1)])],4)):e.createCommentVNode("",!0),n.items.length||n.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-scroll__spacer",style:e.normalizeStyle({height:`${Z.value}px`,transform:`translateY(${e.unref(s)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(ne.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,({item:S,index:D})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(G)(S,D),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${k.value}px`}),role:"listitem","aria-posinset":D+1,"aria-setsize":n.items.length},[e.renderSlot(v.$slots,"default",{item:S,index:D})],12,Qe))),128))],4),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${Y.value}px`,transform:`translateY(${E.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(v.$slots,"loading",{},()=>[M[4]||(M[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(s)}px)`})},[e.renderSlot(v.$slots,"empty")],4))],46,Je))}}),Xe=["aria-label"],et=["aria-posinset","aria-setsize"],$e=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(n,{expose:P,emit:B}){const t=n,g=B,m=e.ref(),w=e.ref(0),s=e.ref(0),I=e.ref(0),F=e.ref(0),R=new Map,O=new Map,W=new Map;let z,p,T,x,C=!1,$=!1,N=-1;const{getItemKey:L}=pe({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey});function G(c){return typeof window.requestAnimationFrame=="function"?{id:window.requestAnimationFrame(c),type:"animation"}:{id:window.setTimeout(c,0),type:"timeout"}}function k(c){c&&(c.type==="animation"?window.cancelAnimationFrame(c.id):window.clearTimeout(c.id))}const{pulling:j,pullDistance:E,pullOffset:Y,pullProgress:Z,refreshMessage:re,refreshThreshold:J,handleTouchStart:d,handleTouchMove:y,handleTouchEnd:H,handleTouchCancel:ne}=Me({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>g("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),q=e.computed(()=>Math.max(1,t.estimatedItemSize)),ce=e.computed(()=>Math.max(1,t.loadingItemSize??q.value)),Q=e.computed(()=>Math.max(0,Math.floor(t.overscan))),ae=e.computed(()=>{F.value;const c=new Array(t.items.length+1),l=new Array(t.items.length);c[0]=0;for(let r=0;r<t.items.length;r+=1){const u=L(t.items[r],r),h=R.get(u)??q.value;l[r]=h,c[r+1]=c[r]+h}return{offsets:c,sizes:l,total:c[t.items.length]??0}}),U=e.computed(()=>ae.value.total+(t.loading?ce.value:0)),ie=e.computed(()=>{const c=new Map;return t.items.forEach((l,r)=>{c.set(L(l,r),r)}),c}),v=e.computed(()=>Math.max(0,w.value-I.value));function M(c){if(t.items.length===0)return 0;const l=ae.value.offsets;let r=0,u=t.items.length;for(;r<u;){const h=Math.floor((r+u)/2);l[h+1]<=c?r=h+1:u=h}return Math.min(r,t.items.length-1)}const S=e.computed(()=>Math.max(0,M(v.value)-Q.value)),D=e.computed(()=>{if(t.items.length===0)return 0;const c=w.value+s.value-I.value,l=Math.max(q.value,c),r=M(l)+1;return Math.min(t.items.length,r+Q.value)}),de=e.computed(()=>t.items.slice(S.value,D.value).map((c,l)=>{const r=S.value+l;return{item:c,index:r,key:L(c,r),top:ae.value.offsets[r]}}));function X(){typeof window>"u"||(w.value=Math.max(0,window.scrollY),s.value=window.innerHeight,m.value&&(I.value=m.value.getBoundingClientRect().top+w.value))}function te(){g("scroll",{scrollTop:v.value,startIndex:S.value,endIndex:D.value})}function K(c=!1){$&&(C||(C=c),!T&&(T=G(()=>{T=void 0,X(),C&&(C=!1,te()),o()})))}function A(){K(!0)}function i(){K()}function o(){if(typeof window>"u"||!t.hasMore||t.loading||N===t.items.length)return;const c=Math.max(0,t.loadMoreThreshold),l=I.value+U.value,r=w.value+s.value;l-r<=c&&(N=t.items.length,g("loadMore"))}function a(c){const l=c.borderBoxSize;if(l){const r=Array.isArray(l)?l[0]:l;if(r!=null&&r.blockSize)return r.blockSize}return c.contentRect.height}function f(c){const l=ae.value;let r=0,u=!1;for(const h of c){const V=h.target,_=O.get(V),ee=a(h);if(_===void 0||ee<=0)continue;const le=R.get(_)??q.value;if(Math.abs(le-ee)<.5)continue;const oe=ie.value.get(_);oe!==void 0&&l.offsets[oe+1]<=v.value&&(r+=ee-le),R.set(_,ee),u=!0}u&&(F.value+=1,e.nextTick(()=>{if($){if(r!==0&&typeof window<"u"){const h=Math.max(0,w.value+r);w.value=h,window.scrollTo({top:h,behavior:"auto"})}X(),o()}}))}function b(c){if($){for(const l of c)W.set(l.target,l);x||(x=G(()=>{x=void 0;const l=Array.from(W.values());W.clear(),f(l)}))}}function se(c,l){c instanceof HTMLElement&&(O.set(c,l),p==null||p.observe(c))}function ue(){for(const[c]of O)c.isConnected||(p==null||p.unobserve(c),O.delete(c))}function me(c,l={}){if(typeof window>"u")return;X();const r=Math.max(0,U.value-s.value),u=Math.min(Math.max(0,Number.isFinite(c)?c:0),r),h=Math.max(0,I.value+u),V=l.behavior??"auto";V==="auto"&&(w.value=h),window.scrollTo({...l,top:h,behavior:V})}function ve(c,l={}){if(typeof window>"u"||t.items.length===0)return;X();const r=Math.min(t.items.length-1,Math.max(0,Math.floor(c))),{align:u="start",...h}=l,V=ae.value.sizes[r];let _=I.value+ae.value.offsets[r];u==="center"?_-=(s.value-V)/2:u==="end"&&(_-=s.value-V);const ee=Math.max(I.value,I.value+U.value-s.value),le=Math.max(0,Math.min(_,ee)),oe=h.behavior??"auto";oe==="auto"&&(w.value=le),window.scrollTo({...h,top:le,behavior:oe})}function fe(c="auto"){typeof window>"u"||(X(),window.scrollTo({top:Math.max(0,I.value),behavior:c}))}return e.watch(()=>t.itemKey,()=>{R.clear(),F.value+=1,N=-1}),e.watch(()=>t.items.map((c,l)=>L(c,l)),async(c,l)=>{const r=c.length!==l.length||c.some((h,V)=>h!==l[V]),u=new Set(c);for(const h of R.keys())u.has(h)||R.delete(h);r&&(N=-1),F.value+=1,await e.nextTick(),$&&(X(),o())}),e.watch(()=>[t.hasMore,t.loading],async([c])=>{c||(N=-1),await e.nextTick(),$&&(X(),o())}),e.onMounted(()=>{if($=!0,X(),window.addEventListener("scroll",A,{passive:!0}),window.addEventListener("resize",i,{passive:!0}),typeof ResizeObserver<"u"){z=new ResizeObserver(()=>{K()}),p=new ResizeObserver(b),m.value&&z.observe(m.value);for(const[c]of O)p.observe(c)}e.nextTick(()=>{$&&o()})}),e.onUpdated(ue),e.onBeforeUnmount(()=>{$=!1,window.removeEventListener("scroll",A),window.removeEventListener("resize",i),k(T),k(x),T=void 0,x=void 0,C=!1,W.clear(),z&&(z.disconnect(),z=void 0),p&&(p.disconnect(),p=void 0),O.clear()}),P({scrollTo:me,scrollToIndex:ve,scrollToTop:fe}),(c,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:m,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(j)}]),role:"list","aria-label":n.ariaLabel,onTouchstartPassive:l[0]||(l[0]=(...r)=>e.unref(d)&&e.unref(d)(...r)),onTouchmove:l[1]||(l[1]=(...r)=>e.unref(y)&&e.unref(y)(...r)),onTouchend:l[2]||(l[2]=(...r)=>e.unref(H)&&e.unref(H)(...r)),onTouchcancel:l[3]||(l[3]=(...r)=>e.unref(ne)&&e.unref(ne)(...r))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(J)}px`,transform:`translateY(${e.unref(Y)-e.unref(J)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(c.$slots,"refresh",{pullDistance:e.unref(E),progress:e.unref(Z),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(re)),1)])],4)):e.createCommentVNode("",!0),n.items.length||n.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${U.value}px`,transform:`translateY(${e.unref(Y)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(de.value,({item:r,index:u,key:h,top:V})=>(e.openBlock(),e.createElementBlock("div",{key:h,ref_for:!0,ref:_=>se(_,h),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${V}px)`}),role:"listitem","aria-posinset":u+1,"aria-setsize":n.items.length},[e.renderSlot(c.$slots,"default",{item:r,index:u})],12,et))),128)),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${ce.value}px`,transform:`translateY(${ae.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(c.$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-window-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(Y)}px)`})},[e.renderSlot(c.$slots,"empty")],4))],42,Xe))}}),tt=["aria-label"],lt=["aria-posinset","aria-setsize"],Ve=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(n,{expose:P,emit:B}){const t=n,g=B,m=e.ref(),w=e.ref(0),s=e.ref(0),I=e.ref(0);let F,R=-1;const{getItemKey:O}=pe({componentName:"WindowGirdVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:W,pullDistance:z,pullOffset:p,pullProgress:T,refreshMessage:x,refreshThreshold:C,handleTouchStart:$,handleTouchMove:N,handleTouchEnd:L,handleTouchCancel:G}=Me({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>g("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),k=e.computed(()=>Math.max(1,t.itemSize)),j=e.computed(()=>Math.max(1,Math.floor(t.columns))),E=e.computed(()=>Math.max(0,t.gap)),Y=e.computed(()=>Math.max(0,Math.floor(t.overscan))),Z=e.computed(()=>Math.max(1,t.loadingItemSize??k.value)),re=e.computed(()=>k.value+E.value),J=e.computed(()=>Math.ceil(t.items.length/j.value)),d=e.computed(()=>J.value===0?0:J.value*k.value+(J.value-1)*E.value),y=e.computed(()=>d.value+(t.items.length?E.value:0)),H=e.computed(()=>d.value+(t.loading?Z.value+(t.items.length?E.value:0):0)),ne=e.computed(()=>Math.max(0,w.value-I.value)),q=e.computed(()=>Math.max(0,Math.floor(ne.value/re.value)-Y.value)),ce=e.computed(()=>{if(J.value===0)return 0;const K=Math.max(k.value,w.value+s.value-I.value),A=Math.ceil((K+E.value)/re.value);return Math.min(J.value,A+Y.value)}),Q=e.computed(()=>Math.min(t.items.length,q.value*j.value)),ae=e.computed(()=>Math.min(t.items.length,ce.value*j.value)),U=e.computed(()=>t.items.slice(Q.value,ae.value).map((K,A)=>{const i=Q.value+A;return{item:K,index:i,key:O(K,i),rowIndex:Math.floor(i/j.value),columnIndex:i%j.value}})),ie=e.computed(()=>({gridTemplateColumns:`repeat(${j.value}, minmax(0, 1fr))`,columnGap:`${E.value}px`,rowGap:`${E.value}px`,transform:`translateY(${q.value*re.value}px)`}));function v(){typeof window>"u"||(w.value=Math.max(0,window.scrollY),s.value=window.innerHeight,m.value&&(I.value=m.value.getBoundingClientRect().top+w.value))}function M(){g("scroll",{scrollTop:ne.value,startIndex:Q.value,endIndex:ae.value})}function S(){v(),M(),D()}function D(){if(typeof window>"u"||!t.hasMore||t.loading||R===t.items.length)return;const K=Math.max(0,t.loadMoreThreshold),A=I.value+H.value,i=w.value+s.value;A-i<=K&&(R=t.items.length,g("loadMore"))}function de(K,A={}){if(typeof window>"u")return;v();const i=Math.max(0,H.value-s.value),o=Math.min(Math.max(0,Number.isFinite(K)?K:0),i),a=Math.max(0,I.value+o),f=A.behavior??"auto";f==="auto"&&(w.value=a),window.scrollTo({...A,top:a,behavior:f})}function X(K,A={}){if(typeof window>"u"||t.items.length===0)return;v();const i=Math.min(t.items.length-1,Math.max(0,Math.floor(K))),o=Math.floor(i/j.value),{align:a="start",...f}=A;let b=I.value+o*re.value;a==="center"?b-=(s.value-k.value)/2:a==="end"&&(b-=s.value-k.value);const se=Math.max(I.value,I.value+H.value-s.value),ue=Math.max(0,Math.min(b,se)),me=f.behavior??"auto";me==="auto"&&(w.value=ue),window.scrollTo({...f,top:ue,behavior:me})}function te(K="auto"){typeof window>"u"||(v(),window.scrollTo({top:Math.max(0,I.value),behavior:K}))}return e.watch(()=>[t.items.length,t.itemSize,t.columns,t.gap],async()=>{await e.nextTick(),v(),D()}),e.watch(()=>[t.hasMore,t.loading],async([K])=>{K||(R=-1),await e.nextTick(),v(),D()}),e.onMounted(()=>{v(),window.addEventListener("scroll",S,{passive:!0}),window.addEventListener("resize",S,{passive:!0}),typeof ResizeObserver<"u"&&(F=new ResizeObserver(()=>{v(),D()}),m.value&&F.observe(m.value)),e.nextTick(D)}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",S),window.removeEventListener("resize",S),F&&(F.disconnect(),F=void 0)}),P({scrollTo:de,scrollToIndex:X,scrollToTop:te}),(K,A)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:m,class:e.normalizeClass(["vue-window-gird-virtual-scroll",{"vue-window-gird-virtual-scroll--pulling":e.unref(W)}]),role:"list","aria-label":n.ariaLabel,onTouchstartPassive:A[0]||(A[0]=(...i)=>e.unref($)&&e.unref($)(...i)),onTouchmove:A[1]||(A[1]=(...i)=>e.unref(N)&&e.unref(N)(...i)),onTouchend:A[2]||(A[2]=(...i)=>e.unref(L)&&e.unref(L)(...i)),onTouchcancel:A[3]||(A[3]=(...i)=>e.unref(G)&&e.unref(G)(...i))},[n.pullToRefresh||n.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(p)-e.unref(C)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(K.$slots,"refresh",{pullDistance:e.unref(z),progress:e.unref(T),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(x)),1)])],4)):e.createCommentVNode("",!0),n.items.length||n.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-gird-virtual-scroll__spacer",style:e.normalizeStyle({height:`${H.value}px`,transform:`translateY(${e.unref(p)}px)`})},[e.createElementVNode("div",{class:"vue-window-gird-virtual-scroll__content",style:e.normalizeStyle(ie.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(U.value,({item:i,index:o,key:a,rowIndex:f,columnIndex:b})=>(e.openBlock(),e.createElementBlock("div",{key:a,class:"vue-window-gird-virtual-scroll__item",style:e.normalizeStyle({height:`${k.value}px`}),role:"listitem","aria-posinset":o+1,"aria-setsize":n.items.length},[e.renderSlot(K.$slots,"default",{item:i,index:o,rowIndex:f,columnIndex:b})],12,lt))),128))],4),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__loading",style:e.normalizeStyle({height:`${Z.value}px`,transform:`translateY(${y.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(K.$slots,"loading",{},()=>[A[4]||(A[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(p)}px)`})},[e.renderSlot(K.$slots,"empty")],4))],42,tt))}}),Le=Te,Ce={install(n){n.component("ChatVirtualScroll",be),n.component("DynamicVirtualScroll",Te),n.component("ShortMediaFeed",ze),n.component("SkeletonLoader",Be),n.component("VirtualCarousel",Ie),n.component("VirtualList",Le),n.component("VirtualScroll",Ee),n.component("WindowDynamicVirtualScroll",$e),n.component("WindowGirdVirtualScroll",Ve)}};exports.ChatVirtualScroll=be;exports.DynamicVirtualScroll=Te;exports.ShortMediaFeed=ze;exports.SkeletonLoader=Be;exports.VirtualCarousel=Ie;exports.VirtualList=Le;exports.VirtualScroll=Ee;exports.VueVirtualScroll=Ce;exports.WindowDynamicVirtualScroll=$e;exports.WindowGirdVirtualScroll=Ve;exports.default=Ce;
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 Le(o,O){const x=o[O];return _e(x)?x:void 0}function Ue(o){return Le(o,"id")??Le(o,"key")}function be(o){function O(t,p){const d=o.itemKey();if(typeof d=="function")return d(t,p);if(t!==null&&typeof t=="object"){if(d!==void 0){const a=Le(t,d);if(a!==void 0)return a}const s=Ue(t);if(s!==void 0)return s}return p}function x(){}return e.watch(()=>[o.itemKey(),o.items()],x,{immediate:!0}),{getItemKey:O}}function Ie(o){return o==="fill"?"100%":typeof o=="number"?`${o}px`:o}function $e(o){return(O,x)=>{typeof x=="string"&&(x==="fill"||x.trim().endsWith("%"))}}function je(o){const O=Float64Array.from(o),x=O.length,t=new Float64Array(x+1);let p=0;for(let s=1;s<=x;s+=1){const a=O[s-1];p+=a,t[s]+=a;const v=s+(s&-s);v<=x&&(t[v]+=t[s])}let d=1;for(;d*2<=x;)d*=2;return{length:x,get total(){return p},getSize(s){return O[s]},getOffset(s){let a=0;for(let v=s;v>0;v-=v&-v)a+=t[v];return a},setSize(s,a){const v=a-O[s];if(v!==0){O[s]=a,p+=v;for(let H=s+1;H<=x;H+=H&-H)t[H]+=v}},findIndex(s){if(x===0||s<=0)return 0;if(s>=p)return x-1;let a=0,v=0;for(let H=d;H>0;H=Math.floor(H/2)){const L=a+H;L<=x&&v+t[L]<=s&&(a=L,v+=t[L])}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"],Oe=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:O,emit:x}){const t=o,p=x,d=e.ref(),s=e.ref(0),a=e.ref(0),v=e.ref(0),H=e.ref(0),L=e.ref(!0),F=new Map,W=new Map,E=new Set;let R,M,b=-1,z=!1,K=!1,N=!1,Q,Y=0,$=!1,X=0,V,U,D,Z=0;const ee=$e(),{getItemKey:ie}=be({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),oe=e.computed(()=>Number.isFinite(t.estimatedItemSize)?Math.max(1,t.estimatedItemSize):48),le=e.computed(()=>Math.max(0,Math.floor(t.overscan))),fe=e.computed(()=>t.size!==void 0&&Number.isFinite(t.size)&&t.size>0?Math.max(1,Math.floor(t.size)):void 0),A=e.computed(()=>v.value>0?v.value:typeof t.height=="number"?Math.max(0,t.height):oe.value),u=e.computed(()=>{const r=t.items.map((f,y)=>ie(f,y));return{keys:r,indexes:new Map(r.map((f,y)=>[f,y])),sizes:je(r.map(f=>F.get(f)??oe.value))}}),c=e.computed(()=>(H.value,{sizes:u.value.sizes,total:u.value.sizes.total}));function k(r=c.value.total){return Math.max(0,r-A.value)}function j(r){return c.value.sizes.findIndex(r)}s.value=t.initialScroll==="bottom"?k():0;const re=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const r=j(s.value),f=j(s.value+A.value)+1,y=Math.max(0,r-le.value),C=Math.min(t.items.length,f+le.value),ue=fe.value;if(ue===void 0||C-y<=ue)return{start:y,end:C};const me=Math.max(0,ue-(f-r)),ve=r-y,pe=C-f;let Me=Math.min(ve,Math.ceil(me/2));const ye=Math.min(pe,me-Me);return Me=Math.min(ve,me-ye),{start:r-Me,end:f+ye}}),g=e.computed(()=>re.value.start),B=e.computed(()=>re.value.end),I=e.computed(()=>t.items.slice(g.value,B.value).map((r,f)=>{const y=g.value+f;return{item:r,index:y,key:ie(r,y),bottom:Math.max(c.value.total,A.value)-c.value.sizes.getOffset(y+1)+a.value}})),q=e.computed(()=>({height:Ie(t.height)}));function J(r=c.value.total){var C;const f=k(r),y=Math.min(0,((C=d.value)==null?void 0:C.scrollTop)??0);return Math.max(0,Math.min(f,f+y+Y))}function te(r=!1){if($||(N||D)&&!r||Y===0)return;$=!0;const f=Z,y=++X;a.value=0,e.nextTick(()=>{if(y!==X)return;$=!1;const C=d.value;!C||f!==Z||Y===0||(Y=0,C.scrollTop=Math.min(0,s.value-k()),U=C.scrollTop,s.value=J(),w(),ae())})}function ce(r){const f=d.value;if(f){if(Y+=r,s.value=J(),Y===0||k()===0){Y=0,a.value=0;return}(N||D)&&!$?(a.value=Y,f.scrollTop>=-1&&te(!0)):te()}}function P(){clearTimeout(Q),Q=void 0}function G(){if(K)return;P(),N=!1;const r=D;if(D=void 0,r){r();return}s.value=J(),te()}function i(){P(),(N||D)&&!K&&(Q=setTimeout(G,150))}function l(){V=void 0,D=void 0}function n(){l(),P(),K=!0,N=!0,a.value=Y}function h(r){K=r.touches.length>0,i()}function w(){const r=d.value;if(!r)return;const y=Math.max(0,c.value.total-J()-r.clientHeight)<=Math.max(0,t.bottomThreshold);y!==L.value&&(L.value=y,z&&p("bottomChange",y))}function de(){var r;v.value=((r=d.value)==null?void 0:r.clientHeight)??0,z&&(s.value=J()),ee(d.value,t.height),e.nextTick(()=>{w(),ae()})}function se(){var r,f;V&&U!==void 0&&Math.abs((((r=d.value)==null?void 0:r.scrollTop)??0)-U)>1&&l(),s.value=J(),Y!==0&&(((f=d.value)==null?void 0:f.scrollTop)??0)>=-1&&te(!0),i(),w(),p("scroll",{scrollTop:s.value,startIndex:g.value,endIndex:B.value}),ae()}function ae(){const r=d.value;!z||!r||!t.hasOlder||t.loadingOlder||b===t.items.length||J()<=Math.max(0,t.loadOlderThreshold)&&(b=t.items.length,p("loadOlder"))}function Te(r){const f=r.borderBoxSize;if(f){const y=Array.isArray(f)?f[0]:f;if(y!=null&&y.blockSize)return y.blockSize}return r.contentRect.height}function xe(r){const f=c.value.total,y=J(),C=!N&&!D&&L.value&&t.stickToBottom&&(z||t.initialScroll==="bottom"),ue=j(y+A.value-1),me=!C&&y<=0;let ve=0,pe=!1;for(const{key:He,height:ze}of r){if(!Number.isFinite(ze)||ze<=0)continue;const Ee=u.value.indexes.get(He);if(Ee===void 0)continue;const Re=c.value.sizes.getSize(Ee);F.set(He,ze),!(Math.abs(Re-ze)<.5)&&(Ee<=ue&&(ve+=ze-Re),c.value.sizes.setSize(Ee,ze),pe=!0)}if(!pe)return;H.value+=1;const Me=k()-k(f),ye=V&&u.value.indexes.get(V.key),Be=ye!==void 0&&V?ge(ye,V.align):C?k():me?0:y+ve;ce(Be-y-Me),e.nextTick(w)}function m(r){const f=[];for(const y of r){const C=W.get(y.target);C!==void 0&&f.push({key:C,height:Te(y)})}xe(f)}function S(){const r=[];for(const f of E){const y=W.get(f);y!==void 0&&f.isConnected&&r.push({key:y,height:f.getBoundingClientRect().height})}E.clear(),xe(r)}function T(r,f){r instanceof HTMLElement&&W.get(r)!==f&&(W.set(r,f),F.has(f)||E.add(r),M==null||M.observe(r))}function ne(){for(const[r]of W)r.isConnected||(M==null||M.unobserve(r),W.delete(r),E.delete(r))}function _(r,f,y=!1){const C=d.value;if(!C)return;const ue=J(),me=a.value!==0,ve=++Z;X+=1,$=!1,V=void 0;const pe=f.behavior??"auto";D=pe==="smooth"?()=>he(r):void 0,Y=0,a.value=0,N=!1,P(),pe==="auto"&&(s.value=r);const Me=()=>{d.value!==C||ve!==Z||(me&&pe!=="auto"&&(C.scrollTop=ue-k()),y&&pe==="auto"?C.scrollTop=r-k():C.scrollTo({...f,top:r-k(),behavior:pe}),U=C.scrollTop,pe==="auto"?s.value=J():i(),e.nextTick(w))};me?e.nextTick(Me):Me()}function he(r,f={}){const y=d.value;if(!y)return;const C=Math.max(0,c.value.total-y.clientHeight),ue=Math.min(Math.max(0,Number.isFinite(r)?r:0),C);_(ue,f)}function ge(r,f){const y=c.value.sizes.getSize(r);let C=c.value.sizes.getOffset(r);return f==="center"?C-=(A.value-y)/2:f==="end"&&(C-=A.value-y),Math.max(0,Math.min(C,k()))}function we(r,f={}){if(!d.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:C="start",...ue}=f;_(ge(y,C),ue);const me=u.value.keys[y];f.behavior==="smooth"?D=()=>{const ve=u.value.indexes.get(me);ve!==void 0&&we(ve,{align:C})}:V={key:me,align:C}}function ke(r="auto"){_(0,{behavior:r})}function Se(r="auto"){const f=d.value;if(!f)return;const y=Math.max(0,c.value.total-f.clientHeight);_(y,{behavior:r},!0),r==="smooth"&&(D=()=>Se())}return e.watch(u,async(r,f)=>{const y=f.sizes.total,C=J(y),ue=!N&&!D&&L.value&&t.stickToBottom,me=f.sizes.findIndex(C+A.value-1),ve=f.keys[me],pe=ve===void 0?void 0:r.indexes.get(ve),Me=k()-k(y);for(const ye of F.keys())r.indexes.has(ye)||F.delete(ye);if(r.keys.length===0||pe===void 0){Y=0,a.value=0,s.value=ue?k():Math.min(C,k());const ye=s.value,Be=Z;await e.nextTick(),Be===Z&&u.value===r&&_(ye,{},!0)}else{const ye=r.sizes.getOffset(pe+1)-f.sizes.getOffset(me+1),Be=ue?k():C+ye;ce(Be-C-Me),await e.nextTick()}d.value&&(s.value=J(),w(),ae())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([r])=>{r||(b=-1),await e.nextTick(),ae()}),e.onMounted(()=>{if(de(),d.value&&(d.value.scrollTop=t.initialScroll==="bottom"?0:-k(),s.value=J()),S(),typeof ResizeObserver<"u"){R=new ResizeObserver(de),M=new ResizeObserver(m),d.value&&R.observe(d.value);for(const[r]of W)M.observe(r)}e.nextTick(()=>{z=!0,w(),ae()})}),e.onUpdated(()=>{ne(),S()}),e.onBeforeUnmount(()=>{z=!1,P(),l(),Y=0,Z+=1,X+=1,R&&(R.disconnect(),R=void 0),M&&(M.disconnect(),M=void 0),W.clear(),E.clear()}),O({isAtBottom:L,scrollTo:he,scrollToIndex:we,scrollToTop:ke,scrollToBottom:Se}),(r,f)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:d,class:"vue-chat-virtual-scroll",style:e.normalizeStyle(q.value),role:"log","aria-label":o.ariaLabel,"aria-live":"polite",tabindex:"0",onScrollPassive:se,onScrollendPassive:G,onPointerdownPassive:l,onWheelPassive:l,onKeydown:l,onTouchstartPassive:n,onTouchendPassive:h,onTouchcancelPassive:h},[e.createElementVNode("div",{class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${Math.max(A.value,c.value.total+a.value)}px`})},[o.loadingOlder?(e.openBlock(),e.createElementBlock("div",qe,[e.createElementVNode("div",null,[e.renderSlot(r.$slots,"loadingOlder",{},()=>[f[0]||(f[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:C,key:ue,bottom:me})=>(e.openBlock(),e.createElementBlock("div",{key:ue,ref_for:!0,ref:ve=>T(ve,ue),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${-me}px)`}),role:"article","aria-posinset":C+1,"aria-setsize":o.items.length},[e.renderSlot(r.$slots,"default",{item:y,index:C})],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 O=e.ref(),x=e.ref(0),t=e.ref(!1),p=e.ref(!1),d=e.computed(()=>Math.max(1,o.threshold())),s=e.computed(()=>o.refreshing()||p.value?d.value:x.value),a=e.computed(()=>Math.min(1,x.value/d.value)),v=e.computed(()=>o.refreshing()||p.value?"Refreshing…":a.value>=1?"Release to refresh":"Pull to refresh");function H(){O.value=void 0,t.value=!1,x.value=0}function L(E){var b;const R=E.currentTarget,M=((b=o.scrollTop)==null?void 0:b.call(o))??R.scrollTop;!o.enabled()||o.refreshing()||M>0||E.touches.length!==1||(O.value=E.touches[0].clientY,t.value=!0)}function F(E){var z;if(O.value===void 0||!t.value)return;const R=E.currentTarget;if((((z=o.scrollTop)==null?void 0:z.call(o))??R.scrollTop)>0||E.touches.length!==1){H();return}const b=E.touches[0].clientY-O.value;if(b<=0){x.value=0;return}E.preventDefault(),x.value=Math.min(b*.5,d.value*2)}function W(){if(O.value===void 0)return;const E=x.value>=d.value&&o.enabled()&&!o.refreshing();if(O.value=void 0,t.value=!1,!E){x.value=0;return}x.value=d.value,p.value=!0,o.onRefresh(),e.nextTick(()=>{o.refreshing()||(p.value=!1,x.value=0)})}return e.watch(()=>o.refreshing(),(E,R)=>{E?(p.value=!1,x.value=d.value):R&&(p.value=!1,x.value=0)}),{pulling:t,pullDistance:x,pullOffset:s,pullProgress:a,refreshMessage:v,refreshThreshold:d,handleTouchStart:L,handleTouchMove:F,handleTouchEnd:W,handleTouchCancel:H}}const Xe=["aria-label"],Je=["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:O,emit:x}){const t=o,p=x,{pulling:d,pullDistance:s,pullOffset:a,pullProgress:v,refreshMessage:H,refreshThreshold:L,handleTouchStart:F,handleTouchMove:W,handleTouchEnd:E,handleTouchCancel:R}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>p("refresh")}),M=e.ref(),b=e.ref(0),z=e.ref(0),K=e.ref(0),N=new Map,Q=new Map;let Y,$,X=-1;const V=$e(),{getItemKey:U}=be({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),D=e.computed(()=>Math.max(1,t.estimatedItemSize)),Z=e.computed(()=>Math.max(1,t.loadingItemSize??D.value)),ee=e.computed(()=>Math.max(0,Math.floor(t.overscan))),ie=e.computed(()=>z.value>0?z.value:typeof t.height=="number"?Math.max(0,t.height):D.value),oe=e.computed(()=>{K.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 h=U(t.items[n],n),w=N.get(h)??D.value;l[n]=w,i[n+1]=i[n]+w}return{offsets:i,sizes:l,total:i[t.items.length]??0}}),le=e.computed(()=>oe.value.total+(t.loading?Z.value:0)),fe=e.computed(()=>{const i=new Map;return t.items.forEach((l,n)=>{i.set(U(l,n),n)}),i});function A(i){if(t.items.length===0)return 0;const l=oe.value.offsets;let n=0,h=t.items.length;for(;n<h;){const w=Math.floor((n+h)/2);l[w+1]<=i?n=w+1:h=w}return Math.min(n,t.items.length-1)}const u=e.computed(()=>Math.max(0,A(b.value)-ee.value)),c=e.computed(()=>{if(t.items.length===0)return 0;const i=A(b.value+ie.value)+1;return Math.min(t.items.length,i+ee.value)}),k=e.computed(()=>t.items.slice(u.value,c.value).map((i,l)=>{const n=u.value+l;return{item:i,index:n,key:U(i,n),top:oe.value.offsets[n]}})),j=e.computed(()=>({height:Ie(t.height)}));function re(){var i;z.value=((i=M.value)==null?void 0:i.clientHeight)??0,V(M.value,t.height),e.nextTick(B)}function g(i){b.value=i.currentTarget.scrollTop,p("scroll",{scrollTop:b.value,startIndex:u.value,endIndex:c.value}),B()}function B(){const i=M.value;if(!i||!t.hasMore||t.loading||X===t.items.length)return;const l=Math.max(0,t.loadMoreThreshold);le.value-i.scrollTop-i.clientHeight<=l&&(X=t.items.length,p("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 q(i){const l=oe.value;let n=0,h=!1;for(const w of i){const de=w.target,se=Q.get(de),ae=I(w);if(se===void 0||ae<=0)continue;const Te=N.get(se)??D.value;if(Math.abs(Te-ae)<.5)continue;const xe=fe.value.get(se);xe!==void 0&&l.offsets[xe+1]<=b.value&&(n+=ae-Te),N.set(se,ae),h=!0}h&&(K.value+=1,e.nextTick(B),n!==0&&e.nextTick(()=>{const w=M.value;w&&(w.scrollTop+=n,b.value=w.scrollTop)}))}function J(i,l){i instanceof HTMLElement&&(Q.set(i,l),$==null||$.observe(i))}function te(){for(const[i]of Q)i.isConnected||($==null||$.unobserve(i),Q.delete(i))}function ce(i,l={}){const n=M.value;if(!n)return;const h=Math.max(0,le.value-n.clientHeight),w=Math.min(Math.max(0,Number.isFinite(i)?i:0),h),de=l.behavior??"auto";de==="auto"&&(b.value=w),n.scrollTo({...l,top:w,behavior:de})}function P(i,l={}){const n=M.value;if(!n||t.items.length===0)return;const h=Math.min(t.items.length-1,Math.max(0,Math.floor(i))),{align:w="start",...de}=l;let se=oe.value.offsets[h];const ae=oe.value.sizes[h];w==="center"?se-=(n.clientHeight-ae)/2:w==="end"&&(se-=n.clientHeight-ae);const Te=Math.max(0,Math.min(se,le.value-n.clientHeight)),xe=de.behavior??"auto";xe==="auto"&&(b.value=Te),n.scrollTo({...de,top:Te,behavior:xe})}function G(i="auto"){var l;(l=M.value)==null||l.scrollTo({top:0,behavior:i})}return e.watch(()=>t.itemKey,()=>{N.clear(),K.value+=1}),e.watch(()=>t.items.length,async()=>{const i=new Set(t.items.map((h,w)=>U(h,w)));for(const h of N.keys())i.has(h)||N.delete(h);K.value+=1,await e.nextTick();const l=M.value;if(!l)return;const n=Math.max(0,le.value-l.clientHeight);l.scrollTop>n&&(l.scrollTop=n,b.value=n),B()}),e.watch(()=>[t.hasMore,t.loading],async([i])=>{i||(X=-1),await e.nextTick(),B()}),e.onMounted(()=>{if(re(),typeof ResizeObserver<"u"){Y=new ResizeObserver(re),$=new ResizeObserver(q),M.value&&Y.observe(M.value);for(const[i]of Q)$.observe(i)}e.nextTick(B)}),e.onUpdated(te),e.onBeforeUnmount(()=>{Y&&(Y.disconnect(),Y=void 0),$&&($.disconnect(),$=void 0),Q.clear()}),O({scrollTo:ce,scrollToIndex:P,scrollToTop:G}),(i,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:M,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(d)}]),style:e.normalizeStyle(j.value),role:"list","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:g,onTouchstartPassive:l[0]||(l[0]=(...n)=>e.unref(F)&&e.unref(F)(...n)),onTouchmove:l[1]||(l[1]=(...n)=>e.unref(W)&&e.unref(W)(...n)),onTouchend:l[2]||(l[2]=(...n)=>e.unref(E)&&e.unref(E)(...n)),onTouchcancel:l[3]||(l[3]=(...n)=>e.unref(R)&&e.unref(R)(...n))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(L)}px`,transform:`translateY(${e.unref(a)-e.unref(L)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(i.$slots,"refresh",{pullDistance:e.unref(s),progress:e.unref(v),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(H)),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:`${le.value}px`,transform:`translateY(${e.unref(a)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,({item:n,index:h,key:w,top:de})=>(e.openBlock(),e.createElementBlock("div",{key:w,ref_for:!0,ref:se=>J(se,w),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${de}px)`}),role:"listitem","aria-posinset":h+1,"aria-setsize":o.items.length},[e.renderSlot(i.$slots,"default",{item:n,index:h})],12,Je))),128)),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${Z.value}px`,transform:`translateY(${oe.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,Xe))}}),Qe=["aria-label"],et=["aria-current","aria-posinset","aria-setsize"],tt={key:1,class:"vue-short-media-feed__empty"},lt=36,ot=700,Ne=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:O,emit:x}){const t=o,p=x,d=e.ref(),s=e.ref(0),a=e.ref(V(t.activeIndex));let v,H=-1,L=0,F=!1,W;const E=$e(),{getItemKey:R}=be({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),M=e.computed(()=>Math.max(0,Math.floor(t.buffer))),b=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),K=e.computed(()=>Math.max(0,a.value-M.value)),N=e.computed(()=>Math.min(t.items.length,a.value+M.value+1)),Q=e.computed(()=>t.items.slice(K.value,N.value).map((u,c)=>({item:u,index:K.value+c}))),Y=e.computed(()=>K.value*z.value),$=e.computed(()=>(t.items.length-N.value)*z.value),X=e.computed(()=>({height:Ie(t.height)}));function V(u){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(u)?u:0)))}function U(){if(!t.hasMore||t.loading||H===t.items.length)return;(t.items.length===0?0:t.items.length-1-a.value)<=b.value&&(H=t.items.length,p("loadMore"))}function D(u){const c=V(u);c===a.value||t.items.length===0||(a.value=c,p("update:activeIndex",c),p("change",{index:c,item:t.items[c]}),c===0&&p("reachStart"),c===t.items.length-1&&p("reachEnd"),U())}function Z(u,c={}){const k=d.value;k&&(typeof k.scrollTo=="function"?k.scrollTo({...c,top:u}):k.scrollTop=u)}function ee(u,c={}){if(t.items.length===0)return;const k=V(u);D(k),Z(k*z.value,c)}function ie(u){if(z.value<=0)return;const c=u.currentTarget.scrollTop;D(Math.round(c/z.value))}function oe(u){let c;u.key==="ArrowDown"||u.key==="PageDown"?c=a.value+1:u.key==="ArrowUp"||u.key==="PageUp"?c=a.value-1:u.key==="Home"?c=0:u.key==="End"&&(c=t.items.length-1),c!==void 0&&(u.preventDefault(),ee(c,{behavior:"smooth"}))}function le(u){return u.deltaMode===WheelEvent.DOM_DELTA_LINE?u.deltaY*16:u.deltaMode===WheelEvent.DOM_DELTA_PAGE?u.deltaY*(z.value||1):u.deltaY}function fe(u){if(u.ctrlKey||Math.abs(u.deltaX)>Math.abs(u.deltaY)||t.items.length===0||z.value<=0||(u.preventDefault(),F))return;const c=le(u);if(c*L<0&&(L=0),L+=c,Math.abs(L)<lt)return;const k=L>0?1:-1;L=0;const j=a.value+k;j<0||j>=t.items.length||(F=!0,ee(j,{behavior:"smooth"}),W=setTimeout(()=>{F=!1},ot))}function A(){var c;const u=((c=d.value)==null?void 0:c.clientHeight)??0;E(d.value,t.height),!(u<=0||u===s.value)&&(s.value=u,e.nextTick(()=>{Z(a.value*u)}))}return e.watch(()=>t.activeIndex,async u=>{const c=V(u);c!==a.value&&(a.value=c,await e.nextTick(),Z(c*z.value),U())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([u])=>{u||(H=-1),await e.nextTick(),U()}),e.watch(()=>t.items.length,async()=>{const u=V(a.value);t.items.length===0?a.value!==0&&(a.value=0,p("update:activeIndex",0)):D(u),await e.nextTick(),Z(u*z.value),U()}),e.onMounted(async()=>{A(),typeof ResizeObserver<"u"&&d.value&&(v=new ResizeObserver(A),v.observe(d.value)),await e.nextTick(),Z(a.value*z.value),U()}),e.onBeforeUnmount(()=>{v&&(v.disconnect(),v=void 0),W&&(clearTimeout(W),W=void 0)}),O({scrollToIndex:ee}),(u,c)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:d,class:"vue-short-media-feed",style:e.normalizeStyle(X.value),role:"list","aria-orientation":"vertical","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:ie,onWheel:fe,onKeydown:oe},[o.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[Y.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${Y.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Q.value,({item:k,index:j})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(R)(k,j),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${z.value}px`}),role:"listitem","aria-current":j===a.value?"true":void 0,"aria-posinset":j+1,"aria-setsize":o.items.length},[e.renderSlot(u.$slots,"default",{item:k,index:j,active:j===a.value})],12,et))),128)),$.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${$.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",tt,[e.renderSlot(u.$slots,"empty")]))],44,Qe))}}),nt=["aria-label"],at=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 O=o;function x(p){return typeof p=="number"?`${Math.max(0,p)}px`:p}const t=e.computed(()=>({width:x(O.width),height:x(O.height)}));return(p,d)=>(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,nt))}}),rt=(o,O)=>{const x=o.__vccOpts||o;for(const[t,p]of O)x[t]=p;return x},De=rt(at,[["__scopeId","data-v-fc92f61f"]]),it=["aria-label"],st={key:0,class:"vue-virtual-carousel__track",role:"list"},ut=["aria-label","aria-current"],ct={key:1,class:"vue-virtual-carousel__empty"},Ke=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:O,emit:x}){const t=o,p=x,d=e.ref(),s=e.ref(0),a=e.ref(0);let v,H=-1,L,F,W=!1;const E=e.ref(!1),{getItemKey:R}=be({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),M=e.computed(()=>Math.max(0,s.value)),b=e.computed(()=>{if(!t.responsive||t.responsive.length===0)return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap};const l=M.value,n=[...t.responsive].sort((h,w)=>w.breakpoint-h.breakpoint);for(const h of n)if(l>=h.breakpoint)return{slidesPerView:h.slidesPerView??t.slidesPerView,slidesToScroll:h.slidesToScroll??t.slidesToScroll,gap:h.gap??t.gap};return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap}}),z=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(b.value.slidesPerView)?b.value.slidesPerView:1))),K=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(b.value.slidesToScroll)?b.value.slidesToScroll:1))),N=e.computed(()=>Math.max(0,Number.isFinite(b.value.gap)?b.value.gap:0)),Q=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.buffer)?t.buffer:0))),Y=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),$=e.computed(()=>Number.isFinite(t.autoplayDelay)?Math.max(1,t.autoplayDelay):3e3),X=e.computed(()=>{if(M.value<=0)return 0;const l=(z.value-1)*N.value;return Math.max(1,(M.value-l)/z.value)}),V=e.computed(()=>X.value+N.value),U=e.computed(()=>Math.max(0,t.items.length-z.value)),D=e.computed(()=>Math.max(0,a.value-Q.value)),Z=e.computed(()=>Math.min(t.items.length,a.value+z.value+Q.value)),ee=e.computed(()=>t.items.slice(D.value,Z.value).map((l,n)=>({item:l,index:D.value+n}))),ie=e.computed(()=>t.items.length===0?0:t.items.length*X.value+(t.items.length-1)*N.value),oe=e.computed(()=>D.value*V.value),le=e.computed(()=>Math.max(0,ie.value-Z.value*V.value)),fe=e.computed(()=>({height:Ie(t.height)}));function A(l){return Math.min(U.value,Math.max(0,Math.floor(Number.isFinite(l)?l:0)))}a.value=A(t.activeIndex);function u(l){return l>=a.value&&l<Math.min(t.items.length,a.value+z.value)}function c(){if(!t.hasMore||t.loading||H===t.items.length)return;const l=t.items.length===0?-1:Math.min(t.items.length-1,a.value+z.value-1);t.items.length-1-l<=Y.value&&(H=t.items.length,p("loadMore"))}function k(l){const n=A(l);n===a.value||t.items.length===0||(a.value=n,p("update:activeIndex",n),p("change",{index:n,item:t.items[n]}),n===0&&p("reachStart"),n===U.value&&p("reachEnd"),c(),t.autoplay&&!E.value&&I())}function j(l,n={}){const h=d.value;h&&(typeof h.scrollTo=="function"?h.scrollTo({...n,left:l}):h.scrollLeft=l)}function re(l,n={}){if(t.items.length===0||V.value<=0)return;const h=A(l);F=n.behavior==="smooth"?h:void 0,k(h),j(h*V.value,{...n,behavior:n.behavior})}function g(l="smooth"){re(a.value+K.value,{behavior:l})}function B(l="smooth"){re(a.value-K.value,{behavior:l})}function I(){q(),!(!t.autoplay||t.items.length===0)&&(L=setTimeout(()=>{a.value>=U.value?t.autoplayLoop?re(0,{behavior:"smooth"}):q():g("smooth")},$.value))}function q(){L!==void 0&&(clearTimeout(L),L=void 0)}function J(){E.value=!0,t.pauseOnHover&&q()}function te(){E.value=!1,t.autoplay&&I()}function ce(){F=void 0}function P(l){if(V.value<=0||W)return;const n=l.currentTarget.scrollLeft;if(F!==void 0){const h=F*V.value;if(Math.abs(n-h)>1)return;F=void 0}k(Math.round(n/V.value))}function G(l){l.key==="ArrowRight"||l.key==="PageDown"?(l.preventDefault(),g()):l.key==="ArrowLeft"||l.key==="PageUp"?(l.preventDefault(),B()):l.key==="Home"?(l.preventDefault(),re(0,{behavior:"smooth"})):l.key==="End"&&(l.preventDefault(),re(U.value,{behavior:"auto"}))}function i(){var n;const l=((n=d.value)==null?void 0:n.clientWidth)??0;l<=0||l===s.value||(W=!0,s.value=l,e.nextTick(()=>{const h=A(a.value);j(h*V.value),W=!1}))}return e.watch(()=>t.activeIndex,async l=>{const n=A(l);n!==a.value&&(ce(),a.value=n,await e.nextTick(),j(n*V.value),c())}),e.watch(()=>[t.items.length,b.value.slidesPerView,b.value.gap,b.value.slidesToScroll],async()=>{const l=A(a.value);t.items.length===0?a.value!==0&&(a.value=0,p("update:activeIndex",0)):k(l),await e.nextTick(),j(l*V.value),c(),t.autoplay&&t.items.length>0&&!E.value&&I()}),e.watch(()=>t.responsive,()=>{e.nextTick(()=>{const l=A(a.value);j(l*V.value)})},{deep:!0}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([l])=>{l||(H=-1),await e.nextTick(),c()}),e.watch(()=>t.autoplay,l=>{l&&!E.value?I():q()}),e.watch(()=>t.autoplayDelay,()=>{t.autoplay&&!E.value&&I()}),e.watch(()=>t.autoplayLoop,l=>{!t.autoplay||E.value||(!l&&a.value>=U.value?q():I())}),e.watch(()=>t.pauseOnHover,l=>{l&&E.value?q():!l&&t.autoplay&&I()}),e.onMounted(async()=>{i(),typeof ResizeObserver<"u"&&d.value&&(v=new ResizeObserver(i),v.observe(d.value)),await e.nextTick(),j(a.value*V.value),c(),t.autoplay&&I()}),e.onBeforeUnmount(()=>{v&&(v.disconnect(),v=void 0),q()}),O({next:g,previous:B,scrollToIndex:re,startAutoplay:I,stopAutoplay:q}),(l,n)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:d,class:"vue-virtual-carousel",style:e.normalizeStyle(fe.value),role:"region","aria-roledescription":"carousel","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:P,onPointerdown:ce,onWheelPassive:ce,onKeydown:G,onMouseenter:J,onMouseleave:te},[o.items.length?(e.openBlock(),e.createElementBlock("div",st,[oe.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${oe.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ee.value,({item:h,index:w})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(R)(h,w),class:"vue-virtual-carousel__item",style:e.normalizeStyle({flexBasis:`${X.value}px`,marginRight:w<o.items.length-1?`${N.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:h,index:w,active:w===a.value,visible:u(w)})],12,ut))),128)),le.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${le.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",ct,[e.renderSlot(l.$slots,"empty")]))],44,it))}}),dt=["aria-label"],mt=["aria-posinset","aria-setsize"],Pe=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:O,emit:x}){const t=o,p=x,{pulling:d,pullDistance:s,pullOffset:a,pullProgress:v,refreshMessage:H,refreshThreshold:L,handleTouchStart:F,handleTouchMove:W,handleTouchEnd:E,handleTouchCancel:R}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>p("refresh")}),M=e.ref(),b=e.ref(0),z=e.ref(0);let K,N=-1;const Q=$e(),{getItemKey:Y}=be({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),$=e.computed(()=>Math.max(1,t.itemSize)),X=e.computed(()=>Math.max(0,Math.floor(t.overscan))),V=e.computed(()=>t.items.length*$.value),U=e.computed(()=>Math.max(1,t.loadingItemSize??$.value)),D=e.computed(()=>V.value+(t.loading?U.value:0)),Z=e.computed(()=>z.value>0?z.value:typeof t.height=="number"?t.height:0),ee=e.computed(()=>Math.max(0,Math.floor(b.value/$.value)-X.value)),ie=e.computed(()=>{const g=Math.ceil((b.value+Z.value)/$.value);return Math.min(t.items.length,g+X.value)}),oe=e.computed(()=>t.items.slice(ee.value,ie.value).map((g,B)=>({item:g,index:ee.value+B}))),le=e.computed(()=>({height:Ie(t.height)})),fe=e.computed(()=>({transform:`translateY(${ee.value*$.value}px)`}));function A(){var g;z.value=((g=M.value)==null?void 0:g.clientHeight)??0,Q(M.value,t.height),e.nextTick(c)}function u(g){b.value=g.currentTarget.scrollTop,p("scroll",{scrollTop:b.value,startIndex:ee.value,endIndex:ie.value}),c()}function c(){const g=M.value;if(!g||!t.hasMore||t.loading||N===t.items.length)return;const B=Math.max(0,t.loadMoreThreshold);D.value-g.scrollTop-g.clientHeight<=B&&(N=t.items.length,p("loadMore"))}function k(g,B={}){const I=M.value;if(!I)return;const q=Math.max(0,D.value-I.clientHeight),J=Math.min(Math.max(0,Number.isFinite(g)?g:0),q),te=B.behavior??"auto";te==="auto"&&(b.value=J),I.scrollTo({...B,top:J,behavior:te})}function j(g,B={}){const I=M.value;if(!I||t.items.length===0)return;const q=Math.min(t.items.length-1,Math.max(0,Math.floor(g))),{align:J="start",...te}=B;let ce=q*$.value;J==="center"?ce-=(I.clientHeight-$.value)/2:J==="end"&&(ce-=I.clientHeight-$.value),I.scrollTo({...te,top:Math.max(0,Math.min(ce,D.value-I.clientHeight))})}function re(g="auto"){var B;(B=M.value)==null||B.scrollTo({top:0,behavior:g})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const g=M.value;if(!g)return;const B=Math.max(0,D.value-g.clientHeight);g.scrollTop>B&&(g.scrollTop=B,b.value=B),c()}),e.watch(()=>[t.hasMore,t.loading],async([g])=>{g||(N=-1),await e.nextTick(),c()}),e.onMounted(()=>{A(),typeof ResizeObserver<"u"&&M.value&&(K=new ResizeObserver(A),K.observe(M.value)),e.nextTick(c)}),e.onBeforeUnmount(()=>{K&&(K.disconnect(),K=void 0)}),O({scrollTo:k,scrollToIndex:j,scrollToTop:re}),(g,B)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:M,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(d)}]),style:e.normalizeStyle(le.value),role:"list","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:u,onTouchstartPassive:B[0]||(B[0]=(...I)=>e.unref(F)&&e.unref(F)(...I)),onTouchmove:B[1]||(B[1]=(...I)=>e.unref(W)&&e.unref(W)(...I)),onTouchend:B[2]||(B[2]=(...I)=>e.unref(E)&&e.unref(E)(...I)),onTouchcancel:B[3]||(B[3]=(...I)=>e.unref(R)&&e.unref(R)(...I))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(L)}px`,transform:`translateY(${e.unref(a)-e.unref(L)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(g.$slots,"refresh",{pullDistance:e.unref(s),progress:e.unref(v),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(H)),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:`${D.value}px`,transform:`translateY(${e.unref(a)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(fe.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(oe.value,({item:I,index:q})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(Y)(I,q),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${$.value}px`}),role:"listitem","aria-posinset":q+1,"aria-setsize":o.items.length},[e.renderSlot(g.$slots,"default",{item:I,index:q})],12,mt))),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(${V.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(g.$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(g.$slots,"empty")],4))],46,dt))}}),ft=["aria-label"],vt=["aria-posinset","aria-setsize"],Ae=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:O,emit:x}){const t=o,p=x,d=e.ref(),s=e.ref(0),a=e.ref(0),v=e.ref(0),H=e.ref(0),L=new Map,F=new Map,W=new Map;let E,R,M,b,z=!1,K=!1,N=-1;const{getItemKey:Q}=be({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey});function Y(m){return typeof window.requestAnimationFrame=="function"?{id:window.requestAnimationFrame(m),type:"animation"}:{id:window.setTimeout(m,0),type:"timeout"}}function $(m){m&&(m.type==="animation"?window.cancelAnimationFrame(m.id):window.clearTimeout(m.id))}const{pulling:X,pullDistance:V,pullOffset:U,pullProgress:D,refreshMessage:Z,refreshThreshold:ee,handleTouchStart:ie,handleTouchMove:oe,handleTouchEnd:le,handleTouchCancel:fe}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>p("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),A=e.computed(()=>Math.max(1,t.estimatedItemSize)),u=e.computed(()=>Math.max(1,t.loadingItemSize??A.value)),c=e.computed(()=>Math.max(0,Math.floor(t.overscan))),k=e.computed(()=>{H.value;const m=new Array(t.items.length+1),S=new Array(t.items.length);m[0]=0;for(let T=0;T<t.items.length;T+=1){const ne=Q(t.items[T],T),_=L.get(ne)??A.value;S[T]=_,m[T+1]=m[T]+_}return{offsets:m,sizes:S,total:m[t.items.length]??0}}),j=e.computed(()=>k.value.total+(t.loading?u.value:0)),re=e.computed(()=>{const m=new Map;return t.items.forEach((S,T)=>{m.set(Q(S,T),T)}),m}),g=e.computed(()=>Math.max(0,s.value-v.value));function B(m){if(t.items.length===0)return 0;const S=k.value.offsets;let T=0,ne=t.items.length;for(;T<ne;){const _=Math.floor((T+ne)/2);S[_+1]<=m?T=_+1:ne=_}return Math.min(T,t.items.length-1)}const I=e.computed(()=>Math.max(0,B(g.value)-c.value)),q=e.computed(()=>{if(t.items.length===0)return 0;const m=s.value+a.value-v.value,S=Math.max(A.value,m),T=B(S)+1;return Math.min(t.items.length,T+c.value)}),J=e.computed(()=>t.items.slice(I.value,q.value).map((m,S)=>{const T=I.value+S;return{item:m,index:T,key:Q(m,T),top:k.value.offsets[T]}}));function te(){typeof window>"u"||(s.value=Math.max(0,window.scrollY),a.value=window.innerHeight,d.value&&(v.value=d.value.getBoundingClientRect().top+s.value))}function ce(){p("scroll",{scrollTop:g.value,startIndex:I.value,endIndex:q.value})}function P(m=!1){K&&(z||(z=m),!M&&(M=Y(()=>{M=void 0,te(),z&&(z=!1,ce()),l()})))}function G(){P(!0)}function i(){P()}function l(){if(typeof window>"u"||!t.hasMore||t.loading||N===t.items.length)return;const m=Math.max(0,t.loadMoreThreshold),S=v.value+j.value,T=s.value+a.value;S-T<=m&&(N=t.items.length,p("loadMore"))}function n(m){const S=m.borderBoxSize;if(S){const T=Array.isArray(S)?S[0]:S;if(T!=null&&T.blockSize)return T.blockSize}return m.contentRect.height}function h(m){const S=k.value;let T=0,ne=!1;for(const _ of m){const he=_.target,ge=F.get(he),we=n(_);if(ge===void 0||we<=0)continue;const ke=L.get(ge)??A.value;if(Math.abs(ke-we)<.5)continue;const Se=re.value.get(ge);Se!==void 0&&S.offsets[Se+1]<=g.value&&(T+=we-ke),L.set(ge,we),ne=!0}ne&&(H.value+=1,e.nextTick(()=>{if(K){if(T!==0&&typeof window<"u"){const _=Math.max(0,s.value+T);s.value=_,window.scrollTo({top:_,behavior:"auto"})}te(),l()}}))}function w(m){if(K){for(const S of m)W.set(S.target,S);b||(b=Y(()=>{b=void 0;const S=Array.from(W.values());W.clear(),h(S)}))}}function de(m,S){m instanceof HTMLElement&&(F.set(m,S),R==null||R.observe(m))}function se(){for(const[m]of F)m.isConnected||(R==null||R.unobserve(m),F.delete(m))}function ae(m,S={}){if(typeof window>"u")return;te();const T=Math.max(0,j.value-a.value),ne=Math.min(Math.max(0,Number.isFinite(m)?m:0),T),_=Math.max(0,v.value+ne),he=S.behavior??"auto";he==="auto"&&(s.value=_),window.scrollTo({...S,top:_,behavior:he})}function Te(m,S={}){if(typeof window>"u"||t.items.length===0)return;te();const T=Math.min(t.items.length-1,Math.max(0,Math.floor(m))),{align:ne="start",..._}=S,he=k.value.sizes[T];let ge=v.value+k.value.offsets[T];ne==="center"?ge-=(a.value-he)/2:ne==="end"&&(ge-=a.value-he);const we=Math.max(v.value,v.value+j.value-a.value),ke=Math.max(0,Math.min(ge,we)),Se=_.behavior??"auto";Se==="auto"&&(s.value=ke),window.scrollTo({..._,top:ke,behavior:Se})}function xe(m="auto"){typeof window>"u"||(te(),window.scrollTo({top:Math.max(0,v.value),behavior:m}))}return e.watch(()=>t.itemKey,()=>{L.clear(),H.value+=1,N=-1}),e.watch(()=>t.items.map((m,S)=>Q(m,S)),async(m,S)=>{const T=m.length!==S.length||m.some((_,he)=>_!==S[he]),ne=new Set(m);for(const _ of L.keys())ne.has(_)||L.delete(_);T&&(N=-1),H.value+=1,await e.nextTick(),K&&(te(),l())}),e.watch(()=>[t.hasMore,t.loading],async([m])=>{m||(N=-1),await e.nextTick(),K&&(te(),l())}),e.onMounted(()=>{if(K=!0,te(),window.addEventListener("scroll",G,{passive:!0}),window.addEventListener("resize",i,{passive:!0}),typeof ResizeObserver<"u"){E=new ResizeObserver(()=>{P()}),R=new ResizeObserver(w),d.value&&E.observe(d.value);for(const[m]of F)R.observe(m)}e.nextTick(()=>{K&&l()})}),e.onUpdated(se),e.onBeforeUnmount(()=>{K=!1,window.removeEventListener("scroll",G),window.removeEventListener("resize",i),$(M),$(b),M=void 0,b=void 0,z=!1,W.clear(),E&&(E.disconnect(),E=void 0),R&&(R.disconnect(),R=void 0),F.clear()}),O({scrollTo:ae,scrollToIndex:Te,scrollToTop:xe}),(m,S)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:d,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(X)}]),role:"list","aria-label":o.ariaLabel,onTouchstartPassive:S[0]||(S[0]=(...T)=>e.unref(ie)&&e.unref(ie)(...T)),onTouchmove:S[1]||(S[1]=(...T)=>e.unref(oe)&&e.unref(oe)(...T)),onTouchend:S[2]||(S[2]=(...T)=>e.unref(le)&&e.unref(le)(...T)),onTouchcancel:S[3]||(S[3]=(...T)=>e.unref(fe)&&e.unref(fe)(...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(ee)}px`,transform:`translateY(${e.unref(U)-e.unref(ee)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$slots,"refresh",{pullDistance:e.unref(V),progress:e.unref(D),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(Z)),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:`${j.value}px`,transform:`translateY(${e.unref(U)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(J.value,({item:T,index:ne,key:_,top:he})=>(e.openBlock(),e.createElementBlock("div",{key:_,ref_for:!0,ref:ge=>de(ge,_),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${he}px)`}),role:"listitem","aria-posinset":ne+1,"aria-setsize":o.items.length},[e.renderSlot(m.$slots,"default",{item:T,index:ne})],12,vt))),128)),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${u.value}px`,transform:`translateY(${k.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$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(U)}px)`})},[e.renderSlot(m.$slots,"empty")],4))],42,ft))}}),ht=["aria-label"],pt=["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:O,emit:x}){const t=o,p=x,d=e.ref(),s=e.ref(0),a=e.ref(0),v=e.ref(0);let H,L=-1;const{getItemKey:F}=be({componentName:"WindowGirdVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:W,pullDistance:E,pullOffset:R,pullProgress:M,refreshMessage:b,refreshThreshold:z,handleTouchStart:K,handleTouchMove:N,handleTouchEnd:Q,handleTouchCancel:Y}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>p("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),$=e.computed(()=>Math.max(1,t.itemSize)),X=e.computed(()=>Math.max(1,Math.floor(t.columns))),V=e.computed(()=>Math.max(0,t.gap)),U=e.computed(()=>Math.max(0,Math.floor(t.overscan))),D=e.computed(()=>Math.max(1,t.loadingItemSize??$.value)),Z=e.computed(()=>$.value+V.value),ee=e.computed(()=>Math.ceil(t.items.length/X.value)),ie=e.computed(()=>ee.value===0?0:ee.value*$.value+(ee.value-1)*V.value),oe=e.computed(()=>ie.value+(t.items.length?V.value:0)),le=e.computed(()=>ie.value+(t.loading?D.value+(t.items.length?V.value:0):0)),fe=e.computed(()=>Math.max(0,s.value-v.value)),A=e.computed(()=>Math.max(0,Math.floor(fe.value/Z.value)-U.value)),u=e.computed(()=>{if(ee.value===0)return 0;const P=Math.max($.value,s.value+a.value-v.value),G=Math.ceil((P+V.value)/Z.value);return Math.min(ee.value,G+U.value)}),c=e.computed(()=>Math.min(t.items.length,A.value*X.value)),k=e.computed(()=>Math.min(t.items.length,u.value*X.value)),j=e.computed(()=>t.items.slice(c.value,k.value).map((P,G)=>{const i=c.value+G;return{item:P,index:i,key:F(P,i),rowIndex:Math.floor(i/X.value),columnIndex:i%X.value}})),re=e.computed(()=>({gridTemplateColumns:`repeat(${X.value}, minmax(0, 1fr))`,columnGap:`${V.value}px`,rowGap:`${V.value}px`,transform:`translateY(${A.value*Z.value}px)`}));function g(){typeof window>"u"||(s.value=Math.max(0,window.scrollY),a.value=window.innerHeight,d.value&&(v.value=d.value.getBoundingClientRect().top+s.value))}function B(){p("scroll",{scrollTop:fe.value,startIndex:c.value,endIndex:k.value})}function I(){g(),B(),q()}function q(){if(typeof window>"u"||!t.hasMore||t.loading||L===t.items.length)return;const P=Math.max(0,t.loadMoreThreshold),G=v.value+le.value,i=s.value+a.value;G-i<=P&&(L=t.items.length,p("loadMore"))}function J(P,G={}){if(typeof window>"u")return;g();const i=Math.max(0,le.value-a.value),l=Math.min(Math.max(0,Number.isFinite(P)?P:0),i),n=Math.max(0,v.value+l),h=G.behavior??"auto";h==="auto"&&(s.value=n),window.scrollTo({...G,top:n,behavior:h})}function te(P,G={}){if(typeof window>"u"||t.items.length===0)return;g();const i=Math.min(t.items.length-1,Math.max(0,Math.floor(P))),l=Math.floor(i/X.value),{align:n="start",...h}=G;let w=v.value+l*Z.value;n==="center"?w-=(a.value-$.value)/2:n==="end"&&(w-=a.value-$.value);const de=Math.max(v.value,v.value+le.value-a.value),se=Math.max(0,Math.min(w,de)),ae=h.behavior??"auto";ae==="auto"&&(s.value=se),window.scrollTo({...h,top:se,behavior:ae})}function ce(P="auto"){typeof window>"u"||(g(),window.scrollTo({top:Math.max(0,v.value),behavior:P}))}return e.watch(()=>[t.items.length,t.itemSize,t.columns,t.gap],async()=>{await e.nextTick(),g(),q()}),e.watch(()=>[t.hasMore,t.loading],async([P])=>{P||(L=-1),await e.nextTick(),g(),q()}),e.onMounted(()=>{g(),window.addEventListener("scroll",I,{passive:!0}),window.addEventListener("resize",I,{passive:!0}),typeof ResizeObserver<"u"&&(H=new ResizeObserver(()=>{g(),q()}),d.value&&H.observe(d.value)),e.nextTick(q)}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",I),window.removeEventListener("resize",I),H&&(H.disconnect(),H=void 0)}),O({scrollTo:J,scrollToIndex:te,scrollToTop:ce}),(P,G)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:d,class:e.normalizeClass(["vue-window-gird-virtual-scroll",{"vue-window-gird-virtual-scroll--pulling":e.unref(W)}]),role:"list","aria-label":o.ariaLabel,onTouchstartPassive:G[0]||(G[0]=(...i)=>e.unref(K)&&e.unref(K)(...i)),onTouchmove:G[1]||(G[1]=(...i)=>e.unref(N)&&e.unref(N)(...i)),onTouchend:G[2]||(G[2]=(...i)=>e.unref(Q)&&e.unref(Q)(...i)),onTouchcancel:G[3]||(G[3]=(...i)=>e.unref(Y)&&e.unref(Y)(...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(z)}px`,transform:`translateY(${e.unref(R)-e.unref(z)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(P.$slots,"refresh",{pullDistance:e.unref(E),progress:e.unref(M),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:`${le.value}px`,transform:`translateY(${e.unref(R)}px)`})},[e.createElementVNode("div",{class:"vue-window-gird-virtual-scroll__content",style:e.normalizeStyle(re.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(j.value,({item:i,index:l,key:n,rowIndex:h,columnIndex:w})=>(e.openBlock(),e.createElementBlock("div",{key:n,class:"vue-window-gird-virtual-scroll__item",style:e.normalizeStyle({height:`${$.value}px`}),role:"listitem","aria-posinset":l+1,"aria-setsize":o.items.length},[e.renderSlot(P.$slots,"default",{item:i,index:l,rowIndex:h,columnIndex:w})],12,pt))),128))],4),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__loading",style:e.normalizeStyle({height:`${D.value}px`,transform:`translateY(${oe.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(P.$slots,"loading",{},()=>[G[4]||(G[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(R)}px)`})},[e.renderSlot(P.$slots,"empty")],4))],42,ht))}}),We=Ce,Ye={install(o){o.component("ChatVirtualScroll",Oe),o.component("DynamicVirtualScroll",Ce),o.component("ShortMediaFeed",Ne),o.component("SkeletonLoader",De),o.component("VirtualCarousel",Ke),o.component("VirtualList",We),o.component("VirtualScroll",Pe),o.component("WindowDynamicVirtualScroll",Ae),o.component("WindowGirdVirtualScroll",Fe)}};exports.ChatVirtualScroll=Oe;exports.DynamicVirtualScroll=Ce;exports.ShortMediaFeed=Ne;exports.SkeletonLoader=De;exports.VirtualCarousel=Ke;exports.VirtualList=We;exports.VirtualScroll=Pe;exports.VueVirtualScroll=Ye;exports.WindowDynamicVirtualScroll=Ae;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}