@aiquants/virtualscroll 1.23.0 → 1.25.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/CHANGELOG.md CHANGED
@@ -2,6 +2,49 @@
2
2
 
3
3
  All notable changes to `@aiquants/virtualscroll` are documented here.
4
4
 
5
+ ## 1.25.0 (公開予定)
6
+
7
+ ### Added
8
+
9
+ - **`initialScrollAnchor`** prop (`{ index, offsetPx? }`) — anchor-based initial position for exact
10
+ scroll restoration across remounts of variable-height lists. Positions row `index` with `offsetPx`
11
+ px of it hidden above the viewport top, materializing the anchor neighborhood in the Fenwick tree
12
+ so the FIRST paint is already correct (no post-mount jump). Precedence:
13
+ `initialScrollAnchor > initialScrollIndex > initialScrollOffset`.
14
+ 可変高さ一覧の再マウント越し厳密復元用。生 px 復元 (`initialScrollOffset`) は実測が具現化されて
15
+ いない空間では別の行に着地する (実測 21 行漂着) ため、行の同一性で位置決めする。
16
+ - **`VirtualScrollHandle.getScrollAnchor()`** — captures the current top visible row anchor
17
+ (`{ index, offsetPx } | null`) in the reconciled tree space; feed it back to `initialScrollAnchor`.
18
+
19
+ ### Fixed
20
+
21
+ - Passing `initialScrollIndex` together with `initialScrollOffset` no longer lets the offset stomp
22
+ the index position one commit after first paint (the passive initial-offset effect now respects
23
+ the precedence order).
24
+
25
+ ## 1.24.0
26
+
27
+ ### Changed
28
+
29
+ - **Inset coordinate endpoint unified**: `toPanePositionWithInset(0, top)` now maps logical 0 to
30
+ **pane 0** (top inset visible = true top) instead of pane `top`. This aligns the restore path with
31
+ the mount default and the ScrollPane clamp resting point, eliminating the "restored logical 0
32
+ renders a few px scrolled" asymmetry (measured 6px in daily-report). `scrollToIndex(0)` now returns
33
+ to pane 0 as well.
34
+
35
+ ### Fixed
36
+
37
+ - `useThrottledInvoker` now **flushes the pending payload synchronously on unmount** instead of
38
+ discarding it, so save-on-scroll consumers no longer lose the final queued `onScroll` /
39
+ `onRangeChange` notification when unmounted mid-fling (residual loss is bounded to at most one
40
+ frame of movement after the last render-loop tick).
41
+
42
+ ### Known issues
43
+
44
+ - Dynamic `contentInsets.top` changes while a `scrollToIndex` /`initialScrollIndex` anchor is
45
+ pending can double-apply the inset delta (pre-existing; no in-repo production consumer passes
46
+ dynamic insets). See the design spec's known-issue note.
47
+
5
48
  ## 1.23.0
6
49
 
7
50
  ### Added
@@ -24,7 +67,7 @@ All notable changes to `@aiquants/virtualscroll` are documented here.
24
67
  See **Composite widget roles** in the README for the `enableKeyboardNavigation: false` requirement
25
68
  that makes the intermediate wrappers transparent to the owned-element relationship.
26
69
 
27
- ## 1.21.0 — Unreleased
70
+ ## 1.21.0
28
71
 
29
72
  ### Breaking
30
73
 
package/README.md CHANGED
@@ -207,7 +207,8 @@ exists in the DOM.
207
207
  | `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). |
208
208
  | `background` | `ReactNode` | ❌ | Background element |
209
209
  | `initialScrollIndex` | `number` | ❌ | Initial scroll index |
210
- | `initialScrollOffset` | `number` | ❌ | Initial scroll offset |
210
+ | `initialScrollOffset` | `number` | ❌ | Initial scroll offset (**logical** px). Not suitable for restoring positions of variable-height lists across remounts — use `initialScrollAnchor` |
211
+ | `initialScrollAnchor` | `{ index: number; offsetPx?: number }` | ❌ | Anchor-based initial position (1.25.0): starts with row `index` scrolled `offsetPx` px past the viewport top, exact from the first commit. Save side: `getScrollAnchor()`. Precedence: anchor > `initialScrollIndex` > `initialScrollOffset` |
211
212
  | `contentInsets` | `ScrollPaneContentInsets` | ❌ | Insets for the content area |
212
213
  | `callbackThrottleMs` | `number` | ❌ | Throttle time for scroll callbacks (default: 5ms) |
213
214
  | `onItemFocus` | `(index: number) => void` | ❌ | Callback when an item is focused |
@@ -243,13 +244,23 @@ exists in the DOM.
243
244
 
244
245
  | Method | Type | Description |
245
246
  | --- | --- | --- |
246
- | `scrollTo` | `(position: number) => void` | Scroll to specific position |
247
+ | `scrollTo` | `(position: number \| ((prev: number) => number)) => number` | Scroll to a **logical** position (updater form supported). Returns the applied **pane** position |
247
248
  | `scrollToIndex` | `(index: number, options?: { align?: "top" \| "bottom" \| "center"; offset?: number }) => void` | Scroll to specific item index with optional alignment and offset |
248
- | `getScrollPosition` | `() => number` | Get current scroll position |
249
- | `getContentSize` | `() => number` | Get total content size |
249
+ | `getScrollPosition` | `() => number` | Get current **pane** scroll position (`-1` when the pane is not connected) |
250
+ | `getContentSize` | `() => number` | Get total content size (insets included) |
250
251
  | `getViewportSize` | `() => number` | Get viewport size |
251
252
  | `focusItemAtIndex` | `(index: number, options?: { ensureVisible?: boolean }) => void` | Focus item at specific index |
252
- | `getRange` | `() => VirtualScrollRange` | Get current range information |
253
+ | `getRange` | `() => VirtualScrollRange` | Get current range information (updated one render behind) |
254
+ | `getScrollAnchor` | `() => { index: number; offsetPx: number } \| null` | Capture the current top visible row anchor for exact restore via `initialScrollAnchor` (`null` when `itemCount` is 0) |
255
+ | `getFenwickTreeTotalHeight` | `() => number` | Total content height managed by the Fenwick tree (insets excluded) |
256
+ | `getFenwickSize` | `() => number` | Item count managed by the Fenwick tree |
257
+ | `updateItemSize` | `(index: number, size: number) => void` | Manually update one item's size (with layout-shift compensation). `getItemHeight(index)` must return the same value afterwards |
258
+
259
+ **Coordinate systems**: with `contentInsets`, positions exist in two spaces — **logical** (content px,
260
+ insets excluded: `onScroll` / `onRangeChange` deliver it; `initialScrollOffset` / `scrollTo` input /
261
+ `getScrollAnchor` consume and produce it) and **pane** (insets included: `getScrollPosition` /
262
+ `scrollTo` return value). Logical 0 maps to pane 0 (true top, top inset visible; unified in 1.24.0).
263
+ Mixing the two spaces produces a permanent few-px offset.
253
264
 
254
265
  ### VirtualScrollRange
255
266
 
@@ -41,6 +41,15 @@ export type VirtualScrollHandle = ScrollPaneHandle & {
41
41
  }) => void;
42
42
  /** Gets the current scroll range information / 現在のスクロール範囲情報を取得 */
43
43
  getRange: () => VirtualScrollRange;
44
+ /**
45
+ * Captures the current top-row anchor ({index, offsetPx}) for exact restore via initialScrollAnchor.
46
+ * initialScrollAnchor での厳密復元用に、現在の先頭可視行アンカー ({index, offsetPx}) を取得。
47
+ * itemCount 0 のときは null。offsetPx は先頭可視行の上端がビューポート上端より上に隠れている px (論理座標)。
48
+ */
49
+ getScrollAnchor: () => {
50
+ index: number;
51
+ offsetPx: number;
52
+ } | null;
44
53
  /**
45
54
  * Manually updates the size of a specific item. Contract: after calling this,
46
55
  * `getItemHeight(index)` must return the same `size`; `getItemHeight` is the source of truth,
@@ -130,6 +139,22 @@ export type VirtualScrollProps<T> = {
130
139
  children: (item: T, index: number) => ReactNode;
131
140
  initialScrollIndex?: number;
132
141
  initialScrollOffset?: number;
142
+ /**
143
+ * Anchor-based initial position: starts with row `index` scrolled `offsetPx` px past the viewport top.
144
+ * アンカー基準の初期位置。行 index の上端がビューポート上端より offsetPx px 分だけ上に隠れた位置で開始する。
145
+ *
146
+ * 可変高さ一覧の「位置キープ」はこれを使うこと。initialScrollOffset の生 px 復元は、実測高さが
147
+ * 具現化されていない再マウント空間では px→行変換が推定値で行われ、別の行に着地する
148
+ * (実測: 深い復元で 21 行漂着)。アンカーは行の同一性で位置決めするため空間差に不変。
149
+ * 保存側は VirtualScrollHandle.getScrollAnchor() で取得した値をそのまま渡す。
150
+ * 優先順位: initialScrollAnchor > initialScrollIndex > initialScrollOffset。
151
+ * マウント時に itemCount > 0 なら初回コミットから厳密。itemCount 0 でマウントした場合は
152
+ * 最初のデータ到着 (0 → N) 時に scrollToIndex 経由で遅延適用される (近似 → 自己修復)。
153
+ */
154
+ initialScrollAnchor?: {
155
+ index: number;
156
+ offsetPx?: number;
157
+ };
133
158
  callbackThrottleMs?: number;
134
159
  contentInsets?: ScrollPaneProps["contentInsets"];
135
160
  onItemFocus?: (index: number) => void;
@@ -41,6 +41,15 @@ export type VirtualScrollHandle = ScrollPaneHandle & {
41
41
  }) => void;
42
42
  /** Gets the current scroll range information / 現在のスクロール範囲情報を取得 */
43
43
  getRange: () => VirtualScrollRange;
44
+ /**
45
+ * Captures the current top-row anchor ({index, offsetPx}) for exact restore via initialScrollAnchor.
46
+ * initialScrollAnchor での厳密復元用に、現在の先頭可視行アンカー ({index, offsetPx}) を取得。
47
+ * itemCount 0 のときは null。offsetPx は先頭可視行の上端がビューポート上端より上に隠れている px (論理座標)。
48
+ */
49
+ getScrollAnchor: () => {
50
+ index: number;
51
+ offsetPx: number;
52
+ } | null;
44
53
  /**
45
54
  * Manually updates the size of a specific item. Contract: after calling this,
46
55
  * `getItemHeight(index)` must return the same `size`; `getItemHeight` is the source of truth,
@@ -130,6 +139,22 @@ export type VirtualScrollProps<T> = {
130
139
  children: (item: T, index: number) => ReactNode;
131
140
  initialScrollIndex?: number;
132
141
  initialScrollOffset?: number;
142
+ /**
143
+ * Anchor-based initial position: starts with row `index` scrolled `offsetPx` px past the viewport top.
144
+ * アンカー基準の初期位置。行 index の上端がビューポート上端より offsetPx px 分だけ上に隠れた位置で開始する。
145
+ *
146
+ * 可変高さ一覧の「位置キープ」はこれを使うこと。initialScrollOffset の生 px 復元は、実測高さが
147
+ * 具現化されていない再マウント空間では px→行変換が推定値で行われ、別の行に着地する
148
+ * (実測: 深い復元で 21 行漂着)。アンカーは行の同一性で位置決めするため空間差に不変。
149
+ * 保存側は VirtualScrollHandle.getScrollAnchor() で取得した値をそのまま渡す。
150
+ * 優先順位: initialScrollAnchor > initialScrollIndex > initialScrollOffset。
151
+ * マウント時に itemCount > 0 なら初回コミットから厳密。itemCount 0 でマウントした場合は
152
+ * 最初のデータ到着 (0 → N) 時に scrollToIndex 経由で遅延適用される (近似 → 自己修復)。
153
+ */
154
+ initialScrollAnchor?: {
155
+ index: number;
156
+ offsetPx?: number;
157
+ };
133
158
  callbackThrottleMs?: number;
134
159
  contentInsets?: ScrollPaneProps["contentInsets"];
135
160
  onItemFocus?: (index: number) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualScroll.d.ts","sourceRoot":"","sources":["../src/VirtualScroll.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VirtualScroll.d.ts","sourceRoot":"","sources":["../src/VirtualScroll.tsx"],"names":[],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const B=require("react/jsx-runtime"),r=require("react"),ut=require("tailwind-merge");class y{level;prefix;impl;constructor(e=2,t="[virtualscroll]",n=console){this.level=e,this.prefix=t,this.impl=n}static instance=new y(2,"[virtualscroll]");static setLevel(e){y.instance.setLevel(e)}setLevel(e){this.level=e}static setImplementation(e){y.instance.setImplementation(e)}setImplementation(e){this.impl=e}static setPrefix(e){y.instance.setPrefix(e)}setPrefix(e){this.prefix=e}static isEnabled(e){return y.instance.isEnabled(e)}isEnabled(e){return this.level<=e}static resolveLazy(e){if(typeof e!="function")return e;try{return e()}catch{return e}}formatMessage(e){return typeof e=="string"?[`${this.prefix} ${e}`]:[this.prefix,e]}static debug(e,...t){y.instance.debug(e,...t)}debug(e,...t){this.level<=0&&this.impl.debug(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}static info(e,...t){y.instance.info(e,...t)}info(e,...t){this.level<=1&&this.impl.info(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}static warn(e,...t){y.instance.warn(e,...t)}warn(e,...t){this.level<=2&&this.impl.warn(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}static error(e,...t){y.instance.error(e,...t)}error(e,...t){this.level<=3&&this.impl.error(...this.formatMessage(y.resolveLazy(e)),...t.map(y.resolveLazy))}}const _t={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Et=6,Gt=8,Zt=({dragState:s,normalizedDistance:e})=>{const t=1+e*.18,n=.16+e*.24,i=.38+e*.28,a=s.active?"80ms ease-out":"220ms ease";return B.jsxs(B.Fragment,{children:[B.jsx("div",{className:"aqvs-tap-scroll-circle-visual-outer",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.62), rgba(72,72,72,0.48))",boxShadow:`0 0 0 1px rgba(255,255,255,0.28), 0 10px 22px rgba(0,0,0,${n})`,transform:`scale(${t})`,transition:`${a}, ${s.active?"80ms":"260ms"} box-shadow ease`}}),B.jsx("div",{className:"aqvs-tap-scroll-circle-inner",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.72), rgba(28,28,28,0.58))",boxShadow:"inset 0 4px 10px rgba(0,0,0,0.24), inset 0 0 2px rgba(255,255,255,0.55)",opacity:i,transition:s.active?"120ms opacity ease-out":"220ms opacity ease"}})]})},Ht=r.memo(r.forwardRef(({onDragChange:s,className:e,maxVisualDistance:t=160,size:n=40,style:i,opacity:a=1,renderVisual:l},f)=>{const[d,x]=r.useState(_t),I=r.useRef(null),S=r.useRef(null),w=r.useRef({x:0,y:0}),p=r.useRef(null),D=r.useRef(0),Y=r.useCallback(T=>{x(T),s(T)},[s]),G=r.useCallback((T,k,Ie=!1)=>{const{x:Oe,y:Re}=w.current,Z=T-Oe,O=k-Re,Ce=Math.abs(O),U=Ce<Et?0:O<0?-1:1,ke=D.current;let v=U;const Xe=Et+Gt;U===0?ke!==0&&Ce<Xe?v=ke:(v=0,Ie||(D.current=0)):U!==ke&&ke!==0&&Ce<Xe?v=ke:D.current=U,Y({active:Ie||Ce>=Et,offsetX:Z,offsetY:O,distance:Ce,direction:v,pointerId:I.current})},[Y]),le=r.useCallback(T=>{if(T===null)return;const k=p.current;k?.hasPointerCapture(T)&&k.releasePointerCapture(T)},[]),te=r.useCallback((T=!1)=>{T&&le(I.current),I.current=null,S.current=null,D.current=0,Y(_t)},[Y,le]),re=r.useCallback(T=>{if(I.current!==null&&I.current!==T.pointerId){S.current={pointerId:T.pointerId,clientX:T.clientX,clientY:T.clientY},T.preventDefault(),T.stopPropagation();return}T.preventDefault(),T.stopPropagation();const k=p.current??T.currentTarget,{left:Ie,top:Oe,width:Re,height:Z}=k.getBoundingClientRect();w.current={x:Ie+Re/2,y:Oe+Z/2},I.current=T.pointerId;try{k.setPointerCapture(T.pointerId)}catch{}G(T.clientX,T.clientY,!0)},[G]),de=r.useCallback(T=>{if(I.current!==T.pointerId){S.current!==null&&S.current.pointerId===T.pointerId&&(S.current={pointerId:T.pointerId,clientX:T.clientX,clientY:T.clientY});return}T.preventDefault(),G(T.clientX,T.clientY)},[G]),Se=r.useCallback(T=>{if(I.current!==T.pointerId){S.current!==null&&S.current.pointerId===T.pointerId&&(S.current=null);return}T.preventDefault(),T.stopPropagation();const k=S.current;if(S.current=null,k!==null){le(T.pointerId);const Ie=p.current;let Oe=!0;if(Ie!==null&&typeof Ie.setPointerCapture=="function")try{Ie.setPointerCapture(k.pointerId)}catch(Re){(typeof Re=="object"&&Re!==null&&"name"in Re?Re.name:void 0)==="NotFoundError"&&(Oe=!1)}if(Oe){I.current=k.pointerId,G(k.clientX,k.clientY,!0);return}}te(!0)},[te,le,G]),A=r.useCallback(T=>{T.target===T.currentTarget&&I.current===T.pointerId&&te(!1)},[te]);r.useImperativeHandle(f,()=>({reset:()=>{te(!0)},getElement:()=>p.current}),[te]);const L=Math.min(Math.max(a,0),1),M=n/64,H=Math.min(d.distance,t)/t,X=d.direction*H*10*M,E=l??Zt,ae={dragState:d,normalizedDistance:H,sizeScale:M,size:n,opacity:L},$={...i,width:n,height:n,transform:`translateY(${X}px)`};return $.opacity=L,B.jsx("div",{ref:p,"data-testid":"virtual-scroll-tap-circle",className:ut.twMerge("aqvs-tap-scroll-circle",e),style:$,tabIndex:-1,onPointerDown:re,onPointerMove:de,onPointerUp:Se,onPointerCancel:Se,onLostPointerCapture:A,role:"presentation",children:E(ae)})}));Ht.displayName="TapScrollCircle";const xe=(s,e,t)=>Math.max(e,Math.min(t,s)),Dt="virtualscroll:tap-scroll-cancel",Ot=20,Jt=250,Qt=60,er=20,tr=20,Lt={maxDistance:240,minSpeedMultiplier:.2},rr=Lt.maxDistance,Ft={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},kt=2.2,nr=8,sr=120,ir=1/10,Ke={enabled:!0,size:40,offsetX:-80,offsetY:0,className:void 0,maxVisualDistance:rr,minSpeedMultiplier:Lt.minSpeedMultiplier,opacity:.9,renderVisual:void 0,maxSpeedCurve:void 0},ar=s=>s?{mainSizeKey:"width",crossSizeKey:"height",positionKey:"left",selectDelta:(e,t)=>e,getPointerCoordinate:({clientX:e})=>e,arrowLabels:["Scroll left","Scroll right"],arrowIcons:["◀","▶"],directionClass:"aqvs-scrollbar-horizontal",orientation:"horizontal"}:{mainSizeKey:"height",crossSizeKey:"width",positionKey:"top",selectDelta:(e,t)=>t,getPointerCoordinate:({clientY:e})=>e,arrowLabels:["Scroll up","Scroll down"],arrowIcons:["▲","▼"],directionClass:"aqvs-scrollbar-vertical",orientation:"vertical"},or=(s,e)=>{const t=s?.maxSpeedMultiplier,n=typeof t=="number"?t:jt(e);return{enabled:s?.enabled??Ke.enabled,size:s?.size??Ke.size,offsetX:s?.offsetX??Ke.offsetX,offsetY:s?.offsetY??Ke.offsetY,className:s?.className??Ke.className,maxVisualDistance:s?.maxVisualDistance??Ke.maxVisualDistance,maxSpeedMultiplier:n,minSpeedMultiplier:Math.max(s?.minSpeedMultiplier??Ke.minSpeedMultiplier,0),opacity:xe(s?.opacity??Ke.opacity,0,1),renderVisual:s?.renderVisual??Ke.renderVisual,maxSpeedCurve:s?.maxSpeedCurve??Ke.maxSpeedCurve}},lr=({isDragging:s,isThumbHovered:e,enableThumbDrag:t})=>r.useMemo(()=>t?s?"dragging":e?"hover":"idle":"disabled",[t,s,e]),cr=({canUseArrowButtons:s,enableArrowButtons:e,resetTapScroll:t,scrollByStep:n})=>{const i=r.useRef(null),a=r.useRef(null),l=r.useRef(null),f=r.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null),a.current!==null&&(window.clearTimeout(a.current),a.current=null),l.current!==null&&(window.removeEventListener("pointerup",l.current),window.removeEventListener("pointercancel",l.current),window.removeEventListener("blur",l.current),l.current=null)},[]),d=r.useCallback(()=>{f()},[f]),x=r.useCallback(S=>w=>{if(!s)return;w.cancelable&&w.preventDefault(),w.stopPropagation(),t(),f(),n(S),a.current=window.setTimeout(()=>{i.current=window.setInterval(()=>{n(S)},Qt)},Jt);const p=()=>f();l.current=p,window.addEventListener("pointerup",p),window.addEventListener("pointercancel",p),window.addEventListener("blur",p)},[s,f,t,n]),I=r.useCallback(S=>w=>{e&&(w.key==="Enter"||w.key===" "||w.key==="Spacebar")&&(w.preventDefault(),n(S))},[e,n]);return r.useEffect(()=>{s||f()},[s,f]),r.useEffect(()=>()=>{f()},[f]),{handleArrowPointerDown:x,handleArrowPointerUp:d,handleArrowKeyDown:I}},ur=700,ct=(s,e)=>typeof s=="number"&&Number.isFinite(s)?s:e,Xt=({distance:s,maxDistance:e,viewportSize:t,minSpeedMultiplier:n,maxSpeedMultiplier:i,hasCustomMaxSpeedMultiplier:a,curve:l})=>{const f=Math.max(ct(s,0),0),d=ct(e,0),x=d>0?Math.min(f,d)/d:1,I=Math.max(ct(t,0),0),S=Math.max(ct(n,0),0),w=Math.max(ct(i,0),0),p=Math.max(I*S,40),D=a?p:1200,Y=Math.max(I*w,D),G=l?Math.max(ct(l.exponentialScale,w),0):0,le=l?Math.min(Y,Math.max(I*G,p)):Y,te=Math.max(le,p);let re=x**1.1;if(l){const Se=Math.min(Math.max(ct(l.exponentialSteepness,0),0),ur);if(Se===0)re=x;else{const A=Math.expm1(Se)||1;re=Math.min(Math.max(Math.expm1(Se*x)/A,0),1)}}const de=Math.min(Math.max(ct(l?.easedOffset,0),0),1);return p+(te-p)*(de+(1-de)*re)},jt=s=>{if(!s||s<=0)return kt;const e=Math.max(1,s),t=Math.log10(e),n=kt+t*nr;return xe(n,kt,sr)},$t=({contentSize:s,viewportSize:e,scrollPosition:t,onScroll:n,enableThumbDrag:i=!0,enableTrackClick:a=!0,enableArrowButtons:l=!0,horizontal:f=!1,scrollBarWidth:d=12,className:x,ariaControls:I,tapScrollCircleOptions:S,itemCount:w,renderThumbOverlay:p,visibleStartIndex:D,visibleEndIndex:Y})=>{const[G,le]=r.useState(!1),[te,re]=r.useState(!1),[de,Se]=r.useState(!1),A=r.useRef(null),L=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null}),M=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}),H=r.useRef(t),X=r.useRef(n),E=r.useRef(Ft),ae=r.useRef(null),$=r.useRef(null),T=r.useRef(null),k=r.useRef(0),Ie=r.useRef(0),Oe=r.useMemo(()=>or(S,w),[w,S]),Re=r.useMemo(()=>ar(f),[f]),{enabled:Z,size:O,offsetX:Ce,offsetY:U,className:ke,maxVisualDistance:v,maxSpeedMultiplier:Xe,minSpeedMultiplier:st,opacity:N,renderVisual:K,maxSpeedCurve:Fe}=Oe,Ae=r.useRef({viewportSize:e,maxScrollPosition:Math.max(s-e,0),scrollBarVisible:s>e,effectiveTapMaxDistance:Math.max(v,1),tapCircleMaxSpeedMultiplier:Xe,tapCircleMinSpeedMultiplier:st,tapCircleMaxSpeedCurve:Fe,tapScrollCircleOptions:S,effectiveTrackLength:0,onScroll:n,scrollPosition:t}),{mainSizeKey:ye,crossSizeKey:Be,positionKey:ce,selectDelta:h,getPointerCoordinate:ue,arrowLabels:fe,arrowIcons:F,directionClass:ee,orientation:oe}=Re,Ve=Math.max(v,1),De=e/s,Me=Math.max(e-d*2,0),ne=De*Me,me=Math.min(Math.max(Ot,ne||0),Me||Ot),se=s-e,J=Math.max(Me-me,0),ze=se<=0||J<=0?0:xe(t/se*J,0,J),it=ze+me/2,we=s>e||G,qe=we&&l;r.useLayoutEffect(()=>{Ae.current={viewportSize:e,maxScrollPosition:se,scrollBarVisible:we,effectiveTapMaxDistance:Ve,tapCircleMaxSpeedMultiplier:Xe,tapCircleMinSpeedMultiplier:st,tapCircleMaxSpeedCurve:Fe,tapScrollCircleOptions:S,effectiveTrackLength:J,onScroll:n,scrollPosition:t}}),r.useLayoutEffect(()=>{H.current=t},[t]),r.useLayoutEffect(()=>{X.current=n},[n]),r.useEffect(()=>{i||re(!1)},[i]);const Ue=lr({isDragging:G,isThumbHovered:te,enableThumbDrag:i}),Ee=r.useCallback((o,b)=>{const R=Ae.current,V=b??H.current;if(X.current){const u=X.current(o,V);if(typeof u=="number"&&Number.isFinite(u))return H.current=u,u}const q=typeof o=="function"?o(V):o,Te=Math.max(R.maxScrollPosition,0),c=R.scrollBarVisible?xe(q,0,Te):0;return H.current=c,c},[]),m=r.useCallback(o=>{const b=Ae.current,R=H.current;if(!b.scrollBarVisible||b.maxScrollPosition<=0){const C=Ee(0,R),_=C-R;return{nextPosition:C,actualDelta:_,reachedBoundary:!0}}if(o===0)return{nextPosition:R,actualDelta:0,reachedBoundary:!1};const q=Ee(C=>xe(C+o,0,b.maxScrollPosition),R),Te=q-R,c=o<0&&R+o<=0,u=o>0&&R+o>=b.maxScrollPosition,g=o<0&&(q<=0||c&&Te===0)||o>0&&(q>=b.maxScrollPosition||u&&Te===0);return{nextPosition:q,actualDelta:Te,reachedBoundary:g}},[Ee]),P=r.useCallback((o,b)=>{o.current+=b;const R=Math.max(Ae.current.maxScrollPosition,0);R>0&&(o.current=xe(o.current,-R,R));const V=m(o.current);return o.current-=V.actualDelta,V.reachedBoundary&&(o.current=0),V},[m]),ie=r.useCallback(()=>{$.current!==null&&(window.cancelAnimationFrame($.current),$.current=null),T.current=null,k.current=0,Ie.current=0},[]),pe=r.useCallback(()=>{E.current={...Ft},Se(!1),ae.current?.reset(),ie()},[ie]),ve=r.useCallback(o=>{const b=E.current,R=Ae.current;if(!b.active||b.direction===0){ie();return}if(!R.scrollBarVisible||R.maxScrollPosition<=0){ie();return}const V=T.current??o,q=Math.max((o-V)/1e3,0),Te=Math.min(q,ir);if(T.current=o,Te<=0){$.current=window.requestAnimationFrame(ve);return}const c=Xt({distance:b.distance,maxDistance:R.effectiveTapMaxDistance,viewportSize:R.viewportSize,minSpeedMultiplier:R.tapCircleMinSpeedMultiplier,maxSpeedMultiplier:R.tapCircleMaxSpeedMultiplier,hasCustomMaxSpeedMultiplier:typeof R.tapScrollCircleOptions?.maxSpeedMultiplier=="number",curve:R.tapCircleMaxSpeedCurve});Ie.current!==b.direction&&(Ie.current=b.direction,k.current=0);const{reachedBoundary:u}=P(k,b.direction*c*Te);if(u){ie();return}$.current=window.requestAnimationFrame(ve)},[P,ie]),We=r.useCallback(()=>{$.current===null&&(T.current=null,k.current=0,$.current=window.requestAnimationFrame(ve))},[ve]);r.useEffect(()=>{const o=E.current;!o.active||o.direction===0||We()},[s,e,We]),r.useEffect(()=>()=>{ie()},[ie]);const Ye=r.useCallback(o=>{E.current=o,Se(o.active),o.active&&o.direction!==0?We():ie()},[We,ie]);r.useEffect(()=>{Z||pe()},[pe,Z]),r.useEffect(()=>{const o=b=>{const V=b.detail?.paneId;V&&I&&V!==I||pe()};return window.addEventListener(Dt,o),()=>{window.removeEventListener(Dt,o)}},[I,pe]),r.useEffect(()=>{if(!Z)return;const o=b=>{if(!E.current.active||E.current.pointerId===b.pointerId)return;const R=b.target;if(!(R instanceof Node)){pe();return}ae.current?.getElement()?.contains(R)||pe()};return document.addEventListener("pointerdown",o,!0),()=>{document.removeEventListener("pointerdown",o,!0)}},[pe,Z]);const He=o=>{if(!we||J<=0||se<=0)return 0;const b=xe(o,0,J);return xe(b/J*se,0,se)},Ge=r.useCallback(o=>{const{scrollBarVisible:b,effectiveTrackLength:R,maxScrollPosition:V}=Ae.current;if(y.debug("[ScrollBar] calculateScrollPositionFromThumb",()=>({thumbPos:o,trackLen:R,maxScroll:V})),R<=0||V<=0)return null;const q=xe(o,0,R);return xe(q/R*V,0,V)},[]),at=r.useCallback(o=>{const b=o.getBoundingClientRect(),R=f?b.width:b.height,V=g=>{const C=Number.parseFloat(g);return Number.isFinite(C)?C:0},q=window.getComputedStyle(o),Te=V(f?q.width:q.height),c=Te>0?Te+V(f?q.paddingLeft:q.paddingTop)+V(f?q.paddingRight:q.paddingBottom)+V(f?q.borderLeftWidth:q.borderTopWidth)+V(f?q.borderRightWidth:q.borderBottomWidth):0,u=c>0?c:f?o.offsetWidth:o.offsetHeight;return u<=0||R<=0?1:R/u},[f]),ot=r.useCallback(o=>{const b=L.current;if(b.pointerId!==o.pointerId)return;const R=o.clientX-b.startClientX,V=o.clientY-b.startClientY,q=h(R,V)/(b.scale||1);y.debug("[ScrollBar] handleThumbPointerMove",()=>({delta:q,startThumbPosition:b.startThumbPosition,clientY:o.clientY,startClientY:b.startClientY,metrics:Ae.current}));const Te=Ge(b.startThumbPosition+q);Te!==null&&Ee(Te),o.cancelable&&o.preventDefault()},[h,Ge,Ee]),Q=r.useCallback(o=>{const b=L.current;if(b.pointerId!==o.pointerId)return;document.removeEventListener("pointermove",ot),document.removeEventListener("pointerup",Q),document.removeEventListener("pointercancel",Q);const R=b.captureTarget;if(R?.hasPointerCapture?.(o.pointerId)&&R.releasePointerCapture(o.pointerId),L.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null},le(!1),A.current){const V=A.current.getBoundingClientRect();o.clientX>=V.left&&o.clientX<=V.right&&o.clientY>=V.top&&o.clientY<=V.bottom||re(!1)}else re(!1)},[ot]);r.useEffect(()=>()=>{document.removeEventListener("pointermove",ot),document.removeEventListener("pointerup",Q),document.removeEventListener("pointercancel",Q)},[ot,Q]);const Ze=r.useRef(0),ht=r.useRef(0),Tt=r.useCallback(o=>{const b=Math.max(Math.round(Ae.current.viewportSize/tr),er);ht.current!==o&&(ht.current=o,Ze.current=0),P(Ze,o*b)},[P]),{handleArrowPointerDown:je,handleArrowPointerUp:ft,handleArrowKeyDown:St}=cr({canUseArrowButtons:qe,enableArrowButtons:l,resetTapScroll:pe,scrollByStep:Tt}),yt=o=>{if(!we)return;if(!i){o.preventDefault(),o.stopPropagation();return}if(o.pointerType==="mouse"&&o.button!==0||o.ctrlKey)return;pe();const b=o.currentTarget,R=at(b);let V=null;if(b.setPointerCapture)try{b.setPointerCapture(o.pointerId),V=b}catch{V=null}L.current={pointerId:o.pointerId,startThumbPosition:ze,startClientX:o.clientX,startClientY:o.clientY,scale:R,captureTarget:V},document.addEventListener("pointermove",ot),document.addEventListener("pointerup",Q),document.addEventListener("pointercancel",Q),le(!0),re(!0),o.preventDefault(),o.stopPropagation()},Je=o=>{if(!we)return;if(!a){o.preventDefault(),o.stopPropagation();return}if(o.pointerType==="mouse"&&o.button!==0||o.ctrlKey)return;const b=o.currentTarget,R=b.getBoundingClientRect(),V=ue(o),q=at(b),Te=(V-(f?R.left:R.top))/q;pe();const c=Te-me/2,u=He(c);if(Ee(u),b.setPointerCapture)try{b.setPointerCapture(o.pointerId)}catch{}M.current={pointerId:o.pointerId,startThumbPosition:c,startClientX:o.clientX,startClientY:o.clientY,scale:q},o.preventDefault(),o.stopPropagation()},$e=()=>{M.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}},Qe=o=>{const b=M.current;if(b.pointerId!==o.pointerId)return;if(o.pointerType==="mouse"&&o.buttons===0){$e();return}const R=o.clientX-b.startClientX,V=o.clientY-b.startClientY,q=h(R,V)/(b.scale||1),Te=He(b.startThumbPosition+q);Ee(Te),o.cancelable&&o.preventDefault()},et=o=>{if(M.current.pointerId!==o.pointerId)return;const b=o.currentTarget;b.hasPointerCapture?.(o.pointerId)&&b.releasePointerCapture(o.pointerId),$e(),o.preventDefault(),o.stopPropagation()},lt=o=>{if(M.current.pointerId!==o.pointerId)return;const b=o.currentTarget;b.hasPointerCapture?.(o.pointerId)&&b.releasePointerCapture(o.pointerId),$e()},dt=o=>{o.target===o.currentTarget&&M.current.pointerId===o.pointerId&&$e()},tt=r.useMemo(()=>xe((de?1:.8)*N,0,1),[de,N]),Mt=r.useMemo(()=>{const b=`calc(50% - ${O/2}px + ${U}px)`;return{left:Ce,top:b}},[Ce,U,O]),gt=(o,b,R,V)=>B.jsx("button",{type:"button",tabIndex:0,className:"aqvs-scrollbar-arrow-button",style:{[ye]:d,[Be]:d},"aria-label":b,onPointerDown:je(o),onPointerUp:ft,onPointerLeave:ft,onPointerCancel:ft,onKeyDown:St(o),"aria-disabled":!l,disabled:!qe,children:B.jsx("span",{"aria-hidden":"true",children:R})},V),Rt=p&&we?{orientation:oe,scrollPosition:t,maxScrollPosition:se,contentSize:s,viewportSize:e,thumbSize:me,thumbPosition:ze,thumbCenter:it,trackSize:Me,isDragging:G,isTapScrollActive:de,visibleStartIndex:D,visibleEndIndex:Y}:null;return B.jsxs("div",{className:ut.twMerge("aqvs-scrollbar",ee,!we&&"pointer-events-none opacity-0",x),style:{[ye]:e,[Be]:d},role:"scrollbar",tabIndex:-1,"aria-controls":I,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":se,"aria-orientation":f?"horizontal":"vertical",children:[!f&&we&&Z&&B.jsx(Ht,{ref:ae,className:ut.twMerge("aqvs-scrollbar-tap-circle-wrapper",ke),size:O,maxVisualDistance:Ve,style:Mt,opacity:tt,renderVisual:K,onDragChange:Ye},"tap-circle"),gt(-1,fe[0],F[0],"arrow-start"),B.jsxs("div",{className:"aqvs-scrollbar-track",style:{borderRadius:d/2},onPointerDown:Je,onPointerMove:Qe,onPointerUp:et,onPointerCancel:lt,onLostPointerCapture:dt,"aria-disabled":!a,children:[Rt&&B.jsx("div",{className:"aqvs-scrollbar-overlay","aria-hidden":!0,children:p?.(Rt)},"overlay"),B.jsx("div",{className:ut.twMerge("aqvs-scrollbar-thumb-wrapper",!(we||G)&&"pointer-events-none opacity-0"),style:{[ye]:me,[ce]:ze,...f?{top:0,bottom:0}:{left:0,right:0}},onPointerDown:yt,role:"slider","aria-orientation":f?"horizontal":"vertical","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":se,"aria-disabled":!i,tabIndex:-1,children:B.jsx("div",{ref:A,className:ut.twMerge("aqvs-scrollbar-thumb",f?"aqvs-scrollbar-thumb-horizontal":"aqvs-scrollbar-thumb-vertical"),"data-testid":"aqvs-scrollbar-thumb","data-thumb-state":Ue,style:{borderRadius:d-1,cursor:i?"pointer":"default"},onMouseEnter:()=>{i&&re(!0)},onMouseLeave:()=>{i&&re(!1)}},"thumb")},"thumb-wrapper")]},"track"),gt(1,fe[1],F[1],"arrow-end")]})},fr=["mouse","pen","touch"],Nt=(s,e)=>!(s==="mouse"||s==="pen"||s==="touch")||e.includes(s),dr=s=>s==="mouse"||s==="pen",xt={maxVelocity:6,minVelocity:.02,deceleration:.0025,velocitySampleWindow:90,startVelocityThreshold:.04},vt=(s,e,t)=>{for(const[n,i,a]of e)t==="add"?s.addEventListener(n,i,a):s.removeEventListener(n,i,a)},Ut=r.forwardRef(({children:s,contentSize:e,viewportSize:t,scrollBarWidth:n=12,enableThumbDrag:i=!0,enableTrackClick:a=!0,enableArrowButtons:l=!0,enablePointerDrag:f=!0,pointerDragInputs:d=fr,onScroll:x,className:I,testId:S,style:w,background:p,tapScrollCircleOptions:D,inertiaOptions:Y,itemCount:G,renderThumbOverlay:le,wheelSpeedMultiplier:te=1,onWheelHorizontal:re,contentInsets:de,visibleStartIndex:Se,visibleEndIndex:A,renderOverlay:L,initialScrollPosition:M=0,contentProps:H},X)=>{const E=r.useRef(Number.isFinite(M)?Math.max(0,M):0),ae=r.useRef(null),$=r.useRef(null),T=r.useRef(re);r.useEffect(()=>{T.current=re},[re]);const k=r.useRef({frame:null,velocity:0,lastTimestamp:null,generation:0}),Ie=r.useMemo(()=>({maxVelocity:Y?.maxVelocity??xt.maxVelocity,minVelocity:Y?.minVelocity??xt.minVelocity,deceleration:Y?.deceleration??xt.deceleration,velocitySampleWindow:Y?.velocitySampleWindow??xt.velocitySampleWindow,startVelocityThreshold:Y?.startVelocityThreshold??xt.startVelocityThreshold}),[Y]),Oe=r.useMemo(()=>({top:Math.max(0,de?.top??0),bottom:Math.max(0,de?.bottom??0)}),[de]);y.debug("[ScrollPane] ScrollPane rendered",()=>({contentSize:e,viewportSize:t,scrollBarWidth:n,className:I,style:w,tapScrollCircleOptions:D,inertiaOptions:Y,enablePointerDrag:f,contentInsets:Oe}));const Re=r.useRef({contentSize:e,viewportSize:t});Re.current={contentSize:e,viewportSize:t};const Z=r.useMemo(()=>e>t,[e,t]),O=r.useCallback(h=>{const{contentSize:ue,viewportSize:fe}=Re.current,F=ue>fe,ee=E.current;if(y.debug("[ScrollPane] scrollTo called",()=>({newPosition:h,contentSize:ue,viewportSize:fe,currentIsScrollable:F,prevPosition:ee})),!F)return E.current!==0&&(E.current=0,x?.(0,ee)),E.current;const oe=typeof h=="function"?h(E.current):h;if(!Number.isFinite(oe))return y.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position",{nextPosition:oe}),E.current;const Ve=Math.max(ue-fe,0),De=xe(oe,0,Ve);return E.current!==De&&(E.current=De,x?.(De,ee)),E.current},[x]),Ce=r.useRef(O);r.useEffect(()=>{Ce.current=O},[O]);const U=r.useCallback(()=>{const h=k.current;h.generation+=1,h.frame!==null&&cancelAnimationFrame(h.frame),h.frame=null,h.velocity=0,h.lastTimestamp=null},[]),ke=r.useRef(U);r.useEffect(()=>{ke.current=U},[U]),r.useEffect(()=>()=>{ke.current()},[]);const v=r.useCallback(h=>{if(!Z)return;const{maxVelocity:ue,minVelocity:fe,deceleration:F,startVelocityThreshold:ee}=Ie,oe=xe(h,-ue,ue);if(Math.abs(oe)<ee)return;U(),k.current.velocity=oe,k.current.lastTimestamp=null;const Ve=k.current.generation,De=Me=>{const ne=k.current;if(ne.generation!==Ve)return;if(ne.lastTimestamp===null){ne.lastTimestamp=Me,ne.frame=requestAnimationFrame(De);return}const me=Me-ne.lastTimestamp;if(ne.lastTimestamp=Me,me<=0){ne.frame=requestAnimationFrame(De);return}const se=ne.velocity;let J=se;const ze=F*me;se>0?J=Math.max(0,se-ze):se<0&&(J=Math.min(0,se+ze));const we=(se+J)/2*me,qe=E.current;if(we!==0&&Ce.current(pe=>pe+we),k.current.generation!==Ve)return;const Ue=E.current,{contentSize:Ee,viewportSize:m}=Re.current,P=Math.max(Ee-m,0);ne.velocity=J;const ie=Ue===qe||Ue<=0&&J<=0||Ue>=P&&J>=0;if(Math.abs(J)<fe||ie){U();return}ne.frame=requestAnimationFrame(De)};k.current.frame=requestAnimationFrame(De)},[Z,Ie,U]),Xe=r.useRef(v);r.useEffect(()=>{Xe.current=v},[v]),r.useLayoutEffect(()=>{Re.current={contentSize:e,viewportSize:t}},[e,t]),r.useLayoutEffect(()=>{const h=$.current;if(!h)return;const ue=()=>{h.scrollTop!==0&&(y.debug("[ScrollPane] Native scroll detected, resetting to 0",()=>({scrollTop:h.scrollTop})),h.scrollTop=0),h.scrollLeft!==0&&(h.scrollLeft=0)};return h.addEventListener("scroll",ue),()=>h.removeEventListener("scroll",ue)},[]),r.useLayoutEffect(()=>{if(Z){y.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change",()=>({contentSize:e,viewportSize:t,scrollPosition:E.current}));const h=xe(e-t,0,e);E.current>h&&O(h)}else O(0)},[Z,O,e,t]),r.useEffect(()=>{const h=F=>{if(F.ctrlKey)return;const ee=F.shiftKey&&F.deltaX===0,oe=ee?F.deltaY:F.deltaX,Ve=ee?0:F.deltaY;if(oe!==0&&Math.abs(oe)>=Math.abs(Ve)){if(T.current){F.preventDefault(),U();let ne=oe;F.deltaMode===1?ne*=16:F.deltaMode===2&&(ne*=t),T.current(ne)}return}if(!Z||F.deltaY===0)return;F.preventDefault(),U();let Me=F.deltaY;F.deltaMode===1?Me*=16:F.deltaMode===2&&(Me*=t),te!==1&&(Me*=te),y.debug("[ScrollPane] wheel event",()=>({deltaY:Me,scrollPosition:E.current,wheelSpeedMultiplier:te,deltaMode:F.deltaMode,scrollTop:$.current?.scrollTop})),O(ne=>ne+Me)},ue=()=>{U()},fe=ae.current;return fe&&(fe.addEventListener("wheel",h,{passive:!1}),fe.addEventListener("pointerdown",ue,{capture:!0,passive:!0})),()=>{fe&&(fe.removeEventListener("wheel",h),fe.removeEventListener("pointerdown",ue,{capture:!0}))}},[Z,O,U,t,te]),r.useImperativeHandle(X,()=>({scrollTo:h=>(U(),O(h)),getScrollPosition:()=>E.current,getContentSize:()=>e,getViewportSize:()=>t}),[O,e,t,U]);const st=r.useId(),N=H?.id??st,K=r.useRef({pointerType:"",pointerId:null,startClientY:0,startScroll:0,isDragging:!1,shouldCancelNextClick:!1,clickResetTimer:null,velocitySamples:[]}),Fe=r.useRef(f),Ae=r.useRef(d);r.useEffect(()=>{Fe.current=f},[f]),r.useEffect(()=>{Ae.current=d},[d]);const ye=r.useRef(Z);r.useEffect(()=>{ye.current=Z},[Z]);const Be=r.useRef(Ie);r.useEffect(()=>{Be.current=Ie},[Ie]),r.useEffect(()=>{const h=K.current;if(f&&Z&&(h.pointerId===null||Nt(h.pointerType,d))||h.pointerId===null)return;const ue=$.current;h.clickResetTimer!==null&&(window.clearTimeout(h.clickResetTimer),h.clickResetTimer=null);const fe=h.isDragging&&h.shouldCancelNextClick,F=h.pointerId;h.pointerId=null,h.pointerType="",h.startClientY=0,h.startScroll=0,h.isDragging=!1,h.shouldCancelNextClick=fe,h.velocitySamples=[],ue?.hasPointerCapture(F)&&ue.releasePointerCapture(F)},[f,d,Z]),r.useEffect(()=>{const h=$.current;if(!h)return;const ue=6,fe=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),F=()=>{const m=K.current;m.pointerId=null,m.pointerType="",m.startClientY=0,m.startScroll=0,m.isDragging=!1,m.velocitySamples=[]},ee=()=>{const m=K.current;m.clickResetTimer!==null&&(window.clearTimeout(m.clickResetTimer),m.clickResetTimer=null)},oe=m=>{const P=K.current,ie=fe();P.velocitySamples.push({clientY:m,time:ie});const pe=Be.current.velocitySampleWindow;P.velocitySamples=P.velocitySamples.filter(ve=>ie-ve.time<=pe)},Ve=m=>m instanceof HTMLElement&&m.closest("[data-scrollpane-ignore-drag='true']")!==null,De=m=>{const P=K.current;P.shouldCancelNextClick&&(m.preventDefault(),m.stopPropagation(),P.shouldCancelNextClick=!1)},Me=m=>{const P=K.current;if(!P.isDragging){if(P.isDragging=!0,P.shouldCancelNextClick=!0,!h.hasPointerCapture(m.pointerId))try{h.setPointerCapture(m.pointerId)}catch{}oe(m.clientY)}},ne=m=>m.isTrusted||m.target===h,me=m=>{const P=K.current;h.hasPointerCapture(m)&&h.releasePointerCapture(m),P.shouldCancelNextClick=!1,ee(),F()},se=m=>{const P=K.current;if(P.pointerId!==m.pointerId)return;if(m.buttons===0&&dr(m.pointerType)){me(m.pointerId);return}if(!(Fe.current&&ye.current)||!Nt(m.pointerType,Ae.current)||!P.isDragging&&(Math.abs(m.clientY-P.startClientY)<ue||(Me(m),!P.isDragging)))return;oe(m.clientY);const ie=m.clientY-P.startClientY,pe=P.startScroll-ie;Ce.current(pe),m.cancelable&&m.preventDefault()},J=()=>{const m=K.current;return m.pointerId!==null||!m.shouldCancelNextClick?!1:(ee(),m.clickResetTimer=window.setTimeout(()=>{const P=K.current;P.shouldCancelNextClick=!1,P.clickResetTimer=null},0),!0)},ze=m=>{const P=K.current;if(P.pointerId!==m.pointerId){J();return}P.isDragging&&P.shouldCancelNextClick&&m.cancelable&&(m.preventDefault(),m.stopPropagation()),P.isDragging&&oe(m.clientY);let ie=0;if(P.isDragging&&P.velocitySamples.length>=2){const ve=P.velocitySamples,We=Be.current.velocitySampleWindow,Ye=ve[ve.length-1],He=ve.find(Ge=>Ye.time-Ge.time<=We)??ve[0];if(Ye&&He&&Ye.time!==He.time){const Ge=Ye.clientY-He.clientY,at=Ye.time-He.time;ie=-(Ge/at)}}ee(),P.shouldCancelNextClick&&(P.clickResetTimer=window.setTimeout(()=>{const ve=K.current;ve.shouldCancelNextClick=!1,ve.clickResetTimer=null},0));const pe=Be.current.startVelocityThreshold;F(),h.hasPointerCapture(m.pointerId)&&h.releasePointerCapture(m.pointerId),Math.abs(ie)>=pe&&Xe.current?.(ie)},it=m=>{if(K.current.pointerId!==null){if(!m.isPrimary||m.pointerType!==K.current.pointerType)return;me(K.current.pointerId)}if(K.current.shouldCancelNextClick&&(ee(),K.current.shouldCancelNextClick=!1),!(Fe.current&&ye.current)||!Nt(m.pointerType,Ae.current)||m.button!==0&&m.pointerType==="mouse"||m.ctrlKey||m.metaKey||m.altKey||Ve(m.target))return;window.dispatchEvent(new CustomEvent(Dt,{detail:{paneId:st}})),ke.current?.();const P=K.current;ee(),P.pointerId=m.pointerId,P.pointerType=m.pointerType,P.startClientY=m.clientY,P.startScroll=E.current,P.isDragging=!1,P.shouldCancelNextClick=!1,P.velocitySamples=[]},we=m=>{if(K.current.pointerId!==m.pointerId){J();return}ne(m)&&me(m.pointerId)},Ue=[["click",De,!0],["pointerdown",it,{passive:!1}],["lostpointercapture",m=>{m.target!==h||K.current.pointerId!==m.pointerId||me(m.pointerId)},void 0]],Ee=[["pointermove",se,{passive:!1}],["pointerup",ze,void 0],["pointercancel",we,void 0]];return vt(h,Ue,"add"),vt(window,Ee,"add"),()=>{vt(h,Ue,"remove"),vt(window,Ee,"remove");const m=K.current;m.pointerId!==null&&h.hasPointerCapture(m.pointerId)&&h.releasePointerCapture(m.pointerId),ee(),F()}},[st]);const ce=r.useCallback(h=>(U(),O(h)),[O,U]);return B.jsxs("div",{ref:ae,"data-testid":S,className:ut.twMerge("aqvs-scroll-pane",I),style:w,children:[B.jsxs("div",{ref:$,className:ut.twMerge("aqvs-scroll-pane-content"),"data-testid":"aqvs-scroll-pane-content",style:{height:t,paddingTop:Oe.top,paddingBottom:Oe.bottom,...f&&Z&&d.some(h=>h==="touch"||h==="pen")?{touchAction:"none"}:{}},...H,id:N,children:[p,s(E.current)]}),B.jsx($t,{contentSize:e,viewportSize:t,scrollPosition:E.current,onScroll:ce,enableThumbDrag:i,enableTrackClick:a,enableArrowButtons:l,scrollBarWidth:n,ariaControls:N,tapScrollCircleOptions:D,itemCount:G,renderThumbOverlay:le,visibleStartIndex:Se,visibleEndIndex:A},"scrollbar"),L?.()]})}),zt=(s,e,t)=>Math.min(Math.max(s,e),t),mr=({dragState:s,normalizedDistance:e,sizeScale:t,size:n})=>{const i=Math.max(n/2,1),a=1+e*.65,l=Math.max(.65,1-e*.25),f=s.direction*e*26*t,d=.8+e*.18,x=3*t,I=6*t,S=22*t,w=Math.abs(f)+I,p=f>0?x:-Math.abs(f)-x,D=Math.max(2.5,3*t),Y=zt(s.offsetX,-i,i),G=zt(s.offsetY,-i,i),le=i*.35,te=Y/i*le,re=G/i*le,de=te*.45,Se=re*.45,A=Math.max(S*.38,6),L=.65+e*.2,M=s.active;return B.jsxs(B.Fragment,{children:[B.jsx("div",{className:"aqvs-tap-scroll-circle-gradient",style:{transform:`scale(${l}, ${a})`,transition:M?"40ms transform ease-out":"200ms ease transform"}}),B.jsx("div",{className:"aqvs-sample-visual-pupil",style:{width:S,height:S,transform:`translate(calc(-50% + ${te}px), calc(-50% + ${re}px)) scale(${l}, ${d*a})`,transition:M?"70ms transform ease-out":"200ms ease transform"}}),B.jsx("div",{className:"aqvs-sample-visual-highlight",style:{width:A,height:A,transform:`translate(calc(-50% + ${de}px), calc(-50% + ${Se}px)) scale(${l}, ${a})`,opacity:L,boxShadow:"0 0 8px rgba(255,255,255,0.45)",transition:M?"120ms opacity 150ms, 120ms transform ease-out ease-out":"220ms ease transform, 240ms opacity ease"}}),B.jsx("div",{className:"aqvs-sample-visual-rod",style:{width:D,height:w,transform:`translate(-50%, ${p}px)`,opacity:e,transition:M?"40ms height, 60ms opacity ease-out ease-out":"200ms ease height, 120ms ease opacity"}})]})},Pt=100,pr=s=>{if(!Number.isFinite(s))return 0n;const e=Math.trunc(s);return e<=0?0n:BigInt(e)},At=(s,e)=>{if(!Number.isFinite(s))throw new Error(`valueFn returned a non-finite value at index ${e}: ${s}`);return s},mt=s=>{if(s<=0||!Number.isFinite(s))return 0;const e=Math.trunc(s);if(e<=2147483647)return e&-e;const t=BigInt(e)&-BigInt(e);return Number(t)};class nt{tree;deltas;size;baseValue;valueFn;total;constructor(e,t,n){this.reset(e,t,n)}reset(e,t,n){const i=Number.isFinite(e)&&e>0?Math.trunc(e):0;if(typeof t!="function"){this.size=i,this.tree=new Map,this.deltas=new Map,this.valueFn=void 0,this.baseValue=t,this.total=this.baseValue*this.size;return}let a=0,l;if(i>0){const f=n?.sampleRange??{from:0,to:Math.min(Pt-1,i-1)};let d=Math.max(0,Math.trunc(f.from)),x=Math.min(Math.trunc(f.to),i-1);if(d>x&&(d=0,x=Math.min(Pt-1,i-1)),i>Pt)a=nt._sampleBaseValueStrided(t,i,Pt),n?.materialize&&(l={from:d,values:nt._collectValidatedValues(t,d,x)});else{const I=nt._collectValidatedValues(t,d,x);a=nt._modeOrMedian([...I]),n?.materialize&&(l={from:d,values:I})}}if(this.size=i,this.tree=new Map,this.deltas=new Map,this.total=void 0,this.valueFn=t,this.baseValue=a,l)for(let f=0;f<l.values.length;f++){const d=l.from+f;if(d>=this.size)break;const x=l.values[f]-this.baseValue;x!==0&&(this.deltas.set(d,x),this._updateTree(d,x))}this.total=this.getTotal()}setValueFn(e,t){if(t?.reset){this.reset(this.size,e);return}typeof e=="function"?this.valueFn=e:(this.valueFn=void 0,this.baseValue=e,this.total=this._computeTreeTotal())}static _collectValidatedValues(e,t,n){const i=[];for(let a=t;a<=n;a++)i.push(At(e(a),a));return i}static _modeOrMedian(e){if(e.length===0)return 0;e.sort((l,f)=>l-f);const t=Math.floor(e.length/2);let n;e.length%2===0?n=Math.floor((e[t-1]+e[t])/2):n=e[t];const i=new Map;let a=0;for(const l of e){const f=(i.get(l)??0)+1;i.set(l,f),f>a&&(a=f)}if(a>e.length*.2){const l=[];for(const[d,x]of i.entries())x===a&&l.push(d);const f=l.reduce((d,x)=>d+x,0);n=Math.floor(f/l.length)}return n}static _sampleBaseValueStrided(e,t,n){if(t<=0)return 0;let i=Math.max(1,Math.ceil(t/n));i%2===0&&(i+=1);const a=[];for(let l=0;l<t&&a.length<n;l+=i)a.push(At(e(l),l));return nt._modeOrMedian(a)}update(e,t){return this.updates([{index:e,value:t}])}updates(e){const t=this._buildDeltaUpdates(e);return t.length>0?this.updateDeltas(t):this.total}updateDelta(e,t){return this.updateDeltas([{index:e,change:t}])}updateDeltas(e){const t=new Map;for(const{index:n,change:i}of e){if(n<0||n>=this.size)throw new Error(`Index ${n} out of bounds`);if(!Number.isInteger(n))throw new Error(`Index must be an integer: ${n}`);if(!Number.isFinite(i))throw new Error(`Change must be a finite number: ${i}`);const l=(t.get(n)??this.deltas.get(n)??0)+i;if(l+this.baseValue<-1e-9)throw new Error(`Change would make the value at index ${n} negative: ${l+this.baseValue}`);t.set(n,l)}for(const{index:n,change:i}of e){const l=(this.deltas.get(n)??0)+i;l===0?this.deltas.delete(n):this.deltas.set(n,l),this._updateTree(n,i)}return this.total}_updateTree(e,t){if(t===0)return;let n=e+1;for(;n<=this.size;){this.tree.set(n,(this.tree.get(n)??0)+t);const i=mt(n);if(i===0)break;n+=i}this.total!==void 0&&(this.total+=t)}_buildDeltaUpdates(e){const t=[],n=new Map;for(const{index:i,value:a}of e){if(i<0||i>=this.size)throw new Error(`Index ${i} out of bounds`);if(!Number.isInteger(i))throw new Error(`Index must be an integer: ${i}`);if(!Number.isFinite(a))throw new Error(`Value must be a finite number: ${a}`);if(a<0)throw new Error("Value cannot be negative.");const l=n.has(i)?n.get(i)??0:this.deltas.get(i)??0,f=l+this.baseValue,d=a-f;d!==0&&t.push({index:i,change:d}),n.set(i,l+d)}return t}_computeTreeTotal(){if(this.size<=0)return 0;let e=0,t=this.size;for(;t>0;){e+=this.tree.get(t)??0;const n=mt(t);if(n===0)break;t-=n}return e+this.baseValue*this.size}_materialize(e,t=!0){if(this.valueFn){const n=this.deltas.get(e)??0,a=At(this.valueFn(e),e)-this.baseValue;if(a!==n&&(a===0?this.deltas.delete(e):this.deltas.set(e,a),t)){const l=a-n;this._updateTree(e,l)}}}_materializeRanges(e,t,n=!1){if(!(e?.materialize&&this.valueFn))return;const i=e.ranges;if(i&&i.length>0){for(const f of i){const d=Math.max(0,Math.trunc(f.from)),x=Math.min(Math.trunc(f.to),this.size-1);for(let I=d;I<=x;I++)this._materialize(I)}if(t===void 0)return;if(n){this._materialize(t);return}const a=i[0].from,l=i[i.length-1].to;t>=a&&t<=l&&this._materialize(t);return}t!==void 0&&this._materialize(t)}_findIndex(e,t={},n){if(this.size>=1073741824)return this._findIndexLarge(e,t,n);if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const i=t.materializeOption?.materialize===!0;let a;for(;;){if(a=this._descend(e,n),a<0||a>=this.size)return{index:-1,total:this.total??this.getTotal(),cumulative:void 0,currentValue:void 0,safeIndex:void 0};if(!i)break;const f=this.deltas.get(a)??0;if(this._materialize(a),(this.deltas.get(a)??0)===f)break}const l=this.prefixSum(a);return{index:a,total:this.total??l.total,cumulative:l.cumulative,currentValue:l.currentValue,safeIndex:l.safeIndex}}_descend(e,t){let n=0,i=0,a=1;for(;a<<1<=this.size;)a<<=1;for(;a>0;a>>=1){const l=n+a;if(l<=this.size){const d=(this.tree.get(l)??0)+this.baseValue*a;(t?i+d<e:i+d<=e)&&(n=l,i+=d)}}return t?n:n-1}_findIndexLarge(e,t,n){if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};const i=pr(this.size);if(i===0n)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const a=t.materializeOption?.materialize===!0;for(;;){let l=0n,f=i-1n,d,x,I=this.total;for(;l<=f;){const p=l+f>>1n,D=Number(p),Y=this.prefixSum(D);if(I=Y.total,n?Y.cumulative>=e:Y.cumulative<=e)if(d=p,x=Y,n){if(p===0n)break;f=p-1n}else l=p+1n;else if(n)l=p+1n;else{if(p===0n)break;f=p-1n}}const S=x,w=d!==void 0?Number(d):-1;if(a&&w>=0){const p=this.deltas.get(w)??0;if(this._materialize(w),(this.deltas.get(w)??0)!==p)continue}return{index:w,total:I,cumulative:S?.cumulative,currentValue:S?.currentValue,safeIndex:S?.safeIndex}}}prefixSum(e,t){if(e<0||Number.isNaN(e))return{cumulative:0,total:this.total,currentValue:0,safeIndex:0};if(this.size===0)return{cumulative:0,total:this.total??0,currentValue:0,safeIndex:0};const n=xe(Math.trunc(e),0,this.size-1),i=t?.materializeOption;this._materializeRanges(i,n,!0);let a=0,l=n+1;for(;l>0;){const d=this.tree.get(l)??0;a+=d;const x=mt(l);if(x===0)break;l-=x}const f=i?.materialize?this.get(n):(this.deltas.get(n)||0)+this.baseValue;return{cumulative:a+this.baseValue*(n+1),total:this.total,currentValue:f,safeIndex:n}}get(e,t){if(this.size===0)return 0;if(!Number.isInteger(e)||e<0||e>=this.size)throw new Error("Index out of bounds");const n=t?.materializeOption;return this._materializeRanges(n,e),(this.deltas.get(e)??0)+this.baseValue}getTotal(e){const t=e?.materializeOption;if(this._materializeRanges(t),this.total===void 0)if(this.size===0)this.total=0;else{this.total=this._computeTreeTotal();const n=this.prefixSum(this.getSize()-1);n.cumulative!==n.total&&y.error("Inconsistent Fenwick Tree state")}return this.total}rebuildTree(e){if(e?.materialize&&this.valueFn){const n=this.valueFn;this.reset(this.size,i=>n(i),{materialize:!0});return}const t=new Map;for(const[n,i]of this.deltas.entries()){if(i===0)continue;let a=n+1;for(;a<=this.size;){t.set(a,(t.get(a)??0)+i);const l=mt(a);if(l===0)break;a+=l}}this.tree=t,this.total=this._computeTreeTotal()}calculateAccumulatedError(){if(this.total===void 0)return 0;let e=this.baseValue*this.size;for(const[t,n]of this.deltas)t<this.size&&(e+=n);return this.total-e}changeSize(e){if(!Number.isFinite(e))throw new Error(`Size must be a finite number: ${e}`);const t=Math.max(0,Math.trunc(e)),n=this.size;if(t===n)return;if(t>n)if(n===0&&this.deltas.size>0){for(const a of this.deltas.keys())a>=t&&this.deltas.delete(a);this.size=t,this.rebuildTree()}else this._growSize(n,t);else{if(t>0)for(const a of this.deltas.keys())a>=t&&this.deltas.delete(a);this.size=t,this.rebuildTree()}const i=this.prefixSum(this.getSize()-1);i.cumulative!==i.total&&y.error("Inconsistent Fenwick Tree state")}static _minCoveredLowBound(e,t){let n=1;for(;;){const i=n*2;if(Math.floor(t/i)*i<=e)break;n=i}return n*Math.floor(e/n)}_propagateDeltaToGrownNodes(e,t,n,i){let a=e+1;for(;a<=n;){const l=mt(a);if(l===0)break;a+=l}for(;a<=i;){this.tree.set(a,(this.tree.get(a)??0)+t);const l=mt(a);if(l===0)break;a+=l}}_growSize(e,t){if(this.size=t,this.deltas.size>0){const n=nt._minCoveredLowBound(e,t);if(e-n<this.deltas.size)for(let a=n;a<e;a++){const l=this.deltas.get(a);l===void 0||l===0||this._propagateDeltaToGrownNodes(a,l,e,t)}else for(const[a,l]of this.deltas.entries())l===0||a<n||this._propagateDeltaToGrownNodes(a,l,e,t)}this.total=this._computeTreeTotal()}getSize(){return this.size}get base(){return this.baseValue}findIndexAtOrAfter(e,t){return this._findIndex(e,t??{},!0)}findIndexAtOrBefore(e,t){return this._findIndex(e,t??{},!1)}}const hr=(s,e)=>{const t=s?.sampleRange,n=e?.sampleRange;return t===n?!1:t&&n?t.from!==n.from||t.to!==n.to:!0},Kt=(s,e,t)=>{const n=Number.isFinite(s)&&s>0?Math.trunc(s):0,i=r.useRef(null),a=r.useRef({size:n,valueOrFn:e,options:t});i.current===null&&(i.current=new nt(n,e,t));const l=i.current,f=a.current,d=f.size!==n,x=f.valueOrFn!==e,I=hr(f.options,t),S=f.size===0&&n>0&&(!i.current||i.current.base===0);if(x||I){const w=t?.resetOnValueFnChange??!0;I||x&&w||S?(t?.debug&&y.debug("[useFenwickMapTree] reset",{valueOrFnChanged:x,optionsChanged:I}),l.reset(n,e,t)):(d&&(t?.debug&&y.debug("[useFenwickMapTree] resize (with valueFn change)",{from:f.size,to:n}),l.changeSize(n)),t?.debug&&y.debug("[useFenwickMapTree] setValueFn (no reset)",{valueOrFnChanged:x}),l.setValueFn(e,{reset:!1})),a.current={size:n,valueOrFn:e,options:t}}else d&&(t?.debug&&y.debug("[useFenwickMapTree] resize",{from:f.size,to:n}),S?l.reset(n,e,t):l.changeSize(n),a.current={size:n,valueOrFn:e,options:t});return l};class gr{key;value;prev=null;next=null;constructor(e,t){this.key=e,this.value=t}}class Vt{head=null;tail=null;addToTail(e){this.tail?(this.tail.next=e,e.prev=this.tail,this.tail=e):this.head=this.tail=e}remove(e){e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev,e.prev=null,e.next=null}removeHead(){const e=this.head;return e&&this.remove(e),e}moveToTail(e){this.remove(e),this.addToTail(e)}}function Wt(s){const e=r.useRef(new Map),t=r.useRef(new Vt),n=Math.floor(s),i=r.useRef(n);r.useEffect(()=>{if(i.current=n,Number.isNaN(n)||n<0){y.warn(`useLruCache: invalid capacity ${s}; the cache will not store any entries.`),e.current.clear(),t.current=new Vt;return}if(Number.isFinite(n))for(;e.current.size>n;){const I=t.current.removeHead();if(I)e.current.delete(I.key);else break}},[s,n]);const a=r.useCallback(I=>{const S=e.current.get(I);if(S)return t.current.moveToTail(S),S.value},[]),l=r.useCallback((I,S)=>{const w=i.current;if(Number.isNaN(w)||w<=0)return;let p=e.current.get(I);if(p)p.value=S,t.current.moveToTail(p);else{if(e.current.size>=w){const D=t.current.removeHead();D&&e.current.delete(D.key)}p=new gr(I,S),e.current.set(I,p),t.current.addToTail(p)}},[]),f=r.useCallback(I=>e.current.has(I),[]),d=r.useCallback(I=>{const S=e.current.get(I);S&&(t.current.remove(S),e.current.delete(I))},[]),x=r.useCallback(()=>{e.current.clear(),t.current=new Vt},[]);return r.useMemo(()=>({get:a,set:l,has:f,remove:d,clear:x}),[a,l,f,d,x])}const br=1e4,xr=()=>{const{get:s,set:e,has:t,clear:n}=Wt(br);return r.useMemo(()=>({get:s,set:e,has:t,clear:n}),[s,e,t,n])},be=(s,e)=>e<=0?0:xe(s,0,e-1),Yt=s=>({top:Math.max(0,s?.top??0),bottom:Math.max(0,s?.bottom??0)}),rt=(s,e)=>s<=e?0:s-e,pt=(s,e)=>s<=0?e:s+e,Ct=1e3,Bt=2e3,Ir=1048576,It=s=>{if(!Number.isFinite(s))return 0n;const e=Math.trunc(s);return e<=0?0n:BigInt(e)},Tr=(s,e,t,n,i,a,l,f)=>{const d=It(n);if(d===0n)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const x=A=>A<0n?0n:A>=d?d-1n:A,I={materializeOption:{materialize:!1}},{index:S,cumulative:w}=a.findIndexAtOrAfter(s,I);let p;S===-1?p=d-1n:(w===s?p=It(S+1):p=It(S),p>=d&&(p=d-1n)),s<=0&&(p=0n),f&&s>=l&&(p=d-1n);const D=A=>{const L=Number(A);if(!Number.isSafeInteger(L))return null;const{cumulative:M}=a.prefixSum(L,{materializeOption:{materialize:!1}});if(!Number.isFinite(M))return null;const{index:H}=a.findIndexAtOrAfter(M+.5,{materializeOption:{materialize:!1}});if(H===-1)return null;const X=It(H);return X>A?X:null},Y=A=>{let L=0,M=A,H=A,X=0n,E=0;for(;M<d&&L<e;){const ae=Number(M),$=i(ae);if(L+=$,H=M,M+=1n,X+=1n,!Number.isFinite($)||$<0)break;if($===0){if(E+=1,E>Ct){const T=D(H);if(T!==null&&T>M)M=T,E=0;else if(T!==null&&T===M&&i(Number(M))>0)E=0;else break}}else E=0}return X===0n&&(H=A),{height:L,end:H}};let{height:G,end:le}=Y(p);if(G<e&&p>0n){let A=p,L=G,M=0;for(;A>0n&&L<e;){A-=1n;const X=Number(A),E=i(X);if(L+=E,!Number.isFinite(E)||E<0)break;if(E===0){if(M+=1,M>Ct){const ae=Number(A);if(!Number.isSafeInteger(ae))break;const{cumulative:$}=a.prefixSum(ae,{materializeOption:{materialize:!1}});if(!Number.isFinite($))break;const{index:T}=a.findIndexAtOrAfter($-.5,{materializeOption:{materialize:!1}}),k=T===-1?-1n:It(T);if(k>=0n&&k<A)A=k+1n,M=0;else if(k===A&&A>=1n&&i(Number(A-1n))>0)M=0;else break}}else M=0}p=x(A);const H=Y(p);G=H.height,le=H.end}const te=x(p),re=x(le),de=x(te-BigInt(Math.max(0,t))),Se=x(re+BigInt(Math.max(0,t)));return{renderingStartIndex:be(Number(de),n),renderingEndIndex:be(Number(Se),n),visibleStartIndex:be(Number(te),n),visibleEndIndex:be(Number(re),n)}},Sr=(s,e,t,n,i,a,l)=>{if(n===0)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const f=Number.isFinite(l),d=f?Math.min(Math.max(0,s),l):Math.max(0,s);if(n>=Number.MAX_SAFE_INTEGER)return Tr(d,e,t,n,i,a,l,f);const{index:x,cumulative:I,currentValue:S}=a.findIndexAtOrAfter(d,{materializeOption:{materialize:!1}}),w=x===-1?e<=0||(I??0)<d+(S??0)?n-1:0:x;let p=be(w,n),D=0;if(x!==-1&&I===d)p=be(x+1,n),D=0;else if(p===x&&I!==void 0&&S!==void 0)D=I-S-d;else{const{cumulative:A,currentValue:L}=a.prefixSum(p,{materializeOption:{materialize:!1}});D=(A??0)-(L??0)-d}const Y=D,G=(A,L)=>{let M=A,H=L,X=0;for(;M<n&&H<e;){const E=i(M);if(H+=E,M++,!Number.isFinite(E)||E<0)break;if(E===0){if(X++,X>Ct){const{cumulative:ae}=a.prefixSum(M-1,{materializeOption:{materialize:!1}}),{index:$}=Number.isFinite(ae)?a.findIndexAtOrAfter(ae+.5,{materializeOption:{materialize:!1}}):{index:-1};if($>M)M=$,X=0;else if($===M&&i(M)>0)X=0;else break}}else X=0}return{cursor:M,height:H}},le=G(p,D);let te=le.cursor;if(D=le.height,D<e&&p>0){let A=D+Math.abs(Math.min(0,Y)),L=p-1,M=0;for(;L>=0&&A<e;){const X=i(L);if(A+=X,!Number.isFinite(X)||X<0){L--;break}if(X===0){if(M++,M>Ct){const{cumulative:E}=a.prefixSum(L,{materializeOption:{materialize:!1}}),{index:ae}=Number.isFinite(E)?a.findIndexAtOrAfter(E-.5,{materializeOption:{materialize:!1}}):{index:-1};if(ae!==-1&&ae<L){L=ae,M=0;continue}if(ae===L&&L>=1&&i(L-1)>0)M=0;else{L--;break}}}else M=0;L--}p=be(L+1,n);const H=G(p,0);te=H.cursor,D=H.height}const re=be(p-t,n),de=be(Math.max(te-1,p),n),Se=be(de+t,n);return{renderingStartIndex:re,renderingEndIndex:Se,visibleStartIndex:p,visibleEndIndex:de}},qt=(s,e,t)=>{const n=Math.max(0,e??0),i=r.useRef({last:0,id:null,arg:null}).current;return r.useEffect(()=>()=>{i.id!==null&&(cancelAnimationFrame(i.id),i.id=null)},[i]),r.useCallback(a=>{if(i.arg=a,i.id!==null)return;const l=f=>{if(i.id=null,i.arg===null)return;const d=f-i.last;if(n===0||i.last===0||d>=n){if(s.current)try{t(s.current,i.arg)}catch(x){console.error("[useThrottledInvoker] Error invoking callback",x)}i.arg=null,i.last=f}i.arg!==null&&(i.id=requestAnimationFrame(l))};i.id=requestAnimationFrame(l)},[n,t,s,i])},Mr=r.memo(({index:s,top:e,height:t,item:n,children:i,clipItemHeight:a,enableKeyboardNavigation:l,onKeyDown:f,onFocus:d,registerItemRef:x})=>{const I=r.useCallback(D=>x(s,D),[s,x]),S=r.useCallback(D=>f(D,s),[s,f]),w=r.useCallback(()=>d(s),[s,d]),p=r.useCallback(D=>{D.currentTarget.focus({preventScroll:!0})},[]);return B.jsx("div",{ref:I,"data-index":s,"data-virtualscroll-item":"true",className:"aqvs-item-container",style:{top:e,height:t,overflow:a?"hidden":void 0},tabIndex:l?-1:void 0,onPointerDown:l?p:void 0,onKeyDownCapture:l?S:void 0,onFocusCapture:l?w:void 0,children:i(n,s)})}),Rr=({itemCount:s,getItem:e,getItemKey:t,getItemHeight:n,viewportSize:i,overscanCount:a=15,className:l,testId:f,onScroll:d,onRangeChange:x,children:I,background:S,initialScrollIndex:w,initialScrollOffset:p,callbackThrottleMs:D=5,contentInsets:Y,onItemFocus:G,scrollBarOptions:le,behaviorOptions:te,onWheelHorizontal:re,contentProps:de},Se)=>{const{width:A,enableThumbDrag:L,enableTrackClick:M,enableArrowButtons:H,enableScrollToTopBottomButtons:X,renderThumbOverlay:E,tapScrollCircleOptions:ae}=le??{},{enablePointerDrag:$,pointerDragInputs:T,enableKeyboardNavigation:k=!0,wheelSpeedMultiplier:Ie,inertiaOptions:Oe,clipItemHeight:Re=!1,resetOnGetItemHeightChange:Z=!1}=te??{},O=r.useRef(null),Ce=r.useRef({renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0,scrollPosition:0,totalHeight:0}),U=r.useRef(null),ke=r.useRef(!1);r.useEffect(()=>{Z&&(U.current=null)},[Z,n]);const v=r.useMemo(()=>Yt(Y),[Y]),[Xe]=r.useState(()=>{const u=typeof w=="number"&&Number.isFinite(w)?Math.max(0,Math.trunc(w)):0;return{from:Math.max(0,u-50),to:u+50}}),st=r.useMemo(()=>({sampleRange:Xe,resetOnValueFnChange:Z,materialize:!0}),[Z,Xe]),N=Kt(s,n,st),[K]=r.useState(()=>{let c=0,u=0;if(typeof w=="number"){const g=xe(w,0,s-1),C=xe(g-a*2,0,s-1),_=xe(g+a*2,0,s-1),z=w>0?{materializeOption:{materialize:!0,ranges:[{from:C,to:_}]}}:void 0,{cumulative:j,total:W,currentValue:Pe}=N.prefixSum(w,z),he=Math.max(j-Pe,0);c=pt(he,v.top),u=W??N.getTotal()}else typeof p=="number"&&(c=pt(Math.max(p,0),v.top)),u=N.getTotal();return{position:c,total:u}}),[Fe,Ae]=r.useState(K.position),[ye,Be]=r.useState(K.total),ce=r.useRef(K.position),h=r.useRef(v.top),ue=r.useRef(d??void 0),fe=r.useRef(x??void 0),F=r.useRef(new Map),ee=r.useRef(null),oe=r.useRef(null),[Ve,De]=r.useState(null),[Me,ne]=r.useState(!1),me=r.useRef(null),se=r.useRef(!1),J=r.useRef(0),ze=r.useRef(!1),it=r.useRef(!1),we=r.useRef(s);we.current!==s&&(we.current=s,it.current=!0),r.useEffect(()=>{ue.current=d??void 0,fe.current=x??void 0},[x,d]);const qe=r.useCallback(c=>{if(k&&c&&typeof c.focus=="function")try{c.focus({preventScroll:!0})}catch{c.focus()}},[k]),Ue=r.useCallback((c,{position:u,totalHeight:g})=>{c(u,g)},[]),Ee=qt(ue,D,Ue),m=r.useCallback((c,u)=>{c(u)},[]),P=qt(fe,D,m),ie=r.useRef(v.top);ie.current=v.top;const pe=r.useRef(Ee);pe.current=Ee,r.useEffect(()=>(ke.current=!1,()=>{ke.current=!0,me.current&&(clearTimeout(me.current),me.current=null)}),[]),r.useEffect(()=>{k||(F.current.clear(),ee.current=null,oe.current=null)},[k]);const ve=r.useCallback((c,u)=>{if(!u){F.current.delete(c);return}k&&(F.current.set(c,u),ee.current===c&&(ee.current=null,oe.current=c,qe(u)))},[k,qe]),We=.01,Ye=r.useRef({rafId:null,loopActive:!1,idleFrames:0,lastRenderedPosition:K.position}),He=r.useCallback(()=>{const c=Ye.current;c.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(c.rafId),c.rafId=null,c.loopActive=!1,c.idleFrames=0},[]);r.useEffect(()=>()=>{He()},[He]);const Ge=r.useRef(()=>{}),at=r.useCallback(()=>{const c=Ye.current;c.rafId=null;const u=ce.current,g=rt(u,ie.current),C=N.getTotal();if(Ae(z=>Math.abs(z-u)<We?z:u),Math.abs(c.lastRenderedPosition-u)>=We?(pe.current({position:g,totalHeight:C}),c.lastRenderedPosition=u,c.idleFrames=0):c.idleFrames+=1,c.idleFrames>=2){He();return}if(typeof requestAnimationFrame=="function"){c.rafId=requestAnimationFrame(z=>Ge.current(z));return}c.loopActive=!1},[N,He]);Ge.current=at;const ot=r.useCallback(()=>{const c=Ye.current;if(c.idleFrames=0,!c.loopActive){if(c.loopActive=!0,typeof requestAnimationFrame=="function"){c.rafId=requestAnimationFrame(at);return}c.loopActive=!1}},[at]),Q=r.useCallback((c,u)=>{const g=u?.immediate??!1,C=rt(c,v.top);if(ce.current=c,g){Ye.current.lastRenderedPosition=c,Ye.current.idleFrames=0,Ae(c),Ee({position:C,totalHeight:N.getTotal()});return}ot()},[ot,N,v.top,Ee]),Ze=r.useCallback(c=>{const u=O.current;if(!u)return c;const g=u.getScrollPosition();J.current+=1;const C=u.scrollTo(c);return C===g&&(J.current=Math.max(0,J.current-1)),Math.abs(C-c)>.5&&(ze.current=!0),C},[]),ht=r.useRef(!1);r.useEffect(()=>{if(!ht.current)if(ht.current=!0,typeof p=="number"){const c=pt(Math.max(p,0),v.top),u=Math.abs(c-ce.current)>.5;Q(c,{immediate:!0}),u&&O.current?.scrollTo(c)}else Q(ce.current,{immediate:!0})},[p,v.top,Q]),r.useEffect(()=>{const c=N.getTotal();if(ye!==c){Be(c);return}if(ze.current){ze.current=!1;const u=O.current;if(u&&Math.abs(u.getScrollPosition()-ce.current)>.5){const g=Ze(ce.current);ze.current=!1,Q(g,{immediate:!0})}}},[N,ye,s,Ze,Q]),r.useEffect(()=>{if(U.current!==null){const{index:c,align:u,offset:g}=U.current,C=be(c,s),{cumulative:_,currentValue:z}=N.prefixSum(C,{materializeOption:{materialize:!1}});if(_!==void 0&&z!==void 0){const j=Math.max(_-z,0);let W=j;u==="bottom"?W=_-i:u==="center"&&(W=j+z/2-i/2),g&&(W-=g),W=Math.max(0,W);const Pe=Math.max(0,ye+v.top+v.bottom-i),he=Math.min(pt(W,v.top),Pe);Math.abs(he-ce.current)>1&&(y.debug("[VirtualScroll] Drift correction",{from:ce.current,to:he,targetIndex:C}),J.current===0&&(J.current+=1),O.current?.scrollTo(he),Q(he,{immediate:!0}))}}it.current=!1},[ye,N,s,v.top,Q,i,v.bottom]),r.useEffect(()=>{const c=h.current;if(c===v.top)return;const u=rt(ce.current,c),g=pt(u,v.top);h.current=v.top,ce.current=g,O.current?.scrollTo(g),Q(g,{immediate:!0})},[v.top,Q]);const Tt=r.useCallback((c,u)=>{if(s===0)return;const g=be(c,s),C=N.get(g),_=u-C,z=N.update(g,u);z!==void 0&&Be(z),y.debug("[VirtualScroll] Updated item size manually",{index:g,size:u,total:z});let j=U.current?U.current.index:null;if(j===null){const W=ce.current,Pe=Yt(Y).top,he=rt(W,Pe),{index:ge,cumulative:Le}=N.findIndexAtOrAfter(he,{materializeOption:{materialize:!1}});j=Le!==void 0&&Le===he?ge+1:ge}if(j!==-1&&g<j&&_!==0){const W=ce.current,Pe=W+_;Ze(Pe),Q(Pe,{immediate:!0}),y.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)",{from:W,to:Pe,causedByIndex:g,delta:_,activeVisibleStartIndex:j})}},[N,s,Ze,Q,Y]),je=r.useCallback((c,u)=>{if(!O.current||s===0)return;const g=be(c,s),C=be(g-a*2,s),_=be(g+a*2,s),{cumulative:z,total:j,currentValue:W}=N.prefixSum(g,{materializeOption:{materialize:!0,ranges:[{from:C,to:_}]}});if(y.debug("[VirtualScroll] Scrolling to index:",g,"ItemBottom:",z,"Total height:",j,"ItemHeight:",W,"safeIndexFrom:",C,"safeIndexTo:",_),!j)return;const Pe=Math.max(z-W,0);let he=Pe;u?.align==="bottom"?he=z-i:u?.align==="center"&&(he=Pe+W/2-i/2),u?.offset&&(he-=u.offset),he=Math.max(0,he);const ge=pt(he,v.top),Le=O.current?.getContentSize()??j+v.top+v.bottom,Ne=Math.max(0,Le-i),_e=Math.min(ge,Ne);U.current={index:g,align:u?.align,offset:u?.offset};const bt=O.current?.getScrollPosition()??-1,wt=Math.abs(bt-_e)>.5;se.current=!1,J.current=0,wt&&(se.current=!0,J.current+=1,O.current?.scrollTo(_e)),Be(j),Q(_e,{immediate:!0}),y.debug("[VirtualScroll] Setting scroll position to:",_e,{original:ge,max:Ne})},[N,a,s,v.top,v.bottom,i,Q]),ft=r.useCallback(c=>{if(!O.current||s===0)return;const u=N.getTotal(),g=xe(Math.floor(c),0,u),{index:C,cumulative:_,currentValue:z}=N.findIndexAtOrAfter(g,{materializeOption:{materialize:!1}}),W=(_??0)-(z??0)-g;je(C,{offset:W})},[N,s,je]),St=r.useCallback(c=>{const u=rt(ce.current,v.top),g=typeof c=="function"?c(u):c;ft(g);const C=O.current?.getScrollPosition(),_=typeof C=="number"?C:ce.current;return Q(_),_},[v.top,ft,Q]),yt=r.useCallback((c,u)=>{y.debug("[VirtualScroll] Scroll position changed:",c);const g=se.current;g&&(se.current=!1);const C=J.current>0;if(C&&(J.current=0),g||C||it.current||(U.current=null),Q(c),X){if(g||C)return;const _=c-u;if(y.debug("[VirtualScroll] Scroll diff:",_,"New:",c,"Prev:",u),Math.abs(_)>1){const z=_>0?"down":"up";De(z),ne(!0),y.debug("[VirtualScroll] Showing scroll buttons. Direction:",z),me.current&&clearTimeout(me.current),me.current=setTimeout(()=>{ne(!1),y.debug("[VirtualScroll] Hiding scroll buttons")},2e3)}}},[Q,X]),Je=r.useMemo(()=>rt(Fe,v.top),[v.top,Fe]),$e=r.useMemo(()=>{const c=N.getTotal(),u=Sr(Je,i,a,s,n,N,c);return y.debug("[VirtualScroll] Calculated rendering range:",()=>({...u,scrollPosition:Je,renderingContentSize:c,overscanCount:a,viewportSize:i})),u},[Je,i,a,s,n,N]),{renderingStartIndex:Qe,renderingEndIndex:et,visibleStartIndex:lt,visibleEndIndex:dt}=$e,tt=r.useCallback((c,u)=>{if(!k||s===0)return;const g=be(c,s);if(!(u?.ensureVisible??!0)){const Ne=F.current.get(g);Ne&&(ee.current=null,oe.current=g,qe(Ne));return}const _=N.prefixSum(g,{materializeOption:{materialize:!1}}),z=_.currentValue,j=Math.max(_.cumulative-z,0),W=j+z,Pe=rt(ce.current,v.top),he=Pe+i;if(j<Pe||W>he){je(g);const Ne=F.current.get(g);Ne?(ee.current=null,oe.current=g,qe(Ne)):ee.current=g;return}const Le=F.current.get(g);if(Le){ee.current=null,oe.current=g,qe(Le);return}ee.current=g},[k,s,N,v.top,je,qe,i]),Mt=r.useCallback((c,u)=>{if(!k||c.defaultPrevented||c.altKey||c.metaKey||c.ctrlKey)return;const g=c.target;if(g){const C=g.tagName;if(C==="INPUT"||C==="TEXTAREA"||C==="SELECT"||g.isContentEditable)return}if(c.key==="ArrowDown"){u<s-1&&(c.preventDefault(),tt(u+1));return}if(c.key==="ArrowUp"){u>0&&(c.preventDefault(),tt(u-1));return}if(c.key==="PageDown"){if(u<s-1){c.preventDefault();const{visibleStartIndex:C,visibleEndIndex:_}=Ce.current,z=Math.max(_-C+1,1),j=Math.max(z,1),W=be(Math.min(u+j,s-1),s);tt(W)}return}if(c.key==="PageUp"&&u>0){c.preventDefault();const{visibleStartIndex:C,visibleEndIndex:_}=Ce.current,z=Math.max(_-C+1,1),j=Math.max(z,1),W=be(u-j,s);tt(W)}},[k,s,tt]),gt=r.useCallback(c=>{if(!k)return;const u=be(c,s);ee.current=null,oe.current=u,G?.(u)},[k,s,G]);r.useEffect(()=>{const c=O.current?.getScrollPosition()??0,u=ce.current,g=rt(u,v.top);y.debug("[VirtualScroll] Range change effect triggered",()=>({renderingStartIndex:Qe,renderingEndIndex:et,visibleStartIndex:lt,visibleEndIndex:dt,scrollPositionState:Fe,paneScrollPosition:u,logicalScrollPosition:g,contentSize:ye,scrollPaneScrollPosition:c})),P({renderingStartIndex:Qe,renderingEndIndex:et,visibleStartIndex:lt,visibleEndIndex:dt,scrollPosition:g,totalHeight:ye})},[ye,et,Qe,v.top,P,Fe,dt,lt]);const Rt=r.useCallback(()=>{if(!X)return null;const c=Me&&Ve!==null,u=Ve==="up";return B.jsx("div",{className:"aqvs-scroll-to-edge-overlay","data-visible":c,children:u?B.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top",children:B.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:g=>{g.stopPropagation(),se.current=!0,je(0),ne(!1)},children:"Top"})}):B.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom",children:B.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:g=>{g.stopPropagation(),se.current=!0,je(s-1),ne(!1)},children:"Bottom"})})})},[X,Me,Ve,je,s]),o=r.useRef(0),{visibleItems:b,renderAnchor:R}=r.useMemo(()=>{if(s===0)return{visibleItems:B.jsx("div",{className:"aqvs-no-items-container",children:B.jsx("div",{className:"aqvs-no-items-text",children:"No items"})}),renderAnchor:0};const c=be(Qe,s),u=be(et,s),{cumulative:g,currentValue:C}=N.prefixSum(c,{materializeOption:{materialize:!1}}),_=g-C;Number.isFinite(_)&&Math.abs(_-o.current)>Ir&&(o.current=_);const z=o.current,j=[],W=[];let Pe=0,he=_;for(let ge=c;ge<=u;ge++){if(W.length>=Bt){y.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.",{cap:Bt,safeRenderingStartIndex:c,safeRenderingEndIndex:u});break}const Le=n(ge),Ne=N.get(ge),_e=Le-Ne;_e!==0&&j.push({index:ge,value:Le});const bt=he+Pe,wt=t?t(ge):ge;W.push(B.jsx(Mr,{index:ge,top:bt-z,height:Le,item:e(ge),clipItemHeight:Re,enableKeyboardNavigation:k,onKeyDown:Mt,onFocus:gt,registerItemRef:ve,children:I},wt)),Pe+=_e,he+=Ne}return j.length>0&&Promise.resolve().then(()=>{if(ke.current)return;let ge=0;for(const _e of j)if(_e.index<lt){const bt=N.get(_e.index);ge+=_e.value-bt}const Le=N.updates(j);if(ke.current||typeof Le!="number")return;Be(Le),y.debug("[VirtualScroll] Updated heights for items",j,"New total height:",Le);const Ne=O.current?.getScrollPosition()??ce.current;if(ge!==0){const _e=Ne+ge;Ze(_e),Q(_e,{immediate:!0}),y.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)",{from:Ne,to:_e,shiftAmount:ge})}else Ne!==ce.current&&Q(Ne)}),{visibleItems:W,renderAnchor:z}},[I,Re,ye,k,s,N,e,t,n,gt,Mt,Ze,ve,et,Qe,Q,lt]),V=r.useCallback(c=>{const u=(D??0)>0,g=Math.abs(c-Fe),C=u&&g>.5?Fe:c,_=rt(C,v.top);if(y.debug("[VirtualScroll] Rendering visible items",()=>({currentScrollPosition:c,effectiveScrollPosition:_,renderingStartIndex:Qe,renderingEndIndex:et,itemCount:s,viewportSize:i,callbackThrottleMs:D,diff:g,rawEffectiveScrollPosition:C})),s===0)return b;const z=v.top+R-C,j=v.bottom>0?B.jsx("div",{className:"aqvs-bottom-inset",style:{top:N.getTotal()-R,height:v.bottom}},"virtualscroll-bottom-inset"):null;return y.debug("[VirtualScroll] Rendering items",()=>({containerTop:z,logicalScrollPosition:Je,resolvedInsets:v,effectiveScrollPosition:_})),B.jsxs("div",{className:"aqvs-items-wrapper",style:{top:0,transform:`translateY(${z}px)`,willChange:"transform"},children:[b,j]})},[D,s,N,Je,R,et,Qe,v,Fe,i,b]),q=r.useMemo(()=>({renderingStartIndex:$e.renderingStartIndex,renderingEndIndex:$e.renderingEndIndex,visibleStartIndex:$e.visibleStartIndex,visibleEndIndex:$e.visibleEndIndex,scrollPosition:Je,totalHeight:N.getTotal()}),[$e,Je,N,ye]);r.useEffect(()=>{Ce.current=q},[q]),r.useImperativeHandle(Se,()=>({getScrollPosition:()=>O.current?.getScrollPosition()??-1,getContentSize:()=>O.current?.getContentSize()??-1,getViewportSize:()=>O.current?.getViewportSize()??-1,scrollTo:St,scrollToIndex:je,getFenwickTreeTotalHeight:()=>N.getTotal(),getFenwickSize:()=>N.getSize(),focusItemAtIndex:tt,getRange:()=>Ce.current,updateItemSize:Tt}),[St,je,N,tt,Tt]);const Te=N.getTotal()+v.top+v.bottom;return B.jsx(Ut,{ref:O,contentSize:Te,viewportSize:i,className:l,testId:f,onScroll:yt,background:S,tapScrollCircleOptions:ae,inertiaOptions:Oe,itemCount:s,scrollBarWidth:A,enableThumbDrag:L,enableTrackClick:M,enableArrowButtons:H,enablePointerDrag:$,pointerDragInputs:T,renderThumbOverlay:E,wheelSpeedMultiplier:Ie,onWheelHorizontal:re,contentInsets:v,contentProps:de,visibleStartIndex:lt,visibleEndIndex:dt,renderOverlay:Rt,initialScrollPosition:K.position,children:V})},vr=r.forwardRef(Rr);exports.FenwickMapTree=nt;exports.ScrollBar=$t;exports.ScrollPane=Ut;exports.TAP_SCROLL_SPEED_DEFAULTS=Lt;exports.VirtualScroll=vr;exports.computeAutoTapScrollMaxSpeedMultiplier=jt;exports.computeTapScrollSpeed=Xt;exports.minmax=xe;exports.tapScrollCircleSampleVisual=mr;exports.useFenwickMapTree=Kt;exports.useHeightCache=xr;exports.useLruCache=Wt;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Y=require("react/jsx-runtime"),r=require("react"),gt=require("tailwind-merge");class w{level;prefix;impl;constructor(e=2,t="[virtualscroll]",s=console){this.level=e,this.prefix=t,this.impl=s}static instance=new w(2,"[virtualscroll]");static setLevel(e){w.instance.setLevel(e)}setLevel(e){this.level=e}static setImplementation(e){w.instance.setImplementation(e)}setImplementation(e){this.impl=e}static setPrefix(e){w.instance.setPrefix(e)}setPrefix(e){this.prefix=e}static isEnabled(e){return w.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){w.instance.debug(e,...t)}debug(e,...t){this.level<=0&&this.impl.debug(...this.formatMessage(w.resolveLazy(e)),...t.map(w.resolveLazy))}static info(e,...t){w.instance.info(e,...t)}info(e,...t){this.level<=1&&this.impl.info(...this.formatMessage(w.resolveLazy(e)),...t.map(w.resolveLazy))}static warn(e,...t){w.instance.warn(e,...t)}warn(e,...t){this.level<=2&&this.impl.warn(...this.formatMessage(w.resolveLazy(e)),...t.map(w.resolveLazy))}static error(e,...t){w.instance.error(e,...t)}error(e,...t){this.level<=3&&this.impl.error(...this.formatMessage(w.resolveLazy(e)),...t.map(w.resolveLazy))}}const Yt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Dt=6,er=8,tr=({dragState:n,normalizedDistance:e})=>{const t=1+e*.18,s=.16+e*.24,i=.38+e*.28,a=n.active?"80ms ease-out":"220ms ease";return Y.jsxs(Y.Fragment,{children:[Y.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,${s})`,transform:`scale(${t})`,transition:`${a}, ${n.active?"80ms":"260ms"} box-shadow ease`}}),Y.jsx("div",{className:"aqvs-tap-scroll-circle-inner",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.72), rgba(28,28,28,0.58))",boxShadow:"inset 0 4px 10px rgba(0,0,0,0.24), inset 0 0 2px rgba(255,255,255,0.55)",opacity:i,transition:n.active?"120ms opacity ease-out":"220ms opacity ease"}})]})},Ut=r.memo(r.forwardRef(({onDragChange:n,className:e,maxVisualDistance:t=160,size:s=40,style:i,opacity:a=1,renderVisual:l},u)=>{const[d,x]=r.useState(Yt),I=r.useRef(null),M=r.useRef(null),E=r.useRef({x:0,y:0}),h=r.useRef(null),N=r.useRef(0),F=r.useCallback(T=>{x(T),n(T)},[n]),U=r.useCallback((T,B,q=!1)=>{const{x:Ye,y:Ne}=E.current,te=T-Ye,re=B-Ne,W=Math.abs(re),Z=W<Dt?0:re<0?-1:1,Pe=N.current;let Ve=Z;const je=Dt+er;Z===0?Pe!==0&&W<je?Ve=Pe:(Ve=0,q||(N.current=0)):Z!==Pe&&Pe!==0&&W<je?Ve=Pe:N.current=Z,F({active:q||W>=Dt,offsetX:te,offsetY:re,distance:W,direction:Ve,pointerId:I.current})},[F]),ie=r.useCallback(T=>{if(T===null)return;const B=h.current;B?.hasPointerCapture(T)&&B.releasePointerCapture(T)},[]),Q=r.useCallback((T=!1)=>{T&&ie(I.current),I.current=null,M.current=null,N.current=0,F(Yt)},[F,ie]),ee=r.useCallback(T=>{if(I.current!==null&&I.current!==T.pointerId){M.current={pointerId:T.pointerId,clientX:T.clientX,clientY:T.clientY},T.preventDefault(),T.stopPropagation();return}T.preventDefault(),T.stopPropagation();const B=h.current??T.currentTarget,{left:q,top:Ye,width:Ne,height:te}=B.getBoundingClientRect();E.current={x:q+Ne/2,y:Ye+te/2},I.current=T.pointerId;try{B.setPointerCapture(T.pointerId)}catch{}U(T.clientX,T.clientY,!0)},[U]),ge=r.useCallback(T=>{if(I.current!==T.pointerId){M.current!==null&&M.current.pointerId===T.pointerId&&(M.current={pointerId:T.pointerId,clientX:T.clientX,clientY:T.clientY});return}T.preventDefault(),U(T.clientX,T.clientY)},[U]),ve=r.useCallback(T=>{if(I.current!==T.pointerId){M.current!==null&&M.current.pointerId===T.pointerId&&(M.current=null);return}T.preventDefault(),T.stopPropagation();const B=M.current;if(M.current=null,B!==null){ie(T.pointerId);const q=h.current;let Ye=!0;if(q!==null&&typeof q.setPointerCapture=="function")try{q.setPointerCapture(B.pointerId)}catch(Ne){(typeof Ne=="object"&&Ne!==null&&"name"in Ne?Ne.name:void 0)==="NotFoundError"&&(Ye=!1)}if(Ye){I.current=B.pointerId,U(B.clientX,B.clientY,!0);return}}Q(!0)},[Q,ie,U]),V=r.useCallback(T=>{T.target===T.currentTarget&&I.current===T.pointerId&&Q(!1)},[Q]);r.useImperativeHandle(u,()=>({reset:()=>{Q(!0)},getElement:()=>h.current}),[Q]);const L=Math.min(Math.max(a,0),1),S=s/64,j=Math.min(d.distance,t)/t,G=d.direction*j*10*S,P=l??tr,ae={dragState:d,normalizedDistance:j,sizeScale:S,size:s,opacity:L},K={...i,width:s,height:s,transform:`translateY(${G}px)`};return K.opacity=L,Y.jsx("div",{ref:h,"data-testid":"virtual-scroll-tap-circle",className:gt.twMerge("aqvs-tap-scroll-circle",e),style:K,tabIndex:-1,onPointerDown:ee,onPointerMove:ge,onPointerUp:ve,onPointerCancel:ve,onLostPointerCapture:V,role:"presentation",children:P(ae)})}));Ut.displayName="TapScrollCircle";const J=(n,e,t)=>Math.max(e,Math.min(t,n)),Ft="virtualscroll:tap-scroll-cancel",Bt=20,rr=250,nr=60,sr=20,ir=20,zt={maxDistance:240,minSpeedMultiplier:.2},ar=zt.maxDistance,qt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},At=2.2,or=8,lr=120,cr=1/10,Ze={enabled:!0,size:40,offsetX:-80,offsetY:0,className:void 0,maxVisualDistance:ar,minSpeedMultiplier:zt.minSpeedMultiplier,opacity:.9,renderVisual:void 0,maxSpeedCurve:void 0},ur=n=>n?{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"},fr=(n,e)=>{const t=n?.maxSpeedMultiplier,s=typeof t=="number"?t:Wt(e);return{enabled:n?.enabled??Ze.enabled,size:n?.size??Ze.size,offsetX:n?.offsetX??Ze.offsetX,offsetY:n?.offsetY??Ze.offsetY,className:n?.className??Ze.className,maxVisualDistance:n?.maxVisualDistance??Ze.maxVisualDistance,maxSpeedMultiplier:s,minSpeedMultiplier:Math.max(n?.minSpeedMultiplier??Ze.minSpeedMultiplier,0),opacity:J(n?.opacity??Ze.opacity,0,1),renderVisual:n?.renderVisual??Ze.renderVisual,maxSpeedCurve:n?.maxSpeedCurve??Ze.maxSpeedCurve}},dr=({isDragging:n,isThumbHovered:e,enableThumbDrag:t})=>r.useMemo(()=>t?n?"dragging":e?"hover":"idle":"disabled",[t,n,e]),mr=({canUseArrowButtons:n,enableArrowButtons:e,resetTapScroll:t,scrollByStep:s})=>{const i=r.useRef(null),a=r.useRef(null),l=r.useRef(null),u=r.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null),a.current!==null&&(window.clearTimeout(a.current),a.current=null),l.current!==null&&(window.removeEventListener("pointerup",l.current),window.removeEventListener("pointercancel",l.current),window.removeEventListener("blur",l.current),l.current=null)},[]),d=r.useCallback(()=>{u()},[u]),x=r.useCallback(M=>E=>{if(!n)return;E.cancelable&&E.preventDefault(),E.stopPropagation(),t(),u(),s(M),a.current=window.setTimeout(()=>{i.current=window.setInterval(()=>{s(M)},nr)},rr);const h=()=>u();l.current=h,window.addEventListener("pointerup",h),window.addEventListener("pointercancel",h),window.addEventListener("blur",h)},[n,u,t,s]),I=r.useCallback(M=>E=>{e&&(E.key==="Enter"||E.key===" "||E.key==="Spacebar")&&(E.preventDefault(),s(M))},[e,s]);return r.useEffect(()=>{n||u()},[n,u]),r.useEffect(()=>()=>{u()},[u]),{handleArrowPointerDown:x,handleArrowPointerUp:d,handleArrowKeyDown:I}},pr=700,dt=(n,e)=>typeof n=="number"&&Number.isFinite(n)?n:e,Kt=({distance:n,maxDistance:e,viewportSize:t,minSpeedMultiplier:s,maxSpeedMultiplier:i,hasCustomMaxSpeedMultiplier:a,curve:l})=>{const u=Math.max(dt(n,0),0),d=dt(e,0),x=d>0?Math.min(u,d)/d:1,I=Math.max(dt(t,0),0),M=Math.max(dt(s,0),0),E=Math.max(dt(i,0),0),h=Math.max(I*M,40),N=a?h:1200,F=Math.max(I*E,N),U=l?Math.max(dt(l.exponentialScale,E),0):0,ie=l?Math.min(F,Math.max(I*U,h)):F,Q=Math.max(ie,h);let ee=x**1.1;if(l){const ve=Math.min(Math.max(dt(l.exponentialSteepness,0),0),pr);if(ve===0)ee=x;else{const V=Math.expm1(ve)||1;ee=Math.min(Math.max(Math.expm1(ve*x)/V,0),1)}}const ge=Math.min(Math.max(dt(l?.easedOffset,0),0),1);return h+(Q-h)*(ge+(1-ge)*ee)},Wt=n=>{if(!n||n<=0)return At;const e=Math.max(1,n),t=Math.log10(e),s=At+t*or;return J(s,At,lr)},Gt=({contentSize:n,viewportSize:e,scrollPosition:t,onScroll:s,enableThumbDrag:i=!0,enableTrackClick:a=!0,enableArrowButtons:l=!0,horizontal:u=!1,scrollBarWidth:d=12,className:x,ariaControls:I,tapScrollCircleOptions:M,itemCount:E,renderThumbOverlay:h,visibleStartIndex:N,visibleEndIndex:F})=>{const[U,ie]=r.useState(!1),[Q,ee]=r.useState(!1),[ge,ve]=r.useState(!1),V=r.useRef(null),L=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null}),S=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}),j=r.useRef(t),G=r.useRef(s),P=r.useRef(qt),ae=r.useRef(null),K=r.useRef(null),T=r.useRef(null),B=r.useRef(0),q=r.useRef(0),Ye=r.useMemo(()=>fr(M,E),[E,M]),Ne=r.useMemo(()=>ur(u),[u]),{enabled:te,size:re,offsetX:W,offsetY:Z,className:Pe,maxVisualDistance:Ve,maxSpeedMultiplier:je,minSpeedMultiplier:y,opacity:lt,renderVisual:ne,maxSpeedCurve:C}=Ye,we=r.useRef({viewportSize:e,maxScrollPosition:Math.max(n-e,0),scrollBarVisible:n>e,effectiveTapMaxDistance:Math.max(Ve,1),tapCircleMaxSpeedMultiplier:je,tapCircleMinSpeedMultiplier:y,tapCircleMaxSpeedCurve:C,tapScrollCircleOptions:M,effectiveTrackLength:0,onScroll:s,scrollPosition:t}),{mainSizeKey:_e,crossSizeKey:Ke,positionKey:qe,selectDelta:g,getPointerCoordinate:_,arrowLabels:pe,arrowIcons:H,directionClass:Te,orientation:oe}=Ne,be=Math.max(Ve,1),Me=e/n,Se=Math.max(e-d*2,0),le=Me*Se,ke=Math.min(Math.max(Bt,le||0),Se||Bt),ce=n-e,se=Math.max(Se-ke,0),De=ce<=0||se<=0?0:J(t/ce*se,0,se),Be=De+ke/2,ye=n>e||U,Qe=ye&&l;r.useLayoutEffect(()=>{we.current={viewportSize:e,maxScrollPosition:ce,scrollBarVisible:ye,effectiveTapMaxDistance:be,tapCircleMaxSpeedMultiplier:je,tapCircleMinSpeedMultiplier:y,tapCircleMaxSpeedCurve:C,tapScrollCircleOptions:M,effectiveTrackLength:se,onScroll:s,scrollPosition:t}}),r.useLayoutEffect(()=>{j.current=t},[t]),r.useLayoutEffect(()=>{G.current=s},[s]),r.useEffect(()=>{i||ee(!1)},[i]);const $e=dr({isDragging:U,isThumbHovered:Q,enableThumbDrag:i}),Ce=r.useCallback((o,b)=>{const v=we.current,D=b??j.current;if(G.current){const Oe=G.current(o,D);if(typeof Oe=="number"&&Number.isFinite(Oe))return j.current=Oe,Oe}const z=typeof o=="function"?o(D):o,he=Math.max(v.maxScrollPosition,0),Ae=v.scrollBarVisible?J(z,0,he):0;return j.current=Ae,Ae},[]),m=r.useCallback(o=>{const b=we.current,v=j.current;if(!b.scrollBarVisible||b.maxScrollPosition<=0){const at=Ce(0,v),c=at-v;return{nextPosition:at,actualDelta:c,reachedBoundary:!0}}if(o===0)return{nextPosition:v,actualDelta:0,reachedBoundary:!1};const z=Ce(at=>J(at+o,0,b.maxScrollPosition),v),he=z-v,Ae=o<0&&v+o<=0,Oe=o>0&&v+o>=b.maxScrollPosition,xt=o<0&&(z<=0||Ae&&he===0)||o>0&&(z>=b.maxScrollPosition||Oe&&he===0);return{nextPosition:z,actualDelta:he,reachedBoundary:xt}},[Ce]),R=r.useCallback((o,b)=>{o.current+=b;const v=Math.max(we.current.maxScrollPosition,0);v>0&&(o.current=J(o.current,-v,v));const D=m(o.current);return o.current-=D.actualDelta,D.reachedBoundary&&(o.current=0),D},[m]),ue=r.useCallback(()=>{K.current!==null&&(window.cancelAnimationFrame(K.current),K.current=null),T.current=null,B.current=0,q.current=0},[]),xe=r.useCallback(()=>{P.current={...qt},ve(!1),ae.current?.reset(),ue()},[ue]),Ee=r.useCallback(o=>{const b=P.current,v=we.current;if(!b.active||b.direction===0){ue();return}if(!v.scrollBarVisible||v.maxScrollPosition<=0){ue();return}const D=T.current??o,z=Math.max((o-D)/1e3,0),he=Math.min(z,cr);if(T.current=o,he<=0){K.current=window.requestAnimationFrame(Ee);return}const Ae=Kt({distance:b.distance,maxDistance:v.effectiveTapMaxDistance,viewportSize:v.viewportSize,minSpeedMultiplier:v.tapCircleMinSpeedMultiplier,maxSpeedMultiplier:v.tapCircleMaxSpeedMultiplier,hasCustomMaxSpeedMultiplier:typeof v.tapScrollCircleOptions?.maxSpeedMultiplier=="number",curve:v.tapCircleMaxSpeedCurve});q.current!==b.direction&&(q.current=b.direction,B.current=0);const{reachedBoundary:Oe}=R(B,b.direction*Ae*he);if(Oe){ue();return}K.current=window.requestAnimationFrame(Ee)},[R,ue]),et=r.useCallback(()=>{K.current===null&&(T.current=null,B.current=0,K.current=window.requestAnimationFrame(Ee))},[Ee]);r.useEffect(()=>{const o=P.current;!o.active||o.direction===0||et()},[n,e,et]),r.useEffect(()=>()=>{ue()},[ue]);const We=r.useCallback(o=>{P.current=o,ve(o.active),o.active&&o.direction!==0?et():ue()},[et,ue]);r.useEffect(()=>{te||xe()},[xe,te]),r.useEffect(()=>{const o=b=>{const D=b.detail?.paneId;D&&I&&D!==I||xe()};return window.addEventListener(Ft,o),()=>{window.removeEventListener(Ft,o)}},[I,xe]),r.useEffect(()=>{if(!te)return;const o=b=>{if(!P.current.active||P.current.pointerId===b.pointerId)return;const v=b.target;if(!(v instanceof Node)){xe();return}ae.current?.getElement()?.contains(v)||xe()};return document.addEventListener("pointerdown",o,!0),()=>{document.removeEventListener("pointerdown",o,!0)}},[xe,te]);const Ge=o=>{if(!ye||se<=0||ce<=0)return 0;const b=J(o,0,se);return J(b/se*ce,0,ce)},Xe=r.useCallback(o=>{const{scrollBarVisible:b,effectiveTrackLength:v,maxScrollPosition:D}=we.current;if(w.debug("[ScrollBar] calculateScrollPositionFromThumb",()=>({thumbPos:o,trackLen:v,maxScroll:D})),v<=0||D<=0)return null;const z=J(o,0,v);return J(z/v*D,0,D)},[]),tt=r.useCallback(o=>{const b=o.getBoundingClientRect(),v=u?b.width:b.height,D=xt=>{const at=Number.parseFloat(xt);return Number.isFinite(at)?at:0},z=window.getComputedStyle(o),he=D(u?z.width:z.height),Ae=he>0?he+D(u?z.paddingLeft:z.paddingTop)+D(u?z.paddingRight:z.paddingBottom)+D(u?z.borderLeftWidth:z.borderTopWidth)+D(u?z.borderRightWidth:z.borderBottomWidth):0,Oe=Ae>0?Ae:u?o.offsetWidth:o.offsetHeight;return Oe<=0||v<=0?1:v/Oe},[u]),ct=r.useCallback(o=>{const b=L.current;if(b.pointerId!==o.pointerId)return;const v=o.clientX-b.startClientX,D=o.clientY-b.startClientY,z=g(v,D)/(b.scale||1);w.debug("[ScrollBar] handleThumbPointerMove",()=>({delta:z,startThumbPosition:b.startThumbPosition,clientY:o.clientY,startClientY:b.startClientY,metrics:we.current}));const he=Xe(b.startThumbPosition+z);he!==null&&Ce(he),o.cancelable&&o.preventDefault()},[g,Xe,Ce]),Ue=r.useCallback(o=>{const b=L.current;if(b.pointerId!==o.pointerId)return;document.removeEventListener("pointermove",ct),document.removeEventListener("pointerup",Ue),document.removeEventListener("pointercancel",Ue);const v=b.captureTarget;if(v?.hasPointerCapture?.(o.pointerId)&&v.releasePointerCapture(o.pointerId),L.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null},ie(!1),V.current){const D=V.current.getBoundingClientRect();o.clientX>=D.left&&o.clientX<=D.right&&o.clientY>=D.top&&o.clientY<=D.bottom||ee(!1)}else ee(!1)},[ct]);r.useEffect(()=>()=>{document.removeEventListener("pointermove",ct),document.removeEventListener("pointerup",Ue),document.removeEventListener("pointercancel",Ue)},[ct,Ue]);const Tt=r.useRef(0),fe=r.useRef(0),ut=r.useCallback(o=>{const b=Math.max(Math.round(we.current.viewportSize/ir),sr);fe.current!==o&&(fe.current=o,Tt.current=0),R(Tt,o*b)},[R]),{handleArrowPointerDown:vt,handleArrowPointerUp:bt,handleArrowKeyDown:He}=mr({canUseArrowButtons:Qe,enableArrowButtons:l,resetTapScroll:xe,scrollByStep:ut}),Pt=o=>{if(!ye)return;if(!i){o.preventDefault(),o.stopPropagation();return}if(o.pointerType==="mouse"&&o.button!==0||o.ctrlKey)return;xe();const b=o.currentTarget,v=tt(b);let D=null;if(b.setPointerCapture)try{b.setPointerCapture(o.pointerId),D=b}catch{D=null}L.current={pointerId:o.pointerId,startThumbPosition:De,startClientX:o.clientX,startClientY:o.clientY,scale:v,captureTarget:D},document.addEventListener("pointermove",ct),document.addEventListener("pointerup",Ue),document.addEventListener("pointercancel",Ue),ie(!0),ee(!0),o.preventDefault(),o.stopPropagation()},yt=o=>{if(!ye)return;if(!a){o.preventDefault(),o.stopPropagation();return}if(o.pointerType==="mouse"&&o.button!==0||o.ctrlKey)return;const b=o.currentTarget,v=b.getBoundingClientRect(),D=_(o),z=tt(b),he=(D-(u?v.left:v.top))/z;xe();const Ae=he-ke/2,Oe=Ge(Ae);if(Ce(Oe),b.setPointerCapture)try{b.setPointerCapture(o.pointerId)}catch{}S.current={pointerId:o.pointerId,startThumbPosition:Ae,startClientX:o.clientX,startClientY:o.clientY,scale:z},o.preventDefault(),o.stopPropagation()},mt=()=>{S.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}},Ct=o=>{const b=S.current;if(b.pointerId!==o.pointerId)return;if(o.pointerType==="mouse"&&o.buttons===0){mt();return}const v=o.clientX-b.startClientX,D=o.clientY-b.startClientY,z=g(v,D)/(b.scale||1),he=Ge(b.startThumbPosition+z);Ce(he),o.cancelable&&o.preventDefault()},kt=o=>{if(S.current.pointerId!==o.pointerId)return;const b=o.currentTarget;b.hasPointerCapture?.(o.pointerId)&&b.releasePointerCapture(o.pointerId),mt(),o.preventDefault(),o.stopPropagation()},rt=o=>{if(S.current.pointerId!==o.pointerId)return;const b=o.currentTarget;b.hasPointerCapture?.(o.pointerId)&&b.releasePointerCapture(o.pointerId),mt()},ft=o=>{o.target===o.currentTarget&&S.current.pointerId===o.pointerId&&mt()},nt=r.useMemo(()=>J((ge?1:.8)*lt,0,1),[ge,lt]),st=r.useMemo(()=>{const b=`calc(50% - ${re/2}px + ${Z}px)`;return{left:W,top:b}},[W,Z,re]),it=(o,b,v,D)=>Y.jsx("button",{type:"button",tabIndex:0,className:"aqvs-scrollbar-arrow-button",style:{[_e]:d,[Ke]:d},"aria-label":b,onPointerDown:vt(o),onPointerUp:bt,onPointerLeave:bt,onPointerCancel:bt,onKeyDown:He(o),"aria-disabled":!l,disabled:!Qe,children:Y.jsx("span",{"aria-hidden":"true",children:v})},D),pt=h&&ye?{orientation:oe,scrollPosition:t,maxScrollPosition:ce,contentSize:n,viewportSize:e,thumbSize:ke,thumbPosition:De,thumbCenter:Be,trackSize:Se,isDragging:U,isTapScrollActive:ge,visibleStartIndex:N,visibleEndIndex:F}:null;return Y.jsxs("div",{className:gt.twMerge("aqvs-scrollbar",Te,!ye&&"pointer-events-none opacity-0",x),style:{[_e]:e,[Ke]:d},role:"scrollbar",tabIndex:-1,"aria-controls":I,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":ce,"aria-orientation":u?"horizontal":"vertical",children:[!u&&ye&&te&&Y.jsx(Ut,{ref:ae,className:gt.twMerge("aqvs-scrollbar-tap-circle-wrapper",Pe),size:re,maxVisualDistance:be,style:st,opacity:nt,renderVisual:ne,onDragChange:We},"tap-circle"),it(-1,pe[0],H[0],"arrow-start"),Y.jsxs("div",{className:"aqvs-scrollbar-track",style:{borderRadius:d/2},onPointerDown:yt,onPointerMove:Ct,onPointerUp:kt,onPointerCancel:rt,onLostPointerCapture:ft,"aria-disabled":!a,children:[pt&&Y.jsx("div",{className:"aqvs-scrollbar-overlay","aria-hidden":!0,children:h?.(pt)},"overlay"),Y.jsx("div",{className:gt.twMerge("aqvs-scrollbar-thumb-wrapper",!(ye||U)&&"pointer-events-none opacity-0"),style:{[_e]:ke,[qe]:De,...u?{top:0,bottom:0}:{left:0,right:0}},onPointerDown:Pt,role:"slider","aria-orientation":u?"horizontal":"vertical","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":ce,"aria-disabled":!i,tabIndex:-1,children:Y.jsx("div",{ref:V,className:gt.twMerge("aqvs-scrollbar-thumb",u?"aqvs-scrollbar-thumb-horizontal":"aqvs-scrollbar-thumb-vertical"),"data-testid":"aqvs-scrollbar-thumb","data-thumb-state":$e,style:{borderRadius:d-1,cursor:i?"pointer":"default"},onMouseEnter:()=>{i&&ee(!0)},onMouseLeave:()=>{i&&ee(!1)}},"thumb")},"thumb-wrapper")]},"track"),it(1,pe[1],H[1],"arrow-end")]})},hr=["mouse","pen","touch"],Lt=(n,e)=>!(n==="mouse"||n==="pen"||n==="touch")||e.includes(n),gr=n=>n==="mouse"||n==="pen",St={maxVelocity:6,minVelocity:.02,deceleration:.0025,velocitySampleWindow:90,startVelocityThreshold:.04},wt=(n,e,t)=>{for(const[s,i,a]of e)t==="add"?n.addEventListener(s,i,a):n.removeEventListener(s,i,a)},Zt=r.forwardRef(({children:n,contentSize:e,viewportSize:t,scrollBarWidth:s=12,enableThumbDrag:i=!0,enableTrackClick:a=!0,enableArrowButtons:l=!0,enablePointerDrag:u=!0,pointerDragInputs:d=hr,onScroll:x,className:I,testId:M,style:E,background:h,tapScrollCircleOptions:N,inertiaOptions:F,itemCount:U,renderThumbOverlay:ie,wheelSpeedMultiplier:Q=1,onWheelHorizontal:ee,contentInsets:ge,visibleStartIndex:ve,visibleEndIndex:V,renderOverlay:L,initialScrollPosition:S=0,contentProps:j},G)=>{const P=r.useRef(Number.isFinite(S)?Math.max(0,S):0),ae=r.useRef(null),K=r.useRef(null),T=r.useRef(ee);r.useEffect(()=>{T.current=ee},[ee]);const B=r.useRef({frame:null,velocity:0,lastTimestamp:null,generation:0}),q=r.useMemo(()=>({maxVelocity:F?.maxVelocity??St.maxVelocity,minVelocity:F?.minVelocity??St.minVelocity,deceleration:F?.deceleration??St.deceleration,velocitySampleWindow:F?.velocitySampleWindow??St.velocitySampleWindow,startVelocityThreshold:F?.startVelocityThreshold??St.startVelocityThreshold}),[F]),Ye=r.useMemo(()=>({top:Math.max(0,ge?.top??0),bottom:Math.max(0,ge?.bottom??0)}),[ge]);w.debug("[ScrollPane] ScrollPane rendered",()=>({contentSize:e,viewportSize:t,scrollBarWidth:s,className:I,style:E,tapScrollCircleOptions:N,inertiaOptions:F,enablePointerDrag:u,contentInsets:Ye}));const Ne=r.useRef({contentSize:e,viewportSize:t});Ne.current={contentSize:e,viewportSize:t};const te=r.useMemo(()=>e>t,[e,t]),re=r.useCallback(g=>{const{contentSize:_,viewportSize:pe}=Ne.current,H=_>pe,Te=P.current;if(w.debug("[ScrollPane] scrollTo called",()=>({newPosition:g,contentSize:_,viewportSize:pe,currentIsScrollable:H,prevPosition:Te})),!H)return P.current!==0&&(P.current=0,x?.(0,Te)),P.current;const oe=typeof g=="function"?g(P.current):g;if(!Number.isFinite(oe))return w.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position",{nextPosition:oe}),P.current;const be=Math.max(_-pe,0),Me=J(oe,0,be);return P.current!==Me&&(P.current=Me,x?.(Me,Te)),P.current},[x]),W=r.useRef(re);r.useEffect(()=>{W.current=re},[re]);const Z=r.useCallback(()=>{const g=B.current;g.generation+=1,g.frame!==null&&cancelAnimationFrame(g.frame),g.frame=null,g.velocity=0,g.lastTimestamp=null},[]),Pe=r.useRef(Z);r.useEffect(()=>{Pe.current=Z},[Z]),r.useEffect(()=>()=>{Pe.current()},[]);const Ve=r.useCallback(g=>{if(!te)return;const{maxVelocity:_,minVelocity:pe,deceleration:H,startVelocityThreshold:Te}=q,oe=J(g,-_,_);if(Math.abs(oe)<Te)return;Z(),B.current.velocity=oe,B.current.lastTimestamp=null;const be=B.current.generation,Me=Se=>{const le=B.current;if(le.generation!==be)return;if(le.lastTimestamp===null){le.lastTimestamp=Se,le.frame=requestAnimationFrame(Me);return}const ke=Se-le.lastTimestamp;if(le.lastTimestamp=Se,ke<=0){le.frame=requestAnimationFrame(Me);return}const ce=le.velocity;let se=ce;const De=H*ke;ce>0?se=Math.max(0,ce-De):ce<0&&(se=Math.min(0,ce+De));const ye=(ce+se)/2*ke,Qe=P.current;if(ye!==0&&W.current(xe=>xe+ye),B.current.generation!==be)return;const $e=P.current,{contentSize:Ce,viewportSize:m}=Ne.current,R=Math.max(Ce-m,0);le.velocity=se;const ue=$e===Qe||$e<=0&&se<=0||$e>=R&&se>=0;if(Math.abs(se)<pe||ue){Z();return}le.frame=requestAnimationFrame(Me)};B.current.frame=requestAnimationFrame(Me)},[te,q,Z]),je=r.useRef(Ve);r.useEffect(()=>{je.current=Ve},[Ve]),r.useLayoutEffect(()=>{Ne.current={contentSize:e,viewportSize:t}},[e,t]),r.useLayoutEffect(()=>{const g=K.current;if(!g)return;const _=()=>{g.scrollTop!==0&&(w.debug("[ScrollPane] Native scroll detected, resetting to 0",()=>({scrollTop:g.scrollTop})),g.scrollTop=0),g.scrollLeft!==0&&(g.scrollLeft=0)};return g.addEventListener("scroll",_),()=>g.removeEventListener("scroll",_)},[]),r.useLayoutEffect(()=>{if(te){w.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change",()=>({contentSize:e,viewportSize:t,scrollPosition:P.current}));const g=J(e-t,0,e);P.current>g&&re(g)}else re(0)},[te,re,e,t]),r.useEffect(()=>{const g=H=>{if(H.ctrlKey)return;const Te=H.shiftKey&&H.deltaX===0,oe=Te?H.deltaY:H.deltaX,be=Te?0:H.deltaY;if(oe!==0&&Math.abs(oe)>=Math.abs(be)){if(T.current){H.preventDefault(),Z();let le=oe;H.deltaMode===1?le*=16:H.deltaMode===2&&(le*=t),T.current(le)}return}if(!te||H.deltaY===0)return;H.preventDefault(),Z();let Se=H.deltaY;H.deltaMode===1?Se*=16:H.deltaMode===2&&(Se*=t),Q!==1&&(Se*=Q),w.debug("[ScrollPane] wheel event",()=>({deltaY:Se,scrollPosition:P.current,wheelSpeedMultiplier:Q,deltaMode:H.deltaMode,scrollTop:K.current?.scrollTop})),re(le=>le+Se)},_=()=>{Z()},pe=ae.current;return pe&&(pe.addEventListener("wheel",g,{passive:!1}),pe.addEventListener("pointerdown",_,{capture:!0,passive:!0})),()=>{pe&&(pe.removeEventListener("wheel",g),pe.removeEventListener("pointerdown",_,{capture:!0}))}},[te,re,Z,t,Q]),r.useImperativeHandle(G,()=>({scrollTo:g=>(Z(),re(g)),getScrollPosition:()=>P.current,getContentSize:()=>e,getViewportSize:()=>t}),[re,e,t,Z]);const y=r.useId(),lt=j?.id??y,ne=r.useRef({pointerType:"",pointerId:null,startClientY:0,startScroll:0,isDragging:!1,shouldCancelNextClick:!1,clickResetTimer:null,velocitySamples:[]}),C=r.useRef(u),we=r.useRef(d);r.useEffect(()=>{C.current=u},[u]),r.useEffect(()=>{we.current=d},[d]);const _e=r.useRef(te);r.useEffect(()=>{_e.current=te},[te]);const Ke=r.useRef(q);r.useEffect(()=>{Ke.current=q},[q]),r.useEffect(()=>{const g=ne.current;if(u&&te&&(g.pointerId===null||Lt(g.pointerType,d))||g.pointerId===null)return;const _=K.current;g.clickResetTimer!==null&&(window.clearTimeout(g.clickResetTimer),g.clickResetTimer=null);const pe=g.isDragging&&g.shouldCancelNextClick,H=g.pointerId;g.pointerId=null,g.pointerType="",g.startClientY=0,g.startScroll=0,g.isDragging=!1,g.shouldCancelNextClick=pe,g.velocitySamples=[],_?.hasPointerCapture(H)&&_.releasePointerCapture(H)},[u,d,te]),r.useEffect(()=>{const g=K.current;if(!g)return;const _=6,pe=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),H=()=>{const m=ne.current;m.pointerId=null,m.pointerType="",m.startClientY=0,m.startScroll=0,m.isDragging=!1,m.velocitySamples=[]},Te=()=>{const m=ne.current;m.clickResetTimer!==null&&(window.clearTimeout(m.clickResetTimer),m.clickResetTimer=null)},oe=m=>{const R=ne.current,ue=pe();R.velocitySamples.push({clientY:m,time:ue});const xe=Ke.current.velocitySampleWindow;R.velocitySamples=R.velocitySamples.filter(Ee=>ue-Ee.time<=xe)},be=m=>m instanceof HTMLElement&&m.closest("[data-scrollpane-ignore-drag='true']")!==null,Me=m=>{const R=ne.current;R.shouldCancelNextClick&&(m.preventDefault(),m.stopPropagation(),R.shouldCancelNextClick=!1)},Se=m=>{const R=ne.current;if(!R.isDragging){if(R.isDragging=!0,R.shouldCancelNextClick=!0,!g.hasPointerCapture(m.pointerId))try{g.setPointerCapture(m.pointerId)}catch{}oe(m.clientY)}},le=m=>m.isTrusted||m.target===g,ke=m=>{const R=ne.current;g.hasPointerCapture(m)&&g.releasePointerCapture(m),R.shouldCancelNextClick=!1,Te(),H()},ce=m=>{const R=ne.current;if(R.pointerId!==m.pointerId)return;if(m.buttons===0&&gr(m.pointerType)){ke(m.pointerId);return}if(!(C.current&&_e.current)||!Lt(m.pointerType,we.current)||!R.isDragging&&(Math.abs(m.clientY-R.startClientY)<_||(Se(m),!R.isDragging)))return;oe(m.clientY);const ue=m.clientY-R.startClientY,xe=R.startScroll-ue;W.current(xe),m.cancelable&&m.preventDefault()},se=()=>{const m=ne.current;return m.pointerId!==null||!m.shouldCancelNextClick?!1:(Te(),m.clickResetTimer=window.setTimeout(()=>{const R=ne.current;R.shouldCancelNextClick=!1,R.clickResetTimer=null},0),!0)},De=m=>{const R=ne.current;if(R.pointerId!==m.pointerId){se();return}R.isDragging&&R.shouldCancelNextClick&&m.cancelable&&(m.preventDefault(),m.stopPropagation()),R.isDragging&&oe(m.clientY);let ue=0;if(R.isDragging&&R.velocitySamples.length>=2){const Ee=R.velocitySamples,et=Ke.current.velocitySampleWindow,We=Ee[Ee.length-1],Ge=Ee.find(Xe=>We.time-Xe.time<=et)??Ee[0];if(We&&Ge&&We.time!==Ge.time){const Xe=We.clientY-Ge.clientY,tt=We.time-Ge.time;ue=-(Xe/tt)}}Te(),R.shouldCancelNextClick&&(R.clickResetTimer=window.setTimeout(()=>{const Ee=ne.current;Ee.shouldCancelNextClick=!1,Ee.clickResetTimer=null},0));const xe=Ke.current.startVelocityThreshold;H(),g.hasPointerCapture(m.pointerId)&&g.releasePointerCapture(m.pointerId),Math.abs(ue)>=xe&&je.current?.(ue)},Be=m=>{if(ne.current.pointerId!==null){if(!m.isPrimary||m.pointerType!==ne.current.pointerType)return;ke(ne.current.pointerId)}if(ne.current.shouldCancelNextClick&&(Te(),ne.current.shouldCancelNextClick=!1),!(C.current&&_e.current)||!Lt(m.pointerType,we.current)||m.button!==0&&m.pointerType==="mouse"||m.ctrlKey||m.metaKey||m.altKey||be(m.target))return;window.dispatchEvent(new CustomEvent(Ft,{detail:{paneId:y}})),Pe.current?.();const R=ne.current;Te(),R.pointerId=m.pointerId,R.pointerType=m.pointerType,R.startClientY=m.clientY,R.startScroll=P.current,R.isDragging=!1,R.shouldCancelNextClick=!1,R.velocitySamples=[]},ye=m=>{if(ne.current.pointerId!==m.pointerId){se();return}le(m)&&ke(m.pointerId)},$e=[["click",Me,!0],["pointerdown",Be,{passive:!1}],["lostpointercapture",m=>{m.target!==g||ne.current.pointerId!==m.pointerId||ke(m.pointerId)},void 0]],Ce=[["pointermove",ce,{passive:!1}],["pointerup",De,void 0],["pointercancel",ye,void 0]];return wt(g,$e,"add"),wt(window,Ce,"add"),()=>{wt(g,$e,"remove"),wt(window,Ce,"remove");const m=ne.current;m.pointerId!==null&&g.hasPointerCapture(m.pointerId)&&g.releasePointerCapture(m.pointerId),Te(),H()}},[y]);const qe=r.useCallback(g=>(Z(),re(g)),[re,Z]);return Y.jsxs("div",{ref:ae,"data-testid":M,className:gt.twMerge("aqvs-scroll-pane",I),style:E,children:[Y.jsxs("div",{ref:K,className:gt.twMerge("aqvs-scroll-pane-content"),"data-testid":"aqvs-scroll-pane-content",style:{height:t,paddingTop:Ye.top,paddingBottom:Ye.bottom,...u&&te&&d.some(g=>g==="touch"||g==="pen")?{touchAction:"none"}:{}},...j,id:lt,children:[h,n(P.current)]}),Y.jsx(Gt,{contentSize:e,viewportSize:t,scrollPosition:P.current,onScroll:qe,enableThumbDrag:i,enableTrackClick:a,enableArrowButtons:l,scrollBarWidth:s,ariaControls:lt,tapScrollCircleOptions:N,itemCount:U,renderThumbOverlay:ie,visibleStartIndex:ve,visibleEndIndex:V},"scrollbar"),L?.()]})}),Ht=(n,e,t)=>Math.min(Math.max(n,e),t),br=({dragState:n,normalizedDistance:e,sizeScale:t,size:s})=>{const i=Math.max(s/2,1),a=1+e*.65,l=Math.max(.65,1-e*.25),u=n.direction*e*26*t,d=.8+e*.18,x=3*t,I=6*t,M=22*t,E=Math.abs(u)+I,h=u>0?x:-Math.abs(u)-x,N=Math.max(2.5,3*t),F=Ht(n.offsetX,-i,i),U=Ht(n.offsetY,-i,i),ie=i*.35,Q=F/i*ie,ee=U/i*ie,ge=Q*.45,ve=ee*.45,V=Math.max(M*.38,6),L=.65+e*.2,S=n.active;return Y.jsxs(Y.Fragment,{children:[Y.jsx("div",{className:"aqvs-tap-scroll-circle-gradient",style:{transform:`scale(${l}, ${a})`,transition:S?"40ms transform ease-out":"200ms ease transform"}}),Y.jsx("div",{className:"aqvs-sample-visual-pupil",style:{width:M,height:M,transform:`translate(calc(-50% + ${Q}px), calc(-50% + ${ee}px)) scale(${l}, ${d*a})`,transition:S?"70ms transform ease-out":"200ms ease transform"}}),Y.jsx("div",{className:"aqvs-sample-visual-highlight",style:{width:V,height:V,transform:`translate(calc(-50% + ${ge}px), calc(-50% + ${ve}px)) scale(${l}, ${a})`,opacity:L,boxShadow:"0 0 8px rgba(255,255,255,0.45)",transition:S?"120ms opacity 150ms, 120ms transform ease-out ease-out":"220ms ease transform, 240ms opacity ease"}}),Y.jsx("div",{className:"aqvs-sample-visual-rod",style:{width:N,height:E,transform:`translate(-50%, ${h}px)`,opacity:e,transition:S?"40ms height, 60ms opacity ease-out ease-out":"200ms ease height, 120ms ease opacity"}})]})},Et=100,xr=n=>{if(!Number.isFinite(n))return 0n;const e=Math.trunc(n);return e<=0?0n:BigInt(e)},_t=(n,e)=>{if(!Number.isFinite(n))throw new Error(`valueFn returned a non-finite value at index ${e}: ${n}`);return n},It=n=>{if(n<=0||!Number.isFinite(n))return 0;const e=Math.trunc(n);if(e<=2147483647)return e&-e;const t=BigInt(e)&-BigInt(e);return Number(t)};class ot{tree;deltas;size;baseValue;valueFn;total;constructor(e,t,s){this.reset(e,t,s)}reset(e,t,s){const i=Number.isFinite(e)&&e>0?Math.trunc(e):0;if(typeof t!="function"){this.size=i,this.tree=new Map,this.deltas=new Map,this.valueFn=void 0,this.baseValue=t,this.total=this.baseValue*this.size;return}let a=0,l;if(i>0){const u=s?.sampleRange??{from:0,to:Math.min(Et-1,i-1)};let d=Math.max(0,Math.trunc(u.from)),x=Math.min(Math.trunc(u.to),i-1);if(d>x&&(d=0,x=Math.min(Et-1,i-1)),i>Et)a=ot._sampleBaseValueStrided(t,i,Et),s?.materialize&&(l={from:d,values:ot._collectValidatedValues(t,d,x)});else{const I=ot._collectValidatedValues(t,d,x);a=ot._modeOrMedian([...I]),s?.materialize&&(l={from:d,values:I})}}if(this.size=i,this.tree=new Map,this.deltas=new Map,this.total=void 0,this.valueFn=t,this.baseValue=a,l)for(let u=0;u<l.values.length;u++){const d=l.from+u;if(d>=this.size)break;const x=l.values[u]-this.baseValue;x!==0&&(this.deltas.set(d,x),this._updateTree(d,x))}this.total=this.getTotal()}setValueFn(e,t){if(t?.reset){this.reset(this.size,e);return}typeof e=="function"?this.valueFn=e:(this.valueFn=void 0,this.baseValue=e,this.total=this._computeTreeTotal())}static _collectValidatedValues(e,t,s){const i=[];for(let a=t;a<=s;a++)i.push(_t(e(a),a));return i}static _modeOrMedian(e){if(e.length===0)return 0;e.sort((l,u)=>l-u);const t=Math.floor(e.length/2);let s;e.length%2===0?s=Math.floor((e[t-1]+e[t])/2):s=e[t];const i=new Map;let a=0;for(const l of e){const u=(i.get(l)??0)+1;i.set(l,u),u>a&&(a=u)}if(a>e.length*.2){const l=[];for(const[d,x]of i.entries())x===a&&l.push(d);const u=l.reduce((d,x)=>d+x,0);s=Math.floor(u/l.length)}return s}static _sampleBaseValueStrided(e,t,s){if(t<=0)return 0;let i=Math.max(1,Math.ceil(t/s));i%2===0&&(i+=1);const a=[];for(let l=0;l<t&&a.length<s;l+=i)a.push(_t(e(l),l));return ot._modeOrMedian(a)}update(e,t){return this.updates([{index:e,value:t}])}updates(e){const t=this._buildDeltaUpdates(e);return t.length>0?this.updateDeltas(t):this.total}updateDelta(e,t){return this.updateDeltas([{index:e,change:t}])}updateDeltas(e){const t=new Map;for(const{index:s,change:i}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(i))throw new Error(`Change must be a finite number: ${i}`);const l=(t.get(s)??this.deltas.get(s)??0)+i;if(l+this.baseValue<-1e-9)throw new Error(`Change would make the value at index ${s} negative: ${l+this.baseValue}`);t.set(s,l)}for(const{index:s,change:i}of e){const l=(this.deltas.get(s)??0)+i;l===0?this.deltas.delete(s):this.deltas.set(s,l),this._updateTree(s,i)}return this.total}_updateTree(e,t){if(t===0)return;let s=e+1;for(;s<=this.size;){this.tree.set(s,(this.tree.get(s)??0)+t);const i=It(s);if(i===0)break;s+=i}this.total!==void 0&&(this.total+=t)}_buildDeltaUpdates(e){const t=[],s=new Map;for(const{index:i,value:a}of e){if(i<0||i>=this.size)throw new Error(`Index ${i} out of bounds`);if(!Number.isInteger(i))throw new Error(`Index must be an integer: ${i}`);if(!Number.isFinite(a))throw new Error(`Value must be a finite number: ${a}`);if(a<0)throw new Error("Value cannot be negative.");const l=s.has(i)?s.get(i)??0:this.deltas.get(i)??0,u=l+this.baseValue,d=a-u;d!==0&&t.push({index:i,change:d}),s.set(i,l+d)}return t}_computeTreeTotal(){if(this.size<=0)return 0;let e=0,t=this.size;for(;t>0;){e+=this.tree.get(t)??0;const s=It(t);if(s===0)break;t-=s}return e+this.baseValue*this.size}_materialize(e,t=!0){if(this.valueFn){const s=this.deltas.get(e)??0,a=_t(this.valueFn(e),e)-this.baseValue;if(a!==s&&(a===0?this.deltas.delete(e):this.deltas.set(e,a),t)){const l=a-s;this._updateTree(e,l)}}}_materializeRanges(e,t,s=!1){if(!(e?.materialize&&this.valueFn))return;const i=e.ranges;if(i&&i.length>0){for(const u of i){const d=Math.max(0,Math.trunc(u.from)),x=Math.min(Math.trunc(u.to),this.size-1);for(let I=d;I<=x;I++)this._materialize(I)}if(t===void 0)return;if(s){this._materialize(t);return}const a=i[0].from,l=i[i.length-1].to;t>=a&&t<=l&&this._materialize(t);return}t!==void 0&&this._materialize(t)}_findIndex(e,t={},s){if(this.size>=1073741824)return this._findIndexLarge(e,t,s);if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const i=t.materializeOption?.materialize===!0;let a;for(;;){if(a=this._descend(e,s),a<0||a>=this.size)return{index:-1,total:this.total??this.getTotal(),cumulative:void 0,currentValue:void 0,safeIndex:void 0};if(!i)break;const u=this.deltas.get(a)??0;if(this._materialize(a),(this.deltas.get(a)??0)===u)break}const l=this.prefixSum(a);return{index:a,total:this.total??l.total,cumulative:l.cumulative,currentValue:l.currentValue,safeIndex:l.safeIndex}}_descend(e,t){let s=0,i=0,a=1;for(;a<<1<=this.size;)a<<=1;for(;a>0;a>>=1){const l=s+a;if(l<=this.size){const d=(this.tree.get(l)??0)+this.baseValue*a;(t?i+d<e:i+d<=e)&&(s=l,i+=d)}}return t?s:s-1}_findIndexLarge(e,t,s){if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};const i=xr(this.size);if(i===0n)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const a=t.materializeOption?.materialize===!0;for(;;){let l=0n,u=i-1n,d,x,I=this.total;for(;l<=u;){const h=l+u>>1n,N=Number(h),F=this.prefixSum(N);if(I=F.total,s?F.cumulative>=e:F.cumulative<=e)if(d=h,x=F,s){if(h===0n)break;u=h-1n}else l=h+1n;else if(s)l=h+1n;else{if(h===0n)break;u=h-1n}}const M=x,E=d!==void 0?Number(d):-1;if(a&&E>=0){const h=this.deltas.get(E)??0;if(this._materialize(E),(this.deltas.get(E)??0)!==h)continue}return{index:E,total:I,cumulative:M?.cumulative,currentValue:M?.currentValue,safeIndex:M?.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 s=J(Math.trunc(e),0,this.size-1),i=t?.materializeOption;this._materializeRanges(i,s,!0);let a=0,l=s+1;for(;l>0;){const d=this.tree.get(l)??0;a+=d;const x=It(l);if(x===0)break;l-=x}const u=i?.materialize?this.get(s):(this.deltas.get(s)||0)+this.baseValue;return{cumulative:a+this.baseValue*(s+1),total:this.total,currentValue:u,safeIndex:s}}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 s=t?.materializeOption;return this._materializeRanges(s,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 s=this.prefixSum(this.getSize()-1);s.cumulative!==s.total&&w.error("Inconsistent Fenwick Tree state")}return this.total}rebuildTree(e){if(e?.materialize&&this.valueFn){const s=this.valueFn;this.reset(this.size,i=>s(i),{materialize:!0});return}const t=new Map;for(const[s,i]of this.deltas.entries()){if(i===0)continue;let a=s+1;for(;a<=this.size;){t.set(a,(t.get(a)??0)+i);const l=It(a);if(l===0)break;a+=l}}this.tree=t,this.total=this._computeTreeTotal()}calculateAccumulatedError(){if(this.total===void 0)return 0;let e=this.baseValue*this.size;for(const[t,s]of this.deltas)t<this.size&&(e+=s);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)),s=this.size;if(t===s)return;if(t>s)if(s===0&&this.deltas.size>0){for(const a of this.deltas.keys())a>=t&&this.deltas.delete(a);this.size=t,this.rebuildTree()}else this._growSize(s,t);else{if(t>0)for(const a of this.deltas.keys())a>=t&&this.deltas.delete(a);this.size=t,this.rebuildTree()}const i=this.prefixSum(this.getSize()-1);i.cumulative!==i.total&&w.error("Inconsistent Fenwick Tree state")}static _minCoveredLowBound(e,t){let s=1;for(;;){const i=s*2;if(Math.floor(t/i)*i<=e)break;s=i}return s*Math.floor(e/s)}_propagateDeltaToGrownNodes(e,t,s,i){let a=e+1;for(;a<=s;){const l=It(a);if(l===0)break;a+=l}for(;a<=i;){this.tree.set(a,(this.tree.get(a)??0)+t);const l=It(a);if(l===0)break;a+=l}}_growSize(e,t){if(this.size=t,this.deltas.size>0){const s=ot._minCoveredLowBound(e,t);if(e-s<this.deltas.size)for(let a=s;a<e;a++){const l=this.deltas.get(a);l===void 0||l===0||this._propagateDeltaToGrownNodes(a,l,e,t)}else for(const[a,l]of this.deltas.entries())l===0||a<s||this._propagateDeltaToGrownNodes(a,l,e,t)}this.total=this._computeTreeTotal()}getSize(){return this.size}get base(){return this.baseValue}findIndexAtOrAfter(e,t){return this._findIndex(e,t??{},!0)}findIndexAtOrBefore(e,t){return this._findIndex(e,t??{},!1)}}const Ir=(n,e)=>{const t=n?.sampleRange,s=e?.sampleRange;return t===s?!1:t&&s?t.from!==s.from||t.to!==s.to:!0},Jt=(n,e,t)=>{const s=Number.isFinite(n)&&n>0?Math.trunc(n):0,i=r.useRef(null),a=r.useRef({size:s,valueOrFn:e,options:t});i.current===null&&(i.current=new ot(s,e,t));const l=i.current,u=a.current,d=u.size!==s,x=u.valueOrFn!==e,I=Ir(u.options,t),M=u.size===0&&s>0&&(!i.current||i.current.base===0);if(x||I){const E=t?.resetOnValueFnChange??!0;I||x&&E||M?(t?.debug&&w.debug("[useFenwickMapTree] reset",{valueOrFnChanged:x,optionsChanged:I}),l.reset(s,e,t)):(d&&(t?.debug&&w.debug("[useFenwickMapTree] resize (with valueFn change)",{from:u.size,to:s}),l.changeSize(s)),t?.debug&&w.debug("[useFenwickMapTree] setValueFn (no reset)",{valueOrFnChanged:x}),l.setValueFn(e,{reset:!1})),a.current={size:s,valueOrFn:e,options:t}}else d&&(t?.debug&&w.debug("[useFenwickMapTree] resize",{from:u.size,to:s}),M?l.reset(s,e,t):l.changeSize(s),a.current={size:s,valueOrFn:e,options:t});return l};class Tr{key;value;prev=null;next=null;constructor(e,t){this.key=e,this.value=t}}class Ot{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 Qt(n){const e=r.useRef(new Map),t=r.useRef(new Ot),s=Math.floor(n),i=r.useRef(s);r.useEffect(()=>{if(i.current=s,Number.isNaN(s)||s<0){w.warn(`useLruCache: invalid capacity ${n}; the cache will not store any entries.`),e.current.clear(),t.current=new Ot;return}if(Number.isFinite(s))for(;e.current.size>s;){const I=t.current.removeHead();if(I)e.current.delete(I.key);else break}},[n,s]);const a=r.useCallback(I=>{const M=e.current.get(I);if(M)return t.current.moveToTail(M),M.value},[]),l=r.useCallback((I,M)=>{const E=i.current;if(Number.isNaN(E)||E<=0)return;let h=e.current.get(I);if(h)h.value=M,t.current.moveToTail(h);else{if(e.current.size>=E){const N=t.current.removeHead();N&&e.current.delete(N.key)}h=new Tr(I,M),e.current.set(I,h),t.current.addToTail(h)}},[]),u=r.useCallback(I=>e.current.has(I),[]),d=r.useCallback(I=>{const M=e.current.get(I);M&&(t.current.remove(M),e.current.delete(I))},[]),x=r.useCallback(()=>{e.current.clear(),t.current=new Ot},[]);return r.useMemo(()=>({get:a,set:l,has:u,remove:d,clear:x}),[a,l,u,d,x])}const Mr=1e4,Sr=()=>{const{get:n,set:e,has:t,clear:s}=Qt(Mr);return r.useMemo(()=>({get:n,set:e,has:t,clear:s}),[n,e,t,s])},Ie=(n,e)=>e<=0?0:J(n,0,e-1),Xt=n=>({top:Math.max(0,n?.top??0),bottom:Math.max(0,n?.bottom??0)}),Je=(n,e)=>n<=e?0:n-e,ht=(n,e)=>n<=0?0:n+e,Nt=1e3,jt=2e3,Rr=1048576,Rt=n=>{if(!Number.isFinite(n))return 0n;const e=Math.trunc(n);return e<=0?0n:BigInt(e)},vr=(n,e,t,s,i,a,l,u)=>{const d=Rt(s);if(d===0n)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const x=V=>V<0n?0n:V>=d?d-1n:V,I={materializeOption:{materialize:!1}},{index:M,cumulative:E}=a.findIndexAtOrAfter(n,I);let h;M===-1?h=d-1n:(E===n?h=Rt(M+1):h=Rt(M),h>=d&&(h=d-1n)),n<=0&&(h=0n),u&&n>=l&&(h=d-1n);const N=V=>{const L=Number(V);if(!Number.isSafeInteger(L))return null;const{cumulative:S}=a.prefixSum(L,{materializeOption:{materialize:!1}});if(!Number.isFinite(S))return null;const{index:j}=a.findIndexAtOrAfter(S+.5,{materializeOption:{materialize:!1}});if(j===-1)return null;const G=Rt(j);return G>V?G:null},F=V=>{let L=0,S=V,j=V,G=0n,P=0;for(;S<d&&L<e;){const ae=Number(S),K=i(ae);if(L+=K,j=S,S+=1n,G+=1n,!Number.isFinite(K)||K<0)break;if(K===0){if(P+=1,P>Nt){const T=N(j);if(T!==null&&T>S)S=T,P=0;else if(T!==null&&T===S&&i(Number(S))>0)P=0;else break}}else P=0}return G===0n&&(j=V),{height:L,end:j}};let{height:U,end:ie}=F(h);if(U<e&&h>0n){let V=h,L=U,S=0;for(;V>0n&&L<e;){V-=1n;const G=Number(V),P=i(G);if(L+=P,!Number.isFinite(P)||P<0)break;if(P===0){if(S+=1,S>Nt){const ae=Number(V);if(!Number.isSafeInteger(ae))break;const{cumulative:K}=a.prefixSum(ae,{materializeOption:{materialize:!1}});if(!Number.isFinite(K))break;const{index:T}=a.findIndexAtOrAfter(K-.5,{materializeOption:{materialize:!1}}),B=T===-1?-1n:Rt(T);if(B>=0n&&B<V)V=B+1n,S=0;else if(B===V&&V>=1n&&i(Number(V-1n))>0)S=0;else break}}else S=0}h=x(V);const j=F(h);U=j.height,ie=j.end}const Q=x(h),ee=x(ie),ge=x(Q-BigInt(Math.max(0,t))),ve=x(ee+BigInt(Math.max(0,t)));return{renderingStartIndex:Ie(Number(ge),s),renderingEndIndex:Ie(Number(ve),s),visibleStartIndex:Ie(Number(Q),s),visibleEndIndex:Ie(Number(ee),s)}},Pr=(n,e,t,s,i,a,l)=>{if(s===0)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const u=Number.isFinite(l),d=u?Math.min(Math.max(0,n),l):Math.max(0,n);if(s>=Number.MAX_SAFE_INTEGER)return vr(d,e,t,s,i,a,l,u);const{index:x,cumulative:I,currentValue:M}=a.findIndexAtOrAfter(d,{materializeOption:{materialize:!1}}),E=x===-1?e<=0||(I??0)<d+(M??0)?s-1:0:x;let h=Ie(E,s),N=0;if(x!==-1&&I===d)h=Ie(x+1,s),N=0;else if(h===x&&I!==void 0&&M!==void 0)N=I-M-d;else{const{cumulative:V,currentValue:L}=a.prefixSum(h,{materializeOption:{materialize:!1}});N=(V??0)-(L??0)-d}const F=N,U=(V,L)=>{let S=V,j=L,G=0;for(;S<s&&j<e;){const P=i(S);if(j+=P,S++,!Number.isFinite(P)||P<0)break;if(P===0){if(G++,G>Nt){const{cumulative:ae}=a.prefixSum(S-1,{materializeOption:{materialize:!1}}),{index:K}=Number.isFinite(ae)?a.findIndexAtOrAfter(ae+.5,{materializeOption:{materialize:!1}}):{index:-1};if(K>S)S=K,G=0;else if(K===S&&i(S)>0)G=0;else break}}else G=0}return{cursor:S,height:j}},ie=U(h,N);let Q=ie.cursor;if(N=ie.height,N<e&&h>0){let V=N+Math.abs(Math.min(0,F)),L=h-1,S=0;for(;L>=0&&V<e;){const G=i(L);if(V+=G,!Number.isFinite(G)||G<0){L--;break}if(G===0){if(S++,S>Nt){const{cumulative:P}=a.prefixSum(L,{materializeOption:{materialize:!1}}),{index:ae}=Number.isFinite(P)?a.findIndexAtOrAfter(P-.5,{materializeOption:{materialize:!1}}):{index:-1};if(ae!==-1&&ae<L){L=ae,S=0;continue}if(ae===L&&L>=1&&i(L-1)>0)S=0;else{L--;break}}}else S=0;L--}h=Ie(L+1,s);const j=U(h,0);Q=j.cursor,N=j.height}const ee=Ie(h-t,s),ge=Ie(Math.max(Q-1,h),s),ve=Ie(ge+t,s);return{renderingStartIndex:ee,renderingEndIndex:ve,visibleStartIndex:h,visibleEndIndex:ge}},$t=(n,e,t)=>{const s=Math.max(0,e??0),i=r.useRef({last:0,id:null,arg:null}).current;return r.useEffect(()=>()=>{if(i.id!==null&&(cancelAnimationFrame(i.id),i.id=null),i.arg!==null&&n.current){try{t(n.current,i.arg)}catch(a){console.error("[useThrottledInvoker] Error flushing pending callback on unmount",a)}i.arg=null}},[i,n,t]),r.useCallback(a=>{if(i.arg=a,i.id!==null)return;const l=u=>{if(i.id=null,i.arg===null)return;const d=u-i.last;if(s===0||i.last===0||d>=s){if(n.current)try{t(n.current,i.arg)}catch(x){console.error("[useThrottledInvoker] Error invoking callback",x)}i.arg=null,i.last=u}i.arg!==null&&(i.id=requestAnimationFrame(l))};i.id=requestAnimationFrame(l)},[s,t,n,i])},yr=r.memo(({index:n,top:e,height:t,item:s,children:i,clipItemHeight:a,enableKeyboardNavigation:l,onKeyDown:u,onFocus:d,registerItemRef:x})=>{const I=r.useCallback(N=>x(n,N),[n,x]),M=r.useCallback(N=>u(N,n),[n,u]),E=r.useCallback(()=>d(n),[n,d]),h=r.useCallback(N=>{N.currentTarget.focus({preventScroll:!0})},[]);return Y.jsx("div",{ref:I,"data-index":n,"data-virtualscroll-item":"true",className:"aqvs-item-container",style:{top:e,height:t,overflow:a?"hidden":void 0},tabIndex:l?-1:void 0,onPointerDown:l?h:void 0,onKeyDownCapture:l?M:void 0,onFocusCapture:l?E:void 0,children:i(s,n)})}),Cr=({itemCount:n,getItem:e,getItemKey:t,getItemHeight:s,viewportSize:i,overscanCount:a=15,className:l,testId:u,onScroll:d,onRangeChange:x,children:I,background:M,initialScrollIndex:E,initialScrollOffset:h,initialScrollAnchor:N,callbackThrottleMs:F=5,contentInsets:U,onItemFocus:ie,scrollBarOptions:Q,behaviorOptions:ee,onWheelHorizontal:ge,contentProps:ve},V)=>{const{width:L,enableThumbDrag:S,enableTrackClick:j,enableArrowButtons:G,enableScrollToTopBottomButtons:P,renderThumbOverlay:ae,tapScrollCircleOptions:K}=Q??{},{enablePointerDrag:T,pointerDragInputs:B,enableKeyboardNavigation:q=!0,wheelSpeedMultiplier:Ye,inertiaOptions:Ne,clipItemHeight:te=!1,resetOnGetItemHeightChange:re=!1}=ee??{},W=r.useRef(null),Z=r.useRef({renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0,scrollPosition:0,totalHeight:0}),Pe=r.useRef(N&&n>0?{index:J(Math.trunc(N.index),0,n-1),align:"top",offset:-Math.max(0,N.offsetPx??0)}:null),Ve=r.useRef(!1),je=r.useRef(!0);r.useEffect(()=>{if(je.current){je.current=!1;return}re&&(Pe.current=null)},[re,s]);const y=r.useMemo(()=>Xt(U),[U]),[lt]=r.useState(()=>{const f=N?.index??E,p=typeof f=="number"&&Number.isFinite(f)?Math.max(0,Math.trunc(f)):0;return{from:Math.max(0,p-50),to:p+50}}),ne=r.useMemo(()=>({sampleRange:lt,resetOnValueFnChange:re,materialize:!0}),[re,lt]),C=Jt(n,s,ne),[we]=r.useState(()=>{let c=0,f=0;if(N&&n>0){const p=J(Math.trunc(N.index),0,n-1),k=Math.max(0,N.offsetPx??0),A=J(p-a*2,0,n-1),O=J(p+a*2,0,n-1),X=p>0||k>0?{materializeOption:{materialize:!0,ranges:[{from:A,to:O}]}}:void 0,{cumulative:$,total:Re,currentValue:de}=C.prefixSum(p,X),me=Math.max($-de+k,0);c=ht(me,y.top),f=Re??C.getTotal()}else if(typeof E=="number"){const p=J(E,0,n-1),k=J(p-a*2,0,n-1),A=J(p+a*2,0,n-1),O=E>0?{materializeOption:{materialize:!0,ranges:[{from:k,to:A}]}}:void 0,{cumulative:X,total:$,currentValue:Re}=C.prefixSum(E,O),de=Math.max(X-Re,0);c=ht(de,y.top),f=$??C.getTotal()}else typeof h=="number"&&(c=ht(Math.max(h,0),y.top)),f=C.getTotal();return{position:c,total:f}}),[_e,Ke]=r.useState(we.position),[qe,g]=r.useState(we.total),_=r.useRef(we.position),pe=r.useRef(y.top),H=r.useRef(d??void 0),Te=r.useRef(x??void 0),oe=r.useRef(new Map),be=r.useRef(null),Me=r.useRef(null),[Se,le]=r.useState(null),[ke,ce]=r.useState(!1),se=r.useRef(null),De=r.useRef(!1),Be=r.useRef(0),ye=r.useRef(!1),Qe=r.useRef(!1),$e=r.useRef(n);$e.current!==n&&($e.current=n,Qe.current=!0),r.useEffect(()=>{H.current=d??void 0,Te.current=x??void 0},[x,d]);const Ce=r.useCallback(c=>{if(q&&c&&typeof c.focus=="function")try{c.focus({preventScroll:!0})}catch{c.focus()}},[q]),m=r.useCallback((c,{position:f,totalHeight:p})=>{c(f,p)},[]),R=$t(H,F,m),ue=r.useCallback((c,f)=>{c(f)},[]),xe=$t(Te,F,ue),Ee=r.useRef(y.top);Ee.current=y.top;const et=r.useRef(R);et.current=R,r.useEffect(()=>(Ve.current=!1,()=>{Ve.current=!0,se.current&&(clearTimeout(se.current),se.current=null)}),[]),r.useEffect(()=>{q||(oe.current.clear(),be.current=null,Me.current=null)},[q]);const We=r.useCallback((c,f)=>{if(!f){oe.current.delete(c);return}q&&(oe.current.set(c,f),be.current===c&&(be.current=null,Me.current=c,Ce(f)))},[q,Ce]),Ge=.01,Xe=r.useRef({rafId:null,loopActive:!1,idleFrames:0,lastRenderedPosition:we.position}),tt=r.useCallback(()=>{const c=Xe.current;c.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(c.rafId),c.rafId=null,c.loopActive=!1,c.idleFrames=0},[]);r.useEffect(()=>()=>{tt()},[tt]);const ct=r.useRef(()=>{}),Ue=r.useCallback(()=>{const c=Xe.current;c.rafId=null;const f=_.current,p=Je(f,Ee.current),k=C.getTotal();if(Ke(O=>Math.abs(O-f)<Ge?O:f),Math.abs(c.lastRenderedPosition-f)>=Ge?(et.current({position:p,totalHeight:k}),c.lastRenderedPosition=f,c.idleFrames=0):c.idleFrames+=1,c.idleFrames>=2){tt();return}if(typeof requestAnimationFrame=="function"){c.rafId=requestAnimationFrame(O=>ct.current(O));return}c.loopActive=!1},[C,tt]);ct.current=Ue;const Tt=r.useCallback(()=>{const c=Xe.current;if(c.idleFrames=0,!c.loopActive){if(c.loopActive=!0,typeof requestAnimationFrame=="function"){c.rafId=requestAnimationFrame(Ue);return}c.loopActive=!1}},[Ue]),fe=r.useCallback((c,f)=>{const p=f?.immediate??!1,k=Je(c,y.top);if(_.current=c,p){Xe.current.lastRenderedPosition=c,Xe.current.idleFrames=0,Ke(c),R({position:k,totalHeight:C.getTotal()});return}Tt()},[Tt,C,y.top,R]),ut=r.useCallback(c=>{const f=W.current;if(!f)return c;const p=f.getScrollPosition();Be.current+=1;const k=f.scrollTo(c);return k===p&&(Be.current=Math.max(0,Be.current-1)),Math.abs(k-c)>.5&&(ye.current=!0),k},[]),vt=r.useRef(!1);r.useEffect(()=>{if(!vt.current)if(vt.current=!0,N==null&&typeof E!="number"&&typeof h=="number"){const c=ht(Math.max(h,0),y.top),f=Math.abs(c-_.current)>.5;fe(c,{immediate:!0}),f&&W.current?.scrollTo(c)}else fe(_.current,{immediate:!0})},[N,E,h,y.top,fe]),r.useEffect(()=>{const c=C.getTotal();if(qe!==c){g(c);return}if(ye.current){ye.current=!1;const f=W.current;if(f&&Math.abs(f.getScrollPosition()-_.current)>.5){const p=ut(_.current);ye.current=!1,fe(p,{immediate:!0})}}},[C,qe,n,ut,fe]),r.useEffect(()=>{if(Pe.current!==null){const{index:c,align:f,offset:p}=Pe.current,k=Ie(c,n),{cumulative:A,currentValue:O}=C.prefixSum(k,{materializeOption:{materialize:!1}});if(A!==void 0&&O!==void 0){const X=Math.max(A-O,0);let $=X;f==="bottom"?$=A-i:f==="center"&&($=X+O/2-i/2),p&&($-=p),$=Math.max(0,$);const Re=Math.max(0,qe+y.top+y.bottom-i),de=Math.min(ht($,y.top),Re);Math.abs(de-_.current)>1&&(w.debug("[VirtualScroll] Drift correction",{from:_.current,to:de,targetIndex:k}),Be.current===0&&(Be.current+=1),W.current?.scrollTo(de),fe(de,{immediate:!0}))}}Qe.current=!1},[qe,C,n,y.top,fe,i,y.bottom]),r.useEffect(()=>{const c=pe.current;if(c===y.top)return;const f=Je(_.current,c),p=ht(f,y.top);pe.current=y.top,_.current=p,W.current?.scrollTo(p),fe(p,{immediate:!0})},[y.top,fe]);const bt=r.useCallback((c,f)=>{if(n===0)return;const p=Ie(c,n),k=C.get(p),A=f-k,O=C.update(p,f);O!==void 0&&g(O),w.debug("[VirtualScroll] Updated item size manually",{index:p,size:f,total:O});let X=Pe.current?Pe.current.index:null;if(X===null){const $=_.current,Re=Xt(U).top,de=Je($,Re),{index:me,cumulative:Fe}=C.findIndexAtOrAfter(de,{materializeOption:{materialize:!1}});X=Fe!==void 0&&Fe===de?me+1:me}if(X!==-1&&p<X&&A!==0){const $=_.current,Re=$+A;ut(Re),fe(Re,{immediate:!0}),w.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)",{from:$,to:Re,causedByIndex:p,delta:A,activeVisibleStartIndex:X})}},[C,n,ut,fe,U]),He=r.useCallback((c,f)=>{if(!W.current||n===0)return;const p=Ie(c,n),k=Ie(p-a*2,n),A=Ie(p+a*2,n),{cumulative:O,total:X,currentValue:$}=C.prefixSum(p,{materializeOption:{materialize:!0,ranges:[{from:k,to:A}]}});if(w.debug("[VirtualScroll] Scrolling to index:",p,"ItemBottom:",O,"Total height:",X,"ItemHeight:",$,"safeIndexFrom:",k,"safeIndexTo:",A),!X)return;const Re=Math.max(O-$,0);let de=Re;f?.align==="bottom"?de=O-i:f?.align==="center"&&(de=Re+$/2-i/2),f?.offset&&(de-=f.offset),de=Math.max(0,de);const me=ht(de,y.top),Fe=W.current?.getContentSize()??X+y.top+y.bottom,Le=Math.max(0,Fe-i),ze=Math.min(me,Le);Pe.current={index:p,align:f?.align,offset:f?.offset};const Mt=W.current?.getScrollPosition()??-1,Vt=Math.abs(Mt-ze)>.5;De.current=!1,Be.current=0,Vt&&(De.current=!0,Be.current+=1,W.current?.scrollTo(ze)),g(X),fe(ze,{immediate:!0}),w.debug("[VirtualScroll] Setting scroll position to:",ze,{original:me,max:Le})},[C,a,n,y.top,y.bottom,i,fe]),Pt=r.useRef(N&&n===0?N:null);r.useEffect(()=>{const c=Pt.current;!c||n===0||(Pt.current=null,He(J(Math.trunc(c.index),0,n-1),{align:"top",offset:-Math.max(0,c.offsetPx??0)}))},[n,He]);const yt=r.useCallback(c=>{if(!W.current||n===0)return;const f=C.getTotal(),p=J(Math.floor(c),0,f),{index:k,cumulative:A,currentValue:O}=C.findIndexAtOrAfter(p,{materializeOption:{materialize:!1}}),$=(A??0)-(O??0)-p;He(k,{offset:$})},[C,n,He]),mt=r.useCallback(()=>{if(n===0)return null;const c=Je(_.current,y.top),{index:f,cumulative:p,currentValue:k}=C.findIndexAtOrAfter(c,{materializeOption:{materialize:!1}});if(f===-1)return{index:n-1,offsetPx:0};if(p===c)return{index:J(f+1,0,n-1),offsetPx:0};const A=(p??0)-(k??0);return{index:f,offsetPx:Math.max(0,c-A)}},[C,n,y.top]),Ct=r.useCallback(c=>{const f=Je(_.current,y.top),p=typeof c=="function"?c(f):c;yt(p);const k=W.current?.getScrollPosition(),A=typeof k=="number"?k:_.current;return fe(A),A},[y.top,yt,fe]),kt=r.useCallback((c,f)=>{w.debug("[VirtualScroll] Scroll position changed:",c);const p=De.current;p&&(De.current=!1);const k=Be.current>0;if(k&&(Be.current=0),p||k||Qe.current||(Pe.current=null),fe(c),P){if(p||k)return;const A=c-f;if(w.debug("[VirtualScroll] Scroll diff:",A,"New:",c,"Prev:",f),Math.abs(A)>1){const O=A>0?"down":"up";le(O),ce(!0),w.debug("[VirtualScroll] Showing scroll buttons. Direction:",O),se.current&&clearTimeout(se.current),se.current=setTimeout(()=>{ce(!1),w.debug("[VirtualScroll] Hiding scroll buttons")},2e3)}}},[fe,P]),rt=r.useMemo(()=>Je(_e,y.top),[y.top,_e]),ft=r.useMemo(()=>{const c=C.getTotal(),f=Pr(rt,i,a,n,s,C,c);return w.debug("[VirtualScroll] Calculated rendering range:",()=>({...f,scrollPosition:rt,renderingContentSize:c,overscanCount:a,viewportSize:i})),f},[rt,i,a,n,s,C]),{renderingStartIndex:nt,renderingEndIndex:st,visibleStartIndex:it,visibleEndIndex:pt}=ft,o=r.useCallback((c,f)=>{if(!q||n===0)return;const p=Ie(c,n);if(!(f?.ensureVisible??!0)){const Le=oe.current.get(p);Le&&(be.current=null,Me.current=p,Ce(Le));return}const A=C.prefixSum(p,{materializeOption:{materialize:!1}}),O=A.currentValue,X=Math.max(A.cumulative-O,0),$=X+O,Re=Je(_.current,y.top),de=Re+i;if(X<Re||$>de){He(p);const Le=oe.current.get(p);Le?(be.current=null,Me.current=p,Ce(Le)):be.current=p;return}const Fe=oe.current.get(p);if(Fe){be.current=null,Me.current=p,Ce(Fe);return}be.current=p},[q,n,C,y.top,He,Ce,i]),b=r.useCallback((c,f)=>{if(!q||c.defaultPrevented||c.altKey||c.metaKey||c.ctrlKey)return;const p=c.target;if(p){const k=p.tagName;if(k==="INPUT"||k==="TEXTAREA"||k==="SELECT"||p.isContentEditable)return}if(c.key==="ArrowDown"){f<n-1&&(c.preventDefault(),o(f+1));return}if(c.key==="ArrowUp"){f>0&&(c.preventDefault(),o(f-1));return}if(c.key==="PageDown"){if(f<n-1){c.preventDefault();const{visibleStartIndex:k,visibleEndIndex:A}=Z.current,O=Math.max(A-k+1,1),X=Math.max(O,1),$=Ie(Math.min(f+X,n-1),n);o($)}return}if(c.key==="PageUp"&&f>0){c.preventDefault();const{visibleStartIndex:k,visibleEndIndex:A}=Z.current,O=Math.max(A-k+1,1),X=Math.max(O,1),$=Ie(f-X,n);o($)}},[q,n,o]),v=r.useCallback(c=>{if(!q)return;const f=Ie(c,n);be.current=null,Me.current=f,ie?.(f)},[q,n,ie]);r.useEffect(()=>{const c=W.current?.getScrollPosition()??0,f=_.current,p=Je(f,y.top);w.debug("[VirtualScroll] Range change effect triggered",()=>({renderingStartIndex:nt,renderingEndIndex:st,visibleStartIndex:it,visibleEndIndex:pt,scrollPositionState:_e,paneScrollPosition:f,logicalScrollPosition:p,contentSize:qe,scrollPaneScrollPosition:c})),xe({renderingStartIndex:nt,renderingEndIndex:st,visibleStartIndex:it,visibleEndIndex:pt,scrollPosition:p,totalHeight:qe})},[qe,st,nt,y.top,xe,_e,pt,it]);const D=r.useCallback(()=>{if(!P)return null;const c=ke&&Se!==null,f=Se==="up";return Y.jsx("div",{className:"aqvs-scroll-to-edge-overlay","data-visible":c,children:f?Y.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top",children:Y.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:p=>{p.stopPropagation(),De.current=!0,He(0),ce(!1)},children:"Top"})}):Y.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom",children:Y.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:p=>{p.stopPropagation(),De.current=!0,He(n-1),ce(!1)},children:"Bottom"})})})},[P,ke,Se,He,n]),z=r.useRef(0),{visibleItems:he,renderAnchor:Ae}=r.useMemo(()=>{if(n===0)return{visibleItems:Y.jsx("div",{className:"aqvs-no-items-container",children:Y.jsx("div",{className:"aqvs-no-items-text",children:"No items"})}),renderAnchor:0};const c=Ie(nt,n),f=Ie(st,n),{cumulative:p,currentValue:k}=C.prefixSum(c,{materializeOption:{materialize:!1}}),A=p-k;Number.isFinite(A)&&Math.abs(A-z.current)>Rr&&(z.current=A);const O=z.current,X=[],$=[];let Re=0,de=A;for(let me=c;me<=f;me++){if($.length>=jt){w.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.",{cap:jt,safeRenderingStartIndex:c,safeRenderingEndIndex:f});break}const Fe=s(me),Le=C.get(me),ze=Fe-Le;ze!==0&&X.push({index:me,value:Fe});const Mt=de+Re,Vt=t?t(me):me;$.push(Y.jsx(yr,{index:me,top:Mt-O,height:Fe,item:e(me),clipItemHeight:te,enableKeyboardNavigation:q,onKeyDown:b,onFocus:v,registerItemRef:We,children:I},Vt)),Re+=ze,de+=Le}return X.length>0&&Promise.resolve().then(()=>{if(Ve.current)return;let me=0;for(const ze of X)if(ze.index<it){const Mt=C.get(ze.index);me+=ze.value-Mt}const Fe=C.updates(X);if(Ve.current||typeof Fe!="number")return;g(Fe),w.debug("[VirtualScroll] Updated heights for items",X,"New total height:",Fe);const Le=W.current?.getScrollPosition()??_.current;if(me!==0){const ze=Le+me;ut(ze),fe(ze,{immediate:!0}),w.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)",{from:Le,to:ze,shiftAmount:me})}else Le!==_.current&&fe(Le)}),{visibleItems:$,renderAnchor:O}},[I,te,qe,q,n,C,e,t,s,v,b,ut,We,st,nt,fe,it]),Oe=r.useCallback(c=>{const f=(F??0)>0,p=Math.abs(c-_e),k=f&&p>.5?_e:c,A=Je(k,y.top);if(w.debug("[VirtualScroll] Rendering visible items",()=>({currentScrollPosition:c,effectiveScrollPosition:A,renderingStartIndex:nt,renderingEndIndex:st,itemCount:n,viewportSize:i,callbackThrottleMs:F,diff:p,rawEffectiveScrollPosition:k})),n===0)return he;const O=y.top+Ae-k,X=y.bottom>0?Y.jsx("div",{className:"aqvs-bottom-inset",style:{top:C.getTotal()-Ae,height:y.bottom}},"virtualscroll-bottom-inset"):null;return w.debug("[VirtualScroll] Rendering items",()=>({containerTop:O,logicalScrollPosition:rt,resolvedInsets:y,effectiveScrollPosition:A})),Y.jsxs("div",{className:"aqvs-items-wrapper",style:{top:0,transform:`translateY(${O}px)`,willChange:"transform"},children:[he,X]})},[F,n,C,rt,Ae,st,nt,y,_e,i,he]),xt=r.useMemo(()=>({renderingStartIndex:ft.renderingStartIndex,renderingEndIndex:ft.renderingEndIndex,visibleStartIndex:ft.visibleStartIndex,visibleEndIndex:ft.visibleEndIndex,scrollPosition:rt,totalHeight:C.getTotal()}),[ft,rt,C,qe]);r.useEffect(()=>{Z.current=xt},[xt]),r.useImperativeHandle(V,()=>({getScrollPosition:()=>W.current?.getScrollPosition()??-1,getContentSize:()=>W.current?.getContentSize()??-1,getViewportSize:()=>W.current?.getViewportSize()??-1,scrollTo:Ct,scrollToIndex:He,getFenwickTreeTotalHeight:()=>C.getTotal(),getFenwickSize:()=>C.getSize(),focusItemAtIndex:o,getRange:()=>Z.current,getScrollAnchor:mt,updateItemSize:bt}),[Ct,He,C,o,mt,bt]);const at=C.getTotal()+y.top+y.bottom;return Y.jsx(Zt,{ref:W,contentSize:at,viewportSize:i,className:l,testId:u,onScroll:kt,background:M,tapScrollCircleOptions:K,inertiaOptions:Ne,itemCount:n,scrollBarWidth:L,enableThumbDrag:S,enableTrackClick:j,enableArrowButtons:G,enablePointerDrag:T,pointerDragInputs:B,renderThumbOverlay:ae,wheelSpeedMultiplier:Ye,onWheelHorizontal:ge,contentInsets:y,contentProps:ve,visibleStartIndex:it,visibleEndIndex:pt,renderOverlay:D,initialScrollPosition:we.position,children:Oe})},wr=r.forwardRef(Cr);exports.FenwickMapTree=ot;exports.ScrollBar=Gt;exports.ScrollPane=Zt;exports.TAP_SCROLL_SPEED_DEFAULTS=zt;exports.VirtualScroll=wr;exports.computeAutoTapScrollMaxSpeedMultiplier=Wt;exports.computeTapScrollSpeed=Kt;exports.minmax=J;exports.tapScrollCircleSampleVisual=br;exports.useFenwickMapTree=Jt;exports.useHeightCache=Sr;exports.useLruCache=Qt;