@adrii_/wizard-js
v2.0.3
Published
A lightweight wizard UI component that supports accessibility and HTML5 in vanilla JavaScript.
Downloads
120
Maintainers
Readme
Wizard-JS
A lightweight wizard UI component that supports accessibility and HTML5 in Vanilla JavaScript.
Features
- Supports accessibility (ARIA-compliant).
- Fully customizable wizard steps and navigation.
- Works with both ES modules and CommonJS.
- Built-in form validation and control.
- New Features:
- Conditional required fields using
data-require-ifattribute. - Dynamic required fields with
on-active-requiredclass. - Customizable validation highlighting.
- Conditional required fields using
Table of Contents
- Wizard-JS
Installation
You can install the package via npm:
npm install @adrii_/wizard-jsFor CDN usage:
<script src="https://cdn.jsdelivr.net/gh/AdrianVillamayor/[email protected]/dist/wizard.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/AdrianVillamayor/[email protected]/styles/css/main.css">Usage
CommonJS
const Wizard = require('@adrii_/wizard-js');
const myWizard = new Wizard({
/* your configuration here */
});
myWizard.init();ES Modules
import Wizard from '@adrii_/wizard-js';
const myWizard = new Wizard({
/* your configuration here */
});
myWizard.init();Example HTML for Wizard
For content-only wizards:
<div class="wizard">
<aside class="wizard-content container">
<div class="wizard-step">
<!-- Step content -->
</div>
<!-- More steps -->
</aside>
</div>For wizards with form purpose, it manages the required fields and validates them:
<form class="wizard" method="POST">
<aside class="wizard-content container">
<div class="wizard-step">
<input type="text" name="name" class="required" placeholder="Enter a short campaign name">
</div>
<!-- More steps -->
</aside>
</form>Launch the Wizard
To launch the wizard:
let args = {
"wz_class": ".wizard",
"wz_nav_style": "dots",
"wz_button_style": ".btn .btn-sm .mx-3",
"wz_ori": "vertical",
"buttons": true,
"navigation": 'buttons',
"finish": "Save!"
};
const wizard = new Wizard(args);
wizard.init();Restart the Wizard
To restart the wizard:
wizard.reset();Update the Wizard
To update the wizard, deleting or adding steps:
wizard.update();Lock and Unlock the Wizard
To lock the wizard at a specific step:
wizard.lock();To unlock the wizard:
wizard.unlock();Form Validation
Wizard-JS includes built-in form validation for required fields.
Required Fields
To mark an input as required, add the required attribute or the required class:
<input type="text" name="email" required>
<!-- or -->
<input type="text" name="email" class="required">Conditionally Required Fields
You can make fields conditionally required based on the value of another field using the data-require-if attribute.
The format is data-require-if="fieldID:requiredValue".
<input type="checkbox" id="subscribe" name="subscribe">
<input type="email" name="email" data-require-if="subscribe:true" placeholder="Enter your email">In this example, the email field becomes required if the checkbox with id subscribe is checked (true).
Dynamic Required Fields
Use the on-active-required class to mark fields that become required only when the step is active.
<input type="text" name="username" class="on-active-required" placeholder="Enter your username">Custom Validation Highlighting
You can customize the validation highlighting behavior:
highlight: Set totrueto enable highlighting invalid fields.highlight_time: Duration (in milliseconds) to display the highlight. Default is1000.highlight_type: An object to define the classes for different highlight types.
Example:
let args = {
/* Other configurations */
"highlight": true,
"highlight_time": 1500,
"highlight_type": { error: "error", warning: "warning", success: "success", info: "info" }
};HTML Attributes
Data Title Attribute [data-title]
Set the step title for the navigation. If left blank, the system will automatically add Step + step number as the title.
<div class="wizard-step" data-title="Configuration">
<!-- Step content -->
</div>Data Require If Attribute [data-require-if]
Define conditional required fields based on another field's value.
<input type="email" name="email" data-require-if="subscribe:true" placeholder="Enter your email">Config Wizard
Options allowing you to modify the behavior and actions:
| Parameter | Type | Default | Definition / Value |
| ----------------- | ------- | -------------------------------------------------------------------------- | -------------------------------------------------------------- |
| wz_class | String | .wizard | Wizard main container target |
| wz_ori | String | .horizontal | Wizard orientation (.horizontal, .vertical) |
| wz_nav | String | .wizard-nav | Navigation container class |
| wz_nav_style | String | dots | Style of navigation steps (dots, tabs, progress) |
| wz_content | String | .wizard-content | Body container class |
| wz_buttons | String | .wizard-buttons | Action button container class |
| wz_button | String | .wizard-btn | Class of Previous, Next, and Finish action buttons |
| wz_button_style | String | .btn | Basic button style |
| wz_step | String | .wizard-step | Class for both nav and body steps |
| wz_form | String | .wizard-form | Class of the form that contains the wizard |
| wz_next | String | .next | Class of Next action button |
| wz_prev | String | .prev | Class of Prev action button |
| wz_finish | String | .finish | Class of Finish action button |
| wz_highlight | String | .highlight-error | Class for highlights when validation errors occur |
| current_step | Number | 0 | Active wizard step |
| steps | Number | 0 | Number of wizard steps |
| highlight_time | Number | 1000 | Display time for validation highlight (in milliseconds) |
| navigation | String | all | Navigation mode (buttons, nav, all) |
| buttons | Boolean | true | Show or hide the action buttons |
| nav | Boolean | true | Show or hide the header navigation |
| highlight | Boolean | true | Enable or disable field highlighting on validation errors |
| next | String | Next | Text for the Next button |
| prev | String | Prev | Text for the Prev button |
| finish | String | Submit | Text for the Finish button |
| bubbles | Boolean | false | Enable or disable event bubbling for custom events |
| highlight_type | Object | { error: "error", warning: "warning", success: "success", info: "info" } | Classes for different validation highlight effects |
| i18n | Object | Various | Internationalization messages for errors, titles, and warnings |
i18n Options
The i18n object allows you to define custom error messages for different wizard actions:
empty_wz: "No item has been found with which to generate the Wizard."empty_nav: "Nav does not exist or is empty."empty_content: "Content does not exist or is empty."empty_html: "Undefined or null content cannot be added."empty_update: "Nothing to update."no_nav: "Both the nav and the buttons are disabled, there is no navigation system."form_validation: "One or more of the form fields are invalid."diff_steps: "Discordance between the steps of nav and content."random: "There has been a problem, check the configuration and use of the wizard."already_defined: "This item is already defined."title: "Step" (used for default step titles if not specified in the HTML).
Events Management
Wizard-JS provides several events to help you manage and respond to user interactions.
Wizard Ready Event
To identify when the wizard is fully generated and loaded.
document.addEventListener("wz.ready", function (e) {
console.log(`Target:`, e.detail.target); // .wizard
console.log(`DOM Element:`, e.detail.elem); // DOM element
});Wizard Update Event
Triggered when the wizard is updated.
let wz_class = ".wizard";
let $wz_doc = document.querySelector(wz_class)$wz_doc.addEventListener("wz.update", function (e) {
console.log(`Target:`, e.detail.target);
console.log(`DOM Element:`, e.detail.elem);
});Lock and Unlock Events
When the wizard is locked:
$wz_doc.addEventListener("wz.lock", function (e) {
alert("Wizard is locked");
});When the wizard is unlocked:
$wz_doc.addEventListener("wz.unlock", function (e) {
alert("Wizard is unlocked");
});Navigation Events
Moving to the previous step:
$wz_doc.addEventListener("wz.btn.prev", function (e) {
alert("Previous Step");
});Moving to the next step:
$wz_doc.addEventListener("wz.btn.next", function (e) {
alert("Next Step");
});Navigating forward with the navbar:
$wz_doc.addEventListener("wz.nav.forward", function (e) {
alert("Forward Navigation");
});Navigating backward with the navbar:
$wz_doc.addEventListener("wz.nav.backward", function (e) {
alert("Backward Navigation");
});Validation Error Event
Triggered when there is an error validating the data of the active form step.
$wz_doc.addEventListener("wz.error", function (e) {
console.log(`ID:`, e.detail.id); // form_validation
console.log(`Message:`, e.detail.msg); // Form validation message
console.log(`Target:`, e.detail.target); // Array of invalid elements
});Form Submission and Wizard Completion Events
If it is a form, at the end it will fire the following event:
$wz_doc.addEventListener("wz.form.submit", function (e) {
alert("Form Submitted");
});If it is not a form, at the end it will fire the following event:
$wz_doc.addEventListener("wz.end", function (e) {
alert("Wizard is finished");
});Reset Event
When the wizard is restarted:
$wz_doc.addEventListener("wz.reset", function (e) {
alert("Wizard has restarted");
});Demo
Try it on CodePen:
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.

