vue-virtual-flow 0.0.2 → 0.0.3
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/dist/components/VirtualCarousel.d.cts +2 -1
- package/dist/components/VirtualCarousel.d.ts +2 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/types.d.cts +7 -0
- package/dist/types.d.ts +7 -0
- package/dist/vue-virtual-flow.cjs +1 -1
- package/dist/vue-virtual-flow.js +988 -963
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ItemKey, VirtualCarouselChangeEvent, VirtualCarouselExpose } from '../types.cjs';
|
|
1
|
+
import { ItemKey, ResponsiveBreakpoint, VirtualCarouselChangeEvent, VirtualCarouselExpose } from '../types.cjs';
|
|
2
2
|
declare const _default: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
3
3
|
props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
|
|
4
4
|
readonly onLoadMore?: (() => any) | undefined;
|
|
@@ -23,6 +23,7 @@ declare const _default: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>
|
|
|
23
23
|
autoplayDelay?: number;
|
|
24
24
|
autoplayLoop?: boolean;
|
|
25
25
|
pauseOnHover?: boolean;
|
|
26
|
+
responsive?: ResponsiveBreakpoint[];
|
|
26
27
|
} & Partial<{}>> & import('vue').PublicProps;
|
|
27
28
|
expose(exposed: import('vue').ShallowUnwrapRef<VirtualCarouselExpose>): void;
|
|
28
29
|
attrs: any;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ItemKey, VirtualCarouselChangeEvent, VirtualCarouselExpose } from '../types.js';
|
|
1
|
+
import { ItemKey, ResponsiveBreakpoint, VirtualCarouselChangeEvent, VirtualCarouselExpose } from '../types.js';
|
|
2
2
|
declare const _default: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
3
3
|
props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
|
|
4
4
|
readonly onLoadMore?: (() => any) | undefined;
|
|
@@ -23,6 +23,7 @@ declare const _default: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>
|
|
|
23
23
|
autoplayDelay?: number;
|
|
24
24
|
autoplayLoop?: boolean;
|
|
25
25
|
pauseOnHover?: boolean;
|
|
26
|
+
responsive?: ResponsiveBreakpoint[];
|
|
26
27
|
} & Partial<{}>> & import('vue').PublicProps;
|
|
27
28
|
expose(exposed: import('vue').ShallowUnwrapRef<VirtualCarouselExpose>): void;
|
|
28
29
|
attrs: any;
|
package/dist/index.d.cts
CHANGED
|
@@ -18,6 +18,6 @@ declare module 'vue' {
|
|
|
18
18
|
}
|
|
19
19
|
declare const VirtualList: typeof DynamicVirtualScroll;
|
|
20
20
|
export { ChatVirtualScroll, DynamicVirtualScroll, ShortMediaFeed, VirtualCarousel, VirtualList, VirtualScroll, WindowDynamicVirtualScroll, };
|
|
21
|
-
export type { ChatVirtualScrollExpose, ChatVirtualScrollProps, DynamicVirtualScrollProps, ItemKey, ScrollAlignment, ShortMediaFeedChangeEvent, ShortMediaFeedExpose, ShortMediaFeedProps, VirtualCarouselChangeEvent, VirtualCarouselExpose, VirtualCarouselProps, VirtualListExpose, VirtualListProps, VirtualScrollEvent, VirtualScrollExpose, VirtualScrollProps, WindowDynamicVirtualScrollProps, } from './types.cjs';
|
|
21
|
+
export type { ChatVirtualScrollExpose, ChatVirtualScrollProps, DynamicVirtualScrollProps, ItemKey, ResponsiveBreakpoint, ScrollAlignment, ShortMediaFeedChangeEvent, ShortMediaFeedExpose, ShortMediaFeedProps, VirtualCarouselChangeEvent, VirtualCarouselExpose, VirtualCarouselProps, VirtualListExpose, VirtualListProps, VirtualScrollEvent, VirtualScrollExpose, VirtualScrollProps, WindowDynamicVirtualScrollProps, } from './types.cjs';
|
|
22
22
|
export declare const VueVirtualScroll: Plugin;
|
|
23
23
|
export default VueVirtualScroll;
|
package/dist/index.d.ts
CHANGED
|
@@ -18,6 +18,6 @@ declare module 'vue' {
|
|
|
18
18
|
}
|
|
19
19
|
declare const VirtualList: typeof DynamicVirtualScroll;
|
|
20
20
|
export { ChatVirtualScroll, DynamicVirtualScroll, ShortMediaFeed, VirtualCarousel, VirtualList, VirtualScroll, WindowDynamicVirtualScroll, };
|
|
21
|
-
export type { ChatVirtualScrollExpose, ChatVirtualScrollProps, DynamicVirtualScrollProps, ItemKey, ScrollAlignment, ShortMediaFeedChangeEvent, ShortMediaFeedExpose, ShortMediaFeedProps, VirtualCarouselChangeEvent, VirtualCarouselExpose, VirtualCarouselProps, VirtualListExpose, VirtualListProps, VirtualScrollEvent, VirtualScrollExpose, VirtualScrollProps, WindowDynamicVirtualScrollProps, } from './types.js';
|
|
21
|
+
export type { ChatVirtualScrollExpose, ChatVirtualScrollProps, DynamicVirtualScrollProps, ItemKey, ResponsiveBreakpoint, ScrollAlignment, ShortMediaFeedChangeEvent, ShortMediaFeedExpose, ShortMediaFeedProps, VirtualCarouselChangeEvent, VirtualCarouselExpose, VirtualCarouselProps, VirtualListExpose, VirtualListProps, VirtualScrollEvent, VirtualScrollExpose, VirtualScrollProps, WindowDynamicVirtualScrollProps, } from './types.js';
|
|
22
22
|
export declare const VueVirtualScroll: Plugin;
|
|
23
23
|
export default VueVirtualScroll;
|
package/dist/types.d.cts
CHANGED
|
@@ -89,6 +89,13 @@ export interface VirtualCarouselProps<T> {
|
|
|
89
89
|
autoplayDelay?: number;
|
|
90
90
|
autoplayLoop?: boolean;
|
|
91
91
|
pauseOnHover?: boolean;
|
|
92
|
+
responsive?: ResponsiveBreakpoint[];
|
|
93
|
+
}
|
|
94
|
+
export interface ResponsiveBreakpoint {
|
|
95
|
+
breakpoint: number;
|
|
96
|
+
slidesPerView?: number;
|
|
97
|
+
slidesToScroll?: number;
|
|
98
|
+
gap?: number;
|
|
92
99
|
}
|
|
93
100
|
export interface VirtualCarouselChangeEvent<T> {
|
|
94
101
|
index: number;
|
package/dist/types.d.ts
CHANGED
|
@@ -89,6 +89,13 @@ export interface VirtualCarouselProps<T> {
|
|
|
89
89
|
autoplayDelay?: number;
|
|
90
90
|
autoplayLoop?: boolean;
|
|
91
91
|
pauseOnHover?: boolean;
|
|
92
|
+
responsive?: ResponsiveBreakpoint[];
|
|
93
|
+
}
|
|
94
|
+
export interface ResponsiveBreakpoint {
|
|
95
|
+
breakpoint: number;
|
|
96
|
+
slidesPerView?: number;
|
|
97
|
+
slidesToScroll?: number;
|
|
98
|
+
gap?: number;
|
|
92
99
|
}
|
|
93
100
|
export interface VirtualCarouselChangeEvent<T> {
|
|
94
101
|
index: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");function Me(r){return typeof r=="string"||typeof r=="number"||typeof r=="symbol"}function ce(r,P){const b=r[P];return Me(b)?b:void 0}function Te(r){return ce(r,"id")??ce(r,"key")}function ne(r){function P(t,k){const h=r.itemKey();if(typeof h=="function")return h(t,k);if(t!==null&&typeof t=="object"){if(h!==void 0){const u=ce(t,h);if(u!==void 0)return u}const T=Te(t);if(T!==void 0)return T}return k}function b(){}return e.watch(()=>[r.itemKey(),r.items()],b,{immediate:!0}),{getItemKey:P}}function ie(r){return r==="fill"?"100%":typeof r=="number"?`${r}px`:r}function se(r){return(P,b)=>{typeof b=="string"&&(b==="fill"||b.trim().endsWith("%"))}}const ke=["aria-label"],we={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},Se=["aria-posinset","aria-setsize"],fe=e.defineComponent({name:"ChatVirtualScroll",__name:"ChatVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:5},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(r,{expose:P,emit:b}){const t=r,k=b,h=e.ref(),T=e.ref(0),u=e.ref(0),I=e.ref(0),K=e.ref(!0),L=new Map,H=new Map;let z,y,w=-1,M=!1;const S=se(),{getItemKey:D}=ne({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),N=e.computed(()=>Math.max(1,t.estimatedItemSize)),W=e.computed(()=>Math.max(0,Math.floor(t.overscan))),Z=e.computed(()=>u.value>0?u.value:typeof t.height=="number"?Math.max(0,t.height):N.value),E=e.computed(()=>{I.value;const n=new Array(t.items.length+1),d=new Array(t.items.length);n[0]=0;for(let s=0;s<t.items.length;s+=1){const $=D(t.items[s],s),V=L.get($)??N.value;d[s]=V,n[s+1]=n[s]+V}return{offsets:n,sizes:d,total:n[t.items.length]??0}}),x=e.computed(()=>{const n=new Map;return t.items.forEach((d,s)=>{n.set(D(d,s),s)}),n});function O(n){if(t.items.length===0)return 0;const d=E.value.offsets;let s=0,$=t.items.length;for(;s<$;){const V=Math.floor((s+$)/2);d[V+1]<=n?s=V+1:$=V}return Math.min(s,t.items.length-1)}const F=e.computed(()=>Math.max(0,O(T.value)-W.value)),_=e.computed(()=>{if(t.items.length===0)return 0;const n=O(T.value+Z.value)+1;return Math.min(t.items.length,n+W.value)}),R=e.computed(()=>t.items.slice(F.value,_.value).map((n,d)=>{const s=F.value+d;return{item:n,index:s,key:D(n,s),top:E.value.offsets[s]}})),te=e.computed(()=>({height:ie(t.height)}));function C(){const n=h.value;if(!n)return;const s=Math.max(0,E.value.total-n.scrollTop-n.clientHeight)<=Math.max(0,t.bottomThreshold);s!==K.value&&(K.value=s,M&&k("bottomChange",s))}function c(){var n;u.value=((n=h.value)==null?void 0:n.clientHeight)??0,S(h.value,t.height),e.nextTick(()=>{C(),B()})}function v(n){T.value=n.currentTarget.scrollTop,C(),k("scroll",{scrollTop:T.value,startIndex:F.value,endIndex:_.value}),B()}function B(){const n=h.value;!M||!n||!t.hasOlder||t.loadingOlder||w===t.items.length||n.scrollTop<=Math.max(0,t.loadOlderThreshold)&&(w=t.items.length,k("loadOlder"))}function G(n){const d=n.borderBoxSize;if(d){const s=Array.isArray(d)?d[0]:d;if(s!=null&&s.blockSize)return s.blockSize}return n.contentRect.height}function J(n){const d=E.value,s=K.value&&t.stickToBottom;let $=0,V=!1;for(const A of n){const i=A.target,l=H.get(i),a=G(A);if(l===void 0||a<=0)continue;const o=L.get(l)??N.value;if(Math.abs(o-a)<.5)continue;const g=x.value.get(l);g!==void 0&&d.offsets[g+1]<=T.value&&($+=a-o),L.set(l,a),V=!0}V&&(I.value+=1,e.nextTick(()=>{const A=h.value;A&&(s?m("auto"):$!==0&&(A.scrollTop+=$,T.value=A.scrollTop,C()))}))}function Q(n,d){n instanceof HTMLElement&&(H.set(n,d),y==null||y.observe(n))}function U(){for(const[n]of H)n.isConnected||(y==null||y.unobserve(n),H.delete(n))}function X(n,d={}){const s=h.value;if(!s)return;const $=Math.max(0,E.value.total-s.clientHeight),V=Math.min(Math.max(0,Number.isFinite(n)?n:0),$),A=d.behavior??"auto";A==="auto"&&(T.value=V),s.scrollTo({...d,top:V,behavior:A}),e.nextTick(C)}function j(n,d={}){const s=h.value;if(!s||t.items.length===0)return;const $=Math.min(t.items.length-1,Math.max(0,Math.floor(n))),{align:V="start",...A}=d,i=E.value.sizes[$];let l=E.value.offsets[$];V==="center"?l-=(s.clientHeight-i)/2:V==="end"&&(l-=s.clientHeight-i);const a=Math.max(0,Math.min(l,E.value.total-s.clientHeight)),o=A.behavior??"auto",g=Math.max(s.clientHeight*3,N.value*10),p=o==="smooth"&&Math.abs(a-s.scrollTop)>g?"auto":o;p==="auto"&&(T.value=a),s.scrollTo({...A,top:a,behavior:p}),e.nextTick(C)}function oe(n="auto"){const d=h.value;d&&(n==="auto"&&(T.value=0),d.scrollTo({top:0,behavior:n}),e.nextTick(C))}function m(n="auto"){const d=h.value;if(!d)return;const s=Math.max(0,E.value.total-d.clientHeight);n==="auto"?(d.scrollTop=s,T.value=s):d.scrollTo({top:s,behavior:n}),e.nextTick(C)}let f=t.items.map((n,d)=>D(n,d));return e.watch(()=>t.items.map((n,d)=>D(n,d)),async n=>{const d=f;f=n;const s=h.value,$=(s==null?void 0:s.scrollTop)??0,V=K.value&&t.stickToBottom,A=d[0],i=A===void 0?0:n.indexOf(A),l=i>0?n.slice(0,i).reduce((o,g)=>o+(L.get(g)??N.value),0):0,a=new Set(n);for(const o of L.keys())a.has(o)||L.delete(o);I.value+=1,await e.nextTick(),s&&(l>0?(s.scrollTop=$+l,T.value=s.scrollTop):n.length>d.length&&V&&m("auto"),C(),B())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([n])=>{n||(w=-1),await e.nextTick(),B()}),e.onMounted(()=>{if(c(),typeof ResizeObserver<"u"){z=new ResizeObserver(c),y=new ResizeObserver(J),h.value&&z.observe(h.value);for(const[n]of H)y.observe(n)}e.nextTick(()=>{t.initialScroll==="bottom"&&m("auto"),M=!0,C(),B()})}),e.onUpdated(U),e.onBeforeUnmount(()=>{z==null||z.disconnect(),y==null||y.disconnect(),H.clear()}),P({isAtBottom:K,scrollTo:X,scrollToIndex:j,scrollToTop:oe,scrollToBottom:m}),(n,d)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:h,class:"vue-chat-virtual-scroll",style:e.normalizeStyle(te.value),role:"log","aria-label":r.ariaLabel,"aria-live":"polite",tabindex:"0",onScrollPassive:v},[r.loadingOlder?(e.openBlock(),e.createElementBlock("div",we,[e.createElementVNode("div",null,[e.renderSlot(n.$slots,"loadingOlder",{},()=>[d[0]||(d[0]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),r.items.length?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${E.value.total}px`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(R.value,({item:s,index:$,key:V,top:A})=>(e.openBlock(),e.createElementBlock("div",{key:V,ref_for:!0,ref:i=>Q(i,V),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${A}px)`}),role:"article","aria-posinset":$+1,"aria-setsize":r.items.length},[e.renderSlot(n.$slots,"default",{item:s,index:$})],12,Se))),128))],4)):e.renderSlot(n.$slots,"empty",{},void 0,void 0,2)],44,ke))}});function de(r){const P=e.ref(),b=e.ref(0),t=e.ref(!1),k=e.ref(!1),h=e.computed(()=>Math.max(1,r.threshold())),T=e.computed(()=>r.refreshing()||k.value?h.value:b.value),u=e.computed(()=>Math.min(1,b.value/h.value)),I=e.computed(()=>r.refreshing()||k.value?"Refreshing…":u.value>=1?"Release to refresh":"Pull to refresh");function K(){P.value=void 0,t.value=!1,b.value=0}function L(y){var S;const w=y.currentTarget,M=((S=r.scrollTop)==null?void 0:S.call(r))??w.scrollTop;!r.enabled()||r.refreshing()||M>0||y.touches.length!==1||(P.value=y.touches[0].clientY,t.value=!0)}function H(y){var D;if(P.value===void 0||!t.value)return;const w=y.currentTarget;if((((D=r.scrollTop)==null?void 0:D.call(r))??w.scrollTop)>0||y.touches.length!==1){K();return}const S=y.touches[0].clientY-P.value;if(S<=0){b.value=0;return}y.preventDefault(),b.value=Math.min(S*.5,h.value*2)}function z(){if(P.value===void 0)return;const y=b.value>=h.value&&r.enabled()&&!r.refreshing();if(P.value=void 0,t.value=!1,!y){b.value=0;return}b.value=h.value,k.value=!0,r.onRefresh(),e.nextTick(()=>{r.refreshing()||(k.value=!1,b.value=0)})}return e.watch(()=>r.refreshing(),(y,w)=>{y?(k.value=!1,b.value=h.value):w&&(k.value=!1,b.value=0)}),{pulling:t,pullDistance:b,pullOffset:T,pullProgress:u,refreshMessage:I,refreshThreshold:h,handleTouchStart:L,handleTouchMove:H,handleTouchEnd:z,handleTouchCancel:K}}const be=["aria-label"],Be=["aria-posinset","aria-setsize"],me=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(r,{expose:P,emit:b}){const t=r,k=b,{pulling:h,pullDistance:T,pullOffset:u,pullProgress:I,refreshMessage:K,refreshThreshold:L,handleTouchStart:H,handleTouchMove:z,handleTouchEnd:y,handleTouchCancel:w}=de({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>k("refresh")}),M=e.ref(),S=e.ref(0),D=e.ref(0),N=e.ref(0),W=new Map,Z=new Map;let E,x,O=-1;const F=se(),{getItemKey:_}=ne({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),R=e.computed(()=>Math.max(1,t.estimatedItemSize)),te=e.computed(()=>Math.max(1,t.loadingItemSize??R.value)),C=e.computed(()=>Math.max(0,Math.floor(t.overscan))),c=e.computed(()=>D.value>0?D.value:typeof t.height=="number"?Math.max(0,t.height):R.value),v=e.computed(()=>{N.value;const l=new Array(t.items.length+1),a=new Array(t.items.length);l[0]=0;for(let o=0;o<t.items.length;o+=1){const g=_(t.items[o],o),p=W.get(g)??R.value;a[o]=p,l[o+1]=l[o]+p}return{offsets:l,sizes:a,total:l[t.items.length]??0}}),B=e.computed(()=>v.value.total+(t.loading?te.value:0)),G=e.computed(()=>{const l=new Map;return t.items.forEach((a,o)=>{l.set(_(a,o),o)}),l});function J(l){if(t.items.length===0)return 0;const a=v.value.offsets;let o=0,g=t.items.length;for(;o<g;){const p=Math.floor((o+g)/2);a[p+1]<=l?o=p+1:g=p}return Math.min(o,t.items.length-1)}const Q=e.computed(()=>Math.max(0,J(S.value)-C.value)),U=e.computed(()=>{if(t.items.length===0)return 0;const l=J(S.value+c.value)+1;return Math.min(t.items.length,l+C.value)}),X=e.computed(()=>t.items.slice(Q.value,U.value).map((l,a)=>{const o=Q.value+a;return{item:l,index:o,key:_(l,o),top:v.value.offsets[o]}})),j=e.computed(()=>({height:ie(t.height)}));function oe(){var l;D.value=((l=M.value)==null?void 0:l.clientHeight)??0,F(M.value,t.height),e.nextTick(f)}function m(l){S.value=l.currentTarget.scrollTop,k("scroll",{scrollTop:S.value,startIndex:Q.value,endIndex:U.value}),f()}function f(){const l=M.value;if(!l||!t.hasMore||t.loading||O===t.items.length)return;const a=Math.max(0,t.loadMoreThreshold);B.value-l.scrollTop-l.clientHeight<=a&&(O=t.items.length,k("loadMore"))}function n(l){const a=l.borderBoxSize;if(a){const o=Array.isArray(a)?a[0]:a;if(o!=null&&o.blockSize)return o.blockSize}return l.contentRect.height}function d(l){const a=v.value;let o=0,g=!1;for(const p of l){const q=p.target,Y=Z.get(q),ee=n(p);if(Y===void 0||ee<=0)continue;const le=W.get(Y)??R.value;if(Math.abs(le-ee)<.5)continue;const ae=G.value.get(Y);ae!==void 0&&a.offsets[ae+1]<=S.value&&(o+=ee-le),W.set(Y,ee),g=!0}g&&(N.value+=1,e.nextTick(f),o!==0&&e.nextTick(()=>{const p=M.value;p&&(p.scrollTop+=o,S.value=p.scrollTop)}))}function s(l,a){l instanceof HTMLElement&&(Z.set(l,a),x==null||x.observe(l))}function $(){for(const[l]of Z)l.isConnected||(x==null||x.unobserve(l),Z.delete(l))}function V(l,a={}){const o=M.value;if(!o)return;const g=Math.max(0,B.value-o.clientHeight),p=Math.min(Math.max(0,Number.isFinite(l)?l:0),g),q=a.behavior??"auto";q==="auto"&&(S.value=p),o.scrollTo({...a,top:p,behavior:q})}function A(l,a={}){const o=M.value;if(!o||t.items.length===0)return;const g=Math.min(t.items.length-1,Math.max(0,Math.floor(l))),{align:p="start",...q}=a;let Y=v.value.offsets[g];const ee=v.value.sizes[g];p==="center"?Y-=(o.clientHeight-ee)/2:p==="end"&&(Y-=o.clientHeight-ee);const le=Math.max(0,Math.min(Y,B.value-o.clientHeight)),ae=q.behavior??"auto",ue=Math.max(o.clientHeight*3,R.value*10),re=ae==="smooth"&&Math.abs(le-o.scrollTop)>ue?"auto":ae;re==="auto"&&(S.value=le),o.scrollTo({...q,top:le,behavior:re})}function i(l="auto"){var a;(a=M.value)==null||a.scrollTo({top:0,behavior:l})}return e.watch(()=>t.itemKey,()=>{W.clear(),N.value+=1}),e.watch(()=>t.items.length,async()=>{const l=new Set(t.items.map((g,p)=>_(g,p)));for(const g of W.keys())l.has(g)||W.delete(g);N.value+=1,await e.nextTick();const a=M.value;if(!a)return;const o=Math.max(0,B.value-a.clientHeight);a.scrollTop>o&&(a.scrollTop=o,S.value=o),f()}),e.watch(()=>[t.hasMore,t.loading],async([l])=>{l||(O=-1),await e.nextTick(),f()}),e.onMounted(()=>{if(oe(),typeof ResizeObserver<"u"){E=new ResizeObserver(oe),x=new ResizeObserver(d),M.value&&E.observe(M.value);for(const[l]of Z)x.observe(l)}e.nextTick(f)}),e.onUpdated($),e.onBeforeUnmount(()=>{E==null||E.disconnect(),x==null||x.disconnect(),Z.clear()}),P({scrollTo:V,scrollToIndex:A,scrollToTop:i}),(l,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:M,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(h)}]),style:e.normalizeStyle(j.value),role:"list","aria-label":r.ariaLabel,tabindex:"0",onScrollPassive:m,onTouchstartPassive:a[0]||(a[0]=(...o)=>e.unref(H)&&e.unref(H)(...o)),onTouchmove:a[1]||(a[1]=(...o)=>e.unref(z)&&e.unref(z)(...o)),onTouchend:a[2]||(a[2]=(...o)=>e.unref(y)&&e.unref(y)(...o)),onTouchcancel:a[3]||(a[3]=(...o)=>e.unref(w)&&e.unref(w)(...o))},[r.pullToRefresh||r.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(L)}px`,transform:`translateY(${e.unref(u)-e.unref(L)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(l.$slots,"refresh",{pullDistance:e.unref(T),progress:e.unref(I),refreshing:r.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(K)),1)])],4)):e.createCommentVNode("",!0),r.items.length||r.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${B.value}px`,transform:`translateY(${e.unref(u)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(X.value,({item:o,index:g,key:p,top:q})=>(e.openBlock(),e.createElementBlock("div",{key:p,ref_for:!0,ref:Y=>s(Y,p),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${q}px)`}),role:"listitem","aria-posinset":g+1,"aria-setsize":r.items.length},[e.renderSlot(l.$slots,"default",{item:o,index:g})],12,Be))),128)),r.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${te.value}px`,transform:`translateY(${v.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(l.$slots,"loading",{},()=>[a[4]||(a[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(u)}px)`})},[e.renderSlot(l.$slots,"empty")],4))],46,be))}}),Ie=["aria-label"],ze=["aria-current","aria-posinset","aria-setsize"],Ee={key:1,class:"vue-short-media-feed__empty"},he=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(r,{expose:P,emit:b}){const t=r,k=b,h=e.ref(),T=e.ref(0),u=e.ref(E(t.activeIndex));let I,K=-1;const L=se(),{getItemKey:H}=ne({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),z=e.computed(()=>Math.max(0,Math.floor(t.buffer))),y=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),w=e.computed(()=>T.value>0?T.value:typeof t.height=="number"?Math.max(1,t.height):0),M=e.computed(()=>Math.max(0,u.value-z.value)),S=e.computed(()=>Math.min(t.items.length,u.value+z.value+1)),D=e.computed(()=>t.items.slice(M.value,S.value).map((c,v)=>({item:c,index:M.value+v}))),N=e.computed(()=>M.value*w.value),W=e.computed(()=>(t.items.length-S.value)*w.value),Z=e.computed(()=>({height:ie(t.height)}));function E(c){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(c)?c:0)))}function x(){if(!t.hasMore||t.loading||K===t.items.length)return;(t.items.length===0?0:t.items.length-1-u.value)<=y.value&&(K=t.items.length,k("loadMore"))}function O(c){const v=E(c);v===u.value||t.items.length===0||(u.value=v,k("update:activeIndex",v),k("change",{index:v,item:t.items[v]}),v===0&&k("reachStart"),v===t.items.length-1&&k("reachEnd"),x())}function F(c,v={}){const B=h.value;B&&(typeof B.scrollTo=="function"?B.scrollTo({...v,top:c}):B.scrollTop=c)}function _(c,v={}){if(t.items.length===0)return;const B=E(c);O(B),F(B*w.value,v)}function R(c){if(w.value<=0)return;const v=c.currentTarget.scrollTop;O(Math.round(v/w.value))}function te(c){let v;c.key==="ArrowDown"||c.key==="PageDown"?v=u.value+1:c.key==="ArrowUp"||c.key==="PageUp"?v=u.value-1:c.key==="Home"?v=0:c.key==="End"&&(v=t.items.length-1),v!==void 0&&(c.preventDefault(),_(v,{behavior:"smooth"}))}function C(){var v;const c=((v=h.value)==null?void 0:v.clientHeight)??0;L(h.value,t.height),!(c<=0||c===T.value)&&(T.value=c,e.nextTick(()=>{F(u.value*c)}))}return e.watch(()=>t.activeIndex,async c=>{const v=E(c);v!==u.value&&(u.value=v,await e.nextTick(),F(v*w.value),x())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([c])=>{c||(K=-1),await e.nextTick(),x()}),e.watch(()=>t.items.length,async()=>{const c=E(u.value);t.items.length===0?u.value!==0&&(u.value=0,k("update:activeIndex",0)):O(c),await e.nextTick(),F(c*w.value),x()}),e.onMounted(async()=>{C(),typeof ResizeObserver<"u"&&h.value&&(I=new ResizeObserver(C),I.observe(h.value)),await e.nextTick(),F(u.value*w.value),x()}),e.onBeforeUnmount(()=>{I==null||I.disconnect()}),P({scrollToIndex:_}),(c,v)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:h,class:"vue-short-media-feed",style:e.normalizeStyle(Z.value),role:"list","aria-orientation":"vertical","aria-label":r.ariaLabel,tabindex:"0",onScrollPassive:R,onKeydown:te},[r.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[N.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${N.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,({item:B,index:G})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(H)(B,G),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${w.value}px`}),role:"listitem","aria-current":G===u.value?"true":void 0,"aria-posinset":G+1,"aria-setsize":r.items.length},[e.renderSlot(c.$slots,"default",{item:B,index:G,active:G===u.value})],12,ze))),128)),W.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${W.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",Ee,[e.renderSlot(c.$slots,"empty")]))],44,Ie))}}),$e=["aria-label"],Ve={key:0,class:"vue-virtual-carousel__track",role:"list"},He=["aria-label","aria-current"],Le={key:1,class:"vue-virtual-carousel__empty"},ve=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}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(r,{expose:P,emit:b}){const t=r,k=b,h=e.ref(),T=e.ref(0),u=e.ref(0);let I,K=-1,L,H;const z=e.ref(!1),{getItemKey:y}=ne({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),w=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(t.slidesPerView)?t.slidesPerView:1))),M=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(t.slidesToScroll)?t.slidesToScroll:1))),S=e.computed(()=>Math.max(0,Number.isFinite(t.gap)?t.gap:0)),D=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.buffer)?t.buffer:0))),N=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),W=e.computed(()=>Number.isFinite(t.autoplayDelay)?Math.max(1,t.autoplayDelay):3e3),Z=e.computed(()=>Math.max(0,T.value)),E=e.computed(()=>{if(Z.value<=0)return 0;const i=(w.value-1)*S.value;return Math.max(1,(Z.value-i)/w.value)}),x=e.computed(()=>E.value+S.value),O=e.computed(()=>Math.max(0,t.items.length-w.value)),F=e.computed(()=>Math.max(0,u.value-D.value)),_=e.computed(()=>Math.min(t.items.length,u.value+w.value+D.value)),R=e.computed(()=>t.items.slice(F.value,_.value).map((i,l)=>({item:i,index:F.value+l}))),te=e.computed(()=>t.items.length===0?0:t.items.length*E.value+(t.items.length-1)*S.value),C=e.computed(()=>F.value*x.value),c=e.computed(()=>Math.max(0,te.value-_.value*x.value)),v=e.computed(()=>({height:ie(t.height)}));function B(i){return Math.min(O.value,Math.max(0,Math.floor(Number.isFinite(i)?i:0)))}u.value=B(t.activeIndex);function G(i){return i>=u.value&&i<Math.min(t.items.length,u.value+w.value)}function J(){if(!t.hasMore||t.loading||K===t.items.length)return;const i=t.items.length===0?-1:Math.min(t.items.length-1,u.value+w.value-1);t.items.length-1-i<=N.value&&(K=t.items.length,k("loadMore"))}function Q(i){const l=B(i);l===u.value||t.items.length===0||(u.value=l,k("update:activeIndex",l),k("change",{index:l,item:t.items[l]}),l===0&&k("reachStart"),l===O.value&&k("reachEnd"),J(),t.autoplay&&!z.value&&m())}function U(i,l={}){const a=h.value;a&&(typeof a.scrollTo=="function"?a.scrollTo({...l,left:i}):a.scrollLeft=i)}function X(i,l={}){if(t.items.length===0||x.value<=0)return;const a=B(i),o=Math.abs(a-u.value),g=l.behavior==="smooth"&&o>D.value?"auto":l.behavior;H=g==="smooth"?a:void 0,Q(a),U(a*x.value,{...l,behavior:g})}function j(i="smooth"){X(u.value+M.value,{behavior:i})}function oe(i="smooth"){X(u.value-M.value,{behavior:i})}function m(){f(),!(!t.autoplay||t.items.length===0)&&(L=setTimeout(()=>{u.value>=O.value?t.autoplayLoop?X(0,{behavior:"smooth"}):f():j("smooth")},W.value))}function f(){L!==void 0&&(clearTimeout(L),L=void 0)}function n(){z.value=!0,t.pauseOnHover&&f()}function d(){z.value=!1,t.autoplay&&m()}function s(){H=void 0}function $(i){if(x.value<=0)return;const l=i.currentTarget.scrollLeft;if(H!==void 0){const a=H*x.value;if(Math.abs(l-a)>1)return;H=void 0}Q(Math.round(l/x.value))}function V(i){i.key==="ArrowRight"||i.key==="PageDown"?(i.preventDefault(),j()):i.key==="ArrowLeft"||i.key==="PageUp"?(i.preventDefault(),oe()):i.key==="Home"?(i.preventDefault(),X(0,{behavior:"smooth"})):i.key==="End"&&(i.preventDefault(),X(O.value,{behavior:"auto"}))}function A(){var l;const i=((l=h.value)==null?void 0:l.clientWidth)??0;i<=0||i===T.value||(T.value=i,e.nextTick(()=>{U(u.value*x.value)}))}return e.watch(()=>t.activeIndex,async i=>{const l=B(i);l!==u.value&&(s(),u.value=l,await e.nextTick(),U(l*x.value),J())}),e.watch(()=>[t.items.length,t.slidesPerView,t.gap],async()=>{const i=B(u.value);t.items.length===0?u.value!==0&&(u.value=0,k("update:activeIndex",0)):Q(i),await e.nextTick(),U(i*x.value),J(),t.autoplay&&t.items.length>0&&!z.value&&m()}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([i])=>{i||(K=-1),await e.nextTick(),J()}),e.watch(()=>t.autoplay,i=>{i&&!z.value?m():f()}),e.watch(()=>t.autoplayDelay,()=>{t.autoplay&&!z.value&&m()}),e.watch(()=>t.autoplayLoop,i=>{!t.autoplay||z.value||(!i&&u.value>=O.value?f():m())}),e.watch(()=>t.pauseOnHover,i=>{i&&z.value?f():!i&&t.autoplay&&m()}),e.onMounted(async()=>{A(),typeof ResizeObserver<"u"&&h.value&&(I=new ResizeObserver(A),I.observe(h.value)),await e.nextTick(),U(u.value*x.value),J(),t.autoplay&&m()}),e.onBeforeUnmount(()=>{I==null||I.disconnect(),f()}),P({next:j,previous:oe,scrollToIndex:X,startAutoplay:m,stopAutoplay:f}),(i,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:h,class:"vue-virtual-carousel",style:e.normalizeStyle(v.value),role:"region","aria-roledescription":"carousel","aria-label":r.ariaLabel,tabindex:"0",onScrollPassive:$,onPointerdown:s,onWheelPassive:s,onKeydown:V,onMouseenter:n,onMouseleave:d},[r.items.length?(e.openBlock(),e.createElementBlock("div",Ve,[C.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${C.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(R.value,({item:a,index:o})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(y)(a,o),class:"vue-virtual-carousel__item",style:e.normalizeStyle({flexBasis:`${E.value}px`,marginRight:o<r.items.length-1?`${S.value}px`:"0px"}),role:"listitem","aria-roledescription":"slide","aria-label":`${o+1} of ${r.items.length}`,"aria-current":o===u.value?"true":void 0},[e.renderSlot(i.$slots,"default",{item:a,index:o,active:o===u.value,visible:G(o)})],12,He))),128)),c.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${c.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",Le,[e.renderSlot(i.$slots,"empty")]))],44,$e))}}),Ce=["aria-label"],Ke=["aria-posinset","aria-setsize"],pe=e.defineComponent({name:"VirtualScroll",__name:"VirtualScroll",props:{items:{},itemSize:{},height:{default:400},overscan:{default:3},itemKey:{default:void 0},ariaLabel:{default:"Virtual list"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadingItemSize:{default:void 0},loadMoreThreshold:{default:200},pullToRefresh:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},pullRefreshThreshold:{default:64}},emits:["scroll","loadMore","refresh"],setup(r,{expose:P,emit:b}){const t=r,k=b,{pulling:h,pullDistance:T,pullOffset:u,pullProgress:I,refreshMessage:K,refreshThreshold:L,handleTouchStart:H,handleTouchMove:z,handleTouchEnd:y,handleTouchCancel:w}=de({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>k("refresh")}),M=e.ref(),S=e.ref(0),D=e.ref(0);let N,W=-1;const Z=se(),{getItemKey:E}=ne({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),x=e.computed(()=>Math.max(1,t.itemSize)),O=e.computed(()=>Math.max(0,Math.floor(t.overscan))),F=e.computed(()=>t.items.length*x.value),_=e.computed(()=>Math.max(1,t.loadingItemSize??x.value)),R=e.computed(()=>F.value+(t.loading?_.value:0)),te=e.computed(()=>D.value>0?D.value:typeof t.height=="number"?t.height:0),C=e.computed(()=>Math.max(0,Math.floor(S.value/x.value)-O.value)),c=e.computed(()=>{const m=Math.ceil((S.value+te.value)/x.value);return Math.min(t.items.length,m+O.value)}),v=e.computed(()=>t.items.slice(C.value,c.value).map((m,f)=>({item:m,index:C.value+f}))),B=e.computed(()=>({height:ie(t.height)})),G=e.computed(()=>({transform:`translateY(${C.value*x.value}px)`}));function J(){var m;D.value=((m=M.value)==null?void 0:m.clientHeight)??0,Z(M.value,t.height),e.nextTick(U)}function Q(m){S.value=m.currentTarget.scrollTop,k("scroll",{scrollTop:S.value,startIndex:C.value,endIndex:c.value}),U()}function U(){const m=M.value;if(!m||!t.hasMore||t.loading||W===t.items.length)return;const f=Math.max(0,t.loadMoreThreshold);R.value-m.scrollTop-m.clientHeight<=f&&(W=t.items.length,k("loadMore"))}function X(m,f={}){const n=M.value;if(!n)return;const d=Math.max(0,R.value-n.clientHeight),s=Math.min(Math.max(0,Number.isFinite(m)?m:0),d),$=f.behavior??"auto";$==="auto"&&(S.value=s),n.scrollTo({...f,top:s,behavior:$})}function j(m,f={}){const n=M.value;if(!n||t.items.length===0)return;const d=Math.min(t.items.length-1,Math.max(0,Math.floor(m))),{align:s="start",...$}=f;let V=d*x.value;s==="center"?V-=(n.clientHeight-x.value)/2:s==="end"&&(V-=n.clientHeight-x.value),n.scrollTo({...$,top:Math.max(0,Math.min(V,R.value-n.clientHeight))})}function oe(m="auto"){var f;(f=M.value)==null||f.scrollTo({top:0,behavior:m})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const m=M.value;if(!m)return;const f=Math.max(0,R.value-m.clientHeight);m.scrollTop>f&&(m.scrollTop=f,S.value=f),U()}),e.watch(()=>[t.hasMore,t.loading],async([m])=>{m||(W=-1),await e.nextTick(),U()}),e.onMounted(()=>{J(),typeof ResizeObserver<"u"&&M.value&&(N=new ResizeObserver(J),N.observe(M.value)),e.nextTick(U)}),e.onBeforeUnmount(()=>{N==null||N.disconnect()}),P({scrollTo:X,scrollToIndex:j,scrollToTop:oe}),(m,f)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:M,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(h)}]),style:e.normalizeStyle(B.value),role:"list","aria-label":r.ariaLabel,tabindex:"0",onScrollPassive:Q,onTouchstartPassive:f[0]||(f[0]=(...n)=>e.unref(H)&&e.unref(H)(...n)),onTouchmove:f[1]||(f[1]=(...n)=>e.unref(z)&&e.unref(z)(...n)),onTouchend:f[2]||(f[2]=(...n)=>e.unref(y)&&e.unref(y)(...n)),onTouchcancel:f[3]||(f[3]=(...n)=>e.unref(w)&&e.unref(w)(...n))},[r.pullToRefresh||r.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(L)}px`,transform:`translateY(${e.unref(u)-e.unref(L)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$slots,"refresh",{pullDistance:e.unref(T),progress:e.unref(I),refreshing:r.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(K)),1)])],4)):e.createCommentVNode("",!0),r.items.length||r.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-scroll__spacer",style:e.normalizeStyle({height:`${R.value}px`,transform:`translateY(${e.unref(u)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(G.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value,({item:n,index:d})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(E)(n,d),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${x.value}px`}),role:"listitem","aria-posinset":d+1,"aria-setsize":r.items.length},[e.renderSlot(m.$slots,"default",{item:n,index:d})],12,Ke))),128))],4),r.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${_.value}px`,transform:`translateY(${F.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(m.$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(u)}px)`})},[e.renderSlot(m.$slots,"empty")],4))],46,Ce))}}),Ne=["aria-label"],De=["aria-posinset","aria-setsize"],ge=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(r,{expose:P,emit:b}){const t=r,k=b,h=e.ref(),T=e.ref(0),u=e.ref(0),I=e.ref(0),K=e.ref(0),L=new Map,H=new Map;let z,y,w=-1;const{getItemKey:M}=ne({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:S,pullDistance:D,pullOffset:N,pullProgress:W,refreshMessage:Z,refreshThreshold:E,handleTouchStart:x,handleTouchMove:O,handleTouchEnd:F,handleTouchCancel:_}=de({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>k("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),R=e.computed(()=>Math.max(1,t.estimatedItemSize)),te=e.computed(()=>Math.max(1,t.loadingItemSize??R.value)),C=e.computed(()=>Math.max(0,Math.floor(t.overscan))),c=e.computed(()=>{K.value;const l=new Array(t.items.length+1),a=new Array(t.items.length);l[0]=0;for(let o=0;o<t.items.length;o+=1){const g=M(t.items[o],o),p=L.get(g)??R.value;a[o]=p,l[o+1]=l[o]+p}return{offsets:l,sizes:a,total:l[t.items.length]??0}}),v=e.computed(()=>c.value.total+(t.loading?te.value:0)),B=e.computed(()=>{const l=new Map;return t.items.forEach((a,o)=>{l.set(M(a,o),o)}),l}),G=e.computed(()=>Math.max(0,T.value-I.value));function J(l){if(t.items.length===0)return 0;const a=c.value.offsets;let o=0,g=t.items.length;for(;o<g;){const p=Math.floor((o+g)/2);a[p+1]<=l?o=p+1:g=p}return Math.min(o,t.items.length-1)}const Q=e.computed(()=>Math.max(0,J(G.value)-C.value)),U=e.computed(()=>{if(t.items.length===0)return 0;const l=T.value+u.value-I.value,a=Math.max(R.value,l),o=J(a)+1;return Math.min(t.items.length,o+C.value)}),X=e.computed(()=>t.items.slice(Q.value,U.value).map((l,a)=>{const o=Q.value+a;return{item:l,index:o,key:M(l,o),top:c.value.offsets[o]}}));function j(){typeof window>"u"||(T.value=Math.max(0,window.scrollY),u.value=window.innerHeight,h.value&&(I.value=h.value.getBoundingClientRect().top+T.value))}function oe(){k("scroll",{scrollTop:G.value,startIndex:Q.value,endIndex:U.value})}function m(){j(),oe(),f()}function f(){if(typeof window>"u"||!t.hasMore||t.loading||w===t.items.length)return;const l=Math.max(0,t.loadMoreThreshold),a=I.value+v.value,o=T.value+u.value;a-o<=l&&(w=t.items.length,k("loadMore"))}function n(l){const a=l.borderBoxSize;if(a){const o=Array.isArray(a)?a[0]:a;if(o!=null&&o.blockSize)return o.blockSize}return l.contentRect.height}function d(l){const a=c.value;let o=0,g=!1;for(const p of l){const q=p.target,Y=H.get(q),ee=n(p);if(Y===void 0||ee<=0)continue;const le=L.get(Y)??R.value;if(Math.abs(le-ee)<.5)continue;const ae=B.value.get(Y);ae!==void 0&&a.offsets[ae+1]<=G.value&&(o+=ee-le),L.set(Y,ee),g=!0}g&&(K.value+=1,e.nextTick(()=>{if(o!==0&&typeof window<"u"){const p=Math.max(0,T.value+o);T.value=p,window.scrollTo({top:p,behavior:"auto"})}j(),f()}))}function s(l,a){l instanceof HTMLElement&&(H.set(l,a),y==null||y.observe(l))}function $(){for(const[l]of H)l.isConnected||(y==null||y.unobserve(l),H.delete(l))}function V(l,a={}){if(typeof window>"u")return;j();const o=Math.max(0,v.value-u.value),g=Math.min(Math.max(0,Number.isFinite(l)?l:0),o),p=Math.max(0,I.value+g),q=a.behavior??"auto";q==="auto"&&(T.value=p),window.scrollTo({...a,top:p,behavior:q})}function A(l,a={}){if(typeof window>"u"||t.items.length===0)return;j();const o=Math.min(t.items.length-1,Math.max(0,Math.floor(l))),{align:g="start",...p}=a,q=c.value.sizes[o];let Y=I.value+c.value.offsets[o];g==="center"?Y-=(u.value-q)/2:g==="end"&&(Y-=u.value-q);const ee=Math.max(I.value,I.value+v.value-u.value),le=Math.max(0,Math.min(Y,ee)),ae=p.behavior??"auto",ue=Math.max(u.value*3,R.value*10),re=ae==="smooth"&&Math.abs(le-T.value)>ue?"auto":ae;re==="auto"&&(T.value=le),window.scrollTo({...p,top:le,behavior:re})}function i(l="auto"){typeof window>"u"||(j(),window.scrollTo({top:Math.max(0,I.value),behavior:l}))}return e.watch(()=>t.itemKey,()=>{L.clear(),K.value+=1}),e.watch(()=>t.items.length,async()=>{const l=new Set(t.items.map((a,o)=>M(a,o)));for(const a of L.keys())l.has(a)||L.delete(a);K.value+=1,await e.nextTick(),j(),f()}),e.watch(()=>[t.hasMore,t.loading],async([l])=>{l||(w=-1),await e.nextTick(),j(),f()}),e.onMounted(()=>{if(j(),window.addEventListener("scroll",m,{passive:!0}),window.addEventListener("resize",m,{passive:!0}),typeof ResizeObserver<"u"){z=new ResizeObserver(()=>{j(),f()}),y=new ResizeObserver(d),h.value&&z.observe(h.value);for(const[l]of H)y.observe(l)}e.nextTick(f)}),e.onUpdated($),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",m),window.removeEventListener("resize",m),z==null||z.disconnect(),y==null||y.disconnect(),H.clear()}),P({scrollTo:V,scrollToIndex:A,scrollToTop:i}),(l,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:h,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(S)}]),role:"list","aria-label":r.ariaLabel,onTouchstartPassive:a[0]||(a[0]=(...o)=>e.unref(x)&&e.unref(x)(...o)),onTouchmove:a[1]||(a[1]=(...o)=>e.unref(O)&&e.unref(O)(...o)),onTouchend:a[2]||(a[2]=(...o)=>e.unref(F)&&e.unref(F)(...o)),onTouchcancel:a[3]||(a[3]=(...o)=>e.unref(_)&&e.unref(_)(...o))},[r.pullToRefresh||r.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(E)}px`,transform:`translateY(${e.unref(N)-e.unref(E)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(l.$slots,"refresh",{pullDistance:e.unref(D),progress:e.unref(W),refreshing:r.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(Z)),1)])],4)):e.createCommentVNode("",!0),r.items.length||r.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${v.value}px`,transform:`translateY(${e.unref(N)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(X.value,({item:o,index:g,key:p,top:q})=>(e.openBlock(),e.createElementBlock("div",{key:p,ref_for:!0,ref:Y=>s(Y,p),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${q}px)`}),role:"listitem","aria-posinset":g+1,"aria-setsize":r.items.length},[e.renderSlot(l.$slots,"default",{item:o,index:g})],12,De))),128)),r.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${te.value}px`,transform:`translateY(${c.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(l.$slots,"loading",{},()=>[a[4]||(a[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(N)}px)`})},[e.renderSlot(l.$slots,"empty")],4))],42,Ne))}}),ye=me,xe={install(r){r.component("ChatVirtualScroll",fe),r.component("DynamicVirtualScroll",me),r.component("ShortMediaFeed",he),r.component("VirtualCarousel",ve),r.component("VirtualList",ye),r.component("VirtualScroll",pe),r.component("WindowDynamicVirtualScroll",ge)}};exports.ChatVirtualScroll=fe;exports.DynamicVirtualScroll=me;exports.ShortMediaFeed=he;exports.VirtualCarousel=ve;exports.VirtualList=ye;exports.VirtualScroll=pe;exports.VueVirtualScroll=xe;exports.WindowDynamicVirtualScroll=ge;exports.default=xe;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");function ye(r){return typeof r=="string"||typeof r=="number"||typeof r=="symbol"}function se(r,N){const w=r[N];return ye(w)?w:void 0}function xe(r){return se(r,"id")??se(r,"key")}function ae(r){function N(t,x){const h=r.itemKey();if(typeof h=="function")return h(t,x);if(t!==null&&typeof t=="object"){if(h!==void 0){const s=se(t,h);if(s!==void 0)return s}const T=xe(t);if(T!==void 0)return T}return x}function w(){}return e.watch(()=>[r.itemKey(),r.items()],w,{immediate:!0}),{getItemKey:N}}function re(r){return r==="fill"?"100%":typeof r=="number"?`${r}px`:r}function ie(r){return(N,w)=>{typeof w=="string"&&(w==="fill"||w.trim().endsWith("%"))}}const Te=["aria-label"],Me={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},ke=["aria-posinset","aria-setsize"],de=e.defineComponent({name:"ChatVirtualScroll",__name:"ChatVirtualScroll",props:{items:{},estimatedItemSize:{default:48},height:{default:400},overscan:{default:5},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(r,{expose:N,emit:w}){const t=r,x=w,h=e.ref(),T=e.ref(0),s=e.ref(0),b=e.ref(0),K=e.ref(!0),H=new Map,E=new Map;let C,f,B=-1,y=!1;const M=ie(),{getItemKey:L}=ae({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),O=e.computed(()=>Math.max(1,t.estimatedItemSize)),D=e.computed(()=>Math.max(0,Math.floor(t.overscan))),q=e.computed(()=>s.value>0?s.value:typeof t.height=="number"?Math.max(0,t.height):O.value),V=e.computed(()=>{b.value;const a=new Array(t.items.length+1),c=new Array(t.items.length);a[0]=0;for(let u=0;u<t.items.length;u+=1){const I=L(t.items[u],u),S=H.get(I)??O.value;c[u]=S,a[u+1]=a[u]+S}return{offsets:a,sizes:c,total:a[t.items.length]??0}}),k=e.computed(()=>{const a=new Map;return t.items.forEach((c,u)=>{a.set(L(c,u),u)}),a});function _(a){if(t.items.length===0)return 0;const c=V.value.offsets;let u=0,I=t.items.length;for(;u<I;){const S=Math.floor((u+I)/2);c[S+1]<=a?u=S+1:I=S}return Math.min(u,t.items.length-1)}const z=e.computed(()=>Math.max(0,_(T.value)-D.value)),F=e.computed(()=>{if(t.items.length===0)return 0;const a=_(T.value+q.value)+1;return Math.min(t.items.length,a+D.value)}),P=e.computed(()=>t.items.slice(z.value,F.value).map((a,c)=>{const u=z.value+c;return{item:a,index:u,key:L(a,u),top:V.value.offsets[u]}})),X=e.computed(()=>({height:re(t.height)}));function R(){const a=h.value;if(!a)return;const u=Math.max(0,V.value.total-a.scrollTop-a.clientHeight)<=Math.max(0,t.bottomThreshold);u!==K.value&&(K.value=u,y&&x("bottomChange",u))}function m(){var a;s.value=((a=h.value)==null?void 0:a.clientHeight)??0,M(h.value,t.height),e.nextTick(()=>{R(),$()})}function v(a){T.value=a.currentTarget.scrollTop,R(),x("scroll",{scrollTop:T.value,startIndex:z.value,endIndex:F.value}),$()}function $(){const a=h.value;!y||!a||!t.hasOlder||t.loadingOlder||B===t.items.length||a.scrollTop<=Math.max(0,t.loadOlderThreshold)&&(B=t.items.length,x("loadOlder"))}function G(a){const c=a.borderBoxSize;if(c){const u=Array.isArray(c)?c[0]:c;if(u!=null&&u.blockSize)return u.blockSize}return a.contentRect.height}function Z(a){const c=V.value,u=K.value&&t.stickToBottom;let I=0,S=!1;for(const A of a){const Q=A.target,n=E.get(Q),l=G(A);if(n===void 0||l<=0)continue;const o=H.get(n)??O.value;if(Math.abs(o-l)<.5)continue;const i=k.value.get(n);i!==void 0&&c.offsets[i+1]<=T.value&&(I+=l-o),H.set(n,l),S=!0}S&&(b.value+=1,e.nextTick(()=>{const A=h.value;A&&(u?p("auto"):I!==0&&(A.scrollTop+=I,T.value=A.scrollTop,R()))}))}function te(a,c){a instanceof HTMLElement&&(E.set(a,c),f==null||f.observe(a))}function U(){for(const[a]of E)a.isConnected||(f==null||f.unobserve(a),E.delete(a))}function le(a,c={}){const u=h.value;if(!u)return;const I=Math.max(0,V.value.total-u.clientHeight),S=Math.min(Math.max(0,Number.isFinite(a)?a:0),I),A=c.behavior??"auto";A==="auto"&&(T.value=S),u.scrollTo({...c,top:S,behavior:A}),e.nextTick(R)}function Y(a,c={}){const u=h.value;if(!u||t.items.length===0)return;const I=Math.min(t.items.length-1,Math.max(0,Math.floor(a))),{align:S="start",...A}=c,Q=V.value.sizes[I];let n=V.value.offsets[I];S==="center"?n-=(u.clientHeight-Q)/2:S==="end"&&(n-=u.clientHeight-Q);const l=Math.max(0,Math.min(n,V.value.total-u.clientHeight)),o=A.behavior??"auto";o==="auto"&&(T.value=l),u.scrollTo({...A,top:l,behavior:o}),e.nextTick(R)}function J(a="auto"){const c=h.value;c&&(a==="auto"&&(T.value=0),c.scrollTo({top:0,behavior:a}),e.nextTick(R))}function p(a="auto"){const c=h.value;if(!c)return;const u=Math.max(0,V.value.total-c.clientHeight);a==="auto"?(c.scrollTop=u,T.value=u):c.scrollTo({top:u,behavior:a}),e.nextTick(R)}let g=t.items.map((a,c)=>L(a,c));return e.watch(()=>t.items.map((a,c)=>L(a,c)),async a=>{const c=g;g=a;const u=h.value,I=(u==null?void 0:u.scrollTop)??0,S=K.value&&t.stickToBottom,A=c[0],Q=A===void 0?0:a.indexOf(A),n=Q>0?a.slice(0,Q).reduce((o,i)=>o+(H.get(i)??O.value),0):0,l=new Set(a);for(const o of H.keys())l.has(o)||H.delete(o);b.value+=1,await e.nextTick(),u&&(n>0?(u.scrollTop=I+n,T.value=u.scrollTop):a.length>c.length&&S&&p("auto"),R(),$())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([a])=>{a||(B=-1),await e.nextTick(),$()}),e.onMounted(()=>{if(m(),typeof ResizeObserver<"u"){C=new ResizeObserver(m),f=new ResizeObserver(Z),h.value&&C.observe(h.value);for(const[a]of E)f.observe(a)}e.nextTick(()=>{t.initialScroll==="bottom"&&p("auto"),y=!0,R(),$()})}),e.onUpdated(U),e.onBeforeUnmount(()=>{C&&(C.disconnect(),C=void 0),f&&(f.disconnect(),f=void 0),E.clear()}),N({isAtBottom:K,scrollTo:le,scrollToIndex:Y,scrollToTop:J,scrollToBottom:p}),(a,c)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:h,class:"vue-chat-virtual-scroll",style:e.normalizeStyle(X.value),role:"log","aria-label":r.ariaLabel,"aria-live":"polite",tabindex:"0",onScrollPassive:v},[r.loadingOlder?(e.openBlock(),e.createElementBlock("div",Me,[e.createElementVNode("div",null,[e.renderSlot(a.$slots,"loadingOlder",{},()=>[c[0]||(c[0]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),r.items.length?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${V.value.total}px`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value,({item:u,index:I,key:S,top:A})=>(e.openBlock(),e.createElementBlock("div",{key:S,ref_for:!0,ref:Q=>te(Q,S),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${A}px)`}),role:"article","aria-posinset":I+1,"aria-setsize":r.items.length},[e.renderSlot(a.$slots,"default",{item:u,index:I})],12,ke))),128))],4)):e.renderSlot(a.$slots,"empty",{},void 0,void 0,2)],44,Te))}});function ue(r){const N=e.ref(),w=e.ref(0),t=e.ref(!1),x=e.ref(!1),h=e.computed(()=>Math.max(1,r.threshold())),T=e.computed(()=>r.refreshing()||x.value?h.value:w.value),s=e.computed(()=>Math.min(1,w.value/h.value)),b=e.computed(()=>r.refreshing()||x.value?"Refreshing…":s.value>=1?"Release to refresh":"Pull to refresh");function K(){N.value=void 0,t.value=!1,w.value=0}function H(f){var M;const B=f.currentTarget,y=((M=r.scrollTop)==null?void 0:M.call(r))??B.scrollTop;!r.enabled()||r.refreshing()||y>0||f.touches.length!==1||(N.value=f.touches[0].clientY,t.value=!0)}function E(f){var L;if(N.value===void 0||!t.value)return;const B=f.currentTarget;if((((L=r.scrollTop)==null?void 0:L.call(r))??B.scrollTop)>0||f.touches.length!==1){K();return}const M=f.touches[0].clientY-N.value;if(M<=0){w.value=0;return}f.preventDefault(),w.value=Math.min(M*.5,h.value*2)}function C(){if(N.value===void 0)return;const f=w.value>=h.value&&r.enabled()&&!r.refreshing();if(N.value=void 0,t.value=!1,!f){w.value=0;return}w.value=h.value,x.value=!0,r.onRefresh(),e.nextTick(()=>{r.refreshing()||(x.value=!1,w.value=0)})}return e.watch(()=>r.refreshing(),(f,B)=>{f?(x.value=!1,w.value=h.value):B&&(x.value=!1,w.value=0)}),{pulling:t,pullDistance:w,pullOffset:T,pullProgress:s,refreshMessage:b,refreshThreshold:h,handleTouchStart:H,handleTouchMove:E,handleTouchEnd:C,handleTouchCancel:K}}const we=["aria-label"],Se=["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(r,{expose:N,emit:w}){const t=r,x=w,{pulling:h,pullDistance:T,pullOffset:s,pullProgress:b,refreshMessage:K,refreshThreshold:H,handleTouchStart:E,handleTouchMove:C,handleTouchEnd:f,handleTouchCancel:B}=ue({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh")}),y=e.ref(),M=e.ref(0),L=e.ref(0),O=e.ref(0),D=new Map,q=new Map;let V,k,_=-1;const z=ie(),{getItemKey:F}=ae({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),P=e.computed(()=>Math.max(1,t.estimatedItemSize)),X=e.computed(()=>Math.max(1,t.loadingItemSize??P.value)),R=e.computed(()=>Math.max(0,Math.floor(t.overscan))),m=e.computed(()=>L.value>0?L.value:typeof t.height=="number"?Math.max(0,t.height):P.value),v=e.computed(()=>{O.value;const n=new Array(t.items.length+1),l=new Array(t.items.length);n[0]=0;for(let o=0;o<t.items.length;o+=1){const i=F(t.items[o],o),d=D.get(i)??P.value;l[o]=d,n[o+1]=n[o]+d}return{offsets:n,sizes:l,total:n[t.items.length]??0}}),$=e.computed(()=>v.value.total+(t.loading?X.value:0)),G=e.computed(()=>{const n=new Map;return t.items.forEach((l,o)=>{n.set(F(l,o),o)}),n});function Z(n){if(t.items.length===0)return 0;const l=v.value.offsets;let o=0,i=t.items.length;for(;o<i;){const d=Math.floor((o+i)/2);l[d+1]<=n?o=d+1:i=d}return Math.min(o,t.items.length-1)}const te=e.computed(()=>Math.max(0,Z(M.value)-R.value)),U=e.computed(()=>{if(t.items.length===0)return 0;const n=Z(M.value+m.value)+1;return Math.min(t.items.length,n+R.value)}),le=e.computed(()=>t.items.slice(te.value,U.value).map((n,l)=>{const o=te.value+l;return{item:n,index:o,key:F(n,o),top:v.value.offsets[o]}})),Y=e.computed(()=>({height:re(t.height)}));function J(){var n;L.value=((n=y.value)==null?void 0:n.clientHeight)??0,z(y.value,t.height),e.nextTick(g)}function p(n){M.value=n.currentTarget.scrollTop,x("scroll",{scrollTop:M.value,startIndex:te.value,endIndex:U.value}),g()}function g(){const n=y.value;if(!n||!t.hasMore||t.loading||_===t.items.length)return;const l=Math.max(0,t.loadMoreThreshold);$.value-n.scrollTop-n.clientHeight<=l&&(_=t.items.length,x("loadMore"))}function a(n){const l=n.borderBoxSize;if(l){const o=Array.isArray(l)?l[0]:l;if(o!=null&&o.blockSize)return o.blockSize}return n.contentRect.height}function c(n){const l=v.value;let o=0,i=!1;for(const d of n){const j=d.target,W=q.get(j),ee=a(d);if(W===void 0||ee<=0)continue;const oe=D.get(W)??P.value;if(Math.abs(oe-ee)<.5)continue;const ne=G.value.get(W);ne!==void 0&&l.offsets[ne+1]<=M.value&&(o+=ee-oe),D.set(W,ee),i=!0}i&&(O.value+=1,e.nextTick(g),o!==0&&e.nextTick(()=>{const d=y.value;d&&(d.scrollTop+=o,M.value=d.scrollTop)}))}function u(n,l){n instanceof HTMLElement&&(q.set(n,l),k==null||k.observe(n))}function I(){for(const[n]of q)n.isConnected||(k==null||k.unobserve(n),q.delete(n))}function S(n,l={}){const o=y.value;if(!o)return;const i=Math.max(0,$.value-o.clientHeight),d=Math.min(Math.max(0,Number.isFinite(n)?n:0),i),j=l.behavior??"auto";j==="auto"&&(M.value=d),o.scrollTo({...l,top:d,behavior:j})}function A(n,l={}){const o=y.value;if(!o||t.items.length===0)return;const i=Math.min(t.items.length-1,Math.max(0,Math.floor(n))),{align:d="start",...j}=l;let W=v.value.offsets[i];const ee=v.value.sizes[i];d==="center"?W-=(o.clientHeight-ee)/2:d==="end"&&(W-=o.clientHeight-ee);const oe=Math.max(0,Math.min(W,$.value-o.clientHeight)),ne=j.behavior??"auto";ne==="auto"&&(M.value=oe),o.scrollTo({...j,top:oe,behavior:ne})}function Q(n="auto"){var l;(l=y.value)==null||l.scrollTo({top:0,behavior:n})}return e.watch(()=>t.itemKey,()=>{D.clear(),O.value+=1}),e.watch(()=>t.items.length,async()=>{const n=new Set(t.items.map((i,d)=>F(i,d)));for(const i of D.keys())n.has(i)||D.delete(i);O.value+=1,await e.nextTick();const l=y.value;if(!l)return;const o=Math.max(0,$.value-l.clientHeight);l.scrollTop>o&&(l.scrollTop=o,M.value=o),g()}),e.watch(()=>[t.hasMore,t.loading],async([n])=>{n||(_=-1),await e.nextTick(),g()}),e.onMounted(()=>{if(J(),typeof ResizeObserver<"u"){V=new ResizeObserver(J),k=new ResizeObserver(c),y.value&&V.observe(y.value);for(const[n]of q)k.observe(n)}e.nextTick(g)}),e.onUpdated(I),e.onBeforeUnmount(()=>{V&&(V.disconnect(),V=void 0),k&&(k.disconnect(),k=void 0),q.clear()}),N({scrollTo:S,scrollToIndex:A,scrollToTop:Q}),(n,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:y,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(h)}]),style:e.normalizeStyle(Y.value),role:"list","aria-label":r.ariaLabel,tabindex:"0",onScrollPassive:p,onTouchstartPassive:l[0]||(l[0]=(...o)=>e.unref(E)&&e.unref(E)(...o)),onTouchmove:l[1]||(l[1]=(...o)=>e.unref(C)&&e.unref(C)(...o)),onTouchend:l[2]||(l[2]=(...o)=>e.unref(f)&&e.unref(f)(...o)),onTouchcancel:l[3]||(l[3]=(...o)=>e.unref(B)&&e.unref(B)(...o))},[r.pullToRefresh||r.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(H)}px`,transform:`translateY(${e.unref(s)-e.unref(H)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(n.$slots,"refresh",{pullDistance:e.unref(T),progress:e.unref(b),refreshing:r.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(K)),1)])],4)):e.createCommentVNode("",!0),r.items.length||r.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${$.value}px`,transform:`translateY(${e.unref(s)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(le.value,({item:o,index:i,key:d,top:j})=>(e.openBlock(),e.createElementBlock("div",{key:d,ref_for:!0,ref:W=>u(W,d),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${j}px)`}),role:"listitem","aria-posinset":i+1,"aria-setsize":r.items.length},[e.renderSlot(n.$slots,"default",{item:o,index:i})],12,Se))),128)),r.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${X.value}px`,transform:`translateY(${v.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(n.$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(s)}px)`})},[e.renderSlot(n.$slots,"empty")],4))],46,we))}}),be=["aria-label"],Be=["aria-current","aria-posinset","aria-setsize"],ze={key:1,class:"vue-short-media-feed__empty"},me=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(r,{expose:N,emit:w}){const t=r,x=w,h=e.ref(),T=e.ref(0),s=e.ref(V(t.activeIndex));let b,K=-1;const H=ie(),{getItemKey:E}=ae({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),C=e.computed(()=>Math.max(0,Math.floor(t.buffer))),f=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),B=e.computed(()=>T.value>0?T.value:typeof t.height=="number"?Math.max(1,t.height):0),y=e.computed(()=>Math.max(0,s.value-C.value)),M=e.computed(()=>Math.min(t.items.length,s.value+C.value+1)),L=e.computed(()=>t.items.slice(y.value,M.value).map((m,v)=>({item:m,index:y.value+v}))),O=e.computed(()=>y.value*B.value),D=e.computed(()=>(t.items.length-M.value)*B.value),q=e.computed(()=>({height:re(t.height)}));function V(m){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(m)?m:0)))}function k(){if(!t.hasMore||t.loading||K===t.items.length)return;(t.items.length===0?0:t.items.length-1-s.value)<=f.value&&(K=t.items.length,x("loadMore"))}function _(m){const v=V(m);v===s.value||t.items.length===0||(s.value=v,x("update:activeIndex",v),x("change",{index:v,item:t.items[v]}),v===0&&x("reachStart"),v===t.items.length-1&&x("reachEnd"),k())}function z(m,v={}){const $=h.value;$&&(typeof $.scrollTo=="function"?$.scrollTo({...v,top:m}):$.scrollTop=m)}function F(m,v={}){if(t.items.length===0)return;const $=V(m);_($),z($*B.value,v)}function P(m){if(B.value<=0)return;const v=m.currentTarget.scrollTop;_(Math.round(v/B.value))}function X(m){let v;m.key==="ArrowDown"||m.key==="PageDown"?v=s.value+1:m.key==="ArrowUp"||m.key==="PageUp"?v=s.value-1:m.key==="Home"?v=0:m.key==="End"&&(v=t.items.length-1),v!==void 0&&(m.preventDefault(),F(v,{behavior:"smooth"}))}function R(){var v;const m=((v=h.value)==null?void 0:v.clientHeight)??0;H(h.value,t.height),!(m<=0||m===T.value)&&(T.value=m,e.nextTick(()=>{z(s.value*m)}))}return e.watch(()=>t.activeIndex,async m=>{const v=V(m);v!==s.value&&(s.value=v,await e.nextTick(),z(v*B.value),k())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([m])=>{m||(K=-1),await e.nextTick(),k()}),e.watch(()=>t.items.length,async()=>{const m=V(s.value);t.items.length===0?s.value!==0&&(s.value=0,x("update:activeIndex",0)):_(m),await e.nextTick(),z(m*B.value),k()}),e.onMounted(async()=>{R(),typeof ResizeObserver<"u"&&h.value&&(b=new ResizeObserver(R),b.observe(h.value)),await e.nextTick(),z(s.value*B.value),k()}),e.onBeforeUnmount(()=>{b&&(b.disconnect(),b=void 0)}),N({scrollToIndex:F}),(m,v)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:h,class:"vue-short-media-feed",style:e.normalizeStyle(q.value),role:"list","aria-orientation":"vertical","aria-label":r.ariaLabel,tabindex:"0",onScrollPassive:P,onKeydown:X},[r.items.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[O.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${O.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,({item:$,index:G})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(E)($,G),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${B.value}px`}),role:"listitem","aria-current":G===s.value?"true":void 0,"aria-posinset":G+1,"aria-setsize":r.items.length},[e.renderSlot(m.$slots,"default",{item:$,index:G,active:G===s.value})],12,Be))),128)),D.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-short-media-feed__spacer",style:e.normalizeStyle({height:`${D.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("div",ze,[e.renderSlot(m.$slots,"empty")]))],44,be))}}),Ie=["aria-label"],Ee={key:0,class:"vue-virtual-carousel__track",role:"list"},Ve=["aria-label","aria-current"],$e={key:1,class:"vue-virtual-carousel__empty"},fe=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(r,{expose:N,emit:w}){const t=r,x=w,h=e.ref(),T=e.ref(0),s=e.ref(0);let b,K=-1,H,E,C=!1;const f=e.ref(!1),{getItemKey:B}=ae({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),y=e.computed(()=>Math.max(0,T.value)),M=e.computed(()=>{if(!t.responsive||t.responsive.length===0)return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap};const l=y.value,o=[...t.responsive].sort((i,d)=>d.breakpoint-i.breakpoint);for(const i of o)if(l>=i.breakpoint)return{slidesPerView:i.slidesPerView??t.slidesPerView,slidesToScroll:i.slidesToScroll??t.slidesToScroll,gap:i.gap??t.gap};return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap}}),L=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(M.value.slidesPerView)?M.value.slidesPerView:1))),O=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(M.value.slidesToScroll)?M.value.slidesToScroll:1))),D=e.computed(()=>Math.max(0,Number.isFinite(M.value.gap)?M.value.gap:0)),q=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.buffer)?t.buffer:0))),V=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),k=e.computed(()=>Number.isFinite(t.autoplayDelay)?Math.max(1,t.autoplayDelay):3e3),_=e.computed(()=>{if(y.value<=0)return 0;const l=(L.value-1)*D.value;return Math.max(1,(y.value-l)/L.value)}),z=e.computed(()=>_.value+D.value),F=e.computed(()=>Math.max(0,t.items.length-L.value)),P=e.computed(()=>Math.max(0,s.value-q.value)),X=e.computed(()=>Math.min(t.items.length,s.value+L.value+q.value)),R=e.computed(()=>t.items.slice(P.value,X.value).map((l,o)=>({item:l,index:P.value+o}))),m=e.computed(()=>t.items.length===0?0:t.items.length*_.value+(t.items.length-1)*D.value),v=e.computed(()=>P.value*z.value),$=e.computed(()=>Math.max(0,m.value-X.value*z.value)),G=e.computed(()=>({height:re(t.height)}));function Z(l){return Math.min(F.value,Math.max(0,Math.floor(Number.isFinite(l)?l:0)))}s.value=Z(t.activeIndex);function te(l){return l>=s.value&&l<Math.min(t.items.length,s.value+L.value)}function U(){if(!t.hasMore||t.loading||K===t.items.length)return;const l=t.items.length===0?-1:Math.min(t.items.length-1,s.value+L.value-1);t.items.length-1-l<=V.value&&(K=t.items.length,x("loadMore"))}function le(l){const o=Z(l);o===s.value||t.items.length===0||(s.value=o,x("update:activeIndex",o),x("change",{index:o,item:t.items[o]}),o===0&&x("reachStart"),o===F.value&&x("reachEnd"),U(),t.autoplay&&!f.value&&a())}function Y(l,o={}){const i=h.value;i&&(typeof i.scrollTo=="function"?i.scrollTo({...o,left:l}):i.scrollLeft=l)}function J(l,o={}){if(t.items.length===0||z.value<=0)return;const i=Z(l);E=o.behavior==="smooth"?i:void 0,le(i),Y(i*z.value,{...o,behavior:o.behavior})}function p(l="smooth"){J(s.value+O.value,{behavior:l})}function g(l="smooth"){J(s.value-O.value,{behavior:l})}function a(){c(),!(!t.autoplay||t.items.length===0)&&(H=setTimeout(()=>{s.value>=F.value?t.autoplayLoop?J(0,{behavior:"smooth"}):c():p("smooth")},k.value))}function c(){H!==void 0&&(clearTimeout(H),H=void 0)}function u(){f.value=!0,t.pauseOnHover&&c()}function I(){f.value=!1,t.autoplay&&a()}function S(){E=void 0}function A(l){if(z.value<=0||C)return;const o=l.currentTarget.scrollLeft;if(E!==void 0){const i=E*z.value;if(Math.abs(o-i)>1)return;E=void 0}le(Math.round(o/z.value))}function Q(l){l.key==="ArrowRight"||l.key==="PageDown"?(l.preventDefault(),p()):l.key==="ArrowLeft"||l.key==="PageUp"?(l.preventDefault(),g()):l.key==="Home"?(l.preventDefault(),J(0,{behavior:"smooth"})):l.key==="End"&&(l.preventDefault(),J(F.value,{behavior:"auto"}))}function n(){var o;const l=((o=h.value)==null?void 0:o.clientWidth)??0;l<=0||l===T.value||(C=!0,T.value=l,e.nextTick(()=>{const i=Z(s.value);Y(i*z.value),C=!1}))}return e.watch(()=>t.activeIndex,async l=>{const o=Z(l);o!==s.value&&(S(),s.value=o,await e.nextTick(),Y(o*z.value),U())}),e.watch(()=>[t.items.length,M.value.slidesPerView,M.value.gap,M.value.slidesToScroll],async()=>{const l=Z(s.value);t.items.length===0?s.value!==0&&(s.value=0,x("update:activeIndex",0)):le(l),await e.nextTick(),Y(l*z.value),U(),t.autoplay&&t.items.length>0&&!f.value&&a()}),e.watch(()=>t.responsive,()=>{e.nextTick(()=>{const l=Z(s.value);Y(l*z.value)})},{deep:!0}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([l])=>{l||(K=-1),await e.nextTick(),U()}),e.watch(()=>t.autoplay,l=>{l&&!f.value?a():c()}),e.watch(()=>t.autoplayDelay,()=>{t.autoplay&&!f.value&&a()}),e.watch(()=>t.autoplayLoop,l=>{!t.autoplay||f.value||(!l&&s.value>=F.value?c():a())}),e.watch(()=>t.pauseOnHover,l=>{l&&f.value?c():!l&&t.autoplay&&a()}),e.onMounted(async()=>{n(),typeof ResizeObserver<"u"&&h.value&&(b=new ResizeObserver(n),b.observe(h.value)),await e.nextTick(),Y(s.value*z.value),U(),t.autoplay&&a()}),e.onBeforeUnmount(()=>{b&&(b.disconnect(),b=void 0),c()}),N({next:p,previous:g,scrollToIndex:J,startAutoplay:a,stopAutoplay:c}),(l,o)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:h,class:"vue-virtual-carousel",style:e.normalizeStyle(G.value),role:"region","aria-roledescription":"carousel","aria-label":r.ariaLabel,tabindex:"0",onScrollPassive:A,onPointerdown:S,onWheelPassive:S,onKeydown:Q,onMouseenter:u,onMouseleave:I},[r.items.length?(e.openBlock(),e.createElementBlock("div",Ee,[v.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${v.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(R.value,({item:i,index:d})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(B)(i,d),class:"vue-virtual-carousel__item",style:e.normalizeStyle({flexBasis:`${_.value}px`,marginRight:d<r.items.length-1?`${D.value}px`:"0px"}),role:"listitem","aria-roledescription":"slide","aria-label":`${d+1} of ${r.items.length}`,"aria-current":d===s.value?"true":void 0},[e.renderSlot(l.$slots,"default",{item:i,index:d,active:d===s.value,visible:te(d)})],12,Ve))),128)),$.value>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${$.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",$e,[e.renderSlot(l.$slots,"empty")]))],44,Ie))}}),He=["aria-label"],Le=["aria-posinset","aria-setsize"],ve=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(r,{expose:N,emit:w}){const t=r,x=w,{pulling:h,pullDistance:T,pullOffset:s,pullProgress:b,refreshMessage:K,refreshThreshold:H,handleTouchStart:E,handleTouchMove:C,handleTouchEnd:f,handleTouchCancel:B}=ue({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh")}),y=e.ref(),M=e.ref(0),L=e.ref(0);let O,D=-1;const q=ie(),{getItemKey:V}=ae({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),k=e.computed(()=>Math.max(1,t.itemSize)),_=e.computed(()=>Math.max(0,Math.floor(t.overscan))),z=e.computed(()=>t.items.length*k.value),F=e.computed(()=>Math.max(1,t.loadingItemSize??k.value)),P=e.computed(()=>z.value+(t.loading?F.value:0)),X=e.computed(()=>L.value>0?L.value:typeof t.height=="number"?t.height:0),R=e.computed(()=>Math.max(0,Math.floor(M.value/k.value)-_.value)),m=e.computed(()=>{const p=Math.ceil((M.value+X.value)/k.value);return Math.min(t.items.length,p+_.value)}),v=e.computed(()=>t.items.slice(R.value,m.value).map((p,g)=>({item:p,index:R.value+g}))),$=e.computed(()=>({height:re(t.height)})),G=e.computed(()=>({transform:`translateY(${R.value*k.value}px)`}));function Z(){var p;L.value=((p=y.value)==null?void 0:p.clientHeight)??0,q(y.value,t.height),e.nextTick(U)}function te(p){M.value=p.currentTarget.scrollTop,x("scroll",{scrollTop:M.value,startIndex:R.value,endIndex:m.value}),U()}function U(){const p=y.value;if(!p||!t.hasMore||t.loading||D===t.items.length)return;const g=Math.max(0,t.loadMoreThreshold);P.value-p.scrollTop-p.clientHeight<=g&&(D=t.items.length,x("loadMore"))}function le(p,g={}){const a=y.value;if(!a)return;const c=Math.max(0,P.value-a.clientHeight),u=Math.min(Math.max(0,Number.isFinite(p)?p:0),c),I=g.behavior??"auto";I==="auto"&&(M.value=u),a.scrollTo({...g,top:u,behavior:I})}function Y(p,g={}){const a=y.value;if(!a||t.items.length===0)return;const c=Math.min(t.items.length-1,Math.max(0,Math.floor(p))),{align:u="start",...I}=g;let S=c*k.value;u==="center"?S-=(a.clientHeight-k.value)/2:u==="end"&&(S-=a.clientHeight-k.value),a.scrollTo({...I,top:Math.max(0,Math.min(S,P.value-a.clientHeight))})}function J(p="auto"){var g;(g=y.value)==null||g.scrollTo({top:0,behavior:p})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const p=y.value;if(!p)return;const g=Math.max(0,P.value-p.clientHeight);p.scrollTop>g&&(p.scrollTop=g,M.value=g),U()}),e.watch(()=>[t.hasMore,t.loading],async([p])=>{p||(D=-1),await e.nextTick(),U()}),e.onMounted(()=>{Z(),typeof ResizeObserver<"u"&&y.value&&(O=new ResizeObserver(Z),O.observe(y.value)),e.nextTick(U)}),e.onBeforeUnmount(()=>{O&&(O.disconnect(),O=void 0)}),N({scrollTo:le,scrollToIndex:Y,scrollToTop:J}),(p,g)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:y,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(h)}]),style:e.normalizeStyle($.value),role:"list","aria-label":r.ariaLabel,tabindex:"0",onScrollPassive:te,onTouchstartPassive:g[0]||(g[0]=(...a)=>e.unref(E)&&e.unref(E)(...a)),onTouchmove:g[1]||(g[1]=(...a)=>e.unref(C)&&e.unref(C)(...a)),onTouchend:g[2]||(g[2]=(...a)=>e.unref(f)&&e.unref(f)(...a)),onTouchcancel:g[3]||(g[3]=(...a)=>e.unref(B)&&e.unref(B)(...a))},[r.pullToRefresh||r.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(H)}px`,transform:`translateY(${e.unref(s)-e.unref(H)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(p.$slots,"refresh",{pullDistance:e.unref(T),progress:e.unref(b),refreshing:r.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(K)),1)])],4)):e.createCommentVNode("",!0),r.items.length||r.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-scroll__spacer",style:e.normalizeStyle({height:`${P.value}px`,transform:`translateY(${e.unref(s)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(G.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value,({item:a,index:c})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(V)(a,c),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${k.value}px`}),role:"listitem","aria-posinset":c+1,"aria-setsize":r.items.length},[e.renderSlot(p.$slots,"default",{item:a,index:c})],12,Le))),128))],4),r.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${F.value}px`,transform:`translateY(${z.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(p.$slots,"loading",{},()=>[g[4]||(g[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(s)}px)`})},[e.renderSlot(p.$slots,"empty")],4))],46,He))}}),Ce=["aria-label"],Ke=["aria-posinset","aria-setsize"],he=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(r,{expose:N,emit:w}){const t=r,x=w,h=e.ref(),T=e.ref(0),s=e.ref(0),b=e.ref(0),K=e.ref(0),H=new Map,E=new Map;let C,f,B=-1;const{getItemKey:y}=ae({componentName:"WindowDynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:M,pullDistance:L,pullOffset:O,pullProgress:D,refreshMessage:q,refreshThreshold:V,handleTouchStart:k,handleTouchMove:_,handleTouchEnd:z,handleTouchCancel:F}=ue({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>x("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),P=e.computed(()=>Math.max(1,t.estimatedItemSize)),X=e.computed(()=>Math.max(1,t.loadingItemSize??P.value)),R=e.computed(()=>Math.max(0,Math.floor(t.overscan))),m=e.computed(()=>{K.value;const n=new Array(t.items.length+1),l=new Array(t.items.length);n[0]=0;for(let o=0;o<t.items.length;o+=1){const i=y(t.items[o],o),d=H.get(i)??P.value;l[o]=d,n[o+1]=n[o]+d}return{offsets:n,sizes:l,total:n[t.items.length]??0}}),v=e.computed(()=>m.value.total+(t.loading?X.value:0)),$=e.computed(()=>{const n=new Map;return t.items.forEach((l,o)=>{n.set(y(l,o),o)}),n}),G=e.computed(()=>Math.max(0,T.value-b.value));function Z(n){if(t.items.length===0)return 0;const l=m.value.offsets;let o=0,i=t.items.length;for(;o<i;){const d=Math.floor((o+i)/2);l[d+1]<=n?o=d+1:i=d}return Math.min(o,t.items.length-1)}const te=e.computed(()=>Math.max(0,Z(G.value)-R.value)),U=e.computed(()=>{if(t.items.length===0)return 0;const n=T.value+s.value-b.value,l=Math.max(P.value,n),o=Z(l)+1;return Math.min(t.items.length,o+R.value)}),le=e.computed(()=>t.items.slice(te.value,U.value).map((n,l)=>{const o=te.value+l;return{item:n,index:o,key:y(n,o),top:m.value.offsets[o]}}));function Y(){typeof window>"u"||(T.value=Math.max(0,window.scrollY),s.value=window.innerHeight,h.value&&(b.value=h.value.getBoundingClientRect().top+T.value))}function J(){x("scroll",{scrollTop:G.value,startIndex:te.value,endIndex:U.value})}function p(){Y(),J(),g()}function g(){if(typeof window>"u"||!t.hasMore||t.loading||B===t.items.length)return;const n=Math.max(0,t.loadMoreThreshold),l=b.value+v.value,o=T.value+s.value;l-o<=n&&(B=t.items.length,x("loadMore"))}function a(n){const l=n.borderBoxSize;if(l){const o=Array.isArray(l)?l[0]:l;if(o!=null&&o.blockSize)return o.blockSize}return n.contentRect.height}function c(n){const l=m.value;let o=0,i=!1;for(const d of n){const j=d.target,W=E.get(j),ee=a(d);if(W===void 0||ee<=0)continue;const oe=H.get(W)??P.value;if(Math.abs(oe-ee)<.5)continue;const ne=$.value.get(W);ne!==void 0&&l.offsets[ne+1]<=G.value&&(o+=ee-oe),H.set(W,ee),i=!0}i&&(K.value+=1,e.nextTick(()=>{if(o!==0&&typeof window<"u"){const d=Math.max(0,T.value+o);T.value=d,window.scrollTo({top:d,behavior:"auto"})}Y(),g()}))}function u(n,l){n instanceof HTMLElement&&(E.set(n,l),f==null||f.observe(n))}function I(){for(const[n]of E)n.isConnected||(f==null||f.unobserve(n),E.delete(n))}function S(n,l={}){if(typeof window>"u")return;Y();const o=Math.max(0,v.value-s.value),i=Math.min(Math.max(0,Number.isFinite(n)?n:0),o),d=Math.max(0,b.value+i),j=l.behavior??"auto";j==="auto"&&(T.value=d),window.scrollTo({...l,top:d,behavior:j})}function A(n,l={}){if(typeof window>"u"||t.items.length===0)return;Y();const o=Math.min(t.items.length-1,Math.max(0,Math.floor(n))),{align:i="start",...d}=l,j=m.value.sizes[o];let W=b.value+m.value.offsets[o];i==="center"?W-=(s.value-j)/2:i==="end"&&(W-=s.value-j);const ee=Math.max(b.value,b.value+v.value-s.value),oe=Math.max(0,Math.min(W,ee)),ne=d.behavior??"auto";ne==="auto"&&(T.value=oe),window.scrollTo({...d,top:oe,behavior:ne})}function Q(n="auto"){typeof window>"u"||(Y(),window.scrollTo({top:Math.max(0,b.value),behavior:n}))}return e.watch(()=>t.itemKey,()=>{H.clear(),K.value+=1}),e.watch(()=>t.items.length,async()=>{const n=new Set(t.items.map((l,o)=>y(l,o)));for(const l of H.keys())n.has(l)||H.delete(l);K.value+=1,await e.nextTick(),Y(),g()}),e.watch(()=>[t.hasMore,t.loading],async([n])=>{n||(B=-1),await e.nextTick(),Y(),g()}),e.onMounted(()=>{if(Y(),window.addEventListener("scroll",p,{passive:!0}),window.addEventListener("resize",p,{passive:!0}),typeof ResizeObserver<"u"){C=new ResizeObserver(()=>{Y(),g()}),f=new ResizeObserver(c),h.value&&C.observe(h.value);for(const[n]of E)f.observe(n)}e.nextTick(g)}),e.onUpdated(I),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",p),window.removeEventListener("resize",p),C&&(C.disconnect(),C=void 0),f&&(f.disconnect(),f=void 0),E.clear()}),N({scrollTo:S,scrollToIndex:A,scrollToTop:Q}),(n,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:h,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(M)}]),role:"list","aria-label":r.ariaLabel,onTouchstartPassive:l[0]||(l[0]=(...o)=>e.unref(k)&&e.unref(k)(...o)),onTouchmove:l[1]||(l[1]=(...o)=>e.unref(_)&&e.unref(_)(...o)),onTouchend:l[2]||(l[2]=(...o)=>e.unref(z)&&e.unref(z)(...o)),onTouchcancel:l[3]||(l[3]=(...o)=>e.unref(F)&&e.unref(F)(...o))},[r.pullToRefresh||r.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(V)}px`,transform:`translateY(${e.unref(O)-e.unref(V)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(n.$slots,"refresh",{pullDistance:e.unref(L),progress:e.unref(D),refreshing:r.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(q)),1)])],4)):e.createCommentVNode("",!0),r.items.length||r.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-window-dynamic-virtual-scroll__spacer",style:e.normalizeStyle({height:`${v.value}px`,transform:`translateY(${e.unref(O)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(le.value,({item:o,index:i,key:d,top:j})=>(e.openBlock(),e.createElementBlock("div",{key:d,ref_for:!0,ref:W=>u(W,d),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${j}px)`}),role:"listitem","aria-posinset":i+1,"aria-setsize":r.items.length},[e.renderSlot(n.$slots,"default",{item:o,index:i})],12,Ke))),128)),r.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${X.value}px`,transform:`translateY(${m.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(n.$slots,"loading",{},()=>[l[4]||(l[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(O)}px)`})},[e.renderSlot(n.$slots,"empty")],4))],42,Ce))}}),pe=ce,ge={install(r){r.component("ChatVirtualScroll",de),r.component("DynamicVirtualScroll",ce),r.component("ShortMediaFeed",me),r.component("VirtualCarousel",fe),r.component("VirtualList",pe),r.component("VirtualScroll",ve),r.component("WindowDynamicVirtualScroll",he)}};exports.ChatVirtualScroll=de;exports.DynamicVirtualScroll=ce;exports.ShortMediaFeed=me;exports.VirtualCarousel=fe;exports.VirtualList=pe;exports.VirtualScroll=ve;exports.VueVirtualScroll=ge;exports.WindowDynamicVirtualScroll=he;exports.default=ge;
|