@aiquants/virtualscroll 1.19.3 → 1.22.0

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