virtua 0.36.2 → 0.37.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.
@@ -8,7 +8,7 @@ export interface VListHandle extends VirtualizerHandle {
8
8
  /**
9
9
  * Props of {@link VList}.
10
10
  */
11
- export interface VListProps extends Pick<VirtualizerProps, "children" | "count" | "overscan" | "itemSize" | "shift" | "horizontal" | "cache" | "ssrCount" | "item" | "onScroll" | "onScrollEnd" | "onRangeChange" | "keepMounted">, ViewportComponentAttributes {
11
+ export interface VListProps extends Pick<VirtualizerProps, "children" | "count" | "overscan" | "itemSize" | "shift" | "horizontal" | "cache" | "ssrCount" | "item" | "onScroll" | "onScrollEnd" | "keepMounted">, ViewportComponentAttributes {
12
12
  /**
13
13
  * If true, items are aligned to the end of the list when total size of items are smaller than viewport size. It's useful for chat like app.
14
14
  */
@@ -21,11 +21,24 @@ export interface VirtualizerHandle {
21
21
  * Get current offsetHeight, or offsetWidth if horizontal: true.
22
22
  */
23
23
  readonly viewportSize: number;
24
+ /**
25
+ * Get the start index of visible range of items.
26
+ */
27
+ readonly startIndex: number;
28
+ /**
29
+ * Get the end index of visible range of items.
30
+ */
31
+ readonly endIndex: number;
24
32
  /**
25
33
  * Get item offset from start.
26
34
  * @param index index of item
27
35
  */
28
36
  getItemOffset(index: number): number;
37
+ /**
38
+ * Get item size.
39
+ * @param index index of item
40
+ */
41
+ getItemSize(index: number): number;
29
42
  /**
30
43
  * Scroll to the item specified by index.
31
44
  * @param index index of item
@@ -62,10 +75,6 @@ export interface VirtualizerProps {
62
75
  * @defaultValue 4
63
76
  */
64
77
  overscan?: number;
65
- /**
66
- * List of indexes that should be always mounted, even when off screen.
67
- */
68
- keepMounted?: number[];
69
78
  /**
70
79
  * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.
71
80
  *
@@ -81,6 +90,10 @@ export interface VirtualizerProps {
81
90
  * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.
82
91
  */
83
92
  horizontal?: boolean;
93
+ /**
94
+ * List of indexes that should be always mounted, even when off screen.
95
+ */
96
+ keepMounted?: number[];
84
97
  /**
85
98
  * 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}.
86
99
  *
@@ -118,12 +131,6 @@ export interface VirtualizerProps {
118
131
  * Callback invoked when scrolling stops.
119
132
  */
120
133
  onScrollEnd?: () => void;
121
- /**
122
- * Callback invoked when visible items range changes.
123
- * @param startIndex The start index of viewable items.
124
- * @param endIndex The end index of viewable items.
125
- */
126
- onRangeChange?: (startIndex: number, endIndex: number) => void;
127
134
  }
128
135
  /**
129
136
  * Customizable list virtualizer for advanced usage. See {@link VirtualizerProps} and {@link VirtualizerHandle}.
@@ -9,6 +9,14 @@ export interface WindowVirtualizerHandle {
9
9
  * Get current {@link CacheSnapshot}.
10
10
  */
11
11
  readonly cache: CacheSnapshot;
12
+ /**
13
+ * Get the start index of visible range of items.
14
+ */
15
+ readonly startIndex: number;
16
+ /**
17
+ * Get the end index of visible range of items.
18
+ */
19
+ readonly endIndex: number;
12
20
  }
13
21
  /**
14
22
  * Props of {@link WindowVirtualizer}.
@@ -65,15 +73,14 @@ export interface WindowVirtualizerProps {
65
73
  */
66
74
  item?: keyof JSX.IntrinsicElements | CustomItemComponent;
67
75
  /**
68
- * Callback invoked when scrolling stops.
76
+ * Callback invoked whenever scroll offset changes.
77
+ * @param offset Current scrollTop, or scrollLeft if horizontal: true.
69
78
  */
70
- onScrollEnd?: () => void;
79
+ onScroll?: (offset: number) => void;
71
80
  /**
72
- * Callback invoked when visible items range changes.
73
- * @param startIndex The start index of viewable items.
74
- * @param endIndex The end index of viewable items.
81
+ * Callback invoked when scrolling stops.
75
82
  */
76
- onRangeChange?: (startIndex: number, endIndex: number) => void;
83
+ onScrollEnd?: () => void;
77
84
  }
78
85
  /**
79
86
  * {@link Virtualizer} controlled by the window scrolling. See {@link WindowVirtualizerProps} and {@link WindowVirtualizerHandle}.
@@ -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" | "onRangeChange">, ViewportComponentAttributes {
15
+ export interface VListProps<T> extends Pick<VirtualizerProps<T>, "ref" | "data" | "children" | "overscan" | "itemSize" | "shift" | "horizontal" | "onScroll" | "onScrollEnd">, ViewportComponentAttributes {
16
16
  }
17
17
  /**
18
18
  * Virtualized list component. See {@link VListProps} and {@link VListHandle}.
@@ -19,11 +19,24 @@ export interface VirtualizerHandle {
19
19
  * Get current offsetHeight, or offsetWidth if horizontal: true.
20
20
  */
21
21
  readonly viewportSize: number;
22
+ /**
23
+ * Get the start index of visible range of items.
24
+ */
25
+ readonly startIndex: number;
26
+ /**
27
+ * Get the end index of visible range of items.
28
+ */
29
+ readonly endIndex: number;
22
30
  /**
23
31
  * Get item offset from start.
24
32
  * @param index index of item
25
33
  */
26
34
  getItemOffset(index: number): number;
35
+ /**
36
+ * Get item size.
37
+ * @param index index of item
38
+ */
39
+ getItemSize(index: number): number;
27
40
  /**
28
41
  * Scroll to the item specified by index.
29
42
  * @param index index of item
@@ -104,12 +117,6 @@ export interface VirtualizerProps<T> {
104
117
  * Callback invoked when scrolling stops.
105
118
  */
106
119
  onScrollEnd?: () => void;
107
- /**
108
- * Callback invoked when visible items range changes.
109
- * @param startIndex The start index of viewable items.
110
- * @param endIndex The end index of viewable items.
111
- */
112
- onRangeChange?: (startIndex: number, endIndex: number) => void;
113
120
  }
114
121
  /**
115
122
  * Customizable list virtualizer for advanced usage. See {@link VirtualizerProps} and {@link VirtualizerHandle}.
@@ -2,10 +2,27 @@
2
2
  * @jsxImportSource solid-js
3
3
  */
4
4
  import { JSX } from "solid-js";
5
+ /**
6
+ * Methods of {@link WindowVirtualizer}.
7
+ */
8
+ export interface WindowVirtualizerHandle {
9
+ /**
10
+ * Get the start index of visible range of items.
11
+ */
12
+ readonly startIndex: number;
13
+ /**
14
+ * Get the end index of visible range of items.
15
+ */
16
+ readonly endIndex: number;
17
+ }
5
18
  /**
6
19
  * Props of {@link WindowVirtualizer}.
7
20
  */
8
21
  export interface WindowVirtualizerProps<T> {
22
+ /**
23
+ * Get reference to {@link WindowVirtualizerHandle}.
24
+ */
25
+ ref?: (handle?: WindowVirtualizerHandle) => void;
9
26
  /**
10
27
  * The data items rendered by this component.
11
28
  */
@@ -35,15 +52,14 @@ export interface WindowVirtualizerProps<T> {
35
52
  */
36
53
  horizontal?: boolean;
37
54
  /**
38
- * Callback invoked when scrolling stops.
55
+ * Callback invoked whenever scroll offset changes.
56
+ * @param offset Current scrollTop, or scrollLeft if horizontal: true.
39
57
  */
40
- onScrollEnd?: () => void;
58
+ onScroll?: (offset: number) => void;
41
59
  /**
42
- * Callback invoked when visible items range changes.
43
- * @param startIndex The start index of viewable items.
44
- * @param endIndex The end index of viewable items.
60
+ * Callback invoked when scrolling stops.
45
61
  */
46
- onRangeChange?: (startIndex: number, endIndex: number) => void;
62
+ onScrollEnd?: () => void;
47
63
  }
48
64
  /**
49
65
  * {@link Virtualizer} controlled by the window scrolling. See {@link WindowVirtualizerProps} and {@link WindowVirtualizerHandle}.
@@ -6,4 +6,4 @@ export type { VListProps, VListHandle } from "./VList";
6
6
  export { Virtualizer } from "./Virtualizer";
7
7
  export type { VirtualizerProps, VirtualizerHandle } from "./Virtualizer";
8
8
  export { WindowVirtualizer } from "./WindowVirtualizer";
9
- export type { WindowVirtualizerProps, } from "./WindowVirtualizer";
9
+ export type { WindowVirtualizerProps, WindowVirtualizerHandle, } from "./WindowVirtualizer";
@@ -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=setTimeout,c=(e,t,r)=>n(r,o(t,e)),u="function"==typeof queueMicrotask?queueMicrotask:e=>{Promise.resolve().then(e)},a=e=>{let t,r;return(...n)=>(t||(t=!0,r=e(...n)),r)},f=-1,d=(e,t,r)=>{const n=r?"unshift":"push";for(let r=0;r<t;r++)e[n](f);return e},h=(e,t)=>{const r=e.o[t];return r===f?e.i:r},g=(e,t,r)=>{const o=e.o[t]===f;return e.o[t]=r,e.l=n(t,e.l),o},_=(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+=h(e,r),e.h[++r]=n;return e.l=t,n},v=(e,t,r=0,n=e.u-1)=>{for(;r<=n;){const o=i((r+n)/2),s=_(e,o);if(s<=t){if(s+h(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?(d(e.h,o),d(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===f?e.i:r)),0))},m="undefined"!=typeof window,w=()=>document.documentElement,b=e=>e.ownerDocument,S=e=>e.defaultView,y=/*#__PURE__*/a((()=>!!m&&"rtl"===getComputedStyle(w()).direction)),z=/*#__PURE__*/a((()=>/iP(hone|od|ad)/.test(navigator.userAgent))),x=/*#__PURE__*/a((()=>"scrollBehavior"in w().style)),k=(e,t,r,s,i)=>(1!==s&&(e-=o(0,r)),2!==s&&(t+=o(0,r)),[o(e,0),n(t,i-1)]),I=(e,t=40,i=0,l,c=!1)=>{let u=!!i,a=[],m=0,w=0,b=0,S=0,y=0,x=0,k=0,I=0,R=0,T=u?[0,o(i-1,0)]:r,M=[0,0],C=0;const J=((e,t)=>({i:t,o:d([],e),u:e,l:-1,h:d([],e)}))(e,t),O=new Set,q=()=>b-w,B=e=>((e,t,r,o)=>{if(o=n(o,e.u-1),_(e,o)<=t){const n=v(e,t+r,o);return[v(e,t,o,n),n]}{const n=v(e,t,void 0,o);return[n,v(e,t+r,n)]}})(J,e,m,M[0]),E=()=>(e=>e.u?_(e,e.u-1)+h(e,e.u-1):0)(J),H=e=>_(J,e)-x,L=e=>h(J,e),P=e=>{e&&(z()&&0!==I?x+=e:(y+=e,S++))};return{_:()=>a,v:()=>(e=>[e.o.slice(),e.i])(J),p:()=>k?M:(M=B(o(0,q()+x+y)),T?[n(M[0],T[0]),o(M[1],T[1])]:M),m:e=>J.o[e]===f,S:()=>!!T&&J.o.slice(o(0,T[0]-1),n(J.u-1,T[1]+1)+1).includes(f),k:H,I:L,R:()=>J.u,T:()=>b,M:()=>I,C:()=>m,J:()=>w,O:E,q:()=>S,B:()=>(k=y,y=0,[k,2===R||q()+m>=E()]),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=k;k=0;const n=t-b,o=s(n);e&&o<s(e)+1||0!==R||(I=n<0?2:1),u&&(T=r,u=!1),b=t,l=4;const c=q();c>=-m&&c<=E()&&(l+=1,i=o>m);break}case 2:l=8,0!==I&&(n=!0,l+=1),I=0,R=0,T=r;break;case 3:{const e=t.filter((([e,t])=>J.o[e]!==t));if(!e.length)break;P(e.reduce(((e,[t,r])=>((2===R||(T?t<T[0]:H(t)+(0===I&&0===R?L(t):0)<q()))&&(e+=r-L(t)),e)),0));for(const[t,r]of e){const e=L(t),n=g(J,t,r);c&&(C+=n?r:r-e)}c&&m&&C>m&&(P(((e,t)=>{let r=0;const n=e.o.filter(((e,n)=>{const o=e!==f;return o&&n<t&&r++,o})),s=e.i;return e.l=-1,((e.i=(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)*o(t-r,0)})(J,M[0])),c=!1),l=3,i=!0;break}case 4:m!==t&&(m=t,l=3);break;case 5:t[1]?(P(p(J,t[0],!0)),R=2,l=1):p(J,t[0]);break;case 6:w=t;break;case 7:R=1;break;case 8:T=B(t),l=1}l&&(a=[],n&&x&&(y+=x,x=0,S++),O.forEach((([e,t])=>{l&e&&t(i)})))}}},R=e=>{let t;return{P(r){(t||(t=new(S(b(r)).ResizeObserver)(e))).observe(r)},W(e){t.unobserve(e)},j(){t&&t.disconnect()}}},T=(e,t)=>t&&y()?-e:e,M=(e,t,n,o,s,i)=>{const c=Date.now;let u=0,a=!1,f=!1,d=!1,h=!1;const g=(()=>{let t;const n=()=>{t!=r&&clearTimeout(t)},o=()=>{n(),t=l((()=>{t=r,(()=>{if(a||f)return a=!1,void g();d=!1,e.L(2)})()}),150)};return o.D=n,o})(),_=()=>{u=c(),d&&(h=!0),i&&e.L(6,i()),e.L(1,o()),g()},v=t=>{if(a||0===e.M()||t.ctrlKey)return;const r=c()-u;150>r&&50<r&&(n?t.deltaX:t.deltaY)&&(a=!0)},p=()=>{f=!0,d=h=!1},m=()=>{f=!1,z()&&(d=!0)};return t.addEventListener("scroll",_),t.addEventListener("wheel",v,{passive:!0}),t.addEventListener("touchstart",p,{passive:!0}),t.addEventListener("touchend",m,{passive:!0}),{j:()=>{t.removeEventListener("scroll",_),t.removeEventListener("wheel",v),t.removeEventListener("touchstart",p),t.removeEventListener("touchend",m),g.D()},U:()=>{const[t,r]=e.B();t&&(s(T(t,n),r,h),h=!1,r&&e.C()>e.O()&&e.L(1,o()))}}},C=r=>{let n;r=t.mergeProps({V:"div"},r),t.createEffect((()=>{n&&t.onCleanup(r.X(n,r.Y))}));const o=t.createMemo((()=>{const e=r.F,t={position:"absolute",[e?"height":"width"]:"100%",[e?"top":"left"]:"0px",[e?y()?"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.V},ref(e){"function"==typeof n?n(e):n=e},get style(){return o()},get children(){return r.K}})},J=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.$:t.createRoot((r=>{const n=t.createSignal(o),s=e.ee(n[0],c);return i.set(c,{te:n,$:s,j:r}),s}))),s&&(o!==s.te&&s.te[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}=n;n=t.mergeProps({as:"div"},n);const f=I(n.data.length,null!=i?i:40,void 0,0,!i),d=((e,t)=>{let n;const o=t?"width":"height",s=new WeakMap,i=R((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{re(e){i.P(n=e)},ne:(e,t)=>(s.set(e,t),i.P(e),()=>{s.delete(e),i.W(e)}),j: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 u((()=>a(n,i)));o&&o();const c=()=>{let t;return[new Promise(((r,n)=>{t=r,o=n,(e=>!!e.C())(e)&&l(n,150)})),e.H(2,(()=>{t&&t()}))]};if(i&&x()){for(;e.L(8,n()),e.S();){const[e,t]=c();try{await e}catch(e){return}finally{t()}}r.scrollTo({[t?"left":"top"]:T(n(),t),behavior:"smooth"})}else for(;;){const[o,i]=c();try{r[s]=T(n(),t),e.L(7),await o}catch(e){return}finally{i()}}};return{P(c){r=c,n=M(e,c,t,(()=>T(c[s],t)),((t,r,n)=>{if(n){const e=c.style,t=e[i];e[i]="hidden",l((()=>{e[i]=t}))}r?(c[s]=e.T()+t,o&&o()):c[s]+=t}))},j(){n&&n.j()},oe(e){a((()=>e))},se(t){t+=e.T(),a((()=>t))},ie(t,{align:r,smooth:n,offset:o=0}={}){if(t=c(t,0,e.R()-1),"nearest"===r){const n=e.k(t),o=e.T();if(n<o)r="start";else{if(!(n+e.I(t)>o+e.C()))return;r="end"}}a((()=>o+e.J()+e.k(t)+("end"===r?e.I(t)-e.C():"center"===r?(e.I(t)-e.C())/2:0)),n)},U:()=>{n&&n.U()}}})(f,a),[g,_]=t.createSignal(f._()),v=f.H(1,(()=>{_(f._())})),p=f.H(4,(()=>{var e;null===(e=n.onScroll)||void 0===e||e.call(n,f.T())})),m=f.H(8,(()=>{var e;null===(e=n.onScrollEnd)||void 0===e||e.call(n)})),w=t.createMemo((e=>{g();const t=f.p();return e&&O(e,t)?e:t})),b=t.createMemo((()=>g()&&f.M())),S=t.createMemo((()=>g()&&f.O())),y=t.createMemo((()=>g()&&f.q())),z=t.createMemo((e=>{var t;const r=null!==(t=n.overscan)&&void 0!==t?t:4,[o,s]=w(),i=k(o,s,r,b(),n.data.length);return e&&O(e,i)?e:i}));return t.onMount((()=>{n.ref&&n.ref({get scrollOffset(){return f.T()},get scrollSize(){return(e=>o(e.O(),e.C()))(f)},get viewportSize(){return f.C()},getItemOffset:f.k,scrollToIndex:h.ie,scrollTo:h.oe,scrollBy:h.se});const e=n.scrollRef||s.parentElement;d.re(e),h.P(e),t.onCleanup((()=>{n.ref&&n.ref(),v(),p(),m(),d.j(),h.j()}))})),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(y,(()=>{h.U()}))),t.createEffect((()=>{const e=w();n.onRangeChange&&n.onRangeChange(e[0],e[1])})),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":0!==b()?"none":void 0}},get children(){return e.createComponent(J,{get N(){return n.data},get Z(){return z()},ee:(r,o)=>{const s=t.createMemo((()=>(g(),f.k(o)))),i=t.createMemo((()=>(g(),f.m(o))));return e.createComponent(C,{get V(){return n.item},Y:o,get X(){return d.ne},get A(){return s()},get G(){return i()},get K(){return n.children(r(),o)},F:a})}})}})};var B=/*#__PURE__*/e.template("<div>"),E=/*#__PURE__*/e.template("<div>");exports.VList=t=>{const{ref:r,data:n,children:o,overscan:s,itemSize:i,shift:l,horizontal:c,onScroll:u,onScrollEnd:a,onRangeChange:f,style:d,...h}=t;return g=B(),e.spread(g,e.mergeProps(h,{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(g,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 onRangeChange(){return t.onRangeChange},get children(){return t.children}})),g;var g},exports.Virtualizer=q,exports.WindowVirtualizer=n=>{let o;const{data:s,children:i,overscan:l,itemSize:c,shift:u,horizontal:a=!1,onScrollEnd:f,onRangeChange:d}=n,h=I(n.data.length,null!=c?c:40,void 0,0,!c),g=((e,t)=>{const n=t?"width":"height",o=t?"innerWidth":"innerHeight",s=new WeakMap,i=R((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{re(t){const r=S(b(t)),n=()=>{e.L(4,r[o])};r.addEventListener("resize",n),n(),l=()=>{r.removeEventListener("resize",n)}},ne:(e,t)=>(s.set(e,t),i.P(e),()=>{s.delete(e),i.W(e)}),j(){l&&l(),i.j()}}})(h,a),_=((e,t)=>{let r;return{P(n){const o=t?"scrollX":"scrollY",s=b(n),i=S(s),l=s.body,c=(e,t,r,n=0)=>{const o=r?"offsetLeft":"offsetTop",s=n+(r&&y()?i.innerWidth-e[o]-e.offsetWidth:e[o]),l=e.offsetParent;return e!==t&&l?c(l,t,r,s):s};r=M(e,i,t,(()=>T(i[o],t)),((r,n)=>{n?i.scroll({[t?"left":"top"]:e.T()+r}):i.scrollBy(t?r:0,t?0:r)}),(()=>c(n,l,t)))},j(){r&&r.j()},U:()=>{r&&r.U()}}})(h,a),[v,p]=t.createSignal(h._()),m=h.H(1,(()=>{p(h._())})),w=h.H(8,(()=>{var e;null===(e=n.onScrollEnd)||void 0===e||e.call(n)})),z=t.createMemo((e=>{v();const t=h.p();return e&&O(e,t)?e:t})),x=t.createMemo((()=>v()&&h.M())),q=t.createMemo((()=>v()&&h.O())),B=t.createMemo((()=>v()&&h.q())),H=t.createMemo((e=>{var t;const r=null!==(t=n.overscan)&&void 0!==t?t:4,[o,s]=z(),i=k(o,s,r,x(),n.data.length);return e&&O(e,i)?e:i}));return t.onMount((()=>{g.re(o),_.P(o),t.onCleanup((()=>{m(),w(),g.j(),_.j()}))})),t.createComputed(t.on((()=>n.data.length),(e=>{e!==h.R()&&h.L(5,[e,n.shift])}))),t.createEffect(t.on(B,(()=>{_.U()}))),t.createEffect((()=>{const e=z();n.onRangeChange&&n.onRangeChange(e[0],e[1])})),L=E(),"function"==typeof(P=o)?e.use(P,L):o=L,L.style.setProperty("overflow-anchor","none"),L.style.setProperty("flex","none"),L.style.setProperty("position","relative"),L.style.setProperty("visibility","hidden"),e.insert(L,e.createComponent(J,{get N(){return n.data},get Z(){return H()},ee:(r,o)=>{const s=t.createMemo((()=>(v(),h.k(o)))),i=t.createMemo((()=>(v(),h.m(o))));return e.createComponent(C,{Y:o,get X(){return g.ne},get A(){return s()},get G(){return i()},get K(){return n.children(r(),o)},F:a})}})),e.effect((e=>{var t=a?q()+"px":"100%",r=a?"100%":q()+"px",n=0!==x()?"none":void 0;return t!==e.e&&(null!=(e.e=t)?L.style.setProperty("width",t):L.style.removeProperty("width")),r!==e.t&&(null!=(e.t=r)?L.style.setProperty("height",r):L.style.removeProperty("height")),n!==e.a&&(null!=(e.a=n)?L.style.setProperty("pointer-events",n):L.style.removeProperty("pointer-events")),e}),{e:void 0,t:void 0,a:void 0}),L;var L,P};
1
+ var e=require("solid-js/web"),t=require("solid-js");const r=null,{min:n,max:o,abs:s,floor:i}=Math,l=setTimeout,c=(e,t,r)=>n(r,o(t,e)),u="function"==typeof queueMicrotask?queueMicrotask:e=>{Promise.resolve().then(e)},a=e=>{let t,r;return()=>(t||(t=!0,r=e()),r)},f=-1,d=(e,t,r)=>{const n=r?"unshift":"push";for(let r=0;r<t;r++)e[n](f);return e},h=(e,t)=>{const r=e.o[t];return r===f?e.i:r},g=(e,t,r)=>{const o=e.o[t]===f;return e.o[t]=r,e.l=n(t,e.l),o},_=(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+=h(e,r),e.h[++r]=n;return e.l=t,n},v=(e,t,r=0,n=e.u-1)=>{for(;r<=n;){const o=i((r+n)/2),s=_(e,o);if(s<=t){if(s+h(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?(d(e.h,o),d(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===f?e.i:r)),0))},m="undefined"!=typeof window,w=()=>document.documentElement,S=e=>e.ownerDocument,b=e=>e.defaultView,x=/*#__PURE__*/a((()=>!!m&&"rtl"===getComputedStyle(w()).direction)),z=/*#__PURE__*/a((()=>/iP(hone|od|ad)/.test(navigator.userAgent))),y=/*#__PURE__*/a((()=>"scrollBehavior"in w().style)),I=(e,t=40,i=4,l=0,c,u=!1)=>{let a=!!l,m=[],w=0,S=0,b=0,x=0,y=0,I=0,k=0,T=0,M=0,R=a?[0,o(l-1,0)]:r,J=[0,0],O=0;const q=((e,t)=>({i:t,o:d([],e),u:e,l:-1,h:d([],e)}))(e,t),E=new Set,B=()=>b-S,C=()=>B()+I+y,H=e=>((e,t,r,o)=>{if(o=n(o,e.u-1),_(e,o)<=t){const n=v(e,t+r,o);return[v(e,t,o,n),n]}{const n=v(e,t,void 0,o);return[n,v(e,t+r,n)]}})(q,e,w,J[0]),L=()=>(e=>e.u?_(e,e.u-1)+h(e,e.u-1):0)(q),P=e=>_(q,e)-I,W=e=>h(q,e),j=e=>{e&&(z()&&0!==T?I+=e:(y+=e,x++))};return{_:()=>m,v:()=>(e=>[e.o.slice(),e.i])(q),p:()=>{if(k)return J;let[e,t]=H(o(0,C()));return R&&(e=n(e,R[0]),t=o(t,R[1])),1!==T&&(e-=o(0,i)),2!==T&&(t+=o(0,i)),J=[o(e,0),n(t,q.u-1)]},m:()=>v(q,C()),S:()=>v(q,C()+w),I:e=>q.o[e]===f,k:()=>!!R&&q.o.slice(o(0,R[0]-1),n(q.u-1,R[1]+1)+1).includes(f),T:P,M:W,R:()=>q.u,J:()=>b,O:()=>0!==T,q:()=>w,B:()=>S,C:L,H:()=>x,L:()=>(k=y,y=0,[k,2===M||B()+w>=L()]),P:(e,t)=>{const r=[e,t];return E.add(r),()=>{E.delete(r)}},W:(e,t)=>{let n,i,l=0;switch(e){case 1:{const e=k;k=0;const n=t-b,o=s(n);e&&o<s(e)+1||0!==M||(T=n<0?2:1),a&&(R=r,a=!1),b=t,l=4;const c=B();c>=-w&&c<=L()&&(l+=1,i=o>w);break}case 2:l=8,0!==T&&(n=!0,l+=1),T=0,M=0,R=r;break;case 3:{const e=t.filter((([e,t])=>q.o[e]!==t));if(!e.length)break;j(e.reduce(((e,[t,r])=>((2===M||(R?t<R[0]:P(t)+(0===T&&0===M?W(t):0)<B()))&&(e+=r-W(t)),e)),0));for(const[t,r]of e){const e=W(t),n=g(q,t,r);u&&(O+=n?r:r-e)}u&&w&&O>w&&(j(((e,t)=>{let r=0;const n=e.o.filter(((e,n)=>{const o=e!==f;return o&&n<t&&r++,o})),s=e.i;return e.l=-1,((e.i=(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)*o(t-r,0)})(q,v(q,C()))),u=!1),l=3,i=!0;break}case 4:w!==t&&(w=t,l=3);break;case 5:t[1]?(j(p(q,t[0],!0)),M=2,l=1):p(q,t[0]);break;case 6:S=t;break;case 7:M=1;break;case 8:R=H(t),l=1}l&&(m=[],n&&I&&(y+=I,I=0,x++),E.forEach((([e,t])=>{l&e&&t(i)})))}}},k=e=>{let t;return{j(r){(t||(t=new(b(S(r)).ResizeObserver)(e))).observe(r)},U(e){t.unobserve(e)},V(){t&&t.disconnect()}}},T=(e,t)=>t&&x()?-e:e,M=(e,t,n,o,s,i)=>{const c=Date.now;let u=0,a=!1,f=!1,d=!1,h=!1;const g=(()=>{let t;const n=()=>{t!=r&&clearTimeout(t)},o=()=>{n(),t=l((()=>{t=r,(()=>{if(a||f)return a=!1,void g();d=!1,e.W(2)})()}),150)};return o.X=n,o})(),_=()=>{u=c(),d&&(h=!0),i&&e.W(6,i()),e.W(1,o()),g()},v=t=>{if(a||!e.O()||t.ctrlKey)return;const r=c()-u;150>r&&50<r&&(n?t.deltaX:t.deltaY)&&(a=!0)},p=()=>{f=!0,d=h=!1},m=()=>{f=!1,z()&&(d=!0)};return t.addEventListener("scroll",_),t.addEventListener("wheel",v,{passive:!0}),t.addEventListener("touchstart",p,{passive:!0}),t.addEventListener("touchend",m,{passive:!0}),{V:()=>{t.removeEventListener("scroll",_),t.removeEventListener("wheel",v),t.removeEventListener("touchstart",p),t.removeEventListener("touchend",m),g.X()},Y:()=>{const[t,r]=e.L();t&&(s(T(t,n),r,h),h=!1,r&&e.q()>e.C()&&e.W(1,o()))}}},R=r=>{let n;r=t.mergeProps({D:"div"},r),t.createEffect((()=>{n&&t.onCleanup(r.F(n,r.A))}));const o=t.createMemo((()=>{const e=r.G,t={position:"absolute",[e?"height":"width"]:"100%",[e?"top":"left"]:"0px",[e?x()?"right":"left":"top"]:r.K+"px",visibility:r.N?"hidden":"visible"};return e&&(t.display="flex"),t}));return e.createComponent(e.Dynamic,{get component(){return r.D},ref(e){"function"==typeof n?n(e):n=e},get style(){return o()},get children(){return r.Z}})},J=e=>{let r=new Map;return t.onCleanup((()=>{for(const e of r.values())e.V()})),t.createMemo((()=>{const n=e.$,[o,s]=e.ee,i=new Map,l=[];for(let c=o;c<=s;c++){const o=n[c],s=r.get(c);l.push(s?s.te:t.createRoot((r=>{const n=t.createSignal(o),s=e.re(n[0],c);return i.set(c,{ne:n,te:s,V:r}),s}))),s&&(o!==s.ne&&s.ne[1](o),i.set(c,s))}for(const[e,t]of r.entries())i.has(e)||t.V();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:f}=n;n=t.mergeProps({as:"div"},n);const d=I(n.data.length,i,f,void 0,0,!i),h=((e,t)=>{let n;const o=t?"width":"height",s=new WeakMap,i=k((t=>{const i=[];for(const{target:l,contentRect:c}of t)if(l.offsetParent)if(l===n)e.W(4,c[o]);else{const e=s.get(l);e!=r&&i.push([e,c[o]])}i.length&&e.W(3,i)}));return{oe(e){i.j(n=e)},se:(e,t)=>(s.set(e,t),i.j(e),()=>{s.delete(e),i.U(e)}),V:i.V}})(d,a),g=((e,t)=>{let r,n,o;const s=t?"scrollLeft":"scrollTop",i=t?"overflowX":"overflowY",a=async(n,i)=>{if(!r)return void u((()=>a(n,i)));o&&o();const c=()=>{let t;return[new Promise(((r,n)=>{t=r,o=n,(e=>!!e.q())(e)&&l(n,150)})),e.P(2,(()=>{t&&t()}))]};if(i&&y()){for(;e.W(8,n()),e.k();){const[e,t]=c();try{await e}catch(e){return}finally{t()}}r.scrollTo({[t?"left":"top"]:T(n(),t),behavior:"smooth"})}else for(;;){const[o,i]=c();try{r[s]=T(n(),t),e.W(7),await o}catch(e){return}finally{i()}}};return{j(c){r=c,n=M(e,c,t,(()=>T(c[s],t)),((t,r,n)=>{if(n){const e=c.style,t=e[i];e[i]="hidden",l((()=>{e[i]=t}))}r?(c[s]=e.J()+t,o&&o()):c[s]+=t}))},V(){n&&n.V()},ie(e){a((()=>e))},le(t){t+=e.J(),a((()=>t))},ce(t,{align:r,smooth:n,offset:o=0}={}){if(t=c(t,0,e.R()-1),"nearest"===r){const n=e.T(t),o=e.J();if(n<o)r="start";else{if(!(n+e.M(t)>o+e.q()))return;r="end"}}a((()=>o+e.B()+e.T(t)+("end"===r?e.M(t)-e.q():"center"===r?(e.M(t)-e.q())/2:0)),n)},Y:()=>{n&&n.Y()}}})(d,a),[_,v]=t.createSignal(d._()),p=d.P(1,(()=>{v(d._())})),m=d.P(4,(()=>{var e;null===(e=n.onScroll)||void 0===e||e.call(n,d.J())})),w=d.P(8,(()=>{var e;null===(e=n.onScrollEnd)||void 0===e||e.call(n)})),S=t.createMemo((e=>{_();const t=d.p();return e&&O(e,t)?e:t})),b=t.createMemo((()=>_()&&d.O())),x=t.createMemo((()=>_()&&d.C())),z=t.createMemo((()=>_()&&d.H()));return t.onMount((()=>{n.ref&&n.ref({get scrollOffset(){return d.J()},get scrollSize(){return(e=>o(e.C(),e.q()))(d)},get viewportSize(){return d.q()},get startIndex(){return d.m()},get endIndex(){return d.S()},getItemOffset:d.T,getItemSize:d.M,scrollToIndex:g.ce,scrollTo:g.ie,scrollBy:g.le});const e=n.scrollRef||s.parentElement;h.oe(e),g.j(e),t.onCleanup((()=>{n.ref&&n.ref(),p(),m(),w(),h.V(),g.V()}))})),t.createComputed(t.on((()=>n.data.length),(e=>{e!==d.R()&&d.W(5,[e,n.shift])}))),t.createComputed(t.on((()=>n.startMargin||0),(e=>{e!==d.B()&&d.W(6,e)}))),t.createEffect(t.on(z,(()=>{g.Y()}))),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?x()+"px":"100%",height:a?"100%":x()+"px","pointer-events":b()?"none":void 0}},get children(){return e.createComponent(J,{get $(){return n.data},get ee(){return S()},re:(r,o)=>{const s=t.createMemo((()=>(_(),d.T(o)))),i=t.createMemo((()=>(_(),d.I(o))));return e.createComponent(R,{get D(){return n.item},A:o,get F(){return h.se},get K(){return s()},get N(){return i()},get Z(){return n.children(r(),o)},G:a})}})}})};var E=/*#__PURE__*/e.template("<div>"),B=/*#__PURE__*/e.template("<div>");exports.VList=t=>{const{ref:r,data:n,children:o,overscan:s,itemSize:i,shift:l,horizontal:c,onScroll:u,onScrollEnd:a,style:f,...d}=t;return h=E(),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:l,overscan:c,itemSize:u,shift:a,horizontal:f=!1,onScrollEnd:d}=n,h=I(n.data.length,u,c,void 0,0,!u),g=((e,t)=>{const n=t?"width":"height",o=t?"innerWidth":"innerHeight",s=new WeakMap,i=k((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.W(3,o)}));let l;return{oe(t){const r=b(S(t)),n=()=>{e.W(4,r[o])};r.addEventListener("resize",n),n(),l=()=>{r.removeEventListener("resize",n)}},se:(e,t)=>(s.set(e,t),i.j(e),()=>{s.delete(e),i.U(e)}),V(){l&&l(),i.V()}}})(h,f),_=((e,t)=>{let r;return{j(n){const o=t?"scrollX":"scrollY",s=S(n),i=b(s),l=s.body,c=(e,t,r,n=0)=>{const o=r?"offsetLeft":"offsetTop",s=n+(r&&x()?i.innerWidth-e[o]-e.offsetWidth:e[o]),l=e.offsetParent;return e!==t&&l?c(l,t,r,s):s};r=M(e,i,t,(()=>T(i[o],t)),((r,n)=>{n?i.scroll({[t?"left":"top"]:e.J()+r}):i.scrollBy(t?r:0,t?0:r)}),(()=>c(n,l,t)))},V(){r&&r.V()},Y:()=>{r&&r.Y()}}})(h,f),[v,p]=t.createSignal(h._()),m=h.P(1,(()=>{p(h._())})),w=h.P(4,(()=>{var e;null===(e=n.onScroll)||void 0===e||e.call(n,h.J())})),z=h.P(8,(()=>{var e;null===(e=n.onScrollEnd)||void 0===e||e.call(n)})),y=t.createMemo((e=>{v();const t=h.p();return e&&O(e,t)?e:t})),q=t.createMemo((()=>v()&&h.O())),E=t.createMemo((()=>v()&&h.C())),C=t.createMemo((()=>v()&&h.H()));return t.onMount((()=>{n.ref&&n.ref({get startIndex(){return h.m()},get endIndex(){return h.S()}}),g.oe(o),_.j(o),t.onCleanup((()=>{n.ref&&n.ref(),m(),w(),z(),g.V(),_.V()}))})),t.createComputed(t.on((()=>n.data.length),(e=>{e!==h.R()&&h.W(5,[e,n.shift])}))),t.createEffect(t.on(C,(()=>{_.Y()}))),H=B(),"function"==typeof(L=o)?e.use(L,H):o=H,H.style.setProperty("overflow-anchor","none"),H.style.setProperty("flex","none"),H.style.setProperty("position","relative"),H.style.setProperty("visibility","hidden"),e.insert(H,e.createComponent(J,{get $(){return n.data},get ee(){return y()},re:(r,o)=>{const s=t.createMemo((()=>(v(),h.T(o)))),i=t.createMemo((()=>(v(),h.I(o))));return e.createComponent(R,{A:o,get F(){return g.se},get K(){return s()},get N(){return i()},get Z(){return n.children(r(),o)},G:f})}})),e.effect((e=>{var t=f?E()+"px":"100%",r=f?"100%":E()+"px",n=q()?"none":void 0;return t!==e.e&&(null!=(e.e=t)?H.style.setProperty("width",t):H.style.removeProperty("width")),r!==e.t&&(null!=(e.t=r)?H.style.setProperty("height",r):H.style.removeProperty("height")),n!==e.a&&(null!=(e.a=n)?H.style.setProperty("pointer-events",n):H.style.removeProperty("pointer-events")),e}),{e:void 0,t:void 0,a:void 0}),H;var H,L};
2
2
  //# sourceMappingURL=index.js.map