@aiquants/virtualscroll 1.20.0 → 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 +5 -3
  3. package/dist/ScrollBar.d.cts +123 -0
  4. package/dist/ScrollBar.d.ts +123 -0
  5. package/dist/ScrollBar.d.ts.map +1 -1
  6. package/dist/ScrollPane.d.cts +16 -0
  7. package/dist/ScrollPane.d.ts +16 -0
  8. package/dist/ScrollPane.d.ts.map +1 -1
  9. package/dist/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 +1468 -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 +232 -19
  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 -496
  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 ze, useMemo as Vt, 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, dt = !1) => {
193
- const { x: et, y: Y } = _.current, j = b - et, ht = K - Y, St = Math.abs(ht), R = St < Ae ? 0 : ht < 0 ? -1 : 1, Ft = D.current;
194
- let Lt = R;
195
- const v = Ae + rr;
196
- R === 0 ? Ft !== 0 && St < v ? Lt = Ft : (Lt = 0, dt || (D.current = 0)) : R !== Ft && Ft !== 0 && St < v ? Lt = Ft : D.current = R, J({
197
- active: dt || St >= Ae,
198
- offsetX: j,
199
- offsetY: ht,
200
- distance: St,
201
- direction: Lt,
190
+ [n]
191
+ ), j = 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: dt, top: et, width: Y, height: j } = K.getBoundingClientRect();
224
- _.current = { x: dt + Y / 2, y: et + j / 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
- ), At = S(
242
- (b) => {
243
- if (I.current !== b.pointerId) {
244
- M.current !== null && M.current.pointerId === b.pointerId && (M.current = null);
240
+ [j]
241
+ ), 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 dt = p.current;
252
- let et = !0;
253
- if (dt !== null && typeof dt.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
- dt.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
- ), k = 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
- ze(
274
- u,
273
+ Be(
274
+ c,
275
275
  () => ({
276
276
  reset: () => {
277
- nt(!0);
277
+ Q(!0);
278
278
  },
279
- getElement: () => p.current
279
+ getElement: () => 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: At,
306
- onPointerCancel: At,
307
- onLostPointerCapture: k,
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 pt = (i, t, e) => Math.max(t, Math.min(e, i)), Oe = "virtualscroll:tap-scroll-cancel", Be = 20, ir = 250, or = 60, sr = 20, ar = 20, lr = 240, qe = { active: !1, offsetX: 0, offsetY: 0, distance: 0, direction: 0, pointerId: null }, De = 2.2, cr = 8, ur = 120, dr = 1 / 10, Wt = {
314
+ Ge.displayName = "TapScrollCircle";
315
+ const 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 pt = (i, t, e) => Math.max(t, Math.min(e, i)), Oe = "virtualscroll:tap-scr
343
348
  arrowIcons: ["▲", "▼"],
344
349
  directionClass: "aqvs-scrollbar-vertical",
345
350
  orientation: "vertical"
346
- }, mr = (i, t) => {
347
- const e = i?.maxSpeedMultiplier, r = typeof e == "number" ? e : gr(t);
351
+ }, fr = (n, t) => {
352
+ const e = n?.maxSpeedMultiplier, r = typeof e == "number" ? e : br(t);
348
353
  return {
349
- enabled: i?.enabled ?? Wt.enabled,
350
- size: i?.size ?? Wt.size,
351
- offsetX: i?.offsetX ?? Wt.offsetX,
352
- offsetY: i?.offsetY ?? Wt.offsetY,
353
- className: i?.className ?? Wt.className,
354
- maxVisualDistance: i?.maxVisualDistance ?? Wt.maxVisualDistance,
354
+ enabled: n?.enabled ?? Gt.enabled,
355
+ size: n?.size ?? Gt.size,
356
+ offsetX: n?.offsetX ?? Gt.offsetX,
357
+ offsetY: n?.offsetY ?? Gt.offsetY,
358
+ className: n?.className ?? Gt.className,
359
+ maxVisualDistance: n?.maxVisualDistance ?? Gt.maxVisualDistance,
355
360
  maxSpeedMultiplier: r,
356
- minSpeedMultiplier: Math.max(i?.minSpeedMultiplier ?? Wt.minSpeedMultiplier, 0),
357
- opacity: pt(i?.opacity ?? Wt.opacity, 0, 1),
358
- renderVisual: i?.renderVisual ?? Wt.renderVisual,
359
- maxSpeedCurve: i?.maxSpeedCurve ?? Wt.maxSpeedCurve
361
+ minSpeedMultiplier: Math.max(n?.minSpeedMultiplier ?? Gt.minSpeedMultiplier, 0),
362
+ opacity: 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 }) => Vt(() => e ? i ? "dragging" : t ? "hover" : "idle" : "disabled", [e, i, t]), hr = ({ canUseArrowButtons: i, enableArrowButtons: t, resetTapScroll: e, scrollByStep: r }) => {
362
- const n = g(null), s = g(null), l = g(null), u = S(() => {
363
- n.current !== null && (window.clearInterval(n.current), n.current = null), s.current !== null && (window.clearTimeout(s.current), s.current = null), l.current !== null && (window.removeEventListener("pointerup", l.current), window.removeEventListener("pointercancel", l.current), window.removeEventListener("blur", l.current), l.current = null);
364
- }, []), f = S(() => {
365
- u();
366
- }, [u]), x = S(
367
- (M) => (_) => {
368
- if (!i)
366
+ }, mr = ({ isDragging: n, isThumbHovered: t, enableThumbDrag: e }) => At(() => e ? n ? "dragging" : t ? "hover" : "idle" : "disabled", [e, n, t]), pr = ({ canUseArrowButtons: n, enableArrowButtons: t, resetTapScroll: e, scrollByStep: r }) => {
367
+ const i = T(null), s = T(null), l = T(null), c = 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 pt(r, De, ur);
395
- }, br = ({
396
- contentSize: i,
390
+ return Y(() => {
391
+ n || c();
392
+ }, [n, c]), Y(() => () => {
393
+ c();
394
+ }, [c]), { handleArrowPointerDown: x, handleArrowPointerUp: 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, At] = jt(!1), k = 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), dt = g(0), et = Vt(() => mr(M, _), [_, M]), Y = Vt(() => fr(u), [u]), {
421
- enabled: j,
422
- size: ht,
423
- offsetX: St,
424
- offsetY: R,
425
- className: Ft,
426
- maxVisualDistance: Lt,
427
- maxSpeedMultiplier: v,
428
- minSpeedMultiplier: kt,
429
- opacity: _t,
430
- renderVisual: Gt,
431
- maxSpeedCurve: T
432
- } = et, O = g({
439
+ }), 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: kt,
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: gt, selectDelta: bt, getPointerCoordinate: Rt, arrowLabels: W, arrowIcons: at, directionClass: ft, orientation: Zt } = Y, Ot = Math.max(Lt, 1), Ct = t / i, Et = Math.max(t - f * 2, 0), Xt = Ct * Et, ct = Math.min(Math.max(Be, Xt || 0), Et || Be), xt = i - t, m = Math.max(Et - ct, 0), V = xt <= 0 || m <= 0 ? 0 : pt(e / xt * m, 0, m), It = V + ct / 2, vt = i > t || G, mt = vt && l;
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: kt,
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 }), Nt = S((a, h) => {
467
- const P = O.current, F = h ?? C.current;
468
- if (U.current) {
469
- const y = U.current(a, F);
470
- if (typeof y == "number" && Number.isFinite(y))
471
- return C.current = y, y;
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 ? pt(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 = Nt(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 = Nt((E) => pt(E + a, 0, h.maxScrollPosition), P), c = o - P, d = a < 0 && P + a <= 0, y = a > 0 && P + a >= h.maxScrollPosition, z = a < 0 && (o <= 0 || d && c === 0) || a > 0 && (o >= h.maxScrollPosition || y && c === 0);
485
- return { nextPosition: o, actualDelta: c, reachedBoundary: z };
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
- [Nt]
488
- ), Ht = S(
489
- (a, h) => {
490
- a.current += h;
491
- const P = Math.max(O.current.maxScrollPosition, 0);
492
- P > 0 && (a.current = pt(a.current, -P, P));
493
- const F = $t(a.current);
494
- return a.current -= F.actualDelta, F.reachedBoundary && (a.current = 0), F;
506
+ [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, dt.current = 0;
499
- }, []), zt = S(() => {
500
- H.current = { ...qe }, At(!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, z = typeof P.tapScrollCircleOptions?.maxSpeedMultiplier == "number", E = Math.max(P.viewportSize * P.tapCircleMinSpeedMultiplier, 40), q = z ? E : 1200;
518
- let lt = Math.max(P.viewportSize * P.tapCircleMaxSpeedMultiplier, q);
519
- const Z = P.tapCircleMaxSpeedCurve;
520
- if (Z) {
521
- const ie = Math.max(Z.exponentialSteepness, 0), je = Math.max(Z.exponentialScale ?? P.tapCircleMaxSpeedMultiplier, 0), Ge = ie === 0 ? d : Math.expm1(ie * d), ke = ie === 0 ? 1 : Math.expm1(ie) || 1, Ze = ke === 0 ? d : Math.min(Math.max(Ge / ke, 0), 1), Je = P.viewportSize * je * Ze;
522
- lt = Math.min(lt, Math.max(Je, E));
523
- }
524
- const ot = Math.max(lt, E), Pt = Math.max(Z?.easedOffset ?? 0, 0), Tt = Math.min(1, y + Pt), yt = E + (ot - E) * Tt;
525
- dt.current !== h.direction && (dt.current = h.direction, K.current = 0);
526
- const { reachedBoundary: le } = Ht(K, h.direction * yt * c);
527
- if (le) {
528
- Dt();
536
+ const u = gr({
537
+ distance: b.distance,
538
+ maxDistance: R.effectiveTapMaxDistance,
539
+ viewportSize: R.viewportSize,
540
+ minSpeedMultiplier: R.tapCircleMinSpeedMultiplier,
541
+ maxSpeedMultiplier: R.tapCircleMaxSpeedMultiplier,
542
+ hasCustomMaxSpeedMultiplier: typeof R.tapScrollCircleOptions?.maxSpeedMultiplier == "number",
543
+ curve: R.tapCircleMaxSpeedCurve
544
+ });
545
+ 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, At(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
- j || zt();
548
- }, [zt, j]), X(() => {
549
- const a = (h) => {
550
- const F = h.detail?.paneId;
551
- F && I && F !== I || zt();
569
+ Y(() => {
570
+ k || 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, zt]), X(() => {
557
- if (!j)
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
- zt();
585
+ const R = b.target;
586
+ if (!(R instanceof Node)) {
587
+ vt();
565
588
  return;
566
589
  }
567
- tt.current?.getElement()?.contains(P) || zt();
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
- }, [zt, j]);
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 = pt(a, 0, m);
577
- return pt(h / m * xt, 0, xt);
578
- }, xe = S((a) => {
579
- const { scrollBarVisible: h, effectiveTrackLength: P, maxScrollPosition: F } = O.current;
580
- if (N.debug("[ScrollBar] calculateScrollPositionFromThumb", () => ({ thumbPos: a, trackLen: P, maxScroll: F })), P <= 0 || F <= 0)
599
+ const b = 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 = pt(a, 0, P);
583
- return pt(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 = (z) => {
587
- const E = Number.parseFloat(z);
588
- return Number.isFinite(E) ? E : 0;
589
- }, o = window.getComputedStyle(a), c = F(u ? o.width : o.height), d = c > 0 ? c + F(u ? o.paddingLeft : o.paddingTop) + F(u ? o.paddingRight : o.paddingBottom) + F(u ? o.borderLeftWidth : o.borderTopWidth) + F(u ? o.borderRightWidth : o.borderBottomWidth) : 0, y = d > 0 ? d : u ? a.offsetWidth : a.offsetHeight;
590
- return y <= 0 || P <= 0 ? 1 : P / y;
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 = bt(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 && Nt(c), a.cancelable && a.preventDefault();
629
+ const o = de(b.startThumbPosition + X);
630
+ o !== null && bt(o), a.cancelable && a.preventDefault();
608
631
  },
609
- [bt, xe, Nt]
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), k.current) {
618
- const F = k.current.getBoundingClientRect();
619
- a.clientX >= F.left && a.clientX <= F.right && a.clientY >= F.top && a.clientY <= F.bottom || st(!1);
638
+ document.removeEventListener("pointermove", 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: mt,
656
+ [xt]
657
+ ), { handleArrowPointerDown: ye, handleArrowPointerUp: fe, handleArrowKeyDown: Ae } = pr({
658
+ canUseArrowButtons: g,
636
659
  enableArrowButtons: l,
637
- resetTapScroll: zt,
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
- zt();
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 pt = (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 = Rt(a), o = it(h), c = (F - (u ? P.left : P.top)) / o;
675
- zt();
676
- const d = c - ct / 2, y = de(d);
677
- if (Nt(y), h.setPointerCapture)
697
+ const b = 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 = bt(P, F) / (h.scale || 1), c = de(h.startThumbPosition + o);
700
- Nt(c), a.cancelable && a.preventDefault();
701
- }, fe = (a) => {
702
- if (w.current.pointerId !== a.pointerId)
722
+ const R = 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 = Vt(() => pt((wt ? 1 : 0.8) * _t, 0, 1), [wt, _t]), Ve = Vt(() => {
714
- const h = `calc(50% - ${ht / 2}px + ${R}px)`;
732
+ const b = 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, ht]), 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: !mt,
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: ct,
747
- thumbPosition: V,
748
- thumbCenter: It,
749
- trackSize: Et,
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", ft, !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 && j && /* @__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: ht,
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, W[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]: ct,
807
- [gt]: 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: k,
822
- className: ce("aqvs-scrollbar-thumb", u ? "aqvs-scrollbar-thumb-horizontal" : "aqvs-scrollbar-thumb-vertical"),
823
- "data-thumb-state": se,
844
+ ref: D,
845
+ className: 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,198 +865,202 @@ const pt = (i, t, e) => Math.max(t, Math.min(e, i)), Oe = "virtualscroll:tap-scr
841
865
  },
842
866
  "track"
843
867
  ),
844
- me(1, W[1], at[1], "arrow-end")
868
+ Ce(1, 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: At,
881
- renderOverlay: k,
882
- initialScrollPosition: B = 0
883
- }, w) => {
884
- const C = g(Number.isFinite(B) ? Math.max(0, B) : 0), U = g(null), H = g(null), tt = g(nt);
885
- X(() => {
886
- tt.current = nt;
887
- }, [nt]);
888
- const L = g({
890
+ enablePointerDrag: c = !0,
891
+ pointerDragInputs: 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 = Vt(
918
+ }), $ = At(
894
919
  () => ({
895
- maxVelocity: D?.maxVelocity ?? Te.maxVelocity,
896
- minVelocity: D?.minVelocity ?? Te.minVelocity,
897
- deceleration: D?.deceleration ?? Te.deceleration,
898
- velocitySampleWindow: D?.velocitySampleWindow ?? Te.velocitySampleWindow,
899
- startVelocityThreshold: D?.startVelocityThreshold ?? Te.startVelocityThreshold
920
+ maxVelocity: z?.maxVelocity ?? 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 = Vt(() => ({
903
- top: Math.max(0, st?.top ?? 0),
904
- bottom: Math.max(0, st?.bottom ?? 0)
905
- }), [st]);
906
- N.debug("[ScrollPane] ScrollPane rendered", () => ({
926
+ [z]
927
+ ), 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 dt = g({ contentSize: t, viewportSize: e });
918
- dt.current = { contentSize: t, viewportSize: e };
919
- const et = Vt(() => t > e, [t, e]), Y = S(
920
- (T) => {
921
- const { contentSize: O, viewportSize: A } = dt.current, Mt = O > A, gt = C.current;
922
- if (N.debug("[ScrollPane] scrollTo called", () => ({ newPosition: T, contentSize: O, viewportSize: A, currentIsScrollable: Mt, prevPosition: gt })), !Mt)
923
- return C.current !== 0 && (C.current = 0, f?.(0, gt)), C.current;
924
- const bt = typeof T == "function" ? T(C.current) : T;
925
- if (!Number.isFinite(bt))
926
- return N.warn("[ScrollPane] scrollTo received a non-finite position; keeping the current position", { nextPosition: bt }), C.current;
927
- const Rt = Math.max(O - A, 0), W = pt(bt, 0, Rt);
928
- return C.current !== W && (C.current = W, f?.(W, gt)), C.current;
942
+ const 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
- ), j = S(() => {
932
- const T = L.current;
933
- T.generation += 1, T.frame !== null && cancelAnimationFrame(T.frame), T.frame = null, T.velocity = 0, T.lastTimestamp = null;
934
- }, []), ht = g(j);
935
- X(() => {
936
- ht.current = j;
937
- }, [j]), X(() => () => {
938
- ht.current();
955
+ [x]
956
+ ), 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: gt } = b, bt = pt(T, -O, O);
945
- if (Math.abs(bt) < gt)
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
- j(), L.current.velocity = bt, L.current.lastTimestamp = null;
948
- const Rt = L.current.generation, W = (at) => {
949
- const ft = L.current;
950
- if (ft.generation !== Rt)
976
+ U(), 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 (ft.lastTimestamp === null) {
953
- ft.lastTimestamp = at, ft.frame = requestAnimationFrame(W);
981
+ if (rt.lastTimestamp === null) {
982
+ rt.lastTimestamp = Nt, rt.frame = requestAnimationFrame(wt);
954
983
  return;
955
984
  }
956
- const Zt = at - ft.lastTimestamp;
957
- if (ft.lastTimestamp = at, Zt <= 0) {
958
- ft.frame = requestAnimationFrame(W);
985
+ const Dt = Nt - rt.lastTimestamp;
986
+ if (rt.lastTimestamp = Nt, Dt <= 0) {
987
+ rt.frame = requestAnimationFrame(wt);
959
988
  return;
960
989
  }
961
- const Ot = ft.velocity;
962
- let Ct = Ot;
963
- const Et = Mt * Zt;
964
- Ot > 0 ? Ct = Math.max(0, Ot - Et) : Ot < 0 && (Ct = Math.min(0, Ot + Et));
965
- const ct = (Ot + Ct) / 2 * Zt, xt = C.current;
966
- if (ct !== 0 && Y((se) => se + ct), L.current.generation !== Rt)
990
+ const 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 } = dt.current, vt = Math.max(V - It, 0);
969
- ft.velocity = Ct;
970
- const mt = m === xt || m <= 0 && Ct <= 0 || m >= vt && Ct >= 0;
971
- if (Math.abs(Ct) < A || mt) {
972
- j();
997
+ const 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
- ft.frame = requestAnimationFrame(W);
1004
+ rt.frame = requestAnimationFrame(wt);
976
1005
  };
977
- L.current.frame = requestAnimationFrame(W);
1006
+ p.current.frame = requestAnimationFrame(wt);
978
1007
  },
979
- [et, b, Y, j]
980
- ), R = g(St);
981
- X(() => {
982
- R.current = St;
983
- }, [St]), be(() => {
984
- dt.current = { contentSize: t, viewportSize: e };
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 = pt(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 (A.ctrlKey)
1027
+ k(0);
1028
+ }, [Z, k, t, e]), Y(() => {
1029
+ const f = (H) => {
1030
+ if (H.ctrlKey)
1002
1031
  return;
1003
- const Mt = A.shiftKey && A.deltaX === 0, gt = Mt ? A.deltaY : A.deltaX, bt = Mt ? 0 : A.deltaY;
1004
- if (gt !== 0 && Math.abs(gt) >= Math.abs(bt)) {
1005
- if (tt.current) {
1006
- A.preventDefault(), j();
1007
- let at = gt;
1008
- A.deltaMode === 1 ? at *= 16 : A.deltaMode === 2 && (at *= e), tt.current(at);
1032
+ const 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);
1009
1038
  }
1010
1039
  return;
1011
1040
  }
1012
- if (!et || A.deltaY === 0)
1041
+ if (!Z || H.deltaY === 0)
1013
1042
  return;
1014
- A.preventDefault(), j();
1015
- let W = A.deltaY;
1016
- A.deltaMode === 1 ? W *= 16 : A.deltaMode === 2 && (W *= e), rt !== 1 && (W *= rt), N.debug("[ScrollPane] wheel event", () => ({ deltaY: W, scrollPosition: C.current, wheelSpeedMultiplier: rt, deltaMode: A.deltaMode, scrollTop: H.current?.scrollTop })), Y((at) => at + W);
1017
- }, O = U.current;
1018
- return O && O.addEventListener("wheel", T, { passive: !1 }), () => {
1019
- O && O.removeEventListener("wheel", T);
1043
+ H.preventDefault(), U();
1044
+ let 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 }));
1020
1051
  };
1021
- }, [et, Y, j, e, rt]), ze(
1022
- w,
1052
+ }, [Z, k, U, e, Q]), Be(
1053
+ B,
1023
1054
  () => ({
1024
- scrollTo: (T) => (j(), Y(T)),
1025
- getScrollPosition: () => C.current,
1055
+ scrollTo: (f) => (U(), k(f)),
1056
+ getScrollPosition: () => N.current,
1026
1057
  getContentSize: () => t,
1027
1058
  getViewportSize: () => e
1028
1059
  }),
1029
- [Y, t, e, j]
1060
+ [k, t, e, U]
1030
1061
  );
1031
- const Ft = g(Y);
1032
- X(() => {
1033
- Ft.current = Y;
1034
- }, [Y]);
1035
- const Lt = er(), v = g({
1062
+ const Ht = tr(), v = T({
1063
+ pointerType: "",
1036
1064
  pointerId: null,
1037
1065
  startClientY: 0,
1038
1066
  startScroll: 0,
@@ -1040,225 +1068,250 @@ const pt = (i, t, e) => Math.max(t, Math.min(e, i)), Oe = "virtualscroll:tap-scr
1040
1068
  shouldCancelNextClick: !1,
1041
1069
  clickResetTimer: null,
1042
1070
  velocitySamples: []
1043
- }), kt = g(u);
1044
- X(() => {
1045
- kt.current = u;
1046
- }, [u]);
1047
- const _t = g(et);
1048
- X(() => {
1049
- _t.current = et;
1050
- }, [et]);
1051
- const Gt = g(b);
1052
- return X(() => {
1053
- Gt.current = b;
1054
- }, [b]), X(() => {
1055
- if (u)
1071
+ }), 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)
1056
1087
  return;
1057
- const T = H.current, O = v.current;
1058
- O.pointerId !== null && T?.hasPointerCapture(O.pointerId) && T.releasePointerCapture(O.pointerId), O.clickResetTimer !== null && (window.clearTimeout(O.clickResetTimer), O.clickResetTimer = null), O.pointerId = null, O.startClientY = 0, O.startScroll = 0, O.isDragging = !1, O.shouldCancelNextClick = !1, O.velocitySamples = [];
1059
- }, [u]), X(() => {
1060
- const T = H.current;
1061
- if (!T)
1088
+ const 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)
1062
1095
  return;
1063
- const O = 6, A = () => typeof performance < "u" && typeof performance.now == "function" ? performance.now() : Date.now(), Mt = () => {
1064
- const m = v.current;
1065
- m.pointerId = null, m.startClientY = 0, m.startScroll = 0, m.isDragging = !1, m.velocitySamples = [];
1066
- }, gt = () => {
1067
- const m = v.current;
1068
- m.clickResetTimer !== null && (window.clearTimeout(m.clickResetTimer), m.clickResetTimer = null);
1069
- }, bt = (m) => {
1070
- const V = v.current, It = A();
1071
- V.velocitySamples.push({ clientY: m, time: It });
1072
- const vt = Gt.current.velocitySampleWindow;
1073
- V.velocitySamples = V.velocitySamples.filter((mt) => It - mt.time <= vt);
1074
- }, Rt = (m) => m instanceof HTMLElement && m.closest("[data-scrollpane-ignore-drag='true']") !== null, W = (m) => {
1075
- const V = v.current;
1076
- V.shouldCancelNextClick && (m.preventDefault(), m.stopPropagation(), V.shouldCancelNextClick = !1);
1077
- }, at = (m) => {
1078
- const V = v.current;
1079
- if (!V.isDragging) {
1080
- if (V.isDragging = !0, V.shouldCancelNextClick = !0, !T.hasPointerCapture(m.pointerId))
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))
1081
1114
  try {
1082
- T.setPointerCapture(m.pointerId);
1115
+ f.setPointerCapture(g.pointerId);
1083
1116
  } catch {
1084
1117
  }
1085
- bt(m.clientY);
1118
+ J(g.clientY);
1086
1119
  }
1087
- }, ft = (m) => {
1088
- const V = v.current;
1089
- T.hasPointerCapture(m) && T.releasePointerCapture(m), V.shouldCancelNextClick = !1, gt(), Mt();
1090
- }, Zt = (m) => {
1091
- const V = v.current;
1092
- if (V.pointerId !== m.pointerId)
1120
+ }, 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)
1093
1126
  return;
1094
- if (m.buttons === 0) {
1095
- ft(m.pointerId);
1127
+ if (g.buttons === 0) {
1128
+ rt(g.pointerId);
1096
1129
  return;
1097
1130
  }
1098
- if (!(kt.current && _t.current) || !V.isDragging && (Math.abs(m.clientY - V.startClientY) < O || (at(m), !V.isDragging)))
1131
+ if (!(Xt.current && Jt.current) || !ke(g.pointerType, Bt.current) || !w.isDragging && (Math.abs(g.clientY - w.startClientY) < dt || (Nt(g), !w.isDragging)))
1099
1132
  return;
1100
- bt(m.clientY);
1101
- const It = m.clientY - V.startClientY, vt = V.startScroll - It;
1102
- Ft.current(vt), m.cancelable && m.preventDefault();
1103
- }, Ot = (m) => {
1104
- const V = v.current;
1105
- if (V.pointerId !== m.pointerId)
1133
+ J(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();
1106
1146
  return;
1107
- V.isDragging && V.shouldCancelNextClick && m.cancelable && (m.preventDefault(), m.stopPropagation()), V.isDragging && bt(m.clientY);
1108
- let It = 0;
1109
- if (V.isDragging && V.velocitySamples.length >= 2) {
1110
- const mt = V.velocitySamples, se = Gt.current.velocitySampleWindow, Nt = mt[mt.length - 1], $t = mt.find((Ht) => Nt.time - Ht.time <= se) ?? mt[0];
1111
- if (Nt && $t && Nt.time !== $t.time) {
1112
- const Ht = Nt.clientY - $t.clientY, Dt = Nt.time - $t.time;
1113
- It = -(Ht / Dt);
1147
+ }
1148
+ 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);
1114
1155
  }
1115
1156
  }
1116
- gt(), V.shouldCancelNextClick && (V.clickResetTimer = window.setTimeout(() => {
1117
- const mt = v.current;
1118
- mt.shouldCancelNextClick = !1, mt.clickResetTimer = null;
1157
+ it(), w.shouldCancelNextClick && (w.clickResetTimer = window.setTimeout(() => {
1158
+ const xt = v.current;
1159
+ xt.shouldCancelNextClick = !1, xt.clickResetTimer = null;
1119
1160
  }, 0));
1120
- const vt = Gt.current.startVelocityThreshold;
1121
- Mt(), T.hasPointerCapture(m.pointerId) && T.releasePointerCapture(m.pointerId), Math.abs(It) >= vt && R.current?.(It);
1122
- }, Ct = (m) => {
1123
- if (v.current.pointerId !== null || !(kt.current && _t.current) || m.button !== 0 && m.pointerType === "mouse" || m.ctrlKey || m.metaKey || m.altKey || Rt(m.target))
1161
+ const 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))
1165
+ return;
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();
1124
1172
  return;
1125
- window.dispatchEvent(new CustomEvent(Oe, { detail: { paneId: Lt } })), ht.current?.();
1126
- const V = v.current;
1127
- gt(), V.pointerId = m.pointerId, V.startClientY = m.clientY, V.startScroll = C.current, V.isDragging = !1, V.shouldCancelNextClick = !1, V.velocitySamples = [];
1128
- }, Et = (m) => {
1129
- v.current.pointerId === m.pointerId && ft(m.pointerId);
1130
- }, ct = [
1131
- ["click", W, !0],
1132
- ["pointerdown", Ct, { passive: !1 }],
1133
- ["lostpointercapture", (m) => {
1134
- v.current.pointerId === m.pointerId && ft(m.pointerId);
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);
1135
1180
  }, void 0]
1136
- ], xt = [
1137
- ["pointermove", Zt, { passive: !1 }],
1138
- ["pointerup", Ot, void 0],
1139
- ["pointercancel", Et, void 0]
1181
+ ], ct = [
1182
+ ["pointermove", Dt, { passive: !1 }],
1183
+ ["pointerup", ft, void 0],
1184
+ ["pointercancel", Lt, void 0]
1140
1185
  ];
1141
- return Ce(T, ct, "add"), Ce(window, xt, "add"), () => {
1142
- Ce(T, ct, "remove"), Ce(window, xt, "remove");
1143
- const m = v.current;
1144
- m.pointerId !== null && T.hasPointerCapture(m.pointerId) && T.releasePointerCapture(m.pointerId), gt(), Mt();
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();
1145
1190
  };
1146
- }, [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: [
1147
1197
  /* @__PURE__ */ ue(
1148
1198
  "div",
1149
1199
  {
1150
- ref: H,
1200
+ ref: et,
1151
1201
  className: ce("aqvs-scroll-pane-content"),
1202
+ "data-testid": "aqvs-scroll-pane-content",
1152
1203
  style: {
1153
1204
  height: e,
1154
- paddingTop: K.top,
1155
- paddingBottom: K.bottom,
1205
+ paddingTop: St.top,
1206
+ paddingBottom: St.bottom,
1156
1207
  // スクロール不能時 (contentSize <= viewportSize) は touch-action を通常に戻し、
1157
- // 短いリスト上のタッチがページ全体のパンを妨げるデッドゾーン化を防ぐ
1158
- ...u && et ? { touchAction: "none" } : {}
1208
+ // 短いリスト上のタッチがページ全体のパンを妨げるデッドゾーン化を防ぐ。
1209
+ // 直接操作 (指・ペン) のドラッグを許可していない場合も付けない。
1210
+ // touch-action はペン入力にも効くため、判定は touch と pen の論理和にする
1211
+ ...c && Z && d.some((f) => f === "touch" || f === "pen") ? { touchAction: "none" } : {}
1159
1212
  },
1160
- id: Lt,
1213
+ id: Ht,
1161
1214
  children: [
1162
- _,
1163
- i(C.current)
1215
+ h,
1216
+ n(N.current)
1164
1217
  ]
1165
1218
  }
1166
1219
  ),
1167
- /* @__PURE__ */ Q(
1168
- br,
1220
+ /* @__PURE__ */ st(
1221
+ xr,
1169
1222
  {
1170
1223
  contentSize: t,
1171
1224
  viewportSize: e,
1172
- scrollPosition: C.current,
1173
- onScroll: Y,
1174
- enableThumbDrag: n,
1225
+ scrollPosition: N.current,
1226
+ onScroll: jt,
1227
+ enableThumbDrag: i,
1175
1228
  enableTrackClick: s,
1176
1229
  enableArrowButtons: l,
1177
1230
  scrollBarWidth: r,
1178
- ariaControls: Lt,
1179
- tapScrollCircleOptions: p,
1180
- itemCount: J,
1181
- renderThumbOverlay: G,
1182
- visibleStartIndex: wt,
1183
- visibleEndIndex: At
1231
+ ariaControls: Ht,
1232
+ tapScrollCircleOptions: _,
1233
+ itemCount: j,
1234
+ renderThumbOverlay: ut,
1235
+ visibleStartIndex: Tt,
1236
+ visibleEndIndex: D
1184
1237
  },
1185
1238
  "scrollbar"
1186
1239
  ),
1187
- k?.()
1240
+ O?.()
1188
1241
  ] });
1189
1242
  }
1190
- ), He = (i, t, e) => Math.min(Math.max(i, t), e), Dr = ({ dragState: i, normalizedDistance: t, sizeScale: e, size: r }) => {
1191
- const n = Math.max(r / 2, 1), s = 1 + t * 0.65, l = Math.max(0.65, 1 - t * 0.25), u = i.direction * t * 26 * e, f = 0.8 + t * 0.18, x = 3 * e, I = 6 * e, M = 22 * e, _ = Math.abs(u) + I, p = u > 0 ? x : -Math.abs(u) - x, D = Math.max(2.5, 3 * e), J = He(i.offsetX, -n, n), G = He(i.offsetY, -n, n), rt = n * 0.35, nt = J / n * rt, st = G / n * rt, wt = nt * 0.45, At = st * 0.45, k = Math.max(M * 0.38, 6), B = 0.65 + t * 0.2, w = i.active;
1192
- return /* @__PURE__ */ ue(Ke, { children: [
1193
- /* @__PURE__ */ Q(
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(
1194
1247
  "div",
1195
1248
  {
1196
1249
  className: "aqvs-tap-scroll-circle-gradient",
1197
1250
  style: {
1198
1251
  transform: `scale(${l}, ${s})`,
1199
- transition: w ? "40ms transform ease-out" : "200ms ease transform"
1252
+ transition: P ? "40ms transform ease-out" : "200ms ease transform"
1200
1253
  }
1201
1254
  }
1202
1255
  ),
1203
- /* @__PURE__ */ Q(
1256
+ /* @__PURE__ */ st(
1204
1257
  "div",
1205
1258
  {
1206
- className: "aqvs-sample-visual-rod",
1259
+ className: "aqvs-sample-visual-pupil",
1207
1260
  style: {
1208
1261
  width: M,
1209
1262
  height: M,
1210
- transform: `translate(calc(-50% + ${nt}px), calc(-50% + ${st}px)) scale(${l}, ${f * s})`,
1211
- transition: w ? "70ms transform ease-out" : "200ms ease transform"
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"
1212
1265
  }
1213
1266
  }
1214
1267
  ),
1215
- /* @__PURE__ */ Q(
1268
+ /* @__PURE__ */ st(
1216
1269
  "div",
1217
1270
  {
1218
- className: "aqvs-sample-visual-pupil",
1271
+ className: "aqvs-sample-visual-highlight",
1219
1272
  style: {
1220
- width: k,
1221
- height: k,
1222
- transform: `translate(calc(-50% + ${wt}px), calc(-50% + ${At}px)) scale(${l}, ${s})`,
1223
- 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,
1224
1277
  boxShadow: "0 0 8px rgba(255,255,255,0.45)",
1225
- transition: w ? "120ms opacity 150ms, 120ms transform ease-out ease-out" : "220ms ease transform, 240ms opacity ease"
1278
+ transition: P ? "120ms opacity 150ms, 120ms transform ease-out ease-out" : "220ms ease transform, 240ms opacity ease"
1226
1279
  }
1227
1280
  }
1228
1281
  ),
1229
- /* @__PURE__ */ Q(
1282
+ /* @__PURE__ */ st(
1230
1283
  "div",
1231
1284
  {
1232
- className: "aqvs-sample-visual-highlight",
1285
+ className: "aqvs-sample-visual-rod",
1233
1286
  style: {
1234
- width: D,
1235
- height: _,
1236
- transform: `translate(-50%, ${p}px)`,
1287
+ width: _,
1288
+ height: E,
1289
+ transform: `translate(-50%, ${h}px)`,
1237
1290
  opacity: t,
1238
- 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"
1239
1292
  }
1240
1293
  }
1241
1294
  )
1242
1295
  ] });
1243
- }, Ee = 100, Ir = (i) => {
1244
- if (!Number.isFinite(i))
1296
+ }, Ne = 100, vr = (n) => {
1297
+ if (!Number.isFinite(n))
1245
1298
  return 0n;
1246
- const t = Math.trunc(i);
1299
+ const t = Math.trunc(n);
1247
1300
  return t <= 0 ? 0n : BigInt(t);
1248
- }, Le = (i, t) => {
1249
- if (!Number.isFinite(i))
1250
- throw new Error(`valueFn returned a non-finite value at index ${t}: ${i}`);
1251
- return i;
1252
- }, he = (i) => {
1253
- if (i <= 0 || !Number.isFinite(i))
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))
1254
1307
  return 0;
1255
- const t = Math.trunc(i);
1308
+ const t = Math.trunc(n);
1256
1309
  if (t <= 2147483647)
1257
1310
  return t & -t;
1258
1311
  const e = BigInt(t) & -BigInt(t);
1259
1312
  return Number(e);
1260
1313
  };
1261
- class oe {
1314
+ class le {
1262
1315
  /**
1263
1316
  * @private
1264
1317
  * @property {Map<number, number>} tree - The Map storing the Fenwick tree structure, specifically the sums of deltas. It is 1-indexed.
@@ -1317,32 +1370,32 @@ class oe {
1317
1370
  * @param {{ sampleRange?: { from: number; to: number }, materialize?: boolean }} [options] - Optional settings for initialization.
1318
1371
  */
1319
1372
  reset(t, e, r) {
1320
- const n = Number.isFinite(t) && t > 0 ? Math.trunc(t) : 0;
1373
+ const i = Number.isFinite(t) && t > 0 ? Math.trunc(t) : 0;
1321
1374
  if (typeof e != "function") {
1322
- this.size = n, this.tree = /* @__PURE__ */ new Map(), this.deltas = /* @__PURE__ */ new Map(), this.valueFn = void 0, this.baseValue = e, this.total = this.baseValue * this.size;
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;
1323
1376
  return;
1324
1377
  }
1325
1378
  let s = 0, l;
1326
- if (n > 0) {
1327
- const u = r?.sampleRange ?? {
1379
+ if (i > 0) {
1380
+ const c = r?.sampleRange ?? {
1328
1381
  from: 0,
1329
- to: Math.min(Ee - 1, n - 1)
1382
+ to: Math.min(Ne - 1, i - 1)
1330
1383
  };
1331
- let f = Math.max(0, Math.trunc(u.from)), x = Math.min(Math.trunc(u.to), n - 1);
1332
- if (f > x && (f = 0, x = Math.min(Ee - 1, n - 1)), n > Ee)
1333
- s = oe._sampleBaseValueStrided(e, n, Ee), r?.materialize && (l = { from: f, values: oe._collectValidatedValues(e, f, x) });
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) });
1334
1387
  else {
1335
- const I = oe._collectValidatedValues(e, f, x);
1336
- 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 });
1337
1390
  }
1338
1391
  }
1339
- if (this.size = n, this.tree = /* @__PURE__ */ new Map(), this.deltas = /* @__PURE__ */ new Map(), this.total = void 0, this.valueFn = e, this.baseValue = s, l)
1340
- for (let u = 0; u < l.values.length; u++) {
1341
- const f = l.from + u;
1342
- 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)
1343
1396
  break;
1344
- const x = l.values[u] - this.baseValue;
1345
- 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));
1346
1399
  }
1347
1400
  this.total = this.getTotal();
1348
1401
  }
@@ -1371,10 +1424,10 @@ class oe {
1371
1424
  * @returns {number[]} The validated (finite-only) values in index order.
1372
1425
  */
1373
1426
  static _collectValidatedValues(t, e, r) {
1374
- const n = [];
1427
+ const i = [];
1375
1428
  for (let s = e; s <= r; s++)
1376
- n.push(Le(t(s), s));
1377
- return n;
1429
+ i.push(Oe(t(s), s));
1430
+ return i;
1378
1431
  }
1379
1432
  /**
1380
1433
  * @private
@@ -1387,22 +1440,22 @@ class oe {
1387
1440
  static _modeOrMedian(t) {
1388
1441
  if (t.length === 0)
1389
1442
  return 0;
1390
- t.sort((l, u) => l - u);
1443
+ t.sort((l, c) => l - c);
1391
1444
  const e = Math.floor(t.length / 2);
1392
1445
  let r;
1393
1446
  t.length % 2 === 0 ? r = Math.floor((t[e - 1] + t[e]) / 2) : r = t[e];
1394
- const n = /* @__PURE__ */ new Map();
1447
+ const i = /* @__PURE__ */ new Map();
1395
1448
  let s = 0;
1396
1449
  for (const l of t) {
1397
- const u = (n.get(l) ?? 0) + 1;
1398
- 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);
1399
1452
  }
1400
1453
  if (s > t.length * 0.2) {
1401
1454
  const l = [];
1402
- for (const [f, x] of n.entries())
1403
- x === s && l.push(f);
1404
- const u = l.reduce((f, x) => f + x, 0);
1405
- 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);
1406
1459
  }
1407
1460
  return r;
1408
1461
  }
@@ -1419,12 +1472,12 @@ class oe {
1419
1472
  static _sampleBaseValueStrided(t, e, r) {
1420
1473
  if (e <= 0)
1421
1474
  return 0;
1422
- let n = Math.max(1, Math.ceil(e / r));
1423
- n % 2 === 0 && (n += 1);
1475
+ let i = Math.max(1, Math.ceil(e / r));
1476
+ i % 2 === 0 && (i += 1);
1424
1477
  const s = [];
1425
- for (let l = 0; l < e && s.length < r; l += n)
1426
- s.push(Le(t(l), l));
1427
- return oe._modeOrMedian(s);
1478
+ for (let l = 0; l < e && s.length < r; l += i)
1479
+ s.push(Oe(t(l), l));
1480
+ return le._modeOrMedian(s);
1428
1481
  }
1429
1482
  /**
1430
1483
  * @method update
@@ -1464,21 +1517,21 @@ class oe {
1464
1517
  */
1465
1518
  updateDeltas(t) {
1466
1519
  const e = /* @__PURE__ */ new Map();
1467
- for (const { index: r, change: n } of t) {
1520
+ for (const { index: r, change: i } of t) {
1468
1521
  if (r < 0 || r >= this.size)
1469
1522
  throw new Error(`Index ${r} out of bounds`);
1470
1523
  if (!Number.isInteger(r))
1471
1524
  throw new Error(`Index must be an integer: ${r}`);
1472
- if (!Number.isFinite(n))
1473
- throw new Error(`Change must be a finite number: ${n}`);
1474
- const l = (e.get(r) ?? this.deltas.get(r) ?? 0) + n;
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;
1475
1528
  if (l + this.baseValue < -1e-9)
1476
1529
  throw new Error(`Change would make the value at index ${r} negative: ${l + this.baseValue}`);
1477
1530
  e.set(r, l);
1478
1531
  }
1479
- for (const { index: r, change: n } of t) {
1480
- const l = (this.deltas.get(r) ?? 0) + n;
1481
- l === 0 ? this.deltas.delete(r) : this.deltas.set(r, l), this._updateTree(r, n);
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);
1482
1535
  }
1483
1536
  return this.total;
1484
1537
  }
@@ -1496,10 +1549,10 @@ class oe {
1496
1549
  let r = t + 1;
1497
1550
  for (; r <= this.size; ) {
1498
1551
  this.tree.set(r, (this.tree.get(r) ?? 0) + e);
1499
- const n = he(r);
1500
- if (n === 0)
1552
+ const i = he(r);
1553
+ if (i === 0)
1501
1554
  break;
1502
- r += n;
1555
+ r += i;
1503
1556
  }
1504
1557
  this.total !== void 0 && (this.total += e);
1505
1558
  }
@@ -1513,17 +1566,17 @@ class oe {
1513
1566
  */
1514
1567
  _buildDeltaUpdates(t) {
1515
1568
  const e = [], r = /* @__PURE__ */ new Map();
1516
- for (const { index: n, value: s } of t) {
1517
- if (n < 0 || n >= this.size)
1518
- throw new Error(`Index ${n} out of bounds`);
1519
- if (!Number.isInteger(n))
1520
- throw new Error(`Index must be an integer: ${n}`);
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}`);
1521
1574
  if (!Number.isFinite(s))
1522
1575
  throw new Error(`Value must be a finite number: ${s}`);
1523
1576
  if (s < 0)
1524
1577
  throw new Error("Value cannot be negative.");
1525
- const l = r.has(n) ? r.get(n) ?? 0 : this.deltas.get(n) ?? 0, u = l + this.baseValue, f = s - u;
1526
- f !== 0 && e.push({ index: n, change: f }), r.set(n, l + f);
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);
1527
1580
  }
1528
1581
  return e;
1529
1582
  }
@@ -1557,7 +1610,7 @@ class oe {
1557
1610
  */
1558
1611
  _materialize(t, e = !0) {
1559
1612
  if (this.valueFn) {
1560
- 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;
1561
1614
  if (s !== r && (s === 0 ? this.deltas.delete(t) : this.deltas.set(t, s), e)) {
1562
1615
  const l = s - r;
1563
1616
  this._updateTree(t, l);
@@ -1576,11 +1629,11 @@ class oe {
1576
1629
  _materializeRanges(t, e, r = !1) {
1577
1630
  if (!(t?.materialize && this.valueFn))
1578
1631
  return;
1579
- const n = t.ranges;
1580
- if (n && n.length > 0) {
1581
- for (const u of n) {
1582
- const f = Math.max(0, Math.trunc(u.from)), x = Math.min(Math.trunc(u.to), this.size - 1);
1583
- 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++)
1584
1637
  this._materialize(I);
1585
1638
  }
1586
1639
  if (e === void 0)
@@ -1589,7 +1642,7 @@ class oe {
1589
1642
  this._materialize(e);
1590
1643
  return;
1591
1644
  }
1592
- const s = n[0].from, l = n[n.length - 1].to;
1645
+ const s = i[0].from, l = i[i.length - 1].to;
1593
1646
  e >= s && e <= l && this._materialize(e);
1594
1647
  return;
1595
1648
  }
@@ -1611,15 +1664,15 @@ class oe {
1611
1664
  if (this.size === 0)
1612
1665
  return { index: -1, total: this.total ?? 0, cumulative: void 0, currentValue: void 0, safeIndex: void 0 };
1613
1666
  this._materializeRanges(e.materializeOption);
1614
- const n = e.materializeOption?.materialize === !0;
1667
+ const i = e.materializeOption?.materialize === !0;
1615
1668
  let s;
1616
1669
  for (; ; ) {
1617
1670
  if (s = this._descend(t, r), s < 0 || s >= this.size)
1618
1671
  return { index: -1, total: this.total ?? this.getTotal(), cumulative: void 0, currentValue: void 0, safeIndex: void 0 };
1619
- if (!n)
1672
+ if (!i)
1620
1673
  break;
1621
- const u = this.deltas.get(s) ?? 0;
1622
- 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)
1623
1676
  break;
1624
1677
  }
1625
1678
  const l = this.prefixSum(s);
@@ -1641,14 +1694,14 @@ class oe {
1641
1694
  * @returns {number} The candidate index (may be out of range when no index satisfies the condition).
1642
1695
  */
1643
1696
  _descend(t, e) {
1644
- let r = 0, n = 0, s = 1;
1697
+ let r = 0, i = 0, s = 1;
1645
1698
  for (; s << 1 <= this.size; )
1646
1699
  s <<= 1;
1647
1700
  for (; s > 0; s >>= 1) {
1648
1701
  const l = r + s;
1649
1702
  if (l <= this.size) {
1650
- const f = (this.tree.get(l) ?? 0) + this.baseValue * s;
1651
- (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);
1652
1705
  }
1653
1706
  }
1654
1707
  return e ? r : r - 1;
@@ -1661,38 +1714,38 @@ class oe {
1661
1714
  _findIndexLarge(t, e, r) {
1662
1715
  if (this.size === 0)
1663
1716
  return { index: -1, total: this.total ?? 0, cumulative: void 0, currentValue: void 0, safeIndex: void 0 };
1664
- const n = Ir(this.size);
1665
- if (n === 0n)
1717
+ const i = vr(this.size);
1718
+ if (i === 0n)
1666
1719
  return { index: -1, total: this.total ?? 0, cumulative: void 0, currentValue: void 0, safeIndex: void 0 };
1667
1720
  this._materializeRanges(e.materializeOption);
1668
1721
  const s = e.materializeOption?.materialize === !0;
1669
1722
  for (; ; ) {
1670
- let l = 0n, u = n - 1n, f, x, I = this.total;
1671
- for (; l <= u; ) {
1672
- const p = l + u >> 1n, D = Number(p), J = this.prefixSum(D);
1673
- if (I = J.total, r ? J.cumulative >= t : J.cumulative <= t)
1674
- if (f = p, x = J, r) {
1675
- if (p === 0n)
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)
1676
1729
  break;
1677
- u = p - 1n;
1730
+ c = h - 1n;
1678
1731
  } else
1679
- l = p + 1n;
1732
+ l = h + 1n;
1680
1733
  else if (r)
1681
- l = p + 1n;
1734
+ l = h + 1n;
1682
1735
  else {
1683
- if (p === 0n)
1736
+ if (h === 0n)
1684
1737
  break;
1685
- u = p - 1n;
1738
+ c = h - 1n;
1686
1739
  }
1687
1740
  }
1688
- const M = x, _ = f !== void 0 ? Number(f) : -1;
1689
- if (s && _ >= 0) {
1690
- const p = this.deltas.get(_) ?? 0;
1691
- if (this._materialize(_), (this.deltas.get(_) ?? 0) !== p)
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)
1692
1745
  continue;
1693
1746
  }
1694
1747
  return {
1695
- index: _,
1748
+ index: E,
1696
1749
  total: I,
1697
1750
  cumulative: M?.cumulative,
1698
1751
  currentValue: M?.currentValue,
@@ -1713,19 +1766,19 @@ class oe {
1713
1766
  return { cumulative: 0, total: this.total, currentValue: 0, safeIndex: 0 };
1714
1767
  if (this.size === 0)
1715
1768
  return { cumulative: 0, total: this.total ?? 0, currentValue: 0, safeIndex: 0 };
1716
- const r = pt(Math.trunc(t), 0, this.size - 1), n = e?.materializeOption;
1717
- this._materializeRanges(n, r, !0);
1769
+ const r = It(Math.trunc(t), 0, this.size - 1), i = e?.materializeOption;
1770
+ this._materializeRanges(i, r, !0);
1718
1771
  let s = 0, l = r + 1;
1719
1772
  for (; l > 0; ) {
1720
- const f = this.tree.get(l) ?? 0;
1721
- s += f;
1773
+ const d = this.tree.get(l) ?? 0;
1774
+ s += d;
1722
1775
  const x = he(l);
1723
1776
  if (x === 0)
1724
1777
  break;
1725
1778
  l -= x;
1726
1779
  }
1727
- const u = n?.materialize ? this.get(r) : (this.deltas.get(r) || 0) + this.baseValue;
1728
- return { cumulative: s + this.baseValue * (r + 1), total: this.total, currentValue: u, safeIndex: r };
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 };
1729
1782
  }
1730
1783
  /**
1731
1784
  * @method get
@@ -1758,7 +1811,7 @@ class oe {
1758
1811
  else {
1759
1812
  this.total = this._computeTreeTotal();
1760
1813
  const r = this.prefixSum(this.getSize() - 1);
1761
- r.cumulative !== r.total && N.error("Inconsistent Fenwick Tree state");
1814
+ r.cumulative !== r.total && C.error("Inconsistent Fenwick Tree state");
1762
1815
  }
1763
1816
  return this.total;
1764
1817
  }
@@ -1772,16 +1825,16 @@ class oe {
1772
1825
  rebuildTree(t) {
1773
1826
  if (t?.materialize && this.valueFn) {
1774
1827
  const r = this.valueFn;
1775
- this.reset(this.size, (n) => r(n), { materialize: !0 });
1828
+ this.reset(this.size, (i) => r(i), { materialize: !0 });
1776
1829
  return;
1777
1830
  }
1778
1831
  const e = /* @__PURE__ */ new Map();
1779
- for (const [r, n] of this.deltas.entries()) {
1780
- if (n === 0)
1832
+ for (const [r, i] of this.deltas.entries()) {
1833
+ if (i === 0)
1781
1834
  continue;
1782
1835
  let s = r + 1;
1783
1836
  for (; s <= this.size; ) {
1784
- e.set(s, (e.get(s) ?? 0) + n);
1837
+ e.set(s, (e.get(s) ?? 0) + i);
1785
1838
  const l = he(s);
1786
1839
  if (l === 0)
1787
1840
  break;
@@ -1794,14 +1847,19 @@ class oe {
1794
1847
  * @method calculateAccumulatedError
1795
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.
1796
1849
  * @description キャッシュされている合計値と、元の値 (`deltas` と `baseValue`、または `valueFn`) から直接計算した理論上の合計値とを比較します。これにより、浮動小数点数の累積誤差やその他の不整合によって生じる可能性のある、ツリーのキャッシュ状態の不一致を検出できます。
1850
+ *
1851
+ * ❗ 集計対象は `[0, size)` の範囲内にある delta だけです。`changeSize(0)` は
1852
+ * ロード中の一時クリアとみなして delta を温存する (再伸長時にキャッシュを再利用するため) ので、
1853
+ * 範囲外の delta まで数えると**木は健全なのに空リストの間ずっと非ゼロ**が返り、
1854
+ * この値を破損検知に使う利用者が毎回不要な復旧処理を走らせてしまいます。
1797
1855
  * @returns {number} The difference between the cached total and the theoretical total.
1798
1856
  */
1799
1857
  calculateAccumulatedError() {
1800
1858
  if (this.total === void 0)
1801
1859
  return 0;
1802
1860
  let t = this.baseValue * this.size;
1803
- for (const e of this.deltas.values())
1804
- t += e;
1861
+ for (const [e, r] of this.deltas)
1862
+ e < this.size && (t += r);
1805
1863
  return this.total - t;
1806
1864
  }
1807
1865
  /**
@@ -1818,6 +1876,18 @@ class oe {
1818
1876
  * サイズ差分のみを受け取りインデックスの対応表は受け取らないため、要素は末尾に追加/末尾から削除
1819
1877
  * されると仮定する。既存行は index↔高さ の対応を保つ。したがって中間挿入/削除は表現できず、その
1820
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
+ *
1821
1891
  * 中間で要素を挿入/削除する消費側は、代わりに木をリセットするか (`useFenwickMapTree` の
1822
1892
  * `resetOnValueFnChange`。VirtualScroll では `resetOnGetItemHeightChange` として公開) 、新しい
1823
1893
  * `key` でコンポーネントを再マウントすること。
@@ -1835,14 +1905,20 @@ class oe {
1835
1905
  if (e === r)
1836
1906
  return;
1837
1907
  if (e > r)
1838
- 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);
1839
1914
  else {
1840
- for (const s of this.deltas.keys())
1841
- 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);
1842
1918
  this.size = e, this.rebuildTree();
1843
1919
  }
1844
- const n = this.prefixSum(this.getSize() - 1);
1845
- 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");
1846
1922
  }
1847
1923
  /**
1848
1924
  * @private
@@ -1856,10 +1932,10 @@ class oe {
1856
1932
  static _minCoveredLowBound(t, e) {
1857
1933
  let r = 1;
1858
1934
  for (; ; ) {
1859
- const n = r * 2;
1860
- if (Math.floor(e / n) * n <= t)
1935
+ const i = r * 2;
1936
+ if (Math.floor(e / i) * i <= t)
1861
1937
  break;
1862
- r = n;
1938
+ r = i;
1863
1939
  }
1864
1940
  return r * Math.floor(t / r);
1865
1941
  }
@@ -1873,7 +1949,7 @@ class oe {
1873
1949
  * @param {number} oldSize - The previous size.
1874
1950
  * @param {number} newSize - The new (larger) size.
1875
1951
  */
1876
- _propagateDeltaToGrownNodes(t, e, r, n) {
1952
+ _propagateDeltaToGrownNodes(t, e, r, i) {
1877
1953
  let s = t + 1;
1878
1954
  for (; s <= r; ) {
1879
1955
  const l = he(s);
@@ -1881,7 +1957,7 @@ class oe {
1881
1957
  break;
1882
1958
  s += l;
1883
1959
  }
1884
- for (; s <= n; ) {
1960
+ for (; s <= i; ) {
1885
1961
  this.tree.set(s, (this.tree.get(s) ?? 0) + e);
1886
1962
  const l = he(s);
1887
1963
  if (l === 0)
@@ -1899,7 +1975,7 @@ class oe {
1899
1975
  */
1900
1976
  _growSize(t, e) {
1901
1977
  if (this.size = e, this.deltas.size > 0) {
1902
- const r = oe._minCoveredLowBound(t, e);
1978
+ const r = le._minCoveredLowBound(t, e);
1903
1979
  if (t - r < this.deltas.size)
1904
1980
  for (let s = r; s < t; s++) {
1905
1981
  const l = this.deltas.get(s);
@@ -1920,6 +1996,34 @@ class oe {
1920
1996
  getSize() {
1921
1997
  return this.size;
1922
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
+ }
1923
2027
  /**
1924
2028
  * @method findIndexAtOrAfter
1925
2029
  * @description Finds the first index where the cumulative sum is greater than or equal to a target value.
@@ -1949,20 +2053,20 @@ class oe {
1949
2053
  return this._findIndex(t, e ?? {}, !1);
1950
2054
  }
1951
2055
  }
1952
- const vr = (i, t) => {
1953
- const e = i?.sampleRange, r = t?.sampleRange;
2056
+ const Sr = (n, t) => {
2057
+ const e = n?.sampleRange, r = t?.sampleRange;
1954
2058
  return e === r ? !1 : e && r ? e.from !== r.from || e.to !== r.to : !0;
1955
- }, Tr = (i, t, e) => {
1956
- const r = Number.isFinite(i) && i > 0 ? Math.trunc(i) : 0, n = g(null), s = g({ size: r, valueOrFn: t, options: e });
1957
- n.current === null && (n.current = new oe(r, t, e));
1958
- const l = n.current, u = s.current, f = u.size !== r, x = u.valueOrFn !== t, I = vr(u.options, e), M = u.size === 0 && r > 0;
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);
1959
2063
  if (x || I) {
1960
- const _ = e?.resetOnValueFnChange ?? !0;
1961
- I || x && _ || M ? (e?.debug && N.debug("[useFenwickMapTree] reset", { valueOrFnChanged: x, optionsChanged: I }), l.reset(r, t, e)) : (f && (e?.debug && N.debug("[useFenwickMapTree] resize (with valueFn change)", { from: u.size, to: r }), l.changeSize(r)), e?.debug && N.debug("[useFenwickMapTree] setValueFn (no reset)", { valueOrFnChanged: x }), l.setValueFn(t, { reset: !1 })), s.current = { size: r, valueOrFn: t, options: e };
1962
- } else f && (e?.debug && N.debug("[useFenwickMapTree] resize", { from: u.size, to: r }), M ? l.reset(r, t, e) : l.changeSize(r), s.current = { size: r, valueOrFn: t, options: e });
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 });
1963
2067
  return l;
1964
2068
  };
1965
- class Sr {
2069
+ class Pr {
1966
2070
  key;
1967
2071
  value;
1968
2072
  prev = null;
@@ -1971,7 +2075,7 @@ class Sr {
1971
2075
  this.key = t, this.value = e;
1972
2076
  }
1973
2077
  }
1974
- class _e {
2078
+ class Fe {
1975
2079
  head = null;
1976
2080
  tail = null;
1977
2081
  /**
@@ -2012,11 +2116,11 @@ class _e {
2012
2116
  this.remove(t), this.addToTail(t);
2013
2117
  }
2014
2118
  }
2015
- function Mr(i) {
2016
- const t = g(/* @__PURE__ */ new Map()), e = g(new _e()), r = Math.floor(i), n = g(r);
2017
- X(() => {
2018
- if (n.current = r, Number.isNaN(r) || r < 0) {
2019
- N.warn(`useLruCache: invalid capacity ${i}; the cache will not store any entries.`), t.current.clear(), e.current = new _e();
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();
2020
2124
  return;
2021
2125
  }
2022
2126
  if (Number.isFinite(r))
@@ -2027,228 +2131,228 @@ function Mr(i) {
2027
2131
  else
2028
2132
  break;
2029
2133
  }
2030
- }, [i, r]);
2134
+ }, [n, r]);
2031
2135
  const s = S((I) => {
2032
2136
  const M = t.current.get(I);
2033
2137
  if (M)
2034
2138
  return e.current.moveToTail(M), M.value;
2035
2139
  }, []), l = S((I, M) => {
2036
- const _ = n.current;
2037
- if (Number.isNaN(_) || _ <= 0)
2140
+ const E = i.current;
2141
+ if (Number.isNaN(E) || E <= 0)
2038
2142
  return;
2039
- let p = t.current.get(I);
2040
- if (p)
2041
- 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);
2042
2146
  else {
2043
- if (t.current.size >= _) {
2044
- const D = e.current.removeHead();
2045
- D && t.current.delete(D.key);
2147
+ if (t.current.size >= E) {
2148
+ const _ = e.current.removeHead();
2149
+ _ && t.current.delete(_.key);
2046
2150
  }
2047
- 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);
2048
2152
  }
2049
- }, []), u = S((I) => t.current.has(I), []), f = S((I) => {
2153
+ }, []), c = S((I) => t.current.has(I), []), d = S((I) => {
2050
2154
  const M = t.current.get(I);
2051
2155
  M && (e.current.remove(M), t.current.delete(I));
2052
2156
  }, []), x = S(() => {
2053
- t.current.clear(), e.current = new _e();
2157
+ t.current.clear(), e.current = new Fe();
2054
2158
  }, []);
2055
- return Vt(() => ({ 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]);
2056
2160
  }
2057
- const Pr = 1e4, Lr = () => {
2058
- const { get: i, set: t, has: e, clear: r } = Mr(Pr);
2059
- return Vt(() => ({ get: i, set: t, has: e, clear: r }), [i, t, e, r]);
2060
- }, ut = (i, t) => t <= 0 ? 0 : pt(i, 0, t - 1), Xe = (i) => ({
2061
- top: Math.max(0, i?.top ?? 0),
2062
- bottom: Math.max(0, i?.bottom ?? 0)
2063
- }), ee = (i, t) => i <= t ? 0 : i - t, ge = (i, t) => i <= 0 ? t : i + t, Ne = 1e3, $e = 2e3, yr = 1048576, Se = (i) => {
2064
- if (!Number.isFinite(i)) return 0n;
2065
- const t = Math.trunc(i);
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);
2066
2170
  return t <= 0 ? 0n : BigInt(t);
2067
- }, wr = (i, t, e, r, n, s, l, u) => {
2068
- const f = Se(r);
2069
- if (f === 0n)
2171
+ }, Cr = (n, t, e, r, i, s, l, c) => {
2172
+ const d = Pe(r);
2173
+ if (d === 0n)
2070
2174
  return { renderingStartIndex: 0, renderingEndIndex: 0, visibleStartIndex: 0, visibleEndIndex: 0 };
2071
- const x = (k) => k < 0n ? 0n : k >= f ? f - 1n : k, I = { materializeOption: { materialize: !1 } }, { index: M, cumulative: _ } = s.findIndexAtOrAfter(i, I);
2072
- let p;
2073
- M === -1 ? p = f - 1n : (_ === i ? p = Se(M + 1) : p = Se(M), p >= f && (p = f - 1n)), i <= 0 && (p = 0n), u && i >= l && (p = f - 1n);
2074
- const D = (k) => {
2075
- const B = Number(k);
2076
- if (!Number.isSafeInteger(B))
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))
2077
2181
  return null;
2078
- const { cumulative: w } = s.prefixSum(B, { materializeOption: { materialize: !1 } });
2079
- if (!Number.isFinite(w))
2182
+ const { cumulative: P } = s.prefixSum(O, { materializeOption: { materialize: !1 } });
2183
+ if (!Number.isFinite(P))
2080
2184
  return null;
2081
- const { index: C } = s.findIndexAtOrAfter(w + 0.5, { materializeOption: { materialize: !1 } });
2082
- if (C === -1)
2185
+ const { index: B } = s.findIndexAtOrAfter(P + 0.5, { materializeOption: { materialize: !1 } });
2186
+ if (B === -1)
2083
2187
  return null;
2084
- const U = Se(C);
2085
- return U > k ? U : null;
2086
- }, J = (k) => {
2087
- let B = 0, w = k, C = k, U = 0n, H = 0;
2088
- for (; w < f && B < t; ) {
2089
- const tt = Number(w), L = n(tt);
2090
- if (B += L, C = w, w += 1n, U += 1n, !Number.isFinite(L) || L < 0)
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)
2091
2195
  break;
2092
- if (L === 0) {
2093
- if (H += 1, H > Ne) {
2094
- const b = D(C);
2095
- if (b !== null && b > w)
2096
- w = b, H = 0;
2097
- else if (b !== null && b === w && n(Number(w)) > 0)
2098
- H = 0;
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;
2099
2203
  else
2100
2204
  break;
2101
2205
  }
2102
2206
  } else
2103
- H = 0;
2207
+ q = 0;
2104
2208
  }
2105
- return U === 0n && (C = k), { height: B, end: C };
2209
+ return N === 0n && (B = D), { height: O, end: B };
2106
2210
  };
2107
- let { height: G, end: rt } = J(p);
2108
- if (G < t && p > 0n) {
2109
- let k = p, B = G, w = 0;
2110
- for (; k > 0n && B < t; ) {
2111
- k -= 1n;
2112
- const U = Number(k), H = n(U);
2113
- if (B += H, !Number.isFinite(H) || H < 0)
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)
2114
2218
  break;
2115
- if (H === 0) {
2116
- if (w += 1, w > Ne) {
2117
- const tt = Number(k);
2118
- if (!Number.isSafeInteger(tt))
2219
+ if (q === 0) {
2220
+ if (P += 1, P > Ve) {
2221
+ const et = Number(D);
2222
+ if (!Number.isSafeInteger(et))
2119
2223
  break;
2120
- const { cumulative: L } = s.prefixSum(tt, { materializeOption: { materialize: !1 } });
2121
- if (!Number.isFinite(L))
2224
+ const { cumulative: G } = s.prefixSum(et, { materializeOption: { materialize: !1 } });
2225
+ if (!Number.isFinite(G))
2122
2226
  break;
2123
- const { index: b } = s.findIndexAtOrAfter(L - 0.5, { materializeOption: { materialize: !1 } }), K = b === -1 ? -1n : Se(b);
2124
- if (K >= 0n && K < k)
2125
- k = K + 1n, w = 0;
2126
- else if (K === k && k >= 1n && n(Number(k - 1n)) > 0)
2127
- w = 0;
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;
2128
2232
  else
2129
2233
  break;
2130
2234
  }
2131
2235
  } else
2132
- w = 0;
2236
+ P = 0;
2133
2237
  }
2134
- p = x(k);
2135
- const C = J(p);
2136
- G = C.height, rt = C.end;
2238
+ h = x(D);
2239
+ const B = z(h);
2240
+ j = B.height, ut = B.end;
2137
2241
  }
2138
- const nt = x(p), st = x(rt), wt = x(nt - BigInt(Math.max(0, e))), At = 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)));
2139
2243
  return {
2140
- renderingStartIndex: ut(Number(wt), r),
2141
- renderingEndIndex: ut(Number(At), r),
2142
- visibleStartIndex: ut(Number(nt), r),
2143
- visibleEndIndex: ut(Number(st), r)
2244
+ renderingStartIndex: gt(Number(mt), r),
2245
+ renderingEndIndex: gt(Number(Tt), r),
2246
+ visibleStartIndex: gt(Number(Q), r),
2247
+ visibleEndIndex: gt(Number(tt), r)
2144
2248
  };
2145
- }, Rr = (i, t, e, r, n, s, l) => {
2249
+ }, Er = (n, t, e, r, i, s, l) => {
2146
2250
  if (r === 0)
2147
2251
  return { renderingStartIndex: 0, renderingEndIndex: 0, visibleStartIndex: 0, visibleEndIndex: 0 };
2148
- const u = Number.isFinite(l), f = u ? Math.min(Math.max(0, i), l) : Math.max(0, i);
2252
+ const c = Number.isFinite(l), d = c ? Math.min(Math.max(0, n), l) : Math.max(0, n);
2149
2253
  if (r >= Number.MAX_SAFE_INTEGER)
2150
- return wr(f, t, e, r, n, s, l, u);
2151
- const { index: x, cumulative: I, currentValue: M } = s.findIndexAtOrAfter(f, { materializeOption: { materialize: !1 } }), _ = x === -1 ? t <= 0 || (I ?? 0) < f + (M ?? 0) ? r - 1 : 0 : x;
2152
- let p = ut(_, r), D = 0;
2153
- if (x !== -1 && I === f)
2154
- p = ut(x + 1, r), D = 0;
2155
- else if (p === x && I !== void 0 && M !== void 0)
2156
- D = I - M - f;
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;
2157
2261
  else {
2158
- const { cumulative: k, currentValue: B } = s.prefixSum(p, { materializeOption: { materialize: !1 } });
2159
- D = (k ?? 0) - (B ?? 0) - f;
2262
+ const { cumulative: D, currentValue: O } = s.prefixSum(h, { materializeOption: { materialize: !1 } });
2263
+ _ = (D ?? 0) - (O ?? 0) - d;
2160
2264
  }
2161
- const J = D, G = (k, B) => {
2162
- let w = k, C = B, U = 0;
2163
- for (; w < r && C < t; ) {
2164
- const H = n(w);
2165
- if (C += H, w++, !Number.isFinite(H) || H < 0)
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)
2166
2270
  break;
2167
- if (H === 0) {
2168
- if (U++, U > Ne) {
2169
- const { cumulative: tt } = s.prefixSum(w - 1, { materializeOption: { materialize: !1 } }), { index: L } = Number.isFinite(tt) ? s.findIndexAtOrAfter(tt + 0.5, { materializeOption: { materialize: !1 } }) : { index: -1 };
2170
- if (L > w)
2171
- w = L, U = 0;
2172
- else if (L === w && n(w) > 0)
2173
- U = 0;
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;
2174
2278
  else
2175
2279
  break;
2176
2280
  }
2177
2281
  } else
2178
- U = 0;
2282
+ N = 0;
2179
2283
  }
2180
- return { cursor: w, height: C };
2181
- }, rt = G(p, D);
2182
- let nt = rt.cursor;
2183
- if (D = rt.height, D < t && p > 0) {
2184
- let k = D + Math.abs(Math.min(0, J)), B = p - 1, w = 0;
2185
- for (; B >= 0 && k < t; ) {
2186
- const U = n(B);
2187
- if (k += U, !Number.isFinite(U) || U < 0) {
2188
- B--;
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--;
2189
2293
  break;
2190
2294
  }
2191
- if (U === 0) {
2192
- if (w++, w > Ne) {
2193
- const { cumulative: H } = s.prefixSum(B, { materializeOption: { materialize: !1 } }), { index: tt } = Number.isFinite(H) ? s.findIndexAtOrAfter(H - 0.5, { materializeOption: { materialize: !1 } }) : { index: -1 };
2194
- if (tt !== -1 && tt < B) {
2195
- B = tt, w = 0;
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;
2196
2300
  continue;
2197
2301
  }
2198
- if (tt === B && B >= 1 && n(B - 1) > 0)
2199
- w = 0;
2302
+ if (et === O && O >= 1 && i(O - 1) > 0)
2303
+ P = 0;
2200
2304
  else {
2201
- B--;
2305
+ O--;
2202
2306
  break;
2203
2307
  }
2204
2308
  }
2205
2309
  } else
2206
- w = 0;
2207
- B--;
2310
+ P = 0;
2311
+ O--;
2208
2312
  }
2209
- p = ut(B + 1, r);
2210
- const C = G(p, 0);
2211
- nt = C.cursor, D = C.height;
2313
+ h = gt(O + 1, r);
2314
+ const B = j(h, 0);
2315
+ Q = B.cursor, _ = B.height;
2212
2316
  }
2213
- const st = ut(p - e, r), wt = ut(Math.max(nt - 1, p), r), At = ut(wt + e, r);
2214
- return { renderingStartIndex: st, renderingEndIndex: At, visibleStartIndex: p, visibleEndIndex: wt };
2215
- }, Ue = (i, t, e) => {
2216
- const r = Math.max(0, t ?? 0), n = g({ last: 0, id: null, arg: null }).current;
2217
- return X(
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(
2218
2322
  () => () => {
2219
- n.id !== null && (cancelAnimationFrame(n.id), n.id = null);
2323
+ i.id !== null && (cancelAnimationFrame(i.id), i.id = null);
2220
2324
  },
2221
- [n]
2325
+ [i]
2222
2326
  ), S(
2223
2327
  (s) => {
2224
- if (n.arg = s, n.id !== null) return;
2225
- const l = (u) => {
2226
- if (n.id = null, n.arg === null) return;
2227
- const f = u - n.last;
2228
- if (r === 0 || n.last === 0 || f >= r) {
2229
- if (i.current)
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)
2230
2334
  try {
2231
- e(i.current, n.arg);
2335
+ e(n.current, i.arg);
2232
2336
  } catch (x) {
2233
2337
  console.error("[useThrottledInvoker] Error invoking callback", x);
2234
2338
  }
2235
- n.arg = null, n.last = u;
2339
+ i.arg = null, i.last = c;
2236
2340
  }
2237
- n.arg !== null && (n.id = requestAnimationFrame(l));
2341
+ i.arg !== null && (i.id = requestAnimationFrame(l));
2238
2342
  };
2239
- n.id = requestAnimationFrame(l);
2343
+ i.id = requestAnimationFrame(l);
2240
2344
  },
2241
- [r, e, i, n]
2345
+ [r, e, n, i]
2242
2346
  );
2243
- }, Cr = Qe.memo(({ index: i, top: t, height: e, item: r, children: n, clipItemHeight: s, enableKeyboardNavigation: l, onKeyDown: u, onFocus: f, registerItemRef: x }) => {
2244
- const I = S((D) => x(i, D), [i, x]), M = S((D) => u(D, i), [i, u]), _ = S(() => f(i), [i, f]), p = S((D) => {
2245
- D.currentTarget.focus({ preventScroll: !0 });
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 });
2246
2350
  }, []);
2247
- return /* @__PURE__ */ Q(
2351
+ return /* @__PURE__ */ st(
2248
2352
  "div",
2249
2353
  {
2250
2354
  ref: I,
2251
- "data-index": i,
2355
+ "data-index": n,
2252
2356
  "data-virtualscroll-item": "true",
2253
2357
  className: "aqvs-item-container",
2254
2358
  style: {
@@ -2257,134 +2361,134 @@ const Pr = 1e4, Lr = () => {
2257
2361
  overflow: s ? "hidden" : void 0
2258
2362
  },
2259
2363
  tabIndex: l ? -1 : void 0,
2260
- onPointerDown: l ? p : void 0,
2364
+ onPointerDown: l ? h : void 0,
2261
2365
  onKeyDownCapture: l ? M : void 0,
2262
- onFocusCapture: l ? _ : void 0,
2263
- children: n(r, i)
2366
+ onFocusCapture: l ? E : void 0,
2367
+ children: i(r, n)
2264
2368
  }
2265
2369
  );
2266
- }), Er = ({
2267
- itemCount: i,
2370
+ }), Vr = ({
2371
+ itemCount: n,
2268
2372
  getItem: t,
2269
2373
  getItemKey: e,
2270
2374
  getItemHeight: r,
2271
- viewportSize: n,
2375
+ viewportSize: i,
2272
2376
  overscanCount: s = 15,
2273
2377
  className: l,
2274
- testId: u,
2275
- onScroll: f,
2378
+ testId: c,
2379
+ onScroll: d,
2276
2380
  onRangeChange: x,
2277
2381
  children: I,
2278
2382
  background: M,
2279
- initialScrollIndex: _,
2280
- initialScrollOffset: p,
2281
- callbackThrottleMs: D = 5,
2282
- contentInsets: J,
2283
- onItemFocus: G,
2284
- scrollBarOptions: rt,
2285
- behaviorOptions: nt,
2286
- onWheelHorizontal: st
2287
- }, wt) => {
2288
- const { width: At, enableThumbDrag: k, enableTrackClick: B, enableArrowButtons: w, enableScrollToTopBottomButtons: C, renderThumbOverlay: U, tapScrollCircleOptions: H } = rt ?? {}, { enablePointerDrag: tt, enableKeyboardNavigation: L = !0, wheelSpeedMultiplier: b, inertiaOptions: K, clipItemHeight: dt = !1, resetOnGetItemHeightChange: et = !1 } = nt ?? {}, Y = g(null), j = g({
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({
2289
2393
  renderingStartIndex: 0,
2290
2394
  renderingEndIndex: 0,
2291
2395
  visibleStartIndex: 0,
2292
2396
  visibleEndIndex: 0,
2293
2397
  scrollPosition: 0,
2294
2398
  totalHeight: 0
2295
- }), ht = g(null), St = g(!1);
2296
- X(() => {
2297
- et && (ht.current = null);
2298
- }, [et, r]);
2299
- const R = Vt(() => Xe(J), [J]), [Ft] = jt(() => {
2300
- const c = typeof _ == "number" && Number.isFinite(_) ? Math.max(0, Math.trunc(_)) : 0;
2301
- return { from: Math.max(0, c - 50), to: c + 50 };
2302
- }), Lt = Vt(
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(
2303
2407
  // 目的: Fenwick Tree のオプション設定
2304
2408
  // 依存関係: resetOnGetItemHeightChange, initialSampleRange (マウント時固定)
2305
2409
  // itemCount には依存させない (依存させると追記のたびに options 参照が変わり、計測済み高さが全消去される)。
2306
2410
  // この useMemo により sampleRange を毎レンダー新規生成しない = 参照同一性由来の破壊的 reset を防ぐ。
2307
2411
  () => ({
2308
- sampleRange: Ft,
2309
- resetOnValueFnChange: et,
2412
+ sampleRange: Yt,
2413
+ resetOnValueFnChange: Z,
2310
2414
  materialize: !0
2311
2415
  }),
2312
- [et, Ft]
2313
- ), v = Tr(i, r, Lt), [kt] = jt(() => {
2314
- let o = 0, c = 0;
2315
- if (typeof _ == "number") {
2316
- const d = pt(_, 0, i - 1), y = pt(d - s * 2, 0, i - 1), z = pt(d + s * 2, 0, i - 1), E = _ > 0 ? { materializeOption: { materialize: !0, ranges: [{ from: y, to: z }] } } : void 0, { cumulative: q, total: $, currentValue: lt } = v.prefixSum(_, E), Z = Math.max(q - lt, 0);
2317
- o = ge(Z, R.top), c = $ ?? v.getTotal();
2318
- } else typeof p == "number" && (o = ge(Math.max(p, 0), R.top)), c = v.getTotal();
2319
- return { position: o, total: c };
2320
- }), [_t, Gt] = jt(kt.position), [T, O] = jt(kt.total), A = g(kt.position), Mt = g(R.top), gt = g(f ?? void 0), bt = g(x ?? void 0), Rt = g(/* @__PURE__ */ new Map()), W = g(null), at = g(null), [ft, Zt] = jt(null), [Ot, Ct] = jt(!1), Et = g(null), Xt = g(!1), ct = g(0), xt = g(!1), m = g(!1), V = g(i);
2321
- V.current !== i && (V.current = i, m.current = !0), X(() => {
2322
- gt.current = f ?? void 0, bt.current = x ?? void 0;
2323
- }, [x, f]);
2324
- 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(
2325
2429
  (o) => {
2326
- if (L && o && typeof o.focus == "function")
2430
+ if (p && o && typeof o.focus == "function")
2327
2431
  try {
2328
2432
  o.focus({ preventScroll: !0 });
2329
2433
  } catch {
2330
2434
  o.focus();
2331
2435
  }
2332
2436
  },
2333
- [L]
2334
- ), vt = S((o, { position: c, totalHeight: d }) => {
2335
- o(c, d);
2336
- }, []), mt = Ue(gt, D, vt), se = S((o, c) => {
2337
- o(c);
2338
- }, []), Nt = Ue(bt, D, se), $t = g(R.top);
2339
- $t.current = R.top;
2340
- const Ht = g(mt);
2341
- Ht.current = mt, X(() => (St.current = !1, () => {
2342
- St.current = !0, Et.current && (clearTimeout(Et.current), Et.current = null);
2343
- }), []), X(() => {
2344
- L || (Rt.current.clear(), W.current = null, at.current = null);
2345
- }, [L]);
2346
- const Dt = S(
2347
- (o, c) => {
2348
- if (!c) {
2349
- Rt.current.delete(o);
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);
2350
2454
  return;
2351
2455
  }
2352
- L && (Rt.current.set(o, c), W.current === o && (W.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)));
2353
2457
  },
2354
- [L, It]
2355
- ), zt = 0.01, Ut = g({
2458
+ [p, ct]
2459
+ ), Ut = 0.01, Ft = T({
2356
2460
  rafId: null,
2357
2461
  loopActive: !1,
2358
2462
  idleFrames: 0,
2359
- lastRenderedPosition: kt.position
2360
- }), ae = S(() => {
2361
- const o = Ut.current;
2463
+ lastRenderedPosition: Xt.position
2464
+ }), ie = S(() => {
2465
+ const o = Ft.current;
2362
2466
  o.rafId !== null && typeof cancelAnimationFrame == "function" && cancelAnimationFrame(o.rafId), o.rafId = null, o.loopActive = !1, o.idleFrames = 0;
2363
2467
  }, []);
2364
- X(
2468
+ Y(
2365
2469
  () => () => {
2366
- ae();
2470
+ ie();
2367
2471
  },
2368
- [ae]
2472
+ [ie]
2369
2473
  );
2370
- const Me = g(() => {
2474
+ const xe = T(() => {
2371
2475
  }), de = S(() => {
2372
- const o = Ut.current;
2476
+ const o = Ft.current;
2373
2477
  o.rafId = null;
2374
- const c = A.current, d = ee(c, $t.current), y = v.getTotal();
2375
- if (Gt((E) => Math.abs(E - c) < zt ? E : c), Math.abs(o.lastRenderedPosition - c) >= zt ? (Ht.current({ position: d, totalHeight: y }), o.lastRenderedPosition = c, o.idleFrames = 0) : o.idleFrames += 1, o.idleFrames >= 2) {
2376
- ae();
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();
2377
2481
  return;
2378
2482
  }
2379
2483
  if (typeof requestAnimationFrame == "function") {
2380
- o.rafId = requestAnimationFrame((E) => Me.current(E));
2484
+ o.rafId = requestAnimationFrame((F) => xe.current(F));
2381
2485
  return;
2382
2486
  }
2383
2487
  o.loopActive = !1;
2384
- }, [v, ae]);
2385
- Me.current = de;
2386
- const xe = S(() => {
2387
- const o = Ut.current;
2488
+ }, [v, ie]);
2489
+ xe.current = de;
2490
+ const Ie = S(() => {
2491
+ const o = Ft.current;
2388
2492
  if (o.idleFrames = 0, !o.loopActive) {
2389
2493
  if (o.loopActive = !0, typeof requestAnimationFrame == "function") {
2390
2494
  o.rafId = requestAnimationFrame(de);
@@ -2392,440 +2496,444 @@ const Pr = 1e4, Lr = () => {
2392
2496
  }
2393
2497
  o.loopActive = !1;
2394
2498
  }
2395
- }, [de]), it = S(
2396
- (o, c) => {
2397
- const d = c?.immediate ?? !1, y = ee(o, R.top);
2398
- if (A.current = o, d) {
2399
- Ut.current.lastRenderedPosition = o, Ut.current.idleFrames = 0, Gt(o), mt({ position: y, totalHeight: v.getTotal() });
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() });
2400
2504
  return;
2401
2505
  }
2402
- xe();
2506
+ Ie();
2403
2507
  },
2404
- [xe, v, R.top, mt]
2405
- ), Yt = S((o) => {
2406
- const c = Y.current;
2407
- if (!c)
2508
+ [Ie, v, y.top, w]
2509
+ ), zt = S((o) => {
2510
+ const u = k.current;
2511
+ if (!u)
2408
2512
  return o;
2409
- const d = c.getScrollPosition();
2410
- ct.current += 1;
2411
- const y = c.scrollTo(o);
2412
- return y === d && (ct.current = Math.max(0, ct.current - 1)), Math.abs(y - o) > 0.5 && (xt.current = !0), y;
2413
- }, []), Kt = g(!1);
2414
- X(() => {
2415
- if (!Kt.current)
2416
- if (Kt.current = !0, typeof p == "number") {
2417
- const o = ge(Math.max(p, 0), R.top), c = Math.abs(o - A.current) > 0.5;
2418
- it(o, { immediate: !0 }), c && Y.current?.scrollTo(o);
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);
2419
2523
  } else
2420
- it(A.current, { immediate: !0 });
2421
- }, [p, R.top, it]), X(() => {
2524
+ nt(f.current, { immediate: !0 });
2525
+ }, [h, y.top, nt]), Y(() => {
2422
2526
  const o = v.getTotal();
2423
- if (T !== o) {
2424
- O(o);
2527
+ if (at !== o) {
2528
+ jt(o);
2425
2529
  return;
2426
2530
  }
2427
- if (xt.current) {
2428
- xt.current = !1;
2429
- const c = Y.current;
2430
- if (c && Math.abs(c.getScrollPosition() - A.current) > 0.5) {
2431
- const d = Yt(A.current);
2432
- xt.current = !1, it(d, { immediate: !0 });
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 });
2433
2537
  }
2434
2538
  }
2435
- }, [v, T, i, Yt, it]), X(() => {
2436
- if (ht.current !== null) {
2437
- const { index: o, align: c, offset: d } = ht.current, y = ut(o, i), { cumulative: z, currentValue: E } = v.prefixSum(y, { materializeOption: { materialize: !1 } });
2438
- if (z !== void 0 && E !== void 0) {
2439
- const q = Math.max(z - E, 0);
2440
- let $ = q;
2441
- c === "bottom" ? $ = z - n : c === "center" && ($ = q + E / 2 - n / 2), d && ($ -= d), $ = Math.max(0, $);
2442
- const lt = Math.max(0, T + R.top + R.bottom - n), Z = Math.min(ge($, R.top), lt);
2443
- Math.abs(Z - A.current) > 1 && (N.debug("[VirtualScroll] Drift correction", {
2444
- from: A.current,
2445
- to: Z,
2446
- targetIndex: y
2447
- }), ct.current === 0 && (ct.current += 1), Y.current?.scrollTo(Z), it(Z, { immediate: !0 }));
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 }));
2448
2552
  }
2449
2553
  }
2450
- m.current = !1;
2451
- }, [T, v, i, R.top, it, n, R.bottom]), X(() => {
2452
- const o = Mt.current;
2453
- if (o === R.top) return;
2454
- const c = ee(A.current, o), d = ge(c, R.top);
2455
- Mt.current = R.top, A.current = d, Y.current?.scrollTo(d), it(d, { immediate: !0 });
2456
- }, [R.top, it]);
2457
- const Ie = S(
2458
- (o, c) => {
2459
- if (i === 0)
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)
2460
2564
  return;
2461
- const d = ut(o, i), y = v.get(d), z = c - y, E = v.update(d, c);
2462
- E !== void 0 && O(E), N.debug("[VirtualScroll] Updated item size manually", { index: d, size: c, total: E });
2463
- let q = ht.current ? ht.current.index : null;
2464
- if (q === null) {
2465
- const $ = A.current, lt = Xe(J).top, Z = ee($, lt), { index: ot, cumulative: Pt } = v.findIndexAtOrAfter(Z, { materializeOption: { materialize: !1 } });
2466
- q = Pt !== void 0 && Pt === Z ? ot + 1 : ot;
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;
2467
2571
  }
2468
- if (q !== -1 && d < q && z !== 0) {
2469
- const $ = A.current, lt = $ + z;
2470
- Yt(lt), it(lt, { immediate: !0 }), N.debug("[VirtualScroll] Adjusted scroll for layout shift (manual update)", { from: $, to: lt, causedByIndex: d, delta: z, activeVisibleStartIndex: q });
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 });
2471
2575
  }
2472
2576
  },
2473
- [v, i, Yt, it, J]
2474
- ), Bt = S(
2475
- (o, c) => {
2476
- if (!Y.current || i === 0)
2577
+ [v, n, zt, nt, z]
2578
+ ), Wt = S(
2579
+ (o, u) => {
2580
+ if (!k.current || n === 0)
2477
2581
  return;
2478
- const d = ut(o, i), y = ut(d - s * 2, i), z = ut(d + s * 2, i), { cumulative: E, total: q, currentValue: $ } = v.prefixSum(d, { materializeOption: { materialize: !0, ranges: [{ from: y, to: z }] } });
2479
- if (N.debug("[VirtualScroll] Scrolling to index:", d, "ItemBottom:", E, "Total height:", q, "ItemHeight:", $, "safeIndexFrom:", y, "safeIndexTo:", z), !q)
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)
2480
2584
  return;
2481
- const lt = Math.max(E - $, 0);
2482
- let Z = lt;
2483
- c?.align === "bottom" ? Z = E - n : c?.align === "center" && (Z = lt + $ / 2 - n / 2), c?.offset && (Z -= c.offset), Z = Math.max(0, Z);
2484
- const ot = ge(Z, R.top), Pt = Y.current?.getContentSize() ?? q + R.top + R.bottom, Tt = Math.max(0, Pt - n), yt = Math.min(ot, Tt);
2485
- ht.current = {
2486
- index: d,
2487
- align: c?.align,
2488
- offset: c?.offset
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
2489
2593
  };
2490
- const le = Y.current?.getScrollPosition() ?? -1, ie = Math.abs(le - yt) > 0.5;
2491
- Xt.current = !1, ct.current = 0, ie && (Xt.current = !0, ct.current += 1, Y.current?.scrollTo(yt)), O(q), it(yt, { immediate: !0 }), N.debug("[VirtualScroll] Setting scroll position to:", yt, { original: ot, max: Tt });
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 });
2492
2596
  },
2493
- [v, s, i, R.top, R.bottom, n, it]
2494
- ), Pe = S(
2597
+ [v, s, n, y.top, y.bottom, i, nt]
2598
+ ), ye = S(
2495
2599
  (o) => {
2496
- if (!Y.current || i === 0)
2600
+ if (!k.current || n === 0)
2497
2601
  return;
2498
- const c = v.getTotal(), d = pt(Math.floor(o), 0, c), { index: y, cumulative: z, currentValue: E } = v.findIndexAtOrAfter(d, { materializeOption: { materialize: !1 } }), $ = (z ?? 0) - (E ?? 0) - d;
2499
- Bt(y, { offset: $ });
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 });
2500
2604
  },
2501
- [v, i, Bt]
2502
- ), ye = S(
2605
+ [v, n, Wt]
2606
+ ), fe = S(
2503
2607
  (o) => {
2504
- const c = ee(A.current, R.top), d = typeof o == "function" ? o(c) : o;
2505
- Pe(d);
2506
- const y = Y.current?.getScrollPosition(), z = typeof y == "number" ? y : A.current;
2507
- return it(z), z;
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;
2508
2612
  },
2509
- [R.top, Pe, it]
2510
- ), ve = S(
2511
- (o, c) => {
2512
- N.debug("[VirtualScroll] Scroll position changed:", o);
2513
- const d = Xt.current;
2514
- d && (Xt.current = !1);
2515
- const y = ct.current > 0;
2516
- if (y && (ct.current = 0), d || y || m.current || (ht.current = null), it(o), C) {
2517
- if (d || y)
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)
2518
2622
  return;
2519
- const z = o - c;
2520
- if (N.debug("[VirtualScroll] Scroll diff:", z, "New:", o, "Prev:", c), Math.abs(z) > 1) {
2521
- const E = z > 0 ? "down" : "up";
2522
- Zt(E), Ct(!0), N.debug("[VirtualScroll] Showing scroll buttons. Direction:", E), Et.current && clearTimeout(Et.current), Et.current = setTimeout(() => {
2523
- Ct(!1), N.debug("[VirtualScroll] Hiding scroll buttons");
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");
2524
2628
  }, 2e3);
2525
2629
  }
2526
2630
  }
2527
2631
  },
2528
- [it, C]
2529
- ), Jt = Vt(() => ee(_t, R.top), [R.top, _t]), re = Vt(() => {
2530
- const o = v.getTotal(), c = Rr(Jt, n, s, i, r, v, o);
2531
- return N.debug("[VirtualScroll] Calculated rendering range:", () => ({
2532
- ...c,
2533
- scrollPosition: Jt,
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,
2534
2638
  renderingContentSize: o,
2535
2639
  overscanCount: s,
2536
- viewportSize: n
2537
- })), c;
2538
- }, [Jt, n, s, i, r, v]), { renderingStartIndex: Qt, renderingEndIndex: qt, visibleStartIndex: ne, visibleEndIndex: fe } = re, te = S(
2539
- (o, c) => {
2540
- if (!L || i === 0)
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)
2541
2645
  return;
2542
- const d = ut(o, i);
2543
- if (!(c?.ensureVisible ?? !0)) {
2544
- const Tt = Rt.current.get(d);
2545
- Tt && (W.current = null, at.current = d, It(Tt));
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));
2546
2650
  return;
2547
2651
  }
2548
- const z = v.prefixSum(d, { materializeOption: { materialize: !1 } }), E = z.currentValue, q = Math.max(z.cumulative - E, 0), $ = q + E, lt = ee(A.current, R.top), Z = lt + n;
2549
- if (q < lt || $ > Z) {
2550
- Bt(d);
2551
- const Tt = Rt.current.get(d);
2552
- Tt ? (W.current = null, at.current = d, It(Tt)) : W.current = d;
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;
2553
2657
  return;
2554
2658
  }
2555
- const Pt = Rt.current.get(d);
2556
- if (Pt) {
2557
- W.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);
2558
2662
  return;
2559
2663
  }
2560
- W.current = d;
2664
+ J.current = m;
2561
2665
  },
2562
- [L, i, v, R.top, Bt, It, n]
2666
+ [p, n, v, y.top, Wt, ct, i]
2563
2667
  ), we = S(
2564
- (o, c) => {
2565
- if (!L || o.defaultPrevented || o.altKey || o.metaKey || o.ctrlKey)
2668
+ (o, u) => {
2669
+ if (!p || o.defaultPrevented || o.altKey || o.metaKey || o.ctrlKey)
2566
2670
  return;
2567
- const d = o.target;
2568
- if (d) {
2569
- const y = d.tagName;
2570
- 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)
2571
2675
  return;
2572
2676
  }
2573
2677
  if (o.key === "ArrowDown") {
2574
- c < i - 1 && (o.preventDefault(), te(c + 1));
2678
+ u < n - 1 && (o.preventDefault(), re(u + 1));
2575
2679
  return;
2576
2680
  }
2577
2681
  if (o.key === "ArrowUp") {
2578
- c > 0 && (o.preventDefault(), te(c - 1));
2682
+ u > 0 && (o.preventDefault(), re(u - 1));
2579
2683
  return;
2580
2684
  }
2581
2685
  if (o.key === "PageDown") {
2582
- if (c < i - 1) {
2686
+ if (u < n - 1) {
2583
2687
  o.preventDefault();
2584
- const { visibleStartIndex: y, visibleEndIndex: z } = j.current, E = Math.max(z - y + 1, 1), q = Math.max(E, 1), $ = ut(Math.min(c + q, i - 1), i);
2585
- te($);
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);
2586
2690
  }
2587
2691
  return;
2588
2692
  }
2589
- if (o.key === "PageUp" && c > 0) {
2693
+ if (o.key === "PageUp" && u > 0) {
2590
2694
  o.preventDefault();
2591
- const { visibleStartIndex: y, visibleEndIndex: z } = j.current, E = Math.max(z - y + 1, 1), q = Math.max(E, 1), $ = ut(c - q, i);
2592
- te($);
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);
2593
2697
  }
2594
2698
  },
2595
- [L, i, te]
2699
+ [p, n, re]
2596
2700
  ), Re = S(
2597
2701
  (o) => {
2598
- if (!L)
2702
+ if (!p)
2599
2703
  return;
2600
- const c = ut(o, i);
2601
- W.current = null, at.current = c, G?.(c);
2704
+ const u = gt(o, n);
2705
+ J.current = null, yt.current = u, j?.(u);
2602
2706
  },
2603
- [L, i, G]
2707
+ [p, n, j]
2604
2708
  );
2605
- X(() => {
2606
- const o = Y.current?.getScrollPosition() ?? 0, c = A.current, d = ee(c, R.top);
2607
- N.debug("[VirtualScroll] Range change effect triggered", () => ({
2608
- renderingStartIndex: Qt,
2609
- renderingEndIndex: qt,
2610
- visibleStartIndex: ne,
2611
- visibleEndIndex: fe,
2612
- scrollPositionState: _t,
2613
- paneScrollPosition: c,
2614
- logicalScrollPosition: d,
2615
- contentSize: T,
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,
2616
2720
  scrollPaneScrollPosition: o
2617
- })), Nt({
2618
- renderingStartIndex: Qt,
2619
- renderingEndIndex: qt,
2620
- visibleStartIndex: ne,
2621
- visibleEndIndex: fe,
2622
- scrollPosition: d,
2623
- totalHeight: T
2721
+ })), qt({
2722
+ renderingStartIndex: Kt,
2723
+ renderingEndIndex: ee,
2724
+ visibleStartIndex: oe,
2725
+ visibleEndIndex: me,
2726
+ scrollPosition: m,
2727
+ totalHeight: at
2624
2728
  });
2625
- }, [T, qt, Qt, R.top, Nt, _t, fe, ne]);
2626
- const Ve = S(() => C ? /* @__PURE__ */ Q("div", { className: "aqvs-scroll-to-edge-overlay", "data-visible": Ot && ft !== null, children: ft === "up" ? /* @__PURE__ */ Q("div", { className: "aqvs-scroll-to-edge-button-container aqvs-scroll-to-edge-button-container-top", children: /* @__PURE__ */ Q(
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(
2627
2731
  "button",
2628
2732
  {
2629
2733
  type: "button",
2630
2734
  className: "aqvs-scroll-to-edge-button",
2631
- onClick: (d) => {
2632
- d.stopPropagation(), Xt.current = !0, Bt(0), Ct(!1);
2735
+ onClick: (m) => {
2736
+ m.stopPropagation(), ft.current = !0, Wt(0), Dt(!1);
2633
2737
  },
2634
2738
  children: "Top"
2635
2739
  }
2636
- ) }) : /* @__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(
2637
2741
  "button",
2638
2742
  {
2639
2743
  type: "button",
2640
2744
  className: "aqvs-scroll-to-edge-button",
2641
- onClick: (d) => {
2642
- d.stopPropagation(), Xt.current = !0, Bt(i - 1), Ct(!1);
2745
+ onClick: (m) => {
2746
+ m.stopPropagation(), ft.current = !0, Wt(n - 1), Dt(!1);
2643
2747
  },
2644
2748
  children: "Bottom"
2645
2749
  }
2646
- ) }) }) : null, [C, Ot, ft, Bt, i]), me = g(0), { visibleItems: pe, renderAnchor: a } = Vt(() => {
2647
- if (i === 0)
2750
+ ) }) }) : null, [B, rt, wt, Wt, n]), pe = T(0), { visibleItems: a, renderAnchor: b } = At(() => {
2751
+ if (n === 0)
2648
2752
  return {
2649
- 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" }) }),
2650
2754
  renderAnchor: 0
2651
2755
  };
2652
- const o = ut(Qt, i), c = ut(qt, i), { cumulative: d, currentValue: y } = v.prefixSum(o, { materializeOption: { materialize: !1 } }), z = d - y;
2653
- Number.isFinite(z) && Math.abs(z - me.current) > yr && (me.current = z);
2654
- const E = me.current, q = [], $ = [];
2655
- let lt = 0, Z = z;
2656
- for (let ot = o; ot <= c; ot++) {
2657
- if ($.length >= $e) {
2658
- N.warn("[VirtualScroll] Rendered item count reached the safety cap; truncating render window.", { cap: $e, safeRenderingStartIndex: o, safeRenderingEndIndex: c });
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 });
2659
2763
  break;
2660
2764
  }
2661
- const Pt = r(ot), Tt = v.get(ot), yt = Pt - Tt;
2662
- yt !== 0 && q.push({ index: ot, value: Pt });
2663
- const le = Z + lt, ie = e ? e(ot) : ot;
2664
- $.push(
2665
- /* @__PURE__ */ Q(
2666
- Cr,
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,
2667
2771
  {
2668
- index: ot,
2669
- top: le - E,
2670
- height: Pt,
2671
- item: t(ot),
2672
- clipItemHeight: dt,
2673
- enableKeyboardNavigation: L,
2772
+ index: ht,
2773
+ top: Se - F,
2774
+ height: kt,
2775
+ item: t(ht),
2776
+ clipItemHeight: Rt,
2777
+ enableKeyboardNavigation: p,
2674
2778
  onKeyDown: we,
2675
2779
  onFocus: Re,
2676
- registerItemRef: Dt,
2780
+ registerItemRef: vt,
2677
2781
  children: I
2678
2782
  },
2679
- ie
2783
+ De
2680
2784
  )
2681
- ), lt += yt, Z += Tt;
2785
+ ), Pt += Ot, pt += Vt;
2682
2786
  }
2683
- return q.length > 0 && Promise.resolve().then(() => {
2684
- if (St.current)
2787
+ return K.length > 0 && Promise.resolve().then(() => {
2788
+ if (Et.current)
2685
2789
  return;
2686
- let ot = 0;
2687
- for (const yt of q)
2688
- if (yt.index < ne) {
2689
- const le = v.get(yt.index);
2690
- ot += yt.value - le;
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;
2691
2795
  }
2692
- const Pt = v.updates(q);
2693
- if (St.current || typeof Pt != "number")
2796
+ const kt = v.updates(K);
2797
+ if (Et.current || typeof kt != "number")
2694
2798
  return;
2695
- O(Pt), N.debug("[VirtualScroll] Updated heights for items", q, "New total height:", Pt);
2696
- const Tt = Y.current?.getScrollPosition() ?? A.current;
2697
- if (ot !== 0) {
2698
- const yt = Tt + ot;
2699
- Yt(yt), it(yt, { immediate: !0 }), N.debug("[VirtualScroll] Adjusted scroll for layout shift (auto update)", { from: Tt, to: yt, shiftAmount: ot });
2700
- } else Tt !== A.current && it(Tt);
2701
- }), { visibleItems: $, renderAnchor: E };
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 };
2702
2806
  }, [
2703
2807
  I,
2704
- dt,
2705
- T,
2706
- L,
2707
- i,
2808
+ Rt,
2809
+ at,
2810
+ p,
2811
+ n,
2708
2812
  v,
2709
2813
  t,
2710
2814
  e,
2711
2815
  r,
2712
2816
  Re,
2713
2817
  we,
2714
- Yt,
2715
- Dt,
2716
- qt,
2717
- Qt,
2718
- it,
2719
- ne
2720
- ]), h = S(
2818
+ zt,
2819
+ vt,
2820
+ ee,
2821
+ Kt,
2822
+ nt,
2823
+ oe
2824
+ ]), R = S(
2721
2825
  (o) => {
2722
- const c = (D ?? 0) > 0, d = Math.abs(o - _t), y = c && d > 0.5 ? _t : o, z = ee(y, R.top);
2723
- if (N.debug("[VirtualScroll] Rendering visible items", () => ({
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", () => ({
2724
2828
  currentScrollPosition: o,
2725
- effectiveScrollPosition: z,
2726
- renderingStartIndex: Qt,
2727
- renderingEndIndex: qt,
2728
- itemCount: i,
2729
- viewportSize: n,
2730
- callbackThrottleMs: D,
2731
- diff: d,
2732
- rawEffectiveScrollPosition: y
2733
- })), i === 0)
2734
- return pe;
2735
- const E = R.top + a - y, q = R.bottom > 0 ? /* @__PURE__ */ Q(
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(
2736
2840
  "div",
2737
2841
  {
2738
2842
  className: "aqvs-bottom-inset",
2739
2843
  style: {
2740
2844
  // ラッパー座標での bottom インセット位置 = コンテンツ総高さ (最終行の下端) - アンカー。
2741
- top: v.getTotal() - a,
2742
- height: R.bottom
2845
+ top: v.getTotal() - b,
2846
+ height: y.bottom
2743
2847
  }
2744
2848
  },
2745
2849
  "virtualscroll-bottom-inset"
2746
2850
  ) : null;
2747
- return N.debug("[VirtualScroll] Rendering items", () => ({
2748
- containerTop: E,
2749
- logicalScrollPosition: Jt,
2750
- resolvedInsets: R,
2751
- effectiveScrollPosition: z
2752
- })), /* @__PURE__ */ ue("div", { className: "aqvs-items-wrapper", style: { top: 0, transform: `translateY(${E}px)`, willChange: "transform" }, children: [
2753
- pe,
2754
- q
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
2755
2859
  ] });
2756
2860
  },
2757
- [D, i, v, Jt, a, qt, Qt, R, _t, n, pe]
2758
- ), P = Vt(
2861
+ [_, n, v, te, b, ee, Kt, y, Bt, i, a]
2862
+ ), L = At(
2759
2863
  () => ({
2760
- renderingStartIndex: re.renderingStartIndex,
2761
- renderingEndIndex: re.renderingEndIndex,
2762
- visibleStartIndex: re.visibleStartIndex,
2763
- visibleEndIndex: re.visibleEndIndex,
2764
- scrollPosition: Jt,
2864
+ renderingStartIndex: se.renderingStartIndex,
2865
+ renderingEndIndex: se.renderingEndIndex,
2866
+ visibleStartIndex: se.visibleStartIndex,
2867
+ visibleEndIndex: se.visibleEndIndex,
2868
+ scrollPosition: te,
2765
2869
  totalHeight: v.getTotal()
2766
2870
  // contentSize (State) ではなく最新値を反映
2767
2871
  }),
2768
2872
  // contentSize を依存に含めることで、updateItemSize/updates 等で木の総高さが変わった際に
2769
2873
  // (fenwickTree は安定参照のため getTotal() の変化だけでは再計算されない) 総高さを再取得する。
2770
- [re, Jt, v, T]
2874
+ [se, te, v, at]
2771
2875
  );
2772
- X(() => {
2773
- j.current = P;
2774
- }, [P]), ze(
2775
- wt,
2876
+ Y(() => {
2877
+ Ct.current = L;
2878
+ }, [L]), Be(
2879
+ mt,
2776
2880
  () => ({
2777
- getScrollPosition: () => Y.current?.getScrollPosition() ?? -1,
2778
- getContentSize: () => Y.current?.getContentSize() ?? -1,
2779
- getViewportSize: () => Y.current?.getViewportSize() ?? -1,
2780
- scrollTo: ye,
2781
- 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,
2782
2886
  getFenwickTreeTotalHeight: () => v.getTotal(),
2783
2887
  getFenwickSize: () => v.getSize(),
2784
- focusItemAtIndex: te,
2785
- getRange: () => j.current,
2786
- updateItemSize: Ie
2888
+ focusItemAtIndex: re,
2889
+ getRange: () => Ct.current,
2890
+ updateItemSize: ve
2787
2891
  }),
2788
- [ye, Bt, v, te, Ie]
2892
+ [fe, Wt, v, re, ve]
2789
2893
  );
2790
- const F = v.getTotal() + R.top + R.bottom;
2791
- return /* @__PURE__ */ Q(
2792
- xr,
2894
+ const X = v.getTotal() + y.top + y.bottom;
2895
+ return /* @__PURE__ */ st(
2896
+ Tr,
2793
2897
  {
2794
- ref: Y,
2795
- contentSize: F,
2796
- viewportSize: n,
2898
+ ref: k,
2899
+ contentSize: X,
2900
+ viewportSize: i,
2797
2901
  className: l,
2798
- testId: u,
2799
- onScroll: ve,
2902
+ testId: c,
2903
+ onScroll: Ae,
2800
2904
  background: M,
2801
- tapScrollCircleOptions: H,
2802
- inertiaOptions: K,
2803
- itemCount: i,
2804
- scrollBarWidth: At,
2805
- enableThumbDrag: k,
2806
- enableTrackClick: B,
2807
- enableArrowButtons: w,
2808
- enablePointerDrag: tt,
2809
- renderThumbOverlay: U,
2810
- wheelSpeedMultiplier: b,
2811
- onWheelHorizontal: st,
2812
- contentInsets: R,
2813
- visibleStartIndex: ne,
2814
- visibleEndIndex: fe,
2815
- renderOverlay: Ve,
2816
- initialScrollPosition: kt.position,
2817
- children: h
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
2818
2923
  }
2819
2924
  );
2820
- }, _r = Fe(Er);
2925
+ }, Or = Ye(Vr);
2821
2926
  export {
2822
- oe as FenwickMapTree,
2823
- br as ScrollBar,
2824
- xr as ScrollPane,
2825
- _r as VirtualScroll,
2826
- pt as minmax,
2827
- Dr as tapScrollCircleSampleVisual,
2828
- Tr as useFenwickMapTree,
2829
- Lr as useHeightCache,
2830
- Mr as useLruCache
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
2831
2939
  };