Skip to content

ObjectDisplay

X-11 · Composites · App components

All elements · ObjectDisplay on the Composites page

Last checked 2026-10-22 · Awaiting approval · Accessibility tests

Copies the bun run a11y:approve command for ObjectDisplay.

ObjectDisplay

X-11WCAG 2.2 AA · Passed #455

Display-definition parsing, tabbed property groups and click-to-edit values. The header shows icon, label, type and actions; each tab is a grid of properties whose values become Fields on click. LabeledObject and LabeledUser chips resolve labels automatically.

Every result resolves to an object. Clicking a result in any view of Search opens this block; only the presentation changes, and data-presentation is the axis that says which. A two-pane view (the Inbox, and Search’s own two-pane view) shows it in place in the right pane, data-presentation="pane", beside the list it was selected from. Every other view — table, cards, list, tree — opens it as an OS-style window: dialog.qf-overlay[data-window] inside the view’s [data-window-area], launched by [data-ds-open-window] and dragged, snapped and docked by the OverlaySystem window layer. In that presentation the window frame carries the object’s icon and title, so the block drops its own and keeps a compact meta strip; the secondary header actions collapse into an overflow menu and the body scrolls on its own inside the frame.

The specimen below is copied from object.html, which shows it inside the app shell, by bun scripts/design-pages/build-composite-pages.mjs — edit that file, not this one; --check fails when they drift.

Axis Values
.qf-object · __header · __icon · __label · __meta · __actions header
.qf-properties · .qf-property[data-span=full] · __label · __value[data-empty] property grid; hover reveals the edit pencil
.qf-labeled LabeledObject / LabeledUser chip
data-presentation pane — framed, in place, filling the right pane of a two-pane view · window — inside dialog.qf-overlay[data-window], which carries the icon and title instead. Absent: the bare block, laid out by whatever holds it.
__heading · __body · __footer · __overflow title column (label + meta), the scrolling region, a pinned action bar, and the menu button the icon-only header actions collapse into in the window presentation
Object with tabbed properties
Water damage claim
CaseCS-2041·Opened 14 Aug 2026
ClaimantjdJane Doe
StatusIn review
Opened14 Aug 2026
Amount£4,250.00
AssessorUnassigned
Property12 Harbor St, Flat 3
ClassificationClaims › Property › Water
Urgent
DescriptionKitchen ceiling leak reported by tenant on 12 Aug; staining visible, no structural damage observed on first visit.
Opened from a result, as an OS-style window
Every result resolves to an object
A two-pane view shows it in place on the right. Every other view opens it as an OS-style window over the view area.
CS-2041 · Water damage claim
Water damage claim
CaseCS-2041·Opened 14 Aug 2026
ClaimantjdJane Doe
StatusIn review
Opened14 Aug 2026
Amount£4,250.00
AssessorUnassigned
Property12 Harbor St, Flat 3
ClassificationClaims › Property › Water
Urgent
DescriptionKitchen ceiling leak reported by tenant on 12 Aug; staining visible, no structural damage observed on first visit.

Guidance

When to use

  • Use it whenever a result resolves to an object and users need its header, actions and properties.
  • Use data-presentation="pane" in the right pane of a two-pane view, such as the Inbox or Search two-pane.
  • Use data-presentation="window" when the object opens from a table, list, gallery, kanban or tree as an OverlaySystem window.
  • Use tabbed property groups when an object has more properties than fit one screen, such as Details, Assessment, Documents and Tasks.
  • Use click-to-edit values when users mostly read properties and change one at a time.

When to consider something else

  • Use the Form composite when users create a record or edit many fields at once. See Form.
  • Use a Card for a short summary of an object in a grid or board. See Card.
  • Use DocumentViewer when the object is a file and its content matters more than its properties. See DocumentViewer.
  • Use the Inbox detail pane when the object is shown through the task being worked on it. See Inbox.

Usability

Do
  • Show the object's icon, label and type in the header, with its key ID and date in __meta.
  • Keep one primary action (such as Approve) in __actions and move secondary icon actions into __overflow in the window presentation.
  • Show empty values as muted text such as Unassigned with data-empty, not a blank.
  • Use .qf-labeled chips for linked users and objects so their labels resolve automatically.
  • Use data-span="full" for long values such as descriptions.
Don’t
  • Do not repeat the icon and title inside a window; the window frame carries them.
  • Do not put more than a few tabs in the body; group properties instead.
  • Do not show the edit pencil only on hover; show it on keyboard focus too.

Accessibility

Keyboard

ObjectDisplay keyboard
Keys Action
Tab Moves through header actions, the tab list, then each property value in the active tab.
Arrow Left / Arrow Right In the tab list, moves to and selects the previous or next tab; Home and End go to the first and last.
Enter On a property value, the binding must turn it into its Field for editing; Escape must cancel and Enter or blur must save.
Enter or Space On More actions, opens the overflow menu; Arrow keys move between items and Escape closes it.

Roles and names

  • Tabs use role="tablist", role="tab" with aria-selected and aria-controls, and role="tabpanel"; hidden panels carry hidden.
  • Property values are <span class="qf-property__value" tabindex="0">; the binding must give each one role="button" and a name such as Edit Claimant, Jane Doe, or render a real button.
  • Property labels and values should be related, for example as a <dl> or with aria-labelledby, so the label is read with the value.
  • In pane presentation the object is an <article> labeled by its <h2 class="qf-object__label">, as in the Inbox; the binding should do the same in every presentation.
  • The overflow button is icon-only with aria-label="More actions", aria-haspopup="menu" and aria-expanded.

Focus

  • Entering edit mode moves focus into the Field; saving or cancelling returns focus to the value.
  • In a window, focus starts on the window's first control; Escape closes the window and returns to the result that opened it.
  • In a pane, selecting a new result does not move focus into the pane.

Other requirements

  • The hover pencil (:hover::after) has no focus equivalent in the CSS; show it on :focus-visible too so keyboard users see the value is editable.
  • Status values are chips with text, not color alone (1.4.1).
  • The property grid must reflow to one column at 320 CSS pixels (1.4.10).
  • Avatars show initials; the .qf-labeled__text beside them carries the full name (1.1.1).

Test your implementation too. This guidance covers the element as specified here. How a screen composes it (labels, order, announcements) still needs its own keyboard and screen reader check.

Accessibility tests

WCAG 2.2 AA · Passed

Passed the gate (run 358b316 on 2026-10-22): no finding in any theme. Awaiting a person’s approval of the checklist below.

ObjectDisplay test checklist
Area Automated A person checks
General Passed Color is never the only cue, text alternatives say the same thing as the graphic, and the element reads the same in the light and the dark theme.
Zoom Passed At 200% zoom, at 320 CSS pixels wide and with the WCAG text-spacing overrides, nothing is lost, clipped or overlapping.
Keyboard Passed Every row of the Keyboard table works, focus is always visible and never trapped, and the tab order follows the reading order. (4 rows)
Screen reader Passed With NVDA or JAWS on Windows and VoiceOver on macOS, names, roles and states are announced as Roles and names says, and changes are announced once. (5 items)

Approving. When the checklist passes on the checked run, record it with bun run a11y:approve -- object --by "Your name" and commit a11y/approvals.json with the rebuilt pages. All test status

Package

Consumers link one stylesheet, css/classic/index.css, which includes every element. The files below are where this element is defined.

ObjectDisplay package
Source css/classic/composites/data.css
css/classic/composites/feedback.css
css/classic/composites/inbox.css
Specimens also use Avatar · Box · Button · Card · Chip · Control · EmptyState · Field · Icon · Menu · Overlay · Table · Tabs · Text · Toggle · Toolbar
Sprites sprites/icons.svg
React Not yet available: the React binding has not started.

Latest updates

No recorded changes yet.

All release notes