@aiquants/virtualscroll 1.18.2 → 1.18.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -16
- package/dist/ScrollBar.d.cts +100 -0
- package/dist/ScrollBar.d.ts.map +1 -0
- package/dist/ScrollPane.d.cts +93 -0
- package/dist/ScrollPane.d.ts.map +1 -0
- package/dist/TapScrollCircle.d.cts +62 -0
- package/dist/TapScrollCircle.d.ts.map +1 -0
- package/dist/VirtualScroll.d.cts +155 -0
- package/dist/{src/VirtualScroll.d.ts → VirtualScroll.d.ts} +46 -3
- package/dist/VirtualScroll.d.ts.map +1 -0
- package/dist/cli.js +97 -24
- package/dist/cli.server.d.cts +13 -0
- package/dist/cli.server.d.ts +14 -0
- package/dist/cli.server.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/{src/index.d.ts → index.d.cts} +9 -10
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1862 -1352
- package/dist/{src/logger.d.ts → logger.d.cts} +48 -1
- package/dist/logger.d.ts +146 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/tapScrollCircleSampleVisual.d.cts +2 -0
- package/dist/tapScrollCircleSampleVisual.d.ts.map +1 -0
- package/dist/{src/useFenwickMapTree.d.ts → useFenwickMapTree.d.cts} +138 -16
- package/dist/useFenwickMapTree.d.ts +451 -0
- package/dist/useFenwickMapTree.d.ts.map +1 -0
- package/dist/useHeightCache.d.cts +15 -0
- package/dist/useHeightCache.d.ts.map +1 -0
- package/dist/{src/useLruCache.d.ts → useLruCache.d.cts} +8 -2
- package/dist/useLruCache.d.ts +24 -0
- package/dist/useLruCache.d.ts.map +1 -0
- package/dist/{src/utils.d.ts → utils.d.cts} +3 -1
- package/dist/utils.d.ts +15 -0
- package/dist/{src/utils.d.ts.map → utils.d.ts.map} +1 -1
- package/package.json +12 -6
- package/dist/src/ScrollBar.d.ts.map +0 -1
- package/dist/src/ScrollPane.d.ts.map +0 -1
- package/dist/src/TapScrollCircle.d.ts.map +0 -1
- package/dist/src/VirtualScroll.d.ts.map +0 -1
- package/dist/src/cli.server.d.ts +0 -2
- package/dist/src/cli.server.d.ts.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/tapScrollCircleSampleVisual.d.ts.map +0 -1
- package/dist/src/useFenwickMapTree.d.ts.map +0 -1
- package/dist/src/useHeightCache.d.ts.map +0 -1
- package/dist/src/useLruCache.d.ts.map +0 -1
- package/dist/virtualscroll.css +0 -1
- package/dist/vite.config.d.ts +0 -3
- package/dist/vite.config.d.ts.map +0 -1
- /package/dist/{src/ScrollBar.d.ts → ScrollBar.d.ts} +0 -0
- /package/dist/{src/ScrollPane.d.ts → ScrollPane.d.ts} +0 -0
- /package/dist/{src/TapScrollCircle.d.ts → TapScrollCircle.d.ts} +0 -0
- /package/dist/{src/tapScrollCircleSampleVisual.d.ts → tapScrollCircleSampleVisual.d.ts} +0 -0
- /package/dist/{src/useHeightCache.d.ts → useHeightCache.d.ts} +0 -0
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawn as o } from "node:child_process";
|
|
3
|
+
import { realpathSync as a, existsSync as l } from "node:fs";
|
|
4
|
+
import n from "node:path";
|
|
5
|
+
import { fileURLToPath as c, pathToFileURL as m } from "node:url";
|
|
4
6
|
class i {
|
|
5
7
|
level;
|
|
6
8
|
prefix;
|
|
@@ -11,8 +13,8 @@ class i {
|
|
|
11
13
|
* @param {string} [prefix="[virtualscroll]"] - The prefix to add to all log messages.
|
|
12
14
|
* @param {ILogger} [impl=console] - The implementation to use for logging.
|
|
13
15
|
*/
|
|
14
|
-
constructor(e = 2, t = "[virtualscroll]",
|
|
15
|
-
this.level = e, this.prefix = t, this.impl =
|
|
16
|
+
constructor(e = 2, t = "[virtualscroll]", s = console) {
|
|
17
|
+
this.level = e, this.prefix = t, this.impl = s;
|
|
16
18
|
}
|
|
17
19
|
static instance = new i(2, "[virtualscroll]");
|
|
18
20
|
/**
|
|
@@ -69,6 +71,55 @@ class i {
|
|
|
69
71
|
setPrefix(e) {
|
|
70
72
|
this.prefix = e;
|
|
71
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* @method isEnabled
|
|
76
|
+
* @description Returns whether the given level would be emitted at the current level (static instance).
|
|
77
|
+
* @description 指定したレベルが現在のログレベルで出力されるかどうかを返します(静的インスタンス)。
|
|
78
|
+
* @param {LogLevel} level - The level to query. / 問い合わせるレベル。
|
|
79
|
+
* @returns {boolean} True if a message at `level` would be emitted. / `level` のメッセージが出力されるなら true。
|
|
80
|
+
*/
|
|
81
|
+
static isEnabled(e) {
|
|
82
|
+
return i.instance.isEnabled(e);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @method isEnabled
|
|
86
|
+
* @description Returns whether the given level would be emitted at the current level.
|
|
87
|
+
* @description 指定したレベルが現在のログレベルで出力されるかどうかを返します。
|
|
88
|
+
*
|
|
89
|
+
* ホットパスで呼び出し側が引数(オブジェクト生成・DOM 読み取り等)を組み立てる前に
|
|
90
|
+
* ガードするために使う。抑制時は引数評価を丸ごと省ける。
|
|
91
|
+
*
|
|
92
|
+
* @param {LogLevel} level - The level to query. / 問い合わせるレベル。
|
|
93
|
+
* @returns {boolean} True if a message at `level` would be emitted. / `level` のメッセージが出力されるなら true。
|
|
94
|
+
*/
|
|
95
|
+
isEnabled(e) {
|
|
96
|
+
return this.level <= e;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolves a possibly-lazy log argument.
|
|
100
|
+
* If the argument is a function it is treated as a thunk and invoked only when the
|
|
101
|
+
* level is enabled; if the invocation throws (class constructors cannot be called
|
|
102
|
+
* without `new`, or the thunk itself fails), the original function value is
|
|
103
|
+
* returned as-is so the log call never crashes the caller and still emits something.
|
|
104
|
+
* To log a function as a value, wrap it as `() => fn`.
|
|
105
|
+
* 遅延評価される可能性のあるログ引数を解決する処理。
|
|
106
|
+
*
|
|
107
|
+
* 関数が渡された場合はサンク (thunk) とみなし、レベルが有効なとき「だけ」呼び出す。
|
|
108
|
+
* これにより呼び出し側は `logger.debug(() => ({ ...expensive }))` のように書け、
|
|
109
|
+
* レベル抑制時にはオブジェクト生成や DOM 読み取りを回避できる。
|
|
110
|
+
* 呼び出しが throw した場合 (class は `new` なしで呼べず TypeError、または thunk 自体の失敗) は、
|
|
111
|
+
* ログ呼び出しが呼び出し元をクラッシュさせないよう元の関数値をそのまま返す (握り潰さず出力は残る)。
|
|
112
|
+
* 関数を値としてログしたい場合は `() => fn` とラップする。非関数値はそのまま素通しするため後方互換。
|
|
113
|
+
*/
|
|
114
|
+
static resolveLazy(e) {
|
|
115
|
+
if (typeof e != "function")
|
|
116
|
+
return e;
|
|
117
|
+
try {
|
|
118
|
+
return e();
|
|
119
|
+
} catch {
|
|
120
|
+
return e;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
72
123
|
formatMessage(e) {
|
|
73
124
|
return typeof e == "string" ? [`${this.prefix} ${e}`] : [this.prefix, e];
|
|
74
125
|
}
|
|
@@ -76,39 +127,61 @@ class i {
|
|
|
76
127
|
i.instance.debug(e, ...t);
|
|
77
128
|
}
|
|
78
129
|
debug(e, ...t) {
|
|
79
|
-
this.level <= 0 && this.impl.debug(...this.formatMessage(e), ...t);
|
|
130
|
+
this.level <= 0 && this.impl.debug(...this.formatMessage(i.resolveLazy(e)), ...t.map(i.resolveLazy));
|
|
80
131
|
}
|
|
81
132
|
static info(e, ...t) {
|
|
82
133
|
i.instance.info(e, ...t);
|
|
83
134
|
}
|
|
84
135
|
info(e, ...t) {
|
|
85
|
-
this.level <= 1 && this.impl.info(...this.formatMessage(e), ...t);
|
|
136
|
+
this.level <= 1 && this.impl.info(...this.formatMessage(i.resolveLazy(e)), ...t.map(i.resolveLazy));
|
|
86
137
|
}
|
|
87
138
|
static warn(e, ...t) {
|
|
88
139
|
i.instance.warn(e, ...t);
|
|
89
140
|
}
|
|
90
141
|
warn(e, ...t) {
|
|
91
|
-
this.level <= 2 && this.impl.warn(...this.formatMessage(e), ...t);
|
|
142
|
+
this.level <= 2 && this.impl.warn(...this.formatMessage(i.resolveLazy(e)), ...t.map(i.resolveLazy));
|
|
92
143
|
}
|
|
93
144
|
static error(e, ...t) {
|
|
94
145
|
i.instance.error(e, ...t);
|
|
95
146
|
}
|
|
96
147
|
error(e, ...t) {
|
|
97
|
-
this.level <= 3 && this.impl.error(...this.formatMessage(e), ...t);
|
|
148
|
+
this.level <= 3 && this.impl.error(...this.formatMessage(i.resolveLazy(e)), ...t.map(i.resolveLazy));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const p = c(import.meta.url), f = n.dirname(p), h = "Usage: npx @aiquants/virtualscroll demo";
|
|
152
|
+
function d(r) {
|
|
153
|
+
if (r[0] === "demo") {
|
|
154
|
+
const e = n.join(f, "..", "demo");
|
|
155
|
+
l(e) || (console.error(
|
|
156
|
+
`The 'demo' command is only available in a source checkout of @aiquants/virtualscroll.
|
|
157
|
+
The demo app is not bundled in the published npm package.
|
|
158
|
+
To run it, clone the repository and inside the 'demo/' directory run:
|
|
159
|
+
pnpm install && pnpm dev`
|
|
160
|
+
), process.exit(1)), console.error("Starting demo server...");
|
|
161
|
+
const t = o("pnpm", ["run", "dev"], {
|
|
162
|
+
cwd: e,
|
|
163
|
+
stdio: "inherit",
|
|
164
|
+
shell: process.platform === "win32"
|
|
165
|
+
});
|
|
166
|
+
t.on("close", (s) => {
|
|
167
|
+
s !== 0 && (i.error(`Demo server process exited with code ${s}`), process.exitCode = s ?? 1);
|
|
168
|
+
}), t.on("error", (s) => {
|
|
169
|
+
i.error("Failed to start demo server:", s), process.exitCode = 1;
|
|
170
|
+
});
|
|
171
|
+
} else
|
|
172
|
+
r.length > 0 && console.error(`Unknown command: ${r[0]}`), console.error(h), process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
function u() {
|
|
175
|
+
const r = process.argv[1];
|
|
176
|
+
if (!r)
|
|
177
|
+
return !1;
|
|
178
|
+
try {
|
|
179
|
+
return m(a(r)).href === import.meta.url;
|
|
180
|
+
} catch {
|
|
181
|
+
return !1;
|
|
98
182
|
}
|
|
99
183
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
cwd: n,
|
|
105
|
-
stdio: "inherit",
|
|
106
|
-
shell: process.platform === "win32"
|
|
107
|
-
});
|
|
108
|
-
e.on("close", (t) => {
|
|
109
|
-
t !== 0 && i.error(`Demo server process exited with code ${t}`);
|
|
110
|
-
}), e.on("error", (t) => {
|
|
111
|
-
i.error("Failed to start demo server:", t);
|
|
112
|
-
});
|
|
113
|
-
} else
|
|
114
|
-
i.warn(`Unknown command: ${s[0]}`), i.info("Usage: npx @aiquants/virtualscroll demo"), process.exit(1);
|
|
184
|
+
u() && d(process.argv.slice(2));
|
|
185
|
+
export {
|
|
186
|
+
d as runCli
|
|
187
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run the virtualscroll CLI with the given arguments: start the demo server
|
|
3
|
+
* for the "demo" command, otherwise print usage guidance and exit with code 1.
|
|
4
|
+
* When the demo server exits with a non-zero code or fails to spawn, the
|
|
5
|
+
* failure is propagated to the parent process via process.exitCode.
|
|
6
|
+
* 与えられた引数で virtualscroll CLI を実行し、demo コマンドならデモサーバーを
|
|
7
|
+
* 起動、それ以外は usage 案内を表示して終了コード 1 で終了する処理。デモサーバーが
|
|
8
|
+
* 非ゼロ終了または起動失敗した場合は process.exitCode で親プロセスへ失敗を伝播。
|
|
9
|
+
*
|
|
10
|
+
* @param {string[]} args - Command-line arguments (without the node/script prefix).
|
|
11
|
+
* @returns {void} Nothing. デモ起動または usage 表示後の終了のみで戻り値なし。
|
|
12
|
+
*/
|
|
13
|
+
export declare function runCli(args: string[]): void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run the virtualscroll CLI with the given arguments: start the demo server
|
|
3
|
+
* for the "demo" command, otherwise print usage guidance and exit with code 1.
|
|
4
|
+
* When the demo server exits with a non-zero code or fails to spawn, the
|
|
5
|
+
* failure is propagated to the parent process via process.exitCode.
|
|
6
|
+
* 与えられた引数で virtualscroll CLI を実行し、demo コマンドならデモサーバーを
|
|
7
|
+
* 起動、それ以外は usage 案内を表示して終了コード 1 で終了する処理。デモサーバーが
|
|
8
|
+
* 非ゼロ終了または起動失敗した場合は process.exitCode で親プロセスへ失敗を伝播。
|
|
9
|
+
*
|
|
10
|
+
* @param {string[]} args - Command-line arguments (without the node/script prefix).
|
|
11
|
+
* @returns {void} Nothing. デモ起動または usage 表示後の終了のみで戻り値なし。
|
|
12
|
+
*/
|
|
13
|
+
export declare function runCli(args: string[]): void;
|
|
14
|
+
//# sourceMappingURL=cli.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.server.d.ts","sourceRoot":"","sources":["../src/cli.server.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAkD3C"}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=require("react/jsx-runtime"),r=require("react"),Je=require("tailwind-merge");class N{level;prefix;impl;constructor(e=2,t="[virtualscroll]",n=console){this.level=e,this.prefix=t,this.impl=n}static instance=new N(2,"[virtualscroll]");static setLevel(e){N.instance.setLevel(e)}setLevel(e){this.level=e}static setImplementation(e){N.instance.setImplementation(e)}setImplementation(e){this.impl=e}static setPrefix(e){N.instance.setPrefix(e)}setPrefix(e){this.prefix=e}formatMessage(e){return typeof e=="string"?[`${this.prefix} ${e}`]:[this.prefix,e]}static debug(e,...t){N.instance.debug(e,...t)}debug(e,...t){this.level<=0&&this.impl.debug(...this.formatMessage(e),...t)}static info(e,...t){N.instance.info(e,...t)}info(e,...t){this.level<=1&&this.impl.info(...this.formatMessage(e),...t)}static warn(e,...t){N.instance.warn(e,...t)}warn(e,...t){this.level<=2&&this.impl.warn(...this.formatMessage(e),...t)}static error(e,...t){N.instance.error(e,...t)}error(e,...t){this.level<=3&&this.impl.error(...this.formatMessage(e),...t)}}const It={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},ht=6,Ot=8,Yt=({dragState:s,normalizedDistance:e})=>{const t=1+e*.18,n=.16+e*.24,i=.38+e*.28,c=s.active?"80ms ease-out":"220ms ease";return F.jsxs(F.Fragment,{children:[F.jsx("div",{className:"aqvs-tap-scroll-circle-visual-outer",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.62), rgba(72,72,72,0.48))",boxShadow:`0 0 0 1px rgba(255,255,255,0.28), 0 10px 22px rgba(0,0,0,${n})`,transform:`scale(${t})`,transition:`${c}, ${s.active?"80ms":"260ms"} box-shadow ease`}}),F.jsx("div",{className:"aqvs-tap-scroll-circle-inner",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.72), rgba(28,28,28,0.58))",boxShadow:"inset 0 4px 10px rgba(0,0,0,0.24), inset 0 0 2px rgba(255,255,255,0.55)",opacity:i,transition:s.active?"120ms opacity ease-out":"220ms opacity ease"}})]})},yt=r.memo(r.forwardRef(({onDragChange:s,className:e,maxVisualDistance:t=160,size:n=40,style:i,opacity:c=1,renderVisual:u},d)=>{const[m,g]=r.useState(It),p=r.useRef(null),b=r.useRef({x:0,y:0}),A=r.useRef(null),x=r.useRef(0),D=r.useCallback(T=>{g(T),s(T)},[s]),X=r.useCallback((T,U,Te=!1)=>{const{x:Ee,y:se}=b.current,k=T-Ee,K=U-se,ce=Math.abs(K),xe=ce<ht?0:K<0?-1:1,I=x.current;let Ve=xe;const S=ht+Ot;xe===0?I!==0&&ce<S?Ve=I:(Ve=0,Te||(x.current=0)):xe!==I&&I!==0&&ce<S?Ve=I:x.current=xe,D({active:Te||ce>=ht,offsetX:k,offsetY:K,distance:ce,direction:Ve,pointerId:p.current})},[D]),Y=r.useCallback(T=>{if(T===null)return;const U=A.current;U?.hasPointerCapture(T)&&U.releasePointerCapture(T)},[]),Z=r.useCallback((T=!1)=>{T&&Y(p.current),p.current=null,x.current=0,D(It)},[D,Y]),me=r.useCallback(T=>{T.preventDefault(),T.stopPropagation();const U=A.current??T.currentTarget,{left:Te,top:Ee,width:se,height:k}=U.getBoundingClientRect();b.current={x:Te+se/2,y:Ee+k/2},p.current=T.pointerId,U.setPointerCapture(T.pointerId),X(T.clientX,T.clientY,!0)},[X]),ae=r.useCallback(T=>{p.current===T.pointerId&&(T.preventDefault(),X(T.clientX,T.clientY))},[X]),ne=r.useCallback(T=>{p.current===T.pointerId&&(T.preventDefault(),T.stopPropagation(),Z(!0))},[Z]);r.useImperativeHandle(d,()=>({reset:()=>{Z(!0)},getElement:()=>A.current}),[Z]);const _=Math.min(Math.max(c,0),1),J=n/64,Q=Math.min(m.distance,t)/t,E=m.direction*Q*10*J,le=u??Yt,Ie={dragState:m,normalizedDistance:Q,sizeScale:J,size:n,opacity:_},pe={...i,width:n,height:n,transform:`translateY(${E}px)`};return pe.opacity=_,F.jsx("div",{ref:A,"data-testid":"virtual-scroll-tap-circle",className:Je.twMerge("aqvs-tap-scroll-circle",e),style:pe,tabIndex:-1,onPointerDown:me,onPointerMove:ae,onPointerUp:ne,onPointerCancel:ne,role:"presentation",children:le(Ie)})}));yt.displayName="TapScrollCircle";const de=(s,e,t)=>Math.min(t,Math.max(e,s)),xt="virtualscroll:tap-scroll-cancel",Tt=20,zt=250,qt=60,Ht=20,Xt=20,Bt=240,St={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},gt=2.2,jt=8,Ut=120,$t=1/60,ze={enabled:!0,size:40,offsetX:-80,offsetY:0,className:void 0,maxVisualDistance:Bt,minSpeedMultiplier:.2,opacity:.9,renderVisual:void 0,maxSpeedCurve:void 0},Kt=s=>s?{mainSizeKey:"width",crossSizeKey:"height",positionKey:"left",selectDelta:(e,t)=>e,getPointerCoordinate:({clientX:e})=>e,arrowLabels:["Scroll left","Scroll right"],arrowIcons:["◀","▶"],directionClass:"aqvs-scrollbar-horizontal",orientation:"horizontal"}:{mainSizeKey:"height",crossSizeKey:"width",positionKey:"top",selectDelta:(e,t)=>t,getPointerCoordinate:({clientY:e})=>e,arrowLabels:["Scroll up","Scroll down"],arrowIcons:["▲","▼"],directionClass:"aqvs-scrollbar-vertical",orientation:"vertical"},Wt=(s,e)=>{const t=s?.maxSpeedMultiplier,n=typeof t=="number"?t:Jt(e);return{enabled:s?.enabled??ze.enabled,size:s?.size??ze.size,offsetX:s?.offsetX??ze.offsetX,offsetY:s?.offsetY??ze.offsetY,className:s?.className??ze.className,maxVisualDistance:s?.maxVisualDistance??ze.maxVisualDistance,maxSpeedMultiplier:n,minSpeedMultiplier:Math.max(s?.minSpeedMultiplier??ze.minSpeedMultiplier,0),opacity:de(s?.opacity??ze.opacity,0,1),renderVisual:s?.renderVisual??ze.renderVisual,maxSpeedCurve:s?.maxSpeedCurve??ze.maxSpeedCurve}},Gt=({isDragging:s,isThumbHovered:e,enableThumbDrag:t})=>r.useMemo(()=>t?s?"dragging":e?"hover":"idle":"disabled",[t,s,e]),Zt=({canUseArrowButtons:s,enableArrowButtons:e,resetTapScroll:t,scrollByStep:n})=>{const i=r.useRef(null),c=r.useRef(null),u=r.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null),c.current!==null&&(window.clearTimeout(c.current),c.current=null)},[]),d=r.useCallback(()=>{u()},[u]),m=r.useCallback(p=>b=>{s&&(b.cancelable&&b.preventDefault(),b.stopPropagation(),t(),u(),n(p),c.current=window.setTimeout(()=>{i.current=window.setInterval(()=>{n(p)},qt)},zt))},[s,u,t,n]),g=r.useCallback(p=>b=>{e&&(b.key==="Enter"||b.key===" "||b.key==="Spacebar")&&(b.preventDefault(),n(p))},[e,n]);return r.useEffect(()=>()=>{u()},[u]),{handleArrowPointerDown:m,handleArrowPointerUp:d,handleArrowKeyDown:g}},Jt=s=>{if(!s||s<=0)return gt;const e=Math.max(1,s),t=Math.log10(e),n=gt+t*jt;return de(n,gt,Ut)},wt=({contentSize:s,viewportSize:e,scrollPosition:t,onScroll:n,enableThumbDrag:i=!0,enableTrackClick:c=!0,enableArrowButtons:u=!0,horizontal:d=!1,scrollBarWidth:m=12,className:g,ariaControls:p,tapScrollCircleOptions:b,itemCount:A,renderThumbOverlay:x,visibleStartIndex:D,visibleEndIndex:X})=>{const[Y,Z]=r.useState(!1),[me,ae]=r.useState(!1),[ne,_]=r.useState(!1),J=r.useRef(null),Q=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0}),E=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0}),le=r.useRef(t),Ie=r.useRef(n),pe=r.useRef(St),T=r.useRef(null),U=r.useRef(null),Te=r.useRef(null),Ee=r.useMemo(()=>Wt(b,A),[A,b]),se=r.useMemo(()=>Kt(d),[d]),{enabled:k,size:K,offsetX:ce,offsetY:xe,className:I,maxVisualDistance:Ve,maxSpeedMultiplier:S,minSpeedMultiplier:ee,opacity:Ce,renderVisual:Ue,maxSpeedCurve:Se}=Ee,v=r.useRef({viewportSize:e,maxScrollPosition:Math.max(s-e,0),scrollBarVisible:s>e,effectiveTapMaxDistance:Math.max(Ve,1),tapCircleMaxSpeedMultiplier:S,tapCircleMinSpeedMultiplier:ee,tapCircleMaxSpeedCurve:Se,tapScrollCircleOptions:b,effectiveTrackLength:0,onScroll:n,scrollPosition:t}),{mainSizeKey:M,crossSizeKey:z,positionKey:ue,selectDelta:$,getPointerCoordinate:fe,arrowLabels:W,arrowIcons:G,directionClass:ge,orientation:Oe}=se,Me=Math.max(Ve,1),ve=e/s,ye=Math.max(e-m*2,0),Ae=ve*ye,ie=Math.min(Math.max(Tt,Ae||0),ye||Tt),h=s-e,P=Math.max(ye-ie,0),te=h<=0||P<=0?0:t/h*P,Ne=te+ie/2,q=s>e||Y,$e=q&&u;r.useLayoutEffect(()=>{v.current={viewportSize:e,maxScrollPosition:h,scrollBarVisible:q,effectiveTapMaxDistance:Me,tapCircleMaxSpeedMultiplier:S,tapCircleMinSpeedMultiplier:ee,tapCircleMaxSpeedCurve:Se,tapScrollCircleOptions:b,effectiveTrackLength:P,onScroll:n,scrollPosition:t}}),r.useLayoutEffect(()=>{le.current=t},[t]),r.useLayoutEffect(()=>{Ie.current=n},[n]),r.useEffect(()=>{i||ae(!1)},[i]);const De=Gt({isDragging:Y,isThumbHovered:me,enableThumbDrag:i}),Pe=r.useCallback((a,R)=>{const y=v.current,j=R??le.current;if(Ie.current){const C=Ie.current(a,j);if(typeof C=="number"&&Number.isFinite(C))return le.current=C,C}const o=typeof a=="function"?a(j):a,l=Math.max(y.maxScrollPosition,0),f=y.scrollBarVisible?de(o,0,l):0;return le.current=f,f},[]),Ye=r.useCallback(a=>{const R=v.current,y=le.current;if(!R.scrollBarVisible||R.maxScrollPosition<=0){const C=Pe(0,y),V=C-y;return{nextPosition:C,actualDelta:V,reachedBoundary:!0}}if(a===0)return{nextPosition:y,actualDelta:0,reachedBoundary:!1};const o=Pe(C=>de(C+a,0,R.maxScrollPosition),y),l=o-y,f=l===0||a<0&&o<=0||a>0&&o>=R.maxScrollPosition;return{nextPosition:o,actualDelta:l,reachedBoundary:f}},[Pe]),he=r.useCallback(()=>{U.current!==null&&(window.cancelAnimationFrame(U.current),U.current=null),Te.current=null},[]),Re=r.useCallback(()=>{pe.current={...St},_(!1),T.current?.reset(),he()},[he]),Ke=r.useCallback(a=>{const R=pe.current,y=v.current;if(!R.active||R.direction===0){he();return}if(!y.scrollBarVisible||y.maxScrollPosition<=0){he();return}const j=Te.current??a,o=Math.max((a-j)/1e3,0),l=Math.min(o,$t);if(Te.current=a,l<=0){U.current=window.requestAnimationFrame(Ke);return}const f=Math.min(R.distance,y.effectiveTapMaxDistance)/y.effectiveTapMaxDistance,C=f**1.1,V=typeof y.tapScrollCircleOptions?.maxSpeedMultiplier=="number",w=Math.max(y.viewportSize*y.tapCircleMinSpeedMultiplier,40),H=V?w:1200;let L=Math.max(y.viewportSize*y.tapCircleMaxSpeedMultiplier,H);const O=y.tapCircleMaxSpeedCurve;if(O){const ft=Math.max(O.exponentialSteepness,0),Nt=Math.max(O.exponentialScale??y.tapCircleMaxSpeedMultiplier,0),Lt=ft===0?f:Math.expm1(ft*f),vt=ft===0?1:Math.expm1(ft)||1,Ft=vt===0?f:Math.min(Math.max(Lt/vt,0),1),_t=y.viewportSize*Nt*Ft;L=Math.min(L,Math.max(_t,w))}const we=Math.max(L,w),be=Math.max(O?.easedOffset??0,0),_e=Math.min(1,C+be),Ge=w+(we-w)*_e,st=R.direction*Ge*l,{actualDelta:it,reachedBoundary:Dt}=Ye(st);if(Dt||it===0){he();return}U.current=window.requestAnimationFrame(Ke)},[Ye,he]),tt=r.useCallback(()=>{U.current===null&&(Te.current=null,U.current=window.requestAnimationFrame(Ke))},[Ke]);r.useEffect(()=>()=>{he()},[he]);const oe=r.useCallback(a=>{pe.current=a,_(a.active),a.active&&a.direction!==0?tt():he()},[tt,he]);r.useEffect(()=>{k||Re()},[Re,k]),r.useEffect(()=>{const a=R=>{const j=R.detail?.paneId;j&&p&&j!==p||Re()};return window.addEventListener(xt,a),()=>{window.removeEventListener(xt,a)}},[p,Re]),r.useEffect(()=>{if(!k)return;const a=R=>{if(!pe.current.active||pe.current.pointerId===R.pointerId)return;const y=R.target;if(!(y instanceof Node)){Re();return}T.current?.getElement()?.contains(y)||Re()};return document.addEventListener("pointerdown",a,!0),()=>{document.removeEventListener("pointerdown",a,!0)}},[Re,k]);const rt=a=>{if(!q||P<=0||h<=0)return 0;const R=de(a,0,P);return de(R/P*h,0,h)},nt=r.useCallback(a=>{const{scrollBarVisible:R,effectiveTrackLength:y,maxScrollPosition:j}=v.current;if(N.debug("[ScrollBar] calculateScrollPositionFromThumb",{thumbPos:a,trackLen:y,maxScroll:j}),y<=0||j<=0)return null;const o=de(a,0,y);return de(o/y*j,0,j)},[]),ke=r.useCallback(a=>{const R=Q.current;if(R.pointerId!==a.pointerId)return;const y=a.clientX-R.startClientX,j=a.clientY-R.startClientY,o=$(y,j);N.debug("[ScrollBar] handleThumbPointerMove",{delta:o,startThumbPosition:R.startThumbPosition,clientY:a.clientY,startClientY:R.startClientY,metrics:v.current});const l=nt(R.startThumbPosition+o);l!==null&&Pe(l),a.cancelable&&a.preventDefault()},[$,nt,Pe]),Ze=r.useCallback(a=>{if(Q.current.pointerId===a.pointerId)if(document.removeEventListener("pointermove",ke),document.removeEventListener("pointerup",Ze),document.removeEventListener("pointercancel",Ze),Q.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0},Z(!1),J.current){const y=J.current.getBoundingClientRect();a.clientX>=y.left&&a.clientX<=y.right&&a.clientY>=y.top&&a.clientY<=y.bottom||ae(!1)}else ae(!1)},[ke]),at=a=>{const R=Math.max(Math.round(e/Xt),Ht);Ye(a*R)},{handleArrowPointerDown:pt,handleArrowPointerUp:Le,handleArrowKeyDown:We}=Zt({canUseArrowButtons:$e,enableArrowButtons:u,resetTapScroll:Re,scrollByStep:at}),qe=a=>{if(q){if(!i){a.preventDefault(),a.stopPropagation();return}a.pointerType==="mouse"&&a.button!==0||a.ctrlKey||(Re(),Q.current={pointerId:a.pointerId,startThumbPosition:te,startClientX:a.clientX,startClientY:a.clientY},document.addEventListener("pointermove",ke),document.addEventListener("pointerup",Ze),document.addEventListener("pointercancel",Ze),Z(!0),ae(!0),a.preventDefault(),a.stopPropagation())}},He=a=>{if(!q)return;if(!c){a.preventDefault(),a.stopPropagation();return}if(a.pointerType==="mouse"&&a.button!==0||a.ctrlKey)return;const R=a.currentTarget,y=R.getBoundingClientRect(),o=fe(a)-(d?y.left:y.top);Re();const l=o-ie/2,f=rt(l);Pe(f),R.setPointerCapture&&R.setPointerCapture(a.pointerId),E.current={pointerId:a.pointerId,startThumbPosition:l,startClientX:a.clientX,startClientY:a.clientY},a.preventDefault(),a.stopPropagation()},Fe=a=>{const R=E.current;if(R.pointerId!==a.pointerId)return;const y=a.clientX-R.startClientX,j=a.clientY-R.startClientY,o=$(y,j),l=rt(R.startThumbPosition+o);Pe(l),a.cancelable&&a.preventDefault()},Xe=a=>{if(E.current.pointerId!==a.pointerId)return;const R=a.currentTarget;R.hasPointerCapture(a.pointerId)&&R.releasePointerCapture(a.pointerId),E.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0},a.preventDefault(),a.stopPropagation()},Be=a=>{if(E.current.pointerId!==a.pointerId)return;const R=a.currentTarget;R.hasPointerCapture(a.pointerId)&&R.releasePointerCapture(a.pointerId),E.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0}},lt=r.useMemo(()=>de((ne?1:.8)*Ce,0,1),[ne,Ce]),ct=r.useMemo(()=>{const R=`calc(50% - ${K/2}px + ${xe}px)`;return{left:ce,top:R}},[ce,xe,K]),ut=(a,R,y,j)=>F.jsx("button",{type:"button",tabIndex:-1,className:"aqvs-scrollbar-arrow-button",style:{[M]:m,[z]:m},"aria-label":R,onPointerDown:pt(a),onPointerUp:Le,onPointerLeave:Le,onPointerCancel:Le,onKeyDown:We(a),"aria-disabled":!u,disabled:!$e,children:F.jsx("span",{"aria-hidden":"true",children:y})},j),Qe=x&&q?{orientation:Oe,scrollPosition:t,maxScrollPosition:h,contentSize:s,viewportSize:e,thumbSize:ie,thumbPosition:te,thumbCenter:Ne,trackSize:ye,isDragging:Y,isTapScrollActive:ne,visibleStartIndex:D,visibleEndIndex:X}:null;return F.jsxs("div",{className:Je.twMerge("aqvs-scrollbar",ge,!q&&"pointer-events-none opacity-0",g),style:{[M]:e,[z]:m},role:"scrollbar",tabIndex:-1,"aria-controls":p,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":h,"aria-orientation":d?"horizontal":"vertical",children:[!d&&q&&k&&F.jsx(yt,{ref:T,className:Je.twMerge("aqvs-scrollbar-tap-circle-wrapper",I),size:K,maxVisualDistance:Me,style:ct,opacity:lt,renderVisual:Ue,onDragChange:oe},"tap-circle"),ut(-1,W[0],G[0],"arrow-start"),F.jsxs("div",{className:"aqvs-scrollbar-track",style:{borderRadius:m/2},onPointerDown:He,onPointerMove:Fe,onPointerUp:Xe,onPointerCancel:Be,"aria-disabled":!c,children:[Qe&&F.jsx("div",{className:"aqvs-scrollbar-overlay","aria-hidden":!0,children:x?.(Qe)},"overlay"),F.jsx("div",{className:Je.twMerge("aqvs-scrollbar-thumb-wrapper",!(q||Y)&&"pointer-events-none opacity-0"),style:{[M]:ie,[ue]:te,...d?{top:0,bottom:0}:{left:0,right:0}},onPointerDown:qe,role:"slider","aria-orientation":d?"horizontal":"vertical","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":h,"aria-disabled":!i,tabIndex:-1,children:F.jsx("div",{ref:J,className:Je.twMerge("aqvs-scrollbar-thumb",d?"aqvs-scrollbar-thumb-horizontal":"aqvs-scrollbar-thumb-vertical"),"data-thumb-state":De,style:{borderRadius:m-1,cursor:i?"pointer":"default"},onMouseEnter:()=>{i&&ae(!0)},onMouseLeave:()=>{i&&ae(!1)}},"thumb")},"thumb-wrapper")]},"track"),ut(1,W[1],G[1],"arrow-end")]})},ot={maxVelocity:6,minVelocity:.02,deceleration:.0025,velocitySampleWindow:90,startVelocityThreshold:.04},dt=(s,e,t)=>{for(const[n,i,c]of e)t==="add"?s.addEventListener(n,i,c):s.removeEventListener(n,i,c)},Et=r.forwardRef(({children:s,contentSize:e,viewportSize:t,scrollBarWidth:n=12,enableThumbDrag:i=!0,enableTrackClick:c=!0,enableArrowButtons:u=!0,enablePointerDrag:d=!0,onScroll:m,className:g,style:p,background:b,tapScrollCircleOptions:A,inertiaOptions:x,itemCount:D,renderThumbOverlay:X,wheelSpeedMultiplier:Y=1,onWheelHorizontal:Z,contentInsets:me,visibleStartIndex:ae,visibleEndIndex:ne,renderOverlay:_,initialScrollPosition:J=0},Q)=>{const E=r.useRef(J),le=r.useRef(null),Ie=r.useRef(null),pe=r.useRef(Z);r.useEffect(()=>{pe.current=Z},[Z]);const T=r.useRef({frame:null,velocity:0,lastTimestamp:null}),U=r.useMemo(()=>({maxVelocity:x?.maxVelocity??ot.maxVelocity,minVelocity:x?.minVelocity??ot.minVelocity,deceleration:x?.deceleration??ot.deceleration,velocitySampleWindow:x?.velocitySampleWindow??ot.velocitySampleWindow,startVelocityThreshold:x?.startVelocityThreshold??ot.startVelocityThreshold}),[x]),Te=r.useMemo(()=>({top:Math.max(0,me?.top??0),bottom:Math.max(0,me?.bottom??0)}),[me]);N.debug("[ScrollPane] ScrollPane rendered",{contentSize:e,viewportSize:t,scrollBarWidth:n,className:g,style:p,tapScrollCircleOptions:A,inertiaOptions:x,enablePointerDrag:d,contentInsets:Te});const Ee=r.useRef({contentSize:e,viewportSize:t});Ee.current={contentSize:e,viewportSize:t};const se=r.useMemo(()=>e>t,[e,t]),k=r.useCallback(v=>{const{contentSize:M,viewportSize:z}=Ee.current,ue=M>z,$=E.current;if(N.debug("[ScrollPane] scrollTo called",{newPosition:v,contentSize:M,viewportSize:z,currentIsScrollable:ue,prevPosition:$}),!ue)return E.current!==0&&(E.current=0,m?.(0,$)),E.current;const fe=typeof v=="function"?v(E.current):v,W=Math.max(M-z,0),G=de(fe,0,W);return E.current!==G&&(E.current=G,m?.(G,$)),E.current},[m]),K=r.useCallback(()=>{const v=T.current;v.frame!==null&&cancelAnimationFrame(v.frame),v.frame=null,v.velocity=0,v.lastTimestamp=null},[]),ce=r.useRef(K);r.useEffect(()=>{ce.current=K},[K]);const xe=r.useCallback(v=>{if(!se)return;const{maxVelocity:M,minVelocity:z,deceleration:ue,startVelocityThreshold:$}=U,fe=de(v,-M,M);if(Math.abs(fe)<$)return;K(),T.current.velocity=fe,T.current.lastTimestamp=null;const W=G=>{const ge=T.current;if(ge.lastTimestamp===null){ge.lastTimestamp=G,ge.frame=requestAnimationFrame(W);return}const Oe=G-ge.lastTimestamp;if(ge.lastTimestamp=G,Oe<=0){ge.frame=requestAnimationFrame(W);return}const Me=ge.velocity;let ve=Me;const ye=ue*Oe;Me>0?ve=Math.max(0,Me-ye):Me<0&&(ve=Math.min(0,Me+ye));const ie=(Me+ve)/2*Oe,h=E.current;ie!==0&&k(De=>De+ie);const P=E.current,{contentSize:te,viewportSize:Ne}=Ee.current,q=Math.max(te-Ne,0);ge.velocity=ve;const $e=P===h||P<=0&&ve<=0||P>=q&&ve>=0;if(Math.abs(ve)<z||$e){K();return}ge.frame=requestAnimationFrame(W)};T.current.frame=requestAnimationFrame(W)},[se,U,k,K]),I=r.useRef(xe);r.useEffect(()=>{I.current=xe},[xe]),r.useLayoutEffect(()=>{Ee.current={contentSize:e,viewportSize:t}},[e,t]),r.useLayoutEffect(()=>{const v=Ie.current;if(!v)return;const M=()=>{v.scrollTop!==0&&(N.debug("[ScrollPane] Native scroll detected, resetting to 0",{scrollTop:v.scrollTop}),v.scrollTop=0),v.scrollLeft!==0&&(v.scrollLeft=0)};return v.addEventListener("scroll",M),()=>v.removeEventListener("scroll",M)},[]),r.useLayoutEffect(()=>{if(se){N.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change",{contentSize:e,viewportSize:t,scrollPosition:E.current});const v=de(e-t,0,e);E.current>v&&k(v)}else k(0)},[se,k,e,t]),r.useEffect(()=>{const v=z=>{if(pe.current){const $=z.shiftKey&&z.deltaX===0,fe=$?z.deltaY:z.deltaX,W=$?0:z.deltaY;if(fe!==0&&Math.abs(fe)>=Math.abs(W)){z.preventDefault(),K();let G=fe;z.deltaMode===1?G*=16:z.deltaMode===2&&(G*=t),pe.current(G);return}}if(!se)return;z.preventDefault(),K();let ue=z.deltaY;z.deltaMode===1?ue*=16:z.deltaMode===2&&(ue*=t),Y!==1&&(ue*=Y),N.debug("[ScrollPane] wheel event",{deltaY:ue,scrollPosition:E.current,wheelSpeedMultiplier:Y,deltaMode:z.deltaMode,scrollTop:Ie.current?.scrollTop}),k($=>$+ue)},M=le.current;return M&&M.addEventListener("wheel",v,{passive:!1}),()=>{M&&M.removeEventListener("wheel",v)}},[se,k,K,t,Y]),r.useImperativeHandle(Q,()=>({scrollTo:v=>(K(),k(v)),getScrollPosition:()=>E.current,getContentSize:()=>e,getViewportSize:()=>t}),[k,e,t,K]);const Ve=r.useRef(k);r.useEffect(()=>{Ve.current=k},[k]);const S=r.useId(),ee=r.useRef({pointerId:null,startClientY:0,startScroll:0,isDragging:!1,shouldCancelNextClick:!1,clickResetTimer:null,velocitySamples:[]}),Ce=r.useRef(d);r.useEffect(()=>{Ce.current=d},[d]);const Ue=r.useRef(se);r.useEffect(()=>{Ue.current=se},[se]);const Se=r.useRef(U);return r.useEffect(()=>{Se.current=U},[U]),r.useEffect(()=>{if(d)return;const v=Ie.current,M=ee.current;M.pointerId&&v?.hasPointerCapture(M.pointerId)&&v.releasePointerCapture(M.pointerId),M.clickResetTimer!==null&&(window.clearTimeout(M.clickResetTimer),M.clickResetTimer=null),M.pointerId=null,M.startClientY=0,M.startScroll=0,M.isDragging=!1,M.shouldCancelNextClick=!1,M.velocitySamples=[]},[d]),r.useEffect(()=>{const v=Ie.current;if(!v)return;const M=6,z=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),ue=()=>{const h=ee.current;h.pointerId=null,h.startClientY=0,h.startScroll=0,h.isDragging=!1,h.velocitySamples=[]},$=()=>{const h=ee.current;h.clickResetTimer!==null&&(window.clearTimeout(h.clickResetTimer),h.clickResetTimer=null)},fe=h=>{const P=ee.current,te=z();P.velocitySamples.push({clientY:h,time:te});const Ne=Se.current.velocitySampleWindow;P.velocitySamples=P.velocitySamples.filter(q=>te-q.time<=Ne)},W=h=>h instanceof HTMLElement&&h.closest("[data-scrollpane-ignore-drag='true']")!==null,G=h=>{const P=ee.current;P.shouldCancelNextClick&&(h.preventDefault(),h.stopPropagation(),P.shouldCancelNextClick=!1)},ge=h=>{const P=ee.current;P.isDragging||(P.isDragging=!0,P.shouldCancelNextClick=!0,v.hasPointerCapture(h.pointerId)||v.setPointerCapture(h.pointerId),fe(h.clientY))},Oe=h=>{const P=ee.current;if(P.pointerId!==h.pointerId||!(Ce.current&&Ue.current)||!P.isDragging&&(Math.abs(h.clientY-P.startClientY)<M||(ge(h),!P.isDragging)))return;fe(h.clientY);const te=h.clientY-P.startClientY,Ne=P.startScroll-te;Ve.current(Ne),h.cancelable&&h.preventDefault()},Me=h=>{const P=ee.current;if(P.pointerId!==h.pointerId)return;P.isDragging&&P.shouldCancelNextClick&&h.cancelable&&(h.preventDefault(),h.stopPropagation()),v.hasPointerCapture(h.pointerId)&&v.releasePointerCapture(h.pointerId);let te=0;if(P.isDragging&&P.velocitySamples.length>=2){const q=P.velocitySamples,$e=Se.current.velocitySampleWindow,De=q[q.length-1],Pe=q.find(Ye=>De.time-Ye.time<=$e)??q[0];if(De&&Pe&&De.time!==Pe.time){const Ye=De.clientY-Pe.clientY,he=De.time-Pe.time;te=-(Ye/he)}}$(),P.shouldCancelNextClick&&(P.clickResetTimer=window.setTimeout(()=>{const q=ee.current;q.shouldCancelNextClick=!1,q.clickResetTimer=null},0));const Ne=Se.current.startVelocityThreshold;ue(),Math.abs(te)>=Ne&&I.current?.(te)},ve=h=>{if(!(Ce.current&&Ue.current)||h.button!==0&&h.pointerType==="mouse"||h.ctrlKey||h.metaKey||h.altKey||W(h.target))return;window.dispatchEvent(new CustomEvent(xt,{detail:{paneId:S}})),ce.current?.();const P=ee.current;$(),P.pointerId=h.pointerId,P.startClientY=h.clientY,P.startScroll=E.current,P.isDragging=!1,P.shouldCancelNextClick=!1,P.velocitySamples=[]},ye=h=>{const P=ee.current;P.pointerId===h.pointerId&&(P.shouldCancelNextClick=!1,v.hasPointerCapture(h.pointerId)&&v.releasePointerCapture(h.pointerId),$(),ue())},Ae=[["click",G,!0],["pointerdown",ve,{passive:!1}],["pointermove",Oe,{passive:!1}],["pointerup",Me,void 0],["pointercancel",ye,void 0]],ie=[["pointermove",Oe,{passive:!1}],["pointerup",Me,void 0],["pointercancel",ye,void 0]];return dt(v,Ae,"add"),dt(window,ie,"add"),()=>{dt(v,Ae,"remove"),dt(window,ie,"remove");const h=ee.current;h.pointerId!==null&&v.hasPointerCapture(h.pointerId)&&v.releasePointerCapture(h.pointerId),$(),ue()}},[S]),F.jsxs("div",{ref:le,className:Je.twMerge("aqvs-scroll-pane",g),style:p,children:[F.jsxs("div",{ref:Ie,className:Je.twMerge("aqvs-scroll-pane-content"),style:{height:t,paddingTop:Te.top,paddingBottom:Te.bottom,...d?{touchAction:"none"}:{}},id:S,children:[b,s(E.current)]}),F.jsx(wt,{contentSize:e,viewportSize:t,scrollPosition:E.current,onScroll:k,enableThumbDrag:i,enableTrackClick:c,enableArrowButtons:u,scrollBarWidth:n,ariaControls:S,tapScrollCircleOptions:A,itemCount:D,renderThumbOverlay:X,visibleStartIndex:ae,visibleEndIndex:ne},"scrollbar"),_?.()]})}),Mt=(s,e,t)=>Math.min(Math.max(s,e),t),Qt=({dragState:s,normalizedDistance:e,sizeScale:t,size:n})=>{const i=Math.max(n/2,1),c=1+e*.65,u=Math.max(.65,1-e*.25),d=s.direction*e*26*t,m=.8+e*.18,g=3*t,p=6*t,b=22*t,A=Math.abs(d)+p,x=d>0?g:-Math.abs(d)-g,D=Math.max(2.5,3*t),X=Mt(s.offsetX,-i,i),Y=Mt(s.offsetY,-i,i),Z=i*.35,me=X/i*Z,ae=Y/i*Z,ne=me*.45,_=ae*.45,J=Math.max(b*.38,6),Q=.65+e*.2,E=s.active;return F.jsxs(F.Fragment,{children:[F.jsx("div",{className:"aqvs-tap-scroll-circle-gradient",style:{transform:`scale(${u}, ${c})`,transition:E?"40ms transform ease-out":"200ms ease transform"}}),F.jsx("div",{className:"aqvs-sample-visual-rod",style:{width:b,height:b,transform:`translate(calc(-50% + ${me}px), calc(-50% + ${ae}px)) scale(${u}, ${m*c})`,transition:E?"70ms transform ease-out":"200ms ease transform"}}),F.jsx("div",{className:"aqvs-sample-visual-pupil",style:{width:J,height:J,transform:`translate(calc(-50% + ${ne}px), calc(-50% + ${_}px)) scale(${u}, ${c})`,opacity:Q,boxShadow:"0 0 8px rgba(255,255,255,0.45)",transition:E?"120ms opacity 150ms, 120ms transform ease-out ease-out":"220ms ease transform, 240ms opacity ease"}}),F.jsx("div",{className:"aqvs-sample-visual-highlight",style:{width:D,height:A,transform:`translate(-50%, ${x}px)`,opacity:e,transition:E?"40ms height, 60ms opacity ease-out ease-out":"200ms ease height, 120ms ease opacity"}})]})},er=s=>{if(!Number.isFinite(s))return 0n;const e=Math.trunc(s);return e<=0?0n:BigInt(e)},mt=s=>{if(s<=0||!Number.isFinite(s))return 0;const e=Math.trunc(s),t=BigInt(e)&-BigInt(e);return Number(t)};class kt{tree;deltas;size;baseValue;valueFn;total;constructor(e,t,n){this.reset(e,t,n)}reset(e,t,n){if(this.size=e,this.tree=new Map,this.deltas=new Map,this.total=void 0,typeof t=="function"){if(this.valueFn=t,this.size>0){const c=n?.sampleRange??{from:0,to:Math.min(99,this.size-1)},{mode:u,materializedValues:d}=this._calculateMode(c.from,c.to);if(this.baseValue=u,n?.materialize)for(let m=0;m<d.length;m++){const g=d[m],p=c.from+m;if(p>=this.size)break;const b=g-this.baseValue;this.deltas.set(p,b),this._updateTree(p,b)}}else this.baseValue=0;this.total=this.getTotal()}else this.valueFn=void 0,this.baseValue=t,this.total=this.baseValue*this.size}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)}_calculateMode(e,t){if(!this.valueFn)return{mode:0,materializedValues:[]};const n=[];for(let g=e;g<=t&&!(g>=this.size);g++)n.push(this.valueFn(g));const i=[...n];if(n.length===0)return{mode:0,materializedValues:[]};n.sort((g,p)=>g-p);const c=Math.floor(n.length/2);let u;n.length%2===0?u=Math.floor((n[c-1]+n[c])/2):u=n[c];const d=new Map;let m=0;for(const g of n){const p=(d.get(g)??0)+1;d.set(g,p),p>m&&(m=p)}if(m>n.length*.2){const g=[];for(const[b,A]of d.entries())A===m&&g.push(b);const p=g.reduce((b,A)=>b+A,0);u=Math.floor(p/g.length)}return{mode:u,materializedValues:i}}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){for(const{index:t,change:n}of e){if(t<0||t>=this.size)throw new Error(`Index ${t} out of bounds`);const i=this.deltas.get(t)??0;this.deltas.set(t,i+n),this._updateTree(t,n)}return this.total}_updateTree(e,t){if(t===0)return;let n=e+1;for(;n<=this.size;){this.tree.set(n,(this.tree.get(n)??0)+t);const i=mt(n);if(i===0)break;n+=i}this.total!==void 0&&(this.total+=t)}_buildDeltaUpdates(e){const t=[];for(const{index:n,value:i}of e){if(n<0||n>=this.size)throw new Error(`Index ${n} out of bounds`);if(i<0)throw new Error("Value cannot be negative.");const c=this.deltas.has(n)?(this.deltas.get(n)??0)+this.baseValue:this.baseValue,u=i-c;u!==0&&t.push({index:n,change:u})}return t}_computeTreeTotal(){if(this.size<=0)return 0;let e=0,t=this.size;for(;t>0;){e+=this.tree.get(t)??0;const n=mt(t);if(n===0)break;t-=n}return e+this.baseValue*this.size}_materialize(e,t=!0){if(this.valueFn){const n=this.deltas.get(e)??0,c=this.valueFn(e)-this.baseValue;if(c!==n&&(this.deltas.set(e,c),t)){const u=c-n;this._updateTree(e,u)}}}_materializeRanges(e,t,n=!1){if(!(e?.materialize&&this.valueFn))return;const i=e.ranges;if(i&&i.length>0){for(const d of i){const m=d.from,g=Math.min(d.to,this.size-1);for(let p=m;p<=g;p++)this._materialize(p)}if(t===void 0)return;if(n){this._materialize(t);return}const c=i[0].from,u=i[i.length-1].to;t>=c&&t<=u&&this._materialize(t);return}t!==void 0&&this._materialize(t)}_findIndex(e,t={},n){if(this.size>2147483647)return this._findIndexLarge(e,t,n);if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};let i=0,c=0,u=1;for(;u<<1<=this.size;)u<<=1;for(;u>0;u>>=1){const g=i+u;if(g<=this.size){const b=(this.tree.get(g)??0)+this.baseValue*u;(n?c+b<e:c+b<=e)&&(i=g,c+=b)}}const d=n?i:i-1;if(d<0||d>=this.size)return{index:-1,total:this.total??this.getTotal(),cumulative:void 0,currentValue:void 0,safeIndex:void 0};const m=this.prefixSum(d,t);return{index:d,total:this.total??m.total,cumulative:m.cumulative,currentValue:m.currentValue,safeIndex:m.safeIndex}}_findIndexLarge(e,t,n){if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};const i=er(this.size);if(i===0n)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};let c=0n,u=i-1n,d,m,g,p=this.total;for(;c<=u;){const x=c+u>>1n,D=Number(x),X=this.prefixSum(D,t);if(g=X,p=X.total,n?X.cumulative>=e:X.cumulative<=e)if(d=x,m=X,n){if(x===0n)break;u=x-1n}else c=x+1n;else if(n)c=x+1n;else{if(x===0n)break;u=x-1n}}const b=m??g;return{index:d!==void 0?Number(d):-1,total:p,cumulative:b?.cumulative,currentValue:b?.currentValue,safeIndex:b?.safeIndex}}prefixSum(e,t){if(e<0)return{cumulative:0,total:this.total,currentValue:0,safeIndex:0};const n=de(e,0,this.size-1),i=t?.materializeOption;this._materializeRanges(i,n,!0);let c=0,u=n+1;for(;u>0;){const m=this.tree.get(u)??0;c+=m;const g=mt(u);if(g===0)break;u-=g}const d=i?.materialize?this.get(n):(this.deltas.get(n)||0)+this.baseValue;return{cumulative:c+this.baseValue*(n+1),total:this.total,currentValue:d,safeIndex:n}}get(e,t){if(e<0||e>=this.size)throw new Error("Index out of bounds");const n=t?.materializeOption;return this._materializeRanges(n,e),(this.deltas.get(e)??0)+this.baseValue}getTotal(e){const t=e?.materializeOption;if(this._materializeRanges(t),this.total===void 0)if(this.size===0)this.total=0;else{this.total=this._computeTreeTotal();const n=this.prefixSum(this.getSize()-1);n.cumulative!==n.total&&N.error("Inconsistent Fenwick Tree state")}return this.total}rebuildTree(e){if(e?.materialize&&this.valueFn){const n=this.valueFn;this.reset(this.size,i=>n(i),{materialize:!0});return}const t=new Map;for(const[n,i]of this.deltas.entries()){if(i===0)continue;let c=n+1;for(;c<=this.size;){t.set(c,(t.get(c)??0)+i);const u=mt(c);if(u===0)break;c+=u}}this.tree=t,this.total=this._computeTreeTotal()}calculateAccumulatedError(){if(this.total===void 0)return 0;let e=this.baseValue*this.size;for(const t of this.deltas.values())e+=t;return this.total-e}changeSize(e){const t=this.size;if(e===t)return;if(e<t)for(const i of this.deltas.keys())i>=e&&this.deltas.delete(i);this.size=e,this.rebuildTree();const n=this.prefixSum(this.getSize()-1);n.cumulative!==n.total&&N.error("Inconsistent Fenwick Tree state")}getSize(){return this.size}findIndexAtOrAfter(e,t){return this._findIndex(e,t??{},!0)}findIndexAtOrBefore(e,t){return this._findIndex(e,t??{},!1)}}const Vt=(s,e,t)=>{const n=Math.max(0,s),i=r.useRef(null),c=r.useRef({size:n,valueOrFn:e,options:t});i.current===null&&(i.current=new kt(n,e,t));const u=i.current,d=c.current,m=d.size!==n,g=d.valueOrFn!==e,p=d.options!==t;if(g||p){const b=t?.resetOnValueFnChange??!0;p||g&&b?(t?.debug&&N.debug("[useFenwickMapTree] reset",{valueOrFnChanged:g,optionsChanged:p}),u.reset(n,e,t)):(m&&(t?.debug&&N.debug("[useFenwickMapTree] resize (with valueFn change)",{from:d.size,to:n}),u.changeSize(n)),t?.debug&&N.debug("[useFenwickMapTree] setValueFn (no reset)",{valueOrFnChanged:g}),u.setValueFn(e,{reset:!1})),c.current={size:n,valueOrFn:e,options:t}}else m&&(t?.debug&&N.debug("[useFenwickMapTree] resize",{from:d.size,to:n}),d.size===0&&n>0?u.reset(n,e,t):u.changeSize(n),c.current={size:n,valueOrFn:e,options:t});return u};class tr{key;value;prev=null;next=null;constructor(e,t){this.key=e,this.value=t}}class Pt{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 At(s){const e=r.useRef(new Map),t=r.useRef(new Pt);r.useEffect(()=>{for(;e.current.size>s;){const p=t.current.removeHead();if(p)e.current.delete(p.key);else break}},[s]);const n=r.useCallback(p=>{const b=e.current.get(p);if(b)return t.current.moveToTail(b),b.value},[]),i=r.useCallback((p,b)=>{if(s<=0)return;let A=e.current.get(p);if(A)A.value=b,t.current.moveToTail(A);else{if(e.current.size>=s){const x=t.current.removeHead();x&&e.current.delete(x.key)}A=new tr(p,b),e.current.set(p,A),t.current.addToTail(A)}},[s]),c=r.useCallback(p=>e.current.has(p),[]),u=r.useCallback(p=>{const b=e.current.get(p);b&&(t.current.remove(b),e.current.delete(p))},[]),d=r.useCallback(()=>{e.current.clear(),t.current=new Pt},[]),[m,g]=r.useState(()=>({get:n,set:i,has:c,remove:u,clear:d}));return r.useEffect(()=>g({get:n,set:i,has:c,remove:u,clear:d}),[n,i,c,u,d]),m}const rr=1e4,nr=()=>{const{get:s,set:e,has:t,clear:n}=At(rr);return{get:s,set:e,has:t,clear:n}},re=(s,e)=>e<=0?0:de(s,0,e-1),Rt=s=>({top:Math.max(0,s?.top??0),bottom:Math.max(0,s?.bottom??0)}),je=(s,e)=>s<=e?0:s-e,et=(s,e)=>s<=0?e:s+e,bt=s=>{if(!Number.isFinite(s))return 0n;const e=Math.trunc(s);return e<=0?0n:BigInt(e)},sr=(s,e,t,n,i,c,u,d)=>{const m=bt(n);if(m===0n)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const g=_=>_<0n?0n:_>=m?m-1n:_,p={materializeOption:{materialize:!1}},{index:b,cumulative:A}=c.findIndexAtOrAfter(s,p);let x;b===-1?x=m-1n:(A===s?x=bt(b+1):x=bt(b),x>=m&&(x=m-1n)),s<=0&&(x=0n),d&&s>=u&&(x=m-1n);const D=_=>{let J=0,Q=_,E=_,le=0n;for(;Q<m&&J<e;){const Ie=Number(Q),pe=i(Ie);if(J+=pe,E=Q,Q+=1n,le+=1n,!Number.isFinite(pe)||pe<=0)break}return le===0n&&(E=_),{height:J,end:E}};let{height:X,end:Y}=D(x);if(X<e&&x>0n){let _=x,J=X;for(;_>0n&&J<e;){_-=1n;const E=Number(_),le=i(E);if(J+=le,!Number.isFinite(le)||le<=0)break}x=g(_);const Q=D(x);X=Q.height,Y=Q.end}const Z=g(x),me=g(Y),ae=g(Z-BigInt(Math.max(0,t))),ne=g(me+BigInt(Math.max(0,t)));return{renderingStartIndex:re(Number(ae),n),renderingEndIndex:re(Number(ne),n),visibleStartIndex:re(Number(Z),n),visibleEndIndex:re(Number(me),n)}},ir=(s,e,t,n,i,c,u)=>{if(n===0)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const d=Number.isFinite(u),m=d?Math.min(Math.max(0,s),u):Math.max(0,s);if(n>=Number.MAX_SAFE_INTEGER)return sr(m,e,t,n,i,c,u,d);const{index:g,cumulative:p,currentValue:b}=c.findIndexAtOrAfter(m,{materializeOption:{materialize:!1}}),A=g===-1?e<=0||(p??0)<m+(b??0)?n-1:0:g;let x=re(A,n),D=0;if(g!==-1&&p===m)x=re(g+1,n),D=0;else if(x===g&&p!==void 0&&b!==void 0)D=p-b-m;else{const{cumulative:ne,currentValue:_}=c.prefixSum(x,{materializeOption:{materialize:!1}});D=(ne??0)-(_??0)-m}const X=D;let Y=x;for(;Y<n&&D<e;)D+=i(Y),Y++;if(D<e&&x>0){let ne=D+Math.abs(Math.min(0,X)),_=x-1;for(;_>=0&&ne<e;)ne+=i(_),_--;for(x=re(_+1,n),D=0,Y=x;Y<n&&D<e;)D+=i(Y),Y++}const Z=re(x-t,n),me=re(Math.max(Y-1,x),n),ae=re(me+t,n);return{renderingStartIndex:Z,renderingEndIndex:ae,visibleStartIndex:x,visibleEndIndex:me}},Ct=(s,e,t)=>{const n=Math.max(0,e??0),i=r.useRef({last:0,id:null,arg:null}).current;return r.useEffect(()=>()=>{i.id!==null&&(cancelAnimationFrame(i.id),i.id=null)},[i]),r.useCallback(c=>{if(i.arg=c,i.id!==null)return;const u=d=>{if(i.id=null,i.arg===null)return;const m=d-i.last;if(n===0||i.last===0||m>=n){if(s.current)try{t(s.current,i.arg)}catch(g){console.error("[useThrottledInvoker] Error invoking callback",g)}i.arg=null,i.last=d}i.arg!==null&&(i.id=requestAnimationFrame(u))};i.id=requestAnimationFrame(u)},[n,t,s,i])},or=r.memo(({index:s,top:e,height:t,item:n,children:i,clipItemHeight:c,enableKeyboardNavigation:u,onKeyDown:d,onFocus:m,registerItemRef:g})=>{const p=r.useCallback(D=>g(s,D),[s,g]),b=r.useCallback(D=>d(D,s),[s,d]),A=r.useCallback(()=>m(s),[s,m]),x=r.useCallback(D=>{D.currentTarget.focus({preventScroll:!0})},[]);return F.jsx("div",{ref:p,"data-index":s,"data-virtualscroll-item":"true",className:"aqvs-item-container",style:{top:e,height:t,overflow:c?"hidden":void 0},tabIndex:u?-1:void 0,onPointerDown:u?x:void 0,onKeyDownCapture:u?b:void 0,onFocusCapture:u?A:void 0,children:i(n,s)})}),ar=({itemCount:s,getItem:e,getItemKey:t,getItemHeight:n,viewportSize:i,overscanCount:c=15,className:u,onScroll:d,onRangeChange:m,children:g,background:p,initialScrollIndex:b,initialScrollOffset:A,callbackThrottleMs:x=5,contentInsets:D,onItemFocus:X,scrollBarOptions:Y,behaviorOptions:Z,onWheelHorizontal:me},ae)=>{const{width:ne,enableThumbDrag:_,enableTrackClick:J,enableArrowButtons:Q,enableScrollToTopBottomButtons:E,renderThumbOverlay:le,tapScrollCircleOptions:Ie}=Y??{},{enablePointerDrag:pe,enableKeyboardNavigation:T=!0,wheelSpeedMultiplier:U,inertiaOptions:Te,clipItemHeight:Ee=!1,resetOnGetItemHeightChange:se=!1}=Z??{},k=r.useRef(null),K=r.useRef({renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0,scrollPosition:0,totalHeight:0}),ce=r.useRef(null),xe=r.useRef(!1);r.useEffect(()=>{se&&(ce.current=null)},[se]);const I=r.useMemo(()=>Rt(D),[D]),Ve=r.useMemo(()=>({sampleRange:{from:0,to:100},resetOnValueFnChange:se,materialize:!0}),[se]),S=Vt(s,n,Ve),[ee]=r.useState(()=>{let o=I.top,l=0;if(typeof b=="number"){const f=de(b,0,s-1),C=de(f-c*2,0,s-1),V=de(f+c*2,0,s-1),w=b>0?{materializeOption:{materialize:!0,ranges:[{from:C,to:V}]}}:void 0,{cumulative:H,total:B,currentValue:L}=S.prefixSum(b,w),O=Math.max(H-L,0);o=et(O,I.top),l=B??S.getTotal()}else typeof A=="number"&&(o=et(Math.max(A,0),I.top)),l=S.getTotal();return{position:o,total:l}}),[Ce,Ue]=r.useState(ee.position),[Se,v]=r.useState(ee.total),M=r.useRef(ee.position),z=r.useRef(I.top),ue=r.useRef(d??void 0),$=r.useRef(m??void 0),fe=r.useRef(new Map),W=r.useRef(null),G=r.useRef(null),[ge,Oe]=r.useState(null),[Me,ve]=r.useState(!1),ye=r.useRef(null),Ae=r.useRef(!1),ie=r.useRef(0),h=r.useRef(!1),P=r.useRef(s);P.current!==s&&(P.current=s,h.current=!0),r.useEffect(()=>{ue.current=d??void 0,$.current=m??void 0},[m,d]);const te=r.useCallback(o=>{if(T&&o&&typeof o.focus=="function")try{o.focus({preventScroll:!0})}catch{o.focus()}},[T]),Ne=r.useCallback((o,{position:l,totalHeight:f})=>{o(l,f)},[]),q=Ct(ue,x,Ne),$e=r.useCallback((o,l)=>{o(l)},[]),De=Ct($,x,$e);r.useEffect(()=>(xe.current=!0,()=>{xe.current=!1}),[]),r.useEffect(()=>{T||(fe.current.clear(),W.current=null,G.current=null)},[T]);const Pe=r.useCallback((o,l)=>{if(!l){fe.current.delete(o);return}T&&(fe.current.set(o,l),W.current===o&&(W.current=null,G.current=o,te(l)))},[T,te]),Ye=.01,he=r.useRef({rafId:null,loopActive:!1,idleFrames:0,lastRenderedPosition:ee.position}),Re=r.useCallback(()=>{const o=he.current;o.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(o.rafId),o.rafId=null,o.loopActive=!1,o.idleFrames=0},[]);r.useEffect(()=>()=>{Re()},[Re]);const Ke=r.useCallback(()=>{const o=he.current;o.rafId=null;const l=M.current,f=je(l,I.top),C=S.getTotal();if(Ue(w=>Math.abs(w-l)<Ye?w:l),q({position:f,totalHeight:C}),Math.abs(o.lastRenderedPosition-l)>=Ye?(o.lastRenderedPosition=l,o.idleFrames=0):o.idleFrames+=1,o.idleFrames>=2){Re();return}if(typeof requestAnimationFrame=="function"){o.rafId=requestAnimationFrame(Ke);return}o.loopActive=!1},[S,I.top,q,Re]),tt=r.useCallback(()=>{const o=he.current;if(o.idleFrames=0,!o.loopActive){if(o.loopActive=!0,typeof requestAnimationFrame=="function"){o.rafId=requestAnimationFrame(Ke);return}o.loopActive=!1}},[Ke]),oe=r.useCallback((o,l)=>{const f=l?.immediate??!1,C=je(o,I.top);if(M.current=o,f){he.current.lastRenderedPosition=o,he.current.idleFrames=0,Ue(o),q({position:C,totalHeight:S.getTotal()});return}tt()},[tt,S,I.top,q]),rt=r.useRef(!1);r.useEffect(()=>{if(!rt.current)if(rt.current=!0,typeof A=="number"){const o=et(Math.max(A,0),I.top),l=Math.abs(o-M.current)>.5;oe(o,{immediate:!0}),l&&k.current?.scrollTo(o)}else oe(M.current,{immediate:!0})},[A,I.top,oe]),r.useEffect(()=>{const o=S.getTotal();Se!==o&&v(o)},[S,Se,s]),r.useEffect(()=>{if(ce.current!==null){const{index:o,align:l,offset:f}=ce.current,C=re(o,s),{cumulative:V,currentValue:w}=S.prefixSum(C,{materializeOption:{materialize:!1}});if(V!==void 0&&w!==void 0){const H=Math.max(V-w,0);let B=H;l==="bottom"?B=V-i:l==="center"&&(B=H+w/2-i/2),f&&(B-=f),B=Math.max(0,B);const L=Math.max(0,Se+I.top+I.bottom-i),O=Math.min(et(B,I.top),L);Math.abs(O-M.current)>1&&(N.debug("[VirtualScroll] Drift correction",{from:M.current,to:O,targetIndex:C}),ie.current===0&&(ie.current+=1),k.current?.scrollTo(O),oe(O,{immediate:!0}))}}h.current=!1},[Se,S,s,I.top,oe,i,I.bottom]),r.useEffect(()=>{const o=z.current;if(o===I.top)return;const l=je(M.current,o),f=et(l,I.top);z.current=I.top,M.current=f,k.current?.scrollTo(f),oe(f,{immediate:!0})},[I.top,oe]);const nt=r.useCallback((o,l)=>{const f=re(o,s),C=S.get(f),V=l-C,w=S.update(f,l);w!==void 0&&v(w),N.debug("[VirtualScroll] Updated item size manually",{index:f,size:l,total:w});let H=ce.current?ce.current.index:null;if(H===null){const B=M.current,L=Rt(D).top,O=je(B,L),{index:we}=S.findIndexAtOrAfter(O,{materializeOption:{materialize:!1}});H=we}if(H!==-1&&f<H&&V!==0){const B=M.current,L=B+V;ie.current+=1,oe(L,{immediate:!0}),k.current?.scrollTo(L),N.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)",{from:B,to:L,causedByIndex:f,delta:V,activeVisibleStartIndex:H})}},[S,s,oe,D]),ke=r.useCallback((o,l)=>{if(!k.current)return;const f=re(o,s),C=re(f-c*2,s),V=re(f+c*2,s),{cumulative:w,total:H,currentValue:B}=S.prefixSum(f,{materializeOption:{materialize:!0,ranges:[{from:C,to:V}]}});if(N.debug("[VirtualScroll] Scrolling to index:",f,"ItemBottom:",w,"Total height:",H,"ItemHeight:",B,"safeIndexFrom:",C,"safeIndexTo:",V),!H)return;const L=Math.max(w-B,0);let O=L;l?.align==="bottom"?O=w-i:l?.align==="center"&&(O=L+B/2-i/2),l?.offset&&(O-=l.offset),O=Math.max(0,O);const we=et(O,I.top),be=k.current?.getContentSize()??H+I.top+I.bottom,_e=Math.max(0,be-i),Ge=Math.min(we,_e);ce.current={index:f,align:l?.align,offset:l?.offset};const st=k.current?.getScrollPosition()??-1,it=Math.abs(st-Ge)>.5;Ae.current=!1,ie.current=0,it&&(Ae.current=!0,ie.current+=1,k.current?.scrollTo(Ge)),v(H),oe(Ge,{immediate:!0}),N.debug("[VirtualScroll] Setting scroll position to:",Ge,{original:we,max:_e})},[S,c,s,I.top,I.bottom,i,oe]),Ze=r.useCallback(o=>{if(!k.current)return;const l=S.getTotal(),f=de(Math.floor(o),0,l),{index:C,cumulative:V,currentValue:w}=S.findIndexAtOrAfter(f,{materializeOption:{materialize:!1}}),B=(V??0)-(w??0)-f;ke(C,{offset:B})},[S,ke]),at=r.useCallback(o=>{const l=je(M.current,I.top),f=typeof o=="function"?o(l):o;Ze(f);const C=k.current?.getScrollPosition(),V=typeof C=="number"?C:M.current;return oe(V),V},[I.top,Ze,oe]),pt=r.useCallback((o,l)=>{N.debug("[VirtualScroll] Scroll position changed:",o);const f=Ae.current;f&&(Ae.current=!1);const C=ie.current>0;if(C&&(ie.current=0),f||C||h.current||(ce.current=null),oe(o),E){if(f||C)return;const V=o-l;if(N.debug("[VirtualScroll] Scroll diff:",V,"New:",o,"Prev:",l),Math.abs(V)>1){const w=V>0?"down":"up";Oe(w),ve(!0),N.debug("[VirtualScroll] Showing scroll buttons. Direction:",w),ye.current&&clearTimeout(ye.current),ye.current=setTimeout(()=>{ve(!1),N.debug("[VirtualScroll] Hiding scroll buttons")},2e3)}}},[oe,E]),Le=r.useMemo(()=>je(Ce,I.top),[I.top,Ce]),We=r.useMemo(()=>{const o=S.getTotal(),l=ir(Le,i,c,s,n,S,o);return N.debug("[VirtualScroll] Calculated rendering range:",{...l,scrollPosition:Le,renderingContentSize:o,overscanCount:c,viewportSize:i}),l},[Le,i,c,s,n,S]),{renderingStartIndex:qe,renderingEndIndex:He,visibleStartIndex:Fe,visibleEndIndex:Xe}=We,Be=r.useCallback((o,l)=>{if(!T||s===0)return;const f=re(o,s);if(!(l?.ensureVisible??!0)){const _e=fe.current.get(f);_e&&(W.current=null,G.current=f,te(_e));return}const V=S.prefixSum(f,{materializeOption:{materialize:!1}}),w=V.currentValue,H=Math.max(V.cumulative-w,0),B=H+w,L=je(M.current,I.top),O=L+i;if(H<L||B>O){W.current=f,ke(f);return}const be=fe.current.get(f);if(be){W.current=null,G.current=f,te(be);return}W.current=f},[T,s,S,I.top,ke,te,i]),lt=r.useCallback((o,l)=>{if(!T||o.defaultPrevented||o.altKey||o.metaKey||o.ctrlKey)return;const f=o.target;if(f){const C=f.tagName;if(C==="INPUT"||C==="TEXTAREA"||C==="SELECT"||f.isContentEditable)return}if(o.key==="ArrowDown"){l<s-1&&(o.preventDefault(),Be(l+1));return}if(o.key==="ArrowUp"){l>0&&(o.preventDefault(),Be(l-1));return}if(o.key==="PageDown"){if(l<s-1){o.preventDefault();const C=Math.max(Xe-Fe+1,1),V=Math.max(C,1),w=re(Math.min(l+V,s-1),s);Be(w)}return}if(o.key==="PageUp"&&l>0){o.preventDefault();const C=Math.max(Xe-Fe+1,1),V=Math.max(C,1),w=re(l-V,s);Be(w)}},[T,s,Be,Xe,Fe]),ct=r.useCallback(o=>{if(!T)return;const l=re(o,s);W.current=null,G.current=l,X?.(l)},[T,s,X]);r.useEffect(()=>{const o=k.current?.getScrollPosition()??0,l=M.current,f=je(l,I.top);N.debug("[VirtualScroll] Range change effect triggered",{renderingStartIndex:qe,renderingEndIndex:He,visibleStartIndex:Fe,visibleEndIndex:Xe,scrollPositionState:Ce,paneScrollPosition:l,logicalScrollPosition:f,contentSize:Se,scrollPaneScrollPosition:o}),De({renderingStartIndex:qe,renderingEndIndex:He,visibleStartIndex:Fe,visibleEndIndex:Xe,scrollPosition:f,totalHeight:Se})},[Se,He,qe,I.top,De,Ce,Xe,Fe]);const ut=r.useCallback(()=>{if(!E)return null;const o=Me&&ge!==null,l=ge==="up";return F.jsx("div",{className:"aqvs-scroll-to-edge-overlay","data-visible":o,children:l?F.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top",children:F.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:f=>{f.stopPropagation(),Ae.current=!0,ke(0),ve(!1)},children:"Top"})}):F.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom",children:F.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:f=>{f.stopPropagation(),Ae.current=!0,ke(s-1),ve(!1)},children:"Bottom"})})})},[E,Me,ge,ke,s]),{visibleItems:Qe,startPosition:a}=r.useMemo(()=>{if(s===0)return{visibleItems:F.jsx("div",{className:"aqvs-no-items-container",children:F.jsx("div",{className:"aqvs-no-items-text",children:"No items"})}),startPosition:0};const o=re(qe,s),l=re(He,s),{cumulative:f,currentValue:C}=S.prefixSum(o,{materializeOption:{materialize:!1}}),V=f-C,w=[],H=[];let B=0;for(let L=o;L<=l;L++){const O=n(L),we=S.get(L),be=O-we;be!==0&&w.push({index:L,value:O});const{cumulative:_e,currentValue:Ge}=S.prefixSum(L,{materializeOption:{materialize:!1}}),st=_e-Ge+B,it=t?t(L):L;H.push(F.jsx(or,{index:L,top:st-V+I.top,height:O,item:e(L),clipItemHeight:Ee,enableKeyboardNavigation:T,onKeyDown:lt,onFocus:ct,registerItemRef:Pe,children:g},it)),B+=be}return w.length>0&&Promise.resolve().then(()=>{if(!xe.current)return;let L=0;for(const be of w)if(be.index<Fe){const _e=S.get(be.index);L+=be.value-_e}const O=S.updates(w);if(!xe.current||typeof O!="number")return;v(O),N.debug("[VirtualScroll] Updated heights for items",w,"New total height:",O);const we=k.current?.getScrollPosition()??M.current;if(L!==0){const be=we+L;ie.current+=1,oe(be,{immediate:!0}),k.current?.scrollTo(be),N.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)",{from:we,to:be,shiftAmount:L})}else we!==M.current&&oe(we)}),{visibleItems:H,startPosition:V}},[g,Ee,T,s,S,e,t,n,ct,lt,Pe,He,qe,I.top,oe,Fe]),R=r.useCallback(o=>{const l=(x??0)>0,f=Math.abs(o-Ce),C=l&&f>.5?Ce:o,V=je(C,I.top);if(N.debug("[VirtualScroll] Rendering visible items",{currentScrollPosition:o,effectiveScrollPosition:V,renderingStartIndex:qe,renderingEndIndex:He,itemCount:s,viewportSize:i,callbackThrottleMs:x,diff:f,rawEffectiveScrollPosition:C}),s===0)return Qe;const w=a-V,H=I.bottom>0?F.jsx("div",{className:"aqvs-bottom-inset",style:{top:S.getTotal()+I.top-a,height:I.bottom}},"virtualscroll-bottom-inset"):null;return N.debug("[VirtualScroll] Rendering items",{containerTop:w,logicalScrollPosition:Le,resolvedInsets:I,effectiveScrollPosition:V}),F.jsxs("div",{className:"aqvs-items-wrapper",style:{top:w,position:"relative"},children:[Qe,H]})},[x,s,S,Le,He,qe,I,Ce,a,i,Qe]),y=r.useMemo(()=>({renderingStartIndex:We.renderingStartIndex,renderingEndIndex:We.renderingEndIndex,visibleStartIndex:We.visibleStartIndex,visibleEndIndex:We.visibleEndIndex,scrollPosition:Le,totalHeight:S.getTotal()}),[We,Le,S]);r.useEffect(()=>{K.current=y},[y]),r.useImperativeHandle(ae,()=>({getScrollPosition:()=>k.current?.getScrollPosition()??-1,getContentSize:()=>k.current?.getContentSize()??-1,getViewportSize:()=>k.current?.getViewportSize()??-1,scrollTo:at,scrollToIndex:ke,getFenwickTreeTotalHeight:()=>S.getTotal(),getFenwickSize:()=>S.getSize(),focusItemAtIndex:Be,getRange:()=>K.current,updateItemSize:nt}),[at,ke,S,Be,nt]);const j=S.getTotal()+I.top+I.bottom;return F.jsx(Et,{ref:k,contentSize:j,viewportSize:i,className:u,onScroll:pt,background:p,tapScrollCircleOptions:Ie,inertiaOptions:Te,itemCount:s,scrollBarWidth:ne,enableThumbDrag:_,enableTrackClick:J,enableArrowButtons:Q,enablePointerDrag:pe,renderThumbOverlay:le,wheelSpeedMultiplier:U,onWheelHorizontal:me,contentInsets:I,visibleStartIndex:Fe,visibleEndIndex:Xe,renderOverlay:ut,initialScrollPosition:ee.position,children:R})},lr=r.forwardRef(ar);exports.FenwickMapTree=kt;exports.ScrollBar=wt;exports.ScrollPane=Et;exports.VirtualScroll=lr;exports.minmax=de;exports.tapScrollCircleSampleVisual=Qt;exports.useFenwickMapTree=Vt;exports.useHeightCache=nr;exports.useLruCache=At;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Y=require("react/jsx-runtime"),r=require("react"),nt=require("tailwind-merge");class N{level;prefix;impl;constructor(e=2,t="[virtualscroll]",n=console){this.level=e,this.prefix=t,this.impl=n}static instance=new N(2,"[virtualscroll]");static setLevel(e){N.instance.setLevel(e)}setLevel(e){this.level=e}static setImplementation(e){N.instance.setImplementation(e)}setImplementation(e){this.impl=e}static setPrefix(e){N.instance.setPrefix(e)}setPrefix(e){this.prefix=e}static isEnabled(e){return N.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){N.instance.debug(e,...t)}debug(e,...t){this.level<=0&&this.impl.debug(...this.formatMessage(N.resolveLazy(e)),...t.map(N.resolveLazy))}static info(e,...t){N.instance.info(e,...t)}info(e,...t){this.level<=1&&this.impl.info(...this.formatMessage(N.resolveLazy(e)),...t.map(N.resolveLazy))}static warn(e,...t){N.instance.warn(e,...t)}warn(e,...t){this.level<=2&&this.impl.warn(...this.formatMessage(N.resolveLazy(e)),...t.map(N.resolveLazy))}static error(e,...t){N.instance.error(e,...t)}error(e,...t){this.level<=3&&this.impl.error(...this.formatMessage(N.resolveLazy(e)),...t.map(N.resolveLazy))}}const Vt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},Ct=6,Kt=8,Wt=({dragState:i,normalizedDistance:e})=>{const t=1+e*.18,n=.16+e*.24,s=.38+e*.28,o=i.active?"80ms ease-out":"220ms ease";return Y.jsxs(Y.Fragment,{children:[Y.jsx("div",{className:"aqvs-tap-scroll-circle-visual-outer",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.62), rgba(72,72,72,0.48))",boxShadow:`0 0 0 1px rgba(255,255,255,0.28), 0 10px 22px rgba(0,0,0,${n})`,transform:`scale(${t})`,transition:`${o}, ${i.active?"80ms":"260ms"} box-shadow ease`}}),Y.jsx("div",{className:"aqvs-tap-scroll-circle-inner",style:{background:"linear-gradient(140deg, rgba(255,255,255,0.72), rgba(28,28,28,0.58))",boxShadow:"inset 0 4px 10px rgba(0,0,0,0.24), inset 0 0 2px rgba(255,255,255,0.55)",opacity:s,transition:i.active?"120ms opacity ease-out":"220ms opacity ease"}})]})},zt=r.memo(r.forwardRef(({onDragChange:i,className:e,maxVisualDistance:t=160,size:n=40,style:s,opacity:o=1,renderVisual:c},f)=>{const[m,I]=r.useState(Vt),v=r.useRef(null),S=r.useRef(null),V=r.useRef({x:0,y:0}),h=r.useRef(null),F=r.useRef(0),ee=r.useCallback(T=>{I(T),i(T)},[i]),U=r.useCallback((T,j,K=!1)=>{const{x:O,y:W}=V.current,se=T-O,Se=j-W,C=Math.abs(Se),Ne=C<Ct?0:Se<0?-1:1,we=F.current;let x=Ne;const Re=Ct+Kt;Ne===0?we!==0&&C<Re?x=we:(x=0,K||(F.current=0)):Ne!==we&&we!==0&&C<Re?x=we:F.current=Ne,ee({active:K||C>=Ct,offsetX:se,offsetY:Se,distance:C,direction:x,pointerId:v.current})},[ee]),ne=r.useCallback(T=>{if(T===null)return;const j=h.current;j?.hasPointerCapture(T)&&j.releasePointerCapture(T)},[]),te=r.useCallback((T=!1)=>{T&&ne(v.current),v.current=null,S.current=null,F.current=0,ee(Vt)},[ee,ne]),fe=r.useCallback(T=>{if(v.current!==null&&v.current!==T.pointerId){S.current={pointerId:T.pointerId,clientX:T.clientX,clientY:T.clientY},T.preventDefault(),T.stopPropagation();return}T.preventDefault(),T.stopPropagation();const j=h.current??T.currentTarget,{left:K,top:O,width:W,height:se}=j.getBoundingClientRect();V.current={x:K+W/2,y:O+se/2},v.current=T.pointerId;try{j.setPointerCapture(T.pointerId)}catch{}U(T.clientX,T.clientY,!0)},[U]),ve=r.useCallback(T=>{if(v.current!==T.pointerId){S.current!==null&&S.current.pointerId===T.pointerId&&(S.current={pointerId:T.pointerId,clientX:T.clientX,clientY:T.clientY});return}T.preventDefault(),U(T.clientX,T.clientY)},[U]),Me=r.useCallback(T=>{if(v.current!==T.pointerId){S.current!==null&&S.current.pointerId===T.pointerId&&(S.current=null);return}T.preventDefault(),T.stopPropagation();const j=S.current;if(S.current=null,j!==null){ne(T.pointerId);const K=h.current;let O=!0;if(K!==null&&typeof K.setPointerCapture=="function")try{K.setPointerCapture(j.pointerId)}catch(W){(typeof W=="object"&&W!==null&&"name"in W?W.name:void 0)==="NotFoundError"&&(O=!1)}if(O){v.current=j.pointerId,U(j.clientX,j.clientY,!0);return}}te(!0)},[te,ne,U]),A=r.useCallback(T=>{v.current===T.pointerId&&te(!1)},[te]);r.useImperativeHandle(f,()=>({reset:()=>{te(!0)},getElement:()=>h.current}),[te]);const _=Math.min(Math.max(o,0),1),g=n/64,X=Math.min(m.distance,t)/t,q=m.direction*X*10*g,H=c??Wt,L={dragState:m,normalizedDistance:X,sizeScale:g,size:n,opacity:_},$={...s,width:n,height:n,transform:`translateY(${q}px)`};return $.opacity=_,Y.jsx("div",{ref:h,"data-testid":"virtual-scroll-tap-circle",className:nt.twMerge("aqvs-tap-scroll-circle",e),style:$,tabIndex:-1,onPointerDown:fe,onPointerMove:ve,onPointerUp:Me,onPointerCancel:Me,onLostPointerCapture:A,role:"presentation",children:H(L)})}));zt.displayName="TapScrollCircle";const ue=(i,e,t)=>Math.max(e,Math.min(t,i)),Nt="virtualscroll:tap-scroll-cancel",At=20,Gt=250,Zt=60,Jt=20,Qt=20,er=240,Dt={active:!1,offsetX:0,offsetY:0,distance:0,direction:0,pointerId:null},yt=2.2,tr=8,rr=120,nr=1/10,qe={enabled:!0,size:40,offsetX:-80,offsetY:0,className:void 0,maxVisualDistance:er,minSpeedMultiplier:.2,opacity:.9,renderVisual:void 0,maxSpeedCurve:void 0},sr=i=>i?{mainSizeKey:"width",crossSizeKey:"height",positionKey:"left",selectDelta:(e,t)=>e,getPointerCoordinate:({clientX:e})=>e,arrowLabels:["Scroll left","Scroll right"],arrowIcons:["◀","▶"],directionClass:"aqvs-scrollbar-horizontal",orientation:"horizontal"}:{mainSizeKey:"height",crossSizeKey:"width",positionKey:"top",selectDelta:(e,t)=>t,getPointerCoordinate:({clientY:e})=>e,arrowLabels:["Scroll up","Scroll down"],arrowIcons:["▲","▼"],directionClass:"aqvs-scrollbar-vertical",orientation:"vertical"},ir=(i,e)=>{const t=i?.maxSpeedMultiplier,n=typeof t=="number"?t:lr(e);return{enabled:i?.enabled??qe.enabled,size:i?.size??qe.size,offsetX:i?.offsetX??qe.offsetX,offsetY:i?.offsetY??qe.offsetY,className:i?.className??qe.className,maxVisualDistance:i?.maxVisualDistance??qe.maxVisualDistance,maxSpeedMultiplier:n,minSpeedMultiplier:Math.max(i?.minSpeedMultiplier??qe.minSpeedMultiplier,0),opacity:ue(i?.opacity??qe.opacity,0,1),renderVisual:i?.renderVisual??qe.renderVisual,maxSpeedCurve:i?.maxSpeedCurve??qe.maxSpeedCurve}},ar=({isDragging:i,isThumbHovered:e,enableThumbDrag:t})=>r.useMemo(()=>t?i?"dragging":e?"hover":"idle":"disabled",[t,i,e]),or=({canUseArrowButtons:i,enableArrowButtons:e,resetTapScroll:t,scrollByStep:n})=>{const s=r.useRef(null),o=r.useRef(null),c=r.useRef(null),f=r.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null),o.current!==null&&(window.clearTimeout(o.current),o.current=null),c.current!==null&&(window.removeEventListener("pointerup",c.current),window.removeEventListener("pointercancel",c.current),window.removeEventListener("blur",c.current),c.current=null)},[]),m=r.useCallback(()=>{f()},[f]),I=r.useCallback(S=>V=>{if(!i)return;V.cancelable&&V.preventDefault(),V.stopPropagation(),t(),f(),n(S),o.current=window.setTimeout(()=>{s.current=window.setInterval(()=>{n(S)},Zt)},Gt);const h=()=>f();c.current=h,window.addEventListener("pointerup",h),window.addEventListener("pointercancel",h),window.addEventListener("blur",h)},[i,f,t,n]),v=r.useCallback(S=>V=>{e&&(V.key==="Enter"||V.key===" "||V.key==="Spacebar")&&(V.preventDefault(),n(S))},[e,n]);return r.useEffect(()=>{i||f()},[i,f]),r.useEffect(()=>()=>{f()},[f]),{handleArrowPointerDown:I,handleArrowPointerUp:m,handleArrowKeyDown:v}},lr=i=>{if(!i||i<=0)return yt;const e=Math.max(1,i),t=Math.log10(e),n=yt+t*tr;return ue(n,yt,rr)},Yt=({contentSize:i,viewportSize:e,scrollPosition:t,onScroll:n,enableThumbDrag:s=!0,enableTrackClick:o=!0,enableArrowButtons:c=!0,horizontal:f=!1,scrollBarWidth:m=12,className:I,ariaControls:v,tapScrollCircleOptions:S,itemCount:V,renderThumbOverlay:h,visibleStartIndex:F,visibleEndIndex:ee})=>{const[U,ne]=r.useState(!1),[te,fe]=r.useState(!1),[ve,Me]=r.useState(!1),A=r.useRef(null),_=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null}),g=r.useRef({pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}),X=r.useRef(t),q=r.useRef(n),H=r.useRef(Dt),L=r.useRef(null),$=r.useRef(null),T=r.useRef(null),j=r.useRef(0),K=r.useRef(0),O=r.useMemo(()=>ir(S,V),[V,S]),W=r.useMemo(()=>sr(f),[f]),{enabled:se,size:Se,offsetX:C,offsetY:Ne,className:we,maxVisualDistance:x,maxSpeedMultiplier:Re,minSpeedMultiplier:Ee,opacity:ze,renderVisual:M,maxSpeedCurve:z}=O,y=r.useRef({viewportSize:e,maxScrollPosition:Math.max(i-e,0),scrollBarVisible:i>e,effectiveTapMaxDistance:Math.max(x,1),tapCircleMaxSpeedMultiplier:Re,tapCircleMinSpeedMultiplier:Ee,tapCircleMaxSpeedCurve:z,tapScrollCircleOptions:S,effectiveTrackLength:0,onScroll:n,scrollPosition:t}),{mainSizeKey:oe,crossSizeKey:ie,positionKey:de,selectDelta:me,getPointerCoordinate:Z,arrowLabels:Pe,arrowIcons:le,directionClass:He,orientation:ke}=W,ge=Math.max(x,1),Ve=e/i,Ae=Math.max(e-m*2,0),be=Ve*Ae,Ce=Math.min(Math.max(At,be||0),Ae||At),p=i-e,w=Math.max(Ae-Ce,0),ae=p<=0||w<=0?0:ue(t/p*w,0,w),_e=ae+Ce/2,G=i>e||U,Qe=G&&c;r.useLayoutEffect(()=>{y.current={viewportSize:e,maxScrollPosition:p,scrollBarVisible:G,effectiveTapMaxDistance:ge,tapCircleMaxSpeedMultiplier:Re,tapCircleMinSpeedMultiplier:Ee,tapCircleMaxSpeedCurve:z,tapScrollCircleOptions:S,effectiveTrackLength:w,onScroll:n,scrollPosition:t}}),r.useLayoutEffect(()=>{X.current=t},[t]),r.useLayoutEffect(()=>{q.current=n},[n]),r.useEffect(()=>{s||fe(!1)},[s]);const Ye=ar({isDragging:U,isThumbHovered:te,enableThumbDrag:s}),ye=r.useCallback((l,b)=>{const P=y.current,a=b??X.current;if(q.current){const E=q.current(l,a);if(typeof E=="number"&&Number.isFinite(E))return X.current=E,E}const u=typeof l=="function"?l(a):l,d=Math.max(P.maxScrollPosition,0),R=P.scrollBarVisible?ue(u,0,d):0;return X.current=R,R},[]),Xe=r.useCallback(l=>{const b=y.current,P=X.current;if(!b.scrollBarVisible||b.maxScrollPosition<=0){const k=ye(0,P),B=k-P;return{nextPosition:k,actualDelta:B,reachedBoundary:!0}}if(l===0)return{nextPosition:P,actualDelta:0,reachedBoundary:!1};const u=ye(k=>ue(k+l,0,b.maxScrollPosition),P),d=u-P,R=l<0&&P+l<=0,E=l>0&&P+l>=b.maxScrollPosition,D=l<0&&(u<=0||R&&d===0)||l>0&&(u>=b.maxScrollPosition||E&&d===0);return{nextPosition:u,actualDelta:d,reachedBoundary:D}},[ye]),je=r.useCallback((l,b)=>{l.current+=b;const P=Math.max(y.current.maxScrollPosition,0);P>0&&(l.current=ue(l.current,-P,P));const a=Xe(l.current);return l.current-=a.actualDelta,a.reachedBoundary&&(l.current=0),a},[Xe]),De=r.useCallback(()=>{$.current!==null&&(window.cancelAnimationFrame($.current),$.current=null),T.current=null,j.current=0,K.current=0},[]),Te=r.useCallback(()=>{H.current={...Dt},Me(!1),L.current?.reset(),De()},[De]),$e=r.useCallback(l=>{const b=H.current,P=y.current;if(!b.active||b.direction===0){De();return}if(!P.scrollBarVisible||P.maxScrollPosition<=0){De();return}const a=T.current??l,u=Math.max((l-a)/1e3,0),d=Math.min(u,nr);if(T.current=l,d<=0){$.current=window.requestAnimationFrame($e);return}const R=Math.min(b.distance,P.effectiveTapMaxDistance)/P.effectiveTapMaxDistance,E=R**1.1,D=typeof P.tapScrollCircleOptions?.maxSpeedMultiplier=="number",k=Math.max(P.viewportSize*P.tapCircleMinSpeedMultiplier,40),B=D?k:1200;let Q=Math.max(P.viewportSize*P.tapCircleMaxSpeedMultiplier,B);const J=P.tapCircleMaxSpeedCurve;if(J){const vt=Math.max(J.exponentialSteepness,0),Xt=Math.max(J.exponentialScale??P.tapCircleMaxSpeedMultiplier,0),jt=vt===0?R:Math.expm1(vt*R),kt=vt===0?1:Math.expm1(vt)||1,$t=kt===0?R:Math.min(Math.max(jt/kt,0),1),Ut=P.viewportSize*Xt*$t;Q=Math.min(Q,Math.max(Ut,k))}const xe=Math.max(Q,k),he=Math.max(J?.easedOffset??0,0),Ie=Math.min(1,E+he),rt=k+(xe-k)*Ie;K.current!==b.direction&&(K.current=b.direction,j.current=0);const{reachedBoundary:pt}=je(j,b.direction*rt*d);if(pt){De();return}$.current=window.requestAnimationFrame($e)},[je,De]),ct=r.useCallback(()=>{$.current===null&&(T.current=null,j.current=0,$.current=window.requestAnimationFrame($e))},[$e]);r.useEffect(()=>()=>{De()},[De]);const ut=r.useCallback(l=>{H.current=l,Me(l.active),l.active&&l.direction!==0?ct():De()},[ct,De]);r.useEffect(()=>{se||Te()},[Te,se]),r.useEffect(()=>{const l=b=>{const a=b.detail?.paneId;a&&v&&a!==v||Te()};return window.addEventListener(Nt,l),()=>{window.removeEventListener(Nt,l)}},[v,Te]),r.useEffect(()=>{if(!se)return;const l=b=>{if(!H.current.active||H.current.pointerId===b.pointerId)return;const P=b.target;if(!(P instanceof Node)){Te();return}L.current?.getElement()?.contains(P)||Te()};return document.addEventListener("pointerdown",l,!0),()=>{document.removeEventListener("pointerdown",l,!0)}},[Te,se]);const ft=l=>{if(!G||w<=0||p<=0)return 0;const b=ue(l,0,w);return ue(b/w*p,0,p)},re=r.useCallback(l=>{const{scrollBarVisible:b,effectiveTrackLength:P,maxScrollPosition:a}=y.current;if(N.debug("[ScrollBar] calculateScrollPositionFromThumb",()=>({thumbPos:l,trackLen:P,maxScroll:a})),P<=0||a<=0)return null;const u=ue(l,0,P);return ue(u/P*a,0,a)},[]),Ue=r.useCallback(l=>{const b=l.getBoundingClientRect(),P=f?b.width:b.height,a=D=>{const k=Number.parseFloat(D);return Number.isFinite(k)?k:0},u=window.getComputedStyle(l),d=a(f?u.width:u.height),R=d>0?d+a(f?u.paddingLeft:u.paddingTop)+a(f?u.paddingRight:u.paddingBottom)+a(f?u.borderLeftWidth:u.borderTopWidth)+a(f?u.borderRightWidth:u.borderBottomWidth):0,E=R>0?R:f?l.offsetWidth:l.offsetHeight;return E<=0||P<=0?1:P/E},[f]),et=r.useCallback(l=>{const b=_.current;if(b.pointerId!==l.pointerId)return;const P=l.clientX-b.startClientX,a=l.clientY-b.startClientY,u=me(P,a)/(b.scale||1);N.debug("[ScrollBar] handleThumbPointerMove",()=>({delta:u,startThumbPosition:b.startThumbPosition,clientY:l.clientY,startClientY:b.startClientY,metrics:y.current}));const d=re(b.startThumbPosition+u);d!==null&&ye(d),l.cancelable&&l.preventDefault()},[me,re,ye]),Be=r.useCallback(l=>{const b=_.current;if(b.pointerId!==l.pointerId)return;document.removeEventListener("pointermove",et),document.removeEventListener("pointerup",Be),document.removeEventListener("pointercancel",Be);const P=b.captureTarget;if(P?.hasPointerCapture?.(l.pointerId)&&P.releasePointerCapture(l.pointerId),_.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1,captureTarget:null},ne(!1),A.current){const a=A.current.getBoundingClientRect();l.clientX>=a.left&&l.clientX<=a.right&&l.clientY>=a.top&&l.clientY<=a.bottom||fe(!1)}else fe(!1)},[et]);r.useEffect(()=>()=>{document.removeEventListener("pointermove",et),document.removeEventListener("pointerup",Be),document.removeEventListener("pointercancel",Be)},[et,Be]);const Le=r.useRef(0),dt=r.useRef(0),bt=r.useCallback(l=>{const b=Math.max(Math.round(y.current.viewportSize/Qt),Jt);dt.current!==l&&(dt.current=l,Le.current=0),je(Le,l*b)},[je]),{handleArrowPointerDown:Rt,handleArrowPointerUp:Oe,handleArrowKeyDown:tt}=or({canUseArrowButtons:Qe,enableArrowButtons:c,resetTapScroll:Te,scrollByStep:bt}),Ke=l=>{if(!G)return;if(!s){l.preventDefault(),l.stopPropagation();return}if(l.pointerType==="mouse"&&l.button!==0||l.ctrlKey)return;Te();const b=l.currentTarget,P=Ue(b);let a=null;if(b.setPointerCapture)try{b.setPointerCapture(l.pointerId),a=b}catch{a=null}_.current={pointerId:l.pointerId,startThumbPosition:ae,startClientX:l.clientX,startClientY:l.clientY,scale:P,captureTarget:a},document.addEventListener("pointermove",et),document.addEventListener("pointerup",Be),document.addEventListener("pointercancel",Be),ne(!0),fe(!0),l.preventDefault(),l.stopPropagation()},We=l=>{if(!G)return;if(!o){l.preventDefault(),l.stopPropagation();return}if(l.pointerType==="mouse"&&l.button!==0||l.ctrlKey)return;const b=l.currentTarget,P=b.getBoundingClientRect(),a=Z(l),u=Ue(b),d=(a-(f?P.left:P.top))/u;Te();const R=d-Ce/2,E=ft(R);if(ye(E),b.setPointerCapture)try{b.setPointerCapture(l.pointerId)}catch{}g.current={pointerId:l.pointerId,startThumbPosition:R,startClientX:l.clientX,startClientY:l.clientY,scale:u},l.preventDefault(),l.stopPropagation()},Fe=()=>{g.current={pointerId:null,startThumbPosition:0,startClientX:0,startClientY:0,scale:1}},st=l=>{const b=g.current;if(b.pointerId!==l.pointerId)return;if(l.pointerType==="mouse"&&l.buttons===0){Fe();return}const P=l.clientX-b.startClientX,a=l.clientY-b.startClientY,u=me(P,a)/(b.scale||1),d=ft(b.startThumbPosition+u);ye(d),l.cancelable&&l.preventDefault()},Ge=l=>{if(g.current.pointerId!==l.pointerId)return;const b=l.currentTarget;b.hasPointerCapture?.(l.pointerId)&&b.releasePointerCapture(l.pointerId),Fe(),l.preventDefault(),l.stopPropagation()},xt=l=>{if(g.current.pointerId!==l.pointerId)return;const b=l.currentTarget;b.hasPointerCapture?.(l.pointerId)&&b.releasePointerCapture(l.pointerId),Fe()},It=l=>{g.current.pointerId===l.pointerId&&Fe()},Pt=r.useMemo(()=>ue((ve?1:.8)*ze,0,1),[ve,ze]),mt=r.useMemo(()=>{const b=`calc(50% - ${Se/2}px + ${Ne}px)`;return{left:C,top:b}},[C,Ne,Se]),it=(l,b,P,a)=>Y.jsx("button",{type:"button",tabIndex:0,className:"aqvs-scrollbar-arrow-button",style:{[oe]:m,[ie]:m},"aria-label":b,onPointerDown:Rt(l),onPointerUp:Oe,onPointerLeave:Oe,onPointerCancel:Oe,onKeyDown:tt(l),"aria-disabled":!c,disabled:!Qe,children:Y.jsx("span",{"aria-hidden":"true",children:P})},a),at=h&&G?{orientation:ke,scrollPosition:t,maxScrollPosition:p,contentSize:i,viewportSize:e,thumbSize:Ce,thumbPosition:ae,thumbCenter:_e,trackSize:Ae,isDragging:U,isTapScrollActive:ve,visibleStartIndex:F,visibleEndIndex:ee}:null;return Y.jsxs("div",{className:nt.twMerge("aqvs-scrollbar",He,!G&&"pointer-events-none opacity-0",I),style:{[oe]:e,[ie]:m},role:"scrollbar",tabIndex:-1,"aria-controls":v,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":p,"aria-orientation":f?"horizontal":"vertical",children:[!f&&G&&se&&Y.jsx(zt,{ref:L,className:nt.twMerge("aqvs-scrollbar-tap-circle-wrapper",we),size:Se,maxVisualDistance:ge,style:mt,opacity:Pt,renderVisual:M,onDragChange:ut},"tap-circle"),it(-1,Pe[0],le[0],"arrow-start"),Y.jsxs("div",{className:"aqvs-scrollbar-track",style:{borderRadius:m/2},onPointerDown:We,onPointerMove:st,onPointerUp:Ge,onPointerCancel:xt,onLostPointerCapture:It,"aria-disabled":!o,children:[at&&Y.jsx("div",{className:"aqvs-scrollbar-overlay","aria-hidden":!0,children:h?.(at)},"overlay"),Y.jsx("div",{className:nt.twMerge("aqvs-scrollbar-thumb-wrapper",!(G||U)&&"pointer-events-none opacity-0"),style:{[oe]:Ce,[de]:ae,...f?{top:0,bottom:0}:{left:0,right:0}},onPointerDown:Ke,role:"slider","aria-orientation":f?"horizontal":"vertical","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":p,"aria-disabled":!s,tabIndex:-1,children:Y.jsx("div",{ref:A,className:nt.twMerge("aqvs-scrollbar-thumb",f?"aqvs-scrollbar-thumb-horizontal":"aqvs-scrollbar-thumb-vertical"),"data-thumb-state":Ye,style:{borderRadius:m-1,cursor:s?"pointer":"default"},onMouseEnter:()=>{s&&fe(!0)},onMouseLeave:()=>{s&&fe(!1)}},"thumb")},"thumb-wrapper")]},"track"),it(1,Pe[1],le[1],"arrow-end")]})},ht={maxVelocity:6,minVelocity:.02,deceleration:.0025,velocitySampleWindow:90,startVelocityThreshold:.04},St=(i,e,t)=>{for(const[n,s,o]of e)t==="add"?i.addEventListener(n,s,o):i.removeEventListener(n,s,o)},Bt=r.forwardRef(({children:i,contentSize:e,viewportSize:t,scrollBarWidth:n=12,enableThumbDrag:s=!0,enableTrackClick:o=!0,enableArrowButtons:c=!0,enablePointerDrag:f=!0,onScroll:m,className:I,style:v,background:S,tapScrollCircleOptions:V,inertiaOptions:h,itemCount:F,renderThumbOverlay:ee,wheelSpeedMultiplier:U=1,onWheelHorizontal:ne,contentInsets:te,visibleStartIndex:fe,visibleEndIndex:ve,renderOverlay:Me,initialScrollPosition:A=0},_)=>{const g=r.useRef(Number.isFinite(A)?Math.max(0,A):0),X=r.useRef(null),q=r.useRef(null),H=r.useRef(ne);r.useEffect(()=>{H.current=ne},[ne]);const L=r.useRef({frame:null,velocity:0,lastTimestamp:null,generation:0}),$=r.useMemo(()=>({maxVelocity:h?.maxVelocity??ht.maxVelocity,minVelocity:h?.minVelocity??ht.minVelocity,deceleration:h?.deceleration??ht.deceleration,velocitySampleWindow:h?.velocitySampleWindow??ht.velocitySampleWindow,startVelocityThreshold:h?.startVelocityThreshold??ht.startVelocityThreshold}),[h]),T=r.useMemo(()=>({top:Math.max(0,te?.top??0),bottom:Math.max(0,te?.bottom??0)}),[te]);N.debug("[ScrollPane] ScrollPane rendered",()=>({contentSize:e,viewportSize:t,scrollBarWidth:n,className:I,style:v,tapScrollCircleOptions:V,inertiaOptions:h,enablePointerDrag:f,contentInsets:T}));const j=r.useRef({contentSize:e,viewportSize:t});j.current={contentSize:e,viewportSize:t};const K=r.useMemo(()=>e>t,[e,t]),O=r.useCallback(M=>{const{contentSize:z,viewportSize:y}=j.current,oe=z>y,ie=g.current;if(N.debug("[ScrollPane] scrollTo called",()=>({newPosition:M,contentSize:z,viewportSize:y,currentIsScrollable:oe,prevPosition:ie})),!oe)return g.current!==0&&(g.current=0,m?.(0,ie)),g.current;const de=typeof M=="function"?M(g.current):M;if(!Number.isFinite(de))return N.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position",{nextPosition:de}),g.current;const me=Math.max(z-y,0),Z=ue(de,0,me);return g.current!==Z&&(g.current=Z,m?.(Z,ie)),g.current},[m]),W=r.useCallback(()=>{const M=L.current;M.generation+=1,M.frame!==null&&cancelAnimationFrame(M.frame),M.frame=null,M.velocity=0,M.lastTimestamp=null},[]),se=r.useRef(W);r.useEffect(()=>{se.current=W},[W]),r.useEffect(()=>()=>{se.current()},[]);const Se=r.useCallback(M=>{if(!K)return;const{maxVelocity:z,minVelocity:y,deceleration:oe,startVelocityThreshold:ie}=$,de=ue(M,-z,z);if(Math.abs(de)<ie)return;W(),L.current.velocity=de,L.current.lastTimestamp=null;const me=L.current.generation,Z=Pe=>{const le=L.current;if(le.generation!==me)return;if(le.lastTimestamp===null){le.lastTimestamp=Pe,le.frame=requestAnimationFrame(Z);return}const He=Pe-le.lastTimestamp;if(le.lastTimestamp=Pe,He<=0){le.frame=requestAnimationFrame(Z);return}const ke=le.velocity;let ge=ke;const Ve=oe*He;ke>0?ge=Math.max(0,ke-Ve):ke<0&&(ge=Math.min(0,ke+Ve));const be=(ke+ge)/2*He,Ce=g.current;if(be!==0&&O(Qe=>Qe+be),L.current.generation!==me)return;const p=g.current,{contentSize:w,viewportSize:ae}=j.current,_e=Math.max(w-ae,0);le.velocity=ge;const G=p===Ce||p<=0&&ge<=0||p>=_e&&ge>=0;if(Math.abs(ge)<y||G){W();return}le.frame=requestAnimationFrame(Z)};L.current.frame=requestAnimationFrame(Z)},[K,$,O,W]),C=r.useRef(Se);r.useEffect(()=>{C.current=Se},[Se]),r.useLayoutEffect(()=>{j.current={contentSize:e,viewportSize:t}},[e,t]),r.useLayoutEffect(()=>{const M=q.current;if(!M)return;const z=()=>{M.scrollTop!==0&&(N.debug("[ScrollPane] Native scroll detected, resetting to 0",()=>({scrollTop:M.scrollTop})),M.scrollTop=0),M.scrollLeft!==0&&(M.scrollLeft=0)};return M.addEventListener("scroll",z),()=>M.removeEventListener("scroll",z)},[]),r.useLayoutEffect(()=>{if(K){N.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change",()=>({contentSize:e,viewportSize:t,scrollPosition:g.current}));const M=ue(e-t,0,e);g.current>M&&O(M)}else O(0)},[K,O,e,t]),r.useEffect(()=>{const M=y=>{if(H.current&&!y.ctrlKey){const ie=y.shiftKey&&y.deltaX===0,de=ie?y.deltaY:y.deltaX,me=ie?0:y.deltaY;if(de!==0&&Math.abs(de)>=Math.abs(me)){y.preventDefault(),W();let Z=de;y.deltaMode===1?Z*=16:y.deltaMode===2&&(Z*=t),H.current(Z);return}}if(!K||y.ctrlKey||y.deltaY===0)return;y.preventDefault(),W();let oe=y.deltaY;y.deltaMode===1?oe*=16:y.deltaMode===2&&(oe*=t),U!==1&&(oe*=U),N.debug("[ScrollPane] wheel event",()=>({deltaY:oe,scrollPosition:g.current,wheelSpeedMultiplier:U,deltaMode:y.deltaMode,scrollTop:q.current?.scrollTop})),O(ie=>ie+oe)},z=X.current;return z&&z.addEventListener("wheel",M,{passive:!1}),()=>{z&&z.removeEventListener("wheel",M)}},[K,O,W,t,U]),r.useImperativeHandle(_,()=>({scrollTo:M=>(W(),O(M)),getScrollPosition:()=>g.current,getContentSize:()=>e,getViewportSize:()=>t}),[O,e,t,W]);const Ne=r.useRef(O);r.useEffect(()=>{Ne.current=O},[O]);const we=r.useId(),x=r.useRef({pointerId:null,startClientY:0,startScroll:0,isDragging:!1,shouldCancelNextClick:!1,clickResetTimer:null,velocitySamples:[]}),Re=r.useRef(f);r.useEffect(()=>{Re.current=f},[f]);const Ee=r.useRef(K);r.useEffect(()=>{Ee.current=K},[K]);const ze=r.useRef($);return r.useEffect(()=>{ze.current=$},[$]),r.useEffect(()=>{if(f)return;const M=q.current,z=x.current;z.pointerId!==null&&M?.hasPointerCapture(z.pointerId)&&M.releasePointerCapture(z.pointerId),z.clickResetTimer!==null&&(window.clearTimeout(z.clickResetTimer),z.clickResetTimer=null),z.pointerId=null,z.startClientY=0,z.startScroll=0,z.isDragging=!1,z.shouldCancelNextClick=!1,z.velocitySamples=[]},[f]),r.useEffect(()=>{const M=q.current;if(!M)return;const z=6,y=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),oe=()=>{const p=x.current;p.pointerId=null,p.startClientY=0,p.startScroll=0,p.isDragging=!1,p.velocitySamples=[]},ie=()=>{const p=x.current;p.clickResetTimer!==null&&(window.clearTimeout(p.clickResetTimer),p.clickResetTimer=null)},de=p=>{const w=x.current,ae=y();w.velocitySamples.push({clientY:p,time:ae});const _e=ze.current.velocitySampleWindow;w.velocitySamples=w.velocitySamples.filter(G=>ae-G.time<=_e)},me=p=>p instanceof HTMLElement&&p.closest("[data-scrollpane-ignore-drag='true']")!==null,Z=p=>{const w=x.current;w.shouldCancelNextClick&&(p.preventDefault(),p.stopPropagation(),w.shouldCancelNextClick=!1)},Pe=p=>{const w=x.current;if(!w.isDragging){if(w.isDragging=!0,w.shouldCancelNextClick=!0,!M.hasPointerCapture(p.pointerId))try{M.setPointerCapture(p.pointerId)}catch{}de(p.clientY)}},le=p=>{const w=x.current;M.hasPointerCapture(p)&&M.releasePointerCapture(p),w.shouldCancelNextClick=!1,ie(),oe()},He=p=>{const w=x.current;if(w.pointerId!==p.pointerId)return;if(p.buttons===0){le(p.pointerId);return}if(!(Re.current&&Ee.current)||!w.isDragging&&(Math.abs(p.clientY-w.startClientY)<z||(Pe(p),!w.isDragging)))return;de(p.clientY);const ae=p.clientY-w.startClientY,_e=w.startScroll-ae;Ne.current(_e),p.cancelable&&p.preventDefault()},ke=p=>{const w=x.current;if(w.pointerId!==p.pointerId)return;w.isDragging&&w.shouldCancelNextClick&&p.cancelable&&(p.preventDefault(),p.stopPropagation()),w.isDragging&&de(p.clientY);let ae=0;if(w.isDragging&&w.velocitySamples.length>=2){const G=w.velocitySamples,Qe=ze.current.velocitySampleWindow,Ye=G[G.length-1],ye=G.find(Xe=>Ye.time-Xe.time<=Qe)??G[0];if(Ye&&ye&&Ye.time!==ye.time){const Xe=Ye.clientY-ye.clientY,je=Ye.time-ye.time;ae=-(Xe/je)}}ie(),w.shouldCancelNextClick&&(w.clickResetTimer=window.setTimeout(()=>{const G=x.current;G.shouldCancelNextClick=!1,G.clickResetTimer=null},0));const _e=ze.current.startVelocityThreshold;oe(),M.hasPointerCapture(p.pointerId)&&M.releasePointerCapture(p.pointerId),Math.abs(ae)>=_e&&C.current?.(ae)},ge=p=>{if(x.current.pointerId!==null||!(Re.current&&Ee.current)||p.button!==0&&p.pointerType==="mouse"||p.ctrlKey||p.metaKey||p.altKey||me(p.target))return;window.dispatchEvent(new CustomEvent(Nt,{detail:{paneId:we}})),se.current?.();const w=x.current;ie(),w.pointerId=p.pointerId,w.startClientY=p.clientY,w.startScroll=g.current,w.isDragging=!1,w.shouldCancelNextClick=!1,w.velocitySamples=[]},Ve=p=>{x.current.pointerId===p.pointerId&&le(p.pointerId)},be=[["click",Z,!0],["pointerdown",ge,{passive:!1}],["lostpointercapture",p=>{x.current.pointerId===p.pointerId&&le(p.pointerId)},void 0]],Ce=[["pointermove",He,{passive:!1}],["pointerup",ke,void 0],["pointercancel",Ve,void 0]];return St(M,be,"add"),St(window,Ce,"add"),()=>{St(M,be,"remove"),St(window,Ce,"remove");const p=x.current;p.pointerId!==null&&M.hasPointerCapture(p.pointerId)&&M.releasePointerCapture(p.pointerId),ie(),oe()}},[we]),Y.jsxs("div",{ref:X,className:nt.twMerge("aqvs-scroll-pane",I),style:v,children:[Y.jsxs("div",{ref:q,className:nt.twMerge("aqvs-scroll-pane-content"),style:{height:t,paddingTop:T.top,paddingBottom:T.bottom,...f&&K?{touchAction:"none"}:{}},id:we,children:[S,i(g.current)]}),Y.jsx(Yt,{contentSize:e,viewportSize:t,scrollPosition:g.current,onScroll:O,enableThumbDrag:s,enableTrackClick:o,enableArrowButtons:c,scrollBarWidth:n,ariaControls:we,tapScrollCircleOptions:V,itemCount:F,renderThumbOverlay:ee,visibleStartIndex:fe,visibleEndIndex:ve},"scrollbar"),Me?.()]})}),Lt=(i,e,t)=>Math.min(Math.max(i,e),t),cr=({dragState:i,normalizedDistance:e,sizeScale:t,size:n})=>{const s=Math.max(n/2,1),o=1+e*.65,c=Math.max(.65,1-e*.25),f=i.direction*e*26*t,m=.8+e*.18,I=3*t,v=6*t,S=22*t,V=Math.abs(f)+v,h=f>0?I:-Math.abs(f)-I,F=Math.max(2.5,3*t),ee=Lt(i.offsetX,-s,s),U=Lt(i.offsetY,-s,s),ne=s*.35,te=ee/s*ne,fe=U/s*ne,ve=te*.45,Me=fe*.45,A=Math.max(S*.38,6),_=.65+e*.2,g=i.active;return Y.jsxs(Y.Fragment,{children:[Y.jsx("div",{className:"aqvs-tap-scroll-circle-gradient",style:{transform:`scale(${c}, ${o})`,transition:g?"40ms transform ease-out":"200ms ease transform"}}),Y.jsx("div",{className:"aqvs-sample-visual-rod",style:{width:S,height:S,transform:`translate(calc(-50% + ${te}px), calc(-50% + ${fe}px)) scale(${c}, ${m*o})`,transition:g?"70ms transform ease-out":"200ms ease transform"}}),Y.jsx("div",{className:"aqvs-sample-visual-pupil",style:{width:A,height:A,transform:`translate(calc(-50% + ${ve}px), calc(-50% + ${Me}px)) scale(${c}, ${o})`,opacity:_,boxShadow:"0 0 8px rgba(255,255,255,0.45)",transition:g?"120ms opacity 150ms, 120ms transform ease-out ease-out":"220ms ease transform, 240ms opacity ease"}}),Y.jsx("div",{className:"aqvs-sample-visual-highlight",style:{width:F,height:V,transform:`translate(-50%, ${h}px)`,opacity:e,transition:g?"40ms height, 60ms opacity ease-out ease-out":"200ms ease height, 120ms ease opacity"}})]})},Tt=100,ur=i=>{if(!Number.isFinite(i))return 0n;const e=Math.trunc(i);return e<=0?0n:BigInt(e)},wt=(i,e)=>{if(!Number.isFinite(i))throw new Error(`valueFn returned a non-finite value at index ${e}: ${i}`);return i},ot=i=>{if(i<=0||!Number.isFinite(i))return 0;const e=Math.trunc(i);if(e<=2147483647)return e&-e;const t=BigInt(e)&-BigInt(e);return Number(t)};class Je{tree;deltas;size;baseValue;valueFn;total;constructor(e,t,n){this.reset(e,t,n)}reset(e,t,n){const s=Number.isFinite(e)&&e>0?Math.trunc(e):0;if(typeof t!="function"){this.size=s,this.tree=new Map,this.deltas=new Map,this.valueFn=void 0,this.baseValue=t,this.total=this.baseValue*this.size;return}let o=0,c;if(s>0){const f=n?.sampleRange??{from:0,to:Math.min(Tt-1,s-1)};let m=Math.max(0,Math.trunc(f.from)),I=Math.min(Math.trunc(f.to),s-1);if(m>I&&(m=0,I=Math.min(Tt-1,s-1)),s>Tt)o=Je._sampleBaseValueStrided(t,s,Tt),n?.materialize&&(c={from:m,values:Je._collectValidatedValues(t,m,I)});else{const v=Je._collectValidatedValues(t,m,I);o=Je._modeOrMedian([...v]),n?.materialize&&(c={from:m,values:v})}}if(this.size=s,this.tree=new Map,this.deltas=new Map,this.total=void 0,this.valueFn=t,this.baseValue=o,c)for(let f=0;f<c.values.length;f++){const m=c.from+f;if(m>=this.size)break;const I=c.values[f]-this.baseValue;I!==0&&(this.deltas.set(m,I),this._updateTree(m,I))}this.total=this.getTotal()}setValueFn(e,t){if(t?.reset){this.reset(this.size,e);return}typeof e=="function"?this.valueFn=e:(this.valueFn=void 0,this.baseValue=e,this.total=this._computeTreeTotal())}static _collectValidatedValues(e,t,n){const s=[];for(let o=t;o<=n;o++)s.push(wt(e(o),o));return s}static _modeOrMedian(e){if(e.length===0)return 0;e.sort((c,f)=>c-f);const t=Math.floor(e.length/2);let n;e.length%2===0?n=Math.floor((e[t-1]+e[t])/2):n=e[t];const s=new Map;let o=0;for(const c of e){const f=(s.get(c)??0)+1;s.set(c,f),f>o&&(o=f)}if(o>e.length*.2){const c=[];for(const[m,I]of s.entries())I===o&&c.push(m);const f=c.reduce((m,I)=>m+I,0);n=Math.floor(f/c.length)}return n}static _sampleBaseValueStrided(e,t,n){if(t<=0)return 0;let s=Math.max(1,Math.ceil(t/n));s%2===0&&(s+=1);const o=[];for(let c=0;c<t&&o.length<n;c+=s)o.push(wt(e(c),c));return Je._modeOrMedian(o)}update(e,t){return this.updates([{index:e,value:t}])}updates(e){const t=this._buildDeltaUpdates(e);return t.length>0?this.updateDeltas(t):this.total}updateDelta(e,t){return this.updateDeltas([{index:e,change:t}])}updateDeltas(e){const t=new Map;for(const{index:n,change:s}of e){if(n<0||n>=this.size)throw new Error(`Index ${n} out of bounds`);if(!Number.isInteger(n))throw new Error(`Index must be an integer: ${n}`);if(!Number.isFinite(s))throw new Error(`Change must be a finite number: ${s}`);const c=(t.get(n)??this.deltas.get(n)??0)+s;if(c+this.baseValue<-1e-9)throw new Error(`Change would make the value at index ${n} negative: ${c+this.baseValue}`);t.set(n,c)}for(const{index:n,change:s}of e){const c=(this.deltas.get(n)??0)+s;c===0?this.deltas.delete(n):this.deltas.set(n,c),this._updateTree(n,s)}return this.total}_updateTree(e,t){if(t===0)return;let n=e+1;for(;n<=this.size;){this.tree.set(n,(this.tree.get(n)??0)+t);const s=ot(n);if(s===0)break;n+=s}this.total!==void 0&&(this.total+=t)}_buildDeltaUpdates(e){const t=[],n=new Map;for(const{index:s,value:o}of e){if(s<0||s>=this.size)throw new Error(`Index ${s} out of bounds`);if(!Number.isInteger(s))throw new Error(`Index must be an integer: ${s}`);if(!Number.isFinite(o))throw new Error(`Value must be a finite number: ${o}`);if(o<0)throw new Error("Value cannot be negative.");const c=n.has(s)?n.get(s)??0:this.deltas.get(s)??0,f=c+this.baseValue,m=o-f;m!==0&&t.push({index:s,change:m}),n.set(s,c+m)}return t}_computeTreeTotal(){if(this.size<=0)return 0;let e=0,t=this.size;for(;t>0;){e+=this.tree.get(t)??0;const n=ot(t);if(n===0)break;t-=n}return e+this.baseValue*this.size}_materialize(e,t=!0){if(this.valueFn){const n=this.deltas.get(e)??0,o=wt(this.valueFn(e),e)-this.baseValue;if(o!==n&&(o===0?this.deltas.delete(e):this.deltas.set(e,o),t)){const c=o-n;this._updateTree(e,c)}}}_materializeRanges(e,t,n=!1){if(!(e?.materialize&&this.valueFn))return;const s=e.ranges;if(s&&s.length>0){for(const f of s){const m=Math.max(0,Math.trunc(f.from)),I=Math.min(Math.trunc(f.to),this.size-1);for(let v=m;v<=I;v++)this._materialize(v)}if(t===void 0)return;if(n){this._materialize(t);return}const o=s[0].from,c=s[s.length-1].to;t>=o&&t<=c&&this._materialize(t);return}t!==void 0&&this._materialize(t)}_findIndex(e,t={},n){if(this.size>=1073741824)return this._findIndexLarge(e,t,n);if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const s=t.materializeOption?.materialize===!0;let o;for(;;){if(o=this._descend(e,n),o<0||o>=this.size)return{index:-1,total:this.total??this.getTotal(),cumulative:void 0,currentValue:void 0,safeIndex:void 0};if(!s)break;const f=this.deltas.get(o)??0;if(this._materialize(o),(this.deltas.get(o)??0)===f)break}const c=this.prefixSum(o);return{index:o,total:this.total??c.total,cumulative:c.cumulative,currentValue:c.currentValue,safeIndex:c.safeIndex}}_descend(e,t){let n=0,s=0,o=1;for(;o<<1<=this.size;)o<<=1;for(;o>0;o>>=1){const c=n+o;if(c<=this.size){const m=(this.tree.get(c)??0)+this.baseValue*o;(t?s+m<e:s+m<=e)&&(n=c,s+=m)}}return t?n:n-1}_findIndexLarge(e,t,n){if(this.size===0)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};const s=ur(this.size);if(s===0n)return{index:-1,total:this.total??0,cumulative:void 0,currentValue:void 0,safeIndex:void 0};this._materializeRanges(t.materializeOption);const o=t.materializeOption?.materialize===!0;for(;;){let c=0n,f=s-1n,m,I,v=this.total;for(;c<=f;){const h=c+f>>1n,F=Number(h),ee=this.prefixSum(F);if(v=ee.total,n?ee.cumulative>=e:ee.cumulative<=e)if(m=h,I=ee,n){if(h===0n)break;f=h-1n}else c=h+1n;else if(n)c=h+1n;else{if(h===0n)break;f=h-1n}}const S=I,V=m!==void 0?Number(m):-1;if(o&&V>=0){const h=this.deltas.get(V)??0;if(this._materialize(V),(this.deltas.get(V)??0)!==h)continue}return{index:V,total:v,cumulative:S?.cumulative,currentValue:S?.currentValue,safeIndex:S?.safeIndex}}}prefixSum(e,t){if(e<0||Number.isNaN(e))return{cumulative:0,total:this.total,currentValue:0,safeIndex:0};if(this.size===0)return{cumulative:0,total:this.total??0,currentValue:0,safeIndex:0};const n=ue(Math.trunc(e),0,this.size-1),s=t?.materializeOption;this._materializeRanges(s,n,!0);let o=0,c=n+1;for(;c>0;){const m=this.tree.get(c)??0;o+=m;const I=ot(c);if(I===0)break;c-=I}const f=s?.materialize?this.get(n):(this.deltas.get(n)||0)+this.baseValue;return{cumulative:o+this.baseValue*(n+1),total:this.total,currentValue:f,safeIndex:n}}get(e,t){if(this.size===0)return 0;if(!Number.isInteger(e)||e<0||e>=this.size)throw new Error("Index out of bounds");const n=t?.materializeOption;return this._materializeRanges(n,e),(this.deltas.get(e)??0)+this.baseValue}getTotal(e){const t=e?.materializeOption;if(this._materializeRanges(t),this.total===void 0)if(this.size===0)this.total=0;else{this.total=this._computeTreeTotal();const n=this.prefixSum(this.getSize()-1);n.cumulative!==n.total&&N.error("Inconsistent Fenwick Tree state")}return this.total}rebuildTree(e){if(e?.materialize&&this.valueFn){const n=this.valueFn;this.reset(this.size,s=>n(s),{materialize:!0});return}const t=new Map;for(const[n,s]of this.deltas.entries()){if(s===0)continue;let o=n+1;for(;o<=this.size;){t.set(o,(t.get(o)??0)+s);const c=ot(o);if(c===0)break;o+=c}}this.tree=t,this.total=this._computeTreeTotal()}calculateAccumulatedError(){if(this.total===void 0)return 0;let e=this.baseValue*this.size;for(const t of this.deltas.values())e+=t;return this.total-e}changeSize(e){if(!Number.isFinite(e))throw new Error(`Size must be a finite number: ${e}`);const t=Math.max(0,Math.trunc(e)),n=this.size;if(t===n)return;if(t>n)this._growSize(n,t);else{for(const o of this.deltas.keys())o>=t&&this.deltas.delete(o);this.size=t,this.rebuildTree()}const s=this.prefixSum(this.getSize()-1);s.cumulative!==s.total&&N.error("Inconsistent Fenwick Tree state")}static _minCoveredLowBound(e,t){let n=1;for(;;){const s=n*2;if(Math.floor(t/s)*s<=e)break;n=s}return n*Math.floor(e/n)}_propagateDeltaToGrownNodes(e,t,n,s){let o=e+1;for(;o<=n;){const c=ot(o);if(c===0)break;o+=c}for(;o<=s;){this.tree.set(o,(this.tree.get(o)??0)+t);const c=ot(o);if(c===0)break;o+=c}}_growSize(e,t){if(this.size=t,this.deltas.size>0){const n=Je._minCoveredLowBound(e,t);if(e-n<this.deltas.size)for(let o=n;o<e;o++){const c=this.deltas.get(o);c===void 0||c===0||this._propagateDeltaToGrownNodes(o,c,e,t)}else for(const[o,c]of this.deltas.entries())c===0||o<n||this._propagateDeltaToGrownNodes(o,c,e,t)}this.total=this._computeTreeTotal()}getSize(){return this.size}findIndexAtOrAfter(e,t){return this._findIndex(e,t??{},!0)}findIndexAtOrBefore(e,t){return this._findIndex(e,t??{},!1)}}const fr=(i,e)=>{const t=i?.sampleRange,n=e?.sampleRange;return t===n?!1:t&&n?t.from!==n.from||t.to!==n.to:!0},qt=(i,e,t)=>{const n=Number.isFinite(i)&&i>0?Math.trunc(i):0,s=r.useRef(null),o=r.useRef({size:n,valueOrFn:e,options:t});s.current===null&&(s.current=new Je(n,e,t));const c=s.current,f=o.current,m=f.size!==n,I=f.valueOrFn!==e,v=fr(f.options,t),S=f.size===0&&n>0;if(I||v){const V=t?.resetOnValueFnChange??!0;v||I&&V||S?(t?.debug&&N.debug("[useFenwickMapTree] reset",{valueOrFnChanged:I,optionsChanged:v}),c.reset(n,e,t)):(m&&(t?.debug&&N.debug("[useFenwickMapTree] resize (with valueFn change)",{from:f.size,to:n}),c.changeSize(n)),t?.debug&&N.debug("[useFenwickMapTree] setValueFn (no reset)",{valueOrFnChanged:I}),c.setValueFn(e,{reset:!1})),o.current={size:n,valueOrFn:e,options:t}}else m&&(t?.debug&&N.debug("[useFenwickMapTree] resize",{from:f.size,to:n}),S?c.reset(n,e,t):c.changeSize(n),o.current={size:n,valueOrFn:e,options:t});return c};class dr{key;value;prev=null;next=null;constructor(e,t){this.key=e,this.value=t}}class Et{head=null;tail=null;addToTail(e){this.tail?(this.tail.next=e,e.prev=this.tail,this.tail=e):this.head=this.tail=e}remove(e){e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev,e.prev=null,e.next=null}removeHead(){const e=this.head;return e&&this.remove(e),e}moveToTail(e){this.remove(e),this.addToTail(e)}}function Ht(i){const e=r.useRef(new Map),t=r.useRef(new Et),n=Math.floor(i),s=r.useRef(n);r.useEffect(()=>{if(s.current=n,Number.isNaN(n)||n<0){N.warn(`useLruCache: invalid capacity ${i}; the cache will not store any entries.`),e.current.clear(),t.current=new Et;return}if(Number.isFinite(n))for(;e.current.size>n;){const v=t.current.removeHead();if(v)e.current.delete(v.key);else break}},[i,n]);const o=r.useCallback(v=>{const S=e.current.get(v);if(S)return t.current.moveToTail(S),S.value},[]),c=r.useCallback((v,S)=>{const V=s.current;if(Number.isNaN(V)||V<=0)return;let h=e.current.get(v);if(h)h.value=S,t.current.moveToTail(h);else{if(e.current.size>=V){const F=t.current.removeHead();F&&e.current.delete(F.key)}h=new dr(v,S),e.current.set(v,h),t.current.addToTail(h)}},[]),f=r.useCallback(v=>e.current.has(v),[]),m=r.useCallback(v=>{const S=e.current.get(v);S&&(t.current.remove(S),e.current.delete(v))},[]),I=r.useCallback(()=>{e.current.clear(),t.current=new Et},[]);return r.useMemo(()=>({get:o,set:c,has:f,remove:m,clear:I}),[o,c,f,m,I])}const mr=1e4,pr=()=>{const{get:i,set:e,has:t,clear:n}=Ht(mr);return r.useMemo(()=>({get:i,set:e,has:t,clear:n}),[i,e,t,n])},ce=(i,e)=>e<=0?0:ue(i,0,e-1),_t=i=>({top:Math.max(0,i?.top??0),bottom:Math.max(0,i?.bottom??0)}),Ze=(i,e)=>i<=e?0:i-e,lt=(i,e)=>i<=0?e:i+e,Mt=1e3,Ot=2e3,hr=1048576,gt=i=>{if(!Number.isFinite(i))return 0n;const e=Math.trunc(i);return e<=0?0n:BigInt(e)},gr=(i,e,t,n,s,o,c,f)=>{const m=gt(n);if(m===0n)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const I=A=>A<0n?0n:A>=m?m-1n:A,v={materializeOption:{materialize:!1}},{index:S,cumulative:V}=o.findIndexAtOrAfter(i,v);let h;S===-1?h=m-1n:(V===i?h=gt(S+1):h=gt(S),h>=m&&(h=m-1n)),i<=0&&(h=0n),f&&i>=c&&(h=m-1n);const F=A=>{const _=Number(A);if(!Number.isSafeInteger(_))return null;const{cumulative:g}=o.prefixSum(_,{materializeOption:{materialize:!1}});if(!Number.isFinite(g))return null;const{index:X}=o.findIndexAtOrAfter(g+.5,{materializeOption:{materialize:!1}});if(X===-1)return null;const q=gt(X);return q>A?q:null},ee=A=>{let _=0,g=A,X=A,q=0n,H=0;for(;g<m&&_<e;){const L=Number(g),$=s(L);if(_+=$,X=g,g+=1n,q+=1n,!Number.isFinite($)||$<0)break;if($===0){if(H+=1,H>Mt){const T=F(X);if(T!==null&&T>g)g=T,H=0;else if(T!==null&&T===g&&s(Number(g))>0)H=0;else break}}else H=0}return q===0n&&(X=A),{height:_,end:X}};let{height:U,end:ne}=ee(h);if(U<e&&h>0n){let A=h,_=U,g=0;for(;A>0n&&_<e;){A-=1n;const q=Number(A),H=s(q);if(_+=H,!Number.isFinite(H)||H<0)break;if(H===0){if(g+=1,g>Mt){const L=Number(A);if(!Number.isSafeInteger(L))break;const{cumulative:$}=o.prefixSum(L,{materializeOption:{materialize:!1}});if(!Number.isFinite($))break;const{index:T}=o.findIndexAtOrAfter($-.5,{materializeOption:{materialize:!1}}),j=T===-1?-1n:gt(T);if(j>=0n&&j<A)A=j+1n,g=0;else if(j===A&&A>=1n&&s(Number(A-1n))>0)g=0;else break}}else g=0}h=I(A);const X=ee(h);U=X.height,ne=X.end}const te=I(h),fe=I(ne),ve=I(te-BigInt(Math.max(0,t))),Me=I(fe+BigInt(Math.max(0,t)));return{renderingStartIndex:ce(Number(ve),n),renderingEndIndex:ce(Number(Me),n),visibleStartIndex:ce(Number(te),n),visibleEndIndex:ce(Number(fe),n)}},br=(i,e,t,n,s,o,c)=>{if(n===0)return{renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0};const f=Number.isFinite(c),m=f?Math.min(Math.max(0,i),c):Math.max(0,i);if(n>=Number.MAX_SAFE_INTEGER)return gr(m,e,t,n,s,o,c,f);const{index:I,cumulative:v,currentValue:S}=o.findIndexAtOrAfter(m,{materializeOption:{materialize:!1}}),V=I===-1?e<=0||(v??0)<m+(S??0)?n-1:0:I;let h=ce(V,n),F=0;if(I!==-1&&v===m)h=ce(I+1,n),F=0;else if(h===I&&v!==void 0&&S!==void 0)F=v-S-m;else{const{cumulative:A,currentValue:_}=o.prefixSum(h,{materializeOption:{materialize:!1}});F=(A??0)-(_??0)-m}const ee=F,U=(A,_)=>{let g=A,X=_,q=0;for(;g<n&&X<e;){const H=s(g);if(X+=H,g++,!Number.isFinite(H)||H<0)break;if(H===0){if(q++,q>Mt){const{cumulative:L}=o.prefixSum(g-1,{materializeOption:{materialize:!1}}),{index:$}=Number.isFinite(L)?o.findIndexAtOrAfter(L+.5,{materializeOption:{materialize:!1}}):{index:-1};if($>g)g=$,q=0;else if($===g&&s(g)>0)q=0;else break}}else q=0}return{cursor:g,height:X}},ne=U(h,F);let te=ne.cursor;if(F=ne.height,F<e&&h>0){let A=F+Math.abs(Math.min(0,ee)),_=h-1,g=0;for(;_>=0&&A<e;){const q=s(_);if(A+=q,!Number.isFinite(q)||q<0){_--;break}if(q===0){if(g++,g>Mt){const{cumulative:H}=o.prefixSum(_,{materializeOption:{materialize:!1}}),{index:L}=Number.isFinite(H)?o.findIndexAtOrAfter(H-.5,{materializeOption:{materialize:!1}}):{index:-1};if(L!==-1&&L<_){_=L,g=0;continue}if(L===_&&_>=1&&s(_-1)>0)g=0;else{_--;break}}}else g=0;_--}h=ce(_+1,n);const X=U(h,0);te=X.cursor,F=X.height}const fe=ce(h-t,n),ve=ce(Math.max(te-1,h),n),Me=ce(ve+t,n);return{renderingStartIndex:fe,renderingEndIndex:Me,visibleStartIndex:h,visibleEndIndex:ve}},Ft=(i,e,t)=>{const n=Math.max(0,e??0),s=r.useRef({last:0,id:null,arg:null}).current;return r.useEffect(()=>()=>{s.id!==null&&(cancelAnimationFrame(s.id),s.id=null)},[s]),r.useCallback(o=>{if(s.arg=o,s.id!==null)return;const c=f=>{if(s.id=null,s.arg===null)return;const m=f-s.last;if(n===0||s.last===0||m>=n){if(i.current)try{t(i.current,s.arg)}catch(I){console.error("[useThrottledInvoker] Error invoking callback",I)}s.arg=null,s.last=f}s.arg!==null&&(s.id=requestAnimationFrame(c))};s.id=requestAnimationFrame(c)},[n,t,i,s])},xr=r.memo(({index:i,top:e,height:t,item:n,children:s,clipItemHeight:o,enableKeyboardNavigation:c,onKeyDown:f,onFocus:m,registerItemRef:I})=>{const v=r.useCallback(F=>I(i,F),[i,I]),S=r.useCallback(F=>f(F,i),[i,f]),V=r.useCallback(()=>m(i),[i,m]),h=r.useCallback(F=>{F.currentTarget.focus({preventScroll:!0})},[]);return Y.jsx("div",{ref:v,"data-index":i,"data-virtualscroll-item":"true",className:"aqvs-item-container",style:{top:e,height:t,overflow:o?"hidden":void 0},tabIndex:c?-1:void 0,onPointerDown:c?h:void 0,onKeyDownCapture:c?S:void 0,onFocusCapture:c?V:void 0,children:s(n,i)})}),Ir=({itemCount:i,getItem:e,getItemKey:t,getItemHeight:n,viewportSize:s,overscanCount:o=15,className:c,onScroll:f,onRangeChange:m,children:I,background:v,initialScrollIndex:S,initialScrollOffset:V,callbackThrottleMs:h=5,contentInsets:F,onItemFocus:ee,scrollBarOptions:U,behaviorOptions:ne,onWheelHorizontal:te},fe)=>{const{width:ve,enableThumbDrag:Me,enableTrackClick:A,enableArrowButtons:_,enableScrollToTopBottomButtons:g,renderThumbOverlay:X,tapScrollCircleOptions:q}=U??{},{enablePointerDrag:H,enableKeyboardNavigation:L=!0,wheelSpeedMultiplier:$,inertiaOptions:T,clipItemHeight:j=!1,resetOnGetItemHeightChange:K=!1}=ne??{},O=r.useRef(null),W=r.useRef({renderingStartIndex:0,renderingEndIndex:0,visibleStartIndex:0,visibleEndIndex:0,scrollPosition:0,totalHeight:0}),se=r.useRef(null),Se=r.useRef(!1);r.useEffect(()=>{K&&(se.current=null)},[K,n]);const C=r.useMemo(()=>_t(F),[F]),[Ne]=r.useState(()=>{const u=typeof S=="number"&&Number.isFinite(S)?Math.max(0,Math.trunc(S)):0;return{from:Math.max(0,u-50),to:u+50}}),we=r.useMemo(()=>({sampleRange:Ne,resetOnValueFnChange:K,materialize:!0}),[K,Ne]),x=qt(i,n,we),[Re]=r.useState(()=>{let a=C.top,u=0;if(typeof S=="number"){const d=ue(S,0,i-1),R=ue(d-o*2,0,i-1),E=ue(d+o*2,0,i-1),D=S>0?{materializeOption:{materialize:!0,ranges:[{from:R,to:E}]}}:void 0,{cumulative:k,total:B,currentValue:pe}=x.prefixSum(S,D),Q=Math.max(k-pe,0);a=lt(Q,C.top),u=B??x.getTotal()}else typeof V=="number"&&(a=lt(Math.max(V,0),C.top)),u=x.getTotal();return{position:a,total:u}}),[Ee,ze]=r.useState(Re.position),[M,z]=r.useState(Re.total),y=r.useRef(Re.position),oe=r.useRef(C.top),ie=r.useRef(f??void 0),de=r.useRef(m??void 0),me=r.useRef(new Map),Z=r.useRef(null),Pe=r.useRef(null),[le,He]=r.useState(null),[ke,ge]=r.useState(!1),Ve=r.useRef(null),Ae=r.useRef(!1),be=r.useRef(0),Ce=r.useRef(!1),p=r.useRef(!1),w=r.useRef(i);w.current!==i&&(w.current=i,p.current=!0),r.useEffect(()=>{ie.current=f??void 0,de.current=m??void 0},[m,f]);const ae=r.useCallback(a=>{if(L&&a&&typeof a.focus=="function")try{a.focus({preventScroll:!0})}catch{a.focus()}},[L]),_e=r.useCallback((a,{position:u,totalHeight:d})=>{a(u,d)},[]),G=Ft(ie,h,_e),Qe=r.useCallback((a,u)=>{a(u)},[]),Ye=Ft(de,h,Qe),ye=r.useRef(C.top);ye.current=C.top;const Xe=r.useRef(G);Xe.current=G,r.useEffect(()=>(Se.current=!1,()=>{Se.current=!0,Ve.current&&(clearTimeout(Ve.current),Ve.current=null)}),[]),r.useEffect(()=>{L||(me.current.clear(),Z.current=null,Pe.current=null)},[L]);const je=r.useCallback((a,u)=>{if(!u){me.current.delete(a);return}L&&(me.current.set(a,u),Z.current===a&&(Z.current=null,Pe.current=a,ae(u)))},[L,ae]),De=.01,Te=r.useRef({rafId:null,loopActive:!1,idleFrames:0,lastRenderedPosition:Re.position}),$e=r.useCallback(()=>{const a=Te.current;a.rafId!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(a.rafId),a.rafId=null,a.loopActive=!1,a.idleFrames=0},[]);r.useEffect(()=>()=>{$e()},[$e]);const ct=r.useRef(()=>{}),ut=r.useCallback(()=>{const a=Te.current;a.rafId=null;const u=y.current,d=Ze(u,ye.current),R=x.getTotal();if(ze(D=>Math.abs(D-u)<De?D:u),Math.abs(a.lastRenderedPosition-u)>=De?(Xe.current({position:d,totalHeight:R}),a.lastRenderedPosition=u,a.idleFrames=0):a.idleFrames+=1,a.idleFrames>=2){$e();return}if(typeof requestAnimationFrame=="function"){a.rafId=requestAnimationFrame(D=>ct.current(D));return}a.loopActive=!1},[x,$e]);ct.current=ut;const ft=r.useCallback(()=>{const a=Te.current;if(a.idleFrames=0,!a.loopActive){if(a.loopActive=!0,typeof requestAnimationFrame=="function"){a.rafId=requestAnimationFrame(ut);return}a.loopActive=!1}},[ut]),re=r.useCallback((a,u)=>{const d=u?.immediate??!1,R=Ze(a,C.top);if(y.current=a,d){Te.current.lastRenderedPosition=a,Te.current.idleFrames=0,ze(a),G({position:R,totalHeight:x.getTotal()});return}ft()},[ft,x,C.top,G]),Ue=r.useCallback(a=>{const u=O.current;if(!u)return a;const d=u.getScrollPosition();be.current+=1;const R=u.scrollTo(a);return R===d&&(be.current=Math.max(0,be.current-1)),Math.abs(R-a)>.5&&(Ce.current=!0),R},[]),et=r.useRef(!1);r.useEffect(()=>{if(!et.current)if(et.current=!0,typeof V=="number"){const a=lt(Math.max(V,0),C.top),u=Math.abs(a-y.current)>.5;re(a,{immediate:!0}),u&&O.current?.scrollTo(a)}else re(y.current,{immediate:!0})},[V,C.top,re]),r.useEffect(()=>{const a=x.getTotal();if(M!==a){z(a);return}if(Ce.current){Ce.current=!1;const u=O.current;if(u&&Math.abs(u.getScrollPosition()-y.current)>.5){const d=Ue(y.current);Ce.current=!1,re(d,{immediate:!0})}}},[x,M,i,Ue,re]),r.useEffect(()=>{if(se.current!==null){const{index:a,align:u,offset:d}=se.current,R=ce(a,i),{cumulative:E,currentValue:D}=x.prefixSum(R,{materializeOption:{materialize:!1}});if(E!==void 0&&D!==void 0){const k=Math.max(E-D,0);let B=k;u==="bottom"?B=E-s:u==="center"&&(B=k+D/2-s/2),d&&(B-=d),B=Math.max(0,B);const pe=Math.max(0,M+C.top+C.bottom-s),Q=Math.min(lt(B,C.top),pe);Math.abs(Q-y.current)>1&&(N.debug("[VirtualScroll] Drift correction",{from:y.current,to:Q,targetIndex:R}),be.current===0&&(be.current+=1),O.current?.scrollTo(Q),re(Q,{immediate:!0}))}}p.current=!1},[M,x,i,C.top,re,s,C.bottom]),r.useEffect(()=>{const a=oe.current;if(a===C.top)return;const u=Ze(y.current,a),d=lt(u,C.top);oe.current=C.top,y.current=d,O.current?.scrollTo(d),re(d,{immediate:!0})},[C.top,re]);const Be=r.useCallback((a,u)=>{if(i===0)return;const d=ce(a,i),R=x.get(d),E=u-R,D=x.update(d,u);D!==void 0&&z(D),N.debug("[VirtualScroll] Updated item size manually",{index:d,size:u,total:D});let k=se.current?se.current.index:null;if(k===null){const B=y.current,pe=_t(F).top,Q=Ze(B,pe),{index:J,cumulative:xe}=x.findIndexAtOrAfter(Q,{materializeOption:{materialize:!1}});k=xe!==void 0&&xe===Q?J+1:J}if(k!==-1&&d<k&&E!==0){const B=y.current,pe=B+E;Ue(pe),re(pe,{immediate:!0}),N.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)",{from:B,to:pe,causedByIndex:d,delta:E,activeVisibleStartIndex:k})}},[x,i,Ue,re,F]),Le=r.useCallback((a,u)=>{if(!O.current||i===0)return;const d=ce(a,i),R=ce(d-o*2,i),E=ce(d+o*2,i),{cumulative:D,total:k,currentValue:B}=x.prefixSum(d,{materializeOption:{materialize:!0,ranges:[{from:R,to:E}]}});if(N.debug("[VirtualScroll] Scrolling to index:",d,"ItemBottom:",D,"Total height:",k,"ItemHeight:",B,"safeIndexFrom:",R,"safeIndexTo:",E),!k)return;const pe=Math.max(D-B,0);let Q=pe;u?.align==="bottom"?Q=D-s:u?.align==="center"&&(Q=pe+B/2-s/2),u?.offset&&(Q-=u.offset),Q=Math.max(0,Q);const J=lt(Q,C.top),xe=O.current?.getContentSize()??k+C.top+C.bottom,he=Math.max(0,xe-s),Ie=Math.min(J,he);se.current={index:d,align:u?.align,offset:u?.offset};const rt=O.current?.getScrollPosition()??-1,pt=Math.abs(rt-Ie)>.5;Ae.current=!1,be.current=0,pt&&(Ae.current=!0,be.current+=1,O.current?.scrollTo(Ie)),z(k),re(Ie,{immediate:!0}),N.debug("[VirtualScroll] Setting scroll position to:",Ie,{original:J,max:he})},[x,o,i,C.top,C.bottom,s,re]),dt=r.useCallback(a=>{if(!O.current||i===0)return;const u=x.getTotal(),d=ue(Math.floor(a),0,u),{index:R,cumulative:E,currentValue:D}=x.findIndexAtOrAfter(d,{materializeOption:{materialize:!1}}),B=(E??0)-(D??0)-d;Le(R,{offset:B})},[x,i,Le]),bt=r.useCallback(a=>{const u=Ze(y.current,C.top),d=typeof a=="function"?a(u):a;dt(d);const R=O.current?.getScrollPosition(),E=typeof R=="number"?R:y.current;return re(E),E},[C.top,dt,re]),Rt=r.useCallback((a,u)=>{N.debug("[VirtualScroll] Scroll position changed:",a);const d=Ae.current;d&&(Ae.current=!1);const R=be.current>0;if(R&&(be.current=0),d||R||p.current||(se.current=null),re(a),g){if(d||R)return;const E=a-u;if(N.debug("[VirtualScroll] Scroll diff:",E,"New:",a,"Prev:",u),Math.abs(E)>1){const D=E>0?"down":"up";He(D),ge(!0),N.debug("[VirtualScroll] Showing scroll buttons. Direction:",D),Ve.current&&clearTimeout(Ve.current),Ve.current=setTimeout(()=>{ge(!1),N.debug("[VirtualScroll] Hiding scroll buttons")},2e3)}}},[re,g]),Oe=r.useMemo(()=>Ze(Ee,C.top),[C.top,Ee]),tt=r.useMemo(()=>{const a=x.getTotal(),u=br(Oe,s,o,i,n,x,a);return N.debug("[VirtualScroll] Calculated rendering range:",()=>({...u,scrollPosition:Oe,renderingContentSize:a,overscanCount:o,viewportSize:s})),u},[Oe,s,o,i,n,x]),{renderingStartIndex:Ke,renderingEndIndex:We,visibleStartIndex:Fe,visibleEndIndex:st}=tt,Ge=r.useCallback((a,u)=>{if(!L||i===0)return;const d=ce(a,i);if(!(u?.ensureVisible??!0)){const he=me.current.get(d);he&&(Z.current=null,Pe.current=d,ae(he));return}const E=x.prefixSum(d,{materializeOption:{materialize:!1}}),D=E.currentValue,k=Math.max(E.cumulative-D,0),B=k+D,pe=Ze(y.current,C.top),Q=pe+s;if(k<pe||B>Q){Le(d);const he=me.current.get(d);he?(Z.current=null,Pe.current=d,ae(he)):Z.current=d;return}const xe=me.current.get(d);if(xe){Z.current=null,Pe.current=d,ae(xe);return}Z.current=d},[L,i,x,C.top,Le,ae,s]),xt=r.useCallback((a,u)=>{if(!L||a.defaultPrevented||a.altKey||a.metaKey||a.ctrlKey)return;const d=a.target;if(d){const R=d.tagName;if(R==="INPUT"||R==="TEXTAREA"||R==="SELECT"||d.isContentEditable)return}if(a.key==="ArrowDown"){u<i-1&&(a.preventDefault(),Ge(u+1));return}if(a.key==="ArrowUp"){u>0&&(a.preventDefault(),Ge(u-1));return}if(a.key==="PageDown"){if(u<i-1){a.preventDefault();const{visibleStartIndex:R,visibleEndIndex:E}=W.current,D=Math.max(E-R+1,1),k=Math.max(D,1),B=ce(Math.min(u+k,i-1),i);Ge(B)}return}if(a.key==="PageUp"&&u>0){a.preventDefault();const{visibleStartIndex:R,visibleEndIndex:E}=W.current,D=Math.max(E-R+1,1),k=Math.max(D,1),B=ce(u-k,i);Ge(B)}},[L,i,Ge]),It=r.useCallback(a=>{if(!L)return;const u=ce(a,i);Z.current=null,Pe.current=u,ee?.(u)},[L,i,ee]);r.useEffect(()=>{const a=O.current?.getScrollPosition()??0,u=y.current,d=Ze(u,C.top);N.debug("[VirtualScroll] Range change effect triggered",()=>({renderingStartIndex:Ke,renderingEndIndex:We,visibleStartIndex:Fe,visibleEndIndex:st,scrollPositionState:Ee,paneScrollPosition:u,logicalScrollPosition:d,contentSize:M,scrollPaneScrollPosition:a})),Ye({renderingStartIndex:Ke,renderingEndIndex:We,visibleStartIndex:Fe,visibleEndIndex:st,scrollPosition:d,totalHeight:M})},[M,We,Ke,C.top,Ye,Ee,st,Fe]);const Pt=r.useCallback(()=>{if(!g)return null;const a=ke&&le!==null,u=le==="up";return Y.jsx("div",{className:"aqvs-scroll-to-edge-overlay","data-visible":a,children:u?Y.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top",children:Y.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:d=>{d.stopPropagation(),Ae.current=!0,Le(0),ge(!1)},children:"Top"})}):Y.jsx("div",{className:"aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom",children:Y.jsx("button",{type:"button",className:"aqvs-scroll-to-edge-button",onClick:d=>{d.stopPropagation(),Ae.current=!0,Le(i-1),ge(!1)},children:"Bottom"})})})},[g,ke,le,Le,i]),mt=r.useRef(0),{visibleItems:it,renderAnchor:at}=r.useMemo(()=>{if(i===0)return{visibleItems:Y.jsx("div",{className:"aqvs-no-items-container",children:Y.jsx("div",{className:"aqvs-no-items-text",children:"No items"})}),renderAnchor:0};const a=ce(Ke,i),u=ce(We,i),{cumulative:d,currentValue:R}=x.prefixSum(a,{materializeOption:{materialize:!1}}),E=d-R;Number.isFinite(E)&&Math.abs(E-mt.current)>hr&&(mt.current=E);const D=mt.current,k=[],B=[];let pe=0,Q=E;for(let J=a;J<=u;J++){if(B.length>=Ot){N.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.",{cap:Ot,safeRenderingStartIndex:a,safeRenderingEndIndex:u});break}const xe=n(J),he=x.get(J),Ie=xe-he;Ie!==0&&k.push({index:J,value:xe});const rt=Q+pe,pt=t?t(J):J;B.push(Y.jsx(xr,{index:J,top:rt-D,height:xe,item:e(J),clipItemHeight:j,enableKeyboardNavigation:L,onKeyDown:xt,onFocus:It,registerItemRef:je,children:I},pt)),pe+=Ie,Q+=he}return k.length>0&&Promise.resolve().then(()=>{if(Se.current)return;let J=0;for(const Ie of k)if(Ie.index<Fe){const rt=x.get(Ie.index);J+=Ie.value-rt}const xe=x.updates(k);if(Se.current||typeof xe!="number")return;z(xe),N.debug("[VirtualScroll] Updated heights for items",k,"New total height:",xe);const he=O.current?.getScrollPosition()??y.current;if(J!==0){const Ie=he+J;Ue(Ie),re(Ie,{immediate:!0}),N.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)",{from:he,to:Ie,shiftAmount:J})}else he!==y.current&&re(he)}),{visibleItems:B,renderAnchor:D}},[I,j,M,L,i,x,e,t,n,It,xt,Ue,je,We,Ke,re,Fe]),l=r.useCallback(a=>{const u=(h??0)>0,d=Math.abs(a-Ee),R=u&&d>.5?Ee:a,E=Ze(R,C.top);if(N.debug("[VirtualScroll] Rendering visible items",()=>({currentScrollPosition:a,effectiveScrollPosition:E,renderingStartIndex:Ke,renderingEndIndex:We,itemCount:i,viewportSize:s,callbackThrottleMs:h,diff:d,rawEffectiveScrollPosition:R})),i===0)return it;const D=C.top+at-R,k=C.bottom>0?Y.jsx("div",{className:"aqvs-bottom-inset",style:{top:x.getTotal()-at,height:C.bottom}},"virtualscroll-bottom-inset"):null;return N.debug("[VirtualScroll] Rendering items",()=>({containerTop:D,logicalScrollPosition:Oe,resolvedInsets:C,effectiveScrollPosition:E})),Y.jsxs("div",{className:"aqvs-items-wrapper",style:{top:0,transform:`translateY(${D}px)`,willChange:"transform"},children:[it,k]})},[h,i,x,Oe,at,We,Ke,C,Ee,s,it]),b=r.useMemo(()=>({renderingStartIndex:tt.renderingStartIndex,renderingEndIndex:tt.renderingEndIndex,visibleStartIndex:tt.visibleStartIndex,visibleEndIndex:tt.visibleEndIndex,scrollPosition:Oe,totalHeight:x.getTotal()}),[tt,Oe,x,M]);r.useEffect(()=>{W.current=b},[b]),r.useImperativeHandle(fe,()=>({getScrollPosition:()=>O.current?.getScrollPosition()??-1,getContentSize:()=>O.current?.getContentSize()??-1,getViewportSize:()=>O.current?.getViewportSize()??-1,scrollTo:bt,scrollToIndex:Le,getFenwickTreeTotalHeight:()=>x.getTotal(),getFenwickSize:()=>x.getSize(),focusItemAtIndex:Ge,getRange:()=>W.current,updateItemSize:Be}),[bt,Le,x,Ge,Be]);const P=x.getTotal()+C.top+C.bottom;return Y.jsx(Bt,{ref:O,contentSize:P,viewportSize:s,className:c,onScroll:Rt,background:v,tapScrollCircleOptions:q,inertiaOptions:T,itemCount:i,scrollBarWidth:ve,enableThumbDrag:Me,enableTrackClick:A,enableArrowButtons:_,enablePointerDrag:H,renderThumbOverlay:X,wheelSpeedMultiplier:$,onWheelHorizontal:te,contentInsets:C,visibleStartIndex:Fe,visibleEndIndex:st,renderOverlay:Pt,initialScrollPosition:Re.position,children:l})},vr=r.forwardRef(Ir);exports.FenwickMapTree=Je;exports.ScrollBar=Yt;exports.ScrollPane=Bt;exports.VirtualScroll=vr;exports.minmax=ue;exports.tapScrollCircleSampleVisual=cr;exports.useFenwickMapTree=qt;exports.useHeightCache=pr;exports.useLruCache=Ht;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
export { ScrollBar, type ScrollBarProps, type ScrollBarTapCircleOptions, type ScrollBarThumbOverlayRenderProps } from './ScrollBar.
|
|
2
|
-
export { ScrollPane, type ScrollPaneContentInsets, type ScrollPaneHandle, type ScrollPaneInertiaOptions, type ScrollPaneProps } from './ScrollPane.
|
|
3
|
-
export type { TapScrollCircleRenderProps } from './TapScrollCircle.
|
|
4
|
-
export { tapScrollCircleSampleVisual } from './tapScrollCircleSampleVisual.
|
|
5
|
-
export { FenwickMapTree, useFenwickMapTree } from './useFenwickMapTree.
|
|
6
|
-
export { useHeightCache } from './useHeightCache.
|
|
7
|
-
export { useLruCache } from './useLruCache.
|
|
8
|
-
export { minmax } from './utils.
|
|
9
|
-
export { VirtualScroll, type VirtualScrollHandle, type VirtualScrollRange } from './VirtualScroll.
|
|
10
|
-
//# sourceMappingURL=index.d.ts.map
|
|
1
|
+
export { ScrollBar, type ScrollBarProps, type ScrollBarTapCircleOptions, type ScrollBarThumbOverlayRenderProps } from './ScrollBar.cjs';
|
|
2
|
+
export { ScrollPane, type ScrollPaneContentInsets, type ScrollPaneHandle, type ScrollPaneInertiaOptions, type ScrollPaneProps } from './ScrollPane.cjs';
|
|
3
|
+
export type { TapScrollCircleRenderProps } from './TapScrollCircle.cjs';
|
|
4
|
+
export { tapScrollCircleSampleVisual } from './tapScrollCircleSampleVisual.cjs';
|
|
5
|
+
export { FenwickMapTree, useFenwickMapTree } from './useFenwickMapTree.cjs';
|
|
6
|
+
export { useHeightCache } from './useHeightCache.cjs';
|
|
7
|
+
export { useLruCache } from './useLruCache.cjs';
|
|
8
|
+
export { minmax } from './utils.cjs';
|
|
9
|
+
export { VirtualScroll, type VirtualScrollBehaviorOptions, type VirtualScrollHandle, type VirtualScrollProps, type VirtualScrollRange, type VirtualScrollScrollBarOptions, } from './VirtualScroll.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {}
|
|
1
|
+
export { ScrollBar, type ScrollBarProps, type ScrollBarTapCircleOptions, type ScrollBarThumbOverlayRenderProps } from './ScrollBar.tsx';
|
|
2
|
+
export { ScrollPane, type ScrollPaneContentInsets, type ScrollPaneHandle, type ScrollPaneInertiaOptions, type ScrollPaneProps } from './ScrollPane.tsx';
|
|
3
|
+
export type { TapScrollCircleRenderProps } from './TapScrollCircle.tsx';
|
|
4
|
+
export { tapScrollCircleSampleVisual } from './tapScrollCircleSampleVisual.tsx';
|
|
5
|
+
export { FenwickMapTree, useFenwickMapTree } from './useFenwickMapTree.ts';
|
|
6
|
+
export { useHeightCache } from './useHeightCache.ts';
|
|
7
|
+
export { useLruCache } from './useLruCache.ts';
|
|
8
|
+
export { minmax } from './utils.ts';
|
|
9
|
+
export { VirtualScroll, type VirtualScrollBehaviorOptions, type VirtualScrollHandle, type VirtualScrollProps, type VirtualScrollRange, type VirtualScrollScrollBarOptions, } from './VirtualScroll.tsx';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,uBAAuB,CAAA;AAE9B,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,yBAAyB,EAAE,KAAK,gCAAgC,EAAE,MAAM,iBAAiB,CAAA;AACvI,OAAO,EAAE,UAAU,EAAE,KAAK,uBAAuB,EAAE,KAAK,gBAAgB,EAAE,KAAK,wBAAwB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvJ,YAAY,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAA;AAC/E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EACH,aAAa,EACb,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,6BAA6B,GACrC,MAAM,qBAAqB,CAAA"}
|