virtua 0.9.1 → 0.11.0

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.
@@ -4,15 +4,15 @@ export type Cache = DeepReadonly<{
4
4
  _defaultItemSize: number;
5
5
  _length: number;
6
6
  _sizes: number[];
7
- _measuredOffsetIndex: number;
7
+ _computedOffsetIndex: number;
8
8
  _offsets: number[];
9
9
  }>;
10
10
  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 computeOffset: (cache: Writeable<Cache>, index: number) => number;
13
13
  export declare const computeTotalSize: (cache: Writeable<Cache>) => number;
14
- export declare const findIndex: (cache: Cache, i: number, distance: number) => number;
15
- export declare const findStartIndexWithOffset: (cache: Writeable<Cache>, offset: number, initialIndex: number) => 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
16
  export declare const hasUnmeasuredItemsInRange: (cache: Cache, startIndex: number, endIndex: number) => boolean;
17
17
  export declare const estimateDefaultItemSize: (cache: Writeable<Cache>) => void;
18
18
  export declare const initCache: (length: number, itemSize: number) => Cache;
@@ -6,6 +6,7 @@ type ItemsRange = Readonly<[startIndex: number, endIndex: number]>;
6
6
  export declare const SCROLL_IDLE = 0;
7
7
  export declare const SCROLL_DOWN = 1;
8
8
  export declare const SCROLL_UP = 2;
9
+ export type ScrollDirection = typeof SCROLL_IDLE | typeof SCROLL_DOWN | typeof SCROLL_UP;
9
10
  export declare const ACTION_ITEM_RESIZE = 1;
10
11
  export declare const ACTION_VIEWPORT_RESIZE = 2;
11
12
  export declare const ACTION_ITEMS_LENGTH_CHANGE = 3;
@@ -21,7 +22,7 @@ type Subscriber = () => void;
21
22
  export declare const UPDATE_SCROLL = 1;
22
23
  export declare const UPDATE_SIZE = 2;
23
24
  export declare const UPDATE_JUMP = 4;
24
- export declare const UPDATE_IS_SCROLLING = 8;
25
+ export declare const UPDATE_SCROLL_DIRECTION = 8;
25
26
  export declare const UPDATE_SCROLL_WITH_EVENT = 16;
26
27
  export type VirtualStore = {
27
28
  _getCache(): CacheSnapshot;
@@ -33,7 +34,7 @@ export type VirtualStore = {
33
34
  _getItemsLength(): number;
34
35
  _getScrollOffset(): number;
35
36
  _getScrollOffsetMax(): number;
36
- _getIsScrolling(): boolean;
37
+ _getScrollDirection(): ScrollDirection;
37
38
  _getViewportSize(): number;
38
39
  _getCorrectedScrollSize(): number;
39
40
  _getJumpCount(): number;
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,s=Math.abs,i=Date.now,l=Object.values,c=Array.isArray,u=setTimeout,a=(e,t,n)=>r(n,o(t,e)),d=e=>null!=e,h=(e,t)=>{let n;const r=()=>{d(n)&&clearTimeout(n)},o=()=>{r(),n=u((()=>{n=null,e()}),t)};return o.t=r,o},f=e=>{let t,n;return(...r)=>(t||(t=!0,n=e(...r)),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},m=(e,t)=>{if(!e.l)return 0;if(e.u>=t)return e.h[t];let n=e.u,r=e.h[n];for(;n<t;)r+=p(e,n),e.h[++n]=r;return e.u=t,r},v=(e,t,n)=>{let r=0;if(n>=0)for(;t<e.l-1;){const o=p(e,t++);if((r+=o)>=n){r-o/2>=n&&t--;break}}else for(;t>0;){const o=p(e,--t);if((r-=o)<=n){r+o/2<n&&t++;break}}return a(t,0,e.l-1)},b=(e,t,n)=>v(e,n,t-m(e,n)),S=(e,t,n)=>{const r=n?"unshift":"push";for(let n=e.l;n<t;n++)e.o[r](g),e.h.push(0===n?0:g);e.l=t},I=(e,t,n)=>{const r=t-e.l,o=r<0;let s;return o?(s=(n?e.o.splice(0,-r):e.o.splice(r)).reduce(((t,n)=>t+(n===g?e.i:n)),0),e.h.splice(r)):(s=e.i*r,S(e,e.l+r,n)),e.u=n?0:a(t-1,0,e.u),e.l=t,[s,o]},z=(e,t,n)=>t.reduce(((t,[r,o])=>{const s=o-p(e,r);return(!n||s>0)&&(t+=s),t}),0),x=(e,t,n=40,i=0,l=((e,t)=>{const n={i:t,l:0,u:0,o:[],h:[]};return S(n,e),n})(t,n),c,u)=>{let d=n*o(i-1,0),h=0,f=0,_=0,w=0,x=!1,R=!1,y=!1,k=[0,i];const O=new Set,C=()=>(e=>e.l?m(e,e.l-1)+p(e,e.l-1):0)(l),T=()=>C()-d,M=e=>a(e,0,T()),H=e=>{const t=w;return w=e,w!==t&&(0===w||0===t)};return{_:()=>JSON.parse(JSON.stringify(l)),g(){const[e,t]=k,n=b(l,h,r(e,l.l-1)),o=v(l,n,d);return e===n&&t===o?k:k=[n,o]},p:e=>l.o[e]===g,m(e){const t=b(l,e,k[0]);return((e,t,n)=>e.o.slice(t,n+1).includes(g))(l,o(0,t-1),r(l.l-1,v(l,t,d)+1))},v(e){const t=m(l,e);return c?t+o(0,d-C()):t},S:e=>p(l,e),I:()=>l.l,R:()=>h,k:T,O:()=>0!==w,C:()=>d,T:()=>o(C(),d),M:()=>f,H(){const e=_;return _=0,e},J(e,t){const n=[e,t];return O.add(n),()=>{O.delete(n)}},W(t,n){let o,i=0;switch(t){case 1:{const e=n.filter((([e,t])=>l.o[e]!==t));if(!e.length)break;let t=0;if(x||R){const[n]=k;0===h||(t=h>T()-1.5?z(l,e,!0):z(l,e.filter((([e])=>e<n))))}else 2===w&&(t=z(l,e));t&&(_=t,f++,i+=4);let s=!1;e.forEach((([e,t])=>{((e,t,n)=>{const o=e.o[t]===g;return e.o[t]=n,e.u=r(t,e.u),o})(l,e,t)&&(s=!0)})),u&&s&&!h&&(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)})(l),i+=2,y=o=!0;break}case 2:d!==n&&(d=n,i=2);break;case 3:if(n[1]){const e=T()-h,[t,o]=I(l,n[0],!0),s=o?-r(t,e):t;_+=s,h=M(h+s),f++,i=5,x=!0}else I(l,n[0]);break;case 4:case 5:if(h===n)break;if(4===t){const e=n-h,t=y;y=!1,0!==w&&t||R||H(e<0?2:1)&&(i+=8),o=s(e)>d,i+=16,t||(x=!1)}h=M(n),i+=1;break;case 6:H(0)&&(i=8),x=R=!1;break;case 7:R=!0}if(i){const t=()=>{O.forEach((([e,t])=>{i&e&&t()}))};o?e(t):t()}}}},R="undefined"!=typeof window?t.useLayoutEffect:t.useEffect,y="current",k={},O=(e,t)=>{if(c(e))for(const n of e)O(n,t);else d(e)&&"boolean"!=typeof e&&t.push(e)},C=e=>{const t=[];return O(e,t),t},T=e=>{const n=t.useRef(e);return R((()=>{n[y]=e}),[e]),n},M=(e,n,r,o)=>{const[s,i]=t.useState(n),l=T(n);if(R((()=>e.J(r,(()=>{i((()=>l[y]()))}))),[]),o){const e=n();s!==e&&i(e)}return s},H=/*#__PURE__*/f((e=>{const t="scrollLeft",n=e[t];e[t]=1;const r=e[t]<1;return e[t]=n,r})),J=(e,t,n)=>(()=>{let r=i()-50;return(...o)=>{const s=i();r+50<s&&(r=s,(r=>{if(e.O()&&!r.ctrlKey&&(t?r.deltaX:r.deltaY)){const t=e.R();t>0&&t<e.k()&&n()}})(...o))}})(),W=(e,t,n)=>{let r,o;const s=t?"scrollLeft":"scrollTop",i=(o,s)=>t&&n?H(r)||s?-o:e.k()-o:o,l=async t=>{if(!r)return;const n=()=>a(t(),0,e.k());for(;;){const t=n();if(e.W(5,t),!e.m(t))break;o&&o[1]();const r=e.J(2,(()=>{o&&o[0]()}));try{await new Promise(((e,t)=>{let n=!1;const r=()=>{n||(n=!0,e(),o=void 0)};o=[r,t],u(r,250)}))}catch(e){return}finally{r()}}r[s]=i(n()),e.W(7)};return{L(n){r=n;const o=()=>{e.W(4,i(n[s]))},l=h((()=>{o(),e.W(6)}),150),c=()=>{o(),l()},u=J(e,t,l);return n.addEventListener("scroll",c),n.addEventListener("wheel",u,{passive:!0}),()=>{n.removeEventListener("scroll",c),n.removeEventListener("wheel",u),l.t()}},$(e){l((()=>e))},q(t){t+=e.R(),l((()=>t))},B(t,n){t=a(t,0,e.I()-1),l("end"===n?()=>e.v(t)+e.S(t)-e.C():()=>e.v(t))},j:e=>{r&&(r[s]+=i(e,!0))}}},L=(e,t)=>{const n=t?"scrollX":"scrollY",r=t?"offsetLeft":"offsetTop";return{L(o){let s=!1;const i=(e,t)=>{const n=t+e[r],o=e.offsetParent;return e!==document.body&&o?i(o,n):n},l=()=>{s&&e.W(4,window[n]-i(o,0))},c=h((()=>{l(),e.W(6)}),150),u=()=>{l(),c()},a=J(e,t,c),d=new IntersectionObserver((([e])=>{s=e.isIntersecting}));return d.observe(o),window.addEventListener("scroll",u),window.addEventListener("wheel",a,{passive:!0}),()=>{d.disconnect(),window.removeEventListener("scroll",u),window.removeEventListener("wheel",a),c.t()}},j:e=>{window.scrollBy(t?e:0,t?0:e)}}},$=e=>{const n=t.useRef();return n[y]||(n[y]=e())},q={box:"border-box"},B=(e,t)=>{let n;const r=t?"width":"height",o=new WeakMap,s=f((()=>new ResizeObserver((s=>{const i=[];for(const{target:l,contentRect:c}of s)if(l.offsetParent)if(l===n)e.W(2,c[r]+c[t?"left":"top"]+w(_(n)[t?"paddingRight":"paddingBottom"]));else{const e=o.get(l);d(e)&&i.push([e,c[r]])}i.length&&e.W(1,i)}))));return{N(e){n=e;const t=s();return t.observe(e,q),()=>{t.disconnect()}},U(e,t){const n=s();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,s=f((()=>new ResizeObserver((t=>{const r=[];for(const{target:e,contentRect:s}of t){if(!e.offsetParent)continue;const t=o.get(e);d(t)&&r.push([t,s[n]])}r.length&&e.W(1,r)}))));return{N(){const t=()=>{e.W(2,window[r])};return window.addEventListener("resize",t),t(),()=>{window.removeEventListener("resize",t),s().disconnect()}},U(e,t){const n=s();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},N=(e,t)=>{let n;const r="height",s="width",i=new WeakMap,l=new Set,c=new Set,u=new Map,a=(e,t)=>`${e}-${t}`,d=f((()=>new ResizeObserver((d=>{const h=new Set,f=new Set;for(const{target:o,contentRect:l}of d)if(o.offsetParent)if(o===n){const o=_(n);e.W(2,l[r]+l.top+w(o.paddingBottom)),t.W(2,l[s]+l.left+w(o.paddingRight))}else{const e=i.get(o);if(e){const[t,n]=e,o=a(t,n),i=u.get(o),c=[l[r],l[s]];let d,_;i?(i[0]!==c[0]&&(d=!0),i[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.W(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.W(1,e)}}))));return{N(e){n=e;const t=d();return t.observe(e,q),()=>{t.disconnect()}},U(e,t,n){const r=d();return i.set(e,[t,n]),l.add(t),c.add(n),r.observe(e),()=>{i.delete(e),r.unobserve(e)}}}},U=t.forwardRef((({children:n,attrs:r,width:o,height:s,scrolling:i},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!=s?s:"100%",pointerEvents:i?"none":"auto"})),[o,s,i]),children:n})}))),V=t.memo((({V:n,A:r,D:o,F:s,P:i,X:l,Y:c})=>{const u=t.useRef(null),a=M(o,(()=>o.v(s)),2,!0),d=M(o,(()=>o.p(s)),2,!0);return R((()=>r.U(u[y],s)),[s]),e.jsx(i,{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})})),A=t.forwardRef((({children:s,overscan:i=4,initialItemSize:c,initialItemCount:u,shift:a,horizontal:h,mode:f,cache:_,components:{Root:w=U,Item:g="div"}=k,onScroll:p,onScrollStop:m,onRangeChange:v,...b},S)=>{const I=t.useMemo((()=>C(s)),[s]),z=I.length,O=T(p),H=T(m),[J,L,q,j,N]=$((()=>{const e=!!h,t="rtl"===f,r=x(n.flushSync,z,c,u,_,"reverse"===f,!c);return[r,B(r,e),W(r,e,t),e,t]}));z!==J.I()&&J.W(3,[z,a]);const[A,D]=M(J,J.g,3),E=M(J,J.O,8),F=M(J,J.M,4),P=M(J,J.T,2,!0),X=t.useRef(null);R((()=>{const e=X[y],t=L.N(e),n=q.L(e),r=J.J(16,(()=>{O[y]&&O[y](J.R())}));return()=>{t(),n(),r()}}),[]),R((()=>{const e=J.H();e&&q.j(e)}),[F]),t.useEffect((()=>{E||H[y]&&H[y]()}),[E]),t.useEffect((()=>{v&&v(A,D)}),[A,D]),t.useImperativeHandle(S,(()=>({get cache(){return J._()},get scrollOffset(){return J.R()},get scrollSize(){return J.T()},get viewportSize(){return J.C()},scrollToIndex:q.B,scrollTo:q.$,scrollBy:q.q})),[]);const Y=o(A-i,0),G=r(D+i,z-1),K=t.useMemo((()=>{const t=[];for(let n=Y;n<=G;n++){const r=I[n],o=r.key;t.push(e.jsx(V,{A:L,D:J,F:n,P:g,V:r,X:j,Y:N},d(o)?o:"_"+n))}return t}),[I,Y,G]);return e.jsx(w,{ref:X,width:j?P:void 0,height:j?void 0:P,scrolling:E,attrs:t.useMemo((()=>({...b,style:{overflow:j?"auto hidden":"hidden auto",display:j?"inline-block":"block",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...b.style}})),l(b)),children:K})})),D=(e,t)=>`${e}-${t}`,E=t.memo((({V:n,A:r,G:o,K:s,Z:i,ee:l,P:c,Y:u})=>{const a=t.useRef(null),d=M(o,(()=>o.v(i)),2,!0),h=M(s,(()=>s.v(l)),2,!0),f=M(o,(()=>o.p(i)),2,!0),_=M(s,(()=>s.p(l)),2,!0),w=M(o,(()=>o.S(i)),2,!0),g=M(s,(()=>s.S(l)),2,!0);return R((()=>r.U(a[y],i,l)),[l,i]),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:w,minWidth:g})),[d,h,g,w,f,_]),children:n})})),F=t.forwardRef((({children:s,row:i,col:c,cellHeight:u=40,cellWidth:a=100,overscan:d=2,initialRowCount:h,initialColCount:f,rtl:_,components:{Root:w=U,Cell:g="div"}=k,...p},m)=>{const[v,b,S,I,z,O]=$((()=>{const e=!!_,t=x(n.flushSync,i,u,h),r=x(n.flushSync,c,a,f);return[t,r,N(t,r),W(t,!1,e),W(r,!0,e),e]}));i!==v.I()&&v.W(3,[i]),c!==b.I()&&b.W(3,[c]);const[C,T]=M(v,v.g,3),[H,J]=M(b,b.g,3),L=M(v,v.O,8),q=M(b,b.O,8),B=M(v,v.M,4),j=M(b,b.M,4),V=M(v,v.T,2,!0),A=M(b,b.T,2,!0),F=t.useRef(null);R((()=>{const e=F[y],t=S.N(e),n=I.L(e),r=z.L(e);return()=>{t(),n(),r()}}),[]),R((()=>{const e=v.H();e&&I.j(e)}),[B]),R((()=>{const e=b.H();e&&z.j(e)}),[j]),t.useImperativeHandle(m,(()=>({get scrollOffset(){return[b.R(),v.R()]},get scrollSize(){return[b.T(),v.T()]},get viewportSize(){return[b.C(),v.C()]},scrollToIndex(e,t){z.B(e),I.B(t)},scrollTo(e,t){z.$(e),I.$(t)},scrollBy(e,t){z.q(e),I.q(t)}})),[]);const P=t.useMemo((()=>{const e=new Map;return(t,n)=>{let r=e.get(D(t,n));return r||e.set(D(t,n),r=s({rowIndex:t,colIndex:n})),r}}),[s]),X=o(C-d,0),Y=r(T+d,i-1),G=o(H-d,0),K=r(J+d,c-1),Q=t.useMemo((()=>{const t=[];for(let n=X;n<=Y;n++)for(let r=G;r<=K;r++)t.push(e.jsx(E,{A:S,G:v,K:b,Z:n,ee:r,P:g,V:P(n,r),Y:O},D(n,r)));return t}),[P,X,Y,G,K]);return e.jsx(w,{ref:F,width:A,height:V,scrolling:L||q,attrs:t.useMemo((()=>({...p,style:{overflow:"auto",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...p.style}})),l(p)),children:Q})})),P=t.forwardRef((({children:s,overscan:i=4,initialItemSize:c,initialItemCount:u,horizontal:a,cache:h,components:{Root:f=U,Item:_="div"}=k,onScrollStop:w,onRangeChange:g,...p},m)=>{const v=t.useMemo((()=>C(s)),[s]),b=v.length,S=T(w),[I,z,O,H]=$((()=>{const e=!!a,t=x(n.flushSync,b,c,u,h,!1,!c);return[t,j(t,e),L(t,e),e]}));b!==I.I()&&I.W(3,[b]);const[J,W]=M(I,I.g,3),q=M(I,I.O,8),B=M(I,I.M,4),N=M(I,I.T,2,!0),A=t.useRef(null);R((()=>{const e=A[y],t=z.N(e),n=O.L(e);return()=>{t(),n()}}),[]),R((()=>{const e=I.H();e&&O.j(e)}),[B]),t.useEffect((()=>{q||S[y]&&S[y]()}),[q]),t.useEffect((()=>{g&&g(J,W)}),[J,W]),t.useImperativeHandle(m,(()=>({get cache(){return I._()}})),[]);const D=o(J-i,0),E=r(W+i,b-1),F=t.useMemo((()=>{const t=[];for(let n=D;n<=E;n++){const r=v[n],o=r.key;t.push(e.jsx(V,{A:z,D:I,F:n,P:_,V:r,X:H,Y:!1},d(o)?o:"_"+n))}return t}),[v,D,E]);return e.jsx(f,{ref:A,width:H?N:void 0,height:H?void 0:N,scrolling:q,attrs:t.useMemo((()=>({...p,style:{overflow:"visible",display:H?"inline-block":"block",width:H?"auto":"100%",height:H?"100%":"auto",padding:0,margin:0,...p.style}})),l(p)),children:F})}));exports.VGrid=F,exports.VList=A,exports.WVList=P;
2
+ var e=require("react/jsx-runtime"),t=require("react"),n=require("react-dom");const r=Math.min,o=Math.max,s=Math.abs,i=Date.now,l=Object.values,c=Array.isArray,u=setTimeout,a=(e,t,n)=>r(n,o(t,e)),d=e=>null!=e,h=(e,t)=>{let n;const r=()=>{d(n)&&clearTimeout(n)},o=()=>{r(),n=u((()=>{n=null,e()}),t)};return o.t=r,o},f=e=>{let t,n;return(...r)=>(t||(t=!0,n=e(...r)),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},m=(e,t)=>{if(!e.l)return 0;if(e.u>=t)return e.h[t];let n=e.u,r=e.h[n];for(;n<t;)r+=p(e,n),e.h[++n]=r;return e.u=t,r},v=(e,t,n)=>{let r=m(e,n);for(;n>=0&&n<e.l;)if(r<=t){const o=p(e,n);if(r+o>t)break;r+=o,n++}else r-=p(e,--n);return a(n,0,e.l-1)},b=(e,t,n,o)=>{const s=v(e,t,r(n,e.l-1));return[s,v(e,t+o,s)]},S=(e,t,n)=>{const r=n?"unshift":"push";for(let n=e.l;n<t;n++)e.o[r](g),e.h.push(0===n?0:g);e.l=t},I=(e,t,n)=>{const r=t-e.l,o=r<0;let s;return o?(s=(n?e.o.splice(0,-r):e.o.splice(r)).reduce(((t,n)=>t+(n===g?e.i:n)),0),e.h.splice(r)):(s=e.i*r,S(e,e.l+r,n)),e.u=n?0:a(t-1,0,e.u),e.l=t,[s,o]},z=(e,t,n)=>t.reduce(((t,[r,o])=>{const s=o-p(e,r);return(!n||s>0)&&(t+=s),t}),0),x=(e,t,n=40,i=0,l=((e,t)=>{const n={i:t,l:0,u:0,o:[],h:[]};return S(n,e),n})(t,n),c,u)=>{let d=n*o(i-1,0),h=0,f=0,_=0,w=0,v=!1,x=!1,R=!1,y=[0,i];const k=new Set,O=()=>(e=>e.l?m(e,e.l-1)+p(e,e.l-1):0)(l),C=()=>O()-d,T=e=>a(e,0,C()),M=e=>{const t=w;return w=e,w!==t};return{_:()=>JSON.parse(JSON.stringify(l)),g(){const[e,t]=y,[n,r]=b(l,h,e,d);return e===n&&t===r?y:y=[n,r]},p:e=>l.o[e]===g,m(e){const[t,n]=b(l,e,y[0],d);return((e,t,n)=>e.o.slice(o(0,t-1),r(e.l-1,n+1)+1).includes(g))(l,t,n)},v(e){const t=m(l,e);return c?t+o(0,d-O()):t},S:e=>p(l,e),I:()=>l.l,R:()=>h,k:C,O:()=>w,C:()=>d,T:()=>o(O(),d),M:()=>f,H(){const e=_;return _=0,e},J(e,t){const n=[e,t];return k.add(n),()=>{k.delete(n)}},W(t,n){let o,i=0;switch(t){case 1:{const e=n.filter((([e,t])=>l.o[e]!==t));if(!e.length)break;let t=0;if(v||x){const[n]=y;0===h||(t=h>C()-1.5?z(l,e,!0):z(l,e.filter((([e])=>e<n))))}else 2===w&&(t=z(l,e));t&&(_=t,f++,i+=4);let s=!1;e.forEach((([e,t])=>{((e,t,n)=>{const o=e.o[t]===g;return e.o[t]=n,e.u=r(t,e.u),o})(l,e,t)&&(s=!0)})),u&&s&&!h&&(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)})(l),i+=2,R=o=!0;break}case 2:d!==n&&(d=n,i=2);break;case 3:if(n[1]){const e=C()-h,[t,o]=I(l,n[0],!0),s=o?-r(t,e):t;_+=s,h=T(h+s),f++,i=5,v=!0}else I(l,n[0]);break;case 4:case 5:if(h===n)break;if(4===t){const e=n-h,t=R;R=!1,0!==w&&t||x||M(e<0?2:1)&&(i+=8),o=s(e)>d,i+=16,t||(v=!1)}h=T(n),i+=1;break;case 6:M(0)&&(i=8),v=x=!1;break;case 7:x=!0}if(i){const t=()=>{k.forEach((([e,t])=>{i&e&&t()}))};o?e(t):t()}}}},R="undefined"!=typeof window?t.useLayoutEffect:t.useEffect,y="current",k={},O=(e,t)=>{if(c(e))for(const n of e)O(n,t);else d(e)&&"boolean"!=typeof e&&t.push(e)},C=e=>{const t=[];return O(e,t),t},T=(e,t,n)=>o(e-(1===n?1:o(1,t)),0),M=(e,t,n,s)=>r(e+(2===n?1:o(1,t)),s-1),H=e=>{const n=t.useRef(e);return R((()=>{n[y]=e}),[e]),n},J=(e,n,r,o)=>{const[s,i]=t.useState(n),l=H(n);if(R((()=>e.J(r,(()=>{i((()=>l[y]()))}))),[]),o){const e=n();s!==e&&i(e)}return s},W=/*#__PURE__*/f((e=>{const t="scrollLeft",n=e[t];e[t]=1;const r=e[t]<1;return e[t]=n,r})),L=(e,t,n)=>(()=>{let r=i()-50;return(...o)=>{const s=i();r+50<s&&(r=s,(r=>{if(0!==e.O()&&!r.ctrlKey&&(t?r.deltaX:r.deltaY)){const t=e.R();t>0&&t<e.k()&&n()}})(...o))}})(),$=(e,t,n)=>{let r,o;const s=t?"scrollLeft":"scrollTop",i=(o,s)=>t&&n?W(r)||s?-o:e.k()-o:o,l=async t=>{if(!r)return;const n=()=>a(t(),0,e.k());for(;;){const t=n();if(e.W(5,t),!e.m(t))break;o&&o[1]();const r=e.J(2,(()=>{o&&o[0]()}));try{await new Promise(((e,t)=>{let n=!1;const r=()=>{n||(n=!0,e(),o=void 0)};o=[r,t],u(r,250)}))}catch(e){return}finally{r()}}r[s]=i(n()),e.W(7)};return{L(n){r=n;const o=()=>{e.W(4,i(n[s]))},l=h((()=>{o(),e.W(6)}),150),c=()=>{o(),l()},u=L(e,t,l);return n.addEventListener("scroll",c),n.addEventListener("wheel",u,{passive:!0}),()=>{n.removeEventListener("scroll",c),n.removeEventListener("wheel",u),l.t()}},$(e){l((()=>e))},q(t){t+=e.R(),l((()=>t))},B(t,n){t=a(t,0,e.I()-1),l("end"===n?()=>e.v(t)+e.S(t)-e.C():()=>e.v(t))},j:e=>{r&&(r[s]+=i(e,!0))}}},q=(e,t)=>{const n=t?"scrollX":"scrollY",r=t?"offsetLeft":"offsetTop";return{L(o){let s=!1;const i=(e,t)=>{const n=t+e[r],o=e.offsetParent;return e!==document.body&&o?i(o,n):n},l=()=>{s&&e.W(4,window[n]-i(o,0))},c=h((()=>{l(),e.W(6)}),150),u=()=>{l(),c()},a=L(e,t,c),d=new IntersectionObserver((([e])=>{s=e.isIntersecting}));return d.observe(o),window.addEventListener("scroll",u),window.addEventListener("wheel",a,{passive:!0}),()=>{d.disconnect(),window.removeEventListener("scroll",u),window.removeEventListener("wheel",a),c.t()}},j:e=>{window.scrollBy(t?e:0,t?0:e)}}},B=e=>{const n=t.useRef();return n[y]||(n[y]=e())},j={box:"border-box"},D=(e,t)=>{let n;const r=t?"width":"height",o=new WeakMap,s=f((()=>new ResizeObserver((s=>{const i=[];for(const{target:l,contentRect:c}of s)if(l.offsetParent)if(l===n)e.W(2,c[r]+c[t?"left":"top"]+w(_(n)[t?"paddingRight":"paddingBottom"]));else{const e=o.get(l);d(e)&&i.push([e,c[r]])}i.length&&e.W(1,i)}))));return{D(e){n=e;const t=s();return t.observe(e,j),()=>{t.disconnect()}},N(e,t){const n=s();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},N=(e,t)=>{const n=t?"width":"height",r=t?"innerWidth":"innerHeight",o=new WeakMap,s=f((()=>new ResizeObserver((t=>{const r=[];for(const{target:e,contentRect:s}of t){if(!e.offsetParent)continue;const t=o.get(e);d(t)&&r.push([t,s[n]])}r.length&&e.W(1,r)}))));return{D(){const t=()=>{e.W(2,window[r])};return window.addEventListener("resize",t),t(),()=>{window.removeEventListener("resize",t),s().disconnect()}},N(e,t){const n=s();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},U=(e,t)=>{let n;const r="height",s="width",i=new WeakMap,l=new Set,c=new Set,u=new Map,a=(e,t)=>`${e}-${t}`,d=f((()=>new ResizeObserver((d=>{const h=new Set,f=new Set;for(const{target:o,contentRect:l}of d)if(o.offsetParent)if(o===n){const o=_(n);e.W(2,l[r]+l.top+w(o.paddingBottom)),t.W(2,l[s]+l.left+w(o.paddingRight))}else{const e=i.get(o);if(e){const[t,n]=e,o=a(t,n),i=u.get(o),c=[l[r],l[s]];let d,_;i?(i[0]!==c[0]&&(d=!0),i[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.W(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.W(1,e)}}))));return{D(e){n=e;const t=d();return t.observe(e,j),()=>{t.disconnect()}},N(e,t,n){const r=d();return i.set(e,[t,n]),l.add(t),c.add(n),r.observe(e),()=>{i.delete(e),r.unobserve(e)}}}},V=t.forwardRef((({children:n,attrs:r,width:o,height:s,scrolling:i},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!=s?s:"100%",pointerEvents:i?"none":"auto"})),[o,s,i]),children:n})}))),A=t.memo((({U:n,V:r,A:o,F:s,P:i,X:l,Y:c})=>{const u=t.useRef(null),a=J(o,(()=>o.v(s)),2,!0),d=J(o,(()=>o.p(s)),2,!0);return R((()=>r.N(u[y],s)),[s]),e.jsx(i,{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})})),E=t.forwardRef((({children:r,overscan:o=4,initialItemSize:s,initialItemCount:i,shift:c,horizontal:u,mode:a,cache:h,components:{Root:f=V,Item:_="div"}=k,onScroll:w,onScrollStop:g,onRangeChange:p,...m},v)=>{const b=t.useMemo((()=>C(r)),[r]),S=b.length,I=H(w),z=H(g),[O,W,L,q,j]=B((()=>{const e=!!u,t="rtl"===a,r=x(n.flushSync,S,s,i,h,"reverse"===a,!s);return[r,D(r,e),$(r,e,t),e,t]}));S!==O.I()&&O.W(3,[S,c]);const[N,U]=J(O,O.g,3),E=J(O,O.O,8),F=J(O,O.M,4),P=J(O,O.T,2,!0),X=t.useRef(null),Y=0!==E;R((()=>{const e=X[y],t=W.D(e),n=L.L(e),r=O.J(16,(()=>{I[y]&&I[y](O.R())}));return()=>{t(),n(),r()}}),[]),R((()=>{const e=O.H();e&&L.j(e)}),[F]),t.useEffect((()=>{Y||z[y]&&z[y]()}),[Y]),t.useEffect((()=>{p&&p(N,U)}),[N,U]),t.useImperativeHandle(v,(()=>({get cache(){return O._()},get scrollOffset(){return O.R()},get scrollSize(){return O.T()},get viewportSize(){return O.C()},scrollToIndex:L.B,scrollTo:L.$,scrollBy:L.q})),[]);const G=T(N,o,E),K=M(U,o,E,S),Q=t.useMemo((()=>{const t=[];for(let n=G;n<=K;n++){const r=b[n],o=r.key;t.push(e.jsx(A,{V:W,A:O,F:n,P:_,U:r,X:q,Y:j},d(o)?o:"_"+n))}return t}),[b,G,K]);return e.jsx(f,{ref:X,width:q?P:void 0,height:q?void 0:P,scrolling:Y,attrs:t.useMemo((()=>({...m,style:{overflow:"auto",display:q?"inline-block":"block",contain:"strict",width:"100%",height:"100%",...m.style}})),l(m)),children:Q})})),F=(e,t)=>`${e}-${t}`,P=t.memo((({U:n,V:r,G:o,K:s,Z:i,ee:l,P:c,Y:u})=>{const a=t.useRef(null),d=J(o,(()=>o.v(i)),2,!0),h=J(s,(()=>s.v(l)),2,!0),f=J(o,(()=>o.p(i)),2,!0),_=J(s,(()=>s.p(l)),2,!0),w=J(o,(()=>o.S(i)),2,!0),g=J(s,(()=>s.S(l)),2,!0);return R((()=>r.N(a[y],i,l)),[l,i]),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:w,minWidth:g})),[d,h,g,w,f,_]),children:n})})),X=t.forwardRef((({children:r,row:o,col:s,cellHeight:i=40,cellWidth:c=100,overscan:u=2,initialRowCount:a,initialColCount:d,rtl:h,components:{Root:f=V,Cell:_="div"}=k,...w},g)=>{const[p,m,v,b,S,I]=B((()=>{const e=!!h,t=x(n.flushSync,o,i,a),r=x(n.flushSync,s,c,d);return[t,r,U(t,r),$(t,!1,e),$(r,!0,e),e]}));o!==p.I()&&p.W(3,[o]),s!==m.I()&&m.W(3,[s]);const[z,O]=J(p,p.g,3),[C,H]=J(m,m.g,3),W=J(p,p.O,8),L=J(m,m.O,8),q=J(p,p.M,4),j=J(m,m.M,4),D=J(p,p.T,2,!0),N=J(m,m.T,2,!0),A=t.useRef(null),E=0!==W,X=0!==L;R((()=>{const e=A[y],t=v.D(e),n=b.L(e),r=S.L(e);return()=>{t(),n(),r()}}),[]),R((()=>{const e=p.H();e&&b.j(e)}),[q]),R((()=>{const e=m.H();e&&S.j(e)}),[j]),t.useImperativeHandle(g,(()=>({get scrollOffset(){return[m.R(),p.R()]},get scrollSize(){return[m.T(),p.T()]},get viewportSize(){return[m.C(),p.C()]},scrollToIndex(e,t){S.B(e),b.B(t)},scrollTo(e,t){S.$(e),b.$(t)},scrollBy(e,t){S.q(e),b.q(t)}})),[]);const Y=t.useMemo((()=>{const e=new Map;return(t,n)=>{let o=e.get(F(t,n));return o||e.set(F(t,n),o=r({rowIndex:t,colIndex:n})),o}}),[r]),G=T(z,u,W),K=M(O,u,W,o),Q=T(C,u,L),Z=M(H,u,L,s),ee=t.useMemo((()=>{const t=[];for(let n=G;n<=K;n++)for(let r=Q;r<=Z;r++)t.push(e.jsx(P,{V:v,G:p,K:m,Z:n,ee:r,P:_,U:Y(n,r),Y:I},F(n,r)));return t}),[Y,G,K,Q,Z]);return e.jsx(f,{ref:A,width:N,height:D,scrolling:E||X,attrs:t.useMemo((()=>({...w,style:{overflow:"auto",contain:"strict",width:"100%",height:"100%",...w.style}})),l(w)),children:ee})})),Y=t.forwardRef((({children:r,overscan:o=4,initialItemSize:s,initialItemCount:i,horizontal:c,cache:u,components:{Root:a=V,Item:h="div"}=k,onScrollStop:f,onRangeChange:_,...w},g)=>{const p=t.useMemo((()=>C(r)),[r]),m=p.length,v=H(f),[b,S,I,z]=B((()=>{const e=!!c,t=x(n.flushSync,m,s,i,u,!1,!s);return[t,N(t,e),q(t,e),e]}));m!==b.I()&&b.W(3,[m]);const[O,W]=J(b,b.g,3),L=J(b,b.O,8),$=J(b,b.M,4),j=J(b,b.T,2,!0),D=t.useRef(null),U=0!==L;R((()=>{const e=D[y],t=S.D(e),n=I.L(e);return()=>{t(),n()}}),[]),R((()=>{const e=b.H();e&&I.j(e)}),[$]),t.useEffect((()=>{U||v[y]&&v[y]()}),[U]),t.useEffect((()=>{_&&_(O,W)}),[O,W]),t.useImperativeHandle(g,(()=>({get cache(){return b._()}})),[]);const E=T(O,o,L),F=M(W,o,L,m),P=t.useMemo((()=>{const t=[];for(let n=E;n<=F;n++){const r=p[n],o=r.key;t.push(e.jsx(A,{V:S,A:b,F:n,P:h,U:r,X:z,Y:!1},d(o)?o:"_"+n))}return t}),[p,E,F]);return e.jsx(a,{ref:D,width:z?j:void 0,height:z?void 0:j,scrolling:U,attrs:t.useMemo((()=>({...w,style:{display:z?"inline-block":"block",width:z?"auto":"100%",height:z?"100%":"auto",...w.style}})),l(w)),children:P})}));exports.VGrid=X,exports.VList=E,exports.WVList=Y;
3
3
  //# sourceMappingURL=index.js.map