vue-virtual-flow 0.1.0 → 0.1.1
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/CHANGELOG.md +5 -0
- package/README.md +6 -0
- package/README.vi.md +5 -0
- package/dist/components/VirtualCarousel.d.cts +1 -0
- package/dist/components/VirtualCarousel.d.ts +1 -0
- package/dist/composables/useCarouselInteraction.d.cts +2 -0
- package/dist/composables/useCarouselInteraction.d.ts +2 -0
- package/dist/types.d.cts +2 -0
- package/dist/types.d.ts +2 -0
- package/dist/vue-virtual-flow.cjs +1 -1
- package/dist/vue-virtual-flow.js +1549 -1532
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.1.1] - 2026-11-10
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **VirtualCarousel**: Add `mouseDragMode="snap"` to move one slide as soon as the mouse crosses `dragThreshold`, enabled in the playground with a 4px threshold
|
|
14
|
+
|
|
10
15
|
## [0.1.0] - 2026-10-14
|
|
11
16
|
|
|
12
17
|
### Added
|
package/README.md
CHANGED
|
@@ -841,6 +841,7 @@ five slides are normally mounted in the middle of the collection.
|
|
|
841
841
|
| `autoplayLoop` | `boolean` | `true` | Returns to the first slide when reaching the end. |
|
|
842
842
|
| `pauseOnHover` | `boolean` | `true` | Pauses autoplay when the carousel is hovered. |
|
|
843
843
|
| `mouseDrag` | `boolean` | `true` | Enables click-and-drag navigation with the primary mouse button. |
|
|
844
|
+
| `mouseDragMode` | `'drag' \| 'snap'` | `'drag'` | `drag` follows the pointer until release. `snap` starts moving one slide as soon as horizontal mouse movement reaches `dragThreshold`, once per press. |
|
|
844
845
|
| `dragThreshold` | `number` | `8` | Pointer movement in pixels required to recognize and commit a drag. |
|
|
845
846
|
| `momentum` | `boolean` | `true` | Projects release velocity and decelerates into the destination. |
|
|
846
847
|
| `settleDuration` | `number` | `250` | Base duration in milliseconds for drag/loop settling; `0` makes it instant. Native API scrolling still uses its `behavior` argument. |
|
|
@@ -864,6 +865,11 @@ to two extra slides. Holding before release disables this momentum. A deliberate
|
|
|
864
865
|
horizontal drag of at least `dragThreshold` pixels commits one slide even when it does not cross the
|
|
865
866
|
slide midpoint.
|
|
866
867
|
|
|
868
|
+
For immediate mouse navigation, use `mouse-drag-mode="snap"` with
|
|
869
|
+
`:drag-threshold="4"`. The transition starts and `activeIndex` updates before
|
|
870
|
+
mouse release; further movement is ignored until the next press. Touch and pen
|
|
871
|
+
gestures still settle on release.
|
|
872
|
+
|
|
867
873
|
Buttons and links keep their normal click behavior. Form fields and
|
|
868
874
|
`data-carousel-no-drag` descendants do not start dragging; form fields also keep
|
|
869
875
|
their own arrow-key behavior. Wheel/trackpad input interrupts an active animation
|
package/README.vi.md
CHANGED
|
@@ -839,6 +839,7 @@ thường tối đa năm slide được mount ở giữa collection.
|
|
|
839
839
|
| `autoplayLoop` | `boolean` | `true` | Quay lại slide đầu tiên khi đến cuối. |
|
|
840
840
|
| `pauseOnHover` | `boolean` | `true` | Tạm dừng autoplay khi con trỏ nằm trên carousel. |
|
|
841
841
|
| `mouseDrag` | `boolean` | `true` | Cho phép giữ và kéo bằng nút chuột trái để chuyển slide trên máy tính. |
|
|
842
|
+
| `mouseDragMode` | `'drag' \| 'snap'` | `'drag'` | `drag` kéo theo con trỏ tới khi thả. `snap` bắt đầu chuyển một slide ngay khi kéo chuột ngang đủ `dragThreshold`, tối đa một lần mỗi lần nhấn. |
|
|
842
843
|
| `dragThreshold` | `number` | `8` | Khoảng di chuyển con trỏ để nhận diện và commit thao tác kéo, tính bằng pixel. |
|
|
843
844
|
| `momentum` | `boolean` | `true` | Chiếu vận tốc lúc thả thành quán tính rồi giảm tốc về slide đích. |
|
|
844
845
|
| `settleDuration` | `number` | `250` | Thời lượng nền của animation drag/loop; `0` chuyển tức thì. Cuộn native qua API vẫn dùng tham số `behavior`. |
|
|
@@ -861,6 +862,10 @@ giảm tốc về 0, với quán tính giới hạn tối đa hai slide thêm. G
|
|
|
861
862
|
thả sẽ bỏ qua quán tính. Kéo ngang từ ngưỡng `dragThreshold` sẽ chuyển một slide ngay cả
|
|
862
863
|
khi chưa đi qua nửa chiều rộng slide.
|
|
863
864
|
|
|
865
|
+
Để chuyển ngay khi kéo chuột nhẹ, dùng `mouse-drag-mode="snap"` và
|
|
866
|
+
`:drag-threshold="4"`. Animation bắt đầu và `activeIndex` cập nhật trước khi
|
|
867
|
+
thả chuột; muốn chuyển tiếp cần thả rồi nhấn lại. Cảm ứng và bút vẫn căn slide khi thả.
|
|
868
|
+
|
|
864
869
|
Button và link giữ hành vi click bình thường. Input và phần tử có
|
|
865
870
|
`data-carousel-no-drag` không bắt đầu drag; input giữ hành vi phím mũi tên riêng.
|
|
866
871
|
Wheel/trackpad ngắt animation tại vị trí đang hiển thị.
|
|
@@ -24,6 +24,7 @@ declare const _default: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>
|
|
|
24
24
|
autoplayLoop?: boolean;
|
|
25
25
|
pauseOnHover?: boolean;
|
|
26
26
|
mouseDrag?: boolean;
|
|
27
|
+
mouseDragMode?: "drag" | "snap";
|
|
27
28
|
dragThreshold?: number;
|
|
28
29
|
momentum?: boolean;
|
|
29
30
|
settleDuration?: number;
|
|
@@ -24,6 +24,7 @@ declare const _default: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>
|
|
|
24
24
|
autoplayLoop?: boolean;
|
|
25
25
|
pauseOnHover?: boolean;
|
|
26
26
|
mouseDrag?: boolean;
|
|
27
|
+
mouseDragMode?: "drag" | "snap";
|
|
27
28
|
dragThreshold?: number;
|
|
28
29
|
momentum?: boolean;
|
|
29
30
|
settleDuration?: number;
|
|
@@ -4,6 +4,7 @@ interface CarouselInteractionOptions {
|
|
|
4
4
|
track: () => HTMLElement | undefined;
|
|
5
5
|
rtl: () => boolean;
|
|
6
6
|
mouseDrag: () => boolean;
|
|
7
|
+
mouseDragMode: () => 'drag' | 'snap';
|
|
7
8
|
nativeSnap: () => boolean;
|
|
8
9
|
dragThreshold: () => number;
|
|
9
10
|
momentum: () => boolean;
|
|
@@ -20,6 +21,7 @@ export declare function useCarouselInteraction(options: CarouselInteractionOptio
|
|
|
20
21
|
phase: import('vue').Ref<CarouselInteractionPhase, CarouselInteractionPhase>;
|
|
21
22
|
busy: import('vue').ComputedRef<boolean>;
|
|
22
23
|
dragging: import('vue').ComputedRef<boolean>;
|
|
24
|
+
pointerActive: import('vue').Ref<boolean, boolean>;
|
|
23
25
|
transformed: import('vue').Ref<boolean, boolean>;
|
|
24
26
|
read: () => number;
|
|
25
27
|
write: (position: number, behavior?: ScrollBehavior) => void;
|
|
@@ -4,6 +4,7 @@ interface CarouselInteractionOptions {
|
|
|
4
4
|
track: () => HTMLElement | undefined;
|
|
5
5
|
rtl: () => boolean;
|
|
6
6
|
mouseDrag: () => boolean;
|
|
7
|
+
mouseDragMode: () => 'drag' | 'snap';
|
|
7
8
|
nativeSnap: () => boolean;
|
|
8
9
|
dragThreshold: () => number;
|
|
9
10
|
momentum: () => boolean;
|
|
@@ -20,6 +21,7 @@ export declare function useCarouselInteraction(options: CarouselInteractionOptio
|
|
|
20
21
|
phase: import('vue').Ref<CarouselInteractionPhase, CarouselInteractionPhase>;
|
|
21
22
|
busy: import('vue').ComputedRef<boolean>;
|
|
22
23
|
dragging: import('vue').ComputedRef<boolean>;
|
|
24
|
+
pointerActive: import('vue').Ref<boolean, boolean>;
|
|
23
25
|
transformed: import('vue').Ref<boolean, boolean>;
|
|
24
26
|
read: () => number;
|
|
25
27
|
write: (position: number, behavior?: ScrollBehavior) => void;
|
package/dist/types.d.cts
CHANGED
|
@@ -137,6 +137,8 @@ export interface VirtualCarouselProps<T> {
|
|
|
137
137
|
autoplayLoop?: boolean;
|
|
138
138
|
pauseOnHover?: boolean;
|
|
139
139
|
mouseDrag?: boolean;
|
|
140
|
+
/** Snap once as soon as the mouse crosses dragThreshold, or follow the pointer until release. */
|
|
141
|
+
mouseDragMode?: 'drag' | 'snap';
|
|
140
142
|
dragThreshold?: number;
|
|
141
143
|
momentum?: boolean;
|
|
142
144
|
settleDuration?: number;
|
package/dist/types.d.ts
CHANGED
|
@@ -137,6 +137,8 @@ export interface VirtualCarouselProps<T> {
|
|
|
137
137
|
autoplayLoop?: boolean;
|
|
138
138
|
pauseOnHover?: boolean;
|
|
139
139
|
mouseDrag?: boolean;
|
|
140
|
+
/** Snap once as soon as the mouse crosses dragThreshold, or follow the pointer until release. */
|
|
141
|
+
mouseDragMode?: 'drag' | 'snap';
|
|
140
142
|
dragThreshold?: number;
|
|
141
143
|
momentum?: boolean;
|
|
142
144
|
settleDuration?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");function vt(n){return typeof n=="string"||typeof n=="number"||typeof n=="symbol"}function rt(n,u){const k=n[u];return vt(k)?k:void 0}function Ct(n){return rt(n,"id")??rt(n,"key")}function We(n){const u=new WeakMap,k=new Map;function t(w){if(vt(w))return w;if(w!==null&&typeof w=="object"){let d=u.get(w);return d||(d=Symbol(`${n.componentName} item`),u.set(w,d)),d}let f=k.get(w);return f||(f=Symbol(`${n.componentName} primitive`),k.set(w,f)),f}function x(w,f){const d=n.itemKey();if(typeof d=="function")return d(w,f);if(w!==null&&typeof w=="object"){if(d!==void 0){const v=rt(w,d);if(v!==void 0)return v}const a=Ct(w);if(a!==void 0)return a}return t(w)}function g(){}return e.watch(()=>[n.itemKey(),n.items(),n.items().length],g,{immediate:!0}),{getItemKey:x}}const $t=new Set(["ArrowDown","ArrowUp","End","Home","PageDown","PageUp"," "]);function Lt(n){const u=e.ref(!1);let k=!1,t=!1,x;function g(){clearTimeout(x),x=void 0}function w(S){S!==u.value&&(u.value=S,n.onChange(S))}function f(){k||t||(g(),w(!1),n.onSettled())}function d(){g(),(u.value||n.hasProgrammaticScroll())&&!k&&!t&&(x=setTimeout(f,n.delay()))}function a(){n.onInterrupt(),g(),w(!0),n.onStart()}function v(){k=!0,a()}function I(S){k=S.touches.length>0,d()}function O(){a(),d()}function L(S){n.onInterrupt(),$t.has(S.key)&&(a(),d())}function $(S){n.onInterrupt(),S.pointerType==="mouse"&&S.target===n.viewport()&&(t=!0,a())}function B(){t&&(t=!1,d())}return{isScrolling:u,setScrolling:w,scheduleScrollEnd:d,handleScrollEnd:f,handleTouchStart:v,handleTouchEnd:I,handleWheel:O,handleKeyDown:L,handlePointerDown:$,handlePointerUp:B,dispose:g}}function Xe(n){return n==="fill"?"100%":typeof n=="number"?`${n}px`:n}function et(n){return(u,k)=>{typeof k=="string"&&(k==="fill"||k.trim().endsWith("%"))}}function Pe(n){return(n==null?void 0:n.count)??0}function qe(n){return(n==null?void 0:n.total)??0}function st(n){n.count=1+Pe(n.left)+Pe(n.right),n.total=n.size+qe(n.left)+qe(n.right),n.left&&(n.left.parent=n),n.right&&(n.right.parent=n)}function Ge(n,u){return n?u?n.priority<u.priority?(n.right=Ge(n.right,u),st(n),n):(u.left=Ge(n,u.left),st(u),u):n:u}function Vt(n){let u,k=0;const t=new Map;function x(d){const a=new Set;for(const v of d){if(t.has(v.key)||a.has(v.key))throw new Error(`[vue-virtual-flow] Duplicate item key \`${String(v.key)}\`. ChatVirtualScroll requires a unique stable key for every message.`);a.add(v.key)}}function g(d){k+=1;let a=Math.imul(k^2654435769,2246822507);a^=a>>>13,a=Math.imul(a,3266489909)^a>>>16;const v={key:d.key,size:d.size,priority:a>>>0,count:1,total:d.size};return t.set(d.key,v),v}function w(d){let a;for(const v of d)a=Ge(a,g(v));return a&&(a.parent=void 0),a}function f(d){let a=u,v=d;for(;a;){const I=Pe(a.left);if(v<I)a=a.left;else{if(v===I)return a;v-=I+1,a=a.right}}}return x(n),u=w(n),{get length(){return Pe(u)},get total(){return qe(u)},getSize(d){var a;return((a=f(d))==null?void 0:a.size)??0},getOffset(d){let a=u,v=Math.max(0,Math.min(d,Pe(u))),I=0;for(;a&&v>0;){const O=Pe(a.left);v<=O?a=a.left:(I+=qe(a.left)+a.size,v-=O+1,a=a.right)}return I},setSize(d,a){let v=f(d);if(!(!v||v.size===a))for(v.size=a;v;)st(v),v=v.parent},findIndex(d){if(!u||d<=0)return 0;if(d>=u.total)return u.count-1;let a=u,v=0,I=d;for(;a;){const O=qe(a.left),L=Pe(a.left);if(I<O)a=a.left;else{if(I<O+a.size)return v+L;I-=O+a.size,v+=L+1,a=a.right}}return Math.max(0,Pe(u)-1)},getKey(d){var a;return(a=f(d))==null?void 0:a.key},getIndex(d){let a=t.get(d);if(!a)return;let v=Pe(a.left);for(;a.parent;)a===a.parent.right&&(v+=Pe(a.parent.left)+1),a=a.parent;return a===u?v:void 0},getSizeByKey(d){var a;return(a=t.get(d))==null?void 0:a.size},hasKey(d){return t.has(d)},append(d){d.length!==0&&(x(d),u=Ge(u,w(d)),u&&(u.parent=void 0))},prepend(d){d.length!==0&&(x(d),u=Ge(w(d),u),u&&(u.parent=void 0))}}}const Pt=["aria-label","aria-live"],At={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},Dt=["aria-posinset","aria-setsize"],Nt={key:0,class:"vue-chat-virtual-scroll__new-items",role:"status"},ht=e.defineComponent({name:"ChatVirtualScroll",inheritAttrs:!1,__name:"ChatVirtualScroll",props:{items:{},itemsVersion:{},estimatedItemSize:{default:48},estimateItemSize:{},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},scrollEndDelay:{default:150},syncMeasurement:{type:Boolean,default:!0},pinnedKeys:{default:()=>[]},maxPinnedItems:{default:20},keepFocusedItem:{type:Boolean,default:!0},showNewItemsIndicator:{type:Boolean,default:!0},newItemsLabel:{type:Function,default:void 0},forceStickToBottom:{type:Function,default:void 0},contain:{type:Boolean,default:!0}},emits:["scroll","loadOlder","bottomChange","scrollingChange","newItemsChange","visibleChange"],setup(n,{expose:u,emit:k}){const t=n,x=k,g=e.ref(),w=e.ref(0),f=e.ref(0),d=e.ref(0),a=e.ref(0),v=e.ref(!0),I=e.ref(0),O=e.ref(),L=new Set,$=new Map,B=new Set;let S,V,A=-1,U=!1,Z=0,ae=!1,K=0,ie,Q,ee,te=0;const R=et(),{getItemKey:_}=We({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),de=e.computed(()=>Number.isFinite(t.estimatedItemSize)?Math.max(1,t.estimatedItemSize):48),me=e.computed(()=>Math.max(0,Math.floor(t.overscan))),ue=e.computed(()=>Number.isFinite(t.scrollEndDelay)?Math.max(0,t.scrollEndDelay):150),{isScrolling:J,setScrolling:H,scheduleScrollEnd:T,handleScrollEnd:E,handleTouchStart:le,handleTouchEnd:re,handleWheel:xe,handleKeyDown:C,handlePointerDown:F,handlePointerUp:q,dispose:ve}=Lt({delay:()=>ue.value,viewport:()=>g.value,hasProgrammaticScroll:()=>ee!==void 0,onInterrupt:Se,onStart:()=>{f.value=Z},onSettled:()=>{const i=ee;if(ee=void 0,i){i();return}w.value=N(),ge()},onChange:i=>{U&&x("scrollingChange",i)}}),we=e.computed(()=>Number.isFinite(t.maxPinnedItems)?Math.max(0,Math.floor(t.maxPinnedItems)):20),pe=e.computed(()=>t.size!==void 0&&Number.isFinite(t.size)&&t.size>0?Math.max(1,Math.floor(t.size)):void 0),fe=e.computed(()=>d.value>0?d.value:typeof t.height=="number"?Math.max(0,t.height):de.value);function ne(i,c){var W;const y=(W=t.estimateItemSize)==null?void 0:W.call(t,i,c);return Number.isFinite(y)&&(y??0)>0?y:de.value}function oe(i){return Vt(t.items.map((c,y)=>{const W=_(c,y);return{key:W,size:L.has(W)?(i==null?void 0:i.getSizeByKey(W))??ne(c,y):ne(c,y)}}))}const m=e.shallowRef({sizes:oe()}),M=e.computed(()=>(a.value,{sizes:m.value.sizes,total:m.value.sizes.total}));function s(i=M.value.total){return Math.max(0,i-fe.value)}function Y(i){return M.value.sizes.findIndex(i)}w.value=t.initialScroll==="bottom"?s():0;const G=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const i=Y(w.value),c=Y(w.value+fe.value)+1;return{start:i,end:Math.min(t.items.length,c)}}),ye=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const i=G.value.start,c=G.value.end,y=Math.max(0,i-me.value),W=Math.min(t.items.length,c+me.value),ke=pe.value;if(ke===void 0||W-y<=ke)return{start:y,end:W};const Me=Math.max(0,ke-(c-i)),Ie=i-y,Ce=W-c;let Ve=Math.min(Ie,Math.ceil(Me/2));const Ne=Math.min(Ce,Me-Ve);return Ve=Math.min(Ie,Me-Ne),{start:i-Ve,end:c+Ne}}),r=e.computed(()=>ye.value.start),P=e.computed(()=>ye.value.end),X=e.computed(()=>{const i=new Set;for(let c=r.value;c<P.value;c+=1)i.add(c);for(const c of t.pinnedKeys.slice(0,we.value)){const y=m.value.sizes.getIndex(c);y!==void 0&&i.add(y)}if(t.keepFocusedItem&&O.value!==void 0){const c=m.value.sizes.getIndex(O.value);c!==void 0&&i.add(c)}return[...i].sort((c,y)=>c-y)}),j=e.computed(()=>X.value.map(i=>{const c=t.items[i];return{item:c,index:i,key:_(c,i),bottom:Math.max(M.value.total,fe.value)-M.value.sizes.getOffset(i+1)+f.value}})),p=e.computed(()=>({height:Xe(t.height)})),b=e.computed(()=>({"vue-chat-virtual-scroll--contained":t.contain})),z=e.computed(()=>v.value&&!J.value?"polite":"off");function se(i){var c;return((c=t.newItemsLabel)==null?void 0:c.call(t,i))??`${i} new ${i===1?"message":"messages"}`}function N(i=M.value.total){var W;const c=s(i),y=Math.min(0,((W=g.value)==null?void 0:W.scrollTop)??0);return Math.max(0,Math.min(c,c+y+Z))}function ge(i=!1){if(ae||(J.value||ee)&&!i||Z===0)return;ae=!0;const c=te,y=++K;f.value=0,e.nextTick(()=>{if(y!==K)return;ae=!1;const W=g.value;!W||c!==te||Z===0||(Z=0,W.scrollTop=Math.min(0,w.value-s()),Q=W.scrollTop,w.value=N(),l(),D())})}function ce(i){const c=g.value;if(c){if(Z+=i,w.value=N(),Z===0||s()===0){Z=0,f.value=0;return}(J.value||ee)&&!ae?(f.value=Z,c.scrollTop>=-1&&ge(!0)):ge()}}function Se(){ie=void 0,ee=void 0}function $e(){if(!t.keepFocusedItem){O.value=void 0;return}const i=document.activeElement,c=i instanceof Element?i.closest(".vue-chat-virtual-scroll__item"):null;O.value=c?$.get(c):void 0}function Le(){$e()}function nt(){e.nextTick($e)}function Ze(i){const c=Math.max(0,Math.floor(i));c!==I.value&&(I.value=c,U&&x("newItemsChange",c))}function Oe(){Ze(0)}function Ye(){x("visibleChange",{scrollTop:N(),startIndex:G.value.start,endIndex:G.value.end})}function l(){const i=g.value;if(!i)return;const y=Math.max(0,M.value.total-N()-i.clientHeight)<=Math.max(0,t.bottomThreshold);y!==v.value&&(v.value=y,U&&x("bottomChange",y)),y&&Oe()}function o(){var i;d.value=((i=g.value)==null?void 0:i.clientHeight)??0,U&&(w.value=N()),R(g.value,t.height),e.nextTick(()=>{l(),D()})}function h(){var i,c;ie&&Q!==void 0&&Math.abs((((i=g.value)==null?void 0:i.scrollTop)??0)-Q)>1&&Se(),w.value=N(),Z!==0&&(((c=g.value)==null?void 0:c.scrollTop)??0)>=-1&&ge(!0),T(),l(),x("scroll",{scrollTop:w.value,startIndex:r.value,endIndex:P.value}),D()}function D(){const i=g.value;!U||!i||!t.hasOlder||t.loadingOlder||A===t.items.length||N()<=Math.max(0,t.loadOlderThreshold)&&(A=t.items.length,x("loadOlder"))}function he(i){const c=i.borderBoxSize;if(c){const y=Array.isArray(c)?c[0]:c;if(y!=null&&y.blockSize)return y.blockSize}return i.contentRect.height}function ze(i){const c=M.value.total,y=N(),W=!J.value&&!ee&&v.value&&t.stickToBottom&&(U||t.initialScroll==="bottom"),ke=Y(y+fe.value-1),Me=!W&&y<=0;let Ie=0,Ce=!1;for(const{key:Qe,height:Ke}of i){if(!Number.isFinite(Ke)||Ke<=0)continue;const Ae=m.value.sizes.getIndex(Qe);if(Ae===void 0)continue;const Re=M.value.sizes.getSize(Ae);L.add(Qe),!(Math.abs(Re-Ke)<.5)&&(Ae<=ke&&(Ie+=Ke-Re),M.value.sizes.setSize(Ae,Ke),Ce=!0)}if(!Ce)return;a.value+=1;const Ve=s()-s(c),Ne=ie&&m.value.sizes.getIndex(ie.key),at=Ne!==void 0&&ie?dt(Ne,ie.align):W?s():Me?0:y+Ie;ce(at-y-Ve),e.nextTick(l)}function be(i){const c=[];for(const y of i){const W=$.get(y.target);W!==void 0&&c.push({key:W,height:he(y)})}ze(c)}function Ee(){const i=[];for(const c of B){const y=$.get(c);y!==void 0&&c.isConnected&&i.push({key:y,height:c.getBoundingClientRect().height})}B.clear(),ze(i)}function He(i,c){i instanceof HTMLElement&&$.get(i)!==c&&($.set(i,c),t.syncMeasurement&&!L.has(c)&&B.add(i),V==null||V.observe(i))}function kt(){for(const[i]of $)i.isConnected||(V==null||V.unobserve(i),$.delete(i),B.delete(i))}function Ue(i,c,y=!1){const W=g.value;if(!W)return;const ke=N(),Me=f.value!==0,Ie=++te;K+=1,ae=!1,ie=void 0;const Ce=c.behavior??"auto";ee=Ce==="smooth"?()=>ct(i):void 0,Z=0,f.value=0,H(!1),ve(),Ce==="auto"&&(w.value=i);const Ve=()=>{g.value!==W||Ie!==te||(Me&&Ce!=="auto"&&(W.scrollTop=ke-s()),y&&Ce==="auto"?W.scrollTop=i-s():W.scrollTo({...c,top:i-s(),behavior:Ce}),Q=W.scrollTop,Ce==="auto"?w.value=N():T(),e.nextTick(l))};Me?e.nextTick(Ve):Ve()}function ct(i,c={}){const y=g.value;if(!y)return;const W=Math.max(0,M.value.total-y.clientHeight),ke=Math.min(Math.max(0,Number.isFinite(i)?i:0),W);Ue(ke,c)}function dt(i,c){const y=M.value.sizes.getSize(i);let W=M.value.sizes.getOffset(i);return c==="center"?W-=(fe.value-y)/2:c==="end"&&(W-=fe.value-y),Math.max(0,Math.min(W,s()))}function lt(i,c={}){if(!g.value||t.items.length===0)return;const y=Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(i)?i:0))),{align:W="start",...ke}=c;Ue(dt(y,W),ke);const Me=m.value.sizes.getKey(y);c.behavior==="smooth"?ee=()=>{const Ie=m.value.sizes.getIndex(Me);Ie!==void 0&<(Ie,{align:W})}:ie={key:Me,align:W}}function bt(i,c={}){const y=m.value.sizes.getIndex(i);y!==void 0&<(y,c)}function zt(){return N()}function It(i="auto"){Ue(0,{behavior:i})}function Je(i="auto"){const c=g.value;if(!c)return;const y=Math.max(0,M.value.total-c.clientHeight);Ue(y,{behavior:i},!0),i==="smooth"&&(ee=()=>Je())}const ft=e.ref(0);function Bt(){ft.value+=1}return e.watch(()=>{const i=t.items.length;return[t.items,i,i>0?_(t.items[0],0):void 0,i>0?_(t.items[Math.floor(i/2)],Math.floor(i/2)):void 0,i>0?_(t.items[i-1],i-1):void 0,t.itemKey,t.estimatedItemSize,t.estimateItemSize,t.itemsVersion,ft.value]},async(i,c)=>{const y=m.value.sizes,W=y.length,ke=y.total,Me=N(ke),Ie=y.findIndex(Me+fe.value-1),Ce=y.getKey(Ie),Ve=y.getOffset(Ie+1),Ne=t.items.length,at=i[5]!==c[5]||i[6]!==c[6]||i[7]!==c[7],Qe=i[8]!==c[8]||i[9]!==c[9];function Ke(Te){if(W===0)return!0;const Be=new Set([0,Math.floor(W/2),W-1]);for(const Fe of Be){const _e=Te+Fe;if(_e>=Ne||y.getKey(Fe)!==_(t.items[_e],_e))return!1}return!0}const Ae=Ne-W;let Re="rebuild";!at&&!Qe&&Ae>0&&(Ke(0)?Re="append":Ke(Ae)&&(Re="prepend"));let De=y;Re==="append"?De.append(t.items.slice(W).map((Te,Be)=>{const Fe=W+Be;return{key:_(Te,Fe),size:ne(Te,Fe)}})):Re==="prepend"?De.prepend(t.items.slice(0,Ae).map((Te,Be)=>({key:_(Te,Be),size:ne(Te,Be)}))):De=oe(y),m.value={sizes:De};const ot=Re==="append"?Array.from({length:Ae},(Te,Be)=>W+Be):[],it=ot.some(Te=>{var Be;return((Be=t.forceStickToBottom)==null?void 0:Be.call(t,t.items[Te],Te))===!0})||!J.value&&!ee&&v.value&&t.stickToBottom;ot.length>0&&!it&&Ze(I.value+ot.length);const mt=Ce===void 0?void 0:De.getIndex(Ce),Et=s()-s(ke);for(const Te of L)De.hasKey(Te)||L.delete(Te);if(De.length===0||mt===void 0){Z=0,f.value=0,w.value=it?s():Math.min(Me,s());const Te=w.value,Be=te;await e.nextTick(),Be===te&&m.value.sizes===De&&Ue(Te,{},!0)}else{const Te=De.getOffset(mt+1)-Ve,Be=it?s():Me+Te;ce(Be-Me-Et),await e.nextTick()}g.value&&(w.value=N(),l(),D())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([i])=>{i||(A=-1),await e.nextTick(),D()}),e.watch(()=>t.syncMeasurement,i=>{if(B.clear(),!!i){for(const[c,y]of $)L.has(y)||B.add(c);e.nextTick(Ee)}}),e.watch(G,()=>{U&&Ye()},{flush:"post"}),e.onMounted(()=>{if(window.addEventListener("pointerup",q,{passive:!0}),window.addEventListener("pointercancel",q,{passive:!0}),o(),g.value&&(g.value.scrollTop=t.initialScroll==="bottom"?0:-s(),w.value=N()),Ee(),typeof ResizeObserver<"u"){S=new ResizeObserver(o),V=new ResizeObserver(be),g.value&&S.observe(g.value);for(const[i]of $)V.observe(i)}e.nextTick(()=>{U=!0,l(),D(),Ye()})}),e.onUpdated(()=>{kt(),Ee()}),e.onBeforeUnmount(()=>{U=!1,window.removeEventListener("pointerup",q),window.removeEventListener("pointercancel",q),ve(),Se(),Z=0,te+=1,K+=1,S&&(S.disconnect(),S=void 0),V&&(V.disconnect(),V=void 0),$.clear(),B.clear()}),u({isAtBottom:v,isScrolling:J,newItemsCount:I,clearNewItems:Oe,refresh:Bt,getScrollPosition:zt,scrollTo:ct,scrollToIndex:lt,scrollToKey:bt,scrollToTop:It,scrollToBottom:Je}),(i,c)=>(e.openBlock(),e.createElementBlock("div",{class:"vue-chat-virtual-scroll__root",style:e.normalizeStyle(p.value)},[e.createElementVNode("div",e.mergeProps(i.$attrs,{ref_key:"viewport",ref:g,class:["vue-chat-virtual-scroll",b.value],role:"log","aria-label":n.ariaLabel,"aria-live":z.value,"aria-relevant":"additions","aria-atomic":"false",tabindex:"0",onScrollPassive:h,onScrollendPassive:c[0]||(c[0]=(...y)=>e.unref(E)&&e.unref(E)(...y)),onPointerdownPassive:c[1]||(c[1]=(...y)=>e.unref(F)&&e.unref(F)(...y)),onWheelPassive:c[2]||(c[2]=(...y)=>e.unref(xe)&&e.unref(xe)(...y)),onKeydown:c[3]||(c[3]=(...y)=>e.unref(C)&&e.unref(C)(...y)),onFocusin:Le,onFocusout:nt,onTouchstartPassive:c[4]||(c[4]=(...y)=>e.unref(le)&&e.unref(le)(...y)),onTouchendPassive:c[5]||(c[5]=(...y)=>e.unref(re)&&e.unref(re)(...y)),onTouchcancelPassive:c[6]||(c[6]=(...y)=>e.unref(re)&&e.unref(re)(...y))}),[e.createElementVNode("div",{class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${Math.max(fe.value,M.value.total+f.value)}px`})},[n.loadingOlder?(e.openBlock(),e.createElementBlock("div",At,[e.createElementVNode("div",null,[e.renderSlot(i.$slots,"loadingOlder",{},()=>[c[8]||(c[8]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(j.value,({item:y,index:W,key:ke,bottom:Me})=>(e.openBlock(),e.createElementBlock("div",{key:ke,ref_for:!0,ref:Ie=>He(Ie,ke),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${-Me}px)`}),role:"article","aria-posinset":W+1,"aria-setsize":n.items.length},[e.renderSlot(i.$slots,"default",{item:y,index:W})],12,Dt))),128)),n.items.length?e.createCommentVNode("",!0):e.renderSlot(i.$slots,"empty",{},void 0,void 0,1)],4)],16,Pt),n.showNewItemsIndicator&&I.value>0?(e.openBlock(),e.createElementBlock("div",Nt,[e.renderSlot(i.$slots,"newItems",{count:I.value,scrollToBottom:Je},()=>[e.createElementVNode("button",{type:"button",onClick:c[7]||(c[7]=y=>Je("smooth"))},e.toDisplayString(se(I.value)),1)])])):e.createCommentVNode("",!0)],4))}});function tt(n){const u=e.ref(),k=e.ref(0),t=e.ref(!1),x=e.ref(!1),g=e.computed(()=>Math.max(1,n.threshold())),w=e.computed(()=>n.refreshing()||x.value?g.value:k.value),f=e.computed(()=>Math.min(1,k.value/g.value)),d=e.computed(()=>n.refreshing()||x.value?"Refreshing…":f.value>=1?"Release to refresh":"Pull to refresh");function a(){u.value=void 0,t.value=!1,k.value=0}function v(L){var S;const $=L.currentTarget,B=((S=n.scrollTop)==null?void 0:S.call(n))??$.scrollTop;!n.enabled()||n.refreshing()||B>0||L.touches.length!==1||(u.value=L.touches[0].clientY,t.value=!0)}function I(L){var V;if(u.value===void 0||!t.value)return;const $=L.currentTarget;if((((V=n.scrollTop)==null?void 0:V.call(n))??$.scrollTop)>0||L.touches.length!==1){a();return}const S=L.touches[0].clientY-u.value;if(S<=0){k.value=0;return}L.preventDefault(),k.value=Math.min(S*.5,g.value*2)}function O(){if(u.value===void 0)return;const L=k.value>=g.value&&n.enabled()&&!n.refreshing();if(u.value=void 0,t.value=!1,!L){k.value=0;return}k.value=g.value,x.value=!0,n.onRefresh(),e.nextTick(()=>{n.refreshing()||(x.value=!1,k.value=0)})}return e.watch(()=>n.refreshing(),(L,$)=>{L?(x.value=!1,k.value=g.value):$&&(x.value=!1,k.value=0)}),{pulling:t,pullDistance:k,pullOffset:w,pullProgress:f,refreshMessage:d,refreshThreshold:g,handleTouchStart:v,handleTouchMove:I,handleTouchEnd:O,handleTouchCancel:a}}const Kt=["aria-label"],Rt=["aria-posinset","aria-setsize"],ut=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:u,emit:k}){const t=n,x=k,{pulling:g,pullDistance:w,pullOffset:f,pullProgress:d,refreshMessage:a,refreshThreshold:v,handleTouchStart:I,handleTouchMove:O,handleTouchEnd:L,handleTouchCancel:$}=tt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh")}),B=e.ref(),S=e.ref(0),V=e.ref(0),A=e.ref(0),U=new Map,Z=new Map;let ae,K,ie=-1;const Q=et(),{getItemKey:ee}=We({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),te=e.computed(()=>Math.max(1,t.estimatedItemSize)),R=e.computed(()=>Math.max(1,t.loadingItemSize??te.value)),_=e.computed(()=>Math.max(0,Math.floor(t.overscan))),de=e.computed(()=>V.value>0?V.value:typeof t.height=="number"?Math.max(0,t.height):te.value),me=e.computed(()=>{A.value;const m=new Array(t.items.length+1),M=new Array(t.items.length);m[0]=0;for(let s=0;s<t.items.length;s+=1){const Y=ee(t.items[s],s),G=U.get(Y)??te.value;M[s]=G,m[s+1]=m[s]+G}return{offsets:m,sizes:M,total:m[t.items.length]??0}}),ue=e.computed(()=>me.value.total+(t.loading?R.value:0)),J=e.computed(()=>{const m=new Map;return t.items.forEach((M,s)=>{m.set(ee(M,s),s)}),m});function H(m){if(t.items.length===0)return 0;const M=me.value.offsets;let s=0,Y=t.items.length;for(;s<Y;){const G=Math.floor((s+Y)/2);M[G+1]<=m?s=G+1:Y=G}return Math.min(s,t.items.length-1)}const T=e.computed(()=>Math.max(0,H(S.value)-_.value)),E=e.computed(()=>{if(t.items.length===0)return 0;const m=H(S.value+de.value)+1;return Math.min(t.items.length,m+_.value)}),le=e.computed(()=>t.items.slice(T.value,E.value).map((m,M)=>{const s=T.value+M;return{item:m,index:s,key:ee(m,s),top:me.value.offsets[s]}})),re=e.computed(()=>({height:Xe(t.height)}));function xe(){var m;V.value=((m=B.value)==null?void 0:m.clientHeight)??0,Q(B.value,t.height),e.nextTick(F)}function C(m){S.value=m.currentTarget.scrollTop,x("scroll",{scrollTop:S.value,startIndex:T.value,endIndex:E.value}),F()}function F(){const m=B.value;if(!m||!t.hasMore||t.loading||ie===t.items.length)return;const M=Math.max(0,t.loadMoreThreshold);ue.value-m.scrollTop-m.clientHeight<=M&&(ie=t.items.length,x("loadMore"))}function q(m){const M=m.borderBoxSize;if(M){const s=Array.isArray(M)?M[0]:M;if(s!=null&&s.blockSize)return s.blockSize}return m.contentRect.height}function ve(m){const M=me.value;let s=0,Y=!1;for(const G of m){const ye=G.target,r=Z.get(ye),P=q(G);if(r===void 0||P<=0)continue;const X=U.get(r)??te.value;if(Math.abs(X-P)<.5)continue;const j=J.value.get(r);j!==void 0&&M.offsets[j+1]<=S.value&&(s+=P-X),U.set(r,P),Y=!0}Y&&(A.value+=1,e.nextTick(F),s!==0&&e.nextTick(()=>{const G=B.value;G&&(G.scrollTop+=s,S.value=G.scrollTop)}))}function we(m,M){m instanceof HTMLElement&&(Z.set(m,M),K==null||K.observe(m))}function pe(){for(const[m]of Z)m.isConnected||(K==null||K.unobserve(m),Z.delete(m))}function fe(m,M={}){const s=B.value;if(!s)return;const Y=Math.max(0,ue.value-s.clientHeight),G=Math.min(Math.max(0,Number.isFinite(m)?m:0),Y),ye=M.behavior??"auto";ye==="auto"&&(S.value=G),s.scrollTo({...M,top:G,behavior:ye})}function ne(m,M={}){const s=B.value;if(!s||t.items.length===0)return;const Y=Math.min(t.items.length-1,Math.max(0,Math.floor(m))),{align:G="start",...ye}=M;let r=me.value.offsets[Y];const P=me.value.sizes[Y];G==="center"?r-=(s.clientHeight-P)/2:G==="end"&&(r-=s.clientHeight-P);const X=Math.max(0,Math.min(r,ue.value-s.clientHeight)),j=ye.behavior??"auto";j==="auto"&&(S.value=X),s.scrollTo({...ye,top:X,behavior:j})}function oe(m="auto"){var M;(M=B.value)==null||M.scrollTo({top:0,behavior:m})}return e.watch(()=>t.itemKey,()=>{U.clear(),A.value+=1}),e.watch(()=>t.items.length,async()=>{const m=new Set(t.items.map((Y,G)=>ee(Y,G)));for(const Y of U.keys())m.has(Y)||U.delete(Y);A.value+=1,await e.nextTick();const M=B.value;if(!M)return;const s=Math.max(0,ue.value-M.clientHeight);M.scrollTop>s&&(M.scrollTop=s,S.value=s),F()}),e.watch(()=>[t.hasMore,t.loading],async([m])=>{m||(ie=-1),await e.nextTick(),F()}),e.onMounted(()=>{if(xe(),typeof ResizeObserver<"u"){ae=new ResizeObserver(xe),K=new ResizeObserver(ve),B.value&&ae.observe(B.value);for(const[m]of Z)K.observe(m)}e.nextTick(F)}),e.onUpdated(pe),e.onBeforeUnmount(()=>{ae&&(ae.disconnect(),ae=void 0),K&&(K.disconnect(),K=void 0),Z.clear()}),u({scrollTo:fe,scrollToIndex:ne,scrollToTop:oe}),(m,M)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:B,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(g)}]),style:e.normalizeStyle(re.value),role:"list","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:C,onTouchstartPassive:M[0]||(M[0]=(...s)=>e.unref(I)&&e.unref(I)(...s)),onTouchmove:M[1]||(M[1]=(...s)=>e.unref(O)&&e.unref(O)(...s)),onTouchend:M[2]||(M[2]=(...s)=>e.unref(L)&&e.unref(L)(...s)),onTouchcancel:M[3]||(M[3]=(...s)=>e.unref($)&&e.unref($)(...s))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(v)}px`,transform:`translateY(${e.unref(f)-e.unref(v)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$slots,"refresh",{pullDistance:e.unref(w),progress:e.unref(d),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(a)),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:`${ue.value}px`,transform:`translateY(${e.unref(f)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(le.value,({item:s,index:Y,key:G,top:ye})=>(e.openBlock(),e.createElementBlock("div",{key:G,ref_for:!0,ref:r=>we(r,G),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${ye}px)`}),role:"listitem","aria-posinset":Y+1,"aria-setsize":n.items.length},[e.renderSlot(m.$slots,"default",{item:s,index:Y})],12,Rt))),128)),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${R.value}px`,transform:`translateY(${me.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$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-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(f)}px)`})},[e.renderSlot(m.$slots,"empty")],4))],46,Kt))}}),Wt=["aria-label"],Ht=["aria-current","aria-posinset","aria-setsize"],Ft={key:1,class:"vue-short-media-feed__empty"},Ot=36,Yt=700,pt=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:u,emit:k}){const t=n,x=k,g=e.ref(),w=e.ref(0),f=e.ref(Q(t.activeIndex));let d,a=-1,v=0,I=!1,O;const L=et(),{getItemKey:$}=We({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),B=e.computed(()=>Math.max(0,Math.floor(t.buffer))),S=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),V=e.computed(()=>w.value>0?w.value:typeof t.height=="number"?Math.max(1,t.height):0),A=e.computed(()=>Math.max(0,f.value-B.value)),U=e.computed(()=>Math.min(t.items.length,f.value+B.value+1)),Z=e.computed(()=>(V.value>0?t.items:[]).slice(A.value,U.value).map((T,E)=>({item:T,index:A.value+E}))),ae=e.computed(()=>A.value*V.value),K=e.computed(()=>(t.items.length-U.value)*V.value),ie=e.computed(()=>({height:Xe(t.height)}));function Q(T){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(T)?T:0)))}function ee(){if(!t.hasMore||t.loading||a===t.items.length)return;(t.items.length===0?0:t.items.length-1-f.value)<=S.value&&(a=t.items.length,x("loadMore"))}function te(T){const E=Q(T);E===f.value||t.items.length===0||(f.value=E,x("update:activeIndex",E),x("change",{index:E,item:t.items[E]}),E===0&&x("reachStart"),E===t.items.length-1&&x("reachEnd"),ee())}function R(T,E={}){const le=g.value;le&&(typeof le.scrollTo=="function"?le.scrollTo({...E,top:T}):le.scrollTop=T)}function _(T,E={}){if(t.items.length===0)return;const le=Q(T);te(le),R(le*V.value,E)}function de(T){if(V.value<=0)return;const E=T.currentTarget.scrollTop;te(Math.round(E/V.value))}function me(T){let E;T.key==="ArrowDown"||T.key==="PageDown"?E=f.value+1:T.key==="ArrowUp"||T.key==="PageUp"?E=f.value-1:T.key==="Home"?E=0:T.key==="End"&&(E=t.items.length-1),E!==void 0&&(T.preventDefault(),_(E,{behavior:"smooth"}))}function ue(T){return T.deltaMode===WheelEvent.DOM_DELTA_LINE?T.deltaY*16:T.deltaMode===WheelEvent.DOM_DELTA_PAGE?T.deltaY*(V.value||1):T.deltaY}function J(T){if(T.ctrlKey||Math.abs(T.deltaX)>Math.abs(T.deltaY)||t.items.length===0||V.value<=0||(T.preventDefault(),I))return;const E=ue(T);if(E*v<0&&(v=0),v+=E,Math.abs(v)<Ot)return;const le=v>0?1:-1;v=0;const re=f.value+le;re<0||re>=t.items.length||(I=!0,_(re,{behavior:"smooth"}),O=setTimeout(()=>{I=!1},Yt))}function H(){var E;const T=((E=g.value)==null?void 0:E.clientHeight)??0;L(g.value,t.height),!(T<=0||T===w.value)&&(w.value=T,e.nextTick(()=>{R(f.value*T)}))}return e.watch(()=>t.activeIndex,async T=>{const E=Q(T);E!==f.value&&(f.value=E,await e.nextTick(),R(E*V.value),ee())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([T])=>{T||(a=-1),await e.nextTick(),ee()}),e.watch(()=>t.items.length,async()=>{const T=Q(f.value);t.items.length===0?f.value!==0&&(f.value=0,x("update:activeIndex",0)):te(T),await e.nextTick(),R(T*V.value),ee()}),e.onMounted(async()=>{H(),typeof ResizeObserver<"u"&&g.value&&(d=new ResizeObserver(H),d.observe(g.value)),await e.nextTick(),R(f.value*V.value),ee()}),e.onBeforeUnmount(()=>{d&&(d.disconnect(),d=void 0),O&&(clearTimeout(O),O=void 0)}),u({scrollToIndex:_}),(T,E)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:g,class:"vue-short-media-feed",style:e.normalizeStyle(ie.value),role:"list","aria-orientation":"vertical","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:de,onWheel:J,onKeydown:me},[n.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[ae.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${ae.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Z.value,({item:le,index:re})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref($)(le,re),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${V.value}px`}),role:"listitem","aria-current":re===f.value?"true":void 0,"aria-posinset":re+1,"aria-setsize":n.items.length},[e.renderSlot(T.$slots,"default",{item:le,index:re,active:re===f.value})],12,Ht))),128)),K.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${K.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",Ft,[e.renderSlot(T.$slots,"empty")]))],44,Wt))}}),Ut=["aria-label"],jt=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 u=n;function k(x){return typeof x=="number"?`${Math.max(0,x)}px`:x}const t=e.computed(()=>({width:k(u.width),height:k(u.height)}));return(x,g)=>(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,Ut))}}),qt=(n,u)=>{const k=n.__vccOpts||n;for(const[t,x]of u)k[t]=x;return k},gt=qt(jt,[["__scopeId","data-v-fc92f61f"]]),Gt=.006;function Xt(n,u){const k=n*Math.abs(n)/(2*Gt),t=u*2;return Math.max(-t,Math.min(t,k))}function Zt(n,u,k,t=250){const x=u-n,g=Math.abs(k);if(!(g>=.1&&x*k>0))return{keyframes:[{transform:`translate3d(${n}px, 0, 0)`},{transform:`translate3d(${u}px, 0, 0)`}],options:{duration:Math.round(Math.max(120,Math.min(650,(190+Math.abs(x)*.35)*t/250))),easing:"cubic-bezier(0.22, 1, 0.36, 1)",fill:"forwards"}};const f=Math.round(Math.max(180,Math.min(650,2*Math.abs(x)/g*t/250))),d=Math.min(3,g*f/Math.abs(x)),a=Math.ceil(f/8);return{keyframes:Array.from({length:a+1},(I,O)=>{const L=O/a,$=L*L,B=$*L,S=d*(B-2*$+L)+(-2*B+3*$),V=n+x*S;return{offset:L,transform:`translate3d(${V}px, 0, 0)`}}),options:{duration:f,easing:"linear",fill:"forwards"}}}function Jt(n){const u=e.ref("idle"),k=e.computed(()=>u.value!=="idle"),t=e.computed(()=>u.value==="dragging"),x=e.ref(!1);let g,w="",f=0,d=0,a=0,v=0,I=0,O=0,L=0,$=0,B=0,S,V,A,U=0,Z=!1,ae,K,ie="",Q=!1,ee,te=!1;const R=()=>n.rtl()?-1:1,_=()=>{var r;return(((r=n.viewport())==null?void 0:r.scrollLeft)??0)*R()};function de(r,P){const X=n.viewport();if(!X)return;const j=r*R();X.scrollTo?X.scrollTo(P===void 0?{left:j}:{left:j,behavior:P}):X.scrollLeft=j}function me(){const r=n.viewport();r&&(Q||(ie=r.style.scrollSnapType),Q=!0,r.style.scrollSnapType="none")}function ue(){const r=U;e.nextTick(()=>{te||r!==U||u.value!=="idle"||(n.viewport()&&(n.viewport().style.scrollSnapType=ie),Q=!1)})}function J(){const r=n.track();r&&(r.style.transform="",r.style.willChange="")}function H(){const r=n.track();if(!r||!S)return I;const P=getComputedStyle(r).transform,X=P.slice(P.indexOf("(")+1,-1).split(",").map(Number),j=P.startsWith("matrix3d")?X[12]:X[4];return Number.isFinite(j)?j:I}function T(){return S?v-H()*R():x.value?v-I*R():_()}function E(){const r=S;S=void 0,r&&(r.onfinish=null,r.oncancel=null,r.cancel()),A!==void 0&&cancelAnimationFrame(A),A=void 0}function le(){var X;const r=g;g=void 0;const P=n.viewport();r!==void 0&&((X=P==null?void 0:P.hasPointerCapture)!=null&&X.call(P,r))&&P.releasePointerCapture(r),window.removeEventListener("pointermove",fe),window.removeEventListener("pointerup",oe),window.removeEventListener("pointercancel",m),window.removeEventListener("blur",M)}function re(r,P){const X=++U;me(),u.value="committing",E(),J(),x.value=!1,I=0;const j=n.canonical(r);de(j,P),n.onPosition(j),n.onCommit(r),e.nextTick(()=>{te||X!==U||(de(j),u.value="idle",ue())})}function xe(r=!0){K!==void 0&&clearTimeout(K),K=void 0;const P=S!==void 0||I!==0,X=r?T():_();return++U,me(),le(),E(),J(),x.value=!1,V=void 0,I=0,u.value="idle",r&&(P&&de(X),n.onPosition(X)),ue(),X}function C(){S&&(n.onPosition(T()),A=requestAnimationFrame(C))}function F(){return typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}function q(r,P,X){const j=n.track(),p=(v-P)*R();if(!(j!=null&&j.animate)||F()||n.settleDuration()===0||Math.abs(p-I)<1){J(),x.value=!1,I=0,u.value="idle",!(j!=null&&j.animate)&&!F()&&n.settleDuration()!==0?(n.onCommit(r),V=P,de(P,"smooth"),ue()):re(r);return}++U,me(),u.value="settling",x.value=!0;const b=Zt(I,p,X,n.settleDuration()),z=j.animate(b.keyframes,b.options);S=z,z.onfinish=()=>{S===z&&re(r)},z.oncancel=()=>{S===z&&xe()},A=requestAnimationFrame(C)}function ve(r,P="smooth",X=0,j=!1){const p=xe(),b=n.target(r,p,X);n.onCommit(r),Math.abs(b-p)<.5||P!=="smooth"||F()?re(r,P):j?(v=_(),I=(v-p)*R(),q(r,b,0)):(u.value="settling",V=b,de(b,P),n.viewport()&&(n.viewport().style.scrollSnapType=ie),Q=!1)}function we(r){const P=r.currentTarget.scrollLeft*R();if(!(S||u.value==="dragging"||u.value==="committing")){if(n.onPosition(P),V!==void 0){if(Math.abs(P-V)>1)return;V=void 0,u.value="idle"}n.onCommit(n.indexAt(P))}}function pe(r){var j,p;if(g!==void 0||r.isPrimary===!1||r.pointerType==="mouse"&&(!n.mouseDrag()||r.button!==0)||!["mouse","touch","pen"].includes(r.pointerType)||(p=(j=r.target)==null?void 0:j.closest)!=null&&p.call(j,'input, textarea, select, [contenteditable="true"], [data-carousel-no-drag]'))return;V!==void 0&&de(_(),"auto");const P=T();S!==void 0?(I=H(),E(),n.track().style.transform=`translate3d(${I}px, 0, 0)`,x.value=!0):(I=0,v=_()),++U,V=void 0,u.value="pending",g=r.pointerId,w=r.pointerType,f=O=r.clientX,d=r.clientY,a=P,L=r.timeStamp,$=0,B=0,Z=!1,ae!==void 0&&clearTimeout(ae),window.addEventListener("pointermove",fe),window.addEventListener("pointerup",oe),window.addEventListener("pointercancel",m),window.addEventListener("blur",M)}function fe(r){var N,ge;if(g!==r.pointerId||r===ee)return;ee=r;const P=r.clientX-f,X=r.clientY-d,j=Number.isFinite(n.dragThreshold())?Math.max(1,n.dragThreshold()):8;if(u.value==="pending"){if(Math.max(Math.abs(P),Math.abs(X))<j)return;if(w!=="mouse"&&Math.abs(X)>=Math.abs(P)){xe();return}me(),u.value="dragging",(ge=(N=n.viewport())==null?void 0:N.setPointerCapture)==null||ge.call(N,r.pointerId)}if(u.value!=="dragging")return;r.cancelable&&r.preventDefault(),Z=!0;const p=r.timeStamp-L;if(p>0&&p<=80){const ce=Math.max(-2.5,Math.min(2.5,(r.clientX-O)/p));$=B===0?ce:$*.25+ce*.75,B+=1}else p>80&&($=0,B=0);O=r.clientX,L=r.timeStamp;let b=a-P*R();const[z,se]=n.limits();b<z&&(b=z+(b-z)*.35),b>se&&(b=se+(b-se)*.35),I=(v-b)*R(),A===void 0&&(A=requestAnimationFrame(()=>{A=void 0;const ce=n.track();!ce||u.value!=="dragging"||(ce.style.willChange="transform",ce.style.transform=`translate3d(${I}px, 0, 0)`,n.onPosition(v-I*R()))}))}function ne(r,P=!1){if(g===void 0||r&&g!==r.pointerId)return;const X=u.value==="dragging",j=I!==0;if(le(),A!==void 0&&cancelAnimationFrame(A),A=void 0,!X&&!j){u.value="idle",ue();return}const p=v-I*R(),b=r?Math.max(0,r.timeStamp-L):101,z=!P&&n.momentum()&&b<=100?$*Math.exp(-b/80):0,se=p-a,N=Math.min(80,Math.max(40,n.step()*.12)),ge=B>=2&&Math.abs(se)>=N?Xt(-z*R(),n.step()):0;let ce=n.indexAt(p+ge);const Se=n.indexAt(a),$e=Math.max(1,n.dragThreshold());!P&&X&&ce===Se&&Math.abs(se)>=$e&&(ce=Se+Math.sign(se));const Le=n.target(ce,p);n.onPosition(p),q(n.indexAt(Le),Le,z),ae!==void 0&&clearTimeout(ae),ae=setTimeout(()=>{Z=!1},0)}function oe(r){ne(r)}function m(r){ne(r,!0)}function M(){ne(void 0,!0)}function s(r){r.target===n.viewport()&&g===r.pointerId&&u.value==="dragging"&&ne(r,!0)}function Y(r){!Z||r.detail===0||(r.preventDefault(),r.stopPropagation(),Z=!1)}function G(){const r=S!==void 0||u.value==="dragging",P=xe();r&&n.onCommit(n.indexAt(P)),n.nativeSnap()||(K=setTimeout(()=>{if(K=void 0,te||u.value!=="idle")return;v=_(),I=0;const X=n.indexAt(v);q(X,n.target(X,v),0)},120))}function ye(r){g!==void 0&&r.preventDefault()}return e.onBeforeUnmount(()=>{xe(!1),te=!0,ae!==void 0&&clearTimeout(ae),n.viewport()&&(n.viewport().style.scrollSnapType=ie)}),{phase:u,busy:k,dragging:t,transformed:x,read:_,write:de,cancel:xe,commit:re,navigate:ve,displayedPosition:T,handleScroll:we,handlePointerDown:pe,handlePointerMove:fe,handlePointerUp:oe,handlePointerCancel:m,handleLostPointerCapture:s,handleClick:Y,handleWheel:G,handleDragStart:ye}}function Qt(n){let u;function k(){u!==void 0&&clearTimeout(u),u=void 0}function t(){if(k(),!n.enabled()||n.paused()||n.count()<2||n.atEnd()&&!n.loop())return;const x=Number.isFinite(n.delay())?Math.max(1,n.delay()):3e3;u=setTimeout(()=>{u=void 0,!n.paused()&&(n.atEnd()?n.rewind():n.advance(),t())},x)}return e.watch(()=>[n.enabled(),n.paused(),n.delay(),n.count(),n.loop(),n.atEnd()],t,{immediate:!0}),e.onBeforeUnmount(k),{start:t,stop:k}}function je(n,u){return u>0?(n%u+u)%u:0}function _t(n,u){const k=new Array(n.length+1);k[0]=0;for(let f=0;f<n.length;f+=1)k[f+1]=k[f]+n[f]+u;const t=k[n.length],x=Math.max(0,t-(n.length?u:0));function g(f){if(!n.length)return 0;let d=0,a=n.length-1;for(;d<a;){const v=Math.ceil((d+a)/2);k[v]<=f?d=v:a=v-1}return d}function w(f){const d=g(f),a=Math.min(n.length-1,d+1);return f-k[d]<=k[a]-f?d:a}return{offsets:k,cycleWidth:t,totalWidth:x,indexAt:g,nearestIndex:w}}const en=["dir","aria-label"],tn=["data-carousel-index","aria-label","aria-current","aria-hidden","inert"],nn={key:1,class:"vue-virtual-carousel__empty"},yt=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},mouseDrag:{type:Boolean,default:!0},dragThreshold:{default:8},momentum:{type:Boolean,default:!0},settleDuration:{default:250},nativeSnap:{type:Boolean,default:!0},autoWidth:{type:Boolean,default:!1},estimatedItemWidth:{default:240},rtl:{type:Boolean,default:!1},loop:{type:Boolean,default:!1},keepAlive:{type:Boolean,default:!1},maxCachedItems:{default:20},pinnedIndexes:{default:()=>[]},responsive:{default:void 0}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(n,{expose:u,emit:k}){const t=n,x=k,g=e.ref(),w=e.ref(),f=e.ref(0),d=e.ref(0),a=e.ref(0),v=e.ref(!1),I=e.ref(!1),O=e.ref(),L=e.shallowRef([]),$=e.shallowRef([0,1]),B=e.shallowRef(new Map),S=e.shallowRef([]);let V,A,U=-1,Z=!1;const ae=new Map,K=new Map,{getItemKey:ie}=We({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),Q=e.computed(()=>t.items.map((l,o)=>ie(l,o))),ee=e.computed(()=>new Map(Q.value.map((l,o)=>[l,o]))),te=(l,o,h)=>Math.max(o,Math.floor(Number.isFinite(l)?l:h)),R=e.computed(()=>{const l=[...t.responsive??[]].sort((o,h)=>h.breakpoint-o.breakpoint).find(o=>f.value>=o.breakpoint);return{slidesPerView:te((l==null?void 0:l.slidesPerView)??t.slidesPerView,1,1),slidesToScroll:te((l==null?void 0:l.slidesToScroll)??t.slidesToScroll,1,1),gap:Math.max(0,Number.isFinite((l==null?void 0:l.gap)??t.gap)?(l==null?void 0:l.gap)??t.gap:0)}}),_=e.computed(()=>te(t.buffer,0,1)),de=e.computed(()=>te(t.maxCachedItems,0,20)),me=e.computed(()=>f.value>0?Math.max(1,(f.value-(R.value.slidesPerView-1)*R.value.gap)/R.value.slidesPerView):0),ue=e.computed(()=>t.items.map((l,o)=>t.autoWidth?B.value.get(Q.value[o])??Math.max(1,Number.isFinite(t.estimatedItemWidth)?t.estimatedItemWidth:240):me.value)),J=e.computed(()=>_t(ue.value,R.value.gap)),H=e.computed(()=>t.loop&&t.items.length>1&&J.value.totalWidth>f.value),T=e.computed(()=>Math.max(0,J.value.totalWidth-f.value)),E=e.computed(()=>{if(H.value)return t.items.length-1;if(!t.autoWidth)return Math.max(0,t.items.length-R.value.slidesPerView);if(T.value<=0)return 0;const l=J.value.indexAt(T.value),o=J.value.offsets[l]<T.value-.01?l+1:l;return Math.min(t.items.length-1,o)}),le=e.computed(()=>H.value?J.value.cycleWidth*3:J.value.totalWidth),re=e.computed(()=>({height:Xe(t.height)})),xe=e.computed(()=>({width:`${le.value}px`,height:t.height==="auto"?`${Math.max(1,d.value)}px`:"100%"}));function C(l){const o=Math.floor(Number.isFinite(l)?l:0);return H.value?je(o,t.items.length):Math.max(0,Math.min(E.value,o))}a.value=C(t.activeIndex);function F(l){const o=J.value.offsets[C(l)]??0;return H.value?J.value.cycleWidth+o:Math.min(T.value,o)}function q(l){const o=J.value.cycleWidth;return H.value&&o>0?(l%o+o)%o:Math.max(0,l)}function ve(l){if(!H.value&&l>=T.value-1&&T.value>0)return E.value;const o=q(l);return H.value&&o>(J.value.offsets[t.items.length-1]+J.value.cycleWidth)/2?0:C(J.value.nearestIndex(o))}function we(l,o,h=0){const D=F(l);if(!H.value)return D;const he=J.value.cycleWidth,ze=[D-he,D,D+he],be=ze.filter(Ee=>h>0?Ee>o+.5:h<0?Ee<o-.5:!0);return(be.length?be:ze).sort((Ee,He)=>Math.abs(Ee-o)-Math.abs(He-o))[0]}function pe(l){if(!H.value)return J.value.indexAt(Math.max(0,l));const o=J.value.cycleWidth,h=Math.floor(l/o);return h*t.items.length+J.value.indexAt(l-h*o)}function fe(l){return H.value?Math.floor(l/t.items.length)*J.value.cycleWidth+J.value.offsets[je(l,t.items.length)]:J.value.offsets[l]??0}function ne(l){if(t.items.length===0){L.value=[],$.value=[0,0];return}if(f.value<=0)return;const o=pe(l),h=pe(l+f.value-.01);($.value[0]!==o||$.value[1]!==h+1)&&($.value=[o,h+1]);const D=[];for(let he=o;he<=h;he+=1){const ze=H.value?je(he,t.items.length):he;if(ze<0||ze>=t.items.length)continue;const be=fe(he);be+ue.value[ze]>l+.01&&be<l+f.value-.01&&!D.includes(ze)&&D.push(ze)}D.join(",")!==L.value.join(",")&&(L.value=D)}function oe(l){if(t.autoWidth){const o=F(a.value),h=we(l,o);return h+ue.value[l]>o&&h<o+f.value}return H.value?je(l-a.value,t.items.length)<R.value.slidesPerView:l>=a.value&&l<a.value+R.value.slidesPerView}function m(){if(!t.hasMore||t.loading||U===t.items.length)return;const l=t.autoWidth?L.value.length:R.value.slidesPerView;t.items.length-a.value-Math.max(1,l)<=te(t.loadMoreThreshold,0,2)&&(U=t.items.length,x("loadMore"))}function M(l){const o=C(l);!t.items.length||o===a.value||(a.value=o,x("update:activeIndex",o),x("change",{index:o,item:t.items[o]}),o===0&&x("reachStart"),o===E.value&&x("reachEnd"),m())}const s=Jt({viewport:()=>g.value,track:()=>w.value,rtl:()=>t.rtl,mouseDrag:()=>t.mouseDrag,nativeSnap:()=>t.nativeSnap&&!H.value,dragThreshold:()=>Math.max(1,Number.isFinite(t.dragThreshold)?t.dragThreshold:8),momentum:()=>t.momentum,settleDuration:()=>Math.max(0,Number.isFinite(t.settleDuration)?t.settleDuration:250),limits:()=>[0,H.value?Math.max(0,le.value-f.value):T.value],step:()=>ue.value[a.value]+R.value.gap||1,indexAt:ve,target:we,canonical:F,onPosition:ne,onCommit:M}),{phase:Y,dragging:G}=s,ye=Qt({enabled:()=>I.value&&t.autoplay,paused:()=>Y.value==="pending"||Y.value==="dragging"||Y.value==="committing"||H.value&&Y.value==="settling"||v.value&&t.pauseOnHover,delay:()=>t.autoplayDelay,count:()=>t.items.length,atEnd:()=>!H.value&&a.value>=E.value,loop:()=>H.value||t.autoplayLoop,advance:()=>Se(),rewind:()=>ce(0,{behavior:"smooth"})}),r=e.computed(()=>{const l=G.value||s.transformed.value,o=_.value+(l?R.value.slidesPerView+2:0);let h,D;!t.autoWidth&&!H.value&&!l?(h=Math.max(0,a.value-o),D=Math.min(t.items.length,a.value+R.value.slidesPerView+o)):(h=Math.max(0,$.value[0]-o),D=Math.min(H.value?t.items.length*3:t.items.length,$.value[1]+o));const he=($.value[0]+$.value[1]-1)/2,ze=new Map;for(let be=h;be<D;be+=1){const Ee=H.value?je(be,t.items.length):be,He=ze.get(Ee);(!He||Math.abs(be-he)<Math.abs(He.virtual-he))&&ze.set(Ee,{index:Ee,virtual:be,cached:!1})}return[...ze.values()].sort((be,Ee)=>be.virtual-Ee.virtual)});e.watch([L,Y,Q],()=>{if(Y.value!=="idle")return;const l=L.value.filter(h=>h<t.items.length).map(h=>Q.value[h]);if(!t.keepAlive){S.value=[];return}const o=S.value.filter(h=>ee.value.has(h)&&!l.includes(h));S.value=[...o,...l].slice(-(de.value+l.length))},{immediate:!0});const P=e.computed(()=>{const l=[...r.value],o=new Set(l.map(D=>D.index)),h=new Set;for(const D of t.pinnedIndexes.slice(0,de.value))Number.isInteger(D)&&D>=0&&D<t.items.length&&h.add(D);if(O.value!==void 0&&O.value<t.items.length&&h.add(O.value),t.keepAlive)for(const D of[...S.value].reverse()){const he=ee.value.get(D);he!==void 0&&!o.has(he)&&h.size<de.value&&h.add(he)}for(const D of h)o.has(D)||l.push({index:D,virtual:H.value?t.items.length+D:D,cached:D!==O.value});return l.sort((D,he)=>D.virtual-he.virtual).map(D=>({...D,item:t.items[D.index],key:Q.value[D.index]}))}),X=e.computed(()=>r.value.length?fe(r.value[0].virtual):0),j=e.computed(()=>!t.autoWidth&&!H.value&&!t.keepAlive&&!t.pinnedIndexes.length&&(O.value===void 0||r.value.some(l=>l.index===O.value))),p=e.computed(()=>{const l=r.value[r.value.length-1];return l?Math.max(0,le.value-fe(l.virtual)-ue.value[l.index]-R.value.gap):0});function b(l){const o=ue.value[l.index];return{position:j.value?"relative":"absolute",[t.rtl?"right":"left"]:j.value?void 0:`${fe(l.virtual)}px`,width:t.autoWidth?"max-content":`${o}px`,flexBasis:t.autoWidth?"auto":`${o}px`,marginRight:!t.rtl&&l.index<t.items.length-1?`${R.value.gap}px`:"0px",marginLeft:t.rtl&&l.index<t.items.length-1?`${R.value.gap}px`:"0px",height:t.height==="auto"?"auto":"100%",visibility:l.cached?"hidden":void 0,scrollSnapAlign:t.nativeSnap&&!H.value&&f.value>0?"start":"none"}}function z(){if(!K.size||Y.value!=="idle")return;const l=new Map(B.value);for(const[o,h]of K)l.set(o,h);K.clear(),B.value=l}function se(l,o){if(o<0||o>=t.items.length)return;const{width:h,height:D}=l.getBoundingClientRect();D>d.value&&(d.value=D);const he=Q.value[o];t.autoWidth&&h>0&&Math.abs((B.value.get(he)??0)-h)>.5&&K.set(he,h)}function N(){var o;if(Z||t.height!=="auto")return;let l=0;for(const h of r.value)l=Math.max(l,((o=ae.get(h.index))==null?void 0:o.getBoundingClientRect().height)??0);Math.abs(d.value-l)>.5&&(d.value=l)}function ge(l,o){const h=ae.get(o);if(h&&(A==null||A.unobserve(h)),!(l instanceof HTMLElement)){ae.delete(o);return}ae.set(o,l),(t.autoWidth||t.height==="auto")&&(A==null||A.observe(l),se(l,o),e.nextTick(z),e.nextTick(N))}function ce(l,o={}){!t.items.length||f.value<=0||s.navigate(C(l),o.behavior??"auto",0,H.value||!t.nativeSnap)}function Se(l="smooth"){!t.items.length||f.value<=0||s.navigate(C(a.value+R.value.slidesToScroll),l,1,H.value||!t.nativeSnap)}function $e(l="smooth"){!t.items.length||f.value<=0||s.navigate(C(a.value-R.value.slidesToScroll),l,-1,H.value||!t.nativeSnap)}function Le(l){var D,he;if((he=(D=l.target)==null?void 0:D.closest)!=null&&he.call(D,'input, textarea, select, [contenteditable="true"]'))return;const o=t.rtl?"ArrowLeft":"ArrowRight",h=t.rtl?"ArrowRight":"ArrowLeft";l.key===o||l.key==="PageDown"?(l.preventDefault(),Se()):l.key===h||l.key==="PageUp"?(l.preventDefault(),$e()):l.key==="Home"?(l.preventDefault(),ce(0,{behavior:"smooth"})):l.key==="End"&&(l.preventDefault(),ce(E.value))}function nt(l){var h,D;const o=(D=(h=l.target)==null?void 0:h.closest)==null?void 0:D.call(h,"[data-carousel-index]");O.value=o?Number(o.getAttribute("data-carousel-index")):void 0}function Ze(){e.nextTick(()=>{var l;(l=g.value)!=null&&l.contains(document.activeElement)||(O.value=void 0)})}function Oe(){s.cancel(!1),t.items.length?M(C(a.value)):a.value!==0&&(a.value=0,x("update:activeIndex",0)),Z||s.commit(a.value),e.nextTick(m)}function Ye(){var o;const l=((o=g.value)==null?void 0:o.clientWidth)??0;l<=0||l===f.value||(f.value=l)}return e.watch(()=>[t.items.length,f.value,R.value.slidesPerView,R.value.gap,t.rtl,H.value,t.autoWidth,t.nativeSnap,B.value],Oe),e.watch(()=>t.activeIndex,l=>{const o=C(l);o!==a.value&&(s.cancel(!1),a.value=o,s.commit(o),e.nextTick(m))}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],()=>{t.hasMore||(U=-1),e.nextTick(m)}),e.watch(()=>Q.value,l=>{const o=new Set(l);B.value=new Map([...B.value].filter(([h])=>o.has(h))),S.value=S.value.filter(h=>o.has(h))}),e.watch(Y,l=>{l==="idle"&&e.nextTick(z)}),e.watch(()=>[t.keepAlive,t.maxCachedItems],()=>{const l=L.value.map(o=>Q.value[o]);S.value=t.keepAlive?[...S.value.filter(o=>!l.includes(o)),...l].slice(-(de.value+l.length)):[]}),e.onMounted(async()=>{if(Ye(),typeof ResizeObserver<"u"&&(V=new ResizeObserver(Ye),g.value&&V.observe(g.value),A=new ResizeObserver(l=>{for(const o of l)se(o.target,Number(o.target.dataset.carouselIndex));z(),N()}),t.autoWidth||t.height==="auto"))for(const[l,o]of ae)A.observe(o),se(o,l);await e.nextTick(),Oe(),I.value=!0}),e.onBeforeUnmount(()=>{Z=!0,V==null||V.disconnect(),A==null||A.disconnect()}),u({next:Se,previous:$e,scrollToIndex:ce,startAutoplay:ye.start,stopAutoplay:ye.stop}),(l,o)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:g,class:e.normalizeClass(["vue-virtual-carousel",{"vue-virtual-carousel--mouse-drag":n.mouseDrag,"vue-virtual-carousel--dragging":e.unref(G),"vue-virtual-carousel--controlled":H.value||!n.nativeSnap}]),style:e.normalizeStyle(re.value),dir:n.rtl?"rtl":"ltr",role:"region","aria-roledescription":"carousel","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:o[0]||(o[0]=(...h)=>e.unref(s).handleScroll&&e.unref(s).handleScroll(...h)),onPointerdown:o[1]||(o[1]=(...h)=>e.unref(s).handlePointerDown&&e.unref(s).handlePointerDown(...h)),onPointermove:o[2]||(o[2]=(...h)=>e.unref(s).handlePointerMove&&e.unref(s).handlePointerMove(...h)),onPointerup:o[3]||(o[3]=(...h)=>e.unref(s).handlePointerUp&&e.unref(s).handlePointerUp(...h)),onPointercancel:o[4]||(o[4]=(...h)=>e.unref(s).handlePointerCancel&&e.unref(s).handlePointerCancel(...h)),onLostpointercapture:o[5]||(o[5]=(...h)=>e.unref(s).handleLostPointerCapture&&e.unref(s).handleLostPointerCapture(...h)),onClickCapture:o[6]||(o[6]=(...h)=>e.unref(s).handleClick&&e.unref(s).handleClick(...h)),onDragstart:o[7]||(o[7]=(...h)=>e.unref(s).handleDragStart&&e.unref(s).handleDragStart(...h)),onWheelPassive:o[8]||(o[8]=(...h)=>e.unref(s).handleWheel&&e.unref(s).handleWheel(...h)),onKeydown:Le,onMouseenter:o[9]||(o[9]=h=>v.value=!0),onMouseleave:o[10]||(o[10]=h=>v.value=!1),onFocusin:nt,onFocusout:Ze},[n.items.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"track",ref:w,class:"vue-virtual-carousel__track",style:e.normalizeStyle(xe.value),role:"list"},[X.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${X.value}px`,position:j.value?"relative":"absolute"}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value,h=>(e.openBlock(),e.createElementBlock("div",{key:h.key,ref_for:!0,ref:D=>ge(D,h.index),class:"vue-virtual-carousel__item","data-carousel-index":h.index,style:e.normalizeStyle(b(h)),role:"listitem","aria-roledescription":"slide","aria-label":`${h.index+1} of ${n.items.length}`,"aria-current":h.index===a.value?"true":void 0,"aria-hidden":h.cached?"true":void 0,inert:h.cached?!0:void 0},[e.renderSlot(l.$slots,"default",{item:h.item,index:h.index,active:h.index===a.value,visible:oe(h.index),inViewport:L.value.includes(h.index)})],12,tn))),128)),p.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${p.value}px`,position:j.value?"relative":"absolute"}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",nn,[e.renderSlot(l.$slots,"empty")]))],46,en))}}),ln=["aria-label"],an=["aria-posinset","aria-setsize"],xt=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:u,emit:k}){const t=n,x=k,{pulling:g,pullDistance:w,pullOffset:f,pullProgress:d,refreshMessage:a,refreshThreshold:v,handleTouchStart:I,handleTouchMove:O,handleTouchEnd:L,handleTouchCancel:$}=tt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh")}),B=e.ref(),S=e.ref(0),V=e.ref(0);let A,U=-1;const Z=et(),{getItemKey:ae}=We({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),K=e.computed(()=>Math.max(1,t.itemSize)),ie=e.computed(()=>Math.max(0,Math.floor(t.overscan))),Q=e.computed(()=>t.items.length*K.value),ee=e.computed(()=>Math.max(1,t.loadingItemSize??K.value)),te=e.computed(()=>Q.value+(t.loading?ee.value:0)),R=e.computed(()=>V.value>0?V.value:typeof t.height=="number"?t.height:0),_=e.computed(()=>Math.max(0,Math.floor(S.value/K.value)-ie.value)),de=e.computed(()=>{const C=Math.ceil((S.value+R.value)/K.value);return Math.min(t.items.length,C+ie.value)}),me=e.computed(()=>t.items.slice(_.value,de.value).map((C,F)=>({item:C,index:_.value+F}))),ue=e.computed(()=>({height:Xe(t.height)})),J=e.computed(()=>({transform:`translateY(${_.value*K.value}px)`}));function H(){var C;V.value=((C=B.value)==null?void 0:C.clientHeight)??0,Z(B.value,t.height),e.nextTick(E)}function T(C){S.value=C.currentTarget.scrollTop,x("scroll",{scrollTop:S.value,startIndex:_.value,endIndex:de.value}),E()}function E(){const C=B.value;if(!C||!t.hasMore||t.loading||U===t.items.length)return;const F=Math.max(0,t.loadMoreThreshold);te.value-C.scrollTop-C.clientHeight<=F&&(U=t.items.length,x("loadMore"))}function le(C,F={}){const q=B.value;if(!q)return;const ve=Math.max(0,te.value-q.clientHeight),we=Math.min(Math.max(0,Number.isFinite(C)?C:0),ve),pe=F.behavior??"auto";pe==="auto"&&(S.value=we),q.scrollTo({...F,top:we,behavior:pe})}function re(C,F={}){const q=B.value;if(!q||t.items.length===0)return;const ve=Math.min(t.items.length-1,Math.max(0,Math.floor(C))),{align:we="start",...pe}=F;let fe=ve*K.value;we==="center"?fe-=(q.clientHeight-K.value)/2:we==="end"&&(fe-=q.clientHeight-K.value),q.scrollTo({...pe,top:Math.max(0,Math.min(fe,te.value-q.clientHeight))})}function xe(C="auto"){var F;(F=B.value)==null||F.scrollTo({top:0,behavior:C})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const C=B.value;if(!C)return;const F=Math.max(0,te.value-C.clientHeight);C.scrollTop>F&&(C.scrollTop=F,S.value=F),E()}),e.watch(()=>[t.hasMore,t.loading],async([C])=>{C||(U=-1),await e.nextTick(),E()}),e.onMounted(()=>{H(),typeof ResizeObserver<"u"&&B.value&&(A=new ResizeObserver(H),A.observe(B.value)),e.nextTick(E)}),e.onBeforeUnmount(()=>{A&&(A.disconnect(),A=void 0)}),u({scrollTo:le,scrollToIndex:re,scrollToTop:xe}),(C,F)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:B,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(g)}]),style:e.normalizeStyle(ue.value),role:"list","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:T,onTouchstartPassive:F[0]||(F[0]=(...q)=>e.unref(I)&&e.unref(I)(...q)),onTouchmove:F[1]||(F[1]=(...q)=>e.unref(O)&&e.unref(O)(...q)),onTouchend:F[2]||(F[2]=(...q)=>e.unref(L)&&e.unref(L)(...q)),onTouchcancel:F[3]||(F[3]=(...q)=>e.unref($)&&e.unref($)(...q))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(v)}px`,transform:`translateY(${e.unref(f)-e.unref(v)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(C.$slots,"refresh",{pullDistance:e.unref(w),progress:e.unref(d),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(a)),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:`${te.value}px`,transform:`translateY(${e.unref(f)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(J.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(me.value,({item:q,index:ve})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(ae)(q,ve),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${K.value}px`}),role:"listitem","aria-posinset":ve+1,"aria-setsize":n.items.length},[e.renderSlot(C.$slots,"default",{item:q,index:ve})],12,an))),128))],4),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${ee.value}px`,transform:`translateY(${Q.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(C.$slots,"loading",{},()=>[F[4]||(F[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(f)}px)`})},[e.renderSlot(C.$slots,"empty")],4))],46,ln))}}),on=["aria-label"],rn=["aria-posinset","aria-setsize"],wt=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:u,emit:k}){const t=n,x=k,g=e.ref(),w=e.ref(0),f=e.ref(0),d=e.ref(0),a=e.ref(0),v=new Map,I=new Map,O=new Map;let L,$,B,S,V=!1,A=!1,U=-1;const{getItemKey:Z}=We({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey});function ae(p){return typeof window.requestAnimationFrame=="function"?{id:window.requestAnimationFrame(p),type:"animation"}:{id:window.setTimeout(p,0),type:"timeout"}}function K(p){p&&(p.type==="animation"?window.cancelAnimationFrame(p.id):window.clearTimeout(p.id))}const{pulling:ie,pullDistance:Q,pullOffset:ee,pullProgress:te,refreshMessage:R,refreshThreshold:_,handleTouchStart:de,handleTouchMove:me,handleTouchEnd:ue,handleTouchCancel:J}=tt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),H=e.computed(()=>Math.max(1,t.estimatedItemSize)),T=e.computed(()=>Math.max(1,t.loadingItemSize??H.value)),E=e.computed(()=>Math.max(0,Math.floor(t.overscan))),le=e.computed(()=>{a.value;const p=new Array(t.items.length+1),b=new Array(t.items.length);p[0]=0;for(let z=0;z<t.items.length;z+=1){const se=Z(t.items[z],z),N=v.get(se)??H.value;b[z]=N,p[z+1]=p[z]+N}return{offsets:p,sizes:b,total:p[t.items.length]??0}}),re=e.computed(()=>le.value.total+(t.loading?T.value:0)),xe=e.computed(()=>{const p=new Map;return t.items.forEach((b,z)=>{p.set(Z(b,z),z)}),p}),C=e.computed(()=>Math.max(0,w.value-d.value));function F(p){if(t.items.length===0)return 0;const b=le.value.offsets;let z=0,se=t.items.length;for(;z<se;){const N=Math.floor((z+se)/2);b[N+1]<=p?z=N+1:se=N}return Math.min(z,t.items.length-1)}const q=e.computed(()=>Math.max(0,F(C.value)-E.value)),ve=e.computed(()=>{if(t.items.length===0)return 0;const p=w.value+f.value-d.value,b=Math.max(H.value,p),z=F(b)+1;return Math.min(t.items.length,z+E.value)}),we=e.computed(()=>t.items.slice(q.value,ve.value).map((p,b)=>{const z=q.value+b;return{item:p,index:z,key:Z(p,z),top:le.value.offsets[z]}}));function pe(){typeof window>"u"||(w.value=Math.max(0,window.scrollY),f.value=window.innerHeight,g.value&&(d.value=g.value.getBoundingClientRect().top+w.value))}function fe(){x("scroll",{scrollTop:C.value,startIndex:q.value,endIndex:ve.value})}function ne(p=!1){A&&(V||(V=p),!B&&(B=ae(()=>{B=void 0,pe(),V&&(V=!1,fe()),M()})))}function oe(){ne(!0)}function m(){ne()}function M(){if(typeof window>"u"||!t.hasMore||t.loading||U===t.items.length)return;const p=Math.max(0,t.loadMoreThreshold),b=d.value+re.value,z=w.value+f.value;b-z<=p&&(U=t.items.length,x("loadMore"))}function s(p){const b=p.borderBoxSize;if(b){const z=Array.isArray(b)?b[0]:b;if(z!=null&&z.blockSize)return z.blockSize}return p.contentRect.height}function Y(p){const b=le.value;let z=0,se=!1;for(const N of p){const ge=N.target,ce=I.get(ge),Se=s(N);if(ce===void 0||Se<=0)continue;const $e=v.get(ce)??H.value;if(Math.abs($e-Se)<.5)continue;const Le=xe.value.get(ce);Le!==void 0&&b.offsets[Le+1]<=C.value&&(z+=Se-$e),v.set(ce,Se),se=!0}se&&(a.value+=1,e.nextTick(()=>{if(A){if(z!==0&&typeof window<"u"){const N=Math.max(0,w.value+z);w.value=N,window.scrollTo({top:N,behavior:"auto"})}pe(),M()}}))}function G(p){if(A){for(const b of p)O.set(b.target,b);S||(S=ae(()=>{S=void 0;const b=Array.from(O.values());O.clear(),Y(b)}))}}function ye(p,b){p instanceof HTMLElement&&(I.set(p,b),$==null||$.observe(p))}function r(){for(const[p]of I)p.isConnected||($==null||$.unobserve(p),I.delete(p))}function P(p,b={}){if(typeof window>"u")return;pe();const z=Math.max(0,re.value-f.value),se=Math.min(Math.max(0,Number.isFinite(p)?p:0),z),N=Math.max(0,d.value+se),ge=b.behavior??"auto";ge==="auto"&&(w.value=N),window.scrollTo({...b,top:N,behavior:ge})}function X(p,b={}){if(typeof window>"u"||t.items.length===0)return;pe();const z=Math.min(t.items.length-1,Math.max(0,Math.floor(p))),{align:se="start",...N}=b,ge=le.value.sizes[z];let ce=d.value+le.value.offsets[z];se==="center"?ce-=(f.value-ge)/2:se==="end"&&(ce-=f.value-ge);const Se=Math.max(d.value,d.value+re.value-f.value),$e=Math.max(0,Math.min(ce,Se)),Le=N.behavior??"auto";Le==="auto"&&(w.value=$e),window.scrollTo({...N,top:$e,behavior:Le})}function j(p="auto"){typeof window>"u"||(pe(),window.scrollTo({top:Math.max(0,d.value),behavior:p}))}return e.watch(()=>t.itemKey,()=>{v.clear(),a.value+=1,U=-1}),e.watch(()=>t.items.map((p,b)=>Z(p,b)),async(p,b)=>{const z=p.length!==b.length||p.some((N,ge)=>N!==b[ge]),se=new Set(p);for(const N of v.keys())se.has(N)||v.delete(N);z&&(U=-1),a.value+=1,await e.nextTick(),A&&(pe(),M())}),e.watch(()=>[t.hasMore,t.loading],async([p])=>{p||(U=-1),await e.nextTick(),A&&(pe(),M())}),e.onMounted(()=>{if(A=!0,pe(),window.addEventListener("scroll",oe,{passive:!0}),window.addEventListener("resize",m,{passive:!0}),typeof ResizeObserver<"u"){L=new ResizeObserver(()=>{ne()}),$=new ResizeObserver(G),g.value&&L.observe(g.value);for(const[p]of I)$.observe(p)}e.nextTick(()=>{A&&M()})}),e.onUpdated(r),e.onBeforeUnmount(()=>{A=!1,window.removeEventListener("scroll",oe),window.removeEventListener("resize",m),K(B),K(S),B=void 0,S=void 0,V=!1,O.clear(),L&&(L.disconnect(),L=void 0),$&&($.disconnect(),$=void 0),I.clear()}),u({scrollTo:P,scrollToIndex:X,scrollToTop:j}),(p,b)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:g,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(ie)}]),role:"list","aria-label":n.ariaLabel,onTouchstartPassive:b[0]||(b[0]=(...z)=>e.unref(de)&&e.unref(de)(...z)),onTouchmove:b[1]||(b[1]=(...z)=>e.unref(me)&&e.unref(me)(...z)),onTouchend:b[2]||(b[2]=(...z)=>e.unref(ue)&&e.unref(ue)(...z)),onTouchcancel:b[3]||(b[3]=(...z)=>e.unref(J)&&e.unref(J)(...z))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(_)}px`,transform:`translateY(${e.unref(ee)-e.unref(_)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(p.$slots,"refresh",{pullDistance:e.unref(Q),progress:e.unref(te),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(R)),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:`${re.value}px`,transform:`translateY(${e.unref(ee)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(we.value,({item:z,index:se,key:N,top:ge})=>(e.openBlock(),e.createElementBlock("div",{key:N,ref_for:!0,ref:ce=>ye(ce,N),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${ge}px)`}),role:"listitem","aria-posinset":se+1,"aria-setsize":n.items.length},[e.renderSlot(p.$slots,"default",{item:z,index:se})],12,rn))),128)),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${T.value}px`,transform:`translateY(${le.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(p.$slots,"loading",{},()=>[b[4]||(b[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(ee)}px)`})},[e.renderSlot(p.$slots,"empty")],4))],42,on))}}),sn=["aria-label"],un=["aria-posinset","aria-setsize"],Mt=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:u,emit:k}){const t=n,x=k,g=e.ref(),w=e.ref(0),f=e.ref(0),d=e.ref(0);let a,v=-1;const{getItemKey:I}=We({componentName:"WindowGirdVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:O,pullDistance:L,pullOffset:$,pullProgress:B,refreshMessage:S,refreshThreshold:V,handleTouchStart:A,handleTouchMove:U,handleTouchEnd:Z,handleTouchCancel:ae}=tt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),K=e.computed(()=>Math.max(1,t.itemSize)),ie=e.computed(()=>Math.max(1,Math.floor(t.columns))),Q=e.computed(()=>Math.max(0,t.gap)),ee=e.computed(()=>Math.max(0,Math.floor(t.overscan))),te=e.computed(()=>Math.max(1,t.loadingItemSize??K.value)),R=e.computed(()=>K.value+Q.value),_=e.computed(()=>Math.ceil(t.items.length/ie.value)),de=e.computed(()=>_.value===0?0:_.value*K.value+(_.value-1)*Q.value),me=e.computed(()=>de.value+(t.items.length?Q.value:0)),ue=e.computed(()=>de.value+(t.loading?te.value+(t.items.length?Q.value:0):0)),J=e.computed(()=>Math.max(0,w.value-d.value)),H=e.computed(()=>Math.max(0,Math.floor(J.value/R.value)-ee.value)),T=e.computed(()=>{if(_.value===0)return 0;const ne=Math.max(K.value,w.value+f.value-d.value),oe=Math.ceil((ne+Q.value)/R.value);return Math.min(_.value,oe+ee.value)}),E=e.computed(()=>Math.min(t.items.length,H.value*ie.value)),le=e.computed(()=>Math.min(t.items.length,T.value*ie.value)),re=e.computed(()=>t.items.slice(E.value,le.value).map((ne,oe)=>{const m=E.value+oe;return{item:ne,index:m,key:I(ne,m),rowIndex:Math.floor(m/ie.value),columnIndex:m%ie.value}})),xe=e.computed(()=>({gridTemplateColumns:`repeat(${ie.value}, minmax(0, 1fr))`,columnGap:`${Q.value}px`,rowGap:`${Q.value}px`,transform:`translateY(${H.value*R.value}px)`}));function C(){typeof window>"u"||(w.value=Math.max(0,window.scrollY),f.value=window.innerHeight,g.value&&(d.value=g.value.getBoundingClientRect().top+w.value))}function F(){x("scroll",{scrollTop:J.value,startIndex:E.value,endIndex:le.value})}function q(){C(),F(),ve()}function ve(){if(typeof window>"u"||!t.hasMore||t.loading||v===t.items.length)return;const ne=Math.max(0,t.loadMoreThreshold),oe=d.value+ue.value,m=w.value+f.value;oe-m<=ne&&(v=t.items.length,x("loadMore"))}function we(ne,oe={}){if(typeof window>"u")return;C();const m=Math.max(0,ue.value-f.value),M=Math.min(Math.max(0,Number.isFinite(ne)?ne:0),m),s=Math.max(0,d.value+M),Y=oe.behavior??"auto";Y==="auto"&&(w.value=s),window.scrollTo({...oe,top:s,behavior:Y})}function pe(ne,oe={}){if(typeof window>"u"||t.items.length===0)return;C();const m=Math.min(t.items.length-1,Math.max(0,Math.floor(ne))),M=Math.floor(m/ie.value),{align:s="start",...Y}=oe;let G=d.value+M*R.value;s==="center"?G-=(f.value-K.value)/2:s==="end"&&(G-=f.value-K.value);const ye=Math.max(d.value,d.value+ue.value-f.value),r=Math.max(0,Math.min(G,ye)),P=Y.behavior??"auto";P==="auto"&&(w.value=r),window.scrollTo({...Y,top:r,behavior:P})}function fe(ne="auto"){typeof window>"u"||(C(),window.scrollTo({top:Math.max(0,d.value),behavior:ne}))}return e.watch(()=>[t.items.length,t.itemSize,t.columns,t.gap],async()=>{await e.nextTick(),C(),ve()}),e.watch(()=>[t.hasMore,t.loading],async([ne])=>{ne||(v=-1),await e.nextTick(),C(),ve()}),e.onMounted(()=>{C(),window.addEventListener("scroll",q,{passive:!0}),window.addEventListener("resize",q,{passive:!0}),typeof ResizeObserver<"u"&&(a=new ResizeObserver(()=>{C(),ve()}),g.value&&a.observe(g.value)),e.nextTick(ve)}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",q),window.removeEventListener("resize",q),a&&(a.disconnect(),a=void 0)}),u({scrollTo:we,scrollToIndex:pe,scrollToTop:fe}),(ne,oe)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:g,class:e.normalizeClass(["vue-window-gird-virtual-scroll",{"vue-window-gird-virtual-scroll--pulling":e.unref(O)}]),role:"list","aria-label":n.ariaLabel,onTouchstartPassive:oe[0]||(oe[0]=(...m)=>e.unref(A)&&e.unref(A)(...m)),onTouchmove:oe[1]||(oe[1]=(...m)=>e.unref(U)&&e.unref(U)(...m)),onTouchend:oe[2]||(oe[2]=(...m)=>e.unref(Z)&&e.unref(Z)(...m)),onTouchcancel:oe[3]||(oe[3]=(...m)=>e.unref(ae)&&e.unref(ae)(...m))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(V)}px`,transform:`translateY(${e.unref($)-e.unref(V)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(ne.$slots,"refresh",{pullDistance:e.unref(L),progress:e.unref(B),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(S)),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:`${ue.value}px`,transform:`translateY(${e.unref($)}px)`})},[e.createElementVNode("div",{class:"vue-window-gird-virtual-scroll__content",style:e.normalizeStyle(xe.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(re.value,({item:m,index:M,key:s,rowIndex:Y,columnIndex:G})=>(e.openBlock(),e.createElementBlock("div",{key:s,class:"vue-window-gird-virtual-scroll__item",style:e.normalizeStyle({height:`${K.value}px`}),role:"listitem","aria-posinset":M+1,"aria-setsize":n.items.length},[e.renderSlot(ne.$slots,"default",{item:m,index:M,rowIndex:Y,columnIndex:G})],12,un))),128))],4),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__loading",style:e.normalizeStyle({height:`${te.value}px`,transform:`translateY(${me.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(ne.$slots,"loading",{},()=>[oe[4]||(oe[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($)}px)`})},[e.renderSlot(ne.$slots,"empty")],4))],42,sn))}}),Tt=ut,St={install(n){n.component("ChatVirtualScroll",ht),n.component("DynamicVirtualScroll",ut),n.component("ShortMediaFeed",pt),n.component("SkeletonLoader",gt),n.component("VirtualCarousel",yt),n.component("VirtualList",Tt),n.component("VirtualScroll",xt),n.component("WindowDynamicVirtualScroll",wt),n.component("WindowGirdVirtualScroll",Mt)}};exports.ChatVirtualScroll=ht;exports.DynamicVirtualScroll=ut;exports.ShortMediaFeed=pt;exports.SkeletonLoader=gt;exports.VirtualCarousel=yt;exports.VirtualList=Tt;exports.VirtualScroll=xt;exports.VueVirtualScroll=St;exports.WindowDynamicVirtualScroll=wt;exports.WindowGirdVirtualScroll=Mt;exports.default=St;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");function vt(n){return typeof n=="string"||typeof n=="number"||typeof n=="symbol"}function rt(n,u){const k=n[u];return vt(k)?k:void 0}function Ct(n){return rt(n,"id")??rt(n,"key")}function Oe(n){const u=new WeakMap,k=new Map;function t(g){if(vt(g))return g;if(g!==null&&typeof g=="object"){let c=u.get(g);return c||(c=Symbol(`${n.componentName} item`),u.set(g,c)),c}let s=k.get(g);return s||(s=Symbol(`${n.componentName} primitive`),k.set(g,s)),s}function b(g,s){const c=n.itemKey();if(typeof c=="function")return c(g,s);if(g!==null&&typeof g=="object"){if(c!==void 0){const x=rt(g,c);if(x!==void 0)return x}const a=Ct(g);if(a!==void 0)return a}return t(g)}function w(){}return e.watch(()=>[n.itemKey(),n.items(),n.items().length],w,{immediate:!0}),{getItemKey:b}}const $t=new Set(["ArrowDown","ArrowUp","End","Home","PageDown","PageUp"," "]);function Lt(n){const u=e.ref(!1);let k=!1,t=!1,b;function w(){clearTimeout(b),b=void 0}function g(I){I!==u.value&&(u.value=I,n.onChange(I))}function s(){k||t||(w(),g(!1),n.onSettled())}function c(){w(),(u.value||n.hasProgrammaticScroll())&&!k&&!t&&(b=setTimeout(s,n.delay()))}function a(){n.onInterrupt(),w(),g(!0),n.onStart()}function x(){k=!0,a()}function K(I){k=I.touches.length>0,c()}function V(){a(),c()}function T(I){n.onInterrupt(),$t.has(I.key)&&(a(),c())}function L(I){n.onInterrupt(),I.pointerType==="mouse"&&I.target===n.viewport()&&(t=!0,a())}function E(){t&&(t=!1,c())}return{isScrolling:u,setScrolling:g,scheduleScrollEnd:c,handleScrollEnd:s,handleTouchStart:x,handleTouchEnd:K,handleWheel:V,handleKeyDown:T,handlePointerDown:L,handlePointerUp:E,dispose:w}}function Je(n){return n==="fill"?"100%":typeof n=="number"?`${n}px`:n}function tt(n){return(u,k)=>{typeof k=="string"&&(k==="fill"||k.trim().endsWith("%"))}}function Pe(n){return(n==null?void 0:n.count)??0}function Xe(n){return(n==null?void 0:n.total)??0}function st(n){n.count=1+Pe(n.left)+Pe(n.right),n.total=n.size+Xe(n.left)+Xe(n.right),n.left&&(n.left.parent=n),n.right&&(n.right.parent=n)}function Ze(n,u){return n?u?n.priority<u.priority?(n.right=Ze(n.right,u),st(n),n):(u.left=Ze(n,u.left),st(u),u):n:u}function Vt(n){let u,k=0;const t=new Map;function b(c){const a=new Set;for(const x of c){if(t.has(x.key)||a.has(x.key))throw new Error(`[vue-virtual-flow] Duplicate item key \`${String(x.key)}\`. ChatVirtualScroll requires a unique stable key for every message.`);a.add(x.key)}}function w(c){k+=1;let a=Math.imul(k^2654435769,2246822507);a^=a>>>13,a=Math.imul(a,3266489909)^a>>>16;const x={key:c.key,size:c.size,priority:a>>>0,count:1,total:c.size};return t.set(c.key,x),x}function g(c){let a;for(const x of c)a=Ze(a,w(x));return a&&(a.parent=void 0),a}function s(c){let a=u,x=c;for(;a;){const K=Pe(a.left);if(x<K)a=a.left;else{if(x===K)return a;x-=K+1,a=a.right}}}return b(n),u=g(n),{get length(){return Pe(u)},get total(){return Xe(u)},getSize(c){var a;return((a=s(c))==null?void 0:a.size)??0},getOffset(c){let a=u,x=Math.max(0,Math.min(c,Pe(u))),K=0;for(;a&&x>0;){const V=Pe(a.left);x<=V?a=a.left:(K+=Xe(a.left)+a.size,x-=V+1,a=a.right)}return K},setSize(c,a){let x=s(c);if(!(!x||x.size===a))for(x.size=a;x;)st(x),x=x.parent},findIndex(c){if(!u||c<=0)return 0;if(c>=u.total)return u.count-1;let a=u,x=0,K=c;for(;a;){const V=Xe(a.left),T=Pe(a.left);if(K<V)a=a.left;else{if(K<V+a.size)return x+T;K-=V+a.size,x+=T+1,a=a.right}}return Math.max(0,Pe(u)-1)},getKey(c){var a;return(a=s(c))==null?void 0:a.key},getIndex(c){let a=t.get(c);if(!a)return;let x=Pe(a.left);for(;a.parent;)a===a.parent.right&&(x+=Pe(a.parent.left)+1),a=a.parent;return a===u?x:void 0},getSizeByKey(c){var a;return(a=t.get(c))==null?void 0:a.size},hasKey(c){return t.has(c)},append(c){c.length!==0&&(b(c),u=Ze(u,g(c)),u&&(u.parent=void 0))},prepend(c){c.length!==0&&(b(c),u=Ze(g(c),u),u&&(u.parent=void 0))}}}const Pt=["aria-label","aria-live"],Dt={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},At=["aria-posinset","aria-setsize"],Nt={key:0,class:"vue-chat-virtual-scroll__new-items",role:"status"},ht=e.defineComponent({name:"ChatVirtualScroll",inheritAttrs:!1,__name:"ChatVirtualScroll",props:{items:{},itemsVersion:{},estimatedItemSize:{default:48},estimateItemSize:{},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},scrollEndDelay:{default:150},syncMeasurement:{type:Boolean,default:!0},pinnedKeys:{default:()=>[]},maxPinnedItems:{default:20},keepFocusedItem:{type:Boolean,default:!0},showNewItemsIndicator:{type:Boolean,default:!0},newItemsLabel:{type:Function,default:void 0},forceStickToBottom:{type:Function,default:void 0},contain:{type:Boolean,default:!0}},emits:["scroll","loadOlder","bottomChange","scrollingChange","newItemsChange","visibleChange"],setup(n,{expose:u,emit:k}){const t=n,b=k,w=e.ref(),g=e.ref(0),s=e.ref(0),c=e.ref(0),a=e.ref(0),x=e.ref(!0),K=e.ref(0),V=e.ref(),T=new Set,L=new Map,E=new Set;let I,P,A=-1,U=!1,O=0,ne=!1,R=0,J,Q,_,te=0;const Z=tt(),{getItemKey:le}=Oe({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),ie=e.computed(()=>Number.isFinite(t.estimatedItemSize)?Math.max(1,t.estimatedItemSize):48),ue=e.computed(()=>Math.max(0,Math.floor(t.overscan))),re=e.computed(()=>Number.isFinite(t.scrollEndDelay)?Math.max(0,t.scrollEndDelay):150),{isScrolling:j,setScrolling:W,scheduleScrollEnd:S,handleScrollEnd:$,handleTouchStart:ee,handleTouchEnd:se,handleWheel:be,handleKeyDown:B,handlePointerDown:H,handlePointerUp:G,dispose:de}=Lt({delay:()=>re.value,viewport:()=>w.value,hasProgrammaticScroll:()=>_!==void 0,onInterrupt:we,onStart:()=>{s.value=O},onSettled:()=>{const i=_;if(_=void 0,i){i();return}g.value=C(),ve()},onChange:i=>{U&&b("scrollingChange",i)}}),ye=e.computed(()=>Number.isFinite(t.maxPinnedItems)?Math.max(0,Math.floor(t.maxPinnedItems)):20),pe=e.computed(()=>t.size!==void 0&&Number.isFinite(t.size)&&t.size>0?Math.max(1,Math.floor(t.size)):void 0),me=e.computed(()=>c.value>0?c.value:typeof t.height=="number"?Math.max(0,t.height):ie.value);function ae(i,d){var F;const p=(F=t.estimateItemSize)==null?void 0:F.call(t,i,d);return Number.isFinite(p)&&(p??0)>0?p:ie.value}function oe(i){return Vt(t.items.map((d,p)=>{const F=le(d,p);return{key:F,size:T.has(F)?(i==null?void 0:i.getSizeByKey(F))??ae(d,p):ae(d,p)}}))}const m=e.shallowRef({sizes:oe()}),M=e.computed(()=>(a.value,{sizes:m.value.sizes,total:m.value.sizes.total}));function r(i=M.value.total){return Math.max(0,i-me.value)}function Y(i){return M.value.sizes.findIndex(i)}g.value=t.initialScroll==="bottom"?r():0;const q=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const i=Y(g.value),d=Y(g.value+me.value)+1;return{start:i,end:Math.min(t.items.length,d)}}),xe=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const i=q.value.start,d=q.value.end,p=Math.max(0,i-ue.value),F=Math.min(t.items.length,d+ue.value),ke=pe.value;if(ke===void 0||F-p<=ke)return{start:p,end:F};const Te=Math.max(0,ke-(d-i)),Ee=i-p,Le=F-d;let Ve=Math.min(Ee,Math.ceil(Te/2));const We=Math.min(Le,Te-Ve);return Ve=Math.min(Ee,Te-We),{start:i-Ve,end:d+We}}),ce=e.computed(()=>xe.value.start),Me=e.computed(()=>xe.value.end),f=e.computed(()=>{const i=new Set;for(let d=ce.value;d<Me.value;d+=1)i.add(d);for(const d of t.pinnedKeys.slice(0,ye.value)){const p=m.value.sizes.getIndex(d);p!==void 0&&i.add(p)}if(t.keepFocusedItem&&V.value!==void 0){const d=m.value.sizes.getIndex(V.value);d!==void 0&&i.add(d)}return[...i].sort((d,p)=>d-p)}),D=e.computed(()=>f.value.map(i=>{const d=t.items[i];return{item:d,index:i,key:le(d,i),bottom:Math.max(M.value.total,me.value)-M.value.sizes.getOffset(i+1)+s.value}})),v=e.computed(()=>({height:Je(t.height)})),y=e.computed(()=>({"vue-chat-virtual-scroll--contained":t.contain})),z=e.computed(()=>x.value&&!j.value?"polite":"off");function X(i){var d;return((d=t.newItemsLabel)==null?void 0:d.call(t,i))??`${i} new ${i===1?"message":"messages"}`}function C(i=M.value.total){var F;const d=r(i),p=Math.min(0,((F=w.value)==null?void 0:F.scrollTop)??0);return Math.max(0,Math.min(d,d+p+O))}function ve(i=!1){if(ne||(j.value||_)&&!i||O===0)return;ne=!0;const d=te,p=++R;s.value=0,e.nextTick(()=>{if(p!==R)return;ne=!1;const F=w.value;!F||d!==te||O===0||(O=0,F.scrollTop=Math.min(0,g.value-r()),Q=F.scrollTop,g.value=C(),l(),N())})}function fe(i){const d=w.value;if(d){if(O+=i,g.value=C(),O===0||r()===0){O=0,s.value=0;return}(j.value||_)&&!ne?(s.value=O,d.scrollTop>=-1&&ve(!0)):ve()}}function we(){J=void 0,_=void 0}function ze(){if(!t.keepFocusedItem){V.value=void 0;return}const i=document.activeElement,d=i instanceof Element?i.closest(".vue-chat-virtual-scroll__item"):null;V.value=d?L.get(d):void 0}function ge(){ze()}function De(){e.nextTick(ze)}function Ae(i){const d=Math.max(0,Math.floor(i));d!==K.value&&(K.value=d,U&&b("newItemsChange",d))}function Re(){Ae(0)}function je(){b("visibleChange",{scrollTop:C(),startIndex:q.value.start,endIndex:q.value.end})}function l(){const i=w.value;if(!i)return;const p=Math.max(0,M.value.total-C()-i.clientHeight)<=Math.max(0,t.bottomThreshold);p!==x.value&&(x.value=p,U&&b("bottomChange",p)),p&&Re()}function o(){var i;c.value=((i=w.value)==null?void 0:i.clientHeight)??0,U&&(g.value=C()),Z(w.value,t.height),e.nextTick(()=>{l(),N()})}function h(){var i,d;J&&Q!==void 0&&Math.abs((((i=w.value)==null?void 0:i.scrollTop)??0)-Q)>1&&we(),g.value=C(),O!==0&&(((d=w.value)==null?void 0:d.scrollTop)??0)>=-1&&ve(!0),S(),l(),b("scroll",{scrollTop:g.value,startIndex:ce.value,endIndex:Me.value}),N()}function N(){const i=w.value;!U||!i||!t.hasOlder||t.loadingOlder||A===t.items.length||C()<=Math.max(0,t.loadOlderThreshold)&&(A=t.items.length,b("loadOlder"))}function he(i){const d=i.borderBoxSize;if(d){const p=Array.isArray(d)?d[0]:d;if(p!=null&&p.blockSize)return p.blockSize}return i.contentRect.height}function Be(i){const d=M.value.total,p=C(),F=!j.value&&!_&&x.value&&t.stickToBottom&&(U||t.initialScroll==="bottom"),ke=Y(p+me.value-1),Te=!F&&p<=0;let Ee=0,Le=!1;for(const{key:_e,height:He}of i){if(!Number.isFinite(He)||He<=0)continue;const Ne=m.value.sizes.getIndex(_e);if(Ne===void 0)continue;const Fe=M.value.sizes.getSize(Ne);T.add(_e),!(Math.abs(Fe-He)<.5)&&(Ne<=ke&&(Ee+=He-Fe),M.value.sizes.setSize(Ne,He),Le=!0)}if(!Le)return;a.value+=1;const Ve=r()-r(d),We=J&&m.value.sizes.getIndex(J.key),at=We!==void 0&&J?dt(We,J.align):F?r():Te?0:p+Ee;fe(at-p-Ve),e.nextTick(l)}function Ie(i){const d=[];for(const p of i){const F=L.get(p.target);F!==void 0&&d.push({key:F,height:he(p)})}Be(d)}function $e(){const i=[];for(const d of E){const p=L.get(d);p!==void 0&&d.isConnected&&i.push({key:p,height:d.getBoundingClientRect().height})}E.clear(),Be(i)}function Ye(i,d){i instanceof HTMLElement&&L.get(i)!==d&&(L.set(i,d),t.syncMeasurement&&!T.has(d)&&E.add(i),P==null||P.observe(i))}function kt(){for(const[i]of L)i.isConnected||(P==null||P.unobserve(i),L.delete(i),E.delete(i))}function qe(i,d,p=!1){const F=w.value;if(!F)return;const ke=C(),Te=s.value!==0,Ee=++te;R+=1,ne=!1,J=void 0;const Le=d.behavior??"auto";_=Le==="smooth"?()=>ct(i):void 0,O=0,s.value=0,W(!1),de(),Le==="auto"&&(g.value=i);const Ve=()=>{w.value!==F||Ee!==te||(Te&&Le!=="auto"&&(F.scrollTop=ke-r()),p&&Le==="auto"?F.scrollTop=i-r():F.scrollTo({...d,top:i-r(),behavior:Le}),Q=F.scrollTop,Le==="auto"?g.value=C():S(),e.nextTick(l))};Te?e.nextTick(Ve):Ve()}function ct(i,d={}){const p=w.value;if(!p)return;const F=Math.max(0,M.value.total-p.clientHeight),ke=Math.min(Math.max(0,Number.isFinite(i)?i:0),F);qe(ke,d)}function dt(i,d){const p=M.value.sizes.getSize(i);let F=M.value.sizes.getOffset(i);return d==="center"?F-=(me.value-p)/2:d==="end"&&(F-=me.value-p),Math.max(0,Math.min(F,r()))}function lt(i,d={}){if(!w.value||t.items.length===0)return;const p=Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(i)?i:0))),{align:F="start",...ke}=d;qe(dt(p,F),ke);const Te=m.value.sizes.getKey(p);d.behavior==="smooth"?_=()=>{const Ee=m.value.sizes.getIndex(Te);Ee!==void 0&<(Ee,{align:F})}:J={key:Te,align:F}}function bt(i,d={}){const p=m.value.sizes.getIndex(i);p!==void 0&<(p,d)}function zt(){return C()}function It(i="auto"){qe(0,{behavior:i})}function Qe(i="auto"){const d=w.value;if(!d)return;const p=Math.max(0,M.value.total-d.clientHeight);qe(p,{behavior:i},!0),i==="smooth"&&(_=()=>Qe())}const ft=e.ref(0);function Bt(){ft.value+=1}return e.watch(()=>{const i=t.items.length;return[t.items,i,i>0?le(t.items[0],0):void 0,i>0?le(t.items[Math.floor(i/2)],Math.floor(i/2)):void 0,i>0?le(t.items[i-1],i-1):void 0,t.itemKey,t.estimatedItemSize,t.estimateItemSize,t.itemsVersion,ft.value]},async(i,d)=>{const p=m.value.sizes,F=p.length,ke=p.total,Te=C(ke),Ee=p.findIndex(Te+me.value-1),Le=p.getKey(Ee),Ve=p.getOffset(Ee+1),We=t.items.length,at=i[5]!==d[5]||i[6]!==d[6]||i[7]!==d[7],_e=i[8]!==d[8]||i[9]!==d[9];function He(Se){if(F===0)return!0;const Ce=new Set([0,Math.floor(F/2),F-1]);for(const Ue of Ce){const et=Se+Ue;if(et>=We||p.getKey(Ue)!==le(t.items[et],et))return!1}return!0}const Ne=We-F;let Fe="rebuild";!at&&!_e&&Ne>0&&(He(0)?Fe="append":He(Ne)&&(Fe="prepend"));let Ke=p;Fe==="append"?Ke.append(t.items.slice(F).map((Se,Ce)=>{const Ue=F+Ce;return{key:le(Se,Ue),size:ae(Se,Ue)}})):Fe==="prepend"?Ke.prepend(t.items.slice(0,Ne).map((Se,Ce)=>({key:le(Se,Ce),size:ae(Se,Ce)}))):Ke=oe(p),m.value={sizes:Ke};const ot=Fe==="append"?Array.from({length:Ne},(Se,Ce)=>F+Ce):[],it=ot.some(Se=>{var Ce;return((Ce=t.forceStickToBottom)==null?void 0:Ce.call(t,t.items[Se],Se))===!0})||!j.value&&!_&&x.value&&t.stickToBottom;ot.length>0&&!it&&Ae(K.value+ot.length);const mt=Le===void 0?void 0:Ke.getIndex(Le),Et=r()-r(ke);for(const Se of T)Ke.hasKey(Se)||T.delete(Se);if(Ke.length===0||mt===void 0){O=0,s.value=0,g.value=it?r():Math.min(Te,r());const Se=g.value,Ce=te;await e.nextTick(),Ce===te&&m.value.sizes===Ke&&qe(Se,{},!0)}else{const Se=Ke.getOffset(mt+1)-Ve,Ce=it?r():Te+Se;fe(Ce-Te-Et),await e.nextTick()}w.value&&(g.value=C(),l(),N())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([i])=>{i||(A=-1),await e.nextTick(),N()}),e.watch(()=>t.syncMeasurement,i=>{if(E.clear(),!!i){for(const[d,p]of L)T.has(p)||E.add(d);e.nextTick($e)}}),e.watch(q,()=>{U&&je()},{flush:"post"}),e.onMounted(()=>{if(window.addEventListener("pointerup",G,{passive:!0}),window.addEventListener("pointercancel",G,{passive:!0}),o(),w.value&&(w.value.scrollTop=t.initialScroll==="bottom"?0:-r(),g.value=C()),$e(),typeof ResizeObserver<"u"){I=new ResizeObserver(o),P=new ResizeObserver(Ie),w.value&&I.observe(w.value);for(const[i]of L)P.observe(i)}e.nextTick(()=>{U=!0,l(),N(),je()})}),e.onUpdated(()=>{kt(),$e()}),e.onBeforeUnmount(()=>{U=!1,window.removeEventListener("pointerup",G),window.removeEventListener("pointercancel",G),de(),we(),O=0,te+=1,R+=1,I&&(I.disconnect(),I=void 0),P&&(P.disconnect(),P=void 0),L.clear(),E.clear()}),u({isAtBottom:x,isScrolling:j,newItemsCount:K,clearNewItems:Re,refresh:Bt,getScrollPosition:zt,scrollTo:ct,scrollToIndex:lt,scrollToKey:bt,scrollToTop:It,scrollToBottom:Qe}),(i,d)=>(e.openBlock(),e.createElementBlock("div",{class:"vue-chat-virtual-scroll__root",style:e.normalizeStyle(v.value)},[e.createElementVNode("div",e.mergeProps(i.$attrs,{ref_key:"viewport",ref:w,class:["vue-chat-virtual-scroll",y.value],role:"log","aria-label":n.ariaLabel,"aria-live":z.value,"aria-relevant":"additions","aria-atomic":"false",tabindex:"0",onScrollPassive:h,onScrollendPassive:d[0]||(d[0]=(...p)=>e.unref($)&&e.unref($)(...p)),onPointerdownPassive:d[1]||(d[1]=(...p)=>e.unref(H)&&e.unref(H)(...p)),onWheelPassive:d[2]||(d[2]=(...p)=>e.unref(be)&&e.unref(be)(...p)),onKeydown:d[3]||(d[3]=(...p)=>e.unref(B)&&e.unref(B)(...p)),onFocusin:ge,onFocusout:De,onTouchstartPassive:d[4]||(d[4]=(...p)=>e.unref(ee)&&e.unref(ee)(...p)),onTouchendPassive:d[5]||(d[5]=(...p)=>e.unref(se)&&e.unref(se)(...p)),onTouchcancelPassive:d[6]||(d[6]=(...p)=>e.unref(se)&&e.unref(se)(...p))}),[e.createElementVNode("div",{class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${Math.max(me.value,M.value.total+s.value)}px`})},[n.loadingOlder?(e.openBlock(),e.createElementBlock("div",Dt,[e.createElementVNode("div",null,[e.renderSlot(i.$slots,"loadingOlder",{},()=>[d[8]||(d[8]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,({item:p,index:F,key:ke,bottom:Te})=>(e.openBlock(),e.createElementBlock("div",{key:ke,ref_for:!0,ref:Ee=>Ye(Ee,ke),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${-Te}px)`}),role:"article","aria-posinset":F+1,"aria-setsize":n.items.length},[e.renderSlot(i.$slots,"default",{item:p,index:F})],12,At))),128)),n.items.length?e.createCommentVNode("",!0):e.renderSlot(i.$slots,"empty",{},void 0,void 0,1)],4)],16,Pt),n.showNewItemsIndicator&&K.value>0?(e.openBlock(),e.createElementBlock("div",Nt,[e.renderSlot(i.$slots,"newItems",{count:K.value,scrollToBottom:Qe},()=>[e.createElementVNode("button",{type:"button",onClick:d[7]||(d[7]=p=>Qe("smooth"))},e.toDisplayString(X(K.value)),1)])])):e.createCommentVNode("",!0)],4))}});function nt(n){const u=e.ref(),k=e.ref(0),t=e.ref(!1),b=e.ref(!1),w=e.computed(()=>Math.max(1,n.threshold())),g=e.computed(()=>n.refreshing()||b.value?w.value:k.value),s=e.computed(()=>Math.min(1,k.value/w.value)),c=e.computed(()=>n.refreshing()||b.value?"Refreshing…":s.value>=1?"Release to refresh":"Pull to refresh");function a(){u.value=void 0,t.value=!1,k.value=0}function x(T){var I;const L=T.currentTarget,E=((I=n.scrollTop)==null?void 0:I.call(n))??L.scrollTop;!n.enabled()||n.refreshing()||E>0||T.touches.length!==1||(u.value=T.touches[0].clientY,t.value=!0)}function K(T){var P;if(u.value===void 0||!t.value)return;const L=T.currentTarget;if((((P=n.scrollTop)==null?void 0:P.call(n))??L.scrollTop)>0||T.touches.length!==1){a();return}const I=T.touches[0].clientY-u.value;if(I<=0){k.value=0;return}T.preventDefault(),k.value=Math.min(I*.5,w.value*2)}function V(){if(u.value===void 0)return;const T=k.value>=w.value&&n.enabled()&&!n.refreshing();if(u.value=void 0,t.value=!1,!T){k.value=0;return}k.value=w.value,b.value=!0,n.onRefresh(),e.nextTick(()=>{n.refreshing()||(b.value=!1,k.value=0)})}return e.watch(()=>n.refreshing(),(T,L)=>{T?(b.value=!1,k.value=w.value):L&&(b.value=!1,k.value=0)}),{pulling:t,pullDistance:k,pullOffset:g,pullProgress:s,refreshMessage:c,refreshThreshold:w,handleTouchStart:x,handleTouchMove:K,handleTouchEnd:V,handleTouchCancel:a}}const Kt=["aria-label"],Rt=["aria-posinset","aria-setsize"],ut=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:u,emit:k}){const t=n,b=k,{pulling:w,pullDistance:g,pullOffset:s,pullProgress:c,refreshMessage:a,refreshThreshold:x,handleTouchStart:K,handleTouchMove:V,handleTouchEnd:T,handleTouchCancel:L}=nt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>b("refresh")}),E=e.ref(),I=e.ref(0),P=e.ref(0),A=e.ref(0),U=new Map,O=new Map;let ne,R,J=-1;const Q=tt(),{getItemKey:_}=Oe({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),te=e.computed(()=>Math.max(1,t.estimatedItemSize)),Z=e.computed(()=>Math.max(1,t.loadingItemSize??te.value)),le=e.computed(()=>Math.max(0,Math.floor(t.overscan))),ie=e.computed(()=>P.value>0?P.value:typeof t.height=="number"?Math.max(0,t.height):te.value),ue=e.computed(()=>{A.value;const m=new Array(t.items.length+1),M=new Array(t.items.length);m[0]=0;for(let r=0;r<t.items.length;r+=1){const Y=_(t.items[r],r),q=U.get(Y)??te.value;M[r]=q,m[r+1]=m[r]+q}return{offsets:m,sizes:M,total:m[t.items.length]??0}}),re=e.computed(()=>ue.value.total+(t.loading?Z.value:0)),j=e.computed(()=>{const m=new Map;return t.items.forEach((M,r)=>{m.set(_(M,r),r)}),m});function W(m){if(t.items.length===0)return 0;const M=ue.value.offsets;let r=0,Y=t.items.length;for(;r<Y;){const q=Math.floor((r+Y)/2);M[q+1]<=m?r=q+1:Y=q}return Math.min(r,t.items.length-1)}const S=e.computed(()=>Math.max(0,W(I.value)-le.value)),$=e.computed(()=>{if(t.items.length===0)return 0;const m=W(I.value+ie.value)+1;return Math.min(t.items.length,m+le.value)}),ee=e.computed(()=>t.items.slice(S.value,$.value).map((m,M)=>{const r=S.value+M;return{item:m,index:r,key:_(m,r),top:ue.value.offsets[r]}})),se=e.computed(()=>({height:Je(t.height)}));function be(){var m;P.value=((m=E.value)==null?void 0:m.clientHeight)??0,Q(E.value,t.height),e.nextTick(H)}function B(m){I.value=m.currentTarget.scrollTop,b("scroll",{scrollTop:I.value,startIndex:S.value,endIndex:$.value}),H()}function H(){const m=E.value;if(!m||!t.hasMore||t.loading||J===t.items.length)return;const M=Math.max(0,t.loadMoreThreshold);re.value-m.scrollTop-m.clientHeight<=M&&(J=t.items.length,b("loadMore"))}function G(m){const M=m.borderBoxSize;if(M){const r=Array.isArray(M)?M[0]:M;if(r!=null&&r.blockSize)return r.blockSize}return m.contentRect.height}function de(m){const M=ue.value;let r=0,Y=!1;for(const q of m){const xe=q.target,ce=O.get(xe),Me=G(q);if(ce===void 0||Me<=0)continue;const f=U.get(ce)??te.value;if(Math.abs(f-Me)<.5)continue;const D=j.value.get(ce);D!==void 0&&M.offsets[D+1]<=I.value&&(r+=Me-f),U.set(ce,Me),Y=!0}Y&&(A.value+=1,e.nextTick(H),r!==0&&e.nextTick(()=>{const q=E.value;q&&(q.scrollTop+=r,I.value=q.scrollTop)}))}function ye(m,M){m instanceof HTMLElement&&(O.set(m,M),R==null||R.observe(m))}function pe(){for(const[m]of O)m.isConnected||(R==null||R.unobserve(m),O.delete(m))}function me(m,M={}){const r=E.value;if(!r)return;const Y=Math.max(0,re.value-r.clientHeight),q=Math.min(Math.max(0,Number.isFinite(m)?m:0),Y),xe=M.behavior??"auto";xe==="auto"&&(I.value=q),r.scrollTo({...M,top:q,behavior:xe})}function ae(m,M={}){const r=E.value;if(!r||t.items.length===0)return;const Y=Math.min(t.items.length-1,Math.max(0,Math.floor(m))),{align:q="start",...xe}=M;let ce=ue.value.offsets[Y];const Me=ue.value.sizes[Y];q==="center"?ce-=(r.clientHeight-Me)/2:q==="end"&&(ce-=r.clientHeight-Me);const f=Math.max(0,Math.min(ce,re.value-r.clientHeight)),D=xe.behavior??"auto";D==="auto"&&(I.value=f),r.scrollTo({...xe,top:f,behavior:D})}function oe(m="auto"){var M;(M=E.value)==null||M.scrollTo({top:0,behavior:m})}return e.watch(()=>t.itemKey,()=>{U.clear(),A.value+=1}),e.watch(()=>t.items.length,async()=>{const m=new Set(t.items.map((Y,q)=>_(Y,q)));for(const Y of U.keys())m.has(Y)||U.delete(Y);A.value+=1,await e.nextTick();const M=E.value;if(!M)return;const r=Math.max(0,re.value-M.clientHeight);M.scrollTop>r&&(M.scrollTop=r,I.value=r),H()}),e.watch(()=>[t.hasMore,t.loading],async([m])=>{m||(J=-1),await e.nextTick(),H()}),e.onMounted(()=>{if(be(),typeof ResizeObserver<"u"){ne=new ResizeObserver(be),R=new ResizeObserver(de),E.value&&ne.observe(E.value);for(const[m]of O)R.observe(m)}e.nextTick(H)}),e.onUpdated(pe),e.onBeforeUnmount(()=>{ne&&(ne.disconnect(),ne=void 0),R&&(R.disconnect(),R=void 0),O.clear()}),u({scrollTo:me,scrollToIndex:ae,scrollToTop:oe}),(m,M)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:E,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(w)}]),style:e.normalizeStyle(se.value),role:"list","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:B,onTouchstartPassive:M[0]||(M[0]=(...r)=>e.unref(K)&&e.unref(K)(...r)),onTouchmove:M[1]||(M[1]=(...r)=>e.unref(V)&&e.unref(V)(...r)),onTouchend:M[2]||(M[2]=(...r)=>e.unref(T)&&e.unref(T)(...r)),onTouchcancel:M[3]||(M[3]=(...r)=>e.unref(L)&&e.unref(L)(...r))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(x)}px`,transform:`translateY(${e.unref(s)-e.unref(x)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$slots,"refresh",{pullDistance:e.unref(g),progress:e.unref(c),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(a)),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:`${re.value}px`,transform:`translateY(${e.unref(s)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ee.value,({item:r,index:Y,key:q,top:xe})=>(e.openBlock(),e.createElementBlock("div",{key:q,ref_for:!0,ref:ce=>ye(ce,q),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${xe}px)`}),role:"listitem","aria-posinset":Y+1,"aria-setsize":n.items.length},[e.renderSlot(m.$slots,"default",{item:r,index:Y})],12,Rt))),128)),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${Z.value}px`,transform:`translateY(${ue.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$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-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(s)}px)`})},[e.renderSlot(m.$slots,"empty")],4))],46,Kt))}}),Wt=["aria-label"],Ht=["aria-current","aria-posinset","aria-setsize"],Ft={key:1,class:"vue-short-media-feed__empty"},Ot=36,Yt=700,pt=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:u,emit:k}){const t=n,b=k,w=e.ref(),g=e.ref(0),s=e.ref(Q(t.activeIndex));let c,a=-1,x=0,K=!1,V;const T=tt(),{getItemKey:L}=Oe({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),E=e.computed(()=>Math.max(0,Math.floor(t.buffer))),I=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),P=e.computed(()=>g.value>0?g.value:typeof t.height=="number"?Math.max(1,t.height):0),A=e.computed(()=>Math.max(0,s.value-E.value)),U=e.computed(()=>Math.min(t.items.length,s.value+E.value+1)),O=e.computed(()=>(P.value>0?t.items:[]).slice(A.value,U.value).map((S,$)=>({item:S,index:A.value+$}))),ne=e.computed(()=>A.value*P.value),R=e.computed(()=>(t.items.length-U.value)*P.value),J=e.computed(()=>({height:Je(t.height)}));function Q(S){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(S)?S:0)))}function _(){if(!t.hasMore||t.loading||a===t.items.length)return;(t.items.length===0?0:t.items.length-1-s.value)<=I.value&&(a=t.items.length,b("loadMore"))}function te(S){const $=Q(S);$===s.value||t.items.length===0||(s.value=$,b("update:activeIndex",$),b("change",{index:$,item:t.items[$]}),$===0&&b("reachStart"),$===t.items.length-1&&b("reachEnd"),_())}function Z(S,$={}){const ee=w.value;ee&&(typeof ee.scrollTo=="function"?ee.scrollTo({...$,top:S}):ee.scrollTop=S)}function le(S,$={}){if(t.items.length===0)return;const ee=Q(S);te(ee),Z(ee*P.value,$)}function ie(S){if(P.value<=0)return;const $=S.currentTarget.scrollTop;te(Math.round($/P.value))}function ue(S){let $;S.key==="ArrowDown"||S.key==="PageDown"?$=s.value+1:S.key==="ArrowUp"||S.key==="PageUp"?$=s.value-1:S.key==="Home"?$=0:S.key==="End"&&($=t.items.length-1),$!==void 0&&(S.preventDefault(),le($,{behavior:"smooth"}))}function re(S){return S.deltaMode===WheelEvent.DOM_DELTA_LINE?S.deltaY*16:S.deltaMode===WheelEvent.DOM_DELTA_PAGE?S.deltaY*(P.value||1):S.deltaY}function j(S){if(S.ctrlKey||Math.abs(S.deltaX)>Math.abs(S.deltaY)||t.items.length===0||P.value<=0||(S.preventDefault(),K))return;const $=re(S);if($*x<0&&(x=0),x+=$,Math.abs(x)<Ot)return;const ee=x>0?1:-1;x=0;const se=s.value+ee;se<0||se>=t.items.length||(K=!0,le(se,{behavior:"smooth"}),V=setTimeout(()=>{K=!1},Yt))}function W(){var $;const S=(($=w.value)==null?void 0:$.clientHeight)??0;T(w.value,t.height),!(S<=0||S===g.value)&&(g.value=S,e.nextTick(()=>{Z(s.value*S)}))}return e.watch(()=>t.activeIndex,async S=>{const $=Q(S);$!==s.value&&(s.value=$,await e.nextTick(),Z($*P.value),_())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([S])=>{S||(a=-1),await e.nextTick(),_()}),e.watch(()=>t.items.length,async()=>{const S=Q(s.value);t.items.length===0?s.value!==0&&(s.value=0,b("update:activeIndex",0)):te(S),await e.nextTick(),Z(S*P.value),_()}),e.onMounted(async()=>{W(),typeof ResizeObserver<"u"&&w.value&&(c=new ResizeObserver(W),c.observe(w.value)),await e.nextTick(),Z(s.value*P.value),_()}),e.onBeforeUnmount(()=>{c&&(c.disconnect(),c=void 0),V&&(clearTimeout(V),V=void 0)}),u({scrollToIndex:le}),(S,$)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:w,class:"vue-short-media-feed",style:e.normalizeStyle(J.value),role:"list","aria-orientation":"vertical","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:ie,onWheel:j,onKeydown:ue},[n.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[ne.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${ne.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,({item:ee,index:se})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(L)(ee,se),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${P.value}px`}),role:"listitem","aria-current":se===s.value?"true":void 0,"aria-posinset":se+1,"aria-setsize":n.items.length},[e.renderSlot(S.$slots,"default",{item:ee,index:se,active:se===s.value})],12,Ht))),128)),R.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${R.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",Ft,[e.renderSlot(S.$slots,"empty")]))],44,Wt))}}),Ut=["aria-label"],jt=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 u=n;function k(b){return typeof b=="number"?`${Math.max(0,b)}px`:b}const t=e.computed(()=>({width:k(u.width),height:k(u.height)}));return(b,w)=>(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,Ut))}}),qt=(n,u)=>{const k=n.__vccOpts||n;for(const[t,b]of u)k[t]=b;return k},gt=qt(jt,[["__scopeId","data-v-fc92f61f"]]),Gt=.006;function Xt(n,u){const k=n*Math.abs(n)/(2*Gt),t=u*2;return Math.max(-t,Math.min(t,k))}function Zt(n,u,k,t=250){const b=u-n,w=Math.abs(k);if(!(w>=.1&&b*k>0))return{keyframes:[{transform:`translate3d(${n}px, 0, 0)`},{transform:`translate3d(${u}px, 0, 0)`}],options:{duration:Math.round(Math.max(120,Math.min(650,(190+Math.abs(b)*.35)*t/250))),easing:"cubic-bezier(0.22, 1, 0.36, 1)",fill:"forwards"}};const s=Math.round(Math.max(180,Math.min(650,2*Math.abs(b)/w*t/250))),c=Math.min(3,w*s/Math.abs(b)),a=Math.ceil(s/8);return{keyframes:Array.from({length:a+1},(K,V)=>{const T=V/a,L=T*T,E=L*T,I=c*(E-2*L+T)+(-2*E+3*L),P=n+b*I;return{offset:T,transform:`translate3d(${P}px, 0, 0)`}}),options:{duration:s,easing:"linear",fill:"forwards"}}}function Jt(n){const u=e.ref("idle"),k=e.ref(!1),t=e.ref(!1),b=e.computed(()=>u.value!=="idle"||k.value),w=e.computed(()=>u.value==="dragging"||t.value),g=e.ref(!1);let s,c="",a=0,x=0,K=0,V=0,T=0,L=0,E=0,I=0,P=0,A,U,O,ne=0,R=!1,J,Q,_="",te=!1,Z,le=!1;const ie=()=>n.rtl()?-1:1,ue=()=>{var f;return(((f=n.viewport())==null?void 0:f.scrollLeft)??0)*ie()};function re(f,D){const v=n.viewport();if(!v)return;const y=f*ie();v.scrollTo?v.scrollTo(D===void 0?{left:y}:{left:y,behavior:D}):v.scrollLeft=y}function j(){const f=n.viewport();f&&(te||(_=f.style.scrollSnapType),te=!0,f.style.scrollSnapType="none")}function W(){const f=ne;e.nextTick(()=>{le||f!==ne||u.value!=="idle"||(n.viewport()&&(n.viewport().style.scrollSnapType=_),te=!1)})}function S(){const f=n.track();f&&(f.style.transform="",f.style.willChange="")}function $(){const f=n.track();if(!f||!A)return T;const D=getComputedStyle(f).transform,v=D.slice(D.indexOf("(")+1,-1).split(",").map(Number),y=D.startsWith("matrix3d")?v[12]:v[4];return Number.isFinite(y)?y:T}function ee(){return A?V-$()*ie():g.value?V-T*ie():ue()}function se(){const f=A;A=void 0,f&&(f.onfinish=null,f.oncancel=null,f.cancel()),O!==void 0&&cancelAnimationFrame(O),O=void 0}function be(){var v;const f=s;s=void 0,k.value=!1,t.value=!1;const D=n.viewport();f!==void 0&&((v=D==null?void 0:D.hasPointerCapture)!=null&&v.call(D,f))&&D.releasePointerCapture(f),window.removeEventListener("pointermove",oe),window.removeEventListener("pointerup",M),window.removeEventListener("pointercancel",r),window.removeEventListener("blur",Y)}function B(f,D){const v=++ne;j(),u.value="committing",se(),S(),g.value=!1,T=0;const y=n.canonical(f);re(y,D),n.onPosition(y),n.onCommit(f),e.nextTick(()=>{le||v!==ne||(re(y),u.value="idle",W())})}function H(f=!0){Q!==void 0&&clearTimeout(Q),Q=void 0;const D=A!==void 0||T!==0,v=f?ee():ue();return++ne,j(),be(),se(),S(),g.value=!1,U=void 0,T=0,u.value="idle",f&&(D&&re(v),n.onPosition(v)),W(),v}function G(){A&&(n.onPosition(ee()),O=requestAnimationFrame(G))}function de(){return typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}function ye(f,D,v){const y=n.track(),z=(V-D)*ie();if(!(y!=null&&y.animate)||de()||n.settleDuration()===0||Math.abs(z-T)<1){S(),g.value=!1,T=0,u.value="idle",!(y!=null&&y.animate)&&!de()&&n.settleDuration()!==0?(n.onCommit(f),U=D,re(D,"smooth"),W()):B(f);return}++ne,j(),u.value="settling",g.value=!0;const X=Zt(T,z,v,n.settleDuration()),C=y.animate(X.keyframes,X.options);A=C,C.onfinish=()=>{A===C&&B(f)},C.oncancel=()=>{A===C&&H()},O=requestAnimationFrame(G)}function pe(f,D="smooth",v=0,y=!1){const z=H(),X=n.target(f,z,v);n.onCommit(f),Math.abs(X-z)<.5||D!=="smooth"||de()?B(f,D):y?(V=ue(),T=(V-z)*ie(),ye(f,X,0)):(u.value="settling",U=X,re(X,D),n.viewport()&&(n.viewport().style.scrollSnapType=_),te=!1)}function me(f){const D=f.currentTarget.scrollLeft*ie();if(!(A||u.value==="dragging"||u.value==="committing")){if(n.onPosition(D),U!==void 0){if(Math.abs(D-U)>1)return;U=void 0,u.value="idle"}n.onCommit(n.indexAt(D))}}function ae(f){var y,z;if(s!==void 0||f.isPrimary===!1||f.pointerType==="mouse"&&(!n.mouseDrag()||f.button!==0)||!["mouse","touch","pen"].includes(f.pointerType)||(z=(y=f.target)==null?void 0:y.closest)!=null&&z.call(y,'input, textarea, select, [contenteditable="true"], [data-carousel-no-drag]'))return;U!==void 0&&re(ue(),"auto");const D=ee();A!==void 0?(T=$(),se(),n.track().style.transform=`translate3d(${T}px, 0, 0)`,g.value=!0):(T=0,V=ue()),++ne,U=void 0,u.value="pending",s=f.pointerId,k.value=!0,c=f.pointerType,a=L=f.clientX,x=f.clientY,K=D,E=f.timeStamp,I=0,P=0,R=!1,J!==void 0&&clearTimeout(J),window.addEventListener("pointermove",oe),window.addEventListener("pointerup",M),window.addEventListener("pointercancel",r),window.addEventListener("blur",Y)}function oe(f){var we,ze;if(s!==f.pointerId||f===Z)return;if(Z=f,t.value){f.cancelable&&f.preventDefault();return}const D=f.clientX-a,v=f.clientY-x,y=Number.isFinite(n.dragThreshold())?Math.max(1,n.dragThreshold()):8,z=c==="mouse"&&n.mouseDragMode()==="snap";if(u.value==="pending"){if(Math.max(Math.abs(D),Math.abs(v))<y||z&&Math.abs(D)<y)return;if(c!=="mouse"&&Math.abs(v)>=Math.abs(D)){H();return}j(),u.value="dragging",(ze=(we=n.viewport())==null?void 0:we.setPointerCapture)==null||ze.call(we,f.pointerId)}if(u.value!=="dragging")return;if(f.cancelable&&f.preventDefault(),R=!0,z){t.value=!0;const ge=-Math.sign(D)*ie(),De=n.target(n.indexAt(K)+ge,K,ge),Ae=n.indexAt(De);n.onCommit(Ae),ye(Ae,De,0);return}const X=f.timeStamp-E;if(X>0&&X<=80){const ge=Math.max(-2.5,Math.min(2.5,(f.clientX-L)/X));I=P===0?ge:I*.25+ge*.75,P+=1}else X>80&&(I=0,P=0);L=f.clientX,E=f.timeStamp;let C=K-D*ie();const[ve,fe]=n.limits();C<ve&&(C=ve+(C-ve)*.35),C>fe&&(C=fe+(C-fe)*.35),T=(V-C)*ie(),O===void 0&&(O=requestAnimationFrame(()=>{O=void 0;const ge=n.track();!ge||u.value!=="dragging"||(ge.style.willChange="transform",ge.style.transform=`translate3d(${T}px, 0, 0)`,n.onPosition(V-T*ie()))}))}function m(f,D=!1){if(s===void 0||f&&s!==f.pointerId)return;const v=u.value==="dragging",y=t.value,z=T!==0;if(be(),y){J!==void 0&&clearTimeout(J),J=setTimeout(()=>{R=!1},0);return}if(O!==void 0&&cancelAnimationFrame(O),O=void 0,!v&&!z){u.value="idle",W();return}const X=V-T*ie(),C=f?Math.max(0,f.timeStamp-E):101,ve=!D&&n.momentum()&&C<=100?I*Math.exp(-C/80):0,fe=X-K,we=Math.min(80,Math.max(40,n.step()*.12)),ze=P>=2&&Math.abs(fe)>=we?Xt(-ve*ie(),n.step()):0;let ge=n.indexAt(X+ze);const De=n.indexAt(K),Ae=Math.max(1,n.dragThreshold());!D&&v&&ge===De&&Math.abs(fe)>=Ae&&(ge=De+Math.sign(fe));const Re=n.target(ge,X);n.onPosition(X),ye(n.indexAt(Re),Re,ve),J!==void 0&&clearTimeout(J),J=setTimeout(()=>{R=!1},0)}function M(f){m(f)}function r(f){m(f,!0)}function Y(){m(void 0,!0)}function q(f){f.target===n.viewport()&&s===f.pointerId&&u.value==="dragging"&&m(f,!0)}function xe(f){!R||f.detail===0||(f.preventDefault(),f.stopPropagation(),R=!1)}function ce(){const f=A!==void 0||u.value==="dragging",D=H();f&&n.onCommit(n.indexAt(D)),n.nativeSnap()||(Q=setTimeout(()=>{if(Q=void 0,le||u.value!=="idle")return;V=ue(),T=0;const v=n.indexAt(V);ye(v,n.target(v,V),0)},120))}function Me(f){s!==void 0&&f.preventDefault()}return e.onBeforeUnmount(()=>{H(!1),le=!0,J!==void 0&&clearTimeout(J),n.viewport()&&(n.viewport().style.scrollSnapType=_)}),{phase:u,busy:b,dragging:w,pointerActive:k,transformed:g,read:ue,write:re,cancel:H,commit:B,navigate:pe,displayedPosition:ee,handleScroll:me,handlePointerDown:ae,handlePointerMove:oe,handlePointerUp:M,handlePointerCancel:r,handleLostPointerCapture:q,handleClick:xe,handleWheel:ce,handleDragStart:Me}}function Qt(n){let u;function k(){u!==void 0&&clearTimeout(u),u=void 0}function t(){if(k(),!n.enabled()||n.paused()||n.count()<2||n.atEnd()&&!n.loop())return;const b=Number.isFinite(n.delay())?Math.max(1,n.delay()):3e3;u=setTimeout(()=>{u=void 0,!n.paused()&&(n.atEnd()?n.rewind():n.advance(),t())},b)}return e.watch(()=>[n.enabled(),n.paused(),n.delay(),n.count(),n.loop(),n.atEnd()],t,{immediate:!0}),e.onBeforeUnmount(k),{start:t,stop:k}}function Ge(n,u){return u>0?(n%u+u)%u:0}function _t(n,u){const k=new Array(n.length+1);k[0]=0;for(let s=0;s<n.length;s+=1)k[s+1]=k[s]+n[s]+u;const t=k[n.length],b=Math.max(0,t-(n.length?u:0));function w(s){if(!n.length)return 0;let c=0,a=n.length-1;for(;c<a;){const x=Math.ceil((c+a)/2);k[x]<=s?c=x:a=x-1}return c}function g(s){const c=w(s),a=Math.min(n.length-1,c+1);return s-k[c]<=k[a]-s?c:a}return{offsets:k,cycleWidth:t,totalWidth:b,indexAt:w,nearestIndex:g}}const en=["dir","aria-label"],tn=["data-carousel-index","aria-label","aria-current","aria-hidden","inert"],nn={key:1,class:"vue-virtual-carousel__empty"},yt=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},mouseDrag:{type:Boolean,default:!0},mouseDragMode:{default:"drag"},dragThreshold:{default:8},momentum:{type:Boolean,default:!0},settleDuration:{default:250},nativeSnap:{type:Boolean,default:!0},autoWidth:{type:Boolean,default:!1},estimatedItemWidth:{default:240},rtl:{type:Boolean,default:!1},loop:{type:Boolean,default:!1},keepAlive:{type:Boolean,default:!1},maxCachedItems:{default:20},pinnedIndexes:{default:()=>[]},responsive:{default:void 0}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(n,{expose:u,emit:k}){const t=n,b=k,w=e.ref(),g=e.ref(),s=e.ref(0),c=e.ref(0),a=e.ref(0),x=e.ref(!1),K=e.ref(!1),V=e.ref(),T=e.shallowRef([]),L=e.shallowRef([0,1]),E=e.shallowRef(new Map),I=e.shallowRef([]);let P,A,U=-1,O=!1;const ne=new Map,R=new Map,{getItemKey:J}=Oe({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),Q=e.computed(()=>t.items.map((l,o)=>J(l,o))),_=e.computed(()=>new Map(Q.value.map((l,o)=>[l,o]))),te=(l,o,h)=>Math.max(o,Math.floor(Number.isFinite(l)?l:h)),Z=e.computed(()=>{const l=[...t.responsive??[]].sort((o,h)=>h.breakpoint-o.breakpoint).find(o=>s.value>=o.breakpoint);return{slidesPerView:te((l==null?void 0:l.slidesPerView)??t.slidesPerView,1,1),slidesToScroll:te((l==null?void 0:l.slidesToScroll)??t.slidesToScroll,1,1),gap:Math.max(0,Number.isFinite((l==null?void 0:l.gap)??t.gap)?(l==null?void 0:l.gap)??t.gap:0)}}),le=e.computed(()=>te(t.buffer,0,1)),ie=e.computed(()=>te(t.maxCachedItems,0,20)),ue=e.computed(()=>s.value>0?Math.max(1,(s.value-(Z.value.slidesPerView-1)*Z.value.gap)/Z.value.slidesPerView):0),re=e.computed(()=>t.items.map((l,o)=>t.autoWidth?E.value.get(Q.value[o])??Math.max(1,Number.isFinite(t.estimatedItemWidth)?t.estimatedItemWidth:240):ue.value)),j=e.computed(()=>_t(re.value,Z.value.gap)),W=e.computed(()=>t.loop&&t.items.length>1&&j.value.totalWidth>s.value),S=e.computed(()=>Math.max(0,j.value.totalWidth-s.value)),$=e.computed(()=>{if(W.value)return t.items.length-1;if(!t.autoWidth)return Math.max(0,t.items.length-Z.value.slidesPerView);if(S.value<=0)return 0;const l=j.value.indexAt(S.value),o=j.value.offsets[l]<S.value-.01?l+1:l;return Math.min(t.items.length-1,o)}),ee=e.computed(()=>W.value?j.value.cycleWidth*3:j.value.totalWidth),se=e.computed(()=>({height:Je(t.height)})),be=e.computed(()=>({width:`${ee.value}px`,height:t.height==="auto"?`${Math.max(1,c.value)}px`:"100%"}));function B(l){const o=Math.floor(Number.isFinite(l)?l:0);return W.value?Ge(o,t.items.length):Math.max(0,Math.min($.value,o))}a.value=B(t.activeIndex);function H(l){const o=j.value.offsets[B(l)]??0;return W.value?j.value.cycleWidth+o:Math.min(S.value,o)}function G(l){const o=j.value.cycleWidth;return W.value&&o>0?(l%o+o)%o:Math.max(0,l)}function de(l){if(!W.value&&l>=S.value-1&&S.value>0)return $.value;const o=G(l);return W.value&&o>(j.value.offsets[t.items.length-1]+j.value.cycleWidth)/2?0:B(j.value.nearestIndex(o))}function ye(l,o,h=0){const N=H(l);if(!W.value)return N;const he=j.value.cycleWidth,Be=[N-he,N,N+he],Ie=Be.filter($e=>h>0?$e>o+.5:h<0?$e<o-.5:!0);return(Ie.length?Ie:Be).sort(($e,Ye)=>Math.abs($e-o)-Math.abs(Ye-o))[0]}function pe(l){if(!W.value)return j.value.indexAt(Math.max(0,l));const o=j.value.cycleWidth,h=Math.floor(l/o);return h*t.items.length+j.value.indexAt(l-h*o)}function me(l){return W.value?Math.floor(l/t.items.length)*j.value.cycleWidth+j.value.offsets[Ge(l,t.items.length)]:j.value.offsets[l]??0}function ae(l){if(t.items.length===0){T.value=[],L.value=[0,0];return}if(s.value<=0)return;const o=pe(l),h=pe(l+s.value-.01);(L.value[0]!==o||L.value[1]!==h+1)&&(L.value=[o,h+1]);const N=[];for(let he=o;he<=h;he+=1){const Be=W.value?Ge(he,t.items.length):he;if(Be<0||Be>=t.items.length)continue;const Ie=me(he);Ie+re.value[Be]>l+.01&&Ie<l+s.value-.01&&!N.includes(Be)&&N.push(Be)}N.join(",")!==T.value.join(",")&&(T.value=N)}function oe(l){if(t.autoWidth){const o=H(a.value),h=ye(l,o);return h+re.value[l]>o&&h<o+s.value}return W.value?Ge(l-a.value,t.items.length)<Z.value.slidesPerView:l>=a.value&&l<a.value+Z.value.slidesPerView}function m(){if(!t.hasMore||t.loading||U===t.items.length)return;const l=t.autoWidth?T.value.length:Z.value.slidesPerView;t.items.length-a.value-Math.max(1,l)<=te(t.loadMoreThreshold,0,2)&&(U=t.items.length,b("loadMore"))}function M(l){const o=B(l);!t.items.length||o===a.value||(a.value=o,b("update:activeIndex",o),b("change",{index:o,item:t.items[o]}),o===0&&b("reachStart"),o===$.value&&b("reachEnd"),m())}const r=Jt({viewport:()=>w.value,track:()=>g.value,rtl:()=>t.rtl,mouseDrag:()=>t.mouseDrag,mouseDragMode:()=>t.mouseDragMode,nativeSnap:()=>t.nativeSnap&&!W.value,dragThreshold:()=>Math.max(1,Number.isFinite(t.dragThreshold)?t.dragThreshold:8),momentum:()=>t.momentum,settleDuration:()=>Math.max(0,Number.isFinite(t.settleDuration)?t.settleDuration:250),limits:()=>[0,W.value?Math.max(0,ee.value-s.value):S.value],step:()=>re.value[a.value]+Z.value.gap||1,indexAt:de,target:ye,canonical:H,onPosition:ae,onCommit:M}),{phase:Y,dragging:q}=r,xe=Qt({enabled:()=>K.value&&t.autoplay,paused:()=>r.pointerActive.value||Y.value==="pending"||Y.value==="dragging"||Y.value==="committing"||W.value&&Y.value==="settling"||x.value&&t.pauseOnHover,delay:()=>t.autoplayDelay,count:()=>t.items.length,atEnd:()=>!W.value&&a.value>=$.value,loop:()=>W.value||t.autoplayLoop,advance:()=>we(),rewind:()=>fe(0,{behavior:"smooth"})}),ce=e.computed(()=>{const l=q.value||r.transformed.value,o=le.value+(l?Z.value.slidesPerView+2:0);let h,N;!t.autoWidth&&!W.value&&!l?(h=Math.max(0,a.value-o),N=Math.min(t.items.length,a.value+Z.value.slidesPerView+o)):(h=Math.max(0,L.value[0]-o),N=Math.min(W.value?t.items.length*3:t.items.length,L.value[1]+o));const he=(L.value[0]+L.value[1]-1)/2,Be=new Map;for(let Ie=h;Ie<N;Ie+=1){const $e=W.value?Ge(Ie,t.items.length):Ie,Ye=Be.get($e);(!Ye||Math.abs(Ie-he)<Math.abs(Ye.virtual-he))&&Be.set($e,{index:$e,virtual:Ie,cached:!1})}return[...Be.values()].sort((Ie,$e)=>Ie.virtual-$e.virtual)});e.watch([T,Y,Q],()=>{if(Y.value!=="idle")return;const l=T.value.filter(h=>h<t.items.length).map(h=>Q.value[h]);if(!t.keepAlive){I.value=[];return}const o=I.value.filter(h=>_.value.has(h)&&!l.includes(h));I.value=[...o,...l].slice(-(ie.value+l.length))},{immediate:!0});const Me=e.computed(()=>{const l=[...ce.value],o=new Set(l.map(N=>N.index)),h=new Set;for(const N of t.pinnedIndexes.slice(0,ie.value))Number.isInteger(N)&&N>=0&&N<t.items.length&&h.add(N);if(V.value!==void 0&&V.value<t.items.length&&h.add(V.value),t.keepAlive)for(const N of[...I.value].reverse()){const he=_.value.get(N);he!==void 0&&!o.has(he)&&h.size<ie.value&&h.add(he)}for(const N of h)o.has(N)||l.push({index:N,virtual:W.value?t.items.length+N:N,cached:N!==V.value});return l.sort((N,he)=>N.virtual-he.virtual).map(N=>({...N,item:t.items[N.index],key:Q.value[N.index]}))}),f=e.computed(()=>ce.value.length?me(ce.value[0].virtual):0),D=e.computed(()=>!t.autoWidth&&!W.value&&!t.keepAlive&&!t.pinnedIndexes.length&&(V.value===void 0||ce.value.some(l=>l.index===V.value))),v=e.computed(()=>{const l=ce.value[ce.value.length-1];return l?Math.max(0,ee.value-me(l.virtual)-re.value[l.index]-Z.value.gap):0});function y(l){const o=re.value[l.index];return{position:D.value?"relative":"absolute",[t.rtl?"right":"left"]:D.value?void 0:`${me(l.virtual)}px`,width:t.autoWidth?"max-content":`${o}px`,flexBasis:t.autoWidth?"auto":`${o}px`,marginRight:!t.rtl&&l.index<t.items.length-1?`${Z.value.gap}px`:"0px",marginLeft:t.rtl&&l.index<t.items.length-1?`${Z.value.gap}px`:"0px",height:t.height==="auto"?"auto":"100%",visibility:l.cached?"hidden":void 0,scrollSnapAlign:t.nativeSnap&&!W.value&&s.value>0?"start":"none"}}function z(){if(!R.size||Y.value!=="idle")return;const l=new Map(E.value);for(const[o,h]of R)l.set(o,h);R.clear(),E.value=l}function X(l,o){if(o<0||o>=t.items.length)return;const{width:h,height:N}=l.getBoundingClientRect();N>c.value&&(c.value=N);const he=Q.value[o];t.autoWidth&&h>0&&Math.abs((E.value.get(he)??0)-h)>.5&&R.set(he,h)}function C(){var o;if(O||t.height!=="auto")return;let l=0;for(const h of ce.value)l=Math.max(l,((o=ne.get(h.index))==null?void 0:o.getBoundingClientRect().height)??0);Math.abs(c.value-l)>.5&&(c.value=l)}function ve(l,o){const h=ne.get(o);if(h&&(A==null||A.unobserve(h)),!(l instanceof HTMLElement)){ne.delete(o);return}ne.set(o,l),(t.autoWidth||t.height==="auto")&&(A==null||A.observe(l),X(l,o),e.nextTick(z),e.nextTick(C))}function fe(l,o={}){!t.items.length||s.value<=0||r.navigate(B(l),o.behavior??"auto",0,W.value||!t.nativeSnap)}function we(l="smooth"){!t.items.length||s.value<=0||r.navigate(B(a.value+Z.value.slidesToScroll),l,1,W.value||!t.nativeSnap)}function ze(l="smooth"){!t.items.length||s.value<=0||r.navigate(B(a.value-Z.value.slidesToScroll),l,-1,W.value||!t.nativeSnap)}function ge(l){var N,he;if((he=(N=l.target)==null?void 0:N.closest)!=null&&he.call(N,'input, textarea, select, [contenteditable="true"]'))return;const o=t.rtl?"ArrowLeft":"ArrowRight",h=t.rtl?"ArrowRight":"ArrowLeft";l.key===o||l.key==="PageDown"?(l.preventDefault(),we()):l.key===h||l.key==="PageUp"?(l.preventDefault(),ze()):l.key==="Home"?(l.preventDefault(),fe(0,{behavior:"smooth"})):l.key==="End"&&(l.preventDefault(),fe($.value))}function De(l){var h,N;const o=(N=(h=l.target)==null?void 0:h.closest)==null?void 0:N.call(h,"[data-carousel-index]");V.value=o?Number(o.getAttribute("data-carousel-index")):void 0}function Ae(){e.nextTick(()=>{var l;(l=w.value)!=null&&l.contains(document.activeElement)||(V.value=void 0)})}function Re(){r.cancel(!1),t.items.length?M(B(a.value)):a.value!==0&&(a.value=0,b("update:activeIndex",0)),O||r.commit(a.value),e.nextTick(m)}function je(){var o;const l=((o=w.value)==null?void 0:o.clientWidth)??0;l<=0||l===s.value||(s.value=l)}return e.watch(()=>[t.items.length,s.value,Z.value.slidesPerView,Z.value.gap,t.rtl,W.value,t.autoWidth,t.nativeSnap,E.value],Re),e.watch(()=>t.activeIndex,l=>{const o=B(l);o!==a.value&&(r.cancel(!1),a.value=o,r.commit(o),e.nextTick(m))}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],()=>{t.hasMore||(U=-1),e.nextTick(m)}),e.watch(()=>Q.value,l=>{const o=new Set(l);E.value=new Map([...E.value].filter(([h])=>o.has(h))),I.value=I.value.filter(h=>o.has(h))}),e.watch(Y,l=>{l==="idle"&&e.nextTick(z)}),e.watch(()=>[t.keepAlive,t.maxCachedItems],()=>{const l=T.value.map(o=>Q.value[o]);I.value=t.keepAlive?[...I.value.filter(o=>!l.includes(o)),...l].slice(-(ie.value+l.length)):[]}),e.onMounted(async()=>{if(je(),typeof ResizeObserver<"u"&&(P=new ResizeObserver(je),w.value&&P.observe(w.value),A=new ResizeObserver(l=>{for(const o of l)X(o.target,Number(o.target.dataset.carouselIndex));z(),C()}),t.autoWidth||t.height==="auto"))for(const[l,o]of ne)A.observe(o),X(o,l);await e.nextTick(),Re(),K.value=!0}),e.onBeforeUnmount(()=>{O=!0,P==null||P.disconnect(),A==null||A.disconnect()}),u({next:we,previous:ze,scrollToIndex:fe,startAutoplay:xe.start,stopAutoplay:xe.stop}),(l,o)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:w,class:e.normalizeClass(["vue-virtual-carousel",{"vue-virtual-carousel--mouse-drag":n.mouseDrag,"vue-virtual-carousel--dragging":e.unref(q),"vue-virtual-carousel--controlled":W.value||!n.nativeSnap}]),style:e.normalizeStyle(se.value),dir:n.rtl?"rtl":"ltr",role:"region","aria-roledescription":"carousel","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:o[0]||(o[0]=(...h)=>e.unref(r).handleScroll&&e.unref(r).handleScroll(...h)),onPointerdown:o[1]||(o[1]=(...h)=>e.unref(r).handlePointerDown&&e.unref(r).handlePointerDown(...h)),onPointermove:o[2]||(o[2]=(...h)=>e.unref(r).handlePointerMove&&e.unref(r).handlePointerMove(...h)),onPointerup:o[3]||(o[3]=(...h)=>e.unref(r).handlePointerUp&&e.unref(r).handlePointerUp(...h)),onPointercancel:o[4]||(o[4]=(...h)=>e.unref(r).handlePointerCancel&&e.unref(r).handlePointerCancel(...h)),onLostpointercapture:o[5]||(o[5]=(...h)=>e.unref(r).handleLostPointerCapture&&e.unref(r).handleLostPointerCapture(...h)),onClickCapture:o[6]||(o[6]=(...h)=>e.unref(r).handleClick&&e.unref(r).handleClick(...h)),onDragstart:o[7]||(o[7]=(...h)=>e.unref(r).handleDragStart&&e.unref(r).handleDragStart(...h)),onWheelPassive:o[8]||(o[8]=(...h)=>e.unref(r).handleWheel&&e.unref(r).handleWheel(...h)),onKeydown:ge,onMouseenter:o[9]||(o[9]=h=>x.value=!0),onMouseleave:o[10]||(o[10]=h=>x.value=!1),onFocusin:De,onFocusout:Ae},[n.items.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"track",ref:g,class:"vue-virtual-carousel__track",style:e.normalizeStyle(be.value),role:"list"},[f.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${f.value}px`,position:D.value?"relative":"absolute"}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Me.value,h=>(e.openBlock(),e.createElementBlock("div",{key:h.key,ref_for:!0,ref:N=>ve(N,h.index),class:"vue-virtual-carousel__item","data-carousel-index":h.index,style:e.normalizeStyle(y(h)),role:"listitem","aria-roledescription":"slide","aria-label":`${h.index+1} of ${n.items.length}`,"aria-current":h.index===a.value?"true":void 0,"aria-hidden":h.cached?"true":void 0,inert:h.cached?!0:void 0},[e.renderSlot(l.$slots,"default",{item:h.item,index:h.index,active:h.index===a.value,visible:oe(h.index),inViewport:T.value.includes(h.index)})],12,tn))),128)),v.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${v.value}px`,position:D.value?"relative":"absolute"}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",nn,[e.renderSlot(l.$slots,"empty")]))],46,en))}}),ln=["aria-label"],an=["aria-posinset","aria-setsize"],xt=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:u,emit:k}){const t=n,b=k,{pulling:w,pullDistance:g,pullOffset:s,pullProgress:c,refreshMessage:a,refreshThreshold:x,handleTouchStart:K,handleTouchMove:V,handleTouchEnd:T,handleTouchCancel:L}=nt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>b("refresh")}),E=e.ref(),I=e.ref(0),P=e.ref(0);let A,U=-1;const O=tt(),{getItemKey:ne}=Oe({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),R=e.computed(()=>Math.max(1,t.itemSize)),J=e.computed(()=>Math.max(0,Math.floor(t.overscan))),Q=e.computed(()=>t.items.length*R.value),_=e.computed(()=>Math.max(1,t.loadingItemSize??R.value)),te=e.computed(()=>Q.value+(t.loading?_.value:0)),Z=e.computed(()=>P.value>0?P.value:typeof t.height=="number"?t.height:0),le=e.computed(()=>Math.max(0,Math.floor(I.value/R.value)-J.value)),ie=e.computed(()=>{const B=Math.ceil((I.value+Z.value)/R.value);return Math.min(t.items.length,B+J.value)}),ue=e.computed(()=>t.items.slice(le.value,ie.value).map((B,H)=>({item:B,index:le.value+H}))),re=e.computed(()=>({height:Je(t.height)})),j=e.computed(()=>({transform:`translateY(${le.value*R.value}px)`}));function W(){var B;P.value=((B=E.value)==null?void 0:B.clientHeight)??0,O(E.value,t.height),e.nextTick($)}function S(B){I.value=B.currentTarget.scrollTop,b("scroll",{scrollTop:I.value,startIndex:le.value,endIndex:ie.value}),$()}function $(){const B=E.value;if(!B||!t.hasMore||t.loading||U===t.items.length)return;const H=Math.max(0,t.loadMoreThreshold);te.value-B.scrollTop-B.clientHeight<=H&&(U=t.items.length,b("loadMore"))}function ee(B,H={}){const G=E.value;if(!G)return;const de=Math.max(0,te.value-G.clientHeight),ye=Math.min(Math.max(0,Number.isFinite(B)?B:0),de),pe=H.behavior??"auto";pe==="auto"&&(I.value=ye),G.scrollTo({...H,top:ye,behavior:pe})}function se(B,H={}){const G=E.value;if(!G||t.items.length===0)return;const de=Math.min(t.items.length-1,Math.max(0,Math.floor(B))),{align:ye="start",...pe}=H;let me=de*R.value;ye==="center"?me-=(G.clientHeight-R.value)/2:ye==="end"&&(me-=G.clientHeight-R.value),G.scrollTo({...pe,top:Math.max(0,Math.min(me,te.value-G.clientHeight))})}function be(B="auto"){var H;(H=E.value)==null||H.scrollTo({top:0,behavior:B})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const B=E.value;if(!B)return;const H=Math.max(0,te.value-B.clientHeight);B.scrollTop>H&&(B.scrollTop=H,I.value=H),$()}),e.watch(()=>[t.hasMore,t.loading],async([B])=>{B||(U=-1),await e.nextTick(),$()}),e.onMounted(()=>{W(),typeof ResizeObserver<"u"&&E.value&&(A=new ResizeObserver(W),A.observe(E.value)),e.nextTick($)}),e.onBeforeUnmount(()=>{A&&(A.disconnect(),A=void 0)}),u({scrollTo:ee,scrollToIndex:se,scrollToTop:be}),(B,H)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:E,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(w)}]),style:e.normalizeStyle(re.value),role:"list","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:S,onTouchstartPassive:H[0]||(H[0]=(...G)=>e.unref(K)&&e.unref(K)(...G)),onTouchmove:H[1]||(H[1]=(...G)=>e.unref(V)&&e.unref(V)(...G)),onTouchend:H[2]||(H[2]=(...G)=>e.unref(T)&&e.unref(T)(...G)),onTouchcancel:H[3]||(H[3]=(...G)=>e.unref(L)&&e.unref(L)(...G))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(x)}px`,transform:`translateY(${e.unref(s)-e.unref(x)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(B.$slots,"refresh",{pullDistance:e.unref(g),progress:e.unref(c),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(a)),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:`${te.value}px`,transform:`translateY(${e.unref(s)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(j.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ue.value,({item:G,index:de})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(ne)(G,de),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${R.value}px`}),role:"listitem","aria-posinset":de+1,"aria-setsize":n.items.length},[e.renderSlot(B.$slots,"default",{item:G,index:de})],12,an))),128))],4),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${_.value}px`,transform:`translateY(${Q.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(B.$slots,"loading",{},()=>[H[4]||(H[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(s)}px)`})},[e.renderSlot(B.$slots,"empty")],4))],46,ln))}}),on=["aria-label"],rn=["aria-posinset","aria-setsize"],wt=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:u,emit:k}){const t=n,b=k,w=e.ref(),g=e.ref(0),s=e.ref(0),c=e.ref(0),a=e.ref(0),x=new Map,K=new Map,V=new Map;let T,L,E,I,P=!1,A=!1,U=-1;const{getItemKey:O}=Oe({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey});function ne(v){return typeof window.requestAnimationFrame=="function"?{id:window.requestAnimationFrame(v),type:"animation"}:{id:window.setTimeout(v,0),type:"timeout"}}function R(v){v&&(v.type==="animation"?window.cancelAnimationFrame(v.id):window.clearTimeout(v.id))}const{pulling:J,pullDistance:Q,pullOffset:_,pullProgress:te,refreshMessage:Z,refreshThreshold:le,handleTouchStart:ie,handleTouchMove:ue,handleTouchEnd:re,handleTouchCancel:j}=nt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>b("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),W=e.computed(()=>Math.max(1,t.estimatedItemSize)),S=e.computed(()=>Math.max(1,t.loadingItemSize??W.value)),$=e.computed(()=>Math.max(0,Math.floor(t.overscan))),ee=e.computed(()=>{a.value;const v=new Array(t.items.length+1),y=new Array(t.items.length);v[0]=0;for(let z=0;z<t.items.length;z+=1){const X=O(t.items[z],z),C=x.get(X)??W.value;y[z]=C,v[z+1]=v[z]+C}return{offsets:v,sizes:y,total:v[t.items.length]??0}}),se=e.computed(()=>ee.value.total+(t.loading?S.value:0)),be=e.computed(()=>{const v=new Map;return t.items.forEach((y,z)=>{v.set(O(y,z),z)}),v}),B=e.computed(()=>Math.max(0,g.value-c.value));function H(v){if(t.items.length===0)return 0;const y=ee.value.offsets;let z=0,X=t.items.length;for(;z<X;){const C=Math.floor((z+X)/2);y[C+1]<=v?z=C+1:X=C}return Math.min(z,t.items.length-1)}const G=e.computed(()=>Math.max(0,H(B.value)-$.value)),de=e.computed(()=>{if(t.items.length===0)return 0;const v=g.value+s.value-c.value,y=Math.max(W.value,v),z=H(y)+1;return Math.min(t.items.length,z+$.value)}),ye=e.computed(()=>t.items.slice(G.value,de.value).map((v,y)=>{const z=G.value+y;return{item:v,index:z,key:O(v,z),top:ee.value.offsets[z]}}));function pe(){typeof window>"u"||(g.value=Math.max(0,window.scrollY),s.value=window.innerHeight,w.value&&(c.value=w.value.getBoundingClientRect().top+g.value))}function me(){b("scroll",{scrollTop:B.value,startIndex:G.value,endIndex:de.value})}function ae(v=!1){A&&(P||(P=v),!E&&(E=ne(()=>{E=void 0,pe(),P&&(P=!1,me()),M()})))}function oe(){ae(!0)}function m(){ae()}function M(){if(typeof window>"u"||!t.hasMore||t.loading||U===t.items.length)return;const v=Math.max(0,t.loadMoreThreshold),y=c.value+se.value,z=g.value+s.value;y-z<=v&&(U=t.items.length,b("loadMore"))}function r(v){const y=v.borderBoxSize;if(y){const z=Array.isArray(y)?y[0]:y;if(z!=null&&z.blockSize)return z.blockSize}return v.contentRect.height}function Y(v){const y=ee.value;let z=0,X=!1;for(const C of v){const ve=C.target,fe=K.get(ve),we=r(C);if(fe===void 0||we<=0)continue;const ze=x.get(fe)??W.value;if(Math.abs(ze-we)<.5)continue;const ge=be.value.get(fe);ge!==void 0&&y.offsets[ge+1]<=B.value&&(z+=we-ze),x.set(fe,we),X=!0}X&&(a.value+=1,e.nextTick(()=>{if(A){if(z!==0&&typeof window<"u"){const C=Math.max(0,g.value+z);g.value=C,window.scrollTo({top:C,behavior:"auto"})}pe(),M()}}))}function q(v){if(A){for(const y of v)V.set(y.target,y);I||(I=ne(()=>{I=void 0;const y=Array.from(V.values());V.clear(),Y(y)}))}}function xe(v,y){v instanceof HTMLElement&&(K.set(v,y),L==null||L.observe(v))}function ce(){for(const[v]of K)v.isConnected||(L==null||L.unobserve(v),K.delete(v))}function Me(v,y={}){if(typeof window>"u")return;pe();const z=Math.max(0,se.value-s.value),X=Math.min(Math.max(0,Number.isFinite(v)?v:0),z),C=Math.max(0,c.value+X),ve=y.behavior??"auto";ve==="auto"&&(g.value=C),window.scrollTo({...y,top:C,behavior:ve})}function f(v,y={}){if(typeof window>"u"||t.items.length===0)return;pe();const z=Math.min(t.items.length-1,Math.max(0,Math.floor(v))),{align:X="start",...C}=y,ve=ee.value.sizes[z];let fe=c.value+ee.value.offsets[z];X==="center"?fe-=(s.value-ve)/2:X==="end"&&(fe-=s.value-ve);const we=Math.max(c.value,c.value+se.value-s.value),ze=Math.max(0,Math.min(fe,we)),ge=C.behavior??"auto";ge==="auto"&&(g.value=ze),window.scrollTo({...C,top:ze,behavior:ge})}function D(v="auto"){typeof window>"u"||(pe(),window.scrollTo({top:Math.max(0,c.value),behavior:v}))}return e.watch(()=>t.itemKey,()=>{x.clear(),a.value+=1,U=-1}),e.watch(()=>t.items.map((v,y)=>O(v,y)),async(v,y)=>{const z=v.length!==y.length||v.some((C,ve)=>C!==y[ve]),X=new Set(v);for(const C of x.keys())X.has(C)||x.delete(C);z&&(U=-1),a.value+=1,await e.nextTick(),A&&(pe(),M())}),e.watch(()=>[t.hasMore,t.loading],async([v])=>{v||(U=-1),await e.nextTick(),A&&(pe(),M())}),e.onMounted(()=>{if(A=!0,pe(),window.addEventListener("scroll",oe,{passive:!0}),window.addEventListener("resize",m,{passive:!0}),typeof ResizeObserver<"u"){T=new ResizeObserver(()=>{ae()}),L=new ResizeObserver(q),w.value&&T.observe(w.value);for(const[v]of K)L.observe(v)}e.nextTick(()=>{A&&M()})}),e.onUpdated(ce),e.onBeforeUnmount(()=>{A=!1,window.removeEventListener("scroll",oe),window.removeEventListener("resize",m),R(E),R(I),E=void 0,I=void 0,P=!1,V.clear(),T&&(T.disconnect(),T=void 0),L&&(L.disconnect(),L=void 0),K.clear()}),u({scrollTo:Me,scrollToIndex:f,scrollToTop:D}),(v,y)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:w,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(J)}]),role:"list","aria-label":n.ariaLabel,onTouchstartPassive:y[0]||(y[0]=(...z)=>e.unref(ie)&&e.unref(ie)(...z)),onTouchmove:y[1]||(y[1]=(...z)=>e.unref(ue)&&e.unref(ue)(...z)),onTouchend:y[2]||(y[2]=(...z)=>e.unref(re)&&e.unref(re)(...z)),onTouchcancel:y[3]||(y[3]=(...z)=>e.unref(j)&&e.unref(j)(...z))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(le)}px`,transform:`translateY(${e.unref(_)-e.unref(le)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(v.$slots,"refresh",{pullDistance:e.unref(Q),progress:e.unref(te),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(Z)),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:`${se.value}px`,transform:`translateY(${e.unref(_)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ye.value,({item:z,index:X,key:C,top:ve})=>(e.openBlock(),e.createElementBlock("div",{key:C,ref_for:!0,ref:fe=>xe(fe,C),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${ve}px)`}),role:"listitem","aria-posinset":X+1,"aria-setsize":n.items.length},[e.renderSlot(v.$slots,"default",{item:z,index:X})],12,rn))),128)),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${S.value}px`,transform:`translateY(${ee.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(v.$slots,"loading",{},()=>[y[4]||(y[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(_)}px)`})},[e.renderSlot(v.$slots,"empty")],4))],42,on))}}),sn=["aria-label"],un=["aria-posinset","aria-setsize"],Mt=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:u,emit:k}){const t=n,b=k,w=e.ref(),g=e.ref(0),s=e.ref(0),c=e.ref(0);let a,x=-1;const{getItemKey:K}=Oe({componentName:"WindowGirdVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:V,pullDistance:T,pullOffset:L,pullProgress:E,refreshMessage:I,refreshThreshold:P,handleTouchStart:A,handleTouchMove:U,handleTouchEnd:O,handleTouchCancel:ne}=nt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>b("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),R=e.computed(()=>Math.max(1,t.itemSize)),J=e.computed(()=>Math.max(1,Math.floor(t.columns))),Q=e.computed(()=>Math.max(0,t.gap)),_=e.computed(()=>Math.max(0,Math.floor(t.overscan))),te=e.computed(()=>Math.max(1,t.loadingItemSize??R.value)),Z=e.computed(()=>R.value+Q.value),le=e.computed(()=>Math.ceil(t.items.length/J.value)),ie=e.computed(()=>le.value===0?0:le.value*R.value+(le.value-1)*Q.value),ue=e.computed(()=>ie.value+(t.items.length?Q.value:0)),re=e.computed(()=>ie.value+(t.loading?te.value+(t.items.length?Q.value:0):0)),j=e.computed(()=>Math.max(0,g.value-c.value)),W=e.computed(()=>Math.max(0,Math.floor(j.value/Z.value)-_.value)),S=e.computed(()=>{if(le.value===0)return 0;const ae=Math.max(R.value,g.value+s.value-c.value),oe=Math.ceil((ae+Q.value)/Z.value);return Math.min(le.value,oe+_.value)}),$=e.computed(()=>Math.min(t.items.length,W.value*J.value)),ee=e.computed(()=>Math.min(t.items.length,S.value*J.value)),se=e.computed(()=>t.items.slice($.value,ee.value).map((ae,oe)=>{const m=$.value+oe;return{item:ae,index:m,key:K(ae,m),rowIndex:Math.floor(m/J.value),columnIndex:m%J.value}})),be=e.computed(()=>({gridTemplateColumns:`repeat(${J.value}, minmax(0, 1fr))`,columnGap:`${Q.value}px`,rowGap:`${Q.value}px`,transform:`translateY(${W.value*Z.value}px)`}));function B(){typeof window>"u"||(g.value=Math.max(0,window.scrollY),s.value=window.innerHeight,w.value&&(c.value=w.value.getBoundingClientRect().top+g.value))}function H(){b("scroll",{scrollTop:j.value,startIndex:$.value,endIndex:ee.value})}function G(){B(),H(),de()}function de(){if(typeof window>"u"||!t.hasMore||t.loading||x===t.items.length)return;const ae=Math.max(0,t.loadMoreThreshold),oe=c.value+re.value,m=g.value+s.value;oe-m<=ae&&(x=t.items.length,b("loadMore"))}function ye(ae,oe={}){if(typeof window>"u")return;B();const m=Math.max(0,re.value-s.value),M=Math.min(Math.max(0,Number.isFinite(ae)?ae:0),m),r=Math.max(0,c.value+M),Y=oe.behavior??"auto";Y==="auto"&&(g.value=r),window.scrollTo({...oe,top:r,behavior:Y})}function pe(ae,oe={}){if(typeof window>"u"||t.items.length===0)return;B();const m=Math.min(t.items.length-1,Math.max(0,Math.floor(ae))),M=Math.floor(m/J.value),{align:r="start",...Y}=oe;let q=c.value+M*Z.value;r==="center"?q-=(s.value-R.value)/2:r==="end"&&(q-=s.value-R.value);const xe=Math.max(c.value,c.value+re.value-s.value),ce=Math.max(0,Math.min(q,xe)),Me=Y.behavior??"auto";Me==="auto"&&(g.value=ce),window.scrollTo({...Y,top:ce,behavior:Me})}function me(ae="auto"){typeof window>"u"||(B(),window.scrollTo({top:Math.max(0,c.value),behavior:ae}))}return e.watch(()=>[t.items.length,t.itemSize,t.columns,t.gap],async()=>{await e.nextTick(),B(),de()}),e.watch(()=>[t.hasMore,t.loading],async([ae])=>{ae||(x=-1),await e.nextTick(),B(),de()}),e.onMounted(()=>{B(),window.addEventListener("scroll",G,{passive:!0}),window.addEventListener("resize",G,{passive:!0}),typeof ResizeObserver<"u"&&(a=new ResizeObserver(()=>{B(),de()}),w.value&&a.observe(w.value)),e.nextTick(de)}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",G),window.removeEventListener("resize",G),a&&(a.disconnect(),a=void 0)}),u({scrollTo:ye,scrollToIndex:pe,scrollToTop:me}),(ae,oe)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:w,class:e.normalizeClass(["vue-window-gird-virtual-scroll",{"vue-window-gird-virtual-scroll--pulling":e.unref(V)}]),role:"list","aria-label":n.ariaLabel,onTouchstartPassive:oe[0]||(oe[0]=(...m)=>e.unref(A)&&e.unref(A)(...m)),onTouchmove:oe[1]||(oe[1]=(...m)=>e.unref(U)&&e.unref(U)(...m)),onTouchend:oe[2]||(oe[2]=(...m)=>e.unref(O)&&e.unref(O)(...m)),onTouchcancel:oe[3]||(oe[3]=(...m)=>e.unref(ne)&&e.unref(ne)(...m))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(P)}px`,transform:`translateY(${e.unref(L)-e.unref(P)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(ae.$slots,"refresh",{pullDistance:e.unref(T),progress:e.unref(E),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(I)),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:`${re.value}px`,transform:`translateY(${e.unref(L)}px)`})},[e.createElementVNode("div",{class:"vue-window-gird-virtual-scroll__content",style:e.normalizeStyle(be.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(se.value,({item:m,index:M,key:r,rowIndex:Y,columnIndex:q})=>(e.openBlock(),e.createElementBlock("div",{key:r,class:"vue-window-gird-virtual-scroll__item",style:e.normalizeStyle({height:`${R.value}px`}),role:"listitem","aria-posinset":M+1,"aria-setsize":n.items.length},[e.renderSlot(ae.$slots,"default",{item:m,index:M,rowIndex:Y,columnIndex:q})],12,un))),128))],4),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__loading",style:e.normalizeStyle({height:`${te.value}px`,transform:`translateY(${ue.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(ae.$slots,"loading",{},()=>[oe[4]||(oe[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(L)}px)`})},[e.renderSlot(ae.$slots,"empty")],4))],42,sn))}}),Tt=ut,St={install(n){n.component("ChatVirtualScroll",ht),n.component("DynamicVirtualScroll",ut),n.component("ShortMediaFeed",pt),n.component("SkeletonLoader",gt),n.component("VirtualCarousel",yt),n.component("VirtualList",Tt),n.component("VirtualScroll",xt),n.component("WindowDynamicVirtualScroll",wt),n.component("WindowGirdVirtualScroll",Mt)}};exports.ChatVirtualScroll=ht;exports.DynamicVirtualScroll=ut;exports.ShortMediaFeed=pt;exports.SkeletonLoader=gt;exports.VirtualCarousel=yt;exports.VirtualList=Tt;exports.VirtualScroll=xt;exports.VueVirtualScroll=St;exports.WindowDynamicVirtualScroll=wt;exports.WindowGirdVirtualScroll=Mt;exports.default=St;
|