Сайдпанель — это окно, которое выезжает из-за границы экрана и располагается поверх основного контента страницы.
Сайдпанель похожа на модальное окно. Она хорошо подходит, когда нужно показать большое количество данных.
По умолчанию сайдпанель показывается справа, но в зависимости от контекста может показываться и слева тоже.
Сайдпанель при появлении выезжает из-за границы экрана, затемняя остальную часть экрана (это позволяет понять, что действия на затемненной части недоступны). При закрытии (а также при нажатии на затемнение) заезжает обратно.
Сайдпанель закрывается только кликом левой кнопкой мыши: правая и средняя вызывают контекстное меню браузера или его собственные действия и панель не трогают. Модальное окно ведёт себя так же.
Параметр disableClose в KbqSidepanelConfig запрещает закрытие сайдпанели по клику на подложку или нажатию Escape. Это полезно, когда пользователь должен явно подтвердить или закрыть сайдпанель действием внутри неё, например, чтобы не потерять несохранённые изменения.
Сайдпанель при появлении выезжает из-за границы экрана, при этом основной экран не затемняется и со всеми элементами на нем можно взаимодействовать.
Из сайдпанели можно открыть другую сайдпанель. Немодальные сайдпанели накладываются друг на друга со сдвигом. Вне зависимости от того, сколько сайдпанелей открыто, показывается только один сдвиг, чтобы не создавать визуальный шум.
Использовать этот режим нужно тогда, когда вы хотите сделать переходы внутри сайдпанели.
Клик на вертикальную область, оставшуюся от нижней панели, закрывает одну верхнюю.
| Модальный | Немодальный |
|---|---|
| Лучше не использовать для просмотра | Лучше использовать для просмотра |
| Для редактирования используется как обычное модальное окно | Используется только для редактирования составных частей большого объекта, без явного сохранения этих частей |
| Кнопки всегда должны быть | Кнопки могут быть, а могут не быть |
При открытой модальной сайдпанели фокус перемещается только по элементам внутри окна, включая крестик и кнопки в футере, и не выходит за его пределы. Немодальная сайдпанель оставляет страницу за собой интерактивной и поэтому фокус не удерживает; если ловушка фокуса нужна и в немодальном режиме, задайте trapFocus: true в KbqSidepanelConfig.
Когда открывается сайдпанель, фокус перемещается к элементу внутри сайдпанели. Расположение фокуса зависит от характера и размера содержимого:
tabindex=-1 и установить фокус на нем.Когда сайдпанель закрывается, по умолчанию фокус возвращается на элемент, который ее вызвал (хотя маловероятно, что пользователь захочет сразу же открыть ту же сайдпанель). Если триггерный элемент больше не существует, то фокус возвращается на другой элемент, подходящий логике взаимодействия.
В некоторых ситуациях фокус может специально возвращаться на другой элемент, не тот, который изначально открыл сайдпанель. Например, если задача, выполненная в сайдпанели, напрямую связана с последующим этапом рабочего процесса. Предположим, в таблице есть панель инструментов с кнопкой «Добавить строки». Кнопка открывает сайдпанель, где запрашиваются количество и формат новых строк. После закрытия сайдпанели фокус помещается в первую ячейку первой новой строки.
Клавиша | Действие | Встроено |
|---|---|---|
| Esc | Закрыть сайдпанель: 1. Если в сайдпанели не было изменения данных 2. Если у элемента в фокусе нет собственного обработчика этой клавиши | Да |
| Ctrl + ↵ | Выполняется основное действие сайдпанели | Нет |
| ↵ | Отправка формы по нажатию Enter в любом текстовом инпуте | Нет |
Компонент сам обрабатывает только Esc. Остальные две строки — рекомендация для содержимого сайдпанели: повесьте эти сочетания на свою форму или кнопки в футере.
Открытая сайдпанель — это position: fixed с постоянным transform (именно он и обеспечивает выезд), поэтому она становится содержащим блоком для всех потомков с position: fixed. Все, что внутри панели ожидает привязки к границам вьюпорта, привяжется к самой панели. Для декоративных элементов внутри сайдпанели используйте position: absolute или position: sticky, а настоящие оверлеи выводите через контейнер оверлеев CDK.
Сайдпанель может запомнить, была ли она открыта, и вернуться после перезагрузки страницы. Чтобы это включить, передайте stateSavingKey в KbqSidepanelConfig; без ключа не сохраняется ничего.
Сайдпанель не восстановит себя сама: она существует, только пока открыта. KbqSidepanelService хранит флаг, а открывает панель заново приложение:
private readonly sidepanel = inject(KbqSidepanelService); constructor() { afterNextRender(() => { if (this.sidepanel.wasOpen('filters')) this.openFilters(); }); } protected openFilters(): void { this.sidepanel.open(this.filters(), { stateSavingKey: 'filters', hasBackdrop: false }); }
Записывается закрытие панели по её собственному поводу — крестиком, кликом по подложке, по Escape или через KbqSidepanelRef.close(). closeAll() и уничтожение сервиса флаг не трогают, поэтому открытая панель возвращается. Давайте каждой панели свой ключ, а забыть сохранённое — clearSavedState(key).
Подумайте, что повторное открытие сделает со страницей: модальная сайдпанель вернётся вместе с подложкой и удержанием фокуса поверх страницы, которую читатель ещё не видел.
Ключи, хранилище и срок жизни записи одинаковы у всех компонентов, которые сохраняются, — см. Сохранение состояния компонентов.
Панель занимает всю высоту окна браузера. Горизонтального скролла не бывает, содержимое панели должно умещаться по ширине.
| Предустановка | Ширина |
|---|---|
| Small | 400 |
| Medium | 640 (по умолчанию) |
| Large | 960 |
Ширину выбирают дизайнер и аналитик в зависимости от задачи. Кроме фиксированной ширины, может быть задана ширина в процентах от общей ширины экрана, с заданными минимальной и максимальной шириной в пикселях. Проценты позволят сайдпанели тянуться и выглядеть пропорционально, а лимиты не дадут чрезмерно увеличиться или уменьшиться. В отдельных случаях можно установить просто фиксированную ширину в пикселях.
При выборе размера сайдпанели обратите внимания на эти моменты: