Если из тегов нужно собрать переключатель или фильтр с выбором, возьмите CdsTagGroup. Для счётчика или точки-индикатора поверх другого элемента подойдёт CdsBadge, а действие запускайте кнопкой CdsButton — тег только помечает.
Анатомия
Тег состоит из контейнера и зон контента: prepend и append несут иконку или аватар, текст живёт в центре, а кнопка закрытия появляется при closable.
Вариации
Цвета
Свойство color окрашивает тег в один из 11 псевдонимов палитры; без него тег остаётся нейтральным серым. Цвет текста при необходимости переопределяет text-color. Свойство disabled заменяет цвета тега на служебные цвета заблокированного состояния и снимает реакцию на клики.
Размеры
Свойство size — пять размеров от xs до xl. Размер по умолчанию — md.
Форма
Свойство pill полностью скругляет углы — такая форма подчёркивает самостоятельность метки и хорошо смотрится в облаке тегов.
Иконки и аватары
Свойства prepend-icon и append-icon добавляют иконку до и после текста, prepend-avatar и append-avatar — круглый аватар. Размер иконки и аватара следует за размером тега.
Слоты
Слоты заменяют контент из пропсов, когда нужна полная свобода разметки.
| Слот | Описание |
|---|---|
default | Контент тега. Замещает текст из text |
prepend | Контент перед текстом. Замещает prepend-icon / prepend-avatar |
append | Контент после текста. Замещает append-icon / append-avatar |
close | Контент кнопки закрытия. Замещает иконку из close-icon |
filter | Контент индикатора выбора в группе. Замещает иконку из filter-icon |
Тег-ссылка
Передайте href (или to с объектом RouteLocationRaw из vue-router) — и тег отрендерится тегом a: получит курсор, фокус с клавиатуры и переход по Enter, сохранив внешний вид тега.
Закрытие
Свойство closable (или его псевдоним removable) добавляет кнопку закрытия. Клик по ней скрывает тег и эмитит событие click:close, а видимостью можно управлять снаружи через v-model. Иконку кнопки меняет close-icon, доступную подпись — close-label.
Выбор в группе
Внутри CdsTagGroup тег становится переключателем: value задаёт его значение в группе, выбранное состояние помечается классом cds-tag--selected, а событие group:selected сообщает о смене выбора. С filter у выбранного тега появляется индикатор — иконку меняет filter-icon, разметку целиком — слот filter. В слоте default доступны isSelected, toggle и select — на них удобно строить свою разметку тега.
Цвет выбранного тега задаёт active-color: без него выбор красит сама группа брендовым цветом, а color остаётся цветом невыбранного тега.
Рекомендации
Сценарии использования
Выбранные фильтры
Применённые фильтры поиска удобно показать строкой закрываемых тегов: каждый тег убирает свой фильтр по click:close, а соседняя tertiary-кнопка сбрасывает всё сразу.
Статусы записей
В списках и таблицах цветной тег мгновенно показывает состояние записи. Закрепите цвета за статусами: green — успех, lemon — ожидание, red — отказ, neutral — черновик. Компактный size="sm" не спорит с текстом строки.
Добавление меток
Поле ввода и теги вместе дают редактор меток: Enter добавляет новую метку, крестик (closable + click:close) убирает лишнюю. Дубликаты отсекаются до добавления в список.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
activeClass | string | undefined | — | CSS-класс, применяемый к активной (выбранной) ссылке-тегу. |
activeColor | string | undefined | — | Цвет компонента, когда он находится в активном состоянии |
appendAvatar | string | undefined | — | Аватар, отображаемый после (справа от) контента тега. |
appendIcon | IconValue | undefined | — | Иконка, отображаемая после (справа от) контента тега. |
closable | boolean | undefined | — | Добавляет кнопку закрытия, скрывающую тег. |
closeIcon | IconValue | undefined | 'remove' | Иконка кнопки закрытия. |
closeLabel | string | undefined | '$cds.close' | Доступная подпись (aria-label) для кнопки закрытия. |
color | string | undefined | — | Цвет компонента |
content | string | number | undefined | — | Контент, отображаемый в компоненте. |
disabled | boolean | null | undefined | null | Заблокированное состояние |
draggable | boolean | undefined | — | Делает тег перетаскиваемым (нативный drag-and-drop). |
exact | boolean | undefined | — | Если true, активное состояние будет применяться только при точном совпадении маршрута |
filter | boolean | undefined | — | Отображает иконку-индикатор выбора при использовании тега в группе (CdsTagGroup). |
filterIcon | IconValue | undefined | 'check' | Иконка индикатора выбора (актуально вместе с filter). |
href | string | undefined | — | Атрибут href для ссылки. Если указан, компонент будет вести себя как обычная ссылка |
label | boolean | undefined | — | Применяет стиль «label» с уменьшенным скруглением углов. |
link | boolean | undefined | — | Назначает тегу стили и поведение ссылки. |
modelValue | boolean | undefined | true | Видимость тега (v-model). При false тег не отображается. |
pill | boolean | undefined | — | Делает углы тега полностью скруглёнными. |
prependAvatar | string | undefined | — | Аватар, отображаемый перед (слева от) контентом тега. |
prependIcon | IconValue | undefined | — | Иконка, отображаемая перед (слева от) контентом тега. |
removable | boolean | undefined | — | Добавляет кнопку удаления (псевдоним closable). |
replace | boolean | undefined | — | Если true, навигация по маршруту будет заменять текущую запись в истории вместо добавления новой |
selectedClass | string | undefined | — | CSS класс для выбранного состояния |
size | number | "xs" | "sm" | "md" | "lg" | "xl" | undefined | 'md' | Размер компонента |
tag | string | JSXComponent<any> | undefined | 'span' | Пользовательский HTML-тег для отображения |
text | string | number | undefined | — | Текст, отображаемый в компоненте. |
textColor | string | undefined | — | Цвет текста компонента |
theme | string | undefined | — | Тема компонента |
to | LinkTo | undefined | — | Маршрут назначения или объект для RouterLink. Если указан, компонент будет вести себя как RouterLink |
value | any | — | Значение компонента в группе |
События
| Имя | Тип | Описание |
|---|---|---|
click | [e: MouseEvent | KeyboardEvent] | Клик по тегу (мышью или с клавиатуры). |
click:close | [e: MouseEvent] | Клик по кнопке закрытия тега. |
group:selected | [value: { value: boolean; }] | Изменение состояния выбора тега в составе группы. |
update:modelValue | [value: boolean] | Изменение видимости тега (v-model). |
Слоты
| Имя | Тип | Описание |
|---|---|---|
append | any | Контент после основного содержимого (на месте append-иконки/аватара). |
close | any | Кастомный контент кнопки закрытия. |
default | { isSelected: boolean | undefined; selectedClass: boolean | (string | undefined)[] | undefined; select: ((value: boolean) => void) | undefined; toggle: (() => void) | undefined; value: unknown; disabled: boolean; } | Контент тега по умолчанию. В аргументах слота доступно состояние группы (выбор, переключение). |
filter | any | Кастомный контент индикатора выбора (актуально вместе с filter). |
label | any | Контент метки тега. |
prepend | any | Контент перед основным содержимым (на месте prepend-иконки/аватара). |