Skip to content

Components

C · Components

Recognizable, configurable controls

Composed from primitives, never domain-aware. Each section lists the element's configuration axes (the React props) and shows the states. Use "Show markup" on any specimen to see the exact HTML.

Button

C-01 Element page #394

The one clickable action affordance, icon buttons included. Built from Pressable + Surface + Text + Icon.

Axis Values
data-variant contained (default) · outlined · text · ghost · soft
data-color primary (default) · info · success · warning · error
data-size md 44px (default) · sm 32px · xs 24px
data-icon-only · data-shape · data-block · data-loading square / circle / full-width / spinner
:disabled · aria-pressed state
data-disclosure + aria-expanded pressed disclosure: a button that shows and hides a region in place (the search toolbar's Filters); open, it reads as pressed in (darker fill, selected border, inset shade). Not for a menu or window opener (aria-haspopup)
__badge a count pinned to the corner (aria-hidden; the name says it: "Filters, 2 applied")
Variants × primary
Colors
Sizes, icons, icon-only
Pressed disclosure and badge: Filters closed, open, open with 2 applied
The filter rows the open buttons control
Dialog action pattern: cancel left, primary right

ButtonGroup

C-02 Element page #395
Axis Values
data-orientation horizontal (default) · vertical
data-attached · data-variant joined borders / segmented
data-selection none · single · multiple (drives aria-pressed)
Attached, segmented, exclusive (click to select)

Chip

C-03 Element page #396
Axis Values
data-variant soft (default) · filled · outlined
data-color info (default) · primary · success · warning · error · purple · electric-blue · pink · yellow · brown
data-size · data-shape sm 24px (default) · md 32px / square
data-clickable · aria-pressed · aria-disabled hover / selected / disabled
.qf-chip__delete · .qf-avatar deletable / leading avatar slot
Colors × variants
InfoPrimarySuccessWarningErrorPurpleElectricPinkYellowBrown
InfoPrimarySuccessWarningErrorPurple
InfoPrimarySuccessWarningError
With icon, avatar, delete, selection, sizes
Finance jdJane Doe Finance Disabled Medium 32px Square Truncated label that is much too long

Avatar

C-04 Element page #397
Axis Values
data-size 3xs · 2xs · xs · sm · md (default) · lg · xl · 2xl
data-color · data-shape primary (default) · info · success · … / circle · square
.qf-avatar__img · .qf-icon · text src / icon / initials
.qf-avatar__status[data-status] online · busy · away · offline
.qf-avatar-group · [data-overflow] stack with +N
Initials, icon, image, status, group
jd ak mr jd bs aw
jd ak mr +4

Tooltip

C-05 Element page #398

Hover/focus description with a 300ms enter delay. Lives in a Layer[kind=tooltip]; the static host shown here is CSS-only.

Axis Values
data-placement · data-arrow top (default) · bottom · … / arrow
data-variant dark (default) · light
.qf-tooltip__header bold title line
Hover the buttons
Refresh the results Last indexed2 minutes ago by Jane Doe Light tooltip on a paper surface

Popover

C-06 Element page #399

Anchored floating surface with arbitrary content. Uses the native popover attribute for light-dismiss; only one InfoPopover is open at a time.

Axis Values
.qf-popover__header · __body · __footer slots; body accepts data-padding="none"
.qf-info-rows label / value grid for InfoPopover content
Click to open
Document info
Type
Invoice
Date
2026-08-14
Owner
jdJane Doe
Status
Approved
Rename view

Overlay

C-08 Element page #401

Every large dismissible surface: modal, drawer, inline panel, full page. A native <dialog> supplies the scrim and focus trap. The header carries the chrome tokens, so it goes navy.

Axis Values
data-presentation modal (default) · drawer · panel · fullscreen
data-size · data-placement sm · md · lg · xl / right (default) · left · bottom (drawer)
__header · __title · __body · __footer · __resize slots; body accepts data-padding="none"
Open real dialogs
Inline panel presentation
Invoice INV-2026-0412
Panels use the same header, body and footer as a modal but sit inline in the page flow.
Edit customer
Filters
Share
A bottom sheet for mobile-first actions.
Case CS-2041 · Water damage claim
ClaimantjdJane Doe
StatusIn review
Opened14 Aug 2026
Amount£4,250.00
AssessorUnassigned
PriorityHigh

Confirmation

C-29 Element page #422

Confirm-before-act in three presentations: dialog (Overlay sm), popover, and button (a button that opens either). Never a raw dialog.

Axis Values
data-presentation dialog · popover
confirmText · confirmColor · loading label, color and loading state of the confirm button
Dialog and popover
Archive this document? You can restore it from the archive later.
Delete document
Are you sure you want to delete INV-2026-0412.pdf? This cannot be undone.

Field

C-09 Element page #402

The control shell: label, helper/error text, adornments, sizing. Every input-like component (TextField, Select, DatePicker, InputFieldMapper) is a Field around a Control.

Axis Values
data-size md 44px (default) · sm 32px
data-label-placement top (default) · start
data-required · data-disabled · data-readonly · data-invalid / aria-invalid state
data-mode click-to-edit (rest state looks like text)
__label · __control · __adornment · __helper · __counter slots
States
Helper text below the control.
Enter a valid email address.

TextField

C-10 Element page #403

All twelve free-text variants are a type on the Control plus an optional adornment. Nothing else changes.

Axis Values
type text · email · password · search · tel · url · number · currency · percent · textarea · masked · code
Variants
£
%
Optional.0 / 500

Toggle

C-11 Element page #404

Binary or tri-state choice as checkbox, switch or radio. The native input stays in the DOM (visually hidden) so forms and assistive tech work unchanged.

Axis Values
data-appearance checkbox (default) · switch · radio
data-size · data-label-placement md · sm / end (default) · start
:checked · :indeterminate · :disabled native state
.qf-toggle-group[data-orientation] vertical (default) · horizontal
Checkbox · switch · radio

Select

C-12 Element page #405

Every option-picking control: plain select, combobox, async suggest, multi-select. The trigger is a Field control; the listbox is a Menu. Gated on useCombobox (P-14) for behavior; the visual contract is complete here.

Axis Values
mode select · combobox · suggest (async) · multi
.qf-select__trigger[aria-expanded] chevron rotates
.qf-listbox · __option[aria-selected] · [data-state=active] · __group · __empty listbox parts
.qf-select__chips multi-select value chips inside the control
Click the triggers
Finance
Invoice
Statement
Purchase order
Legal
Contract
Policy
jdJane Doe
akAlex Kim
mrMaya Rossi
tsTom Sato
Finance Q3
Finance
Q3
Urgent
Audit
Listbox states (static)
Invoice
Active (virtual focus)
Selected
Plain
No results for “zzz”

DatePicker

C-13 Element page #406
Axis Values
mode date · datetime · range
.qf-calendar__day aria-selected · data-today · data-outside · data-in-range · data-range-start/end · :disabled
Trigger and calendar
September 2026 · range
MoTuWeThFrSaSu

MemorableDate

C-48 Element page

A date the user already knows, such as a date of birth or the day a benefit started, typed into Month, Day and Year instead of picked from a calendar (USWDS Memorable date). A fieldset and legend around three Fields; for a date the user has to look up or choose, use DatePicker.

Axis Values
data-month select (default, a native select of month names) · text (a two-digit box)
data-required · data-invalid · :disabled state on the fieldset; an invalid box's Field carries data-invalid and its input aria-invalid="true"
__legend · __hint · __error · __fields the question, "For example: January 19 2000", the message, and the row of boxes
__month · __day · __year (each a .qf-field) Day and Year: inputmode="numeric", pattern="[0-9]*", maxlength 2 and 4; aria-describedby the hint (and the error)
autocomplete bday-month · bday-day · bday-year on a date of birth only (1.3.5); none otherwise
Date of birth: month select, autocomplete bday-*
Date of birth For example: January 19 2000
Date of birth (filled) For example: January 19 2000
Month as text
When did your coverage start? For example: January 19 2000
When did your coverage start? (filled) For example: January 19 2000
Error · disabled
Date of birth For example: January 19 2000

Enter a real date: February has 28 or 29 days

When did your coverage start? For example: January 19 2000

Enter the year with four digits, for example 2024

Date of birth (disabled) For example: January 19 2000

Dropzone

C-26 Element page #419
Axis Values
data-state idle · active · reject · disabled
data-compact single-row variant
.qf-dropzone-overlay whole-page target for OS drags (overlayScope=page)
States
Drop files or click to browsePDF, DOCX, XLSX up to 25 MB
Release to upload 3 files
.exe files are not accepted
Attach a fileor drop it here

IconPicker

C-46 Element page

Choose a sprite icon and its color, as for a saved search's sidebar row (Change icon… on its row menu, in a dialog titled "Icon for <name>"): a search field, the color keys as a ColorPicker row, a label naming the chosen icon, then the sprite's icons as a scrolling, keyboard-navigable grid. The chosen icon is drawn in the chosen color.

Axis / element Values
__colors a .qf-color-picker of the ten color keys, flush with the field above
__grid · __row · __cell role=grid · row · gridcell; command-height cells, ten to a row, seven rows tall then it scrolls
__label · __empty "Icon: Users", labels the grid · "No icons match …"
aria-selected · --_tint the chosen icon · the chosen color, set on .qf-icon-picker; the chosen icon is drawn in it
Icon for Team queue: Users, green
Color
Icon: Users
No match
Icon: Point

No icons match “zebra”.

Validation

C-53 Element page

A live checklist of what a Field's value must meet, such as a new password's rules, ticked off as the user types (USWDS Validation). Each requirement says in text whether it is met; one polite live region reports the count after the user pauses, never per keystroke. The input names the checklist in aria-describedby.

Axis Values
__item[data-state] unmet · met; the matching __unmet (circle) or __met (filled check) icon shows, and the visually hidden __state says "not met" or "met"
data-invalid after a failed submit: unmet items take the error ink; pair it with the Field's data-invalid, aria-invalid and an error message
__title · ul.__list[aria-labelledby] · __text "Your password must have", and one item per requirement
__summary[role="status"] the one polite live region: "2 of 4 requirements met", written after a pause and only when the count changes
input aria-describedby the checklist's id (after the error message's when invalid)
Live: type a password (the count is announced after you pause)

Your password must have

  • At least 12 characters, not met
  • An uppercase letter (A–Z), not met
  • A number (0–9), not met
  • A symbol, such as ! or #, not met

States: empty · partly met · all met · after a failed submit

Your password must have

  • At least 12 characters, not met
  • An uppercase letter (A–Z), not met
  • A number (0–9), not met
  • A symbol, such as ! or #, not met

Your password must have

  • At least 12 characters, not met
  • An uppercase letter (A–Z), not met
  • A number (0–9), met
  • A symbol, such as ! or #, not met

Your password must have

  • At least 12 characters, met
  • An uppercase letter (A–Z), met
  • A number (0–9), met
  • A symbol, such as ! or #, met

Your password does not meet 3 of the 4 requirements below.

Your password must have

  • At least 12 characters, not met
  • An uppercase letter (A–Z), not met
  • A number (0–9), met
  • A symbol, such as ! or #, not met

Tabs

C-14 Element page #407
Axis Values
data-variant underline (default) · pill · segmented · vertical
.qf-tabs__tab[aria-selected] · [aria-disabled] · __badge state and count
Underline (click to switch)
Properties panel content.
Pill · segmented · vertical
Vertical tabs put the list on the left and the panel beside it.

The stepper is no longer a Tabs variant: a fixed, ordered process is shown with StepIndicator (C-47), which marks the current step with aria-current="step" and says in text which steps are complete.

Accordion

C-15 Element page #408

Native <details>/<summary>. Exclusive open uses the name attribute.

Axis Values
data-variant default · separated · flush
name same name on every item = exclusive
Default (exclusive) and separated
General
Name, type and description fields live here.
Permissions
Operator groups and access rules.
History
Audit trail.
Separated item
Each item is its own card.
Another item
Content.

Toolbar

C-23 Element page #416
Axis Values
data-bordered · data-density · data-sticky full · bottom / compact / sticky top
__group · __spacer · __title · .qf-divider[vertical] layout parts; overflow collapses tail groups into a Menu
Search toolbar

Pagination

C-24 Element page #417
Axis Values
mode pages · cursor (prev/next only) · load-more
__page[aria-current=page] · __ellipsis · __info · __size parts
Three idioms
200 of 1,204 loaded

Tree

C-25 Element page #418
Axis Values
.qf-tree__node[aria-expanded][data-depth] expand state and indent level
.qf-tree__node[aria-selected] · __toggle[data-leaf] · __count parts
data-show-lines guide lines
Hierarchy (click chevrons and rows)
Finance128
Invoices64
2026 Q3
2026 Q2

SideNavigation

C-50 Element page

The app's rail of destinations, with nested levels the user opens and closes (USWDS Side navigation). The App shell places it in its nav column and adds the tree extensions (groups, row menus, organize mode); here it stands alone, as it would in a settings area or a help center. The site's own Contents rail is one too.

Axis Values
nav.qf-nav[aria-label] › __items the landmark, named for what it lists ("Main", "Settings"), and its scrolling list of rows
a.qf-nav__item › .qf-icon · __label · __badge a destination: optional leading icon, the label (ellipsis when long), an optional count
__row › __twisty[aria-expanded] · __item · __action a destination with children: the twisty (a button named "Expand / Collapse …") shows or hides its __subitems; an optional row action
__subitems + style="--qf-nav-depth: N" · [hidden] a nested level, indented N steps; collapsed with hidden
__item[aria-current="page"] current page: the chrome fill, which its parent rows keep, so the path to it stays marked when a level is open
__section a heading row that names a run of items
In the shell .qf-shell > .qf-nav: placed in the nav column, with fillets joining the current row to the app bar; tree extensions in composites/nav-tree.css

StepIndicator

C-47 Element page

Where the user is in a fixed, ordered process, such as a multi-page application form: one segment per step, and a "Step 2 of 5" heading naming the current one. Modeled on the USWDS Step indicator. It shows status only; the pages themselves move the user on. It is the system's one stepper: the Tabs stepper variant (.qf-stepper) folded into it.

Axis Values
data-variant segments (default) · counters (a numbered circle on each segment)
data-size counters only: md 2rem (default) · sm 1.5rem
data-labels visible (default) · hidden (the heading names the step); below 30rem of width the labels hide on their own
__segment[data-state="complete"] · __segment[aria-current="step"] · __segment complete · current · upcoming; each label ends in a visually hidden "completed" or "not completed" (none on the current step)
__heading › __counter (__current · __total) · __heading-text the "Step N of M" heading, at the level the page needs
Segments with labels
  1. Personal information completed
  2. Household status completed
  3. Supporting documents
  4. Signature not completed
  5. Review and submit not completed

Step3of 5Supporting documents

Counters · small counters
  1. Upload completed
  2. Classify completed
  3. Index
  4. Review not completed
  5. Done not completed

Step3of 5Index

  1. Request completed
  2. Approval
  3. Fulfilment not completed
Labels hidden · first step · last step
  1. Personal information
  2. Household status not completed
  3. Supporting documents not completed
  4. Signature not completed
  5. Review and submit not completed

Step1of 5Personal information

  1. Upload completed
  2. Classify completed
  3. Index completed
  4. Review

Step4of 4Review

Narrow (under 30rem the labels hide; the heading still names the step)
  1. Personal information completed
  2. Household status
  3. Supporting documents not completed
  4. Signature not completed
  5. Review and submit not completed

Step2of 5Household status

LanguageSelector

C-52 Element page

Lets the user read the app in another language (USWDS Language selector). A button naming the current language opens a Menu of languages, each written in its own language and script with its lang, and glossed in the page's language; an app with two languages uses a single link to the other one. UI only: choosing a language here changes the button, not the page.

Axis Values
Form menu (__trigger + __menu) · toggle (__toggle, a link to the other language)
__trigger › __current[lang] a C-01 Button with aria-haspopup="menu"; a visually hidden "Language:" and the current language in its own name
__menu › .qf-menu__item[role="menuitemradio"][aria-checked] one item per language; the current one checked
.qf-menu__label[lang] · [dir="rtl"] · .qf-menu__description the language's own name, its lang (and dir for right-to-left scripts), and its name in the page's language
__toggle[lang][hreflang] the other language's own name, as a link
Menu: click to open and choose; static copy alongside
Two-language toggle: on the English page · on the Spanish page

List

C-16 Element page #409
Axis Values
data-divided · data-bordered · data-dense · data-interactive layout flags
__item[data-state=selected|dragging] · [aria-disabled] row state
__leading · __body · __primary · __secondary · __trailing · __handle · __header parts
Rows with selection, drag handles and a sticky header
  • Today
  • jd Approve invoice INV-2026-0412Assigned by Jane Doe · Acme Holdings · due tomorrow High2h
  • ak Index scanned batch #204114 pages · scan queue Medium5h
  • mr Being draggeddata-state="dragging"
  • Locked taskChecked out by another user
  • Dense row1.2 MB
  • Another dense row88 KB

Table

C-17 Element page #410
Axis Values
data-dense · data-striped · data-sticky-header flags
th[aria-sort] · __sort · __resize[data-state=resizing] column state
tr[data-state=selected] ([aria-selected] in a grid) · td[data-align=end] · [data-truncate] · __select · __actions · __footer parts
Sortable, selectable, resizable columns
Actions
INV-2026-0412.pdf Invoice jdJane Doe Approved £4,250.00 2h ago
Q3-statement-acme-holdings-final.xlsx Statement akAlex Kim In review £12,080.10 Yesterday
MSA-2026-draft-v4.docx Contract mrMaya Rossi Draft — 3 days ago

Card

C-18 Element page #411
Axis Values
data-orientation · data-density · data-elevation vertical · horizontal / compact / none · md
data-clickable · data-state=selected interaction
__media · __header · __heading · __title · __subtitle · __content · __actions · __footer slots
Rest · hover · selected · horizontal · compact
jd
Water damage claim
CS-2041 · opened 14 Aug
Kitchen ceiling leak reported by tenant; assessor visit scheduled.
In reviewHigh
ak
Selected card
data-state="selected"
Primary-50 surface, primary-300 border, small shadow.
With media
16:9 slot
Media slot above the header for thumbnails and previews.
Horizontal
Media on the left, 120px
Compact (kanban card)
12px padding all round.
Backlogjd

Overflow

C-27 Element page #420

Measures children and collapses the tail into a +N that opens a Popover. The static contract is a clipped flex row with a trailing counter chip.

Chips, avatars, toolbar items
FinanceQ3Audit
Acme HoldingsUrgent
jdakmr+5

Resizable

C-28 Element page #421
Axis Values
data-orientation horizontal (default) · vertical
__panel[data-collapsed] · __handle[data-state=dragging] · __grip parts and state
Split panes (hover the handle)
Left pane · 240px
Right pane · fills

Toast

C-20 Element page #413

A Banner in a Toast shell, queued in a fixed region. Preserves the imperative toaster.* API. Five-second timer bar; dedupe by key.

Axis Values
.qf-toast-region[data-position] bottom-right (default) · top-center · bottom-left
.qf-toast[data-state=exiting] · __timer lifecycle
Fire toasts (bottom-right region)
Static toast
Task completed
Approve invoice INV-2026-0412
Timing (2.2.1)

A timed toast pauses while it is hovered or focused and resumes when the pointer and focus leave. A toast with an action has no timer: it stays until it is dismissed or its action is used.

Progress

C-21 Element page #414
Axis Values
data-variant linear (default) · circular
data-indeterminate · data-size · data-color flag / sm · md · lg / primary · success · warning · error · info
style="--_value: 42" determinate value 0–100
Linear
Uploading 3 of 5 files0%
Circular
65%
100%

EmptyState

C-22 Element page #415
Axis Values
data-variant empty (default) · no-results · loading · error · no-access · offline · coming-soon
data-compact · data-bordered inline size / dashed frame
__icon · __title · __description · __actions slots
Variants
Inbox zero
No tasks are assigned to you right now.
No results
Try fewer filters or a different search term.
Loading documents…
Something went wrong
The request failed. Retry, or report it if it keeps happening.
No access
Ask an administrator for the “Assign” operator group.
Coming soon
Kanban for cases is on the roadmap.
Offline
Compact variant.

C-42 – C-45 · Versioning

Versioning components

Save often, version on purpose. Saves keep the work without making a version; closing the editor makes a Draft checkpoint (2.1, 2.2); Publish version makes the next Published version (3.0) and the previous one Superseded. The same markup serves the QEditor title bar and panes (Fluent glyphs, see the Publish version and Version history mockups) and the qaction document screen (Tabler glyphs, below). Behaviour: js/versions.js.

SaveState

C-42 Element page

The save indicator beside a document's name: Saving…, Saved, Offline, or Not saved while it retries, with Retry now. A save never makes a version, so the indicator never says one.

Axis / elementValues
data-statesaving · saved · offline · error
data-placement · data-compacttitlebar (glyph takes the bar's ink; automatic inside .qf-overlay__header) / glyph only, words kept for screen readers
__status (role="status") · __icon · __label · __detailthe live region and its parts
__retryRetry now, outside the live region; hidden unless data-state="error"
States
Saving…
Saved09:14
Offlinechanges are kept on this device
Not savedretrying in 20 s
In a window title bar (Retry now works)
Assessment report CS-2041.docx
Not savedretrying in 20 s
On a title bar the glyph takes the bar's ink; the words carry the state.

PublishVersion

C-43 Element page

The body of the Publish version dialog: the version it will create (2.3 → 3.0), what happens to the previous published version, warnings, and a required comment. Opened from the document screen and from File → Publish version in the editor; both end in POST /api/v2/documents/{id}/publish.

Axis / elementValues
__change · __from · __arrow · __to · __caption · __summary2.3 → 3.0, read as “From version 2.3 to version 3.0”
__warnings.qf-banners: checked out by someone else (error, blocks), under legal hold (warning, publishing is allowed), open in the editor (info); each banner present on open is named in the dialog's aria-describedby after __change, so it is read when the dialog opens
__commenta required .qf-field with a multiline control; data-invalid + aria-invalid when empty on submit
[data-publish-submit] · aria-disabledthe footer's Publish version; disabled with aria-describedby naming the blocking warning
Open the dialog
Body, inline (empty comment submitted)
Publish version

DraftFrom version 2.3 Publishedto version 3.0 Version 2.0 becomes superseded.

Enter a comment. It says what changed in this version.

Publish version

DraftFrom version 2.3 Publishedto version 3.0 Version 2.0 becomes superseded. Drafts 2.1 to 2.3 are kept for 90 days.

Say what changed. Everyone who opens the version history sees it.

Publish version

DraftFrom version 2.3 Publishedto version 3.0 Version 2.0 becomes superseded.

Open in the editor
Mark Rivera is editing. The editor publishes what is open there, including changes not yet in a checkpoint.
Say what changed. Everyone who opens the version history sees it.

Publish version

DraftFrom version 2.3 Publishedto version 3.0

Checked out by Mark Rivera
You can publish when Mark checks the document in, or after a records manager cancels the checkout.
Say what changed. Everyone who opens the version history sees it.

VersionHistory

C-44 Element page

Every version of a document, newest first, grouped by Published version with its Draft checkpoints beneath. Published rows are solid with a green edge, Superseded rows sunken and muted, Draft rows indented with a dashed edge; each also says its status in a badge. Published only hides the drafts. In the editor's side pane and on the qaction document screen.

Axis / elementValues
.qf-version-history[data-filter]all (default) · published
__toolbar · [data-version-filter] · __countthe Published only switch and the polite count
__groups › __group (data-drafts-only) › __toggle · __draftsone group per major number; the disclosure (aria-expanded, aria-controls) shows its drafts
.qf-version[data-status] · aria-current · data-versionpublished · superseded · draft / the version that is open / its label
.qf-version-history__head · .qf-hold-badgethe title row; under legal hold it carries the On hold badge, a warning .qf-chip with the gavel and its words, also used in a pane's .qf-object__meta
__head · __label · __status[data-status] · __tag · __meta · __comment · __actionsrow parts; actions carry data-version-action = open · compare · restore
Grouped history with the Published only filter

Version history

8 versions
  1. Version 3.0

    PublishedLatest published

    Jane Doe · 8 Oct 2026, 09:14 · 214 KB

    Approved for release to the insurer.

    1. Draft 3.2

      DraftCurrent

      Mark Rivera · today, 16:20 · checkpoint when the editor closed

    2. Draft 3.1

      Draft

      Jane Doe · today, 11:02

  2. Version 2.0

    Superseded

    Jane Doe · 2 Oct 2026, 14:40 · superseded by 3.0

    Adds the moisture readings to section 2.

  3. Version 1.0

    Superseded

    Jane Doe · 14 Aug 2026, 15:02 · superseded by 2.0

    Created from the Harbourline site report.

Under legal hold: the On hold badge in the pane header and the history title
Report.docx
ReportOn holdClaims · Modified 9 Oct 2026

Version history

On hold
  1. Version 2.0

    PublishedLatest published

    Mark Rivera · 9 Oct 2026, 10:12

VersionRetention

C-45 Element page

How long Draft checkpoints are kept after the next Published version, for one classification and document type pair: inherit the rule, a number of days, or keep all. Shows the effective rule and where it comes from (this pair, the classification, or the product default). Records managers edit it; everyone else sees it read only.

Axis / elementValues
__choice · __legend · __option · __hint · __daysa radio group; data-retention = inherit · days · keep-all on each radio
__effective (a role="status" box around a __effective (<dl>)lt;dl__effective (<dl>)gt;) · __value · __sourcethe effective rule and its source, a polite live region
data-inherited-value · data-inherited-source · data-pair-namewhat the effective rule reads when the pair inherits
__note · __actionswhat is never pruned / Save
Editable (records manager) and read only
Draft versions of Assessment report in Claims

90 days, the product default. Claims sets no rule of its own.

days after the next published version
Effective rule
30 days after the next published version
Set by
Set here (Claims · Assessment report)

When a document belongs to more than one classification, the longest rule wins and Keep all beats any number. Published and superseded versions, the latest version, records under retention and anything under a legal hold are never pruned.

Draft versions of Invoice in Accounts payable

Keep all, from the classification Finance.

Effective rule
Keep all draft versions
Set by
Classification: Finance

Only records managers can change this rule.

C-30 – C-41 · Office

Office components

The ribbon family and the controls the QEditor editors add (QEditor spec §2.3), and the office variants of existing components. Office icons come from sprites/office-icons.svg; specimens take the Document accent unless they say otherwise. See them in context in the office mockups.

Button: command

C-01 Office Element page

The transparent command button of ribbons, menus bars, panes and status bars (QEditor spec §2.3 C11). sm is the Full small row (1.5rem), md the Compact row (2rem), lg stacked the Full large button.

Axis / elementValues
data-variant="command"on .qf-button
data-sizesm 24px · md 32px (default) · lg 66px
data-layout="stacked"icon over a two-line label (Full large)
.qf-button__label · .qf-button__chevronlabel · menu chevron
aria-pressed · aria-expanded · :disabledtoggle · open menu · unavailable
data-priority · data-collapsed1–4 · label / hidden (P-20)
Sizes and states

SplitButton

C-30 Office Element page

A primary action and a menu half sharing one hover outline (Fluent v9 pattern): two buttons in the roving order; the menu half is named "More options for …". A toggle split carries aria-pressed on the primary; a color split shows its current color in __swatch.

Axis / elementValues
.qf-split-button__primary · __menuthe two halves
__glyph · __swatchicon with a color bar (font color, highlight, fill)
data-sizesm · md (default) · lg
data-layout="stacked"Full large: the label sits in the menu half
Sizes

KeyTip

C-31 Office Element page

An access-key badge at the bottom centre of its target, shown by the KeyTips primitive (P-16) on Alt+Windows or Ctrl+Option. Badges are aria-hidden; the same keys are on the control as aria-keyshortcuts.

Axis / elementValues
.qf-keytipone or two letters
data-state="dimmed"does not match the keys typed so far
data-placement="start"aligned to the start of the target
Layer 1 on the tab row, after typing "H"

MiniToolbar

C-32 Office Element page

The floating formatting bar over a selection or above a context menu: role="toolbar", two rows at most, and never the only path to a command (every one is also in the ribbon).

Axis / elementValues
.qf-mini-toolbar__rowone or two rows
data-state="faded"fades with pointer distance (not under reduced motion)
data-staticin flow, for documentation
Text selection

Ribbon

C-33 Office Element page

One DOM for both modes (spec §1.2): every control is written once with data-priority and its label; data-mode picks Compact (the default: one row, labels visually hidden, priorities 3–4 in the ⋯ menu) or Full (three small rows or a large button per group, group labels, launchers). As the width shrinks, both modes shed labels, then move controls into the ⋯ menu by priority (last group first), then fold whole groups into dropdowns; groups never overlap or clip, and horizontal scrolling is only the last resort (P-20). The tab row takes the app accent and the panel stays flat.

Axis / elementValues
data-modecompact (default) · full
data-statecollapsed (show tabs only) · popup
__bar · __file · __tabs · __tab · __contextual · __end · __searchthe tab row
__panel · __toolbar · __group · __group-body · __group-label · __launcherthe panel (role=tabpanel → role=toolbar → role=group)
__stack · __rows · __row · __sepFull layout of small controls
__more · __display · __collapsed-group · __placeholderoverflow, display options, folded group, unbuilt tab
data-ribbon-onlycompact · full (a gallery in Full is a value button in Compact)
Compact (default)
Full

ColorPicker

C-35 Office Element page

Popover content for font, highlight, fill and outline colors: Automatic, the theme grid (10 × 6 tints and shades), the standard row, More colors…. Each cell is labeled ("Blue, Lighter 40%"); swatches keep their true color in forced colors with a CanvasText border.

Axis / elementValues
__grid · __row · __cellrole=grid · row · gridcell, --_swatch is document data
data-variant="theme"gap under the first row
__label · __action · __previewsection titles · Automatic / More colors… · current/new pair
aria-selectedthe current color
Font color
Theme colors
Standard colors

GridPicker

C-36 Office Element page

The Insert table size picker (10 × 8): arrows grow the selection, the live label names it, Enter inserts. The label is the grid's aria-describedby.

Axis / elementValues
__grid · __row · __cell[data-state="selected"]the size grid
__label"4 × 3 table"
Insert table
4 × 3 table

SpinButton

C-37 Office Element page

A numeric field with ▲▼ steps and a unit: role="spinbutton" with aria-valuetext ("1.27 centimeters"). ↑/↓ step, PageUp/PageDown take a large step.

Axis / elementValues
__input · __unit · __steps · __up · __downparts
data-sizesm (default, ribbon) · md (dialogs)
Units

Slider

C-38 Office Element page

The zoom slider (a detent marks 100%), transparency and brightness: role="slider" with aria-valuetext. The value is a 0–1 fraction in --_value.

Axis / elementValues
__track · __fill · __thumb · __detentparts
Zoom

TaskPane

C-39 Office Element page

A complementary landmark (<aside aria-labelledby>) docked at the end (or the start: navigation, thumbnails, the PDF left pane). Opening moves focus to the title; closing returns it. Two end panes share a dock with a tab strip; under 48rem a pane becomes a drawer.

Axis / elementValues
data-sidestart · end (default)
data-presentationdocked (default) · card (floating card) · drawer
__header · __back · __title · __actions · __toolbar · __body · __footer · __section-labelparts
.qf-pane-dock · __tabs · __tabtwo panes in one dock
Comments pane

StatusBar

C-40 Office Element page

A footer region holding one role="toolbar": items are buttons when they open something (page → Go to, words → Word count), text otherwise; values are not live. The end holds the view radio set and the zoom control. It is not the app's page footer, which holds the version and legal links: that is Footer (C-51).

Axis / elementValues
__bar · __start · __endlayout
__item · .qf-button[data-variant="command"][data-size="sm"]text and actionable items
__views · __zoom · __sepview buttons · zoom (C-38) · separator
data-priorityitems that move out first at narrow widths
Document

CommentThread

C-41 Office Element page

A comment thread: the anchor quote, the author header (avatar, name, time, actions), the body, nested replies, the composer and the actions. In the pane, in the page margin next to its anchor, or as a popup over the page (PDF sticky notes).

Axis / elementValues
data-stateactive · resolved · draft
data-placementpane · margin · popup
__anchor-quote · __header · __who · __author · __time · __metaheader parts
__body · __mention · __reply · __composer · __actionscontent
States
consistent with a failed seal
Mark RiveraYesterday, 16:20

How do we know the seal failed suddenly? Underwriting will ask.

Jane DoeToday, 09:12

Added the moisture readings in §2.

section 2 of the policy
Jane DoeMonday

Reviewed against the policy schedule.

Jane DoeDraft

Ask Northwind to split ceiling and walls before we approve.

Avatar: presence

C-04 Office Element page

Collaborators carry a ring in their presence color (--qf-presence-1…8) and a badge for viewing or editing; the name is always shown beside the avatar or in its tooltip, so hue never identifies a user on its own.

Axis / elementValues
data-presence1 … 8
.qf-avatar__badgeviewing (eye) · editing (pencil)
Group
JDMRPSTO

Tooltip: rich

C-05 Office Element page

The "super tooltip" of ribbon commands: title, shortcut, a one-paragraph description and, on a disabled command, the reason it is unavailable.

Axis / elementValues
data-variant="rich"on .qf-tooltip
__header · __shortcut · __description · __reasonparts
Enabled and disabled

Select: editable

C-12 Office Element page

The editable combobox of the ribbon and the formula bar: a text input with role="combobox" plus a chevron that opens the list. The roving toolbar yields ←/→ to the caret inside it.

Axis / elementValues
data-editableon .qf-select
data-widthfont · size · zoom · namebox · format
data-sizexs (ribbon) · sm (default)
__input · __toggleparts
.qf-listbox__option[data-preview]a font or style previewed in its own face
Widths

Tabs: icon

C-14 Office Element page

Icon-only tabs with tooltips for the Format panes (Fill & Line, Effects, Size & Properties, Picture).

Axis / elementValues
data-variant="icon"on .qf-tabs
Format shape
Fill: solid, gradient, picture, pattern. Line: color, width, dashes.

Toolbar: vertical and floating

C-23 Office Element page

The PDF tool rail on narrow widths (data-orientation="vertical") and the annotation toolbar inside a popover (data-floating). Both are one tab stop with roving arrows (P-15).

Axis / elementValues
data-orientation="vertical"a column of commands
data-floatinga raised bar over the canvas
Vertical and floating