UNPKG

@bianic-ui/utils

Version:

Common utilties and types for Bianic UI

113 lines (89 loc) 4.02 kB
"use strict"; exports.__esModule = true; exports.getAllFocusable = getAllFocusable; exports.getFirstFocusable = getFirstFocusable; exports.getAllTabbable = getAllTabbable; exports.getFirstTabbableIn = getFirstTabbableIn; exports.getLastTabbableIn = getLastTabbableIn; exports.getNextTabbable = getNextTabbable; exports.getPreviousTabbable = getPreviousTabbable; exports.focusNextTabbable = focusNextTabbable; exports.focusPreviousTabbable = focusPreviousTabbable; exports.closest = closest; exports.isRightClick = void 0; var _tabbable = require("./tabbable"); var focusableElList = ["input:not([disabled])", "select:not([disabled])", "textarea:not([disabled])", "embed", "iframe", "object", "a[href]", "area[href]", "button:not([disabled])", "[tabindex]", "audio[controls]", "video[controls]", "*[tabindex]:not([aria-disabled])", "*[contenteditable]"]; var focusableElSelector = focusableElList.join(); var isRightClick = function isRightClick(event) { return event.button != 0; }; exports.isRightClick = isRightClick; function getAllFocusable(container) { var focusableEls = Array.from(container.querySelectorAll(focusableElSelector)); focusableEls.unshift(container); return focusableEls.filter(_tabbable.isFocusable).filter(function (el) { return window.getComputedStyle(el).display !== "none"; }); } function getFirstFocusable(container) { var allFocusable = getAllFocusable(container); return allFocusable.length ? allFocusable[0] : null; } function getAllTabbable(container, fallbackToFocusable) { var allFocusable = Array.from(container.querySelectorAll(focusableElSelector)); var allTabbable = allFocusable.filter(_tabbable.isTabbable); if ((0, _tabbable.isTabbable)(container)) { allTabbable.unshift(container); } if (!allTabbable.length && fallbackToFocusable) { return allFocusable; } return allTabbable; } function getFirstTabbableIn(container, fallbackToFocusable) { var _getAllTabbable = getAllTabbable(container, fallbackToFocusable), first = _getAllTabbable[0]; return first || null; } function getLastTabbableIn(container, fallbackToFocusable) { var allTabbable = getAllTabbable(container, fallbackToFocusable); return allTabbable[allTabbable.length - 1] || null; } function getNextTabbable(container, fallbackToFocusable) { var allFocusable = getAllFocusable(container); var index = allFocusable.indexOf(document.activeElement); var slice = allFocusable.slice(index + 1); return slice.find(_tabbable.isTabbable) || allFocusable.find(_tabbable.isTabbable) || (fallbackToFocusable ? slice[0] : null); } function getPreviousTabbable(container, fallbackToFocusable) { var allFocusable = getAllFocusable(container).reverse(); var index = allFocusable.indexOf(document.activeElement); var slice = allFocusable.slice(index + 1); return slice.find(_tabbable.isTabbable) || allFocusable.find(_tabbable.isTabbable) || (fallbackToFocusable ? slice[0] : null); } function focusNextTabbable(container, fallbackToFocusable) { var nextTabbable = getNextTabbable(container, fallbackToFocusable); if (nextTabbable && (0, _tabbable.isHTMLElement)(nextTabbable)) { nextTabbable.focus(); } } function focusPreviousTabbable(container, fallbackToFocusable) { var previousTabbable = getPreviousTabbable(container, fallbackToFocusable); if (previousTabbable && (0, _tabbable.isHTMLElement)(previousTabbable)) { previousTabbable.focus(); } } function matches(element, selectors) { if ("matches" in element) return element.matches(selectors); if ("msMatchesSelector" in element) return element.msMatchesSelector(selectors); return element.webkitMatchesSelector(selectors); } function closest(element, selectors) { if ("closest" in element) return element.closest(selectors); do { if (matches(element, selectors)) return element; element = element.parentElement || element.parentNode; } while (element !== null && element.nodeType === 1); return null; } //# sourceMappingURL=dom-query.js.map