@aiquants/virtualscroll 1.23.0 → 1.24.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/VirtualScroll.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +107 -100
- package/package.json +1 -1
- package/src/VirtualScroll.tsx +20 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualScroll.d.ts","sourceRoot":"","sources":["../src/VirtualScroll.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAc,KAAK,SAAS,EAA0E,MAAM,OAAO,CAAA;AAEjI,OAAO,EAA4C,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACxH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC7B,6EAA6E;IAC7E,mBAAmB,EAAE,MAAM,CAAA;IAC3B,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,CAAA;IACzB,6FAA6F;IAC7F,iBAAiB,EAAE,MAAM,CAAA;IACzB,4FAA4F;IAC5F,eAAe,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAA;IACtB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG;IACjD,8DAA8D;IAC9D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC1G,sFAAsF;IACtF,yBAAyB,EAAE,MAAM,MAAM,CAAA;IACvC,6EAA6E;IAC7E,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B,qEAAqE;IACrE,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IAChF,kEAAkE;IAClE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;IAClC;;;;;;;;;OASG;IACH,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,8BAA8B,CAAC,EAAE,OAAO,CAAA;IACxC,kBAAkB,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAA;IAC1D,sBAAsB,CAAC,EAAE,eAAe,CAAC,wBAAwB,CAAC,CAAA;CACrE,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACvC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAA;IACxD,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,cAAc,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAA;IAClD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;;;;;;;;;;;OAeG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAA;CACvC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAA;IAC7B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,GAAG,CAAA;IACzC;;;;;;;;;;;;;OAaG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iMAAiM;IACjM,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAChE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACnD,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;IAC/C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAA;IAChD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,gBAAgB,CAAC,EAAE,6BAA6B,CAAA;IAChD,eAAe,CAAC,EAAE,4BAA4B,CAAA;IAC9C,oHAAoH;IACpH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,YAAY,CAAC,EAAE,eAAe,CAAC,cAAc,CAAC,CAAA;CACjD,CAAA;
|
|
1
|
+
{"version":3,"file":"VirtualScroll.d.ts","sourceRoot":"","sources":["../src/VirtualScroll.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAc,KAAK,SAAS,EAA0E,MAAM,OAAO,CAAA;AAEjI,OAAO,EAA4C,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACxH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC7B,6EAA6E;IAC7E,mBAAmB,EAAE,MAAM,CAAA;IAC3B,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,CAAA;IACzB,6FAA6F;IAC7F,iBAAiB,EAAE,MAAM,CAAA;IACzB,4FAA4F;IAC5F,eAAe,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAA;IACtB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG;IACjD,8DAA8D;IAC9D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC1G,sFAAsF;IACtF,yBAAyB,EAAE,MAAM,MAAM,CAAA;IACvC,6EAA6E;IAC7E,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B,qEAAqE;IACrE,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IAChF,kEAAkE;IAClE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;IAClC;;;;;;;;;OASG;IACH,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,8BAA8B,CAAC,EAAE,OAAO,CAAA;IACxC,kBAAkB,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAA;IAC1D,sBAAsB,CAAC,EAAE,eAAe,CAAC,wBAAwB,CAAC,CAAA;CACrE,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACvC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAA;IACxD,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,cAAc,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAA;IAClD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;;;;;;;;;;;OAeG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAA;CACvC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAA;IAC7B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,GAAG,CAAA;IACzC;;;;;;;;;;;;;OAaG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iMAAiM;IACjM,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAChE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACnD,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;IAC/C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAA;IAChD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,gBAAgB,CAAC,EAAE,6BAA6B,CAAA;IAChD,eAAe,CAAC,EAAE,4BAA4B,CAAA;IAC9C,oHAAoH;IACpH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,YAAY,CAAC,EAAE,eAAe,CAAC,cAAc,CAAC,CAAA;CACjD,CAAA;AAsPD;;;;GAIG;AACH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,gBAAgB,MAAM,EAAE,cAAc,MAAM,EAAE,eAAe,MAAM,EAAE,UAAU,MAAM,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,aAAa,UAAU,CAAC,OAAO,iBAAiB,CAAC,EAAE,aAAa,MAAM;;;;;CAgI7O,CAAA;AA22CD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAqC,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;CAAE,KAAK,KAAK,CAAC,YAAY,CAAA"}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const B=require("react/jsx-runtime"),r=require("react"),ut=require("tailwind-merge");class y{level;prefix;impl;constructor(e=2,t="[virtualscroll]",n=console){this.level=e,this.prefix=t,this.impl=n}static instance=new y(2,"[virtualscroll]");static setLevel(e){y.instance.setLevel(e)}setLevel(e){this.level=e}static setImplementation(e){y.instance.setImplementation(e)}setImplementation(e){this.impl=e}static setPrefix(e){y.instance.setPrefix(e)}setPrefix(e){this.prefix=e}static isEnabled(e){return y.instance.isEnabled(e)}isEnabled(e){return this.level<=e}static resolveLazy(e){if(typeof e!="function")return e;try{return e()}catch{return e}}formatMessage(e){return typeof e=="string"?[`${this.prefix} ${e}`]:[this.prefix,e]}static debug(e,...t){y.instance.debug(e,...t)}debug(e,...t){this.level<=0&&this.impl.debug(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}static info(e,...t){y.instance.info(e,...t)}info(e,...t){this.level<=1&&this.impl.info(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}static warn(e,...t){y.instance.warn(e,...t)}warn(e,...t){this.level<=2&&this.impl.warn(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}static error(e,...t){y.instance.error(e,...t)}error(e,...t){this.level<=3&&this.impl.error(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}}const _t={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Et=6,Gt=8,Zt=({dragState:s,normalizedDistance:e})=>{const t=1+e*.18,n=.16+e*.24,i=.38+e*.28,a=s.active?"80ms ease-out":"220ms ease";return B.jsxs(B.Fragment,{children:[B.jsx("div",{className:"aqvs-tap-scroll-circle-visual-outer",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.62), rgba(72,72,72,0.48))",boxShadow:`0 0 0 1px rgba(255,255,255,0.28), 0 10px 22px rgba(0,0,0,${n})`,transform:`scale(${t})`,transition:`${a}, ${s.active?"80ms":"260ms"} box-shadow ease`}}),B.jsx("div",{className:"aqvs-tap-scroll-circle-inner",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.72), rgba(28,28,28,0.58))",boxShadow:"inset 0 4px 10px rgba(0,0,0,0.24), inset 0 0 2px rgba(255,255,255,0.55)",opacity:i,transition:s.active?"120ms opacity ease-out":"220ms opacity ease"}})]})},Ht=r.memo(r.forwardRef(({onDragChange:s,className:e,maxVisualDistance:t=160,size:n=40,style:i,opacity:a=1,renderVisual:l},f)=>{const[d,x]=r.useState(_t),I=r.useRef(null),S=r.useRef(null),w=r.useRef({x:0,y:0}),p=r.useRef(null),D=r.useRef(0),Y=r.useCallback(T=>{x(T),s(T)},[s]),G=r.useCallback((T,k,Ie=!1)=>{const{x:Oe,y:Re}=w.current,Z=T-Oe,O=k-Re,Ce=Math.abs(O),U=Ce<Et?0:O<0?-1:1,ke=D.current;let v=U;const Xe=Et+Gt;U===0?ke!==0&&Ce<Xe?v=ke:(v=0,Ie||(D.current=0)):U!==ke&&ke!==0&&Ce<Xe?v=ke:D.current=U,Y({active:Ie||Ce>=Et,offsetX:Z,offsetY:O,distance:Ce,direction:v,pointerId:I.current})},[Y]),le=r.useCallback(T=>{if(T===null)return;const k=p.current;k?.hasPointerCapture(T)&&k.releasePointerCapture(T)},[]),te=r.useCallback((T=!1)=>{T&&le(I.current),I.current=null,S.current=null,D.current=0,Y(_t)},[Y,le]),re=r.useCallback(T=>{if(I.current!==null&&I.current!==T.pointerId){S.current={pointerId:T.pointerId,clientX:T.clientX,clientY:T.clientY},T.preventDefault(),T.stopPropagation();return}T.preventDefault(),T.stopPropagation();const k=p.current??T.currentTarget,{left:Ie,top:Oe,width:Re,height:Z}=k.getBoundingClientRect();w.current={x:Ie+Re/2,y:Oe+Z/2},I.current=T.pointerId;try{k.setPointerCapture(T.pointerId)}catch{}G(T.clientX,T.clientY,!0)},[G]),de=r.useCallback(T=>{if(I.current!==T.pointerId){S.current!==null&&S.current.pointerId===T.pointerId&&(S.current={pointerId:T.pointerId,clientX:T.clientX,clientY:T.clientY});return}T.preventDefault(),G(T.clientX,T.clientY)},[G]),Se=r.useCallback(T=>{if(I.current!==T.pointerId){S.current!==null&&S.current.pointerId===T.pointerId&&(S.current=null);return}T.preventDefault(),T.stopPropagation();const k=S.current;if(S.current=null,k!==null){le(T.pointerId);const Ie=p.current;let Oe=!0;if(Ie!==null&&typeof Ie.setPointerCapture=="function")try{Ie.setPointerCapture(k.pointerId)}catch(Re){(typeof Re=="object"&&Re!==null&&"name"in Re?Re.name:void 0)==="NotFoundError"&&(Oe=!1)}if(Oe){I.current=k.pointerId,G(k.clientX,k.clientY,!0);return}}te(!0)},[te,le,G]),A=r.useCallback(T=>{T.target===T.currentTarget&&I.current===T.pointerId&&te(!1)},[te]);r.useImperativeHandle(f,()=>({reset:()=>{te(!0)},getElement:()=>p.current}),[te]);const L=Math.min(Math.max(a,0),1),M=n/64,H=Math.min(d.distance,t)/t,X=d.direction*H*10*M,E=l??Zt,ae={dragState:d,normalizedDistance:H,sizeScale:M,size:n,opacity:L},$={...i,width:n,height:n,transform:`translateY(${X}px)`};return $.opacity=L,B.jsx("div",{ref:p,"data-testid":"virtual-scroll-tap-circle",className:ut.twMerge("aqvs-tap-scroll-circle",e),style:$,tabIndex:-1,onPointerDown:re,onPointerMove:de,onPointerUp:Se,onPointerCancel:Se,onLostPointerCapture:A,role:"presentation",children:E(ae)})}));Ht.displayName="TapScrollCircle";const xe=(s,e,t)=>Math.max(e,Math.min(t,s)),Dt="virtualscroll:tap-scroll-cancel",Ot=20,Jt=250,Qt=60,er=20,tr=20,Lt={maxDistance:240,minSpeedMultiplier:.2},rr=Lt.maxDistance,Ft={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},kt=2.2,nr=8,sr=120,ir=1/10,Ke={enabled:!0,size:40,offsetX:-80,offsetY:0,className:void 0,maxVisualDistance:rr,minSpeedMultiplier:Lt.minSpeedMultiplier,opacity:.9,renderVisual:void 0,maxSpeedCurve:void 0},ar=s=>s?{mainSizeKey:"width",crossSizeKey:"height",positionKey:"left",selectDelta:(e,t)=>e,getPointerCoordinate:({clientX:e})=>e,arrowLabels:["Scroll left","Scroll right"],arrowIcons:["◀","▶"],directionClass:"aqvs-scrollbar-horizontal",orientation:"horizontal"}:{mainSizeKey:"height",crossSizeKey:"width",positionKey:"top",selectDelta:(e,t)=>t,getPointerCoordinate:({clientY:e})=>e,arrowLabels:["Scroll up","Scroll down"],arrowIcons:["▲","▼"],directionClass:"aqvs-scrollbar-vertical",orientation:"vertical"},or=(s,e)=>{const t=s?.maxSpeedMultiplier,n=typeof t=="number"?t:jt(e);return{enabled:s?.enabled??Ke.enabled,size:s?.size??Ke.size,offsetX:s?.offsetX??Ke.offsetX,offsetY:s?.offsetY??Ke.offsetY,className:s?.className??Ke.className,maxVisualDistance:s?.maxVisualDistance??Ke.maxVisualDistance,maxSpeedMultiplier:n,minSpeedMultiplier:Math.max(s?.minSpeedMultiplier??Ke.minSpeedMultiplier,0),opacity:xe(s?.opacity??Ke.opacity,0,1),renderVisual:s?.renderVisual??Ke.renderVisual,maxSpeedCurve:s?.maxSpeedCurve??Ke.maxSpeedCurve}},lr=({isDragging:s,isThumbHovered:e,enableThumbDrag:t})=>r.useMemo(()=>t?s?"dragging":e?"hover":"idle":"disabled",[t,s,e]),cr=({canUseArrowButtons:s,enableArrowButtons:e,resetTapScroll:t,scrollByStep:n})=>{const i=r.useRef(null),a=r.useRef(null),l=r.useRef(null),f=r.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null),a.current!==null&&(window.clearTimeout(a.current),a.current=null),l.current!==null&&(window.removeEventListener("pointerup",l.current),window.removeEventListener("pointercancel",l.current),window.removeEventListener("blur",l.current),l.current=null)},[]),d=r.useCallback(()=>{f()},[f]),x=r.useCallback(S=>w=>{if(!s)return;w.cancelable&&w.preventDefault(),w.stopPropagation(),t(),f(),n(S),a.current=window.setTimeout(()=>{i.current=window.setInterval(()=>{n(S)},Qt)},Jt);const p=()=>f();l.current=p,window.addEventListener("pointerup",p),window.addEventListener("pointercancel",p),window.addEventListener("blur",p)},[s,f,t,n]),I=r.useCallback(S=>w=>{e&&(w.key==="Enter"||w.key===" "||w.key==="Spacebar")&&(w.preventDefault(),n(S))},[e,n]);return r.useEffect(()=>{s||f()},[s,f]),r.useEffect(()=>()=>{f()},[f]),{handleArrowPointerDown:x,handleArrowPointerUp:d,handleArrowKeyDown:I}},ur=700,ct=(s,e)=>typeof s=="number"&&Number.isFinite(s)?s:e,Xt=({distance:s,maxDistance:e,viewportSize:t,minSpeedMultiplier:n,maxSpeedMultiplier:i,hasCustomMaxSpeedMultiplier:a,curve:l})=>{const f=Math.max(ct(s,0),0),d=ct(e,0),x=d>0?Math.min(f,d)/d:1,I=Math.max(ct(t,0),0),S=Math.max(ct(n,0),0),w=Math.max(ct(i,0),0),p=Math.max(I*S,40),D=a?p:1200,Y=Math.max(I*w,D),G=l?Math.max(ct(l.exponentialScale,w),0):0,le=l?Math.min(Y,Math.max(I*G,p)):Y,te=Math.max(le,p);let re=x**1.1;if(l){const Se=Math.min(Math.max(ct(l.exponentialSteepness,0),0),ur);if(Se===0)re=x;else{const A=Math.expm1(Se)||1;re=Math.min(Math.max(Math.expm1(Se*x)/A,0),1)}}const de=Math.min(Math.max(ct(l?.easedOffset,0),0),1);return p+(te-p)*(de+(1-de)*re)},jt=s=>{if(!s||s<=0)return kt;const e=Math.max(1,s),t=Math.log10(e),n=kt+t*nr;return xe(n,kt,sr)},$t=({contentSize:s,viewportSize:e,scrollPosition:t,onScroll:n,enableThumbDrag:i=!0,enableTrackClick:a=!0,enableArrowButtons:l=!0,horizontal:f=!1,scrollBarWidth:d=12,className:x,ariaControls:I,tapScrollCircleOptions:S,itemCount:w,renderThumbOverlay:p,visibleStartIndex:D,visibleEndIndex:Y})=>{const[G,le]=r.useState(!1),[te,re]=r.useState(!1),[de,Se]=r.useState(!1),A=r.useRef(null),L=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null}),M=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}),H=r.useRef(t),X=r.useRef(n),E=r.useRef(Ft),ae=r.useRef(null),$=r.useRef(null),T=r.useRef(null),k=r.useRef(0),Ie=r.useRef(0),Oe=r.useMemo(()=>or(S,w),[w,S]),Re=r.useMemo(()=>ar(f),[f]),{enabled:Z,size:O,offsetX:Ce,offsetY:U,className:ke,maxVisualDistance:v,maxSpeedMultiplier:Xe,minSpeedMultiplier:st,opacity:N,renderVisual:K,maxSpeedCurve:Fe}=Oe,Ae=r.useRef({viewportSize:e,maxScrollPosition:Math.max(s-e,0),scrollBarVisible:s>e,effectiveTapMaxDistance:Math.max(v,1),tapCircleMaxSpeedMultiplier:Xe,tapCircleMinSpeedMultiplier:st,tapCircleMaxSpeedCurve:Fe,tapScrollCircleOptions:S,effectiveTrackLength:0,onScroll:n,scrollPosition:t}),{mainSizeKey:ye,crossSizeKey:Be,positionKey:ce,selectDelta:h,getPointerCoordinate:ue,arrowLabels:fe,arrowIcons:F,directionClass:ee,orientation:oe}=Re,Ve=Math.max(v,1),De=e/s,Me=Math.max(e-d*2,0),ne=De*Me,me=Math.min(Math.max(Ot,ne||0),Me||Ot),se=s-e,J=Math.max(Me-me,0),ze=se<=0||J<=0?0:xe(t/se*J,0,J),it=ze+me/2,we=s>e||G,qe=we&&l;r.useLayoutEffect(()=>{Ae.current={viewportSize:e,maxScrollPosition:se,scrollBarVisible:we,effectiveTapMaxDistance:Ve,tapCircleMaxSpeedMultiplier:Xe,tapCircleMinSpeedMultiplier:st,tapCircleMaxSpeedCurve:Fe,tapScrollCircleOptions:S,effectiveTrackLength:J,onScroll:n,scrollPosition:t}}),r.useLayoutEffect(()=>{H.current=t},[t]),r.useLayoutEffect(()=>{X.current=n},[n]),r.useEffect(()=>{i||re(!1)},[i]);const Ue=lr({isDragging:G,isThumbHovered:te,enableThumbDrag:i}),Ee=r.useCallback((o,b)=>{const R=Ae.current,V=b??H.current;if(X.current){const u=X.current(o,V);if(typeof u=="number"&&Number.isFinite(u))return H.current=u,u}const q=typeof o=="function"?o(V):o,Te=Math.max(R.maxScrollPosition,0),c=R.scrollBarVisible?xe(q,0,Te):0;return H.current=c,c},[]),m=r.useCallback(o=>{const b=Ae.current,R=H.current;if(!b.scrollBarVisible||b.maxScrollPosition<=0){const C=Ee(0,R),_=C-R;return{nextPosition:C,actualDelta:_,reachedBoundary:!0}}if(o===0)return{nextPosition:R,actualDelta:0,reachedBoundary:!1};const q=Ee(C=>xe(C+o,0,b.maxScrollPosition),R),Te=q-R,c=o<0&&R+o<=0,u=o>0&&R+o>=b.maxScrollPosition,g=o<0&&(q<=0||c&&Te===0)||o>0&&(q>=b.maxScrollPosition||u&&Te===0);return{nextPosition:q,actualDelta:Te,reachedBoundary:g}},[Ee]),P=r.useCallback((o,b)=>{o.current+=b;const R=Math.max(Ae.current.maxScrollPosition,0);R>0&&(o.current=xe(o.current,-R,R));const V=m(o.current);return o.current-=V.actualDelta,V.reachedBoundary&&(o.current=0),V},[m]),ie=r.useCallback(()=>{$.current!==null&&(window.cancelAnimationFrame($.current),$.current=null),T.current=null,k.current=0,Ie.current=0},[]),pe=r.useCallback(()=>{E.current={...Ft},Se(!1),ae.current?.reset(),ie()},[ie]),ve=r.useCallback(o=>{const b=E.current,R=Ae.current;if(!b.active||b.direction===0){ie();return}if(!R.scrollBarVisible||R.maxScrollPosition<=0){ie();return}const V=T.current??o,q=Math.max((o-V)/1e3,0),Te=Math.min(q,ir);if(T.current=o,Te<=0){$.current=window.requestAnimationFrame(ve);return}const c=Xt({distance:b.distance,maxDistance:R.effectiveTapMaxDistance,viewportSize:R.viewportSize,minSpeedMultiplier:R.tapCircleMinSpeedMultiplier,maxSpeedMultiplier:R.tapCircleMaxSpeedMultiplier,hasCustomMaxSpeedMultiplier:typeof R.tapScrollCircleOptions?.maxSpeedMultiplier=="number",curve:R.tapCircleMaxSpeedCurve});Ie.current!==b.direction&&(Ie.current=b.direction,k.current=0);const{reachedBoundary:u}=P(k,b.direction*c*Te);if(u){ie();return}$.current=window.requestAnimationFrame(ve)},[P,ie]),We=r.useCallback(()=>{$.current===null&&(T.current=null,k.current=0,$.current=window.requestAnimationFrame(ve))},[ve]);r.useEffect(()=>{const o=E.current;!o.active||o.direction===0||We()},[s,e,We]),r.useEffect(()=>()=>{ie()},[ie]);const Ye=r.useCallback(o=>{E.current=o,Se(o.active),o.active&&o.direction!==0?We():ie()},[We,ie]);r.useEffect(()=>{Z||pe()},[pe,Z]),r.useEffect(()=>{const o=b=>{const V=b.detail?.paneId;V&&I&&V!==I||pe()};return window.addEventListener(Dt,o),()=>{window.removeEventListener(Dt,o)}},[I,pe]),r.useEffect(()=>{if(!Z)return;const o=b=>{if(!E.current.active||E.current.pointerId===b.pointerId)return;const R=b.target;if(!(R instanceof Node)){pe();return}ae.current?.getElement()?.contains(R)||pe()};return document.addEventListener("pointerdown",o,!0),()=>{document.removeEventListener("pointerdown",o,!0)}},[pe,Z]);const He=o=>{if(!we||J<=0||se<=0)return 0;const b=xe(o,0,J);return xe(b/J*se,0,se)},Ge=r.useCallback(o=>{const{scrollBarVisible:b,effectiveTrackLength:R,maxScrollPosition:V}=Ae.current;if(y.debug("[ScrollBar] calculateScrollPositionFromThumb",()=>({thumbPos:o,trackLen:R,maxScroll:V})),R<=0||V<=0)return null;const q=xe(o,0,R);return xe(q/R*V,0,V)},[]),at=r.useCallback(o=>{const b=o.getBoundingClientRect(),R=f?b.width:b.height,V=g=>{const C=Number.parseFloat(g);return Number.isFinite(C)?C:0},q=window.getComputedStyle(o),Te=V(f?q.width:q.height),c=Te>0?Te+V(f?q.paddingLeft:q.paddingTop)+V(f?q.paddingRight:q.paddingBottom)+V(f?q.borderLeftWidth:q.borderTopWidth)+V(f?q.borderRightWidth:q.borderBottomWidth):0,u=c>0?c:f?o.offsetWidth:o.offsetHeight;return u<=0||R<=0?1:R/u},[f]),ot=r.useCallback(o=>{const b=L.current;if(b.pointerId!==o.pointerId)return;const R=o.clientX-b.startClientX,V=o.clientY-b.startClientY,q=h(R,V)/(b.scale||1);y.debug("[ScrollBar] handleThumbPointerMove",()=>({delta:q,startThumbPosition:b.startThumbPosition,clientY:o.clientY,startClientY:b.startClientY,metrics:Ae.current}));const Te=Ge(b.startThumbPosition+q);Te!==null&&Ee(Te),o.cancelable&&o.preventDefault()},[h,Ge,Ee]),Q=r.useCallback(o=>{const b=L.current;if(b.pointerId!==o.pointerId)return;document.removeEventListener("pointermove",ot),document.removeEventListener("pointerup",Q),document.removeEventListener("pointercancel",Q);const R=b.captureTarget;if(R?.hasPointerCapture?.(o.pointerId)&&R.releasePointerCapture(o.pointerId),L.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null},le(!1),A.current){const V=A.current.getBoundingClientRect();o.clientX>=V.left&&o.clientX<=V.right&&o.clientY>=V.top&&o.clientY<=V.bottom||re(!1)}else re(!1)},[ot]);r.useEffect(()=>()=>{document.removeEventListener("pointermove",ot),document.removeEventListener("pointerup",Q),document.removeEventListener("pointercancel",Q)},[ot,Q]);const Ze=r.useRef(0),ht=r.useRef(0),Tt=r.useCallback(o=>{const b=Math.max(Math.round(Ae.current.viewportSize/tr),er);ht.current!==o&&(ht.current=o,Ze.current=0),P(Ze,o*b)},[P]),{handleArrowPointerDown:je,handleArrowPointerUp:ft,handleArrowKeyDown:St}=cr({canUseArrowButtons:qe,enableArrowButtons:l,resetTapScroll:pe,scrollByStep:Tt}),yt=o=>{if(!we)return;if(!i){o.preventDefault(),o.stopPropagation();return}if(o.pointerType==="mouse"&&o.button!==0||o.ctrlKey)return;pe();const b=o.currentTarget,R=at(b);let V=null;if(b.setPointerCapture)try{b.setPointerCapture(o.pointerId),V=b}catch{V=null}L.current={pointerId:o.pointerId,startThumbPosition:ze,startClientX:o.clientX,startClientY:o.clientY,scale:R,captureTarget:V},document.addEventListener("pointermove",ot),document.addEventListener("pointerup",Q),document.addEventListener("pointercancel",Q),le(!0),re(!0),o.preventDefault(),o.stopPropagation()},Je=o=>{if(!we)return;if(!a){o.preventDefault(),o.stopPropagation();return}if(o.pointerType==="mouse"&&o.button!==0||o.ctrlKey)return;const b=o.currentTarget,R=b.getBoundingClientRect(),V=ue(o),q=at(b),Te=(V-(f?R.left:R.top))/q;pe();const c=Te-me/2,u=He(c);if(Ee(u),b.setPointerCapture)try{b.setPointerCapture(o.pointerId)}catch{}M.current={pointerId:o.pointerId,startThumbPosition:c,startClientX:o.clientX,startClientY:o.clientY,scale:q},o.preventDefault(),o.stopPropagation()},$e=()=>{M.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}},Qe=o=>{const b=M.current;if(b.pointerId!==o.pointerId)return;if(o.pointerType==="mouse"&&o.buttons===0){$e();return}const R=o.clientX-b.startClientX,V=o.clientY-b.startClientY,q=h(R,V)/(b.scale||1),Te=He(b.startThumbPosition+q);Ee(Te),o.cancelable&&o.preventDefault()},et=o=>{if(M.current.pointerId!==o.pointerId)return;const b=o.currentTarget;b.hasPointerCapture?.(o.pointerId)&&b.releasePointerCapture(o.pointerId),$e(),o.preventDefault(),o.stopPropagation()},lt=o=>{if(M.current.pointerId!==o.pointerId)return;const b=o.currentTarget;b.hasPointerCapture?.(o.pointerId)&&b.releasePointerCapture(o.pointerId),$e()},dt=o=>{o.target===o.currentTarget&&M.current.pointerId===o.pointerId&&$e()},tt=r.useMemo(()=>xe((de?1:.8)*N,0,1),[de,N]),Mt=r.useMemo(()=>{const b=`calc(50% - ${O/2}px + ${U}px)`;return{left:Ce,top:b}},[Ce,U,O]),gt=(o,b,R,V)=>B.jsx("button",{type:"button",tabIndex:0,className:"aqvs-scrollbar-arrow-button",style:{[ye]:d,[Be]:d},"aria-label":b,onPointerDown:je(o),onPointerUp:ft,onPointerLeave:ft,onPointerCancel:ft,onKeyDown:St(o),"aria-disabled":!l,disabled:!qe,children:B.jsx("span",{"aria-hidden":"true",children:R})},V),Rt=p&&we?{orientation:oe,scrollPosition:t,maxScrollPosition:se,contentSize:s,viewportSize:e,thumbSize:me,thumbPosition:ze,thumbCenter:it,trackSize:Me,isDragging:G,isTapScrollActive:de,visibleStartIndex:D,visibleEndIndex:Y}:null;return B.jsxs("div",{className:ut.twMerge("aqvs-scrollbar",ee,!we&&"pointer-events-none opacity-0",x),style:{[ye]:e,[Be]:d},role:"scrollbar",tabIndex:-1,"aria-controls":I,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":se,"aria-orientation":f?"horizontal":"vertical",children:[!f&&we&&Z&&B.jsx(Ht,{ref:ae,className:ut.twMerge("aqvs-scrollbar-tap-circle-wrapper",ke),size:O,maxVisualDistance:Ve,style:Mt,opacity:tt,renderVisual:K,onDragChange:Ye},"tap-circle"),gt(-1,fe[0],F[0],"arrow-start"),B.jsxs("div",{className:"aqvs-scrollbar-track",style:{borderRadius:d/2},onPointerDown:Je,onPointerMove:Qe,onPointerUp:et,onPointerCancel:lt,onLostPointerCapture:dt,"aria-disabled":!a,children:[Rt&&B.jsx("div",{className:"aqvs-scrollbar-overlay","aria-hidden":!0,children:p?.(Rt)},"overlay"),B.jsx("div",{className:ut.twMerge("aqvs-scrollbar-thumb-wrapper",!(we||G)&&"pointer-events-none opacity-0"),style:{[ye]:me,[ce]:ze,...f?{top:0,bottom:0}:{left:0,right:0}},onPointerDown:yt,role:"slider","aria-orientation":f?"horizontal":"vertical","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":se,"aria-disabled":!i,tabIndex:-1,children:B.jsx("div",{ref:A,className:ut.twMerge("aqvs-scrollbar-thumb",f?"aqvs-scrollbar-thumb-horizontal":"aqvs-scrollbar-thumb-vertical"),"data-testid":"aqvs-scrollbar-thumb","data-thumb-state":Ue,style:{borderRadius:d-1,cursor:i?"pointer":"default"},onMouseEnter:()=>{i&&re(!0)},onMouseLeave:()=>{i&&re(!1)}},"thumb")},"thumb-wrapper")]},"track"),gt(1,fe[1],F[1],"arrow-end")]})},fr=["mouse","pen","touch"],Nt=(s,e)=>!(s==="mouse"||s==="pen"||s==="touch")||e.includes(s),dr=s=>s==="mouse"||s==="pen",xt={maxVelocity:6,minVelocity:.02,deceleration:.0025,velocitySampleWindow:90,startVelocityThreshold:.04},vt=(s,e,t)=>{for(const[n,i,a]of e)t==="add"?s.addEventListener(n,i,a):s.removeEventListener(n,i,a)},Ut=r.forwardRef(({children:s,contentSize:e,viewportSize:t,scrollBarWidth:n=12,enableThumbDrag:i=!0,enableTrackClick:a=!0,enableArrowButtons:l=!0,enablePointerDrag:f=!0,pointerDragInputs:d=fr,onScroll:x,className:I,testId:S,style:w,background:p,tapScrollCircleOptions:D,inertiaOptions:Y,itemCount:G,renderThumbOverlay:le,wheelSpeedMultiplier:te=1,onWheelHorizontal:re,contentInsets:de,visibleStartIndex:Se,visibleEndIndex:A,renderOverlay:L,initialScrollPosition:M=0,contentProps:H},X)=>{const E=r.useRef(Number.isFinite(M)?Math.max(0,M):0),ae=r.useRef(null),$=r.useRef(null),T=r.useRef(re);r.useEffect(()=>{T.current=re},[re]);const k=r.useRef({frame:null,velocity:0,lastTimestamp:null,generation:0}),Ie=r.useMemo(()=>({maxVelocity:Y?.maxVelocity??xt.maxVelocity,minVelocity:Y?.minVelocity??xt.minVelocity,deceleration:Y?.deceleration??xt.deceleration,velocitySampleWindow:Y?.velocitySampleWindow??xt.velocitySampleWindow,startVelocityThreshold:Y?.startVelocityThreshold??xt.startVelocityThreshold}),[Y]),Oe=r.useMemo(()=>({top:Math.max(0,de?.top??0),bottom:Math.max(0,de?.bottom??0)}),[de]);y.debug("[ScrollPane] ScrollPane rendered",()=>({contentSize:e,viewportSize:t,scrollBarWidth:n,className:I,style:w,tapScrollCircleOptions:D,inertiaOptions:Y,enablePointerDrag:f,contentInsets:Oe}));const Re=r.useRef({contentSize:e,viewportSize:t});Re.current={contentSize:e,viewportSize:t};const Z=r.useMemo(()=>e>t,[e,t]),O=r.useCallback(h=>{const{contentSize:ue,viewportSize:fe}=Re.current,F=ue>fe,ee=E.current;if(y.debug("[ScrollPane] scrollTo called",()=>({newPosition:h,contentSize:ue,viewportSize:fe,currentIsScrollable:F,prevPosition:ee})),!F)return E.current!==0&&(E.current=0,x?.(0,ee)),E.current;const oe=typeof h=="function"?h(E.current):h;if(!Number.isFinite(oe))return y.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position",{nextPosition:oe}),E.current;const Ve=Math.max(ue-fe,0),De=xe(oe,0,Ve);return E.current!==De&&(E.current=De,x?.(De,ee)),E.current},[x]),Ce=r.useRef(O);r.useEffect(()=>{Ce.current=O},[O]);const U=r.useCallback(()=>{const h=k.current;h.generation+=1,h.frame!==null&&cancelAnimationFrame(h.frame),h.frame=null,h.velocity=0,h.lastTimestamp=null},[]),ke=r.useRef(U);r.useEffect(()=>{ke.current=U},[U]),r.useEffect(()=>()=>{ke.current()},[]);const v=r.useCallback(h=>{if(!Z)return;const{maxVelocity:ue,minVelocity:fe,deceleration:F,startVelocityThreshold:ee}=Ie,oe=xe(h,-ue,ue);if(Math.abs(oe)<ee)return;U(),k.current.velocity=oe,k.current.lastTimestamp=null;const Ve=k.current.generation,De=Me=>{const ne=k.current;if(ne.generation!==Ve)return;if(ne.lastTimestamp===null){ne.lastTimestamp=Me,ne.frame=requestAnimationFrame(De);return}const me=Me-ne.lastTimestamp;if(ne.lastTimestamp=Me,me<=0){ne.frame=requestAnimationFrame(De);return}const se=ne.velocity;let J=se;const ze=F*me;se>0?J=Math.max(0,se-ze):se<0&&(J=Math.min(0,se+ze));const we=(se+J)/2*me,qe=E.current;if(we!==0&&Ce.current(pe=>pe+we),k.current.generation!==Ve)return;const Ue=E.current,{contentSize:Ee,viewportSize:m}=Re.current,P=Math.max(Ee-m,0);ne.velocity=J;const ie=Ue===qe||Ue<=0&&J<=0||Ue>=P&&J>=0;if(Math.abs(J)<fe||ie){U();return}ne.frame=requestAnimationFrame(De)};k.current.frame=requestAnimationFrame(De)},[Z,Ie,U]),Xe=r.useRef(v);r.useEffect(()=>{Xe.current=v},[v]),r.useLayoutEffect(()=>{Re.current={contentSize:e,viewportSize:t}},[e,t]),r.useLayoutEffect(()=>{const h=$.current;if(!h)return;const ue=()=>{h.scrollTop!==0&&(y.debug("[ScrollPane] Native scroll detected, resetting to 0",()=>({scrollTop:h.scrollTop})),h.scrollTop=0),h.scrollLeft!==0&&(h.scrollLeft=0)};return h.addEventListener("scroll",ue),()=>h.removeEventListener("scroll",ue)},[]),r.useLayoutEffect(()=>{if(Z){y.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change",()=>({contentSize:e,viewportSize:t,scrollPosition:E.current}));const h=xe(e-t,0,e);E.current>h&&O(h)}else O(0)},[Z,O,e,t]),r.useEffect(()=>{const h=F=>{if(F.ctrlKey)return;const ee=F.shiftKey&&F.deltaX===0,oe=ee?F.deltaY:F.deltaX,Ve=ee?0:F.deltaY;if(oe!==0&&Math.abs(oe)>=Math.abs(Ve)){if(T.current){F.preventDefault(),U();let ne=oe;F.deltaMode===1?ne*=16:F.deltaMode===2&&(ne*=t),T.current(ne)}return}if(!Z||F.deltaY===0)return;F.preventDefault(),U();let Me=F.deltaY;F.deltaMode===1?Me*=16:F.deltaMode===2&&(Me*=t),te!==1&&(Me*=te),y.debug("[ScrollPane] wheel event",()=>({deltaY:Me,scrollPosition:E.current,wheelSpeedMultiplier:te,deltaMode:F.deltaMode,scrollTop:$.current?.scrollTop})),O(ne=>ne+Me)},ue=()=>{U()},fe=ae.current;return fe&&(fe.addEventListener("wheel",h,{passive:!1}),fe.addEventListener("pointerdown",ue,{capture:!0,passive:!0})),()=>{fe&&(fe.removeEventListener("wheel",h),fe.removeEventListener("pointerdown",ue,{capture:!0}))}},[Z,O,U,t,te]),r.useImperativeHandle(X,()=>({scrollTo:h=>(U(),O(h)),getScrollPosition:()=>E.current,getContentSize:()=>e,getViewportSize:()=>t}),[O,e,t,U]);const st=r.useId(),N=H?.id??st,K=r.useRef({pointerType:"",pointerId:null,startClientY:0,startScroll:0,isDragging:!1,shouldCancelNextClick:!1,clickResetTimer:null,velocitySamples:[]}),Fe=r.useRef(f),Ae=r.useRef(d);r.useEffect(()=>{Fe.current=f},[f]),r.useEffect(()=>{Ae.current=d},[d]);const ye=r.useRef(Z);r.useEffect(()=>{ye.current=Z},[Z]);const Be=r.useRef(Ie);r.useEffect(()=>{Be.current=Ie},[Ie]),r.useEffect(()=>{const h=K.current;if(f&&Z&&(h.pointerId===null||Nt(h.pointerType,d))||h.pointerId===null)return;const ue=$.current;h.clickResetTimer!==null&&(window.clearTimeout(h.clickResetTimer),h.clickResetTimer=null);const fe=h.isDragging&&h.shouldCancelNextClick,F=h.pointerId;h.pointerId=null,h.pointerType="",h.startClientY=0,h.startScroll=0,h.isDragging=!1,h.shouldCancelNextClick=fe,h.velocitySamples=[],ue?.hasPointerCapture(F)&&ue.releasePointerCapture(F)},[f,d,Z]),r.useEffect(()=>{const h=$.current;if(!h)return;const ue=6,fe=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),F=()=>{const m=K.current;m.pointerId=null,m.pointerType="",m.startClientY=0,m.startScroll=0,m.isDragging=!1,m.velocitySamples=[]},ee=()=>{const m=K.current;m.clickResetTimer!==null&&(window.clearTimeout(m.clickResetTimer),m.clickResetTimer=null)},oe=m=>{const P=K.current,ie=fe();P.velocitySamples.push({clientY:m,time:ie});const pe=Be.current.velocitySampleWindow;P.velocitySamples=P.velocitySamples.filter(ve=>ie-ve.time<=pe)},Ve=m=>m instanceof HTMLElement&&m.closest("[data-scrollpane-ignore-drag='true']")!==null,De=m=>{const P=K.current;P.shouldCancelNextClick&&(m.preventDefault(),m.stopPropagation(),P.shouldCancelNextClick=!1)},Me=m=>{const P=K.current;if(!P.isDragging){if(P.isDragging=!0,P.shouldCancelNextClick=!0,!h.hasPointerCapture(m.pointerId))try{h.setPointerCapture(m.pointerId)}catch{}oe(m.clientY)}},ne=m=>m.isTrusted||m.target===h,me=m=>{const P=K.current;h.hasPointerCapture(m)&&h.releasePointerCapture(m),P.shouldCancelNextClick=!1,ee(),F()},se=m=>{const P=K.current;if(P.pointerId!==m.pointerId)return;if(m.buttons===0&&dr(m.pointerType)){me(m.pointerId);return}if(!(Fe.current&&ye.current)||!Nt(m.pointerType,Ae.current)||!P.isDragging&&(Math.abs(m.clientY-P.startClientY)<ue||(Me(m),!P.isDragging)))return;oe(m.clientY);const ie=m.clientY-P.startClientY,pe=P.startScroll-ie;Ce.current(pe),m.cancelable&&m.preventDefault()},J=()=>{const m=K.current;return m.pointerId!==null||!m.shouldCancelNextClick?!1:(ee(),m.clickResetTimer=window.setTimeout(()=>{const P=K.current;P.shouldCancelNextClick=!1,P.clickResetTimer=null},0),!0)},ze=m=>{const P=K.current;if(P.pointerId!==m.pointerId){J();return}P.isDragging&&P.shouldCancelNextClick&&m.cancelable&&(m.preventDefault(),m.stopPropagation()),P.isDragging&&oe(m.clientY);let ie=0;if(P.isDragging&&P.velocitySamples.length>=2){const ve=P.velocitySamples,We=Be.current.velocitySampleWindow,Ye=ve[ve.length-1],He=ve.find(Ge=>Ye.time-Ge.time<=We)??ve[0];if(Ye&&He&&Ye.time!==He.time){const Ge=Ye.clientY-He.clientY,at=Ye.time-He.time;ie=-(Ge/at)}}ee(),P.shouldCancelNextClick&&(P.clickResetTimer=window.setTimeout(()=>{const ve=K.current;ve.shouldCancelNextClick=!1,ve.clickResetTimer=null},0));const pe=Be.current.startVelocityThreshold;F(),h.hasPointerCapture(m.pointerId)&&h.releasePointerCapture(m.pointerId),Math.abs(ie)>=pe&&Xe.current?.(ie)},it=m=>{if(K.current.pointerId!==null){if(!m.isPrimary||m.pointerType!==K.current.pointerType)return;me(K.current.pointerId)}if(K.current.shouldCancelNextClick&&(ee(),K.current.shouldCancelNextClick=!1),!(Fe.current&&ye.current)||!Nt(m.pointerType,Ae.current)||m.button!==0&&m.pointerType==="mouse"||m.ctrlKey||m.metaKey||m.altKey||Ve(m.target))return;window.dispatchEvent(new CustomEvent(Dt,{detail:{paneId:st}})),ke.current?.();const P=K.current;ee(),P.pointerId=m.pointerId,P.pointerType=m.pointerType,P.startClientY=m.clientY,P.startScroll=E.current,P.isDragging=!1,P.shouldCancelNextClick=!1,P.velocitySamples=[]},we=m=>{if(K.current.pointerId!==m.pointerId){J();return}ne(m)&&me(m.pointerId)},Ue=[["click",De,!0],["pointerdown",it,{passive:!1}],["lostpointercapture",m=>{m.target!==h||K.current.pointerId!==m.pointerId||me(m.pointerId)},void 0]],Ee=[["pointermove",se,{passive:!1}],["pointerup",ze,void 0],["pointercancel",we,void 0]];return vt(h,Ue,"add"),vt(window,Ee,"add"),()=>{vt(h,Ue,"remove"),vt(window,Ee,"remove");const m=K.current;m.pointerId!==null&&h.hasPointerCapture(m.pointerId)&&h.releasePointerCapture(m.pointerId),ee(),F()}},[st]);const ce=r.useCallback(h=>(U(),O(h)),[O,U]);return B.jsxs("div",{ref:ae,"data-testid":S,className:ut.twMerge("aqvs-scroll-pane",I),style:w,children:[B.jsxs("div",{ref:$,className:ut.twMerge("aqvs-scroll-pane-content"),"data-testid":"aqvs-scroll-pane-content",style:{height:t,paddingTop:Oe.top,paddingBottom:Oe.bottom,...f&&Z&&d.some(h=>h==="touch"||h==="pen")?{touchAction:"none"}:{}},...H,id:N,children:[p,s(E.current)]}),B.jsx($t,{contentSize:e,viewportSize:t,scrollPosition:E.current,onScroll:ce,enableThumbDrag:i,enableTrackClick:a,enableArrowButtons:l,scrollBarWidth:n,ariaControls:N,tapScrollCircleOptions:D,itemCount:G,renderThumbOverlay:le,visibleStartIndex:Se,visibleEndIndex:A},"scrollbar"),L?.()]})}),zt=(s,e,t)=>Math.min(Math.max(s,e),t),mr=({dragState:s,normalizedDistance:e,sizeScale:t,size:n})=>{const i=Math.max(n/2,1),a=1+e*.65,l=Math.max(.65,1-e*.25),f=s.direction*e*26*t,d=.8+e*.18,x=3*t,I=6*t,S=22*t,w=Math.abs(f)+I,p=f>0?x:-Math.abs(f)-x,D=Math.max(2.5,3*t),Y=zt(s.offsetX,-i,i),G=zt(s.offsetY,-i,i),le=i*.35,te=Y/i*le,re=G/i*le,de=te*.45,Se=re*.45,A=Math.max(S*.38,6),L=.65+e*.2,M=s.active;return B.jsxs(B.Fragment,{children:[B.jsx("div",{className:"aqvs-tap-scroll-circle-gradient",style:{transform:`scale(${l}, ${a})`,transition:M?"40ms transform ease-out":"200ms ease transform"}}),B.jsx("div",{className:"aqvs-sample-visual-pupil",style:{width:S,height:S,transform:`translate(calc(-50% + ${te}px), calc(-50% + ${re}px)) scale(${l}, ${d*a})`,transition:M?"70ms transform ease-out":"200ms ease transform"}}),B.jsx("div",{className:"aqvs-sample-visual-highlight",style:{width:A,height:A,transform:`translate(calc(-50% + ${de}px), calc(-50% + ${Se}px)) scale(${l}, ${a})`,opacity:L,boxShadow:"0 0 8px rgba(255,255,255,0.45)",transition:M?"120ms opacity 150ms, 120ms transform ease-out ease-out":"220ms ease transform, 240ms opacity ease"}}),B.jsx("div",{className:"aqvs-sample-visual-rod",style:{width:D,height:w,transform:`translate(-50%, ${p}px)`,opacity:e,transition:M?"40ms height, 60ms opacity ease-out ease-out":"200ms ease height, 120ms ease opacity"}})]})},Pt=100,pr=s=>{if(!Number.isFinite(s))return 0n;const e=Math.trunc(s);return e<=0?0n:BigInt(e)},At=(s,e)=>{if(!Number.isFinite(s))throw new Error(`valueFn returned a non-finite value at index ${e}: ${s}`);return s},mt=s=>{if(s<=0||!Number.isFinite(s))return 0;const e=Math.trunc(s);if(e<=2147483647)return e&-e;const t=BigInt(e)&-BigInt(e);return Number(t)};class nt{tree;deltas;size;baseValue;valueFn;total;constructor(e,t,n){this.reset(e,t,n)}reset(e,t,n){const i=Number.isFinite(e)&&e>0?Math.trunc(e):0;if(typeof t!="function"){this.size=i,this.tree=new Map,this.deltas=new Map,this.valueFn=void 0,this.baseValue=t,this.total=this.baseValue*this.size;return}let a=0,l;if(i>0){const f=n?.sampleRange??{from:0,to:Math.min(Pt-1,i-1)};let d=Math.max(0,Math.trunc(f.from)),x=Math.min(Math.trunc(f.to),i-1);if(d>x&&(d=0,x=Math.min(Pt-1,i-1)),i>Pt)a=nt._sampleBaseValueStrided(t,i,Pt),n?.materialize&&(l={from:d,values:nt._collectValidatedValues(t,d,x)});else{const I=nt._collectValidatedValues(t,d,x);a=nt._modeOrMedian([...I]),n?.materialize&&(l={from:d,values:I})}}if(this.size=i,this.tree=new Map,this.deltas=new Map,this.total=void 0,this.valueFn=t,this.baseValue=a,l)for(let f=0;f<l.values.length;f++){const d=l.from+f;if(d>=this.size)break;const x=l.values[f]-this.baseValue;x!==0&&(this.deltas.set(d,x),this._updateTree(d,x))}this.total=this.getTotal()}setValueFn(e,t){if(t?.reset){this.reset(this.size,e);return}typeof e=="function"?this.valueFn=e:(this.valueFn=void 0,this.baseValue=e,this.total=this._computeTreeTotal())}static _collectValidatedValues(e,t,n){const i=[];for(let a=t;a<=n;a++)i.push(At(e(a),a));return i}static _modeOrMedian(e){if(e.length===0)return 0;e.sort((l,f)=>l-f);const t=Math.floor(e.length/2);let n;e.length%2===0?n=Math.floor((e[t-1]+e[t])/2):n=e[t];const i=new Map;let a=0;for(const l of e){const f=(i.get(l)??0)+1;i.set(l,f),f>a&&(a=f)}if(a>e.length*.2){const l=[];for(const[d,x]of i.entries())x===a&&l.push(d);const f=l.reduce((d,x)=>d+x,0);n=Math.floor(f/l.length)}return n}static _sampleBaseValueStrided(e,t,n){if(t<=0)return 0;let i=Math.max(1,Math.ceil(t/n));i%2===0&&(i+=1);const a=[];for(let l=0;l<t&&a.length<n;l+=i)a.push(At(e(l),l));return nt._modeOrMedian(a)}update(e,t){return this.updates([{index:e,value:t}])}updates(e){const t=this._buildDeltaUpdates(e);return t.length>0?this.updateDeltas(t):this.total}updateDelta(e,t){return this.updateDeltas([{index:e,change:t}])}updateDeltas(e){const t=new Map;for(const{index:n,change:i}of e){if(n<0||n>=this.size)throw new Error(`Index ${n} out of bounds`);if(!Number.isInteger(n))throw new Error(`Index must be an integer: ${n}`);if(!Number.isFinite(i))throw new Error(`Change must be a finite number: ${i}`);const l=(t.get(n)??this.deltas.get(n)??0)+i;if(l+this.baseValue<-1e-9)throw new Error(`Change would make the value at index ${n} negative: ${l+this.baseValue}`);t.set(n,l)}for(const{index:n,change:i}of e){const l=(this.deltas.get(n)??0)+i;l===0?this.deltas.delete(n):this.deltas.set(n,l),this._updateTree(n,i)}return this.total}_updateTree(e,t){if(t===0)return;let n=e+1;for(;n<=this.size;){this.tree.set(n,(this.tree.get(n)??0)+t);const i=mt(n);if(i===0)break;n+=i}this.total!==void 0&&(this.total+=t)}_buildDeltaUpdates(e){const t=[],n=new Map;for(const{index:i,value:a}of e){if(i<0||i>=this.size)throw new Error(`Index ${i} out of bounds`);if(!Number.isInteger(i))throw new Error(`Index must be an integer: ${i}`);if(!Number.isFinite(a))throw new Error(`Value must be a finite number: ${a}`);if(a<0)throw new Error("Value cannot be negative.");const l=n.has(i)?n.get(i)??0:this.deltas.get(i)??0,f=l+this.baseValue,d=a-f;d!==0&&t.push({index:i,change:d}),n.set(i,l+d)}return t}_computeTreeTotal(){if(this.size<=0)return 0;let e=0,t=this.size;for(;t>0;){e+=this.tree.get(t)??0;const n=mt(t);if(n===0)break;t-=n}return e+this.baseValue*this.size}_materialize(e,t=!0){if(this.valueFn){const n=this.deltas.get(e)??0,a=At(this.valueFn(e),e)-this.baseValue;if(a!==n&&(a===0?this.deltas.delete(e):this.deltas.set(e,a),t)){const l=a-n;this._updateTree(e,l)}}}_materializeRanges(e,t,n=!1){if(!(e?.materialize&&this.valueFn))return;const i=e.ranges;if(i&&i.length>0){for(const f of i){const d=Math.max(0,Math.trunc(f.from)),x=Math.min(Math.trunc(f.to),this.size-1);for(let I=d;I<=x;I++)this._materialize(I)}if(t===void 0)return;if(n){this._materialize(t);return}const a=i[0].from,l=i[i.length-1].to;t>=a&&t<=l&&this._materialize(t);return}t!==void 0&&this._materialize(t)}_findIndex(e,t={},n){if(this.size>=1073741824)return this._findIndexLarge(e,t,n);if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const i=t.materializeOption?.materialize===!0;let a;for(;;){if(a=this._descend(e,n),a<0||a>=this.size)return{index:-1,total:this.total??this.getTotal(),cumulative:void 0,currentValue:void 0,safeIndex:void 0};if(!i)break;const f=this.deltas.get(a)??0;if(this._materialize(a),(this.deltas.get(a)??0)===f)break}const l=this.prefixSum(a);return{index:a,total:this.total??l.total,cumulative:l.cumulative,currentValue:l.currentValue,safeIndex:l.safeIndex}}_descend(e,t){let n=0,i=0,a=1;for(;a<<1<=this.size;)a<<=1;for(;a>0;a>>=1){const l=n+a;if(l<=this.size){const d=(this.tree.get(l)??0)+this.baseValue*a;(t?i+d<e:i+d<=e)&&(n=l,i+=d)}}return t?n:n-1}_findIndexLarge(e,t,n){if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};const i=pr(this.size);if(i===0n)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const a=t.materializeOption?.materialize===!0;for(;;){let l=0n,f=i-1n,d,x,I=this.total;for(;l<=f;){const p=l+f>>1n,D=Number(p),Y=this.prefixSum(D);if(I=Y.total,n?Y.cumulative>=e:Y.cumulative<=e)if(d=p,x=Y,n){if(p===0n)break;f=p-1n}else l=p+1n;else if(n)l=p+1n;else{if(p===0n)break;f=p-1n}}const S=x,w=d!==void 0?Number(d):-1;if(a&&w>=0){const p=this.deltas.get(w)??0;if(this._materialize(w),(this.deltas.get(w)??0)!==p)continue}return{index:w,total:I,cumulative:S?.cumulative,currentValue:S?.currentValue,safeIndex:S?.safeIndex}}}prefixSum(e,t){if(e<0||Number.isNaN(e))return{cumulative:0,total:this.total,currentValue:0,safeIndex:0};if(this.size===0)return{cumulative:0,total:this.total??0,currentValue:0,safeIndex:0};const n=xe(Math.trunc(e),0,this.size-1),i=t?.materializeOption;this._materializeRanges(i,n,!0);let a=0,l=n+1;for(;l>0;){const d=this.tree.get(l)??0;a+=d;const x=mt(l);if(x===0)break;l-=x}const f=i?.materialize?this.get(n):(this.deltas.get(n)||0)+this.baseValue;return{cumulative:a+this.baseValue*(n+1),total:this.total,currentValue:f,safeIndex:n}}get(e,t){if(this.size===0)return 0;if(!Number.isInteger(e)||e<0||e>=this.size)throw new Error("Index out of bounds");const n=t?.materializeOption;return this._materializeRanges(n,e),(this.deltas.get(e)??0)+this.baseValue}getTotal(e){const t=e?.materializeOption;if(this._materializeRanges(t),this.total===void 0)if(this.size===0)this.total=0;else{this.total=this._computeTreeTotal();const n=this.prefixSum(this.getSize()-1);n.cumulative!==n.total&&y.error("Inconsistent Fenwick Tree state")}return this.total}rebuildTree(e){if(e?.materialize&&this.valueFn){const n=this.valueFn;this.reset(this.size,i=>n(i),{materialize:!0});return}const t=new Map;for(const[n,i]of this.deltas.entries()){if(i===0)continue;let a=n+1;for(;a<=this.size;){t.set(a,(t.get(a)??0)+i);const l=mt(a);if(l===0)break;a+=l}}this.tree=t,this.total=this._computeTreeTotal()}calculateAccumulatedError(){if(this.total===void 0)return 0;let e=this.baseValue*this.size;for(const[t,n]of this.deltas)t<this.size&&(e+=n);return this.total-e}changeSize(e){if(!Number.isFinite(e))throw new Error(`Size must be a finite number: ${e}`);const t=Math.max(0,Math.trunc(e)),n=this.size;if(t===n)return;if(t>n)if(n===0&&this.deltas.size>0){for(const a of this.deltas.keys())a>=t&&this.deltas.delete(a);this.size=t,this.rebuildTree()}else this._growSize(n,t);else{if(t>0)for(const a of this.deltas.keys())a>=t&&this.deltas.delete(a);this.size=t,this.rebuildTree()}const i=this.prefixSum(this.getSize()-1);i.cumulative!==i.total&&y.error("Inconsistent Fenwick Tree state")}static _minCoveredLowBound(e,t){let n=1;for(;;){const i=n*2;if(Math.floor(t/i)*i<=e)break;n=i}return n*Math.floor(e/n)}_propagateDeltaToGrownNodes(e,t,n,i){let a=e+1;for(;a<=n;){const l=mt(a);if(l===0)break;a+=l}for(;a<=i;){this.tree.set(a,(this.tree.get(a)??0)+t);const l=mt(a);if(l===0)break;a+=l}}_growSize(e,t){if(this.size=t,this.deltas.size>0){const n=nt._minCoveredLowBound(e,t);if(e-n<this.deltas.size)for(let a=n;a<e;a++){const l=this.deltas.get(a);l===void 0||l===0||this._propagateDeltaToGrownNodes(a,l,e,t)}else for(const[a,l]of this.deltas.entries())l===0||a<n||this._propagateDeltaToGrownNodes(a,l,e,t)}this.total=this._computeTreeTotal()}getSize(){return this.size}get base(){return this.baseValue}findIndexAtOrAfter(e,t){return this._findIndex(e,t??{},!0)}findIndexAtOrBefore(e,t){return this._findIndex(e,t??{},!1)}}const hr=(s,e)=>{const t=s?.sampleRange,n=e?.sampleRange;return t===n?!1:t&&n?t.from!==n.from||t.to!==n.to:!0},Kt=(s,e,t)=>{const n=Number.isFinite(s)&&s>0?Math.trunc(s):0,i=r.useRef(null),a=r.useRef({size:n,valueOrFn:e,options:t});i.current===null&&(i.current=new nt(n,e,t));const l=i.current,f=a.current,d=f.size!==n,x=f.valueOrFn!==e,I=hr(f.options,t),S=f.size===0&&n>0&&(!i.current||i.current.base===0);if(x||I){const w=t?.resetOnValueFnChange??!0;I||x&&w||S?(t?.debug&&y.debug("[useFenwickMapTree] reset",{valueOrFnChanged:x,optionsChanged:I}),l.reset(n,e,t)):(d&&(t?.debug&&y.debug("[useFenwickMapTree] resize (with valueFn change)",{from:f.size,to:n}),l.changeSize(n)),t?.debug&&y.debug("[useFenwickMapTree] setValueFn (no reset)",{valueOrFnChanged:x}),l.setValueFn(e,{reset:!1})),a.current={size:n,valueOrFn:e,options:t}}else d&&(t?.debug&&y.debug("[useFenwickMapTree] resize",{from:f.size,to:n}),S?l.reset(n,e,t):l.changeSize(n),a.current={size:n,valueOrFn:e,options:t});return l};class gr{key;value;prev=null;next=null;constructor(e,t){this.key=e,this.value=t}}class Vt{head=null;tail=null;addToTail(e){this.tail?(this.tail.next=e,e.prev=this.tail,this.tail=e):this.head=this.tail=e}remove(e){e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev,e.prev=null,e.next=null}removeHead(){const e=this.head;return e&&this.remove(e),e}moveToTail(e){this.remove(e),this.addToTail(e)}}function Wt(s){const e=r.useRef(new Map),t=r.useRef(new Vt),n=Math.floor(s),i=r.useRef(n);r.useEffect(()=>{if(i.current=n,Number.isNaN(n)||n<0){y.warn(`useLruCache: invalid capacity ${s}; the cache will not store any entries.`),e.current.clear(),t.current=new Vt;return}if(Number.isFinite(n))for(;e.current.size>n;){const I=t.current.removeHead();if(I)e.current.delete(I.key);else break}},[s,n]);const a=r.useCallback(I=>{const S=e.current.get(I);if(S)return t.current.moveToTail(S),S.value},[]),l=r.useCallback((I,S)=>{const w=i.current;if(Number.isNaN(w)||w<=0)return;let p=e.current.get(I);if(p)p.value=S,t.current.moveToTail(p);else{if(e.current.size>=w){const D=t.current.removeHead();D&&e.current.delete(D.key)}p=new gr(I,S),e.current.set(I,p),t.current.addToTail(p)}},[]),f=r.useCallback(I=>e.current.has(I),[]),d=r.useCallback(I=>{const S=e.current.get(I);S&&(t.current.remove(S),e.current.delete(I))},[]),x=r.useCallback(()=>{e.current.clear(),t.current=new Vt},[]);return r.useMemo(()=>({get:a,set:l,has:f,remove:d,clear:x}),[a,l,f,d,x])}const br=1e4,xr=()=>{const{get:s,set:e,has:t,clear:n}=Wt(br);return r.useMemo(()=>({get:s,set:e,has:t,clear:n}),[s,e,t,n])},be=(s,e)=>e<=0?0:xe(s,0,e-1),Yt=s=>({top:Math.max(0,s?.top??0),bottom:Math.max(0,s?.bottom??0)}),rt=(s,e)=>s<=e?0:s-e,pt=(s,e)=>s<=0?e:s+e,Ct=1e3,Bt=2e3,Ir=1048576,It=s=>{if(!Number.isFinite(s))return 0n;const e=Math.trunc(s);return e<=0?0n:BigInt(e)},Tr=(s,e,t,n,i,a,l,f)=>{const d=It(n);if(d===0n)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const x=A=>A<0n?0n:A>=d?d-1n:A,I={materializeOption:{materialize:!1}},{index:S,cumulative:w}=a.findIndexAtOrAfter(s,I);let p;S===-1?p=d-1n:(w===s?p=It(S+1):p=It(S),p>=d&&(p=d-1n)),s<=0&&(p=0n),f&&s>=l&&(p=d-1n);const D=A=>{const L=Number(A);if(!Number.isSafeInteger(L))return null;const{cumulative:M}=a.prefixSum(L,{materializeOption:{materialize:!1}});if(!Number.isFinite(M))return null;const{index:H}=a.findIndexAtOrAfter(M+.5,{materializeOption:{materialize:!1}});if(H===-1)return null;const X=It(H);return X>A?X:null},Y=A=>{let L=0,M=A,H=A,X=0n,E=0;for(;M<d&&L<e;){const ae=Number(M),$=i(ae);if(L+=$,H=M,M+=1n,X+=1n,!Number.isFinite($)||$<0)break;if($===0){if(E+=1,E>Ct){const T=D(H);if(T!==null&&T>M)M=T,E=0;else if(T!==null&&T===M&&i(Number(M))>0)E=0;else break}}else E=0}return X===0n&&(H=A),{height:L,end:H}};let{height:G,end:le}=Y(p);if(G<e&&p>0n){let A=p,L=G,M=0;for(;A>0n&&L<e;){A-=1n;const X=Number(A),E=i(X);if(L+=E,!Number.isFinite(E)||E<0)break;if(E===0){if(M+=1,M>Ct){const ae=Number(A);if(!Number.isSafeInteger(ae))break;const{cumulative:$}=a.prefixSum(ae,{materializeOption:{materialize:!1}});if(!Number.isFinite($))break;const{index:T}=a.findIndexAtOrAfter($-.5,{materializeOption:{materialize:!1}}),k=T===-1?-1n:It(T);if(k>=0n&&k<A)A=k+1n,M=0;else if(k===A&&A>=1n&&i(Number(A-1n))>0)M=0;else break}}else M=0}p=x(A);const H=Y(p);G=H.height,le=H.end}const te=x(p),re=x(le),de=x(te-BigInt(Math.max(0,t))),Se=x(re+BigInt(Math.max(0,t)));return{renderingStartIndex:be(Number(de),n),renderingEndIndex:be(Number(Se),n),visibleStartIndex:be(Number(te),n),visibleEndIndex:be(Number(re),n)}},Sr=(s,e,t,n,i,a,l)=>{if(n===0)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const f=Number.isFinite(l),d=f?Math.min(Math.max(0,s),l):Math.max(0,s);if(n>=Number.MAX_SAFE_INTEGER)return Tr(d,e,t,n,i,a,l,f);const{index:x,cumulative:I,currentValue:S}=a.findIndexAtOrAfter(d,{materializeOption:{materialize:!1}}),w=x===-1?e<=0||(I??0)<d+(S??0)?n-1:0:x;let p=be(w,n),D=0;if(x!==-1&&I===d)p=be(x+1,n),D=0;else if(p===x&&I!==void 0&&S!==void 0)D=I-S-d;else{const{cumulative:A,currentValue:L}=a.prefixSum(p,{materializeOption:{materialize:!1}});D=(A??0)-(L??0)-d}const Y=D,G=(A,L)=>{let M=A,H=L,X=0;for(;M<n&&H<e;){const E=i(M);if(H+=E,M++,!Number.isFinite(E)||E<0)break;if(E===0){if(X++,X>Ct){const{cumulative:ae}=a.prefixSum(M-1,{materializeOption:{materialize:!1}}),{index:$}=Number.isFinite(ae)?a.findIndexAtOrAfter(ae+.5,{materializeOption:{materialize:!1}}):{index:-1};if($>M)M=$,X=0;else if($===M&&i(M)>0)X=0;else break}}else X=0}return{cursor:M,height:H}},le=G(p,D);let te=le.cursor;if(D=le.height,D<e&&p>0){let A=D+Math.abs(Math.min(0,Y)),L=p-1,M=0;for(;L>=0&&A<e;){const X=i(L);if(A+=X,!Number.isFinite(X)||X<0){L--;break}if(X===0){if(M++,M>Ct){const{cumulative:E}=a.prefixSum(L,{materializeOption:{materialize:!1}}),{index:ae}=Number.isFinite(E)?a.findIndexAtOrAfter(E-.5,{materializeOption:{materialize:!1}}):{index:-1};if(ae!==-1&&ae<L){L=ae,M=0;continue}if(ae===L&&L>=1&&i(L-1)>0)M=0;else{L--;break}}}else M=0;L--}p=be(L+1,n);const H=G(p,0);te=H.cursor,D=H.height}const re=be(p-t,n),de=be(Math.max(te-1,p),n),Se=be(de+t,n);return{renderingStartIndex:re,renderingEndIndex:Se,visibleStartIndex:p,visibleEndIndex:de}},qt=(s,e,t)=>{const n=Math.max(0,e??0),i=r.useRef({last:0,id:null,arg:null}).current;return r.useEffect(()=>()=>{i.id!==null&&(cancelAnimationFrame(i.id),i.id=null)},[i]),r.useCallback(a=>{if(i.arg=a,i.id!==null)return;const l=f=>{if(i.id=null,i.arg===null)return;const d=f-i.last;if(n===0||i.last===0||d>=n){if(s.current)try{t(s.current,i.arg)}catch(x){console.error("[useThrottledInvoker] Error invoking callback",x)}i.arg=null,i.last=f}i.arg!==null&&(i.id=requestAnimationFrame(l))};i.id=requestAnimationFrame(l)},[n,t,s,i])},Mr=r.memo(({index:s,top:e,height:t,item:n,children:i,clipItemHeight:a,enableKeyboardNavigation:l,onKeyDown:f,onFocus:d,registerItemRef:x})=>{const I=r.useCallback(D=>x(s,D),[s,x]),S=r.useCallback(D=>f(D,s),[s,f]),w=r.useCallback(()=>d(s),[s,d]),p=r.useCallback(D=>{D.currentTarget.focus({preventScroll:!0})},[]);return B.jsx("div",{ref:I,"data-index":s,"data-virtualscroll-item":"true",className:"aqvs-item-container",style:{top:e,height:t,overflow:a?"hidden":void 0},tabIndex:l?-1:void 0,onPointerDown:l?p:void 0,onKeyDownCapture:l?S:void 0,onFocusCapture:l?w:void 0,children:i(n,s)})}),Rr=({itemCount:s,getItem:e,getItemKey:t,getItemHeight:n,viewportSize:i,overscanCount:a=15,className:l,testId:f,onScroll:d,onRangeChange:x,children:I,background:S,initialScrollIndex:w,initialScrollOffset:p,callbackThrottleMs:D=5,contentInsets:Y,onItemFocus:G,scrollBarOptions:le,behaviorOptions:te,onWheelHorizontal:re,contentProps:de},Se)=>{const{width:A,enableThumbDrag:L,enableTrackClick:M,enableArrowButtons:H,enableScrollToTopBottomButtons:X,renderThumbOverlay:E,tapScrollCircleOptions:ae}=le??{},{enablePointerDrag:$,pointerDragInputs:T,enableKeyboardNavigation:k=!0,wheelSpeedMultiplier:Ie,inertiaOptions:Oe,clipItemHeight:Re=!1,resetOnGetItemHeightChange:Z=!1}=te??{},O=r.useRef(null),Ce=r.useRef({renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0,scrollPosition:0,totalHeight:0}),U=r.useRef(null),ke=r.useRef(!1);r.useEffect(()=>{Z&&(U.current=null)},[Z,n]);const v=r.useMemo(()=>Yt(Y),[Y]),[Xe]=r.useState(()=>{const u=typeof w=="number"&&Number.isFinite(w)?Math.max(0,Math.trunc(w)):0;return{from:Math.max(0,u-50),to:u+50}}),st=r.useMemo(()=>({sampleRange:Xe,resetOnValueFnChange:Z,materialize:!0}),[Z,Xe]),N=Kt(s,n,st),[K]=r.useState(()=>{let c=0,u=0;if(typeof w=="number"){const g=xe(w,0,s-1),C=xe(g-a*2,0,s-1),_=xe(g+a*2,0,s-1),z=w>0?{materializeOption:{materialize:!0,ranges:[{from:C,to:_}]}}:void 0,{cumulative:j,total:W,currentValue:Pe}=N.prefixSum(w,z),he=Math.max(j-Pe,0);c=pt(he,v.top),u=W??N.getTotal()}else typeof p=="number"&&(c=pt(Math.max(p,0),v.top)),u=N.getTotal();return{position:c,total:u}}),[Fe,Ae]=r.useState(K.position),[ye,Be]=r.useState(K.total),ce=r.useRef(K.position),h=r.useRef(v.top),ue=r.useRef(d??void 0),fe=r.useRef(x??void 0),F=r.useRef(new Map),ee=r.useRef(null),oe=r.useRef(null),[Ve,De]=r.useState(null),[Me,ne]=r.useState(!1),me=r.useRef(null),se=r.useRef(!1),J=r.useRef(0),ze=r.useRef(!1),it=r.useRef(!1),we=r.useRef(s);we.current!==s&&(we.current=s,it.current=!0),r.useEffect(()=>{ue.current=d??void 0,fe.current=x??void 0},[x,d]);const qe=r.useCallback(c=>{if(k&&c&&typeof c.focus=="function")try{c.focus({preventScroll:!0})}catch{c.focus()}},[k]),Ue=r.useCallback((c,{position:u,totalHeight:g})=>{c(u,g)},[]),Ee=qt(ue,D,Ue),m=r.useCallback((c,u)=>{c(u)},[]),P=qt(fe,D,m),ie=r.useRef(v.top);ie.current=v.top;const pe=r.useRef(Ee);pe.current=Ee,r.useEffect(()=>(ke.current=!1,()=>{ke.current=!0,me.current&&(clearTimeout(me.current),me.current=null)}),[]),r.useEffect(()=>{k||(F.current.clear(),ee.current=null,oe.current=null)},[k]);const ve=r.useCallback((c,u)=>{if(!u){F.current.delete(c);return}k&&(F.current.set(c,u),ee.current===c&&(ee.current=null,oe.current=c,qe(u)))},[k,qe]),We=.01,Ye=r.useRef({rafId:null,loopActive:!1,idleFrames:0,lastRenderedPosition:K.position}),He=r.useCallback(()=>{const c=Ye.current;c.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(c.rafId),c.rafId=null,c.loopActive=!1,c.idleFrames=0},[]);r.useEffect(()=>()=>{He()},[He]);const Ge=r.useRef(()=>{}),at=r.useCallback(()=>{const c=Ye.current;c.rafId=null;const u=ce.current,g=rt(u,ie.current),C=N.getTotal();if(Ae(z=>Math.abs(z-u)<We?z:u),Math.abs(c.lastRenderedPosition-u)>=We?(pe.current({position:g,totalHeight:C}),c.lastRenderedPosition=u,c.idleFrames=0):c.idleFrames+=1,c.idleFrames>=2){He();return}if(typeof requestAnimationFrame=="function"){c.rafId=requestAnimationFrame(z=>Ge.current(z));return}c.loopActive=!1},[N,He]);Ge.current=at;const ot=r.useCallback(()=>{const c=Ye.current;if(c.idleFrames=0,!c.loopActive){if(c.loopActive=!0,typeof requestAnimationFrame=="function"){c.rafId=requestAnimationFrame(at);return}c.loopActive=!1}},[at]),Q=r.useCallback((c,u)=>{const g=u?.immediate??!1,C=rt(c,v.top);if(ce.current=c,g){Ye.current.lastRenderedPosition=c,Ye.current.idleFrames=0,Ae(c),Ee({position:C,totalHeight:N.getTotal()});return}ot()},[ot,N,v.top,Ee]),Ze=r.useCallback(c=>{const u=O.current;if(!u)return c;const g=u.getScrollPosition();J.current+=1;const C=u.scrollTo(c);return C===g&&(J.current=Math.max(0,J.current-1)),Math.abs(C-c)>.5&&(ze.current=!0),C},[]),ht=r.useRef(!1);r.useEffect(()=>{if(!ht.current)if(ht.current=!0,typeof p=="number"){const c=pt(Math.max(p,0),v.top),u=Math.abs(c-ce.current)>.5;Q(c,{immediate:!0}),u&&O.current?.scrollTo(c)}else Q(ce.current,{immediate:!0})},[p,v.top,Q]),r.useEffect(()=>{const c=N.getTotal();if(ye!==c){Be(c);return}if(ze.current){ze.current=!1;const u=O.current;if(u&&Math.abs(u.getScrollPosition()-ce.current)>.5){const g=Ze(ce.current);ze.current=!1,Q(g,{immediate:!0})}}},[N,ye,s,Ze,Q]),r.useEffect(()=>{if(U.current!==null){const{index:c,align:u,offset:g}=U.current,C=be(c,s),{cumulative:_,currentValue:z}=N.prefixSum(C,{materializeOption:{materialize:!1}});if(_!==void 0&&z!==void 0){const j=Math.max(_-z,0);let W=j;u==="bottom"?W=_-i:u==="center"&&(W=j+z/2-i/2),g&&(W-=g),W=Math.max(0,W);const Pe=Math.max(0,ye+v.top+v.bottom-i),he=Math.min(pt(W,v.top),Pe);Math.abs(he-ce.current)>1&&(y.debug("[VirtualScroll] Drift correction",{from:ce.current,to:he,targetIndex:C}),J.current===0&&(J.current+=1),O.current?.scrollTo(he),Q(he,{immediate:!0}))}}it.current=!1},[ye,N,s,v.top,Q,i,v.bottom]),r.useEffect(()=>{const c=h.current;if(c===v.top)return;const u=rt(ce.current,c),g=pt(u,v.top);h.current=v.top,ce.current=g,O.current?.scrollTo(g),Q(g,{immediate:!0})},[v.top,Q]);const Tt=r.useCallback((c,u)=>{if(s===0)return;const g=be(c,s),C=N.get(g),_=u-C,z=N.update(g,u);z!==void 0&&Be(z),y.debug("[VirtualScroll] Updated item size manually",{index:g,size:u,total:z});let j=U.current?U.current.index:null;if(j===null){const W=ce.current,Pe=Yt(Y).top,he=rt(W,Pe),{index:ge,cumulative:Le}=N.findIndexAtOrAfter(he,{materializeOption:{materialize:!1}});j=Le!==void 0&&Le===he?ge+1:ge}if(j!==-1&&g<j&&_!==0){const W=ce.current,Pe=W+_;Ze(Pe),Q(Pe,{immediate:!0}),y.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)",{from:W,to:Pe,causedByIndex:g,delta:_,activeVisibleStartIndex:j})}},[N,s,Ze,Q,Y]),je=r.useCallback((c,u)=>{if(!O.current||s===0)return;const g=be(c,s),C=be(g-a*2,s),_=be(g+a*2,s),{cumulative:z,total:j,currentValue:W}=N.prefixSum(g,{materializeOption:{materialize:!0,ranges:[{from:C,to:_}]}});if(y.debug("[VirtualScroll] Scrolling to index:",g,"ItemBottom:",z,"Total height:",j,"ItemHeight:",W,"safeIndexFrom:",C,"safeIndexTo:",_),!j)return;const Pe=Math.max(z-W,0);let he=Pe;u?.align==="bottom"?he=z-i:u?.align==="center"&&(he=Pe+W/2-i/2),u?.offset&&(he-=u.offset),he=Math.max(0,he);const ge=pt(he,v.top),Le=O.current?.getContentSize()??j+v.top+v.bottom,Ne=Math.max(0,Le-i),_e=Math.min(ge,Ne);U.current={index:g,align:u?.align,offset:u?.offset};const bt=O.current?.getScrollPosition()??-1,wt=Math.abs(bt-_e)>.5;se.current=!1,J.current=0,wt&&(se.current=!0,J.current+=1,O.current?.scrollTo(_e)),Be(j),Q(_e,{immediate:!0}),y.debug("[VirtualScroll] Setting scroll position to:",_e,{original:ge,max:Ne})},[N,a,s,v.top,v.bottom,i,Q]),ft=r.useCallback(c=>{if(!O.current||s===0)return;const u=N.getTotal(),g=xe(Math.floor(c),0,u),{index:C,cumulative:_,currentValue:z}=N.findIndexAtOrAfter(g,{materializeOption:{materialize:!1}}),W=(_??0)-(z??0)-g;je(C,{offset:W})},[N,s,je]),St=r.useCallback(c=>{const u=rt(ce.current,v.top),g=typeof c=="function"?c(u):c;ft(g);const C=O.current?.getScrollPosition(),_=typeof C=="number"?C:ce.current;return Q(_),_},[v.top,ft,Q]),yt=r.useCallback((c,u)=>{y.debug("[VirtualScroll] Scroll position changed:",c);const g=se.current;g&&(se.current=!1);const C=J.current>0;if(C&&(J.current=0),g||C||it.current||(U.current=null),Q(c),X){if(g||C)return;const _=c-u;if(y.debug("[VirtualScroll] Scroll diff:",_,"New:",c,"Prev:",u),Math.abs(_)>1){const z=_>0?"down":"up";De(z),ne(!0),y.debug("[VirtualScroll] Showing scroll buttons. Direction:",z),me.current&&clearTimeout(me.current),me.current=setTimeout(()=>{ne(!1),y.debug("[VirtualScroll] Hiding scroll buttons")},2e3)}}},[Q,X]),Je=r.useMemo(()=>rt(Fe,v.top),[v.top,Fe]),$e=r.useMemo(()=>{const c=N.getTotal(),u=Sr(Je,i,a,s,n,N,c);return y.debug("[VirtualScroll] Calculated rendering range:",()=>({...u,scrollPosition:Je,renderingContentSize:c,overscanCount:a,viewportSize:i})),u},[Je,i,a,s,n,N]),{renderingStartIndex:Qe,renderingEndIndex:et,visibleStartIndex:lt,visibleEndIndex:dt}=$e,tt=r.useCallback((c,u)=>{if(!k||s===0)return;const g=be(c,s);if(!(u?.ensureVisible??!0)){const Ne=F.current.get(g);Ne&&(ee.current=null,oe.current=g,qe(Ne));return}const _=N.prefixSum(g,{materializeOption:{materialize:!1}}),z=_.currentValue,j=Math.max(_.cumulative-z,0),W=j+z,Pe=rt(ce.current,v.top),he=Pe+i;if(j<Pe||W>he){je(g);const Ne=F.current.get(g);Ne?(ee.current=null,oe.current=g,qe(Ne)):ee.current=g;return}const Le=F.current.get(g);if(Le){ee.current=null,oe.current=g,qe(Le);return}ee.current=g},[k,s,N,v.top,je,qe,i]),Mt=r.useCallback((c,u)=>{if(!k||c.defaultPrevented||c.altKey||c.metaKey||c.ctrlKey)return;const g=c.target;if(g){const C=g.tagName;if(C==="INPUT"||C==="TEXTAREA"||C==="SELECT"||g.isContentEditable)return}if(c.key==="ArrowDown"){u<s-1&&(c.preventDefault(),tt(u+1));return}if(c.key==="ArrowUp"){u>0&&(c.preventDefault(),tt(u-1));return}if(c.key==="PageDown"){if(u<s-1){c.preventDefault();const{visibleStartIndex:C,visibleEndIndex:_}=Ce.current,z=Math.max(_-C+1,1),j=Math.max(z,1),W=be(Math.min(u+j,s-1),s);tt(W)}return}if(c.key==="PageUp"&&u>0){c.preventDefault();const{visibleStartIndex:C,visibleEndIndex:_}=Ce.current,z=Math.max(_-C+1,1),j=Math.max(z,1),W=be(u-j,s);tt(W)}},[k,s,tt]),gt=r.useCallback(c=>{if(!k)return;const u=be(c,s);ee.current=null,oe.current=u,G?.(u)},[k,s,G]);r.useEffect(()=>{const c=O.current?.getScrollPosition()??0,u=ce.current,g=rt(u,v.top);y.debug("[VirtualScroll] Range change effect triggered",()=>({renderingStartIndex:Qe,renderingEndIndex:et,visibleStartIndex:lt,visibleEndIndex:dt,scrollPositionState:Fe,paneScrollPosition:u,logicalScrollPosition:g,contentSize:ye,scrollPaneScrollPosition:c})),P({renderingStartIndex:Qe,renderingEndIndex:et,visibleStartIndex:lt,visibleEndIndex:dt,scrollPosition:g,totalHeight:ye})},[ye,et,Qe,v.top,P,Fe,dt,lt]);const Rt=r.useCallback(()=>{if(!X)return null;const c=Me&&Ve!==null,u=Ve==="up";return B.jsx("div",{className:"aqvs-scroll-to-edge-overlay","data-visible":c,children:u?B.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top",children:B.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:g=>{g.stopPropagation(),se.current=!0,je(0),ne(!1)},children:"Top"})}):B.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom",children:B.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:g=>{g.stopPropagation(),se.current=!0,je(s-1),ne(!1)},children:"Bottom"})})})},[X,Me,Ve,je,s]),o=r.useRef(0),{visibleItems:b,renderAnchor:R}=r.useMemo(()=>{if(s===0)return{visibleItems:B.jsx("div",{className:"aqvs-no-items-container",children:B.jsx("div",{className:"aqvs-no-items-text",children:"No items"})}),renderAnchor:0};const c=be(Qe,s),u=be(et,s),{cumulative:g,currentValue:C}=N.prefixSum(c,{materializeOption:{materialize:!1}}),_=g-C;Number.isFinite(_)&&Math.abs(_-o.current)>Ir&&(o.current=_);const z=o.current,j=[],W=[];let Pe=0,he=_;for(let ge=c;ge<=u;ge++){if(W.length>=Bt){y.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.",{cap:Bt,safeRenderingStartIndex:c,safeRenderingEndIndex:u});break}const Le=n(ge),Ne=N.get(ge),_e=Le-Ne;_e!==0&&j.push({index:ge,value:Le});const bt=he+Pe,wt=t?t(ge):ge;W.push(B.jsx(Mr,{index:ge,top:bt-z,height:Le,item:e(ge),clipItemHeight:Re,enableKeyboardNavigation:k,onKeyDown:Mt,onFocus:gt,registerItemRef:ve,children:I},wt)),Pe+=_e,he+=Ne}return j.length>0&&Promise.resolve().then(()=>{if(ke.current)return;let ge=0;for(const _e of j)if(_e.index<lt){const bt=N.get(_e.index);ge+=_e.value-bt}const Le=N.updates(j);if(ke.current||typeof Le!="number")return;Be(Le),y.debug("[VirtualScroll] Updated heights for items",j,"New total height:",Le);const Ne=O.current?.getScrollPosition()??ce.current;if(ge!==0){const _e=Ne+ge;Ze(_e),Q(_e,{immediate:!0}),y.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)",{from:Ne,to:_e,shiftAmount:ge})}else Ne!==ce.current&&Q(Ne)}),{visibleItems:W,renderAnchor:z}},[I,Re,ye,k,s,N,e,t,n,gt,Mt,Ze,ve,et,Qe,Q,lt]),V=r.useCallback(c=>{const u=(D??0)>0,g=Math.abs(c-Fe),C=u&&g>.5?Fe:c,_=rt(C,v.top);if(y.debug("[VirtualScroll] Rendering visible items",()=>({currentScrollPosition:c,effectiveScrollPosition:_,renderingStartIndex:Qe,renderingEndIndex:et,itemCount:s,viewportSize:i,callbackThrottleMs:D,diff:g,rawEffectiveScrollPosition:C})),s===0)return b;const z=v.top+R-C,j=v.bottom>0?B.jsx("div",{className:"aqvs-bottom-inset",style:{top:N.getTotal()-R,height:v.bottom}},"virtualscroll-bottom-inset"):null;return y.debug("[VirtualScroll] Rendering items",()=>({containerTop:z,logicalScrollPosition:Je,resolvedInsets:v,effectiveScrollPosition:_})),B.jsxs("div",{className:"aqvs-items-wrapper",style:{top:0,transform:`translateY(${z}px)`,willChange:"transform"},children:[b,j]})},[D,s,N,Je,R,et,Qe,v,Fe,i,b]),q=r.useMemo(()=>({renderingStartIndex:$e.renderingStartIndex,renderingEndIndex:$e.renderingEndIndex,visibleStartIndex:$e.visibleStartIndex,visibleEndIndex:$e.visibleEndIndex,scrollPosition:Je,totalHeight:N.getTotal()}),[$e,Je,N,ye]);r.useEffect(()=>{Ce.current=q},[q]),r.useImperativeHandle(Se,()=>({getScrollPosition:()=>O.current?.getScrollPosition()??-1,getContentSize:()=>O.current?.getContentSize()??-1,getViewportSize:()=>O.current?.getViewportSize()??-1,scrollTo:St,scrollToIndex:je,getFenwickTreeTotalHeight:()=>N.getTotal(),getFenwickSize:()=>N.getSize(),focusItemAtIndex:tt,getRange:()=>Ce.current,updateItemSize:Tt}),[St,je,N,tt,Tt]);const Te=N.getTotal()+v.top+v.bottom;return B.jsx(Ut,{ref:O,contentSize:Te,viewportSize:i,className:l,testId:f,onScroll:yt,background:S,tapScrollCircleOptions:ae,inertiaOptions:Oe,itemCount:s,scrollBarWidth:A,enableThumbDrag:L,enableTrackClick:M,enableArrowButtons:H,enablePointerDrag:$,pointerDragInputs:T,renderThumbOverlay:E,wheelSpeedMultiplier:Ie,onWheelHorizontal:re,contentInsets:v,contentProps:de,visibleStartIndex:lt,visibleEndIndex:dt,renderOverlay:Rt,initialScrollPosition:K.position,children:V})},vr=r.forwardRef(Rr);exports.FenwickMapTree=nt;exports.ScrollBar=$t;exports.ScrollPane=Ut;exports.TAP_SCROLL_SPEED_DEFAULTS=Lt;exports.VirtualScroll=vr;exports.computeAutoTapScrollMaxSpeedMultiplier=jt;exports.computeTapScrollSpeed=Xt;exports.minmax=xe;exports.tapScrollCircleSampleVisual=mr;exports.useFenwickMapTree=Kt;exports.useHeightCache=xr;exports.useLruCache=Wt;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const B=require("react/jsx-runtime"),r=require("react"),ut=require("tailwind-merge");class y{level;prefix;impl;constructor(e=2,t="[virtualscroll]",n=console){this.level=e,this.prefix=t,this.impl=n}static instance=new y(2,"[virtualscroll]");static setLevel(e){y.instance.setLevel(e)}setLevel(e){this.level=e}static setImplementation(e){y.instance.setImplementation(e)}setImplementation(e){this.impl=e}static setPrefix(e){y.instance.setPrefix(e)}setPrefix(e){this.prefix=e}static isEnabled(e){return y.instance.isEnabled(e)}isEnabled(e){return this.level<=e}static resolveLazy(e){if(typeof e!="function")return e;try{return e()}catch{return e}}formatMessage(e){return typeof e=="string"?[`${this.prefix} ${e}`]:[this.prefix,e]}static debug(e,...t){y.instance.debug(e,...t)}debug(e,...t){this.level<=0&&this.impl.debug(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}static info(e,...t){y.instance.info(e,...t)}info(e,...t){this.level<=1&&this.impl.info(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}static warn(e,...t){y.instance.warn(e,...t)}warn(e,...t){this.level<=2&&this.impl.warn(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}static error(e,...t){y.instance.error(e,...t)}error(e,...t){this.level<=3&&this.impl.error(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}}const _t={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Et=6,Gt=8,Zt=({dragState:s,normalizedDistance:e})=>{const t=1+e*.18,n=.16+e*.24,i=.38+e*.28,a=s.active?"80ms ease-out":"220ms ease";return B.jsxs(B.Fragment,{children:[B.jsx("div",{className:"aqvs-tap-scroll-circle-visual-outer",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.62), rgba(72,72,72,0.48))",boxShadow:`0 0 0 1px rgba(255,255,255,0.28), 0 10px 22px rgba(0,0,0,${n})`,transform:`scale(${t})`,transition:`${a}, ${s.active?"80ms":"260ms"} box-shadow ease`}}),B.jsx("div",{className:"aqvs-tap-scroll-circle-inner",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.72), rgba(28,28,28,0.58))",boxShadow:"inset 0 4px 10px rgba(0,0,0,0.24), inset 0 0 2px rgba(255,255,255,0.55)",opacity:i,transition:s.active?"120ms opacity ease-out":"220ms opacity ease"}})]})},Ht=r.memo(r.forwardRef(({onDragChange:s,className:e,maxVisualDistance:t=160,size:n=40,style:i,opacity:a=1,renderVisual:l},f)=>{const[d,x]=r.useState(_t),I=r.useRef(null),S=r.useRef(null),w=r.useRef({x:0,y:0}),p=r.useRef(null),D=r.useRef(0),Y=r.useCallback(T=>{x(T),s(T)},[s]),G=r.useCallback((T,N,Ie=!1)=>{const{x:Oe,y:Re}=w.current,Z=T-Oe,O=N-Re,Ce=Math.abs(O),U=Ce<Et?0:O<0?-1:1,Ne=D.current;let v=U;const Xe=Et+Gt;U===0?Ne!==0&&Ce<Xe?v=Ne:(v=0,Ie||(D.current=0)):U!==Ne&&Ne!==0&&Ce<Xe?v=Ne:D.current=U,Y({active:Ie||Ce>=Et,offsetX:Z,offsetY:O,distance:Ce,direction:v,pointerId:I.current})},[Y]),le=r.useCallback(T=>{if(T===null)return;const N=p.current;N?.hasPointerCapture(T)&&N.releasePointerCapture(T)},[]),te=r.useCallback((T=!1)=>{T&&le(I.current),I.current=null,S.current=null,D.current=0,Y(_t)},[Y,le]),re=r.useCallback(T=>{if(I.current!==null&&I.current!==T.pointerId){S.current={pointerId:T.pointerId,clientX:T.clientX,clientY:T.clientY},T.preventDefault(),T.stopPropagation();return}T.preventDefault(),T.stopPropagation();const N=p.current??T.currentTarget,{left:Ie,top:Oe,width:Re,height:Z}=N.getBoundingClientRect();w.current={x:Ie+Re/2,y:Oe+Z/2},I.current=T.pointerId;try{N.setPointerCapture(T.pointerId)}catch{}G(T.clientX,T.clientY,!0)},[G]),de=r.useCallback(T=>{if(I.current!==T.pointerId){S.current!==null&&S.current.pointerId===T.pointerId&&(S.current={pointerId:T.pointerId,clientX:T.clientX,clientY:T.clientY});return}T.preventDefault(),G(T.clientX,T.clientY)},[G]),Se=r.useCallback(T=>{if(I.current!==T.pointerId){S.current!==null&&S.current.pointerId===T.pointerId&&(S.current=null);return}T.preventDefault(),T.stopPropagation();const N=S.current;if(S.current=null,N!==null){le(T.pointerId);const Ie=p.current;let Oe=!0;if(Ie!==null&&typeof Ie.setPointerCapture=="function")try{Ie.setPointerCapture(N.pointerId)}catch(Re){(typeof Re=="object"&&Re!==null&&"name"in Re?Re.name:void 0)==="NotFoundError"&&(Oe=!1)}if(Oe){I.current=N.pointerId,G(N.clientX,N.clientY,!0);return}}te(!0)},[te,le,G]),A=r.useCallback(T=>{T.target===T.currentTarget&&I.current===T.pointerId&&te(!1)},[te]);r.useImperativeHandle(f,()=>({reset:()=>{te(!0)},getElement:()=>p.current}),[te]);const L=Math.min(Math.max(a,0),1),M=n/64,H=Math.min(d.distance,t)/t,X=d.direction*H*10*M,E=l??Zt,ae={dragState:d,normalizedDistance:H,sizeScale:M,size:n,opacity:L},$={...i,width:n,height:n,transform:`translateY(${X}px)`};return $.opacity=L,B.jsx("div",{ref:p,"data-testid":"virtual-scroll-tap-circle",className:ut.twMerge("aqvs-tap-scroll-circle",e),style:$,tabIndex:-1,onPointerDown:re,onPointerMove:de,onPointerUp:Se,onPointerCancel:Se,onLostPointerCapture:A,role:"presentation",children:E(ae)})}));Ht.displayName="TapScrollCircle";const xe=(s,e,t)=>Math.max(e,Math.min(t,s)),Dt="virtualscroll:tap-scroll-cancel",Ot=20,Jt=250,Qt=60,er=20,tr=20,Lt={maxDistance:240,minSpeedMultiplier:.2},rr=Lt.maxDistance,Ft={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Nt=2.2,nr=8,sr=120,ir=1/10,Ke={enabled:!0,size:40,offsetX:-80,offsetY:0,className:void 0,maxVisualDistance:rr,minSpeedMultiplier:Lt.minSpeedMultiplier,opacity:.9,renderVisual:void 0,maxSpeedCurve:void 0},ar=s=>s?{mainSizeKey:"width",crossSizeKey:"height",positionKey:"left",selectDelta:(e,t)=>e,getPointerCoordinate:({clientX:e})=>e,arrowLabels:["Scroll left","Scroll right"],arrowIcons:["◀","▶"],directionClass:"aqvs-scrollbar-horizontal",orientation:"horizontal"}:{mainSizeKey:"height",crossSizeKey:"width",positionKey:"top",selectDelta:(e,t)=>t,getPointerCoordinate:({clientY:e})=>e,arrowLabels:["Scroll up","Scroll down"],arrowIcons:["▲","▼"],directionClass:"aqvs-scrollbar-vertical",orientation:"vertical"},or=(s,e)=>{const t=s?.maxSpeedMultiplier,n=typeof t=="number"?t:jt(e);return{enabled:s?.enabled??Ke.enabled,size:s?.size??Ke.size,offsetX:s?.offsetX??Ke.offsetX,offsetY:s?.offsetY??Ke.offsetY,className:s?.className??Ke.className,maxVisualDistance:s?.maxVisualDistance??Ke.maxVisualDistance,maxSpeedMultiplier:n,minSpeedMultiplier:Math.max(s?.minSpeedMultiplier??Ke.minSpeedMultiplier,0),opacity:xe(s?.opacity??Ke.opacity,0,1),renderVisual:s?.renderVisual??Ke.renderVisual,maxSpeedCurve:s?.maxSpeedCurve??Ke.maxSpeedCurve}},lr=({isDragging:s,isThumbHovered:e,enableThumbDrag:t})=>r.useMemo(()=>t?s?"dragging":e?"hover":"idle":"disabled",[t,s,e]),cr=({canUseArrowButtons:s,enableArrowButtons:e,resetTapScroll:t,scrollByStep:n})=>{const i=r.useRef(null),a=r.useRef(null),l=r.useRef(null),f=r.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null),a.current!==null&&(window.clearTimeout(a.current),a.current=null),l.current!==null&&(window.removeEventListener("pointerup",l.current),window.removeEventListener("pointercancel",l.current),window.removeEventListener("blur",l.current),l.current=null)},[]),d=r.useCallback(()=>{f()},[f]),x=r.useCallback(S=>w=>{if(!s)return;w.cancelable&&w.preventDefault(),w.stopPropagation(),t(),f(),n(S),a.current=window.setTimeout(()=>{i.current=window.setInterval(()=>{n(S)},Qt)},Jt);const p=()=>f();l.current=p,window.addEventListener("pointerup",p),window.addEventListener("pointercancel",p),window.addEventListener("blur",p)},[s,f,t,n]),I=r.useCallback(S=>w=>{e&&(w.key==="Enter"||w.key===" "||w.key==="Spacebar")&&(w.preventDefault(),n(S))},[e,n]);return r.useEffect(()=>{s||f()},[s,f]),r.useEffect(()=>()=>{f()},[f]),{handleArrowPointerDown:x,handleArrowPointerUp:d,handleArrowKeyDown:I}},ur=700,ct=(s,e)=>typeof s=="number"&&Number.isFinite(s)?s:e,Xt=({distance:s,maxDistance:e,viewportSize:t,minSpeedMultiplier:n,maxSpeedMultiplier:i,hasCustomMaxSpeedMultiplier:a,curve:l})=>{const f=Math.max(ct(s,0),0),d=ct(e,0),x=d>0?Math.min(f,d)/d:1,I=Math.max(ct(t,0),0),S=Math.max(ct(n,0),0),w=Math.max(ct(i,0),0),p=Math.max(I*S,40),D=a?p:1200,Y=Math.max(I*w,D),G=l?Math.max(ct(l.exponentialScale,w),0):0,le=l?Math.min(Y,Math.max(I*G,p)):Y,te=Math.max(le,p);let re=x**1.1;if(l){const Se=Math.min(Math.max(ct(l.exponentialSteepness,0),0),ur);if(Se===0)re=x;else{const A=Math.expm1(Se)||1;re=Math.min(Math.max(Math.expm1(Se*x)/A,0),1)}}const de=Math.min(Math.max(ct(l?.easedOffset,0),0),1);return p+(te-p)*(de+(1-de)*re)},jt=s=>{if(!s||s<=0)return Nt;const e=Math.max(1,s),t=Math.log10(e),n=Nt+t*nr;return xe(n,Nt,sr)},$t=({contentSize:s,viewportSize:e,scrollPosition:t,onScroll:n,enableThumbDrag:i=!0,enableTrackClick:a=!0,enableArrowButtons:l=!0,horizontal:f=!1,scrollBarWidth:d=12,className:x,ariaControls:I,tapScrollCircleOptions:S,itemCount:w,renderThumbOverlay:p,visibleStartIndex:D,visibleEndIndex:Y})=>{const[G,le]=r.useState(!1),[te,re]=r.useState(!1),[de,Se]=r.useState(!1),A=r.useRef(null),L=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null}),M=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}),H=r.useRef(t),X=r.useRef(n),E=r.useRef(Ft),ae=r.useRef(null),$=r.useRef(null),T=r.useRef(null),N=r.useRef(0),Ie=r.useRef(0),Oe=r.useMemo(()=>or(S,w),[w,S]),Re=r.useMemo(()=>ar(f),[f]),{enabled:Z,size:O,offsetX:Ce,offsetY:U,className:Ne,maxVisualDistance:v,maxSpeedMultiplier:Xe,minSpeedMultiplier:st,opacity:k,renderVisual:K,maxSpeedCurve:Fe}=Oe,Ae=r.useRef({viewportSize:e,maxScrollPosition:Math.max(s-e,0),scrollBarVisible:s>e,effectiveTapMaxDistance:Math.max(v,1),tapCircleMaxSpeedMultiplier:Xe,tapCircleMinSpeedMultiplier:st,tapCircleMaxSpeedCurve:Fe,tapScrollCircleOptions:S,effectiveTrackLength:0,onScroll:n,scrollPosition:t}),{mainSizeKey:ye,crossSizeKey:Be,positionKey:ce,selectDelta:h,getPointerCoordinate:ue,arrowLabels:fe,arrowIcons:F,directionClass:ee,orientation:oe}=Re,Ve=Math.max(v,1),De=e/s,Me=Math.max(e-d*2,0),ne=De*Me,me=Math.min(Math.max(Ot,ne||0),Me||Ot),se=s-e,J=Math.max(Me-me,0),ze=se<=0||J<=0?0:xe(t/se*J,0,J),it=ze+me/2,we=s>e||G,qe=we&&l;r.useLayoutEffect(()=>{Ae.current={viewportSize:e,maxScrollPosition:se,scrollBarVisible:we,effectiveTapMaxDistance:Ve,tapCircleMaxSpeedMultiplier:Xe,tapCircleMinSpeedMultiplier:st,tapCircleMaxSpeedCurve:Fe,tapScrollCircleOptions:S,effectiveTrackLength:J,onScroll:n,scrollPosition:t}}),r.useLayoutEffect(()=>{H.current=t},[t]),r.useLayoutEffect(()=>{X.current=n},[n]),r.useEffect(()=>{i||re(!1)},[i]);const Ue=lr({isDragging:G,isThumbHovered:te,enableThumbDrag:i}),Ee=r.useCallback((o,b)=>{const R=Ae.current,V=b??H.current;if(X.current){const u=X.current(o,V);if(typeof u=="number"&&Number.isFinite(u))return H.current=u,u}const q=typeof o=="function"?o(V):o,Te=Math.max(R.maxScrollPosition,0),c=R.scrollBarVisible?xe(q,0,Te):0;return H.current=c,c},[]),m=r.useCallback(o=>{const b=Ae.current,R=H.current;if(!b.scrollBarVisible||b.maxScrollPosition<=0){const C=Ee(0,R),_=C-R;return{nextPosition:C,actualDelta:_,reachedBoundary:!0}}if(o===0)return{nextPosition:R,actualDelta:0,reachedBoundary:!1};const q=Ee(C=>xe(C+o,0,b.maxScrollPosition),R),Te=q-R,c=o<0&&R+o<=0,u=o>0&&R+o>=b.maxScrollPosition,g=o<0&&(q<=0||c&&Te===0)||o>0&&(q>=b.maxScrollPosition||u&&Te===0);return{nextPosition:q,actualDelta:Te,reachedBoundary:g}},[Ee]),P=r.useCallback((o,b)=>{o.current+=b;const R=Math.max(Ae.current.maxScrollPosition,0);R>0&&(o.current=xe(o.current,-R,R));const V=m(o.current);return o.current-=V.actualDelta,V.reachedBoundary&&(o.current=0),V},[m]),ie=r.useCallback(()=>{$.current!==null&&(window.cancelAnimationFrame($.current),$.current=null),T.current=null,N.current=0,Ie.current=0},[]),pe=r.useCallback(()=>{E.current={...Ft},Se(!1),ae.current?.reset(),ie()},[ie]),ve=r.useCallback(o=>{const b=E.current,R=Ae.current;if(!b.active||b.direction===0){ie();return}if(!R.scrollBarVisible||R.maxScrollPosition<=0){ie();return}const V=T.current??o,q=Math.max((o-V)/1e3,0),Te=Math.min(q,ir);if(T.current=o,Te<=0){$.current=window.requestAnimationFrame(ve);return}const c=Xt({distance:b.distance,maxDistance:R.effectiveTapMaxDistance,viewportSize:R.viewportSize,minSpeedMultiplier:R.tapCircleMinSpeedMultiplier,maxSpeedMultiplier:R.tapCircleMaxSpeedMultiplier,hasCustomMaxSpeedMultiplier:typeof R.tapScrollCircleOptions?.maxSpeedMultiplier=="number",curve:R.tapCircleMaxSpeedCurve});Ie.current!==b.direction&&(Ie.current=b.direction,N.current=0);const{reachedBoundary:u}=P(N,b.direction*c*Te);if(u){ie();return}$.current=window.requestAnimationFrame(ve)},[P,ie]),We=r.useCallback(()=>{$.current===null&&(T.current=null,N.current=0,$.current=window.requestAnimationFrame(ve))},[ve]);r.useEffect(()=>{const o=E.current;!o.active||o.direction===0||We()},[s,e,We]),r.useEffect(()=>()=>{ie()},[ie]);const Ye=r.useCallback(o=>{E.current=o,Se(o.active),o.active&&o.direction!==0?We():ie()},[We,ie]);r.useEffect(()=>{Z||pe()},[pe,Z]),r.useEffect(()=>{const o=b=>{const V=b.detail?.paneId;V&&I&&V!==I||pe()};return window.addEventListener(Dt,o),()=>{window.removeEventListener(Dt,o)}},[I,pe]),r.useEffect(()=>{if(!Z)return;const o=b=>{if(!E.current.active||E.current.pointerId===b.pointerId)return;const R=b.target;if(!(R instanceof Node)){pe();return}ae.current?.getElement()?.contains(R)||pe()};return document.addEventListener("pointerdown",o,!0),()=>{document.removeEventListener("pointerdown",o,!0)}},[pe,Z]);const He=o=>{if(!we||J<=0||se<=0)return 0;const b=xe(o,0,J);return xe(b/J*se,0,se)},Ge=r.useCallback(o=>{const{scrollBarVisible:b,effectiveTrackLength:R,maxScrollPosition:V}=Ae.current;if(y.debug("[ScrollBar] calculateScrollPositionFromThumb",()=>({thumbPos:o,trackLen:R,maxScroll:V})),R<=0||V<=0)return null;const q=xe(o,0,R);return xe(q/R*V,0,V)},[]),at=r.useCallback(o=>{const b=o.getBoundingClientRect(),R=f?b.width:b.height,V=g=>{const C=Number.parseFloat(g);return Number.isFinite(C)?C:0},q=window.getComputedStyle(o),Te=V(f?q.width:q.height),c=Te>0?Te+V(f?q.paddingLeft:q.paddingTop)+V(f?q.paddingRight:q.paddingBottom)+V(f?q.borderLeftWidth:q.borderTopWidth)+V(f?q.borderRightWidth:q.borderBottomWidth):0,u=c>0?c:f?o.offsetWidth:o.offsetHeight;return u<=0||R<=0?1:R/u},[f]),ot=r.useCallback(o=>{const b=L.current;if(b.pointerId!==o.pointerId)return;const R=o.clientX-b.startClientX,V=o.clientY-b.startClientY,q=h(R,V)/(b.scale||1);y.debug("[ScrollBar] handleThumbPointerMove",()=>({delta:q,startThumbPosition:b.startThumbPosition,clientY:o.clientY,startClientY:b.startClientY,metrics:Ae.current}));const Te=Ge(b.startThumbPosition+q);Te!==null&&Ee(Te),o.cancelable&&o.preventDefault()},[h,Ge,Ee]),Q=r.useCallback(o=>{const b=L.current;if(b.pointerId!==o.pointerId)return;document.removeEventListener("pointermove",ot),document.removeEventListener("pointerup",Q),document.removeEventListener("pointercancel",Q);const R=b.captureTarget;if(R?.hasPointerCapture?.(o.pointerId)&&R.releasePointerCapture(o.pointerId),L.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null},le(!1),A.current){const V=A.current.getBoundingClientRect();o.clientX>=V.left&&o.clientX<=V.right&&o.clientY>=V.top&&o.clientY<=V.bottom||re(!1)}else re(!1)},[ot]);r.useEffect(()=>()=>{document.removeEventListener("pointermove",ot),document.removeEventListener("pointerup",Q),document.removeEventListener("pointercancel",Q)},[ot,Q]);const Ze=r.useRef(0),ht=r.useRef(0),Tt=r.useCallback(o=>{const b=Math.max(Math.round(Ae.current.viewportSize/tr),er);ht.current!==o&&(ht.current=o,Ze.current=0),P(Ze,o*b)},[P]),{handleArrowPointerDown:je,handleArrowPointerUp:ft,handleArrowKeyDown:St}=cr({canUseArrowButtons:qe,enableArrowButtons:l,resetTapScroll:pe,scrollByStep:Tt}),yt=o=>{if(!we)return;if(!i){o.preventDefault(),o.stopPropagation();return}if(o.pointerType==="mouse"&&o.button!==0||o.ctrlKey)return;pe();const b=o.currentTarget,R=at(b);let V=null;if(b.setPointerCapture)try{b.setPointerCapture(o.pointerId),V=b}catch{V=null}L.current={pointerId:o.pointerId,startThumbPosition:ze,startClientX:o.clientX,startClientY:o.clientY,scale:R,captureTarget:V},document.addEventListener("pointermove",ot),document.addEventListener("pointerup",Q),document.addEventListener("pointercancel",Q),le(!0),re(!0),o.preventDefault(),o.stopPropagation()},Je=o=>{if(!we)return;if(!a){o.preventDefault(),o.stopPropagation();return}if(o.pointerType==="mouse"&&o.button!==0||o.ctrlKey)return;const b=o.currentTarget,R=b.getBoundingClientRect(),V=ue(o),q=at(b),Te=(V-(f?R.left:R.top))/q;pe();const c=Te-me/2,u=He(c);if(Ee(u),b.setPointerCapture)try{b.setPointerCapture(o.pointerId)}catch{}M.current={pointerId:o.pointerId,startThumbPosition:c,startClientX:o.clientX,startClientY:o.clientY,scale:q},o.preventDefault(),o.stopPropagation()},$e=()=>{M.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}},Qe=o=>{const b=M.current;if(b.pointerId!==o.pointerId)return;if(o.pointerType==="mouse"&&o.buttons===0){$e();return}const R=o.clientX-b.startClientX,V=o.clientY-b.startClientY,q=h(R,V)/(b.scale||1),Te=He(b.startThumbPosition+q);Ee(Te),o.cancelable&&o.preventDefault()},et=o=>{if(M.current.pointerId!==o.pointerId)return;const b=o.currentTarget;b.hasPointerCapture?.(o.pointerId)&&b.releasePointerCapture(o.pointerId),$e(),o.preventDefault(),o.stopPropagation()},lt=o=>{if(M.current.pointerId!==o.pointerId)return;const b=o.currentTarget;b.hasPointerCapture?.(o.pointerId)&&b.releasePointerCapture(o.pointerId),$e()},dt=o=>{o.target===o.currentTarget&&M.current.pointerId===o.pointerId&&$e()},tt=r.useMemo(()=>xe((de?1:.8)*k,0,1),[de,k]),Mt=r.useMemo(()=>{const b=`calc(50% - ${O/2}px + ${U}px)`;return{left:Ce,top:b}},[Ce,U,O]),gt=(o,b,R,V)=>B.jsx("button",{type:"button",tabIndex:0,className:"aqvs-scrollbar-arrow-button",style:{[ye]:d,[Be]:d},"aria-label":b,onPointerDown:je(o),onPointerUp:ft,onPointerLeave:ft,onPointerCancel:ft,onKeyDown:St(o),"aria-disabled":!l,disabled:!qe,children:B.jsx("span",{"aria-hidden":"true",children:R})},V),Rt=p&&we?{orientation:oe,scrollPosition:t,maxScrollPosition:se,contentSize:s,viewportSize:e,thumbSize:me,thumbPosition:ze,thumbCenter:it,trackSize:Me,isDragging:G,isTapScrollActive:de,visibleStartIndex:D,visibleEndIndex:Y}:null;return B.jsxs("div",{className:ut.twMerge("aqvs-scrollbar",ee,!we&&"pointer-events-none opacity-0",x),style:{[ye]:e,[Be]:d},role:"scrollbar",tabIndex:-1,"aria-controls":I,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":se,"aria-orientation":f?"horizontal":"vertical",children:[!f&&we&&Z&&B.jsx(Ht,{ref:ae,className:ut.twMerge("aqvs-scrollbar-tap-circle-wrapper",Ne),size:O,maxVisualDistance:Ve,style:Mt,opacity:tt,renderVisual:K,onDragChange:Ye},"tap-circle"),gt(-1,fe[0],F[0],"arrow-start"),B.jsxs("div",{className:"aqvs-scrollbar-track",style:{borderRadius:d/2},onPointerDown:Je,onPointerMove:Qe,onPointerUp:et,onPointerCancel:lt,onLostPointerCapture:dt,"aria-disabled":!a,children:[Rt&&B.jsx("div",{className:"aqvs-scrollbar-overlay","aria-hidden":!0,children:p?.(Rt)},"overlay"),B.jsx("div",{className:ut.twMerge("aqvs-scrollbar-thumb-wrapper",!(we||G)&&"pointer-events-none opacity-0"),style:{[ye]:me,[ce]:ze,...f?{top:0,bottom:0}:{left:0,right:0}},onPointerDown:yt,role:"slider","aria-orientation":f?"horizontal":"vertical","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":se,"aria-disabled":!i,tabIndex:-1,children:B.jsx("div",{ref:A,className:ut.twMerge("aqvs-scrollbar-thumb",f?"aqvs-scrollbar-thumb-horizontal":"aqvs-scrollbar-thumb-vertical"),"data-testid":"aqvs-scrollbar-thumb","data-thumb-state":Ue,style:{borderRadius:d-1,cursor:i?"pointer":"default"},onMouseEnter:()=>{i&&re(!0)},onMouseLeave:()=>{i&&re(!1)}},"thumb")},"thumb-wrapper")]},"track"),gt(1,fe[1],F[1],"arrow-end")]})},fr=["mouse","pen","touch"],kt=(s,e)=>!(s==="mouse"||s==="pen"||s==="touch")||e.includes(s),dr=s=>s==="mouse"||s==="pen",xt={maxVelocity:6,minVelocity:.02,deceleration:.0025,velocitySampleWindow:90,startVelocityThreshold:.04},vt=(s,e,t)=>{for(const[n,i,a]of e)t==="add"?s.addEventListener(n,i,a):s.removeEventListener(n,i,a)},Ut=r.forwardRef(({children:s,contentSize:e,viewportSize:t,scrollBarWidth:n=12,enableThumbDrag:i=!0,enableTrackClick:a=!0,enableArrowButtons:l=!0,enablePointerDrag:f=!0,pointerDragInputs:d=fr,onScroll:x,className:I,testId:S,style:w,background:p,tapScrollCircleOptions:D,inertiaOptions:Y,itemCount:G,renderThumbOverlay:le,wheelSpeedMultiplier:te=1,onWheelHorizontal:re,contentInsets:de,visibleStartIndex:Se,visibleEndIndex:A,renderOverlay:L,initialScrollPosition:M=0,contentProps:H},X)=>{const E=r.useRef(Number.isFinite(M)?Math.max(0,M):0),ae=r.useRef(null),$=r.useRef(null),T=r.useRef(re);r.useEffect(()=>{T.current=re},[re]);const N=r.useRef({frame:null,velocity:0,lastTimestamp:null,generation:0}),Ie=r.useMemo(()=>({maxVelocity:Y?.maxVelocity??xt.maxVelocity,minVelocity:Y?.minVelocity??xt.minVelocity,deceleration:Y?.deceleration??xt.deceleration,velocitySampleWindow:Y?.velocitySampleWindow??xt.velocitySampleWindow,startVelocityThreshold:Y?.startVelocityThreshold??xt.startVelocityThreshold}),[Y]),Oe=r.useMemo(()=>({top:Math.max(0,de?.top??0),bottom:Math.max(0,de?.bottom??0)}),[de]);y.debug("[ScrollPane] ScrollPane rendered",()=>({contentSize:e,viewportSize:t,scrollBarWidth:n,className:I,style:w,tapScrollCircleOptions:D,inertiaOptions:Y,enablePointerDrag:f,contentInsets:Oe}));const Re=r.useRef({contentSize:e,viewportSize:t});Re.current={contentSize:e,viewportSize:t};const Z=r.useMemo(()=>e>t,[e,t]),O=r.useCallback(h=>{const{contentSize:ue,viewportSize:fe}=Re.current,F=ue>fe,ee=E.current;if(y.debug("[ScrollPane] scrollTo called",()=>({newPosition:h,contentSize:ue,viewportSize:fe,currentIsScrollable:F,prevPosition:ee})),!F)return E.current!==0&&(E.current=0,x?.(0,ee)),E.current;const oe=typeof h=="function"?h(E.current):h;if(!Number.isFinite(oe))return y.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position",{nextPosition:oe}),E.current;const Ve=Math.max(ue-fe,0),De=xe(oe,0,Ve);return E.current!==De&&(E.current=De,x?.(De,ee)),E.current},[x]),Ce=r.useRef(O);r.useEffect(()=>{Ce.current=O},[O]);const U=r.useCallback(()=>{const h=N.current;h.generation+=1,h.frame!==null&&cancelAnimationFrame(h.frame),h.frame=null,h.velocity=0,h.lastTimestamp=null},[]),Ne=r.useRef(U);r.useEffect(()=>{Ne.current=U},[U]),r.useEffect(()=>()=>{Ne.current()},[]);const v=r.useCallback(h=>{if(!Z)return;const{maxVelocity:ue,minVelocity:fe,deceleration:F,startVelocityThreshold:ee}=Ie,oe=xe(h,-ue,ue);if(Math.abs(oe)<ee)return;U(),N.current.velocity=oe,N.current.lastTimestamp=null;const Ve=N.current.generation,De=Me=>{const ne=N.current;if(ne.generation!==Ve)return;if(ne.lastTimestamp===null){ne.lastTimestamp=Me,ne.frame=requestAnimationFrame(De);return}const me=Me-ne.lastTimestamp;if(ne.lastTimestamp=Me,me<=0){ne.frame=requestAnimationFrame(De);return}const se=ne.velocity;let J=se;const ze=F*me;se>0?J=Math.max(0,se-ze):se<0&&(J=Math.min(0,se+ze));const we=(se+J)/2*me,qe=E.current;if(we!==0&&Ce.current(pe=>pe+we),N.current.generation!==Ve)return;const Ue=E.current,{contentSize:Ee,viewportSize:m}=Re.current,P=Math.max(Ee-m,0);ne.velocity=J;const ie=Ue===qe||Ue<=0&&J<=0||Ue>=P&&J>=0;if(Math.abs(J)<fe||ie){U();return}ne.frame=requestAnimationFrame(De)};N.current.frame=requestAnimationFrame(De)},[Z,Ie,U]),Xe=r.useRef(v);r.useEffect(()=>{Xe.current=v},[v]),r.useLayoutEffect(()=>{Re.current={contentSize:e,viewportSize:t}},[e,t]),r.useLayoutEffect(()=>{const h=$.current;if(!h)return;const ue=()=>{h.scrollTop!==0&&(y.debug("[ScrollPane] Native scroll detected, resetting to 0",()=>({scrollTop:h.scrollTop})),h.scrollTop=0),h.scrollLeft!==0&&(h.scrollLeft=0)};return h.addEventListener("scroll",ue),()=>h.removeEventListener("scroll",ue)},[]),r.useLayoutEffect(()=>{if(Z){y.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change",()=>({contentSize:e,viewportSize:t,scrollPosition:E.current}));const h=xe(e-t,0,e);E.current>h&&O(h)}else O(0)},[Z,O,e,t]),r.useEffect(()=>{const h=F=>{if(F.ctrlKey)return;const ee=F.shiftKey&&F.deltaX===0,oe=ee?F.deltaY:F.deltaX,Ve=ee?0:F.deltaY;if(oe!==0&&Math.abs(oe)>=Math.abs(Ve)){if(T.current){F.preventDefault(),U();let ne=oe;F.deltaMode===1?ne*=16:F.deltaMode===2&&(ne*=t),T.current(ne)}return}if(!Z||F.deltaY===0)return;F.preventDefault(),U();let Me=F.deltaY;F.deltaMode===1?Me*=16:F.deltaMode===2&&(Me*=t),te!==1&&(Me*=te),y.debug("[ScrollPane] wheel event",()=>({deltaY:Me,scrollPosition:E.current,wheelSpeedMultiplier:te,deltaMode:F.deltaMode,scrollTop:$.current?.scrollTop})),O(ne=>ne+Me)},ue=()=>{U()},fe=ae.current;return fe&&(fe.addEventListener("wheel",h,{passive:!1}),fe.addEventListener("pointerdown",ue,{capture:!0,passive:!0})),()=>{fe&&(fe.removeEventListener("wheel",h),fe.removeEventListener("pointerdown",ue,{capture:!0}))}},[Z,O,U,t,te]),r.useImperativeHandle(X,()=>({scrollTo:h=>(U(),O(h)),getScrollPosition:()=>E.current,getContentSize:()=>e,getViewportSize:()=>t}),[O,e,t,U]);const st=r.useId(),k=H?.id??st,K=r.useRef({pointerType:"",pointerId:null,startClientY:0,startScroll:0,isDragging:!1,shouldCancelNextClick:!1,clickResetTimer:null,velocitySamples:[]}),Fe=r.useRef(f),Ae=r.useRef(d);r.useEffect(()=>{Fe.current=f},[f]),r.useEffect(()=>{Ae.current=d},[d]);const ye=r.useRef(Z);r.useEffect(()=>{ye.current=Z},[Z]);const Be=r.useRef(Ie);r.useEffect(()=>{Be.current=Ie},[Ie]),r.useEffect(()=>{const h=K.current;if(f&&Z&&(h.pointerId===null||kt(h.pointerType,d))||h.pointerId===null)return;const ue=$.current;h.clickResetTimer!==null&&(window.clearTimeout(h.clickResetTimer),h.clickResetTimer=null);const fe=h.isDragging&&h.shouldCancelNextClick,F=h.pointerId;h.pointerId=null,h.pointerType="",h.startClientY=0,h.startScroll=0,h.isDragging=!1,h.shouldCancelNextClick=fe,h.velocitySamples=[],ue?.hasPointerCapture(F)&&ue.releasePointerCapture(F)},[f,d,Z]),r.useEffect(()=>{const h=$.current;if(!h)return;const ue=6,fe=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),F=()=>{const m=K.current;m.pointerId=null,m.pointerType="",m.startClientY=0,m.startScroll=0,m.isDragging=!1,m.velocitySamples=[]},ee=()=>{const m=K.current;m.clickResetTimer!==null&&(window.clearTimeout(m.clickResetTimer),m.clickResetTimer=null)},oe=m=>{const P=K.current,ie=fe();P.velocitySamples.push({clientY:m,time:ie});const pe=Be.current.velocitySampleWindow;P.velocitySamples=P.velocitySamples.filter(ve=>ie-ve.time<=pe)},Ve=m=>m instanceof HTMLElement&&m.closest("[data-scrollpane-ignore-drag='true']")!==null,De=m=>{const P=K.current;P.shouldCancelNextClick&&(m.preventDefault(),m.stopPropagation(),P.shouldCancelNextClick=!1)},Me=m=>{const P=K.current;if(!P.isDragging){if(P.isDragging=!0,P.shouldCancelNextClick=!0,!h.hasPointerCapture(m.pointerId))try{h.setPointerCapture(m.pointerId)}catch{}oe(m.clientY)}},ne=m=>m.isTrusted||m.target===h,me=m=>{const P=K.current;h.hasPointerCapture(m)&&h.releasePointerCapture(m),P.shouldCancelNextClick=!1,ee(),F()},se=m=>{const P=K.current;if(P.pointerId!==m.pointerId)return;if(m.buttons===0&&dr(m.pointerType)){me(m.pointerId);return}if(!(Fe.current&&ye.current)||!kt(m.pointerType,Ae.current)||!P.isDragging&&(Math.abs(m.clientY-P.startClientY)<ue||(Me(m),!P.isDragging)))return;oe(m.clientY);const ie=m.clientY-P.startClientY,pe=P.startScroll-ie;Ce.current(pe),m.cancelable&&m.preventDefault()},J=()=>{const m=K.current;return m.pointerId!==null||!m.shouldCancelNextClick?!1:(ee(),m.clickResetTimer=window.setTimeout(()=>{const P=K.current;P.shouldCancelNextClick=!1,P.clickResetTimer=null},0),!0)},ze=m=>{const P=K.current;if(P.pointerId!==m.pointerId){J();return}P.isDragging&&P.shouldCancelNextClick&&m.cancelable&&(m.preventDefault(),m.stopPropagation()),P.isDragging&&oe(m.clientY);let ie=0;if(P.isDragging&&P.velocitySamples.length>=2){const ve=P.velocitySamples,We=Be.current.velocitySampleWindow,Ye=ve[ve.length-1],He=ve.find(Ge=>Ye.time-Ge.time<=We)??ve[0];if(Ye&&He&&Ye.time!==He.time){const Ge=Ye.clientY-He.clientY,at=Ye.time-He.time;ie=-(Ge/at)}}ee(),P.shouldCancelNextClick&&(P.clickResetTimer=window.setTimeout(()=>{const ve=K.current;ve.shouldCancelNextClick=!1,ve.clickResetTimer=null},0));const pe=Be.current.startVelocityThreshold;F(),h.hasPointerCapture(m.pointerId)&&h.releasePointerCapture(m.pointerId),Math.abs(ie)>=pe&&Xe.current?.(ie)},it=m=>{if(K.current.pointerId!==null){if(!m.isPrimary||m.pointerType!==K.current.pointerType)return;me(K.current.pointerId)}if(K.current.shouldCancelNextClick&&(ee(),K.current.shouldCancelNextClick=!1),!(Fe.current&&ye.current)||!kt(m.pointerType,Ae.current)||m.button!==0&&m.pointerType==="mouse"||m.ctrlKey||m.metaKey||m.altKey||Ve(m.target))return;window.dispatchEvent(new CustomEvent(Dt,{detail:{paneId:st}})),Ne.current?.();const P=K.current;ee(),P.pointerId=m.pointerId,P.pointerType=m.pointerType,P.startClientY=m.clientY,P.startScroll=E.current,P.isDragging=!1,P.shouldCancelNextClick=!1,P.velocitySamples=[]},we=m=>{if(K.current.pointerId!==m.pointerId){J();return}ne(m)&&me(m.pointerId)},Ue=[["click",De,!0],["pointerdown",it,{passive:!1}],["lostpointercapture",m=>{m.target!==h||K.current.pointerId!==m.pointerId||me(m.pointerId)},void 0]],Ee=[["pointermove",se,{passive:!1}],["pointerup",ze,void 0],["pointercancel",we,void 0]];return vt(h,Ue,"add"),vt(window,Ee,"add"),()=>{vt(h,Ue,"remove"),vt(window,Ee,"remove");const m=K.current;m.pointerId!==null&&h.hasPointerCapture(m.pointerId)&&h.releasePointerCapture(m.pointerId),ee(),F()}},[st]);const ce=r.useCallback(h=>(U(),O(h)),[O,U]);return B.jsxs("div",{ref:ae,"data-testid":S,className:ut.twMerge("aqvs-scroll-pane",I),style:w,children:[B.jsxs("div",{ref:$,className:ut.twMerge("aqvs-scroll-pane-content"),"data-testid":"aqvs-scroll-pane-content",style:{height:t,paddingTop:Oe.top,paddingBottom:Oe.bottom,...f&&Z&&d.some(h=>h==="touch"||h==="pen")?{touchAction:"none"}:{}},...H,id:k,children:[p,s(E.current)]}),B.jsx($t,{contentSize:e,viewportSize:t,scrollPosition:E.current,onScroll:ce,enableThumbDrag:i,enableTrackClick:a,enableArrowButtons:l,scrollBarWidth:n,ariaControls:k,tapScrollCircleOptions:D,itemCount:G,renderThumbOverlay:le,visibleStartIndex:Se,visibleEndIndex:A},"scrollbar"),L?.()]})}),zt=(s,e,t)=>Math.min(Math.max(s,e),t),mr=({dragState:s,normalizedDistance:e,sizeScale:t,size:n})=>{const i=Math.max(n/2,1),a=1+e*.65,l=Math.max(.65,1-e*.25),f=s.direction*e*26*t,d=.8+e*.18,x=3*t,I=6*t,S=22*t,w=Math.abs(f)+I,p=f>0?x:-Math.abs(f)-x,D=Math.max(2.5,3*t),Y=zt(s.offsetX,-i,i),G=zt(s.offsetY,-i,i),le=i*.35,te=Y/i*le,re=G/i*le,de=te*.45,Se=re*.45,A=Math.max(S*.38,6),L=.65+e*.2,M=s.active;return B.jsxs(B.Fragment,{children:[B.jsx("div",{className:"aqvs-tap-scroll-circle-gradient",style:{transform:`scale(${l}, ${a})`,transition:M?"40ms transform ease-out":"200ms ease transform"}}),B.jsx("div",{className:"aqvs-sample-visual-pupil",style:{width:S,height:S,transform:`translate(calc(-50% + ${te}px), calc(-50% + ${re}px)) scale(${l}, ${d*a})`,transition:M?"70ms transform ease-out":"200ms ease transform"}}),B.jsx("div",{className:"aqvs-sample-visual-highlight",style:{width:A,height:A,transform:`translate(calc(-50% + ${de}px), calc(-50% + ${Se}px)) scale(${l}, ${a})`,opacity:L,boxShadow:"0 0 8px rgba(255,255,255,0.45)",transition:M?"120ms opacity 150ms, 120ms transform ease-out ease-out":"220ms ease transform, 240ms opacity ease"}}),B.jsx("div",{className:"aqvs-sample-visual-rod",style:{width:D,height:w,transform:`translate(-50%, ${p}px)`,opacity:e,transition:M?"40ms height, 60ms opacity ease-out ease-out":"200ms ease height, 120ms ease opacity"}})]})},Pt=100,pr=s=>{if(!Number.isFinite(s))return 0n;const e=Math.trunc(s);return e<=0?0n:BigInt(e)},At=(s,e)=>{if(!Number.isFinite(s))throw new Error(`valueFn returned a non-finite value at index ${e}: ${s}`);return s},mt=s=>{if(s<=0||!Number.isFinite(s))return 0;const e=Math.trunc(s);if(e<=2147483647)return e&-e;const t=BigInt(e)&-BigInt(e);return Number(t)};class nt{tree;deltas;size;baseValue;valueFn;total;constructor(e,t,n){this.reset(e,t,n)}reset(e,t,n){const i=Number.isFinite(e)&&e>0?Math.trunc(e):0;if(typeof t!="function"){this.size=i,this.tree=new Map,this.deltas=new Map,this.valueFn=void 0,this.baseValue=t,this.total=this.baseValue*this.size;return}let a=0,l;if(i>0){const f=n?.sampleRange??{from:0,to:Math.min(Pt-1,i-1)};let d=Math.max(0,Math.trunc(f.from)),x=Math.min(Math.trunc(f.to),i-1);if(d>x&&(d=0,x=Math.min(Pt-1,i-1)),i>Pt)a=nt._sampleBaseValueStrided(t,i,Pt),n?.materialize&&(l={from:d,values:nt._collectValidatedValues(t,d,x)});else{const I=nt._collectValidatedValues(t,d,x);a=nt._modeOrMedian([...I]),n?.materialize&&(l={from:d,values:I})}}if(this.size=i,this.tree=new Map,this.deltas=new Map,this.total=void 0,this.valueFn=t,this.baseValue=a,l)for(let f=0;f<l.values.length;f++){const d=l.from+f;if(d>=this.size)break;const x=l.values[f]-this.baseValue;x!==0&&(this.deltas.set(d,x),this._updateTree(d,x))}this.total=this.getTotal()}setValueFn(e,t){if(t?.reset){this.reset(this.size,e);return}typeof e=="function"?this.valueFn=e:(this.valueFn=void 0,this.baseValue=e,this.total=this._computeTreeTotal())}static _collectValidatedValues(e,t,n){const i=[];for(let a=t;a<=n;a++)i.push(At(e(a),a));return i}static _modeOrMedian(e){if(e.length===0)return 0;e.sort((l,f)=>l-f);const t=Math.floor(e.length/2);let n;e.length%2===0?n=Math.floor((e[t-1]+e[t])/2):n=e[t];const i=new Map;let a=0;for(const l of e){const f=(i.get(l)??0)+1;i.set(l,f),f>a&&(a=f)}if(a>e.length*.2){const l=[];for(const[d,x]of i.entries())x===a&&l.push(d);const f=l.reduce((d,x)=>d+x,0);n=Math.floor(f/l.length)}return n}static _sampleBaseValueStrided(e,t,n){if(t<=0)return 0;let i=Math.max(1,Math.ceil(t/n));i%2===0&&(i+=1);const a=[];for(let l=0;l<t&&a.length<n;l+=i)a.push(At(e(l),l));return nt._modeOrMedian(a)}update(e,t){return this.updates([{index:e,value:t}])}updates(e){const t=this._buildDeltaUpdates(e);return t.length>0?this.updateDeltas(t):this.total}updateDelta(e,t){return this.updateDeltas([{index:e,change:t}])}updateDeltas(e){const t=new Map;for(const{index:n,change:i}of e){if(n<0||n>=this.size)throw new Error(`Index ${n} out of bounds`);if(!Number.isInteger(n))throw new Error(`Index must be an integer: ${n}`);if(!Number.isFinite(i))throw new Error(`Change must be a finite number: ${i}`);const l=(t.get(n)??this.deltas.get(n)??0)+i;if(l+this.baseValue<-1e-9)throw new Error(`Change would make the value at index ${n} negative: ${l+this.baseValue}`);t.set(n,l)}for(const{index:n,change:i}of e){const l=(this.deltas.get(n)??0)+i;l===0?this.deltas.delete(n):this.deltas.set(n,l),this._updateTree(n,i)}return this.total}_updateTree(e,t){if(t===0)return;let n=e+1;for(;n<=this.size;){this.tree.set(n,(this.tree.get(n)??0)+t);const i=mt(n);if(i===0)break;n+=i}this.total!==void 0&&(this.total+=t)}_buildDeltaUpdates(e){const t=[],n=new Map;for(const{index:i,value:a}of e){if(i<0||i>=this.size)throw new Error(`Index ${i} out of bounds`);if(!Number.isInteger(i))throw new Error(`Index must be an integer: ${i}`);if(!Number.isFinite(a))throw new Error(`Value must be a finite number: ${a}`);if(a<0)throw new Error("Value cannot be negative.");const l=n.has(i)?n.get(i)??0:this.deltas.get(i)??0,f=l+this.baseValue,d=a-f;d!==0&&t.push({index:i,change:d}),n.set(i,l+d)}return t}_computeTreeTotal(){if(this.size<=0)return 0;let e=0,t=this.size;for(;t>0;){e+=this.tree.get(t)??0;const n=mt(t);if(n===0)break;t-=n}return e+this.baseValue*this.size}_materialize(e,t=!0){if(this.valueFn){const n=this.deltas.get(e)??0,a=At(this.valueFn(e),e)-this.baseValue;if(a!==n&&(a===0?this.deltas.delete(e):this.deltas.set(e,a),t)){const l=a-n;this._updateTree(e,l)}}}_materializeRanges(e,t,n=!1){if(!(e?.materialize&&this.valueFn))return;const i=e.ranges;if(i&&i.length>0){for(const f of i){const d=Math.max(0,Math.trunc(f.from)),x=Math.min(Math.trunc(f.to),this.size-1);for(let I=d;I<=x;I++)this._materialize(I)}if(t===void 0)return;if(n){this._materialize(t);return}const a=i[0].from,l=i[i.length-1].to;t>=a&&t<=l&&this._materialize(t);return}t!==void 0&&this._materialize(t)}_findIndex(e,t={},n){if(this.size>=1073741824)return this._findIndexLarge(e,t,n);if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const i=t.materializeOption?.materialize===!0;let a;for(;;){if(a=this._descend(e,n),a<0||a>=this.size)return{index:-1,total:this.total??this.getTotal(),cumulative:void 0,currentValue:void 0,safeIndex:void 0};if(!i)break;const f=this.deltas.get(a)??0;if(this._materialize(a),(this.deltas.get(a)??0)===f)break}const l=this.prefixSum(a);return{index:a,total:this.total??l.total,cumulative:l.cumulative,currentValue:l.currentValue,safeIndex:l.safeIndex}}_descend(e,t){let n=0,i=0,a=1;for(;a<<1<=this.size;)a<<=1;for(;a>0;a>>=1){const l=n+a;if(l<=this.size){const d=(this.tree.get(l)??0)+this.baseValue*a;(t?i+d<e:i+d<=e)&&(n=l,i+=d)}}return t?n:n-1}_findIndexLarge(e,t,n){if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};const i=pr(this.size);if(i===0n)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const a=t.materializeOption?.materialize===!0;for(;;){let l=0n,f=i-1n,d,x,I=this.total;for(;l<=f;){const p=l+f>>1n,D=Number(p),Y=this.prefixSum(D);if(I=Y.total,n?Y.cumulative>=e:Y.cumulative<=e)if(d=p,x=Y,n){if(p===0n)break;f=p-1n}else l=p+1n;else if(n)l=p+1n;else{if(p===0n)break;f=p-1n}}const S=x,w=d!==void 0?Number(d):-1;if(a&&w>=0){const p=this.deltas.get(w)??0;if(this._materialize(w),(this.deltas.get(w)??0)!==p)continue}return{index:w,total:I,cumulative:S?.cumulative,currentValue:S?.currentValue,safeIndex:S?.safeIndex}}}prefixSum(e,t){if(e<0||Number.isNaN(e))return{cumulative:0,total:this.total,currentValue:0,safeIndex:0};if(this.size===0)return{cumulative:0,total:this.total??0,currentValue:0,safeIndex:0};const n=xe(Math.trunc(e),0,this.size-1),i=t?.materializeOption;this._materializeRanges(i,n,!0);let a=0,l=n+1;for(;l>0;){const d=this.tree.get(l)??0;a+=d;const x=mt(l);if(x===0)break;l-=x}const f=i?.materialize?this.get(n):(this.deltas.get(n)||0)+this.baseValue;return{cumulative:a+this.baseValue*(n+1),total:this.total,currentValue:f,safeIndex:n}}get(e,t){if(this.size===0)return 0;if(!Number.isInteger(e)||e<0||e>=this.size)throw new Error("Index out of bounds");const n=t?.materializeOption;return this._materializeRanges(n,e),(this.deltas.get(e)??0)+this.baseValue}getTotal(e){const t=e?.materializeOption;if(this._materializeRanges(t),this.total===void 0)if(this.size===0)this.total=0;else{this.total=this._computeTreeTotal();const n=this.prefixSum(this.getSize()-1);n.cumulative!==n.total&&y.error("Inconsistent Fenwick Tree state")}return this.total}rebuildTree(e){if(e?.materialize&&this.valueFn){const n=this.valueFn;this.reset(this.size,i=>n(i),{materialize:!0});return}const t=new Map;for(const[n,i]of this.deltas.entries()){if(i===0)continue;let a=n+1;for(;a<=this.size;){t.set(a,(t.get(a)??0)+i);const l=mt(a);if(l===0)break;a+=l}}this.tree=t,this.total=this._computeTreeTotal()}calculateAccumulatedError(){if(this.total===void 0)return 0;let e=this.baseValue*this.size;for(const[t,n]of this.deltas)t<this.size&&(e+=n);return this.total-e}changeSize(e){if(!Number.isFinite(e))throw new Error(`Size must be a finite number: ${e}`);const t=Math.max(0,Math.trunc(e)),n=this.size;if(t===n)return;if(t>n)if(n===0&&this.deltas.size>0){for(const a of this.deltas.keys())a>=t&&this.deltas.delete(a);this.size=t,this.rebuildTree()}else this._growSize(n,t);else{if(t>0)for(const a of this.deltas.keys())a>=t&&this.deltas.delete(a);this.size=t,this.rebuildTree()}const i=this.prefixSum(this.getSize()-1);i.cumulative!==i.total&&y.error("Inconsistent Fenwick Tree state")}static _minCoveredLowBound(e,t){let n=1;for(;;){const i=n*2;if(Math.floor(t/i)*i<=e)break;n=i}return n*Math.floor(e/n)}_propagateDeltaToGrownNodes(e,t,n,i){let a=e+1;for(;a<=n;){const l=mt(a);if(l===0)break;a+=l}for(;a<=i;){this.tree.set(a,(this.tree.get(a)??0)+t);const l=mt(a);if(l===0)break;a+=l}}_growSize(e,t){if(this.size=t,this.deltas.size>0){const n=nt._minCoveredLowBound(e,t);if(e-n<this.deltas.size)for(let a=n;a<e;a++){const l=this.deltas.get(a);l===void 0||l===0||this._propagateDeltaToGrownNodes(a,l,e,t)}else for(const[a,l]of this.deltas.entries())l===0||a<n||this._propagateDeltaToGrownNodes(a,l,e,t)}this.total=this._computeTreeTotal()}getSize(){return this.size}get base(){return this.baseValue}findIndexAtOrAfter(e,t){return this._findIndex(e,t??{},!0)}findIndexAtOrBefore(e,t){return this._findIndex(e,t??{},!1)}}const hr=(s,e)=>{const t=s?.sampleRange,n=e?.sampleRange;return t===n?!1:t&&n?t.from!==n.from||t.to!==n.to:!0},Kt=(s,e,t)=>{const n=Number.isFinite(s)&&s>0?Math.trunc(s):0,i=r.useRef(null),a=r.useRef({size:n,valueOrFn:e,options:t});i.current===null&&(i.current=new nt(n,e,t));const l=i.current,f=a.current,d=f.size!==n,x=f.valueOrFn!==e,I=hr(f.options,t),S=f.size===0&&n>0&&(!i.current||i.current.base===0);if(x||I){const w=t?.resetOnValueFnChange??!0;I||x&&w||S?(t?.debug&&y.debug("[useFenwickMapTree] reset",{valueOrFnChanged:x,optionsChanged:I}),l.reset(n,e,t)):(d&&(t?.debug&&y.debug("[useFenwickMapTree] resize (with valueFn change)",{from:f.size,to:n}),l.changeSize(n)),t?.debug&&y.debug("[useFenwickMapTree] setValueFn (no reset)",{valueOrFnChanged:x}),l.setValueFn(e,{reset:!1})),a.current={size:n,valueOrFn:e,options:t}}else d&&(t?.debug&&y.debug("[useFenwickMapTree] resize",{from:f.size,to:n}),S?l.reset(n,e,t):l.changeSize(n),a.current={size:n,valueOrFn:e,options:t});return l};class gr{key;value;prev=null;next=null;constructor(e,t){this.key=e,this.value=t}}class Vt{head=null;tail=null;addToTail(e){this.tail?(this.tail.next=e,e.prev=this.tail,this.tail=e):this.head=this.tail=e}remove(e){e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev,e.prev=null,e.next=null}removeHead(){const e=this.head;return e&&this.remove(e),e}moveToTail(e){this.remove(e),this.addToTail(e)}}function Wt(s){const e=r.useRef(new Map),t=r.useRef(new Vt),n=Math.floor(s),i=r.useRef(n);r.useEffect(()=>{if(i.current=n,Number.isNaN(n)||n<0){y.warn(`useLruCache: invalid capacity ${s}; the cache will not store any entries.`),e.current.clear(),t.current=new Vt;return}if(Number.isFinite(n))for(;e.current.size>n;){const I=t.current.removeHead();if(I)e.current.delete(I.key);else break}},[s,n]);const a=r.useCallback(I=>{const S=e.current.get(I);if(S)return t.current.moveToTail(S),S.value},[]),l=r.useCallback((I,S)=>{const w=i.current;if(Number.isNaN(w)||w<=0)return;let p=e.current.get(I);if(p)p.value=S,t.current.moveToTail(p);else{if(e.current.size>=w){const D=t.current.removeHead();D&&e.current.delete(D.key)}p=new gr(I,S),e.current.set(I,p),t.current.addToTail(p)}},[]),f=r.useCallback(I=>e.current.has(I),[]),d=r.useCallback(I=>{const S=e.current.get(I);S&&(t.current.remove(S),e.current.delete(I))},[]),x=r.useCallback(()=>{e.current.clear(),t.current=new Vt},[]);return r.useMemo(()=>({get:a,set:l,has:f,remove:d,clear:x}),[a,l,f,d,x])}const br=1e4,xr=()=>{const{get:s,set:e,has:t,clear:n}=Wt(br);return r.useMemo(()=>({get:s,set:e,has:t,clear:n}),[s,e,t,n])},be=(s,e)=>e<=0?0:xe(s,0,e-1),Yt=s=>({top:Math.max(0,s?.top??0),bottom:Math.max(0,s?.bottom??0)}),rt=(s,e)=>s<=e?0:s-e,pt=(s,e)=>s<=0?0:s+e,Ct=1e3,Bt=2e3,Ir=1048576,It=s=>{if(!Number.isFinite(s))return 0n;const e=Math.trunc(s);return e<=0?0n:BigInt(e)},Tr=(s,e,t,n,i,a,l,f)=>{const d=It(n);if(d===0n)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const x=A=>A<0n?0n:A>=d?d-1n:A,I={materializeOption:{materialize:!1}},{index:S,cumulative:w}=a.findIndexAtOrAfter(s,I);let p;S===-1?p=d-1n:(w===s?p=It(S+1):p=It(S),p>=d&&(p=d-1n)),s<=0&&(p=0n),f&&s>=l&&(p=d-1n);const D=A=>{const L=Number(A);if(!Number.isSafeInteger(L))return null;const{cumulative:M}=a.prefixSum(L,{materializeOption:{materialize:!1}});if(!Number.isFinite(M))return null;const{index:H}=a.findIndexAtOrAfter(M+.5,{materializeOption:{materialize:!1}});if(H===-1)return null;const X=It(H);return X>A?X:null},Y=A=>{let L=0,M=A,H=A,X=0n,E=0;for(;M<d&&L<e;){const ae=Number(M),$=i(ae);if(L+=$,H=M,M+=1n,X+=1n,!Number.isFinite($)||$<0)break;if($===0){if(E+=1,E>Ct){const T=D(H);if(T!==null&&T>M)M=T,E=0;else if(T!==null&&T===M&&i(Number(M))>0)E=0;else break}}else E=0}return X===0n&&(H=A),{height:L,end:H}};let{height:G,end:le}=Y(p);if(G<e&&p>0n){let A=p,L=G,M=0;for(;A>0n&&L<e;){A-=1n;const X=Number(A),E=i(X);if(L+=E,!Number.isFinite(E)||E<0)break;if(E===0){if(M+=1,M>Ct){const ae=Number(A);if(!Number.isSafeInteger(ae))break;const{cumulative:$}=a.prefixSum(ae,{materializeOption:{materialize:!1}});if(!Number.isFinite($))break;const{index:T}=a.findIndexAtOrAfter($-.5,{materializeOption:{materialize:!1}}),N=T===-1?-1n:It(T);if(N>=0n&&N<A)A=N+1n,M=0;else if(N===A&&A>=1n&&i(Number(A-1n))>0)M=0;else break}}else M=0}p=x(A);const H=Y(p);G=H.height,le=H.end}const te=x(p),re=x(le),de=x(te-BigInt(Math.max(0,t))),Se=x(re+BigInt(Math.max(0,t)));return{renderingStartIndex:be(Number(de),n),renderingEndIndex:be(Number(Se),n),visibleStartIndex:be(Number(te),n),visibleEndIndex:be(Number(re),n)}},Sr=(s,e,t,n,i,a,l)=>{if(n===0)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const f=Number.isFinite(l),d=f?Math.min(Math.max(0,s),l):Math.max(0,s);if(n>=Number.MAX_SAFE_INTEGER)return Tr(d,e,t,n,i,a,l,f);const{index:x,cumulative:I,currentValue:S}=a.findIndexAtOrAfter(d,{materializeOption:{materialize:!1}}),w=x===-1?e<=0||(I??0)<d+(S??0)?n-1:0:x;let p=be(w,n),D=0;if(x!==-1&&I===d)p=be(x+1,n),D=0;else if(p===x&&I!==void 0&&S!==void 0)D=I-S-d;else{const{cumulative:A,currentValue:L}=a.prefixSum(p,{materializeOption:{materialize:!1}});D=(A??0)-(L??0)-d}const Y=D,G=(A,L)=>{let M=A,H=L,X=0;for(;M<n&&H<e;){const E=i(M);if(H+=E,M++,!Number.isFinite(E)||E<0)break;if(E===0){if(X++,X>Ct){const{cumulative:ae}=a.prefixSum(M-1,{materializeOption:{materialize:!1}}),{index:$}=Number.isFinite(ae)?a.findIndexAtOrAfter(ae+.5,{materializeOption:{materialize:!1}}):{index:-1};if($>M)M=$,X=0;else if($===M&&i(M)>0)X=0;else break}}else X=0}return{cursor:M,height:H}},le=G(p,D);let te=le.cursor;if(D=le.height,D<e&&p>0){let A=D+Math.abs(Math.min(0,Y)),L=p-1,M=0;for(;L>=0&&A<e;){const X=i(L);if(A+=X,!Number.isFinite(X)||X<0){L--;break}if(X===0){if(M++,M>Ct){const{cumulative:E}=a.prefixSum(L,{materializeOption:{materialize:!1}}),{index:ae}=Number.isFinite(E)?a.findIndexAtOrAfter(E-.5,{materializeOption:{materialize:!1}}):{index:-1};if(ae!==-1&&ae<L){L=ae,M=0;continue}if(ae===L&&L>=1&&i(L-1)>0)M=0;else{L--;break}}}else M=0;L--}p=be(L+1,n);const H=G(p,0);te=H.cursor,D=H.height}const re=be(p-t,n),de=be(Math.max(te-1,p),n),Se=be(de+t,n);return{renderingStartIndex:re,renderingEndIndex:Se,visibleStartIndex:p,visibleEndIndex:de}},qt=(s,e,t)=>{const n=Math.max(0,e??0),i=r.useRef({last:0,id:null,arg:null}).current;return r.useEffect(()=>()=>{if(i.id!==null&&(cancelAnimationFrame(i.id),i.id=null),i.arg!==null&&s.current){try{t(s.current,i.arg)}catch(a){console.error("[useThrottledInvoker] Error flushing pending callback on unmount",a)}i.arg=null}},[i,s,t]),r.useCallback(a=>{if(i.arg=a,i.id!==null)return;const l=f=>{if(i.id=null,i.arg===null)return;const d=f-i.last;if(n===0||i.last===0||d>=n){if(s.current)try{t(s.current,i.arg)}catch(x){console.error("[useThrottledInvoker] Error invoking callback",x)}i.arg=null,i.last=f}i.arg!==null&&(i.id=requestAnimationFrame(l))};i.id=requestAnimationFrame(l)},[n,t,s,i])},Mr=r.memo(({index:s,top:e,height:t,item:n,children:i,clipItemHeight:a,enableKeyboardNavigation:l,onKeyDown:f,onFocus:d,registerItemRef:x})=>{const I=r.useCallback(D=>x(s,D),[s,x]),S=r.useCallback(D=>f(D,s),[s,f]),w=r.useCallback(()=>d(s),[s,d]),p=r.useCallback(D=>{D.currentTarget.focus({preventScroll:!0})},[]);return B.jsx("div",{ref:I,"data-index":s,"data-virtualscroll-item":"true",className:"aqvs-item-container",style:{top:e,height:t,overflow:a?"hidden":void 0},tabIndex:l?-1:void 0,onPointerDown:l?p:void 0,onKeyDownCapture:l?S:void 0,onFocusCapture:l?w:void 0,children:i(n,s)})}),Rr=({itemCount:s,getItem:e,getItemKey:t,getItemHeight:n,viewportSize:i,overscanCount:a=15,className:l,testId:f,onScroll:d,onRangeChange:x,children:I,background:S,initialScrollIndex:w,initialScrollOffset:p,callbackThrottleMs:D=5,contentInsets:Y,onItemFocus:G,scrollBarOptions:le,behaviorOptions:te,onWheelHorizontal:re,contentProps:de},Se)=>{const{width:A,enableThumbDrag:L,enableTrackClick:M,enableArrowButtons:H,enableScrollToTopBottomButtons:X,renderThumbOverlay:E,tapScrollCircleOptions:ae}=le??{},{enablePointerDrag:$,pointerDragInputs:T,enableKeyboardNavigation:N=!0,wheelSpeedMultiplier:Ie,inertiaOptions:Oe,clipItemHeight:Re=!1,resetOnGetItemHeightChange:Z=!1}=te??{},O=r.useRef(null),Ce=r.useRef({renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0,scrollPosition:0,totalHeight:0}),U=r.useRef(null),Ne=r.useRef(!1);r.useEffect(()=>{Z&&(U.current=null)},[Z,n]);const v=r.useMemo(()=>Yt(Y),[Y]),[Xe]=r.useState(()=>{const u=typeof w=="number"&&Number.isFinite(w)?Math.max(0,Math.trunc(w)):0;return{from:Math.max(0,u-50),to:u+50}}),st=r.useMemo(()=>({sampleRange:Xe,resetOnValueFnChange:Z,materialize:!0}),[Z,Xe]),k=Kt(s,n,st),[K]=r.useState(()=>{let c=0,u=0;if(typeof w=="number"){const g=xe(w,0,s-1),C=xe(g-a*2,0,s-1),_=xe(g+a*2,0,s-1),z=w>0?{materializeOption:{materialize:!0,ranges:[{from:C,to:_}]}}:void 0,{cumulative:j,total:W,currentValue:Pe}=k.prefixSum(w,z),he=Math.max(j-Pe,0);c=pt(he,v.top),u=W??k.getTotal()}else typeof p=="number"&&(c=pt(Math.max(p,0),v.top)),u=k.getTotal();return{position:c,total:u}}),[Fe,Ae]=r.useState(K.position),[ye,Be]=r.useState(K.total),ce=r.useRef(K.position),h=r.useRef(v.top),ue=r.useRef(d??void 0),fe=r.useRef(x??void 0),F=r.useRef(new Map),ee=r.useRef(null),oe=r.useRef(null),[Ve,De]=r.useState(null),[Me,ne]=r.useState(!1),me=r.useRef(null),se=r.useRef(!1),J=r.useRef(0),ze=r.useRef(!1),it=r.useRef(!1),we=r.useRef(s);we.current!==s&&(we.current=s,it.current=!0),r.useEffect(()=>{ue.current=d??void 0,fe.current=x??void 0},[x,d]);const qe=r.useCallback(c=>{if(N&&c&&typeof c.focus=="function")try{c.focus({preventScroll:!0})}catch{c.focus()}},[N]),Ue=r.useCallback((c,{position:u,totalHeight:g})=>{c(u,g)},[]),Ee=qt(ue,D,Ue),m=r.useCallback((c,u)=>{c(u)},[]),P=qt(fe,D,m),ie=r.useRef(v.top);ie.current=v.top;const pe=r.useRef(Ee);pe.current=Ee,r.useEffect(()=>(Ne.current=!1,()=>{Ne.current=!0,me.current&&(clearTimeout(me.current),me.current=null)}),[]),r.useEffect(()=>{N||(F.current.clear(),ee.current=null,oe.current=null)},[N]);const ve=r.useCallback((c,u)=>{if(!u){F.current.delete(c);return}N&&(F.current.set(c,u),ee.current===c&&(ee.current=null,oe.current=c,qe(u)))},[N,qe]),We=.01,Ye=r.useRef({rafId:null,loopActive:!1,idleFrames:0,lastRenderedPosition:K.position}),He=r.useCallback(()=>{const c=Ye.current;c.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(c.rafId),c.rafId=null,c.loopActive=!1,c.idleFrames=0},[]);r.useEffect(()=>()=>{He()},[He]);const Ge=r.useRef(()=>{}),at=r.useCallback(()=>{const c=Ye.current;c.rafId=null;const u=ce.current,g=rt(u,ie.current),C=k.getTotal();if(Ae(z=>Math.abs(z-u)<We?z:u),Math.abs(c.lastRenderedPosition-u)>=We?(pe.current({position:g,totalHeight:C}),c.lastRenderedPosition=u,c.idleFrames=0):c.idleFrames+=1,c.idleFrames>=2){He();return}if(typeof requestAnimationFrame=="function"){c.rafId=requestAnimationFrame(z=>Ge.current(z));return}c.loopActive=!1},[k,He]);Ge.current=at;const ot=r.useCallback(()=>{const c=Ye.current;if(c.idleFrames=0,!c.loopActive){if(c.loopActive=!0,typeof requestAnimationFrame=="function"){c.rafId=requestAnimationFrame(at);return}c.loopActive=!1}},[at]),Q=r.useCallback((c,u)=>{const g=u?.immediate??!1,C=rt(c,v.top);if(ce.current=c,g){Ye.current.lastRenderedPosition=c,Ye.current.idleFrames=0,Ae(c),Ee({position:C,totalHeight:k.getTotal()});return}ot()},[ot,k,v.top,Ee]),Ze=r.useCallback(c=>{const u=O.current;if(!u)return c;const g=u.getScrollPosition();J.current+=1;const C=u.scrollTo(c);return C===g&&(J.current=Math.max(0,J.current-1)),Math.abs(C-c)>.5&&(ze.current=!0),C},[]),ht=r.useRef(!1);r.useEffect(()=>{if(!ht.current)if(ht.current=!0,typeof p=="number"){const c=pt(Math.max(p,0),v.top),u=Math.abs(c-ce.current)>.5;Q(c,{immediate:!0}),u&&O.current?.scrollTo(c)}else Q(ce.current,{immediate:!0})},[p,v.top,Q]),r.useEffect(()=>{const c=k.getTotal();if(ye!==c){Be(c);return}if(ze.current){ze.current=!1;const u=O.current;if(u&&Math.abs(u.getScrollPosition()-ce.current)>.5){const g=Ze(ce.current);ze.current=!1,Q(g,{immediate:!0})}}},[k,ye,s,Ze,Q]),r.useEffect(()=>{if(U.current!==null){const{index:c,align:u,offset:g}=U.current,C=be(c,s),{cumulative:_,currentValue:z}=k.prefixSum(C,{materializeOption:{materialize:!1}});if(_!==void 0&&z!==void 0){const j=Math.max(_-z,0);let W=j;u==="bottom"?W=_-i:u==="center"&&(W=j+z/2-i/2),g&&(W-=g),W=Math.max(0,W);const Pe=Math.max(0,ye+v.top+v.bottom-i),he=Math.min(pt(W,v.top),Pe);Math.abs(he-ce.current)>1&&(y.debug("[VirtualScroll] Drift correction",{from:ce.current,to:he,targetIndex:C}),J.current===0&&(J.current+=1),O.current?.scrollTo(he),Q(he,{immediate:!0}))}}it.current=!1},[ye,k,s,v.top,Q,i,v.bottom]),r.useEffect(()=>{const c=h.current;if(c===v.top)return;const u=rt(ce.current,c),g=pt(u,v.top);h.current=v.top,ce.current=g,O.current?.scrollTo(g),Q(g,{immediate:!0})},[v.top,Q]);const Tt=r.useCallback((c,u)=>{if(s===0)return;const g=be(c,s),C=k.get(g),_=u-C,z=k.update(g,u);z!==void 0&&Be(z),y.debug("[VirtualScroll] Updated item size manually",{index:g,size:u,total:z});let j=U.current?U.current.index:null;if(j===null){const W=ce.current,Pe=Yt(Y).top,he=rt(W,Pe),{index:ge,cumulative:Le}=k.findIndexAtOrAfter(he,{materializeOption:{materialize:!1}});j=Le!==void 0&&Le===he?ge+1:ge}if(j!==-1&&g<j&&_!==0){const W=ce.current,Pe=W+_;Ze(Pe),Q(Pe,{immediate:!0}),y.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)",{from:W,to:Pe,causedByIndex:g,delta:_,activeVisibleStartIndex:j})}},[k,s,Ze,Q,Y]),je=r.useCallback((c,u)=>{if(!O.current||s===0)return;const g=be(c,s),C=be(g-a*2,s),_=be(g+a*2,s),{cumulative:z,total:j,currentValue:W}=k.prefixSum(g,{materializeOption:{materialize:!0,ranges:[{from:C,to:_}]}});if(y.debug("[VirtualScroll] Scrolling to index:",g,"ItemBottom:",z,"Total height:",j,"ItemHeight:",W,"safeIndexFrom:",C,"safeIndexTo:",_),!j)return;const Pe=Math.max(z-W,0);let he=Pe;u?.align==="bottom"?he=z-i:u?.align==="center"&&(he=Pe+W/2-i/2),u?.offset&&(he-=u.offset),he=Math.max(0,he);const ge=pt(he,v.top),Le=O.current?.getContentSize()??j+v.top+v.bottom,ke=Math.max(0,Le-i),_e=Math.min(ge,ke);U.current={index:g,align:u?.align,offset:u?.offset};const bt=O.current?.getScrollPosition()??-1,wt=Math.abs(bt-_e)>.5;se.current=!1,J.current=0,wt&&(se.current=!0,J.current+=1,O.current?.scrollTo(_e)),Be(j),Q(_e,{immediate:!0}),y.debug("[VirtualScroll] Setting scroll position to:",_e,{original:ge,max:ke})},[k,a,s,v.top,v.bottom,i,Q]),ft=r.useCallback(c=>{if(!O.current||s===0)return;const u=k.getTotal(),g=xe(Math.floor(c),0,u),{index:C,cumulative:_,currentValue:z}=k.findIndexAtOrAfter(g,{materializeOption:{materialize:!1}}),W=(_??0)-(z??0)-g;je(C,{offset:W})},[k,s,je]),St=r.useCallback(c=>{const u=rt(ce.current,v.top),g=typeof c=="function"?c(u):c;ft(g);const C=O.current?.getScrollPosition(),_=typeof C=="number"?C:ce.current;return Q(_),_},[v.top,ft,Q]),yt=r.useCallback((c,u)=>{y.debug("[VirtualScroll] Scroll position changed:",c);const g=se.current;g&&(se.current=!1);const C=J.current>0;if(C&&(J.current=0),g||C||it.current||(U.current=null),Q(c),X){if(g||C)return;const _=c-u;if(y.debug("[VirtualScroll] Scroll diff:",_,"New:",c,"Prev:",u),Math.abs(_)>1){const z=_>0?"down":"up";De(z),ne(!0),y.debug("[VirtualScroll] Showing scroll buttons. Direction:",z),me.current&&clearTimeout(me.current),me.current=setTimeout(()=>{ne(!1),y.debug("[VirtualScroll] Hiding scroll buttons")},2e3)}}},[Q,X]),Je=r.useMemo(()=>rt(Fe,v.top),[v.top,Fe]),$e=r.useMemo(()=>{const c=k.getTotal(),u=Sr(Je,i,a,s,n,k,c);return y.debug("[VirtualScroll] Calculated rendering range:",()=>({...u,scrollPosition:Je,renderingContentSize:c,overscanCount:a,viewportSize:i})),u},[Je,i,a,s,n,k]),{renderingStartIndex:Qe,renderingEndIndex:et,visibleStartIndex:lt,visibleEndIndex:dt}=$e,tt=r.useCallback((c,u)=>{if(!N||s===0)return;const g=be(c,s);if(!(u?.ensureVisible??!0)){const ke=F.current.get(g);ke&&(ee.current=null,oe.current=g,qe(ke));return}const _=k.prefixSum(g,{materializeOption:{materialize:!1}}),z=_.currentValue,j=Math.max(_.cumulative-z,0),W=j+z,Pe=rt(ce.current,v.top),he=Pe+i;if(j<Pe||W>he){je(g);const ke=F.current.get(g);ke?(ee.current=null,oe.current=g,qe(ke)):ee.current=g;return}const Le=F.current.get(g);if(Le){ee.current=null,oe.current=g,qe(Le);return}ee.current=g},[N,s,k,v.top,je,qe,i]),Mt=r.useCallback((c,u)=>{if(!N||c.defaultPrevented||c.altKey||c.metaKey||c.ctrlKey)return;const g=c.target;if(g){const C=g.tagName;if(C==="INPUT"||C==="TEXTAREA"||C==="SELECT"||g.isContentEditable)return}if(c.key==="ArrowDown"){u<s-1&&(c.preventDefault(),tt(u+1));return}if(c.key==="ArrowUp"){u>0&&(c.preventDefault(),tt(u-1));return}if(c.key==="PageDown"){if(u<s-1){c.preventDefault();const{visibleStartIndex:C,visibleEndIndex:_}=Ce.current,z=Math.max(_-C+1,1),j=Math.max(z,1),W=be(Math.min(u+j,s-1),s);tt(W)}return}if(c.key==="PageUp"&&u>0){c.preventDefault();const{visibleStartIndex:C,visibleEndIndex:_}=Ce.current,z=Math.max(_-C+1,1),j=Math.max(z,1),W=be(u-j,s);tt(W)}},[N,s,tt]),gt=r.useCallback(c=>{if(!N)return;const u=be(c,s);ee.current=null,oe.current=u,G?.(u)},[N,s,G]);r.useEffect(()=>{const c=O.current?.getScrollPosition()??0,u=ce.current,g=rt(u,v.top);y.debug("[VirtualScroll] Range change effect triggered",()=>({renderingStartIndex:Qe,renderingEndIndex:et,visibleStartIndex:lt,visibleEndIndex:dt,scrollPositionState:Fe,paneScrollPosition:u,logicalScrollPosition:g,contentSize:ye,scrollPaneScrollPosition:c})),P({renderingStartIndex:Qe,renderingEndIndex:et,visibleStartIndex:lt,visibleEndIndex:dt,scrollPosition:g,totalHeight:ye})},[ye,et,Qe,v.top,P,Fe,dt,lt]);const Rt=r.useCallback(()=>{if(!X)return null;const c=Me&&Ve!==null,u=Ve==="up";return B.jsx("div",{className:"aqvs-scroll-to-edge-overlay","data-visible":c,children:u?B.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top",children:B.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:g=>{g.stopPropagation(),se.current=!0,je(0),ne(!1)},children:"Top"})}):B.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom",children:B.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:g=>{g.stopPropagation(),se.current=!0,je(s-1),ne(!1)},children:"Bottom"})})})},[X,Me,Ve,je,s]),o=r.useRef(0),{visibleItems:b,renderAnchor:R}=r.useMemo(()=>{if(s===0)return{visibleItems:B.jsx("div",{className:"aqvs-no-items-container",children:B.jsx("div",{className:"aqvs-no-items-text",children:"No items"})}),renderAnchor:0};const c=be(Qe,s),u=be(et,s),{cumulative:g,currentValue:C}=k.prefixSum(c,{materializeOption:{materialize:!1}}),_=g-C;Number.isFinite(_)&&Math.abs(_-o.current)>Ir&&(o.current=_);const z=o.current,j=[],W=[];let Pe=0,he=_;for(let ge=c;ge<=u;ge++){if(W.length>=Bt){y.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.",{cap:Bt,safeRenderingStartIndex:c,safeRenderingEndIndex:u});break}const Le=n(ge),ke=k.get(ge),_e=Le-ke;_e!==0&&j.push({index:ge,value:Le});const bt=he+Pe,wt=t?t(ge):ge;W.push(B.jsx(Mr,{index:ge,top:bt-z,height:Le,item:e(ge),clipItemHeight:Re,enableKeyboardNavigation:N,onKeyDown:Mt,onFocus:gt,registerItemRef:ve,children:I},wt)),Pe+=_e,he+=ke}return j.length>0&&Promise.resolve().then(()=>{if(Ne.current)return;let ge=0;for(const _e of j)if(_e.index<lt){const bt=k.get(_e.index);ge+=_e.value-bt}const Le=k.updates(j);if(Ne.current||typeof Le!="number")return;Be(Le),y.debug("[VirtualScroll] Updated heights for items",j,"New total height:",Le);const ke=O.current?.getScrollPosition()??ce.current;if(ge!==0){const _e=ke+ge;Ze(_e),Q(_e,{immediate:!0}),y.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)",{from:ke,to:_e,shiftAmount:ge})}else ke!==ce.current&&Q(ke)}),{visibleItems:W,renderAnchor:z}},[I,Re,ye,N,s,k,e,t,n,gt,Mt,Ze,ve,et,Qe,Q,lt]),V=r.useCallback(c=>{const u=(D??0)>0,g=Math.abs(c-Fe),C=u&&g>.5?Fe:c,_=rt(C,v.top);if(y.debug("[VirtualScroll] Rendering visible items",()=>({currentScrollPosition:c,effectiveScrollPosition:_,renderingStartIndex:Qe,renderingEndIndex:et,itemCount:s,viewportSize:i,callbackThrottleMs:D,diff:g,rawEffectiveScrollPosition:C})),s===0)return b;const z=v.top+R-C,j=v.bottom>0?B.jsx("div",{className:"aqvs-bottom-inset",style:{top:k.getTotal()-R,height:v.bottom}},"virtualscroll-bottom-inset"):null;return y.debug("[VirtualScroll] Rendering items",()=>({containerTop:z,logicalScrollPosition:Je,resolvedInsets:v,effectiveScrollPosition:_})),B.jsxs("div",{className:"aqvs-items-wrapper",style:{top:0,transform:`translateY(${z}px)`,willChange:"transform"},children:[b,j]})},[D,s,k,Je,R,et,Qe,v,Fe,i,b]),q=r.useMemo(()=>({renderingStartIndex:$e.renderingStartIndex,renderingEndIndex:$e.renderingEndIndex,visibleStartIndex:$e.visibleStartIndex,visibleEndIndex:$e.visibleEndIndex,scrollPosition:Je,totalHeight:k.getTotal()}),[$e,Je,k,ye]);r.useEffect(()=>{Ce.current=q},[q]),r.useImperativeHandle(Se,()=>({getScrollPosition:()=>O.current?.getScrollPosition()??-1,getContentSize:()=>O.current?.getContentSize()??-1,getViewportSize:()=>O.current?.getViewportSize()??-1,scrollTo:St,scrollToIndex:je,getFenwickTreeTotalHeight:()=>k.getTotal(),getFenwickSize:()=>k.getSize(),focusItemAtIndex:tt,getRange:()=>Ce.current,updateItemSize:Tt}),[St,je,k,tt,Tt]);const Te=k.getTotal()+v.top+v.bottom;return B.jsx(Ut,{ref:O,contentSize:Te,viewportSize:i,className:l,testId:f,onScroll:yt,background:S,tapScrollCircleOptions:ae,inertiaOptions:Oe,itemCount:s,scrollBarWidth:A,enableThumbDrag:L,enableTrackClick:M,enableArrowButtons:H,enablePointerDrag:$,pointerDragInputs:T,renderThumbOverlay:E,wheelSpeedMultiplier:Ie,onWheelHorizontal:re,contentInsets:v,contentProps:de,visibleStartIndex:lt,visibleEndIndex:dt,renderOverlay:Rt,initialScrollPosition:K.position,children:V})},vr=r.forwardRef(Rr);exports.FenwickMapTree=nt;exports.ScrollBar=$t;exports.ScrollPane=Ut;exports.TAP_SCROLL_SPEED_DEFAULTS=Lt;exports.VirtualScroll=vr;exports.computeAutoTapScrollMaxSpeedMultiplier=jt;exports.computeTapScrollSpeed=Xt;exports.minmax=xe;exports.tapScrollCircleSampleVisual=mr;exports.useFenwickMapTree=Kt;exports.useHeightCache=xr;exports.useLruCache=Wt;
|
package/dist/index.js
CHANGED
|
@@ -280,19 +280,19 @@ const He = {
|
|
|
280
280
|
}),
|
|
281
281
|
[rt]
|
|
282
282
|
);
|
|
283
|
-
const
|
|
283
|
+
const O = Math.min(Math.max(s, 0), 1), P = r / 64, X = Math.min(d.distance, e) / e, $ = d.direction * X * 10 * P, N = a ?? nr, lt = {
|
|
284
284
|
dragState: d,
|
|
285
285
|
normalizedDistance: X,
|
|
286
286
|
sizeScale: P,
|
|
287
287
|
size: r,
|
|
288
|
-
opacity:
|
|
288
|
+
opacity: O
|
|
289
289
|
}, K = {
|
|
290
290
|
...i,
|
|
291
291
|
width: r,
|
|
292
292
|
height: r,
|
|
293
293
|
transform: `translateY(${$}px)`
|
|
294
294
|
};
|
|
295
|
-
return K.opacity =
|
|
295
|
+
return K.opacity = O, /* @__PURE__ */ ot(
|
|
296
296
|
"div",
|
|
297
297
|
{
|
|
298
298
|
ref: m,
|
|
@@ -317,7 +317,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
317
317
|
maxDistance: 240,
|
|
318
318
|
/** 最小速度倍率 (ビューポート比)。 */
|
|
319
319
|
minSpeedMultiplier: 0.2
|
|
320
|
-
}, lr = Je.maxDistance, $e = { active: !1, offsetX: 0, offsetY: 0, distance: 0, direction: 0, pointerId: null },
|
|
320
|
+
}, lr = Je.maxDistance, $e = { active: !1, offsetX: 0, offsetY: 0, distance: 0, direction: 0, pointerId: null }, Oe = 2.2, cr = 8, ur = 120, dr = 1 / 10, Zt = {
|
|
321
321
|
enabled: !0,
|
|
322
322
|
size: 40,
|
|
323
323
|
offsetX: -80,
|
|
@@ -408,9 +408,9 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
408
408
|
return m + (rt - m) * (pt + (1 - pt) * nt);
|
|
409
409
|
}, xr = (n) => {
|
|
410
410
|
if (!n || n <= 0)
|
|
411
|
-
return
|
|
412
|
-
const t = Math.max(1, n), e = Math.log10(t), r =
|
|
413
|
-
return vt(r,
|
|
411
|
+
return Oe;
|
|
412
|
+
const t = Math.max(1, n), e = Math.log10(t), r = Oe + e * cr;
|
|
413
|
+
return vt(r, Oe, ur);
|
|
414
414
|
}, Ir = ({
|
|
415
415
|
contentSize: n,
|
|
416
416
|
viewportSize: t,
|
|
@@ -429,7 +429,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
429
429
|
visibleStartIndex: _,
|
|
430
430
|
visibleEndIndex: B
|
|
431
431
|
}) => {
|
|
432
|
-
const [Z, ut] = Jt(!1), [rt, nt] = Jt(!1), [pt, Pt] = Jt(!1), D = I(null),
|
|
432
|
+
const [Z, ut] = Jt(!1), [rt, nt] = Jt(!1), [pt, Pt] = Jt(!1), D = I(null), O = I({
|
|
433
433
|
pointerId: null,
|
|
434
434
|
startThumbPosition: 0,
|
|
435
435
|
startClientX: 0,
|
|
@@ -460,13 +460,13 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
460
460
|
effectiveTrackLength: 0,
|
|
461
461
|
onScroll: r,
|
|
462
462
|
scrollPosition: e
|
|
463
|
-
}), { mainSizeKey: Et, crossSizeKey: Xt, positionKey: dt, selectDelta: p, getPointerCoordinate: ft, arrowLabels: mt, arrowIcons: z, directionClass: et, orientation: ct } = yt,
|
|
463
|
+
}), { mainSizeKey: Et, crossSizeKey: Xt, positionKey: dt, selectDelta: p, getPointerCoordinate: ft, arrowLabels: mt, arrowIcons: z, directionClass: et, orientation: ct } = yt, Ot = Math.max(y, 1), kt = t / n, Mt = Math.max(t - d * 2, 0), it = kt * Mt, ht = Math.min(Math.max(Xe, it || 0), Mt || Xe), st = n - t, Q = Math.max(Mt - ht, 0), qt = st <= 0 || Q <= 0 ? 0 : vt(e / st * Q, 0, Q), le = qt + ht / 2, Nt = n > t || Z, $t = Nt && a;
|
|
464
464
|
Te(() => {
|
|
465
465
|
_t.current = {
|
|
466
466
|
viewportSize: t,
|
|
467
467
|
maxScrollPosition: st,
|
|
468
468
|
scrollBarVisible: Nt,
|
|
469
|
-
effectiveTapMaxDistance:
|
|
469
|
+
effectiveTapMaxDistance: Ot,
|
|
470
470
|
tapCircleMaxSpeedMultiplier: Kt,
|
|
471
471
|
tapCircleMinSpeedMultiplier: ae,
|
|
472
472
|
tapCircleMaxSpeedCurve: Bt,
|
|
@@ -495,8 +495,8 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
495
495
|
(o) => {
|
|
496
496
|
const g = _t.current, M = X.current;
|
|
497
497
|
if (!g.scrollBarVisible || g.maxScrollPosition <= 0) {
|
|
498
|
-
const R = Vt(0, M),
|
|
499
|
-
return { nextPosition: R, actualDelta:
|
|
498
|
+
const R = Vt(0, M), k = R - M;
|
|
499
|
+
return { nextPosition: R, actualDelta: k, reachedBoundary: !0 };
|
|
500
500
|
}
|
|
501
501
|
if (o === 0)
|
|
502
502
|
return { nextPosition: M, actualDelta: 0, reachedBoundary: !1 };
|
|
@@ -615,7 +615,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
615
615
|
[c]
|
|
616
616
|
), ue = S(
|
|
617
617
|
(o) => {
|
|
618
|
-
const g =
|
|
618
|
+
const g = O.current;
|
|
619
619
|
if (g.pointerId !== o.pointerId)
|
|
620
620
|
return;
|
|
621
621
|
const M = o.clientX - g.startClientX, L = o.clientY - g.startClientY, H = p(M, L) / (g.scale || 1);
|
|
@@ -632,12 +632,12 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
632
632
|
[p, te, Vt]
|
|
633
633
|
), tt = S(
|
|
634
634
|
(o) => {
|
|
635
|
-
const g =
|
|
635
|
+
const g = O.current;
|
|
636
636
|
if (g.pointerId !== o.pointerId)
|
|
637
637
|
return;
|
|
638
638
|
document.removeEventListener("pointermove", ue), document.removeEventListener("pointerup", tt), document.removeEventListener("pointercancel", tt);
|
|
639
639
|
const M = g.captureTarget;
|
|
640
|
-
if (M?.hasPointerCapture?.(o.pointerId) && M.releasePointerCapture(o.pointerId),
|
|
640
|
+
if (M?.hasPointerCapture?.(o.pointerId) && M.releasePointerCapture(o.pointerId), O.current = { pointerId: null, startThumbPosition: 0, startClientX: 0, startClientY: 0, scale: 1, captureTarget: null }, ut(!1), D.current) {
|
|
641
641
|
const L = D.current.getBoundingClientRect();
|
|
642
642
|
o.clientX >= L.left && o.clientX <= L.right && o.clientY >= L.top && o.clientY <= L.bottom || nt(!1);
|
|
643
643
|
} else
|
|
@@ -677,7 +677,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
677
677
|
} catch {
|
|
678
678
|
L = null;
|
|
679
679
|
}
|
|
680
|
-
|
|
680
|
+
O.current = {
|
|
681
681
|
pointerId: o.pointerId,
|
|
682
682
|
startThumbPosition: qt,
|
|
683
683
|
startClientX: o.clientX,
|
|
@@ -797,7 +797,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
797
797
|
ref: lt,
|
|
798
798
|
className: pe("aqvs-scrollbar-tap-circle-wrapper", At),
|
|
799
799
|
size: F,
|
|
800
|
-
maxVisualDistance:
|
|
800
|
+
maxVisualDistance: Ot,
|
|
801
801
|
style: Ce,
|
|
802
802
|
opacity: se,
|
|
803
803
|
renderVisual: j,
|
|
@@ -869,7 +869,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
869
869
|
]
|
|
870
870
|
}
|
|
871
871
|
);
|
|
872
|
-
}, Tr = ["mouse", "pen", "touch"],
|
|
872
|
+
}, Tr = ["mouse", "pen", "touch"], ke = (n, t) => !(n === "mouse" || n === "pen" || n === "touch") || t.includes(n), Sr = (n) => n === "mouse" || n === "pen", Me = {
|
|
873
873
|
maxVelocity: 6,
|
|
874
874
|
minVelocity: 0.02,
|
|
875
875
|
deceleration: 25e-4,
|
|
@@ -903,7 +903,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
903
903
|
contentInsets: pt,
|
|
904
904
|
visibleStartIndex: Pt,
|
|
905
905
|
visibleEndIndex: D,
|
|
906
|
-
renderOverlay:
|
|
906
|
+
renderOverlay: O,
|
|
907
907
|
initialScrollPosition: P = 0,
|
|
908
908
|
contentProps: X
|
|
909
909
|
}, $) => {
|
|
@@ -950,8 +950,8 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
950
950
|
const ct = typeof p == "function" ? p(N.current) : p;
|
|
951
951
|
if (!Number.isFinite(ct))
|
|
952
952
|
return C.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position", { nextPosition: ct }), N.current;
|
|
953
|
-
const
|
|
954
|
-
return N.current !==
|
|
953
|
+
const Ot = Math.max(ft - mt, 0), kt = vt(ct, 0, Ot);
|
|
954
|
+
return N.current !== kt && (N.current = kt, b?.(kt, et)), N.current;
|
|
955
955
|
},
|
|
956
956
|
[b]
|
|
957
957
|
), Ct = I(F);
|
|
@@ -975,17 +975,17 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
975
975
|
if (Math.abs(ct) < et)
|
|
976
976
|
return;
|
|
977
977
|
W(), V.current.velocity = ct, V.current.lastTimestamp = null;
|
|
978
|
-
const
|
|
978
|
+
const Ot = V.current.generation, kt = (Mt) => {
|
|
979
979
|
const it = V.current;
|
|
980
|
-
if (it.generation !==
|
|
980
|
+
if (it.generation !== Ot)
|
|
981
981
|
return;
|
|
982
982
|
if (it.lastTimestamp === null) {
|
|
983
|
-
it.lastTimestamp = Mt, it.frame = requestAnimationFrame(
|
|
983
|
+
it.lastTimestamp = Mt, it.frame = requestAnimationFrame(kt);
|
|
984
984
|
return;
|
|
985
985
|
}
|
|
986
986
|
const ht = Mt - it.lastTimestamp;
|
|
987
987
|
if (it.lastTimestamp = Mt, ht <= 0) {
|
|
988
|
-
it.frame = requestAnimationFrame(
|
|
988
|
+
it.frame = requestAnimationFrame(kt);
|
|
989
989
|
return;
|
|
990
990
|
}
|
|
991
991
|
const st = it.velocity;
|
|
@@ -993,7 +993,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
993
993
|
const qt = z * ht;
|
|
994
994
|
st > 0 ? Q = Math.max(0, st - qt) : st < 0 && (Q = Math.min(0, st + qt));
|
|
995
995
|
const Nt = (st + Q) / 2 * ht, $t = N.current;
|
|
996
|
-
if (Nt !== 0 && Ct.current((gt) => gt + Nt), V.current.generation !==
|
|
996
|
+
if (Nt !== 0 && Ct.current((gt) => gt + Nt), V.current.generation !== Ot)
|
|
997
997
|
return;
|
|
998
998
|
const Gt = N.current, { contentSize: Vt, viewportSize: f } = yt.current, w = Math.max(Vt - f, 0);
|
|
999
999
|
it.velocity = Q;
|
|
@@ -1002,9 +1002,9 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
1002
1002
|
W();
|
|
1003
1003
|
return;
|
|
1004
1004
|
}
|
|
1005
|
-
it.frame = requestAnimationFrame(
|
|
1005
|
+
it.frame = requestAnimationFrame(kt);
|
|
1006
1006
|
};
|
|
1007
|
-
V.current.frame = requestAnimationFrame(
|
|
1007
|
+
V.current.frame = requestAnimationFrame(kt);
|
|
1008
1008
|
},
|
|
1009
1009
|
[J, Tt, W]
|
|
1010
1010
|
), Kt = I(y);
|
|
@@ -1030,8 +1030,8 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
1030
1030
|
const p = (z) => {
|
|
1031
1031
|
if (z.ctrlKey)
|
|
1032
1032
|
return;
|
|
1033
|
-
const et = z.shiftKey && z.deltaX === 0, ct = et ? z.deltaY : z.deltaX,
|
|
1034
|
-
if (ct !== 0 && Math.abs(ct) >= Math.abs(
|
|
1033
|
+
const et = z.shiftKey && z.deltaX === 0, ct = et ? z.deltaY : z.deltaX, Ot = et ? 0 : z.deltaY;
|
|
1034
|
+
if (ct !== 0 && Math.abs(ct) >= Math.abs(Ot)) {
|
|
1035
1035
|
if (T.current) {
|
|
1036
1036
|
z.preventDefault(), W();
|
|
1037
1037
|
let it = ct;
|
|
@@ -1084,7 +1084,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
1084
1084
|
Xt.current = Tt;
|
|
1085
1085
|
}, [Tt]), q(() => {
|
|
1086
1086
|
const p = j.current;
|
|
1087
|
-
if (c && J && (p.pointerId === null ||
|
|
1087
|
+
if (c && J && (p.pointerId === null || ke(p.pointerType, d)) || p.pointerId === null)
|
|
1088
1088
|
return;
|
|
1089
1089
|
const ft = K.current;
|
|
1090
1090
|
p.clickResetTimer !== null && (window.clearTimeout(p.clickResetTimer), p.clickResetTimer = null);
|
|
@@ -1105,7 +1105,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
1105
1105
|
w.velocitySamples.push({ clientY: f, time: at });
|
|
1106
1106
|
const gt = Xt.current.velocitySampleWindow;
|
|
1107
1107
|
w.velocitySamples = w.velocitySamples.filter((wt) => at - wt.time <= gt);
|
|
1108
|
-
},
|
|
1108
|
+
}, Ot = (f) => f instanceof HTMLElement && f.closest("[data-scrollpane-ignore-drag='true']") !== null, kt = (f) => {
|
|
1109
1109
|
const w = j.current;
|
|
1110
1110
|
w.shouldCancelNextClick && (f.preventDefault(), f.stopPropagation(), w.shouldCancelNextClick = !1);
|
|
1111
1111
|
}, Mt = (f) => {
|
|
@@ -1129,7 +1129,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
1129
1129
|
ht(f.pointerId);
|
|
1130
1130
|
return;
|
|
1131
1131
|
}
|
|
1132
|
-
if (!(Bt.current && Et.current) || !
|
|
1132
|
+
if (!(Bt.current && Et.current) || !ke(f.pointerType, _t.current) || !w.isDragging && (Math.abs(f.clientY - w.startClientY) < ft || (Mt(f), !w.isDragging)))
|
|
1133
1133
|
return;
|
|
1134
1134
|
ct(f.clientY);
|
|
1135
1135
|
const at = f.clientY - w.startClientY, gt = w.startScroll - at;
|
|
@@ -1167,7 +1167,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
1167
1167
|
return;
|
|
1168
1168
|
ht(j.current.pointerId);
|
|
1169
1169
|
}
|
|
1170
|
-
if (j.current.shouldCancelNextClick && (et(), j.current.shouldCancelNextClick = !1), !(Bt.current && Et.current) || !
|
|
1170
|
+
if (j.current.shouldCancelNextClick && (et(), j.current.shouldCancelNextClick = !1), !(Bt.current && Et.current) || !ke(f.pointerType, _t.current) || f.button !== 0 && f.pointerType === "mouse" || f.ctrlKey || f.metaKey || f.altKey || Ot(f.target))
|
|
1171
1171
|
return;
|
|
1172
1172
|
window.dispatchEvent(new CustomEvent(Ye, { detail: { paneId: ae } })), At.current?.();
|
|
1173
1173
|
const w = j.current;
|
|
@@ -1179,7 +1179,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
1179
1179
|
}
|
|
1180
1180
|
it(f) && ht(f.pointerId);
|
|
1181
1181
|
}, Gt = [
|
|
1182
|
-
["click",
|
|
1182
|
+
["click", kt, !0],
|
|
1183
1183
|
["pointerdown", le, { passive: !1 }],
|
|
1184
1184
|
["lostpointercapture", (f) => {
|
|
1185
1185
|
f.target !== p || j.current.pointerId !== f.pointerId || ht(f.pointerId);
|
|
@@ -1253,11 +1253,11 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
1253
1253
|
},
|
|
1254
1254
|
"scrollbar"
|
|
1255
1255
|
),
|
|
1256
|
-
|
|
1256
|
+
O?.()
|
|
1257
1257
|
] });
|
|
1258
1258
|
}
|
|
1259
|
-
), Ue = (n, t, e) => Math.min(Math.max(n, t), e),
|
|
1260
|
-
const i = Math.max(r / 2, 1), s = 1 + t * 0.65, a = Math.max(0.65, 1 - t * 0.25), c = n.direction * t * 26 * e, d = 0.8 + t * 0.18, b = 3 * e, x = 6 * e, v = 22 * e, E = Math.abs(c) + x, m = c > 0 ? b : -Math.abs(c) - b, _ = Math.max(2.5, 3 * e), B = Ue(n.offsetX, -i, i), Z = Ue(n.offsetY, -i, i), ut = i * 0.35, rt = B / i * ut, nt = Z / i * ut, pt = rt * 0.45, Pt = nt * 0.45, D = Math.max(v * 0.38, 6),
|
|
1259
|
+
), Ue = (n, t, e) => Math.min(Math.max(n, t), e), kr = ({ dragState: n, normalizedDistance: t, sizeScale: e, size: r }) => {
|
|
1260
|
+
const i = Math.max(r / 2, 1), s = 1 + t * 0.65, a = Math.max(0.65, 1 - t * 0.25), c = n.direction * t * 26 * e, d = 0.8 + t * 0.18, b = 3 * e, x = 6 * e, v = 22 * e, E = Math.abs(c) + x, m = c > 0 ? b : -Math.abs(c) - b, _ = Math.max(2.5, 3 * e), B = Ue(n.offsetX, -i, i), Z = Ue(n.offsetY, -i, i), ut = i * 0.35, rt = B / i * ut, nt = Z / i * ut, pt = rt * 0.45, Pt = nt * 0.45, D = Math.max(v * 0.38, 6), O = 0.65 + t * 0.2, P = n.active;
|
|
1261
1261
|
return /* @__PURE__ */ he(Ge, { children: [
|
|
1262
1262
|
/* @__PURE__ */ ot(
|
|
1263
1263
|
"div",
|
|
@@ -1289,7 +1289,7 @@ const vt = (n, t, e) => Math.max(t, Math.min(e, n)), Ye = "virtualscroll:tap-scr
|
|
|
1289
1289
|
width: D,
|
|
1290
1290
|
height: D,
|
|
1291
1291
|
transform: `translate(calc(-50% + ${pt}px), calc(-50% + ${Pt}px)) scale(${a}, ${s})`,
|
|
1292
|
-
opacity:
|
|
1292
|
+
opacity: O,
|
|
1293
1293
|
boxShadow: "0 0 8px rgba(255,255,255,0.45)",
|
|
1294
1294
|
transition: P ? "120ms opacity 150ms, 120ms transform ease-out ease-out" : "220ms ease transform, 240ms opacity ease"
|
|
1295
1295
|
}
|
|
@@ -2180,7 +2180,7 @@ const Cr = 1e4, Fr = () => {
|
|
|
2180
2180
|
}, It = (n, t) => t <= 0 ? 0 : vt(n, 0, t - 1), Ke = (n) => ({
|
|
2181
2181
|
top: Math.max(0, n?.top ?? 0),
|
|
2182
2182
|
bottom: Math.max(0, n?.bottom ?? 0)
|
|
2183
|
-
}), oe = (n, t) => n <= t ? 0 : n - t, Ie = (n, t) => n <= 0 ?
|
|
2183
|
+
}), oe = (n, t) => n <= t ? 0 : n - t, Ie = (n, t) => n <= 0 ? 0 : n + t, Ae = 1e3, We = 2e3, Er = 1048576, ye = (n) => {
|
|
2184
2184
|
if (!Number.isFinite(n)) return 0n;
|
|
2185
2185
|
const t = Math.trunc(n);
|
|
2186
2186
|
return t <= 0 ? 0n : BigInt(t);
|
|
@@ -2192,10 +2192,10 @@ const Cr = 1e4, Fr = () => {
|
|
|
2192
2192
|
let m;
|
|
2193
2193
|
v === -1 ? m = d - 1n : (E === n ? m = ye(v + 1) : m = ye(v), m >= d && (m = d - 1n)), n <= 0 && (m = 0n), c && n >= a && (m = d - 1n);
|
|
2194
2194
|
const _ = (D) => {
|
|
2195
|
-
const
|
|
2196
|
-
if (!Number.isSafeInteger(
|
|
2195
|
+
const O = Number(D);
|
|
2196
|
+
if (!Number.isSafeInteger(O))
|
|
2197
2197
|
return null;
|
|
2198
|
-
const { cumulative: P } = s.prefixSum(
|
|
2198
|
+
const { cumulative: P } = s.prefixSum(O, { materializeOption: { materialize: !1 } });
|
|
2199
2199
|
if (!Number.isFinite(P))
|
|
2200
2200
|
return null;
|
|
2201
2201
|
const { index: X } = s.findIndexAtOrAfter(P + 0.5, { materializeOption: { materialize: !1 } });
|
|
@@ -2204,10 +2204,10 @@ const Cr = 1e4, Fr = () => {
|
|
|
2204
2204
|
const $ = ye(X);
|
|
2205
2205
|
return $ > D ? $ : null;
|
|
2206
2206
|
}, B = (D) => {
|
|
2207
|
-
let
|
|
2208
|
-
for (; P < d &&
|
|
2207
|
+
let O = 0, P = D, X = D, $ = 0n, N = 0;
|
|
2208
|
+
for (; P < d && O < t; ) {
|
|
2209
2209
|
const lt = Number(P), K = i(lt);
|
|
2210
|
-
if (
|
|
2210
|
+
if (O += K, X = P, P += 1n, $ += 1n, !Number.isFinite(K) || K < 0)
|
|
2211
2211
|
break;
|
|
2212
2212
|
if (K === 0) {
|
|
2213
2213
|
if (N += 1, N > Ae) {
|
|
@@ -2222,15 +2222,15 @@ const Cr = 1e4, Fr = () => {
|
|
|
2222
2222
|
} else
|
|
2223
2223
|
N = 0;
|
|
2224
2224
|
}
|
|
2225
|
-
return $ === 0n && (X = D), { height:
|
|
2225
|
+
return $ === 0n && (X = D), { height: O, end: X };
|
|
2226
2226
|
};
|
|
2227
2227
|
let { height: Z, end: ut } = B(m);
|
|
2228
2228
|
if (Z < t && m > 0n) {
|
|
2229
|
-
let D = m,
|
|
2230
|
-
for (; D > 0n &&
|
|
2229
|
+
let D = m, O = Z, P = 0;
|
|
2230
|
+
for (; D > 0n && O < t; ) {
|
|
2231
2231
|
D -= 1n;
|
|
2232
2232
|
const $ = Number(D), N = i($);
|
|
2233
|
-
if (
|
|
2233
|
+
if (O += N, !Number.isFinite(N) || N < 0)
|
|
2234
2234
|
break;
|
|
2235
2235
|
if (N === 0) {
|
|
2236
2236
|
if (P += 1, P > Ae) {
|
|
@@ -2275,11 +2275,11 @@ const Cr = 1e4, Fr = () => {
|
|
|
2275
2275
|
else if (m === b && x !== void 0 && v !== void 0)
|
|
2276
2276
|
_ = x - v - d;
|
|
2277
2277
|
else {
|
|
2278
|
-
const { cumulative: D, currentValue:
|
|
2279
|
-
_ = (D ?? 0) - (
|
|
2278
|
+
const { cumulative: D, currentValue: O } = s.prefixSum(m, { materializeOption: { materialize: !1 } });
|
|
2279
|
+
_ = (D ?? 0) - (O ?? 0) - d;
|
|
2280
2280
|
}
|
|
2281
|
-
const B = _, Z = (D,
|
|
2282
|
-
let P = D, X =
|
|
2281
|
+
const B = _, Z = (D, O) => {
|
|
2282
|
+
let P = D, X = O, $ = 0;
|
|
2283
2283
|
for (; P < r && X < t; ) {
|
|
2284
2284
|
const N = i(P);
|
|
2285
2285
|
if (X += N, P++, !Number.isFinite(N) || N < 0)
|
|
@@ -2301,32 +2301,32 @@ const Cr = 1e4, Fr = () => {
|
|
|
2301
2301
|
}, ut = Z(m, _);
|
|
2302
2302
|
let rt = ut.cursor;
|
|
2303
2303
|
if (_ = ut.height, _ < t && m > 0) {
|
|
2304
|
-
let D = _ + Math.abs(Math.min(0, B)),
|
|
2305
|
-
for (;
|
|
2306
|
-
const $ = i(
|
|
2304
|
+
let D = _ + Math.abs(Math.min(0, B)), O = m - 1, P = 0;
|
|
2305
|
+
for (; O >= 0 && D < t; ) {
|
|
2306
|
+
const $ = i(O);
|
|
2307
2307
|
if (D += $, !Number.isFinite($) || $ < 0) {
|
|
2308
|
-
|
|
2308
|
+
O--;
|
|
2309
2309
|
break;
|
|
2310
2310
|
}
|
|
2311
2311
|
if ($ === 0) {
|
|
2312
2312
|
if (P++, P > Ae) {
|
|
2313
|
-
const { cumulative: N } = s.prefixSum(
|
|
2314
|
-
if (lt !== -1 && lt <
|
|
2315
|
-
|
|
2313
|
+
const { cumulative: N } = s.prefixSum(O, { materializeOption: { materialize: !1 } }), { index: lt } = Number.isFinite(N) ? s.findIndexAtOrAfter(N - 0.5, { materializeOption: { materialize: !1 } }) : { index: -1 };
|
|
2314
|
+
if (lt !== -1 && lt < O) {
|
|
2315
|
+
O = lt, P = 0;
|
|
2316
2316
|
continue;
|
|
2317
2317
|
}
|
|
2318
|
-
if (lt ===
|
|
2318
|
+
if (lt === O && O >= 1 && i(O - 1) > 0)
|
|
2319
2319
|
P = 0;
|
|
2320
2320
|
else {
|
|
2321
|
-
|
|
2321
|
+
O--;
|
|
2322
2322
|
break;
|
|
2323
2323
|
}
|
|
2324
2324
|
}
|
|
2325
2325
|
} else
|
|
2326
2326
|
P = 0;
|
|
2327
|
-
|
|
2327
|
+
O--;
|
|
2328
2328
|
}
|
|
2329
|
-
m = It(
|
|
2329
|
+
m = It(O + 1, r);
|
|
2330
2330
|
const X = Z(m, 0);
|
|
2331
2331
|
rt = X.cursor, _ = X.height;
|
|
2332
2332
|
}
|
|
@@ -2336,9 +2336,16 @@ const Cr = 1e4, Fr = () => {
|
|
|
2336
2336
|
const r = Math.max(0, t ?? 0), i = I({ last: 0, id: null, arg: null }).current;
|
|
2337
2337
|
return q(
|
|
2338
2338
|
() => () => {
|
|
2339
|
-
i.id !== null && (cancelAnimationFrame(i.id), i.id = null)
|
|
2339
|
+
if (i.id !== null && (cancelAnimationFrame(i.id), i.id = null), i.arg !== null && n.current) {
|
|
2340
|
+
try {
|
|
2341
|
+
e(n.current, i.arg);
|
|
2342
|
+
} catch (s) {
|
|
2343
|
+
console.error("[useThrottledInvoker] Error flushing pending callback on unmount", s);
|
|
2344
|
+
}
|
|
2345
|
+
i.arg = null;
|
|
2346
|
+
}
|
|
2340
2347
|
},
|
|
2341
|
-
[i]
|
|
2348
|
+
[i, n, e]
|
|
2342
2349
|
), S(
|
|
2343
2350
|
(s) => {
|
|
2344
2351
|
if (i.arg = s, i.id !== null) return;
|
|
@@ -2406,7 +2413,7 @@ const Cr = 1e4, Fr = () => {
|
|
|
2406
2413
|
onWheelHorizontal: nt,
|
|
2407
2414
|
contentProps: pt
|
|
2408
2415
|
}, Pt) => {
|
|
2409
|
-
const { width: D, enableThumbDrag:
|
|
2416
|
+
const { width: D, enableThumbDrag: O, enableTrackClick: P, enableArrowButtons: X, enableScrollToTopBottomButtons: $, renderThumbOverlay: N, tapScrollCircleOptions: lt } = ut ?? {}, { enablePointerDrag: K, pointerDragInputs: T, enableKeyboardNavigation: V = !0, wheelSpeedMultiplier: Tt, inertiaOptions: Yt, clipItemHeight: yt = !1, resetOnGetItemHeightChange: J = !1 } = rt ?? {}, F = I(null), Ct = I({
|
|
2410
2417
|
renderingStartIndex: 0,
|
|
2411
2418
|
renderingEndIndex: 0,
|
|
2412
2419
|
visibleStartIndex: 0,
|
|
@@ -2434,11 +2441,11 @@ const Cr = 1e4, Fr = () => {
|
|
|
2434
2441
|
), A = yr(n, r, ae), [j] = Jt(() => {
|
|
2435
2442
|
let l = 0, u = 0;
|
|
2436
2443
|
if (typeof E == "number") {
|
|
2437
|
-
const h = vt(E, 0, n - 1), R = vt(h - s * 2, 0, n - 1),
|
|
2444
|
+
const h = vt(E, 0, n - 1), R = vt(h - s * 2, 0, n - 1), k = vt(h + s * 2, 0, n - 1), Y = E > 0 ? { materializeOption: { materialize: !0, ranges: [{ from: R, to: k }] } } : void 0, { cumulative: U, total: G, currentValue: Rt } = A.prefixSum(E, Y), bt = Math.max(U - Rt, 0);
|
|
2438
2445
|
l = Ie(bt, y.top), u = G ?? A.getTotal();
|
|
2439
2446
|
} else typeof m == "number" && (l = Ie(Math.max(m, 0), y.top)), u = A.getTotal();
|
|
2440
2447
|
return { position: l, total: u };
|
|
2441
|
-
}), [Bt, _t] = Jt(j.position), [Et, Xt] = Jt(j.total), dt = I(j.position), p = I(y.top), ft = I(d ?? void 0), mt = I(b ?? void 0), z = I(/* @__PURE__ */ new Map()), et = I(null), ct = I(null), [
|
|
2448
|
+
}), [Bt, _t] = Jt(j.position), [Et, Xt] = Jt(j.total), dt = I(j.position), p = I(y.top), ft = I(d ?? void 0), mt = I(b ?? void 0), z = I(/* @__PURE__ */ new Map()), et = I(null), ct = I(null), [Ot, kt] = Jt(null), [Mt, it] = Jt(!1), ht = I(null), st = I(!1), Q = I(0), qt = I(!1), le = I(!1), Nt = I(n);
|
|
2442
2449
|
Nt.current !== n && (Nt.current = n, le.current = !0), q(() => {
|
|
2443
2450
|
ft.current = d ?? void 0, mt.current = b ?? void 0;
|
|
2444
2451
|
}, [b, d]);
|
|
@@ -2555,11 +2562,11 @@ const Cr = 1e4, Fr = () => {
|
|
|
2555
2562
|
}
|
|
2556
2563
|
}, [A, Et, n, ee, tt]), q(() => {
|
|
2557
2564
|
if (W.current !== null) {
|
|
2558
|
-
const { index: l, align: u, offset: h } = W.current, R = It(l, n), { cumulative:
|
|
2559
|
-
if (
|
|
2560
|
-
const U = Math.max(
|
|
2565
|
+
const { index: l, align: u, offset: h } = W.current, R = It(l, n), { cumulative: k, currentValue: Y } = A.prefixSum(R, { materializeOption: { materialize: !1 } });
|
|
2566
|
+
if (k !== void 0 && Y !== void 0) {
|
|
2567
|
+
const U = Math.max(k - Y, 0);
|
|
2561
2568
|
let G = U;
|
|
2562
|
-
u === "bottom" ? G =
|
|
2569
|
+
u === "bottom" ? G = k - i : u === "center" && (G = U + Y / 2 - i / 2), h && (G -= h), G = Math.max(0, G);
|
|
2563
2570
|
const Rt = Math.max(0, Et + y.top + y.bottom - i), bt = Math.min(Ie(G, y.top), Rt);
|
|
2564
2571
|
Math.abs(bt - dt.current) > 1 && (C.debug("[VirtualScroll] Drift correction", {
|
|
2565
2572
|
from: dt.current,
|
|
@@ -2579,16 +2586,16 @@ const Cr = 1e4, Fr = () => {
|
|
|
2579
2586
|
(l, u) => {
|
|
2580
2587
|
if (n === 0)
|
|
2581
2588
|
return;
|
|
2582
|
-
const h = It(l, n), R = A.get(h),
|
|
2589
|
+
const h = It(l, n), R = A.get(h), k = u - R, Y = A.update(h, u);
|
|
2583
2590
|
Y !== void 0 && Xt(Y), C.debug("[VirtualScroll] Updated item size manually", { index: h, size: u, total: Y });
|
|
2584
2591
|
let U = W.current ? W.current.index : null;
|
|
2585
2592
|
if (U === null) {
|
|
2586
2593
|
const G = dt.current, Rt = Ke(B).top, bt = oe(G, Rt), { index: xt, cumulative: Ft } = A.findIndexAtOrAfter(bt, { materializeOption: { materialize: !1 } });
|
|
2587
2594
|
U = Ft !== void 0 && Ft === bt ? xt + 1 : xt;
|
|
2588
2595
|
}
|
|
2589
|
-
if (U !== -1 && h < U &&
|
|
2590
|
-
const G = dt.current, Rt = G +
|
|
2591
|
-
ee(Rt), tt(Rt, { immediate: !0 }), C.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)", { from: G, to: Rt, causedByIndex: h, delta:
|
|
2596
|
+
if (U !== -1 && h < U && k !== 0) {
|
|
2597
|
+
const G = dt.current, Rt = G + k;
|
|
2598
|
+
ee(Rt), tt(Rt, { immediate: !0 }), C.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)", { from: G, to: Rt, causedByIndex: h, delta: k, activeVisibleStartIndex: U });
|
|
2592
2599
|
}
|
|
2593
2600
|
},
|
|
2594
2601
|
[A, n, ee, tt, B]
|
|
@@ -2596,8 +2603,8 @@ const Cr = 1e4, Fr = () => {
|
|
|
2596
2603
|
(l, u) => {
|
|
2597
2604
|
if (!F.current || n === 0)
|
|
2598
2605
|
return;
|
|
2599
|
-
const h = It(l, n), R = It(h - s * 2, n),
|
|
2600
|
-
if (C.debug("[VirtualScroll] Scrolling to index:", h, "ItemBottom:", Y, "Total height:", U, "ItemHeight:", G, "safeIndexFrom:", R, "safeIndexTo:",
|
|
2606
|
+
const h = It(l, n), R = It(h - s * 2, n), k = It(h + s * 2, n), { cumulative: Y, total: U, currentValue: G } = A.prefixSum(h, { materializeOption: { materialize: !0, ranges: [{ from: R, to: k }] } });
|
|
2607
|
+
if (C.debug("[VirtualScroll] Scrolling to index:", h, "ItemBottom:", Y, "Total height:", U, "ItemHeight:", G, "safeIndexFrom:", R, "safeIndexTo:", k), !U)
|
|
2601
2608
|
return;
|
|
2602
2609
|
const Rt = Math.max(Y - G, 0);
|
|
2603
2610
|
let bt = Rt;
|
|
@@ -2616,7 +2623,7 @@ const Cr = 1e4, Fr = () => {
|
|
|
2616
2623
|
(l) => {
|
|
2617
2624
|
if (!F.current || n === 0)
|
|
2618
2625
|
return;
|
|
2619
|
-
const u = A.getTotal(), h = vt(Math.floor(l), 0, u), { index: R, cumulative:
|
|
2626
|
+
const u = A.getTotal(), h = vt(Math.floor(l), 0, u), { index: R, cumulative: k, currentValue: Y } = A.findIndexAtOrAfter(h, { materializeOption: { materialize: !1 } }), G = (k ?? 0) - (Y ?? 0) - h;
|
|
2620
2627
|
Wt(R, { offset: G });
|
|
2621
2628
|
},
|
|
2622
2629
|
[A, n, Wt]
|
|
@@ -2624,8 +2631,8 @@ const Cr = 1e4, Fr = () => {
|
|
|
2624
2631
|
(l) => {
|
|
2625
2632
|
const u = oe(dt.current, y.top), h = typeof l == "function" ? l(u) : l;
|
|
2626
2633
|
ge(h);
|
|
2627
|
-
const R = F.current?.getScrollPosition(),
|
|
2628
|
-
return tt(
|
|
2634
|
+
const R = F.current?.getScrollPosition(), k = typeof R == "number" ? R : dt.current;
|
|
2635
|
+
return tt(k), k;
|
|
2629
2636
|
},
|
|
2630
2637
|
[y.top, ge, tt]
|
|
2631
2638
|
), De = S(
|
|
@@ -2637,10 +2644,10 @@ const Cr = 1e4, Fr = () => {
|
|
|
2637
2644
|
if (R && (Q.current = 0), h || R || le.current || (W.current = null), tt(l), $) {
|
|
2638
2645
|
if (h || R)
|
|
2639
2646
|
return;
|
|
2640
|
-
const
|
|
2641
|
-
if (C.debug("[VirtualScroll] Scroll diff:",
|
|
2642
|
-
const Y =
|
|
2643
|
-
|
|
2647
|
+
const k = l - u;
|
|
2648
|
+
if (C.debug("[VirtualScroll] Scroll diff:", k, "New:", l, "Prev:", u), Math.abs(k) > 1) {
|
|
2649
|
+
const Y = k > 0 ? "down" : "up";
|
|
2650
|
+
kt(Y), it(!0), C.debug("[VirtualScroll] Showing scroll buttons. Direction:", Y), ht.current && clearTimeout(ht.current), ht.current = setTimeout(() => {
|
|
2644
2651
|
it(!1), C.debug("[VirtualScroll] Hiding scroll buttons");
|
|
2645
2652
|
}, 2e3);
|
|
2646
2653
|
}
|
|
@@ -2666,7 +2673,7 @@ const Cr = 1e4, Fr = () => {
|
|
|
2666
2673
|
Dt && (et.current = null, ct.current = h, $t(Dt));
|
|
2667
2674
|
return;
|
|
2668
2675
|
}
|
|
2669
|
-
const
|
|
2676
|
+
const k = A.prefixSum(h, { materializeOption: { materialize: !1 } }), Y = k.currentValue, U = Math.max(k.cumulative - Y, 0), G = U + Y, Rt = oe(dt.current, y.top), bt = Rt + i;
|
|
2670
2677
|
if (U < Rt || G > bt) {
|
|
2671
2678
|
Wt(h);
|
|
2672
2679
|
const Dt = z.current.get(h);
|
|
@@ -2702,14 +2709,14 @@ const Cr = 1e4, Fr = () => {
|
|
|
2702
2709
|
if (l.key === "PageDown") {
|
|
2703
2710
|
if (u < n - 1) {
|
|
2704
2711
|
l.preventDefault();
|
|
2705
|
-
const { visibleStartIndex: R, visibleEndIndex:
|
|
2712
|
+
const { visibleStartIndex: R, visibleEndIndex: k } = Ct.current, Y = Math.max(k - R + 1, 1), U = Math.max(Y, 1), G = It(Math.min(u + U, n - 1), n);
|
|
2706
2713
|
se(G);
|
|
2707
2714
|
}
|
|
2708
2715
|
return;
|
|
2709
2716
|
}
|
|
2710
2717
|
if (l.key === "PageUp" && u > 0) {
|
|
2711
2718
|
l.preventDefault();
|
|
2712
|
-
const { visibleStartIndex: R, visibleEndIndex:
|
|
2719
|
+
const { visibleStartIndex: R, visibleEndIndex: k } = Ct.current, Y = Math.max(k - R + 1, 1), U = Math.max(Y, 1), G = It(u - U, n);
|
|
2713
2720
|
se(G);
|
|
2714
2721
|
}
|
|
2715
2722
|
},
|
|
@@ -2744,7 +2751,7 @@ const Cr = 1e4, Fr = () => {
|
|
|
2744
2751
|
totalHeight: Et
|
|
2745
2752
|
});
|
|
2746
2753
|
}, [Et, ie, ne, y.top, w, Bt, be, de]);
|
|
2747
|
-
const Ee = S(() => $ ? /* @__PURE__ */ ot("div", { className: "aqvs-scroll-to-edge-overlay", "data-visible": Mt &&
|
|
2754
|
+
const Ee = S(() => $ ? /* @__PURE__ */ ot("div", { className: "aqvs-scroll-to-edge-overlay", "data-visible": Mt && Ot !== null, children: Ot === "up" ? /* @__PURE__ */ ot("div", { className: "aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top", children: /* @__PURE__ */ ot(
|
|
2748
2755
|
"button",
|
|
2749
2756
|
{
|
|
2750
2757
|
type: "button",
|
|
@@ -2764,16 +2771,16 @@ const Cr = 1e4, Fr = () => {
|
|
|
2764
2771
|
},
|
|
2765
2772
|
children: "Bottom"
|
|
2766
2773
|
}
|
|
2767
|
-
) }) }) : null, [$, Mt,
|
|
2774
|
+
) }) }) : null, [$, Mt, Ot, Wt, n]), o = I(0), { visibleItems: g, renderAnchor: M } = Lt(() => {
|
|
2768
2775
|
if (n === 0)
|
|
2769
2776
|
return {
|
|
2770
2777
|
visibleItems: /* @__PURE__ */ ot("div", { className: "aqvs-no-items-container", children: /* @__PURE__ */ ot("div", { className: "aqvs-no-items-text", children: "No items" }) }),
|
|
2771
2778
|
renderAnchor: 0
|
|
2772
2779
|
};
|
|
2773
|
-
const l = It(ne, n), u = It(ie, n), { cumulative: h, currentValue: R } = A.prefixSum(l, { materializeOption: { materialize: !1 } }),
|
|
2774
|
-
Number.isFinite(
|
|
2780
|
+
const l = It(ne, n), u = It(ie, n), { cumulative: h, currentValue: R } = A.prefixSum(l, { materializeOption: { materialize: !1 } }), k = h - R;
|
|
2781
|
+
Number.isFinite(k) && Math.abs(k - o.current) > Er && (o.current = k);
|
|
2775
2782
|
const Y = o.current, U = [], G = [];
|
|
2776
|
-
let Rt = 0, bt =
|
|
2783
|
+
let Rt = 0, bt = k;
|
|
2777
2784
|
for (let xt = l; xt <= u; xt++) {
|
|
2778
2785
|
if (G.length >= We) {
|
|
2779
2786
|
C.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.", { cap: We, safeRenderingStartIndex: l, safeRenderingEndIndex: u });
|
|
@@ -2840,10 +2847,10 @@ const Cr = 1e4, Fr = () => {
|
|
|
2840
2847
|
de
|
|
2841
2848
|
]), L = S(
|
|
2842
2849
|
(l) => {
|
|
2843
|
-
const u = (_ ?? 0) > 0, h = Math.abs(l - Bt), R = u && h > 0.5 ? Bt : l,
|
|
2850
|
+
const u = (_ ?? 0) > 0, h = Math.abs(l - Bt), R = u && h > 0.5 ? Bt : l, k = oe(R, y.top);
|
|
2844
2851
|
if (C.debug("[VirtualScroll] Rendering visible items", () => ({
|
|
2845
2852
|
currentScrollPosition: l,
|
|
2846
|
-
effectiveScrollPosition:
|
|
2853
|
+
effectiveScrollPosition: k,
|
|
2847
2854
|
renderingStartIndex: ne,
|
|
2848
2855
|
renderingEndIndex: ie,
|
|
2849
2856
|
itemCount: n,
|
|
@@ -2869,7 +2876,7 @@ const Cr = 1e4, Fr = () => {
|
|
|
2869
2876
|
containerTop: Y,
|
|
2870
2877
|
logicalScrollPosition: re,
|
|
2871
2878
|
resolvedInsets: y,
|
|
2872
|
-
effectiveScrollPosition:
|
|
2879
|
+
effectiveScrollPosition: k
|
|
2873
2880
|
})), /* @__PURE__ */ he("div", { className: "aqvs-items-wrapper", style: { top: 0, transform: `translateY(${Y}px)`, willChange: "transform" }, children: [
|
|
2874
2881
|
g,
|
|
2875
2882
|
U
|
|
@@ -2923,7 +2930,7 @@ const Cr = 1e4, Fr = () => {
|
|
|
2923
2930
|
inertiaOptions: Yt,
|
|
2924
2931
|
itemCount: n,
|
|
2925
2932
|
scrollBarWidth: D,
|
|
2926
|
-
enableThumbDrag:
|
|
2933
|
+
enableThumbDrag: O,
|
|
2927
2934
|
enableTrackClick: P,
|
|
2928
2935
|
enableArrowButtons: X,
|
|
2929
2936
|
enablePointerDrag: K,
|
|
@@ -2950,7 +2957,7 @@ export {
|
|
|
2950
2957
|
xr as computeAutoTapScrollMaxSpeedMultiplier,
|
|
2951
2958
|
br as computeTapScrollSpeed,
|
|
2952
2959
|
vt as minmax,
|
|
2953
|
-
|
|
2960
|
+
kr as tapScrollCircleSampleVisual,
|
|
2954
2961
|
yr as useFenwickMapTree,
|
|
2955
2962
|
Fr as useHeightCache,
|
|
2956
2963
|
Rr as useLruCache
|
package/package.json
CHANGED
package/src/VirtualScroll.tsx
CHANGED
|
@@ -180,7 +180,12 @@ const normalizeInsets = (insets?: ScrollPaneContentInsets): Required<ScrollPaneC
|
|
|
180
180
|
|
|
181
181
|
const toLogicalPositionWithInset = (pane: number, top: number) => (pane <= top ? 0 : pane - top)
|
|
182
182
|
|
|
183
|
-
|
|
183
|
+
// 論理 0 は「本当の先頭」= ペイン 0 (上インセットが見えている状態) へ写像する。
|
|
184
|
+
// ❗ `logical <= 0 ? top` (インセットを隠して先頭行を上端密着にする端点) へ戻さないこと:
|
|
185
|
+
// マウント既定 (initialScroll 未指定 = ペイン 0) や ScrollPane のクランプ休止点 (ペイン 0) と
|
|
186
|
+
// 端点が食い違い、「保存した論理 0 を復元すると数 px スクロールされて見える」実害バグになる
|
|
187
|
+
// (toLogical はペイン [0..top] を論理 0 へ潰す不可逆写像のため、逆写像の端点選択がここで確定する)
|
|
188
|
+
const toPanePositionWithInset = (logical: number, top: number) => (logical <= 0 ? 0 : logical + top)
|
|
184
189
|
|
|
185
190
|
/**
|
|
186
191
|
* Maximum run length of consecutive zero-height rows scanned linearly before attempting an
|
|
@@ -572,15 +577,27 @@ const useThrottledInvoker = <Callback, Payload>(callbackRef: React.MutableRefObj
|
|
|
572
577
|
// last: 最終実行時刻, id: RAF ID, arg: 待機中の引数
|
|
573
578
|
const state = useRef({ last: 0, id: null as number | null, arg: null as Payload | null }).current
|
|
574
579
|
|
|
575
|
-
// クリーンアップ: アンマウント時にRAF
|
|
580
|
+
// クリーンアップ: アンマウント時に RAF をキャンセルし、待機中のペイロードは**破棄せず同期配信**する。
|
|
581
|
+
// ❗ 破棄すると、フリング中のタブ切替などで確定済みの待機通知まで消費側へ届かず、
|
|
582
|
+
// 「スクロールのたびに書き戻す」型の位置保存が取りこぼす。なおこの flush が救えるのは
|
|
583
|
+
// 「キューに載った最後のペイロード」まで: 最後の render-loop tick 以後の移動 (最大 1 フレーム分、
|
|
584
|
+
// 慣性で概ね 100px 未満) は残余として許容する (読中でないフリング途中の位置のため実害は軽微)
|
|
576
585
|
useEffect(
|
|
577
586
|
() => () => {
|
|
578
587
|
if (state.id !== null) {
|
|
579
588
|
cancelAnimationFrame(state.id)
|
|
580
589
|
state.id = null
|
|
581
590
|
}
|
|
591
|
+
if (state.arg !== null && callbackRef.current) {
|
|
592
|
+
try {
|
|
593
|
+
invoke(callbackRef.current, state.arg)
|
|
594
|
+
} catch (e) {
|
|
595
|
+
console.error("[useThrottledInvoker] Error flushing pending callback on unmount", e)
|
|
596
|
+
}
|
|
597
|
+
state.arg = null
|
|
598
|
+
}
|
|
582
599
|
},
|
|
583
|
-
[state],
|
|
600
|
+
[state, callbackRef, invoke],
|
|
584
601
|
)
|
|
585
602
|
|
|
586
603
|
return useCallback(
|