Describe the issue
In src/components/layout/CommunityMeetingsCardGrid/index.tsx, the "meeting minutes" modal is a native
<dialog> element (line 223-226) whose visibility is toggled via the open attribute:
<dialog open={isModalOpen} ref={modalRef}>
Native <dialog> only gets Escape-to-close, top-layer stacking, and focus-trapping behavior when it's
opened with dialogRef.current.showModal(). Toggling the open attribute directly opts out of all of that.
The only close affordances are:
-
An outside click/touch listener (toggleModalOpen, lines 50-65) — mouse/touch only.
-
A close icon rendered as a plain div with no keyboard access:
setIsModalOpen(false)}>
It has no tabIndex, role="button", or onKeyDown handler.
Impact
A keyboard-only user who opens this modal (via a meeting's "meeting minutes" button) cannot close it —
Escape does nothing, and the close button is unreachable by Tab. This is a WCAG 2.1.2 "No Keyboard Trap"
failure and a real usability dead-end, not just a cosmetic issue.
Steps to reproduce
- Go to /community
- Tab to a meeting card's "meeting minutes" link and activate it with Enter/Space to open the modal
- Try pressing Escape, or Tab to the close icon and press Enter/Space — nothing closes the modal
Suggested fix
- Call
modalRef.current?.showModal() / .close() in an effect keyed on isModalOpen instead of toggling
the open attribute directly, so native Escape-to-close and focus trapping work.
- Make the close icon a real
<button type="button" aria-label="Close"> (or add role="button",
tabIndex={0}, and an onKeyDown handler) so it's keyboard-operable.
LLM Policy
Describe the issue
In
src/components/layout/CommunityMeetingsCardGrid/index.tsx, the "meeting minutes" modal is a native<dialog>element (line 223-226) whose visibility is toggled via theopenattribute:Native
<dialog>only gets Escape-to-close, top-layer stacking, and focus-trapping behavior when it'sopened with
dialogRef.current.showModal(). Toggling theopenattribute directly opts out of all of that.The only close affordances are:
An outside click/touch listener (
toggleModalOpen, lines 50-65) — mouse/touch only.A close icon rendered as a plain div with no keyboard access:
It has no
tabIndex,role="button", oronKeyDownhandler.Impact
A keyboard-only user who opens this modal (via a meeting's "meeting minutes" button) cannot close it —
Escape does nothing, and the close button is unreachable by Tab. This is a WCAG 2.1.2 "No Keyboard Trap"
failure and a real usability dead-end, not just a cosmetic issue.
Steps to reproduce
Suggested fix
modalRef.current?.showModal()/.close()in an effect keyed onisModalOpeninstead of togglingthe
openattribute directly, so native Escape-to-close and focus trapping work.<button type="button" aria-label="Close">(or addrole="button",tabIndex={0}, and anonKeyDownhandler) so it's keyboard-operable.LLM Policy