Skip to content

CdsToast

New in v4.0

Тост — всплывающее уведомление о результате действия: изменения сохранены, файл загружен, запрос не прошёл. Он появляется поверх страницы, не прерывает работу и закрывается сам по истечении timeout.

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

Для потока событий, где уведомления приходят одно за другим, используйте CdsToastQueue. Сообщение, которое должно остаться на странице, оформляйте компонентом CdsNotification, а вопрос, требующий решения пользователя, — модальным окном CdsModal.

Анатомия ​

Тост состоит из контейнера и трёх зон: prepend с иконкой статуса, аватаром или индикатором загрузки, контента с заголовком и текстом и зоны действий. Свойство timer добавляет шкалу оставшегося времени.

Вариации ​

Управление видимостью ​

Показывайте тост через v-model или слот activator — во втором случае компонент сам управляет своим состоянием. Тост закрывается автоматически через timeout (5000 мс по умолчанию); наведение курсора или фокус внутри тоста приостанавливают отсчёт, а на тач-экранах тост можно смахнуть.

Sandbox Storybook

Статус ​

Свойство status подбирает цвет и иконку по смыслу сообщения: info, success, warning, danger, progress. Иконку можно заменить свойством icon или скрыть значением false.

Sandbox Storybook

Таймер ​

Свойство timeout задаёт время до автозакрытия в миллисекундах, -1 отключает его. Шкалу оставшегося времени включает свойство timer (true/top — сверху, bottom — снизу), reverse-timer разворачивает её направление, а timer-color меняет цвет.

Sandbox Storybook

Позиция ​

Свойство location ставит тост в одну из шести позиций: сторона (top, bottom) плюс выравнивание (left, center, right). Поверх контента страницы тост выводит CdsOverlay.

Sandbox Storybook

Контент и действия ​

Заголовок и текст задаются свойствами title и text, аватар перед контентом — prepend-avatar, а loading заменяет иконку индикатором загрузки. Слот actions добавляет кнопки: внутри него они по умолчанию получают variant="solid", color="inverse" и size="sm". Вертикальная раскладка (vertical) переносит действия под контент.

Sandbox Storybook

Слоты ​

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

СлотОписание
activatorЭлемент, который открывает тост
headerШапка на всю ширину тоста
prependКонтент перед текстом. Замещает иконку, аватар и индикатор загрузки
titleЗаголовок. Замещает текст из title
textТекст. Замещает текст из text
defaultОсновной контент после текста
actionsДействия тоста

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

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

Отмена действия ​

Тост подтверждает удаление и даёт время передумать: кнопка «Отменить» в слоте actions возвращает документ, а шкала timer показывает, сколько времени осталось на решение.

Sandbox Storybook

Фоновая задача ​

Один тост сопровождает задачу от старта до результата. Пока идёт обработка, loading показывает индикатор, а timeout: -1 не даёт уведомлению исчезнуть; по завершении тот же тост переключается на status="success" и закрывается сам.

Sandbox Storybook

Ошибка с повтором ​

Ошибку не скрывайте автоматически: timeout: -1 держит тост, пока пользователь не отреагирует, а кнопка «Повторить» в actions запускает запрос заново.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
absoluteboolean | undefined—Указывает, что элемент должен быть позиционирован абсолютно, а не фиксированно. Это может быть полезно для оверлеев, которые должны быть ограничены определенной областью, например, внутри контейнера с position: relative.
activator(string & {}) | Element | "parent" | ComponentPublicInstance | undefined—Элемент, который будет активировать компонент
activatorPropsRecord<string, any> | undefined{}Свойства для элемента активатора
attachstring | boolean | Element | undefined—Указывает, в какой элемент DOM следует переместить содержимое overlay. Может быть прямой ссылкой на элемент, строкой querySelector или значением true для отключения перемещения. По умолчанию используется элемент body. Как правило, не рекомендуется изменять это свойство, за исключением крайних случаев: алгоритм позиционирования по умолчанию должен справляться с большинством сценариев лучше, чем это возможно без перемещения, и может возникнуть непредвиденное поведение, если меню окажется дочерним элементом своего активатора.
bgColorstring | undefined—Цвет фона компонента
closeDelaystring | number | undefined—Время ожидания в миллисекундах перед закрытием компонента. Работает только с параметром open-on-hover.
closeOnBackboolean | undefinedfalseЗакрывает содержимое оверлея при нажатии кнопки «Назад» в браузере или вызове $router.back(), отменяя исходную навигацию. persistent оверлеи отменяют навигацию и анимируются так, как будто по ним щелкнули за пределами оверлея, вместо того чтобы закрываться.
closeOnContentClickboolean | undefined—Скрыть компонент по клику на контент
collapsed{ width: number; height: number; } | undefined—Свёрнутое состояние тоста в очереди: размеры, до которых сворачивается тост. Управляется компонентом CdsToastQueue.
containedboolean | undefined—Ограничивает размер компонента и сетки в соответствии с его смещенным родительским элементом. Подразумевает использование свойств absolute и attach. (Примечание: родительский элемент должен иметь свойство position: relative.)
contentstring | number | undefined—Контент, отображаемый в компоненте.
contentClassany—Применяет пользовательский класс к отдельному элементу. Это удобно, поскольку содержимое перемещается в начало компонента cds-app (если не указан параметр attach) и не может быть выделено с помощью классов, переданных непосредственно в компонент.
contentPropsany—Применяет кастомные свойства (props) к перемещаемому контенту
disabledboolean | null | undefinednullЗаблокированное состояние
eagerboolean | undefined—Принудительно рендерит содержимое компонента при его использовании. Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO.
heightstring | number | undefined—Высота компонента
iconfalse | IconValue | undefinednullИконка перед контентом. По умолчанию берётся из status; false скрывает иконку.
loadingboolean | undefined—Отображает индикатор загрузки вместо иконки.
locationAnchor | null | undefined'top center'Позиционирование элемента относительно его контейнера. Например, "top left", "center", "bottom right" и т.д.
locationStrategy"static" | "connected" | LocationStrategyFunction | undefined'static'Определяет способ позиционирования содержимого оверлея. По умолчанию используется значение static, при котором содержимое центрируется в контейнере. Используйте connected для привязки к элементу-активатору.
maxHeightstring | number | undefined—Максимальная высота компонента
maxWidthstring | number | undefined—Максимальная ширина компонента
minHeightstring | number | undefined—Минимальная высота компонента
minWidthstring | number | undefined—Минимальная ширина компонента
modelValueboolean | undefined—Значение компонента v-model. Если компонент поддерживает свойство multiple, по умолчанию используется пустой массив.
opacitystring | number | undefined—Прозрачность элемента «scrim». Применяется только в том случае, если св-во scrim=true.
openDelaystring | number | undefined—Время ожидания в миллисекундах перед открытием компонента. Работает только с параметром open-on-hover.
openOnClickboolean | undefined—Показать компонент по клику на активатор
openOnFocusboolean | undefined—Показать компонент по фокусу на активатор
openOnHoverboolean | undefined—Показать компонент по наведению на активатор
originAnchor | "auto" | "overlap" | undefined'auto'Устанавливает точку привязки для содержимого наложения, которая выравнивается по точке привязки «location» на объекте-цели. При значении «auto» используется противоположная сторона точки «location». При значении «overlap» используется та же точка привязки, в результате чего наложение перекрывает объект-цель. Также задает значение CSS-свойства transform-origin для transitions enter/leave.
position"absolute" | "static" | "fixed" | "relative" | "sticky" | undefined—CSS-позиционирование компонента — значение свойства position
prependAvatarstring | undefined—Источник изображения аватара перед контентом. Имеет приоритет над иконкой.
queueGapnumber | undefined—Отступ между тостами в очереди в пикселях. Управляется компонентом CdsToastQueue.
queueIndexnumber | undefined—Индекс тоста в очереди. Управляется компонентом CdsToastQueue.
reverseTimerboolean | undefined—Обратное направление шкалы таймера: заполняется, а не убывает.
status"progress" | "danger" | "success" | "warning" | "info" | undefined'info'Семантический статус — определяет цвет и дефолтную иконку.
target(string & {}) | Element | "parent" | ComponentPublicInstance | "cursor" | [x: number, y: number] | undefined—Если для параметра locationStrategy задано значение «connected», необходимо указать элемент или массив координат x, y, относительно которых должен располагаться оверлей. По умолчанию в качестве такого элемента используется элемент-активатор.
textstring | number | undefined—Текст, отображаемый в компоненте.
textColorstring | undefined—Цвет текста компонента
themestring | undefined—Тема компонента
timeoutstring | number | undefined5000Время в миллисекундах до автоматического скрытия тоста. Значение -1 отключает автозакрытие.
timerboolean | "top" | "bottom" | undefinedfalseОтображает шкалу таймера до автозакрытия: true/top — сверху, bottom — снизу.
timerColorstring | undefined—Цвет шкалы таймера.
titlestring | undefined—Заголовок тоста.
transitionstring | boolean | (TransitionProps & { component?: Component | undefined; }) | null | undefined'cds-toast-transition'Анимация перехода
verticalboolean | undefined—Вертикальная раскладка: действия переносятся под контент.
widthstring | number | undefined—Ширина компонента
zIndexstring | number | undefined2000Значение z-index для компонента.

События

ИмяТипОписание
afterEnter[]Событие завершения анимации появления.
afterLeave[]Событие завершения анимации скрытия.
update:modelValue[value: boolean]Событие изменения состояния видимости тоста.

Слоты

ИмяТипОписание
actions{ isActive: Ref<boolean, boolean>; }Слот действий тоста.
activator{ isActive: boolean; props: Record<string, any>; }Слот для элемента, который будет выступать в роли активатора тоста.
defaultanyОсновной контент тоста.
headeranyСлот шапки тоста на всю ширину.
prependanyСлот перед контентом (иконка, аватар или индикатор загрузки).
textanyСлот текста.
titleanyСлот заголовка.

Exposed

ИмяТипОписание
activatorElHTMLElement | undefinedDOM-элемент активатора.
activatorRefTemplateRefTemplate ref для назначения активатора вручную.
animateClick() => voidЗапускает bounce-анимацию контента — как при клике мимо persistent-оверлея.
contentElHTMLElement | undefinedDOM-элемент контента оверлея.
globalTopbooleanЯвляется ли оверлей верхним в глобальном стеке открытых оверлеев.
rootElHTMLElement | undefinedКорневой DOM-элемент оверлея.
scrimElHTMLElement | undefinedDOM-элемент подложки (scrim), затемняющей страницу.
targetElHTMLElement | undefinedDOM-элемент цели позиционирования.
targetRefTemplateRefTemplate ref для назначения цели позиционирования вручную.
updateLocation((e: Event) => void) | undefinedПересчитывает позицию контента относительно цели.