@aiquants/virtualscroll 1.19.2 → 1.20.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/README.md +4 -3
- package/dist/ScrollPane.d.cts +3 -1
- package/dist/ScrollPane.d.ts +3 -1
- package/dist/ScrollPane.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +328 -326
- package/package.json +1 -1
- package/src/ScrollPane.spec.tsx +14 -0
- package/src/ScrollPane.tsx +20 -16
package/README.md
CHANGED
|
@@ -105,8 +105,9 @@ function App() {
|
|
|
105
105
|
`VirtualScroll` virtualizes and scrolls the **vertical** axis only. To add a horizontal axis — e.g. a
|
|
106
106
|
data grid whose columns extend past the viewport — pass `onWheelHorizontal`. Horizontal-dominant
|
|
107
107
|
wheel / trackpad gestures (and shift+wheel) are then delegated to your handler, which drives a
|
|
108
|
-
horizontal offset you own. Vertical scrolling is untouched
|
|
109
|
-
|
|
108
|
+
horizontal offset you own. Vertical scrolling is untouched. When `onWheelHorizontal` is omitted,
|
|
109
|
+
horizontal gestures and shift+wheel bypass vertical scroll interception so parent native scrolling
|
|
110
|
+
(e.g., `overflow-x: auto`) works seamlessly without being consumed.
|
|
110
111
|
|
|
111
112
|
A common pattern freezes a left column and translates the remaining columns via a shared CSS
|
|
112
113
|
variable (so rows don't re-render on horizontal scroll), reusing the package's `ScrollBar` with the
|
|
@@ -168,7 +169,7 @@ A runnable version lives in the demo at **`/horizontal`** (`pnpm demo:dev`), and
|
|
|
168
169
|
| `className` | `string` | ❌ | CSS class name |
|
|
169
170
|
| `onScroll` | `(position: number, totalHeight: number) => void` | ❌ | Scroll event handler |
|
|
170
171
|
| `onRangeChange` | `(range: VirtualScrollRange) => void` | ❌ | Range change handler |
|
|
171
|
-
| `onWheelHorizontal` | `(deltaX: number) => void` | ❌ | Opt-in horizontal wheel delegation. When set, horizontal-dominant wheel / trackpad gestures (and shift+wheel) are delegated to this handler so the parent can implement horizontal scrolling
|
|
172
|
+
| `onWheelHorizontal` | `(deltaX: number) => void` | ❌ | Opt-in horizontal wheel delegation. When set, horizontal-dominant wheel / trackpad gestures (and shift+wheel) are delegated to this handler so the parent can implement horizontal scrolling. When omitted, horizontal gestures and shift+wheel bypass vertical scrolling so parent native scrolling works. See [Horizontal Scrolling](#horizontal-scrolling). |
|
|
172
173
|
| `background` | `ReactNode` | ❌ | Background element |
|
|
173
174
|
| `initialScrollIndex` | `number` | ❌ | Initial scroll index |
|
|
174
175
|
| `initialScrollOffset` | `number` | ❌ | Initial scroll offset |
|
package/dist/ScrollPane.d.cts
CHANGED
|
@@ -55,7 +55,9 @@ export type ScrollPaneProps = {
|
|
|
55
55
|
* Callback delegating horizontal wheel/trackpad delta to an upstream owner.
|
|
56
56
|
* When provided, horizontal-dominant (or shift+wheel) gestures are consumed here
|
|
57
57
|
* (preventDefault + delegate) instead of being ignored; vertical behavior is unchanged.
|
|
58
|
-
*
|
|
58
|
+
* When omitted, horizontal gestures and shift+wheel bypass vertical scrolling so parent native scrolling works.
|
|
59
|
+
* 横方向ホイール/トラックパッド量を上流へ委譲するコールバック。
|
|
60
|
+
* 指定時は横スクロールを委譲処理し、未指定時でも Shift+ホイール 等の横ジェスチャは縦スクロールで横取りせず親要素のスクロールへ委ねる。
|
|
59
61
|
*/
|
|
60
62
|
onWheelHorizontal?: (deltaX: number) => void;
|
|
61
63
|
/** Insets applied to the scrollable content area. / スクロール可能領域に適用するインセット。 */
|
package/dist/ScrollPane.d.ts
CHANGED
|
@@ -55,7 +55,9 @@ export type ScrollPaneProps = {
|
|
|
55
55
|
* Callback delegating horizontal wheel/trackpad delta to an upstream owner.
|
|
56
56
|
* When provided, horizontal-dominant (or shift+wheel) gestures are consumed here
|
|
57
57
|
* (preventDefault + delegate) instead of being ignored; vertical behavior is unchanged.
|
|
58
|
-
*
|
|
58
|
+
* When omitted, horizontal gestures and shift+wheel bypass vertical scrolling so parent native scrolling works.
|
|
59
|
+
* 横方向ホイール/トラックパッド量を上流へ委譲するコールバック。
|
|
60
|
+
* 指定時は横スクロールを委譲処理し、未指定時でも Shift+ホイール 等の横ジェスチャは縦スクロールで横取りせず親要素のスクロールへ委ねる。
|
|
59
61
|
*/
|
|
60
62
|
onWheelHorizontal?: (deltaX: number) => void;
|
|
61
63
|
/** Insets applied to the scrollable content area. / スクロール可能領域に適用するインセット。 */
|
package/dist/ScrollPane.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollPane.d.ts","sourceRoot":"","sources":["../src/ScrollPane.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,yBAAyB,EAAE,KAAK,gCAAgC,EAA2B,MAAM,iBAAiB,CAAA;AAG3I;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B;;;;;;OAMG;IACH,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IACrD,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAA;IACnB,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAA;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iFAAiF;IACjF,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IACjE,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+LAA+L;IAC/L,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B,wFAAwF;IACxF,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,6DAA6D;IAC7D,sBAAsB,CAAC,EAAE,yBAAyB,CAAA;IAClD,+DAA+D;IAC/D,cAAc,CAAC,EAAE,wBAAwB,CAAA;IACzC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,uFAAuF;IACvF,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,gCAAgC,KAAK,KAAK,CAAC,SAAS,CAAA;IACjF,qGAAqG;IACrG,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B
|
|
1
|
+
{"version":3,"file":"ScrollPane.d.ts","sourceRoot":"","sources":["../src/ScrollPane.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,yBAAyB,EAAE,KAAK,gCAAgC,EAA2B,MAAM,iBAAiB,CAAA;AAG3I;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B;;;;;;OAMG;IACH,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IACrD,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAA;IACnB,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAA;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iFAAiF;IACjF,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IACjE,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+LAA+L;IAC/L,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B,wFAAwF;IACxF,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,6DAA6D;IAC7D,sBAAsB,CAAC,EAAE,yBAAyB,CAAA;IAClD,+DAA+D;IAC/D,cAAc,CAAC,EAAE,wBAAwB,CAAA;IACzC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,uFAAuF;IACvF,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,gCAAgC,KAAK,KAAK,CAAC,SAAS,CAAA;IACjF,qGAAqG;IACrG,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,4EAA4E;IAC5E,aAAa,CAAC,EAAE,uBAAuB,CAAA;IACvC,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iGAAiG;IACjG,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAA;IACrC,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,uGAAuG;IACvG,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,uEAAuE;IACvE,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AA4CD,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,KAAK,MAAM,CAAA;IACtE,iBAAiB,EAAE,MAAM,MAAM,CAAA;IAC/B,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B,eAAe,EAAE,MAAM,MAAM,CAAA;CAChC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,8GA8vBtB,CAAA"}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const H=require("react/jsx-runtime"),r=require("react"),it=require("tailwind-merge");class E{level;prefix;impl;constructor(e=2,t="[virtualscroll]",n=console){this.level=e,this.prefix=t,this.impl=n}static instance=new E(2,"[virtualscroll]");static setLevel(e){E.instance.setLevel(e)}setLevel(e){this.level=e}static setImplementation(e){E.instance.setImplementation(e)}setImplementation(e){this.impl=e}static setPrefix(e){E.instance.setPrefix(e)}setPrefix(e){this.prefix=e}static isEnabled(e){return E.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){E.instance.debug(e,...t)}debug(e,...t){this.level<=0&&this.impl.debug(...this.formatMessage(E.resolveLazy(e)),...t.map(E.resolveLazy))}static info(e,...t){E.instance.info(e,...t)}info(e,...t){this.level<=1&&this.impl.info(...this.formatMessage(E.resolveLazy(e)),...t.map(E.resolveLazy))}static warn(e,...t){E.instance.warn(e,...t)}warn(e,...t){this.level<=2&&this.impl.warn(...this.formatMessage(E.resolveLazy(e)),...t.map(E.resolveLazy))}static error(e,...t){E.instance.error(e,...t)}error(e,...t){this.level<=3&&this.impl.error(...this.formatMessage(E.resolveLazy(e)),...t.map(E.resolveLazy))}}const Vt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Ct=6,Kt=8,Wt=({dragState:i,normalizedDistance:e})=>{const t=1+e*.18,n=.16+e*.24,s=.38+e*.28,o=i.active?"80ms ease-out":"220ms ease";return H.jsxs(H.Fragment,{children:[H.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:`${o}, ${i.active?"80ms":"260ms"} box-shadow ease`}}),H.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:s,transition:i.active?"120ms opacity ease-out":"220ms opacity ease"}})]})},zt=r.memo(r.forwardRef(({onDragChange:i,className:e,maxVisualDistance:t=160,size:n=40,style:s,opacity:o=1,renderVisual:c},f)=>{const[m,x]=r.useState(Vt),I=r.useRef(null),T=r.useRef(null),D=r.useRef({x:0,y:0}),h=r.useRef(null),V=r.useRef(0),Z=r.useCallback(b=>{x(b),i(b)},[i]),W=r.useCallback((b,$,fe=!1)=>{const{x:Q,y:z}=D.current,U=b-Q,he=$-z,ve=Math.abs(he),C=ve<Ct?0:he<0?-1:1,De=V.current;let ke=C;const v=Ct+Kt;C===0?De!==0&&ve<v?ke=De:(ke=0,fe||(V.current=0)):C!==De&&De!==0&&ve<v?ke=De:V.current=C,Z({active:fe||ve>=Ct,offsetX:U,offsetY:he,distance:ve,direction:ke,pointerId:I.current})},[Z]),ee=r.useCallback(b=>{if(b===null)return;const $=h.current;$?.hasPointerCapture(b)&&$.releasePointerCapture(b)},[]),te=r.useCallback((b=!1)=>{b&&ee(I.current),I.current=null,T.current=null,V.current=0,Z(Vt)},[Z,ee]),se=r.useCallback(b=>{if(I.current!==null&&I.current!==b.pointerId){T.current={pointerId:b.pointerId,clientX:b.clientX,clientY:b.clientY},b.preventDefault(),b.stopPropagation();return}b.preventDefault(),b.stopPropagation();const $=h.current??b.currentTarget,{left:fe,top:Q,width:z,height:U}=$.getBoundingClientRect();D.current={x:fe+z/2,y:Q+U/2},I.current=b.pointerId;try{$.setPointerCapture(b.pointerId)}catch{}W(b.clientX,b.clientY,!0)},[W]),Re=r.useCallback(b=>{if(I.current!==b.pointerId){T.current!==null&&T.current.pointerId===b.pointerId&&(T.current={pointerId:b.pointerId,clientX:b.clientX,clientY:b.clientY});return}b.preventDefault(),W(b.clientX,b.clientY)},[W]),we=r.useCallback(b=>{if(I.current!==b.pointerId){T.current!==null&&T.current.pointerId===b.pointerId&&(T.current=null);return}b.preventDefault(),b.stopPropagation();const $=T.current;if(T.current=null,$!==null){ee(b.pointerId);const fe=h.current;let Q=!0;if(fe!==null&&typeof fe.setPointerCapture=="function")try{fe.setPointerCapture($.pointerId)}catch(z){(typeof z=="object"&&z!==null&&"name"in z?z.name:void 0)==="NotFoundError"&&(Q=!1)}if(Q){I.current=$.pointerId,W($.clientX,$.clientY,!0);return}}te(!0)},[te,ee,W]),F=r.useCallback(b=>{I.current===b.pointerId&&te(!1)},[te]);r.useImperativeHandle(f,()=>({reset:()=>{te(!0)},getElement:()=>h.current}),[te]);const Y=Math.min(Math.max(o,0),1),P=n/64,y=Math.min(m.distance,t)/t,j=m.direction*y*10*P,q=c??Wt,J={dragState:m,normalizedDistance:y,sizeScale:P,size:n,opacity:Y},A={...s,width:n,height:n,transform:`translateY(${j}px)`};return A.opacity=Y,H.jsx("div",{ref:h,"data-testid":"virtual-scroll-tap-circle",className:it.twMerge("aqvs-tap-scroll-circle",e),style:A,tabIndex:-1,onPointerDown:se,onPointerMove:Re,onPointerUp:we,onPointerCancel:we,onLostPointerCapture:F,role:"presentation",children:q(J)})}));zt.displayName="TapScrollCircle";const ue=(i,e,t)=>Math.max(e,Math.min(t,i)),Nt="virtualscroll:tap-scroll-cancel",At=20,Gt=250,Zt=60,Jt=20,Qt=20,er=240,Dt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},yt=2.2,tr=8,rr=120,nr=1/10,je={enabled:!0,size:40,offsetX:-80,offsetY:0,className:void 0,maxVisualDistance:er,minSpeedMultiplier:.2,opacity:.9,renderVisual:void 0,maxSpeedCurve:void 0},sr=i=>i?{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"},ir=(i,e)=>{const t=i?.maxSpeedMultiplier,n=typeof t=="number"?t:lr(e);return{enabled:i?.enabled??je.enabled,size:i?.size??je.size,offsetX:i?.offsetX??je.offsetX,offsetY:i?.offsetY??je.offsetY,className:i?.className??je.className,maxVisualDistance:i?.maxVisualDistance??je.maxVisualDistance,maxSpeedMultiplier:n,minSpeedMultiplier:Math.max(i?.minSpeedMultiplier??je.minSpeedMultiplier,0),opacity:ue(i?.opacity??je.opacity,0,1),renderVisual:i?.renderVisual??je.renderVisual,maxSpeedCurve:i?.maxSpeedCurve??je.maxSpeedCurve}},ar=({isDragging:i,isThumbHovered:e,enableThumbDrag:t})=>r.useMemo(()=>t?i?"dragging":e?"hover":"idle":"disabled",[t,i,e]),or=({canUseArrowButtons:i,enableArrowButtons:e,resetTapScroll:t,scrollByStep:n})=>{const s=r.useRef(null),o=r.useRef(null),c=r.useRef(null),f=r.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null),o.current!==null&&(window.clearTimeout(o.current),o.current=null),c.current!==null&&(window.removeEventListener("pointerup",c.current),window.removeEventListener("pointercancel",c.current),window.removeEventListener("blur",c.current),c.current=null)},[]),m=r.useCallback(()=>{f()},[f]),x=r.useCallback(T=>D=>{if(!i)return;D.cancelable&&D.preventDefault(),D.stopPropagation(),t(),f(),n(T),o.current=window.setTimeout(()=>{s.current=window.setInterval(()=>{n(T)},Zt)},Gt);const h=()=>f();c.current=h,window.addEventListener("pointerup",h),window.addEventListener("pointercancel",h),window.addEventListener("blur",h)},[i,f,t,n]),I=r.useCallback(T=>D=>{e&&(D.key==="Enter"||D.key===" "||D.key==="Spacebar")&&(D.preventDefault(),n(T))},[e,n]);return r.useEffect(()=>{i||f()},[i,f]),r.useEffect(()=>()=>{f()},[f]),{handleArrowPointerDown:x,handleArrowPointerUp:m,handleArrowKeyDown:I}},lr=i=>{if(!i||i<=0)return yt;const e=Math.max(1,i),t=Math.log10(e),n=yt+t*tr;return ue(n,yt,rr)},Yt=({contentSize:i,viewportSize:e,scrollPosition:t,onScroll:n,enableThumbDrag:s=!0,enableTrackClick:o=!0,enableArrowButtons:c=!0,horizontal:f=!1,scrollBarWidth:m=12,className:x,ariaControls:I,tapScrollCircleOptions:T,itemCount:D,renderThumbOverlay:h,visibleStartIndex:V,visibleEndIndex:Z})=>{const[W,ee]=r.useState(!1),[te,se]=r.useState(!1),[Re,we]=r.useState(!1),F=r.useRef(null),Y=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null}),P=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}),y=r.useRef(t),j=r.useRef(n),q=r.useRef(Dt),J=r.useRef(null),A=r.useRef(null),b=r.useRef(null),$=r.useRef(0),fe=r.useRef(0),Q=r.useMemo(()=>ir(T,D),[D,T]),z=r.useMemo(()=>sr(f),[f]),{enabled:U,size:he,offsetX:ve,offsetY:C,className:De,maxVisualDistance:ke,maxSpeedMultiplier:v,minSpeedMultiplier:_e,opacity:Ve,renderVisual:$e,maxSpeedCurve:S}=Q,L=r.useRef({viewportSize:e,maxScrollPosition:Math.max(i-e,0),scrollBarVisible:i>e,effectiveTapMaxDistance:Math.max(ke,1),tapCircleMaxSpeedMultiplier:v,tapCircleMinSpeedMultiplier:_e,tapCircleMaxSpeedCurve:S,tapScrollCircleOptions:T,effectiveTrackLength:0,onScroll:n,scrollPosition:t}),{mainSizeKey:k,crossSizeKey:de,positionKey:ae,selectDelta:oe,getPointerCoordinate:Se,arrowLabels:K,arrowIcons:Ee,directionClass:me,orientation:Ue}=z,Ae=Math.max(ke,1),Pe=e/i,Ce=Math.max(e-m*2,0),Be=Pe*Ce,le=Math.min(Math.max(At,Be||0),Ce||At),ge=i-e,p=Math.max(Ce-le,0),N=ge<=0||p<=0?0:ue(t/ge*p,0,p),be=N+le/2,xe=i>e||W,pe=xe&&c;r.useLayoutEffect(()=>{L.current={viewportSize:e,maxScrollPosition:ge,scrollBarVisible:xe,effectiveTapMaxDistance:Ae,tapCircleMaxSpeedMultiplier:v,tapCircleMinSpeedMultiplier:_e,tapCircleMaxSpeedCurve:S,tapScrollCircleOptions:T,effectiveTrackLength:p,onScroll:n,scrollPosition:t}}),r.useLayoutEffect(()=>{y.current=t},[t]),r.useLayoutEffect(()=>{j.current=n},[n]),r.useEffect(()=>{s||se(!1)},[s]);const rt=ar({isDragging:W,isThumbHovered:te,enableThumbDrag:s}),ye=r.useCallback((l,g)=>{const M=L.current,_=g??y.current;if(j.current){const R=j.current(l,_);if(typeof R=="number"&&Number.isFinite(R))return y.current=R,R}const a=typeof l=="function"?l(_):l,u=Math.max(M.maxScrollPosition,0),d=M.scrollBarVisible?ue(a,0,u):0;return y.current=d,d},[]),qe=r.useCallback(l=>{const g=L.current,M=y.current;if(!g.scrollBarVisible||g.maxScrollPosition<=0){const w=ye(0,M),B=w-M;return{nextPosition:w,actualDelta:B,reachedBoundary:!0}}if(l===0)return{nextPosition:M,actualDelta:0,reachedBoundary:!1};const a=ye(w=>ue(w+l,0,g.maxScrollPosition),M),u=a-M,d=l<0&&M+l<=0,R=l>0&&M+l>=g.maxScrollPosition,O=l<0&&(a<=0||d&&u===0)||l>0&&(a>=g.maxScrollPosition||R&&u===0);return{nextPosition:a,actualDelta:u,reachedBoundary:O}},[ye]),Ye=r.useCallback((l,g)=>{l.current+=g;const M=Math.max(L.current.maxScrollPosition,0);M>0&&(l.current=ue(l.current,-M,M));const _=qe(l.current);return l.current-=_.actualDelta,_.reachedBoundary&&(l.current=0),_},[qe]),Ne=r.useCallback(()=>{A.current!==null&&(window.cancelAnimationFrame(A.current),A.current=null),b.current=null,$.current=0,fe.current=0},[]),Le=r.useCallback(()=>{q.current={...Dt},we(!1),J.current?.reset(),Ne()},[Ne]),He=r.useCallback(l=>{const g=q.current,M=L.current;if(!g.active||g.direction===0){Ne();return}if(!M.scrollBarVisible||M.maxScrollPosition<=0){Ne();return}const _=b.current??l,a=Math.max((l-_)/1e3,0),u=Math.min(a,nr);if(b.current=l,u<=0){A.current=window.requestAnimationFrame(He);return}const d=Math.min(g.distance,M.effectiveTapMaxDistance)/M.effectiveTapMaxDistance,R=d**1.1,O=typeof M.tapScrollCircleOptions?.maxSpeedMultiplier=="number",w=Math.max(M.viewportSize*M.tapCircleMinSpeedMultiplier,40),B=O?w:1200;let ie=Math.max(M.viewportSize*M.tapCircleMaxSpeedMultiplier,B);const G=M.tapCircleMaxSpeedCurve;if(G){const tt=Math.max(G.exponentialSteepness,0),Xt=Math.max(G.exponentialScale??M.tapCircleMaxSpeedMultiplier,0),jt=tt===0?d:Math.expm1(tt*d),kt=tt===0?1:Math.expm1(tt)||1,$t=kt===0?d:Math.min(Math.max(jt/kt,0),1),Ut=M.viewportSize*Xt*$t;ie=Math.min(ie,Math.max(Ut,w))}const ne=Math.max(ie,w),Te=Math.max(G?.easedOffset??0,0),Ie=Math.min(1,R+Te),Me=w+(ne-w)*Ie;fe.current!==g.direction&&(fe.current=g.direction,$.current=0);const{reachedBoundary:st}=Ye($,g.direction*Me*u);if(st){Ne();return}A.current=window.requestAnimationFrame(He)},[Ye,Ne]),nt=r.useCallback(()=>{A.current===null&&(b.current=null,$.current=0,A.current=window.requestAnimationFrame(He))},[He]);r.useEffect(()=>()=>{Ne()},[Ne]);const bt=r.useCallback(l=>{q.current=l,we(l.active),l.active&&l.direction!==0?nt():Ne()},[nt,Ne]);r.useEffect(()=>{U||Le()},[Le,U]),r.useEffect(()=>{const l=g=>{const _=g.detail?.paneId;_&&I&&_!==I||Le()};return window.addEventListener(Nt,l),()=>{window.removeEventListener(Nt,l)}},[I,Le]),r.useEffect(()=>{if(!U)return;const l=g=>{if(!q.current.active||q.current.pointerId===g.pointerId)return;const M=g.target;if(!(M instanceof Node)){Le();return}J.current?.getElement()?.contains(M)||Le()};return document.addEventListener("pointerdown",l,!0),()=>{document.removeEventListener("pointerdown",l,!0)}},[Le,U]);const at=l=>{if(!xe||p<=0||ge<=0)return 0;const g=ue(l,0,p);return ue(g/p*ge,0,ge)},dt=r.useCallback(l=>{const{scrollBarVisible:g,effectiveTrackLength:M,maxScrollPosition:_}=L.current;if(E.debug("[ScrollBar] calculateScrollPositionFromThumb",()=>({thumbPos:l,trackLen:M,maxScroll:_})),M<=0||_<=0)return null;const a=ue(l,0,M);return ue(a/M*_,0,_)},[]),re=r.useCallback(l=>{const g=l.getBoundingClientRect(),M=f?g.width:g.height,_=O=>{const w=Number.parseFloat(O);return Number.isFinite(w)?w:0},a=window.getComputedStyle(l),u=_(f?a.width:a.height),d=u>0?u+_(f?a.paddingLeft:a.paddingTop)+_(f?a.paddingRight:a.paddingBottom)+_(f?a.borderLeftWidth:a.borderTopWidth)+_(f?a.borderRightWidth:a.borderBottomWidth):0,R=d>0?d:f?l.offsetWidth:l.offsetHeight;return R<=0||M<=0?1:M/R},[f]),Oe=r.useCallback(l=>{const g=Y.current;if(g.pointerId!==l.pointerId)return;const M=l.clientX-g.startClientX,_=l.clientY-g.startClientY,a=oe(M,_)/(g.scale||1);E.debug("[ScrollBar] handleThumbPointerMove",()=>({delta:a,startThumbPosition:g.startThumbPosition,clientY:l.clientY,startClientY:g.startClientY,metrics:L.current}));const u=dt(g.startThumbPosition+a);u!==null&&ye(u),l.cancelable&&l.preventDefault()},[oe,dt,ye]),Xe=r.useCallback(l=>{const g=Y.current;if(g.pointerId!==l.pointerId)return;document.removeEventListener("pointermove",Oe),document.removeEventListener("pointerup",Xe),document.removeEventListener("pointercancel",Xe);const M=g.captureTarget;if(M?.hasPointerCapture?.(l.pointerId)&&M.releasePointerCapture(l.pointerId),Y.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null},ee(!1),F.current){const _=F.current.getBoundingClientRect();l.clientX>=_.left&&l.clientX<=_.right&&l.clientY>=_.top&&l.clientY<=_.bottom||se(!1)}else se(!1)},[Oe]);r.useEffect(()=>()=>{document.removeEventListener("pointermove",Oe),document.removeEventListener("pointerup",Xe),document.removeEventListener("pointercancel",Xe)},[Oe,Xe]);const mt=r.useRef(0),Fe=r.useRef(0),xt=r.useCallback(l=>{const g=Math.max(Math.round(L.current.viewportSize/Qt),Jt);Fe.current!==l&&(Fe.current=l,mt.current=0),Ye(mt,l*g)},[Ye]),{handleArrowPointerDown:It,handleArrowPointerUp:pt,handleArrowKeyDown:Ke}=or({canUseArrowButtons:pe,enableArrowButtons:c,resetTapScroll:Le,scrollByStep:xt}),Qe=l=>{if(!xe)return;if(!s){l.preventDefault(),l.stopPropagation();return}if(l.pointerType==="mouse"&&l.button!==0||l.ctrlKey)return;Le();const g=l.currentTarget,M=re(g);let _=null;if(g.setPointerCapture)try{g.setPointerCapture(l.pointerId),_=g}catch{_=null}Y.current={pointerId:l.pointerId,startThumbPosition:N,startClientX:l.clientX,startClientY:l.clientY,scale:M,captureTarget:_},document.addEventListener("pointermove",Oe),document.addEventListener("pointerup",Xe),document.addEventListener("pointercancel",Xe),ee(!0),se(!0),l.preventDefault(),l.stopPropagation()},We=l=>{if(!xe)return;if(!o){l.preventDefault(),l.stopPropagation();return}if(l.pointerType==="mouse"&&l.button!==0||l.ctrlKey)return;const g=l.currentTarget,M=g.getBoundingClientRect(),_=Se(l),a=re(g),u=(_-(f?M.left:M.top))/a;Le();const d=u-le/2,R=at(d);if(ye(R),g.setPointerCapture)try{g.setPointerCapture(l.pointerId)}catch{}P.current={pointerId:l.pointerId,startThumbPosition:d,startClientX:l.clientX,startClientY:l.clientY,scale:a},l.preventDefault(),l.stopPropagation()},ze=()=>{P.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}},et=l=>{const g=P.current;if(g.pointerId!==l.pointerId)return;if(l.pointerType==="mouse"&&l.buttons===0){ze();return}const M=l.clientX-g.startClientX,_=l.clientY-g.startClientY,a=oe(M,_)/(g.scale||1),u=at(g.startThumbPosition+a);ye(u),l.cancelable&&l.preventDefault()},ot=l=>{if(P.current.pointerId!==l.pointerId)return;const g=l.currentTarget;g.hasPointerCapture?.(l.pointerId)&&g.releasePointerCapture(l.pointerId),ze(),l.preventDefault(),l.stopPropagation()},Ge=l=>{if(P.current.pointerId!==l.pointerId)return;const g=l.currentTarget;g.hasPointerCapture?.(l.pointerId)&&g.releasePointerCapture(l.pointerId),ze()},vt=l=>{P.current.pointerId===l.pointerId&&ze()},St=r.useMemo(()=>ue((Re?1:.8)*Ve,0,1),[Re,Ve]),Pt=r.useMemo(()=>{const g=`calc(50% - ${he/2}px + ${C}px)`;return{left:ve,top:g}},[ve,C,he]),lt=(l,g,M,_)=>H.jsx("button",{type:"button",tabIndex:0,className:"aqvs-scrollbar-arrow-button",style:{[k]:m,[de]:m},"aria-label":g,onPointerDown:It(l),onPointerUp:pt,onPointerLeave:pt,onPointerCancel:pt,onKeyDown:Ke(l),"aria-disabled":!c,disabled:!pe,children:H.jsx("span",{"aria-hidden":"true",children:M})},_),ct=h&&xe?{orientation:Ue,scrollPosition:t,maxScrollPosition:ge,contentSize:i,viewportSize:e,thumbSize:le,thumbPosition:N,thumbCenter:be,trackSize:Ce,isDragging:W,isTapScrollActive:Re,visibleStartIndex:V,visibleEndIndex:Z}:null;return H.jsxs("div",{className:it.twMerge("aqvs-scrollbar",me,!xe&&"pointer-events-none opacity-0",x),style:{[k]:e,[de]:m},role:"scrollbar",tabIndex:-1,"aria-controls":I,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":ge,"aria-orientation":f?"horizontal":"vertical",children:[!f&&xe&&U&&H.jsx(zt,{ref:J,className:it.twMerge("aqvs-scrollbar-tap-circle-wrapper",De),size:he,maxVisualDistance:Ae,style:Pt,opacity:St,renderVisual:$e,onDragChange:bt},"tap-circle"),lt(-1,K[0],Ee[0],"arrow-start"),H.jsxs("div",{className:"aqvs-scrollbar-track",style:{borderRadius:m/2},onPointerDown:We,onPointerMove:et,onPointerUp:ot,onPointerCancel:Ge,onLostPointerCapture:vt,"aria-disabled":!o,children:[ct&&H.jsx("div",{className:"aqvs-scrollbar-overlay","aria-hidden":!0,children:h?.(ct)},"overlay"),H.jsx("div",{className:it.twMerge("aqvs-scrollbar-thumb-wrapper",!(xe||W)&&"pointer-events-none opacity-0"),style:{[k]:le,[ae]:N,...f?{top:0,bottom:0}:{left:0,right:0}},onPointerDown:Qe,role:"slider","aria-orientation":f?"horizontal":"vertical","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":ge,"aria-disabled":!s,tabIndex:-1,children:H.jsx("div",{ref:F,className:it.twMerge("aqvs-scrollbar-thumb",f?"aqvs-scrollbar-thumb-horizontal":"aqvs-scrollbar-thumb-vertical"),"data-thumb-state":rt,style:{borderRadius:m-1,cursor:s?"pointer":"default"},onMouseEnter:()=>{s&&se(!0)},onMouseLeave:()=>{s&&se(!1)}},"thumb")},"thumb-wrapper")]},"track"),lt(1,K[1],Ee[1],"arrow-end")]})},ht={maxVelocity:6,minVelocity:.02,deceleration:.0025,velocitySampleWindow:90,startVelocityThreshold:.04},Tt=(i,e,t)=>{for(const[n,s,o]of e)t==="add"?i.addEventListener(n,s,o):i.removeEventListener(n,s,o)},Bt=r.forwardRef(({children:i,contentSize:e,viewportSize:t,scrollBarWidth:n=12,enableThumbDrag:s=!0,enableTrackClick:o=!0,enableArrowButtons:c=!0,enablePointerDrag:f=!0,onScroll:m,className:x,testId:I,style:T,background:D,tapScrollCircleOptions:h,inertiaOptions:V,itemCount:Z,renderThumbOverlay:W,wheelSpeedMultiplier:ee=1,onWheelHorizontal:te,contentInsets:se,visibleStartIndex:Re,visibleEndIndex:we,renderOverlay:F,initialScrollPosition:Y=0},P)=>{const y=r.useRef(Number.isFinite(Y)?Math.max(0,Y):0),j=r.useRef(null),q=r.useRef(null),J=r.useRef(te);r.useEffect(()=>{J.current=te},[te]);const A=r.useRef({frame:null,velocity:0,lastTimestamp:null,generation:0}),b=r.useMemo(()=>({maxVelocity:V?.maxVelocity??ht.maxVelocity,minVelocity:V?.minVelocity??ht.minVelocity,deceleration:V?.deceleration??ht.deceleration,velocitySampleWindow:V?.velocitySampleWindow??ht.velocitySampleWindow,startVelocityThreshold:V?.startVelocityThreshold??ht.startVelocityThreshold}),[V]),$=r.useMemo(()=>({top:Math.max(0,se?.top??0),bottom:Math.max(0,se?.bottom??0)}),[se]);E.debug("[ScrollPane] ScrollPane rendered",()=>({contentSize:e,viewportSize:t,scrollBarWidth:n,className:x,style:T,tapScrollCircleOptions:h,inertiaOptions:V,enablePointerDrag:f,contentInsets:$}));const fe=r.useRef({contentSize:e,viewportSize:t});fe.current={contentSize:e,viewportSize:t};const Q=r.useMemo(()=>e>t,[e,t]),z=r.useCallback(S=>{const{contentSize:L,viewportSize:k}=fe.current,de=L>k,ae=y.current;if(E.debug("[ScrollPane] scrollTo called",()=>({newPosition:S,contentSize:L,viewportSize:k,currentIsScrollable:de,prevPosition:ae})),!de)return y.current!==0&&(y.current=0,m?.(0,ae)),y.current;const oe=typeof S=="function"?S(y.current):S;if(!Number.isFinite(oe))return E.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position",{nextPosition:oe}),y.current;const Se=Math.max(L-k,0),K=ue(oe,0,Se);return y.current!==K&&(y.current=K,m?.(K,ae)),y.current},[m]),U=r.useCallback(()=>{const S=A.current;S.generation+=1,S.frame!==null&&cancelAnimationFrame(S.frame),S.frame=null,S.velocity=0,S.lastTimestamp=null},[]),he=r.useRef(U);r.useEffect(()=>{he.current=U},[U]),r.useEffect(()=>()=>{he.current()},[]);const ve=r.useCallback(S=>{if(!Q)return;const{maxVelocity:L,minVelocity:k,deceleration:de,startVelocityThreshold:ae}=b,oe=ue(S,-L,L);if(Math.abs(oe)<ae)return;U(),A.current.velocity=oe,A.current.lastTimestamp=null;const Se=A.current.generation,K=Ee=>{const me=A.current;if(me.generation!==Se)return;if(me.lastTimestamp===null){me.lastTimestamp=Ee,me.frame=requestAnimationFrame(K);return}const Ue=Ee-me.lastTimestamp;if(me.lastTimestamp=Ee,Ue<=0){me.frame=requestAnimationFrame(K);return}const Ae=me.velocity;let Pe=Ae;const Ce=de*Ue;Ae>0?Pe=Math.max(0,Ae-Ce):Ae<0&&(Pe=Math.min(0,Ae+Ce));const le=(Ae+Pe)/2*Ue,ge=y.current;if(le!==0&&z(rt=>rt+le),A.current.generation!==Se)return;const p=y.current,{contentSize:N,viewportSize:be}=fe.current,xe=Math.max(N-be,0);me.velocity=Pe;const pe=p===ge||p<=0&&Pe<=0||p>=xe&&Pe>=0;if(Math.abs(Pe)<k||pe){U();return}me.frame=requestAnimationFrame(K)};A.current.frame=requestAnimationFrame(K)},[Q,b,z,U]),C=r.useRef(ve);r.useEffect(()=>{C.current=ve},[ve]),r.useLayoutEffect(()=>{fe.current={contentSize:e,viewportSize:t}},[e,t]),r.useLayoutEffect(()=>{const S=q.current;if(!S)return;const L=()=>{S.scrollTop!==0&&(E.debug("[ScrollPane] Native scroll detected, resetting to 0",()=>({scrollTop:S.scrollTop})),S.scrollTop=0),S.scrollLeft!==0&&(S.scrollLeft=0)};return S.addEventListener("scroll",L),()=>S.removeEventListener("scroll",L)},[]),r.useLayoutEffect(()=>{if(Q){E.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change",()=>({contentSize:e,viewportSize:t,scrollPosition:y.current}));const S=ue(e-t,0,e);y.current>S&&z(S)}else z(0)},[Q,z,e,t]),r.useEffect(()=>{const S=k=>{if(J.current&&!k.ctrlKey){const ae=k.shiftKey&&k.deltaX===0,oe=ae?k.deltaY:k.deltaX,Se=ae?0:k.deltaY;if(oe!==0&&Math.abs(oe)>=Math.abs(Se)){k.preventDefault(),U();let K=oe;k.deltaMode===1?K*=16:k.deltaMode===2&&(K*=t),J.current(K);return}}if(!Q||k.ctrlKey||k.deltaY===0)return;k.preventDefault(),U();let de=k.deltaY;k.deltaMode===1?de*=16:k.deltaMode===2&&(de*=t),ee!==1&&(de*=ee),E.debug("[ScrollPane] wheel event",()=>({deltaY:de,scrollPosition:y.current,wheelSpeedMultiplier:ee,deltaMode:k.deltaMode,scrollTop:q.current?.scrollTop})),z(ae=>ae+de)},L=j.current;return L&&L.addEventListener("wheel",S,{passive:!1}),()=>{L&&L.removeEventListener("wheel",S)}},[Q,z,U,t,ee]),r.useImperativeHandle(P,()=>({scrollTo:S=>(U(),z(S)),getScrollPosition:()=>y.current,getContentSize:()=>e,getViewportSize:()=>t}),[z,e,t,U]);const De=r.useRef(z);r.useEffect(()=>{De.current=z},[z]);const ke=r.useId(),v=r.useRef({pointerId:null,startClientY:0,startScroll:0,isDragging:!1,shouldCancelNextClick:!1,clickResetTimer:null,velocitySamples:[]}),_e=r.useRef(f);r.useEffect(()=>{_e.current=f},[f]);const Ve=r.useRef(Q);r.useEffect(()=>{Ve.current=Q},[Q]);const $e=r.useRef(b);return r.useEffect(()=>{$e.current=b},[b]),r.useEffect(()=>{if(f)return;const S=q.current,L=v.current;L.pointerId!==null&&S?.hasPointerCapture(L.pointerId)&&S.releasePointerCapture(L.pointerId),L.clickResetTimer!==null&&(window.clearTimeout(L.clickResetTimer),L.clickResetTimer=null),L.pointerId=null,L.startClientY=0,L.startScroll=0,L.isDragging=!1,L.shouldCancelNextClick=!1,L.velocitySamples=[]},[f]),r.useEffect(()=>{const S=q.current;if(!S)return;const L=6,k=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),de=()=>{const p=v.current;p.pointerId=null,p.startClientY=0,p.startScroll=0,p.isDragging=!1,p.velocitySamples=[]},ae=()=>{const p=v.current;p.clickResetTimer!==null&&(window.clearTimeout(p.clickResetTimer),p.clickResetTimer=null)},oe=p=>{const N=v.current,be=k();N.velocitySamples.push({clientY:p,time:be});const xe=$e.current.velocitySampleWindow;N.velocitySamples=N.velocitySamples.filter(pe=>be-pe.time<=xe)},Se=p=>p instanceof HTMLElement&&p.closest("[data-scrollpane-ignore-drag='true']")!==null,K=p=>{const N=v.current;N.shouldCancelNextClick&&(p.preventDefault(),p.stopPropagation(),N.shouldCancelNextClick=!1)},Ee=p=>{const N=v.current;if(!N.isDragging){if(N.isDragging=!0,N.shouldCancelNextClick=!0,!S.hasPointerCapture(p.pointerId))try{S.setPointerCapture(p.pointerId)}catch{}oe(p.clientY)}},me=p=>{const N=v.current;S.hasPointerCapture(p)&&S.releasePointerCapture(p),N.shouldCancelNextClick=!1,ae(),de()},Ue=p=>{const N=v.current;if(N.pointerId!==p.pointerId)return;if(p.buttons===0){me(p.pointerId);return}if(!(_e.current&&Ve.current)||!N.isDragging&&(Math.abs(p.clientY-N.startClientY)<L||(Ee(p),!N.isDragging)))return;oe(p.clientY);const be=p.clientY-N.startClientY,xe=N.startScroll-be;De.current(xe),p.cancelable&&p.preventDefault()},Ae=p=>{const N=v.current;if(N.pointerId!==p.pointerId)return;N.isDragging&&N.shouldCancelNextClick&&p.cancelable&&(p.preventDefault(),p.stopPropagation()),N.isDragging&&oe(p.clientY);let be=0;if(N.isDragging&&N.velocitySamples.length>=2){const pe=N.velocitySamples,rt=$e.current.velocitySampleWindow,ye=pe[pe.length-1],qe=pe.find(Ye=>ye.time-Ye.time<=rt)??pe[0];if(ye&&qe&&ye.time!==qe.time){const Ye=ye.clientY-qe.clientY,Ne=ye.time-qe.time;be=-(Ye/Ne)}}ae(),N.shouldCancelNextClick&&(N.clickResetTimer=window.setTimeout(()=>{const pe=v.current;pe.shouldCancelNextClick=!1,pe.clickResetTimer=null},0));const xe=$e.current.startVelocityThreshold;de(),S.hasPointerCapture(p.pointerId)&&S.releasePointerCapture(p.pointerId),Math.abs(be)>=xe&&C.current?.(be)},Pe=p=>{if(v.current.pointerId!==null||!(_e.current&&Ve.current)||p.button!==0&&p.pointerType==="mouse"||p.ctrlKey||p.metaKey||p.altKey||Se(p.target))return;window.dispatchEvent(new CustomEvent(Nt,{detail:{paneId:ke}})),he.current?.();const N=v.current;ae(),N.pointerId=p.pointerId,N.startClientY=p.clientY,N.startScroll=y.current,N.isDragging=!1,N.shouldCancelNextClick=!1,N.velocitySamples=[]},Ce=p=>{v.current.pointerId===p.pointerId&&me(p.pointerId)},le=[["click",K,!0],["pointerdown",Pe,{passive:!1}],["lostpointercapture",p=>{v.current.pointerId===p.pointerId&&me(p.pointerId)},void 0]],ge=[["pointermove",Ue,{passive:!1}],["pointerup",Ae,void 0],["pointercancel",Ce,void 0]];return Tt(S,le,"add"),Tt(window,ge,"add"),()=>{Tt(S,le,"remove"),Tt(window,ge,"remove");const p=v.current;p.pointerId!==null&&S.hasPointerCapture(p.pointerId)&&S.releasePointerCapture(p.pointerId),ae(),de()}},[ke]),H.jsxs("div",{ref:j,"data-testid":I,className:it.twMerge("aqvs-scroll-pane",x),style:T,children:[H.jsxs("div",{ref:q,className:it.twMerge("aqvs-scroll-pane-content"),style:{height:t,paddingTop:$.top,paddingBottom:$.bottom,...f&&Q?{touchAction:"none"}:{}},id:ke,children:[D,i(y.current)]}),H.jsx(Yt,{contentSize:e,viewportSize:t,scrollPosition:y.current,onScroll:z,enableThumbDrag:s,enableTrackClick:o,enableArrowButtons:c,scrollBarWidth:n,ariaControls:ke,tapScrollCircleOptions:h,itemCount:Z,renderThumbOverlay:W,visibleStartIndex:Re,visibleEndIndex:we},"scrollbar"),F?.()]})}),Lt=(i,e,t)=>Math.min(Math.max(i,e),t),cr=({dragState:i,normalizedDistance:e,sizeScale:t,size:n})=>{const s=Math.max(n/2,1),o=1+e*.65,c=Math.max(.65,1-e*.25),f=i.direction*e*26*t,m=.8+e*.18,x=3*t,I=6*t,T=22*t,D=Math.abs(f)+I,h=f>0?x:-Math.abs(f)-x,V=Math.max(2.5,3*t),Z=Lt(i.offsetX,-s,s),W=Lt(i.offsetY,-s,s),ee=s*.35,te=Z/s*ee,se=W/s*ee,Re=te*.45,we=se*.45,F=Math.max(T*.38,6),Y=.65+e*.2,P=i.active;return H.jsxs(H.Fragment,{children:[H.jsx("div",{className:"aqvs-tap-scroll-circle-gradient",style:{transform:`scale(${c}, ${o})`,transition:P?"40ms transform ease-out":"200ms ease transform"}}),H.jsx("div",{className:"aqvs-sample-visual-rod",style:{width:T,height:T,transform:`translate(calc(-50% + ${te}px), calc(-50% + ${se}px)) scale(${c}, ${m*o})`,transition:P?"70ms transform ease-out":"200ms ease transform"}}),H.jsx("div",{className:"aqvs-sample-visual-pupil",style:{width:F,height:F,transform:`translate(calc(-50% + ${Re}px), calc(-50% + ${we}px)) scale(${c}, ${o})`,opacity:Y,boxShadow:"0 0 8px rgba(255,255,255,0.45)",transition:P?"120ms opacity 150ms, 120ms transform ease-out ease-out":"220ms ease transform, 240ms opacity ease"}}),H.jsx("div",{className:"aqvs-sample-visual-highlight",style:{width:V,height:D,transform:`translate(-50%, ${h}px)`,opacity:e,transition:P?"40ms height, 60ms opacity ease-out ease-out":"200ms ease height, 120ms ease opacity"}})]})},Mt=100,ur=i=>{if(!Number.isFinite(i))return 0n;const e=Math.trunc(i);return e<=0?0n:BigInt(e)},wt=(i,e)=>{if(!Number.isFinite(i))throw new Error(`valueFn returned a non-finite value at index ${e}: ${i}`);return i},ut=i=>{if(i<=0||!Number.isFinite(i))return 0;const e=Math.trunc(i);if(e<=2147483647)return e&-e;const t=BigInt(e)&-BigInt(e);return Number(t)};class Je{tree;deltas;size;baseValue;valueFn;total;constructor(e,t,n){this.reset(e,t,n)}reset(e,t,n){const s=Number.isFinite(e)&&e>0?Math.trunc(e):0;if(typeof t!="function"){this.size=s,this.tree=new Map,this.deltas=new Map,this.valueFn=void 0,this.baseValue=t,this.total=this.baseValue*this.size;return}let o=0,c;if(s>0){const f=n?.sampleRange??{from:0,to:Math.min(Mt-1,s-1)};let m=Math.max(0,Math.trunc(f.from)),x=Math.min(Math.trunc(f.to),s-1);if(m>x&&(m=0,x=Math.min(Mt-1,s-1)),s>Mt)o=Je._sampleBaseValueStrided(t,s,Mt),n?.materialize&&(c={from:m,values:Je._collectValidatedValues(t,m,x)});else{const I=Je._collectValidatedValues(t,m,x);o=Je._modeOrMedian([...I]),n?.materialize&&(c={from:m,values:I})}}if(this.size=s,this.tree=new Map,this.deltas=new Map,this.total=void 0,this.valueFn=t,this.baseValue=o,c)for(let f=0;f<c.values.length;f++){const m=c.from+f;if(m>=this.size)break;const x=c.values[f]-this.baseValue;x!==0&&(this.deltas.set(m,x),this._updateTree(m,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 s=[];for(let o=t;o<=n;o++)s.push(wt(e(o),o));return s}static _modeOrMedian(e){if(e.length===0)return 0;e.sort((c,f)=>c-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 s=new Map;let o=0;for(const c of e){const f=(s.get(c)??0)+1;s.set(c,f),f>o&&(o=f)}if(o>e.length*.2){const c=[];for(const[m,x]of s.entries())x===o&&c.push(m);const f=c.reduce((m,x)=>m+x,0);n=Math.floor(f/c.length)}return n}static _sampleBaseValueStrided(e,t,n){if(t<=0)return 0;let s=Math.max(1,Math.ceil(t/n));s%2===0&&(s+=1);const o=[];for(let c=0;c<t&&o.length<n;c+=s)o.push(wt(e(c),c));return Je._modeOrMedian(o)}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:s}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(s))throw new Error(`Change must be a finite number: ${s}`);const c=(t.get(n)??this.deltas.get(n)??0)+s;if(c+this.baseValue<-1e-9)throw new Error(`Change would make the value at index ${n} negative: ${c+this.baseValue}`);t.set(n,c)}for(const{index:n,change:s}of e){const c=(this.deltas.get(n)??0)+s;c===0?this.deltas.delete(n):this.deltas.set(n,c),this._updateTree(n,s)}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 s=ut(n);if(s===0)break;n+=s}this.total!==void 0&&(this.total+=t)}_buildDeltaUpdates(e){const t=[],n=new Map;for(const{index:s,value:o}of e){if(s<0||s>=this.size)throw new Error(`Index ${s} out of bounds`);if(!Number.isInteger(s))throw new Error(`Index must be an integer: ${s}`);if(!Number.isFinite(o))throw new Error(`Value must be a finite number: ${o}`);if(o<0)throw new Error("Value cannot be negative.");const c=n.has(s)?n.get(s)??0:this.deltas.get(s)??0,f=c+this.baseValue,m=o-f;m!==0&&t.push({index:s,change:m}),n.set(s,c+m)}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=ut(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,o=wt(this.valueFn(e),e)-this.baseValue;if(o!==n&&(o===0?this.deltas.delete(e):this.deltas.set(e,o),t)){const c=o-n;this._updateTree(e,c)}}}_materializeRanges(e,t,n=!1){if(!(e?.materialize&&this.valueFn))return;const s=e.ranges;if(s&&s.length>0){for(const f of s){const m=Math.max(0,Math.trunc(f.from)),x=Math.min(Math.trunc(f.to),this.size-1);for(let I=m;I<=x;I++)this._materialize(I)}if(t===void 0)return;if(n){this._materialize(t);return}const o=s[0].from,c=s[s.length-1].to;t>=o&&t<=c&&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 s=t.materializeOption?.materialize===!0;let o;for(;;){if(o=this._descend(e,n),o<0||o>=this.size)return{index:-1,total:this.total??this.getTotal(),cumulative:void 0,currentValue:void 0,safeIndex:void 0};if(!s)break;const f=this.deltas.get(o)??0;if(this._materialize(o),(this.deltas.get(o)??0)===f)break}const c=this.prefixSum(o);return{index:o,total:this.total??c.total,cumulative:c.cumulative,currentValue:c.currentValue,safeIndex:c.safeIndex}}_descend(e,t){let n=0,s=0,o=1;for(;o<<1<=this.size;)o<<=1;for(;o>0;o>>=1){const c=n+o;if(c<=this.size){const m=(this.tree.get(c)??0)+this.baseValue*o;(t?s+m<e:s+m<=e)&&(n=c,s+=m)}}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 s=ur(this.size);if(s===0n)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const o=t.materializeOption?.materialize===!0;for(;;){let c=0n,f=s-1n,m,x,I=this.total;for(;c<=f;){const h=c+f>>1n,V=Number(h),Z=this.prefixSum(V);if(I=Z.total,n?Z.cumulative>=e:Z.cumulative<=e)if(m=h,x=Z,n){if(h===0n)break;f=h-1n}else c=h+1n;else if(n)c=h+1n;else{if(h===0n)break;f=h-1n}}const T=x,D=m!==void 0?Number(m):-1;if(o&&D>=0){const h=this.deltas.get(D)??0;if(this._materialize(D),(this.deltas.get(D)??0)!==h)continue}return{index:D,total:I,cumulative:T?.cumulative,currentValue:T?.currentValue,safeIndex:T?.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=ue(Math.trunc(e),0,this.size-1),s=t?.materializeOption;this._materializeRanges(s,n,!0);let o=0,c=n+1;for(;c>0;){const m=this.tree.get(c)??0;o+=m;const x=ut(c);if(x===0)break;c-=x}const f=s?.materialize?this.get(n):(this.deltas.get(n)||0)+this.baseValue;return{cumulative:o+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&&E.error("Inconsistent Fenwick Tree state")}return this.total}rebuildTree(e){if(e?.materialize&&this.valueFn){const n=this.valueFn;this.reset(this.size,s=>n(s),{materialize:!0});return}const t=new Map;for(const[n,s]of this.deltas.entries()){if(s===0)continue;let o=n+1;for(;o<=this.size;){t.set(o,(t.get(o)??0)+s);const c=ut(o);if(c===0)break;o+=c}}this.tree=t,this.total=this._computeTreeTotal()}calculateAccumulatedError(){if(this.total===void 0)return 0;let e=this.baseValue*this.size;for(const t of this.deltas.values())e+=t;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)this._growSize(n,t);else{for(const o of this.deltas.keys())o>=t&&this.deltas.delete(o);this.size=t,this.rebuildTree()}const s=this.prefixSum(this.getSize()-1);s.cumulative!==s.total&&E.error("Inconsistent Fenwick Tree state")}static _minCoveredLowBound(e,t){let n=1;for(;;){const s=n*2;if(Math.floor(t/s)*s<=e)break;n=s}return n*Math.floor(e/n)}_propagateDeltaToGrownNodes(e,t,n,s){let o=e+1;for(;o<=n;){const c=ut(o);if(c===0)break;o+=c}for(;o<=s;){this.tree.set(o,(this.tree.get(o)??0)+t);const c=ut(o);if(c===0)break;o+=c}}_growSize(e,t){if(this.size=t,this.deltas.size>0){const n=Je._minCoveredLowBound(e,t);if(e-n<this.deltas.size)for(let o=n;o<e;o++){const c=this.deltas.get(o);c===void 0||c===0||this._propagateDeltaToGrownNodes(o,c,e,t)}else for(const[o,c]of this.deltas.entries())c===0||o<n||this._propagateDeltaToGrownNodes(o,c,e,t)}this.total=this._computeTreeTotal()}getSize(){return this.size}findIndexAtOrAfter(e,t){return this._findIndex(e,t??{},!0)}findIndexAtOrBefore(e,t){return this._findIndex(e,t??{},!1)}}const fr=(i,e)=>{const t=i?.sampleRange,n=e?.sampleRange;return t===n?!1:t&&n?t.from!==n.from||t.to!==n.to:!0},qt=(i,e,t)=>{const n=Number.isFinite(i)&&i>0?Math.trunc(i):0,s=r.useRef(null),o=r.useRef({size:n,valueOrFn:e,options:t});s.current===null&&(s.current=new Je(n,e,t));const c=s.current,f=o.current,m=f.size!==n,x=f.valueOrFn!==e,I=fr(f.options,t),T=f.size===0&&n>0;if(x||I){const D=t?.resetOnValueFnChange??!0;I||x&&D||T?(t?.debug&&E.debug("[useFenwickMapTree] reset",{valueOrFnChanged:x,optionsChanged:I}),c.reset(n,e,t)):(m&&(t?.debug&&E.debug("[useFenwickMapTree] resize (with valueFn change)",{from:f.size,to:n}),c.changeSize(n)),t?.debug&&E.debug("[useFenwickMapTree] setValueFn (no reset)",{valueOrFnChanged:x}),c.setValueFn(e,{reset:!1})),o.current={size:n,valueOrFn:e,options:t}}else m&&(t?.debug&&E.debug("[useFenwickMapTree] resize",{from:f.size,to:n}),T?c.reset(n,e,t):c.changeSize(n),o.current={size:n,valueOrFn:e,options:t});return c};class dr{key;value;prev=null;next=null;constructor(e,t){this.key=e,this.value=t}}class Et{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 Ht(i){const e=r.useRef(new Map),t=r.useRef(new Et),n=Math.floor(i),s=r.useRef(n);r.useEffect(()=>{if(s.current=n,Number.isNaN(n)||n<0){E.warn(`useLruCache: invalid capacity ${i}; the cache will not store any entries.`),e.current.clear(),t.current=new Et;return}if(Number.isFinite(n))for(;e.current.size>n;){const I=t.current.removeHead();if(I)e.current.delete(I.key);else break}},[i,n]);const o=r.useCallback(I=>{const T=e.current.get(I);if(T)return t.current.moveToTail(T),T.value},[]),c=r.useCallback((I,T)=>{const D=s.current;if(Number.isNaN(D)||D<=0)return;let h=e.current.get(I);if(h)h.value=T,t.current.moveToTail(h);else{if(e.current.size>=D){const V=t.current.removeHead();V&&e.current.delete(V.key)}h=new dr(I,T),e.current.set(I,h),t.current.addToTail(h)}},[]),f=r.useCallback(I=>e.current.has(I),[]),m=r.useCallback(I=>{const T=e.current.get(I);T&&(t.current.remove(T),e.current.delete(I))},[]),x=r.useCallback(()=>{e.current.clear(),t.current=new Et},[]);return r.useMemo(()=>({get:o,set:c,has:f,remove:m,clear:x}),[o,c,f,m,x])}const mr=1e4,pr=()=>{const{get:i,set:e,has:t,clear:n}=Ht(mr);return r.useMemo(()=>({get:i,set:e,has:t,clear:n}),[i,e,t,n])},ce=(i,e)=>e<=0?0:ue(i,0,e-1),_t=i=>({top:Math.max(0,i?.top??0),bottom:Math.max(0,i?.bottom??0)}),Ze=(i,e)=>i<=e?0:i-e,ft=(i,e)=>i<=0?e:i+e,Rt=1e3,Ot=2e3,hr=1048576,gt=i=>{if(!Number.isFinite(i))return 0n;const e=Math.trunc(i);return e<=0?0n:BigInt(e)},gr=(i,e,t,n,s,o,c,f)=>{const m=gt(n);if(m===0n)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const x=F=>F<0n?0n:F>=m?m-1n:F,I={materializeOption:{materialize:!1}},{index:T,cumulative:D}=o.findIndexAtOrAfter(i,I);let h;T===-1?h=m-1n:(D===i?h=gt(T+1):h=gt(T),h>=m&&(h=m-1n)),i<=0&&(h=0n),f&&i>=c&&(h=m-1n);const V=F=>{const Y=Number(F);if(!Number.isSafeInteger(Y))return null;const{cumulative:P}=o.prefixSum(Y,{materializeOption:{materialize:!1}});if(!Number.isFinite(P))return null;const{index:y}=o.findIndexAtOrAfter(P+.5,{materializeOption:{materialize:!1}});if(y===-1)return null;const j=gt(y);return j>F?j:null},Z=F=>{let Y=0,P=F,y=F,j=0n,q=0;for(;P<m&&Y<e;){const J=Number(P),A=s(J);if(Y+=A,y=P,P+=1n,j+=1n,!Number.isFinite(A)||A<0)break;if(A===0){if(q+=1,q>Rt){const b=V(y);if(b!==null&&b>P)P=b,q=0;else if(b!==null&&b===P&&s(Number(P))>0)q=0;else break}}else q=0}return j===0n&&(y=F),{height:Y,end:y}};let{height:W,end:ee}=Z(h);if(W<e&&h>0n){let F=h,Y=W,P=0;for(;F>0n&&Y<e;){F-=1n;const j=Number(F),q=s(j);if(Y+=q,!Number.isFinite(q)||q<0)break;if(q===0){if(P+=1,P>Rt){const J=Number(F);if(!Number.isSafeInteger(J))break;const{cumulative:A}=o.prefixSum(J,{materializeOption:{materialize:!1}});if(!Number.isFinite(A))break;const{index:b}=o.findIndexAtOrAfter(A-.5,{materializeOption:{materialize:!1}}),$=b===-1?-1n:gt(b);if($>=0n&&$<F)F=$+1n,P=0;else if($===F&&F>=1n&&s(Number(F-1n))>0)P=0;else break}}else P=0}h=x(F);const y=Z(h);W=y.height,ee=y.end}const te=x(h),se=x(ee),Re=x(te-BigInt(Math.max(0,t))),we=x(se+BigInt(Math.max(0,t)));return{renderingStartIndex:ce(Number(Re),n),renderingEndIndex:ce(Number(we),n),visibleStartIndex:ce(Number(te),n),visibleEndIndex:ce(Number(se),n)}},br=(i,e,t,n,s,o,c)=>{if(n===0)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const f=Number.isFinite(c),m=f?Math.min(Math.max(0,i),c):Math.max(0,i);if(n>=Number.MAX_SAFE_INTEGER)return gr(m,e,t,n,s,o,c,f);const{index:x,cumulative:I,currentValue:T}=o.findIndexAtOrAfter(m,{materializeOption:{materialize:!1}}),D=x===-1?e<=0||(I??0)<m+(T??0)?n-1:0:x;let h=ce(D,n),V=0;if(x!==-1&&I===m)h=ce(x+1,n),V=0;else if(h===x&&I!==void 0&&T!==void 0)V=I-T-m;else{const{cumulative:F,currentValue:Y}=o.prefixSum(h,{materializeOption:{materialize:!1}});V=(F??0)-(Y??0)-m}const Z=V,W=(F,Y)=>{let P=F,y=Y,j=0;for(;P<n&&y<e;){const q=s(P);if(y+=q,P++,!Number.isFinite(q)||q<0)break;if(q===0){if(j++,j>Rt){const{cumulative:J}=o.prefixSum(P-1,{materializeOption:{materialize:!1}}),{index:A}=Number.isFinite(J)?o.findIndexAtOrAfter(J+.5,{materializeOption:{materialize:!1}}):{index:-1};if(A>P)P=A,j=0;else if(A===P&&s(P)>0)j=0;else break}}else j=0}return{cursor:P,height:y}},ee=W(h,V);let te=ee.cursor;if(V=ee.height,V<e&&h>0){let F=V+Math.abs(Math.min(0,Z)),Y=h-1,P=0;for(;Y>=0&&F<e;){const j=s(Y);if(F+=j,!Number.isFinite(j)||j<0){Y--;break}if(j===0){if(P++,P>Rt){const{cumulative:q}=o.prefixSum(Y,{materializeOption:{materialize:!1}}),{index:J}=Number.isFinite(q)?o.findIndexAtOrAfter(q-.5,{materializeOption:{materialize:!1}}):{index:-1};if(J!==-1&&J<Y){Y=J,P=0;continue}if(J===Y&&Y>=1&&s(Y-1)>0)P=0;else{Y--;break}}}else P=0;Y--}h=ce(Y+1,n);const y=W(h,0);te=y.cursor,V=y.height}const se=ce(h-t,n),Re=ce(Math.max(te-1,h),n),we=ce(Re+t,n);return{renderingStartIndex:se,renderingEndIndex:we,visibleStartIndex:h,visibleEndIndex:Re}},Ft=(i,e,t)=>{const n=Math.max(0,e??0),s=r.useRef({last:0,id:null,arg:null}).current;return r.useEffect(()=>()=>{s.id!==null&&(cancelAnimationFrame(s.id),s.id=null)},[s]),r.useCallback(o=>{if(s.arg=o,s.id!==null)return;const c=f=>{if(s.id=null,s.arg===null)return;const m=f-s.last;if(n===0||s.last===0||m>=n){if(i.current)try{t(i.current,s.arg)}catch(x){console.error("[useThrottledInvoker] Error invoking callback",x)}s.arg=null,s.last=f}s.arg!==null&&(s.id=requestAnimationFrame(c))};s.id=requestAnimationFrame(c)},[n,t,i,s])},xr=r.memo(({index:i,top:e,height:t,item:n,children:s,clipItemHeight:o,enableKeyboardNavigation:c,onKeyDown:f,onFocus:m,registerItemRef:x})=>{const I=r.useCallback(V=>x(i,V),[i,x]),T=r.useCallback(V=>f(V,i),[i,f]),D=r.useCallback(()=>m(i),[i,m]),h=r.useCallback(V=>{V.currentTarget.focus({preventScroll:!0})},[]);return H.jsx("div",{ref:I,"data-index":i,"data-virtualscroll-item":"true",className:"aqvs-item-container",style:{top:e,height:t,overflow:o?"hidden":void 0},tabIndex:c?-1:void 0,onPointerDown:c?h:void 0,onKeyDownCapture:c?T:void 0,onFocusCapture:c?D:void 0,children:s(n,i)})}),Ir=({itemCount:i,getItem:e,getItemKey:t,getItemHeight:n,viewportSize:s,overscanCount:o=15,className:c,testId:f,onScroll:m,onRangeChange:x,children:I,background:T,initialScrollIndex:D,initialScrollOffset:h,callbackThrottleMs:V=5,contentInsets:Z,onItemFocus:W,scrollBarOptions:ee,behaviorOptions:te,onWheelHorizontal:se},Re)=>{const{width:we,enableThumbDrag:F,enableTrackClick:Y,enableArrowButtons:P,enableScrollToTopBottomButtons:y,renderThumbOverlay:j,tapScrollCircleOptions:q}=ee??{},{enablePointerDrag:J,enableKeyboardNavigation:A=!0,wheelSpeedMultiplier:b,inertiaOptions:$,clipItemHeight:fe=!1,resetOnGetItemHeightChange:Q=!1}=te??{},z=r.useRef(null),U=r.useRef({renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0,scrollPosition:0,totalHeight:0}),he=r.useRef(null),ve=r.useRef(!1);r.useEffect(()=>{Q&&(he.current=null)},[Q,n]);const C=r.useMemo(()=>_t(Z),[Z]),[De]=r.useState(()=>{const u=typeof D=="number"&&Number.isFinite(D)?Math.max(0,Math.trunc(D)):0;return{from:Math.max(0,u-50),to:u+50}}),ke=r.useMemo(()=>({sampleRange:De,resetOnValueFnChange:Q,materialize:!0}),[Q,De]),v=qt(i,n,ke),[_e]=r.useState(()=>{let a=0,u=0;if(typeof D=="number"){const d=ue(D,0,i-1),R=ue(d-o*2,0,i-1),O=ue(d+o*2,0,i-1),w=D>0?{materializeOption:{materialize:!0,ranges:[{from:R,to:O}]}}:void 0,{cumulative:B,total:X,currentValue:ie}=v.prefixSum(D,w),G=Math.max(B-ie,0);a=ft(G,C.top),u=X??v.getTotal()}else typeof h=="number"&&(a=ft(Math.max(h,0),C.top)),u=v.getTotal();return{position:a,total:u}}),[Ve,$e]=r.useState(_e.position),[S,L]=r.useState(_e.total),k=r.useRef(_e.position),de=r.useRef(C.top),ae=r.useRef(m??void 0),oe=r.useRef(x??void 0),Se=r.useRef(new Map),K=r.useRef(null),Ee=r.useRef(null),[me,Ue]=r.useState(null),[Ae,Pe]=r.useState(!1),Ce=r.useRef(null),Be=r.useRef(!1),le=r.useRef(0),ge=r.useRef(!1),p=r.useRef(!1),N=r.useRef(i);N.current!==i&&(N.current=i,p.current=!0),r.useEffect(()=>{ae.current=m??void 0,oe.current=x??void 0},[x,m]);const be=r.useCallback(a=>{if(A&&a&&typeof a.focus=="function")try{a.focus({preventScroll:!0})}catch{a.focus()}},[A]),xe=r.useCallback((a,{position:u,totalHeight:d})=>{a(u,d)},[]),pe=Ft(ae,V,xe),rt=r.useCallback((a,u)=>{a(u)},[]),ye=Ft(oe,V,rt),qe=r.useRef(C.top);qe.current=C.top;const Ye=r.useRef(pe);Ye.current=pe,r.useEffect(()=>(ve.current=!1,()=>{ve.current=!0,Ce.current&&(clearTimeout(Ce.current),Ce.current=null)}),[]),r.useEffect(()=>{A||(Se.current.clear(),K.current=null,Ee.current=null)},[A]);const Ne=r.useCallback((a,u)=>{if(!u){Se.current.delete(a);return}A&&(Se.current.set(a,u),K.current===a&&(K.current=null,Ee.current=a,be(u)))},[A,be]),Le=.01,He=r.useRef({rafId:null,loopActive:!1,idleFrames:0,lastRenderedPosition:_e.position}),nt=r.useCallback(()=>{const a=He.current;a.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(a.rafId),a.rafId=null,a.loopActive=!1,a.idleFrames=0},[]);r.useEffect(()=>()=>{nt()},[nt]);const bt=r.useRef(()=>{}),at=r.useCallback(()=>{const a=He.current;a.rafId=null;const u=k.current,d=Ze(u,qe.current),R=v.getTotal();if($e(w=>Math.abs(w-u)<Le?w:u),Math.abs(a.lastRenderedPosition-u)>=Le?(Ye.current({position:d,totalHeight:R}),a.lastRenderedPosition=u,a.idleFrames=0):a.idleFrames+=1,a.idleFrames>=2){nt();return}if(typeof requestAnimationFrame=="function"){a.rafId=requestAnimationFrame(w=>bt.current(w));return}a.loopActive=!1},[v,nt]);bt.current=at;const dt=r.useCallback(()=>{const a=He.current;if(a.idleFrames=0,!a.loopActive){if(a.loopActive=!0,typeof requestAnimationFrame=="function"){a.rafId=requestAnimationFrame(at);return}a.loopActive=!1}},[at]),re=r.useCallback((a,u)=>{const d=u?.immediate??!1,R=Ze(a,C.top);if(k.current=a,d){He.current.lastRenderedPosition=a,He.current.idleFrames=0,$e(a),pe({position:R,totalHeight:v.getTotal()});return}dt()},[dt,v,C.top,pe]),Oe=r.useCallback(a=>{const u=z.current;if(!u)return a;const d=u.getScrollPosition();le.current+=1;const R=u.scrollTo(a);return R===d&&(le.current=Math.max(0,le.current-1)),Math.abs(R-a)>.5&&(ge.current=!0),R},[]),Xe=r.useRef(!1);r.useEffect(()=>{if(!Xe.current)if(Xe.current=!0,typeof h=="number"){const a=ft(Math.max(h,0),C.top),u=Math.abs(a-k.current)>.5;re(a,{immediate:!0}),u&&z.current?.scrollTo(a)}else re(k.current,{immediate:!0})},[h,C.top,re]),r.useEffect(()=>{const a=v.getTotal();if(S!==a){L(a);return}if(ge.current){ge.current=!1;const u=z.current;if(u&&Math.abs(u.getScrollPosition()-k.current)>.5){const d=Oe(k.current);ge.current=!1,re(d,{immediate:!0})}}},[v,S,i,Oe,re]),r.useEffect(()=>{if(he.current!==null){const{index:a,align:u,offset:d}=he.current,R=ce(a,i),{cumulative:O,currentValue:w}=v.prefixSum(R,{materializeOption:{materialize:!1}});if(O!==void 0&&w!==void 0){const B=Math.max(O-w,0);let X=B;u==="bottom"?X=O-s:u==="center"&&(X=B+w/2-s/2),d&&(X-=d),X=Math.max(0,X);const ie=Math.max(0,S+C.top+C.bottom-s),G=Math.min(ft(X,C.top),ie);Math.abs(G-k.current)>1&&(E.debug("[VirtualScroll] Drift correction",{from:k.current,to:G,targetIndex:R}),le.current===0&&(le.current+=1),z.current?.scrollTo(G),re(G,{immediate:!0}))}}p.current=!1},[S,v,i,C.top,re,s,C.bottom]),r.useEffect(()=>{const a=de.current;if(a===C.top)return;const u=Ze(k.current,a),d=ft(u,C.top);de.current=C.top,k.current=d,z.current?.scrollTo(d),re(d,{immediate:!0})},[C.top,re]);const mt=r.useCallback((a,u)=>{if(i===0)return;const d=ce(a,i),R=v.get(d),O=u-R,w=v.update(d,u);w!==void 0&&L(w),E.debug("[VirtualScroll] Updated item size manually",{index:d,size:u,total:w});let B=he.current?he.current.index:null;if(B===null){const X=k.current,ie=_t(Z).top,G=Ze(X,ie),{index:ne,cumulative:Te}=v.findIndexAtOrAfter(G,{materializeOption:{materialize:!1}});B=Te!==void 0&&Te===G?ne+1:ne}if(B!==-1&&d<B&&O!==0){const X=k.current,ie=X+O;Oe(ie),re(ie,{immediate:!0}),E.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)",{from:X,to:ie,causedByIndex:d,delta:O,activeVisibleStartIndex:B})}},[v,i,Oe,re,Z]),Fe=r.useCallback((a,u)=>{if(!z.current||i===0)return;const d=ce(a,i),R=ce(d-o*2,i),O=ce(d+o*2,i),{cumulative:w,total:B,currentValue:X}=v.prefixSum(d,{materializeOption:{materialize:!0,ranges:[{from:R,to:O}]}});if(E.debug("[VirtualScroll] Scrolling to index:",d,"ItemBottom:",w,"Total height:",B,"ItemHeight:",X,"safeIndexFrom:",R,"safeIndexTo:",O),!B)return;const ie=Math.max(w-X,0);let G=ie;u?.align==="bottom"?G=w-s:u?.align==="center"&&(G=ie+X/2-s/2),u?.offset&&(G-=u.offset),G=Math.max(0,G);const ne=ft(G,C.top),Te=z.current?.getContentSize()??B+C.top+C.bottom,Ie=Math.max(0,Te-s),Me=Math.min(ne,Ie);he.current={index:d,align:u?.align,offset:u?.offset};const st=z.current?.getScrollPosition()??-1,tt=Math.abs(st-Me)>.5;Be.current=!1,le.current=0,tt&&(Be.current=!0,le.current+=1,z.current?.scrollTo(Me)),L(B),re(Me,{immediate:!0}),E.debug("[VirtualScroll] Setting scroll position to:",Me,{original:ne,max:Ie})},[v,o,i,C.top,C.bottom,s,re]),xt=r.useCallback(a=>{if(!z.current||i===0)return;const u=v.getTotal(),d=ue(Math.floor(a),0,u),{index:R,cumulative:O,currentValue:w}=v.findIndexAtOrAfter(d,{materializeOption:{materialize:!1}}),X=(O??0)-(w??0)-d;Fe(R,{offset:X})},[v,i,Fe]),It=r.useCallback(a=>{const u=Ze(k.current,C.top),d=typeof a=="function"?a(u):a;xt(d);const R=z.current?.getScrollPosition(),O=typeof R=="number"?R:k.current;return re(O),O},[C.top,xt,re]),pt=r.useCallback((a,u)=>{E.debug("[VirtualScroll] Scroll position changed:",a);const d=Be.current;d&&(Be.current=!1);const R=le.current>0;if(R&&(le.current=0),d||R||p.current||(he.current=null),re(a),y){if(d||R)return;const O=a-u;if(E.debug("[VirtualScroll] Scroll diff:",O,"New:",a,"Prev:",u),Math.abs(O)>1){const w=O>0?"down":"up";Ue(w),Pe(!0),E.debug("[VirtualScroll] Showing scroll buttons. Direction:",w),Ce.current&&clearTimeout(Ce.current),Ce.current=setTimeout(()=>{Pe(!1),E.debug("[VirtualScroll] Hiding scroll buttons")},2e3)}}},[re,y]),Ke=r.useMemo(()=>Ze(Ve,C.top),[C.top,Ve]),Qe=r.useMemo(()=>{const a=v.getTotal(),u=br(Ke,s,o,i,n,v,a);return E.debug("[VirtualScroll] Calculated rendering range:",()=>({...u,scrollPosition:Ke,renderingContentSize:a,overscanCount:o,viewportSize:s})),u},[Ke,s,o,i,n,v]),{renderingStartIndex:We,renderingEndIndex:ze,visibleStartIndex:et,visibleEndIndex:ot}=Qe,Ge=r.useCallback((a,u)=>{if(!A||i===0)return;const d=ce(a,i);if(!(u?.ensureVisible??!0)){const Ie=Se.current.get(d);Ie&&(K.current=null,Ee.current=d,be(Ie));return}const O=v.prefixSum(d,{materializeOption:{materialize:!1}}),w=O.currentValue,B=Math.max(O.cumulative-w,0),X=B+w,ie=Ze(k.current,C.top),G=ie+s;if(B<ie||X>G){Fe(d);const Ie=Se.current.get(d);Ie?(K.current=null,Ee.current=d,be(Ie)):K.current=d;return}const Te=Se.current.get(d);if(Te){K.current=null,Ee.current=d,be(Te);return}K.current=d},[A,i,v,C.top,Fe,be,s]),vt=r.useCallback((a,u)=>{if(!A||a.defaultPrevented||a.altKey||a.metaKey||a.ctrlKey)return;const d=a.target;if(d){const R=d.tagName;if(R==="INPUT"||R==="TEXTAREA"||R==="SELECT"||d.isContentEditable)return}if(a.key==="ArrowDown"){u<i-1&&(a.preventDefault(),Ge(u+1));return}if(a.key==="ArrowUp"){u>0&&(a.preventDefault(),Ge(u-1));return}if(a.key==="PageDown"){if(u<i-1){a.preventDefault();const{visibleStartIndex:R,visibleEndIndex:O}=U.current,w=Math.max(O-R+1,1),B=Math.max(w,1),X=ce(Math.min(u+B,i-1),i);Ge(X)}return}if(a.key==="PageUp"&&u>0){a.preventDefault();const{visibleStartIndex:R,visibleEndIndex:O}=U.current,w=Math.max(O-R+1,1),B=Math.max(w,1),X=ce(u-B,i);Ge(X)}},[A,i,Ge]),St=r.useCallback(a=>{if(!A)return;const u=ce(a,i);K.current=null,Ee.current=u,W?.(u)},[A,i,W]);r.useEffect(()=>{const a=z.current?.getScrollPosition()??0,u=k.current,d=Ze(u,C.top);E.debug("[VirtualScroll] Range change effect triggered",()=>({renderingStartIndex:We,renderingEndIndex:ze,visibleStartIndex:et,visibleEndIndex:ot,scrollPositionState:Ve,paneScrollPosition:u,logicalScrollPosition:d,contentSize:S,scrollPaneScrollPosition:a})),ye({renderingStartIndex:We,renderingEndIndex:ze,visibleStartIndex:et,visibleEndIndex:ot,scrollPosition:d,totalHeight:S})},[S,ze,We,C.top,ye,Ve,ot,et]);const Pt=r.useCallback(()=>{if(!y)return null;const a=Ae&&me!==null,u=me==="up";return H.jsx("div",{className:"aqvs-scroll-to-edge-overlay","data-visible":a,children:u?H.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top",children:H.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:d=>{d.stopPropagation(),Be.current=!0,Fe(0),Pe(!1)},children:"Top"})}):H.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom",children:H.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:d=>{d.stopPropagation(),Be.current=!0,Fe(i-1),Pe(!1)},children:"Bottom"})})})},[y,Ae,me,Fe,i]),lt=r.useRef(0),{visibleItems:ct,renderAnchor:l}=r.useMemo(()=>{if(i===0)return{visibleItems:H.jsx("div",{className:"aqvs-no-items-container",children:H.jsx("div",{className:"aqvs-no-items-text",children:"No items"})}),renderAnchor:0};const a=ce(We,i),u=ce(ze,i),{cumulative:d,currentValue:R}=v.prefixSum(a,{materializeOption:{materialize:!1}}),O=d-R;Number.isFinite(O)&&Math.abs(O-lt.current)>hr&&(lt.current=O);const w=lt.current,B=[],X=[];let ie=0,G=O;for(let ne=a;ne<=u;ne++){if(X.length>=Ot){E.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.",{cap:Ot,safeRenderingStartIndex:a,safeRenderingEndIndex:u});break}const Te=n(ne),Ie=v.get(ne),Me=Te-Ie;Me!==0&&B.push({index:ne,value:Te});const st=G+ie,tt=t?t(ne):ne;X.push(H.jsx(xr,{index:ne,top:st-w,height:Te,item:e(ne),clipItemHeight:fe,enableKeyboardNavigation:A,onKeyDown:vt,onFocus:St,registerItemRef:Ne,children:I},tt)),ie+=Me,G+=Ie}return B.length>0&&Promise.resolve().then(()=>{if(ve.current)return;let ne=0;for(const Me of B)if(Me.index<et){const st=v.get(Me.index);ne+=Me.value-st}const Te=v.updates(B);if(ve.current||typeof Te!="number")return;L(Te),E.debug("[VirtualScroll] Updated heights for items",B,"New total height:",Te);const Ie=z.current?.getScrollPosition()??k.current;if(ne!==0){const Me=Ie+ne;Oe(Me),re(Me,{immediate:!0}),E.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)",{from:Ie,to:Me,shiftAmount:ne})}else Ie!==k.current&&re(Ie)}),{visibleItems:X,renderAnchor:w}},[I,fe,S,A,i,v,e,t,n,St,vt,Oe,Ne,ze,We,re,et]),g=r.useCallback(a=>{const u=(V??0)>0,d=Math.abs(a-Ve),R=u&&d>.5?Ve:a,O=Ze(R,C.top);if(E.debug("[VirtualScroll] Rendering visible items",()=>({currentScrollPosition:a,effectiveScrollPosition:O,renderingStartIndex:We,renderingEndIndex:ze,itemCount:i,viewportSize:s,callbackThrottleMs:V,diff:d,rawEffectiveScrollPosition:R})),i===0)return ct;const w=C.top+l-R,B=C.bottom>0?H.jsx("div",{className:"aqvs-bottom-inset",style:{top:v.getTotal()-l,height:C.bottom}},"virtualscroll-bottom-inset"):null;return E.debug("[VirtualScroll] Rendering items",()=>({containerTop:w,logicalScrollPosition:Ke,resolvedInsets:C,effectiveScrollPosition:O})),H.jsxs("div",{className:"aqvs-items-wrapper",style:{top:0,transform:`translateY(${w}px)`,willChange:"transform"},children:[ct,B]})},[V,i,v,Ke,l,ze,We,C,Ve,s,ct]),M=r.useMemo(()=>({renderingStartIndex:Qe.renderingStartIndex,renderingEndIndex:Qe.renderingEndIndex,visibleStartIndex:Qe.visibleStartIndex,visibleEndIndex:Qe.visibleEndIndex,scrollPosition:Ke,totalHeight:v.getTotal()}),[Qe,Ke,v,S]);r.useEffect(()=>{U.current=M},[M]),r.useImperativeHandle(Re,()=>({getScrollPosition:()=>z.current?.getScrollPosition()??-1,getContentSize:()=>z.current?.getContentSize()??-1,getViewportSize:()=>z.current?.getViewportSize()??-1,scrollTo:It,scrollToIndex:Fe,getFenwickTreeTotalHeight:()=>v.getTotal(),getFenwickSize:()=>v.getSize(),focusItemAtIndex:Ge,getRange:()=>U.current,updateItemSize:mt}),[It,Fe,v,Ge,mt]);const _=v.getTotal()+C.top+C.bottom;return H.jsx(Bt,{ref:z,contentSize:_,viewportSize:s,className:c,testId:f,onScroll:pt,background:T,tapScrollCircleOptions:q,inertiaOptions:$,itemCount:i,scrollBarWidth:we,enableThumbDrag:F,enableTrackClick:Y,enableArrowButtons:P,enablePointerDrag:J,renderThumbOverlay:j,wheelSpeedMultiplier:b,onWheelHorizontal:se,contentInsets:C,visibleStartIndex:et,visibleEndIndex:ot,renderOverlay:Pt,initialScrollPosition:_e.position,children:g})},vr=r.forwardRef(Ir);exports.FenwickMapTree=Je;exports.ScrollBar=Yt;exports.ScrollPane=Bt;exports.VirtualScroll=vr;exports.minmax=ue;exports.tapScrollCircleSampleVisual=cr;exports.useFenwickMapTree=qt;exports.useHeightCache=pr;exports.useLruCache=Ht;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const H=require("react/jsx-runtime"),r=require("react"),it=require("tailwind-merge");class E{level;prefix;impl;constructor(e=2,t="[virtualscroll]",n=console){this.level=e,this.prefix=t,this.impl=n}static instance=new E(2,"[virtualscroll]");static setLevel(e){E.instance.setLevel(e)}setLevel(e){this.level=e}static setImplementation(e){E.instance.setImplementation(e)}setImplementation(e){this.impl=e}static setPrefix(e){E.instance.setPrefix(e)}setPrefix(e){this.prefix=e}static isEnabled(e){return E.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){E.instance.debug(e,...t)}debug(e,...t){this.level<=0&&this.impl.debug(...this.formatMessage(E.resolveLazy(e)),...t.map(E.resolveLazy))}static info(e,...t){E.instance.info(e,...t)}info(e,...t){this.level<=1&&this.impl.info(...this.formatMessage(E.resolveLazy(e)),...t.map(E.resolveLazy))}static warn(e,...t){E.instance.warn(e,...t)}warn(e,...t){this.level<=2&&this.impl.warn(...this.formatMessage(E.resolveLazy(e)),...t.map(E.resolveLazy))}static error(e,...t){E.instance.error(e,...t)}error(e,...t){this.level<=3&&this.impl.error(...this.formatMessage(E.resolveLazy(e)),...t.map(E.resolveLazy))}}const Vt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Ct=6,Kt=8,Wt=({dragState:i,normalizedDistance:e})=>{const t=1+e*.18,n=.16+e*.24,s=.38+e*.28,o=i.active?"80ms ease-out":"220ms ease";return H.jsxs(H.Fragment,{children:[H.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:`${o}, ${i.active?"80ms":"260ms"} box-shadow ease`}}),H.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:s,transition:i.active?"120ms opacity ease-out":"220ms opacity ease"}})]})},zt=r.memo(r.forwardRef(({onDragChange:i,className:e,maxVisualDistance:t=160,size:n=40,style:s,opacity:o=1,renderVisual:c},f)=>{const[m,x]=r.useState(Vt),I=r.useRef(null),T=r.useRef(null),D=r.useRef({x:0,y:0}),h=r.useRef(null),V=r.useRef(0),Z=r.useCallback(b=>{x(b),i(b)},[i]),W=r.useCallback((b,$,ue=!1)=>{const{x:Q,y:z}=D.current,K=b-Q,me=$-z,ve=Math.abs(me),C=ve<Ct?0:me<0?-1:1,De=V.current;let ke=C;const v=Ct+Kt;C===0?De!==0&&ve<v?ke=De:(ke=0,ue||(V.current=0)):C!==De&&De!==0&&ve<v?ke=De:V.current=C,Z({active:ue||ve>=Ct,offsetX:K,offsetY:me,distance:ve,direction:ke,pointerId:I.current})},[Z]),ee=r.useCallback(b=>{if(b===null)return;const $=h.current;$?.hasPointerCapture(b)&&$.releasePointerCapture(b)},[]),te=r.useCallback((b=!1)=>{b&&ee(I.current),I.current=null,T.current=null,V.current=0,Z(Vt)},[Z,ee]),se=r.useCallback(b=>{if(I.current!==null&&I.current!==b.pointerId){T.current={pointerId:b.pointerId,clientX:b.clientX,clientY:b.clientY},b.preventDefault(),b.stopPropagation();return}b.preventDefault(),b.stopPropagation();const $=h.current??b.currentTarget,{left:ue,top:Q,width:z,height:K}=$.getBoundingClientRect();D.current={x:ue+z/2,y:Q+K/2},I.current=b.pointerId;try{$.setPointerCapture(b.pointerId)}catch{}W(b.clientX,b.clientY,!0)},[W]),Re=r.useCallback(b=>{if(I.current!==b.pointerId){T.current!==null&&T.current.pointerId===b.pointerId&&(T.current={pointerId:b.pointerId,clientX:b.clientX,clientY:b.clientY});return}b.preventDefault(),W(b.clientX,b.clientY)},[W]),Ee=r.useCallback(b=>{if(I.current!==b.pointerId){T.current!==null&&T.current.pointerId===b.pointerId&&(T.current=null);return}b.preventDefault(),b.stopPropagation();const $=T.current;if(T.current=null,$!==null){ee(b.pointerId);const ue=h.current;let Q=!0;if(ue!==null&&typeof ue.setPointerCapture=="function")try{ue.setPointerCapture($.pointerId)}catch(z){(typeof z=="object"&&z!==null&&"name"in z?z.name:void 0)==="NotFoundError"&&(Q=!1)}if(Q){I.current=$.pointerId,W($.clientX,$.clientY,!0);return}}te(!0)},[te,ee,W]),F=r.useCallback(b=>{I.current===b.pointerId&&te(!1)},[te]);r.useImperativeHandle(f,()=>({reset:()=>{te(!0)},getElement:()=>h.current}),[te]);const Y=Math.min(Math.max(o,0),1),P=n/64,y=Math.min(m.distance,t)/t,j=m.direction*y*10*P,q=c??Wt,J={dragState:m,normalizedDistance:y,sizeScale:P,size:n,opacity:Y},A={...s,width:n,height:n,transform:`translateY(${j}px)`};return A.opacity=Y,H.jsx("div",{ref:h,"data-testid":"virtual-scroll-tap-circle",className:it.twMerge("aqvs-tap-scroll-circle",e),style:A,tabIndex:-1,onPointerDown:se,onPointerMove:Re,onPointerUp:Ee,onPointerCancel:Ee,onLostPointerCapture:F,role:"presentation",children:q(J)})}));zt.displayName="TapScrollCircle";const ce=(i,e,t)=>Math.max(e,Math.min(t,i)),Nt="virtualscroll:tap-scroll-cancel",At=20,Gt=250,Zt=60,Jt=20,Qt=20,er=240,Dt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},yt=2.2,tr=8,rr=120,nr=1/10,je={enabled:!0,size:40,offsetX:-80,offsetY:0,className:void 0,maxVisualDistance:er,minSpeedMultiplier:.2,opacity:.9,renderVisual:void 0,maxSpeedCurve:void 0},sr=i=>i?{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"},ir=(i,e)=>{const t=i?.maxSpeedMultiplier,n=typeof t=="number"?t:lr(e);return{enabled:i?.enabled??je.enabled,size:i?.size??je.size,offsetX:i?.offsetX??je.offsetX,offsetY:i?.offsetY??je.offsetY,className:i?.className??je.className,maxVisualDistance:i?.maxVisualDistance??je.maxVisualDistance,maxSpeedMultiplier:n,minSpeedMultiplier:Math.max(i?.minSpeedMultiplier??je.minSpeedMultiplier,0),opacity:ce(i?.opacity??je.opacity,0,1),renderVisual:i?.renderVisual??je.renderVisual,maxSpeedCurve:i?.maxSpeedCurve??je.maxSpeedCurve}},ar=({isDragging:i,isThumbHovered:e,enableThumbDrag:t})=>r.useMemo(()=>t?i?"dragging":e?"hover":"idle":"disabled",[t,i,e]),or=({canUseArrowButtons:i,enableArrowButtons:e,resetTapScroll:t,scrollByStep:n})=>{const s=r.useRef(null),o=r.useRef(null),c=r.useRef(null),f=r.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null),o.current!==null&&(window.clearTimeout(o.current),o.current=null),c.current!==null&&(window.removeEventListener("pointerup",c.current),window.removeEventListener("pointercancel",c.current),window.removeEventListener("blur",c.current),c.current=null)},[]),m=r.useCallback(()=>{f()},[f]),x=r.useCallback(T=>D=>{if(!i)return;D.cancelable&&D.preventDefault(),D.stopPropagation(),t(),f(),n(T),o.current=window.setTimeout(()=>{s.current=window.setInterval(()=>{n(T)},Zt)},Gt);const h=()=>f();c.current=h,window.addEventListener("pointerup",h),window.addEventListener("pointercancel",h),window.addEventListener("blur",h)},[i,f,t,n]),I=r.useCallback(T=>D=>{e&&(D.key==="Enter"||D.key===" "||D.key==="Spacebar")&&(D.preventDefault(),n(T))},[e,n]);return r.useEffect(()=>{i||f()},[i,f]),r.useEffect(()=>()=>{f()},[f]),{handleArrowPointerDown:x,handleArrowPointerUp:m,handleArrowKeyDown:I}},lr=i=>{if(!i||i<=0)return yt;const e=Math.max(1,i),t=Math.log10(e),n=yt+t*tr;return ce(n,yt,rr)},Yt=({contentSize:i,viewportSize:e,scrollPosition:t,onScroll:n,enableThumbDrag:s=!0,enableTrackClick:o=!0,enableArrowButtons:c=!0,horizontal:f=!1,scrollBarWidth:m=12,className:x,ariaControls:I,tapScrollCircleOptions:T,itemCount:D,renderThumbOverlay:h,visibleStartIndex:V,visibleEndIndex:Z})=>{const[W,ee]=r.useState(!1),[te,se]=r.useState(!1),[Re,Ee]=r.useState(!1),F=r.useRef(null),Y=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null}),P=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}),y=r.useRef(t),j=r.useRef(n),q=r.useRef(Dt),J=r.useRef(null),A=r.useRef(null),b=r.useRef(null),$=r.useRef(0),ue=r.useRef(0),Q=r.useMemo(()=>ir(T,D),[D,T]),z=r.useMemo(()=>sr(f),[f]),{enabled:K,size:me,offsetX:ve,offsetY:C,className:De,maxVisualDistance:ke,maxSpeedMultiplier:v,minSpeedMultiplier:_e,opacity:Ve,renderVisual:$e,maxSpeedCurve:S}=Q,L=r.useRef({viewportSize:e,maxScrollPosition:Math.max(i-e,0),scrollBarVisible:i>e,effectiveTapMaxDistance:Math.max(ke,1),tapCircleMaxSpeedMultiplier:v,tapCircleMinSpeedMultiplier:_e,tapCircleMaxSpeedCurve:S,tapScrollCircleOptions:T,effectiveTrackLength:0,onScroll:n,scrollPosition:t}),{mainSizeKey:k,crossSizeKey:Se,positionKey:pe,selectDelta:he,getPointerCoordinate:Pe,arrowLabels:U,arrowIcons:ie,directionClass:fe,orientation:Ue}=z,Ae=Math.max(ke,1),Ce=e/i,ye=Math.max(e-m*2,0),Be=Ce*ye,oe=Math.min(Math.max(At,Be||0),ye||At),ge=i-e,p=Math.max(ye-oe,0),N=ge<=0||p<=0?0:ce(t/ge*p,0,p),be=N+oe/2,xe=i>e||W,de=xe&&c;r.useLayoutEffect(()=>{L.current={viewportSize:e,maxScrollPosition:ge,scrollBarVisible:xe,effectiveTapMaxDistance:Ae,tapCircleMaxSpeedMultiplier:v,tapCircleMinSpeedMultiplier:_e,tapCircleMaxSpeedCurve:S,tapScrollCircleOptions:T,effectiveTrackLength:p,onScroll:n,scrollPosition:t}}),r.useLayoutEffect(()=>{y.current=t},[t]),r.useLayoutEffect(()=>{j.current=n},[n]),r.useEffect(()=>{s||se(!1)},[s]);const rt=ar({isDragging:W,isThumbHovered:te,enableThumbDrag:s}),we=r.useCallback((l,g)=>{const M=L.current,_=g??y.current;if(j.current){const R=j.current(l,_);if(typeof R=="number"&&Number.isFinite(R))return y.current=R,R}const a=typeof l=="function"?l(_):l,u=Math.max(M.maxScrollPosition,0),d=M.scrollBarVisible?ce(a,0,u):0;return y.current=d,d},[]),qe=r.useCallback(l=>{const g=L.current,M=y.current;if(!g.scrollBarVisible||g.maxScrollPosition<=0){const w=we(0,M),B=w-M;return{nextPosition:w,actualDelta:B,reachedBoundary:!0}}if(l===0)return{nextPosition:M,actualDelta:0,reachedBoundary:!1};const a=we(w=>ce(w+l,0,g.maxScrollPosition),M),u=a-M,d=l<0&&M+l<=0,R=l>0&&M+l>=g.maxScrollPosition,O=l<0&&(a<=0||d&&u===0)||l>0&&(a>=g.maxScrollPosition||R&&u===0);return{nextPosition:a,actualDelta:u,reachedBoundary:O}},[we]),Ye=r.useCallback((l,g)=>{l.current+=g;const M=Math.max(L.current.maxScrollPosition,0);M>0&&(l.current=ce(l.current,-M,M));const _=qe(l.current);return l.current-=_.actualDelta,_.reachedBoundary&&(l.current=0),_},[qe]),Ne=r.useCallback(()=>{A.current!==null&&(window.cancelAnimationFrame(A.current),A.current=null),b.current=null,$.current=0,ue.current=0},[]),Le=r.useCallback(()=>{q.current={...Dt},Ee(!1),J.current?.reset(),Ne()},[Ne]),He=r.useCallback(l=>{const g=q.current,M=L.current;if(!g.active||g.direction===0){Ne();return}if(!M.scrollBarVisible||M.maxScrollPosition<=0){Ne();return}const _=b.current??l,a=Math.max((l-_)/1e3,0),u=Math.min(a,nr);if(b.current=l,u<=0){A.current=window.requestAnimationFrame(He);return}const d=Math.min(g.distance,M.effectiveTapMaxDistance)/M.effectiveTapMaxDistance,R=d**1.1,O=typeof M.tapScrollCircleOptions?.maxSpeedMultiplier=="number",w=Math.max(M.viewportSize*M.tapCircleMinSpeedMultiplier,40),B=O?w:1200;let ae=Math.max(M.viewportSize*M.tapCircleMaxSpeedMultiplier,B);const G=M.tapCircleMaxSpeedCurve;if(G){const tt=Math.max(G.exponentialSteepness,0),Xt=Math.max(G.exponentialScale??M.tapCircleMaxSpeedMultiplier,0),jt=tt===0?d:Math.expm1(tt*d),kt=tt===0?1:Math.expm1(tt)||1,$t=kt===0?d:Math.min(Math.max(jt/kt,0),1),Ut=M.viewportSize*Xt*$t;ae=Math.min(ae,Math.max(Ut,w))}const ne=Math.max(ae,w),Te=Math.max(G?.easedOffset??0,0),Ie=Math.min(1,R+Te),Me=w+(ne-w)*Ie;ue.current!==g.direction&&(ue.current=g.direction,$.current=0);const{reachedBoundary:st}=Ye($,g.direction*Me*u);if(st){Ne();return}A.current=window.requestAnimationFrame(He)},[Ye,Ne]),nt=r.useCallback(()=>{A.current===null&&(b.current=null,$.current=0,A.current=window.requestAnimationFrame(He))},[He]);r.useEffect(()=>()=>{Ne()},[Ne]);const bt=r.useCallback(l=>{q.current=l,Ee(l.active),l.active&&l.direction!==0?nt():Ne()},[nt,Ne]);r.useEffect(()=>{K||Le()},[Le,K]),r.useEffect(()=>{const l=g=>{const _=g.detail?.paneId;_&&I&&_!==I||Le()};return window.addEventListener(Nt,l),()=>{window.removeEventListener(Nt,l)}},[I,Le]),r.useEffect(()=>{if(!K)return;const l=g=>{if(!q.current.active||q.current.pointerId===g.pointerId)return;const M=g.target;if(!(M instanceof Node)){Le();return}J.current?.getElement()?.contains(M)||Le()};return document.addEventListener("pointerdown",l,!0),()=>{document.removeEventListener("pointerdown",l,!0)}},[Le,K]);const at=l=>{if(!xe||p<=0||ge<=0)return 0;const g=ce(l,0,p);return ce(g/p*ge,0,ge)},dt=r.useCallback(l=>{const{scrollBarVisible:g,effectiveTrackLength:M,maxScrollPosition:_}=L.current;if(E.debug("[ScrollBar] calculateScrollPositionFromThumb",()=>({thumbPos:l,trackLen:M,maxScroll:_})),M<=0||_<=0)return null;const a=ce(l,0,M);return ce(a/M*_,0,_)},[]),re=r.useCallback(l=>{const g=l.getBoundingClientRect(),M=f?g.width:g.height,_=O=>{const w=Number.parseFloat(O);return Number.isFinite(w)?w:0},a=window.getComputedStyle(l),u=_(f?a.width:a.height),d=u>0?u+_(f?a.paddingLeft:a.paddingTop)+_(f?a.paddingRight:a.paddingBottom)+_(f?a.borderLeftWidth:a.borderTopWidth)+_(f?a.borderRightWidth:a.borderBottomWidth):0,R=d>0?d:f?l.offsetWidth:l.offsetHeight;return R<=0||M<=0?1:M/R},[f]),Oe=r.useCallback(l=>{const g=Y.current;if(g.pointerId!==l.pointerId)return;const M=l.clientX-g.startClientX,_=l.clientY-g.startClientY,a=he(M,_)/(g.scale||1);E.debug("[ScrollBar] handleThumbPointerMove",()=>({delta:a,startThumbPosition:g.startThumbPosition,clientY:l.clientY,startClientY:g.startClientY,metrics:L.current}));const u=dt(g.startThumbPosition+a);u!==null&&we(u),l.cancelable&&l.preventDefault()},[he,dt,we]),Xe=r.useCallback(l=>{const g=Y.current;if(g.pointerId!==l.pointerId)return;document.removeEventListener("pointermove",Oe),document.removeEventListener("pointerup",Xe),document.removeEventListener("pointercancel",Xe);const M=g.captureTarget;if(M?.hasPointerCapture?.(l.pointerId)&&M.releasePointerCapture(l.pointerId),Y.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null},ee(!1),F.current){const _=F.current.getBoundingClientRect();l.clientX>=_.left&&l.clientX<=_.right&&l.clientY>=_.top&&l.clientY<=_.bottom||se(!1)}else se(!1)},[Oe]);r.useEffect(()=>()=>{document.removeEventListener("pointermove",Oe),document.removeEventListener("pointerup",Xe),document.removeEventListener("pointercancel",Xe)},[Oe,Xe]);const mt=r.useRef(0),Fe=r.useRef(0),xt=r.useCallback(l=>{const g=Math.max(Math.round(L.current.viewportSize/Qt),Jt);Fe.current!==l&&(Fe.current=l,mt.current=0),Ye(mt,l*g)},[Ye]),{handleArrowPointerDown:It,handleArrowPointerUp:pt,handleArrowKeyDown:Ke}=or({canUseArrowButtons:de,enableArrowButtons:c,resetTapScroll:Le,scrollByStep:xt}),Qe=l=>{if(!xe)return;if(!s){l.preventDefault(),l.stopPropagation();return}if(l.pointerType==="mouse"&&l.button!==0||l.ctrlKey)return;Le();const g=l.currentTarget,M=re(g);let _=null;if(g.setPointerCapture)try{g.setPointerCapture(l.pointerId),_=g}catch{_=null}Y.current={pointerId:l.pointerId,startThumbPosition:N,startClientX:l.clientX,startClientY:l.clientY,scale:M,captureTarget:_},document.addEventListener("pointermove",Oe),document.addEventListener("pointerup",Xe),document.addEventListener("pointercancel",Xe),ee(!0),se(!0),l.preventDefault(),l.stopPropagation()},We=l=>{if(!xe)return;if(!o){l.preventDefault(),l.stopPropagation();return}if(l.pointerType==="mouse"&&l.button!==0||l.ctrlKey)return;const g=l.currentTarget,M=g.getBoundingClientRect(),_=Pe(l),a=re(g),u=(_-(f?M.left:M.top))/a;Le();const d=u-oe/2,R=at(d);if(we(R),g.setPointerCapture)try{g.setPointerCapture(l.pointerId)}catch{}P.current={pointerId:l.pointerId,startThumbPosition:d,startClientX:l.clientX,startClientY:l.clientY,scale:a},l.preventDefault(),l.stopPropagation()},ze=()=>{P.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}},et=l=>{const g=P.current;if(g.pointerId!==l.pointerId)return;if(l.pointerType==="mouse"&&l.buttons===0){ze();return}const M=l.clientX-g.startClientX,_=l.clientY-g.startClientY,a=he(M,_)/(g.scale||1),u=at(g.startThumbPosition+a);we(u),l.cancelable&&l.preventDefault()},ot=l=>{if(P.current.pointerId!==l.pointerId)return;const g=l.currentTarget;g.hasPointerCapture?.(l.pointerId)&&g.releasePointerCapture(l.pointerId),ze(),l.preventDefault(),l.stopPropagation()},Ge=l=>{if(P.current.pointerId!==l.pointerId)return;const g=l.currentTarget;g.hasPointerCapture?.(l.pointerId)&&g.releasePointerCapture(l.pointerId),ze()},vt=l=>{P.current.pointerId===l.pointerId&&ze()},St=r.useMemo(()=>ce((Re?1:.8)*Ve,0,1),[Re,Ve]),Pt=r.useMemo(()=>{const g=`calc(50% - ${me/2}px + ${C}px)`;return{left:ve,top:g}},[ve,C,me]),lt=(l,g,M,_)=>H.jsx("button",{type:"button",tabIndex:0,className:"aqvs-scrollbar-arrow-button",style:{[k]:m,[Se]:m},"aria-label":g,onPointerDown:It(l),onPointerUp:pt,onPointerLeave:pt,onPointerCancel:pt,onKeyDown:Ke(l),"aria-disabled":!c,disabled:!de,children:H.jsx("span",{"aria-hidden":"true",children:M})},_),ct=h&&xe?{orientation:Ue,scrollPosition:t,maxScrollPosition:ge,contentSize:i,viewportSize:e,thumbSize:oe,thumbPosition:N,thumbCenter:be,trackSize:ye,isDragging:W,isTapScrollActive:Re,visibleStartIndex:V,visibleEndIndex:Z}:null;return H.jsxs("div",{className:it.twMerge("aqvs-scrollbar",fe,!xe&&"pointer-events-none opacity-0",x),style:{[k]:e,[Se]:m},role:"scrollbar",tabIndex:-1,"aria-controls":I,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":ge,"aria-orientation":f?"horizontal":"vertical",children:[!f&&xe&&K&&H.jsx(zt,{ref:J,className:it.twMerge("aqvs-scrollbar-tap-circle-wrapper",De),size:me,maxVisualDistance:Ae,style:Pt,opacity:St,renderVisual:$e,onDragChange:bt},"tap-circle"),lt(-1,U[0],ie[0],"arrow-start"),H.jsxs("div",{className:"aqvs-scrollbar-track",style:{borderRadius:m/2},onPointerDown:We,onPointerMove:et,onPointerUp:ot,onPointerCancel:Ge,onLostPointerCapture:vt,"aria-disabled":!o,children:[ct&&H.jsx("div",{className:"aqvs-scrollbar-overlay","aria-hidden":!0,children:h?.(ct)},"overlay"),H.jsx("div",{className:it.twMerge("aqvs-scrollbar-thumb-wrapper",!(xe||W)&&"pointer-events-none opacity-0"),style:{[k]:oe,[pe]:N,...f?{top:0,bottom:0}:{left:0,right:0}},onPointerDown:Qe,role:"slider","aria-orientation":f?"horizontal":"vertical","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":ge,"aria-disabled":!s,tabIndex:-1,children:H.jsx("div",{ref:F,className:it.twMerge("aqvs-scrollbar-thumb",f?"aqvs-scrollbar-thumb-horizontal":"aqvs-scrollbar-thumb-vertical"),"data-thumb-state":rt,style:{borderRadius:m-1,cursor:s?"pointer":"default"},onMouseEnter:()=>{s&&se(!0)},onMouseLeave:()=>{s&&se(!1)}},"thumb")},"thumb-wrapper")]},"track"),lt(1,U[1],ie[1],"arrow-end")]})},ht={maxVelocity:6,minVelocity:.02,deceleration:.0025,velocitySampleWindow:90,startVelocityThreshold:.04},Tt=(i,e,t)=>{for(const[n,s,o]of e)t==="add"?i.addEventListener(n,s,o):i.removeEventListener(n,s,o)},Bt=r.forwardRef(({children:i,contentSize:e,viewportSize:t,scrollBarWidth:n=12,enableThumbDrag:s=!0,enableTrackClick:o=!0,enableArrowButtons:c=!0,enablePointerDrag:f=!0,onScroll:m,className:x,testId:I,style:T,background:D,tapScrollCircleOptions:h,inertiaOptions:V,itemCount:Z,renderThumbOverlay:W,wheelSpeedMultiplier:ee=1,onWheelHorizontal:te,contentInsets:se,visibleStartIndex:Re,visibleEndIndex:Ee,renderOverlay:F,initialScrollPosition:Y=0},P)=>{const y=r.useRef(Number.isFinite(Y)?Math.max(0,Y):0),j=r.useRef(null),q=r.useRef(null),J=r.useRef(te);r.useEffect(()=>{J.current=te},[te]);const A=r.useRef({frame:null,velocity:0,lastTimestamp:null,generation:0}),b=r.useMemo(()=>({maxVelocity:V?.maxVelocity??ht.maxVelocity,minVelocity:V?.minVelocity??ht.minVelocity,deceleration:V?.deceleration??ht.deceleration,velocitySampleWindow:V?.velocitySampleWindow??ht.velocitySampleWindow,startVelocityThreshold:V?.startVelocityThreshold??ht.startVelocityThreshold}),[V]),$=r.useMemo(()=>({top:Math.max(0,se?.top??0),bottom:Math.max(0,se?.bottom??0)}),[se]);E.debug("[ScrollPane] ScrollPane rendered",()=>({contentSize:e,viewportSize:t,scrollBarWidth:n,className:x,style:T,tapScrollCircleOptions:h,inertiaOptions:V,enablePointerDrag:f,contentInsets:$}));const ue=r.useRef({contentSize:e,viewportSize:t});ue.current={contentSize:e,viewportSize:t};const Q=r.useMemo(()=>e>t,[e,t]),z=r.useCallback(S=>{const{contentSize:L,viewportSize:k}=ue.current,Se=L>k,pe=y.current;if(E.debug("[ScrollPane] scrollTo called",()=>({newPosition:S,contentSize:L,viewportSize:k,currentIsScrollable:Se,prevPosition:pe})),!Se)return y.current!==0&&(y.current=0,m?.(0,pe)),y.current;const he=typeof S=="function"?S(y.current):S;if(!Number.isFinite(he))return E.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position",{nextPosition:he}),y.current;const Pe=Math.max(L-k,0),U=ce(he,0,Pe);return y.current!==U&&(y.current=U,m?.(U,pe)),y.current},[m]),K=r.useCallback(()=>{const S=A.current;S.generation+=1,S.frame!==null&&cancelAnimationFrame(S.frame),S.frame=null,S.velocity=0,S.lastTimestamp=null},[]),me=r.useRef(K);r.useEffect(()=>{me.current=K},[K]),r.useEffect(()=>()=>{me.current()},[]);const ve=r.useCallback(S=>{if(!Q)return;const{maxVelocity:L,minVelocity:k,deceleration:Se,startVelocityThreshold:pe}=b,he=ce(S,-L,L);if(Math.abs(he)<pe)return;K(),A.current.velocity=he,A.current.lastTimestamp=null;const Pe=A.current.generation,U=ie=>{const fe=A.current;if(fe.generation!==Pe)return;if(fe.lastTimestamp===null){fe.lastTimestamp=ie,fe.frame=requestAnimationFrame(U);return}const Ue=ie-fe.lastTimestamp;if(fe.lastTimestamp=ie,Ue<=0){fe.frame=requestAnimationFrame(U);return}const Ae=fe.velocity;let Ce=Ae;const ye=Se*Ue;Ae>0?Ce=Math.max(0,Ae-ye):Ae<0&&(Ce=Math.min(0,Ae+ye));const oe=(Ae+Ce)/2*Ue,ge=y.current;if(oe!==0&&z(rt=>rt+oe),A.current.generation!==Pe)return;const p=y.current,{contentSize:N,viewportSize:be}=ue.current,xe=Math.max(N-be,0);fe.velocity=Ce;const de=p===ge||p<=0&&Ce<=0||p>=xe&&Ce>=0;if(Math.abs(Ce)<k||de){K();return}fe.frame=requestAnimationFrame(U)};A.current.frame=requestAnimationFrame(U)},[Q,b,z,K]),C=r.useRef(ve);r.useEffect(()=>{C.current=ve},[ve]),r.useLayoutEffect(()=>{ue.current={contentSize:e,viewportSize:t}},[e,t]),r.useLayoutEffect(()=>{const S=q.current;if(!S)return;const L=()=>{S.scrollTop!==0&&(E.debug("[ScrollPane] Native scroll detected, resetting to 0",()=>({scrollTop:S.scrollTop})),S.scrollTop=0),S.scrollLeft!==0&&(S.scrollLeft=0)};return S.addEventListener("scroll",L),()=>S.removeEventListener("scroll",L)},[]),r.useLayoutEffect(()=>{if(Q){E.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change",()=>({contentSize:e,viewportSize:t,scrollPosition:y.current}));const S=ce(e-t,0,e);y.current>S&&z(S)}else z(0)},[Q,z,e,t]),r.useEffect(()=>{const S=k=>{if(k.ctrlKey)return;const Se=k.shiftKey&&k.deltaX===0,pe=Se?k.deltaY:k.deltaX,he=Se?0:k.deltaY;if(pe!==0&&Math.abs(pe)>=Math.abs(he)){if(J.current){k.preventDefault(),K();let ie=pe;k.deltaMode===1?ie*=16:k.deltaMode===2&&(ie*=t),J.current(ie)}return}if(!Q||k.deltaY===0)return;k.preventDefault(),K();let U=k.deltaY;k.deltaMode===1?U*=16:k.deltaMode===2&&(U*=t),ee!==1&&(U*=ee),E.debug("[ScrollPane] wheel event",()=>({deltaY:U,scrollPosition:y.current,wheelSpeedMultiplier:ee,deltaMode:k.deltaMode,scrollTop:q.current?.scrollTop})),z(ie=>ie+U)},L=j.current;return L&&L.addEventListener("wheel",S,{passive:!1}),()=>{L&&L.removeEventListener("wheel",S)}},[Q,z,K,t,ee]),r.useImperativeHandle(P,()=>({scrollTo:S=>(K(),z(S)),getScrollPosition:()=>y.current,getContentSize:()=>e,getViewportSize:()=>t}),[z,e,t,K]);const De=r.useRef(z);r.useEffect(()=>{De.current=z},[z]);const ke=r.useId(),v=r.useRef({pointerId:null,startClientY:0,startScroll:0,isDragging:!1,shouldCancelNextClick:!1,clickResetTimer:null,velocitySamples:[]}),_e=r.useRef(f);r.useEffect(()=>{_e.current=f},[f]);const Ve=r.useRef(Q);r.useEffect(()=>{Ve.current=Q},[Q]);const $e=r.useRef(b);return r.useEffect(()=>{$e.current=b},[b]),r.useEffect(()=>{if(f)return;const S=q.current,L=v.current;L.pointerId!==null&&S?.hasPointerCapture(L.pointerId)&&S.releasePointerCapture(L.pointerId),L.clickResetTimer!==null&&(window.clearTimeout(L.clickResetTimer),L.clickResetTimer=null),L.pointerId=null,L.startClientY=0,L.startScroll=0,L.isDragging=!1,L.shouldCancelNextClick=!1,L.velocitySamples=[]},[f]),r.useEffect(()=>{const S=q.current;if(!S)return;const L=6,k=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),Se=()=>{const p=v.current;p.pointerId=null,p.startClientY=0,p.startScroll=0,p.isDragging=!1,p.velocitySamples=[]},pe=()=>{const p=v.current;p.clickResetTimer!==null&&(window.clearTimeout(p.clickResetTimer),p.clickResetTimer=null)},he=p=>{const N=v.current,be=k();N.velocitySamples.push({clientY:p,time:be});const xe=$e.current.velocitySampleWindow;N.velocitySamples=N.velocitySamples.filter(de=>be-de.time<=xe)},Pe=p=>p instanceof HTMLElement&&p.closest("[data-scrollpane-ignore-drag='true']")!==null,U=p=>{const N=v.current;N.shouldCancelNextClick&&(p.preventDefault(),p.stopPropagation(),N.shouldCancelNextClick=!1)},ie=p=>{const N=v.current;if(!N.isDragging){if(N.isDragging=!0,N.shouldCancelNextClick=!0,!S.hasPointerCapture(p.pointerId))try{S.setPointerCapture(p.pointerId)}catch{}he(p.clientY)}},fe=p=>{const N=v.current;S.hasPointerCapture(p)&&S.releasePointerCapture(p),N.shouldCancelNextClick=!1,pe(),Se()},Ue=p=>{const N=v.current;if(N.pointerId!==p.pointerId)return;if(p.buttons===0){fe(p.pointerId);return}if(!(_e.current&&Ve.current)||!N.isDragging&&(Math.abs(p.clientY-N.startClientY)<L||(ie(p),!N.isDragging)))return;he(p.clientY);const be=p.clientY-N.startClientY,xe=N.startScroll-be;De.current(xe),p.cancelable&&p.preventDefault()},Ae=p=>{const N=v.current;if(N.pointerId!==p.pointerId)return;N.isDragging&&N.shouldCancelNextClick&&p.cancelable&&(p.preventDefault(),p.stopPropagation()),N.isDragging&&he(p.clientY);let be=0;if(N.isDragging&&N.velocitySamples.length>=2){const de=N.velocitySamples,rt=$e.current.velocitySampleWindow,we=de[de.length-1],qe=de.find(Ye=>we.time-Ye.time<=rt)??de[0];if(we&&qe&&we.time!==qe.time){const Ye=we.clientY-qe.clientY,Ne=we.time-qe.time;be=-(Ye/Ne)}}pe(),N.shouldCancelNextClick&&(N.clickResetTimer=window.setTimeout(()=>{const de=v.current;de.shouldCancelNextClick=!1,de.clickResetTimer=null},0));const xe=$e.current.startVelocityThreshold;Se(),S.hasPointerCapture(p.pointerId)&&S.releasePointerCapture(p.pointerId),Math.abs(be)>=xe&&C.current?.(be)},Ce=p=>{if(v.current.pointerId!==null||!(_e.current&&Ve.current)||p.button!==0&&p.pointerType==="mouse"||p.ctrlKey||p.metaKey||p.altKey||Pe(p.target))return;window.dispatchEvent(new CustomEvent(Nt,{detail:{paneId:ke}})),me.current?.();const N=v.current;pe(),N.pointerId=p.pointerId,N.startClientY=p.clientY,N.startScroll=y.current,N.isDragging=!1,N.shouldCancelNextClick=!1,N.velocitySamples=[]},ye=p=>{v.current.pointerId===p.pointerId&&fe(p.pointerId)},oe=[["click",U,!0],["pointerdown",Ce,{passive:!1}],["lostpointercapture",p=>{v.current.pointerId===p.pointerId&&fe(p.pointerId)},void 0]],ge=[["pointermove",Ue,{passive:!1}],["pointerup",Ae,void 0],["pointercancel",ye,void 0]];return Tt(S,oe,"add"),Tt(window,ge,"add"),()=>{Tt(S,oe,"remove"),Tt(window,ge,"remove");const p=v.current;p.pointerId!==null&&S.hasPointerCapture(p.pointerId)&&S.releasePointerCapture(p.pointerId),pe(),Se()}},[ke]),H.jsxs("div",{ref:j,"data-testid":I,className:it.twMerge("aqvs-scroll-pane",x),style:T,children:[H.jsxs("div",{ref:q,className:it.twMerge("aqvs-scroll-pane-content"),style:{height:t,paddingTop:$.top,paddingBottom:$.bottom,...f&&Q?{touchAction:"none"}:{}},id:ke,children:[D,i(y.current)]}),H.jsx(Yt,{contentSize:e,viewportSize:t,scrollPosition:y.current,onScroll:z,enableThumbDrag:s,enableTrackClick:o,enableArrowButtons:c,scrollBarWidth:n,ariaControls:ke,tapScrollCircleOptions:h,itemCount:Z,renderThumbOverlay:W,visibleStartIndex:Re,visibleEndIndex:Ee},"scrollbar"),F?.()]})}),Lt=(i,e,t)=>Math.min(Math.max(i,e),t),cr=({dragState:i,normalizedDistance:e,sizeScale:t,size:n})=>{const s=Math.max(n/2,1),o=1+e*.65,c=Math.max(.65,1-e*.25),f=i.direction*e*26*t,m=.8+e*.18,x=3*t,I=6*t,T=22*t,D=Math.abs(f)+I,h=f>0?x:-Math.abs(f)-x,V=Math.max(2.5,3*t),Z=Lt(i.offsetX,-s,s),W=Lt(i.offsetY,-s,s),ee=s*.35,te=Z/s*ee,se=W/s*ee,Re=te*.45,Ee=se*.45,F=Math.max(T*.38,6),Y=.65+e*.2,P=i.active;return H.jsxs(H.Fragment,{children:[H.jsx("div",{className:"aqvs-tap-scroll-circle-gradient",style:{transform:`scale(${c}, ${o})`,transition:P?"40ms transform ease-out":"200ms ease transform"}}),H.jsx("div",{className:"aqvs-sample-visual-rod",style:{width:T,height:T,transform:`translate(calc(-50% + ${te}px), calc(-50% + ${se}px)) scale(${c}, ${m*o})`,transition:P?"70ms transform ease-out":"200ms ease transform"}}),H.jsx("div",{className:"aqvs-sample-visual-pupil",style:{width:F,height:F,transform:`translate(calc(-50% + ${Re}px), calc(-50% + ${Ee}px)) scale(${c}, ${o})`,opacity:Y,boxShadow:"0 0 8px rgba(255,255,255,0.45)",transition:P?"120ms opacity 150ms, 120ms transform ease-out ease-out":"220ms ease transform, 240ms opacity ease"}}),H.jsx("div",{className:"aqvs-sample-visual-highlight",style:{width:V,height:D,transform:`translate(-50%, ${h}px)`,opacity:e,transition:P?"40ms height, 60ms opacity ease-out ease-out":"200ms ease height, 120ms ease opacity"}})]})},Mt=100,ur=i=>{if(!Number.isFinite(i))return 0n;const e=Math.trunc(i);return e<=0?0n:BigInt(e)},wt=(i,e)=>{if(!Number.isFinite(i))throw new Error(`valueFn returned a non-finite value at index ${e}: ${i}`);return i},ut=i=>{if(i<=0||!Number.isFinite(i))return 0;const e=Math.trunc(i);if(e<=2147483647)return e&-e;const t=BigInt(e)&-BigInt(e);return Number(t)};class Je{tree;deltas;size;baseValue;valueFn;total;constructor(e,t,n){this.reset(e,t,n)}reset(e,t,n){const s=Number.isFinite(e)&&e>0?Math.trunc(e):0;if(typeof t!="function"){this.size=s,this.tree=new Map,this.deltas=new Map,this.valueFn=void 0,this.baseValue=t,this.total=this.baseValue*this.size;return}let o=0,c;if(s>0){const f=n?.sampleRange??{from:0,to:Math.min(Mt-1,s-1)};let m=Math.max(0,Math.trunc(f.from)),x=Math.min(Math.trunc(f.to),s-1);if(m>x&&(m=0,x=Math.min(Mt-1,s-1)),s>Mt)o=Je._sampleBaseValueStrided(t,s,Mt),n?.materialize&&(c={from:m,values:Je._collectValidatedValues(t,m,x)});else{const I=Je._collectValidatedValues(t,m,x);o=Je._modeOrMedian([...I]),n?.materialize&&(c={from:m,values:I})}}if(this.size=s,this.tree=new Map,this.deltas=new Map,this.total=void 0,this.valueFn=t,this.baseValue=o,c)for(let f=0;f<c.values.length;f++){const m=c.from+f;if(m>=this.size)break;const x=c.values[f]-this.baseValue;x!==0&&(this.deltas.set(m,x),this._updateTree(m,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 s=[];for(let o=t;o<=n;o++)s.push(wt(e(o),o));return s}static _modeOrMedian(e){if(e.length===0)return 0;e.sort((c,f)=>c-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 s=new Map;let o=0;for(const c of e){const f=(s.get(c)??0)+1;s.set(c,f),f>o&&(o=f)}if(o>e.length*.2){const c=[];for(const[m,x]of s.entries())x===o&&c.push(m);const f=c.reduce((m,x)=>m+x,0);n=Math.floor(f/c.length)}return n}static _sampleBaseValueStrided(e,t,n){if(t<=0)return 0;let s=Math.max(1,Math.ceil(t/n));s%2===0&&(s+=1);const o=[];for(let c=0;c<t&&o.length<n;c+=s)o.push(wt(e(c),c));return Je._modeOrMedian(o)}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:s}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(s))throw new Error(`Change must be a finite number: ${s}`);const c=(t.get(n)??this.deltas.get(n)??0)+s;if(c+this.baseValue<-1e-9)throw new Error(`Change would make the value at index ${n} negative: ${c+this.baseValue}`);t.set(n,c)}for(const{index:n,change:s}of e){const c=(this.deltas.get(n)??0)+s;c===0?this.deltas.delete(n):this.deltas.set(n,c),this._updateTree(n,s)}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 s=ut(n);if(s===0)break;n+=s}this.total!==void 0&&(this.total+=t)}_buildDeltaUpdates(e){const t=[],n=new Map;for(const{index:s,value:o}of e){if(s<0||s>=this.size)throw new Error(`Index ${s} out of bounds`);if(!Number.isInteger(s))throw new Error(`Index must be an integer: ${s}`);if(!Number.isFinite(o))throw new Error(`Value must be a finite number: ${o}`);if(o<0)throw new Error("Value cannot be negative.");const c=n.has(s)?n.get(s)??0:this.deltas.get(s)??0,f=c+this.baseValue,m=o-f;m!==0&&t.push({index:s,change:m}),n.set(s,c+m)}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=ut(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,o=wt(this.valueFn(e),e)-this.baseValue;if(o!==n&&(o===0?this.deltas.delete(e):this.deltas.set(e,o),t)){const c=o-n;this._updateTree(e,c)}}}_materializeRanges(e,t,n=!1){if(!(e?.materialize&&this.valueFn))return;const s=e.ranges;if(s&&s.length>0){for(const f of s){const m=Math.max(0,Math.trunc(f.from)),x=Math.min(Math.trunc(f.to),this.size-1);for(let I=m;I<=x;I++)this._materialize(I)}if(t===void 0)return;if(n){this._materialize(t);return}const o=s[0].from,c=s[s.length-1].to;t>=o&&t<=c&&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 s=t.materializeOption?.materialize===!0;let o;for(;;){if(o=this._descend(e,n),o<0||o>=this.size)return{index:-1,total:this.total??this.getTotal(),cumulative:void 0,currentValue:void 0,safeIndex:void 0};if(!s)break;const f=this.deltas.get(o)??0;if(this._materialize(o),(this.deltas.get(o)??0)===f)break}const c=this.prefixSum(o);return{index:o,total:this.total??c.total,cumulative:c.cumulative,currentValue:c.currentValue,safeIndex:c.safeIndex}}_descend(e,t){let n=0,s=0,o=1;for(;o<<1<=this.size;)o<<=1;for(;o>0;o>>=1){const c=n+o;if(c<=this.size){const m=(this.tree.get(c)??0)+this.baseValue*o;(t?s+m<e:s+m<=e)&&(n=c,s+=m)}}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 s=ur(this.size);if(s===0n)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const o=t.materializeOption?.materialize===!0;for(;;){let c=0n,f=s-1n,m,x,I=this.total;for(;c<=f;){const h=c+f>>1n,V=Number(h),Z=this.prefixSum(V);if(I=Z.total,n?Z.cumulative>=e:Z.cumulative<=e)if(m=h,x=Z,n){if(h===0n)break;f=h-1n}else c=h+1n;else if(n)c=h+1n;else{if(h===0n)break;f=h-1n}}const T=x,D=m!==void 0?Number(m):-1;if(o&&D>=0){const h=this.deltas.get(D)??0;if(this._materialize(D),(this.deltas.get(D)??0)!==h)continue}return{index:D,total:I,cumulative:T?.cumulative,currentValue:T?.currentValue,safeIndex:T?.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=ce(Math.trunc(e),0,this.size-1),s=t?.materializeOption;this._materializeRanges(s,n,!0);let o=0,c=n+1;for(;c>0;){const m=this.tree.get(c)??0;o+=m;const x=ut(c);if(x===0)break;c-=x}const f=s?.materialize?this.get(n):(this.deltas.get(n)||0)+this.baseValue;return{cumulative:o+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&&E.error("Inconsistent Fenwick Tree state")}return this.total}rebuildTree(e){if(e?.materialize&&this.valueFn){const n=this.valueFn;this.reset(this.size,s=>n(s),{materialize:!0});return}const t=new Map;for(const[n,s]of this.deltas.entries()){if(s===0)continue;let o=n+1;for(;o<=this.size;){t.set(o,(t.get(o)??0)+s);const c=ut(o);if(c===0)break;o+=c}}this.tree=t,this.total=this._computeTreeTotal()}calculateAccumulatedError(){if(this.total===void 0)return 0;let e=this.baseValue*this.size;for(const t of this.deltas.values())e+=t;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)this._growSize(n,t);else{for(const o of this.deltas.keys())o>=t&&this.deltas.delete(o);this.size=t,this.rebuildTree()}const s=this.prefixSum(this.getSize()-1);s.cumulative!==s.total&&E.error("Inconsistent Fenwick Tree state")}static _minCoveredLowBound(e,t){let n=1;for(;;){const s=n*2;if(Math.floor(t/s)*s<=e)break;n=s}return n*Math.floor(e/n)}_propagateDeltaToGrownNodes(e,t,n,s){let o=e+1;for(;o<=n;){const c=ut(o);if(c===0)break;o+=c}for(;o<=s;){this.tree.set(o,(this.tree.get(o)??0)+t);const c=ut(o);if(c===0)break;o+=c}}_growSize(e,t){if(this.size=t,this.deltas.size>0){const n=Je._minCoveredLowBound(e,t);if(e-n<this.deltas.size)for(let o=n;o<e;o++){const c=this.deltas.get(o);c===void 0||c===0||this._propagateDeltaToGrownNodes(o,c,e,t)}else for(const[o,c]of this.deltas.entries())c===0||o<n||this._propagateDeltaToGrownNodes(o,c,e,t)}this.total=this._computeTreeTotal()}getSize(){return this.size}findIndexAtOrAfter(e,t){return this._findIndex(e,t??{},!0)}findIndexAtOrBefore(e,t){return this._findIndex(e,t??{},!1)}}const fr=(i,e)=>{const t=i?.sampleRange,n=e?.sampleRange;return t===n?!1:t&&n?t.from!==n.from||t.to!==n.to:!0},qt=(i,e,t)=>{const n=Number.isFinite(i)&&i>0?Math.trunc(i):0,s=r.useRef(null),o=r.useRef({size:n,valueOrFn:e,options:t});s.current===null&&(s.current=new Je(n,e,t));const c=s.current,f=o.current,m=f.size!==n,x=f.valueOrFn!==e,I=fr(f.options,t),T=f.size===0&&n>0;if(x||I){const D=t?.resetOnValueFnChange??!0;I||x&&D||T?(t?.debug&&E.debug("[useFenwickMapTree] reset",{valueOrFnChanged:x,optionsChanged:I}),c.reset(n,e,t)):(m&&(t?.debug&&E.debug("[useFenwickMapTree] resize (with valueFn change)",{from:f.size,to:n}),c.changeSize(n)),t?.debug&&E.debug("[useFenwickMapTree] setValueFn (no reset)",{valueOrFnChanged:x}),c.setValueFn(e,{reset:!1})),o.current={size:n,valueOrFn:e,options:t}}else m&&(t?.debug&&E.debug("[useFenwickMapTree] resize",{from:f.size,to:n}),T?c.reset(n,e,t):c.changeSize(n),o.current={size:n,valueOrFn:e,options:t});return c};class dr{key;value;prev=null;next=null;constructor(e,t){this.key=e,this.value=t}}class Et{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 Ht(i){const e=r.useRef(new Map),t=r.useRef(new Et),n=Math.floor(i),s=r.useRef(n);r.useEffect(()=>{if(s.current=n,Number.isNaN(n)||n<0){E.warn(`useLruCache: invalid capacity ${i}; the cache will not store any entries.`),e.current.clear(),t.current=new Et;return}if(Number.isFinite(n))for(;e.current.size>n;){const I=t.current.removeHead();if(I)e.current.delete(I.key);else break}},[i,n]);const o=r.useCallback(I=>{const T=e.current.get(I);if(T)return t.current.moveToTail(T),T.value},[]),c=r.useCallback((I,T)=>{const D=s.current;if(Number.isNaN(D)||D<=0)return;let h=e.current.get(I);if(h)h.value=T,t.current.moveToTail(h);else{if(e.current.size>=D){const V=t.current.removeHead();V&&e.current.delete(V.key)}h=new dr(I,T),e.current.set(I,h),t.current.addToTail(h)}},[]),f=r.useCallback(I=>e.current.has(I),[]),m=r.useCallback(I=>{const T=e.current.get(I);T&&(t.current.remove(T),e.current.delete(I))},[]),x=r.useCallback(()=>{e.current.clear(),t.current=new Et},[]);return r.useMemo(()=>({get:o,set:c,has:f,remove:m,clear:x}),[o,c,f,m,x])}const mr=1e4,pr=()=>{const{get:i,set:e,has:t,clear:n}=Ht(mr);return r.useMemo(()=>({get:i,set:e,has:t,clear:n}),[i,e,t,n])},le=(i,e)=>e<=0?0:ce(i,0,e-1),_t=i=>({top:Math.max(0,i?.top??0),bottom:Math.max(0,i?.bottom??0)}),Ze=(i,e)=>i<=e?0:i-e,ft=(i,e)=>i<=0?e:i+e,Rt=1e3,Ot=2e3,hr=1048576,gt=i=>{if(!Number.isFinite(i))return 0n;const e=Math.trunc(i);return e<=0?0n:BigInt(e)},gr=(i,e,t,n,s,o,c,f)=>{const m=gt(n);if(m===0n)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const x=F=>F<0n?0n:F>=m?m-1n:F,I={materializeOption:{materialize:!1}},{index:T,cumulative:D}=o.findIndexAtOrAfter(i,I);let h;T===-1?h=m-1n:(D===i?h=gt(T+1):h=gt(T),h>=m&&(h=m-1n)),i<=0&&(h=0n),f&&i>=c&&(h=m-1n);const V=F=>{const Y=Number(F);if(!Number.isSafeInteger(Y))return null;const{cumulative:P}=o.prefixSum(Y,{materializeOption:{materialize:!1}});if(!Number.isFinite(P))return null;const{index:y}=o.findIndexAtOrAfter(P+.5,{materializeOption:{materialize:!1}});if(y===-1)return null;const j=gt(y);return j>F?j:null},Z=F=>{let Y=0,P=F,y=F,j=0n,q=0;for(;P<m&&Y<e;){const J=Number(P),A=s(J);if(Y+=A,y=P,P+=1n,j+=1n,!Number.isFinite(A)||A<0)break;if(A===0){if(q+=1,q>Rt){const b=V(y);if(b!==null&&b>P)P=b,q=0;else if(b!==null&&b===P&&s(Number(P))>0)q=0;else break}}else q=0}return j===0n&&(y=F),{height:Y,end:y}};let{height:W,end:ee}=Z(h);if(W<e&&h>0n){let F=h,Y=W,P=0;for(;F>0n&&Y<e;){F-=1n;const j=Number(F),q=s(j);if(Y+=q,!Number.isFinite(q)||q<0)break;if(q===0){if(P+=1,P>Rt){const J=Number(F);if(!Number.isSafeInteger(J))break;const{cumulative:A}=o.prefixSum(J,{materializeOption:{materialize:!1}});if(!Number.isFinite(A))break;const{index:b}=o.findIndexAtOrAfter(A-.5,{materializeOption:{materialize:!1}}),$=b===-1?-1n:gt(b);if($>=0n&&$<F)F=$+1n,P=0;else if($===F&&F>=1n&&s(Number(F-1n))>0)P=0;else break}}else P=0}h=x(F);const y=Z(h);W=y.height,ee=y.end}const te=x(h),se=x(ee),Re=x(te-BigInt(Math.max(0,t))),Ee=x(se+BigInt(Math.max(0,t)));return{renderingStartIndex:le(Number(Re),n),renderingEndIndex:le(Number(Ee),n),visibleStartIndex:le(Number(te),n),visibleEndIndex:le(Number(se),n)}},br=(i,e,t,n,s,o,c)=>{if(n===0)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const f=Number.isFinite(c),m=f?Math.min(Math.max(0,i),c):Math.max(0,i);if(n>=Number.MAX_SAFE_INTEGER)return gr(m,e,t,n,s,o,c,f);const{index:x,cumulative:I,currentValue:T}=o.findIndexAtOrAfter(m,{materializeOption:{materialize:!1}}),D=x===-1?e<=0||(I??0)<m+(T??0)?n-1:0:x;let h=le(D,n),V=0;if(x!==-1&&I===m)h=le(x+1,n),V=0;else if(h===x&&I!==void 0&&T!==void 0)V=I-T-m;else{const{cumulative:F,currentValue:Y}=o.prefixSum(h,{materializeOption:{materialize:!1}});V=(F??0)-(Y??0)-m}const Z=V,W=(F,Y)=>{let P=F,y=Y,j=0;for(;P<n&&y<e;){const q=s(P);if(y+=q,P++,!Number.isFinite(q)||q<0)break;if(q===0){if(j++,j>Rt){const{cumulative:J}=o.prefixSum(P-1,{materializeOption:{materialize:!1}}),{index:A}=Number.isFinite(J)?o.findIndexAtOrAfter(J+.5,{materializeOption:{materialize:!1}}):{index:-1};if(A>P)P=A,j=0;else if(A===P&&s(P)>0)j=0;else break}}else j=0}return{cursor:P,height:y}},ee=W(h,V);let te=ee.cursor;if(V=ee.height,V<e&&h>0){let F=V+Math.abs(Math.min(0,Z)),Y=h-1,P=0;for(;Y>=0&&F<e;){const j=s(Y);if(F+=j,!Number.isFinite(j)||j<0){Y--;break}if(j===0){if(P++,P>Rt){const{cumulative:q}=o.prefixSum(Y,{materializeOption:{materialize:!1}}),{index:J}=Number.isFinite(q)?o.findIndexAtOrAfter(q-.5,{materializeOption:{materialize:!1}}):{index:-1};if(J!==-1&&J<Y){Y=J,P=0;continue}if(J===Y&&Y>=1&&s(Y-1)>0)P=0;else{Y--;break}}}else P=0;Y--}h=le(Y+1,n);const y=W(h,0);te=y.cursor,V=y.height}const se=le(h-t,n),Re=le(Math.max(te-1,h),n),Ee=le(Re+t,n);return{renderingStartIndex:se,renderingEndIndex:Ee,visibleStartIndex:h,visibleEndIndex:Re}},Ft=(i,e,t)=>{const n=Math.max(0,e??0),s=r.useRef({last:0,id:null,arg:null}).current;return r.useEffect(()=>()=>{s.id!==null&&(cancelAnimationFrame(s.id),s.id=null)},[s]),r.useCallback(o=>{if(s.arg=o,s.id!==null)return;const c=f=>{if(s.id=null,s.arg===null)return;const m=f-s.last;if(n===0||s.last===0||m>=n){if(i.current)try{t(i.current,s.arg)}catch(x){console.error("[useThrottledInvoker] Error invoking callback",x)}s.arg=null,s.last=f}s.arg!==null&&(s.id=requestAnimationFrame(c))};s.id=requestAnimationFrame(c)},[n,t,i,s])},xr=r.memo(({index:i,top:e,height:t,item:n,children:s,clipItemHeight:o,enableKeyboardNavigation:c,onKeyDown:f,onFocus:m,registerItemRef:x})=>{const I=r.useCallback(V=>x(i,V),[i,x]),T=r.useCallback(V=>f(V,i),[i,f]),D=r.useCallback(()=>m(i),[i,m]),h=r.useCallback(V=>{V.currentTarget.focus({preventScroll:!0})},[]);return H.jsx("div",{ref:I,"data-index":i,"data-virtualscroll-item":"true",className:"aqvs-item-container",style:{top:e,height:t,overflow:o?"hidden":void 0},tabIndex:c?-1:void 0,onPointerDown:c?h:void 0,onKeyDownCapture:c?T:void 0,onFocusCapture:c?D:void 0,children:s(n,i)})}),Ir=({itemCount:i,getItem:e,getItemKey:t,getItemHeight:n,viewportSize:s,overscanCount:o=15,className:c,testId:f,onScroll:m,onRangeChange:x,children:I,background:T,initialScrollIndex:D,initialScrollOffset:h,callbackThrottleMs:V=5,contentInsets:Z,onItemFocus:W,scrollBarOptions:ee,behaviorOptions:te,onWheelHorizontal:se},Re)=>{const{width:Ee,enableThumbDrag:F,enableTrackClick:Y,enableArrowButtons:P,enableScrollToTopBottomButtons:y,renderThumbOverlay:j,tapScrollCircleOptions:q}=ee??{},{enablePointerDrag:J,enableKeyboardNavigation:A=!0,wheelSpeedMultiplier:b,inertiaOptions:$,clipItemHeight:ue=!1,resetOnGetItemHeightChange:Q=!1}=te??{},z=r.useRef(null),K=r.useRef({renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0,scrollPosition:0,totalHeight:0}),me=r.useRef(null),ve=r.useRef(!1);r.useEffect(()=>{Q&&(me.current=null)},[Q,n]);const C=r.useMemo(()=>_t(Z),[Z]),[De]=r.useState(()=>{const u=typeof D=="number"&&Number.isFinite(D)?Math.max(0,Math.trunc(D)):0;return{from:Math.max(0,u-50),to:u+50}}),ke=r.useMemo(()=>({sampleRange:De,resetOnValueFnChange:Q,materialize:!0}),[Q,De]),v=qt(i,n,ke),[_e]=r.useState(()=>{let a=0,u=0;if(typeof D=="number"){const d=ce(D,0,i-1),R=ce(d-o*2,0,i-1),O=ce(d+o*2,0,i-1),w=D>0?{materializeOption:{materialize:!0,ranges:[{from:R,to:O}]}}:void 0,{cumulative:B,total:X,currentValue:ae}=v.prefixSum(D,w),G=Math.max(B-ae,0);a=ft(G,C.top),u=X??v.getTotal()}else typeof h=="number"&&(a=ft(Math.max(h,0),C.top)),u=v.getTotal();return{position:a,total:u}}),[Ve,$e]=r.useState(_e.position),[S,L]=r.useState(_e.total),k=r.useRef(_e.position),Se=r.useRef(C.top),pe=r.useRef(m??void 0),he=r.useRef(x??void 0),Pe=r.useRef(new Map),U=r.useRef(null),ie=r.useRef(null),[fe,Ue]=r.useState(null),[Ae,Ce]=r.useState(!1),ye=r.useRef(null),Be=r.useRef(!1),oe=r.useRef(0),ge=r.useRef(!1),p=r.useRef(!1),N=r.useRef(i);N.current!==i&&(N.current=i,p.current=!0),r.useEffect(()=>{pe.current=m??void 0,he.current=x??void 0},[x,m]);const be=r.useCallback(a=>{if(A&&a&&typeof a.focus=="function")try{a.focus({preventScroll:!0})}catch{a.focus()}},[A]),xe=r.useCallback((a,{position:u,totalHeight:d})=>{a(u,d)},[]),de=Ft(pe,V,xe),rt=r.useCallback((a,u)=>{a(u)},[]),we=Ft(he,V,rt),qe=r.useRef(C.top);qe.current=C.top;const Ye=r.useRef(de);Ye.current=de,r.useEffect(()=>(ve.current=!1,()=>{ve.current=!0,ye.current&&(clearTimeout(ye.current),ye.current=null)}),[]),r.useEffect(()=>{A||(Pe.current.clear(),U.current=null,ie.current=null)},[A]);const Ne=r.useCallback((a,u)=>{if(!u){Pe.current.delete(a);return}A&&(Pe.current.set(a,u),U.current===a&&(U.current=null,ie.current=a,be(u)))},[A,be]),Le=.01,He=r.useRef({rafId:null,loopActive:!1,idleFrames:0,lastRenderedPosition:_e.position}),nt=r.useCallback(()=>{const a=He.current;a.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(a.rafId),a.rafId=null,a.loopActive=!1,a.idleFrames=0},[]);r.useEffect(()=>()=>{nt()},[nt]);const bt=r.useRef(()=>{}),at=r.useCallback(()=>{const a=He.current;a.rafId=null;const u=k.current,d=Ze(u,qe.current),R=v.getTotal();if($e(w=>Math.abs(w-u)<Le?w:u),Math.abs(a.lastRenderedPosition-u)>=Le?(Ye.current({position:d,totalHeight:R}),a.lastRenderedPosition=u,a.idleFrames=0):a.idleFrames+=1,a.idleFrames>=2){nt();return}if(typeof requestAnimationFrame=="function"){a.rafId=requestAnimationFrame(w=>bt.current(w));return}a.loopActive=!1},[v,nt]);bt.current=at;const dt=r.useCallback(()=>{const a=He.current;if(a.idleFrames=0,!a.loopActive){if(a.loopActive=!0,typeof requestAnimationFrame=="function"){a.rafId=requestAnimationFrame(at);return}a.loopActive=!1}},[at]),re=r.useCallback((a,u)=>{const d=u?.immediate??!1,R=Ze(a,C.top);if(k.current=a,d){He.current.lastRenderedPosition=a,He.current.idleFrames=0,$e(a),de({position:R,totalHeight:v.getTotal()});return}dt()},[dt,v,C.top,de]),Oe=r.useCallback(a=>{const u=z.current;if(!u)return a;const d=u.getScrollPosition();oe.current+=1;const R=u.scrollTo(a);return R===d&&(oe.current=Math.max(0,oe.current-1)),Math.abs(R-a)>.5&&(ge.current=!0),R},[]),Xe=r.useRef(!1);r.useEffect(()=>{if(!Xe.current)if(Xe.current=!0,typeof h=="number"){const a=ft(Math.max(h,0),C.top),u=Math.abs(a-k.current)>.5;re(a,{immediate:!0}),u&&z.current?.scrollTo(a)}else re(k.current,{immediate:!0})},[h,C.top,re]),r.useEffect(()=>{const a=v.getTotal();if(S!==a){L(a);return}if(ge.current){ge.current=!1;const u=z.current;if(u&&Math.abs(u.getScrollPosition()-k.current)>.5){const d=Oe(k.current);ge.current=!1,re(d,{immediate:!0})}}},[v,S,i,Oe,re]),r.useEffect(()=>{if(me.current!==null){const{index:a,align:u,offset:d}=me.current,R=le(a,i),{cumulative:O,currentValue:w}=v.prefixSum(R,{materializeOption:{materialize:!1}});if(O!==void 0&&w!==void 0){const B=Math.max(O-w,0);let X=B;u==="bottom"?X=O-s:u==="center"&&(X=B+w/2-s/2),d&&(X-=d),X=Math.max(0,X);const ae=Math.max(0,S+C.top+C.bottom-s),G=Math.min(ft(X,C.top),ae);Math.abs(G-k.current)>1&&(E.debug("[VirtualScroll] Drift correction",{from:k.current,to:G,targetIndex:R}),oe.current===0&&(oe.current+=1),z.current?.scrollTo(G),re(G,{immediate:!0}))}}p.current=!1},[S,v,i,C.top,re,s,C.bottom]),r.useEffect(()=>{const a=Se.current;if(a===C.top)return;const u=Ze(k.current,a),d=ft(u,C.top);Se.current=C.top,k.current=d,z.current?.scrollTo(d),re(d,{immediate:!0})},[C.top,re]);const mt=r.useCallback((a,u)=>{if(i===0)return;const d=le(a,i),R=v.get(d),O=u-R,w=v.update(d,u);w!==void 0&&L(w),E.debug("[VirtualScroll] Updated item size manually",{index:d,size:u,total:w});let B=me.current?me.current.index:null;if(B===null){const X=k.current,ae=_t(Z).top,G=Ze(X,ae),{index:ne,cumulative:Te}=v.findIndexAtOrAfter(G,{materializeOption:{materialize:!1}});B=Te!==void 0&&Te===G?ne+1:ne}if(B!==-1&&d<B&&O!==0){const X=k.current,ae=X+O;Oe(ae),re(ae,{immediate:!0}),E.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)",{from:X,to:ae,causedByIndex:d,delta:O,activeVisibleStartIndex:B})}},[v,i,Oe,re,Z]),Fe=r.useCallback((a,u)=>{if(!z.current||i===0)return;const d=le(a,i),R=le(d-o*2,i),O=le(d+o*2,i),{cumulative:w,total:B,currentValue:X}=v.prefixSum(d,{materializeOption:{materialize:!0,ranges:[{from:R,to:O}]}});if(E.debug("[VirtualScroll] Scrolling to index:",d,"ItemBottom:",w,"Total height:",B,"ItemHeight:",X,"safeIndexFrom:",R,"safeIndexTo:",O),!B)return;const ae=Math.max(w-X,0);let G=ae;u?.align==="bottom"?G=w-s:u?.align==="center"&&(G=ae+X/2-s/2),u?.offset&&(G-=u.offset),G=Math.max(0,G);const ne=ft(G,C.top),Te=z.current?.getContentSize()??B+C.top+C.bottom,Ie=Math.max(0,Te-s),Me=Math.min(ne,Ie);me.current={index:d,align:u?.align,offset:u?.offset};const st=z.current?.getScrollPosition()??-1,tt=Math.abs(st-Me)>.5;Be.current=!1,oe.current=0,tt&&(Be.current=!0,oe.current+=1,z.current?.scrollTo(Me)),L(B),re(Me,{immediate:!0}),E.debug("[VirtualScroll] Setting scroll position to:",Me,{original:ne,max:Ie})},[v,o,i,C.top,C.bottom,s,re]),xt=r.useCallback(a=>{if(!z.current||i===0)return;const u=v.getTotal(),d=ce(Math.floor(a),0,u),{index:R,cumulative:O,currentValue:w}=v.findIndexAtOrAfter(d,{materializeOption:{materialize:!1}}),X=(O??0)-(w??0)-d;Fe(R,{offset:X})},[v,i,Fe]),It=r.useCallback(a=>{const u=Ze(k.current,C.top),d=typeof a=="function"?a(u):a;xt(d);const R=z.current?.getScrollPosition(),O=typeof R=="number"?R:k.current;return re(O),O},[C.top,xt,re]),pt=r.useCallback((a,u)=>{E.debug("[VirtualScroll] Scroll position changed:",a);const d=Be.current;d&&(Be.current=!1);const R=oe.current>0;if(R&&(oe.current=0),d||R||p.current||(me.current=null),re(a),y){if(d||R)return;const O=a-u;if(E.debug("[VirtualScroll] Scroll diff:",O,"New:",a,"Prev:",u),Math.abs(O)>1){const w=O>0?"down":"up";Ue(w),Ce(!0),E.debug("[VirtualScroll] Showing scroll buttons. Direction:",w),ye.current&&clearTimeout(ye.current),ye.current=setTimeout(()=>{Ce(!1),E.debug("[VirtualScroll] Hiding scroll buttons")},2e3)}}},[re,y]),Ke=r.useMemo(()=>Ze(Ve,C.top),[C.top,Ve]),Qe=r.useMemo(()=>{const a=v.getTotal(),u=br(Ke,s,o,i,n,v,a);return E.debug("[VirtualScroll] Calculated rendering range:",()=>({...u,scrollPosition:Ke,renderingContentSize:a,overscanCount:o,viewportSize:s})),u},[Ke,s,o,i,n,v]),{renderingStartIndex:We,renderingEndIndex:ze,visibleStartIndex:et,visibleEndIndex:ot}=Qe,Ge=r.useCallback((a,u)=>{if(!A||i===0)return;const d=le(a,i);if(!(u?.ensureVisible??!0)){const Ie=Pe.current.get(d);Ie&&(U.current=null,ie.current=d,be(Ie));return}const O=v.prefixSum(d,{materializeOption:{materialize:!1}}),w=O.currentValue,B=Math.max(O.cumulative-w,0),X=B+w,ae=Ze(k.current,C.top),G=ae+s;if(B<ae||X>G){Fe(d);const Ie=Pe.current.get(d);Ie?(U.current=null,ie.current=d,be(Ie)):U.current=d;return}const Te=Pe.current.get(d);if(Te){U.current=null,ie.current=d,be(Te);return}U.current=d},[A,i,v,C.top,Fe,be,s]),vt=r.useCallback((a,u)=>{if(!A||a.defaultPrevented||a.altKey||a.metaKey||a.ctrlKey)return;const d=a.target;if(d){const R=d.tagName;if(R==="INPUT"||R==="TEXTAREA"||R==="SELECT"||d.isContentEditable)return}if(a.key==="ArrowDown"){u<i-1&&(a.preventDefault(),Ge(u+1));return}if(a.key==="ArrowUp"){u>0&&(a.preventDefault(),Ge(u-1));return}if(a.key==="PageDown"){if(u<i-1){a.preventDefault();const{visibleStartIndex:R,visibleEndIndex:O}=K.current,w=Math.max(O-R+1,1),B=Math.max(w,1),X=le(Math.min(u+B,i-1),i);Ge(X)}return}if(a.key==="PageUp"&&u>0){a.preventDefault();const{visibleStartIndex:R,visibleEndIndex:O}=K.current,w=Math.max(O-R+1,1),B=Math.max(w,1),X=le(u-B,i);Ge(X)}},[A,i,Ge]),St=r.useCallback(a=>{if(!A)return;const u=le(a,i);U.current=null,ie.current=u,W?.(u)},[A,i,W]);r.useEffect(()=>{const a=z.current?.getScrollPosition()??0,u=k.current,d=Ze(u,C.top);E.debug("[VirtualScroll] Range change effect triggered",()=>({renderingStartIndex:We,renderingEndIndex:ze,visibleStartIndex:et,visibleEndIndex:ot,scrollPositionState:Ve,paneScrollPosition:u,logicalScrollPosition:d,contentSize:S,scrollPaneScrollPosition:a})),we({renderingStartIndex:We,renderingEndIndex:ze,visibleStartIndex:et,visibleEndIndex:ot,scrollPosition:d,totalHeight:S})},[S,ze,We,C.top,we,Ve,ot,et]);const Pt=r.useCallback(()=>{if(!y)return null;const a=Ae&&fe!==null,u=fe==="up";return H.jsx("div",{className:"aqvs-scroll-to-edge-overlay","data-visible":a,children:u?H.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top",children:H.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:d=>{d.stopPropagation(),Be.current=!0,Fe(0),Ce(!1)},children:"Top"})}):H.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom",children:H.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:d=>{d.stopPropagation(),Be.current=!0,Fe(i-1),Ce(!1)},children:"Bottom"})})})},[y,Ae,fe,Fe,i]),lt=r.useRef(0),{visibleItems:ct,renderAnchor:l}=r.useMemo(()=>{if(i===0)return{visibleItems:H.jsx("div",{className:"aqvs-no-items-container",children:H.jsx("div",{className:"aqvs-no-items-text",children:"No items"})}),renderAnchor:0};const a=le(We,i),u=le(ze,i),{cumulative:d,currentValue:R}=v.prefixSum(a,{materializeOption:{materialize:!1}}),O=d-R;Number.isFinite(O)&&Math.abs(O-lt.current)>hr&&(lt.current=O);const w=lt.current,B=[],X=[];let ae=0,G=O;for(let ne=a;ne<=u;ne++){if(X.length>=Ot){E.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.",{cap:Ot,safeRenderingStartIndex:a,safeRenderingEndIndex:u});break}const Te=n(ne),Ie=v.get(ne),Me=Te-Ie;Me!==0&&B.push({index:ne,value:Te});const st=G+ae,tt=t?t(ne):ne;X.push(H.jsx(xr,{index:ne,top:st-w,height:Te,item:e(ne),clipItemHeight:ue,enableKeyboardNavigation:A,onKeyDown:vt,onFocus:St,registerItemRef:Ne,children:I},tt)),ae+=Me,G+=Ie}return B.length>0&&Promise.resolve().then(()=>{if(ve.current)return;let ne=0;for(const Me of B)if(Me.index<et){const st=v.get(Me.index);ne+=Me.value-st}const Te=v.updates(B);if(ve.current||typeof Te!="number")return;L(Te),E.debug("[VirtualScroll] Updated heights for items",B,"New total height:",Te);const Ie=z.current?.getScrollPosition()??k.current;if(ne!==0){const Me=Ie+ne;Oe(Me),re(Me,{immediate:!0}),E.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)",{from:Ie,to:Me,shiftAmount:ne})}else Ie!==k.current&&re(Ie)}),{visibleItems:X,renderAnchor:w}},[I,ue,S,A,i,v,e,t,n,St,vt,Oe,Ne,ze,We,re,et]),g=r.useCallback(a=>{const u=(V??0)>0,d=Math.abs(a-Ve),R=u&&d>.5?Ve:a,O=Ze(R,C.top);if(E.debug("[VirtualScroll] Rendering visible items",()=>({currentScrollPosition:a,effectiveScrollPosition:O,renderingStartIndex:We,renderingEndIndex:ze,itemCount:i,viewportSize:s,callbackThrottleMs:V,diff:d,rawEffectiveScrollPosition:R})),i===0)return ct;const w=C.top+l-R,B=C.bottom>0?H.jsx("div",{className:"aqvs-bottom-inset",style:{top:v.getTotal()-l,height:C.bottom}},"virtualscroll-bottom-inset"):null;return E.debug("[VirtualScroll] Rendering items",()=>({containerTop:w,logicalScrollPosition:Ke,resolvedInsets:C,effectiveScrollPosition:O})),H.jsxs("div",{className:"aqvs-items-wrapper",style:{top:0,transform:`translateY(${w}px)`,willChange:"transform"},children:[ct,B]})},[V,i,v,Ke,l,ze,We,C,Ve,s,ct]),M=r.useMemo(()=>({renderingStartIndex:Qe.renderingStartIndex,renderingEndIndex:Qe.renderingEndIndex,visibleStartIndex:Qe.visibleStartIndex,visibleEndIndex:Qe.visibleEndIndex,scrollPosition:Ke,totalHeight:v.getTotal()}),[Qe,Ke,v,S]);r.useEffect(()=>{K.current=M},[M]),r.useImperativeHandle(Re,()=>({getScrollPosition:()=>z.current?.getScrollPosition()??-1,getContentSize:()=>z.current?.getContentSize()??-1,getViewportSize:()=>z.current?.getViewportSize()??-1,scrollTo:It,scrollToIndex:Fe,getFenwickTreeTotalHeight:()=>v.getTotal(),getFenwickSize:()=>v.getSize(),focusItemAtIndex:Ge,getRange:()=>K.current,updateItemSize:mt}),[It,Fe,v,Ge,mt]);const _=v.getTotal()+C.top+C.bottom;return H.jsx(Bt,{ref:z,contentSize:_,viewportSize:s,className:c,testId:f,onScroll:pt,background:T,tapScrollCircleOptions:q,inertiaOptions:$,itemCount:i,scrollBarWidth:Ee,enableThumbDrag:F,enableTrackClick:Y,enableArrowButtons:P,enablePointerDrag:J,renderThumbOverlay:j,wheelSpeedMultiplier:b,onWheelHorizontal:se,contentInsets:C,visibleStartIndex:et,visibleEndIndex:ot,renderOverlay:Pt,initialScrollPosition:_e.position,children:g})},vr=r.forwardRef(Ir);exports.FenwickMapTree=Je;exports.ScrollBar=Yt;exports.ScrollPane=Bt;exports.VirtualScroll=vr;exports.minmax=ce;exports.tapScrollCircleSampleVisual=cr;exports.useFenwickMapTree=qt;exports.useHeightCache=pr;exports.useLruCache=Ht;
|