@va54/vue3-otp
v0.0.7
Published
A fully customizable, OTP (one-time password) input component built with Vue 3.x.
Downloads
9
Maintainers
Readme
vue3-otp
A simple and customizable OTP input component for Vue 3.

NOTE: This image showcases a styled OTP input using Tailwind CSS.
⚙️ Installation
Install as a Package
You can install vue3-otp via the terminal:
pnpm i @va54/vue3-otp📖 Usage
Register Globally
// main.js or main.ts
import { createApp } from 'vue';
import App from './App.vue';
import VOtp from "@va54/vue3-otp";
const app = createApp(App);
app.component('v-otp', VOtp);
app.mount("#app");Register Locally
<script setup>
import { ref } from 'vue';
import VOtp from "@va54/vue3-otp";
const otp = ref('');
</script>
<template>
<v-otp v-model:value="otp" :num-inputs="6" input-type="tel" class="flex space-x-2" />
</template>🔧 Props
| Name | Type | Required | Default | Description |
| -------------------- | ----------- | -------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| value | string | ❌ | "" | v-model:value for binding dynamic value. |
| num-inputs | number | ✅ | 6 | Number of OTP inputs to render. |
| separator | component | ❌ | undefined | Custom separator between inputs. Example: <span>-</span> to insert - between each input. |
| input-classes | string | ❌ | none | CSS class applied to each input. |
| input-type | string | ❌ | "tel" | Input type: "number", "tel", "letter-numeric", "password". |
| input-mode | string | ❌ | "numeric" | Controls virtual keyboard type. Options: "numeric", "text", "tel". Learn More |
| auto-focus-enabled | boolean | ❌ | false | Autofocuses input on page load. |
| should-focus-order | boolean | ❌ | false | Ensures input order is maintained correctly. |
| placeholders | array | ❌ | [] | Placeholder values for each input. Example: :placeholder="['1', '2', '3', '4', '5', '6']". The length must match num-inputs. |
| conditional-class | array | ❌ | [] | Applies classes based on input values. Example: :conditionalClass="['one', 'two', 'three', 'four']". Length must match num-inputs. |
| is-disabled | boolean | ❌ | false | Disables all input fields. |
📌 Methods
| Name | Description |
| ------------------ | --------------------------------------------------------------------------- |
| clearInput() | Clears all OTP inputs. Use with ref. |
| fillInput(value) | Fills OTP inputs. The value must match num-inputs length. Use with ref. |
Example: Custom Separator & Tailwind Styling
<script setup>
import { ref } from 'vue';
import VOtp from "@va54/vue3-otp";
const otp = ref('');
</script>
<template>
<v-otp
v-model:value="otp"
:num-inputs="4"
:separator="'<span>-</span>'"
input-type="tel"
class="flex space-x-2"
input-classes="w-10 h-12 border border-gray-300 rounded-md text-center text-xl focus:ring-2 focus:ring-blue-500"
/>
</template>This will render an OTP input with a - separator between each digit and apply Tailwind-based styling to the inputs.
Enjoy using @va54/vue3-otp! 🚀
