UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

33 lines (30 loc) 1.13 kB
'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