virtua 0.4.2 → 0.4.4

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
@@ -177,7 +177,7 @@ WIP
177
177
 
178
178
  | | [virtua](https://github.com/inokawa/virtua) | [react-virtuoso](https://github.com/petyosi/react-virtuoso) | [react-window](https://github.com/bvaughn/react-window) | [react-virtualized](https://github.com/bvaughn/react-virtualized) | [@tanstack/react-virtual](https://github.com/TanStack/virtual) | [react-cool-virtual](https://github.com/wellyshen/react-cool-virtual) |
179
179
  | :------------------------------------------------- | :------------------------------------------------------- | :---------------------------------------------------------------- | :------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------ | :-------------------------------------------------------------------- |
180
- | Bundle size | [4.8kB gzipped](https://bundlephobia.com/package/virtua) | [16.3kB gzipped](https://bundlephobia.com/package/react-virtuoso) | [6.4kB gzipped](https://bundlephobia.com/package/react-window) | [27.3kB gzipped](https://bundlephobia.com/package/react-virtualized) | [2.3kB gzipped](https://bundlephobia.com/package/@tanstack/react-virtual) | [3.1kB gzipped](https://bundlephobia.com/package/react-cool-virtual) |
180
+ | Bundle size | [4.7kB gzipped](https://bundlephobia.com/package/virtua) | [16.3kB gzipped](https://bundlephobia.com/package/react-virtuoso) | [6.4kB gzipped](https://bundlephobia.com/package/react-window) | [27.3kB gzipped](https://bundlephobia.com/package/react-virtualized) | [2.3kB gzipped](https://bundlephobia.com/package/@tanstack/react-virtual) | [3.1kB gzipped](https://bundlephobia.com/package/react-cool-virtual) |
181
181
  | Vertical scroll | ✅ | ✅ | ✅ | ✅ | 🟠 (needs customization) | 🟠 (needs customization) |
182
182
  | Horizontal scroll | ✅ | ❌ | ✅ | ✅ | 🟠 (needs customization) | 🟠 (needs customization) |
183
183
  | Grid (Virtualization for two dimension) | ✅ (VGrid) | ❌ | ✅ (FixedSizeGrid / VariableSizeGrid) | ✅ ([Grid](https://github.com/bvaughn/react-virtualized/blob/master/docs/Grid.md)) | 🟠 (needs customization) | 🟠 (needs customization) |
@@ -3,7 +3,7 @@ export type Scroller = {
3
3
  _initRoot: (rootElement: HTMLElement) => () => void;
4
4
  _getActualScrollSize: () => number;
5
5
  _scrollTo: (offset: number) => void;
6
- _scrollToIndex: (index: number, count: number) => void;
6
+ _scrollToIndex: (index: number) => void;
7
7
  _fixScrollJump: (jump: ScrollJump) => void;
8
8
  };
9
9
  export declare const createScroller: (store: VirtualStore, isHorizontal: boolean, isRtl: boolean) => Scroller;
@@ -19,7 +19,9 @@ export type VirtualStore = {
19
19
  _hasUnmeasuredItemsInRange(startIndex: number): boolean;
20
20
  _getItemOffset(index: number): number;
21
21
  _getItemSize(index: number): number;
22
+ _getItemLength(): number;
22
23
  _getScrollOffset(): number;
24
+ _getScrollOffsetMax(): number;
23
25
  _getViewportSize(): number;
24
26
  _getScrollSize(): number;
25
27
  _getCorrectedScrollSize(): number;
@@ -2,6 +2,12 @@ export declare const min: (...values: number[]) => number;
2
2
  export declare const max: (...values: number[]) => number;
3
3
  export declare const abs: (x: number) => number;
4
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
+ };
5
11
  export declare const timeout: typeof setTimeout;
6
12
  export declare const exists: <T>(v: T) => v is Exclude<T, null | undefined>;
7
13
  export declare const range: <T>(length: number, cb: (i: number) => T) => T[];
package/lib/index.d.ts CHANGED
@@ -4,5 +4,5 @@ export { VGrid } from "./react/VGrid";
4
4
  export type { VGridProps, VGridHandle, CustomCellComponent, CustomCellComponentProps, } from "./react/VGrid";
5
5
  export { WVList } from "./react/WVList";
6
6
  export type { WVListProps } from "./react/WVList";
7
- export type { WindowComponentAttributes, CustomWindowComponent, CustomWindowComponentProps, } from "./react/DefaultWindow";
7
+ export type { WindowComponentAttributes, CustomWindowComponent, CustomWindowComponentProps, } from "./react/Window";
8
8
  export type { CustomItemComponent, CustomItemComponentProps, } from "./react/ListItem";
package/lib/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- var e=require("react/jsx-runtime"),t=require("react"),r=require("react-dom");const n=Math.min,o=Math.max,i=Math.abs,l=Date.now,s=setTimeout,c=e=>null!=e,u=(e,t)=>Array.from({length:e},((e,r)=>t(r))),a=(e,t)=>{let r;const n=()=>{c(r)&&clearTimeout(r)},o=()=>{n(),r=s((()=>{r=null,e()}),t)};return o.t=n,o},d=e=>{let t,r;return(...n)=>(t||(t=!0,r=e(...n)),r)},_=-1,h=(e,t)=>{const r=e.o[t];return r===_?e.i:r},f=(e,t,r)=>{if(!e.l)return 0;if(e.u>=t)return r?e._[t]+h(e,t):e._[t];let n=e.u,o=e._[n];for(;n<=t&&(e._[n]=o,n!==t||r);)o+=h(e,n),n++;return e.u=t,o},g=(e,t)=>f(e,t),w=(e,t,r)=>{let i=0;if(r>=0)for(;t<e.l-1;){const n=h(e,t++);if((i+=n)>=r){i-n/2>=r&&t--;break}}else for(;t>0;){const n=h(e,--t);if((i-=n)<=r){i+n/2<r&&t++;break}}return n(o(t,0),e.l-1)},m=(e,t,r,n)=>w(e,r,t-n),v=(e,t,r)=>({i:r?r.i:t,l:e,u:r?n(r.u,e-1):0,o:u(e,(e=>{const t=r&&r.o[e];return c(t)?t:_})),_:u(e,(e=>{if(0===e)return 0;const t=r&&r._[e];return c(t)?t:_}))}),p=e=>e.reduce(((e,[t])=>e+t),0),S=(e,t)=>t.map((([t,r])=>[r-h(e,t),t])),z=(e,t,r=0,l,u,a)=>{const d=!t,z=t||40;let b,I,x=z*o(r-1,0),R=0,y=0,k=v(e,z),T=0,C=!1,H=[0,r];const M=new Set,O=()=>(e=>f(e,e.l-1,!0))(k),W=e=>{const t=T;return T=e,0!==T&&(0===t&&(1===T||2===T)||void 0)};return{h(){const[e,t]=H,r=g(k,e),n=m(k,R,e,r),o=w(k,n,x);return e===n&&t===o?H:H=[n,o]},g:e=>k.o[e]===_,m:e=>((e,t,r)=>{for(let n=t;n<=r;n++)if(e.o[n]===_)return!0;return!1})(k,o(0,e-2),n(k.l-1,e+2)),v(e){const t=g(k,e);return l?t+o(0,x-O()):t},p:e=>h(k,e),S:()=>R,I:()=>x,R:()=>O(),k:()=>o(O(),x),T:()=>y,C(){const e=b;return b=void 0,e},H:e=>m(k,e,0,0),M:()=>(I&&I[1](),new Promise(((e,t)=>{let r=!1;const n=()=>{r||(r=!0,e(),I=void 0)};I=[n,t],s(n,250)}))),O:e=>(M.add(e),()=>{M.delete(e)}),W(e,t){let r,o,l=!1;switch(e){case 1:{const e=t.filter((([e,t])=>k.o[e]!==t));if(!e.length)break;let o=0;if(2===T)o=p(S(k,e));else if(3===T){const t=S(k,e),[r]=H;0===R||(o=O()<=R+x?p(t):p(t.filter((([,e])=>e<r))))}o&&(b=o,y++);let i=!1;e.forEach((([e,t])=>{((e,t,r)=>{const o=e.o[t]===_;return e.o[t]=r,e.u=n(t,e.u),o})(k,e,t)&&(i=!0)})),d&&i&&!R&&(e=>{const t=e.o.filter((e=>e!==_)),r=t[0];e.i=t.every((e=>e===r))?r:(e=>{const t=[...e].sort(((e,t)=>e-t)),r=e.length/2|0;return t.length%2==0?(t[r-1]+t[r])/2:t[r]})(t)})(k),C=r=l=!0;break}case 2:l=x!==t,x=t;break;case 3:case 4:if(R===t)break;if(3===e){const e=(()=>{const e=C;return C=!1,e})();0!==T&&e||3===T||(o=W(R>t?2:1)),r=i(R-t)>x}R=t,l=!0;break;case 5:o=W(t?3:0)}l&&(M.forEach((e=>{e(r)})),3===e&&a(R)),I&&1===e&&I[0](),c(o)&&u(o)},J:()=>T,L(e){k.l!==e&&(k=v(e,z,k))}}},b="undefined"!=typeof window?t.useLayoutEffect:t.useEffect,I="current",x=e=>!c(e)||"boolean"==typeof e,R=e=>{const r=t.useRef(e);return b((()=>{r[I]=e}),[e]),r},y=(e,n,o)=>{const[i,l]=t.useState(n),s=R(n);if(t.useLayoutEffect((()=>{const t=()=>{l((()=>s[I]()))};return e.O((e=>{e?r.flushSync(t):t()}))}),[]),o){const e=n();i!==e&&l(e)}return i},k=/*#__PURE__*/d((e=>{const t="scrollLeft",r=e[t];e[t]=1;const n=e[t]<1;return e[t]=r,n})),T=(e,t,r)=>(()=>{let n=l()-50;return(...o)=>{const i=l();n+50<i&&(n=i,(n=>{if(0!==e.J()&&!n.ctrlKey&&(t?n.deltaX:n.deltaY)){const t=e.S();t>0&&t<e.R()-e.I()&&r()}})(...o))}})(),C=(e,t,r)=>{let i;const l=t?"scrollLeft":"scrollTop",s=()=>i?t?i.scrollWidth:i.scrollHeight:0,c=(n,o)=>t&&r?k(i)||o?-n:e.R()-e.I()-n:n,u=async(t,r)=>{if(!i)return;const n=()=>{let t=r();const n=s(),o=e.I();return n-(t+o)<=0&&(t=n-o),t};for(;e.W(4,n()),e.m(t);)try{await e.M()}catch(e){return}i[l]=c(n()),e.W(5,!0)};return{$(r){i=r;const n=()=>{e.W(3,c(r[l]))},o=a((()=>{n(),e.W(5,!1)}),150),s=()=>{n(),o()},u=T(e,t,o);return r.addEventListener("scroll",s),r.addEventListener("wheel",u,{passive:!0}),()=>{r.removeEventListener("scroll",s),r.removeEventListener("wheel",u),o.t()}},q:s,D(t){t=o(t,0),u(e.H(t),(()=>t))},A(t,r){t=o(n(t,r-1),0),u(t,(()=>e.v(t)))},B:e=>{i&&(i[l]+=c(e,!0))}}},H=(e,t)=>{const r=t?"scrollX":"scrollY",n=t?"offsetLeft":"offsetTop";return{$(o){let i=!1;const l=(e,t)=>{const r=t+e[n],o=e.offsetParent;return e!==document.body&&o?l(o,r):r},s=()=>{i&&e.W(3,window[r]-l(o,0))},c=a((()=>{s(),e.W(5,!1)}),150),u=()=>{s(),c()},d=T(e,t,c),_=new IntersectionObserver((([e])=>{i=e.isIntersecting}));return _.observe(o),window.addEventListener("scroll",u),window.addEventListener("wheel",d,{passive:!0}),()=>{_.disconnect(),window.removeEventListener("scroll",u),window.removeEventListener("wheel",d),c.t()}},B:e=>{window.scrollBy(t?e:0,t?0:e)}}},M=e=>{const r=t.useRef();return r[I]||(r[I]=e())},O=(e,t)=>{let r;const n=t?"width":"height",o=new WeakMap,i=d((()=>new ResizeObserver((t=>{const i=[];for(const{target:l,contentRect:s}of t)if(l===r)e.W(2,s[n]);else{const e=o.get(l);c(e)&&i.push([e,s[n]])}i.length&&e.W(1,i)}))));return{F(e){r=e;const t=i();return t.observe(e),()=>{t.disconnect()}},U(e,t){const r=i();return o.set(e,t),r.observe(e),()=>{o.delete(e),r.unobserve(e)}}}},W=(e,t)=>{const r=t?"width":"height",n=t?"innerWidth":"innerHeight",o=new WeakMap,i=d((()=>new ResizeObserver((t=>{const n=[];for(const{target:e,contentRect:i}of t){const t=o.get(e);c(t)&&n.push([t,i[r]])}n.length&&e.W(1,n)}))));return{F(){const t=()=>{e.W(2,window[n])};return window.addEventListener("resize",t),t(),()=>{window.removeEventListener("resize",t)}},U(e,t){const r=i();return o.set(e,t),r.observe(e),()=>{o.delete(e),r.unobserve(e)}}}},E=(e,t)=>{let r;const n="height",i="width",l=new WeakMap,s=new Set,c=new Set,u=new Map,a=(e,t)=>`${e}-${t}`,_=d((()=>new ResizeObserver((d=>{const _=new Set,h=new Set;for(const{target:o,contentRect:s}of d)if(o===r)e.W(2,s[n]),t.W(2,s[i]);else{const e=l.get(o);if(e){const[t,r]=e,o=a(t,r),l=u.get(o),c=[s[n],s[i]];let d,f;l?(l[0]!==c[0]&&(d=!0),l[1]!==c[1]&&(f=!0)):d=f=!0,d&&_.add(t),f&&h.add(r),(d||f)&&u.set(o,c)}}if(_.size){const t=[];_.forEach((e=>{let r=0;c.forEach((t=>{const n=u.get(a(e,t));n&&(r=o(r,n[0]))})),r&&t.push([e,r])})),e.W(1,t)}if(h.size){const e=[];h.forEach((t=>{let r=0;s.forEach((e=>{const n=u.get(a(e,t));n&&(r=o(r,n[1]))})),r&&e.push([t,r])})),t.W(1,e)}}))));return{F(e){r=e;const t=_();return t.observe(e),()=>{t.disconnect()}},U(e,t,r){const n=_();return l.set(e,[t,r]),s.add(t),c.add(r),n.observe(e),()=>{l.delete(e),n.unobserve(e)}}}},J=t.forwardRef((({children:r,attrs:n,width:o,height:i,scrolling:l},s)=>e.jsx("div",{ref:s,...n,children:e.jsx("div",{style:t.useMemo((()=>({position:"relative",visibility:"hidden",width:null!=o?o:"100%",height:null!=i?i:"100%",pointerEvents:l?"none":"auto"})),[o,i,l]),children:r})}))),L=t.memo((({j:r,P:n,V:o,X:i,Y:l,G:s,K:c})=>{const u=t.useRef(null),a=y(o,(()=>o.v(i)),!0),d=y(o,(()=>o.g(i)),!0);return b((()=>n.U(u[I],i)),[i]),e.jsx(l,{ref:u,style:t.useMemo((()=>{const e=c?"right":"left",t={margin:0,padding:0,position:"absolute",[s?"height":"width"]:"100%",[s?"top":e]:0,[s?e:"top"]:a,visibility:d?"hidden":"visible"};return s&&(t.display="flex"),t}),[a,d]),children:r})})),$=({j:r,N:n,V:o,Y:i,Z:l,ee:s,G:c})=>{const u=y(o,o.k);return e.jsx(i,{ref:n,width:c?u:void 0,height:c?void 0:u,scrolling:l,attrs:t.useMemo((()=>({...s,style:{overflow:c?"auto hidden":"hidden auto",display:c?"inline-block":"block",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...s.style}})),[s]),children:r})},q=t.forwardRef((({children:r,overscan:i=4,initialItemSize:l,initialItemCount:s,horizontal:u,mode:a,element:d=J,itemElement:_="div",onScroll:h,onScrollStop:f,onRangeChange:g,...w},m)=>{const v=t.useMemo((()=>{const e=[];return t.Children.forEach(r,(t=>{x(t)||e.push(t)})),e}),[r]),p=v.length,S=R(h),k=R(f),[T,H]=t.useState(!1),[W,E,q,D,A]=M((()=>{const e=!!u,t="rtl"===a,r=z(p,l,s,"reverse"===a,(e=>{H(e),e||k[I]&&k[I]()}),(e=>{S[I]&&S[I](e)}));return[r,O(r,e),C(r,e,t),e,t]}));W.L(p);const[B,F]=y(W,W.h),U=y(W,W.T),j=t.useRef(null);b((()=>{const e=j[I],t=E.F(e),r=q.$(e);return()=>{t(),r()}}),[]),b((()=>{const e=W.C();e&&q.B(e)}),[U]),t.useEffect((()=>{g&&g({start:B,end:F,count:p})}),[B,F]),t.useImperativeHandle(m,(()=>({get scrollOffset(){return W.S()},get scrollSize(){return q.q()},get viewportSize(){return W.I()},scrollToIndex(e){q.A(e,p)},scrollTo:q.D,scrollBy(e){q.D(W.S()+e)}})),[p]);const P=o(B-i,0),V=n(F+i,p-1),X=t.useMemo((()=>{const t=[];for(let r=P;r<=V;r++){const n=v[r];c(n)&&t.push(e.jsx(L,{P:E,V:W,X:r,Y:_,j:n,G:D,K:A},(null==n?void 0:n.key)||r))}return t}),[v,P,V]);return e.jsx($,{N:j,V:W,Y:d,Z:T,j:X,ee:w,G:D})})),D=(e,t)=>`${e}-${t}`,A=t.memo((({j:r,P:n,te:o,re:i,ne:l,oe:s,Y:c,K:u})=>{const a=t.useRef(null),d=y(o,(()=>o.v(l)),!0),_=y(i,(()=>i.v(s)),!0),h=y(o,(()=>o.g(l)),!0),f=y(i,(()=>i.g(s)),!0),g=y(o,(()=>o.p(l)),!0),w=y(i,(()=>i.p(s)),!0);return b((()=>n.U(a[I],l,s)),[s,l]),e.jsx(c,{ref:a,style:t.useMemo((()=>({display:"grid",margin:0,padding:0,position:"absolute",top:d,[u?"right":"left"]:_,visibility:h||f?"hidden":"visible",minHeight:g,minWidth:w})),[d,_,w,g,h,f]),children:r})})),B=({j:r,N:n,ie:o,le:i,Y:l,Z:s,ee:c})=>{const u=y(o,o.k),a=y(i,i.k);return e.jsx(l,{ref:n,width:a,height:u,scrolling:s,attrs:t.useMemo((()=>({...c,style:{overflow:"auto",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...c.style}})),[c]),children:r})},F=t.forwardRef((({children:r,row:i,col:l,cellHeight:s=40,cellWidth:c=100,overscan:u=2,initialRowCount:a,initialColCount:d,rtl:_,element:h=J,cellElement:f="div",...g},w)=>{const[m,v]=t.useState(!1),[p,S]=t.useState(!1),[x,R,k,T,H,O]=M((()=>{const e=!!_,t=()=>{},r=z(i,s,a,!1,v,t),n=z(l,c,d,!1,S,t);return[r,n,E(r,n),C(r,!1,e),C(n,!0,e),e]}));x.L(i),R.L(l);const[W,L]=y(x,x.h),[$,q]=y(R,R.h),F=y(x,x.T),U=y(R,R.T),j=t.useRef(null);b((()=>{const e=j[I],t=k.F(e),r=T.$(e),n=H.$(e);return()=>{t(),r(),n()}}),[]),b((()=>{const e=x.C();e&&T.B(e)}),[F]),b((()=>{const e=R.C();e&&H.B(e)}),[U]),t.useImperativeHandle(w,(()=>({get scrollOffset(){return[R.S(),x.S()]},get scrollSize(){return[H.q(),T.q()]},get viewportSize(){return[R.I(),x.I()]},scrollToIndex(e,t){H.A(e,l),T.A(t,i)},scrollTo(e,t){H.D(e),T.D(t)},scrollBy(e,t){H.D(R.S()+e),T.D(x.S()+t)}})),[i,l]);const P=t.useMemo((()=>{const e=new Map;return(t,n)=>{let o=e.get(D(t,n));return o||e.set(D(t,n),o=r({rowIndex:t,colIndex:n})),o}}),[r]),V=o(W-u,0),X=n(L+u,i-1),Y=o($-u,0),G=n(q+u,l-1),K=t.useMemo((()=>{const t=[];for(let r=V;r<=X;r++)for(let n=Y;n<=G;n++)t.push(e.jsx(A,{P:k,te:x,re:R,ne:r,oe:n,Y:f,j:P(r,n),K:O},D(r,n)));return t}),[P,V,X,Y,G]);return e.jsx(B,{N:j,ie:x,le:R,Y:h,Z:m||p,j:K,ee:g})})),U=({j:r,N:n,V:o,Y:i,Z:l,ee:s,G:c})=>{const u=y(o,o.k);return e.jsx(i,{ref:n,width:c?u:void 0,height:c?void 0:u,scrolling:l,attrs:t.useMemo((()=>({...s,style:{overflow:"visible",display:c?"inline-block":"block",width:c?"auto":"100%",height:c?"100%":"auto",padding:0,margin:0,...s.style}})),[s]),children:r})};exports.VGrid=F,exports.VList=q,exports.WVList=({children:r,overscan:i=4,initialItemSize:l,initialItemCount:s,horizontal:u,element:a=J,itemElement:d="div",onScroll:_,onScrollStop:h,onRangeChange:f,...g})=>{const w=t.useMemo((()=>{const e=[];return t.Children.forEach(r,(t=>{x(t)||e.push(t)})),e}),[r]),m=w.length,v=R(_),p=R(h),[S,k]=t.useState(!1),[T,C,O,E]=M((()=>{const e=!!u,t=z(m,l,s,!1,(e=>{k(e),e||p[I]&&p[I]()}),(e=>{v[I]&&v[I](e)}));return[t,W(t,e),H(t,e),e]}));T.L(m);const[$,q]=y(T,T.h),D=y(T,T.T),A=t.useRef(null);b((()=>{const e=A[I],t=C.F(e),r=O.$(e);return()=>{t(),r()}}),[]),b((()=>{const e=T.C();e&&O.B(e)}),[D]),t.useEffect((()=>{f&&f({start:$,end:q,count:m})}),[$,q]);const B=o($-i,0),F=n(q+i,m-1),j=t.useMemo((()=>{const t=[];for(let r=B;r<=F;r++){const n=w[r];c(n)&&t.push(e.jsx(L,{P:C,V:T,X:r,Y:d,j:n,G:E,K:!1},(null==n?void 0:n.key)||r))}return t}),[w,B,F]);return e.jsx(U,{N:A,V:T,Y:a,Z:S,j,ee:g,G:E})};
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,d=(e,t)=>Array.from({length:e},((e,n)=>t(n))),a=(e,t)=>{let n;const r=()=>{u(n)&&clearTimeout(n)},o=()=>{r(),n=c((()=>{n=null,e()}),t)};return o.t=r,o},h=e=>{let t,n;return(...r)=>(t||(t=!0,n=e(...r)),n)},f=-1,_=(e,t)=>{const n=e.o[t];return n===f?e.i:n},w=(e,t,n)=>{if(!e.l)return 0;if(e.u>=t)return n?e.h[t]+_(e,t):e.h[t];let r=e.u,o=e.h[r];for(;r<=t&&(e.h[r]=o,r!==t||n);)o+=_(e,r),r++;return e.u=t,o},g=(e,t)=>w(e,t),m=(e,t,n)=>{let i=0;if(n>=0)for(;t<e.l-1;){const r=_(e,t++);if((i+=r)>=n){i-r/2>=n&&t--;break}}else for(;t>0;){const r=_(e,--t);if((i-=r)<=n){i+r/2<n&&t++;break}}return r(o(t,0),e.l-1)},v=(e,t,n,r)=>m(e,n,t-r),p=(e,t,n)=>({i:n?n.i:t,l:e,u:n?r(n.u,e-1):0,o:d(e,(e=>{const t=n&&n.o[e];return u(t)?t:f})),h:d(e,(e=>{if(0===e)return 0;const t=n&&n.h[e];return u(t)?t:f}))}),S=e=>e.reduce(((e,[t])=>e+t),0),b=(e,t)=>t.map((([t,n])=>[n-_(e,t),t])),z=(e,t,n=0,s,l,d)=>{const a=!t,h=t||40;let z,I,x=h*o(n-1,0),R=0,y=0,k=p(e,h),O=0,T=!1,C=[0,n];const M=new Set,H=()=>(e=>w(e,e.l-1,!0))(k),W=()=>H()-x,L=e=>{const t=O;return O=e,0!==O&&(0===t&&(1===O||2===O)||void 0)};return{_(){const[e,t]=C,n=g(k,e),r=v(k,R,e,n),o=m(k,r,x);return e===r&&t===o?C:C=[r,o]},g:e=>k.o[e]===f,m:e=>((e,t,n)=>{for(let r=t;r<=n;r++)if(e.o[r]===f)return!0;return!1})(k,o(0,e-2),r(k.l-1,e+2)),v(e){const t=g(k,e);return s?t+o(0,x-H()):t},p:e=>_(k,e),S:()=>k.l,I:()=>R,R:W,k:()=>x,O:H,T:()=>o(H(),x),C:()=>y,M(){const e=z;return z=void 0,e},H:e=>v(k,e,0,0),W:()=>(I&&I[1](),new Promise(((e,t)=>{let n=!1;const r=()=>{n||(n=!0,e(),I=void 0)};I=[r,t],c(r,250)}))),L:e=>(M.add(e),()=>{M.delete(e)}),J(e,t){let n,s,c=!1;switch(e){case 1:{const e=t.filter((([e,t])=>k.o[e]!==t));if(!e.length)break;let o=0;if(2===O)o=S(b(k,e));else if(3===O){const t=b(k,e),[n]=C;0===R||(o=R>W()-1.5?S(t):S(t.filter((([,e])=>e<n))))}o&&(z=o,y++);let i=!1;e.forEach((([e,t])=>{((e,t,n)=>{const o=e.o[t]===f;return e.o[t]=n,e.u=r(t,e.u),o})(k,e,t)&&(i=!0)})),a&&i&&!R&&(e=>{const t=e.o.filter((e=>e!==f)),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)})(k),T=n=c=!0;break}case 2:c=x!==t,x=t;break;case 3:case 4:if(R===t)break;if(3===e){const e=(()=>{const e=T;return T=!1,e})();0!==O&&e||3===O||(s=L(R>t?2:1)),n=i(R-t)>x}R=o(0,r(W(),t)),c=!0;break;case 5:s=L(t?3:0)}c&&(M.forEach((e=>{e(n)})),3===e&&d(R)),I&&1===e&&I[0](),u(s)&&l(s)},$:()=>O,q(e){k.l!==e&&(k=p(e,h,k))}}},I="undefined"!=typeof window?t.useLayoutEffect:t.useEffect,x="current",R=e=>{const n=[];return t.Children.forEach(e,(e=>{u(e)&&"boolean"!=typeof e&&n.push(e)})),n},y=e=>{const n=t.useRef(e);return I((()=>{n[x]=e}),[e]),n},k=(e,r,o)=>{const[i,s]=t.useState(r),l=y(r);if(t.useLayoutEffect((()=>{const t=()=>{s((()=>l[x]()))};return e.L((e=>{e?n.flushSync(t):t()}))}),[]),o){const e=r();i!==e&&s(e)}return i},O=/*#__PURE__*/h((e=>{const t="scrollLeft",n=e[t];e[t]=1;const r=e[t]<1;return e[t]=n,r})),T=(e,t,n)=>(()=>{let r=s()-50;return(...o)=>{const i=s();r+50<i&&(r=i,(r=>{if(0!==e.$()&&!r.ctrlKey&&(t?r.deltaX:r.deltaY)){const t=e.I();t>0&&t<e.R()&&n()}})(...o))}})(),C=(e,t,n)=>{let i;const s=t?"scrollLeft":"scrollTop",l=()=>i?t?i.scrollWidth:i.scrollHeight:0,c=(r,o)=>t&&n?O(i)||o?-r:e.R()-r:r,u=async(t,n)=>{if(!i)return;const o=()=>r(n(),l()-e.k());for(;e.J(4,o()),e.m(t);)try{await e.W()}catch(e){return}i[s]=c(o()),e.J(5,!0)};return{D(n){i=n;const r=()=>{e.J(3,c(n[s]))},o=a((()=>{r(),e.J(5,!1)}),150),l=()=>{r(),o()},u=T(e,t,o);return n.addEventListener("scroll",l),n.addEventListener("wheel",u,{passive:!0}),()=>{n.removeEventListener("scroll",l),n.removeEventListener("wheel",u),o.t()}},j:l,A(t){t=o(t,0),u(e.H(t),(()=>t))},B(t){t=o(r(t,e.S()-1),0),u(t,(()=>e.v(t)))},F:e=>{i&&(i[s]+=c(e,!0))}}},M=(e,t)=>{const n=t?"scrollX":"scrollY",r=t?"offsetLeft":"offsetTop";return{D(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.J(3,window[n]-s(o,0))},c=a((()=>{l(),e.J(5,!1)}),150),u=()=>{l(),c()},d=T(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()}},F:e=>{window.scrollBy(t?e:0,t?0:e)}}},H=e=>{const n=t.useRef();return n[x]||(n[x]=e())},W=(e,t)=>{let n;const r=t?"width":"height",o=new WeakMap,i=h((()=>new ResizeObserver((t=>{const i=[];for(const{target:s,contentRect:l}of t)if(s===n)e.J(2,l[r]);else{const e=o.get(s);u(e)&&i.push([e,l[r]])}i.length&&e.J(1,i)}))));return{U(e){n=e;const t=i();return t.observe(e),()=>{t.disconnect()}},P(e,t){const n=i();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},L=(e,t)=>{const n=t?"width":"height",r=t?"innerWidth":"innerHeight",o=new WeakMap,i=h((()=>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.J(1,r)}))));return{U(){const t=()=>{e.J(2,window[r])};return window.addEventListener("resize",t),t(),()=>{window.removeEventListener("resize",t),i().disconnect()}},P(e,t){const n=i();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},E=(e,t)=>{let n;const r="height",i="width",s=new WeakMap,l=new Set,c=new Set,u=new Map,d=(e,t)=>`${e}-${t}`,a=h((()=>new ResizeObserver((a=>{const h=new Set,f=new Set;for(const{target:o,contentRect:l}of a)if(o===n)e.J(2,l[r]),t.J(2,l[i]);else{const e=s.get(o);if(e){const[t,n]=e,o=d(t,n),s=u.get(o),c=[l[r],l[i]];let a,_;s?(s[0]!==c[0]&&(a=!0),s[1]!==c[1]&&(_=!0)):a=_=!0,a&&h.add(t),_&&f.add(n),(a||_)&&u.set(o,c)}}if(h.size){const t=[];h.forEach((e=>{let n=0;c.forEach((t=>{const r=u.get(d(e,t));r&&(n=o(n,r[0]))})),n&&t.push([e,n])})),e.J(1,t)}if(f.size){const e=[];f.forEach((t=>{let n=0;l.forEach((e=>{const r=u.get(d(e,t));r&&(n=o(n,r[1]))})),n&&e.push([t,n])})),t.J(1,e)}}))));return{U(e){n=e;const t=a();return t.observe(e),()=>{t.disconnect()}},P(e,t,n){const r=a();return s.set(e,[t,n]),l.add(t),c.add(n),r.observe(e),()=>{s.delete(e),r.unobserve(e)}}}},J=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((({V:n,X:r,Y:o,G:i,K:s,N:l,Z:c})=>{const u=t.useRef(null),d=k(o,(()=>o.v(i)),!0),a=k(o,(()=>o.g(i)),!0);return I((()=>r.P(u[x],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"]:d,visibility:a?"hidden":"visible"};return l&&(t.display="flex"),t}),[d,a]),children:n})})),q=t.forwardRef((({children:n,overscan:i=4,initialItemSize:s,initialItemCount:c,horizontal:d,mode:a,element:h=J,itemElement:f="div",onScroll:_,onScrollStop:w,onRangeChange:g,...m},v)=>{const p=t.useMemo((()=>R(n)),[n]),S=p.length,b=y(_),O=y(w),[T,M]=t.useState(!1),[L,E,q,D,j]=H((()=>{const e=!!d,t="rtl"===a,n=z(S,s,c,"reverse"===a,(e=>{M(e),e||O[x]&&O[x]()}),(e=>{b[x]&&b[x](e)}));return[n,W(n,e),C(n,e,t),e,t]}));L.q(S);const[A,B]=k(L,L._),F=k(L,L.C),U=k(L,L.T,!0),P=t.useRef(null);I((()=>{const e=P[x],t=E.U(e),n=q.D(e);return()=>{t(),n()}}),[]),I((()=>{const e=L.M();e&&q.F(e)}),[F]),t.useEffect((()=>{g&&g({start:A,end:B,count:S})}),[A,B]),t.useImperativeHandle(v,(()=>({get scrollOffset(){return L.I()},get scrollSize(){return q.j()},get viewportSize(){return L.k()},scrollToIndex:q.B,scrollTo:q.A,scrollBy(e){q.A(L.I()+e)}})),[]);const V=o(A-i,0),X=r(B+i,S-1),Y=t.useMemo((()=>{const t=[];for(let n=V;n<=X;n++){const r=p[n];u(r)&&t.push(e.jsx($,{X:E,Y:L,G:n,K:f,V:r,N:D,Z:j},(null==r?void 0:r.key)||n))}return t}),[p,V,X]);return e.jsx(h,{ref:P,width:D?U:void 0,height:D?void 0:U,scrolling:T,attrs:t.useMemo((()=>({...m,style:{overflow:D?"auto hidden":"hidden auto",display:D?"inline-block":"block",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...m.style}})),l(m)),children:Y})})),D=(e,t)=>`${e}-${t}`,j=t.memo((({V:n,X:r,ee:o,te:i,ne:s,re:l,K:c,Z:u})=>{const d=t.useRef(null),a=k(o,(()=>o.v(s)),!0),h=k(i,(()=>i.v(l)),!0),f=k(o,(()=>o.g(s)),!0),_=k(i,(()=>i.g(l)),!0),w=k(o,(()=>o.p(s)),!0),g=k(i,(()=>i.p(l)),!0);return I((()=>r.P(d[x],s,l)),[l,s]),e.jsx(c,{ref:d,style:t.useMemo((()=>({display:"grid",margin:0,padding:0,position:"absolute",top:a,[u?"right":"left"]:h,visibility:f||_?"hidden":"visible",minHeight:w,minWidth:g})),[a,h,g,w,f,_]),children:n})})),A=t.forwardRef((({children:n,row:i,col:s,cellHeight:c=40,cellWidth:u=100,overscan:d=2,initialRowCount:a,initialColCount:h,rtl:f,element:_=J,cellElement:w="div",...g},m)=>{const[v,p]=t.useState(!1),[S,b]=t.useState(!1),[R,y,O,T,M,W]=H((()=>{const e=!!f,t=()=>{},n=z(i,c,a,!1,p,t),r=z(s,u,h,!1,b,t);return[n,r,E(n,r),C(n,!1,e),C(r,!0,e),e]}));R.q(i),y.q(s);const[L,$]=k(R,R._),[q,A]=k(y,y._),B=k(R,R.C),F=k(y,y.C),U=k(R,R.T,!0),P=k(y,y.T,!0),V=t.useRef(null);I((()=>{const e=V[x],t=O.U(e),n=T.D(e),r=M.D(e);return()=>{t(),n(),r()}}),[]),I((()=>{const e=R.M();e&&T.F(e)}),[B]),I((()=>{const e=y.M();e&&M.F(e)}),[F]),t.useImperativeHandle(m,(()=>({get scrollOffset(){return[y.I(),R.I()]},get scrollSize(){return[M.j(),T.j()]},get viewportSize(){return[y.k(),R.k()]},scrollToIndex(e,t){M.B(e),T.B(t)},scrollTo(e,t){M.A(e),T.A(t)},scrollBy(e,t){M.A(y.I()+e),T.A(R.I()+t)}})),[]);const X=t.useMemo((()=>{const e=new Map;return(t,r)=>{let o=e.get(D(t,r));return o||e.set(D(t,r),o=n({rowIndex:t,colIndex:r})),o}}),[n]),Y=o(L-d,0),G=r($+d,i-1),K=o(q-d,0),N=r(A+d,s-1),Q=t.useMemo((()=>{const t=[];for(let n=Y;n<=G;n++)for(let r=K;r<=N;r++)t.push(e.jsx(j,{X:O,ee:R,te:y,ne:n,re:r,K:w,V:X(n,r),Z:W},D(n,r)));return t}),[X,Y,G,K,N]);return e.jsx(_,{ref:V,width:P,height:U,scrolling:v||S,attrs:t.useMemo((()=>({...g,style:{overflow:"auto",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...g.style}})),l(g)),children:Q})}));exports.VGrid=A,exports.VList=q,exports.WVList=({children:n,overscan:i=4,initialItemSize:s,initialItemCount:c,horizontal:d,element:a=J,itemElement:h="div",onScrollStop:f,onRangeChange:_,...w})=>{const g=t.useMemo((()=>R(n)),[n]),m=g.length,v=y(f),[p,S]=t.useState(!1),[b,O,T,C]=H((()=>{const e=!!d,t=z(m,s,c,!1,(e=>{S(e),e||v[x]&&v[x]()}),(()=>{}));return[t,L(t,e),M(t,e),e]}));b.q(m);const[W,E]=k(b,b._),q=k(b,b.C),D=k(b,b.T,!0),j=t.useRef(null);I((()=>{const e=j[x],t=O.U(e),n=T.D(e);return()=>{t(),n()}}),[]),I((()=>{const e=b.M();e&&T.F(e)}),[q]),t.useEffect((()=>{_&&_({start:W,end:E,count:m})}),[W,E]);const A=o(W-i,0),B=r(E+i,m-1),F=t.useMemo((()=>{const t=[];for(let n=A;n<=B;n++){const r=g[n];u(r)&&t.push(e.jsx($,{X:O,Y:b,G:n,K:h,V:r,N:C,Z:!1},(null==r?void 0:r.key)||n))}return t}),[g,A,B]);return e.jsx(a,{ref:j,width:C?D:void 0,height:C?void 0:D,scrolling:p,attrs:t.useMemo((()=>({...w,style:{overflow:"visible",display:C?"inline-block":"block",width:C?"auto":"100%",height:C?"100%":"auto",padding:0,margin:0,...w.style}})),l(w)),children:F})};
3
3
  //# sourceMappingURL=index.js.map