Some checks are pending
Deploy Volleyball CMS / deploy (push) Waiting to run
29 lines
861 B
TypeScript
29 lines
861 B
TypeScript
const focusableElements = [
|
|
'input:not([disabled]):not([type=hidden])',
|
|
'select:not([disabled])',
|
|
'textarea:not([disabled])',
|
|
'button:not([disabled])',
|
|
'a[href]',
|
|
'area[href]',
|
|
'summary',
|
|
'iframe',
|
|
'object',
|
|
'embed',
|
|
'audio[controls]',
|
|
'video[controls]',
|
|
'[contenteditable]:not([contenteditable^="false"])'
|
|
];
|
|
|
|
const FOCUSABLE_ELEMENT_SELECTOR = focusableElements.join(':not([hidden]),') + ',[tabindex]:not([disabled]):not([hidden])';
|
|
|
|
focusableElements.push('[tabindex]:not([tabindex="-1"]):not([disabled])');
|
|
const TABBABLE_ELEMENT_SELECTOR = focusableElements.join(':not([hidden]):not([tabindex="-1"]),');
|
|
|
|
export function isFocusable(element: Element): boolean {
|
|
return element.matches(FOCUSABLE_ELEMENT_SELECTOR);
|
|
}
|
|
|
|
export function isTabbable(element: Element): boolean {
|
|
return element.matches(TABBABLE_ELEMENT_SELECTOR);
|
|
}
|