@bianic-ui/utils
Version:
Common utilties and types for Bianic UI
113 lines (89 loc) • 4.02 kB
JavaScript
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
;