@aiquants/virtualscroll 3.4.0 → 3.5.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,45 @@
2
2
 
3
3
  All notable changes to `@aiquants/virtualscroll` are documented here.
4
4
 
5
+ ## 3.5.0 (2026-09-14)
6
+
7
+ - **新機能 — `VirtualGrid` の両軸末尾凍結 (`frozenTrailingCols` / `frozenTrailingRows`)**:
8
+ 末尾凍結はエンジン機能 (ADR-18 — route A)。列側は幅減算 + 右クリップ — スクロール帯幅を
9
+ `viewport − W_F − W_T` へ一般化し (`scrollBandWidthRef` の単一 ref 源)、末尾セルは右アンカー
10
+ クリップ `.aqvs-grid-row-trailing` / `-inner` の**帯ローカル left** で描画する (アンカー機構の
11
+ 外 — 先頭帯の鏡像)。行側は `.aqvs-grid-main` の**下**の第 2 帯外バンド `.aqvs-grid-trailing-rows`
12
+ (クリップ高 = H_T_vis インライン、inner は木高 H_T の bottom 定着 — 帯上端 = extent − H_T_vis
13
+ が全構成で成立)。帯行は `renderRow` 逐語再利用で 4 象限コーナー全種が無償成立。複合帯の
14
+ 優先順位は LEADING > TRAILING > MIDDLE (ADR-19): 中帯が最初に潰れ (`bandWidth ≤ 0` は正準空窓
15
+ start > end)、末尾が 2 番目 (CSS `max()` 左端 / bottom 定着 inner)、可視クリップの単一情報源は
16
+ `trailingVisibleSize` (消費先はテンプレート高 / hbar `paddingRight` / `getFrozenSize` の vis
17
+ export の 3 点ちょうど)。
18
+ - **契約**: 両 props は [0, `MAX_FROZEN_TRAILING_COLS` / `MAX_FROZEN_TRAILING_ROWS` = 128] の整数
19
+ fail-fast (RangeError)・動的クランプは `min(T, count − 先頭実効)` で**先頭がカウント空間で勝つ**
20
+ (ADR-19-1)。**登記済み帰結**: 先頭 + 末尾の帯寸がビューポートを超えるとき、隠れた末尾セルは
21
+ どのスクロール位置でも可視化できない (文書化されたクランプ — `scrollToCell` の末尾 no-op は
22
+ そこでも正確)。T = 0 は DOM 構造・インライン属性までバイト恒等 (F = 0 / R = 0 恒等の双子)。
23
+ `scrollToCell` / `initialScrollAnchor` の末尾狙いは当該軸 no-op (列は既存アンカー残置)、
24
+ `updateRowSize` / `focusRowAtIndex` は 3 分岐 (末尾帯行は `trailingRowEpoch` 繰上げ / 帯行 DOM
25
+ 直接フォーカス)、`getContentSize().height` = H_F + 埋め込み + H_T。
26
+ - **`getFrozenSize` の 10 フィールド化 (非破壊)**: `{cols, width, rows, height}` に
27
+ `trailingCols` / `trailingRows` (クランプ後実効カウント)・`trailingWidth` / `trailingHeight`
28
+ (木 px — 接尾辞和)・`trailingVisibleWidth` / `trailingVisibleHeight` (ビューポートクリップ =
29
+ `min(木, max(0, viewport − 先頭))` — プレアタッチは 0) を追加。
30
+ - **`--aqvs-grid-trailing-width`**: 新設のパッケージスコープ CSS 変数 (0px フォールバック)。
31
+ T > 0 のときのみ書かれ T = 0 で除去される**単一書き手**規律。`.aqvs-grid-row-scroll` の
32
+ `right` は `var(--aqvs-grid-trailing-width, 0px)` へ差替え (T = 0 は計算結果までバイト恒等)。
33
+ - **ADR-25 — `data-aqvs-frozen-row` の付与を F_eff > 0 へゲート分離**: 従来は凍結分岐と結合して
34
+ いたため、末尾のみ (F = 0 ∧ T > 0) のグリッドが凍結列ゼロで全行に属性を出す嘘になるところ
35
+ だった。class `aqvs-grid-row-frozen-host` は「横帯モード」の描画トレイトとして残る。既存構成
36
+ (F > 0 / T = 0) への挙動変化ゼロ。
37
+ - **ADR-23 — T の実行時変更は埋め込み VirtualScroll を再マウントしない**: `key` は R 専用のまま、
38
+ itemCount が**末尾**で伸縮するだけ (getItem / getItemKey / getItemHeight = i + R 不変)。視点は
39
+ トグルを跨いで無償保存される。**保留アンカーの帰結 (文書化)**: T 増加で末尾帯入りする行を
40
+ 狙った保留行アンカーは最終スクロール行へクランプされる (itemCount 変化ごとの再ピン留め +
41
+ `sanitizeIndex` — 「保留アンカーは R 再マウントで死ぬ」の鏡像)。MV-TR-A1..A4 ゲートで実測確定
42
+ (740/740 全緑)。
43
+
5
44
  ## 3.4.0 (2026-09-03)
6
45
 
7
46
  - **修正 — コンテンツが viewport に収まる場合の `maxScrollPosition` を 0 へクランプ**:
package/README.md CHANGED
@@ -396,9 +396,12 @@ Contracts (see the design plan under `docs/plans/` for the full bounding theorem
396
396
  `[0, MAX_FROZEN_LEADING_COLS]` (128) — `RangeError` otherwise; values beyond the current
397
397
  `colCount` freeze every column (documented dynamic clamp). `scrollToCell` /
398
398
  `initialScrollAnchor` targeting a frozen column are horizontal no-ops (always visible), and
399
- `getFrozenSize()` reports the effective `{cols, width, rows, height}` (both frozen axes —
400
- the `rows`/`height` fields are a non-breaking v3.4.0 addition) for consumer hit-test
401
- partitioning.
399
+ `getFrozenSize()` reports the effective `{cols, width, rows, height, trailingCols,
400
+ trailingRows, trailingWidth, trailingHeight, trailingVisibleWidth, trailingVisibleHeight}`
401
+ (both axes, both ends — the `rows`/`height` fields are a non-breaking v3.4.0 addition and
402
+ the six `trailing*` fields a non-breaking v3.5.0 addition; `trailingWidth`/`trailingHeight`
403
+ are TREE px, the `trailingVisible*` pair is the viewport clip `min(tree, max(0, viewport -
404
+ leading))`) for consumer hit-test partitioning.
402
405
  Frozen cells precede the scroll band in row DOM (logical column order for AT / tabbing), and
403
406
  an all-frozen grid reports the scroll band as the canonical EMPTY window (`renderingColStart
404
407
  > renderingColEnd` — inclusive loops run zero iterations). `frozenLeadingCols` of `0` (the
@@ -417,6 +420,23 @@ Contracts (see the design plan under `docs/plans/` for the full bounding theorem
417
420
  an inset), and `frozenLeadingRows` of `0` (the default) is structurally identical to the
418
421
  pre-frozen DOM. Changing `frozenLeadingRows` at runtime rebuilds the embedded row tree
419
422
  (remount) and preserves the visible-top viewpoint across the toggle.
423
+ - Frozen trailing columns / rows (v3.5.0): `frozenTrailingCols` pins the last T columns in a
424
+ right-anchored clip outside the anchor machinery (band-local lefts; the scroll band
425
+ generalizes to `viewport - W_F - W_T` with a right clip inset driven by
426
+ `--aqvs-grid-trailing-width` — written only while T > 0, `0px` fallback otherwise), and
427
+ `frozenTrailingRows` pins the last T rows as a second grid-owned band BELOW the scroll pane
428
+ (clip height = the visible size `min(H_T, max(0, viewport - H_F))`, inner bottom-anchored at
429
+ the tree height H_T). Band rows reuse the normal row renderer, so every corner of the
430
+ 3 x 3 region grid comes for free. Integers in `[0, MAX_FROZEN_TRAILING_COLS]` /
431
+ `[0, MAX_FROZEN_TRAILING_ROWS]` (128) — `RangeError` otherwise; the dynamic clamp is
432
+ `min(T, count - effectiveLeading)`: the LEADING band wins the count space (ADR-19-1), and
433
+ when the leading + trailing extents exceed the viewport, occluded trailing cells cannot be
434
+ scrolled into view (a documented clamp — `scrollToCell` / `initialScrollAnchor` targeting a
435
+ trailing track stay no-ops on that axis, the column no-op leaving any armed column anchor in
436
+ place). Changing `frozenTrailingCols`/`frozenTrailingRows` at runtime does NOT remount the
437
+ embedded row axis (the tail-only itemCount change keeps the viewpoint for free; a pending
438
+ row anchor whose target enters the band clamps to the last scroll row), and a value of `0`
439
+ (the default) is structurally identical to the pre-trailing DOM.
420
440
 
421
441
  ## Residual quantizer for snapping consumers
422
442
 
@@ -31,7 +31,7 @@ export type TapScrollCircleProps = {
31
31
  /** Additional inline styles. / 追加のインラインスタイル。 */
32
32
  style?: CSSProperties;
33
33
  /** Base opacity applied to the circle. / サークル全体に適用する基準透明度。 */
34
- opacity: number;
34
+ opacity?: number;
35
35
  /** Custom rendering logic for the visual contents. / ビジュアル内容を描画するカスタムロジック。 */
36
36
  renderVisual?: (props: TapScrollCircleRenderProps) => ReactNode;
37
37
  };
@@ -31,7 +31,7 @@ export type TapScrollCircleProps = {
31
31
  /** Additional inline styles. / 追加のインラインスタイル。 */
32
32
  style?: CSSProperties;
33
33
  /** Base opacity applied to the circle. / サークル全体に適用する基準透明度。 */
34
- opacity: number;
34
+ opacity?: number;
35
35
  /** Custom rendering logic for the visual contents. / ビジュアル内容を描画するカスタムロジック。 */
36
36
  renderVisual?: (props: TapScrollCircleRenderProps) => ReactNode;
37
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TapScrollCircle.d.ts","sourceRoot":"","sources":["../src/TapScrollCircle.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAqC,MAAM,OAAO,CAAA;AAIxF,MAAM,MAAM,wBAAwB,GAAG;IACnC,mEAAmE;IACnE,MAAM,EAAE,OAAO,CAAA;IACf,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACrB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B;;;;OAIG;IACH,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAA;IAChB,4EAA4E;IAC5E,YAAY,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAA;IACvD,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gDAAgD;IAChD,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAA;IACf,8EAA8E;IAC9E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAA;CAClE,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC;;;;OAIG;IACH,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,cAAc,GAAG,IAAI,CAAA;CAC1C,CAAA;AAcD,MAAM,MAAM,0BAA0B,GAAG;IACrC,yDAAyD;IACzD,SAAS,EAAE,wBAAwB,CAAA;IACnC,+DAA+D;IAC/D,kBAAkB,EAAE,MAAM,CAAA;IAC1B,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAA;IACjB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAA;IACZ,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;CAClB,CAAA;AAgCD;;;GAGG;AACH,eAAO,MAAM,eAAe,mHAkQ3B,CAAA"}
1
+ {"version":3,"file":"TapScrollCircle.d.ts","sourceRoot":"","sources":["../src/TapScrollCircle.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAqC,MAAM,OAAO,CAAA;AAIxF,MAAM,MAAM,wBAAwB,GAAG;IACnC,mEAAmE;IACnE,MAAM,EAAE,OAAO,CAAA;IACf,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACrB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B;;;;OAIG;IACH,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAA;IAChB,4EAA4E;IAC5E,YAAY,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAA;IACvD,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gDAAgD;IAChD,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAA;CAClE,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC;;;;OAIG;IACH,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,cAAc,GAAG,IAAI,CAAA;CAC1C,CAAA;AAcD,MAAM,MAAM,0BAA0B,GAAG;IACrC,yDAAyD;IACzD,SAAS,EAAE,wBAAwB,CAAA;IACnC,+DAA+D;IAC/D,kBAAkB,EAAE,MAAM,CAAA;IAC1B,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAA;IACjB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAA;IACZ,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;CAClB,CAAA;AAgCD;;;GAGG;AACH,eAAO,MAAM,eAAe,mHAkQ3B,CAAA"}
@@ -51,6 +51,34 @@ export declare const MAX_FROZEN_LEADING_COLS = 128;
51
51
  * この上限そのもの。違反は fail-fast の RangeError。
52
52
  */
53
53
  export declare const MAX_FROZEN_LEADING_ROWS = 128;
54
+ /**
55
+ * Hard cap for `frozenTrailingCols` (v3.5.0 trailing-freeze plan §3). The trailing band is NOT
56
+ * windowed — every trailing column materializes in every rendered row and is EXEMPT from the
57
+ * MAX_RENDERED_CELLS truncation (the scroll-band budget is reduced by the trailing count
58
+ * instead) — so the cap is what bounds the band: worst case 128 x MAX_RENDERED_ITEMS rows, and
59
+ * W_T <= 128 x MAX_TRACK_SIZE = 2^25 (the measured layout wall; practical W_T <= viewport <<
60
+ * 2^24). Violations fail fast with a RangeError.
61
+ *
62
+ * `frozenTrailingCols` の上限 (3.5.0 末尾凍結プラン §3)。末尾帯は窓化されず全描画行で具現化し、
63
+ * かつ MAX_RENDERED_CELLS の打切り対象外 (代わりにスクロール帯予算を末尾数ぶん控除) のため、
64
+ * 帯を有界にするのはこの上限そのもの: 最悪 128 × MAX_RENDERED_ITEMS 行、W_T ≤ 128 ×
65
+ * MAX_TRACK_SIZE = 2^25 (実測壁ちょうど — 実運用は W_T ≤ viewport ≪ 2^24)。違反は fail-fast の
66
+ * RangeError。
67
+ */
68
+ export declare const MAX_FROZEN_TRAILING_COLS = 128;
69
+ /**
70
+ * Hard cap for `frozenTrailingRows` (v3.5.0 trailing-freeze plan §3). The trailing-row band is
71
+ * grid-owned and OUT of the embedded VirtualScroll (the SECOND out-of-pane band, below the
72
+ * pane): every band row materializes every rendered column and is exempt from
73
+ * MAX_RENDERED_CELLS (the budget denominator counts band rows instead), so the cap bounds the
74
+ * band itself. Violations fail fast with a RangeError.
75
+ *
76
+ * `frozenTrailingRows` の上限 (3.5.0 末尾凍結プラン §3)。末尾行帯はグリッド所有で埋め込み
77
+ * VirtualScroll の外 (ペインの**下**の第 2 帯外バンド)。帯行は描画列を全て具現化し
78
+ * MAX_RENDERED_CELLS の打切り対象外 (予算分母に帯行数を算入) のため、帯を有界にするのは
79
+ * この上限そのもの。違反は fail-fast の RangeError。
80
+ */
81
+ export declare const MAX_FROZEN_TRAILING_ROWS = 128;
54
82
  /**
55
83
  * Resolves the per-row column cap from the cell budget and the effective rendered-row count.
56
84
  * Pure and exported as the mutation-gate surface for the production MAX_RENDERED_CELLS fallback
@@ -237,6 +265,40 @@ export type VirtualGridProps<T> = {
237
265
  * 通知しゼロ描画)。
238
266
  */
239
267
  frozenLeadingRows?: number;
268
+ /**
269
+ * Number of trailing columns frozen at the right edge (v3.5.0 trailing-freeze plan §3;
270
+ * default 0). Integer in [0, MAX_FROZEN_TRAILING_COLS] — RangeError otherwise (fail-fast).
271
+ * Dynamic clamp (documented contract): min(T, colCount − effectiveFrozenCols) — the LEADING
272
+ * band wins the count space. Trailing cells render in a right-anchored clip outside the
273
+ * anchor machinery (band-local lefts); `--aqvs-grid-trailing-width` is written iff T > 0.
274
+ * `scrollToCell` / `initialScrollAnchor` targeting a trailing column are horizontal no-ops
275
+ * (always visible). T = 0 is structurally identical to the pre-trailing DOM.
276
+ * 右端に凍結する末尾列数 (3.5.0 末尾凍結プラン §3。既定 0)。[0, MAX_FROZEN_TRAILING_COLS]
277
+ * の整数 — 違反は RangeError (fail-fast)。動的クランプ (文書化契約): min(T, colCount −
278
+ * effectiveFrozenCols) — カウント空間は**先頭が勝つ**。末尾セルはアンカー機構の外の
279
+ * 右アンカークリップに帯ローカル left で描画し、`--aqvs-grid-trailing-width` は T > 0 の
280
+ * ときのみ書かれる。`scrollToCell` / `initialScrollAnchor` の末尾列狙いは横 no-op
281
+ * (常時可視)。T = 0 は DOM 構造まで従来と恒等。
282
+ */
283
+ frozenTrailingCols?: number;
284
+ /**
285
+ * Number of trailing rows pinned at the bottom (v3.5.0 trailing-freeze plan §3; default 0).
286
+ * Integer in [0, MAX_FROZEN_TRAILING_ROWS] — RangeError otherwise (fail-fast). Dynamic
287
+ * clamp (documented contract): min(T, rowCount − effectiveFrozenRows) — leading wins. The
288
+ * band is grid-owned BELOW the pane; the embedded scroll rows shrink at the TAIL only
289
+ * (itemCount = rowCount − R − T, getItem = i + R unchanged), so a runtime T change does NOT
290
+ * remount the embedded VirtualScroll (ADR-23). `scrollToCell` / `initialScrollAnchor`
291
+ * targeting a trailing row are vertical no-ops (always visible). T = 0 is structurally
292
+ * identical to the pre-trailing DOM.
293
+ * 下端に凍結する末尾行数 (3.5.0 末尾凍結プラン §3。既定 0)。[0, MAX_FROZEN_TRAILING_ROWS]
294
+ * の整数 — 違反は RangeError (fail-fast)。動的クランプ (文書化契約): min(T, rowCount −
295
+ * effectiveFrozenRows) — 先頭が勝つ。帯はペインの**下**のグリッド所有バンドで、埋め込み
296
+ * スクロール行は**末尾**だけが伸縮する (itemCount = rowCount − R − T、getItem = i + R
297
+ * 不変) — T の実行時変更は埋め込み VirtualScroll を再マウントしない (ADR-23)。
298
+ * `scrollToCell` / `initialScrollAnchor` の末尾行狙いは縦 no-op (常時可視)。T = 0 は
299
+ * DOM 構造まで従来と恒等。
300
+ */
301
+ frozenTrailingRows?: number;
240
302
  /** Row-axis overscan (default 3 — a declared, intentional deviation from the bare VirtualScroll default 15; see the bounding contract). / 行軸 overscan (既定 3 — 素の既定 15 からの宣言済み意図的乖離)。 */
241
303
  overscanRows?: number;
242
304
  /** Column-axis overscan (default 3). / 列軸 overscan (既定 3)。 */
@@ -286,7 +348,24 @@ export type VirtualGridHandle = {
286
348
  x: number;
287
349
  y: number;
288
350
  };
289
- /** Cell-targeted jump. alignY uses the row vocabulary (top/bottom/center), alignX its horizontal twin (start/end/center). No "nearest". Targeting a FROZEN column is a horizontal no-op that leaves any previously armed column anchor in place (the visual status quo is preserved; manual horizontal input clears anchors as usual). / セル狙いジャンプ。"nearest" は無し。凍結列狙いの横成分は no-op で、既存の列アンカーはそのまま残る (視覚的現状維持 — 手動横入力が従来どおり解除する)。 */
351
+ /**
352
+ * Cell-targeted jump. alignY uses the row vocabulary (top/bottom/center), alignX its
353
+ * horizontal twin (start/end/center). No "nearest". Targeting a LEADING frozen or TRAILING
354
+ * frozen column is a horizontal no-op that leaves any previously armed column anchor in
355
+ * place (the visual status quo is preserved; manual horizontal input clears anchors as
356
+ * usual); targeting a leading/trailing frozen row is a vertical no-op. Band membership is
357
+ * judged at CALL time — a T change AFTER arming follows the ADR-23 clamp semantics: a
358
+ * pending row anchor whose target row lands inside the trailing band after a T increase
359
+ * clamps to the last scroll row. Overlap registration (ADR-19-1): when the leading +
360
+ * trailing band extents exceed the viewport, occluded trailing cells cannot be scrolled
361
+ * into view — the no-op is exact there too.
362
+ * セル狙いジャンプ。"nearest" は無し。先頭 / 末尾凍結列狙いの横成分は no-op で、既存の
363
+ * 列アンカーはそのまま残る (視覚的現状維持 — 手動横入力が従来どおり解除する)。先頭 /
364
+ * 末尾凍結行狙いの縦成分も no-op。帯所属の判定は**呼出し時** — 張った後の T 変更は
365
+ * ADR-23 のクランプ意味論 (T 増加で末尾帯入りする行を狙った保留行アンカーは最終
366
+ * スクロール行へクランプ) に従う。重複登記 (ADR-19-1): 先頭 + 末尾の帯寸がビューポートを
367
+ * 超えるとき、隠れた末尾セルはどのスクロール位置でも可視化できない — no-op はそこでも正確。
368
+ */
290
369
  scrollToCell(row: number, col: number, options?: {
291
370
  alignY?: "top" | "bottom" | "center";
292
371
  alignX?: "start" | "end" | "center";
@@ -314,7 +393,7 @@ export type VirtualGridHandle = {
314
393
  height: number;
315
394
  };
316
395
  getRange(): VirtualGridRange | null;
317
- /** Pair-call seam: getRowHeight stays the truth; delegates to the row updateItemSize. / 対呼び出しシーム (getRowHeight が正) — updateItemSize へ委譲。 */
396
+ /** Pair-call seam: getRowHeight stays the truth. 3-way split — leading band rows bump the frozen-row epoch, trailing band rows bump the trailing-row epoch (accessor re-read; the bands hold no tree), scroll rows delegate to the row updateItemSize at −R. / 対呼び出しシーム (getRowHeight が正)。3 分岐 先頭帯行は凍結行 epoch、末尾帯行は末尾行 epoch の繰上げ (アクセサ再読 — 帯に木は無い)、スクロール行は −R で行 updateItemSize へ委譲。 */
318
397
  updateRowSize(row: number, px: number): void;
319
398
  /**
320
399
  * Column twin: validates (MAX_TRACK_SIZE fail-fast), updates the width tree, and bumps the
@@ -327,12 +406,35 @@ export type VirtualGridHandle = {
327
406
  * バッチングで 1 コミットに合流 (設計の rAF 合流意図のコミット粒度での実現)。
328
407
  */
329
408
  updateColSize(col: number, px: number): void;
330
- /** Effective frozen-band sizes: {cols, width, rows, height} in the CURRENT trees (cols/rows = dynamic clamps, width = W_F px, height = H_F px). Consumers use it for hit-test partitioning on both axes. / 実効凍結帯寸法 {cols, width, rows, height} (cols / rows は動的クランプ後、width = W_F、height = H_F)。消費側の両軸ヒットテスト分割用。 */
409
+ /**
410
+ * Effective frozen-band sizes on both axes and both ends (v3.5.0 — a non-breaking field
411
+ * extension of the {cols, width} → {cols, width, rows, height} precedent). cols/rows/
412
+ * trailingCols/trailingRows = dynamic post-clamp counts; width/height/trailingWidth/
413
+ * trailingHeight = TREE px (the trailing sizes are tree SUFFIX sums); trailingVisibleWidth/
414
+ * trailingVisibleHeight = viewport-clipped `min(tree, max(0, viewport − leading))` — THE
415
+ * single source for W_T_vis / H_T_vis that every consumer judgment/write path cites (never
416
+ * re-derive the formula). Pre-attach the grid viewport reads {0, 0}, so the vis fields are
417
+ * 0 (an initial measured state, not a sentinel) while the tree fields stay tree px.
418
+ * 実効凍結帯寸法 — 両軸・両端 (v3.5.0。{cols, width} → {cols, width, rows, height} の
419
+ * 前例に続く非破壊のフィールド追加)。cols / rows / trailingCols / trailingRows は動的
420
+ * クランプ後の実効カウント、width / height / trailingWidth / trailingHeight は**木** px
421
+ * (末尾寸は木の接尾辞和)、trailingVisibleWidth / trailingVisibleHeight はビューポート
422
+ * クリップ `min(木, max(0, viewport − 先頭))` — W_T_vis / H_T_vis の**単一情報源**で、
423
+ * 消費側の判定 / 書込み経路は全てこのフィールドを名指しで読む (式の再導出禁止)。
424
+ * プレアタッチはビューポート {0, 0} のため vis フィールドは 0 (番兵ではなく初期実測状態)、
425
+ * 木フィールドは常に木 px。
426
+ */
331
427
  getFrozenSize(): {
332
428
  cols: number;
333
429
  width: number;
334
430
  rows: number;
335
431
  height: number;
432
+ trailingCols: number;
433
+ trailingRows: number;
434
+ trailingWidth: number;
435
+ trailingHeight: number;
436
+ trailingVisibleWidth: number;
437
+ trailingVisibleHeight: number;
336
438
  };
337
439
  /** 2-axis wheel bridge entry: vertical → embedded VirtualScroll, horizontal → hx. Returns whether the event was consumed (WheelBridgeTarget contract). / 2 軸ホイールブリッジ口。消費有無を返す (ブリッジ契約)。 */
338
440
  applyWheel(event: WheelEvent): boolean;
@@ -51,6 +51,34 @@ export declare const MAX_FROZEN_LEADING_COLS = 128;
51
51
  * この上限そのもの。違反は fail-fast の RangeError。
52
52
  */
53
53
  export declare const MAX_FROZEN_LEADING_ROWS = 128;
54
+ /**
55
+ * Hard cap for `frozenTrailingCols` (v3.5.0 trailing-freeze plan §3). The trailing band is NOT
56
+ * windowed — every trailing column materializes in every rendered row and is EXEMPT from the
57
+ * MAX_RENDERED_CELLS truncation (the scroll-band budget is reduced by the trailing count
58
+ * instead) — so the cap is what bounds the band: worst case 128 x MAX_RENDERED_ITEMS rows, and
59
+ * W_T <= 128 x MAX_TRACK_SIZE = 2^25 (the measured layout wall; practical W_T <= viewport <<
60
+ * 2^24). Violations fail fast with a RangeError.
61
+ *
62
+ * `frozenTrailingCols` の上限 (3.5.0 末尾凍結プラン §3)。末尾帯は窓化されず全描画行で具現化し、
63
+ * かつ MAX_RENDERED_CELLS の打切り対象外 (代わりにスクロール帯予算を末尾数ぶん控除) のため、
64
+ * 帯を有界にするのはこの上限そのもの: 最悪 128 × MAX_RENDERED_ITEMS 行、W_T ≤ 128 ×
65
+ * MAX_TRACK_SIZE = 2^25 (実測壁ちょうど — 実運用は W_T ≤ viewport ≪ 2^24)。違反は fail-fast の
66
+ * RangeError。
67
+ */
68
+ export declare const MAX_FROZEN_TRAILING_COLS = 128;
69
+ /**
70
+ * Hard cap for `frozenTrailingRows` (v3.5.0 trailing-freeze plan §3). The trailing-row band is
71
+ * grid-owned and OUT of the embedded VirtualScroll (the SECOND out-of-pane band, below the
72
+ * pane): every band row materializes every rendered column and is exempt from
73
+ * MAX_RENDERED_CELLS (the budget denominator counts band rows instead), so the cap bounds the
74
+ * band itself. Violations fail fast with a RangeError.
75
+ *
76
+ * `frozenTrailingRows` の上限 (3.5.0 末尾凍結プラン §3)。末尾行帯はグリッド所有で埋め込み
77
+ * VirtualScroll の外 (ペインの**下**の第 2 帯外バンド)。帯行は描画列を全て具現化し
78
+ * MAX_RENDERED_CELLS の打切り対象外 (予算分母に帯行数を算入) のため、帯を有界にするのは
79
+ * この上限そのもの。違反は fail-fast の RangeError。
80
+ */
81
+ export declare const MAX_FROZEN_TRAILING_ROWS = 128;
54
82
  /**
55
83
  * Resolves the per-row column cap from the cell budget and the effective rendered-row count.
56
84
  * Pure and exported as the mutation-gate surface for the production MAX_RENDERED_CELLS fallback
@@ -237,6 +265,40 @@ export type VirtualGridProps<T> = {
237
265
  * 通知しゼロ描画)。
238
266
  */
239
267
  frozenLeadingRows?: number;
268
+ /**
269
+ * Number of trailing columns frozen at the right edge (v3.5.0 trailing-freeze plan §3;
270
+ * default 0). Integer in [0, MAX_FROZEN_TRAILING_COLS] — RangeError otherwise (fail-fast).
271
+ * Dynamic clamp (documented contract): min(T, colCount − effectiveFrozenCols) — the LEADING
272
+ * band wins the count space. Trailing cells render in a right-anchored clip outside the
273
+ * anchor machinery (band-local lefts); `--aqvs-grid-trailing-width` is written iff T > 0.
274
+ * `scrollToCell` / `initialScrollAnchor` targeting a trailing column are horizontal no-ops
275
+ * (always visible). T = 0 is structurally identical to the pre-trailing DOM.
276
+ * 右端に凍結する末尾列数 (3.5.0 末尾凍結プラン §3。既定 0)。[0, MAX_FROZEN_TRAILING_COLS]
277
+ * の整数 — 違反は RangeError (fail-fast)。動的クランプ (文書化契約): min(T, colCount −
278
+ * effectiveFrozenCols) — カウント空間は**先頭が勝つ**。末尾セルはアンカー機構の外の
279
+ * 右アンカークリップに帯ローカル left で描画し、`--aqvs-grid-trailing-width` は T > 0 の
280
+ * ときのみ書かれる。`scrollToCell` / `initialScrollAnchor` の末尾列狙いは横 no-op
281
+ * (常時可視)。T = 0 は DOM 構造まで従来と恒等。
282
+ */
283
+ frozenTrailingCols?: number;
284
+ /**
285
+ * Number of trailing rows pinned at the bottom (v3.5.0 trailing-freeze plan §3; default 0).
286
+ * Integer in [0, MAX_FROZEN_TRAILING_ROWS] — RangeError otherwise (fail-fast). Dynamic
287
+ * clamp (documented contract): min(T, rowCount − effectiveFrozenRows) — leading wins. The
288
+ * band is grid-owned BELOW the pane; the embedded scroll rows shrink at the TAIL only
289
+ * (itemCount = rowCount − R − T, getItem = i + R unchanged), so a runtime T change does NOT
290
+ * remount the embedded VirtualScroll (ADR-23). `scrollToCell` / `initialScrollAnchor`
291
+ * targeting a trailing row are vertical no-ops (always visible). T = 0 is structurally
292
+ * identical to the pre-trailing DOM.
293
+ * 下端に凍結する末尾行数 (3.5.0 末尾凍結プラン §3。既定 0)。[0, MAX_FROZEN_TRAILING_ROWS]
294
+ * の整数 — 違反は RangeError (fail-fast)。動的クランプ (文書化契約): min(T, rowCount −
295
+ * effectiveFrozenRows) — 先頭が勝つ。帯はペインの**下**のグリッド所有バンドで、埋め込み
296
+ * スクロール行は**末尾**だけが伸縮する (itemCount = rowCount − R − T、getItem = i + R
297
+ * 不変) — T の実行時変更は埋め込み VirtualScroll を再マウントしない (ADR-23)。
298
+ * `scrollToCell` / `initialScrollAnchor` の末尾行狙いは縦 no-op (常時可視)。T = 0 は
299
+ * DOM 構造まで従来と恒等。
300
+ */
301
+ frozenTrailingRows?: number;
240
302
  /** Row-axis overscan (default 3 — a declared, intentional deviation from the bare VirtualScroll default 15; see the bounding contract). / 行軸 overscan (既定 3 — 素の既定 15 からの宣言済み意図的乖離)。 */
241
303
  overscanRows?: number;
242
304
  /** Column-axis overscan (default 3). / 列軸 overscan (既定 3)。 */
@@ -286,7 +348,24 @@ export type VirtualGridHandle = {
286
348
  x: number;
287
349
  y: number;
288
350
  };
289
- /** Cell-targeted jump. alignY uses the row vocabulary (top/bottom/center), alignX its horizontal twin (start/end/center). No "nearest". Targeting a FROZEN column is a horizontal no-op that leaves any previously armed column anchor in place (the visual status quo is preserved; manual horizontal input clears anchors as usual). / セル狙いジャンプ。"nearest" は無し。凍結列狙いの横成分は no-op で、既存の列アンカーはそのまま残る (視覚的現状維持 — 手動横入力が従来どおり解除する)。 */
351
+ /**
352
+ * Cell-targeted jump. alignY uses the row vocabulary (top/bottom/center), alignX its
353
+ * horizontal twin (start/end/center). No "nearest". Targeting a LEADING frozen or TRAILING
354
+ * frozen column is a horizontal no-op that leaves any previously armed column anchor in
355
+ * place (the visual status quo is preserved; manual horizontal input clears anchors as
356
+ * usual); targeting a leading/trailing frozen row is a vertical no-op. Band membership is
357
+ * judged at CALL time — a T change AFTER arming follows the ADR-23 clamp semantics: a
358
+ * pending row anchor whose target row lands inside the trailing band after a T increase
359
+ * clamps to the last scroll row. Overlap registration (ADR-19-1): when the leading +
360
+ * trailing band extents exceed the viewport, occluded trailing cells cannot be scrolled
361
+ * into view — the no-op is exact there too.
362
+ * セル狙いジャンプ。"nearest" は無し。先頭 / 末尾凍結列狙いの横成分は no-op で、既存の
363
+ * 列アンカーはそのまま残る (視覚的現状維持 — 手動横入力が従来どおり解除する)。先頭 /
364
+ * 末尾凍結行狙いの縦成分も no-op。帯所属の判定は**呼出し時** — 張った後の T 変更は
365
+ * ADR-23 のクランプ意味論 (T 増加で末尾帯入りする行を狙った保留行アンカーは最終
366
+ * スクロール行へクランプ) に従う。重複登記 (ADR-19-1): 先頭 + 末尾の帯寸がビューポートを
367
+ * 超えるとき、隠れた末尾セルはどのスクロール位置でも可視化できない — no-op はそこでも正確。
368
+ */
290
369
  scrollToCell(row: number, col: number, options?: {
291
370
  alignY?: "top" | "bottom" | "center";
292
371
  alignX?: "start" | "end" | "center";
@@ -314,7 +393,7 @@ export type VirtualGridHandle = {
314
393
  height: number;
315
394
  };
316
395
  getRange(): VirtualGridRange | null;
317
- /** Pair-call seam: getRowHeight stays the truth; delegates to the row updateItemSize. / 対呼び出しシーム (getRowHeight が正) — updateItemSize へ委譲。 */
396
+ /** Pair-call seam: getRowHeight stays the truth. 3-way split — leading band rows bump the frozen-row epoch, trailing band rows bump the trailing-row epoch (accessor re-read; the bands hold no tree), scroll rows delegate to the row updateItemSize at −R. / 対呼び出しシーム (getRowHeight が正)。3 分岐 先頭帯行は凍結行 epoch、末尾帯行は末尾行 epoch の繰上げ (アクセサ再読 — 帯に木は無い)、スクロール行は −R で行 updateItemSize へ委譲。 */
318
397
  updateRowSize(row: number, px: number): void;
319
398
  /**
320
399
  * Column twin: validates (MAX_TRACK_SIZE fail-fast), updates the width tree, and bumps the
@@ -327,12 +406,35 @@ export type VirtualGridHandle = {
327
406
  * バッチングで 1 コミットに合流 (設計の rAF 合流意図のコミット粒度での実現)。
328
407
  */
329
408
  updateColSize(col: number, px: number): void;
330
- /** Effective frozen-band sizes: {cols, width, rows, height} in the CURRENT trees (cols/rows = dynamic clamps, width = W_F px, height = H_F px). Consumers use it for hit-test partitioning on both axes. / 実効凍結帯寸法 {cols, width, rows, height} (cols / rows は動的クランプ後、width = W_F、height = H_F)。消費側の両軸ヒットテスト分割用。 */
409
+ /**
410
+ * Effective frozen-band sizes on both axes and both ends (v3.5.0 — a non-breaking field
411
+ * extension of the {cols, width} → {cols, width, rows, height} precedent). cols/rows/
412
+ * trailingCols/trailingRows = dynamic post-clamp counts; width/height/trailingWidth/
413
+ * trailingHeight = TREE px (the trailing sizes are tree SUFFIX sums); trailingVisibleWidth/
414
+ * trailingVisibleHeight = viewport-clipped `min(tree, max(0, viewport − leading))` — THE
415
+ * single source for W_T_vis / H_T_vis that every consumer judgment/write path cites (never
416
+ * re-derive the formula). Pre-attach the grid viewport reads {0, 0}, so the vis fields are
417
+ * 0 (an initial measured state, not a sentinel) while the tree fields stay tree px.
418
+ * 実効凍結帯寸法 — 両軸・両端 (v3.5.0。{cols, width} → {cols, width, rows, height} の
419
+ * 前例に続く非破壊のフィールド追加)。cols / rows / trailingCols / trailingRows は動的
420
+ * クランプ後の実効カウント、width / height / trailingWidth / trailingHeight は**木** px
421
+ * (末尾寸は木の接尾辞和)、trailingVisibleWidth / trailingVisibleHeight はビューポート
422
+ * クリップ `min(木, max(0, viewport − 先頭))` — W_T_vis / H_T_vis の**単一情報源**で、
423
+ * 消費側の判定 / 書込み経路は全てこのフィールドを名指しで読む (式の再導出禁止)。
424
+ * プレアタッチはビューポート {0, 0} のため vis フィールドは 0 (番兵ではなく初期実測状態)、
425
+ * 木フィールドは常に木 px。
426
+ */
331
427
  getFrozenSize(): {
332
428
  cols: number;
333
429
  width: number;
334
430
  rows: number;
335
431
  height: number;
432
+ trailingCols: number;
433
+ trailingRows: number;
434
+ trailingWidth: number;
435
+ trailingHeight: number;
436
+ trailingVisibleWidth: number;
437
+ trailingVisibleHeight: number;
336
438
  };
337
439
  /** 2-axis wheel bridge entry: vertical → embedded VirtualScroll, horizontal → hx. Returns whether the event was consumed (WheelBridgeTarget contract). / 2 軸ホイールブリッジ口。消費有無を返す (ブリッジ契約)。 */
338
440
  applyWheel(event: WheelEvent): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualGrid.d.ts","sourceRoot":"","sources":["../src/VirtualGrid.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VirtualGrid.d.ts","sourceRoot":"","sources":["../src/VirtualGrid.tsx"],"names":[],"mappings":"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"}