vue-virtual-flow 0.0.8 → 0.1.0
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 +98 -0
- package/README.md +99 -12
- package/README.vi.md +91 -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 +15 -2
- package/dist/components/VirtualCarousel.d.ts +15 -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 +40 -0
- package/dist/composables/useCarouselInteraction.d.ts +40 -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 +46 -0
- package/dist/types.d.ts +46 -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 +2193 -1510
- 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,25 @@ export interface VirtualCarouselProps<T> {
|
|
|
116
136
|
autoplayDelay?: number;
|
|
117
137
|
autoplayLoop?: boolean;
|
|
118
138
|
pauseOnHover?: boolean;
|
|
139
|
+
mouseDrag?: boolean;
|
|
140
|
+
dragThreshold?: number;
|
|
141
|
+
momentum?: boolean;
|
|
142
|
+
settleDuration?: number;
|
|
143
|
+
/** Disable native snap for nested snap containers; the motion controller settles instead. */
|
|
144
|
+
nativeSnap?: boolean;
|
|
145
|
+
autoWidth?: boolean;
|
|
146
|
+
estimatedItemWidth?: number;
|
|
147
|
+
rtl?: boolean;
|
|
148
|
+
/** Continuous looping; distinct from autoplayLoop's rewind behavior. */
|
|
149
|
+
loop?: boolean;
|
|
150
|
+
keepAlive?: boolean;
|
|
151
|
+
/** Maximum additional off-screen slides retained by keepAlive. */
|
|
152
|
+
maxCachedItems?: number;
|
|
153
|
+
/** Slides to retain, capped by maxCachedItems. */
|
|
154
|
+
pinnedIndexes?: readonly number[];
|
|
119
155
|
responsive?: ResponsiveBreakpoint[];
|
|
120
156
|
}
|
|
157
|
+
export type CarouselInteractionPhase = 'idle' | 'pending' | 'dragging' | 'settling' | 'committing';
|
|
121
158
|
export interface ResponsiveBreakpoint {
|
|
122
159
|
breakpoint: number;
|
|
123
160
|
slidesPerView?: number;
|
|
@@ -143,6 +180,15 @@ export interface VirtualScrollExpose {
|
|
|
143
180
|
}
|
|
144
181
|
export interface ChatVirtualScrollExpose extends VirtualScrollExpose {
|
|
145
182
|
readonly isAtBottom: boolean;
|
|
183
|
+
readonly isScrolling: boolean;
|
|
184
|
+
readonly newItemsCount: number;
|
|
185
|
+
clearNewItems: () => void;
|
|
186
|
+
/** Reconcile keys and measurements after an in-place items mutation. */
|
|
187
|
+
refresh: () => void;
|
|
188
|
+
getScrollPosition: () => number;
|
|
189
|
+
scrollToKey: (key: PropertyKey, options?: ScrollToOptions & {
|
|
190
|
+
align?: ScrollAlignment;
|
|
191
|
+
}) => void;
|
|
146
192
|
scrollToBottom: (behavior?: ScrollBehavior) => void;
|
|
147
193
|
}
|
|
148
194
|
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 Ue(o){return typeof o=="string"||typeof o=="number"||typeof o=="symbol"}function Le(o,C){const x=o[C];return Ue(x)?x:void 0}function _e(o){return Le(o,"id")??Le(o,"key")}function be(o){function C(t,v){const u=o.itemKey();if(typeof u=="function")return u(t,v);if(t!==null&&typeof t=="object"){if(u!==void 0){const a=Le(t,u);if(a!==void 0)return a}const s=_e(t);if(s!==void 0)return s}return v}function x(){}return e.watch(()=>[o.itemKey(),o.items()],x,{immediate:!0}),{getItemKey:C}}function Ie(o){return o==="fill"?"100%":typeof o=="number"?`${o}px`:o}function $e(o){return(C,x)=>{typeof x=="string"&&(x==="fill"||x.trim().endsWith("%"))}}function je(o){const C=Float64Array.from(o),x=C.length,t=new Float64Array(x+1);let v=0;for(let s=1;s<=x;s+=1){const a=C[s-1];v+=a,t[s]+=a;const m=s+(s&-s);m<=x&&(t[m]+=t[s])}let u=1;for(;u*2<=x;)u*=2;return{length:x,get total(){return v},getSize(s){return C[s]},getOffset(s){let a=0;for(let m=s;m>0;m-=m&-m)a+=t[m];return a},setSize(s,a){const m=a-C[s];if(m!==0){C[s]=a,v+=m;for(let L=s+1;L<=x;L+=L&-L)t[L]+=m}},findIndex(s){if(x===0||s<=0)return 0;if(s>=v)return x-1;let a=0,m=0;for(let L=u;L>0;L=Math.floor(L/2)){const R=a+L;R<=x&&m+t[R]<=s&&(a=R,m+=t[R])}return Math.min(a,x-1)}}}const Ge=["aria-label"],qe={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},Ze=["aria-posinset","aria-setsize"],Ne=e.defineComponent({name:"ChatVirtualScroll",__name:"ChatVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:5},size:{default:void 0},itemKey:{default:void 0},ariaLabel:{default:"Chat messages"},stickToBottom:{type:Boolean,default:!0},bottomThreshold:{default:80},initialScroll:{default:"bottom"},hasOlder:{type:Boolean,default:!1},loadingOlder:{type:Boolean,default:!1},loadOlderThreshold:{default:120}},emits:["scroll","loadOlder","bottomChange"],setup(o,{expose:C,emit:x}){const t=o,v=x,u=e.ref(),s=e.ref(0),a=e.ref(0),m=e.ref(0),L=e.ref(0),R=e.ref(!0),_=new Map,j=new Map,E=new Set;let z,p,k=-1,P=!1,D=!1,H=!1,X,K=0,b=!1,q=0,$,J,F,ee=0;const le=$e(),{getItemKey:g}=be({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),M=e.computed(()=>Number.isFinite(t.estimatedItemSize)?Math.max(1,t.estimatedItemSize):48),W=e.computed(()=>Math.max(0,Math.floor(t.overscan))),re=e.computed(()=>t.size!==void 0&&Number.isFinite(t.size)&&t.size>0?Math.max(1,Math.floor(t.size)):void 0),G=e.computed(()=>m.value>0?m.value:typeof t.height=="number"?Math.max(0,t.height):M.value),oe=e.computed(()=>{const r=t.items.map((d,y)=>g(d,y));return{keys:r,indexes:new Map(r.map((d,y)=>[d,y])),sizes:je(r.map(d=>_.get(d)??M.value))}}),N=e.computed(()=>(L.value,{sizes:oe.value.sizes,total:oe.value.sizes.total}));function O(r=N.value.total){return Math.max(0,r-G.value)}function ne(r){return N.value.sizes.findIndex(r)}s.value=t.initialScroll==="bottom"?O():0;const se=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const r=ne(s.value),d=ne(s.value+G.value)+1,y=Math.max(0,r-W.value),V=Math.min(t.items.length,d+W.value),ce=re.value;if(ce===void 0||V-y<=ce)return{start:y,end:V};const fe=Math.max(0,ce-(d-r)),ve=r-y,pe=V-d;let Me=Math.min(ve,Math.ceil(fe/2));const ye=Math.min(pe,fe-Me);return Me=Math.min(ve,fe-ye),{start:r-Me,end:d+ye}}),h=e.computed(()=>se.value.start),B=e.computed(()=>se.value.end),I=e.computed(()=>t.items.slice(h.value,B.value).map((r,d)=>{const y=h.value+d;return{item:r,index:y,key:g(r,y),bottom:Math.max(N.value.total,G.value)-N.value.sizes.getOffset(y+1)+a.value}})),Z=e.computed(()=>({height:Ie(t.height)}));function Q(r=N.value.total){var V;const d=O(r),y=Math.min(0,((V=u.value)==null?void 0:V.scrollTop)??0);return Math.max(0,Math.min(d,d+y+K))}function te(r=!1){if(b||(H||F)&&!r||K===0)return;b=!0;const d=ee,y=++q;a.value=0,e.nextTick(()=>{if(y!==q)return;b=!1;const V=u.value;!V||d!==ee||K===0||(K=0,V.scrollTop=Math.min(0,s.value-O()),J=V.scrollTop,s.value=Q(),w(),ie())})}function de(r){const d=u.value;if(d){if(K+=r,s.value=Q(),K===0||O()===0){K=0,a.value=0;return}(H||F)&&!b?(a.value=K,d.scrollTop>=-1&&te(!0)):te()}}function A(){clearTimeout(X),X=void 0}function U(){if(D)return;A(),H=!1;const r=F;if(F=void 0,r){r();return}s.value=Q(),te()}function i(){A(),(H||F)&&!D&&(X=setTimeout(U,150))}function l(){$=void 0,F=void 0}function n(){l(),A(),D=!0,H=!0,a.value=K}function f(r){D=r.touches.length>0,i()}function w(){const r=u.value;if(!r)return;const y=Math.max(0,N.value.total-Q()-r.clientHeight)<=Math.max(0,t.bottomThreshold);y!==R.value&&(R.value=y,P&&v("bottomChange",y))}function me(){var r;m.value=((r=u.value)==null?void 0:r.clientHeight)??0,P&&(s.value=Q()),le(u.value,t.height),e.nextTick(()=>{w(),ie()})}function ue(){var r,d;$&&J!==void 0&&Math.abs((((r=u.value)==null?void 0:r.scrollTop)??0)-J)>1&&l(),s.value=Q(),K!==0&&(((d=u.value)==null?void 0:d.scrollTop)??0)>=-1&&te(!0),i(),w(),v("scroll",{scrollTop:s.value,startIndex:h.value,endIndex:B.value}),ie()}function ie(){const r=u.value;!P||!r||!t.hasOlder||t.loadingOlder||k===t.items.length||Q()<=Math.max(0,t.loadOlderThreshold)&&(k=t.items.length,v("loadOlder"))}function Te(r){const d=r.borderBoxSize;if(d){const y=Array.isArray(d)?d[0]:d;if(y!=null&&y.blockSize)return y.blockSize}return r.contentRect.height}function xe(r){const d=N.value.total,y=Q(),V=!H&&!F&&R.value&&t.stickToBottom&&(P||t.initialScroll==="bottom"),ce=ne(y+G.value-1),fe=!V&&y<=0;let ve=0,pe=!1;for(const{key:Re,height:ze}of r){if(!Number.isFinite(ze)||ze<=0)continue;const Ee=oe.value.indexes.get(Re);if(Ee===void 0)continue;const He=N.value.sizes.getSize(Ee);_.set(Re,ze),!(Math.abs(He-ze)<.5)&&(Ee<=ce&&(ve+=ze-He),N.value.sizes.setSize(Ee,ze),pe=!0)}if(!pe)return;L.value+=1;const Me=O()-O(d),ye=$&&oe.value.indexes.get($.key),Be=ye!==void 0&&$?ge(ye,$.align):V?O():fe?0:y+ve;de(Be-y-Me),e.nextTick(w)}function c(r){const d=[];for(const y of r){const V=j.get(y.target);V!==void 0&&d.push({key:V,height:Te(y)})}xe(d)}function S(){const r=[];for(const d of E){const y=j.get(d);y!==void 0&&d.isConnected&&r.push({key:y,height:d.getBoundingClientRect().height})}E.clear(),xe(r)}function T(r,d){r instanceof HTMLElement&&j.get(r)!==d&&(j.set(r,d),_.has(d)||E.add(r),p==null||p.observe(r))}function ae(){for(const[r]of j)r.isConnected||(p==null||p.unobserve(r),j.delete(r),E.delete(r))}function Y(r,d,y=!1){const V=u.value;if(!V)return;const ce=Q(),fe=a.value!==0,ve=++ee;q+=1,b=!1,$=void 0;const pe=d.behavior??"auto";F=pe==="smooth"?()=>he(r):void 0,K=0,a.value=0,H=!1,A(),pe==="auto"&&(s.value=r);const Me=()=>{u.value!==V||ve!==ee||(fe&&pe!=="auto"&&(V.scrollTop=ce-O()),y&&pe==="auto"?V.scrollTop=r-O():V.scrollTo({...d,top:r-O(),behavior:pe}),J=V.scrollTop,pe==="auto"?s.value=Q():i(),e.nextTick(w))};fe?e.nextTick(Me):Me()}function he(r,d={}){const y=u.value;if(!y)return;const V=Math.max(0,N.value.total-y.clientHeight),ce=Math.min(Math.max(0,Number.isFinite(r)?r:0),V);Y(ce,d)}function ge(r,d){const y=N.value.sizes.getSize(r);let V=N.value.sizes.getOffset(r);return d==="center"?V-=(G.value-y)/2:d==="end"&&(V-=G.value-y),Math.max(0,Math.min(V,O()))}function we(r,d={}){if(!u.value||t.items.length===0)return;const y=Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(r)?r:0))),{align:V="start",...ce}=d;Y(ge(y,V),ce);const fe=oe.value.keys[y];d.behavior==="smooth"?F=()=>{const ve=oe.value.indexes.get(fe);ve!==void 0&&we(ve,{align:V})}:$={key:fe,align:V}}function ke(r="auto"){Y(0,{behavior:r})}function Se(r="auto"){const d=u.value;if(!d)return;const y=Math.max(0,N.value.total-d.clientHeight);Y(y,{behavior:r},!0),r==="smooth"&&(F=()=>Se())}return e.watch(oe,async(r,d)=>{const y=d.sizes.total,V=Q(y),ce=!H&&!F&&R.value&&t.stickToBottom,fe=d.sizes.findIndex(V+G.value-1),ve=d.keys[fe],pe=ve===void 0?void 0:r.indexes.get(ve),Me=O()-O(y);for(const ye of _.keys())r.indexes.has(ye)||_.delete(ye);if(r.keys.length===0||pe===void 0){K=0,a.value=0,s.value=ce?O():Math.min(V,O());const ye=s.value,Be=ee;await e.nextTick(),Be===ee&&oe.value===r&&Y(ye,{},!0)}else{const ye=r.sizes.getOffset(pe+1)-d.sizes.getOffset(fe+1),Be=ce?O():V+ye;de(Be-V-Me),await e.nextTick()}u.value&&(s.value=Q(),w(),ie())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([r])=>{r||(k=-1),await e.nextTick(),ie()}),e.onMounted(()=>{if(me(),u.value&&(u.value.scrollTop=t.initialScroll==="bottom"?0:-O(),s.value=Q()),S(),typeof ResizeObserver<"u"){z=new ResizeObserver(me),p=new ResizeObserver(c),u.value&&z.observe(u.value);for(const[r]of j)p.observe(r)}e.nextTick(()=>{P=!0,w(),ie()})}),e.onUpdated(()=>{ae(),S()}),e.onBeforeUnmount(()=>{P=!1,A(),l(),K=0,ee+=1,q+=1,z&&(z.disconnect(),z=void 0),p&&(p.disconnect(),p=void 0),j.clear(),E.clear()}),C({isAtBottom:R,scrollTo:he,scrollToIndex:we,scrollToTop:ke,scrollToBottom:Se}),(r,d)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:u,class:"vue-chat-virtual-scroll",style:e.normalizeStyle(Z.value),role:"log","aria-label":o.ariaLabel,"aria-live":"polite",tabindex:"0",onScrollPassive:ue,onScrollendPassive:U,onPointerdownPassive:l,onWheelPassive:l,onKeydown:l,onTouchstartPassive:n,onTouchendPassive:f,onTouchcancelPassive:f},[e.createElementVNode("div",{class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${Math.max(G.value,N.value.total+a.value)}px`})},[o.loadingOlder?(e.openBlock(),e.createElementBlock("div",qe,[e.createElementVNode("div",null,[e.renderSlot(r.$slots,"loadingOlder",{},()=>[d[0]||(d[0]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,({item:y,index:V,key:ce,bottom:fe})=>(e.openBlock(),e.createElementBlock("div",{key:ce,ref_for:!0,ref:ve=>T(ve,ce),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${-fe}px)`}),role:"article","aria-posinset":V+1,"aria-setsize":o.items.length},[e.renderSlot(r.$slots,"default",{item:y,index:V})],12,Ze))),128)),o.items.length?e.createCommentVNode("",!0):e.renderSlot(r.$slots,"empty",{},void 0,void 0,1)],4)],44,Ge))}});function Ve(o){const C=e.ref(),x=e.ref(0),t=e.ref(!1),v=e.ref(!1),u=e.computed(()=>Math.max(1,o.threshold())),s=e.computed(()=>o.refreshing()||v.value?u.value:x.value),a=e.computed(()=>Math.min(1,x.value/u.value)),m=e.computed(()=>o.refreshing()||v.value?"Refreshing…":a.value>=1?"Release to refresh":"Pull to refresh");function L(){C.value=void 0,t.value=!1,x.value=0}function R(E){var k;const z=E.currentTarget,p=((k=o.scrollTop)==null?void 0:k.call(o))??z.scrollTop;!o.enabled()||o.refreshing()||p>0||E.touches.length!==1||(C.value=E.touches[0].clientY,t.value=!0)}function _(E){var P;if(C.value===void 0||!t.value)return;const z=E.currentTarget;if((((P=o.scrollTop)==null?void 0:P.call(o))??z.scrollTop)>0||E.touches.length!==1){L();return}const k=E.touches[0].clientY-C.value;if(k<=0){x.value=0;return}E.preventDefault(),x.value=Math.min(k*.5,u.value*2)}function j(){if(C.value===void 0)return;const E=x.value>=u.value&&o.enabled()&&!o.refreshing();if(C.value=void 0,t.value=!1,!E){x.value=0;return}x.value=u.value,v.value=!0,o.onRefresh(),e.nextTick(()=>{o.refreshing()||(v.value=!1,x.value=0)})}return e.watch(()=>o.refreshing(),(E,z)=>{E?(v.value=!1,x.value=u.value):z&&(v.value=!1,x.value=0)}),{pulling:t,pullDistance:x,pullOffset:s,pullProgress:a,refreshMessage:m,refreshThreshold:u,handleTouchStart:R,handleTouchMove:_,handleTouchEnd:j,handleTouchCancel:L}}const Je=["aria-label"],Qe=["aria-posinset","aria-setsize"],Ce=e.defineComponent({name:"DynamicVirtualScroll",__name:"DynamicVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Dynamic virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:C,emit:x}){const t=o,v=x,{pulling:u,pullDistance:s,pullOffset:a,pullProgress:m,refreshMessage:L,refreshThreshold:R,handleTouchStart:_,handleTouchMove:j,handleTouchEnd:E,handleTouchCancel:z}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>v("refresh")}),p=e.ref(),k=e.ref(0),P=e.ref(0),D=e.ref(0),H=new Map,X=new Map;let K,b,q=-1;const $=$e(),{getItemKey:J}=be({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),F=e.computed(()=>Math.max(1,t.estimatedItemSize)),ee=e.computed(()=>Math.max(1,t.loadingItemSize??F.value)),le=e.computed(()=>Math.max(0,Math.floor(t.overscan))),g=e.computed(()=>P.value>0?P.value:typeof t.height=="number"?Math.max(0,t.height):F.value),M=e.computed(()=>{D.value;const i=new Array(t.items.length+1),l=new Array(t.items.length);i[0]=0;for(let n=0;n<t.items.length;n+=1){const f=J(t.items[n],n),w=H.get(f)??F.value;l[n]=w,i[n+1]=i[n]+w}return{offsets:i,sizes:l,total:i[t.items.length]??0}}),W=e.computed(()=>M.value.total+(t.loading?ee.value:0)),re=e.computed(()=>{const i=new Map;return t.items.forEach((l,n)=>{i.set(J(l,n),n)}),i});function G(i){if(t.items.length===0)return 0;const l=M.value.offsets;let n=0,f=t.items.length;for(;n<f;){const w=Math.floor((n+f)/2);l[w+1]<=i?n=w+1:f=w}return Math.min(n,t.items.length-1)}const oe=e.computed(()=>Math.max(0,G(k.value)-le.value)),N=e.computed(()=>{if(t.items.length===0)return 0;const i=G(k.value+g.value)+1;return Math.min(t.items.length,i+le.value)}),O=e.computed(()=>t.items.slice(oe.value,N.value).map((i,l)=>{const n=oe.value+l;return{item:i,index:n,key:J(i,n),top:M.value.offsets[n]}})),ne=e.computed(()=>({height:Ie(t.height)}));function se(){var i;P.value=((i=p.value)==null?void 0:i.clientHeight)??0,$(p.value,t.height),e.nextTick(B)}function h(i){k.value=i.currentTarget.scrollTop,v("scroll",{scrollTop:k.value,startIndex:oe.value,endIndex:N.value}),B()}function B(){const i=p.value;if(!i||!t.hasMore||t.loading||q===t.items.length)return;const l=Math.max(0,t.loadMoreThreshold);W.value-i.scrollTop-i.clientHeight<=l&&(q=t.items.length,v("loadMore"))}function I(i){const l=i.borderBoxSize;if(l){const n=Array.isArray(l)?l[0]:l;if(n!=null&&n.blockSize)return n.blockSize}return i.contentRect.height}function Z(i){const l=M.value;let n=0,f=!1;for(const w of i){const me=w.target,ue=X.get(me),ie=I(w);if(ue===void 0||ie<=0)continue;const Te=H.get(ue)??F.value;if(Math.abs(Te-ie)<.5)continue;const xe=re.value.get(ue);xe!==void 0&&l.offsets[xe+1]<=k.value&&(n+=ie-Te),H.set(ue,ie),f=!0}f&&(D.value+=1,e.nextTick(B),n!==0&&e.nextTick(()=>{const w=p.value;w&&(w.scrollTop+=n,k.value=w.scrollTop)}))}function Q(i,l){i instanceof HTMLElement&&(X.set(i,l),b==null||b.observe(i))}function te(){for(const[i]of X)i.isConnected||(b==null||b.unobserve(i),X.delete(i))}function de(i,l={}){const n=p.value;if(!n)return;const f=Math.max(0,W.value-n.clientHeight),w=Math.min(Math.max(0,Number.isFinite(i)?i:0),f),me=l.behavior??"auto";me==="auto"&&(k.value=w),n.scrollTo({...l,top:w,behavior:me})}function A(i,l={}){const n=p.value;if(!n||t.items.length===0)return;const f=Math.min(t.items.length-1,Math.max(0,Math.floor(i))),{align:w="start",...me}=l;let ue=M.value.offsets[f];const ie=M.value.sizes[f];w==="center"?ue-=(n.clientHeight-ie)/2:w==="end"&&(ue-=n.clientHeight-ie);const Te=Math.max(0,Math.min(ue,W.value-n.clientHeight)),xe=me.behavior??"auto";xe==="auto"&&(k.value=Te),n.scrollTo({...me,top:Te,behavior:xe})}function U(i="auto"){var l;(l=p.value)==null||l.scrollTo({top:0,behavior:i})}return e.watch(()=>t.itemKey,()=>{H.clear(),D.value+=1}),e.watch(()=>t.items.length,async()=>{const i=new Set(t.items.map((f,w)=>J(f,w)));for(const f of H.keys())i.has(f)||H.delete(f);D.value+=1,await e.nextTick();const l=p.value;if(!l)return;const n=Math.max(0,W.value-l.clientHeight);l.scrollTop>n&&(l.scrollTop=n,k.value=n),B()}),e.watch(()=>[t.hasMore,t.loading],async([i])=>{i||(q=-1),await e.nextTick(),B()}),e.onMounted(()=>{if(se(),typeof ResizeObserver<"u"){K=new ResizeObserver(se),b=new ResizeObserver(Z),p.value&&K.observe(p.value);for(const[i]of X)b.observe(i)}e.nextTick(B)}),e.onUpdated(te),e.onBeforeUnmount(()=>{K&&(K.disconnect(),K=void 0),b&&(b.disconnect(),b=void 0),X.clear()}),C({scrollTo:de,scrollToIndex:A,scrollToTop:U}),(i,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:p,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(u)}]),style:e.normalizeStyle(ne.value),role:"list","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:h,onTouchstartPassive:l[0]||(l[0]=(...n)=>e.unref(_)&&e.unref(_)(...n)),onTouchmove:l[1]||(l[1]=(...n)=>e.unref(j)&&e.unref(j)(...n)),onTouchend:l[2]||(l[2]=(...n)=>e.unref(E)&&e.unref(E)(...n)),onTouchcancel:l[3]||(l[3]=(...n)=>e.unref(z)&&e.unref(z)(...n))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(R)}px`,transform:`translateY(${e.unref(a)-e.unref(R)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(i.$slots,"refresh",{pullDistance:e.unref(s),progress:e.unref(m),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(L)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${W.value}px`,transform:`translateY(${e.unref(a)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,({item:n,index:f,key:w,top:me})=>(e.openBlock(),e.createElementBlock("div",{key:w,ref_for:!0,ref:ue=>Q(ue,w),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${me}px)`}),role:"listitem","aria-posinset":f+1,"aria-setsize":o.items.length},[e.renderSlot(i.$slots,"default",{item:n,index:f})],12,Qe))),128)),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${ee.value}px`,transform:`translateY(${M.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(i.$slots,"loading",{},()=>[l[4]||(l[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(a)}px)`})},[e.renderSlot(i.$slots,"empty")],4))],46,Je))}}),Xe=["aria-label"],et=["aria-current","aria-posinset","aria-setsize"],tt={key:1,class:"vue-short-media-feed__empty"},Oe=e.defineComponent({name:"ShortMediaFeed",__name:"ShortMediaFeed",props:{items:{},activeIndex:{default:0},buffer:{default:1},height:{default:"100dvh"},itemKey:{default:void 0},ariaLabel:{default:"Short media feed"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(o,{expose:C,emit:x}){const t=o,v=x,u=e.ref(),s=e.ref(0),a=e.ref(K(t.activeIndex));let m,L=-1;const R=$e(),{getItemKey:_}=be({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),j=e.computed(()=>Math.max(0,Math.floor(t.buffer))),E=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),z=e.computed(()=>s.value>0?s.value:typeof t.height=="number"?Math.max(1,t.height):0),p=e.computed(()=>Math.max(0,a.value-j.value)),k=e.computed(()=>Math.min(t.items.length,a.value+j.value+1)),P=e.computed(()=>t.items.slice(p.value,k.value).map((g,M)=>({item:g,index:p.value+M}))),D=e.computed(()=>p.value*z.value),H=e.computed(()=>(t.items.length-k.value)*z.value),X=e.computed(()=>({height:Ie(t.height)}));function K(g){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(g)?g:0)))}function b(){if(!t.hasMore||t.loading||L===t.items.length)return;(t.items.length===0?0:t.items.length-1-a.value)<=E.value&&(L=t.items.length,v("loadMore"))}function q(g){const M=K(g);M===a.value||t.items.length===0||(a.value=M,v("update:activeIndex",M),v("change",{index:M,item:t.items[M]}),M===0&&v("reachStart"),M===t.items.length-1&&v("reachEnd"),b())}function $(g,M={}){const W=u.value;W&&(typeof W.scrollTo=="function"?W.scrollTo({...M,top:g}):W.scrollTop=g)}function J(g,M={}){if(t.items.length===0)return;const W=K(g);q(W),$(W*z.value,M)}function F(g){if(z.value<=0)return;const M=g.currentTarget.scrollTop;q(Math.round(M/z.value))}function ee(g){let M;g.key==="ArrowDown"||g.key==="PageDown"?M=a.value+1:g.key==="ArrowUp"||g.key==="PageUp"?M=a.value-1:g.key==="Home"?M=0:g.key==="End"&&(M=t.items.length-1),M!==void 0&&(g.preventDefault(),J(M,{behavior:"smooth"}))}function le(){var M;const g=((M=u.value)==null?void 0:M.clientHeight)??0;R(u.value,t.height),!(g<=0||g===s.value)&&(s.value=g,e.nextTick(()=>{$(a.value*g)}))}return e.watch(()=>t.activeIndex,async g=>{const M=K(g);M!==a.value&&(a.value=M,await e.nextTick(),$(M*z.value),b())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([g])=>{g||(L=-1),await e.nextTick(),b()}),e.watch(()=>t.items.length,async()=>{const g=K(a.value);t.items.length===0?a.value!==0&&(a.value=0,v("update:activeIndex",0)):q(g),await e.nextTick(),$(g*z.value),b()}),e.onMounted(async()=>{le(),typeof ResizeObserver<"u"&&u.value&&(m=new ResizeObserver(le),m.observe(u.value)),await e.nextTick(),$(a.value*z.value),b()}),e.onBeforeUnmount(()=>{m&&(m.disconnect(),m=void 0)}),C({scrollToIndex:J}),(g,M)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:u,class:"vue-short-media-feed",style:e.normalizeStyle(X.value),role:"list","aria-orientation":"vertical","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:F,onKeydown:ee},[o.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[D.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${D.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value,({item:W,index:re})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(_)(W,re),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${z.value}px`}),role:"listitem","aria-current":re===a.value?"true":void 0,"aria-posinset":re+1,"aria-setsize":o.items.length},[e.renderSlot(g.$slots,"default",{item:W,index:re,active:re===a.value})],12,et))),128)),H.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${H.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",tt,[e.renderSlot(g.$slots,"empty")]))],44,Xe))}}),lt=["aria-label"],ot=e.defineComponent({__name:"SkeletonLoader",props:{width:{default:"100%"},height:{default:16},variant:{default:"rounded"},animated:{type:Boolean,default:!0},ariaLabel:{default:"Loading…"}},setup(o){const C=o;function x(v){return typeof v=="number"?`${Math.max(0,v)}px`:v}const t=e.computed(()=>({width:x(C.width),height:x(C.height)}));return(v,u)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vue-skeleton-loader",[`vue-skeleton-loader--${o.variant}`,{"vue-skeleton-loader--animated":o.animated}]]),style:e.normalizeStyle(t.value),role:"status","aria-label":o.ariaLabel},null,14,lt))}}),nt=(o,C)=>{const x=o.__vccOpts||o;for(const[t,v]of C)x[t]=v;return x},Ke=nt(ot,[["__scopeId","data-v-fc92f61f"]]),at=["aria-label"],rt={key:0,class:"vue-virtual-carousel__track",role:"list"},it=["aria-label","aria-current"],st={key:1,class:"vue-virtual-carousel__empty"},Pe=e.defineComponent({name:"VirtualCarousel",__name:"VirtualCarousel",props:{items:{},activeIndex:{default:0},slidesPerView:{default:1},slidesToScroll:{default:1},gap:{default:0},buffer:{default:1},height:{default:"auto"},itemKey:{default:void 0},ariaLabel:{default:"Carousel"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2},autoplay:{type:Boolean,default:!1},autoplayDelay:{default:3e3},autoplayLoop:{type:Boolean,default:!0},pauseOnHover:{type:Boolean,default:!0},responsive:{default:void 0}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(o,{expose:C,emit:x}){const t=o,v=x,u=e.ref(),s=e.ref(0),a=e.ref(0);let m,L=-1,R,_,j=!1;const E=e.ref(!1),{getItemKey:z}=be({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),p=e.computed(()=>Math.max(0,s.value)),k=e.computed(()=>{if(!t.responsive||t.responsive.length===0)return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap};const l=p.value,n=[...t.responsive].sort((f,w)=>w.breakpoint-f.breakpoint);for(const f of n)if(l>=f.breakpoint)return{slidesPerView:f.slidesPerView??t.slidesPerView,slidesToScroll:f.slidesToScroll??t.slidesToScroll,gap:f.gap??t.gap};return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap}}),P=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(k.value.slidesPerView)?k.value.slidesPerView:1))),D=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(k.value.slidesToScroll)?k.value.slidesToScroll:1))),H=e.computed(()=>Math.max(0,Number.isFinite(k.value.gap)?k.value.gap:0)),X=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.buffer)?t.buffer:0))),K=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),b=e.computed(()=>Number.isFinite(t.autoplayDelay)?Math.max(1,t.autoplayDelay):3e3),q=e.computed(()=>{if(p.value<=0)return 0;const l=(P.value-1)*H.value;return Math.max(1,(p.value-l)/P.value)}),$=e.computed(()=>q.value+H.value),J=e.computed(()=>Math.max(0,t.items.length-P.value)),F=e.computed(()=>Math.max(0,a.value-X.value)),ee=e.computed(()=>Math.min(t.items.length,a.value+P.value+X.value)),le=e.computed(()=>t.items.slice(F.value,ee.value).map((l,n)=>({item:l,index:F.value+n}))),g=e.computed(()=>t.items.length===0?0:t.items.length*q.value+(t.items.length-1)*H.value),M=e.computed(()=>F.value*$.value),W=e.computed(()=>Math.max(0,g.value-ee.value*$.value)),re=e.computed(()=>({height:Ie(t.height)}));function G(l){return Math.min(J.value,Math.max(0,Math.floor(Number.isFinite(l)?l:0)))}a.value=G(t.activeIndex);function oe(l){return l>=a.value&&l<Math.min(t.items.length,a.value+P.value)}function N(){if(!t.hasMore||t.loading||L===t.items.length)return;const l=t.items.length===0?-1:Math.min(t.items.length-1,a.value+P.value-1);t.items.length-1-l<=K.value&&(L=t.items.length,v("loadMore"))}function O(l){const n=G(l);n===a.value||t.items.length===0||(a.value=n,v("update:activeIndex",n),v("change",{index:n,item:t.items[n]}),n===0&&v("reachStart"),n===J.value&&v("reachEnd"),N(),t.autoplay&&!E.value&&I())}function ne(l,n={}){const f=u.value;f&&(typeof f.scrollTo=="function"?f.scrollTo({...n,left:l}):f.scrollLeft=l)}function se(l,n={}){if(t.items.length===0||$.value<=0)return;const f=G(l);_=n.behavior==="smooth"?f:void 0,O(f),ne(f*$.value,{...n,behavior:n.behavior})}function h(l="smooth"){se(a.value+D.value,{behavior:l})}function B(l="smooth"){se(a.value-D.value,{behavior:l})}function I(){Z(),!(!t.autoplay||t.items.length===0)&&(R=setTimeout(()=>{a.value>=J.value?t.autoplayLoop?se(0,{behavior:"smooth"}):Z():h("smooth")},b.value))}function Z(){R!==void 0&&(clearTimeout(R),R=void 0)}function Q(){E.value=!0,t.pauseOnHover&&Z()}function te(){E.value=!1,t.autoplay&&I()}function de(){_=void 0}function A(l){if($.value<=0||j)return;const n=l.currentTarget.scrollLeft;if(_!==void 0){const f=_*$.value;if(Math.abs(n-f)>1)return;_=void 0}O(Math.round(n/$.value))}function U(l){l.key==="ArrowRight"||l.key==="PageDown"?(l.preventDefault(),h()):l.key==="ArrowLeft"||l.key==="PageUp"?(l.preventDefault(),B()):l.key==="Home"?(l.preventDefault(),se(0,{behavior:"smooth"})):l.key==="End"&&(l.preventDefault(),se(J.value,{behavior:"auto"}))}function i(){var n;const l=((n=u.value)==null?void 0:n.clientWidth)??0;l<=0||l===s.value||(j=!0,s.value=l,e.nextTick(()=>{const f=G(a.value);ne(f*$.value),j=!1}))}return e.watch(()=>t.activeIndex,async l=>{const n=G(l);n!==a.value&&(de(),a.value=n,await e.nextTick(),ne(n*$.value),N())}),e.watch(()=>[t.items.length,k.value.slidesPerView,k.value.gap,k.value.slidesToScroll],async()=>{const l=G(a.value);t.items.length===0?a.value!==0&&(a.value=0,v("update:activeIndex",0)):O(l),await e.nextTick(),ne(l*$.value),N(),t.autoplay&&t.items.length>0&&!E.value&&I()}),e.watch(()=>t.responsive,()=>{e.nextTick(()=>{const l=G(a.value);ne(l*$.value)})},{deep:!0}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([l])=>{l||(L=-1),await e.nextTick(),N()}),e.watch(()=>t.autoplay,l=>{l&&!E.value?I():Z()}),e.watch(()=>t.autoplayDelay,()=>{t.autoplay&&!E.value&&I()}),e.watch(()=>t.autoplayLoop,l=>{!t.autoplay||E.value||(!l&&a.value>=J.value?Z():I())}),e.watch(()=>t.pauseOnHover,l=>{l&&E.value?Z():!l&&t.autoplay&&I()}),e.onMounted(async()=>{i(),typeof ResizeObserver<"u"&&u.value&&(m=new ResizeObserver(i),m.observe(u.value)),await e.nextTick(),ne(a.value*$.value),N(),t.autoplay&&I()}),e.onBeforeUnmount(()=>{m&&(m.disconnect(),m=void 0),Z()}),C({next:h,previous:B,scrollToIndex:se,startAutoplay:I,stopAutoplay:Z}),(l,n)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:u,class:"vue-virtual-carousel",style:e.normalizeStyle(re.value),role:"region","aria-roledescription":"carousel","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:A,onPointerdown:de,onWheelPassive:de,onKeydown:U,onMouseenter:Q,onMouseleave:te},[o.items.length?(e.openBlock(),e.createElementBlock("div",rt,[M.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${M.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(le.value,({item:f,index:w})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(z)(f,w),class:"vue-virtual-carousel__item",style:e.normalizeStyle({flexBasis:`${q.value}px`,marginRight:w<o.items.length-1?`${H.value}px`:"0px"}),role:"listitem","aria-roledescription":"slide","aria-label":`${w+1} of ${o.items.length}`,"aria-current":w===a.value?"true":void 0},[e.renderSlot(l.$slots,"default",{item:f,index:w,active:w===a.value,visible:oe(w)})],12,it))),128)),W.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${W.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",st,[e.renderSlot(l.$slots,"empty")]))],44,at))}}),ut=["aria-label"],ct=["aria-posinset","aria-setsize"],Ae=e.defineComponent({name:"VirtualScroll",__name:"VirtualScroll",props:{items:{},itemSize:{},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:C,emit:x}){const t=o,v=x,{pulling:u,pullDistance:s,pullOffset:a,pullProgress:m,refreshMessage:L,refreshThreshold:R,handleTouchStart:_,handleTouchMove:j,handleTouchEnd:E,handleTouchCancel:z}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>v("refresh")}),p=e.ref(),k=e.ref(0),P=e.ref(0);let D,H=-1;const X=$e(),{getItemKey:K}=be({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),b=e.computed(()=>Math.max(1,t.itemSize)),q=e.computed(()=>Math.max(0,Math.floor(t.overscan))),$=e.computed(()=>t.items.length*b.value),J=e.computed(()=>Math.max(1,t.loadingItemSize??b.value)),F=e.computed(()=>$.value+(t.loading?J.value:0)),ee=e.computed(()=>P.value>0?P.value:typeof t.height=="number"?t.height:0),le=e.computed(()=>Math.max(0,Math.floor(k.value/b.value)-q.value)),g=e.computed(()=>{const h=Math.ceil((k.value+ee.value)/b.value);return Math.min(t.items.length,h+q.value)}),M=e.computed(()=>t.items.slice(le.value,g.value).map((h,B)=>({item:h,index:le.value+B}))),W=e.computed(()=>({height:Ie(t.height)})),re=e.computed(()=>({transform:`translateY(${le.value*b.value}px)`}));function G(){var h;P.value=((h=p.value)==null?void 0:h.clientHeight)??0,X(p.value,t.height),e.nextTick(N)}function oe(h){k.value=h.currentTarget.scrollTop,v("scroll",{scrollTop:k.value,startIndex:le.value,endIndex:g.value}),N()}function N(){const h=p.value;if(!h||!t.hasMore||t.loading||H===t.items.length)return;const B=Math.max(0,t.loadMoreThreshold);F.value-h.scrollTop-h.clientHeight<=B&&(H=t.items.length,v("loadMore"))}function O(h,B={}){const I=p.value;if(!I)return;const Z=Math.max(0,F.value-I.clientHeight),Q=Math.min(Math.max(0,Number.isFinite(h)?h:0),Z),te=B.behavior??"auto";te==="auto"&&(k.value=Q),I.scrollTo({...B,top:Q,behavior:te})}function ne(h,B={}){const I=p.value;if(!I||t.items.length===0)return;const Z=Math.min(t.items.length-1,Math.max(0,Math.floor(h))),{align:Q="start",...te}=B;let de=Z*b.value;Q==="center"?de-=(I.clientHeight-b.value)/2:Q==="end"&&(de-=I.clientHeight-b.value),I.scrollTo({...te,top:Math.max(0,Math.min(de,F.value-I.clientHeight))})}function se(h="auto"){var B;(B=p.value)==null||B.scrollTo({top:0,behavior:h})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const h=p.value;if(!h)return;const B=Math.max(0,F.value-h.clientHeight);h.scrollTop>B&&(h.scrollTop=B,k.value=B),N()}),e.watch(()=>[t.hasMore,t.loading],async([h])=>{h||(H=-1),await e.nextTick(),N()}),e.onMounted(()=>{G(),typeof ResizeObserver<"u"&&p.value&&(D=new ResizeObserver(G),D.observe(p.value)),e.nextTick(N)}),e.onBeforeUnmount(()=>{D&&(D.disconnect(),D=void 0)}),C({scrollTo:O,scrollToIndex:ne,scrollToTop:se}),(h,B)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:p,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(u)}]),style:e.normalizeStyle(W.value),role:"list","aria-label":o.ariaLabel,tabindex:"0",onScrollPassive:oe,onTouchstartPassive:B[0]||(B[0]=(...I)=>e.unref(_)&&e.unref(_)(...I)),onTouchmove:B[1]||(B[1]=(...I)=>e.unref(j)&&e.unref(j)(...I)),onTouchend:B[2]||(B[2]=(...I)=>e.unref(E)&&e.unref(E)(...I)),onTouchcancel:B[3]||(B[3]=(...I)=>e.unref(z)&&e.unref(z)(...I))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(R)}px`,transform:`translateY(${e.unref(a)-e.unref(R)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(h.$slots,"refresh",{pullDistance:e.unref(s),progress:e.unref(m),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(L)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-scroll__spacer",style:e.normalizeStyle({height:`${F.value}px`,transform:`translateY(${e.unref(a)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(re.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.value,({item:I,index:Z})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(K)(I,Z),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${b.value}px`}),role:"listitem","aria-posinset":Z+1,"aria-setsize":o.items.length},[e.renderSlot(h.$slots,"default",{item:I,index:Z})],12,ct))),128))],4),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${J.value}px`,transform:`translateY(${$.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(h.$slots,"loading",{},()=>[B[4]||(B[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(a)}px)`})},[e.renderSlot(h.$slots,"empty")],4))],46,ut))}}),dt=["aria-label"],mt=["aria-posinset","aria-setsize"],De=e.defineComponent({name:"WindowDynamicVirtualScroll",__name:"WindowDynamicVirtualScroll",props:{items:{},estimatedItemSize:{default:48},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Window dynamic virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:C,emit:x}){const t=o,v=x,u=e.ref(),s=e.ref(0),a=e.ref(0),m=e.ref(0),L=e.ref(0),R=new Map,_=new Map,j=new Map;let E,z,p,k,P=!1,D=!1,H=-1;const{getItemKey:X}=be({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey});function K(c){return typeof window.requestAnimationFrame=="function"?{id:window.requestAnimationFrame(c),type:"animation"}:{id:window.setTimeout(c,0),type:"timeout"}}function b(c){c&&(c.type==="animation"?window.cancelAnimationFrame(c.id):window.clearTimeout(c.id))}const{pulling:q,pullDistance:$,pullOffset:J,pullProgress:F,refreshMessage:ee,refreshThreshold:le,handleTouchStart:g,handleTouchMove:M,handleTouchEnd:W,handleTouchCancel:re}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>v("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),G=e.computed(()=>Math.max(1,t.estimatedItemSize)),oe=e.computed(()=>Math.max(1,t.loadingItemSize??G.value)),N=e.computed(()=>Math.max(0,Math.floor(t.overscan))),O=e.computed(()=>{L.value;const c=new Array(t.items.length+1),S=new Array(t.items.length);c[0]=0;for(let T=0;T<t.items.length;T+=1){const ae=X(t.items[T],T),Y=R.get(ae)??G.value;S[T]=Y,c[T+1]=c[T]+Y}return{offsets:c,sizes:S,total:c[t.items.length]??0}}),ne=e.computed(()=>O.value.total+(t.loading?oe.value:0)),se=e.computed(()=>{const c=new Map;return t.items.forEach((S,T)=>{c.set(X(S,T),T)}),c}),h=e.computed(()=>Math.max(0,s.value-m.value));function B(c){if(t.items.length===0)return 0;const S=O.value.offsets;let T=0,ae=t.items.length;for(;T<ae;){const Y=Math.floor((T+ae)/2);S[Y+1]<=c?T=Y+1:ae=Y}return Math.min(T,t.items.length-1)}const I=e.computed(()=>Math.max(0,B(h.value)-N.value)),Z=e.computed(()=>{if(t.items.length===0)return 0;const c=s.value+a.value-m.value,S=Math.max(G.value,c),T=B(S)+1;return Math.min(t.items.length,T+N.value)}),Q=e.computed(()=>t.items.slice(I.value,Z.value).map((c,S)=>{const T=I.value+S;return{item:c,index:T,key:X(c,T),top:O.value.offsets[T]}}));function te(){typeof window>"u"||(s.value=Math.max(0,window.scrollY),a.value=window.innerHeight,u.value&&(m.value=u.value.getBoundingClientRect().top+s.value))}function de(){v("scroll",{scrollTop:h.value,startIndex:I.value,endIndex:Z.value})}function A(c=!1){D&&(P||(P=c),!p&&(p=K(()=>{p=void 0,te(),P&&(P=!1,de()),l()})))}function U(){A(!0)}function i(){A()}function l(){if(typeof window>"u"||!t.hasMore||t.loading||H===t.items.length)return;const c=Math.max(0,t.loadMoreThreshold),S=m.value+ne.value,T=s.value+a.value;S-T<=c&&(H=t.items.length,v("loadMore"))}function n(c){const S=c.borderBoxSize;if(S){const T=Array.isArray(S)?S[0]:S;if(T!=null&&T.blockSize)return T.blockSize}return c.contentRect.height}function f(c){const S=O.value;let T=0,ae=!1;for(const Y of c){const he=Y.target,ge=_.get(he),we=n(Y);if(ge===void 0||we<=0)continue;const ke=R.get(ge)??G.value;if(Math.abs(ke-we)<.5)continue;const Se=se.value.get(ge);Se!==void 0&&S.offsets[Se+1]<=h.value&&(T+=we-ke),R.set(ge,we),ae=!0}ae&&(L.value+=1,e.nextTick(()=>{if(D){if(T!==0&&typeof window<"u"){const Y=Math.max(0,s.value+T);s.value=Y,window.scrollTo({top:Y,behavior:"auto"})}te(),l()}}))}function w(c){if(D){for(const S of c)j.set(S.target,S);k||(k=K(()=>{k=void 0;const S=Array.from(j.values());j.clear(),f(S)}))}}function me(c,S){c instanceof HTMLElement&&(_.set(c,S),z==null||z.observe(c))}function ue(){for(const[c]of _)c.isConnected||(z==null||z.unobserve(c),_.delete(c))}function ie(c,S={}){if(typeof window>"u")return;te();const T=Math.max(0,ne.value-a.value),ae=Math.min(Math.max(0,Number.isFinite(c)?c:0),T),Y=Math.max(0,m.value+ae),he=S.behavior??"auto";he==="auto"&&(s.value=Y),window.scrollTo({...S,top:Y,behavior:he})}function Te(c,S={}){if(typeof window>"u"||t.items.length===0)return;te();const T=Math.min(t.items.length-1,Math.max(0,Math.floor(c))),{align:ae="start",...Y}=S,he=O.value.sizes[T];let ge=m.value+O.value.offsets[T];ae==="center"?ge-=(a.value-he)/2:ae==="end"&&(ge-=a.value-he);const we=Math.max(m.value,m.value+ne.value-a.value),ke=Math.max(0,Math.min(ge,we)),Se=Y.behavior??"auto";Se==="auto"&&(s.value=ke),window.scrollTo({...Y,top:ke,behavior:Se})}function xe(c="auto"){typeof window>"u"||(te(),window.scrollTo({top:Math.max(0,m.value),behavior:c}))}return e.watch(()=>t.itemKey,()=>{R.clear(),L.value+=1,H=-1}),e.watch(()=>t.items.map((c,S)=>X(c,S)),async(c,S)=>{const T=c.length!==S.length||c.some((Y,he)=>Y!==S[he]),ae=new Set(c);for(const Y of R.keys())ae.has(Y)||R.delete(Y);T&&(H=-1),L.value+=1,await e.nextTick(),D&&(te(),l())}),e.watch(()=>[t.hasMore,t.loading],async([c])=>{c||(H=-1),await e.nextTick(),D&&(te(),l())}),e.onMounted(()=>{if(D=!0,te(),window.addEventListener("scroll",U,{passive:!0}),window.addEventListener("resize",i,{passive:!0}),typeof ResizeObserver<"u"){E=new ResizeObserver(()=>{A()}),z=new ResizeObserver(w),u.value&&E.observe(u.value);for(const[c]of _)z.observe(c)}e.nextTick(()=>{D&&l()})}),e.onUpdated(ue),e.onBeforeUnmount(()=>{D=!1,window.removeEventListener("scroll",U),window.removeEventListener("resize",i),b(p),b(k),p=void 0,k=void 0,P=!1,j.clear(),E&&(E.disconnect(),E=void 0),z&&(z.disconnect(),z=void 0),_.clear()}),C({scrollTo:ie,scrollToIndex:Te,scrollToTop:xe}),(c,S)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:u,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(q)}]),role:"list","aria-label":o.ariaLabel,onTouchstartPassive:S[0]||(S[0]=(...T)=>e.unref(g)&&e.unref(g)(...T)),onTouchmove:S[1]||(S[1]=(...T)=>e.unref(M)&&e.unref(M)(...T)),onTouchend:S[2]||(S[2]=(...T)=>e.unref(W)&&e.unref(W)(...T)),onTouchcancel:S[3]||(S[3]=(...T)=>e.unref(re)&&e.unref(re)(...T))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(le)}px`,transform:`translateY(${e.unref(J)-e.unref(le)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(c.$slots,"refresh",{pullDistance:e.unref($),progress:e.unref(F),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(ee)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${ne.value}px`,transform:`translateY(${e.unref(J)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Q.value,({item:T,index:ae,key:Y,top:he})=>(e.openBlock(),e.createElementBlock("div",{key:Y,ref_for:!0,ref:ge=>me(ge,Y),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${he}px)`}),role:"listitem","aria-posinset":ae+1,"aria-setsize":o.items.length},[e.renderSlot(c.$slots,"default",{item:T,index:ae})],12,mt))),128)),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${oe.value}px`,transform:`translateY(${O.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(c.$slots,"loading",{},()=>[S[4]||(S[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(J)}px)`})},[e.renderSlot(c.$slots,"empty")],4))],42,dt))}}),ft=["aria-label"],vt=["aria-posinset","aria-setsize"],Fe=e.defineComponent({name:"WindowGirdVirtualScroll",__name:"WindowGirdVirtualScroll",props:{items:{},itemSize:{},columns:{default:2},gap:{default:0},overscan:{default:1},itemKey:{default:void 0},ariaLabel:{default:"Window virtual grid"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(o,{expose:C,emit:x}){const t=o,v=x,u=e.ref(),s=e.ref(0),a=e.ref(0),m=e.ref(0);let L,R=-1;const{getItemKey:_}=be({componentName:"WindowGirdVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:j,pullDistance:E,pullOffset:z,pullProgress:p,refreshMessage:k,refreshThreshold:P,handleTouchStart:D,handleTouchMove:H,handleTouchEnd:X,handleTouchCancel:K}=Ve({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>v("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),b=e.computed(()=>Math.max(1,t.itemSize)),q=e.computed(()=>Math.max(1,Math.floor(t.columns))),$=e.computed(()=>Math.max(0,t.gap)),J=e.computed(()=>Math.max(0,Math.floor(t.overscan))),F=e.computed(()=>Math.max(1,t.loadingItemSize??b.value)),ee=e.computed(()=>b.value+$.value),le=e.computed(()=>Math.ceil(t.items.length/q.value)),g=e.computed(()=>le.value===0?0:le.value*b.value+(le.value-1)*$.value),M=e.computed(()=>g.value+(t.items.length?$.value:0)),W=e.computed(()=>g.value+(t.loading?F.value+(t.items.length?$.value:0):0)),re=e.computed(()=>Math.max(0,s.value-m.value)),G=e.computed(()=>Math.max(0,Math.floor(re.value/ee.value)-J.value)),oe=e.computed(()=>{if(le.value===0)return 0;const A=Math.max(b.value,s.value+a.value-m.value),U=Math.ceil((A+$.value)/ee.value);return Math.min(le.value,U+J.value)}),N=e.computed(()=>Math.min(t.items.length,G.value*q.value)),O=e.computed(()=>Math.min(t.items.length,oe.value*q.value)),ne=e.computed(()=>t.items.slice(N.value,O.value).map((A,U)=>{const i=N.value+U;return{item:A,index:i,key:_(A,i),rowIndex:Math.floor(i/q.value),columnIndex:i%q.value}})),se=e.computed(()=>({gridTemplateColumns:`repeat(${q.value}, minmax(0, 1fr))`,columnGap:`${$.value}px`,rowGap:`${$.value}px`,transform:`translateY(${G.value*ee.value}px)`}));function h(){typeof window>"u"||(s.value=Math.max(0,window.scrollY),a.value=window.innerHeight,u.value&&(m.value=u.value.getBoundingClientRect().top+s.value))}function B(){v("scroll",{scrollTop:re.value,startIndex:N.value,endIndex:O.value})}function I(){h(),B(),Z()}function Z(){if(typeof window>"u"||!t.hasMore||t.loading||R===t.items.length)return;const A=Math.max(0,t.loadMoreThreshold),U=m.value+W.value,i=s.value+a.value;U-i<=A&&(R=t.items.length,v("loadMore"))}function Q(A,U={}){if(typeof window>"u")return;h();const i=Math.max(0,W.value-a.value),l=Math.min(Math.max(0,Number.isFinite(A)?A:0),i),n=Math.max(0,m.value+l),f=U.behavior??"auto";f==="auto"&&(s.value=n),window.scrollTo({...U,top:n,behavior:f})}function te(A,U={}){if(typeof window>"u"||t.items.length===0)return;h();const i=Math.min(t.items.length-1,Math.max(0,Math.floor(A))),l=Math.floor(i/q.value),{align:n="start",...f}=U;let w=m.value+l*ee.value;n==="center"?w-=(a.value-b.value)/2:n==="end"&&(w-=a.value-b.value);const me=Math.max(m.value,m.value+W.value-a.value),ue=Math.max(0,Math.min(w,me)),ie=f.behavior??"auto";ie==="auto"&&(s.value=ue),window.scrollTo({...f,top:ue,behavior:ie})}function de(A="auto"){typeof window>"u"||(h(),window.scrollTo({top:Math.max(0,m.value),behavior:A}))}return e.watch(()=>[t.items.length,t.itemSize,t.columns,t.gap],async()=>{await e.nextTick(),h(),Z()}),e.watch(()=>[t.hasMore,t.loading],async([A])=>{A||(R=-1),await e.nextTick(),h(),Z()}),e.onMounted(()=>{h(),window.addEventListener("scroll",I,{passive:!0}),window.addEventListener("resize",I,{passive:!0}),typeof ResizeObserver<"u"&&(L=new ResizeObserver(()=>{h(),Z()}),u.value&&L.observe(u.value)),e.nextTick(Z)}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",I),window.removeEventListener("resize",I),L&&(L.disconnect(),L=void 0)}),C({scrollTo:Q,scrollToIndex:te,scrollToTop:de}),(A,U)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:u,class:e.normalizeClass(["vue-window-gird-virtual-scroll",{"vue-window-gird-virtual-scroll--pulling":e.unref(j)}]),role:"list","aria-label":o.ariaLabel,onTouchstartPassive:U[0]||(U[0]=(...i)=>e.unref(D)&&e.unref(D)(...i)),onTouchmove:U[1]||(U[1]=(...i)=>e.unref(H)&&e.unref(H)(...i)),onTouchend:U[2]||(U[2]=(...i)=>e.unref(X)&&e.unref(X)(...i)),onTouchcancel:U[3]||(U[3]=(...i)=>e.unref(K)&&e.unref(K)(...i))},[o.pullToRefresh||o.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(P)}px`,transform:`translateY(${e.unref(z)-e.unref(P)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(A.$slots,"refresh",{pullDistance:e.unref(E),progress:e.unref(p),refreshing:o.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(k)),1)])],4)):e.createCommentVNode("",!0),o.items.length||o.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-gird-virtual-scroll__spacer",style:e.normalizeStyle({height:`${W.value}px`,transform:`translateY(${e.unref(z)}px)`})},[e.createElementVNode("div",{class:"vue-window-gird-virtual-scroll__content",style:e.normalizeStyle(se.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ne.value,({item:i,index:l,key:n,rowIndex:f,columnIndex:w})=>(e.openBlock(),e.createElementBlock("div",{key:n,class:"vue-window-gird-virtual-scroll__item",style:e.normalizeStyle({height:`${b.value}px`}),role:"listitem","aria-posinset":l+1,"aria-setsize":o.items.length},[e.renderSlot(A.$slots,"default",{item:i,index:l,rowIndex:f,columnIndex:w})],12,vt))),128))],4),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__loading",style:e.normalizeStyle({height:`${F.value}px`,transform:`translateY(${M.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(A.$slots,"loading",{},()=>[U[4]||(U[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-gird-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(z)}px)`})},[e.renderSlot(A.$slots,"empty")],4))],42,ft))}}),We=Ce,Ye={install(o){o.component("ChatVirtualScroll",Ne),o.component("DynamicVirtualScroll",Ce),o.component("ShortMediaFeed",Oe),o.component("SkeletonLoader",Ke),o.component("VirtualCarousel",Pe),o.component("VirtualList",We),o.component("VirtualScroll",Ae),o.component("WindowDynamicVirtualScroll",De),o.component("WindowGirdVirtualScroll",Fe)}};exports.ChatVirtualScroll=Ne;exports.DynamicVirtualScroll=Ce;exports.ShortMediaFeed=Oe;exports.SkeletonLoader=Ke;exports.VirtualCarousel=Pe;exports.VirtualList=We;exports.VirtualScroll=Ae;exports.VueVirtualScroll=Ye;exports.WindowDynamicVirtualScroll=De;exports.WindowGirdVirtualScroll=Fe;exports.default=Ye;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");function vt(n){return typeof n=="string"||typeof n=="number"||typeof n=="symbol"}function rt(n,u){const k=n[u];return vt(k)?k:void 0}function Ct(n){return rt(n,"id")??rt(n,"key")}function We(n){const u=new WeakMap,k=new Map;function t(w){if(vt(w))return w;if(w!==null&&typeof w=="object"){let d=u.get(w);return d||(d=Symbol(`${n.componentName} item`),u.set(w,d)),d}let f=k.get(w);return f||(f=Symbol(`${n.componentName} primitive`),k.set(w,f)),f}function x(w,f){const d=n.itemKey();if(typeof d=="function")return d(w,f);if(w!==null&&typeof w=="object"){if(d!==void 0){const v=rt(w,d);if(v!==void 0)return v}const a=Ct(w);if(a!==void 0)return a}return t(w)}function g(){}return e.watch(()=>[n.itemKey(),n.items(),n.items().length],g,{immediate:!0}),{getItemKey:x}}const $t=new Set(["ArrowDown","ArrowUp","End","Home","PageDown","PageUp"," "]);function Lt(n){const u=e.ref(!1);let k=!1,t=!1,x;function g(){clearTimeout(x),x=void 0}function w(S){S!==u.value&&(u.value=S,n.onChange(S))}function f(){k||t||(g(),w(!1),n.onSettled())}function d(){g(),(u.value||n.hasProgrammaticScroll())&&!k&&!t&&(x=setTimeout(f,n.delay()))}function a(){n.onInterrupt(),g(),w(!0),n.onStart()}function v(){k=!0,a()}function I(S){k=S.touches.length>0,d()}function O(){a(),d()}function L(S){n.onInterrupt(),$t.has(S.key)&&(a(),d())}function $(S){n.onInterrupt(),S.pointerType==="mouse"&&S.target===n.viewport()&&(t=!0,a())}function B(){t&&(t=!1,d())}return{isScrolling:u,setScrolling:w,scheduleScrollEnd:d,handleScrollEnd:f,handleTouchStart:v,handleTouchEnd:I,handleWheel:O,handleKeyDown:L,handlePointerDown:$,handlePointerUp:B,dispose:g}}function Xe(n){return n==="fill"?"100%":typeof n=="number"?`${n}px`:n}function et(n){return(u,k)=>{typeof k=="string"&&(k==="fill"||k.trim().endsWith("%"))}}function Pe(n){return(n==null?void 0:n.count)??0}function qe(n){return(n==null?void 0:n.total)??0}function st(n){n.count=1+Pe(n.left)+Pe(n.right),n.total=n.size+qe(n.left)+qe(n.right),n.left&&(n.left.parent=n),n.right&&(n.right.parent=n)}function Ge(n,u){return n?u?n.priority<u.priority?(n.right=Ge(n.right,u),st(n),n):(u.left=Ge(n,u.left),st(u),u):n:u}function Vt(n){let u,k=0;const t=new Map;function x(d){const a=new Set;for(const v of d){if(t.has(v.key)||a.has(v.key))throw new Error(`[vue-virtual-flow] Duplicate item key \`${String(v.key)}\`. ChatVirtualScroll requires a unique stable key for every message.`);a.add(v.key)}}function g(d){k+=1;let a=Math.imul(k^2654435769,2246822507);a^=a>>>13,a=Math.imul(a,3266489909)^a>>>16;const v={key:d.key,size:d.size,priority:a>>>0,count:1,total:d.size};return t.set(d.key,v),v}function w(d){let a;for(const v of d)a=Ge(a,g(v));return a&&(a.parent=void 0),a}function f(d){let a=u,v=d;for(;a;){const I=Pe(a.left);if(v<I)a=a.left;else{if(v===I)return a;v-=I+1,a=a.right}}}return x(n),u=w(n),{get length(){return Pe(u)},get total(){return qe(u)},getSize(d){var a;return((a=f(d))==null?void 0:a.size)??0},getOffset(d){let a=u,v=Math.max(0,Math.min(d,Pe(u))),I=0;for(;a&&v>0;){const O=Pe(a.left);v<=O?a=a.left:(I+=qe(a.left)+a.size,v-=O+1,a=a.right)}return I},setSize(d,a){let v=f(d);if(!(!v||v.size===a))for(v.size=a;v;)st(v),v=v.parent},findIndex(d){if(!u||d<=0)return 0;if(d>=u.total)return u.count-1;let a=u,v=0,I=d;for(;a;){const O=qe(a.left),L=Pe(a.left);if(I<O)a=a.left;else{if(I<O+a.size)return v+L;I-=O+a.size,v+=L+1,a=a.right}}return Math.max(0,Pe(u)-1)},getKey(d){var a;return(a=f(d))==null?void 0:a.key},getIndex(d){let a=t.get(d);if(!a)return;let v=Pe(a.left);for(;a.parent;)a===a.parent.right&&(v+=Pe(a.parent.left)+1),a=a.parent;return a===u?v:void 0},getSizeByKey(d){var a;return(a=t.get(d))==null?void 0:a.size},hasKey(d){return t.has(d)},append(d){d.length!==0&&(x(d),u=Ge(u,w(d)),u&&(u.parent=void 0))},prepend(d){d.length!==0&&(x(d),u=Ge(w(d),u),u&&(u.parent=void 0))}}}const Pt=["aria-label","aria-live"],At={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},Dt=["aria-posinset","aria-setsize"],Nt={key:0,class:"vue-chat-virtual-scroll__new-items",role:"status"},ht=e.defineComponent({name:"ChatVirtualScroll",inheritAttrs:!1,__name:"ChatVirtualScroll",props:{items:{},itemsVersion:{},estimatedItemSize:{default:48},estimateItemSize:{},height:{default:400},overscan:{default:5},size:{default:void 0},itemKey:{default:void 0},ariaLabel:{default:"Chat messages"},stickToBottom:{type:Boolean,default:!0},bottomThreshold:{default:80},initialScroll:{default:"bottom"},hasOlder:{type:Boolean,default:!1},loadingOlder:{type:Boolean,default:!1},loadOlderThreshold:{default:120},scrollEndDelay:{default:150},syncMeasurement:{type:Boolean,default:!0},pinnedKeys:{default:()=>[]},maxPinnedItems:{default:20},keepFocusedItem:{type:Boolean,default:!0},showNewItemsIndicator:{type:Boolean,default:!0},newItemsLabel:{type:Function,default:void 0},forceStickToBottom:{type:Function,default:void 0},contain:{type:Boolean,default:!0}},emits:["scroll","loadOlder","bottomChange","scrollingChange","newItemsChange","visibleChange"],setup(n,{expose:u,emit:k}){const t=n,x=k,g=e.ref(),w=e.ref(0),f=e.ref(0),d=e.ref(0),a=e.ref(0),v=e.ref(!0),I=e.ref(0),O=e.ref(),L=new Set,$=new Map,B=new Set;let S,V,A=-1,U=!1,Z=0,ae=!1,K=0,ie,Q,ee,te=0;const R=et(),{getItemKey:_}=We({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),de=e.computed(()=>Number.isFinite(t.estimatedItemSize)?Math.max(1,t.estimatedItemSize):48),me=e.computed(()=>Math.max(0,Math.floor(t.overscan))),ue=e.computed(()=>Number.isFinite(t.scrollEndDelay)?Math.max(0,t.scrollEndDelay):150),{isScrolling:J,setScrolling:H,scheduleScrollEnd:T,handleScrollEnd:E,handleTouchStart:le,handleTouchEnd:re,handleWheel:xe,handleKeyDown:C,handlePointerDown:F,handlePointerUp:q,dispose:ve}=Lt({delay:()=>ue.value,viewport:()=>g.value,hasProgrammaticScroll:()=>ee!==void 0,onInterrupt:Se,onStart:()=>{f.value=Z},onSettled:()=>{const i=ee;if(ee=void 0,i){i();return}w.value=N(),ge()},onChange:i=>{U&&x("scrollingChange",i)}}),we=e.computed(()=>Number.isFinite(t.maxPinnedItems)?Math.max(0,Math.floor(t.maxPinnedItems)):20),pe=e.computed(()=>t.size!==void 0&&Number.isFinite(t.size)&&t.size>0?Math.max(1,Math.floor(t.size)):void 0),fe=e.computed(()=>d.value>0?d.value:typeof t.height=="number"?Math.max(0,t.height):de.value);function ne(i,c){var W;const y=(W=t.estimateItemSize)==null?void 0:W.call(t,i,c);return Number.isFinite(y)&&(y??0)>0?y:de.value}function oe(i){return Vt(t.items.map((c,y)=>{const W=_(c,y);return{key:W,size:L.has(W)?(i==null?void 0:i.getSizeByKey(W))??ne(c,y):ne(c,y)}}))}const m=e.shallowRef({sizes:oe()}),M=e.computed(()=>(a.value,{sizes:m.value.sizes,total:m.value.sizes.total}));function s(i=M.value.total){return Math.max(0,i-fe.value)}function Y(i){return M.value.sizes.findIndex(i)}w.value=t.initialScroll==="bottom"?s():0;const G=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const i=Y(w.value),c=Y(w.value+fe.value)+1;return{start:i,end:Math.min(t.items.length,c)}}),ye=e.computed(()=>{if(t.items.length===0)return{start:0,end:0};const i=G.value.start,c=G.value.end,y=Math.max(0,i-me.value),W=Math.min(t.items.length,c+me.value),ke=pe.value;if(ke===void 0||W-y<=ke)return{start:y,end:W};const Me=Math.max(0,ke-(c-i)),Ie=i-y,Ce=W-c;let Ve=Math.min(Ie,Math.ceil(Me/2));const Ne=Math.min(Ce,Me-Ve);return Ve=Math.min(Ie,Me-Ne),{start:i-Ve,end:c+Ne}}),r=e.computed(()=>ye.value.start),P=e.computed(()=>ye.value.end),X=e.computed(()=>{const i=new Set;for(let c=r.value;c<P.value;c+=1)i.add(c);for(const c of t.pinnedKeys.slice(0,we.value)){const y=m.value.sizes.getIndex(c);y!==void 0&&i.add(y)}if(t.keepFocusedItem&&O.value!==void 0){const c=m.value.sizes.getIndex(O.value);c!==void 0&&i.add(c)}return[...i].sort((c,y)=>c-y)}),j=e.computed(()=>X.value.map(i=>{const c=t.items[i];return{item:c,index:i,key:_(c,i),bottom:Math.max(M.value.total,fe.value)-M.value.sizes.getOffset(i+1)+f.value}})),p=e.computed(()=>({height:Xe(t.height)})),b=e.computed(()=>({"vue-chat-virtual-scroll--contained":t.contain})),z=e.computed(()=>v.value&&!J.value?"polite":"off");function se(i){var c;return((c=t.newItemsLabel)==null?void 0:c.call(t,i))??`${i} new ${i===1?"message":"messages"}`}function N(i=M.value.total){var W;const c=s(i),y=Math.min(0,((W=g.value)==null?void 0:W.scrollTop)??0);return Math.max(0,Math.min(c,c+y+Z))}function ge(i=!1){if(ae||(J.value||ee)&&!i||Z===0)return;ae=!0;const c=te,y=++K;f.value=0,e.nextTick(()=>{if(y!==K)return;ae=!1;const W=g.value;!W||c!==te||Z===0||(Z=0,W.scrollTop=Math.min(0,w.value-s()),Q=W.scrollTop,w.value=N(),l(),D())})}function ce(i){const c=g.value;if(c){if(Z+=i,w.value=N(),Z===0||s()===0){Z=0,f.value=0;return}(J.value||ee)&&!ae?(f.value=Z,c.scrollTop>=-1&&ge(!0)):ge()}}function Se(){ie=void 0,ee=void 0}function $e(){if(!t.keepFocusedItem){O.value=void 0;return}const i=document.activeElement,c=i instanceof Element?i.closest(".vue-chat-virtual-scroll__item"):null;O.value=c?$.get(c):void 0}function Le(){$e()}function nt(){e.nextTick($e)}function Ze(i){const c=Math.max(0,Math.floor(i));c!==I.value&&(I.value=c,U&&x("newItemsChange",c))}function Oe(){Ze(0)}function Ye(){x("visibleChange",{scrollTop:N(),startIndex:G.value.start,endIndex:G.value.end})}function l(){const i=g.value;if(!i)return;const y=Math.max(0,M.value.total-N()-i.clientHeight)<=Math.max(0,t.bottomThreshold);y!==v.value&&(v.value=y,U&&x("bottomChange",y)),y&&Oe()}function o(){var i;d.value=((i=g.value)==null?void 0:i.clientHeight)??0,U&&(w.value=N()),R(g.value,t.height),e.nextTick(()=>{l(),D()})}function h(){var i,c;ie&&Q!==void 0&&Math.abs((((i=g.value)==null?void 0:i.scrollTop)??0)-Q)>1&&Se(),w.value=N(),Z!==0&&(((c=g.value)==null?void 0:c.scrollTop)??0)>=-1&&ge(!0),T(),l(),x("scroll",{scrollTop:w.value,startIndex:r.value,endIndex:P.value}),D()}function D(){const i=g.value;!U||!i||!t.hasOlder||t.loadingOlder||A===t.items.length||N()<=Math.max(0,t.loadOlderThreshold)&&(A=t.items.length,x("loadOlder"))}function he(i){const c=i.borderBoxSize;if(c){const y=Array.isArray(c)?c[0]:c;if(y!=null&&y.blockSize)return y.blockSize}return i.contentRect.height}function ze(i){const c=M.value.total,y=N(),W=!J.value&&!ee&&v.value&&t.stickToBottom&&(U||t.initialScroll==="bottom"),ke=Y(y+fe.value-1),Me=!W&&y<=0;let Ie=0,Ce=!1;for(const{key:Qe,height:Ke}of i){if(!Number.isFinite(Ke)||Ke<=0)continue;const Ae=m.value.sizes.getIndex(Qe);if(Ae===void 0)continue;const Re=M.value.sizes.getSize(Ae);L.add(Qe),!(Math.abs(Re-Ke)<.5)&&(Ae<=ke&&(Ie+=Ke-Re),M.value.sizes.setSize(Ae,Ke),Ce=!0)}if(!Ce)return;a.value+=1;const Ve=s()-s(c),Ne=ie&&m.value.sizes.getIndex(ie.key),at=Ne!==void 0&&ie?dt(Ne,ie.align):W?s():Me?0:y+Ie;ce(at-y-Ve),e.nextTick(l)}function be(i){const c=[];for(const y of i){const W=$.get(y.target);W!==void 0&&c.push({key:W,height:he(y)})}ze(c)}function Ee(){const i=[];for(const c of B){const y=$.get(c);y!==void 0&&c.isConnected&&i.push({key:y,height:c.getBoundingClientRect().height})}B.clear(),ze(i)}function He(i,c){i instanceof HTMLElement&&$.get(i)!==c&&($.set(i,c),t.syncMeasurement&&!L.has(c)&&B.add(i),V==null||V.observe(i))}function kt(){for(const[i]of $)i.isConnected||(V==null||V.unobserve(i),$.delete(i),B.delete(i))}function Ue(i,c,y=!1){const W=g.value;if(!W)return;const ke=N(),Me=f.value!==0,Ie=++te;K+=1,ae=!1,ie=void 0;const Ce=c.behavior??"auto";ee=Ce==="smooth"?()=>ct(i):void 0,Z=0,f.value=0,H(!1),ve(),Ce==="auto"&&(w.value=i);const Ve=()=>{g.value!==W||Ie!==te||(Me&&Ce!=="auto"&&(W.scrollTop=ke-s()),y&&Ce==="auto"?W.scrollTop=i-s():W.scrollTo({...c,top:i-s(),behavior:Ce}),Q=W.scrollTop,Ce==="auto"?w.value=N():T(),e.nextTick(l))};Me?e.nextTick(Ve):Ve()}function ct(i,c={}){const y=g.value;if(!y)return;const W=Math.max(0,M.value.total-y.clientHeight),ke=Math.min(Math.max(0,Number.isFinite(i)?i:0),W);Ue(ke,c)}function dt(i,c){const y=M.value.sizes.getSize(i);let W=M.value.sizes.getOffset(i);return c==="center"?W-=(fe.value-y)/2:c==="end"&&(W-=fe.value-y),Math.max(0,Math.min(W,s()))}function lt(i,c={}){if(!g.value||t.items.length===0)return;const y=Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(i)?i:0))),{align:W="start",...ke}=c;Ue(dt(y,W),ke);const Me=m.value.sizes.getKey(y);c.behavior==="smooth"?ee=()=>{const Ie=m.value.sizes.getIndex(Me);Ie!==void 0&<(Ie,{align:W})}:ie={key:Me,align:W}}function bt(i,c={}){const y=m.value.sizes.getIndex(i);y!==void 0&<(y,c)}function zt(){return N()}function It(i="auto"){Ue(0,{behavior:i})}function Je(i="auto"){const c=g.value;if(!c)return;const y=Math.max(0,M.value.total-c.clientHeight);Ue(y,{behavior:i},!0),i==="smooth"&&(ee=()=>Je())}const ft=e.ref(0);function Bt(){ft.value+=1}return e.watch(()=>{const i=t.items.length;return[t.items,i,i>0?_(t.items[0],0):void 0,i>0?_(t.items[Math.floor(i/2)],Math.floor(i/2)):void 0,i>0?_(t.items[i-1],i-1):void 0,t.itemKey,t.estimatedItemSize,t.estimateItemSize,t.itemsVersion,ft.value]},async(i,c)=>{const y=m.value.sizes,W=y.length,ke=y.total,Me=N(ke),Ie=y.findIndex(Me+fe.value-1),Ce=y.getKey(Ie),Ve=y.getOffset(Ie+1),Ne=t.items.length,at=i[5]!==c[5]||i[6]!==c[6]||i[7]!==c[7],Qe=i[8]!==c[8]||i[9]!==c[9];function Ke(Te){if(W===0)return!0;const Be=new Set([0,Math.floor(W/2),W-1]);for(const Fe of Be){const _e=Te+Fe;if(_e>=Ne||y.getKey(Fe)!==_(t.items[_e],_e))return!1}return!0}const Ae=Ne-W;let Re="rebuild";!at&&!Qe&&Ae>0&&(Ke(0)?Re="append":Ke(Ae)&&(Re="prepend"));let De=y;Re==="append"?De.append(t.items.slice(W).map((Te,Be)=>{const Fe=W+Be;return{key:_(Te,Fe),size:ne(Te,Fe)}})):Re==="prepend"?De.prepend(t.items.slice(0,Ae).map((Te,Be)=>({key:_(Te,Be),size:ne(Te,Be)}))):De=oe(y),m.value={sizes:De};const ot=Re==="append"?Array.from({length:Ae},(Te,Be)=>W+Be):[],it=ot.some(Te=>{var Be;return((Be=t.forceStickToBottom)==null?void 0:Be.call(t,t.items[Te],Te))===!0})||!J.value&&!ee&&v.value&&t.stickToBottom;ot.length>0&&!it&&Ze(I.value+ot.length);const mt=Ce===void 0?void 0:De.getIndex(Ce),Et=s()-s(ke);for(const Te of L)De.hasKey(Te)||L.delete(Te);if(De.length===0||mt===void 0){Z=0,f.value=0,w.value=it?s():Math.min(Me,s());const Te=w.value,Be=te;await e.nextTick(),Be===te&&m.value.sizes===De&&Ue(Te,{},!0)}else{const Te=De.getOffset(mt+1)-Ve,Be=it?s():Me+Te;ce(Be-Me-Et),await e.nextTick()}g.value&&(w.value=N(),l(),D())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([i])=>{i||(A=-1),await e.nextTick(),D()}),e.watch(()=>t.syncMeasurement,i=>{if(B.clear(),!!i){for(const[c,y]of $)L.has(y)||B.add(c);e.nextTick(Ee)}}),e.watch(G,()=>{U&&Ye()},{flush:"post"}),e.onMounted(()=>{if(window.addEventListener("pointerup",q,{passive:!0}),window.addEventListener("pointercancel",q,{passive:!0}),o(),g.value&&(g.value.scrollTop=t.initialScroll==="bottom"?0:-s(),w.value=N()),Ee(),typeof ResizeObserver<"u"){S=new ResizeObserver(o),V=new ResizeObserver(be),g.value&&S.observe(g.value);for(const[i]of $)V.observe(i)}e.nextTick(()=>{U=!0,l(),D(),Ye()})}),e.onUpdated(()=>{kt(),Ee()}),e.onBeforeUnmount(()=>{U=!1,window.removeEventListener("pointerup",q),window.removeEventListener("pointercancel",q),ve(),Se(),Z=0,te+=1,K+=1,S&&(S.disconnect(),S=void 0),V&&(V.disconnect(),V=void 0),$.clear(),B.clear()}),u({isAtBottom:v,isScrolling:J,newItemsCount:I,clearNewItems:Oe,refresh:Bt,getScrollPosition:zt,scrollTo:ct,scrollToIndex:lt,scrollToKey:bt,scrollToTop:It,scrollToBottom:Je}),(i,c)=>(e.openBlock(),e.createElementBlock("div",{class:"vue-chat-virtual-scroll__root",style:e.normalizeStyle(p.value)},[e.createElementVNode("div",e.mergeProps(i.$attrs,{ref_key:"viewport",ref:g,class:["vue-chat-virtual-scroll",b.value],role:"log","aria-label":n.ariaLabel,"aria-live":z.value,"aria-relevant":"additions","aria-atomic":"false",tabindex:"0",onScrollPassive:h,onScrollendPassive:c[0]||(c[0]=(...y)=>e.unref(E)&&e.unref(E)(...y)),onPointerdownPassive:c[1]||(c[1]=(...y)=>e.unref(F)&&e.unref(F)(...y)),onWheelPassive:c[2]||(c[2]=(...y)=>e.unref(xe)&&e.unref(xe)(...y)),onKeydown:c[3]||(c[3]=(...y)=>e.unref(C)&&e.unref(C)(...y)),onFocusin:Le,onFocusout:nt,onTouchstartPassive:c[4]||(c[4]=(...y)=>e.unref(le)&&e.unref(le)(...y)),onTouchendPassive:c[5]||(c[5]=(...y)=>e.unref(re)&&e.unref(re)(...y)),onTouchcancelPassive:c[6]||(c[6]=(...y)=>e.unref(re)&&e.unref(re)(...y))}),[e.createElementVNode("div",{class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${Math.max(fe.value,M.value.total+f.value)}px`})},[n.loadingOlder?(e.openBlock(),e.createElementBlock("div",At,[e.createElementVNode("div",null,[e.renderSlot(i.$slots,"loadingOlder",{},()=>[c[8]||(c[8]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(j.value,({item:y,index:W,key:ke,bottom:Me})=>(e.openBlock(),e.createElementBlock("div",{key:ke,ref_for:!0,ref:Ie=>He(Ie,ke),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${-Me}px)`}),role:"article","aria-posinset":W+1,"aria-setsize":n.items.length},[e.renderSlot(i.$slots,"default",{item:y,index:W})],12,Dt))),128)),n.items.length?e.createCommentVNode("",!0):e.renderSlot(i.$slots,"empty",{},void 0,void 0,1)],4)],16,Pt),n.showNewItemsIndicator&&I.value>0?(e.openBlock(),e.createElementBlock("div",Nt,[e.renderSlot(i.$slots,"newItems",{count:I.value,scrollToBottom:Je},()=>[e.createElementVNode("button",{type:"button",onClick:c[7]||(c[7]=y=>Je("smooth"))},e.toDisplayString(se(I.value)),1)])])):e.createCommentVNode("",!0)],4))}});function tt(n){const u=e.ref(),k=e.ref(0),t=e.ref(!1),x=e.ref(!1),g=e.computed(()=>Math.max(1,n.threshold())),w=e.computed(()=>n.refreshing()||x.value?g.value:k.value),f=e.computed(()=>Math.min(1,k.value/g.value)),d=e.computed(()=>n.refreshing()||x.value?"Refreshing…":f.value>=1?"Release to refresh":"Pull to refresh");function a(){u.value=void 0,t.value=!1,k.value=0}function v(L){var S;const $=L.currentTarget,B=((S=n.scrollTop)==null?void 0:S.call(n))??$.scrollTop;!n.enabled()||n.refreshing()||B>0||L.touches.length!==1||(u.value=L.touches[0].clientY,t.value=!0)}function I(L){var V;if(u.value===void 0||!t.value)return;const $=L.currentTarget;if((((V=n.scrollTop)==null?void 0:V.call(n))??$.scrollTop)>0||L.touches.length!==1){a();return}const S=L.touches[0].clientY-u.value;if(S<=0){k.value=0;return}L.preventDefault(),k.value=Math.min(S*.5,g.value*2)}function O(){if(u.value===void 0)return;const L=k.value>=g.value&&n.enabled()&&!n.refreshing();if(u.value=void 0,t.value=!1,!L){k.value=0;return}k.value=g.value,x.value=!0,n.onRefresh(),e.nextTick(()=>{n.refreshing()||(x.value=!1,k.value=0)})}return e.watch(()=>n.refreshing(),(L,$)=>{L?(x.value=!1,k.value=g.value):$&&(x.value=!1,k.value=0)}),{pulling:t,pullDistance:k,pullOffset:w,pullProgress:f,refreshMessage:d,refreshThreshold:g,handleTouchStart:v,handleTouchMove:I,handleTouchEnd:O,handleTouchCancel:a}}const Kt=["aria-label"],Rt=["aria-posinset","aria-setsize"],ut=e.defineComponent({name:"DynamicVirtualScroll",__name:"DynamicVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Dynamic virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(n,{expose:u,emit:k}){const t=n,x=k,{pulling:g,pullDistance:w,pullOffset:f,pullProgress:d,refreshMessage:a,refreshThreshold:v,handleTouchStart:I,handleTouchMove:O,handleTouchEnd:L,handleTouchCancel:$}=tt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh")}),B=e.ref(),S=e.ref(0),V=e.ref(0),A=e.ref(0),U=new Map,Z=new Map;let ae,K,ie=-1;const Q=et(),{getItemKey:ee}=We({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),te=e.computed(()=>Math.max(1,t.estimatedItemSize)),R=e.computed(()=>Math.max(1,t.loadingItemSize??te.value)),_=e.computed(()=>Math.max(0,Math.floor(t.overscan))),de=e.computed(()=>V.value>0?V.value:typeof t.height=="number"?Math.max(0,t.height):te.value),me=e.computed(()=>{A.value;const m=new Array(t.items.length+1),M=new Array(t.items.length);m[0]=0;for(let s=0;s<t.items.length;s+=1){const Y=ee(t.items[s],s),G=U.get(Y)??te.value;M[s]=G,m[s+1]=m[s]+G}return{offsets:m,sizes:M,total:m[t.items.length]??0}}),ue=e.computed(()=>me.value.total+(t.loading?R.value:0)),J=e.computed(()=>{const m=new Map;return t.items.forEach((M,s)=>{m.set(ee(M,s),s)}),m});function H(m){if(t.items.length===0)return 0;const M=me.value.offsets;let s=0,Y=t.items.length;for(;s<Y;){const G=Math.floor((s+Y)/2);M[G+1]<=m?s=G+1:Y=G}return Math.min(s,t.items.length-1)}const T=e.computed(()=>Math.max(0,H(S.value)-_.value)),E=e.computed(()=>{if(t.items.length===0)return 0;const m=H(S.value+de.value)+1;return Math.min(t.items.length,m+_.value)}),le=e.computed(()=>t.items.slice(T.value,E.value).map((m,M)=>{const s=T.value+M;return{item:m,index:s,key:ee(m,s),top:me.value.offsets[s]}})),re=e.computed(()=>({height:Xe(t.height)}));function xe(){var m;V.value=((m=B.value)==null?void 0:m.clientHeight)??0,Q(B.value,t.height),e.nextTick(F)}function C(m){S.value=m.currentTarget.scrollTop,x("scroll",{scrollTop:S.value,startIndex:T.value,endIndex:E.value}),F()}function F(){const m=B.value;if(!m||!t.hasMore||t.loading||ie===t.items.length)return;const M=Math.max(0,t.loadMoreThreshold);ue.value-m.scrollTop-m.clientHeight<=M&&(ie=t.items.length,x("loadMore"))}function q(m){const M=m.borderBoxSize;if(M){const s=Array.isArray(M)?M[0]:M;if(s!=null&&s.blockSize)return s.blockSize}return m.contentRect.height}function ve(m){const M=me.value;let s=0,Y=!1;for(const G of m){const ye=G.target,r=Z.get(ye),P=q(G);if(r===void 0||P<=0)continue;const X=U.get(r)??te.value;if(Math.abs(X-P)<.5)continue;const j=J.value.get(r);j!==void 0&&M.offsets[j+1]<=S.value&&(s+=P-X),U.set(r,P),Y=!0}Y&&(A.value+=1,e.nextTick(F),s!==0&&e.nextTick(()=>{const G=B.value;G&&(G.scrollTop+=s,S.value=G.scrollTop)}))}function we(m,M){m instanceof HTMLElement&&(Z.set(m,M),K==null||K.observe(m))}function pe(){for(const[m]of Z)m.isConnected||(K==null||K.unobserve(m),Z.delete(m))}function fe(m,M={}){const s=B.value;if(!s)return;const Y=Math.max(0,ue.value-s.clientHeight),G=Math.min(Math.max(0,Number.isFinite(m)?m:0),Y),ye=M.behavior??"auto";ye==="auto"&&(S.value=G),s.scrollTo({...M,top:G,behavior:ye})}function ne(m,M={}){const s=B.value;if(!s||t.items.length===0)return;const Y=Math.min(t.items.length-1,Math.max(0,Math.floor(m))),{align:G="start",...ye}=M;let r=me.value.offsets[Y];const P=me.value.sizes[Y];G==="center"?r-=(s.clientHeight-P)/2:G==="end"&&(r-=s.clientHeight-P);const X=Math.max(0,Math.min(r,ue.value-s.clientHeight)),j=ye.behavior??"auto";j==="auto"&&(S.value=X),s.scrollTo({...ye,top:X,behavior:j})}function oe(m="auto"){var M;(M=B.value)==null||M.scrollTo({top:0,behavior:m})}return e.watch(()=>t.itemKey,()=>{U.clear(),A.value+=1}),e.watch(()=>t.items.length,async()=>{const m=new Set(t.items.map((Y,G)=>ee(Y,G)));for(const Y of U.keys())m.has(Y)||U.delete(Y);A.value+=1,await e.nextTick();const M=B.value;if(!M)return;const s=Math.max(0,ue.value-M.clientHeight);M.scrollTop>s&&(M.scrollTop=s,S.value=s),F()}),e.watch(()=>[t.hasMore,t.loading],async([m])=>{m||(ie=-1),await e.nextTick(),F()}),e.onMounted(()=>{if(xe(),typeof ResizeObserver<"u"){ae=new ResizeObserver(xe),K=new ResizeObserver(ve),B.value&&ae.observe(B.value);for(const[m]of Z)K.observe(m)}e.nextTick(F)}),e.onUpdated(pe),e.onBeforeUnmount(()=>{ae&&(ae.disconnect(),ae=void 0),K&&(K.disconnect(),K=void 0),Z.clear()}),u({scrollTo:fe,scrollToIndex:ne,scrollToTop:oe}),(m,M)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:B,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(g)}]),style:e.normalizeStyle(re.value),role:"list","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:C,onTouchstartPassive:M[0]||(M[0]=(...s)=>e.unref(I)&&e.unref(I)(...s)),onTouchmove:M[1]||(M[1]=(...s)=>e.unref(O)&&e.unref(O)(...s)),onTouchend:M[2]||(M[2]=(...s)=>e.unref(L)&&e.unref(L)(...s)),onTouchcancel:M[3]||(M[3]=(...s)=>e.unref($)&&e.unref($)(...s))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(v)}px`,transform:`translateY(${e.unref(f)-e.unref(v)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$slots,"refresh",{pullDistance:e.unref(w),progress:e.unref(d),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(a)),1)])],4)):e.createCommentVNode("",!0),n.items.length||n.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${ue.value}px`,transform:`translateY(${e.unref(f)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(le.value,({item:s,index:Y,key:G,top:ye})=>(e.openBlock(),e.createElementBlock("div",{key:G,ref_for:!0,ref:r=>we(r,G),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${ye}px)`}),role:"listitem","aria-posinset":Y+1,"aria-setsize":n.items.length},[e.renderSlot(m.$slots,"default",{item:s,index:Y})],12,Rt))),128)),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${R.value}px`,transform:`translateY(${me.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$slots,"loading",{},()=>[M[4]||(M[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(f)}px)`})},[e.renderSlot(m.$slots,"empty")],4))],46,Kt))}}),Wt=["aria-label"],Ht=["aria-current","aria-posinset","aria-setsize"],Ft={key:1,class:"vue-short-media-feed__empty"},Ot=36,Yt=700,pt=e.defineComponent({name:"ShortMediaFeed",__name:"ShortMediaFeed",props:{items:{},activeIndex:{default:0},buffer:{default:1},height:{default:"100dvh"},itemKey:{default:void 0},ariaLabel:{default:"Short media feed"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(n,{expose:u,emit:k}){const t=n,x=k,g=e.ref(),w=e.ref(0),f=e.ref(Q(t.activeIndex));let d,a=-1,v=0,I=!1,O;const L=et(),{getItemKey:$}=We({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),B=e.computed(()=>Math.max(0,Math.floor(t.buffer))),S=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),V=e.computed(()=>w.value>0?w.value:typeof t.height=="number"?Math.max(1,t.height):0),A=e.computed(()=>Math.max(0,f.value-B.value)),U=e.computed(()=>Math.min(t.items.length,f.value+B.value+1)),Z=e.computed(()=>(V.value>0?t.items:[]).slice(A.value,U.value).map((T,E)=>({item:T,index:A.value+E}))),ae=e.computed(()=>A.value*V.value),K=e.computed(()=>(t.items.length-U.value)*V.value),ie=e.computed(()=>({height:Xe(t.height)}));function Q(T){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(T)?T:0)))}function ee(){if(!t.hasMore||t.loading||a===t.items.length)return;(t.items.length===0?0:t.items.length-1-f.value)<=S.value&&(a=t.items.length,x("loadMore"))}function te(T){const E=Q(T);E===f.value||t.items.length===0||(f.value=E,x("update:activeIndex",E),x("change",{index:E,item:t.items[E]}),E===0&&x("reachStart"),E===t.items.length-1&&x("reachEnd"),ee())}function R(T,E={}){const le=g.value;le&&(typeof le.scrollTo=="function"?le.scrollTo({...E,top:T}):le.scrollTop=T)}function _(T,E={}){if(t.items.length===0)return;const le=Q(T);te(le),R(le*V.value,E)}function de(T){if(V.value<=0)return;const E=T.currentTarget.scrollTop;te(Math.round(E/V.value))}function me(T){let E;T.key==="ArrowDown"||T.key==="PageDown"?E=f.value+1:T.key==="ArrowUp"||T.key==="PageUp"?E=f.value-1:T.key==="Home"?E=0:T.key==="End"&&(E=t.items.length-1),E!==void 0&&(T.preventDefault(),_(E,{behavior:"smooth"}))}function ue(T){return T.deltaMode===WheelEvent.DOM_DELTA_LINE?T.deltaY*16:T.deltaMode===WheelEvent.DOM_DELTA_PAGE?T.deltaY*(V.value||1):T.deltaY}function J(T){if(T.ctrlKey||Math.abs(T.deltaX)>Math.abs(T.deltaY)||t.items.length===0||V.value<=0||(T.preventDefault(),I))return;const E=ue(T);if(E*v<0&&(v=0),v+=E,Math.abs(v)<Ot)return;const le=v>0?1:-1;v=0;const re=f.value+le;re<0||re>=t.items.length||(I=!0,_(re,{behavior:"smooth"}),O=setTimeout(()=>{I=!1},Yt))}function H(){var E;const T=((E=g.value)==null?void 0:E.clientHeight)??0;L(g.value,t.height),!(T<=0||T===w.value)&&(w.value=T,e.nextTick(()=>{R(f.value*T)}))}return e.watch(()=>t.activeIndex,async T=>{const E=Q(T);E!==f.value&&(f.value=E,await e.nextTick(),R(E*V.value),ee())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([T])=>{T||(a=-1),await e.nextTick(),ee()}),e.watch(()=>t.items.length,async()=>{const T=Q(f.value);t.items.length===0?f.value!==0&&(f.value=0,x("update:activeIndex",0)):te(T),await e.nextTick(),R(T*V.value),ee()}),e.onMounted(async()=>{H(),typeof ResizeObserver<"u"&&g.value&&(d=new ResizeObserver(H),d.observe(g.value)),await e.nextTick(),R(f.value*V.value),ee()}),e.onBeforeUnmount(()=>{d&&(d.disconnect(),d=void 0),O&&(clearTimeout(O),O=void 0)}),u({scrollToIndex:_}),(T,E)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:g,class:"vue-short-media-feed",style:e.normalizeStyle(ie.value),role:"list","aria-orientation":"vertical","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:de,onWheel:J,onKeydown:me},[n.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[ae.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${ae.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Z.value,({item:le,index:re})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref($)(le,re),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${V.value}px`}),role:"listitem","aria-current":re===f.value?"true":void 0,"aria-posinset":re+1,"aria-setsize":n.items.length},[e.renderSlot(T.$slots,"default",{item:le,index:re,active:re===f.value})],12,Ht))),128)),K.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${K.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",Ft,[e.renderSlot(T.$slots,"empty")]))],44,Wt))}}),Ut=["aria-label"],jt=e.defineComponent({__name:"SkeletonLoader",props:{width:{default:"100%"},height:{default:16},variant:{default:"rounded"},animated:{type:Boolean,default:!0},ariaLabel:{default:"Loading…"}},setup(n){const u=n;function k(x){return typeof x=="number"?`${Math.max(0,x)}px`:x}const t=e.computed(()=>({width:k(u.width),height:k(u.height)}));return(x,g)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vue-skeleton-loader",[`vue-skeleton-loader--${n.variant}`,{"vue-skeleton-loader--animated":n.animated}]]),style:e.normalizeStyle(t.value),role:"status","aria-label":n.ariaLabel},null,14,Ut))}}),qt=(n,u)=>{const k=n.__vccOpts||n;for(const[t,x]of u)k[t]=x;return k},gt=qt(jt,[["__scopeId","data-v-fc92f61f"]]),Gt=.006;function Xt(n,u){const k=n*Math.abs(n)/(2*Gt),t=u*2;return Math.max(-t,Math.min(t,k))}function Zt(n,u,k,t=250){const x=u-n,g=Math.abs(k);if(!(g>=.1&&x*k>0))return{keyframes:[{transform:`translate3d(${n}px, 0, 0)`},{transform:`translate3d(${u}px, 0, 0)`}],options:{duration:Math.round(Math.max(120,Math.min(650,(190+Math.abs(x)*.35)*t/250))),easing:"cubic-bezier(0.22, 1, 0.36, 1)",fill:"forwards"}};const f=Math.round(Math.max(180,Math.min(650,2*Math.abs(x)/g*t/250))),d=Math.min(3,g*f/Math.abs(x)),a=Math.ceil(f/8);return{keyframes:Array.from({length:a+1},(I,O)=>{const L=O/a,$=L*L,B=$*L,S=d*(B-2*$+L)+(-2*B+3*$),V=n+x*S;return{offset:L,transform:`translate3d(${V}px, 0, 0)`}}),options:{duration:f,easing:"linear",fill:"forwards"}}}function Jt(n){const u=e.ref("idle"),k=e.computed(()=>u.value!=="idle"),t=e.computed(()=>u.value==="dragging"),x=e.ref(!1);let g,w="",f=0,d=0,a=0,v=0,I=0,O=0,L=0,$=0,B=0,S,V,A,U=0,Z=!1,ae,K,ie="",Q=!1,ee,te=!1;const R=()=>n.rtl()?-1:1,_=()=>{var r;return(((r=n.viewport())==null?void 0:r.scrollLeft)??0)*R()};function de(r,P){const X=n.viewport();if(!X)return;const j=r*R();X.scrollTo?X.scrollTo(P===void 0?{left:j}:{left:j,behavior:P}):X.scrollLeft=j}function me(){const r=n.viewport();r&&(Q||(ie=r.style.scrollSnapType),Q=!0,r.style.scrollSnapType="none")}function ue(){const r=U;e.nextTick(()=>{te||r!==U||u.value!=="idle"||(n.viewport()&&(n.viewport().style.scrollSnapType=ie),Q=!1)})}function J(){const r=n.track();r&&(r.style.transform="",r.style.willChange="")}function H(){const r=n.track();if(!r||!S)return I;const P=getComputedStyle(r).transform,X=P.slice(P.indexOf("(")+1,-1).split(",").map(Number),j=P.startsWith("matrix3d")?X[12]:X[4];return Number.isFinite(j)?j:I}function T(){return S?v-H()*R():x.value?v-I*R():_()}function E(){const r=S;S=void 0,r&&(r.onfinish=null,r.oncancel=null,r.cancel()),A!==void 0&&cancelAnimationFrame(A),A=void 0}function le(){var X;const r=g;g=void 0;const P=n.viewport();r!==void 0&&((X=P==null?void 0:P.hasPointerCapture)!=null&&X.call(P,r))&&P.releasePointerCapture(r),window.removeEventListener("pointermove",fe),window.removeEventListener("pointerup",oe),window.removeEventListener("pointercancel",m),window.removeEventListener("blur",M)}function re(r,P){const X=++U;me(),u.value="committing",E(),J(),x.value=!1,I=0;const j=n.canonical(r);de(j,P),n.onPosition(j),n.onCommit(r),e.nextTick(()=>{te||X!==U||(de(j),u.value="idle",ue())})}function xe(r=!0){K!==void 0&&clearTimeout(K),K=void 0;const P=S!==void 0||I!==0,X=r?T():_();return++U,me(),le(),E(),J(),x.value=!1,V=void 0,I=0,u.value="idle",r&&(P&&de(X),n.onPosition(X)),ue(),X}function C(){S&&(n.onPosition(T()),A=requestAnimationFrame(C))}function F(){return typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}function q(r,P,X){const j=n.track(),p=(v-P)*R();if(!(j!=null&&j.animate)||F()||n.settleDuration()===0||Math.abs(p-I)<1){J(),x.value=!1,I=0,u.value="idle",!(j!=null&&j.animate)&&!F()&&n.settleDuration()!==0?(n.onCommit(r),V=P,de(P,"smooth"),ue()):re(r);return}++U,me(),u.value="settling",x.value=!0;const b=Zt(I,p,X,n.settleDuration()),z=j.animate(b.keyframes,b.options);S=z,z.onfinish=()=>{S===z&&re(r)},z.oncancel=()=>{S===z&&xe()},A=requestAnimationFrame(C)}function ve(r,P="smooth",X=0,j=!1){const p=xe(),b=n.target(r,p,X);n.onCommit(r),Math.abs(b-p)<.5||P!=="smooth"||F()?re(r,P):j?(v=_(),I=(v-p)*R(),q(r,b,0)):(u.value="settling",V=b,de(b,P),n.viewport()&&(n.viewport().style.scrollSnapType=ie),Q=!1)}function we(r){const P=r.currentTarget.scrollLeft*R();if(!(S||u.value==="dragging"||u.value==="committing")){if(n.onPosition(P),V!==void 0){if(Math.abs(P-V)>1)return;V=void 0,u.value="idle"}n.onCommit(n.indexAt(P))}}function pe(r){var j,p;if(g!==void 0||r.isPrimary===!1||r.pointerType==="mouse"&&(!n.mouseDrag()||r.button!==0)||!["mouse","touch","pen"].includes(r.pointerType)||(p=(j=r.target)==null?void 0:j.closest)!=null&&p.call(j,'input, textarea, select, [contenteditable="true"], [data-carousel-no-drag]'))return;V!==void 0&&de(_(),"auto");const P=T();S!==void 0?(I=H(),E(),n.track().style.transform=`translate3d(${I}px, 0, 0)`,x.value=!0):(I=0,v=_()),++U,V=void 0,u.value="pending",g=r.pointerId,w=r.pointerType,f=O=r.clientX,d=r.clientY,a=P,L=r.timeStamp,$=0,B=0,Z=!1,ae!==void 0&&clearTimeout(ae),window.addEventListener("pointermove",fe),window.addEventListener("pointerup",oe),window.addEventListener("pointercancel",m),window.addEventListener("blur",M)}function fe(r){var N,ge;if(g!==r.pointerId||r===ee)return;ee=r;const P=r.clientX-f,X=r.clientY-d,j=Number.isFinite(n.dragThreshold())?Math.max(1,n.dragThreshold()):8;if(u.value==="pending"){if(Math.max(Math.abs(P),Math.abs(X))<j)return;if(w!=="mouse"&&Math.abs(X)>=Math.abs(P)){xe();return}me(),u.value="dragging",(ge=(N=n.viewport())==null?void 0:N.setPointerCapture)==null||ge.call(N,r.pointerId)}if(u.value!=="dragging")return;r.cancelable&&r.preventDefault(),Z=!0;const p=r.timeStamp-L;if(p>0&&p<=80){const ce=Math.max(-2.5,Math.min(2.5,(r.clientX-O)/p));$=B===0?ce:$*.25+ce*.75,B+=1}else p>80&&($=0,B=0);O=r.clientX,L=r.timeStamp;let b=a-P*R();const[z,se]=n.limits();b<z&&(b=z+(b-z)*.35),b>se&&(b=se+(b-se)*.35),I=(v-b)*R(),A===void 0&&(A=requestAnimationFrame(()=>{A=void 0;const ce=n.track();!ce||u.value!=="dragging"||(ce.style.willChange="transform",ce.style.transform=`translate3d(${I}px, 0, 0)`,n.onPosition(v-I*R()))}))}function ne(r,P=!1){if(g===void 0||r&&g!==r.pointerId)return;const X=u.value==="dragging",j=I!==0;if(le(),A!==void 0&&cancelAnimationFrame(A),A=void 0,!X&&!j){u.value="idle",ue();return}const p=v-I*R(),b=r?Math.max(0,r.timeStamp-L):101,z=!P&&n.momentum()&&b<=100?$*Math.exp(-b/80):0,se=p-a,N=Math.min(80,Math.max(40,n.step()*.12)),ge=B>=2&&Math.abs(se)>=N?Xt(-z*R(),n.step()):0;let ce=n.indexAt(p+ge);const Se=n.indexAt(a),$e=Math.max(1,n.dragThreshold());!P&&X&&ce===Se&&Math.abs(se)>=$e&&(ce=Se+Math.sign(se));const Le=n.target(ce,p);n.onPosition(p),q(n.indexAt(Le),Le,z),ae!==void 0&&clearTimeout(ae),ae=setTimeout(()=>{Z=!1},0)}function oe(r){ne(r)}function m(r){ne(r,!0)}function M(){ne(void 0,!0)}function s(r){r.target===n.viewport()&&g===r.pointerId&&u.value==="dragging"&&ne(r,!0)}function Y(r){!Z||r.detail===0||(r.preventDefault(),r.stopPropagation(),Z=!1)}function G(){const r=S!==void 0||u.value==="dragging",P=xe();r&&n.onCommit(n.indexAt(P)),n.nativeSnap()||(K=setTimeout(()=>{if(K=void 0,te||u.value!=="idle")return;v=_(),I=0;const X=n.indexAt(v);q(X,n.target(X,v),0)},120))}function ye(r){g!==void 0&&r.preventDefault()}return e.onBeforeUnmount(()=>{xe(!1),te=!0,ae!==void 0&&clearTimeout(ae),n.viewport()&&(n.viewport().style.scrollSnapType=ie)}),{phase:u,busy:k,dragging:t,transformed:x,read:_,write:de,cancel:xe,commit:re,navigate:ve,displayedPosition:T,handleScroll:we,handlePointerDown:pe,handlePointerMove:fe,handlePointerUp:oe,handlePointerCancel:m,handleLostPointerCapture:s,handleClick:Y,handleWheel:G,handleDragStart:ye}}function Qt(n){let u;function k(){u!==void 0&&clearTimeout(u),u=void 0}function t(){if(k(),!n.enabled()||n.paused()||n.count()<2||n.atEnd()&&!n.loop())return;const x=Number.isFinite(n.delay())?Math.max(1,n.delay()):3e3;u=setTimeout(()=>{u=void 0,!n.paused()&&(n.atEnd()?n.rewind():n.advance(),t())},x)}return e.watch(()=>[n.enabled(),n.paused(),n.delay(),n.count(),n.loop(),n.atEnd()],t,{immediate:!0}),e.onBeforeUnmount(k),{start:t,stop:k}}function je(n,u){return u>0?(n%u+u)%u:0}function _t(n,u){const k=new Array(n.length+1);k[0]=0;for(let f=0;f<n.length;f+=1)k[f+1]=k[f]+n[f]+u;const t=k[n.length],x=Math.max(0,t-(n.length?u:0));function g(f){if(!n.length)return 0;let d=0,a=n.length-1;for(;d<a;){const v=Math.ceil((d+a)/2);k[v]<=f?d=v:a=v-1}return d}function w(f){const d=g(f),a=Math.min(n.length-1,d+1);return f-k[d]<=k[a]-f?d:a}return{offsets:k,cycleWidth:t,totalWidth:x,indexAt:g,nearestIndex:w}}const en=["dir","aria-label"],tn=["data-carousel-index","aria-label","aria-current","aria-hidden","inert"],nn={key:1,class:"vue-virtual-carousel__empty"},yt=e.defineComponent({name:"VirtualCarousel",__name:"VirtualCarousel",props:{items:{},activeIndex:{default:0},slidesPerView:{default:1},slidesToScroll:{default:1},gap:{default:0},buffer:{default:1},height:{default:"auto"},itemKey:{default:void 0},ariaLabel:{default:"Carousel"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2},autoplay:{type:Boolean,default:!1},autoplayDelay:{default:3e3},autoplayLoop:{type:Boolean,default:!0},pauseOnHover:{type:Boolean,default:!0},mouseDrag:{type:Boolean,default:!0},dragThreshold:{default:8},momentum:{type:Boolean,default:!0},settleDuration:{default:250},nativeSnap:{type:Boolean,default:!0},autoWidth:{type:Boolean,default:!1},estimatedItemWidth:{default:240},rtl:{type:Boolean,default:!1},loop:{type:Boolean,default:!1},keepAlive:{type:Boolean,default:!1},maxCachedItems:{default:20},pinnedIndexes:{default:()=>[]},responsive:{default:void 0}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(n,{expose:u,emit:k}){const t=n,x=k,g=e.ref(),w=e.ref(),f=e.ref(0),d=e.ref(0),a=e.ref(0),v=e.ref(!1),I=e.ref(!1),O=e.ref(),L=e.shallowRef([]),$=e.shallowRef([0,1]),B=e.shallowRef(new Map),S=e.shallowRef([]);let V,A,U=-1,Z=!1;const ae=new Map,K=new Map,{getItemKey:ie}=We({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),Q=e.computed(()=>t.items.map((l,o)=>ie(l,o))),ee=e.computed(()=>new Map(Q.value.map((l,o)=>[l,o]))),te=(l,o,h)=>Math.max(o,Math.floor(Number.isFinite(l)?l:h)),R=e.computed(()=>{const l=[...t.responsive??[]].sort((o,h)=>h.breakpoint-o.breakpoint).find(o=>f.value>=o.breakpoint);return{slidesPerView:te((l==null?void 0:l.slidesPerView)??t.slidesPerView,1,1),slidesToScroll:te((l==null?void 0:l.slidesToScroll)??t.slidesToScroll,1,1),gap:Math.max(0,Number.isFinite((l==null?void 0:l.gap)??t.gap)?(l==null?void 0:l.gap)??t.gap:0)}}),_=e.computed(()=>te(t.buffer,0,1)),de=e.computed(()=>te(t.maxCachedItems,0,20)),me=e.computed(()=>f.value>0?Math.max(1,(f.value-(R.value.slidesPerView-1)*R.value.gap)/R.value.slidesPerView):0),ue=e.computed(()=>t.items.map((l,o)=>t.autoWidth?B.value.get(Q.value[o])??Math.max(1,Number.isFinite(t.estimatedItemWidth)?t.estimatedItemWidth:240):me.value)),J=e.computed(()=>_t(ue.value,R.value.gap)),H=e.computed(()=>t.loop&&t.items.length>1&&J.value.totalWidth>f.value),T=e.computed(()=>Math.max(0,J.value.totalWidth-f.value)),E=e.computed(()=>{if(H.value)return t.items.length-1;if(!t.autoWidth)return Math.max(0,t.items.length-R.value.slidesPerView);if(T.value<=0)return 0;const l=J.value.indexAt(T.value),o=J.value.offsets[l]<T.value-.01?l+1:l;return Math.min(t.items.length-1,o)}),le=e.computed(()=>H.value?J.value.cycleWidth*3:J.value.totalWidth),re=e.computed(()=>({height:Xe(t.height)})),xe=e.computed(()=>({width:`${le.value}px`,height:t.height==="auto"?`${Math.max(1,d.value)}px`:"100%"}));function C(l){const o=Math.floor(Number.isFinite(l)?l:0);return H.value?je(o,t.items.length):Math.max(0,Math.min(E.value,o))}a.value=C(t.activeIndex);function F(l){const o=J.value.offsets[C(l)]??0;return H.value?J.value.cycleWidth+o:Math.min(T.value,o)}function q(l){const o=J.value.cycleWidth;return H.value&&o>0?(l%o+o)%o:Math.max(0,l)}function ve(l){if(!H.value&&l>=T.value-1&&T.value>0)return E.value;const o=q(l);return H.value&&o>(J.value.offsets[t.items.length-1]+J.value.cycleWidth)/2?0:C(J.value.nearestIndex(o))}function we(l,o,h=0){const D=F(l);if(!H.value)return D;const he=J.value.cycleWidth,ze=[D-he,D,D+he],be=ze.filter(Ee=>h>0?Ee>o+.5:h<0?Ee<o-.5:!0);return(be.length?be:ze).sort((Ee,He)=>Math.abs(Ee-o)-Math.abs(He-o))[0]}function pe(l){if(!H.value)return J.value.indexAt(Math.max(0,l));const o=J.value.cycleWidth,h=Math.floor(l/o);return h*t.items.length+J.value.indexAt(l-h*o)}function fe(l){return H.value?Math.floor(l/t.items.length)*J.value.cycleWidth+J.value.offsets[je(l,t.items.length)]:J.value.offsets[l]??0}function ne(l){if(t.items.length===0){L.value=[],$.value=[0,0];return}if(f.value<=0)return;const o=pe(l),h=pe(l+f.value-.01);($.value[0]!==o||$.value[1]!==h+1)&&($.value=[o,h+1]);const D=[];for(let he=o;he<=h;he+=1){const ze=H.value?je(he,t.items.length):he;if(ze<0||ze>=t.items.length)continue;const be=fe(he);be+ue.value[ze]>l+.01&&be<l+f.value-.01&&!D.includes(ze)&&D.push(ze)}D.join(",")!==L.value.join(",")&&(L.value=D)}function oe(l){if(t.autoWidth){const o=F(a.value),h=we(l,o);return h+ue.value[l]>o&&h<o+f.value}return H.value?je(l-a.value,t.items.length)<R.value.slidesPerView:l>=a.value&&l<a.value+R.value.slidesPerView}function m(){if(!t.hasMore||t.loading||U===t.items.length)return;const l=t.autoWidth?L.value.length:R.value.slidesPerView;t.items.length-a.value-Math.max(1,l)<=te(t.loadMoreThreshold,0,2)&&(U=t.items.length,x("loadMore"))}function M(l){const o=C(l);!t.items.length||o===a.value||(a.value=o,x("update:activeIndex",o),x("change",{index:o,item:t.items[o]}),o===0&&x("reachStart"),o===E.value&&x("reachEnd"),m())}const s=Jt({viewport:()=>g.value,track:()=>w.value,rtl:()=>t.rtl,mouseDrag:()=>t.mouseDrag,nativeSnap:()=>t.nativeSnap&&!H.value,dragThreshold:()=>Math.max(1,Number.isFinite(t.dragThreshold)?t.dragThreshold:8),momentum:()=>t.momentum,settleDuration:()=>Math.max(0,Number.isFinite(t.settleDuration)?t.settleDuration:250),limits:()=>[0,H.value?Math.max(0,le.value-f.value):T.value],step:()=>ue.value[a.value]+R.value.gap||1,indexAt:ve,target:we,canonical:F,onPosition:ne,onCommit:M}),{phase:Y,dragging:G}=s,ye=Qt({enabled:()=>I.value&&t.autoplay,paused:()=>Y.value==="pending"||Y.value==="dragging"||Y.value==="committing"||H.value&&Y.value==="settling"||v.value&&t.pauseOnHover,delay:()=>t.autoplayDelay,count:()=>t.items.length,atEnd:()=>!H.value&&a.value>=E.value,loop:()=>H.value||t.autoplayLoop,advance:()=>Se(),rewind:()=>ce(0,{behavior:"smooth"})}),r=e.computed(()=>{const l=G.value||s.transformed.value,o=_.value+(l?R.value.slidesPerView+2:0);let h,D;!t.autoWidth&&!H.value&&!l?(h=Math.max(0,a.value-o),D=Math.min(t.items.length,a.value+R.value.slidesPerView+o)):(h=Math.max(0,$.value[0]-o),D=Math.min(H.value?t.items.length*3:t.items.length,$.value[1]+o));const he=($.value[0]+$.value[1]-1)/2,ze=new Map;for(let be=h;be<D;be+=1){const Ee=H.value?je(be,t.items.length):be,He=ze.get(Ee);(!He||Math.abs(be-he)<Math.abs(He.virtual-he))&&ze.set(Ee,{index:Ee,virtual:be,cached:!1})}return[...ze.values()].sort((be,Ee)=>be.virtual-Ee.virtual)});e.watch([L,Y,Q],()=>{if(Y.value!=="idle")return;const l=L.value.filter(h=>h<t.items.length).map(h=>Q.value[h]);if(!t.keepAlive){S.value=[];return}const o=S.value.filter(h=>ee.value.has(h)&&!l.includes(h));S.value=[...o,...l].slice(-(de.value+l.length))},{immediate:!0});const P=e.computed(()=>{const l=[...r.value],o=new Set(l.map(D=>D.index)),h=new Set;for(const D of t.pinnedIndexes.slice(0,de.value))Number.isInteger(D)&&D>=0&&D<t.items.length&&h.add(D);if(O.value!==void 0&&O.value<t.items.length&&h.add(O.value),t.keepAlive)for(const D of[...S.value].reverse()){const he=ee.value.get(D);he!==void 0&&!o.has(he)&&h.size<de.value&&h.add(he)}for(const D of h)o.has(D)||l.push({index:D,virtual:H.value?t.items.length+D:D,cached:D!==O.value});return l.sort((D,he)=>D.virtual-he.virtual).map(D=>({...D,item:t.items[D.index],key:Q.value[D.index]}))}),X=e.computed(()=>r.value.length?fe(r.value[0].virtual):0),j=e.computed(()=>!t.autoWidth&&!H.value&&!t.keepAlive&&!t.pinnedIndexes.length&&(O.value===void 0||r.value.some(l=>l.index===O.value))),p=e.computed(()=>{const l=r.value[r.value.length-1];return l?Math.max(0,le.value-fe(l.virtual)-ue.value[l.index]-R.value.gap):0});function b(l){const o=ue.value[l.index];return{position:j.value?"relative":"absolute",[t.rtl?"right":"left"]:j.value?void 0:`${fe(l.virtual)}px`,width:t.autoWidth?"max-content":`${o}px`,flexBasis:t.autoWidth?"auto":`${o}px`,marginRight:!t.rtl&&l.index<t.items.length-1?`${R.value.gap}px`:"0px",marginLeft:t.rtl&&l.index<t.items.length-1?`${R.value.gap}px`:"0px",height:t.height==="auto"?"auto":"100%",visibility:l.cached?"hidden":void 0,scrollSnapAlign:t.nativeSnap&&!H.value&&f.value>0?"start":"none"}}function z(){if(!K.size||Y.value!=="idle")return;const l=new Map(B.value);for(const[o,h]of K)l.set(o,h);K.clear(),B.value=l}function se(l,o){if(o<0||o>=t.items.length)return;const{width:h,height:D}=l.getBoundingClientRect();D>d.value&&(d.value=D);const he=Q.value[o];t.autoWidth&&h>0&&Math.abs((B.value.get(he)??0)-h)>.5&&K.set(he,h)}function N(){var o;if(Z||t.height!=="auto")return;let l=0;for(const h of r.value)l=Math.max(l,((o=ae.get(h.index))==null?void 0:o.getBoundingClientRect().height)??0);Math.abs(d.value-l)>.5&&(d.value=l)}function ge(l,o){const h=ae.get(o);if(h&&(A==null||A.unobserve(h)),!(l instanceof HTMLElement)){ae.delete(o);return}ae.set(o,l),(t.autoWidth||t.height==="auto")&&(A==null||A.observe(l),se(l,o),e.nextTick(z),e.nextTick(N))}function ce(l,o={}){!t.items.length||f.value<=0||s.navigate(C(l),o.behavior??"auto",0,H.value||!t.nativeSnap)}function Se(l="smooth"){!t.items.length||f.value<=0||s.navigate(C(a.value+R.value.slidesToScroll),l,1,H.value||!t.nativeSnap)}function $e(l="smooth"){!t.items.length||f.value<=0||s.navigate(C(a.value-R.value.slidesToScroll),l,-1,H.value||!t.nativeSnap)}function Le(l){var D,he;if((he=(D=l.target)==null?void 0:D.closest)!=null&&he.call(D,'input, textarea, select, [contenteditable="true"]'))return;const o=t.rtl?"ArrowLeft":"ArrowRight",h=t.rtl?"ArrowRight":"ArrowLeft";l.key===o||l.key==="PageDown"?(l.preventDefault(),Se()):l.key===h||l.key==="PageUp"?(l.preventDefault(),$e()):l.key==="Home"?(l.preventDefault(),ce(0,{behavior:"smooth"})):l.key==="End"&&(l.preventDefault(),ce(E.value))}function nt(l){var h,D;const o=(D=(h=l.target)==null?void 0:h.closest)==null?void 0:D.call(h,"[data-carousel-index]");O.value=o?Number(o.getAttribute("data-carousel-index")):void 0}function Ze(){e.nextTick(()=>{var l;(l=g.value)!=null&&l.contains(document.activeElement)||(O.value=void 0)})}function Oe(){s.cancel(!1),t.items.length?M(C(a.value)):a.value!==0&&(a.value=0,x("update:activeIndex",0)),Z||s.commit(a.value),e.nextTick(m)}function Ye(){var o;const l=((o=g.value)==null?void 0:o.clientWidth)??0;l<=0||l===f.value||(f.value=l)}return e.watch(()=>[t.items.length,f.value,R.value.slidesPerView,R.value.gap,t.rtl,H.value,t.autoWidth,t.nativeSnap,B.value],Oe),e.watch(()=>t.activeIndex,l=>{const o=C(l);o!==a.value&&(s.cancel(!1),a.value=o,s.commit(o),e.nextTick(m))}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],()=>{t.hasMore||(U=-1),e.nextTick(m)}),e.watch(()=>Q.value,l=>{const o=new Set(l);B.value=new Map([...B.value].filter(([h])=>o.has(h))),S.value=S.value.filter(h=>o.has(h))}),e.watch(Y,l=>{l==="idle"&&e.nextTick(z)}),e.watch(()=>[t.keepAlive,t.maxCachedItems],()=>{const l=L.value.map(o=>Q.value[o]);S.value=t.keepAlive?[...S.value.filter(o=>!l.includes(o)),...l].slice(-(de.value+l.length)):[]}),e.onMounted(async()=>{if(Ye(),typeof ResizeObserver<"u"&&(V=new ResizeObserver(Ye),g.value&&V.observe(g.value),A=new ResizeObserver(l=>{for(const o of l)se(o.target,Number(o.target.dataset.carouselIndex));z(),N()}),t.autoWidth||t.height==="auto"))for(const[l,o]of ae)A.observe(o),se(o,l);await e.nextTick(),Oe(),I.value=!0}),e.onBeforeUnmount(()=>{Z=!0,V==null||V.disconnect(),A==null||A.disconnect()}),u({next:Se,previous:$e,scrollToIndex:ce,startAutoplay:ye.start,stopAutoplay:ye.stop}),(l,o)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:g,class:e.normalizeClass(["vue-virtual-carousel",{"vue-virtual-carousel--mouse-drag":n.mouseDrag,"vue-virtual-carousel--dragging":e.unref(G),"vue-virtual-carousel--controlled":H.value||!n.nativeSnap}]),style:e.normalizeStyle(re.value),dir:n.rtl?"rtl":"ltr",role:"region","aria-roledescription":"carousel","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:o[0]||(o[0]=(...h)=>e.unref(s).handleScroll&&e.unref(s).handleScroll(...h)),onPointerdown:o[1]||(o[1]=(...h)=>e.unref(s).handlePointerDown&&e.unref(s).handlePointerDown(...h)),onPointermove:o[2]||(o[2]=(...h)=>e.unref(s).handlePointerMove&&e.unref(s).handlePointerMove(...h)),onPointerup:o[3]||(o[3]=(...h)=>e.unref(s).handlePointerUp&&e.unref(s).handlePointerUp(...h)),onPointercancel:o[4]||(o[4]=(...h)=>e.unref(s).handlePointerCancel&&e.unref(s).handlePointerCancel(...h)),onLostpointercapture:o[5]||(o[5]=(...h)=>e.unref(s).handleLostPointerCapture&&e.unref(s).handleLostPointerCapture(...h)),onClickCapture:o[6]||(o[6]=(...h)=>e.unref(s).handleClick&&e.unref(s).handleClick(...h)),onDragstart:o[7]||(o[7]=(...h)=>e.unref(s).handleDragStart&&e.unref(s).handleDragStart(...h)),onWheelPassive:o[8]||(o[8]=(...h)=>e.unref(s).handleWheel&&e.unref(s).handleWheel(...h)),onKeydown:Le,onMouseenter:o[9]||(o[9]=h=>v.value=!0),onMouseleave:o[10]||(o[10]=h=>v.value=!1),onFocusin:nt,onFocusout:Ze},[n.items.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"track",ref:w,class:"vue-virtual-carousel__track",style:e.normalizeStyle(xe.value),role:"list"},[X.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${X.value}px`,position:j.value?"relative":"absolute"}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value,h=>(e.openBlock(),e.createElementBlock("div",{key:h.key,ref_for:!0,ref:D=>ge(D,h.index),class:"vue-virtual-carousel__item","data-carousel-index":h.index,style:e.normalizeStyle(b(h)),role:"listitem","aria-roledescription":"slide","aria-label":`${h.index+1} of ${n.items.length}`,"aria-current":h.index===a.value?"true":void 0,"aria-hidden":h.cached?"true":void 0,inert:h.cached?!0:void 0},[e.renderSlot(l.$slots,"default",{item:h.item,index:h.index,active:h.index===a.value,visible:oe(h.index),inViewport:L.value.includes(h.index)})],12,tn))),128)),p.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${p.value}px`,position:j.value?"relative":"absolute"}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",nn,[e.renderSlot(l.$slots,"empty")]))],46,en))}}),ln=["aria-label"],an=["aria-posinset","aria-setsize"],xt=e.defineComponent({name:"VirtualScroll",__name:"VirtualScroll",props:{items:{},itemSize:{},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(n,{expose:u,emit:k}){const t=n,x=k,{pulling:g,pullDistance:w,pullOffset:f,pullProgress:d,refreshMessage:a,refreshThreshold:v,handleTouchStart:I,handleTouchMove:O,handleTouchEnd:L,handleTouchCancel:$}=tt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh")}),B=e.ref(),S=e.ref(0),V=e.ref(0);let A,U=-1;const Z=et(),{getItemKey:ae}=We({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),K=e.computed(()=>Math.max(1,t.itemSize)),ie=e.computed(()=>Math.max(0,Math.floor(t.overscan))),Q=e.computed(()=>t.items.length*K.value),ee=e.computed(()=>Math.max(1,t.loadingItemSize??K.value)),te=e.computed(()=>Q.value+(t.loading?ee.value:0)),R=e.computed(()=>V.value>0?V.value:typeof t.height=="number"?t.height:0),_=e.computed(()=>Math.max(0,Math.floor(S.value/K.value)-ie.value)),de=e.computed(()=>{const C=Math.ceil((S.value+R.value)/K.value);return Math.min(t.items.length,C+ie.value)}),me=e.computed(()=>t.items.slice(_.value,de.value).map((C,F)=>({item:C,index:_.value+F}))),ue=e.computed(()=>({height:Xe(t.height)})),J=e.computed(()=>({transform:`translateY(${_.value*K.value}px)`}));function H(){var C;V.value=((C=B.value)==null?void 0:C.clientHeight)??0,Z(B.value,t.height),e.nextTick(E)}function T(C){S.value=C.currentTarget.scrollTop,x("scroll",{scrollTop:S.value,startIndex:_.value,endIndex:de.value}),E()}function E(){const C=B.value;if(!C||!t.hasMore||t.loading||U===t.items.length)return;const F=Math.max(0,t.loadMoreThreshold);te.value-C.scrollTop-C.clientHeight<=F&&(U=t.items.length,x("loadMore"))}function le(C,F={}){const q=B.value;if(!q)return;const ve=Math.max(0,te.value-q.clientHeight),we=Math.min(Math.max(0,Number.isFinite(C)?C:0),ve),pe=F.behavior??"auto";pe==="auto"&&(S.value=we),q.scrollTo({...F,top:we,behavior:pe})}function re(C,F={}){const q=B.value;if(!q||t.items.length===0)return;const ve=Math.min(t.items.length-1,Math.max(0,Math.floor(C))),{align:we="start",...pe}=F;let fe=ve*K.value;we==="center"?fe-=(q.clientHeight-K.value)/2:we==="end"&&(fe-=q.clientHeight-K.value),q.scrollTo({...pe,top:Math.max(0,Math.min(fe,te.value-q.clientHeight))})}function xe(C="auto"){var F;(F=B.value)==null||F.scrollTo({top:0,behavior:C})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const C=B.value;if(!C)return;const F=Math.max(0,te.value-C.clientHeight);C.scrollTop>F&&(C.scrollTop=F,S.value=F),E()}),e.watch(()=>[t.hasMore,t.loading],async([C])=>{C||(U=-1),await e.nextTick(),E()}),e.onMounted(()=>{H(),typeof ResizeObserver<"u"&&B.value&&(A=new ResizeObserver(H),A.observe(B.value)),e.nextTick(E)}),e.onBeforeUnmount(()=>{A&&(A.disconnect(),A=void 0)}),u({scrollTo:le,scrollToIndex:re,scrollToTop:xe}),(C,F)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:B,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(g)}]),style:e.normalizeStyle(ue.value),role:"list","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:T,onTouchstartPassive:F[0]||(F[0]=(...q)=>e.unref(I)&&e.unref(I)(...q)),onTouchmove:F[1]||(F[1]=(...q)=>e.unref(O)&&e.unref(O)(...q)),onTouchend:F[2]||(F[2]=(...q)=>e.unref(L)&&e.unref(L)(...q)),onTouchcancel:F[3]||(F[3]=(...q)=>e.unref($)&&e.unref($)(...q))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(v)}px`,transform:`translateY(${e.unref(f)-e.unref(v)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(C.$slots,"refresh",{pullDistance:e.unref(w),progress:e.unref(d),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(a)),1)])],4)):e.createCommentVNode("",!0),n.items.length||n.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-scroll__spacer",style:e.normalizeStyle({height:`${te.value}px`,transform:`translateY(${e.unref(f)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(J.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(me.value,({item:q,index:ve})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(ae)(q,ve),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${K.value}px`}),role:"listitem","aria-posinset":ve+1,"aria-setsize":n.items.length},[e.renderSlot(C.$slots,"default",{item:q,index:ve})],12,an))),128))],4),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${ee.value}px`,transform:`translateY(${Q.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(C.$slots,"loading",{},()=>[F[4]||(F[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(f)}px)`})},[e.renderSlot(C.$slots,"empty")],4))],46,ln))}}),on=["aria-label"],rn=["aria-posinset","aria-setsize"],wt=e.defineComponent({name:"WindowDynamicVirtualScroll",__name:"WindowDynamicVirtualScroll",props:{items:{},estimatedItemSize:{default:48},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Window dynamic virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(n,{expose:u,emit:k}){const t=n,x=k,g=e.ref(),w=e.ref(0),f=e.ref(0),d=e.ref(0),a=e.ref(0),v=new Map,I=new Map,O=new Map;let L,$,B,S,V=!1,A=!1,U=-1;const{getItemKey:Z}=We({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey});function ae(p){return typeof window.requestAnimationFrame=="function"?{id:window.requestAnimationFrame(p),type:"animation"}:{id:window.setTimeout(p,0),type:"timeout"}}function K(p){p&&(p.type==="animation"?window.cancelAnimationFrame(p.id):window.clearTimeout(p.id))}const{pulling:ie,pullDistance:Q,pullOffset:ee,pullProgress:te,refreshMessage:R,refreshThreshold:_,handleTouchStart:de,handleTouchMove:me,handleTouchEnd:ue,handleTouchCancel:J}=tt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),H=e.computed(()=>Math.max(1,t.estimatedItemSize)),T=e.computed(()=>Math.max(1,t.loadingItemSize??H.value)),E=e.computed(()=>Math.max(0,Math.floor(t.overscan))),le=e.computed(()=>{a.value;const p=new Array(t.items.length+1),b=new Array(t.items.length);p[0]=0;for(let z=0;z<t.items.length;z+=1){const se=Z(t.items[z],z),N=v.get(se)??H.value;b[z]=N,p[z+1]=p[z]+N}return{offsets:p,sizes:b,total:p[t.items.length]??0}}),re=e.computed(()=>le.value.total+(t.loading?T.value:0)),xe=e.computed(()=>{const p=new Map;return t.items.forEach((b,z)=>{p.set(Z(b,z),z)}),p}),C=e.computed(()=>Math.max(0,w.value-d.value));function F(p){if(t.items.length===0)return 0;const b=le.value.offsets;let z=0,se=t.items.length;for(;z<se;){const N=Math.floor((z+se)/2);b[N+1]<=p?z=N+1:se=N}return Math.min(z,t.items.length-1)}const q=e.computed(()=>Math.max(0,F(C.value)-E.value)),ve=e.computed(()=>{if(t.items.length===0)return 0;const p=w.value+f.value-d.value,b=Math.max(H.value,p),z=F(b)+1;return Math.min(t.items.length,z+E.value)}),we=e.computed(()=>t.items.slice(q.value,ve.value).map((p,b)=>{const z=q.value+b;return{item:p,index:z,key:Z(p,z),top:le.value.offsets[z]}}));function pe(){typeof window>"u"||(w.value=Math.max(0,window.scrollY),f.value=window.innerHeight,g.value&&(d.value=g.value.getBoundingClientRect().top+w.value))}function fe(){x("scroll",{scrollTop:C.value,startIndex:q.value,endIndex:ve.value})}function ne(p=!1){A&&(V||(V=p),!B&&(B=ae(()=>{B=void 0,pe(),V&&(V=!1,fe()),M()})))}function oe(){ne(!0)}function m(){ne()}function M(){if(typeof window>"u"||!t.hasMore||t.loading||U===t.items.length)return;const p=Math.max(0,t.loadMoreThreshold),b=d.value+re.value,z=w.value+f.value;b-z<=p&&(U=t.items.length,x("loadMore"))}function s(p){const b=p.borderBoxSize;if(b){const z=Array.isArray(b)?b[0]:b;if(z!=null&&z.blockSize)return z.blockSize}return p.contentRect.height}function Y(p){const b=le.value;let z=0,se=!1;for(const N of p){const ge=N.target,ce=I.get(ge),Se=s(N);if(ce===void 0||Se<=0)continue;const $e=v.get(ce)??H.value;if(Math.abs($e-Se)<.5)continue;const Le=xe.value.get(ce);Le!==void 0&&b.offsets[Le+1]<=C.value&&(z+=Se-$e),v.set(ce,Se),se=!0}se&&(a.value+=1,e.nextTick(()=>{if(A){if(z!==0&&typeof window<"u"){const N=Math.max(0,w.value+z);w.value=N,window.scrollTo({top:N,behavior:"auto"})}pe(),M()}}))}function G(p){if(A){for(const b of p)O.set(b.target,b);S||(S=ae(()=>{S=void 0;const b=Array.from(O.values());O.clear(),Y(b)}))}}function ye(p,b){p instanceof HTMLElement&&(I.set(p,b),$==null||$.observe(p))}function r(){for(const[p]of I)p.isConnected||($==null||$.unobserve(p),I.delete(p))}function P(p,b={}){if(typeof window>"u")return;pe();const z=Math.max(0,re.value-f.value),se=Math.min(Math.max(0,Number.isFinite(p)?p:0),z),N=Math.max(0,d.value+se),ge=b.behavior??"auto";ge==="auto"&&(w.value=N),window.scrollTo({...b,top:N,behavior:ge})}function X(p,b={}){if(typeof window>"u"||t.items.length===0)return;pe();const z=Math.min(t.items.length-1,Math.max(0,Math.floor(p))),{align:se="start",...N}=b,ge=le.value.sizes[z];let ce=d.value+le.value.offsets[z];se==="center"?ce-=(f.value-ge)/2:se==="end"&&(ce-=f.value-ge);const Se=Math.max(d.value,d.value+re.value-f.value),$e=Math.max(0,Math.min(ce,Se)),Le=N.behavior??"auto";Le==="auto"&&(w.value=$e),window.scrollTo({...N,top:$e,behavior:Le})}function j(p="auto"){typeof window>"u"||(pe(),window.scrollTo({top:Math.max(0,d.value),behavior:p}))}return e.watch(()=>t.itemKey,()=>{v.clear(),a.value+=1,U=-1}),e.watch(()=>t.items.map((p,b)=>Z(p,b)),async(p,b)=>{const z=p.length!==b.length||p.some((N,ge)=>N!==b[ge]),se=new Set(p);for(const N of v.keys())se.has(N)||v.delete(N);z&&(U=-1),a.value+=1,await e.nextTick(),A&&(pe(),M())}),e.watch(()=>[t.hasMore,t.loading],async([p])=>{p||(U=-1),await e.nextTick(),A&&(pe(),M())}),e.onMounted(()=>{if(A=!0,pe(),window.addEventListener("scroll",oe,{passive:!0}),window.addEventListener("resize",m,{passive:!0}),typeof ResizeObserver<"u"){L=new ResizeObserver(()=>{ne()}),$=new ResizeObserver(G),g.value&&L.observe(g.value);for(const[p]of I)$.observe(p)}e.nextTick(()=>{A&&M()})}),e.onUpdated(r),e.onBeforeUnmount(()=>{A=!1,window.removeEventListener("scroll",oe),window.removeEventListener("resize",m),K(B),K(S),B=void 0,S=void 0,V=!1,O.clear(),L&&(L.disconnect(),L=void 0),$&&($.disconnect(),$=void 0),I.clear()}),u({scrollTo:P,scrollToIndex:X,scrollToTop:j}),(p,b)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:g,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(ie)}]),role:"list","aria-label":n.ariaLabel,onTouchstartPassive:b[0]||(b[0]=(...z)=>e.unref(de)&&e.unref(de)(...z)),onTouchmove:b[1]||(b[1]=(...z)=>e.unref(me)&&e.unref(me)(...z)),onTouchend:b[2]||(b[2]=(...z)=>e.unref(ue)&&e.unref(ue)(...z)),onTouchcancel:b[3]||(b[3]=(...z)=>e.unref(J)&&e.unref(J)(...z))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(_)}px`,transform:`translateY(${e.unref(ee)-e.unref(_)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(p.$slots,"refresh",{pullDistance:e.unref(Q),progress:e.unref(te),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(R)),1)])],4)):e.createCommentVNode("",!0),n.items.length||n.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${re.value}px`,transform:`translateY(${e.unref(ee)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(we.value,({item:z,index:se,key:N,top:ge})=>(e.openBlock(),e.createElementBlock("div",{key:N,ref_for:!0,ref:ce=>ye(ce,N),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${ge}px)`}),role:"listitem","aria-posinset":se+1,"aria-setsize":n.items.length},[e.renderSlot(p.$slots,"default",{item:z,index:se})],12,rn))),128)),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${T.value}px`,transform:`translateY(${le.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(p.$slots,"loading",{},()=>[b[4]||(b[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(ee)}px)`})},[e.renderSlot(p.$slots,"empty")],4))],42,on))}}),sn=["aria-label"],un=["aria-posinset","aria-setsize"],Mt=e.defineComponent({name:"WindowGirdVirtualScroll",__name:"WindowGirdVirtualScroll",props:{items:{},itemSize:{},columns:{default:2},gap:{default:0},overscan:{default:1},itemKey:{default:void 0},ariaLabel:{default:"Window virtual grid"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(n,{expose:u,emit:k}){const t=n,x=k,g=e.ref(),w=e.ref(0),f=e.ref(0),d=e.ref(0);let a,v=-1;const{getItemKey:I}=We({componentName:"WindowGirdVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:O,pullDistance:L,pullOffset:$,pullProgress:B,refreshMessage:S,refreshThreshold:V,handleTouchStart:A,handleTouchMove:U,handleTouchEnd:Z,handleTouchCancel:ae}=tt({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),K=e.computed(()=>Math.max(1,t.itemSize)),ie=e.computed(()=>Math.max(1,Math.floor(t.columns))),Q=e.computed(()=>Math.max(0,t.gap)),ee=e.computed(()=>Math.max(0,Math.floor(t.overscan))),te=e.computed(()=>Math.max(1,t.loadingItemSize??K.value)),R=e.computed(()=>K.value+Q.value),_=e.computed(()=>Math.ceil(t.items.length/ie.value)),de=e.computed(()=>_.value===0?0:_.value*K.value+(_.value-1)*Q.value),me=e.computed(()=>de.value+(t.items.length?Q.value:0)),ue=e.computed(()=>de.value+(t.loading?te.value+(t.items.length?Q.value:0):0)),J=e.computed(()=>Math.max(0,w.value-d.value)),H=e.computed(()=>Math.max(0,Math.floor(J.value/R.value)-ee.value)),T=e.computed(()=>{if(_.value===0)return 0;const ne=Math.max(K.value,w.value+f.value-d.value),oe=Math.ceil((ne+Q.value)/R.value);return Math.min(_.value,oe+ee.value)}),E=e.computed(()=>Math.min(t.items.length,H.value*ie.value)),le=e.computed(()=>Math.min(t.items.length,T.value*ie.value)),re=e.computed(()=>t.items.slice(E.value,le.value).map((ne,oe)=>{const m=E.value+oe;return{item:ne,index:m,key:I(ne,m),rowIndex:Math.floor(m/ie.value),columnIndex:m%ie.value}})),xe=e.computed(()=>({gridTemplateColumns:`repeat(${ie.value}, minmax(0, 1fr))`,columnGap:`${Q.value}px`,rowGap:`${Q.value}px`,transform:`translateY(${H.value*R.value}px)`}));function C(){typeof window>"u"||(w.value=Math.max(0,window.scrollY),f.value=window.innerHeight,g.value&&(d.value=g.value.getBoundingClientRect().top+w.value))}function F(){x("scroll",{scrollTop:J.value,startIndex:E.value,endIndex:le.value})}function q(){C(),F(),ve()}function ve(){if(typeof window>"u"||!t.hasMore||t.loading||v===t.items.length)return;const ne=Math.max(0,t.loadMoreThreshold),oe=d.value+ue.value,m=w.value+f.value;oe-m<=ne&&(v=t.items.length,x("loadMore"))}function we(ne,oe={}){if(typeof window>"u")return;C();const m=Math.max(0,ue.value-f.value),M=Math.min(Math.max(0,Number.isFinite(ne)?ne:0),m),s=Math.max(0,d.value+M),Y=oe.behavior??"auto";Y==="auto"&&(w.value=s),window.scrollTo({...oe,top:s,behavior:Y})}function pe(ne,oe={}){if(typeof window>"u"||t.items.length===0)return;C();const m=Math.min(t.items.length-1,Math.max(0,Math.floor(ne))),M=Math.floor(m/ie.value),{align:s="start",...Y}=oe;let G=d.value+M*R.value;s==="center"?G-=(f.value-K.value)/2:s==="end"&&(G-=f.value-K.value);const ye=Math.max(d.value,d.value+ue.value-f.value),r=Math.max(0,Math.min(G,ye)),P=Y.behavior??"auto";P==="auto"&&(w.value=r),window.scrollTo({...Y,top:r,behavior:P})}function fe(ne="auto"){typeof window>"u"||(C(),window.scrollTo({top:Math.max(0,d.value),behavior:ne}))}return e.watch(()=>[t.items.length,t.itemSize,t.columns,t.gap],async()=>{await e.nextTick(),C(),ve()}),e.watch(()=>[t.hasMore,t.loading],async([ne])=>{ne||(v=-1),await e.nextTick(),C(),ve()}),e.onMounted(()=>{C(),window.addEventListener("scroll",q,{passive:!0}),window.addEventListener("resize",q,{passive:!0}),typeof ResizeObserver<"u"&&(a=new ResizeObserver(()=>{C(),ve()}),g.value&&a.observe(g.value)),e.nextTick(ve)}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",q),window.removeEventListener("resize",q),a&&(a.disconnect(),a=void 0)}),u({scrollTo:we,scrollToIndex:pe,scrollToTop:fe}),(ne,oe)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:g,class:e.normalizeClass(["vue-window-gird-virtual-scroll",{"vue-window-gird-virtual-scroll--pulling":e.unref(O)}]),role:"list","aria-label":n.ariaLabel,onTouchstartPassive:oe[0]||(oe[0]=(...m)=>e.unref(A)&&e.unref(A)(...m)),onTouchmove:oe[1]||(oe[1]=(...m)=>e.unref(U)&&e.unref(U)(...m)),onTouchend:oe[2]||(oe[2]=(...m)=>e.unref(Z)&&e.unref(Z)(...m)),onTouchcancel:oe[3]||(oe[3]=(...m)=>e.unref(ae)&&e.unref(ae)(...m))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(V)}px`,transform:`translateY(${e.unref($)-e.unref(V)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(ne.$slots,"refresh",{pullDistance:e.unref(L),progress:e.unref(B),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(S)),1)])],4)):e.createCommentVNode("",!0),n.items.length||n.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-gird-virtual-scroll__spacer",style:e.normalizeStyle({height:`${ue.value}px`,transform:`translateY(${e.unref($)}px)`})},[e.createElementVNode("div",{class:"vue-window-gird-virtual-scroll__content",style:e.normalizeStyle(xe.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(re.value,({item:m,index:M,key:s,rowIndex:Y,columnIndex:G})=>(e.openBlock(),e.createElementBlock("div",{key:s,class:"vue-window-gird-virtual-scroll__item",style:e.normalizeStyle({height:`${K.value}px`}),role:"listitem","aria-posinset":M+1,"aria-setsize":n.items.length},[e.renderSlot(ne.$slots,"default",{item:m,index:M,rowIndex:Y,columnIndex:G})],12,un))),128))],4),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__loading",style:e.normalizeStyle({height:`${te.value}px`,transform:`translateY(${me.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(ne.$slots,"loading",{},()=>[oe[4]||(oe[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-gird-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref($)}px)`})},[e.renderSlot(ne.$slots,"empty")],4))],42,sn))}}),Tt=ut,St={install(n){n.component("ChatVirtualScroll",ht),n.component("DynamicVirtualScroll",ut),n.component("ShortMediaFeed",pt),n.component("SkeletonLoader",gt),n.component("VirtualCarousel",yt),n.component("VirtualList",Tt),n.component("VirtualScroll",xt),n.component("WindowDynamicVirtualScroll",wt),n.component("WindowGirdVirtualScroll",Mt)}};exports.ChatVirtualScroll=ht;exports.DynamicVirtualScroll=ut;exports.ShortMediaFeed=pt;exports.SkeletonLoader=gt;exports.VirtualCarousel=yt;exports.VirtualList=Tt;exports.VirtualScroll=xt;exports.VueVirtualScroll=St;exports.WindowDynamicVirtualScroll=wt;exports.WindowGirdVirtualScroll=Mt;exports.default=St;
|
|
@@ -1 +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}
|