
Security News
npm Adopts OIDC for Trusted Publishing in CI/CD Workflows
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
@formtalker/vue-numeric-keypad
Advanced tools
The virtual numeric keypad that can be used on Vue.
The virtual numeric keypad that can be used on Vue 3. It was updated to support Vue 3.3.0+ environments with Composition API. By default, keys are randomly arranged and you can specify various settings using options.
npm i @formtalker/vue-numeric-keypad
<script setup>
(Recommended)<template>
<div id="app">
<input
type="number"
:value="value"
@click.stop="show = true"
readonly
/>
<VueNumericKeypad
v-model:value="value"
v-model:show="show"
:options="options"
/>
</div>
</template>
<script setup>
import { ref, reactive, onMounted, onBeforeUnmount } from 'vue'
import VueNumericKeypad from "vue-numeric-keypad";
const value = ref("")
const show = ref(0)
// Using reactive for object options
const options = reactive({
keyRandomize: true,
randomizeWhenClick: true,
fixDeleteKey: false,
})
const handleDocumentClick = () => {
show.value = 0
}
onMounted(() => {
document.addEventListener('click', handleDocumentClick)
})
onBeforeUnmount(() => {
document.removeEventListener('click', handleDocumentClick)
})
</script>
setup()
function<template>
<div id="app">
<input
type="number"
:value="value"
@click.stop="show = true"
readonly
/>
<VueNumericKeypad
v-model:value="value"
v-model:show="show"
:options="options"
/>
</div>
</template>
<script>
import { ref, onMounted, onBeforeUnmount } from 'vue'
import VueNumericKeypad from "vue-numeric-keypad";
export default {
name: "App",
components: {
VueNumericKeypad,
},
setup() {
const value = ref("")
const show = ref(0)
const options = ref({
keyRandomize: true,
randomizeWhenClick: true,
fixDeleteKey: false,
})
const handleDocumentClick = () => {
show.value = 0
}
onMounted(() => {
document.addEventListener('click', handleDocumentClick)
})
onBeforeUnmount(() => {
document.removeEventListener('click', handleDocumentClick)
})
return {
value,
show,
options
}
}
}
</script>
<template>
<div id="app">
<input
type="number"
:value="value"
@click.stop="show = true"
readonly
/>
<VueNumericKeypad
v-model:value="value"
v-model:show="show"
:options="options"
/>
</div>
</template>
<script>
import VueNumericKeypad from "vue-numeric-keypad";
export default {
name: "App",
components: {
VueNumericKeypad,
},
data() {
return {
value: "",
show: 0,
options: {
keyRandomize: true,
randomizeWhenClick: true,
fixDeleteKey: false,
},
};
},
mounted() {
document.addEventListener('click', this.handleDocumentClick);
},
beforeUnmount() {
document.removeEventListener('click', this.handleDocumentClick);
},
methods: {
handleDocumentClick() {
this.show = 0;
}
}
};
</script>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-numeric-keypad@latest/dist/vue-numeric-keypad.min.js"></script>
<script>
const { createApp } = Vue;
createApp({
setup() {
// Your component logic here
}
}).use(VueNumericKeypad).mount('#app');
</script>
...
<vue-numeric-keypad
v-model:value="value"
v-model:show="show"
:options="options"
/>
https://chae-sumin.github.io/vue-numeric-keypad/
The props have to deliver changing values or objects, so bind them with v-bind:
or :
.
In addition, value
and show
, encryptedValue
require two-way binding, so use v-model
directive.
property | Description | Required | type |
---|---|---|---|
id | ID of the keypad. | False | String |
v-model:value | The value to change when entering the keypad. | True | String | String variable |
v-model:encryptedValue | v-model:encrypted-value | Array in which encrypted values will be entered when options.encrypt: true . | False | Array<string> variable |
v-model:show | Bind to the v-show on the keypad. And adjust the font size and randomize the key arrangement. | True | Boolean variable | Number variable |
:encryptFunc | :encrypt-func | A function that encrypts the input when options.encrypt: true . | False | Function |
:options | Set several values. (details can be found below) | False | Object |
option | Description | type | default |
---|---|---|---|
keyRandomize | Randomize the key array whenever the show prop changes. | Boolean | true |
randomizeWhenClick | If the value is true and keyRandomize is true, randomize the key array whenever you press the key. | Boolean | false |
fixDeleteKey | The delete key is fixed when the key array is randomized. | Boolean | true |
fixBlankKey | The Blank key is fixed when the key array is randomized. | Boolean | true |
zIndex | Sets the z-index value. Valid when keypadStyles is the default. | Number | 1 |
rows | Sets the number of rows in the key array. Valid when buttonWrapStyles is the default. | Number | 4 |
columns | Sets the number of columns in the key array. Valid when buttonWrapStyles is the default. | Number | 3 |
keyArray | Can only have an integer 'number' between -2 and 9 and an empty 'string' type. -1 means the delete key and -2 means the clear key | Array<number|string> | columns === 3 ?[1, 2, 3, 4, 5, 6, 7, 8, 9, "", 0, -1] : [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, "", -1] |
deleteKeyText | Delete Button Text | String | 'del' |
clearKeyText | Clear Button Text | String | 'clr' |
encrypt | Using encryption | Boolean | false |
encryptedChar | Will be placed in :value.sync of the original value.For strings of length greater than 1, only the first character is valid. | String | '0' |
activeButtonDelay | The time when activeButtonClass is maintained (ms) | Number | 300 |
pseudoClick | Clicking a button triggers a pseudo click on another button | Boolean | false |
pseudoClickDeleteKey | Clicking the delete button and clear button triggers a pseudo click on another button | Boolean | pseudoClick |
pseudoClickBlankKey | Clicking the blank button triggers a pseudo click on another button | Boolean | pseudoClick |
defaultStyle | 'all': Use All default styles 'button': Use buttonStyles , activeButtonStyles default styles'wrap': Use keypadStyles , buttonWrapStyles default styles'none': Not use all default styles | 'all' | 'button' | 'wrap' | 'none' | 'all' |
stopPropagation | Prevents the propagation of events that turn off :show.sync . | Boolean | true |
vibrate | Using vibrate (reference) | Boolean | true |
vibratePattern | Vibrate pattern (reference) | Number | Array<number> | true |
class option
The class option must meet the following conditions:
- Only 'a-z' and 'A-Z', '0-9', '_', '-', ' ' can be contained
- Use ' ' to separate classes.
- The default style applies to the first class.
property default keypadClass
'numeric-keypad' buttonWrapClass
'numeric-keypad__button-wrap' buttonClass
'numeric-keypad__button' deleteButtonClass
'numeric-keypad__button--delete' clearButtonClass
'numeric-keypad__button--clear' blankButtonClass
'numeric-keypad__button--blank' activeButtonClass
'numeric-keypad__button--active'
keypadStyles
:
// The font size changes automatically when the button size changes.
// fontSize = Math.min(cellWidth, cellHeight) * 0.3;
.${keypadClass} {
position: fixed;
z-index: ${zIndex};
bottom: 0;
left: 0;
right: 0;
height: 40vh;
padding: 10px;
background-color: #fff;
border-radius: 12px 12px 0 0;
box-shadow: 0 -4px 4px rgba(0, 0, 0, 0.15);
color: #000;
overflow: hidden;
font-size: ${fontSize}px; // When fontSize != 0
}
buttonWrapStyles
:
.${buttonWrapClass} {
display: flex;
witdth: 100%;
height: 100%;
justify-content: space-between;
align-content: space-between;
flex-wrap: wrap;
gridGap: 5px;
}
buttonStyles
:
// const width = `calc(${Math.round(1000 / columns) / 10}% - ${Math.ceil(5 * (columns - 1) / columns)}px)`;
// const height = `calc(${Math.round(1000 / rows) / 10}% - ${Math.ceil(5 * (rows - 1) / rows)}px)`;
.${buttonClass} {
flex: 0 0 auto;
display: flex;
width: ${width};
height: ${height};
justify-content: center;
align-items: center;
background-color: #fff;
border: 1px solid #000;
border-radius: 8px;
font-size: inherit;
}
activeButtonStyles
:
// Specificity (0, 2, 0)
.${buttonClass}.${activeButtonClass} {
background-color: #eaeaea;
}
encrypt
are excluded)keyRandomize
is true, the key array is changed randomly.keyArray
with the total length of the keypad, the design will not break.Slot
<VueNumericKeypad
v-model:value="value"
v-model:show="show"
:options="options"
>
<div>Something you want</div>
</VueNumericKeypad>
If you're migrating from Vue 2, here are the main changes:
.sync
modifier with v-model:
<!-- Vue 2 -->
<VueNumericKeypad :value.sync="value" :show.sync="show" />
<!-- Vue 3 -->
<VueNumericKeypad v-model:value="value" v-model:show="show" />
Vue.use(VueNumericKeypad)
app.use(VueNumericKeypad)
Use Composition API for better TypeScript support and modern Vue development patterns.
FAQs
The virtual numeric keypad that can be used on Vue.
The npm package @formtalker/vue-numeric-keypad receives a total of 0 weekly downloads. As such, @formtalker/vue-numeric-keypad popularity was classified as not popular.
We found that @formtalker/vue-numeric-keypad demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
Research
/Security News
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.