agents/projects/chrome-design-system/assets/component-specs/StepIndicator_WebUI_Spec.md
This specification document outlines the mapping, design tokens, styling variants, and interactive states of the StepIndicator component (implemented as <step-indicator> in the Settings WebUI codebase) across Figma and WebUI (Web Frontend).
The StepIndicator is a horizontal progress indicator composed of small dots used to represent the active position and total pages in a multi-step user onboarding or setup guide (e.g. Chrome Privacy Guide).
| Feature | Figma Component | WebUI (Web Frontend) |
|---|---|---|
| Component Name | StepIndicator | <step-indicator> |
| Source Files | Figma Link: 25345:1314 | chrome/browser/resources/settings/privacy_page/privacy_guide/step_indicator.ts |
model.total parameter.model.total is 1 or less, the component renders nothing.model.active. The active dot is highlighted in primary blue color.| State | Figma Property | WebUI CSS / State Property |
|---|---|---|
| Active Dot | state=true (Active) | span.active class applies active background color |
| Inactive Dot | state=false (Inactive) | span base class applies standard background color |
| Visual Property | Figma Design Token | WebUI CSS / Custom Property |
|---|---|---|
| Dot Size (W x H) | 8px x 8px | Width: 8px, Height: 8px |
| Dot Spacing (Gap) | 8px | margin: 0 4px (resulting in 8px gap between dots) |
| Active Color (Light) | var(--desktop/sys/primary-colors/primary, #0b57d0) | var(--google-blue-600) |
| Active Color (Dark) | — | var(--google-blue-300) |
| Inactive Color (Light) | var(--desktop/sys/surface-colors/on-surface-subtle, #474747) | var(--google-grey-200) |
| Inactive Color (Dark) | — | var(--google-grey-500) |
<step-indicator> is built using Polymer (PolymerElement), whereas newer shared components are built using Lit (CrLitElement).--desktop/sys/primary-colors/primary).var(--google-blue-600) and var(--google-grey-200)).gap-[8px] spacing. The start and end of the indicator row have zero extra margin.margin: 0 4px on each individual <span> dot element. While this achieves the correct 8px spacing between dots, it adds an extra 4px margin at the outer left and right bounds of the host container.class="screen-reader-only") that dynamically formats the progress text (e.g. "Step 1 of 4") for screen readers via i18n('privacyGuideSteps', active, total).HTMLElement
└── PolymerElement
└── I18nMixin(PolymerElement)
└── StepIndicator (Manages dots calculation and a11y announcement templates)