vlist-solidjs 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* SolidJS primitives for vlist - lightweight virtual scrolling
|
|
3
3
|
*/
|
|
4
4
|
import type { Accessor } from "solid-js";
|
|
5
|
-
import type { VListConfig, VListItem, VListEvents, EventHandler } from "
|
|
6
|
-
import { type VList } from "
|
|
5
|
+
import type { VListConfig, VListItem, VListEvents, EventHandler } from "vlist";
|
|
6
|
+
import { type VList } from "vlist";
|
|
7
|
+
export type { VListItem, VListEvents, VList, VListConfig, ItemConfig, ItemTemplate, EventHandler, Unsubscribe, } from "vlist";
|
|
7
8
|
export type UseVListConfig<T extends VListItem = VListItem> = Omit<VListConfig<T>, "container">;
|
|
8
9
|
export interface CreateVListReturn<T extends VListItem = VListItem> {
|
|
9
10
|
setRef: (el: HTMLDivElement) => void;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{onMount as V,onCleanup as X,createEffect as $,on as j}from"solid-js";import{vlist as B}from"@floor/vlist";import{withAsync as O,withAutoSize as P,withGrid as W,withMasonry as x,withGroups as y,withSelection as U,withScrollbar as G,withScale as A,withSnapshots as z,withPage as H}from"@floor/vlist";function R(J){let I=null,D=null,K=(k)=>{I=k},N=()=>D;return V(()=>{if(!I)return;let k=J(),q=B({...k,container:I});if(k.scroll?.element===window)q=q.use(H());let L=k.item,T=k.orientation==="horizontal",Y=T?L.width!=null:L.height!=null,Z=T?L.estimatedWidth!=null:L.estimatedHeight!=null;if(!Y&&Z)q=q.use(P());if(k.adapter)q=q.use(O({adapter:k.adapter,...k.loading&&{loading:k.loading}}));if(k.layout==="grid"&&k.grid)q=q.use(W(k.grid));if(k.layout==="masonry"&&k.masonry)q=q.use(x(k.masonry));if(k.groups){let F=k.groups,_=typeof F.headerHeight==="function"?F.headerHeight("",0):F.headerHeight;q=q.use(y({getGroupForIndex:F.getGroupForIndex,headerHeight:_,headerTemplate:F.headerTemplate,...F.sticky!==void 0&&{sticky:F.sticky}}))}if((k.selection?.mode||"none")!=="none")q=q.use(U(k.selection));else q=q.use(U({mode:"none"}));q=q.use(A());let Q=k.scroll?.scrollbar||k.scrollbar;if(Q!=="none"){let F=typeof Q==="object"?Q:{};q=q.use(G(F))}q=q.use(z()),D=q.build()}),$(j(()=>J().items,(k)=>{if(D&&k)D.setItems(k)})),X(()=>{if(D)D.destroy(),D=null}),{setRef:K,instance:N}}function m(J,I,D){V(()=>{let K=J();if(!K)return;let N=K.on(I,D);X(()=>{N()})})}export{m as createVListEvent,R as createVList};
|
|
1
|
+
import{onMount as er,onCleanup as tr,createEffect as yl,on as xl}from"solid-js";var cr=2,mr=(e=0)=>({velocity:0,sampleCount:0}),hr=(e,l)=>{let r=performance.now(),t=e._lt??r,s=e._lp??l,i=r-t;if(e._lp=l,e._lt=r,i===0)return e.sampleCount=Math.min(e.sampleCount+1,5),e;if(i>100)return e.velocity=0,e.sampleCount=1,e;return e.velocity=Math.abs(l-s)/i,e.sampleCount=Math.min(e.sampleCount+1,5),e},gr=(e,l)=>{let r=l;return{getOffset:(t)=>t*e,getSize:(t)=>e,indexAtOffset:(t)=>{if(r===0||e===0)return 0;return Math.max(0,Math.min(Math.floor(t/e),r-1))},getTotalSize:()=>r*e,getTotal:()=>r,rebuild:(t)=>{r=t},isVariable:()=>!1}},pr=(e,l)=>{let r=l,t=new Float64Array(0),s=(o)=>{r=o,t=new Float64Array(o+1),t[0]=0;for(let u=0;u<o;u++)t[u+1]=t[u]+e(u)};s(l);let i=(o)=>{if(r===0)return 0;if(o<=0)return 0;if(o>=t[r])return r-1;let u=0,a=r-1;while(u<a){let d=u+a+1>>>1;if(t[d]<=o)u=d;else a=d-1}return u};return{getOffset:(o)=>{if(o<=0)return 0;if(o>=r)return t[r];return t[o]},getSize:(o)=>e(o),indexAtOffset:(o)=>i(o),getTotalSize:()=>t[r]??0,getTotal:()=>r,rebuild:(o)=>s(o),isVariable:()=>!0}},qe=(e,l)=>{if(typeof e==="number")return gr(e,l);return pr(e,l)},vr=(e,l,r,t)=>{if(t===0)return 0;if(!e.isVariable())return Math.ceil(r/e.getSize(0));let s=0,i=0,o=l;while(o<t&&i<r)i+=e.getSize(o),s++,o++;return Math.max(1,s)},wr=()=>{let e={},l=(t,s)=>{if(!e[t])e[t]=new Set;return e[t].add(s),()=>r(t,s)},r=(t,s)=>{e[t]?.delete(s)};return{on:l,off:r,emit:(t,s)=>{e[t]?.forEach((i)=>{try{i(s)}catch(o){console.error(`[vlist] Error in event handler for "${String(t)}":`,o)}})},clear:(t)=>{if(t)delete e[t];else for(let s in e)delete e[s]}}},Sr=(e)=>{if(typeof e==="string"){let l=document.querySelector(e);if(!l)throw Error(`[vlist] Container not found: ${e}`);return l}return e},ke=(e,l)=>{let r=document.createElement("div");if(r.className=e,l)r.style.cssText=l;return r},yr=(e,l,r,t,s)=>{let i=t,o=ke(l);if(i)o.classList.add(`${l}--horizontal`);if(s!==!1)o.setAttribute("tabindex","0");let u=ke(`${l}-viewport`,i?"overflow-x:auto;overflow-y:hidden;height:100%;width:100%":"overflow:auto;height:100%;width:100%");u.setAttribute("tabindex","-1");let a=ke(`${l}-content`,i?"position:relative;height:100%":"position:relative;width:100%"),d=ke(`${l}-items`,i?"position:relative;height:100%":"position:relative;width:100%");if(d.setAttribute("role","listbox"),r)d.setAttribute("aria-label",r);if(i)d.setAttribute("aria-orientation","horizontal");let m=ke(`${l}-live`,"position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0");return m.setAttribute("aria-live","polite"),m.setAttribute("aria-atomic","true"),m.setAttribute("role","status"),a.appendChild(d),u.appendChild(a),o.appendChild(m),o.appendChild(u),e.appendChild(o),{root:o,viewport:u,content:a,items:d,liveRegion:m}},xr=(e=100)=>{let l=[];return{acquire:()=>{let r=l.pop();if(r)return r;let t=document.createElement("div");return t.setAttribute("role","option"),t},release:(r)=>{if(l.length<e)r.className="",r.textContent="",r.removeAttribute("style"),r.removeAttribute("data-index"),r.removeAttribute("data-id"),l.push(r)},clear:()=>{l.length=0}}},br=(e,l,r,t,s)=>{if(t===0||l===0){s.start=0,s.end=-1;return}let i=r.indexAtOffset(e),o=r.indexAtOffset(e+l);if(o<t-1)o++;s.start=Math.max(0,i),s.end=Math.min(t-1,Math.max(0,o))},zr=(e,l,r,t)=>{t.start=Math.max(0,e.start-l),t.end=Math.min(r-1,e.end+l)},Ir=(e,l,r,t,s,i=0)=>{if(t===0)return 0;let o=Math.max(0,Math.min(e,t-1)),u=l.getOffset(o),a=l.getSize(o),d=l.getTotalSize(),m=Math.max(0,d+i-r),z;switch(s){case"center":z=u-(r-a)/2;break;case"end":z=i>0&&u+a>=d?m:u-r+a;break;default:z=u}return Math.max(0,Math.min(z,m))},Be={top:0,right:0,bottom:0,left:0},$e=(e)=>{if(e==null)return Be;if(typeof e==="number")return e===0?Be:{top:e,right:e,bottom:e,left:e};if(e.length===2){let[i,o]=e;return i===0&&o===0?Be:{top:i,right:o,bottom:i,left:o}}let[l,r,t,s]=e;return l===0&&r===0&&t===0&&s===0?Be:{top:l,right:r,bottom:t,left:s}},ut=(e,l)=>l?e.left+e.right:e.top+e.bottom,_t=(e,l)=>l?e.top+e.bottom:e.left+e.right,ft=(e,l,r)=>{let t=Array.from(l).sort((o,u)=>o-u);if(t.length<=1)return;let s=[];for(let o=0;o<t.length;o++){let u=r(t[o]);if(u)s.push(u)}if(s.length<=1)return;let i=e.firstChild;for(let o=0;o<s.length;o++){let u=s[o];if(u===i)i=i.nextSibling;else e.insertBefore(u,i)}},Cr=(e,l)=>{let{dom:r,emitter:t,resolvedConfig:s,rawConfig:i,rendered:o,pool:u,sharedState:a,isHorizontal:d,classPrefix:m,contentSizeHandlers:z,idleHandlers:c,afterScroll:v,clickHandlers:P,keydownHandlers:T,resizeHandlers:R,destroyHandlers:$,methods:_,onScrollFrame:Z,resizeObserver:q,renderRange:W,afterRenderBatch:V}=l;return{get dom(){return r},get sizeCache(){return e.hc},get emitter(){return t},get config(){return s},get rawConfig(){return i},adjustScrollPosition(I){if(e.mp===0)return I;let E=d?e.cw:e.ch,X=e.hc.getTotalSize(),j=Math.max(0,X-E),M=Math.max(0,X+e.mp-E);if(I>=j)return M;return Math.min(I,M)},get renderer(){return{render:(I,E,X,j,M)=>{e.ss=X,e.fi=j,e.ffn()},updateItemClasses:(I,E,X)=>{e.uic(I,E,X)},updatePositions:()=>{},updateItem:()=>{},getElement:(I)=>o.get(I)??null,clear:()=>{},destroy:()=>{}}},set renderer(I){},get dataManager(){return e.dm},set dataManager(I){e.dm=I},get scrollController(){return e.sc},set scrollController(I){e.sc=I},state:a,getContainerWidth(){return e.cw},afterScroll:v,idleHandlers:c,afterRenderBatch:V,clickHandlers:P,keydownHandlers:T,resizeHandlers:R,contentSizeHandlers:z,destroyHandlers:$,methods:_,replaceTemplate(I){e.at=I},replaceRenderer(I){},replaceDataManager(I){e.dm=I},replaceScrollController(I){e.sc=I},getItemsForRange(I){let{dm:E,it:X}=e,j=[];for(let M=I.start;M<=I.end;M++){let H=E?E.getItem(M):X[M];if(H)j.push(H)}return j},getAllLoadedItems(){let I=e.dm;if(I){let E=I.getTotal(),X=[];for(let j=0;j<E;j++){let M=I.getItem(j);if(M)X.push(M)}return X}return[...e.it]},getVirtualTotal(){return e.vtf()},getCachedCompression(){let I=e.hc;return{isCompressed:!1,actualSize:I.getTotalSize(),virtualSize:I.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:e.ls,totalItems:e.vtf(),containerSize:e.ch,rangeStart:W.start,compression:a.cachedCompression?.state}},renderIfNeeded(){e.rfn()},forceRender(){e.ffn()},invalidateRendered(){for(let[,I]of o)I.remove(),u.release(I);o.clear()},getRenderFns(){return{renderIfNeeded:e.rfn,forceRender:e.ffn}},setRenderFns(I,E){e.rfn=I,e.ffn=E},setVirtualTotalFn(I){e.vtf=I},rebuildSizeCache(I){e.hc.rebuild(I??e.vtf())},setSizeConfig(I){if(e.hc=qe(I,e.vtf()),e.gp>0){let E=e.hc.getTotalSize,X=e.gp;e.hc.getTotalSize=()=>{let j=E();return j>0?j-X:0}}},updateContentSize(I){let E=`${I+e.mp}px`;if(d)r.content.style.width=E;else r.content.style.height=E},updateCompressionMode(){for(let I=0;I<z.length;I++)z[I]()},setVisibleRangeFn(I){e.gvr=I},setScrollToPosFn(I){e.gsp=I},getScrollToPos(I,E,X,j){return e.gsp(I,e.hc,E,X,j)},setPositionElementFn(I){e.pef=I},setScrollFns(I,E){e.sgt=I,e.sst=(X)=>{E(X),Z()}},setScrollTarget(I){e.st.removeEventListener("scroll",Z),e.st=I,e.st.addEventListener("scroll",Z,{passive:!0})},getScrollTarget(){return e.st},setContainerDimensions(I){e.gcw=I.width,e.gch=I.height,e.cw=I.width(),e.ch=I.height(),a.viewportState.containerSize=d?e.cw:e.ch},disableViewportResize(){if(e.vre)e.vre=!1,q.unobserve(r.viewport)},disableWheelHandler(){if(e.wh)r.viewport.removeEventListener("wheel",e.wh),e.wh=null},getStripeIndexFn(){return e.sif},setStripeIndexFn(I){e.sif=I},getItemToScrollIndexFn(){return e.i2s},setItemToScrollIndexFn(I){e.i2s=I},setUpdateItemClassesFn(I){e.uic=I}}},Mr=(e,l,r)=>{let{rendered:t,itemState:s,applyTemplate:i,updateContentSize:o}=l,u=()=>{e.hc.rebuild(e.vtf()),o(),r.updateCompressionMode(),e.ffn()},a=()=>e.it.length;return{getState:()=>({total:a(),cached:a(),isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:a,getCached:a,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(d)=>e.it[d],isItemLoaded:(d)=>d>=0&&d<a()&&e.it[d]!==void 0,getItemsInRange:(d,m)=>{let z=[];for(let c=Math.max(0,d),v=Math.min(m,a()-1);c<=v;c++)z.push(e.it[c]);return z},setTotal:()=>{},setItems:(d,m=0,z)=>{if(m===0&&(z!==void 0||a()===0))e.it=d;else{let c=m+d.length;if(a()<c)e.it.length=c;for(let v=0;v<d.length;v++)e.it[m+v]=d[v]}if(e.ii)u()},updateItem:(d,m)=>{let z=e.it;if(d<0||d>=z.length)return!1;let c=z[d];if(!c)return!1;z[d]={...c,...m};let v=t.get(d);if(v)i(v,e.at(z[d],d,s)),v.dataset.id=String(z[d].id);return!0},removeItem:(d)=>{let m=typeof d==="number"?d:e.it.findIndex((z)=>z.id===d);if(m<0||m>=e.it.length)return!1;if(e.it.splice(m,1),e.ii)u();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{e.it=[]},reset:()=>{if(e.it=[],e.ii)e.hc.rebuild(0),o(),e.ffn()}}},Tr=(e,l)=>{let{dom:r,classPrefix:t}=l;return{getScrollTop:()=>e.sgt(),scrollTo:(s)=>{e.sst(s),e.ls=s,e.rfn()},scrollBy:(s)=>{let i=e.sgt()+s;e.sst(i),e.ls=i,e.rfn()},isAtTop:()=>e.ls<=2,isAtBottom:(s=2)=>e.sab(s),getScrollPercentage:()=>{let s=e.hc.getTotalSize(),i=Math.max(0,s-e.ch);return i>0?e.ls/i:0},getVelocity:()=>e.vt.velocity,isTracking:()=>e.vt.sampleCount>=2,isScrolling:()=>r.root.classList.contains(`${t}--scrolling`),updateConfig:()=>{},enableCompression:()=>{e.sic=!0},disableCompression:()=>{e.sic=!1},isCompressed:()=>e.sic,isWindowMode:()=>!1,updateContainerHeight:(s)=>{e.ch=s},destroy:()=>{}}},Ft=(e,l,r,t,s=0,i=0)=>{let o=l.getOffset(e),u=l.getSize(e),a=o+s,d=a+u,m=r+t;if(a<r)return Math.max(0,o);if(d>m)return d+i-t;return r},Dt=(e,l,r,t,s=0,i=0,o,u,a)=>{if(!(o!=null&&o.isCompressed&&o.ratio!==1))return Ft(e,l,r,t,s,i);let d=u,{virtualSize:m}=o,z=l.getSize(Math.max(0,e)),c=t-s-i,v=Math.max(1,Math.floor(c/z)),P=m/d;if(a){if(e>=a.start+v){let $=c/z,_=e+1-$;return Math.max(0,_*P)}if(e<=a.start)return Math.max(0,e*P);return r}let T=r/m*d,R=T+v;if(e>=R){let $=c/z,_=e+1-$;return Math.max(0,_*P)}if(e<T)return Math.max(0,e*P);return r},Lr=(e,l,r,t,s,i,o,u,a,d,m,z,c)=>{let v=`${r}-item--focused`,P=!1,T=null,R=null,$=null,_=null,Z=!1,q=()=>{if(Z)return;Z=!0,T=a.get("_getNavTotal")??null,R=a.get("_getNavDelta")??null,$=a.get("_navigate")??null,_=a.get("_scrollItemIntoView")??null},W=()=>{return q(),T?T():e.vtf()},V=()=>{return q(),R?R():{ud:1,lr:0,cols:0}};a.set("_getFocusedIndex",()=>P?e.fi:-1);let I=(w)=>{if(l.root.setAttribute("aria-activedescendant",`${t}-item-${w}`),q(),_)_(w);else{let g=s?e.cw:e.ch,x=e.i2s(w),y=Ft(x,e.hc,e.ls,g,i,o);if(y!==e.ls)e.sst(y),e.ls=e.sgt()}e.ffn()},E=(w)=>{e.fi=w,P=!0,I(w)},X=(w,g)=>{if(e.fi=w,g)P=!0;let x=e.dm?e.dm.getItem(w):e.it[w];if(x&&e.ss.has(x.id))e.ss.clear();else if(e.ss.clear(),x)e.ss.add(x.id);I(w)},j=(w,g,x)=>{let y=w;while(y>=0&&y<x){let D=e.dm?e.dm.getItem(y):e.it[y];if(!D||!D.__groupHeader)return y;y+=g}y=w-g;while(y>=0&&y<x){let D=e.dm?e.dm.getItem(y):e.it[y];if(!D||!D.__groupHeader)return y;y-=g}return w},M=()=>{if(e.id)return;if(!l.root.matches(":focus-visible"))return;let w=W();if(w===0)return;let g=e.fi>=0?Math.min(e.fi,w-1):0;g=j(g,1,w),E(g)};l.root.addEventListener("focusin",M);let H=(w)=>{if(e.id)return;let g=w.relatedTarget;if(g&&l.root.contains(g))return;if(P=!1,e.fi>=0)d.get(e.fi)?.classList.remove(v);l.root.removeAttribute("aria-activedescendant")};l.root.addEventListener("focusout",H),m.push((w)=>{if(e.id)return;let g=W();if(g===0)return;let x=e.fi,y=x;if(w.key===" "||w.key==="Enter"){if(x>=0){let D=e.dm?e.dm.getItem(x):e.it[x];if(D&&!D.__groupHeader)X(x,!0)}w.preventDefault();return}if(q(),$)switch(w.key){case"ArrowUp":case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"PageUp":case"PageDown":case"Home":case"End":y=$(x,w.key,g);break;default:return}else{let{ud:D,lr:Y}=V();switch(w.key){case"ArrowUp":y=x-D;break;case"ArrowDown":y=x+D;break;case"ArrowLeft":if(!Y)return;y=x-Y;break;case"ArrowRight":if(!Y)return;y=x+Y;break;case"PageUp":case"PageDown":{let B=e.hc.getSize(e.i2s(Math.max(0,x))),Q=Math.max(D,Math.floor((s?e.cw:e.ch)/B)*D);y=w.key==="PageUp"?x-Q:x+Q;break}case"Home":y=0;break;case"End":y=g-1;break;default:return}if(y<0)y=u?g-1:0;else if(y>=g)y=u?0:g-1}if(w.preventDefault(),y=j(y,y>=x?1:-1,g),y!==x)E(y)}),z.push((w)=>{if(e.id)return;let g=w.target.closest("[data-index]");if(!g)return;let x=parseInt(g.dataset.index??"-1",10);if(x<0)return;let y=e.dm?.getItem(x)??e.it[x];if(!y||y.__groupHeader)return;P=!1,l.root.focus(),X(x,!1)}),c.push(()=>{l.root.removeEventListener("focusin",M),l.root.removeEventListener("focusout",H)})},bt=200,He=50,$r=50,Ar=12,Rr=2,it=16000000,kr="x",Hr=20,Wt="_isPlaceholder",Le="__placeholder_",Ge=(e,l,r)=>{if(String(r).startsWith(Le))return!1;let t=Le+l;if(e.has(t))return e.delete(t),e.add(r),!0;return!1},Er=(e)=>({selected:new Set(e??[]),focusedIndex:-1,focusVisible:!1}),Fe=(e,l,r)=>{if(r==="none")return e;let t=new Set(e.selected);if(r==="single"){if(t.clear(),l.length>0)t.add(l[0])}else for(let s of l)t.add(s);return{...e,selected:t}},Pt=(e,l)=>{let r=new Set(e.selected);for(let t of l)r.delete(t);return{...e,selected:r}},Ee=(e,l,r)=>{if(r==="none")return e;if(e.selected.has(l))return Pt(e,[l]);else return Fe(e,[l],r)},zt=(e,l,r)=>{if(r!=="multiple")return e;return{...e,selected:new Set(l.map((t)=>t.id))}},It=(e)=>({...e,selected:new Set}),_e=(e,l)=>{return e.focusedIndex=l,e},at=(e,l,r=!1,t=1)=>{if(l===0)return e;let s=e.focusedIndex-t;if(s<0)s=r?l-1:0;return e.focusedIndex=s,e},nt=(e,l,r=!1,t=1)=>{if(l===0)return e;let s=e.focusedIndex+t;if(s>=l)s=r?0:l-1;return e.focusedIndex=s,e},_r=(e,l)=>{if(l===0)return e;return e.focusedIndex=0,e},Fr=(e,l)=>{if(l===0)return e;return e.focusedIndex=l-1,e},Ct=(e,l,r,t)=>{if(l===0)return e;let s=t==="up"?e.focusedIndex-r:e.focusedIndex+r;return s=Math.max(0,Math.min(l-1,s)),e.focusedIndex=s,e},Mt=(e)=>{return Array.from(e.selected)},Tt=(e,l)=>{let r=[];for(let t of e.selected){let s=l(t);if(s)r.push(s)}return r},st=(e,l,r,t,s)=>{if(s!=="multiple")return e;let i=Math.min(r,t),o=Math.max(r,t),u=[];for(let a=i;a<=o;a++){let d=l[a];if(d)u.push(d.id)}return Fe(e,u,s)},Nt=(e)=>e<0.5?2*e*e:-1+(4-2*e)*e,je=(e)=>{let l=typeof e==="object"&&e?e:null;return{align:typeof e==="string"?e:l?.align??"start",behavior:l?.behavior??"auto",duration:l?.duration??300}},ct=(e,l)=>{let r=null,t=()=>{if(r!==null)cancelAnimationFrame(r),r=null};return{animateScroll:(s,i,o)=>{if(t(),Math.abs(i-s)<1){e.scrollTo(i);return}let u=performance.now(),a=(d)=>{let m=d-u,z=Math.min(m/o,1),c=s+(i-s)*Nt(z);if(e.scrollTo(c),l(),z<1)r=requestAnimationFrame(a);else r=null};r=requestAnimationFrame(a)},cancelScroll:t}},Dr=(e,l,r,t,s,i,o,u,a,d,m,z,c,v,P,T,R,$)=>{let _=(h)=>{{if(!Array.isArray(h)){console.warn("[vlist] setItems() expects an array, got:",typeof h);return}if(h.length>0&&h[0]&&!("id"in h[0]))console.warn('[vlist] Items must have an "id" property. First item:',h[0]);let b=Math.min(h.length,1e4),A=new Set;for(let C=0;C<b;C++){let O=h[C];if(O&&"id"in O){if(A.has(O.id)){console.warn(`[vlist] Duplicate item ID "${O.id}" at index ${C}. updateItem() and removeItem() will only match the first occurrence.`);break}A.add(O.id)}}}D(),a.dataManager.setItems(h,0,h.length)},Z=(h)=>{let b=d&&e.sab(2);if(a.dataManager.setItems(h,e.it.length),b&&e.it.length>0){let A=e.gsp(e.it.length-1,e.hc,e.ch,e.it.length,"end");e.sst(A),e.ls=A,e.rfn()}},q=(h)=>{let b=d?e.sgt():0,A=d?e.hc.getTotalSize():0,C=[...e.it];if(a.dataManager.clear(),a.dataManager.setItems([...h,...C],0),d){let O=e.hc.getTotalSize()-A;if(O>0)e.sst(b+O),e.ls=b+O}},W=null,V=null,I=null,E=!1,X=()=>{if(E)return;E=!0,W=i.get("_updateRenderedItem")??null,V=i.get("_getSelectedIds")??null,I=i.get("_getFocusedIndex")??null},j=(h,b)=>{{let C=e.vtf();if(h<0||h>=C)console.warn(`[vlist] updateItem() index ${h} is out of range (0–${C-1}).`)}if(a.dataManager.updateItem(h,b),X(),!W)return;let A=a.dataManager.getItem(h);if(A){let C=(V?V():e.ss).has(A.id),O=(I?I():e.fi)===h;W(h,A,C,O)}},M=!1,H=(h)=>{let b=typeof document<"u"?document.activeElement:null,A=b&&l.items.contains(b)?parseInt(b.dataset?.index??"-1",10):-1;if(!a.dataManager.removeItem(h))return console.warn(`[vlist] removeItem() could not find item with id "${h}".`),!1;if(r.emit("data:change",{type:"remove",id:h}),a.forceRender(),!M){let C=a.dataManager;if(typeof C.ensureRange==="function")M=!0,queueMicrotask(()=>{M=!1;let O=a.dataManager.getTotal(),{start:N,end:J}=a.state.viewportState.renderRange;if(O>0&&J>=N)C.ensureRange(N,J).catch(()=>{})})}if(A>=0){let C=e.vtf();if(C>0)t.get(Math.min(A,C-1))?.focus()}return!0},w=(h)=>{return a.dataManager.getItem(h)},g=(h)=>{return a.dataManager.getIndexById?.(h)??-1},x=async(h)=>{if(a.dataManager.reload)await a.dataManager.reload()},y=null,D=()=>{if(y!==null)cancelAnimationFrame(y),y=null},Y=(h,b,A,C)=>{if(D(),Math.abs(b-h)<1){e.sst(b),e.ls=b,e.rfn();return}let O=performance.now(),N=(J)=>{let te=J-O,F=Math.min(te/A,1),K=C?C():b,ee=h+(K-h)*Nt(F);if(e.sst(ee),e.ls=ee,e.rfn(),F<1)y=requestAnimationFrame(N);else y=null};y=requestAnimationFrame(N)},B=(h,b)=>{{let F=e.vtf();if(F>0&&(h<0||h>=F))console.warn(`[vlist] scrollToIndex(${h}) is out of range (0–${F-1}).`)}let{align:A,behavior:C,duration:O}=je(b),N=e.vtf(),J=h;if(m&&N>0)J=(J%N+N)%N;let te=e.gsp(J,e.hc,e.ch,N,A);if(C==="smooth"){let F=J,K=A;Y(e.sgt(),te,O,()=>e.gsp(F,e.hc,e.ch,e.vtf(),K))}else D(),e.sst(te)},Q=()=>e.sgt(),S=(h,b)=>{return r.on(h,b)},p=(h,b)=>{r.off(h,b)},n=()=>{if(e.id)return;if(e.id=!0,a.state.isDestroyed=!0,l.items.removeEventListener("click",z),l.items.removeEventListener("dblclick",c),l.root.removeEventListener("keydown",v),e.st.removeEventListener("scroll",P),T.disconnect(),R(),e.wh)l.viewport.removeEventListener("wheel",e.wh);$();let h=[];for(let b=0;b<u.length;b++)try{u[b]()}catch(A){h.push(A instanceof Error?A:Error(String(A)))}for(let b of o)if(b.destroy)try{b.destroy()}catch(A){h.push(A instanceof Error?A:Error(String(A)))}D();for(let[,b]of t)b.remove(),s.release(b);t.clear(),s.clear(),r.emit("destroy",void 0);for(let b of h)r.emit("error",{error:b,context:"destroy"});r.clear(),l.root.remove()},f=(h,b)=>i.has(h)?i.get(h):b,L={get element(){return l.root},get items(){let h=i.get("_getItems");return h?h():e.it},get total(){let h=i.get("_getTotal");return h?h():e.vtf()},setItems:f("setItems",_),appendItems:f("appendItems",Z),prependItems:f("prependItems",q),updateItem:f("updateItem",j),removeItem:f("removeItem",H),reload:f("reload",x),getItemAt:w,getIndexById:g,scrollToIndex:f("scrollToIndex",B),cancelScroll:f("cancelScroll",D),getScrollPosition:f("getScrollPosition",Q),on:S,off:p,destroy:n};for(let[h,b]of i){if(h.charCodeAt(0)===95||h==="setItems"||h==="appendItems"||h==="prependItems"||h==="updateItem"||h==="removeItem"||h==="reload"||h==="scrollToIndex"||h==="scrollToItem"||h==="cancelScroll"||h==="getScrollPosition")continue;L[h]=b}return L},Wr=3,Pr="vlist",Nr=150,Or=16000000,Vr=0,Ot=(e)=>{if(!e.container)throw Error("[vlist] Container is required");if(!e.item)throw Error("[vlist] item configuration is required");let l=e.orientation==="horizontal",r=l?"width":"height",t=l?"estimatedWidth":"estimatedHeight",s=l?e.item.width:e.item.height,i=l?e.item.estimatedWidth:e.item.estimatedHeight;if(s==null&&i==null)throw Error(`[vlist] item.${r} or item.${t} is required${l?" when orientation is 'horizontal'":""}`);if(s!=null){if(typeof s==="number"&&s<=0)throw Error(`[vlist] item.${r} must be a positive number`);if(typeof s!=="number"&&typeof s!=="function")throw Error(`[vlist] item.${r} must be a number or a function (index) => number`)}else if(i!=null){if(typeof i!=="number"||i<=0)throw Error(`[vlist] item.${t} must be a positive number`)}if(!e.item.template)throw Error("[vlist] item.template is required");if(l&&e.reverse)throw Error("[vlist] horizontal direction cannot be combined with reverse mode");let o=new Map,u=!1,a={use(d){if(u)throw Error("[vlist] Cannot call .use() after .build()");return o.set(d.name,d),a},build(){if(u)throw Error("[vlist] .build() can only be called once");return u=!0,Br(e,o,l,s,i??null)}};return a};function Br(e,l,r,t,s){let{item:i,items:o,overscan:u=Wr,classPrefix:a=Pr,ariaLabel:d,padding:m,reverse:z=!1,scroll:c,accessible:v,interactive:P}=e,T=P??v??!0,R=c,$=R?.wheel??!0,_=R?.wrap??!1,Z=z,q=`${a}-${Vr++}`,W=l.has("withGrid")||l.has("withMasonry")?0:i.gap??0,V=t??s,I=t==null&&s!=null,E=r?typeof i.height==="number"?i.height:void 0:typeof i.width==="number"?i.width:void 0,X={overscan:u,classPrefix:a,reverse:Z,wrap:_,horizontal:r,ariaIdPrefix:q,interactive:T},j=Array.from(l.values()).sort((k,G)=>(k.priority??50)-(G.priority??50)),M=new Set(j.map((k)=>k.name));for(let k of j)if(k.conflicts){for(let G of k.conflicts)if(M.has(G))throw Error(`[vlist] ${k.name} and ${G} cannot be combined`)}if(Z){if(M.has("withGrid"))throw Error("[vlist] withGrid cannot be used with reverse: true")}let H=Sr(e.container),w=yr(H,a,d,r,T);if(R?.wheel===!1)if(r)w.viewport.style.overflowX="hidden";else w.viewport.style.overflow="hidden";if(R?.scrollbar==="none")w.viewport.classList.add(`${a}-viewport--no-scrollbar`);if(R?.gutter==="stable")w.viewport.classList.add(`${a}-viewport--gutter-stable`);let g=$e(m),x=ut(g,r);if(g.top||g.right||g.bottom||g.left)w.content.style.boxSizing="border-box",w.content.style.padding=`${g.top}px ${g.right}px ${g.bottom}px ${g.left}px`;let y=wr(),D=o||[],Y=typeof V==="function"&&(l.has("withGrid")||l.has("withMasonry")),B=W>0?typeof V==="function"?(k)=>V(k)+W:V+W:V,Q=I?s+W:B,S=qe(Q,Y?0:D.length);if(W>0){let k=S.getTotalSize;S.getTotalSize=()=>{let G=k();return G>0?G-W:0}}let p=xr(),n={it:D,hc:S,ch:w.viewport.clientHeight,cw:w.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:mr(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:r?()=>w.viewport.scrollLeft:()=>w.viewport.scrollTop,sst:r?(k)=>{w.viewport.scrollLeft=k}:(k)=>{w.viewport.scrollTop=k},sab:(k=2)=>{let G=n.hc.getTotalSize();return n.ls+n.ch>=G-k},sic:!1,rfn:null,ffn:null,gvr:(k,G,U,ie,se)=>{br(k,G,U,ie,se)},gsp:(k,G,U,ie,se)=>{return Ir(k,G,U,ie,se,n.mp)},pef:null,at:i.template,vre:!0,st:w.viewport,wh:null,gcw:()=>n.cw,gch:()=>n.ch,gp:W,mp:x,sif:(k)=>k,i2s:(k)=>k,uic:(k,G,U)=>{let ie=N.get(k);if(!ie)return;le(ie,G,U)},csi:null};n.vtf=()=>n.dm?n.dm.getTotal():n.it.length;let f=null,L=!1,h={start:0,end:0},b={start:0,end:0},A={start:-1,end:-1},C={viewportState:{scrollPosition:0,containerSize:r?n.cw:n.ch,totalSize:n.hc.getTotalSize(),actualSize:n.hc.getTotalSize(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},O=()=>({...C.viewportState,totalItems:n.vtf()}),N=new Map,J=()=>{ft(w.items,N.keys(),(k)=>N.get(k))},te=()=>{let k=n.hc.getTotalSize(),G=`${(n.sic?k:Math.min(k,Or))+x}px`;if(r)w.content.style.width=G;else w.content.style.height=G},F={selected:!1,focused:!1},K=`${a}-item`,ee=`${a}-item--selected`,re=`${a}-item--focused`,le=(k,G,U)=>{k.classList.toggle(ee,G),k.classList.toggle(re,U),k.ariaSelected=G?"true":"false"},ae=i.striped,ce=!!ae,we=ae==="data"||ae==="even"||ae==="odd",oe=`${a}-item--odd`,ve=`${a}-item--placeholder`,Se=`${a}-item--replaced`,de=`${a}--scrolling`,ge=[],ue=[],pe=[],xe=[],Ze=[],rr=[],De=[],We=[],be=new Map,Ke="__placeholder_",Ue={scrollPosition:0,direction:"down"},Ce={velocity:0,reliable:!1},Ye={range:{start:0,end:0}},Qe=null,Je=null,ht=!1,lr=()=>{if(ht)return;ht=!0,Qe=be.get("_getSelectedIds")??null,Je=be.get("_getFocusedIndex")??null},Pe=(k,G,U)=>{if(!G)console.warn(`[vlist] Template returned falsy value${U!==void 0?` for item at index ${U}`:""}. The element will render as blank.`);else if(typeof G==="string"&&G==="")console.warn(`[vlist] Template returned empty string${U!==void 0?` for item at index ${U}`:""}. The element will render as blank.`);if(typeof G==="string")k.innerHTML=G;else k.replaceChildren(G)},ir=(k,G)=>{let U=Math.round(n.hc.getOffset(G));if(r)k.style.transform=`translateX(${U}px)`;else k.style.transform=`translateY(${U}px)`};n.pef=ir;let ar=(k,G)=>{let U=p.acquire();U.className=K;let ie=!n.csi||n.csi(k);if(r){if(ie)U.style.width=`${n.hc.getSize(k)-W}px`;else U.style.width="";if(E!=null)U.style.height=`${E}px`}else if(ie)U.style.height=`${n.hc.getSize(k)-W}px`;else U.style.height="";if(U.dataset.index=String(k),U.dataset.id=String(G.id),U.ariaSelected="false",U.id=`${q}-item-${k}`,n.la=String(n.vtf()),U.setAttribute("aria-setsize",n.la),U.setAttribute("aria-posinset",String(k+1)),String(G.id).startsWith(Ke))U.classList.add(ve);if(ce)if(we){let se=n.sif(k);if(se<0)U.classList.remove(oe);else U.classList.toggle(oe,(se&1)===1)}else U.classList.toggle(oe,(k&1)===1);try{Pe(U,n.at(G,k,F),k)}catch(se){let ye=se instanceof Error?se:Error(String(se));y.emit("error",{error:ye,context:`tpl(${k},${G.id})`,viewport:O()}),U.textContent=""}return n.pef(U,k),U},nr=()=>{if(n.id)return;let k=r?n.cw:n.ch;if(k<=0)return;lr();let G=Qe?Qe():n.ss,U=Je?Je():n.fi,ie=n.vtf();if(n.gvr(n.ls,k,n.hc,ie,h),zr(h,u,ie,b),b.start===A.start&&b.end===A.end){if(n.sic)for(let[ne,me]of N)n.pef(me,ne);C.viewportState.scrollPosition=n.ls,C.viewportState.containerSize=k,C.viewportState.visibleRange.start=h.start,C.viewportState.visibleRange.end=h.end,C.viewportState.renderRange.start=b.start,C.viewportState.renderRange.end=b.end;return}let se=String(ie),ye=se!==n.la;n.la=se;for(let[ne,me]of N)if(ne<b.start||ne>b.end)me.remove(),p.release(me),N.delete(ne);let fe=document.createDocumentFragment(),ze=!1,Re=De.length>0?[]:null;for(let ne=b.start;ne<=b.end;ne++){let me=n.dm?n.dm.getItem(ne):n.it[ne];if(me===void 0)continue;let he=N.get(ne);if(he){let Ie=he.dataset.id,Me=String(me.id);if(Ie!==Me){let ur=Ie?.startsWith(Ke),rt=Me.startsWith(Ke);try{Pe(he,n.at(me,ne,F),ne)}catch(lt){let fr=lt instanceof Error?lt:Error(String(lt));y.emit("error",{error:fr,context:`tpl(${ne},${me.id})`,viewport:O()}),he.textContent=""}he.dataset.id=Me;let xt=!n.csi||n.csi(ne);if(r)he.style.width=xt?`${n.hc.getSize(ne)-W}px`:"";else he.style.height=xt?`${n.hc.getSize(ne)-W}px`:"";if(rt)he.classList.add(ve);else he.classList.remove(ve);if(ur&&!rt)he.classList.add(Se),setTimeout(()=>{he.classList.remove(Se)},300);if(n.dm&&!rt)Ge(G,ne,me.id)}n.pef(he,ne);let Ve=G.has(me.id);if(le(he,Ve,ne===U),ye)he.setAttribute("aria-setsize",n.la)}else{let Ie=ar(ne,me);if(Re)Re.push({index:ne,element:Ie});if(n.dm)Ge(G,ne,me.id);let Me=G.has(me.id),Ve=ne===U;if(Me||Ve)le(Ie,Me,Ve);fe.appendChild(Ie),N.set(ne,Ie),ze=!0}}if(ze)w.items.appendChild(fe);if(Re&&Re.length>0)for(let ne=0;ne<De.length;ne++)De[ne](Re);A.start=b.start,A.end=b.end,C.lastRenderRange.start=b.start,C.lastRenderRange.end=b.end,C.viewportState.scrollPosition=n.ls,C.viewportState.visibleRange.start=h.start,C.viewportState.visibleRange.end=h.end,C.viewportState.renderRange.start=b.start,C.viewportState.renderRange.end=b.end,Ye.range.start=b.start,Ye.range.end=b.end,y.emit("range:change",Ye)},sr=()=>{A.start=-1,A.end=-1,n.rfn()};n.rfn=nr,n.ffn=sr;let or=()=>{w.root.classList.remove(de),L=!1,n.vt.velocity=0,n.vt.sampleCount=0,Ce.velocity=0,Ce.reliable=!1,y.emit("velocity:change",Ce),J();for(let k=0;k<ue.length;k++)ue[k]();y.emit("scroll:idle",{scrollPosition:n.ls})},dr=()=>{if(f)clearTimeout(f);f=setTimeout(or,R?.idleTimeout??Nr)},Ae=()=>{if(n.id)return;let k=n.sgt();if(k===n.ls&&L)return;let G=k>=n.ls?"down":"up";if(n.vt=hr(n.vt,k),!w.root.classList.contains(de))w.root.classList.add(de);L=!0,n.ls=k,n.rfn(),Ue.scrollPosition=k,Ue.direction=G,y.emit("scroll",Ue),Ce.velocity=n.vt.velocity,Ce.reliable=n.vt.sampleCount>=cr,y.emit("velocity:change",Ce);for(let U=0;U<ge.length;U++)ge[U](k,G);dr()},Ne=null;if(n.st.addEventListener("scroll",Ae,{passive:!0}),$){let k=w.viewport;if(r)Ne=(G)=>{if(C.viewportState.isCompressed)return;if(Math.abs(G.deltaX)>Math.abs(G.deltaY))return;let U=n.sgt(),ie=k.scrollWidth-k.clientWidth,se=Math.max(0,Math.min(U+G.deltaY,ie));if(Math.abs(se-U)<1)return;G.preventDefault(),n.sst(se),Ae()};else Ne=(G)=>{if(C.viewportState.isCompressed)return;let U=k.scrollWidth>k.clientWidth;if(U&&Math.abs(G.deltaX)>Math.abs(G.deltaY))return;if(U&&G.deltaX!==0)G.preventDefault(),k.scrollLeft+=G.deltaX;let ie=n.sgt(),se=k.scrollHeight-k.clientHeight,ye=Math.max(0,Math.min(ie+G.deltaY,se));if(Math.abs(ye-ie)<1)return;G.preventDefault(),n.sst(ye),Ae()};n.wh=Ne,k.addEventListener("wheel",Ne,{passive:!1})}let gt=(k)=>{let G=k.target.closest("[data-index]");if(!G)return null;let U=parseInt(G.dataset.index??"-1",10);if(U<0)return null;let ie=n.dm?.getItem(U)??n.it[U];if(!ie||ie.__groupHeader)return null;return{item:ie,index:U}},pt=(k)=>{let G=gt(k);if(G)y.emit("item:click",{item:G.item,index:G.index,event:k});for(let U=0;U<pe.length;U++)pe[U](k)},vt=(k)=>{let G=gt(k);if(G)y.emit("item:dblclick",{item:G.item,index:G.index,event:k})},wt=(k)=>{for(let G=0;G<xe.length;G++)xe[G](k)};if(w.items.addEventListener("click",pt),w.items.addEventListener("dblclick",vt),w.root.addEventListener("keydown",wt),T){let k=null,G=(U)=>{if(k)clearTimeout(k);k=setTimeout(()=>{if(k=null,n.id)return;let ie=n.vtf();w.liveRegion.textContent=`Showing items ${U.range.start+1} to ${Math.min(U.range.end+1,ie)} of ${ie}`},300)};y.on("range:change",G),We.push(()=>{if(k)clearTimeout(k);y.off("range:change",G)})}let et=new ResizeObserver((k)=>{if(n.id)return;for(let G of k){let U=G.contentRect.height,ie=G.contentRect.width,se=r?ie:U,ye=r?n.cw:n.ch;if(n.cw=ie,n.ch=U,Math.abs(se-ye)>1){if(C.viewportState.containerSize=se,n.ii){let fe=C.cachedCompression;if(fe&&fe.state.isCompressed){let ze=`${fe.state.virtualSize+x}px`;if(r)w.content.style.width=ze;else w.content.style.height=ze}else te();n.rfn(),y.emit("resize",{height:U,width:ie})}}if(n.ii)for(let fe=0;fe<Ze.length;fe++)Ze[fe](ie,U)}});if(n.vre)et.observe(w.viewport);let tt={dom:w,emitter:y,resolvedConfig:X,rawConfig:e,rendered:N,pool:p,itemState:F,sharedState:C,renderRange:b,isHorizontal:r,classPrefix:a,contentSizeHandlers:rr,idleHandlers:ue,afterScroll:ge,clickHandlers:pe,keydownHandlers:xe,resizeHandlers:Ze,destroyHandlers:We,methods:be,onScrollFrame:Ae,resizeObserver:et,afterRenderBatch:De,applyTemplate:Pe,updateContentSize:te},Oe=Cr(n,tt);n.dm=Mr(n,tt,Oe),n.sc=Tr(n,tt),be.set("_updateRenderedItem",(k,G,U,ie)=>{let se=N.get(k);if(!se)return;let ye={selected:U,focused:ie};try{let fe=n.at(G,k,ye);Pe(se,fe,k)}catch(fe){let ze=fe instanceof Error?fe:Error(String(fe));y.emit("error",{error:ze,context:`tpl(${k},${G.id})`,viewport:O()})}se.dataset.id=String(G.id),le(se,U,ie)});let St=new WeakSet;be.set("_setSizeCache",(k)=>{if(n.hc=k,n.gp>0&&!St.has(k)){St.add(k);let G=n.hc.getTotalSize,U=n.gp;n.hc.getTotalSize=()=>{let ie=G();return ie>0?ie-U:0}}}),be.set("_setConstrainSize",(k)=>{n.csi=k});let yt=new Map;for(let k of j)if(k.methods)for(let G of k.methods){let U=yt.get(G);if(U)throw Error(`[vlist] Method "${G}" is registered by both "${U}" and "${k.name}"`);yt.set(G,k.name)}for(let k of j)try{k.setup(Oe)}catch(G){let U=G instanceof Error?G:Error(String(G));console.error(`[vlist] Feature "${k.name}" setup failed:`,U),y.emit("error",{error:U,context:k.name,viewport:O()})}if(I&&!l.has("withAutoSize"))console.warn("[vlist] estimatedHeight/estimatedWidth requires .use(withAutoSize()). Items will use the estimated size as a fixed size.");if(T&&!be.has("_getFocusedIndex")){let k=r?g.left:g.top,G=r?g.right:g.bottom;Lr(n,w,a,q,r,k,G,_,be,N,xe,pe,We)}if(n.ii=!0,Oe.state.isInitialized=!0,te(),n.rfn(),Z&&n.it.length>0){let k=n.gsp(n.it.length-1,n.hc,n.ch,n.it.length,"end");n.sst(k),n.ls=k,n.rfn()}return Dr(n,w,y,N,p,be,j,We,Oe,Z,_,pt,vt,wt,Ae,et,()=>{},()=>{if(f)clearTimeout(f)})}var Xe=(e,l,r)=>{let t=l.getTotalSize(),s=r===!0||t>it,i=t>it?it:t,o=t>0?i/t:1;return{isCompressed:s,actualSize:t,virtualSize:i,ratio:o}},Xr=(e,l,r,t,s,i)=>{if(t===0||l===0)return i.start=0,i.end=-1,i;if(!s.isCompressed||s.ratio===1){let z=r.indexAtOffset(e),c=r.indexAtOffset(e+l);if(c<t-1)c++;return i.start=Math.max(0,z),i.end=Math.min(t-1,Math.max(0,c)),i}let{virtualSize:o}=s,u=e/o*t,a=Math.floor(u),d=vr(r,Math.max(0,a),l,t),m=Math.ceil(u)+d;return i.start=Math.max(0,a),i.end=Math.min(t-1,Math.max(0,m)),i},Vt=(e,l,r,t,s,i,o)=>{if(!i.isCompressed||t===0)return r.getOffset(e);if(i.ratio===1)return r.getOffset(e)-l;let{virtualSize:u}=i,a=l/u,d=r.getTotalSize(),m=a*d;return r.getOffset(e)-m},qr=(e,l,r,t,s,i="start")=>{if(t===0)return 0;let o;if(s.isCompressed&&s.ratio!==1){o=e/t*s.virtualSize;let d=l.getSize(e);switch(i){case"center":o-=(r-d)/2*s.ratio;break;case"end":o-=(r-d)*s.ratio;break}return Math.max(0,o)}o=l.getOffset(e);let u=l.getSize(e);switch(i){case"center":o-=(r-u)/2;break;case"end":o-=r-u;break}let a=s.virtualSize-r;return Math.max(0,Math.min(o,a))},Bt=(e,l,r={},t="vlist",s=!1)=>{let{autoHide:i=!0,autoHideDelay:o=1000,minThumbSize:u=30,showOnHover:a=!0,hoverZoneWidth:d=16,showOnViewportEnter:m=!0}=r,z=0,c=0,v=0,P=0,T=!1,R=!1,$=0,_=0,Z=0,q=null,W=!1,V=null,I=null,E=s?"width":"height",X=s?"translateX":"translateY",j=s?(N)=>N.clientX:(N)=>N.clientY,M=s?"left":"top",H=document.createElement("div"),w=document.createElement("div"),g=a?document.createElement("div"):null,x=()=>{if(H.className=`${t}-scrollbar`,w.className=`${t}-scrollbar-thumb`,s)H.classList.add(`${t}-scrollbar--horizontal`);if(H.appendChild(w),e.appendChild(H),g){if(g.className=`${t}-scrollbar-hover`,s)g.classList.add(`${t}-scrollbar-hover--horizontal`),g.style.height=`${d}px`;else g.style.width=`${d}px`;e.appendChild(g)}},y=()=>{if(q)clearTimeout(q),q=null},D=()=>{if(!i)return;y(),q=setTimeout(B,o)},Y=()=>{if(z<=c)return;if(y(),!W)H.classList.add(`${t}-scrollbar--visible`),W=!0;if(i&&!T&&!R)D()},B=()=>{if(T||R)return;H.classList.remove(`${t}-scrollbar--visible`),W=!1},Q=(N,J)=>{z=N,c=J;let te=z>c;if(H.style.display=te?"":"none",!te){B();return}let F=c/z;v=Math.max(u,F*c),w.style[E]=`${v}px`,P=c-v,S(Z)},S=(N)=>{if(Z=N,z<=c||P<=0)return;let J=z-c,te=Math.min(1,Math.max(0,N/J))*P;w.style.transform=`${X}(${te}px)`},p=(N)=>{if(N.target===w)return;let J=H.getBoundingClientRect(),te=j(N)-J[M]-v/2,F=Math.max(0,Math.min(te,P))/P,K=z-c,ee=F*K;l(ee),Y()},n=(N)=>{N.preventDefault(),N.stopPropagation(),T=!0,$=j(N),_=Z,y(),H.classList.add(`${t}-scrollbar--dragging`),document.addEventListener("mousemove",f),document.addEventListener("mouseup",L)},f=(N)=>{if(!T)return;let J=j(N)-$,te=P>0?J/P:0,F=z-c,K=te*F,ee=Math.max(0,Math.min(_+K,F)),re=ee/F*P;if(w.style.transform=`${X}(${re}px)`,I=ee,V===null)V=requestAnimationFrame(()=>{if(I!==null)l(I);V=null})},L=()=>{if(T=!1,V!==null)cancelAnimationFrame(V),V=null;if(I!==null)l(I),I=null;if(H.classList.remove(`${t}-scrollbar--dragging`),i&&!R)D();document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",L)},h=()=>{if(m)Y()},b=()=>{if(!T){if(R=!1,i)D()}},A=()=>{R=!0,y(),Y()},C=()=>{if(R=!1,!T&&i)D()},O=()=>{if(y(),V!==null)cancelAnimationFrame(V),V=null;if(H.removeEventListener("click",p),H.removeEventListener("mouseenter",A),H.removeEventListener("mouseleave",C),w.removeEventListener("mousedown",n),e.removeEventListener("mouseenter",h),e.removeEventListener("mouseleave",b),document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",L),g){if(g.removeEventListener("mouseenter",A),g.removeEventListener("mouseleave",C),g.parentNode)g.parentNode.removeChild(g)}if(H.parentNode)H.parentNode.removeChild(H)};if(x(),H.addEventListener("click",p),H.addEventListener("mouseenter",A),H.addEventListener("mouseleave",C),w.addEventListener("mousedown",n),e.addEventListener("mouseenter",h),e.addEventListener("mouseleave",b),g)g.addEventListener("mouseenter",A),g.addEventListener("mouseleave",C);return{show:Y,hide:B,updateBounds:Q,updatePosition:S,isVisible:()=>W,destroy:O}},Xt=(e)=>{let l=null;return{name:"withScrollbar",priority:30,setup(r){let{dom:t,config:s}=r,{classPrefix:i,horizontal:o}=s;if(l=Bt(t.viewport,(a)=>r.scrollController.scrollTo(a),e??{},i,o),!t.viewport.classList.contains(`${i}-viewport--custom-scrollbar`))t.viewport.classList.add(`${i}-viewport--custom-scrollbar`);l.updateBounds(r.state.viewportState.totalSize||r.getCachedCompression().virtualSize,r.state.viewportState.containerSize);let u=l;r.afterScroll.push((a,d)=>{u.updatePosition(a),u.show()}),r.resizeHandlers.push((a,d)=>{if(u)u.updateBounds(r.state.viewportState.totalSize||r.getCachedCompression().virtualSize,r.state.viewportState.containerSize)}),r.contentSizeHandlers.push(()=>{if(u)u.updateBounds(r.state.viewportState.totalSize||r.getCachedCompression().virtualSize,r.state.viewportState.containerSize)}),r.destroyHandlers.push(()=>{if(u)u.destroy()})},destroy(){if(l)l.destroy(),l=null}}},Gr=0.65,jr=0.5,Lt=1.7,Zr=0.95,Kr=0.1,Ur=5,Yr=100,$t=(e,l,r,t=0)=>{if(e<=0)return 0;let s=l-t;return Math.max(0,s*(1-r)+t)},qt=(e)=>{let l=e?.force??!1,r=null,t=0,s=!1,i=0,o=0,u=null,a=0,d=0,m=null,z=[];return{name:"withScale",priority:20,setup(c){let{dom:v,config:P}=c,{classPrefix:T,horizontal:R}=P,$=$e(c.rawConfig.padding),_=R?$.left+$.right:$.top+$.bottom,Z=()=>{let j=c.getVirtualTotal(),M=Xe(j,c.sizeCache,l);if(M.isCompressed&&!s){s=!0,c.scrollController.enableCompression(M);let w=R?v.viewport.scrollLeft:v.viewport.scrollTop;if(R)v.viewport.style.overflowX="hidden";else v.viewport.style.overflow="hidden";if(R)v.viewport.scrollLeft=0;else v.viewport.scrollTop=0;if(w>0)t=w,o=w;i=$t(M.virtualSize,c.state.viewportState.containerSize,M.ratio,_),c.updateContentSize(M.virtualSize+i),c.setScrollFns(()=>t,(n)=>{if(t=n,o=n,u!==null)cancelAnimationFrame(u),u=null});let g=()=>{let n=o-t;if(c.getVirtualTotal()===0){t=0,o=0,u=null,c.scrollController.scrollTo(0);return}if(Math.abs(n)<jr){let f=c.getCachedCompression(),L=Math.max(0,f.virtualSize+i-c.state.viewportState.containerSize);t=Math.max(0,Math.min(o,L)),o=t,u=null}else{t+=n*Gr;let f=c.getCachedCompression().virtualSize+i-c.state.viewportState.containerSize;t=Math.max(0,Math.min(t,f)),u=requestAnimationFrame(g)}c.scrollController.scrollTo(t)},x=v.viewport,y=(n)=>{n.preventDefault();let f=c.getCachedCompression(),L=f.virtualSize+i-c.state.viewportState.containerSize;if(o=Math.max(0,Math.min(o+n.deltaY*f.ratio*Lt,L)),u===null)u=requestAnimationFrame(g)};x.addEventListener("wheel",y,{passive:!1});let D=()=>{if(m!==null)cancelAnimationFrame(m),m=null},Y=(n)=>{if(D(),u!==null)cancelAnimationFrame(u),u=null;let f=n.touches[0];if(!f)return;let L=R?f.clientX:f.clientY;a=L,d=t,z=[{time:performance.now(),y:L}]},B=(n)=>{n.preventDefault();let f=n.touches[0];if(!f)return;let L=R?f.clientX:f.clientY,h=performance.now();if(z.push({time:h,y:L}),z.length>Ur)z.shift();let b=a-L,A=c.getCachedCompression(),C=A.virtualSize+i-c.state.viewportState.containerSize,O=Math.max(0,Math.min(d+b*A.ratio*Lt,C));t=O,o=O,c.scrollController.scrollTo(O)},Q=(n)=>{let f=performance.now(),L=z.filter((C)=>f-C.time<Yr),h=0;if(L.length>=2){let C=L[0],O=L[L.length-1],N=O.time-C.time;if(N>0)h=(C.y-O.y)/N}if(z=[],Math.abs(h)<Kr)return;let b=h*16,A=()=>{if(b*=Zr,Math.abs(b)<0.5){m=null;return}let C=c.getCachedCompression().virtualSize+i-c.state.viewportState.containerSize,O=t+b;if(O=Math.max(0,Math.min(O,C)),O<=0&&b<0||O>=C&&b>0){t=O,o=O,c.scrollController.scrollTo(O),m=null;return}t=O,o=O,c.scrollController.scrollTo(O),m=requestAnimationFrame(A)};m=requestAnimationFrame(A)};x.addEventListener("touchstart",Y,{passive:!0}),x.addEventListener("touchmove",B,{passive:!1}),x.addEventListener("touchend",Q,{passive:!0}),x.addEventListener("touchcancel",Q,{passive:!0}),c.destroyHandlers.push(()=>{x.removeEventListener("wheel",y),x.removeEventListener("touchstart",Y),x.removeEventListener("touchmove",B),x.removeEventListener("touchend",Q),x.removeEventListener("touchcancel",Q)});let S=v.viewport.querySelector(`.${T}-scrollbar`),p=()=>{if((R?v.viewport.scrollLeft:v.viewport.scrollTop)!==0)if(R)v.viewport.scrollLeft=0;else v.viewport.scrollTop=0};if(x.addEventListener("scroll",p,{passive:!0}),c.destroyHandlers.push(()=>{x.removeEventListener("scroll",p)}),!S){if(r=Bt(v.viewport,(f)=>c.scrollController.scrollTo(f),{},T,R),!v.viewport.classList.contains(`${T}-viewport--custom-scrollbar`))v.viewport.classList.add(`${T}-viewport--custom-scrollbar`);r.updateBounds(M.virtualSize,c.state.viewportState.containerSize);let n=r;c.afterScroll.push((f,L)=>{if(n)n.updatePosition(f),n.show()}),c.resizeHandlers.push((f,L)=>{if(n){let h=c.getCachedCompression();n.updateBounds(h.virtualSize,c.state.viewportState.containerSize)}})}}else if(!M.isCompressed&&s){if(s=!1,u!==null)cancelAnimationFrame(u),u=null;if(m!==null)cancelAnimationFrame(m),m=null;if(t=0,o=0,z=[],c.setScrollFns(R?()=>v.viewport.scrollLeft:()=>v.viewport.scrollTop,R?(w)=>{v.viewport.scrollLeft=w}:(w)=>{v.viewport.scrollTop=w}),R)v.viewport.scrollLeft=0;else v.viewport.scrollTop=0;if(c.scrollController.disableCompression(),R)v.viewport.style.overflowX="auto";else v.viewport.style.overflow="auto";if(r)r.destroy(),r=null;i=0,c.updateContentSize(M.actualSize)}else if(M.isCompressed)c.scrollController.updateConfig({compression:M}),i=$t(M.virtualSize,c.state.viewportState.containerSize,M.ratio,_),c.updateContentSize(M.virtualSize+i);if(r)r.updateBounds(M.virtualSize+i,c.state.viewportState.containerSize);let H=c.state.viewportState;if(H.isCompressed=M.isCompressed,H.compressionRatio=M.ratio,H.totalSize=M.virtualSize+i,H.actualSize=M.actualSize,c.state.cachedCompression={state:M,totalItems:j},s){let w=Math.max(0,M.virtualSize+i-c.state.viewportState.containerSize),g=t;if(g>w)g=w;else if(g<0)g=0;if(g!==t){if(u!==null)cancelAnimationFrame(u),u=null;if(m!==null)cancelAnimationFrame(m),m=null;c.scrollController.scrollTo(g)}}for(let w=0;w<c.contentSizeHandlers.length;w++)c.contentSizeHandlers[w]()};c.updateCompressionMode=Z;let q=c.getCachedCompression.bind(c);c.getCachedCompression=()=>{if(c.state.cachedCompression)return c.state.cachedCompression.state;return q()},c.setVisibleRangeFn((j,M,H,w,g)=>{W=null,V=null;let x=Xe(w,H,l);Xr(j,M,H,w,x,g)}),c.setScrollToPosFn((j,M,H,w,g)=>{let x=Xe(w,M,l);return qr(j,M,H,w,x,g)});let W=null,V=null;c.setPositionElementFn((j,M)=>{let H=c.getVirtualTotal(),w=Xe(H,c.sizeCache,l);if(w.isCompressed){let g=c.scrollController.getScrollTop();if(W===null||M<V)V=M,W=Math.round(Vt(M,g,c.sizeCache,H,c.state.viewportState.containerSize,w));let x=W+c.sizeCache.getOffset(M)-c.sizeCache.getOffset(V),y=c.config.horizontal;j.style.transform=y?`translateX(${x}px)`:`translateY(${x}px)`}else{let g=Math.round(c.sizeCache.getOffset(M)),x=c.config.horizontal;j.style.transform=x?`translateX(${g}px)`:`translateY(${g}px)`}});let I=R?$.left:$.top,E=R?$.right:$.bottom,X=c.getItemToScrollIndexFn();c.methods.set("_scrollItemIntoView",(j)=>{let M=c.getCachedCompression(),H=c.state.viewportState.containerSize,w=c.state.viewportState.scrollPosition,g=c.getVirtualTotal(),{visibleRange:x}=c.state.viewportState,y=X(j),D=Dt(y,c.sizeCache,w,H,I,E,M,g,x);if(D!==w)c.scrollController.scrollTo(D)}),Z(),c.destroyHandlers.push(()=>{if(r)r.destroy(),r=null;if(u!==null)cancelAnimationFrame(u),u=null;if(m!==null)cancelAnimationFrame(m),m=null})}}},Qr=(e={})=>{let{chunkSize:l=100,maxCachedItems:r=5000,evictionBuffer:t=200,onEvict:s}=e,i=new Map,o=0,u=0,a=(g)=>{let x=i.get(g);if(!x)x={items:Array(l),count:0,lastAccess:Date.now()},i.set(g,x);else x.lastAccess=Date.now();return x},d=(g)=>{return Math.floor(g/l)},m=(g)=>{return g%l},z=()=>o,c=(g)=>{o=g},v=(g)=>{if(g<0||g>=o)return;let x=d(g),y=i.get(x);if(!y)return;return y.items[m(g)]},P=(g)=>{if(g<0||g>=o)return!1;let x=d(g),y=i.get(x);if(!y)return!1;return y.items[m(g)]!==void 0},T=(g,x)=>{let y=d(g),D=a(y),Y=m(g),B=D.items[Y]===void 0;if(D.items[Y]=x,B)D.count++,u++;if(g>=o)o=g+1},R=(g,x)=>{for(let y=0;y<x.length;y++){let D=x[y];if(D!==void 0)T(g+y,D)}},$=(g)=>{if(g<0||g>=o)return!1;let x=d(g),y=i.get(x),D=m(g);if(!(y!==void 0&&y.items[D]!==void 0))return!1;let Y=x,B=Array.from(i.keys()).filter((S)=>S>=Y).sort((S,p)=>S-p),Q=[];for(let S of B){let p=i.get(S),n=S*l;for(let f=0;f<l;f++){if(p.items[f]===void 0)continue;let L=n+f;if(L<=g)continue;Q.push({oldIndex:L,item:p.items[f]})}}if(y.items[D]=void 0,y.count--,u--,y.count===0)i.delete(x);for(let{oldIndex:S}of Q){let p=d(S),n=i.get(p);if(!n)continue;let f=m(S);if(n.items[f]!==void 0){if(n.items[f]=void 0,n.count--,u--,n.count===0)i.delete(p)}}for(let{oldIndex:S,item:p}of Q){let n=S-1,f=d(n),L=a(f),h=m(n);L.items[h]=p,L.count++,u++}return o--,!0},_=(g,x)=>{let y=[];for(let D=g;D<=x&&D<o;D++)y.push(v(D));return y},Z=(g,x)=>{for(let y=g;y<=x&&y<o;y++)if(!P(y))return!1;return!0},q=()=>{let g=[],x=null,y=Array.from(i.keys()).sort((D,Y)=>D-Y);for(let D of y){let Y=i.get(D);if(!Y)continue;let B=D*l;for(let Q=0;Q<l;Q++){let S=B+Q;if(S>=o)break;if(Y.items[Q]!==void 0)if(x===null)x={start:S,end:S};else if(S===x.end+1)x.end=S;else g.push(x),x={start:S,end:S};else if(x!==null)g.push(x),x=null}}if(x!==null)g.push(x);return g},W=(g,x)=>{let y=[],D=null;for(let Y=g;Y<=x&&Y<o;Y++)if(!P(Y))if(D===null)D={start:Y,end:Y};else D.end=Y;else if(D!==null)y.push(D),D=null;if(D!==null)y.push(D);return y},V=(g)=>{return i.has(g)},I=(g)=>{let x=i.get(g);if(x)x.lastAccess=Date.now()},E=(g,x)=>{if(g>x||i.size===0)return;let y=Date.now(),D=d(Math.max(0,g)),Y=d(Math.min(o-1,x));for(let B=D;B<=Y;B++){let Q=i.get(B);if(Q)Q.lastAccess=y}},X=(g,x)=>{if(u<=r)return 0;let y=Math.max(0,g-t),D=Math.min(o-1,x+t),Y=d(y),B=d(D),Q=0,S=[];for(let[p,n]of i)if(p<Y||p>B)Q+=n.count,S.push(p),u-=n.count,i.delete(p);if(Q>0&&s)s(Q,S);return Q},j=()=>{if(u<=r)return 0;let g=Array.from(i.entries()).sort(([,D],[,Y])=>D.lastAccess-Y.lastAccess),x=0,y=[];for(let[D,Y]of g){if(u<=r)break;x+=Y.count,u-=Y.count,y.push(D),i.delete(D)}if(x>0&&s)s(x,y);return x},M=()=>{return{totalItems:o,cachedItems:u,cachedChunks:i.size,chunkSize:l,maxCachedItems:r,memoryEfficiency:o>0?1-u/o:1}},H=()=>u,w=()=>{i.clear(),u=0};return{chunkSize:l,maxCachedItems:r,getTotal:z,setTotal:c,get:v,has:P,set:T,setRange:R,delete:$,getRange:_,isRangeLoaded:Z,getLoadedRanges:q,findUnloadedRanges:W,getChunkIndex:d,isChunkLoaded:V,touchChunk:I,touchChunksForRange:E,evictDistant:X,evictToLimit:j,getStats:M,getCachedCount:H,clear:w,reset:()=>{w(),o=0}}},Jr=(e)=>{if(e.length===0)return[];let l=[...e].sort((t,s)=>t.start-s.start),r=[{...l[0]}];for(let t=1;t<l.length;t++){let s=l[t],i=r[r.length-1];if(s.start<=i.end+1)i.end=Math.max(i.end,s.end);else r.push({...s})}return r},el=(e,l,r)=>{let t=Math.floor(e.start/r)*r,s=Math.ceil((e.end+1)/r)*r-1,i={start:t,end:s};if(l.length===0)return[i];let o=[],u=Jr(l),a=i.start;for(let d of u){if(d.end<a)continue;if(d.start>i.end)break;if(d.start>a)o.push({start:a,end:Math.min(d.start-1,i.end)});if(a=d.end+1,a>i.end)break}if(a<=i.end)o.push({start:a,end:i.end});return o},tl=(e={})=>{let{maskCharacter:l=kr,maxSampleSize:r=Hr}=e,t=[],s=!1,i=(a)=>{if(s||a.length===0)return;let d=Math.min(a.length,r);for(let m=0;m<d;m++){let z=a[m];if(!z||typeof z!=="object")continue;let c={};for(let[v,P]of Object.entries(z)){if(v.startsWith("_")||v==="id")continue;c[v]=String(P??"").length}if(Object.keys(c).length>0)t.push(c)}s=!0},o=()=>s,u=(a)=>{let d={id:`${Le}${a}`,[Wt]:!0,_index:a};if(t.length===0)return d.label=l.repeat(12),d;let m=t[a%t.length];for(let[z,c]of Object.entries(m))d[z]=l.repeat(Math.max(1,c));return d};return{analyzeStructure:i,hasAnalyzedStructure:o,generate:u,generateRange:(a,d)=>{let m=[];for(let z=a;z<=d;z++)m.push(u(z));return m},clear:()=>{t=[],s=!1}}},ot=(e)=>{if(!e||typeof e!=="object")return!1;return e[Wt]===!0},rl=50,ll=(e={})=>{let{adapter:l,initialItems:r,initialTotal:t,storage:s,placeholder:i,pageSize:o=rl,onStateChange:u,onItemsLoaded:a,onItemsEvicted:d}=e,m=Qr({...s,onEvict:(F,K)=>{d?.(F),W()}}),z=null,c=()=>{if(!z)z=tl(i);return z},v=new Map,P=!1,T,R=!0,$,_=[],Z=0,q=new Map,W=()=>{u?.(g())},V=()=>{v.clear();let F=m.getLoadedRanges();for(let K of F)for(let ee=K.start;ee<=K.end;ee++){let re=m.get(ee);if(re&&!ot(re))v.set(re.id,ee)}},I=(F,K)=>{if(!ot(K))v.set(K.id,F)},E=(F)=>{v.delete(F)},X=(F,K)=>{return`${F}-${K}`},j=()=>m.getTotal(),M=()=>m.getCachedCount(),H=()=>P,w=()=>R,g=()=>({total:m.getTotal(),cached:m.getCachedCount(),isLoading:P,pendingRanges:_,error:T,hasMore:R,cursor:$}),x=()=>m,y=()=>c(),D=(F)=>{let K=m.get(F);if(K!==void 0)return K;if(F>=0&&F<m.getTotal())return c().generate(F);return},Y=(F)=>{let K=v.get(F);if(K===void 0)return;return m.get(K)},B=(F)=>{return v.get(F)??-1},Q=(F)=>{let K=m.get(F);return K!==void 0&&!ot(K)},S=(F,K)=>{let ee=[],re=m.getTotal(),le=0,ae=0;m.touchChunksForRange(F,Math.min(K,re-1));for(let ce=F;ce<=K&&ce<re;ce++){let we=m.get(ce);if(we!==void 0)ee.push(we),le++;else ee.push(c().generate(ce)),ae++}return ee},p=(F)=>{m.setTotal(F),R=m.getCachedCount()<F,W()},n=(F,K=0,ee)=>{if(l&&F.length>0){let re=c();if(!re.hasAnalyzedStructure())re.analyzeStructure(F)}for(let re=0;re<F.length;re++){let le=F[re];if(le!==void 0){let ae=K+re;m.set(ae,le),I(ae,le)}}if(ee!==void 0)m.setTotal(ee);else if(K+F.length>m.getTotal())m.setTotal(K+F.length);if(m.getCachedCount()>=m.getTotal()&&m.getTotal()>0)R=!1;W(),a?.(F,K,m.getTotal())},f=(F,K)=>{let ee=m.get(F);if(!ee)return!1;let re=ee.id,le={...ee,...K};if(m.set(F,le),K.id!==void 0&&K.id!==re)E(re);return I(F,le),W(),!0},L=(F)=>{let K=v.get(F);if(K===void 0)return!1;if(!m.delete(K))return!1;return V(),q.clear(),W(),!0},h=async(F,K)=>{if(!l)return;let ee=X(F,K);if(q.has(ee))return;let re=m.getLoadedRanges(),le=el({start:F,end:K},re,m.chunkSize);if(le.length===0)return;let ae=m.chunkSize,ce=[];for(let oe of le){let ve=Math.floor(oe.start/ae),Se=Math.floor(oe.end/ae);for(let de=ve;de<=Se;de++){let ge=de*ae,ue=ge+ae-1,pe=X(ge,ue);if(!ce.some((xe)=>xe.start===ge)&&!q.has(pe))ce.push({start:ge,end:ue})}}let we=[];for(let oe of le){let ve=Math.floor(oe.start/ae),Se=Math.floor(oe.end/ae);for(let de=ve;de<=Se;de++){let ge=de*ae,ue=ge+ae-1,pe=X(ge,ue);if(q.has(pe)){let xe=q.get(pe);if(!we.includes(xe))we.push(xe)}}}for(let oe of ce){let ve=X(oe.start,oe.end),Se=(async()=>{_.push(oe),P=!0,T=void 0,W();try{let de=oe.end-oe.start+1,ge={offset:oe.start,limit:de,cursor:void 0},ue=await l.read(ge);if(n(ue.items,oe.start,ue.total),ue.cursor)$=ue.cursor;let pe=oe.start+ue.items.length;if(pe>=Z){if(Z=pe,ue.hasMore!==void 0)R=ue.hasMore;else if(ue.total!==void 0)R=pe<ue.total}}catch(de){T=de instanceof Error?de:Error(String(de))}finally{q.delete(ve),_=_.filter((de)=>de.start!==oe.start||de.end!==oe.end),P=q.size>0,W()}})();q.set(ve,Se),we.push(Se)}await Promise.all(we)},b=async(F,K)=>{if(m.isRangeLoaded(F,K))return;await h(F,K)},A=async()=>{if(!l)return;await h(0,o-1)},C=async()=>{if(!l||P||!R)return!1;let F=m.getCachedCount(),K=m.getTotal(),ee=F,re=Math.min(ee+o-1,K>0?K-1:ee+o-1);if(ee>=K&&K>0)return R=!1,!1;return await h(ee,re),m.getCachedCount()>F},O=async()=>{if(m.clear(),m.setTotal(0),v.clear(),z)z.clear();q.clear(),_=[],P=!1,$=void 0,R=!0,Z=0,T=void 0,W()},N=(F,K)=>{if(m.evictDistant(F,K)>0)V()},J=()=>{m.clear(),v.clear(),$=void 0,T=void 0,_=[],P=!1,W()},te=()=>{if(m.reset(),v.clear(),z)z.clear();$=void 0,R=!0,Z=0,T=void 0,_=[],P=!1,W()};if(r&&r.length>0)n(r,0,t??r.length);else if(t!==void 0)m.setTotal(t),W();return{getState:g,getTotal:j,getCached:M,getIsLoading:H,getHasMore:w,getStorage:x,getPlaceholders:y,getItem:D,getItemById:Y,getIndexById:B,isItemLoaded:Q,getItemsInRange:S,setTotal:p,setItems:n,updateItem:f,removeItem:L,loadRange:h,ensureRange:b,loadInitial:A,loadMore:C,reload:O,evictDistant:N,clear:J,reset:te}},Gt=(e)=>{let{adapter:l,loading:r,storage:t,total:s,autoLoad:i=!0}=e,o=r?.cancelThreshold??Ar,u=r?.preloadThreshold??Rr,a=r?.preloadAhead??$r;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(d){let{emitter:m}=d,z=d.config.reverse,c=d.methods.get("_getGridLayout"),v=(M)=>{if(c){let H=c();if(H){let w=d.dataManager.getTotal();return H.getItemRange(M.start,M.end,w)}}return M},P=ll({adapter:l,...s!==void 0&&{initialTotal:s},pageSize:t?.chunkSize??He,...t&&{storage:{...t.chunkSize!==void 0&&{chunkSize:t.chunkSize},...t.maxCachedItems!==void 0&&{maxCachedItems:t.maxCachedItems}}},onStateChange:()=>{if(d.state.isInitialized){let M=d.getVirtualTotal();d.sizeCache.rebuild(M),d.updateCompressionMode();let H=d.getCachedCompression();d.state.viewportState.totalSize=H.virtualSize,d.state.viewportState.actualSize=H.actualSize,d.state.viewportState.isCompressed=H.isCompressed,d.state.viewportState.compressionRatio=H.ratio,d.updateContentSize(H.virtualSize),d.renderIfNeeded()}},onItemsLoaded:(M,H,w)=>{if(d.state.isInitialized)d.forceRender(),m.emit("load:end",{items:M,total:w,offset:H})}});d.replaceDataManager(P);let T=null,R=null,$=0,_=!1,Z=null,q=120,W=(M=!1)=>{if(_=!1,R=null,M)T=null;if(Z!==null)clearTimeout(Z),Z=null},V=()=>{if(!R)return;R=null;let{renderRange:M}=d.state.viewportState;if(M.end<M.start)return;T=null;let H=v(M);d.dataManager.ensureRange(H.start,H.end).catch((w)=>{m.emit("error",{error:w,context:"ensureRange"})})};d.afterScroll.push((M,H)=>{if(d.state.isDestroyed)return;let w=d.scrollController.getVelocity(),g=d.scrollController.isTracking()&&w<=o;if($>o&&w<=o)_=!0;else if(_&&w>o)W();if(_&&w<0.5)W(!0);if($=w,(d.scrollController.isAtTop()||d.scrollController.isAtBottom())&&(_||R))W(!0),g=!0;let x=_&&w>0.5;if(g&&!d.dataManager.getIsLoading()&&d.dataManager.getHasMore()){if(z){if(M<bt)m.emit("load:start",{offset:d.dataManager.getCached(),limit:He}),d.dataManager.loadMore().catch((D)=>{m.emit("error",{error:D,context:"loadMore"})})}else if(d.state.viewportState.totalSize-M-d.state.viewportState.containerSize<bt)m.emit("load:start",{offset:d.dataManager.getCached(),limit:He}),d.dataManager.loadMore().catch((D)=>{m.emit("error",{error:D,context:"loadMore"})})}let{renderRange:y}=d.state.viewportState;if(!T||y.start!==T.start||y.end!==T.end){if(T={start:y.start,end:y.end},g&&!x){if(R=null,Z!==null)clearTimeout(Z),Z=null;let D=v(y),Y=D.start,B=D.end,Q=c?d.dataManager.getTotal():d.getVirtualTotal();if(w>u)if(H==="down")B=Math.min(D.end+a,Q-1);else Y=Math.max(D.start-a,0);d.dataManager.ensureRange(Y,B).catch((S)=>{m.emit("error",{error:S,context:"ensureRange"})})}else if(R={start:y.start,end:y.end},x){if(Z!==null)clearTimeout(Z);Z=setTimeout(()=>{Z=null,V(),W()},q)}}});let I=200,E=null;d.afterScroll.push((M,H)=>{if(E!==null)clearTimeout(E);E=setTimeout(()=>{E=null,V(),W()},I)}),d.destroyHandlers.push(()=>{if(E!==null)clearTimeout(E),E=null;W()});let X=()=>{if(d.state.isDestroyed)return;T=null;let{renderRange:M}=d.state.viewportState;if(M.end>0){let H=v(M);d.dataManager.ensureRange(H.start,H.end).catch((w)=>{m.emit("error",{error:w,context:"ensureRange"})})}V()};window.addEventListener("online",X),d.destroyHandlers.push(()=>{window.removeEventListener("online",X)}),m.on("load:start",()=>{d.dom.root.setAttribute("aria-busy","true")}),m.on("load:end",()=>{d.dom.root.removeAttribute("aria-busy")}),d.methods.set("loadVisibleRange",async()=>{T=null,R=null,d.forceRender();let{renderRange:M}=d.state.viewportState;if(M.end>0){let H=v(M);m.emit("load:start",{offset:H.start,limit:H.end-H.start+1}),await d.dataManager.ensureRange(H.start,H.end)}}),d.methods.set("reload",async(M)=>{T=null,R=null;let H=M?.snapshot,w=H!=null&&(H.total??0)>0&&H.index>0,g=w||M?.skipInitialLoad===!0;if(d.invalidateRendered(),await d.dataManager.reload(),!w)d.scrollController.scrollTo(0);if(!g){m.emit("load:start",{offset:0,limit:He}),await d.dataManager.loadInitial(),d.forceRender();let{renderRange:x}=d.state.viewportState;if(x.end>0){let y=v(x);await d.dataManager.ensureRange(y.start,y.end)}}if(w){let x=d.methods.get("restoreScroll");if(x)x(H)}});let j=!1;if(d.methods.set("_cancelAutoLoad",()=>{j=!0}),i)queueMicrotask(()=>{if(j)return;m.emit("load:start",{offset:0,limit:He}),d.dataManager.loadInitial().catch((M)=>{m.emit("error",{error:M,context:"loadInitial"})})});else if(s!==void 0)d.dataManager.setTotal(s)}}},jt=()=>{let e=null;return{name:"withPage",priority:5,setup(l){let{dom:r,state:t,config:s,emitter:i}=l;if(r.root.style.overflow="visible",r.root.style.height="auto",s.horizontal)r.viewport.style.overflowX="visible",r.viewport.style.overflowY="visible";else r.viewport.style.overflow="visible";r.viewport.classList.remove(`${s.classPrefix}-viewport--custom-scrollbar`),l.disableViewportResize(),l.disableWheelHandler(),l.setScrollTarget(window),l.setScrollFns(()=>{let d=r.viewport.getBoundingClientRect();if(s.horizontal)return Math.max(0,-d.left);else return Math.max(0,-d.top)},(d)=>{let m=r.viewport.getBoundingClientRect();if(s.horizontal){let z=m.left+window.scrollX;window.scrollTo(z+d,window.scrollY)}else{let z=m.top+window.scrollY;window.scrollTo(window.scrollX,z+d)}}),l.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),t.viewportState.containerSize=window.innerHeight;let{innerHeight:o,innerWidth:u}=window,a=()=>{let{innerWidth:d,innerHeight:m}=window,z=s.horizontal?d:m,c=s.horizontal?u:o;if(Math.abs(z-c)<=1)return;o=m,u=d,t.viewportState.containerSize=m,i.emit("resize",{width:d,height:m});for(let v=0;v<l.resizeHandlers.length;v++)l.resizeHandlers[v](d,m);l.renderIfNeeded()};window.addEventListener("resize",a,{passive:!0}),e=()=>{window.removeEventListener("resize",a)},l.destroyHandlers.push(e)},destroy(){if(e)e(),e=null}}},dt=(e,l)=>{let r=0,t=e.length-1;while(r<t){let s=r+t+1>>>1;if(e[s].headerLayoutIndex<=l)r=s;else t=s-1}return r},At=(e,l)=>{let r=0,t=e.length-1;while(r<t){let s=r+t+1>>>1;if(e[s].firstDataIndex<=l)r=s;else t=s-1}return r},Rt=(e,l)=>{if(e===0)return[];let r=[],t=l(0),s=0,i=0;for(let o=1;o<e;o++){let u=l(o);if(u!==t){let a=o-s;r.push({key:t,groupIndex:r.length,headerLayoutIndex:i,firstDataIndex:s,count:a}),i=i+1+a,t=u,s=o}}return r.push({key:t,groupIndex:r.length,headerLayoutIndex:i,firstDataIndex:s,count:e-s}),r},kt=(e,l)=>{if(e.length===0||l.length===0)return[];let r=e.length+l.length,t=Array(r),s=0;for(let i of l){t[s]={id:`__group_header_${i.groupIndex}`,__groupHeader:!0,groupKey:i.key,groupIndex:i.groupIndex},s++;for(let o=0;o<i.count;o++)t[s]=e[i.firstDataIndex+o],s++}return t},Ht=(e,l,r=!1)=>{let t=typeof l==="number"?(s)=>l:l;return(s)=>{let i=e.getEntry(s);if(i.type==="header"){if(r&&i.group.groupIndex===0)return 0;return e.getHeaderHeight(i.group.groupIndex)}return t(i.dataIndex)}},il=(e,l)=>{let r=Rt(e,l.getGroupForIndex),t=e+r.length,s=l.header?.height??l.header?.width??l.headerHeight;return{get totalEntries(){return t},get groupCount(){return r.length},get groups(){return r},getEntry:(i)=>{if(r.length===0)return{type:"item",dataIndex:i,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let o=dt(r,i),u=r[o];if(i===u.headerLayoutIndex)return{type:"header",group:u};let a=i-u.headerLayoutIndex-1;return{type:"item",dataIndex:u.firstDataIndex+a,group:u}},layoutToDataIndex:(i)=>{if(r.length===0)return i;let o=dt(r,i),u=r[o];if(i===u.headerLayoutIndex)return-1;let a=i-u.headerLayoutIndex-1;return u.firstDataIndex+a},dataToLayoutIndex:(i)=>{if(r.length===0)return i;let o=At(r,i),u=r[o],a=i-u.firstDataIndex;return u.headerLayoutIndex+1+a},getGroupAtLayoutIndex:(i)=>{if(r.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let o=dt(r,i);return r[o]},getGroupAtDataIndex:(i)=>{if(r.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let o=At(r,i);return r[o]},getHeaderHeight:typeof s==="number"?(i)=>s:(i)=>{let o=r[i];if(!o)return 0;return s(o.key,i)},rebuild:(i)=>{r=Rt(i,l.getGroupForIndex),t=i+r.length}}},al=(e,l,r,t,s,i=!1,o=0)=>{let u=i?"width":"height",a=i?"height":"width",d=i?"X":"Y",m=(f,L)=>{f.style[u]=`${L}px`},z=document.createElement("div");z.className=`${s}-sticky-header`,z.setAttribute("role","presentation"),z.setAttribute("aria-hidden","true"),z.style.cssText="position:relative;z-index:5;pointer-events:none;overflow:hidden;"+(i?`top:0;bottom:0;left:${o||0}px`:`top:${o||0}px`);let c=()=>{let f=document.createElement("div");return f.className="sticky-group",f.style.position="absolute",f.style.willChange="transform",f.style[a]="100%",f},v=c(),P=c();z.append(v,P),e.insertBefore(z,e.firstChild);let T=v,R=P,$=l.groups,_=[],Z=[],q=0,W=()=>{$=l.groups,q=$.length,_=Array(q),Z=Array(q);for(let f=0;f<q;f++)_[f]=r.getOffset($[f].headerLayoutIndex),Z[f]=l.getHeaderHeight(f)};W();let V=-1,I=0,E=-1,X=!1,j=0,M=!1,H=(f,L)=>{t(f,L);let h=Z[L];return m(f,h),h},w=(f)=>{f.replaceChildren(),f.style.transform=""},g=(f)=>{if(f===V)return;if(V=f,I=0,f<0||f>=q){w(T);return}I=H(T,f),m(z,I),T.style.transform=""},x=(f)=>{if(f===j)return;j=f;let L=Math.round(f);T.style.transform=`translate${d}(${L}px)`,R.style.transform=`translate${d}(${L+I}px)`},y=()=>{j=0,T.style.transform="",R.style.transform=""},D=()=>{if(!M)return;let f=T;T=R,R=f,V=E,I=V>=0?Z[V]:0,m(z,I),w(R),E=-1,M=!1,y()},Y=()=>{if(!M)return;w(R),E=-1,M=!1,y()},B=()=>{if(X)return;X=!0,z.style.display=""},Q=()=>{if(!X)return;X=!1,z.style.display="none",w(T),V=-1,I=0,Y()},S=(f)=>{if(q===0){Q();return}if(f<_[0]){Q();return}let L=0,h=q-1;while(L<h){let A=L+h+1>>>1;if(_[A]+Z[A]<=f)L=A;else h=A-1}if(!X)B();g(L);let b=L+1;if(b<q){let A=_[b]-f;if(A<=0&&A>-I){if(E!==b||!M)E=b,H(R,b),M=!0;x(A)}else if(A<=-I){if(M)D()}else if(M)Y()}else if(M)Y()},p=()=>{W();let f=V;if(V=-1,I=0,f>=0)g(f)},n=()=>{z.remove(),V=-1,I=0,E=-1,X=!1,M=!1};return z.style.display="none",{update:S,refresh:p,show:B,hide:Q,destroy:n}},Te=(e)=>{return e!==null&&typeof e==="object"&&e.__groupHeader===!0},nl=(e,l,r,t,s,i)=>{if(t===0)return 0;let o=Math.max(0,Math.min(e,t-1)),u=l.getOffset(o),a=l.getSize(o),d=l.getTotalSize(),m=Math.max(0,d-r),z;switch(i){case"center":z=u-r/2+a/2;break;case"end":z=u-r+a;break;case"start":default:z=u;break}return Math.max(0,Math.min(z,m))},Zt=(e,l,r,t,s="start",i,o=nl)=>{return o(e,l,r,t,i,s)},sl=(e,l)=>{if(e.header){let r=l?e.header.width??e.header.height:e.header.height??e.header.width;return{...e,header:{...e.header,height:r}}}if(e.headerHeight!=null&&e.headerTemplate)return{...e,header:{height:e.headerHeight,template:e.headerTemplate}};return e},Kt=(e)=>{let l=e.header,r=l?l.height??l.width:e.headerHeight,t=l?.template??e.headerTemplate;if(!e.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(r==null||r<=0)throw Error("[vlist/builder] withGroups: header.height must be a positive number");if(!t)throw Error("[vlist/builder] withGroups: header.template is required");let s=null,i=null,o=[],u=[];return{name:"withGroups",priority:10,setup(a){let{dom:d,config:m,rawConfig:z}=a,{classPrefix:c}=m,v=sl(e,m.horizontal),P=z.item.height;o=z.items?[...z.items]:[];let T=o.length,R={getGroupForIndex:v.getGroupForIndex,header:{height:v.header.height,template:v.header.template},sticky:v.sticky??!1};s=il(T,R),u=kt(o,s.groups);let $=v.sticky!==!1,_=Ht(s,P,$);a.setSizeConfig(_),a.rebuildSizeCache(u.length),a.dataManager.setItems(u,0,u.length);let Z=z.item.template,{template:q}=v.header,W=(B,Q,S)=>{if(Te(B))return q(B.groupKey,B.groupIndex);return Z(B,Q,S)},V=a.methods.get("_getGridLayout"),I=a.methods.get("_replaceGridRenderer"),E=a.methods.get("_updateGridLayoutForGroups"),X=a.methods.get("_createGridRenderer"),j=a.methods.get("_getTableLayout"),M=a.methods.get("_updateTableForGroups"),H=a.methods.get("_getTableHeaderHeight");if(V&&I&&X){if(E)E((S)=>{let p=u[S];return!!(p&&Te(p))});let B=V(),Q=X(d.items,W,a.sizeCache,B,c,a.getContainerWidth(),()=>a.dataManager.getTotal(),m.ariaIdPrefix);I(Q)}else if(j&&M)M((B)=>Te(B),v.header.template);else a.replaceTemplate(W);let w=H?H():0;if(d.root.classList.add(`${c}--grouped`),v.sticky!==!1)if(a.methods.set("_getStickyHeaderHeight",()=>v.header.height),!m.horizontal)d.viewport.style.height=`calc(100% - ${v.header.height}px)`;else d.viewport.style.width=`calc(100% - ${v.header.height}px)`;if(v.sticky!==!1){let B=v.header.template,Q=(p,n)=>{let f=s.groups[n];if(!f)return;let L=B(f.key,f.groupIndex);if(typeof L==="string")p.innerHTML=L;else p.replaceChildren(L)};i=al(d.root,s,a.sizeCache,Q,c,m.horizontal,w);let S=i;a.afterScroll.push((p,n)=>{S.update(p)}),i.update(a.scrollController.getScrollTop())}let g=z.item?.striped,x=()=>{if(g!=="data"&&g!=="even"&&g!=="odd")return;let B=new Int32Array(u.length),Q=g==="odd"?1:0,S=0;for(let p=0;p<u.length;p++)if(Te(u[p])){if(B[p]=-1,g==="even"||g==="odd")S=0}else B[p]=S+++Q;a.setStripeIndexFn((p)=>{if(p<0||p>=B.length)return p;return B[p]})};x();let y=()=>{if(!s)return;s.rebuild(o.length),u=kt(o,s.groups);let B=Ht(s,P,$);if(a.setSizeConfig(B),a.rebuildSizeCache(u.length),a.dataManager.setItems(u,0,u.length),x(),i)i.refresh()};a.methods.set("setItems",(B)=>{o=B.slice(),y()}),a.methods.set("appendItems",(B)=>{o.push(...B),y()}),a.methods.set("prependItems",(B)=>{o.unshift(...B),y()}),a.methods.set("removeItem",(B)=>{o=o.filter((Q)=>Q.id!==B),y()});let{animateScroll:D,cancelScroll:Y}=ct(a.scrollController,a.renderIfNeeded);a.methods.set("scrollToIndex",(B,Q)=>{let S=s.dataToLayoutIndex(B),{align:p,behavior:n,duration:f}=je(Q),L=a.dataManager.getTotal(),h=a.adjustScrollPosition(Zt(S,a.sizeCache,a.state.viewportState.containerSize,L,p,a.getCachedCompression()));if(n==="smooth")D(a.scrollController.getScrollTop(),h,f);else Y(),a.scrollController.scrollTo(h)}),a.methods.set("_getItems",()=>o),a.methods.set("_getTotal",()=>o.length),a.methods.set("_isGroupHeader",(B)=>{let Q=u[B];return!!(Q&&Te(Q))}),a.destroyHandlers.push(()=>{if(Y(),i)i.destroy(),i=null;d.root.classList.remove(`${c}--grouped`)})},destroy(){if(i)i.destroy(),i=null}}},ol=(e)=>{let l=Math.max(1,Math.floor(e.columns)),r=e.gap??0,t=e.isHeaderFn,s={row:0,col:0},i=(c)=>{if(c<=0)return 0;if(!t)return Math.ceil(c/l);let v=0,P=0,T=0;for(let R=0;R<c;R++)if(t(R)){if(T++,P>0)v++,P=0;v++,P=0}else if(P++,P>=l)v++,P=0;if(P>0)v++;return v},o=(c)=>{return s.row=u(c),s.col=a(c),s},u=(c)=>{if(!t)return Math.floor(c/l);let v=0,P=0;for(let T=0;T<=c;T++)if(t(T)){if(P>0)v++,P=0;if(T===c)return v;v++,P=0}else{if(T===c)return v;if(P++,P>=l)v++,P=0}return console.warn(`⚠️ getRow(${c}) fell through - returning ${v}`),v},a=(c)=>{if(!t)return c%l;if(t(c))return 0;let v=0;for(let P=0;P<=c;P++)if(t(P))v=0;else{if(P===c)return v;if(v++,v>=l)v=0}return v},d=(c,v,P)=>{if(P<=0)return{start:0,end:-1};if(!t){let Z=Math.max(0,c*l),q=Math.min(P-1,(v+1)*l-1);return{start:Z,end:q}}let T=-1,R=-1,$=0,_=0;for(let Z=0;Z<P;Z++){if(t(Z)){if(_>0)$++,_=0;if($>=c&&$<=v){if(T===-1)T=Z;R=Z}$++,_=0}else{if($>=c&&$<=v){if(T===-1)T=Z;R=Z}if(_++,_>=l)$++,_=0}if($>v&&_===0)break}if(T===-1)return{start:0,end:-1};return{start:T,end:R}},m=(c,v,P)=>{if(v<0||v>=l)return-1;let T=c*l+v;if(T<0||T>=P)return-1;return T},z=(c)=>{let v=(l-1)*r;return Math.max(0,(c-v)/l)};return{get columns(){return l},get gap(){return r},update:(c)=>{if(c.columns!==void 0)l=Math.max(1,Math.floor(c.columns));if(c.gap!==void 0)r=c.gap;if(c.isHeaderFn!==void 0)t=c.isHeaderFn},getTotalRows:i,getPosition:o,getRow:u,getCol:a,getItemRange:d,getItemIndex:m,getColumnWidth:z,getColumnOffset:(c,v)=>{let P=z(v);return c*(P+r)}}},dl=(e=200)=>{let l=[];return{acquire:()=>{let r=l.pop();if(r)return r;let t=document.createElement("div");return t.setAttribute("role","option"),t},release:(r)=>{if(r.remove(),l.length<e)r.className="",r.textContent="",r.removeAttribute("style"),r.removeAttribute("data-index"),r.removeAttribute("data-id"),r.removeAttribute("data-row"),r.removeAttribute("data-col"),l.push(r)},clear:()=>{l.length=0}}},ul=1,Et=(e,l,r,t,s,i,o,u,a=!1)=>{let d=dl(),m=new Map,z=i,c=!1,v=0,P="",T=-1,R={selected:!1,focused:!1},$=(p,n)=>{return R.selected=p,R.focused=n,R},_=`${s}-item ${s}-grid-item`,Z=`${s}-item--selected`,q=`${s}-item--focused`,W=`${s}-item--placeholder`,V=`${s}-item--replaced`,I=(p,n)=>{if(typeof n==="string")p.innerHTML=n;else p.replaceChildren(n)},E=(p,n,f)=>{p.classList.toggle(Z,n),p.classList.toggle(q,f)},X=(p,n)=>{let f=t.getRow(p);if(n?.compression?.isCompressed)return Vt(f,n.scrollPosition,r,n.totalItems,n.containerSize,n.compression,n.rangeStart);return r.getOffset(f)},j=(p,n)=>{let f=c&&t.getCol(p)===0,L=f?0:t.getCol(p),h=f?0:t.getColumnOffset(L,z),b;if(c){let A=t.getRow(p),C=0,O=new Set;for(let N=0;N<p;N++){let J=t.getRow(N);if(J<A&&!O.has(J)){let te=r.getSize(N);C+=te,O.add(J)}}b=C}else b=X(p,n);if(a)return`translate(${Math.round(b)}px, ${Math.round(h)}px)`;return`translate(${Math.round(h)}px, ${Math.round(b)}px)`},M=(p,n)=>{p.style.transform=n},H=(p,n)=>{let f=p.dataset.id?.startsWith("__group_header"),L=f?z:t.getColumnWidth(z),h;if(c||f)h=r.getSize(n)-t.gap;else{let b=t.getRow(n);h=r.getSize(b)-t.gap}if(a)p.style.width=`${h}px`,p.style.height=`${L}px`;else p.style.width=`${L}px`,p.style.height=`${h}px`},w=(p,n,f,L,h)=>{let b=d.acquire(),A=$(f,L);if(b.className=_,b.dataset.index=String(p),b.dataset.id=String(n.id),b.dataset.row=String(t.getRow(p)),b.dataset.col=String(t.getCol(p)),b.ariaSelected=String(f),u)b.id=`${u}-item-${p}`;if(o){let O=o();if(O!==T)T=O,P=String(O);b.setAttribute("aria-setsize",P),b.setAttribute("aria-posinset",String(p+1))}H(b,p);let C=l(n,p,A);if(I(b,C),String(n.id).startsWith(Le))b.classList.add(W);return E(b,f,L),M(b,h),{element:b,lastItemId:n.id,lastSelected:f,lastFocused:L,lastTransform:h,lastSeenFrame:v}},g=(p,n,f,L,h)=>{if(v++,n.start===0&&p.length>0)c=Te(p[0]);for(let[C,O]of m)if(C>=n.start&&C<=n.end)O.lastSeenFrame=v;else if(v-O.lastSeenFrame>ul)d.release(O.element),m.delete(C);let b=!1;if(o){let C=o();if(C!==T)T=C,P=String(C),b=!0}let A=null;for(let C=n.start;C<=n.end;C++){let O=C-n.start,N=p[O];if(!N){console.warn(`⚠️ RENDER: Missing item at index ${C} (range: ${n.start}-${n.end}, items.length: ${p.length})`);continue}let J=f.has(N.id),te=C===L,F=m.get(C);if(F){let K=F.lastItemId!==N.id,ee=F.lastSelected!==J,re=F.lastFocused!==te;if(K){let ae=String(F.lastItemId),ce=String(N.id),we=ae.startsWith(Le),oe=ce.startsWith(Le);if(!oe&&Ge(f,C,N.id))J=!0;let ve=$(J,te),Se=l(N,C,ve);if(I(F.element,Se),F.element.dataset.id=ce,F.element.dataset.row=String(t.getRow(C)),F.element.dataset.col=String(t.getCol(C)),H(F.element,C),F.element.classList.toggle(W,oe),we&&!oe)F.element.classList.add(V),setTimeout(()=>F.element.classList.remove(V),300);F.lastItemId=N.id}if(K||ee||re)E(F.element,J,te),F.element.ariaSelected=String(J),F.lastSelected=J,F.lastFocused=te;let le=j(C,h);if(F.lastTransform!==le)M(F.element,le),F.lastTransform=le;if(b)F.element.setAttribute("aria-setsize",P)}else{if(Ge(f,C,N.id))J=!0;let K=j(C,h),ee=w(C,N,J,te,K);if(!A)A=document.createDocumentFragment();A.appendChild(ee.element),m.set(C,ee)}}if(A)e.appendChild(A)},x=(p)=>{for(let[n,f]of m){let L=j(n,p);if(f.lastTransform!==L)M(f.element,L),f.lastTransform=L}},y=(p,n,f,L)=>{let h=m.get(p);if(!h)return;let b=$(f,L),A=l(n,p,b);I(h.element,A),E(h.element,f,L),h.element.dataset.id=String(n.id),h.element.ariaSelected=String(f),H(h.element,p),h.lastItemId=n.id,h.lastSelected=f,h.lastFocused=L},D=(p,n,f)=>{let L=m.get(p);if(!L)return;let h=L.lastSelected!==n,b=L.lastFocused!==f;if(h||b)E(L.element,n,f),L.lastSelected=n,L.lastFocused=f},Y=(p)=>{return m.get(p)?.element},B=(p)=>{if(Math.abs(p-z)<1)return;z=p;for(let[n,f]of m){H(f.element,n);let L=j(n);M(f.element,L),f.lastTransform=L}},Q=()=>{ft(e,m.keys(),(p)=>m.get(p)?.element)},S=()=>{for(let[,p]of m)d.release(p.element);m.clear()};return{render:g,updatePositions:x,updateItem:y,updateItemClasses:D,getElement:Y,sortDOM:Q,updateContainerWidth:B,clear:S,destroy:()=>{S(),d.clear()}}},fl=new Set,Ut=(e)=>{if(!e.columns||e.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let l=null,r=null;return{name:"withGrid",priority:10,conflicts:["withTable","withMasonry"],setup(t){let{dom:s,emitter:i,config:o,rawConfig:u}=t,{classPrefix:a}=o;if(o.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let d=o.horizontal,m=_t($e(u.padding),d),z=()=>{return(d?s.viewport.clientHeight:t.getContainerWidth())-m},c=u.items?.some((S)=>S.__groupHeader===!0),v={columns:e.columns,gap:e.gap??0};if(c)v.isHeaderFn=(S)=>{let p=t.dataManager.getItem(S);return!!(p&&p.__groupHeader===!0)};l=ol(v);let P=l.gap;t.setVirtualTotalFn(()=>{let S=t.dataManager.getTotal();return l.getTotalRows(S)}),t.setItemToScrollIndexFn((S)=>Math.floor(S/v.columns)),t.methods.set("_getNavTotal",()=>t.dataManager.getTotal()),t.methods.set("_getNavDelta",()=>d?{ud:1,lr:v.columns,cols:v.columns}:{ud:v.columns,lr:1,cols:v.columns});let T=u.item,R=o.horizontal?T.width:T.height,$={containerWidth:z(),columns:l.columns,gap:l.gap},_={containerWidth:0,columns:0,gap:0,columnWidth:0,row:0,column:0,totalRows:0,totalColumns:0};if(typeof R==="function")t.setSizeConfig((S)=>{let p=$.containerWidth-2,n=($.columns-1)*$.gap;return _.containerWidth=$.containerWidth,_.columns=$.columns,_.gap=$.gap,_.columnWidth=(p-n)/$.columns,_.row=l.getRow(S),_.column=l.getCol(S),_.totalRows=l.getTotalRows(t.dataManager.getTotal()),_.totalColumns=$.columns,R(S,_)+$.gap});else if(P>0)t.setSizeConfig(R+P);if(t.rebuildSizeCache(),P>0){let S=t.sizeCache.getTotalSize;t.sizeCache.getTotalSize=()=>{let p=S();return p>0?p-$.gap:0}}s.root.classList.add(`${a}--grid`);let Z=z(),q=u.item.template,W=()=>{r=Et(s.items,q,t.sizeCache,l,a,Z,()=>t.dataManager.getTotal(),o.ariaIdPrefix,o.horizontal),t.replaceRenderer(r)};W(),t.setUpdateItemClassesFn((S,p,n)=>{r?.updateItemClasses(S,p,n)}),t.methods.set("_updateRenderedItem",(S,p,n,f)=>{r?.updateItem(S,p,n,f)}),t.methods.set("_getGridLayout",()=>l),t.methods.set("_getGridConfig",()=>v),t.methods.set("_replaceGridRenderer",(S)=>{r=S}),t.methods.set("_createGridRenderer",Et),t.methods.set("_updateGridLayoutForGroups",(S)=>{l.update({isHeaderFn:S});let p=t.dataManager.getTotal(),n=0;for(let f=0;f<p;f++)if(l.getCol(f)===0){let L=t.sizeCache.getSize(f);n+=L}t.sizeCache.getTotalSize=()=>n,t.updateContentSize(n),W()}),t.methods.set("updateGrid",(S)=>{if(S.columns!==void 0){if(!Number.isInteger(S.columns)||S.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");v.columns=S.columns}if(S.gap!==void 0){if(S.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");v.gap=S.gap}if(l)l.update(v);let p=z();if($.containerWidth=p,$.columns=v.columns,$.gap=v.gap??0,r)r.updateContainerWidth(p);t.rebuildSizeCache(),t.updateContentSize(t.sizeCache.getTotalSize()),t.updateCompressionMode();for(let n=0;n<t.contentSizeHandlers.length;n++)t.contentSizeHandlers[n]();if(r)r.clear();t.forceRender()});let V=null,I=null,E=!1,X=()=>{if(E)return;E=!0,V=t.methods.get("_getSelectedIds")??null,I=t.methods.get("_getFocusedIndex")??null},j=-1,M=-1,H=!0,w=o.overscan,g={start:0,end:0},x={start:0,end:0},y=()=>{if(t.state.isDestroyed)return;let S=t.scrollController.getScrollTop(),p=t.state.viewportState.containerSize;if(!H&&S===j&&p===M)return;j=S,M=p,H=!1;let n=t.getVirtualTotal();if(n===0||p===0)g.start=0,g.end=0;else g.start=Math.max(0,t.sizeCache.indexAtOffset(S)),g.end=Math.min(n-1,Math.max(0,t.sizeCache.indexAtOffset(S+p-1)));x.start=Math.max(0,g.start-w),x.end=Math.min(n-1,g.end+w);let f=t.state.viewportState;f.scrollPosition=S,f.visibleRange.start=g.start,f.visibleRange.end=g.end,f.renderRange.start=x.start,f.renderRange.end=x.end;let L=t.state.lastRenderRange,h=f.isCompressed,b=t.dataManager.getTotal(),A=l.getItemRange(x.start,x.end,b),C=t.dataManager.getItemsInRange(A.start,A.end),O=h?t.getCompressionContext():void 0;X();let N=V?V():fl,J=I?I():-1;if(r.render(C,A,N,J,O),L.start!==x.start||L.end!==x.end)L.start=x.start,L.end=x.end,i.emit("range:change",{range:{start:x.start,end:x.end}})},D=()=>{if(t.state.isDestroyed)return;t.state.lastRenderRange.start=-1,t.state.lastRenderRange.end=-1,H=!0,y()};t.setRenderFns(y,D);let Y=typeof R==="function";t.resizeHandlers.push((S,p)=>{let n=(d?p:S)-m;if(Math.abs(n-$.containerWidth)<1)return;if($.containerWidth=n,r)r.updateContainerWidth(n);if(Y){t.rebuildSizeCache(),t.updateContentSize(t.sizeCache.getTotalSize()),t.updateCompressionMode();for(let f=0;f<t.contentSizeHandlers.length;f++)t.contentSizeHandlers[f]();if(r)r.clear();t.forceRender()}});let{animateScroll:B,cancelScroll:Q}=ct(t.scrollController,t.renderIfNeeded);if(t.methods.set("cancelScroll",Q),t.methods.set("scrollToIndex",(S,p)=>{let n=Math.floor(S/e.columns),{align:f,behavior:L,duration:h}=je(p),b=t.dataManager.getState(),A=l.getTotalRows(b.total),C=Math.max(0,Math.min(n,A-1)),O=t.adjustScrollPosition(Zt(C,t.sizeCache,t.state.viewportState.containerSize,A,f,t.getCachedCompression()));if(L==="smooth")B(t.scrollController.getScrollTop(),O,h);else Q(),t.scrollController.scrollTo(O)}),!t.methods.has("_getTotal"))t.methods.set("_getTotal",()=>t.dataManager.getTotal());t.idleHandlers.push(()=>{if(r)r.sortDOM()}),t.destroyHandlers.push(()=>{if(Q(),r)r.destroy(),r=null;s.root.classList.remove(`${a}--grid`)})},destroy(){if(r)r.destroy(),r=null}}},cl=(e)=>{let l=Math.max(1,Math.floor(e.columns)),r=e.gap??0,t=e.containerSize,s=0,i=[],o=()=>{let T=(l-1)*r;s=Math.max(0,(t-T)/l),i=Array(l);let R=s+r;for(let $=0;$<l;$++)i[$]=$*R};o();let u=[],a=0,d=[],m=(T)=>{let R=0,$=T[0];for(let _=1;_<T.length;_++){let Z=T[_];if(Z<$)$=Z,R=_}return R},z=(T,R)=>{if(T<=0)return a=0,u=[],[];let $=Array(l).fill(0),_=Array(l);for(let W=0;W<l;W++)_[W]=[];let Z=Array(T);for(let W=0;W<T;W++){let V=m($),I=R(W),E=$[V];Z[W]={index:W,x:i[V],y:E,lane:V,size:I,crossSize:s},_[V].push(W),$[V]=E+I+r}u=_;let q=0;for(let W=0;W<l;W++){let V=$[W],I=V>0?V-r:0;if(I>q)q=I}return a=q,Z},c=(T)=>{if(T.length===0)return a>0?a:0;if(a>0)return a;let R=Array(l).fill(0);for(let _ of T){let Z=_.y+_.size,q=R[_.lane];if(Z>q)R[_.lane]=Z}let $=0;for(let _=0;_<l;_++)if(R[_]>$)$=R[_];return $},v=(T,R,$)=>{if(T.length===0||$<=R)return d.length=0,d;if(u.length===0||u.length!==l)return P(T,R,$);d.length=0;for(let _=0;_<l;_++){let Z=u[_],q=Z.length;if(q===0)continue;let W=0,V=q;while(W<V){let I=W+V>>>1,E=T[Z[I]];if(E.y+E.size<=R)W=I+1;else V=I}for(let I=W;I<q;I++){let E=T[Z[I]];if(E.y>=$)break;d.push(E)}}return d},P=(T,R,$)=>{let _=[];for(let Z of T)if(Z.y+Z.size>R&&Z.y<$)_.push(Z);return _};return{get columns(){return l},get gap(){return r},get containerSize(){return t},update:(T)=>{let R=!1;if(T.columns!==void 0){let $=Math.max(1,Math.floor(T.columns));if($!==l)l=$,R=!0}if(T.gap!==void 0&&T.gap!==r)r=T.gap,R=!0;if(T.containerSize!==void 0&&T.containerSize!==t)t=T.containerSize,R=!0;if(R)o()},calculateLayout:z,getTotalSize:c,getVisibleItems:v}},ml=(e=200)=>{let l=[];return{acquire:()=>{let r=l.pop();if(r)return r;let t=document.createElement("div");return t.setAttribute("role","option"),t},release:(r)=>{if(r.remove(),l.length<e)r.className="",r.textContent="",r.removeAttribute("style"),r.removeAttribute("data-index"),r.removeAttribute("data-id"),r.removeAttribute("data-lane"),l.push(r)},clear:()=>{l.length=0}}},hl=1,gl=(e,l,r,t=!1,s,i)=>{let o=ml(),u=new Map,a=new Set,d=0,m="",z=-1,c={selected:!1,focused:!1},v=(E,X)=>{return c.selected=E,c.focused=X,c},P=`${r}-item ${r}-masonry-item`,T=`${r}-item--selected`,R=`${r}-item--focused`,$=(E,X)=>{if(typeof X==="string")E.innerHTML=X;else E.replaceChildren(X)},_=(E,X,j)=>{E.classList.toggle(T,X),E.classList.toggle(R,j)},Z=(E,X)=>{if(t)E.style.transform=`translate(${Math.round(X.y)}px, ${Math.round(X.x)}px)`;else E.style.transform=`translate(${Math.round(X.x)}px, ${Math.round(X.y)}px)`},q=(E,X)=>{if(t)E.style.width=`${X.size}px`,E.style.height=`${X.crossSize}px`;else E.style.width=`${X.crossSize}px`,E.style.height=`${X.size}px`},W=(E,X,j,M,H)=>{let w=o.acquire(),g=v(M,H);if(w.className=P,w.dataset.index=String(E),w.dataset.id=String(X.id),w.dataset.lane=String(j.lane),w.ariaSelected=String(M),i)w.id=`${i}-item-${E}`;if(s){let y=s();if(y!==z)z=y,m=String(y);w.setAttribute("aria-setsize",m),w.setAttribute("aria-posinset",String(E+1))}q(w,j);let x=l(X,E,g);return $(w,x),_(w,M,H),Z(w,j),{element:w,lastItemId:X.id,lastSelected:M,lastFocused:H,lastY:j.y,lastX:j.x,lastSize:j.size,lastCrossSize:j.crossSize,lastSeenFrame:d}},V=(E,X,j,M)=>{d++,a.clear();for(let w=0;w<X.length;w++)a.add(X[w].index);for(let[w,g]of u)if(a.has(w))g.lastSeenFrame=d;else if(d-g.lastSeenFrame>hl)o.release(g.element),u.delete(w);let H=null;for(let w=0;w<X.length;w++){let g=X[w],x=g.index,y=E(x);if(!y)continue;let D=j.has(y.id),Y=x===M,B=u.get(x);if(B){let Q=B.lastItemId!==y.id,S=B.lastSelected!==D,p=B.lastFocused!==Y,n=B.lastY!==g.y||B.lastX!==g.x,f=B.lastSize!==g.size||B.lastCrossSize!==g.crossSize;if(Q){let L=v(D,Y),h=l(y,x,L);$(B.element,h),B.element.dataset.id=String(y.id),B.lastItemId=y.id}if(Q||S||p)_(B.element,D,Y),B.element.ariaSelected=String(D),B.lastSelected=D,B.lastFocused=Y;if(f)q(B.element,g),B.lastSize=g.size,B.lastCrossSize=g.crossSize;if(n)Z(B.element,g),B.lastY=g.y,B.lastX=g.x}else{let Q=W(x,y,g,D,Y);if(!H)H=document.createDocumentFragment();H.appendChild(Q.element),u.set(x,Q)}}if(H)e.appendChild(H)},I=()=>{for(let{element:E}of u.values())o.release(E);u.clear(),e.innerHTML=""};return{render:V,getElement:(E)=>u.get(E)?.element,updateItemClasses:(E,X,j)=>{let M=u.get(E);if(!M)return;let H=M.lastSelected!==X,w=M.lastFocused!==j;if(H||w)_(M.element,X,j),M.lastSelected=X,M.lastFocused=j},sortDOM:()=>{ft(e,u.keys(),(E)=>u.get(E)?.element)},clear:I,destroy:()=>{I(),o.clear()}}},pl=new Set,vl=100,Yt=(e)=>{if(!e.columns||e.columns<1)throw Error("[vlist/builder] withMasonry: columns must be a positive integer >= 1");let l=null,r=null,t=[];return{name:"withMasonry",priority:10,conflicts:["withGrid","withTable"],setup(s){let{dom:i,emitter:o,config:u,rawConfig:a}=s,d=u.classPrefix,m=u.horizontal;if(u.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");i.root.classList.add(`${d}--masonry`);let z=$e(a.padding),c=_t(z,m),v=ut(z,m),P=()=>{return(m?i.viewport.clientHeight:i.viewport.clientWidth)-c},T={columns:e.columns,gap:e.gap??0,containerSize:P()};l=cl(T);let R=a.item,$=m&&a.item.width?a.item.width:R.height,_={containerWidth:0,columns:0,gap:0,columnWidth:0},Z=typeof $==="function"?(A)=>$(A,_):()=>$,q=()=>{let A=s.dataManager.getTotal(),C=l;_.containerWidth=C.containerSize,_.columns=C.columns,_.gap=C.gap;let O=(C.columns-1)*C.gap;_.columnWidth=Math.max(0,(_.containerWidth-O)/C.columns),t=C.calculateLayout(A,Z),X();let N=l.getTotalSize(t);s.sizeCache.getTotalSize=()=>N,s.updateContentSize(N)},W=a.item.template;r=gl(i.items,W,d,m,()=>s.dataManager.getTotal(),u.ariaIdPrefix),s.setUpdateItemClassesFn((A,C,O)=>{r?.updateItemClasses(A,C,O)});let V=[],I=new Int32Array(0),E=[],X=()=>{let A=T.columns,C=t.length;if(V=Array.from({length:A},()=>[]),I.length<C)I=new Int32Array(C);for(let O=0;O<C;O++){let N=t[O],J=V[N.lane].length;V[N.lane].push(O),I[O]=J}E=Array(A);for(let O=0;O<A;O++){let N=V[O],J=new Float64Array(N.length);for(let te=0;te<N.length;te++){let F=t[N[te]];J[te]=F.y+F.size*0.5}E[O]=J}};s.methods.set("_getNavTotal",()=>s.dataManager.getTotal());let j=(A,C)=>{let O=A.length;if(O===0)return-1;if(O===1)return 0;let N=0,J=O-1;while(N<J){let te=N+J>>1;if(A[te]<C)N=te+1;else J=te}if(N>0&&Math.abs(A[N-1]-C)<=Math.abs(A[N]-C))return N-1;return N};s.methods.set("_navigate",(A,C,O)=>{let N=t[A];if(!N)return A;let J=N.lane,te=T.columns,F=I[A],K=V[J];switch(m?C==="ArrowDown"?"ArrowRight":C==="ArrowUp"?"ArrowLeft":C==="ArrowRight"?"ArrowDown":C==="ArrowLeft"?"ArrowUp":C:C){case"ArrowDown":{if(F+1<K.length)return K[F+1];return A}case"ArrowUp":{if(F>0)return K[F-1];return A}case"ArrowRight":{if(J>=te-1)return A;let ee=J+1,re=N.y+N.size*0.5,le=V[ee];if(le.length===0)return A;let ae=j(E[ee],re);return ae>=0?le[ae]:A}case"ArrowLeft":{if(J<=0)return A;let ee=J-1,re=N.y+N.size*0.5,le=V[ee];if(le.length===0)return A;let ae=j(E[ee],re);return ae>=0?le[ae]:A}case"Home":return 0;case"End":return O-1;case"PageDown":{let ee=s.state.viewportState.containerSize,re=N.size>0?N.size:150,le=Math.max(1,Math.floor(ee/re)),ae=Math.min(F+le,K.length-1);return K[ae]}case"PageUp":{let ee=s.state.viewportState.containerSize,re=N.size>0?N.size:150,le=Math.max(1,Math.floor(ee/re)),ae=Math.max(0,F-le);return K[ae]}}return A}),s.methods.set("_scrollItemIntoView",(A)=>{let C=t[A];if(!C)return;let O=s.scrollController.getScrollTop(),N=s.state.viewportState.containerSize,J=C.y,te=J+C.size,F=O+N;if(J<O)s.scrollController.scrollTo(s.adjustScrollPosition(Math.max(0,J)));else if(te>F)s.scrollController.scrollTo(s.adjustScrollPosition(te-N))});let M=null,H=null,w=!1,g=()=>{if(w)return;w=!0,M=s.methods.get("_getSelectedIds")??null,H=s.methods.get("_getFocusedIndex")??null},x=(A)=>s.dataManager.getItem(A),y=-1,D=-1,Y=!0,B=u.overscan*vl,Q=()=>{if(s.state.isDestroyed)return;g();let A=s.scrollController.getScrollTop(),C=s.state.viewportState.containerSize;if(!Y&&A===y&&C===D)return;y=A,D=C,Y=!1;let O=Math.max(0,A-B),N=A+C+B,J=l.getVisibleItems(t,O,N),te=M?M():pl,F=H?H():-1;if(r&&J.length>0)r.render(x,J,te,F);let K=s.state.viewportState;K.scrollPosition=A;let ee=J.length,re=ee>0?J[0].index:0,le=ee>0?J[ee-1].index:0;K.visibleRange.start=re,K.visibleRange.end=le,K.renderRange.start=re,K.renderRange.end=le;let ae=s.state.lastRenderRange;if(ae.start!==re||ae.end!==le)ae.start=re,ae.end=le,o.emit("range:change",{range:{start:re,end:le}})},S=()=>{s.state.lastRenderRange.start=-1,s.state.lastRenderRange.end=-1,Y=!0,Q()};s.setRenderFns(Q,S);let p=(A,C)=>{let O=(m?C:A)-c;if(l&&l.containerSize!==O){if(l.update({containerSize:O}),q(),r)r.clear();S()}};s.resizeHandlers.push(p);let n=()=>{q(),S()},f=s.dataManager,L=(A)=>{if(typeof f[A]!=="function")return;let C=f[A].bind(f);f[A]=(...O)=>{C(...O),n()}};L("setItems"),L("appendItems"),L("prependItems"),L("updateItem"),L("removeItem");let{animateScroll:h,cancelScroll:b}=ct(s.scrollController,s.renderIfNeeded);s.methods.set("cancelScroll",b),s.methods.set("scrollToIndex",(A,C)=>{let O=t[A];if(!O)return;let{align:N,behavior:J,duration:te}=je(C),F=O.y,K=s.state.viewportState.containerSize,ee=F;if(N==="center")ee=F-K/2+O.size/2;else if(N==="end"){ee=F-K+O.size;let re=l.getTotalSize(t);if(A===t.length-1)ee=Math.max(0,re+v-K)}if(ee=Math.max(0,ee),ee=s.adjustScrollPosition(ee),J==="smooth")h(s.scrollController.getScrollTop(),ee,te);else b(),s.scrollController.scrollTo(ee)}),q(),s.idleHandlers.push(()=>{if(r)r.sortDOM()}),s.destroyHandlers.push(()=>{if(b(),r)r.destroy();i.root.classList.remove(`${d}--masonry`)})}}},mt=(e)=>{let l=e?.mode??"single",r=e?.followFocus??!1,t=e?.initial,s=e?.shiftArrowToggle??"origin",i=Er(t),o=null,u=-1;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems","selectNext","selectPrevious"],setup(a){let{dom:d,emitter:m,config:z}=a,{classPrefix:c,ariaIdPrefix:v}=z;if(l==="none"){a.methods.set("select",()=>{}),a.methods.set("deselect",()=>{}),a.methods.set("toggleSelect",()=>{}),a.methods.set("selectAll",()=>{}),a.methods.set("clearSelection",()=>{}),a.methods.set("getSelected",()=>[]),a.methods.set("getSelectedItems",()=>[]),a.methods.set("setSelectionMode",()=>{}),a.methods.set("selectNext",()=>{}),a.methods.set("selectPrevious",()=>{});return}d.root.classList.add(`${c}--selectable`);let P=a.methods.get("_isGroupHeader"),T=(S)=>P?P(S):!1,R=(S,p,n)=>{if(!P)return S;let f=S;while(f>=0&&f<n){if(!T(f))return f;f+=p}f=S-p;while(f>=0&&f<n){if(!T(f))return f;f-=p}return S},$=new Map,_=()=>{$.clear();let S=a.dataManager.getTotal(),p=a.dataManager.getCached();if(p===0)return;if(p>=S){for(let f=0;f<S;f++){let L=a.dataManager.getItem(f);if(L)$.set(L.id,f)}return}let n=a.dataManager.getStorage();if(n&&typeof n.getLoadedRanges==="function"){let f=n.getLoadedRanges();for(let L of f)for(let h=L.start;h<=L.end;h++){let b=a.dataManager.getItem(h);if(b&&!b._isPlaceholder)$.set(b.id,h)}}};m.on("data:change",({type:S,id:p})=>{if(S==="remove")i.selected.delete(p),_()}),m.on("load:end",({items:S,offset:p})=>{if(!S||S.length===0)return;if(p!==void 0)for(let n=0;n<S.length;n++){let f=S[n];if(f&&f.id!==void 0)$.set(f.id,p+n)}else _()}),_(),a.methods.set("_getSelectedIds",()=>{return i.selected}),a.methods.set("_getFocusedIndex",()=>{return i.focusVisible?i.focusedIndex:-1});let{forceRender:Z}=a.getRenderFns(),q=()=>{Z();let S=(p)=>{let n=$.get(p);if(n===void 0)return;return a.dataManager.getItem(n)};m.emit("selection:change",{selected:Mt(i),items:Tt(i,S)})},W=$e(a.rawConfig.padding),V=z.horizontal?W.left:W.top,I=z.horizontal?W.right:W.bottom,E=a.getItemToScrollIndexFn(),X=null,j=null,M=null,H=!1,w=()=>{if(H)return;H=!0,X=a.methods.get("_getNavDelta")??null,j=a.methods.get("_navigate")??null,M=a.methods.get("_scrollItemIntoView")??null},g=()=>{return w(),X?X():{ud:1,lr:0,cols:0}},x=(S)=>{if(S<0)return;if(w(),M)M(S);else{let p=a.state.viewportState.containerSize,n=a.state.viewportState.scrollPosition,f=a.dataManager.getTotal(),L=a.getCachedCompression(),{visibleRange:h}=a.state.viewportState,b=E(S),A=Dt(b,a.sizeCache,n,p,V,I,L,f,h);if(A!==n)a.scrollController.scrollTo(a.adjustScrollPosition(A))}},y=()=>{let S=E(Math.max(0,i.focusedIndex)),p=a.sizeCache.getSize(S),{ud:n}=g();return Math.max(n,Math.floor(a.state.viewportState.containerSize/p)*n)};o=document.createElement("div"),o.setAttribute("aria-live","polite"),o.setAttribute("aria-atomic","true"),o.className=`${c}-live-region`,o.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",(d.root.getAttribute("role")==="grid"?d.root.parentElement??d.root:d.root).appendChild(o);let D=o;m.on("selection:change",({selected:S})=>{let p=S.length;if(p===0)D.textContent="";else if(p===1)D.textContent="1 item selected";else D.textContent=`${p} items selected`});let Y=()=>{if(a.state.isDestroyed)return;if(!d.root.matches(":focus-visible"))return;let S=a.dataManager.getTotal();if(S===0)return;let p=i.focusedIndex>=0?Math.min(i.focusedIndex,S-1):0;p=R(p,1,S),i=_e(i,p),i.focusVisible=!0,d.root.setAttribute("aria-activedescendant",`${v}-item-${p}`),x(p);let n=a.dataManager.getItem(p);if(n)a.renderer.updateItemClasses(p,i.selected.has(n.id),!0)};if(z.interactive)d.root.addEventListener("focusin",Y);let B=(S)=>{if(a.state.isDestroyed)return;let p=S.relatedTarget;if(p&&d.root.contains(p))return;let n=i.focusedIndex;if(i.focusVisible=!1,d.root.removeAttribute("aria-activedescendant"),n>=0){let f=a.dataManager.getItem(n);if(f)a.renderer.updateItemClasses(n,i.selected.has(f.id),!1)}};if(z.interactive)d.root.addEventListener("focusout",B);if(a.clickHandlers.push((S)=>{if(a.state.isDestroyed)return;let p=S.target.closest("[data-index]");if(!p)return;let n=parseInt(p.dataset.index??"-1",10);if(n<0)return;let f=a.dataManager.getItem(n);if(!f)return;if(T(n))return;if(m.emit("item:click",{item:f,index:n,event:S}),l==="multiple"&&S.shiftKey&&i.focusedIndex>=0){let L=u>=0?u:i.focusedIndex,h=a.getAllLoadedItems();i=st(i,h,L,n,l),i=_e(i,n),i.focusVisible=!1,u=n,d.root.setAttribute("aria-activedescendant",`${v}-item-${n}`),q();return}u=n,i=_e(i,n),i.focusVisible=!1,d.root.setAttribute("aria-activedescendant",`${v}-item-${n}`),i=Ee(i,f.id,l),q()}),z.interactive)a.keydownHandlers.push((S)=>{if(a.state.isDestroyed)return;let p=a.dataManager.getTotal(),n=i.focusedIndex,f=!1,L=!1,h=i;if(w(),j)switch(S.key){case"ArrowUp":case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"PageUp":case"PageDown":case"Home":case"End":{let b=j(i.focusedIndex,S.key,p);if(b!==i.focusedIndex)h=_e(i,b),h.focusVisible=!0,f=!0,L=!0;else{S.preventDefault();return}break}}if(!f)switch(S.key){case"ArrowUp":h=at(i,p,z.wrap,g().ud),h.focusVisible=!0,f=!0,L=!0;break;case"ArrowDown":h=nt(i,p,z.wrap,g().ud),h.focusVisible=!0,f=!0,L=!0;break;case"ArrowLeft":{let{lr:b}=g();if(b)h=at(i,p,z.wrap,b),h.focusVisible=!0,f=!0,L=!0;break}case"ArrowRight":{let{lr:b}=g();if(b)h=nt(i,p,z.wrap,b),h.focusVisible=!0,f=!0,L=!0;break}case"PageUp":h=Ct(i,p,y(),"up"),h.focusVisible=!0,f=!0,L=!0;break;case"PageDown":h=Ct(i,p,y(),"down"),h.focusVisible=!0,f=!0,L=!0;break;case"Home":{h=_r(i,p),h.focusVisible=!0,f=!0,L=!0;break}case"End":{h=Fr(i,p),h.focusVisible=!0,f=!0,L=!0;break}}switch(S.key){case" ":case"Enter":if(S.key===" "&&S.shiftKey&&l==="multiple"&&i.focusedIndex>=0){if(u>=0){let b=a.getAllLoadedItems();h=st(h,b,u,i.focusedIndex,l)}h.focusVisible=!0,f=!0;break}if(i.focusedIndex>=0&&!T(i.focusedIndex)){let b=a.dataManager.getItem(i.focusedIndex);if(b)h=Ee(i,b.id,l),h.focusVisible=!0;u=i.focusedIndex,f=!0}break;case"a":if((S.ctrlKey||S.metaKey)&&l==="multiple"){let b=a.getAllLoadedItems();if(i.selected.size===b.length)h=It(h);else h=zt(h,b,l);h.focusVisible=!0,f=!0,L=!1}break}if(L&&P){let b=h.focusedIndex>n?1:-1;h.focusedIndex=R(h.focusedIndex,b,p)}if(S.shiftKey&&l==="multiple"&&L&&h.focusedIndex>=0){let b=S.key==="ArrowUp"||S.key==="ArrowDown"||S.key==="ArrowLeft"||S.key==="ArrowRight",A=(S.ctrlKey||S.metaKey)&&(S.key==="Home"||S.key==="End");if(b){if(s==="origin"){if(n>=0){let C=a.dataManager.getItem(n);if(C)h=Ee(h,C.id,l)}}else{let C=a.dataManager.getItem(h.focusedIndex);if(C)h=Ee(h,C.id,l)}u=h.focusedIndex,L=!1}else if(A){let C=a.getAllLoadedItems(),O=n>=0?n:h.focusedIndex;h=st(h,C,O,h.focusedIndex,l),u=h.focusedIndex,L=!1}}if(r&&l==="single"&&L&&h.focusedIndex>=0){let b=a.dataManager.getItem(h.focusedIndex);if(b)h=Fe(h,[b.id],l);L=!1}if(f){S.preventDefault(),i=h;let b=i.focusedIndex;if(b>=0)x(b),d.root.setAttribute("aria-activedescendant",`${v}-item-${b}`);else d.root.removeAttribute("aria-activedescendant");if(L){let{selected:A}=i;if(n>=0&&n!==b){let C=a.dataManager.getItem(n);if(C)a.renderer.updateItemClasses(n,A.has(C.id),!1)}if(b>=0){let C=a.dataManager.getItem(b);if(C)a.renderer.updateItemClasses(b,A.has(C.id),!0)}}else q()}});a.methods.set("select",(...S)=>{i=Fe(i,S,l),q()}),a.methods.set("deselect",(...S)=>{i=Pt(i,S),q()}),a.methods.set("toggleSelect",(S)=>{i=Ee(i,S,l),q()}),a.methods.set("selectAll",()=>{if(l!=="multiple")return;let S=a.getAllLoadedItems();i=zt(i,S,l),_(),q()}),a.methods.set("clearSelection",()=>{i=It(i),q()}),a.methods.set("getSelected",()=>{return Mt(i)}),a.methods.set("getSelectedItems",()=>{return Tt(i,(S)=>{let p=$.get(S);return p===void 0?void 0:a.dataManager.getItem(p)})});let Q=(S)=>{let p=a.dataManager.getTotal();if(p===0)return;if(w(),j){let h=S==="next"?"ArrowDown":"ArrowUp",b=j(i.focusedIndex,h,p);i=_e(i,b)}else{let{ud:h}=g();i=S==="next"?nt(i,p,z.wrap,h):at(i,p,z.wrap,h)}let n=S==="next"?1:-1;i.focusedIndex=R(i.focusedIndex,n,p);let f=i.focusedIndex,L=a.dataManager.getItem(f);if(!L)return;i=Fe(i,[L.id],l),x(f),q()};a.methods.set("selectNext",()=>{Q("next")}),a.methods.set("selectPrevious",()=>{Q("previous")}),a.destroyHandlers.push(()=>{if(D&&D.parentNode)D.remove();d.root.removeEventListener("focusin",Y),d.root.removeEventListener("focusout",B)})},destroy(){if(o&&o.parentNode)o.remove();o=null}}},wl=(e)=>{try{let l=sessionStorage.getItem(e);if(!l)return;return JSON.parse(l)}catch{return}},Qt=(e)=>{let l=e?.autoSave,r=l?wl(l):e?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(t){t.methods.set("getScrollSnapshot",()=>{let i=t.scrollController.getScrollTop(),o=t.getCachedCompression(),u=t.getVirtualTotal(),a=t.methods.get("getSelected"),d=a&&a().length>0?a():void 0;if(u===0){let v={index:0,offsetInItem:0,total:0};if(d)v.selectedIds=d;return v}let m,z;if(o.isCompressed){let v=i/o.virtualSize*u;m=Math.max(0,Math.min(Math.floor(v),u-1)),z=(v-m)*t.sizeCache.getSize(m)}else m=t.sizeCache.indexAtOffset(i),z=i-t.sizeCache.getOffset(m);z=Math.max(0,z);let c={index:m,offsetInItem:z,total:u};if(d)c.selectedIds=d;return c});let s=(i)=>{let{index:o,offsetInItem:u,selectedIds:a}=i,d=t.getVirtualTotal();if(d===0&&i.total&&i.total>0){t.dataManager.setTotal(i.total),t.sizeCache.rebuild(i.total),t.updateCompressionMode();let $=t.getCachedCompression();t.updateContentSize($.virtualSize)}else if(d===0)return;if(!Number.isFinite(o)||!Number.isFinite(u))return;let m=t.getVirtualTotal();if(t.sizeCache.getTotal()!==m){t.sizeCache.rebuild(m),t.updateCompressionMode();let $=t.getCachedCompression();t.updateContentSize($.virtualSize)}let z=t.getCachedCompression(),c=Math.max(0,Math.min(o,m-1)),v;if(z.isCompressed){let $=t.sizeCache.getSize(c),_=$>0?u/$:0;v=(c+_)/m*z.virtualSize}else v=t.sizeCache.getOffset(c)+u;let P=t.state.viewportState.containerSize,T=Math.max(0,z.virtualSize-P);if(v=Math.max(0,Math.min(v,T)),t.scrollController.scrollTo(v),a&&a.length>0){let $=t.methods.get("select");if($)$(...a)}let R=t.methods.get("loadVisibleRange");if(R){let $=0,_=v,Z=()=>{$++;let q=t.state.viewportState.containerSize,W=t.scrollController.getScrollTop();if(q>0){if(Math.abs(W-_)>1)t.scrollController.scrollTo(_);R()}else if($<10)requestAnimationFrame(Z)};requestAnimationFrame(Z)}else{let $=t.methods.get("reload");if($)requestAnimationFrame(()=>{$()})}};if(t.methods.set("restoreScroll",s),l){let i=!!r,o=()=>{if(i)return;let u=t.methods.get("getScrollSnapshot");if(!u)return;let a=u();try{sessionStorage.setItem(l,JSON.stringify(a))}catch{}};if(t.idleHandlers.push(()=>{if(i)i=!1;o()}),t.emitter.on("selection:change",o),r&&r.total&&r.total>0){let u=t.methods.get("_cancelAutoLoad");if(u)u();t.dataManager.setTotal(r.total)}}if(r)queueMicrotask(()=>{s(r)})}}};var Sl=(e,l)=>{let r=new Map,t=(i)=>{let o=r.get(i);return o!==void 0?o:e},s=qe(t,l);return{getOffset(i){return s.getOffset(i)},getSize(i){return t(i)},indexAtOffset(i){return s.indexAtOffset(i)},getTotalSize(){return s.getTotalSize()},getTotal(){return s.getTotal()},rebuild(i){if(i<s.getTotal()){for(let o of r.keys())if(o>=i)r.delete(o)}s=qe(t,i)},isVariable(){return!0},setMeasuredSize(i,o){r.set(i,o)},isMeasured(i){return r.has(i)},getEstimatedSize(){return e},measuredCount(){return r.size}}},Jt=()=>{let e=null;return{name:"withAutoSize",priority:5,setup(l){let r=l.config.horizontal,t=l.rawConfig.item,s=r?t.estimatedWidth:t.estimatedHeight;if(s==null||s<=0)throw Error("[vlist/withAutoSize] Requires item.estimatedHeight (or item.estimatedWidth for horizontal)");let i=t.gap??0,o=l.getVirtualTotal(),u=$e(l.rawConfig.padding),a=ut(u,r),d=Sl(s+i,o),m=l.methods.get("_setSizeCache"),z=l.methods.get("_setConstrainSize");if(!m||!z)throw Error("[vlist/withAutoSize] Incompatible builder version");m(d),z((q)=>d.isMeasured(q));let c=new WeakMap,v=0,P=!1,T=2,R=(q)=>{let W=l.scrollController.getScrollTop(),V=l.state.viewportState.containerSize;if(V<=0)return!1;let I=Math.max(0,q+a-V);return W>=I-T},$=()=>{let q=d.getTotalSize(),W=l.state.viewportState.containerSize;if(W<=0)return;let V=Math.max(0,q+a-W),I=l.scrollController.getScrollTop();if(V>I)l.scrollController.scrollTo(V)},_=()=>{let q=d.getTotalSize();l.updateContentSize(q)},Z=()=>{if(P){let q=l.dom.viewport,W=q.scrollHeight,V=W-q.clientHeight,I=l.scrollController.getScrollTop(),E=V>0&&I>=V-T,X=l.getVirtualTotal(),j=l.state.viewportState.renderRange.end,M=X>0&&j>=X-1,H=d.getTotalSize()+a,w=Math.abs(H-W),g=M&&V>0&&I>=V-w-T,x=E||g;if(_(),P=!1,x)q.scrollHeight,$(),l.forceRender()}};e=new ResizeObserver((q)=>{if(l.state.isDestroyed)return;let W=!1,V=l.state.viewportState.visibleRange.start;for(let y of q){let D=c.get(y.target);if(D===void 0)continue;let Y=r?y.borderBoxSize[0].inlineSize:y.borderBoxSize[0].blockSize;if(!d.isMeasured(D)){let B=Y+i,Q=d.getSize(D);if(d.setMeasuredSize(D,B),W=!0,D<V&&B!==Q)v+=B-Q;e.unobserve(y.target);let S=y.target;if(r)S.style.width=`${Y}px`;else S.style.height=`${Y}px`}}if(!W)return;let I=d.getTotalSize();if(d.rebuild(l.getVirtualTotal()),v!==0){let y=l.scrollController.getScrollTop();l.scrollController.scrollTo(y+v),v=0}let E=R(I),X=l.getVirtualTotal(),j=l.state.viewportState.renderRange.end,M=X>0&&j>=X-1,H=l.dom.viewport,w=H.scrollHeight-H.clientHeight,g=l.scrollController.getScrollTop(),x=w>0&&g>=w-T;if(E||M||!l.scrollController.isScrolling()){if(_(),P=!1,E||M&&x)H.scrollHeight,$()}else P=!0;l.forceRender()}),l.afterRenderBatch.push((q)=>{for(let{index:W,element:V}of q)if(!d.isMeasured(W))c.set(V,W),e.observe(V)}),l.idleHandlers.push(Z),l.destroyHandlers.push(()=>{if(e)e.disconnect(),e=null})},destroy(){if(e)e.disconnect(),e=null}}};function Ml(e){let l=null,r=null,t=(i)=>{l=i},s=()=>r;return er(()=>{if(!l)return;let i=e(),o=Ot({...i,container:l});if(i.scroll?.element===window)o=o.use(jt());let u=i.item,a=i.orientation==="horizontal",d=a?u.width!=null:u.height!=null,m=a?u.estimatedWidth!=null:u.estimatedHeight!=null;if(!d&&m)o=o.use(Jt());if(i.adapter)o=o.use(Gt({adapter:i.adapter,...i.loading&&{loading:i.loading}}));if(i.layout==="grid"&&i.grid)o=o.use(Ut(i.grid));if(i.layout==="masonry"&&i.masonry)o=o.use(Yt(i.masonry));if(i.groups){let v=i.groups,P=typeof v.headerHeight==="function"?v.headerHeight("",0):v.headerHeight;o=o.use(Kt({getGroupForIndex:v.getGroupForIndex,headerHeight:P,headerTemplate:v.headerTemplate,...v.sticky!==void 0&&{sticky:v.sticky}}))}if((i.selection?.mode||"none")!=="none")o=o.use(mt(i.selection));else o=o.use(mt({mode:"none"}));o=o.use(qt());let c=i.scroll?.scrollbar||i.scrollbar;if(c!=="none"){let v=typeof c==="object"?c:{};o=o.use(Xt(v))}o=o.use(Qt()),r=o.build()}),yl(xl(()=>e().items,(i)=>{if(r&&i)r.setItems(i)})),tr(()=>{if(r)r.destroy(),r=null}),{setRef:t,instance:s}}function Tl(e,l,r){er(()=>{let t=e();if(!t)return;let s=t.on(l,r);tr(()=>{s()})})}export{Tl as createVListEvent,Ml as createVList};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vlist-solidjs",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "SolidJS primitives for vlist - lightweight virtual scrolling",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Floor IO",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"./package.json": "./package.json"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
|
-
"
|
|
36
|
+
"vlist": "^1.5.0",
|
|
37
37
|
"solid-js": ">=1.0.0"
|
|
38
38
|
},
|
|
39
39
|
"files": [
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"prepublishOnly": "bun run build"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"
|
|
51
|
+
"vlist": "file:../vlist",
|
|
52
52
|
"@types/bun": "^1.0.0",
|
|
53
53
|
"bun": "^1.0.0",
|
|
54
54
|
"solid-js": "^1.9.3",
|