/
sdds
/
plasma
Обзор
Документация
Войти
/
sdds
/
plasma
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
dev
packages/plasma-core/src/utils/scopeTab.ts
30 строк
1 KB
Ivan Kudryavtsev
fix(plasma-hope): move focusTrap to plasma-core
29 сен 2023, 06:31
29 сен 2023, 06:31
74d8103
Код
Авторство
О чём код?
import { findTabbableDescendants } from './tabbable'; /** * Управлление фокусом лишь внутри ноды через tab * @param node * @param event */ export const scopeTab = (node: HTMLElement, event: KeyboardEvent) => { const tabbable = findTabbableDescendants(node); if (!tabbable.length) { event.preventDefault(); return; } // смотрим, является ли элемент крайним - первый или последним const finalTabbable = tabbable[event.shiftKey ? 0 : tabbable.length - 1]; const leavingFinalTabbable = finalTabbable === document.activeElement || node === document.activeElement; // если не является, то передаем обработку таба самому браузеру if (!leavingFinalTabbable) { return; } // иначе зацкливаемся event.preventDefault(); const target = tabbable[event.shiftKey ? tabbable.length - 1 : 0]; if (target) { target.focus(); } };