Components · Navigation
Steps
Show progress through a sequence of ordered stages — wizards, onboarding, checkouts — rendered through the shared Steps.
Examples
<!-- Paste-and-run: save as .html and open in a browser. No build step, no bundler.
Steps is a COMPOSITE (antd, no framework-free element), so its HTML form is a CDN-React
page — React + antd load from a CDN (esm.sh) and mount on open. It consumes the SAME shared
`stepsTheme` the React/Vue wrappers use, so it renders the DS V3 look (brand current/finished
step, 32px icon, brand titles).
No JSX here (JSX needs a compiler) — we use React.createElement via the `h` alias. -->
<div id="root"></div>
<script type="module">
import React from 'https://esm.sh/react@18';
import { createRoot } from 'https://esm.sh/react-dom@18/client';
import { ConfigProvider, Steps } from 'https://esm.sh/antd@6?deps=react@18,react-dom@18';
import { stepsTheme } from 'https://cdn.jsdelivr.net/gh/ahaslides-product/ahaslides-design@master/lib/steps-theme.js';
const h = React.createElement;
const items = [{ title: 'Details' }, { title: 'Content' }, { title: 'Publish' }];
createRoot(document.getElementById('root')).render(
h(ConfigProvider, { theme: stepsTheme },
h('div', { style: { width: 480 } },
h(Steps, { current: 1, items })
)
)
);
</script>
import { ConfigProvider, Steps } from 'antd'; // antd v6
import { stepsTheme } from '@ahaslides-product/design/steps-theme';
const items = [
{ title: 'Details' },
{ title: 'Content' },
{ title: 'Publish' },
];
<ConfigProvider theme={stepsTheme}>
<Steps current={current} items={items} onChange={setCurrent} />
</ConfigProvider>
// One shared stepsTheme → the DS V3 look; reserve Steps for genuinely ordered flows, use Tabs for peers.
<script setup>
import { ref } from 'vue';
import { ConfigProvider, Steps } from 'ant-design-vue'; // ant-design-vue v4
import { stepsTheme } from '@ahaslides-product/design/steps-theme';
const current = ref(1);
const items = [
{ title: 'Details' },
{ title: 'Content' },
{ title: 'Publish' },
];
</script>
<template>
<a-config-provider :theme="stepsTheme">
<a-steps v-model:current="current" :items="items" />
</a-config-provider>
</template>
<!-- The SAME stepsTheme as React → one DS V3 look across both vendor libraries. -->
// @ahaslides-product/design/steps-theme — declared ONCE, consumed by both tiers.
import { stepsTheme } from '@ahaslides-product/design/steps-theme';
export const stepsTheme = {
token: {
colorPrimary: '#6A1EBB',
colorText: '#1A1A1A',
borderRadius: 8,
fontFamily: 'var(--aha-font-product, "Plus Jakarta Sans", sans-serif)',
},
components: {
Steps: {
colorPrimary: '#6A1EBB', // current/finished accent
iconSize: 32,
iconFontSize: 14,
titleLineHeight: 32,
},
},
};
API
| Prop | Type | Default | Notes |
|---|---|---|---|
current | number | 0 | Zero-based index of the active step |
items | { title, description?, icon? }[] | [] | The ordered stages |
direction | horizontal | vertical | horizontal | Layout axis |
size | default | small | default | Step scale |
progressDot | boolean | false | Render a compact dot rail instead of numbered icons |
status | wait | process | finish | error | process | State of the current step — error paints it red |
onChange | (current) => void | — | Fires when a step is clicked (if navigable) |
Install
# .npmrc — once: point the @ahaslides-product scope at GitHub Packages
@ahaslides-product:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN} # a GitHub token with read:packages
npm i @ahaslides-product/design
import '@ahaslides-product/design/tokens.css'; // once, at the app root
import '@ahaslides-product/design/steps-theme'; // registers <steps>
Agent feed for this component (absolute, fetchable anywhere): steps.agent.json · steps.md · steps.llms.txt
When to use
When to use
- Steps — a linear sequence of stages where the user should see where they are and what's left
- Tabs — peer views the user switches between freely — no order, no progress
- Progress — a single continuous completion metric, not discrete named stages
Keep titles to a short noun phrase per stage. Reserve Steps for genuinely ordered flows — if the sections have no order, use Tabs. Show a description only when the title alone is ambiguous.
Surfaces
editor dashboard settings
Spec
Icon 32px circle · brand #6A1EBB for current/finished · Current filled brand icon + brand title · Finished brand ring + check · Waiting muted ring + grey title · Layout horizontal (default) or direction=vertical · Size default (32 icon) or size=small (24 icon) · Style numbered icon (default) or progressDot for a compact dot rail · Error status=error paints the current step red (colorError)