@create-figma-plugin/ui
Version:
Production-grade Preact components that replicate the Figma UI design
32 lines • 1.2 kB
JavaScript
import { getFocusableElements } from './get-focusable-elements.js';
export function createFocusTrapKeyDownHandler(rootElement) {
return function (event) {
if (event.key !== 'Tab') {
return;
}
event.preventDefault();
const focusableElements = getFocusableElements(rootElement);
if (focusableElements.length === 0) {
return;
}
const index = findElementIndex(event.target, focusableElements);
if (index === focusableElements.length - 1 && event.shiftKey === false) {
focusableElements[0].focus();
return;
}
if (index === 0 && event.shiftKey === true) {
focusableElements[focusableElements.length - 1].focus();
return;
}
focusableElements[event.shiftKey === true ? index - 1 : index + 1].focus();
};
}
function findElementIndex(targetElement, elements) {
return elements.reduce(function (result, element, index) {
if (result === -1 && element.isSameNode(targetElement) === true) {
return index;
}
return result;
}, -1);
}
//# sourceMappingURL=create-focus-trap-key-down-handler.js.map