UNPKG

@esri/calcite-components

Version:

Web Components for Esri's Calcite Design System.

56 lines (55 loc) 2.25 kB
/*! All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://github.com/Esri/calcite-design-system/blob/dev/LICENSE.md for details. v3.2.1 */ import { isServer } from "lit"; const listSelector = "calcite-list"; const listItemGroupSelector = "calcite-list-item-group"; const listItemSelector = "calcite-list-item"; function expandedAncestors(el) { const ancestor = el.parentElement?.closest(listItemSelector); if (!ancestor) { return; } ancestor.open = true; expandedAncestors(ancestor); } function getListItemChildren(slotEl) { const assignedElements = slotEl.assignedElements({ flatten: true }); const groupChildren = assignedElements.filter((el) => el?.matches(listItemGroupSelector)).map((group) => Array.from(group.querySelectorAll(listItemSelector))).flat(); const listItemChildren = assignedElements.filter((el) => el?.matches(listItemSelector)); const listChildren = assignedElements.filter((el) => el?.matches(listSelector)); return { lists: listChildren, items: groupChildren.concat(listItemChildren) }; } function updateListItemChildren(slotEl) { const listItemChildren = slotEl.assignedElements({ flatten: true }).filter((el) => el.matches(listItemSelector)); const filteredListItemChildren = listItemChildren.filter((listItem) => !listItem.filterHidden); listItemChildren.forEach((listItem) => { const index = filteredListItemChildren.indexOf(listItem); listItem.setPosition = index === -1 ? void 0 : index + 1; listItem.setSize = index === -1 ? void 0 : filteredListItemChildren.length; }); } function getDepth(element, includeGroup = false) { if (isServer) { return 0; } const expression = includeGroup ? "ancestor::calcite-list-item | ancestor::calcite-list-item-group" : "ancestor::calcite-list-item"; const result = document.evaluate(expression, element, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); return result.snapshotLength; } function isListItem(element) { return element.tagName === "CALCITE-LIST-ITEM"; } export { getListItemChildren as a, listItemSelector as b, listItemGroupSelector as c, expandedAncestors as e, getDepth as g, isListItem as i, listSelector as l, updateListItemChildren as u };