vlist 3.0.0-next.1 → 3.0.0-next.2

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/dist/native.d.ts CHANGED
@@ -1,11 +1,7 @@
1
- import type { CreateVListConfig, VList, VListPlugin } from "./core/types";
2
- import type { ScrollConfig, VListItem } from "./types";
3
- /** Native scrollbar visibility is available only with this entry. */
4
- export interface NativeScrollConfig extends Omit<ScrollConfig, "scrollbar"> {
5
- scrollbar?: ScrollConfig["scrollbar"] | "native" | "none";
6
- }
7
- export interface NativeCreateVListConfig<T extends VListItem = VListItem> extends Omit<CreateVListConfig<T>, "scroll"> {
8
- scroll?: NativeScrollConfig;
9
- }
10
- export declare function createVList<T extends VListItem = VListItem>(config: NativeCreateVListConfig<T>, plugins?: VListPlugin<T>[]): VList<T>;
1
+ /** @deprecated Native input is the default. Import createVList from "vlist". */
2
+ export { createVList } from "./core/create";
3
+ /** @deprecated Use ScrollConfig from "vlist". */
4
+ export type { ScrollConfig as NativeScrollConfig } from "./types";
5
+ /** @deprecated Use CreateVListConfig from "vlist". */
6
+ export type { CreateVListConfig as NativeCreateVListConfig } from "./core/types";
11
7
  //# sourceMappingURL=native.d.ts.map
package/dist/native.js CHANGED
@@ -1 +1 @@
1
- var ye=3,ut="vlist";var We=16000000,se=150,pe=1,Te=(e)=>e<0.5?2*e*e:1-(-2*e+2)**2/2,mt=300,ft=2,bt=0.25,pt=0.75;var Le="__placeholder_";function Ie(e){let{state:t,viewport:o,isX:r,onFrame:l,onIdle:c}=e,i=e.idleTimeout||se,d=null,S=null;function E(T=r?o.scrollLeft:o.scrollTop){t.prevScrollPosition=t.scrollPosition,t.scrollPosition=T,t.scrollDirection=T>t.prevScrollPosition?1:T<t.prevScrollPosition?-1:0,l(),y()}function y(){if(d!==null)clearTimeout(d);d=setTimeout(()=>{d=null,t.scrollDirection=0,c()},i)}function h(){if(S!==null)cancelAnimationFrame(S),S=null}function p(T,z,V,m=Te,O){h();let f=t.scrollPosition,M=typeof T==="function"?T:()=>T,C=M();if(Math.abs(C-f)<1){if(V)V(C);else if(r)o.scrollLeft=C;else o.scrollTop=C;O?.();return}let a=performance.now();function g(R){C=M();let L=R-a,w=Math.min(L/z,1),v=f+(C-f)*m(w);if(V)V(v);else if(r)o.scrollLeft=v;else o.scrollTop=v;if(!V)E(v);if(w<1)S=requestAnimationFrame(g);else S=null,O?.()}S=requestAnimationFrame(g)}return{attach(){},detach(){if(h(),d!==null)clearTimeout(d),d=null},cancelScroll:h,smoothScrollTo:p,commitScroll:E}}function vt(e){let{state:t,viewport:o,isX:r,wheelEnabled:l}=e,c=e.scrollTarget??o,i=Ie(e),d=i.commitScroll;function S(){let y=r?o.scrollLeft:o.scrollTop;if(Math.abs(y-t.scrollPosition)<0.5)return;d(y)}function E(y){let h;if(r){if(Math.abs(y.deltaX)>Math.abs(y.deltaY))return;let p=o.scrollLeft,T=o.scrollWidth-o.clientWidth;if(h=Math.max(0,Math.min(p+y.deltaY*pe,T)),Math.abs(h-p)<1)return;y.preventDefault(),o.scrollLeft=h}else{let p=o.scrollWidth>o.clientWidth;if(p&&Math.abs(y.deltaX)>Math.abs(y.deltaY))return;if(p&&y.deltaX!==0)y.preventDefault(),o.scrollLeft+=y.deltaX;let T=o.scrollTop,z=o.scrollHeight-o.clientHeight;if(h=Math.max(0,Math.min(T+y.deltaY*pe,z)),Math.abs(h-T)<1)return;y.preventDefault(),o.scrollTop=h}d(h)}return{...i,attach(){if(c.addEventListener("scroll",S,{passive:!0}),l)c.addEventListener("wheel",E,{passive:!1})},detach(){if(c.removeEventListener("scroll",S),l)c.removeEventListener("wheel",E);i.detach()}}}function ae(e,t,o){if(e<t)return t;if(e>o)return o;return e}function gt(e){let{state:t,viewport:o,content:r,isX:l,wheelEnabled:c,onFrame:i,onIdle:d,mainAxisPadding:S}=e,E=e.idleTimeout||se,y=e.runwayFactor??ft,h=e.wrap??null,p=h!==null,T=e.scrollTarget??o,z=0,V=0,m=0,O=null,f=null;function M(){return l?o.scrollLeft:o.scrollTop}function C(b){if(l)o.scrollLeft=b;else o.scrollTop=b}function a(b){let x=p?b:ae(b,0,V);t.prevScrollPosition=t.scrollPosition,t.scrollPosition=x,t.scrollDirection=x>t.prevScrollPosition?1:x<t.prevScrollPosition?-1:0;let A=z/2;if(p){t.baseOffset=x-A,C(A);return}let P=ae(x-A,0,m);t.baseOffset=P,C(ae(x-P,0,z))}function g(b){a(b),i(),B()}function R(){let b=M(),x=t.baseOffset+b;if(Math.abs(x-t.scrollPosition)<0.5)return;if(t.prevScrollPosition=t.scrollPosition,t.scrollPosition=x,t.scrollDirection=x>t.prevScrollPosition?1:x<t.prevScrollPosition?-1:0,L(b),p)w();i(),B()}function L(b){let x=z*bt,A=z*pt,P=z/2;if(p){if(b>=x&&b<=A)return;t.baseOffset=t.scrollPosition-P,C(P);return}if(m<=0)return;let H=t.baseOffset,X=b<x&&H>0,Z=b>A&&H<m;if(!X&&!Z)return;let K=t.scrollPosition,W=ae(K-P,0,m);if(W===H)return;t.baseOffset=W,C(ae(K-W,0,z))}function w(){let b=h.lapSize();if(b<=0)return;let x=t.scrollPosition-h.home(),A=Math.trunc(x/b);if(Math.abs(A)<h.thresholdLaps)return;let P=A*b;t.scrollPosition-=P,t.prevScrollPosition-=P,t.baseOffset-=P}function v(b){let x;if(l)if(Math.abs(b.deltaX)>Math.abs(b.deltaY)){if(!p)return;x=b.deltaX}else x=b.deltaY;else{let X=o.scrollWidth>o.clientWidth;if(X&&Math.abs(b.deltaX)>Math.abs(b.deltaY))return;if(X&&b.deltaX!==0)b.preventDefault(),o.scrollLeft+=b.deltaX;x=b.deltaY}let A=t.scrollPosition,P=A+x*pe,H=p?P:ae(P,0,V);if(Math.abs(H-A)<1)return;if(b.preventDefault(),g(H),p)w()}function B(){if(O!==null)clearTimeout(O);O=setTimeout(()=>{O=null,t.scrollDirection=0,d()},E)}function k(){if(f!==null)cancelAnimationFrame(f),f=null}function D(b,x,A,P=Te,H){k();let X=t.scrollPosition,Z=typeof b==="function"?b:()=>b,K=Z();if(Math.abs(K-X)<1){g(K),H?.();return}let W=performance.now();function j(ge){K=Z();let oe=Math.min((ge-W)/x,1);if(a(X+(K-X)*P(oe)),i(),oe<1)f=requestAnimationFrame(j);else f=null,B(),H?.()}f=requestAnimationFrame(j)}function N(b){let x=t.containerSize,A=b+S,P=x*y,H=p?P:Math.min(A,P);z=Math.max(0,H-x),V=Math.max(0,A-x),m=Math.max(0,A-H),t.totalSize=b,r.style[l?"width":"height"]=H+"px",a(t.scrollPosition)}return{attach(){if(T.addEventListener("scroll",R,{passive:!0}),c)T.addEventListener("wheel",v,{passive:!1})},detach(){if(T.removeEventListener("scroll",R),c)T.removeEventListener("wheel",v);if(k(),O!==null)clearTimeout(O),O=null},cancelScroll:k,smoothScrollTo:D,setLogical:g,getLogical(){return t.scrollPosition},getMaxLogical(){return V},refresh:N}}var Ce={top:0,right:0,bottom:0,left:0},St=(e)=>{if(e==null)return Ce;if(typeof e==="number")return e===0?Ce:{top:e,right:e,bottom:e,left:e};if(e.length===2){let[c,i]=e;return c===0&&i===0?Ce:{top:c,right:i,bottom:c,left:i}}let[t,o,r,l]=e;return t===0&&o===0&&r===0&&l===0?Ce:{top:t,right:o,bottom:r,left:l}},ht=(e,t)=>t?e.left+e.right:e.top+e.bottom,xt=(e,t)=>t?e.top+e.bottom:e.left+e.right;function Et(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,prevAriaTotal:-1,resizeCapacity(o,r,l=ye){if(r<=0||o<=0)return;let c=Math.ceil(o/r)+l*2;if(c<=t.capacity)return;let i=c+8,d=new Int32Array(i),S=new Float64Array(i),E=new Float64Array(i);d.set(t.visibleIndices),S.set(t.visibleOffsets),E.set(t.visibleSizes),t.visibleIndices=d,t.visibleOffsets=S,t.visibleSizes=E,t.capacity=i},clear(){t.visibleCount=0,t.startIndex=0}};return t}var Dt=(e,t)=>{let o=t;return{getOffset:(r)=>r*e,getSize:(r)=>e,indexAtOffset:(r)=>{if(o===0||e===0)return 0;return Math.max(0,Math.min(Math.floor(r/e),o-1))},getTotalSize:()=>o*e,getTotal:()=>o,rebuild:(r)=>{o=r},isVariable:()=>!1}},kt=(e,t)=>{let o=t,r=new Float64Array(0),l=(i)=>{o=i,r=new Float64Array(i+1),r[0]=0;for(let d=0;d<i;d++)r[d+1]=r[d]+e(d)};l(t);let c=(i)=>{if(o===0)return 0;if(i<=0)return 0;if(i>=r[o])return o-1;let d=0,S=o-1;while(d<S){let E=d+S+1>>>1;if(r[E]<=i)d=E;else S=E-1}return d};return{getOffset:(i)=>{if(i<=0)return 0;if(i>=o)return r[o];return r[i]},getSize:(i)=>e(i),indexAtOffset:(i)=>c(i),getTotalSize:()=>r[o]??0,getTotal:()=>o,rebuild:(i)=>l(i),isVariable:()=>!0}},Pe=(e,t)=>{if(typeof e==="number")return Dt(e,t);return kt(e,t)};function yt(e){let t=[],o=`${e}-item`,r=document.createElement("div");return r.className=o,{acquire(){if(t.length>0)return t.pop();return r.cloneNode(!1)},release(l){if(l.className=o,l.removeAttribute("style"),l.removeAttribute("id"),l.removeAttribute("role"),l.removeAttribute("aria-selected"),l.removeAttribute("aria-posinset"),l.removeAttribute("aria-setsize"),l.removeAttribute("data-index"),l.removeAttribute("data-id"),l.textContent="",t.length<100)t.push(l)},get size(){return t.length},clear(){t.length=0}}}function $e(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")}function Ue(e){if(typeof e==="string"){let t=document.querySelector(e);if(!t)throw Error(`[vlist] Container not found: ${e}`);return t}return e}function Tt(e,t,o,r){let l=o?`${t} ${t}--horizontal`:t,c=o?"overflow-x:auto;overflow-y:hidden;height:100%;width:100%":"overflow:auto;height:100%;width:100%",i=o?"position:relative;height:100%;overflow-anchor:none":"position:relative;width:100%;overflow-anchor:none",d=' role="list"';if(r)d+=` aria-label="${r.replace(/"/g,"&quot;")}"`;if(o)d+=' aria-orientation="horizontal"';e.insertAdjacentHTML("beforeend",`<div class="${l}"><div class="${t}-viewport" style="${c}" tabindex="-1"><div class="${t}-content" style="${i}"${d}></div></div></div>`);let S=e.lastElementChild,E=S.firstElementChild,y=E.firstElementChild,h=document.createElement("div");return h.className=`${t}-live`,h.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",h.setAttribute("aria-live","polite"),h.setAttribute("aria-atomic","true"),h.setAttribute("role","status"),S.appendChild(h),{root:S,viewport:E,content:y,liveRegion:h}}function Bt(e,t){if(e.getTotal()<=0)return{index:0,offsetPx:0};let r=t<=0?0:t,l=e.indexAtOffset(r),c=r-e.getOffset(l);return{index:l,offsetPx:c>0?c:0}}function Nt(e,t){let o=Wt(e,t);return e.getOffset(o.index)+o.offsetPx}function Wt(e,t){let o=e.getTotal();if(o<=0)return{index:0,offsetPx:0};let{index:r,offsetPx:l}=t;if(r<0)return{index:0,offsetPx:0};if(r>o-1)r=o-1;while(l>0&&r<o-1){let c=e.getSize(r);if(l<c)break;l-=c,r++}while(l<0&&r>0)r--,l+=e.getSize(r);if(l<0)l=0;return{index:r,offsetPx:l}}function Lt(e){let{sizeCache:t,getPixel:o,setPixel:r,getContainerSize:l}=e;function c(){let d=t.getTotalSize()+e.padding-l();return d>0?d:0}function i(d){if(d<=0)return 0;let S=c();return d>S?S:d}return{getLogical(){return Bt(t,o())},setLogical(d){r(i(Nt(t,d)))},getPixelEquivalent(){return o()},setPixelEquivalent(d){r(i(d))},getMaxPixelEquivalent:c,getRenderOrigin:e.getRenderOrigin,scrollByPx(d){r(i(o()+d))}}}var ve=[],$t={calculate:ve,commit:ve,afterScroll:ve,idle:ve,resize:ve};function It(e){if(e.length===0)return $t;let t=[],o=[],r=[],l=[],c=[];for(let i=0;i<e.length;i++){let d=e[i].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)r.push(d.onAfterScroll);if(d.onIdle!==void 0)l.push(d.onIdle);if(d.onResize!==void 0)c.push(d.onResize)}return{calculate:t,commit:o,afterScroll:r,idle:l,resize:c}}function Ct(e,t){for(let o=0;o<e.length;o++)e[o](t)}function Pt(e,t){for(let o=0;o<e.length;o++)e[o](t)}function Xe(e,t,o){for(let r=0;r<e.length;r++)e[r](t,o)}function At(e){for(let t=0;t<e.length;t++)e[t]()}function Mt(e,t,o){for(let r=0;r<e.length;r++)e[r](t,o)}function zt(e,t,o,r,l,c,i,d){let S=r!==0||l!==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:i,hasCrossPad:S,crossStartProp:S?t?"top":"left":"",crossEndProp:S?t?"bottom":"right":"",crossStartVal:S?r+"px":"",crossEndVal:S?l+"px":"",oddClass:c,emitter:d??null,indexMap:null,ariaTotalFn:null}}function Ut(e,t,o,r,l){if(e.containerSize<=0||e.totalItems===0)return e.clear(),!0;let{scrollPosition:c,containerSize:i,totalItems:d}=e,S=l??0;e.totalSize=t.getTotalSize();let E=t.indexAtOffset(S>0?Math.max(0,c-S):c),y=t.indexAtOffset(c+i);if(y<d-1)y++;E=Math.max(0,E),y=Math.min(d-1,Math.max(0,y));let h=Math.max(0,E-o),p=Math.min(d-1,y+o),T=Math.ceil(i/1)+o*2+10,z=p-h+1,V=Math.min(z,e.capacity,T);if(h===e.prevRangeStart&&p===e.prevRangeEnd&&!e.renderPending&&e.baseOffset===e.prevBaseOffset)return!1;e.visibleCount=V,e.startIndex=h;for(let m=0;m<V;m++){let O=h+m;e.visibleIndices[m]=O,e.visibleOffsets[m]=t.getOffset(O),e.visibleSizes[m]=t.getSize(O)}return Ct(r.calculate,e),e.prevRangeStart=h,e.prevRangeEnd=p,e.prevBaseOffset=e.baseOffset,e.renderPending=!1,!0}var F={selected:!1,focused:!1};function Xt(e,t,o){for(let r=0;r<t;r++)if(e[r]===o)return!0;return!1}function Yt(e,t){if(t<=1)return!0;let o=e[0];for(let r=1;r<t;r++){let l=e[r];if(l!==o+1)return!1;o=l}return!0}function Kt(e,t,o,r,l,c,i,d,S,E){let y=S?null:l(),{visibleCount:h,visibleIndices:p}=e,T=i.ariaTotalFn?i.ariaTotalFn():e.totalItems,z=i.interactive?String(T):"",V=i.interactive&&T!==e.prevAriaTotal,m=null,O=i.indexMap;for(let f=0;f<h;f++){let M=p[f],C=O?O(M):M,a=e.visibleOffsets[f],g=e.visibleSizes[f],R=S?S(M):y[M];if(E)E(C,F);else F.selected=!1,F.focused=!1;let L=c.get(M),w=L;if(L===void 0){let v=t.acquire();if(R!==void 0){let D;try{D=r(R,C,F)}catch(N){if(i.emitter)i.emitter.emit("error",{error:N instanceof Error?N:Error(String(N)),context:`template:render:${C}`});t.release(v);continue}if(typeof D==="string")v.innerHTML=D;else v.textContent="",v.appendChild(D);$e(v)}if(v.setAttribute("role",i.itemRole),v.setAttribute("data-index",String(C)),i.interactive)v.id=i.prefix+"-item-"+M,v.setAttribute("aria-posinset",String(C+1)),v.setAttribute("aria-setsize",z);if(R!==void 0){let D=String(R.id);if(v.setAttribute("data-id",D),D.startsWith(Le))v.classList.add(i.placeholderClass)}if(i.hasCrossPad)v.style.setProperty(i.crossStartProp,i.crossStartVal),v.style.setProperty(i.crossEndProp,i.crossEndVal);if(E){if(v.classList.toggle(i.selectedClass,F.selected),v.classList.toggle(i.focusedClass,F.focused),F.selected)v.setAttribute("aria-selected","true");else v.removeAttribute("aria-selected");v._lastSelected=F.selected,v._lastFocused=F.focused}if(i.oddClass)v.classList.toggle(i.oddClass,(M&1)===1);let B=a-e.baseOffset+i.startPadding;v.style.transform=i.translateProp+B+"px)",v._lastOffset=B;let k=g-i.gap;if(v.style[i.sizeProp]=k+"px",v._lastSize=k,v._lastItem=R,c.set(M,v),m===null)m=document.createDocumentFragment();m.appendChild(v)}else{if(V)L.setAttribute("aria-setsize",z);if(R!==void 0&&w._lastItem!==R){let k=L.getAttribute("data-id"),D=String(R.id),N;try{N=r(R,C,F)}catch(b){if(i.emitter)i.emitter.emit("error",{error:b instanceof Error?b:Error(String(b)),context:`template:render:${C}`});continue}if(typeof N==="string")L.innerHTML=N;else L.textContent="",L.appendChild(N);if($e(L),L.setAttribute("data-id",D),w._lastItem=R,k!==D){let b=k!==null&&k.startsWith(Le),x=D.startsWith(Le);if(b!==x)L.classList.toggle(i.placeholderClass,x);if(b&&!x)L.classList.add(i.replacedClass),setTimeout(()=>{L.classList.remove(i.replacedClass)},300)}}if(E){if(w._lastSelected!==F.selected){if(L.classList.toggle(i.selectedClass,F.selected),F.selected)L.setAttribute("aria-selected","true");else L.removeAttribute("aria-selected");w._lastSelected=F.selected}if(w._lastFocused!==F.focused)L.classList.toggle(i.focusedClass,F.focused),w._lastFocused=F.focused}let v=a-e.baseOffset+i.startPadding;if(w._lastOffset!==v)L.style.transform=i.translateProp+v+"px)",w._lastOffset=v;let B=g-i.gap;if(w._lastSize!==B)L.style[i.sizeProp]=B+"px",w._lastSize=B}}if(m!==null)o.appendChild(m);if(h>0&&Yt(p,h)){let f=p[0],M=p[h-1];for(let[C,a]of c)if(C<f||C>M)a.remove(),t.release(a),c.delete(C)}else for(let[f,M]of c)if(!Xt(p,h,f))M.remove(),t.release(M),c.delete(f);if(i.interactive)e.prevAriaTotal=e.totalItems;Pt(d.commit,e)}function Ye(e,t,o,r,l,c,i,d,S,E,y,h){if(Ut(e,t,o,E,S.startPadding))Kt(e,r,l,c,i,d,S,E,y,h)}var Ke=()=>{let e={},t=(c,i)=>{if(!e[c])e[c]=new Set;return e[c].add(i),()=>o(c,i)},o=(c,i)=>{e[c]?.delete(i)};return{on:t,off:o,emit:(c,i)=>{e[c]?.forEach((d)=>{try{d(i)}catch(S){console.error(`[vlist] Error in event handler for "${String(c)}":`,S)}})},clear:(c)=>{if(c)delete e[c];else for(let i in e)delete e[i]}}};var Ht=2,_t=(e=0)=>({velocity:0,sampleCount:0}),wt=(e,t)=>{let o=performance.now(),r=e._lt??o,l=e._lp??t,c=o-r;if(e._lp=t,e._lt=o,c===0)return e.sampleCount=Math.min(e.sampleCount+1,5),e;if(c>100)return e.velocity=0,e.sampleCount=1,e;return e.velocity=Math.abs(t-l)/c,e.sampleCount=Math.min(e.sampleCount+1,5),e};function qt(e){let{item:t}=e;if(t.height!==void 0&&typeof t.height==="number"){if(!Number.isFinite(t.height)||t.height<=0)throw Error(`vlist: item.height must be a positive number, got ${t.height}`)}if(t.width!==void 0&&typeof t.width==="number"){if(!Number.isFinite(t.width)||t.width<=0)throw Error(`vlist: item.width must be a positive number, got ${t.width}`)}if(t.estimatedHeight!==void 0){if(!Number.isFinite(t.estimatedHeight)||t.estimatedHeight<=0)throw Error(`vlist: item.estimatedHeight must be a positive number, got ${t.estimatedHeight}`)}if(t.estimatedWidth!==void 0){if(!Number.isFinite(t.estimatedWidth)||t.estimatedWidth<=0)throw Error(`vlist: item.estimatedWidth must be a positive number, got ${t.estimatedWidth}`)}if(t.gap!==void 0){if(typeof t.gap!=="number"||!Number.isFinite(t.gap)||t.gap<0)throw Error(`vlist: item.gap must be a non-negative number, got ${t.gap}`)}if(e.overscan!==void 0){if(typeof e.overscan!=="number"||!Number.isFinite(e.overscan)||e.overscan<0)throw Error(`vlist: overscan must be a non-negative number, got ${e.overscan}`)}let o=e.scroll;if(o?.mode!==void 0||o?.runway!==void 0)throw Error('vlist 3.0: scroll.mode and scroll.runway were removed; bounded mode is gone. Use "vlist" for huge lists or "vlist/native" for native scrolling.')}function Gt(e,t){let o=e==="horizontal"?"x":"y";if(t.some((l)=>l.name==="grid"))return{primary:o,cross:o==="x"?"y":"x"};return{primary:o}}function Zt(e,t){let o=Gt(e.orientation,t),r=o.primary==="x",l=St(e.padding);return{axis:o,hasCrossAxis:o.cross!==void 0,overscan:e.overscan??ye,reverse:e.reverse??!1,classPrefix:e.classPrefix??ut,mainAxisPadding:ht(l,r),crossAxisPadding:xt(l,r),startPadding:r?l.left:l.top,endPadding:r?l.right:l.bottom,crossPadStart:r?l.top:l.left,crossPadEnd:r?l.bottom:l.right,striped:e.item.striped||!1,gap:e.item.gap??0}}function jt(e,t){if(t)return e.item.width??e.item.estimatedWidth??100;return e.item.height??e.item.estimatedHeight??40}function Jt(e){let t=[...e];return t.sort((o,r)=>(o.priority??50)-(r.priority??50)),t}function Qt(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 r of o.conflicts)if(t.has(r))throw Error(`[vlist] Plugin "${o.name}" conflicts with "${r}"`)}}function Rt(e,t=[],o,r){if(qt(e),o){if(typeof e.scroll?.scrollbar==="string")throw Error('vlist 3.0: scroll.scrollbar strings require "vlist/native"; use the scrollbar() plugin with "vlist".');if(e.orientation==="horizontal"&&getComputedStyle(Ue(e.container)).direction==="rtl")throw Error('vlist: RTL horizontal lists require createVList from "vlist/native"');for(let s of t)if(s.name==="carousel"||s.name==="sortable")throw Error(`vlist: ${s.name} requires createVList from "vlist/native"`)}let l=Zt(e,t),c=l.axis.primary==="x",i=jt(e,c),d=l.gap,S=d>0?typeof i==="function"?(s)=>i(s)+d:i+d:i,E=typeof i==="number"?i:20,y=e.items?.length??0,h=l.striped?`${l.classPrefix}-item--odd`:"",p=Ke(),T=zt(l.classPrefix,c,l.startPadding,l.crossPadStart,l.crossPadEnd,h,d,p),z=t.length>0?Jt(t):t;if(t.length>0)Qt(z);let V=Ue(e.container),m=Tt(V,l.classPrefix,c,e.ariaLabel);if(e.scroll?.scrollbar==="none")m.viewport.classList.add(`${l.classPrefix}-viewport--no-scrollbar`);if(e.scroll?.gutter==="stable")m.viewport.classList.add(`${l.classPrefix}-viewport--gutter-stable`);let f=Pe(S,y);if(d>0){let s=f.getTotalSize;f.getTotalSize=()=>{let n=s();return n>0?n-d:0}}let M=yt(l.classPrefix),C=Math.ceil(4096/E)+l.overscan*2+8,a=Et(C);a.totalItems=y;let g=e.items??[],R=()=>g,L=new Map,w=_t(),v={velocity:0,reliable:!1},B={range:{start:0,end:-1}},k={scrollPosition:0,direction:"down"},D={scrollPosition:0},N=-1,b=-1,x=-1,A=null,P=It(z),H=new Map,X=[],Z=[],K=[],W=null,j=null,ge,oe,re=null,Ae=null,Y=null,Se=null,te=null,ce=null,Me=null,ze=null,ie=!1,qe=!1,de=null,Ge=0,Ze=0,je=null,Je=null,Qe=null,He=null,_e=null,we=null,he=null,q=null,ue=null;a.containerSize=c?m.viewport.clientWidth:m.viewport.clientHeight,a.crossSize=c?m.viewport.clientHeight:m.viewport.clientWidth;function Re(s){if(j)j(s);else{if(c)m.viewport.scrollLeft=s;else m.viewport.scrollTop=s;oe?.()}}let et=Lt({sizeCache:f,getPixel:()=>a.scrollPosition,setPixel:Re,getRenderOrigin:()=>a.baseOffset,getContainerSize:()=>a.containerSize,padding:l.mainAxisPadding});if(t.length>0){let s={dom:m,sizeCache:f,scroll:et,pool:M,config:l,emitter:p,template:e.item.template,registerMethod(n,u){H.set(n,u)},getMethod(n){return H.get(n)},registerClickHandler(n){X.push(n)},registerKeydownHandler(n){Z.push(n)},registerDestroyHandler(n){K.push(n)},enableListboxRole(){let n=m.content.getAttribute("role");if(!n||n==="list")m.content.setAttribute("role","listbox"),m.content.setAttribute("tabindex","0");T.itemRole="option",T.interactive=!0},setSizeConfig(n){let u=Pe(n,a.totalItems),I=H.get("_setSizeCacheBase");if(I){let _=f.rebuild;Object.assign(f,u),f.rebuild=_,I(u.rebuild)}else Object.assign(f,u)},setScrollSource(n){j=n.write,ge=n.onContentSize,ie=!0},commitScroll(n){oe(n)},setBoundedWrap(n){ue=n},cancelScroll(){ne?.cancelScroll()},setVirtualTotalFn(n){W=n,T.ariaTotalFn=n},setIndexMapFn(n){T.indexMap=n},getItems:R,getItem(n){return Y?Y(n):g[n]},getState(){return a},rebuildSizeCache(){f.rebuild(a.totalItems)},updateContentSize:nt,setRenderFn(n,u){re=n,Ae=u},renderIfNeeded(){me()},forceRender(){Q()},setGetItemFn(n){Y=n},setItemStateFn(n){Se=n},getItemStateFn(){return Se},get rawSizeSpec(){return i},scrollTo:Re,shiftScroll(n){if(q?.shiftBy)q.shiftBy(n);else s.scrollTo(a.scrollPosition+n)},smoothScrollTo(n,u,I,_){if(He)He(n,u,j??void 0,I,_);else s.scrollTo(typeof n==="function"?n():n)},disableDefaultResize(){qe=!0},setScrollTarget(n){de=n},setScrollToPosFn(n){_e=n},setScrollToIndexFn(n){we=n},onScrollFrame:Fe,onScrollIdle:xe,removeItemById(n){if(te)return te(n);let u=g.findIndex((I)=>I.id===n);if(u===-1)return-1;return g.splice(u,1),a.totalItems=g.length,f.rebuild(a.totalItems),J(),u},insertItemAt(n,u){if(ce){ce(n,u);return}g.splice(u,0,n),a.totalItems=g.length,f.rebuild(a.totalItems),J()},setRemoveItemFn(n){te=n},setInsertItemFn(n){ce=n},setUpdateItemFn(n){Me=n},setGetIndexByIdFn(n){ze=n},getRenderedElement(n){let u=H.get("_getRenderedElement");if(u)return u(n);return L.get(n)??null},setNavConfig(n){if(n.ud!==void 0)Ge=n.ud;if(n.lr!==void 0)Ze=n.lr;if(n.scrollIndex)je=n.scrollIndex;if(n.navigate)Je=n.navigate;if(n.total)Qe=n.total},getNavConfig:(()=>{let n={ud:0,lr:0,scrollIndex:null,navigate:null,total:null};return()=>(n.ud=Ge,n.lr=Ze,n.scrollIndex=je,n.navigate=Je,n.total=Qe,n)})()};for(let n of z)if(n.setup)try{n.setup(s)}catch(u){p.emit("error",{error:u instanceof Error?u:Error(String(u)),context:`plugin:setup:${n.name}`})}}let Oe=l.classPrefix+"--scrolling",le=!1,Ve=e.scroll?.idleTimeout??se;function tt(){if(k.scrollPosition=a.scrollPosition,c)k.direction=a.scrollDirection>0?"right":"left";else k.direction=a.scrollDirection>0?"down":"up";if(p.emit("scroll",k),wt(w,a.scrollPosition),v.velocity=w.velocity,v.reliable=w.sampleCount>=Ht,p.emit("velocity:change",v),a.startIndex!==N||a.prevRangeEnd!==b)N=a.startIndex,b=a.prevRangeEnd,B.range.start=a.startIndex,B.range.end=a.prevRangeEnd,p.emit("range:change",B)}function nt(s,n=!0){if(q){if(n)q.refresh(s);return}a.totalSize=s;let u=s+l.mainAxisPadding;if(ge?.(u),n)m.content.style[c?"width":"height"]=u+"px"}function J(){let s=re?a.totalSize:f.getTotalSize();if(nt(s,!re),q||re)return;r?.onContentSize(s,p)}function ot(){if(!he)return;if((W?W():g.length)===0)return;let n=he;he=null,Be.scrollToIndex(n.index,n.alignOrOptions)}function me(){if(ot(),re)re();else Ye(a,f,l.overscan,M,m.content,e.item.template,R,L,T,P,Y,Se)}function Fe(){if(!le)le=!0,m.root.classList.add(Oe);if(me(),Xe(P.afterScroll,a.scrollPosition,a.scrollDirection),a.scrollPosition!==x)x=a.scrollPosition,tt()}function xe(){if(le)le=!1,m.root.classList.remove(Oe);a.scrollDirection=0,At(P.idle),v.velocity=0,v.reliable=!1,p.emit("velocity:change",v),D.scrollPosition=a.scrollPosition,p.emit("scroll:idle",D)}function Q(){if(ot(),a.renderPending=!0,Ae)Ae();else Ye(a,f,l.overscan,M,m.content,e.item.template,R,L,T,P,Y,Se);if(Xe(P.afterScroll,a.scrollPosition,a.scrollDirection),a.scrollPosition!==x){if(x=a.scrollPosition,tt(),A!==null)clearTimeout(A);A=setTimeout(xe,Ve)}}let rt=ie?!1:e.scroll?.wheel!==!1,ne;if(ie&&ue)throw Error("vlist: page() is not compatible with the carousel plugin — bounded page-mode scrolling is not implemented yet.");if(!ie&&(o||ue))q=(o??r.wrap)({state:a,sizeCache:f,viewport:m.viewport,content:m.content,isX:c,wheelEnabled:rt,idleTimeout:Ve,...de?{scrollTarget:de}:{},mainAxisPadding:l.mainAxisPadding,...ue?{wrap:ue}:{},onFrame:Fe,onIdle:xe}),ne=q,j=(s)=>q.setLogical(s);else{let s=(ie?Ie:r.native)({state:a,viewport:m.viewport,isX:c,wheelEnabled:rt,idleTimeout:Ve,...de?{scrollTarget:de}:{},onFrame:Fe,onIdle:xe});ne=s,oe=s.commitScroll}He=ne.smoothScrollTo;function De(s){let u=s.target.closest("[data-index]");if(!u)return null;let I=parseInt(u.getAttribute("data-index"),10);if(Number.isNaN(I))return null;let _=H.get("_layoutToDataIndex"),U;if(_){let G=_(I);if(G<0)return null;let be=H.get("_getItem");U=be?be(G):Y?Y(G):g[G]}else U=Y?Y(I):g[I];if(U===void 0)return null;return{item:U,index:I}}function it(s){for(let u=0;u<X.length;u++)X[u](s);let n=De(s);if(n)p.emit("item:click",{item:n.item,index:n.index,event:s})}function lt(s){let n=De(s);if(n)p.emit("item:dblclick",{item:n.item,index:n.index,event:s})}function st(s){let n=De(s);if(n)p.emit("item:contextmenu",{item:n.item,index:n.index,event:s})}function at(s){let n=s.target?.tagName;if((n==="INPUT"||n==="TEXTAREA"||n==="SELECT")&&!((s.ctrlKey||s.metaKey)&&(s.key==="f"||s.key==="F")))return;for(let u=0;u<Z.length;u++)Z[u](s)}if(m.content.addEventListener("click",it),m.content.addEventListener("dblclick",lt),m.content.addEventListener("contextmenu",st),Z.length>0)m.root.addEventListener("keydown",at);let ke=null;if(!qe)setTimeout(()=>{if(a.destroyed)return;ke=new ResizeObserver((n)=>{for(let u of n){let{width:I,height:_}=u.contentRect,U=c?I:_,G=c?_:I;if(Math.abs(U-a.containerSize)<1&&Math.abs(G-a.crossSize)<1)continue;if(a.containerSize=U,a.crossSize=G,a.resizeCapacity(U,E,l.overscan),q)q.refresh(f.getTotalSize());Q(),Mt(P.resize,I,_),p.emit("resize",{width:I,height:_})}}),ke.observe(m.viewport)},0);a.resizeCapacity(a.containerSize,E,l.overscan),J(),a.initialized=!0;let fe=null;if(e.defer)fe=requestAnimationFrame(()=>{if(fe=null,!a.destroyed)me()});else me();if(!ie)ne.attach();let Be={get element(){return m.root},get items(){return g},get total(){return W?W():g.length},setItems(s){g=[...s],a.totalItems=g.length,f.rebuild(a.totalItems),J(),Q()},appendItems(s){g.push(...s),a.totalItems=g.length,f.rebuild(a.totalItems),J(),Q()},prependItems(s){g.unshift(...s),a.totalItems=g.length,f.rebuild(a.totalItems),J(),Q()},updateItem(s,n){if(Me){if(!Me(s,n))return}else{let u=g.findIndex((I)=>I.id===s);if(u===-1)return;g[u]={...g[u],...n}}Q()},insertItem(s,n){if(ce)ce(s,n??a.totalItems);else{if(n===void 0)g.push(s);else g.splice(n,0,s);a.totalItems=g.length,f.rebuild(a.totalItems),J()}Q()},removeItem(s){if(te){if(te(s)<0)return}else{let n=g.findIndex((u)=>u.id===s);if(n===-1)return;g.splice(n,1),a.totalItems=g.length,f.rebuild(a.totalItems),J()}Q()},removeItems(s){if(te){let _=0;for(let U of s)if(te(U)>=0)_++;if(_>0)Q();return _}let n=new Set(s),u=g.length;g=g.filter((_)=>!n.has(_.id));let I=u-g.length;if(I>0)a.totalItems=g.length,f.rebuild(a.totalItems),J(),a.renderPending=!0,me();return I},getItemAt(s){if(T.indexMap)return g[s];return Y?Y(s):g[s]},getIndexById(s){if(ze)return ze(s);return g.findIndex((n)=>n.id===s)},scrollToIndex(s,n="start"){let u=W?W():g.length;if(u===0){he={index:s,alignOrOptions:n};return}let I=Math.max(0,Math.min(s,u-1)),_=typeof n==="string"?n:n.align??"start",U=typeof n==="object"?n.behavior:void 0,G=typeof n==="object"?n.duration:void 0,be=typeof n==="object"?n.easing:void 0;if(we&&we(I,_,U,G,be)!==!1)return;let Ne=f.getOffset(I),ct=f.getSize(I),Ee=a.containerSize,Ot=f.getTotalSize(),dt=l.mainAxisPadding,Vt=Math.max(0,Ot+dt-Ee),ee;if(_e)ee=_e(I,f,Ee,u,_);else{let Ft=l.startPadding;switch(_){case"center":ee=Ft+Ne-(Ee-ct)/2;break;case"end":ee=Ne+ct+dt-Ee;break;default:ee=Ne}ee=Math.max(0,Math.min(ee,Vt))}if(U==="smooth")ne.smoothScrollTo(ee,G??mt,j??void 0,be);else Re(ee)},getScrollPosition(){return et.getPixelEquivalent()},on:p.on.bind(p),off:p.off.bind(p),destroy(){if(a.destroyed)return;if(a.destroyed=!0,le)le=!1,m.root.classList.remove(Oe);if(fe!==null)cancelAnimationFrame(fe),fe=null;if(A!==null)clearTimeout(A),A=null;ne.detach(),ke?.disconnect(),m.content.removeEventListener("click",it),m.content.removeEventListener("dblclick",lt),m.content.removeEventListener("contextmenu",st),m.root.removeEventListener("keydown",at);let s=[];for(let n of K)try{n()}catch(u){s.push(u instanceof Error?u:Error(String(u)))}for(let n of z)if(n.destroy)try{n.destroy()}catch(u){s.push(u instanceof Error?u:Error(String(u)))}for(let[,n]of L)n.remove();if(L.clear(),M.clear(),m.root.remove(),p.emit("destroy",void 0),p.clear(),s.length>0)for(let n of s)console.error("vlist: error during destroy:",n)}};for(let[s,n]of H)Be[s]=n;return Be}function Kn(e,t=[]){let o=!1;return Rt(e,t,void 0,{native:vt,wrap:gt,onContentSize(r,l){if(!o&&r>We)o=!0,l.emit("error",{error:Error(`Content size (${r}px) exceeds browser limit (${We}px). Use the default "vlist" synthetic entry for large datasets.`),context:"content:size:overflow"})}})}export{Kn as createVList};
1
+ export { createVList } from "./index.js";
package/dist/size.json CHANGED
@@ -1 +1 @@
1
- {"base":{"minified":"31.1","gzipped":"11.4","minBytes":31855,"gzBytes":11669},"synthetic":{"minified":"31.1","gzipped":"11.4","minBytes":31855,"gzBytes":11670},"native":{"minified":"28.1","gzipped":"10.1","minBytes":28814,"gzBytes":10393},"a11y":{"minified":"34.4","gzipped":"12.6","minBytes":35200,"gzBytes":12861},"selection":{"minified":"40.5","gzipped":"14.2","minBytes":41473,"gzBytes":14526},"data":{"minified":"44.8","gzipped":"16.2","minBytes":45854,"gzBytes":16588},"scrollbar":{"minified":"39.3","gzipped":"14.2","minBytes":40237,"gzBytes":14549},"sortable":{"minified":"40.6","gzipped":"14.3","minBytes":41588,"gzBytes":14660},"groups":{"minified":"47.1","gzipped":"16.7","minBytes":48258,"gzBytes":17091},"page":{"minified":"33.6","gzipped":"12.3","minBytes":34395,"gzBytes":12555},"snapshots":{"minified":"34.4","gzipped":"12.5","minBytes":35231,"gzBytes":12828},"transition":{"minified":"37.8","gzipped":"13.3","minBytes":38685,"gzBytes":13665},"autosize":{"minified":"34.2","gzipped":"12.4","minBytes":35003,"gzBytes":12730},"grid":{"minified":"38.2","gzipped":"13.8","minBytes":39097,"gzBytes":14170},"table":{"minified":"49.5","gzipped":"17.2","minBytes":50737,"gzBytes":17646},"masonry":{"minified":"42.5","gzipped":"15.5","minBytes":43494,"gzBytes":15880},"tree":{"minified":"46.4","gzipped":"16.4","minBytes":47526,"gzBytes":16829},"search":{"minified":"40.2","gzipped":"14.5","minBytes":41154,"gzBytes":14870},"carousel":{"minified":"41.0","gzipped":"14.9","minBytes":41973,"gzBytes":15266}}
1
+ {"base":{"minified":"25.4","gzipped":"9.3","minBytes":26018,"gzBytes":9523},"synthetic":{"minified":"31.1","gzipped":"11.4","minBytes":31858,"gzBytes":11687},"native":{"minified":"25.4","gzipped":"9.3","minBytes":26018,"gzBytes":9525},"a11y":{"minified":"28.7","gzipped":"10.5","minBytes":29367,"gzBytes":10748},"selection":{"minified":"34.8","gzipped":"12.1","minBytes":35628,"gzBytes":12404},"data":{"minified":"39.0","gzipped":"14.1","minBytes":39979,"gzBytes":14460},"scrollbar":{"minified":"33.6","gzipped":"12.2","minBytes":34400,"gzBytes":12475},"sortable":{"minified":"34.9","gzipped":"12.2","minBytes":35734,"gzBytes":12510},"groups":{"minified":"41.3","gzipped":"14.6","minBytes":42335,"gzBytes":14977},"page":{"minified":"27.9","gzipped":"10.2","minBytes":28558,"gzBytes":10404},"snapshots":{"minified":"28.7","gzipped":"10.4","minBytes":29397,"gzBytes":10693},"transition":{"minified":"32.1","gzipped":"11.3","minBytes":32873,"gzBytes":11538},"autosize":{"minified":"28.5","gzipped":"10.3","minBytes":29175,"gzBytes":10591},"grid":{"minified":"32.5","gzipped":"11.8","minBytes":33254,"gzBytes":12050},"table":{"minified":"43.8","gzipped":"15.2","minBytes":44899,"gzBytes":15543},"masonry":{"minified":"36.8","gzipped":"13.4","minBytes":37642,"gzBytes":13740},"tree":{"minified":"40.6","gzipped":"14.3","minBytes":41614,"gzBytes":14672},"search":{"minified":"34.5","gzipped":"12.4","minBytes":35338,"gzBytes":12747},"carousel":{"minified":"38.0","gzipped":"13.7","minBytes":38936,"gzBytes":14031}}
@@ -1,5 +1,5 @@
1
- /** @deprecated Synthetic input is the default. Import from "vlist" instead. */
2
- export { createVList } from "./core/create";
3
- /** @deprecated Use CreateVListConfig from "vlist". */
1
+ import type { CreateVListConfig, VList, VListPlugin } from "./core/types";
2
+ import type { VListItem } from "./types";
4
3
  export type { CreateVListConfig as SyntheticVListConfig } from "./core/types";
4
+ export declare function createVList<T extends VListItem = VListItem>(config: CreateVListConfig<T>, plugins?: VListPlugin<T>[]): VList<T>;
5
5
  //# sourceMappingURL=synthetic.d.ts.map
package/dist/synthetic.js CHANGED
@@ -1 +1 @@
1
- var Ie=3,ut="vlist";var ce=150;var Te=(e)=>e<0.5?2*e*e:1-(-2*e+2)**2/2,ct=300;var Le="__placeholder_";var mt=1,ft=2;var dt=(e)=>1-(1-e)**3;function pt({getMax:e,onChange:t=()=>{},onFinish:o,axis:l="y",reducedMotion:i}){let u=0,r=0,d=null,S=0,y=0,R=0,I=0,v=0,L=null,H=0,O=0,p=0,F=0,h=400,A=dt,C=()=>p,a=0.006,b=(x)=>Math.max(0,Math.min(e(),x)),M=(x,g)=>l==="y"?g:x,T=(x,g)=>l==="y"?x:g;function P(x){let g=b(x);if(g!==u)u=g,t(u);return g!==x}function m(){v=0,r=d===null?0:5}function W(x){m(),P(x)}return{get position(){return u},get state(){return r},get velocity(){return v},get active(){return r===3||r===4},begin(x,g,w,B){if(d!==null){m();return}m(),d=x,S=R=M(g,w),y=T(g,w),I=B,r=1},move(x,g,w,B){if(x!==d||r!==1&&r!==2)return!1;let E=M(g,w);if(r===1){let K=Math.abs(E-S),X=Math.abs(T(g,w)-y);if(Math.max(K,X)<6)return!1;if(X>K*1.2)return m(),!1;if(K<X*1.2)return!1;r=2}let D=R-E,N=B-I;if(N>0){let K=Math.max(-3,Math.min(3,D/N));v=N>80?0:K*v<0?K:0.65*K+0.35*v}if(R=E,I=B,P(u+D))v=0;return!0},end(x,g){if(x!==d)return;if(d=null,r===2&&!i()&&g-I<=80&&Math.abs(v)>=0.02)L=null,r=3;else v=0,r=0},cancel:m,reset(){d=null,m()},jump:W,shiftBy(x){O+=x,F+=x,P(u+x)},by(x){m();let g=u;return P(u+x),u!==g},smooth(x,g=400,w=dt){if(m(),F=0,C=typeof x==="function"?x:()=>x,d!==null||i()||g<=0){P(C());return}h=g,A=w,O=u,p=b(C()+F),L=null,r=4},resize(){m(),P(u)},tick(x){if(r!==3&&r!==4)return;if(L===null){if(L=x,r===4)H=x;return}let g=x-L;if(g<=0)return;if(L=x,g>100){if(r===4)P(b(C()+F)),r=0,o?.();else m();return}if(r===4){p=b(C()+F);let E=Math.min(1,(x-H)/h);if(P(O+(p-O)*A(E)),E===1)r=0,o?.();return}let w=Math.exp(-a*g),B=P(u+v*(1-w)/a);if(v*=w,B||Math.abs(v)<0.02)v=0,r=0}}}var Ce=(e)=>e.pointerType==="touch"||e.pointerType==="pen";function Ne(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 bt(e){let{state:t,viewport:o,content:l,isX:i,onFrame:u,onIdle:r,mainAxisPadding:d}=e,S=o.parentElement??o,y=o.ownerDocument.defaultView,R=o.ownerDocument,I=y.matchMedia("(prefers-reduced-motion: reduce)"),v=0,L=null,H=null,O=!1,p=!1,F=-1,h=-1,A=null,C=null,a=!1,b=!1,M=!1,T=!1,P,m=new Set;function W(s){let z=t.scrollPosition;if(t.prevScrollPosition=z,t.scrollPosition=t.baseOffset=s,t.scrollDirection=s>z?1:s<z?-1:0,!p)u()}function x(){if(H=null,E.active||E.state===ft||E.state===mt)return;t.scrollDirection=0,r()}function g(){if(!O)return;if(H!==null)clearTimeout(H);H=setTimeout(x,e.idleTimeout||ce)}function w(){if(O&&L===null&&E.active)L=requestAnimationFrame(B)}function B(s){if(L=null,E.tick(s),E.active)w();else g()}let E=pt({axis:i?"x":"y",getMax:()=>v,reducedMotion:()=>I.matches,onChange:W,onFinish(){let s=P;P=void 0,s?.()}});function D(){if(P=void 0,L!==null)cancelAnimationFrame(L),L=null;if(E.cancel(),H!==null)clearTimeout(H),H=null}function N(){if(D(),E.reset(),T&&A!==null&&o.hasPointerCapture(A))o.releasePointerCapture(A);T=!1,m.clear(),A=C=null,a=b=M=!1,g()}function K(s){if(!Ce(s))return;if(s.isPrimary){if(m.size)N();m.clear()}if(m.add(s.pointerId),m.size>1){M=!0,D();return}if(!(s.target instanceof Element)||Ne(s.target)){D();return}A=s.pointerId,a=!1,b=E.active,C=null,D(),E.begin(s.pointerId,s.clientX,s.clientY,s.timeStamp)}function X(s){if(!Ce(s)||s.target instanceof Node&&o.contains(s.target))return;if(s.isPrimary&&m.size)N();else if(m.size)m.add(s.pointerId),M=!0,D()}function re(s){if(!Ce(s)||M)return;if(E.move(s.pointerId,s.clientX,s.clientY,s.timeStamp)){if(a=!0,!T)o.setPointerCapture(s.pointerId),T=!0;if(s.cancelable)s.preventDefault()}}function ie(s){if(!Ce(s)||!m.has(s.pointerId))return;let z=s.type==="pointercancel";if(z)D();if(A===s.pointerId){if(!z&&!M&&(a||b))C=s.pointerId;if(T&&o.hasPointerCapture(s.pointerId))o.releasePointerCapture(s.pointerId);T=!1,A=null,a=b=!1}if(E.end(s.pointerId,s.timeStamp),m.delete(s.pointerId),!m.size){if(M||z)E.reset();M=!1}w(),g()}function Y(s){let z=s.pointerId;if(s.detail!==0&&C!==null&&(z===C||z===void 0))C=null,s.preventDefault(),s.stopImmediatePropagation()}function Q(s){if(s.ctrlKey||s.defaultPrevented||!(s.target instanceof Element)||Ne(s.target))return;let z=s.deltaMode===1?16:s.deltaMode===2?t.containerSize:1,G=i?s.deltaX:s.deltaY,k=i?s.deltaY:s.deltaX,Z=i?o.scrollHeight>o.clientHeight:o.scrollWidth>o.clientWidth;if(Z&&Math.abs(k)>Math.abs(G))return;if(Z&&k!==0)if(s.preventDefault(),i)o.scrollTop+=k*z;else o.scrollLeft+=k*z;let fe=i&&!Z&&G===0?k:G;if(D(),E.by(fe*z))s.preventDefault();g()}function de(s){if(s.defaultPrevented||s.ctrlKey||s.metaKey||s.altKey||!(s.target instanceof Element)||Ne(s.target))return;if((s.key===" "||s.key==="Enter")&&s.target.closest("button,summary,a,input"))return;let z=e.sizeCache,G=z.getSize(z.indexAtOffset(E.position)),k;if(s.key===(i?"ArrowRight":"ArrowDown"))k=E.position+G;if(s.key===(i?"ArrowLeft":"ArrowUp"))k=E.position-G;if(s.key==="PageDown"||s.key===" ")k=E.position+t.containerSize*(s.shiftKey&&s.key===" "?-1:1);if(s.key==="PageUp")k=E.position-t.containerSize;if(s.key==="Home")k=0;if(s.key==="End")k=v;if(k!==void 0)s.preventDefault(),ee(k)}function se(){if(R.hidden)N()}function ee(s){let z=E.position;if(D(),E.jump(s),z===E.position)W(E.position);g()}function me(s){let z=F!==t.containerSize||h!==t.crossSize,G=s!==t.totalSize||z;if(F=t.containerSize,h=t.crossSize,t.totalSize=s,v=Math.max(0,s+d-t.containerSize),G){if(p=!0,z)D(),E.resize();else E.shiftBy(0);W(E.position),p=!1}}return{setLogical:ee,refresh:me,shiftBy(s){if(t.totalSize=e.sizeCache.getTotalSize(),v=Math.max(0,t.totalSize+d-t.containerSize),E.shiftBy(s),!E.active)g()},cancelScroll(){D(),g()},getLogical:()=>t.scrollPosition,getMaxLogical:()=>v,smoothScrollTo(s,z,G,k=Te,Z){if(D(),E.smooth(s,z,k),P=Z,!E.active)P=void 0,Z?.(),g();else w()},attach(){if(O)return;if(O=!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",K),y.addEventListener("pointerdown",X),o.addEventListener("pointermove",re,{passive:!1}),y.addEventListener("pointerup",ie),y.addEventListener("pointercancel",ie),o.addEventListener("click",Y,!0),e.wheelEnabled)o.addEventListener("wheel",Q,{passive:!1});S.addEventListener("keydown",de),y.addEventListener("blur",N),R.addEventListener("visibilitychange",se),I.addEventListener("change",N),w()},detach(){if(O=!1,N(),H!==null)clearTimeout(H),H=null;o.removeEventListener("pointerdown",K),y.removeEventListener("pointerdown",X),o.removeEventListener("pointermove",re),y.removeEventListener("pointerup",ie),y.removeEventListener("pointercancel",ie),o.removeEventListener("click",Y,!0),o.removeEventListener("wheel",Q),S.removeEventListener("keydown",de),y.removeEventListener("blur",N),R.removeEventListener("visibilitychange",se),I.removeEventListener("change",N),o.style.overflowX=o.style.overflowY=o.style.touchAction=o.style.overflowAnchor="",l.style.overflow=l.style.overflowAnchor=""}}}var Pe={top:0,right:0,bottom:0,left:0},vt=(e)=>{if(e==null)return Pe;if(typeof e==="number")return e===0?Pe:{top:e,right:e,bottom:e,left:e};if(e.length===2){let[u,r]=e;return u===0&&r===0?Pe:{top:u,right:r,bottom:u,left:r}}let[t,o,l,i]=e;return t===0&&o===0&&l===0&&i===0?Pe:{top:t,right:o,bottom:l,left:i}},gt=(e,t)=>t?e.left+e.right:e.top+e.bottom,ht=(e,t)=>t?e.top+e.bottom:e.left+e.right;function St(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,prevAriaTotal:-1,resizeCapacity(o,l,i=Ie){if(l<=0||o<=0)return;let u=Math.ceil(o/l)+i*2;if(u<=t.capacity)return;let r=u+8,d=new Int32Array(r),S=new Float64Array(r),y=new Float64Array(r);d.set(t.visibleIndices),S.set(t.visibleOffsets),y.set(t.visibleSizes),t.visibleIndices=d,t.visibleOffsets=S,t.visibleSizes=y,t.capacity=r},clear(){t.visibleCount=0,t.startIndex=0}};return t}var kt=(e,t)=>{let o=t;return{getOffset:(l)=>l*e,getSize:(l)=>e,indexAtOffset:(l)=>{if(o===0||e===0)return 0;return Math.max(0,Math.min(Math.floor(l/e),o-1))},getTotalSize:()=>o*e,getTotal:()=>o,rebuild:(l)=>{o=l},isVariable:()=>!1}},Dt=(e,t)=>{let o=t,l=new Float64Array(0),i=(r)=>{o=r,l=new Float64Array(r+1),l[0]=0;for(let d=0;d<r;d++)l[d+1]=l[d]+e(d)};i(t);let u=(r)=>{if(o===0)return 0;if(r<=0)return 0;if(r>=l[o])return o-1;let d=0,S=o-1;while(d<S){let y=d+S+1>>>1;if(l[y]<=r)d=y;else S=y-1}return d};return{getOffset:(r)=>{if(r<=0)return 0;if(r>=o)return l[o];return l[r]},getSize:(r)=>e(r),indexAtOffset:(r)=>u(r),getTotalSize:()=>l[o]??0,getTotal:()=>o,rebuild:(r)=>i(r),isVariable:()=>!0}},Ae=(e,t)=>{if(typeof e==="number")return kt(e,t);return Dt(e,t)};function xt(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){if(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.length<100)t.push(i)},get size(){return t.length},clear(){t.length=0}}}function Be(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")}function Ke(e){if(typeof e==="string"){let t=document.querySelector(e);if(!t)throw Error(`[vlist] Container not found: ${e}`);return t}return e}function Et(e,t,o,l){let i=o?`${t} ${t}--horizontal`:t,u=o?"overflow-x:auto;overflow-y:hidden;height:100%;width:100%":"overflow:auto;height:100%;width:100%",r=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,"&quot;")}"`;if(o)d+=' aria-orientation="horizontal"';e.insertAdjacentHTML("beforeend",`<div class="${i}"><div class="${t}-viewport" style="${u}" tabindex="-1"><div class="${t}-content" style="${r}"${d}></div></div></div>`);let S=e.lastElementChild,y=S.firstElementChild,R=y.firstElementChild,I=document.createElement("div");return I.className=`${t}-live`,I.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",I.setAttribute("aria-live","polite"),I.setAttribute("aria-atomic","true"),I.setAttribute("role","status"),S.appendChild(I),{root:S,viewport:y,content:R,liveRegion:I}}function yt(e){let{state:t,viewport:o,isX:l,onFrame:i,onIdle:u}=e,r=e.idleTimeout||ce,d=null,S=null;function y(L=l?o.scrollLeft:o.scrollTop){t.prevScrollPosition=t.scrollPosition,t.scrollPosition=L,t.scrollDirection=L>t.prevScrollPosition?1:L<t.prevScrollPosition?-1:0,i(),R()}function R(){if(d!==null)clearTimeout(d);d=setTimeout(()=>{d=null,t.scrollDirection=0,u()},r)}function I(){if(S!==null)cancelAnimationFrame(S),S=null}function v(L,H,O,p=Te,F){I();let h=t.scrollPosition,A=typeof L==="function"?L:()=>L,C=A();if(Math.abs(C-h)<1){if(O)O(C);else if(l)o.scrollLeft=C;else o.scrollTop=C;F?.();return}let a=performance.now();function b(M){C=A();let T=M-a,P=Math.min(T/H,1),m=h+(C-h)*p(P);if(O)O(m);else if(l)o.scrollLeft=m;else o.scrollTop=m;if(!O)y(m);if(P<1)S=requestAnimationFrame(b);else S=null,F?.()}S=requestAnimationFrame(b)}return{attach(){},detach(){if(I(),d!==null)clearTimeout(d),d=null},cancelScroll:I,smoothScrollTo:v,commitScroll:y}}function Vt(e,t){if(e.getTotal()<=0)return{index:0,offsetPx:0};let l=t<=0?0:t,i=e.indexAtOffset(l),u=l-e.getOffset(i);return{index:i,offsetPx:u>0?u:0}}function Ft(e,t){let o=Nt(e,t);return e.getOffset(o.index)+o.offsetPx}function Nt(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 u=e.getSize(l);if(i<u)break;i-=u,l++}while(i<0&&l>0)l--,i+=e.getSize(l);if(i<0)i=0;return{index:l,offsetPx:i}}function It(e){let{sizeCache:t,getPixel:o,setPixel:l,getContainerSize:i}=e;function u(){let d=t.getTotalSize()+e.padding-i();return d>0?d:0}function r(d){if(d<=0)return 0;let S=u();return d>S?S:d}return{getLogical(){return Vt(t,o())},setLogical(d){l(r(Ft(t,d)))},getPixelEquivalent(){return o()},setPixelEquivalent(d){l(r(d))},getMaxPixelEquivalent:u,getRenderOrigin:e.getRenderOrigin,scrollByPx(d){l(r(o()+d))}}}var Se=[],Bt={calculate:Se,commit:Se,afterScroll:Se,idle:Se,resize:Se};function Tt(e){if(e.length===0)return Bt;let t=[],o=[],l=[],i=[],u=[];for(let r=0;r<e.length;r++){let d=e[r].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)u.push(d.onResize)}return{calculate:t,commit:o,afterScroll:l,idle:i,resize:u}}function Lt(e,t){for(let o=0;o<e.length;o++)e[o](t)}function Ct(e,t){for(let o=0;o<e.length;o++)e[o](t)}function $e(e,t,o){for(let l=0;l<e.length;l++)e[l](t,o)}function Pt(e){for(let t=0;t<e.length;t++)e[t]()}function At(e,t,o){for(let l=0;l<e.length;l++)e[l](t,o)}function zt(e,t,o,l,i,u,r,d){let S=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:r,hasCrossPad:S,crossStartProp:S?t?"top":"left":"",crossEndProp:S?t?"bottom":"right":"",crossStartVal:S?l+"px":"",crossEndVal:S?i+"px":"",oddClass:u,emitter:d??null,indexMap:null,ariaTotalFn:null}}function Kt(e,t,o,l,i){if(e.containerSize<=0||e.totalItems===0)return e.clear(),!0;let{scrollPosition:u,containerSize:r,totalItems:d}=e,S=i??0;e.totalSize=t.getTotalSize();let y=t.indexAtOffset(S>0?Math.max(0,u-S):u),R=t.indexAtOffset(u+r);if(R<d-1)R++;y=Math.max(0,y),R=Math.min(d-1,Math.max(0,R));let I=Math.max(0,y-o),v=Math.min(d-1,R+o),L=Math.ceil(r/1)+o*2+10,H=v-I+1,O=Math.min(H,e.capacity,L);if(I===e.prevRangeStart&&v===e.prevRangeEnd&&!e.renderPending&&e.baseOffset===e.prevBaseOffset)return!1;e.visibleCount=O,e.startIndex=I;for(let p=0;p<O;p++){let F=I+p;e.visibleIndices[p]=F,e.visibleOffsets[p]=t.getOffset(F),e.visibleSizes[p]=t.getSize(F)}return Lt(l.calculate,e),e.prevRangeStart=I,e.prevRangeEnd=v,e.prevBaseOffset=e.baseOffset,e.renderPending=!1,!0}var U={selected:!1,focused:!1};function $t(e,t,o){for(let l=0;l<t;l++)if(e[l]===o)return!0;return!1}function Gt(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 Ut(e,t,o,l,i,u,r,d,S,y){let R=S?null:i(),{visibleCount:I,visibleIndices:v}=e,L=r.ariaTotalFn?r.ariaTotalFn():e.totalItems,H=r.interactive?String(L):"",O=r.interactive&&L!==e.prevAriaTotal,p=null,F=r.indexMap;for(let h=0;h<I;h++){let A=v[h],C=F?F(A):A,a=e.visibleOffsets[h],b=e.visibleSizes[h],M=S?S(A):R[A];if(y)y(C,U);else U.selected=!1,U.focused=!1;let T=u.get(A),P=T;if(T===void 0){let m=t.acquire();if(M!==void 0){let g;try{g=l(M,C,U)}catch(w){if(r.emitter)r.emitter.emit("error",{error:w instanceof Error?w:Error(String(w)),context:`template:render:${C}`});t.release(m);continue}if(typeof g==="string")m.innerHTML=g;else m.textContent="",m.appendChild(g);Be(m)}if(m.setAttribute("role",r.itemRole),m.setAttribute("data-index",String(C)),r.interactive)m.id=r.prefix+"-item-"+A,m.setAttribute("aria-posinset",String(C+1)),m.setAttribute("aria-setsize",H);if(M!==void 0){let g=String(M.id);if(m.setAttribute("data-id",g),g.startsWith(Le))m.classList.add(r.placeholderClass)}if(r.hasCrossPad)m.style.setProperty(r.crossStartProp,r.crossStartVal),m.style.setProperty(r.crossEndProp,r.crossEndVal);if(y){if(m.classList.toggle(r.selectedClass,U.selected),m.classList.toggle(r.focusedClass,U.focused),U.selected)m.setAttribute("aria-selected","true");else m.removeAttribute("aria-selected");m._lastSelected=U.selected,m._lastFocused=U.focused}if(r.oddClass)m.classList.toggle(r.oddClass,(A&1)===1);let W=a-e.baseOffset+r.startPadding;m.style.transform=r.translateProp+W+"px)",m._lastOffset=W;let x=b-r.gap;if(m.style[r.sizeProp]=x+"px",m._lastSize=x,m._lastItem=M,u.set(A,m),p===null)p=document.createDocumentFragment();p.appendChild(m)}else{if(O)T.setAttribute("aria-setsize",H);if(M!==void 0&&P._lastItem!==M){let x=T.getAttribute("data-id"),g=String(M.id),w;try{w=l(M,C,U)}catch(B){if(r.emitter)r.emitter.emit("error",{error:B instanceof Error?B:Error(String(B)),context:`template:render:${C}`});continue}if(typeof w==="string")T.innerHTML=w;else T.textContent="",T.appendChild(w);if(Be(T),T.setAttribute("data-id",g),P._lastItem=M,x!==g){let B=x!==null&&x.startsWith(Le),E=g.startsWith(Le);if(B!==E)T.classList.toggle(r.placeholderClass,E);if(B&&!E)T.classList.add(r.replacedClass),setTimeout(()=>{T.classList.remove(r.replacedClass)},300)}}if(y){if(P._lastSelected!==U.selected){if(T.classList.toggle(r.selectedClass,U.selected),U.selected)T.setAttribute("aria-selected","true");else T.removeAttribute("aria-selected");P._lastSelected=U.selected}if(P._lastFocused!==U.focused)T.classList.toggle(r.focusedClass,U.focused),P._lastFocused=U.focused}let m=a-e.baseOffset+r.startPadding;if(P._lastOffset!==m)T.style.transform=r.translateProp+m+"px)",P._lastOffset=m;let W=b-r.gap;if(P._lastSize!==W)T.style[r.sizeProp]=W+"px",P._lastSize=W}}if(p!==null)o.appendChild(p);if(I>0&&Gt(v,I)){let h=v[0],A=v[I-1];for(let[C,a]of u)if(C<h||C>A)a.remove(),t.release(a),u.delete(C)}else for(let[h,A]of u)if(!$t(v,I,h))A.remove(),t.release(A),u.delete(h);if(r.interactive)e.prevAriaTotal=e.totalItems;Ct(d.commit,e)}function Ge(e,t,o,l,i,u,r,d,S,y,R,I){if(Kt(e,t,o,y,S.startPadding))Ut(e,l,i,u,r,d,S,y,R,I)}var Ue=()=>{let e={},t=(u,r)=>{if(!e[u])e[u]=new Set;return e[u].add(r),()=>o(u,r)},o=(u,r)=>{e[u]?.delete(r)};return{on:t,off:o,emit:(u,r)=>{e[u]?.forEach((d)=>{try{d(r)}catch(S){console.error(`[vlist] Error in event handler for "${String(u)}":`,S)}})},clear:(u)=>{if(u)delete e[u];else for(let r in e)delete e[r]}}};var Mt=2,wt=(e=0)=>({velocity:0,sampleCount:0}),_t=(e,t)=>{let o=performance.now(),l=e._lt??o,i=e._lp??t,u=o-l;if(e._lp=t,e._lt=o,u===0)return e.sampleCount=Math.min(e.sampleCount+1,5),e;if(u>100)return e.velocity=0,e.sampleCount=1,e;return e.velocity=Math.abs(t-i)/u,e.sampleCount=Math.min(e.sampleCount+1,5),e};function Wt(e){let{item:t}=e;if(t.height!==void 0&&typeof t.height==="number"){if(!Number.isFinite(t.height)||t.height<=0)throw Error(`vlist: item.height must be a positive number, got ${t.height}`)}if(t.width!==void 0&&typeof t.width==="number"){if(!Number.isFinite(t.width)||t.width<=0)throw Error(`vlist: item.width must be a positive number, got ${t.width}`)}if(t.estimatedHeight!==void 0){if(!Number.isFinite(t.estimatedHeight)||t.estimatedHeight<=0)throw Error(`vlist: item.estimatedHeight must be a positive number, got ${t.estimatedHeight}`)}if(t.estimatedWidth!==void 0){if(!Number.isFinite(t.estimatedWidth)||t.estimatedWidth<=0)throw Error(`vlist: item.estimatedWidth must be a positive number, got ${t.estimatedWidth}`)}if(t.gap!==void 0){if(typeof t.gap!=="number"||!Number.isFinite(t.gap)||t.gap<0)throw Error(`vlist: item.gap must be a non-negative number, got ${t.gap}`)}if(e.overscan!==void 0){if(typeof e.overscan!=="number"||!Number.isFinite(e.overscan)||e.overscan<0)throw Error(`vlist: overscan must be a non-negative number, got ${e.overscan}`)}let o=e.scroll;if(o?.mode!==void 0||o?.runway!==void 0)throw Error('vlist 3.0: scroll.mode and scroll.runway were removed; bounded mode is gone. Use "vlist" for huge lists or "vlist/native" for native scrolling.')}function qt(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 Xt(e,t){let o=qt(e.orientation,t),l=o.primary==="x",i=vt(e.padding);return{axis:o,hasCrossAxis:o.cross!==void 0,overscan:e.overscan??Ie,reverse:e.reverse??!1,classPrefix:e.classPrefix??ut,mainAxisPadding:gt(i,l),crossAxisPadding:ht(i,l),startPadding:l?i.left:i.top,endPadding:l?i.right:i.bottom,crossPadStart:l?i.top:i.left,crossPadEnd:l?i.bottom:i.right,striped:e.item.striped||!1,gap:e.item.gap??0}}function Yt(e,t){if(t)return e.item.width??e.item.estimatedWidth??100;return e.item.height??e.item.estimatedHeight??40}function Zt(e){let t=[...e];return t.sort((o,l)=>(o.priority??50)-(l.priority??50)),t}function jt(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 Jt(e,t=[]){return Qt(e,t,bt)}function Qt(e,t=[],o,l){if(Wt(e),o){if(typeof e.scroll?.scrollbar==="string")throw Error('vlist 3.0: scroll.scrollbar strings require "vlist/native"; use the scrollbar() plugin with "vlist".');if(e.orientation==="horizontal"&&getComputedStyle(Ke(e.container)).direction==="rtl")throw Error('vlist: RTL horizontal lists require createVList from "vlist/native"');for(let c of t)if(c.name==="carousel"||c.name==="sortable")throw Error(`vlist: ${c.name} requires createVList from "vlist/native"`)}let i=Xt(e,t),u=i.axis.primary==="x",r=Yt(e,u),d=i.gap,S=d>0?typeof r==="function"?(c)=>r(c)+d:r+d:r,y=typeof r==="number"?r:20,R=e.items?.length??0,I=i.striped?`${i.classPrefix}-item--odd`:"",v=Ue(),L=zt(i.classPrefix,u,i.startPadding,i.crossPadStart,i.crossPadEnd,I,d,v),H=t.length>0?Zt(t):t;if(t.length>0)jt(H);let O=Ke(e.container),p=Et(O,i.classPrefix,u,e.ariaLabel);if(e.scroll?.scrollbar==="none")p.viewport.classList.add(`${i.classPrefix}-viewport--no-scrollbar`);if(e.scroll?.gutter==="stable")p.viewport.classList.add(`${i.classPrefix}-viewport--gutter-stable`);let h=Ae(S,R);if(d>0){let c=h.getTotalSize;h.getTotalSize=()=>{let n=c();return n>0?n-d:0}}let A=xt(i.classPrefix),C=Math.ceil(4096/y)+i.overscan*2+8,a=St(C);a.totalItems=R;let b=e.items??[],M=()=>b,T=new Map,P=wt(),m={velocity:0,reliable:!1},W={range:{start:0,end:-1}},x={scrollPosition:0,direction:"down"},g={scrollPosition:0},w=-1,B=-1,E=-1,D=null,N=Tt(H),K=new Map,X=[],re=[],ie=[],Y=null,Q=null,de,se,ee=null,me=null,s=null,z=null,G=null,k=null,Z=null,fe=null,ae=!1,We=!1,pe=null,qe=0,Xe=0,Ye=null,Ze=null,je=null,ze=null,Me=null,we=null,xe=null,j=null,be=null;a.containerSize=u?p.viewport.clientWidth:p.viewport.clientHeight,a.crossSize=u?p.viewport.clientHeight:p.viewport.clientWidth;function _e(c){if(Q)Q(c);else{if(u)p.viewport.scrollLeft=c;else p.viewport.scrollTop=c;se?.()}}let Je=It({sizeCache:h,getPixel:()=>a.scrollPosition,setPixel:_e,getRenderOrigin:()=>a.baseOffset,getContainerSize:()=>a.containerSize,padding:i.mainAxisPadding});if(t.length>0){let c={dom:p,sizeCache:h,scroll:Je,pool:A,config:i,emitter:v,template:e.item.template,registerMethod(n,f){K.set(n,f)},getMethod(n){return K.get(n)},registerClickHandler(n){X.push(n)},registerKeydownHandler(n){re.push(n)},registerDestroyHandler(n){ie.push(n)},enableListboxRole(){let n=p.content.getAttribute("role");if(!n||n==="list")p.content.setAttribute("role","listbox"),p.content.setAttribute("tabindex","0");L.itemRole="option",L.interactive=!0},setSizeConfig(n){let f=Ae(n,a.totalItems),_=K.get("_setSizeCacheBase");if(_){let V=h.rebuild;Object.assign(h,f),h.rebuild=V,_(f.rebuild)}else Object.assign(h,f)},setScrollSource(n){Q=n.write,de=n.onContentSize,ae=!0},commitScroll(n){se(n)},setBoundedWrap(n){be=n},cancelScroll(){le?.cancelScroll()},setVirtualTotalFn(n){Y=n,L.ariaTotalFn=n},setIndexMapFn(n){L.indexMap=n},getItems:M,getItem(n){return s?s(n):b[n]},getState(){return a},rebuildSizeCache(){h.rebuild(a.totalItems)},updateContentSize:et,setRenderFn(n,f){ee=n,me=f},renderIfNeeded(){ve()},forceRender(){ne()},setGetItemFn(n){s=n},setItemStateFn(n){z=n},getItemStateFn(){return z},get rawSizeSpec(){return r},scrollTo:_e,shiftScroll(n){if(j?.shiftBy)j.shiftBy(n);else c.scrollTo(a.scrollPosition+n)},smoothScrollTo(n,f,_,V){if(ze)ze(n,f,Q??void 0,_,V);else c.scrollTo(typeof n==="function"?n():n)},disableDefaultResize(){We=!0},setScrollTarget(n){pe=n},setScrollToPosFn(n){Me=n},setScrollToIndexFn(n){we=n},onScrollFrame:Oe,onScrollIdle:Ee,removeItemById(n){if(G)return G(n);let f=b.findIndex((_)=>_.id===n);if(f===-1)return-1;return b.splice(f,1),a.totalItems=b.length,h.rebuild(a.totalItems),te(),f},insertItemAt(n,f){if(k){k(n,f);return}b.splice(f,0,n),a.totalItems=b.length,h.rebuild(a.totalItems),te()},setRemoveItemFn(n){G=n},setInsertItemFn(n){k=n},setUpdateItemFn(n){Z=n},setGetIndexByIdFn(n){fe=n},getRenderedElement(n){let f=K.get("_getRenderedElement");if(f)return f(n);return T.get(n)??null},setNavConfig(n){if(n.ud!==void 0)qe=n.ud;if(n.lr!==void 0)Xe=n.lr;if(n.scrollIndex)Ye=n.scrollIndex;if(n.navigate)Ze=n.navigate;if(n.total)je=n.total},getNavConfig:(()=>{let n={ud:0,lr:0,scrollIndex:null,navigate:null,total:null};return()=>(n.ud=qe,n.lr=Xe,n.scrollIndex=Ye,n.navigate=Ze,n.total=je,n)})()};for(let n of H)if(n.setup)try{n.setup(c)}catch(f){v.emit("error",{error:f instanceof Error?f:Error(String(f)),context:`plugin:setup:${n.name}`})}}let He=i.classPrefix+"--scrolling",ue=!1,Re=e.scroll?.idleTimeout??ce;function Qe(){if(x.scrollPosition=a.scrollPosition,u)x.direction=a.scrollDirection>0?"right":"left";else x.direction=a.scrollDirection>0?"down":"up";if(v.emit("scroll",x),_t(P,a.scrollPosition),m.velocity=P.velocity,m.reliable=P.sampleCount>=Mt,v.emit("velocity:change",m),a.startIndex!==w||a.prevRangeEnd!==B)w=a.startIndex,B=a.prevRangeEnd,W.range.start=a.startIndex,W.range.end=a.prevRangeEnd,v.emit("range:change",W)}function et(c,n=!0){if(j){if(n)j.refresh(c);return}a.totalSize=c;let f=c+i.mainAxisPadding;if(de?.(f),n)p.content.style[u?"width":"height"]=f+"px"}function te(){let c=ee?a.totalSize:h.getTotalSize();if(et(c,!ee),j||ee)return;l?.onContentSize(c,v)}function tt(){if(!xe)return;if((Y?Y():b.length)===0)return;let n=xe;xe=null,Ve.scrollToIndex(n.index,n.alignOrOptions)}function ve(){if(tt(),ee)ee();else Ge(a,h,i.overscan,A,p.content,e.item.template,M,T,L,N,s,z)}function Oe(){if(!ue)ue=!0,p.root.classList.add(He);if(ve(),$e(N.afterScroll,a.scrollPosition,a.scrollDirection),a.scrollPosition!==E)E=a.scrollPosition,Qe()}function Ee(){if(ue)ue=!1,p.root.classList.remove(He);a.scrollDirection=0,Pt(N.idle),m.velocity=0,m.reliable=!1,v.emit("velocity:change",m),g.scrollPosition=a.scrollPosition,v.emit("scroll:idle",g)}function ne(){if(tt(),a.renderPending=!0,me)me();else Ge(a,h,i.overscan,A,p.content,e.item.template,M,T,L,N,s,z);if($e(N.afterScroll,a.scrollPosition,a.scrollDirection),a.scrollPosition!==E){if(E=a.scrollPosition,Qe(),D!==null)clearTimeout(D);D=setTimeout(Ee,Re)}}let nt=ae?!1:e.scroll?.wheel!==!1,le;if(ae&&be)throw Error("vlist: page() is not compatible with the carousel plugin — bounded page-mode scrolling is not implemented yet.");if(!ae&&(o||be))j=(o??l.wrap)({state:a,sizeCache:h,viewport:p.viewport,content:p.content,isX:u,wheelEnabled:nt,idleTimeout:Re,...pe?{scrollTarget:pe}:{},mainAxisPadding:i.mainAxisPadding,...be?{wrap:be}:{},onFrame:Oe,onIdle:Ee}),le=j,Q=(c)=>j.setLogical(c);else{let c=(ae?yt:l.native)({state:a,viewport:p.viewport,isX:u,wheelEnabled:nt,idleTimeout:Re,...pe?{scrollTarget:pe}:{},onFrame:Oe,onIdle:Ee});le=c,se=c.commitScroll}ze=le.smoothScrollTo;function ke(c){let f=c.target.closest("[data-index]");if(!f)return null;let _=parseInt(f.getAttribute("data-index"),10);if(Number.isNaN(_))return null;let V=K.get("_layoutToDataIndex"),q;if(V){let J=V(_);if(J<0)return null;let he=K.get("_getItem");q=he?he(J):s?s(J):b[J]}else q=s?s(_):b[_];if(q===void 0)return null;return{item:q,index:_}}function ot(c){for(let f=0;f<X.length;f++)X[f](c);let n=ke(c);if(n)v.emit("item:click",{item:n.item,index:n.index,event:c})}function rt(c){let n=ke(c);if(n)v.emit("item:dblclick",{item:n.item,index:n.index,event:c})}function it(c){let n=ke(c);if(n)v.emit("item:contextmenu",{item:n.item,index:n.index,event:c})}function lt(c){let n=c.target?.tagName;if((n==="INPUT"||n==="TEXTAREA"||n==="SELECT")&&!((c.ctrlKey||c.metaKey)&&(c.key==="f"||c.key==="F")))return;for(let f=0;f<re.length;f++)re[f](c)}if(p.content.addEventListener("click",ot),p.content.addEventListener("dblclick",rt),p.content.addEventListener("contextmenu",it),re.length>0)p.root.addEventListener("keydown",lt);let De=null;if(!We)setTimeout(()=>{if(a.destroyed)return;De=new ResizeObserver((n)=>{for(let f of n){let{width:_,height:V}=f.contentRect,q=u?_:V,J=u?V:_;if(Math.abs(q-a.containerSize)<1&&Math.abs(J-a.crossSize)<1)continue;if(a.containerSize=q,a.crossSize=J,a.resizeCapacity(q,y,i.overscan),j)j.refresh(h.getTotalSize());ne(),At(N.resize,_,V),v.emit("resize",{width:_,height:V})}}),De.observe(p.viewport)},0);a.resizeCapacity(a.containerSize,y,i.overscan),te(),a.initialized=!0;let ge=null;if(e.defer)ge=requestAnimationFrame(()=>{if(ge=null,!a.destroyed)ve()});else ve();if(!ae)le.attach();let Ve={get element(){return p.root},get items(){return b},get total(){return Y?Y():b.length},setItems(c){b=[...c],a.totalItems=b.length,h.rebuild(a.totalItems),te(),ne()},appendItems(c){b.push(...c),a.totalItems=b.length,h.rebuild(a.totalItems),te(),ne()},prependItems(c){b.unshift(...c),a.totalItems=b.length,h.rebuild(a.totalItems),te(),ne()},updateItem(c,n){if(Z){if(!Z(c,n))return}else{let f=b.findIndex((_)=>_.id===c);if(f===-1)return;b[f]={...b[f],...n}}ne()},insertItem(c,n){if(k)k(c,n??a.totalItems);else{if(n===void 0)b.push(c);else b.splice(n,0,c);a.totalItems=b.length,h.rebuild(a.totalItems),te()}ne()},removeItem(c){if(G){if(G(c)<0)return}else{let n=b.findIndex((f)=>f.id===c);if(n===-1)return;b.splice(n,1),a.totalItems=b.length,h.rebuild(a.totalItems),te()}ne()},removeItems(c){if(G){let V=0;for(let q of c)if(G(q)>=0)V++;if(V>0)ne();return V}let n=new Set(c),f=b.length;b=b.filter((V)=>!n.has(V.id));let _=f-b.length;if(_>0)a.totalItems=b.length,h.rebuild(a.totalItems),te(),a.renderPending=!0,ve();return _},getItemAt(c){if(L.indexMap)return b[c];return s?s(c):b[c]},getIndexById(c){if(fe)return fe(c);return b.findIndex((n)=>n.id===c)},scrollToIndex(c,n="start"){let f=Y?Y():b.length;if(f===0){xe={index:c,alignOrOptions:n};return}let _=Math.max(0,Math.min(c,f-1)),V=typeof n==="string"?n:n.align??"start",q=typeof n==="object"?n.behavior:void 0,J=typeof n==="object"?n.duration:void 0,he=typeof n==="object"?n.easing:void 0;if(we&&we(_,V,q,J,he)!==!1)return;let Fe=h.getOffset(_),st=h.getSize(_),ye=a.containerSize,Ht=h.getTotalSize(),at=i.mainAxisPadding,Rt=Math.max(0,Ht+at-ye),oe;if(Me)oe=Me(_,h,ye,f,V);else{let Ot=i.startPadding;switch(V){case"center":oe=Ot+Fe-(ye-st)/2;break;case"end":oe=Fe+st+at-ye;break;default:oe=Fe}oe=Math.max(0,Math.min(oe,Rt))}if(q==="smooth")le.smoothScrollTo(oe,J??ct,Q??void 0,he);else _e(oe)},getScrollPosition(){return Je.getPixelEquivalent()},on:v.on.bind(v),off:v.off.bind(v),destroy(){if(a.destroyed)return;if(a.destroyed=!0,ue)ue=!1,p.root.classList.remove(He);if(ge!==null)cancelAnimationFrame(ge),ge=null;if(D!==null)clearTimeout(D),D=null;le.detach(),De?.disconnect(),p.content.removeEventListener("click",ot),p.content.removeEventListener("dblclick",rt),p.content.removeEventListener("contextmenu",it),p.root.removeEventListener("keydown",lt);let c=[];for(let n of ie)try{n()}catch(f){c.push(f instanceof Error?f:Error(String(f)))}for(let n of H)if(n.destroy)try{n.destroy()}catch(f){c.push(f instanceof Error?f:Error(String(f)))}for(let[,n]of T)n.remove();if(T.clear(),A.clear(),p.root.remove(),v.emit("destroy",void 0),v.clear(),c.length>0)for(let n of c)console.error("vlist: error during destroy:",n)}};for(let[c,n]of K)Ve[c]=n;return Ve}export{Jt as createVList};
1
+ var Ie=3,ct="vlist";var ce=150;var Te=(e)=>e<0.5?2*e*e:1-(-2*e+2)**2/2,dt=300;var Le="__placeholder_";function mt(e){let{state:t,viewport:o,isX:l,onFrame:i,onIdle:u}=e,r=e.idleTimeout||ce,d=null,S=null;function E(L=l?o.scrollLeft:o.scrollTop){t.prevScrollPosition=t.scrollPosition,t.scrollPosition=L,t.scrollDirection=L>t.prevScrollPosition?1:L<t.prevScrollPosition?-1:0,i(),R()}function R(){if(d!==null)clearTimeout(d);d=setTimeout(()=>{d=null,t.scrollDirection=0,u()},r)}function I(){if(S!==null)cancelAnimationFrame(S),S=null}function v(L,H,O,p=Te,F){I();let h=t.scrollPosition,A=typeof L==="function"?L:()=>L,C=A();if(Math.abs(C-h)<1){if(O)O(C);else if(l)o.scrollLeft=C;else o.scrollTop=C;F?.();return}let a=performance.now();function b(M){C=A();let T=M-a,P=Math.min(T/H,1),m=h+(C-h)*p(P);if(O)O(m);else if(l)o.scrollLeft=m;else o.scrollTop=m;if(!O)E(m);if(P<1)S=requestAnimationFrame(b);else S=null,F?.()}S=requestAnimationFrame(b)}return{attach(){},detach(){if(I(),d!==null)clearTimeout(d),d=null},cancelScroll:I,smoothScrollTo:v,commitScroll:E}}var Ce={top:0,right:0,bottom:0,left:0},ft=(e)=>{if(e==null)return Ce;if(typeof e==="number")return e===0?Ce:{top:e,right:e,bottom:e,left:e};if(e.length===2){let[u,r]=e;return u===0&&r===0?Ce:{top:u,right:r,bottom:u,left:r}}let[t,o,l,i]=e;return t===0&&o===0&&l===0&&i===0?Ce:{top:t,right:o,bottom:l,left:i}},pt=(e,t)=>t?e.left+e.right:e.top+e.bottom,bt=(e,t)=>t?e.top+e.bottom:e.left+e.right;function vt(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,prevAriaTotal:-1,resizeCapacity(o,l,i=Ie){if(l<=0||o<=0)return;let u=Math.ceil(o/l)+i*2;if(u<=t.capacity)return;let r=u+8,d=new Int32Array(r),S=new Float64Array(r),E=new Float64Array(r);d.set(t.visibleIndices),S.set(t.visibleOffsets),E.set(t.visibleSizes),t.visibleIndices=d,t.visibleOffsets=S,t.visibleSizes=E,t.capacity=r},clear(){t.visibleCount=0,t.startIndex=0}};return t}var Dt=(e,t)=>{let o=t;return{getOffset:(l)=>l*e,getSize:(l)=>e,indexAtOffset:(l)=>{if(o===0||e===0)return 0;return Math.max(0,Math.min(Math.floor(l/e),o-1))},getTotalSize:()=>o*e,getTotal:()=>o,rebuild:(l)=>{o=l},isVariable:()=>!1}},Ft=(e,t)=>{let o=t,l=new Float64Array(0),i=(r)=>{o=r,l=new Float64Array(r+1),l[0]=0;for(let d=0;d<r;d++)l[d+1]=l[d]+e(d)};i(t);let u=(r)=>{if(o===0)return 0;if(r<=0)return 0;if(r>=l[o])return o-1;let d=0,S=o-1;while(d<S){let E=d+S+1>>>1;if(l[E]<=r)d=E;else S=E-1}return d};return{getOffset:(r)=>{if(r<=0)return 0;if(r>=o)return l[o];return l[r]},getSize:(r)=>e(r),indexAtOffset:(r)=>u(r),getTotalSize:()=>l[o]??0,getTotal:()=>o,rebuild:(r)=>i(r),isVariable:()=>!0}},Pe=(e,t)=>{if(typeof e==="number")return Dt(e,t);return Ft(e,t)};function gt(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){if(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.length<100)t.push(i)},get size(){return t.length},clear(){t.length=0}}}function Ne(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")}function Be(e){if(typeof e==="string"){let t=document.querySelector(e);if(!t)throw Error(`[vlist] Container not found: ${e}`);return t}return e}function ht(e,t,o,l){let i=o?`${t} ${t}--horizontal`:t,u=o?"overflow-x:auto;overflow-y:hidden;height:100%;width:100%":"overflow:auto;height:100%;width:100%",r=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,"&quot;")}"`;if(o)d+=' aria-orientation="horizontal"';e.insertAdjacentHTML("beforeend",`<div class="${i}"><div class="${t}-viewport" style="${u}" tabindex="-1"><div class="${t}-content" style="${r}"${d}></div></div></div>`);let S=e.lastElementChild,E=S.firstElementChild,R=E.firstElementChild,I=document.createElement("div");return I.className=`${t}-live`,I.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",I.setAttribute("aria-live","polite"),I.setAttribute("aria-atomic","true"),I.setAttribute("role","status"),S.appendChild(I),{root:S,viewport:E,content:R,liveRegion:I}}function Nt(e,t){if(e.getTotal()<=0)return{index:0,offsetPx:0};let l=t<=0?0:t,i=e.indexAtOffset(l),u=l-e.getOffset(i);return{index:i,offsetPx:u>0?u:0}}function Bt(e,t){let o=$t(e,t);return e.getOffset(o.index)+o.offsetPx}function $t(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 u=e.getSize(l);if(i<u)break;i-=u,l++}while(i<0&&l>0)l--,i+=e.getSize(l);if(i<0)i=0;return{index:l,offsetPx:i}}function St(e){let{sizeCache:t,getPixel:o,setPixel:l,getContainerSize:i}=e;function u(){let d=t.getTotalSize()+e.padding-i();return d>0?d:0}function r(d){if(d<=0)return 0;let S=u();return d>S?S:d}return{getLogical(){return Nt(t,o())},setLogical(d){l(r(Bt(t,d)))},getPixelEquivalent(){return o()},setPixelEquivalent(d){l(r(d))},getMaxPixelEquivalent:u,getRenderOrigin:e.getRenderOrigin,scrollByPx(d){l(r(o()+d))}}}var Se=[],Kt={calculate:Se,commit:Se,afterScroll:Se,idle:Se,resize:Se};function xt(e){if(e.length===0)return Kt;let t=[],o=[],l=[],i=[],u=[];for(let r=0;r<e.length;r++){let d=e[r].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)u.push(d.onResize)}return{calculate:t,commit:o,afterScroll:l,idle:i,resize:u}}function yt(e,t){for(let o=0;o<e.length;o++)e[o](t)}function Et(e,t){for(let o=0;o<e.length;o++)e[o](t)}function $e(e,t,o){for(let l=0;l<e.length;l++)e[l](t,o)}function It(e){for(let t=0;t<e.length;t++)e[t]()}function Tt(e,t,o){for(let l=0;l<e.length;l++)e[l](t,o)}function Lt(e,t,o,l,i,u,r,d){let S=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:r,hasCrossPad:S,crossStartProp:S?t?"top":"left":"",crossEndProp:S?t?"bottom":"right":"",crossStartVal:S?l+"px":"",crossEndVal:S?i+"px":"",oddClass:u,emitter:d??null,indexMap:null,ariaTotalFn:null}}function Ut(e,t,o,l,i){if(e.containerSize<=0||e.totalItems===0)return e.clear(),!0;let{scrollPosition:u,containerSize:r,totalItems:d}=e,S=i??0;e.totalSize=t.getTotalSize();let E=t.indexAtOffset(S>0?Math.max(0,u-S):u),R=t.indexAtOffset(u+r);if(R<d-1)R++;E=Math.max(0,E),R=Math.min(d-1,Math.max(0,R));let I=Math.max(0,E-o),v=Math.min(d-1,R+o),L=Math.ceil(r/1)+o*2+10,H=v-I+1,O=Math.min(H,e.capacity,L);if(I===e.prevRangeStart&&v===e.prevRangeEnd&&!e.renderPending&&e.baseOffset===e.prevBaseOffset)return!1;e.visibleCount=O,e.startIndex=I;for(let p=0;p<O;p++){let F=I+p;e.visibleIndices[p]=F,e.visibleOffsets[p]=t.getOffset(F),e.visibleSizes[p]=t.getSize(F)}return yt(l.calculate,e),e.prevRangeStart=I,e.prevRangeEnd=v,e.prevBaseOffset=e.baseOffset,e.renderPending=!1,!0}var G={selected:!1,focused:!1};function Gt(e,t,o){for(let l=0;l<t;l++)if(e[l]===o)return!0;return!1}function Wt(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 qt(e,t,o,l,i,u,r,d,S,E){let R=S?null:i(),{visibleCount:I,visibleIndices:v}=e,L=r.ariaTotalFn?r.ariaTotalFn():e.totalItems,H=r.interactive?String(L):"",O=r.interactive&&L!==e.prevAriaTotal,p=null,F=r.indexMap;for(let h=0;h<I;h++){let A=v[h],C=F?F(A):A,a=e.visibleOffsets[h],b=e.visibleSizes[h],M=S?S(A):R[A];if(E)E(C,G);else G.selected=!1,G.focused=!1;let T=u.get(A),P=T;if(T===void 0){let m=t.acquire();if(M!==void 0){let g;try{g=l(M,C,G)}catch(w){if(r.emitter)r.emitter.emit("error",{error:w instanceof Error?w:Error(String(w)),context:`template:render:${C}`});t.release(m);continue}if(typeof g==="string")m.innerHTML=g;else m.textContent="",m.appendChild(g);Ne(m)}if(m.setAttribute("role",r.itemRole),m.setAttribute("data-index",String(C)),r.interactive)m.id=r.prefix+"-item-"+A,m.setAttribute("aria-posinset",String(C+1)),m.setAttribute("aria-setsize",H);if(M!==void 0){let g=String(M.id);if(m.setAttribute("data-id",g),g.startsWith(Le))m.classList.add(r.placeholderClass)}if(r.hasCrossPad)m.style.setProperty(r.crossStartProp,r.crossStartVal),m.style.setProperty(r.crossEndProp,r.crossEndVal);if(E){if(m.classList.toggle(r.selectedClass,G.selected),m.classList.toggle(r.focusedClass,G.focused),G.selected)m.setAttribute("aria-selected","true");else m.removeAttribute("aria-selected");m._lastSelected=G.selected,m._lastFocused=G.focused}if(r.oddClass)m.classList.toggle(r.oddClass,(A&1)===1);let W=a-e.baseOffset+r.startPadding;m.style.transform=r.translateProp+W+"px)",m._lastOffset=W;let x=b-r.gap;if(m.style[r.sizeProp]=x+"px",m._lastSize=x,m._lastItem=M,u.set(A,m),p===null)p=document.createDocumentFragment();p.appendChild(m)}else{if(O)T.setAttribute("aria-setsize",H);if(M!==void 0&&P._lastItem!==M){let x=T.getAttribute("data-id"),g=String(M.id),w;try{w=l(M,C,G)}catch(B){if(r.emitter)r.emitter.emit("error",{error:B instanceof Error?B:Error(String(B)),context:`template:render:${C}`});continue}if(typeof w==="string")T.innerHTML=w;else T.textContent="",T.appendChild(w);if(Ne(T),T.setAttribute("data-id",g),P._lastItem=M,x!==g){let B=x!==null&&x.startsWith(Le),y=g.startsWith(Le);if(B!==y)T.classList.toggle(r.placeholderClass,y);if(B&&!y)T.classList.add(r.replacedClass),setTimeout(()=>{T.classList.remove(r.replacedClass)},300)}}if(E){if(P._lastSelected!==G.selected){if(T.classList.toggle(r.selectedClass,G.selected),G.selected)T.setAttribute("aria-selected","true");else T.removeAttribute("aria-selected");P._lastSelected=G.selected}if(P._lastFocused!==G.focused)T.classList.toggle(r.focusedClass,G.focused),P._lastFocused=G.focused}let m=a-e.baseOffset+r.startPadding;if(P._lastOffset!==m)T.style.transform=r.translateProp+m+"px)",P._lastOffset=m;let W=b-r.gap;if(P._lastSize!==W)T.style[r.sizeProp]=W+"px",P._lastSize=W}}if(p!==null)o.appendChild(p);if(I>0&&Wt(v,I)){let h=v[0],A=v[I-1];for(let[C,a]of u)if(C<h||C>A)a.remove(),t.release(a),u.delete(C)}else for(let[h,A]of u)if(!Gt(v,I,h))A.remove(),t.release(A),u.delete(h);if(r.interactive)e.prevAriaTotal=e.totalItems;Et(d.commit,e)}function Ke(e,t,o,l,i,u,r,d,S,E,R,I){if(Ut(e,t,o,E,S.startPadding))qt(e,l,i,u,r,d,S,E,R,I)}var Ue=()=>{let e={},t=(u,r)=>{if(!e[u])e[u]=new Set;return e[u].add(r),()=>o(u,r)},o=(u,r)=>{e[u]?.delete(r)};return{on:t,off:o,emit:(u,r)=>{e[u]?.forEach((d)=>{try{d(r)}catch(S){console.error(`[vlist] Error in event handler for "${String(u)}":`,S)}})},clear:(u)=>{if(u)delete e[u];else for(let r in e)delete e[r]}}};var Ct=2,Pt=(e=0)=>({velocity:0,sampleCount:0}),At=(e,t)=>{let o=performance.now(),l=e._lt??o,i=e._lp??t,u=o-l;if(e._lp=t,e._lt=o,u===0)return e.sampleCount=Math.min(e.sampleCount+1,5),e;if(u>100)return e.velocity=0,e.sampleCount=1,e;return e.velocity=Math.abs(t-i)/u,e.sampleCount=Math.min(e.sampleCount+1,5),e};function Xt(e){let{item:t}=e;if(t.height!==void 0&&typeof t.height==="number"){if(!Number.isFinite(t.height)||t.height<=0)throw Error(`vlist: item.height must be a positive number, got ${t.height}`)}if(t.width!==void 0&&typeof t.width==="number"){if(!Number.isFinite(t.width)||t.width<=0)throw Error(`vlist: item.width must be a positive number, got ${t.width}`)}if(t.estimatedHeight!==void 0){if(!Number.isFinite(t.estimatedHeight)||t.estimatedHeight<=0)throw Error(`vlist: item.estimatedHeight must be a positive number, got ${t.estimatedHeight}`)}if(t.estimatedWidth!==void 0){if(!Number.isFinite(t.estimatedWidth)||t.estimatedWidth<=0)throw Error(`vlist: item.estimatedWidth must be a positive number, got ${t.estimatedWidth}`)}if(t.gap!==void 0){if(typeof t.gap!=="number"||!Number.isFinite(t.gap)||t.gap<0)throw Error(`vlist: item.gap must be a non-negative number, got ${t.gap}`)}if(e.overscan!==void 0){if(typeof e.overscan!=="number"||!Number.isFinite(e.overscan)||e.overscan<0)throw Error(`vlist: overscan must be a non-negative number, got ${e.overscan}`)}let o=e.scroll;if(o?.mode!==void 0||o?.runway!==void 0)throw Error('vlist 3.0: scroll.mode and scroll.runway were removed; bounded mode is gone. Use "vlist/synthetic" for huge lists or "vlist" for native scrolling.')}function Yt(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 Zt(e,t){let o=Yt(e.orientation,t),l=o.primary==="x",i=ft(e.padding);return{axis:o,hasCrossAxis:o.cross!==void 0,overscan:e.overscan??Ie,reverse:e.reverse??!1,classPrefix:e.classPrefix??ct,mainAxisPadding:pt(i,l),crossAxisPadding:bt(i,l),startPadding:l?i.left:i.top,endPadding:l?i.right:i.bottom,crossPadStart:l?i.top:i.left,crossPadEnd:l?i.bottom:i.right,striped:e.item.striped||!1,gap:e.item.gap??0}}function jt(e,t){if(t)return e.item.width??e.item.estimatedWidth??100;return e.item.height??e.item.estimatedHeight??40}function Jt(e){let t=[...e];return t.sort((o,l)=>(o.priority??50)-(l.priority??50)),t}function Qt(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 zt(e,t=[],o,l){if(Xt(e),o){if(typeof e.scroll?.scrollbar==="string")throw Error('vlist 3.0: scroll.scrollbar strings require "vlist"; use the scrollbar() plugin with "vlist/synthetic".');if(e.orientation==="horizontal"&&getComputedStyle(Be(e.container)).direction==="rtl")throw Error('vlist: RTL horizontal lists require createVList from "vlist"');for(let c of t)if(c.name==="carousel"||c.name==="sortable")throw Error(`vlist: ${c.name} requires createVList from "vlist"`)}let i=Zt(e,t),u=i.axis.primary==="x",r=jt(e,u),d=i.gap,S=d>0?typeof r==="function"?(c)=>r(c)+d:r+d:r,E=typeof r==="number"?r:20,R=e.items?.length??0,I=i.striped?`${i.classPrefix}-item--odd`:"",v=Ue(),L=Lt(i.classPrefix,u,i.startPadding,i.crossPadStart,i.crossPadEnd,I,d,v),H=t.length>0?Jt(t):t;if(t.length>0)Qt(H);let O=Be(e.container),p=ht(O,i.classPrefix,u,e.ariaLabel);if(e.scroll?.scrollbar==="none")p.viewport.classList.add(`${i.classPrefix}-viewport--no-scrollbar`);if(e.scroll?.gutter==="stable")p.viewport.classList.add(`${i.classPrefix}-viewport--gutter-stable`);let h=Pe(S,R);if(d>0){let c=h.getTotalSize;h.getTotalSize=()=>{let n=c();return n>0?n-d:0}}let A=gt(i.classPrefix),C=Math.ceil(4096/E)+i.overscan*2+8,a=vt(C);a.totalItems=R;let b=e.items??[],M=()=>b,T=new Map,P=Pt(),m={velocity:0,reliable:!1},W={range:{start:0,end:-1}},x={scrollPosition:0,direction:"down"},g={scrollPosition:0},w=-1,B=-1,y=-1,k=null,N=xt(H),K=new Map,X=[],re=[],ie=[],Y=null,Q=null,de,se,ee=null,me=null,s=null,z=null,U=null,V=null,Z=null,fe=null,ae=!1,We=!1,pe=null,qe=0,Xe=0,Ye=null,Ze=null,je=null,ze=null,Me=null,we=null,xe=null,j=null,be=null,Je=null;a.containerSize=u?p.viewport.clientWidth:p.viewport.clientHeight,a.crossSize=u?p.viewport.clientHeight:p.viewport.clientWidth;function _e(c){if(Q)Q(c);else{if(u)p.viewport.scrollLeft=c;else p.viewport.scrollTop=c;se?.()}}let Qe=St({sizeCache:h,getPixel:()=>a.scrollPosition,setPixel:_e,getRenderOrigin:()=>a.baseOffset,getContainerSize:()=>a.containerSize,padding:i.mainAxisPadding});if(t.length>0){let c={dom:p,sizeCache:h,scroll:Qe,pool:A,config:i,emitter:v,template:e.item.template,registerMethod(n,f){K.set(n,f)},getMethod(n){return K.get(n)},registerClickHandler(n){X.push(n)},registerKeydownHandler(n){re.push(n)},registerDestroyHandler(n){ie.push(n)},enableListboxRole(){let n=p.content.getAttribute("role");if(!n||n==="list")p.content.setAttribute("role","listbox"),p.content.setAttribute("tabindex","0");L.itemRole="option",L.interactive=!0},setSizeConfig(n){let f=Pe(n,a.totalItems),_=K.get("_setSizeCacheBase");if(_){let D=h.rebuild;Object.assign(h,f),h.rebuild=D,_(f.rebuild)}else Object.assign(h,f)},setScrollSource(n){Q=n.write,de=n.onContentSize,ae=!0},commitScroll(n){se(n)},setBoundedWrap(n,f){be=n,Je=f},cancelScroll(){le?.cancelScroll()},setVirtualTotalFn(n){Y=n,L.ariaTotalFn=n},setIndexMapFn(n){L.indexMap=n},getItems:M,getItem(n){return s?s(n):b[n]},getState(){return a},rebuildSizeCache(){h.rebuild(a.totalItems)},updateContentSize:tt,setRenderFn(n,f){ee=n,me=f},renderIfNeeded(){ve()},forceRender(){ne()},setGetItemFn(n){s=n},setItemStateFn(n){z=n},getItemStateFn(){return z},get rawSizeSpec(){return r},scrollTo:_e,shiftScroll(n){if(j?.shiftBy)j.shiftBy(n);else c.scrollTo(a.scrollPosition+n)},smoothScrollTo(n,f,_,D){if(ze)ze(n,f,Q??void 0,_,D);else c.scrollTo(typeof n==="function"?n():n)},disableDefaultResize(){We=!0},setScrollTarget(n){pe=n},setScrollToPosFn(n){Me=n},setScrollToIndexFn(n){we=n},onScrollFrame:Oe,onScrollIdle:ye,removeItemById(n){if(U)return U(n);let f=b.findIndex((_)=>_.id===n);if(f===-1)return-1;return b.splice(f,1),a.totalItems=b.length,h.rebuild(a.totalItems),te(),f},insertItemAt(n,f){if(V){V(n,f);return}b.splice(f,0,n),a.totalItems=b.length,h.rebuild(a.totalItems),te()},setRemoveItemFn(n){U=n},setInsertItemFn(n){V=n},setUpdateItemFn(n){Z=n},setGetIndexByIdFn(n){fe=n},getRenderedElement(n){let f=K.get("_getRenderedElement");if(f)return f(n);return T.get(n)??null},setNavConfig(n){if(n.ud!==void 0)qe=n.ud;if(n.lr!==void 0)Xe=n.lr;if(n.scrollIndex)Ye=n.scrollIndex;if(n.navigate)Ze=n.navigate;if(n.total)je=n.total},getNavConfig:(()=>{let n={ud:0,lr:0,scrollIndex:null,navigate:null,total:null};return()=>(n.ud=qe,n.lr=Xe,n.scrollIndex=Ye,n.navigate=Ze,n.total=je,n)})()};for(let n of H)if(n.setup)try{n.setup(c)}catch(f){v.emit("error",{error:f instanceof Error?f:Error(String(f)),context:`plugin:setup:${n.name}`})}}let He=i.classPrefix+"--scrolling",ue=!1,Re=e.scroll?.idleTimeout??ce;function et(){if(x.scrollPosition=a.scrollPosition,u)x.direction=a.scrollDirection>0?"right":"left";else x.direction=a.scrollDirection>0?"down":"up";if(v.emit("scroll",x),At(P,a.scrollPosition),m.velocity=P.velocity,m.reliable=P.sampleCount>=Ct,v.emit("velocity:change",m),a.startIndex!==w||a.prevRangeEnd!==B)w=a.startIndex,B=a.prevRangeEnd,W.range.start=a.startIndex,W.range.end=a.prevRangeEnd,v.emit("range:change",W)}function tt(c,n=!0){if(j){if(n)j.refresh(c);return}a.totalSize=c;let f=c+i.mainAxisPadding;if(de?.(f),n)p.content.style[u?"width":"height"]=f+"px"}function te(){let c=ee?a.totalSize:h.getTotalSize();if(tt(c,!ee),j||ee)return;l?.onContentSize(c,v)}function nt(){if(!xe)return;if((Y?Y():b.length)===0)return;let n=xe;xe=null,De.scrollToIndex(n.index,n.alignOrOptions)}function ve(){if(nt(),ee)ee();else Ke(a,h,i.overscan,A,p.content,e.item.template,M,T,L,N,s,z)}function Oe(){if(!ue)ue=!0,p.root.classList.add(He);if(ve(),$e(N.afterScroll,a.scrollPosition,a.scrollDirection),a.scrollPosition!==y)y=a.scrollPosition,et()}function ye(){if(ue)ue=!1,p.root.classList.remove(He);a.scrollDirection=0,It(N.idle),m.velocity=0,m.reliable=!1,v.emit("velocity:change",m),g.scrollPosition=a.scrollPosition,v.emit("scroll:idle",g)}function ne(){if(nt(),a.renderPending=!0,me)me();else Ke(a,h,i.overscan,A,p.content,e.item.template,M,T,L,N,s,z);if($e(N.afterScroll,a.scrollPosition,a.scrollDirection),a.scrollPosition!==y){if(y=a.scrollPosition,et(),k!==null)clearTimeout(k);k=setTimeout(ye,Re)}}let ot=ae?!1:e.scroll?.wheel!==!1,le;if(ae&&be)throw Error("vlist: page() is not compatible with the carousel plugin — bounded page-mode scrolling is not implemented yet.");if(!ae&&(o||be))j=(o??Je)({state:a,sizeCache:h,viewport:p.viewport,content:p.content,isX:u,wheelEnabled:ot,idleTimeout:Re,...pe?{scrollTarget:pe}:{},mainAxisPadding:i.mainAxisPadding,...be?{wrap:be}:{},onFrame:Oe,onIdle:ye}),le=j,Q=(c)=>j.setLogical(c);else{let c=(ae?mt:l.native)({state:a,viewport:p.viewport,isX:u,wheelEnabled:ot,idleTimeout:Re,...pe?{scrollTarget:pe}:{},onFrame:Oe,onIdle:ye});le=c,se=c.commitScroll}ze=le.smoothScrollTo;function Ve(c){let f=c.target.closest("[data-index]");if(!f)return null;let _=parseInt(f.getAttribute("data-index"),10);if(Number.isNaN(_))return null;let D=K.get("_layoutToDataIndex"),q;if(D){let J=D(_);if(J<0)return null;let he=K.get("_getItem");q=he?he(J):s?s(J):b[J]}else q=s?s(_):b[_];if(q===void 0)return null;return{item:q,index:_}}function rt(c){for(let f=0;f<X.length;f++)X[f](c);let n=Ve(c);if(n)v.emit("item:click",{item:n.item,index:n.index,event:c})}function it(c){let n=Ve(c);if(n)v.emit("item:dblclick",{item:n.item,index:n.index,event:c})}function lt(c){let n=Ve(c);if(n)v.emit("item:contextmenu",{item:n.item,index:n.index,event:c})}function st(c){let n=c.target?.tagName;if((n==="INPUT"||n==="TEXTAREA"||n==="SELECT")&&!((c.ctrlKey||c.metaKey)&&(c.key==="f"||c.key==="F")))return;for(let f=0;f<re.length;f++)re[f](c)}if(p.content.addEventListener("click",rt),p.content.addEventListener("dblclick",it),p.content.addEventListener("contextmenu",lt),re.length>0)p.root.addEventListener("keydown",st);let ke=null;if(!We)setTimeout(()=>{if(a.destroyed)return;ke=new ResizeObserver((n)=>{for(let f of n){let{width:_,height:D}=f.contentRect,q=u?_:D,J=u?D:_;if(Math.abs(q-a.containerSize)<1&&Math.abs(J-a.crossSize)<1)continue;if(a.containerSize=q,a.crossSize=J,a.resizeCapacity(q,E,i.overscan),j)j.refresh(h.getTotalSize());ne(),Tt(N.resize,_,D),v.emit("resize",{width:_,height:D})}}),ke.observe(p.viewport)},0);a.resizeCapacity(a.containerSize,E,i.overscan),te(),a.initialized=!0;let ge=null;if(e.defer)ge=requestAnimationFrame(()=>{if(ge=null,!a.destroyed)ve()});else ve();if(!ae)le.attach();let De={get element(){return p.root},get items(){return b},get total(){return Y?Y():b.length},setItems(c){b=[...c],a.totalItems=b.length,h.rebuild(a.totalItems),te(),ne()},appendItems(c){b.push(...c),a.totalItems=b.length,h.rebuild(a.totalItems),te(),ne()},prependItems(c){b.unshift(...c),a.totalItems=b.length,h.rebuild(a.totalItems),te(),ne()},updateItem(c,n){if(Z){if(!Z(c,n))return}else{let f=b.findIndex((_)=>_.id===c);if(f===-1)return;b[f]={...b[f],...n}}ne()},insertItem(c,n){if(V)V(c,n??a.totalItems);else{if(n===void 0)b.push(c);else b.splice(n,0,c);a.totalItems=b.length,h.rebuild(a.totalItems),te()}ne()},removeItem(c){if(U){if(U(c)<0)return}else{let n=b.findIndex((f)=>f.id===c);if(n===-1)return;b.splice(n,1),a.totalItems=b.length,h.rebuild(a.totalItems),te()}ne()},removeItems(c){if(U){let D=0;for(let q of c)if(U(q)>=0)D++;if(D>0)ne();return D}let n=new Set(c),f=b.length;b=b.filter((D)=>!n.has(D.id));let _=f-b.length;if(_>0)a.totalItems=b.length,h.rebuild(a.totalItems),te(),a.renderPending=!0,ve();return _},getItemAt(c){if(L.indexMap)return b[c];return s?s(c):b[c]},getIndexById(c){if(fe)return fe(c);return b.findIndex((n)=>n.id===c)},scrollToIndex(c,n="start"){let f=Y?Y():b.length;if(f===0){xe={index:c,alignOrOptions:n};return}let _=Math.max(0,Math.min(c,f-1)),D=typeof n==="string"?n:n.align??"start",q=typeof n==="object"?n.behavior:void 0,J=typeof n==="object"?n.duration:void 0,he=typeof n==="object"?n.easing:void 0;if(we&&we(_,D,q,J,he)!==!1)return;let Fe=h.getOffset(_),at=h.getSize(_),Ee=a.containerSize,Ot=h.getTotalSize(),ut=i.mainAxisPadding,Vt=Math.max(0,Ot+ut-Ee),oe;if(Me)oe=Me(_,h,Ee,f,D);else{let kt=i.startPadding;switch(D){case"center":oe=kt+Fe-(Ee-at)/2;break;case"end":oe=Fe+at+ut-Ee;break;default:oe=Fe}oe=Math.max(0,Math.min(oe,Vt))}if(q==="smooth")le.smoothScrollTo(oe,J??dt,Q??void 0,he);else _e(oe)},getScrollPosition(){return Qe.getPixelEquivalent()},on:v.on.bind(v),off:v.off.bind(v),destroy(){if(a.destroyed)return;if(a.destroyed=!0,ue)ue=!1,p.root.classList.remove(He);if(ge!==null)cancelAnimationFrame(ge),ge=null;if(k!==null)clearTimeout(k),k=null;le.detach(),ke?.disconnect(),p.content.removeEventListener("click",rt),p.content.removeEventListener("dblclick",it),p.content.removeEventListener("contextmenu",lt),p.root.removeEventListener("keydown",st);let c=[];for(let n of ie)try{n()}catch(f){c.push(f instanceof Error?f:Error(String(f)))}for(let n of H)if(n.destroy)try{n.destroy()}catch(f){c.push(f instanceof Error?f:Error(String(f)))}for(let[,n]of T)n.remove();if(T.clear(),A.clear(),p.root.remove(),v.emit("destroy",void 0),v.clear(),c.length>0)for(let n of c)console.error("vlist: error during destroy:",n)}};for(let[c,n]of K)De[c]=n;return De}var wt=1,_t=2;var Mt=(e)=>1-(1-e)**3;function Ht({getMax:e,onChange:t=()=>{},onFinish:o,axis:l="y",reducedMotion:i}){let u=0,r=0,d=null,S=0,E=0,R=0,I=0,v=0,L=null,H=0,O=0,p=0,F=0,h=400,A=Mt,C=()=>p,a=0.006,b=(x)=>Math.max(0,Math.min(e(),x)),M=(x,g)=>l==="y"?g:x,T=(x,g)=>l==="y"?x:g;function P(x){let g=b(x);if(g!==u)u=g,t(u);return g!==x}function m(){v=0,r=d===null?0:5}function W(x){m(),P(x)}return{get position(){return u},get state(){return r},get velocity(){return v},get active(){return r===3||r===4},begin(x,g,w,B){if(d!==null){m();return}m(),d=x,S=R=M(g,w),E=T(g,w),I=B,r=1},move(x,g,w,B){if(x!==d||r!==1&&r!==2)return!1;let y=M(g,w);if(r===1){let K=Math.abs(y-S),X=Math.abs(T(g,w)-E);if(Math.max(K,X)<6)return!1;if(X>K*1.2)return m(),!1;if(K<X*1.2)return!1;r=2}let k=R-y,N=B-I;if(N>0){let K=Math.max(-3,Math.min(3,k/N));v=N>80?0:K*v<0?K:0.65*K+0.35*v}if(R=y,I=B,P(u+k))v=0;return!0},end(x,g){if(x!==d)return;if(d=null,r===2&&!i()&&g-I<=80&&Math.abs(v)>=0.02)L=null,r=3;else v=0,r=0},cancel:m,reset(){d=null,m()},jump:W,shiftBy(x){O+=x,F+=x,P(u+x)},by(x){m();let g=u;return P(u+x),u!==g},smooth(x,g=400,w=Mt){if(m(),F=0,C=typeof x==="function"?x:()=>x,d!==null||i()||g<=0){P(C());return}h=g,A=w,O=u,p=b(C()+F),L=null,r=4},resize(){m(),P(u)},tick(x){if(r!==3&&r!==4)return;if(L===null){if(L=x,r===4)H=x;return}let g=x-L;if(g<=0)return;if(L=x,g>100){if(r===4)P(b(C()+F)),r=0,o?.();else m();return}if(r===4){p=b(C()+F);let y=Math.min(1,(x-H)/h);if(P(O+(p-O)*A(y)),y===1)r=0,o?.();return}let w=Math.exp(-a*g),B=P(u+v*(1-w)/a);if(v*=w,B||Math.abs(v)<0.02)v=0,r=0}}}var Ae=(e)=>e.pointerType==="touch"||e.pointerType==="pen";function Ge(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 Rt(e){let{state:t,viewport:o,content:l,isX:i,onFrame:u,onIdle:r,mainAxisPadding:d}=e,S=o.parentElement??o,E=o.ownerDocument.defaultView,R=o.ownerDocument,I=E.matchMedia("(prefers-reduced-motion: reduce)"),v=0,L=null,H=null,O=!1,p=!1,F=-1,h=-1,A=null,C=null,a=!1,b=!1,M=!1,T=!1,P,m=new Set;function W(s){let z=t.scrollPosition;if(t.prevScrollPosition=z,t.scrollPosition=t.baseOffset=s,t.scrollDirection=s>z?1:s<z?-1:0,!p)u()}function x(){if(H=null,y.active||y.state===_t||y.state===wt)return;t.scrollDirection=0,r()}function g(){if(!O)return;if(H!==null)clearTimeout(H);H=setTimeout(x,e.idleTimeout||ce)}function w(){if(O&&L===null&&y.active)L=requestAnimationFrame(B)}function B(s){if(L=null,y.tick(s),y.active)w();else g()}let y=Ht({axis:i?"x":"y",getMax:()=>v,reducedMotion:()=>I.matches,onChange:W,onFinish(){let s=P;P=void 0,s?.()}});function k(){if(P=void 0,L!==null)cancelAnimationFrame(L),L=null;if(y.cancel(),H!==null)clearTimeout(H),H=null}function N(){if(k(),y.reset(),T&&A!==null&&o.hasPointerCapture(A))o.releasePointerCapture(A);T=!1,m.clear(),A=C=null,a=b=M=!1,g()}function K(s){if(!Ae(s))return;if(s.isPrimary){if(m.size)N();m.clear()}if(m.add(s.pointerId),m.size>1){M=!0,k();return}if(!(s.target instanceof Element)||Ge(s.target)){k();return}A=s.pointerId,a=!1,b=y.active,C=null,k(),y.begin(s.pointerId,s.clientX,s.clientY,s.timeStamp)}function X(s){if(!Ae(s)||s.target instanceof Node&&o.contains(s.target))return;if(s.isPrimary&&m.size)N();else if(m.size)m.add(s.pointerId),M=!0,k()}function re(s){if(!Ae(s)||M)return;if(y.move(s.pointerId,s.clientX,s.clientY,s.timeStamp)){if(a=!0,!T)o.setPointerCapture(s.pointerId),T=!0;if(s.cancelable)s.preventDefault()}}function ie(s){if(!Ae(s)||!m.has(s.pointerId))return;let z=s.type==="pointercancel";if(z)k();if(A===s.pointerId){if(!z&&!M&&(a||b))C=s.pointerId;if(T&&o.hasPointerCapture(s.pointerId))o.releasePointerCapture(s.pointerId);T=!1,A=null,a=b=!1}if(y.end(s.pointerId,s.timeStamp),m.delete(s.pointerId),!m.size){if(M||z)y.reset();M=!1}w(),g()}function Y(s){let z=s.pointerId;if(s.detail!==0&&C!==null&&(z===C||z===void 0))C=null,s.preventDefault(),s.stopImmediatePropagation()}function Q(s){if(s.ctrlKey||s.defaultPrevented||!(s.target instanceof Element)||Ge(s.target))return;let z=s.deltaMode===1?16:s.deltaMode===2?t.containerSize:1,U=i?s.deltaX:s.deltaY,V=i?s.deltaY:s.deltaX,Z=i?o.scrollHeight>o.clientHeight:o.scrollWidth>o.clientWidth;if(Z&&Math.abs(V)>Math.abs(U))return;if(Z&&V!==0)if(s.preventDefault(),i)o.scrollTop+=V*z;else o.scrollLeft+=V*z;let fe=i&&!Z&&U===0?V:U;if(k(),y.by(fe*z))s.preventDefault();g()}function de(s){if(s.defaultPrevented||s.ctrlKey||s.metaKey||s.altKey||!(s.target instanceof Element)||Ge(s.target))return;if((s.key===" "||s.key==="Enter")&&s.target.closest("button,summary,a,input"))return;let z=e.sizeCache,U=z.getSize(z.indexAtOffset(y.position)),V;if(s.key===(i?"ArrowRight":"ArrowDown"))V=y.position+U;if(s.key===(i?"ArrowLeft":"ArrowUp"))V=y.position-U;if(s.key==="PageDown"||s.key===" ")V=y.position+t.containerSize*(s.shiftKey&&s.key===" "?-1:1);if(s.key==="PageUp")V=y.position-t.containerSize;if(s.key==="Home")V=0;if(s.key==="End")V=v;if(V!==void 0)s.preventDefault(),ee(V)}function se(){if(R.hidden)N()}function ee(s){let z=y.position;if(k(),y.jump(s),z===y.position)W(y.position);g()}function me(s){let z=F!==t.containerSize||h!==t.crossSize,U=s!==t.totalSize||z;if(F=t.containerSize,h=t.crossSize,t.totalSize=s,v=Math.max(0,s+d-t.containerSize),U){if(p=!0,z)k(),y.resize();else y.shiftBy(0);W(y.position),p=!1}}return{setLogical:ee,refresh:me,shiftBy(s){if(t.totalSize=e.sizeCache.getTotalSize(),v=Math.max(0,t.totalSize+d-t.containerSize),y.shiftBy(s),!y.active)g()},cancelScroll(){k(),g()},getLogical:()=>t.scrollPosition,getMaxLogical:()=>v,smoothScrollTo(s,z,U,V=Te,Z){if(k(),y.smooth(s,z,V),P=Z,!y.active)P=void 0,Z?.(),g();else w()},attach(){if(O)return;if(O=!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",K),E.addEventListener("pointerdown",X),o.addEventListener("pointermove",re,{passive:!1}),E.addEventListener("pointerup",ie),E.addEventListener("pointercancel",ie),o.addEventListener("click",Y,!0),e.wheelEnabled)o.addEventListener("wheel",Q,{passive:!1});S.addEventListener("keydown",de),E.addEventListener("blur",N),R.addEventListener("visibilitychange",se),I.addEventListener("change",N),w()},detach(){if(O=!1,N(),H!==null)clearTimeout(H),H=null;o.removeEventListener("pointerdown",K),E.removeEventListener("pointerdown",X),o.removeEventListener("pointermove",re),E.removeEventListener("pointerup",ie),E.removeEventListener("pointercancel",ie),o.removeEventListener("click",Y,!0),o.removeEventListener("wheel",Q),S.removeEventListener("keydown",de),E.removeEventListener("blur",N),R.removeEventListener("visibilitychange",se),I.removeEventListener("change",N),o.style.overflowX=o.style.overflowY=o.style.touchAction=o.style.overflowAnchor="",l.style.overflow=l.style.overflowAnchor=""}}}function Gn(e,t=[]){return zt(e,t,Rt)}export{Gn as createVList};
package/dist/types.d.ts CHANGED
@@ -291,8 +291,11 @@ export interface ScrollConfig {
291
291
  * Useful for carousels, wizards, and circular navigation.
292
292
  */
293
293
  wrap?: boolean;
294
- /** Options consumed by vlist/config; use scrollbar() with the core factory. */
295
- scrollbar?: ScrollbarOptions;
294
+ /** Native visibility: "none" hides the browser scrollbar, "native" keeps it.
295
+ * Options are consumed by vlist/config; with the low-level factory install
296
+ * scrollbar() explicitly. The synthetic entry rejects both string values.
297
+ */
298
+ scrollbar?: "native" | "none" | ScrollbarOptions;
296
299
  /** External scroll element for window scrolling */
297
300
  element?: Window;
298
301
  /** Scroll idle detection timeout in ms (default: 150) */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vlist",
3
- "version": "3.0.0-next.1",
3
+ "version": "3.0.0-next.2",
4
4
  "description": "Lightweight, high-performance virtual list with zero dependencies",
5
5
  "author": {
6
6
  "name": "Floor IO",