@aiquants/virtualscroll 1.24.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,78 @@
2
2
 
3
3
  All notable changes to `@aiquants/virtualscroll` are documented here.
4
4
 
5
+ ## 2.0.0 (2026-08-11)
6
+
7
+ ### Breaking
8
+
9
+ - **`VirtualScrollHandle` is now fully LOGICAL-space** — the essential fix that makes
10
+ coordinate-mixing bugs structurally impossible for consumers:
11
+ - `getScrollPosition()` now returns the **logical** position (was: pane position).
12
+ - `scrollTo()` now returns the applied **logical** position (was: pane position).
13
+ - The handle no longer extends `ScrollPaneHandle`; pane coordinates are an internal
14
+ implementation detail (ScrollPane's own handle remains pane-space by definition).
15
+ Rationale: the old asymmetry (logical input, pane output) forced consumers to write
16
+ conversion code, which caused two real bugs (daily-report's 6px initial offset and
17
+ directory-tree's double-inset anchor drift). Consumers WITHOUT `contentInsets` see no
18
+ numeric change (both spaces coincide when the top inset is 0). Consumers WITH insets:
19
+ delete your `± topInset` conversions — every handle/callback value is logical now.
20
+ 移行: inset 未使用の消費者は数値変化なし。inset 使用の消費者は ± topInset 換算を全削除する
21
+ (ハンドル・コールバックの値はすべて論理座標)。
22
+
23
+ ### Fixed
24
+
25
+ - Dynamic `contentInsets.top` changes no longer double-apply the inset delta when a scroll
26
+ anchor (`scrollToIndex` / `initialScrollAnchor`) is pending: the inset-sync effect now delegates
27
+ positioning to the drift-correction effect while an anchor exists (it only updates its
28
+ bookkeeping). The logical position is invariant under runtime inset changes on BOTH paths
29
+ (anchored and manual-scroll), each pinned by a regression test. This closes the previously
30
+ documented known issue.
31
+ 動的 inset 変更 × 保留アンカーの二重適用 (既知課題) を根治。論理位置は実行時の inset 変更に
32
+ 対して不変 (アンカー有り/無しの両経路をピンで固定)。
33
+
34
+ ## 1.25.0
35
+
36
+ ### Added
37
+
38
+ - **`initialScrollAnchor`** prop (`{ index, offsetPx? }`) — anchor-based initial position for exact
39
+ scroll restoration across remounts of variable-height lists. Positions row `index` with `offsetPx`
40
+ px of it hidden above the viewport top, materializing the anchor neighborhood in the Fenwick tree
41
+ so the FIRST paint is already correct (no post-mount jump). Precedence:
42
+ `initialScrollAnchor > initialScrollIndex > initialScrollOffset`.
43
+ 可変高さ一覧の再マウント越し厳密復元用。生 px 復元 (`initialScrollOffset`) は実測が具現化されて
44
+ いない空間では別の行に着地する (実測 21 行漂着) ため、行の同一性で位置決めする。
45
+ - **`VirtualScrollHandle.getScrollAnchor()`** — captures the current top visible row anchor
46
+ (`{ index, offsetPx } | null`) in the reconciled tree space; feed it back to `initialScrollAnchor`.
47
+
48
+ ### Fixed
49
+
50
+ - Passing `initialScrollIndex` together with `initialScrollOffset` no longer lets the offset stomp
51
+ the index position one commit after first paint (the passive initial-offset effect now respects
52
+ the precedence order).
53
+
54
+ ## 1.24.0
55
+
56
+ ### Changed
57
+
58
+ - **Inset coordinate endpoint unified**: `toPanePositionWithInset(0, top)` now maps logical 0 to
59
+ **pane 0** (top inset visible = true top) instead of pane `top`. This aligns the restore path with
60
+ the mount default and the ScrollPane clamp resting point, eliminating the "restored logical 0
61
+ renders a few px scrolled" asymmetry (measured 6px in daily-report). `scrollToIndex(0)` now returns
62
+ to pane 0 as well.
63
+
64
+ ### Fixed
65
+
66
+ - `useThrottledInvoker` now **flushes the pending payload synchronously on unmount** instead of
67
+ discarding it, so save-on-scroll consumers no longer lose the final queued `onScroll` /
68
+ `onRangeChange` notification when unmounted mid-fling (residual loss is bounded to at most one
69
+ frame of movement after the last render-loop tick).
70
+
71
+ ### Known issues
72
+
73
+ - Dynamic `contentInsets.top` changes while a `scrollToIndex` /`initialScrollIndex` anchor is
74
+ pending can double-apply the inset delta (pre-existing; no in-repo production consumer passes
75
+ dynamic insets). See the design spec's known-issue note.
76
+
5
77
  ## 1.23.0
6
78
 
7
79
  ### Added
@@ -24,7 +96,7 @@ All notable changes to `@aiquants/virtualscroll` are documented here.
24
96
  See **Composite widget roles** in the README for the `enableKeyboardNavigation: false` requirement
25
97
  that makes the intermediate wrappers transparent to the owned-element relationship.
26
98
 
27
- ## 1.21.0 — Unreleased
99
+ ## 1.21.0
28
100
 
29
101
  ### Breaking
30
102
 
package/README.md CHANGED
@@ -207,7 +207,8 @@ exists in the DOM.
207
207
  | `onWheelHorizontal` | `(deltaX: number) => void` | ❌ | Opt-in horizontal wheel delegation. When set, horizontal-dominant wheel / trackpad gestures (and shift+wheel) are delegated to this handler so the parent can implement horizontal scrolling. When omitted, horizontal gestures and shift+wheel bypass vertical scrolling so parent native scrolling works. See [Horizontal Scrolling](#horizontal-scrolling). |
208
208
  | `background` | `ReactNode` | ❌ | Background element |
209
209
  | `initialScrollIndex` | `number` | ❌ | Initial scroll index |
210
- | `initialScrollOffset` | `number` | ❌ | Initial scroll offset |
210
+ | `initialScrollOffset` | `number` | ❌ | Initial scroll offset (**logical** px). Not suitable for restoring positions of variable-height lists across remounts — use `initialScrollAnchor` |
211
+ | `initialScrollAnchor` | `{ index: number; offsetPx?: number }` | ❌ | Anchor-based initial position (1.25.0): starts with row `index` scrolled `offsetPx` px past the viewport top, exact from the first commit. Save side: `getScrollAnchor()`. Precedence: anchor > `initialScrollIndex` > `initialScrollOffset` |
211
212
  | `contentInsets` | `ScrollPaneContentInsets` | ❌ | Insets for the content area |
212
213
  | `callbackThrottleMs` | `number` | ❌ | Throttle time for scroll callbacks (default: 5ms) |
213
214
  | `onItemFocus` | `(index: number) => void` | ❌ | Callback when an item is focused |
@@ -243,13 +244,24 @@ exists in the DOM.
243
244
 
244
245
  | Method | Type | Description |
245
246
  | --- | --- | --- |
246
- | `scrollTo` | `(position: number) => void` | Scroll to specific position |
247
+ | `scrollTo` | `(position: number \| ((prev: number) => number)) => number` | Scroll to a **logical** position (updater receives the current logical position). Returns the applied **logical** position (2.0.0) |
247
248
  | `scrollToIndex` | `(index: number, options?: { align?: "top" \| "bottom" \| "center"; offset?: number }) => void` | Scroll to specific item index with optional alignment and offset |
248
- | `getScrollPosition` | `() => number` | Get current scroll position |
249
- | `getContentSize` | `() => number` | Get total content size |
249
+ | `getScrollPosition` | `() => number` | Get current **logical** scroll position (2.0.0; `-1` when the pane is not connected) |
250
+ | `getContentSize` | `() => number` | Get total content size (insets included) |
250
251
  | `getViewportSize` | `() => number` | Get viewport size |
251
252
  | `focusItemAtIndex` | `(index: number, options?: { ensureVisible?: boolean }) => void` | Focus item at specific index |
252
- | `getRange` | `() => VirtualScrollRange` | Get current range information |
253
+ | `getRange` | `() => VirtualScrollRange` | Get current range information (updated one render behind) |
254
+ | `getScrollAnchor` | `() => { index: number; offsetPx: number } \| null` | Capture the current top visible row anchor for exact restore via `initialScrollAnchor` (`null` when `itemCount` is 0) |
255
+ | `getFenwickTreeTotalHeight` | `() => number` | Total content height managed by the Fenwick tree (insets excluded) |
256
+ | `getFenwickSize` | `() => number` | Item count managed by the Fenwick tree |
257
+ | `updateItemSize` | `(index: number, size: number) => void` | Manually update one item's size (with layout-shift compensation). `getItemHeight(index)` must return the same value afterwards |
258
+
259
+ **Coordinate system (2.0.0)**: every position the handle and callbacks accept or return is
260
+ **logical** (content px, insets excluded) — `onScroll` / `onRangeChange` / `initialScroll*` /
261
+ `getScrollAnchor` / `scrollTo` (input AND return) / `getScrollPosition` all share one space, so no
262
+ conversion code is ever needed in consumers. Pane coordinates (insets included) are an internal
263
+ detail; only `ScrollPane`'s own handle speaks pane-space (it IS the pane). Logical 0 maps to
264
+ pane 0 internally (true top, top inset visible; unified in 1.24.0).
253
265
 
254
266
  ### VirtualScrollRange
255
267
 
@@ -1,5 +1,5 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { ScrollPaneHandle, ScrollPaneProps } from './ScrollPane.cjs';
2
+ import { ScrollPaneProps } from './ScrollPane.cjs';
3
3
  import { useFenwickMapTree } from './useFenwickMapTree.cjs';
4
4
  /**
5
5
  * Represents the current state of the rendered range and scroll metrics.
@@ -21,11 +21,35 @@ export type VirtualScrollRange = {
21
21
  totalHeight: number;
22
22
  };
23
23
  /**
24
- * Handle interface for controlling the VirtualScroll component externally.
24
+ * Imperative handle of VirtualScroll. Every position it accepts or returns is in the
25
+ * LOGICAL coordinate space (content px, insets excluded) — the same space as onScroll /
26
+ * onRangeChange / initialScrollOffset / getScrollAnchor.
27
+ * VirtualScroll の命令ハンドル。受け取る位置・返す位置は**すべて論理座標** (inset 抜きの
28
+ * コンテンツ px) で、onScroll / onRangeChange / initialScrollOffset / getScrollAnchor と同一空間。
25
29
  *
26
- * 外部から VirtualScroll コンポーネントを制御するためのハンドルインターフェース。
30
+ * ペイン座標 (inset 込み) は内部実装詳細であり、このハンドルからは一切露出しない。
31
+ * 2.0.0 以前は getScrollPosition と scrollTo の返値だけがペイン座標という非対称があり、
32
+ * 消費者側の換算コードが 2 度の実害バグ (daily-report 初期 6px ずれ / directory-tree の
33
+ * inset 二重適用) を生んだ。座標系の混在を消費者から構造的に不能にするための統一である。
34
+ * ScrollPane 自身のハンドル (ScrollPaneHandle) はペインそのものなのでペイン座標のままであり、
35
+ * その境界はこの型が引き受ける。
27
36
  */
28
- export type VirtualScrollHandle = ScrollPaneHandle & {
37
+ export type VirtualScrollHandle = {
38
+ /**
39
+ * Scrolls to a LOGICAL position (updater form receives the current logical position).
40
+ * Returns the applied (clamped) LOGICAL position.
41
+ * 論理位置へスクロール (updater は現在の論理位置を受け取る)。適用後 (クランプ後) の論理位置を返す。
42
+ */
43
+ scrollTo: (position: number | ((prev: number) => number)) => number;
44
+ /**
45
+ * Current LOGICAL scroll position. -1 when the pane is not connected.
46
+ * 現在の論理スクロール位置。ペイン未接続時は -1。
47
+ */
48
+ getScrollPosition: () => number;
49
+ /** Total pane content size including insets (a size, not a position) / インセット込みのコンテンツ総高さ (位置ではなくサイズ)。未接続時は -1 */
50
+ getContentSize: () => number;
51
+ /** Viewport size / ビューポートの高さ。未接続時は -1 */
52
+ getViewportSize: () => number;
29
53
  /** Scrolls to a specific item index / 指定したアイテムインデックスへスクロール */
30
54
  scrollToIndex: (index: number, options?: {
31
55
  align?: "top" | "bottom" | "center";
@@ -41,6 +65,15 @@ export type VirtualScrollHandle = ScrollPaneHandle & {
41
65
  }) => void;
42
66
  /** Gets the current scroll range information / 現在のスクロール範囲情報を取得 */
43
67
  getRange: () => VirtualScrollRange;
68
+ /**
69
+ * Captures the current top-row anchor ({index, offsetPx}) for exact restore via initialScrollAnchor.
70
+ * initialScrollAnchor での厳密復元用に、現在の先頭可視行アンカー ({index, offsetPx}) を取得。
71
+ * itemCount 0 のときは null。offsetPx は先頭可視行の上端がビューポート上端より上に隠れている px (論理座標)。
72
+ */
73
+ getScrollAnchor: () => {
74
+ index: number;
75
+ offsetPx: number;
76
+ } | null;
44
77
  /**
45
78
  * Manually updates the size of a specific item. Contract: after calling this,
46
79
  * `getItemHeight(index)` must return the same `size`; `getItemHeight` is the source of truth,
@@ -130,6 +163,22 @@ export type VirtualScrollProps<T> = {
130
163
  children: (item: T, index: number) => ReactNode;
131
164
  initialScrollIndex?: number;
132
165
  initialScrollOffset?: number;
166
+ /**
167
+ * Anchor-based initial position: starts with row `index` scrolled `offsetPx` px past the viewport top.
168
+ * アンカー基準の初期位置。行 index の上端がビューポート上端より offsetPx px 分だけ上に隠れた位置で開始する。
169
+ *
170
+ * 可変高さ一覧の「位置キープ」はこれを使うこと。initialScrollOffset の生 px 復元は、実測高さが
171
+ * 具現化されていない再マウント空間では px→行変換が推定値で行われ、別の行に着地する
172
+ * (実測: 深い復元で 21 行漂着)。アンカーは行の同一性で位置決めするため空間差に不変。
173
+ * 保存側は VirtualScrollHandle.getScrollAnchor() で取得した値をそのまま渡す。
174
+ * 優先順位: initialScrollAnchor > initialScrollIndex > initialScrollOffset。
175
+ * マウント時に itemCount > 0 なら初回コミットから厳密。itemCount 0 でマウントした場合は
176
+ * 最初のデータ到着 (0 → N) 時に scrollToIndex 経由で遅延適用される (近似 → 自己修復)。
177
+ */
178
+ initialScrollAnchor?: {
179
+ index: number;
180
+ offsetPx?: number;
181
+ };
133
182
  callbackThrottleMs?: number;
134
183
  contentInsets?: ScrollPaneProps["contentInsets"];
135
184
  onItemFocus?: (index: number) => void;
@@ -1,5 +1,5 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { ScrollPaneHandle, ScrollPaneProps } from './ScrollPane.tsx';
2
+ import { ScrollPaneProps } from './ScrollPane.tsx';
3
3
  import { useFenwickMapTree } from './useFenwickMapTree.ts';
4
4
  /**
5
5
  * Represents the current state of the rendered range and scroll metrics.
@@ -21,11 +21,35 @@ export type VirtualScrollRange = {
21
21
  totalHeight: number;
22
22
  };
23
23
  /**
24
- * Handle interface for controlling the VirtualScroll component externally.
24
+ * Imperative handle of VirtualScroll. Every position it accepts or returns is in the
25
+ * LOGICAL coordinate space (content px, insets excluded) — the same space as onScroll /
26
+ * onRangeChange / initialScrollOffset / getScrollAnchor.
27
+ * VirtualScroll の命令ハンドル。受け取る位置・返す位置は**すべて論理座標** (inset 抜きの
28
+ * コンテンツ px) で、onScroll / onRangeChange / initialScrollOffset / getScrollAnchor と同一空間。
25
29
  *
26
- * 外部から VirtualScroll コンポーネントを制御するためのハンドルインターフェース。
30
+ * ペイン座標 (inset 込み) は内部実装詳細であり、このハンドルからは一切露出しない。
31
+ * 2.0.0 以前は getScrollPosition と scrollTo の返値だけがペイン座標という非対称があり、
32
+ * 消費者側の換算コードが 2 度の実害バグ (daily-report 初期 6px ずれ / directory-tree の
33
+ * inset 二重適用) を生んだ。座標系の混在を消費者から構造的に不能にするための統一である。
34
+ * ScrollPane 自身のハンドル (ScrollPaneHandle) はペインそのものなのでペイン座標のままであり、
35
+ * その境界はこの型が引き受ける。
27
36
  */
28
- export type VirtualScrollHandle = ScrollPaneHandle & {
37
+ export type VirtualScrollHandle = {
38
+ /**
39
+ * Scrolls to a LOGICAL position (updater form receives the current logical position).
40
+ * Returns the applied (clamped) LOGICAL position.
41
+ * 論理位置へスクロール (updater は現在の論理位置を受け取る)。適用後 (クランプ後) の論理位置を返す。
42
+ */
43
+ scrollTo: (position: number | ((prev: number) => number)) => number;
44
+ /**
45
+ * Current LOGICAL scroll position. -1 when the pane is not connected.
46
+ * 現在の論理スクロール位置。ペイン未接続時は -1。
47
+ */
48
+ getScrollPosition: () => number;
49
+ /** Total pane content size including insets (a size, not a position) / インセット込みのコンテンツ総高さ (位置ではなくサイズ)。未接続時は -1 */
50
+ getContentSize: () => number;
51
+ /** Viewport size / ビューポートの高さ。未接続時は -1 */
52
+ getViewportSize: () => number;
29
53
  /** Scrolls to a specific item index / 指定したアイテムインデックスへスクロール */
30
54
  scrollToIndex: (index: number, options?: {
31
55
  align?: "top" | "bottom" | "center";
@@ -41,6 +65,15 @@ export type VirtualScrollHandle = ScrollPaneHandle & {
41
65
  }) => void;
42
66
  /** Gets the current scroll range information / 現在のスクロール範囲情報を取得 */
43
67
  getRange: () => VirtualScrollRange;
68
+ /**
69
+ * Captures the current top-row anchor ({index, offsetPx}) for exact restore via initialScrollAnchor.
70
+ * initialScrollAnchor での厳密復元用に、現在の先頭可視行アンカー ({index, offsetPx}) を取得。
71
+ * itemCount 0 のときは null。offsetPx は先頭可視行の上端がビューポート上端より上に隠れている px (論理座標)。
72
+ */
73
+ getScrollAnchor: () => {
74
+ index: number;
75
+ offsetPx: number;
76
+ } | null;
44
77
  /**
45
78
  * Manually updates the size of a specific item. Contract: after calling this,
46
79
  * `getItemHeight(index)` must return the same `size`; `getItemHeight` is the source of truth,
@@ -130,6 +163,22 @@ export type VirtualScrollProps<T> = {
130
163
  children: (item: T, index: number) => ReactNode;
131
164
  initialScrollIndex?: number;
132
165
  initialScrollOffset?: number;
166
+ /**
167
+ * Anchor-based initial position: starts with row `index` scrolled `offsetPx` px past the viewport top.
168
+ * アンカー基準の初期位置。行 index の上端がビューポート上端より offsetPx px 分だけ上に隠れた位置で開始する。
169
+ *
170
+ * 可変高さ一覧の「位置キープ」はこれを使うこと。initialScrollOffset の生 px 復元は、実測高さが
171
+ * 具現化されていない再マウント空間では px→行変換が推定値で行われ、別の行に着地する
172
+ * (実測: 深い復元で 21 行漂着)。アンカーは行の同一性で位置決めするため空間差に不変。
173
+ * 保存側は VirtualScrollHandle.getScrollAnchor() で取得した値をそのまま渡す。
174
+ * 優先順位: initialScrollAnchor > initialScrollIndex > initialScrollOffset。
175
+ * マウント時に itemCount > 0 なら初回コミットから厳密。itemCount 0 でマウントした場合は
176
+ * 最初のデータ到着 (0 → N) 時に scrollToIndex 経由で遅延適用される (近似 → 自己修復)。
177
+ */
178
+ initialScrollAnchor?: {
179
+ index: number;
180
+ offsetPx?: number;
181
+ };
133
182
  callbackThrottleMs?: number;
134
183
  contentInsets?: ScrollPaneProps["contentInsets"];
135
184
  onItemFocus?: (index: number) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualScroll.d.ts","sourceRoot":"","sources":["../src/VirtualScroll.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VirtualScroll.d.ts","sourceRoot":"","sources":["../src/VirtualScroll.tsx"],"names":[],"mappings":"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"}