Repository navigation
Add contrast checker for pseudo-state color panels - #78333
dhruvikpatel18 wants to merge 1 commit into
Conversation
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message. To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
|
@dhruvikpatel18 thanks for the PR! I don't see the block state dropdowns (the three dots next the the block name in the inspector)
was this PR created from an older version of trunk previous to #76491 being merged? It would be good if you could rebase it so we can test that it works. Also there's a conflict that needs solving in the color hook. |
200c509 to
d1f2d0c
Compare
|
I see #80223 was merged, so we can close this PR. |
|
Closing in favour of #80223. |

Closes #78305
What?
Adds contrast-ratio checking to all interactive pseudo-state color panels (:hover, :focus, :focus-visible, :active) in the block inspector.
When a user sets a low-contrast color combination for a pseudo-state, a warning notice now appears, the same notice already shown for the default state.
Also fixes a false-positive warning that could appear when the user was editing the default state and physically hovered the block in the canvas while the inspector was open.
Why?
PR #76491 added support for styling blocks per interactive pseudo-state, which is great for theming. However, the existing contrast checker (BlockColorContrastChecker) works by reading colors via window.getComputedStyle on the live canvas DOM element.
In the default state this works correctly: the computed styles reflect the block's current colors.
In a pseudo-state (:hover, :focus, etc.) the canvas element is always in its resting state. The pseudo-state CSS rules never apply to the DOM unless the user physically hovers/focuses the element, which they won't be doing while typing in the color picker. So getComputedStyle silently returns the default-state colors and the contrast check is effectively skipped, exactly the bug described issue.
The false-positive case was the inverse: if the user happened to hover the canvas while on the default panel, the DOM checker would briefly read the hover-state CSS and emit a spurious warning.
Testing Instructions
Screenshots or screencast
Screen.Recording.2026-05-15.at.4.17.29.PM.mov