Skip to content

CdsEmptyState

Пустое состояние объясняет, почему на экране нет контента, и подсказывает следующий шаг: нет результатов поиска, пустой список, ошибка загрузки. Собирается из медиа-области, заголовков, описания и кнопки действия.

Storybook GitLab Figma
Покрытие тестами: 100% — хорошее покрытие
API в спеках
32 / 32 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
36 юнит · 0 браузерных
Известные баги
1 зафиксированы тестом it.fails
Покрытие кода
100% строк · 98.3% ветвей замер v4.0.0-alpha.13
A11y (axe)
9 рекомендаций в 12 историях замер v4.0.0-alpha.11

Для короткого сообщения о результате операции подойдёт CdsToast, а пока данные ещё загружаются, покажите CdsSkeletonLoader вместо пустого состояния.

Анатомия ​

Пустое состояние — вертикальный стек зон. Каждая зона появляется, только когда задан её проп или слот, поэтому состав подбирается под ситуацию: от одной строки заголовка до полного набора с медиа и кнопкой.

Вариации ​

Наполнение ​

У каждой текстовой зоны свой проп: headline — крупный акцент («404», «Пусто»), title — суть ситуации, text — подробности и подсказка, что делать. Ширину текста ограничивает text-width (по умолчанию 500), чтобы длинное описание не растягивалось на весь экран.

Sandbox Storybook

Медиа ​

Проп icon показывает иконку, image — изображение (имеет приоритет над иконкой). Размер медиа задаёт size: по умолчанию 96 для иконки и 200 для изображения. Цвет иконки меняет проп color.

Sandbox Storybook

Иллюстрации ​

Legacy-иллюстрации из пакета @central-design-system/illustrations (CDS 3): проп illustration принимает kebab-case имя глобально зарегистрированного компонента (регистрируются через опцию illustrations в createCds). Свою иллюстрацию можно отрендерить слотом illustration.

Sandbox Storybook

Выравнивание ​

Проп justify прижимает контент к краю контейнера: start, center (по умолчанию) или end. Пунктирная рамка в демо показывает границы контейнера.

Sandbox Storybook

Действия ​

Проп action-text добавляет кнопку под контентом; клик по ней приходит событием click:action. Когда действий несколько, рендерите свои кнопки слотом actions — привяжите props.onClick из слота к главной кнопке, чтобы событие click:action продолжало работать.

Sandbox Storybook

Слоты ​

Слоты заменяют контент из пропсов, когда нужна полная свобода разметки.

СлотОписание
mediaМедиа-область. Замещает контент из icon и image
illustrationИллюстрация. Замещает контент из illustration
headlineАкцентный заголовок. Замещает текст из headline
titleЗаголовок. Замещает текст из title
textОписание. Замещает текст из text
descriptionДополнительное описание. Замещает текст из description
defaultПроизвольный контент между описанием и действиями
actionsКнопки действий; получает props с обработчиком onClick
Sandbox Storybook

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

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

Поиск без результатов ​

Когда запросу ничего не соответствует, вместо списка появляется пустое состояние. Кнопка из action-text очищает запрос по событию click:action — пользователь возвращается к полному списку одним кликом. Попробуйте ввести запрос, которого нет в списке.

Sandbox Storybook

Пустой список ​

Первое посещение раздела — повод не извиняться за пустоту, а помочь начать: title называет ситуацию, text обещает результат, кнопка из action-text создаёт первую запись. После добавления записи список замещает заглушку.

Sandbox Storybook

Ошибка загрузки ​

Если данные не загрузились, объясните причину и дайте повторить запрос на месте. Кнопка в слоте actions показывает loading на время повтора, а props.onClick из слота сохраняет событие click:action.

Sandbox Storybook

Страница 404 ​

headline выводит крупный код ошибки, а href (или to для vue-router) передаётся кнопке действия — она работает как ссылка и уводит пользователя с тупиковой страницы.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
actionTextstring | undefined—Текст кнопки действия. При указании рендерится кнопка под контентом.
bgColorstring | undefined—Цвет фона компонента
colorstring | undefined—Цвет компонента
contentstring | number | undefined—Контент, отображаемый в компоненте.
descriptionstring | undefined—Описание
headlinestring | undefined—Крупный акцентный заголовок над основным заголовком.
heightstring | number | undefined—Высота компонента
hrefstring | undefined—Атрибут href для ссылки. Если указан, компонент будет вести себя как обычная ссылка
iconIconValue | undefined—Иконка в медиа-области.
illustrationstring | undefined—Legacy-иллюстрация из пакета @central-design-system/illustrations (CDS 3): kebab-case имя глобально зарегистрированного компонента, например rocket. Иллюстрации регистрируются через опцию illustrations в createCds.
imagestring | undefined—Источник изображения в медиа-области (имеет приоритет над icon).
justify"start" | "end" | "center" | undefined'center'Горизонтальное выравнивание контента: start, center, end.
maxHeightstring | number | undefined—Максимальная высота компонента
maxWidthstring | number | undefined—Максимальная ширина компонента
minHeightstring | number | undefined—Минимальная высота компонента
minWidthstring | number | undefined—Минимальная ширина компонента
sizenumber | "xs" | "sm" | "md" | "lg" | "xl" | undefined'md'Размер компонента
textstring | number | undefined—Текст, отображаемый в компоненте.
textWidthstring | number | undefined500Максимальная ширина блока описания.
themestring | undefined—Тема компонента
titlestring | undefined—Заголовок.
toLinkTo | undefined—Маршрут назначения или объект для RouterLink. Если указан, компонент будет вести себя как RouterLink
widthstring | number | undefined—Ширина компонента

События

ИмяТипОписание
click:action[event: MouseEvent]Клик по кнопке действия.

Слоты

ИмяТипОписание
actions{ props: { onClick: (event: MouseEvent) => void; }; }Слот действий; получает props с обработчиком onClick для привязки к своему элементу.
defaultanyПроизвольный контент между описанием и действиями.
descriptionanyСлот описания (вместо пропа description).
headlineanyСлот акцентного заголовка (вместо пропа headline).
illustrationanyСлот медиа-области для иллюстрации (вместо пропса illustration).
mediaanyСлот медиа-области (вместо пропсов image/icon).
textanyСлот описания (вместо пропа text).
titleanyСлот заголовка (вместо пропа title).