vue-virtual-flow 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +462 -92
- package/README.vi.md +463 -92
- package/dist/components/SkeletonLoader.d.cts +9 -0
- package/dist/components/SkeletonLoader.d.ts +9 -0
- package/dist/components/WindowGirdVirtualScroll.d.cts +53 -0
- package/dist/components/WindowGirdVirtualScroll.d.ts +53 -0
- package/dist/index.d.cts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/types.d.cts +25 -0
- package/dist/types.d.ts +25 -0
- package/dist/vue-virtual-flow.cjs +1 -1
- package/dist/vue-virtual-flow.css +1 -1
- package/dist/vue-virtual-flow.js +1389 -1062
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SkeletonLoaderProps } from '../types.cjs';
|
|
2
|
+
declare const _default: import('vue').DefineComponent<SkeletonLoaderProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<SkeletonLoaderProps> & Readonly<{}>, {
|
|
3
|
+
height: number | string;
|
|
4
|
+
ariaLabel: string;
|
|
5
|
+
width: number | string;
|
|
6
|
+
variant: "rectangle" | "rounded" | "circle";
|
|
7
|
+
animated: boolean;
|
|
8
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SkeletonLoaderProps } from '../types.js';
|
|
2
|
+
declare const _default: import('vue').DefineComponent<SkeletonLoaderProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<SkeletonLoaderProps> & Readonly<{}>, {
|
|
3
|
+
height: number | string;
|
|
4
|
+
ariaLabel: string;
|
|
5
|
+
width: number | string;
|
|
6
|
+
variant: "rectangle" | "rounded" | "circle";
|
|
7
|
+
animated: boolean;
|
|
8
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ItemKey, ScrollAlignment, VirtualScrollEvent } from '../types.cjs';
|
|
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
|
+
props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
|
|
4
|
+
readonly onScroll?: ((event: VirtualScrollEvent) => any) | undefined;
|
|
5
|
+
readonly onLoadMore?: (() => any) | undefined;
|
|
6
|
+
readonly onRefresh?: (() => any) | undefined;
|
|
7
|
+
} & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, never>, "onScroll" | "onLoadMore" | "onRefresh"> & {
|
|
8
|
+
items: readonly T[];
|
|
9
|
+
itemSize: number;
|
|
10
|
+
columns?: number;
|
|
11
|
+
gap?: number;
|
|
12
|
+
overscan?: number;
|
|
13
|
+
itemKey?: ItemKey<T> extends infer Key ? Key : never;
|
|
14
|
+
ariaLabel?: string;
|
|
15
|
+
hasMore?: boolean;
|
|
16
|
+
loading?: boolean;
|
|
17
|
+
loadingItemSize?: number;
|
|
18
|
+
loadMoreThreshold?: number;
|
|
19
|
+
pullToRefresh?: boolean;
|
|
20
|
+
refreshing?: boolean;
|
|
21
|
+
pullRefreshThreshold?: number;
|
|
22
|
+
} & Partial<{}>> & import('vue').PublicProps;
|
|
23
|
+
expose(exposed: import('vue').ShallowUnwrapRef<{
|
|
24
|
+
scrollTo: (position: number, options?: ScrollToOptions) => void;
|
|
25
|
+
scrollToIndex: (index: number, options?: ScrollToOptions & {
|
|
26
|
+
align?: ScrollAlignment;
|
|
27
|
+
}) => void;
|
|
28
|
+
scrollToTop: (behavior?: ScrollBehavior) => void;
|
|
29
|
+
}>): void;
|
|
30
|
+
attrs: any;
|
|
31
|
+
slots: {
|
|
32
|
+
default(props: {
|
|
33
|
+
item: T;
|
|
34
|
+
index: number;
|
|
35
|
+
rowIndex: number;
|
|
36
|
+
columnIndex: number;
|
|
37
|
+
}): unknown;
|
|
38
|
+
empty?(): unknown;
|
|
39
|
+
loading?(): unknown;
|
|
40
|
+
refresh?(props: {
|
|
41
|
+
pullDistance: number;
|
|
42
|
+
progress: number;
|
|
43
|
+
refreshing: boolean;
|
|
44
|
+
}): unknown;
|
|
45
|
+
};
|
|
46
|
+
emit: ((evt: "scroll", event: VirtualScrollEvent) => void) & ((evt: "loadMore") => void) & ((evt: "refresh") => void);
|
|
47
|
+
}>) => import('vue').VNode & {
|
|
48
|
+
__ctx?: Awaited<typeof __VLS_setup>;
|
|
49
|
+
};
|
|
50
|
+
export default _default;
|
|
51
|
+
type __VLS_PrettifyLocal<T> = {
|
|
52
|
+
[K in keyof T]: T[K];
|
|
53
|
+
} & {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ItemKey, ScrollAlignment, VirtualScrollEvent } from '../types.js';
|
|
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
|
+
props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
|
|
4
|
+
readonly onScroll?: ((event: VirtualScrollEvent) => any) | undefined;
|
|
5
|
+
readonly onLoadMore?: (() => any) | undefined;
|
|
6
|
+
readonly onRefresh?: (() => any) | undefined;
|
|
7
|
+
} & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, never>, "onScroll" | "onLoadMore" | "onRefresh"> & {
|
|
8
|
+
items: readonly T[];
|
|
9
|
+
itemSize: number;
|
|
10
|
+
columns?: number;
|
|
11
|
+
gap?: number;
|
|
12
|
+
overscan?: number;
|
|
13
|
+
itemKey?: ItemKey<T> extends infer Key ? Key : never;
|
|
14
|
+
ariaLabel?: string;
|
|
15
|
+
hasMore?: boolean;
|
|
16
|
+
loading?: boolean;
|
|
17
|
+
loadingItemSize?: number;
|
|
18
|
+
loadMoreThreshold?: number;
|
|
19
|
+
pullToRefresh?: boolean;
|
|
20
|
+
refreshing?: boolean;
|
|
21
|
+
pullRefreshThreshold?: number;
|
|
22
|
+
} & Partial<{}>> & import('vue').PublicProps;
|
|
23
|
+
expose(exposed: import('vue').ShallowUnwrapRef<{
|
|
24
|
+
scrollTo: (position: number, options?: ScrollToOptions) => void;
|
|
25
|
+
scrollToIndex: (index: number, options?: ScrollToOptions & {
|
|
26
|
+
align?: ScrollAlignment;
|
|
27
|
+
}) => void;
|
|
28
|
+
scrollToTop: (behavior?: ScrollBehavior) => void;
|
|
29
|
+
}>): void;
|
|
30
|
+
attrs: any;
|
|
31
|
+
slots: {
|
|
32
|
+
default(props: {
|
|
33
|
+
item: T;
|
|
34
|
+
index: number;
|
|
35
|
+
rowIndex: number;
|
|
36
|
+
columnIndex: number;
|
|
37
|
+
}): unknown;
|
|
38
|
+
empty?(): unknown;
|
|
39
|
+
loading?(): unknown;
|
|
40
|
+
refresh?(props: {
|
|
41
|
+
pullDistance: number;
|
|
42
|
+
progress: number;
|
|
43
|
+
refreshing: boolean;
|
|
44
|
+
}): unknown;
|
|
45
|
+
};
|
|
46
|
+
emit: ((evt: "scroll", event: VirtualScrollEvent) => void) & ((evt: "loadMore") => void) & ((evt: "refresh") => void);
|
|
47
|
+
}>) => import('vue').VNode & {
|
|
48
|
+
__ctx?: Awaited<typeof __VLS_setup>;
|
|
49
|
+
};
|
|
50
|
+
export default _default;
|
|
51
|
+
type __VLS_PrettifyLocal<T> = {
|
|
52
|
+
[K in keyof T]: T[K];
|
|
53
|
+
} & {};
|
package/dist/index.d.cts
CHANGED
|
@@ -2,22 +2,26 @@ import { Plugin } from 'vue';
|
|
|
2
2
|
import { default as ChatVirtualScroll } from './components/ChatVirtualScroll.cjs';
|
|
3
3
|
import { default as DynamicVirtualScroll } from './components/DynamicVirtualScroll.cjs';
|
|
4
4
|
import { default as ShortMediaFeed } from './components/ShortMediaFeed.cjs';
|
|
5
|
+
import { default as SkeletonLoader } from './components/SkeletonLoader.cjs';
|
|
5
6
|
import { default as VirtualCarousel } from './components/VirtualCarousel.cjs';
|
|
6
7
|
import { default as VirtualScroll } from './components/VirtualScroll.cjs';
|
|
7
8
|
import { default as WindowDynamicVirtualScroll } from './components/WindowDynamicVirtualScroll.cjs';
|
|
9
|
+
import { default as WindowGirdVirtualScroll } from './components/WindowGirdVirtualScroll.cjs';
|
|
8
10
|
declare module 'vue' {
|
|
9
11
|
interface GlobalComponents {
|
|
10
12
|
ChatVirtualScroll: typeof ChatVirtualScroll;
|
|
11
13
|
DynamicVirtualScroll: typeof DynamicVirtualScroll;
|
|
12
14
|
ShortMediaFeed: typeof ShortMediaFeed;
|
|
15
|
+
SkeletonLoader: typeof SkeletonLoader;
|
|
13
16
|
VirtualCarousel: typeof VirtualCarousel;
|
|
14
17
|
VirtualList: typeof DynamicVirtualScroll;
|
|
15
18
|
VirtualScroll: typeof VirtualScroll;
|
|
16
19
|
WindowDynamicVirtualScroll: typeof WindowDynamicVirtualScroll;
|
|
20
|
+
WindowGirdVirtualScroll: typeof WindowGirdVirtualScroll;
|
|
17
21
|
}
|
|
18
22
|
}
|
|
19
23
|
declare const VirtualList: typeof DynamicVirtualScroll;
|
|
20
|
-
export { ChatVirtualScroll, DynamicVirtualScroll, ShortMediaFeed, VirtualCarousel, VirtualList, VirtualScroll, WindowDynamicVirtualScroll, };
|
|
21
|
-
export type { ChatVirtualScrollExpose, ChatVirtualScrollProps, DynamicVirtualScrollProps, ItemKey, ResponsiveBreakpoint, ScrollAlignment, ShortMediaFeedChangeEvent, ShortMediaFeedExpose, ShortMediaFeedProps, VirtualCarouselChangeEvent, VirtualCarouselExpose, VirtualCarouselProps, VirtualListExpose, VirtualListProps, VirtualScrollEvent, VirtualScrollExpose, VirtualScrollProps, WindowDynamicVirtualScrollProps, } from './types.cjs';
|
|
24
|
+
export { ChatVirtualScroll, DynamicVirtualScroll, ShortMediaFeed, SkeletonLoader, VirtualCarousel, VirtualList, VirtualScroll, WindowDynamicVirtualScroll, WindowGirdVirtualScroll, };
|
|
25
|
+
export type { ChatVirtualScrollExpose, ChatVirtualScrollProps, DynamicVirtualScrollProps, ItemKey, ResponsiveBreakpoint, ScrollAlignment, ShortMediaFeedChangeEvent, ShortMediaFeedExpose, ShortMediaFeedProps, SkeletonLoaderProps, VirtualCarouselChangeEvent, VirtualCarouselExpose, VirtualCarouselProps, VirtualListExpose, VirtualListProps, VirtualScrollEvent, VirtualScrollExpose, VirtualScrollProps, WindowDynamicVirtualScrollProps, WindowGirdVirtualScrollProps, } from './types.cjs';
|
|
22
26
|
export declare const VueVirtualScroll: Plugin;
|
|
23
27
|
export default VueVirtualScroll;
|
package/dist/index.d.ts
CHANGED
|
@@ -2,22 +2,26 @@ import { Plugin } from 'vue';
|
|
|
2
2
|
import { default as ChatVirtualScroll } from './components/ChatVirtualScroll.js';
|
|
3
3
|
import { default as DynamicVirtualScroll } from './components/DynamicVirtualScroll.js';
|
|
4
4
|
import { default as ShortMediaFeed } from './components/ShortMediaFeed.js';
|
|
5
|
+
import { default as SkeletonLoader } from './components/SkeletonLoader.js';
|
|
5
6
|
import { default as VirtualCarousel } from './components/VirtualCarousel.js';
|
|
6
7
|
import { default as VirtualScroll } from './components/VirtualScroll.js';
|
|
7
8
|
import { default as WindowDynamicVirtualScroll } from './components/WindowDynamicVirtualScroll.js';
|
|
9
|
+
import { default as WindowGirdVirtualScroll } from './components/WindowGirdVirtualScroll.js';
|
|
8
10
|
declare module 'vue' {
|
|
9
11
|
interface GlobalComponents {
|
|
10
12
|
ChatVirtualScroll: typeof ChatVirtualScroll;
|
|
11
13
|
DynamicVirtualScroll: typeof DynamicVirtualScroll;
|
|
12
14
|
ShortMediaFeed: typeof ShortMediaFeed;
|
|
15
|
+
SkeletonLoader: typeof SkeletonLoader;
|
|
13
16
|
VirtualCarousel: typeof VirtualCarousel;
|
|
14
17
|
VirtualList: typeof DynamicVirtualScroll;
|
|
15
18
|
VirtualScroll: typeof VirtualScroll;
|
|
16
19
|
WindowDynamicVirtualScroll: typeof WindowDynamicVirtualScroll;
|
|
20
|
+
WindowGirdVirtualScroll: typeof WindowGirdVirtualScroll;
|
|
17
21
|
}
|
|
18
22
|
}
|
|
19
23
|
declare const VirtualList: typeof DynamicVirtualScroll;
|
|
20
|
-
export { ChatVirtualScroll, DynamicVirtualScroll, ShortMediaFeed, VirtualCarousel, VirtualList, VirtualScroll, WindowDynamicVirtualScroll, };
|
|
21
|
-
export type { ChatVirtualScrollExpose, ChatVirtualScrollProps, DynamicVirtualScrollProps, ItemKey, ResponsiveBreakpoint, ScrollAlignment, ShortMediaFeedChangeEvent, ShortMediaFeedExpose, ShortMediaFeedProps, VirtualCarouselChangeEvent, VirtualCarouselExpose, VirtualCarouselProps, VirtualListExpose, VirtualListProps, VirtualScrollEvent, VirtualScrollExpose, VirtualScrollProps, WindowDynamicVirtualScrollProps, } from './types.js';
|
|
24
|
+
export { ChatVirtualScroll, DynamicVirtualScroll, ShortMediaFeed, SkeletonLoader, VirtualCarousel, VirtualList, VirtualScroll, WindowDynamicVirtualScroll, WindowGirdVirtualScroll, };
|
|
25
|
+
export type { ChatVirtualScrollExpose, ChatVirtualScrollProps, DynamicVirtualScrollProps, ItemKey, ResponsiveBreakpoint, ScrollAlignment, ShortMediaFeedChangeEvent, ShortMediaFeedExpose, ShortMediaFeedProps, SkeletonLoaderProps, VirtualCarouselChangeEvent, VirtualCarouselExpose, VirtualCarouselProps, VirtualListExpose, VirtualListProps, VirtualScrollEvent, VirtualScrollExpose, VirtualScrollProps, WindowDynamicVirtualScrollProps, WindowGirdVirtualScrollProps, } from './types.js';
|
|
22
26
|
export declare const VueVirtualScroll: Plugin;
|
|
23
27
|
export default VueVirtualScroll;
|
package/dist/types.d.cts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
export type ItemKey<T> = keyof T | ((item: T, index: number) => PropertyKey);
|
|
2
|
+
export interface SkeletonLoaderProps {
|
|
3
|
+
/** Numeric dimensions are pixels; strings accept CSS lengths. */
|
|
4
|
+
width?: number | string;
|
|
5
|
+
height?: number | string;
|
|
6
|
+
/** Use equal width and height for a circle. */
|
|
7
|
+
variant?: 'rectangle' | 'rounded' | 'circle';
|
|
8
|
+
animated?: boolean;
|
|
9
|
+
ariaLabel?: string;
|
|
10
|
+
}
|
|
2
11
|
export interface VirtualScrollProps<T> {
|
|
3
12
|
items: readonly T[];
|
|
4
13
|
itemSize: number;
|
|
@@ -43,6 +52,22 @@ export interface WindowDynamicVirtualScrollProps<T> {
|
|
|
43
52
|
refreshing?: boolean;
|
|
44
53
|
pullRefreshThreshold?: number;
|
|
45
54
|
}
|
|
55
|
+
export interface WindowGirdVirtualScrollProps<T> {
|
|
56
|
+
items: readonly T[];
|
|
57
|
+
itemSize: number;
|
|
58
|
+
columns?: number;
|
|
59
|
+
gap?: number;
|
|
60
|
+
overscan?: number;
|
|
61
|
+
itemKey?: ItemKey<T>;
|
|
62
|
+
ariaLabel?: string;
|
|
63
|
+
hasMore?: boolean;
|
|
64
|
+
loading?: boolean;
|
|
65
|
+
loadingItemSize?: number;
|
|
66
|
+
loadMoreThreshold?: number;
|
|
67
|
+
pullToRefresh?: boolean;
|
|
68
|
+
refreshing?: boolean;
|
|
69
|
+
pullRefreshThreshold?: number;
|
|
70
|
+
}
|
|
46
71
|
export interface ChatVirtualScrollProps<T> {
|
|
47
72
|
items: readonly T[];
|
|
48
73
|
estimatedItemSize?: number;
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
export type ItemKey<T> = keyof T | ((item: T, index: number) => PropertyKey);
|
|
2
|
+
export interface SkeletonLoaderProps {
|
|
3
|
+
/** Numeric dimensions are pixels; strings accept CSS lengths. */
|
|
4
|
+
width?: number | string;
|
|
5
|
+
height?: number | string;
|
|
6
|
+
/** Use equal width and height for a circle. */
|
|
7
|
+
variant?: 'rectangle' | 'rounded' | 'circle';
|
|
8
|
+
animated?: boolean;
|
|
9
|
+
ariaLabel?: string;
|
|
10
|
+
}
|
|
2
11
|
export interface VirtualScrollProps<T> {
|
|
3
12
|
items: readonly T[];
|
|
4
13
|
itemSize: number;
|
|
@@ -43,6 +52,22 @@ export interface WindowDynamicVirtualScrollProps<T> {
|
|
|
43
52
|
refreshing?: boolean;
|
|
44
53
|
pullRefreshThreshold?: number;
|
|
45
54
|
}
|
|
55
|
+
export interface WindowGirdVirtualScrollProps<T> {
|
|
56
|
+
items: readonly T[];
|
|
57
|
+
itemSize: number;
|
|
58
|
+
columns?: number;
|
|
59
|
+
gap?: number;
|
|
60
|
+
overscan?: number;
|
|
61
|
+
itemKey?: ItemKey<T>;
|
|
62
|
+
ariaLabel?: string;
|
|
63
|
+
hasMore?: boolean;
|
|
64
|
+
loading?: boolean;
|
|
65
|
+
loadingItemSize?: number;
|
|
66
|
+
loadMoreThreshold?: number;
|
|
67
|
+
pullToRefresh?: boolean;
|
|
68
|
+
refreshing?: boolean;
|
|
69
|
+
pullRefreshThreshold?: number;
|
|
70
|
+
}
|
|
46
71
|
export interface ChatVirtualScrollProps<T> {
|
|
47
72
|
items: readonly T[];
|
|
48
73
|
estimatedItemSize?: number;
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");function $e(n){return typeof n=="string"||typeof n=="number"||typeof n=="symbol"}function xe(n,F){const I=n[F];return $e(I)?I:void 0}function Ve(n){return xe(n,"id")??xe(n,"key")}function me(n){function F(t,h){const m=n.itemKey();if(typeof m=="function")return m(t,h);if(t!==null&&typeof t=="object"){if(m!==void 0){const i=xe(t,m);if(i!==void 0)return i}const x=Ve(t);if(x!==void 0)return x}return h}function I(){}return e.watch(()=>[n.itemKey(),n.items()],I,{immediate:!0}),{getItemKey:F}}function pe(n){return n==="fill"?"100%":typeof n=="number"?`${n}px`:n}function ge(n){return(F,I)=>{typeof I=="string"&&(I==="fill"||I.trim().endsWith("%"))}}const Le=["aria-label"],Ce={key:0,class:"vue-chat-virtual-scroll__loading-older",role:"status","aria-live":"polite"},He=["aria-posinset","aria-setsize"],Me=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(n,{expose:F,emit:I}){const t=n,h=I,m=e.ref(),x=e.ref(0),i=e.ref(0),E=e.ref(0),D=e.ref(!0),N=new Map,P=new Map;let Y,g,b=-1,T=!1;const k=ge(),{getItemKey:R}=me({componentName:"ChatVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),O=e.computed(()=>Math.max(1,t.estimatedItemSize)),W=e.computed(()=>Math.max(0,Math.floor(t.overscan))),j=e.computed(()=>i.value>0?i.value:typeof t.height=="number"?Math.max(0,t.height):O.value),K=e.computed(()=>{E.value;const o=new Array(t.items.length+1),s=new Array(t.items.length);o[0]=0;for(let u=0;u<t.items.length;u+=1){const $=R(t.items[u],u),H=N.get($)??O.value;s[u]=H,o[u+1]=o[u]+H}return{offsets:o,sizes:s,total:o[t.items.length]??0}}),B=e.computed(()=>{const o=new Map;return t.items.forEach((s,u)=>{o.set(R(s,u),u)}),o});function U(o){if(t.items.length===0)return 0;const s=K.value.offsets;let u=0,$=t.items.length;for(;u<$;){const H=Math.floor((u+$)/2);s[H+1]<=o?u=H+1:$=H}return Math.min(u,t.items.length-1)}const L=e.computed(()=>Math.max(0,U(x.value)-W.value)),_=e.computed(()=>{if(t.items.length===0)return 0;const o=U(x.value+j.value)+1;return Math.min(t.items.length,o+W.value)}),Z=e.computed(()=>t.items.slice(L.value,_.value).map((o,s)=>{const u=L.value+s;return{item:o,index:u,key:R(o,u),top:K.value.offsets[u]}})),te=e.computed(()=>({height:pe(t.height)}));function A(){const o=m.value;if(!o)return;const u=Math.max(0,K.value.total-o.scrollTop-o.clientHeight)<=Math.max(0,t.bottomThreshold);u!==D.value&&(D.value=u,T&&h("bottomChange",u))}function v(){var o;i.value=((o=m.value)==null?void 0:o.clientHeight)??0,k(m.value,t.height),e.nextTick(()=>{A(),C()})}function p(o){x.value=o.currentTarget.scrollTop,A(),h("scroll",{scrollTop:x.value,startIndex:L.value,endIndex:_.value}),C()}function C(){const o=m.value;!T||!o||!t.hasOlder||t.loadingOlder||b===t.items.length||o.scrollTop<=Math.max(0,t.loadOlderThreshold)&&(b=t.items.length,h("loadOlder"))}function X(o){const s=o.borderBoxSize;if(s){const u=Array.isArray(s)?s[0]:s;if(u!=null&&u.blockSize)return u.blockSize}return o.contentRect.height}function q(o){const s=K.value,u=D.value&&t.stickToBottom;let $=0,H=!1;for(const M of o){const V=M.target,r=P.get(V),l=X(M);if(r===void 0||l<=0)continue;const a=N.get(r)??O.value;if(Math.abs(a-l)<.5)continue;const d=B.value.get(r);d!==void 0&&s.offsets[d+1]<=x.value&&($+=l-a),N.set(r,l),H=!0}H&&(E.value+=1,e.nextTick(()=>{const M=m.value;M&&(u?f("auto"):$!==0&&(M.scrollTop+=$,x.value=M.scrollTop,A()))}))}function ae(o,s){o instanceof HTMLElement&&(P.set(o,s),g==null||g.observe(o))}function J(){for(const[o]of P)o.isConnected||(g==null||g.unobserve(o),P.delete(o))}function Q(o,s={}){const u=m.value;if(!u)return;const $=Math.max(0,K.value.total-u.clientHeight),H=Math.min(Math.max(0,Number.isFinite(o)?o:0),$),M=s.behavior??"auto";M==="auto"&&(x.value=H),u.scrollTo({...s,top:H,behavior:M}),e.nextTick(A)}function ee(o,s={}){const u=m.value;if(!u||t.items.length===0)return;const $=Math.min(t.items.length-1,Math.max(0,Math.floor(o))),{align:H="start",...M}=s,V=K.value.sizes[$];let r=K.value.offsets[$];H==="center"?r-=(u.clientHeight-V)/2:H==="end"&&(r-=u.clientHeight-V);const l=Math.max(0,Math.min(r,K.value.total-u.clientHeight)),a=M.behavior??"auto";a==="auto"&&(x.value=l),u.scrollTo({...M,top:l,behavior:a}),e.nextTick(A)}function oe(o="auto"){const s=m.value;s&&(o==="auto"&&(x.value=0),s.scrollTo({top:0,behavior:o}),e.nextTick(A))}function f(o="auto"){const s=m.value;if(!s)return;const u=Math.max(0,K.value.total-s.clientHeight);o==="auto"?(s.scrollTop=u,x.value=u):s.scrollTo({top:u,behavior:o}),e.nextTick(A)}let S=t.items.map((o,s)=>R(o,s));return e.watch(()=>t.items.map((o,s)=>R(o,s)),async o=>{const s=S;S=o;const u=m.value,$=(u==null?void 0:u.scrollTop)??0,H=D.value&&t.stickToBottom,M=s[0],V=M===void 0?0:o.indexOf(M),r=V>0?o.slice(0,V).reduce((a,d)=>a+(N.get(d)??O.value),0):0,l=new Set(o);for(const a of N.keys())l.has(a)||N.delete(a);E.value+=1,await e.nextTick(),u&&(r>0?(u.scrollTop=$+r,x.value=u.scrollTop):o.length>s.length&&H&&f("auto"),A(),C())}),e.watch(()=>[t.hasOlder,t.loadingOlder],async([o])=>{o||(b=-1),await e.nextTick(),C()}),e.onMounted(()=>{if(v(),typeof ResizeObserver<"u"){Y=new ResizeObserver(v),g=new ResizeObserver(q),m.value&&Y.observe(m.value);for(const[o]of P)g.observe(o)}e.nextTick(()=>{t.initialScroll==="bottom"&&f("auto"),T=!0,A(),C()})}),e.onUpdated(J),e.onBeforeUnmount(()=>{Y&&(Y.disconnect(),Y=void 0),g&&(g.disconnect(),g=void 0),P.clear()}),F({isAtBottom:D,scrollTo:Q,scrollToIndex:ee,scrollToTop:oe,scrollToBottom:f}),(o,s)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:m,class:"vue-chat-virtual-scroll",style:e.normalizeStyle(te.value),role:"log","aria-label":n.ariaLabel,"aria-live":"polite",tabindex:"0",onScrollPassive:p},[n.loadingOlder?(e.openBlock(),e.createElementBlock("div",Ce,[e.createElementVNode("div",null,[e.renderSlot(o.$slots,"loadingOlder",{},()=>[s[0]||(s[0]=e.createTextVNode("Loading older messages…",-1))])])])):e.createCommentVNode("",!0),n.items.length?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-chat-virtual-scroll__spacer",style:e.normalizeStyle({height:`${K.value.total}px`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Z.value,({item:u,index:$,key:H,top:M})=>(e.openBlock(),e.createElementBlock("div",{key:H,ref_for:!0,ref:V=>ae(V,H),class:"vue-chat-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${M}px)`}),role:"article","aria-posinset":$+1,"aria-setsize":n.items.length},[e.renderSlot(o.$slots,"default",{item:u,index:$})],12,He))),128))],4)):e.renderSlot(o.$slots,"empty",{},void 0,void 0,2)],44,Le))}});function ye(n){const F=e.ref(),I=e.ref(0),t=e.ref(!1),h=e.ref(!1),m=e.computed(()=>Math.max(1,n.threshold())),x=e.computed(()=>n.refreshing()||h.value?m.value:I.value),i=e.computed(()=>Math.min(1,I.value/m.value)),E=e.computed(()=>n.refreshing()||h.value?"Refreshing…":i.value>=1?"Release to refresh":"Pull to refresh");function D(){F.value=void 0,t.value=!1,I.value=0}function N(g){var k;const b=g.currentTarget,T=((k=n.scrollTop)==null?void 0:k.call(n))??b.scrollTop;!n.enabled()||n.refreshing()||T>0||g.touches.length!==1||(F.value=g.touches[0].clientY,t.value=!0)}function P(g){var R;if(F.value===void 0||!t.value)return;const b=g.currentTarget;if((((R=n.scrollTop)==null?void 0:R.call(n))??b.scrollTop)>0||g.touches.length!==1){D();return}const k=g.touches[0].clientY-F.value;if(k<=0){I.value=0;return}g.preventDefault(),I.value=Math.min(k*.5,m.value*2)}function Y(){if(F.value===void 0)return;const g=I.value>=m.value&&n.enabled()&&!n.refreshing();if(F.value=void 0,t.value=!1,!g){I.value=0;return}I.value=m.value,h.value=!0,n.onRefresh(),e.nextTick(()=>{n.refreshing()||(h.value=!1,I.value=0)})}return e.watch(()=>n.refreshing(),(g,b)=>{g?(h.value=!1,I.value=m.value):b&&(h.value=!1,I.value=0)}),{pulling:t,pullDistance:I,pullOffset:x,pullProgress:i,refreshMessage:E,refreshThreshold:m,handleTouchStart:N,handleTouchMove:P,handleTouchEnd:Y,handleTouchCancel:D}}const Re=["aria-label"],Oe=["aria-posinset","aria-setsize"],we=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:F,emit:I}){const t=n,h=I,{pulling:m,pullDistance:x,pullOffset:i,pullProgress:E,refreshMessage:D,refreshThreshold:N,handleTouchStart:P,handleTouchMove:Y,handleTouchEnd:g,handleTouchCancel:b}=ye({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>h("refresh")}),T=e.ref(),k=e.ref(0),R=e.ref(0),O=e.ref(0),W=new Map,j=new Map;let K,B,U=-1;const L=ge(),{getItemKey:_}=me({componentName:"DynamicVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),Z=e.computed(()=>Math.max(1,t.estimatedItemSize)),te=e.computed(()=>Math.max(1,t.loadingItemSize??Z.value)),A=e.computed(()=>Math.max(0,Math.floor(t.overscan))),v=e.computed(()=>R.value>0?R.value:typeof t.height=="number"?Math.max(0,t.height):Z.value),p=e.computed(()=>{O.value;const r=new Array(t.items.length+1),l=new Array(t.items.length);r[0]=0;for(let a=0;a<t.items.length;a+=1){const d=_(t.items[a],a),z=W.get(d)??Z.value;l[a]=z,r[a+1]=r[a]+z}return{offsets:r,sizes:l,total:r[t.items.length]??0}}),C=e.computed(()=>p.value.total+(t.loading?te.value:0)),X=e.computed(()=>{const r=new Map;return t.items.forEach((l,a)=>{r.set(_(l,a),a)}),r});function q(r){if(t.items.length===0)return 0;const l=p.value.offsets;let a=0,d=t.items.length;for(;a<d;){const z=Math.floor((a+d)/2);l[z+1]<=r?a=z+1:d=z}return Math.min(a,t.items.length-1)}const ae=e.computed(()=>Math.max(0,q(k.value)-A.value)),J=e.computed(()=>{if(t.items.length===0)return 0;const r=q(k.value+v.value)+1;return Math.min(t.items.length,r+A.value)}),Q=e.computed(()=>t.items.slice(ae.value,J.value).map((r,l)=>{const a=ae.value+l;return{item:r,index:a,key:_(r,a),top:p.value.offsets[a]}})),ee=e.computed(()=>({height:pe(t.height)}));function oe(){var r;R.value=((r=T.value)==null?void 0:r.clientHeight)??0,L(T.value,t.height),e.nextTick(S)}function f(r){k.value=r.currentTarget.scrollTop,h("scroll",{scrollTop:k.value,startIndex:ae.value,endIndex:J.value}),S()}function S(){const r=T.value;if(!r||!t.hasMore||t.loading||U===t.items.length)return;const l=Math.max(0,t.loadMoreThreshold);C.value-r.scrollTop-r.clientHeight<=l&&(U=t.items.length,h("loadMore"))}function o(r){const l=r.borderBoxSize;if(l){const a=Array.isArray(l)?l[0]:l;if(a!=null&&a.blockSize)return a.blockSize}return r.contentRect.height}function s(r){const l=p.value;let a=0,d=!1;for(const z of r){const re=z.target,ne=j.get(re),ie=o(z);if(ne===void 0||ie<=0)continue;const ce=W.get(ne)??Z.value;if(Math.abs(ce-ie)<.5)continue;const de=X.value.get(ne);de!==void 0&&l.offsets[de+1]<=k.value&&(a+=ie-ce),W.set(ne,ie),d=!0}d&&(O.value+=1,e.nextTick(S),a!==0&&e.nextTick(()=>{const z=T.value;z&&(z.scrollTop+=a,k.value=z.scrollTop)}))}function u(r,l){r instanceof HTMLElement&&(j.set(r,l),B==null||B.observe(r))}function $(){for(const[r]of j)r.isConnected||(B==null||B.unobserve(r),j.delete(r))}function H(r,l={}){const a=T.value;if(!a)return;const d=Math.max(0,C.value-a.clientHeight),z=Math.min(Math.max(0,Number.isFinite(r)?r:0),d),re=l.behavior??"auto";re==="auto"&&(k.value=z),a.scrollTo({...l,top:z,behavior:re})}function M(r,l={}){const a=T.value;if(!a||t.items.length===0)return;const d=Math.min(t.items.length-1,Math.max(0,Math.floor(r))),{align:z="start",...re}=l;let ne=p.value.offsets[d];const ie=p.value.sizes[d];z==="center"?ne-=(a.clientHeight-ie)/2:z==="end"&&(ne-=a.clientHeight-ie);const ce=Math.max(0,Math.min(ne,C.value-a.clientHeight)),de=re.behavior??"auto";de==="auto"&&(k.value=ce),a.scrollTo({...re,top:ce,behavior:de})}function V(r="auto"){var l;(l=T.value)==null||l.scrollTo({top:0,behavior:r})}return e.watch(()=>t.itemKey,()=>{W.clear(),O.value+=1}),e.watch(()=>t.items.length,async()=>{const r=new Set(t.items.map((d,z)=>_(d,z)));for(const d of W.keys())r.has(d)||W.delete(d);O.value+=1,await e.nextTick();const l=T.value;if(!l)return;const a=Math.max(0,C.value-l.clientHeight);l.scrollTop>a&&(l.scrollTop=a,k.value=a),S()}),e.watch(()=>[t.hasMore,t.loading],async([r])=>{r||(U=-1),await e.nextTick(),S()}),e.onMounted(()=>{if(oe(),typeof ResizeObserver<"u"){K=new ResizeObserver(oe),B=new ResizeObserver(s),T.value&&K.observe(T.value);for(const[r]of j)B.observe(r)}e.nextTick(S)}),e.onUpdated($),e.onBeforeUnmount(()=>{K&&(K.disconnect(),K=void 0),B&&(B.disconnect(),B=void 0),j.clear()}),F({scrollTo:H,scrollToIndex:M,scrollToTop:V}),(r,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:T,class:e.normalizeClass(["vue-dynamic-virtual-scroll",{"vue-dynamic-virtual-scroll--pulling":e.unref(m)}]),style:e.normalizeStyle(ee.value),role:"list","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:f,onTouchstartPassive:l[0]||(l[0]=(...a)=>e.unref(P)&&e.unref(P)(...a)),onTouchmove:l[1]||(l[1]=(...a)=>e.unref(Y)&&e.unref(Y)(...a)),onTouchend:l[2]||(l[2]=(...a)=>e.unref(g)&&e.unref(g)(...a)),onTouchcancel:l[3]||(l[3]=(...a)=>e.unref(b)&&e.unref(b)(...a))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(N)}px`,transform:`translateY(${e.unref(i)-e.unref(N)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(r.$slots,"refresh",{pullDistance:e.unref(x),progress:e.unref(E),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(D)),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:`${C.value}px`,transform:`translateY(${e.unref(i)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Q.value,({item:a,index:d,key:z,top:re})=>(e.openBlock(),e.createElementBlock("div",{key:z,ref_for:!0,ref:ne=>u(ne,z),class:"vue-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${re}px)`}),role:"listitem","aria-posinset":d+1,"aria-setsize":n.items.length},[e.renderSlot(r.$slots,"default",{item:a,index:d})],12,Oe))),128)),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${te.value}px`,transform:`translateY(${p.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(r.$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(i)}px)`})},[e.renderSlot(r.$slots,"empty")],4))],46,Re))}}),Ne=["aria-label"],Ke=["aria-current","aria-posinset","aria-setsize"],De={key:1,class:"vue-short-media-feed__empty"},Te=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:F,emit:I}){const t=n,h=I,m=e.ref(),x=e.ref(0),i=e.ref(K(t.activeIndex));let E,D=-1;const N=ge(),{getItemKey:P}=me({componentName:"ShortMediaFeed",items:()=>t.items,itemKey:()=>t.itemKey}),Y=e.computed(()=>Math.max(0,Math.floor(t.buffer))),g=e.computed(()=>Math.max(0,Math.floor(Number.isFinite(t.loadMoreThreshold)?t.loadMoreThreshold:0))),b=e.computed(()=>x.value>0?x.value:typeof t.height=="number"?Math.max(1,t.height):0),T=e.computed(()=>Math.max(0,i.value-Y.value)),k=e.computed(()=>Math.min(t.items.length,i.value+Y.value+1)),R=e.computed(()=>t.items.slice(T.value,k.value).map((v,p)=>({item:v,index:T.value+p}))),O=e.computed(()=>T.value*b.value),W=e.computed(()=>(t.items.length-k.value)*b.value),j=e.computed(()=>({height:pe(t.height)}));function K(v){return t.items.length===0?0:Math.min(t.items.length-1,Math.max(0,Math.floor(Number.isFinite(v)?v:0)))}function B(){if(!t.hasMore||t.loading||D===t.items.length)return;(t.items.length===0?0:t.items.length-1-i.value)<=g.value&&(D=t.items.length,h("loadMore"))}function U(v){const p=K(v);p===i.value||t.items.length===0||(i.value=p,h("update:activeIndex",p),h("change",{index:p,item:t.items[p]}),p===0&&h("reachStart"),p===t.items.length-1&&h("reachEnd"),B())}function L(v,p={}){const C=m.value;C&&(typeof C.scrollTo=="function"?C.scrollTo({...p,top:v}):C.scrollTop=v)}function _(v,p={}){if(t.items.length===0)return;const C=K(v);U(C),L(C*b.value,p)}function Z(v){if(b.value<=0)return;const p=v.currentTarget.scrollTop;U(Math.round(p/b.value))}function te(v){let p;v.key==="ArrowDown"||v.key==="PageDown"?p=i.value+1:v.key==="ArrowUp"||v.key==="PageUp"?p=i.value-1:v.key==="Home"?p=0:v.key==="End"&&(p=t.items.length-1),p!==void 0&&(v.preventDefault(),_(p,{behavior:"smooth"}))}function A(){var p;const v=((p=m.value)==null?void 0:p.clientHeight)??0;N(m.value,t.height),!(v<=0||v===x.value)&&(x.value=v,e.nextTick(()=>{L(i.value*v)}))}return e.watch(()=>t.activeIndex,async v=>{const p=K(v);p!==i.value&&(i.value=p,await e.nextTick(),L(p*b.value),B())}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([v])=>{v||(D=-1),await e.nextTick(),B()}),e.watch(()=>t.items.length,async()=>{const v=K(i.value);t.items.length===0?i.value!==0&&(i.value=0,h("update:activeIndex",0)):U(v),await e.nextTick(),L(v*b.value),B()}),e.onMounted(async()=>{A(),typeof ResizeObserver<"u"&&m.value&&(E=new ResizeObserver(A),E.observe(m.value)),await e.nextTick(),L(i.value*b.value),B()}),e.onBeforeUnmount(()=>{E&&(E.disconnect(),E=void 0)}),F({scrollToIndex:_}),(v,p)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:m,class:"vue-short-media-feed",style:e.normalizeStyle(j.value),role:"list","aria-orientation":"vertical","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:Z,onKeydown:te},[n.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(R.value,({item:C,index:X})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(P)(C,X),class:"vue-short-media-feed__item",style:e.normalizeStyle({height:`${b.value}px`}),role:"listitem","aria-current":X===i.value?"true":void 0,"aria-posinset":X+1,"aria-setsize":n.items.length},[e.renderSlot(v.$slots,"default",{item:C,index:X,active:X===i.value})],12,Ke))),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",De,[e.renderSlot(v.$slots,"empty")]))],44,Ne))}}),Pe=["aria-label"],Ae=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 F=n;function I(h){return typeof h=="number"?`${Math.max(0,h)}px`:h}const t=e.computed(()=>({width:I(F.width),height:I(F.height)}));return(h,m)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vue-skeleton-loader",[`vue-skeleton-loader--${n.variant}`,{"vue-skeleton-loader--animated":n.animated}]]),style:e.normalizeStyle(t.value),role:"status","aria-label":n.ariaLabel},null,14,Pe))}}),Fe=(n,F)=>{const I=n.__vccOpts||n;for(const[t,h]of F)I[t]=h;return I},ke=Fe(Ae,[["__scopeId","data-v-fc92f61f"]]),We=["aria-label"],Ye={key:0,class:"vue-virtual-carousel__track",role:"list"},Ue=["aria-label","aria-current"],_e={key:1,class:"vue-virtual-carousel__empty"},Se=e.defineComponent({name:"VirtualCarousel",__name:"VirtualCarousel",props:{items:{},activeIndex:{default:0},slidesPerView:{default:1},slidesToScroll:{default:1},gap:{default:0},buffer:{default:1},height:{default:"auto"},itemKey:{default:void 0},ariaLabel:{default:"Carousel"},hasMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},loadMoreThreshold:{default:2},autoplay:{type:Boolean,default:!1},autoplayDelay:{default:3e3},autoplayLoop:{type:Boolean,default:!0},pauseOnHover:{type:Boolean,default:!0},responsive:{default:void 0}},emits:["update:activeIndex","change","reachStart","reachEnd","loadMore"],setup(n,{expose:F,emit:I}){const t=n,h=I,m=e.ref(),x=e.ref(0),i=e.ref(0);let E,D=-1,N,P,Y=!1;const g=e.ref(!1),{getItemKey:b}=me({componentName:"VirtualCarousel",items:()=>t.items,itemKey:()=>t.itemKey}),T=e.computed(()=>Math.max(0,x.value)),k=e.computed(()=>{if(!t.responsive||t.responsive.length===0)return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap};const l=T.value,a=[...t.responsive].sort((d,z)=>z.breakpoint-d.breakpoint);for(const d of a)if(l>=d.breakpoint)return{slidesPerView:d.slidesPerView??t.slidesPerView,slidesToScroll:d.slidesToScroll??t.slidesToScroll,gap:d.gap??t.gap};return{slidesPerView:t.slidesPerView,slidesToScroll:t.slidesToScroll,gap:t.gap}}),R=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(k.value.slidesPerView)?k.value.slidesPerView:1))),O=e.computed(()=>Math.max(1,Math.floor(Number.isFinite(k.value.slidesToScroll)?k.value.slidesToScroll:1))),W=e.computed(()=>Math.max(0,Number.isFinite(k.value.gap)?k.value.gap:0)),j=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),U=e.computed(()=>{if(T.value<=0)return 0;const l=(R.value-1)*W.value;return Math.max(1,(T.value-l)/R.value)}),L=e.computed(()=>U.value+W.value),_=e.computed(()=>Math.max(0,t.items.length-R.value)),Z=e.computed(()=>Math.max(0,i.value-j.value)),te=e.computed(()=>Math.min(t.items.length,i.value+R.value+j.value)),A=e.computed(()=>t.items.slice(Z.value,te.value).map((l,a)=>({item:l,index:Z.value+a}))),v=e.computed(()=>t.items.length===0?0:t.items.length*U.value+(t.items.length-1)*W.value),p=e.computed(()=>Z.value*L.value),C=e.computed(()=>Math.max(0,v.value-te.value*L.value)),X=e.computed(()=>({height:pe(t.height)}));function q(l){return Math.min(_.value,Math.max(0,Math.floor(Number.isFinite(l)?l:0)))}i.value=q(t.activeIndex);function ae(l){return l>=i.value&&l<Math.min(t.items.length,i.value+R.value)}function J(){if(!t.hasMore||t.loading||D===t.items.length)return;const l=t.items.length===0?-1:Math.min(t.items.length-1,i.value+R.value-1);t.items.length-1-l<=K.value&&(D=t.items.length,h("loadMore"))}function Q(l){const a=q(l);a===i.value||t.items.length===0||(i.value=a,h("update:activeIndex",a),h("change",{index:a,item:t.items[a]}),a===0&&h("reachStart"),a===_.value&&h("reachEnd"),J(),t.autoplay&&!g.value&&o())}function ee(l,a={}){const d=m.value;d&&(typeof d.scrollTo=="function"?d.scrollTo({...a,left:l}):d.scrollLeft=l)}function oe(l,a={}){if(t.items.length===0||L.value<=0)return;const d=q(l);P=a.behavior==="smooth"?d:void 0,Q(d),ee(d*L.value,{...a,behavior:a.behavior})}function f(l="smooth"){oe(i.value+O.value,{behavior:l})}function S(l="smooth"){oe(i.value-O.value,{behavior:l})}function o(){s(),!(!t.autoplay||t.items.length===0)&&(N=setTimeout(()=>{i.value>=_.value?t.autoplayLoop?oe(0,{behavior:"smooth"}):s():f("smooth")},B.value))}function s(){N!==void 0&&(clearTimeout(N),N=void 0)}function u(){g.value=!0,t.pauseOnHover&&s()}function $(){g.value=!1,t.autoplay&&o()}function H(){P=void 0}function M(l){if(L.value<=0||Y)return;const a=l.currentTarget.scrollLeft;if(P!==void 0){const d=P*L.value;if(Math.abs(a-d)>1)return;P=void 0}Q(Math.round(a/L.value))}function V(l){l.key==="ArrowRight"||l.key==="PageDown"?(l.preventDefault(),f()):l.key==="ArrowLeft"||l.key==="PageUp"?(l.preventDefault(),S()):l.key==="Home"?(l.preventDefault(),oe(0,{behavior:"smooth"})):l.key==="End"&&(l.preventDefault(),oe(_.value,{behavior:"auto"}))}function r(){var a;const l=((a=m.value)==null?void 0:a.clientWidth)??0;l<=0||l===x.value||(Y=!0,x.value=l,e.nextTick(()=>{const d=q(i.value);ee(d*L.value),Y=!1}))}return e.watch(()=>t.activeIndex,async l=>{const a=q(l);a!==i.value&&(H(),i.value=a,await e.nextTick(),ee(a*L.value),J())}),e.watch(()=>[t.items.length,k.value.slidesPerView,k.value.gap,k.value.slidesToScroll],async()=>{const l=q(i.value);t.items.length===0?i.value!==0&&(i.value=0,h("update:activeIndex",0)):Q(l),await e.nextTick(),ee(l*L.value),J(),t.autoplay&&t.items.length>0&&!g.value&&o()}),e.watch(()=>t.responsive,()=>{e.nextTick(()=>{const l=q(i.value);ee(l*L.value)})},{deep:!0}),e.watch(()=>[t.hasMore,t.loading,t.loadMoreThreshold],async([l])=>{l||(D=-1),await e.nextTick(),J()}),e.watch(()=>t.autoplay,l=>{l&&!g.value?o():s()}),e.watch(()=>t.autoplayDelay,()=>{t.autoplay&&!g.value&&o()}),e.watch(()=>t.autoplayLoop,l=>{!t.autoplay||g.value||(!l&&i.value>=_.value?s():o())}),e.watch(()=>t.pauseOnHover,l=>{l&&g.value?s():!l&&t.autoplay&&o()}),e.onMounted(async()=>{r(),typeof ResizeObserver<"u"&&m.value&&(E=new ResizeObserver(r),E.observe(m.value)),await e.nextTick(),ee(i.value*L.value),J(),t.autoplay&&o()}),e.onBeforeUnmount(()=>{E&&(E.disconnect(),E=void 0),s()}),F({next:f,previous:S,scrollToIndex:oe,startAutoplay:o,stopAutoplay:s}),(l,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:m,class:"vue-virtual-carousel",style:e.normalizeStyle(X.value),role:"region","aria-roledescription":"carousel","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:M,onPointerdown:H,onWheelPassive:H,onKeydown:V,onMouseenter:u,onMouseleave:$},[n.items.length?(e.openBlock(),e.createElementBlock("div",Ye,[p.value>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-carousel__spacer",style:e.normalizeStyle({flexBasis:`${p.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,({item:d,index:z})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(b)(d,z),class:"vue-virtual-carousel__item",style:e.normalizeStyle({flexBasis:`${U.value}px`,marginRight:z<n.items.length-1?`${W.value}px`:"0px"}),role:"listitem","aria-roledescription":"slide","aria-label":`${z+1} of ${n.items.length}`,"aria-current":z===i.value?"true":void 0},[e.renderSlot(l.$slots,"default",{item:d,index:z,active:z===i.value,visible:ae(z)})],12,Ue))),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",_e,[e.renderSlot(l.$slots,"empty")]))],44,We))}}),Ge=["aria-label"],je=["aria-posinset","aria-setsize"],be=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:F,emit:I}){const t=n,h=I,{pulling:m,pullDistance:x,pullOffset:i,pullProgress:E,refreshMessage:D,refreshThreshold:N,handleTouchStart:P,handleTouchMove:Y,handleTouchEnd:g,handleTouchCancel:b}=ye({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>h("refresh")}),T=e.ref(),k=e.ref(0),R=e.ref(0);let O,W=-1;const j=ge(),{getItemKey:K}=me({componentName:"VirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),B=e.computed(()=>Math.max(1,t.itemSize)),U=e.computed(()=>Math.max(0,Math.floor(t.overscan))),L=e.computed(()=>t.items.length*B.value),_=e.computed(()=>Math.max(1,t.loadingItemSize??B.value)),Z=e.computed(()=>L.value+(t.loading?_.value:0)),te=e.computed(()=>R.value>0?R.value:typeof t.height=="number"?t.height:0),A=e.computed(()=>Math.max(0,Math.floor(k.value/B.value)-U.value)),v=e.computed(()=>{const f=Math.ceil((k.value+te.value)/B.value);return Math.min(t.items.length,f+U.value)}),p=e.computed(()=>t.items.slice(A.value,v.value).map((f,S)=>({item:f,index:A.value+S}))),C=e.computed(()=>({height:pe(t.height)})),X=e.computed(()=>({transform:`translateY(${A.value*B.value}px)`}));function q(){var f;R.value=((f=T.value)==null?void 0:f.clientHeight)??0,j(T.value,t.height),e.nextTick(J)}function ae(f){k.value=f.currentTarget.scrollTop,h("scroll",{scrollTop:k.value,startIndex:A.value,endIndex:v.value}),J()}function J(){const f=T.value;if(!f||!t.hasMore||t.loading||W===t.items.length)return;const S=Math.max(0,t.loadMoreThreshold);Z.value-f.scrollTop-f.clientHeight<=S&&(W=t.items.length,h("loadMore"))}function Q(f,S={}){const o=T.value;if(!o)return;const s=Math.max(0,Z.value-o.clientHeight),u=Math.min(Math.max(0,Number.isFinite(f)?f:0),s),$=S.behavior??"auto";$==="auto"&&(k.value=u),o.scrollTo({...S,top:u,behavior:$})}function ee(f,S={}){const o=T.value;if(!o||t.items.length===0)return;const s=Math.min(t.items.length-1,Math.max(0,Math.floor(f))),{align:u="start",...$}=S;let H=s*B.value;u==="center"?H-=(o.clientHeight-B.value)/2:u==="end"&&(H-=o.clientHeight-B.value),o.scrollTo({...$,top:Math.max(0,Math.min(H,Z.value-o.clientHeight))})}function oe(f="auto"){var S;(S=T.value)==null||S.scrollTo({top:0,behavior:f})}return e.watch(()=>[t.items.length,t.itemSize],async()=>{await e.nextTick();const f=T.value;if(!f)return;const S=Math.max(0,Z.value-f.clientHeight);f.scrollTop>S&&(f.scrollTop=S,k.value=S),J()}),e.watch(()=>[t.hasMore,t.loading],async([f])=>{f||(W=-1),await e.nextTick(),J()}),e.onMounted(()=>{q(),typeof ResizeObserver<"u"&&T.value&&(O=new ResizeObserver(q),O.observe(T.value)),e.nextTick(J)}),e.onBeforeUnmount(()=>{O&&(O.disconnect(),O=void 0)}),F({scrollTo:Q,scrollToIndex:ee,scrollToTop:oe}),(f,S)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"viewport",ref:T,class:e.normalizeClass(["vue-virtual-scroll",{"vue-virtual-scroll--pulling":e.unref(m)}]),style:e.normalizeStyle(C.value),role:"list","aria-label":n.ariaLabel,tabindex:"0",onScrollPassive:ae,onTouchstartPassive:S[0]||(S[0]=(...o)=>e.unref(P)&&e.unref(P)(...o)),onTouchmove:S[1]||(S[1]=(...o)=>e.unref(Y)&&e.unref(Y)(...o)),onTouchend:S[2]||(S[2]=(...o)=>e.unref(g)&&e.unref(g)(...o)),onTouchcancel:S[3]||(S[3]=(...o)=>e.unref(b)&&e.unref(b)(...o))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(N)}px`,transform:`translateY(${e.unref(i)-e.unref(N)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(f.$slots,"refresh",{pullDistance:e.unref(x),progress:e.unref(E),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(D)),1)])],4)):e.createCommentVNode("",!0),n.items.length||n.loading?(e.openBlock(),e.createElementBlock("div",{key:1,class:"vue-virtual-scroll__spacer",style:e.normalizeStyle({height:`${Z.value}px`,transform:`translateY(${e.unref(i)}px)`})},[e.createElementVNode("div",{class:"vue-virtual-scroll__content",style:e.normalizeStyle(X.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,({item:o,index:s})=>(e.openBlock(),e.createElementBlock("div",{key:e.unref(K)(o,s),class:"vue-virtual-scroll__item",style:e.normalizeStyle({height:`${B.value}px`}),role:"listitem","aria-posinset":s+1,"aria-setsize":n.items.length},[e.renderSlot(f.$slots,"default",{item:o,index:s})],12,je))),128))],4),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-virtual-scroll__loading",style:e.normalizeStyle({height:`${_.value}px`,transform:`translateY(${L.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(f.$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-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(i)}px)`})},[e.renderSlot(f.$slots,"empty")],4))],46,Ge))}}),Ze=["aria-label"],qe=["aria-posinset","aria-setsize"],Be=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:F,emit:I}){const t=n,h=I,m=e.ref(),x=e.ref(0),i=e.ref(0),E=e.ref(0),D=e.ref(0),N=new Map,P=new Map,Y=new Map;let g,b,T,k,R=!1,O=!1,W=-1;const{getItemKey:j}=me({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:U,pullDistance:L,pullOffset:_,pullProgress:Z,refreshMessage:te,refreshThreshold:A,handleTouchStart:v,handleTouchMove:p,handleTouchEnd:C,handleTouchCancel:X}=ye({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>h("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),q=e.computed(()=>Math.max(1,t.estimatedItemSize)),ae=e.computed(()=>Math.max(1,t.loadingItemSize??q.value)),J=e.computed(()=>Math.max(0,Math.floor(t.overscan))),Q=e.computed(()=>{D.value;const c=new Array(t.items.length+1),w=new Array(t.items.length);c[0]=0;for(let y=0;y<t.items.length;y+=1){const le=j(t.items[y],y),G=N.get(le)??q.value;w[y]=G,c[y+1]=c[y]+G}return{offsets:c,sizes:w,total:c[t.items.length]??0}}),ee=e.computed(()=>Q.value.total+(t.loading?ae.value:0)),oe=e.computed(()=>{const c=new Map;return t.items.forEach((w,y)=>{c.set(j(w,y),y)}),c}),f=e.computed(()=>Math.max(0,x.value-E.value));function S(c){if(t.items.length===0)return 0;const w=Q.value.offsets;let y=0,le=t.items.length;for(;y<le;){const G=Math.floor((y+le)/2);w[G+1]<=c?y=G+1:le=G}return Math.min(y,t.items.length-1)}const o=e.computed(()=>Math.max(0,S(f.value)-J.value)),s=e.computed(()=>{if(t.items.length===0)return 0;const c=x.value+i.value-E.value,w=Math.max(q.value,c),y=S(w)+1;return Math.min(t.items.length,y+J.value)}),u=e.computed(()=>t.items.slice(o.value,s.value).map((c,w)=>{const y=o.value+w;return{item:c,index:y,key:j(c,y),top:Q.value.offsets[y]}}));function $(){typeof window>"u"||(x.value=Math.max(0,window.scrollY),i.value=window.innerHeight,m.value&&(E.value=m.value.getBoundingClientRect().top+x.value))}function H(){h("scroll",{scrollTop:f.value,startIndex:o.value,endIndex:s.value})}function M(c=!1){O&&(R||(R=c),!T&&(T=K(()=>{T=void 0,$(),R&&(R=!1,H()),l()})))}function V(){M(!0)}function r(){M()}function l(){if(typeof window>"u"||!t.hasMore||t.loading||W===t.items.length)return;const c=Math.max(0,t.loadMoreThreshold),w=E.value+ee.value,y=x.value+i.value;w-y<=c&&(W=t.items.length,h("loadMore"))}function a(c){const w=c.borderBoxSize;if(w){const y=Array.isArray(w)?w[0]:w;if(y!=null&&y.blockSize)return y.blockSize}return c.contentRect.height}function d(c){const w=Q.value;let y=0,le=!1;for(const G of c){const se=G.target,ue=P.get(se),fe=a(G);if(ue===void 0||fe<=0)continue;const ve=N.get(ue)??q.value;if(Math.abs(ve-fe)<.5)continue;const he=oe.value.get(ue);he!==void 0&&w.offsets[he+1]<=f.value&&(y+=fe-ve),N.set(ue,fe),le=!0}le&&(D.value+=1,e.nextTick(()=>{if(O){if(y!==0&&typeof window<"u"){const G=Math.max(0,x.value+y);x.value=G,window.scrollTo({top:G,behavior:"auto"})}$(),l()}}))}function z(c){if(O){for(const w of c)Y.set(w.target,w);k||(k=K(()=>{k=void 0;const w=Array.from(Y.values());Y.clear(),d(w)}))}}function re(c,w){c instanceof HTMLElement&&(P.set(c,w),b==null||b.observe(c))}function ne(){for(const[c]of P)c.isConnected||(b==null||b.unobserve(c),P.delete(c))}function ie(c,w={}){if(typeof window>"u")return;$();const y=Math.max(0,ee.value-i.value),le=Math.min(Math.max(0,Number.isFinite(c)?c:0),y),G=Math.max(0,E.value+le),se=w.behavior??"auto";se==="auto"&&(x.value=G),window.scrollTo({...w,top:G,behavior:se})}function ce(c,w={}){if(typeof window>"u"||t.items.length===0)return;$();const y=Math.min(t.items.length-1,Math.max(0,Math.floor(c))),{align:le="start",...G}=w,se=Q.value.sizes[y];let ue=E.value+Q.value.offsets[y];le==="center"?ue-=(i.value-se)/2:le==="end"&&(ue-=i.value-se);const fe=Math.max(E.value,E.value+ee.value-i.value),ve=Math.max(0,Math.min(ue,fe)),he=G.behavior??"auto";he==="auto"&&(x.value=ve),window.scrollTo({...G,top:ve,behavior:he})}function de(c="auto"){typeof window>"u"||($(),window.scrollTo({top:Math.max(0,E.value),behavior:c}))}return e.watch(()=>t.itemKey,()=>{N.clear(),D.value+=1,W=-1}),e.watch(()=>t.items.map((c,w)=>j(c,w)),async(c,w)=>{const y=c.length!==w.length||c.some((G,se)=>G!==w[se]),le=new Set(c);for(const G of N.keys())le.has(G)||N.delete(G);y&&(W=-1),D.value+=1,await e.nextTick(),O&&($(),l())}),e.watch(()=>[t.hasMore,t.loading],async([c])=>{c||(W=-1),await e.nextTick(),O&&($(),l())}),e.onMounted(()=>{if(O=!0,$(),window.addEventListener("scroll",V,{passive:!0}),window.addEventListener("resize",r,{passive:!0}),typeof ResizeObserver<"u"){g=new ResizeObserver(()=>{M()}),b=new ResizeObserver(z),m.value&&g.observe(m.value);for(const[c]of P)b.observe(c)}e.nextTick(()=>{O&&l()})}),e.onUpdated(ne),e.onBeforeUnmount(()=>{O=!1,window.removeEventListener("scroll",V),window.removeEventListener("resize",r),B(T),B(k),T=void 0,k=void 0,R=!1,Y.clear(),g&&(g.disconnect(),g=void 0),b&&(b.disconnect(),b=void 0),P.clear()}),F({scrollTo:ie,scrollToIndex:ce,scrollToTop:de}),(c,w)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:m,class:e.normalizeClass(["vue-window-dynamic-virtual-scroll",{"vue-window-dynamic-virtual-scroll--pulling":e.unref(U)}]),role:"list","aria-label":n.ariaLabel,onTouchstartPassive:w[0]||(w[0]=(...y)=>e.unref(v)&&e.unref(v)(...y)),onTouchmove:w[1]||(w[1]=(...y)=>e.unref(p)&&e.unref(p)(...y)),onTouchend:w[2]||(w[2]=(...y)=>e.unref(C)&&e.unref(C)(...y)),onTouchcancel:w[3]||(w[3]=(...y)=>e.unref(X)&&e.unref(X)(...y))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(A)}px`,transform:`translateY(${e.unref(_)-e.unref(A)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(c.$slots,"refresh",{pullDistance:e.unref(L),progress:e.unref(Z),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(te)),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:`${ee.value}px`,transform:`translateY(${e.unref(_)}px)`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,({item:y,index:le,key:G,top:se})=>(e.openBlock(),e.createElementBlock("div",{key:G,ref_for:!0,ref:ue=>re(ue,G),class:"vue-window-dynamic-virtual-scroll__item",style:e.normalizeStyle({transform:`translateY(${se}px)`}),role:"listitem","aria-posinset":le+1,"aria-setsize":n.items.length},[e.renderSlot(c.$slots,"default",{item:y,index:le})],12,qe))),128)),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-dynamic-virtual-scroll__loading",style:e.normalizeStyle({height:`${ae.value}px`,transform:`translateY(${Q.value.total}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(c.$slots,"loading",{},()=>[w[4]||(w[4]=e.createTextVNode("Loading more…",-1))])],4)):e.createCommentVNode("",!0)],4)):(e.openBlock(),e.createElementBlock("div",{key:2,class:"vue-window-dynamic-virtual-scroll__empty",style:e.normalizeStyle({transform:`translateY(${e.unref(_)}px)`})},[e.renderSlot(c.$slots,"empty")],4))],42,Ze))}}),Je=["aria-label"],Qe=["aria-posinset","aria-setsize"],ze=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:F,emit:I}){const t=n,h=I,m=e.ref(),x=e.ref(0),i=e.ref(0),E=e.ref(0);let D,N=-1;const{getItemKey:P}=me({componentName:"WindowGirdVirtualScroll",items:()=>t.items,itemKey:()=>t.itemKey}),{pulling:Y,pullDistance:g,pullOffset:b,pullProgress:T,refreshMessage:k,refreshThreshold:R,handleTouchStart:O,handleTouchMove:W,handleTouchEnd:j,handleTouchCancel:K}=ye({enabled:()=>t.pullToRefresh,refreshing:()=>t.refreshing,threshold:()=>t.pullRefreshThreshold,onRefresh:()=>h("refresh"),scrollTop:()=>typeof window>"u"?0:Math.max(0,window.scrollY)}),B=e.computed(()=>Math.max(1,t.itemSize)),U=e.computed(()=>Math.max(1,Math.floor(t.columns))),L=e.computed(()=>Math.max(0,t.gap)),_=e.computed(()=>Math.max(0,Math.floor(t.overscan))),Z=e.computed(()=>Math.max(1,t.loadingItemSize??B.value)),te=e.computed(()=>B.value+L.value),A=e.computed(()=>Math.ceil(t.items.length/U.value)),v=e.computed(()=>A.value===0?0:A.value*B.value+(A.value-1)*L.value),p=e.computed(()=>v.value+(t.items.length?L.value:0)),C=e.computed(()=>v.value+(t.loading?Z.value+(t.items.length?L.value:0):0)),X=e.computed(()=>Math.max(0,x.value-E.value)),q=e.computed(()=>Math.max(0,Math.floor(X.value/te.value)-_.value)),ae=e.computed(()=>{if(A.value===0)return 0;const M=Math.max(B.value,x.value+i.value-E.value),V=Math.ceil((M+L.value)/te.value);return Math.min(A.value,V+_.value)}),J=e.computed(()=>Math.min(t.items.length,q.value*U.value)),Q=e.computed(()=>Math.min(t.items.length,ae.value*U.value)),ee=e.computed(()=>t.items.slice(J.value,Q.value).map((M,V)=>{const r=J.value+V;return{item:M,index:r,key:P(M,r),rowIndex:Math.floor(r/U.value),columnIndex:r%U.value}})),oe=e.computed(()=>({gridTemplateColumns:`repeat(${U.value}, minmax(0, 1fr))`,columnGap:`${L.value}px`,rowGap:`${L.value}px`,transform:`translateY(${q.value*te.value}px)`}));function f(){typeof window>"u"||(x.value=Math.max(0,window.scrollY),i.value=window.innerHeight,m.value&&(E.value=m.value.getBoundingClientRect().top+x.value))}function S(){h("scroll",{scrollTop:X.value,startIndex:J.value,endIndex:Q.value})}function o(){f(),S(),s()}function s(){if(typeof window>"u"||!t.hasMore||t.loading||N===t.items.length)return;const M=Math.max(0,t.loadMoreThreshold),V=E.value+C.value,r=x.value+i.value;V-r<=M&&(N=t.items.length,h("loadMore"))}function u(M,V={}){if(typeof window>"u")return;f();const r=Math.max(0,C.value-i.value),l=Math.min(Math.max(0,Number.isFinite(M)?M:0),r),a=Math.max(0,E.value+l),d=V.behavior??"auto";d==="auto"&&(x.value=a),window.scrollTo({...V,top:a,behavior:d})}function $(M,V={}){if(typeof window>"u"||t.items.length===0)return;f();const r=Math.min(t.items.length-1,Math.max(0,Math.floor(M))),l=Math.floor(r/U.value),{align:a="start",...d}=V;let z=E.value+l*te.value;a==="center"?z-=(i.value-B.value)/2:a==="end"&&(z-=i.value-B.value);const re=Math.max(E.value,E.value+C.value-i.value),ne=Math.max(0,Math.min(z,re)),ie=d.behavior??"auto";ie==="auto"&&(x.value=ne),window.scrollTo({...d,top:ne,behavior:ie})}function H(M="auto"){typeof window>"u"||(f(),window.scrollTo({top:Math.max(0,E.value),behavior:M}))}return e.watch(()=>[t.items.length,t.itemSize,t.columns,t.gap],async()=>{await e.nextTick(),f(),s()}),e.watch(()=>[t.hasMore,t.loading],async([M])=>{M||(N=-1),await e.nextTick(),f(),s()}),e.onMounted(()=>{f(),window.addEventListener("scroll",o,{passive:!0}),window.addEventListener("resize",o,{passive:!0}),typeof ResizeObserver<"u"&&(D=new ResizeObserver(()=>{f(),s()}),m.value&&D.observe(m.value)),e.nextTick(s)}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",o),window.removeEventListener("resize",o),D&&(D.disconnect(),D=void 0)}),F({scrollTo:u,scrollToIndex:$,scrollToTop:H}),(M,V)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:m,class:e.normalizeClass(["vue-window-gird-virtual-scroll",{"vue-window-gird-virtual-scroll--pulling":e.unref(Y)}]),role:"list","aria-label":n.ariaLabel,onTouchstartPassive:V[0]||(V[0]=(...r)=>e.unref(O)&&e.unref(O)(...r)),onTouchmove:V[1]||(V[1]=(...r)=>e.unref(W)&&e.unref(W)(...r)),onTouchend:V[2]||(V[2]=(...r)=>e.unref(j)&&e.unref(j)(...r)),onTouchcancel:V[3]||(V[3]=(...r)=>e.unref(K)&&e.unref(K)(...r))},[n.pullToRefresh||n.refreshing?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__refresh",style:e.normalizeStyle({height:`${e.unref(R)}px`,transform:`translateY(${e.unref(b)-e.unref(R)}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(M.$slots,"refresh",{pullDistance:e.unref(g),progress:e.unref(T),refreshing:n.refreshing},()=>[e.createTextVNode(e.toDisplayString(e.unref(k)),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:`${C.value}px`,transform:`translateY(${e.unref(b)}px)`})},[e.createElementVNode("div",{class:"vue-window-gird-virtual-scroll__content",style:e.normalizeStyle(oe.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ee.value,({item:r,index:l,key:a,rowIndex:d,columnIndex:z})=>(e.openBlock(),e.createElementBlock("div",{key:a,class:"vue-window-gird-virtual-scroll__item",style:e.normalizeStyle({height:`${B.value}px`}),role:"listitem","aria-posinset":l+1,"aria-setsize":n.items.length},[e.renderSlot(M.$slots,"default",{item:r,index:l,rowIndex:d,columnIndex:z})],12,Qe))),128))],4),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vue-window-gird-virtual-scroll__loading",style:e.normalizeStyle({height:`${Z.value}px`,transform:`translateY(${p.value}px)`}),role:"status","aria-live":"polite"},[e.renderSlot(M.$slots,"loading",{},()=>[V[4]||(V[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(b)}px)`})},[e.renderSlot(M.$slots,"empty")],4))],42,Je))}}),Ie=we,Ee={install(n){n.component("ChatVirtualScroll",Me),n.component("DynamicVirtualScroll",we),n.component("ShortMediaFeed",Te),n.component("SkeletonLoader",ke),n.component("VirtualCarousel",Se),n.component("VirtualList",Ie),n.component("VirtualScroll",be),n.component("WindowDynamicVirtualScroll",Be),n.component("WindowGirdVirtualScroll",ze)}};exports.ChatVirtualScroll=Me;exports.DynamicVirtualScroll=we;exports.ShortMediaFeed=Te;exports.SkeletonLoader=ke;exports.VirtualCarousel=Se;exports.VirtualList=Ie;exports.VirtualScroll=be;exports.VueVirtualScroll=Ee;exports.WindowDynamicVirtualScroll=Be;exports.WindowGirdVirtualScroll=ze;exports.default=Ee;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.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{position:relative;width:100%;box-sizing:border-box;overflow-anchor:none}.vue-chat-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-short-media-feed{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;overscroll-behavior:contain;overflow-anchor:none;scroll-snap-type:y mandatory;scrollbar-width:none;touch-action:pan-y;-webkit-overflow-scrolling:touch}.vue-short-media-feed::-webkit-scrollbar{display:none}.vue-short-media-feed__item{position:relative;width:100%;min-height:1px;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-short-media-feed__spacer{width:100%;pointer-events:none}.vue-short-media-feed__empty{width:100%;height:100%}.vue-virtual-carousel{position:relative;width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;box-sizing:border-box;overscroll-behavior-x:contain;overflow-anchor:none;scroll-snap-type:x mandatory;scrollbar-width:none;touch-action:pan-x;-webkit-overflow-scrolling:touch}.vue-virtual-carousel::-webkit-scrollbar{display:none}.vue-virtual-carousel__track{display:flex;align-items:stretch;width:max-content;min-width:100%;height:100%}.vue-virtual-carousel__item{position:relative;flex-grow:0;flex-shrink:0;min-width:1px;height:100%;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-virtual-carousel__spacer{flex-grow:0;flex-shrink:0;width:0;pointer-events:none}.vue-virtual-carousel__empty{width:100%;height:100%}.vue-virtual-scroll__spacer{position:relative;width:100%;pointer-events:none}.vue-virtual-scroll__content{position:absolute;inset:0 0 auto;width:100%;will-change:transform;pointer-events:auto}.vue-virtual-scroll__item{width:100%;overflow:hidden;box-sizing:border-box}.vue-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll__spacer,.vue-chat-virtual-scroll__spacer{position:relative;width:100%}.vue-dynamic-virtual-scroll__item,.vue-window-dynamic-virtual-scroll__item,.vue-chat-virtual-scroll__item{position:absolute;inset:0 0 auto;display:flow-root;width:100%;box-sizing:border-box;will-change:transform}.vue-chat-virtual-scroll__loading-older{position:sticky;top:0;z-index:2;height:0;color:#64748b;font-size:.875rem;font-weight:600;text-align:center;pointer-events:none}.vue-chat-virtual-scroll__loading-older>div{display:inline-flex;align-items:center;justify-content:center;min-height:2.5rem;padding:0 1rem;background:#ffffffeb;border-radius:999px;box-shadow:0 2px 12px #0f172a1a}.vue-virtual-scroll__loading,.vue-dynamic-virtual-scroll__loading,.vue-window-dynamic-virtual-scroll__loading{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{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-virtual-scroll__empty,.vue-dynamic-virtual-scroll__empty,.vue-window-dynamic-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{transition:none}
|
|
1
|
+
.vue-skeleton-loader[data-v-fc92f61f]{position:relative;flex-shrink:0;overflow:hidden;box-sizing:border-box;background:var(--skeleton-background, #e2e8f0)}.vue-skeleton-loader--rounded[data-v-fc92f61f]{border-radius:var(--skeleton-radius, 8px)}.vue-skeleton-loader--circle[data-v-fc92f61f]{border-radius:50%}.vue-skeleton-loader--animated[data-v-fc92f61f]:after{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,var(--skeleton-highlight, rgb(255 255 255 / 60%)),transparent);transform:translate(-100%);animation:skeleton-shimmer-fc92f61f 1.5s ease-in-out infinite;content:""}@keyframes skeleton-shimmer-fc92f61f{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.vue-skeleton-loader--animated[data-v-fc92f61f]:after{animation:none;content:none}}.vue-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-dynamic-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-window-dynamic-virtual-scroll,.vue-window-gird-virtual-scroll{position:relative;width:100%;box-sizing:border-box;overflow-anchor:none}.vue-chat-virtual-scroll{position:relative;width:100%;overflow:auto;box-sizing:border-box;overflow-anchor:none;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.vue-short-media-feed{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;overscroll-behavior:contain;overflow-anchor:none;scroll-snap-type:y mandatory;scrollbar-width:none;touch-action:pan-y;-webkit-overflow-scrolling:touch}.vue-short-media-feed::-webkit-scrollbar{display:none}.vue-short-media-feed__item{position:relative;width:100%;min-height:1px;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-short-media-feed__spacer{width:100%;pointer-events:none}.vue-short-media-feed__empty{width:100%;height:100%}.vue-virtual-carousel{position:relative;width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;box-sizing:border-box;overscroll-behavior-x:contain;overflow-anchor:none;scroll-snap-type:x mandatory;scrollbar-width:none;touch-action:pan-x;-webkit-overflow-scrolling:touch}.vue-virtual-carousel::-webkit-scrollbar{display:none}.vue-virtual-carousel__track{display:flex;align-items:stretch;width:max-content;min-width:100%;height:100%}.vue-virtual-carousel__item{position:relative;flex-grow:0;flex-shrink:0;min-width:1px;height:100%;overflow:hidden;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always}.vue-virtual-carousel__spacer{flex-grow:0;flex-shrink:0;width:0;pointer-events:none}.vue-virtual-carousel__empty{width:100%;height:100%}.vue-virtual-scroll__spacer{position:relative;width:100%;pointer-events:none}.vue-virtual-scroll__content{position:absolute;inset:0 0 auto;width:100%;will-change:transform;pointer-events:auto}.vue-virtual-scroll__item{width:100%;overflow:hidden;box-sizing:border-box}.vue-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll__spacer,.vue-window-gird-virtual-scroll__spacer{position:relative;width:100%}.vue-window-gird-virtual-scroll__content{position:absolute;inset:0 0 auto;display:grid;width:100%;box-sizing:border-box;will-change:transform}.vue-window-gird-virtual-scroll__item{min-width:0;overflow:hidden;box-sizing:border-box}.vue-chat-virtual-scroll__spacer{position:relative;width:100%}.vue-dynamic-virtual-scroll__item,.vue-window-dynamic-virtual-scroll__item,.vue-chat-virtual-scroll__item{position:absolute;inset:0 0 auto;display:flow-root;width:100%;box-sizing:border-box;will-change:transform}.vue-chat-virtual-scroll__loading-older{position:sticky;top:0;z-index:2;height:0;color:#64748b;font-size:.875rem;font-weight:600;text-align:center;pointer-events:none}.vue-chat-virtual-scroll__loading-older>div{display:inline-flex;align-items:center;justify-content:center;min-height:2.5rem;padding:0 1rem;background:#ffffffeb;border-radius:999px;box-shadow:0 2px 12px #0f172a1a}.vue-virtual-scroll__loading,.vue-dynamic-virtual-scroll__loading,.vue-window-dynamic-virtual-scroll__loading,.vue-window-gird-virtual-scroll__loading{position:absolute;inset:0 0 auto;display:flex;align-items:center;justify-content:center;width:100%;padding:.75rem;color:#64748b;box-sizing:border-box}.vue-virtual-scroll__refresh,.vue-dynamic-virtual-scroll__refresh,.vue-window-dynamic-virtual-scroll__refresh,.vue-window-gird-virtual-scroll__refresh{position:absolute;inset:0 0 auto;z-index:1;display:flex;align-items:center;justify-content:center;width:100%;color:#475569;font-size:.875rem;font-weight:600;box-sizing:border-box;pointer-events:none;transition:transform .18s ease}.vue-virtual-scroll__spacer,.vue-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll__spacer,.vue-window-gird-virtual-scroll__spacer,.vue-virtual-scroll__empty,.vue-dynamic-virtual-scroll__empty,.vue-window-dynamic-virtual-scroll__empty,.vue-window-gird-virtual-scroll__empty{transition:transform .18s ease}.vue-virtual-scroll--pulling .vue-virtual-scroll__refresh,.vue-virtual-scroll--pulling .vue-virtual-scroll__spacer,.vue-virtual-scroll--pulling .vue-virtual-scroll__empty,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__refresh,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__spacer,.vue-dynamic-virtual-scroll--pulling .vue-dynamic-virtual-scroll__empty,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__refresh,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__spacer,.vue-window-dynamic-virtual-scroll--pulling .vue-window-dynamic-virtual-scroll__empty,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__refresh,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__spacer,.vue-window-gird-virtual-scroll--pulling .vue-window-gird-virtual-scroll__empty{transition:none}
|