Skip to content
API 风格:

Шаги ​

Индикатор этапов процесса: четыре состояния (текущий / выполнен / ожидание / ошибка), горизонтальное и вертикальное направления, опциональная навигация по клику. Горизонтальный шагомер автоматически переносит шаги на новую строку по фиксированной базовой ширине, а заголовки всегда отображаются в одну строку.

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

Базовое использование
  1. Растирание туши
  2. Взмах кисти
  3. Постановка печати
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Растирание туши" />
    <LhStep title="Взмах кисти" />
    <LhStep title="Постановка печати" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Растирание туши" />
    <LhStep title="Взмах кисти" />
    <LhStep title="Постановка печати" />
  </LhSteps>
</template>

С описанием ​

С описанием
  1. Регистрация
    Заполнение базовой информации
  2. Проверка
    Подтверждение по почте и телефону
  3. Активация
    Выдача прав доступа аккаунту
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Регистрация" description="Заполнение базовой информации" />
    <LhStep title="Проверка" description="Подтверждение по почте и телефону" />
    <LhStep title="Активация" description="Выдача прав доступа аккаунту" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Регистрация" description="Заполнение базовой информации" />
    <LhStep title="Проверка" description="Подтверждение по почте и телефону" />
    <LhStep title="Активация" description="Выдача прав доступа аккаунту" />
  </LhSteps>
</template>

icon задаёт шагу пользовательский значок (принимается имя встроенного значка LhIcon, например user/check/star); если значок не передан, для выполненного шага и ошибки используются галочка и крестик, а в остальных случаях выводится порядковый номер. Чтобы полностью переопределить отрисовку значка, можно воспользоваться слотом #icon.

Пользовательский значок
  1. Регистрация
  2. Проверка
  3. Активация
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1">
    <LhStep icon="user" title="Регистрация" />
    <LhStep icon="check" title="Проверка" />
    <LhStep icon="star" title="Активация" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1">
    <LhStep icon="user" title="Регистрация" />
    <LhStep icon="check" title="Проверка" />
    <LhStep icon="star" title="Активация" />
  </LhSteps>
</template>

Состояние ошибки ​

Состояние ошибки
  1. Загрузка
  2. Проверка
  3. Готово
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1" status="error">
    <LhStep title="Загрузка" />
    <LhStep title="Проверка" />
    <LhStep title="Готово" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1" status="error">
    <LhStep title="Загрузка" />
    <LhStep title="Проверка" />
    <LhStep title="Готово" />
  </LhSteps>
</template>

status — это глобальное переопределение: после установки все шаги получают указанное состояние, что удобно для пользовательского отображения.

Навигация по клику ​

Навигация по клику
  1. Выбор эскиза
    Подбор образца
  2. Копирование
    Копия с оригинала или по памяти
  3. Оформление
    Натяжка на подрамник

Текущий шаг: 1

vue
<script setup lang="ts">
import { ref } from 'vue'
const current = ref(1)
</script>

<template>
  <LhSteps v-model:current="current" clickable>
    <LhStep title="Выбор эскиза" description="Подбор образца" />
    <LhStep title="Копирование" description="Копия с оригинала или по памяти" />
    <LhStep title="Оформление" description="Натяжка на подрамник" />
  </LhSteps>
</template>
vue
<script>
export default {
  data() {
    return { current: 1 }
  },
}
</script>

<template>
  <LhSteps v-model:current="current" clickable>
    <LhStep title="Выбор эскиза" description="Подбор образца" />
    <LhStep title="Копирование" description="Копия с оригинала или по памяти" />
    <LhStep title="Оформление" description="Натяжка на подрамник" />
  </LhSteps>
</template>

Вертикальное направление ​

Вертикальное направление
  1. Начало
    Замах со скрытым острием кисти
  2. Ведение
    Ведение кисти центральным пером
  3. Завершение
    Возвратное движение кисти в конце
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1" direction="vertical">
    <LhStep title="Начало" description="Замах со скрытым острием кисти" />
    <LhStep title="Ведение" description="Ведение кисти центральным пером" />
    <LhStep title="Завершение" description="Возвратное движение кисти в конце" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1" direction="vertical">
    <LhStep title="Начало" description="Замах со скрытым острием кисти" />
    <LhStep title="Ведение" description="Ведение кисти центральным пером" />
    <LhStep title="Завершение" description="Возвратное движение кисти в конце" />
  </LhSteps>
</template>

Перенос по фиксированной ширине ​

Горизонтальный шагомер располагается по базовой ширине --lh-steps-item-basis (по умолчанию 160px): если контейнер вмещает все шаги, они равномерно распределяются в одну строку, если нет — целый шаг переносится на следующую строку, а не разрывает заголовок. Заголовок всегда отображается одной строкой и при переполнении обрезается многоточием; после переноса соединительная линия у последнего шага в строке автоматически скрывается, чтобы не указывать в пустое пространство.

Перенос по фиксированной ширине
  1. Выбор эскиза
    Подбор образца
  2. Копирование
    Копия с оригинала или по памяти
  3. Надпись
    Подпись и постановка печати
  4. Оформление
    Натяжка на подрамник
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Выбор эскиза" description="Подбор образца" />
    <LhStep title="Копирование" description="Копия с оригинала или по памяти" />
    <LhStep title="Надпись" description="Подпись и постановка печати" />
    <LhStep title="Оформление" description="Натяжка на подрамник" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Выбор эскиза" description="Подбор образца" />
    <LhStep title="Копирование" description="Копия с оригинала или по памяти" />
    <LhStep title="Надпись" description="Подпись и постановка печати" />
    <LhStep title="Оформление" description="Натяжка на подрамник" />
  </LhSteps>
</template>

В примере выше ширина контейнера ограничена 280px для демонстрации переноса. Чтобы изменить ритм переноса, переопределите steps-item-basis через themeVars (ключ автоматически получает префикс --lh-): <LhSteps :theme-vars="{ 'steps-item-basis': '220px' }">; также его можно задать глобально через componentTheme.steps в LhConfigProvider.

Steps API ​

LhSteps Props ​

СвойствоОписаниеТипПо умолчанию
currentИндекс текущего шага (v-model:current, отсчёт с 0)number0
directionНаправление"horizontal" | "vertical"'horizontal'
clickableДоступна ли навигация по шагам по кликуbooleanfalse
statusГлобальное состояние, переопределяющее все шаги (для пользовательского отображения)"wait" | "process" | "finish" | "error"—
themeVarsПеременные темы на уровне компонента (ключи автоматически получают префикс --lh-){ [x: string]: string; }—
sxСвойство sx для быстрой вёрсткиLhSxProps—

LhSteps События ​

СобытиеОписаниеПараметры обратного вызова
update:currentИзменение текущего шага (v-model)(index: number)
changeИзменение текущего шага(index: number)

LhStep Props ​

СвойствоОписаниеТипПо умолчанию
titleЗаголовок шага (можно также использовать слот title)string''
descriptionОписание шага (можно также использовать слот description)string''
iconИмя пользовательского значка (встроенный значок LhIcon; если не передано, для finish/error используются галочка/крестик, в остальных случаях выводится порядковый номер)LhIconName—

Слоты ​

СлотОписаниеКомпонент
defaultШаги (список LhStep)LhSteps
titleПользовательский заголовокLhStep
descriptionПользовательское описаниеLhStep
iconПользовательский значок (переопределяет отрисовку по умолчанию из props icon)LhStep

Переменные компонента ​

Следующие CSS-переменные задают значения по умолчанию на .lh-steps и могут переопределяться глобально или на уровне компонента через themeVars (ключ автоматически получает префикс --lh-):

ПеременнаяОписаниеПо умолчанию
--lh-steps-item-basisБазовая ширина горизонтального шага; если контейнер не вмещает шаги, перенос выполняется по этой ширине160px

Доступность ​

  • Контейнер представляет собой <ol role="list">: семантический порядок совпадает с порядком этапов процесса
  • Для текущего шага автоматически устанавливается aria-current="step"
  • При clickable заголовки выполненных и текущего шагов являются настоящими элементами <button>, а aria-label берётся из языкового пакета (steps.finish / steps.error / steps.step); шаги в состоянии ожидания не кликабельны, чтобы пользователь не мог пропустить ещё не достигнутые этапы
  • Соединительные линии нарисованы через псевдоэлементы и не попадают в дерево доступности

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

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

LhStepsProps
ts
export interface LhStepsProps {
  /** Индекс текущего шага (v-model:current, отсчёт с 0) */
  current?: number
  /** Направление */
  direction?: LhStepsDirection
  /** Доступна ли навигация по шагам по клику */
  clickable?: boolean
  /** Глобальное состояние, переопределяющее все шаги (для пользовательского отображения) */
  status?: LhStepStatus
  /** Переменные темы на уровне компонента (ключ автоматически получает префикс --lh-, например `steps-item-basis`) */
  themeVars?: Record<string, string>
  /** Свойство sx для быстрой вёрстки */
  sx?: LhSxProps
}
LhStepProps
ts
export interface LhStepProps {
  /** Заголовок шага (можно также использовать слот title) */
  title?: string
  /** Описание шага (можно также использовать слот description) */
  description?: string
  /** Имя пользовательского значка (если не передано, для finish/error используются галочка/крестик, в остальных случае выводится порядковый номер) */
  icon?: LhIconName
}
LhIconName (из @lh-ui/share/core/icon (svgs.ts))
ts
export type LhIconName = keyof typeof LH_ICON_SVGS_CONST
LhStepsDirection (из @lh-ui/share/core/steps)
ts
/**
 * Направление шагомера
 */
export type LhStepsDirection = 'horizontal' | 'vertical'
LhStepStatus (из @lh-ui/share/core/steps)
ts
/**
 * Состояние шага
 */
export type LhStepStatus = 'wait' | 'process' | 'finish' | 'error'

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