focus-lock
Version:
DOM trap for a focus
23 lines (22 loc) • 866 B
JavaScript
import { filterAutoFocusable } from './DOMutils';
import { pickFirstFocus } from './firstFocus';
import { getDataset } from './is';
const findAutoFocused = (autoFocusables) => (node) => {
var _a;
const autofocus = (_a = getDataset(node)) === null || _a === void 0 ? void 0 : _a.autofocus;
return (
// @ts-expect-error
node.autofocus ||
//
(autofocus !== undefined && autofocus !== 'false') ||
//
autoFocusables.indexOf(node) >= 0);
};
export const pickAutofocus = (nodesIndexes, orderedNodes, groups) => {
const nodes = nodesIndexes.map(({ node }) => node);
const autoFocusable = filterAutoFocusable(nodes.filter(findAutoFocused(groups)));
if (autoFocusable && autoFocusable.length) {
return pickFirstFocus(autoFocusable);
}
return pickFirstFocus(filterAutoFocusable(orderedNodes));
};