@aiquants/virtualscroll 1.20.0 → 1.22.1

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.
Files changed (42) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +5 -3
  3. package/dist/ScrollBar.d.cts +123 -0
  4. package/dist/ScrollBar.d.ts +123 -0
  5. package/dist/ScrollBar.d.ts.map +1 -1
  6. package/dist/ScrollPane.d.cts +16 -0
  7. package/dist/ScrollPane.d.ts +16 -0
  8. package/dist/ScrollPane.d.ts.map +1 -1
  9. package/dist/TapScrollCircle.d.ts.map +1 -1
  10. package/dist/VirtualScroll.d.cts +9 -0
  11. package/dist/VirtualScroll.d.ts +9 -0
  12. package/dist/VirtualScroll.d.ts.map +1 -1
  13. package/dist/index.cjs +1 -1
  14. package/dist/index.d.cts +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1558 -1436
  18. package/dist/styles/virtualscroll.css +1 -1
  19. package/dist/styles/virtualscroll.standalone.css +1 -1
  20. package/dist/tapScrollCircleSampleVisual.d.ts.map +1 -1
  21. package/dist/useFenwickMapTree.d.cts +43 -0
  22. package/dist/useFenwickMapTree.d.ts +43 -0
  23. package/dist/useFenwickMapTree.d.ts.map +1 -1
  24. package/package.json +4 -1
  25. package/src/ScrollBar.tsx +218 -33
  26. package/src/ScrollPane.tsx +366 -24
  27. package/src/TapScrollCircle.tsx +10 -0
  28. package/src/VirtualScroll.tsx +11 -1
  29. package/src/index.ts +1 -1
  30. package/src/styles/virtualscroll.css +3 -3
  31. package/src/tapScrollCircleSampleVisual.tsx +22 -5
  32. package/src/useFenwickMapTree.ts +95 -13
  33. package/src/ScrollBar.spec.tsx +0 -620
  34. package/src/ScrollPane.spec.tsx +0 -496
  35. package/src/TapScrollCircle.spec.tsx +0 -275
  36. package/src/VirtualScroll.spec.ts +0 -641
  37. package/src/cli.server.spec.ts +0 -137
  38. package/src/logger.spec.ts +0 -128
  39. package/src/useFenwickMapTree.huge.spec.ts +0 -388
  40. package/src/useFenwickMapTree.spec.ts +0 -1518
  41. package/src/useLruCache.spec.ts +0 -382
  42. package/src/utils.spec.ts +0 -39
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { jsx as Q, jsxs as ue, Fragment as Ke } from "react/jsx-runtime";
2
- import Qe, { memo as tr, forwardRef as Fe, useState as jt, useRef as g, useCallback as S, useImperativeHandle as ze, useMemo as Vt, useLayoutEffect as be, useEffect as X, useId as er } from "react";
3
- import { twMerge as ce } from "tailwind-merge";
4
- class N {
1
+ import { jsx as it, jsxs as de, Fragment as je } from "react/jsx-runtime";
2
+ import Je, { memo as Qe, forwardRef as Ye, useState as Zt, useRef as T, useCallback as v, useImperativeHandle as Be, useMemo as At, useLayoutEffect as xe, useEffect as Y, useId as tr } from "react";
3
+ import { twMerge as ue } from "tailwind-merge";
4
+ class C {
5
5
  level;
6
6
  prefix;
7
7
  impl;
@@ -14,7 +14,7 @@ class N {
14
14
  constructor(t = 2, e = "[virtualscroll]", r = console) {
15
15
  this.level = t, this.prefix = e, this.impl = r;
16
16
  }
17
- static instance = new N(2, "[virtualscroll]");
17
+ static instance = new C(2, "[virtualscroll]");
18
18
  /**
19
19
  * @method setLevel
20
20
  * @description Updates the current log level for the static instance.
@@ -22,7 +22,7 @@ class N {
22
22
  * @param {LogLevel} level - The new log level.
23
23
  */
24
24
  static setLevel(t) {
25
- N.instance.setLevel(t);
25
+ C.instance.setLevel(t);
26
26
  }
27
27
  /**
28
28
  * @method setLevel
@@ -40,7 +40,7 @@ class N {
40
40
  * @param {ILogger} impl - The new logger implementation.
41
41
  */
42
42
  static setImplementation(t) {
43
- N.instance.setImplementation(t);
43
+ C.instance.setImplementation(t);
44
44
  }
45
45
  /**
46
46
  * @method setImplementation
@@ -58,7 +58,7 @@ class N {
58
58
  * @param {string} prefix - The new prefix.
59
59
  */
60
60
  static setPrefix(t) {
61
- N.instance.setPrefix(t);
61
+ C.instance.setPrefix(t);
62
62
  }
63
63
  /**
64
64
  * @method setPrefix
@@ -77,7 +77,7 @@ class N {
77
77
  * @returns {boolean} True if a message at `level` would be emitted. / `level` のメッセージが出力されるなら true。
78
78
  */
79
79
  static isEnabled(t) {
80
- return N.instance.isEnabled(t);
80
+ return C.instance.isEnabled(t);
81
81
  }
82
82
  /**
83
83
  * @method isEnabled
@@ -122,41 +122,41 @@ class N {
122
122
  return typeof t == "string" ? [`${this.prefix} ${t}`] : [this.prefix, t];
123
123
  }
124
124
  static debug(t, ...e) {
125
- N.instance.debug(t, ...e);
125
+ C.instance.debug(t, ...e);
126
126
  }
127
127
  debug(t, ...e) {
128
- this.level <= 0 && this.impl.debug(...this.formatMessage(N.resolveLazy(t)), ...e.map(N.resolveLazy));
128
+ this.level <= 0 && this.impl.debug(...this.formatMessage(C.resolveLazy(t)), ...e.map(C.resolveLazy));
129
129
  }
130
130
  static info(t, ...e) {
131
- N.instance.info(t, ...e);
131
+ C.instance.info(t, ...e);
132
132
  }
133
133
  info(t, ...e) {
134
- this.level <= 1 && this.impl.info(...this.formatMessage(N.resolveLazy(t)), ...e.map(N.resolveLazy));
134
+ this.level <= 1 && this.impl.info(...this.formatMessage(C.resolveLazy(t)), ...e.map(C.resolveLazy));
135
135
  }
136
136
  static warn(t, ...e) {
137
- N.instance.warn(t, ...e);
137
+ C.instance.warn(t, ...e);
138
138
  }
139
139
  warn(t, ...e) {
140
- this.level <= 2 && this.impl.warn(...this.formatMessage(N.resolveLazy(t)), ...e.map(N.resolveLazy));
140
+ this.level <= 2 && this.impl.warn(...this.formatMessage(C.resolveLazy(t)), ...e.map(C.resolveLazy));
141
141
  }
142
142
  static error(t, ...e) {
143
- N.instance.error(t, ...e);
143
+ C.instance.error(t, ...e);
144
144
  }
145
145
  error(t, ...e) {
146
- this.level <= 3 && this.impl.error(...this.formatMessage(N.resolveLazy(t)), ...e.map(N.resolveLazy));
146
+ this.level <= 3 && this.impl.error(...this.formatMessage(C.resolveLazy(t)), ...e.map(C.resolveLazy));
147
147
  }
148
148
  }
149
- const Ye = {
149
+ const qe = {
150
150
  active: !1,
151
151
  offsetX: 0,
152
152
  offsetY: 0,
153
153
  distance: 0,
154
154
  direction: 0,
155
155
  pointerId: null
156
- }, Ae = 6, rr = 8, nr = ({ dragState: i, normalizedDistance: t }) => {
157
- const e = 1 + t * 0.18, r = 0.16 + t * 0.24, n = 0.38 + t * 0.28, s = i.active ? "80ms ease-out" : "220ms ease";
158
- return /* @__PURE__ */ ue(Ke, { children: [
159
- /* @__PURE__ */ Q(
156
+ }, Le = 6, er = 8, rr = ({ dragState: n, normalizedDistance: t }) => {
157
+ const e = 1 + t * 0.18, r = 0.16 + t * 0.24, i = 0.38 + t * 0.28, s = n.active ? "80ms ease-out" : "220ms ease";
158
+ return /* @__PURE__ */ de(je, { children: [
159
+ /* @__PURE__ */ it(
160
160
  "div",
161
161
  {
162
162
  className: "aqvs-tap-scroll-circle-visual-outer",
@@ -164,166 +164,171 @@ const Ye = {
164
164
  background: "linear-gradient(140deg, rgba(255,255,255,0.62), rgba(72,72,72,0.48))",
165
165
  boxShadow: `0 0 0 1px rgba(255,255,255,0.28), 0 10px 22px rgba(0,0,0,${r})`,
166
166
  transform: `scale(${e})`,
167
- transition: `${s}, ${i.active ? "80ms" : "260ms"} box-shadow ease`
167
+ transition: `${s}, ${n.active ? "80ms" : "260ms"} box-shadow ease`
168
168
  }
169
169
  }
170
170
  ),
171
- /* @__PURE__ */ Q(
171
+ /* @__PURE__ */ it(
172
172
  "div",
173
173
  {
174
174
  className: "aqvs-tap-scroll-circle-inner",
175
175
  style: {
176
176
  background: "linear-gradient(140deg, rgba(255,255,255,0.72), rgba(28,28,28,0.58))",
177
177
  boxShadow: "inset 0 4px 10px rgba(0,0,0,0.24), inset 0 0 2px rgba(255,255,255,0.55)",
178
- opacity: n,
179
- transition: i.active ? "120ms opacity ease-out" : "220ms opacity ease"
178
+ opacity: i,
179
+ transition: n.active ? "120ms opacity ease-out" : "220ms opacity ease"
180
180
  }
181
181
  }
182
182
  )
183
183
  ] });
184
- }, We = tr(
185
- Fe(({ onDragChange: i, className: t, maxVisualDistance: e = 160, size: r = 40, style: n, opacity: s = 1, renderVisual: l }, u) => {
186
- const [f, x] = jt(Ye), I = g(null), M = g(null), _ = g({ x: 0, y: 0 }), p = g(null), D = g(0), J = S(
187
- (b) => {
188
- x(b), i(b);
184
+ }, Ge = Qe(
185
+ Ye(({ onDragChange: n, className: t, maxVisualDistance: e = 160, size: r = 40, style: i, opacity: s = 1, renderVisual: l }, c) => {
186
+ const [f, x] = Zt(qe), I = T(null), P = T(null), E = T({ x: 0, y: 0 }), g = T(null), _ = T(0), z = v(
187
+ (h) => {
188
+ x(h), n(h);
189
189
  },
190
- [i]
191
- ), G = S(
192
- (b, K, dt = !1) => {
193
- const { x: et, y: Y } = _.current, j = b - et, ht = K - Y, St = Math.abs(ht), R = St < Ae ? 0 : ht < 0 ? -1 : 1, Ft = D.current;
194
- let Lt = R;
195
- const v = Ae + rr;
196
- R === 0 ? Ft !== 0 && St < v ? Lt = Ft : (Lt = 0, dt || (D.current = 0)) : R !== Ft && Ft !== 0 && St < v ? Lt = Ft : D.current = R, J({
197
- active: dt || St >= Ae,
198
- offsetX: j,
199
- offsetY: ht,
200
- distance: St,
201
- direction: Lt,
190
+ [n]
191
+ ), j = v(
192
+ (h, $, Tt = !1) => {
193
+ const { x: wt, y: Z } = E.current, k = h - wt, Rt = $ - Z, U = Math.abs(Rt), Ct = U < Le ? 0 : Rt < 0 ? -1 : 1, w = _.current;
194
+ let Yt = Ct;
195
+ const Xt = Le + er;
196
+ Ct === 0 ? w !== 0 && U < Xt ? Yt = w : (Yt = 0, Tt || (_.current = 0)) : Ct !== w && w !== 0 && U < Xt ? Yt = w : _.current = Ct, z({
197
+ active: Tt || U >= Le,
198
+ offsetX: k,
199
+ offsetY: Rt,
200
+ distance: U,
201
+ direction: Yt,
202
202
  pointerId: I.current
203
203
  });
204
204
  },
205
- [J]
206
- ), rt = S((b) => {
207
- if (b === null)
205
+ [z]
206
+ ), ft = v((h) => {
207
+ if (h === null)
208
208
  return;
209
- const K = p.current;
210
- K?.hasPointerCapture(b) && K.releasePointerCapture(b);
211
- }, []), nt = S(
212
- (b = !1) => {
213
- b && rt(I.current), I.current = null, M.current = null, D.current = 0, J(Ye);
209
+ const $ = g.current;
210
+ $?.hasPointerCapture(h) && $.releasePointerCapture(h);
211
+ }, []), Q = v(
212
+ (h = !1) => {
213
+ h && ft(I.current), I.current = null, P.current = null, _.current = 0, z(qe);
214
214
  },
215
- [J, rt]
216
- ), st = S(
217
- (b) => {
218
- if (I.current !== null && I.current !== b.pointerId) {
219
- M.current = { pointerId: b.pointerId, clientX: b.clientX, clientY: b.clientY }, b.preventDefault(), b.stopPropagation();
215
+ [z, ft]
216
+ ), tt = v(
217
+ (h) => {
218
+ if (I.current !== null && I.current !== h.pointerId) {
219
+ P.current = { pointerId: h.pointerId, clientX: h.clientX, clientY: h.clientY }, h.preventDefault(), h.stopPropagation();
220
220
  return;
221
221
  }
222
- b.preventDefault(), b.stopPropagation();
223
- const K = p.current ?? b.currentTarget, { left: dt, top: et, width: Y, height: j } = K.getBoundingClientRect();
224
- _.current = { x: dt + Y / 2, y: et + j / 2 }, I.current = b.pointerId;
222
+ h.preventDefault(), h.stopPropagation();
223
+ const $ = g.current ?? h.currentTarget, { left: Tt, top: wt, width: Z, height: k } = $.getBoundingClientRect();
224
+ E.current = { x: Tt + Z / 2, y: wt + k / 2 }, I.current = h.pointerId;
225
225
  try {
226
- K.setPointerCapture(b.pointerId);
226
+ $.setPointerCapture(h.pointerId);
227
227
  } catch {
228
228
  }
229
- G(b.clientX, b.clientY, !0);
229
+ j(h.clientX, h.clientY, !0);
230
230
  },
231
- [G]
232
- ), wt = S(
233
- (b) => {
234
- if (I.current !== b.pointerId) {
235
- M.current !== null && M.current.pointerId === b.pointerId && (M.current = { pointerId: b.pointerId, clientX: b.clientX, clientY: b.clientY });
231
+ [j]
232
+ ), pt = v(
233
+ (h) => {
234
+ if (I.current !== h.pointerId) {
235
+ P.current !== null && P.current.pointerId === h.pointerId && (P.current = { pointerId: h.pointerId, clientX: h.clientX, clientY: h.clientY });
236
236
  return;
237
237
  }
238
- b.preventDefault(), G(b.clientX, b.clientY);
238
+ h.preventDefault(), j(h.clientX, h.clientY);
239
239
  },
240
- [G]
241
- ), At = S(
242
- (b) => {
243
- if (I.current !== b.pointerId) {
244
- M.current !== null && M.current.pointerId === b.pointerId && (M.current = null);
240
+ [j]
241
+ ), It = v(
242
+ (h) => {
243
+ if (I.current !== h.pointerId) {
244
+ P.current !== null && P.current.pointerId === h.pointerId && (P.current = null);
245
245
  return;
246
246
  }
247
- b.preventDefault(), b.stopPropagation();
248
- const K = M.current;
249
- if (M.current = null, K !== null) {
250
- rt(b.pointerId);
251
- const dt = p.current;
252
- let et = !0;
253
- if (dt !== null && typeof dt.setPointerCapture == "function")
247
+ h.preventDefault(), h.stopPropagation();
248
+ const $ = P.current;
249
+ if (P.current = null, $ !== null) {
250
+ ft(h.pointerId);
251
+ const Tt = g.current;
252
+ let wt = !0;
253
+ if (Tt !== null && typeof Tt.setPointerCapture == "function")
254
254
  try {
255
- dt.setPointerCapture(K.pointerId);
256
- } catch (Y) {
257
- (typeof Y == "object" && Y !== null && "name" in Y ? Y.name : void 0) === "NotFoundError" && (et = !1);
255
+ Tt.setPointerCapture($.pointerId);
256
+ } catch (Z) {
257
+ (typeof Z == "object" && Z !== null && "name" in Z ? Z.name : void 0) === "NotFoundError" && (wt = !1);
258
258
  }
259
- if (et) {
260
- I.current = K.pointerId, G(K.clientX, K.clientY, !0);
259
+ if (wt) {
260
+ I.current = $.pointerId, j($.clientX, $.clientY, !0);
261
261
  return;
262
262
  }
263
263
  }
264
- nt(!0);
264
+ Q(!0);
265
265
  },
266
- [nt, rt, G]
267
- ), k = S(
268
- (b) => {
269
- I.current === b.pointerId && nt(!1);
266
+ [Q, ft, j]
267
+ ), D = v(
268
+ (h) => {
269
+ h.target === h.currentTarget && I.current === h.pointerId && Q(!1);
270
270
  },
271
- [nt]
271
+ [Q]
272
272
  );
273
- ze(
274
- u,
273
+ Be(
274
+ c,
275
275
  () => ({
276
276
  reset: () => {
277
- nt(!0);
277
+ Q(!0);
278
278
  },
279
- getElement: () => p.current
279
+ getElement: () => g.current
280
280
  }),
281
- [nt]
281
+ [Q]
282
282
  );
283
- const B = Math.min(Math.max(s, 0), 1), w = r / 64, C = Math.min(f.distance, e) / e, U = f.direction * C * 10 * w, H = l ?? nr, tt = {
283
+ const O = Math.min(Math.max(s, 0), 1), M = r / 64, B = Math.min(f.distance, e) / e, N = f.direction * B * 10 * M, q = l ?? rr, et = {
284
284
  dragState: f,
285
- normalizedDistance: C,
286
- sizeScale: w,
285
+ normalizedDistance: B,
286
+ sizeScale: M,
287
287
  size: r,
288
- opacity: B
289
- }, L = {
290
- ...n,
288
+ opacity: O
289
+ }, G = {
290
+ ...i,
291
291
  width: r,
292
292
  height: r,
293
- transform: `translateY(${U}px)`
293
+ transform: `translateY(${N}px)`
294
294
  };
295
- return L.opacity = B, /* @__PURE__ */ Q(
295
+ return G.opacity = O, /* @__PURE__ */ it(
296
296
  "div",
297
297
  {
298
- ref: p,
298
+ ref: g,
299
299
  "data-testid": "virtual-scroll-tap-circle",
300
- className: ce("aqvs-tap-scroll-circle", t),
301
- style: L,
300
+ className: ue("aqvs-tap-scroll-circle", t),
301
+ style: G,
302
302
  tabIndex: -1,
303
- onPointerDown: st,
304
- onPointerMove: wt,
305
- onPointerUp: At,
306
- onPointerCancel: At,
307
- onLostPointerCapture: k,
303
+ onPointerDown: tt,
304
+ onPointerMove: pt,
305
+ onPointerUp: It,
306
+ onPointerCancel: It,
307
+ onLostPointerCapture: D,
308
308
  role: "presentation",
309
- children: H(tt)
309
+ children: q(et)
310
310
  }
311
311
  );
312
312
  })
313
313
  );
314
- We.displayName = "TapScrollCircle";
315
- const pt = (i, t, e) => Math.max(t, Math.min(e, i)), Oe = "virtualscroll:tap-scroll-cancel", Be = 20, ir = 250, or = 60, sr = 20, ar = 20, lr = 240, qe = { active: !1, offsetX: 0, offsetY: 0, distance: 0, direction: 0, pointerId: null }, De = 2.2, cr = 8, ur = 120, dr = 1 / 10, Wt = {
314
+ Ge.displayName = "TapScrollCircle";
315
+ const xt = (n, t, e) => Math.max(t, Math.min(e, n)), ze = "virtualscroll:tap-scroll-cancel", He = 20, nr = 250, ir = 60, sr = 20, or = 20, Ze = {
316
+ /** 速度が最大に達する引き距離 (px)。`maxVisualDistance` の既定値。 */
317
+ maxDistance: 240,
318
+ /** 最小速度倍率 (ビューポート比)。 */
319
+ minSpeedMultiplier: 0.2
320
+ }, ar = Ze.maxDistance, Xe = { active: !1, offsetX: 0, offsetY: 0, distance: 0, direction: 0, pointerId: null }, _e = 2.2, lr = 8, cr = 120, ur = 1 / 10, Gt = {
316
321
  enabled: !0,
317
322
  size: 40,
318
323
  offsetX: -80,
319
324
  offsetY: 0,
320
325
  className: void 0,
321
- maxVisualDistance: lr,
322
- minSpeedMultiplier: 0.2,
326
+ maxVisualDistance: ar,
327
+ minSpeedMultiplier: Ze.minSpeedMultiplier,
323
328
  opacity: 0.9,
324
329
  renderVisual: void 0,
325
330
  maxSpeedCurve: void 0
326
- }, fr = (i) => i ? {
331
+ }, dr = (n) => n ? {
327
332
  mainSizeKey: "width",
328
333
  crossSizeKey: "height",
329
334
  positionKey: "left",
@@ -343,493 +348,512 @@ const pt = (i, t, e) => Math.max(t, Math.min(e, i)), Oe = "virtualscroll:tap-scr
343
348
  arrowIcons: ["▲", "▼"],
344
349
  directionClass: "aqvs-scrollbar-vertical",
345
350
  orientation: "vertical"
346
- }, mr = (i, t) => {
347
- const e = i?.maxSpeedMultiplier, r = typeof e == "number" ? e : gr(t);
351
+ }, fr = (n, t) => {
352
+ const e = n?.maxSpeedMultiplier, r = typeof e == "number" ? e : br(t);
348
353
  return {
349
- enabled: i?.enabled ?? Wt.enabled,
350
- size: i?.size ?? Wt.size,
351
- offsetX: i?.offsetX ?? Wt.offsetX,
352
- offsetY: i?.offsetY ?? Wt.offsetY,
353
- className: i?.className ?? Wt.className,
354
- maxVisualDistance: i?.maxVisualDistance ?? Wt.maxVisualDistance,
354
+ enabled: n?.enabled ?? Gt.enabled,
355
+ size: n?.size ?? Gt.size,
356
+ offsetX: n?.offsetX ?? Gt.offsetX,
357
+ offsetY: n?.offsetY ?? Gt.offsetY,
358
+ className: n?.className ?? Gt.className,
359
+ maxVisualDistance: n?.maxVisualDistance ?? Gt.maxVisualDistance,
355
360
  maxSpeedMultiplier: r,
356
- minSpeedMultiplier: Math.max(i?.minSpeedMultiplier ?? Wt.minSpeedMultiplier, 0),
357
- opacity: pt(i?.opacity ?? Wt.opacity, 0, 1),
358
- renderVisual: i?.renderVisual ?? Wt.renderVisual,
359
- maxSpeedCurve: i?.maxSpeedCurve ?? Wt.maxSpeedCurve
361
+ minSpeedMultiplier: Math.max(n?.minSpeedMultiplier ?? Gt.minSpeedMultiplier, 0),
362
+ opacity: xt(n?.opacity ?? Gt.opacity, 0, 1),
363
+ renderVisual: n?.renderVisual ?? Gt.renderVisual,
364
+ maxSpeedCurve: n?.maxSpeedCurve ?? Gt.maxSpeedCurve
360
365
  };
361
- }, pr = ({ isDragging: i, isThumbHovered: t, enableThumbDrag: e }) => Vt(() => e ? i ? "dragging" : t ? "hover" : "idle" : "disabled", [e, i, t]), hr = ({ canUseArrowButtons: i, enableArrowButtons: t, resetTapScroll: e, scrollByStep: r }) => {
362
- const n = g(null), s = g(null), l = g(null), u = S(() => {
363
- n.current !== null && (window.clearInterval(n.current), n.current = null), s.current !== null && (window.clearTimeout(s.current), s.current = null), l.current !== null && (window.removeEventListener("pointerup", l.current), window.removeEventListener("pointercancel", l.current), window.removeEventListener("blur", l.current), l.current = null);
364
- }, []), f = S(() => {
365
- u();
366
- }, [u]), x = S(
367
- (M) => (_) => {
368
- if (!i)
366
+ }, mr = ({ isDragging: n, isThumbHovered: t, enableThumbDrag: e }) => At(() => e ? n ? "dragging" : t ? "hover" : "idle" : "disabled", [e, n, t]), pr = ({ canUseArrowButtons: n, enableArrowButtons: t, resetTapScroll: e, scrollByStep: r }) => {
367
+ const i = T(null), s = T(null), l = T(null), c = v(() => {
368
+ i.current !== null && (window.clearInterval(i.current), i.current = null), s.current !== null && (window.clearTimeout(s.current), s.current = null), l.current !== null && (window.removeEventListener("pointerup", l.current), window.removeEventListener("pointercancel", l.current), window.removeEventListener("blur", l.current), l.current = null);
369
+ }, []), f = v(() => {
370
+ c();
371
+ }, [c]), x = v(
372
+ (P) => (E) => {
373
+ if (!n)
369
374
  return;
370
- _.cancelable && _.preventDefault(), _.stopPropagation(), e(), u(), r(M), s.current = window.setTimeout(() => {
371
- n.current = window.setInterval(() => {
372
- r(M);
373
- }, or);
374
- }, ir);
375
- const p = () => u();
376
- l.current = p, window.addEventListener("pointerup", p), window.addEventListener("pointercancel", p), window.addEventListener("blur", p);
375
+ E.cancelable && E.preventDefault(), E.stopPropagation(), e(), c(), r(P), s.current = window.setTimeout(() => {
376
+ i.current = window.setInterval(() => {
377
+ r(P);
378
+ }, ir);
379
+ }, nr);
380
+ const g = () => c();
381
+ l.current = g, window.addEventListener("pointerup", g), window.addEventListener("pointercancel", g), window.addEventListener("blur", g);
377
382
  },
378
- [i, u, e, r]
379
- ), I = S(
380
- (M) => (_) => {
381
- t && (_.key === "Enter" || _.key === " " || _.key === "Spacebar") && (_.preventDefault(), r(M));
383
+ [n, c, e, r]
384
+ ), I = v(
385
+ (P) => (E) => {
386
+ t && (E.key === "Enter" || E.key === " " || E.key === "Spacebar") && (E.preventDefault(), r(P));
382
387
  },
383
388
  [t, r]
384
389
  );
385
- return X(() => {
386
- i || u();
387
- }, [i, u]), X(() => () => {
388
- u();
389
- }, [u]), { handleArrowPointerDown: x, handleArrowPointerUp: f, handleArrowKeyDown: I };
390
- }, gr = (i) => {
391
- if (!i || i <= 0)
392
- return De;
393
- const t = Math.max(1, i), e = Math.log10(t), r = De + e * cr;
394
- return pt(r, De, ur);
395
- }, br = ({
396
- contentSize: i,
390
+ return Y(() => {
391
+ n || c();
392
+ }, [n, c]), Y(() => () => {
393
+ c();
394
+ }, [c]), { handleArrowPointerDown: x, handleArrowPointerUp: f, handleArrowKeyDown: I };
395
+ }, hr = 700, oe = (n, t) => typeof n == "number" && Number.isFinite(n) ? n : t, gr = ({ distance: n, maxDistance: t, viewportSize: e, minSpeedMultiplier: r, maxSpeedMultiplier: i, hasCustomMaxSpeedMultiplier: s, curve: l }) => {
396
+ const c = Math.max(oe(n, 0), 0), f = oe(t, 0), x = f > 0 ? Math.min(c, f) / f : 1, I = Math.max(oe(e, 0), 0), P = Math.max(oe(r, 0), 0), E = Math.max(oe(i, 0), 0), g = Math.max(I * P, 40), _ = s ? g : 1200, z = Math.max(I * E, _), j = l ? Math.max(oe(l.exponentialScale, E), 0) : 0, ft = l ? Math.min(z, Math.max(I * j, g)) : z, Q = Math.max(ft, g);
397
+ let tt = x ** 1.1;
398
+ if (l) {
399
+ const It = Math.min(Math.max(oe(l.exponentialSteepness, 0), 0), hr);
400
+ if (It === 0)
401
+ tt = x;
402
+ else {
403
+ const D = Math.expm1(It) || 1;
404
+ tt = Math.min(Math.max(Math.expm1(It * x) / D, 0), 1);
405
+ }
406
+ }
407
+ const pt = Math.min(Math.max(oe(l?.easedOffset, 0), 0), 1);
408
+ return g + (Q - g) * (pt + (1 - pt) * tt);
409
+ }, br = (n) => {
410
+ if (!n || n <= 0)
411
+ return _e;
412
+ const t = Math.max(1, n), e = Math.log10(t), r = _e + e * lr;
413
+ return xt(r, _e, cr);
414
+ }, xr = ({
415
+ contentSize: n,
397
416
  viewportSize: t,
398
417
  scrollPosition: e,
399
418
  onScroll: r,
400
- enableThumbDrag: n = !0,
419
+ enableThumbDrag: i = !0,
401
420
  enableTrackClick: s = !0,
402
421
  enableArrowButtons: l = !0,
403
- horizontal: u = !1,
422
+ horizontal: c = !1,
404
423
  scrollBarWidth: f = 12,
405
424
  className: x,
406
425
  ariaControls: I,
407
- tapScrollCircleOptions: M,
408
- itemCount: _,
409
- renderThumbOverlay: p,
410
- visibleStartIndex: D,
411
- visibleEndIndex: J
426
+ tapScrollCircleOptions: P,
427
+ itemCount: E,
428
+ renderThumbOverlay: g,
429
+ visibleStartIndex: _,
430
+ visibleEndIndex: z
412
431
  }) => {
413
- const [G, rt] = jt(!1), [nt, st] = jt(!1), [wt, At] = jt(!1), k = g(null), B = g({
432
+ const [j, ft] = Zt(!1), [Q, tt] = Zt(!1), [pt, It] = Zt(!1), D = T(null), O = T({
414
433
  pointerId: null,
415
434
  startThumbPosition: 0,
416
435
  startClientX: 0,
417
436
  startClientY: 0,
418
437
  scale: 1,
419
438
  captureTarget: null
420
- }), w = g({ pointerId: null, startThumbPosition: 0, startClientX: 0, startClientY: 0, scale: 1 }), C = g(e), U = g(r), H = g(qe), tt = g(null), L = g(null), b = g(null), K = g(0), dt = g(0), et = Vt(() => mr(M, _), [_, M]), Y = Vt(() => fr(u), [u]), {
421
- enabled: j,
422
- size: ht,
423
- offsetX: St,
424
- offsetY: R,
425
- className: Ft,
426
- maxVisualDistance: Lt,
427
- maxSpeedMultiplier: v,
428
- minSpeedMultiplier: kt,
429
- opacity: _t,
430
- renderVisual: Gt,
431
- maxSpeedCurve: T
432
- } = et, O = g({
439
+ }), M = T({ pointerId: null, startThumbPosition: 0, startClientX: 0, startClientY: 0, scale: 1 }), B = T(e), N = T(r), q = T(Xe), et = T(null), G = T(null), h = T(null), $ = T(0), Tt = T(0), wt = At(() => fr(P, E), [E, P]), Z = At(() => dr(c), [c]), {
440
+ enabled: k,
441
+ size: Rt,
442
+ offsetX: U,
443
+ offsetY: Ct,
444
+ className: w,
445
+ maxVisualDistance: Yt,
446
+ maxSpeedMultiplier: Xt,
447
+ minSpeedMultiplier: S,
448
+ opacity: $t,
449
+ renderVisual: Bt,
450
+ maxSpeedCurve: Jt
451
+ } = wt, lt = T({
433
452
  viewportSize: t,
434
- maxScrollPosition: Math.max(i - t, 0),
435
- scrollBarVisible: i > t,
436
- effectiveTapMaxDistance: Math.max(Lt, 1),
437
- tapCircleMaxSpeedMultiplier: v,
438
- tapCircleMinSpeedMultiplier: kt,
439
- tapCircleMaxSpeedCurve: T,
440
- tapScrollCircleOptions: M,
453
+ maxScrollPosition: Math.max(n - t, 0),
454
+ scrollBarVisible: n > t,
455
+ effectiveTapMaxDistance: Math.max(Yt, 1),
456
+ tapCircleMaxSpeedMultiplier: Xt,
457
+ tapCircleMinSpeedMultiplier: S,
458
+ tapCircleMaxSpeedCurve: Jt,
459
+ tapScrollCircleOptions: P,
441
460
  effectiveTrackLength: 0,
442
461
  onScroll: r,
443
462
  scrollPosition: e
444
- }), { mainSizeKey: A, crossSizeKey: Mt, positionKey: gt, selectDelta: bt, getPointerCoordinate: Rt, arrowLabels: W, arrowIcons: at, directionClass: ft, orientation: Zt } = Y, Ot = Math.max(Lt, 1), Ct = t / i, Et = Math.max(t - f * 2, 0), Xt = Ct * Et, ct = Math.min(Math.max(Be, Xt || 0), Et || Be), xt = i - t, m = Math.max(Et - ct, 0), V = xt <= 0 || m <= 0 ? 0 : pt(e / xt * m, 0, m), It = V + ct / 2, vt = i > t || G, mt = vt && l;
445
- be(() => {
446
- O.current = {
463
+ }), { mainSizeKey: Wt, crossSizeKey: d, positionKey: mt, selectDelta: ct, getPointerCoordinate: H, arrowLabels: nt, arrowIcons: J, directionClass: Pt, orientation: Mt } = Z, Et = Math.max(Yt, 1), st = t / n, St = Math.max(t - f * 2, 0), yt = st * St, ut = Math.min(Math.max(He, yt || 0), St || He), ot = n - t, Dt = Math.max(St - ut, 0), qt = ot <= 0 || Dt <= 0 ? 0 : xt(e / ot * Dt, 0, Dt), le = qt + ut / 2, dt = n > t || j, Qt = dt && l;
464
+ xe(() => {
465
+ lt.current = {
447
466
  viewportSize: t,
448
- maxScrollPosition: xt,
449
- scrollBarVisible: vt,
450
- effectiveTapMaxDistance: Ot,
451
- tapCircleMaxSpeedMultiplier: v,
452
- tapCircleMinSpeedMultiplier: kt,
453
- tapCircleMaxSpeedCurve: T,
454
- tapScrollCircleOptions: M,
455
- effectiveTrackLength: m,
467
+ maxScrollPosition: ot,
468
+ scrollBarVisible: dt,
469
+ effectiveTapMaxDistance: Et,
470
+ tapCircleMaxSpeedMultiplier: Xt,
471
+ tapCircleMinSpeedMultiplier: S,
472
+ tapCircleMaxSpeedCurve: Jt,
473
+ tapScrollCircleOptions: P,
474
+ effectiveTrackLength: Dt,
456
475
  onScroll: r,
457
476
  scrollPosition: e
458
477
  };
459
- }), be(() => {
460
- C.current = e;
461
- }, [e]), be(() => {
462
- U.current = r;
463
- }, [r]), X(() => {
464
- n || st(!1);
465
- }, [n]);
466
- const se = pr({ isDragging: G, isThumbHovered: nt, enableThumbDrag: n }), Nt = S((a, h) => {
467
- const P = O.current, F = h ?? C.current;
468
- if (U.current) {
469
- const y = U.current(a, F);
470
- if (typeof y == "number" && Number.isFinite(y))
471
- return C.current = y, y;
478
+ }), xe(() => {
479
+ B.current = e;
480
+ }, [e]), xe(() => {
481
+ N.current = r;
482
+ }, [r]), Y(() => {
483
+ i || tt(!1);
484
+ }, [i]);
485
+ const m = mr({ isDragging: j, isThumbHovered: Q, enableThumbDrag: i }), y = v((o, b) => {
486
+ const R = lt.current, L = b ?? B.current;
487
+ if (N.current) {
488
+ const p = N.current(o, L);
489
+ if (typeof p == "number" && Number.isFinite(p))
490
+ return B.current = p, p;
472
491
  }
473
- const o = typeof a == "function" ? a(F) : a, c = Math.max(P.maxScrollPosition, 0), d = P.scrollBarVisible ? pt(o, 0, c) : 0;
474
- return C.current = d, d;
475
- }, []), $t = S(
476
- (a) => {
477
- const h = O.current, P = C.current;
478
- if (!h.scrollBarVisible || h.maxScrollPosition <= 0) {
479
- const E = Nt(0, P), q = E - P;
480
- return { nextPosition: E, actualDelta: q, reachedBoundary: !0 };
492
+ const X = typeof o == "function" ? o(L) : o, a = Math.max(R.maxScrollPosition, 0), u = R.scrollBarVisible ? xt(X, 0, a) : 0;
493
+ return B.current = u, u;
494
+ }, []), Nt = v(
495
+ (o) => {
496
+ const b = lt.current, R = B.current;
497
+ if (!b.scrollBarVisible || b.maxScrollPosition <= 0) {
498
+ const A = y(0, R), F = A - R;
499
+ return { nextPosition: A, actualDelta: F, reachedBoundary: !0 };
481
500
  }
482
- if (a === 0)
483
- return { nextPosition: P, actualDelta: 0, reachedBoundary: !1 };
484
- const o = Nt((E) => pt(E + a, 0, h.maxScrollPosition), P), c = o - P, d = a < 0 && P + a <= 0, y = a > 0 && P + a >= h.maxScrollPosition, z = a < 0 && (o <= 0 || d && c === 0) || a > 0 && (o >= h.maxScrollPosition || y && c === 0);
485
- return { nextPosition: o, actualDelta: c, reachedBoundary: z };
501
+ if (o === 0)
502
+ return { nextPosition: R, actualDelta: 0, reachedBoundary: !1 };
503
+ const X = y((A) => xt(A + o, 0, b.maxScrollPosition), R), a = X - R, u = o < 0 && R + o <= 0, p = o > 0 && R + o >= b.maxScrollPosition, V = o < 0 && (X <= 0 || u && a === 0) || o > 0 && (X >= b.maxScrollPosition || p && a === 0);
504
+ return { nextPosition: X, actualDelta: a, reachedBoundary: V };
486
505
  },
487
- [Nt]
488
- ), Ht = S(
489
- (a, h) => {
490
- a.current += h;
491
- const P = Math.max(O.current.maxScrollPosition, 0);
492
- P > 0 && (a.current = pt(a.current, -P, P));
493
- const F = $t(a.current);
494
- return a.current -= F.actualDelta, F.reachedBoundary && (a.current = 0), F;
506
+ [y]
507
+ ), Lt = v(
508
+ (o, b) => {
509
+ o.current += b;
510
+ const R = Math.max(lt.current.maxScrollPosition, 0);
511
+ R > 0 && (o.current = xt(o.current, -R, R));
512
+ const L = Nt(o.current);
513
+ return o.current -= L.actualDelta, L.reachedBoundary && (o.current = 0), L;
495
514
  },
496
- [$t]
497
- ), Dt = S(() => {
498
- L.current !== null && (window.cancelAnimationFrame(L.current), L.current = null), b.current = null, K.current = 0, dt.current = 0;
499
- }, []), zt = S(() => {
500
- H.current = { ...qe }, At(!1), tt.current?.reset(), Dt();
501
- }, [Dt]), Ut = S(
502
- (a) => {
503
- const h = H.current, P = O.current;
504
- if (!h.active || h.direction === 0) {
505
- Dt();
515
+ [Nt]
516
+ ), at = v(() => {
517
+ G.current !== null && (window.cancelAnimationFrame(G.current), G.current = null), h.current = null, $.current = 0, Tt.current = 0;
518
+ }, []), _t = v(() => {
519
+ q.current = { ...Xe }, It(!1), et.current?.reset(), at();
520
+ }, [at]), Ht = v(
521
+ (o) => {
522
+ const b = q.current, R = lt.current;
523
+ if (!b.active || b.direction === 0) {
524
+ at();
506
525
  return;
507
526
  }
508
- if (!P.scrollBarVisible || P.maxScrollPosition <= 0) {
509
- Dt();
527
+ if (!R.scrollBarVisible || R.maxScrollPosition <= 0) {
528
+ at();
510
529
  return;
511
530
  }
512
- const F = b.current ?? a, o = Math.max((a - F) / 1e3, 0), c = Math.min(o, dr);
513
- if (b.current = a, c <= 0) {
514
- L.current = window.requestAnimationFrame(Ut);
531
+ const L = h.current ?? o, X = Math.max((o - L) / 1e3, 0), a = Math.min(X, ur);
532
+ if (h.current = o, a <= 0) {
533
+ G.current = window.requestAnimationFrame(Ht);
515
534
  return;
516
535
  }
517
- const d = Math.min(h.distance, P.effectiveTapMaxDistance) / P.effectiveTapMaxDistance, y = d ** 1.1, z = typeof P.tapScrollCircleOptions?.maxSpeedMultiplier == "number", E = Math.max(P.viewportSize * P.tapCircleMinSpeedMultiplier, 40), q = z ? E : 1200;
518
- let lt = Math.max(P.viewportSize * P.tapCircleMaxSpeedMultiplier, q);
519
- const Z = P.tapCircleMaxSpeedCurve;
520
- if (Z) {
521
- const ie = Math.max(Z.exponentialSteepness, 0), je = Math.max(Z.exponentialScale ?? P.tapCircleMaxSpeedMultiplier, 0), Ge = ie === 0 ? d : Math.expm1(ie * d), ke = ie === 0 ? 1 : Math.expm1(ie) || 1, Ze = ke === 0 ? d : Math.min(Math.max(Ge / ke, 0), 1), Je = P.viewportSize * je * Ze;
522
- lt = Math.min(lt, Math.max(Je, E));
523
- }
524
- const ot = Math.max(lt, E), Pt = Math.max(Z?.easedOffset ?? 0, 0), Tt = Math.min(1, y + Pt), yt = E + (ot - E) * Tt;
525
- dt.current !== h.direction && (dt.current = h.direction, K.current = 0);
526
- const { reachedBoundary: le } = Ht(K, h.direction * yt * c);
527
- if (le) {
528
- Dt();
536
+ const u = gr({
537
+ distance: b.distance,
538
+ maxDistance: R.effectiveTapMaxDistance,
539
+ viewportSize: R.viewportSize,
540
+ minSpeedMultiplier: R.tapCircleMinSpeedMultiplier,
541
+ maxSpeedMultiplier: R.tapCircleMaxSpeedMultiplier,
542
+ hasCustomMaxSpeedMultiplier: typeof R.tapScrollCircleOptions?.maxSpeedMultiplier == "number",
543
+ curve: R.tapCircleMaxSpeedCurve
544
+ });
545
+ Tt.current !== b.direction && (Tt.current = b.direction, $.current = 0);
546
+ const { reachedBoundary: p } = Lt($, b.direction * u * a);
547
+ if (p) {
548
+ at();
529
549
  return;
530
550
  }
531
- L.current = window.requestAnimationFrame(Ut);
551
+ G.current = window.requestAnimationFrame(Ht);
532
552
  },
533
- [Ht, Dt]
534
- ), ae = S(() => {
535
- L.current === null && (b.current = null, K.current = 0, L.current = window.requestAnimationFrame(Ut));
536
- }, [Ut]);
537
- X(() => () => {
538
- Dt();
539
- }, [Dt]);
540
- const Me = S(
541
- (a) => {
542
- H.current = a, At(a.active), a.active && a.direction !== 0 ? ae() : Dt();
553
+ [Lt, at]
554
+ ), kt = v(() => {
555
+ G.current === null && (h.current = null, $.current = 0, G.current = window.requestAnimationFrame(Ht));
556
+ }, [Ht]);
557
+ Y(() => {
558
+ const o = q.current;
559
+ !o.active || o.direction === 0 || kt();
560
+ }, [n, t, kt]), Y(() => () => {
561
+ at();
562
+ }, [at]);
563
+ const jt = v(
564
+ (o) => {
565
+ q.current = o, It(o.active), o.active && o.direction !== 0 ? kt() : at();
543
566
  },
544
- [ae, Dt]
567
+ [kt, at]
545
568
  );
546
- X(() => {
547
- j || zt();
548
- }, [zt, j]), X(() => {
549
- const a = (h) => {
550
- const F = h.detail?.paneId;
551
- F && I && F !== I || zt();
569
+ Y(() => {
570
+ k || _t();
571
+ }, [_t, k]), Y(() => {
572
+ const o = (b) => {
573
+ const L = b.detail?.paneId;
574
+ L && I && L !== I || _t();
552
575
  };
553
- return window.addEventListener(Oe, a), () => {
554
- window.removeEventListener(Oe, a);
576
+ return window.addEventListener(ze, o), () => {
577
+ window.removeEventListener(ze, o);
555
578
  };
556
- }, [I, zt]), X(() => {
557
- if (!j)
579
+ }, [I, _t]), Y(() => {
580
+ if (!k)
558
581
  return;
559
- const a = (h) => {
560
- if (!H.current.active || H.current.pointerId === h.pointerId)
582
+ const o = (b) => {
583
+ if (!q.current.active || q.current.pointerId === b.pointerId)
561
584
  return;
562
- const P = h.target;
563
- if (!(P instanceof Node)) {
564
- zt();
585
+ const R = b.target;
586
+ if (!(R instanceof Node)) {
587
+ _t();
565
588
  return;
566
589
  }
567
- tt.current?.getElement()?.contains(P) || zt();
590
+ et.current?.getElement()?.contains(R) || _t();
568
591
  };
569
- return document.addEventListener("pointerdown", a, !0), () => {
570
- document.removeEventListener("pointerdown", a, !0);
592
+ return document.addEventListener("pointerdown", o, !0), () => {
593
+ document.removeEventListener("pointerdown", o, !0);
571
594
  };
572
- }, [zt, j]);
573
- const de = (a) => {
574
- if (!vt || m <= 0 || xt <= 0)
595
+ }, [_t, k]);
596
+ const ce = (o) => {
597
+ if (!dt || Dt <= 0 || ot <= 0)
575
598
  return 0;
576
- const h = pt(a, 0, m);
577
- return pt(h / m * xt, 0, xt);
578
- }, xe = S((a) => {
579
- const { scrollBarVisible: h, effectiveTrackLength: P, maxScrollPosition: F } = O.current;
580
- if (N.debug("[ScrollBar] calculateScrollPositionFromThumb", () => ({ thumbPos: a, trackLen: P, maxScroll: F })), P <= 0 || F <= 0)
599
+ const b = xt(o, 0, Dt);
600
+ return xt(b / Dt * ot, 0, ot);
601
+ }, fe = v((o) => {
602
+ const { scrollBarVisible: b, effectiveTrackLength: R, maxScrollPosition: L } = lt.current;
603
+ if (C.debug("[ScrollBar] calculateScrollPositionFromThumb", () => ({ thumbPos: o, trackLen: R, maxScroll: L })), R <= 0 || L <= 0)
581
604
  return null;
582
- const o = pt(a, 0, P);
583
- return pt(o / P * F, 0, F);
584
- }, []), it = S(
585
- (a) => {
586
- const h = a.getBoundingClientRect(), P = u ? h.width : h.height, F = (z) => {
587
- const E = Number.parseFloat(z);
588
- return Number.isFinite(E) ? E : 0;
589
- }, o = window.getComputedStyle(a), c = F(u ? o.width : o.height), d = c > 0 ? c + F(u ? o.paddingLeft : o.paddingTop) + F(u ? o.paddingRight : o.paddingBottom) + F(u ? o.borderLeftWidth : o.borderTopWidth) + F(u ? o.borderRightWidth : o.borderBottomWidth) : 0, y = d > 0 ? d : u ? a.offsetWidth : a.offsetHeight;
590
- return y <= 0 || P <= 0 ? 1 : P / y;
605
+ const X = xt(o, 0, R);
606
+ return xt(X / R * L, 0, L);
607
+ }, []), Ie = v(
608
+ (o) => {
609
+ const b = o.getBoundingClientRect(), R = c ? b.width : b.height, L = (V) => {
610
+ const A = Number.parseFloat(V);
611
+ return Number.isFinite(A) ? A : 0;
612
+ }, X = window.getComputedStyle(o), a = L(c ? X.width : X.height), u = a > 0 ? a + L(c ? X.paddingLeft : X.paddingTop) + L(c ? X.paddingRight : X.paddingBottom) + L(c ? X.borderLeftWidth : X.borderTopWidth) + L(c ? X.borderRightWidth : X.borderBottomWidth) : 0, p = u > 0 ? u : c ? o.offsetWidth : o.offsetHeight;
613
+ return p <= 0 || R <= 0 ? 1 : R / p;
591
614
  },
592
- [u]
593
- ), Yt = S(
594
- (a) => {
595
- const h = B.current;
596
- if (h.pointerId !== a.pointerId)
615
+ [c]
616
+ ), rt = v(
617
+ (o) => {
618
+ const b = O.current;
619
+ if (b.pointerId !== o.pointerId)
597
620
  return;
598
- const P = a.clientX - h.startClientX, F = a.clientY - h.startClientY, o = bt(P, F) / (h.scale || 1);
599
- N.debug("[ScrollBar] handleThumbPointerMove", () => ({
600
- delta: o,
601
- startThumbPosition: h.startThumbPosition,
602
- clientY: a.clientY,
603
- startClientY: h.startClientY,
604
- metrics: O.current
621
+ const R = o.clientX - b.startClientX, L = o.clientY - b.startClientY, X = ct(R, L) / (b.scale || 1);
622
+ C.debug("[ScrollBar] handleThumbPointerMove", () => ({
623
+ delta: X,
624
+ startThumbPosition: b.startThumbPosition,
625
+ clientY: o.clientY,
626
+ startClientY: b.startClientY,
627
+ metrics: lt.current
605
628
  }));
606
- const c = xe(h.startThumbPosition + o);
607
- c !== null && Nt(c), a.cancelable && a.preventDefault();
629
+ const a = fe(b.startThumbPosition + X);
630
+ a !== null && y(a), o.cancelable && o.preventDefault();
608
631
  },
609
- [bt, xe, Nt]
610
- ), Kt = S(
611
- (a) => {
612
- const h = B.current;
613
- if (h.pointerId !== a.pointerId)
632
+ [ct, fe, y]
633
+ ), zt = v(
634
+ (o) => {
635
+ const b = O.current;
636
+ if (b.pointerId !== o.pointerId)
614
637
  return;
615
- document.removeEventListener("pointermove", Yt), document.removeEventListener("pointerup", Kt), document.removeEventListener("pointercancel", Kt);
616
- const P = h.captureTarget;
617
- if (P?.hasPointerCapture?.(a.pointerId) && P.releasePointerCapture(a.pointerId), B.current = { pointerId: null, startThumbPosition: 0, startClientX: 0, startClientY: 0, scale: 1, captureTarget: null }, rt(!1), k.current) {
618
- const F = k.current.getBoundingClientRect();
619
- a.clientX >= F.left && a.clientX <= F.right && a.clientY >= F.top && a.clientY <= F.bottom || st(!1);
638
+ document.removeEventListener("pointermove", rt), document.removeEventListener("pointerup", zt), document.removeEventListener("pointercancel", zt);
639
+ const R = b.captureTarget;
640
+ if (R?.hasPointerCapture?.(o.pointerId) && R.releasePointerCapture(o.pointerId), O.current = { pointerId: null, startThumbPosition: 0, startClientX: 0, startClientY: 0, scale: 1, captureTarget: null }, ft(!1), D.current) {
641
+ const L = D.current.getBoundingClientRect();
642
+ o.clientX >= L.left && o.clientX <= L.right && o.clientY >= L.top && o.clientY <= L.bottom || tt(!1);
620
643
  } else
621
- st(!1);
644
+ tt(!1);
622
645
  },
623
- [Yt]
646
+ [rt]
624
647
  );
625
- X(() => () => {
626
- document.removeEventListener("pointermove", Yt), document.removeEventListener("pointerup", Kt), document.removeEventListener("pointercancel", Kt);
627
- }, [Yt, Kt]);
628
- const Ie = g(0), Bt = g(0), Pe = S(
629
- (a) => {
630
- const h = Math.max(Math.round(O.current.viewportSize / ar), sr);
631
- Bt.current !== a && (Bt.current = a, Ie.current = 0), Ht(Ie, a * h);
648
+ Y(() => () => {
649
+ document.removeEventListener("pointermove", rt), document.removeEventListener("pointerup", zt), document.removeEventListener("pointercancel", zt);
650
+ }, [rt, zt]);
651
+ const Te = T(0), Se = T(0), Kt = v(
652
+ (o) => {
653
+ const b = Math.max(Math.round(lt.current.viewportSize / or), sr);
654
+ Se.current !== o && (Se.current = o, Te.current = 0), Lt(Te, o * b);
632
655
  },
633
- [Ht]
634
- ), { handleArrowPointerDown: ye, handleArrowPointerUp: ve, handleArrowKeyDown: Jt } = hr({
635
- canUseArrowButtons: mt,
656
+ [Lt]
657
+ ), { handleArrowPointerDown: ye, handleArrowPointerUp: me, handleArrowKeyDown: Ae } = pr({
658
+ canUseArrowButtons: Qt,
636
659
  enableArrowButtons: l,
637
- resetTapScroll: zt,
638
- scrollByStep: Pe
639
- }), re = (a) => {
640
- if (!vt)
660
+ resetTapScroll: _t,
661
+ scrollByStep: Kt
662
+ }), te = (o) => {
663
+ if (!dt)
641
664
  return;
642
- if (!n) {
643
- a.preventDefault(), a.stopPropagation();
665
+ if (!i) {
666
+ o.preventDefault(), o.stopPropagation();
644
667
  return;
645
668
  }
646
- if (a.pointerType === "mouse" && a.button !== 0 || a.ctrlKey)
669
+ if (o.pointerType === "mouse" && o.button !== 0 || o.ctrlKey)
647
670
  return;
648
- zt();
649
- const h = a.currentTarget, P = it(h);
650
- let F = null;
651
- if (h.setPointerCapture)
671
+ _t();
672
+ const b = o.currentTarget, R = Ie(b);
673
+ let L = null;
674
+ if (b.setPointerCapture)
652
675
  try {
653
- h.setPointerCapture(a.pointerId), F = h;
676
+ b.setPointerCapture(o.pointerId), L = b;
654
677
  } catch {
655
- F = null;
678
+ L = null;
656
679
  }
657
- B.current = {
658
- pointerId: a.pointerId,
659
- startThumbPosition: V,
660
- startClientX: a.clientX,
661
- startClientY: a.clientY,
662
- scale: P,
663
- captureTarget: F
664
- }, document.addEventListener("pointermove", Yt), document.addEventListener("pointerup", Kt), document.addEventListener("pointercancel", Kt), rt(!0), st(!0), a.preventDefault(), a.stopPropagation();
665
- }, Qt = (a) => {
666
- if (!vt)
680
+ O.current = {
681
+ pointerId: o.pointerId,
682
+ startThumbPosition: qt,
683
+ startClientX: o.clientX,
684
+ startClientY: o.clientY,
685
+ scale: R,
686
+ captureTarget: L
687
+ }, document.addEventListener("pointermove", rt), document.addEventListener("pointerup", zt), document.addEventListener("pointercancel", zt), ft(!0), tt(!0), o.preventDefault(), o.stopPropagation();
688
+ }, ie = (o) => {
689
+ if (!dt)
667
690
  return;
668
691
  if (!s) {
669
- a.preventDefault(), a.stopPropagation();
692
+ o.preventDefault(), o.stopPropagation();
670
693
  return;
671
694
  }
672
- if (a.pointerType === "mouse" && a.button !== 0 || a.ctrlKey)
695
+ if (o.pointerType === "mouse" && o.button !== 0 || o.ctrlKey)
673
696
  return;
674
- const h = a.currentTarget, P = h.getBoundingClientRect(), F = Rt(a), o = it(h), c = (F - (u ? P.left : P.top)) / o;
675
- zt();
676
- const d = c - ct / 2, y = de(d);
677
- if (Nt(y), h.setPointerCapture)
697
+ const b = o.currentTarget, R = b.getBoundingClientRect(), L = H(o), X = Ie(b), a = (L - (c ? R.left : R.top)) / X;
698
+ _t();
699
+ const u = a - ut / 2, p = ce(u);
700
+ if (y(p), b.setPointerCapture)
678
701
  try {
679
- h.setPointerCapture(a.pointerId);
702
+ b.setPointerCapture(o.pointerId);
680
703
  } catch {
681
704
  }
682
- w.current = {
683
- pointerId: a.pointerId,
684
- startThumbPosition: d,
685
- startClientX: a.clientX,
686
- startClientY: a.clientY,
687
- scale: o
688
- }, a.preventDefault(), a.stopPropagation();
689
- }, qt = () => {
690
- w.current = { pointerId: null, startThumbPosition: 0, startClientX: 0, startClientY: 0, scale: 1 };
691
- }, ne = (a) => {
692
- const h = w.current;
693
- if (h.pointerId !== a.pointerId)
705
+ M.current = {
706
+ pointerId: o.pointerId,
707
+ startThumbPosition: u,
708
+ startClientX: o.clientX,
709
+ startClientY: o.clientY,
710
+ scale: X
711
+ }, o.preventDefault(), o.stopPropagation();
712
+ }, Ut = () => {
713
+ M.current = { pointerId: null, startThumbPosition: 0, startClientX: 0, startClientY: 0, scale: 1 };
714
+ }, ee = (o) => {
715
+ const b = M.current;
716
+ if (b.pointerId !== o.pointerId)
694
717
  return;
695
- if (a.pointerType === "mouse" && a.buttons === 0) {
696
- qt();
718
+ if (o.pointerType === "mouse" && o.buttons === 0) {
719
+ Ut();
697
720
  return;
698
721
  }
699
- const P = a.clientX - h.startClientX, F = a.clientY - h.startClientY, o = bt(P, F) / (h.scale || 1), c = de(h.startThumbPosition + o);
700
- Nt(c), a.cancelable && a.preventDefault();
701
- }, fe = (a) => {
702
- if (w.current.pointerId !== a.pointerId)
722
+ const R = o.clientX - b.startClientX, L = o.clientY - b.startClientY, X = ct(R, L) / (b.scale || 1), a = ce(b.startThumbPosition + X);
723
+ y(a), o.cancelable && o.preventDefault();
724
+ }, se = (o) => {
725
+ if (M.current.pointerId !== o.pointerId)
703
726
  return;
704
- const h = a.currentTarget;
705
- h.hasPointerCapture?.(a.pointerId) && h.releasePointerCapture(a.pointerId), qt(), a.preventDefault(), a.stopPropagation();
706
- }, te = (a) => {
707
- if (w.current.pointerId !== a.pointerId)
727
+ const b = o.currentTarget;
728
+ b.hasPointerCapture?.(o.pointerId) && b.releasePointerCapture(o.pointerId), Ut(), o.preventDefault(), o.stopPropagation();
729
+ }, pe = (o) => {
730
+ if (M.current.pointerId !== o.pointerId)
708
731
  return;
709
- const h = a.currentTarget;
710
- h.hasPointerCapture?.(a.pointerId) && h.releasePointerCapture(a.pointerId), qt();
711
- }, we = (a) => {
712
- w.current.pointerId === a.pointerId && qt();
713
- }, Re = Vt(() => pt((wt ? 1 : 0.8) * _t, 0, 1), [wt, _t]), Ve = Vt(() => {
714
- const h = `calc(50% - ${ht / 2}px + ${R}px)`;
732
+ const b = o.currentTarget;
733
+ b.hasPointerCapture?.(o.pointerId) && b.releasePointerCapture(o.pointerId), Ut();
734
+ }, re = (o) => {
735
+ o.target === o.currentTarget && M.current.pointerId === o.pointerId && Ut();
736
+ }, we = At(() => xt((pt ? 1 : 0.8) * $t, 0, 1), [pt, $t]), Re = At(() => {
737
+ const b = `calc(50% - ${Rt / 2}px + ${Ct}px)`;
715
738
  return {
716
- left: St,
717
- top: h
739
+ left: U,
740
+ top: b
718
741
  };
719
- }, [St, R, ht]), me = (a, h, P, F) => /* @__PURE__ */ Q(
742
+ }, [U, Ct, Rt]), Ce = (o, b, R, L) => /* @__PURE__ */ it(
720
743
  "button",
721
744
  {
722
745
  type: "button",
723
746
  tabIndex: 0,
724
747
  className: "aqvs-scrollbar-arrow-button",
725
748
  style: {
726
- [A]: f,
727
- [Mt]: f
749
+ [Wt]: f,
750
+ [d]: f
728
751
  },
729
- "aria-label": h,
730
- onPointerDown: ye(a),
731
- onPointerUp: ve,
732
- onPointerLeave: ve,
733
- onPointerCancel: ve,
734
- onKeyDown: Jt(a),
752
+ "aria-label": b,
753
+ onPointerDown: ye(o),
754
+ onPointerUp: me,
755
+ onPointerLeave: me,
756
+ onPointerCancel: me,
757
+ onKeyDown: Ae(o),
735
758
  "aria-disabled": !l,
736
- disabled: !mt,
737
- children: /* @__PURE__ */ Q("span", { "aria-hidden": "true", children: P })
759
+ disabled: !Qt,
760
+ children: /* @__PURE__ */ it("span", { "aria-hidden": "true", children: R })
738
761
  },
739
- F
740
- ), pe = p && vt ? {
741
- orientation: Zt,
762
+ L
763
+ ), he = g && dt ? {
764
+ orientation: Mt,
742
765
  scrollPosition: e,
743
- maxScrollPosition: xt,
744
- contentSize: i,
766
+ maxScrollPosition: ot,
767
+ contentSize: n,
745
768
  viewportSize: t,
746
- thumbSize: ct,
747
- thumbPosition: V,
748
- thumbCenter: It,
749
- trackSize: Et,
750
- isDragging: G,
751
- isTapScrollActive: wt,
752
- visibleStartIndex: D,
753
- visibleEndIndex: J
769
+ thumbSize: ut,
770
+ thumbPosition: qt,
771
+ thumbCenter: le,
772
+ trackSize: St,
773
+ isDragging: j,
774
+ isTapScrollActive: pt,
775
+ visibleStartIndex: _,
776
+ visibleEndIndex: z
754
777
  } : null;
755
- return /* @__PURE__ */ ue(
778
+ return /* @__PURE__ */ de(
756
779
  "div",
757
780
  {
758
- className: ce("aqvs-scrollbar", ft, !vt && "pointer-events-none opacity-0", x),
781
+ className: ue("aqvs-scrollbar", Pt, !dt && "pointer-events-none opacity-0", x),
759
782
  style: {
760
- [A]: t,
761
- [Mt]: f
783
+ [Wt]: t,
784
+ [d]: f
762
785
  },
763
786
  role: "scrollbar",
764
787
  tabIndex: -1,
765
788
  "aria-controls": I,
766
789
  "aria-valuenow": e,
767
790
  "aria-valuemin": 0,
768
- "aria-valuemax": xt,
769
- "aria-orientation": u ? "horizontal" : "vertical",
791
+ "aria-valuemax": ot,
792
+ "aria-orientation": c ? "horizontal" : "vertical",
770
793
  children: [
771
- !u && vt && j && /* @__PURE__ */ Q(
772
- We,
794
+ !c && dt && k && /* @__PURE__ */ it(
795
+ Ge,
773
796
  {
774
- ref: tt,
775
- className: ce("aqvs-scrollbar-tap-circle-wrapper", Ft),
776
- size: ht,
777
- maxVisualDistance: Ot,
778
- style: Ve,
779
- opacity: Re,
780
- renderVisual: Gt,
781
- onDragChange: Me
797
+ ref: et,
798
+ className: ue("aqvs-scrollbar-tap-circle-wrapper", w),
799
+ size: Rt,
800
+ maxVisualDistance: Et,
801
+ style: Re,
802
+ opacity: we,
803
+ renderVisual: Bt,
804
+ onDragChange: jt
782
805
  },
783
806
  "tap-circle"
784
807
  ),
785
- me(-1, W[0], at[0], "arrow-start"),
786
- /* @__PURE__ */ ue(
808
+ Ce(-1, nt[0], J[0], "arrow-start"),
809
+ /* @__PURE__ */ de(
787
810
  "div",
788
811
  {
789
812
  className: "aqvs-scrollbar-track",
790
813
  style: {
791
814
  borderRadius: f / 2
792
815
  },
793
- onPointerDown: Qt,
794
- onPointerMove: ne,
795
- onPointerUp: fe,
796
- onPointerCancel: te,
797
- onLostPointerCapture: we,
816
+ onPointerDown: ie,
817
+ onPointerMove: ee,
818
+ onPointerUp: se,
819
+ onPointerCancel: pe,
820
+ onLostPointerCapture: re,
798
821
  "aria-disabled": !s,
799
822
  children: [
800
- pe && /* @__PURE__ */ Q("div", { className: "aqvs-scrollbar-overlay", "aria-hidden": !0, children: p?.(pe) }, "overlay"),
801
- /* @__PURE__ */ Q(
823
+ he && /* @__PURE__ */ it("div", { className: "aqvs-scrollbar-overlay", "aria-hidden": !0, children: g?.(he) }, "overlay"),
824
+ /* @__PURE__ */ it(
802
825
  "div",
803
826
  {
804
- className: ce("aqvs-scrollbar-thumb-wrapper", !(vt || G) && "pointer-events-none opacity-0"),
827
+ className: ue("aqvs-scrollbar-thumb-wrapper", !(dt || j) && "pointer-events-none opacity-0"),
805
828
  style: {
806
- [A]: ct,
807
- [gt]: V,
808
- ...u ? { top: 0, bottom: 0 } : { left: 0, right: 0 }
829
+ [Wt]: ut,
830
+ [mt]: qt,
831
+ ...c ? { top: 0, bottom: 0 } : { left: 0, right: 0 }
809
832
  },
810
- onPointerDown: re,
833
+ onPointerDown: te,
811
834
  role: "slider",
812
- "aria-orientation": u ? "horizontal" : "vertical",
835
+ "aria-orientation": c ? "horizontal" : "vertical",
813
836
  "aria-valuenow": e,
814
837
  "aria-valuemin": 0,
815
- "aria-valuemax": xt,
816
- "aria-disabled": !n,
838
+ "aria-valuemax": ot,
839
+ "aria-disabled": !i,
817
840
  tabIndex: -1,
818
- children: /* @__PURE__ */ Q(
841
+ children: /* @__PURE__ */ it(
819
842
  "div",
820
843
  {
821
- ref: k,
822
- className: ce("aqvs-scrollbar-thumb", u ? "aqvs-scrollbar-thumb-horizontal" : "aqvs-scrollbar-thumb-vertical"),
823
- "data-thumb-state": se,
844
+ ref: D,
845
+ className: ue("aqvs-scrollbar-thumb", c ? "aqvs-scrollbar-thumb-horizontal" : "aqvs-scrollbar-thumb-vertical"),
846
+ "data-testid": "aqvs-scrollbar-thumb",
847
+ "data-thumb-state": m,
824
848
  style: {
825
849
  borderRadius: f - 1,
826
- cursor: n ? "pointer" : "default"
850
+ cursor: i ? "pointer" : "default"
827
851
  },
828
852
  onMouseEnter: () => {
829
- n && st(!0);
853
+ i && tt(!0);
830
854
  },
831
855
  onMouseLeave: () => {
832
- n && st(!1);
856
+ i && tt(!1);
833
857
  }
834
858
  },
835
859
  "thumb"
@@ -841,198 +865,202 @@ const pt = (i, t, e) => Math.max(t, Math.min(e, i)), Oe = "virtualscroll:tap-scr
841
865
  },
842
866
  "track"
843
867
  ),
844
- me(1, W[1], at[1], "arrow-end")
868
+ Ce(1, nt[1], J[1], "arrow-end")
845
869
  ]
846
870
  }
847
871
  );
848
- }, Te = {
872
+ }, Ir = ["mouse", "pen", "touch"], ke = (n, t) => !(n === "mouse" || n === "pen" || n === "touch") || t.includes(n), Tr = (n) => n === "mouse" || n === "pen", Pe = {
849
873
  maxVelocity: 6,
850
874
  minVelocity: 0.02,
851
875
  deceleration: 25e-4,
852
876
  velocitySampleWindow: 90,
853
877
  startVelocityThreshold: 0.04
854
- }, Ce = (i, t, e) => {
855
- for (const [r, n, s] of t)
856
- e === "add" ? i.addEventListener(r, n, s) : i.removeEventListener(r, n, s);
857
- }, xr = Fe(
878
+ }, Ee = (n, t, e) => {
879
+ for (const [r, i, s] of t)
880
+ e === "add" ? n.addEventListener(r, i, s) : n.removeEventListener(r, i, s);
881
+ }, Sr = Ye(
858
882
  ({
859
- children: i,
883
+ children: n,
860
884
  contentSize: t,
861
885
  viewportSize: e,
862
886
  scrollBarWidth: r = 12,
863
- enableThumbDrag: n = !0,
887
+ enableThumbDrag: i = !0,
864
888
  enableTrackClick: s = !0,
865
889
  enableArrowButtons: l = !0,
866
- enablePointerDrag: u = !0,
867
- onScroll: f,
868
- className: x,
869
- testId: I,
870
- style: M,
871
- background: _,
872
- tapScrollCircleOptions: p,
873
- inertiaOptions: D,
874
- itemCount: J,
875
- renderThumbOverlay: G,
876
- wheelSpeedMultiplier: rt = 1,
877
- onWheelHorizontal: nt,
878
- contentInsets: st,
879
- visibleStartIndex: wt,
880
- visibleEndIndex: At,
881
- renderOverlay: k,
882
- initialScrollPosition: B = 0
883
- }, w) => {
884
- const C = g(Number.isFinite(B) ? Math.max(0, B) : 0), U = g(null), H = g(null), tt = g(nt);
885
- X(() => {
886
- tt.current = nt;
887
- }, [nt]);
888
- const L = g({
890
+ enablePointerDrag: c = !0,
891
+ pointerDragInputs: f = Ir,
892
+ onScroll: x,
893
+ className: I,
894
+ testId: P,
895
+ style: E,
896
+ background: g,
897
+ tapScrollCircleOptions: _,
898
+ inertiaOptions: z,
899
+ itemCount: j,
900
+ renderThumbOverlay: ft,
901
+ wheelSpeedMultiplier: Q = 1,
902
+ onWheelHorizontal: tt,
903
+ contentInsets: pt,
904
+ visibleStartIndex: It,
905
+ visibleEndIndex: D,
906
+ renderOverlay: O,
907
+ initialScrollPosition: M = 0
908
+ }, B) => {
909
+ const N = T(Number.isFinite(M) ? Math.max(0, M) : 0), q = T(null), et = T(null), G = T(tt);
910
+ Y(() => {
911
+ G.current = tt;
912
+ }, [tt]);
913
+ const h = T({
889
914
  frame: null,
890
915
  velocity: 0,
891
916
  lastTimestamp: null,
892
917
  generation: 0
893
- }), b = Vt(
918
+ }), $ = At(
894
919
  () => ({
895
- maxVelocity: D?.maxVelocity ?? Te.maxVelocity,
896
- minVelocity: D?.minVelocity ?? Te.minVelocity,
897
- deceleration: D?.deceleration ?? Te.deceleration,
898
- velocitySampleWindow: D?.velocitySampleWindow ?? Te.velocitySampleWindow,
899
- startVelocityThreshold: D?.startVelocityThreshold ?? Te.startVelocityThreshold
920
+ maxVelocity: z?.maxVelocity ?? Pe.maxVelocity,
921
+ minVelocity: z?.minVelocity ?? Pe.minVelocity,
922
+ deceleration: z?.deceleration ?? Pe.deceleration,
923
+ velocitySampleWindow: z?.velocitySampleWindow ?? Pe.velocitySampleWindow,
924
+ startVelocityThreshold: z?.startVelocityThreshold ?? Pe.startVelocityThreshold
900
925
  }),
901
- [D]
902
- ), K = Vt(() => ({
903
- top: Math.max(0, st?.top ?? 0),
904
- bottom: Math.max(0, st?.bottom ?? 0)
905
- }), [st]);
906
- N.debug("[ScrollPane] ScrollPane rendered", () => ({
926
+ [z]
927
+ ), Tt = At(() => ({
928
+ top: Math.max(0, pt?.top ?? 0),
929
+ bottom: Math.max(0, pt?.bottom ?? 0)
930
+ }), [pt]);
931
+ C.debug("[ScrollPane] ScrollPane rendered", () => ({
907
932
  contentSize: t,
908
933
  viewportSize: e,
909
934
  scrollBarWidth: r,
910
- className: x,
911
- style: M,
912
- tapScrollCircleOptions: p,
913
- inertiaOptions: D,
914
- enablePointerDrag: u,
915
- contentInsets: K
935
+ className: I,
936
+ style: E,
937
+ tapScrollCircleOptions: _,
938
+ inertiaOptions: z,
939
+ enablePointerDrag: c,
940
+ contentInsets: Tt
916
941
  }));
917
- const dt = g({ contentSize: t, viewportSize: e });
918
- dt.current = { contentSize: t, viewportSize: e };
919
- const et = Vt(() => t > e, [t, e]), Y = S(
920
- (T) => {
921
- const { contentSize: O, viewportSize: A } = dt.current, Mt = O > A, gt = C.current;
922
- if (N.debug("[ScrollPane] scrollTo called", () => ({ newPosition: T, contentSize: O, viewportSize: A, currentIsScrollable: Mt, prevPosition: gt })), !Mt)
923
- return C.current !== 0 && (C.current = 0, f?.(0, gt)), C.current;
924
- const bt = typeof T == "function" ? T(C.current) : T;
925
- if (!Number.isFinite(bt))
926
- return N.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position", { nextPosition: bt }), C.current;
927
- const Rt = Math.max(O - A, 0), W = pt(bt, 0, Rt);
928
- return C.current !== W && (C.current = W, f?.(W, gt)), C.current;
942
+ const wt = T({ contentSize: t, viewportSize: e });
943
+ wt.current = { contentSize: t, viewportSize: e };
944
+ const Z = At(() => t > e, [t, e]), k = v(
945
+ (d) => {
946
+ const { contentSize: mt, viewportSize: ct } = wt.current, H = mt > ct, nt = N.current;
947
+ if (C.debug("[ScrollPane] scrollTo called", () => ({ newPosition: d, contentSize: mt, viewportSize: ct, currentIsScrollable: H, prevPosition: nt })), !H)
948
+ return N.current !== 0 && (N.current = 0, x?.(0, nt)), N.current;
949
+ const J = typeof d == "function" ? d(N.current) : d;
950
+ if (!Number.isFinite(J))
951
+ return C.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position", { nextPosition: J }), N.current;
952
+ const Pt = Math.max(mt - ct, 0), Mt = xt(J, 0, Pt);
953
+ return N.current !== Mt && (N.current = Mt, x?.(Mt, nt)), N.current;
929
954
  },
930
- [f]
931
- ), j = S(() => {
932
- const T = L.current;
933
- T.generation += 1, T.frame !== null && cancelAnimationFrame(T.frame), T.frame = null, T.velocity = 0, T.lastTimestamp = null;
934
- }, []), ht = g(j);
935
- X(() => {
936
- ht.current = j;
937
- }, [j]), X(() => () => {
938
- ht.current();
955
+ [x]
956
+ ), Rt = T(k);
957
+ Y(() => {
958
+ Rt.current = k;
959
+ }, [k]);
960
+ const U = v(() => {
961
+ const d = h.current;
962
+ d.generation += 1, d.frame !== null && cancelAnimationFrame(d.frame), d.frame = null, d.velocity = 0, d.lastTimestamp = null;
963
+ }, []), Ct = T(U);
964
+ Y(() => {
965
+ Ct.current = U;
966
+ }, [U]), Y(() => () => {
967
+ Ct.current();
939
968
  }, []);
940
- const St = S(
941
- (T) => {
942
- if (!et)
969
+ const w = v(
970
+ (d) => {
971
+ if (!Z)
943
972
  return;
944
- const { maxVelocity: O, minVelocity: A, deceleration: Mt, startVelocityThreshold: gt } = b, bt = pt(T, -O, O);
945
- if (Math.abs(bt) < gt)
973
+ const { maxVelocity: mt, minVelocity: ct, deceleration: H, startVelocityThreshold: nt } = $, J = xt(d, -mt, mt);
974
+ if (Math.abs(J) < nt)
946
975
  return;
947
- j(), L.current.velocity = bt, L.current.lastTimestamp = null;
948
- const Rt = L.current.generation, W = (at) => {
949
- const ft = L.current;
950
- if (ft.generation !== Rt)
976
+ U(), h.current.velocity = J, h.current.lastTimestamp = null;
977
+ const Pt = h.current.generation, Mt = (Et) => {
978
+ const st = h.current;
979
+ if (st.generation !== Pt)
951
980
  return;
952
- if (ft.lastTimestamp === null) {
953
- ft.lastTimestamp = at, ft.frame = requestAnimationFrame(W);
981
+ if (st.lastTimestamp === null) {
982
+ st.lastTimestamp = Et, st.frame = requestAnimationFrame(Mt);
954
983
  return;
955
984
  }
956
- const Zt = at - ft.lastTimestamp;
957
- if (ft.lastTimestamp = at, Zt <= 0) {
958
- ft.frame = requestAnimationFrame(W);
985
+ const St = Et - st.lastTimestamp;
986
+ if (st.lastTimestamp = Et, St <= 0) {
987
+ st.frame = requestAnimationFrame(Mt);
959
988
  return;
960
989
  }
961
- const Ot = ft.velocity;
962
- let Ct = Ot;
963
- const Et = Mt * Zt;
964
- Ot > 0 ? Ct = Math.max(0, Ot - Et) : Ot < 0 && (Ct = Math.min(0, Ot + Et));
965
- const ct = (Ot + Ct) / 2 * Zt, xt = C.current;
966
- if (ct !== 0 && Y((se) => se + ct), L.current.generation !== Rt)
990
+ const yt = st.velocity;
991
+ let ut = yt;
992
+ const ot = H * St;
993
+ yt > 0 ? ut = Math.max(0, yt - ot) : yt < 0 && (ut = Math.min(0, yt + ot));
994
+ const qt = (yt + ut) / 2 * St, le = N.current;
995
+ if (qt !== 0 && Rt.current((Lt) => Lt + qt), h.current.generation !== Pt)
967
996
  return;
968
- const m = C.current, { contentSize: V, viewportSize: It } = dt.current, vt = Math.max(V - It, 0);
969
- ft.velocity = Ct;
970
- const mt = m === xt || m <= 0 && Ct <= 0 || m >= vt && Ct >= 0;
971
- if (Math.abs(Ct) < A || mt) {
972
- j();
997
+ const dt = N.current, { contentSize: Qt, viewportSize: m } = wt.current, y = Math.max(Qt - m, 0);
998
+ st.velocity = ut;
999
+ const Nt = dt === le || dt <= 0 && ut <= 0 || dt >= y && ut >= 0;
1000
+ if (Math.abs(ut) < ct || Nt) {
1001
+ U();
973
1002
  return;
974
1003
  }
975
- ft.frame = requestAnimationFrame(W);
1004
+ st.frame = requestAnimationFrame(Mt);
976
1005
  };
977
- L.current.frame = requestAnimationFrame(W);
1006
+ h.current.frame = requestAnimationFrame(Mt);
978
1007
  },
979
- [et, b, Y, j]
980
- ), R = g(St);
981
- X(() => {
982
- R.current = St;
983
- }, [St]), be(() => {
984
- dt.current = { contentSize: t, viewportSize: e };
985
- }, [t, e]), be(() => {
986
- const T = H.current;
987
- if (!T) return;
988
- const O = () => {
989
- T.scrollTop !== 0 && (N.debug("[ScrollPane] Native scroll detected, resetting to 0", () => ({ scrollTop: T.scrollTop })), T.scrollTop = 0), T.scrollLeft !== 0 && (T.scrollLeft = 0);
1008
+ [Z, $, U]
1009
+ ), Yt = T(w);
1010
+ Y(() => {
1011
+ Yt.current = w;
1012
+ }, [w]), xe(() => {
1013
+ wt.current = { contentSize: t, viewportSize: e };
1014
+ }, [t, e]), xe(() => {
1015
+ const d = et.current;
1016
+ if (!d) return;
1017
+ const mt = () => {
1018
+ d.scrollTop !== 0 && (C.debug("[ScrollPane] Native scroll detected, resetting to 0", () => ({ scrollTop: d.scrollTop })), d.scrollTop = 0), d.scrollLeft !== 0 && (d.scrollLeft = 0);
990
1019
  };
991
- return T.addEventListener("scroll", O), () => T.removeEventListener("scroll", O);
992
- }, []), be(() => {
993
- if (et) {
994
- N.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change", () => ({ contentSize: t, viewportSize: e, scrollPosition: C.current }));
995
- const T = pt(t - e, 0, t);
996
- C.current > T && Y(T);
1020
+ return d.addEventListener("scroll", mt), () => d.removeEventListener("scroll", mt);
1021
+ }, []), xe(() => {
1022
+ if (Z) {
1023
+ C.debug("[ScrollPane] Adjusting scroll position due to content or viewport size change", () => ({ contentSize: t, viewportSize: e, scrollPosition: N.current }));
1024
+ const d = xt(t - e, 0, t);
1025
+ N.current > d && k(d);
997
1026
  } else
998
- Y(0);
999
- }, [et, Y, t, e]), X(() => {
1000
- const T = (A) => {
1001
- if (A.ctrlKey)
1027
+ k(0);
1028
+ }, [Z, k, t, e]), Y(() => {
1029
+ const d = (H) => {
1030
+ if (H.ctrlKey)
1002
1031
  return;
1003
- const Mt = A.shiftKey && A.deltaX === 0, gt = Mt ? A.deltaY : A.deltaX, bt = Mt ? 0 : A.deltaY;
1004
- if (gt !== 0 && Math.abs(gt) >= Math.abs(bt)) {
1005
- if (tt.current) {
1006
- A.preventDefault(), j();
1007
- let at = gt;
1008
- A.deltaMode === 1 ? at *= 16 : A.deltaMode === 2 && (at *= e), tt.current(at);
1032
+ const nt = H.shiftKey && H.deltaX === 0, J = nt ? H.deltaY : H.deltaX, Pt = nt ? 0 : H.deltaY;
1033
+ if (J !== 0 && Math.abs(J) >= Math.abs(Pt)) {
1034
+ if (G.current) {
1035
+ H.preventDefault(), U();
1036
+ let st = J;
1037
+ H.deltaMode === 1 ? st *= 16 : H.deltaMode === 2 && (st *= e), G.current(st);
1009
1038
  }
1010
1039
  return;
1011
1040
  }
1012
- if (!et || A.deltaY === 0)
1041
+ if (!Z || H.deltaY === 0)
1013
1042
  return;
1014
- A.preventDefault(), j();
1015
- let W = A.deltaY;
1016
- A.deltaMode === 1 ? W *= 16 : A.deltaMode === 2 && (W *= e), rt !== 1 && (W *= rt), N.debug("[ScrollPane] wheel event", () => ({ deltaY: W, scrollPosition: C.current, wheelSpeedMultiplier: rt, deltaMode: A.deltaMode, scrollTop: H.current?.scrollTop })), Y((at) => at + W);
1017
- }, O = U.current;
1018
- return O && O.addEventListener("wheel", T, { passive: !1 }), () => {
1019
- O && O.removeEventListener("wheel", T);
1043
+ H.preventDefault(), U();
1044
+ let Et = H.deltaY;
1045
+ H.deltaMode === 1 ? Et *= 16 : H.deltaMode === 2 && (Et *= e), Q !== 1 && (Et *= Q), C.debug("[ScrollPane] wheel event", () => ({ deltaY: Et, scrollPosition: N.current, wheelSpeedMultiplier: Q, deltaMode: H.deltaMode, scrollTop: et.current?.scrollTop })), k((st) => st + Et);
1046
+ }, mt = () => {
1047
+ U();
1048
+ }, ct = q.current;
1049
+ return ct && (ct.addEventListener("wheel", d, { passive: !1 }), ct.addEventListener("pointerdown", mt, { capture: !0, passive: !0 })), () => {
1050
+ ct && (ct.removeEventListener("wheel", d), ct.removeEventListener("pointerdown", mt, { capture: !0 }));
1020
1051
  };
1021
- }, [et, Y, j, e, rt]), ze(
1022
- w,
1052
+ }, [Z, k, U, e, Q]), Be(
1053
+ B,
1023
1054
  () => ({
1024
- scrollTo: (T) => (j(), Y(T)),
1025
- getScrollPosition: () => C.current,
1055
+ scrollTo: (d) => (U(), k(d)),
1056
+ getScrollPosition: () => N.current,
1026
1057
  getContentSize: () => t,
1027
1058
  getViewportSize: () => e
1028
1059
  }),
1029
- [Y, t, e, j]
1060
+ [k, t, e, U]
1030
1061
  );
1031
- const Ft = g(Y);
1032
- X(() => {
1033
- Ft.current = Y;
1034
- }, [Y]);
1035
- const Lt = er(), v = g({
1062
+ const Xt = tr(), S = T({
1063
+ pointerType: "",
1036
1064
  pointerId: null,
1037
1065
  startClientY: 0,
1038
1066
  startScroll: 0,
@@ -1040,225 +1068,264 @@ const pt = (i, t, e) => Math.max(t, Math.min(e, i)), Oe = "virtualscroll:tap-scr
1040
1068
  shouldCancelNextClick: !1,
1041
1069
  clickResetTimer: null,
1042
1070
  velocitySamples: []
1043
- }), kt = g(u);
1044
- X(() => {
1045
- kt.current = u;
1046
- }, [u]);
1047
- const _t = g(et);
1048
- X(() => {
1049
- _t.current = et;
1050
- }, [et]);
1051
- const Gt = g(b);
1052
- return X(() => {
1053
- Gt.current = b;
1054
- }, [b]), X(() => {
1055
- if (u)
1071
+ }), $t = T(c), Bt = T(f);
1072
+ Y(() => {
1073
+ $t.current = c;
1074
+ }, [c]), Y(() => {
1075
+ Bt.current = f;
1076
+ }, [f]);
1077
+ const Jt = T(Z);
1078
+ Y(() => {
1079
+ Jt.current = Z;
1080
+ }, [Z]);
1081
+ const lt = T($);
1082
+ Y(() => {
1083
+ lt.current = $;
1084
+ }, [$]), Y(() => {
1085
+ const d = S.current;
1086
+ if (c && Z && (d.pointerId === null || ke(d.pointerType, f)) || d.pointerId === null)
1056
1087
  return;
1057
- const T = H.current, O = v.current;
1058
- O.pointerId !== null && T?.hasPointerCapture(O.pointerId) && T.releasePointerCapture(O.pointerId), O.clickResetTimer !== null && (window.clearTimeout(O.clickResetTimer), O.clickResetTimer = null), O.pointerId = null, O.startClientY = 0, O.startScroll = 0, O.isDragging = !1, O.shouldCancelNextClick = !1, O.velocitySamples = [];
1059
- }, [u]), X(() => {
1060
- const T = H.current;
1061
- if (!T)
1088
+ const mt = et.current;
1089
+ d.clickResetTimer !== null && (window.clearTimeout(d.clickResetTimer), d.clickResetTimer = null);
1090
+ const ct = d.isDragging && d.shouldCancelNextClick, H = d.pointerId;
1091
+ d.pointerId = null, d.pointerType = "", d.startClientY = 0, d.startScroll = 0, d.isDragging = !1, d.shouldCancelNextClick = ct, d.velocitySamples = [], mt?.hasPointerCapture(H) && mt.releasePointerCapture(H);
1092
+ }, [c, f, Z]), Y(() => {
1093
+ const d = et.current;
1094
+ if (!d)
1062
1095
  return;
1063
- const O = 6, A = () => typeof performance < "u" && typeof performance.now == "function" ? performance.now() : Date.now(), Mt = () => {
1064
- const m = v.current;
1065
- m.pointerId = null, m.startClientY = 0, m.startScroll = 0, m.isDragging = !1, m.velocitySamples = [];
1066
- }, gt = () => {
1067
- const m = v.current;
1096
+ const mt = 6, ct = () => typeof performance < "u" && typeof performance.now == "function" ? performance.now() : Date.now(), H = () => {
1097
+ const m = S.current;
1098
+ m.pointerId = null, m.pointerType = "", m.startClientY = 0, m.startScroll = 0, m.isDragging = !1, m.velocitySamples = [];
1099
+ }, nt = () => {
1100
+ const m = S.current;
1068
1101
  m.clickResetTimer !== null && (window.clearTimeout(m.clickResetTimer), m.clickResetTimer = null);
1069
- }, bt = (m) => {
1070
- const V = v.current, It = A();
1071
- V.velocitySamples.push({ clientY: m, time: It });
1072
- const vt = Gt.current.velocitySampleWindow;
1073
- V.velocitySamples = V.velocitySamples.filter((mt) => It - mt.time <= vt);
1074
- }, Rt = (m) => m instanceof HTMLElement && m.closest("[data-scrollpane-ignore-drag='true']") !== null, W = (m) => {
1075
- const V = v.current;
1076
- V.shouldCancelNextClick && (m.preventDefault(), m.stopPropagation(), V.shouldCancelNextClick = !1);
1077
- }, at = (m) => {
1078
- const V = v.current;
1079
- if (!V.isDragging) {
1080
- if (V.isDragging = !0, V.shouldCancelNextClick = !0, !T.hasPointerCapture(m.pointerId))
1102
+ }, J = (m) => {
1103
+ const y = S.current, Nt = ct();
1104
+ y.velocitySamples.push({ clientY: m, time: Nt });
1105
+ const Lt = lt.current.velocitySampleWindow;
1106
+ y.velocitySamples = y.velocitySamples.filter((at) => Nt - at.time <= Lt);
1107
+ }, Pt = (m) => m instanceof HTMLElement && m.closest("[data-scrollpane-ignore-drag='true']") !== null, Mt = (m) => {
1108
+ const y = S.current;
1109
+ y.shouldCancelNextClick && (m.preventDefault(), m.stopPropagation(), y.shouldCancelNextClick = !1);
1110
+ }, Et = (m) => {
1111
+ const y = S.current;
1112
+ if (!y.isDragging) {
1113
+ if (y.isDragging = !0, y.shouldCancelNextClick = !0, !d.hasPointerCapture(m.pointerId))
1081
1114
  try {
1082
- T.setPointerCapture(m.pointerId);
1115
+ d.setPointerCapture(m.pointerId);
1083
1116
  } catch {
1084
1117
  }
1085
- bt(m.clientY);
1118
+ J(m.clientY);
1086
1119
  }
1087
- }, ft = (m) => {
1088
- const V = v.current;
1089
- T.hasPointerCapture(m) && T.releasePointerCapture(m), V.shouldCancelNextClick = !1, gt(), Mt();
1090
- }, Zt = (m) => {
1091
- const V = v.current;
1092
- if (V.pointerId !== m.pointerId)
1120
+ }, st = (m) => m.isTrusted || m.target === d, St = (m) => {
1121
+ const y = S.current;
1122
+ d.hasPointerCapture(m) && d.releasePointerCapture(m), y.shouldCancelNextClick = !1, nt(), H();
1123
+ }, yt = (m) => {
1124
+ const y = S.current;
1125
+ if (y.pointerId !== m.pointerId)
1093
1126
  return;
1094
- if (m.buttons === 0) {
1095
- ft(m.pointerId);
1127
+ if (m.buttons === 0 && Tr(m.pointerType)) {
1128
+ St(m.pointerId);
1096
1129
  return;
1097
1130
  }
1098
- if (!(kt.current && _t.current) || !V.isDragging && (Math.abs(m.clientY - V.startClientY) < O || (at(m), !V.isDragging)))
1131
+ if (!($t.current && Jt.current) || !ke(m.pointerType, Bt.current) || !y.isDragging && (Math.abs(m.clientY - y.startClientY) < mt || (Et(m), !y.isDragging)))
1099
1132
  return;
1100
- bt(m.clientY);
1101
- const It = m.clientY - V.startClientY, vt = V.startScroll - It;
1102
- Ft.current(vt), m.cancelable && m.preventDefault();
1103
- }, Ot = (m) => {
1104
- const V = v.current;
1105
- if (V.pointerId !== m.pointerId)
1133
+ J(m.clientY);
1134
+ const Nt = m.clientY - y.startClientY, Lt = y.startScroll - Nt;
1135
+ Rt.current(Lt), m.cancelable && m.preventDefault();
1136
+ }, ut = () => {
1137
+ const m = S.current;
1138
+ return m.pointerId !== null || !m.shouldCancelNextClick ? !1 : (nt(), m.clickResetTimer = window.setTimeout(() => {
1139
+ const y = S.current;
1140
+ y.shouldCancelNextClick = !1, y.clickResetTimer = null;
1141
+ }, 0), !0);
1142
+ }, ot = (m) => {
1143
+ const y = S.current;
1144
+ if (y.pointerId !== m.pointerId) {
1145
+ ut();
1106
1146
  return;
1107
- V.isDragging && V.shouldCancelNextClick && m.cancelable && (m.preventDefault(), m.stopPropagation()), V.isDragging && bt(m.clientY);
1108
- let It = 0;
1109
- if (V.isDragging && V.velocitySamples.length >= 2) {
1110
- const mt = V.velocitySamples, se = Gt.current.velocitySampleWindow, Nt = mt[mt.length - 1], $t = mt.find((Ht) => Nt.time - Ht.time <= se) ?? mt[0];
1111
- if (Nt && $t && Nt.time !== $t.time) {
1112
- const Ht = Nt.clientY - $t.clientY, Dt = Nt.time - $t.time;
1113
- It = -(Ht / Dt);
1147
+ }
1148
+ y.isDragging && y.shouldCancelNextClick && m.cancelable && (m.preventDefault(), m.stopPropagation()), y.isDragging && J(m.clientY);
1149
+ let Nt = 0;
1150
+ if (y.isDragging && y.velocitySamples.length >= 2) {
1151
+ const at = y.velocitySamples, _t = lt.current.velocitySampleWindow, Ht = at[at.length - 1], kt = at.find((jt) => Ht.time - jt.time <= _t) ?? at[0];
1152
+ if (Ht && kt && Ht.time !== kt.time) {
1153
+ const jt = Ht.clientY - kt.clientY, ce = Ht.time - kt.time;
1154
+ Nt = -(jt / ce);
1114
1155
  }
1115
1156
  }
1116
- gt(), V.shouldCancelNextClick && (V.clickResetTimer = window.setTimeout(() => {
1117
- const mt = v.current;
1118
- mt.shouldCancelNextClick = !1, mt.clickResetTimer = null;
1157
+ nt(), y.shouldCancelNextClick && (y.clickResetTimer = window.setTimeout(() => {
1158
+ const at = S.current;
1159
+ at.shouldCancelNextClick = !1, at.clickResetTimer = null;
1119
1160
  }, 0));
1120
- const vt = Gt.current.startVelocityThreshold;
1121
- Mt(), T.hasPointerCapture(m.pointerId) && T.releasePointerCapture(m.pointerId), Math.abs(It) >= vt && R.current?.(It);
1122
- }, Ct = (m) => {
1123
- if (v.current.pointerId !== null || !(kt.current && _t.current) || m.button !== 0 && m.pointerType === "mouse" || m.ctrlKey || m.metaKey || m.altKey || Rt(m.target))
1161
+ const Lt = lt.current.startVelocityThreshold;
1162
+ H(), d.hasPointerCapture(m.pointerId) && d.releasePointerCapture(m.pointerId), Math.abs(Nt) >= Lt && Yt.current?.(Nt);
1163
+ }, Dt = (m) => {
1164
+ if (S.current.pointerId !== null) {
1165
+ if (!m.isPrimary || m.pointerType !== S.current.pointerType)
1166
+ return;
1167
+ St(S.current.pointerId);
1168
+ }
1169
+ if (S.current.shouldCancelNextClick && (nt(), S.current.shouldCancelNextClick = !1), !($t.current && Jt.current) || !ke(m.pointerType, Bt.current) || m.button !== 0 && m.pointerType === "mouse" || m.ctrlKey || m.metaKey || m.altKey || Pt(m.target))
1124
1170
  return;
1125
- window.dispatchEvent(new CustomEvent(Oe, { detail: { paneId: Lt } })), ht.current?.();
1126
- const V = v.current;
1127
- gt(), V.pointerId = m.pointerId, V.startClientY = m.clientY, V.startScroll = C.current, V.isDragging = !1, V.shouldCancelNextClick = !1, V.velocitySamples = [];
1128
- }, Et = (m) => {
1129
- v.current.pointerId === m.pointerId && ft(m.pointerId);
1130
- }, ct = [
1131
- ["click", W, !0],
1132
- ["pointerdown", Ct, { passive: !1 }],
1171
+ window.dispatchEvent(new CustomEvent(ze, { detail: { paneId: Xt } })), Ct.current?.();
1172
+ const y = S.current;
1173
+ nt(), y.pointerId = m.pointerId, y.pointerType = m.pointerType, y.startClientY = m.clientY, y.startScroll = N.current, y.isDragging = !1, y.shouldCancelNextClick = !1, y.velocitySamples = [];
1174
+ }, qt = (m) => {
1175
+ if (S.current.pointerId !== m.pointerId) {
1176
+ ut();
1177
+ return;
1178
+ }
1179
+ st(m) && St(m.pointerId);
1180
+ }, dt = [
1181
+ ["click", Mt, !0],
1182
+ ["pointerdown", Dt, { passive: !1 }],
1133
1183
  ["lostpointercapture", (m) => {
1134
- v.current.pointerId === m.pointerId && ft(m.pointerId);
1184
+ m.target !== d || S.current.pointerId !== m.pointerId || St(m.pointerId);
1135
1185
  }, void 0]
1136
- ], xt = [
1137
- ["pointermove", Zt, { passive: !1 }],
1138
- ["pointerup", Ot, void 0],
1139
- ["pointercancel", Et, void 0]
1186
+ ], Qt = [
1187
+ ["pointermove", yt, { passive: !1 }],
1188
+ ["pointerup", ot, void 0],
1189
+ ["pointercancel", qt, void 0]
1140
1190
  ];
1141
- return Ce(T, ct, "add"), Ce(window, xt, "add"), () => {
1142
- Ce(T, ct, "remove"), Ce(window, xt, "remove");
1143
- const m = v.current;
1144
- m.pointerId !== null && T.hasPointerCapture(m.pointerId) && T.releasePointerCapture(m.pointerId), gt(), Mt();
1191
+ return Ee(d, dt, "add"), Ee(window, Qt, "add"), () => {
1192
+ Ee(d, dt, "remove"), Ee(window, Qt, "remove");
1193
+ const m = S.current;
1194
+ m.pointerId !== null && d.hasPointerCapture(m.pointerId) && d.releasePointerCapture(m.pointerId), nt(), H();
1145
1195
  };
1146
- }, [Lt]), /* @__PURE__ */ ue("div", { ref: U, "data-testid": I, className: ce("aqvs-scroll-pane", x), style: M, children: [
1147
- /* @__PURE__ */ ue(
1196
+ }, [Xt]);
1197
+ const Wt = v(
1198
+ (d) => (U(), k(d)),
1199
+ [k, U]
1200
+ );
1201
+ return /* @__PURE__ */ de("div", { ref: q, "data-testid": P, className: ue("aqvs-scroll-pane", I), style: E, children: [
1202
+ /* @__PURE__ */ de(
1148
1203
  "div",
1149
1204
  {
1150
- ref: H,
1151
- className: ce("aqvs-scroll-pane-content"),
1205
+ ref: et,
1206
+ className: ue("aqvs-scroll-pane-content"),
1207
+ "data-testid": "aqvs-scroll-pane-content",
1152
1208
  style: {
1153
1209
  height: e,
1154
- paddingTop: K.top,
1155
- paddingBottom: K.bottom,
1210
+ paddingTop: Tt.top,
1211
+ paddingBottom: Tt.bottom,
1156
1212
  // スクロール不能時 (contentSize <= viewportSize) は touch-action を通常に戻し、
1157
- // 短いリスト上のタッチがページ全体のパンを妨げるデッドゾーン化を防ぐ
1158
- ...u && et ? { touchAction: "none" } : {}
1213
+ // 短いリスト上のタッチがページ全体のパンを妨げるデッドゾーン化を防ぐ。
1214
+ // 直接操作 (指・ペン) のドラッグを許可していない場合も付けない。
1215
+ // touch-action はペン入力にも効くため、判定は touch と pen の論理和にする
1216
+ //
1217
+ // ❗ この値はタッチ開始時にラッチされる (実測: 1ms 後に none へ変えても手遅れ)。
1218
+ // 中身が非同期に届くリストでは、「まだスクロール不能」な一瞬に指が着地すると
1219
+ // **そのジェスチャ 1 回分**はブラウザに接収されたまま戻らない。
1220
+ // 指を離して置き直せば次のジェスチャからは正常に効くため、損失は 1 ジェスチャに
1221
+ // 限られ恒久破損にはならない (実測で確認)。ドラッグ許可の判定 (isScrollable) と
1222
+ // 同一条件で揃えてあるため状態としても一貫している。
1223
+ // 非同期コンテンツを先読みして確保する挙動は意図的に入れていない
1224
+ // (空のペインがページのパンを殺すデッドゾーンになり、そちらの実害の方が大きいため)。
1225
+ ...c && Z && f.some((d) => d === "touch" || d === "pen") ? { touchAction: "none" } : {}
1159
1226
  },
1160
- id: Lt,
1227
+ id: Xt,
1161
1228
  children: [
1162
- _,
1163
- i(C.current)
1229
+ g,
1230
+ n(N.current)
1164
1231
  ]
1165
1232
  }
1166
1233
  ),
1167
- /* @__PURE__ */ Q(
1168
- br,
1234
+ /* @__PURE__ */ it(
1235
+ xr,
1169
1236
  {
1170
1237
  contentSize: t,
1171
1238
  viewportSize: e,
1172
- scrollPosition: C.current,
1173
- onScroll: Y,
1174
- enableThumbDrag: n,
1239
+ scrollPosition: N.current,
1240
+ onScroll: Wt,
1241
+ enableThumbDrag: i,
1175
1242
  enableTrackClick: s,
1176
1243
  enableArrowButtons: l,
1177
1244
  scrollBarWidth: r,
1178
- ariaControls: Lt,
1179
- tapScrollCircleOptions: p,
1180
- itemCount: J,
1181
- renderThumbOverlay: G,
1182
- visibleStartIndex: wt,
1183
- visibleEndIndex: At
1245
+ ariaControls: Xt,
1246
+ tapScrollCircleOptions: _,
1247
+ itemCount: j,
1248
+ renderThumbOverlay: ft,
1249
+ visibleStartIndex: It,
1250
+ visibleEndIndex: D
1184
1251
  },
1185
1252
  "scrollbar"
1186
1253
  ),
1187
- k?.()
1254
+ O?.()
1188
1255
  ] });
1189
1256
  }
1190
- ), He = (i, t, e) => Math.min(Math.max(i, t), e), Dr = ({ dragState: i, normalizedDistance: t, sizeScale: e, size: r }) => {
1191
- const n = Math.max(r / 2, 1), s = 1 + t * 0.65, l = Math.max(0.65, 1 - t * 0.25), u = i.direction * t * 26 * e, f = 0.8 + t * 0.18, x = 3 * e, I = 6 * e, M = 22 * e, _ = Math.abs(u) + I, p = u > 0 ? x : -Math.abs(u) - x, D = Math.max(2.5, 3 * e), J = He(i.offsetX, -n, n), G = He(i.offsetY, -n, n), rt = n * 0.35, nt = J / n * rt, st = G / n * rt, wt = nt * 0.45, At = st * 0.45, k = Math.max(M * 0.38, 6), B = 0.65 + t * 0.2, w = i.active;
1192
- return /* @__PURE__ */ ue(Ke, { children: [
1193
- /* @__PURE__ */ Q(
1257
+ ), $e = (n, t, e) => Math.min(Math.max(n, t), e), kr = ({ dragState: n, normalizedDistance: t, sizeScale: e, size: r }) => {
1258
+ const i = Math.max(r / 2, 1), s = 1 + t * 0.65, l = Math.max(0.65, 1 - t * 0.25), c = n.direction * t * 26 * e, f = 0.8 + t * 0.18, x = 3 * e, I = 6 * e, P = 22 * e, E = Math.abs(c) + I, g = c > 0 ? x : -Math.abs(c) - x, _ = Math.max(2.5, 3 * e), z = $e(n.offsetX, -i, i), j = $e(n.offsetY, -i, i), ft = i * 0.35, Q = z / i * ft, tt = j / i * ft, pt = Q * 0.45, It = tt * 0.45, D = Math.max(P * 0.38, 6), O = 0.65 + t * 0.2, M = n.active;
1259
+ return /* @__PURE__ */ de(je, { children: [
1260
+ /* @__PURE__ */ it(
1194
1261
  "div",
1195
1262
  {
1196
1263
  className: "aqvs-tap-scroll-circle-gradient",
1197
1264
  style: {
1198
1265
  transform: `scale(${l}, ${s})`,
1199
- transition: w ? "40ms transform ease-out" : "200ms ease transform"
1266
+ transition: M ? "40ms transform ease-out" : "200ms ease transform"
1200
1267
  }
1201
1268
  }
1202
1269
  ),
1203
- /* @__PURE__ */ Q(
1270
+ /* @__PURE__ */ it(
1204
1271
  "div",
1205
1272
  {
1206
- className: "aqvs-sample-visual-rod",
1273
+ className: "aqvs-sample-visual-pupil",
1207
1274
  style: {
1208
- width: M,
1209
- height: M,
1210
- transform: `translate(calc(-50% + ${nt}px), calc(-50% + ${st}px)) scale(${l}, ${f * s})`,
1211
- transition: w ? "70ms transform ease-out" : "200ms ease transform"
1275
+ width: P,
1276
+ height: P,
1277
+ transform: `translate(calc(-50% + ${Q}px), calc(-50% + ${tt}px)) scale(${l}, ${f * s})`,
1278
+ transition: M ? "70ms transform ease-out" : "200ms ease transform"
1212
1279
  }
1213
1280
  }
1214
1281
  ),
1215
- /* @__PURE__ */ Q(
1282
+ /* @__PURE__ */ it(
1216
1283
  "div",
1217
1284
  {
1218
- className: "aqvs-sample-visual-pupil",
1285
+ className: "aqvs-sample-visual-highlight",
1219
1286
  style: {
1220
- width: k,
1221
- height: k,
1222
- transform: `translate(calc(-50% + ${wt}px), calc(-50% + ${At}px)) scale(${l}, ${s})`,
1223
- opacity: B,
1287
+ width: D,
1288
+ height: D,
1289
+ transform: `translate(calc(-50% + ${pt}px), calc(-50% + ${It}px)) scale(${l}, ${s})`,
1290
+ opacity: O,
1224
1291
  boxShadow: "0 0 8px rgba(255,255,255,0.45)",
1225
- transition: w ? "120ms opacity 150ms, 120ms transform ease-out ease-out" : "220ms ease transform, 240ms opacity ease"
1292
+ transition: M ? "120ms opacity 150ms, 120ms transform ease-out ease-out" : "220ms ease transform, 240ms opacity ease"
1226
1293
  }
1227
1294
  }
1228
1295
  ),
1229
- /* @__PURE__ */ Q(
1296
+ /* @__PURE__ */ it(
1230
1297
  "div",
1231
1298
  {
1232
- className: "aqvs-sample-visual-highlight",
1299
+ className: "aqvs-sample-visual-rod",
1233
1300
  style: {
1234
- width: D,
1235
- height: _,
1236
- transform: `translate(-50%, ${p}px)`,
1301
+ width: _,
1302
+ height: E,
1303
+ transform: `translate(-50%, ${g}px)`,
1237
1304
  opacity: t,
1238
- transition: w ? "40ms height, 60ms opacity ease-out ease-out" : "200ms ease height, 120ms ease opacity"
1305
+ transition: M ? "40ms height, 60ms opacity ease-out ease-out" : "200ms ease height, 120ms ease opacity"
1239
1306
  }
1240
1307
  }
1241
1308
  )
1242
1309
  ] });
1243
- }, Ee = 100, Ir = (i) => {
1244
- if (!Number.isFinite(i))
1310
+ }, Ne = 100, vr = (n) => {
1311
+ if (!Number.isFinite(n))
1245
1312
  return 0n;
1246
- const t = Math.trunc(i);
1313
+ const t = Math.trunc(n);
1247
1314
  return t <= 0 ? 0n : BigInt(t);
1248
- }, Le = (i, t) => {
1249
- if (!Number.isFinite(i))
1250
- throw new Error(`valueFn returned a non-finite value at index ${t}: ${i}`);
1251
- return i;
1252
- }, he = (i) => {
1253
- if (i <= 0 || !Number.isFinite(i))
1315
+ }, Oe = (n, t) => {
1316
+ if (!Number.isFinite(n))
1317
+ throw new Error(`valueFn returned a non-finite value at index ${t}: ${n}`);
1318
+ return n;
1319
+ }, ge = (n) => {
1320
+ if (n <= 0 || !Number.isFinite(n))
1254
1321
  return 0;
1255
- const t = Math.trunc(i);
1322
+ const t = Math.trunc(n);
1256
1323
  if (t <= 2147483647)
1257
1324
  return t & -t;
1258
1325
  const e = BigInt(t) & -BigInt(t);
1259
1326
  return Number(e);
1260
1327
  };
1261
- class oe {
1328
+ class ae {
1262
1329
  /**
1263
1330
  * @private
1264
1331
  * @property {Map<number, number>} tree - The Map storing the Fenwick tree structure, specifically the sums of deltas. It is 1-indexed.
@@ -1317,31 +1384,31 @@ class oe {
1317
1384
  * @param {{ sampleRange?: { from: number; to: number }, materialize?: boolean }} [options] - Optional settings for initialization.
1318
1385
  */
1319
1386
  reset(t, e, r) {
1320
- const n = Number.isFinite(t) && t > 0 ? Math.trunc(t) : 0;
1387
+ const i = Number.isFinite(t) && t > 0 ? Math.trunc(t) : 0;
1321
1388
  if (typeof e != "function") {
1322
- this.size = n, this.tree = /* @__PURE__ */ new Map(), this.deltas = /* @__PURE__ */ new Map(), this.valueFn = void 0, this.baseValue = e, this.total = this.baseValue * this.size;
1389
+ this.size = i, this.tree = /* @__PURE__ */ new Map(), this.deltas = /* @__PURE__ */ new Map(), this.valueFn = void 0, this.baseValue = e, this.total = this.baseValue * this.size;
1323
1390
  return;
1324
1391
  }
1325
1392
  let s = 0, l;
1326
- if (n > 0) {
1327
- const u = r?.sampleRange ?? {
1393
+ if (i > 0) {
1394
+ const c = r?.sampleRange ?? {
1328
1395
  from: 0,
1329
- to: Math.min(Ee - 1, n - 1)
1396
+ to: Math.min(Ne - 1, i - 1)
1330
1397
  };
1331
- let f = Math.max(0, Math.trunc(u.from)), x = Math.min(Math.trunc(u.to), n - 1);
1332
- if (f > x && (f = 0, x = Math.min(Ee - 1, n - 1)), n > Ee)
1333
- s = oe._sampleBaseValueStrided(e, n, Ee), r?.materialize && (l = { from: f, values: oe._collectValidatedValues(e, f, x) });
1398
+ let f = Math.max(0, Math.trunc(c.from)), x = Math.min(Math.trunc(c.to), i - 1);
1399
+ if (f > x && (f = 0, x = Math.min(Ne - 1, i - 1)), i > Ne)
1400
+ s = ae._sampleBaseValueStrided(e, i, Ne), r?.materialize && (l = { from: f, values: ae._collectValidatedValues(e, f, x) });
1334
1401
  else {
1335
- const I = oe._collectValidatedValues(e, f, x);
1336
- s = oe._modeOrMedian([...I]), r?.materialize && (l = { from: f, values: I });
1402
+ const I = ae._collectValidatedValues(e, f, x);
1403
+ s = ae._modeOrMedian([...I]), r?.materialize && (l = { from: f, values: I });
1337
1404
  }
1338
1405
  }
1339
- if (this.size = n, this.tree = /* @__PURE__ */ new Map(), this.deltas = /* @__PURE__ */ new Map(), this.total = void 0, this.valueFn = e, this.baseValue = s, l)
1340
- for (let u = 0; u < l.values.length; u++) {
1341
- const f = l.from + u;
1406
+ if (this.size = i, this.tree = /* @__PURE__ */ new Map(), this.deltas = /* @__PURE__ */ new Map(), this.total = void 0, this.valueFn = e, this.baseValue = s, l)
1407
+ for (let c = 0; c < l.values.length; c++) {
1408
+ const f = l.from + c;
1342
1409
  if (f >= this.size)
1343
1410
  break;
1344
- const x = l.values[u] - this.baseValue;
1411
+ const x = l.values[c] - this.baseValue;
1345
1412
  x !== 0 && (this.deltas.set(f, x), this._updateTree(f, x));
1346
1413
  }
1347
1414
  this.total = this.getTotal();
@@ -1371,10 +1438,10 @@ class oe {
1371
1438
  * @returns {number[]} The validated (finite-only) values in index order.
1372
1439
  */
1373
1440
  static _collectValidatedValues(t, e, r) {
1374
- const n = [];
1441
+ const i = [];
1375
1442
  for (let s = e; s <= r; s++)
1376
- n.push(Le(t(s), s));
1377
- return n;
1443
+ i.push(Oe(t(s), s));
1444
+ return i;
1378
1445
  }
1379
1446
  /**
1380
1447
  * @private
@@ -1387,22 +1454,22 @@ class oe {
1387
1454
  static _modeOrMedian(t) {
1388
1455
  if (t.length === 0)
1389
1456
  return 0;
1390
- t.sort((l, u) => l - u);
1457
+ t.sort((l, c) => l - c);
1391
1458
  const e = Math.floor(t.length / 2);
1392
1459
  let r;
1393
1460
  t.length % 2 === 0 ? r = Math.floor((t[e - 1] + t[e]) / 2) : r = t[e];
1394
- const n = /* @__PURE__ */ new Map();
1461
+ const i = /* @__PURE__ */ new Map();
1395
1462
  let s = 0;
1396
1463
  for (const l of t) {
1397
- const u = (n.get(l) ?? 0) + 1;
1398
- n.set(l, u), u > s && (s = u);
1464
+ const c = (i.get(l) ?? 0) + 1;
1465
+ i.set(l, c), c > s && (s = c);
1399
1466
  }
1400
1467
  if (s > t.length * 0.2) {
1401
1468
  const l = [];
1402
- for (const [f, x] of n.entries())
1469
+ for (const [f, x] of i.entries())
1403
1470
  x === s && l.push(f);
1404
- const u = l.reduce((f, x) => f + x, 0);
1405
- r = Math.floor(u / l.length);
1471
+ const c = l.reduce((f, x) => f + x, 0);
1472
+ r = Math.floor(c / l.length);
1406
1473
  }
1407
1474
  return r;
1408
1475
  }
@@ -1419,12 +1486,12 @@ class oe {
1419
1486
  static _sampleBaseValueStrided(t, e, r) {
1420
1487
  if (e <= 0)
1421
1488
  return 0;
1422
- let n = Math.max(1, Math.ceil(e / r));
1423
- n % 2 === 0 && (n += 1);
1489
+ let i = Math.max(1, Math.ceil(e / r));
1490
+ i % 2 === 0 && (i += 1);
1424
1491
  const s = [];
1425
- for (let l = 0; l < e && s.length < r; l += n)
1426
- s.push(Le(t(l), l));
1427
- return oe._modeOrMedian(s);
1492
+ for (let l = 0; l < e && s.length < r; l += i)
1493
+ s.push(Oe(t(l), l));
1494
+ return ae._modeOrMedian(s);
1428
1495
  }
1429
1496
  /**
1430
1497
  * @method update
@@ -1464,21 +1531,21 @@ class oe {
1464
1531
  */
1465
1532
  updateDeltas(t) {
1466
1533
  const e = /* @__PURE__ */ new Map();
1467
- for (const { index: r, change: n } of t) {
1534
+ for (const { index: r, change: i } of t) {
1468
1535
  if (r < 0 || r >= this.size)
1469
1536
  throw new Error(`Index ${r} out of bounds`);
1470
1537
  if (!Number.isInteger(r))
1471
1538
  throw new Error(`Index must be an integer: ${r}`);
1472
- if (!Number.isFinite(n))
1473
- throw new Error(`Change must be a finite number: ${n}`);
1474
- const l = (e.get(r) ?? this.deltas.get(r) ?? 0) + n;
1539
+ if (!Number.isFinite(i))
1540
+ throw new Error(`Change must be a finite number: ${i}`);
1541
+ const l = (e.get(r) ?? this.deltas.get(r) ?? 0) + i;
1475
1542
  if (l + this.baseValue < -1e-9)
1476
1543
  throw new Error(`Change would make the value at index ${r} negative: ${l + this.baseValue}`);
1477
1544
  e.set(r, l);
1478
1545
  }
1479
- for (const { index: r, change: n } of t) {
1480
- const l = (this.deltas.get(r) ?? 0) + n;
1481
- l === 0 ? this.deltas.delete(r) : this.deltas.set(r, l), this._updateTree(r, n);
1546
+ for (const { index: r, change: i } of t) {
1547
+ const l = (this.deltas.get(r) ?? 0) + i;
1548
+ l === 0 ? this.deltas.delete(r) : this.deltas.set(r, l), this._updateTree(r, i);
1482
1549
  }
1483
1550
  return this.total;
1484
1551
  }
@@ -1496,10 +1563,10 @@ class oe {
1496
1563
  let r = t + 1;
1497
1564
  for (; r <= this.size; ) {
1498
1565
  this.tree.set(r, (this.tree.get(r) ?? 0) + e);
1499
- const n = he(r);
1500
- if (n === 0)
1566
+ const i = ge(r);
1567
+ if (i === 0)
1501
1568
  break;
1502
- r += n;
1569
+ r += i;
1503
1570
  }
1504
1571
  this.total !== void 0 && (this.total += e);
1505
1572
  }
@@ -1513,17 +1580,17 @@ class oe {
1513
1580
  */
1514
1581
  _buildDeltaUpdates(t) {
1515
1582
  const e = [], r = /* @__PURE__ */ new Map();
1516
- for (const { index: n, value: s } of t) {
1517
- if (n < 0 || n >= this.size)
1518
- throw new Error(`Index ${n} out of bounds`);
1519
- if (!Number.isInteger(n))
1520
- throw new Error(`Index must be an integer: ${n}`);
1583
+ for (const { index: i, value: s } of t) {
1584
+ if (i < 0 || i >= this.size)
1585
+ throw new Error(`Index ${i} out of bounds`);
1586
+ if (!Number.isInteger(i))
1587
+ throw new Error(`Index must be an integer: ${i}`);
1521
1588
  if (!Number.isFinite(s))
1522
1589
  throw new Error(`Value must be a finite number: ${s}`);
1523
1590
  if (s < 0)
1524
1591
  throw new Error("Value cannot be negative.");
1525
- const l = r.has(n) ? r.get(n) ?? 0 : this.deltas.get(n) ?? 0, u = l + this.baseValue, f = s - u;
1526
- f !== 0 && e.push({ index: n, change: f }), r.set(n, l + f);
1592
+ const l = r.has(i) ? r.get(i) ?? 0 : this.deltas.get(i) ?? 0, c = l + this.baseValue, f = s - c;
1593
+ f !== 0 && e.push({ index: i, change: f }), r.set(i, l + f);
1527
1594
  }
1528
1595
  return e;
1529
1596
  }
@@ -1540,7 +1607,7 @@ class oe {
1540
1607
  let t = 0, e = this.size;
1541
1608
  for (; e > 0; ) {
1542
1609
  t += this.tree.get(e) ?? 0;
1543
- const r = he(e);
1610
+ const r = ge(e);
1544
1611
  if (r === 0)
1545
1612
  break;
1546
1613
  e -= r;
@@ -1557,7 +1624,7 @@ class oe {
1557
1624
  */
1558
1625
  _materialize(t, e = !0) {
1559
1626
  if (this.valueFn) {
1560
- const r = this.deltas.get(t) ?? 0, s = Le(this.valueFn(t), t) - this.baseValue;
1627
+ const r = this.deltas.get(t) ?? 0, s = Oe(this.valueFn(t), t) - this.baseValue;
1561
1628
  if (s !== r && (s === 0 ? this.deltas.delete(t) : this.deltas.set(t, s), e)) {
1562
1629
  const l = s - r;
1563
1630
  this._updateTree(t, l);
@@ -1576,10 +1643,10 @@ class oe {
1576
1643
  _materializeRanges(t, e, r = !1) {
1577
1644
  if (!(t?.materialize && this.valueFn))
1578
1645
  return;
1579
- const n = t.ranges;
1580
- if (n && n.length > 0) {
1581
- for (const u of n) {
1582
- const f = Math.max(0, Math.trunc(u.from)), x = Math.min(Math.trunc(u.to), this.size - 1);
1646
+ const i = t.ranges;
1647
+ if (i && i.length > 0) {
1648
+ for (const c of i) {
1649
+ const f = Math.max(0, Math.trunc(c.from)), x = Math.min(Math.trunc(c.to), this.size - 1);
1583
1650
  for (let I = f; I <= x; I++)
1584
1651
  this._materialize(I);
1585
1652
  }
@@ -1589,7 +1656,7 @@ class oe {
1589
1656
  this._materialize(e);
1590
1657
  return;
1591
1658
  }
1592
- const s = n[0].from, l = n[n.length - 1].to;
1659
+ const s = i[0].from, l = i[i.length - 1].to;
1593
1660
  e >= s && e <= l && this._materialize(e);
1594
1661
  return;
1595
1662
  }
@@ -1611,15 +1678,15 @@ class oe {
1611
1678
  if (this.size === 0)
1612
1679
  return { index: -1, total: this.total ?? 0, cumulative: void 0, currentValue: void 0, safeIndex: void 0 };
1613
1680
  this._materializeRanges(e.materializeOption);
1614
- const n = e.materializeOption?.materialize === !0;
1681
+ const i = e.materializeOption?.materialize === !0;
1615
1682
  let s;
1616
1683
  for (; ; ) {
1617
1684
  if (s = this._descend(t, r), s < 0 || s >= this.size)
1618
1685
  return { index: -1, total: this.total ?? this.getTotal(), cumulative: void 0, currentValue: void 0, safeIndex: void 0 };
1619
- if (!n)
1686
+ if (!i)
1620
1687
  break;
1621
- const u = this.deltas.get(s) ?? 0;
1622
- if (this._materialize(s), (this.deltas.get(s) ?? 0) === u)
1688
+ const c = this.deltas.get(s) ?? 0;
1689
+ if (this._materialize(s), (this.deltas.get(s) ?? 0) === c)
1623
1690
  break;
1624
1691
  }
1625
1692
  const l = this.prefixSum(s);
@@ -1641,14 +1708,14 @@ class oe {
1641
1708
  * @returns {number} The candidate index (may be out of range when no index satisfies the condition).
1642
1709
  */
1643
1710
  _descend(t, e) {
1644
- let r = 0, n = 0, s = 1;
1711
+ let r = 0, i = 0, s = 1;
1645
1712
  for (; s << 1 <= this.size; )
1646
1713
  s <<= 1;
1647
1714
  for (; s > 0; s >>= 1) {
1648
1715
  const l = r + s;
1649
1716
  if (l <= this.size) {
1650
1717
  const f = (this.tree.get(l) ?? 0) + this.baseValue * s;
1651
- (e ? n + f < t : n + f <= t) && (r = l, n += f);
1718
+ (e ? i + f < t : i + f <= t) && (r = l, i += f);
1652
1719
  }
1653
1720
  }
1654
1721
  return e ? r : r - 1;
@@ -1661,42 +1728,42 @@ class oe {
1661
1728
  _findIndexLarge(t, e, r) {
1662
1729
  if (this.size === 0)
1663
1730
  return { index: -1, total: this.total ?? 0, cumulative: void 0, currentValue: void 0, safeIndex: void 0 };
1664
- const n = Ir(this.size);
1665
- if (n === 0n)
1731
+ const i = vr(this.size);
1732
+ if (i === 0n)
1666
1733
  return { index: -1, total: this.total ?? 0, cumulative: void 0, currentValue: void 0, safeIndex: void 0 };
1667
1734
  this._materializeRanges(e.materializeOption);
1668
1735
  const s = e.materializeOption?.materialize === !0;
1669
1736
  for (; ; ) {
1670
- let l = 0n, u = n - 1n, f, x, I = this.total;
1671
- for (; l <= u; ) {
1672
- const p = l + u >> 1n, D = Number(p), J = this.prefixSum(D);
1673
- if (I = J.total, r ? J.cumulative >= t : J.cumulative <= t)
1674
- if (f = p, x = J, r) {
1675
- if (p === 0n)
1737
+ let l = 0n, c = i - 1n, f, x, I = this.total;
1738
+ for (; l <= c; ) {
1739
+ const g = l + c >> 1n, _ = Number(g), z = this.prefixSum(_);
1740
+ if (I = z.total, r ? z.cumulative >= t : z.cumulative <= t)
1741
+ if (f = g, x = z, r) {
1742
+ if (g === 0n)
1676
1743
  break;
1677
- u = p - 1n;
1744
+ c = g - 1n;
1678
1745
  } else
1679
- l = p + 1n;
1746
+ l = g + 1n;
1680
1747
  else if (r)
1681
- l = p + 1n;
1748
+ l = g + 1n;
1682
1749
  else {
1683
- if (p === 0n)
1750
+ if (g === 0n)
1684
1751
  break;
1685
- u = p - 1n;
1752
+ c = g - 1n;
1686
1753
  }
1687
1754
  }
1688
- const M = x, _ = f !== void 0 ? Number(f) : -1;
1689
- if (s && _ >= 0) {
1690
- const p = this.deltas.get(_) ?? 0;
1691
- if (this._materialize(_), (this.deltas.get(_) ?? 0) !== p)
1755
+ const P = x, E = f !== void 0 ? Number(f) : -1;
1756
+ if (s && E >= 0) {
1757
+ const g = this.deltas.get(E) ?? 0;
1758
+ if (this._materialize(E), (this.deltas.get(E) ?? 0) !== g)
1692
1759
  continue;
1693
1760
  }
1694
1761
  return {
1695
- index: _,
1762
+ index: E,
1696
1763
  total: I,
1697
- cumulative: M?.cumulative,
1698
- currentValue: M?.currentValue,
1699
- safeIndex: M?.safeIndex
1764
+ cumulative: P?.cumulative,
1765
+ currentValue: P?.currentValue,
1766
+ safeIndex: P?.safeIndex
1700
1767
  };
1701
1768
  }
1702
1769
  }
@@ -1713,19 +1780,19 @@ class oe {
1713
1780
  return { cumulative: 0, total: this.total, currentValue: 0, safeIndex: 0 };
1714
1781
  if (this.size === 0)
1715
1782
  return { cumulative: 0, total: this.total ?? 0, currentValue: 0, safeIndex: 0 };
1716
- const r = pt(Math.trunc(t), 0, this.size - 1), n = e?.materializeOption;
1717
- this._materializeRanges(n, r, !0);
1783
+ const r = xt(Math.trunc(t), 0, this.size - 1), i = e?.materializeOption;
1784
+ this._materializeRanges(i, r, !0);
1718
1785
  let s = 0, l = r + 1;
1719
1786
  for (; l > 0; ) {
1720
1787
  const f = this.tree.get(l) ?? 0;
1721
1788
  s += f;
1722
- const x = he(l);
1789
+ const x = ge(l);
1723
1790
  if (x === 0)
1724
1791
  break;
1725
1792
  l -= x;
1726
1793
  }
1727
- const u = n?.materialize ? this.get(r) : (this.deltas.get(r) || 0) + this.baseValue;
1728
- return { cumulative: s + this.baseValue * (r + 1), total: this.total, currentValue: u, safeIndex: r };
1794
+ const c = i?.materialize ? this.get(r) : (this.deltas.get(r) || 0) + this.baseValue;
1795
+ return { cumulative: s + this.baseValue * (r + 1), total: this.total, currentValue: c, safeIndex: r };
1729
1796
  }
1730
1797
  /**
1731
1798
  * @method get
@@ -1758,7 +1825,7 @@ class oe {
1758
1825
  else {
1759
1826
  this.total = this._computeTreeTotal();
1760
1827
  const r = this.prefixSum(this.getSize() - 1);
1761
- r.cumulative !== r.total && N.error("Inconsistent Fenwick Tree state");
1828
+ r.cumulative !== r.total && C.error("Inconsistent Fenwick Tree state");
1762
1829
  }
1763
1830
  return this.total;
1764
1831
  }
@@ -1772,17 +1839,17 @@ class oe {
1772
1839
  rebuildTree(t) {
1773
1840
  if (t?.materialize && this.valueFn) {
1774
1841
  const r = this.valueFn;
1775
- this.reset(this.size, (n) => r(n), { materialize: !0 });
1842
+ this.reset(this.size, (i) => r(i), { materialize: !0 });
1776
1843
  return;
1777
1844
  }
1778
1845
  const e = /* @__PURE__ */ new Map();
1779
- for (const [r, n] of this.deltas.entries()) {
1780
- if (n === 0)
1846
+ for (const [r, i] of this.deltas.entries()) {
1847
+ if (i === 0)
1781
1848
  continue;
1782
1849
  let s = r + 1;
1783
1850
  for (; s <= this.size; ) {
1784
- e.set(s, (e.get(s) ?? 0) + n);
1785
- const l = he(s);
1851
+ e.set(s, (e.get(s) ?? 0) + i);
1852
+ const l = ge(s);
1786
1853
  if (l === 0)
1787
1854
  break;
1788
1855
  s += l;
@@ -1794,14 +1861,19 @@ class oe {
1794
1861
  * @method calculateAccumulatedError
1795
1862
  * @description Compares the cached total sum with a theoretical total calculated directly from the source values (`deltas` and `baseValue`, or `valueFn`). This helps detect any discrepancy in the tree's cached state, which might be caused by floating-point errors or other inconsistencies.
1796
1863
  * @description キャッシュされている合計値と、元の値 (`deltas` と `baseValue`、または `valueFn`) から直接計算した理論上の合計値とを比較します。これにより、浮動小数点数の累積誤差やその他の不整合によって生じる可能性のある、ツリーのキャッシュ状態の不一致を検出できます。
1864
+ *
1865
+ * ❗ 集計対象は `[0, size)` の範囲内にある delta だけです。`changeSize(0)` は
1866
+ * ロード中の一時クリアとみなして delta を温存する (再伸長時にキャッシュを再利用するため) ので、
1867
+ * 範囲外の delta まで数えると**木は健全なのに空リストの間ずっと非ゼロ**が返り、
1868
+ * この値を破損検知に使う利用者が毎回不要な復旧処理を走らせてしまいます。
1797
1869
  * @returns {number} The difference between the cached total and the theoretical total.
1798
1870
  */
1799
1871
  calculateAccumulatedError() {
1800
1872
  if (this.total === void 0)
1801
1873
  return 0;
1802
1874
  let t = this.baseValue * this.size;
1803
- for (const e of this.deltas.values())
1804
- t += e;
1875
+ for (const [e, r] of this.deltas)
1876
+ e < this.size && (t += r);
1805
1877
  return this.total - t;
1806
1878
  }
1807
1879
  /**
@@ -1818,6 +1890,18 @@ class oe {
1818
1890
  * サイズ差分のみを受け取りインデックスの対応表は受け取らないため、要素は末尾に追加/末尾から削除
1819
1891
  * されると仮定する。既存行は index↔高さ の対応を保つ。したがって中間挿入/削除は表現できず、その
1820
1892
  * ような構造変更の後は index↔高さ の対応が保存されず、木の delta が誤った行へ適用されてしまう。
1893
+ * ❗ `changeSize(0)` は例外的に delta を消去しない。ロード中に一覧が一瞬空になるフローで
1894
+ * 実測済みの行高を捨てないための特例で、`changeSize(N > 0)` で再伸長したときに範囲内の delta が
1895
+ * そのまま復元される (範囲外の delta はそこで刈られる)。size が 0 に留まっている間、
1896
+ * `get()` / `getTotal()` は 0 を返し、`calculateAccumulatedError()` は範囲内 delta だけを
1897
+ * 集計するので 0 のままになる。**別データセットへ差し替える場合は温存が害になる**ため、
1898
+ * `reset()` を呼ぶか新しい `key` で作り直すこと。
1899
+ * ❗ `changeSize(0)` intentionally keeps its deltas so a list that briefly empties while loading
1900
+ * does not lose measured row heights; growing back restores the in-range ones (out-of-range
1901
+ * deltas are pruned then). While the size stays 0, `get()` / `getTotal()` return 0 and
1902
+ * `calculateAccumulatedError()` stays 0 because it only sums in-range deltas. Replacing the
1903
+ * dataset instead of reloading the same one must go through `reset()` or a fresh instance.
1904
+ *
1821
1905
  * 中間で要素を挿入/削除する消費側は、代わりに木をリセットするか (`useFenwickMapTree` の
1822
1906
  * `resetOnValueFnChange`。VirtualScroll では `resetOnGetItemHeightChange` として公開) 、新しい
1823
1907
  * `key` でコンポーネントを再マウントすること。
@@ -1835,14 +1919,20 @@ class oe {
1835
1919
  if (e === r)
1836
1920
  return;
1837
1921
  if (e > r)
1838
- this._growSize(r, e);
1922
+ if (r === 0 && this.deltas.size > 0) {
1923
+ for (const s of this.deltas.keys())
1924
+ s >= e && this.deltas.delete(s);
1925
+ this.size = e, this.rebuildTree();
1926
+ } else
1927
+ this._growSize(r, e);
1839
1928
  else {
1840
- for (const s of this.deltas.keys())
1841
- s >= e && this.deltas.delete(s);
1929
+ if (e > 0)
1930
+ for (const s of this.deltas.keys())
1931
+ s >= e && this.deltas.delete(s);
1842
1932
  this.size = e, this.rebuildTree();
1843
1933
  }
1844
- const n = this.prefixSum(this.getSize() - 1);
1845
- n.cumulative !== n.total && N.error("Inconsistent Fenwick Tree state");
1934
+ const i = this.prefixSum(this.getSize() - 1);
1935
+ i.cumulative !== i.total && C.error("Inconsistent Fenwick Tree state");
1846
1936
  }
1847
1937
  /**
1848
1938
  * @private
@@ -1856,10 +1946,10 @@ class oe {
1856
1946
  static _minCoveredLowBound(t, e) {
1857
1947
  let r = 1;
1858
1948
  for (; ; ) {
1859
- const n = r * 2;
1860
- if (Math.floor(e / n) * n <= t)
1949
+ const i = r * 2;
1950
+ if (Math.floor(e / i) * i <= t)
1861
1951
  break;
1862
- r = n;
1952
+ r = i;
1863
1953
  }
1864
1954
  return r * Math.floor(t / r);
1865
1955
  }
@@ -1873,17 +1963,17 @@ class oe {
1873
1963
  * @param {number} oldSize - The previous size.
1874
1964
  * @param {number} newSize - The new (larger) size.
1875
1965
  */
1876
- _propagateDeltaToGrownNodes(t, e, r, n) {
1966
+ _propagateDeltaToGrownNodes(t, e, r, i) {
1877
1967
  let s = t + 1;
1878
1968
  for (; s <= r; ) {
1879
- const l = he(s);
1969
+ const l = ge(s);
1880
1970
  if (l === 0)
1881
1971
  break;
1882
1972
  s += l;
1883
1973
  }
1884
- for (; s <= n; ) {
1974
+ for (; s <= i; ) {
1885
1975
  this.tree.set(s, (this.tree.get(s) ?? 0) + e);
1886
- const l = he(s);
1976
+ const l = ge(s);
1887
1977
  if (l === 0)
1888
1978
  break;
1889
1979
  s += l;
@@ -1899,7 +1989,7 @@ class oe {
1899
1989
  */
1900
1990
  _growSize(t, e) {
1901
1991
  if (this.size = e, this.deltas.size > 0) {
1902
- const r = oe._minCoveredLowBound(t, e);
1992
+ const r = ae._minCoveredLowBound(t, e);
1903
1993
  if (t - r < this.deltas.size)
1904
1994
  for (let s = r; s < t; s++) {
1905
1995
  const l = this.deltas.get(s);
@@ -1920,6 +2010,34 @@ class oe {
1920
2010
  getSize() {
1921
2011
  return this.size;
1922
2012
  }
2013
+ /**
2014
+ * @description Gets the base value of the tree — the height every row starts from before
2015
+ * its own delta is applied. `useFenwickMapTree` reads it to decide whether a `0 → N` growth
2016
+ * should re-sample from scratch (`reset`) or reuse the measured heights kept across the
2017
+ * empty state (`changeSize`), so removing or renaming it silently disables that cache
2018
+ * preservation.
2019
+ *
2020
+ * ❗ This is NOT a "has the tree warmed up?" flag. `0` is a legitimate base — it is what a
2021
+ * tree constructed with `new FenwickMapTree(n, 0)` has, and what sampling produces when the
2022
+ * value function returns 0 for not-yet-measured rows (a common virtualization pattern).
2023
+ * Such a tree can hold plenty of measured deltas while `base` stays `0`. The hook's
2024
+ * `0 → N` guard therefore trades cache preservation for correctness in exactly that case:
2025
+ * a base of `0` cannot be distinguished from "never established", and growing incrementally
2026
+ * from a zero base would pin `total` at `0 × N = 0`.
2027
+ * @description ツリーの基準値 (各行が自身の delta を適用される前の高さ) を取得。
2028
+ * `useFenwickMapTree` は `0 → N` の伸長を再サンプリング (`reset`) と実測高さの温存 (`changeSize`) の
2029
+ * どちらへ倒すかの判定にこの値を読むため、削除・改名するとキャッシュ温存が黙って無効化される。
2030
+ *
2031
+ * ❗ **「木が温まったか」のフラグではない。** `0` は正当な基準値であり、
2032
+ * `new FenwickMapTree(n, 0)` や「未計測行に 0 を返す `getItemHeight`」(仮想化では定番) の
2033
+ * サンプリング結果として普通に発生する。その木は実測 delta を大量に持っていても `base` は `0` のまま。
2034
+ * フックの `0 → N` ガードは、まさにこの場合にキャッシュ温存より整合を優先する
2035
+ * (基準値 0 は「未確立」と区別できず、0 のまま増分伸長すると `total = 0 × N = 0` で固着するため)。
2036
+ * @returns {number} The base value. 基準値。
2037
+ */
2038
+ get base() {
2039
+ return this.baseValue;
2040
+ }
1923
2041
  /**
1924
2042
  * @method findIndexAtOrAfter
1925
2043
  * @description Finds the first index where the cumulative sum is greater than or equal to a target value.
@@ -1949,20 +2067,20 @@ class oe {
1949
2067
  return this._findIndex(t, e ?? {}, !1);
1950
2068
  }
1951
2069
  }
1952
- const vr = (i, t) => {
1953
- const e = i?.sampleRange, r = t?.sampleRange;
2070
+ const Pr = (n, t) => {
2071
+ const e = n?.sampleRange, r = t?.sampleRange;
1954
2072
  return e === r ? !1 : e && r ? e.from !== r.from || e.to !== r.to : !0;
1955
- }, Tr = (i, t, e) => {
1956
- const r = Number.isFinite(i) && i > 0 ? Math.trunc(i) : 0, n = g(null), s = g({ size: r, valueOrFn: t, options: e });
1957
- n.current === null && (n.current = new oe(r, t, e));
1958
- const l = n.current, u = s.current, f = u.size !== r, x = u.valueOrFn !== t, I = vr(u.options, e), M = u.size === 0 && r > 0;
2073
+ }, Mr = (n, t, e) => {
2074
+ const r = Number.isFinite(n) && n > 0 ? Math.trunc(n) : 0, i = T(null), s = T({ size: r, valueOrFn: t, options: e });
2075
+ i.current === null && (i.current = new ae(r, t, e));
2076
+ const l = i.current, c = s.current, f = c.size !== r, x = c.valueOrFn !== t, I = Pr(c.options, e), P = c.size === 0 && r > 0 && (!i.current || i.current.base === 0);
1959
2077
  if (x || I) {
1960
- const _ = e?.resetOnValueFnChange ?? !0;
1961
- I || x && _ || M ? (e?.debug && N.debug("[useFenwickMapTree] reset", { valueOrFnChanged: x, optionsChanged: I }), l.reset(r, t, e)) : (f && (e?.debug && N.debug("[useFenwickMapTree] resize (with valueFn change)", { from: u.size, to: r }), l.changeSize(r)), e?.debug && N.debug("[useFenwickMapTree] setValueFn (no reset)", { valueOrFnChanged: x }), l.setValueFn(t, { reset: !1 })), s.current = { size: r, valueOrFn: t, options: e };
1962
- } else f && (e?.debug && N.debug("[useFenwickMapTree] resize", { from: u.size, to: r }), M ? l.reset(r, t, e) : l.changeSize(r), s.current = { size: r, valueOrFn: t, options: e });
2078
+ const E = e?.resetOnValueFnChange ?? !0;
2079
+ I || x && E || P ? (e?.debug && C.debug("[useFenwickMapTree] reset", { valueOrFnChanged: x, optionsChanged: I }), l.reset(r, t, e)) : (f && (e?.debug && C.debug("[useFenwickMapTree] resize (with valueFn change)", { from: c.size, to: r }), l.changeSize(r)), e?.debug && C.debug("[useFenwickMapTree] setValueFn (no reset)", { valueOrFnChanged: x }), l.setValueFn(t, { reset: !1 })), s.current = { size: r, valueOrFn: t, options: e };
2080
+ } else f && (e?.debug && C.debug("[useFenwickMapTree] resize", { from: c.size, to: r }), P ? l.reset(r, t, e) : l.changeSize(r), s.current = { size: r, valueOrFn: t, options: e });
1963
2081
  return l;
1964
2082
  };
1965
- class Sr {
2083
+ class yr {
1966
2084
  key;
1967
2085
  value;
1968
2086
  prev = null;
@@ -1971,7 +2089,7 @@ class Sr {
1971
2089
  this.key = t, this.value = e;
1972
2090
  }
1973
2091
  }
1974
- class _e {
2092
+ class Fe {
1975
2093
  head = null;
1976
2094
  tail = null;
1977
2095
  /**
@@ -2012,11 +2130,11 @@ class _e {
2012
2130
  this.remove(t), this.addToTail(t);
2013
2131
  }
2014
2132
  }
2015
- function Mr(i) {
2016
- const t = g(/* @__PURE__ */ new Map()), e = g(new _e()), r = Math.floor(i), n = g(r);
2017
- X(() => {
2018
- if (n.current = r, Number.isNaN(r) || r < 0) {
2019
- N.warn(`useLruCache: invalid capacity ${i}; the cache will not store any entries.`), t.current.clear(), e.current = new _e();
2133
+ function wr(n) {
2134
+ const t = T(/* @__PURE__ */ new Map()), e = T(new Fe()), r = Math.floor(n), i = T(r);
2135
+ Y(() => {
2136
+ if (i.current = r, Number.isNaN(r) || r < 0) {
2137
+ C.warn(`useLruCache: invalid capacity ${n}; the cache will not store any entries.`), t.current.clear(), e.current = new Fe();
2020
2138
  return;
2021
2139
  }
2022
2140
  if (Number.isFinite(r))
@@ -2027,228 +2145,228 @@ function Mr(i) {
2027
2145
  else
2028
2146
  break;
2029
2147
  }
2030
- }, [i, r]);
2031
- const s = S((I) => {
2032
- const M = t.current.get(I);
2033
- if (M)
2034
- return e.current.moveToTail(M), M.value;
2035
- }, []), l = S((I, M) => {
2036
- const _ = n.current;
2037
- if (Number.isNaN(_) || _ <= 0)
2148
+ }, [n, r]);
2149
+ const s = v((I) => {
2150
+ const P = t.current.get(I);
2151
+ if (P)
2152
+ return e.current.moveToTail(P), P.value;
2153
+ }, []), l = v((I, P) => {
2154
+ const E = i.current;
2155
+ if (Number.isNaN(E) || E <= 0)
2038
2156
  return;
2039
- let p = t.current.get(I);
2040
- if (p)
2041
- p.value = M, e.current.moveToTail(p);
2157
+ let g = t.current.get(I);
2158
+ if (g)
2159
+ g.value = P, e.current.moveToTail(g);
2042
2160
  else {
2043
- if (t.current.size >= _) {
2044
- const D = e.current.removeHead();
2045
- D && t.current.delete(D.key);
2161
+ if (t.current.size >= E) {
2162
+ const _ = e.current.removeHead();
2163
+ _ && t.current.delete(_.key);
2046
2164
  }
2047
- p = new Sr(I, M), t.current.set(I, p), e.current.addToTail(p);
2165
+ g = new yr(I, P), t.current.set(I, g), e.current.addToTail(g);
2048
2166
  }
2049
- }, []), u = S((I) => t.current.has(I), []), f = S((I) => {
2050
- const M = t.current.get(I);
2051
- M && (e.current.remove(M), t.current.delete(I));
2052
- }, []), x = S(() => {
2053
- t.current.clear(), e.current = new _e();
2167
+ }, []), c = v((I) => t.current.has(I), []), f = v((I) => {
2168
+ const P = t.current.get(I);
2169
+ P && (e.current.remove(P), t.current.delete(I));
2170
+ }, []), x = v(() => {
2171
+ t.current.clear(), e.current = new Fe();
2054
2172
  }, []);
2055
- return Vt(() => ({ get: s, set: l, has: u, remove: f, clear: x }), [s, l, u, f, x]);
2173
+ return At(() => ({ get: s, set: l, has: c, remove: f, clear: x }), [s, l, c, f, x]);
2056
2174
  }
2057
- const Pr = 1e4, Lr = () => {
2058
- const { get: i, set: t, has: e, clear: r } = Mr(Pr);
2059
- return Vt(() => ({ get: i, set: t, has: e, clear: r }), [i, t, e, r]);
2060
- }, ut = (i, t) => t <= 0 ? 0 : pt(i, 0, t - 1), Xe = (i) => ({
2061
- top: Math.max(0, i?.top ?? 0),
2062
- bottom: Math.max(0, i?.bottom ?? 0)
2063
- }), ee = (i, t) => i <= t ? 0 : i - t, ge = (i, t) => i <= 0 ? t : i + t, Ne = 1e3, $e = 2e3, yr = 1048576, Se = (i) => {
2064
- if (!Number.isFinite(i)) return 0n;
2065
- const t = Math.trunc(i);
2175
+ const Rr = 1e4, Or = () => {
2176
+ const { get: n, set: t, has: e, clear: r } = wr(Rr);
2177
+ return At(() => ({ get: n, set: t, has: e, clear: r }), [n, t, e, r]);
2178
+ }, bt = (n, t) => t <= 0 ? 0 : xt(n, 0, t - 1), Ue = (n) => ({
2179
+ top: Math.max(0, n?.top ?? 0),
2180
+ bottom: Math.max(0, n?.bottom ?? 0)
2181
+ }), ne = (n, t) => n <= t ? 0 : n - t, be = (n, t) => n <= 0 ? t : n + t, Ve = 1e3, Ke = 2e3, Cr = 1048576, Me = (n) => {
2182
+ if (!Number.isFinite(n)) return 0n;
2183
+ const t = Math.trunc(n);
2066
2184
  return t <= 0 ? 0n : BigInt(t);
2067
- }, wr = (i, t, e, r, n, s, l, u) => {
2068
- const f = Se(r);
2185
+ }, Er = (n, t, e, r, i, s, l, c) => {
2186
+ const f = Me(r);
2069
2187
  if (f === 0n)
2070
2188
  return { renderingStartIndex: 0, renderingEndIndex: 0, visibleStartIndex: 0, visibleEndIndex: 0 };
2071
- const x = (k) => k < 0n ? 0n : k >= f ? f - 1n : k, I = { materializeOption: { materialize: !1 } }, { index: M, cumulative: _ } = s.findIndexAtOrAfter(i, I);
2072
- let p;
2073
- M === -1 ? p = f - 1n : (_ === i ? p = Se(M + 1) : p = Se(M), p >= f && (p = f - 1n)), i <= 0 && (p = 0n), u && i >= l && (p = f - 1n);
2074
- const D = (k) => {
2075
- const B = Number(k);
2076
- if (!Number.isSafeInteger(B))
2189
+ const x = (D) => D < 0n ? 0n : D >= f ? f - 1n : D, I = { materializeOption: { materialize: !1 } }, { index: P, cumulative: E } = s.findIndexAtOrAfter(n, I);
2190
+ let g;
2191
+ P === -1 ? g = f - 1n : (E === n ? g = Me(P + 1) : g = Me(P), g >= f && (g = f - 1n)), n <= 0 && (g = 0n), c && n >= l && (g = f - 1n);
2192
+ const _ = (D) => {
2193
+ const O = Number(D);
2194
+ if (!Number.isSafeInteger(O))
2077
2195
  return null;
2078
- const { cumulative: w } = s.prefixSum(B, { materializeOption: { materialize: !1 } });
2079
- if (!Number.isFinite(w))
2196
+ const { cumulative: M } = s.prefixSum(O, { materializeOption: { materialize: !1 } });
2197
+ if (!Number.isFinite(M))
2080
2198
  return null;
2081
- const { index: C } = s.findIndexAtOrAfter(w + 0.5, { materializeOption: { materialize: !1 } });
2082
- if (C === -1)
2199
+ const { index: B } = s.findIndexAtOrAfter(M + 0.5, { materializeOption: { materialize: !1 } });
2200
+ if (B === -1)
2083
2201
  return null;
2084
- const U = Se(C);
2085
- return U > k ? U : null;
2086
- }, J = (k) => {
2087
- let B = 0, w = k, C = k, U = 0n, H = 0;
2088
- for (; w < f && B < t; ) {
2089
- const tt = Number(w), L = n(tt);
2090
- if (B += L, C = w, w += 1n, U += 1n, !Number.isFinite(L) || L < 0)
2202
+ const N = Me(B);
2203
+ return N > D ? N : null;
2204
+ }, z = (D) => {
2205
+ let O = 0, M = D, B = D, N = 0n, q = 0;
2206
+ for (; M < f && O < t; ) {
2207
+ const et = Number(M), G = i(et);
2208
+ if (O += G, B = M, M += 1n, N += 1n, !Number.isFinite(G) || G < 0)
2091
2209
  break;
2092
- if (L === 0) {
2093
- if (H += 1, H > Ne) {
2094
- const b = D(C);
2095
- if (b !== null && b > w)
2096
- w = b, H = 0;
2097
- else if (b !== null && b === w && n(Number(w)) > 0)
2098
- H = 0;
2210
+ if (G === 0) {
2211
+ if (q += 1, q > Ve) {
2212
+ const h = _(B);
2213
+ if (h !== null && h > M)
2214
+ M = h, q = 0;
2215
+ else if (h !== null && h === M && i(Number(M)) > 0)
2216
+ q = 0;
2099
2217
  else
2100
2218
  break;
2101
2219
  }
2102
2220
  } else
2103
- H = 0;
2221
+ q = 0;
2104
2222
  }
2105
- return U === 0n && (C = k), { height: B, end: C };
2223
+ return N === 0n && (B = D), { height: O, end: B };
2106
2224
  };
2107
- let { height: G, end: rt } = J(p);
2108
- if (G < t && p > 0n) {
2109
- let k = p, B = G, w = 0;
2110
- for (; k > 0n && B < t; ) {
2111
- k -= 1n;
2112
- const U = Number(k), H = n(U);
2113
- if (B += H, !Number.isFinite(H) || H < 0)
2225
+ let { height: j, end: ft } = z(g);
2226
+ if (j < t && g > 0n) {
2227
+ let D = g, O = j, M = 0;
2228
+ for (; D > 0n && O < t; ) {
2229
+ D -= 1n;
2230
+ const N = Number(D), q = i(N);
2231
+ if (O += q, !Number.isFinite(q) || q < 0)
2114
2232
  break;
2115
- if (H === 0) {
2116
- if (w += 1, w > Ne) {
2117
- const tt = Number(k);
2118
- if (!Number.isSafeInteger(tt))
2233
+ if (q === 0) {
2234
+ if (M += 1, M > Ve) {
2235
+ const et = Number(D);
2236
+ if (!Number.isSafeInteger(et))
2119
2237
  break;
2120
- const { cumulative: L } = s.prefixSum(tt, { materializeOption: { materialize: !1 } });
2121
- if (!Number.isFinite(L))
2238
+ const { cumulative: G } = s.prefixSum(et, { materializeOption: { materialize: !1 } });
2239
+ if (!Number.isFinite(G))
2122
2240
  break;
2123
- const { index: b } = s.findIndexAtOrAfter(L - 0.5, { materializeOption: { materialize: !1 } }), K = b === -1 ? -1n : Se(b);
2124
- if (K >= 0n && K < k)
2125
- k = K + 1n, w = 0;
2126
- else if (K === k && k >= 1n && n(Number(k - 1n)) > 0)
2127
- w = 0;
2241
+ const { index: h } = s.findIndexAtOrAfter(G - 0.5, { materializeOption: { materialize: !1 } }), $ = h === -1 ? -1n : Me(h);
2242
+ if ($ >= 0n && $ < D)
2243
+ D = $ + 1n, M = 0;
2244
+ else if ($ === D && D >= 1n && i(Number(D - 1n)) > 0)
2245
+ M = 0;
2128
2246
  else
2129
2247
  break;
2130
2248
  }
2131
2249
  } else
2132
- w = 0;
2250
+ M = 0;
2133
2251
  }
2134
- p = x(k);
2135
- const C = J(p);
2136
- G = C.height, rt = C.end;
2252
+ g = x(D);
2253
+ const B = z(g);
2254
+ j = B.height, ft = B.end;
2137
2255
  }
2138
- const nt = x(p), st = x(rt), wt = x(nt - BigInt(Math.max(0, e))), At = x(st + BigInt(Math.max(0, e)));
2256
+ const Q = x(g), tt = x(ft), pt = x(Q - BigInt(Math.max(0, e))), It = x(tt + BigInt(Math.max(0, e)));
2139
2257
  return {
2140
- renderingStartIndex: ut(Number(wt), r),
2141
- renderingEndIndex: ut(Number(At), r),
2142
- visibleStartIndex: ut(Number(nt), r),
2143
- visibleEndIndex: ut(Number(st), r)
2258
+ renderingStartIndex: bt(Number(pt), r),
2259
+ renderingEndIndex: bt(Number(It), r),
2260
+ visibleStartIndex: bt(Number(Q), r),
2261
+ visibleEndIndex: bt(Number(tt), r)
2144
2262
  };
2145
- }, Rr = (i, t, e, r, n, s, l) => {
2263
+ }, Nr = (n, t, e, r, i, s, l) => {
2146
2264
  if (r === 0)
2147
2265
  return { renderingStartIndex: 0, renderingEndIndex: 0, visibleStartIndex: 0, visibleEndIndex: 0 };
2148
- const u = Number.isFinite(l), f = u ? Math.min(Math.max(0, i), l) : Math.max(0, i);
2266
+ const c = Number.isFinite(l), f = c ? Math.min(Math.max(0, n), l) : Math.max(0, n);
2149
2267
  if (r >= Number.MAX_SAFE_INTEGER)
2150
- return wr(f, t, e, r, n, s, l, u);
2151
- const { index: x, cumulative: I, currentValue: M } = s.findIndexAtOrAfter(f, { materializeOption: { materialize: !1 } }), _ = x === -1 ? t <= 0 || (I ?? 0) < f + (M ?? 0) ? r - 1 : 0 : x;
2152
- let p = ut(_, r), D = 0;
2268
+ return Er(f, t, e, r, i, s, l, c);
2269
+ const { index: x, cumulative: I, currentValue: P } = s.findIndexAtOrAfter(f, { materializeOption: { materialize: !1 } }), E = x === -1 ? t <= 0 || (I ?? 0) < f + (P ?? 0) ? r - 1 : 0 : x;
2270
+ let g = bt(E, r), _ = 0;
2153
2271
  if (x !== -1 && I === f)
2154
- p = ut(x + 1, r), D = 0;
2155
- else if (p === x && I !== void 0 && M !== void 0)
2156
- D = I - M - f;
2272
+ g = bt(x + 1, r), _ = 0;
2273
+ else if (g === x && I !== void 0 && P !== void 0)
2274
+ _ = I - P - f;
2157
2275
  else {
2158
- const { cumulative: k, currentValue: B } = s.prefixSum(p, { materializeOption: { materialize: !1 } });
2159
- D = (k ?? 0) - (B ?? 0) - f;
2276
+ const { cumulative: D, currentValue: O } = s.prefixSum(g, { materializeOption: { materialize: !1 } });
2277
+ _ = (D ?? 0) - (O ?? 0) - f;
2160
2278
  }
2161
- const J = D, G = (k, B) => {
2162
- let w = k, C = B, U = 0;
2163
- for (; w < r && C < t; ) {
2164
- const H = n(w);
2165
- if (C += H, w++, !Number.isFinite(H) || H < 0)
2279
+ const z = _, j = (D, O) => {
2280
+ let M = D, B = O, N = 0;
2281
+ for (; M < r && B < t; ) {
2282
+ const q = i(M);
2283
+ if (B += q, M++, !Number.isFinite(q) || q < 0)
2166
2284
  break;
2167
- if (H === 0) {
2168
- if (U++, U > Ne) {
2169
- const { cumulative: tt } = s.prefixSum(w - 1, { materializeOption: { materialize: !1 } }), { index: L } = Number.isFinite(tt) ? s.findIndexAtOrAfter(tt + 0.5, { materializeOption: { materialize: !1 } }) : { index: -1 };
2170
- if (L > w)
2171
- w = L, U = 0;
2172
- else if (L === w && n(w) > 0)
2173
- U = 0;
2285
+ if (q === 0) {
2286
+ if (N++, N > Ve) {
2287
+ const { cumulative: et } = s.prefixSum(M - 1, { materializeOption: { materialize: !1 } }), { index: G } = Number.isFinite(et) ? s.findIndexAtOrAfter(et + 0.5, { materializeOption: { materialize: !1 } }) : { index: -1 };
2288
+ if (G > M)
2289
+ M = G, N = 0;
2290
+ else if (G === M && i(M) > 0)
2291
+ N = 0;
2174
2292
  else
2175
2293
  break;
2176
2294
  }
2177
2295
  } else
2178
- U = 0;
2296
+ N = 0;
2179
2297
  }
2180
- return { cursor: w, height: C };
2181
- }, rt = G(p, D);
2182
- let nt = rt.cursor;
2183
- if (D = rt.height, D < t && p > 0) {
2184
- let k = D + Math.abs(Math.min(0, J)), B = p - 1, w = 0;
2185
- for (; B >= 0 && k < t; ) {
2186
- const U = n(B);
2187
- if (k += U, !Number.isFinite(U) || U < 0) {
2188
- B--;
2298
+ return { cursor: M, height: B };
2299
+ }, ft = j(g, _);
2300
+ let Q = ft.cursor;
2301
+ if (_ = ft.height, _ < t && g > 0) {
2302
+ let D = _ + Math.abs(Math.min(0, z)), O = g - 1, M = 0;
2303
+ for (; O >= 0 && D < t; ) {
2304
+ const N = i(O);
2305
+ if (D += N, !Number.isFinite(N) || N < 0) {
2306
+ O--;
2189
2307
  break;
2190
2308
  }
2191
- if (U === 0) {
2192
- if (w++, w > Ne) {
2193
- const { cumulative: H } = s.prefixSum(B, { materializeOption: { materialize: !1 } }), { index: tt } = Number.isFinite(H) ? s.findIndexAtOrAfter(H - 0.5, { materializeOption: { materialize: !1 } }) : { index: -1 };
2194
- if (tt !== -1 && tt < B) {
2195
- B = tt, w = 0;
2309
+ if (N === 0) {
2310
+ if (M++, M > Ve) {
2311
+ const { cumulative: q } = s.prefixSum(O, { materializeOption: { materialize: !1 } }), { index: et } = Number.isFinite(q) ? s.findIndexAtOrAfter(q - 0.5, { materializeOption: { materialize: !1 } }) : { index: -1 };
2312
+ if (et !== -1 && et < O) {
2313
+ O = et, M = 0;
2196
2314
  continue;
2197
2315
  }
2198
- if (tt === B && B >= 1 && n(B - 1) > 0)
2199
- w = 0;
2316
+ if (et === O && O >= 1 && i(O - 1) > 0)
2317
+ M = 0;
2200
2318
  else {
2201
- B--;
2319
+ O--;
2202
2320
  break;
2203
2321
  }
2204
2322
  }
2205
2323
  } else
2206
- w = 0;
2207
- B--;
2324
+ M = 0;
2325
+ O--;
2208
2326
  }
2209
- p = ut(B + 1, r);
2210
- const C = G(p, 0);
2211
- nt = C.cursor, D = C.height;
2327
+ g = bt(O + 1, r);
2328
+ const B = j(g, 0);
2329
+ Q = B.cursor, _ = B.height;
2212
2330
  }
2213
- const st = ut(p - e, r), wt = ut(Math.max(nt - 1, p), r), At = ut(wt + e, r);
2214
- return { renderingStartIndex: st, renderingEndIndex: At, visibleStartIndex: p, visibleEndIndex: wt };
2215
- }, Ue = (i, t, e) => {
2216
- const r = Math.max(0, t ?? 0), n = g({ last: 0, id: null, arg: null }).current;
2217
- return X(
2331
+ const tt = bt(g - e, r), pt = bt(Math.max(Q - 1, g), r), It = bt(pt + e, r);
2332
+ return { renderingStartIndex: tt, renderingEndIndex: It, visibleStartIndex: g, visibleEndIndex: pt };
2333
+ }, We = (n, t, e) => {
2334
+ const r = Math.max(0, t ?? 0), i = T({ last: 0, id: null, arg: null }).current;
2335
+ return Y(
2218
2336
  () => () => {
2219
- n.id !== null && (cancelAnimationFrame(n.id), n.id = null);
2337
+ i.id !== null && (cancelAnimationFrame(i.id), i.id = null);
2220
2338
  },
2221
- [n]
2222
- ), S(
2339
+ [i]
2340
+ ), v(
2223
2341
  (s) => {
2224
- if (n.arg = s, n.id !== null) return;
2225
- const l = (u) => {
2226
- if (n.id = null, n.arg === null) return;
2227
- const f = u - n.last;
2228
- if (r === 0 || n.last === 0 || f >= r) {
2229
- if (i.current)
2342
+ if (i.arg = s, i.id !== null) return;
2343
+ const l = (c) => {
2344
+ if (i.id = null, i.arg === null) return;
2345
+ const f = c - i.last;
2346
+ if (r === 0 || i.last === 0 || f >= r) {
2347
+ if (n.current)
2230
2348
  try {
2231
- e(i.current, n.arg);
2349
+ e(n.current, i.arg);
2232
2350
  } catch (x) {
2233
2351
  console.error("[useThrottledInvoker] Error invoking callback", x);
2234
2352
  }
2235
- n.arg = null, n.last = u;
2353
+ i.arg = null, i.last = c;
2236
2354
  }
2237
- n.arg !== null && (n.id = requestAnimationFrame(l));
2355
+ i.arg !== null && (i.id = requestAnimationFrame(l));
2238
2356
  };
2239
- n.id = requestAnimationFrame(l);
2357
+ i.id = requestAnimationFrame(l);
2240
2358
  },
2241
- [r, e, i, n]
2359
+ [r, e, n, i]
2242
2360
  );
2243
- }, Cr = Qe.memo(({ index: i, top: t, height: e, item: r, children: n, clipItemHeight: s, enableKeyboardNavigation: l, onKeyDown: u, onFocus: f, registerItemRef: x }) => {
2244
- const I = S((D) => x(i, D), [i, x]), M = S((D) => u(D, i), [i, u]), _ = S(() => f(i), [i, f]), p = S((D) => {
2245
- D.currentTarget.focus({ preventScroll: !0 });
2361
+ }, Vr = Je.memo(({ index: n, top: t, height: e, item: r, children: i, clipItemHeight: s, enableKeyboardNavigation: l, onKeyDown: c, onFocus: f, registerItemRef: x }) => {
2362
+ const I = v((_) => x(n, _), [n, x]), P = v((_) => c(_, n), [n, c]), E = v(() => f(n), [n, f]), g = v((_) => {
2363
+ _.currentTarget.focus({ preventScroll: !0 });
2246
2364
  }, []);
2247
- return /* @__PURE__ */ Q(
2365
+ return /* @__PURE__ */ it(
2248
2366
  "div",
2249
2367
  {
2250
2368
  ref: I,
2251
- "data-index": i,
2369
+ "data-index": n,
2252
2370
  "data-virtualscroll-item": "true",
2253
2371
  className: "aqvs-item-container",
2254
2372
  style: {
@@ -2257,575 +2375,579 @@ const Pr = 1e4, Lr = () => {
2257
2375
  overflow: s ? "hidden" : void 0
2258
2376
  },
2259
2377
  tabIndex: l ? -1 : void 0,
2260
- onPointerDown: l ? p : void 0,
2261
- onKeyDownCapture: l ? M : void 0,
2262
- onFocusCapture: l ? _ : void 0,
2263
- children: n(r, i)
2378
+ onPointerDown: l ? g : void 0,
2379
+ onKeyDownCapture: l ? P : void 0,
2380
+ onFocusCapture: l ? E : void 0,
2381
+ children: i(r, n)
2264
2382
  }
2265
2383
  );
2266
- }), Er = ({
2267
- itemCount: i,
2384
+ }), Ar = ({
2385
+ itemCount: n,
2268
2386
  getItem: t,
2269
2387
  getItemKey: e,
2270
2388
  getItemHeight: r,
2271
- viewportSize: n,
2389
+ viewportSize: i,
2272
2390
  overscanCount: s = 15,
2273
2391
  className: l,
2274
- testId: u,
2392
+ testId: c,
2275
2393
  onScroll: f,
2276
2394
  onRangeChange: x,
2277
2395
  children: I,
2278
- background: M,
2279
- initialScrollIndex: _,
2280
- initialScrollOffset: p,
2281
- callbackThrottleMs: D = 5,
2282
- contentInsets: J,
2283
- onItemFocus: G,
2284
- scrollBarOptions: rt,
2285
- behaviorOptions: nt,
2286
- onWheelHorizontal: st
2287
- }, wt) => {
2288
- const { width: At, enableThumbDrag: k, enableTrackClick: B, enableArrowButtons: w, enableScrollToTopBottomButtons: C, renderThumbOverlay: U, tapScrollCircleOptions: H } = rt ?? {}, { enablePointerDrag: tt, enableKeyboardNavigation: L = !0, wheelSpeedMultiplier: b, inertiaOptions: K, clipItemHeight: dt = !1, resetOnGetItemHeightChange: et = !1 } = nt ?? {}, Y = g(null), j = g({
2396
+ background: P,
2397
+ initialScrollIndex: E,
2398
+ initialScrollOffset: g,
2399
+ callbackThrottleMs: _ = 5,
2400
+ contentInsets: z,
2401
+ onItemFocus: j,
2402
+ scrollBarOptions: ft,
2403
+ behaviorOptions: Q,
2404
+ onWheelHorizontal: tt
2405
+ }, pt) => {
2406
+ const { width: It, enableThumbDrag: D, enableTrackClick: O, enableArrowButtons: M, enableScrollToTopBottomButtons: B, renderThumbOverlay: N, tapScrollCircleOptions: q } = ft ?? {}, { enablePointerDrag: et, pointerDragInputs: G, enableKeyboardNavigation: h = !0, wheelSpeedMultiplier: $, inertiaOptions: Tt, clipItemHeight: wt = !1, resetOnGetItemHeightChange: Z = !1 } = Q ?? {}, k = T(null), Rt = T({
2289
2407
  renderingStartIndex: 0,
2290
2408
  renderingEndIndex: 0,
2291
2409
  visibleStartIndex: 0,
2292
2410
  visibleEndIndex: 0,
2293
2411
  scrollPosition: 0,
2294
2412
  totalHeight: 0
2295
- }), ht = g(null), St = g(!1);
2296
- X(() => {
2297
- et && (ht.current = null);
2298
- }, [et, r]);
2299
- const R = Vt(() => Xe(J), [J]), [Ft] = jt(() => {
2300
- const c = typeof _ == "number" && Number.isFinite(_) ? Math.max(0, Math.trunc(_)) : 0;
2301
- return { from: Math.max(0, c - 50), to: c + 50 };
2302
- }), Lt = Vt(
2413
+ }), U = T(null), Ct = T(!1);
2414
+ Y(() => {
2415
+ Z && (U.current = null);
2416
+ }, [Z, r]);
2417
+ const w = At(() => Ue(z), [z]), [Yt] = Zt(() => {
2418
+ const u = typeof E == "number" && Number.isFinite(E) ? Math.max(0, Math.trunc(E)) : 0;
2419
+ return { from: Math.max(0, u - 50), to: u + 50 };
2420
+ }), Xt = At(
2303
2421
  // 目的: Fenwick Tree のオプション設定
2304
2422
  // 依存関係: resetOnGetItemHeightChange, initialSampleRange (マウント時固定)
2305
2423
  // itemCount には依存させない (依存させると追記のたびに options 参照が変わり、計測済み高さが全消去される)。
2306
2424
  // この useMemo により sampleRange を毎レンダー新規生成しない = 参照同一性由来の破壊的 reset を防ぐ。
2307
2425
  () => ({
2308
- sampleRange: Ft,
2309
- resetOnValueFnChange: et,
2426
+ sampleRange: Yt,
2427
+ resetOnValueFnChange: Z,
2310
2428
  materialize: !0
2311
2429
  }),
2312
- [et, Ft]
2313
- ), v = Tr(i, r, Lt), [kt] = jt(() => {
2314
- let o = 0, c = 0;
2315
- if (typeof _ == "number") {
2316
- const d = pt(_, 0, i - 1), y = pt(d - s * 2, 0, i - 1), z = pt(d + s * 2, 0, i - 1), E = _ > 0 ? { materializeOption: { materialize: !0, ranges: [{ from: y, to: z }] } } : void 0, { cumulative: q, total: $, currentValue: lt } = v.prefixSum(_, E), Z = Math.max(q - lt, 0);
2317
- o = ge(Z, R.top), c = $ ?? v.getTotal();
2318
- } else typeof p == "number" && (o = ge(Math.max(p, 0), R.top)), c = v.getTotal();
2319
- return { position: o, total: c };
2320
- }), [_t, Gt] = jt(kt.position), [T, O] = jt(kt.total), A = g(kt.position), Mt = g(R.top), gt = g(f ?? void 0), bt = g(x ?? void 0), Rt = g(/* @__PURE__ */ new Map()), W = g(null), at = g(null), [ft, Zt] = jt(null), [Ot, Ct] = jt(!1), Et = g(null), Xt = g(!1), ct = g(0), xt = g(!1), m = g(!1), V = g(i);
2321
- V.current !== i && (V.current = i, m.current = !0), X(() => {
2322
- gt.current = f ?? void 0, bt.current = x ?? void 0;
2430
+ [Z, Yt]
2431
+ ), S = Mr(n, r, Xt), [$t] = Zt(() => {
2432
+ let a = 0, u = 0;
2433
+ if (typeof E == "number") {
2434
+ const p = xt(E, 0, n - 1), V = xt(p - s * 2, 0, n - 1), A = xt(p + s * 2, 0, n - 1), F = E > 0 ? { materializeOption: { materialize: !0, ranges: [{ from: V, to: A }] } } : void 0, { cumulative: K, total: W, currentValue: vt } = S.prefixSum(E, F), ht = Math.max(K - vt, 0);
2435
+ a = be(ht, w.top), u = W ?? S.getTotal();
2436
+ } else typeof g == "number" && (a = be(Math.max(g, 0), w.top)), u = S.getTotal();
2437
+ return { position: a, total: u };
2438
+ }), [Bt, Jt] = Zt($t.position), [lt, Wt] = Zt($t.total), d = T($t.position), mt = T(w.top), ct = T(f ?? void 0), H = T(x ?? void 0), nt = T(/* @__PURE__ */ new Map()), J = T(null), Pt = T(null), [Mt, Et] = Zt(null), [st, St] = Zt(!1), yt = T(null), ut = T(!1), ot = T(0), Dt = T(!1), qt = T(!1), le = T(n);
2439
+ le.current !== n && (le.current = n, qt.current = !0), Y(() => {
2440
+ ct.current = f ?? void 0, H.current = x ?? void 0;
2323
2441
  }, [x, f]);
2324
- const It = S(
2325
- (o) => {
2326
- if (L && o && typeof o.focus == "function")
2442
+ const dt = v(
2443
+ (a) => {
2444
+ if (h && a && typeof a.focus == "function")
2327
2445
  try {
2328
- o.focus({ preventScroll: !0 });
2446
+ a.focus({ preventScroll: !0 });
2329
2447
  } catch {
2330
- o.focus();
2448
+ a.focus();
2331
2449
  }
2332
2450
  },
2333
- [L]
2334
- ), vt = S((o, { position: c, totalHeight: d }) => {
2335
- o(c, d);
2336
- }, []), mt = Ue(gt, D, vt), se = S((o, c) => {
2337
- o(c);
2338
- }, []), Nt = Ue(bt, D, se), $t = g(R.top);
2339
- $t.current = R.top;
2340
- const Ht = g(mt);
2341
- Ht.current = mt, X(() => (St.current = !1, () => {
2342
- St.current = !0, Et.current && (clearTimeout(Et.current), Et.current = null);
2343
- }), []), X(() => {
2344
- L || (Rt.current.clear(), W.current = null, at.current = null);
2345
- }, [L]);
2346
- const Dt = S(
2347
- (o, c) => {
2348
- if (!c) {
2349
- Rt.current.delete(o);
2451
+ [h]
2452
+ ), Qt = v((a, { position: u, totalHeight: p }) => {
2453
+ a(u, p);
2454
+ }, []), m = We(ct, _, Qt), y = v((a, u) => {
2455
+ a(u);
2456
+ }, []), Nt = We(H, _, y), Lt = T(w.top);
2457
+ Lt.current = w.top;
2458
+ const at = T(m);
2459
+ at.current = m, Y(() => (Ct.current = !1, () => {
2460
+ Ct.current = !0, yt.current && (clearTimeout(yt.current), yt.current = null);
2461
+ }), []), Y(() => {
2462
+ h || (nt.current.clear(), J.current = null, Pt.current = null);
2463
+ }, [h]);
2464
+ const _t = v(
2465
+ (a, u) => {
2466
+ if (!u) {
2467
+ nt.current.delete(a);
2350
2468
  return;
2351
2469
  }
2352
- L && (Rt.current.set(o, c), W.current === o && (W.current = null, at.current = o, It(c)));
2470
+ h && (nt.current.set(a, u), J.current === a && (J.current = null, Pt.current = a, dt(u)));
2353
2471
  },
2354
- [L, It]
2355
- ), zt = 0.01, Ut = g({
2472
+ [h, dt]
2473
+ ), Ht = 0.01, kt = T({
2356
2474
  rafId: null,
2357
2475
  loopActive: !1,
2358
2476
  idleFrames: 0,
2359
- lastRenderedPosition: kt.position
2360
- }), ae = S(() => {
2361
- const o = Ut.current;
2362
- o.rafId !== null && typeof cancelAnimationFrame == "function" && cancelAnimationFrame(o.rafId), o.rafId = null, o.loopActive = !1, o.idleFrames = 0;
2477
+ lastRenderedPosition: $t.position
2478
+ }), jt = v(() => {
2479
+ const a = kt.current;
2480
+ a.rafId !== null && typeof cancelAnimationFrame == "function" && cancelAnimationFrame(a.rafId), a.rafId = null, a.loopActive = !1, a.idleFrames = 0;
2363
2481
  }, []);
2364
- X(
2482
+ Y(
2365
2483
  () => () => {
2366
- ae();
2484
+ jt();
2367
2485
  },
2368
- [ae]
2486
+ [jt]
2369
2487
  );
2370
- const Me = g(() => {
2371
- }), de = S(() => {
2372
- const o = Ut.current;
2373
- o.rafId = null;
2374
- const c = A.current, d = ee(c, $t.current), y = v.getTotal();
2375
- if (Gt((E) => Math.abs(E - c) < zt ? E : c), Math.abs(o.lastRenderedPosition - c) >= zt ? (Ht.current({ position: d, totalHeight: y }), o.lastRenderedPosition = c, o.idleFrames = 0) : o.idleFrames += 1, o.idleFrames >= 2) {
2376
- ae();
2488
+ const ce = T(() => {
2489
+ }), fe = v(() => {
2490
+ const a = kt.current;
2491
+ a.rafId = null;
2492
+ const u = d.current, p = ne(u, Lt.current), V = S.getTotal();
2493
+ if (Jt((F) => Math.abs(F - u) < Ht ? F : u), Math.abs(a.lastRenderedPosition - u) >= Ht ? (at.current({ position: p, totalHeight: V }), a.lastRenderedPosition = u, a.idleFrames = 0) : a.idleFrames += 1, a.idleFrames >= 2) {
2494
+ jt();
2377
2495
  return;
2378
2496
  }
2379
2497
  if (typeof requestAnimationFrame == "function") {
2380
- o.rafId = requestAnimationFrame((E) => Me.current(E));
2498
+ a.rafId = requestAnimationFrame((F) => ce.current(F));
2381
2499
  return;
2382
2500
  }
2383
- o.loopActive = !1;
2384
- }, [v, ae]);
2385
- Me.current = de;
2386
- const xe = S(() => {
2387
- const o = Ut.current;
2388
- if (o.idleFrames = 0, !o.loopActive) {
2389
- if (o.loopActive = !0, typeof requestAnimationFrame == "function") {
2390
- o.rafId = requestAnimationFrame(de);
2501
+ a.loopActive = !1;
2502
+ }, [S, jt]);
2503
+ ce.current = fe;
2504
+ const Ie = v(() => {
2505
+ const a = kt.current;
2506
+ if (a.idleFrames = 0, !a.loopActive) {
2507
+ if (a.loopActive = !0, typeof requestAnimationFrame == "function") {
2508
+ a.rafId = requestAnimationFrame(fe);
2391
2509
  return;
2392
2510
  }
2393
- o.loopActive = !1;
2511
+ a.loopActive = !1;
2394
2512
  }
2395
- }, [de]), it = S(
2396
- (o, c) => {
2397
- const d = c?.immediate ?? !1, y = ee(o, R.top);
2398
- if (A.current = o, d) {
2399
- Ut.current.lastRenderedPosition = o, Ut.current.idleFrames = 0, Gt(o), mt({ position: y, totalHeight: v.getTotal() });
2513
+ }, [fe]), rt = v(
2514
+ (a, u) => {
2515
+ const p = u?.immediate ?? !1, V = ne(a, w.top);
2516
+ if (d.current = a, p) {
2517
+ kt.current.lastRenderedPosition = a, kt.current.idleFrames = 0, Jt(a), m({ position: V, totalHeight: S.getTotal() });
2400
2518
  return;
2401
2519
  }
2402
- xe();
2520
+ Ie();
2403
2521
  },
2404
- [xe, v, R.top, mt]
2405
- ), Yt = S((o) => {
2406
- const c = Y.current;
2407
- if (!c)
2408
- return o;
2409
- const d = c.getScrollPosition();
2410
- ct.current += 1;
2411
- const y = c.scrollTo(o);
2412
- return y === d && (ct.current = Math.max(0, ct.current - 1)), Math.abs(y - o) > 0.5 && (xt.current = !0), y;
2413
- }, []), Kt = g(!1);
2414
- X(() => {
2415
- if (!Kt.current)
2416
- if (Kt.current = !0, typeof p == "number") {
2417
- const o = ge(Math.max(p, 0), R.top), c = Math.abs(o - A.current) > 0.5;
2418
- it(o, { immediate: !0 }), c && Y.current?.scrollTo(o);
2522
+ [Ie, S, w.top, m]
2523
+ ), zt = v((a) => {
2524
+ const u = k.current;
2525
+ if (!u)
2526
+ return a;
2527
+ const p = u.getScrollPosition();
2528
+ ot.current += 1;
2529
+ const V = u.scrollTo(a);
2530
+ return V === p && (ot.current = Math.max(0, ot.current - 1)), Math.abs(V - a) > 0.5 && (Dt.current = !0), V;
2531
+ }, []), Te = T(!1);
2532
+ Y(() => {
2533
+ if (!Te.current)
2534
+ if (Te.current = !0, typeof g == "number") {
2535
+ const a = be(Math.max(g, 0), w.top), u = Math.abs(a - d.current) > 0.5;
2536
+ rt(a, { immediate: !0 }), u && k.current?.scrollTo(a);
2419
2537
  } else
2420
- it(A.current, { immediate: !0 });
2421
- }, [p, R.top, it]), X(() => {
2422
- const o = v.getTotal();
2423
- if (T !== o) {
2424
- O(o);
2538
+ rt(d.current, { immediate: !0 });
2539
+ }, [g, w.top, rt]), Y(() => {
2540
+ const a = S.getTotal();
2541
+ if (lt !== a) {
2542
+ Wt(a);
2425
2543
  return;
2426
2544
  }
2427
- if (xt.current) {
2428
- xt.current = !1;
2429
- const c = Y.current;
2430
- if (c && Math.abs(c.getScrollPosition() - A.current) > 0.5) {
2431
- const d = Yt(A.current);
2432
- xt.current = !1, it(d, { immediate: !0 });
2545
+ if (Dt.current) {
2546
+ Dt.current = !1;
2547
+ const u = k.current;
2548
+ if (u && Math.abs(u.getScrollPosition() - d.current) > 0.5) {
2549
+ const p = zt(d.current);
2550
+ Dt.current = !1, rt(p, { immediate: !0 });
2433
2551
  }
2434
2552
  }
2435
- }, [v, T, i, Yt, it]), X(() => {
2436
- if (ht.current !== null) {
2437
- const { index: o, align: c, offset: d } = ht.current, y = ut(o, i), { cumulative: z, currentValue: E } = v.prefixSum(y, { materializeOption: { materialize: !1 } });
2438
- if (z !== void 0 && E !== void 0) {
2439
- const q = Math.max(z - E, 0);
2440
- let $ = q;
2441
- c === "bottom" ? $ = z - n : c === "center" && ($ = q + E / 2 - n / 2), d && ($ -= d), $ = Math.max(0, $);
2442
- const lt = Math.max(0, T + R.top + R.bottom - n), Z = Math.min(ge($, R.top), lt);
2443
- Math.abs(Z - A.current) > 1 && (N.debug("[VirtualScroll] Drift correction", {
2444
- from: A.current,
2445
- to: Z,
2446
- targetIndex: y
2447
- }), ct.current === 0 && (ct.current += 1), Y.current?.scrollTo(Z), it(Z, { immediate: !0 }));
2553
+ }, [S, lt, n, zt, rt]), Y(() => {
2554
+ if (U.current !== null) {
2555
+ const { index: a, align: u, offset: p } = U.current, V = bt(a, n), { cumulative: A, currentValue: F } = S.prefixSum(V, { materializeOption: { materialize: !1 } });
2556
+ if (A !== void 0 && F !== void 0) {
2557
+ const K = Math.max(A - F, 0);
2558
+ let W = K;
2559
+ u === "bottom" ? W = A - i : u === "center" && (W = K + F / 2 - i / 2), p && (W -= p), W = Math.max(0, W);
2560
+ const vt = Math.max(0, lt + w.top + w.bottom - i), ht = Math.min(be(W, w.top), vt);
2561
+ Math.abs(ht - d.current) > 1 && (C.debug("[VirtualScroll] Drift correction", {
2562
+ from: d.current,
2563
+ to: ht,
2564
+ targetIndex: V
2565
+ }), ot.current === 0 && (ot.current += 1), k.current?.scrollTo(ht), rt(ht, { immediate: !0 }));
2448
2566
  }
2449
2567
  }
2450
- m.current = !1;
2451
- }, [T, v, i, R.top, it, n, R.bottom]), X(() => {
2452
- const o = Mt.current;
2453
- if (o === R.top) return;
2454
- const c = ee(A.current, o), d = ge(c, R.top);
2455
- Mt.current = R.top, A.current = d, Y.current?.scrollTo(d), it(d, { immediate: !0 });
2456
- }, [R.top, it]);
2457
- const Ie = S(
2458
- (o, c) => {
2459
- if (i === 0)
2568
+ qt.current = !1;
2569
+ }, [lt, S, n, w.top, rt, i, w.bottom]), Y(() => {
2570
+ const a = mt.current;
2571
+ if (a === w.top) return;
2572
+ const u = ne(d.current, a), p = be(u, w.top);
2573
+ mt.current = w.top, d.current = p, k.current?.scrollTo(p), rt(p, { immediate: !0 });
2574
+ }, [w.top, rt]);
2575
+ const Se = v(
2576
+ (a, u) => {
2577
+ if (n === 0)
2460
2578
  return;
2461
- const d = ut(o, i), y = v.get(d), z = c - y, E = v.update(d, c);
2462
- E !== void 0 && O(E), N.debug("[VirtualScroll] Updated item size manually", { index: d, size: c, total: E });
2463
- let q = ht.current ? ht.current.index : null;
2464
- if (q === null) {
2465
- const $ = A.current, lt = Xe(J).top, Z = ee($, lt), { index: ot, cumulative: Pt } = v.findIndexAtOrAfter(Z, { materializeOption: { materialize: !1 } });
2466
- q = Pt !== void 0 && Pt === Z ? ot + 1 : ot;
2579
+ const p = bt(a, n), V = S.get(p), A = u - V, F = S.update(p, u);
2580
+ F !== void 0 && Wt(F), C.debug("[VirtualScroll] Updated item size manually", { index: p, size: u, total: F });
2581
+ let K = U.current ? U.current.index : null;
2582
+ if (K === null) {
2583
+ const W = d.current, vt = Ue(z).top, ht = ne(W, vt), { index: gt, cumulative: Ot } = S.findIndexAtOrAfter(ht, { materializeOption: { materialize: !1 } });
2584
+ K = Ot !== void 0 && Ot === ht ? gt + 1 : gt;
2467
2585
  }
2468
- if (q !== -1 && d < q && z !== 0) {
2469
- const $ = A.current, lt = $ + z;
2470
- Yt(lt), it(lt, { immediate: !0 }), N.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)", { from: $, to: lt, causedByIndex: d, delta: z, activeVisibleStartIndex: q });
2586
+ if (K !== -1 && p < K && A !== 0) {
2587
+ const W = d.current, vt = W + A;
2588
+ zt(vt), rt(vt, { immediate: !0 }), C.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)", { from: W, to: vt, causedByIndex: p, delta: A, activeVisibleStartIndex: K });
2471
2589
  }
2472
2590
  },
2473
- [v, i, Yt, it, J]
2474
- ), Bt = S(
2475
- (o, c) => {
2476
- if (!Y.current || i === 0)
2591
+ [S, n, zt, rt, z]
2592
+ ), Kt = v(
2593
+ (a, u) => {
2594
+ if (!k.current || n === 0)
2477
2595
  return;
2478
- const d = ut(o, i), y = ut(d - s * 2, i), z = ut(d + s * 2, i), { cumulative: E, total: q, currentValue: $ } = v.prefixSum(d, { materializeOption: { materialize: !0, ranges: [{ from: y, to: z }] } });
2479
- if (N.debug("[VirtualScroll] Scrolling to index:", d, "ItemBottom:", E, "Total height:", q, "ItemHeight:", $, "safeIndexFrom:", y, "safeIndexTo:", z), !q)
2596
+ const p = bt(a, n), V = bt(p - s * 2, n), A = bt(p + s * 2, n), { cumulative: F, total: K, currentValue: W } = S.prefixSum(p, { materializeOption: { materialize: !0, ranges: [{ from: V, to: A }] } });
2597
+ if (C.debug("[VirtualScroll] Scrolling to index:", p, "ItemBottom:", F, "Total height:", K, "ItemHeight:", W, "safeIndexFrom:", V, "safeIndexTo:", A), !K)
2480
2598
  return;
2481
- const lt = Math.max(E - $, 0);
2482
- let Z = lt;
2483
- c?.align === "bottom" ? Z = E - n : c?.align === "center" && (Z = lt + $ / 2 - n / 2), c?.offset && (Z -= c.offset), Z = Math.max(0, Z);
2484
- const ot = ge(Z, R.top), Pt = Y.current?.getContentSize() ?? q + R.top + R.bottom, Tt = Math.max(0, Pt - n), yt = Math.min(ot, Tt);
2485
- ht.current = {
2486
- index: d,
2487
- align: c?.align,
2488
- offset: c?.offset
2599
+ const vt = Math.max(F - W, 0);
2600
+ let ht = vt;
2601
+ u?.align === "bottom" ? ht = F - i : u?.align === "center" && (ht = vt + W / 2 - i / 2), u?.offset && (ht -= u.offset), ht = Math.max(0, ht);
2602
+ const gt = be(ht, w.top), Ot = k.current?.getContentSize() ?? K + w.top + w.bottom, Vt = Math.max(0, Ot - i), Ft = Math.min(gt, Vt);
2603
+ U.current = {
2604
+ index: p,
2605
+ align: u?.align,
2606
+ offset: u?.offset
2489
2607
  };
2490
- const le = Y.current?.getScrollPosition() ?? -1, ie = Math.abs(le - yt) > 0.5;
2491
- Xt.current = !1, ct.current = 0, ie && (Xt.current = !0, ct.current += 1, Y.current?.scrollTo(yt)), O(q), it(yt, { immediate: !0 }), N.debug("[VirtualScroll] Setting scroll position to:", yt, { original: ot, max: Tt });
2608
+ const ve = k.current?.getScrollPosition() ?? -1, De = Math.abs(ve - Ft) > 0.5;
2609
+ ut.current = !1, ot.current = 0, De && (ut.current = !0, ot.current += 1, k.current?.scrollTo(Ft)), Wt(K), rt(Ft, { immediate: !0 }), C.debug("[VirtualScroll] Setting scroll position to:", Ft, { original: gt, max: Vt });
2492
2610
  },
2493
- [v, s, i, R.top, R.bottom, n, it]
2494
- ), Pe = S(
2495
- (o) => {
2496
- if (!Y.current || i === 0)
2611
+ [S, s, n, w.top, w.bottom, i, rt]
2612
+ ), ye = v(
2613
+ (a) => {
2614
+ if (!k.current || n === 0)
2497
2615
  return;
2498
- const c = v.getTotal(), d = pt(Math.floor(o), 0, c), { index: y, cumulative: z, currentValue: E } = v.findIndexAtOrAfter(d, { materializeOption: { materialize: !1 } }), $ = (z ?? 0) - (E ?? 0) - d;
2499
- Bt(y, { offset: $ });
2616
+ const u = S.getTotal(), p = xt(Math.floor(a), 0, u), { index: V, cumulative: A, currentValue: F } = S.findIndexAtOrAfter(p, { materializeOption: { materialize: !1 } }), W = (A ?? 0) - (F ?? 0) - p;
2617
+ Kt(V, { offset: W });
2500
2618
  },
2501
- [v, i, Bt]
2502
- ), ye = S(
2503
- (o) => {
2504
- const c = ee(A.current, R.top), d = typeof o == "function" ? o(c) : o;
2505
- Pe(d);
2506
- const y = Y.current?.getScrollPosition(), z = typeof y == "number" ? y : A.current;
2507
- return it(z), z;
2619
+ [S, n, Kt]
2620
+ ), me = v(
2621
+ (a) => {
2622
+ const u = ne(d.current, w.top), p = typeof a == "function" ? a(u) : a;
2623
+ ye(p);
2624
+ const V = k.current?.getScrollPosition(), A = typeof V == "number" ? V : d.current;
2625
+ return rt(A), A;
2508
2626
  },
2509
- [R.top, Pe, it]
2510
- ), ve = S(
2511
- (o, c) => {
2512
- N.debug("[VirtualScroll] Scroll position changed:", o);
2513
- const d = Xt.current;
2514
- d && (Xt.current = !1);
2515
- const y = ct.current > 0;
2516
- if (y && (ct.current = 0), d || y || m.current || (ht.current = null), it(o), C) {
2517
- if (d || y)
2627
+ [w.top, ye, rt]
2628
+ ), Ae = v(
2629
+ (a, u) => {
2630
+ C.debug("[VirtualScroll] Scroll position changed:", a);
2631
+ const p = ut.current;
2632
+ p && (ut.current = !1);
2633
+ const V = ot.current > 0;
2634
+ if (V && (ot.current = 0), p || V || qt.current || (U.current = null), rt(a), B) {
2635
+ if (p || V)
2518
2636
  return;
2519
- const z = o - c;
2520
- if (N.debug("[VirtualScroll] Scroll diff:", z, "New:", o, "Prev:", c), Math.abs(z) > 1) {
2521
- const E = z > 0 ? "down" : "up";
2522
- Zt(E), Ct(!0), N.debug("[VirtualScroll] Showing scroll buttons. Direction:", E), Et.current && clearTimeout(Et.current), Et.current = setTimeout(() => {
2523
- Ct(!1), N.debug("[VirtualScroll] Hiding scroll buttons");
2637
+ const A = a - u;
2638
+ if (C.debug("[VirtualScroll] Scroll diff:", A, "New:", a, "Prev:", u), Math.abs(A) > 1) {
2639
+ const F = A > 0 ? "down" : "up";
2640
+ Et(F), St(!0), C.debug("[VirtualScroll] Showing scroll buttons. Direction:", F), yt.current && clearTimeout(yt.current), yt.current = setTimeout(() => {
2641
+ St(!1), C.debug("[VirtualScroll] Hiding scroll buttons");
2524
2642
  }, 2e3);
2525
2643
  }
2526
2644
  }
2527
2645
  },
2528
- [it, C]
2529
- ), Jt = Vt(() => ee(_t, R.top), [R.top, _t]), re = Vt(() => {
2530
- const o = v.getTotal(), c = Rr(Jt, n, s, i, r, v, o);
2531
- return N.debug("[VirtualScroll] Calculated rendering range:", () => ({
2532
- ...c,
2533
- scrollPosition: Jt,
2534
- renderingContentSize: o,
2646
+ [rt, B]
2647
+ ), te = At(() => ne(Bt, w.top), [w.top, Bt]), ie = At(() => {
2648
+ const a = S.getTotal(), u = Nr(te, i, s, n, r, S, a);
2649
+ return C.debug("[VirtualScroll] Calculated rendering range:", () => ({
2650
+ ...u,
2651
+ scrollPosition: te,
2652
+ renderingContentSize: a,
2535
2653
  overscanCount: s,
2536
- viewportSize: n
2537
- })), c;
2538
- }, [Jt, n, s, i, r, v]), { renderingStartIndex: Qt, renderingEndIndex: qt, visibleStartIndex: ne, visibleEndIndex: fe } = re, te = S(
2539
- (o, c) => {
2540
- if (!L || i === 0)
2654
+ viewportSize: i
2655
+ })), u;
2656
+ }, [te, i, s, n, r, S]), { renderingStartIndex: Ut, renderingEndIndex: ee, visibleStartIndex: se, visibleEndIndex: pe } = ie, re = v(
2657
+ (a, u) => {
2658
+ if (!h || n === 0)
2541
2659
  return;
2542
- const d = ut(o, i);
2543
- if (!(c?.ensureVisible ?? !0)) {
2544
- const Tt = Rt.current.get(d);
2545
- Tt && (W.current = null, at.current = d, It(Tt));
2660
+ const p = bt(a, n);
2661
+ if (!(u?.ensureVisible ?? !0)) {
2662
+ const Vt = nt.current.get(p);
2663
+ Vt && (J.current = null, Pt.current = p, dt(Vt));
2546
2664
  return;
2547
2665
  }
2548
- const z = v.prefixSum(d, { materializeOption: { materialize: !1 } }), E = z.currentValue, q = Math.max(z.cumulative - E, 0), $ = q + E, lt = ee(A.current, R.top), Z = lt + n;
2549
- if (q < lt || $ > Z) {
2550
- Bt(d);
2551
- const Tt = Rt.current.get(d);
2552
- Tt ? (W.current = null, at.current = d, It(Tt)) : W.current = d;
2666
+ const A = S.prefixSum(p, { materializeOption: { materialize: !1 } }), F = A.currentValue, K = Math.max(A.cumulative - F, 0), W = K + F, vt = ne(d.current, w.top), ht = vt + i;
2667
+ if (K < vt || W > ht) {
2668
+ Kt(p);
2669
+ const Vt = nt.current.get(p);
2670
+ Vt ? (J.current = null, Pt.current = p, dt(Vt)) : J.current = p;
2553
2671
  return;
2554
2672
  }
2555
- const Pt = Rt.current.get(d);
2556
- if (Pt) {
2557
- W.current = null, at.current = d, It(Pt);
2673
+ const Ot = nt.current.get(p);
2674
+ if (Ot) {
2675
+ J.current = null, Pt.current = p, dt(Ot);
2558
2676
  return;
2559
2677
  }
2560
- W.current = d;
2678
+ J.current = p;
2561
2679
  },
2562
- [L, i, v, R.top, Bt, It, n]
2563
- ), we = S(
2564
- (o, c) => {
2565
- if (!L || o.defaultPrevented || o.altKey || o.metaKey || o.ctrlKey)
2680
+ [h, n, S, w.top, Kt, dt, i]
2681
+ ), we = v(
2682
+ (a, u) => {
2683
+ if (!h || a.defaultPrevented || a.altKey || a.metaKey || a.ctrlKey)
2566
2684
  return;
2567
- const d = o.target;
2568
- if (d) {
2569
- const y = d.tagName;
2570
- if (y === "INPUT" || y === "TEXTAREA" || y === "SELECT" || d.isContentEditable)
2685
+ const p = a.target;
2686
+ if (p) {
2687
+ const V = p.tagName;
2688
+ if (V === "INPUT" || V === "TEXTAREA" || V === "SELECT" || p.isContentEditable)
2571
2689
  return;
2572
2690
  }
2573
- if (o.key === "ArrowDown") {
2574
- c < i - 1 && (o.preventDefault(), te(c + 1));
2691
+ if (a.key === "ArrowDown") {
2692
+ u < n - 1 && (a.preventDefault(), re(u + 1));
2575
2693
  return;
2576
2694
  }
2577
- if (o.key === "ArrowUp") {
2578
- c > 0 && (o.preventDefault(), te(c - 1));
2695
+ if (a.key === "ArrowUp") {
2696
+ u > 0 && (a.preventDefault(), re(u - 1));
2579
2697
  return;
2580
2698
  }
2581
- if (o.key === "PageDown") {
2582
- if (c < i - 1) {
2583
- o.preventDefault();
2584
- const { visibleStartIndex: y, visibleEndIndex: z } = j.current, E = Math.max(z - y + 1, 1), q = Math.max(E, 1), $ = ut(Math.min(c + q, i - 1), i);
2585
- te($);
2699
+ if (a.key === "PageDown") {
2700
+ if (u < n - 1) {
2701
+ a.preventDefault();
2702
+ const { visibleStartIndex: V, visibleEndIndex: A } = Rt.current, F = Math.max(A - V + 1, 1), K = Math.max(F, 1), W = bt(Math.min(u + K, n - 1), n);
2703
+ re(W);
2586
2704
  }
2587
2705
  return;
2588
2706
  }
2589
- if (o.key === "PageUp" && c > 0) {
2590
- o.preventDefault();
2591
- const { visibleStartIndex: y, visibleEndIndex: z } = j.current, E = Math.max(z - y + 1, 1), q = Math.max(E, 1), $ = ut(c - q, i);
2592
- te($);
2707
+ if (a.key === "PageUp" && u > 0) {
2708
+ a.preventDefault();
2709
+ const { visibleStartIndex: V, visibleEndIndex: A } = Rt.current, F = Math.max(A - V + 1, 1), K = Math.max(F, 1), W = bt(u - K, n);
2710
+ re(W);
2593
2711
  }
2594
2712
  },
2595
- [L, i, te]
2596
- ), Re = S(
2597
- (o) => {
2598
- if (!L)
2713
+ [h, n, re]
2714
+ ), Re = v(
2715
+ (a) => {
2716
+ if (!h)
2599
2717
  return;
2600
- const c = ut(o, i);
2601
- W.current = null, at.current = c, G?.(c);
2718
+ const u = bt(a, n);
2719
+ J.current = null, Pt.current = u, j?.(u);
2602
2720
  },
2603
- [L, i, G]
2721
+ [h, n, j]
2604
2722
  );
2605
- X(() => {
2606
- const o = Y.current?.getScrollPosition() ?? 0, c = A.current, d = ee(c, R.top);
2607
- N.debug("[VirtualScroll] Range change effect triggered", () => ({
2608
- renderingStartIndex: Qt,
2609
- renderingEndIndex: qt,
2610
- visibleStartIndex: ne,
2611
- visibleEndIndex: fe,
2612
- scrollPositionState: _t,
2613
- paneScrollPosition: c,
2614
- logicalScrollPosition: d,
2615
- contentSize: T,
2616
- scrollPaneScrollPosition: o
2723
+ Y(() => {
2724
+ const a = k.current?.getScrollPosition() ?? 0, u = d.current, p = ne(u, w.top);
2725
+ C.debug("[VirtualScroll] Range change effect triggered", () => ({
2726
+ renderingStartIndex: Ut,
2727
+ renderingEndIndex: ee,
2728
+ visibleStartIndex: se,
2729
+ visibleEndIndex: pe,
2730
+ scrollPositionState: Bt,
2731
+ paneScrollPosition: u,
2732
+ logicalScrollPosition: p,
2733
+ contentSize: lt,
2734
+ scrollPaneScrollPosition: a
2617
2735
  })), Nt({
2618
- renderingStartIndex: Qt,
2619
- renderingEndIndex: qt,
2620
- visibleStartIndex: ne,
2621
- visibleEndIndex: fe,
2622
- scrollPosition: d,
2623
- totalHeight: T
2736
+ renderingStartIndex: Ut,
2737
+ renderingEndIndex: ee,
2738
+ visibleStartIndex: se,
2739
+ visibleEndIndex: pe,
2740
+ scrollPosition: p,
2741
+ totalHeight: lt
2624
2742
  });
2625
- }, [T, qt, Qt, R.top, Nt, _t, fe, ne]);
2626
- const Ve = S(() => C ? /* @__PURE__ */ Q("div", { className: "aqvs-scroll-to-edge-overlay", "data-visible": Ot && ft !== null, children: ft === "up" ? /* @__PURE__ */ Q("div", { className: "aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top", children: /* @__PURE__ */ Q(
2743
+ }, [lt, ee, Ut, w.top, Nt, Bt, pe, se]);
2744
+ const Ce = v(() => B ? /* @__PURE__ */ it("div", { className: "aqvs-scroll-to-edge-overlay", "data-visible": st && Mt !== null, children: Mt === "up" ? /* @__PURE__ */ it("div", { className: "aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top", children: /* @__PURE__ */ it(
2627
2745
  "button",
2628
2746
  {
2629
2747
  type: "button",
2630
2748
  className: "aqvs-scroll-to-edge-button",
2631
- onClick: (d) => {
2632
- d.stopPropagation(), Xt.current = !0, Bt(0), Ct(!1);
2749
+ onClick: (p) => {
2750
+ p.stopPropagation(), ut.current = !0, Kt(0), St(!1);
2633
2751
  },
2634
2752
  children: "Top"
2635
2753
  }
2636
- ) }) : /* @__PURE__ */ Q("div", { className: "aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom", children: /* @__PURE__ */ Q(
2754
+ ) }) : /* @__PURE__ */ it("div", { className: "aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-bottom", children: /* @__PURE__ */ it(
2637
2755
  "button",
2638
2756
  {
2639
2757
  type: "button",
2640
2758
  className: "aqvs-scroll-to-edge-button",
2641
- onClick: (d) => {
2642
- d.stopPropagation(), Xt.current = !0, Bt(i - 1), Ct(!1);
2759
+ onClick: (p) => {
2760
+ p.stopPropagation(), ut.current = !0, Kt(n - 1), St(!1);
2643
2761
  },
2644
2762
  children: "Bottom"
2645
2763
  }
2646
- ) }) }) : null, [C, Ot, ft, Bt, i]), me = g(0), { visibleItems: pe, renderAnchor: a } = Vt(() => {
2647
- if (i === 0)
2764
+ ) }) }) : null, [B, st, Mt, Kt, n]), he = T(0), { visibleItems: o, renderAnchor: b } = At(() => {
2765
+ if (n === 0)
2648
2766
  return {
2649
- visibleItems: /* @__PURE__ */ Q("div", { className: "aqvs-no-items-container", children: /* @__PURE__ */ Q("div", { className: "aqvs-no-items-text", children: "No items" }) }),
2767
+ visibleItems: /* @__PURE__ */ it("div", { className: "aqvs-no-items-container", children: /* @__PURE__ */ it("div", { className: "aqvs-no-items-text", children: "No items" }) }),
2650
2768
  renderAnchor: 0
2651
2769
  };
2652
- const o = ut(Qt, i), c = ut(qt, i), { cumulative: d, currentValue: y } = v.prefixSum(o, { materializeOption: { materialize: !1 } }), z = d - y;
2653
- Number.isFinite(z) && Math.abs(z - me.current) > yr && (me.current = z);
2654
- const E = me.current, q = [], $ = [];
2655
- let lt = 0, Z = z;
2656
- for (let ot = o; ot <= c; ot++) {
2657
- if ($.length >= $e) {
2658
- N.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.", { cap: $e, safeRenderingStartIndex: o, safeRenderingEndIndex: c });
2770
+ const a = bt(Ut, n), u = bt(ee, n), { cumulative: p, currentValue: V } = S.prefixSum(a, { materializeOption: { materialize: !1 } }), A = p - V;
2771
+ Number.isFinite(A) && Math.abs(A - he.current) > Cr && (he.current = A);
2772
+ const F = he.current, K = [], W = [];
2773
+ let vt = 0, ht = A;
2774
+ for (let gt = a; gt <= u; gt++) {
2775
+ if (W.length >= Ke) {
2776
+ C.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.", { cap: Ke, safeRenderingStartIndex: a, safeRenderingEndIndex: u });
2659
2777
  break;
2660
2778
  }
2661
- const Pt = r(ot), Tt = v.get(ot), yt = Pt - Tt;
2662
- yt !== 0 && q.push({ index: ot, value: Pt });
2663
- const le = Z + lt, ie = e ? e(ot) : ot;
2664
- $.push(
2665
- /* @__PURE__ */ Q(
2666
- Cr,
2779
+ const Ot = r(gt), Vt = S.get(gt), Ft = Ot - Vt;
2780
+ Ft !== 0 && K.push({ index: gt, value: Ot });
2781
+ const ve = ht + vt, De = e ? e(gt) : gt;
2782
+ W.push(
2783
+ /* @__PURE__ */ it(
2784
+ Vr,
2667
2785
  {
2668
- index: ot,
2669
- top: le - E,
2670
- height: Pt,
2671
- item: t(ot),
2672
- clipItemHeight: dt,
2673
- enableKeyboardNavigation: L,
2786
+ index: gt,
2787
+ top: ve - F,
2788
+ height: Ot,
2789
+ item: t(gt),
2790
+ clipItemHeight: wt,
2791
+ enableKeyboardNavigation: h,
2674
2792
  onKeyDown: we,
2675
2793
  onFocus: Re,
2676
- registerItemRef: Dt,
2794
+ registerItemRef: _t,
2677
2795
  children: I
2678
2796
  },
2679
- ie
2797
+ De
2680
2798
  )
2681
- ), lt += yt, Z += Tt;
2799
+ ), vt += Ft, ht += Vt;
2682
2800
  }
2683
- return q.length > 0 && Promise.resolve().then(() => {
2684
- if (St.current)
2801
+ return K.length > 0 && Promise.resolve().then(() => {
2802
+ if (Ct.current)
2685
2803
  return;
2686
- let ot = 0;
2687
- for (const yt of q)
2688
- if (yt.index < ne) {
2689
- const le = v.get(yt.index);
2690
- ot += yt.value - le;
2804
+ let gt = 0;
2805
+ for (const Ft of K)
2806
+ if (Ft.index < se) {
2807
+ const ve = S.get(Ft.index);
2808
+ gt += Ft.value - ve;
2691
2809
  }
2692
- const Pt = v.updates(q);
2693
- if (St.current || typeof Pt != "number")
2810
+ const Ot = S.updates(K);
2811
+ if (Ct.current || typeof Ot != "number")
2694
2812
  return;
2695
- O(Pt), N.debug("[VirtualScroll] Updated heights for items", q, "New total height:", Pt);
2696
- const Tt = Y.current?.getScrollPosition() ?? A.current;
2697
- if (ot !== 0) {
2698
- const yt = Tt + ot;
2699
- Yt(yt), it(yt, { immediate: !0 }), N.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)", { from: Tt, to: yt, shiftAmount: ot });
2700
- } else Tt !== A.current && it(Tt);
2701
- }), { visibleItems: $, renderAnchor: E };
2813
+ Wt(Ot), C.debug("[VirtualScroll] Updated heights for items", K, "New total height:", Ot);
2814
+ const Vt = k.current?.getScrollPosition() ?? d.current;
2815
+ if (gt !== 0) {
2816
+ const Ft = Vt + gt;
2817
+ zt(Ft), rt(Ft, { immediate: !0 }), C.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)", { from: Vt, to: Ft, shiftAmount: gt });
2818
+ } else Vt !== d.current && rt(Vt);
2819
+ }), { visibleItems: W, renderAnchor: F };
2702
2820
  }, [
2703
2821
  I,
2704
- dt,
2705
- T,
2706
- L,
2707
- i,
2708
- v,
2822
+ wt,
2823
+ lt,
2824
+ h,
2825
+ n,
2826
+ S,
2709
2827
  t,
2710
2828
  e,
2711
2829
  r,
2712
2830
  Re,
2713
2831
  we,
2714
- Yt,
2715
- Dt,
2716
- qt,
2717
- Qt,
2718
- it,
2719
- ne
2720
- ]), h = S(
2721
- (o) => {
2722
- const c = (D ?? 0) > 0, d = Math.abs(o - _t), y = c && d > 0.5 ? _t : o, z = ee(y, R.top);
2723
- if (N.debug("[VirtualScroll] Rendering visible items", () => ({
2724
- currentScrollPosition: o,
2725
- effectiveScrollPosition: z,
2726
- renderingStartIndex: Qt,
2727
- renderingEndIndex: qt,
2728
- itemCount: i,
2729
- viewportSize: n,
2730
- callbackThrottleMs: D,
2731
- diff: d,
2732
- rawEffectiveScrollPosition: y
2733
- })), i === 0)
2734
- return pe;
2735
- const E = R.top + a - y, q = R.bottom > 0 ? /* @__PURE__ */ Q(
2832
+ zt,
2833
+ _t,
2834
+ ee,
2835
+ Ut,
2836
+ rt,
2837
+ se
2838
+ ]), R = v(
2839
+ (a) => {
2840
+ const u = (_ ?? 0) > 0, p = Math.abs(a - Bt), V = u && p > 0.5 ? Bt : a, A = ne(V, w.top);
2841
+ if (C.debug("[VirtualScroll] Rendering visible items", () => ({
2842
+ currentScrollPosition: a,
2843
+ effectiveScrollPosition: A,
2844
+ renderingStartIndex: Ut,
2845
+ renderingEndIndex: ee,
2846
+ itemCount: n,
2847
+ viewportSize: i,
2848
+ callbackThrottleMs: _,
2849
+ diff: p,
2850
+ rawEffectiveScrollPosition: V
2851
+ })), n === 0)
2852
+ return o;
2853
+ const F = w.top + b - V, K = w.bottom > 0 ? /* @__PURE__ */ it(
2736
2854
  "div",
2737
2855
  {
2738
2856
  className: "aqvs-bottom-inset",
2739
2857
  style: {
2740
2858
  // ラッパー座標での bottom インセット位置 = コンテンツ総高さ (最終行の下端) - アンカー。
2741
- top: v.getTotal() - a,
2742
- height: R.bottom
2859
+ top: S.getTotal() - b,
2860
+ height: w.bottom
2743
2861
  }
2744
2862
  },
2745
2863
  "virtualscroll-bottom-inset"
2746
2864
  ) : null;
2747
- return N.debug("[VirtualScroll] Rendering items", () => ({
2748
- containerTop: E,
2749
- logicalScrollPosition: Jt,
2750
- resolvedInsets: R,
2751
- effectiveScrollPosition: z
2752
- })), /* @__PURE__ */ ue("div", { className: "aqvs-items-wrapper", style: { top: 0, transform: `translateY(${E}px)`, willChange: "transform" }, children: [
2753
- pe,
2754
- q
2865
+ return C.debug("[VirtualScroll] Rendering items", () => ({
2866
+ containerTop: F,
2867
+ logicalScrollPosition: te,
2868
+ resolvedInsets: w,
2869
+ effectiveScrollPosition: A
2870
+ })), /* @__PURE__ */ de("div", { className: "aqvs-items-wrapper", style: { top: 0, transform: `translateY(${F}px)`, willChange: "transform" }, children: [
2871
+ o,
2872
+ K
2755
2873
  ] });
2756
2874
  },
2757
- [D, i, v, Jt, a, qt, Qt, R, _t, n, pe]
2758
- ), P = Vt(
2875
+ [_, n, S, te, b, ee, Ut, w, Bt, i, o]
2876
+ ), L = At(
2759
2877
  () => ({
2760
- renderingStartIndex: re.renderingStartIndex,
2761
- renderingEndIndex: re.renderingEndIndex,
2762
- visibleStartIndex: re.visibleStartIndex,
2763
- visibleEndIndex: re.visibleEndIndex,
2764
- scrollPosition: Jt,
2765
- totalHeight: v.getTotal()
2878
+ renderingStartIndex: ie.renderingStartIndex,
2879
+ renderingEndIndex: ie.renderingEndIndex,
2880
+ visibleStartIndex: ie.visibleStartIndex,
2881
+ visibleEndIndex: ie.visibleEndIndex,
2882
+ scrollPosition: te,
2883
+ totalHeight: S.getTotal()
2766
2884
  // contentSize (State) ではなく最新値を反映
2767
2885
  }),
2768
2886
  // contentSize を依存に含めることで、updateItemSize/updates 等で木の総高さが変わった際に
2769
2887
  // (fenwickTree は安定参照のため getTotal() の変化だけでは再計算されない) 総高さを再取得する。
2770
- [re, Jt, v, T]
2888
+ [ie, te, S, lt]
2771
2889
  );
2772
- X(() => {
2773
- j.current = P;
2774
- }, [P]), ze(
2775
- wt,
2890
+ Y(() => {
2891
+ Rt.current = L;
2892
+ }, [L]), Be(
2893
+ pt,
2776
2894
  () => ({
2777
- getScrollPosition: () => Y.current?.getScrollPosition() ?? -1,
2778
- getContentSize: () => Y.current?.getContentSize() ?? -1,
2779
- getViewportSize: () => Y.current?.getViewportSize() ?? -1,
2780
- scrollTo: ye,
2781
- scrollToIndex: Bt,
2782
- getFenwickTreeTotalHeight: () => v.getTotal(),
2783
- getFenwickSize: () => v.getSize(),
2784
- focusItemAtIndex: te,
2785
- getRange: () => j.current,
2786
- updateItemSize: Ie
2895
+ getScrollPosition: () => k.current?.getScrollPosition() ?? -1,
2896
+ getContentSize: () => k.current?.getContentSize() ?? -1,
2897
+ getViewportSize: () => k.current?.getViewportSize() ?? -1,
2898
+ scrollTo: me,
2899
+ scrollToIndex: Kt,
2900
+ getFenwickTreeTotalHeight: () => S.getTotal(),
2901
+ getFenwickSize: () => S.getSize(),
2902
+ focusItemAtIndex: re,
2903
+ getRange: () => Rt.current,
2904
+ updateItemSize: Se
2787
2905
  }),
2788
- [ye, Bt, v, te, Ie]
2906
+ [me, Kt, S, re, Se]
2789
2907
  );
2790
- const F = v.getTotal() + R.top + R.bottom;
2791
- return /* @__PURE__ */ Q(
2792
- xr,
2908
+ const X = S.getTotal() + w.top + w.bottom;
2909
+ return /* @__PURE__ */ it(
2910
+ Sr,
2793
2911
  {
2794
- ref: Y,
2795
- contentSize: F,
2796
- viewportSize: n,
2912
+ ref: k,
2913
+ contentSize: X,
2914
+ viewportSize: i,
2797
2915
  className: l,
2798
- testId: u,
2799
- onScroll: ve,
2800
- background: M,
2801
- tapScrollCircleOptions: H,
2802
- inertiaOptions: K,
2803
- itemCount: i,
2804
- scrollBarWidth: At,
2805
- enableThumbDrag: k,
2806
- enableTrackClick: B,
2807
- enableArrowButtons: w,
2808
- enablePointerDrag: tt,
2809
- renderThumbOverlay: U,
2810
- wheelSpeedMultiplier: b,
2811
- onWheelHorizontal: st,
2812
- contentInsets: R,
2813
- visibleStartIndex: ne,
2814
- visibleEndIndex: fe,
2815
- renderOverlay: Ve,
2816
- initialScrollPosition: kt.position,
2817
- children: h
2916
+ testId: c,
2917
+ onScroll: Ae,
2918
+ background: P,
2919
+ tapScrollCircleOptions: q,
2920
+ inertiaOptions: Tt,
2921
+ itemCount: n,
2922
+ scrollBarWidth: It,
2923
+ enableThumbDrag: D,
2924
+ enableTrackClick: O,
2925
+ enableArrowButtons: M,
2926
+ enablePointerDrag: et,
2927
+ pointerDragInputs: G,
2928
+ renderThumbOverlay: N,
2929
+ wheelSpeedMultiplier: $,
2930
+ onWheelHorizontal: tt,
2931
+ contentInsets: w,
2932
+ visibleStartIndex: se,
2933
+ visibleEndIndex: pe,
2934
+ renderOverlay: Ce,
2935
+ initialScrollPosition: $t.position,
2936
+ children: R
2818
2937
  }
2819
2938
  );
2820
- }, _r = Fe(Er);
2939
+ }, Fr = Ye(Ar);
2821
2940
  export {
2822
- oe as FenwickMapTree,
2823
- br as ScrollBar,
2824
- xr as ScrollPane,
2825
- _r as VirtualScroll,
2826
- pt as minmax,
2827
- Dr as tapScrollCircleSampleVisual,
2828
- Tr as useFenwickMapTree,
2829
- Lr as useHeightCache,
2830
- Mr as useLruCache
2941
+ ae as FenwickMapTree,
2942
+ xr as ScrollBar,
2943
+ Sr as ScrollPane,
2944
+ Ze as TAP_SCROLL_SPEED_DEFAULTS,
2945
+ Fr as VirtualScroll,
2946
+ br as computeAutoTapScrollMaxSpeedMultiplier,
2947
+ gr as computeTapScrollSpeed,
2948
+ xt as minmax,
2949
+ kr as tapScrollCircleSampleVisual,
2950
+ Mr as useFenwickMapTree,
2951
+ Or as useHeightCache,
2952
+ wr as useLruCache
2831
2953
  };