| /*! |
| * Bootstrap selector-engine.js v5.1.3 (https://getbootstrap.com/) |
| * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) |
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) |
| */ |
| (function (global, factory) { |
| typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : |
| typeof define === 'function' && define.amd ? define(factory) : |
| (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory()); |
| })(this, (function () { 'use strict'; |
| |
| /** |
| * -------------------------------------------------------------------------- |
| * Bootstrap (v5.1.3): util/index.js |
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) |
| * -------------------------------------------------------------------------- |
| */ |
| |
| const isElement = obj => { |
| if (!obj || typeof obj !== 'object') { |
| return false; |
| } |
| |
| if (typeof obj.jquery !== 'undefined') { |
| obj = obj[0]; |
| } |
| |
| return typeof obj.nodeType !== 'undefined'; |
| }; |
| |
| const isVisible = element => { |
| if (!isElement(element) || element.getClientRects().length === 0) { |
| return false; |
| } |
| |
| return getComputedStyle(element).getPropertyValue('visibility') === 'visible'; |
| }; |
| |
| const isDisabled = element => { |
| if (!element || element.nodeType !== Node.ELEMENT_NODE) { |
| return true; |
| } |
| |
| if (element.classList.contains('disabled')) { |
| return true; |
| } |
| |
| if (typeof element.disabled !== 'undefined') { |
| return element.disabled; |
| } |
| |
| return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; |
| }; |
| |
| /** |
| * -------------------------------------------------------------------------- |
| * Bootstrap (v5.1.3): dom/selector-engine.js |
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) |
| * -------------------------------------------------------------------------- |
| */ |
| const NODE_TEXT = 3; |
| const SelectorEngine = { |
| find(selector, element = document.documentElement) { |
| return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); |
| }, |
| |
| findOne(selector, element = document.documentElement) { |
| return Element.prototype.querySelector.call(element, selector); |
| }, |
| |
| children(element, selector) { |
| return [].concat(...element.children).filter(child => child.matches(selector)); |
| }, |
| |
| parents(element, selector) { |
| const parents = []; |
| let ancestor = element.parentNode; |
| |
| while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) { |
| if (ancestor.matches(selector)) { |
| parents.push(ancestor); |
| } |
| |
| ancestor = ancestor.parentNode; |
| } |
| |
| return parents; |
| }, |
| |
| prev(element, selector) { |
| let previous = element.previousElementSibling; |
| |
| while (previous) { |
| if (previous.matches(selector)) { |
| return [previous]; |
| } |
| |
| previous = previous.previousElementSibling; |
| } |
| |
| return []; |
| }, |
| |
| next(element, selector) { |
| let next = element.nextElementSibling; |
| |
| while (next) { |
| if (next.matches(selector)) { |
| return [next]; |
| } |
| |
| next = next.nextElementSibling; |
| } |
| |
| return []; |
| }, |
| |
| focusableChildren(element) { |
| const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', '); |
| return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); |
| } |
| |
| }; |
| |
| return SelectorEngine; |
| |
| })); |
| //# sourceMappingURL=selector-engine.js.map |