virtua 0.40.4 → 0.41.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/README.md +4 -2
- package/lib/solid/VList.d.ts +1 -1
- package/lib/solid/Virtualizer.d.ts +13 -3
- package/lib/solid/WindowVirtualizer.d.ts +13 -3
- package/lib/solid/index.js +1 -1
- package/lib/solid/index.js.map +1 -1
- package/lib/solid/index.jsx +43 -71
- package/lib/solid/index.jsx.map +1 -1
- package/lib/solid/index.mjs +1 -1
- package/lib/solid/index.mjs.map +1 -1
- package/package.json +2 -2
- package/lib/solid/RangedFor.d.ts +0 -1
package/README.md
CHANGED
|
@@ -242,7 +242,7 @@ export const App = () => {
|
|
|
242
242
|
background: "#fff",
|
|
243
243
|
}}
|
|
244
244
|
>
|
|
245
|
-
{i}
|
|
245
|
+
{i()}
|
|
246
246
|
</div>
|
|
247
247
|
)}
|
|
248
248
|
</VList>
|
|
@@ -333,10 +333,12 @@ It may be dispatched by ResizeObserver in this lib [as described in spec](https:
|
|
|
333
333
|
|
|
334
334
|
Especially for `webpack-dev-server`, [you can filter out the specific error with `devServer.client.overlay.runtimeErrors` option](https://webpack.js.org/configuration/dev-server/#overlay).
|
|
335
335
|
|
|
336
|
-
#### Why my items are squashed on resize/add/remove?
|
|
336
|
+
#### Why my items are squashed(or rendered inconsistently) on resize/add/remove?
|
|
337
337
|
|
|
338
338
|
Maybe you forgot to pass `key` prop to each items, or the keys are not unique. Item sizes are stored per key.
|
|
339
339
|
|
|
340
|
+
And do not use index of items as `key`, especially when you want to toggle `shift` prop to `true`. Prepending will increment every indexes of items and that will cause unexpected behavior.
|
|
341
|
+
|
|
340
342
|
#### Why `VListHandle.viewportSize` is 0 on mount?
|
|
341
343
|
|
|
342
344
|
`viewportSize` will be calculated by ResizeObserver so it's 0 until the first measurement.
|
package/lib/solid/VList.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export interface VListHandle extends VirtualizerHandle {
|
|
|
12
12
|
/**
|
|
13
13
|
* Props of {@link VList}.
|
|
14
14
|
*/
|
|
15
|
-
export interface VListProps<T> extends Pick<VirtualizerProps<T>, "ref" | "data" | "children" | "overscan" | "itemSize" | "shift" | "horizontal" | "onScroll" | "onScrollEnd">, ViewportComponentAttributes {
|
|
15
|
+
export interface VListProps<T> extends Pick<VirtualizerProps<T>, "ref" | "data" | "children" | "overscan" | "itemSize" | "shift" | "horizontal" | "cache" | "onScroll" | "onScrollEnd">, ViewportComponentAttributes {
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* Virtualized list component. See {@link VListProps} and {@link VListHandle}.
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @jsxImportSource solid-js
|
|
3
3
|
*/
|
|
4
|
-
import { JSX, type ValidComponent } from "solid-js";
|
|
5
|
-
import { ScrollToIndexOpts } from "../core";
|
|
4
|
+
import { JSX, type ValidComponent, Accessor } from "solid-js";
|
|
5
|
+
import { ScrollToIndexOpts, CacheSnapshot } from "../core";
|
|
6
6
|
/**
|
|
7
7
|
* Methods of {@link Virtualizer}.
|
|
8
8
|
*/
|
|
9
9
|
export interface VirtualizerHandle {
|
|
10
|
+
/**
|
|
11
|
+
* Get current {@link CacheSnapshot}.
|
|
12
|
+
*/
|
|
13
|
+
readonly cache: CacheSnapshot;
|
|
10
14
|
/**
|
|
11
15
|
* Get current scrollTop, or scrollLeft if horizontal: true.
|
|
12
16
|
*/
|
|
@@ -69,7 +73,7 @@ export interface VirtualizerProps<T> {
|
|
|
69
73
|
/**
|
|
70
74
|
* The elements renderer function.
|
|
71
75
|
*/
|
|
72
|
-
children: (data: T, index: number) => JSX.Element;
|
|
76
|
+
children: (data: T, index: Accessor<number>) => JSX.Element;
|
|
73
77
|
/**
|
|
74
78
|
* Number of items to render above/below the visible bounds of the list. Lower value will give better performance but you can increase to avoid showing blank items in fast scrolling.
|
|
75
79
|
* @defaultValue 4
|
|
@@ -104,6 +108,12 @@ export interface VirtualizerProps<T> {
|
|
|
104
108
|
* If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.
|
|
105
109
|
*/
|
|
106
110
|
horizontal?: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* You can restore cache by passing a {@link CacheSnapshot} on mount. This is useful when you want to restore scroll position after navigation. The snapshot can be obtained from {@link VirtualizerHandle.cache}.
|
|
113
|
+
*
|
|
114
|
+
* **The length of items should be the same as when you take the snapshot, otherwise restoration may not work as expected.**
|
|
115
|
+
*/
|
|
116
|
+
cache?: CacheSnapshot;
|
|
107
117
|
/**
|
|
108
118
|
* If you put an element before virtualizer, you have to define its height with this prop.
|
|
109
119
|
*/
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @jsxImportSource solid-js
|
|
3
3
|
*/
|
|
4
|
-
import { JSX } from "solid-js";
|
|
5
|
-
import { ScrollToIndexOpts } from "../core";
|
|
4
|
+
import { JSX, Accessor } from "solid-js";
|
|
5
|
+
import { ScrollToIndexOpts, CacheSnapshot } from "../core";
|
|
6
6
|
/**
|
|
7
7
|
* Methods of {@link WindowVirtualizer}.
|
|
8
8
|
*/
|
|
9
9
|
export interface WindowVirtualizerHandle {
|
|
10
|
+
/**
|
|
11
|
+
* Get current {@link CacheSnapshot}.
|
|
12
|
+
*/
|
|
13
|
+
readonly cache: CacheSnapshot;
|
|
10
14
|
/**
|
|
11
15
|
* Find the start index of visible range of items.
|
|
12
16
|
*/
|
|
@@ -37,7 +41,7 @@ export interface WindowVirtualizerProps<T> {
|
|
|
37
41
|
/**
|
|
38
42
|
* The elements renderer function.
|
|
39
43
|
*/
|
|
40
|
-
children: (data: T, index: number) => JSX.Element;
|
|
44
|
+
children: (data: T, index: Accessor<number>) => JSX.Element;
|
|
41
45
|
/**
|
|
42
46
|
* Number of items to render above/below the visible bounds of the list. Lower value will give better performance but you can increase to avoid showing blank items in fast scrolling.
|
|
43
47
|
* @defaultValue 4
|
|
@@ -58,6 +62,12 @@ export interface WindowVirtualizerProps<T> {
|
|
|
58
62
|
* If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.
|
|
59
63
|
*/
|
|
60
64
|
horizontal?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* You can restore cache by passing a {@link CacheSnapshot} on mount. This is useful when you want to restore scroll position after navigation. The snapshot can be obtained from {@link WindowVirtualizerHandle.cache}.
|
|
67
|
+
*
|
|
68
|
+
* **The length of items should be the same as when you take the snapshot, otherwise restoration may not work as expected.**
|
|
69
|
+
*/
|
|
70
|
+
cache?: CacheSnapshot;
|
|
61
71
|
/**
|
|
62
72
|
* Callback invoked whenever scroll offset changes.
|
|
63
73
|
*/
|
package/lib/solid/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("solid-js/web"),t=require("solid-js");const r=null,{min:n,max:o,abs:s,floor:i}=Math,l=(e,t,r)=>n(r,o(t,e)),c="function"==typeof queueMicrotask?queueMicrotask:e=>{Promise.resolve().then(e)},a=e=>{let t,r;return()=>(t||(t=!0,r=e()),r)},u=-1,f=(e,t,r)=>{const n=r?"unshift":"push";for(let r=0;r<t;r++)e[n](u);return e},d=(e,t)=>{const r=e.o[t];return r===u?e.i:r},h=(e,t,r)=>{const o=e.o[t]===u;return e.o[t]=r,e.l=n(t,e.l),o},v=(e,t)=>{if(!e.u)return 0;if(e.l>=t)return e.h[t];e.l<0&&(e.h[0]=0,e.l=0);let r=e.l,n=e.h[r];for(;r<t;)n+=d(e,r),e.h[++r]=n;return e.l=t,n},g=(e,t,r=0,n=e.u-1)=>{for(;r<=n;){const o=i((r+n)/2),s=v(e,o);if(s<=t){if(s+d(e,o)>t)return o;r=o+1}else n=o-1}return l(r,0,e.u-1)},p=(e,t,r)=>{const o=t-e.u;return e.l=r?-1:n(t-1,e.l),e.u=t,o>0?(f(e.h,o),f(e.o,o,r),e.i*o):(e.h.splice(o),(r?e.o.splice(0,-o):e.o.splice(o)).reduce(((t,r)=>t-(r===u?e.i:r)),0))},m="undefined"!=typeof window,_=()=>document.documentElement,w=e=>e.ownerDocument,$=e=>e.defaultView,S=/*#__PURE__*/a((()=>!!m&&"rtl"===getComputedStyle(_()).direction)),x=/*#__PURE__*/a((()=>/iP(hone|od|ad)/.test(navigator.userAgent))),b=/*#__PURE__*/a((()=>"scrollBehavior"in _().style)),y=e=>!!e.v(),z=(e,t=40,i=4,l=0,c,a=!1)=>{let m=!!l,_=1,w=0,$=0,S=0,b=0,y=0,z=0,I=0,k=0,T=m?[0,o(l-1,0)]:r,M=[0,0],E=0;const R=((e,t)=>({i:t,o:f([],e),u:e,l:-1,h:f([],e)}))(e,t),O=new Set,q=()=>S-$,J=()=>q()+y+b,P=e=>((e,t,r,o)=>{if(o=n(o,e.u-1),v(e,o)<=t){const n=g(e,t+r,o);return[g(e,t,o,n),n]}{const n=g(e,t,void 0,o);return[n,g(e,t+r,n)]}})(R,e,w,M[0]),B=()=>(e=>e.u?v(e,e.u-1)+d(e,e.u-1):0)(R),H=e=>v(R,e)-y,L=e=>d(R,e),W=e=>{e&&(x()&&0!==I?y+=e:b+=e)};return{p:()=>_,m:()=>(e=>[e.o.slice(),e.i])(R),_:()=>{let e,t;return z?[e,t]=M:([e,t]=M=P(o(0,J())),T&&(e=n(e,T[0]),t=o(t,T[1]))),1!==I&&(e-=o(0,i)),2!==I&&(t+=o(0,i)),[o(e,0),n(t,R.u-1)]},$:()=>g(R,J()),S:()=>g(R,J()+w),I:e=>R.o[e]===u,k:()=>!!T&&R.o.slice(o(0,T[0]-1),n(R.u-1,T[1]+1)+1).includes(u),T:H,M:L,R:()=>R.u,O:()=>S,q:()=>0!==I,v:()=>w,J:()=>$,P:B,B:()=>(z=b,b=0,[z,2===k||q()+w>=B()]),H:(e,t)=>{const r=[e,t];return O.add(r),()=>{O.delete(r)}},L:(e,t)=>{let n,i,l=0;switch(e){case 1:{const e=z;z=0;const n=t-S,o=s(n);e&&o<s(e)+1||0!==k||(I=n<0?2:1),m&&(T=r,m=!1),S=t,l=4;const c=q();c>=-w&&c<=B()&&(l+=1,i=o>w);break}case 2:l=8,0!==I&&(n=!0,l+=1),I=0,k=0,T=r;break;case 3:{const e=t.filter((([e,t])=>R.o[e]!==t));if(!e.length)break;W(e.reduce(((e,[t,r])=>((2===k||(T?!m&&t<T[0]:H(t)+(0===I&&0===k?L(t):0)<q()))&&(e+=r-L(t)),e)),0));for(const[t,r]of e){const e=L(t),n=h(R,t,r);a&&(E+=n?r:r-e)}a&&w&&E>w&&(W(((e,t)=>{let r=0;const n=[];e.o.forEach(((e,o)=>{e!==u&&(n.push(e),o<t&&r++)})),e.l=-1;const s=(i=n,[...i].sort(((e,t)=>e-t)));var i;const l=s.length,c=l/2|0,a=l%2==0?(s[c-1]+s[c])/2:s[c],f=e.i;return((e.i=a)-f)*o(t-r,0)})(R,g(R,J()))),a=!1),l=3,i=!0;break}case 4:w!==t&&(w=t,l=3);break;case 5:t[1]?(W(p(R,t[0],!0)),k=2,l=1):(p(R,t[0]),l=1);break;case 6:$=t;break;case 7:k=1;break;case 8:T=P(t),l=1}l&&(_=1+(2147483647&_),n&&y&&(b+=y,y=0),O.forEach((([e,t])=>{l&e&&t(i)})))}}},I=setTimeout,k=(e,t)=>t&&S()?-e:e,T=(e,t,n,o,s,i)=>{const l=Date.now;let c=0,a=!1,u=!1,f=!1,d=!1;const h=(()=>{let t;const n=()=>{t!=r&&clearTimeout(t)},o=()=>{n(),t=I((()=>{t=r,(()=>{if(a||u)return a=!1,void h();f=!1,e.L(2)})()}),150)};return o.W=n,o})(),v=()=>{c=l(),f&&(d=!0),i&&e.L(6,i()),e.L(1,o()),h()},g=t=>{if(a||!e.q()||t.ctrlKey)return;const r=l()-c;150>r&&50<r&&(n?t.deltaX:t.deltaY)&&(a=!0)},p=()=>{u=!0,f=d=!1},m=()=>{u=!1,x()&&(f=!0)};return t.addEventListener("scroll",v),t.addEventListener("wheel",g,{passive:!0}),t.addEventListener("touchstart",p,{passive:!0}),t.addEventListener("touchend",m,{passive:!0}),{j:()=>{t.removeEventListener("scroll",v),t.removeEventListener("wheel",g),t.removeEventListener("touchstart",p),t.removeEventListener("touchend",m),h.W()},C:()=>{const[t,r]=e.B();t&&(s(k(t,n),r,d),d=!1,r&&e.v()>e.P()&&e.L(1,o()))}}},M=e=>{let t;return{U(r){(t||(t=new($(w(r)).ResizeObserver)(e))).observe(r)},V(e){t.unobserve(e)},j(){t&&t.disconnect()}}},E=r=>{let n;r=t.mergeProps({X:"div"},r),t.createEffect((()=>{n&&t.onCleanup(r.Y(n,r.D))}));const o=t.createMemo((()=>{const e=r.F,t={position:"absolute",[e?"height":"width"]:"100%",[e?"top":"left"]:"0px",[e?S()?"right":"left":"top"]:r.A+"px",visibility:r.G?"hidden":"visible"};return e&&(t.display="flex"),t}));return e.createComponent(e.Dynamic,{get component(){return r.X},ref(e){"function"==typeof n?n(e):n=e},get style(){return o()},get children(){return r.K}})},R=e=>{let r=new Map;return t.onCleanup((()=>{for(const e of r.values())e.j()})),t.createMemo((()=>{const n=e.N,[o,s]=e.Z,i=new Map,l=[];for(let c=o;c<=s;c++){const o=n[c],s=r.get(c);l.push(s?s.ee:t.createRoot((r=>{const n=t.createSignal(o),s=e.te(n[0],c);return i.set(c,{re:n,ee:s,j:r}),s}))),s&&(o!==s.re&&s.re[1](o),i.set(c,s))}for(const[e,t]of r.entries())i.has(e)||t.j();return r=i,l}))},O=(e,t)=>e[0]===t[0]&&e[1]===t[1],q=n=>{let s;const{itemSize:i,horizontal:a=!1,overscan:u}=n;n=t.mergeProps({as:"div"},n);const f=z(n.data.length,i,u,void 0,0,!i),d=((e,t)=>{let n;const o=t?"width":"height",s=new WeakMap,i=M((t=>{const i=[];for(const{target:l,contentRect:c}of t)if(l.offsetParent)if(l===n)e.L(4,c[o]);else{const e=s.get(l);e!=r&&i.push([e,c[o]])}i.length&&e.L(3,i)}));return{ne(e){i.U(n=e)},oe:(e,t)=>(s.set(e,t),i.U(e),()=>{s.delete(e),i.V(e)}),se:i.j}})(f,a),h=((e,t)=>{let r,n,o;const s=t?"scrollLeft":"scrollTop",i=t?"overflowX":"overflowY",a=async(n,i)=>{if(!r)return void c((()=>a(n,i)));o&&o();const l=()=>{let t;return[new Promise(((r,n)=>{t=r,o=n,y(e)&&I(n,150)})),e.H(2,(()=>{t&&t()}))]};if(i&&b()){for(;e.L(8,n()),e.k();){const[e,t]=l();try{await e}catch(e){return}finally{t()}}r.scrollTo({[t?"left":"top"]:k(n(),t),behavior:"smooth"})}else for(;;){const[o,i]=l();try{r[s]=k(n(),t),e.L(7),await o}catch(e){return}finally{i()}}};return{ie(l){r=l,n=T(e,l,t,(()=>k(l[s],t)),((t,r,n)=>{if(n){const e=l.style,t=e[i];e[i]="hidden",I((()=>{e[i]=t}))}r?(l[s]=e.O()+t,o&&o()):l[s]+=t}))},se(){n&&n.j()},le(e){a((()=>e))},ce(t){t+=e.O(),a((()=>t))},ae(t,{align:r,smooth:n,offset:o=0}={}){if(t=l(t,0,e.R()-1),"nearest"===r){const n=e.T(t),o=e.O();if(n<o)r="start";else{if(!(n+e.M(t)>o+e.v()))return;r="end"}}a((()=>o+e.J()+e.T(t)+("end"===r?e.M(t)-e.v():"center"===r?(e.M(t)-e.v())/2:0)),n)},ue:()=>{n&&n.C()}}})(f,a),[v,g]=t.createSignal(f.p()),p=f.H(1,(()=>{g(f.p())})),m=f.H(4,(()=>{var e;null===(e=n.onScroll)||void 0===e||e.call(n,f.O())})),_=f.H(8,(()=>{var e;null===(e=n.onScrollEnd)||void 0===e||e.call(n)})),w=t.createMemo((e=>{v();const t=f._();return e&&O(e,t)?e:t})),$=t.createMemo((()=>v()&&f.q())),S=t.createMemo((()=>v()&&f.P()));return t.onMount((()=>{n.ref&&n.ref({get scrollOffset(){return f.O()},get scrollSize(){return(e=>o(e.P(),e.v()))(f)},get viewportSize(){return f.v()},findStartIndex:f.$,findEndIndex:f.S,getItemOffset:f.T,getItemSize:f.M,scrollToIndex:h.ae,scrollTo:h.le,scrollBy:h.ce});const e=n.scrollRef||s.parentElement;d.ne(e),h.ie(e),t.onCleanup((()=>{n.ref&&n.ref(),p(),m(),_(),d.se(),h.se()}))})),t.createComputed(t.on((()=>n.data.length),(e=>{e!==f.R()&&f.L(5,[e,n.shift])}))),t.createComputed(t.on((()=>n.startMargin||0),(e=>{e!==f.J()&&f.L(6,e)}))),t.createEffect(t.on(v,(()=>{h.ue()}))),e.createComponent(e.Dynamic,{get component(){return n.as},ref(e){"function"==typeof s?s(e):s=e},get style(){return{"overflow-anchor":"none",flex:"none",position:"relative",visibility:"hidden",width:a?S()+"px":"100%",height:a?"100%":S()+"px","pointer-events":$()?"none":void 0}},get children(){return e.createComponent(R,{get N(){return n.data},get Z(){return w()},te:(r,o)=>{const s=t.createMemo((()=>(v(),f.T(o)))),i=t.createMemo((()=>(v(),f.I(o))));return e.createComponent(E,{get X(){return n.item},D:o,get Y(){return d.oe},get A(){return s()},get G(){return i()},get K(){return n.children(r(),o)},F:a})}})}})};var J=/*#__PURE__*/e.template("<div>"),P=/*#__PURE__*/e.template("<div>");exports.VList=t=>{const{ref:r,data:n,children:o,overscan:s,itemSize:i,shift:l,horizontal:c,onScroll:a,onScrollEnd:u,style:f,...d}=t;return h=J(),e.spread(h,e.mergeProps(d,{get style(){return{display:c?"inline-block":"block",[c?"overflow-x":"overflow-y"]:"auto",contain:"strict",width:"100%",height:"100%",...t.style}}}),!1,!0),e.insert(h,e.createComponent(q,{ref(e){var r=t.ref;"function"==typeof r?r(e):t.ref=e},get data(){return t.data},get overscan(){return t.overscan},get itemSize(){return t.itemSize},get shift(){return t.shift},horizontal:c,get onScroll(){return t.onScroll},get onScrollEnd(){return t.onScrollEnd},get children(){return t.children}})),h;var h},exports.Virtualizer=q,exports.WindowVirtualizer=n=>{let o;const{ref:s,data:i,children:a,overscan:u,itemSize:f,shift:d,horizontal:h=!1,onScrollEnd:v}=n,g=z(n.data.length,f,u,void 0,0,!f),p=((e,t)=>{const n=t?"width":"height",o=t?"innerWidth":"innerHeight",s=new WeakMap,i=M((t=>{const o=[];for(const{target:e,contentRect:i}of t){if(!e.offsetParent)continue;const t=s.get(e);t!=r&&o.push([t,i[n]])}o.length&&e.L(3,o)}));let l;return{ne(t){const r=$(w(t)),n=()=>{e.L(4,r[o])};r.addEventListener("resize",n),n(),l=()=>{r.removeEventListener("resize",n)}},oe:(e,t)=>(s.set(e,t),i.U(e),()=>{s.delete(e),i.V(e)}),se(){l&&l(),i.j()}}})(g,h),m=((e,t)=>{let r,n,o;const s=(e,t,r,n,o=0)=>{const i=n?"offsetLeft":"offsetTop",l=o+(n&&S()?r.innerWidth-e[i]-e.offsetWidth:e[i]),c=e.offsetParent;return e!==t&&c?s(c,t,r,n,l):l},i=async(n,s)=>{if(!r)return void c((()=>i(n,s)));o&&o();const l=()=>{let t;return[new Promise(((r,n)=>{t=r,o=n,y(e)&&I(n,150)})),e.H(2,(()=>{t&&t()}))]},a=$(w(r));if(s&&b()){for(;e.L(8,n()),e.k();){const[e,t]=l();try{await e}catch(e){return}finally{t()}}a.scroll({[t?"left":"top"]:k(n(),t),behavior:"smooth"})}else for(;;){const[r,o]=l();try{a.scroll({[t?"left":"top"]:k(n(),t)}),e.L(7),await r}catch(e){return}finally{o()}}};return{ie(o){r=o;const i=t?"scrollX":"scrollY",l=w(o),c=$(l),a=l.body;n=T(e,c,t,(()=>k(c[i],t)),((r,n)=>{n?c.scroll({[t?"left":"top"]:e.O()+r}):c.scrollBy(t?r:0,t?0:r)}),(()=>s(o,a,c,t)))},se(){n&&n.j(),r=void 0},ue:()=>{n&&n.C()},ae(n,{align:o,smooth:c,offset:a=0}={}){if(!r)return;if(n=l(n,0,e.R()-1),"nearest"===o){const t=e.T(n),r=e.O();if(t<r)o="start";else{if(!(t+e.M(n)>r+e.v()))return;o="end"}}const u=w(r),f=$(u),d=u.documentElement,h=()=>e.v()-(t?d.clientWidth:d.clientHeight);i((()=>a+s(r,u.body,f,t)+e.T(n)+("end"===o?e.M(n)-(e.v()-h()):"center"===o?(e.M(n)-(e.v()-h()))/2:0)),c)}}})(g,h),[_,x]=t.createSignal(g.p()),q=g.H(1,(()=>{x(g.p())})),J=g.H(4,(()=>{var e;null===(e=n.onScroll)||void 0===e||e.call(n)})),B=g.H(8,(()=>{var e;null===(e=n.onScrollEnd)||void 0===e||e.call(n)})),H=t.createMemo((e=>{_();const t=g._();return e&&O(e,t)?e:t})),L=t.createMemo((()=>_()&&g.q())),W=t.createMemo((()=>_()&&g.P()));return t.onMount((()=>{n.ref&&n.ref({findStartIndex:g.$,findEndIndex:g.S,scrollToIndex:m.ae}),p.ne(o),m.ie(o),t.onCleanup((()=>{n.ref&&n.ref(),q(),J(),B(),p.se(),m.se()}))})),t.createComputed(t.on((()=>n.data.length),(e=>{e!==g.R()&&g.L(5,[e,n.shift])}))),t.createEffect(t.on(_,(()=>{m.ue()}))),j=P(),"function"==typeof(C=o)?e.use(C,j):o=j,j.style.setProperty("overflow-anchor","none"),j.style.setProperty("flex","none"),j.style.setProperty("position","relative"),j.style.setProperty("visibility","hidden"),e.insert(j,e.createComponent(R,{get N(){return n.data},get Z(){return H()},te:(r,o)=>{const s=t.createMemo((()=>(_(),g.T(o)))),i=t.createMemo((()=>(_(),g.I(o))));return e.createComponent(E,{D:o,get Y(){return p.oe},get A(){return s()},get G(){return i()},get K(){return n.children(r(),o)},F:h})}})),e.effect((e=>{var t=h?W()+"px":"100%",r=h?"100%":W()+"px",n=L()?"none":void 0;return t!==e.e&&(null!=(e.e=t)?j.style.setProperty("width",t):j.style.removeProperty("width")),r!==e.t&&(null!=(e.t=r)?j.style.setProperty("height",r):j.style.removeProperty("height")),n!==e.a&&(null!=(e.a=n)?j.style.setProperty("pointer-events",n):j.style.removeProperty("pointer-events")),e}),{e:void 0,t:void 0,a:void 0}),j;var j,C};
|
|
1
|
+
var e=require("solid-js/web"),t=require("solid-js");const r=null,{min:n,max:o,abs:s,floor:i}=Math,c=(e,t,r)=>n(r,o(t,e)),l="function"==typeof queueMicrotask?queueMicrotask:e=>{Promise.resolve().then(e)},a=e=>{let t,r;return()=>(t||(t=!0,r=e()),r)},u=-1,f=(e,t,r)=>{const n=r?"unshift":"push";for(let r=0;r<t;r++)e[n](u);return e},d=(e,t)=>{const r=e.o[t];return r===u?e.i:r},h=(e,t,r)=>{const o=e.o[t]===u;return e.o[t]=r,e.l=n(t,e.l),o},v=(e,t)=>{if(!e.u)return 0;if(e.l>=t)return e.h[t];e.l<0&&(e.h[0]=0,e.l=0);let r=e.l,n=e.h[r];for(;r<t;)n+=d(e,r),e.h[++r]=n;return e.l=t,n},g=(e,t,r=0,n=e.u-1)=>{for(;r<=n;){const o=i((r+n)/2),s=v(e,o);if(s<=t){if(s+d(e,o)>t)return o;r=o+1}else n=o-1}return c(r,0,e.u-1)},p=(e,t,r)=>{const o=t-e.u;return e.l=r?-1:n(t-1,e.l),e.u=t,o>0?(f(e.h,o),f(e.o,o,r),e.i*o):(e.h.splice(o),(r?e.o.splice(0,-o):e.o.splice(o)).reduce(((t,r)=>t-(r===u?e.i:r)),0))},m="undefined"!=typeof window,$=()=>document.documentElement,w=e=>e.ownerDocument,S=e=>e.defaultView,x=/*#__PURE__*/a((()=>!!m&&"rtl"===getComputedStyle($()).direction)),b=/*#__PURE__*/a((()=>/iP(hone|od|ad)/.test(navigator.userAgent))),y=/*#__PURE__*/a((()=>"scrollBehavior"in $().style)),_=e=>!!e.v(),z=(e,t=40,i=4,c=0,l,a=!1)=>{let m=!!c,$=1,w=0,S=0,x=0,y=0,_=0,z=0,I=0,k=0,T=m?[0,o(c-1,0)]:r,E=[0,0],R=0;const M=((e,t,r)=>({i:r?r[1]:t,o:r&&r[0]?f(r[0].slice(0,n(e,r[0].length)),o(0,e-r[0].length)):f([],e),u:e,l:-1,h:f([],e)}))(e,t,l),O=new Set,q=()=>x-S,J=()=>q()+_+y,P=e=>((e,t,r,o)=>{if(o=n(o,e.u-1),v(e,o)<=t){const n=g(e,t+r,o);return[g(e,t,o,n),n]}{const n=g(e,t,void 0,o);return[n,g(e,t+r,n)]}})(M,e,w,E[0]),B=()=>(e=>e.u?v(e,e.u-1)+d(e,e.u-1):0)(M),H=e=>v(M,e)-_,L=e=>d(M,e),W=e=>{e&&(b()&&0!==I?_+=e:y+=e)};return{p:()=>$,m:()=>(e=>[e.o.slice(),e.i])(M),$:()=>{let e,t;return z?[e,t]=E:([e,t]=E=P(o(0,J())),T&&(e=n(e,T[0]),t=o(t,T[1]))),1!==I&&(e-=o(0,i)),2!==I&&(t+=o(0,i)),[o(e,0),n(t,M.u-1)]},S:()=>g(M,J()),_:()=>g(M,J()+w),I:e=>M.o[e]===u,k:()=>!!T&&M.o.slice(o(0,T[0]-1),n(M.u-1,T[1]+1)+1).includes(u),T:H,R:L,M:()=>M.u,O:()=>x,q:()=>0!==I,v:()=>w,J:()=>S,P:B,B:()=>(z=y,y=0,[z,2===k||q()+w>=B()]),H:(e,t)=>{const r=[e,t];return O.add(r),()=>{O.delete(r)}},L:(e,t)=>{let n,i,c=0;switch(e){case 1:{const e=z;z=0;const n=t-x,o=s(n);e&&o<s(e)+1||0!==k||(I=n<0?2:1),m&&(T=r,m=!1),x=t,c=4;const l=q();l>=-w&&l<=B()&&(c+=1,i=o>w);break}case 2:c=8,0!==I&&(n=!0,c+=1),I=0,k=0,T=r;break;case 3:{const e=t.filter((([e,t])=>M.o[e]!==t));if(!e.length)break;W(e.reduce(((e,[t,r])=>((2===k||(T?!m&&t<T[0]:H(t)+(0===I&&0===k?L(t):0)<q()))&&(e+=r-L(t)),e)),0));for(const[t,r]of e){const e=L(t),n=h(M,t,r);a&&(R+=n?r:r-e)}a&&w&&R>w&&(W(((e,t)=>{let r=0;const n=[];e.o.forEach(((e,o)=>{e!==u&&(n.push(e),o<t&&r++)})),e.l=-1;const s=(i=n,[...i].sort(((e,t)=>e-t)));var i;const c=s.length,l=c/2|0,a=c%2==0?(s[l-1]+s[l])/2:s[l],f=e.i;return((e.i=a)-f)*o(t-r,0)})(M,g(M,J()))),a=!1),c=3,i=!0;break}case 4:w!==t&&(w=t,c=3);break;case 5:t[1]?(W(p(M,t[0],!0)),k=2,c=1):(p(M,t[0]),c=1);break;case 6:S=t;break;case 7:k=1;break;case 8:T=P(t),c=1}c&&($=1+(2147483647&$),n&&_&&(y+=_,_=0),O.forEach((([e,t])=>{c&e&&t(i)})))}}},I=setTimeout,k=(e,t)=>t&&x()?-e:e,T=(e,t,n,o,s,i)=>{const c=Date.now;let l=0,a=!1,u=!1,f=!1,d=!1;const h=(()=>{let t;const n=()=>{t!=r&&clearTimeout(t)},o=()=>{n(),t=I((()=>{t=r,(()=>{if(a||u)return a=!1,void h();f=!1,e.L(2)})()}),150)};return o.W=n,o})(),v=()=>{l=c(),f&&(d=!0),i&&e.L(6,i()),e.L(1,o()),h()},g=t=>{if(a||!e.q()||t.ctrlKey)return;const r=c()-l;150>r&&50<r&&(n?t.deltaX:t.deltaY)&&(a=!0)},p=()=>{u=!0,f=d=!1},m=()=>{u=!1,b()&&(f=!0)};return t.addEventListener("scroll",v),t.addEventListener("wheel",g,{passive:!0}),t.addEventListener("touchstart",p,{passive:!0}),t.addEventListener("touchend",m,{passive:!0}),{j:()=>{t.removeEventListener("scroll",v),t.removeEventListener("wheel",g),t.removeEventListener("touchstart",p),t.removeEventListener("touchend",m),h.W()},C:()=>{const[t,r]=e.B();t&&(s(k(t,n),r,d),d=!1,r&&e.v()>e.P()&&e.L(1,o()))}}},E=e=>{let t;return{U(r){(t||(t=new(S(w(r)).ResizeObserver)(e))).observe(r)},V(e){t.unobserve(e)},j(){t&&t.disconnect()}}},R=r=>{let n;r=t.mergeProps({X:"div"},r),t.createEffect((()=>{n&&t.onCleanup(r.Y(n,r.D))}));const o=t.createMemo((()=>{const e=r.F,t={position:"absolute",[e?"height":"width"]:"100%",[e?"top":"left"]:"0px",[e?x()?"right":"left":"top"]:r.A+"px",visibility:r.G?"hidden":"visible"};return e&&(t.display="flex"),t}));return e.createComponent(e.Dynamic,{get component(){return r.X},ref(e){"function"==typeof n?n(e):n=e},get style(){return o()},get children(){return r.K}})},M=(e,t)=>e[0]===t[0]&&e[1]===t[1],O=n=>{let s;const{itemSize:i,horizontal:a=!1,overscan:u,cache:f}=n;n=t.mergeProps({as:"div"},n);const d=z(n.data.length,i,u,void 0,f,!i),h=((e,t)=>{let n;const o=t?"width":"height",s=new WeakMap,i=E((t=>{const i=[];for(const{target:c,contentRect:l}of t)if(c.offsetParent)if(c===n)e.L(4,l[o]);else{const e=s.get(c);e!=r&&i.push([e,l[o]])}i.length&&e.L(3,i)}));return{N(e){i.U(n=e)},Z:(e,t)=>(s.set(e,t),i.U(e),()=>{s.delete(e),i.V(e)}),ee:i.j}})(d,a),v=((e,t)=>{let r,n,o;const s=t?"scrollLeft":"scrollTop",i=t?"overflowX":"overflowY",a=async(n,i)=>{if(!r)return void l((()=>a(n,i)));o&&o();const c=()=>{let t;return[new Promise(((r,n)=>{t=r,o=n,_(e)&&I(n,150)})),e.H(2,(()=>{t&&t()}))]};if(i&&y()){for(;e.L(8,n()),e.k();){const[e,t]=c();try{await e}catch(e){return}finally{t()}}r.scrollTo({[t?"left":"top"]:k(n(),t),behavior:"smooth"})}else for(;;){const[o,i]=c();try{r[s]=k(n(),t),e.L(7),await o}catch(e){return}finally{i()}}};return{te(c){r=c,n=T(e,c,t,(()=>k(c[s],t)),((t,r,n)=>{if(n){const e=c.style,t=e[i];e[i]="hidden",I((()=>{e[i]=t}))}r?(c[s]=e.O()+t,o&&o()):c[s]+=t}))},ee(){n&&n.j()},re(e){a((()=>e))},ne(t){t+=e.O(),a((()=>t))},oe(t,{align:r,smooth:n,offset:o=0}={}){if(t=c(t,0,e.M()-1),"nearest"===r){const n=e.T(t),o=e.O();if(n<o)r="start";else{if(!(n+e.R(t)>o+e.v()))return;r="end"}}a((()=>o+e.J()+e.T(t)+("end"===r?e.R(t)-e.v():"center"===r?(e.R(t)-e.v())/2:0)),n)},se:()=>{n&&n.C()}}})(d,a),[g,p]=t.createSignal(d.p()),m=d.H(1,(()=>{p(d.p())})),$=d.H(4,(()=>{var e;null===(e=n.onScroll)||void 0===e||e.call(n,d.O())})),w=d.H(8,(()=>{var e;null===(e=n.onScrollEnd)||void 0===e||e.call(n)})),S=t.createMemo((e=>{g();const t=d.$();return e&&M(e,t)?e:t})),x=t.createMemo((()=>g()&&d.q())),b=t.createMemo((()=>g()&&d.P()));t.onMount((()=>{n.ref&&n.ref({get cache(){return d.m()},get scrollOffset(){return d.O()},get scrollSize(){return(e=>o(e.P(),e.v()))(d)},get viewportSize(){return d.v()},findStartIndex:d.S,findEndIndex:d._,getItemOffset:d.T,getItemSize:d.R,scrollToIndex:v.oe,scrollTo:v.re,scrollBy:v.ne});const e=n.scrollRef||s.parentElement;h.N(e),v.te(e),t.onCleanup((()=>{n.ref&&n.ref(),m(),$(),w(),h.ee(),v.ee()}))})),t.createComputed(t.on((()=>n.data.length),(e=>{e!==d.M()&&d.L(5,[e,n.shift])}))),t.createComputed(t.on((()=>n.startMargin||0),(e=>{e!==d.J()&&d.L(6,e)}))),t.createEffect(t.on(g,(()=>{v.se()})));const O=t.createMemo((()=>{const[e,t]=S();return t>=0?n.data.slice(e,t+1):[]}));return e.createComponent(e.Dynamic,{get component(){return n.as},ref(e){"function"==typeof s?s(e):s=e},get style(){return{"overflow-anchor":"none",flex:"none",position:"relative",visibility:"hidden",width:a?b()+"px":"100%",height:a?"100%":b()+"px","pointer-events":x()?"none":void 0}},get children(){return e.createComponent(t.For,{get each(){return O()},children:(r,o)=>{const s=t.createMemo((()=>S()[0]+o())),i=t.createMemo((()=>(g(),d.T(s())))),c=t.createMemo((()=>(g(),d.I(s())))),l=t.createMemo((()=>t.untrack((()=>n.children(r,s)))));return e.createComponent(R,{get X(){return n.item},get D(){return s()},get Y(){return h.Z},get A(){return i()},get G(){return c()},get K(){return l()},F:a})}})}})};var q=/*#__PURE__*/e.template("<div>"),J=/*#__PURE__*/e.template("<div>");exports.VList=t=>{const{ref:r,data:n,children:o,overscan:s,itemSize:i,shift:c,horizontal:l,cache:a,onScroll:u,onScrollEnd:f,style:d,...h}=t;return v=q(),e.spread(v,e.mergeProps(h,{get style(){return{display:l?"inline-block":"block",[l?"overflow-x":"overflow-y"]:"auto",contain:"strict",width:"100%",height:"100%",...t.style}}}),!1,!0),e.insert(v,e.createComponent(O,{ref(e){var r=t.ref;"function"==typeof r?r(e):t.ref=e},get data(){return t.data},get overscan(){return t.overscan},get itemSize(){return t.itemSize},get shift(){return t.shift},horizontal:l,cache:a,get onScroll(){return t.onScroll},get onScrollEnd(){return t.onScrollEnd},get children(){return t.children}})),v;var v},exports.Virtualizer=O,exports.WindowVirtualizer=n=>{let o;const{ref:s,data:i,children:a,overscan:u,itemSize:f,shift:d,horizontal:h=!1,cache:v,onScrollEnd:g}=n,p=z(n.data.length,f,u,void 0,v,!f),m=((e,t)=>{const n=t?"width":"height",o=t?"innerWidth":"innerHeight",s=new WeakMap,i=E((t=>{const o=[];for(const{target:e,contentRect:i}of t){if(!e.offsetParent)continue;const t=s.get(e);t!=r&&o.push([t,i[n]])}o.length&&e.L(3,o)}));let c;return{N(t){const r=S(w(t)),n=()=>{e.L(4,r[o])};r.addEventListener("resize",n),n(),c=()=>{r.removeEventListener("resize",n)}},Z:(e,t)=>(s.set(e,t),i.U(e),()=>{s.delete(e),i.V(e)}),ee(){c&&c(),i.j()}}})(p,h),$=((e,t)=>{let r,n,o;const s=(e,t,r,n,o=0)=>{const i=n?"offsetLeft":"offsetTop",c=o+(n&&x()?r.innerWidth-e[i]-e.offsetWidth:e[i]),l=e.offsetParent;return e!==t&&l?s(l,t,r,n,c):c},i=async(n,s)=>{if(!r)return void l((()=>i(n,s)));o&&o();const c=()=>{let t;return[new Promise(((r,n)=>{t=r,o=n,_(e)&&I(n,150)})),e.H(2,(()=>{t&&t()}))]},a=S(w(r));if(s&&y()){for(;e.L(8,n()),e.k();){const[e,t]=c();try{await e}catch(e){return}finally{t()}}a.scroll({[t?"left":"top"]:k(n(),t),behavior:"smooth"})}else for(;;){const[r,o]=c();try{a.scroll({[t?"left":"top"]:k(n(),t)}),e.L(7),await r}catch(e){return}finally{o()}}};return{te(o){r=o;const i=t?"scrollX":"scrollY",c=w(o),l=S(c),a=c.body;n=T(e,l,t,(()=>k(l[i],t)),((r,n)=>{n?l.scroll({[t?"left":"top"]:e.O()+r}):l.scrollBy(t?r:0,t?0:r)}),(()=>s(o,a,l,t)))},ee(){n&&n.j(),r=void 0},se:()=>{n&&n.C()},oe(n,{align:o,smooth:l,offset:a=0}={}){if(!r)return;if(n=c(n,0,e.M()-1),"nearest"===o){const t=e.T(n),r=e.O();if(t<r)o="start";else{if(!(t+e.R(n)>r+e.v()))return;o="end"}}const u=w(r),f=S(u),d=u.documentElement,h=()=>e.v()-(t?d.clientWidth:d.clientHeight);i((()=>a+s(r,u.body,f,t)+e.T(n)+("end"===o?e.R(n)-(e.v()-h()):"center"===o?(e.R(n)-(e.v()-h()))/2:0)),l)}}})(p,h),[b,O]=t.createSignal(p.p()),q=p.H(1,(()=>{O(p.p())})),P=p.H(4,(()=>{var e;null===(e=n.onScroll)||void 0===e||e.call(n)})),B=p.H(8,(()=>{var e;null===(e=n.onScrollEnd)||void 0===e||e.call(n)})),H=t.createMemo((e=>{b();const t=p.$();return e&&M(e,t)?e:t})),L=t.createMemo((()=>b()&&p.q())),W=t.createMemo((()=>b()&&p.P()));t.onMount((()=>{n.ref&&n.ref({get cache(){return p.m()},findStartIndex:p.S,findEndIndex:p._,scrollToIndex:$.oe}),m.N(o),$.te(o),t.onCleanup((()=>{n.ref&&n.ref(),q(),P(),B(),m.ee(),$.ee()}))})),t.createComputed(t.on((()=>n.data.length),(e=>{e!==p.M()&&p.L(5,[e,n.shift])}))),t.createEffect(t.on(b,(()=>{$.se()})));const j=t.createMemo((()=>{const[e,t]=H();return t>=0?n.data.slice(e,t+1):[]}));return C=J(),"function"==typeof(U=o)?e.use(U,C):o=C,C.style.setProperty("overflow-anchor","none"),C.style.setProperty("flex","none"),C.style.setProperty("position","relative"),C.style.setProperty("visibility","hidden"),e.insert(C,e.createComponent(t.For,{get each(){return j()},children:(r,o)=>{const s=t.createMemo((()=>H()[0]+o())),i=t.createMemo((()=>(b(),p.T(s())))),c=t.createMemo((()=>(b(),p.I(s())))),l=t.createMemo((()=>t.untrack((()=>n.children(r,s)))));return e.createComponent(R,{get D(){return s()},get Y(){return m.Z},get A(){return i()},get G(){return c()},get K(){return l()},F:h})}})),e.effect((e=>{var t=h?W()+"px":"100%",r=h?"100%":W()+"px",n=L()?"none":void 0;return t!==e.e&&(null!=(e.e=t)?C.style.setProperty("width",t):C.style.removeProperty("width")),r!==e.t&&(null!=(e.t=r)?C.style.setProperty("height",r):C.style.removeProperty("height")),n!==e.a&&(null!=(e.a=n)?C.style.setProperty("pointer-events",n):C.style.removeProperty("pointer-events")),e}),{e:void 0,t:void 0,a:void 0}),C;var C,U};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|