virtua 0.6.0 → 0.6.1

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
@@ -10,7 +10,7 @@ If you want to check the difference with the alternatives right away, [see compa
10
10
 
11
11
  This project is a challenge to rethink virtualization. The goals are...
12
12
 
13
- - **Zero configuration:** This library is designed to give the best performance without configuration. It also handles common hard things in the real world (dynamic size measurement, scroll position adjustment in bottom-up scrolling and imperative scrolling, etc).
13
+ - **Zero-config virtualization:** This library is designed to give the best performance without configuration. It also handles common hard things in the real world (dynamic size measurement, scroll position adjustment in bottom-up scrolling and imperative scrolling, etc).
14
14
  - **Fast:** Scrolling without frame drop needs optimization in many aspects (reduce CPU usage, reduce GC, [reduce layout recalculation](https://gist.github.com/paulirish/5d52fb081b3570c81e3a), optimize with CSS, optimize for frameworks, etc). We are trying to combine the best of them.
15
15
  - **Small:** Its bundle size should be small as much as possible to be friendly with modern web development. Currently each components are ~3kB gzipped and the total is [~4kB gzipped](https://bundlephobia.com/package/virtua).
16
16
  - **Flexible:** Aiming to support many usecases - fixed size, dynamic size, horizontal scrolling, reverse scrolling, rtl direction, sticky, infinite scrolling, placeholder, scrollTo, scroll restoration, dnd, table, and more. See [live demo](#demo).
@@ -184,7 +184,7 @@ And see [examples](./stories) for more usages.
184
184
  | Reverse scroll | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
185
185
  | Reverse scroll in iOS Safari | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
186
186
  | Infinite scroll | ✅ | ✅ | 🟠 (needs [react-window-infinite-loader](https://github.com/bvaughn/react-window-infinite-loader)) | 🟠 (needs [InfiniteLoader](https://github.com/bvaughn/react-virtualized/blob/master/docs/InfiniteLoader.md)) | ✅ | ✅ |
187
- | Bi-directional infinite scroll | ❌ | ✅ | ❌ | ❌ | ❌ | |
187
+ | Bi-directional infinite scroll | ❌ | ✅ | ❌ | ❌ | ❌ | 🟠 (has startItem method but its scroll position can be inaccurate) |
188
188
  | Scroll restoration | ✅ | ✅ (getState) | ❌ | ❌ | ❌ | ❌ |
189
189
  | Smooth scroll | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ |
190
190
  | RTL direction | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
@@ -11,9 +11,8 @@ export declare const getItemSize: (cache: Cache, index: number) => number;
11
11
  export declare const setItemSize: (cache: Writeable<Cache>, index: number, size: number) => boolean;
12
12
  export declare const computeTotalSize: (cache: Writeable<Cache>) => number;
13
13
  export declare const computeStartOffset: (cache: Writeable<Cache>, index: number) => number;
14
- declare const findIndex: (cache: Cache, i: number, distance: number) => number;
14
+ export declare const findIndex: (cache: Cache, i: number, distance: number) => number;
15
15
  export declare const findStartIndexWithOffset: (cache: Cache, offset: number, prevStartIndex: number, prevOffset: number) => number;
16
- export { findIndex as findEndIndex };
17
16
  export declare const hasUnmeasuredItemsInRange: (cache: Cache, startIndex: number, endIndex: number) => boolean;
18
17
  export declare const estimateDefaultItemSize: (cache: Writeable<Cache>) => void;
19
18
  export declare const initCache: (length: number, itemSize: number) => Cache;
@@ -1,3 +1,4 @@
1
+ import { Cache } from "./cache";
1
2
  import type { CacheSnapshot } from "./types";
2
3
  export type ScrollJump = Readonly<number>;
3
4
  export type ItemResize = Readonly<[index: number, size: number]>;
@@ -39,5 +40,5 @@ export type VirtualStore = {
39
40
  _getIsScrolling(): boolean;
40
41
  _updateCacheLength(length: number): void;
41
42
  };
42
- export declare const createVirtualStore: (elementsCount: number, itemSize: number | undefined, initialItemCount: number | undefined, isReverse: boolean, cacheSnapshot?: CacheSnapshot) => VirtualStore;
43
+ export declare const createVirtualStore: (elementsCount: number, itemSize?: number, initialItemCount?: number, cache?: Cache, isReverse?: boolean, shouldAutoEstimateItemSize?: boolean) => VirtualStore;
43
44
  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 r=Math.min,o=Math.max,i=Math.abs,s=Date.now,l=Object.values,c=setTimeout,u=e=>null!=e,a=(e,t)=>{let n;const r=()=>{u(n)&&clearTimeout(n)},o=()=>{r(),n=c((()=>{n=null,e()}),t)};return o.t=r,o},d=e=>{let t,n;return(...r)=>(t||(t=!0,n=e(...r)),n)},h=-1,f=(e,t)=>{const n=e.o[t];return n===h?e.i:n},_=(e,t,n)=>{if(!e.l)return 0;if(e.u>=t)return n?e.h[t]+f(e,t):e.h[t];let r=e.u,o=e.h[r];for(;r<=t&&(e.h[r]=o,r!==t||n);)o+=f(e,r),r++;return e.u=t,o},g=(e,t)=>_(e,t),w=(e,t,n)=>{let i=0;if(n>=0)for(;t<e.l-1;){const r=f(e,t++);if((i+=r)>=n){i-r/2>=n&&t--;break}}else for(;t>0;){const r=f(e,--t);if((i-=r)<=n){i+r/2<n&&t++;break}}return r(o(t,0),e.l-1)},m=(e,t,n,r)=>w(e,n,t-r),p=(e,t)=>t.reduce(((t,[n,r])=>t+(r-f(e,n))),0),v=(e,t,n=0,s,l)=>{const c=!t,a=t||40,d=l||((e,t)=>{const n=[],r=[];for(let t=0;t<e;t++)n.push(h),r.push(0===t?0:h);return{i:t,l:e,u:0,o:n,h:r}})(e,a);let v=a*o(n-1,0),S=0,b=0,I=0,z=0,R=!1,x=!1,y=[0,n];const k=new Set,O=()=>(e=>_(e,e.l-1,!0))(d),C=()=>O()-v,T=e=>{const t=z;return z=e,z!==t&&(0===z||0===t)};return{_:()=>JSON.parse(JSON.stringify(d)),g(){const[e,t]=y,n=g(d,e),r=m(d,S,e,n),o=w(d,r,v);return e===r&&t===o?y:y=[r,o]},m:e=>d.o[e]===h,p:e=>((e,t,n)=>{for(let r=t;r<=n;r++)if(e.o[r]===h)return!0;return!1})(d,o(0,e-2),r(d.l-1,e+2)),v(e){const t=g(d,e);return s?t+o(0,v-O()):t},S:e=>f(d,e),I:()=>d.l,R:()=>S,k:C,O:()=>v,C:O,T:()=>o(O(),v),M:()=>b,H(){const e=I;return I=0,e},J:e=>m(d,e,0,0),W(e,t){const n=[e,t];return k.add(n),()=>{k.delete(n)}},L(e,t){let n,s=0;switch(e){case 1:{const e=t.filter((([e,t])=>d.o[e]!==t));if(!e.length)break;let o=0;if(2===z)o=p(d,e);else if(R){const[t]=y;0===S||(o=S>C()-1.5?p(d,e):p(d,e.filter((([e])=>e<t))))}o&&(I=o,b++,s+=4);let i=!1;e.forEach((([e,t])=>{((e,t,n)=>{const o=e.o[t]===h;return e.o[t]=n,e.u=r(t,e.u),o})(d,e,t)&&(i=!0)})),c&&i&&!S&&(e=>{const t=e.o.filter((e=>e!==h)),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)})(d),s+=2,x=n=!0;break}case 2:v!==t&&(v=t,s=2);break;case 3:case 4:if(S===t)break;if(3===e){const e=x;x=!1,0!==z&&e||R||T(S>t?2:1)&&(s+=8),n=i(S-t)>v,s+=16}S=o(0,r(C(),t)),s+=1;break;case 5:T(0)&&(s=8),R=!1;break;case 6:R=!0}s&&k.forEach((([e,t])=>{s&e&&t(n)}))},$:()=>0!==z,q(e){d.l!==e&&((e,t)=>{const n=[],o=[];for(let r=0;r<t;r++){const t=e.o[r];if(n.push(u(t)?t:h),0===r)o.push(0);else{const t=e.h[r];o.push(u(t)?t:h)}}e.l=t,e.u=r(e.u,t-1),e.o=n,e.h=o})(d,e)}}},S="undefined"!=typeof window?t.useLayoutEffect:t.useEffect,b="current",I={},z=e=>{const n=[];return t.Children.forEach(e,(e=>{u(e)&&"boolean"!=typeof e&&n.push(e)})),n},R=e=>{const n=t.useRef(e);return S((()=>{n[b]=e}),[e]),n},x=(e,r,o,i)=>{const[s,l]=t.useState(r),c=R(r);if(t.useLayoutEffect((()=>{const t=()=>{l((()=>c[b]()))};return e.W(o,(e=>{e?n.flushSync(t):t()}))}),[]),i){const e=r();s!==e&&l(e)}return s},y=/*#__PURE__*/d((e=>{const t="scrollLeft",n=e[t];e[t]=1;const r=e[t]<1;return e[t]=n,r})),k=(e,t,n)=>(()=>{let r=s()-50;return(...o)=>{const i=s();r+50<i&&(r=i,(r=>{if(e.$()&&!r.ctrlKey&&(t?r.deltaX:r.deltaY)){const t=e.R();t>0&&t<e.k()&&n()}})(...o))}})(),O=(e,t,n)=>{let i,s;const l=t?"scrollLeft":"scrollTop",u=()=>i?t?i.scrollWidth:i.scrollHeight:0,d=(r,o)=>t&&n?y(i)||o?-r:e.k()-r:r,h=async(t,n)=>{if(!i)return;const o=()=>r(n(),u()-e.O());for(;e.L(4,o()),e.p(t);){s&&s[1]();const t=e.W(2,(()=>{s&&s[0]()}));try{await new Promise(((e,t)=>{let n=!1;const r=()=>{n||(n=!0,e(),s=void 0)};s=[r,t],c(r,250)}))}catch(e){return}finally{t()}}i[l]=d(o()),e.L(6)};return{j(n){i=n;const r=()=>{e.L(3,d(n[l]))},o=a((()=>{r(),e.L(5)}),150),s=()=>{r(),o()},c=k(e,t,o);return n.addEventListener("scroll",s),n.addEventListener("wheel",c,{passive:!0}),()=>{n.removeEventListener("scroll",s),n.removeEventListener("wheel",c),o.t()}},B:u,N(t){t=o(t,0),h(e.J(t),(()=>t))},U(t){t=o(r(t,e.I()-1),0),h(t,(()=>e.v(t)))},A:e=>{i&&(i[l]+=d(e,!0))}}},C=(e,t)=>{const n=t?"scrollX":"scrollY",r=t?"offsetLeft":"offsetTop";return{j(o){let i=!1;const s=(e,t)=>{const n=t+e[r],o=e.offsetParent;return e!==document.body&&o?s(o,n):n},l=()=>{i&&e.L(3,window[n]-s(o,0))},c=a((()=>{l(),e.L(5)}),150),u=()=>{l(),c()},d=k(e,t,c),h=new IntersectionObserver((([e])=>{i=e.isIntersecting}));return h.observe(o),window.addEventListener("scroll",u),window.addEventListener("wheel",d,{passive:!0}),()=>{h.disconnect(),window.removeEventListener("scroll",u),window.removeEventListener("wheel",d),c.t()}},A:e=>{window.scrollBy(t?e:0,t?0:e)}}},T=e=>{const n=t.useRef();return n[b]||(n[b]=e())},M=(e,t)=>{let n;const r=t?"width":"height",o=new WeakMap,i=d((()=>new ResizeObserver((t=>{const i=[];for(const{target:s,contentRect:l}of t)if(s===n)e.L(2,l[r]);else{const e=o.get(s);u(e)&&i.push([e,l[r]])}i.length&&e.L(1,i)}))));return{D(e){n=e;const t=i();return t.observe(e),()=>{t.disconnect()}},F(e,t){const n=i();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},H=(e,t)=>{const n=t?"width":"height",r=t?"innerWidth":"innerHeight",o=new WeakMap,i=d((()=>new ResizeObserver((t=>{const r=[];for(const{target:e,contentRect:i}of t){const t=o.get(e);u(t)&&r.push([t,i[n]])}r.length&&e.L(1,r)}))));return{D(){const t=()=>{e.L(2,window[r])};return window.addEventListener("resize",t),t(),()=>{window.removeEventListener("resize",t),i().disconnect()}},F(e,t){const n=i();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},J=(e,t)=>{let n;const r="height",i="width",s=new WeakMap,l=new Set,c=new Set,u=new Map,a=(e,t)=>`${e}-${t}`,h=d((()=>new ResizeObserver((d=>{const h=new Set,f=new Set;for(const{target:o,contentRect:l}of d)if(o===n)e.L(2,l[r]),t.L(2,l[i]);else{const e=s.get(o);if(e){const[t,n]=e,o=a(t,n),s=u.get(o),c=[l[r],l[i]];let d,_;s?(s[0]!==c[0]&&(d=!0),s[1]!==c[1]&&(_=!0)):d=_=!0,d&&h.add(t),_&&f.add(n),(d||_)&&u.set(o,c)}}if(h.size){const t=[];h.forEach((e=>{let n=0;c.forEach((t=>{const r=u.get(a(e,t));r&&(n=o(n,r[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 r=u.get(a(e,t));r&&(n=o(n,r[1]))})),n&&e.push([t,n])})),t.L(1,e)}}))));return{D(e){n=e;const t=h();return t.observe(e),()=>{t.disconnect()}},F(e,t,n){const r=h();return s.set(e,[t,n]),l.add(t),c.add(n),r.observe(e),()=>{s.delete(e),r.unobserve(e)}}}},W=t.forwardRef((({children:n,attrs:r,width:o,height:i,scrolling:s},l)=>e.jsx("div",{ref:l,...r,children:e.jsx("div",{style:t.useMemo((()=>({position:"relative",visibility:"hidden",width:null!=o?o:"100%",height:null!=i?i:"100%",pointerEvents:s?"none":"auto"})),[o,i,s]),children:n})}))),L=t.memo((({P:n,V:r,X:o,Y:i,G:s,K:l,Z:c})=>{const u=t.useRef(null),a=x(o,(()=>o.v(i)),2,!0),d=x(o,(()=>o.m(i)),2,!0);return S((()=>r.F(u[b],i)),[i]),e.jsx(s,{ref:u,style:t.useMemo((()=>{const e=c?"right":"left",t={margin:0,padding:0,position:"absolute",[l?"height":"width"]:"100%",[l?"top":e]:0,[l?e:"top"]:a,visibility:d?"hidden":"visible"};return l&&(t.display="flex"),t}),[a,d]),children:n})})),$=t.forwardRef((({children:n,overscan:i=4,initialItemSize:s,initialItemCount:c,horizontal:a,mode:d,cache:h,components:{Root:f=W,Item:_="div"}=I,onScroll:g,onScrollStop:w,onRangeChange:m,...p},y)=>{const k=t.useMemo((()=>z(n)),[n]),C=k.length,H=R(g),J=R(w),[$,q,j,B,N]=T((()=>{const e=!!a,t="rtl"===d,n=v(C,s,c,"reverse"===d,h);return[n,M(n,e),O(n,e,t),e,t]}));$.q(C);const[U,A]=x($,$.g,3),D=x($,$.$,8),E=x($,$.M,4),F=x($,$.T,2,!0),P=t.useRef(null);S((()=>{const e=P[b],t=q.D(e),n=j.j(e),r=$.W(16,(()=>{H[b]&&H[b]($.R())}));return()=>{t(),n(),r()}}),[]),S((()=>{const e=$.H();e&&j.A(e)}),[E]),t.useEffect((()=>{D||J[b]&&J[b]()}),[D]),t.useEffect((()=>{m&&m(U,A)}),[U,A]),t.useImperativeHandle(y,(()=>({get cache(){return $._()},get scrollOffset(){return $.R()},get scrollSize(){return j.B()},get viewportSize(){return $.O()},scrollToIndex:j.U,scrollTo:j.N,scrollBy(e){j.N($.R()+e)}})),[]);const V=o(U-i,0),X=r(A+i,C-1),Y=t.useMemo((()=>{const t=[];for(let n=V;n<=X;n++){const r=k[n];u(r)&&t.push(e.jsx(L,{V:q,X:$,Y:n,G:_,P:r,K:B,Z:N},r.key||n))}return t}),[k,V,X]);return e.jsx(f,{ref:P,width:B?F:void 0,height:B?void 0:F,scrolling:D,attrs:t.useMemo((()=>({...p,style:{overflow:B?"auto hidden":"hidden auto",display:B?"inline-block":"block",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...p.style}})),l(p)),children:Y})})),q=(e,t)=>`${e}-${t}`,j=t.memo((({P:n,V:r,ee:o,te:i,ne:s,re:l,G:c,Z:u})=>{const a=t.useRef(null),d=x(o,(()=>o.v(s)),2,!0),h=x(i,(()=>i.v(l)),2,!0),f=x(o,(()=>o.m(s)),2,!0),_=x(i,(()=>i.m(l)),2,!0),g=x(o,(()=>o.S(s)),2,!0),w=x(i,(()=>i.S(l)),2,!0);return S((()=>r.F(a[b],s,l)),[l,s]),e.jsx(c,{ref:a,style:t.useMemo((()=>({display:"grid",margin:0,padding:0,position:"absolute",top:d,[u?"right":"left"]:h,visibility:f||_?"hidden":"visible",minHeight:g,minWidth:w})),[d,h,w,g,f,_]),children:n})})),B=t.forwardRef((({children:n,row:i,col:s,cellHeight:c=40,cellWidth:u=100,overscan:a=2,initialRowCount:d,initialColCount:h,rtl:f,components:{Root:_=W,Cell:g="div"}=I,...w},m)=>{const[p,z,R,y,k,C]=T((()=>{const e=!!f,t=v(i,c,d,!1),n=v(s,u,h,!1);return[t,n,J(t,n),O(t,!1,e),O(n,!0,e),e]}));p.q(i),z.q(s);const[M,H]=x(p,p.g,3),[L,$]=x(z,z.g,3),B=x(p,p.$,8),N=x(z,z.$,8),U=x(p,p.M,4),A=x(z,z.M,4),D=x(p,p.T,2,!0),E=x(z,z.T,2,!0),F=t.useRef(null);S((()=>{const e=F[b],t=R.D(e),n=y.j(e),r=k.j(e);return()=>{t(),n(),r()}}),[]),S((()=>{const e=p.H();e&&y.A(e)}),[U]),S((()=>{const e=z.H();e&&k.A(e)}),[A]),t.useImperativeHandle(m,(()=>({get scrollOffset(){return[z.R(),p.R()]},get scrollSize(){return[k.B(),y.B()]},get viewportSize(){return[z.O(),p.O()]},scrollToIndex(e,t){k.U(e),y.U(t)},scrollTo(e,t){k.N(e),y.N(t)},scrollBy(e,t){k.N(z.R()+e),y.N(p.R()+t)}})),[]);const P=t.useMemo((()=>{const e=new Map;return(t,r)=>{let o=e.get(q(t,r));return o||e.set(q(t,r),o=n({rowIndex:t,colIndex:r})),o}}),[n]),V=o(M-a,0),X=r(H+a,i-1),Y=o(L-a,0),G=r($+a,s-1),K=t.useMemo((()=>{const t=[];for(let n=V;n<=X;n++)for(let r=Y;r<=G;r++)t.push(e.jsx(j,{V:R,ee:p,te:z,ne:n,re:r,G:g,P:P(n,r),Z:C},q(n,r)));return t}),[P,V,X,Y,G]);return e.jsx(_,{ref:F,width:E,height:D,scrolling:B||N,attrs:t.useMemo((()=>({...w,style:{overflow:"auto",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...w.style}})),l(w)),children:K})})),N=t.forwardRef((({children:n,overscan:i=4,initialItemSize:s,initialItemCount:c,horizontal:a,cache:d,components:{Root:h=W,Item:f="div"}=I,onScrollStop:_,onRangeChange:g,...w},m)=>{const p=t.useMemo((()=>z(n)),[n]),y=p.length,k=R(_),[O,M,J,$]=T((()=>{const e=!!a,t=v(y,s,c,!1,d);return[t,H(t,e),C(t,e),e]}));O.q(y);const[q,j]=x(O,O.g,3),B=x(O,O.$,8),N=x(O,O.M,4),U=x(O,O.T,2,!0),A=t.useRef(null);S((()=>{const e=A[b],t=M.D(e),n=J.j(e);return()=>{t(),n()}}),[]),S((()=>{const e=O.H();e&&J.A(e)}),[N]),t.useEffect((()=>{B||k[b]&&k[b]()}),[B]),t.useEffect((()=>{g&&g(q,j)}),[q,j]),t.useImperativeHandle(m,(()=>({get cache(){return O._()}})),[]);const D=o(q-i,0),E=r(j+i,y-1),F=t.useMemo((()=>{const t=[];for(let n=D;n<=E;n++){const r=p[n];u(r)&&t.push(e.jsx(L,{V:M,X:O,Y:n,G:f,P:r,K:$,Z:!1},r.key||n))}return t}),[p,D,E]);return e.jsx(h,{ref:A,width:$?U:void 0,height:$?void 0:U,scrolling:B,attrs:t.useMemo((()=>({...w,style:{overflow:"visible",display:$?"inline-block":"block",width:$?"auto":"100%",height:$?"100%":"auto",padding:0,margin:0,...w.style}})),l(w)),children:F})}));exports.VGrid=B,exports.VList=$,exports.WVList=N;
2
+ var e=require("react/jsx-runtime"),t=require("react"),n=require("react-dom");const r=Math.min,o=Math.max,i=Math.abs,s=Date.now,l=Object.values,c=setTimeout,u=e=>null!=e,a=(e,t)=>{let n;const r=()=>{u(n)&&clearTimeout(n)},o=()=>{r(),n=c((()=>{n=null,e()}),t)};return o.t=r,o},d=e=>{let t,n;return(...r)=>(t||(t=!0,n=e(...r)),n)},h=-1,f=(e,t)=>{const n=e.o[t];return n===h?e.i:n},_=(e,t,n)=>{if(!e.l)return 0;if(e.u>=t)return n?e.h[t]+f(e,t):e.h[t];let r=e.u,o=e.h[r];for(;r<=t&&(e.h[r]=o,r!==t||n);)o+=f(e,r),r++;return e.u=t,o},g=(e,t)=>_(e,t),w=(e,t,n)=>{let i=0;if(n>=0)for(;t<e.l-1;){const r=f(e,t++);if((i+=r)>=n){i-r/2>=n&&t--;break}}else for(;t>0;){const r=f(e,--t);if((i-=r)<=n){i+r/2<n&&t++;break}}return r(e.l-1,o(0,t))},m=(e,t,n,r)=>w(e,n,t-r),p=(e,t)=>{for(let n=e.l;n<t;n++)e.o.push(h),e.h.push(0===n?0:h);e.l=t},v=(e,t)=>t.reduce(((t,[n,r])=>t+(r-f(e,n))),0),S=(e,t=40,n=0,s=((e,t)=>{const n={i:t,l:0,u:0,o:[],h:[]};return p(n,e),n})(e,t),l,c)=>{let u=t*o(n-1,0),a=0,d=0,S=0,b=0,I=!1,z=!1,R=[0,n];const x=new Set,y=()=>(e=>_(e,e.l-1,!0))(s),k=()=>y()-u,O=e=>{const t=b;return b=e,b!==t&&(0===b||0===t)};return{_:()=>JSON.parse(JSON.stringify(s)),g(){const[e,t]=R,n=g(s,e),r=m(s,a,e,n),o=w(s,r,u);return e===r&&t===o?R:R=[r,o]},m:e=>s.o[e]===h,p:e=>((e,t,n)=>{for(let r=t;r<=n;r++)if(e.o[r]===h)return!0;return!1})(s,o(0,e-2),r(s.l-1,e+2)),v(e){const t=g(s,e);return l?t+o(0,u-y()):t},S:e=>f(s,e),I:()=>s.l,R:()=>a,k,O:()=>u,C:y,T:()=>o(y(),u),M:()=>d,H(){const e=S;return S=0,e},J:e=>m(s,e,0,0),W(e,t){const n=[e,t];return x.add(n),()=>{x.delete(n)}},L(e,t){let n,l=0;switch(e){case 1:{const e=t.filter((([e,t])=>s.o[e]!==t));if(!e.length)break;let o=0;if(2===b)o=v(s,e);else if(I){const[t]=R;0===a||(o=a>k()-1.5?v(s,e):v(s,e.filter((([e])=>e<t))))}o&&(S=o,d++,l+=4);let i=!1;e.forEach((([e,t])=>{((e,t,n)=>{const o=e.o[t]===h;return e.o[t]=n,e.u=r(t,e.u),o})(s,e,t)&&(i=!0)})),c&&i&&!a&&(e=>{const t=e.o.filter((e=>e!==h)),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,z=n=!0;break}case 2:u!==t&&(u=t,l=2);break;case 3:case 4:if(a===t)break;if(3===e){const e=z;z=!1,0!==b&&e||I||O(a>t?2:1)&&(l+=8),n=i(a-t)>u,l+=16}a=r(k(),o(0,t)),l+=1;break;case 5:O(0)&&(l=8),I=!1;break;case 6:I=!0}l&&x.forEach((([e,t])=>{l&e&&t(n)}))},$:()=>0!==b,q(e){s.l!==e&&((e,t)=>{const n=t-e.l;if(n>0)p(e,t);else{for(let t=n;t<0;t++)e.o.pop(),e.h.pop();e.l=t,e.u=r(e.u,t-1)}})(s,e)}}},b="undefined"!=typeof window?t.useLayoutEffect:t.useEffect,I="current",z={},R=e=>{const n=[];return t.Children.forEach(e,(e=>{u(e)&&"boolean"!=typeof e&&n.push(e)})),n},x=e=>{const n=t.useRef(e);return b((()=>{n[I]=e}),[e]),n},y=(e,r,o,i)=>{const[s,l]=t.useState(r),c=x(r);if(t.useLayoutEffect((()=>{const t=()=>{l((()=>c[I]()))};return e.W(o,(e=>{e?n.flushSync(t):t()}))}),[]),i){const e=r();s!==e&&l(e)}return s},k=/*#__PURE__*/d((e=>{const t="scrollLeft",n=e[t];e[t]=1;const r=e[t]<1;return e[t]=n,r})),O=(e,t,n)=>(()=>{let r=s()-50;return(...o)=>{const i=s();r+50<i&&(r=i,(r=>{if(e.$()&&!r.ctrlKey&&(t?r.deltaX:r.deltaY)){const t=e.R();t>0&&t<e.k()&&n()}})(...o))}})(),C=(e,t,n)=>{let i,s;const l=t?"scrollLeft":"scrollTop",u=()=>i?t?i.scrollWidth:i.scrollHeight:0,d=(r,o)=>t&&n?k(i)||o?-r:e.k()-r:r,h=async(t,n)=>{if(!i)return;const o=()=>r(n(),u()-e.O());for(;e.L(4,o()),e.p(t);){s&&s[1]();const t=e.W(2,(()=>{s&&s[0]()}));try{await new Promise(((e,t)=>{let n=!1;const r=()=>{n||(n=!0,e(),s=void 0)};s=[r,t],c(r,250)}))}catch(e){return}finally{t()}}i[l]=d(o()),e.L(6)};return{j(n){i=n;const r=()=>{e.L(3,d(n[l]))},o=a((()=>{r(),e.L(5)}),150),s=()=>{r(),o()},c=O(e,t,o);return n.addEventListener("scroll",s),n.addEventListener("wheel",c,{passive:!0}),()=>{n.removeEventListener("scroll",s),n.removeEventListener("wheel",c),o.t()}},B:u,N(t){t=o(t,0),h(e.J(t),(()=>t))},U(t){t=r(e.I()-1,o(0,t)),h(t,(()=>e.v(t)))},A:e=>{i&&(i[l]+=d(e,!0))}}},T=(e,t)=>{const n=t?"scrollX":"scrollY",r=t?"offsetLeft":"offsetTop";return{j(o){let i=!1;const s=(e,t)=>{const n=t+e[r],o=e.offsetParent;return e!==document.body&&o?s(o,n):n},l=()=>{i&&e.L(3,window[n]-s(o,0))},c=a((()=>{l(),e.L(5)}),150),u=()=>{l(),c()},d=O(e,t,c),h=new IntersectionObserver((([e])=>{i=e.isIntersecting}));return h.observe(o),window.addEventListener("scroll",u),window.addEventListener("wheel",d,{passive:!0}),()=>{h.disconnect(),window.removeEventListener("scroll",u),window.removeEventListener("wheel",d),c.t()}},A:e=>{window.scrollBy(t?e:0,t?0:e)}}},M=e=>{const n=t.useRef();return n[I]||(n[I]=e())},H=(e,t)=>{let n;const r=t?"width":"height",o=new WeakMap,i=d((()=>new ResizeObserver((t=>{const i=[];for(const{target:s,contentRect:l}of t)if(s===n)e.L(2,l[r]);else{const e=o.get(s);u(e)&&i.push([e,l[r]])}i.length&&e.L(1,i)}))));return{D(e){n=e;const t=i();return t.observe(e),()=>{t.disconnect()}},F(e,t){const n=i();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},J=(e,t)=>{const n=t?"width":"height",r=t?"innerWidth":"innerHeight",o=new WeakMap,i=d((()=>new ResizeObserver((t=>{const r=[];for(const{target:e,contentRect:i}of t){const t=o.get(e);u(t)&&r.push([t,i[n]])}r.length&&e.L(1,r)}))));return{D(){const t=()=>{e.L(2,window[r])};return window.addEventListener("resize",t),t(),()=>{window.removeEventListener("resize",t),i().disconnect()}},F(e,t){const n=i();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},W=(e,t)=>{let n;const r="height",i="width",s=new WeakMap,l=new Set,c=new Set,u=new Map,a=(e,t)=>`${e}-${t}`,h=d((()=>new ResizeObserver((d=>{const h=new Set,f=new Set;for(const{target:o,contentRect:l}of d)if(o===n)e.L(2,l[r]),t.L(2,l[i]);else{const e=s.get(o);if(e){const[t,n]=e,o=a(t,n),s=u.get(o),c=[l[r],l[i]];let d,_;s?(s[0]!==c[0]&&(d=!0),s[1]!==c[1]&&(_=!0)):d=_=!0,d&&h.add(t),_&&f.add(n),(d||_)&&u.set(o,c)}}if(h.size){const t=[];h.forEach((e=>{let n=0;c.forEach((t=>{const r=u.get(a(e,t));r&&(n=o(n,r[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 r=u.get(a(e,t));r&&(n=o(n,r[1]))})),n&&e.push([t,n])})),t.L(1,e)}}))));return{D(e){n=e;const t=h();return t.observe(e),()=>{t.disconnect()}},F(e,t,n){const r=h();return s.set(e,[t,n]),l.add(t),c.add(n),r.observe(e),()=>{s.delete(e),r.unobserve(e)}}}},L=t.forwardRef((({children:n,attrs:r,width:o,height:i,scrolling:s},l)=>e.jsx("div",{ref:l,...r,children:e.jsx("div",{style:t.useMemo((()=>({position:"relative",visibility:"hidden",width:null!=o?o:"100%",height:null!=i?i:"100%",pointerEvents:s?"none":"auto"})),[o,i,s]),children:n})}))),$=t.memo((({P:n,V:r,X:o,Y:i,G:s,K:l,Z:c})=>{const u=t.useRef(null),a=y(o,(()=>o.v(i)),2,!0),d=y(o,(()=>o.m(i)),2,!0);return b((()=>r.F(u[I],i)),[i]),e.jsx(s,{ref:u,style:t.useMemo((()=>{const e=c?"right":"left",t={margin:0,padding:0,position:"absolute",[l?"height":"width"]:"100%",[l?"top":e]:0,[l?e:"top"]:a,visibility:d?"hidden":"visible"};return l&&(t.display="flex"),t}),[a,d]),children:n})})),q=t.forwardRef((({children:n,overscan:i=4,initialItemSize:s,initialItemCount:c,horizontal:a,mode:d,cache:h,components:{Root:f=L,Item:_="div"}=z,onScroll:g,onScrollStop:w,onRangeChange:m,...p},v)=>{const k=t.useMemo((()=>R(n)),[n]),O=k.length,T=x(g),J=x(w),[W,q,j,B,N]=M((()=>{const e=!!a,t="rtl"===d,n=S(O,s,c,h,"reverse"===d,!s);return[n,H(n,e),C(n,e,t),e,t]}));W.q(O);const[U,A]=y(W,W.g,3),D=y(W,W.$,8),E=y(W,W.M,4),F=y(W,W.T,2,!0),P=t.useRef(null);b((()=>{const e=P[I],t=q.D(e),n=j.j(e),r=W.W(16,(()=>{T[I]&&T[I](W.R())}));return()=>{t(),n(),r()}}),[]),b((()=>{const e=W.H();e&&j.A(e)}),[E]),t.useEffect((()=>{D||J[I]&&J[I]()}),[D]),t.useEffect((()=>{m&&m(U,A)}),[U,A]),t.useImperativeHandle(v,(()=>({get cache(){return W._()},get scrollOffset(){return W.R()},get scrollSize(){return j.B()},get viewportSize(){return W.O()},scrollToIndex:j.U,scrollTo:j.N,scrollBy(e){j.N(W.R()+e)}})),[]);const V=o(U-i,0),X=r(A+i,O-1),Y=t.useMemo((()=>{const t=[];for(let n=V;n<=X;n++){const r=k[n];u(r)&&t.push(e.jsx($,{V:q,X:W,Y:n,G:_,P:r,K:B,Z:N},r.key||n))}return t}),[k,V,X]);return e.jsx(f,{ref:P,width:B?F:void 0,height:B?void 0:F,scrolling:D,attrs:t.useMemo((()=>({...p,style:{overflow:B?"auto hidden":"hidden auto",display:B?"inline-block":"block",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...p.style}})),l(p)),children:Y})})),j=(e,t)=>`${e}-${t}`,B=t.memo((({P:n,V:r,ee:o,te:i,ne:s,re:l,G:c,Z:u})=>{const a=t.useRef(null),d=y(o,(()=>o.v(s)),2,!0),h=y(i,(()=>i.v(l)),2,!0),f=y(o,(()=>o.m(s)),2,!0),_=y(i,(()=>i.m(l)),2,!0),g=y(o,(()=>o.S(s)),2,!0),w=y(i,(()=>i.S(l)),2,!0);return b((()=>r.F(a[I],s,l)),[l,s]),e.jsx(c,{ref:a,style:t.useMemo((()=>({display:"grid",margin:0,padding:0,position:"absolute",top:d,[u?"right":"left"]:h,visibility:f||_?"hidden":"visible",minHeight:g,minWidth:w})),[d,h,w,g,f,_]),children:n})})),N=t.forwardRef((({children:n,row:i,col:s,cellHeight:c=40,cellWidth:u=100,overscan:a=2,initialRowCount:d,initialColCount:h,rtl:f,components:{Root:_=L,Cell:g="div"}=z,...w},m)=>{const[p,v,R,x,k,O]=M((()=>{const e=!!f,t=S(i,c,d),n=S(s,u,h);return[t,n,W(t,n),C(t,!1,e),C(n,!0,e),e]}));p.q(i),v.q(s);const[T,H]=y(p,p.g,3),[J,$]=y(v,v.g,3),q=y(p,p.$,8),N=y(v,v.$,8),U=y(p,p.M,4),A=y(v,v.M,4),D=y(p,p.T,2,!0),E=y(v,v.T,2,!0),F=t.useRef(null);b((()=>{const e=F[I],t=R.D(e),n=x.j(e),r=k.j(e);return()=>{t(),n(),r()}}),[]),b((()=>{const e=p.H();e&&x.A(e)}),[U]),b((()=>{const e=v.H();e&&k.A(e)}),[A]),t.useImperativeHandle(m,(()=>({get scrollOffset(){return[v.R(),p.R()]},get scrollSize(){return[k.B(),x.B()]},get viewportSize(){return[v.O(),p.O()]},scrollToIndex(e,t){k.U(e),x.U(t)},scrollTo(e,t){k.N(e),x.N(t)},scrollBy(e,t){k.N(v.R()+e),x.N(p.R()+t)}})),[]);const P=t.useMemo((()=>{const e=new Map;return(t,r)=>{let o=e.get(j(t,r));return o||e.set(j(t,r),o=n({rowIndex:t,colIndex:r})),o}}),[n]),V=o(T-a,0),X=r(H+a,i-1),Y=o(J-a,0),G=r($+a,s-1),K=t.useMemo((()=>{const t=[];for(let n=V;n<=X;n++)for(let r=Y;r<=G;r++)t.push(e.jsx(B,{V:R,ee:p,te:v,ne:n,re:r,G:g,P:P(n,r),Z:O},j(n,r)));return t}),[P,V,X,Y,G]);return e.jsx(_,{ref:F,width:E,height:D,scrolling:q||N,attrs:t.useMemo((()=>({...w,style:{overflow:"auto",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...w.style}})),l(w)),children:K})})),U=t.forwardRef((({children:n,overscan:i=4,initialItemSize:s,initialItemCount:c,horizontal:a,cache:d,components:{Root:h=L,Item:f="div"}=z,onScrollStop:_,onRangeChange:g,...w},m)=>{const p=t.useMemo((()=>R(n)),[n]),v=p.length,k=x(_),[O,C,H,W]=M((()=>{const e=!!a,t=S(v,s,c,d,!1,!s);return[t,J(t,e),T(t,e),e]}));O.q(v);const[q,j]=y(O,O.g,3),B=y(O,O.$,8),N=y(O,O.M,4),U=y(O,O.T,2,!0),A=t.useRef(null);b((()=>{const e=A[I],t=C.D(e),n=H.j(e);return()=>{t(),n()}}),[]),b((()=>{const e=O.H();e&&H.A(e)}),[N]),t.useEffect((()=>{B||k[I]&&k[I]()}),[B]),t.useEffect((()=>{g&&g(q,j)}),[q,j]),t.useImperativeHandle(m,(()=>({get cache(){return O._()}})),[]);const D=o(q-i,0),E=r(j+i,v-1),F=t.useMemo((()=>{const t=[];for(let n=D;n<=E;n++){const r=p[n];u(r)&&t.push(e.jsx($,{V:C,X:O,Y:n,G:f,P:r,K:W,Z:!1},r.key||n))}return t}),[p,D,E]);return e.jsx(h,{ref:A,width:W?U:void 0,height:W?void 0:U,scrolling:B,attrs:t.useMemo((()=>({...w,style:{overflow:"visible",display:W?"inline-block":"block",width:W?"auto":"100%",height:W?"100%":"auto",padding:0,margin:0,...w.style}})),l(w)),children:F})}));exports.VGrid=N,exports.VList=q,exports.WVList=U;
3
3
  //# sourceMappingURL=index.js.map