@glhrmoura/vue-virtualize 0.1.3 → 0.1.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 CHANGED
@@ -14,7 +14,7 @@ Headless virtualization for Vue 3 lists, grids, and tables.
14
14
 
15
15
  ### Documentation
16
16
 
17
- [**Vue Virtualize**](https://glhrmoura-vue-virtualize.netlify.app)
17
+ [**Vue Virtualize: Documentation**](https://glhrmoura-vue-virtualize.netlify.app)
18
18
 
19
19
  ### Install
20
20
 
@@ -46,7 +46,7 @@ const users = shallowRef(
46
46
  </script>
47
47
 
48
48
  <template>
49
- <VirtualList :items="users" :estimate-size="60" :height="500" :get-item-key="(user) => user.id">
49
+ <VirtualList :items="users" :height="500" :get-item-key="(user) => user.id">
50
50
  <template #default="{ item, index }">
51
51
  <UserCard :user="item" :index="index" />
52
52
  </template>
@@ -54,6 +54,8 @@ const users = shallowRef(
54
54
  </template>
55
55
  ```
56
56
 
57
+ `estimateSize` defaults to `48`. Keep it a number for hundreds of thousands or millions of rows so the list uses `count × size` and never walks every index. A function estimate does not scale. The scroller still needs a `height`.
58
+
57
59
  #### VirtualGrid
58
60
 
59
61
  ```vue
@@ -1,5 +1,5 @@
1
1
  import { type HTMLAttributes } from 'vue';
2
- import { type VirtualTableColumn } from '../composables/useVirtualTable';
2
+ import { type VirtualTableColumn } from '../composables/useVirtualTable.d.ts';
3
3
  declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
4
  props: import("vue").PublicProps & __VLS_PrettifyLocal<{
5
5
  rows: readonly T[];
@@ -24,14 +24,14 @@ declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_se
24
24
  attrs: any;
25
25
  slots: {
26
26
  header?: (props: {
27
- columns: import("..").PlacedVirtualTableColumn<T>[];
27
+ columns: import("../composables/useVirtualTable.d.ts").PlacedVirtualTableColumn<T>[];
28
28
  }) => any;
29
29
  } & {
30
30
  empty?: (props: {}) => any;
31
31
  } & {
32
32
  cell?: (props: {
33
33
  row: T;
34
- column: import("..").PlacedVirtualTableColumn<T>;
34
+ column: import("../composables/useVirtualTable.d.ts").PlacedVirtualTableColumn<T>;
35
35
  rowIndex: number;
36
36
  value: unknown;
37
37
  }) => any;
@@ -1,6 +1,6 @@
1
1
  import { type MaybeRefOrGetter } from 'vue';
2
- import type { ScrollToIndexOptions, VirtualItem } from '../core/types';
3
- import { type UseVirtualizerOptions } from './useVirtualizer';
2
+ import type { ScrollToIndexOptions, VirtualItem } from '../core/types.d.ts';
3
+ import { type UseVirtualizerOptions } from './useVirtualizer.d.ts';
4
4
  export interface VirtualGridCell<T> {
5
5
  index: number;
6
6
  key: string | number;
@@ -29,6 +29,8 @@ export declare function useVirtualGrid<T>(options: UseVirtualGridOptions<T>): {
29
29
  virtualCells: import("vue").ComputedRef<VirtualGridCell<T>[]>;
30
30
  totalHeight: import("vue").ComputedRef<number>;
31
31
  totalWidth: import("vue").ComputedRef<number>;
32
+ scrollAdjustX: import("vue").ComputedRef<number>;
33
+ scrollAdjustY: import("vue").ComputedRef<number>;
32
34
  scrollToIndex: (index: number, scrollOptions?: ScrollToIndexOptions) => void;
33
35
  scrollToOffset: (offset: {
34
36
  top?: number;
@@ -1,6 +1,6 @@
1
1
  import { type MaybeRefOrGetter } from 'vue';
2
- import type { VirtualItem } from '../core/types';
3
- import { type UseVirtualizerOptions } from './useVirtualizer';
2
+ import type { VirtualItem } from '../core/types.d.ts';
3
+ import { type UseVirtualizerOptions } from './useVirtualizer.d.ts';
4
4
  export interface VirtualListItem<T> extends VirtualItem {
5
5
  item: T;
6
6
  }
@@ -23,8 +23,9 @@ export declare function useVirtualList<T>(options: UseVirtualListOptions<T>): {
23
23
  virtualItems: import("vue").ComputedRef<VirtualListItem<T>[]>;
24
24
  totalSize: import("vue").ComputedRef<number>;
25
25
  scrollOffset: import("vue").ComputedRef<number>;
26
+ scrollAdjust: import("vue").ComputedRef<number>;
26
27
  isScrolling: import("vue").ComputedRef<boolean>;
27
- scrollToIndex: (index: number, scrollOptions?: import("..").ScrollToIndexOptions) => void;
28
+ scrollToIndex: (index: number, scrollOptions?: import("../core/types.d.ts").ScrollToIndexOptions) => void;
28
29
  scrollToOffset: (offset: number, behavior?: ScrollBehavior) => void;
29
30
  measure: (index: number, size: number) => void;
30
31
  measureElement: (target: unknown, index: number) => void;
@@ -1,5 +1,5 @@
1
1
  import { type MaybeRefOrGetter } from 'vue';
2
- import { type UseVirtualListOptions, type VirtualListItem } from './useVirtualList';
2
+ import { type UseVirtualListOptions, type VirtualListItem } from './useVirtualList.d.ts';
3
3
  export interface VirtualTableColumn<T> {
4
4
  id: string;
5
5
  header: string;
@@ -31,6 +31,7 @@ export declare function useVirtualTable<T>(options: UseVirtualTableOptions<T>):
31
31
  totalHeight: import("vue").ComputedRef<number>;
32
32
  totalWidth: import("vue").ComputedRef<number>;
33
33
  scrollOffset: import("vue").ComputedRef<number>;
34
+ scrollAdjust: import("vue").ComputedRef<number>;
34
35
  isScrolling: import("vue").ComputedRef<boolean>;
35
36
  scrollToIndex: (index: number, scrollOptions?: import("..").ScrollToIndexOptions) => void;
36
37
  scrollToOffset: (offset: number, behavior?: ScrollBehavior) => void;
@@ -1,5 +1,5 @@
1
1
  import { type MaybeRefOrGetter } from 'vue';
2
- import type { ScrollToIndexOptions, VirtualItem } from '../core/types';
2
+ import type { ScrollToIndexOptions, VirtualItem } from '../core/types.d.ts';
3
3
  export interface UseVirtualizerOptions {
4
4
  count: MaybeRefOrGetter<number>;
5
5
  estimateSize: (index: number) => number;
@@ -23,6 +23,7 @@ export declare function useVirtualizer(options: UseVirtualizerOptions): {
23
23
  virtualItems: import("vue").ComputedRef<VirtualItem[]>;
24
24
  totalSize: import("vue").ComputedRef<number>;
25
25
  scrollOffset: import("vue").ComputedRef<number>;
26
+ scrollAdjust: import("vue").ComputedRef<number>;
26
27
  isScrolling: import("vue").ComputedRef<boolean>;
27
28
  scrollToIndex: (index: number, scrollOptions?: ScrollToIndexOptions) => void;
28
29
  scrollToOffset: (offset: number, behavior?: ScrollBehavior) => void;
@@ -1,5 +1,9 @@
1
- import type { ScrollAlignment } from './types';
1
+ import type { ScrollAlignment } from './types.d.ts';
2
+ export declare const MAX_SCROLL_SIZE = 16777216;
2
3
  export declare function clampScrollOffset(offset: number, totalSize: number, viewport: number): number;
4
+ export declare function scrollContentSize(totalSize: number, measured?: number): number;
5
+ export declare function mapDomOffsetToVirtual(domOffset: number, virtualSize: number, domSize: number, viewport: number): number;
6
+ export declare function mapVirtualOffsetToDom(virtualOffset: number, virtualSize: number, domSize: number, viewport: number): number;
3
7
  export declare function findFirstIndexPast(count: number, target: number, getEnd: (index: number) => number): number;
4
8
  export declare function findLastIndexBefore(count: number, target: number, getStart: (index: number) => number): number;
5
9
  export declare function resolveScrollOffset(input: {
@@ -1,4 +1,4 @@
1
- import type { ScrollAlignment, VirtualItem, VirtualizerOptions } from './types';
1
+ import type { ScrollAlignment, VirtualItem, VirtualizerOptions } from './types.d.ts';
2
2
  export declare class Virtualizer {
3
3
  private count;
4
4
  private estimateSize;
package/dist/index.d.ts CHANGED
@@ -1,15 +1,15 @@
1
- export { Virtualizer } from './core/virtualizer';
2
- export { MeasurementCache, normalizeSize } from './core/measurements';
3
- export { clampScrollOffset, resolveScrollOffset } from './core/scrolling';
4
- export type { ScrollAlignment, ScrollToIndexOptions, VirtualItem, VirtualizerOptions, } from './core/types';
5
- export { useVirtualizer } from './composables/useVirtualizer';
6
- export type { UseVirtualizerOptions } from './composables/useVirtualizer';
7
- export { useVirtualList } from './composables/useVirtualList';
8
- export type { UseVirtualListOptions, VirtualListItem } from './composables/useVirtualList';
9
- export { useVirtualGrid } from './composables/useVirtualGrid';
10
- export type { UseVirtualGridOptions, VirtualGridCell } from './composables/useVirtualGrid';
11
- export { useVirtualTable } from './composables/useVirtualTable';
12
- export type { PlacedVirtualTableColumn, UseVirtualTableOptions, VirtualTableColumn, } from './composables/useVirtualTable';
13
- export { default as VirtualList } from './components/VirtualList.vue';
14
- export { default as VirtualGrid } from './components/VirtualGrid.vue';
15
- export { default as VirtualTable } from './components/VirtualTable.vue';
1
+ export { Virtualizer } from './core/virtualizer.d.ts';
2
+ export { MeasurementCache, normalizeSize } from './core/measurements.d.ts';
3
+ export { clampScrollOffset, mapDomOffsetToVirtual, mapVirtualOffsetToDom, resolveScrollOffset, scrollContentSize, } from './core/scrolling.d.ts';
4
+ export type { ScrollAlignment, ScrollToIndexOptions, VirtualItem, VirtualizerOptions, } from './core/types.d.ts';
5
+ export { useVirtualizer } from './composables/useVirtualizer.d.ts';
6
+ export type { UseVirtualizerOptions } from './composables/useVirtualizer.d.ts';
7
+ export { useVirtualList } from './composables/useVirtualList.d.ts';
8
+ export type { UseVirtualListOptions, VirtualListItem } from './composables/useVirtualList.d.ts';
9
+ export { useVirtualGrid } from './composables/useVirtualGrid.d.ts';
10
+ export type { UseVirtualGridOptions, VirtualGridCell } from './composables/useVirtualGrid.d.ts';
11
+ export { useVirtualTable } from './composables/useVirtualTable.d.ts';
12
+ export type { PlacedVirtualTableColumn, UseVirtualTableOptions, VirtualTableColumn, } from './composables/useVirtualTable.d.ts';
13
+ export { default as VirtualList } from './components/VirtualList.vue.d.ts';
14
+ export { default as VirtualGrid } from './components/VirtualGrid.vue.d.ts';
15
+ export { default as VirtualTable } from './components/VirtualTable.vue.d.ts';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("vue");function K(e){return!Number.isFinite(e)||e<0?0:e}class Z{sizes=new Map;divergent=!1;get(n){return this.sizes.get(n)}set(n,i,r){this.sizes.set(n,i),r!==null&&Math.abs(i-r)>=.5&&(this.divergent=!0)}get hasDivergent(){return this.divergent}clear(){this.sizes.clear(),this.divergent=!1}trim(n,i){let r=!1;for(const s of this.sizes.keys())s>=n&&(this.sizes.delete(s),r=!0);if(r&&(this.divergent=!1,i!==null)){for(const s of this.sizes.values())if(Math.abs(s-i)>=.5){this.divergent=!0;return}}}}function ee(e,n,i){return Math.min(i,Math.max(n,e))}function G(e,n,i){const r=Math.max(0,n-Math.max(0,i));return ee(Number.isFinite(e)?e:0,0,r)}function le(e,n,i){if(e<=0)return 0;let r=0,s=e-1,o=e-1;for(;r<=s;){const d=r+s>>>1;i(d)>n?(o=d,s=d-1):r=d+1}return o}function ue(e,n,i){if(e<=0)return 0;let r=0,s=e-1,o=0;for(;r<=s;){const d=r+s>>>1;i(d)<n?(o=d,r=d+1):s=d-1}return o}function te(e){const n=e.start+e.size;let i=e.align;if(i==="auto"){const r=e.current+e.viewport;if(e.start>=e.current&&n<=r)return e.current;i=e.start<e.current?"start":"end"}return i==="center"?e.start-(e.viewport-e.size)/2:i==="end"?n-e.viewport:e.start}class ne{count=0;estimateSize=()=>0;overscan=0;gap=0;paddingStart=0;paddingEnd=0;lanes=1;itemSize=null;viewportSize=0;scrollOffset=0;getItemKey=n=>n;measurements=new Z;built=0;offsets=[];laneCursor=[];laneEnd=[];setOptions(n){const i=Math.max(1,Math.floor(n.lanes??1)),r=n.gap??0,s=n.paddingStart??0,o=n.paddingEnd??0,d=Math.max(0,Math.floor(n.count)),h=n.itemSize===void 0||n.itemSize===null?null:K(n.itemSize),y=this.itemSize,x=i!==this.lanes||r!==this.gap||s!==this.paddingStart||o!==this.paddingEnd||n.estimateSize!==this.estimateSize||h!==this.itemSize;this.count=d,this.lanes=i,this.gap=r,this.paddingStart=s,this.paddingEnd=o,this.overscan=Math.max(0,Math.floor(n.overscan??0)),this.estimateSize=n.estimateSize,this.itemSize=h,this.getItemKey=n.getItemKey??(v=>v),n.viewportSize!==void 0&&(this.viewportSize=Math.max(0,n.viewportSize)),h!==y&&this.measurements.clear(),this.measurements.trim(this.count,this.itemSize),(x||this.built>this.count)&&this.resetGeometry()}setScrollOffset(n){this.scrollOffset=Number.isFinite(n)?n:0}getScrollOffset(){return this.scrollOffset}getViewportSize(){return this.viewportSize}measure(n,i){if(n<0||n>=this.count)return!1;const r=K(i),s=this.measurements.get(n);if(s!==void 0&&Math.abs(s-r)<.5)return!1;const o=this.getItemSize(n);return this.measurements.set(n,r,this.itemSize),Math.abs(o-r)<.5?!1:(this.resetGeometry(),!0)}clearMeasurements(){this.measurements.clear(),this.resetGeometry()}getItemSize(n){const i=this.measurements.get(n);return i!==void 0?i:this.itemSize!==null?this.itemSize:K(this.estimateSize(n))}getItemOffset(n){if(n<=0||this.count<=0)return this.paddingStart;const i=Math.min(n,this.count-1);if(this.usesFixedPath()){const r=Math.floor(i/this.lanes);return this.paddingStart+r*((this.itemSize??0)+this.gap)}return this.ensure(i),this.offsets[i]??this.paddingStart}getTotalSize(){if(this.count<=0)return this.paddingStart+this.paddingEnd;if(this.usesFixedPath()){let i=this.paddingStart;const r=this.itemSize??0;for(let s=0;s<this.lanes&&s<this.count;s+=1){const o=this.laneLength(s),d=this.paddingStart+o*r+Math.max(0,o-1)*this.gap;d>i&&(i=d)}return i+this.paddingEnd}this.ensure(this.count-1);let n=this.paddingStart;for(let i=0;i<this.lanes&&i<this.count;i+=1){const r=this.laneEnd[i]??this.paddingStart;r>n&&(n=r)}return n+this.paddingEnd}getVirtualItems(){if(this.count<=0||this.viewportSize<=0)return[];const n=G(this.scrollOffset,this.getTotalSize(),this.viewportSize),i=n+this.viewportSize,r=[];for(let s=0;s<this.lanes;s+=1){const o=this.laneLength(s);if(o<=0)continue;const d=le(o,n,v=>{const p=this.ordinalIndex(s,v);return this.getItemOffset(p)+this.getItemSize(p)}),h=ue(o,i,v=>this.getItemOffset(this.ordinalIndex(s,v))),y=Math.max(0,Math.min(d,h)-this.overscan),x=Math.min(o-1,Math.max(d,h)+this.overscan);for(let v=y;v<=x;v+=1){const p=this.ordinalIndex(s,v),I=this.getItemOffset(p),E=this.getItemSize(p);r.push({index:p,key:this.getItemKey(p),start:I,size:E,end:I+E,lane:s})}}return r.sort((s,o)=>s.index-o.index),r}getOffsetForIndex(n,i="auto"){if(this.count<=0)return 0;const r=ee(n,0,this.count-1),s=this.getItemOffset(r),o=this.getItemSize(r),d=te({start:s,size:o,viewport:this.viewportSize,current:this.scrollOffset,align:i});return G(d,this.getTotalSize(),this.viewportSize)}usesFixedPath(){return this.itemSize!==null&&!this.measurements.hasDivergent}ordinalIndex(n,i){return n+i*this.lanes}laneLength(n){return n<0||n>=this.lanes||n>=this.count?0:Math.floor((this.count-n-1)/this.lanes)+1}ensure(n){if(n<this.built)return;const i=Math.min(n,this.count-1);for(;this.built<=i;){const r=this.built%this.lanes,s=this.laneCursor[r]??this.paddingStart;this.offsets[this.built]=s;const o=s+this.getItemSize(this.built);this.laneEnd[r]=o,this.laneCursor[r]=o+this.gap,this.built+=1}}resetGeometry(){this.built=0,this.offsets=[],this.laneCursor=Array.from({length:this.lanes},()=>this.paddingStart),this.laneEnd=Array.from({length:this.lanes},()=>this.paddingStart)}}function F(){return typeof window<"u"&&typeof document<"u"}function ie(e){return typeof Element>"u"?null:e instanceof Element?e:null}function N(e,n,i,r){if(r==="smooth"&&typeof e.scrollTo=="function"){e.scrollTo({top:i?e.scrollTop:n,left:i?n:e.scrollLeft,behavior:r});return}i?e.scrollLeft=n:e.scrollTop=n}function P(e,n){return n?e.scrollLeft:e.scrollTop}function U(e,n){return n?e.clientWidth:e.clientHeight}function Y(e){return typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)}function X(e){e&&(typeof cancelAnimationFrame=="function"?cancelAnimationFrame(e):clearTimeout(e))}function ce(e,n){if(e.length!==n.length)return!1;for(let i=0;i<e.length;i+=1){const r=e[i],s=n[i];if(!r||!s||r.index!==s.index||r.start!==s.start||r.size!==s.size||r.end!==s.end||r.lane!==s.lane||r.key!==s.key)return!1}return!0}function A(e){const n=new ne,i=t.shallowRef([]),r=t.ref(0),s=t.ref(0),o=t.ref(!1),d=c=>e.estimateSize(c);let h=null,y=null,x=null,v=0,p=0,I=0,E=t.toValue(e.revision);const l=new Map,u=new Map,a=[];function f(){const c=t.toValue(e.container);return typeof HTMLElement>"u"?null:c instanceof HTMLElement?c:null}function S(){return t.toValue(e.horizontal)??!1}function C(){const c=t.toValue(e.initialRect);return c?S()?c.width:c.height:0}function O(){const c=t.toValue(e.revision);Object.is(c,E)||(E=c,n.clearMeasurements());const z=f(),w=z?U(z,S()):0,V=t.toValue(e.viewportInset)??0,k=Math.max(0,(w>0?w:C())-V),T=t.toValue(e.itemSize);n.setOptions({count:t.toValue(e.count),estimateSize:d,overscan:t.toValue(e.overscan)??5,gap:t.toValue(e.gap)??0,paddingStart:t.toValue(e.paddingStart)??0,paddingEnd:t.toValue(e.paddingEnd)??0,lanes:t.toValue(e.lanes)??1,itemSize:T??null,getItemKey:e.getItemKey,viewportSize:k});const M=Math.max(0,n.getTotalSize()-k);n.getScrollOffset()>M&&(n.setScrollOffset(M),z&&P(z,S())!==M&&N(z,M,S(),"auto"));const _=n.getVirtualItems();ce(i.value,_)||(i.value=_);const j=n.getTotalSize();r.value!==j&&(r.value=j);const q=n.getScrollOffset();s.value!==q&&(s.value=q)}function $(){if(!F()){O();return}v||(v=Y(()=>{v=0,o.value=!0,O(),typeof window<"u"&&(window.clearTimeout(I),I=window.setTimeout(()=>{o.value=!1},150))}))}function m(){const c=f();c&&(n.setScrollOffset(P(c,S())),$())}function b(){const c=f();if(c===h||(h&&(h.removeEventListener("scroll",m),y?.disconnect(),y=null),h=c,!c||!F()))return;const z=S();n.getScrollOffset()>0?N(c,n.getScrollOffset(),z,"auto"):n.setScrollOffset(P(c,z)),c.addEventListener("scroll",m,{passive:!0}),typeof ResizeObserver<"u"&&(y=new ResizeObserver(()=>O()),y.observe(c))}function g(){return!F()||typeof ResizeObserver>"u"?null:(x||(x=new ResizeObserver(c=>{const z=S();let w=!1;for(const V of c){const k=l.get(V.target);if(k===void 0)continue;const T=V.borderBoxSize?.[0],M=z?T?.inlineSize??V.contentRect.width:T?.blockSize??V.contentRect.height;M>0&&n.measure(k,M)&&(w=!0)}w&&O()})),x)}function R(){p=0;const c=a.splice(0,a.length),z=S();let w=!1;for(const V of c){if(!V.element.isConnected)continue;const k=V.element.getBoundingClientRect(),T=z?k.width:k.height;T>0&&n.measure(V.index,T)&&(w=!0)}w&&O()}function L(c,z){const w=ie(c),V=g(),k=u.get(z);k&&k!==w&&(V?.unobserve(k),l.delete(k),u.delete(z)),w&&(u.set(z,w),l.set(w,z),V?.observe(w),a.push({element:w,index:z}),!p&&(p=Y(R)))}function W(c,z="auto"){const w=f(),V=w?U(w,S()):0,k=V>0?V:n.getViewportSize(),T=G(c,n.getTotalSize(),k);n.setScrollOffset(T),w&&N(w,T,S(),z),O()}function oe(c,z){const w=n.getOffsetForIndex(c,z?.align??"auto");W(w,z?.behavior??"auto")}function ae(c,z){n.measure(c,z)&&O()}return O(),t.watch(()=>[t.toValue(e.count),t.toValue(e.overscan),t.toValue(e.gap),t.toValue(e.paddingStart),t.toValue(e.paddingEnd),t.toValue(e.lanes),t.toValue(e.horizontal),t.toValue(e.itemSize),t.toValue(e.viewportInset),t.toValue(e.revision),t.toValue(e.container),t.toValue(e.initialRect)?.width,t.toValue(e.initialRect)?.height],()=>{b(),O()},{flush:"post"}),t.onBeforeUnmount(()=>{h&&h.removeEventListener("scroll",m),y?.disconnect(),x?.disconnect(),X(v),X(p),typeof window<"u"&&window.clearTimeout(I),l.clear(),u.clear(),a.length=0}),{virtualItems:t.computed(()=>i.value),totalSize:t.computed(()=>r.value),scrollOffset:t.computed(()=>s.value),isScrolling:t.computed(()=>o.value),scrollToIndex:oe,scrollToOffset:W,measure:ae,measureElement:L}}function de(e,n,i){return typeof e=="function"?e(n,i):typeof e=="number"?e:48}function H(e){const n=A({count:()=>t.toValue(e.items).length,estimateSize:r=>{const s=t.toValue(e.items);return de(e.estimateSize,r,s[r])},getItemKey:r=>{const o=t.toValue(e.items)[r];return e.getItemKey?.(o,r)??r},itemSize:()=>e.itemSize!==void 0?t.toValue(e.itemSize):typeof e.estimateSize=="number"?e.estimateSize:void 0,container:e.container,horizontal:e.horizontal,overscan:e.overscan,gap:e.gap,paddingStart:e.paddingStart,paddingEnd:e.paddingEnd,initialRect:e.initialRect,viewportInset:e.viewportInset,revision:e.revision});return{virtualItems:t.computed(()=>{const r=t.toValue(e.items);return n.virtualItems.value.map(s=>{const o=r[s.index];return{...s,item:o,key:e.getItemKey?.(o,s.index)??s.key}})}),totalSize:n.totalSize,scrollOffset:n.scrollOffset,isScrolling:n.isScrolling,scrollToIndex:n.scrollToIndex,scrollToOffset:n.scrollToOffset,measure:n.measure,measureElement:n.measureElement}}function J(e,n,i){return typeof e=="function"?e(n):typeof e=="number"?e:i}function re(e){const n=t.computed(()=>Math.max(1,Math.floor(t.toValue(e.columnCount)||1))),i=t.computed(()=>Math.ceil(t.toValue(e.items).length/n.value)),r=new Map,s=A({count:()=>i.value,estimateSize:l=>J(t.toValue(e.estimateRowSize),l,48),itemSize:()=>{const l=t.toValue(e.estimateRowSize);return typeof l=="number"?l:void 0},overscan:()=>t.toValue(e.overscanRows)??t.toValue(e.overscan)??2,gap:()=>t.toValue(e.rowGap)??0,horizontal:!1,container:e.container,initialRect:e.initialRect,revision:e.revision}),o=A({count:()=>n.value,estimateSize:l=>J(t.toValue(e.estimateColumnSize),l,160),itemSize:()=>{const l=t.toValue(e.estimateColumnSize);return typeof l=="number"?l:void 0},overscan:()=>t.toValue(e.overscanColumns)??t.toValue(e.overscan)??1,gap:()=>t.toValue(e.columnGap)??0,horizontal:!0,container:e.container,initialRect:e.initialRect,revision:e.revision}),d=t.computed(()=>{const l=t.toValue(e.items),u=n.value,a=[];for(const f of s.virtualItems.value)for(const S of o.virtualItems.value){const C=f.index*u+S.index;if(C>=l.length)continue;const O=l[C];a.push({index:C,key:e.getItemKey?.(O,C)??C,item:O,row:f,column:S})}return a});function h(l,u){const a=t.toValue(e.items);if(!a.length)return;const f=Math.min(Math.max(l,0),a.length-1),S=n.value;s.scrollToIndex(Math.floor(f/S),u),o.scrollToIndex(f%S,u)}function y(l,u="auto"){l.top!==void 0&&s.scrollToOffset(l.top,u),l.left!==void 0&&o.scrollToOffset(l.left,u)}function x(l,u){const a=Math.max(r.get(l)??0,u);a<=0||a===r.get(l)||(r.set(l,a),s.measure(l,a))}let v=null;const p=new Map;function I(){return!F()||typeof ResizeObserver>"u"?null:(v||(v=new ResizeObserver(l=>{for(const u of l){const a=p.get(u.target);if(a===void 0)continue;const S=u.borderBoxSize?.[0]?.blockSize??u.contentRect.height;S>0&&x(a,S)}})),v)}function E(l,u){const a=ie(l),f=I();if(!a)return;p.set(a,u),f?.observe(a);const S=a.getBoundingClientRect().height;S>0&&x(u,S)}return t.onBeforeUnmount(()=>{v?.disconnect(),p.clear()}),{virtualRows:s.virtualItems,virtualColumns:o.virtualItems,virtualCells:d,totalHeight:s.totalSize,totalWidth:o.totalSize,scrollToIndex:h,scrollToOffset:y,measureRow:x,measureRowElement:E,measureColumn:o.measure}}function se(e){const n=H({items:e.rows,estimateSize:e.estimateRowSize,container:e.container,overscan:e.overscan,getItemKey:e.getRowKey,initialRect:e.initialRect,viewportInset:e.viewportInset,revision:e.revision,itemSize:e.itemSize}),i=t.computed(()=>{const o=t.toValue(e.columns);let d=0;return o.map(h=>{const y=h.width??h.minWidth??160,x={...h,start:d,size:y,end:d+y};return d+=y,x})}),r=t.computed(()=>{const o=i.value;return o.length?o[o.length-1]?.end??0:0});return{virtualRows:t.computed(()=>n.virtualItems.value),columns:i,totalHeight:n.totalSize,totalWidth:r,scrollOffset:n.scrollOffset,isScrolling:n.isScrolling,scrollToIndex:n.scrollToIndex,scrollToOffset:n.scrollToOffset,measure:n.measure,measureElement:n.measureElement}}function Q(e){if(typeof e=="number"&&Number.isFinite(e))return`${e}px`;if(typeof e=="string"&&e.trim())return e}function B(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e!="string")return 0;const n=/^(-?\d+(?:\.\d+)?)px$/.exec(e.trim());if(!n?.[1])return 0;const i=Number(n[1]);return Number.isFinite(i)?i:0}function D(e){return{overflow:"auto",position:"relative",height:Q(e.height)??(e.horizontal?"100%":void 0),width:Q(e.width)??(e.horizontal?void 0:"100%"),overflowAnchor:"none"}}function fe(e,n){return{position:"relative",width:n?`${e}px`:"100%",height:n?"100%":`${e}px`}}function me(e,n){return{position:"absolute",top:0,left:0,width:n?void 0:"100%",height:n?"100%":void 0,transform:n?`translateX(${e}px)`:`translateY(${e}px)`}}const he=t.defineComponent({__name:"VirtualList",props:{items:{},estimateSize:{type:[Number,Function],default:48},height:{},width:{},horizontal:{type:Boolean,default:!1},overscan:{default:5},gap:{default:0},paddingStart:{default:0},paddingEnd:{default:0},getItemKey:{},tag:{default:"div"},itemTag:{default:"div"},itemAttrs:{},revision:{}},setup(e,{expose:n}){const i=e,r=t.ref(null),{virtualItems:s,totalSize:o,scrollToIndex:d,scrollToOffset:h,measure:y,measureElement:x}=H({items:()=>i.items,estimateSize:(l,u)=>{const a=i.estimateSize;return typeof a=="number"?a:a(l,u)},itemSize:()=>typeof i.estimateSize=="number"?i.estimateSize:void 0,container:r,horizontal:()=>i.horizontal,overscan:()=>i.overscan,gap:()=>i.gap,paddingStart:()=>i.paddingStart,paddingEnd:()=>i.paddingEnd,getItemKey:(l,u)=>i.getItemKey?.(l,u)??u,initialRect:()=>({width:B(i.width),height:B(i.height)}),revision:()=>i.revision}),v=t.computed(()=>D({height:i.height,width:i.width,horizontal:i.horizontal})),p=t.computed(()=>fe(o.value,i.horizontal));function I(l){return me(l,i.horizontal)}function E(l){return u=>{x(u,l)}}return n({scrollToIndex:d,scrollToOffset:h,measure:y}),(l,u)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.tag),{ref_key:"container",ref:r,"data-virtual-container":"",role:"list",style:t.normalizeStyle(v.value)},{default:t.withCtx(()=>[e.items.length?(t.openBlock(),t.createElementBlock("div",{key:1,"data-virtual-spacer":"",style:t.normalizeStyle(p.value)},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(s),a=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.itemTag),t.mergeProps({key:a.key,ref_for:!0,ref:E(a.index),role:"listitem","data-index":a.index,"data-key":String(a.key),"aria-setsize":e.items.length,"aria-posinset":a.index+1,style:I(a.start)},{ref_for:!0},e.itemAttrs),{default:t.withCtx(()=>[t.renderSlot(l.$slots,"default",{item:a.item,index:a.index,start:a.start,size:a.size,end:a.end})]),_:2},1040,["data-index","data-key","aria-setsize","aria-posinset","style"]))),128))],4)):t.renderSlot(l.$slots,"empty",{},void 0,void 0,0)]),_:3},8,["style"]))}}),ge=["data-index","data-key"],ve=t.defineComponent({__name:"VirtualGrid",props:{items:{},columnCount:{default:1},estimateRowSize:{type:[Number,Function],default:48},estimateColumnSize:{type:[Number,Function],default:160},height:{},width:{},overscan:{default:2},overscanRows:{},overscanColumns:{},rowGap:{default:0},columnGap:{default:0},getItemKey:{},tag:{default:"div"},itemAttrs:{},revision:{}},setup(e,{expose:n}){const i=e,r=t.ref(null),{virtualCells:s,totalWidth:o,totalHeight:d,scrollToIndex:h,scrollToOffset:y,measureRow:x,measureRowElement:v}=re({items:()=>i.items,columnCount:()=>i.columnCount,estimateRowSize:()=>i.estimateRowSize,estimateColumnSize:()=>i.estimateColumnSize,container:r,overscan:()=>i.overscan,overscanRows:()=>i.overscanRows,overscanColumns:()=>i.overscanColumns,rowGap:()=>i.rowGap,columnGap:()=>i.columnGap,getItemKey:(u,a)=>i.getItemKey?.(u,a)??a,initialRect:()=>({width:B(i.width),height:B(i.height)}),revision:()=>i.revision}),p=t.computed(()=>D({height:i.height,width:i.width,horizontal:!1})),I=t.computed(()=>({position:"relative",width:`${o.value}px`,height:`${d.value}px`}));function E(u){return a=>{v(a,u)}}function l(u,a,f){return{position:"absolute",top:0,left:0,width:`${a}px`,transform:`translate(${u}px, ${f}px)`}}return n({scrollToIndex:h,scrollToOffset:y,measureRow:x}),(u,a)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.tag),{ref_key:"container",ref:r,"data-virtual-container":"",role:"grid",style:t.normalizeStyle(p.value)},{default:t.withCtx(()=>[e.items.length?(t.openBlock(),t.createElementBlock("div",{key:1,"data-virtual-spacer":"",style:t.normalizeStyle(I.value)},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(s),f=>(t.openBlock(),t.createElementBlock("div",t.mergeProps({key:f.key,ref_for:!0,ref:E(f.row.index),role:"gridcell","data-index":f.index,"data-key":String(f.key),style:l(f.column.start,f.column.size,f.row.start)},{ref_for:!0},e.itemAttrs),[t.renderSlot(u.$slots,"default",{item:f.item,index:f.index,rowIndex:f.row.index,columnIndex:f.column.index,row:f.row,column:f.column})],16,ge))),128))],4)):t.renderSlot(u.$slots,"empty",{},void 0,void 0,0)]),_:3},8,["style"]))}}),Se=["data-index","data-key","aria-rowindex"],ze=t.defineComponent({__name:"VirtualTable",props:{rows:{},columns:{},estimateRowSize:{type:[Number,Function],default:44},height:{},width:{},overscan:{default:5},getRowKey:{},stickyHeader:{type:Boolean,default:!0},tag:{default:"div"},rowAttrs:{},revision:{}},setup(e,{expose:n}){const i=e,r=t.ref(null),s=t.ref(null),o=t.ref(0),{virtualRows:d,columns:h,totalWidth:y,totalHeight:x,scrollToIndex:v,scrollToOffset:p,measure:I,measureElement:E}=se({rows:()=>i.rows,columns:()=>i.columns,estimateRowSize:(m,b)=>{const g=i.estimateRowSize;return typeof g=="number"?g:g(m,b)},container:r,overscan:()=>i.overscan,getRowKey:(m,b)=>i.getRowKey?.(m,b)??b,initialRect:()=>({width:B(i.width),height:B(i.height)}),viewportInset:o,revision:()=>i.revision,itemSize:()=>typeof i.estimateRowSize=="number"?i.estimateRowSize:void 0});t.watch(s,(m,b,g)=>{if(b===m&&!m||!m||!F()||typeof ResizeObserver>"u")return;const R=()=>{o.value=m.getBoundingClientRect().height},L=new ResizeObserver(R);L.observe(m),R(),g(()=>L.disconnect())});const l=t.computed(()=>D({height:i.height,width:i.width,horizontal:!1})),u=t.computed(()=>({minWidth:`${y.value}px`})),a=t.computed(()=>({position:i.stickyHeader?"sticky":"relative",top:i.stickyHeader?"0px":void 0,zIndex:1,display:"flex",width:`${y.value}px`})),f=t.computed(()=>({position:"relative",height:`${x.value}px`,width:`${y.value}px`}));function S(m){return{width:`${m.size}px`,minWidth:`${m.size}px`,flex:"0 0 auto",textAlign:m.align??"left"}}function C(m){return{position:"absolute",top:0,left:0,width:"100%",display:"flex",transform:`translateY(${m}px)`}}function O(m){return b=>{E(b,m)}}function $(m,b,g){return b.accessor?b.accessor(m,g):m&&typeof m=="object"&&b.id in m?m[b.id]:""}return n({scrollToIndex:v,scrollToOffset:p,measure:I}),(m,b)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.tag),{ref_key:"container",ref:r,"data-virtual-container":"",role:"table",style:t.normalizeStyle(l.value)},{default:t.withCtx(()=>[t.createElementVNode("div",{style:t.normalizeStyle(u.value)},[t.createElementVNode("div",{ref_key:"header",ref:s,role:"row",style:t.normalizeStyle(a.value)},[t.renderSlot(m.$slots,"header",{columns:t.unref(h)},()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(h),g=>(t.openBlock(),t.createElementBlock("div",{key:g.id,role:"columnheader",style:t.normalizeStyle(S(g))},t.toDisplayString(g.header),5))),128))])],4),e.rows.length?(t.openBlock(),t.createElementBlock("div",{key:1,"data-virtual-spacer":"",role:"rowgroup",style:t.normalizeStyle(f.value)},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(d),g=>(t.openBlock(),t.createElementBlock("div",t.mergeProps({key:g.key,ref_for:!0,ref:O(g.index),role:"row","data-index":g.index,"data-key":String(g.key),"aria-rowindex":g.index+1,style:C(g.start)},{ref_for:!0},e.rowAttrs),[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(h),R=>(t.openBlock(),t.createElementBlock("div",{key:R.id,role:"cell",style:t.normalizeStyle(S(R))},[t.renderSlot(m.$slots,"cell",{row:g.item,column:R,rowIndex:g.index,value:$(g.item,R,g.index)},()=>[t.createTextVNode(t.toDisplayString($(g.item,R,g.index)),1)])],4))),128))],16,Se))),128))],4)):t.renderSlot(m.$slots,"empty",{},void 0,void 0,0)],4)]),_:3},8,["style"]))}});exports.MeasurementCache=Z;exports.VirtualGrid=ve;exports.VirtualList=he;exports.VirtualTable=ze;exports.Virtualizer=ne;exports.clampScrollOffset=G;exports.normalizeSize=K;exports.resolveScrollOffset=te;exports.useVirtualGrid=re;exports.useVirtualList=H;exports.useVirtualTable=se;exports.useVirtualizer=A;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("vue");function j(e){return!Number.isFinite(e)||e<0?0:e}class ee{sizes=new Map;divergent=!1;get(n){return this.sizes.get(n)}set(n,i,r){this.sizes.set(n,i),r!==null&&Math.abs(i-r)>=.5&&(this.divergent=!0)}get hasDivergent(){return this.divergent}clear(){this.sizes.clear(),this.divergent=!1}trim(n,i){let r=!1;for(const s of this.sizes.keys())s>=n&&(this.sizes.delete(s),r=!0);if(r&&(this.divergent=!1,i!==null)){for(const s of this.sizes.values())if(Math.abs(s-i)>=.5){this.divergent=!0;return}}}}function te(e,n,i){return Math.min(i,Math.max(n,e))}const he=16777216;function $(e,n,i){const r=Math.max(0,n-Math.max(0,i));return te(Number.isFinite(e)?e:0,0,r)}function B(e,n){const i=Math.max(0,Number.isFinite(e)?e:0),r=Math.min(i,he);return n===void 0||!Number.isFinite(n)||n<=0?r:Math.min(r,n)}function ne(e,n,i,r){const s=Math.max(0,n-Math.max(0,r)),o=Math.max(0,i-Math.max(0,r));return s<=0?0:o<=0||o>=s?$(e,n,r):Math.max(0,e)/o*s}function ie(e,n,i,r){const s=Math.max(0,n-Math.max(0,r)),o=Math.max(0,i-Math.max(0,r));return o<=0?0:s<=0||o>=s?$(e,n,r):$(e,n,r)/s*o}function ge(e,n,i){if(e<=0)return 0;let r=0,s=e-1,o=e-1;for(;r<=s;){const u=r+s>>>1;i(u)>n?(o=u,s=u-1):r=u+1}return o}function ve(e,n,i){if(e<=0)return 0;let r=0,s=e-1,o=0;for(;r<=s;){const u=r+s>>>1;i(u)<n?(o=u,r=u+1):s=u-1}return o}function re(e){const n=e.start+e.size;let i=e.align;if(i==="auto"){const r=e.current+e.viewport;if(e.start>=e.current&&n<=r)return e.current;i=e.start<e.current?"start":"end"}return i==="center"?e.start-(e.viewport-e.size)/2:i==="end"?n-e.viewport:e.start}class se{count=0;estimateSize=()=>0;overscan=0;gap=0;paddingStart=0;paddingEnd=0;lanes=1;itemSize=null;viewportSize=0;scrollOffset=0;getItemKey=n=>n;measurements=new ee;built=0;offsets=[];laneCursor=[];laneEnd=[];setOptions(n){const i=Math.max(1,Math.floor(n.lanes??1)),r=n.gap??0,s=n.paddingStart??0,o=n.paddingEnd??0,u=Math.max(0,Math.floor(n.count)),x=n.itemSize===void 0||n.itemSize===null?null:j(n.itemSize),w=this.itemSize,V=i!==this.lanes||r!==this.gap||s!==this.paddingStart||o!==this.paddingEnd||n.estimateSize!==this.estimateSize||x!==this.itemSize;this.count=u,this.lanes=i,this.gap=r,this.paddingStart=s,this.paddingEnd=o,this.overscan=Math.max(0,Math.floor(n.overscan??0)),this.estimateSize=n.estimateSize,this.itemSize=x,this.getItemKey=n.getItemKey??(p=>p),n.viewportSize!==void 0&&(this.viewportSize=Math.max(0,n.viewportSize)),x!==w&&this.measurements.clear(),this.measurements.trim(this.count,this.itemSize),(V||this.built>this.count)&&this.resetGeometry()}setScrollOffset(n){this.scrollOffset=Number.isFinite(n)?n:0}getScrollOffset(){return this.scrollOffset}getViewportSize(){return this.viewportSize}measure(n,i){if(n<0||n>=this.count)return!1;const r=j(i),s=this.measurements.get(n);if(s!==void 0&&Math.abs(s-r)<.5)return!1;const o=this.getItemSize(n);return this.measurements.set(n,r,this.itemSize),Math.abs(o-r)<.5?!1:(this.resetGeometry(),!0)}clearMeasurements(){this.measurements.clear(),this.resetGeometry()}getItemSize(n){const i=this.measurements.get(n);return i!==void 0?i:this.itemSize!==null?this.itemSize:j(this.estimateSize(n))}getItemOffset(n){if(n<=0||this.count<=0)return this.paddingStart;const i=Math.min(n,this.count-1);if(this.usesFixedPath()){const r=Math.floor(i/this.lanes);return this.paddingStart+r*((this.itemSize??0)+this.gap)}return this.ensure(i),this.offsets[i]??this.paddingStart}getTotalSize(){if(this.count<=0)return this.paddingStart+this.paddingEnd;if(this.usesFixedPath()){let i=this.paddingStart;const r=this.itemSize??0;for(let s=0;s<this.lanes&&s<this.count;s+=1){const o=this.laneLength(s),u=this.paddingStart+o*r+Math.max(0,o-1)*this.gap;u>i&&(i=u)}return i+this.paddingEnd}this.ensure(this.count-1);let n=this.paddingStart;for(let i=0;i<this.lanes&&i<this.count;i+=1){const r=this.laneEnd[i]??this.paddingStart;r>n&&(n=r)}return n+this.paddingEnd}getVirtualItems(){if(this.count<=0||this.viewportSize<=0)return[];const n=$(this.scrollOffset,this.getTotalSize(),this.viewportSize),i=n+this.viewportSize,r=[];for(let s=0;s<this.lanes;s+=1){const o=this.laneLength(s);if(o<=0)continue;const u=ge(o,n,p=>{const b=this.ordinalIndex(s,p);return this.getItemOffset(b)+this.getItemSize(b)}),x=ve(o,i,p=>this.getItemOffset(this.ordinalIndex(s,p))),w=Math.max(0,Math.min(u,x)-this.overscan),V=Math.min(o-1,Math.max(u,x)+this.overscan);for(let p=w;p<=V;p+=1){const b=this.ordinalIndex(s,p),M=this.getItemOffset(b),I=this.getItemSize(b);r.push({index:b,key:this.getItemKey(b),start:M,size:I,end:M+I,lane:s})}}return r.sort((s,o)=>s.index-o.index),r}getOffsetForIndex(n,i="auto"){if(this.count<=0)return 0;const r=te(n,0,this.count-1),s=this.getItemOffset(r),o=this.getItemSize(r),u=re({start:s,size:o,viewport:this.viewportSize,current:this.scrollOffset,align:i});return $(u,this.getTotalSize(),this.viewportSize)}usesFixedPath(){return this.itemSize!==null&&!this.measurements.hasDivergent}ordinalIndex(n,i){return n+i*this.lanes}laneLength(n){return n<0||n>=this.lanes||n>=this.count?0:Math.floor((this.count-n-1)/this.lanes)+1}ensure(n){if(n<this.built)return;const i=Math.min(n,this.count-1);for(;this.built<=i;){const r=this.built%this.lanes,s=this.laneCursor[r]??this.paddingStart;this.offsets[this.built]=s;const o=s+this.getItemSize(this.built);this.laneEnd[r]=o,this.laneCursor[r]=o+this.gap,this.built+=1}}resetGeometry(){this.built=0,this.offsets=[],this.laneCursor=Array.from({length:this.lanes},()=>this.paddingStart),this.laneEnd=Array.from({length:this.lanes},()=>this.paddingStart)}}function G(){return typeof window<"u"&&typeof document<"u"}function oe(e){return typeof Element>"u"?null:e instanceof Element?e:null}function Se(e,n,i,r){if(r==="smooth"&&typeof e.scrollTo=="function"){e.scrollTo({top:i?e.scrollTop:n,left:i?n:e.scrollLeft,behavior:r});return}i?e.scrollLeft=n:e.scrollTop=n}function U(e,n){return n?e.scrollLeft:e.scrollTop}function Z(e,n){return n?e.clientWidth:e.clientHeight}function ze(e,n){return n?e.scrollWidth:e.scrollHeight}function ye(e){return typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)}function pe(e){e&&(typeof cancelAnimationFrame=="function"?cancelAnimationFrame(e):clearTimeout(e))}function we(e,n){if(e.length!==n.length)return!1;for(let i=0;i<e.length;i+=1){const r=e[i],s=n[i];if(!r||!s||r.index!==s.index||r.start!==s.start||r.size!==s.size||r.end!==s.end||r.lane!==s.lane||r.key!==s.key)return!1}return!0}function N(e){const n=new se,i=t.shallowRef([]),r=t.ref(0),s=t.ref(0),o=t.ref(0),u=t.ref(!1),x=a=>e.estimateSize(a);let w=null,V=null,p=null,b=0,M=0,I=0,d=t.toValue(e.revision);const f=new Map,m=new Map,l=[];function z(){const a=t.toValue(e.container);return typeof HTMLElement>"u"?null:a instanceof HTMLElement?a:null}function h(){return t.toValue(e.horizontal)??!1}function R(){const a=t.toValue(e.initialRect);return a?h()?a.width:a.height:0}function K(a,c){return a?B(c,ze(a,h())):B(c)}function L(a,c,g){return ne(U(a,h()),c,K(a,c),g)}function v(a,c,g,k,O){Se(a,ie(c,g,K(a,g),k),h(),O)}function y(){const a=t.toValue(e.revision);Object.is(a,d)||(d=a,n.clearMeasurements());const c=z(),g=c?Z(c,h()):0,k=t.toValue(e.viewportInset)??0,O=Math.max(0,(g>0?g:R())-k),E=t.toValue(e.itemSize);n.setOptions({count:t.toValue(e.count),estimateSize:x,overscan:(t.toValue(e.overscan)??8)+I,gap:t.toValue(e.gap)??0,paddingStart:t.toValue(e.paddingStart)??0,paddingEnd:t.toValue(e.paddingEnd)??0,lanes:t.toValue(e.lanes)??1,itemSize:E??null,getItemKey:e.getItemKey,viewportSize:O});const C=n.getTotalSize(),D=Math.max(0,C-O);n.getScrollOffset()>D&&(n.setScrollOffset(D),c&&v(c,D,C,O,"auto"));const Y=n.getVirtualItems();we(i.value,Y)||(i.value=Y),r.value!==C&&(r.value=C);const H=n.getScrollOffset();s.value!==H&&(s.value=H);const q=c?H-U(c,h()):0;o.value!==q&&(o.value=q)}function S(){u.value=!1,I=0;for(const[a,c]of f)l.push({element:a,index:c});_(),y()}function T(){u.value=!0,!(typeof window>"u")&&(window.clearTimeout(M),M=window.setTimeout(S,120))}function F(){const a=z();if(!a)return;T();const c=n.getViewportSize(),g=n.getTotalSize(),k=L(a,g,c),O=n.getScrollOffset(),E=Math.max(1,t.toValue(e.itemSize)??48);I=Math.min(24,Math.ceil(Math.abs(k-O)/E)),n.setScrollOffset(k),y()}function ue(){const a=z();if(a===w||(w&&(w.removeEventListener("scroll",F),V?.disconnect(),V=null),w=a,!a||!G()))return;const c=n.getViewportSize(),g=n.getTotalSize();n.getScrollOffset()>0?v(a,n.getScrollOffset(),g,c,"auto"):n.setScrollOffset(L(a,g,c)),a.addEventListener("scroll",F,{passive:!0}),typeof ResizeObserver<"u"&&(V=new ResizeObserver(()=>y()),V.observe(a))}function ce(){return!G()||typeof ResizeObserver>"u"?null:(p||(p=new ResizeObserver(a=>{const c=h();let g=!1;if(!u.value){for(const k of a){const O=f.get(k.target);if(O===void 0)continue;const E=k.borderBoxSize?.[0],C=Math.round(c?E?.inlineSize??k.contentRect.width:E?.blockSize??k.contentRect.height);C>0&&n.measure(O,C)&&(g=!0)}g&&y()}})),p)}function _(){if(b=0,u.value)return;const a=l.splice(0,l.length),c=h();let g=!1;for(const k of a){if(!k.element.isConnected)continue;const O=k.element.getBoundingClientRect(),E=Math.round(c?O.width:O.height);E>0&&n.measure(k.index,E)&&(g=!0)}g&&y()}function de(a,c){const g=oe(a),k=ce(),O=m.get(c);O&&O!==g&&(k?.unobserve(O),f.delete(O),m.delete(c)),g&&(m.set(c,g),f.set(g,c),k?.observe(g),l.push({element:g,index:c}),!(u.value||b)&&(b=ye(_)))}function X(a,c="auto"){const g=z(),k=g?Z(g,h()):0,O=k>0?k:n.getViewportSize(),E=n.getTotalSize(),C=$(a,E,O);n.setScrollOffset(C),g&&v(g,C,E,O,c),y()}function fe(a,c){const g=n.getOffsetForIndex(a,c?.align??"auto");X(g,c?.behavior??"auto")}function me(a,c){n.measure(a,c)&&y()}return y(),t.watch(()=>[t.toValue(e.count),t.toValue(e.overscan),t.toValue(e.gap),t.toValue(e.paddingStart),t.toValue(e.paddingEnd),t.toValue(e.lanes),t.toValue(e.horizontal),t.toValue(e.itemSize),t.toValue(e.viewportInset),t.toValue(e.revision),t.toValue(e.container),t.toValue(e.initialRect)?.width,t.toValue(e.initialRect)?.height],()=>{ue(),y()},{flush:"post"}),t.onBeforeUnmount(()=>{w&&w.removeEventListener("scroll",F),V?.disconnect(),p?.disconnect(),pe(b),typeof window<"u"&&window.clearTimeout(M),f.clear(),m.clear(),l.length=0}),{virtualItems:t.computed(()=>i.value),totalSize:t.computed(()=>r.value),scrollOffset:t.computed(()=>s.value),scrollAdjust:t.computed(()=>o.value),isScrolling:t.computed(()=>u.value),scrollToIndex:fe,scrollToOffset:X,measure:me,measureElement:de}}function xe(e,n,i){return typeof e=="function"?e(n,i):typeof e=="number"?e:48}function P(e){const n=N({count:()=>t.toValue(e.items).length,estimateSize:r=>{const s=t.toValue(e.items);return xe(e.estimateSize,r,s[r])},getItemKey:r=>{const o=t.toValue(e.items)[r];return e.getItemKey?.(o,r)??r},itemSize:()=>e.itemSize!==void 0?t.toValue(e.itemSize):typeof e.estimateSize=="number"?e.estimateSize:void 0,container:e.container,horizontal:e.horizontal,overscan:e.overscan,gap:e.gap,paddingStart:e.paddingStart,paddingEnd:e.paddingEnd,initialRect:e.initialRect,viewportInset:e.viewportInset,revision:e.revision});return{virtualItems:t.computed(()=>{const r=t.toValue(e.items);return n.virtualItems.value.map(s=>{const o=r[s.index];return{...s,item:o,key:e.getItemKey?.(o,s.index)??s.key}})}),totalSize:n.totalSize,scrollOffset:n.scrollOffset,scrollAdjust:n.scrollAdjust,isScrolling:n.isScrolling,scrollToIndex:n.scrollToIndex,scrollToOffset:n.scrollToOffset,measure:n.measure,measureElement:n.measureElement}}function J(e,n,i){return typeof e=="function"?e(n):typeof e=="number"?e:i}function ae(e){const n=t.computed(()=>Math.max(1,Math.floor(t.toValue(e.columnCount)||1))),i=t.computed(()=>Math.ceil(t.toValue(e.items).length/n.value)),r=new Map,s=N({count:()=>i.value,estimateSize:d=>J(t.toValue(e.estimateRowSize),d,48),itemSize:()=>{const d=t.toValue(e.estimateRowSize);return typeof d=="number"?d:void 0},overscan:()=>t.toValue(e.overscanRows)??t.toValue(e.overscan)??2,gap:()=>t.toValue(e.rowGap)??0,horizontal:!1,container:e.container,initialRect:e.initialRect,revision:e.revision}),o=N({count:()=>n.value,estimateSize:d=>J(t.toValue(e.estimateColumnSize),d,160),itemSize:()=>{const d=t.toValue(e.estimateColumnSize);return typeof d=="number"?d:void 0},overscan:()=>t.toValue(e.overscanColumns)??t.toValue(e.overscan)??1,gap:()=>t.toValue(e.columnGap)??0,horizontal:!0,container:e.container,initialRect:e.initialRect,revision:e.revision}),u=t.computed(()=>{const d=t.toValue(e.items),f=n.value,m=[];for(const l of s.virtualItems.value)for(const z of o.virtualItems.value){const h=l.index*f+z.index;if(h>=d.length)continue;const R=d[h];m.push({index:h,key:e.getItemKey?.(R,h)??h,item:R,row:l,column:z})}return m});function x(d,f){const m=t.toValue(e.items);if(!m.length)return;const l=Math.min(Math.max(d,0),m.length-1),z=n.value;s.scrollToIndex(Math.floor(l/z),f),o.scrollToIndex(l%z,f)}function w(d,f="auto"){d.top!==void 0&&s.scrollToOffset(d.top,f),d.left!==void 0&&o.scrollToOffset(d.left,f)}function V(d,f){const m=Math.max(r.get(d)??0,f);m<=0||m===r.get(d)||(r.set(d,m),s.measure(d,m))}let p=null;const b=new Map;function M(){return!G()||typeof ResizeObserver>"u"?null:(p||(p=new ResizeObserver(d=>{for(const f of d){const m=b.get(f.target);if(m===void 0)continue;const z=f.borderBoxSize?.[0]?.blockSize??f.contentRect.height;z>0&&V(m,z)}})),p)}function I(d,f){const m=oe(d),l=M();if(!m)return;b.set(m,f),l?.observe(m);const z=m.getBoundingClientRect().height;z>0&&V(f,z)}return t.onBeforeUnmount(()=>{p?.disconnect(),b.clear()}),{virtualRows:s.virtualItems,virtualColumns:o.virtualItems,virtualCells:u,totalHeight:s.totalSize,totalWidth:o.totalSize,scrollAdjustX:o.scrollAdjust,scrollAdjustY:s.scrollAdjust,scrollToIndex:x,scrollToOffset:w,measureRow:V,measureRowElement:I,measureColumn:o.measure}}function le(e){const n=P({items:e.rows,estimateSize:e.estimateRowSize,container:e.container,overscan:e.overscan,getItemKey:e.getRowKey,initialRect:e.initialRect,viewportInset:e.viewportInset,revision:e.revision,itemSize:e.itemSize}),i=t.computed(()=>{const o=t.toValue(e.columns);let u=0;return o.map(x=>{const w=x.width??x.minWidth??160,V={...x,start:u,size:w,end:u+w};return u+=w,V})}),r=t.computed(()=>{const o=i.value;return o.length?o[o.length-1]?.end??0:0});return{virtualRows:t.computed(()=>n.virtualItems.value),columns:i,totalHeight:n.totalSize,totalWidth:r,scrollOffset:n.scrollOffset,scrollAdjust:n.scrollAdjust,isScrolling:n.isScrolling,scrollToIndex:n.scrollToIndex,scrollToOffset:n.scrollToOffset,measure:n.measure,measureElement:n.measureElement}}function Q(e){if(typeof e=="number"&&Number.isFinite(e))return`${e}px`;if(typeof e=="string"&&e.trim())return e}function A(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e!="string")return 0;const n=/^(-?\d+(?:\.\d+)?)px$/.exec(e.trim());if(!n?.[1])return 0;const i=Number(n[1]);return Number.isFinite(i)?i:0}function W(e){return{overflow:"auto",position:"relative",height:Q(e.height)??(e.horizontal?"100%":void 0),width:Q(e.width)??(e.horizontal?void 0:"100%"),overflowAnchor:"none"}}function be(e,n){const i=B(e);return{position:"relative",width:n?`${i}px`:"100%",height:n?"100%":`${i}px`}}function Ve(e,n,i){return{position:"absolute",top:0,left:0,width:n?i===void 0?void 0:`${i}px`:"100%",height:n?"100%":i===void 0?void 0:`${i}px`,transform:n?`translateX(${e}px)`:`translateY(${e}px)`,contain:"layout style",boxSizing:"border-box",overflow:"hidden"}}const ke=t.defineComponent({__name:"VirtualList",props:{items:{},estimateSize:{type:[Number,Function],default:48},height:{},width:{},horizontal:{type:Boolean,default:!1},overscan:{default:8},gap:{default:0},paddingStart:{default:0},paddingEnd:{default:0},getItemKey:{},tag:{default:"div"},itemTag:{default:"div"},itemAttrs:{},revision:{}},setup(e,{expose:n}){const i=e,r=t.ref(null),{virtualItems:s,totalSize:o,scrollAdjust:u,scrollToIndex:x,scrollToOffset:w,measure:V,measureElement:p}=P({items:()=>i.items,estimateSize:(f,m)=>{const l=i.estimateSize;return typeof l=="number"?l:l(f,m)},itemSize:()=>typeof i.estimateSize=="number"?i.estimateSize:void 0,container:r,horizontal:()=>i.horizontal,overscan:()=>i.overscan,gap:()=>i.gap,paddingStart:()=>i.paddingStart,paddingEnd:()=>i.paddingEnd,getItemKey:(f,m)=>i.getItemKey?.(f,m)??m,initialRect:()=>({width:A(i.width),height:A(i.height)}),revision:()=>i.revision}),b=t.computed(()=>W({height:i.height,width:i.width,horizontal:i.horizontal})),M=t.computed(()=>be(o.value,i.horizontal));function I(f,m){return Ve(f,i.horizontal,m)}function d(f){return m=>{p(m,f)}}return n({scrollToIndex:x,scrollToOffset:w,measure:V}),(f,m)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.tag),{ref_key:"container",ref:r,"data-virtual-container":"",role:"list",style:t.normalizeStyle(b.value)},{default:t.withCtx(()=>[e.items.length?(t.openBlock(),t.createElementBlock("div",{key:1,"data-virtual-spacer":"",style:t.normalizeStyle(M.value)},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(s),l=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.itemTag),t.mergeProps({key:l.key,ref_for:!0,ref:d(l.index),role:"listitem","data-index":l.index,"data-key":String(l.key),"aria-setsize":e.items.length,"aria-posinset":l.index+1,style:I(l.start-t.unref(u),l.size)},{ref_for:!0},e.itemAttrs),{default:t.withCtx(()=>[t.renderSlot(f.$slots,"default",{item:l.item,index:l.index,start:l.start,size:l.size,end:l.end})]),_:2},1040,["data-index","data-key","aria-setsize","aria-posinset","style"]))),128))],4)):t.renderSlot(f.$slots,"empty",{},void 0,void 0,0)]),_:3},8,["style"]))}}),Oe=["data-index","data-key"],Me=t.defineComponent({__name:"VirtualGrid",props:{items:{},columnCount:{default:1},estimateRowSize:{type:[Number,Function],default:48},estimateColumnSize:{type:[Number,Function],default:160},height:{},width:{},overscan:{default:2},overscanRows:{},overscanColumns:{},rowGap:{default:0},columnGap:{default:0},getItemKey:{},tag:{default:"div"},itemAttrs:{},revision:{}},setup(e,{expose:n}){const i=e,r=t.ref(null),{virtualCells:s,totalWidth:o,totalHeight:u,scrollAdjustX:x,scrollAdjustY:w,scrollToIndex:V,scrollToOffset:p,measureRow:b,measureRowElement:M}=ae({items:()=>i.items,columnCount:()=>i.columnCount,estimateRowSize:()=>i.estimateRowSize,estimateColumnSize:()=>i.estimateColumnSize,container:r,overscan:()=>i.overscan,overscanRows:()=>i.overscanRows,overscanColumns:()=>i.overscanColumns,rowGap:()=>i.rowGap,columnGap:()=>i.columnGap,getItemKey:(l,z)=>i.getItemKey?.(l,z)??z,initialRect:()=>({width:A(i.width),height:A(i.height)}),revision:()=>i.revision}),I=t.computed(()=>W({height:i.height,width:i.width,horizontal:!1})),d=t.computed(()=>({position:"relative",width:`${B(o.value)}px`,height:`${B(u.value)}px`}));function f(l){return z=>{M(z,l)}}function m(l,z,h,R){return{position:"absolute",top:0,left:0,width:`${z}px`,height:`${R}px`,transform:`translate(${l}px, ${h}px)`,contain:"layout style",boxSizing:"border-box",overflow:"hidden"}}return n({scrollToIndex:V,scrollToOffset:p,measureRow:b}),(l,z)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.tag),{ref_key:"container",ref:r,"data-virtual-container":"",role:"grid",style:t.normalizeStyle(I.value)},{default:t.withCtx(()=>[e.items.length?(t.openBlock(),t.createElementBlock("div",{key:1,"data-virtual-spacer":"",style:t.normalizeStyle(d.value)},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(s),h=>(t.openBlock(),t.createElementBlock("div",t.mergeProps({key:h.key,ref_for:!0,ref:f(h.row.index),role:"gridcell","data-index":h.index,"data-key":String(h.key),style:m(h.column.start-t.unref(x),h.column.size,h.row.start-t.unref(w),h.row.size)},{ref_for:!0},e.itemAttrs),[t.renderSlot(l.$slots,"default",{item:h.item,index:h.index,rowIndex:h.row.index,columnIndex:h.column.index,row:h.row,column:h.column})],16,Oe))),128))],4)):t.renderSlot(l.$slots,"empty",{},void 0,void 0,0)]),_:3},8,["style"]))}}),Ie=["data-index","data-key","aria-rowindex"],Ee=t.defineComponent({__name:"VirtualTable",props:{rows:{},columns:{},estimateRowSize:{type:[Number,Function],default:44},height:{},width:{},overscan:{default:8},getRowKey:{},stickyHeader:{type:Boolean,default:!0},tag:{default:"div"},rowAttrs:{},revision:{}},setup(e,{expose:n}){const i=e,r=t.ref(null),s=t.ref(null),o=t.ref(0),{virtualRows:u,columns:x,totalWidth:w,totalHeight:V,scrollAdjust:p,scrollToIndex:b,scrollToOffset:M,measure:I,measureElement:d}=le({rows:()=>i.rows,columns:()=>i.columns,estimateRowSize:(v,y)=>{const S=i.estimateRowSize;return typeof S=="number"?S:S(v,y)},container:r,overscan:()=>i.overscan,getRowKey:(v,y)=>i.getRowKey?.(v,y)??y,initialRect:()=>({width:A(i.width),height:A(i.height)}),viewportInset:o,revision:()=>i.revision,itemSize:()=>typeof i.estimateRowSize=="number"?i.estimateRowSize:void 0});t.watch(s,(v,y,S)=>{if(y===v&&!v||!v||!G()||typeof ResizeObserver>"u")return;const T=()=>{o.value=v.getBoundingClientRect().height},F=new ResizeObserver(T);F.observe(v),T(),S(()=>F.disconnect())});const f=t.computed(()=>W({height:i.height,width:i.width,horizontal:!1})),m=t.computed(()=>({minWidth:`${w.value}px`})),l=t.computed(()=>({position:i.stickyHeader?"sticky":"relative",top:i.stickyHeader?"0px":void 0,zIndex:1,display:"flex",width:`${w.value}px`})),z=t.computed(()=>({position:"relative",height:`${B(V.value)}px`,width:`${B(w.value)}px`}));function h(v){return{width:`${v.size}px`,minWidth:`${v.size}px`,flex:"0 0 auto",textAlign:v.align??"left"}}function R(v,y){return{position:"absolute",top:0,left:0,width:"100%",height:`${y}px`,display:"flex",transform:`translateY(${v}px)`,contain:"layout style",boxSizing:"border-box",overflow:"hidden"}}function K(v){return y=>{d(y,v)}}function L(v,y,S){return y.accessor?y.accessor(v,S):v&&typeof v=="object"&&y.id in v?v[y.id]:""}return n({scrollToIndex:b,scrollToOffset:M,measure:I}),(v,y)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.tag),{ref_key:"container",ref:r,"data-virtual-container":"",role:"table",style:t.normalizeStyle(f.value)},{default:t.withCtx(()=>[t.createElementVNode("div",{style:t.normalizeStyle(m.value)},[t.createElementVNode("div",{ref_key:"header",ref:s,role:"row",style:t.normalizeStyle(l.value)},[t.renderSlot(v.$slots,"header",{columns:t.unref(x)},()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(x),S=>(t.openBlock(),t.createElementBlock("div",{key:S.id,role:"columnheader",style:t.normalizeStyle(h(S))},t.toDisplayString(S.header),5))),128))])],4),e.rows.length?(t.openBlock(),t.createElementBlock("div",{key:1,"data-virtual-spacer":"",role:"rowgroup",style:t.normalizeStyle(z.value)},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(u),S=>(t.openBlock(),t.createElementBlock("div",t.mergeProps({key:S.key,ref_for:!0,ref:K(S.index),role:"row","data-index":S.index,"data-key":String(S.key),"aria-rowindex":S.index+1,style:R(S.start-t.unref(p),S.size)},{ref_for:!0},e.rowAttrs),[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(x),T=>(t.openBlock(),t.createElementBlock("div",{key:T.id,role:"cell",style:t.normalizeStyle(h(T))},[t.renderSlot(v.$slots,"cell",{row:S.item,column:T,rowIndex:S.index,value:L(S.item,T,S.index)},()=>[t.createTextVNode(t.toDisplayString(L(S.item,T,S.index)),1)])],4))),128))],16,Ie))),128))],4)):t.renderSlot(v.$slots,"empty",{},void 0,void 0,0)],4)]),_:3},8,["style"]))}});exports.MeasurementCache=ee;exports.VirtualGrid=Me;exports.VirtualList=ke;exports.VirtualTable=Ee;exports.Virtualizer=se;exports.clampScrollOffset=$;exports.mapDomOffsetToVirtual=ne;exports.mapVirtualOffsetToDom=ie;exports.normalizeSize=j;exports.resolveScrollOffset=re;exports.scrollContentSize=B;exports.useVirtualGrid=ae;exports.useVirtualList=P;exports.useVirtualTable=le;exports.useVirtualizer=N;
2
2
  //# sourceMappingURL=index.js.map