Skip to main content

Overview

Steps displays progress through a multi-step process. It supports horizontal and vertical layouts, descriptions, and responsive breakpoints. Use it for onboarding flows, order status tracking, and wizard-style forms.

Usage

import { AxSteps } from "axmed-design-system"

function OnboardingFlow() {
  const [current, setCurrent] = useState(0)

  const steps = [
    { title: "Business Profile" },
    { title: "Commercial Activity" },
    { title: "Quality Assurance" },
  ]

  return (
    <AxSteps current={current} items={steps} />
  )
}

With Descriptions

const steps = [
  { title: "Submitted", description: "Jan 5, 2025" },
  { title: "Under Quotation", description: "Jan 6, 2025" },
  { title: "Quotation Ready", description: "Jan 8, 2025" },
  { title: "Under Evaluation" },
  { title: "Completed" },
]

<AxSteps current={2} items={steps} />

Vertical Layout

Use vertical orientation for timeline-style displays:
<AxSteps
  orientation="vertical"
  current={3}
  items={[
    { title: "Order Placed", description: "Jan 5, 2025 — 09:30 AM" },
    { title: "Quotation Received", description: "Jan 6, 2025 — 02:15 PM" },
    { title: "Payment Confirmed", description: "Jan 7, 2025 — 10:00 AM" },
    { title: "Shipping Arranged", description: "In progress" },
    { title: "Delivered" },
  ]}
/>

Sizes

  • sm — Compact (for inside modals and cards)
  • md — Standard (default)
<AxSteps
  size="sm"
  current={1}
  items={[
    { title: "Select Products" },
    { title: "Review Quantities" },
    { title: "Submit Bid" },
  ]}
/>

Onboarding Flow

const [current, setCurrent] = useState(0)

const steps = [
  { title: "Business Profile" },
  { title: "Commercial Activity" },
  { title: "Quality Assurance" },
  { title: "Operating Standards" },
  { title: "Financial Standards" },
]

return (
  <Flex vertical gap={24}>
    <AxSteps current={current} items={steps} />
    
    <div style={{ padding: 40, background: "var(--neutral-50)" }}>
      Step {current + 1}: {steps[current].title}
    </div>
    
    <Flex justify="space-between">
      <AxButton
        variant="ghost"
        onClick={() => setCurrent(Math.max(0, current - 1))}
        disabled={current === 0}
      >
        Back
      </AxButton>
      <AxButton
        onClick={() => setCurrent(Math.min(steps.length - 1, current + 1))}
        disabled={current === steps.length - 1}
      >
        {current === steps.length - 1 ? "Submit" : "Next"}
      </AxButton>
    </Flex>
  </Flex>
)

Order Status

<AxSteps
  current={2}
  items={[
    { title: "Submitted", description: "Jan 5, 2025" },
    { title: "Under Quotation", description: "Jan 6, 2025" },
    { title: "Quotation Ready", description: "Jan 8, 2025" },
    { title: "Under Evaluation" },
    { title: "Logistics Arrangement" },
    { title: "Shipping Confirmed" },
    { title: "Completed" },
  ]}
  labelPlacement="vertical"
  size="sm"
/>

Props

items
StepItem[]
required
Array of step items. Each item:
  • title: string — Step label
  • description?: string — Optional subtitle (e.g., date, time)
  • icon?: ReactNode — Custom icon (default: step number)
current
number
default:"0"
Index of the currently active step (0-based)
size
'sm' | 'md'
default:"'md'"
Step indicator size:
  • sm: compact (inside modals/cards)
  • md: standard (default)
orientation
'horizontal' | 'vertical'
default:"'horizontal'"
Layout direction:
  • horizontal: steps arranged left-to-right (auto-collapses to vertical on mobile)
  • vertical: timeline-style layout
labelPlacement
'horizontal' | 'vertical'
Label position relative to the step icon (Ant Design prop)
className
string
Additional class name

Best Practices

Use horizontal layout for onboarding and wizards (3-5 steps)
Use vertical layout for order timelines and activity logs
Show descriptions for dates, times, or additional context
Keep step titles short (1-3 words) for readability
Don’t use more than 7 steps in horizontal mode — it gets cramped
Avoid skipping steps — users should always progress linearly

Responsive Behavior

Horizontal steps automatically collapse to vertical on small screens (< 768px).

Accessibility

  • Uses Ant Design Steps component with built-in ARIA attributes
  • Current step is announced as “Step X of Y”
  • Completed steps are visually distinguished

API Reference

See the Steps API for the complete TypeScript interface.
  • Button — Use for step navigation (Back/Next)
  • Card — Wrap steps in a card for visual containment
  • Modal — Use steps inside modals for multi-step forms

Build docs developers (and LLMs) love