Skip to content
API 风格:

Поле ввода ​

Компонент поля ввода: поддерживает текст, пароль, подсчёт символов и другие возможности.

Базовое использование ​

Базовое использование
Текущее значение:
vue
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('')
</script>

<template>
  <!-- Базовое поле ввода -->
  <LhInput v-model="value" placeholder="Введите текст" />
</template>
vue
<script>
export default {
  data() {
    return { value: '' }
  },
}
</script>

<template>
  <!-- Базовое поле ввода -->
  <LhInput v-model="value" placeholder="Введите текст" />
</template>

Различные типы ​

Различные типы
vue
<script setup lang="ts">
import { ref } from 'vue'

const text = ref('')
const password = ref('')
const clearable = ref('Заполнено')
</script>

<template>
  <LhInput v-model="text" placeholder="Текстовый ввод" />
  <LhInput v-model="password" type="password" placeholder="Введите пароль" show-password />
  <LhInput v-model="clearable" placeholder="Очищаемый ввод" clearable />
</template>
vue
<script>
export default {
  data() {
    return {
      text: '',
      password: '',
      clearable: 'Заполнено',
    }
  },
}
</script>

<template>
  <LhInput v-model="text" placeholder="Текстовый ввод" />
  <LhInput v-model="password" type="password" placeholder="Введите пароль" show-password />
  <LhInput v-model="clearable" placeholder="Очищаемый ввод" clearable />
</template>

Отключённое состояние ​

Отключённое состояние
vue
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('')
</script>

<template>
  <LhInput v-model="value" disabled placeholder="Отключённое поле" />
</template>
vue
<script>
export default {
  data() {
    return { value: '' }
  },
}
</script>

<template>
  <LhInput v-model="value" disabled placeholder="Отключённое поле" />
</template>

Подсчёт символов ​

Подсчёт символов
0/10
vue
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('')
</script>

<template>
  <LhInput v-model="value" :maxlength="10" show-word-limit placeholder="Не более 10 символов" />
</template>
vue
<script>
export default {
  data() {
    return { value: '' }
  },
}
</script>

<template>
  <LhInput v-model="value" :maxlength="10" show-word-limit placeholder="Не более 10 символов" />
</template>

Слоты ​

Слоты префикса и суффикса
vue
<script setup lang="ts">
import { ref } from 'vue'
const value = ref('')
</script>

<template>
  <LhInput v-model="value">
    <template #prefix>🔍</template>
  </LhInput>
  <LhInput v-model="value">
    <template #suffix>unit</template>
  </LhInput>
</template>
vue
<script>
export default {
  data() {
    return { value: '' }
  },
}
</script>

<template>
  <LhInput v-model="value">
    <template #prefix>🔍</template>
  </LhInput>
  <LhInput v-model="value">
    <template #suffix>unit</template>
  </LhInput>
</template>

Пользовательская тема ​

Пользовательская тема
vue
<script setup lang="ts">
import { LhConfigProvider, LhInput } from '@lh-ui/vue3'

const cerblueTheme = {
  'primary-color': '#2B4C7C',
  'primary-color-hover': '#3D649E',
  'primary-color-bg': '#E8EDF3',
  'bg-color': '#F0F4F8',
}
</script>

<template>
  <!-- Тема настраивается через theme-vars -->
  <LhConfigProvider :theme-vars="cerblueTheme">
    <LhInput placeholder="Поле ввода «сине-белый фарфор»" />
  </LhConfigProvider>
</template>
vue
<script>
import { LhConfigProvider, LhInput } from '@lh-ui/vue3'

export default {
  data() {
    return {
      cerblueTheme: {
        'primary-color': '#2B4C7C',
        'primary-color-hover': '#3D649E',
        'primary-color-bg': '#E8EDF3',
        'bg-color': '#F0F4F8',
      },
    }
  },
}
</script>

<template>
  <!-- Тема настраивается через theme-vars -->
  <LhConfigProvider :theme-vars="cerblueTheme">
    <LhInput placeholder="Поле ввода «сине-белый фарфор»" />
  </LhConfigProvider>
</template>

Быстрая разметка sx ​

Свойство sx позволяет быстро задать отступы без написания дополнительного CSS.

Быстрая разметка sx
vue
<script setup lang="ts">
</script>

<template>
  <!-- Отступ сверху 2 -->
  <LhInput placeholder="Отступ сверху 2" :sx="{ mt: 2 }" />
  <!-- Отступ по горизонтали 1, снизу 3 -->
  <LhInput placeholder="Отступ по горизонтали 1, снизу 3" :sx="{ mx: 1, mb: 3 }" />
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Отступ сверху 2 -->
  <LhInput placeholder="Отступ сверху 2" :sx="{ mt: 2 }" />
  <!-- Отступ по горизонтали 1, снизу 3 -->
  <LhInput placeholder="Отступ по горизонтали 1, снизу 3" :sx="{ mx: 1, mb: 3 }" />
</template>

sx рассчитывается на базе 8px: mt: 2 → marginTop: 16px. Полный список свойств см. в Быстрая разметка sx.

Интернационализация ​

Интернационализация
vue
<script setup lang="ts">
import { ref, computed } from 'vue'
import { LhConfigProvider, LhInput, LhButton, zhCN, enUS } from '@lh-ui/vue3'

const locale = ref('zh-CN')
const messages = computed(() => locale.value === 'zh-CN' ? zhCN : enUS)
</script>

<template>
  <!-- Языковой пакет внедряется через ConfigProvider -->
  <LhConfigProvider :locale="messages">
    <LhInput />
    <LhButton @click="locale = locale === 'zh-CN' ? 'en-US' : 'zh-CN'">Переключить язык</LhButton>
  </LhConfigProvider>
</template>
vue
<script>
import { LhConfigProvider, LhInput, LhButton, zhCN, enUS } from '@lh-ui/vue3'

export default {
  components: { LhConfigProvider, LhInput, LhButton },
  data() {
    return { locale: 'zh-CN' }
  },
  computed: {
    messages() {
      return this.locale === 'zh-CN' ? zhCN : enUS
    },
  },
  methods: {
    toggleLocale() {
      this.locale = this.locale === 'zh-CN' ? 'en-US' : 'zh-CN'
    },
  },
}
</script>

<template>
  <!-- Языковой пакет внедряется через ConfigProvider -->
  <LhConfigProvider :locale="messages">
    <LhInput />
    <LhButton @click="toggleLocale">Переключить язык</LhButton>
  </LhConfigProvider>
</template>

Размер и только для чтения ​

Размер и только для чтения
vue
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('')
</script>

<template>
  <LhInput v-model="value" size="small" placeholder="small" />
  <LhInput v-model="value" size="medium" placeholder="medium" />
  <LhInput v-model="value" size="large" placeholder="large" />
  <LhInput v-model="value" readonly placeholder="Поле только для чтения" />
</template>
vue
<script>
export default {
  data() {
    return { value: '' }
  },
}
</script>

<template>
  <LhInput v-model="value" size="small" placeholder="small" />
  <LhInput v-model="value" size="medium" placeholder="medium" />
  <LhInput v-model="value" size="large" placeholder="large" />
  <LhInput v-model="value" readonly placeholder="Поле только для чтения" />
</template>

Иконки префикса и суффикса ​

Иконки префикса и суффикса задаются через prefix-icon / suffix-icon, в качестве значения принимается имя встроенной иконки LhIcon (например, search, date).

Иконки префикса и суффикса
vue
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('')
</script>

<template>
  <LhInput v-model="value" prefix-icon="search" placeholder="Префикс-иконка" />
  <LhInput v-model="value" suffix-icon="date" placeholder="Суффикс-иконка" />
</template>
vue
<script>
export default {
  data() {
    return { value: '' }
  },
}
</script>

<template>
  <LhInput v-model="value" prefix-icon="search" placeholder="Префикс-иконка" />
  <LhInput v-model="value" suffix-icon="date" placeholder="Суффикс-иконка" />
</template>

Нативные свойства и автоматическая высота ​

Нативные атрибуты autocomplete, native-type, autofocus, minlength и другие прокидываются во внутреннее поле ввода; autosize используется, чтобы высота textarea автоматически подстраивалась под содержимое.

Нативные свойства и автоматическая высота
vue
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('')
</script>

<template>
  <LhInput v-model="value" autocomplete="off" native-type="text" :minlength="3" placeholder="autocomplete off" />
  <LhInput v-model="value" autofocus placeholder="Автофокус" />
  <LhInput v-model="value" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" placeholder="Автоматическая высота" />
</template>
vue
<script>
export default {
  data() {
    return { value: '' }
  },
}
</script>

<template>
  <LhInput v-model="value" autocomplete="off" native-type="text" :minlength="3" placeholder="autocomplete off" />
  <LhInput v-model="value" autofocus placeholder="Автофокус" />
  <LhInput v-model="value" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" placeholder="Автоматическая высота" />
</template>

Input API ​

Props ​

СвойствоОписаниеТипПо умолчанию
modelValueПривязанное значениеstring—
typeТип поля ввода"number" | "text" | "textarea" | "password" | "email" | "url" | "tel" | "date" | "time"'text'
size—"small" | "medium" | "large" | "mini" | "x-large"'medium'
disabledОтключённое состояниеbooleanfalse
readonlyСостояние только для чтенияbooleanfalse
placeholderТекст плейсхолдераstring—
maxlengthМаксимальная длина вводаnumber—
minlength—number—
showWordLimitПоказывать ли подсчёт символовbooleanfalse
clearableМожно ли очистить полеbooleanfalse
prefixIconИмя иконки префикса (встроенная иконка LhIcon)LhIconName—
suffixIconИмя иконки суффикса (встроенная иконка LhIcon)LhIconName—
autofocus—booleanfalse
autocomplete—string—
nativeType—string—
autosize—boolean | { minRows?: number; maxRows?: number; }false
resize—"none" | "both" | "horizontal" | "vertical"'vertical'
name—string—
rows—number—
tabindex—string | number—
form—string—
inputStyle—{ [x: string]: string; }—
label—string—
themeVarsПеременные темы на уровне компонента, переопределяют конфигурацию ConfigProvider{ [x: string]: string; }—
bgPatternУзор фона на уровне компонента, переопределяет конфигурацию ConfigProviderstring—
sxСвойства быстрой разметки sxLhSxProps—

Events ​

СобытиеОписаниеПараметры обратного вызова
update:modelValueСобытие обновления значения(value: string)
inputСобытие ввода(value: string)
changeСобытие изменения значения(value: string)
focusСобытие получения фокуса(event: FocusEvent)
blurСобытие потери фокуса(event: FocusEvent)
clearСобытие очистки—
keydownНативное событие keydown(event: KeyboardEvent)

Slots ​

СлотОписание
prefixСодержимое в начале поля ввода
suffixСодержимое в конце поля ввода

Определения типов ​

Структуры TypeScript, экспортируемые этим компонентом (автоматически извлечены из packages/components/input/src/types.ts и исходников @lh-ui/share/core/*; нажмите на каждый пункт, чтобы развернуть полное определение; описания свойств см. в таблице Props выше):

LhInputType
ts
export type LhInputType = typeof LH_INPUT_TYPE_CONST[keyof typeof LH_INPUT_TYPE_CONST]
LhInputSize
ts
/**
 * Размер Input
 */
export type LhInputSize = typeof LH_SIZE_CONST[keyof typeof LH_SIZE_CONST]
LhInputState
ts
export type LhInputState = typeof LH_INPUT_STATE_CONST[keyof typeof LH_INPUT_STATE_CONST]
LhInputProps
ts
/**
 * Интерфейс Props компонента Input
 */
export interface LhInputProps {
  modelValue?: string
  type?: LhInputType
  size?: LhInputSize
  disabled?: boolean
  readonly?: boolean
  placeholder?: string
  maxlength?: number
  minlength?: number
  showWordLimit?: boolean
  clearable?: boolean
  /** Имя иконки префикса (встроенная иконка LhIcon, например `search`) */
  prefixIcon?: LhIconName
  /** Имя иконки суффикса (встроенная иконка LhIcon, например `date`) */
  suffixIcon?: LhIconName
  autofocus?: boolean
  autocomplete?: string
  nativeType?: string
  autosize?: boolean | { minRows?: number; maxRows?: number }
  resize?: 'none' | 'both' | 'horizontal' | 'vertical'
  name?: string
  rows?: number
  tabindex?: number | string
  form?: string
  inputStyle?: Record<string, string>
  label?: string
  /** Переменные темы на уровне компонента, переопределяют конфигурацию ConfigProvider */
  themeVars?: Record<string, string>
  /** Узор фона на уровне компонента, переопределяет конфигурацию ConfigProvider */
  bgPattern?: string
  /** Свойства быстрой разметки sx */
  sx?: LhSxProps
}
LhIconName (из @lh-ui/share/core/icon (svgs.ts))
ts
export type LhIconName = keyof typeof LH_ICON_SVGS_CONST

Красота традиций — основа кода