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

@jaybharadia/otp-input-vue

v1.0.9

Published

fully customizable opt input for web apps, compatible with Vue 2.x

Downloads

10

Readme

Installation


How to use

To install the latest stable version:

npm i @jaybharadia/otp-input-vue
  • Import plugin
import OtpInput from "@jaybharadia/otp-input-vue";
  • Use plugin
import Vue from "vue";
Vue.use(OtpInput);
  • Import css
import "@jaybharadia/otp-input-vue/dist/vue-otp-input.css";

<template>
  <div>
    <otp-input
      :isValid="isCodeValid"
      @on-complete="onCompleteHandler"
      @on-changed="onChangedHandler"
      @on-paste="onPasteHandler"
    >
      <template #errorMessage> There is an error </template>
    </otp-input>
  </div>
</template>

<script>
  export default {
    name: "yourComponent",
    data() {
      return {
        isCodeValid: true,
      };
    },
    methods: {
      onCompleteHandler(code) {
        console.log("code completed", code);
        this.isCodeValid = false;
      },

      onChangedHandler(lastEnteredCode) {
        console.log("code changed", lastEnteredCode);
        this.isCodeValid = true;
      },

      onPasteHandler(code) {
        console.log("code pasted", code);
      },
    },
  };
</script>

Expected output :

Key Features

  • Reset OTP State ( Additional Feature in this package )

  • [x] Dynamic display modes - Group and Separate

  • [x] Fully customizable style - Input , wrapper , Active Input, Errors

  • [x] Direction of inputs - RTL / LTR

  • [x] Dynamic Type - Number and Text

  • [x] Reset Otp State

  • [x] Dynamic Number of inputs

  • [x] Your desired character as input placeholder

  • [x] Controllable gap between inputs

  • [x] Disabled inputs

  • [x] Error handling - with customizable text

  • [x] Auto Focus on inputs

  • [x] Password input type

  • [ ] web-otp - auto fill input from sms (Coming soon ... )

  • [ ] Vue 3.x - compatible with vue 3.x (Coming soon ... )

Props

Note Don't Panic! 😁 There is a guide to how use class props and style inputs as you wish, see this guide.

Events

Instance Methods ( $vueOtpInput )

Styling

To customize the appearance of the inputs, we can pass our classes to the component as props:

First we should know how to pass class to otp component and use it . there is several approach, we focus on scoped CSS with deep selector (you can do yours😉) :

template :

<template>
  <otp-input
    separateWrapperClass="separate-wrapper-class"
    separateInputClass="separate-input-class"
  />
</template>

css :

<style scoped>
 .vue-otp-input  >>>  .separate-input-class {
	text-align: center;
	font-weight: bold;
	font-size: 20px;
	background-color: aquamarine;
	color: blue;
	border: solid  2px  red;
	width: 48px;
	height: 48px;
 }

.vue-otp-input  >>>  .separate-wrapper-class {
	border: solid  3px  green;
}
</style>

output:

template :

<template>
  <otp-input
    mode="group"
    groupWrapperClass="group-wrapper-class"
    groupInputClass="group-input-class"
  />
</template>

css :

<style scoped>
.vue-otp-input  >>>  .group-wrapper-class {
	border: solid  3px  green;
	background-color: blue;
}

.vue-otp-input  >>>  .group-input-class {
	background-color: blue;
	border: none;
	text-align: center;
	font-weight: bold;
	font-size: 20px;
	color: #fff;
	width: 48px;
	height: 48px;
}
</style>

output :


template :

<template>
  <otp-input :isValid="false" errorClass="error-class">
    <template #errorMessage> There is an error </template>
  </otp-input>
</template>

css :

<style scoped>

.vue-otp-input  >>>  .error-class {
	color: #66ff00;
	line-height: 1.5em;
	font-weight: bold;
}
</style>

output :

<template>
  <otp-input activeInputClass="active-input-class"> </otp-input>
</template>

css :

<style scoped>

.vue-otp-input  >>>  .active-input-class {
	text-align: center;
	border-color: red  !important;
	transform: scale(1.2);
}
</style>

output :

or in group mode with activeWrapperClass prop :

Contribute

You can help me and contribute for :

  • New options

  • Bug Fix

  • Better exceptions

License

MIT