The keyboard and focus model shared across controls How overlays open, dismiss, and return focus Selection and activation conventions Composing loading, empty, and error states
Enter and Space activate buttons and button-like controls. Enter follows links. Toggle controls ( mdc-toggle,mdc-checkbox,mdc-radio) change state on Space; radios move selection with arrow keys within their group.
Arrow keys move between items in the natural axis of the widget — including a two-dimensional grid, where arrow keys move in all four directions within the grid itself. Home / End jump to the first / last item where applicable. Type-ahead selects by first characters in listbox-style widgets.
tabindex pattern yourself; it is what Momentum’s own composite components (tabs, list, etc.) already do internally. Grid navigation built this way is still an open gap in Momentum’s primitives today. Don’t reach for mdc-spatialnavigationprovider here: that provider solves a different, app-level problem — a single instance per app giving the whole document directional (D-pad) navigation for TV, set-top-box, console, or kiosk input — not per-widget arrow-key handling (see tabindex.mdc-popover, mdc-dialog, mdc-menupopover, mdc-tooltip, mdc-toggletip, mdc-coachmark, and toasts. They share one dismissal model — apply it to any custom overlay too.Open from an explicit trigger. The trigger and the surface are associated so assistive technology understands the relationship. Move focus deliberately: into the surface for modal dialogs; leave it on the trigger for non-modal transient surfaces like tooltips.
Escape closes the topmost dismissible surface. Click or tap outside closes light-dismiss surfaces (popovers, menus). On close, return focus to the element that opened the surface unless the user has intentionally moved on.
Modal (dialogs) trap focus and make the rest of the page inert until resolved. Reserve modality for content that genuinely requires resolution. Non-modal (popovers, menus, tooltips) let the user keep working and dismiss on outside interaction. Content shown on hover or focus must be dismissible, hoverable, and persistent (WCAG 1.4.13) — Momentum’s tooltip and popover handle this; preserve it in custom work.
mdc-tooltip | |
mdc-toggletip | |
mdc-popover | |
mdc-menupopover | |
mdc-dialog | |
mdc-toast | |
mdc-coachmark |
Single selection — radios, single-select listboxes, tabs. Selecting one item clears the previous. Multiple selection — checkboxes, multi-select listboxes, filter chips. Immediate vs deferred — decide whether a choice applies instantly or on an explicit Apply/Save. Be consistent within a flow, and make deferred changes obviously pending. Disabled vs read-only — disabled removes the control from interaction and the tab order; read-only conveys a value that can’t be edited but can be focused and read. Prefer read-only when the user still needs to perceive the value.
Show progress that matches the wait: mdc-skeletonfor content that is about to appear,mdc-spinner/mdc-progressspinnerfor indeterminate waits,mdc-progressbarfor known-duration or step progress.Preserve layout so content does not jump when it arrives (see responsive design ).Keep the trigger’s context: disable the submit control while its action is in flight rather than letting it be pressed twice.
An empty state is an opportunity, not a dead end. Explain what will appear here and offer the action that fills it. Follow the empty-state voice in content guidelines — descriptive header, avoid “No…”, and reframe positively.
State what happened and what to do next, in text — never color alone. Put field-level errors next to their field, associated programmatically; put flow-level errors where the user’s attention is. For asynchronous failures, offer a retry path and preserve the user’s input. Error copy follows the crisis-moment tone in content guidelines : positive, direct, understanding, no exclamation points.
Accessibility — the conformance baseline behind these behaviors.Responsive design — how interaction adapts across device classes.Content guidelines — the words inside these states and surfaces.Component Tier 3 topics — the authoritative key bindings and props for each control.