Patterns

Interaction States

Every interactive component must define all 8 states. Apply these rules at the component level — not per screen. Color is never the only state indicator.

8-State component model

Pair each state with a non-color indicator: border, fill, icon, or text weight. Disabled components stay in the layout; never collapse or hide them.

Default

Default

Resting state

Hover

Hover

Confirm interactivity

Active

Active

Click in progress

Selected

Selected

Chosen / current

Focus

Focus

Keyboard nav

Disabled

Disabled

Keep in layout

Loading

Loading

Async in progress

Error

Error

Validation / failure

Action consequence model

One high-consequence action should be visually primary per surface. Destructive actions use semantic red — never the theme accent color.

Low

Filter, inspect, preview, copy

Immediate — no confirmation needed.

Medium

Test run, draft save, validate

Immediate — but undo should be available.

High

Publish, delete, revoke, run in production

Requires confirmation. Clear post-action state.

Progressive disclosure

Primary sidebar

Global destinations

Secondary sidebar

Object-level routes

Toolbar

Object actions

Panels

Advanced options

Each level adds specificity. Never surface rare configuration in primary navigation.

Additional rules

Density modes

Compact32–36px · Expert / monitoring
Standard36–44px · Production consoles
Comfortable44px+ · Onboarding / demos

Focus & keyboard

  • Rings visible on all backgrounds
  • Tab: sidebar → subnav → toolbar → canvas
  • Icon-only: aria-label + tooltip
  • Disabled: maintain size, never hide

Error placement

Node errorNear output/header
Form errorUnder the field
Table emptyInside table body
System failureGlobal banner only