UNPKG

carbon-components-angular

Version:
65 lines 8.47 kB
export let tabbableSelector = "a[href], area[href], input:not([disabled]):not([tabindex=\'-1\']), " + "button:not([disabled]):not([tabindex=\'-1\']),select:not([disabled]):not([tabindex=\'-1\']), " + "textarea:not([disabled]):not([tabindex=\'-1\']), " + "iframe, object, embed, *[tabindex]:not([tabindex=\'-1\']), *[contenteditable=true]"; export let tabbableSelectorIgnoreTabIndex = "a[href], area[href], input:not([disabled]), " + "button:not([disabled]),select:not([disabled]), " + "textarea:not([disabled]), " + "iframe, object, embed, *[tabindex], *[contenteditable=true]"; export function getFocusElementList(element, selector = tabbableSelector) { let elements = element.querySelectorAll(selector); return elements ? Array.prototype.filter.call(elements, el => isVisible(el)) : elements; } export function isFocusInFirstItem(event, list) { if (list.length > 0) { return (event.target || event.srcElement) === list[0]; } return false; } export function isFocusInLastItem(event, list) { if (list.length > 0) { return (event.target || event.srcElement) === list[list.length - 1]; } return false; } export function isElementFocused(event, element) { return (event.target || event.srcElement) === element; } export function focusFirstFocusableElement(list) { if (list.length > 0) { list[0].focus(); return true; } return false; } export function focusLastFocusableElement(list) { if (list.length > 0) { list[list.length - 1].focus(); return true; } return false; } export function isVisible(element) { return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); } export function cycleTabs(event, element) { if (event.key === "Tab") { let list = getFocusElementList(element); let focusChanged = false; if (event.shiftKey) { if (isFocusInFirstItem(event, list) || isElementFocused(event, element)) { focusChanged = focusLastFocusableElement(list); } } else { if (isFocusInLastItem(event, list)) { focusChanged = focusFirstFocusableElement(list); } } if (focusChanged) { event.preventDefault(); event.stopPropagation(); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3RhYi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixHQUFHLHFFQUFxRTtJQUNqRywrRkFBK0Y7SUFDL0YsbURBQW1EO0lBQ25ELG9GQUFvRixDQUFDO0FBRXZGLE1BQU0sQ0FBQyxJQUFJLDhCQUE4QixHQUFHLDhDQUE4QztJQUN4RixpREFBaUQ7SUFDakQsNEJBQTRCO0lBQzVCLDZEQUE2RCxDQUFDO0FBRWhFLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxHQUFHLGdCQUFnQjtJQUN2RSxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3pGLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUk7SUFDN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3REO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJO0lBQzVDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3BFO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPO0lBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxPQUFPLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxJQUFJO0lBQzlDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxDQUFDO0tBQ1o7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsSUFBSTtJQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0tBQ1o7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQU87SUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNGLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPO0lBQ3ZDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7UUFDeEIsSUFBSSxJQUFJLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXpCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNuQixJQUFJLGtCQUFrQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ3hFLFlBQVksR0FBRyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMvQztTQUNEO2FBQU07WUFDTixJQUFJLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDbkMsWUFBWSxHQUFHLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hEO1NBQ0Q7UUFFRCxJQUFJLFlBQVksRUFBRTtZQUNqQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0tBQ0Q7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGxldCB0YWJiYWJsZVNlbGVjdG9yID0gXCJhW2hyZWZdLCBhcmVhW2hyZWZdLCBpbnB1dDpub3QoW2Rpc2FibGVkXSk6bm90KFt0YWJpbmRleD1cXCctMVxcJ10pLCBcIiArXG5cdFx0XCJidXR0b246bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9XFwnLTFcXCddKSxzZWxlY3Q6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9XFwnLTFcXCddKSwgXCIgK1xuXHRcdFwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9XFwnLTFcXCddKSwgXCIgK1xuXHRcdFwiaWZyYW1lLCBvYmplY3QsIGVtYmVkLCAqW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVxcJy0xXFwnXSksICpbY29udGVudGVkaXRhYmxlPXRydWVdXCI7XG5cbmV4cG9ydCBsZXQgdGFiYmFibGVTZWxlY3Rvcklnbm9yZVRhYkluZGV4ID0gXCJhW2hyZWZdLCBhcmVhW2hyZWZdLCBpbnB1dDpub3QoW2Rpc2FibGVkXSksIFwiICtcblx0XHRcImJ1dHRvbjpub3QoW2Rpc2FibGVkXSksc2VsZWN0Om5vdChbZGlzYWJsZWRdKSwgXCIgK1xuXHRcdFwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pLCBcIiArXG5cdFx0XCJpZnJhbWUsIG9iamVjdCwgZW1iZWQsICpbdGFiaW5kZXhdLCAqW2NvbnRlbnRlZGl0YWJsZT10cnVlXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9jdXNFbGVtZW50TGlzdChlbGVtZW50LCBzZWxlY3RvciA9IHRhYmJhYmxlU2VsZWN0b3IpIHtcblx0bGV0IGVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblx0cmV0dXJuIGVsZW1lbnRzID8gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGVsZW1lbnRzLCBlbCA9PiBpc1Zpc2libGUoZWwpKSA6IGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGb2N1c0luRmlyc3RJdGVtKGV2ZW50LCBsaXN0KSB7XG5cdGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gKGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50KSA9PT0gbGlzdFswXTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZvY3VzSW5MYXN0SXRlbShldmVudCwgbGlzdCkge1xuXHRpZiAobGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIChldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudCkgPT09IGxpc3RbbGlzdC5sZW5ndGggLSAxXTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnRGb2N1c2VkKGV2ZW50LCBlbGVtZW50KSB7XG5cdHJldHVybiAoZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQpID09PSBlbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNGaXJzdEZvY3VzYWJsZUVsZW1lbnQobGlzdCkge1xuXHRpZiAobGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0bGlzdFswXS5mb2N1cygpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvY3VzTGFzdEZvY3VzYWJsZUVsZW1lbnQobGlzdCkge1xuXHRpZiAobGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0bGlzdFtsaXN0Lmxlbmd0aCAtIDFdLmZvY3VzKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWaXNpYmxlKGVsZW1lbnQpIHtcblx0cmV0dXJuICEhKGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgZWxlbWVudC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjeWNsZVRhYnMoZXZlbnQsIGVsZW1lbnQpIHtcblx0aWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIikge1xuXHRcdGxldCBsaXN0ID0gZ2V0Rm9jdXNFbGVtZW50TGlzdChlbGVtZW50KTtcblx0XHRsZXQgZm9jdXNDaGFuZ2VkID0gZmFsc2U7XG5cblx0XHRpZiAoZXZlbnQuc2hpZnRLZXkpIHtcblx0XHRcdGlmIChpc0ZvY3VzSW5GaXJzdEl0ZW0oZXZlbnQsIGxpc3QpIHx8IGlzRWxlbWVudEZvY3VzZWQoZXZlbnQsIGVsZW1lbnQpKSB7XG5cdFx0XHRcdGZvY3VzQ2hhbmdlZCA9IGZvY3VzTGFzdEZvY3VzYWJsZUVsZW1lbnQobGlzdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChpc0ZvY3VzSW5MYXN0SXRlbShldmVudCwgbGlzdCkpIHtcblx0XHRcdFx0Zm9jdXNDaGFuZ2VkID0gZm9jdXNGaXJzdEZvY3VzYWJsZUVsZW1lbnQobGlzdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGZvY3VzQ2hhbmdlZCkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fVxufVxuIl19