virtua 0.3.0 → 0.4.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 +5 -5
- package/lib/core/cache.d.ts +4 -2
- package/lib/core/resizer.d.ts +0 -2
- package/lib/core/scroller.d.ts +2 -2
- package/lib/core/store.d.ts +11 -11
- package/lib/core/utils.d.ts +2 -0
- 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 +7 -5
- package/package.json +11 -7
package/lib/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{jsx as e}from"react/jsx-runtime";import{useLayoutEffect as t,useEffect as r,useRef as n,useState as o,forwardRef as
|
|
2
|
+
import{jsx as e}from"react/jsx-runtime";import{useLayoutEffect as t,useEffect as r,useRef as n,useState as o,forwardRef as l,useMemo as i,memo as s,Children as c,useImperativeHandle as u}from"react";import{flushSync as a}from"react-dom";const _=Math.min,d=Math.max,h=Math.abs,f=Date.now,g=setTimeout,m=e=>null!=e,w=(e,t)=>Array.from({length:e},((e,r)=>t(r))),v=e=>{let t,r;return(...n)=>(t||(t=!0,r=e(...n)),r)},S=-1,p=(e,t)=>{const r=e.t[t];return r===S?e.o:r},z=(e,t,r)=>{if(!e.l)return 0;if(e.i>=t)return r?e.u[t]+p(e,t):e.u[t];let n=e.i,o=e.u[n];for(;n<=t&&(e.u[n]=o,n!==t||r);)o+=p(e,n),n++;return e.i=t,o},b=(e,t)=>z(e,t),I=(e,t,r)=>{let n=0;if(r>=0)for(;t<e.l-1;){const o=p(e,t++);if((n+=o)>=r){n-o/2>=r&&t--;break}}else for(;t>0;){const o=p(e,--t);if((n-=o)<=r){n+o/2<r&&t++;break}}return _(d(t,0),e.l-1)},x=(e,t,r,n)=>I(e,r,t-n),y=(e,t,r)=>({o:r?r.o:t,l:e,i:r?_(r.i,e-1):0,t:w(e,(e=>{const t=r&&r.t[e];return m(t)?t:S})),u:w(e,(e=>{if(0===e)return 0;const t=r&&r.u[e];return m(t)?t:S}))}),R=e=>e.reduce(((e,[t])=>e+t),0),T=(e,t)=>t.map((([t,r])=>[r-p(e,t),t])),k=(e,t,r=0,n,o,l)=>{const i=!t,s=t||40;let c,u,a=s*d(r-1,0),f=0,w=0,v=y(e,s),k=0,C=!1,M=[0,r];const O=new Set,H=()=>(e=>z(e,e.l-1,!0))(v),W=e=>{const t=k;return k=e,0!==k&&(0===t&&(1===k||2===k)||void 0)};return{_(){const[e,t]=M,r=b(v,e),n=x(v,f,e,r),o=I(v,n,a);return e===n&&t===o?M:M=[n,o]},h:e=>v.t[e]===S,g:e=>((e,t,r)=>{for(let n=t;n<=r;n++)if(e.t[n]===S)return!0;return!1})(v,d(0,e-2),_(v.l-1,e+2)),m(e){const t=b(v,e);return n?t+d(0,a-H()):t},v:e=>p(v,e),S:()=>f,p:()=>a,I:()=>H(),R:()=>d(H(),a),T:()=>w,k(){const e=c;return c=void 0,e},C:e=>x(v,e,0,0),M:()=>(u&&u[1](),new Promise(((e,t)=>{let r=!1;const n=()=>{r||(r=!0,e(),u=void 0)};u=[n,t],g(n,250)}))),O:e=>(O.add(e),()=>{O.delete(e)}),H(e,t){let r,n,s=!1;switch(e){case 1:{const e=t.filter((([e,t])=>v.t[e]!==t));if(!e.length)break;let n=0;if(2===k)n=R(T(v,e));else if(3===k){const t=T(v,e),[r]=M;0===f||(n=H()<=f+a?R(t):R(t.filter((([,e])=>e<r))))}n&&(c=n,w++);let o=!1;e.forEach((([e,t])=>{((e,t,r)=>{const n=e.t[t]===S;return e.t[t]=r,e.i=_(t,e.i),n})(v,e,t)&&(o=!0)})),i&&o&&!f&&(e=>{const t=e.t.filter((e=>e!==S)),r=t[0];e.o=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)})(v),C=r=s=!0;break}case 2:s=a!==t,a=t;break;case 3:case 4:if(f===t)break;if(3===e){const e=(()=>{const e=C;return C=!1,e})();0!==k&&e||3===k||(n=W(f>t?2:1)),r=h(f-t)>a}f=t,s=!0;break;case 5:n=W(t?3:0)}s&&(O.forEach((e=>{e(r)})),3===e&&l(f)),u&&1===e&&u[0](),m(n)&&o(n)},W:()=>k,$(e){v.l!==e&&(v=y(e,s,v))}}},C="undefined"!=typeof window?t:r,M="current",O=e=>{const t=n(e);return C((()=>{t[M]=e}),[e]),t},H=(e,r,n)=>{const[l,i]=o(r),s=O(r);if(t((()=>{const t=()=>{i((()=>s[M]()))};return e.O((e=>{e?a(t):t()}))}),[]),n){const e=r();l!==e&&i(e)}return l},W=v((e=>{const t="scrollLeft",r=e[t];e[t]=1;const n=e[t]<1;return e[t]=r,n})),$=(e,t,r)=>{let n;const o=t?"scrollLeft":"scrollTop",l=()=>n?t?n.scrollWidth:n.scrollHeight:0,i=(o,l)=>t&&r?W(n)||l?-o:e.I()-e.p()-o:o,s=async(t,r)=>{if(!n)return;const s=()=>{let t=r();const n=l(),o=e.p();return n-(t+o)<=0&&(t=n-o),t};for(;e.H(4,s()),e.g(t);)try{await e.M()}catch(e){return}n[o]=i(s()),e.H(5,!0)};return{D(r){n=r;const l=()=>{e.H(3,i(r[o]))},s=(()=>{let t;const r=()=>{m(t)&&clearTimeout(t)},n=()=>{r(),t=g((()=>{t=null,l(),e.H(5,!1)}),150)};return n.J=r,n})(),c=()=>{l(),s()},u=(()=>{let r=f()-50;return(...n)=>{const o=f();r+50<o&&(r=o,(r=>{if(0!==e.W()&&!r.ctrlKey&&(t?r.deltaX:r.deltaY)){const t=e.S();t>0&&t<e.I()-e.p()&&s()}})(...n))}})();return r.addEventListener("scroll",c),r.addEventListener("wheel",u,{passive:!0}),()=>{r.removeEventListener("scroll",c),r.removeEventListener("wheel",u),s.J()}},L:l,A(t){t=d(t,0),s(e.C(t),(()=>t))},B(t,r){t=d(_(t,r-1),0),s(t,(()=>e.m(t)))},F:e=>{n&&(n[o]+=i(e,!0))}}},D=e=>{const t=n();return t[M]||(t[M]=e())},E=(e,t)=>{let r;const n=t?"width":"height",o=new WeakMap,l=v((()=>new ResizeObserver((t=>{const l=[];for(const{target:i,contentRect:s}of t)if(i===r)e.H(2,s[n]);else{const e=o.get(i);m(e)&&l.push([e,s[n]])}l.length&&e.H(1,l)}))));return{U(e){r=e;const t=l();return t.observe(e),()=>{t.disconnect()}},j(e,t){const r=l();return o.set(e,t),r.observe(e),()=>{o.delete(e),r.unobserve(e)}}}},J=(e,t)=>{let r;const n="height",o="width",l=new WeakMap,i=new Set,s=new Set,c=new Map,u=(e,t)=>`${e}-${t}`,a=v((()=>new ResizeObserver((a=>{const _=new Set,h=new Set;for(const{target:i,contentRect:s}of a)if(i===r)e.H(2,s[n]),t.H(2,s[o]);else{const e=l.get(i);if(e){const[t,r]=e,l=u(t,r),i=c.get(l),a=[s[n],s[o]];let d,f;i?(i[0]!==a[0]&&(d=!0),i[1]!==a[1]&&(f=!0)):d=f=!0,d&&_.add(t),f&&h.add(r),(d||f)&&c.set(l,a)}}if(_.size){const t=[];_.forEach((e=>{let r=0;s.forEach((t=>{const n=c.get(u(e,t));n&&(r=d(r,n[0]))})),r&&t.push([e,r])})),e.H(1,t)}if(h.size){const e=[];h.forEach((t=>{let r=0;i.forEach((e=>{const n=c.get(u(e,t));n&&(r=d(r,n[1]))})),r&&e.push([t,r])})),t.H(1,e)}}))));return{U(e){r=e;const t=a();return t.observe(e),()=>{t.disconnect()}},j(e,t,r){const n=a();return l.set(e,[t,r]),i.add(t),s.add(r),n.observe(e),()=>{l.delete(e),n.unobserve(e)}}}},L=/*#__PURE__*/l((({children:t,attrs:r,width:n,height:o,scrolling:l},s)=>e("div",{ref:s,...r,children:e("div",{style:i((()=>({position:"relative",visibility:"hidden",width:null!=n?n:"100%",height:null!=o?o:"100%",pointerEvents:l?"none":"auto"})),[n,o,l]),children:t})}))),A=/*#__PURE__*/s((({P:t,V:r,q:o,G:l,K:s,N:c,X:u})=>{const a=n(null),_=H(o,(()=>o.m(l)),!0),d=H(o,(()=>o.h(l)),!0);return C((()=>r.j(a[M],l)),[l]),e(s,{ref:a,style:i((()=>{const e=u?"right":"left",t={margin:0,padding:0,position:"absolute",[c?"height":"width"]:"100%",[c?"top":e]:0,[c?e:"top"]:_,visibility:d?"hidden":"visible"};return c&&(t.display="flex"),t}),[_,d]),children:t})})),B=({P:t,Y:r,q:n,K:o,Z:l,ee:s,N:c})=>{const u=H(n,n.R);return e(o,{ref:r,width:c?u:void 0,height:c?void 0:u,scrolling:l,attrs:i((()=>({...s,style:{overflow:c?"auto hidden":"hidden auto",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...s.style}})),[s]),children:t})},F=/*#__PURE__*/l((({children:t,overscan:l=4,initialItemSize:s,initialItemCount:a,horizontal:h,mode:f,element:g=L,itemElement:w="div",onScroll:v,onScrollStop:S,onRangeChange:p,...z},b)=>{const I=i((()=>{const e=[];return c.forEach(t,(t=>{(e=>!m(e)||"boolean"==typeof e)(t)||e.push(t)})),e}),[t]),x=I.length,y=O(v),R=O(S),[T,W]=o(!1),[J,F,U,j,P]=D((()=>{const e=!!h,t="rtl"===f,r=k(x,s,a,"reverse"===f,(e=>{W(e),e||R[M]&&R[M]()}),(e=>{y[M]&&y[M](e)}));return[r,E(r,e),$(r,e,t),e,t]}));J.$(x);const[V,q]=H(J,J._),G=H(J,J.T),K=n(null);C((()=>{const e=K[M],t=F.U(e),r=U.D(e);return()=>{t(),r()}}),[]),C((()=>{const e=J.k();e&&U.F(e)}),[G]),r((()=>{p&&p({start:V,end:q,count:x})}),[V,q]),u(b,(()=>({get scrollOffset(){return J.S()},get scrollSize(){return U.L()},get viewportSize(){return J.p()},scrollToIndex(e){U.B(e,x)},scrollTo:U.A,scrollBy(e){U.A(J.S()+e)}})),[x]);const N=d(V-l,0),Q=_(q+l,x-1),X=i((()=>{const t=[];for(let r=N;r<=Q;r++){const n=I[r];m(n)&&t.push(e(A,{V:F,q:J,G:r,K:w,P:n,N:j,X:P},(null==n?void 0:n.key)||r))}return t}),[I,N,Q]);return e(B,{Y:K,q:J,K:g,Z:T,P:X,ee:z,N:j})})),U=(e,t)=>`${e}-${t}`,j=/*#__PURE__*/s((({P:t,V:r,te:o,re:l,ne:s,oe:c,K:u,X:a})=>{const _=n(null),d=H(o,(()=>o.m(s)),!0),h=H(l,(()=>l.m(c)),!0),f=H(o,(()=>o.h(s)),!0),g=H(l,(()=>l.h(c)),!0),m=H(o,(()=>o.v(s)),!0),w=H(l,(()=>l.v(c)),!0);return C((()=>r.j(_[M],s,c)),[c,s]),e(u,{ref:_,style:i((()=>({display:"grid",margin:0,padding:0,position:"absolute",top:d,[a?"right":"left"]:h,visibility:f||g?"hidden":"visible",minHeight:m,minWidth:w})),[d,h,w,m,f,g]),children:t})})),P=({P:t,Y:r,le:n,ie:o,K:l,Z:s,ee:c})=>{const u=H(n,n.R),a=H(o,o.R);return e(l,{ref:r,width:a,height:u,scrolling:s,attrs:i((()=>({...c,style:{overflow:"auto",contain:"strict",width:"100%",height:"100%",padding:0,margin:0,...c.style}})),[c]),children:t})},V=/*#__PURE__*/l((({children:t,row:r,col:l,cellHeight:s=40,cellWidth:c=100,overscan:a=2,initialRowCount:h,initialColCount:f,rtl:g,element:m=L,cellElement:w="div",...v},S)=>{const[p,z]=o(!1),[b,I]=o(!1),[x,y,R,T,O,W]=D((()=>{const e=!!g,t=()=>{},n=k(r,s,h,!1,z,t),o=k(l,c,f,!1,I,t);return[n,o,J(n,o),$(n,!1,e),$(o,!0,e),e]}));x.$(r),y.$(l);const[E,A]=H(x,x._),[B,F]=H(y,y._),V=H(x,x.T),q=H(y,y.T),G=n(null);C((()=>{const e=G[M],t=R.U(e),r=T.D(e),n=O.D(e);return()=>{t(),r(),n()}}),[]),C((()=>{const e=x.k();e&&T.F(e)}),[V]),C((()=>{const e=y.k();e&&O.F(e)}),[q]),u(S,(()=>({get scrollOffset(){return[y.S(),x.S()]},get scrollSize(){return[O.L(),T.L()]},get viewportSize(){return[y.p(),x.p()]},scrollToIndex(e,t){O.B(e,l),T.B(t,r)},scrollTo(e,t){O.A(e),T.A(t)},scrollBy(e,t){O.A(y.S()+e),T.A(x.S()+t)}})),[r,l]);const K=i((()=>{const e=new Map;return(r,n)=>{let o=e.get(U(r,n));return o||e.set(U(r,n),o=t({rowIndex:r,colIndex:n})),o}}),[t]),N=d(E-a,0),Q=_(A+a,r-1),X=d(B-a,0),Y=_(F+a,l-1),Z=i((()=>{const t=[];for(let r=N;r<=Q;r++)for(let n=X;n<=Y;n++)t.push(e(j,{V:R,te:x,re:y,ne:r,oe:n,K:w,P:K(r,n),X:W},U(r,n)));return t}),[K,N,Q,X,Y]);return e(P,{Y:G,le:x,ie:y,K:m,Z:p||b,P:Z,ee:v})}));export{V as VGrid,F as VList};
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|