Skip to content

Commit e70e35a

Browse files
authored
Elements with role=link should open on [Enter] (vercel#12460)
1 parent 1140455 commit e70e35a

File tree

1 file changed

+31
-0
lines changed
  • packages/react-dev-overlay/src/internal/components/Dialog

1 file changed

+31
-0
lines changed

packages/react-dev-overlay/src/internal/components/Dialog/Dialog.tsx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,37 @@ const Dialog: React.FC<DialogProps> = function Dialog({
2020
}, [])
2121
useOnClickOutside(dialog, onClose)
2222

23+
// Make HTMLElements with `role=link` accessible to be triggered by the
24+
// keyboard, i.e. [Enter].
25+
React.useEffect(() => {
26+
if (dialog == null) {
27+
return
28+
}
29+
30+
const root = dialog.getRootNode()
31+
// Always true, but we do this for TypeScript:
32+
if (!(root instanceof ShadowRoot)) {
33+
return
34+
}
35+
const shadowRoot = root
36+
function handler(e: KeyboardEvent) {
37+
const el = shadowRoot.activeElement
38+
if (
39+
e.key === 'Enter' &&
40+
el instanceof HTMLElement &&
41+
el.getAttribute('role') === 'link'
42+
) {
43+
e.preventDefault()
44+
e.stopPropagation()
45+
46+
el.click()
47+
}
48+
}
49+
50+
shadowRoot.addEventListener('keydown', handler)
51+
return () => shadowRoot.removeEventListener('keydown', handler)
52+
}, [dialog])
53+
2354
return (
2455
<div
2556
ref={onDialog}

0 commit comments

Comments
 (0)