@aiquants/virtualscroll 3.5.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 +47 -0
- package/README.md +11 -1
- package/dist/ScrollBar.d.cts +24 -1
- package/dist/ScrollBar.d.ts +24 -1
- package/dist/ScrollBar.d.ts.map +1 -1
- package/dist/ScrollPane.d.ts.map +1 -1
- package/dist/TapScrollCircle.d.cts +11 -4
- package/dist/TapScrollCircle.d.ts +11 -4
- package/dist/TapScrollCircle.d.ts.map +1 -1
- package/dist/VirtualGrid.d.ts.map +1 -1
- package/dist/computeTapScrollVelocity.d.cts +120 -0
- package/dist/computeTapScrollVelocity.d.ts +121 -0
- package/dist/computeTapScrollVelocity.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2209 -2016
- package/dist/styles/virtualscroll.css +1 -1
- package/dist/styles/virtualscroll.standalone.css +1 -1
- package/dist/useGridTapScroll.d.cts +83 -0
- package/dist/useGridTapScroll.d.ts +84 -0
- package/dist/useGridTapScroll.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/ScrollBar.tsx +16 -4
- package/src/ScrollPane.tsx +1 -0
- package/src/TapScrollCircle.tsx +41 -9
- package/src/VirtualGrid.tsx +155 -8
- package/src/computeTapScrollVelocity.ts +150 -0
- package/src/index.ts +1 -0
- package/src/styles/virtualscroll.css +31 -0
- package/src/useGridTapScroll.ts +370 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,53 @@
|
|
|
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
|
+
|
|
5
52
|
## 3.5.0 (2026-09-14)
|
|
6
53
|
|
|
7
54
|
- **新機能 — `VirtualGrid` の両軸末尾凍結 (`frozenTrailingCols` / `frozenTrailingRows`)**:
|
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
|
|
@@ -779,6 +782,13 @@ viewport), `.aqvs-scrollbar` (+ `-vertical` / `-horizontal`), `.aqvs-scrollbar-t
|
|
|
779
782
|
|
|
780
783
|
The auxiliary tap scroll circle can replace the native scrollbar for large datasets while remaining easy to control:
|
|
781
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
|
+
|
|
782
792
|
- **Adaptive speed scaling** automatically ramps up to a `120×` multiplier as `itemCount` grows (trillions supported).
|
|
783
793
|
- **Manual overrides** let you clamp or extend speed via `maxSpeedMultiplier` when you need deterministic behavior.
|
|
784
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)`).
|
package/dist/ScrollBar.d.cts
CHANGED
|
@@ -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 {};
|
package/dist/ScrollBar.d.ts
CHANGED
|
@@ -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
|
package/dist/ScrollBar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollBar.d.ts","sourceRoot":"","sources":["../src/ScrollBar.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAIrD,OAAO,EAA8E,KAAK,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AAiEnJ;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACpC,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAA;IAC/D,4FAA4F;IAC5F,aAAa,CAAC,EAAE;QACZ,qEAAqE;QACrE,oBAAoB,EAAE,MAAM,CAAA;QAC5B,gEAAgE;QAChE,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,4EAA4E;QAC5E,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACJ,CAAA;
|
|
1
|
+
{"version":3,"file":"ScrollBar.d.ts","sourceRoot":"","sources":["../src/ScrollBar.tsx"],"names":[],"mappings":"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"}
|
package/dist/ScrollPane.d.ts.map
CHANGED
|
@@ -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
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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. / 追加のスタイル用クラス名。 */
|
|
@@ -15,11 +15,18 @@ export type TapScrollCircleDragState = {
|
|
|
15
15
|
};
|
|
16
16
|
export type TapScrollCircleProps = {
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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. / 追加のスタイル用クラス名。 */
|
|
@@ -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
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualGrid.d.ts","sourceRoot":"","sources":["../src/VirtualGrid.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"VirtualGrid.d.ts","sourceRoot":"","sources":["../src/VirtualGrid.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure two-axis velocity decomposition for the unified grid tap circle (v3.6.0).
|
|
3
|
+
* 統合 2 軸タップサークル (v3.6.0) 用の純関数 2 軸速度分解モジュール。
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Per-axis speed parameters for `computeTapScrollVelocity` — the exact tuple one bar resolves
|
|
7
|
+
* today. Deliberately an explicit structural type (NOT `Omit<TapScrollSpeedInput, …>`):
|
|
8
|
+
* api-extractor cannot roll up `Omit<>` on the public surface (house rule).
|
|
9
|
+
* `computeTapScrollVelocity` の軸別速度パラメータ — 今日 1 本のバーが解決する組そのもの。
|
|
10
|
+
* 意図的な明示構造型 (`Omit<>` 非使用 — api-extractor がロールアップできないための既定方針)。
|
|
11
|
+
*/
|
|
12
|
+
export type TapScrollAxisSpeedParams = {
|
|
13
|
+
/** Viewport length on this axis (px). / この軸のビューポート長 (px)。 */
|
|
14
|
+
viewportSize: number;
|
|
15
|
+
/** Minimum speed multiplier (viewport-relative). / 最小速度倍率 (ビューポート比)。 */
|
|
16
|
+
minSpeedMultiplier: number;
|
|
17
|
+
/** Maximum speed multiplier (viewport-relative). / 最大速度倍率 (ビューポート比)。 */
|
|
18
|
+
maxSpeedMultiplier: number;
|
|
19
|
+
/** Whether `maxSpeedMultiplier` was explicitly supplied (controls the 1,200 px/s auto floor). / `maxSpeedMultiplier` が明示指定か (1,200 px/s 自動床の制御)。 */
|
|
20
|
+
hasCustomMaxSpeedMultiplier: boolean;
|
|
21
|
+
/** Optional speed-curve shape (same contract as `TapScrollSpeedInput.curve`). / 任意の速度曲線形状 (`TapScrollSpeedInput.curve` と同契約)。 */
|
|
22
|
+
curve?: {
|
|
23
|
+
exponentialSteepness: number;
|
|
24
|
+
exponentialScale?: number;
|
|
25
|
+
easedOffset?: number;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Input for `computeTapScrollVelocity`.
|
|
30
|
+
* `computeTapScrollVelocity` の入力。
|
|
31
|
+
*/
|
|
32
|
+
export type TapScrollVelocityInput = {
|
|
33
|
+
/** Signed px from the circle center (state canonical field). / サークル中心からの符号付き px (state 正準フィールド)。 */
|
|
34
|
+
offsetX: number;
|
|
35
|
+
/** Signed px from the circle center (state canonical field). / サークル中心からの符号付き px (state 正準フィールド)。 */
|
|
36
|
+
offsetY: number;
|
|
37
|
+
/** Shared pull range (= `max(maxVisualDistance, 1)`). / 共有引き範囲 (= `max(maxVisualDistance, 1)`)。 */
|
|
38
|
+
maxDistance: number;
|
|
39
|
+
/** Horizontal-axis speed parameters. / 横軸の速度パラメータ。 */
|
|
40
|
+
x: TapScrollAxisSpeedParams;
|
|
41
|
+
/** Vertical-axis speed parameters. / 縦軸の速度パラメータ。 */
|
|
42
|
+
y: TapScrollAxisSpeedParams;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Decomposes a 2-D tap-circle pull into per-axis scroll velocities (px/s, signed):
|
|
46
|
+
*
|
|
47
|
+
* ```text
|
|
48
|
+
* r = 0 => v = (0, 0)
|
|
49
|
+
* r > 0 => v = ( s_x(r) * ox / r , s_y(r) * oy / r )
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* where `r = ||(ox, oy)||_2` and `s_a` is the UNCHANGED `computeTapScrollSpeed` under axis `a`'s
|
|
53
|
+
* parameters (`distance: r`, shared `maxDistance`).
|
|
54
|
+
*
|
|
55
|
+
* Derivation summary (the axioms this law is the unique solution of):
|
|
56
|
+
*
|
|
57
|
+
* - D1 (legacy reproduction): pure-axis inputs reproduce each 1-D bar law to within 1 ulp
|
|
58
|
+
* under the pinned order — deviations hit a config-dependent ~9% of probed pure-axis points,
|
|
59
|
+
* so never assert bit-equality (`toBe` / `Object.is`) of a pure-axis component against
|
|
60
|
+
* `computeTapScrollSpeed` outside the committed exact fixtures. The rejected order
|
|
61
|
+
* `s * (o / r)` would be bit-exact on pure axes (`o / r = ±1` exactly); the pin below
|
|
62
|
+
* trades that for fixture-order independence (plan §4.2 T1 / §4.3).
|
|
63
|
+
* - D2 (radial law under isotropy): when `s_x = s_y = s`, `|v| = s(r)` at every angle.
|
|
64
|
+
* - D3 (separability): `v_a = s_a(r) * u_a(theta)` for a direction-only unit field `u`.
|
|
65
|
+
* - D4 (isotropic direction fidelity — a CHOSEN axiom, not derived): when `s_x = s_y`,
|
|
66
|
+
* `v` is parallel to the offset with a positive scalar (rotational equivariance).
|
|
67
|
+
*
|
|
68
|
+
* D1-D3 alone do NOT force this law: they admit the whole family
|
|
69
|
+
* `u = (cos phi(theta), sin phi(theta))` for any continuous strictly increasing angle remap
|
|
70
|
+
* `phi` fixing the four cardinal angles (e.g. `phi(theta) = theta - epsilon * sin(4 theta)`).
|
|
71
|
+
* D4 pins `phi = id`. That family is the registered invariant-preserving tuning point for
|
|
72
|
+
* near-axis leakage (plan §4.4); v3.6.0 ships `phi = id`.
|
|
73
|
+
*
|
|
74
|
+
* Evaluation-order pin: each component is computed literally as `s_a(r) * o_a / r`
|
|
75
|
+
* (left-to-right, i.e. `(s * o) / r`). The two orders differ by 1 ulp for SOME inputs —
|
|
76
|
+
* verified witness: `40 * (7 / 25) = 11.200000000000001` while `(40 * 7) / 25 = 11.2` exactly.
|
|
77
|
+
* The committed spec fixtures happen to agree under BOTH orders (`200 * (30 / 50) === 120`
|
|
78
|
+
* etc. — the products land inside half-ulp and round back); the pin exists so the fixtures'
|
|
79
|
+
* `toBe` exactness never depends on that luck of the operand set. Do NOT "test" the old,
|
|
80
|
+
* numerically false claim that `200 * (30 / 50)` misrounds — it does not; deleting this pin
|
|
81
|
+
* because that claim fails would discard a sound pin.
|
|
82
|
+
*
|
|
83
|
+
* Totality: non-finite `ox` / `oy` are sanitized to 0 and `r = 0` returns `(0, 0)` (the origin
|
|
84
|
+
* has no continuous extension — the limit depends on the approach angle). Components are always
|
|
85
|
+
* finite: `s_a` is the existing sole NaN barrier and `|o_a| / r <= 1`.
|
|
86
|
+
*
|
|
87
|
+
* External reproduction of what a bar/grid actually resolves (same pattern as the
|
|
88
|
+
* `computeTapScrollSpeed` docstring):
|
|
89
|
+
*
|
|
90
|
+
* ```ts
|
|
91
|
+
* const velocity = computeTapScrollVelocity({
|
|
92
|
+
* offsetX,
|
|
93
|
+
* offsetY,
|
|
94
|
+
* maxDistance: options.maxVisualDistance ?? TAP_SCROLL_SPEED_DEFAULTS.maxDistance,
|
|
95
|
+
* x: {
|
|
96
|
+
* viewportSize: bandWidth,
|
|
97
|
+
* minSpeedMultiplier: options.minSpeedMultiplier ?? TAP_SCROLL_SPEED_DEFAULTS.minSpeedMultiplier,
|
|
98
|
+
* maxSpeedMultiplier: options.maxSpeedMultiplier ?? computeAutoTapScrollMaxSpeedMultiplier(colCount),
|
|
99
|
+
* hasCustomMaxSpeedMultiplier: options.maxSpeedMultiplier !== undefined,
|
|
100
|
+
* curve: options.maxSpeedCurve,
|
|
101
|
+
* },
|
|
102
|
+
* y: { …same with the pane height and rowCount… },
|
|
103
|
+
* })
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* 2 次元のタップサークル引きを軸別スクロール速度 (px/s、符号付き) へ分解する処理。方向余弦
|
|
107
|
+
* 分解 `v = (s_x(r)·ox/r, s_y(r)·oy/r)` — `s_a` は無改造の `computeTapScrollSpeed`。D4
|
|
108
|
+
* (等方時の方向忠実) は導出ではなく選択公理で、許容リマップ族 `u = (cos φ(θ), sin φ(θ))` を
|
|
109
|
+
* `φ = id` に固定する。評価順序は `s_a(r) * o_a / r` (左から右) にピン — 1 ulp 証人は
|
|
110
|
+
* `40*(7/25) ≠ (40*7)/25`。D1 の純軸再現はピン順序下で ≤ 1 ulp (構成依存の約 9% の点で乖離 —
|
|
111
|
+
* ビット恒等は棄却順序 `s·(o/r)` の側で、ピンはそれをフィクスチャ順序非依存と引き換えた)。
|
|
112
|
+
* 非有限オフセットは 0 へ消毒し、`r = 0` は `(0, 0)`。
|
|
113
|
+
*
|
|
114
|
+
* @param input Offsets, shared pull range, and per-axis speed parameters. / オフセット・共有引き範囲・軸別速度パラメータ。
|
|
115
|
+
* @returns Signed per-axis velocities in px/s (always finite). / 軸別の符号付き速度 (px/s、常に有限)。
|
|
116
|
+
*/
|
|
117
|
+
export declare const computeTapScrollVelocity: ({ offsetX, offsetY, maxDistance, x, y }: TapScrollVelocityInput) => {
|
|
118
|
+
x: number;
|
|
119
|
+
y: number;
|
|
120
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure two-axis velocity decomposition for the unified grid tap circle (v3.6.0).
|
|
3
|
+
* 統合 2 軸タップサークル (v3.6.0) 用の純関数 2 軸速度分解モジュール。
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Per-axis speed parameters for `computeTapScrollVelocity` — the exact tuple one bar resolves
|
|
7
|
+
* today. Deliberately an explicit structural type (NOT `Omit<TapScrollSpeedInput, …>`):
|
|
8
|
+
* api-extractor cannot roll up `Omit<>` on the public surface (house rule).
|
|
9
|
+
* `computeTapScrollVelocity` の軸別速度パラメータ — 今日 1 本のバーが解決する組そのもの。
|
|
10
|
+
* 意図的な明示構造型 (`Omit<>` 非使用 — api-extractor がロールアップできないための既定方針)。
|
|
11
|
+
*/
|
|
12
|
+
export type TapScrollAxisSpeedParams = {
|
|
13
|
+
/** Viewport length on this axis (px). / この軸のビューポート長 (px)。 */
|
|
14
|
+
viewportSize: number;
|
|
15
|
+
/** Minimum speed multiplier (viewport-relative). / 最小速度倍率 (ビューポート比)。 */
|
|
16
|
+
minSpeedMultiplier: number;
|
|
17
|
+
/** Maximum speed multiplier (viewport-relative). / 最大速度倍率 (ビューポート比)。 */
|
|
18
|
+
maxSpeedMultiplier: number;
|
|
19
|
+
/** Whether `maxSpeedMultiplier` was explicitly supplied (controls the 1,200 px/s auto floor). / `maxSpeedMultiplier` が明示指定か (1,200 px/s 自動床の制御)。 */
|
|
20
|
+
hasCustomMaxSpeedMultiplier: boolean;
|
|
21
|
+
/** Optional speed-curve shape (same contract as `TapScrollSpeedInput.curve`). / 任意の速度曲線形状 (`TapScrollSpeedInput.curve` と同契約)。 */
|
|
22
|
+
curve?: {
|
|
23
|
+
exponentialSteepness: number;
|
|
24
|
+
exponentialScale?: number;
|
|
25
|
+
easedOffset?: number;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Input for `computeTapScrollVelocity`.
|
|
30
|
+
* `computeTapScrollVelocity` の入力。
|
|
31
|
+
*/
|
|
32
|
+
export type TapScrollVelocityInput = {
|
|
33
|
+
/** Signed px from the circle center (state canonical field). / サークル中心からの符号付き px (state 正準フィールド)。 */
|
|
34
|
+
offsetX: number;
|
|
35
|
+
/** Signed px from the circle center (state canonical field). / サークル中心からの符号付き px (state 正準フィールド)。 */
|
|
36
|
+
offsetY: number;
|
|
37
|
+
/** Shared pull range (= `max(maxVisualDistance, 1)`). / 共有引き範囲 (= `max(maxVisualDistance, 1)`)。 */
|
|
38
|
+
maxDistance: number;
|
|
39
|
+
/** Horizontal-axis speed parameters. / 横軸の速度パラメータ。 */
|
|
40
|
+
x: TapScrollAxisSpeedParams;
|
|
41
|
+
/** Vertical-axis speed parameters. / 縦軸の速度パラメータ。 */
|
|
42
|
+
y: TapScrollAxisSpeedParams;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Decomposes a 2-D tap-circle pull into per-axis scroll velocities (px/s, signed):
|
|
46
|
+
*
|
|
47
|
+
* ```text
|
|
48
|
+
* r = 0 => v = (0, 0)
|
|
49
|
+
* r > 0 => v = ( s_x(r) * ox / r , s_y(r) * oy / r )
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* where `r = ||(ox, oy)||_2` and `s_a` is the UNCHANGED `computeTapScrollSpeed` under axis `a`'s
|
|
53
|
+
* parameters (`distance: r`, shared `maxDistance`).
|
|
54
|
+
*
|
|
55
|
+
* Derivation summary (the axioms this law is the unique solution of):
|
|
56
|
+
*
|
|
57
|
+
* - D1 (legacy reproduction): pure-axis inputs reproduce each 1-D bar law to within 1 ulp
|
|
58
|
+
* under the pinned order — deviations hit a config-dependent ~9% of probed pure-axis points,
|
|
59
|
+
* so never assert bit-equality (`toBe` / `Object.is`) of a pure-axis component against
|
|
60
|
+
* `computeTapScrollSpeed` outside the committed exact fixtures. The rejected order
|
|
61
|
+
* `s * (o / r)` would be bit-exact on pure axes (`o / r = ±1` exactly); the pin below
|
|
62
|
+
* trades that for fixture-order independence (plan §4.2 T1 / §4.3).
|
|
63
|
+
* - D2 (radial law under isotropy): when `s_x = s_y = s`, `|v| = s(r)` at every angle.
|
|
64
|
+
* - D3 (separability): `v_a = s_a(r) * u_a(theta)` for a direction-only unit field `u`.
|
|
65
|
+
* - D4 (isotropic direction fidelity — a CHOSEN axiom, not derived): when `s_x = s_y`,
|
|
66
|
+
* `v` is parallel to the offset with a positive scalar (rotational equivariance).
|
|
67
|
+
*
|
|
68
|
+
* D1-D3 alone do NOT force this law: they admit the whole family
|
|
69
|
+
* `u = (cos phi(theta), sin phi(theta))` for any continuous strictly increasing angle remap
|
|
70
|
+
* `phi` fixing the four cardinal angles (e.g. `phi(theta) = theta - epsilon * sin(4 theta)`).
|
|
71
|
+
* D4 pins `phi = id`. That family is the registered invariant-preserving tuning point for
|
|
72
|
+
* near-axis leakage (plan §4.4); v3.6.0 ships `phi = id`.
|
|
73
|
+
*
|
|
74
|
+
* Evaluation-order pin: each component is computed literally as `s_a(r) * o_a / r`
|
|
75
|
+
* (left-to-right, i.e. `(s * o) / r`). The two orders differ by 1 ulp for SOME inputs —
|
|
76
|
+
* verified witness: `40 * (7 / 25) = 11.200000000000001` while `(40 * 7) / 25 = 11.2` exactly.
|
|
77
|
+
* The committed spec fixtures happen to agree under BOTH orders (`200 * (30 / 50) === 120`
|
|
78
|
+
* etc. — the products land inside half-ulp and round back); the pin exists so the fixtures'
|
|
79
|
+
* `toBe` exactness never depends on that luck of the operand set. Do NOT "test" the old,
|
|
80
|
+
* numerically false claim that `200 * (30 / 50)` misrounds — it does not; deleting this pin
|
|
81
|
+
* because that claim fails would discard a sound pin.
|
|
82
|
+
*
|
|
83
|
+
* Totality: non-finite `ox` / `oy` are sanitized to 0 and `r = 0` returns `(0, 0)` (the origin
|
|
84
|
+
* has no continuous extension — the limit depends on the approach angle). Components are always
|
|
85
|
+
* finite: `s_a` is the existing sole NaN barrier and `|o_a| / r <= 1`.
|
|
86
|
+
*
|
|
87
|
+
* External reproduction of what a bar/grid actually resolves (same pattern as the
|
|
88
|
+
* `computeTapScrollSpeed` docstring):
|
|
89
|
+
*
|
|
90
|
+
* ```ts
|
|
91
|
+
* const velocity = computeTapScrollVelocity({
|
|
92
|
+
* offsetX,
|
|
93
|
+
* offsetY,
|
|
94
|
+
* maxDistance: options.maxVisualDistance ?? TAP_SCROLL_SPEED_DEFAULTS.maxDistance,
|
|
95
|
+
* x: {
|
|
96
|
+
* viewportSize: bandWidth,
|
|
97
|
+
* minSpeedMultiplier: options.minSpeedMultiplier ?? TAP_SCROLL_SPEED_DEFAULTS.minSpeedMultiplier,
|
|
98
|
+
* maxSpeedMultiplier: options.maxSpeedMultiplier ?? computeAutoTapScrollMaxSpeedMultiplier(colCount),
|
|
99
|
+
* hasCustomMaxSpeedMultiplier: options.maxSpeedMultiplier !== undefined,
|
|
100
|
+
* curve: options.maxSpeedCurve,
|
|
101
|
+
* },
|
|
102
|
+
* y: { …same with the pane height and rowCount… },
|
|
103
|
+
* })
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* 2 次元のタップサークル引きを軸別スクロール速度 (px/s、符号付き) へ分解する処理。方向余弦
|
|
107
|
+
* 分解 `v = (s_x(r)·ox/r, s_y(r)·oy/r)` — `s_a` は無改造の `computeTapScrollSpeed`。D4
|
|
108
|
+
* (等方時の方向忠実) は導出ではなく選択公理で、許容リマップ族 `u = (cos φ(θ), sin φ(θ))` を
|
|
109
|
+
* `φ = id` に固定する。評価順序は `s_a(r) * o_a / r` (左から右) にピン — 1 ulp 証人は
|
|
110
|
+
* `40*(7/25) ≠ (40*7)/25`。D1 の純軸再現はピン順序下で ≤ 1 ulp (構成依存の約 9% の点で乖離 —
|
|
111
|
+
* ビット恒等は棄却順序 `s·(o/r)` の側で、ピンはそれをフィクスチャ順序非依存と引き換えた)。
|
|
112
|
+
* 非有限オフセットは 0 へ消毒し、`r = 0` は `(0, 0)`。
|
|
113
|
+
*
|
|
114
|
+
* @param input Offsets, shared pull range, and per-axis speed parameters. / オフセット・共有引き範囲・軸別速度パラメータ。
|
|
115
|
+
* @returns Signed per-axis velocities in px/s (always finite). / 軸別の符号付き速度 (px/s、常に有限)。
|
|
116
|
+
*/
|
|
117
|
+
export declare const computeTapScrollVelocity: ({ offsetX, offsetY, maxDistance, x, y }: TapScrollVelocityInput) => {
|
|
118
|
+
x: number;
|
|
119
|
+
y: number;
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=computeTapScrollVelocity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeTapScrollVelocity.d.ts","sourceRoot":"","sources":["../src/computeTapScrollVelocity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACnC,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAA;IACpB,wEAAwE;IACxE,kBAAkB,EAAE,MAAM,CAAA;IAC1B,wEAAwE;IACxE,kBAAkB,EAAE,MAAM,CAAA;IAC1B,oJAAoJ;IACpJ,2BAA2B,EAAE,OAAO,CAAA;IACpC,iIAAiI;IACjI,KAAK,CAAC,EAAE;QAAE,oBAAoB,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5F,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACjC,oGAAoG;IACpG,OAAO,EAAE,MAAM,CAAA;IACf,oGAAoG;IACpG,OAAO,EAAE,MAAM,CAAA;IACf,mGAAmG;IACnG,WAAW,EAAE,MAAM,CAAA;IACnB,sDAAsD;IACtD,CAAC,EAAE,wBAAwB,CAAA;IAC3B,oDAAoD;IACpD,CAAC,EAAE,wBAAwB,CAAA;CAC9B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,eAAO,MAAM,wBAAwB,GAAI,yCAAyC,sBAAsB,KAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAgChI,CAAA"}
|