Skip to content

CdsDrawer

Боковая панель приложения: разделы навигации слева, контекст записи или фильтры справа. Внутри CdsLayout панель занимает место в макете и сдвигает контент, а во временном режиме выезжает поверх него.

Storybook GitLab Figma
Покрытие тестами: 93% — хорошее покрытие
API в спеках
33 / 33 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
76 юнит · 3 браузерных
Известные баги
3 зафиксированы тестом it.fails
Покрытие кода
93.1% строк · 82.1% ветвей замер v4.0.0-alpha.13
A11y (axe)
14 рекомендаций в 14 историях замер v4.0.0-alpha.11

Для списка разделов внутри панели возьмите CdsList, для навигации по подразделам одной страницы — CdsTabs. Панель — часть каркаса CdsLayout, но, в отличие от остальных частей, работает и отдельно: со свойством fixed она прижимается к окну без макета.

Анатомия ​

Панель состоит из прокручиваемого списка навигации и двух закреплённых зон: prepend сверху — для логотипа или профиля, append снизу — для выхода и служебных ссылок. Свойство border рисует границы между зонами.

Вариации ​

Постоянная панель ​

Свойство permanent держит панель на экране всегда. Без него панель прячется на экранах уже 1056 px — контенту остаётся вся ширина, а навигацию открывают по кнопке.

Sandbox Storybook

Скрываемая панель ​

Обычная панель подчиняется v-model на любой ширине экрана. На широком она стоит в макете, а закрытая отдаёт своё место контенту. На узком экране та же панель выезжает поверх контента. При переходе через 1056 px панель сама закрывается и открывается обратно; disable-resize-watcher отключает эту синхронизацию. Свойство width задаёт ширину в пикселях, и макет сдвигает контент ровно на неё.

Sandbox Storybook

Временная панель ​

Свойство temporary превращает панель в выезжающую: она не занимает места в макете, открывается через v-model и закрывается кликом по затемнению или клавишей Esc. События @opened и @closed сообщают о смене состояния.

Sandbox Storybook

На сенсорных экранах выезжающую панель можно вытянуть свайпом от края экрана и убрать свайпом обратно. Свойство touchless отключает жесты.

Без затемнения ​

Свойство scrim управляет затемнением под выезжающей панелью. false убирает его: контент под панелью остаётся кликабельным, но закрыть панель кликом мимо неё уже нельзя, поэтому дайте для этого свою кнопку. Строка вместо true задаёт цвет затемнения — передавайте его с прозрачностью, например rgb(0 0 0 / 0.3), иначе контент под панелью скроется целиком.

Sandbox Storybook

Защита от случайного закрытия ​

Свойство persistent запрещает закрывать панель кликом по затемнению и клавишей Esc: закрыть её можно только через v-model. Подходит для панели с формой, где случайный клик мимо стёр бы ввод.

Sandbox Storybook

Свёрнутая панель ​

Свойство minified сжимает панель до иконок и отдаёт ширину контенту. При наведении мыши панель разворачивается поверх страницы, не сдвигая её, поэтому подписи разделов остаются доступны.

Sandbox Storybook

Положение ​

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

Sandbox Storybook

Цвет ​

Свойство bg-color красит фон панели алиасом палитры, color — текст и иконки внутри. Тёмная панель рядом со светлым контентом подчёркивает границу рабочей области.

Sandbox Storybook

Фоновое изображение ​

Свойство image кладёт картинку по ссылке под содержимое панели, слот image — свою разметку фона. Текст поверх фона красьте свойством color, чтобы он оставался читаемым.

Sandbox Storybook

Слоты ​

СлотОписание
prependЗакреплённая зона сверху: логотип, профиль
defaultЭлементы навигации
appendЗакреплённая зона снизу: выход, служебные ссылки
imageФон под содержимым панели

Свойство fixed-slots оставляет prepend и append на месте и отдаёт скролл только списку разделов — длинная навигация не уводит кнопку выхода за край.

Sandbox Storybook

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

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

Навигация приложения ​

Логотип в prepend, разделы в CdsList с active у текущего, кнопка выхода в append. Схема макета lhh lpr fff отдаёт панели верхний левый угол, поэтому она начинается от самого верха и читается как основа приложения.

Sandbox Storybook

Панель уведомлений ​

Правая панель с temporary открывается по иконке в шапке, показывает список и закрывается кликом по затемнению. Места в макете она не занимает, поэтому основной контент не перестраивается при открытии.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
bgColorstring | undefined—Цвет фона компонента
borderboolean | undefinedfalseДобавляет границы между секциями (prepend/append).
captureFocusboolean | undefinedtrueВозвращает фокус внутрь контента, если он ушёл за его пределы — например, по Tab с конца страницы. Клик мышью фокус не перехватывает.
colorstring | undefined—Цвет компонента
disableResizeWatcherboolean | undefinedfalseНе синхронизировать v-model с шириной экрана. По умолчанию обычная панель закрывается, когда экран сужается и она становится выезжающей, и открывается обратно на широком.
fixedboolean | undefinedfalseПрименяет position: fixed.
fixedSlotsboolean | undefinedfalseИспользовать внутренний скролл для секции контента.
heightstring | number | undefined—Высота компонента
imagestring | undefined—Фоновое изображение панели (URL). Для своей разметки фона есть слот image.
maxHeightstring | number | undefined—Максимальная высота компонента
maxWidthstring | number | undefined—Максимальная ширина компонента
minHeightstring | number | undefined—Минимальная высота компонента
minifiedboolean | undefinedfalseСвёрнутый вид (только иконки) до наведения мыши.
minWidthstring | number | undefined—Минимальная ширина компонента
modelValueboolean | null | undefinednullПоказать/скрыть панель (v-model). Без него обычная панель открыта на широком экране, а выезжающая закрыта.
permanentboolean | undefinedfalseПостоянно видима, независимо от размера экрана.
persistentboolean | undefinedfalseКлик по затемнению и клавиша Esc не закрывают панель — только v-model. Для панелей с формой, где случайное закрытие теряет ввод.
retainFocusboolean | undefinedtrueЗамыкает Tab-навигацию внутри контента: с последнего фокусируемого элемента фокус переходит на первый и наоборот.
rightboolean | undefinedfalseПозиционирование справа.
scrimstring | boolean | undefinedtrueЗатемнение под панелью, когда она накрывает контент. false убирает его целиком — контент остаётся кликабельным, а панель закрывается только клавишей Esc или через v-model; строка задаёт цвет.
tagstring | JSXComponent<any> | undefined'aside'Пользовательский HTML-тег для отображения
temporaryboolean | undefinedfalseВременная панель: выезжает поверх контента на любой ширине экрана, открывается через v-model и закрывается по оверлею. На узком экране так ведёт себя любая непостоянная панель.
themestring | undefined—Тема компонента
touchlessboolean | undefinedfalseОтключает жесты: выезжающая панель не открывается свайпом от края экрана и не закрывается свайпом.
widthstring | number | undefined240Ширина панели, px. Уходит и в макет: контент сдвигается ровно на неё.

События

ИмяТипОписание
closed[value: boolean]Панель закрылась.
opened[value: boolean]Панель открылась.
update:modelValue[value: boolean]Изменение v-model.

Слоты

ИмяТипОписание
appendanyКонтент после навигации.
defaultanyЭлементы навигации (CdsList).
image{ image: string | undefined; }Свой фон панели вместо CdsImage из пропа image; растягивается под контентом.
prependanyКонтент перед навигацией.

Exposed

ИмяТипОписание
drawerRefHTMLElement | undefinedСсылка на корневой DOM-элемент панели.