vlist 3.0.1-next.1 → 3.1.0-next.3
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.github.md +149 -58
- package/README.md +149 -51
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/core/switching.d.ts +15 -0
- package/dist/core/types.d.ts +2 -0
- package/dist/index.js +1 -1
- package/dist/plugins/carousel/input.d.ts +16 -0
- package/dist/react.d.ts +38 -0
- package/dist/react.js +1 -0
- package/dist/size.json +1 -1
- package/dist/solid.d.ts +34 -0
- package/dist/solid.js +1 -0
- package/dist/svelte.d.ts +30 -0
- package/dist/svelte.js +1 -0
- package/dist/synthetic.js +1 -1
- package/dist/version.json +1 -1
- package/dist/vue.d.ts +30 -0
- package/dist/vue.js +1 -0
- package/package.json +49 -2
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* carousel() under `scroll.mode: "synthetic"` (RFC-015).
|
|
3
|
+
*
|
|
4
|
+
* A carousel brings its own engine: the runway (core/runway.ts), a native
|
|
5
|
+
* scroller a few viewports long. With "synthetic" it runs the synthetic handler
|
|
6
|
+
* instead, the same one the deprecated vlist/synthetic entry runs a carousel on:
|
|
7
|
+
* at once when the driver is loaded, otherwise on the runway until the driver
|
|
8
|
+
* arrives and then, in place, on the synthetic handler (core/switching.ts).
|
|
9
|
+
*/
|
|
10
|
+
import type { LogicalScrollConfig, LogicalScrollHandler } from "../../core/logical";
|
|
11
|
+
import { type LogicalHandlerFactory } from "../../core/switching";
|
|
12
|
+
/** Load the synthetic driver; once it resolves, new carousels start synthetic. */
|
|
13
|
+
export declare const loadDriver: () => Promise<LogicalHandlerFactory>;
|
|
14
|
+
/** The engine a `scroll.mode: "synthetic"` carousel hands the core. */
|
|
15
|
+
export declare function startSyntheticCarousel(config: LogicalScrollConfig, onSynthetic: () => void, onError: (error: Error) => void): LogicalScrollHandler;
|
|
16
|
+
//# sourceMappingURL=input.d.ts.map
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist/react — React hooks, feature-first (#328).
|
|
3
|
+
*
|
|
4
|
+
* Features are passed explicitly, as with the vanilla builder, so an app only
|
|
5
|
+
* bundles what it uses:
|
|
6
|
+
*
|
|
7
|
+
* const { containerRef } = useVList({ items, item }, [grid({ columns: 4 })]);
|
|
8
|
+
*
|
|
9
|
+
* The core comes from the root entry (`import … from "vlist"` in the built
|
|
10
|
+
* package), never a copy of its own.
|
|
11
|
+
*/
|
|
12
|
+
import { type RefObject } from "react";
|
|
13
|
+
import { createVList } from "./index";
|
|
14
|
+
import type { CreateVListConfig, EventHandler, PluginMethods, VList, VListEvents, VListItem, VListPlugin } from "./index";
|
|
15
|
+
/** `createVList`'s config without `container`: the hook owns the element. */
|
|
16
|
+
export type UseVListConfig<T extends VListItem = VListItem> = Omit<CreateVListConfig<T>, "container">;
|
|
17
|
+
export interface UseVListReturn<T extends VListItem = VListItem, P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]> {
|
|
18
|
+
/** Attach to the element the list renders into. */
|
|
19
|
+
containerRef: RefObject<HTMLDivElement | null>;
|
|
20
|
+
/** The list once mounted, with the methods its plugins add. */
|
|
21
|
+
instanceRef: RefObject<(VList<T> & PluginMethods<P>) | null>;
|
|
22
|
+
getInstance: () => (VList<T> & PluginMethods<P>) | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A vlist in a React component. `plugins` are read at mount: changing them
|
|
26
|
+
* means remounting (a `key`). `config.items` changes update the list.
|
|
27
|
+
*
|
|
28
|
+
* @param create Advanced: the factory that builds the list, `createVList` by
|
|
29
|
+
* default. The deprecated vlist-react package passes its own.
|
|
30
|
+
*/
|
|
31
|
+
export declare function useVList<T extends VListItem = VListItem, const P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]>(config: UseVListConfig<T>, plugins?: P, create?: typeof createVList): UseVListReturn<T, P>;
|
|
32
|
+
/**
|
|
33
|
+
* Subscribe to a list event for the component's lifetime. After `useVList` in
|
|
34
|
+
* the same component it subscribes at mount; in a child, whose effects run
|
|
35
|
+
* before the parent's, on its first render once the list exists.
|
|
36
|
+
*/
|
|
37
|
+
export declare function useVListEvent<T extends VListItem, K extends keyof VListEvents<T>>(instanceRef: RefObject<VList<T> | null>, event: K, handler: EventHandler<VListEvents<T>[K]>): void;
|
|
38
|
+
//# sourceMappingURL=react.d.ts.map
|
package/dist/react.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useRef as s,useEffect as c,useCallback as V}from"react";import{createVList as f}from"./index.js";function d(e,i=[],r=f){let n=s(null),t=s(null),u=s(e);u.current=e;let L=s(i);c(()=>{let o=n.current;if(!o)return;let l=r({...u.current,container:o},L.current);return t.current=l,()=>{l.destroy(),t.current=null}},[]),c(()=>{if(t.current&&e.items)t.current.setItems(e.items)},[e.items]);let a=V(()=>t.current,[]);return{containerRef:n,instanceRef:t,getInstance:a}}function P(e,i,r){let n=s(r);n.current=r,c(()=>{let t=e.current;if(!t)return;return t.on(i,(u)=>n.current(u))},[e.current,i])}export{d as useVList,P as useVListEvent};
|
package/dist/size.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"base":{"minified":"27.3","gzipped":"10.3","minBytes":
|
|
1
|
+
{"base":{"minified":"27.3","gzipped":"10.3","minBytes":27986,"gzBytes":10539},"synthetic":{"minified":"34.2","gzipped":"12.9","minBytes":35039,"gzBytes":13192},"synthetic + carousel":{"minified":"49.3","gzipped":"18.1","minBytes":50498,"gzBytes":18513},"synthetic + sortable":{"minified":"46.1","gzipped":"16.5","minBytes":47232,"gzBytes":16885},"createStats":{"minified":"27.9","gzipped":"10.5","minBytes":28588,"gzBytes":10770},"synthetic + createStats":{"minified":"34.8","gzipped":"13.1","minBytes":35641,"gzBytes":13422},"native":{"minified":"27.3","gzipped":"10.3","minBytes":27986,"gzBytes":10536},"vue":{"minified":"27.7","gzipped":"10.5","minBytes":28376,"gzBytes":10722},"svelte":{"minified":"27.5","gzipped":"10.4","minBytes":28171,"gzBytes":10626},"solid":{"minified":"27.6","gzipped":"10.4","minBytes":28283,"gzBytes":10688},"react":{"minified":"27.8","gzipped":"10.5","minBytes":28423,"gzBytes":10717},"react + grid":{"minified":"35.2","gzipped":"13.1","minBytes":36010,"gzBytes":13373},"a11y":{"minified":"31.2","gzipped":"11.7","minBytes":31938,"gzBytes":11988},"selection":{"minified":"36.9","gzipped":"13.3","minBytes":37809,"gzBytes":13568},"data":{"minified":"41.0","gzipped":"15.1","minBytes":41945,"gzBytes":15449},"scrollbar":{"minified":"35.5","gzipped":"13.2","minBytes":36335,"gzBytes":13499},"sortable":{"minified":"39.2","gzipped":"13.9","minBytes":40170,"gzBytes":14245},"groups":{"minified":"43.4","gzipped":"15.7","minBytes":44439,"gzBytes":16060},"page":{"minified":"29.9","gzipped":"11.2","minBytes":30588,"gzBytes":11478},"snapshots":{"minified":"30.6","gzipped":"11.4","minBytes":31366,"gzBytes":11697},"transition":{"minified":"34.1","gzipped":"12.3","minBytes":34883,"gzBytes":12570},"autosize":{"minified":"30.6","gzipped":"11.5","minBytes":31336,"gzBytes":11739},"grid":{"minified":"34.7","gzipped":"12.9","minBytes":35573,"gzBytes":13179},"table":{"minified":"45.8","gzipped":"16.2","minBytes":46881,"gzBytes":16634},"masonry":{"minified":"39.4","gzipped":"14.7","minBytes":40373,"gzBytes":15056},"tree":{"minified":"43.5","gzipped":"15.7","minBytes":44581,"gzBytes":16050},"search":{"minified":"36.9","gzipped":"13.6","minBytes":37750,"gzBytes":13912},"carousel":{"minified":"43.2","gzipped":"15.8","minBytes":44286,"gzBytes":16154}}
|
package/dist/solid.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist/solid — SolidJS primitives, feature-first (#328).
|
|
3
|
+
*
|
|
4
|
+
* const { setRef } = createVList(() => ({ items, item }), [grid({ columns: 4 })]);
|
|
5
|
+
*
|
|
6
|
+
* `createVList` keeps the Solid primitive idiom and the vlist-solidjs name. In
|
|
7
|
+
* a file that also uses the core builder, alias one of them:
|
|
8
|
+
* `import { createVList as createSolidVList } from "vlist/solid"`.
|
|
9
|
+
*
|
|
10
|
+
* Features are passed explicitly, so an app only bundles what it uses. The
|
|
11
|
+
* core comes from the root entry, never a copy of its own.
|
|
12
|
+
*/
|
|
13
|
+
import { type Accessor } from "solid-js";
|
|
14
|
+
import { createVList as createCoreVList } from "./index";
|
|
15
|
+
import type { CreateVListConfig, EventHandler, PluginMethods, VList, VListEvents, VListItem, VListPlugin } from "./index";
|
|
16
|
+
/** `createVList`'s config without `container`: the primitive owns the element. */
|
|
17
|
+
export type CreateVListConfigInput<T extends VListItem = VListItem> = Omit<CreateVListConfig<T>, "container">;
|
|
18
|
+
export interface CreateVListReturn<T extends VListItem = VListItem, P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]> {
|
|
19
|
+
/** Pass as `ref={setRef}` on the element the list renders into. */
|
|
20
|
+
setRef: (el: HTMLDivElement) => void;
|
|
21
|
+
/** The list once mounted, with the methods its plugins add. */
|
|
22
|
+
instance: Accessor<(VList<T> & PluginMethods<P>) | null>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A vlist in a component. `plugins` are read at mount; `items` changes in the
|
|
26
|
+
* config accessor update the list.
|
|
27
|
+
*
|
|
28
|
+
* @param create Advanced: the factory that builds the list, the core
|
|
29
|
+
* `createVList` by default. The deprecated vlist-solidjs package passes its own.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createVList<T extends VListItem = VListItem, const P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]>(config: Accessor<CreateVListConfigInput<T>>, plugins?: P, create?: typeof createCoreVList): CreateVListReturn<T, P>;
|
|
32
|
+
/** Subscribe to a list event for the component's lifetime. */
|
|
33
|
+
export declare function createVListEvent<T extends VListItem, K extends keyof VListEvents<T>>(instance: Accessor<VList<T> | null>, event: K, handler: EventHandler<VListEvents<T>[K]>): void;
|
|
34
|
+
//# sourceMappingURL=solid.d.ts.map
|
package/dist/solid.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{onMount as r,onCleanup as l,createEffect as a,on as L}from"solid-js";import{createVList as V}from"./index.js";function f(n,i=[],o=V){let e=null,t=null;return r(()=>{if(!e)return;t=o({...n(),container:e},i)}),a(L(()=>n().items,(s)=>{if(t&&s)t.setItems(s)})),l(()=>{t?.destroy(),t=null}),{setRef:(s)=>{e=s},instance:()=>t}}function T(n,i,o){r(()=>{let e=n();if(!e)return;let t=e.on(i,o);l(t)})}export{f as createVList,T as createVListEvent};
|
package/dist/svelte.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist/svelte — a Svelte action, feature-first (#328). Works in Svelte 4 and 5.
|
|
3
|
+
*
|
|
4
|
+
* <div use:vlist={{ config: { items, item }, plugins: [grid({ columns: 4 })] }} />
|
|
5
|
+
*
|
|
6
|
+
* Features are passed explicitly, so an app only bundles what it uses. The
|
|
7
|
+
* core comes from the root entry, never a copy of its own.
|
|
8
|
+
*/
|
|
9
|
+
import { createVList } from "./index";
|
|
10
|
+
import type { CreateVListConfig, EventHandler, PluginMethods, Unsubscribe, VList, VListEvents, VListItem, VListPlugin } from "./index";
|
|
11
|
+
/** `createVList`'s config without `container`: the action owns the node. */
|
|
12
|
+
export type VListActionConfig<T extends VListItem = VListItem> = Omit<CreateVListConfig<T>, "container">;
|
|
13
|
+
export interface VListActionOptions<T extends VListItem = VListItem, P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]> {
|
|
14
|
+
config: VListActionConfig<T>;
|
|
15
|
+
/** Read when the action mounts: changing them means remounting. */
|
|
16
|
+
plugins?: P;
|
|
17
|
+
/** Receives the list once created, with the methods its plugins add. */
|
|
18
|
+
onInstance?: (instance: VList<T> & PluginMethods<P>) => void;
|
|
19
|
+
/** Advanced: the factory that builds the list, `createVList` by default. */
|
|
20
|
+
create?: typeof createVList;
|
|
21
|
+
}
|
|
22
|
+
export interface VListActionReturn<T extends VListItem = VListItem, P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]> {
|
|
23
|
+
update: (options: VListActionOptions<T, P>) => void;
|
|
24
|
+
destroy: () => void;
|
|
25
|
+
}
|
|
26
|
+
/** A vlist on the node: `use:vlist={{ config, plugins }}`. `config.items` changes update it. */
|
|
27
|
+
export declare function vlist<T extends VListItem = VListItem, const P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]>(node: HTMLElement, options: VListActionOptions<T, P>): VListActionReturn<T, P>;
|
|
28
|
+
/** Subscribe to a list event; call the returned function to unsubscribe. */
|
|
29
|
+
export declare function onVListEvent<T extends VListItem, K extends keyof VListEvents<T>>(instance: VList<T>, event: K, handler: EventHandler<VListEvents<T>[K]>): Unsubscribe;
|
|
30
|
+
//# sourceMappingURL=svelte.d.ts.map
|
package/dist/svelte.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createVList as o}from"./index.js";function r(e,t){let i=(t.create??o)({...t.config,container:e},t.plugins??[]);return t.onInstance?.(i),{update(s){if(s.config.items)i.setItems(s.config.items)},destroy(){i.destroy()}}}function V(e,t,n){return e.on(t,n)}export{V as onVListEvent,r as vlist};
|
package/dist/synthetic.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Pt=(e,t,o)=>()=>{if(e)try{t=e(e=0)}catch(i){o=[i]}if(o)throw o[0];return t};var Re=3,At="vlist",Qe=16000000,ve=150,Oe=(e)=>e<0.5?2*e*e:1-(-2*e+2)**2/2,Mt=300,ke="__placeholder_";function Cn(e,t,o,i,r){if(t===0||e.size===0)return;let s=e.size;if(Ne.length<s)Ne=new Int32Array(s);if(Me.length<s)Me.length=s;let l=0;for(let[S,x]of e)Ne[l]=S,Me[l]=x,l++;e.clear();let d=o+"-item-",g=i.getAttribute("aria-activedescendant"),P=null,p=r&&t&1;for(let S=0;S<s;S++){let x=Ne[S],b=Me[S];Me[S]=void 0;let _=x-t;if(e.set(_,b),g!==null&&b.id===g)P=b;if(b.id===d+x)b.id=d+_;if(p)b.classList.toggle(r)}if(P!==null)i.setAttribute("aria-activedescendant",P.id)}function Pn(e,t,o){if(t===0&&o===0)return;e.prevRangeStart-=t,e.prevRangeEnd-=t,e.startIndex-=t,e.prevBaseOffset-=o;let i=e.visibleCount;for(let r=0;r<i;r++)e.visibleIndices[r]-=t,e.visibleOffsets[r]-=o}function Xt(e,t){let o=t>1?Math.trunc(e):Math.floor(e);return Math.abs(o)<t?0:o}function Yt(e,t,o,i,r,s,l){let d=e.lapSize(),g=e.itemsPerLap(),P=d>0?Math.round(t/d)*g:0;if(P===0)return;if(r)Cn(r,P,s,i,l);Pn(o,P,t)}var Ne,Me;var Zt=Pt(()=>{Ne=new Int32Array(0),Me=[]});function en({getMax:e,onChange:t=()=>{},onFinish:o,axis:i="y",reducedMotion:r}){let s=0,l=0,d=null,g=0,P=0,p=0,S=0,x=0,b=null,_=0,A=0,w=0,h=0,B=400,E=jt,M=()=>w,W=0.006,c=(y)=>{let L=e();return Number.isFinite(L)?Math.max(0,Math.min(L,y)):y},v=(y,L)=>i==="y"?L:y,z=(y,L)=>i==="y"?y:L;function C(y){let L=c(y);if(L!==s)s=L,t(s);return L!==y}function f(){x=0,l=d===null?0:5}function D(y){f(),C(y)}return{get position(){return s},get state(){return l},get velocity(){return x},get active(){return l===3||l===4},begin(y,L,N,O){if(d!==null){f();return}f(),d=y,g=p=v(L,N),P=z(L,N),S=O,l=1},move(y,L,N,O){if(y!==d||l!==1&&l!==2)return!1;let G=v(L,N);if(l===1){let R=Math.abs(G-g),k=Math.abs(z(L,N)-P);if(Math.max(R,k)<6)return!1;if(k>R*1.2)return f(),!1;if(R<k*1.2)return!1;l=2}let Q=p-G,T=O-S;if(T>0){let R=Math.max(-3,Math.min(3,Q/T));x=T>80?0:R*x<0?R:0.65*R+0.35*x}if(p=G,S=O,C(s+Q))x=0;return!0},end(y,L){if(y!==d)return;if(d=null,l===2&&!r()&&L-S<=80&&Math.abs(x)>=0.02)b=null,l=3;else x=0,l=0},cancel:f,reset(){d=null,f()},jump:D,shiftBy(y){A+=y,h+=y,C(s+y)},by(y){f();let L=s;return C(s+y),s!==L},smooth(y,L=400,N=jt){if(f(),h=0,M=typeof y==="function"?y:()=>y,d!==null||r()||L<=0){C(M());return}B=L,E=N,A=s,w=c(M()+h),b=null,l=4},resize(){f(),C(s)},tick(y){if(l!==3&&l!==4)return;if(b===null){if(b=y,l===4)_=y;return}let L=y-b;if(L<=0)return;if(b=y,L>100){if(l===4)C(c(M()+h)),l=0,o?.();else f();return}if(l===4){w=c(M()+h);let G=Math.min(1,(y-_)/B);if(C(A+(w-A)*E(G)),G===1)l=0,o?.();return}let N=Math.exp(-W*L),O=C(s+x*(1-N)/W);if(x*=N,O||Math.abs(x)<0.02)x=0,l=0}}}var Jt=1,Qt=2,jt=(e)=>1-(1-e)**3;function it(e){if(e.closest("textarea,select,[contenteditable]:not([contenteditable=false])"))return!0;let t=e.closest("input");return!!t&&!/^(button|submit|reset|checkbox|radio|image)$/.test(t.type)}function tn(e){let{state:t,viewport:o,content:i,isX:r,onFrame:s,onIdle:l,mainAxisPadding:d,wrap:g}=e,P=o.parentElement??o,p=o.ownerDocument.defaultView,S=o.ownerDocument,x=p.matchMedia("(prefers-reduced-motion: reduce)"),b=0,_=null,A=null,w=!1,h=!1,B=!1,E=-1,M=-1,W=null,c=null,v=!1,z=!1,C=!1,f=!1,D,y=new Set;function L(a){let H=t.scrollPosition;if(g){let K=g.lapSize(),V=K>0?Xt((a-g.home())/K,g.thresholdLaps):0;if(V!==0){let q=V*K;B=!0,T.shiftBy(-q),B=!1,a=T.position,H-=q,Yt(g,q,t,i,e.rendered,e.classPrefix??"",e.oddClass),e.onFold?.(q),g.onFold?.(q)}}if(t.prevScrollPosition=H,t.scrollPosition=t.baseOffset=a,t.scrollDirection=a>H?1:a<H?-1:0,!h)s()}function N(){if(A=null,T.active||T.state===Qt||T.state===Jt)return;t.scrollDirection=0,l()}function O(){if(!w)return;if(A!==null)clearTimeout(A);A=setTimeout(N,e.idleTimeout||ve)}function G(){if(w&&_===null&&T.active)_=requestAnimationFrame(Q)}function Q(a){if(_=null,T.tick(a),T.active)G();else O()}let T=en({axis:r?"x":"y",getMax:()=>g?1/0:b,reducedMotion:()=>x.matches,onChange(a){if(!B)L(a)},onFinish(){let a=D;D=void 0,a?.()}});function R(){if(D=void 0,_!==null)cancelAnimationFrame(_),_=null;if(T.cancel(),A!==null)clearTimeout(A),A=null}function k(){if(R(),T.reset(),f&&W!==null&&o.hasPointerCapture(W))o.releasePointerCapture(W);f=!1,y.clear(),W=c=null,v=z=C=!1,O()}function de(a){if(!Be(a))return;if(a.isPrimary){if(y.size)k();y.clear()}if(y.add(a.pointerId),y.size>1){C=!0,R();return}if(!(a.target instanceof Element)||it(a.target)){R();return}W=a.pointerId,v=!1,z=T.active,c=null,R(),T.begin(a.pointerId,a.clientX,a.clientY,a.timeStamp)}function se(a){if(!Be(a)||a.target instanceof Node&&o.contains(a.target))return;if(a.isPrimary&&y.size)k();else if(y.size)y.add(a.pointerId),C=!0,R()}function he(a){if(!Be(a)||C)return;if(T.move(a.pointerId,a.clientX,a.clientY,a.timeStamp)){if(v=!0,!f)o.setPointerCapture(a.pointerId),f=!0;if(a.cancelable)a.preventDefault()}}function ae(a){if(!Be(a)||!y.has(a.pointerId))return;let H=a.type==="pointercancel";if(H)R();if(W===a.pointerId){if(!H&&!C&&(v||z))c=a.pointerId;if(f&&o.hasPointerCapture(a.pointerId))o.releasePointerCapture(a.pointerId);f=!1,W=null,v=z=!1}if(T.end(a.pointerId,a.timeStamp),y.delete(a.pointerId),!y.size){if(C||H)T.reset();C=!1}G(),O()}function ee(a){let H=a.pointerId;if(a.detail!==0&&c!==null&&(H===c||H===void 0))c=null,a.preventDefault(),a.stopImmediatePropagation()}function j(a){if(a.ctrlKey||a.defaultPrevented||!(a.target instanceof Element)||it(a.target))return;let H=a.deltaMode===1?16:a.deltaMode===2?t.containerSize:1,K=r?a.deltaX:a.deltaY,V=r?a.deltaY:a.deltaX,q=r?o.scrollHeight>o.clientHeight:o.scrollWidth>o.clientWidth;if(q&&Math.abs(V)>Math.abs(K))return;if(q&&V!==0)if(a.preventDefault(),r)o.scrollTop+=V*H;else o.scrollLeft+=V*H;let xe=r&&!q&&K===0?V:K;if(R(),T.by(xe*H))a.preventDefault();O()}function ye(a){if(a.defaultPrevented||a.ctrlKey||a.metaKey||a.altKey||!(a.target instanceof Element)||it(a.target))return;if((a.key===" "||a.key==="Enter")&&a.target.closest("button,summary,a,input"))return;let H=e.sizeCache,K=H.getSize(H.indexAtOffset(T.position)),V;if(a.key===(r?"ArrowRight":"ArrowDown"))V=T.position+K;if(a.key===(r?"ArrowLeft":"ArrowUp"))V=T.position-K;if(a.key==="PageDown"||a.key===" ")V=T.position+t.containerSize*(a.shiftKey&&a.key===" "?-1:1);if(a.key==="PageUp")V=T.position-t.containerSize;if(a.key==="Home")V=0;if(a.key==="End")V=b;if(V!==void 0)a.preventDefault(),te(V)}function me(){if(S.hidden)k()}function te(a){let H=T.position;if(R(),T.jump(a),H===(g?a:Math.max(0,Math.min(b,a))))L(T.position);O()}function Se(a){let H=E!==t.containerSize||M!==t.crossSize,K=a!==t.totalSize||H;if(E=t.containerSize,M=t.crossSize,t.totalSize=a,b=Math.max(0,a+d-t.containerSize),K){if(h=!0,H)R(),T.resize();else T.shiftBy(0);L(T.position),h=!1}}return{setLogical:te,refresh:Se,shiftBy(a){if(t.totalSize=e.sizeCache.getTotalSize(),b=Math.max(0,t.totalSize+d-t.containerSize),T.shiftBy(a),!T.active)O()},cancelScroll(){R(),O()},getLogical:()=>t.scrollPosition,getMaxLogical:()=>b,smoothScrollTo(a,H,K,V=Oe,q){if(R(),T.smooth(a,H,V),D=q,!T.active)D=void 0,q?.(),O();else G()},attach(){if(w)return;if(w=!0,o.style.overflowX=r?"hidden":"auto",o.style.overflowY=r?"auto":"hidden",o.style.touchAction=r?"pan-y pinch-zoom":"pan-x pinch-zoom",o.style.overflowAnchor="none",i.style[r?"width":"height"]="100%",i.style.overflow="clip",i.style.overflowAnchor="none",o.addEventListener("pointerdown",de),p.addEventListener("pointerdown",se),o.addEventListener("pointermove",he,{passive:!1}),p.addEventListener("pointerup",ae),p.addEventListener("pointercancel",ae),o.addEventListener("click",ee,!0),e.wheelEnabled)o.addEventListener("wheel",j,{passive:!1});P.addEventListener("keydown",ye),p.addEventListener("blur",k),S.addEventListener("visibilitychange",me),x.addEventListener("change",k),G()},detach(){if(w=!1,k(),A!==null)clearTimeout(A),A=null;o.removeEventListener("pointerdown",de),p.removeEventListener("pointerdown",se),o.removeEventListener("pointermove",he),p.removeEventListener("pointerup",ae),p.removeEventListener("pointercancel",ae),o.removeEventListener("click",ee,!0),o.removeEventListener("wheel",j),P.removeEventListener("keydown",ye),p.removeEventListener("blur",k),S.removeEventListener("visibilitychange",me),x.removeEventListener("change",k),o.style.overflowX=o.style.overflowY=o.style.touchAction=o.style.overflowAnchor="",i.style.overflow=i.style.overflowAnchor=""}}}var Be=(e)=>e.pointerType==="touch"||e.pointerType==="pen";var nn=Pt(()=>{Zt()});function wt(e){let{state:t,viewport:o,isX:i,onFrame:r,onIdle:s}=e,l=e.idleTimeout||ve,d=null,g=null;function P(b=i?o.scrollLeft:o.scrollTop){t.prevScrollPosition=t.scrollPosition,t.scrollPosition=b,t.scrollDirection=b>t.prevScrollPosition?1:b<t.prevScrollPosition?-1:0,r(),p()}function p(){if(d!==null)clearTimeout(d);d=setTimeout(()=>{d=null,t.scrollDirection=0,s()},l)}function S(){if(g!==null)cancelAnimationFrame(g),g=null}function x(b,_,A,w=Oe,h){S();let B=t.scrollPosition,E=typeof b==="function"?b:()=>b,M=E();if(Math.abs(M-B)<1){if(A)A(M);else if(i)o.scrollLeft=M;else o.scrollTop=M;h?.();return}let W=performance.now();function c(v){M=E();let z=v-W,C=Math.min(z/_,1),f=B+(M-B)*w(C);if(A)A(f);else{if(i)o.scrollLeft=f;else o.scrollTop=f;let D=i?o.scrollLeft:o.scrollTop;P(Math.abs(D-f)>1?D:f)}if(C<1)g=requestAnimationFrame(c);else g=null,h?.()}g=requestAnimationFrame(c)}return{attach(){},detach(){if(S(),d!==null)clearTimeout(d),d=null},cancelScroll:S,smoothScrollTo:x,commitScroll:P}}var Ve={top:0,right:0,bottom:0,left:0},zt=(e)=>{if(e==null)return Ve;if(typeof e==="number")return e===0?Ve:{top:e,right:e,bottom:e,left:e};if(e.length===2){let[s,l]=e;return s===0&&l===0?Ve:{top:s,right:l,bottom:s,left:l}}let[t,o,i,r]=e;return t===0&&o===0&&i===0&&r===0?Ve:{top:t,right:o,bottom:i,left:r}},_t=(e,t)=>t?e.left+e.right:e.top+e.bottom,Ht=(e,t)=>t?e.top+e.bottom:e.left+e.right;function Rt(e){let t={visibleIndices:new Int32Array(e),visibleOffsets:new Float64Array(e),visibleSizes:new Float64Array(e),visibleCount:0,startIndex:0,totalSize:0,capacity:e,scrollPosition:0,prevScrollPosition:0,scrollDirection:0,baseOffset:0,prevBaseOffset:0,containerSize:0,crossSize:0,totalItems:0,prevRangeStart:0,prevRangeEnd:-1,renderPending:!1,initialized:!1,destroyed:!1,windowClamped:!1,windowClampReported:!1,prevAriaTotal:-1,ensureCapacity(o){if(o<=t.capacity)return;let i=o+8,r=new Int32Array(i),s=new Float64Array(i),l=new Float64Array(i);r.set(t.visibleIndices),s.set(t.visibleOffsets),l.set(t.visibleSizes),t.visibleIndices=r,t.visibleOffsets=s,t.visibleSizes=l,t.capacity=i},resizeCapacity(o,i,r=Re){if(i<=0||o<=0)return;t.ensureCapacity(Math.ceil(o/i)+r*2)},clear(){t.visibleCount=0,t.startIndex=0}};return t}var cn=(e,t,o)=>{let i=t;return{getOffset:(r)=>r*e,getSize:(r)=>e,indexAtOffset:(r)=>{if(i===0||e===0)return 0;return Math.max(0,Math.min(Math.floor(r/e),i-1))},getTotalSize:()=>{let r=i*e;return r>0?r-o:0},getTotal:()=>i,rebuild:(r)=>{i=r},invalidate:()=>{},isVariable:()=>!1}};var Ot=(e,t,o,i)=>{while(t<o){let r=t+o+1>>>1;if(e[r]<=i)t=r;else o=r-1}return t},un=(e,t,o)=>{let i=0,r=0,s=new Float64Array(0),l=new Float64Array(0),d=new Float64Array(1),g=(p,S)=>{for(let x=p;x<r;x++){if(x<=S){let b=x<<9,_=Math.min(b+512,i),A=0;for(let w=b;w<_;w++)s[w]=A,A+=e(w);l[x]=A}d[x+1]=d[x]+l[x]}},P=(p)=>{i=p,r=Math.ceil(p/512),s=new Float64Array(p),l=new Float64Array(r),d=new Float64Array(r+1),g(0,r-1)};return P(t),{getOffset:(p)=>{if(p<=0)return 0;if(p>=i)return d[r];return d[p>>>9]+s[p]},getSize:(p)=>e(p),indexAtOffset:(p)=>{if(i===0||p<=0)return 0;if(p>=d[r])return i-1;let S=Ot(d,0,r-1,p),x=S<<9;return Ot(s,x,Math.min(x+512,i)-1,p-d[S])},getTotalSize:()=>{let p=d[r];return p>0?p-o:0},getTotal:()=>i,rebuild:(p)=>P(p),invalidate:(p,S=p)=>{if(p>=0&&S<i)g(p>>>9,S>>>9)},isVariable:()=>!0}},Fe=(e,t,o=0)=>{if(typeof e==="number")return cn(e,t,o);return un(e,t,o)};function kt(e){let t=[],o=`${e}-item`,i=document.createElement("div");return i.className=o,{acquire(){if(t.length>0)return t.pop();return i.cloneNode(!1)},release(r){r.className=o,r.removeAttribute("style"),r.removeAttribute("id"),r.removeAttribute("role"),r.removeAttribute("aria-selected"),r.removeAttribute("aria-posinset"),r.removeAttribute("aria-setsize"),r.removeAttribute("data-index"),r.removeAttribute("data-id"),r.textContent="",t.push(r)},get size(){return t.length},trim(r){let s=r>0?r:0;if(t.length>s)t.length=s},clear(){t.length=0}}}function et(e){let t=e.querySelectorAll("a[href],button,input,select,textarea,[tabindex]");for(let o=0;o<t.length;o++)t[o].setAttribute("tabindex","-1");e._stamp=0}function tt(e){if(typeof e==="string"){let t=document.querySelector(e);if(!t)throw Error(`[vlist] Container not found: ${e}`);return t}return e}function Vt(e,t,o,i){let r=o?`${t} ${t}--horizontal`:t,s=o?"overflow-x:auto;overflow-y:hidden;height:100%;width:100%":"overflow:auto;height:100%;width:100%",l=o?"position:relative;height:100%;overflow-anchor:none":"position:relative;width:100%;overflow-anchor:none",d=' role="list"';if(i)d+=` aria-label="${i.replace(/"/g,""")}"`;if(o)d+=' aria-orientation="horizontal"';e.insertAdjacentHTML("beforeend",`<div class="${r}"><div class="${t}-viewport" style="${s}" tabindex="-1"><div class="${t}-content" style="${l}"${d}></div></div></div>`);let g=e.lastElementChild,P=g.firstElementChild,p=P.firstElementChild,S=document.createElement("div");return S.className=`${t}-live`,S.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",S.setAttribute("aria-live","polite"),S.setAttribute("aria-atomic","true"),S.setAttribute("role","status"),g.appendChild(S),{root:g,viewport:P,content:p,liveRegion:S}}function dn(e,t){if(e.getTotal()<=0)return{index:0,offsetPx:0};let i=t<=0?0:t,r=e.indexAtOffset(i),s=i-e.getOffset(r);return{index:r,offsetPx:s>0?s:0}}function mn(e,t){let o=fn(e,t);return e.getOffset(o.index)+o.offsetPx}function fn(e,t){let o=e.getTotal();if(o<=0)return{index:0,offsetPx:0};let{index:i,offsetPx:r}=t;if(i<0)return{index:0,offsetPx:0};if(i>o-1)i=o-1;while(r>0&&i<o-1){let s=e.getSize(i);if(r<s)break;r-=s,i++}while(r<0&&i>0)i--,r+=e.getSize(i);if(r<0)r=0;return{index:i,offsetPx:r}}function Ft(e){let{sizeCache:t,getPixel:o,setPixel:i,getContainerSize:r}=e;function s(){let d=t.getTotalSize()+e.padding-r();return d>0?d:0}function l(d){if(d<=0)return 0;let g=s();return d>g?g:d}return{getLogical(){return dn(t,o())},setLogical(d){i(l(mn(t,d)))},getPixelEquivalent(){return o()},setPixelEquivalent(d){i(l(d))},getMaxPixelEquivalent:s,getRenderOrigin:e.getRenderOrigin,scrollByPx(d){i(l(o()+d))}}}var Pe=[],pn={calculate:Pe,commit:Pe,afterScroll:Pe,idle:Pe,resize:Pe};function Dt(e){if(e.length===0)return pn;let t=[],o=[],i=[],r=[],s=[];for(let l=0;l<e.length;l++){let d=e[l].hooks;if(d===void 0)continue;if(d.onCalculate!==void 0)t.push(d.onCalculate);if(d.onCommit!==void 0)o.push(d.onCommit);if(d.onAfterScroll!==void 0)i.push(d.onAfterScroll);if(d.onIdle!==void 0)r.push(d.onIdle);if(d.onResize!==void 0)s.push(d.onResize)}return{calculate:t,commit:o,afterScroll:i,idle:r,resize:s}}function Nt(e,t){for(let o=0;o<e.length;o++)e[o](t)}function Ae(e,t){for(let o=0;o<e.length;o++)e[o](t)}function nt(e,t,o){for(let i=0;i<e.length;i++)e[i](t,o)}function Bt(e){for(let t=0;t<e.length;t++)e[t]()}function Kt(e,t,o){for(let i=0;i<e.length;i++)e[i](t,o)}function $t(e,t,o,i,r,s,l,d){let g=i!==0||r!==0;return{prefix:e,selectedClass:`${e}-item--selected`,focusedClass:`${e}-item--focused`,placeholderClass:`${e}-item--placeholder`,replacedClass:`${e}-item--replaced`,translateProp:t?"translateX(":"translateY(",sizeProp:t?"width":"height",itemRole:"listitem",interactive:!1,startPadding:o,gap:l,hasCrossPad:g,crossStartProp:g?t?"top":"left":"",crossEndProp:g?t?"bottom":"right":"",crossStartVal:g?i+"px":"",crossEndVal:g?r+"px":"",oddClass:s,emitter:d??null,indexMap:null,ariaTotalFn:null}}function bn(e,t,o,i,r){if(e.containerSize<=0||e.totalItems===0)return e.clear(),!0;let{scrollPosition:s,containerSize:l,totalItems:d}=e,g=r??0;e.totalSize=t.getTotalSize();let P=t.indexAtOffset(g>0?Math.max(0,s-g):s),p=t.indexAtOffset(s+l);if(p<d-1)p++;P=Math.max(0,P),p=Math.min(d-1,Math.max(0,p));let S=Math.max(0,P-o),x=Math.min(d-1,p+o),b=Math.ceil(l)+o*2;if(x-S+1>b)x=S+b-1,e.windowClamped=!0;let _=x-S+1;if(_>e.capacity)e.ensureCapacity(_);let A=Math.min(_,e.capacity);if(S===e.prevRangeStart&&x===e.prevRangeEnd&&!e.renderPending&&e.baseOffset===e.prevBaseOffset)return!1;e.visibleCount=A,e.startIndex=S;for(let w=0;w<A;w++){let h=S+w;e.visibleIndices[w]=h,e.visibleOffsets[w]=t.getOffset(h),e.visibleSizes[w]=t.getSize(h)}return Nt(i.calculate,e),e.prevRangeStart=S,e.prevRangeEnd=x,e.prevBaseOffset=e.baseOffset,e.renderPending=!1,!0}var U={selected:!1,focused:!1};function vn(e,t,o){for(let i=0;i<t;i++)if(e[i]===o)return!0;return!1}function gn(e,t){if(t<=1)return!0;let o=e[0];for(let i=1;i<t;i++){let r=e[i];if(r!==o+1)return!1;o=r}return!0}function hn(e,t,o,i,r,s,l,d,g,P){let p=g?null:r(),{visibleCount:S,visibleIndices:x}=e,b=l.ariaTotalFn?l.ariaTotalFn():e.totalItems,_=l.interactive?String(b):"",A=l.interactive&&b!==e.prevAriaTotal,w=null,h=l.indexMap;for(let B=0;B<S;B++){let E=x[B],M=h?h(E):E,W=e.visibleOffsets[B],c=e.visibleSizes[B],v=g?g(E):p[E];if(P)P(M,U);else U.selected=!1,U.focused=!1;let z=s.get(E),C=z;if(z===void 0){let f=t.acquire();if(v!==void 0){let L;try{L=i(v,M,U)}catch(N){if(l.emitter)l.emitter.emit("error",{error:N instanceof Error?N:Error(String(N)),context:`template:render:${M}`});t.release(f);continue}if(typeof L==="string")f.innerHTML=L;else f.textContent="",f.appendChild(L);et(f)}if(f.setAttribute("role",l.itemRole),f.setAttribute("data-index",String(M)),l.interactive)f.id=l.prefix+"-item-"+E,f.setAttribute("aria-posinset",String(M+1)),f.setAttribute("aria-setsize",_);if(v!==void 0){let L=String(v.id);if(f.setAttribute("data-id",L),L.startsWith(ke))f.classList.add(l.placeholderClass)}if(l.hasCrossPad)f.style.setProperty(l.crossStartProp,l.crossStartVal),f.style.setProperty(l.crossEndProp,l.crossEndVal);if(P){if(f.classList.toggle(l.selectedClass,U.selected),f.classList.toggle(l.focusedClass,U.focused),U.selected)f.setAttribute("aria-selected","true");else f.removeAttribute("aria-selected");f._lastSelected=U.selected,f._lastFocused=U.focused}if(l.oddClass)f.classList.toggle(l.oddClass,(E&1)===1);let D=W-e.baseOffset+l.startPadding;f.style.transform=l.translateProp+D+"px)",f._lastOffset=D;let y=c-l.gap;if(f.style[l.sizeProp]=y+"px",f._lastSize=y,f._lastItem=v,s.set(E,f),w===null)w=document.createDocumentFragment();w.appendChild(f)}else{if(A)z.setAttribute("aria-setsize",_);if(v!==void 0&&C._lastItem!==v){let y=z.getAttribute("data-id"),L=String(v.id),N;try{N=i(v,M,U)}catch(O){if(l.emitter)l.emitter.emit("error",{error:O instanceof Error?O:Error(String(O)),context:`template:render:${M}`});continue}if(typeof N==="string")z.innerHTML=N;else z.textContent="",z.appendChild(N);if(et(z),z.setAttribute("data-id",L),C._lastItem=v,y!==L){let O=y!==null&&y.startsWith(ke),G=L.startsWith(ke);if(O!==G)z.classList.toggle(l.placeholderClass,G);if(O&&!G)z.classList.add(l.replacedClass),setTimeout(()=>{z.classList.remove(l.replacedClass)},300)}}if(P){if(C._lastSelected!==U.selected){if(z.classList.toggle(l.selectedClass,U.selected),U.selected)z.setAttribute("aria-selected","true");else z.removeAttribute("aria-selected");C._lastSelected=U.selected}if(C._lastFocused!==U.focused)z.classList.toggle(l.focusedClass,U.focused),C._lastFocused=U.focused}let f=W-e.baseOffset+l.startPadding;if(C._lastOffset!==f)z.style.transform=l.translateProp+f+"px)",C._lastOffset=f;let D=c-l.gap;if(C._lastSize!==D)z.style[l.sizeProp]=D+"px",C._lastSize=D}}if(w!==null)o.appendChild(w);if(S>0&&gn(x,S)){let B=x[0],E=x[S-1];for(let[M,W]of s)if(M<B||M>E)W.remove(),t.release(W),s.delete(M)}else for(let[B,E]of s)if(!vn(x,S,B))E.remove(),t.release(E),s.delete(B);if(l.interactive)e.prevAriaTotal=e.totalItems;Ae(d.commit,e)}function ot(e,t,o,i,r,s,l,d,g,P,p,S){let x=bn(e,t,o,P,g.startPadding);if(e.windowClamped&&!e.windowClampReported)e.windowClampReported=!0,queueMicrotask(()=>{if(e.destroyed)return;g.emitter?.emit("error",{error:Error("[vlist] render window capped to the viewport: the item size spec reports sizes below 1px"),context:"render:window-ceiling"})});if(x)hn(e,i,r,s,l,d,g,P,p,S)}var rt=()=>{let e={},t=(s,l)=>{if(!e[s])e[s]=new Set;return e[s].add(l),()=>o(s,l)},o=(s,l)=>{e[s]?.delete(l)};return{on:t,off:o,emit:(s,l)=>{e[s]?.forEach((d)=>{try{d(l)}catch(g){}})},clear:(s)=>{if(s)delete e[s];else for(let l in e)delete e[l]}}};var Wt=2,Gt=(e=0)=>({velocity:0,sampleCount:0}),Ut=(e,t)=>{let o=performance.now(),i=e._lt??o,r=e._lp??t,s=o-i;if(e._lp=t,e._lt=o,s===0)return e.sampleCount=Math.min(e.sampleCount+1,5),e;if(s>100)return e.velocity=0,e.sampleCount=1,e;return e.velocity=Math.abs(t-r)/s,e.sampleCount=Math.min(e.sampleCount+1,5),e};function ge(e,t,o=!1){if(t===void 0)return;if(typeof t!=="number"||!Number.isFinite(t)||t<0||t===0&&!o)throw Error(`vlist: ${e} must be a ${o?"non-negative":"positive"} number, got ${t}`)}function yn(e){let{item:t}=e;if(typeof t.height==="number")ge("item.height",t.height);if(typeof t.width==="number")ge("item.width",t.width);ge("item.estimatedHeight",t.estimatedHeight),ge("item.estimatedWidth",t.estimatedWidth),ge("item.gap",t.gap,!0),ge("overscan",e.overscan,!0);let o=e.scroll;if(o?.runway!==void 0||!/^(auto|native|synthetic)?$/.test(o?.mode??""))throw Error('vlist: scroll.mode is "auto", "native" or "synthetic" (bounded mode and scroll.runway were removed in 3.0)')}function Sn(e,t){let o=e==="horizontal"?"x":"y";if(t.some((r)=>r.name==="grid"))return{primary:o,cross:o==="x"?"y":"x"};return{primary:o}}function xn(e,t){let o=Sn(e.orientation,t),i=o.primary==="x",r=zt(e.padding);return{axis:o,hasCrossAxis:o.cross!==void 0,overscan:e.overscan??Re,reverse:e.reverse??!1,classPrefix:e.classPrefix??At,mainAxisPadding:_t(r,i),crossAxisPadding:Ht(r,i),startPadding:i?r.left:r.top,endPadding:i?r.right:r.bottom,crossPadStart:i?r.top:r.left,crossPadEnd:i?r.bottom:r.right,striped:e.item.striped||!1,gap:e.item.gap??0}}function En(e,t){if(t)return e.item.width??e.item.estimatedWidth??100;return e.item.height??e.item.estimatedHeight??40}function Ln(e){let t=[...e];return t.sort((o,i)=>(o.priority??50)-(i.priority??50)),t}function In(e){let t=new Set;for(let o of e){if(t.has(o.name))throw Error(`[vlist] Duplicate plugin: ${o.name}`);t.add(o.name)}for(let o of e)if(o.conflicts){for(let i of o.conflicts)if(t.has(i))throw Error(`[vlist] Plugin "${o.name}" conflicts with "${i}"`)}}function Tn(e,t){for(let o of e)o.validateConfig?.(t)}var De=null;function qt(e,t=[],o,i){yn(e);let r=o?"synthetic":e.scroll?.mode??"auto";if(r==="synthetic"&&e.scroll?.scrollbar==="native")throw Error('vlist: scroll.scrollbar "native" needs native scrolling');if(e.orientation==="horizontal"&&getComputedStyle(tt(e.container)).direction==="rtl")throw Error("vlist: horizontal RTL lists are not supported; use a vertical list, or an LTR container");let s=xn(e,t),l=s.axis.primary==="x",d=En(e,l),g=s.gap,P=g>0?typeof d==="function"?(u)=>d(u)+g:d+g:d,p=typeof d==="number"?d:20,S=e.items?.length??0,x=s.striped?`${s.classPrefix}-item--odd`:"",b=rt(),_=$t(s.classPrefix,l,s.startPadding,s.crossPadStart,s.crossPadEnd,x,g,b),A=t.length>0?Ln(t):t;if(t.length>0)In(A),Tn(A,s);let w=tt(e.container),h=Vt(w,s.classPrefix,l,e.ariaLabel);if(e.scroll?.scrollbar==="none")h.viewport.classList.add(`${s.classPrefix}-viewport--no-scrollbar`);if(e.scroll?.gutter==="stable")h.viewport.classList.add(`${s.classPrefix}-viewport--gutter-stable`);let E=Fe(P,S,g),M=kt(s.classPrefix),W=Math.ceil(4096/p)+s.overscan*2+8,c=Rt(W);c.totalItems=S;let v=e.items?[...e.items]:[],z=()=>v,C=new Map,f=Gt(),D={velocity:0,reliable:!1},y={range:{start:0,end:-1}},L={scrollPosition:0,direction:"down"},N={scrollPosition:0},O=-1,G=-1,Q=-1,T=null,R=Dt(A),k=new Map,de=[],se=[],he=[],ae=(u)=>{let n=(m)=>{u.push(m instanceof Error?m:Error(String(m)))};for(let m of he)try{m()}catch(I){n(I)}for(let m of A)if(m.destroy)try{m.destroy()}catch(I){n(I)}},ee=null,j=null,ye,me,te=null,Se=null,a=null,H=null,K=null,V=null,q=null,xe=null,ce=!1,lt=!1,Ee=null,st=0,at=0,ct=null,ut=null,dt=null,mt=null,Ke=null,$e=null,we=null,Z=null,ze=null,X=null,ft=(u)=>X.setLogical(u),We=!1,fe=!1,Ge=null,pe=null,Le=null,pt=null;c.containerSize=l?h.viewport.clientWidth:h.viewport.clientHeight,c.crossSize=l?h.viewport.clientHeight:h.viewport.clientWidth;function ue(u){if(j)j(u);else{if(l)h.viewport.scrollLeft=u;else h.viewport.scrollTop=u;if(me?.(),fe&&Math.abs(c.scrollPosition-u)>1)Ge=u}}let bt=Ft({sizeCache:E,getPixel:()=>c.scrollPosition,setPixel:ue,getRenderOrigin:()=>c.baseOffset,getContainerSize:()=>c.containerSize,padding:s.mainAxisPadding});if(t.length>0){let u={pool:M,config:s,emitter:b,template:e.item.template,getState(){return c},dom:{...h,renderedElement(n){let m=k.get("_getRenderedElement");if(m)return m(n);return C.get(n)??null},enableListbox(){let n=h.content.getAttribute("role");if(!n||n==="list")h.content.setAttribute("role","listbox"),h.content.setAttribute("tabindex","0");_.itemRole="option",_.interactive=!0}},scroll:{...bt,to:ue,shiftBy(n){if(X?.shiftBy)X.shiftBy(n);else u.scroll.to(c.scrollPosition+n)},smoothTo(n,m,I,F){if(Z)Z.smoothScrollTo(n,m,j??void 0,I,F);else u.scroll.to(typeof n==="function"?n():n)},cancel(){Z?.cancelScroll()},commit(n){me(n)},setSource(n){j=n.write,ye=n.onContentSize,ce=!0},setTarget(n){Ee=n},setWrap(n,m){Le=n,pt=m},setBoundedWrap(n,m){u.scroll.setWrap(n,m)},setToPosFn(n){Ke=n},setToIndexFn(n){$e=n},onFrame:Xe,onIdle:_e,disableResize(){lt=!0}},items:{all:z,at(n){return a?a(n):v[n]},removeById(n){if(K)return K(n);let m=v.findIndex((I)=>I.id===n);if(m===-1)return-1;return v.splice(m,1),c.totalItems=v.length,E.rebuild(c.totalItems),J(),m},insertAt(n,m){if(V){V(n,m);return}v.splice(m,0,n),c.totalItems=v.length,E.rebuild(c.totalItems),J()},setGetFn(n){a=n},setRemoveFn(n){K=n},setInsertFn(n){V=n},setUpdateFn(n){q=n},setIndexByIdFn(n){xe=n},setTotalFn(n){ee=n,_.ariaTotalFn=n},setIndexMapFn(n){_.indexMap=n}},sizes:{cache:E,get rawSpec(){return d},setConfig(n,m=0){let I=Fe(n,c.totalItems,m),F=k.get("_setSizeCacheBase");if(F){let Y=E.rebuild;Object.assign(E,I),E.rebuild=Y,F(I.rebuild)}else Object.assign(E,I)},rebuild(){E.rebuild(c.totalItems)}},render:{force(){ne()},ifNeeded(){Ie()},contentSize:gt,setFn(n,m){te=()=>{let{prevRangeStart:I,prevRangeEnd:F}=c;if(n(),c.prevRangeStart!==I||c.prevRangeEnd!==F)Ae(R.commit,c)},Se=()=>{m(),Ae(R.commit,c)}},setStateFn(n){H=n},getStateFn(){return H}},hooks:{method(n,m){if(!n.startsWith("_")&&k.has(n))throw Error(`[vlist] duplicate method "${n}"; rename it or use a set*Fn hook`);k.set(n,m)},get(n){return k.get(n)},onClick(n){de.push(n)},onKeydown(n){se.push(n)},onDestroy(n){he.push(n)}},nav:{set(n){if(n.ud!==void 0)st=n.ud;if(n.lr!==void 0)at=n.lr;if(n.scrollIndex)ct=n.scrollIndex;if(n.navigate)ut=n.navigate;if(n.total)dt=n.total;if(n.reveal)mt=n.reveal},get:(()=>{let n={ud:0,lr:0,scrollIndex:null,navigate:null,total:null,reveal:null};return()=>(n.ud=st,n.lr=at,n.scrollIndex=ct,n.navigate=ut,n.total=dt,n.reveal=mt,n)})()}};for(let n of A)if(n.setup)try{n.setup(u)}catch(m){let I=m instanceof Error?m:Error(String(m));b.emit("error",{error:I,context:`plugin:setup:${n.name}`})}}let Ue=s.classPrefix+"--scrolling",re=!1,qe=e.scroll?.idleTimeout??ve;function vt(){if(L.scrollPosition=c.scrollPosition,l)L.direction=c.scrollDirection>0?"right":"left";else L.direction=c.scrollDirection>0?"down":"up";if(b.emit("scroll",L),Ut(f,c.scrollPosition),D.velocity=f.velocity,D.reliable=f.sampleCount>=Wt,b.emit("velocity:change",D),c.startIndex!==O||c.prevRangeEnd!==G)O=c.startIndex,G=c.prevRangeEnd,y.range.start=c.startIndex,y.range.end=c.prevRangeEnd,b.emit("range:change",y)}function gt(u,n=!0){let m=u+s.mainAxisPadding;if(We)on(m);if(X){if(n)X.refresh(u);return}if(c.totalSize=u,ye?.(m),n)h.content.style[l?"width":"height"]=Math.min(m,Qe)+"px"}function J(){let u=te?c.totalSize:E.getTotalSize();if(gt(u,!te),X||te||We)return;i?.onContentSize(u,b)}function ht(){if(!we)return;if((ee?ee():v.length)===0)return;let n=we;we=null,je.scrollToIndex(n.index,n.alignOrOptions)}function Ie(){if(te)te();else ot(c,E,s.overscan,M,h.content,e.item.template,z,C,_,R,a,H);ht()}function Xe(){if(Ge=null,!re)re=!0,h.root.classList.add(Ue);if(Ie(),nt(R.afterScroll,c.scrollPosition,c.scrollDirection),pe?.sync(),c.scrollPosition!==Q)Q=c.scrollPosition,vt()}function yt(){M.trim(C.size)}function on(u){let n=!!X;if(fe=(r==="synthetic"||u>Qe*(n?0.75:1))!==n,!fe)return;if(!De)i.load().then((I)=>{if(De=I,!c.destroyed)J()},(I)=>b.emit("error",{error:I,context:"scroll:mode"}));else if(!re)rn(u)}function rn(u){let n=Ge??c.scrollPosition;if(fe=!1,Z.detach(),pe?.destroy(),pe=null,X)Z=ze,X=j=null,c.baseOffset=0,h.content.style[l?"width":"height"]=u+"px",Z.attach(),ue(n);else if(h.viewport[l?"scrollLeft":"scrollTop"]=0,Z=X=xt(De.createSyntheticScrollHandler),j=ft,X.refresh(u-s.mainAxisPadding),(pe=De.attachScrollbar(c,h,s,E,ue,e.scroll?.scrollbar))?.sync(),c.initialized)Z.attach(),X.setLogical(n);b.emit("scroll:mode",{mode:X?"synthetic":"native"})}function _e(){if(re)re=!1,h.root.classList.remove(Ue);if(c.scrollDirection=0,yt(),Bt(R.idle),D.velocity=0,D.reliable=!1,b.emit("velocity:change",D),N.scrollPosition=c.scrollPosition,b.emit("scroll:idle",N),fe)J()}function ne(){if(c.renderPending=!0,Se)Se();else ot(c,E,s.overscan,M,h.content,e.item.template,z,C,_,R,a,H);if(ht(),nt(R.afterScroll,c.scrollPosition,c.scrollDirection),pe?.sync(),c.scrollPosition!==Q){if(Q=c.scrollPosition,vt(),T!==null)clearTimeout(T);T=setTimeout(_e,qe)}else if(!re)yt()}let St=ce?!1:e.scroll?.wheel!==!1;if(ce&&Le)throw ae([]),h.root.remove(),Error("vlist: page() is not compatible with the carousel plugin — document scrolling cannot wrap.");function xt(u){return u({state:c,sizeCache:E,viewport:h.viewport,content:h.content,isX:l,wheelEnabled:St,idleTimeout:qe,...Ee?{scrollTarget:Ee}:{},mainAxisPadding:s.mainAxisPadding,...Le?{wrap:Le,rendered:C,classPrefix:s.classPrefix,oddClass:x,onFold(n){let m=f;if(m._lp!==void 0)m._lp-=n;Q-=n}}:{},onFrame:Xe,onIdle:_e})}if(!ce&&(o||Le))Z=X=xt(o??pt),j=ft;else ze=(ce?wt:i.native)({state:c,viewport:h.viewport,isX:l,wheelEnabled:St,idleTimeout:qe,...Ee?{scrollTarget:Ee}:{},onFrame:Xe,onIdle:_e}),Z=ze,me=ze.commitScroll,We=!ce&&r!=="native";function Ye(u){let m=u.target.closest("[data-index]");if(!m)return null;let I=parseInt(m.getAttribute("data-index"),10);if(Number.isNaN(I))return null;let F=k.get("_layoutToDataIndex"),Y,ie=I;if(F){let oe=F(I);if(oe<0)return null;let be=k.get("_getItemAtLayout"),Ce=k.get("_getItem");Y=be?be(I):Ce?Ce(oe):a?a(oe):v[oe],ie=oe}else Y=a?a(I):v[I];if(Y===void 0)return null;return{item:Y,index:ie}}function Et(u){for(let m=0;m<de.length;m++)de[m](u);let n=Ye(u);if(n)b.emit("item:click",{item:n.item,index:n.index,event:u})}function Lt(u){let n=Ye(u);if(n)b.emit("item:dblclick",{item:n.item,index:n.index,event:u})}function It(u){let n=Ye(u);if(n)b.emit("item:contextmenu",{item:n.item,index:n.index,event:u})}function Tt(u){let n=u.target?.tagName;if((n==="INPUT"||n==="TEXTAREA"||n==="SELECT")&&!((u.ctrlKey||u.metaKey)&&(u.key==="f"||u.key==="F")))return;for(let m=0;m<se.length;m++)se[m](u)}if(h.content.addEventListener("click",Et),h.content.addEventListener("dblclick",Lt),h.content.addEventListener("contextmenu",It),se.length>0)h.root.addEventListener("keydown",Tt);let Ze=null;if(!lt)setTimeout(()=>{if(c.destroyed)return;Ze=new ResizeObserver((n)=>{for(let m of n){let{width:I,height:F}=m.contentRect,Y=l?I:F,ie=l?F:I;if(Math.abs(Y-c.containerSize)<1&&Math.abs(ie-c.crossSize)<1)continue;if(c.containerSize=Y,c.crossSize=ie,c.resizeCapacity(Y,p,s.overscan),X)X.refresh(E.getTotalSize());ne(),Kt(R.resize,I,F),b.emit("resize",{width:I,height:F})}}),Ze.observe(h.viewport)},0);c.resizeCapacity(c.containerSize,p,s.overscan),J(),c.initialized=!0;let Te=null;if(e.defer)Te=requestAnimationFrame(()=>{if(Te=null,!c.destroyed)Ie()});else Ie();if(!ce)Z.attach();let je={get element(){return h.root},get items(){return v},get total(){return ee?ee():v.length},setItems(u){v=[...u],c.totalItems=v.length,E.rebuild(c.totalItems),J(),ne()},appendItems(u){let n=()=>Math.max(0,E.getTotalSize()+s.mainAxisPadding-c.containerSize),m=s.reverse&&c.scrollPosition>=n()-1;if(v.push(...u),c.totalItems=v.length,E.rebuild(c.totalItems),J(),ne(),m)ue(n())},prependItems(u){let n=c.totalItems>0,m=E.getTotalSize();if(v.unshift(...u),c.totalItems=v.length,E.rebuild(c.totalItems),J(),ne(),!s.reverse||!n)return;let I=E.getTotalSize()-m;if(I<=0)return;let F=Math.max(0,E.getTotalSize()+s.mainAxisPadding-c.containerSize);ue(Math.min(c.scrollPosition+I,F))},updateItem(u,n){if(q){if(!q(u,n))return}else{let m=v.findIndex((I)=>I.id===u);if(m===-1)return;v[m]={...v[m],...n}}ne()},insertItem(u,n){if(V)V(u,n??c.totalItems);else{if(n===void 0)v.push(u);else v.splice(n,0,u);c.totalItems=v.length,E.rebuild(c.totalItems),J()}ne()},removeItem(u){if(K){if(K(u)<0)return}else{let n=v.findIndex((m)=>m.id===u);if(n===-1)return;v.splice(n,1),c.totalItems=v.length,E.rebuild(c.totalItems),J()}ne()},removeItems(u){if(K){let F=0;for(let Y of u)if(K(Y)>=0)F++;if(F>0)ne();return F}let n=new Set(u),m=v.length;v=v.filter((F)=>!n.has(F.id));let I=m-v.length;if(I>0)c.totalItems=v.length,E.rebuild(c.totalItems),J(),c.renderPending=!0,Ie();return I},getItemAt(u){if(_.indexMap){let m=k.get("_getLoadedItem");return m?m(u):v[u]}let n=k.get("_getItemAtLayout");if(n){let m=k.get("_dataToLayoutIndex");return n(m?m(u):u)}return a?a(u):v[u]},getIndexById(u){if(xe)return xe(u);return v.findIndex((n)=>n.id===u)},scrollToIndex(u,n="start"){let m=ee?ee():v.length;if(m===0){we={index:u,alignOrOptions:n};return}let I=typeof n==="string"?n:n.align??"start",F=typeof n==="object"?n.behavior:void 0,Y=typeof n==="object"?n.duration:void 0,ie=typeof n==="object"?n.easing:void 0;if($e&&$e(u,I,F,Y,ie)!==!1)return;let oe=Math.max(0,Math.min(u,m-1)),be=E.getOffset(oe),Ce=E.getSize(oe),He=c.containerSize,ln=E.getTotalSize(),Ct=s.mainAxisPadding,sn=Math.max(0,ln+Ct-He),le;if(Ke)le=Ke(oe,E,He,m,I);else{let an=s.startPadding;switch(I){case"center":le=an+be-(He-Ce)/2;break;case"end":le=be+Ce+Ct-He;break;default:le=be}le=Math.max(0,Math.min(le,sn))}if(F==="smooth"&&!fe)Z.smoothScrollTo(le,Y??Mt,j??void 0,ie);else ue(le)},getScrollPosition(){return bt.getPixelEquivalent()},on:b.on.bind(b),off:b.off.bind(b),destroy(){if(c.destroyed)return;if(c.destroyed=!0,re)re=!1,h.root.classList.remove(Ue);if(Te!==null)cancelAnimationFrame(Te),Te=null;if(T!==null)clearTimeout(T),T=null;Z.detach(),pe?.destroy(),Ze?.disconnect(),h.content.removeEventListener("click",Et),h.content.removeEventListener("dblclick",Lt),h.content.removeEventListener("contextmenu",It),h.root.removeEventListener("keydown",Tt);let u=[];ae(u);for(let[,n]of C)n.remove();if(C.clear(),M.clear(),h.root.remove(),b.emit("destroy",void 0),b.clear(),u.length>0)for(let n of u)console.error("vlist: error during destroy:",n)}};for(let[u,n]of k){if(u.startsWith("_"))continue;je[u]=n}return je}nn();function xo(e,t=[]){return qt(e,t,tn)}export{xo as createVList};
|
|
1
|
+
var Pt=(e,t,o)=>()=>{if(e)try{t=e(e=0)}catch(l){o=[l]}if(o)throw o[0];return t};var Re=3,At="vlist",Qe=16000000,ve=150,Oe=(e)=>e<0.5?2*e*e:1-(-2*e+2)**2/2,Mt=300,ke="__placeholder_";function Cn(e,t,o,l,i){if(t===0||e.size===0)return;let r=e.size;if(Ne.length<r)Ne=new Int32Array(r);if(Me.length<r)Me.length=r;let s=0;for(let[S,x]of e)Ne[s]=S,Me[s]=x,s++;e.clear();let d=o+"-item-",g=l.getAttribute("aria-activedescendant"),P=null,p=i&&t&1;for(let S=0;S<r;S++){let x=Ne[S],b=Me[S];Me[S]=void 0;let _=x-t;if(e.set(_,b),g!==null&&b.id===g)P=b;if(b.id===d+x)b.id=d+_;if(p)b.classList.toggle(i)}if(P!==null)l.setAttribute("aria-activedescendant",P.id)}function Pn(e,t,o){if(t===0&&o===0)return;e.prevRangeStart-=t,e.prevRangeEnd-=t,e.startIndex-=t,e.prevBaseOffset-=o;let l=e.visibleCount;for(let i=0;i<l;i++)e.visibleIndices[i]-=t,e.visibleOffsets[i]-=o}function Xt(e,t){let o=t>1?Math.trunc(e):Math.floor(e);return Math.abs(o)<t?0:o}function Yt(e,t,o,l,i,r,s){let d=e.lapSize(),g=e.itemsPerLap(),P=d>0?Math.round(t/d)*g:0;if(P===0)return;if(i)Cn(i,P,r,l,s);Pn(o,P,t)}var Ne,Me;var Zt=Pt(()=>{Ne=new Int32Array(0),Me=[]});function en({getMax:e,onChange:t=()=>{},onFinish:o,axis:l="y",reducedMotion:i}){let r=0,s=0,d=null,g=0,P=0,p=0,S=0,x=0,b=null,_=0,A=0,w=0,h=0,B=400,E=jt,M=()=>w,W=0.006,c=(y)=>{let L=e();return Number.isFinite(L)?Math.max(0,Math.min(L,y)):y},v=(y,L)=>l==="y"?L:y,z=(y,L)=>l==="y"?y:L;function C(y){let L=c(y);if(L!==r)r=L,t(r);return L!==y}function f(){x=0,s=d===null?0:5}function D(y){f(),C(y)}return{get position(){return r},get state(){return s},get velocity(){return x},get active(){return s===3||s===4},begin(y,L,N,O){if(d!==null){f();return}f(),d=y,g=p=v(L,N),P=z(L,N),S=O,s=1},move(y,L,N,O){if(y!==d||s!==1&&s!==2)return!1;let G=v(L,N);if(s===1){let R=Math.abs(G-g),k=Math.abs(z(L,N)-P);if(Math.max(R,k)<6)return!1;if(k>R*1.2)return f(),!1;if(R<k*1.2)return!1;s=2}let Q=p-G,T=O-S;if(T>0){let R=Math.max(-3,Math.min(3,Q/T));x=T>80?0:R*x<0?R:0.65*R+0.35*x}if(p=G,S=O,C(r+Q))x=0;return!0},end(y,L){if(y!==d)return;if(d=null,s===2&&!i()&&L-S<=80&&Math.abs(x)>=0.02)b=null,s=3;else x=0,s=0},cancel:f,reset(){d=null,f()},jump:D,shiftBy(y){A+=y,h+=y,C(r+y)},by(y){f();let L=r;return C(r+y),r!==L},smooth(y,L=400,N=jt){if(f(),h=0,M=typeof y==="function"?y:()=>y,d!==null||i()||L<=0){C(M());return}B=L,E=N,A=r,w=c(M()+h),b=null,s=4},resize(){f(),C(r)},tick(y){if(s!==3&&s!==4)return;if(b===null){if(b=y,s===4)_=y;return}let L=y-b;if(L<=0)return;if(b=y,L>100){if(s===4)C(c(M()+h)),s=0,o?.();else f();return}if(s===4){w=c(M()+h);let G=Math.min(1,(y-_)/B);if(C(A+(w-A)*E(G)),G===1)s=0,o?.();return}let N=Math.exp(-W*L),O=C(r+x*(1-N)/W);if(x*=N,O||Math.abs(x)<0.02)x=0,s=0}}}var Jt=1,Qt=2,jt=(e)=>1-(1-e)**3;function it(e){if(e.closest("textarea,select,[contenteditable]:not([contenteditable=false])"))return!0;let t=e.closest("input");return!!t&&!/^(button|submit|reset|checkbox|radio|image)$/.test(t.type)}function tn(e){let{state:t,viewport:o,content:l,isX:i,onFrame:r,onIdle:s,mainAxisPadding:d,wrap:g}=e,P=o.parentElement??o,p=o.ownerDocument.defaultView,S=o.ownerDocument,x=p.matchMedia("(prefers-reduced-motion: reduce)"),b=0,_=null,A=null,w=!1,h=!1,B=!1,E=-1,M=-1,W=null,c=null,v=!1,z=!1,C=!1,f=!1,D,y=new Set;function L(a){let H=t.scrollPosition;if(g){let K=g.lapSize(),V=K>0?Xt((a-g.home())/K,g.thresholdLaps):0;if(V!==0){let q=V*K;B=!0,T.shiftBy(-q),B=!1,a=T.position,H-=q,Yt(g,q,t,l,e.rendered,e.classPrefix??"",e.oddClass),e.onFold?.(q),g.onFold?.(q)}}if(t.prevScrollPosition=H,t.scrollPosition=t.baseOffset=a,t.scrollDirection=a>H?1:a<H?-1:0,!h)r()}function N(){if(A=null,T.active||T.state===Qt||T.state===Jt)return;t.scrollDirection=0,s()}function O(){if(!w)return;if(A!==null)clearTimeout(A);A=setTimeout(N,e.idleTimeout||ve)}function G(){if(w&&_===null&&T.active)_=requestAnimationFrame(Q)}function Q(a){if(_=null,T.tick(a),T.active)G();else O()}let T=en({axis:i?"x":"y",getMax:()=>g?1/0:b,reducedMotion:()=>x.matches,onChange(a){if(!B)L(a)},onFinish(){let a=D;D=void 0,a?.()}});function R(){if(D=void 0,_!==null)cancelAnimationFrame(_),_=null;if(T.cancel(),A!==null)clearTimeout(A),A=null}function k(){if(R(),T.reset(),f&&W!==null&&o.hasPointerCapture(W))o.releasePointerCapture(W);f=!1,y.clear(),W=c=null,v=z=C=!1,O()}function de(a){if(!Be(a))return;if(a.isPrimary){if(y.size)k();y.clear()}if(y.add(a.pointerId),y.size>1){C=!0,R();return}if(!(a.target instanceof Element)||it(a.target)){R();return}W=a.pointerId,v=!1,z=T.active,c=null,R(),T.begin(a.pointerId,a.clientX,a.clientY,a.timeStamp)}function se(a){if(!Be(a)||a.target instanceof Node&&o.contains(a.target))return;if(a.isPrimary&&y.size)k();else if(y.size)y.add(a.pointerId),C=!0,R()}function he(a){if(!Be(a)||C)return;if(T.move(a.pointerId,a.clientX,a.clientY,a.timeStamp)){if(v=!0,!f)o.setPointerCapture(a.pointerId),f=!0;if(a.cancelable)a.preventDefault()}}function ae(a){if(!Be(a)||!y.has(a.pointerId))return;let H=a.type==="pointercancel";if(H)R();if(W===a.pointerId){if(!H&&!C&&(v||z))c=a.pointerId;if(f&&o.hasPointerCapture(a.pointerId))o.releasePointerCapture(a.pointerId);f=!1,W=null,v=z=!1}if(T.end(a.pointerId,a.timeStamp),y.delete(a.pointerId),!y.size){if(C||H)T.reset();C=!1}G(),O()}function ee(a){let H=a.pointerId;if(a.detail!==0&&c!==null&&(H===c||H===void 0))c=null,a.preventDefault(),a.stopImmediatePropagation()}function j(a){if(a.ctrlKey||a.defaultPrevented||!(a.target instanceof Element)||it(a.target))return;let H=a.deltaMode===1?16:a.deltaMode===2?t.containerSize:1,K=i?a.deltaX:a.deltaY,V=i?a.deltaY:a.deltaX,q=i?o.scrollHeight>o.clientHeight:o.scrollWidth>o.clientWidth;if(q&&Math.abs(V)>Math.abs(K))return;if(q&&V!==0)if(a.preventDefault(),i)o.scrollTop+=V*H;else o.scrollLeft+=V*H;let xe=i&&!q&&K===0?V:K;if(R(),T.by(xe*H))a.preventDefault();O()}function ye(a){if(a.defaultPrevented||a.ctrlKey||a.metaKey||a.altKey||!(a.target instanceof Element)||it(a.target))return;if((a.key===" "||a.key==="Enter")&&a.target.closest("button,summary,a,input"))return;let H=e.sizeCache,K=H.getSize(H.indexAtOffset(T.position)),V;if(a.key===(i?"ArrowRight":"ArrowDown"))V=T.position+K;if(a.key===(i?"ArrowLeft":"ArrowUp"))V=T.position-K;if(a.key==="PageDown"||a.key===" ")V=T.position+t.containerSize*(a.shiftKey&&a.key===" "?-1:1);if(a.key==="PageUp")V=T.position-t.containerSize;if(a.key==="Home")V=0;if(a.key==="End")V=b;if(V!==void 0)a.preventDefault(),te(V)}function me(){if(S.hidden)k()}function te(a){let H=T.position;if(R(),T.jump(a),H===(g?a:Math.max(0,Math.min(b,a))))L(T.position);O()}function Se(a){let H=E!==t.containerSize||M!==t.crossSize,K=a!==t.totalSize||H;if(E=t.containerSize,M=t.crossSize,t.totalSize=a,b=Math.max(0,a+d-t.containerSize),K){if(h=!0,H)R(),T.resize();else T.shiftBy(0);L(T.position),h=!1}}return{setLogical:te,refresh:Se,shiftBy(a){if(t.totalSize=e.sizeCache.getTotalSize(),b=Math.max(0,t.totalSize+d-t.containerSize),T.shiftBy(a),!T.active)O()},cancelScroll(){R(),O()},getLogical:()=>t.scrollPosition,getMaxLogical:()=>b,smoothScrollTo(a,H,K,V=Oe,q){if(R(),T.smooth(a,H,V),D=q,!T.active)D=void 0,q?.(),O();else G()},attach(){if(w)return;if(w=!0,o.style.overflowX=i?"hidden":"auto",o.style.overflowY=i?"auto":"hidden",o.style.touchAction=i?"pan-y pinch-zoom":"pan-x pinch-zoom",o.style.overflowAnchor="none",l.style[i?"width":"height"]="100%",l.style.overflow="clip",l.style.overflowAnchor="none",o.addEventListener("pointerdown",de),p.addEventListener("pointerdown",se),o.addEventListener("pointermove",he,{passive:!1}),p.addEventListener("pointerup",ae),p.addEventListener("pointercancel",ae),o.addEventListener("click",ee,!0),e.wheelEnabled)o.addEventListener("wheel",j,{passive:!1});P.addEventListener("keydown",ye),p.addEventListener("blur",k),S.addEventListener("visibilitychange",me),x.addEventListener("change",k),G()},detach(){if(w=!1,k(),A!==null)clearTimeout(A),A=null;o.removeEventListener("pointerdown",de),p.removeEventListener("pointerdown",se),o.removeEventListener("pointermove",he),p.removeEventListener("pointerup",ae),p.removeEventListener("pointercancel",ae),o.removeEventListener("click",ee,!0),o.removeEventListener("wheel",j),P.removeEventListener("keydown",ye),p.removeEventListener("blur",k),S.removeEventListener("visibilitychange",me),x.removeEventListener("change",k),o.style.overflowX=o.style.overflowY=o.style.touchAction=o.style.overflowAnchor="",l.style.overflow=l.style.overflowAnchor=""}}}var Be=(e)=>e.pointerType==="touch"||e.pointerType==="pen";var nn=Pt(()=>{Zt()});function wt(e){let{state:t,viewport:o,isX:l,onFrame:i,onIdle:r}=e,s=e.idleTimeout||ve,d=null,g=null;function P(b=l?o.scrollLeft:o.scrollTop){t.prevScrollPosition=t.scrollPosition,t.scrollPosition=b,t.scrollDirection=b>t.prevScrollPosition?1:b<t.prevScrollPosition?-1:0,i(),p()}function p(){if(d!==null)clearTimeout(d);d=setTimeout(()=>{d=null,t.scrollDirection=0,r()},s)}function S(){if(g!==null)cancelAnimationFrame(g),g=null}function x(b,_,A,w=Oe,h){S();let B=t.scrollPosition,E=typeof b==="function"?b:()=>b,M=E();if(Math.abs(M-B)<1){if(A)A(M);else if(l)o.scrollLeft=M;else o.scrollTop=M;h?.();return}let W=performance.now();function c(v){M=E();let z=v-W,C=Math.min(z/_,1),f=B+(M-B)*w(C);if(A)A(f);else{if(l)o.scrollLeft=f;else o.scrollTop=f;let D=l?o.scrollLeft:o.scrollTop;P(Math.abs(D-f)>1?D:f)}if(C<1)g=requestAnimationFrame(c);else g=null,h?.()}g=requestAnimationFrame(c)}return{attach(){},detach(){if(S(),d!==null)clearTimeout(d),d=null},cancelScroll:S,smoothScrollTo:x,commitScroll:P}}var Ve={top:0,right:0,bottom:0,left:0},zt=(e)=>{if(e==null)return Ve;if(typeof e==="number")return e===0?Ve:{top:e,right:e,bottom:e,left:e};if(e.length===2){let[r,s]=e;return r===0&&s===0?Ve:{top:r,right:s,bottom:r,left:s}}let[t,o,l,i]=e;return t===0&&o===0&&l===0&&i===0?Ve:{top:t,right:o,bottom:l,left:i}},_t=(e,t)=>t?e.left+e.right:e.top+e.bottom,Ht=(e,t)=>t?e.top+e.bottom:e.left+e.right;function Rt(e){let t={visibleIndices:new Int32Array(e),visibleOffsets:new Float64Array(e),visibleSizes:new Float64Array(e),visibleCount:0,startIndex:0,totalSize:0,capacity:e,scrollPosition:0,prevScrollPosition:0,scrollDirection:0,baseOffset:0,prevBaseOffset:0,containerSize:0,crossSize:0,totalItems:0,prevRangeStart:0,prevRangeEnd:-1,renderPending:!1,initialized:!1,destroyed:!1,windowClamped:!1,windowClampReported:!1,prevAriaTotal:-1,ensureCapacity(o){if(o<=t.capacity)return;let l=o+8,i=new Int32Array(l),r=new Float64Array(l),s=new Float64Array(l);i.set(t.visibleIndices),r.set(t.visibleOffsets),s.set(t.visibleSizes),t.visibleIndices=i,t.visibleOffsets=r,t.visibleSizes=s,t.capacity=l},resizeCapacity(o,l,i=Re){if(l<=0||o<=0)return;t.ensureCapacity(Math.ceil(o/l)+i*2)},clear(){t.visibleCount=0,t.startIndex=0}};return t}var cn=(e,t,o)=>{let l=t;return{getOffset:(i)=>i*e,getSize:(i)=>e,indexAtOffset:(i)=>{if(l===0||e===0)return 0;return Math.max(0,Math.min(Math.floor(i/e),l-1))},getTotalSize:()=>{let i=l*e;return i>0?i-o:0},getTotal:()=>l,rebuild:(i)=>{l=i},invalidate:()=>{},isVariable:()=>!1}};var Ot=(e,t,o,l)=>{while(t<o){let i=t+o+1>>>1;if(e[i]<=l)t=i;else o=i-1}return t},un=(e,t,o)=>{let l=0,i=0,r=new Float64Array(0),s=new Float64Array(0),d=new Float64Array(1),g=(p,S)=>{for(let x=p;x<i;x++){if(x<=S){let b=x<<9,_=Math.min(b+512,l),A=0;for(let w=b;w<_;w++)r[w]=A,A+=e(w);s[x]=A}d[x+1]=d[x]+s[x]}},P=(p)=>{l=p,i=Math.ceil(p/512),r=new Float64Array(p),s=new Float64Array(i),d=new Float64Array(i+1),g(0,i-1)};return P(t),{getOffset:(p)=>{if(p<=0)return 0;if(p>=l)return d[i];return d[p>>>9]+r[p]},getSize:(p)=>e(p),indexAtOffset:(p)=>{if(l===0||p<=0)return 0;if(p>=d[i])return l-1;let S=Ot(d,0,i-1,p),x=S<<9;return Ot(r,x,Math.min(x+512,l)-1,p-d[S])},getTotalSize:()=>{let p=d[i];return p>0?p-o:0},getTotal:()=>l,rebuild:(p)=>P(p),invalidate:(p,S=p)=>{if(p>=0&&S<l)g(p>>>9,S>>>9)},isVariable:()=>!0}},Fe=(e,t,o=0)=>{if(typeof e==="number")return cn(e,t,o);return un(e,t,o)};function kt(e){let t=[],o=`${e}-item`,l=document.createElement("div");return l.className=o,{acquire(){if(t.length>0)return t.pop();return l.cloneNode(!1)},release(i){i.className=o,i.removeAttribute("style"),i.removeAttribute("id"),i.removeAttribute("role"),i.removeAttribute("aria-selected"),i.removeAttribute("aria-posinset"),i.removeAttribute("aria-setsize"),i.removeAttribute("data-index"),i.removeAttribute("data-id"),i.textContent="",t.push(i)},get size(){return t.length},trim(i){let r=i>0?i:0;if(t.length>r)t.length=r},clear(){t.length=0}}}function et(e){let t=e.querySelectorAll("a[href],button,input,select,textarea,[tabindex]");for(let o=0;o<t.length;o++)t[o].setAttribute("tabindex","-1");e._stamp=0}function tt(e){if(typeof e==="string"){let t=document.querySelector(e);if(!t)throw Error(`[vlist] Container not found: ${e}`);return t}return e}function Vt(e,t,o,l){let i=o?`${t} ${t}--horizontal`:t,r=o?"overflow-x:auto;overflow-y:hidden;height:100%;width:100%":"overflow:auto;height:100%;width:100%",s=o?"position:relative;height:100%;overflow-anchor:none":"position:relative;width:100%;overflow-anchor:none",d=' role="list"';if(l)d+=` aria-label="${l.replace(/"/g,""")}"`;if(o)d+=' aria-orientation="horizontal"';e.insertAdjacentHTML("beforeend",`<div class="${i}"><div class="${t}-viewport" style="${r}" tabindex="-1"><div class="${t}-content" style="${s}"${d}></div></div></div>`);let g=e.lastElementChild,P=g.firstElementChild,p=P.firstElementChild,S=document.createElement("div");return S.className=`${t}-live`,S.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",S.setAttribute("aria-live","polite"),S.setAttribute("aria-atomic","true"),S.setAttribute("role","status"),g.appendChild(S),{root:g,viewport:P,content:p,liveRegion:S}}function dn(e,t){if(e.getTotal()<=0)return{index:0,offsetPx:0};let l=t<=0?0:t,i=e.indexAtOffset(l),r=l-e.getOffset(i);return{index:i,offsetPx:r>0?r:0}}function mn(e,t){let o=fn(e,t);return e.getOffset(o.index)+o.offsetPx}function fn(e,t){let o=e.getTotal();if(o<=0)return{index:0,offsetPx:0};let{index:l,offsetPx:i}=t;if(l<0)return{index:0,offsetPx:0};if(l>o-1)l=o-1;while(i>0&&l<o-1){let r=e.getSize(l);if(i<r)break;i-=r,l++}while(i<0&&l>0)l--,i+=e.getSize(l);if(i<0)i=0;return{index:l,offsetPx:i}}function Ft(e){let{sizeCache:t,getPixel:o,setPixel:l,getContainerSize:i}=e;function r(){let d=t.getTotalSize()+e.padding-i();return d>0?d:0}function s(d){if(d<=0)return 0;let g=r();return d>g?g:d}return{getLogical(){return dn(t,o())},setLogical(d){l(s(mn(t,d)))},getPixelEquivalent(){return o()},setPixelEquivalent(d){l(s(d))},getMaxPixelEquivalent:r,getRenderOrigin:e.getRenderOrigin,scrollByPx(d){l(s(o()+d))}}}var Pe=[],pn={calculate:Pe,commit:Pe,afterScroll:Pe,idle:Pe,resize:Pe};function Dt(e){if(e.length===0)return pn;let t=[],o=[],l=[],i=[],r=[];for(let s=0;s<e.length;s++){let d=e[s].hooks;if(d===void 0)continue;if(d.onCalculate!==void 0)t.push(d.onCalculate);if(d.onCommit!==void 0)o.push(d.onCommit);if(d.onAfterScroll!==void 0)l.push(d.onAfterScroll);if(d.onIdle!==void 0)i.push(d.onIdle);if(d.onResize!==void 0)r.push(d.onResize)}return{calculate:t,commit:o,afterScroll:l,idle:i,resize:r}}function Nt(e,t){for(let o=0;o<e.length;o++)e[o](t)}function Ae(e,t){for(let o=0;o<e.length;o++)e[o](t)}function nt(e,t,o){for(let l=0;l<e.length;l++)e[l](t,o)}function Bt(e){for(let t=0;t<e.length;t++)e[t]()}function Kt(e,t,o){for(let l=0;l<e.length;l++)e[l](t,o)}function $t(e,t,o,l,i,r,s,d){let g=l!==0||i!==0;return{prefix:e,selectedClass:`${e}-item--selected`,focusedClass:`${e}-item--focused`,placeholderClass:`${e}-item--placeholder`,replacedClass:`${e}-item--replaced`,translateProp:t?"translateX(":"translateY(",sizeProp:t?"width":"height",itemRole:"listitem",interactive:!1,startPadding:o,gap:s,hasCrossPad:g,crossStartProp:g?t?"top":"left":"",crossEndProp:g?t?"bottom":"right":"",crossStartVal:g?l+"px":"",crossEndVal:g?i+"px":"",oddClass:r,emitter:d??null,indexMap:null,ariaTotalFn:null}}function bn(e,t,o,l,i){if(e.containerSize<=0||e.totalItems===0)return e.clear(),!0;let{scrollPosition:r,containerSize:s,totalItems:d}=e,g=i??0;e.totalSize=t.getTotalSize();let P=t.indexAtOffset(g>0?Math.max(0,r-g):r),p=t.indexAtOffset(r+s);if(p<d-1)p++;P=Math.max(0,P),p=Math.min(d-1,Math.max(0,p));let S=Math.max(0,P-o),x=Math.min(d-1,p+o),b=Math.ceil(s)+o*2;if(x-S+1>b)x=S+b-1,e.windowClamped=!0;let _=x-S+1;if(_>e.capacity)e.ensureCapacity(_);let A=Math.min(_,e.capacity);if(S===e.prevRangeStart&&x===e.prevRangeEnd&&!e.renderPending&&e.baseOffset===e.prevBaseOffset)return!1;e.visibleCount=A,e.startIndex=S;for(let w=0;w<A;w++){let h=S+w;e.visibleIndices[w]=h,e.visibleOffsets[w]=t.getOffset(h),e.visibleSizes[w]=t.getSize(h)}return Nt(l.calculate,e),e.prevRangeStart=S,e.prevRangeEnd=x,e.prevBaseOffset=e.baseOffset,e.renderPending=!1,!0}var U={selected:!1,focused:!1};function vn(e,t,o){for(let l=0;l<t;l++)if(e[l]===o)return!0;return!1}function gn(e,t){if(t<=1)return!0;let o=e[0];for(let l=1;l<t;l++){let i=e[l];if(i!==o+1)return!1;o=i}return!0}function hn(e,t,o,l,i,r,s,d,g,P){let p=g?null:i(),{visibleCount:S,visibleIndices:x}=e,b=s.ariaTotalFn?s.ariaTotalFn():e.totalItems,_=s.interactive?String(b):"",A=s.interactive&&b!==e.prevAriaTotal,w=null,h=s.indexMap;for(let B=0;B<S;B++){let E=x[B],M=h?h(E):E,W=e.visibleOffsets[B],c=e.visibleSizes[B],v=g?g(E):p[E];if(P)P(M,U);else U.selected=!1,U.focused=!1;let z=r.get(E),C=z;if(z===void 0){let f=t.acquire();if(v!==void 0){let L;try{L=l(v,M,U)}catch(N){if(s.emitter)s.emitter.emit("error",{error:N instanceof Error?N:Error(String(N)),context:`template:render:${M}`});t.release(f);continue}if(typeof L==="string")f.innerHTML=L;else f.textContent="",f.appendChild(L);et(f)}if(f.setAttribute("role",s.itemRole),f.setAttribute("data-index",String(M)),s.interactive)f.id=s.prefix+"-item-"+E,f.setAttribute("aria-posinset",String(M+1)),f.setAttribute("aria-setsize",_);if(v!==void 0){let L=String(v.id);if(f.setAttribute("data-id",L),L.startsWith(ke))f.classList.add(s.placeholderClass)}if(s.hasCrossPad)f.style.setProperty(s.crossStartProp,s.crossStartVal),f.style.setProperty(s.crossEndProp,s.crossEndVal);if(P){if(f.classList.toggle(s.selectedClass,U.selected),f.classList.toggle(s.focusedClass,U.focused),U.selected)f.setAttribute("aria-selected","true");else f.removeAttribute("aria-selected");f._lastSelected=U.selected,f._lastFocused=U.focused}if(s.oddClass)f.classList.toggle(s.oddClass,(E&1)===1);let D=W-e.baseOffset+s.startPadding;f.style.transform=s.translateProp+D+"px)",f._lastOffset=D;let y=c-s.gap;if(f.style[s.sizeProp]=y+"px",f._lastSize=y,f._lastItem=v,r.set(E,f),w===null)w=document.createDocumentFragment();w.appendChild(f)}else{if(A)z.setAttribute("aria-setsize",_);if(v!==void 0&&C._lastItem!==v){let y=z.getAttribute("data-id"),L=String(v.id),N;try{N=l(v,M,U)}catch(O){if(s.emitter)s.emitter.emit("error",{error:O instanceof Error?O:Error(String(O)),context:`template:render:${M}`});continue}if(typeof N==="string")z.innerHTML=N;else z.textContent="",z.appendChild(N);if(et(z),z.setAttribute("data-id",L),C._lastItem=v,y!==L){let O=y!==null&&y.startsWith(ke),G=L.startsWith(ke);if(O!==G)z.classList.toggle(s.placeholderClass,G);if(O&&!G)z.classList.add(s.replacedClass),setTimeout(()=>{z.classList.remove(s.replacedClass)},300)}}if(P){if(C._lastSelected!==U.selected){if(z.classList.toggle(s.selectedClass,U.selected),U.selected)z.setAttribute("aria-selected","true");else z.removeAttribute("aria-selected");C._lastSelected=U.selected}if(C._lastFocused!==U.focused)z.classList.toggle(s.focusedClass,U.focused),C._lastFocused=U.focused}let f=W-e.baseOffset+s.startPadding;if(C._lastOffset!==f)z.style.transform=s.translateProp+f+"px)",C._lastOffset=f;let D=c-s.gap;if(C._lastSize!==D)z.style[s.sizeProp]=D+"px",C._lastSize=D}}if(w!==null)o.appendChild(w);if(S>0&&gn(x,S)){let B=x[0],E=x[S-1];for(let[M,W]of r)if(M<B||M>E)W.remove(),t.release(W),r.delete(M)}else for(let[B,E]of r)if(!vn(x,S,B))E.remove(),t.release(E),r.delete(B);if(s.interactive)e.prevAriaTotal=e.totalItems;Ae(d.commit,e)}function ot(e,t,o,l,i,r,s,d,g,P,p,S){let x=bn(e,t,o,P,g.startPadding);if(e.windowClamped&&!e.windowClampReported)e.windowClampReported=!0,queueMicrotask(()=>{if(e.destroyed)return;g.emitter?.emit("error",{error:Error("[vlist] render window capped to the viewport: the item size spec reports sizes below 1px"),context:"render:window-ceiling"})});if(x)hn(e,l,i,r,s,d,g,P,p,S)}var rt=()=>{let e={},t=(r,s)=>{if(!e[r])e[r]=new Set;return e[r].add(s),()=>o(r,s)},o=(r,s)=>{e[r]?.delete(s)};return{on:t,off:o,emit:(r,s)=>{e[r]?.forEach((d)=>{try{d(s)}catch(g){}})},clear:(r)=>{if(r)delete e[r];else for(let s in e)delete e[s]}}};var Wt=2,Gt=(e=0)=>({velocity:0,sampleCount:0}),Ut=(e,t)=>{let o=performance.now(),l=e._lt??o,i=e._lp??t,r=o-l;if(e._lp=t,e._lt=o,r===0)return e.sampleCount=Math.min(e.sampleCount+1,5),e;if(r>100)return e.velocity=0,e.sampleCount=1,e;return e.velocity=Math.abs(t-i)/r,e.sampleCount=Math.min(e.sampleCount+1,5),e};function ge(e,t,o=!1){if(t===void 0)return;if(typeof t!=="number"||!Number.isFinite(t)||t<0||t===0&&!o)throw Error(`vlist: ${e} must be a ${o?"non-negative":"positive"} number, got ${t}`)}function yn(e){let{item:t}=e;if(typeof t.height==="number")ge("item.height",t.height);if(typeof t.width==="number")ge("item.width",t.width);ge("item.estimatedHeight",t.estimatedHeight),ge("item.estimatedWidth",t.estimatedWidth),ge("item.gap",t.gap,!0),ge("overscan",e.overscan,!0);let o=e.scroll;if(o?.runway!==void 0||!/^(auto|native|synthetic)?$/.test(o?.mode??""))throw Error('vlist: scroll.mode is "auto", "native" or "synthetic" (bounded mode and scroll.runway were removed in 3.0)')}function Sn(e,t){let o=e==="horizontal"?"x":"y";if(t.some((i)=>i.name==="grid"))return{primary:o,cross:o==="x"?"y":"x"};return{primary:o}}function xn(e,t,o){let l=Sn(e.orientation,t),i=l.primary==="x",r=zt(e.padding);return{axis:l,hasCrossAxis:l.cross!==void 0,overscan:e.overscan??Re,reverse:e.reverse??!1,classPrefix:e.classPrefix??At,mainAxisPadding:_t(r,i),crossAxisPadding:Ht(r,i),startPadding:i?r.left:r.top,endPadding:i?r.right:r.bottom,crossPadStart:i?r.top:r.left,crossPadEnd:i?r.bottom:r.right,striped:e.item.striped||!1,gap:e.item.gap??0,scrollMode:o}}function En(e,t){if(t)return e.item.width??e.item.estimatedWidth??100;return e.item.height??e.item.estimatedHeight??40}function Ln(e){let t=[...e];return t.sort((o,l)=>(o.priority??50)-(l.priority??50)),t}function In(e){let t=new Set;for(let o of e){if(t.has(o.name))throw Error(`[vlist] Duplicate plugin: ${o.name}`);t.add(o.name)}for(let o of e)if(o.conflicts){for(let l of o.conflicts)if(t.has(l))throw Error(`[vlist] Plugin "${o.name}" conflicts with "${l}"`)}}function Tn(e,t){for(let o of e)o.validateConfig?.(t)}var De=null;function qt(e,t=[],o,l){yn(e);let i=o?"synthetic":e.scroll?.mode??"auto";if(i==="synthetic"&&e.scroll?.scrollbar==="native")throw Error('vlist: scroll.scrollbar "native" needs native scrolling');if(e.orientation==="horizontal"&&getComputedStyle(tt(e.container)).direction==="rtl")throw Error("vlist: horizontal RTL lists are not supported; use a vertical list, or an LTR container");let r=xn(e,t,i),s=r.axis.primary==="x",d=En(e,s),g=r.gap,P=g>0?typeof d==="function"?(u)=>d(u)+g:d+g:d,p=typeof d==="number"?d:20,S=e.items?.length??0,x=r.striped?`${r.classPrefix}-item--odd`:"",b=rt(),_=$t(r.classPrefix,s,r.startPadding,r.crossPadStart,r.crossPadEnd,x,g,b),A=t.length>0?Ln(t):t;if(t.length>0)In(A),Tn(A,r);let w=tt(e.container),h=Vt(w,r.classPrefix,s,e.ariaLabel);if(e.scroll?.scrollbar==="none")h.viewport.classList.add(`${r.classPrefix}-viewport--no-scrollbar`);if(e.scroll?.gutter==="stable")h.viewport.classList.add(`${r.classPrefix}-viewport--gutter-stable`);let E=Fe(P,S,g),M=kt(r.classPrefix),W=Math.ceil(4096/p)+r.overscan*2+8,c=Rt(W);c.totalItems=S;let v=e.items?[...e.items]:[],z=()=>v,C=new Map,f=Gt(),D={velocity:0,reliable:!1},y={range:{start:0,end:-1}},L={scrollPosition:0,direction:"down"},N={scrollPosition:0},O=-1,G=-1,Q=-1,T=null,R=Dt(A),k=new Map,de=[],se=[],he=[],ae=(u)=>{let n=(m)=>{u.push(m instanceof Error?m:Error(String(m)))};for(let m of he)try{m()}catch(I){n(I)}for(let m of A)if(m.destroy)try{m.destroy()}catch(I){n(I)}},ee=null,j=null,ye,me,te=null,Se=null,a=null,H=null,K=null,V=null,q=null,xe=null,ce=!1,lt=!1,Ee=null,st=0,at=0,ct=null,ut=null,dt=null,mt=null,Ke=null,$e=null,we=null,Z=null,ze=null,X=null,ft=(u)=>X.setLogical(u),We=!1,fe=!1,Ge=null,pe=null,Le=null,pt=null;c.containerSize=s?h.viewport.clientWidth:h.viewport.clientHeight,c.crossSize=s?h.viewport.clientHeight:h.viewport.clientWidth;function ue(u){if(j)j(u);else{if(s)h.viewport.scrollLeft=u;else h.viewport.scrollTop=u;if(me?.(),fe&&Math.abs(c.scrollPosition-u)>1)Ge=u}}let bt=Ft({sizeCache:E,getPixel:()=>c.scrollPosition,setPixel:ue,getRenderOrigin:()=>c.baseOffset,getContainerSize:()=>c.containerSize,padding:r.mainAxisPadding});if(t.length>0){let u={pool:M,config:r,emitter:b,template:e.item.template,getState(){return c},dom:{...h,renderedElement(n){let m=k.get("_getRenderedElement");if(m)return m(n);return C.get(n)??null},enableListbox(){let n=h.content.getAttribute("role");if(!n||n==="list")h.content.setAttribute("role","listbox"),h.content.setAttribute("tabindex","0");_.itemRole="option",_.interactive=!0}},scroll:{...bt,to:ue,shiftBy(n){if(X?.shiftBy)X.shiftBy(n);else u.scroll.to(c.scrollPosition+n)},smoothTo(n,m,I,F){if(Z)Z.smoothScrollTo(n,m,j??void 0,I,F);else u.scroll.to(typeof n==="function"?n():n)},cancel(){Z?.cancelScroll()},commit(n){me(n)},setSource(n){j=n.write,ye=n.onContentSize,ce=!0},setTarget(n){Ee=n},setWrap(n,m){Le=n,pt=m},setBoundedWrap(n,m){u.scroll.setWrap(n,m)},setToPosFn(n){Ke=n},setToIndexFn(n){$e=n},onFrame:Xe,onIdle:_e,disableResize(){lt=!0}},items:{all:z,at(n){return a?a(n):v[n]},removeById(n){if(K)return K(n);let m=v.findIndex((I)=>I.id===n);if(m===-1)return-1;return v.splice(m,1),c.totalItems=v.length,E.rebuild(c.totalItems),J(),m},insertAt(n,m){if(V){V(n,m);return}v.splice(m,0,n),c.totalItems=v.length,E.rebuild(c.totalItems),J()},setGetFn(n){a=n},setRemoveFn(n){K=n},setInsertFn(n){V=n},setUpdateFn(n){q=n},setIndexByIdFn(n){xe=n},setTotalFn(n){ee=n,_.ariaTotalFn=n},setIndexMapFn(n){_.indexMap=n}},sizes:{cache:E,get rawSpec(){return d},setConfig(n,m=0){let I=Fe(n,c.totalItems,m),F=k.get("_setSizeCacheBase");if(F){let Y=E.rebuild;Object.assign(E,I),E.rebuild=Y,F(I.rebuild)}else Object.assign(E,I)},rebuild(){E.rebuild(c.totalItems)}},render:{force(){ne()},ifNeeded(){Ie()},contentSize:gt,setFn(n,m){te=()=>{let{prevRangeStart:I,prevRangeEnd:F}=c;if(n(),c.prevRangeStart!==I||c.prevRangeEnd!==F)Ae(R.commit,c)},Se=()=>{m(),Ae(R.commit,c)}},setStateFn(n){H=n},getStateFn(){return H}},hooks:{method(n,m){if(!n.startsWith("_")&&k.has(n))throw Error(`[vlist] duplicate method "${n}"; rename it or use a set*Fn hook`);k.set(n,m)},get(n){return k.get(n)},onClick(n){de.push(n)},onKeydown(n){se.push(n)},onDestroy(n){he.push(n)}},nav:{set(n){if(n.ud!==void 0)st=n.ud;if(n.lr!==void 0)at=n.lr;if(n.scrollIndex)ct=n.scrollIndex;if(n.navigate)ut=n.navigate;if(n.total)dt=n.total;if(n.reveal)mt=n.reveal},get:(()=>{let n={ud:0,lr:0,scrollIndex:null,navigate:null,total:null,reveal:null};return()=>(n.ud=st,n.lr=at,n.scrollIndex=ct,n.navigate=ut,n.total=dt,n.reveal=mt,n)})()}};for(let n of A)if(n.setup)try{n.setup(u)}catch(m){let I=m instanceof Error?m:Error(String(m));b.emit("error",{error:I,context:`plugin:setup:${n.name}`})}}let Ue=r.classPrefix+"--scrolling",re=!1,qe=e.scroll?.idleTimeout??ve;function vt(){if(L.scrollPosition=c.scrollPosition,s)L.direction=c.scrollDirection>0?"right":"left";else L.direction=c.scrollDirection>0?"down":"up";if(b.emit("scroll",L),Ut(f,c.scrollPosition),D.velocity=f.velocity,D.reliable=f.sampleCount>=Wt,b.emit("velocity:change",D),c.startIndex!==O||c.prevRangeEnd!==G)O=c.startIndex,G=c.prevRangeEnd,y.range.start=c.startIndex,y.range.end=c.prevRangeEnd,b.emit("range:change",y)}function gt(u,n=!0){let m=u+r.mainAxisPadding;if(We)on(m);if(X){if(n)X.refresh(u);return}if(c.totalSize=u,ye?.(m),n)h.content.style[s?"width":"height"]=Math.min(m,Qe)+"px"}function J(){let u=te?c.totalSize:E.getTotalSize();if(gt(u,!te),X||te||We)return;l?.onContentSize(u,b)}function ht(){if(!we)return;if((ee?ee():v.length)===0)return;let n=we;we=null,je.scrollToIndex(n.index,n.alignOrOptions)}function Ie(){if(te)te();else ot(c,E,r.overscan,M,h.content,e.item.template,z,C,_,R,a,H);ht()}function Xe(){if(Ge=null,!re)re=!0,h.root.classList.add(Ue);if(Ie(),nt(R.afterScroll,c.scrollPosition,c.scrollDirection),pe?.sync(),c.scrollPosition!==Q)Q=c.scrollPosition,vt()}function yt(){M.trim(C.size)}function on(u){let n=!!X;if(fe=(i==="synthetic"||u>Qe*(n?0.75:1))!==n,!fe)return;if(!De)l.load().then((I)=>{if(De=I,!c.destroyed)J()},(I)=>b.emit("error",{error:I,context:"scroll:mode"}));else if(!re)rn(u)}function rn(u){let n=Ge??c.scrollPosition;if(fe=!1,Z.detach(),pe?.destroy(),pe=null,X)Z=ze,X=j=null,c.baseOffset=0,h.content.style[s?"width":"height"]=u+"px",Z.attach(),ue(n);else if(h.viewport[s?"scrollLeft":"scrollTop"]=0,Z=X=xt(De.createSyntheticScrollHandler),j=ft,X.refresh(u-r.mainAxisPadding),(pe=De.attachScrollbar(c,h,r,E,ue,e.scroll?.scrollbar))?.sync(),c.initialized)Z.attach(),X.setLogical(n);b.emit("scroll:mode",{mode:X?"synthetic":"native"})}function _e(){if(re)re=!1,h.root.classList.remove(Ue);if(c.scrollDirection=0,yt(),Bt(R.idle),D.velocity=0,D.reliable=!1,b.emit("velocity:change",D),N.scrollPosition=c.scrollPosition,b.emit("scroll:idle",N),fe)J()}function ne(){if(c.renderPending=!0,Se)Se();else ot(c,E,r.overscan,M,h.content,e.item.template,z,C,_,R,a,H);if(ht(),nt(R.afterScroll,c.scrollPosition,c.scrollDirection),pe?.sync(),c.scrollPosition!==Q){if(Q=c.scrollPosition,vt(),T!==null)clearTimeout(T);T=setTimeout(_e,qe)}else if(!re)yt()}let St=ce?!1:e.scroll?.wheel!==!1;if(ce&&Le)throw ae([]),h.root.remove(),Error("vlist: page() is not compatible with the carousel plugin — document scrolling cannot wrap.");function xt(u){return u({state:c,sizeCache:E,viewport:h.viewport,content:h.content,isX:s,wheelEnabled:St,idleTimeout:qe,...Ee?{scrollTarget:Ee}:{},mainAxisPadding:r.mainAxisPadding,...Le?{wrap:Le,rendered:C,classPrefix:r.classPrefix,oddClass:x,onFold(n){let m=f;if(m._lp!==void 0)m._lp-=n;Q-=n}}:{},onFrame:Xe,onIdle:_e})}if(!ce&&(o||Le))Z=X=xt(o??pt),j=ft;else ze=(ce?wt:l.native)({state:c,viewport:h.viewport,isX:s,wheelEnabled:St,idleTimeout:qe,...Ee?{scrollTarget:Ee}:{},onFrame:Xe,onIdle:_e}),Z=ze,me=ze.commitScroll,We=!ce&&i!=="native";function Ye(u){let m=u.target.closest("[data-index]");if(!m)return null;let I=parseInt(m.getAttribute("data-index"),10);if(Number.isNaN(I))return null;let F=k.get("_layoutToDataIndex"),Y,ie=I;if(F){let oe=F(I);if(oe<0)return null;let be=k.get("_getItemAtLayout"),Ce=k.get("_getItem");Y=be?be(I):Ce?Ce(oe):a?a(oe):v[oe],ie=oe}else Y=a?a(I):v[I];if(Y===void 0)return null;return{item:Y,index:ie}}function Et(u){for(let m=0;m<de.length;m++)de[m](u);let n=Ye(u);if(n)b.emit("item:click",{item:n.item,index:n.index,event:u})}function Lt(u){let n=Ye(u);if(n)b.emit("item:dblclick",{item:n.item,index:n.index,event:u})}function It(u){let n=Ye(u);if(n)b.emit("item:contextmenu",{item:n.item,index:n.index,event:u})}function Tt(u){let n=u.target?.tagName;if((n==="INPUT"||n==="TEXTAREA"||n==="SELECT")&&!((u.ctrlKey||u.metaKey)&&(u.key==="f"||u.key==="F")))return;for(let m=0;m<se.length;m++)se[m](u)}if(h.content.addEventListener("click",Et),h.content.addEventListener("dblclick",Lt),h.content.addEventListener("contextmenu",It),se.length>0)h.root.addEventListener("keydown",Tt);let Ze=null;if(!lt)setTimeout(()=>{if(c.destroyed)return;Ze=new ResizeObserver((n)=>{for(let m of n){let{width:I,height:F}=m.contentRect,Y=s?I:F,ie=s?F:I;if(Math.abs(Y-c.containerSize)<1&&Math.abs(ie-c.crossSize)<1)continue;if(c.containerSize=Y,c.crossSize=ie,c.resizeCapacity(Y,p,r.overscan),X)X.refresh(E.getTotalSize());ne(),Kt(R.resize,I,F),b.emit("resize",{width:I,height:F})}}),Ze.observe(h.viewport)},0);c.resizeCapacity(c.containerSize,p,r.overscan),J(),c.initialized=!0;let Te=null;if(e.defer)Te=requestAnimationFrame(()=>{if(Te=null,!c.destroyed)Ie()});else Ie();if(!ce)Z.attach();let je={get element(){return h.root},get items(){return v},get total(){return ee?ee():v.length},setItems(u){v=[...u],c.totalItems=v.length,E.rebuild(c.totalItems),J(),ne()},appendItems(u){let n=()=>Math.max(0,E.getTotalSize()+r.mainAxisPadding-c.containerSize),m=r.reverse&&c.scrollPosition>=n()-1;if(v.push(...u),c.totalItems=v.length,E.rebuild(c.totalItems),J(),ne(),m)ue(n())},prependItems(u){let n=c.totalItems>0,m=E.getTotalSize();if(v.unshift(...u),c.totalItems=v.length,E.rebuild(c.totalItems),J(),ne(),!r.reverse||!n)return;let I=E.getTotalSize()-m;if(I<=0)return;let F=Math.max(0,E.getTotalSize()+r.mainAxisPadding-c.containerSize);ue(Math.min(c.scrollPosition+I,F))},updateItem(u,n){if(q){if(!q(u,n))return}else{let m=v.findIndex((I)=>I.id===u);if(m===-1)return;v[m]={...v[m],...n}}ne()},insertItem(u,n){if(V)V(u,n??c.totalItems);else{if(n===void 0)v.push(u);else v.splice(n,0,u);c.totalItems=v.length,E.rebuild(c.totalItems),J()}ne()},removeItem(u){if(K){if(K(u)<0)return}else{let n=v.findIndex((m)=>m.id===u);if(n===-1)return;v.splice(n,1),c.totalItems=v.length,E.rebuild(c.totalItems),J()}ne()},removeItems(u){if(K){let F=0;for(let Y of u)if(K(Y)>=0)F++;if(F>0)ne();return F}let n=new Set(u),m=v.length;v=v.filter((F)=>!n.has(F.id));let I=m-v.length;if(I>0)c.totalItems=v.length,E.rebuild(c.totalItems),J(),c.renderPending=!0,Ie();return I},getItemAt(u){if(_.indexMap){let m=k.get("_getLoadedItem");return m?m(u):v[u]}let n=k.get("_getItemAtLayout");if(n){let m=k.get("_dataToLayoutIndex");return n(m?m(u):u)}return a?a(u):v[u]},getIndexById(u){if(xe)return xe(u);return v.findIndex((n)=>n.id===u)},scrollToIndex(u,n="start"){let m=ee?ee():v.length;if(m===0){we={index:u,alignOrOptions:n};return}let I=typeof n==="string"?n:n.align??"start",F=typeof n==="object"?n.behavior:void 0,Y=typeof n==="object"?n.duration:void 0,ie=typeof n==="object"?n.easing:void 0;if($e&&$e(u,I,F,Y,ie)!==!1)return;let oe=Math.max(0,Math.min(u,m-1)),be=E.getOffset(oe),Ce=E.getSize(oe),He=c.containerSize,ln=E.getTotalSize(),Ct=r.mainAxisPadding,sn=Math.max(0,ln+Ct-He),le;if(Ke)le=Ke(oe,E,He,m,I);else{let an=r.startPadding;switch(I){case"center":le=an+be-(He-Ce)/2;break;case"end":le=be+Ce+Ct-He;break;default:le=be}le=Math.max(0,Math.min(le,sn))}if(F==="smooth"&&!fe)Z.smoothScrollTo(le,Y??Mt,j??void 0,ie);else ue(le)},getScrollPosition(){return bt.getPixelEquivalent()},on:b.on.bind(b),off:b.off.bind(b),destroy(){if(c.destroyed)return;if(c.destroyed=!0,re)re=!1,h.root.classList.remove(Ue);if(Te!==null)cancelAnimationFrame(Te),Te=null;if(T!==null)clearTimeout(T),T=null;Z.detach(),pe?.destroy(),Ze?.disconnect(),h.content.removeEventListener("click",Et),h.content.removeEventListener("dblclick",Lt),h.content.removeEventListener("contextmenu",It),h.root.removeEventListener("keydown",Tt);let u=[];ae(u);for(let[,n]of C)n.remove();if(C.clear(),M.clear(),h.root.remove(),b.emit("destroy",void 0),b.clear(),u.length>0)for(let n of u)console.error("vlist: error during destroy:",n)}};for(let[u,n]of k){if(u.startsWith("_"))continue;je[u]=n}return je}nn();function xo(e,t=[]){return qt(e,t,tn)}export{xo as createVList};
|
package/dist/version.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"3.0
|
|
1
|
+
{"version":"3.1.0-next.3","commit":"b458229","builtAt":"2026-10-01T07:42:43.065Z","released":true}
|
package/dist/vue.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist/vue — Vue composables, feature-first (#328).
|
|
3
|
+
*
|
|
4
|
+
* const { containerRef } = useVList({ items, item }, [grid({ columns: 4 })]);
|
|
5
|
+
*
|
|
6
|
+
* Features are passed explicitly, so an app only bundles what it uses. The
|
|
7
|
+
* core comes from the root entry, never a copy of its own.
|
|
8
|
+
*/
|
|
9
|
+
import { type Ref, type ShallowRef } from "vue";
|
|
10
|
+
import { createVList } from "./index";
|
|
11
|
+
import type { CreateVListConfig, EventHandler, PluginMethods, VList, VListEvents, VListItem, VListPlugin } from "./index";
|
|
12
|
+
/** `createVList`'s config without `container`: the composable owns the element. */
|
|
13
|
+
export type UseVListConfig<T extends VListItem = VListItem> = Omit<CreateVListConfig<T>, "container">;
|
|
14
|
+
export interface UseVListReturn<T extends VListItem = VListItem, P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]> {
|
|
15
|
+
/** Bind to the element the list renders into (`ref="containerRef"`). */
|
|
16
|
+
containerRef: Ref<HTMLDivElement | null>;
|
|
17
|
+
/** The list once mounted, with the methods its plugins add. */
|
|
18
|
+
instance: ShallowRef<(VList<T> & PluginMethods<P>) | null>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A vlist in a component. `plugins` are read at mount. With a `Ref` config,
|
|
22
|
+
* `items` changes update the list.
|
|
23
|
+
*
|
|
24
|
+
* @param create Advanced: the factory that builds the list, `createVList` by
|
|
25
|
+
* default. The deprecated vlist-vue package passes its own.
|
|
26
|
+
*/
|
|
27
|
+
export declare function useVList<T extends VListItem = VListItem, const P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]>(config: UseVListConfig<T> | Ref<UseVListConfig<T>>, plugins?: P, create?: typeof createVList): UseVListReturn<T, P>;
|
|
28
|
+
/** Subscribe to a list event for the component's lifetime. */
|
|
29
|
+
export declare function useVListEvent<T extends VListItem, K extends keyof VListEvents<T>>(instance: Ref<VList<T> | null> | ShallowRef<VList<T> | null>, event: K, handler: EventHandler<VListEvents<T>[K]>): void;
|
|
30
|
+
//# sourceMappingURL=vue.d.ts.map
|
package/dist/vue.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ref as u,shallowRef as L,onMounted as r,onBeforeUnmount as o,watch as a,isRef as V,unref as f}from"vue";import{createVList as d}from"./index.js";function v(n,i=[],l=d){let t=u(null),e=L(null);if(r(()=>{let s=t.value;if(!s)return;e.value=l({...f(n),container:s},i)}),o(()=>{e.value?.destroy(),e.value=null}),V(n))a(()=>n.value.items,(s)=>{if(e.value&&s)e.value.setItems(s)});return{containerRef:t,instance:e}}function c(n,i,l){let t;a(()=>n.value,(e)=>{t?.(),t=e?.on(i,l)},{immediate:!0}),o(()=>t?.())}export{v as useVList,c as useVListEvent};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vlist",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0-next.3",
|
|
4
4
|
"description": "Lightweight, high-performance virtual list with zero dependencies",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Floor IO",
|
|
@@ -49,6 +49,26 @@
|
|
|
49
49
|
"import": "./dist/config.js",
|
|
50
50
|
"default": "./dist/config.js"
|
|
51
51
|
},
|
|
52
|
+
"./vue": {
|
|
53
|
+
"types": "./dist/vue.d.ts",
|
|
54
|
+
"import": "./dist/vue.js",
|
|
55
|
+
"default": "./dist/vue.js"
|
|
56
|
+
},
|
|
57
|
+
"./svelte": {
|
|
58
|
+
"types": "./dist/svelte.d.ts",
|
|
59
|
+
"import": "./dist/svelte.js",
|
|
60
|
+
"default": "./dist/svelte.js"
|
|
61
|
+
},
|
|
62
|
+
"./solid": {
|
|
63
|
+
"types": "./dist/solid.d.ts",
|
|
64
|
+
"import": "./dist/solid.js",
|
|
65
|
+
"default": "./dist/solid.js"
|
|
66
|
+
},
|
|
67
|
+
"./react": {
|
|
68
|
+
"types": "./dist/react.d.ts",
|
|
69
|
+
"import": "./dist/react.js",
|
|
70
|
+
"default": "./dist/react.js"
|
|
71
|
+
},
|
|
52
72
|
"./internals": {
|
|
53
73
|
"types": "./dist/internals.d.ts",
|
|
54
74
|
"import": "./dist/internals.js",
|
|
@@ -97,13 +117,40 @@
|
|
|
97
117
|
"url": "https://github.com/floor/vlist/issues"
|
|
98
118
|
},
|
|
99
119
|
"homepage": "https://vlist.io",
|
|
120
|
+
"peerDependencies": {
|
|
121
|
+
"react": ">=17.0.0",
|
|
122
|
+
"vue": ">=3.0.0",
|
|
123
|
+
"svelte": ">=4.0.0",
|
|
124
|
+
"solid-js": ">=1.6.0"
|
|
125
|
+
},
|
|
126
|
+
"peerDependenciesMeta": {
|
|
127
|
+
"react": {
|
|
128
|
+
"optional": true
|
|
129
|
+
},
|
|
130
|
+
"vue": {
|
|
131
|
+
"optional": true
|
|
132
|
+
},
|
|
133
|
+
"svelte": {
|
|
134
|
+
"optional": true
|
|
135
|
+
},
|
|
136
|
+
"solid-js": {
|
|
137
|
+
"optional": true
|
|
138
|
+
}
|
|
139
|
+
},
|
|
100
140
|
"devDependencies": {
|
|
101
141
|
"@happy-dom/global-registrator": "^20.9.0",
|
|
102
142
|
"@types/bun": "^1.0.0",
|
|
103
143
|
"@types/jsdom": "^27.0.0",
|
|
144
|
+
"@types/react": "^19.2.13",
|
|
145
|
+
"@types/react-dom": "^19.2.3",
|
|
104
146
|
"happy-dom": "^20.9.0",
|
|
105
147
|
"jsdom": "^28.0.0",
|
|
106
148
|
"puppeteer-core": "^24.43.1",
|
|
107
|
-
"
|
|
149
|
+
"react": "19.2.7",
|
|
150
|
+
"react-dom": "19.2.7",
|
|
151
|
+
"solid-js": "^1.9.3",
|
|
152
|
+
"svelte": "^5.0.0",
|
|
153
|
+
"typescript": "^5.0.0",
|
|
154
|
+
"vue": "^3.5.28"
|
|
108
155
|
}
|
|
109
156
|
}
|