Problem
WebScene parses :active, but the compound matcher has no active-state branch. Unchanged VS Code OSS uses :active extensively for buttons, tabs, list rows, actions, and other pressed feedback, so pointer presses never expose the expected style and visual comparison diverges.
Proposed implementation
- Add a host-independent pressed target to selector interaction state.
- Match
:active on the pressed target and its inclusive ancestor chain, isolated to the current document tree.
- Index
:active selector dependencies separately from :hover so pointer transitions recascade only affected subjects, descendants, siblings, and custom-property consumers.
- Enter active state before
pointerdown/mousedown dispatch and clear it before pointerup/mouseup, cancellation, teardown, or navigation so synchronous computed-style reads see browser-shaped state.
- Keep synthetic events and
HTMLElement.click() from changing user-interaction state.
Acceptance and deferred validation
The implementation must retain bounded invalidation and support direct, ancestor, descendant, sibling, functional-pseudo, pseudo-element, and custom-property selectors. Browser/WPT/native, performance, memory, lifecycle, exact SDK/package, and CI validation are deliberately deferred under the current implementation-throughput directive and remain required before release promotion.
Parent: #237. Coordination: #235, #242, #243, and vscode-demo#1.
Problem
WebScene parses
:active, but the compound matcher has no active-state branch. Unchanged VS Code OSS uses:activeextensively for buttons, tabs, list rows, actions, and other pressed feedback, so pointer presses never expose the expected style and visual comparison diverges.Proposed implementation
:activeon the pressed target and its inclusive ancestor chain, isolated to the current document tree.:activeselector dependencies separately from:hoverso pointer transitions recascade only affected subjects, descendants, siblings, and custom-property consumers.pointerdown/mousedowndispatch and clear it beforepointerup/mouseup, cancellation, teardown, or navigation so synchronous computed-style reads see browser-shaped state.HTMLElement.click()from changing user-interaction state.Acceptance and deferred validation
The implementation must retain bounded invalidation and support direct, ancestor, descendant, sibling, functional-pseudo, pseudo-element, and custom-property selectors. Browser/WPT/native, performance, memory, lifecycle, exact SDK/package, and CI validation are deliberately deferred under the current implementation-throughput directive and remain required before release promotion.
Parent: #237. Coordination: #235, #242, #243, and vscode-demo#1.