shelving
Version:
Toolkit for using data in JavaScript.
22 lines (21 loc) • 853 B
JavaScript
import { getFirstFocusable } from "../../util/focus.js";
/** Focus on the first focusable element inside an element. */
export function focusFirstFocusable(el) {
if (el instanceof HTMLElement)
getFirstFocusable(el)?.focus();
}
/**
* Loop focus inside an element.
* - Attempts to blur outside the `from` element refocus back on the first focusable element inside the element.
*/
export function loopFocus(element, nextTarget) {
if (element && nextTarget && !element.contains(nextTarget))
focusFirstFocusable(element);
}
/**
* Loop focus inside an element in response to a `blur` event.
* - Attempts to blur outside the `currentTarget` element refocus back on the first focusable element inside the element.
*/
export function eventLoopFocus({ currentTarget, relatedTarget }) {
loopFocus(currentTarget, relatedTarget);
}