A progress indicator for multi-step flows, in bullet, circular and dash forms. Merges the former Stepper - Bullet, Stepper - Circular and Stepper - Dash.
4337:11140 in the 2026 Working File as a single Stepper, merging the former Bullet, Circular and Dash components into Type × Steps × Current × Status. Step count is a property rather than sibling components, the ordinal position enum is now an integer, Status states exist where the originals had almost none, property naming follows the guidelines throughout, and the step markers are vectors. The full 2–10 range, the per-Type Status coverage and horizontal-only orientation are all deliberate. All four DS Health traits pass; the only item still open is Code Connect, blocked until the native library exists.Stepper - Bullet appears at the top or bottom of multi-step flows — most commonly paginated onboarding, swipeable carousels of tutorial cards, and photo galleries where the user needs a minimal position indicator without numerical labels.
Type, Steps, Current and Status are orthogonal and correctly named — Type is a §1 standard property, integers replace the old ordinal enum, and every value is Title Cased per §5.| State | iOS | Android | Figma Property | Notes |
|---|---|---|---|---|
| Current step | Yes | Yes | fill = bg | Dot at current index fills in main/stepper/color/bg (#005CE5). |
| Other steps | Yes | Yes | fill = bg-track | All other dots fill in main/stepper/color/bg-track (#D2E5FF). Note: the spec does not distinguish completed vs upcoming — both look identical. |
| Completed vs upcoming | N/A | N/A | Not modeled | Bullet steppers in other systems often shade completed dots differently from upcoming ones. This family collapses both into the track color — direction of travel is lost. |
| Clickable / interactive | N/A | N/A | Not modeled | Used in carousels, some implementations let the user tap a dot to jump to that page. No pressed / focused state exists today. |
| Connector line | N/A | N/A | Not modeled | Classic Material / iOS bullet steppers draw a thin line between dots tinted to match completed / upcoming. This family uses blank 8-px gaps instead. |
- Three Stepper components merged into one. v2.0: Rebuilt on node
4337:11140in the 2026 Working File as a single Stepper set. Stepper - Bullet, Stepper - Circular and Stepper - Dash are nowType = Bullet | Circular | Dash— the unification all three assessments recommended independently. (C4 · Family) C4 · Native Mappability - Step count is a property, not sibling components. v2.0: Bullet had three siblings and Circular nine, each hard-coding a step count; Dash encoded it as ten
propNStepperbooleans. All of that is now a singleStepsaxis. (C2 · Property) C2 · Variant & Property Naming - Ordinal position replaced by an integer. v2.0: The
highlighted = 1st | 2nd | … | Nthordinal enum is nowCurrentcarrying integers, which maps directly to acurrentStep: Intparameter rather than needing a lookup table. (C2 · Rename) C2 · Variant & Property Naming - Status states added. v2.0:
Status = Current | Completed | Upcoming | Errornow exists where none of the three originals distinguished completed from upcoming, and only Dash had any notion of error. (C5) C5 · Interaction State Coverage -
Stylerenamed toType. v2.1: §6 namesStyleexplicitly as a catch-all to avoid, alongsideConfigurationandSettings.Typeis a standard variant property from §1 and says the same thing without the anti-pattern. (C2 · Rename) C2 · Variant & Property Naming - All variant values Title Cased. v2.1:
Bullet | Circular | DashandCurrent | Completed | Upcoming | Errornow follow §5, replacing the lowercase values. (C2 · Rename) C2 · Variant & Property Naming - Uneven Status coverage confirmed intentional. v2.1: Closed by owner decision — Bullet carries only Current and Completed, Circular is almost entirely Current with single Completed and Upcoming entries, and Dash carries Error throughout. Each Type supports the statuses its usage actually calls for rather than filling out a uniform matrix. (C5) C5 · Interaction State Coverage
- Full 2–10 step range retained. v2.1: Closed by owner decision, superseding an earlier intent to cap the range — the set keeps all 225 variants. Figma cannot parameterise a repeating count, so enumerating every combination is the only way to make each one selectable; capping would mean any flow longer than the cap had no variant and a designer would have to detach. The cost is set size in Figma only — the native API takes
stepsandcurrentas integers and has no such limit. (C2) C2 · Variant & Property Naming - Dots and ring arcs confirmed as vectors. v2.1: Confirmed by the component owner — the step markers are vector shapes, not the raster PNGs all three original assessments flagged. They recolour with tokens and stay crisp at any density. Not independently verifiable from the assessment tooling, whose response limit the node exceeds. (C6 · Asset) C6 · Asset & Icon Quality
- Horizontal-only orientation confirmed intentional. v2.1: Closed by owner decision — Stepper ships horizontal only. An
Orientationaxis would multiply an already large set for a layout the product does not use, and vertical progress indication is better served by a different pattern than a rotated stepper. Revisit only if a long-flow screen genuinely calls for it. (Composition) C4 · Native Mappability
- Announce "Step X of Y" to screen readers. All three original assessments raised this and it is still unaddressed. A progress indicator that conveys position only visually is invisible to assistive technology — the native component should expose the position as an accessibility value. A11y
| Role | Element | Token | Value |
|---|---|---|---|
| Bullet · Current | Current and completed steps | — | #005CE5 |
| Bullet · Current | Upcoming steps | — | #D2E5FF |
| Circular · Current | Ring | — | #D2E5FF |
| Circular · Completed | Ring | — | #12AF80 |
| Circular · Current | Arc | — | #005CE5 |
| Circular · Completed | Arc | — | #12AF80 |
| Circular · Current | Index | — | #005CE5 |
| Circular · Upcoming | Index | — | #9BC5FD |
| Circular · Current | Checkmark | — | #12AF80 |
| Circular · Current | Step label | — | #90A8D0 |
| Dash · Current | Current and completed steps | — | #005CE5 |
| Dash · Completed | Current and completed steps | — | #12AF80 |
| Dash · Current | Current step in error | — | #D61B2C |
| Dash · Current | Upcoming steps | — | #D2E5FF |
iOS — Swift Package Manager
.package(url: "https://github.com/AY-Org/eb-ds-ios", from: "1.0.0")
Android — Gradle (Kotlin DSL)
implementation("com.eastblue.ds:stepper:1.0.0")
Import
import EastBlueDS import com.eastblue.ds.stepper.*
Type, Steps, Current and Status are the set’s four variant properties. Circular carries two text layers, #index and #label; Bullet and Dash have none. Colour variable bindings and the text property exposure are not readable with the plugin.
| Figma Property | SwiftUI | Compose |
|---|---|---|
| Type — Bullet, Circular, Dash | .ebType(.bullet / .circular / .dash) | type = EBStepperType.Bullet / Circular / Dash |
| Steps — 2 … 10 (Bullet from 3) | steps: Int | steps = 3 |
| Current — 0 … 10 | current: Int | current = 1 |
| Status — Current, Completed, Upcoming, Error | .ebStatus(.completed / .upcoming / .error) | status = EBStepperStatus.Completed / Upcoming / Error |
| #index (text, Circular) | Drawn from current — no parameter | Drawn from current — no parameter |
| #label (text, Circular) | .ebLabel("Step 1 of 10") — the layer sits outside the 45 × 45 frame in Figma | label = "Step 1 of 10" |
EBStepper(steps: 3, current: 1)
.ebType(.bullet) EBStepper(
steps = 3,
current = 1,
type = EBStepperType.Bullet
) EBStepper(steps: 3, current: 1)
.ebType(.circular) EBStepper(
steps = 3,
current = 1,
type = EBStepperType.Circular
) EBStepper(steps: 3, current: 1)
.ebType(.dash) EBStepper(
steps = 3,
current = 1,
type = EBStepperType.Dash
) | Requirement | iOS | Android |
|---|---|---|
| Progress semantics | .accessibilityValue("Step 2 of 4") on the stepper; .accessibilityAddTraits(.updatesFrequently) while it moves. | Modifier.semantics { progressBarRangeInfo = ProgressBarRangeInfo(2f, 0f..4f) } plus stateDescription = "Step 2 of 4". |
| Decorative marks | The dots, dashes and ring are .accessibilityHidden(true); the value carries the meaning. | Marks are clearAndSetSemantics; the value carries the meaning. |
| Error and completed | Append "error on step 2" or "completed" to the value — colour alone is not announced. | Same phrasing in stateDescription. |
| Not interactive | No button trait; steps are not tap targets. | No clickable; steps are not touch targets. |
Do
Use Bullet for short flows of 3 to 5 steps where position is enough.
Don't
Don’t use Bullet above 6 steps — the row of dots stops reading as progress.
Do
Use Circular when the screen has room for one 45 px marker and the step number matters.
Don't
Don’t stack Circular per step; it shows one step at a time.
Do
Use Dash when steps can fail — it is the only Type with an Error status.
Don't
Don’t use Error on Bullet or Circular; the set does not build it.
Do
Keep Current between 1 and Steps; Completed sets it to Steps.
Don't
Don’t pass Current 0 outside the Circular Upcoming state.
| ID | Criterion | Status | Notes |
|---|---|---|---|
| C1 | Layer Structure & Naming | Needs Refinement | Circular’s label-container sits below the 45 × 45 frame and never renders; #index and #label keep the # sigil; Bullet dots are eight layers all named ellipse. Dash segments are 1st … 10th — read on 4365:12137, 4337:11205, 4695:22253. |
| C2 | Variant & Property Naming | Ready | Type, Steps, Current, Status — Title Case values, integers for the two counts. |
| C3 | Token Coverage | Ready | #index resolves to Primary/Headlines/Block, #label to Primary/Label/Fine. Colour variable bindings are not readable with the plugin — confirm in Dev Mode. |
| C4 | Native Mappability | Ready | One enum, two integers, one status enum — maps 1:1 onto EBStepper; the arc is a stroked path. |
| C5 | Interaction State Coverage | Ready | Status coverage differs by Type by design (v2.x confirmation): Bullet Current and Completed, Circular adds Upcoming, Dash adds Error. Not interactive, so no Pressed. |
| C6 | Asset & Icon Quality | Ready | Dots, dashes, ring and arc are vectors; the Completed check is the 16 × 16 Checkmark instance. |
3 Type × Steps 2–10 × Current × Status, built where the Type needs it (Bullet 52, Circular 56, Dash 117) = 225 variants
| Type | Statuses built | Count |
|---|---|---|
| Bullet | Current for every Steps × Current; Completed at Current = Steps | 52 |
| Circular | Current for every Steps × Current; Upcoming and Completed at Steps = 2 | 56 |
| Dash | Current and Error for every Steps × Current; Completed at Current = Steps | 117 |
View full Type × Steps × Current × Status breakdown (225 rows)
| Type | Steps | Current | Status | Node | Dimensions |
|---|---|---|---|---|---|
| Bullet | 3 | 1 | Current | 4337:11138 | 40 × 16 |
| Bullet | 3 | 2 | Current | 4337:11201 | 40 × 16 |
| Bullet | 3 | 3 | Completed | 4337:11470 | 40 × 16 |
| Bullet | 4 | 1 | Current | 4337:11137 | 56 × 16 |
| Bullet | 4 | 2 | Current | 4337:11205 | 56 × 16 |
| Bullet | 4 | 3 | Current | 4337:11474 | 56 × 16 |
| Bullet | 4 | 4 | Completed | 4337:11586 | 56 × 16 |
| Bullet | 5 | 1 | Current | 4337:11136 | 72 × 16 |
| Bullet | 5 | 2 | Current | 4337:11210 | 72 × 16 |
| Bullet | 5 | 3 | Current | 4337:11479 | 72 × 16 |
| Bullet | 5 | 4 | Current | 4337:11591 | 72 × 16 |
| Bullet | 5 | 5 | Completed | 4337:11714 | 72 × 16 |
| Bullet | 6 | 1 | Current | 4337:11135 | 88 × 16 |
| Bullet | 6 | 2 | Current | 4337:11216 | 88 × 16 |
| Bullet | 6 | 3 | Current | 4337:11485 | 88 × 16 |
| Bullet | 6 | 4 | Current | 4337:11597 | 88 × 16 |
| Bullet | 6 | 5 | Current | 4337:11720 | 88 × 16 |
| Bullet | 6 | 6 | Completed | 4337:12034 | 88 × 16 |
| Bullet | 7 | 1 | Current | 4337:11134 | 104 × 16 |
| Bullet | 7 | 2 | Current | 4337:11223 | 104 × 16 |
| Bullet | 7 | 3 | Current | 4337:11492 | 104 × 16 |
| Bullet | 7 | 4 | Current | 4337:11604 | 104 × 16 |
| Bullet | 7 | 5 | Current | 4337:11727 | 104 × 16 |
| Bullet | 7 | 6 | Current | 4337:12041 | 104 × 16 |
| Bullet | 7 | 7 | Completed | 4337:12207 | 104 × 16 |
| Bullet | 8 | 1 | Current | 4337:11133 | 120 × 16 |
| Bullet | 8 | 2 | Current | 4337:11231 | 120 × 16 |
| Bullet | 8 | 3 | Current | 4337:11500 | 120 × 16 |
| Bullet | 8 | 4 | Current | 4337:11612 | 120 × 16 |
| Bullet | 8 | 5 | Current | 4337:11735 | 120 × 16 |
| Bullet | 8 | 6 | Current | 4337:12049 | 120 × 16 |
| Bullet | 8 | 7 | Current | 4337:12215 | 120 × 16 |
| Bullet | 8 | 8 | Completed | 4337:12275 | 120 × 16 |
| Bullet | 9 | 1 | Current | 4337:11132 | 136 × 16 |
| Bullet | 9 | 2 | Current | 4337:11240 | 136 × 16 |
| Bullet | 9 | 3 | Current | 4337:11509 | 136 × 16 |
| Bullet | 9 | 4 | Current | 4337:11621 | 136 × 16 |
| Bullet | 9 | 5 | Current | 4337:11744 | 136 × 16 |
| Bullet | 9 | 6 | Current | 4337:12058 | 136 × 16 |
| Bullet | 9 | 7 | Current | 4337:12224 | 136 × 16 |
| Bullet | 9 | 8 | Current | 4337:12284 | 136 × 16 |
| Bullet | 9 | 9 | Completed | 4337:12386 | 136 × 16 |
| Bullet | 10 | 1 | Current | 4337:11139 | 152 × 16 |
| Bullet | 10 | 2 | Current | 4337:11250 | 152 × 16 |
| Bullet | 10 | 3 | Current | 4337:11519 | 152 × 16 |
| Bullet | 10 | 4 | Current | 4337:11631 | 152 × 16 |
| Bullet | 10 | 5 | Current | 4337:11754 | 152 × 16 |
| Bullet | 10 | 6 | Current | 4337:12068 | 152 × 16 |
| Bullet | 10 | 7 | Current | 4337:12234 | 152 × 16 |
| Bullet | 10 | 8 | Current | 4337:12294 | 152 × 16 |
| Bullet | 10 | 9 | Current | 4337:12396 | 152 × 16 |
| Bullet | 10 | 10 | Completed | 4337:12460 | 152 × 16 |
| Circular | 2 | 0 | Upcoming | 4773:31490 | 45 × 45 |
| Circular | 2 | 1 | Current | 4365:11866 | 45 × 45 |
| Circular | 2 | 2 | Completed | 4695:22509 | 45 × 45 |
| Circular | 2 | 2 | Current | 4365:11891 | 45 × 45 |
| Circular | 3 | 1 | Current | 4365:11913 | 45 × 45 |
| Circular | 3 | 2 | Current | 4365:11921 | 45 × 45 |
| Circular | 3 | 3 | Current | 4365:11936 | 45 × 45 |
| Circular | 4 | 1 | Current | 4365:12129 | 45 × 45 |
| Circular | 4 | 2 | Current | 4365:12137 | 45 × 45 |
| Circular | 4 | 3 | Current | 4365:12145 | 45 × 45 |
| Circular | 4 | 4 | Current | 4365:12160 | 45 × 45 |
| Circular | 5 | 1 | Current | 4365:12197 | 45 × 45 |
| Circular | 5 | 2 | Current | 4365:12205 | 45 × 45 |
| Circular | 5 | 3 | Current | 4365:12213 | 45 × 45 |
| Circular | 5 | 4 | Current | 4365:12221 | 45 × 45 |
| Circular | 5 | 5 | Current | 4365:12236 | 45 × 45 |
| Circular | 6 | 1 | Current | 4365:12279 | 45 × 45 |
| Circular | 6 | 2 | Current | 4365:12287 | 45 × 45 |
| Circular | 6 | 3 | Current | 4365:12295 | 45 × 45 |
| Circular | 6 | 4 | Current | 4365:12303 | 45 × 45 |
| Circular | 6 | 5 | Current | 4365:12311 | 45 × 45 |
| Circular | 6 | 6 | Current | 4365:12326 | 45 × 45 |
| Circular | 7 | 1 | Current | 4365:12508 | 45 × 45 |
| Circular | 7 | 2 | Current | 4365:12516 | 45 × 45 |
| Circular | 7 | 3 | Current | 4365:12524 | 45 × 45 |
| Circular | 7 | 4 | Current | 4365:12532 | 45 × 45 |
| Circular | 7 | 5 | Current | 4365:12540 | 45 × 45 |
| Circular | 7 | 6 | Current | 4365:12548 | 45 × 45 |
| Circular | 7 | 7 | Current | 4365:12563 | 45 × 45 |
| Circular | 8 | 1 | Current | 4365:12670 | 45 × 45 |
| Circular | 8 | 2 | Current | 4365:12678 | 45 × 45 |
| Circular | 8 | 3 | Current | 4365:12686 | 45 × 45 |
| Circular | 8 | 4 | Current | 4365:12694 | 45 × 45 |
| Circular | 8 | 5 | Current | 4365:12702 | 45 × 45 |
| Circular | 8 | 6 | Current | 4365:12710 | 45 × 45 |
| Circular | 8 | 7 | Current | 4365:12718 | 45 × 45 |
| Circular | 8 | 8 | Current | 4365:12757 | 45 × 45 |
| Circular | 9 | 1 | Current | 4365:12840 | 45 × 45 |
| Circular | 9 | 2 | Current | 4365:12848 | 45 × 45 |
| Circular | 9 | 3 | Current | 4365:12856 | 45 × 45 |
| Circular | 9 | 4 | Current | 4365:12864 | 45 × 45 |
| Circular | 9 | 5 | Current | 4365:12872 | 45 × 45 |
| Circular | 9 | 6 | Current | 4365:12880 | 45 × 45 |
| Circular | 9 | 7 | Current | 4365:12888 | 45 × 45 |
| Circular | 9 | 8 | Current | 4365:12896 | 45 × 45 |
| Circular | 9 | 9 | Current | 4365:12911 | 45 × 45 |
| Circular | 10 | 1 | Current | 4365:13233 | 45 × 45 |
| Circular | 10 | 2 | Current | 4365:13241 | 45 × 45 |
| Circular | 10 | 3 | Current | 4365:13249 | 45 × 45 |
| Circular | 10 | 4 | Current | 4365:13257 | 45 × 45 |
| Circular | 10 | 5 | Current | 4365:13265 | 45 × 45 |
| Circular | 10 | 6 | Current | 4365:13273 | 45 × 45 |
| Circular | 10 | 7 | Current | 4365:13281 | 45 × 45 |
| Circular | 10 | 8 | Current | 4365:13289 | 45 × 45 |
| Circular | 10 | 9 | Current | 4365:13297 | 45 × 45 |
| Circular | 10 | 10 | Current | 4365:13312 | 45 × 45 |
| Dash | 2 | 1 | Current | 4695:22329 | 48 × 4 |
| Dash | 2 | 1 | Error | 4773:32332 | 48 × 4 |
| Dash | 2 | 2 | Completed | 4773:32825 | 48 × 4 |
| Dash | 2 | 2 | Current | 4695:22333 | 48 × 4 |
| Dash | 2 | 2 | Error | 4773:32395 | 48 × 4 |
| Dash | 3 | 1 | Current | 4695:22297 | 74 × 4 |
| Dash | 3 | 1 | Error | 4773:32328 | 74 × 4 |
| Dash | 3 | 2 | Current | 4695:22302 | 74 × 4 |
| Dash | 3 | 2 | Error | 4773:32391 | 74 × 4 |
| Dash | 3 | 3 | Completed | 4773:32828 | 74 × 4 |
| Dash | 3 | 3 | Current | 4695:22307 | 74 × 4 |
| Dash | 3 | 3 | Error | 4773:32454 | 74 × 4 |
| Dash | 4 | 1 | Current | 4695:22247 | 100 × 4 |
| Dash | 4 | 1 | Error | 4773:32323 | 100 × 4 |
| Dash | 4 | 2 | Current | 4695:22253 | 100 × 4 |
| Dash | 4 | 2 | Error | 4773:32386 | 100 × 4 |
| Dash | 4 | 3 | Current | 4695:22259 | 100 × 4 |
| Dash | 4 | 3 | Error | 4773:32449 | 100 × 4 |
| Dash | 4 | 4 | Completed | 4773:32832 | 100 × 4 |
| Dash | 4 | 4 | Current | 4695:22265 | 100 × 4 |
| Dash | 4 | 4 | Error | 4773:32509 | 100 × 4 |
| Dash | 5 | 1 | Current | 4695:22171 | 126 × 4 |
| Dash | 5 | 1 | Error | 4773:32317 | 126 × 4 |
| Dash | 5 | 2 | Current | 4695:22178 | 126 × 4 |
| Dash | 5 | 2 | Error | 4773:32380 | 126 × 4 |
| Dash | 5 | 3 | Current | 4695:22185 | 126 × 4 |
| Dash | 5 | 3 | Error | 4773:32443 | 126 × 4 |
| Dash | 5 | 4 | Current | 4695:22192 | 126 × 4 |
| Dash | 5 | 4 | Error | 4773:32503 | 126 × 4 |
| Dash | 5 | 5 | Completed | 4773:32837 | 126 × 4 |
| Dash | 5 | 5 | Current | 4695:22199 | 126 × 4 |
| Dash | 5 | 5 | Error | 4773:32559 | 126 × 4 |
| Dash | 6 | 1 | Current | 4695:22073 | 152 × 4 |
| Dash | 6 | 1 | Error | 4773:32310 | 152 × 4 |
| Dash | 6 | 2 | Current | 4695:22081 | 152 × 4 |
| Dash | 6 | 2 | Error | 4773:32373 | 152 × 4 |
| Dash | 6 | 3 | Current | 4695:22089 | 152 × 4 |
| Dash | 6 | 3 | Error | 4773:32436 | 152 × 4 |
| Dash | 6 | 4 | Current | 4695:22097 | 152 × 4 |
| Dash | 6 | 4 | Error | 4773:32496 | 152 × 4 |
| Dash | 6 | 5 | Current | 4695:22105 | 152 × 4 |
| Dash | 6 | 5 | Error | 4773:32552 | 152 × 4 |
| Dash | 6 | 6 | Completed | 4773:32843 | 152 × 4 |
| Dash | 6 | 6 | Current | 4695:22113 | 152 × 4 |
| Dash | 6 | 6 | Error | 4773:32603 | 152 × 4 |
| Dash | 7 | 1 | Current | 4695:21945 | 178 × 4 |
| Dash | 7 | 1 | Error | 4773:32302 | 178 × 4 |
| Dash | 7 | 2 | Current | 4695:21954 | 178 × 4 |
| Dash | 7 | 2 | Error | 4773:32365 | 178 × 4 |
| Dash | 7 | 3 | Current | 4695:21963 | 178 × 4 |
| Dash | 7 | 3 | Error | 4773:32428 | 178 × 4 |
| Dash | 7 | 4 | Current | 4695:21972 | 178 × 4 |
| Dash | 7 | 4 | Error | 4773:32488 | 178 × 4 |
| Dash | 7 | 5 | Current | 4695:21981 | 178 × 4 |
| Dash | 7 | 5 | Error | 4773:32544 | 178 × 4 |
| Dash | 7 | 6 | Current | 4695:21990 | 178 × 4 |
| Dash | 7 | 6 | Error | 4773:32595 | 178 × 4 |
| Dash | 7 | 7 | Completed | 4773:32850 | 178 × 4 |
| Dash | 7 | 7 | Current | 4695:21999 | 178 × 4 |
| Dash | 7 | 7 | Error | 4773:32640 | 178 × 4 |
| Dash | 8 | 1 | Current | 4695:21783 | 204 × 4 |
| Dash | 8 | 1 | Error | 4773:32293 | 204 × 4 |
| Dash | 8 | 2 | Current | 4695:21793 | 204 × 4 |
| Dash | 8 | 2 | Error | 4773:32356 | 204 × 4 |
| Dash | 8 | 3 | Current | 4695:21803 | 204 × 4 |
| Dash | 8 | 3 | Error | 4773:32419 | 204 × 4 |
| Dash | 8 | 4 | Current | 4695:21813 | 204 × 4 |
| Dash | 8 | 4 | Error | 4773:32479 | 204 × 4 |
| Dash | 8 | 5 | Current | 4695:21823 | 204 × 4 |
| Dash | 8 | 5 | Error | 4773:32535 | 204 × 4 |
| Dash | 8 | 6 | Current | 4695:21833 | 204 × 4 |
| Dash | 8 | 6 | Error | 4773:32586 | 204 × 4 |
| Dash | 8 | 7 | Current | 4695:21843 | 204 × 4 |
| Dash | 8 | 7 | Error | 4773:32631 | 204 × 4 |
| Dash | 8 | 8 | Completed | 4773:32858 | 204 × 4 |
| Dash | 8 | 8 | Current | 4695:21853 | 204 × 4 |
| Dash | 8 | 8 | Error | 4773:32669 | 204 × 4 |
| Dash | 9 | 1 | Current | 4695:21583 | 230 × 4 |
| Dash | 9 | 1 | Error | 4773:32283 | 230 × 4 |
| Dash | 9 | 2 | Current | 4695:21594 | 230 × 4 |
| Dash | 9 | 2 | Error | 4773:32346 | 230 × 4 |
| Dash | 9 | 3 | Current | 4695:21605 | 230 × 4 |
| Dash | 9 | 3 | Error | 4773:32409 | 230 × 4 |
| Dash | 9 | 4 | Current | 4695:21616 | 230 × 4 |
| Dash | 9 | 4 | Error | 4773:32469 | 230 × 4 |
| Dash | 9 | 5 | Current | 4695:21627 | 230 × 4 |
| Dash | 9 | 5 | Error | 4773:32525 | 230 × 4 |
| Dash | 9 | 6 | Current | 4695:21638 | 230 × 4 |
| Dash | 9 | 6 | Error | 4773:32576 | 230 × 4 |
| Dash | 9 | 7 | Current | 4695:21649 | 230 × 4 |
| Dash | 9 | 7 | Error | 4773:32621 | 230 × 4 |
| Dash | 9 | 8 | Current | 4695:21660 | 230 × 4 |
| Dash | 9 | 8 | Error | 4773:32659 | 230 × 4 |
| Dash | 9 | 9 | Completed | 4773:32867 | 230 × 4 |
| Dash | 9 | 9 | Current | 4695:21671 | 230 × 4 |
| Dash | 9 | 9 | Error | 4773:32689 | 230 × 4 |
| Dash | 10 | 1 | Current | 4689:18458 | 256 × 4 |
| Dash | 10 | 1 | Error | 4773:32272 | 256 × 4 |
| Dash | 10 | 2 | Current | 4689:18469 | 256 × 4 |
| Dash | 10 | 2 | Error | 4773:32335 | 256 × 4 |
| Dash | 10 | 3 | Current | 4689:18480 | 256 × 4 |
| Dash | 10 | 3 | Error | 4773:32398 | 256 × 4 |
| Dash | 10 | 4 | Current | 4689:18491 | 256 × 4 |
| Dash | 10 | 4 | Error | 4773:32458 | 256 × 4 |
| Dash | 10 | 5 | Current | 4689:18502 | 256 × 4 |
| Dash | 10 | 5 | Error | 4773:32514 | 256 × 4 |
| Dash | 10 | 6 | Current | 4689:18513 | 256 × 4 |
| Dash | 10 | 6 | Error | 4773:32565 | 256 × 4 |
| Dash | 10 | 7 | Current | 4689:18524 | 256 × 4 |
| Dash | 10 | 7 | Error | 4773:32610 | 256 × 4 |
| Dash | 10 | 8 | Current | 4689:18535 | 256 × 4 |
| Dash | 10 | 8 | Error | 4773:32648 | 256 × 4 |
| Dash | 10 | 9 | Current | 4689:18546 | 256 × 4 |
| Dash | 10 | 9 | Error | 4773:32678 | 256 × 4 |
| Dash | 10 | 10 | Completed | 4773:32877 | 256 × 4 |
| Dash | 10 | 10 | Current | 4689:18557 | 256 × 4 |
| Dash | 10 | 10 | Error | 4773:32699 | 256 × 4 |
Type — Bullet, Circular, Dash — with Steps, Current and Status as panel controls; geometry, colours and the two Circular text styles read off 4337:11205, 4365:12137, 4695:22253 and the Status variants. Padding, gap, alignment and colour tokens are not readable with the plugin and stay —.label-container (e.g. 4365:12143) sits at y 45 under a 45 × 45 frame and is clipped in every export; #index / #label also keep the # sigil and the Bullet dots are all named ellipse. Filed from the scorecard for the Component Review.Style renamed to Type; All variant values Title Cased; Uneven Status coverage confirmed intentional; Full 2–10 step range retained; Dots and ring arcs confirmed as vectors; Horizontal-only orientation confirmed intentional.Stepper - Bullet - 3/4/5 Steps) into one Stepper - Bullet with steps: Int and current: Int properties. Replace raster dot PNGs with vector ellipses. Long-term, unify with Dash + Circular under EBStepper(style:). Opensteps property. Same anti-pattern as Stepper - Circular. Openhighlighted = 1st | 2nd | … | Nth ordinal axis should become a top-level integer current. OpenEBStepperBullet on both platforms built over HStack/Row of Circle shapes. Consider unifying with Dash + Circular under EBStepper(style:). OpenEllipse fills bound to main/stepper/color/bg and main/stepper/color/bg-track. Open