Для текстового статуса объекта («Успешно», «В работе») подойдёт CdsStatus, а у CdsAvatar есть встроенный проп
badgeдля типовых индикаторов на аватаре.
Анатомия
Бейдж крепится к элементу из слота default и позиционируется относительно него. Содержимое — число или текст из content, иконка из icon либо разметка из слота badge.
Вариации
Содержимое
Проп content задаёт содержимое бейджа — чаще всего это счётчик событий. По умолчанию бейдж встаёт в правый верхний угол элемента из слота.
Проп max ограничивает счётчик: всё, что больше, сворачивается в «99+». Без max значение выводится целиком.
Кроме числа, content принимает короткий текст — например, пометку нового раздела в меню. Здесь бейдж встроен в строку пропом inline — о нём в разделе про позиционирование.
Проп icon выводит иконку вместо текста.
Точка
Проп dot сжимает бейдж до точки и скрывает содержимое — остаётся только сигнал «здесь есть новое». Диаметр меняется через dot-size.
Цвета
Проп color принимает любой цветовой алиас дизайн-системы, text-color меняет цвет содержимого. По умолчанию бейдж красный — цвет индикации.
Позиционирование
По умолчанию бейдж позиционируется абсолютно относительно элемента из слота. Проп location выбирает угол.
Проп floating отодвигает бейдж от контента на 8 пикселей — так он меньше перекрывает содержимое элемента. Для точной подгонки есть offset-x и offset-y.
Проп inline встраивает бейдж в поток рядом с контентом — как в примере с меню выше. location, floating и offset-* при этом игнорируются.
Видимость
Проп model-value показывает и скрывает бейдж. Смена состояния анимируется, анимация настраивается через transition.
Слоты
| Слот | Описание |
|---|---|
default | Элемент, к которому крепится бейдж |
badge | Содержимое бейджа. Замещает content и icon |
Рекомендации
Сценарии использования
Центр уведомлений
Счётчик на иконке уведомлений: max держит бейдж компактным при любом числе событий, а model-value скрывает его, когда непрочитанного не осталось, — пустой «0» не висит на иконке.
Меню с обновлениями
Счётчики в пунктах меню подсказывают, куда смотреть. Бейдж с inline встаёт в слот append пункта списка, а после открытия раздела model-value убирает его. Откройте «Входящие» — счётчик исчезнет.
Контакты в сети
Точка-индикатор показывает состояние без слов: color="green" — контакт в сети, neutral — нет. inline ставит точку в строку списка, а проп label озвучивает состояние скринридерам.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
color | string | undefined | — | Цвет компонента |
content | string | number | undefined | — | Контент, отображаемый в компоненте. |
dot | boolean | undefined | — | Уменьшает размер и скрывает содержимое, отображая компонент в виде точки |
dotSize | string | number | undefined | — | Размер точки |
floating | boolean | undefined | — | Переносит компонент дальше от контента. Это соответствует смещению на 8 пикселей. |
height | string | number | undefined | — | Высота компонента |
icon | IconValue | undefined | — | Иконка, отображаемая в компоненте. Если указано свойство dot, то это свойство будет проигнорировано. |
inline | boolean | undefined | — | Отображать как inline блок вместо абсолютного позиционирования. Свойства location, floating и offset будут проигнорированы. |
label | string | undefined | '$cds.badge' | Aria-label для компонента. Если не указано, будет использоваться значение по умолчанию. |
location | Anchor | null | undefined | 'top end' | Позиционирование элемента относительно его контейнера. Например, "top left", "center", "bottom right" и т.д. |
max | string | number | undefined | — | Устанавливает максимальное допустимое значение при использовании атрибута content со значением в виде числа. Если число в поле content превышает максимальное значение, к нему добавляется суффикс «+». |
maxHeight | string | number | undefined | — | Максимальная высота компонента |
maxWidth | string | number | undefined | — | Максимальная ширина компонента |
minHeight | string | number | undefined | — | Минимальная высота компонента |
minWidth | string | number | undefined | — | Минимальная ширина компонента |
modelValue | boolean | undefined | true | Определяет, отображается ли компонент или скрыт. |
offsetX | string | number | undefined | — | Сместить по оси X |
offsetY | string | number | undefined | — | Сместить по оси Y |
tag | string | JSXComponent<any> | undefined | 'div' | Пользовательский HTML-тег для отображения |
text | string | number | undefined | — | Текст, отображаемый в компоненте. |
textColor | string | undefined | — | Цвет текста компонента |
theme | string | undefined | — | Тема компонента |
transition | string | boolean | (TransitionProps & { component?: Component | undefined; }) | null | undefined | 'fade-transition' | Анимация перехода |
width | string | number | undefined | — | Ширина компонента |
Слоты
| Имя | Тип | Описание |
|---|---|---|
badge | any | Слот, предназначенный для размещения информации на бейдже. |
default | any | Слот по умолчанию |