npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@adrii_/wizard-js

v2.0.3

Published

A lightweight wizard UI component that supports accessibility and HTML5 in vanilla JavaScript.

Downloads

3

Readme

Badge-glow jsDelivr hits (GitHub) GitHub repo size

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-if attribute.
    • Dynamic required fields with on-active-required class.
    • Customizable validation highlighting.

Table of Contents

Installation

You can install the package via npm:

npm install @adrii_/wizard-js

For 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 to true to enable highlighting invalid fields.
  • highlight_time: Duration (in milliseconds) to display the highlight. Default is 1000.
  • 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:

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.

License

MIT

Thanks for your help! 🎉