@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
39 lines (38 loc) • 1.1 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const React = require("react");
const document = require("../utils/document.cjs");
const getActiveEl = () => document.getDocument()?.activeElement || null;
function makeFocusUtils(containerRef) {
function focus(el, checkFocus = true) {
if (!checkFocus || containerRef.current?.contains(getActiveEl())) {
el?.focus();
}
}
return {
focusPrevious() {
focus(getActiveEl()?.previousElementSibling);
},
focusNext() {
focus(getActiveEl()?.nextElementSibling);
},
focusFirst() {
focus(getActiveEl()?.parentElement?.firstElementChild);
},
focusLast() {
focus(getActiveEl()?.parentElement?.lastElementChild);
},
focusChild(index) {
focus(containerRef.current?.children[index], false);
},
focusSibling(index) {
focus(getActiveEl()?.parentElement?.children[index]);
}
};
}
function useFocus({
containerRef
}) {
return React.useMemo(() => makeFocusUtils(containerRef), [containerRef]);
}
exports.useFocus = useFocus;