fix: harden virtualization scroll and resize lifecycle - #66
Merged
Conversation
This was referenced Aug 16, 2026
smiggleworth
marked this pull request as ready for review
August 16, 2026 00:08
Contributor
Author
|
Release closure: publish run https://github.com/askrjs/askr-ui/actions/runs/31917207792 succeeded at squash-merged main |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #51.
Closes #52.
Closes #53.
Closes #61.
Summary
VirtualListexplicit before/after spacers so native scrolling owns the full virtual extentVirtualListandVirtualTable@askrjs/ui@0.0.32TDD evidence
12873b635ec27bc5118029114676516c36a43bb5: all three engines reported a 200pxVirtualList.scrollHeightfor 10,000 × 20px rows, browser-level ResizeObserver loop errors during resize churn, visible overflow in both row families, and a 96,024px table scroll state after replacement with a 408px-maximum dataset.a333f95018463b3acf008860138b685096d0c0b2: the same deferred-write/data-replacement bug was reproduced inVirtualListat 80,000px against a new 300px maximum.3c466f9f93e001247914d422e31497247058ad43: 45 focused behavior tests pass across Chromium, Firefox, and WebKit, followed by all 57 virtualization behavior, accessibility, and determinism tests across those engines.75ca9a728bae57500c7e6e49678fb16ac790a079: build, lint, types, unit/check/jsdom suites, 309 browser files / 1,296 browser tests, publint, and isolated packed-consumer validation all pass.VirtualListandVirtualTablehot paths;npm audit --omit=devreports 0 vulnerabilities.Root causes and permanent guardrails
VirtualListrendered only the live window. Semantically valid before/after spacer nodes now reserve exactlyitemCount * rowHeight, includingul/olcomposition. Normal browser CI asserts the real 200,000pxscrollHeight, sets a native 20,000px scroll offset, dispatches the browser scroll event, and requires visible index 1,000.errorchannel and forwarded console errors for the exact ResizeObserver-loop class.Acceptance audit
v0.0.32peels to the squash-merged main SHA, npm integrity is verified, and a clean consumer exercises the repaired virtualization surfaces with a zero-vulnerability production audit.