Skip to content

CdsTag

Тег — компактная метка рядом с объектом: статус заявки, категория товара, выбранный фильтр. Тег окрашивается в цвета палитры, несёт иконку или аватар, умеет закрываться крестиком и работать ссылкой.

Storybook GitLab Figma
Покрытие тестами: 97% — хорошее покрытие
API в спеках
41 / 41 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
67 юнит · 0 браузерных
Известные баги
5 зафиксированы тестом it.fails
Покрытие кода
96.5% строк · 97.4% ветвей замер v4.0.0-alpha.13
A11y (axe)
2 рекомендаций в 13 историях замер v4.0.0-alpha.11

Если из тегов нужно собрать переключатель или фильтр с выбором, возьмите CdsTagGroup. Для счётчика или точки-индикатора поверх другого элемента подойдёт CdsBadge, а действие запускайте кнопкой CdsButton — тег только помечает.

Анатомия ​

Тег состоит из контейнера и зон контента: prepend и append несут иконку или аватар, текст живёт в центре, а кнопка закрытия появляется при closable.

Вариации ​

Цвета ​

Свойство color окрашивает тег в один из 11 псевдонимов палитры; без него тег остаётся нейтральным серым. Цвет текста при необходимости переопределяет text-color. Свойство disabled заменяет цвета тега на служебные цвета заблокированного состояния и снимает реакцию на клики.

Sandbox Storybook

Размеры ​

Свойство size — пять размеров от xs до xl. Размер по умолчанию — md.

Sandbox Storybook

Форма ​

Свойство pill полностью скругляет углы — такая форма подчёркивает самостоятельность метки и хорошо смотрится в облаке тегов.

Sandbox Storybook

Иконки и аватары ​

Свойства prepend-icon и append-icon добавляют иконку до и после текста, prepend-avatar и append-avatar — круглый аватар. Размер иконки и аватара следует за размером тега.

Sandbox Storybook

Слоты ​

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

СлотОписание
defaultКонтент тега. Замещает текст из text
prependКонтент перед текстом. Замещает prepend-icon / prepend-avatar
appendКонтент после текста. Замещает append-icon / append-avatar
closeКонтент кнопки закрытия. Замещает иконку из close-icon
filterКонтент индикатора выбора в группе. Замещает иконку из filter-icon
Sandbox Storybook

Тег-ссылка ​

Передайте href (или to с объектом RouteLocationRaw из vue-router) — и тег отрендерится тегом a: получит курсор, фокус с клавиатуры и переход по Enter, сохранив внешний вид тега.

Sandbox Storybook

Закрытие ​

Свойство closable (или его псевдоним removable) добавляет кнопку закрытия. Клик по ней скрывает тег и эмитит событие click:close, а видимостью можно управлять снаружи через v-model. Иконку кнопки меняет close-icon, доступную подпись — close-label.

Sandbox Storybook

Выбор в группе ​

Внутри CdsTagGroup тег становится переключателем: value задаёт его значение в группе, выбранное состояние помечается классом cds-tag--selected, а событие group:selected сообщает о смене выбора. С filter у выбранного тега появляется индикатор — иконку меняет filter-icon, разметку целиком — слот filter. В слоте default доступны isSelected, toggle и select — на них удобно строить свою разметку тега.

Цвет выбранного тега задаёт active-color: без него выбор красит сама группа брендовым цветом, а color остаётся цветом невыбранного тега.

Sandbox Storybook

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

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

Выбранные фильтры ​

Применённые фильтры поиска удобно показать строкой закрываемых тегов: каждый тег убирает свой фильтр по click:close, а соседняя tertiary-кнопка сбрасывает всё сразу.

Sandbox Storybook

Статусы записей ​

В списках и таблицах цветной тег мгновенно показывает состояние записи. Закрепите цвета за статусами: green — успех, lemon — ожидание, red — отказ, neutral — черновик. Компактный size="sm" не спорит с текстом строки.

Sandbox Storybook

Добавление меток ​

Поле ввода и теги вместе дают редактор меток: Enter добавляет новую метку, крестик (closable + click:close) убирает лишнюю. Дубликаты отсекаются до добавления в список.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
activeClassstring | undefined—CSS-класс, применяемый к активной (выбранной) ссылке-тегу.
activeColorstring | undefined—Цвет компонента, когда он находится в активном состоянии
appendAvatarstring | undefined—Аватар, отображаемый после (справа от) контента тега.
appendIconIconValue | undefined—Иконка, отображаемая после (справа от) контента тега.
closableboolean | undefined—Добавляет кнопку закрытия, скрывающую тег.
closeIconIconValue | undefined'remove'Иконка кнопки закрытия.
closeLabelstring | undefined'$cds.close'Доступная подпись (aria-label) для кнопки закрытия.
colorstring | undefined—Цвет компонента
contentstring | number | undefined—Контент, отображаемый в компоненте.
disabledboolean | null | undefinednullЗаблокированное состояние
draggableboolean | undefined—Делает тег перетаскиваемым (нативный drag-and-drop).
exactboolean | undefined—Если true, активное состояние будет применяться только при точном совпадении маршрута
filterboolean | undefined—Отображает иконку-индикатор выбора при использовании тега в группе (CdsTagGroup).
filterIconIconValue | undefined'check'Иконка индикатора выбора (актуально вместе с filter).
hrefstring | undefined—Атрибут href для ссылки. Если указан, компонент будет вести себя как обычная ссылка
labelboolean | undefined—Применяет стиль «label» с уменьшенным скруглением углов.
linkboolean | undefined—Назначает тегу стили и поведение ссылки.
modelValueboolean | undefinedtrueВидимость тега (v-model). При false тег не отображается.
pillboolean | undefined—Делает углы тега полностью скруглёнными.
prependAvatarstring | undefined—Аватар, отображаемый перед (слева от) контентом тега.
prependIconIconValue | undefined—Иконка, отображаемая перед (слева от) контентом тега.
removableboolean | undefined—Добавляет кнопку удаления (псевдоним closable).
replaceboolean | undefined—Если true, навигация по маршруту будет заменять текущую запись в истории вместо добавления новой
selectedClassstring | undefined—CSS класс для выбранного состояния
sizenumber | "xs" | "sm" | "md" | "lg" | "xl" | undefined'md'Размер компонента
tagstring | JSXComponent<any> | undefined'span'Пользовательский HTML-тег для отображения
textstring | number | undefined—Текст, отображаемый в компоненте.
textColorstring | undefined—Цвет текста компонента
themestring | undefined—Тема компонента
toLinkTo | undefined—Маршрут назначения или объект для RouterLink. Если указан, компонент будет вести себя как RouterLink
valueany—Значение компонента в группе

События

ИмяТипОписание
click[e: MouseEvent | KeyboardEvent]Клик по тегу (мышью или с клавиатуры).
click:close[e: MouseEvent]Клик по кнопке закрытия тега.
group:selected[value: { value: boolean; }]Изменение состояния выбора тега в составе группы.
update:modelValue[value: boolean]Изменение видимости тега (v-model).

Слоты

ИмяТипОписание
appendanyКонтент после основного содержимого (на месте append-иконки/аватара).
closeanyКастомный контент кнопки закрытия.
default{ isSelected: boolean | undefined; selectedClass: boolean | (string | undefined)[] | undefined; select: ((value: boolean) => void) | undefined; toggle: (() => void) | undefined; value: unknown; disabled: boolean; }Контент тега по умолчанию. В аргументах слота доступно состояние группы (выбор, переключение).
filteranyКастомный контент индикатора выбора (актуально вместе с filter).
labelanyКонтент метки тега.
prependanyКонтент перед основным содержимым (на месте prepend-иконки/аватара).