- Stepper
- Examples
- Basic Stepper
- With Caption
- With Label
- Showing Progress Count
- Complete Progress States
- All Properties Combined
- Dynamic Progress Updates
- Multi-Step Form Wizard
- Installation Progress Simulation
- Multiple Steppers
- Minimal Stepper
- Progress Overflow
- Different Step Counts
- Customization
- Styling with CSS
- Themed Steppers
- Custom Height and Styling
- Wizard Patterns
- Using with Vertical Stepper
- Progressive Disclosure
- Validation States
- Importing
- Properties
- Parts
Stepper
<zn-stepper> | ZnStepper
Steppers provide visual feedback about progress through a multi-step process or workflow.
<zn-stepper caption="Setup Progress" label="Installation Wizard" steps="5" value="3" show-progress></zn-stepper>
Examples
Basic Stepper
A basic stepper displays progress through a sequence of steps. Use the steps attribute to
define the total number of steps and value to indicate the current step position.
<zn-stepper steps="4" value="2"></zn-stepper>
With Caption
Use the caption attribute to add a descriptive label above the stepper. This helps users
understand what process or workflow the stepper represents.
<zn-stepper caption="Account Setup" steps="5" value="2"></zn-stepper> <br /> <zn-stepper caption="Order Processing" steps="6" value="4"></zn-stepper> <br /> <zn-stepper caption="Project Onboarding" steps="3" value="1"></zn-stepper>
With Label
Use the label attribute to display information above the caption. This is useful for showing
the wizard or workflow name.
<zn-stepper label="New User Registration" caption="Personal Information" steps="5" value="1"></zn-stepper> <br /> <zn-stepper label="Checkout Process" caption="Shipping Details" steps="4" value="2"></zn-stepper>
Showing Progress Count
Use the show-progress attribute to display the current step number alongside the total number
of steps (e.g., “2 / 5 steps”).
<zn-stepper caption="Installation" steps="5" value="2" show-progress></zn-stepper> <br /> <zn-stepper caption="Data Import" steps="10" value="7" show-progress></zn-stepper> <br /> <zn-stepper caption="Configuration" steps="3" value="3" show-progress></zn-stepper>
Complete Progress States
Examples showing different stages of a workflow, from start to completion.
<zn-stepper label="Project Setup Wizard" caption="Getting Started" steps="5" value="0" show-progress> </zn-stepper> <br /> <zn-stepper label="Project Setup Wizard" caption="Configure Settings" steps="5" value="2" show-progress> </zn-stepper> <br /> <zn-stepper label="Project Setup Wizard" caption="Review & Deploy" steps="5" value="4" show-progress> </zn-stepper> <br /> <zn-stepper label="Project Setup Wizard" caption="Complete!" steps="5" value="5" show-progress> </zn-stepper>
All Properties Combined
A comprehensive example showing all available properties working together.
<zn-stepper label="E-commerce Checkout" caption="Payment Information" steps="4" value="3" show-progress> </zn-stepper>
Dynamic Progress Updates
Steppers can be updated dynamically using JavaScript to reflect real-time progress through a workflow.
<zn-stepper id="dynamic-stepper" label="Form Wizard" caption="Step 1: Personal Details" steps="4" value="1" show-progress> </zn-stepper> <br /> <zn-button id="next-step">Next Step</zn-button> <zn-button id="prev-step" color="secondary">Previous Step</zn-button> <zn-button id="reset-stepper" color="transparent">Reset</zn-button> <script type="module"> const stepper = document.getElementById('dynamic-stepper'); const nextBtn = document.getElementById('next-step'); const prevBtn = document.getElementById('prev-step'); const resetBtn = document.getElementById('reset-stepper'); const stepNames = [ 'Personal Details', 'Contact Information', 'Preferences', 'Review & Submit' ]; function updateStepCaption() { const stepIndex = stepper.value - 1; if (stepIndex >= 0 && stepIndex < stepNames.length) { stepper.caption = `Step ${stepper.value}: ${stepNames[stepIndex]}`; } else if (stepper.value === 0) { stepper.caption = 'Getting Started'; } } nextBtn.addEventListener('click', () => { if (stepper.value < stepper.steps) { stepper.value = stepper.value + 1; updateStepCaption(); if (stepper.value === stepper.steps) { stepper.caption = 'Complete!'; } } }); prevBtn.addEventListener('click', () => { if (stepper.value > 0) { stepper.value = stepper.value - 1; updateStepCaption(); } }); resetBtn.addEventListener('click', () => { stepper.value = 1; updateStepCaption(); }); </script>
Multi-Step Form Wizard
A practical example showing a stepper integrated with a form wizard interface.
Basic Information
Please enter your basic details to get started.
<zn-stepper id="wizard-stepper" label="Account Creation Wizard" caption="Step 1: Basic Information" steps="3" value="1" show-progress> </zn-stepper> <div id="wizard-content" style="margin-top: 20px; padding: 20px; border: 1px solid rgb(var(--zn-border-color)); border-radius: 4px;"> <div class="wizard-step" data-step="1"> <h3>Basic Information</h3> <p>Please enter your basic details to get started.</p> </div> <div class="wizard-step" data-step="2" style="display: none;"> <h3>Account Settings</h3> <p>Configure your account preferences.</p> </div> <div class="wizard-step" data-step="3" style="display: none;"> <h3>Confirmation</h3> <p>Review your information and complete the setup.</p> </div> </div> <div style="margin-top: 20px;"> <zn-button id="wizard-next" color="default">Next</zn-button> <zn-button id="wizard-prev" color="secondary" style="display: none;">Previous</zn-button> <zn-button id="wizard-finish" color="success" style="display: none;">Finish</zn-button> </div> <script type="module"> const wizardStepper = document.getElementById('wizard-stepper'); const nextBtn = document.getElementById('wizard-next'); const prevBtn = document.getElementById('wizard-prev'); const finishBtn = document.getElementById('wizard-finish'); const steps = document.querySelectorAll('.wizard-step'); const stepTitles = [ 'Basic Information', 'Account Settings', 'Confirmation' ]; function updateWizard() { const currentStep = wizardStepper.value; // Update stepper caption wizardStepper.caption = `Step ${currentStep}: ${stepTitles[currentStep - 1]}`; // Show/hide content steps.forEach((step, index) => { step.style.display = (index + 1 === currentStep) ? 'block' : 'none'; }); // Show/hide buttons prevBtn.style.display = currentStep > 1 ? 'inline-block' : 'none'; nextBtn.style.display = currentStep < wizardStepper.steps ? 'inline-block' : 'none'; finishBtn.style.display = currentStep === wizardStepper.steps ? 'inline-block' : 'none'; } nextBtn.addEventListener('click', () => { if (wizardStepper.value < wizardStepper.steps) { wizardStepper.value++; updateWizard(); } }); prevBtn.addEventListener('click', () => { if (wizardStepper.value > 1) { wizardStepper.value--; updateWizard(); } }); finishBtn.addEventListener('click', () => { alert('Wizard completed!'); }); updateWizard(); </script>
Installation Progress Simulation
A realistic example simulating an installation or setup process with automatic progress updates.
<zn-stepper id="install-stepper" label="Software Installation" caption="Click Start to begin" steps="5" value="0" show-progress> </zn-stepper> <br /> <zn-button id="start-install" icon="download">Start Installation</zn-button> <zn-button id="cancel-install" color="secondary" disabled>Cancel</zn-button> <script type="module"> const installStepper = document.getElementById('install-stepper'); const startBtn = document.getElementById('start-install'); const cancelBtn = document.getElementById('cancel-install'); let installInterval; const installSteps = [ 'Downloading files...', 'Extracting packages...', 'Installing dependencies...', 'Configuring settings...', 'Finalizing installation...', 'Installation complete!' ]; startBtn.addEventListener('click', () => { installStepper.value = 0; startBtn.disabled = true; startBtn.loading = true; cancelBtn.disabled = false; let currentStep = 0; installInterval = setInterval(() => { if (currentStep < installStepper.steps) { currentStep++; installStepper.value = currentStep; installStepper.caption = installSteps[currentStep]; } else { clearInterval(installInterval); installStepper.caption = installSteps[installSteps.length - 1]; startBtn.disabled = false; startBtn.loading = false; cancelBtn.disabled = true; } }, 1500); }); cancelBtn.addEventListener('click', () => { clearInterval(installInterval); installStepper.caption = 'Installation cancelled'; startBtn.disabled = false; startBtn.loading = false; cancelBtn.disabled = true; }); </script>
Multiple Steppers
Display multiple steppers to track different concurrent processes or workflows.
<zn-stepper label="Frontend Build" caption="Build Complete" steps="4" value="4" show-progress> </zn-stepper> <br /> <zn-stepper label="Backend Build" caption="Running Tests" steps="4" value="3" show-progress> </zn-stepper> <br /> <zn-stepper label="Database Migration" caption="Migrating Schema" steps="6" value="2" show-progress> </zn-stepper> <br /> <zn-stepper label="Asset Optimization" caption="Waiting to Start" steps="3" value="0" show-progress> </zn-stepper>
Minimal Stepper
A clean, minimal stepper without any text labels, useful for compact layouts or when context is provided elsewhere.
<zn-stepper steps="5" value="1"></zn-stepper> <br /> <zn-stepper steps="5" value="3"></zn-stepper> <br /> <zn-stepper steps="5" value="5"></zn-stepper>
Progress Overflow
The stepper handles cases where the value exceeds the total steps by capping the visual progress at 100%.
<zn-stepper caption="Over Limit Example" steps="5" value="7" show-progress> </zn-stepper>
Different Step Counts
Steppers work with any number of steps, from simple two-step processes to complex multi-step workflows.
<zn-stepper caption="Two Steps" steps="2" value="1" show-progress></zn-stepper> <br /> <zn-stepper caption="Five Steps" steps="5" value="3" show-progress></zn-stepper> <br /> <zn-stepper caption="Ten Steps" steps="10" value="6" show-progress></zn-stepper> <br /> <zn-stepper caption="Twenty Steps" steps="20" value="15" show-progress></zn-stepper>
Customization
Styling with CSS
Customize the appearance of the stepper using CSS custom properties and standard CSS.
<zn-stepper class="custom-stepper" label="Custom Styled Stepper" caption="With Custom Colors" steps="5" value="3" show-progress> </zn-stepper> <style> .custom-stepper .step-progress { background-color: rgb(var(--zn-success)); } .custom-stepper .step { background-color: rgba(var(--zn-success), 0.3); } .custom-stepper .header { color: rgb(var(--zn-success)); } .custom-stepper .label { font-weight: 700; } </style>
Themed Steppers
Create themed steppers for different use cases or states.
<zn-stepper class="success-stepper" caption="Success State" steps="4" value="4" show-progress> </zn-stepper> <br /> <zn-stepper class="warning-stepper" caption="Warning State" steps="4" value="2" show-progress> </zn-stepper> <br /> <zn-stepper class="error-stepper" caption="Error State" steps="4" value="1" show-progress> </zn-stepper> <style> .success-stepper .step-progress { background-color: rgb(var(--zn-success)); } .success-stepper .step { background-color: rgba(var(--zn-success), 0.3); } .warning-stepper .step-progress { background-color: rgb(var(--zn-warning)); } .warning-stepper .step { background-color: rgba(var(--zn-warning), 0.3); } .error-stepper .step-progress { background-color: rgb(var(--zn-error)); } .error-stepper .step { background-color: rgba(var(--zn-error), 0.3); } </style>
Custom Height and Styling
Adjust the visual appearance of the stepper to match your design requirements.
<zn-stepper class="large-stepper" caption="Large Stepper" steps="4" value="2" show-progress> </zn-stepper> <style> .large-stepper .step-container { height: 20px; } .large-stepper .step { width: 24px; height: 24px; border-width: 4px; } .large-stepper .step-progress { height: 12px; top: 4px; } .large-stepper .step-line { height: 4px; } </style>
Wizard Patterns
Using with Vertical Stepper
Combine horizontal and vertical steppers for comprehensive workflow navigation. The horizontal stepper shows overall progress while vertical steppers can show sub-steps within each main step.
<zn-stepper label="Multi-Stage Process" caption="Stage 2: Configuration" steps="3" value="2" show-progress> </zn-stepper> <br /><br /> <zn-vertical-stepper caption="Database Setup" description="Configure database connection" first active></zn-vertical-stepper> <zn-vertical-stepper caption="API Keys" description="Enter your API credentials" active></zn-vertical-stepper> <zn-vertical-stepper caption="Deployment" description="Deploy to production" last></zn-vertical-stepper>
Progressive Disclosure
Use steppers to guide users through complex forms with progressive disclosure of information.
Steppers help break down complex multi-step processes into manageable chunks, improving user experience and reducing cognitive load.
<zn-stepper id="disclosure-stepper" label="Registration Process" caption="Step 1 of 4" steps="4" value="1" show-progress> </zn-stepper> <br /> <p>Steppers help break down complex multi-step processes into manageable chunks, improving user experience and reducing cognitive load.</p>
Validation States
Combine steppers with validation feedback to show progress and validation status.
<zn-stepper label="Form Validation" caption="Step 2: Validation Required" steps="3" value="2" show-progress> </zn-stepper> <br /> <zn-alert color="warning" open> Please complete all required fields before proceeding to the next step. </zn-alert>
Importing
If you’re using the autoloader or the traditional loader, you can ignore this section. Otherwise, feel free to use any of the following snippets to cherry pick this component.
To import this component from the CDN using a script tag:
<script type="module" src="https://cdn.jsdelivr.net/npm/@kubex/zinc@1.0.86/dist/components/stepper/stepper.js"></script>
To import this component from the CDN using a JavaScript import:
import 'https://cdn.jsdelivr.net/npm/@kubex/zinc@1.0.86/dist/components/stepper/stepper.js';
To import this component using a bundler:
import '@kubex/zinc/dist/components/stepper/stepper.js';
Properties
| Name | Description | Reflects | Type | Default |
|---|---|---|---|---|
caption
|
A descriptive label displayed above the stepper to indicate the current step or phase. |
|
string
|
- |
label
|
An optional label displayed above the caption, typically used for the wizard or workflow name. |
|
string
|
- |
steps
|
The total number of steps in the process. |
|
number
|
- |
value
|
The current step position (0 to steps). Progress is calculated as value/steps. |
|
number
|
- |
show-progress
|
When true, displays the step count (e.g., “2 / 5 steps”) next to the caption. |
boolean
|
- | |
updateComplete |
A read-only promise that resolves when the component has finished updating. |
Learn more about attributes and properties.
Parts
| Name | Description |
|---|---|
step-container |
The container holding the progress line and steps. |
step-line |
The background line showing the full step track. |
step-progress |
The filled progress indicator showing completion. |
steps |
The container for individual step markers. |
step |
An individual step marker circle. |
header |
The header container with caption and progress text. |
caption |
The caption text element. |
progress |
The progress count text (e.g., “2 / 5 steps”). |
label |
The label text container. |
info |
The label text element. |
Learn more about customizing CSS parts.