Usage
Use the v-model directive to control the value of the PinInput.
{
"wait": "Loading client-side content..."
}Use the default-value prop to set the initial value when you do not need to control its state.
{
"wait": "Loading client-side content..."
}Type
Use the type prop to change the input type. Defaults to text.
{
"wait": "Loading client-side content..."
}type is set to number, it will only accept numeric characters.Mask
Use the mask prop to treat the input like a password.
{
"wait": "Loading client-side content..."
}OTP
Use the otp prop to enable One-Time Password functionality. When enabled, mobile devices can automatically detect and fill OTP codes from SMS messages or clipboard content, with autocomplete support.
{
"wait": "Loading client-side content..."
}Length
Use the length prop to change the amount of inputs.
{
"wait": "Loading client-side content..."
}Placeholder
Use the placeholder prop to set a placeholder text.
{
"wait": "Loading client-side content..."
}Color
Use the color prop to change the ring color when the PinInput is focused.
{
"wait": "Loading client-side content..."
}highlight prop is used here to show the focus state. It's used internally when a validation error occurs.Size
Use the size prop to change the size of the PinInput.
{
"wait": "Loading client-side content..."
}Disabled
Use the disabled prop to disable the PinInput.
{
"wait": "Loading client-side content..."
}No border
Use the noBorder prop to removes all borders (rings) from the InputTags.
{
"wait": "Loading client-side content..."
}highlight prop is used here to indicate that there is no focus state.Underline
Use the underline prop to removes all borders (rings) except the bottom one from the InputTags.
{
"wait": "Loading client-side content..."
}highlight prop is used here to show the focus state.Rounded
Use the rounded prop to round the InputTags.
{
"wait": "Loading client-side content..."
}highlight prop is used here to show the focus state.API
Props
Emits
Expose
When accessing the component via a template ref, you can use the following:
Theme
export default defineAppConfig({
b24ui: {
pinInput: {
slots: {
root: 'relative inline-flex items-center gap-1.5',
base: 'px-0 py-0 border-0 focus:outline-none disabled:cursor-not-allowed disabled:pointer-events-none disabled:select-none disabled:opacity-30 disabled:resize-none text-center appearance-none transition duration-300 ease-linear text-(--ui-color-base-1) style-blurred-bg-input placeholder:text-(--ui-color-design-plain-na-content-secondary) hover:text-(--ui-color-base-1) focus:text-(--ui-color-base-1) active:text-(--ui-color-base-1) font-[family-name:var(--ui-font-family-primary)] font-(--ui-font-weight-regular) focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-(--b24ui-border-color)'
},
variants: {
size: {
xss: {
base: 'size-[20px] text-(length:--ui-font-size-4xs)/[normal]'
},
xs: {
base: 'size-[24px] text-(length:--ui-font-size-xs)/[normal]'
},
sm: {
base: 'size-[28px] text-(length:--ui-font-size-sm)/[normal]'
},
md: {
base: 'size-[34px] text-(length:--ui-font-size-lg)/[normal]'
},
lg: {
base: 'size-[38px] text-(length:--ui-font-size-lg)/[normal]'
},
xl: {
base: 'size-[46px] text-(length:--ui-font-size-2xl)/[normal]'
}
},
color: {
'air-primary': {
base: 'style-filled'
},
'air-primary-success': {
base: 'style-filled-success'
},
'air-primary-alert': {
base: 'style-filled-alert'
},
'air-primary-copilot': {
base: 'style-filled-copilot'
},
'air-primary-warning': {
base: 'style-filled-warning'
},
default: {
base: 'style-old-default'
},
danger: {
base: 'style-old-danger'
},
success: {
base: 'style-old-success'
},
warning: {
base: 'style-old-warning'
},
primary: {
base: 'style-old-primary'
},
secondary: {
base: 'style-old-secondary'
},
collab: {
base: 'style-old-collab'
},
ai: {
base: 'style-old-ai'
}
},
rounded: {
true: 'rounded-(--ui-border-radius-3xl)',
false: 'rounded-(--ui-border-radius-sm)'
},
noBorder: {
true: 'ring-0 focus-visible:ring-0 style-transparent-bg'
},
underline: {
true: 'rounded-none ring-0 focus-visible:ring-0 style-transparent-bg border-b-1 border-b-(--ui-color-design-outline-stroke)'
},
highlight: {
true: 'ring ring-inset ring-(--b24ui-border-color)'
}
},
compoundVariants: [
{
highlight: false,
noBorder: false,
underline: false,
class: {
base: 'ring ring-inset ring-(--ui-color-design-outline-stroke) focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-(--b24ui-border-color) hover:not-disabled:not-data-disabled:ring-1 hover:not-disabled:not-data-disabled:ring-inset hover:not-disabled:not-data-disabled:ring-(--b24ui-border-color) data-[state=open]:ring-1 data-[state=open]:ring-inset data-[state=open]:ring-(--b24ui-border-color)'
}
},
{
highlight: true,
noBorder: false,
underline: false,
class: {
base: 'ring ring-inset ring-(--b24ui-border-color) focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-(--b24ui-border-color) hover:ring-1 hover:ring-inset hover:ring-(--b24ui-border-color) data-[state=open]:ring-1 data-[state=open]:ring-inset data-[state=open]:ring-(--b24ui-border-color)'
}
},
{
noBorder: false,
underline: true,
class: {
base: 'focus-visible:border-(--b24ui-border-color)'
}
},
{
highlight: true,
noBorder: false,
underline: true,
class: {
base: 'ring-0 border-b-(--b24ui-border-color)'
}
},
{
highlight: true,
noBorder: true,
underline: false,
class: {
base: 'ring-0'
}
}
],
defaultVariants: {
size: 'md',
color: 'air-primary'
}
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import bitrix24UIPluginVite from '@bitrix24/b24ui-nuxt/vite'
export default defineConfig({
plugins: [
vue(),
bitrix24UIPluginVite({
b24ui: {
pinInput: {
slots: {
root: 'relative inline-flex items-center gap-1.5',
base: 'px-0 py-0 border-0 focus:outline-none disabled:cursor-not-allowed disabled:pointer-events-none disabled:select-none disabled:opacity-30 disabled:resize-none text-center appearance-none transition duration-300 ease-linear text-(--ui-color-base-1) style-blurred-bg-input placeholder:text-(--ui-color-design-plain-na-content-secondary) hover:text-(--ui-color-base-1) focus:text-(--ui-color-base-1) active:text-(--ui-color-base-1) font-[family-name:var(--ui-font-family-primary)] font-(--ui-font-weight-regular) focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-(--b24ui-border-color)'
},
variants: {
size: {
xss: {
base: 'size-[20px] text-(length:--ui-font-size-4xs)/[normal]'
},
xs: {
base: 'size-[24px] text-(length:--ui-font-size-xs)/[normal]'
},
sm: {
base: 'size-[28px] text-(length:--ui-font-size-sm)/[normal]'
},
md: {
base: 'size-[34px] text-(length:--ui-font-size-lg)/[normal]'
},
lg: {
base: 'size-[38px] text-(length:--ui-font-size-lg)/[normal]'
},
xl: {
base: 'size-[46px] text-(length:--ui-font-size-2xl)/[normal]'
}
},
color: {
'air-primary': {
base: 'style-filled'
},
'air-primary-success': {
base: 'style-filled-success'
},
'air-primary-alert': {
base: 'style-filled-alert'
},
'air-primary-copilot': {
base: 'style-filled-copilot'
},
'air-primary-warning': {
base: 'style-filled-warning'
},
default: {
base: 'style-old-default'
},
danger: {
base: 'style-old-danger'
},
success: {
base: 'style-old-success'
},
warning: {
base: 'style-old-warning'
},
primary: {
base: 'style-old-primary'
},
secondary: {
base: 'style-old-secondary'
},
collab: {
base: 'style-old-collab'
},
ai: {
base: 'style-old-ai'
}
},
rounded: {
true: 'rounded-(--ui-border-radius-3xl)',
false: 'rounded-(--ui-border-radius-sm)'
},
noBorder: {
true: 'ring-0 focus-visible:ring-0 style-transparent-bg'
},
underline: {
true: 'rounded-none ring-0 focus-visible:ring-0 style-transparent-bg border-b-1 border-b-(--ui-color-design-outline-stroke)'
},
highlight: {
true: 'ring ring-inset ring-(--b24ui-border-color)'
}
},
compoundVariants: [
{
highlight: false,
noBorder: false,
underline: false,
class: {
base: 'ring ring-inset ring-(--ui-color-design-outline-stroke) focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-(--b24ui-border-color) hover:not-disabled:not-data-disabled:ring-1 hover:not-disabled:not-data-disabled:ring-inset hover:not-disabled:not-data-disabled:ring-(--b24ui-border-color) data-[state=open]:ring-1 data-[state=open]:ring-inset data-[state=open]:ring-(--b24ui-border-color)'
}
},
{
highlight: true,
noBorder: false,
underline: false,
class: {
base: 'ring ring-inset ring-(--b24ui-border-color) focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-(--b24ui-border-color) hover:ring-1 hover:ring-inset hover:ring-(--b24ui-border-color) data-[state=open]:ring-1 data-[state=open]:ring-inset data-[state=open]:ring-(--b24ui-border-color)'
}
},
{
noBorder: false,
underline: true,
class: {
base: 'focus-visible:border-(--b24ui-border-color)'
}
},
{
highlight: true,
noBorder: false,
underline: true,
class: {
base: 'ring-0 border-b-(--b24ui-border-color)'
}
},
{
highlight: true,
noBorder: true,
underline: false,
class: {
base: 'ring-0'
}
}
],
defaultVariants: {
size: 'md',
color: 'air-primary'
}
}
}
})
]
})