Skip to content

CdsSteps

Степпер проводит пользователя через многошаговый процесс: показывает, какие шаги пройдены, какой активен и сколько осталось. Умеет переключать контент шагов и рендерит кнопки «Назад» / «Далее» из коробки, а шапка без контента работает как трекер статуса.

Storybook GitLab Figma
Покрытие тестами: тестов нет

У компонента пока нет автотестов: поведение проверено только вручную.

API в спеках
0 / 75 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
0 юнит · 0 браузерных
Покрытие кода
13.1% строк · 0% ветвей замер v4.0.0-alpha.13
A11y (axe)
5 рекомендаций в 11 историях замер v4.0.0-alpha.11

Ход бизнес-процесса без навигации по шагам степпер показывает сам: без пропа interactive шаги некликабельны, а шапка без items работает как трекер статуса — см. сценарий «Статус заявки». Компонент CdsStages, решавший ту же задачу, устарел. Для равнозначных разделов, между которыми переключаются в любом порядке, — CdsTabs.

Анатомия ​

Степпер состоит из шапки с шагами, контентной части и кнопок навигации — последние две появляются, когда шаги заданы через items. Каждый шаг — это индикатор состояния с линией прогресса до следующего шага, заголовок и описание.

Вариации ​

Шаги из массива ​

Передайте в items массив объектов — заголовок, описание и значение шага читаются по ключам item-title, item-text и item-value (по умолчанию title, text, значение — порядковый номер шага, начиная с единицы). Контент шага задают слоты item.{value} или общий item, а кнопки «Назад» / «Далее» рендерятся автоматически: тексты меняются пропами prev-text / next-text, скрыть кнопки — hide-actions.

Sandbox Storybook

Состояния ​

Шаги можно объявить и вручную — компонентами CdsStepsItem в слоте по умолчанию: рендерится только шапка, контент и навигация остаются за вами. У шага три состояния: error — завершён с ошибкой, warning — требует внимания, disabled — недоступен.

Sandbox Storybook

Интерактивные шаги ​

Проп interactive разрешает переходить на любой шаг кликом или с клавиатуры — прогресс анимируется каскадно, disabled-шаги пропускаются. Проп readonly отключает переходы, сохраняя внешний вид.

Sandbox Storybook

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

Проп vertical разворачивает шапку в столбец — подходит для трекеров статуса и узких панелей.

Sandbox Storybook

Слоты ​

Слоты дают контроль над каждой зоной степпера:

СлотОписание
defaultСвои CdsStepsItem, когда items не задан
title, textЗаголовок и описание каждого шага
header-item, header-item.{value}Полная замена контента шага в шапке
item, item.{value}Контент шага в контентной части
actionsСвои кнопки навигации (получает методы prev / next)
prev, nextЗамена отдельной кнопки внутри стандартного блока навигации

Слоты title и text получают состояние шага (selected, complete, error, first, last…) — удобно дорисовывать теги и подсказки.

Sandbox Storybook

Модель ​

Активный шаг управляется через v-model. У шагов из items значение по умолчанию — порядковый номер с единицы, у объявленных вручную — индекс с нуля; своё значение задаётся ключом item-value или пропом value у CdsStepsItem. Методы prev / next доступны через ref компонента.

Sandbox Storybook

Рекомендации ​

Сценарии использования ​

Мастер оформления ​

Классический мастер: каждому шагу — свой слот item.{value} с формой. Встроенные кнопки листают шаги, а поля привязаны к общему состоянию через v-model, поэтому данные не теряются при переходах.

Sandbox Storybook

Подтверждение перед переходом ​

Слот actions заменяет встроенные кнопки и получает методы prev и next — условия перехода вы определяете сами. Здесь кнопка «Далее» заблокирована, пока пользователь не примет условия обслуживания.

Sandbox Storybook

Статус заявки ​

Шапка без items работает как трекер процесса: только шаги, без контента и кнопок. Пройденные этапы отмечены индикаторами, а описания подсказывают даты и сроки. Проп vertical укладывает историю в столбец.

Sandbox Storybook

API ​

CdsSteps ​

Пропсы

ИмяТипПо умолчаниюОписание
disabledboolean | null | undefinednullЗаблокированное состояние
hideActionsboolean | undefined—Скрыть кнопки навигации по шагам
interactiveboolean | undefined—Возможность перехода на шаг по клику
itemPropsSelectItemKey'props'Свойство объекта, содержащее пропсы для элемента, либо функция для их получения
itemsany[] | undefined[]Массив элементов для отображения
itemTextSelectItemKey'text'Ключ описания шага в объекте элемента items
itemTitleSelectItemKey'title'Свойство объекта, используемое как заголовок элемента, либо функция для его получения
itemValueSelectItemKey'value'Свойство объекта, используемое как значение элемента, либо функция для его получения
mandatoryboolean | "force" | undefined'force'Обязательный выбор хотя бы одного элемента
maxnumber | undefined—Максимальное количество выбираемых элементов
modelValueany—Значение выбранных элементов группы
multipleboolean | undefined—Разрешить множественный выбор
nextTextstring | undefined'$cds.steps.next'Текст кнопки перехода на следующий шаг
prevTextstring | undefined'$cds.steps.prev'Текст кнопки перехода на предыдущий шаг
readonlyboolean | null | undefinednullТолько для чтения
requiredboolean | "force" | undefined'force'Обязательный выбор хотя бы одного элемента
selectedClassstring | undefined'cds-steps-item--current'CSS класс для выбранного состояния
tagstring | JSXComponent<any> | undefined'div'Пользовательский HTML-тег для отображения
themestring | undefined—Тема компонента
verticalboolean | undefined—Вертикальное отображение

События

ИмяТипОписание
update:modelValue[value: unknown]Событие изменения v-model

Слоты

ИмяТипОписание
actionsCdsStepsSlotКастомные кнопки навигации
defaultCdsStepsSlotКонтент шапки: кастомные CdsStepsItem (используется, если не задан items)
header-itemCdsStepsItemSlotКастомный рендер контента каждого шага в шапке
itemCdsStepsInternalItemКонтент шага в контентной части
nextCdsStepsActionsSlotКастомная кнопка перехода на следующий шаг
prevCdsStepsActionsSlotКастомная кнопка перехода на предыдущий шаг
textCdsStepsItemSlotКастомное описание каждого шага
titleCdsStepsItemSlotКастомный заголовок каждого шага

Exposed

ИмяТипОписание
next() => voidПереходит к следующему шагу.
prev() => voidПереходит к предыдущему шагу.

CdsStepsActions ​

Пропсы

ИмяТипПо умолчаниюОписание
disabledboolean | "next" | "prev" | undefinedfalseБлокировка кнопок навигации: обеих или конкретной
nextTextstring | undefined'$cds.steps.next'Текст кнопки перехода на следующий шаг
prevTextstring | undefined'$cds.steps.prev'Текст кнопки перехода на предыдущий шаг

События

ИмяТипОписание
click:next[]Клик по кнопке перехода на следующий шаг
click:prev[]Клик по кнопке перехода на предыдущий шаг

Слоты

ИмяТипОписание
nextCdsStepsActionsSlotКастомная кнопка перехода на следующий шаг
prevCdsStepsActionsSlotКастомная кнопка перехода на предыдущий шаг

CdsStepsItem ​

Пропсы

ИмяТипПо умолчаниюОписание
disabledboolean | null | undefinednullЗаблокированное состояние
errorboolean | undefined—Шаг завершен с ошибкой
interactiveboolean | undefined—Возможность перехода на шаг по клику
readonlyboolean | null | undefinednullТолько для чтения
selectedClassstring | undefined—CSS класс для выбранного состояния
textstring | undefined—Описание шага
titlestring | undefined—Заголовок шага
valueany—Значение компонента в группе
warningboolean | undefined—Шаг требует внимания

События

ИмяТипОписание
group:selected[value: { value: boolean; }]Событие изменения выбранного состояния шага в группе

Слоты

ИмяТипОписание
defaultCdsStepsItemSlotДополнительный контент шага после заголовка и описания
textCdsStepsItemSlotКастомное описание шага
titleCdsStepsItemSlotКастомный заголовок шага

CdsStepsView ​

Пропсы

ИмяТипПо умолчаниюОписание
crossfadeboolean | undefined—Слайды сменяются плавным перекрестным затуханием вместо сдвига
direction"horizontal" | "vertical" | undefined'horizontal'Переключение между горизонтальным или вертикальным отображением.
disabledboolean | null | undefinednullЗаблокированное состояние
maxnumber | undefined—Максимальное количество выбираемых элементов
modelValueany—Значение выбранных элементов группы
multipleboolean | undefined—Разрешить множественный выбор
reverseboolean | undefined—Инвертирует направление анимации перехода между слайдами
selectedClassstring | undefined—CSS класс для выбранного состояния
tagstring | JSXComponent<any> | undefined'div'Пользовательский HTML-тег для отображения
themestring | undefined—Тема компонента
transitionDurationnumber | undefined—Длительность анимации перехода между слайдами в миллисекундах
verticalArrowsboolean | "left" | "right" | undefined—Размещает стрелки навигации вертикально: 'left' или 'right' — сторона, true — сторона по умолчанию

События

ИмяТипОписание
update:modelValue[value: any]Событие изменения v-model

Слоты

ИмяТипОписание
additional{ group: GroupProvide; }Дополнительный контент поверх слайдов — например точки-индикаторы или собственная навигация
default{ group: GroupProvide; }Слайды. В параметрах — состояние группы для управления активным слайдом
next{ props: ControlProps; }Кнопка перехода к следующему слайду. В параметрах — готовые пропсы для своей кнопки
prev{ props: ControlProps; }Кнопка перехода к предыдущему слайду. В параметрах — готовые пропсы для своей кнопки

CdsStepsViewItem ​

Пропсы

ИмяТипПо умолчаниюОписание
disabledboolean | null | undefinednullЗаблокированное состояние
eagerboolean | undefined—Принудительно рендерит содержимое компонента при его использовании. Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO.
reverseTransitionstring | boolean | undefined—Переход при показе слайда в обратном направлении. Имя transition-компонента или false, чтобы отключить анимацию
selectedClassstring | undefined—CSS класс для выбранного состояния
transitionstring | boolean | undefined—Переход при показе слайда в прямом направлении. Имя transition-компонента или false, чтобы отключить анимацию
valueany—Значение компонента в группе

Слоты

ИмяТипОписание
defaultanyКонтент слайда