@aiquants/virtualscroll 2.7.0 → 3.0.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 +25 -0
- package/README.md +10 -10
- package/dist/VirtualScroll.d.cts +15 -9
- package/dist/VirtualScroll.d.ts +15 -9
- package/dist/VirtualScroll.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +333 -344
- package/package.json +1 -1
- package/src/VirtualScroll.tsx +21 -41
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@aiquants/virtualscroll` are documented here.
|
|
4
4
|
|
|
5
|
+
## 3.0.0 (2026-08-20)
|
|
6
|
+
|
|
7
|
+
**💥 BREAKING: `horizontalKeyInputs` から `"shift-arrow"` を撤去。** `Shift + ←/→` による横キーボード
|
|
8
|
+
スクロールは実装取りやめとなり、Shift 併用の矢印キーは**無条件で**ブラウザへ返ります (選択範囲の伸縮)。
|
|
9
|
+
型は `readonly ("arrow" | "shift-arrow")[]` → `readonly "arrow"[]` に狭まります。
|
|
10
|
+
|
|
11
|
+
**撤去の理由** — 2.x の「行内に選択があるときだけ譲る」検出 (`getSelection()` + 交差判定) には実測で
|
|
12
|
+
確認された構造的欠陥が残り、どの改良案も別の正しいユーザー意図を誤判定するため、機能ごと撤去しました:
|
|
13
|
+
|
|
14
|
+
- **Shadow DOM 内の選択が検出できない**: Chrome は `document.getSelection()` を retarget するため
|
|
15
|
+
保護が無言にすり抜け、選択中でも `Shift + →` が横スクロールへ奪われる (実測・chromium 148)。
|
|
16
|
+
可搬な代替 API が存在しない (`ShadowRoot.getSelection()` は非標準、`getComposedRanges()` は対応限定)。
|
|
17
|
+
- **`Ctrl+A` で全面ロックアウト**: ページ全体の選択は全行と交差するため、選択を解くまで一覧全体で
|
|
18
|
+
`Shift + ←/→` が死ぬ (実測・chromium 148)。
|
|
19
|
+
- **選択を畳むキーボード手段が無い**: 非編集領域の選択を Chrome は矢印キーで畳まないため、
|
|
20
|
+
一度ドラッグ選択すると `Shift + ←/→` がクリックまで復帰しない。
|
|
21
|
+
|
|
22
|
+
**移行**: `["shift-arrow"]` / `["arrow", "shift-arrow"]` を渡していた場合は `["arrow"]` へ変更して
|
|
23
|
+
ください。型を迂回して実行時に旧語彙の配列を渡しても**不活性** (何も消費しない) であり、旧挙動への
|
|
24
|
+
フォールバックはありません。Shift 系の横入力が必要な場合は `shift + ホイール` が引き続き使えます
|
|
25
|
+
(選択と衝突しません)。なお撤去は横矢印のみで、縦の `Shift + ↑/↓` によるフォーカス走査は従来どおりです
|
|
26
|
+
(ファイラ型のレンジ選択が消費側で成立するための意図的な非対称)。
|
|
27
|
+
素の `←/→` の挙動・`horizontalKeyStep`・発火条件 (行フォーカス前提、`preventDefault` のみで伝播は
|
|
28
|
+
止めない、等) はすべて従来どおりです。あわせて内部の選択検出 (`hasTextSelectionWithin`) を削除しました。
|
|
29
|
+
|
|
5
30
|
## 2.7.0 (2026-08-20)
|
|
6
31
|
|
|
7
32
|
**端でホイールがページへ連鎖する。** ネイティブのスクロール領域と同じく、その向きへ**もう動けない**
|
package/README.md
CHANGED
|
@@ -266,14 +266,15 @@ With `onWheelHorizontal` wired **and `behaviorOptions.enableKeyboardNavigation`
|
|
|
266
266
|
| Value | Keys | Use it when |
|
|
267
267
|
| --- | --- | --- |
|
|
268
268
|
| `[]` (default) | — | Never steal the row's own arrow handling |
|
|
269
|
-
| `["
|
|
270
|
-
| `["arrow"]` | `←/→` | Grids that bind `Shift + ←/→` to range selection |
|
|
271
|
-
| `["arrow", "shift-arrow"]` | both | Rows that use no arrow keys at all |
|
|
269
|
+
| `["arrow"]` | `←/→` | Lists that want keyboard access to the horizontal axis |
|
|
272
270
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
271
|
+
`Shift + ←/→` is **never** consumed (the `"shift-arrow"` input was removed in 3.0.0): in the browser it
|
|
272
|
+
extends the text selection, and the 2.x "yield only while a selection exists" detection had structural
|
|
273
|
+
defects — selections inside Shadow DOM are invisible to `document.getSelection()` (the guard silently
|
|
274
|
+
fails), and `Ctrl+A` makes every row intersect the selection, locking horizontal keys out until the
|
|
275
|
+
selection is cleared. Shift-flavored horizontal input remains available via `shift + wheel`, which does
|
|
276
|
+
not conflict with selection. The prop stays an array (one vocabulary entry today) to match
|
|
277
|
+
`behaviorOptions.pointerDragInputs` and to keep future additions non-breaking.
|
|
277
278
|
|
|
278
279
|
The default is empty on purpose: the package's row key handler runs in the **capture** phase, ahead of
|
|
279
280
|
your row's own handler. When it consumes a key it calls `preventDefault()` only and deliberately does
|
|
@@ -285,8 +286,7 @@ It also fires only when the row **itself** is the event target. Focus sitting on
|
|
|
285
286
|
row — a `role="slider"` cell, a link, a nested `overflow-x:auto` region — is never hijacked, so you do
|
|
286
287
|
not have to avoid `["arrow"]` just because your rows contain arrow-key widgets.
|
|
287
288
|
|
|
288
|
-
`
|
|
289
|
-
can still extend a selection. `horizontalKeyStep` (default 40) must be finite and positive; anything
|
|
289
|
+
`horizontalKeyStep` (default 40) must be finite and positive; anything
|
|
290
290
|
else logs a warning and leaves the key untouched rather than silently substituting the default.
|
|
291
291
|
|
|
292
292
|
⚠️ **This does nothing when `enableKeyboardNavigation` is `false`** — the row key handler is what reads
|
|
@@ -371,7 +371,7 @@ exists in the DOM.
|
|
|
371
371
|
| `onScroll` | `(position: number, totalHeight: number) => void` | ❌ | Scroll event handler |
|
|
372
372
|
| `onRangeChange` | `(range: VirtualScrollRange) => void` | ❌ | Range change handler |
|
|
373
373
|
| `onWheelHorizontal` | `(deltaX: number) => void` | ❌ | Opt-in horizontal delegation. Horizontal-dominant wheel / trackpad gestures (and shift+wheel) are delegated to this handler so the parent can implement horizontal scrolling. ⚠️ **Keyboard deltas arrive here too** when `horizontalKeyInputs` is set. When omitted, horizontal gestures bypass vertical scrolling so parent native scrolling works. See [Horizontal Scrolling](#horizontal-scrolling). |
|
|
374
|
-
| `horizontalKeyInputs` | `readonly
|
|
374
|
+
| `horizontalKeyInputs` | `readonly "arrow"[]` | ❌ | Keyboard gestures that emit a horizontal delta through `onWheelHorizontal` (default: `[]`, so row-level arrow handling is never stolen). `Shift + ←/→` is never consumed. Fires only when the row itself is the event target. ⚠️ Requires `behaviorOptions.enableKeyboardNavigation` (default `true`) — with it off the rows have no key handler at all and this prop does nothing (the package warns) |
|
|
375
375
|
| `horizontalKeyStep` | `number` | ❌ | Pixels per horizontal arrow press (default: 40). Must be finite and positive; anything else warns and leaves the key untouched |
|
|
376
376
|
| `background` | `ReactNode` | ❌ | Background element |
|
|
377
377
|
| `initialScrollIndex` | `number` | ❌ | Initial scroll index |
|
package/dist/VirtualScroll.d.cts
CHANGED
|
@@ -257,15 +257,21 @@ export type VirtualScrollProps<T> = {
|
|
|
257
257
|
* `onWheelHorizontal` へ横スクロール量を流すキーボード操作の種別 (既定: 無効)。
|
|
258
258
|
*
|
|
259
259
|
* - `[]` / 未指定 (既定): 横キーボードスクロールを行わない。
|
|
260
|
-
* - `["
|
|
261
|
-
* 衝突しないため、既存の行 UI を持つ消費側でも安全に有効化できる。
|
|
262
|
-
* - `["arrow"]`: 素の `←/→` のみ。`Shift + ←/→` を選択範囲の拡張に使うグリッド向け。
|
|
263
|
-
* - `["arrow", "shift-arrow"]`: 両方。
|
|
260
|
+
* - `["arrow"]`: 素の `←/→` のみ。
|
|
264
261
|
*
|
|
265
|
-
* ❗
|
|
266
|
-
*
|
|
267
|
-
*
|
|
268
|
-
*
|
|
262
|
+
* ❗ **`Shift + ←/→` は常に消費しない (3.0.0 で `"shift-arrow"` 入力を撤去)。** ブラウザ標準では
|
|
263
|
+
* Shift+矢印は選択範囲の伸縮であり、横取りすると行内テキストを選び直す手段がキーボードから消える。
|
|
264
|
+
* 2.x では「選択があるときだけ譲る」検出 (`getSelection` の交差判定) で共存させていたが、
|
|
265
|
+
* (a) Shadow DOM 内では選択が可搬に検出できない (Chromium の `window.getSelection()` は shadow root
|
|
266
|
+
* 内部を見せず、内部選択は非標準 API でしか取れない)、(b) `Ctrl+A` の全選択では全行が選択と交差して
|
|
267
|
+
* 横キーボードスクロールが選択解除まで全面ロックアウトする、という構造的欠陥が残った。検出の
|
|
268
|
+
* 精度を上げる案はどれも別の正しいユーザー意図を誤判定するため、機能ごと撤去して Shift 側を
|
|
269
|
+
* 無条件でブラウザへ返す。横スクロールの Shift 系入力が必要なら `shift+ホイール` が引き続き使える
|
|
270
|
+
* (`resolveWheelAxes` の軸規則。こちらは選択と衝突しない)。
|
|
271
|
+
*
|
|
272
|
+
* ❗ **語彙が 1 つでも配列なのは意図的である。** 種別配列は `pointerDragInputs` と同じ本パッケージの
|
|
273
|
+
* 作法であり、将来の入力種別追加が型の破壊なしにできる。boolean へ畳むと prop 名が変わり、横軸を
|
|
274
|
+
* `Omit<>` で封じているラッパー (例: `@aiquants/directory-tree`) の封印リストまで連鎖破壊する。
|
|
269
275
|
*
|
|
270
276
|
* ❗ **既定が無効なのは、行ハンドラを奪わないためである。** 本パッケージの行キーハンドラは
|
|
271
277
|
* capture フェーズに付くため、消費側の行 (bubble) より先に走る。既定で `←/→` を消費すると
|
|
@@ -298,7 +304,7 @@ export type VirtualScrollProps<T> = {
|
|
|
298
304
|
* `Omit<VirtualScrollProps, "onWheelHorizontal">` で横軸を封じている) が `behaviorOptions` を
|
|
299
305
|
* そのまま素通しするため、封じたはずのシームへ横から到達できてしまう。
|
|
300
306
|
*/
|
|
301
|
-
horizontalKeyInputs?: readonly
|
|
307
|
+
horizontalKeyInputs?: readonly "arrow"[];
|
|
302
308
|
/**
|
|
303
309
|
* Pixels emitted per horizontal arrow key press (default: 40, matching browser arrow scrolling).
|
|
304
310
|
* 横矢印キー 1 回あたりの移動量 (px。既定 40 = ブラウザの矢印スクロール相当)。
|
package/dist/VirtualScroll.d.ts
CHANGED
|
@@ -257,15 +257,21 @@ export type VirtualScrollProps<T> = {
|
|
|
257
257
|
* `onWheelHorizontal` へ横スクロール量を流すキーボード操作の種別 (既定: 無効)。
|
|
258
258
|
*
|
|
259
259
|
* - `[]` / 未指定 (既定): 横キーボードスクロールを行わない。
|
|
260
|
-
* - `["
|
|
261
|
-
* 衝突しないため、既存の行 UI を持つ消費側でも安全に有効化できる。
|
|
262
|
-
* - `["arrow"]`: 素の `←/→` のみ。`Shift + ←/→` を選択範囲の拡張に使うグリッド向け。
|
|
263
|
-
* - `["arrow", "shift-arrow"]`: 両方。
|
|
260
|
+
* - `["arrow"]`: 素の `←/→` のみ。
|
|
264
261
|
*
|
|
265
|
-
* ❗
|
|
266
|
-
*
|
|
267
|
-
*
|
|
268
|
-
*
|
|
262
|
+
* ❗ **`Shift + ←/→` は常に消費しない (3.0.0 で `"shift-arrow"` 入力を撤去)。** ブラウザ標準では
|
|
263
|
+
* Shift+矢印は選択範囲の伸縮であり、横取りすると行内テキストを選び直す手段がキーボードから消える。
|
|
264
|
+
* 2.x では「選択があるときだけ譲る」検出 (`getSelection` の交差判定) で共存させていたが、
|
|
265
|
+
* (a) Shadow DOM 内では選択が可搬に検出できない (Chromium の `window.getSelection()` は shadow root
|
|
266
|
+
* 内部を見せず、内部選択は非標準 API でしか取れない)、(b) `Ctrl+A` の全選択では全行が選択と交差して
|
|
267
|
+
* 横キーボードスクロールが選択解除まで全面ロックアウトする、という構造的欠陥が残った。検出の
|
|
268
|
+
* 精度を上げる案はどれも別の正しいユーザー意図を誤判定するため、機能ごと撤去して Shift 側を
|
|
269
|
+
* 無条件でブラウザへ返す。横スクロールの Shift 系入力が必要なら `shift+ホイール` が引き続き使える
|
|
270
|
+
* (`resolveWheelAxes` の軸規則。こちらは選択と衝突しない)。
|
|
271
|
+
*
|
|
272
|
+
* ❗ **語彙が 1 つでも配列なのは意図的である。** 種別配列は `pointerDragInputs` と同じ本パッケージの
|
|
273
|
+
* 作法であり、将来の入力種別追加が型の破壊なしにできる。boolean へ畳むと prop 名が変わり、横軸を
|
|
274
|
+
* `Omit<>` で封じているラッパー (例: `@aiquants/directory-tree`) の封印リストまで連鎖破壊する。
|
|
269
275
|
*
|
|
270
276
|
* ❗ **既定が無効なのは、行ハンドラを奪わないためである。** 本パッケージの行キーハンドラは
|
|
271
277
|
* capture フェーズに付くため、消費側の行 (bubble) より先に走る。既定で `←/→` を消費すると
|
|
@@ -298,7 +304,7 @@ export type VirtualScrollProps<T> = {
|
|
|
298
304
|
* `Omit<VirtualScrollProps, "onWheelHorizontal">` で横軸を封じている) が `behaviorOptions` を
|
|
299
305
|
* そのまま素通しするため、封じたはずのシームへ横から到達できてしまう。
|
|
300
306
|
*/
|
|
301
|
-
horizontalKeyInputs?: readonly
|
|
307
|
+
horizontalKeyInputs?: readonly "arrow"[];
|
|
302
308
|
/**
|
|
303
309
|
* Pixels emitted per horizontal arrow key press (default: 40, matching browser arrow scrolling).
|
|
304
310
|
* 横矢印キー 1 回あたりの移動量 (px。既定 40 = ブラウザの矢印スクロール相当)。
|
|
@@ -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 H=require("react/jsx-runtime"),r=require("react"),wt=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 Kt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Ft=6,hr=8,gr=({dragState:n,normalizedDistance:e})=>{const t=1+e*.18,s=.16+e*.24,i=.38+e*.28,o=n.active?"80ms ease-out":"220ms ease";return H.jsxs(H.Fragment,{children:[H.jsx("div",{className:"aqvs-tap-scroll-circle-visual-outer",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.62), rgba(72,72,72,0.48))",boxShadow:`0 0 0 1px rgba(255,255,255,0.28), 0 10px 22px rgba(0,0,0,${s})`,transform:`scale(${t})`,transition:`${o}, ${n.active?"80ms":"260ms"} box-shadow ease`}}),H.jsx("div",{className:"aqvs-tap-scroll-circle-inner",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.72), rgba(28,28,28,0.58))",boxShadow:"inset 0 4px 10px rgba(0,0,0,0.24), inset 0 0 2px rgba(255,255,255,0.55)",opacity:i,transition:n.active?"120ms opacity ease-out":"220ms opacity ease"}})]})},sr=r.memo(r.forwardRef(({onDragChange:n,className:e,maxVisualDistance:t=160,size:s=40,style:i,opacity:o=1,renderVisual:l},f)=>{const[m,b]=r.useState(Kt),S=r.useRef(null),v=r.useRef(null),E=r.useRef({x:0,y:0}),g=r.useRef(null),k=r.useRef(0),K=r.useCallback(I=>{b(I),n(I)},[n]),B=r.useCallback((I,$,pe=!1)=>{const{x:Ye,y:Q}=E.current,q=I-Ye,Be=$-Q,He=Math.abs(Be),Ee=He<Ft?0:Be<0?-1:1,ke=k.current;let $e=Ee;const We=Ft+hr;Ee===0?ke!==0&&He<We?$e=ke:($e=0,pe||(k.current=0)):Ee!==ke&&ke!==0&&He<We?$e=ke:k.current=Ee,K({active:pe||He>=Ft,offsetX:q,offsetY:Be,distance:He,direction:$e,pointerId:S.current})},[K]),fe=r.useCallback(I=>{if(I===null)return;const $=g.current;$?.hasPointerCapture(I)&&$.releasePointerCapture(I)},[]),de=r.useCallback((I=!1)=>{I&&fe(S.current),S.current=null,v.current=null,k.current=0,K(Kt)},[K,fe]),oe=r.useCallback(I=>{if(S.current!==null&&S.current!==I.pointerId){v.current={pointerId:I.pointerId,clientX:I.clientX,clientY:I.clientY},I.preventDefault(),I.stopPropagation();return}I.preventDefault(),I.stopPropagation();const $=g.current??I.currentTarget,{left:pe,top:Ye,width:Q,height:q}=$.getBoundingClientRect();E.current={x:pe+Q/2,y:Ye+q/2},S.current=I.pointerId;try{$.setPointerCapture(I.pointerId)}catch{}B(I.clientX,I.clientY,!0)},[B]),le=r.useCallback(I=>{if(S.current!==I.pointerId){v.current!==null&&v.current.pointerId===I.pointerId&&(v.current={pointerId:I.pointerId,clientX:I.clientX,clientY:I.clientY});return}I.preventDefault(),B(I.clientX,I.clientY)},[B]),me=r.useCallback(I=>{if(S.current!==I.pointerId){v.current!==null&&v.current.pointerId===I.pointerId&&(v.current=null);return}I.preventDefault(),I.stopPropagation();const $=v.current;if(v.current=null,$!==null){fe(I.pointerId);const pe=g.current;let Ye=!0;if(pe!==null&&typeof pe.setPointerCapture=="function")try{pe.setPointerCapture($.pointerId)}catch(Q){(typeof Q=="object"&&Q!==null&&"name"in Q?Q.name:void 0)==="NotFoundError"&&(Ye=!1)}if(Ye){S.current=$.pointerId,B($.clientX,$.clientY,!0);return}}de(!0)},[de,fe,B]),T=r.useCallback(I=>{I.target===I.currentTarget&&S.current===I.pointerId&&de(!1)},[de]);r.useImperativeHandle(f,()=>({reset:()=>{de(!0)},getElement:()=>g.current}),[de]);const L=Math.min(Math.max(o,0),1),M=s/64,G=Math.min(m.distance,t)/t,J=m.direction*G*10*M,j=l??gr,xe={dragState:m,normalizedDistance:G,sizeScale:M,size:s,opacity:L},N={...i,width:s,height:s,transform:`translateY(${J}px)`};return N.opacity=L,H.jsx("div",{ref:g,"data-testid":"virtual-scroll-tap-circle",className:wt.twMerge("aqvs-tap-scroll-circle",e),style:N,tabIndex:-1,onPointerDown:oe,onPointerMove:le,onPointerUp:me,onPointerCancel:me,onLostPointerCapture:T,role:"presentation",children:j(xe)})}));sr.displayName="TapScrollCircle";const ie=(n,e,t)=>Math.max(e,Math.min(t,n)),Xt="virtualscroll:tap-scroll-cancel",Gt=20,br=250,xr=60,Sr=20,Ir=20,jt={maxDistance:240,minSpeedMultiplier:.2},vr=jt.maxDistance,Zt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Yt=2.2,wr=8,Tr=120,Mr=1/10,ot={enabled:!0,size:40,offsetX:-80,offsetY:0,className:void 0,maxVisualDistance:vr,minSpeedMultiplier:jt.minSpeedMultiplier,opacity:.9,renderVisual:void 0,maxSpeedCurve:void 0},Rr=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"},Pr=(n,e)=>{const t=n?.maxSpeedMultiplier,s=typeof t=="number"?t:or(e);return{enabled:n?.enabled??ot.enabled,size:n?.size??ot.size,offsetX:n?.offsetX??ot.offsetX,offsetY:n?.offsetY??ot.offsetY,className:n?.className??ot.className,maxVisualDistance:n?.maxVisualDistance??ot.maxVisualDistance,maxSpeedMultiplier:s,minSpeedMultiplier:Math.max(n?.minSpeedMultiplier??ot.minSpeedMultiplier,0),opacity:ie(n?.opacity??ot.opacity,0,1),renderVisual:n?.renderVisual??ot.renderVisual,maxSpeedCurve:n?.maxSpeedCurve??ot.maxSpeedCurve}},yr=({isDragging:n,isThumbHovered:e,enableThumbDrag:t})=>r.useMemo(()=>t?n?"dragging":e?"hover":"idle":"disabled",[t,n,e]),Cr=({canUseArrowButtons:n,enableArrowButtons:e,resetTapScroll:t,scrollByStep:s})=>{const i=r.useRef(null),o=r.useRef(null),l=r.useRef(null),f=r.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null),o.current!==null&&(window.clearTimeout(o.current),o.current=null),l.current!==null&&(window.removeEventListener("pointerup",l.current),window.removeEventListener("pointercancel",l.current),window.removeEventListener("blur",l.current),l.current=null)},[]),m=r.useCallback(()=>{f()},[f]),b=r.useCallback(v=>E=>{if(!n)return;E.cancelable&&E.preventDefault(),E.stopPropagation(),t(),f(),s(v),o.current=window.setTimeout(()=>{i.current=window.setInterval(()=>{s(v)},xr)},br);const g=()=>f();l.current=g,window.addEventListener("pointerup",g),window.addEventListener("pointercancel",g),window.addEventListener("blur",g)},[n,f,t,s]),S=r.useCallback(v=>E=>{e&&(E.key==="Enter"||E.key===" "||E.key==="Spacebar")&&(E.preventDefault(),s(v))},[e,s]);return r.useEffect(()=>{n||f()},[n,f]),r.useEffect(()=>()=>{f()},[f]),{handleArrowPointerDown:b,handleArrowPointerUp:m,handleArrowKeyDown:S}},Er=700,ht=(n,e)=>typeof n=="number"&&Number.isFinite(n)?n:e,ir=({distance:n,maxDistance:e,viewportSize:t,minSpeedMultiplier:s,maxSpeedMultiplier:i,hasCustomMaxSpeedMultiplier:o,curve:l})=>{const f=Math.max(ht(n,0),0),m=ht(e,0),b=m>0?Math.min(f,m)/m:1,S=Math.max(ht(t,0),0),v=Math.max(ht(s,0),0),E=Math.max(ht(i,0),0),g=Math.max(S*v,40),k=o?g:1200,K=Math.max(S*E,k),B=l?Math.max(ht(l.exponentialScale,E),0):0,fe=l?Math.min(K,Math.max(S*B,g)):K,de=Math.max(fe,g);let oe=b**1.1;if(l){const me=Math.min(Math.max(ht(l.exponentialSteepness,0),0),Er);if(me===0)oe=b;else{const T=Math.expm1(me)||1;oe=Math.min(Math.max(Math.expm1(me*b)/T,0),1)}}const le=Math.min(Math.max(ht(l?.easedOffset,0),0),1);return g+(de-g)*(le+(1-le)*oe)},or=n=>{if(!n||n<=0)return Yt;const e=Math.max(1,n),t=Math.log10(e),s=Yt+t*wr;return ie(s,Yt,Tr)},ar=({contentSize:n,viewportSize:e,scrollPosition:t,onScroll:s,enableThumbDrag:i=!0,enableTrackClick:o=!0,enableArrowButtons:l=!0,horizontal:f=!1,scrollBarWidth:m=12,className:b,ariaControls:S,tapScrollCircleOptions:v,itemCount:E,renderThumbOverlay:g,visibleStartIndex:k,visibleEndIndex:K})=>{const[B,fe]=r.useState(!1),[de,oe]=r.useState(!1),[le,me]=r.useState(!1),T=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}),G=r.useRef(t),J=r.useRef(s),j=r.useRef(Zt),xe=r.useRef(null),N=r.useRef(null),I=r.useRef(null),$=r.useRef(0),pe=r.useRef(0),Ye=r.useMemo(()=>Pr(v,E),[E,v]),Q=r.useMemo(()=>Rr(f),[f]),{enabled:q,size:Be,offsetX:He,offsetY:Ee,className:ke,maxVisualDistance:$e,maxSpeedMultiplier:We,minSpeedMultiplier:W,opacity:Ve,renderVisual:ce,maxSpeedCurve:he}=Ye,ve=r.useRef({viewportSize:e,maxScrollPosition:Math.max(n-e,0),scrollBarVisible:n>e,effectiveTapMaxDistance:Math.max($e,1),tapCircleMaxSpeedMultiplier:We,tapCircleMinSpeedMultiplier:W,tapCircleMaxSpeedCurve:he,tapScrollCircleOptions:v,effectiveTrackLength:0,onScroll:s,scrollPosition:t}),{mainSizeKey:Ze,crossSizeKey:ut,positionKey:C,selectDelta:Qe,getPointerCoordinate:gt,arrowLabels:y,arrowIcons:Z,directionClass:Ue,orientation:ft}=Q,ze=Math.max($e,1),et=e/n,ne=Math.max(e-m*2,0),p=et*ne,_=Math.min(Math.max(Gt,p||0),ne||Gt),Y=n-e,F=Math.max(ne-_,0),ee=Y<=0||F<=0?0:ie(t/Y*F,0,F),Te=ee+_/2,U=n>e||B,te=U&&l;r.useLayoutEffect(()=>{ve.current={viewportSize:e,maxScrollPosition:Y,scrollBarVisible:U,effectiveTapMaxDistance:ze,tapCircleMaxSpeedMultiplier:We,tapCircleMinSpeedMultiplier:W,tapCircleMaxSpeedCurve:he,tapScrollCircleOptions:v,effectiveTrackLength:F,onScroll:s,scrollPosition:t}}),r.useLayoutEffect(()=>{G.current=t},[t]),r.useLayoutEffect(()=>{J.current=s},[s]),r.useEffect(()=>{i||oe(!1)},[i]);const Ne=yr({isDragging:B,isThumbHovered:de,enableThumbDrag:i}),re=r.useCallback((c,x)=>{const P=ve.current,V=x??G.current;if(J.current){const Pe=J.current(c,V);if(typeof Pe=="number"&&Number.isFinite(Pe))return G.current=Pe,Pe}const X=typeof c=="function"?c(V):c,Me=Math.max(P.maxScrollPosition,0),Re=P.scrollBarVisible?ie(X,0,Me):0;return G.current=Re,Re},[]),Ke=r.useCallback(c=>{const x=ve.current,P=G.current;if(!x.scrollBarVisible||x.maxScrollPosition<=0){const Oe=re(0,P),pt=Oe-P;return{nextPosition:Oe,actualDelta:pt,reachedBoundary:!0}}if(c===0)return{nextPosition:P,actualDelta:0,reachedBoundary:!1};const X=re(Oe=>ie(Oe+c,0,x.maxScrollPosition),P),Me=X-P,Re=c<0&&P+c<=0,Pe=c>0&&P+c>=x.maxScrollPosition,nt=c<0&&(X<=0||Re&&Me===0)||c>0&&(X>=x.maxScrollPosition||Pe&&Me===0);return{nextPosition:X,actualDelta:Me,reachedBoundary:nt}},[re]),De=r.useCallback((c,x)=>{c.current+=x;const P=Math.max(ve.current.maxScrollPosition,0);P>0&&(c.current=ie(c.current,-P,P));const V=Ke(c.current);return c.current-=V.actualDelta,V.reachedBoundary&&(c.current=0),V},[Ke]),ae=r.useCallback(()=>{N.current!==null&&(window.cancelAnimationFrame(N.current),N.current=null),I.current=null,$.current=0,pe.current=0},[]),Se=r.useCallback(()=>{j.current={...Zt},me(!1),xe.current?.reset(),ae()},[ae]),qe=r.useCallback(c=>{const x=j.current,P=ve.current;if(!x.active||x.direction===0){ae();return}if(!P.scrollBarVisible||P.maxScrollPosition<=0){ae();return}const V=I.current??c,X=Math.max((c-V)/1e3,0),Me=Math.min(X,Mr);if(I.current=c,Me<=0){N.current=window.requestAnimationFrame(qe);return}const Re=ir({distance:x.distance,maxDistance:P.effectiveTapMaxDistance,viewportSize:P.viewportSize,minSpeedMultiplier:P.tapCircleMinSpeedMultiplier,maxSpeedMultiplier:P.tapCircleMaxSpeedMultiplier,hasCustomMaxSpeedMultiplier:typeof P.tapScrollCircleOptions?.maxSpeedMultiplier=="number",curve:P.tapCircleMaxSpeedCurve});pe.current!==x.direction&&(pe.current=x.direction,$.current=0);const{reachedBoundary:Pe}=De($,x.direction*Re*Me);if(Pe){ae();return}N.current=window.requestAnimationFrame(qe)},[De,ae]),Ce=r.useCallback(()=>{N.current===null&&(I.current=null,$.current=0,N.current=window.requestAnimationFrame(qe))},[qe]);r.useEffect(()=>{const c=j.current;!c.active||c.direction===0||Ce()},[n,e,Ce]),r.useEffect(()=>()=>{ae()},[ae]);const at=r.useCallback(c=>{j.current=c,me(c.active),c.active&&c.direction!==0?Ce():ae()},[Ce,ae]);r.useEffect(()=>{q||Se()},[Se,q]),r.useEffect(()=>{const c=x=>{const V=x.detail?.paneId;V&&S&&V!==S||Se()};return window.addEventListener(Xt,c),()=>{window.removeEventListener(Xt,c)}},[S,Se]),r.useEffect(()=>{if(!q)return;const c=x=>{if(!j.current.active||j.current.pointerId===x.pointerId)return;const P=x.target;if(!(P instanceof Node)){Se();return}xe.current?.getElement()?.contains(P)||Se()};return document.addEventListener("pointerdown",c,!0),()=>{document.removeEventListener("pointerdown",c,!0)}},[Se,q]);const Ge=c=>{if(!U||F<=0||Y<=0)return 0;const x=ie(c,0,F);return ie(x/F*Y,0,Y)},tt=r.useCallback(c=>{const{scrollBarVisible:x,effectiveTrackLength:P,maxScrollPosition:V}=ve.current;if(w.debug("[ScrollBar] calculateScrollPositionFromThumb",()=>({thumbPos:c,trackLen:P,maxScroll:V})),P<=0||V<=0)return null;const X=ie(c,0,P);return ie(X/P*V,0,V)},[]),d=r.useCallback(c=>{const x=c.getBoundingClientRect(),P=f?x.width:x.height,V=nt=>{const Oe=Number.parseFloat(nt);return Number.isFinite(Oe)?Oe:0},X=window.getComputedStyle(c),Me=V(f?X.width:X.height),Re=Me>0?Me+V(f?X.paddingLeft:X.paddingTop)+V(f?X.paddingRight:X.paddingBottom)+V(f?X.borderLeftWidth:X.borderTopWidth)+V(f?X.borderRightWidth:X.borderBottomWidth):0,Pe=Re>0?Re:f?c.offsetWidth:c.offsetHeight;return Pe<=0||P<=0?1:P/Pe},[f]),R=r.useCallback(c=>{const x=L.current;if(x.pointerId!==c.pointerId)return;const P=c.clientX-x.startClientX,V=c.clientY-x.startClientY,X=Qe(P,V)/(x.scale||1);w.debug("[ScrollBar] handleThumbPointerMove",()=>({delta:X,startThumbPosition:x.startThumbPosition,clientY:c.clientY,startClientY:x.startClientY,metrics:ve.current}));const Me=tt(x.startThumbPosition+X);Me!==null&&re(Me),c.cancelable&&c.preventDefault()},[Qe,tt,re]),ge=r.useCallback(c=>{const x=L.current;if(x.pointerId!==c.pointerId)return;document.removeEventListener("pointermove",R),document.removeEventListener("pointerup",ge),document.removeEventListener("pointercancel",ge);const P=x.captureTarget;if(P?.hasPointerCapture?.(c.pointerId)&&P.releasePointerCapture(c.pointerId),L.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null},fe(!1),T.current){const V=T.current.getBoundingClientRect();c.clientX>=V.left&&c.clientX<=V.right&&c.clientY>=V.top&&c.clientY<=V.bottom||oe(!1)}else oe(!1)},[R]);r.useEffect(()=>()=>{document.removeEventListener("pointermove",R),document.removeEventListener("pointerup",ge),document.removeEventListener("pointercancel",ge)},[R,ge]);const Je=r.useRef(0),Ae=r.useRef(0),st=r.useCallback(c=>{const x=Math.max(Math.round(ve.current.viewportSize/Ir),Sr);Ae.current!==c&&(Ae.current=c,Je.current=0),De(Je,c*x)},[De]),{handleArrowPointerDown:it,handleArrowPointerUp:rt,handleArrowKeyDown:dt}=Cr({canUseArrowButtons:te,enableArrowButtons:l,resetTapScroll:Se,scrollByStep:st}),lt=c=>{if(!U)return;if(!i){c.preventDefault(),c.stopPropagation();return}if(c.pointerType==="mouse"&&c.button!==0||c.ctrlKey)return;Se();const x=c.currentTarget,P=d(x);let V=null;if(x.setPointerCapture)try{x.setPointerCapture(c.pointerId),V=x}catch{V=null}L.current={pointerId:c.pointerId,startThumbPosition:ee,startClientX:c.clientX,startClientY:c.clientY,scale:P,captureTarget:V},document.addEventListener("pointermove",R),document.addEventListener("pointerup",ge),document.addEventListener("pointercancel",ge),fe(!0),oe(!0),c.preventDefault(),c.stopPropagation()},It=c=>{if(!U)return;if(!o){c.preventDefault(),c.stopPropagation();return}if(c.pointerType==="mouse"&&c.button!==0||c.ctrlKey)return;const x=c.currentTarget,P=x.getBoundingClientRect(),V=gt(c),X=d(x),Me=(V-(f?P.left:P.top))/X;Se();const Re=Me-_/2,Pe=Ge(Re);if(re(Pe),x.setPointerCapture)try{x.setPointerCapture(c.pointerId)}catch{}M.current={pointerId:c.pointerId,startThumbPosition:Re,startClientX:c.clientX,startClientY:c.clientY,scale:X},c.preventDefault(),c.stopPropagation()},bt=()=>{M.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}},Tt=c=>{const x=M.current;if(x.pointerId!==c.pointerId)return;if(c.pointerType==="mouse"&&c.buttons===0){bt();return}const P=c.clientX-x.startClientX,V=c.clientY-x.startClientY,X=Qe(P,V)/(x.scale||1),Me=Ge(x.startThumbPosition+X);re(Me),c.cancelable&&c.preventDefault()},Ct=c=>{if(M.current.pointerId!==c.pointerId)return;const x=c.currentTarget;x.hasPointerCapture?.(c.pointerId)&&x.releasePointerCapture(c.pointerId),bt(),c.preventDefault(),c.stopPropagation()},Ie=c=>{if(M.current.pointerId!==c.pointerId)return;const x=c.currentTarget;x.hasPointerCapture?.(c.pointerId)&&x.releasePointerCapture(c.pointerId),bt()},mt=c=>{c.target===c.currentTarget&&M.current.pointerId===c.pointerId&&bt()},Et=r.useMemo(()=>ie((le?1:.8)*Ve,0,1),[le,Ve]),kt=r.useMemo(()=>{const x=`calc(50% - ${Be/2}px + ${Ee}px)`;return{left:He,top:x}},[He,Ee,Be]),Xe=(c,x,P,V)=>H.jsx("button",{type:"button",tabIndex:0,className:"aqvs-scrollbar-arrow-button",style:{[Ze]:m,[ut]:m},"aria-label":x,onPointerDown:it(c),onPointerUp:rt,onPointerLeave:rt,onPointerCancel:rt,onKeyDown:dt(c),"aria-disabled":!l,disabled:!te,children:H.jsx("span",{"aria-hidden":"true",children:P})},V),Mt=g&&U?{orientation:ft,scrollPosition:t,maxScrollPosition:Y,contentSize:n,viewportSize:e,thumbSize:_,thumbPosition:ee,thumbCenter:Te,trackSize:ne,isDragging:B,isTapScrollActive:le,visibleStartIndex:k,visibleEndIndex:K}:null;return H.jsxs("div",{className:wt.twMerge("aqvs-scrollbar",Ue,b),style:{[Ze]:e,[ut]:m},"data-visible":U?"true":"false",role:"scrollbar",tabIndex:-1,"aria-controls":S,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":Y,"aria-orientation":f?"horizontal":"vertical",children:[!f&&U&&q&&H.jsx(sr,{ref:xe,className:wt.twMerge("aqvs-scrollbar-tap-circle-wrapper",ke),size:Be,maxVisualDistance:ze,style:kt,opacity:Et,renderVisual:ce,onDragChange:at},"tap-circle"),Xe(-1,y[0],Z[0],"arrow-start"),H.jsxs("div",{className:"aqvs-scrollbar-track",style:{borderRadius:m/2},onPointerDown:It,onPointerMove:Tt,onPointerUp:Ct,onPointerCancel:Ie,onLostPointerCapture:mt,"aria-disabled":!o,children:[Mt&&H.jsx("div",{className:"aqvs-scrollbar-overlay","aria-hidden":!0,children:g?.(Mt)},"overlay"),H.jsx("div",{className:"aqvs-scrollbar-thumb-wrapper",style:{[Ze]:_,[C]:ee,...f?{top:0,bottom:0}:{left:0,right:0}},"data-visible":U||B?"true":"false",onPointerDown:lt,role:"slider","aria-orientation":f?"horizontal":"vertical","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":Y,"aria-disabled":!i,tabIndex:-1,children:H.jsx("div",{ref:T,className:wt.twMerge("aqvs-scrollbar-thumb",f?"aqvs-scrollbar-thumb-horizontal":"aqvs-scrollbar-thumb-vertical"),"data-testid":"aqvs-scrollbar-thumb","data-thumb-state":Ne,style:{borderRadius:m-1,cursor:i?"pointer":"default"},onMouseEnter:()=>{i&&oe(!0)},onMouseLeave:()=>{i&&oe(!1)}},"thumb")},"thumb-wrapper")]},"track"),Xe(1,y[1],Z[1],"arrow-end")]})},kr=16,Jt=(n,e,t)=>e===1?n*kr:e===2?n*t:n,Nr=(n,e)=>{const t=n.shiftKey&&n.deltaX===0,s=t?n.deltaY:n.deltaX,i=t?0:n.deltaY,o=s!==0&&Math.abs(s)>=Math.abs(i);return{isZoomGesture:n.ctrlKey,isHorizontalDominant:o,horizontalDelta:Jt(s,n.deltaMode,e),verticalDelta:Jt(i,n.deltaMode,e)}},lr=new WeakSet,Qt=n=>{lr.add(n)},Vr=n=>lr.has(n),zr=["mouse","pen","touch"],Bt=(n,e)=>!(n==="mouse"||n==="pen"||n==="touch")||e.includes(n),Dr=n=>n==="mouse"||n==="pen",Pt={maxVelocity:6,minVelocity:.02,deceleration:.0025,velocitySampleWindow:90,startVelocityThreshold:.04},Vt=(n,e,t)=>{for(const[s,i,o]of e)t==="add"?n.addEventListener(s,i,o):n.removeEventListener(s,i,o)},cr=r.forwardRef(({children:n,contentSize:e,viewportSize:t,onViewportSizeChange:s,scrollBarWidth:i=12,enableThumbDrag:o=!0,enableTrackClick:l=!0,enableArrowButtons:f=!0,enablePointerDrag:m=!0,pointerDragInputs:b=zr,onScroll:S,className:v,testId:E,style:g,background:k,tapScrollCircleOptions:K,inertiaOptions:B,itemCount:fe,renderThumbOverlay:de,wheelSpeedMultiplier:oe=1,overscrollBehavior:le="auto",onWheelHorizontal:me,contentInsets:T,visibleStartIndex:L,visibleEndIndex:M,renderOverlay:G,initialScrollPosition:J=0,contentProps:j},xe)=>{const N=r.useRef(Number.isFinite(J)?Math.max(0,J):0),I=r.useRef(null),$=r.useRef(null),pe=t===void 0,[Ye,Q]=r.useState(0),q=t??Ye,Be=r.useRef(null);r.useLayoutEffect(()=>{if(!pe)return;const p=$.current;if(!p)return;const _=()=>{const F=p.offsetHeight;if(F>0){Q(ee=>ee===F?ee:F);return}p.offsetParent!==null&&e>0&&Be.current!=="zero"&&(Be.current="zero",w.warn("[ScrollPane] The self-measured viewport is 0px. Give the scroll pane's host element a definite height (e.g. h-full, flex-1 + min-h-0, an explicit px height), or pass viewportSize explicitly."))};if(_(),typeof ResizeObserver!="function")return;const Y=new ResizeObserver(_);return Y.observe(p),()=>{Y.disconnect()}},[e,pe]),r.useLayoutEffect(()=>{pe&&s?.(Ye)},[pe,Ye,s]),r.useLayoutEffect(()=>{if(pe)return;const p=I.current;if(!p)return;const _=()=>{const F=p.clientHeight;if(F<=0||Math.abs(F-q)<=1)return;const ee=`${q}/${F}`;Be.current!==ee&&(Be.current=ee,w.warn(`[ScrollPane] viewportSize=${q} but the host band is ${F}px. The clip window, max scroll position, thumb mapping, rendered row count and scrollability all derive from viewportSize, so they are now wrong. Omit viewportSize to let the pane measure itself.`))};if(_(),typeof ResizeObserver!="function")return;const Y=new ResizeObserver(_);return Y.observe(p),()=>{Y.disconnect()}},[pe,q]);const He=r.useRef(me);r.useEffect(()=>{He.current=me},[me]);const Ee=r.useRef({frame:null,velocity:0,lastTimestamp:null,generation:0}),ke=r.useMemo(()=>({maxVelocity:B?.maxVelocity??Pt.maxVelocity,minVelocity:B?.minVelocity??Pt.minVelocity,deceleration:B?.deceleration??Pt.deceleration,velocitySampleWindow:B?.velocitySampleWindow??Pt.velocitySampleWindow,startVelocityThreshold:B?.startVelocityThreshold??Pt.startVelocityThreshold}),[B]),$e=r.useMemo(()=>({top:Math.max(0,T?.top??0),bottom:Math.max(0,T?.bottom??0)}),[T]);w.debug("[ScrollPane] ScrollPane rendered",()=>({contentSize:e,viewportSize:q,scrollBarWidth:i,className:v,style:g,tapScrollCircleOptions:K,inertiaOptions:B,enablePointerDrag:m,contentInsets:$e}));const We=r.useRef({contentSize:e,viewportSize:q}),W=r.useMemo(()=>e>q,[e,q]),Ve=r.useCallback((p,_)=>{let Y=_??We.current;_&&!(Number.isFinite(_.contentSize)&&Number.isFinite(_.viewportSize))&&(w.warn("[ScrollPane] scrollTo received non-finite dimsOverride; falling back to the committed dims",{dimsOverride:_}),Y=We.current);const{contentSize:F,viewportSize:ee}=Y,Te=F>ee,U=N.current;if(w.debug("[ScrollPane] scrollTo called",()=>({newPosition:p,contentSize:F,viewportSize:ee,currentIsScrollable:Te,prevPosition:U})),!Te)return N.current!==0&&(N.current=0,S?.(0,U)),N.current;const te=typeof p=="function"?p(N.current):p;if(!Number.isFinite(te))return w.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position",{nextPosition:te}),N.current;const Ne=Math.max(F-ee,0),re=ie(te,0,Ne);return N.current!==re&&(N.current=re,S?.(re,U)),N.current},[S]),ce=r.useRef(Ve);r.useEffect(()=>{ce.current=Ve},[Ve]);const he=r.useCallback(()=>{const p=Ee.current;p.generation+=1,p.frame!==null&&cancelAnimationFrame(p.frame),p.frame=null,p.velocity=0,p.lastTimestamp=null},[]),ve=r.useRef(he);r.useEffect(()=>{ve.current=he},[he]),r.useEffect(()=>()=>{ve.current()},[]);const Ze=r.useCallback(p=>{if(!W)return;const{maxVelocity:_,minVelocity:Y,deceleration:F,startVelocityThreshold:ee}=ke,Te=ie(p,-_,_);if(Math.abs(Te)<ee)return;he(),Ee.current.velocity=Te,Ee.current.lastTimestamp=null;const U=Ee.current.generation,te=Ne=>{const re=Ee.current;if(re.generation!==U)return;if(re.lastTimestamp===null){re.lastTimestamp=Ne,re.frame=requestAnimationFrame(te);return}const Ke=Ne-re.lastTimestamp;if(re.lastTimestamp=Ne,Ke<=0){re.frame=requestAnimationFrame(te);return}const De=re.velocity;let ae=De;const Se=F*Ke;De>0?ae=Math.max(0,De-Se):De<0&&(ae=Math.min(0,De+Se));const Ce=(De+ae)/2*Ke,at=N.current;if(Ce!==0&&ce.current(Je=>Je+Ce),Ee.current.generation!==U)return;const Ge=N.current,{contentSize:tt,viewportSize:d}=We.current,R=Math.max(tt-d,0);re.velocity=ae;const ge=Ge===at||Ge<=0&&ae<=0||Ge>=R&&ae>=0;if(Math.abs(ae)<Y||ge){he();return}re.frame=requestAnimationFrame(te)};Ee.current.frame=requestAnimationFrame(te)},[W,ke,he]),ut=r.useRef(Ze);r.useEffect(()=>{ut.current=Ze},[Ze]),r.useLayoutEffect(()=>{We.current={contentSize:e,viewportSize:q}},[e,q]),r.useLayoutEffect(()=>{const p=$.current;if(!p)return;const _=()=>{p.scrollTop!==0&&(w.debug("[ScrollPane] Native scroll detected, resetting to 0",()=>({scrollTop:p.scrollTop})),p.scrollTop=0),p.scrollLeft!==0&&(p.scrollLeft=0)};return p.addEventListener("scroll",_),()=>p.removeEventListener("scroll",_)},[]),r.useLayoutEffect(()=>{if(W){w.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change",()=>({contentSize:e,viewportSize:q,scrollPosition:N.current}));const p=ie(e-q,0,e);N.current>p&&Ve(p)}else Ve(0)},[W,Ve,e,q]);const C=r.useRef({isScrollable:W,viewportSize:q,wheelSpeedMultiplier:oe,overscrollBehavior:le});r.useLayoutEffect(()=>{C.current={isScrollable:W,viewportSize:q,wheelSpeedMultiplier:oe,overscrollBehavior:le}},[W,q,oe,le]);const Qe=r.useCallback(p=>{if(Vr(p))return!1;const{isScrollable:_,viewportSize:Y,wheelSpeedMultiplier:F,overscrollBehavior:ee}=C.current,Te=Nr(p,Y);if(Te.isZoomGesture)return!1;if(Te.isHorizontalDominant)return He.current?(Qt(p),p.preventDefault(),he(),He.current(Te.horizontalDelta),!0):!1;if(!_||Te.verticalDelta===0)return!1;let U=Te.verticalDelta;if(F!==1&&(U*=F),ee!=="contain"){const te=N.current,Ne=Math.max(We.current.contentSize-Y,0);if(U>0&&te>=Ne||U<0&&te<=0)return!1}return Qt(p),p.preventDefault(),he(),w.debug("[ScrollPane] wheel event",()=>({deltaY:U,scrollPosition:N.current,wheelSpeedMultiplier:F,deltaMode:p.deltaMode,scrollTop:$.current?.scrollTop})),Ve(te=>te+U),!0},[Ve,he]);r.useEffect(()=>{const p=F=>{Qe(F)},_=()=>{he()},Y=I.current;return Y&&(Y.addEventListener("wheel",p,{passive:!1}),Y.addEventListener("pointerdown",_,{capture:!0,passive:!0})),()=>{Y&&(Y.removeEventListener("wheel",p),Y.removeEventListener("pointerdown",_,{capture:!0}))}},[Qe,he]),r.useImperativeHandle(xe,()=>({scrollTo:(p,_)=>(he(),Ve(p,_)),getScrollPosition:()=>N.current,getContentSize:()=>e,getViewportSize:()=>q,applyWheel:Qe}),[Ve,e,q,he,Qe]);const gt=r.useId(),y=j?.id??gt,Z=r.useRef({pointerType:"",pointerId:null,startClientY:0,startScroll:0,isDragging:!1,shouldCancelNextClick:!1,clickResetTimer:null,velocitySamples:[]}),Ue=r.useRef(m),ft=r.useRef(b);r.useEffect(()=>{Ue.current=m},[m]),r.useEffect(()=>{ft.current=b},[b]);const ze=r.useRef(W);r.useEffect(()=>{ze.current=W},[W]);const et=r.useRef(ke);r.useEffect(()=>{et.current=ke},[ke]),r.useEffect(()=>{const p=Z.current;if(m&&W&&(p.pointerId===null||Bt(p.pointerType,b))||p.pointerId===null)return;const _=$.current;p.clickResetTimer!==null&&(window.clearTimeout(p.clickResetTimer),p.clickResetTimer=null);const Y=p.isDragging&&p.shouldCancelNextClick,F=p.pointerId;p.pointerId=null,p.pointerType="",p.startClientY=0,p.startScroll=0,p.isDragging=!1,p.shouldCancelNextClick=Y,p.velocitySamples=[],_?.hasPointerCapture(F)&&_.releasePointerCapture(F)},[m,b,W]),r.useEffect(()=>{const p=$.current;if(!p)return;const _=6,Y=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),F=()=>{const d=Z.current;d.pointerId=null,d.pointerType="",d.startClientY=0,d.startScroll=0,d.isDragging=!1,d.velocitySamples=[]},ee=()=>{const d=Z.current;d.clickResetTimer!==null&&(window.clearTimeout(d.clickResetTimer),d.clickResetTimer=null)},Te=d=>{const R=Z.current,ge=Y();R.velocitySamples.push({clientY:d,time:ge});const Je=et.current.velocitySampleWindow;R.velocitySamples=R.velocitySamples.filter(Ae=>ge-Ae.time<=Je)},U=d=>d instanceof HTMLElement&&d.closest("[data-scrollpane-ignore-drag='true']")!==null,te=d=>{const R=Z.current;R.shouldCancelNextClick&&(d.preventDefault(),d.stopPropagation(),R.shouldCancelNextClick=!1)},Ne=d=>{const R=Z.current;if(!R.isDragging){if(R.isDragging=!0,R.shouldCancelNextClick=!0,!p.hasPointerCapture(d.pointerId))try{p.setPointerCapture(d.pointerId)}catch{}Te(d.clientY)}},re=d=>d.isTrusted||d.target===p,Ke=d=>{const R=Z.current;p.hasPointerCapture(d)&&p.releasePointerCapture(d),R.shouldCancelNextClick=!1,ee(),F()},De=d=>{const R=Z.current;if(R.pointerId!==d.pointerId)return;if(d.buttons===0&&Dr(d.pointerType)){Ke(d.pointerId);return}if(!(Ue.current&&ze.current)||!Bt(d.pointerType,ft.current)||!R.isDragging&&(Math.abs(d.clientY-R.startClientY)<_||(Ne(d),!R.isDragging)))return;Te(d.clientY);const ge=d.clientY-R.startClientY,Je=R.startScroll-ge;ce.current(Je),d.cancelable&&d.preventDefault()},ae=()=>{const d=Z.current;return d.pointerId!==null||!d.shouldCancelNextClick?!1:(ee(),d.clickResetTimer=window.setTimeout(()=>{const R=Z.current;R.shouldCancelNextClick=!1,R.clickResetTimer=null},0),!0)},Se=d=>{const R=Z.current;if(R.pointerId!==d.pointerId){ae();return}R.isDragging&&R.shouldCancelNextClick&&d.cancelable&&(d.preventDefault(),d.stopPropagation()),R.isDragging&&Te(d.clientY);let ge=0;if(R.isDragging&&R.velocitySamples.length>=2){const Ae=R.velocitySamples,st=et.current.velocitySampleWindow,it=Ae[Ae.length-1],rt=Ae.find(dt=>it.time-dt.time<=st)??Ae[0];if(it&&rt&&it.time!==rt.time){const dt=it.clientY-rt.clientY,lt=it.time-rt.time;ge=-(dt/lt)}}ee(),R.shouldCancelNextClick&&(R.clickResetTimer=window.setTimeout(()=>{const Ae=Z.current;Ae.shouldCancelNextClick=!1,Ae.clickResetTimer=null},0));const Je=et.current.startVelocityThreshold;F(),p.hasPointerCapture(d.pointerId)&&p.releasePointerCapture(d.pointerId),Math.abs(ge)>=Je&&ut.current?.(ge)},qe=d=>{if(Z.current.pointerId!==null){if(!d.isPrimary||d.pointerType!==Z.current.pointerType)return;Ke(Z.current.pointerId)}if(Z.current.shouldCancelNextClick&&(ee(),Z.current.shouldCancelNextClick=!1),!(Ue.current&&ze.current)||!Bt(d.pointerType,ft.current)||d.button!==0&&d.pointerType==="mouse"||d.ctrlKey||d.metaKey||d.altKey||U(d.target))return;window.dispatchEvent(new CustomEvent(Xt,{detail:{paneId:gt}})),ve.current?.();const R=Z.current;ee(),R.pointerId=d.pointerId,R.pointerType=d.pointerType,R.startClientY=d.clientY,R.startScroll=N.current,R.isDragging=!1,R.shouldCancelNextClick=!1,R.velocitySamples=[]},Ce=d=>{if(Z.current.pointerId!==d.pointerId){ae();return}re(d)&&Ke(d.pointerId)},Ge=[["click",te,!0],["pointerdown",qe,{passive:!1}],["lostpointercapture",d=>{d.target!==p||Z.current.pointerId!==d.pointerId||Ke(d.pointerId)},void 0]],tt=[["pointermove",De,{passive:!1}],["pointerup",Se,void 0],["pointercancel",Ce,void 0]];return Vt(p,Ge,"add"),Vt(window,tt,"add"),()=>{Vt(p,Ge,"remove"),Vt(window,tt,"remove");const d=Z.current;d.pointerId!==null&&p.hasPointerCapture(d.pointerId)&&p.releasePointerCapture(d.pointerId),ee(),F()}},[gt]);const ne=r.useCallback(p=>(he(),Ve(p)),[Ve,he]);return H.jsxs("div",{ref:I,"data-testid":E,"data-self-measured":pe?"true":void 0,className:wt.twMerge("aqvs-scroll-pane",v),style:g,children:[H.jsxs("div",{ref:$,className:wt.twMerge("aqvs-scroll-pane-content"),"data-testid":"aqvs-scroll-pane-content",style:{height:pe?void 0:q,paddingTop:$e.top,paddingBottom:$e.bottom,...m&&W&&b.some(p=>p==="touch"||p==="pen")?{touchAction:"none"}:{}},...j,id:y,children:[k,n(N.current)]}),H.jsx(ar,{contentSize:e,viewportSize:q,scrollPosition:N.current,onScroll:ne,enableThumbDrag:o,enableTrackClick:l,enableArrowButtons:f,scrollBarWidth:i,ariaControls:y,tapScrollCircleOptions:K,itemCount:fe,renderThumbOverlay:de,visibleStartIndex:L,visibleEndIndex:M},"scrollbar"),G?.()]})}),er=(n,e,t)=>Math.min(Math.max(n,e),t),Ar=({dragState:n,normalizedDistance:e,sizeScale:t,size:s})=>{const i=Math.max(s/2,1),o=1+e*.65,l=Math.max(.65,1-e*.25),f=n.direction*e*26*t,m=.8+e*.18,b=3*t,S=6*t,v=22*t,E=Math.abs(f)+S,g=f>0?b:-Math.abs(f)-b,k=Math.max(2.5,3*t),K=er(n.offsetX,-i,i),B=er(n.offsetY,-i,i),fe=i*.35,de=K/i*fe,oe=B/i*fe,le=de*.45,me=oe*.45,T=Math.max(v*.38,6),L=.65+e*.2,M=n.active;return H.jsxs(H.Fragment,{children:[H.jsx("div",{className:"aqvs-tap-scroll-circle-gradient",style:{transform:`scale(${l}, ${o})`,transition:M?"40ms transform ease-out":"200ms ease transform"}}),H.jsx("div",{className:"aqvs-sample-visual-pupil",style:{width:v,height:v,transform:`translate(calc(-50% + ${de}px), calc(-50% + ${oe}px)) scale(${l}, ${m*o})`,transition:M?"70ms transform ease-out":"200ms ease transform"}}),H.jsx("div",{className:"aqvs-sample-visual-highlight",style:{width:T,height:T,transform:`translate(calc(-50% + ${le}px), calc(-50% + ${me}px)) scale(${l}, ${o})`,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"}}),H.jsx("div",{className:"aqvs-sample-visual-rod",style:{width:k,height:E,transform:`translate(-50%, ${g}px)`,opacity:e,transition:M?"40ms height, 60ms opacity ease-out ease-out":"200ms ease height, 120ms ease opacity"}})]})},zt=100,Lr=n=>{if(!Number.isFinite(n))return 0n;const e=Math.trunc(n);return e<=0?0n:BigInt(e)},Ht=(n,e)=>{if(!Number.isFinite(n))throw new Error(`valueFn returned a non-finite value at index ${e}: ${n}`);return n},vt=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 ct{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 o=0,l;if(i>0){const f=s?.sampleRange??{from:0,to:Math.min(zt-1,i-1)};let m=Math.max(0,Math.trunc(f.from)),b=Math.min(Math.trunc(f.to),i-1);if(m>b&&(m=0,b=Math.min(zt-1,i-1)),i>zt)o=ct._sampleBaseValueStrided(t,i,zt),s?.materialize&&(l={from:m,values:ct._collectValidatedValues(t,m,b)});else{const S=ct._collectValidatedValues(t,m,b);o=ct._modeOrMedian([...S]),s?.materialize&&(l={from:m,values:S})}}if(this.size=i,this.tree=new Map,this.deltas=new Map,this.total=void 0,this.valueFn=t,this.baseValue=o,l)for(let f=0;f<l.values.length;f++){const m=l.from+f;if(m>=this.size)break;const b=l.values[f]-this.baseValue;b!==0&&(this.deltas.set(m,b),this._updateTree(m,b))}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 o=t;o<=s;o++)i.push(Ht(e(o),o));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 s;e.length%2===0?s=Math.floor((e[t-1]+e[t])/2):s=e[t];const i=new Map;let o=0;for(const l of e){const f=(i.get(l)??0)+1;i.set(l,f),f>o&&(o=f)}if(o>e.length*.2){const l=[];for(const[m,b]of i.entries())b===o&&l.push(m);const f=l.reduce((m,b)=>m+b,0);s=Math.floor(f/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 o=[];for(let l=0;l<t&&o.length<s;l+=i)o.push(Ht(e(l),l));return ct._modeOrMedian(o)}update(e,t){return this.updates([{index:e,value:t}])}updates(e){const t=this._buildDeltaUpdates(e);return t.length>0?this.updateDeltas(t):this.total}updateDelta(e,t){return this.updateDeltas([{index:e,change:t}])}updateDeltas(e){const t=new Map;for(const{index: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=vt(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:o}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(o))throw new Error(`Value must be a finite number: ${o}`);if(o<0)throw new Error("Value cannot be negative.");const l=s.has(i)?s.get(i)??0:this.deltas.get(i)??0,f=l+this.baseValue,m=o-f;m!==0&&t.push({index:i,change:m}),s.set(i,l+m)}return t}_computeTreeTotal(){if(this.size<=0)return 0;let e=0,t=this.size;for(;t>0;){e+=this.tree.get(t)??0;const s=vt(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,o=Ht(this.valueFn(e),e)-this.baseValue;if(o!==s&&(o===0?this.deltas.delete(e):this.deltas.set(e,o),t)){const l=o-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 f of i){const m=Math.max(0,Math.trunc(f.from)),b=Math.min(Math.trunc(f.to),this.size-1);for(let S=m;S<=b;S++)this._materialize(S)}if(t===void 0)return;if(s){this._materialize(t);return}const o=i[0].from,l=i[i.length-1].to;t>=o&&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 o;for(;;){if(o=this._descend(e,s),o<0||o>=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(o)??0;if(this._materialize(o),(this.deltas.get(o)??0)===f)break}const l=this.prefixSum(o);return{index:o,total:this.total??l.total,cumulative:l.cumulative,currentValue:l.currentValue,safeIndex:l.safeIndex}}_descend(e,t){let s=0,i=0,o=1;for(;o<<1<=this.size;)o<<=1;for(;o>0;o>>=1){const l=s+o;if(l<=this.size){const m=(this.tree.get(l)??0)+this.baseValue*o;(t?i+m<e:i+m<=e)&&(s=l,i+=m)}}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=Lr(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 o=t.materializeOption?.materialize===!0;for(;;){let l=0n,f=i-1n,m,b,S=this.total;for(;l<=f;){const g=l+f>>1n,k=Number(g),K=this.prefixSum(k);if(S=K.total,s?K.cumulative>=e:K.cumulative<=e)if(m=g,b=K,s){if(g===0n)break;f=g-1n}else l=g+1n;else if(s)l=g+1n;else{if(g===0n)break;f=g-1n}}const v=b,E=m!==void 0?Number(m):-1;if(o&&E>=0){const g=this.deltas.get(E)??0;if(this._materialize(E),(this.deltas.get(E)??0)!==g)continue}return{index:E,total:S,cumulative:v?.cumulative,currentValue:v?.currentValue,safeIndex:v?.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=ie(Math.trunc(e),0,this.size-1),i=t?.materializeOption;this._materializeRanges(i,s,!0);let o=0,l=s+1;for(;l>0;){const m=this.tree.get(l)??0;o+=m;const b=vt(l);if(b===0)break;l-=b}const f=i?.materialize?this.get(s):(this.deltas.get(s)||0)+this.baseValue;return{cumulative:o+this.baseValue*(s+1),total:this.total,currentValue:f,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 o=s+1;for(;o<=this.size;){t.set(o,(t.get(o)??0)+i);const l=vt(o);if(l===0)break;o+=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 o of this.deltas.keys())o>=t&&this.deltas.delete(o);this.size=t,this.rebuildTree()}else this._growSize(s,t);else{if(t>0)for(const o of this.deltas.keys())o>=t&&this.deltas.delete(o);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 o=e+1;for(;o<=s;){const l=vt(o);if(l===0)break;o+=l}for(;o<=i;){this.tree.set(o,(this.tree.get(o)??0)+t);const l=vt(o);if(l===0)break;o+=l}}_growSize(e,t){if(this.size=t,this.deltas.size>0){const s=ct._minCoveredLowBound(e,t);if(e-s<this.deltas.size)for(let o=s;o<e;o++){const l=this.deltas.get(o);l===void 0||l===0||this._propagateDeltaToGrownNodes(o,l,e,t)}else for(const[o,l]of this.deltas.entries())l===0||o<s||this._propagateDeltaToGrownNodes(o,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 Or=(n,e)=>{const t=n?.sampleRange,s=e?.sampleRange;return t===s?!1:t&&s?t.from!==s.from||t.to!==s.to:!0},ur=(n,e,t)=>{const s=Number.isFinite(n)&&n>0?Math.trunc(n):0,i=r.useRef(null),o=r.useRef({size:s,valueOrFn:e,options:t});i.current===null&&(i.current=new ct(s,e,t));const l=i.current,f=o.current,m=f.size!==s,b=f.valueOrFn!==e,S=Or(f.options,t),v=f.size===0&&s>0&&(!i.current||i.current.base===0);if(b||S){const E=t?.resetOnValueFnChange??!0;S||b&&E||v?(t?.debug&&w.debug("[useFenwickMapTree] reset",{valueOrFnChanged:b,optionsChanged:S}),l.reset(s,e,t)):(m&&(t?.debug&&w.debug("[useFenwickMapTree] resize (with valueFn change)",{from:f.size,to:s}),l.changeSize(s)),t?.debug&&w.debug("[useFenwickMapTree] setValueFn (no reset)",{valueOrFnChanged:b}),l.setValueFn(e,{reset:!1})),o.current={size:s,valueOrFn:e,options:t}}else m&&(t?.debug&&w.debug("[useFenwickMapTree] resize",{from:f.size,to:s}),v?l.reset(s,e,t):l.changeSize(s),o.current={size:s,valueOrFn:e,options:t});return l};class _r{key;value;prev=null;next=null;constructor(e,t){this.key=e,this.value=t}}class qt{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 fr(n){const e=r.useRef(new Map),t=r.useRef(new qt),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 qt;return}if(Number.isFinite(s))for(;e.current.size>s;){const S=t.current.removeHead();if(S)e.current.delete(S.key);else break}},[n,s]);const o=r.useCallback(S=>{const v=e.current.get(S);if(v)return t.current.moveToTail(v),v.value},[]),l=r.useCallback((S,v)=>{const E=i.current;if(Number.isNaN(E)||E<=0)return;let g=e.current.get(S);if(g)g.value=v,t.current.moveToTail(g);else{if(e.current.size>=E){const k=t.current.removeHead();k&&e.current.delete(k.key)}g=new _r(S,v),e.current.set(S,g),t.current.addToTail(g)}},[]),f=r.useCallback(S=>e.current.has(S),[]),m=r.useCallback(S=>{const v=e.current.get(S);v&&(t.current.remove(v),e.current.delete(S))},[]),b=r.useCallback(()=>{e.current.clear(),t.current=new qt},[]);return r.useMemo(()=>({get:o,set:l,has:f,remove:m,clear:b}),[o,l,f,m,b])}const Fr=1e4,Yr=()=>{const{get:n,set:e,has:t,clear:s}=fr(Fr);return r.useMemo(()=>({get:n,set:e,has:t,clear:s}),[n,e,t,s])},Br=(n,e)=>{const t=r.useRef(e),s=r.useRef(n);r.useLayoutEffect(()=>{t.current=e,s.current=n},[e,n]);const i=r.useRef(new WeakMap);return r.useCallback(o=>{if(!o||i.current.has(o))return;const l=f=>{t.current?.enableBridge!==!1&&s.current.current?.applyWheel(f)};return o.addEventListener("wheel",l,{passive:!1}),i.current.set(o,l),()=>{i.current.get(o)===l&&(o.removeEventListener("wheel",l),i.current.delete(o))}},[])},we=(n,e)=>e<=0?0:ie(n,0,e-1),tr=n=>({top:Math.max(0,n?.top??0),bottom:Math.max(0,n?.bottom??0)}),je=(n,e)=>n<=e?0:n-e,St=(n,e)=>n<=0?0:n+e,Dt=1e3,rr=2e3,Hr=1048576,qr=40,Xr=n=>{const e=n.ownerDocument.defaultView?.getSelection();if(!e||e.isCollapsed||e.rangeCount===0)return!1;for(let t=0;t<e.rangeCount;t+=1)if(e.getRangeAt(t).intersectsNode(n))return!0;return!1},yt=n=>{if(!Number.isFinite(n))return 0n;const e=Math.trunc(n);return e<=0?0n:BigInt(e)},jr=(n,e,t,s,i,o,l,f)=>{const m=yt(s);if(m===0n)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const b=T=>T<0n?0n:T>=m?m-1n:T,S={materializeOption:{materialize:!1}},{index:v,cumulative:E}=o.findIndexAtOrAfter(n,S);let g;v===-1?g=m-1n:(E===n?g=yt(v+1):g=yt(v),g>=m&&(g=m-1n)),n<=0&&(g=0n),f&&n>=l&&(g=m-1n);const k=T=>{const L=Number(T);if(!Number.isSafeInteger(L))return null;const{cumulative:M}=o.prefixSum(L,{materializeOption:{materialize:!1}});if(!Number.isFinite(M))return null;const{index:G}=o.findIndexAtOrAfter(M+.5,{materializeOption:{materialize:!1}});if(G===-1)return null;const J=yt(G);return J>T?J:null},K=T=>{let L=0,M=T,G=T,J=0n,j=0;for(;M<m&&L<e;){const xe=Number(M),N=i(xe);if(L+=N,G=M,M+=1n,J+=1n,!Number.isFinite(N)||N<0)break;if(N===0){if(j+=1,j>Dt){const I=k(G);if(I!==null&&I>M)M=I,j=0;else if(I!==null&&I===M&&i(Number(M))>0)j=0;else break}}else j=0}return J===0n&&(G=T),{height:L,end:G}};let{height:B,end:fe}=K(g);if(B<e&&g>0n){let T=g,L=B,M=0;for(;T>0n&&L<e;){T-=1n;const J=Number(T),j=i(J);if(L+=j,!Number.isFinite(j)||j<0)break;if(j===0){if(M+=1,M>Dt){const xe=Number(T);if(!Number.isSafeInteger(xe))break;const{cumulative:N}=o.prefixSum(xe,{materializeOption:{materialize:!1}});if(!Number.isFinite(N))break;const{index:I}=o.findIndexAtOrAfter(N-.5,{materializeOption:{materialize:!1}}),$=I===-1?-1n:yt(I);if($>=0n&&$<T)T=$+1n,M=0;else if($===T&&T>=1n&&i(Number(T-1n))>0)M=0;else break}}else M=0}g=b(T);const G=K(g);B=G.height,fe=G.end}const de=b(g),oe=b(fe),le=b(de-BigInt(Math.max(0,t))),me=b(oe+BigInt(Math.max(0,t)));return{renderingStartIndex:we(Number(le),s),renderingEndIndex:we(Number(me),s),visibleStartIndex:we(Number(de),s),visibleEndIndex:we(Number(oe),s)}},$r=(n,e,t,s,i,o,l)=>{if(s===0)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const f=Number.isFinite(l),m=f?Math.min(Math.max(0,n),l):Math.max(0,n);if(s>=Number.MAX_SAFE_INTEGER)return jr(m,e,t,s,i,o,l,f);const{index:b,cumulative:S,currentValue:v}=o.findIndexAtOrAfter(m,{materializeOption:{materialize:!1}}),E=b===-1?e<=0||(S??0)<m+(v??0)?s-1:0:b;let g=we(E,s),k=0;if(b!==-1&&S===m)g=we(b+1,s),k=0;else if(g===b&&S!==void 0&&v!==void 0)k=S-v-m;else{const{cumulative:T,currentValue:L}=o.prefixSum(g,{materializeOption:{materialize:!1}});k=(T??0)-(L??0)-m}const K=k,B=(T,L)=>{let M=T,G=L,J=0;for(;M<s&&G<e;){const j=i(M);if(G+=j,M++,!Number.isFinite(j)||j<0)break;if(j===0){if(J++,J>Dt){const{cumulative:xe}=o.prefixSum(M-1,{materializeOption:{materialize:!1}}),{index:N}=Number.isFinite(xe)?o.findIndexAtOrAfter(xe+.5,{materializeOption:{materialize:!1}}):{index:-1};if(N>M)M=N,J=0;else if(N===M&&i(M)>0)J=0;else break}}else J=0}return{cursor:M,height:G}},fe=B(g,k);let de=fe.cursor;if(k=fe.height,k<e&&g>0){let T=k+Math.abs(Math.min(0,K)),L=g-1,M=0;for(;L>=0&&T<e;){const J=i(L);if(T+=J,!Number.isFinite(J)||J<0){L--;break}if(J===0){if(M++,M>Dt){const{cumulative:j}=o.prefixSum(L,{materializeOption:{materialize:!1}}),{index:xe}=Number.isFinite(j)?o.findIndexAtOrAfter(j-.5,{materializeOption:{materialize:!1}}):{index:-1};if(xe!==-1&&xe<L){L=xe,M=0;continue}if(xe===L&&L>=1&&i(L-1)>0)M=0;else{L--;break}}}else M=0;L--}g=we(L+1,s);const G=B(g,0);de=G.cursor,k=G.height}const oe=we(g-t,s),le=we(Math.max(de-1,g),s),me=we(le+t,s);return{renderingStartIndex:oe,renderingEndIndex:me,visibleStartIndex:g,visibleEndIndex:le}},nr=(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(o){console.error("[useThrottledInvoker] Error flushing pending callback on unmount",o)}i.arg=null}},[i,n,t]),r.useCallback(o=>{if(i.arg=o,i.id!==null)return;const l=f=>{if(i.id=null,i.arg===null)return;const m=f-i.last;if(s===0||i.last===0||m>=s){if(n.current)try{t(n.current,i.arg)}catch(b){console.error("[useThrottledInvoker] Error invoking callback",b)}i.arg=null,i.last=f}i.arg!==null&&(i.id=requestAnimationFrame(l))};i.id=requestAnimationFrame(l)},[s,t,n,i])},Wr=r.memo(({index:n,top:e,height:t,item:s,children:i,clipItemHeight:o,enableKeyboardNavigation:l,onKeyDown:f,onFocus:m,registerItemRef:b})=>{const S=r.useCallback(k=>b(n,k),[n,b]),v=r.useCallback(k=>f(k,n),[n,f]),E=r.useCallback(()=>m(n),[n,m]),g=r.useCallback(k=>{k.currentTarget.focus({preventScroll:!0})},[]);return H.jsx("div",{ref:S,"data-index":n,"data-virtualscroll-item":"true",className:"aqvs-item-container",style:{top:e,height:t,overflow:o?"hidden":void 0},tabIndex:l?-1:void 0,onPointerDown:l?g:void 0,onKeyDownCapture:l?v:void 0,onFocusCapture:l?E:void 0,children:i(s,n)})}),Ur=({itemCount:n,getItem:e,getItemKey:t,getItemHeight:s,viewportSize:i,overscanCount:o=15,className:l,testId:f,onScroll:m,onRangeChange:b,children:S,background:v,initialScrollIndex:E,initialScrollOffset:g,initialScrollAnchor:k,callbackThrottleMs:K=5,contentInsets:B,onItemFocus:fe,scrollBarOptions:de,behaviorOptions:oe,onWheelHorizontal:le,horizontalKeyInputs:me,horizontalKeyStep:T=qr,contentProps:L},M)=>{const{width:G,enableThumbDrag:J,enableTrackClick:j,enableArrowButtons:xe,enableScrollToTopBottomButtons:N,renderThumbOverlay:I,tapScrollCircleOptions:$}=de??{},{enablePointerDrag:pe,pointerDragInputs:Ye,enableKeyboardNavigation:Q=!0,wheelSpeedMultiplier:q,inertiaOptions:Be,overscrollBehavior:He,clipItemHeight:Ee=!1,resetOnGetItemHeightChange:ke=!1}=oe??{},[$e,We]=r.useState(0),W=i??$e,Ve=r.useCallback(a=>{We(u=>u===a?u:a)},[]),ce=r.useRef(null),he=r.useRef({renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0,scrollPosition:0,totalHeight:0}),ve=r.useRef(k&&n>0?{index:ie(Math.trunc(k.index),0,n-1),align:"top",offset:-Math.max(0,k.offsetPx??0)}:null),Ze=r.useRef(!1),ut=r.useRef(!0);r.useEffect(()=>{if(ut.current){ut.current=!1;return}ke&&(ve.current=null)},[ke,s]);const C=r.useMemo(()=>tr(B),[B]),[Qe]=r.useState(()=>{const u=k?.index??E,h=typeof u=="number"&&Number.isFinite(u)?Math.max(0,Math.trunc(u)):0;return{from:Math.max(0,h-50),to:h+50}}),gt=r.useMemo(()=>({sampleRange:Qe,resetOnValueFnChange:ke,materialize:!0}),[ke,Qe]),y=ur(n,s,gt),[Z]=r.useState(()=>{let a=0,u=0;if(k&&n>0){const h=ie(Math.trunc(k.index),0,n-1),z=Math.max(0,k.offsetPx??0),D=ie(h-o*2,0,n-1),A=ie(h+o*2,0,n-1),O=h>0||z>0?{materializeOption:{materialize:!0,ranges:[{from:D,to:A}]}}:void 0,{cumulative:se,total:ye,currentValue:be}=y.prefixSum(h,O),ue=Math.max(se-be+z,0);a=St(ue,C.top),u=ye??y.getTotal()}else if(typeof E=="number"){const h=ie(E,0,n-1),z=ie(h-o*2,0,n-1),D=ie(h+o*2,0,n-1),A=E>0?{materializeOption:{materialize:!0,ranges:[{from:z,to:D}]}}:void 0,{cumulative:O,total:se,currentValue:ye}=y.prefixSum(E,A),be=Math.max(O-ye,0);a=St(be,C.top),u=se??y.getTotal()}else typeof g=="number"&&(a=St(Math.max(g,0),C.top)),u=y.getTotal();return{position:a,total:u}}),[Ue,ft]=r.useState(Z.position),[ze,et]=r.useState(Z.total),ne=r.useRef(Z.position),p=r.useRef(C.top),_=r.useRef(m??void 0),Y=r.useRef(b??void 0),F=r.useRef(le),ee=(me?.length??0)>0,Te=!!le;r.useEffect(()=>{ee&&(Q||w.warn("[VirtualScroll] horizontalKeyInputs is set but behaviorOptions.enableKeyboardNavigation is false; horizontal keyboard scrolling is disabled because the row key handler is not mounted."),Te||w.warn("[VirtualScroll] horizontalKeyInputs is set but onWheelHorizontal is missing; horizontal keyboard scrolling is disabled because the package does not own the horizontal axis."),Number.isFinite(T)&&T>0||w.warn(`[VirtualScroll] horizontalKeyStep must be a finite positive number, received ${T}. Horizontal arrow keys are left untouched.`))},[ee,Te,Q,T]);const U=r.useRef(new Map),te=r.useRef(null),Ne=r.useRef(null),[re,Ke]=r.useState(null),[De,ae]=r.useState(!1),Se=r.useRef(null),qe=r.useRef(!1),Ce=r.useRef(0),at=r.useRef(!1),Ge=r.useRef(!1),tt=r.useRef(n);tt.current!==n&&(tt.current=n,Ge.current=!0),r.useLayoutEffect(()=>{_.current=m??void 0,Y.current=b??void 0,F.current=le},[b,m,le]);const d=r.useCallback(a=>{if(Q&&a&&typeof a.focus=="function")try{a.focus({preventScroll:!0})}catch{a.focus()}},[Q]),R=r.useCallback((a,{position:u,totalHeight:h})=>{a(u,h)},[]),ge=nr(_,K,R),Je=r.useCallback((a,u)=>{a(u)},[]),Ae=nr(Y,K,Je),st=r.useRef(C.top);st.current=C.top;const it=r.useRef(ge);it.current=ge,r.useEffect(()=>(Ze.current=!1,()=>{Ze.current=!0,Se.current&&(clearTimeout(Se.current),Se.current=null)}),[]),r.useEffect(()=>{Q||(U.current.clear(),te.current=null,Ne.current=null)},[Q]);const rt=r.useCallback((a,u)=>{if(!u){U.current.delete(a);return}Q&&(U.current.set(a,u),te.current===a&&(te.current=null,Ne.current=a,d(u)))},[Q,d]),dt=.01,lt=r.useRef({rafId:null,loopActive:!1,idleFrames:0,lastRenderedPosition:Z.position}),It=r.useCallback(()=>{const a=lt.current;a.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(a.rafId),a.rafId=null,a.loopActive=!1,a.idleFrames=0},[]);r.useEffect(()=>()=>{It()},[It]);const bt=r.useRef(()=>{}),Tt=r.useCallback(()=>{const a=lt.current;a.rafId=null;const u=ne.current,h=je(u,st.current),z=y.getTotal();if(ft(A=>Math.abs(A-u)<dt?A:u),Math.abs(a.lastRenderedPosition-u)>=dt?(it.current({position:h,totalHeight:z}),a.lastRenderedPosition=u,a.idleFrames=0):a.idleFrames+=1,a.idleFrames>=2){It();return}if(typeof requestAnimationFrame=="function"){a.rafId=requestAnimationFrame(A=>bt.current(A));return}a.loopActive=!1},[y,It]);bt.current=Tt;const Ct=r.useCallback(()=>{const a=lt.current;if(a.idleFrames=0,!a.loopActive){if(a.loopActive=!0,typeof requestAnimationFrame=="function"){a.rafId=requestAnimationFrame(Tt);return}a.loopActive=!1}},[Tt]),Ie=r.useCallback((a,u)=>{const h=u?.immediate??!1,z=je(a,C.top);if(ne.current=a,h){lt.current.lastRenderedPosition=a,lt.current.idleFrames=0,ft(a),ge({position:z,totalHeight:y.getTotal()});return}Ct()},[Ct,y,C.top,ge]),mt=r.useCallback((a,u=0)=>{const h=ce.current;if(!h)return a;const z=h.getScrollPosition();Ce.current+=1;const D=h.getContentSize()+u,A=h.getViewportSize(),O=h.scrollTo(a,{contentSize:D,viewportSize:A});return O===z&&(Ce.current=Math.max(0,Ce.current-1)),Math.abs(O-a)>.5&&(at.current=!0),O},[]),Et=r.useRef(!1);r.useEffect(()=>{if(!Et.current)if(Et.current=!0,k==null&&typeof E!="number"&&typeof g=="number"){const a=St(Math.max(g,0),C.top),u=Math.abs(a-ne.current)>.5;Ie(a,{immediate:!0}),u&&ce.current?.scrollTo(a)}else Ie(ne.current,{immediate:!0})},[k,E,g,C.top,Ie]),r.useEffect(()=>{const a=y.getTotal();if(ze!==a){et(a);return}if(at.current){at.current=!1;const u=ce.current;if(u&&Math.abs(u.getScrollPosition()-ne.current)>.5){const h=mt(ne.current);at.current=!1,Ie(h,{immediate:!0})}}},[y,ze,n,mt,Ie]),r.useEffect(()=>{if(ve.current!==null){const{index:a,align:u,offset:h}=ve.current,z=we(a,n),{cumulative:D,currentValue:A}=y.prefixSum(z,{materializeOption:{materialize:!1}});if(D!==void 0&&A!==void 0){const O=Math.max(D-A,0);let se=O;u==="bottom"?se=D-W:u==="center"&&(se=O+A/2-W/2),h&&(se-=h),se=Math.max(0,se);const ye=Math.max(0,ze+C.top+C.bottom-W),be=Math.min(St(se,C.top),ye);Math.abs(be-ne.current)>1&&(w.debug("[VirtualScroll] Drift correction",{from:ne.current,to:be,targetIndex:z}),Ce.current===0&&(Ce.current+=1),ce.current?.scrollTo(be),Ie(be,{immediate:!0}))}}Ge.current=!1},[ze,y,n,C.top,Ie,W,C.bottom]),r.useEffect(()=>{const a=p.current;if(a===C.top||(p.current=C.top,ve.current))return;const u=je(ne.current,a),h=St(u,C.top);ne.current=h,ce.current?.scrollTo(h),Ie(h,{immediate:!0})},[C.top,Ie]);const kt=r.useCallback((a,u)=>{if(n===0)return;const h=we(a,n),z=y.get(h),D=u-z,A=y.update(h,u);A!==void 0&&et(A),w.debug("[VirtualScroll] Updated item size manually",{index:h,size:u,total:A});let O=ve.current?ve.current.index:null;if(O===null){const se=ne.current,ye=tr(B).top,be=je(se,ye),{index:ue,cumulative:_e}=y.findIndexAtOrAfter(be,{materializeOption:{materialize:!1}});O=_e!==void 0&&_e===be?ue+1:ue}if(O!==-1&&h<O&&D!==0){const se=ne.current,ye=se+D;mt(ye,D),Ie(ye,{immediate:!0}),w.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)",{from:se,to:ye,causedByIndex:h,delta:D,activeVisibleStartIndex:O})}},[y,n,mt,Ie,B]),Xe=r.useCallback((a,u)=>{if(!ce.current||n===0)return;const h=we(a,n),z=we(h-o*2,n),D=we(h+o*2,n),{cumulative:A,total:O,currentValue:se}=y.prefixSum(h,{materializeOption:{materialize:!0,ranges:[{from:z,to:D}]}});if(w.debug("[VirtualScroll] Scrolling to index:",h,"ItemBottom:",A,"Total height:",O,"ItemHeight:",se,"safeIndexFrom:",z,"safeIndexTo:",D),!O)return;const ye=Math.max(A-se,0);let be=ye;u?.align==="bottom"?be=A-W:u?.align==="center"&&(be=ye+se/2-W/2),u?.offset&&(be-=u.offset),be=Math.max(0,be);const ue=St(be,C.top),_e=ce.current?.getContentSize()??O+C.top+C.bottom,Le=Math.max(0,_e-W),Fe=Math.min(ue,Le);ve.current={index:h,align:u?.align,offset:u?.offset};const Rt=ce.current?.getScrollPosition()??-1,_t=Math.abs(Rt-Fe)>.5;qe.current=!1,Ce.current=0,_t&&(qe.current=!0,Ce.current+=1,ce.current?.scrollTo(Fe)),et(O),Ie(Fe,{immediate:!0}),w.debug("[VirtualScroll] Setting scroll position to:",Fe,{original:ue,max:Le})},[y,o,n,C.top,C.bottom,W,Ie]),Mt=r.useRef(k&&n===0?k:null);r.useEffect(()=>{const a=Mt.current;!a||n===0||(Mt.current=null,Xe(ie(Math.trunc(a.index),0,n-1),{align:"top",offset:-Math.max(0,a.offsetPx??0)}))},[n,Xe]);const c=r.useCallback(a=>{if(!ce.current||n===0)return;const u=y.getTotal(),h=ie(Math.floor(a),0,u),{index:z,cumulative:D,currentValue:A}=y.findIndexAtOrAfter(h,{materializeOption:{materialize:!1}}),se=(D??0)-(A??0)-h;Xe(z,{offset:se})},[y,n,Xe]),x=r.useCallback(()=>{if(n===0)return null;const a=je(ne.current,C.top),{index:u,cumulative:h,currentValue:z}=y.findIndexAtOrAfter(a,{materializeOption:{materialize:!1}});if(u===-1)return{index:n-1,offsetPx:0};if(h===a)return{index:ie(u+1,0,n-1),offsetPx:0};const D=(h??0)-(z??0);return{index:u,offsetPx:Math.max(0,a-D)}},[y,n,C.top]),P=r.useCallback(a=>{const u=je(ne.current,C.top),h=typeof a=="function"?a(u):a;c(h);const z=ce.current?.getScrollPosition(),D=typeof z=="number"?z:ne.current;return Ie(D),je(D,st.current)},[C.top,c,Ie]),V=r.useCallback(a=>{const u=ce.current;if(!u)return je(ne.current,st.current);const h=u.scrollTo(z=>z+a);return je(h,st.current)},[]),X=r.useCallback(a=>ce.current?.applyWheel(a)??!1,[]),Me=r.useCallback((a,u)=>{w.debug("[VirtualScroll] Scroll position changed:",a);const h=qe.current;h&&(qe.current=!1);const z=Ce.current>0;z&&(Ce.current=0);const D=Ge.current&&tt.current===n;if(h||z||D||(ve.current=null),Ie(a),N){if(h||z)return;const A=a-u;if(w.debug("[VirtualScroll] Scroll diff:",A,"New:",a,"Prev:",u),Math.abs(A)>1){const O=A>0?"down":"up";Ke(O),ae(!0),w.debug("[VirtualScroll] Showing scroll buttons. Direction:",O),Se.current&&clearTimeout(Se.current),Se.current=setTimeout(()=>{ae(!1),w.debug("[VirtualScroll] Hiding scroll buttons")},2e3)}}},[Ie,N,n]),Re=r.useMemo(()=>je(Ue,C.top),[C.top,Ue]),Pe=r.useMemo(()=>{const a=y.getTotal(),u=$r(Re,W,o,n,s,y,a);return w.debug("[VirtualScroll] Calculated rendering range:",()=>({...u,scrollPosition:Re,renderingContentSize:a,overscanCount:o,viewportSize:W})),u},[Re,W,o,n,s,y]),{renderingStartIndex:nt,renderingEndIndex:Oe,visibleStartIndex:pt,visibleEndIndex:Nt}=Pe,xt=r.useCallback((a,u)=>{if(!Q||n===0)return;const h=we(a,n);if(!(u?.ensureVisible??!0)){const Le=U.current.get(h);Le&&(te.current=null,Ne.current=h,d(Le));return}const D=y.prefixSum(h,{materializeOption:{materialize:!1}}),A=D.currentValue,O=Math.max(D.cumulative-A,0),se=O+A,ye=je(ne.current,C.top),be=ye+W;if(O<ye||se>be){Xe(h);const Le=U.current.get(h);Le?(te.current=null,Ne.current=h,d(Le)):te.current=h;return}const _e=U.current.get(h);if(_e){te.current=null,Ne.current=h,d(_e);return}te.current=h},[Q,n,y,C.top,Xe,d,W]),$t=r.useCallback((a,u)=>{if(!(!Q||a.defaultPrevented)&&!(a.altKey||a.metaKey||a.ctrlKey)&&a.target===a.currentTarget&&!a.currentTarget.isContentEditable){if(a.key==="ArrowLeft"||a.key==="ArrowRight"){const h=F.current;if(!h)return;const z=a.shiftKey?"shift-arrow":"arrow";if(!me?.includes(z)||a.shiftKey&&Xr(a.currentTarget)||!(Number.isFinite(T)&&T>0))return;a.preventDefault(),h(a.key==="ArrowLeft"?-T:T);return}if(a.key==="ArrowDown"){u<n-1&&(a.preventDefault(),xt(u+1));return}if(a.key==="ArrowUp"){u>0&&(a.preventDefault(),xt(u-1));return}if(a.key==="PageDown"){if(u<n-1){a.preventDefault();const{visibleStartIndex:h,visibleEndIndex:z}=he.current,D=Math.max(z-h+1,1),A=Math.max(D,1),O=we(Math.min(u+A,n-1),n);xt(O)}return}if(a.key==="PageUp"&&u>0){a.preventDefault();const{visibleStartIndex:h,visibleEndIndex:z}=he.current,D=Math.max(z-h+1,1),A=Math.max(D,1),O=we(u-A,n);xt(O)}}},[Q,n,xt,me,T]),Wt=r.useCallback(a=>{if(!Q)return;const u=we(a,n);te.current=null,Ne.current=u,fe?.(u)},[Q,n,fe]);r.useEffect(()=>{const a=ce.current?.getScrollPosition()??0,u=ne.current,h=je(u,C.top);w.debug("[VirtualScroll] Range change effect triggered",()=>({renderingStartIndex:nt,renderingEndIndex:Oe,visibleStartIndex:pt,visibleEndIndex:Nt,scrollPositionState:Ue,paneScrollPosition:u,logicalScrollPosition:h,contentSize:ze,scrollPaneScrollPosition:a})),Ae({renderingStartIndex:nt,renderingEndIndex:Oe,visibleStartIndex:pt,visibleEndIndex:Nt,scrollPosition:h,totalHeight:ze})},[ze,Oe,nt,C.top,Ae,Ue,Nt,pt]);const dr=r.useCallback(()=>{if(!N)return null;const a=De&&re!==null,u=re==="up";return H.jsx("div",{className:"aqvs-scroll-to-edge-overlay","data-visible":a,inert:!a,children:u?H.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top",children:H.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",tabIndex:a?0:-1,onClick:h=>{h.stopPropagation(),qe.current=!0,Xe(0),ae(!1)},children:"Top"})}):H.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom",children:H.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",tabIndex:a?0:-1,onClick:h=>{h.stopPropagation(),qe.current=!0,Xe(n-1),ae(!1)},children:"Bottom"})})})},[N,De,re,Xe,n]),At=r.useRef(0),{visibleItems:Lt,renderAnchor:Ot}=r.useMemo(()=>{if(n===0)return{visibleItems:H.jsx("div",{className:"aqvs-no-items-container",children:H.jsx("div",{className:"aqvs-no-items-text",children:"No items"})}),renderAnchor:0};const a=we(nt,n),u=we(Oe,n),{cumulative:h,currentValue:z}=y.prefixSum(a,{materializeOption:{materialize:!1}}),D=h-z;Number.isFinite(D)&&Math.abs(D-At.current)>Hr&&(At.current=D);const A=At.current,O=[],se=[];let ye=0,be=D;for(let ue=a;ue<=u;ue++){if(se.length>=rr){w.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.",{cap:rr,safeRenderingStartIndex:a,safeRenderingEndIndex:u});break}const _e=s(ue),Le=y.get(ue),Fe=_e-Le;Fe!==0&&O.push({index:ue,value:_e});const Rt=be+ye,_t=t?t(ue):ue;se.push(H.jsx(Wr,{index:ue,top:Rt-A,height:_e,item:e(ue),clipItemHeight:Ee,enableKeyboardNavigation:Q,onKeyDown:$t,onFocus:Wt,registerItemRef:rt,children:S},_t)),ye+=Fe,be+=Le}return O.length>0&&Promise.resolve().then(()=>{if(Ze.current)return;let ue=0;for(const Fe of O)if(Fe.index<pt){const Rt=y.get(Fe.index);ue+=Fe.value-Rt}const _e=y.updates(O);if(Ze.current||typeof _e!="number")return;et(_e),w.debug("[VirtualScroll] Updated heights for items",O,"New total height:",_e);const Le=ce.current?.getScrollPosition()??ne.current;if(ue!==0){const Fe=Le+ue;mt(Fe,ue),Ie(Fe,{immediate:!0}),w.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)",{from:Le,to:Fe,shiftAmount:ue})}else Le!==ne.current&&Ie(Le)}),{visibleItems:se,renderAnchor:A}},[S,Ee,ze,Q,n,y,e,t,s,Wt,$t,mt,rt,Oe,nt,Ie,pt]),mr=r.useCallback(a=>{const u=(K??0)>0,h=Math.abs(a-Ue),z=u&&h>.5?Ue:a,D=je(z,C.top);if(w.debug("[VirtualScroll] Rendering visible items",()=>({currentScrollPosition:a,effectiveScrollPosition:D,renderingStartIndex:nt,renderingEndIndex:Oe,itemCount:n,viewportSize:W,callbackThrottleMs:K,diff:h,rawEffectiveScrollPosition:z})),n===0)return Lt;const A=C.top+Ot-z,O=C.bottom>0?H.jsx("div",{className:"aqvs-bottom-inset",style:{top:y.getTotal()-Ot,height:C.bottom}},"virtualscroll-bottom-inset"):null;return w.debug("[VirtualScroll] Rendering items",()=>({containerTop:A,logicalScrollPosition:Re,resolvedInsets:C,effectiveScrollPosition:D})),H.jsxs("div",{className:"aqvs-items-wrapper",style:{top:0,transform:`translateY(${A}px)`,willChange:"transform"},children:[Lt,O]})},[K,n,y,Re,Ot,Oe,nt,C,Ue,W,Lt]),Ut=r.useMemo(()=>({renderingStartIndex:Pe.renderingStartIndex,renderingEndIndex:Pe.renderingEndIndex,visibleStartIndex:Pe.visibleStartIndex,visibleEndIndex:Pe.visibleEndIndex,scrollPosition:Re,totalHeight:y.getTotal()}),[Pe,Re,y,ze]);r.useEffect(()=>{he.current=Ut},[Ut]),r.useImperativeHandle(M,()=>({getScrollPosition:()=>{const a=ce.current?.getScrollPosition();return typeof a=="number"?je(a,st.current):-1},getContentSize:()=>ce.current?.getContentSize()??-1,getViewportSize:()=>ce.current?.getViewportSize()??-1,scrollTo:P,scrollBy:V,applyWheel:X,scrollToIndex:Xe,getFenwickTreeTotalHeight:()=>y.getTotal(),getFenwickSize:()=>y.getSize(),focusItemAtIndex:xt,getRange:()=>he.current,getScrollAnchor:x,updateItemSize:kt}),[P,V,X,Xe,y,xt,x,kt]);const pr=y.getTotal()+C.top+C.bottom;return H.jsx(cr,{ref:ce,contentSize:pr,viewportSize:i,onViewportSizeChange:Ve,className:l,testId:f,onScroll:Me,background:v,tapScrollCircleOptions:$,inertiaOptions:Be,overscrollBehavior:He,itemCount:n,scrollBarWidth:G,enableThumbDrag:J,enableTrackClick:j,enableArrowButtons:xe,enablePointerDrag:pe,pointerDragInputs:Ye,renderThumbOverlay:I,wheelSpeedMultiplier:q,onWheelHorizontal:le,contentInsets:C,contentProps:L,visibleStartIndex:pt,visibleEndIndex:Nt,renderOverlay:dr,initialScrollPosition:Z.position,children:mr})},Kr=r.forwardRef(Ur);exports.FenwickMapTree=ct;exports.ScrollBar=ar;exports.ScrollPane=cr;exports.TAP_SCROLL_SPEED_DEFAULTS=jt;exports.VirtualScroll=Kr;exports.computeAutoTapScrollMaxSpeedMultiplier=or;exports.computeTapScrollSpeed=ir;exports.minmax=ie;exports.tapScrollCircleSampleVisual=Ar;exports.useFenwickMapTree=ur;exports.useHeightCache=Yr;exports.useLruCache=fr;exports.useWheelBridge=Br;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const H=require("react/jsx-runtime"),r=require("react"),wt=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 Kt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Ft=6,hr=8,gr=({dragState:n,normalizedDistance:e})=>{const t=1+e*.18,s=.16+e*.24,i=.38+e*.28,o=n.active?"80ms ease-out":"220ms ease";return H.jsxs(H.Fragment,{children:[H.jsx("div",{className:"aqvs-tap-scroll-circle-visual-outer",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.62), rgba(72,72,72,0.48))",boxShadow:`0 0 0 1px rgba(255,255,255,0.28), 0 10px 22px rgba(0,0,0,${s})`,transform:`scale(${t})`,transition:`${o}, ${n.active?"80ms":"260ms"} box-shadow ease`}}),H.jsx("div",{className:"aqvs-tap-scroll-circle-inner",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.72), rgba(28,28,28,0.58))",boxShadow:"inset 0 4px 10px rgba(0,0,0,0.24), inset 0 0 2px rgba(255,255,255,0.55)",opacity:i,transition:n.active?"120ms opacity ease-out":"220ms opacity ease"}})]})},sr=r.memo(r.forwardRef(({onDragChange:n,className:e,maxVisualDistance:t=160,size:s=40,style:i,opacity:o=1,renderVisual:l},f)=>{const[m,b]=r.useState(Kt),S=r.useRef(null),I=r.useRef(null),E=r.useRef({x:0,y:0}),g=r.useRef(null),k=r.useRef(0),K=r.useCallback(v=>{b(v),n(v)},[n]),B=r.useCallback((v,$,pe=!1)=>{const{x:Ye,y:Q}=E.current,q=v-Ye,Be=$-Q,He=Math.abs(Be),Ee=He<Ft?0:Be<0?-1:1,ke=k.current;let $e=Ee;const Ue=Ft+hr;Ee===0?ke!==0&&He<Ue?$e=ke:($e=0,pe||(k.current=0)):Ee!==ke&&ke!==0&&He<Ue?$e=ke:k.current=Ee,K({active:pe||He>=Ft,offsetX:q,offsetY:Be,distance:He,direction:$e,pointerId:S.current})},[K]),fe=r.useCallback(v=>{if(v===null)return;const $=g.current;$?.hasPointerCapture(v)&&$.releasePointerCapture(v)},[]),de=r.useCallback((v=!1)=>{v&&fe(S.current),S.current=null,I.current=null,k.current=0,K(Kt)},[K,fe]),oe=r.useCallback(v=>{if(S.current!==null&&S.current!==v.pointerId){I.current={pointerId:v.pointerId,clientX:v.clientX,clientY:v.clientY},v.preventDefault(),v.stopPropagation();return}v.preventDefault(),v.stopPropagation();const $=g.current??v.currentTarget,{left:pe,top:Ye,width:Q,height:q}=$.getBoundingClientRect();E.current={x:pe+Q/2,y:Ye+q/2},S.current=v.pointerId;try{$.setPointerCapture(v.pointerId)}catch{}B(v.clientX,v.clientY,!0)},[B]),le=r.useCallback(v=>{if(S.current!==v.pointerId){I.current!==null&&I.current.pointerId===v.pointerId&&(I.current={pointerId:v.pointerId,clientX:v.clientX,clientY:v.clientY});return}v.preventDefault(),B(v.clientX,v.clientY)},[B]),me=r.useCallback(v=>{if(S.current!==v.pointerId){I.current!==null&&I.current.pointerId===v.pointerId&&(I.current=null);return}v.preventDefault(),v.stopPropagation();const $=I.current;if(I.current=null,$!==null){fe(v.pointerId);const pe=g.current;let Ye=!0;if(pe!==null&&typeof pe.setPointerCapture=="function")try{pe.setPointerCapture($.pointerId)}catch(Q){(typeof Q=="object"&&Q!==null&&"name"in Q?Q.name:void 0)==="NotFoundError"&&(Ye=!1)}if(Ye){S.current=$.pointerId,B($.clientX,$.clientY,!0);return}}de(!0)},[de,fe,B]),T=r.useCallback(v=>{v.target===v.currentTarget&&S.current===v.pointerId&&de(!1)},[de]);r.useImperativeHandle(f,()=>({reset:()=>{de(!0)},getElement:()=>g.current}),[de]);const L=Math.min(Math.max(o,0),1),M=s/64,G=Math.min(m.distance,t)/t,J=m.direction*G*10*M,j=l??gr,xe={dragState:m,normalizedDistance:G,sizeScale:M,size:s,opacity:L},N={...i,width:s,height:s,transform:`translateY(${J}px)`};return N.opacity=L,H.jsx("div",{ref:g,"data-testid":"virtual-scroll-tap-circle",className:wt.twMerge("aqvs-tap-scroll-circle",e),style:N,tabIndex:-1,onPointerDown:oe,onPointerMove:le,onPointerUp:me,onPointerCancel:me,onLostPointerCapture:T,role:"presentation",children:j(xe)})}));sr.displayName="TapScrollCircle";const ie=(n,e,t)=>Math.max(e,Math.min(t,n)),Xt="virtualscroll:tap-scroll-cancel",Gt=20,br=250,xr=60,Sr=20,vr=20,jt={maxDistance:240,minSpeedMultiplier:.2},Ir=jt.maxDistance,Zt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Yt=2.2,wr=8,Tr=120,Mr=1/10,ot={enabled:!0,size:40,offsetX:-80,offsetY:0,className:void 0,maxVisualDistance:Ir,minSpeedMultiplier:jt.minSpeedMultiplier,opacity:.9,renderVisual:void 0,maxSpeedCurve:void 0},Rr=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"},Pr=(n,e)=>{const t=n?.maxSpeedMultiplier,s=typeof t=="number"?t:or(e);return{enabled:n?.enabled??ot.enabled,size:n?.size??ot.size,offsetX:n?.offsetX??ot.offsetX,offsetY:n?.offsetY??ot.offsetY,className:n?.className??ot.className,maxVisualDistance:n?.maxVisualDistance??ot.maxVisualDistance,maxSpeedMultiplier:s,minSpeedMultiplier:Math.max(n?.minSpeedMultiplier??ot.minSpeedMultiplier,0),opacity:ie(n?.opacity??ot.opacity,0,1),renderVisual:n?.renderVisual??ot.renderVisual,maxSpeedCurve:n?.maxSpeedCurve??ot.maxSpeedCurve}},yr=({isDragging:n,isThumbHovered:e,enableThumbDrag:t})=>r.useMemo(()=>t?n?"dragging":e?"hover":"idle":"disabled",[t,n,e]),Cr=({canUseArrowButtons:n,enableArrowButtons:e,resetTapScroll:t,scrollByStep:s})=>{const i=r.useRef(null),o=r.useRef(null),l=r.useRef(null),f=r.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null),o.current!==null&&(window.clearTimeout(o.current),o.current=null),l.current!==null&&(window.removeEventListener("pointerup",l.current),window.removeEventListener("pointercancel",l.current),window.removeEventListener("blur",l.current),l.current=null)},[]),m=r.useCallback(()=>{f()},[f]),b=r.useCallback(I=>E=>{if(!n)return;E.cancelable&&E.preventDefault(),E.stopPropagation(),t(),f(),s(I),o.current=window.setTimeout(()=>{i.current=window.setInterval(()=>{s(I)},xr)},br);const g=()=>f();l.current=g,window.addEventListener("pointerup",g),window.addEventListener("pointercancel",g),window.addEventListener("blur",g)},[n,f,t,s]),S=r.useCallback(I=>E=>{e&&(E.key==="Enter"||E.key===" "||E.key==="Spacebar")&&(E.preventDefault(),s(I))},[e,s]);return r.useEffect(()=>{n||f()},[n,f]),r.useEffect(()=>()=>{f()},[f]),{handleArrowPointerDown:b,handleArrowPointerUp:m,handleArrowKeyDown:S}},Er=700,ht=(n,e)=>typeof n=="number"&&Number.isFinite(n)?n:e,ir=({distance:n,maxDistance:e,viewportSize:t,minSpeedMultiplier:s,maxSpeedMultiplier:i,hasCustomMaxSpeedMultiplier:o,curve:l})=>{const f=Math.max(ht(n,0),0),m=ht(e,0),b=m>0?Math.min(f,m)/m:1,S=Math.max(ht(t,0),0),I=Math.max(ht(s,0),0),E=Math.max(ht(i,0),0),g=Math.max(S*I,40),k=o?g:1200,K=Math.max(S*E,k),B=l?Math.max(ht(l.exponentialScale,E),0):0,fe=l?Math.min(K,Math.max(S*B,g)):K,de=Math.max(fe,g);let oe=b**1.1;if(l){const me=Math.min(Math.max(ht(l.exponentialSteepness,0),0),Er);if(me===0)oe=b;else{const T=Math.expm1(me)||1;oe=Math.min(Math.max(Math.expm1(me*b)/T,0),1)}}const le=Math.min(Math.max(ht(l?.easedOffset,0),0),1);return g+(de-g)*(le+(1-le)*oe)},or=n=>{if(!n||n<=0)return Yt;const e=Math.max(1,n),t=Math.log10(e),s=Yt+t*wr;return ie(s,Yt,Tr)},ar=({contentSize:n,viewportSize:e,scrollPosition:t,onScroll:s,enableThumbDrag:i=!0,enableTrackClick:o=!0,enableArrowButtons:l=!0,horizontal:f=!1,scrollBarWidth:m=12,className:b,ariaControls:S,tapScrollCircleOptions:I,itemCount:E,renderThumbOverlay:g,visibleStartIndex:k,visibleEndIndex:K})=>{const[B,fe]=r.useState(!1),[de,oe]=r.useState(!1),[le,me]=r.useState(!1),T=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}),G=r.useRef(t),J=r.useRef(s),j=r.useRef(Zt),xe=r.useRef(null),N=r.useRef(null),v=r.useRef(null),$=r.useRef(0),pe=r.useRef(0),Ye=r.useMemo(()=>Pr(I,E),[E,I]),Q=r.useMemo(()=>Rr(f),[f]),{enabled:q,size:Be,offsetX:He,offsetY:Ee,className:ke,maxVisualDistance:$e,maxSpeedMultiplier:Ue,minSpeedMultiplier:U,opacity:Ve,renderVisual:ce,maxSpeedCurve:he}=Ye,Ie=r.useRef({viewportSize:e,maxScrollPosition:Math.max(n-e,0),scrollBarVisible:n>e,effectiveTapMaxDistance:Math.max($e,1),tapCircleMaxSpeedMultiplier:Ue,tapCircleMinSpeedMultiplier:U,tapCircleMaxSpeedCurve:he,tapScrollCircleOptions:I,effectiveTrackLength:0,onScroll:s,scrollPosition:t}),{mainSizeKey:Ze,crossSizeKey:ut,positionKey:C,selectDelta:Qe,getPointerCoordinate:gt,arrowLabels:y,arrowIcons:Z,directionClass:We,orientation:ft}=Q,ze=Math.max($e,1),et=e/n,ne=Math.max(e-m*2,0),p=et*ne,_=Math.min(Math.max(Gt,p||0),ne||Gt),Y=n-e,F=Math.max(ne-_,0),ee=Y<=0||F<=0?0:ie(t/Y*F,0,F),Te=ee+_/2,W=n>e||B,te=W&&l;r.useLayoutEffect(()=>{Ie.current={viewportSize:e,maxScrollPosition:Y,scrollBarVisible:W,effectiveTapMaxDistance:ze,tapCircleMaxSpeedMultiplier:Ue,tapCircleMinSpeedMultiplier:U,tapCircleMaxSpeedCurve:he,tapScrollCircleOptions:I,effectiveTrackLength:F,onScroll:s,scrollPosition:t}}),r.useLayoutEffect(()=>{G.current=t},[t]),r.useLayoutEffect(()=>{J.current=s},[s]),r.useEffect(()=>{i||oe(!1)},[i]);const Ne=yr({isDragging:B,isThumbHovered:de,enableThumbDrag:i}),re=r.useCallback((c,x)=>{const P=Ie.current,V=x??G.current;if(J.current){const Pe=J.current(c,V);if(typeof Pe=="number"&&Number.isFinite(Pe))return G.current=Pe,Pe}const X=typeof c=="function"?c(V):c,Me=Math.max(P.maxScrollPosition,0),Re=P.scrollBarVisible?ie(X,0,Me):0;return G.current=Re,Re},[]),Ke=r.useCallback(c=>{const x=Ie.current,P=G.current;if(!x.scrollBarVisible||x.maxScrollPosition<=0){const Oe=re(0,P),pt=Oe-P;return{nextPosition:Oe,actualDelta:pt,reachedBoundary:!0}}if(c===0)return{nextPosition:P,actualDelta:0,reachedBoundary:!1};const X=re(Oe=>ie(Oe+c,0,x.maxScrollPosition),P),Me=X-P,Re=c<0&&P+c<=0,Pe=c>0&&P+c>=x.maxScrollPosition,nt=c<0&&(X<=0||Re&&Me===0)||c>0&&(X>=x.maxScrollPosition||Pe&&Me===0);return{nextPosition:X,actualDelta:Me,reachedBoundary:nt}},[re]),De=r.useCallback((c,x)=>{c.current+=x;const P=Math.max(Ie.current.maxScrollPosition,0);P>0&&(c.current=ie(c.current,-P,P));const V=Ke(c.current);return c.current-=V.actualDelta,V.reachedBoundary&&(c.current=0),V},[Ke]),ae=r.useCallback(()=>{N.current!==null&&(window.cancelAnimationFrame(N.current),N.current=null),v.current=null,$.current=0,pe.current=0},[]),Se=r.useCallback(()=>{j.current={...Zt},me(!1),xe.current?.reset(),ae()},[ae]),qe=r.useCallback(c=>{const x=j.current,P=Ie.current;if(!x.active||x.direction===0){ae();return}if(!P.scrollBarVisible||P.maxScrollPosition<=0){ae();return}const V=v.current??c,X=Math.max((c-V)/1e3,0),Me=Math.min(X,Mr);if(v.current=c,Me<=0){N.current=window.requestAnimationFrame(qe);return}const Re=ir({distance:x.distance,maxDistance:P.effectiveTapMaxDistance,viewportSize:P.viewportSize,minSpeedMultiplier:P.tapCircleMinSpeedMultiplier,maxSpeedMultiplier:P.tapCircleMaxSpeedMultiplier,hasCustomMaxSpeedMultiplier:typeof P.tapScrollCircleOptions?.maxSpeedMultiplier=="number",curve:P.tapCircleMaxSpeedCurve});pe.current!==x.direction&&(pe.current=x.direction,$.current=0);const{reachedBoundary:Pe}=De($,x.direction*Re*Me);if(Pe){ae();return}N.current=window.requestAnimationFrame(qe)},[De,ae]),Ce=r.useCallback(()=>{N.current===null&&(v.current=null,$.current=0,N.current=window.requestAnimationFrame(qe))},[qe]);r.useEffect(()=>{const c=j.current;!c.active||c.direction===0||Ce()},[n,e,Ce]),r.useEffect(()=>()=>{ae()},[ae]);const at=r.useCallback(c=>{j.current=c,me(c.active),c.active&&c.direction!==0?Ce():ae()},[Ce,ae]);r.useEffect(()=>{q||Se()},[Se,q]),r.useEffect(()=>{const c=x=>{const V=x.detail?.paneId;V&&S&&V!==S||Se()};return window.addEventListener(Xt,c),()=>{window.removeEventListener(Xt,c)}},[S,Se]),r.useEffect(()=>{if(!q)return;const c=x=>{if(!j.current.active||j.current.pointerId===x.pointerId)return;const P=x.target;if(!(P instanceof Node)){Se();return}xe.current?.getElement()?.contains(P)||Se()};return document.addEventListener("pointerdown",c,!0),()=>{document.removeEventListener("pointerdown",c,!0)}},[Se,q]);const Ge=c=>{if(!W||F<=0||Y<=0)return 0;const x=ie(c,0,F);return ie(x/F*Y,0,Y)},tt=r.useCallback(c=>{const{scrollBarVisible:x,effectiveTrackLength:P,maxScrollPosition:V}=Ie.current;if(w.debug("[ScrollBar] calculateScrollPositionFromThumb",()=>({thumbPos:c,trackLen:P,maxScroll:V})),P<=0||V<=0)return null;const X=ie(c,0,P);return ie(X/P*V,0,V)},[]),d=r.useCallback(c=>{const x=c.getBoundingClientRect(),P=f?x.width:x.height,V=nt=>{const Oe=Number.parseFloat(nt);return Number.isFinite(Oe)?Oe:0},X=window.getComputedStyle(c),Me=V(f?X.width:X.height),Re=Me>0?Me+V(f?X.paddingLeft:X.paddingTop)+V(f?X.paddingRight:X.paddingBottom)+V(f?X.borderLeftWidth:X.borderTopWidth)+V(f?X.borderRightWidth:X.borderBottomWidth):0,Pe=Re>0?Re:f?c.offsetWidth:c.offsetHeight;return Pe<=0||P<=0?1:P/Pe},[f]),R=r.useCallback(c=>{const x=L.current;if(x.pointerId!==c.pointerId)return;const P=c.clientX-x.startClientX,V=c.clientY-x.startClientY,X=Qe(P,V)/(x.scale||1);w.debug("[ScrollBar] handleThumbPointerMove",()=>({delta:X,startThumbPosition:x.startThumbPosition,clientY:c.clientY,startClientY:x.startClientY,metrics:Ie.current}));const Me=tt(x.startThumbPosition+X);Me!==null&&re(Me),c.cancelable&&c.preventDefault()},[Qe,tt,re]),ge=r.useCallback(c=>{const x=L.current;if(x.pointerId!==c.pointerId)return;document.removeEventListener("pointermove",R),document.removeEventListener("pointerup",ge),document.removeEventListener("pointercancel",ge);const P=x.captureTarget;if(P?.hasPointerCapture?.(c.pointerId)&&P.releasePointerCapture(c.pointerId),L.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null},fe(!1),T.current){const V=T.current.getBoundingClientRect();c.clientX>=V.left&&c.clientX<=V.right&&c.clientY>=V.top&&c.clientY<=V.bottom||oe(!1)}else oe(!1)},[R]);r.useEffect(()=>()=>{document.removeEventListener("pointermove",R),document.removeEventListener("pointerup",ge),document.removeEventListener("pointercancel",ge)},[R,ge]);const Je=r.useRef(0),Ae=r.useRef(0),st=r.useCallback(c=>{const x=Math.max(Math.round(Ie.current.viewportSize/vr),Sr);Ae.current!==c&&(Ae.current=c,Je.current=0),De(Je,c*x)},[De]),{handleArrowPointerDown:it,handleArrowPointerUp:rt,handleArrowKeyDown:dt}=Cr({canUseArrowButtons:te,enableArrowButtons:l,resetTapScroll:Se,scrollByStep:st}),lt=c=>{if(!W)return;if(!i){c.preventDefault(),c.stopPropagation();return}if(c.pointerType==="mouse"&&c.button!==0||c.ctrlKey)return;Se();const x=c.currentTarget,P=d(x);let V=null;if(x.setPointerCapture)try{x.setPointerCapture(c.pointerId),V=x}catch{V=null}L.current={pointerId:c.pointerId,startThumbPosition:ee,startClientX:c.clientX,startClientY:c.clientY,scale:P,captureTarget:V},document.addEventListener("pointermove",R),document.addEventListener("pointerup",ge),document.addEventListener("pointercancel",ge),fe(!0),oe(!0),c.preventDefault(),c.stopPropagation()},vt=c=>{if(!W)return;if(!o){c.preventDefault(),c.stopPropagation();return}if(c.pointerType==="mouse"&&c.button!==0||c.ctrlKey)return;const x=c.currentTarget,P=x.getBoundingClientRect(),V=gt(c),X=d(x),Me=(V-(f?P.left:P.top))/X;Se();const Re=Me-_/2,Pe=Ge(Re);if(re(Pe),x.setPointerCapture)try{x.setPointerCapture(c.pointerId)}catch{}M.current={pointerId:c.pointerId,startThumbPosition:Re,startClientX:c.clientX,startClientY:c.clientY,scale:X},c.preventDefault(),c.stopPropagation()},bt=()=>{M.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}},Tt=c=>{const x=M.current;if(x.pointerId!==c.pointerId)return;if(c.pointerType==="mouse"&&c.buttons===0){bt();return}const P=c.clientX-x.startClientX,V=c.clientY-x.startClientY,X=Qe(P,V)/(x.scale||1),Me=Ge(x.startThumbPosition+X);re(Me),c.cancelable&&c.preventDefault()},Ct=c=>{if(M.current.pointerId!==c.pointerId)return;const x=c.currentTarget;x.hasPointerCapture?.(c.pointerId)&&x.releasePointerCapture(c.pointerId),bt(),c.preventDefault(),c.stopPropagation()},ve=c=>{if(M.current.pointerId!==c.pointerId)return;const x=c.currentTarget;x.hasPointerCapture?.(c.pointerId)&&x.releasePointerCapture(c.pointerId),bt()},mt=c=>{c.target===c.currentTarget&&M.current.pointerId===c.pointerId&&bt()},Et=r.useMemo(()=>ie((le?1:.8)*Ve,0,1),[le,Ve]),kt=r.useMemo(()=>{const x=`calc(50% - ${Be/2}px + ${Ee}px)`;return{left:He,top:x}},[He,Ee,Be]),Xe=(c,x,P,V)=>H.jsx("button",{type:"button",tabIndex:0,className:"aqvs-scrollbar-arrow-button",style:{[Ze]:m,[ut]:m},"aria-label":x,onPointerDown:it(c),onPointerUp:rt,onPointerLeave:rt,onPointerCancel:rt,onKeyDown:dt(c),"aria-disabled":!l,disabled:!te,children:H.jsx("span",{"aria-hidden":"true",children:P})},V),Mt=g&&W?{orientation:ft,scrollPosition:t,maxScrollPosition:Y,contentSize:n,viewportSize:e,thumbSize:_,thumbPosition:ee,thumbCenter:Te,trackSize:ne,isDragging:B,isTapScrollActive:le,visibleStartIndex:k,visibleEndIndex:K}:null;return H.jsxs("div",{className:wt.twMerge("aqvs-scrollbar",We,b),style:{[Ze]:e,[ut]:m},"data-visible":W?"true":"false",role:"scrollbar",tabIndex:-1,"aria-controls":S,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":Y,"aria-orientation":f?"horizontal":"vertical",children:[!f&&W&&q&&H.jsx(sr,{ref:xe,className:wt.twMerge("aqvs-scrollbar-tap-circle-wrapper",ke),size:Be,maxVisualDistance:ze,style:kt,opacity:Et,renderVisual:ce,onDragChange:at},"tap-circle"),Xe(-1,y[0],Z[0],"arrow-start"),H.jsxs("div",{className:"aqvs-scrollbar-track",style:{borderRadius:m/2},onPointerDown:vt,onPointerMove:Tt,onPointerUp:Ct,onPointerCancel:ve,onLostPointerCapture:mt,"aria-disabled":!o,children:[Mt&&H.jsx("div",{className:"aqvs-scrollbar-overlay","aria-hidden":!0,children:g?.(Mt)},"overlay"),H.jsx("div",{className:"aqvs-scrollbar-thumb-wrapper",style:{[Ze]:_,[C]:ee,...f?{top:0,bottom:0}:{left:0,right:0}},"data-visible":W||B?"true":"false",onPointerDown:lt,role:"slider","aria-orientation":f?"horizontal":"vertical","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":Y,"aria-disabled":!i,tabIndex:-1,children:H.jsx("div",{ref:T,className:wt.twMerge("aqvs-scrollbar-thumb",f?"aqvs-scrollbar-thumb-horizontal":"aqvs-scrollbar-thumb-vertical"),"data-testid":"aqvs-scrollbar-thumb","data-thumb-state":Ne,style:{borderRadius:m-1,cursor:i?"pointer":"default"},onMouseEnter:()=>{i&&oe(!0)},onMouseLeave:()=>{i&&oe(!1)}},"thumb")},"thumb-wrapper")]},"track"),Xe(1,y[1],Z[1],"arrow-end")]})},kr=16,Jt=(n,e,t)=>e===1?n*kr:e===2?n*t:n,Nr=(n,e)=>{const t=n.shiftKey&&n.deltaX===0,s=t?n.deltaY:n.deltaX,i=t?0:n.deltaY,o=s!==0&&Math.abs(s)>=Math.abs(i);return{isZoomGesture:n.ctrlKey,isHorizontalDominant:o,horizontalDelta:Jt(s,n.deltaMode,e),verticalDelta:Jt(i,n.deltaMode,e)}},lr=new WeakSet,Qt=n=>{lr.add(n)},Vr=n=>lr.has(n),zr=["mouse","pen","touch"],Bt=(n,e)=>!(n==="mouse"||n==="pen"||n==="touch")||e.includes(n),Dr=n=>n==="mouse"||n==="pen",Pt={maxVelocity:6,minVelocity:.02,deceleration:.0025,velocitySampleWindow:90,startVelocityThreshold:.04},Vt=(n,e,t)=>{for(const[s,i,o]of e)t==="add"?n.addEventListener(s,i,o):n.removeEventListener(s,i,o)},cr=r.forwardRef(({children:n,contentSize:e,viewportSize:t,onViewportSizeChange:s,scrollBarWidth:i=12,enableThumbDrag:o=!0,enableTrackClick:l=!0,enableArrowButtons:f=!0,enablePointerDrag:m=!0,pointerDragInputs:b=zr,onScroll:S,className:I,testId:E,style:g,background:k,tapScrollCircleOptions:K,inertiaOptions:B,itemCount:fe,renderThumbOverlay:de,wheelSpeedMultiplier:oe=1,overscrollBehavior:le="auto",onWheelHorizontal:me,contentInsets:T,visibleStartIndex:L,visibleEndIndex:M,renderOverlay:G,initialScrollPosition:J=0,contentProps:j},xe)=>{const N=r.useRef(Number.isFinite(J)?Math.max(0,J):0),v=r.useRef(null),$=r.useRef(null),pe=t===void 0,[Ye,Q]=r.useState(0),q=t??Ye,Be=r.useRef(null);r.useLayoutEffect(()=>{if(!pe)return;const p=$.current;if(!p)return;const _=()=>{const F=p.offsetHeight;if(F>0){Q(ee=>ee===F?ee:F);return}p.offsetParent!==null&&e>0&&Be.current!=="zero"&&(Be.current="zero",w.warn("[ScrollPane] The self-measured viewport is 0px. Give the scroll pane's host element a definite height (e.g. h-full, flex-1 + min-h-0, an explicit px height), or pass viewportSize explicitly."))};if(_(),typeof ResizeObserver!="function")return;const Y=new ResizeObserver(_);return Y.observe(p),()=>{Y.disconnect()}},[e,pe]),r.useLayoutEffect(()=>{pe&&s?.(Ye)},[pe,Ye,s]),r.useLayoutEffect(()=>{if(pe)return;const p=v.current;if(!p)return;const _=()=>{const F=p.clientHeight;if(F<=0||Math.abs(F-q)<=1)return;const ee=`${q}/${F}`;Be.current!==ee&&(Be.current=ee,w.warn(`[ScrollPane] viewportSize=${q} but the host band is ${F}px. The clip window, max scroll position, thumb mapping, rendered row count and scrollability all derive from viewportSize, so they are now wrong. Omit viewportSize to let the pane measure itself.`))};if(_(),typeof ResizeObserver!="function")return;const Y=new ResizeObserver(_);return Y.observe(p),()=>{Y.disconnect()}},[pe,q]);const He=r.useRef(me);r.useEffect(()=>{He.current=me},[me]);const Ee=r.useRef({frame:null,velocity:0,lastTimestamp:null,generation:0}),ke=r.useMemo(()=>({maxVelocity:B?.maxVelocity??Pt.maxVelocity,minVelocity:B?.minVelocity??Pt.minVelocity,deceleration:B?.deceleration??Pt.deceleration,velocitySampleWindow:B?.velocitySampleWindow??Pt.velocitySampleWindow,startVelocityThreshold:B?.startVelocityThreshold??Pt.startVelocityThreshold}),[B]),$e=r.useMemo(()=>({top:Math.max(0,T?.top??0),bottom:Math.max(0,T?.bottom??0)}),[T]);w.debug("[ScrollPane] ScrollPane rendered",()=>({contentSize:e,viewportSize:q,scrollBarWidth:i,className:I,style:g,tapScrollCircleOptions:K,inertiaOptions:B,enablePointerDrag:m,contentInsets:$e}));const Ue=r.useRef({contentSize:e,viewportSize:q}),U=r.useMemo(()=>e>q,[e,q]),Ve=r.useCallback((p,_)=>{let Y=_??Ue.current;_&&!(Number.isFinite(_.contentSize)&&Number.isFinite(_.viewportSize))&&(w.warn("[ScrollPane] scrollTo received non-finite dimsOverride; falling back to the committed dims",{dimsOverride:_}),Y=Ue.current);const{contentSize:F,viewportSize:ee}=Y,Te=F>ee,W=N.current;if(w.debug("[ScrollPane] scrollTo called",()=>({newPosition:p,contentSize:F,viewportSize:ee,currentIsScrollable:Te,prevPosition:W})),!Te)return N.current!==0&&(N.current=0,S?.(0,W)),N.current;const te=typeof p=="function"?p(N.current):p;if(!Number.isFinite(te))return w.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position",{nextPosition:te}),N.current;const Ne=Math.max(F-ee,0),re=ie(te,0,Ne);return N.current!==re&&(N.current=re,S?.(re,W)),N.current},[S]),ce=r.useRef(Ve);r.useEffect(()=>{ce.current=Ve},[Ve]);const he=r.useCallback(()=>{const p=Ee.current;p.generation+=1,p.frame!==null&&cancelAnimationFrame(p.frame),p.frame=null,p.velocity=0,p.lastTimestamp=null},[]),Ie=r.useRef(he);r.useEffect(()=>{Ie.current=he},[he]),r.useEffect(()=>()=>{Ie.current()},[]);const Ze=r.useCallback(p=>{if(!U)return;const{maxVelocity:_,minVelocity:Y,deceleration:F,startVelocityThreshold:ee}=ke,Te=ie(p,-_,_);if(Math.abs(Te)<ee)return;he(),Ee.current.velocity=Te,Ee.current.lastTimestamp=null;const W=Ee.current.generation,te=Ne=>{const re=Ee.current;if(re.generation!==W)return;if(re.lastTimestamp===null){re.lastTimestamp=Ne,re.frame=requestAnimationFrame(te);return}const Ke=Ne-re.lastTimestamp;if(re.lastTimestamp=Ne,Ke<=0){re.frame=requestAnimationFrame(te);return}const De=re.velocity;let ae=De;const Se=F*Ke;De>0?ae=Math.max(0,De-Se):De<0&&(ae=Math.min(0,De+Se));const Ce=(De+ae)/2*Ke,at=N.current;if(Ce!==0&&ce.current(Je=>Je+Ce),Ee.current.generation!==W)return;const Ge=N.current,{contentSize:tt,viewportSize:d}=Ue.current,R=Math.max(tt-d,0);re.velocity=ae;const ge=Ge===at||Ge<=0&&ae<=0||Ge>=R&&ae>=0;if(Math.abs(ae)<Y||ge){he();return}re.frame=requestAnimationFrame(te)};Ee.current.frame=requestAnimationFrame(te)},[U,ke,he]),ut=r.useRef(Ze);r.useEffect(()=>{ut.current=Ze},[Ze]),r.useLayoutEffect(()=>{Ue.current={contentSize:e,viewportSize:q}},[e,q]),r.useLayoutEffect(()=>{const p=$.current;if(!p)return;const _=()=>{p.scrollTop!==0&&(w.debug("[ScrollPane] Native scroll detected, resetting to 0",()=>({scrollTop:p.scrollTop})),p.scrollTop=0),p.scrollLeft!==0&&(p.scrollLeft=0)};return p.addEventListener("scroll",_),()=>p.removeEventListener("scroll",_)},[]),r.useLayoutEffect(()=>{if(U){w.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change",()=>({contentSize:e,viewportSize:q,scrollPosition:N.current}));const p=ie(e-q,0,e);N.current>p&&Ve(p)}else Ve(0)},[U,Ve,e,q]);const C=r.useRef({isScrollable:U,viewportSize:q,wheelSpeedMultiplier:oe,overscrollBehavior:le});r.useLayoutEffect(()=>{C.current={isScrollable:U,viewportSize:q,wheelSpeedMultiplier:oe,overscrollBehavior:le}},[U,q,oe,le]);const Qe=r.useCallback(p=>{if(Vr(p))return!1;const{isScrollable:_,viewportSize:Y,wheelSpeedMultiplier:F,overscrollBehavior:ee}=C.current,Te=Nr(p,Y);if(Te.isZoomGesture)return!1;if(Te.isHorizontalDominant)return He.current?(Qt(p),p.preventDefault(),he(),He.current(Te.horizontalDelta),!0):!1;if(!_||Te.verticalDelta===0)return!1;let W=Te.verticalDelta;if(F!==1&&(W*=F),ee!=="contain"){const te=N.current,Ne=Math.max(Ue.current.contentSize-Y,0);if(W>0&&te>=Ne||W<0&&te<=0)return!1}return Qt(p),p.preventDefault(),he(),w.debug("[ScrollPane] wheel event",()=>({deltaY:W,scrollPosition:N.current,wheelSpeedMultiplier:F,deltaMode:p.deltaMode,scrollTop:$.current?.scrollTop})),Ve(te=>te+W),!0},[Ve,he]);r.useEffect(()=>{const p=F=>{Qe(F)},_=()=>{he()},Y=v.current;return Y&&(Y.addEventListener("wheel",p,{passive:!1}),Y.addEventListener("pointerdown",_,{capture:!0,passive:!0})),()=>{Y&&(Y.removeEventListener("wheel",p),Y.removeEventListener("pointerdown",_,{capture:!0}))}},[Qe,he]),r.useImperativeHandle(xe,()=>({scrollTo:(p,_)=>(he(),Ve(p,_)),getScrollPosition:()=>N.current,getContentSize:()=>e,getViewportSize:()=>q,applyWheel:Qe}),[Ve,e,q,he,Qe]);const gt=r.useId(),y=j?.id??gt,Z=r.useRef({pointerType:"",pointerId:null,startClientY:0,startScroll:0,isDragging:!1,shouldCancelNextClick:!1,clickResetTimer:null,velocitySamples:[]}),We=r.useRef(m),ft=r.useRef(b);r.useEffect(()=>{We.current=m},[m]),r.useEffect(()=>{ft.current=b},[b]);const ze=r.useRef(U);r.useEffect(()=>{ze.current=U},[U]);const et=r.useRef(ke);r.useEffect(()=>{et.current=ke},[ke]),r.useEffect(()=>{const p=Z.current;if(m&&U&&(p.pointerId===null||Bt(p.pointerType,b))||p.pointerId===null)return;const _=$.current;p.clickResetTimer!==null&&(window.clearTimeout(p.clickResetTimer),p.clickResetTimer=null);const Y=p.isDragging&&p.shouldCancelNextClick,F=p.pointerId;p.pointerId=null,p.pointerType="",p.startClientY=0,p.startScroll=0,p.isDragging=!1,p.shouldCancelNextClick=Y,p.velocitySamples=[],_?.hasPointerCapture(F)&&_.releasePointerCapture(F)},[m,b,U]),r.useEffect(()=>{const p=$.current;if(!p)return;const _=6,Y=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),F=()=>{const d=Z.current;d.pointerId=null,d.pointerType="",d.startClientY=0,d.startScroll=0,d.isDragging=!1,d.velocitySamples=[]},ee=()=>{const d=Z.current;d.clickResetTimer!==null&&(window.clearTimeout(d.clickResetTimer),d.clickResetTimer=null)},Te=d=>{const R=Z.current,ge=Y();R.velocitySamples.push({clientY:d,time:ge});const Je=et.current.velocitySampleWindow;R.velocitySamples=R.velocitySamples.filter(Ae=>ge-Ae.time<=Je)},W=d=>d instanceof HTMLElement&&d.closest("[data-scrollpane-ignore-drag='true']")!==null,te=d=>{const R=Z.current;R.shouldCancelNextClick&&(d.preventDefault(),d.stopPropagation(),R.shouldCancelNextClick=!1)},Ne=d=>{const R=Z.current;if(!R.isDragging){if(R.isDragging=!0,R.shouldCancelNextClick=!0,!p.hasPointerCapture(d.pointerId))try{p.setPointerCapture(d.pointerId)}catch{}Te(d.clientY)}},re=d=>d.isTrusted||d.target===p,Ke=d=>{const R=Z.current;p.hasPointerCapture(d)&&p.releasePointerCapture(d),R.shouldCancelNextClick=!1,ee(),F()},De=d=>{const R=Z.current;if(R.pointerId!==d.pointerId)return;if(d.buttons===0&&Dr(d.pointerType)){Ke(d.pointerId);return}if(!(We.current&&ze.current)||!Bt(d.pointerType,ft.current)||!R.isDragging&&(Math.abs(d.clientY-R.startClientY)<_||(Ne(d),!R.isDragging)))return;Te(d.clientY);const ge=d.clientY-R.startClientY,Je=R.startScroll-ge;ce.current(Je),d.cancelable&&d.preventDefault()},ae=()=>{const d=Z.current;return d.pointerId!==null||!d.shouldCancelNextClick?!1:(ee(),d.clickResetTimer=window.setTimeout(()=>{const R=Z.current;R.shouldCancelNextClick=!1,R.clickResetTimer=null},0),!0)},Se=d=>{const R=Z.current;if(R.pointerId!==d.pointerId){ae();return}R.isDragging&&R.shouldCancelNextClick&&d.cancelable&&(d.preventDefault(),d.stopPropagation()),R.isDragging&&Te(d.clientY);let ge=0;if(R.isDragging&&R.velocitySamples.length>=2){const Ae=R.velocitySamples,st=et.current.velocitySampleWindow,it=Ae[Ae.length-1],rt=Ae.find(dt=>it.time-dt.time<=st)??Ae[0];if(it&&rt&&it.time!==rt.time){const dt=it.clientY-rt.clientY,lt=it.time-rt.time;ge=-(dt/lt)}}ee(),R.shouldCancelNextClick&&(R.clickResetTimer=window.setTimeout(()=>{const Ae=Z.current;Ae.shouldCancelNextClick=!1,Ae.clickResetTimer=null},0));const Je=et.current.startVelocityThreshold;F(),p.hasPointerCapture(d.pointerId)&&p.releasePointerCapture(d.pointerId),Math.abs(ge)>=Je&&ut.current?.(ge)},qe=d=>{if(Z.current.pointerId!==null){if(!d.isPrimary||d.pointerType!==Z.current.pointerType)return;Ke(Z.current.pointerId)}if(Z.current.shouldCancelNextClick&&(ee(),Z.current.shouldCancelNextClick=!1),!(We.current&&ze.current)||!Bt(d.pointerType,ft.current)||d.button!==0&&d.pointerType==="mouse"||d.ctrlKey||d.metaKey||d.altKey||W(d.target))return;window.dispatchEvent(new CustomEvent(Xt,{detail:{paneId:gt}})),Ie.current?.();const R=Z.current;ee(),R.pointerId=d.pointerId,R.pointerType=d.pointerType,R.startClientY=d.clientY,R.startScroll=N.current,R.isDragging=!1,R.shouldCancelNextClick=!1,R.velocitySamples=[]},Ce=d=>{if(Z.current.pointerId!==d.pointerId){ae();return}re(d)&&Ke(d.pointerId)},Ge=[["click",te,!0],["pointerdown",qe,{passive:!1}],["lostpointercapture",d=>{d.target!==p||Z.current.pointerId!==d.pointerId||Ke(d.pointerId)},void 0]],tt=[["pointermove",De,{passive:!1}],["pointerup",Se,void 0],["pointercancel",Ce,void 0]];return Vt(p,Ge,"add"),Vt(window,tt,"add"),()=>{Vt(p,Ge,"remove"),Vt(window,tt,"remove");const d=Z.current;d.pointerId!==null&&p.hasPointerCapture(d.pointerId)&&p.releasePointerCapture(d.pointerId),ee(),F()}},[gt]);const ne=r.useCallback(p=>(he(),Ve(p)),[Ve,he]);return H.jsxs("div",{ref:v,"data-testid":E,"data-self-measured":pe?"true":void 0,className:wt.twMerge("aqvs-scroll-pane",I),style:g,children:[H.jsxs("div",{ref:$,className:wt.twMerge("aqvs-scroll-pane-content"),"data-testid":"aqvs-scroll-pane-content",style:{height:pe?void 0:q,paddingTop:$e.top,paddingBottom:$e.bottom,...m&&U&&b.some(p=>p==="touch"||p==="pen")?{touchAction:"none"}:{}},...j,id:y,children:[k,n(N.current)]}),H.jsx(ar,{contentSize:e,viewportSize:q,scrollPosition:N.current,onScroll:ne,enableThumbDrag:o,enableTrackClick:l,enableArrowButtons:f,scrollBarWidth:i,ariaControls:y,tapScrollCircleOptions:K,itemCount:fe,renderThumbOverlay:de,visibleStartIndex:L,visibleEndIndex:M},"scrollbar"),G?.()]})}),er=(n,e,t)=>Math.min(Math.max(n,e),t),Ar=({dragState:n,normalizedDistance:e,sizeScale:t,size:s})=>{const i=Math.max(s/2,1),o=1+e*.65,l=Math.max(.65,1-e*.25),f=n.direction*e*26*t,m=.8+e*.18,b=3*t,S=6*t,I=22*t,E=Math.abs(f)+S,g=f>0?b:-Math.abs(f)-b,k=Math.max(2.5,3*t),K=er(n.offsetX,-i,i),B=er(n.offsetY,-i,i),fe=i*.35,de=K/i*fe,oe=B/i*fe,le=de*.45,me=oe*.45,T=Math.max(I*.38,6),L=.65+e*.2,M=n.active;return H.jsxs(H.Fragment,{children:[H.jsx("div",{className:"aqvs-tap-scroll-circle-gradient",style:{transform:`scale(${l}, ${o})`,transition:M?"40ms transform ease-out":"200ms ease transform"}}),H.jsx("div",{className:"aqvs-sample-visual-pupil",style:{width:I,height:I,transform:`translate(calc(-50% + ${de}px), calc(-50% + ${oe}px)) scale(${l}, ${m*o})`,transition:M?"70ms transform ease-out":"200ms ease transform"}}),H.jsx("div",{className:"aqvs-sample-visual-highlight",style:{width:T,height:T,transform:`translate(calc(-50% + ${le}px), calc(-50% + ${me}px)) scale(${l}, ${o})`,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"}}),H.jsx("div",{className:"aqvs-sample-visual-rod",style:{width:k,height:E,transform:`translate(-50%, ${g}px)`,opacity:e,transition:M?"40ms height, 60ms opacity ease-out ease-out":"200ms ease height, 120ms ease opacity"}})]})},zt=100,Lr=n=>{if(!Number.isFinite(n))return 0n;const e=Math.trunc(n);return e<=0?0n:BigInt(e)},Ht=(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 ct{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 o=0,l;if(i>0){const f=s?.sampleRange??{from:0,to:Math.min(zt-1,i-1)};let m=Math.max(0,Math.trunc(f.from)),b=Math.min(Math.trunc(f.to),i-1);if(m>b&&(m=0,b=Math.min(zt-1,i-1)),i>zt)o=ct._sampleBaseValueStrided(t,i,zt),s?.materialize&&(l={from:m,values:ct._collectValidatedValues(t,m,b)});else{const S=ct._collectValidatedValues(t,m,b);o=ct._modeOrMedian([...S]),s?.materialize&&(l={from:m,values:S})}}if(this.size=i,this.tree=new Map,this.deltas=new Map,this.total=void 0,this.valueFn=t,this.baseValue=o,l)for(let f=0;f<l.values.length;f++){const m=l.from+f;if(m>=this.size)break;const b=l.values[f]-this.baseValue;b!==0&&(this.deltas.set(m,b),this._updateTree(m,b))}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 o=t;o<=s;o++)i.push(Ht(e(o),o));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 s;e.length%2===0?s=Math.floor((e[t-1]+e[t])/2):s=e[t];const i=new Map;let o=0;for(const l of e){const f=(i.get(l)??0)+1;i.set(l,f),f>o&&(o=f)}if(o>e.length*.2){const l=[];for(const[m,b]of i.entries())b===o&&l.push(m);const f=l.reduce((m,b)=>m+b,0);s=Math.floor(f/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 o=[];for(let l=0;l<t&&o.length<s;l+=i)o.push(Ht(e(l),l));return ct._modeOrMedian(o)}update(e,t){return this.updates([{index:e,value:t}])}updates(e){const t=this._buildDeltaUpdates(e);return t.length>0?this.updateDeltas(t):this.total}updateDelta(e,t){return this.updateDeltas([{index:e,change:t}])}updateDeltas(e){const t=new Map;for(const{index: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:o}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(o))throw new Error(`Value must be a finite number: ${o}`);if(o<0)throw new Error("Value cannot be negative.");const l=s.has(i)?s.get(i)??0:this.deltas.get(i)??0,f=l+this.baseValue,m=o-f;m!==0&&t.push({index:i,change:m}),s.set(i,l+m)}return t}_computeTreeTotal(){if(this.size<=0)return 0;let e=0,t=this.size;for(;t>0;){e+=this.tree.get(t)??0;const 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,o=Ht(this.valueFn(e),e)-this.baseValue;if(o!==s&&(o===0?this.deltas.delete(e):this.deltas.set(e,o),t)){const l=o-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 f of i){const m=Math.max(0,Math.trunc(f.from)),b=Math.min(Math.trunc(f.to),this.size-1);for(let S=m;S<=b;S++)this._materialize(S)}if(t===void 0)return;if(s){this._materialize(t);return}const o=i[0].from,l=i[i.length-1].to;t>=o&&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 o;for(;;){if(o=this._descend(e,s),o<0||o>=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(o)??0;if(this._materialize(o),(this.deltas.get(o)??0)===f)break}const l=this.prefixSum(o);return{index:o,total:this.total??l.total,cumulative:l.cumulative,currentValue:l.currentValue,safeIndex:l.safeIndex}}_descend(e,t){let s=0,i=0,o=1;for(;o<<1<=this.size;)o<<=1;for(;o>0;o>>=1){const l=s+o;if(l<=this.size){const m=(this.tree.get(l)??0)+this.baseValue*o;(t?i+m<e:i+m<=e)&&(s=l,i+=m)}}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=Lr(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 o=t.materializeOption?.materialize===!0;for(;;){let l=0n,f=i-1n,m,b,S=this.total;for(;l<=f;){const g=l+f>>1n,k=Number(g),K=this.prefixSum(k);if(S=K.total,s?K.cumulative>=e:K.cumulative<=e)if(m=g,b=K,s){if(g===0n)break;f=g-1n}else l=g+1n;else if(s)l=g+1n;else{if(g===0n)break;f=g-1n}}const I=b,E=m!==void 0?Number(m):-1;if(o&&E>=0){const g=this.deltas.get(E)??0;if(this._materialize(E),(this.deltas.get(E)??0)!==g)continue}return{index:E,total:S,cumulative:I?.cumulative,currentValue:I?.currentValue,safeIndex:I?.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=ie(Math.trunc(e),0,this.size-1),i=t?.materializeOption;this._materializeRanges(i,s,!0);let o=0,l=s+1;for(;l>0;){const m=this.tree.get(l)??0;o+=m;const b=It(l);if(b===0)break;l-=b}const f=i?.materialize?this.get(s):(this.deltas.get(s)||0)+this.baseValue;return{cumulative:o+this.baseValue*(s+1),total:this.total,currentValue:f,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 o=s+1;for(;o<=this.size;){t.set(o,(t.get(o)??0)+i);const l=It(o);if(l===0)break;o+=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 o of this.deltas.keys())o>=t&&this.deltas.delete(o);this.size=t,this.rebuildTree()}else this._growSize(s,t);else{if(t>0)for(const o of this.deltas.keys())o>=t&&this.deltas.delete(o);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 o=e+1;for(;o<=s;){const l=It(o);if(l===0)break;o+=l}for(;o<=i;){this.tree.set(o,(this.tree.get(o)??0)+t);const l=It(o);if(l===0)break;o+=l}}_growSize(e,t){if(this.size=t,this.deltas.size>0){const s=ct._minCoveredLowBound(e,t);if(e-s<this.deltas.size)for(let o=s;o<e;o++){const l=this.deltas.get(o);l===void 0||l===0||this._propagateDeltaToGrownNodes(o,l,e,t)}else for(const[o,l]of this.deltas.entries())l===0||o<s||this._propagateDeltaToGrownNodes(o,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 Or=(n,e)=>{const t=n?.sampleRange,s=e?.sampleRange;return t===s?!1:t&&s?t.from!==s.from||t.to!==s.to:!0},ur=(n,e,t)=>{const s=Number.isFinite(n)&&n>0?Math.trunc(n):0,i=r.useRef(null),o=r.useRef({size:s,valueOrFn:e,options:t});i.current===null&&(i.current=new ct(s,e,t));const l=i.current,f=o.current,m=f.size!==s,b=f.valueOrFn!==e,S=Or(f.options,t),I=f.size===0&&s>0&&(!i.current||i.current.base===0);if(b||S){const E=t?.resetOnValueFnChange??!0;S||b&&E||I?(t?.debug&&w.debug("[useFenwickMapTree] reset",{valueOrFnChanged:b,optionsChanged:S}),l.reset(s,e,t)):(m&&(t?.debug&&w.debug("[useFenwickMapTree] resize (with valueFn change)",{from:f.size,to:s}),l.changeSize(s)),t?.debug&&w.debug("[useFenwickMapTree] setValueFn (no reset)",{valueOrFnChanged:b}),l.setValueFn(e,{reset:!1})),o.current={size:s,valueOrFn:e,options:t}}else m&&(t?.debug&&w.debug("[useFenwickMapTree] resize",{from:f.size,to:s}),I?l.reset(s,e,t):l.changeSize(s),o.current={size:s,valueOrFn:e,options:t});return l};class _r{key;value;prev=null;next=null;constructor(e,t){this.key=e,this.value=t}}class qt{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 fr(n){const e=r.useRef(new Map),t=r.useRef(new qt),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 qt;return}if(Number.isFinite(s))for(;e.current.size>s;){const S=t.current.removeHead();if(S)e.current.delete(S.key);else break}},[n,s]);const o=r.useCallback(S=>{const I=e.current.get(S);if(I)return t.current.moveToTail(I),I.value},[]),l=r.useCallback((S,I)=>{const E=i.current;if(Number.isNaN(E)||E<=0)return;let g=e.current.get(S);if(g)g.value=I,t.current.moveToTail(g);else{if(e.current.size>=E){const k=t.current.removeHead();k&&e.current.delete(k.key)}g=new _r(S,I),e.current.set(S,g),t.current.addToTail(g)}},[]),f=r.useCallback(S=>e.current.has(S),[]),m=r.useCallback(S=>{const I=e.current.get(S);I&&(t.current.remove(I),e.current.delete(S))},[]),b=r.useCallback(()=>{e.current.clear(),t.current=new qt},[]);return r.useMemo(()=>({get:o,set:l,has:f,remove:m,clear:b}),[o,l,f,m,b])}const Fr=1e4,Yr=()=>{const{get:n,set:e,has:t,clear:s}=fr(Fr);return r.useMemo(()=>({get:n,set:e,has:t,clear:s}),[n,e,t,s])},Br=(n,e)=>{const t=r.useRef(e),s=r.useRef(n);r.useLayoutEffect(()=>{t.current=e,s.current=n},[e,n]);const i=r.useRef(new WeakMap);return r.useCallback(o=>{if(!o||i.current.has(o))return;const l=f=>{t.current?.enableBridge!==!1&&s.current.current?.applyWheel(f)};return o.addEventListener("wheel",l,{passive:!1}),i.current.set(o,l),()=>{i.current.get(o)===l&&(o.removeEventListener("wheel",l),i.current.delete(o))}},[])},we=(n,e)=>e<=0?0:ie(n,0,e-1),tr=n=>({top:Math.max(0,n?.top??0),bottom:Math.max(0,n?.bottom??0)}),je=(n,e)=>n<=e?0:n-e,St=(n,e)=>n<=0?0:n+e,Dt=1e3,rr=2e3,Hr=1048576,qr=40,yt=n=>{if(!Number.isFinite(n))return 0n;const e=Math.trunc(n);return e<=0?0n:BigInt(e)},Xr=(n,e,t,s,i,o,l,f)=>{const m=yt(s);if(m===0n)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const b=T=>T<0n?0n:T>=m?m-1n:T,S={materializeOption:{materialize:!1}},{index:I,cumulative:E}=o.findIndexAtOrAfter(n,S);let g;I===-1?g=m-1n:(E===n?g=yt(I+1):g=yt(I),g>=m&&(g=m-1n)),n<=0&&(g=0n),f&&n>=l&&(g=m-1n);const k=T=>{const L=Number(T);if(!Number.isSafeInteger(L))return null;const{cumulative:M}=o.prefixSum(L,{materializeOption:{materialize:!1}});if(!Number.isFinite(M))return null;const{index:G}=o.findIndexAtOrAfter(M+.5,{materializeOption:{materialize:!1}});if(G===-1)return null;const J=yt(G);return J>T?J:null},K=T=>{let L=0,M=T,G=T,J=0n,j=0;for(;M<m&&L<e;){const xe=Number(M),N=i(xe);if(L+=N,G=M,M+=1n,J+=1n,!Number.isFinite(N)||N<0)break;if(N===0){if(j+=1,j>Dt){const v=k(G);if(v!==null&&v>M)M=v,j=0;else if(v!==null&&v===M&&i(Number(M))>0)j=0;else break}}else j=0}return J===0n&&(G=T),{height:L,end:G}};let{height:B,end:fe}=K(g);if(B<e&&g>0n){let T=g,L=B,M=0;for(;T>0n&&L<e;){T-=1n;const J=Number(T),j=i(J);if(L+=j,!Number.isFinite(j)||j<0)break;if(j===0){if(M+=1,M>Dt){const xe=Number(T);if(!Number.isSafeInteger(xe))break;const{cumulative:N}=o.prefixSum(xe,{materializeOption:{materialize:!1}});if(!Number.isFinite(N))break;const{index:v}=o.findIndexAtOrAfter(N-.5,{materializeOption:{materialize:!1}}),$=v===-1?-1n:yt(v);if($>=0n&&$<T)T=$+1n,M=0;else if($===T&&T>=1n&&i(Number(T-1n))>0)M=0;else break}}else M=0}g=b(T);const G=K(g);B=G.height,fe=G.end}const de=b(g),oe=b(fe),le=b(de-BigInt(Math.max(0,t))),me=b(oe+BigInt(Math.max(0,t)));return{renderingStartIndex:we(Number(le),s),renderingEndIndex:we(Number(me),s),visibleStartIndex:we(Number(de),s),visibleEndIndex:we(Number(oe),s)}},jr=(n,e,t,s,i,o,l)=>{if(s===0)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const f=Number.isFinite(l),m=f?Math.min(Math.max(0,n),l):Math.max(0,n);if(s>=Number.MAX_SAFE_INTEGER)return Xr(m,e,t,s,i,o,l,f);const{index:b,cumulative:S,currentValue:I}=o.findIndexAtOrAfter(m,{materializeOption:{materialize:!1}}),E=b===-1?e<=0||(S??0)<m+(I??0)?s-1:0:b;let g=we(E,s),k=0;if(b!==-1&&S===m)g=we(b+1,s),k=0;else if(g===b&&S!==void 0&&I!==void 0)k=S-I-m;else{const{cumulative:T,currentValue:L}=o.prefixSum(g,{materializeOption:{materialize:!1}});k=(T??0)-(L??0)-m}const K=k,B=(T,L)=>{let M=T,G=L,J=0;for(;M<s&&G<e;){const j=i(M);if(G+=j,M++,!Number.isFinite(j)||j<0)break;if(j===0){if(J++,J>Dt){const{cumulative:xe}=o.prefixSum(M-1,{materializeOption:{materialize:!1}}),{index:N}=Number.isFinite(xe)?o.findIndexAtOrAfter(xe+.5,{materializeOption:{materialize:!1}}):{index:-1};if(N>M)M=N,J=0;else if(N===M&&i(M)>0)J=0;else break}}else J=0}return{cursor:M,height:G}},fe=B(g,k);let de=fe.cursor;if(k=fe.height,k<e&&g>0){let T=k+Math.abs(Math.min(0,K)),L=g-1,M=0;for(;L>=0&&T<e;){const J=i(L);if(T+=J,!Number.isFinite(J)||J<0){L--;break}if(J===0){if(M++,M>Dt){const{cumulative:j}=o.prefixSum(L,{materializeOption:{materialize:!1}}),{index:xe}=Number.isFinite(j)?o.findIndexAtOrAfter(j-.5,{materializeOption:{materialize:!1}}):{index:-1};if(xe!==-1&&xe<L){L=xe,M=0;continue}if(xe===L&&L>=1&&i(L-1)>0)M=0;else{L--;break}}}else M=0;L--}g=we(L+1,s);const G=B(g,0);de=G.cursor,k=G.height}const oe=we(g-t,s),le=we(Math.max(de-1,g),s),me=we(le+t,s);return{renderingStartIndex:oe,renderingEndIndex:me,visibleStartIndex:g,visibleEndIndex:le}},nr=(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(o){console.error("[useThrottledInvoker] Error flushing pending callback on unmount",o)}i.arg=null}},[i,n,t]),r.useCallback(o=>{if(i.arg=o,i.id!==null)return;const l=f=>{if(i.id=null,i.arg===null)return;const m=f-i.last;if(s===0||i.last===0||m>=s){if(n.current)try{t(n.current,i.arg)}catch(b){console.error("[useThrottledInvoker] Error invoking callback",b)}i.arg=null,i.last=f}i.arg!==null&&(i.id=requestAnimationFrame(l))};i.id=requestAnimationFrame(l)},[s,t,n,i])},$r=r.memo(({index:n,top:e,height:t,item:s,children:i,clipItemHeight:o,enableKeyboardNavigation:l,onKeyDown:f,onFocus:m,registerItemRef:b})=>{const S=r.useCallback(k=>b(n,k),[n,b]),I=r.useCallback(k=>f(k,n),[n,f]),E=r.useCallback(()=>m(n),[n,m]),g=r.useCallback(k=>{k.currentTarget.focus({preventScroll:!0})},[]);return H.jsx("div",{ref:S,"data-index":n,"data-virtualscroll-item":"true",className:"aqvs-item-container",style:{top:e,height:t,overflow:o?"hidden":void 0},tabIndex:l?-1:void 0,onPointerDown:l?g:void 0,onKeyDownCapture:l?I:void 0,onFocusCapture:l?E:void 0,children:i(s,n)})}),Ur=({itemCount:n,getItem:e,getItemKey:t,getItemHeight:s,viewportSize:i,overscanCount:o=15,className:l,testId:f,onScroll:m,onRangeChange:b,children:S,background:I,initialScrollIndex:E,initialScrollOffset:g,initialScrollAnchor:k,callbackThrottleMs:K=5,contentInsets:B,onItemFocus:fe,scrollBarOptions:de,behaviorOptions:oe,onWheelHorizontal:le,horizontalKeyInputs:me,horizontalKeyStep:T=qr,contentProps:L},M)=>{const{width:G,enableThumbDrag:J,enableTrackClick:j,enableArrowButtons:xe,enableScrollToTopBottomButtons:N,renderThumbOverlay:v,tapScrollCircleOptions:$}=de??{},{enablePointerDrag:pe,pointerDragInputs:Ye,enableKeyboardNavigation:Q=!0,wheelSpeedMultiplier:q,inertiaOptions:Be,overscrollBehavior:He,clipItemHeight:Ee=!1,resetOnGetItemHeightChange:ke=!1}=oe??{},[$e,Ue]=r.useState(0),U=i??$e,Ve=r.useCallback(a=>{Ue(u=>u===a?u:a)},[]),ce=r.useRef(null),he=r.useRef({renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0,scrollPosition:0,totalHeight:0}),Ie=r.useRef(k&&n>0?{index:ie(Math.trunc(k.index),0,n-1),align:"top",offset:-Math.max(0,k.offsetPx??0)}:null),Ze=r.useRef(!1),ut=r.useRef(!0);r.useEffect(()=>{if(ut.current){ut.current=!1;return}ke&&(Ie.current=null)},[ke,s]);const C=r.useMemo(()=>tr(B),[B]),[Qe]=r.useState(()=>{const u=k?.index??E,h=typeof u=="number"&&Number.isFinite(u)?Math.max(0,Math.trunc(u)):0;return{from:Math.max(0,h-50),to:h+50}}),gt=r.useMemo(()=>({sampleRange:Qe,resetOnValueFnChange:ke,materialize:!0}),[ke,Qe]),y=ur(n,s,gt),[Z]=r.useState(()=>{let a=0,u=0;if(k&&n>0){const h=ie(Math.trunc(k.index),0,n-1),z=Math.max(0,k.offsetPx??0),D=ie(h-o*2,0,n-1),A=ie(h+o*2,0,n-1),O=h>0||z>0?{materializeOption:{materialize:!0,ranges:[{from:D,to:A}]}}:void 0,{cumulative:se,total:ye,currentValue:be}=y.prefixSum(h,O),ue=Math.max(se-be+z,0);a=St(ue,C.top),u=ye??y.getTotal()}else if(typeof E=="number"){const h=ie(E,0,n-1),z=ie(h-o*2,0,n-1),D=ie(h+o*2,0,n-1),A=E>0?{materializeOption:{materialize:!0,ranges:[{from:z,to:D}]}}:void 0,{cumulative:O,total:se,currentValue:ye}=y.prefixSum(E,A),be=Math.max(O-ye,0);a=St(be,C.top),u=se??y.getTotal()}else typeof g=="number"&&(a=St(Math.max(g,0),C.top)),u=y.getTotal();return{position:a,total:u}}),[We,ft]=r.useState(Z.position),[ze,et]=r.useState(Z.total),ne=r.useRef(Z.position),p=r.useRef(C.top),_=r.useRef(m??void 0),Y=r.useRef(b??void 0),F=r.useRef(le),ee=(me?.length??0)>0,Te=!!le;r.useEffect(()=>{ee&&(Q||w.warn("[VirtualScroll] horizontalKeyInputs is set but behaviorOptions.enableKeyboardNavigation is false; horizontal keyboard scrolling is disabled because the row key handler is not mounted."),Te||w.warn("[VirtualScroll] horizontalKeyInputs is set but onWheelHorizontal is missing; horizontal keyboard scrolling is disabled because the package does not own the horizontal axis."),Number.isFinite(T)&&T>0||w.warn(`[VirtualScroll] horizontalKeyStep must be a finite positive number, received ${T}. Horizontal arrow keys are left untouched.`))},[ee,Te,Q,T]);const W=r.useRef(new Map),te=r.useRef(null),Ne=r.useRef(null),[re,Ke]=r.useState(null),[De,ae]=r.useState(!1),Se=r.useRef(null),qe=r.useRef(!1),Ce=r.useRef(0),at=r.useRef(!1),Ge=r.useRef(!1),tt=r.useRef(n);tt.current!==n&&(tt.current=n,Ge.current=!0),r.useLayoutEffect(()=>{_.current=m??void 0,Y.current=b??void 0,F.current=le},[b,m,le]);const d=r.useCallback(a=>{if(Q&&a&&typeof a.focus=="function")try{a.focus({preventScroll:!0})}catch{a.focus()}},[Q]),R=r.useCallback((a,{position:u,totalHeight:h})=>{a(u,h)},[]),ge=nr(_,K,R),Je=r.useCallback((a,u)=>{a(u)},[]),Ae=nr(Y,K,Je),st=r.useRef(C.top);st.current=C.top;const it=r.useRef(ge);it.current=ge,r.useEffect(()=>(Ze.current=!1,()=>{Ze.current=!0,Se.current&&(clearTimeout(Se.current),Se.current=null)}),[]),r.useEffect(()=>{Q||(W.current.clear(),te.current=null,Ne.current=null)},[Q]);const rt=r.useCallback((a,u)=>{if(!u){W.current.delete(a);return}Q&&(W.current.set(a,u),te.current===a&&(te.current=null,Ne.current=a,d(u)))},[Q,d]),dt=.01,lt=r.useRef({rafId:null,loopActive:!1,idleFrames:0,lastRenderedPosition:Z.position}),vt=r.useCallback(()=>{const a=lt.current;a.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(a.rafId),a.rafId=null,a.loopActive=!1,a.idleFrames=0},[]);r.useEffect(()=>()=>{vt()},[vt]);const bt=r.useRef(()=>{}),Tt=r.useCallback(()=>{const a=lt.current;a.rafId=null;const u=ne.current,h=je(u,st.current),z=y.getTotal();if(ft(A=>Math.abs(A-u)<dt?A:u),Math.abs(a.lastRenderedPosition-u)>=dt?(it.current({position:h,totalHeight:z}),a.lastRenderedPosition=u,a.idleFrames=0):a.idleFrames+=1,a.idleFrames>=2){vt();return}if(typeof requestAnimationFrame=="function"){a.rafId=requestAnimationFrame(A=>bt.current(A));return}a.loopActive=!1},[y,vt]);bt.current=Tt;const Ct=r.useCallback(()=>{const a=lt.current;if(a.idleFrames=0,!a.loopActive){if(a.loopActive=!0,typeof requestAnimationFrame=="function"){a.rafId=requestAnimationFrame(Tt);return}a.loopActive=!1}},[Tt]),ve=r.useCallback((a,u)=>{const h=u?.immediate??!1,z=je(a,C.top);if(ne.current=a,h){lt.current.lastRenderedPosition=a,lt.current.idleFrames=0,ft(a),ge({position:z,totalHeight:y.getTotal()});return}Ct()},[Ct,y,C.top,ge]),mt=r.useCallback((a,u=0)=>{const h=ce.current;if(!h)return a;const z=h.getScrollPosition();Ce.current+=1;const D=h.getContentSize()+u,A=h.getViewportSize(),O=h.scrollTo(a,{contentSize:D,viewportSize:A});return O===z&&(Ce.current=Math.max(0,Ce.current-1)),Math.abs(O-a)>.5&&(at.current=!0),O},[]),Et=r.useRef(!1);r.useEffect(()=>{if(!Et.current)if(Et.current=!0,k==null&&typeof E!="number"&&typeof g=="number"){const a=St(Math.max(g,0),C.top),u=Math.abs(a-ne.current)>.5;ve(a,{immediate:!0}),u&&ce.current?.scrollTo(a)}else ve(ne.current,{immediate:!0})},[k,E,g,C.top,ve]),r.useEffect(()=>{const a=y.getTotal();if(ze!==a){et(a);return}if(at.current){at.current=!1;const u=ce.current;if(u&&Math.abs(u.getScrollPosition()-ne.current)>.5){const h=mt(ne.current);at.current=!1,ve(h,{immediate:!0})}}},[y,ze,n,mt,ve]),r.useEffect(()=>{if(Ie.current!==null){const{index:a,align:u,offset:h}=Ie.current,z=we(a,n),{cumulative:D,currentValue:A}=y.prefixSum(z,{materializeOption:{materialize:!1}});if(D!==void 0&&A!==void 0){const O=Math.max(D-A,0);let se=O;u==="bottom"?se=D-U:u==="center"&&(se=O+A/2-U/2),h&&(se-=h),se=Math.max(0,se);const ye=Math.max(0,ze+C.top+C.bottom-U),be=Math.min(St(se,C.top),ye);Math.abs(be-ne.current)>1&&(w.debug("[VirtualScroll] Drift correction",{from:ne.current,to:be,targetIndex:z}),Ce.current===0&&(Ce.current+=1),ce.current?.scrollTo(be),ve(be,{immediate:!0}))}}Ge.current=!1},[ze,y,n,C.top,ve,U,C.bottom]),r.useEffect(()=>{const a=p.current;if(a===C.top||(p.current=C.top,Ie.current))return;const u=je(ne.current,a),h=St(u,C.top);ne.current=h,ce.current?.scrollTo(h),ve(h,{immediate:!0})},[C.top,ve]);const kt=r.useCallback((a,u)=>{if(n===0)return;const h=we(a,n),z=y.get(h),D=u-z,A=y.update(h,u);A!==void 0&&et(A),w.debug("[VirtualScroll] Updated item size manually",{index:h,size:u,total:A});let O=Ie.current?Ie.current.index:null;if(O===null){const se=ne.current,ye=tr(B).top,be=je(se,ye),{index:ue,cumulative:_e}=y.findIndexAtOrAfter(be,{materializeOption:{materialize:!1}});O=_e!==void 0&&_e===be?ue+1:ue}if(O!==-1&&h<O&&D!==0){const se=ne.current,ye=se+D;mt(ye,D),ve(ye,{immediate:!0}),w.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)",{from:se,to:ye,causedByIndex:h,delta:D,activeVisibleStartIndex:O})}},[y,n,mt,ve,B]),Xe=r.useCallback((a,u)=>{if(!ce.current||n===0)return;const h=we(a,n),z=we(h-o*2,n),D=we(h+o*2,n),{cumulative:A,total:O,currentValue:se}=y.prefixSum(h,{materializeOption:{materialize:!0,ranges:[{from:z,to:D}]}});if(w.debug("[VirtualScroll] Scrolling to index:",h,"ItemBottom:",A,"Total height:",O,"ItemHeight:",se,"safeIndexFrom:",z,"safeIndexTo:",D),!O)return;const ye=Math.max(A-se,0);let be=ye;u?.align==="bottom"?be=A-U:u?.align==="center"&&(be=ye+se/2-U/2),u?.offset&&(be-=u.offset),be=Math.max(0,be);const ue=St(be,C.top),_e=ce.current?.getContentSize()??O+C.top+C.bottom,Le=Math.max(0,_e-U),Fe=Math.min(ue,Le);Ie.current={index:h,align:u?.align,offset:u?.offset};const Rt=ce.current?.getScrollPosition()??-1,_t=Math.abs(Rt-Fe)>.5;qe.current=!1,Ce.current=0,_t&&(qe.current=!0,Ce.current+=1,ce.current?.scrollTo(Fe)),et(O),ve(Fe,{immediate:!0}),w.debug("[VirtualScroll] Setting scroll position to:",Fe,{original:ue,max:Le})},[y,o,n,C.top,C.bottom,U,ve]),Mt=r.useRef(k&&n===0?k:null);r.useEffect(()=>{const a=Mt.current;!a||n===0||(Mt.current=null,Xe(ie(Math.trunc(a.index),0,n-1),{align:"top",offset:-Math.max(0,a.offsetPx??0)}))},[n,Xe]);const c=r.useCallback(a=>{if(!ce.current||n===0)return;const u=y.getTotal(),h=ie(Math.floor(a),0,u),{index:z,cumulative:D,currentValue:A}=y.findIndexAtOrAfter(h,{materializeOption:{materialize:!1}}),se=(D??0)-(A??0)-h;Xe(z,{offset:se})},[y,n,Xe]),x=r.useCallback(()=>{if(n===0)return null;const a=je(ne.current,C.top),{index:u,cumulative:h,currentValue:z}=y.findIndexAtOrAfter(a,{materializeOption:{materialize:!1}});if(u===-1)return{index:n-1,offsetPx:0};if(h===a)return{index:ie(u+1,0,n-1),offsetPx:0};const D=(h??0)-(z??0);return{index:u,offsetPx:Math.max(0,a-D)}},[y,n,C.top]),P=r.useCallback(a=>{const u=je(ne.current,C.top),h=typeof a=="function"?a(u):a;c(h);const z=ce.current?.getScrollPosition(),D=typeof z=="number"?z:ne.current;return ve(D),je(D,st.current)},[C.top,c,ve]),V=r.useCallback(a=>{const u=ce.current;if(!u)return je(ne.current,st.current);const h=u.scrollTo(z=>z+a);return je(h,st.current)},[]),X=r.useCallback(a=>ce.current?.applyWheel(a)??!1,[]),Me=r.useCallback((a,u)=>{w.debug("[VirtualScroll] Scroll position changed:",a);const h=qe.current;h&&(qe.current=!1);const z=Ce.current>0;z&&(Ce.current=0);const D=Ge.current&&tt.current===n;if(h||z||D||(Ie.current=null),ve(a),N){if(h||z)return;const A=a-u;if(w.debug("[VirtualScroll] Scroll diff:",A,"New:",a,"Prev:",u),Math.abs(A)>1){const O=A>0?"down":"up";Ke(O),ae(!0),w.debug("[VirtualScroll] Showing scroll buttons. Direction:",O),Se.current&&clearTimeout(Se.current),Se.current=setTimeout(()=>{ae(!1),w.debug("[VirtualScroll] Hiding scroll buttons")},2e3)}}},[ve,N,n]),Re=r.useMemo(()=>je(We,C.top),[C.top,We]),Pe=r.useMemo(()=>{const a=y.getTotal(),u=jr(Re,U,o,n,s,y,a);return w.debug("[VirtualScroll] Calculated rendering range:",()=>({...u,scrollPosition:Re,renderingContentSize:a,overscanCount:o,viewportSize:U})),u},[Re,U,o,n,s,y]),{renderingStartIndex:nt,renderingEndIndex:Oe,visibleStartIndex:pt,visibleEndIndex:Nt}=Pe,xt=r.useCallback((a,u)=>{if(!Q||n===0)return;const h=we(a,n);if(!(u?.ensureVisible??!0)){const Le=W.current.get(h);Le&&(te.current=null,Ne.current=h,d(Le));return}const D=y.prefixSum(h,{materializeOption:{materialize:!1}}),A=D.currentValue,O=Math.max(D.cumulative-A,0),se=O+A,ye=je(ne.current,C.top),be=ye+U;if(O<ye||se>be){Xe(h);const Le=W.current.get(h);Le?(te.current=null,Ne.current=h,d(Le)):te.current=h;return}const _e=W.current.get(h);if(_e){te.current=null,Ne.current=h,d(_e);return}te.current=h},[Q,n,y,C.top,Xe,d,U]),$t=r.useCallback((a,u)=>{if(!(!Q||a.defaultPrevented)&&!(a.altKey||a.metaKey||a.ctrlKey)&&a.target===a.currentTarget&&!a.currentTarget.isContentEditable){if(a.key==="ArrowLeft"||a.key==="ArrowRight"){const h=F.current;if(!h||a.shiftKey||!me?.includes("arrow")||!(Number.isFinite(T)&&T>0))return;a.preventDefault(),h(a.key==="ArrowLeft"?-T:T);return}if(a.key==="ArrowDown"){u<n-1&&(a.preventDefault(),xt(u+1));return}if(a.key==="ArrowUp"){u>0&&(a.preventDefault(),xt(u-1));return}if(a.key==="PageDown"){if(u<n-1){a.preventDefault();const{visibleStartIndex:h,visibleEndIndex:z}=he.current,D=Math.max(z-h+1,1),A=Math.max(D,1),O=we(Math.min(u+A,n-1),n);xt(O)}return}if(a.key==="PageUp"&&u>0){a.preventDefault();const{visibleStartIndex:h,visibleEndIndex:z}=he.current,D=Math.max(z-h+1,1),A=Math.max(D,1),O=we(u-A,n);xt(O)}}},[Q,n,xt,me,T]),Ut=r.useCallback(a=>{if(!Q)return;const u=we(a,n);te.current=null,Ne.current=u,fe?.(u)},[Q,n,fe]);r.useEffect(()=>{const a=ce.current?.getScrollPosition()??0,u=ne.current,h=je(u,C.top);w.debug("[VirtualScroll] Range change effect triggered",()=>({renderingStartIndex:nt,renderingEndIndex:Oe,visibleStartIndex:pt,visibleEndIndex:Nt,scrollPositionState:We,paneScrollPosition:u,logicalScrollPosition:h,contentSize:ze,scrollPaneScrollPosition:a})),Ae({renderingStartIndex:nt,renderingEndIndex:Oe,visibleStartIndex:pt,visibleEndIndex:Nt,scrollPosition:h,totalHeight:ze})},[ze,Oe,nt,C.top,Ae,We,Nt,pt]);const dr=r.useCallback(()=>{if(!N)return null;const a=De&&re!==null,u=re==="up";return H.jsx("div",{className:"aqvs-scroll-to-edge-overlay","data-visible":a,inert:!a,children:u?H.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top",children:H.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",tabIndex:a?0:-1,onClick:h=>{h.stopPropagation(),qe.current=!0,Xe(0),ae(!1)},children:"Top"})}):H.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom",children:H.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",tabIndex:a?0:-1,onClick:h=>{h.stopPropagation(),qe.current=!0,Xe(n-1),ae(!1)},children:"Bottom"})})})},[N,De,re,Xe,n]),At=r.useRef(0),{visibleItems:Lt,renderAnchor:Ot}=r.useMemo(()=>{if(n===0)return{visibleItems:H.jsx("div",{className:"aqvs-no-items-container",children:H.jsx("div",{className:"aqvs-no-items-text",children:"No items"})}),renderAnchor:0};const a=we(nt,n),u=we(Oe,n),{cumulative:h,currentValue:z}=y.prefixSum(a,{materializeOption:{materialize:!1}}),D=h-z;Number.isFinite(D)&&Math.abs(D-At.current)>Hr&&(At.current=D);const A=At.current,O=[],se=[];let ye=0,be=D;for(let ue=a;ue<=u;ue++){if(se.length>=rr){w.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.",{cap:rr,safeRenderingStartIndex:a,safeRenderingEndIndex:u});break}const _e=s(ue),Le=y.get(ue),Fe=_e-Le;Fe!==0&&O.push({index:ue,value:_e});const Rt=be+ye,_t=t?t(ue):ue;se.push(H.jsx($r,{index:ue,top:Rt-A,height:_e,item:e(ue),clipItemHeight:Ee,enableKeyboardNavigation:Q,onKeyDown:$t,onFocus:Ut,registerItemRef:rt,children:S},_t)),ye+=Fe,be+=Le}return O.length>0&&Promise.resolve().then(()=>{if(Ze.current)return;let ue=0;for(const Fe of O)if(Fe.index<pt){const Rt=y.get(Fe.index);ue+=Fe.value-Rt}const _e=y.updates(O);if(Ze.current||typeof _e!="number")return;et(_e),w.debug("[VirtualScroll] Updated heights for items",O,"New total height:",_e);const Le=ce.current?.getScrollPosition()??ne.current;if(ue!==0){const Fe=Le+ue;mt(Fe,ue),ve(Fe,{immediate:!0}),w.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)",{from:Le,to:Fe,shiftAmount:ue})}else Le!==ne.current&&ve(Le)}),{visibleItems:se,renderAnchor:A}},[S,Ee,ze,Q,n,y,e,t,s,Ut,$t,mt,rt,Oe,nt,ve,pt]),mr=r.useCallback(a=>{const u=(K??0)>0,h=Math.abs(a-We),z=u&&h>.5?We:a,D=je(z,C.top);if(w.debug("[VirtualScroll] Rendering visible items",()=>({currentScrollPosition:a,effectiveScrollPosition:D,renderingStartIndex:nt,renderingEndIndex:Oe,itemCount:n,viewportSize:U,callbackThrottleMs:K,diff:h,rawEffectiveScrollPosition:z})),n===0)return Lt;const A=C.top+Ot-z,O=C.bottom>0?H.jsx("div",{className:"aqvs-bottom-inset",style:{top:y.getTotal()-Ot,height:C.bottom}},"virtualscroll-bottom-inset"):null;return w.debug("[VirtualScroll] Rendering items",()=>({containerTop:A,logicalScrollPosition:Re,resolvedInsets:C,effectiveScrollPosition:D})),H.jsxs("div",{className:"aqvs-items-wrapper",style:{top:0,transform:`translateY(${A}px)`,willChange:"transform"},children:[Lt,O]})},[K,n,y,Re,Ot,Oe,nt,C,We,U,Lt]),Wt=r.useMemo(()=>({renderingStartIndex:Pe.renderingStartIndex,renderingEndIndex:Pe.renderingEndIndex,visibleStartIndex:Pe.visibleStartIndex,visibleEndIndex:Pe.visibleEndIndex,scrollPosition:Re,totalHeight:y.getTotal()}),[Pe,Re,y,ze]);r.useEffect(()=>{he.current=Wt},[Wt]),r.useImperativeHandle(M,()=>({getScrollPosition:()=>{const a=ce.current?.getScrollPosition();return typeof a=="number"?je(a,st.current):-1},getContentSize:()=>ce.current?.getContentSize()??-1,getViewportSize:()=>ce.current?.getViewportSize()??-1,scrollTo:P,scrollBy:V,applyWheel:X,scrollToIndex:Xe,getFenwickTreeTotalHeight:()=>y.getTotal(),getFenwickSize:()=>y.getSize(),focusItemAtIndex:xt,getRange:()=>he.current,getScrollAnchor:x,updateItemSize:kt}),[P,V,X,Xe,y,xt,x,kt]);const pr=y.getTotal()+C.top+C.bottom;return H.jsx(cr,{ref:ce,contentSize:pr,viewportSize:i,onViewportSizeChange:Ve,className:l,testId:f,onScroll:Me,background:I,tapScrollCircleOptions:$,inertiaOptions:Be,overscrollBehavior:He,itemCount:n,scrollBarWidth:G,enableThumbDrag:J,enableTrackClick:j,enableArrowButtons:xe,enablePointerDrag:pe,pointerDragInputs:Ye,renderThumbOverlay:v,wheelSpeedMultiplier:q,onWheelHorizontal:le,contentInsets:C,contentProps:L,visibleStartIndex:pt,visibleEndIndex:Nt,renderOverlay:dr,initialScrollPosition:Z.position,children:mr})},Wr=r.forwardRef(Ur);exports.FenwickMapTree=ct;exports.ScrollBar=ar;exports.ScrollPane=cr;exports.TAP_SCROLL_SPEED_DEFAULTS=jt;exports.VirtualScroll=Wr;exports.computeAutoTapScrollMaxSpeedMultiplier=or;exports.computeTapScrollSpeed=ir;exports.minmax=ie;exports.tapScrollCircleSampleVisual=Ar;exports.useFenwickMapTree=ur;exports.useHeightCache=Yr;exports.useLruCache=fr;exports.useWheelBridge=Br;
|