@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
38 lines • 4.45 kB
JavaScript
import { tuiIsHTMLElement } from '@taiga-ui/cdk/utils/dom';
/**
* Checks for signs that element can be focused with keyboard. tabIndex above 0 is ignored to
* only target natural focus order. Not checking the possibility of an element to
* be focused, for example element can have display: none applied to it or any other
* circumstances could prevent actual focus.
*/
export function tuiIsKeyboardFocusable(element) {
if (element.hasAttribute('disabled') || element.getAttribute('tabIndex') === '-1') {
return false;
}
if ((tuiIsHTMLElement(element) && element.isContentEditable) ||
element.getAttribute('tabIndex') === '0') {
return true;
}
switch (element.tagName) {
case 'A':
case 'LINK':
return element.hasAttribute('href');
case 'AUDIO':
case 'VIDEO':
return element.hasAttribute('controls');
case 'BUTTON':
case 'SELECT':
case 'TEXTAREA':
return true;
case 'INPUT':
return element.getAttribute('type') !== 'hidden';
default:
return false;
}
}
export {
/**
* @deprecated use {@link tuiIsNativeKeyboardFocusable}
*/
tuiIsKeyboardFocusable as tuiIsNativeKeyboardFocusable, };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtbmF0aXZlLWtleWJvYXJkLWZvY3VzYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay91dGlscy9mb2N1cy9pcy1uYXRpdmUta2V5Ym9hcmQtZm9jdXNhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXpEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE9BQWdCO0lBQ25ELElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUMvRSxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUVELElBQ0ksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDeEQsT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEVBQzFDO1FBQ0UsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUVELFFBQVEsT0FBTyxDQUFDLE9BQU8sRUFBRTtRQUNyQixLQUFLLEdBQUcsQ0FBQztRQUNULEtBQUssTUFBTTtZQUNQLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssT0FBTztZQUNSLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxVQUFVO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDaEIsS0FBSyxPQUFPO1lBQ1IsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFFBQVEsQ0FBQztRQUNyRDtZQUNJLE9BQU8sS0FBSyxDQUFDO0tBQ3BCO0FBQ0wsQ0FBQztBQUVELE9BQU87QUFDSDs7R0FFRztBQUNILHNCQUFzQixJQUFJLDRCQUE0QixHQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0dWlJc0hUTUxFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5cbi8qKlxuICogQ2hlY2tzIGZvciBzaWducyB0aGF0IGVsZW1lbnQgY2FuIGJlIGZvY3VzZWQgd2l0aCBrZXlib2FyZC4gdGFiSW5kZXggYWJvdmUgMCBpcyBpZ25vcmVkIHRvXG4gKiBvbmx5IHRhcmdldCBuYXR1cmFsIGZvY3VzIG9yZGVyLiBOb3QgY2hlY2tpbmcgdGhlIHBvc3NpYmlsaXR5IG9mIGFuIGVsZW1lbnQgdG9cbiAqIGJlIGZvY3VzZWQsIGZvciBleGFtcGxlIGVsZW1lbnQgY2FuIGhhdmUgZGlzcGxheTogbm9uZSBhcHBsaWVkIHRvIGl0IG9yIGFueSBvdGhlclxuICogY2lyY3Vtc3RhbmNlcyBjb3VsZCBwcmV2ZW50IGFjdHVhbCBmb2N1cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR1aUlzS2V5Ym9hcmRGb2N1c2FibGUoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiSW5kZXgnKSA9PT0gJy0xJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgICAodHVpSXNIVE1MRWxlbWVudChlbGVtZW50KSAmJiBlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKSB8fFxuICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiSW5kZXgnKSA9PT0gJzAnXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZWxlbWVudC50YWdOYW1lKSB7XG4gICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICBjYXNlICdMSU5LJzpcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICBjYXNlICdBVURJTyc6XG4gICAgICAgIGNhc2UgJ1ZJREVPJzpcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnY29udHJvbHMnKTtcbiAgICAgICAgY2FzZSAnQlVUVE9OJzpcbiAgICAgICAgY2FzZSAnU0VMRUNUJzpcbiAgICAgICAgY2FzZSAnVEVYVEFSRUEnOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNhc2UgJ0lOUFVUJzpcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpICE9PSAnaGlkZGVuJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCB7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayB0dWlJc05hdGl2ZUtleWJvYXJkRm9jdXNhYmxlfVxuICAgICAqL1xuICAgIHR1aUlzS2V5Ym9hcmRGb2N1c2FibGUgYXMgdHVpSXNOYXRpdmVLZXlib2FyZEZvY3VzYWJsZSxcbn07XG4iXX0=