Components and application patterns

Guide index · Interaction · Layout · Terminal

These recipes are Oracle's component language. The linked topic pages own exact palette, geometry, type and state values. Application-owned content can vary without inventing a different visual language.

Each family lists its individual controls and reusable presentation components, with the contract each control honors across web, desktop, mobile, and terminal. Larger compositions are named separately so they never hide the controls within them.

Oracle's own design language is authoritative: graphite surfaces, chamfered frames, restrained gradients, dark blue buttons and tabs, cyan focus, violet navigation, and explicit semantic status.

Variants and states belong to their parent control unless they have different interaction contracts. Primary, secondary, danger, quiet, busy, and disabled buttons are not six separate components. A badge is informational; a filter chip is interactive. A select chooses a value, tabs choose a panel, and a menu invokes commands.

Buttons and text actions

Place persistent primary actions in the header's action section or a bottom action area, using the shared chamfered primary button and blue edge. A bottom action area supports thumb reach on tall touch screens and reserves space above safe-area and keyboard insets.

A standard button is at least 40px high, with 16px horizontal padding, an 8px cut, a 1px edge and a 16/24 control label. Use a 20px optional icon with an 8px gap. Primary and secondary buttons share the same dark blue control gradient; primary has the blue edge and weight 600, secondary an essential neutral edge and weight 500. Both remain as dark and translucent-looking as a selected tab.

Use one dominant primary action per local task. A group uses an 8px gap, with the primary at the trailing end in left-to-right layouts. Keep logical focus order. Full-width card actions are appropriate when the whole card presents one next step; do not give every activity row a full-width action.

Quiet actions use primary text at rest, a transparent face and no persistent frame. Navigation links use cyan and an underline in prose. Warning actions use the warning pair; danger actions use the danger pair rather than blue, and name the consequence. Disabled controls keep readable secondary labels and a visible reason nearby. Busy controls replace their label with operation-specific wording such as “Saving draft”, reserve width for both labels, and keep a reserved 20px indicator slot.

In a terminal, use [ Enter: open ] or a named shortcut, bold pale primary text in brackets on the containing background. Secondary actions use the essential edge color; focus recolors only the label cyan, preserving the value. A busy action keeps that bracketed label and reserves one cell for the terminal spinner: a single running-green quadrant block stepping clockwise (▘ ▝ ▗ ▖), the same role as the desktop and mobile four-segment spinner. Do not draw a mouse-style button around every hint.

Change the draft before saving.

Saving draft

Controls in this family

ControlControl contract
ButtonExplicit action; primary, secondary, quiet, danger, disabled, and busy variants. Replace the label with operation-specific wording and preserve geometry while busy.
Icon buttonNamed compact actions such as Close, Clear, Copy, and Refresh, with a full target at the active density.
LinkNavigate to a resource or destination using link semantics, with external-link treatment where appropriate.
Toggle buttonPersistent on/off command state, distinguishable from hover and focus.
Segmented control / content switcherJoined square-profile, single-choice radio-style options. Arrow keys move and select immediately; a persistent check identifies the value. Reserve tabs for content navigation.
ToolbarNamed groups, predictable focus order, and narrow-width overflow.
Menu buttonReusable named command trigger outside the shell.
Menu / menu itemCommand choices, shortcuts, disabled explanations, and keyboard traversal. Nested/checkable items extend the existing flat shell menus.
Overflow / context menuSecondary row, card, or workspace commands, with a keyboard and visible-trigger path.
Split buttonFrequent default action plus alternative commands from one control.
Command paletteSearchable workspace-wide commands and destinations.

Single-choice segmented values use joined square profiles. Arrow keys select immediately; a check remains visible independently of focus. Filter chips reserve their check slot and retain the same resting face.

Wait for the record to load before reviewing the conflict.

Warning unavailable until the draft is loaded.

Tabs, menus and navigation

Tabs are attached panel selectors, not action buttons or filters. Use 40px minimum tab height, 16px horizontal padding, no external gaps, and a square profile with only a 10px top-right cutout. All other corners remain square; do not add the panel's hexagonal ornament. Tabs share the pane baseline. The selected tab has the control gradient and 3px blue top marker; inactive tabs have content material and secondary text. The selected bottom edge joins the content. Scroll the strip horizontally instead of wrapping it into multiple rows.

Tab focus and activation are separate as specified in interaction. Vertical navigation uses the muted violet navigation treatment, not the blue tab face. An app can have violet “Preferences” in its navigation and blue “Advanced” in a content tab strip; they identify different scopes.

Menu titles in the app bar are flat text with stable padding, not bright capsules. Menus are opaque chrome overlays, with an 8px internal inset, command rows with a minimum height of 40 / 32 / 28 / 48px for standard / dense / compact / touch density and a 1px essential edge. Keep 16px label text. Use the opaque neutral menu-row hover fill --menu-row-hover: #253247, preserving primary labels and existing glyph roles. Cyan belongs to focus; keep textual shortcut hints. Submenus must remain keyboard-reachable and stay within the viewport.

Terminal menus are explicit lists with a selected marker and shown activation keys. A selected tab keeps the containing background and uses a bold pale label with the square-profile endcap. Selection uses a persistent glyph on surface.content; focus recolors the label cyan without removing the glyph.

File

Controls in this family

ControlControl contract
Tabs / tab / tab panelAttached panel selection; separate focus from activation and scroll overflow instead of wrapping rows.
Navigation rail / navigation itemDestinations, selected state, labels, collapsed handling, and preserved context.
App bar / identity headerStable application identity and top-level commands.
Breadcrumb trailHierarchical location and parent navigation, with accessible collapse when constrained.
Back controlReturn to prior context with retained selection and reading position.
Pagination / load-more controlsExplicit refresh, append, restart, honest loaded counts, and availability reasons; numbered pages only when supported by the source.
Section navigation / anchor listJump within long pages without duplicating sticky headings or losing focus; scroll-section APIs alone do not supply this control.
Status barPersistent application/connection facts separate from record state.
Keyboard hint / shortcut barDiscoverable applicable commands and active-pane hints.
Navigation drawerResponsive destinations, distinguished from a generic side panel or sheet.
Bottom navigation barReplaces the desktop rail when portrait width cannot fit it beside readable content. Keep the same destinations and violet navigation role, with a persistent selection glyph and weight independent of focus.

Cards, panels and headers

A card has the content gradient, 12px chamfer, 1px quiet frame and 16px insets. Include the subtle top-right hexagonal frame detail using the authoritative dimensions in shape: top-right frame embellishment. Use the recess by default and the popout alternate only with clearance. An optional cyan header accent is 48×4px at the top edge, 16px from the leading edge. Its heading begins at the invariant 16px top/leading inset; neither embellishment nor accent may cross the text.

A card's slots are header, body and optional footer. The header starts with the title and at most one optional trailing status chip; remaining chips, metadata, then any header actions follow below in that order on desktop, mobile and terminal, with 8px between related rows. The footer separates from the body with at least 16px space; add a quiet divider only when it clarifies grouping. A card is not automatically an activation control.

A panel uses the same visual vocabulary at a larger scale. Reuse its frame across header, body and footer rather than giving each slot another outline. Header/footer chrome is visually distinct from the reading body.

A terminal card has a one-cell chamfer border, one-column horizontal inset and one title row. Use fewer cards side by side; a list is preferable when cards would reduce readable line width.

Validation run

ReadyJob 042

Inputs verified. Review the summary before submission.

Controls in this family

ControlControl contract
CardHeading, metadata/status, body, footer, and one frame; activation is an explicit additional behavior.
PanelCoherent header/body/footer and deliberate scroll ownership.
Divider / separatorQuiet grouping, semantic where meaningful; distinct from an interactive resize handle.
Card gridAdaptive cards with sensible reading order and minimum content width.

Fields and editors

Fields use a persistent label above the control, 8px label gap and 4px hint/error gap. The face is flat input material, edge is essential neutral, corner radius is 4px and default minimum height is 40px. A textarea starts at 96px high and can grow or scroll in its own labeled region. Give a select the same field frame, with a stable trailing indicator slot.

Search has a 20px leading magnifier and sufficient leading padding (44px default); Clear is a separate named icon action with the active density minimum target: 40 / 32 / 28 / 48px for standard / dense / compact / touch. Search placeholders supplement a real label. Checkbox/radio inputs have 20px visual marks, 8px text gap and a full control target from the active density.

Guided and JSON editors share one task header and draft. JSON uses the code role, flat input material and no decorative grid. Keys can use cyan, strings violet, numbers/booleans amber, and punctuation primary text; the independent syntax system may reuse UI colors without inheriting their meanings and needs no dimmer or patterned substitutes. Syntax color is not validation status. Green “Valid object” is a separate explicit label.

Invalid JSON remains editable, with an associated error and last valid structured state retained. A revision conflict uses an amber notice above the editors, explains the retained draft and disables saving until explicitly resolved. Footer actions stay reachable while the editor scrolls. Unknown fields must not disappear merely because a guided form does not display them.

Terminal fields show label and current value in separate or clearly delimited cells. A focused edit region recolors its label cyan and shows the editing cursor, preserving the current value and selection glyph; valid/invalid status is textual. Do not use a focus prefix or cyan frame. A large advanced editor may be a separate mode rather than a squeezed second column.

Shown in activity lists.

Region Config
"name": "north-gateway",
"retries": 3
Invalid JSON

Line 4: expected comma.

Controls in this family

ControlControl contract
Field wrapperPersistent label, required marker, hint, associated error, and stable input identity. The wrapper is not itself a text-input API.
Text inputControlled single-line text with read-only, disabled, validation, and input-mode support.
TextareaMultiline prose with a suitable initial height and labeled scroll region; separate from code editing.
Numeric input / spinbuttonBounds, step, units, empty value, and invalid intermediate input without silent coercion.
Password / secret inputMasking, reveal, and appropriate copy behavior for credential entry; no secret values in diagnostics.
Search fieldPersistent label, search icon, named Clear action, and explicit loaded-data versus remote-search scope.
SelectOne bounded choice with explicit empty/unavailable state; a native select is not a custom combobox.
Combobox / autocompleteSearch and choose within one control, with popup, active option, committed value, loading, and no-result states.
ListboxVisible single-/multi-option selection when a collapsed select is unsuitable.
MultiselectSeveral values, visible selections, individual removal, clear-all, and bounded option search.
CheckboxIndependent boolean choice, indeterminate state, and full label target.
Checkbox groupRelated independent choices under a group label, with group hints and errors.
Radio button / radio groupOne choice from a small visible set, with group semantics and desktop arrow-key movement.
SwitchImmediately applied on/off setting with explicit state; distinguish from a deferred form checkbox.
SliderBounded approximate numeric adjustment with visible exact value and keyboard operation.
Range sliderLower/upper interval with individually labeled thumbs and exact numeric alternatives.
Date pickerCalendar date entry for scheduling/filtering, with locale-aware display and unambiguous stored values.
Time pickerTime entry with an explicit timezone when interpretation depends on it.
Date/time range pickerLabeled endpoints and ordering validation for schedules or diagnostic windows.
File picker / uploaderAccepted types, limits, selection, transfer state, cancel, and errors.
File/path fieldPath value, Browse action, and unavailable-path feedback; distinguish local paths from remote identifiers.
Fieldset / field groupGroup label and preserved child identities.
Repeatable array editorAdd/remove structured items while retaining unknown fields, item identity, and declared bounds.
Reference pickerStable identity, loaded-label search, explicit page loading, Clear, and retained unresolved selection.
Guided schema formSupported schema projection, whole-schema validation, unknown-field preservation, and Advanced fallback.
JSON editorRaw draft text, parse errors, last valid structured state, and explicit validation; invalid text remains editable.
Validation summaryReadable issues with navigation to represented fields or the nearest represented parent.
Draft / revision-conflict noticeDistinct dirty, invalid, stale, and conflicting states, with explicit resolution before saving.

Badges, notices and feedback

Filter chips reserve a leading checkmark slot in both states. Selection reveals the check without moving the label or changing the resting content face; the 6px chamfer contour remains available for focus.

A badge is informational, not clickable by default: 6px cuts, 1px semantic edge, 8px horizontal/2px vertical padding and a 14/20 semibold label. A one-line badge is 24px high. Use a full-size target if the badge is also an explicit filter/action.

A notice is a shallow chamfered region with semantic face and edge, 12px internal padding and 8px content gaps. Its title and explanation can share a row separated by a 1px semantic rule when space permits; at compact widths put the explanation beneath. This is a notice-text arrangement, not permission to move a panel's anchored heading beside status chips.

Use green only for established positive facts. Use amber for “Needs review,” “Revision conflict,” and unresolved outcomes. Keep a neutral “Accepted” receipt next to a separately labeled “Outcome pending” state beneath the task title. An unchanged successful observation can remain readable after disconnect, alongside a stale warning.

A toast is supplementary and brief; default dismissal after 6 seconds. Pointer hover, click, or touch makes it persistent until explicitly dismissed. Keyboard focus pauses the remaining dismissal timer and resumes it on leaving, unless the toast has become persistent. Actionable toasts always require explicit dismissal; completing their action does not dismiss them. Errors or unresolved-action information that the user needs must remain in the page until resolved; a disappearing toast is insufficient. Announce important status politely without replaying every log event.

Terminal notices use a label such as [WARN] Draft retained, explanatory text and explicit actions. Toast overlays and timed disappearance are inappropriate for critical TUI information.

Needs review
Revision conflict

Server copy changed. Retain your draft or reload.

Controls in this family

ControlControl contract
Inline notice / alert bannerPersistent semantic explanation and optional recovery, with text beyond color alone.
Toast / snackbarSupplementary transient feedback, paused on hover/focus; critical information remains in the page.
Linear progressObserved completed/total values or explicit unknown progress, without invented percentages.
Busy / loading indicatorNamed ongoing work with reduced-motion support and retained data during refresh.
Skeleton placeholderReserve initial-loading structure when useful, with an accessible loading description.
Inline / field errorSpecific readable error associated with the affected control.
Recovery / retry actionExplain what is retried, retain original identity, and distinguish observation retries from repeat submissions.
Help / shortcut referenceDiscoverable command/navigation reference for complex keyboard workflows.

Collections and tables

Use a broad reading surface with a fixed header/toolbar, quiet row dividers and a separate detail inspector. Default rows are at least 48px; headers use the badge/table role. Keep 12px horizontal cell padding and a minimum 8px gap between meaningful columns. Do not frame every cell or give rows large rounded containers.

Selected rows use a neutral surface, persistent primary-text ▸ glyph, bold text and selected semantics. Cyan focus remains independent. Data text remains primary; record status sits in its own labeled column. Snapshot freshness belongs near the collection heading, separate from record readiness. Filter labels must say whether they search loaded rows or a remote source.

Retain rows during refresh/disconnect and disable unavailable pagination with a reason. “Five shown of six loaded” is a loaded-snapshot fact, not a claim about total remote records. Explicit refresh/restart must not silently erase useful retained data before a replacement succeeds.

At narrow widths show a single list or detail pane with Back, preserving selection and scroll position. Terminal tables prioritize label, state and essential metadata; optional columns move to details rather than truncating the identifying text to nothing.

NameState
north-gatewayReady
west-relayIdle
State: Ready

Controls in this family

ControlControl contract
Collection viewRetained records, explicit loading intents, observation evidence, and separate item actions.
Record list / list itemLabel, state, metadata, selection, and sibling actions with stable record identity.
Data tableLabeled columns, readable rows, overflow, explicit selection, sort intent, and useful compact representation.
Sort control / indicatorActive key/direction and explicit local-versus-remote sort scope.
Row selector / bulk selectionSeparate activation from selection; tri-state select-all and explicit bulk scope.
Filter bar / groupLabeled controls, active count, reset, and clear query scope.
Filter chip / removable tokenFilter toggle or selected-value removal, with visible selection and named removal where applicable.
Badge / status chipInformational status with text and semantic color; no implied clickability.
Metadata / key-value listLabeled facts, missing/unknown values, and trusted-content boundaries.
Freshness / observation indicatorLoading, stale, unavailable, frozen snapshot, revision, and observation time, separate from record readiness.
Empty / no-results stateDistinguish successful empty data, no matches, loading, unavailable data, and no permission; offer one useful next step.
Tree viewHierarchical resources with expansion and independent selection.
Tree table / treegridHierarchical records requiring aligned columns and grid navigation.
Read-only code viewport / snippetBounded code, optional Copy, and horizontal/vertical reading; distinct from editable JSON.
Copy controlCopy an identifier, path, or code block with precise naming and success/failure feedback.
IconConsistent decorative symbols; the owning interactive control supplies the accessible name.
Metric / bounded meterMeasured value, units, limits, and observation time; distinct from task completion.
Chart / data-graphic frameAxes, units, legend, accessible summary, and stale/empty states; applications supply domain series.
Avatar / entity thumbnailUseful person/resource recognition with text and icon/initial fallback.

Shells, drawers and disclosure

Use the shell dimensions in layout. The drawer owns its toggle and retains the same material/frame when collapsed to a 36px rail, with the small-panel 8px cut and no decorative hex as defined on the shape page. A separate focusable resize handle exposes current width and limits; visual decoration does not supply its accessible name.

Disclosure title and its trailing toggle are separate from toolbar/tab controls. Right-pointing means collapsed and down-pointing means expanded. Collapsing preserves retained state and never cancels work. If focused content becomes hidden, return focus to the toggle.

Sticky sections contain a single composite header that hands off at section boundaries. Never clone a focused header or let headings accumulate. In terminals, prefer one fixed region heading and explicit section navigation; do not emulate scrolling pixel-sticky stacks with duplicate lines.

Diagnostics

Connection stable. Last sync 2m ago.

Drawer · 340px
‹

Controls in this family

ControlControl contract
DisclosureNamed expand/collapse toggle, retained hidden state, and focus return on collapse.
AccordionCoordinated sections with explicit single-/multi-open behavior and group keyboard conventions.
Side drawerAuxiliary content, its own collapse control, and continuous frame into the collapsed rail.
Resize handle / window splitterPointer/keyboard resizing, name, current size, and limits; a controller export is not a standalone rendered handle.
Scroll region / viewportLabeled constrained reading with deliberate focus and scroll ownership.
Scroll indicatorPosition/extent feedback alongside keyboard scrolling.
Split / master-detail layoutWide panes and compact single-pane navigation with retained state.
Page layoutHeading, tool area, body, and persistent action placement.
Sticky scroll sectionsOne section-bound composite header and normal-scroll fallback without duplicate headings.
Menu/content layoutTerminal commands beside the reading region with explicit pane focus.
Application frame / shellIdentity, navigation, workspace, diagnostics, status, and hints, with identifiable inner controls.
Navigation drawerResponsive destinations, distinguished from a generic side panel or sheet.

Inspection, workflow and diagnostics

Compose a task heading, status/metadata below, attached detail tabs, content and a persistent action/recovery area. Keep an activity timeline in a complementary pane only when sufficient width remains. Each timeline entry has a 12px marker, explicit label, optional timestamp and secondary description, with 24px minimum vertical separation.

Workflow nodes use the card recipe. Category color and status are distinct. Neutral dotted orthogonal connectors organize relationships; active edges may use directional flow animation per motion, but animation never stands in for status or success. Replace the graph with a stage list on compact screens and in terminals where connectors would be unreadable.

Known progress is a labeled count and running-green bar; unknown totals never show invented percentages. Unresolved originals keep recovery/inspection actions tied to the original identity and scope. Inspecting a request is not a new submission. A completed node or receipt cannot establish final external completion.

Logs use the code role, quiet separators and bounded retention. Cyan informational level tags, amber warnings and danger errors leave the message itself readable. Follow incoming lines only when the reader is already at the end; preserve their position when they scroll away.

Running validation · 3 of 8 stages observed

  1. Accepted 10:02
  2. Validation running
[info] probe ok
[warn] retry scheduled

Long-running operation status

Long-running operations have explanatory text in the app status bar. Show the earliest-initiated operation that is still active. When it finishes, advance to the next earliest active operation; a newer operation never displaces an earlier active one. Hover, click, or tap opens an expanded status dialog showing all operation statuses; keyboard activation also opens it. Every status-bar, secondary, and dialog progress bar stays paired with the text and count for its own operation.

Open status to inspect or complete either operation; reset to replay initiation order.

All operation statuses

  1. Validating records · 3 / 8 records

    Started 10:02:00

  2. Uploading logs · 1 / 4 files

    Started 10:02:05

Controls in this family

ControlControl contract
Action status / receiptSeparate acceptance, pending/uncertain outcome, completion evidence, and original-request recovery.
Action barReachable submission/recovery controls, validation, eligibility, and busy state.
Editor workspaceOne draft across Guided/Advanced modes, retained invalid text, revisions, and stable footer actions.
Inspection workspaceIdentity, observed state, metadata, tabs, activity, and actions; retain access on compact screens.
Activity timeline / entryOrdered labeled events and optional timestamps/descriptions; history alone does not establish current final state.
Workflow node / stage cardStage identity, category, observed state, inspection, and actions; category color remains distinct from status.
Workflow connectorRelationships using Oracle's connector language, without implying successful delivery from geometry.
Stage list / step indicatorCurrent stage and textual observed state; require evidence for completed stages.
Diagnostic / log viewerBounded retention, severity, truncation disclosure, filters, and reading-position preservation.
Diagnostic drawerCollapsible diagnostic region with its own title/toggle and resize behavior where available.
Log follow / pause / jump-to-latestExplicit live-follow state and deliberate return to latest without forcing readers away from earlier lines.
Health / connection panelConnection, probes, stale retained facts, and recovery without presenting disconnected observations as current.

Dialogs, tooltips and empty states

Dialogs use a major chamfer, chrome material, 24px content padding, an essential edge and modal scrim. Default width is 480px, bounded to the viewport minus 32px, with a readable maximum body height and internal scrolling. Put the title first and actions last. Focus enters the dialog, remains inside while modal, and returns to its trigger on dismissal.

A bottom sheet is the same dialog anchored to the bottom edge when a narrow portrait viewport cannot comfortably contain its centered desktop counterpart. Keep the chrome recipe, type roles and title-first header order, followed by remaining chips, metadata and actions. Use the same scrim, focus containment, restoration to the trigger and dismissal policy, including system Back. Keep the title and controls reachable above safe-area and software-keyboard insets while the body scrolls.

Tooltips use metadata type, 8px padding and a small quiet chrome plane. Show on focus as well as hover, with a 500ms pointer delay; do not hide an essential action reason inside a tooltip. Tooltip width is at most 280px.

Empty states use a plain heading, a short explanation and at most one primary next step. Loading, no results, unavailable data and no permission are separate messages. They are not interchangeable empty illustrations. Terminal equivalents are compact text, not large ASCII art.

Copy identifier

Empty state: No records yet.

Controls in this family

ControlControl contract
Modal dialogNamed title/body/actions, bounded scrolling, focus containment, dismiss policy, and focus restoration.
Confirmation dialogConsequence, confirm/cancel, and appropriate initial focus; avoid routine reversible confirmations.
Bottom / modal sheetThe desktop dialog anchored to the bottom edge when portrait width cannot comfortably contain a centered dialog. Preserve dialog chrome, type, title-first header order, scrim, focus containment and restoration; respect safe-area/keyboard insets and the same Back/Close dismissal policy.
Popover / interactive helpAnchored nonmodal content with operable controls, collision handling, dismissal, and predictable focus return.
TooltipSupplemental text on focus/hover; essential instructions remain visible elsewhere.

Platform treatment and shared requirements

Every applicable interactive control needs visible focus, an accessible name, keyboard operation, relevant selected/expanded/checked semantics, and disabled/busy explanations. These are acceptance criteria, not separate controls. Use the existing interaction, accessibility, layout, and token contracts rather than adding competing dimensions or colors here.

  • Web: use native element semantics first and add ARIA roles only where no native element expresses the control.
  • Desktop and mobile: share intent and state across platforms. Desktop honors keyboard and pointer input; mobile honors touch targets, scaling, safe areas, and the system Back action.
  • Terminal: preserve tasks and state through command choices, option lists, focus markers, text notices, and stage lists. GUI-only geometry does not require a matching terminal widget; provide keyboard-operable equivalents.
  • All platforms: retain selection, drafts, observations, and reading position across layout/disclosure changes. Show unknown/unavailable values and distinguish acceptance from external completion.