| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | /** * Traverses the slots of the open shadowroots and returns all children matching the query. * @param {ShadowRoot | HTMLElement} root * @param skipNode * @param isMatch * @param {number} maxDepth * @param {number} depth * @returns {HTMLElement[]} */export function queryShadowRoot(root, skipNode, isMatch, maxDepth = 20, depth = 0) {    let matches = [];    // If the depth is above the max depth, abort the searching here.    if (depth >= maxDepth) {        return matches;    }    // Traverses a slot element    const traverseSlot = ($slot) => {        // Only check nodes that are of the type Node.ELEMENT_NODE        // Read more here https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType        const assignedNodes = $slot.assignedNodes().filter(node => node.nodeType === 1);        if (assignedNodes.length > 0) {            return queryShadowRoot(assignedNodes[0].parentElement, skipNode, isMatch, maxDepth, depth + 1);        }        return [];    };    // Go through each child and continue the traversing if necessary    // Even though the typing says that children can't be undefined, Edge 15 sometimes gives an undefined value.    // Therefore we fallback to an empty array if it is undefined.    const children = Array.from(root.children || []);    for (const $child of children) {        // Check if the node and its descendants should be skipped        if (skipNode($child)) {            continue;        }        // If the child matches we always add it        if (isMatch($child)) {            matches.push($child);        }        if ($child.shadowRoot != null) {            matches.push(...queryShadowRoot($child.shadowRoot, skipNode, isMatch, maxDepth, depth + 1));        }        else if ($child.tagName === "SLOT") {            matches.push(...traverseSlot($child));        }        else {            matches.push(...queryShadowRoot($child, skipNode, isMatch, maxDepth, depth + 1));        }    }    return matches;}//# sourceMappingURL=shadow.js.map
 |