You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Dialog clips the focus ring of first and last focusable content children in base styles and Aura #12880
Automated investigation — produced by Claude Code. Needs human verification.
The measurements, root-cause analysis, and suggested fixes below were generated automatically and must be confirmed by a human before being treated as authoritative.
Description
The dialog's content area clips the focus ring of its first and last focusable children, in base styles and Aura. Lumo is unaffected.
[part='content'] is a clipping box whose block padding is removed as soon as the dialog has a header or footer, so the first and last child sit flush against the clip edge — and any part of the focus ring painted outside the element's border box is cut off (vaadin-dialog-overlay-base-styles.js):
Measured with a 1px vertical pixel scan through the focused button, Chrome 141 / macOS:
Theme
[part='content'] padding
Button outline
Ring above
Ring below
base
0 16px
2px, offset 1px
2px
0px — fully clipped
Aura
0 16px
2px, offset -1px
2px
1px — half clipped
Lumo
0 24px 24px
3px, offset 0
2px
2px
Notes:
Lumo escapes only because dialog-overlay.css re-declares padding: var(--lumo-space-l), keeping 24px at the bottom despite the footer.
The content does not need to scroll — overflow and clip-path clip either way. scrollHeight === clientHeight throughout these measurements.
The top edge clips the same way: as the first child with a header present, the button's top ring drops to 1px in Aura.
Expected outcome
The focus ring is fully visible on all edges, in all themes. Clipping it is an accessibility problem (WCAG 2.2 SC 2.4.11 Focus Not Obscured), and it hits the common case of a button or field as the last element of a dialog that has a footer.
Here the button is the only child of the content area, so it is flush at both edges and loses the top and bottom of its ring — only the left and right arcs survive. The existing dev/dialog.html page also reproduces it as-is.
Steps to reproduce
Open dev/dialog.html?theme=aura:light and click Open dialog 1
Press Tab twice to focus the Open dialog 2 button
Notice the focus ring is cut off along the bottom edge
Repeat with no theme parameter (base — bottom edge missing entirely) and with ?theme=lumo:light (all four edges drawn)
Possible fixes
Keep a few pixels of padding-block on [part='content'] instead of collapsing it to 0.
Give base styles a non-positive outline-offset on buttons, as Aura has. This reduces but does not remove the clipping — a 2px outline at -1px still paints 1px outside the border box.
Drop clip-path: border-box and rely on overflow alone, if the clip-path is only there for the corner radius.
Environment
Vaadin version(s): main (25.4.0-alpha1)
OS: macOS 15 (Darwin 25.6.0)
Warning
Automated investigation — produced by Claude Code. Needs human verification.
The measurements, root-cause analysis, and suggested fixes below were generated automatically and must be confirmed by a human before being treated as authoritative.
Description
The dialog's content area clips the focus ring of its first and last focusable children, in base styles and Aura. Lumo is unaffected.
[part='content']is a clipping box whose block padding is removed as soon as the dialog has a header or footer, so the first and last child sit flush against the clip edge — and any part of the focus ring painted outside the element's border box is cut off (vaadin-dialog-overlay-base-styles.js):Measured with a 1px vertical pixel scan through the focused button, Chrome 141 / macOS:
[part='content']paddingoutline0 16px2px, offset1px0 16px2px, offset-1px0 24px 24px3px, offset0Notes:
dialog-overlay.cssre-declarespadding: var(--lumo-space-l), keeping 24px at the bottom despite the footer.overflowandclip-pathclip either way.scrollHeight === clientHeightthroughout these measurements.Expected outcome
The focus ring is fully visible on all edges, in all themes. Clipping it is an accessibility problem (WCAG 2.2 SC 2.4.11 Focus Not Obscured), and it hits the common case of a button or field as the last element of a dialog that has a footer.
Minimal reproducible example
Here the button is the only child of the content area, so it is flush at both edges and loses the top and bottom of its ring — only the left and right arcs survive. The existing
dev/dialog.htmlpage also reproduces it as-is.Steps to reproduce
dev/dialog.html?theme=aura:lightand click Open dialog 1themeparameter (base — bottom edge missing entirely) and with?theme=lumo:light(all four edges drawn)Possible fixes
padding-blockon[part='content']instead of collapsing it to0.outline-offseton buttons, as Aura has. This reduces but does not remove the clipping — a 2px outline at-1pxstill paints 1px outside the border box.clip-path: border-boxand rely onoverflowalone, if theclip-pathis only there for the corner radius.Environment
Vaadin version(s):
main(25.4.0-alpha1)OS: macOS 15 (Darwin 25.6.0)
Browsers
Chrome