@aiquants/virtualscroll 3.4.0 → 3.6.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,92 @@
2
2
 
3
3
  All notable changes to `@aiquants/virtualscroll` are documented here.
4
4
 
5
+ ## 3.6.0 (2026-09-18)
6
+
7
+ - **挙動置換 — `VirtualGrid` のタップサークルが 2 つ → 1 つの統合 2 軸サークルへ**: 縦バーの
8
+ サークル + 横バーのサークル (同時ドラッグは document 捕捉 pointerdown により構造的に不可能・
9
+ 横は W_F = 0 で完全クリップ — 出荷済み欠陥) をやめ、グリッド所有の 1 サークル (`axis="xy"`) が
10
+ 単一ドラッグベクトルで両軸を連続スクロールする。**コーナーアンカー + 3 アーム配置則**
11
+ (`min(可視上限, max(到達性, 遠象限床))` — 全アームが root 寸・sbw・size・オフセットのみに依存 =
12
+ 帯幅非依存・凍結トグル不変)、**既定オフセットは両軸 −200** (到達性導出 — バー既定 −80/0 では
13
+ ない)。opt-out は従来どおり `tapScrollCircleOptions: { enabled: false }` — 今後は**唯一の
14
+ サークルを殺す**。封鎖コンテンツ面積は半減 (40 px ディスク 1 枚)。既定 ON の挙動置換を
15
+ **minor** とする判断は ADR-32 登記: 置換対象が出荷済み欠陥・再解釈フィールド
16
+ (`offsetX`/`offsetY` — バー相対 → コーナー相対) への in-repo 依存ゼロ・型削除ゼロ (いずれか
17
+ 1 つでも崩れていれば 4.0.0 だった)。
18
+ - **速度則**: 方向余弦分解 `v = (s_x(r)·ox/r, s_y(r)·oy/r)` — `s_a` は無改造
19
+ `computeTapScrollSpeed` の軸別評価 (純軸ドラッグは各バー則と画素法則恒等 = T1)。新規純関数
20
+ `computeTapScrollVelocity` + 型 `TapScrollVelocityInput` / `TapScrollAxisSpeedParams` を
21
+ **バレル export ×3**。`TapScrollCircle.axis` は `"x" | "y" | "xy"` の射影部分空間へ一般化
22
+ (既定 `"y"` 不変・state 型不変 — `"xy"` の `direction` は径方向係合 `{0, 1}`)。
23
+ - **登記デルタ (グリッド仕様 §3.6 の一覧が正典)**: キャンセルイベント無条件リセット (旧: 縦は
24
+ paneId フィルタ → 一様に無条件 = 厳密 fail-closed) / 片軸境界はループ非停止・境界フラグ毎
25
+ フレーム (反転で同一保持中に端から退却) / 軸上ピンの純軸ドラッグはループをパーク (角度付き
26
+ pointermove で再開) / pendingColAnchor は**適用済み** hx デルタのみで解除 (バーの要求時規則
27
+ より厳格) / `"xy"` に反転抑止リング無し (原点通過は r = 6 で反転・緩衝は静止直径 12 px のみ) /
28
+ 52 px 未満ルートは先頭側エッジクリップ (ブラウザ未検証ニッチ)。
29
+ - **軸近傍リーク (旧ハード軸ロックの代償 — 両向き登記)**: 4° 誤差・75% 引きのオープンループで
30
+ 意図縦 ⇒ 交差 829 px/s (2 s で ≈ 8+ 列 @200 px 列)、意図横 ⇒ 交差 1,533 px/s (2 s で
31
+ ≈ **96 行** @32 px 行)。受入閾値 (タッチ実機・クローズドループ): 中央値 ≤ 1 列 (意図縦) /
32
+ ≤ 6 行 (意図横) — 超過時は連続リマップ `φ_ε(θ) = θ − ε·sin 4θ` を 3.6.0 既定として出荷する
33
+ 事前コミット。異方性下ではコンテンツ速度角 ≠ ドラッグ角 (全手掛かりはドラッグ角を表示 —
34
+ 登記)。遮蔽 / 到達性の閾値表はグリッド仕様 §3.6。
35
+ - **`axis="x"` の引き transform 修正**: `translateY` → `translateX` (「右ドラッグで下へ動く」
36
+ 出荷済み quirk — 裸バー opt-in 経由でのみ到達・in-repo 消費者ゼロ)。`"y"` はバイト恒等。
37
+ - **forced-colors**: `.aqvs-tap-scroll-circle` へパッケージ初の `forced-colors: active` 輪郭
38
+ (グラデーション視覚の平坦化で不可視になるのを防ぐ描画モード修正 — 単体サークルにも適用)。
39
+ - **in-package export ×3** (バレル非掲載): `TAP_SCROLL_MAX_FRAME_DELTA_SECONDS` /
40
+ `DEFAULT_TAP_SCROLL_CIRCLE_OPTIONS` / `resolveTapScrollCircleOptions`。
41
+ `enableHorizontalTapCircle` は裸バー向けの生きた汎用機能として存続 (グリッドが opt-in を
42
+ やめただけ — clean cut-over 姿勢の明示的免除)。
43
+ - **バグ修正 — 自己計測ペインの一方向ラチェット (`ScrollBar.stretchMainSize`)**: in-flow 兄弟
44
+ バーの固定インライン高が definite-but-content-floored なホスト (`flex: 1` かつ `min-height: 0`
45
+ 無し) の min-content 床になり縮小が永久に効かなかった (実 Chromium 実証)。新 prop
46
+ `stretchMainSize` (縦バー限定でインライン主軸寸をスキップ — 横バーは stretch が主軸を寸法
47
+ 決めできないため書込み維持) を `ScrollPane` が `isSelfMeasuringViewport` で結線。幾何は
48
+ `viewportSize` の数値由来で無傷。回帰ゲート = 実 Chromium ラダー E2E
49
+ (800→1300→800→600→1000 双方向回復)。ScrollPane 仕様 §2.5 に機構を登記。
50
+ - 単体 815 / 815 (45 ファイル) 全緑・変異台帳 MV-XY 37 行 + MV-SM 3 行 (物理 43 変異) 全 red 実測。
51
+
52
+ ## 3.5.0 (2026-09-14)
53
+
54
+ - **新機能 — `VirtualGrid` の両軸末尾凍結 (`frozenTrailingCols` / `frozenTrailingRows`)**:
55
+ 末尾凍結はエンジン機能 (ADR-18 — route A)。列側は幅減算 + 右クリップ — スクロール帯幅を
56
+ `viewport − W_F − W_T` へ一般化し (`scrollBandWidthRef` の単一 ref 源)、末尾セルは右アンカー
57
+ クリップ `.aqvs-grid-row-trailing` / `-inner` の**帯ローカル left** で描画する (アンカー機構の
58
+ 外 — 先頭帯の鏡像)。行側は `.aqvs-grid-main` の**下**の第 2 帯外バンド `.aqvs-grid-trailing-rows`
59
+ (クリップ高 = H_T_vis インライン、inner は木高 H_T の bottom 定着 — 帯上端 = extent − H_T_vis
60
+ が全構成で成立)。帯行は `renderRow` 逐語再利用で 4 象限コーナー全種が無償成立。複合帯の
61
+ 優先順位は LEADING > TRAILING > MIDDLE (ADR-19): 中帯が最初に潰れ (`bandWidth ≤ 0` は正準空窓
62
+ start > end)、末尾が 2 番目 (CSS `max()` 左端 / bottom 定着 inner)、可視クリップの単一情報源は
63
+ `trailingVisibleSize` (消費先はテンプレート高 / hbar `paddingRight` / `getFrozenSize` の vis
64
+ export の 3 点ちょうど)。
65
+ - **契約**: 両 props は [0, `MAX_FROZEN_TRAILING_COLS` / `MAX_FROZEN_TRAILING_ROWS` = 128] の整数
66
+ fail-fast (RangeError)・動的クランプは `min(T, count − 先頭実効)` で**先頭がカウント空間で勝つ**
67
+ (ADR-19-1)。**登記済み帰結**: 先頭 + 末尾の帯寸がビューポートを超えるとき、隠れた末尾セルは
68
+ どのスクロール位置でも可視化できない (文書化されたクランプ — `scrollToCell` の末尾 no-op は
69
+ そこでも正確)。T = 0 は DOM 構造・インライン属性までバイト恒等 (F = 0 / R = 0 恒等の双子)。
70
+ `scrollToCell` / `initialScrollAnchor` の末尾狙いは当該軸 no-op (列は既存アンカー残置)、
71
+ `updateRowSize` / `focusRowAtIndex` は 3 分岐 (末尾帯行は `trailingRowEpoch` 繰上げ / 帯行 DOM
72
+ 直接フォーカス)、`getContentSize().height` = H_F + 埋め込み + H_T。
73
+ - **`getFrozenSize` の 10 フィールド化 (非破壊)**: `{cols, width, rows, height}` に
74
+ `trailingCols` / `trailingRows` (クランプ後実効カウント)・`trailingWidth` / `trailingHeight`
75
+ (木 px — 接尾辞和)・`trailingVisibleWidth` / `trailingVisibleHeight` (ビューポートクリップ =
76
+ `min(木, max(0, viewport − 先頭))` — プレアタッチは 0) を追加。
77
+ - **`--aqvs-grid-trailing-width`**: 新設のパッケージスコープ CSS 変数 (0px フォールバック)。
78
+ T > 0 のときのみ書かれ T = 0 で除去される**単一書き手**規律。`.aqvs-grid-row-scroll` の
79
+ `right` は `var(--aqvs-grid-trailing-width, 0px)` へ差替え (T = 0 は計算結果までバイト恒等)。
80
+ - **ADR-25 — `data-aqvs-frozen-row` の付与を F_eff > 0 へゲート分離**: 従来は凍結分岐と結合して
81
+ いたため、末尾のみ (F = 0 ∧ T > 0) のグリッドが凍結列ゼロで全行に属性を出す嘘になるところ
82
+ だった。class `aqvs-grid-row-frozen-host` は「横帯モード」の描画トレイトとして残る。既存構成
83
+ (F > 0 / T = 0) への挙動変化ゼロ。
84
+ - **ADR-23 — T の実行時変更は埋め込み VirtualScroll を再マウントしない**: `key` は R 専用のまま、
85
+ itemCount が**末尾**で伸縮するだけ (getItem / getItemKey / getItemHeight = i + R 不変)。視点は
86
+ トグルを跨いで無償保存される。**保留アンカーの帰結 (文書化)**: T 増加で末尾帯入りする行を
87
+ 狙った保留行アンカーは最終スクロール行へクランプされる (itemCount 変化ごとの再ピン留め +
88
+ `sanitizeIndex` — 「保留アンカーは R 再マウントで死ぬ」の鏡像)。MV-TR-A1..A4 ゲートで実測確定
89
+ (740/740 全緑)。
90
+
5
91
  ## 3.4.0 (2026-09-03)
6
92
 
7
93
  - **修正 — コンテンツが viewport に収まる場合の `maxScrollPosition` を 0 へクランプ**:
package/README.md CHANGED
@@ -121,7 +121,10 @@ function App() {
121
121
  `position: absolute`, …). With an auto-height host the band stays 0 and the package logs a warning —
122
122
  there is nothing to measure. In self-measured mode the root carries `data-self-measured="true"` and the
123
123
  packaged rule `.aqvs-scroll-pane[data-self-measured="true"] { height: 100% }` stretches it to the host,
124
- so the stylesheet import is required for this mode as well.
124
+ so the stylesheet import is required for this mode as well. Since v3.6.0 the self-measured pane also
125
+ skips the scrollbar's inline main-axis size (`ScrollBar.stretchMainSize`) so a `flex: 1` host without
126
+ `min-height: 0` can shrink again — the bar's fixed height used to become the host's min-content floor
127
+ and lock shrinking permanently (one-way ratchet).
125
128
 
126
129
  **Pass `viewportSize` only when the band is known by calculation, not measurement** — a dropdown whose
127
130
  height comes from row count × row height, for example. If you pass a value that disagrees with the real
@@ -396,9 +399,12 @@ Contracts (see the design plan under `docs/plans/` for the full bounding theorem
396
399
  `[0, MAX_FROZEN_LEADING_COLS]` (128) — `RangeError` otherwise; values beyond the current
397
400
  `colCount` freeze every column (documented dynamic clamp). `scrollToCell` /
398
401
  `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.
402
+ `getFrozenSize()` reports the effective `{cols, width, rows, height, trailingCols,
403
+ trailingRows, trailingWidth, trailingHeight, trailingVisibleWidth, trailingVisibleHeight}`
404
+ (both axes, both ends — the `rows`/`height` fields are a non-breaking v3.4.0 addition and
405
+ the six `trailing*` fields a non-breaking v3.5.0 addition; `trailingWidth`/`trailingHeight`
406
+ are TREE px, the `trailingVisible*` pair is the viewport clip `min(tree, max(0, viewport -
407
+ leading))`) for consumer hit-test partitioning.
402
408
  Frozen cells precede the scroll band in row DOM (logical column order for AT / tabbing), and
403
409
  an all-frozen grid reports the scroll band as the canonical EMPTY window (`renderingColStart
404
410
  > renderingColEnd` — inclusive loops run zero iterations). `frozenLeadingCols` of `0` (the
@@ -417,6 +423,23 @@ Contracts (see the design plan under `docs/plans/` for the full bounding theorem
417
423
  an inset), and `frozenLeadingRows` of `0` (the default) is structurally identical to the
418
424
  pre-frozen DOM. Changing `frozenLeadingRows` at runtime rebuilds the embedded row tree
419
425
  (remount) and preserves the visible-top viewpoint across the toggle.
426
+ - Frozen trailing columns / rows (v3.5.0): `frozenTrailingCols` pins the last T columns in a
427
+ right-anchored clip outside the anchor machinery (band-local lefts; the scroll band
428
+ generalizes to `viewport - W_F - W_T` with a right clip inset driven by
429
+ `--aqvs-grid-trailing-width` — written only while T > 0, `0px` fallback otherwise), and
430
+ `frozenTrailingRows` pins the last T rows as a second grid-owned band BELOW the scroll pane
431
+ (clip height = the visible size `min(H_T, max(0, viewport - H_F))`, inner bottom-anchored at
432
+ the tree height H_T). Band rows reuse the normal row renderer, so every corner of the
433
+ 3 x 3 region grid comes for free. Integers in `[0, MAX_FROZEN_TRAILING_COLS]` /
434
+ `[0, MAX_FROZEN_TRAILING_ROWS]` (128) — `RangeError` otherwise; the dynamic clamp is
435
+ `min(T, count - effectiveLeading)`: the LEADING band wins the count space (ADR-19-1), and
436
+ when the leading + trailing extents exceed the viewport, occluded trailing cells cannot be
437
+ scrolled into view (a documented clamp — `scrollToCell` / `initialScrollAnchor` targeting a
438
+ trailing track stay no-ops on that axis, the column no-op leaving any armed column anchor in
439
+ place). Changing `frozenTrailingCols`/`frozenTrailingRows` at runtime does NOT remount the
440
+ embedded row axis (the tail-only itemCount change keeps the viewpoint for free; a pending
441
+ row anchor whose target enters the band clamps to the last scroll row), and a value of `0`
442
+ (the default) is structurally identical to the pre-trailing DOM.
420
443
 
421
444
  ## Residual quantizer for snapping consumers
422
445
 
@@ -759,6 +782,13 @@ viewport), `.aqvs-scrollbar` (+ `-vertical` / `-horizontal`), `.aqvs-scrollbar-t
759
782
 
760
783
  The auxiliary tap scroll circle can replace the native scrollbar for large datasets while remaining easy to control:
761
784
 
785
+ > **VirtualGrid ships a single two-axis circle since v3.6.0**: instead of one circle per bar, the grid
786
+ > renders ONE grid-owned circle (`axis="xy"`) near its far corner whose single drag vector scrolls both
787
+ > axes continuously (per-axis speeds follow each bar's law exactly on pure-axis drags). It reads the same
788
+ > `scrollBarOptions.tapScrollCircleOptions` knob (default offsets become `-200`/`-200`, corner-relative);
789
+ > `enabled: false` kills the single circle. Standalone `VirtualScroll` / `ScrollPane` / `ScrollBar`
790
+ > behavior is unchanged.
791
+
762
792
  - **Adaptive speed scaling** automatically ramps up to a `120×` multiplier as `itemCount` grows (trillions supported).
763
793
  - **Manual overrides** let you clamp or extend speed via `maxSpeedMultiplier` when you need deterministic behavior.
764
794
  - **Speed shaping** with `maxSpeedCurve` controls how quickly the speed ramps up as you pull the circle, blending gentle near-threshold drag with high-speed travel at extended distances. The ceiling itself does not depend on the drag distance: `exponentialSteepness` shapes the ramp, and `exponentialScale` caps the ceiling (its effective value is `min(exponentialScale, maxSpeedMultiplier)`).
@@ -36,6 +36,12 @@ export type ScrollBarTapCircleOptions = {
36
36
  easedOffset?: number;
37
37
  };
38
38
  };
39
+ type ResolvedTapScrollCircleOptions = Required<Omit<ScrollBarTapCircleOptions, "className" | "maxVisualDistance" | "renderVisual" | "maxSpeedCurve">> & {
40
+ className?: string;
41
+ maxVisualDistance: number;
42
+ renderVisual?: ScrollBarTapCircleOptions["renderVisual"];
43
+ maxSpeedCurve?: ScrollBarTapCircleOptions["maxSpeedCurve"];
44
+ };
39
45
  /** Custom event name emitted when external interactions should cancel tap scrolling. / 外部操作によってタップスクロールをキャンセルすべき際に発行されるカスタムイベント名。 */
40
46
  export declare const TAP_SCROLL_CANCEL_EVENT = "virtualscroll:tap-scroll-cancel";
41
47
  /**
@@ -83,6 +89,14 @@ export type ScrollBarProps = {
83
89
  * 不変。VirtualGrid が兆列到達性のために有効化する、v3.2.0)。縦バーには影響しない。
84
90
  */
85
91
  enableHorizontalTapCircle?: boolean;
92
+ /**
93
+ * Skip the inline main-axis size on the bar root and let the flex host's stretch own it.
94
+ * バールートのインライン主軸寸を書かず、flex ホストの stretch に寸法を委ねる指定。
95
+ * 自己計測 ScrollPane 専用のシーム (in-flow 兄弟バーの固定高がホストの min-content 床になる
96
+ * 一方向ラチェットの遮断)。縦バー限定 — 横バーの主軸は flex 主軸で stretch が寸法を与えられ
97
+ * ないため、horizontal では無視して書込みを維持する。
98
+ */
99
+ stretchMainSize?: boolean;
86
100
  /** The width of the scrollbar. / スクロールバーの幅。 */
87
101
  scrollBarWidth?: number;
88
102
  /** Additional class names for the component. / コンポーネントの追加のクラス名。 */
@@ -114,6 +128,14 @@ export declare const TAP_SCROLL_SPEED_DEFAULTS: {
114
128
  /** 最小速度倍率 (ビューポート比)。 */
115
129
  readonly minSpeedMultiplier: 0.2;
116
130
  };
131
+ export declare const TAP_SCROLL_MAX_FRAME_DELTA_SECONDS: number;
132
+ export declare const DEFAULT_TAP_SCROLL_CIRCLE_OPTIONS: ResolvedTapScrollCircleOptions;
133
+ /**
134
+ * Resolves user supplied tap scroll circle options with internal defaults.
135
+ *
136
+ * ユーザー指定のタップスクロールサークル設定を内部デフォルトで補完。
137
+ */
138
+ export declare const resolveTapScrollCircleOptions: (options: ScrollBarTapCircleOptions | undefined, itemCount?: number) => ResolvedTapScrollCircleOptions;
117
139
  /**
118
140
  * Input for `computeTapScrollSpeed`.
119
141
  * `computeTapScrollSpeed` の入力。
@@ -228,4 +250,5 @@ export declare const computeAutoTapScrollMaxSpeedMultiplier: (itemCount?: number
228
250
  *
229
251
  * カスタムスクロールバーコンポーネント。
230
252
  */
231
- export declare const ScrollBar: ({ contentSize, viewportSize, scrollPosition, onScroll, enableThumbDrag, enableTrackClick, enableArrowButtons, horizontal, enableHorizontalTapCircle, scrollBarWidth, className, ariaControls, tapScrollCircleOptions, itemCount, renderThumbOverlay, visibleStartIndex, visibleEndIndex, }: ScrollBarProps) => import("react").JSX.Element;
253
+ export declare const ScrollBar: ({ contentSize, viewportSize, scrollPosition, onScroll, enableThumbDrag, enableTrackClick, enableArrowButtons, horizontal, enableHorizontalTapCircle, stretchMainSize, scrollBarWidth, className, ariaControls, tapScrollCircleOptions, itemCount, renderThumbOverlay, visibleStartIndex, visibleEndIndex, }: ScrollBarProps) => import("react").JSX.Element;
254
+ export {};
@@ -36,6 +36,12 @@ export type ScrollBarTapCircleOptions = {
36
36
  easedOffset?: number;
37
37
  };
38
38
  };
39
+ type ResolvedTapScrollCircleOptions = Required<Omit<ScrollBarTapCircleOptions, "className" | "maxVisualDistance" | "renderVisual" | "maxSpeedCurve">> & {
40
+ className?: string;
41
+ maxVisualDistance: number;
42
+ renderVisual?: ScrollBarTapCircleOptions["renderVisual"];
43
+ maxSpeedCurve?: ScrollBarTapCircleOptions["maxSpeedCurve"];
44
+ };
39
45
  /** Custom event name emitted when external interactions should cancel tap scrolling. / 外部操作によってタップスクロールをキャンセルすべき際に発行されるカスタムイベント名。 */
40
46
  export declare const TAP_SCROLL_CANCEL_EVENT = "virtualscroll:tap-scroll-cancel";
41
47
  /**
@@ -83,6 +89,14 @@ export type ScrollBarProps = {
83
89
  * 不変。VirtualGrid が兆列到達性のために有効化する、v3.2.0)。縦バーには影響しない。
84
90
  */
85
91
  enableHorizontalTapCircle?: boolean;
92
+ /**
93
+ * Skip the inline main-axis size on the bar root and let the flex host's stretch own it.
94
+ * バールートのインライン主軸寸を書かず、flex ホストの stretch に寸法を委ねる指定。
95
+ * 自己計測 ScrollPane 専用のシーム (in-flow 兄弟バーの固定高がホストの min-content 床になる
96
+ * 一方向ラチェットの遮断)。縦バー限定 — 横バーの主軸は flex 主軸で stretch が寸法を与えられ
97
+ * ないため、horizontal では無視して書込みを維持する。
98
+ */
99
+ stretchMainSize?: boolean;
86
100
  /** The width of the scrollbar. / スクロールバーの幅。 */
87
101
  scrollBarWidth?: number;
88
102
  /** Additional class names for the component. / コンポーネントの追加のクラス名。 */
@@ -114,6 +128,14 @@ export declare const TAP_SCROLL_SPEED_DEFAULTS: {
114
128
  /** 最小速度倍率 (ビューポート比)。 */
115
129
  readonly minSpeedMultiplier: 0.2;
116
130
  };
131
+ export declare const TAP_SCROLL_MAX_FRAME_DELTA_SECONDS: number;
132
+ export declare const DEFAULT_TAP_SCROLL_CIRCLE_OPTIONS: ResolvedTapScrollCircleOptions;
133
+ /**
134
+ * Resolves user supplied tap scroll circle options with internal defaults.
135
+ *
136
+ * ユーザー指定のタップスクロールサークル設定を内部デフォルトで補完。
137
+ */
138
+ export declare const resolveTapScrollCircleOptions: (options: ScrollBarTapCircleOptions | undefined, itemCount?: number) => ResolvedTapScrollCircleOptions;
117
139
  /**
118
140
  * Input for `computeTapScrollSpeed`.
119
141
  * `computeTapScrollSpeed` の入力。
@@ -228,5 +250,6 @@ export declare const computeAutoTapScrollMaxSpeedMultiplier: (itemCount?: number
228
250
  *
229
251
  * カスタムスクロールバーコンポーネント。
230
252
  */
231
- export declare const ScrollBar: ({ contentSize, viewportSize, scrollPosition, onScroll, enableThumbDrag, enableTrackClick, enableArrowButtons, horizontal, enableHorizontalTapCircle, scrollBarWidth, className, ariaControls, tapScrollCircleOptions, itemCount, renderThumbOverlay, visibleStartIndex, visibleEndIndex, }: ScrollBarProps) => import("react").JSX.Element;
253
+ export declare const ScrollBar: ({ contentSize, viewportSize, scrollPosition, onScroll, enableThumbDrag, enableTrackClick, enableArrowButtons, horizontal, enableHorizontalTapCircle, stretchMainSize, scrollBarWidth, className, ariaControls, tapScrollCircleOptions, itemCount, renderThumbOverlay, visibleStartIndex, visibleEndIndex, }: ScrollBarProps) => import("react").JSX.Element;
254
+ export {};
232
255
  //# sourceMappingURL=ScrollBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollBar.d.ts","sourceRoot":"","sources":["../src/ScrollBar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScrollBar.d.ts","sourceRoot":"","sources":["../src/ScrollBar.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollPane.d.ts","sourceRoot":"","sources":["../src/ScrollPane.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScrollPane.d.ts","sourceRoot":"","sources":["../src/ScrollPane.tsx"],"names":[],"mappings":"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"}
@@ -15,11 +15,18 @@ export type TapScrollCircleDragState = {
15
15
  };
16
16
  export type TapScrollCircleProps = {
17
17
  /**
18
- * Axis the direction/distance/dead-zone derivation reads (default "y" — vertical bars).
19
- * Horizontal bars pass "x" so a horizontal circle drag scrolls horizontally (v3.2.0).
20
- * 方向・距離・デッドゾーン導出が読む軸 (既定 "y" — 縦バー)。横バーは "x" を渡す (v3.2.0)。
18
+ * Projection subspace the direction/distance/dead-zone derivation reads (default "y" —
19
+ * vertical bars). The configured axis selects `A ⊆ R²` (`span(e_x)`, `span(e_y)`, or `R²`);
20
+ * `distance = ‖P_A(offset)‖₂` and `rawDirection` is the sign of the projection where a sign
21
+ * exists — `"xy"` has none, so `direction` degrades to the radial engagement flag `{0, 1}`
22
+ * and 2-D orientation lives in the always-carried `offsetX`/`offsetY` (v3.6.0). Horizontal
23
+ * bars pass "x" (v3.2.0).
24
+ * 方向・距離・デッドゾーン導出が読む射影部分空間 (既定 "y" — 縦バー)。設定軸が `A ⊆ R²` を
25
+ * 選び、`distance = ‖P_A(offset)‖₂`、`rawDirection` は射影の符号 (符号が存在する場合)。
26
+ * `"xy"` に符号は無く `direction` は径方向係合 `{0, 1}` へ退化し、向きは無条件搬送の
27
+ * `offsetX`/`offsetY` が運ぶ (v3.6.0)。横バーは "x" を渡す (v3.2.0)。
21
28
  */
22
- axis?: "x" | "y";
29
+ axis?: "x" | "y" | "xy";
23
30
  /** Called whenever the drag state updates. / ドラッグ状態が更新された際に呼び出されるコールバック。 */
24
31
  onDragChange: (state: TapScrollCircleDragState) => void;
25
32
  /** Additional class names for styling. / 追加のスタイル用クラス名。 */
@@ -31,7 +38,7 @@ export type TapScrollCircleProps = {
31
38
  /** Additional inline styles. / 追加のインラインスタイル。 */
32
39
  style?: CSSProperties;
33
40
  /** Base opacity applied to the circle. / サークル全体に適用する基準透明度。 */
34
- opacity: number;
41
+ opacity?: number;
35
42
  /** Custom rendering logic for the visual contents. / ビジュアル内容を描画するカスタムロジック。 */
36
43
  renderVisual?: (props: TapScrollCircleRenderProps) => ReactNode;
37
44
  };
@@ -15,11 +15,18 @@ export type TapScrollCircleDragState = {
15
15
  };
16
16
  export type TapScrollCircleProps = {
17
17
  /**
18
- * Axis the direction/distance/dead-zone derivation reads (default "y" — vertical bars).
19
- * Horizontal bars pass "x" so a horizontal circle drag scrolls horizontally (v3.2.0).
20
- * 方向・距離・デッドゾーン導出が読む軸 (既定 "y" — 縦バー)。横バーは "x" を渡す (v3.2.0)。
18
+ * Projection subspace the direction/distance/dead-zone derivation reads (default "y" —
19
+ * vertical bars). The configured axis selects `A ⊆ R²` (`span(e_x)`, `span(e_y)`, or `R²`);
20
+ * `distance = ‖P_A(offset)‖₂` and `rawDirection` is the sign of the projection where a sign
21
+ * exists — `"xy"` has none, so `direction` degrades to the radial engagement flag `{0, 1}`
22
+ * and 2-D orientation lives in the always-carried `offsetX`/`offsetY` (v3.6.0). Horizontal
23
+ * bars pass "x" (v3.2.0).
24
+ * 方向・距離・デッドゾーン導出が読む射影部分空間 (既定 "y" — 縦バー)。設定軸が `A ⊆ R²` を
25
+ * 選び、`distance = ‖P_A(offset)‖₂`、`rawDirection` は射影の符号 (符号が存在する場合)。
26
+ * `"xy"` に符号は無く `direction` は径方向係合 `{0, 1}` へ退化し、向きは無条件搬送の
27
+ * `offsetX`/`offsetY` が運ぶ (v3.6.0)。横バーは "x" を渡す (v3.2.0)。
21
28
  */
22
- axis?: "x" | "y";
29
+ axis?: "x" | "y" | "xy";
23
30
  /** Called whenever the drag state updates. / ドラッグ状態が更新された際に呼び出されるコールバック。 */
24
31
  onDragChange: (state: TapScrollCircleDragState) => void;
25
32
  /** Additional class names for styling. / 追加のスタイル用クラス名。 */
@@ -31,7 +38,7 @@ export type TapScrollCircleProps = {
31
38
  /** Additional inline styles. / 追加のインラインスタイル。 */
32
39
  style?: CSSProperties;
33
40
  /** Base opacity applied to the circle. / サークル全体に適用する基準透明度。 */
34
- opacity: number;
41
+ opacity?: number;
35
42
  /** Custom rendering logic for the visual contents. / ビジュアル内容を描画するカスタムロジック。 */
36
43
  renderVisual?: (props: TapScrollCircleRenderProps) => ReactNode;
37
44
  };
@@ -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;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAA;IACvB,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,mHA2R3B,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;