@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
33 lines (30 loc) • 1.13 kB
JavaScript
'use client';
import { findTabbableDescendants } from './tabbable.mjs';
function scopeTab(node, event) {
const tabbable = findTabbableDescendants(node);
if (!tabbable.length) {
event.preventDefault();
return;
}
const finalTabbable = tabbable[event.shiftKey ? 0 : tabbable.length - 1];
const root = node.getRootNode();
let leavingFinalTabbable = finalTabbable === root.activeElement || node === root.activeElement;
const activeElement = root.activeElement;
const activeElementIsRadio = activeElement.tagName === "INPUT" && activeElement.getAttribute("type") === "radio";
if (activeElementIsRadio) {
const activeRadioGroup = tabbable.filter(
(element) => element.getAttribute("type") === "radio" && element.getAttribute("name") === activeElement.getAttribute("name")
);
leavingFinalTabbable = activeRadioGroup.includes(finalTabbable);
}
if (!leavingFinalTabbable) {
return;
}
event.preventDefault();
const target = tabbable[event.shiftKey ? tabbable.length - 1 : 0];
if (target) {
target.focus();
}
}
export { scopeTab };
//# sourceMappingURL=scope-tab.mjs.map