virtua 0.17.0 → 0.17.2

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.
@@ -1,18 +1 @@
1
- import type { DeepReadonly, Writeable } from "./types";
2
- export declare const UNCACHED = -1;
3
- export type Cache = DeepReadonly<{
4
- _defaultItemSize: number;
5
- _length: number;
6
- _sizes: number[];
7
- _computedOffsetIndex: number;
8
- _offsets: number[];
9
- }>;
10
- export declare const getItemSize: (cache: Cache, index: number) => number;
11
- export declare const setItemSize: (cache: Writeable<Cache>, index: number, size: number) => boolean;
12
- export declare const computeOffset: (cache: Writeable<Cache>, index: number) => number;
13
- export declare const computeTotalSize: (cache: Writeable<Cache>) => number;
14
- export declare const findIndex: (cache: Writeable<Cache>, offset: number, i: number) => number;
15
- export declare const computeRange: (cache: Writeable<Cache>, scrollOffset: number, prevStartIndex: number, viewportSize: number) => [number, number];
16
- export declare const estimateDefaultItemSize: (cache: Writeable<Cache>) => void;
17
- export declare const initCache: (length: number, itemSize: number) => Cache;
18
- export declare const updateCacheLength: (cache: Writeable<Cache>, length: number, isShift?: boolean) => [number, boolean];
1
+ export {};
@@ -1,5 +1 @@
1
- export declare const isBrowser: boolean;
2
- export declare const hasNegativeOffsetInRTL: (scrollable: HTMLElement) => boolean;
3
- export declare const isRTLDocument: () => boolean;
4
- export declare const isIOSWebKit: () => boolean;
5
- export declare const isSmoothScrollSupported: () => boolean;
1
+ export {};
@@ -1,12 +1 @@
1
- import { VirtualStore } from "./store";
2
- export interface ListResizer {
3
- _observeRoot(root: HTMLElement): () => void;
4
- _observeItem(el: HTMLElement, i: number): () => void;
5
- }
6
- export declare const createResizer: (store: VirtualStore, isHorizontal: boolean) => ListResizer;
7
- export declare const createWindowResizer: (store: VirtualStore, isHorizontal: boolean) => ListResizer;
8
- export declare const createGridResizer: (vStore: VirtualStore, hStore: VirtualStore) => {
9
- _observeRoot(root: HTMLElement): () => void;
10
- _observeItem(el: HTMLElement, rowIndex: number, colIndex: number): () => void;
11
- };
12
- export type GridResizer = ReturnType<typeof createGridResizer>;
1
+ export {};
@@ -1,15 +1 @@
1
- import { ScrollJump, VirtualStore } from "./store";
2
- import { ScrollToIndexOpts } from "./types";
3
- export type Scroller = {
4
- _observe: (rootElement: HTMLElement) => () => void;
5
- _scrollTo: (offset: number) => void;
6
- _scrollBy: (offset: number) => void;
7
- _scrollToIndex: (index: number, opts?: ScrollToIndexOpts) => void;
8
- _fixScrollJump: (jump: ScrollJump) => void;
9
- };
10
- export declare const createScroller: (store: VirtualStore, isHorizontal: boolean) => Scroller;
11
- export type WindowScroller = {
12
- _observe: (rootElement: HTMLElement) => () => void;
13
- _fixScrollJump: (jump: ScrollJump) => void;
14
- };
15
- export declare const createWindowScroller: (store: VirtualStore, isHorizontal: boolean) => WindowScroller;
1
+ export {};
@@ -1,47 +1 @@
1
- import { Cache } from "./cache";
2
- import type { CacheSnapshot } from "./types";
3
- export type ScrollJump = number;
4
- type ViewportResize = [size: number, paddingStart: number, paddingEnd: number];
5
- export type ItemResize = Readonly<[index: number, size: number]>;
6
- type ItemsRange = Readonly<[startIndex: number, endIndex: number]>;
7
- export declare const SCROLL_IDLE = 0;
8
- export declare const SCROLL_DOWN = 1;
9
- export declare const SCROLL_UP = 2;
10
- export type ScrollDirection = typeof SCROLL_IDLE | typeof SCROLL_DOWN | typeof SCROLL_UP;
11
- export declare const ACTION_ITEM_RESIZE = 1;
12
- export declare const ACTION_VIEWPORT_RESIZE = 2;
13
- export declare const ACTION_ITEMS_LENGTH_CHANGE = 3;
14
- export declare const ACTION_SCROLL = 4;
15
- export declare const ACTION_SCROLL_END = 5;
16
- export declare const ACTION_MANUAL_SCROLL = 6;
17
- export declare const ACTION_BEFORE_MANUAL_SMOOTH_SCROLL = 7;
18
- type Actions = [type: typeof ACTION_ITEM_RESIZE, entries: ItemResize[]] | [type: typeof ACTION_VIEWPORT_RESIZE, size: ViewportResize] | [
19
- type: typeof ACTION_ITEMS_LENGTH_CHANGE,
20
- arg: [length: number, isShift?: boolean | undefined]
21
- ] | [type: typeof ACTION_SCROLL, offset: number] | [type: typeof ACTION_SCROLL_END, dummy?: void] | [type: typeof ACTION_MANUAL_SCROLL, dummy?: void] | [type: typeof ACTION_BEFORE_MANUAL_SMOOTH_SCROLL, offset: number];
22
- type Subscriber = (sync?: boolean) => void;
23
- export declare const UPDATE_SCROLL_STATE = 1;
24
- export declare const UPDATE_SIZE_STATE = 2;
25
- export declare const UPDATE_SCROLL_WITH_EVENT = 4;
26
- export type VirtualStore = {
27
- _getCache(): CacheSnapshot;
28
- _getRange(): ItemsRange;
29
- _isUnmeasuredItem(index: number): boolean;
30
- _hasUnmeasuredItemsInSmoothScrollRange(): boolean;
31
- _getItemOffset(index: number): number;
32
- _getItemSize(index: number): number;
33
- _getItemsLength(): number;
34
- _getScrollOffset(): number;
35
- _getScrollOffsetMax(): number;
36
- _getScrollDirection(): ScrollDirection;
37
- _getViewportSize(): number;
38
- _getViewportPaddingStart(): number;
39
- _getTotalSize(): number;
40
- _getScrollSize(): number;
41
- _getJumpCount(): number;
42
- _flushJump(): ScrollJump;
43
- _subscribe(target: number, cb: Subscriber): () => void;
44
- _update(...action: Actions): void;
45
- };
46
- export declare const createVirtualStore: (elementsCount: number, itemSize?: number, initialItemCount?: number, cache?: Cache, isReverse?: boolean, shouldAutoEstimateItemSize?: boolean) => VirtualStore;
47
1
  export {};
@@ -1,9 +1,3 @@
1
- export type DeepReadonly<T> = {
2
- readonly [key in keyof T]: DeepReadonly<T[key]>;
3
- };
4
- export type Writeable<T> = {
5
- -readonly [key in keyof T]: Writeable<T[key]>;
6
- };
7
1
  declare const cacheSymbol: unique symbol;
8
2
  /**
9
3
  * Serializable cache snapshot.
@@ -1,23 +1 @@
1
- export declare const min: (...values: number[]) => number;
2
- export declare const max: (...values: number[]) => number;
3
- export declare const abs: (x: number) => number;
4
- export declare const now: () => number;
5
- export declare const values: {
6
- <T>(o: {
7
- [s: string]: T;
8
- } | ArrayLike<T>): T[];
9
- (o: {}): any[];
10
- };
11
- export declare const isArray: (arg: any) => arg is any[];
12
- export declare const timeout: typeof setTimeout;
13
- export declare const clamp: (value: number, minValue: number, maxValue: number) => number;
14
- export declare const exists: <T>(v: T) => v is Exclude<T, null | undefined>;
15
- export declare const median: (arr: number[]) => number;
16
- export declare const debounce: <T extends (...args: any[]) => void>(fn: T, ms: number) => {
17
- (): void;
18
- _cancel: () => void;
19
- };
20
- export declare const throttle: <T extends (...args: any[]) => void>(fn: T, ms: number) => (...args: Parameters<T>) => void;
21
- export declare const once: <F extends (...args: any[]) => any>(fn: F) => F;
22
- export declare const computeStyle: (e: HTMLElement) => CSSStyleDeclaration;
23
- export declare const getStyleNumber: (v: string) => number;
1
+ export {};
package/lib/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- var e=require("react/jsx-runtime"),t=require("react"),n=require("react-dom");const o=Math.min,r=Math.max,i=Math.abs,s=Date.now,l=Object.values,c=Array.isArray,u=setTimeout,a=(e,t,n)=>o(n,r(t,e)),h=e=>null!=e,d=(e,t)=>{let n;const o=()=>{h(n)&&clearTimeout(n)},r=()=>{o(),n=u((()=>{n=null,e()}),t)};return r.t=o,r},f=e=>{let t,n;return(...o)=>(t||(t=!0,n=e(...o)),n)},_=e=>getComputedStyle(e),w=e=>e?parseFloat(e):0,g=-1,p=(e,t)=>{const n=e.o[t];return n===g?e.i:n},v=(e,t)=>{if(!e.l)return 0;if(e.u>=t)return e.h[t];let n=e.u,o=e.h[n];for(;n<t;)o+=p(e,n),e.h[++n]=o;return e.u=t,o},m=(e,t,n)=>{let o=v(e,n);for(;n>=0&&n<e.l;)if(o<=t){const r=p(e,n);if(o+r>t)break;o+=r,n++}else o-=p(e,--n);return a(n,0,e.l-1)},b=(e,t,n,r)=>{const i=m(e,t,o(n,e.l-1));return[i,m(e,t+r,i)]},S=(e,t,n)=>{const o=n?"unshift":"push";for(let n=e.l;n<t;n++)e.o[o](g),e.h.push(0===n?0:g);e.l=t},y=(e,t,n)=>{const o=t-e.l,r=o<0;let i;return r?(i=(n?e.o.splice(0,-o):e.o.splice(o)).reduce(((t,n)=>t+(n===g?e.i:n)),0),e.h.splice(o)):(i=e.i*o,S(e,e.l+o,n)),e.u=n?0:a(t-1,0,e.u),e.l=t,[i,r]},z="undefined"!=typeof window,I=()=>document.documentElement,x=/*#__PURE__*/f((e=>{const t="scrollLeft",n=e[t];e[t]=1;const o=e[t]<1;return e[t]=n,o})),R=/*#__PURE__*/f((()=>!!z&&"rtl"===_(I()).direction)),k=/*#__PURE__*/f((()=>/iP(hone|od|ad)/.test(navigator.userAgent))),O=/*#__PURE__*/f((()=>"scrollBehavior"in I().style)),C=(e,t,n)=>t.reduce(((t,[o,r])=>{const i=r-p(e,o);return(!n||i>0)&&(t+=i),t}),0),T=(e,t=40,n=0,s=((e,t)=>{const n={i:t,l:0,u:0,o:[],h:[]};return S(n,e),n})(e,t),l,c)=>{let u=t*r(n-1,0),h=0,d=0,f=0,_=0,w=0,m=0,z=0,I=!1,x=null,R=!1,O=[0,n];const T=new Set,M=()=>(e=>e.l?v(e,e.l-1)+p(e,e.l-1):0)(s),H=()=>M()-u+h+d,J=e=>{k()&&0!==z?m+=e:(w+=e,_++)},W=e=>{const t=z;return z=e,z!==t};return{_:()=>JSON.parse(JSON.stringify(s)),g:()=>x?[o(O[0],x[0]),r(O[1],x[1])]:O=b(s,f+m+w,O[0],u),p:e=>s.o[e]===g,v:()=>!!x&&s.o.slice(r(0,x[0]-1),o(s.l-1,x[1]+1)+1).includes(g),m(e){const t=v(s,e)-m;return l?t+r(0,u-M()):t},S:e=>p(s,e),I:()=>s.l,R:()=>f,k:H,O:()=>z,C:()=>u,T:()=>h,M:()=>r(M(),u-h-d),H:M,J:()=>_,W(){const e=w;return w=0,e},B(e,t){const n=[e,t];return T.add(n),()=>{T.delete(n)}},L(e,t){let n,r,l=0;switch(e){case 1:{const e=t.filter((([e,t])=>s.o[e]!==t));if(!e.length)break;let n=0;if(0===f);else if(f>H()-1.5)n=C(s,e,!0);else{const[t]=O;n=C(s,e.filter((([e])=>e<t)))}n&&J(n);let i=!1;e.forEach((([e,t])=>{((e,t,n)=>{const r=e.o[t]===g;return e.o[t]=n,e.u=o(t,e.u),r})(s,e,t)&&(i=!0)})),c&&i&&!f&&(e=>{const t=e.o.filter((e=>e!==g)),n=t[0];e.i=t.every((e=>e===n))?n:(e=>{const t=[...e].sort(((e,t)=>e-t)),n=e.length/2|0;return t.length%2==0?(t[n-1]+t[n])/2:t[n]})(t)})(s),l=2,R=r=!0;break}case 2:{const e=t[0]+t[1]+t[2];u!==e&&(u=e,h=t[1],d=t[2],l=2);break}case 3:if(t[1]){const e=H()-f,[n,r]=y(s,t[0],!0);J(r?-o(n,e):n),l=1}else y(s,t[0]);break;case 4:{if(t===f)break;const e=t-f,n=R;R=!1,0!==z&&n||I||W(e<0?2:1),r=i(e)>u,f=a(t,0,H()),l=5;break}case 5:W(0)&&(n=!0,l=1),I=!1,x=null;break;case 6:I=!0;break;case 7:x=b(s,t,O[0],u),l=1}l&&(n&&m&&(R=!0,w+=m,m=0,_++),T.forEach((([e,t])=>{l&e&&t(r)})))}}},M=z?t.useLayoutEffect:t.useEffect,H=(e,t,n)=>(()=>{let o=s()-50;return(...r)=>{const i=s();o+50<i&&(o=i,(o=>{if(0!==e.O()&&!o.ctrlKey&&(t?o.deltaX:o.deltaY)){const t=e.R();t>0&&t<e.k()&&n()}})(...r))}})(),J=(e,t,n,o)=>x(e)||o?-n:t.k()-n,W=(e,t)=>{let n,o,r=!1;const i=t?"scrollLeft":"scrollTop",s=t?"overflowX":"overflowY",l=(o,r)=>t&&R()?J(n,e,o,r):o,c=async(r,s)=>{if(!n)return;o&&o();const c=()=>a(r(),0,e.k()),h=()=>{let t;return[new Promise(((e,n)=>{t=e,u(o=n,150)})),e.B(2,(()=>{t&&t()}))]};if(s&&O()){for(;e.L(7,c()),e.v();){const[e,t]=h();try{await e}catch(e){return}finally{t()}}n.scrollTo({[t?"left":"top"]:l(c()),behavior:"smooth"})}else for(;;){const[t,o]=h();try{n[i]=l(c()),e.L(6),await t}catch(e){return}finally{o()}}};return{$(o){n=o;let s=!1,c=!1;const u=d((()=>{s?u():(c=!1,e.L(5))}),150),a=()=>{c&&(r=!0),e.L(4,l(o[i])),u()},h=H(e,t,u),f=()=>{s=!0,c=r=!1},_=()=>{s=!1,k()&&(c=!0)};return o.addEventListener("scroll",a),o.addEventListener("wheel",h,{passive:!0}),o.addEventListener("touchstart",f,{passive:!0}),o.addEventListener("touchend",_,{passive:!0}),()=>{o.removeEventListener("scroll",a),o.removeEventListener("wheel",h),o.removeEventListener("touchstart",f),o.removeEventListener("touchend",_),u.t()}},q(e){c((()=>e))},P(t){t+=e.R(),c((()=>t))},X(t,{align:n,smooth:o}={}){if(t=a(t,0,e.I()-1),"nearest"===n){const o=e.m(t),r=e.R();if(o<r)n="start";else{if(!(o+e.S(t)>r+e.C()))return;n="end"}}c((()=>"end"===n?e.T()+e.m(t)+e.S(t)-e.C():"center"===n?e.T()+e.m(t)+(e.S(t)-e.C())/2:e.T()+e.m(t)),o)},Y:e=>{if(n){if(r){r=!1;const e=n.style,t=e[s];e[s]="hidden",u((()=>{e[s]=t}))}n[i]+=l(e,!0)}}}},B=(e,t)=>{let n;const o=t?"scrollX":"scrollY",r=t?"offsetLeft":"offsetTop",i=(o,r)=>t&&R()?J(n,e,o,r):o;return{$(s){n=s;const l=(e,n)=>{const o=n+(t&&R()?window.innerWidth-e[r]-e.offsetWidth:e[r]),i=e.offsetParent;return e!==document.body&&i?l(i,o):o},c=d((()=>{e.L(5)}),150),u=()=>{e.L(4,i(window[o])-l(s,0)),c()},a=H(e,t,c);return window.addEventListener("scroll",u),window.addEventListener("wheel",a,{passive:!0}),()=>{window.removeEventListener("scroll",u),window.removeEventListener("wheel",a),c.t()}},Y:e=>{window.scrollBy(t?i(e,!0):0,t?0:e)}}},L="current",$={},q=(e,t)=>{if(c(e))for(const n of e)q(n,t);else h(e)&&"boolean"!=typeof e&&t.push(e)},P=(e,t,n)=>r(e-(1===n?1:r(1,t)),0),X=(e,t,n,i)=>o(e+(2===n?1:r(1,t)),i-1),Y=e=>{const n=t.useRef();return n[L]||(n[L]=e())},j=e=>{const n=t.useRef(e);return M((()=>{n[L]=e}),[e]),n},D={box:"border-box"},N=(e,t)=>{let n;const o=t?"width":"height",r=new WeakMap,i=f((()=>new ResizeObserver((i=>{const s=[];for(const{target:l,contentRect:c}of i)if(l.offsetParent)if(l===n)e.L(2,[c[o],c[t?"left":"top"],w(_(n)[t?"paddingRight":"paddingBottom"])]);else{const e=r.get(l);h(e)&&s.push([e,c[o]])}s.length&&e.L(1,s)}))));return{j(e){n=e;const t=i();return t.observe(e,D),()=>{t.disconnect()}},D(e,t){const n=i();return r.set(e,t),n.observe(e),()=>{r.delete(e),n.unobserve(e)}}}},U=(e,t)=>{const n=t?"width":"height",o=t?"innerWidth":"innerHeight",r=new WeakMap,i=f((()=>new ResizeObserver((t=>{const o=[];for(const{target:e,contentRect:i}of t){if(!e.offsetParent)continue;const t=r.get(e);h(t)&&o.push([t,i[n]])}o.length&&e.L(1,o)}))));return{j(){const t=()=>{e.L(2,[window[o],0,0])};return window.addEventListener("resize",t),t(),()=>{window.removeEventListener("resize",t),i().disconnect()}},D(e,t){const n=i();return r.set(e,t),n.observe(e),()=>{r.delete(e),n.unobserve(e)}}}},V=(e,t)=>{let n;const o="height",i="width",s=new WeakMap,l=new Set,c=new Set,u=new Map,a=(e,t)=>`${e}-${t}`,h=f((()=>new ResizeObserver((h=>{const d=new Set,f=new Set;for(const{target:r,contentRect:l}of h)if(r.offsetParent)if(r===n){const r=_(n);e.L(2,[l[o],l.top,w(r.paddingBottom)]),t.L(2,[l[i],l.left,w(r.paddingRight)])}else{const e=s.get(r);if(e){const[t,n]=e,r=a(t,n),s=u.get(r),c=[l[o],l[i]];let h,_;s?(s[0]!==c[0]&&(h=!0),s[1]!==c[1]&&(_=!0)):h=_=!0,h&&d.add(t),_&&f.add(n),(h||_)&&u.set(r,c)}}if(d.size){const t=[];d.forEach((e=>{let n=0;c.forEach((t=>{const o=u.get(a(e,t));o&&(n=r(n,o[0]))})),n&&t.push([e,n])})),e.L(1,t)}if(f.size){const e=[];f.forEach((t=>{let n=0;l.forEach((e=>{const o=u.get(a(e,t));o&&(n=r(n,o[1]))})),n&&e.push([t,n])})),t.L(1,e)}}))));return{j(e){n=e;const t=h();return t.observe(e,D),()=>{t.disconnect()}},D(e,t,n){const o=h();return s.set(e,[t,n]),l.add(t),c.add(n),o.observe(e),()=>{s.delete(e),o.unobserve(e)}}}},A=t.forwardRef((({children:n,attrs:o,width:r,height:i,scrolling:s},l)=>e.jsx("div",{ref:l,...o,children:e.jsx("div",{style:t.useMemo((()=>({position:"relative",visibility:"hidden",width:null!=r?r:"100%",height:null!=i?i:"100%",pointerEvents:s?"none":"auto"})),[r,i,s]),children:n})}))),E=t.memo((({N:n,U:o,V:r,A:i,F:s,G:l,K:c})=>{const u=t.useRef(null);M((()=>o.D(u[L],r)),[r]);const a=t.useMemo((()=>{const e={margin:0,padding:0,position:"absolute",[c?"height":"width"]:"100%",[c?"top":"left"]:0,[c?R()?"right":"left":"top"]:i,visibility:s?"hidden":"visible"};return c&&(e.display="flex"),e}),[i,s]);return"string"==typeof l?e.jsx(l,{ref:u,style:a,children:n}):e.jsx(l,{ref:u,style:a,index:r,children:n})})),F=()=>[],G=()=>t.useReducer(F,void 0,F)[1],K=(e,n)=>t.useMemo((()=>{if("function"==typeof e)return[e,n||0];const t=(e=>{const t=[];return q(e,t),t})(e);return[e=>t[e],t.length]}),[e,n]),Q=t.forwardRef((({children:o,count:r,overscan:i=4,initialItemSize:s,initialItemCount:c,shift:u,horizontal:a,reverse:d,cache:f,components:{Root:_=A,Item:w="div"}=$,onScroll:g,onScrollStop:p,onRangeChange:v,...m},b)=>{const[S,y]=K(o,r),z=j(g),I=j(p),[x,R,k,O]=Y((()=>{const e=!!a,t=T(y,s,c,f,!!d,!s);return[t,N(t,e),W(t,e),e]}));y!==x.I()&&x.L(3,[y,u]);const C=G(),[H,J]=x.g(),B=x.O(),q=x.J(),D=x.M(),U=t.useRef(null),V=0!==B;M((()=>{const e=U[L],t=x.B(3,(e=>{e?n.flushSync(C):C()})),o=x.B(4,(()=>{z[L]&&z[L](x.R())})),r=R.j(e),i=k.$(e);return()=>{t(),o(),r(),i()}}),[]),M((()=>{const e=x.W();e&&k.Y(e)}),[q]),t.useEffect((()=>{V||I[L]&&I[L]()}),[V]),t.useEffect((()=>{v&&v(H,J)}),[H,J]),t.useImperativeHandle(b,(()=>({get cache(){return x._()},get scrollOffset(){return x.R()},get scrollSize(){return x.M()},get viewportSize(){return x.C()},scrollToIndex:k.X,scrollTo:k.q,scrollBy:k.P})),[]);const F=P(H,i,B),Q=X(J,i,B,y),Z=[];for(let t=F;t<=Q;t++){const n=S(t),o=n.key;Z.push(e.jsx(E,{U:R,V:t,A:x.m(t),F:x.p(t),G:w,N:n,K:O},h(o)?o:"_"+t))}return e.jsx(_,{ref:U,width:O?D:void 0,height:O?void 0:D,scrolling:V,attrs:t.useMemo((()=>({...m,style:{[O?"overflowX":"overflowY"]:"auto",display:O?"inline-block":"block",contain:"strict",width:"100%",height:"100%",...m.style}})),l(m)),children:Z})})),Z=t.forwardRef((({children:o,count:r,overscan:i=4,initialItemSize:s,initialItemCount:c,shift:u,horizontal:a,cache:d,components:{Root:f=A,Item:_="div"}=$,onScrollStop:w,onRangeChange:g,...p},v)=>{const[m,b]=K(o,r),S=j(w),[y,z,I,x]=Y((()=>{const e=!!a,t=T(b,s,c,d,!1,!s);return[t,U(t,e),B(t,e),e]}));b!==y.I()&&y.L(3,[b,u]);const R=G(),[k,O]=y.g(),C=y.O(),H=y.J(),J=y.H(),W=t.useRef(null),q=0!==C;M((()=>{const e=W[L],t=y.B(3,(e=>{e?n.flushSync(R):R()})),o=z.j(e),r=I.$(e);return()=>{t(),o(),r()}}),[]),M((()=>{const e=y.W();e&&I.Y(e)}),[H]),t.useEffect((()=>{q||S[L]&&S[L]()}),[q]),t.useEffect((()=>{g&&g(k,O)}),[k,O]),t.useImperativeHandle(v,(()=>({get cache(){return y._()}})),[]);const D=P(k,i,C),N=X(O,i,C,b),V=[];for(let t=D;t<=N;t++){const n=m(t),o=n.key;V.push(e.jsx(E,{U:z,V:t,A:y.m(t),F:y.p(t),G:_,N:n,K:x},h(o)?o:"_"+t))}return e.jsx(f,{ref:W,width:x?J:void 0,height:x?void 0:J,scrolling:q,attrs:t.useMemo((()=>({...p,style:{display:x?"inline-block":"block",width:x?"auto":"100%",height:x?"100%":"auto",...p.style}})),l(p)),children:V})})),ee=(e,t)=>`${e}-${t}`,te=t.memo((({N:n,U:o,Z:r,ee:i,te:s,ne:l,oe:c,re:u,F:a,G:h})=>{const d=t.useRef(null);return M((()=>o.D(d[L],r,i)),[i,r]),e.jsx(h,{ref:d,style:t.useMemo((()=>({display:"grid",margin:0,padding:0,position:"absolute",top:s,[R()?"right":"left"]:l,visibility:a?"hidden":"visible",minHeight:c,minWidth:u})),[s,l,u,c,a]),children:n})})),ne=t.forwardRef((({children:o,row:r,col:i,cellHeight:s=40,cellWidth:c=100,overscan:u=2,initialRowCount:a,initialColCount:h,components:{Root:d=A,Cell:f="div"}=$,..._},w)=>{const[g,p,v,m,b]=Y((()=>{const e=T(r,s,a),t=T(i,c,h);return[e,t,V(e,t),W(e,!1),W(t,!0)]}));r!==g.I()&&g.L(3,[r]),i!==p.I()&&p.L(3,[i]);const S=G(),[y,z]=g.g(),[I,x]=p.g(),R=g.O(),k=p.O(),O=g.J(),C=p.J(),H=g.M(),J=p.M(),B=t.useRef(null),q=0!==R,j=0!==k;M((()=>{const e=B[L],t=e=>{e?n.flushSync(S):S()},o=g.B(3,t),r=p.B(3,t),i=v.j(e),s=m.$(e),l=b.$(e);return()=>{o(),r(),i(),s(),l()}}),[]),M((()=>{const e=g.W();e&&m.Y(e)}),[O]),M((()=>{const e=p.W();e&&b.Y(e)}),[C]),t.useImperativeHandle(w,(()=>({get scrollOffset(){return[p.R(),g.R()]},get scrollSize(){return[p.M(),g.M()]},get viewportSize(){return[p.C(),g.C()]},scrollToIndex(e,t){b.X(e),m.X(t)},scrollTo(e,t){b.q(e),m.q(t)},scrollBy(e,t){b.P(e),m.P(t)}})),[]);const D=t.useMemo((()=>{const e=new Map;return(t,n)=>{let r=e.get(ee(t,n));return r||e.set(ee(t,n),r=o({rowIndex:t,colIndex:n})),r}}),[o]),N=P(y,u,R),U=X(z,u,R,r),E=P(I,u,k),F=X(x,u,k,i),K=[];for(let t=N;t<=U;t++)for(let n=E;n<=F;n++)K.push(e.jsx(te,{U:v,Z:t,ee:n,te:g.m(t),ne:p.m(n),oe:g.S(t),re:p.S(n),F:g.p(t)||p.p(n),G:f,N:D(t,n)},ee(t,n)));return e.jsx(d,{ref:B,width:J,height:H,scrolling:q||j,attrs:t.useMemo((()=>({..._,style:{overflow:"auto",contain:"strict",width:"100%",height:"100%",..._.style}})),l(_)),children:K})}));exports.VList=Q,exports.WVList=Z,exports.experimental_VGrid=ne;
2
+ var e=require("react/jsx-runtime"),t=require("react"),n=require("react-dom");const o=Math.min,r=Math.max,i=Math.abs,s=Date.now,l=Object.values,c=Array.isArray,u=setTimeout,a=(e,t,n)=>o(n,r(t,e)),h=e=>null!=e,d=(e,t)=>{let n;const o=()=>{h(n)&&clearTimeout(n)},r=()=>{o(),n=u((()=>{n=null,e()}),t)};return r.t=o,r},f=e=>{let t,n;return(...o)=>(t||(t=!0,n=e(...o)),n)},_=e=>getComputedStyle(e),w=e=>e?parseFloat(e):0,g=-1,p=(e,t)=>{const n=e.o[t];return n===g?e.i:n},v=(e,t)=>{if(!e.l)return 0;if(e.u>=t)return e.h[t];let n=e.u,o=e.h[n];for(;n<t;)o+=p(e,n),e.h[++n]=o;return e.u=t,o},m=(e,t,n)=>{let o=v(e,n);for(;n>=0&&n<e.l;)if(o<=t){const r=p(e,n);if(o+r>t)break;o+=r,n++}else o-=p(e,--n);return a(n,0,e.l-1)},b=(e,t,n,r)=>{const i=m(e,t,o(n,e.l-1));return[i,m(e,t+r,i)]},S=(e,t,n)=>{const o=n?"unshift":"push";for(let n=e.l;n<t;n++)e.o[o](g),e.h.push(0===n?0:g);e.l=t},y=(e,t,n)=>{const o=t-e.l,r=o<0;let i;return r?(i=(n?e.o.splice(0,-o):e.o.splice(o)).reduce(((t,n)=>t+(n===g?e.i:n)),0),e.h.splice(o)):(i=e.i*o,S(e,e.l+o,n)),e.u=n?0:a(t-1,0,e.u),e.l=t,[i,r]},z="undefined"!=typeof window,I=()=>document.documentElement,x=/*#__PURE__*/f((e=>{const t="scrollLeft",n=e[t];e[t]=1;const o=e[t]<1;return e[t]=n,o})),R=/*#__PURE__*/f((()=>!!z&&"rtl"===_(I()).direction)),k=/*#__PURE__*/f((()=>/iP(hone|od|ad)/.test(navigator.userAgent))),O=/*#__PURE__*/f((()=>"scrollBehavior"in I().style)),C=(e,t,n)=>t.reduce(((t,[o,r])=>{const i=r-p(e,o);return(!n||i>0)&&(t+=i),t}),0),T=(e,t=40,n=0,s=((e,t)=>{const n={i:t,l:0,u:0,o:[],h:[]};return S(n,e),n})(e,t),l,c)=>{let u=t*r(n-1,0),h=0,d=0,f=0,_=0,w=0,m=0,z=0,I=0,x=!1,R=null,O=[0,n];const T=new Set,M=()=>(e=>e.l?v(e,e.l-1)+p(e,e.l-1):0)(s),H=()=>M()-u+h+d,J=e=>{k()&&0!==I?m+=e:(w+=e,_++)},W=e=>{const t=I;return I=e,I!==t};return{_:()=>JSON.parse(JSON.stringify(s)),g:()=>R?[o(O[0],R[0]),r(O[1],R[1])]:O=b(s,f+m+w,O[0],u),p:e=>s.o[e]===g,v:()=>!!R&&s.o.slice(r(0,R[0]-1),o(s.l-1,R[1]+1)+1).includes(g),m(e){const t=v(s,e)-m;return l?t+r(0,u-M()):t},S:e=>p(s,e),I:()=>s.l,R:()=>f,k:H,O:()=>I,C:()=>u,T:()=>h,M:()=>r(M(),u-h-d),H:M,J:()=>_,W:()=>(z=w,w=0,z),B(e,t){const n=[e,t];return T.add(n),()=>{T.delete(n)}},L(e,t){let n,r,l=0;switch(e){case 1:{const e=t.filter((([e,t])=>s.o[e]!==t));if(!e.length)break;let n=0;if(0===f);else if(f>H()-1.5)n=C(s,e,!0);else{const[t]=O;n=C(s,e.filter((([e])=>e<t)))}n&&J(n);let i=!1;e.forEach((([e,t])=>{((e,t,n)=>{const r=e.o[t]===g;return e.o[t]=n,e.u=o(t,e.u),r})(s,e,t)&&(i=!0)})),c&&i&&!f&&(e=>{const t=e.o.filter((e=>e!==g)),n=t[0];e.i=t.every((e=>e===n))?n:(e=>{const t=[...e].sort(((e,t)=>e-t)),n=e.length/2|0;return t.length%2==0?(t[n-1]+t[n])/2:t[n]})(t)})(s),l=2,r=!0;break}case 2:{const e=t[0]+t[1]+t[2];u!==e&&(u=e,h=t[1],d=t[2],l=2);break}case 3:if(t[1]){const e=H()-f,[n,r]=y(s,t[0],!0);J(r?-o(n,e):n),l=1}else y(s,t[0]);break;case 4:{const e=a(t,0,H());if(e===f)break;const n=e-f,o=i(n),s=z&&o<i(z)+1;z=0,s||x||W(n<0?2:1),r=o>u,f=e,l=5;break}case 5:W(0)&&(n=!0,l=1),x=!1,R=null;break;case 6:x=!0;break;case 7:R=b(s,t,O[0],u),l=1}l&&(n&&m&&(w+=m,m=0,_++),T.forEach((([e,t])=>{l&e&&t(r)})))}}},M=z?t.useLayoutEffect:t.useEffect,H=(e,t,n)=>(()=>{let o=s()-50;return(...r)=>{const i=s();o+50<i&&(o=i,(o=>{if(0!==e.O()&&!o.ctrlKey&&(t?o.deltaX:o.deltaY)){const t=e.R();t>0&&t<e.k()&&n()}})(...r))}})(),J=(e,t,n,o)=>x(e)||o?-n:t.k()-n,W=(e,t)=>{let n,o,r=!1;const i=t?"scrollLeft":"scrollTop",s=t?"overflowX":"overflowY",l=(o,r)=>t&&R()?J(n,e,o,r):o,c=async(r,s)=>{if(!n)return;o&&o();const c=()=>a(r(),0,e.k()),h=()=>{let t;return[new Promise(((e,n)=>{t=e,u(o=n,150)})),e.B(2,(()=>{t&&t()}))]};if(s&&O()){for(;e.L(7,c()),e.v();){const[e,t]=h();try{await e}catch(e){return}finally{t()}}n.scrollTo({[t?"left":"top"]:l(c()),behavior:"smooth"})}else for(;;){const[t,o]=h();try{n[i]=l(c()),e.L(6),await t}catch(e){return}finally{o()}}};return{$(o){n=o;let s=!1,c=!1;const u=d((()=>{s?u():(c=!1,e.L(5))}),150),a=()=>{c&&(r=!0),e.L(4,l(o[i])),u()},h=H(e,t,u),f=()=>{s=!0,c=r=!1},_=()=>{s=!1,k()&&(c=!0)};return o.addEventListener("scroll",a),o.addEventListener("wheel",h,{passive:!0}),o.addEventListener("touchstart",f,{passive:!0}),o.addEventListener("touchend",_,{passive:!0}),()=>{o.removeEventListener("scroll",a),o.removeEventListener("wheel",h),o.removeEventListener("touchstart",f),o.removeEventListener("touchend",_),u.t()}},q(e){c((()=>e))},A(t){t+=e.R(),c((()=>t))},P(t,{align:n,smooth:o}={}){if(t=a(t,0,e.I()-1),"nearest"===n){const o=e.m(t),r=e.R();if(o<r)n="start";else{if(!(o+e.S(t)>r+e.C()))return;n="end"}}c((()=>"end"===n?e.T()+e.m(t)+e.S(t)-e.C():"center"===n?e.T()+e.m(t)+(e.S(t)-e.C())/2:e.T()+e.m(t)),o)},X:e=>{if(n){if(r){r=!1;const e=n.style,t=e[s];e[s]="hidden",u((()=>{e[s]=t}))}n[i]+=l(e,!0)}}}},B=(e,t)=>{let n;const o=t?"scrollX":"scrollY",r=t?"offsetLeft":"offsetTop",i=(o,r)=>t&&R()?J(n,e,o,r):o;return{$(s){n=s;const l=(e,n)=>{const o=n+(t&&R()?window.innerWidth-e[r]-e.offsetWidth:e[r]),i=e.offsetParent;return e!==document.body&&i?l(i,o):o},c=d((()=>{e.L(5)}),150),u=()=>{e.L(4,i(window[o])-l(s,0)),c()},a=H(e,t,c);return window.addEventListener("scroll",u),window.addEventListener("wheel",a,{passive:!0}),()=>{window.removeEventListener("scroll",u),window.removeEventListener("wheel",a),c.t()}},X:e=>{window.scrollBy(t?i(e,!0):0,t?0:e)}}},L="current",$={},q=(e,t)=>{if(c(e))for(const n of e)q(n,t);else h(e)&&"boolean"!=typeof e&&t.push(e)},A=(e,t,n)=>r(e-(1===n?1:r(1,t)),0),P=(e,t,n,i)=>o(e+(2===n?1:r(1,t)),i-1),X=e=>{const n=t.useRef();return n[L]||(n[L]=e())},Y=e=>{const n=t.useRef(e);return M((()=>{n[L]=e}),[e]),n},j={box:"border-box"},D=(e,t)=>{let n;const o=t?"width":"height",r=new WeakMap,i=f((()=>new ResizeObserver((i=>{const s=[];for(const{target:l,contentRect:c}of i)if(l.offsetParent)if(l===n)e.L(2,[c[o],c[t?"left":"top"],w(_(n)[t?"paddingRight":"paddingBottom"])]);else{const e=r.get(l);h(e)&&s.push([e,c[o]])}s.length&&e.L(1,s)}))));return{Y(e){n=e;const t=i();return t.observe(e,j),()=>{t.disconnect()}},j(e,t){const n=i();return r.set(e,t),n.observe(e),()=>{r.delete(e),n.unobserve(e)}}}},N=(e,t)=>{const n=t?"width":"height",o=t?"innerWidth":"innerHeight",r=new WeakMap,i=f((()=>new ResizeObserver((t=>{const o=[];for(const{target:e,contentRect:i}of t){if(!e.offsetParent)continue;const t=r.get(e);h(t)&&o.push([t,i[n]])}o.length&&e.L(1,o)}))));return{Y(){const t=()=>{e.L(2,[window[o],0,0])};return window.addEventListener("resize",t),t(),()=>{window.removeEventListener("resize",t),i().disconnect()}},j(e,t){const n=i();return r.set(e,t),n.observe(e),()=>{r.delete(e),n.unobserve(e)}}}},U=(e,t)=>{let n;const o="height",i="width",s=new WeakMap,l=new Set,c=new Set,u=new Map,a=(e,t)=>`${e}-${t}`,h=f((()=>new ResizeObserver((h=>{const d=new Set,f=new Set;for(const{target:r,contentRect:l}of h)if(r.offsetParent)if(r===n){const r=_(n);e.L(2,[l[o],l.top,w(r.paddingBottom)]),t.L(2,[l[i],l.left,w(r.paddingRight)])}else{const e=s.get(r);if(e){const[t,n]=e,r=a(t,n),s=u.get(r),c=[l[o],l[i]];let h,_;s?(s[0]!==c[0]&&(h=!0),s[1]!==c[1]&&(_=!0)):h=_=!0,h&&d.add(t),_&&f.add(n),(h||_)&&u.set(r,c)}}if(d.size){const t=[];d.forEach((e=>{let n=0;c.forEach((t=>{const o=u.get(a(e,t));o&&(n=r(n,o[0]))})),n&&t.push([e,n])})),e.L(1,t)}if(f.size){const e=[];f.forEach((t=>{let n=0;l.forEach((e=>{const o=u.get(a(e,t));o&&(n=r(n,o[1]))})),n&&e.push([t,n])})),t.L(1,e)}}))));return{Y(e){n=e;const t=h();return t.observe(e,j),()=>{t.disconnect()}},j(e,t,n){const o=h();return s.set(e,[t,n]),l.add(t),c.add(n),o.observe(e),()=>{s.delete(e),o.unobserve(e)}}}},V=t.forwardRef((({children:n,attrs:o,width:r,height:i,scrolling:s},l)=>e.jsx("div",{ref:l,...o,children:e.jsx("div",{style:t.useMemo((()=>({position:"relative",visibility:"hidden",width:null!=r?r:"100%",height:null!=i?i:"100%",pointerEvents:s?"none":"auto"})),[r,i,s]),children:n})}))),E=t.memo((({D:n,N:o,U:r,V:i,F:s,G:l,K:c})=>{const u=t.useRef(null);M((()=>o.j(u[L],r)),[r]);const a=t.useMemo((()=>{const e={margin:0,padding:0,position:"absolute",[c?"height":"width"]:"100%",[c?"top":"left"]:0,[c?R()?"right":"left":"top"]:i,visibility:s?"hidden":"visible"};return c&&(e.display="flex"),e}),[i,s]);return"string"==typeof l?e.jsx(l,{ref:u,style:a,children:n}):e.jsx(l,{ref:u,style:a,index:r,children:n})})),F=()=>[],G=()=>t.useReducer(F,void 0,F)[1],K=(e,n)=>t.useMemo((()=>{if("function"==typeof e)return[e,n||0];const t=(e=>{const t=[];return q(e,t),t})(e);return[e=>t[e],t.length]}),[e,n]),Q=t.forwardRef((({children:o,count:r,overscan:i=4,initialItemSize:s,initialItemCount:c,shift:u,horizontal:a,reverse:d,cache:f,components:{Root:_=V,Item:w="div"}=$,onScroll:g,onScrollStop:p,onRangeChange:v,...m},b)=>{const[S,y]=K(o,r),z=Y(g),I=Y(p),[x,R,k,O]=X((()=>{const e=!!a,t=T(y,s,c,f,!!d,!s);return[t,D(t,e),W(t,e),e]}));y!==x.I()&&x.L(3,[y,u]);const C=G(),[H,J]=x.g(),B=x.O(),q=x.J(),j=x.M(),N=t.useRef(null),U=0!==B;M((()=>{const e=N[L],t=x.B(3,(e=>{e?n.flushSync(C):C()})),o=x.B(4,(()=>{z[L]&&z[L](x.R())})),r=R.Y(e),i=k.$(e);return()=>{t(),o(),r(),i()}}),[]),M((()=>{const e=x.W();e&&k.X(e)}),[q]),t.useEffect((()=>{U||I[L]&&I[L]()}),[U]),t.useEffect((()=>{v&&v(H,J)}),[H,J]),t.useImperativeHandle(b,(()=>({get cache(){return x._()},get scrollOffset(){return x.R()},get scrollSize(){return x.M()},get viewportSize(){return x.C()},scrollToIndex:k.P,scrollTo:k.q,scrollBy:k.A})),[]);const F=A(H,i,B),Q=P(J,i,B,y),Z=[];for(let t=F;t<=Q;t++){const n=S(t),o=n.key;Z.push(e.jsx(E,{N:R,U:t,V:x.m(t),F:x.p(t),G:w,D:n,K:O},h(o)?o:"_"+t))}return e.jsx(_,{ref:N,width:O?j:void 0,height:O?void 0:j,scrolling:U,attrs:t.useMemo((()=>({...m,style:{display:O?"inline-block":"block",[O?"overflowX":"overflowY"]:"auto",overflowAnchor:"none",contain:"strict",width:"100%",height:"100%",...m.style}})),l(m)),children:Z})})),Z=t.forwardRef((({children:o,count:r,overscan:i=4,initialItemSize:s,initialItemCount:c,shift:u,horizontal:a,cache:d,components:{Root:f=V,Item:_="div"}=$,onScrollStop:w,onRangeChange:g,...p},v)=>{const[m,b]=K(o,r),S=Y(w),[y,z,I,x]=X((()=>{const e=!!a,t=T(b,s,c,d,!1,!s);return[t,N(t,e),B(t,e),e]}));b!==y.I()&&y.L(3,[b,u]);const R=G(),[k,O]=y.g(),C=y.O(),H=y.J(),J=y.H(),W=t.useRef(null),q=0!==C;M((()=>{const e=W[L],t=y.B(3,(e=>{e?n.flushSync(R):R()})),o=z.Y(e),r=I.$(e);return()=>{t(),o(),r()}}),[]),M((()=>{const e=y.W();e&&I.X(e)}),[H]),t.useEffect((()=>{q||S[L]&&S[L]()}),[q]),t.useEffect((()=>{g&&g(k,O)}),[k,O]),t.useImperativeHandle(v,(()=>({get cache(){return y._()}})),[]);const j=A(k,i,C),D=P(O,i,C,b),U=[];for(let t=j;t<=D;t++){const n=m(t),o=n.key;U.push(e.jsx(E,{N:z,U:t,V:y.m(t),F:y.p(t),G:_,D:n,K:x},h(o)?o:"_"+t))}return e.jsx(f,{ref:W,width:x?J:void 0,height:x?void 0:J,scrolling:q,attrs:t.useMemo((()=>({...p,style:{display:x?"inline-block":"block",width:x?"auto":"100%",height:x?"100%":"auto",...p.style}})),l(p)),children:U})})),ee=(e,t)=>`${e}-${t}`,te=t.memo((({D:n,N:o,Z:r,ee:i,te:s,ne:l,oe:c,re:u,F:a,G:h})=>{const d=t.useRef(null);return M((()=>o.j(d[L],r,i)),[i,r]),e.jsx(h,{ref:d,style:t.useMemo((()=>({display:"grid",margin:0,padding:0,position:"absolute",top:s,[R()?"right":"left"]:l,visibility:a?"hidden":"visible",minHeight:c,minWidth:u})),[s,l,u,c,a]),children:n})})),ne=t.forwardRef((({children:o,row:r,col:i,cellHeight:s=40,cellWidth:c=100,overscan:u=2,initialRowCount:a,initialColCount:h,components:{Root:d=V,Cell:f="div"}=$,..._},w)=>{const[g,p,v,m,b]=X((()=>{const e=T(r,s,a),t=T(i,c,h);return[e,t,U(e,t),W(e,!1),W(t,!0)]}));r!==g.I()&&g.L(3,[r]),i!==p.I()&&p.L(3,[i]);const S=G(),[y,z]=g.g(),[I,x]=p.g(),R=g.O(),k=p.O(),O=g.J(),C=p.J(),H=g.M(),J=p.M(),B=t.useRef(null),q=0!==R,Y=0!==k;M((()=>{const e=B[L],t=e=>{e?n.flushSync(S):S()},o=g.B(3,t),r=p.B(3,t),i=v.Y(e),s=m.$(e),l=b.$(e);return()=>{o(),r(),i(),s(),l()}}),[]),M((()=>{const e=g.W();e&&m.X(e)}),[O]),M((()=>{const e=p.W();e&&b.X(e)}),[C]),t.useImperativeHandle(w,(()=>({get scrollOffset(){return[p.R(),g.R()]},get scrollSize(){return[p.M(),g.M()]},get viewportSize(){return[p.C(),g.C()]},scrollToIndex(e,t){b.P(e),m.P(t)},scrollTo(e,t){b.q(e),m.q(t)},scrollBy(e,t){b.A(e),m.A(t)}})),[]);const j=t.useMemo((()=>{const e=new Map;return(t,n)=>{let r=e.get(ee(t,n));return r||e.set(ee(t,n),r=o({rowIndex:t,colIndex:n})),r}}),[o]),D=A(y,u,R),N=P(z,u,R,r),E=A(I,u,k),F=P(x,u,k,i),K=[];for(let t=D;t<=N;t++)for(let n=E;n<=F;n++)K.push(e.jsx(te,{N:v,Z:t,ee:n,te:g.m(t),ne:p.m(n),oe:g.S(t),re:p.S(n),F:g.p(t)||p.p(n),G:f,D:j(t,n)},ee(t,n)));return e.jsx(d,{ref:B,width:J,height:H,scrolling:q||Y,attrs:t.useMemo((()=>({..._,style:{overflow:"auto",overflowAnchor:"none",contain:"strict",width:"100%",height:"100%",..._.style}})),l(_)),children:K})}));exports.VList=Q,exports.WVList=Z,exports.experimental_VGrid=ne;
3
3
  //# sourceMappingURL=index.js.map