@aiquants/virtualscroll 3.8.0 → 3.8.1
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 +31 -0
- package/README.md +9 -6
- package/dist/VirtualScroll.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1496 -1489
- package/package.json +1 -1
- package/src/VirtualScroll.tsx +173 -76
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,37 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@aiquants/virtualscroll` are documented here.
|
|
4
4
|
|
|
5
|
+
## 3.8.1 (2026-10-03)
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **マウントのたびに一覧をもう一度描いていた**: 3.8.0 の装置の画素への揃えは、比をラッパーの取り付け (React の
|
|
10
|
+
確定の段) で状態へ確定していた。比が未定 (`null`) から比へ変わるこの更新のため、クライアントでのマウントの
|
|
11
|
+
たびに paint の前の同期の描き直し (React の Profiler では段階 `nested-update` の確定) が 1 回足されていた。
|
|
12
|
+
描き直すのは `VirtualScroll` 本体とペインで、React はその前に確定の passive effect も流す (実測でマウント
|
|
13
|
+
1 回あたり約 0.8〜1.4 ms、マウントの 4〜8 %)。行が 0 件からまた行を持つときのラッパーの付け直しでも同じ
|
|
14
|
+
描き直しが起きていた。ポップアップを開くたびに一覧をマウントするホストでは、開く操作ごとの確定が 1 回
|
|
15
|
+
増えていた。
|
|
16
|
+
- **比は描画の中で読み、取り付けは確かめるだけにする**: 平行移動を揃える比はラッパーを描く部品が描画の中で
|
|
17
|
+
読む。取り付けの前は React を実行しているページのウィンドウを描くウィンドウと見込み、取り付けがラッパーの
|
|
18
|
+
文書のウィンドウと突き合わせる。自分のウィンドウの文書に描いた一覧は最初の確定から揃った値で描き、確定の段の
|
|
19
|
+
描き直しは起きない (マウントでも行 0 件からの付け直しでも `nested-update` は 0 回)。iframe や別ウィンドウの
|
|
20
|
+
文書に描いた一覧は、取り付けでそのウィンドウの比へ切り替えて paint の前に 1 回だけ同期で描き直す (3.8.0 と
|
|
21
|
+
同じく、見込みの比で揃えた値は描かれない)。ブラウザの拡大縮小や密度の違う画面への移動は従来どおり
|
|
22
|
+
`(resolution: <比>dppx)` のメディアクエリで追い、確定の段の外の通常の更新 1 回で揃え直す。サーバー描画の
|
|
23
|
+
HTML は厳密値のままで、ハイドレーションも厳密値で描くので不一致は報告されず、ハイドレーションの直後に揃えた
|
|
24
|
+
値へ置き換わる。ウィンドウを持たない文書へ描くとラッパーの取り付けで `Error` を投げるのも従来どおり。描かれる
|
|
25
|
+
値と公開 API は変わらない。
|
|
26
|
+
- **テスト**: `VirtualScroll.spec.ts` +4 と 2 件の強化。`React.Profiler` で確定ごとの段階とその確定の時点の
|
|
27
|
+
transform を記録し、自分のウィンドウの文書へのマウントが比 1.25 でも最初の確定から格子上にあり
|
|
28
|
+
`nested-update` が無いこと、マウントの後の行 0 件 → 1000 件の付け直しの区間に `nested-update` が無く
|
|
29
|
+
付け直した確定から格子上にあること、比の変化は `update` の確定 1 回で揃え直すこと、`renderToString` は
|
|
30
|
+
厳密値を書き比 1.25 での `hydrateRoot` は不一致を報告せずハイドレーションの直後に揃え直すことを固定する
|
|
31
|
+
(新規 4 件)。act を使わない `flushSync` の行は確定が `mount` 1 回だけであることを、iframe の行は見込みの
|
|
32
|
+
ウィンドウからの切り替えが `nested-update` 1 回でその確定が iframe の比で揃っていることを足した。修正前の
|
|
33
|
+
ソースでは 3 件 (マウント・付け直し・`flushSync`) が red。vitest 1,030 件 / 53 ファイル (単体 999 + 統合 31。
|
|
34
|
+
2026-10-03 の `vitest run --maxWorkers=2` 1 回の全数実測で、すべて通りスキップ 0)。
|
|
35
|
+
|
|
5
36
|
## 3.8.0 (2026-10-03)
|
|
6
37
|
|
|
7
38
|
### Added
|
package/README.md
CHANGED
|
@@ -145,17 +145,20 @@ deltas, centred alignment, fractional row heights or insets) therefore never mov
|
|
|
145
145
|
a device pixel. A layer moved by a fraction is resampled as a whole: 2 px borders, outlines, focus rings and
|
|
146
146
|
the gaps between them smear across neighbouring pixel rows, and text blurs.
|
|
147
147
|
|
|
148
|
-
- The ratio comes from the window of the list's own document
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
148
|
+
- The ratio comes from the window of the list's own document, and it is read while the wrapper renders.
|
|
149
|
+
Before the wrapper is attached, the component expects the window of the page that runs React, and the
|
|
150
|
+
attach confirms it. A list rendered into its own window's document is therefore snapped in its first
|
|
151
|
+
commit, with no extra render. A list rendered into an iframe or a second window switches to that
|
|
152
|
+
window's ratio when the wrapper attaches, with one extra synchronous render before the browser paints.
|
|
153
|
+
The ratio is read again whenever it changes (browser zoom, or moving the window to a screen of another
|
|
154
|
+
density), through a `(resolution: <ratio>dppx)` media query.
|
|
152
155
|
- Only the wrapper translate is snapped. Row positions inside it keep their exact values (the browser paints
|
|
153
156
|
fractional positions inside a layer on whole pixels already), and every position the component reports
|
|
154
157
|
(`onScroll`, `onRangeChange`, `getScrollPosition()`, `getScrollAnchor()`) stays exact. The rows are drawn
|
|
155
158
|
at most half a device pixel away from the exact scroll position. `VirtualGrid` rows are drawn by the same
|
|
156
159
|
wrapper, so they are snapped vertically as well.
|
|
157
|
-
- Server-rendered HTML carries the exact offset, since there is no screen on the server
|
|
158
|
-
|
|
160
|
+
- Server-rendered HTML carries the exact offset, since there is no screen on the server. Hydration renders
|
|
161
|
+
the same exact offset, so it reports no mismatch, and the snapped offset replaces it right after hydration.
|
|
159
162
|
- Rendering into a document without a window (for example one made with
|
|
160
163
|
`document.implementation.createHTMLDocument()`) throws when the wrapper attaches: nothing is painted there,
|
|
161
164
|
so there is no ratio to snap to.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualScroll.d.ts","sourceRoot":"","sources":["../src/VirtualScroll.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAc,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"VirtualScroll.d.ts","sourceRoot":"","sources":["../src/VirtualScroll.tsx"],"names":[],"mappings":"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"}
|