vue-virtual-flow 0.0.9 → 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 +103 -0
- package/README.md +100 -10
- package/README.vi.md +92 -10
- package/dist/components/ChatVirtualScroll.d.cts +29 -2
- package/dist/components/ChatVirtualScroll.d.ts +29 -2
- package/dist/components/DynamicVirtualScroll.d.cts +3 -3
- package/dist/components/DynamicVirtualScroll.d.ts +3 -3
- package/dist/components/ShortMediaFeed.d.cts +2 -2
- package/dist/components/ShortMediaFeed.d.ts +2 -2
- package/dist/components/VirtualCarousel.d.cts +16 -2
- package/dist/components/VirtualCarousel.d.ts +16 -2
- package/dist/components/VirtualScroll.d.cts +3 -3
- package/dist/components/VirtualScroll.d.ts +3 -3
- package/dist/components/WindowDynamicVirtualScroll.d.cts +3 -3
- package/dist/components/WindowDynamicVirtualScroll.d.ts +3 -3
- package/dist/components/WindowGirdVirtualScroll.d.cts +3 -3
- package/dist/components/WindowGirdVirtualScroll.d.ts +3 -3
- package/dist/composables/useCarouselAutoplay.d.cts +15 -0
- package/dist/composables/useCarouselAutoplay.d.ts +15 -0
- package/dist/composables/useCarouselInteraction.d.cts +42 -0
- package/dist/composables/useCarouselInteraction.d.ts +42 -0
- package/dist/composables/useScrollActivity.d.cts +28 -0
- package/dist/composables/useScrollActivity.d.ts +28 -0
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/types.d.cts +48 -0
- package/dist/types.d.ts +48 -0
- package/dist/utils/carouselLayout.d.cts +8 -0
- package/dist/utils/carouselLayout.d.ts +8 -0
- package/dist/utils/carouselMotion.d.cts +5 -0
- package/dist/utils/carouselMotion.d.ts +5 -0
- package/dist/utils/keyedSizeIndex.d.cts +19 -0
- package/dist/utils/keyedSizeIndex.d.ts +19 -0
- package/dist/vue-virtual-flow.cjs +1 -1
- package/dist/vue-virtual-flow.css +1 -1
- package/dist/vue-virtual-flow.js +2200 -1515
- package/package.json +3 -2
package/dist/types.d.ts
CHANGED
|
@@ -70,7 +70,11 @@ export interface WindowGirdVirtualScrollProps<T> {
|
|
|
70
70
|
}
|
|
71
71
|
export interface ChatVirtualScrollProps<T> {
|
|
72
72
|
items: readonly T[];
|
|
73
|
+
/** Increment after mutating/reordering the same array instance in place. */
|
|
74
|
+
itemsVersion?: PropertyKey;
|
|
73
75
|
estimatedItemSize?: number;
|
|
76
|
+
/** Optional per-message estimate used before the message is measured. */
|
|
77
|
+
estimateItemSize?: (item: T, index: number) => number;
|
|
74
78
|
height?: number | string;
|
|
75
79
|
overscan?: number;
|
|
76
80
|
/** Render budget including overscan; always keeps the viewport filled. */
|
|
@@ -83,6 +87,22 @@ export interface ChatVirtualScrollProps<T> {
|
|
|
83
87
|
hasOlder?: boolean;
|
|
84
88
|
loadingOlder?: boolean;
|
|
85
89
|
loadOlderThreshold?: number;
|
|
90
|
+
/** Idle delay used when the browser does not provide a reliable scrollend event. */
|
|
91
|
+
scrollEndDelay?: number;
|
|
92
|
+
/** Measure newly mounted messages synchronously before paint. */
|
|
93
|
+
syncMeasurement?: boolean;
|
|
94
|
+
/** Message keys that must remain mounted outside the visible range. */
|
|
95
|
+
pinnedKeys?: readonly PropertyKey[];
|
|
96
|
+
maxPinnedItems?: number;
|
|
97
|
+
/** Retain the message containing keyboard focus while it is off-screen. */
|
|
98
|
+
keepFocusedItem?: boolean;
|
|
99
|
+
showNewItemsIndicator?: boolean;
|
|
100
|
+
/** Localizes the built-in new-message control. */
|
|
101
|
+
newItemsLabel?: (count: number) => string;
|
|
102
|
+
/** Return true for appended items that should always move the conversation to the bottom. */
|
|
103
|
+
forceStickToBottom?: (item: T, index: number) => boolean;
|
|
104
|
+
/** Enable layout/paint containment. Disable when non-teleported overlays may escape. */
|
|
105
|
+
contain?: boolean;
|
|
86
106
|
}
|
|
87
107
|
export interface ShortMediaFeedProps<T> {
|
|
88
108
|
items: readonly T[];
|
|
@@ -116,8 +136,27 @@ export interface VirtualCarouselProps<T> {
|
|
|
116
136
|
autoplayDelay?: number;
|
|
117
137
|
autoplayLoop?: boolean;
|
|
118
138
|
pauseOnHover?: boolean;
|
|
139
|
+
mouseDrag?: boolean;
|
|
140
|
+
/** Snap once as soon as the mouse crosses dragThreshold, or follow the pointer until release. */
|
|
141
|
+
mouseDragMode?: 'drag' | 'snap';
|
|
142
|
+
dragThreshold?: number;
|
|
143
|
+
momentum?: boolean;
|
|
144
|
+
settleDuration?: number;
|
|
145
|
+
/** Disable native snap for nested snap containers; the motion controller settles instead. */
|
|
146
|
+
nativeSnap?: boolean;
|
|
147
|
+
autoWidth?: boolean;
|
|
148
|
+
estimatedItemWidth?: number;
|
|
149
|
+
rtl?: boolean;
|
|
150
|
+
/** Continuous looping; distinct from autoplayLoop's rewind behavior. */
|
|
151
|
+
loop?: boolean;
|
|
152
|
+
keepAlive?: boolean;
|
|
153
|
+
/** Maximum additional off-screen slides retained by keepAlive. */
|
|
154
|
+
maxCachedItems?: number;
|
|
155
|
+
/** Slides to retain, capped by maxCachedItems. */
|
|
156
|
+
pinnedIndexes?: readonly number[];
|
|
119
157
|
responsive?: ResponsiveBreakpoint[];
|
|
120
158
|
}
|
|
159
|
+
export type CarouselInteractionPhase = 'idle' | 'pending' | 'dragging' | 'settling' | 'committing';
|
|
121
160
|
export interface ResponsiveBreakpoint {
|
|
122
161
|
breakpoint: number;
|
|
123
162
|
slidesPerView?: number;
|
|
@@ -143,6 +182,15 @@ export interface VirtualScrollExpose {
|
|
|
143
182
|
}
|
|
144
183
|
export interface ChatVirtualScrollExpose extends VirtualScrollExpose {
|
|
145
184
|
readonly isAtBottom: boolean;
|
|
185
|
+
readonly isScrolling: boolean;
|
|
186
|
+
readonly newItemsCount: number;
|
|
187
|
+
clearNewItems: () => void;
|
|
188
|
+
/** Reconcile keys and measurements after an in-place items mutation. */
|
|
189
|
+
refresh: () => void;
|
|
190
|
+
getScrollPosition: () => number;
|
|
191
|
+
scrollToKey: (key: PropertyKey, options?: ScrollToOptions & {
|
|
192
|
+
align?: ScrollAlignment;
|
|
193
|
+
}) => void;
|
|
146
194
|
scrollToBottom: (behavior?: ScrollBehavior) => void;
|
|
147
195
|
}
|
|
148
196
|
export interface ShortMediaFeedExpose {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function wrapCarouselIndex(index: number, count: number): number;
|
|
2
|
+
export declare function createCarouselLayout(widths: readonly number[], gap: number): {
|
|
3
|
+
offsets: number[];
|
|
4
|
+
cycleWidth: number;
|
|
5
|
+
totalWidth: number;
|
|
6
|
+
indexAt: (position: number) => number;
|
|
7
|
+
nearestIndex: (position: number) => number;
|
|
8
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function wrapCarouselIndex(index: number, count: number): number;
|
|
2
|
+
export declare function createCarouselLayout(widths: readonly number[], gap: number): {
|
|
3
|
+
offsets: number[];
|
|
4
|
+
cycleWidth: number;
|
|
5
|
+
totalWidth: number;
|
|
6
|
+
indexAt: (position: number) => number;
|
|
7
|
+
nearestIndex: (position: number) => number;
|
|
8
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function projectCarouselMomentum(velocity: number, itemStep: number): number;
|
|
2
|
+
export declare function createCarouselSettleMotion(startOffset: number, targetOffset: number, releaseVelocity: number, settleDuration?: number): {
|
|
3
|
+
keyframes: Keyframe[];
|
|
4
|
+
options: KeyframeAnimationOptions;
|
|
5
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function projectCarouselMomentum(velocity: number, itemStep: number): number;
|
|
2
|
+
export declare function createCarouselSettleMotion(startOffset: number, targetOffset: number, releaseVelocity: number, settleDuration?: number): {
|
|
3
|
+
keyframes: Keyframe[];
|
|
4
|
+
options: KeyframeAnimationOptions;
|
|
5
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SizeIndex } from './sizeIndex.cjs';
|
|
2
|
+
export interface KeyedSizeEntry {
|
|
3
|
+
key: PropertyKey;
|
|
4
|
+
size: number;
|
|
5
|
+
}
|
|
6
|
+
export interface KeyedSizeIndex extends SizeIndex {
|
|
7
|
+
getKey(index: number): PropertyKey | undefined;
|
|
8
|
+
getIndex(key: PropertyKey): number | undefined;
|
|
9
|
+
getSizeByKey(key: PropertyKey): number | undefined;
|
|
10
|
+
hasKey(key: PropertyKey): boolean;
|
|
11
|
+
append(entries: readonly KeyedSizeEntry[]): void;
|
|
12
|
+
prepend(entries: readonly KeyedSizeEntry[]): void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A keyed implicit treap for chat timelines. Appending, prepending, measuring,
|
|
16
|
+
* prefix queries and offset lookup are O(log n), while key lookup is O(1)
|
|
17
|
+
* plus O(log n) to derive the current rank through parent links.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createKeyedSizeIndex(initialEntries: readonly KeyedSizeEntry[]): KeyedSizeIndex;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SizeIndex } from './sizeIndex.js';
|
|
2
|
+
export interface KeyedSizeEntry {
|
|
3
|
+
key: PropertyKey;
|
|
4
|
+
size: number;
|
|
5
|
+
}
|
|
6
|
+
export interface KeyedSizeIndex extends SizeIndex {
|
|
7
|
+
getKey(index: number): PropertyKey | undefined;
|
|
8
|
+
getIndex(key: PropertyKey): number | undefined;
|
|
9
|
+
getSizeByKey(key: PropertyKey): number | undefined;
|
|
10
|
+
hasKey(key: PropertyKey): boolean;
|
|
11
|
+
append(entries: readonly KeyedSizeEntry[]): void;
|
|
12
|
+
prepend(entries: readonly KeyedSizeEntry[]): void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A keyed implicit treap for chat timelines. Appending, prepending, measuring,
|
|
16
|
+
* prefix queries and offset lookup are O(log n), while key lookup is O(1)
|
|
17
|
+
* plus O(log n) to derive the current rank through parent links.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createKeyedSizeIndex(initialEntries: readonly KeyedSizeEntry[]): KeyedSizeIndex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");function _e(o){return typeof o=="string"||typeof o=="number"||typeof o=="symbol"}function Le(o,O){const x=o[O];return _e(x)?x:void 0}function Ue(o){return Le(o,"id")??Le(o,"key")}function be(o){function O(t,p){const d=o.itemKey();if(typeof d=="function")return d(t,p);if(t!==null&&typeof t=="object"){if(d!==void 0){const a=Le(t,d);if(a!==void 0)return a}const s=Ue(t);if(s!==void 0)return s}return p}function x(){}return e.watch(()=>[o.itemKey(),o.items()],x,{immediate:!0}),{getItemKey:O}}function Ie(o){return o==="fill"?"100%":typeof o=="number"?`${o}px`:o}function $e(o){return(O,x)=>{typeof x=="string"&&(x==="fill"||x.trim().endsWith("%"))}}function je(o){const O=Float64Array.from(o),x=O.length,t=new Float64Array(x+1);let p=0;for(let s=1;s<=x;s+=1){const a=O[s-1];p+=a,t[s]+=a;const v=s+(s&-s);v<=x&&(t[v]+=t[s])}let d=1;for(;d*2<=x;)d*=2;return{length:x,get total(){return p},getSize(s){return O[s]},getOffset(s){let a=0;for(let v=s;v>0;v-=v&-v)a+=t[v];return a},setSize(s,a){const v=a-O[s];if(v!==0){O[s]=a,p+=v;for(let H=s+1;H<=x;H+=H&-H)t[H]+=v}},findIndex(s){if(x===0||s<=0)return 0;if(s>=p)return x-1;let a=0,v=0;for(let H=d;H>0;H=Math.floor(H/2)){const L=a+H;L<=x&&v+t[L]<=s&&(a=L,v+=t[L])}return Math.min(a,x-1)}}}const Ge=["aria-label"],qe={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},Ze=["aria-posinset","aria-setsize"],Oe=e.defineComponent({name:"ChatVirtualScroll",__name:"ChatVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:5},size:{default:void 0},itemKey:{default:void 0},ariaLabel:{default:"Chat messages"},stickToBottom:{type:Boolean,default:!0},bottomThreshold:{default:80},initialScroll:{default:"bottom"},hasOlder:{type:Boolean,default:!1},loadingOlder:{type:Boolean,default:!1},loadOlderThreshold:{default:120}},emits:["scroll","loadOlder","bottomChange"],setup(o,{expose:O,emit:x}){const t=o,p=x,d=e.ref(),s=e.ref(0),a=e.ref(0),v=e.ref(0),H=e.ref(0),L=e.ref(!0),F=new Map,W=new Map,E=new Set;let R,M,b=-1,z=!1,K=!1,N=!1,Q,Y=0,$=!1,X=0,V,U,D,Z=0;const ee=$e(),{getItemKey:ie}=be({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),oe=e.computed(()=>Number.isFinite(t.estimatedItemSize)?Math.max(1,t.estimatedItemSize):48),le=e.computed(()=>Math.max(0,Math.floor(t.overscan))),fe=e.computed(()=>t.size!==void 0&&Number.isFinite(t.size)&&t.size>0?Math.max(1,Math.floor(t.size)):void 0),A=e.computed(()=>v.value>0?v.value:typeof t.height=="number"?Math.max(0,t.height):oe.value),u=e.computed(()=>{const r=t.items.map((f,y)=>ie(f,y));return{keys:r,indexes:new Map(r.map((f,y)=>[f,y])),sizes:je(r.map(f=>F.get(f)??oe.value))}}),c=e.computed(()=>(H.value,{sizes:u.value.sizes,total:u.value.sizes.total}));function k(r=c.value.total){return Math.max(0,r-A.value)}function j(r){return c.value.sizes.findIndex(r)}s.value=t.initialScroll==="bottom"?k():0;const re=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const r=j(s.value),f=j(s.value+A.value)+1,y=Math.max(0,r-le.value),C=Math.min(t.items.length,f+le.value),ue=fe.value;if(ue===void 0||C-y<=ue)return{start:y,end:C};const me=Math.max(0,ue-(f-r)),ve=r-y,pe=C-f;let Me=Math.min(ve,Math.ceil(me/2));const ye=Math.min(pe,me-Me);return Me=Math.min(ve,me-ye),{start:r-Me,end:f+ye}}),g=e.computed(()=>re.value.start),B=e.computed(()=>re.value.end),I=e.computed(()=>t.items.slice(g.value,B.value).map((r,f)=>{const y=g.value+f;return{item:r,index:y,key:ie(r,y),bottom:Math.max(c.value.total,A.value)-c.value.sizes.getOffset(y+1)+a.value}})),q=e.computed(()=>({height:Ie(t.height)}));function J(r=c.value.total){var C;const f=k(r),y=Math.min(0,((C=d.value)==null?void 0:C.scrollTop)??0);return Math.max(0,Math.min(f,f+y+Y))}function te(r=!1){if($||(N||D)&&!r||Y===0)return;$=!0;const f=Z,y=++X;a.value=0,e.nextTick(()=>{if(y!==X)return;$=!1;const C=d.value;!C||f!==Z||Y===0||(Y=0,C.scrollTop=Math.min(0,s.value-k()),U=C.scrollTop,s.value=J(),w(),ae())})}function ce(r){const f=d.value;if(f){if(Y+=r,s.value=J(),Y===0||k()===0){Y=0,a.value=0;return}(N||D)&&!$?(a.value=Y,f.scrollTop>=-1&&te(!0)):te()}}function P(){clearTimeout(Q),Q=void 0}function G(){if(K)return;P(),N=!1;const r=D;if(D=void 0,r){r();return}s.value=J(),te()}function i(){P(),(N||D)&&!K&&(Q=setTimeout(G,150))}function l(){V=void 0,D=void 0}function n(){l(),P(),K=!0,N=!0,a.value=Y}function h(r){K=r.touches.length>0,i()}function w(){const r=d.value;if(!r)return;const y=Math.max(0,c.value.total-J()-r.clientHeight)<=Math.max(0,t.bottomThreshold);y!==L.value&&(L.value=y,z&&p("bottomChange",y))}function de(){var r;v.value=((r=d.value)==null?void 0:r.clientHeight)??0,z&&(s.value=J()),ee(d.value,t.height),e.nextTick(()=>{w(),ae()})}function se(){var r,f;V&&U!==void 0&&Math.abs((((r=d.value)==null?void 0:r.scrollTop)??0)-U)>1&&l(),s.value=J(),Y!==0&&(((f=d.value)==null?void 0:f.scrollTop)??0)>=-1&&te(!0),i(),w(),p("scroll",{scrollTop:s.value,startIndex:g.value,endIndex:B.value}),ae()}function ae(){const r=d.value;!z||!r||!t.hasOlder||t.loadingOlder||b===t.items.length||J()<=Math.max(0,t.loadOlderThreshold)&&(b=t.items.length,p("loadOlder"))}function Te(r){const f=r.borderBoxSize;if(f){const y=Array.isArray(f)?f[0]:f;if(y!=null&&y.blockSize)return y.blockSize}return r.contentRect.height}function xe(r){const f=c.value.total,y=J(),C=!N&&!D&&L.value&&t.stickToBottom&&(z||t.initialScroll==="bottom"),ue=j(y+A.value-1),me=!C&&y<=0;let ve=0,pe=!1;for(const{key:He,height:ze}of r){if(!Number.isFinite(ze)||ze<=0)continue;const Ee=u.value.indexes.get(He);if(Ee===void 0)continue;const Re=c.value.sizes.getSize(Ee);F.set(He,ze),!(Math.abs(Re-ze)<.5)&&(Ee<=ue&&(ve+=ze-Re),c.value.sizes.setSize(Ee,ze),pe=!0)}if(!pe)return;H.value+=1;const Me=k()-k(f),ye=V&&u.value.indexes.get(V.key),Be=ye!==void 0&&V?ge(ye,V.align):C?k():me?0:y+ve;ce(Be-y-Me),e.nextTick(w)}function m(r){const f=[];for(const y of r){const C=W.get(y.target);C!==void 0&&f.push({key:C,height:Te(y)})}xe(f)}function S(){const r=[];for(const f of E){const y=W.get(f);y!==void 0&&f.isConnected&&r.push({key:y,height:f.getBoundingClientRect().height})}E.clear(),xe(r)}function T(r,f){r instanceof HTMLElement&&W.get(r)!==f&&(W.set(r,f),F.has(f)||E.add(r),M==null||M.observe(r))}function ne(){for(const[r]of W)r.isConnected||(M==null||M.unobserve(r),W.delete(r),E.delete(r))}function _(r,f,y=!1){const C=d.value;if(!C)return;const ue=J(),me=a.value!==0,ve=++Z;X+=1,$=!1,V=void 0;const pe=f.behavior??"auto";D=pe==="smooth"?()=>he(r):void 0,Y=0,a.value=0,N=!1,P(),pe==="auto"&&(s.value=r);const Me=()=>{d.value!==C||ve!==Z||(me&&pe!=="auto"&&(C.scrollTop=ue-k()),y&&pe==="auto"?C.scrollTop=r-k():C.scrollTo({...f,top:r-k(),behavior:pe}),U=C.scrollTop,pe==="auto"?s.value=J():i(),e.nextTick(w))};me?e.nextTick(Me):Me()}function he(r,f={}){const y=d.value;if(!y)return;const C=Math.max(0,c.value.total-y.clientHeight),ue=Math.min(Math.max(0,Number.isFinite(r)?r:0),C);_(ue,f)}function ge(r,f){const y=c.value.sizes.getSize(r);let C=c.value.sizes.getOffset(r);return f==="center"?C-=(A.value-y)/2:f==="end"&&(C-=A.value-y),Math.max(0,Math.min(C,k()))}function we(r,f={}){if(!d.value||t.items.length===0)return;const y=Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(r)?r:0))),{align:C="start",...ue}=f;_(ge(y,C),ue);const me=u.value.keys[y];f.behavior==="smooth"?D=()=>{const ve=u.value.indexes.get(me);ve!==void 0&&we(ve,{align:C})}:V={key:me,align:C}}function ke(r="auto"){_(0,{behavior:r})}function Se(r="auto"){const f=d.value;if(!f)return;const y=Math.max(0,c.value.total-f.clientHeight);_(y,{behavior:r},!0),r==="smooth"&&(D=()=>Se())}return e.watch(u,async(r,f)=>{const y=f.sizes.total,C=J(y),ue=!N&&!D&&L.value&&t.stickToBottom,me=f.sizes.findIndex(C+A.value-1),ve=f.keys[me],pe=ve===void 0?void 0:r.indexes.get(ve),Me=k()-k(y);for(const ye of F.keys())r.indexes.has(ye)||F.delete(ye);if(r.keys.length===0||pe===void 0){Y=0,a.value=0,s.value=ue?k():Math.min(C,k());const ye=s.value,Be=Z;await e.nextTick(),Be===Z&&u.value===r&&_(ye,{},!0)}else{const ye=r.sizes.getOffset(pe+1)-f.sizes.getOffset(me+1),Be=ue?k():C+ye;ce(Be-C-Me),await e.nextTick()}d.value&&(s.value=J(),w(),ae())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([r])=>{r||(b=-1),await e.nextTick(),ae()}),e.onMounted(()=>{if(de(),d.value&&(d.value.scrollTop=t.initialScroll==="bottom"?0:-k(),s.value=J()),S(),typeof ResizeObserver<"u"){R=new ResizeObserver(de),M=new ResizeObserver(m),d.value&&R.observe(d.value);for(const[r]of W)M.observe(r)}e.nextTick(()=>{z=!0,w(),ae()})}),e.onUpdated(()=>{ne(),S()}),e.onBeforeUnmount(()=>{z=!1,P(),l(),Y=0,Z+=1,X+=1,R&&(R.disconnect(),R=void 0),M&&(M.disconnect(),M=void 0),W.clear(),E.clear()}),O({isAtBottom:L,scrollTo:he,scrollToIndex:we,scrollToTop:ke,scrollToBottom:Se}),(r,f)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:d,class:"vue-chat-virtual-scroll",style:e.normalizeStyle(q.value),role:"log","aria-label":o.ariaLabel,"aria-live":"polite",tabindex:"0",onScrollPassive:se,onScrollendPassive:G,onPointerdownPassive:l,onWheelPassive:l,onKeydown:l,onTouchstartPassive:n,onTouchendPassive:h,onTouchcancelPassive:h},[e.createElementVNode("div",{class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${Math.max(A.value,c.value.total+a.value)}px`})},[o.loadingOlder?(e.openBlock(),e.createElementBlock("div",qe,[e.createElementVNode("div",null,[e.renderSlot(r.$slots,"loadingOlder",{},()=>[f[0]||(f[0]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,({item:y,index:C,key:ue,bottom:me})=>(e.openBlock(),e.createElementBlock("div",{key:ue,ref_for:!0,ref:ve=>T(ve,ue),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${-me}px)`}),role:"article","aria-posinset":C+1,"aria-setsize":o.items.length},[e.renderSlot(r.$slots,"default",{item:y,index:C})],12,Ze))),128)),o.items.length?e.createCommentVNode("",!0):e.renderSlot(r.$slots,"empty",{},void 0,void 0,1)],4)],44,Ge))}});function Ve(o){const O=e.ref(),x=e.ref(0),t=e.ref(!1),p=e.ref(!1),d=e.computed(()=>Math.max(1,o.threshold())),s=e.computed(()=>o.refreshing()||p.value?d.value:x.value),a=e.computed(()=>Math.min(1,x.value/d.value)),v=e.computed(()=>o.refreshing()||p.value?"Refreshing…":a.value>=1?"Release to refresh":"Pull to refresh");function H(){O.value=void 0,t.value=!1,x.value=0}function L(E){var b;const R=E.currentTarget,M=((b=o.scrollTop)==null?void 0:b.call(o))??R.scrollTop;!o.enabled()||o.refreshing()||M>0||E.touches.length!==1||(O.value=E.touches[0].clientY,t.value=!0)}function F(E){var z;if(O.value===void 0||!t.value)return;const R=E.currentTarget;if((((z=o.scrollTop)==null?void 0:z.call(o))??R.scrollTop)>0||E.touches.length!==1){H();return}const b=E.touches[0].clientY-O.value;if(b<=0){x.value=0;return}E.preventDefault(),x.value=Math.min(b*.5,d.value*2)}function W(){if(O.value===void 0)return;const E=x.value>=d.value&&o.enabled()&&!o.refreshing();if(O.value=void 0,t.value=!1,!E){x.value=0;return}x.value=d.value,p.value=!0,o.onRefresh(),e.nextTick(()=>{o.refreshing()||(p.value=!1,x.value=0)})}return e.watch(()=>o.refreshing(),(E,R)=>{E?(p.value=!1,x.value=d.value):R&&(p.value=!1,x.value=0)}),{pulling:t,pullDistance:x,pullOffset:s,pullProgress:a,refreshMessage:v,refreshThreshold:d,handleTouchStart:L,handleTouchMove:F,handleTouchEnd:W,handleTouchCancel:H}}const Xe=["aria-label"],Je=["aria-posinset","aria-setsize"],Ce=e.defineComponent({name:"DynamicVirtualScroll",__name:"DynamicVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Dynamic virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:O,emit:x}){const t=o,p=x,{pulling:d,pullDistance:s,pullOffset:a,pullProgress:v,refreshMessage:H,refreshThreshold:L,handleTouchStart:F,handleTouchMove:W,handleTouchEnd:E,handleTouchCancel:R}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>p("refresh")}),M=e.ref(),b=e.ref(0),z=e.ref(0),K=e.ref(0),N=new Map,Q=new Map;let Y,$,X=-1;const V=$e(),{getItemKey:U}=be({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),D=e.computed(()=>Math.max(1,t.estimatedItemSize)),Z=e.computed(()=>Math.max(1,t.loadingItemSize??D.value)),ee=e.computed(()=>Math.max(0,Math.floor(t.overscan))),ie=e.computed(()=>z.value>0?z.value:typeof t.height=="number"?Math.max(0,t.height):D.value),oe=e.computed(()=>{K.value;const i=new Array(t.items.length+1),l=new Array(t.items.length);i[0]=0;for(let n=0;n<t.items.length;n+=1){const h=U(t.items[n],n),w=N.get(h)??D.value;l[n]=w,i[n+1]=i[n]+w}return{offsets:i,sizes:l,total:i[t.items.length]??0}}),le=e.computed(()=>oe.value.total+(t.loading?Z.value:0)),fe=e.computed(()=>{const i=new Map;return t.items.forEach((l,n)=>{i.set(U(l,n),n)}),i});function A(i){if(t.items.length===0)return 0;const l=oe.value.offsets;let n=0,h=t.items.length;for(;n<h;){const w=Math.floor((n+h)/2);l[w+1]<=i?n=w+1:h=w}return Math.min(n,t.items.length-1)}const u=e.computed(()=>Math.max(0,A(b.value)-ee.value)),c=e.computed(()=>{if(t.items.length===0)return 0;const i=A(b.value+ie.value)+1;return Math.min(t.items.length,i+ee.value)}),k=e.computed(()=>t.items.slice(u.value,c.value).map((i,l)=>{const n=u.value+l;return{item:i,index:n,key:U(i,n),top:oe.value.offsets[n]}})),j=e.computed(()=>({height:Ie(t.height)}));function re(){var i;z.value=((i=M.value)==null?void 0:i.clientHeight)??0,V(M.value,t.height),e.nextTick(B)}function g(i){b.value=i.currentTarget.scrollTop,p("scroll",{scrollTop:b.value,startIndex:u.value,endIndex:c.value}),B()}function B(){const i=M.value;if(!i||!t.hasMore||t.loading||X===t.items.length)return;const l=Math.max(0,t.loadMoreThreshold);le.value-i.scrollTop-i.clientHeight<=l&&(X=t.items.length,p("loadMore"))}function I(i){const l=i.borderBoxSize;if(l){const n=Array.isArray(l)?l[0]:l;if(n!=null&&n.blockSize)return n.blockSize}return i.contentRect.height}function q(i){const l=oe.value;let n=0,h=!1;for(const w of i){const de=w.target,se=Q.get(de),ae=I(w);if(se===void 0||ae<=0)continue;const Te=N.get(se)??D.value;if(Math.abs(Te-ae)<.5)continue;const xe=fe.value.get(se);xe!==void 0&&l.offsets[xe+1]<=b.value&&(n+=ae-Te),N.set(se,ae),h=!0}h&&(K.value+=1,e.nextTick(B),n!==0&&e.nextTick(()=>{const w=M.value;w&&(w.scrollTop+=n,b.value=w.scrollTop)}))}function J(i,l){i instanceof HTMLElement&&(Q.set(i,l),$==null||$.observe(i))}function te(){for(const[i]of Q)i.isConnected||($==null||$.unobserve(i),Q.delete(i))}function ce(i,l={}){const n=M.value;if(!n)return;const h=Math.max(0,le.value-n.clientHeight),w=Math.min(Math.max(0,Number.isFinite(i)?i:0),h),de=l.behavior??"auto";de==="auto"&&(b.value=w),n.scrollTo({...l,top:w,behavior:de})}function P(i,l={}){const n=M.value;if(!n||t.items.length===0)return;const h=Math.min(t.items.length-1,Math.max(0,Math.floor(i))),{align:w="start",...de}=l;let se=oe.value.offsets[h];const ae=oe.value.sizes[h];w==="center"?se-=(n.clientHeight-ae)/2:w==="end"&&(se-=n.clientHeight-ae);const Te=Math.max(0,Math.min(se,le.value-n.clientHeight)),xe=de.behavior??"auto";xe==="auto"&&(b.value=Te),n.scrollTo({...de,top:Te,behavior:xe})}function G(i="auto"){var l;(l=M.value)==null||l.scrollTo({top:0,behavior:i})}return e.watch(()=>t.itemKey,()=>{N.clear(),K.value+=1}),e.watch(()=>t.items.length,async()=>{const i=new Set(t.items.map((h,w)=>U(h,w)));for(const h of N.keys())i.has(h)||N.delete(h);K.value+=1,await e.nextTick();const l=M.value;if(!l)return;const n=Math.max(0,le.value-l.clientHeight);l.scrollTop>n&&(l.scrollTop=n,b.value=n),B()}),e.watch(()=>[t.hasMore,t.loading],async([i])=>{i||(X=-1),await e.nextTick(),B()}),e.onMounted(()=>{if(re(),typeof ResizeObserver<"u"){Y=new ResizeObserver(re),$=new ResizeObserver(q),M.value&&Y.observe(M.value);for(const[i]of Q)$.observe(i)}e.nextTick(B)}),e.onUpdated(te),e.onBeforeUnmount(()=>{Y&&(Y.disconnect(),Y=void 0),$&&($.disconnect(),$=void 0),Q.clear()}),O({scrollTo:ce,scrollToIndex:P,scrollToTop:G}),(i,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:M,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(d)}]),style:e.normalizeStyle(j.value),role:"list","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:g,onTouchstartPassive:l[0]||(l[0]=(...n)=>e.unref(F)&&e.unref(F)(...n)),onTouchmove:l[1]||(l[1]=(...n)=>e.unref(W)&&e.unref(W)(...n)),onTouchend:l[2]||(l[2]=(...n)=>e.unref(E)&&e.unref(E)(...n)),onTouchcancel:l[3]||(l[3]=(...n)=>e.unref(R)&&e.unref(R)(...n))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(L)}px`,transform:`translateY(${e.unref(a)-e.unref(L)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(i.$slots,"refresh",{pullDistance:e.unref(s),progress:e.unref(v),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(H)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${le.value}px`,transform:`translateY(${e.unref(a)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,({item:n,index:h,key:w,top:de})=>(e.openBlock(),e.createElementBlock("div",{key:w,ref_for:!0,ref:se=>J(se,w),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${de}px)`}),role:"listitem","aria-posinset":h+1,"aria-setsize":o.items.length},[e.renderSlot(i.$slots,"default",{item:n,index:h})],12,Je))),128)),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${Z.value}px`,transform:`translateY(${oe.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(i.$slots,"loading",{},()=>[l[4]||(l[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(a)}px)`})},[e.renderSlot(i.$slots,"empty")],4))],46,Xe))}}),Qe=["aria-label"],et=["aria-current","aria-posinset","aria-setsize"],tt={key:1,class:"vue-short-media-feed__empty"},lt=36,ot=700,Ne=e.defineComponent({name:"ShortMediaFeed",__name:"ShortMediaFeed",props:{items:{},activeIndex:{default:0},buffer:{default:1},height:{default:"100dvh"},itemKey:{default:void 0},ariaLabel:{default:"Short media feed"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(o,{expose:O,emit:x}){const t=o,p=x,d=e.ref(),s=e.ref(0),a=e.ref(V(t.activeIndex));let v,H=-1,L=0,F=!1,W;const E=$e(),{getItemKey:R}=be({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),M=e.computed(()=>Math.max(0,Math.floor(t.buffer))),b=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),z=e.computed(()=>s.value>0?s.value:typeof t.height=="number"?Math.max(1,t.height):0),K=e.computed(()=>Math.max(0,a.value-M.value)),N=e.computed(()=>Math.min(t.items.length,a.value+M.value+1)),Q=e.computed(()=>t.items.slice(K.value,N.value).map((u,c)=>({item:u,index:K.value+c}))),Y=e.computed(()=>K.value*z.value),$=e.computed(()=>(t.items.length-N.value)*z.value),X=e.computed(()=>({height:Ie(t.height)}));function V(u){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(u)?u:0)))}function U(){if(!t.hasMore||t.loading||H===t.items.length)return;(t.items.length===0?0:t.items.length-1-a.value)<=b.value&&(H=t.items.length,p("loadMore"))}function D(u){const c=V(u);c===a.value||t.items.length===0||(a.value=c,p("update:activeIndex",c),p("change",{index:c,item:t.items[c]}),c===0&&p("reachStart"),c===t.items.length-1&&p("reachEnd"),U())}function Z(u,c={}){const k=d.value;k&&(typeof k.scrollTo=="function"?k.scrollTo({...c,top:u}):k.scrollTop=u)}function ee(u,c={}){if(t.items.length===0)return;const k=V(u);D(k),Z(k*z.value,c)}function ie(u){if(z.value<=0)return;const c=u.currentTarget.scrollTop;D(Math.round(c/z.value))}function oe(u){let c;u.key==="ArrowDown"||u.key==="PageDown"?c=a.value+1:u.key==="ArrowUp"||u.key==="PageUp"?c=a.value-1:u.key==="Home"?c=0:u.key==="End"&&(c=t.items.length-1),c!==void 0&&(u.preventDefault(),ee(c,{behavior:"smooth"}))}function le(u){return u.deltaMode===WheelEvent.DOM_DELTA_LINE?u.deltaY*16:u.deltaMode===WheelEvent.DOM_DELTA_PAGE?u.deltaY*(z.value||1):u.deltaY}function fe(u){if(u.ctrlKey||Math.abs(u.deltaX)>Math.abs(u.deltaY)||t.items.length===0||z.value<=0||(u.preventDefault(),F))return;const c=le(u);if(c*L<0&&(L=0),L+=c,Math.abs(L)<lt)return;const k=L>0?1:-1;L=0;const j=a.value+k;j<0||j>=t.items.length||(F=!0,ee(j,{behavior:"smooth"}),W=setTimeout(()=>{F=!1},ot))}function A(){var c;const u=((c=d.value)==null?void 0:c.clientHeight)??0;E(d.value,t.height),!(u<=0||u===s.value)&&(s.value=u,e.nextTick(()=>{Z(a.value*u)}))}return e.watch(()=>t.activeIndex,async u=>{const c=V(u);c!==a.value&&(a.value=c,await e.nextTick(),Z(c*z.value),U())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([u])=>{u||(H=-1),await e.nextTick(),U()}),e.watch(()=>t.items.length,async()=>{const u=V(a.value);t.items.length===0?a.value!==0&&(a.value=0,p("update:activeIndex",0)):D(u),await e.nextTick(),Z(u*z.value),U()}),e.onMounted(async()=>{A(),typeof ResizeObserver<"u"&&d.value&&(v=new ResizeObserver(A),v.observe(d.value)),await e.nextTick(),Z(a.value*z.value),U()}),e.onBeforeUnmount(()=>{v&&(v.disconnect(),v=void 0),W&&(clearTimeout(W),W=void 0)}),O({scrollToIndex:ee}),(u,c)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:d,class:"vue-short-media-feed",style:e.normalizeStyle(X.value),role:"list","aria-orientation":"vertical","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:ie,onWheel:fe,onKeydown:oe},[o.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[Y.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${Y.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Q.value,({item:k,index:j})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(R)(k,j),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${z.value}px`}),role:"listitem","aria-current":j===a.value?"true":void 0,"aria-posinset":j+1,"aria-setsize":o.items.length},[e.renderSlot(u.$slots,"default",{item:k,index:j,active:j===a.value})],12,et))),128)),$.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${$.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",tt,[e.renderSlot(u.$slots,"empty")]))],44,Qe))}}),nt=["aria-label"],at=e.defineComponent({__name:"SkeletonLoader",props:{width:{default:"100%"},height:{default:16},variant:{default:"rounded"},animated:{type:Boolean,default:!0},ariaLabel:{default:"Loading…"}},setup(o){const O=o;function x(p){return typeof p=="number"?`${Math.max(0,p)}px`:p}const t=e.computed(()=>({width:x(O.width),height:x(O.height)}));return(p,d)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vue-skeleton-loader",[`vue-skeleton-loader--${o.variant}`,{"vue-skeleton-loader--animated":o.animated}]]),style:e.normalizeStyle(t.value),role:"status","aria-label":o.ariaLabel},null,14,nt))}}),rt=(o,O)=>{const x=o.__vccOpts||o;for(const[t,p]of O)x[t]=p;return x},De=rt(at,[["__scopeId","data-v-fc92f61f"]]),it=["aria-label"],st={key:0,class:"vue-virtual-carousel__track",role:"list"},ut=["aria-label","aria-current"],ct={key:1,class:"vue-virtual-carousel__empty"},Ke=e.defineComponent({name:"VirtualCarousel",__name:"VirtualCarousel",props:{items:{},activeIndex:{default:0},slidesPerView:{default:1},slidesToScroll:{default:1},gap:{default:0},buffer:{default:1},height:{default:"auto"},itemKey:{default:void 0},ariaLabel:{default:"Carousel"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2},autoplay:{type:Boolean,default:!1},autoplayDelay:{default:3e3},autoplayLoop:{type:Boolean,default:!0},pauseOnHover:{type:Boolean,default:!0},responsive:{default:void 0}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(o,{expose:O,emit:x}){const t=o,p=x,d=e.ref(),s=e.ref(0),a=e.ref(0);let v,H=-1,L,F,W=!1;const E=e.ref(!1),{getItemKey:R}=be({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),M=e.computed(()=>Math.max(0,s.value)),b=e.computed(()=>{if(!t.responsive||t.responsive.length===0)return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap};const l=M.value,n=[...t.responsive].sort((h,w)=>w.breakpoint-h.breakpoint);for(const h of n)if(l>=h.breakpoint)return{slidesPerView:h.slidesPerView??t.slidesPerView,slidesToScroll:h.slidesToScroll??t.slidesToScroll,gap:h.gap??t.gap};return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap}}),z=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(b.value.slidesPerView)?b.value.slidesPerView:1))),K=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(b.value.slidesToScroll)?b.value.slidesToScroll:1))),N=e.computed(()=>Math.max(0,Number.isFinite(b.value.gap)?b.value.gap:0)),Q=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.buffer)?t.buffer:0))),Y=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),$=e.computed(()=>Number.isFinite(t.autoplayDelay)?Math.max(1,t.autoplayDelay):3e3),X=e.computed(()=>{if(M.value<=0)return 0;const l=(z.value-1)*N.value;return Math.max(1,(M.value-l)/z.value)}),V=e.computed(()=>X.value+N.value),U=e.computed(()=>Math.max(0,t.items.length-z.value)),D=e.computed(()=>Math.max(0,a.value-Q.value)),Z=e.computed(()=>Math.min(t.items.length,a.value+z.value+Q.value)),ee=e.computed(()=>t.items.slice(D.value,Z.value).map((l,n)=>({item:l,index:D.value+n}))),ie=e.computed(()=>t.items.length===0?0:t.items.length*X.value+(t.items.length-1)*N.value),oe=e.computed(()=>D.value*V.value),le=e.computed(()=>Math.max(0,ie.value-Z.value*V.value)),fe=e.computed(()=>({height:Ie(t.height)}));function A(l){return Math.min(U.value,Math.max(0,Math.floor(Number.isFinite(l)?l:0)))}a.value=A(t.activeIndex);function u(l){return l>=a.value&&l<Math.min(t.items.length,a.value+z.value)}function c(){if(!t.hasMore||t.loading||H===t.items.length)return;const l=t.items.length===0?-1:Math.min(t.items.length-1,a.value+z.value-1);t.items.length-1-l<=Y.value&&(H=t.items.length,p("loadMore"))}function k(l){const n=A(l);n===a.value||t.items.length===0||(a.value=n,p("update:activeIndex",n),p("change",{index:n,item:t.items[n]}),n===0&&p("reachStart"),n===U.value&&p("reachEnd"),c(),t.autoplay&&!E.value&&I())}function j(l,n={}){const h=d.value;h&&(typeof h.scrollTo=="function"?h.scrollTo({...n,left:l}):h.scrollLeft=l)}function re(l,n={}){if(t.items.length===0||V.value<=0)return;const h=A(l);F=n.behavior==="smooth"?h:void 0,k(h),j(h*V.value,{...n,behavior:n.behavior})}function g(l="smooth"){re(a.value+K.value,{behavior:l})}function B(l="smooth"){re(a.value-K.value,{behavior:l})}function I(){q(),!(!t.autoplay||t.items.length===0)&&(L=setTimeout(()=>{a.value>=U.value?t.autoplayLoop?re(0,{behavior:"smooth"}):q():g("smooth")},$.value))}function q(){L!==void 0&&(clearTimeout(L),L=void 0)}function J(){E.value=!0,t.pauseOnHover&&q()}function te(){E.value=!1,t.autoplay&&I()}function ce(){F=void 0}function P(l){if(V.value<=0||W)return;const n=l.currentTarget.scrollLeft;if(F!==void 0){const h=F*V.value;if(Math.abs(n-h)>1)return;F=void 0}k(Math.round(n/V.value))}function G(l){l.key==="ArrowRight"||l.key==="PageDown"?(l.preventDefault(),g()):l.key==="ArrowLeft"||l.key==="PageUp"?(l.preventDefault(),B()):l.key==="Home"?(l.preventDefault(),re(0,{behavior:"smooth"})):l.key==="End"&&(l.preventDefault(),re(U.value,{behavior:"auto"}))}function i(){var n;const l=((n=d.value)==null?void 0:n.clientWidth)??0;l<=0||l===s.value||(W=!0,s.value=l,e.nextTick(()=>{const h=A(a.value);j(h*V.value),W=!1}))}return e.watch(()=>t.activeIndex,async l=>{const n=A(l);n!==a.value&&(ce(),a.value=n,await e.nextTick(),j(n*V.value),c())}),e.watch(()=>[t.items.length,b.value.slidesPerView,b.value.gap,b.value.slidesToScroll],async()=>{const l=A(a.value);t.items.length===0?a.value!==0&&(a.value=0,p("update:activeIndex",0)):k(l),await e.nextTick(),j(l*V.value),c(),t.autoplay&&t.items.length>0&&!E.value&&I()}),e.watch(()=>t.responsive,()=>{e.nextTick(()=>{const l=A(a.value);j(l*V.value)})},{deep:!0}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([l])=>{l||(H=-1),await e.nextTick(),c()}),e.watch(()=>t.autoplay,l=>{l&&!E.value?I():q()}),e.watch(()=>t.autoplayDelay,()=>{t.autoplay&&!E.value&&I()}),e.watch(()=>t.autoplayLoop,l=>{!t.autoplay||E.value||(!l&&a.value>=U.value?q():I())}),e.watch(()=>t.pauseOnHover,l=>{l&&E.value?q():!l&&t.autoplay&&I()}),e.onMounted(async()=>{i(),typeof ResizeObserver<"u"&&d.value&&(v=new ResizeObserver(i),v.observe(d.value)),await e.nextTick(),j(a.value*V.value),c(),t.autoplay&&I()}),e.onBeforeUnmount(()=>{v&&(v.disconnect(),v=void 0),q()}),O({next:g,previous:B,scrollToIndex:re,startAutoplay:I,stopAutoplay:q}),(l,n)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:d,class:"vue-virtual-carousel",style:e.normalizeStyle(fe.value),role:"region","aria-roledescription":"carousel","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:P,onPointerdown:ce,onWheelPassive:ce,onKeydown:G,onMouseenter:J,onMouseleave:te},[o.items.length?(e.openBlock(),e.createElementBlock("div",st,[oe.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${oe.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ee.value,({item:h,index:w})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(R)(h,w),class:"vue-virtual-carousel__item",style:e.normalizeStyle({flexBasis:`${X.value}px`,marginRight:w<o.items.length-1?`${N.value}px`:"0px"}),role:"listitem","aria-roledescription":"slide","aria-label":`${w+1} of ${o.items.length}`,"aria-current":w===a.value?"true":void 0},[e.renderSlot(l.$slots,"default",{item:h,index:w,active:w===a.value,visible:u(w)})],12,ut))),128)),le.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${le.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",ct,[e.renderSlot(l.$slots,"empty")]))],44,it))}}),dt=["aria-label"],mt=["aria-posinset","aria-setsize"],Pe=e.defineComponent({name:"VirtualScroll",__name:"VirtualScroll",props:{items:{},itemSize:{},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:O,emit:x}){const t=o,p=x,{pulling:d,pullDistance:s,pullOffset:a,pullProgress:v,refreshMessage:H,refreshThreshold:L,handleTouchStart:F,handleTouchMove:W,handleTouchEnd:E,handleTouchCancel:R}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>p("refresh")}),M=e.ref(),b=e.ref(0),z=e.ref(0);let K,N=-1;const Q=$e(),{getItemKey:Y}=be({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),$=e.computed(()=>Math.max(1,t.itemSize)),X=e.computed(()=>Math.max(0,Math.floor(t.overscan))),V=e.computed(()=>t.items.length*$.value),U=e.computed(()=>Math.max(1,t.loadingItemSize??$.value)),D=e.computed(()=>V.value+(t.loading?U.value:0)),Z=e.computed(()=>z.value>0?z.value:typeof t.height=="number"?t.height:0),ee=e.computed(()=>Math.max(0,Math.floor(b.value/$.value)-X.value)),ie=e.computed(()=>{const g=Math.ceil((b.value+Z.value)/$.value);return Math.min(t.items.length,g+X.value)}),oe=e.computed(()=>t.items.slice(ee.value,ie.value).map((g,B)=>({item:g,index:ee.value+B}))),le=e.computed(()=>({height:Ie(t.height)})),fe=e.computed(()=>({transform:`translateY(${ee.value*$.value}px)`}));function A(){var g;z.value=((g=M.value)==null?void 0:g.clientHeight)??0,Q(M.value,t.height),e.nextTick(c)}function u(g){b.value=g.currentTarget.scrollTop,p("scroll",{scrollTop:b.value,startIndex:ee.value,endIndex:ie.value}),c()}function c(){const g=M.value;if(!g||!t.hasMore||t.loading||N===t.items.length)return;const B=Math.max(0,t.loadMoreThreshold);D.value-g.scrollTop-g.clientHeight<=B&&(N=t.items.length,p("loadMore"))}function k(g,B={}){const I=M.value;if(!I)return;const q=Math.max(0,D.value-I.clientHeight),J=Math.min(Math.max(0,Number.isFinite(g)?g:0),q),te=B.behavior??"auto";te==="auto"&&(b.value=J),I.scrollTo({...B,top:J,behavior:te})}function j(g,B={}){const I=M.value;if(!I||t.items.length===0)return;const q=Math.min(t.items.length-1,Math.max(0,Math.floor(g))),{align:J="start",...te}=B;let ce=q*$.value;J==="center"?ce-=(I.clientHeight-$.value)/2:J==="end"&&(ce-=I.clientHeight-$.value),I.scrollTo({...te,top:Math.max(0,Math.min(ce,D.value-I.clientHeight))})}function re(g="auto"){var B;(B=M.value)==null||B.scrollTo({top:0,behavior:g})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const g=M.value;if(!g)return;const B=Math.max(0,D.value-g.clientHeight);g.scrollTop>B&&(g.scrollTop=B,b.value=B),c()}),e.watch(()=>[t.hasMore,t.loading],async([g])=>{g||(N=-1),await e.nextTick(),c()}),e.onMounted(()=>{A(),typeof ResizeObserver<"u"&&M.value&&(K=new ResizeObserver(A),K.observe(M.value)),e.nextTick(c)}),e.onBeforeUnmount(()=>{K&&(K.disconnect(),K=void 0)}),O({scrollTo:k,scrollToIndex:j,scrollToTop:re}),(g,B)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:M,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(d)}]),style:e.normalizeStyle(le.value),role:"list","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:u,onTouchstartPassive:B[0]||(B[0]=(...I)=>e.unref(F)&&e.unref(F)(...I)),onTouchmove:B[1]||(B[1]=(...I)=>e.unref(W)&&e.unref(W)(...I)),onTouchend:B[2]||(B[2]=(...I)=>e.unref(E)&&e.unref(E)(...I)),onTouchcancel:B[3]||(B[3]=(...I)=>e.unref(R)&&e.unref(R)(...I))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(L)}px`,transform:`translateY(${e.unref(a)-e.unref(L)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(g.$slots,"refresh",{pullDistance:e.unref(s),progress:e.unref(v),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(H)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-scroll__spacer",style:e.normalizeStyle({height:`${D.value}px`,transform:`translateY(${e.unref(a)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(fe.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(oe.value,({item:I,index:q})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(Y)(I,q),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${$.value}px`}),role:"listitem","aria-posinset":q+1,"aria-setsize":o.items.length},[e.renderSlot(g.$slots,"default",{item:I,index:q})],12,mt))),128))],4),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${U.value}px`,transform:`translateY(${V.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(g.$slots,"loading",{},()=>[B[4]||(B[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(a)}px)`})},[e.renderSlot(g.$slots,"empty")],4))],46,dt))}}),ft=["aria-label"],vt=["aria-posinset","aria-setsize"],Ae=e.defineComponent({name:"WindowDynamicVirtualScroll",__name:"WindowDynamicVirtualScroll",props:{items:{},estimatedItemSize:{default:48},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Window dynamic virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:O,emit:x}){const t=o,p=x,d=e.ref(),s=e.ref(0),a=e.ref(0),v=e.ref(0),H=e.ref(0),L=new Map,F=new Map,W=new Map;let E,R,M,b,z=!1,K=!1,N=-1;const{getItemKey:Q}=be({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey});function Y(m){return typeof window.requestAnimationFrame=="function"?{id:window.requestAnimationFrame(m),type:"animation"}:{id:window.setTimeout(m,0),type:"timeout"}}function $(m){m&&(m.type==="animation"?window.cancelAnimationFrame(m.id):window.clearTimeout(m.id))}const{pulling:X,pullDistance:V,pullOffset:U,pullProgress:D,refreshMessage:Z,refreshThreshold:ee,handleTouchStart:ie,handleTouchMove:oe,handleTouchEnd:le,handleTouchCancel:fe}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>p("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),A=e.computed(()=>Math.max(1,t.estimatedItemSize)),u=e.computed(()=>Math.max(1,t.loadingItemSize??A.value)),c=e.computed(()=>Math.max(0,Math.floor(t.overscan))),k=e.computed(()=>{H.value;const m=new Array(t.items.length+1),S=new Array(t.items.length);m[0]=0;for(let T=0;T<t.items.length;T+=1){const ne=Q(t.items[T],T),_=L.get(ne)??A.value;S[T]=_,m[T+1]=m[T]+_}return{offsets:m,sizes:S,total:m[t.items.length]??0}}),j=e.computed(()=>k.value.total+(t.loading?u.value:0)),re=e.computed(()=>{const m=new Map;return t.items.forEach((S,T)=>{m.set(Q(S,T),T)}),m}),g=e.computed(()=>Math.max(0,s.value-v.value));function B(m){if(t.items.length===0)return 0;const S=k.value.offsets;let T=0,ne=t.items.length;for(;T<ne;){const _=Math.floor((T+ne)/2);S[_+1]<=m?T=_+1:ne=_}return Math.min(T,t.items.length-1)}const I=e.computed(()=>Math.max(0,B(g.value)-c.value)),q=e.computed(()=>{if(t.items.length===0)return 0;const m=s.value+a.value-v.value,S=Math.max(A.value,m),T=B(S)+1;return Math.min(t.items.length,T+c.value)}),J=e.computed(()=>t.items.slice(I.value,q.value).map((m,S)=>{const T=I.value+S;return{item:m,index:T,key:Q(m,T),top:k.value.offsets[T]}}));function te(){typeof window>"u"||(s.value=Math.max(0,window.scrollY),a.value=window.innerHeight,d.value&&(v.value=d.value.getBoundingClientRect().top+s.value))}function ce(){p("scroll",{scrollTop:g.value,startIndex:I.value,endIndex:q.value})}function P(m=!1){K&&(z||(z=m),!M&&(M=Y(()=>{M=void 0,te(),z&&(z=!1,ce()),l()})))}function G(){P(!0)}function i(){P()}function l(){if(typeof window>"u"||!t.hasMore||t.loading||N===t.items.length)return;const m=Math.max(0,t.loadMoreThreshold),S=v.value+j.value,T=s.value+a.value;S-T<=m&&(N=t.items.length,p("loadMore"))}function n(m){const S=m.borderBoxSize;if(S){const T=Array.isArray(S)?S[0]:S;if(T!=null&&T.blockSize)return T.blockSize}return m.contentRect.height}function h(m){const S=k.value;let T=0,ne=!1;for(const _ of m){const he=_.target,ge=F.get(he),we=n(_);if(ge===void 0||we<=0)continue;const ke=L.get(ge)??A.value;if(Math.abs(ke-we)<.5)continue;const Se=re.value.get(ge);Se!==void 0&&S.offsets[Se+1]<=g.value&&(T+=we-ke),L.set(ge,we),ne=!0}ne&&(H.value+=1,e.nextTick(()=>{if(K){if(T!==0&&typeof window<"u"){const _=Math.max(0,s.value+T);s.value=_,window.scrollTo({top:_,behavior:"auto"})}te(),l()}}))}function w(m){if(K){for(const S of m)W.set(S.target,S);b||(b=Y(()=>{b=void 0;const S=Array.from(W.values());W.clear(),h(S)}))}}function de(m,S){m instanceof HTMLElement&&(F.set(m,S),R==null||R.observe(m))}function se(){for(const[m]of F)m.isConnected||(R==null||R.unobserve(m),F.delete(m))}function ae(m,S={}){if(typeof window>"u")return;te();const T=Math.max(0,j.value-a.value),ne=Math.min(Math.max(0,Number.isFinite(m)?m:0),T),_=Math.max(0,v.value+ne),he=S.behavior??"auto";he==="auto"&&(s.value=_),window.scrollTo({...S,top:_,behavior:he})}function Te(m,S={}){if(typeof window>"u"||t.items.length===0)return;te();const T=Math.min(t.items.length-1,Math.max(0,Math.floor(m))),{align:ne="start",..._}=S,he=k.value.sizes[T];let ge=v.value+k.value.offsets[T];ne==="center"?ge-=(a.value-he)/2:ne==="end"&&(ge-=a.value-he);const we=Math.max(v.value,v.value+j.value-a.value),ke=Math.max(0,Math.min(ge,we)),Se=_.behavior??"auto";Se==="auto"&&(s.value=ke),window.scrollTo({..._,top:ke,behavior:Se})}function xe(m="auto"){typeof window>"u"||(te(),window.scrollTo({top:Math.max(0,v.value),behavior:m}))}return e.watch(()=>t.itemKey,()=>{L.clear(),H.value+=1,N=-1}),e.watch(()=>t.items.map((m,S)=>Q(m,S)),async(m,S)=>{const T=m.length!==S.length||m.some((_,he)=>_!==S[he]),ne=new Set(m);for(const _ of L.keys())ne.has(_)||L.delete(_);T&&(N=-1),H.value+=1,await e.nextTick(),K&&(te(),l())}),e.watch(()=>[t.hasMore,t.loading],async([m])=>{m||(N=-1),await e.nextTick(),K&&(te(),l())}),e.onMounted(()=>{if(K=!0,te(),window.addEventListener("scroll",G,{passive:!0}),window.addEventListener("resize",i,{passive:!0}),typeof ResizeObserver<"u"){E=new ResizeObserver(()=>{P()}),R=new ResizeObserver(w),d.value&&E.observe(d.value);for(const[m]of F)R.observe(m)}e.nextTick(()=>{K&&l()})}),e.onUpdated(se),e.onBeforeUnmount(()=>{K=!1,window.removeEventListener("scroll",G),window.removeEventListener("resize",i),$(M),$(b),M=void 0,b=void 0,z=!1,W.clear(),E&&(E.disconnect(),E=void 0),R&&(R.disconnect(),R=void 0),F.clear()}),O({scrollTo:ae,scrollToIndex:Te,scrollToTop:xe}),(m,S)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:d,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(X)}]),role:"list","aria-label":o.ariaLabel,onTouchstartPassive:S[0]||(S[0]=(...T)=>e.unref(ie)&&e.unref(ie)(...T)),onTouchmove:S[1]||(S[1]=(...T)=>e.unref(oe)&&e.unref(oe)(...T)),onTouchend:S[2]||(S[2]=(...T)=>e.unref(le)&&e.unref(le)(...T)),onTouchcancel:S[3]||(S[3]=(...T)=>e.unref(fe)&&e.unref(fe)(...T))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(ee)}px`,transform:`translateY(${e.unref(U)-e.unref(ee)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$slots,"refresh",{pullDistance:e.unref(V),progress:e.unref(D),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(Z)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${j.value}px`,transform:`translateY(${e.unref(U)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(J.value,({item:T,index:ne,key:_,top:he})=>(e.openBlock(),e.createElementBlock("div",{key:_,ref_for:!0,ref:ge=>de(ge,_),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${he}px)`}),role:"listitem","aria-posinset":ne+1,"aria-setsize":o.items.length},[e.renderSlot(m.$slots,"default",{item:T,index:ne})],12,vt))),128)),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${u.value}px`,transform:`translateY(${k.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$slots,"loading",{},()=>[S[4]||(S[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(U)}px)`})},[e.renderSlot(m.$slots,"empty")],4))],42,ft))}}),ht=["aria-label"],pt=["aria-posinset","aria-setsize"],Fe=e.defineComponent({name:"WindowGirdVirtualScroll",__name:"WindowGirdVirtualScroll",props:{items:{},itemSize:{},columns:{default:2},gap:{default:0},overscan:{default:1},itemKey:{default:void 0},ariaLabel:{default:"Window virtual grid"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:O,emit:x}){const t=o,p=x,d=e.ref(),s=e.ref(0),a=e.ref(0),v=e.ref(0);let H,L=-1;const{getItemKey:F}=be({componentName:"WindowGirdVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:W,pullDistance:E,pullOffset:R,pullProgress:M,refreshMessage:b,refreshThreshold:z,handleTouchStart:K,handleTouchMove:N,handleTouchEnd:Q,handleTouchCancel:Y}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>p("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),$=e.computed(()=>Math.max(1,t.itemSize)),X=e.computed(()=>Math.max(1,Math.floor(t.columns))),V=e.computed(()=>Math.max(0,t.gap)),U=e.computed(()=>Math.max(0,Math.floor(t.overscan))),D=e.computed(()=>Math.max(1,t.loadingItemSize??$.value)),Z=e.computed(()=>$.value+V.value),ee=e.computed(()=>Math.ceil(t.items.length/X.value)),ie=e.computed(()=>ee.value===0?0:ee.value*$.value+(ee.value-1)*V.value),oe=e.computed(()=>ie.value+(t.items.length?V.value:0)),le=e.computed(()=>ie.value+(t.loading?D.value+(t.items.length?V.value:0):0)),fe=e.computed(()=>Math.max(0,s.value-v.value)),A=e.computed(()=>Math.max(0,Math.floor(fe.value/Z.value)-U.value)),u=e.computed(()=>{if(ee.value===0)return 0;const P=Math.max($.value,s.value+a.value-v.value),G=Math.ceil((P+V.value)/Z.value);return Math.min(ee.value,G+U.value)}),c=e.computed(()=>Math.min(t.items.length,A.value*X.value)),k=e.computed(()=>Math.min(t.items.length,u.value*X.value)),j=e.computed(()=>t.items.slice(c.value,k.value).map((P,G)=>{const i=c.value+G;return{item:P,index:i,key:F(P,i),rowIndex:Math.floor(i/X.value),columnIndex:i%X.value}})),re=e.computed(()=>({gridTemplateColumns:`repeat(${X.value}, minmax(0, 1fr))`,columnGap:`${V.value}px`,rowGap:`${V.value}px`,transform:`translateY(${A.value*Z.value}px)`}));function g(){typeof window>"u"||(s.value=Math.max(0,window.scrollY),a.value=window.innerHeight,d.value&&(v.value=d.value.getBoundingClientRect().top+s.value))}function B(){p("scroll",{scrollTop:fe.value,startIndex:c.value,endIndex:k.value})}function I(){g(),B(),q()}function q(){if(typeof window>"u"||!t.hasMore||t.loading||L===t.items.length)return;const P=Math.max(0,t.loadMoreThreshold),G=v.value+le.value,i=s.value+a.value;G-i<=P&&(L=t.items.length,p("loadMore"))}function J(P,G={}){if(typeof window>"u")return;g();const i=Math.max(0,le.value-a.value),l=Math.min(Math.max(0,Number.isFinite(P)?P:0),i),n=Math.max(0,v.value+l),h=G.behavior??"auto";h==="auto"&&(s.value=n),window.scrollTo({...G,top:n,behavior:h})}function te(P,G={}){if(typeof window>"u"||t.items.length===0)return;g();const i=Math.min(t.items.length-1,Math.max(0,Math.floor(P))),l=Math.floor(i/X.value),{align:n="start",...h}=G;let w=v.value+l*Z.value;n==="center"?w-=(a.value-$.value)/2:n==="end"&&(w-=a.value-$.value);const de=Math.max(v.value,v.value+le.value-a.value),se=Math.max(0,Math.min(w,de)),ae=h.behavior??"auto";ae==="auto"&&(s.value=se),window.scrollTo({...h,top:se,behavior:ae})}function ce(P="auto"){typeof window>"u"||(g(),window.scrollTo({top:Math.max(0,v.value),behavior:P}))}return e.watch(()=>[t.items.length,t.itemSize,t.columns,t.gap],async()=>{await e.nextTick(),g(),q()}),e.watch(()=>[t.hasMore,t.loading],async([P])=>{P||(L=-1),await e.nextTick(),g(),q()}),e.onMounted(()=>{g(),window.addEventListener("scroll",I,{passive:!0}),window.addEventListener("resize",I,{passive:!0}),typeof ResizeObserver<"u"&&(H=new ResizeObserver(()=>{g(),q()}),d.value&&H.observe(d.value)),e.nextTick(q)}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",I),window.removeEventListener("resize",I),H&&(H.disconnect(),H=void 0)}),O({scrollTo:J,scrollToIndex:te,scrollToTop:ce}),(P,G)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:d,class:e.normalizeClass(["vue-window-gird-virtual-scroll",{"vue-window-gird-virtual-scroll--pulling":e.unref(W)}]),role:"list","aria-label":o.ariaLabel,onTouchstartPassive:G[0]||(G[0]=(...i)=>e.unref(K)&&e.unref(K)(...i)),onTouchmove:G[1]||(G[1]=(...i)=>e.unref(N)&&e.unref(N)(...i)),onTouchend:G[2]||(G[2]=(...i)=>e.unref(Q)&&e.unref(Q)(...i)),onTouchcancel:G[3]||(G[3]=(...i)=>e.unref(Y)&&e.unref(Y)(...i))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(z)}px`,transform:`translateY(${e.unref(R)-e.unref(z)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(P.$slots,"refresh",{pullDistance:e.unref(E),progress:e.unref(M),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(b)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-gird-virtual-scroll__spacer",style:e.normalizeStyle({height:`${le.value}px`,transform:`translateY(${e.unref(R)}px)`})},[e.createElementVNode("div",{class:"vue-window-gird-virtual-scroll__content",style:e.normalizeStyle(re.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(j.value,({item:i,index:l,key:n,rowIndex:h,columnIndex:w})=>(e.openBlock(),e.createElementBlock("div",{key:n,class:"vue-window-gird-virtual-scroll__item",style:e.normalizeStyle({height:`${$.value}px`}),role:"listitem","aria-posinset":l+1,"aria-setsize":o.items.length},[e.renderSlot(P.$slots,"default",{item:i,index:l,rowIndex:h,columnIndex:w})],12,pt))),128))],4),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__loading",style:e.normalizeStyle({height:`${D.value}px`,transform:`translateY(${oe.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(P.$slots,"loading",{},()=>[G[4]||(G[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-gird-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(R)}px)`})},[e.renderSlot(P.$slots,"empty")],4))],42,ht))}}),We=Ce,Ye={install(o){o.component("ChatVirtualScroll",Oe),o.component("DynamicVirtualScroll",Ce),o.component("ShortMediaFeed",Ne),o.component("SkeletonLoader",De),o.component("VirtualCarousel",Ke),o.component("VirtualList",We),o.component("VirtualScroll",Pe),o.component("WindowDynamicVirtualScroll",Ae),o.component("WindowGirdVirtualScroll",Fe)}};exports.ChatVirtualScroll=Oe;exports.DynamicVirtualScroll=Ce;exports.ShortMediaFeed=Ne;exports.SkeletonLoader=De;exports.VirtualCarousel=Ke;exports.VirtualList=We;exports.VirtualScroll=Pe;exports.VueVirtualScroll=Ye;exports.WindowDynamicVirtualScroll=Ae;exports.WindowGirdVirtualScroll=Fe;exports.default=Ye;
|
|
1
|
+
"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;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.vue-skeleton-loader[data-v-fc92f61f]{position:relative;flex-shrink:0;overflow:hidden;box-sizing:border-box;background:var(--skeleton-background, #e2e8f0)}.vue-skeleton-loader--rounded[data-v-fc92f61f]{border-radius:var(--skeleton-radius, 8px)}.vue-skeleton-loader--circle[data-v-fc92f61f]{border-radius:50%}.vue-skeleton-loader--animated[data-v-fc92f61f]:after{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,var(--skeleton-highlight, rgb(255 255 255 / 60%)),transparent);transform:translate(-100%);animation:skeleton-shimmer-fc92f61f 1.5s ease-in-out infinite;content:""}@keyframes skeleton-shimmer-fc92f61f{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.vue-skeleton-loader--animated[data-v-fc92f61f]:after{animation:none;content:none}}.vue-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-dynamic-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-window-dynamic-virtual-scroll,.vue-window-gird-virtual-scroll{position:relative;width:100%;box-sizing:border-box;overflow-anchor:none}.vue-chat-virtual-scroll{display:flex;flex-direction:column-reverse;position:relative;width:100%;overflow:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-short-media-feed{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;overscroll-behavior:contain;overflow-anchor:none;scroll-snap-type:y mandatory;scrollbar-width:none;touch-action:pan-y;-webkit-overflow-scrolling:touch}.vue-short-media-feed::-webkit-scrollbar{display:none}.vue-short-media-feed__item{position:relative;width:100%;min-height:1px;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-short-media-feed__spacer{width:100%;pointer-events:none}.vue-short-media-feed__empty{width:100%;height:100%}.vue-virtual-carousel{position:relative;width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;box-sizing:border-box;overscroll-behavior-x:contain;overflow-anchor:none;scroll-snap-type:x mandatory;scrollbar-width:none;touch-action:pan-
|
|
1
|
+
.vue-skeleton-loader[data-v-fc92f61f]{position:relative;flex-shrink:0;overflow:hidden;box-sizing:border-box;background:var(--skeleton-background, #e2e8f0)}.vue-skeleton-loader--rounded[data-v-fc92f61f]{border-radius:var(--skeleton-radius, 8px)}.vue-skeleton-loader--circle[data-v-fc92f61f]{border-radius:50%}.vue-skeleton-loader--animated[data-v-fc92f61f]:after{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,var(--skeleton-highlight, rgb(255 255 255 / 60%)),transparent);transform:translate(-100%);animation:skeleton-shimmer-fc92f61f 1.5s ease-in-out infinite;content:""}@keyframes skeleton-shimmer-fc92f61f{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.vue-skeleton-loader--animated[data-v-fc92f61f]:after{animation:none;content:none}}.vue-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-dynamic-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-window-dynamic-virtual-scroll,.vue-window-gird-virtual-scroll{position:relative;width:100%;box-sizing:border-box;overflow-anchor:none}.vue-chat-virtual-scroll__root{position:relative;width:100%;min-height:0;box-sizing:border-box}.vue-chat-virtual-scroll{display:flex;flex-direction:column-reverse;position:relative;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;touch-action:pan-y pinch-zoom;-webkit-overflow-scrolling:touch}.vue-chat-virtual-scroll--contained{contain:layout paint}.vue-short-media-feed{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;overscroll-behavior:contain;overflow-anchor:none;scroll-snap-type:y mandatory;scrollbar-width:none;touch-action:pan-y;-webkit-overflow-scrolling:touch}.vue-short-media-feed::-webkit-scrollbar{display:none}.vue-short-media-feed__item{position:relative;width:100%;min-height:1px;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-short-media-feed__spacer{width:100%;pointer-events:none}.vue-short-media-feed__empty{width:100%;height:100%}.vue-virtual-carousel{contain:layout paint;position:relative;width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;box-sizing:border-box;overscroll-behavior-x:contain;overflow-anchor:none;scroll-snap-type:x mandatory;scrollbar-width:none;touch-action:pan-y pinch-zoom;-webkit-overflow-scrolling:touch}.vue-virtual-carousel::-webkit-scrollbar{display:none}.vue-virtual-carousel--mouse-drag{cursor:grab}.vue-virtual-carousel--controlled{scroll-snap-type:none}.vue-virtual-carousel--dragging{scroll-snap-type:none;-webkit-user-select:none;user-select:none}.vue-virtual-carousel--mouse-drag.vue-virtual-carousel--dragging{cursor:grabbing}.vue-virtual-carousel__track{position:relative;display:flex;align-items:stretch;width:max-content;min-width:100%;height:100%}.vue-virtual-carousel__item{position:relative;flex-grow:0;flex-shrink:0;min-width:1px;height:100%;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-virtual-carousel__spacer{position:absolute;flex-grow:0;flex-shrink:0;width:0;pointer-events:none}.vue-virtual-carousel__empty{width:100%;height:100%}.vue-virtual-scroll__spacer{position:relative;width:100%;pointer-events:none}.vue-virtual-scroll__content{position:absolute;inset:0 0 auto;width:100%;will-change:transform;pointer-events:auto}.vue-virtual-scroll__item{width:100%;overflow:hidden;box-sizing:border-box}.vue-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll__spacer,.vue-window-gird-virtual-scroll__spacer{position:relative;width:100%}.vue-window-gird-virtual-scroll__content{position:absolute;inset:0 0 auto;display:grid;width:100%;box-sizing:border-box;will-change:transform}.vue-window-gird-virtual-scroll__item{min-width:0;overflow:hidden;box-sizing:border-box}.vue-chat-virtual-scroll__spacer{flex:0 0 auto;overflow:hidden;overflow:clip;position:relative;width:100%}.vue-dynamic-virtual-scroll__item,.vue-window-dynamic-virtual-scroll__item{position:absolute;inset:0 0 auto;display:flow-root;width:100%;box-sizing:border-box;will-change:transform}.vue-chat-virtual-scroll__item{position:absolute;inset:auto 0 0;display:flow-root;width:100%;box-sizing:border-box;will-change:transform}.vue-chat-virtual-scroll__loading-older{width:100%;position:sticky;top:0;z-index:2;height:0;color:#64748b;font-size:.875rem;font-weight:600;text-align:center;pointer-events:none}.vue-chat-virtual-scroll__loading-older>div{display:inline-flex;align-items:center;justify-content:center;min-height:2.5rem;padding:0 1rem;background:#ffffffeb;border-radius:999px;box-shadow:0 2px 12px #0f172a1a}.vue-chat-virtual-scroll__new-items{position:absolute;right:0;bottom:.75rem;left:0;z-index:3;display:flex;justify-content:center;pointer-events:none}.vue-chat-virtual-scroll__new-items button{min-height:2.5rem;padding:.5rem 1rem;color:#fff;font:inherit;font-size:.875rem;font-weight:600;background:#2563eb;border:0;border-radius:999px;box-shadow:0 4px 16px #0f172a33;cursor:pointer;pointer-events:auto}.vue-virtual-scroll__loading,.vue-dynamic-virtual-scroll__loading,.vue-window-dynamic-virtual-scroll__loading,.vue-window-gird-virtual-scroll__loading{position:absolute;inset:0 0 auto;display:flex;align-items:center;justify-content:center;width:100%;padding:.75rem;color:#64748b;box-sizing:border-box}.vue-virtual-scroll__refresh,.vue-dynamic-virtual-scroll__refresh,.vue-window-dynamic-virtual-scroll__refresh,.vue-window-gird-virtual-scroll__refresh{position:absolute;inset:0 0 auto;z-index:1;display:flex;align-items:center;justify-content:center;width:100%;color:#475569;font-size:.875rem;font-weight:600;box-sizing:border-box;pointer-events:none;transition:transform .18s ease}.vue-virtual-scroll__spacer,.vue-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll__spacer,.vue-window-gird-virtual-scroll__spacer,.vue-virtual-scroll__empty,.vue-dynamic-virtual-scroll__empty,.vue-window-dynamic-virtual-scroll__empty,.vue-window-gird-virtual-scroll__empty{transition:transform .18s ease}.vue-virtual-scroll--pulling .vue-virtual-scroll__refresh,.vue-virtual-scroll--pulling .vue-virtual-scroll__spacer,.vue-virtual-scroll--pulling .vue-virtual-scroll__empty,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__refresh,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__spacer,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__empty,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__refresh,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__empty,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__refresh,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__spacer,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__empty{transition:none}
|