virtua 0.6.1 → 0.7.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.
- package/lib/core/cache.d.ts +2 -2
- package/lib/core/scroller.d.ts +3 -1
- package/lib/core/store.d.ts +4 -6
- package/lib/core/types.d.ts +7 -0
- package/lib/core/utils.d.ts +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/lib/react/VList.d.ts +3 -2
- package/lib/react/utils.d.ts +3 -1
- package/package.json +9 -1
package/lib/core/cache.d.ts
CHANGED
|
@@ -9,10 +9,10 @@ export type Cache = DeepReadonly<{
|
|
|
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
|
+
export declare const computeOffset: (cache: Writeable<Cache>, index: number) => number;
|
|
12
13
|
export declare const computeTotalSize: (cache: Writeable<Cache>) => number;
|
|
13
|
-
export declare const computeStartOffset: (cache: Writeable<Cache>, index: number) => number;
|
|
14
14
|
export declare const findIndex: (cache: Cache, i: number, distance: number) => number;
|
|
15
|
-
export declare const findStartIndexWithOffset: (cache: Cache
|
|
15
|
+
export declare const findStartIndexWithOffset: (cache: Writeable<Cache>, offset: number, initialIndex: 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;
|
package/lib/core/scroller.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { ScrollJump, VirtualStore } from "./store";
|
|
2
|
+
import { ScrollToIndexAlign } from "./types";
|
|
2
3
|
export type Scroller = {
|
|
3
4
|
_initRoot: (rootElement: HTMLElement) => () => void;
|
|
4
5
|
_getActualScrollSize: () => number;
|
|
5
6
|
_scrollTo: (offset: number) => void;
|
|
6
|
-
|
|
7
|
+
_scrollBy: (offset: number) => void;
|
|
8
|
+
_scrollToIndex: (index: number, align?: ScrollToIndexAlign) => void;
|
|
7
9
|
_fixScrollJump: (jump: ScrollJump) => void;
|
|
8
10
|
};
|
|
9
11
|
export declare const createScroller: (store: VirtualStore, isHorizontal: boolean, isRtl: boolean) => Scroller;
|
package/lib/core/store.d.ts
CHANGED
|
@@ -7,12 +7,12 @@ export declare const SCROLL_IDLE = 0;
|
|
|
7
7
|
export declare const SCROLL_DOWN = 1;
|
|
8
8
|
export declare const SCROLL_UP = 2;
|
|
9
9
|
export declare const ACTION_ITEM_RESIZE = 1;
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const ACTION_VIEWPORT_RESIZE = 2;
|
|
11
11
|
export declare const ACTION_SCROLL = 3;
|
|
12
12
|
export declare const ACTION_BEFORE_MANUAL_SCROLL = 4;
|
|
13
13
|
export declare const ACTION_SCROLL_END = 5;
|
|
14
14
|
export declare const ACTION_MANUAL_SCROLL = 6;
|
|
15
|
-
type Actions = [type: typeof ACTION_ITEM_RESIZE, entries: ItemResize[]] | [type: typeof
|
|
15
|
+
type Actions = [type: typeof ACTION_ITEM_RESIZE, entries: ItemResize[]] | [type: typeof ACTION_VIEWPORT_RESIZE, size: number] | [type: typeof ACTION_SCROLL, offset: number] | [type: typeof ACTION_BEFORE_MANUAL_SCROLL, offset: number] | [type: typeof ACTION_SCROLL_END, dummy?: void] | [type: typeof ACTION_MANUAL_SCROLL, dummy?: void];
|
|
16
16
|
type Subscriber = (sync?: boolean) => void;
|
|
17
17
|
export declare const UPDATE_SCROLL = 1;
|
|
18
18
|
export declare const UPDATE_SIZE = 2;
|
|
@@ -23,21 +23,19 @@ export type VirtualStore = {
|
|
|
23
23
|
_getCache(): CacheSnapshot;
|
|
24
24
|
_getRange(): ItemsRange;
|
|
25
25
|
_isUnmeasuredItem(index: number): boolean;
|
|
26
|
-
|
|
26
|
+
_hasUnmeasuredItemsInTargetViewport(offset: number): boolean;
|
|
27
27
|
_getItemOffset(index: number): number;
|
|
28
28
|
_getItemSize(index: number): number;
|
|
29
29
|
_getItemLength(): number;
|
|
30
30
|
_getScrollOffset(): number;
|
|
31
31
|
_getScrollOffsetMax(): number;
|
|
32
|
+
_getIsScrolling(): boolean;
|
|
32
33
|
_getViewportSize(): number;
|
|
33
|
-
_getScrollSize(): number;
|
|
34
34
|
_getCorrectedScrollSize(): number;
|
|
35
35
|
_getJumpCount(): number;
|
|
36
36
|
_flushJump(): ScrollJump;
|
|
37
|
-
_getItemIndexForScrollTo(offset: number): number;
|
|
38
37
|
_subscribe(target: number, cb: Subscriber): () => void;
|
|
39
38
|
_update(...action: Actions): void;
|
|
40
|
-
_getIsScrolling(): boolean;
|
|
41
39
|
_updateCacheLength(length: number): void;
|
|
42
40
|
};
|
|
43
41
|
export declare const createVirtualStore: (elementsCount: number, itemSize?: number, initialItemCount?: number, cache?: Cache, isReverse?: boolean, shouldAutoEstimateItemSize?: boolean) => VirtualStore;
|
package/lib/core/types.d.ts
CHANGED
|
@@ -13,4 +13,11 @@ declare const cacheSymbol: unique symbol;
|
|
|
13
13
|
export interface CacheSnapshot {
|
|
14
14
|
[cacheSymbol]: never;
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Alignment of item when calling scrollToIndex method.
|
|
18
|
+
*
|
|
19
|
+
* - `start`(default): Align the item to the start of the list.
|
|
20
|
+
* - `end`: Align the item to the end of the list.
|
|
21
|
+
*/
|
|
22
|
+
export type ScrollToIndexAlign = "start" | "end";
|
|
16
23
|
export {};
|
package/lib/core/utils.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare const values: {
|
|
|
9
9
|
(o: {}): any[];
|
|
10
10
|
};
|
|
11
11
|
export declare const timeout: typeof setTimeout;
|
|
12
|
+
export declare const clamp: (value: number, minValue: number, maxValue: number) => number;
|
|
12
13
|
export declare const exists: <T>(v: T) => v is Exclude<T, null | undefined>;
|
|
13
14
|
export declare const median: (arr: number[]) => number;
|
|
14
15
|
export declare const debounce: <T extends (...args: any[]) => void>(fn: T, ms: number) => {
|
package/lib/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type { CacheSnapshot } from "./core/types";
|
|
1
|
+
export type { CacheSnapshot, ScrollToIndexAlign } from "./core/types";
|
|
2
2
|
export * from "./react";
|
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(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;
|
|
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,t,n)=>r(n,o(t,e)),a=e=>null!=e,d=(e,t)=>{let n;const r=()=>{a(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},g=(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+=_(e,n),e.h[++n]=r;return e.u=t,r},w=(e,t,n)=>{let r=0;if(n>=0)for(;t<e.l-1;){const o=_(e,t++);if((r+=o)>=n){r-o/2>=n&&t--;break}}else for(;t>0;){const o=_(e,--t);if((r-=o)<=n){r+o/2<n&&t++;break}}return u(t,0,e.l-1)},m=(e,t,n)=>w(e,n,t-g(e,n)),p=(e,t)=>{for(let n=e.l;n<t;n++)e.o.push(f),e.h.push(0===n?0:f);e.l=t},v=(e,t)=>t.reduce(((t,[n,r])=>t+(r-_(e,n))),0),b=(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 a=t*o(n-1,0),d=0,h=0,b=0,S=0,I=!1,z=!1,R=[0,n];const x=new Set,y=()=>(e=>e.l?g(e,e.l-1)+_(e,e.l-1):0)(s),k=()=>y()-a,O=e=>{const t=S;return S=e,S!==t&&(0===S||0===t)};return{_:()=>JSON.parse(JSON.stringify(s)),g(){const[e,t]=R,n=m(s,d,e),r=w(s,n,a);return e===n&&t===r?R:R=[n,r]},m:e=>s.o[e]===f,p(e){const t=m(s,e,R[0]);return((e,t,n)=>e.o.slice(t,n+1).includes(f))(s,o(0,t-1),r(s.l-1,w(s,t,a)+1))},v(e){const t=g(s,e);return l?t+o(0,a-y()):t},S:e=>_(s,e),I:()=>s.l,R:()=>d,k,O:()=>0!==S,C:()=>a,T:()=>o(y(),a),M:()=>h,H(){const e=b;return b=0,e},J(e,t){const n=[e,t];return x.add(n),()=>{x.delete(n)}},W(e,t){let n,o=0;switch(e){case 1:{const e=t.filter((([e,t])=>s.o[e]!==t));if(!e.length)break;let i=0;if(2===S)i=v(s,e);else if(I){const[t]=R;0===d||(i=d>k()-1.5?v(s,e):v(s,e.filter((([e])=>e<t))))}i&&(b=i,h++,o+=4);let l=!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})(s,e,t)&&(l=!0)})),c&&l&&!d&&(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)})(s),o+=2,z=n=!0;break}case 2:a!==t&&(a=t,o=2);break;case 3:case 4:if(d===t)break;if(3===e){const e=z;z=!1,0!==S&&e||I||O(d>t?2:1)&&(o+=8),n=i(d-t)>a,o+=16}d=u(t,0,k()),o+=1;break;case 5:O(0)&&(o=8),I=!1;break;case 6:I=!0}o&&x.forEach((([e,t])=>{o&e&&t(n)}))},L(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)}}},S="undefined"!=typeof window?t.useLayoutEffect:t.useEffect,I="current",z={},R=(e,t)=>{if(Array.isArray(e))for(const n of e)R(n,t);else a(e)&&"boolean"!=typeof e&&t.push(e)},x=e=>{const t=[];return R(e,t),t},y=e=>{const n=t.useRef(e);return S((()=>{n[I]=e}),[e]),n},k=(e,r,o,i)=>{const[s,l]=t.useState(r),c=y(r);if(t.useLayoutEffect((()=>{const t=()=>{l((()=>c[I]()))};return e.J(o,(e=>{e?n.flushSync(t):t()}))}),[]),i){const e=r();s!==e&&l(e)}return s},O=/*#__PURE__*/h((e=>{const t="scrollLeft",n=e[t];e[t]=1;const r=e[t]<1;return e[t]=n,r})),C=(e,t,n)=>(()=>{let r=s()-50;return(...o)=>{const i=s();r+50<i&&(r=i,(r=>{if(e.O()&&!r.ctrlKey&&(t?r.deltaX:r.deltaY)){const t=e.R();t>0&&t<e.k()&&n()}})(...o))}})(),T=(e,t,n)=>{let r,o;const i=t?"scrollLeft":"scrollTop",s=()=>r?t?r.scrollWidth:r.scrollHeight:0,l=(o,i)=>t&&n?O(r)||i?-o:e.k()-o:o,a=async t=>{if(!r)return;const n=()=>u(t(),0,s()-e.C());for(;;){const t=n();if(e.W(4,t),!e.p(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],c(r,250)}))}catch(e){return}finally{r()}}r[i]=l(n()),e.W(6)};return{$(n){r=n;const o=()=>{e.W(3,l(n[i]))},s=d((()=>{o(),e.W(5)}),150),c=()=>{o(),s()},u=C(e,t,s);return n.addEventListener("scroll",c),n.addEventListener("wheel",u,{passive:!0}),()=>{n.removeEventListener("scroll",c),n.removeEventListener("wheel",u),s.t()}},q:s,B(e){a((()=>e))},j(t){t+=e.R(),a((()=>t))},A(t,n){t=u(t,0,e.I()-1),a("end"===n?()=>e.v(t)+e.S(t)-e.C():()=>e.v(t))},N:e=>{r&&(r[i]+=l(e,!0))}}},M=(e,t)=>{const n=t?"scrollX":"scrollY",r=t?"offsetLeft":"offsetTop";return{$(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.W(3,window[n]-s(o,0))},c=d((()=>{l(),e.W(5)}),150),u=()=>{l(),c()},a=C(e,t,c),h=new IntersectionObserver((([e])=>{i=e.isIntersecting}));return h.observe(o),window.addEventListener("scroll",u),window.addEventListener("wheel",a,{passive:!0}),()=>{h.disconnect(),window.removeEventListener("scroll",u),window.removeEventListener("wheel",a),c.t()}},N:e=>{window.scrollBy(t?e:0,t?0:e)}}},H=e=>{const n=t.useRef();return n[I]||(n[I]=e())},J=(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.W(2,l[r]);else{const e=o.get(s);a(e)&&i.push([e,l[r]])}i.length&&e.W(1,i)}))));return{U(e){n=e;const t=i();return t.observe(e),()=>{t.disconnect()}},V(e,t){const n=i();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},W=(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);a(t)&&r.push([t,i[n]])}r.length&&e.W(1,r)}))));return{U(){const t=()=>{e.W(2,window[r])};return window.addEventListener("resize",t),t(),()=>{window.removeEventListener("resize",t),i().disconnect()}},V(e,t){const n=i();return o.set(e,t),n.observe(e),()=>{o.delete(e),n.unobserve(e)}}}},L=(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}`,d=h((()=>new ResizeObserver((d=>{const h=new Set,f=new Set;for(const{target:o,contentRect:l}of d)if(o===n)e.W(2,l[r]),t.W(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.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{U(e){n=e;const t=d();return t.observe(e),()=>{t.disconnect()}},V(e,t,n){const r=d();return s.set(e,[t,n]),l.add(t),c.add(n),r.observe(e),()=>{s.delete(e),r.unobserve(e)}}}},$=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})}))),q=t.memo((({D:n,P:r,X:o,Y:i,F:s,G:l,K:c})=>{const u=t.useRef(null),a=k(o,(()=>o.v(i)),2,!0),d=k(o,(()=>o.m(i)),2,!0);return S((()=>r.V(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})})),B=t.forwardRef((({children:n,overscan:i=4,initialItemSize:s,initialItemCount:c,horizontal:u,mode:d,cache:h,components:{Root:f=$,Item:_="div"}=z,onScroll:g,onScrollStop:w,onRangeChange:m,...p},v)=>{const R=t.useMemo((()=>x(n)),[n]),O=R.length,C=y(g),M=y(w),[W,L,B,j,A]=H((()=>{const e=!!u,t="rtl"===d,n=b(O,s,c,h,"reverse"===d,!s);return[n,J(n,e),T(n,e,t),e,t]}));W.L(O);const[N,U]=k(W,W.g,3),V=k(W,W.O,8),D=k(W,W.M,4),E=k(W,W.T,2,!0),P=t.useRef(null);S((()=>{const e=P[I],t=L.U(e),n=B.$(e),r=W.J(16,(()=>{C[I]&&C[I](W.R())}));return()=>{t(),n(),r()}}),[]),S((()=>{const e=W.H();e&&B.N(e)}),[D]),t.useEffect((()=>{V||M[I]&&M[I]()}),[V]),t.useEffect((()=>{m&&m(N,U)}),[N,U]),t.useImperativeHandle(v,(()=>({get cache(){return W._()},get scrollOffset(){return W.R()},get scrollSize(){return B.q()},get viewportSize(){return W.C()},scrollToIndex:B.A,scrollTo:B.B,scrollBy:B.j})),[]);const X=o(N-i,0),Y=r(U+i,O-1),F=t.useMemo((()=>{const t=[];for(let n=X;n<=Y;n++){const r=R[n],o=r.key;t.push(e.jsx(q,{P:L,X:W,Y:n,F:_,D:r,G:j,K:A},a(o)?o:"_"+n))}return t}),[R,X,Y]);return e.jsx(f,{ref:P,width:j?E:void 0,height:j?void 0:E,scrolling:V,attrs:t.useMemo((()=>({...p,style:{overflow:j?"auto hidden":"hidden auto",display:j?"inline-block":"block",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...p.style}})),l(p)),children:F})})),j=(e,t)=>`${e}-${t}`,A=t.memo((({D:n,P:r,Z:o,ee:i,te:s,ne:l,F:c,K:u})=>{const a=t.useRef(null),d=k(o,(()=>o.v(s)),2,!0),h=k(i,(()=>i.v(l)),2,!0),f=k(o,(()=>o.m(s)),2,!0),_=k(i,(()=>i.m(l)),2,!0),g=k(o,(()=>o.S(s)),2,!0),w=k(i,(()=>i.S(l)),2,!0);return S((()=>r.V(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:_=$,Cell:g="div"}=z,...w},m)=>{const[p,v,R,x,y,O]=H((()=>{const e=!!f,t=b(i,c,d),n=b(s,u,h);return[t,n,L(t,n),T(t,!1,e),T(n,!0,e),e]}));p.L(i),v.L(s);const[C,M]=k(p,p.g,3),[J,W]=k(v,v.g,3),q=k(p,p.O,8),B=k(v,v.O,8),N=k(p,p.M,4),U=k(v,v.M,4),V=k(p,p.T,2,!0),D=k(v,v.T,2,!0),E=t.useRef(null);S((()=>{const e=E[I],t=R.U(e),n=x.$(e),r=y.$(e);return()=>{t(),n(),r()}}),[]),S((()=>{const e=p.H();e&&x.N(e)}),[N]),S((()=>{const e=v.H();e&&y.N(e)}),[U]),t.useImperativeHandle(m,(()=>({get scrollOffset(){return[v.R(),p.R()]},get scrollSize(){return[y.q(),x.q()]},get viewportSize(){return[v.C(),p.C()]},scrollToIndex(e,t){y.A(e),x.A(t)},scrollTo(e,t){y.B(e),x.B(t)},scrollBy(e,t){y.j(e),x.j(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]),X=o(C-a,0),Y=r(M+a,i-1),F=o(J-a,0),G=r(W+a,s-1),K=t.useMemo((()=>{const t=[];for(let n=X;n<=Y;n++)for(let r=F;r<=G;r++)t.push(e.jsx(A,{P:R,Z:p,ee:v,te:n,ne:r,F:g,D:P(n,r),K:O},j(n,r)));return t}),[P,X,Y,F,G]);return e.jsx(_,{ref:E,width:D,height:V,scrolling:q||B,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:u,cache:d,components:{Root:h=$,Item:f="div"}=z,onScrollStop:_,onRangeChange:g,...w},m)=>{const p=t.useMemo((()=>x(n)),[n]),v=p.length,R=y(_),[O,C,T,J]=H((()=>{const e=!!u,t=b(v,s,c,d,!1,!s);return[t,W(t,e),M(t,e),e]}));O.L(v);const[L,B]=k(O,O.g,3),j=k(O,O.O,8),A=k(O,O.M,4),N=k(O,O.T,2,!0),U=t.useRef(null);S((()=>{const e=U[I],t=C.U(e),n=T.$(e);return()=>{t(),n()}}),[]),S((()=>{const e=O.H();e&&T.N(e)}),[A]),t.useEffect((()=>{j||R[I]&&R[I]()}),[j]),t.useEffect((()=>{g&&g(L,B)}),[L,B]),t.useImperativeHandle(m,(()=>({get cache(){return O._()}})),[]);const V=o(L-i,0),D=r(B+i,v-1),E=t.useMemo((()=>{const t=[];for(let n=V;n<=D;n++){const r=p[n],o=r.key;t.push(e.jsx(q,{P:C,X:O,Y:n,F:f,D:r,G:J,K:!1},a(o)?o:"_"+n))}return t}),[p,V,D]);return e.jsx(h,{ref:U,width:J?N:void 0,height:J?void 0:N,scrolling:j,attrs:t.useMemo((()=>({...w,style:{overflow:"visible",display:J?"inline-block":"block",width:J?"auto":"100%",height:J?"100%":"auto",padding:0,margin:0,...w.style}})),l(w)),children:E})}));exports.VGrid=N,exports.VList=B,exports.WVList=U;
|
|
3
3
|
//# sourceMappingURL=index.js.map
|