UNPKG

@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
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=