@awsui/components-react
Version:
On July 19th, 2022, we launched [Cloudscape Design System](https://cloudscape.design). Cloudscape is an evolution of AWS-UI. It consists of user interface guidelines, front-end components, design resources, and development tools for building intuitive, en
41 lines • 1.3 kB
JavaScript
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
// Credits to
// https://github.com/theKashey/focus-lock/blob/33f8b4bd9675d2605b15e2e4015b77fe35fbd6d0/src/utils/tabbables.ts
const tabbables = [
'button:enabled',
'select:enabled',
'textarea:enabled',
'input:enabled',
'a[href]',
'area[href]',
'summary',
'iframe',
'object',
'embed',
'audio[controls]',
'video[controls]',
'[tabindex]',
'[contenteditable]',
'[autofocus]',
].join(',');
export function isFocusable(element) {
return element.matches(tabbables);
}
export function getAllFocusables(container) {
return Array.prototype.slice.call(container.querySelectorAll(tabbables));
}
function getFocusables(container) {
return getAllFocusables(container).filter((element) => element.tabIndex !== -1);
}
export function getFirstFocusable(container) {
var _a;
const focusables = getFocusables(container);
return (_a = focusables[0]) !== null && _a !== void 0 ? _a : null;
}
export function getLastFocusable(container) {
var _a;
const focusables = getFocusables(container);
return (_a = focusables[focusables.length - 1]) !== null && _a !== void 0 ? _a : null;
}
//# sourceMappingURL=utils.js.map