Irozon Design System — design foundations, tokens and components by Irozon AB.
Irozon Design System · v1.0
Components / Process

How this works, not a percentage.

Process v1 — packages/design-system/src/components/process.css. A compact sequence of stages for explaining a flow — "how this product/feature works" — or, opted into deliberately, tracking one genuinely live step. Not a progress bar; there's no percentage, no fill animation, just steps and their relationship to each other.

List
.iz-process on an <ol> — the steps are a real, ordered sequence, not a <div> soup.
Step
.iz-process__step, an <li> holding a .iz-process__marker, .iz-process__label, and an optional .iz-process__description.
Connector
.iz-process__connector, a plain aria-hidden="true" <li> between steps — decoration, never counted content.
State
data-state="complete" | "current" | "upcoming" on a step — entirely optional. No attribute at all is the neutral/explanatory default.
Orientation
data-orientation="vertical" on .iz-process — default is horizontal.
Marker
A plain circular slot — a step number as text by default, or a consumer-supplied icon. Icon-library-agnostic, same policy as every other component here.
Neutral / explanatory

The default — every step reads as equally informational.

No data-state at all. Right for "how this works" copy, a dashboard flow explainer, an onboarding overview shown before anything has actually started — there is no step genuinely "in progress" yet, so none is marked current.

  1. 1 Companies Enter via import
  2. 2 Enrichment Matched against registry data
  3. 3 Review Flagged rows need a human
  4. 4 Published Visible across the workspace
<ol class="iz-process" aria-label="How company data enters the system">
  <li class="iz-process__step">
    <span class="iz-process__marker">1</span>
    <span class="iz-process__label">Companies</span>
    <span class="iz-process__description">Enter via import</span>
  </li>
  <li class="iz-process__connector" aria-hidden="true"></li>
  <li class="iz-process__step">...</li>
</ol>
Complete / current / upcoming

Opt in only for a genuine live tracker.

data-state colors each marker and label — Success-tinted for complete, Green for current, muted for upcoming. Reach for it in a checkout or onboarding progress view where one step is actually in progress right now — not to decorate an explanatory list that has no real "current" step.

  1. 1 Account
  2. 2 Workspace
  3. 3 Billing
  4. 4 Invite team
<li class="iz-process__step" data-state="complete">...</li>
<li class="iz-process__step" data-state="current" aria-current="step">...</li>
<li class="iz-process__step" data-state="upcoming">...</li>
  1. 1 Account
  2. 2 Workspace
  3. 3 Billing
Vertical orientation

Same markup, one attribute.

data-orientation="vertical" on .iz-process — useful in a narrow sidebar or a mobile layout where a horizontal row would wrap awkwardly. Descriptions read comfortably alongside each step instead of stacked beneath it.

  1. 1 Order placed Sep 2, 09:14
  2. 2 Packed In progress at the warehouse
  3. 3 Shipped
  4. 4 Delivered
<ol class="iz-process" data-orientation="vertical" aria-label="Order fulfillment">
  ...
</ol>
Usage

Do / Don't.

Do
Use an <ol> with real <li> steps · leave data-state off for explanatory copy · set aria-current="step" alongside data-state="current" on a genuine live tracker · keep labels to a word or two.
Don't
Reach for Process when you mean a percentage-based progress bar · mark more than one step current at a time · use it as a substitute for Tabs navigation · rely on marker color alone to communicate state.
Accessibility

A real list, plus aria-current for the one live step.

Semantics
An <ol> of <li> steps — a screen reader announcing "list, N items" plus each item's position is exactly the right semantics for free, no ARIA roles invented.
Connectors
.iz-process__connector items are aria-hidden="true" — decorative rules between steps, never announced as list content.
Current step
Set aria-current="step" on the one <li> that's genuinely in progress. data-state="current" is color only — it cannot speak state to assistive tech on its own, the same division of labor as aria-selected on .iz-tab.
Neutral case
Skip aria-current entirely when there's no live step — an explanatory list has nothing to mark as "current."
Color
Every state pairs its color with the marker's border/background and the label's text color — never a bare dot standing alone as the only signal.