Skip to content

CdsBadge

Бейдж — маленькая метка в углу элемента или рядом с ним: счётчик непрочитанных сообщений, точка «есть новое», короткая пометка. Бейдж не интерактивен — он привлекает внимание к элементу, к которому прикреплён, а не действует сам.

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

Для текстового статуса объекта («Успешно», «В работе») подойдёт CdsStatus, а у CdsAvatar есть встроенный проп badge для типовых индикаторов на аватаре.

Анатомия ​

Бейдж крепится к элементу из слота default и позиционируется относительно него. Содержимое — число или текст из content, иконка из icon либо разметка из слота badge.

Вариации ​

Содержимое ​

Проп content задаёт содержимое бейджа — чаще всего это счётчик событий. По умолчанию бейдж встаёт в правый верхний угол элемента из слота.

Sandbox Storybook

Проп max ограничивает счётчик: всё, что больше, сворачивается в «99+». Без max значение выводится целиком.

Sandbox Storybook

Кроме числа, content принимает короткий текст — например, пометку нового раздела в меню. Здесь бейдж встроен в строку пропом inline — о нём в разделе про позиционирование.

Sandbox Storybook

Проп icon выводит иконку вместо текста.

Sandbox Storybook

Точка ​

Проп dot сжимает бейдж до точки и скрывает содержимое — остаётся только сигнал «здесь есть новое». Диаметр меняется через dot-size.

Sandbox Storybook

Цвета ​

Проп color принимает любой цветовой алиас дизайн-системы, text-color меняет цвет содержимого. По умолчанию бейдж красный — цвет индикации.

Sandbox Storybook

Позиционирование ​

По умолчанию бейдж позиционируется абсолютно относительно элемента из слота. Проп location выбирает угол.

Sandbox Storybook

Проп floating отодвигает бейдж от контента на 8 пикселей — так он меньше перекрывает содержимое элемента. Для точной подгонки есть offset-x и offset-y.

Sandbox Storybook

Проп inline встраивает бейдж в поток рядом с контентом — как в примере с меню выше. location, floating и offset-* при этом игнорируются.

Видимость ​

Проп model-value показывает и скрывает бейдж. Смена состояния анимируется, анимация настраивается через transition.

Sandbox Storybook

Слоты ​

СлотОписание
defaultЭлемент, к которому крепится бейдж
badgeСодержимое бейджа. Замещает content и icon
Sandbox Storybook

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

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

Центр уведомлений ​

Счётчик на иконке уведомлений: max держит бейдж компактным при любом числе событий, а model-value скрывает его, когда непрочитанного не осталось, — пустой «0» не висит на иконке.

Sandbox Storybook

Меню с обновлениями ​

Счётчики в пунктах меню подсказывают, куда смотреть. Бейдж с inline встаёт в слот append пункта списка, а после открытия раздела model-value убирает его. Откройте «Входящие» — счётчик исчезнет.

Sandbox Storybook

Контакты в сети ​

Точка-индикатор показывает состояние без слов: color="green" — контакт в сети, neutral — нет. inline ставит точку в строку списка, а проп label озвучивает состояние скринридерам.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
colorstring | undefined—Цвет компонента
contentstring | number | undefined—Контент, отображаемый в компоненте.
dotboolean | undefined—Уменьшает размер и скрывает содержимое, отображая компонент в виде точки
dotSizestring | number | undefined—Размер точки
floatingboolean | undefined—Переносит компонент дальше от контента. Это соответствует смещению на 8 пикселей.
heightstring | number | undefined—Высота компонента
iconIconValue | undefined—Иконка, отображаемая в компоненте. Если указано свойство dot, то это свойство будет проигнорировано.
inlineboolean | undefined—Отображать как inline блок вместо абсолютного позиционирования. Свойства location, floating и offset будут проигнорированы.
labelstring | undefined'$cds.badge'Aria-label для компонента. Если не указано, будет использоваться значение по умолчанию.
locationAnchor | null | undefined'top end'Позиционирование элемента относительно его контейнера. Например, "top left", "center", "bottom right" и т.д.
maxstring | number | undefined—Устанавливает максимальное допустимое значение при использовании атрибута content со значением в виде числа. Если число в поле content превышает максимальное значение, к нему добавляется суффикс «+».
maxHeightstring | number | undefined—Максимальная высота компонента
maxWidthstring | number | undefined—Максимальная ширина компонента
minHeightstring | number | undefined—Минимальная высота компонента
minWidthstring | number | undefined—Минимальная ширина компонента
modelValueboolean | undefinedtrueОпределяет, отображается ли компонент или скрыт.
offsetXstring | number | undefined—Сместить по оси X
offsetYstring | number | undefined—Сместить по оси Y
tagstring | JSXComponent<any> | undefined'div'Пользовательский HTML-тег для отображения
textstring | number | undefined—Текст, отображаемый в компоненте.
textColorstring | undefined—Цвет текста компонента
themestring | undefined—Тема компонента
transitionstring | boolean | (TransitionProps & { component?: Component | undefined; }) | null | undefined'fade-transition'Анимация перехода
widthstring | number | undefined—Ширина компонента

Слоты

ИмяТипОписание
badgeanyСлот, предназначенный для размещения информации на бейдже.
defaultanyСлот по умолчанию