Поле ввода
Отображает form input с floating label, аккуратными состояниями и slots для leading или trailing иконок.
Установка
npx alixan-ui-nuxt add input This command installs only the base Input component with built-in validation props.
Использование
Label поднимается при фокусе или наличии значения. Используйте XControl для значения и состояния валидации.
<script setup lang="ts">
const control = useXControl('')
</script>
<template>
<Input :control="control" label="Name" />
</template>Состояние
<script setup lang="ts">
const readonlyControl = useXControl('readonly@example.com')
const disabledControl = useXControl('')
const errorControl = useXControl('')
</script>
<template>
<div class="grid w-full gap-3">
<Input :control="readonlyControl" label="Readonly" readonly />
<Input :control="disabledControl" label="Disabled" disabled />
<Input :control="errorControl" label="Required" error="Required field" />
</div>
</template>Валидация
Состояние invalid в родителе: true
<script setup lang="ts">
const control = useXControl('')
const check = () => {
control.validate()
}
</script>
<template>
<Input :control="control" label="Username" required :min="3" :max="20" />
<Button @click="check">{{ $t('inputValidation.check') }}</Button>
<span>
{{ $t('inputValidation.parentInvalid') }}: {{ control.invalid }}
</span>
</template>Длина
6-12 characters
<script setup lang="ts">
const control = useXControl('')
</script>
<template>
<Input :control="control" label="Code" :min="6" :max="12" hint="6-12 characters" />
</template>С иконкой
<script setup lang="ts">
import { Eye, EyeOff, Lock, Mail } from '@lucide/vue'
const emailControl = useXControl('')
const passwordControl = useXControl('')
const isPasswordVisible = ref(false)
</script>
<template>
<div class="grid w-full gap-3">
<EmailInput :control="emailControl">
<template #leading>
<Mail class="size-5" />
</template>
</EmailInput>
<Input
:control="passwordControl"
label="Password"
:type="isPasswordVisible ? 'text' : 'password'"
>
<template #leading>
<Lock class="size-5" />
</template>
<template #trailing>
<IconButton
variant="ghost"
color="default"
size="sm"
@click="isPasswordVisible = !isPasswordVisible"
>
<EyeOff v-if="isPasswordVisible" />
<Eye v-else />
</IconButton>
</template>
</Input>
</div>
</template>Варианты
Install focused wrappers when you want a dedicated component for a specific input pattern.
Username Input
npx alixan-ui-nuxt add username-input<script setup lang="ts">
const control = useXControl('')
</script>
<template>
<UsernameInput :control="control" />
</template>Email Input
npx alixan-ui-nuxt add email-input<script setup lang="ts">
const control = useXControl('')
</script>
<template>
<EmailInput :control="control" required />
</template>Password Input
npx alixan-ui-nuxt add password-input<script setup lang="ts">
const control = useXControl('')
</script>
<template>
<PasswordInput
:control="control"
required
:min="8"
:max="32"
/>
</template>Phone Input
npx alixan-ui-nuxt add phone-input Default country code is +7. The input keeps it as a prefix and applies ### ### ## ## to the number.
<script setup lang="ts">
const control = useXControl('')
</script>
<template>
<PhoneInput
:control="control"
country-code="+7"
placeholder="777 777 77 77"
/>
</template>ИИН
npx alixan-ui-nuxt add iin-input<script setup lang="ts">
const control = useXControl('')
</script>
<template>
<IinInput :control="control" required />
</template>Справочник API
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
| control | XControl<string | number | null> | - | Необязательный XControl, который хранит значение, состояние валидации и маркеры взаимодействия с полем. |
| id | string | - | Пользовательский id. Генерируется автоматически, если не передан. |
| label | string | - | Текст floating label. |
| type | 'text' | 'email' | 'password' | 'tel' | 'url' | 'number' | 'text' | Нативный type поля. |
| placeholder | string | - | Нативный placeholder поля. |
| autocomplete | 'on' | 'off' | - | Управляет нативным browser autocomplete. |
| autofocus | boolean | false | Фокусирует поле при mount. |
| required | boolean | false | Показывает локализованное сообщение required после blur, если значение пустое. |
| min | number | - | Валидация минимальной длины текста после blur. |
| max | number | - | Валидация максимальной длины текста после blur. |
| pattern | string | - | Нативная строка pattern. Значение должно полностью совпасть с pattern после blur. |
| patternMessage | string | 'validation.pattern' | Сообщение валидации, когда pattern не совпадает. |
| mask | string | - | Маска цифр, где # — цифра. |
| hint | string | - | Вспомогательный текст под полем. |
| error | string | - | Сообщение ошибки. Также переключает поле в destructive state. |
| disabled | boolean | false | Отключает взаимодействие с полем. |
| readonly | boolean | false | Делает поле читаемым, но недоступным для редактирования. |
| hasClearButton | boolean | true | Показывает кнопку очистки, когда у поля есть значение и нет trailing slot. |
API XControl
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
| value | T | - | Текущее значение, которым управляет control. |
| errors | Record<string, string> | {} | Текущие ошибки по ключам required, min, max, pattern или external. |
| valid / invalid | boolean | true / false | Вычисляемые маркеры валидности на основе текущих ошибок. |
| touched / untouched | boolean | false / true | Показывает, покинул ли пользователь поле или была запрошена валидация. |
| dirty / pristine | boolean | false / true | Показывает, изменялось ли значение через поле. |
| disabled / enabled | boolean | false / true | Вычисляемые состояния enabled и disabled, используемые Input. |
| setValue(value) | (value: T) => void | - | Программно обновляет значение control. |
| reset(value?) | (value?: T) => void | - | Сбрасывает значение, ошибки и маркеры взаимодействия. |
| validate() | () => boolean | - | Помечает поле как touched и возвращает результат валидации. |
| hasError(key) | (key: string) => boolean | - | Проверяет наличие конкретной ошибки валидации. |
| disable() / enable() | () => void | - | Отключает или включает control и связанный Input. |