virtua 0.37.3 → 0.38.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "virtua",
3
- "version": "0.37.3",
3
+ "version": "0.38.0",
4
4
  "description": "A zero-config, fast and small (~3kB) virtual list (and grid) component for React, Vue, Solid and Svelte.",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/index.mjs",
@@ -60,11 +60,11 @@
60
60
  "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3",
61
61
  "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^1.1.3",
62
62
  "@babel/plugin-transform-react-pure-annotations": "^7.25.9",
63
- "@dnd-kit/core": "^6.1.0",
64
- "@dnd-kit/sortable": "^8.0.0",
63
+ "@dnd-kit/core": "^6.2.0",
64
+ "@dnd-kit/sortable": "^9.0.0",
65
65
  "@emotion/react": "^11.13.3",
66
66
  "@emotion/styled": "^11.13.0",
67
- "@faker-js/faker": "^9.0.3",
67
+ "@faker-js/faker": "^9.2.0",
68
68
  "@formkit/auto-animate": "^0.8.2",
69
69
  "@mui/material": "^6.1.5",
70
70
  "@playwright/test": "^1.48.2",
@@ -76,18 +76,18 @@
76
76
  "@rollup/plugin-terser": "^0.4.4",
77
77
  "@rollup/plugin-typescript": "^11.1.6",
78
78
  "@size-limit/preset-small-lib": "^11.1.6",
79
- "@storybook/addon-storysource": "^8.4.0",
80
- "@storybook/docs-tools": "^8.4.0",
81
- "@storybook/react": "^8.4.0",
82
- "@storybook/react-vite": "^8.4.0",
83
- "@storybook/source-loader": "^8.4.0",
84
- "@storybook/svelte": "^8.4.0",
85
- "@storybook/svelte-vite": "^8.4.0",
86
- "@storybook/test-runner": "^0.19.1",
87
- "@storybook/vue3": "^8.4.0",
88
- "@storybook/vue3-vite": "^8.4.0",
79
+ "@storybook/addon-storysource": "^8.4.6",
80
+ "@storybook/docs-tools": "^8.4.6",
81
+ "@storybook/react": "^8.4.6",
82
+ "@storybook/react-vite": "^8.4.6",
83
+ "@storybook/source-loader": "^8.4.6",
84
+ "@storybook/svelte": "^8.4.6",
85
+ "@storybook/svelte-vite": "^8.4.6",
86
+ "@storybook/test-runner": "^0.20.0",
87
+ "@storybook/vue3": "^8.4.6",
88
+ "@storybook/vue3-vite": "^8.4.6",
89
89
  "@sveltejs/vite-plugin-svelte": "^4.0.0",
90
- "@tanstack/react-virtual": "^3.10.8",
90
+ "@tanstack/react-virtual": "^3.10.9",
91
91
  "@testing-library/dom": "^10.4.0",
92
92
  "@testing-library/react": "^16.0.1",
93
93
  "@testing-library/vue": "^8.1.0",
@@ -100,20 +100,20 @@
100
100
  "@vitejs/plugin-vue": "^5.1.4",
101
101
  "@vitejs/plugin-vue-jsx": "^4.0.1",
102
102
  "babel-preset-solid": "^1.9.3",
103
- "cmdk": "^1.0.0",
103
+ "cmdk": "^1.0.4",
104
104
  "concurrently": "^9.0.1",
105
- "eslint": "^9.14.0",
105
+ "eslint": "^9.16.0",
106
106
  "eslint-import-resolver-typescript": "^3.6.3",
107
107
  "eslint-plugin-import": "^2.31.0",
108
108
  "eslint-plugin-react": "^7.37.2",
109
- "eslint-plugin-react-compiler": "^19.0.0-beta-8a03594-20241020",
109
+ "eslint-plugin-react-compiler": "^19.0.0-beta-df7b47d-20241124",
110
110
  "eslint-plugin-react-hooks": "^5.0.0",
111
111
  "eslint-plugin-solid": "^0.14.3",
112
- "eslint-plugin-vue": "^9.29.1",
112
+ "eslint-plugin-vue": "^9.31.0",
113
113
  "glob": "^11.0.0",
114
114
  "jsdom": "^25.0.0",
115
115
  "npm-check-updates": "^16.14.20",
116
- "re-resizable": "^6.10.0",
116
+ "re-resizable": "^6.10.1",
117
117
  "react": "^18.3.1",
118
118
  "react-content-loader": "^7.0.2",
119
119
  "react-dom": "^18.3.1",
@@ -124,25 +124,25 @@
124
124
  "react-virtuoso": "^4.12.0",
125
125
  "react-window": "^1.8.10",
126
126
  "rimraf": "^6.0.1",
127
- "rollup": "^4.24.0",
127
+ "rollup": "^4.27.4",
128
128
  "rollup-plugin-banner2": "^1.3.0",
129
129
  "size-limit": "^11.1.6",
130
130
  "solid-js": "^1.9.3",
131
- "storybook": "^8.4.0",
132
- "storybook-solidjs": "^1.0.0-beta.3",
133
- "storybook-solidjs-vite": "^1.0.0-beta.3",
131
+ "storybook": "^8.4.6",
132
+ "storybook-solidjs": "^1.0.0-beta.6",
133
+ "storybook-solidjs-vite": "^1.0.0-beta.6",
134
134
  "svelte": "^5.0.0",
135
135
  "svelte-check": "^4.0.0",
136
- "svelte2tsx": "^0.7.22",
137
- "typedoc": "^0.26.10",
138
- "typedoc-plugin-markdown": "^4.2.10",
139
- "typedoc-plugin-vue": "^1.2.0",
140
- "typescript": "^5.6.3",
141
- "typescript-eslint": "^8.11.0",
136
+ "svelte2tsx": "^0.7.28",
137
+ "typedoc": "^0.27.2",
138
+ "typedoc-plugin-markdown": "^4.3.0",
139
+ "typedoc-plugin-vue": "^1.3.0",
140
+ "typescript": "^5.7.2",
141
+ "typescript-eslint": "^8.16.0",
142
142
  "unplugin-vue-jsx": "^0.4.0",
143
- "virtua": "^0.36.0",
143
+ "virtua": "^0.37.3",
144
144
  "vite": "5.1.8",
145
- "vite-plugin-solid": "^2.10.2",
145
+ "vite-plugin-solid": "^2.11.0",
146
146
  "vitest": "^2.1.3",
147
147
  "vue": "^3.4.34",
148
148
  "vue-eslint-parser": "^9.4.3",
@@ -1,79 +0,0 @@
1
- // @ts-nocheck
2
- import { type StateVersion } from "../core/store";
3
- export { type StateVersion } from "../core/store";
4
- export { isRTLDocument } from "../core/environment";
5
- export type { ItemResizeObserver } from "../core/resizer";
6
- export declare const ON_MOUNT = 0;
7
- export declare const ON_UN_MOUNT = 1;
8
- export declare const GET_RANGE = 2;
9
- export declare const GET_TOTAL_SIZE = 3;
10
- export declare const GET_VIEWPORT_SIZE = 4;
11
- export declare const GET_SCROLL_OFFSET = 5;
12
- export declare const GET_IS_SCROLLING = 6;
13
- export declare const GET_JUMP_COUNT = 7;
14
- export declare const GET_ITEM_OFFSET = 8;
15
- export declare const GET_ITEM_SIZE = 9;
16
- export declare const IS_ITEM_HIDDEN = 10;
17
- export declare const GET_ITEMS_LENGTH = 11;
18
- export declare const GET_START_SPACER_SIZE = 12;
19
- export declare const OBSERVE_ITEM_RESIZE = 13;
20
- export declare const FIX_SCROLL_JUMP = 14;
21
- export declare const CHANGE_ITEM_LENGTH = 15;
22
- export declare const CHANGE_START_MARGIN = 16;
23
- export declare const GET_SCROLL_SIZE = 17;
24
- export declare const SCROLL_TO = 18;
25
- export declare const SCROLL_BY = 19;
26
- export declare const SCROLL_TO_INDEX = 20;
27
- export declare const FIND_START_INDEX = 21;
28
- export declare const FIND_END_INDEX = 22;
29
- /**
30
- * This function is workaround for terser minification.
31
- * Svelte doesn't seem to have a good way to modify and print its AST.
32
- */
33
- export declare const createVirtualizer: (count: number, itemSize: number | undefined, overscan: number | undefined, horizontal: boolean, onUpdate: (v: StateVersion) => void, onScroll: (offset: number) => void, onScrollEnd: () => void) => {
34
- 0: (scrollable: HTMLElement) => void;
35
- 1: () => void;
36
- 2: () => import("../core/types").ItemsRange;
37
- 3: () => number;
38
- 4: () => number;
39
- 5: () => number;
40
- 6: () => boolean;
41
- 7: () => number;
42
- 8: (index: number) => number;
43
- 9: (index: number) => number;
44
- 10: (index: number) => boolean;
45
- 11: () => number;
46
- 12: () => number;
47
- 13: import("./core").ItemResizeObserver;
48
- 14: () => void;
49
- 15: (len: number, shift?: boolean) => void;
50
- 16: (value: number) => void;
51
- 17: () => number;
52
- 18: (offset: number) => void;
53
- 19: (offset: number) => void;
54
- 20: (index: number, opts?: import("..").ScrollToIndexOpts) => void;
55
- 21: () => number;
56
- 22: () => number;
57
- };
58
- /**
59
- * This function is workaround for terser minification.
60
- * Svelte doesn't seem to have a good way to modify and print its AST.
61
- */
62
- export declare const createWindowVirtualizer: (count: number, itemSize: number | undefined, overscan: number | undefined, horizontal: boolean, onUpdate: (v: StateVersion) => void, onScroll: (offset: number) => void, onScrollEnd: () => void) => {
63
- 0: (scrollable: HTMLElement) => void;
64
- 1: () => void;
65
- 2: () => import("../core/types").ItemsRange;
66
- 3: () => number;
67
- 4: () => number;
68
- 5: () => number;
69
- 6: () => boolean;
70
- 7: () => number;
71
- 8: (index: number) => number;
72
- 10: (index: number) => boolean;
73
- 11: () => number;
74
- 13: import("./core").ItemResizeObserver;
75
- 14: () => void;
76
- 15: (len: number, shift?: boolean) => void;
77
- 21: () => number;
78
- 22: () => number;
79
- };
@@ -1 +0,0 @@
1
- const e=null,{min:t,max:r,abs:o,floor:n}=Math,s=setTimeout,c=(e,o,n)=>t(n,r(o,e)),i="function"==typeof queueMicrotask?queueMicrotask:e=>{Promise.resolve().then(e)},l=e=>{let t,r;return()=>(t||(t=!0,r=e()),r)},u=-1,a=(e,t,r)=>{const o=r?"unshift":"push";for(let r=0;r<t;r++)e[o](u);return e},f=(e,t)=>{const r=e.t[t];return r===u?e.o:r},_=(e,r,o)=>{const n=e.t[r]===u;return e.t[r]=o,e.i=t(r,e.i),n},d=(e,t)=>{if(!e.l)return 0;if(e.i>=t)return e.u[t];e.i<0&&(e.u[0]=0,e.i=0);let r=e.i,o=e.u[r];for(;r<t;)o+=f(e,r),e.u[++r]=o;return e.i=t,o},h=(e,t,r=0,o=e.l-1)=>{for(;r<=o;){const s=n((r+o)/2),c=d(e,s);if(c<=t){if(c+f(e,s)>t)return s;r=s+1}else o=s-1}return c(r,0,e.l-1)},p=(e,r,o)=>{const n=r-e.l;return e.i=o?-1:t(r-1,e.i),e.l=r,n>0?(a(e.u,n),a(e.t,n,o),e.o*n):(e.u.splice(n),(o?e.t.splice(0,-n):e.t.splice(n)).reduce(((t,r)=>t-(r===u?e.o:r)),0))},m="undefined"!=typeof window,g=()=>document.documentElement,v=e=>e.ownerDocument,b=e=>e.defaultView,w=/*#__PURE__*/l((()=>!!m&&"rtl"===getComputedStyle(g()).direction)),S=/*#__PURE__*/l((()=>/iP(hone|od|ad)/.test(navigator.userAgent))),I=/*#__PURE__*/l((()=>"scrollBehavior"in g().style)),k=(n,s=40,c=4,i=0,l,m=!1)=>{let g=!!i,v=[],b=0,w=0,I=0,k=0,x=0,y=0,z=0,T=0,R=0,J=g?[0,r(i-1,0)]:e,M=[0,0],C=0;const L=((e,t)=>({o:t,t:a([],e),l:e,i:-1,u:a([],e)}))(n,s),O=new Set,P=()=>I-w,W=()=>P()+y+x,q=e=>((e,r,o,n)=>{if(n=t(n,e.l-1),d(e,n)<=r){const t=h(e,r+o,n);return[h(e,r,n,t),t]}{const t=h(e,r,void 0,n);return[t,h(e,r+o,t)]}})(L,e,b,M[0]),B=()=>(e=>e.l?d(e,e.l-1)+f(e,e.l-1):0)(L),U=e=>d(L,e)-y,V=e=>f(L,e),X=e=>{e&&(S()&&0!==T?y+=e:(x+=e,k++))};return{_:()=>v,h:()=>(e=>[e.t.slice(),e.o])(L),p:()=>{if(z)return M;let[e,o]=q(r(0,W()));return J&&(e=t(e,J[0]),o=r(o,J[1])),1!==T&&(e-=r(0,c)),2!==T&&(o+=r(0,c)),M=[r(e,0),t(o,L.l-1)]},m:()=>h(L,W()),v:()=>h(L,W()+b),S:e=>L.t[e]===u,I:()=>!!J&&L.t.slice(r(0,J[0]-1),t(L.l-1,J[1]+1)+1).includes(u),k:U,T:V,R:()=>L.l,J:()=>I,M:()=>0!==T,C:()=>b,L:()=>w,O:B,P:()=>k,W:()=>(z=x,x=0,[z,2===R||P()+b>=B()]),q:(e,t)=>{const r=[e,t];return O.add(r),()=>{O.delete(r)}},B:(t,n)=>{let s,c,i=0;switch(t){case 1:{const t=z;z=0;const r=n-I,s=o(r);t&&s<o(t)+1||0!==R||(T=r<0?2:1),g&&(J=e,g=!1),I=n,i=4;const l=P();l>=-b&&l<=B()&&(i+=1,c=s>b);break}case 2:i=8,0!==T&&(s=!0,i+=1),T=0,R=0,J=e;break;case 3:{const e=n.filter((([e,t])=>L.t[e]!==t));if(!e.length)break;X(e.reduce(((e,[t,r])=>((2===R||(J?t<J[0]:U(t)+(0===T&&0===R?V(t):0)<P()))&&(e+=r-V(t)),e)),0));for(const[t,r]of e){const e=V(t),o=_(L,t,r);m&&(C+=o?r:r-e)}m&&b&&C>b&&(X(((e,t)=>{let o=0;const n=e.t.filter(((e,r)=>{const n=e!==u;return n&&r<t&&o++,n})),s=e.o;return e.i=-1,((e.o=(e=>{const t=(e=>[...e].sort(((e,t)=>e-t)))(e),r=e.length/2|0;return t.length%2==0?(t[r-1]+t[r])/2:t[r]})(n))-s)*r(t-o,0)})(L,h(L,W()))),m=!1),i=3,c=!0;break}case 4:b!==n&&(b=n,i=3);break;case 5:n[1]?(X(p(L,n[0],!0)),R=2,i=1):p(L,n[0]);break;case 6:w=n;break;case 7:R=1;break;case 8:J=q(n),i=1}i&&(v=[],s&&y&&(x+=y,y=0,k++),O.forEach((([e,t])=>{i&e&&t(c)})))}}},x=e=>{let t;return{U(r){(t||(t=new(b(v(r)).ResizeObserver)(e))).observe(r)},V(e){t.unobserve(e)},X(){t&&t.disconnect()}}},y=(e,t)=>t&&w()?-e:e,z=(t,r,o,n,c,i)=>{const l=Date.now;let u=0,a=!1,f=!1,_=!1,d=!1;const h=(()=>{let r;const o=()=>{r!=e&&clearTimeout(r)},n=()=>{o(),r=s((()=>{r=e,(()=>{if(a||f)return a=!1,void h();_=!1,t.B(2)})()}),150)};return n.Y=o,n})(),p=()=>{u=l(),_&&(d=!0),i&&t.B(6,i()),t.B(1,n()),h()},m=e=>{if(a||!t.M()||e.ctrlKey)return;const r=l()-u;150>r&&50<r&&(o?e.deltaX:e.deltaY)&&(a=!0)},g=()=>{f=!0,_=d=!1},v=()=>{f=!1,S()&&(_=!0)};return r.addEventListener("scroll",p),r.addEventListener("wheel",m,{passive:!0}),r.addEventListener("touchstart",g,{passive:!0}),r.addEventListener("touchend",v,{passive:!0}),{X:()=>{r.removeEventListener("scroll",p),r.removeEventListener("wheel",m),r.removeEventListener("touchstart",g),r.removeEventListener("touchend",v),h.Y()},D:()=>{const[e,r]=t.W();e&&(c(y(e,o),r,d),d=!1,r&&t.C()>t.O()&&t.B(1,n()))}}},T=0,R=1,J=2,M=3,C=4,L=5,O=6,P=7,W=8,q=9,B=10,U=11,V=12,X=13,Y=14,D=15,E=16,F=17,H=18,j=19,A=20,G=21,K=22,N=(t,o,n,l,u,a,f)=>{const _=k(t,o,n,void 0,0,!o),d=((t,r)=>{let o;const n=r?"width":"height",s=new WeakMap,c=x((r=>{const c=[];for(const{target:i,contentRect:l}of r)if(i.offsetParent)if(i===o)t.B(4,l[n]);else{const t=s.get(i);t!=e&&c.push([t,l[n]])}c.length&&t.B(3,c)}));return{F(e){c.U(o=e)},H:(e,t)=>(s.set(e,t),c.U(e),()=>{s.delete(e),c.V(e)}),X:c.X}})(_,l),h=((e,t)=>{let r,o,n;const l=t?"scrollLeft":"scrollTop",u=t?"overflowX":"overflowY",a=async(o,c)=>{if(!r)return void i((()=>a(o,c)));n&&n();const u=()=>{let t;return[new Promise(((r,o)=>{t=r,n=o,(e=>!!e.C())(e)&&s(o,150)})),e.q(2,(()=>{t&&t()}))]};if(c&&I()){for(;e.B(8,o()),e.I();){const[e,t]=u();try{await e}catch(e){return}finally{t()}}r.scrollTo({[t?"left":"top"]:y(o(),t),behavior:"smooth"})}else for(;;){const[n,s]=u();try{r[l]=y(o(),t),e.B(7),await n}catch(e){return}finally{s()}}};return{U(c){r=c,o=z(e,c,t,(()=>y(c[l],t)),((t,r,o)=>{if(o){const e=c.style,t=e[u];e[u]="hidden",s((()=>{e[u]=t}))}r?(c[l]=e.J()+t,n&&n()):c[l]+=t}))},X(){o&&o.X()},j(e){a((()=>e))},A(t){t+=e.J(),a((()=>t))},G(t,{align:r,smooth:o,offset:n=0}={}){if(t=c(t,0,e.R()-1),"nearest"===r){const o=e.k(t),n=e.J();if(o<n)r="start";else{if(!(o+e.T(t)>n+e.C()))return;r="end"}}a((()=>n+e.L()+e.k(t)+("end"===r?e.T(t)-e.C():"center"===r?(e.T(t)-e.C())/2:0)),o)},D:()=>{o&&o.D()}}})(_,l),p=_.q(1,(()=>{u(_._())})),m=_.q(4,(()=>{a(_.J())})),g=_.q(8,(()=>{f()}));return{[T]:e=>{d.F(e),h.U(e)},[R]:()=>{p(),m(),g(),d.X(),h.X()},[J]:_.p,[M]:_.O,[C]:_.C,[L]:_.J,[O]:_.M,[P]:_.P,[W]:_.k,[q]:_.T,[B]:_.S,[U]:_.R,[V]:_.L,[X]:d.H,[Y]:h.D,[D]:(e,t)=>{_.B(5,[e,t])},[E]:e=>{_.B(6,e)},[F]:()=>(e=>r(e.O(),e.C()))(_),[H]:h.j,[j]:h.A,[A]:h.G,[G]:_.m,[K]:_.v}},Q=(t,r,o,n,s,c,i)=>{const l=k(t,r,o,void 0,0,!r),u=((t,r)=>{const o=r?"width":"height",n=r?"innerWidth":"innerHeight",s=new WeakMap,c=x((r=>{const n=[];for(const{target:t,contentRect:c}of r){if(!t.offsetParent)continue;const r=s.get(t);r!=e&&n.push([r,c[o]])}n.length&&t.B(3,n)}));let i;return{F(e){const r=b(v(e)),o=()=>{t.B(4,r[n])};r.addEventListener("resize",o),o(),i=()=>{r.removeEventListener("resize",o)}},H:(e,t)=>(s.set(e,t),c.U(e),()=>{s.delete(e),c.V(e)}),X(){i&&i(),c.X()}}})(l,n),a=((e,t)=>{let r;return{U(o){const n=t?"scrollX":"scrollY",s=v(o),c=b(s),i=s.body,l=(e,t,r,o=0)=>{const n=r?"offsetLeft":"offsetTop",s=o+(r&&w()?c.innerWidth-e[n]-e.offsetWidth:e[n]),i=e.offsetParent;return e!==t&&i?l(i,t,r,s):s};r=z(e,c,t,(()=>y(c[n],t)),((r,o)=>{o?c.scroll({[t?"left":"top"]:e.J()+r}):c.scrollBy(t?r:0,t?0:r)}),(()=>l(o,i,t)))},X(){r&&r.X()},D:()=>{r&&r.D()}}})(l,n),f=l.q(1,(()=>{s(l._())})),_=l.q(4,(()=>{c(l.J())})),d=l.q(8,(()=>{i()}));return{[T]:e=>{u.F(e),a.U(e)},[R]:()=>{f(),_(),d(),u.X(),a.X()},[J]:l.p,[M]:l.O,[C]:l.C,[L]:l.J,[O]:l.M,[P]:l.P,[W]:l.k,[B]:l.S,[U]:l.R,[X]:u.H,[Y]:a.D,[D]:(e,t)=>{l.B(5,[e,t])},[G]:l.m,[K]:l.v}};export{D as CHANGE_ITEM_LENGTH,E as CHANGE_START_MARGIN,K as FIND_END_INDEX,G as FIND_START_INDEX,Y as FIX_SCROLL_JUMP,O as GET_IS_SCROLLING,U as GET_ITEMS_LENGTH,W as GET_ITEM_OFFSET,q as GET_ITEM_SIZE,P as GET_JUMP_COUNT,J as GET_RANGE,L as GET_SCROLL_OFFSET,F as GET_SCROLL_SIZE,V as GET_START_SPACER_SIZE,M as GET_TOTAL_SIZE,C as GET_VIEWPORT_SIZE,B as IS_ITEM_HIDDEN,X as OBSERVE_ITEM_RESIZE,T as ON_MOUNT,R as ON_UN_MOUNT,j as SCROLL_BY,H as SCROLL_TO,A as SCROLL_TO_INDEX,N as createVirtualizer,Q as createWindowVirtualizer,w as isRTLDocument};