{"version":3,"file":"igniteui-angular-tree.mjs","sources":["../../../projects/igniteui-angular/tree/src/tree/common.ts","../../../projects/igniteui-angular/tree/src/tree/tree.service.ts","../../../projects/igniteui-angular/tree/src/tree/tree-selection.service.ts","../../../projects/igniteui-angular/tree/src/tree/tree-navigation.service.ts","../../../projects/igniteui-angular/tree/src/tree/tree-node/tree-node.component.ts","../../../projects/igniteui-angular/tree/src/tree/tree-node/tree-node.component.html","../../../projects/igniteui-angular/tree/src/tree/tree.component.ts","../../../projects/igniteui-angular/tree/src/tree/tree.component.html","../../../projects/igniteui-angular/tree/src/tree/public_api.ts","../../../projects/igniteui-angular/tree/src/tree/tree.module.ts","../../../projects/igniteui-angular/tree/src/igniteui-angular-tree.ts"],"sourcesContent":["import { ElementRef, EventEmitter, InjectionToken, QueryList, TemplateRef } from '@angular/core';\nimport { IBaseCancelableBrowserEventArgs, IBaseEventArgs } from 'igniteui-angular/core';\nimport { ToggleAnimationSettings } from 'igniteui-angular/expansion-panel';\n\n// Component interfaces\n\n/** Comparer function that can be used when searching through IgxTreeNode<any>[] */\nexport type IgxTreeSearchResolver = (data: any, node: IgxTreeNode<any>) => boolean;\n\nexport interface IgxTree {\n    /** @hidden @internal */\n    nodes: QueryList<IgxTreeNode<any>>;\n    /** @hidden @internal */\n    rootNodes: IgxTreeNode<any>[];\n    singleBranchExpand: boolean;\n    toggleNodeOnClick: boolean;\n    selection: IgxTreeSelectionType;\n    expandIndicator: TemplateRef<any>;\n    animationSettings: ToggleAnimationSettings;\n    /** @hidden @internal */\n    forceSelect: IgxTreeNode<any>[];\n    /** @hidden @internal */\n    disabledChange: EventEmitter<IgxTreeNode<any>>;\n    /** @hidden @internal */\n    activeNodeBindingChange: EventEmitter<IgxTreeNode<any>>;\n    nodeSelection: EventEmitter<ITreeNodeSelectionEvent>;\n    nodeExpanding: EventEmitter<ITreeNodeTogglingEventArgs>;\n    nodeExpanded: EventEmitter<ITreeNodeToggledEventArgs>;\n    nodeCollapsing: EventEmitter<ITreeNodeTogglingEventArgs>;\n    nodeCollapsed: EventEmitter<ITreeNodeToggledEventArgs>;\n    activeNodeChanged: EventEmitter<IgxTreeNode<any>>;\n    expandAll(nodes: IgxTreeNode<any>[]): void;\n    collapseAll(nodes: IgxTreeNode<any>[]): void;\n    deselectAll(node?: IgxTreeNode<any>[]): void;\n    findNodes(searchTerm: any, comparer?: IgxTreeSearchResolver): IgxTreeNode<any>[] | null;\n}\n\n// Item interfaces\nexport interface IgxTreeNode<T> {\n    parentNode?: IgxTreeNode<any> | null;\n    loading: boolean;\n    path: IgxTreeNode<any>[];\n    expanded: boolean | null;\n    /** @hidden @internal */\n    indeterminate: boolean;\n    selected: boolean | null;\n    disabled: boolean;\n    /** @hidden @internal */\n    isFocused: boolean;\n    active: boolean;\n    level: number;\n    data: T;\n    /** @hidden @internal */\n    nativeElement: HTMLElement;\n    /** @hidden @internal */\n    header: ElementRef;\n    /** @hidden @internal */\n    tabIndex: number;\n    /** @hidden @internal */\n    allChildren: QueryList<IgxTreeNode<any>>;\n    /** @hidden @internal */\n    _children: QueryList<IgxTreeNode<any>> | null;\n    selectedChange: EventEmitter<boolean>;\n    expandedChange: EventEmitter<boolean>;\n    expand(): void;\n    collapse(): void;\n    toggle(): void;\n    /** @hidden @internal */\n    addLinkChild(node: any): void;\n    /** @hidden @internal */\n    removeLinkChild(node: any): void;\n}\n\n// Events\nexport interface ITreeNodeSelectionEvent extends IBaseCancelableBrowserEventArgs {\n    oldSelection: IgxTreeNode<any>[];\n    newSelection: IgxTreeNode<any>[];\n    added: IgxTreeNode<any>[];\n    removed: IgxTreeNode<any>[];\n    event?: Event;\n}\n\nexport interface ITreeNodeEditingEvent extends IBaseCancelableBrowserEventArgs {\n    node: IgxTreeNode<any>;\n    value: string;\n}\n\nexport interface ITreeNodeEditedEvent extends IBaseEventArgs {\n    node: IgxTreeNode<any>;\n    value: any;\n}\n\nexport interface ITreeNodeTogglingEventArgs extends IBaseEventArgs, IBaseCancelableBrowserEventArgs {\n    node: IgxTreeNode<any>;\n}\n\nexport interface ITreeNodeToggledEventArgs extends IBaseEventArgs {\n    node: IgxTreeNode<any>;\n}\n\n// Enums\nexport const IgxTreeSelectionType = {\n    None: 'None',\n    BiState: 'BiState',\n    Cascading: 'Cascading'\n} as const;\nexport type IgxTreeSelectionType = (typeof IgxTreeSelectionType)[keyof typeof IgxTreeSelectionType];\n\n// Token\nexport const IGX_TREE_COMPONENT = /*@__PURE__*/new InjectionToken<IgxTree>('IgxTreeToken');\nexport const IGX_TREE_NODE_COMPONENT = /*@__PURE__*/new InjectionToken<IgxTreeNode<any>>('IgxTreeNodeToken');\n","import { Injectable } from '@angular/core';\nimport { IgxTree, IgxTreeNode } from './common';\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxTreeService {\n    public expandedNodes: Set<IgxTreeNode<any>> = new Set<IgxTreeNode<any>>();\n    public collapsingNodes: Set<IgxTreeNode<any>> = new Set<IgxTreeNode<any>>();\n    private tree: IgxTree;\n\n    /**\n     * Adds the node to the `expandedNodes` set and fires the nodes change event\n     *\n     * @param node target node\n     * @param uiTrigger is the event triggered by a ui interraction (so we know if we should animate)\n     * @returns void\n     */\n    public expand(node: IgxTreeNode<any>, uiTrigger?: boolean): void {\n        this.collapsingNodes.delete(node);\n        if (!this.expandedNodes.has(node)) {\n            node.expandedChange.emit(true);\n        } else {\n            return;\n        }\n        this.expandedNodes.add(node);\n        if (this.tree.singleBranchExpand) {\n            this.tree.findNodes(node, this.siblingComparer)?.forEach(e => {\n                if (uiTrigger) {\n                    e.collapse();\n                } else {\n                    e.expanded = false;\n                }\n            });\n        }\n    }\n\n    /**\n     * Adds a node to the `collapsing` collection\n     *\n     * @param node target node\n     */\n    public collapsing(node: IgxTreeNode<any>): void {\n        this.collapsingNodes.add(node);\n    }\n\n    /**\n     * Removes the node from the 'expandedNodes' set and emits the node's change event\n     *\n     * @param node target node\n     * @returns void\n     */\n    public collapse(node: IgxTreeNode<any>): void {\n        if (this.expandedNodes.has(node)) {\n            node.expandedChange.emit(false);\n        }\n        this.collapsingNodes.delete(node);\n        this.expandedNodes.delete(node);\n    }\n\n    public isExpanded(node: IgxTreeNode<any>): boolean {\n        return this.expandedNodes.has(node);\n    }\n\n    public register(tree: IgxTree) {\n        this.tree = tree;\n    }\n\n    private siblingComparer:\n    (data: IgxTreeNode<any>, node: IgxTreeNode<any>) => boolean =\n    (data: IgxTreeNode<any>, node: IgxTreeNode<any>) => node !== data && node.level === data.level;\n}\n","import { Injectable } from '@angular/core';\nimport { IgxTree, IgxTreeNode, IgxTreeSelectionType, ITreeNodeSelectionEvent } from './common';\n\n/** A collection containing the nodes affected in the selection as well as their direct parents */\ninterface CascadeSelectionNodeCollection {\n    nodes: Set<IgxTreeNode<any>>;\n    parents: Set<IgxTreeNode<any>>;\n}\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxTreeSelectionService {\n    private tree: IgxTree;\n    private nodeSelection: Set<IgxTreeNode<any>> = new Set<IgxTreeNode<any>>();\n    private indeterminateNodes: Set<IgxTreeNode<any>> = new Set<IgxTreeNode<any>>();\n\n    private nodesToBeSelected: Set<IgxTreeNode<any>>;\n    private nodesToBeIndeterminate: Set<IgxTreeNode<any>>;\n\n    public register(tree: IgxTree) {\n        this.tree = tree;\n    }\n\n    /** Select range from last selected node to the current specified node. */\n    public selectMultipleNodes(node: IgxTreeNode<any>, event?: Event): void {\n        if (!this.nodeSelection.size) {\n            this.selectNode(node);\n            return;\n        }\n        const lastSelectedNodeIndex = this.tree.nodes.toArray().indexOf(this.getSelectedNodes()[this.nodeSelection.size - 1]);\n        const currentNodeIndex = this.tree.nodes.toArray().indexOf(node);\n        const nodes = this.tree.nodes.toArray().slice(Math.min(currentNodeIndex, lastSelectedNodeIndex),\n            Math.max(currentNodeIndex, lastSelectedNodeIndex) + 1);\n\n        const added = nodes.filter(_node => !this.isNodeSelected(_node));\n        const newSelection = this.getSelectedNodes().concat(added);\n        this.emitNodeSelectionEvent(newSelection, added, [], event);\n    }\n\n    /** Select the specified node and emit event. */\n    public selectNode(node: IgxTreeNode<any>, event?: Event): void {\n        if (this.tree.selection === IgxTreeSelectionType.None) {\n            return;\n        }\n        this.emitNodeSelectionEvent([...this.getSelectedNodes(), node], [node], [], event);\n    }\n\n    /** Deselect the specified node and emit event. */\n    public deselectNode(node: IgxTreeNode<any>, event?: Event): void {\n        const newSelection = this.getSelectedNodes().filter(r => r !== node);\n        this.emitNodeSelectionEvent(newSelection, [], [node], event);\n    }\n\n    /** Clears node selection */\n    public clearNodesSelection(): void {\n        this.nodeSelection.clear();\n        this.indeterminateNodes.clear();\n    }\n\n    public isNodeSelected(node: IgxTreeNode<any>): boolean {\n        return this.nodeSelection.has(node);\n    }\n\n    public isNodeIndeterminate(node: IgxTreeNode<any>): boolean {\n        return this.indeterminateNodes.has(node);\n    }\n\n    /** Select specified nodes. No event is emitted. */\n    public selectNodesWithNoEvent(nodes: IgxTreeNode<any>[], clearPrevSelection = false, shouldEmit = true): void {\n        if (this.tree && this.tree.selection === IgxTreeSelectionType.Cascading) {\n            this.cascadeSelectNodesWithNoEvent(nodes, clearPrevSelection);\n            return;\n        }\n\n        const oldSelection = this.getSelectedNodes();\n\n        if (clearPrevSelection) {\n            this.nodeSelection.clear();\n        }\n        nodes.forEach(node => this.nodeSelection.add(node));\n\n        if (shouldEmit) {\n            this.emitSelectedChangeEvent(oldSelection);\n        }\n    }\n\n    /** Deselect specified nodes. No event is emitted. */\n    public deselectNodesWithNoEvent(nodes?: IgxTreeNode<any>[], shouldEmit = true): void {\n        const oldSelection = this.getSelectedNodes();\n\n        if (!nodes) {\n            this.nodeSelection.clear();\n        } else if (this.tree && this.tree.selection === IgxTreeSelectionType.Cascading) {\n            this.cascadeDeselectNodesWithNoEvent(nodes);\n        } else {\n            nodes.forEach(node => this.nodeSelection.delete(node));\n        }\n\n        if (shouldEmit) {\n            this.emitSelectedChangeEvent(oldSelection);\n        }\n    }\n\n    /** Called on `node.ngOnDestroy` to ensure state is correct after node is removed */\n    public ensureStateOnNodeDelete(node: IgxTreeNode<any>): void {\n        if (this.tree?.selection !== IgxTreeSelectionType.Cascading) {\n            return;\n        }\n        requestAnimationFrame(() => {\n            if (this.isNodeSelected(node)) {\n                // node is destroyed, do not emit event\n                this.deselectNodesWithNoEvent([node], false);\n            } else {\n                if (!node.parentNode) {\n                    return;\n                }\n                const assitantLeafNode = node.parentNode?.allChildren.find(e => !e._children?.length);\n                if (!assitantLeafNode) {\n                    return;\n                }\n                this.retriggerNodeState(assitantLeafNode);\n            }\n        });\n    }\n\n    /** Retriggers a node's selection state */\n    private retriggerNodeState(node: IgxTreeNode<any>): void {\n        if (node.selected) {\n            this.nodeSelection.delete(node);\n            this.selectNodesWithNoEvent([node], false, false);\n        } else {\n            this.nodeSelection.add(node);\n            this.deselectNodesWithNoEvent([node], false);\n        }\n    }\n\n    /** Returns array of the selected nodes. */\n    private getSelectedNodes(): IgxTreeNode<any>[] {\n        return this.nodeSelection.size ? Array.from(this.nodeSelection) : [];\n    }\n\n    /** Returns array of the nodes in indeterminate state. */\n    private getIndeterminateNodes(): IgxTreeNode<any>[] {\n        return this.indeterminateNodes.size ? Array.from(this.indeterminateNodes) : [];\n    }\n\n    private emitNodeSelectionEvent(\n        newSelection: IgxTreeNode<any>[], added: IgxTreeNode<any>[], removed: IgxTreeNode<any>[], event: Event\n    ): boolean {\n        if (this.tree.selection === IgxTreeSelectionType.Cascading) {\n            this.emitCascadeNodeSelectionEvent(newSelection, added, removed, event);\n            return;\n        }\n        const currSelection = this.getSelectedNodes();\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n\n        const args: ITreeNodeSelectionEvent = {\n            oldSelection: currSelection, newSelection,\n            added, removed, event, cancel: false, owner: this.tree\n        };\n        this.tree.nodeSelection.emit(args);\n        if (args.cancel) {\n            return;\n        }\n        this.selectNodesWithNoEvent(args.newSelection, true);\n    }\n\n    private areEqualCollections(first: IgxTreeNode<any>[], second: IgxTreeNode<any>[]): boolean {\n        return first.length === second.length && new Set(first.concat(second)).size === first.length;\n    }\n\n    private cascadeSelectNodesWithNoEvent(nodes?: IgxTreeNode<any>[], clearPrevSelection = false): void {\n        const oldSelection = this.getSelectedNodes();\n\n        if (clearPrevSelection) {\n            this.indeterminateNodes.clear();\n            this.nodeSelection.clear();\n            this.calculateNodesNewSelectionState({ added: nodes, removed: [] });\n        } else {\n            const newSelection = [...oldSelection, ...nodes];\n            const args: Partial<ITreeNodeSelectionEvent> = { oldSelection, newSelection };\n\n            // retrieve only the rows without their parents/children which has to be added to the selection\n            this.populateAddRemoveArgs(args);\n\n            this.calculateNodesNewSelectionState(args);\n        }\n        this.nodeSelection = new Set(this.nodesToBeSelected);\n        this.indeterminateNodes = new Set(this.nodesToBeIndeterminate);\n\n        this.emitSelectedChangeEvent(oldSelection);\n    }\n\n    private cascadeDeselectNodesWithNoEvent(nodes: IgxTreeNode<any>[]): void {\n        const args = { added: [], removed: nodes };\n        this.calculateNodesNewSelectionState(args);\n\n        this.nodeSelection = new Set<IgxTreeNode<any>>(this.nodesToBeSelected);\n        this.indeterminateNodes = new Set<IgxTreeNode<any>>(this.nodesToBeIndeterminate);\n    }\n\n    /**\n     * populates the nodesToBeSelected and nodesToBeIndeterminate sets\n     * with the nodes which will be eventually in selected/indeterminate state\n     */\n    private calculateNodesNewSelectionState(args: Partial<ITreeNodeSelectionEvent>): void {\n        this.nodesToBeSelected = new Set<IgxTreeNode<any>>(args.oldSelection ? args.oldSelection : this.getSelectedNodes());\n        this.nodesToBeIndeterminate = new Set<IgxTreeNode<any>>(this.getIndeterminateNodes());\n\n        this.cascadeSelectionState(args.removed, false);\n        this.cascadeSelectionState(args.added, true);\n    }\n\n    /** Ensures proper selection state for all predescessors and descendants during a selection event */\n    private cascadeSelectionState(nodes: IgxTreeNode<any>[], selected: boolean): void {\n        if (!nodes || nodes.length === 0) {\n            return;\n        }\n\n        if (nodes && nodes.length > 0) {\n            const nodeCollection: CascadeSelectionNodeCollection = this.getCascadingNodeCollection(nodes);\n\n            nodeCollection.nodes.forEach(node => {\n                if (selected) {\n                    this.nodesToBeSelected.add(node);\n                } else {\n                    this.nodesToBeSelected.delete(node);\n                }\n                this.nodesToBeIndeterminate.delete(node);\n            });\n\n            Array.from(nodeCollection.parents).forEach((parent) => {\n                this.handleParentSelectionState(parent);\n            });\n        }\n    }\n\n    private emitCascadeNodeSelectionEvent(newSelection, added, removed, event?): boolean {\n        const currSelection = this.getSelectedNodes();\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n\n        const args: ITreeNodeSelectionEvent = {\n            oldSelection: currSelection, newSelection,\n            added, removed, event, cancel: false, owner: this.tree\n        };\n\n        this.calculateNodesNewSelectionState(args);\n\n        args.newSelection = Array.from(this.nodesToBeSelected);\n\n        // retrieve nodes/parents/children which has been added/removed from the selection\n        this.populateAddRemoveArgs(args);\n\n        this.tree.nodeSelection.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n\n        // if args.newSelection hasn't been modified\n        if (this.areEqualCollections(Array.from(this.nodesToBeSelected), args.newSelection)) {\n            this.nodeSelection = new Set<IgxTreeNode<any>>(this.nodesToBeSelected);\n            this.indeterminateNodes = new Set(this.nodesToBeIndeterminate);\n            this.emitSelectedChangeEvent(currSelection);\n        } else {\n            // select the nodes within the modified args.newSelection with no event\n            this.cascadeSelectNodesWithNoEvent(args.newSelection, true);\n        }\n    }\n\n    /**\n     * recursively handle the selection state of the direct and indirect parents\n     */\n    private handleParentSelectionState(node: IgxTreeNode<any>) {\n        if (!node) {\n            return;\n        }\n        this.handleNodeSelectionState(node);\n        if (node.parentNode) {\n            this.handleParentSelectionState(node.parentNode);\n        }\n    }\n\n    /**\n     * Handle the selection state of a given node based the selection states of its direct children\n     */\n    private handleNodeSelectionState(node: IgxTreeNode<any>) {\n        const nodesArray = (node && node._children) ? node._children.toArray() : [];\n        if (nodesArray.length) {\n            if (nodesArray.every(n => this.nodesToBeSelected.has(n))) {\n                this.nodesToBeSelected.add(node);\n                this.nodesToBeIndeterminate.delete(node);\n            } else if (nodesArray.some(n => this.nodesToBeSelected.has(n) || this.nodesToBeIndeterminate.has(n))) {\n                this.nodesToBeIndeterminate.add(node);\n                this.nodesToBeSelected.delete(node);\n            } else {\n                this.nodesToBeIndeterminate.delete(node);\n                this.nodesToBeSelected.delete(node);\n            }\n        } else {\n            // if the children of the node has been deleted and the node was selected do not change its state\n            if (this.isNodeSelected(node)) {\n                this.nodesToBeSelected.add(node);\n            } else {\n                this.nodesToBeSelected.delete(node);\n            }\n            this.nodesToBeIndeterminate.delete(node);\n        }\n    }\n\n    /**\n     * Get a collection of all nodes affected by the change event\n     *\n     * @param nodesToBeProcessed set of the nodes to be selected/deselected\n     * @returns a collection of all affected nodes and all their parents\n     */\n    private getCascadingNodeCollection(nodes: IgxTreeNode<any>[]): CascadeSelectionNodeCollection {\n        const collection: CascadeSelectionNodeCollection = {\n            parents: new Set<IgxTreeNode<any>>(),\n            nodes: new Set<IgxTreeNode<any>>(nodes)\n        };\n\n        Array.from(collection.nodes).forEach((node) => {\n            const nodeAndAllChildren = node.allChildren?.toArray() || [];\n            nodeAndAllChildren.forEach(n => {\n                collection.nodes.add(n);\n            });\n\n            if (node && node.parentNode) {\n                collection.parents.add(node.parentNode);\n            }\n        });\n        return collection;\n    }\n\n    /**\n     * retrieve the nodes which should be added/removed to/from the old selection\n     */\n    private populateAddRemoveArgs(args: Partial<ITreeNodeSelectionEvent>): void {\n        args.removed = args.oldSelection.filter(x => args.newSelection.indexOf(x) < 0);\n        args.added = args.newSelection.filter(x => args.oldSelection.indexOf(x) < 0);\n    }\n\n    /** Emits the `selectedChange` event for each node affected by the selection */\n    private emitSelectedChangeEvent(oldSelection: IgxTreeNode<any>[]): void {\n        this.getSelectedNodes().forEach(n => {\n            if (oldSelection.indexOf(n) < 0) {\n                n.selectedChange.emit(true);\n            }\n        });\n\n        oldSelection.forEach(n => {\n            if (!this.nodeSelection.has(n)) {\n                n.selectedChange.emit(false);\n            }\n        });\n    }\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { IgxTree, IgxTreeNode, IgxTreeSelectionType } from './common';\nimport { NAVIGATION_KEYS } from 'igniteui-angular/core';\nimport { IgxTreeService } from './tree.service';\nimport { IgxTreeSelectionService } from './tree-selection.service';\nimport { Subject } from 'rxjs';\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxTreeNavigationService implements OnDestroy {\n    private treeService = inject(IgxTreeService);\n    private selectionService = inject(IgxTreeSelectionService);\n\n    private tree: IgxTree;\n\n    private _focusedNode: IgxTreeNode<any> = null;\n    private _lastFocusedNode: IgxTreeNode<any> = null;\n    private _activeNode: IgxTreeNode<any> = null;\n\n    private _visibleChildren: IgxTreeNode<any>[] = [];\n    private _invisibleChildren: Set<IgxTreeNode<any>> = new Set();\n    private _disabledChildren: Set<IgxTreeNode<any>> = new Set();\n\n    private _cacheChange = new Subject<void>();\n\n    constructor() {\n        this._cacheChange.subscribe(() => {\n            this._visibleChildren =\n                this.tree?.nodes ?\n                    this.tree.nodes.filter(e => !(this._invisibleChildren.has(e) || this._disabledChildren.has(e))) :\n                    [];\n        });\n    }\n\n    public register(tree: IgxTree) {\n        this.tree = tree;\n    }\n\n    public get focusedNode() {\n        return this._focusedNode;\n    }\n\n    public set focusedNode(value: IgxTreeNode<any>) {\n        if (this._focusedNode === value) {\n            return;\n        }\n        this._lastFocusedNode = this._focusedNode;\n        if (this._lastFocusedNode) {\n            this._lastFocusedNode.tabIndex = -1;\n        }\n        this._focusedNode = value;\n        if (this._focusedNode !== null) {\n            this._focusedNode.tabIndex = 0;\n            this._focusedNode.header.nativeElement.focus();\n        }\n    }\n\n    public get activeNode() {\n        return this._activeNode;\n    }\n\n    public set activeNode(value: IgxTreeNode<any>) {\n        if (this._activeNode === value) {\n            return;\n        }\n        this._activeNode = value;\n        this.tree.activeNodeChanged.emit(this._activeNode);\n    }\n\n    public get visibleChildren(): IgxTreeNode<any>[] {\n        return this._visibleChildren;\n    }\n\n    public update_disabled_cache(node: IgxTreeNode<any>): void {\n        if (node.disabled) {\n            this._disabledChildren.add(node);\n        } else {\n            this._disabledChildren.delete(node);\n        }\n        this._cacheChange.next();\n    }\n\n    public init_invisible_cache() {\n        this.tree.nodes.filter(e => e.level === 0).forEach(node => {\n            this.update_visible_cache(node, node.expanded, false);\n        });\n        this._cacheChange.next();\n    }\n\n    public update_visible_cache(node: IgxTreeNode<any>, expanded: boolean, shouldEmit = true): void {\n        if (expanded) {\n            node._children.forEach(child => {\n                this._invisibleChildren.delete(child);\n                this.update_visible_cache(child, child.expanded, false);\n            });\n        } else {\n            node.allChildren.forEach(c => this._invisibleChildren.add(c));\n        }\n\n        if (shouldEmit) {\n            this._cacheChange.next();\n        }\n    }\n\n    /**\n     * Sets the node as focused (and active)\n     *\n     * @param node target node\n     * @param isActive if true, sets the node as active\n     */\n    public setFocusedAndActiveNode(node: IgxTreeNode<any>, isActive = true): void {\n        if (isActive) {\n            this.activeNode = node;\n        }\n        this.focusedNode = node;\n    }\n\n    /** Handler for keydown events. Used in tree.component.ts */\n    public handleKeydown(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        if (!this.focusedNode) {\n            return;\n        }\n        if (!(NAVIGATION_KEYS.has(key) || key === '*')) {\n            if (key === 'enter') {\n                this.activeNode = this.focusedNode;\n            }\n            return;\n        }\n        event.preventDefault();\n        if (event.repeat) {\n            setTimeout(() => this.handleNavigation(event), 1);\n        } else {\n            this.handleNavigation(event);\n        }\n    }\n\n    public ngOnDestroy() {\n        this._cacheChange.next();\n        this._cacheChange.complete();\n    }\n\n    private handleNavigation(event: KeyboardEvent) {\n        switch (event.key.toLowerCase()) {\n            case 'home':\n                this.setFocusedAndActiveNode(this.visibleChildren[0]);\n                break;\n            case 'end':\n                this.setFocusedAndActiveNode(this.visibleChildren[this.visibleChildren.length - 1]);\n                break;\n            case 'arrowleft':\n            case 'left':\n                this.handleArrowLeft();\n                break;\n            case 'arrowright':\n            case 'right':\n                this.handleArrowRight();\n                break;\n            case 'arrowup':\n            case 'up':\n                this.handleUpDownArrow(true, event);\n                break;\n            case 'arrowdown':\n            case 'down':\n                this.handleUpDownArrow(false, event);\n                break;\n            case '*':\n                this.handleAsterisk();\n                break;\n            case ' ':\n            case 'spacebar':\n            case 'space':\n                this.handleSpace(event.shiftKey);\n                break;\n            default:\n                return;\n        }\n    }\n\n    private handleArrowLeft(): void {\n        if (this.focusedNode.expanded && !this.treeService.collapsingNodes.has(this.focusedNode) && this.focusedNode._children?.length) {\n            this.activeNode = this.focusedNode;\n            this.focusedNode.collapse();\n        } else {\n            const parentNode = this.focusedNode.parentNode;\n            if (parentNode && !parentNode.disabled) {\n                this.setFocusedAndActiveNode(parentNode);\n            }\n        }\n    }\n\n    private handleArrowRight(): void {\n        if (this.focusedNode._children.length > 0) {\n            if (!this.focusedNode.expanded) {\n                this.activeNode = this.focusedNode;\n                this.focusedNode.expand();\n            } else {\n                if (this.treeService.collapsingNodes.has(this.focusedNode)) {\n                    this.focusedNode.expand();\n                    return;\n                }\n                const firstChild = this.focusedNode._children.find(node => !node.disabled);\n                if (firstChild) {\n                    this.setFocusedAndActiveNode(firstChild);\n                }\n            }\n        }\n    }\n\n    private handleUpDownArrow(isUp: boolean, event: KeyboardEvent): void {\n        const next = this.getVisibleNode(this.focusedNode, isUp ? -1 : 1);\n        if (next === this.focusedNode) {\n            return;\n        }\n\n        if (event.ctrlKey) {\n            this.setFocusedAndActiveNode(next, false);\n        } else {\n            this.setFocusedAndActiveNode(next);\n        }\n    }\n\n    private handleAsterisk(): void {\n        const nodes = this.focusedNode.parentNode ? this.focusedNode.parentNode._children : this.tree.rootNodes;\n        nodes?.forEach(node => {\n            if (!node.disabled && (!node.expanded || this.treeService.collapsingNodes.has(node))) {\n                node.expand();\n            }\n        });\n    }\n\n    private handleSpace(shiftKey = false): void {\n        if (this.tree.selection === IgxTreeSelectionType.None) {\n            return;\n        }\n\n        this.activeNode = this.focusedNode;\n        if (shiftKey) {\n            this.selectionService.selectMultipleNodes(this.focusedNode);\n            return;\n        }\n\n        if (this.focusedNode.selected) {\n            this.selectionService.deselectNode(this.focusedNode);\n        } else {\n            this.selectionService.selectNode(this.focusedNode);\n        }\n    }\n\n    /** Gets the next visible node in the given direction - 1 -> next, -1 -> previous */\n    private getVisibleNode(node: IgxTreeNode<any>, dir: 1 | -1 = 1): IgxTreeNode<any> {\n        const nodeIndex = this.visibleChildren.indexOf(node);\n        return this.visibleChildren[nodeIndex + dir] || node;\n    }\n}\n","import { ChangeDetectorRef, Component, ContentChildren, Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnDestroy, OnInit, Output, QueryList, TemplateRef, ViewChild, booleanAttribute, inject } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n    IgxTree,\n    IgxTreeNode,\n    IgxTreeSelectionType,\n    IGX_TREE_COMPONENT,\n    IGX_TREE_NODE_COMPONENT,\n    ITreeNodeTogglingEventArgs\n} from '../common';\nimport { IgxTreeNavigationService } from '../tree-navigation.service';\nimport { IgxTreeSelectionService } from '../tree-selection.service';\nimport { IgxTreeService } from '../tree.service';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar';\nimport { ToggleAnimationPlayer, ToggleAnimationSettings } from 'igniteui-angular/expansion-panel';\nimport { getCurrentResourceStrings, onResourceChangeHandle, ITreeResourceStrings, TreeResourceStringsEN } from 'igniteui-angular/core';\n\n// TODO: Implement aria functionality\n/**\n * @hidden @internal\n * Used for links (`a` tags) in the body of an `igx-tree-node`. Handles aria and event dispatch.\n */\n@Directive({\n    selector: `[igxTreeNodeLink]`,\n    standalone: true\n})\nexport class IgxTreeNodeLinkDirective implements OnDestroy {\n    private node = inject<IgxTreeNode<any>>(IGX_TREE_NODE_COMPONENT, { optional: true });\n    private navService = inject(IgxTreeNavigationService);\n    public elementRef = inject(ElementRef);\n\n\n    @HostBinding('attr.role')\n    public role = 'treeitem';\n\n    /**\n     * The node's parent. Should be used only when the link is defined\n     * in `<ng-template>` tag outside of its parent, as Angular DI will not properly provide a reference\n     *\n     * ```html\n     * <igx-tree>\n     *     <igx-tree-node #myNode *ngFor=\"let node of data\" [data]=\"node\">\n     *         <ng-template *ngTemplateOutlet=\"nodeTemplate; context: { $implicit: data, parentNode: myNode }\">\n     *         </ng-template>\n     *     </igx-tree-node>\n     *     ...\n     *     <!-- node template is defined under tree to access related services -->\n     *     <ng-template #nodeTemplate let-data let-node=\"parentNode\">\n     *         <a [igxTreeNodeLink]=\"node\">{{ data.label }}</a>\n     *     </ng-template>\n     * </igx-tree>\n     * ```\n     */\n    @Input('igxTreeNodeLink')\n    public set parentNode(val: any) {\n        if (val) {\n            this._parentNode = val;\n            (this._parentNode as any).addLinkChild(this);\n        }\n    }\n\n    public get parentNode(): any {\n        return this._parentNode;\n    }\n\n    /** A pointer to the parent node */\n    private get target(): IgxTreeNode<any> {\n        return this.node || this.parentNode;\n    }\n\n    private _parentNode: IgxTreeNode<any> = null;\n\n    /** @hidden @internal */\n    @HostBinding('attr.tabindex')\n    public get tabIndex(): number {\n        return this.navService.focusedNode === this.target ? (this.target?.disabled ? -1 : 0) : -1;\n    }\n\n    /**\n     * @hidden @internal\n     * Clear the node's focused state\n     */\n    @HostListener('blur')\n    public handleBlur() {\n        this.target.isFocused = false;\n    }\n\n    /**\n     * @hidden @internal\n     * Set the node as focused\n     */\n    @HostListener('focus')\n    public handleFocus() {\n        if (this.target && !this.target.disabled) {\n            if (this.navService.focusedNode !== this.target) {\n                this.navService.focusedNode = this.target;\n            }\n            this.target.isFocused = true;\n        }\n    }\n\n    public ngOnDestroy() {\n        this.target.removeLinkChild(this);\n    }\n}\n\n/**\n *\n * The tree node component represents a child node of the tree component or another tree node.\n * Usage:\n *\n * ```html\n *  <igx-tree>\n *  ...\n *    <igx-tree-node [data]=\"data\" [selected]=\"service.isNodeSelected(data.Key)\" [expanded]=\"service.isNodeExpanded(data.Key)\">\n *      {{ data.FirstName }} {{ data.LastName }}\n *    </igx-tree-node>\n *  ...\n *  </igx-tree>\n * ```\n */\n@Component({\n    selector: 'igx-tree-node',\n    templateUrl: 'tree-node.component.html',\n    providers: [\n        { provide: IGX_TREE_NODE_COMPONENT, useExisting: IgxTreeNodeComponent }\n    ],\n    imports: [NgTemplateOutlet, IgxIconComponent, IgxCheckboxComponent, NgClass, IgxCircularProgressBarComponent]\n})\nexport class IgxTreeNodeComponent<T> extends ToggleAnimationPlayer implements IgxTreeNode<T>, OnInit, OnDestroy {\n    public tree = inject<IgxTree>(IGX_TREE_COMPONENT);\n    protected selectionService = inject(IgxTreeSelectionService);\n    protected treeService = inject(IgxTreeService);\n    protected navService = inject(IgxTreeNavigationService);\n    protected cdr = inject(ChangeDetectorRef);\n    private element = inject<ElementRef<HTMLElement>>(ElementRef);\n    public parentNode = inject<IgxTreeNode<any>>(IGX_TREE_NODE_COMPONENT, { optional: true, skipSelf: true });\n\n    /**\n     * The data entry that the node is visualizing.\n     *\n     * @remarks\n     * Required for searching through nodes.\n     *\n     * @example\n     * ```html\n     *  <igx-tree>\n     *  ...\n     *    <igx-tree-node [data]=\"data\">\n     *      {{ data.FirstName }} {{ data.LastName }}\n     *    </igx-tree-node>\n     *  ...\n     *  </igx-tree>\n     * ```\n     */\n    @Input()\n    public data: T;\n\n    /**\n     * To be used for load-on-demand scenarios in order to specify whether the node is loading data.\n     *\n     * @remarks\n     * Loading nodes do not render children.\n     */\n    @Input({ transform: booleanAttribute })\n    public loading = false;\n\n    // TO DO: return different tab index depending on anchor child\n    /** @hidden @internal */\n    public set tabIndex(val: number) {\n        this._tabIndex = val;\n    }\n\n    /** @hidden @internal */\n    public get tabIndex(): number {\n        if (this.disabled) {\n            return -1;\n        }\n        if (this._tabIndex === null) {\n            if (this.navService.focusedNode === null) {\n                return this.hasLinkChildren ? -1 : 0;\n            }\n            return -1;\n        }\n        return this.hasLinkChildren ? -1 : this._tabIndex;\n    }\n\n    /** @hidden @internal */\n    public override get animationSettings(): ToggleAnimationSettings {\n        return this.tree.animationSettings;\n    }\n\n    /**\n     * Gets/Sets the resource strings.\n     *\n     * @remarks\n     * Uses EN resources by default.\n     */\n    @Input()\n    public set resourceStrings(value: ITreeResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * An accessor that returns the resource strings.\n     */\n    public get resourceStrings(): ITreeResourceStrings {\n        return this._resourceStrings || this._defaultResourceStrings;\n    }\n\n    /**\n     * Gets/Sets the active state of the node\n     *\n     * @param value: boolean\n     */\n    @Input({ transform: booleanAttribute })\n    public set active(value: boolean) {\n        if (value) {\n            this.navService.activeNode = this;\n            this.tree.activeNodeBindingChange.emit(this);\n        }\n    }\n\n    public get active(): boolean {\n        return this.navService.activeNode === this;\n    }\n\n    /**\n     * Emitted when the node's `selected` property changes.\n     *\n     * ```html\n     * <igx-tree>\n     *      <igx-tree-node *ngFor=\"let node of data\" [data]=\"node\" [(selected)]=\"node.selected\">\n     *      </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * node.selectedChange.pipe(takeUntil(this.destroy$)).subscribe((e: boolean) => console.log(\"Node selection changed to \", e))\n     * ```\n     */\n    @Output()\n    public selectedChange = new EventEmitter<boolean>();\n\n    /**\n     * Emitted when the node's `expanded` property changes.\n     *\n     * ```html\n     * <igx-tree>\n     *      <igx-tree-node *ngFor=\"let node of data\" [data]=\"node\" [(expanded)]=\"node.expanded\">\n     *      </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * node.expandedChange.pipe(takeUntil(this.destroy$)).subscribe((e: boolean) => console.log(\"Node expansion state changed to \", e))\n     * ```\n     */\n    @Output()\n    public expandedChange = new EventEmitter<boolean>();\n\n    /** @hidden @internal */\n    public get focused() {\n        return this.isFocused &&\n            this.navService.focusedNode === this;\n    }\n\n    /**\n     * Retrieves the full path to the node incuding itself\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * const path: IgxTreeNode<any>[] = node.path;\n     * ```\n     */\n    public get path(): IgxTreeNode<any>[] {\n        return this.parentNode?.path ? [...this.parentNode.path, this] : [this];\n    }\n\n    // TODO: bind to disabled state when node is dragged\n    /**\n     * Gets/Sets the disabled state of the node\n     *\n     * @param value: boolean\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-tree-node--disabled')\n    public get disabled(): boolean {\n        return this._disabled;\n    }\n\n    public set disabled(value: boolean) {\n        if (value !== this._disabled) {\n            this._disabled = value;\n            this.tree.disabledChange.emit(this);\n        }\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-tree-node')\n    public cssClass = 'igx-tree-node';\n\n    /** @hidden @internal */\n    @HostBinding('attr.role')\n    public get role() {\n        return this.hasLinkChildren ? 'none' : 'treeitem';\n    }\n\n    /** @hidden @internal */\n    @ContentChildren(IgxTreeNodeLinkDirective, { read: ElementRef })\n    public linkChildren: QueryList<ElementRef>;\n\n    /** @hidden @internal */\n    @ContentChildren(IGX_TREE_NODE_COMPONENT, { read: IGX_TREE_NODE_COMPONENT })\n    public _children: QueryList<IgxTreeNode<any>>;\n\n    /** @hidden @internal */\n    @ContentChildren(IGX_TREE_NODE_COMPONENT, { read: IGX_TREE_NODE_COMPONENT, descendants: true })\n    public allChildren: QueryList<IgxTreeNode<any>>;\n\n    /**\n     * Return the child nodes of the node (if any)\n     *\n     * @remarks\n     * Returns `null` if node does not have children\n     *\n     * @example\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * const children: IgxTreeNode<any>[] = node.children;\n     * ```\n     */\n    public get children(): IgxTreeNode<any>[] {\n        return this._children?.length ? this._children.toArray() : null;\n    }\n\n    // TODO: will be used in Drag and Drop implementation\n    /** @hidden @internal */\n    @ViewChild('ghostTemplate', { read: ElementRef })\n    public header: ElementRef;\n\n    @ViewChild('defaultIndicator', { read: TemplateRef, static: true })\n    private _defaultExpandIndicatorTemplate: TemplateRef<any>;\n\n    @ViewChild('childrenContainer', { read: ElementRef })\n    private childrenContainer: ElementRef;\n\n    private get hasLinkChildren(): boolean {\n        return this.linkChildren?.length > 0 || this.registeredChildren?.length > 0;\n    }\n\n    /** @hidden @internal */\n    public isFocused: boolean;\n\n    /** @hidden @internal */\n    public registeredChildren: IgxTreeNodeLinkDirective[] = [];\n\n    private _resourceStrings: ITreeResourceStrings = null;\n    private _defaultResourceStrings = getCurrentResourceStrings(TreeResourceStringsEN);\n    private _tabIndex = null;\n    private _disabled = false;\n\n    constructor() {\n        super();\n        onResourceChangeHandle(this.destroy$, () => {\n            this._defaultResourceStrings = getCurrentResourceStrings(TreeResourceStringsEN, false);\n        }, this);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get showSelectors() {\n        return this.tree.selection !== IgxTreeSelectionType.None;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get indeterminate(): boolean {\n        return this.selectionService.isNodeIndeterminate(this);\n    }\n\n    /** The depth of the node, relative to the root\n     *\n     * ```html\n     * <igx-tree>\n     *  ...\n     *  <igx-tree-node #node>\n     *      My level is {{ node.level }}\n     *  </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[12])[0];\n     * const level: number = node.level;\n     * ```\n     */\n    public get level(): number {\n        return this.parentNode ? this.parentNode.level + 1 : 0;\n    }\n\n    /** Get/set whether the node is selected. Supporst two-way binding.\n     *\n     * ```html\n     * <igx-tree>\n     *  ...\n     *  <igx-tree-node *ngFor=\"let node of data\" [(selected)]=\"node.selected\">\n     *      {{ node.label }}\n     *  </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * const selected = node.selected;\n     * node.selected = true;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get selected(): boolean {\n        return this.selectionService.isNodeSelected(this);\n    }\n\n    public set selected(val: boolean) {\n        if (!(this.tree?.nodes && this.tree.nodes.find((e) => e === this)) && val) {\n            this.tree.forceSelect.push(this);\n            return;\n        }\n        if (val && !this.selectionService.isNodeSelected(this)) {\n            this.selectionService.selectNodesWithNoEvent([this]);\n        }\n        if (!val && this.selectionService.isNodeSelected(this)) {\n            this.selectionService.deselectNodesWithNoEvent([this]);\n        }\n    }\n\n    /** Get/set whether the node is expanded\n     *\n     * ```html\n     * <igx-tree>\n     *  ...\n     *  <igx-tree-node *ngFor=\"let node of data\" [expanded]=\"node.name === this.expandedNode\">\n     *      {{ node.label }}\n     *  </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * const expanded = node.expanded;\n     * node.expanded = true;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get expanded() {\n        return this.treeService.isExpanded(this);\n    }\n\n    public set expanded(val: boolean) {\n        if (val) {\n            this.treeService.expand(this, false);\n        } else {\n            this.treeService.collapse(this);\n        }\n    }\n\n    /** @hidden @internal */\n    public get expandIndicatorTemplate(): TemplateRef<any> {\n        return this.tree?.expandIndicator || this._defaultExpandIndicatorTemplate;\n    }\n\n    /**\n     * The native DOM element representing the node. Could be null in certain environments.\n     *\n     * ```typescript\n     * // get the nativeElement of the second node\n     * const node: IgxTreeNode = this.tree.nodes.first();\n     * const nodeElement: HTMLElement = node.nativeElement;\n     * ```\n     */\n    /** @hidden @internal */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /** @hidden @internal */\n    public ngOnInit() {\n        this.openAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(\n            () => {\n                this.tree.nodeExpanded.emit({ owner: this.tree, node: this });\n            }\n        );\n        this.closeAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.tree.nodeCollapsed.emit({ owner: this.tree, node: this });\n            this.treeService.collapse(this);\n            this.cdr.markForCheck();\n        });\n    }\n\n    /**\n     * @hidden @internal\n     * Sets the focus to the node's <a> child, if present\n     * Sets the node as the tree service's focusedNode\n     * Marks the node as the current active element\n     */\n    public handleFocus(): void {\n        if (this.disabled) {\n            return;\n        }\n        if (this.navService.focusedNode !== this) {\n            this.navService.focusedNode = this;\n        }\n        this.isFocused = true;\n        if (this.linkChildren?.length) {\n            this.linkChildren.first.nativeElement.focus();\n            return;\n        }\n        if (this.registeredChildren.length) {\n            this.registeredChildren[0].elementRef.nativeElement.focus();\n            return;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     * Clear the node's focused status\n     */\n    public clearFocus(): void {\n        this.isFocused = false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSelectorPointerDown(event) {\n        event.preventDefault();\n        event.stopPropagation()\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSelectorClick(event) {\n        // event.stopPropagation();\n        event.preventDefault();\n        // this.navService.handleFocusedAndActiveNode(this);\n        if (event.shiftKey) {\n            this.selectionService.selectMultipleNodes(this, event);\n            return;\n        }\n        if (this.selected) {\n            this.selectionService.deselectNode(this, event);\n        } else {\n            this.selectionService.selectNode(this, event);\n        }\n    }\n\n    /**\n     * Toggles the node expansion state, triggering animation\n     *\n     * ```html\n     * <igx-tree>\n     *      <igx-tree-node #node>My Node</igx-tree-node>\n     * </igx-tree>\n     * <button type=\"button\" igxButton (click)=\"node.toggle()\">Toggle Node</button>\n     * ```\n     *\n     * ```typescript\n     * const myNode: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * myNode.toggle();\n     * ```\n     */\n    public toggle() {\n        if (this.expanded) {\n            this.collapse();\n        } else {\n            this.expand();\n        }\n    }\n\n    /** @hidden @internal */\n    public indicatorClick() {\n        if(!this.tree.toggleNodeOnClick) {\n            this.toggle();\n            this.navService.setFocusedAndActiveNode(this);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onPointerDown(event) {\n        event.stopPropagation();\n\n        //Toggle the node only on left mouse click - https://w3c.github.io/pointerevents/#button-states\n        if(this.tree.toggleNodeOnClick && event.button === 0) {\n            this.toggle();\n        }\n\n        this.navService.setFocusedAndActiveNode(this);\n    }\n\n    public override ngOnDestroy() {\n        super.ngOnDestroy();\n        this.selectionService.ensureStateOnNodeDelete(this);\n    }\n\n    /**\n     * Expands the node, triggering animation\n     *\n     * ```html\n     * <igx-tree>\n     *      <igx-tree-node #node>My Node</igx-tree-node>\n     * </igx-tree>\n     * <button type=\"button\" igxButton (click)=\"node.expand()\">Expand Node</button>\n     * ```\n     *\n     * ```typescript\n     * const myNode: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * myNode.expand();\n     * ```\n     */\n    public expand() {\n        if (this.expanded && !this.treeService.collapsingNodes.has(this)) {\n            return;\n        }\n        const args: ITreeNodeTogglingEventArgs = {\n            owner: this.tree,\n            node: this,\n            cancel: false\n\n        };\n        this.tree.nodeExpanding.emit(args);\n        if (!args.cancel) {\n            this.treeService.expand(this, true);\n            this.cdr.detectChanges();\n            this.playOpenAnimation(\n                this.childrenContainer\n            );\n        }\n    }\n\n    /**\n     * Collapses the node, triggering animation\n     *\n     * ```html\n     * <igx-tree>\n     *      <igx-tree-node #node>My Node</igx-tree-node>\n     * </igx-tree>\n     * <button type=\"button\" igxButton (click)=\"node.collapse()\">Collapse Node</button>\n     * ```\n     *\n     * ```typescript\n     * const myNode: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * myNode.collapse();\n     * ```\n     */\n    public collapse() {\n        if (!this.expanded || this.treeService.collapsingNodes.has(this)) {\n            return;\n        }\n        const args: ITreeNodeTogglingEventArgs = {\n            owner: this.tree,\n            node: this,\n            cancel: false\n\n        };\n        this.tree.nodeCollapsing.emit(args);\n        if (!args.cancel) {\n            this.treeService.collapsing(this);\n            this.playCloseAnimation(\n                this.childrenContainer\n            );\n        }\n    }\n\n    /** @hidden @internal */\n    public addLinkChild(link: IgxTreeNodeLinkDirective) {\n        this._tabIndex = -1;\n        this.registeredChildren.push(link);\n    }\n\n    /** @hidden @internal */\n    public removeLinkChild(link: IgxTreeNodeLinkDirective) {\n        const index = this.registeredChildren.indexOf(link);\n        if (index !== -1) {\n            this.registeredChildren.splice(index, 1);\n        }\n    }\n}\n","<ng-template #noDragTemplate>\n    <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n</ng-template>\n\n<!-- Will switch templates depending on dragDrop -->\n<ng-template *ngTemplateOutlet=\"noDragTemplate\">\n</ng-template>\n\n@if (expanded && !loading) {\n    <div #childrenContainer\n        class=\"igx-tree-node__group\"\n        role=\"group\"\n    >\n        <ng-content select=\"igx-tree-node\"></ng-content>\n    </div>\n}\n\n\n<ng-template #defaultIndicator>\n    <igx-icon\n        [attr.aria-label]=\"expanded ? resourceStrings.igx_collapse : resourceStrings.igx_expand\"\n        [name]=\"!expanded ? 'tree_expand' : 'tree_collapse'\"\n        family=\"default\"\n    >\n    </igx-icon>\n</ng-template>\n\n<!-- separated in a template in case this ever needs to be templatable -->\n<ng-template #selectMarkerTemplate>\n    <igx-checkbox [checked]=\"selected\" [disabled]=\"disabled\" [readonly]=\"true\" [indeterminate]=\"indeterminate\" [tabindex]=\"-1\">\n    </igx-checkbox>\n</ng-template>\n\n<ng-template #headerTemplate>\n    <div #ghostTemplate class=\"igx-tree-node__wrapper\"\n        [attr.role]=\"role\"\n        [tabIndex]=\"tabIndex\"\n        [ngClass]=\"{\n            'igx-tree-node__wrapper--selected': selected,\n            'igx-tree-node__wrapper--active' : this.active,\n            'igx-tree-node__wrapper--focused' : this.focused,\n            'igx-tree-node__wrapper--disabled' : this.disabled\n        }\"\n        (pointerdown)=\"onPointerDown($event)\"\n        (focus)=\"handleFocus()\"\n        (blur)=\"clearFocus()\"\n    >\n        <div aria-hidden=\"true\">\n            @for (item of [].constructor(level); track $index) {\n                <span\n                    aria-hidden=\"true\"\n                    class=\"igx-tree-node__spacer\"\n                ></span>\n            }\n        </div>\n\n        <!-- Expand/Collapse indicator -->\n        @if (!loading) {\n            <span\n                class=\"igx-tree-node__toggle-button\"\n                [ngClass]=\"{ 'igx-tree-node__toggle-button--hidden': !_children?.length }\"\n                (click)=\"indicatorClick()\"\n            >\n                <ng-container *ngTemplateOutlet=\"expandIndicatorTemplate, context: { $implicit: expanded }\">\n                </ng-container>\n            </span>\n        }\n        @if (loading) {\n            <span class=\"igx-tree-node__toggle-button\">\n                <igx-circular-bar\n                    [animate]=\"false\"\n                    [indeterminate]=\"true\"\n                    [textVisibility]=\"false\"\n                >\n                </igx-circular-bar>\n            </span>\n        }\n\n        <!-- Item selection -->\n        @if (showSelectors) {\n            <div\n                class=\"igx-tree-node__select\"\n                (pointerdown)=\"onSelectorPointerDown($event)\"\n                (click)=\"onSelectorClick($event)\">\n                <ng-container *ngTemplateOutlet=\"selectMarkerTemplate\">\n                </ng-container>\n            </div>\n        }\n\n        <div class=\"igx-tree-node__content\">\n            <!-- Ghost content -->\n            <ng-content></ng-content>\n        </div>\n    </div>\n\n    <!--  Buffer element for 'move after' when D&D is implemented-->\n    <div class=\"igx-tree-node__drop-indicator\">\n        @for (item of [].constructor(level); track $index) {\n            <span aria-hidden=\"true\" class=\"igx-tree-node__spacer\"></span>\n        }\n        <!-- style rules target this div, do not delete it -->\n        <div></div>\n    </div>\n</ng-template>\n\n<ng-template #dragTemplate>\n    <!-- Drag drop goes here\n        igxDrop\n        #dropRef=\"drop\"\n        [igxNodeDrag]=\"this\"\n        (dragStart)=\"logDrop(dropRef)\"\n        (leave)=\"emitLeave()\"\n        (enter)=\"emitEnter()\" -->\n    <div class=\"igx-tree-node__drag-wrapper\">\n        <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n    </div>\n</ng-template>\n","import { Component, QueryList, Input, Output, EventEmitter, ContentChild, Directive, TemplateRef, OnInit, AfterViewInit, ContentChildren, OnDestroy, HostBinding, ElementRef, booleanAttribute, inject } from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil, throttleTime } from 'rxjs/operators';\n\nimport {\n    IGX_TREE_COMPONENT, IgxTreeSelectionType, IgxTree, ITreeNodeToggledEventArgs,\n    ITreeNodeTogglingEventArgs, ITreeNodeSelectionEvent, IgxTreeNode, IgxTreeSearchResolver\n} from './common';\nimport { IgxTreeNavigationService } from './tree-navigation.service';\nimport { IgxTreeNodeComponent } from './tree-node/tree-node.component';\nimport { IgxTreeSelectionService } from './tree-selection.service';\nimport { IgxTreeService } from './tree.service';\nimport { growVerIn, growVerOut } from 'igniteui-angular/animations';\nimport { PlatformUtil, resizeObservable } from 'igniteui-angular/core';\nimport { ToggleAnimationSettings } from 'igniteui-angular/expansion-panel';\n\n/**\n * @hidden @internal\n * Used for templating the select marker of the tree\n */\n@Directive({\n    selector: '[igxTreeSelectMarker]',\n    standalone: true\n})\nexport class IgxTreeSelectMarkerDirective {\n}\n\n/**\n * @hidden @internal\n * Used for templating the expand indicator of the tree\n */\n@Directive({\n    selector: '[igxTreeExpandIndicator]',\n    standalone: true\n})\nexport class IgxTreeExpandIndicatorDirective {\n}\n\n/**\n * IgxTreeComponent allows a developer to show a set of nodes in a hierarchical fashion.\n *\n * @igxModule IgxTreeModule\n * @igxKeywords tree\n * @igxTheme igx-tree-theme\n * @igxGroup Grids & Lists\n *\n * @remark\n * The Angular Tree Component allows users to represent hierarchical data in a tree-view structure,\n * maintaining parent-child relationships, as well as to define static tree-view structure without a corresponding data model.\n * Its primary purpose is to allow end-users to visualize and navigate within hierarchical data structures.\n * The Ignite UI for Angular Tree Component also provides load on demand capabilities, item activation,\n * bi-state and cascading selection of items through built-in checkboxes, built-in keyboard navigation and more.\n *\n * @example\n * ```html\n * <igx-tree>\n *   <igx-tree-node>\n *      I am a parent node 1\n *      <igx-tree-node>\n *          I am a child node 1\n *      </igx-tree-node>\n *      ...\n *   </igx-tree-node>\n *\t ...\n * </igx-tree>\n * ```\n */\n@Component({\n    selector: 'igx-tree',\n    templateUrl: 'tree.component.html',\n    providers: [\n        IgxTreeService,\n        IgxTreeSelectionService,\n        IgxTreeNavigationService,\n        { provide: IGX_TREE_COMPONENT, useExisting: IgxTreeComponent },\n    ],\n    standalone: true\n})\nexport class IgxTreeComponent implements IgxTree, OnInit, AfterViewInit, OnDestroy {\n    private navService = inject(IgxTreeNavigationService);\n    private selectionService = inject(IgxTreeSelectionService);\n    private treeService = inject(IgxTreeService);\n    private element = inject<ElementRef<HTMLElement>>(ElementRef);\n    private platform = inject(PlatformUtil);\n\n\n    @HostBinding('class.igx-tree')\n    public cssClass = 'igx-tree';\n\n    /**\n     * Gets/Sets tree selection mode\n     *\n     * @remarks\n     * By default the tree selection mode is 'None'\n     * @param selectionMode: IgxTreeSelectionType\n     */\n    @Input()\n    public get selection() {\n        return this._selection;\n    }\n\n    public set selection(selectionMode: IgxTreeSelectionType) {\n        this._selection = selectionMode;\n        this.selectionService.clearNodesSelection();\n    }\n\n    /** Get/Set how the tree should handle branch expansion.\n     * If set to `true`, only a single branch can be expanded at a time, collapsing all others\n     *\n     * ```html\n     * <igx-tree [singleBranchExpand]=\"true\">\n     * ...\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const tree: IgxTree = this.tree;\n     * this.tree.singleBranchExpand = false;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public singleBranchExpand = false;\n\n    /** Get/Set if nodes should be expanded/collapsed when clicking over them.\n     *\n     * ```html\n     * <igx-tree [toggleNodeOnClick]=\"true\">\n     * ...\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const tree: IgxTree = this.tree;\n     * this.tree.toggleNodeOnClick = false;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public toggleNodeOnClick = false;\n\n\n    /** Get/Set the animation settings that branches should use when expanding/collpasing.\n     *\n     * ```html\n     * <igx-tree [animationSettings]=\"customAnimationSettings\">\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const animationSettings: ToggleAnimationSettings = {\n     *      openAnimation: growVerIn,\n     *      closeAnimation: growVerOut\n     * };\n     *\n     * this.tree.animationSettings = animationSettings;\n     * ```\n     */\n    @Input()\n    public animationSettings: ToggleAnimationSettings = {\n        openAnimation: growVerIn,\n        closeAnimation: growVerOut\n    };\n\n    /** Emitted when the node selection is changed through interaction\n     *\n     * ```html\n     * <igx-tree (nodeSelection)=\"handleNodeSelection($event)\">\n     * </igx-tree>\n     * ```\n     *\n     *```typescript\n     * public handleNodeSelection(event: ITreeNodeSelectionEvent) {\n     *  const newSelection: IgxTreeNode<any>[] = event.newSelection;\n     *  const added: IgxTreeNode<any>[] = event.added;\n     *  console.log(\"New selection will be: \", newSelection);\n     *  console.log(\"Added nodes: \", event.added);\n     * }\n     *```\n     */\n    @Output()\n    public nodeSelection = new EventEmitter<ITreeNodeSelectionEvent>();\n\n    /** Emitted when a node is expanding, before it finishes\n     *\n     * ```html\n     * <igx-tree (nodeExpanding)=\"handleNodeExpanding($event)\">\n     * </igx-tree>\n     * ```\n     *\n     *```typescript\n     * public handleNodeExpanding(event: ITreeNodeTogglingEventArgs) {\n     *  const expandedNode: IgxTreeNode<any> = event.node;\n     *  if (expandedNode.disabled) {\n     *      event.cancel = true;\n     *  }\n     * }\n     *```\n     */\n    @Output()\n    public nodeExpanding = new EventEmitter<ITreeNodeTogglingEventArgs>();\n\n    /** Emitted when a node is expanded, after it finishes\n     *\n     * ```html\n     * <igx-tree (nodeExpanded)=\"handleNodeExpanded($event)\">\n     * </igx-tree>\n     * ```\n     *\n     *```typescript\n     * public handleNodeExpanded(event: ITreeNodeToggledEventArgs) {\n     *  const expandedNode: IgxTreeNode<any> = event.node;\n     *  console.log(\"Node is expanded: \", expandedNode.data);\n     * }\n     *```\n     */\n    @Output()\n    public nodeExpanded = new EventEmitter<ITreeNodeToggledEventArgs>();\n\n    /** Emitted when a node is collapsing, before it finishes\n     *\n     * ```html\n     * <igx-tree (nodeCollapsing)=\"handleNodeCollapsing($event)\">\n     * </igx-tree>\n     * ```\n     *\n     *```typescript\n     * public handleNodeCollapsing(event: ITreeNodeTogglingEventArgs) {\n     *  const collapsedNode: IgxTreeNode<any> = event.node;\n     *  if (collapsedNode.alwaysOpen) {\n     *      event.cancel = true;\n     *  }\n     * }\n     *```\n     */\n    @Output()\n    public nodeCollapsing = new EventEmitter<ITreeNodeTogglingEventArgs>();\n\n    /** Emitted when a node is collapsed, after it finishes\n     *\n     * @example\n     * ```html\n     * <igx-tree (nodeCollapsed)=\"handleNodeCollapsed($event)\">\n     * </igx-tree>\n     * ```\n     * ```typescript\n     * public handleNodeCollapsed(event: ITreeNodeToggledEventArgs) {\n     *  const collapsedNode: IgxTreeNode<any> = event.node;\n     *  console.log(\"Node is collapsed: \", collapsedNode.data);\n     * }\n     * ```\n     */\n    @Output()\n    public nodeCollapsed = new EventEmitter<ITreeNodeToggledEventArgs>();\n\n    /**\n     * Emitted when the active node is changed.\n     *\n     * @example\n     * ```\n     * <igx-tree (activeNodeChanged)=\"activeNodeChanged($event)\"></igx-tree>\n     * ```\n     */\n    @Output()\n    public activeNodeChanged = new EventEmitter<IgxTreeNode<any>>();\n\n    /**\n     * A custom template to be used for the expand indicator of nodes\n     * ```html\n     * <igx-tree>\n     *  <ng-template igxTreeExpandIndicator let-expanded>\n     *      <igx-icon>{{ expanded ? \"close_fullscreen\": \"open_in_full\"}}</igx-icon>\n     *  </ng-template>\n     * </igx-tree>\n     * ```\n     */\n    @ContentChild(IgxTreeExpandIndicatorDirective, { read: TemplateRef })\n    public expandIndicator: TemplateRef<any>;\n\n    /** @hidden @internal */\n    @ContentChildren(IgxTreeNodeComponent, { descendants: true })\n    public nodes: QueryList<IgxTreeNodeComponent<any>>;\n\n    /** @hidden @internal */\n    public disabledChange = new EventEmitter<IgxTreeNode<any>>();\n\n    /**\n     * Returns all **root level** nodes\n     *\n     * ```typescript\n     * const tree: IgxTree = this.tree;\n     * const rootNodes: IgxTreeNodeComponent<any>[] = tree.rootNodes;\n     * ```\n     */\n    public get rootNodes(): IgxTreeNodeComponent<any>[] {\n        return this.nodes?.filter(node => node.level === 0);\n    }\n\n    /**\n     * Emitted when the active node is set through API\n     *\n     * @hidden @internal\n     */\n    public activeNodeBindingChange = new EventEmitter<IgxTreeNode<any>>();\n\n    /** @hidden @internal */\n    public forceSelect = [];\n\n    /** @hidden @internal */\n    public resizeNotify = new Subject<void>();\n\n    private _selection: IgxTreeSelectionType = IgxTreeSelectionType.None;\n    private destroy$ = new Subject<void>();\n    private unsubChildren$ = new Subject<void>();\n\n    constructor() {\n        this.selectionService.register(this);\n        this.treeService.register(this);\n        this.navService.register(this);\n    }\n\n    /** @hidden @internal */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * Expands all of the passed nodes.\n     * If no nodes are passed, expands ALL nodes\n     *\n     * @param nodes nodes to be expanded\n     *\n     * ```typescript\n     * const targetNodes: IgxTreeNode<any> = this.tree.findNodes(true, (_data: any, node: IgxTreeNode<any>) => node.data.expandable);\n     * tree.expandAll(nodes);\n     * ```\n     */\n    public expandAll(nodes?: IgxTreeNode<any>[]) {\n        nodes = nodes || this.nodes.toArray();\n        nodes.forEach(e => e.expanded = true);\n    }\n\n    /**\n     * Collapses all of the passed nodes.\n     * If no nodes are passed, collapses ALL nodes\n     *\n     * @param nodes nodes to be collapsed\n     *\n     * ```typescript\n     * const targetNodes: IgxTreeNode<any> = this.tree.findNodes(true, (_data: any, node: IgxTreeNode<any>) => node.data.collapsible);\n     * tree.collapseAll(nodes);\n     * ```\n     */\n    public collapseAll(nodes?: IgxTreeNode<any>[]) {\n        nodes = nodes || this.nodes.toArray();\n        nodes.forEach(e => e.expanded = false);\n    }\n\n    /**\n     * Deselect all nodes if the nodes collection is empty. Otherwise, deselect the nodes in the nodes collection.\n     *\n     * @example\n     * ```typescript\n     *  const arr = [\n     *      this.tree.nodes.toArray()[0],\n     *      this.tree.nodes.toArray()[1]\n     *  ];\n     *  this.tree.deselectAll(arr);\n     * ```\n     * @param nodes: IgxTreeNodeComponent<any>[]\n     */\n    public deselectAll(nodes?: IgxTreeNodeComponent<any>[]) {\n        this.selectionService.deselectNodesWithNoEvent(nodes);\n    }\n\n    /**\n     * Returns all of the nodes that match the passed searchTerm.\n     * Accepts a custom comparer function for evaluating the search term against the nodes.\n     *\n     * @remarks\n     * Default search compares the passed `searchTerm` against the node's `data` Input.\n     * When using `findNodes` w/o a `comparer`, make sure all nodes have `data` passed.\n     *\n     * @param searchTerm The data of the searched node\n     * @param comparer A custom comparer function that evaluates the passed `searchTerm` against all nodes.\n     * @returns Array of nodes that match the search. `null` if no nodes are found.\n     *\n     * ```html\n     * <igx-tree>\n     *     <igx-tree-node *ngFor=\"let node of data\" [data]=\"node\">\n     *          {{ node.label }}\n     *     </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * public data: DataEntry[] = FETCHED_DATA;\n     * ...\n     * const matchedNodes: IgxTreeNode<DataEntry>[] = this.tree.findNodes<DataEntry>(searchTerm: data[5]);\n     * ```\n     *\n     * Using a custom comparer\n     * ```typescript\n     * public data: DataEntry[] = FETCHED_DATA;\n     * ...\n     * const comparer: IgxTreeSearchResolver = (data: any, node: IgxTreeNode<DataEntry>) {\n     *      return node.data.index % 2 === 0;\n     * }\n     * const evenIndexNodes: IgxTreeNode<DataEntry>[] = this.tree.findNodes<DataEntry>(null, comparer);\n     * ```\n     */\n    public findNodes(searchTerm: any, comparer?: IgxTreeSearchResolver): IgxTreeNodeComponent<any>[] | null {\n        const compareFunc = comparer || this._comparer;\n        const results = this.nodes.filter(node => compareFunc(searchTerm, node));\n        return results?.length === 0 ? null : results;\n    }\n\n    /** @hidden @internal */\n    public handleKeydown(event: KeyboardEvent) {\n        this.navService.handleKeydown(event);\n    }\n\n    /** @hidden @internal */\n    public ngOnInit() {\n        this.disabledChange.pipe(takeUntil(this.destroy$)).subscribe((e) => {\n            this.navService.update_disabled_cache(e);\n        });\n        this.activeNodeBindingChange.pipe(takeUntil(this.destroy$)).subscribe((node) => {\n            this.expandToNode(this.navService.activeNode);\n            this.scrollNodeIntoView(node?.header?.nativeElement);\n        });\n        this.subToCollapsing();\n        this.resizeNotify.pipe(\n            throttleTime(40, null, { trailing: true }),\n            takeUntil(this.destroy$)\n        )\n        .subscribe(() => {\n            requestAnimationFrame(() => {\n                this.scrollNodeIntoView(this.navService.activeNode?.header.nativeElement);\n            });\n        });\n    }\n\n    /** @hidden @internal */\n    public ngAfterViewInit() {\n        this.nodes.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.subToChanges();\n        });\n        this.scrollNodeIntoView(this.navService.activeNode?.header?.nativeElement);\n        this.subToChanges();\n        resizeObservable(this.nativeElement).pipe(takeUntil(this.destroy$)).subscribe(() => this.resizeNotify.next());\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy() {\n        this.unsubChildren$.next();\n        this.unsubChildren$.complete();\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private expandToNode(node: IgxTreeNode<any>) {\n        if (node && node.parentNode) {\n            node.path.forEach(n => {\n                if (n !== node && !n.expanded) {\n                    n.expanded = true;\n                }\n            });\n        }\n    }\n\n    private subToCollapsing() {\n        this.nodeCollapsing.pipe(takeUntil(this.destroy$)).subscribe(event => {\n            if (event.cancel) {\n                return;\n            }\n            this.navService.update_visible_cache(event.node, false);\n        });\n        this.nodeExpanding.pipe(takeUntil(this.destroy$)).subscribe(event => {\n            if (event.cancel) {\n                return;\n            }\n            this.navService.update_visible_cache(event.node, true);\n        });\n    }\n\n    private subToChanges() {\n        this.unsubChildren$.next();\n        const toBeSelected = [...this.forceSelect];\n        if(this.platform.isBrowser) {\n            requestAnimationFrame(() => {\n                this.selectionService.selectNodesWithNoEvent(toBeSelected);\n            });\n        }\n        this.forceSelect = [];\n        this.nodes.forEach(node => {\n            node.expandedChange.pipe(takeUntil(this.unsubChildren$)).subscribe(nodeState => {\n                this.navService.update_visible_cache(node, nodeState);\n            });\n            node.closeAnimationDone.pipe(takeUntil(this.unsubChildren$)).subscribe(() => {\n                const targetElement = this.navService.focusedNode?.header.nativeElement;\n                this.scrollNodeIntoView(targetElement);\n            });\n            node.openAnimationDone.pipe(takeUntil(this.unsubChildren$)).subscribe(() => {\n                const targetElement = this.navService.focusedNode?.header.nativeElement;\n                this.scrollNodeIntoView(targetElement);\n            });\n        });\n        this.navService.init_invisible_cache();\n    }\n\n    private scrollNodeIntoView(el: HTMLElement) {\n        if (!el) {\n            return;\n        }\n        const nodeRect = el.getBoundingClientRect();\n        const treeRect = this.nativeElement.getBoundingClientRect();\n        const topOffset = treeRect.top > nodeRect.top ? nodeRect.top - treeRect.top : 0;\n        const bottomOffset = treeRect.bottom < nodeRect.bottom ? nodeRect.bottom - treeRect.bottom : 0;\n        const shouldScroll = !!topOffset || !!bottomOffset;\n        if (shouldScroll && this.nativeElement.scrollHeight > this.nativeElement.clientHeight) {\n            // this.nativeElement.scrollTop = nodeRect.y - treeRect.y - nodeRect.height;\n            this.nativeElement.scrollTop =\n                this.nativeElement.scrollTop + bottomOffset + topOffset + (topOffset ? -1 : +1) * nodeRect.height;\n        }\n    }\n\n    private _comparer = <T>(data: T, node: IgxTreeNodeComponent<T>) => node.data === data;\n\n}\n","<div class=\"igx-tree__root\" role=\"tree\" (keydown)=\"handleKeydown($event)\">\n    <ng-content select=\"igx-tree-node\"></ng-content>\n</div>\n","import { IgxTreeNodeComponent, IgxTreeNodeLinkDirective } from './tree-node/tree-node.component';\nimport { IgxTreeComponent, IgxTreeExpandIndicatorDirective } from './tree.component';\n\nexport { IgxTreeComponent, IgxTreeExpandIndicatorDirective } from './tree.component';\nexport * from './tree-node/tree-node.component';\nexport { IgxTreeSearchResolver, ITreeNodeSelectionEvent, ITreeNodeEditingEvent,\n    ITreeNodeEditedEvent, ITreeNodeTogglingEventArgs, ITreeNodeToggledEventArgs,\n    IgxTreeSelectionType, IgxTree, IgxTreeNode\n} from './common';\n\n/* NOTE: Tree directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_TREE_DIRECTIVES = [\n    IgxTreeComponent,\n    IgxTreeNodeComponent,\n    IgxTreeNodeLinkDirective,\n    IgxTreeExpandIndicatorDirective\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IGX_TREE_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_TREE_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_TREE_DIRECTIVES\n    ]\n})\nexport class IgxTreeModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.IgxTreeComponent","i2.IgxTreeNodeComponent","i2.IgxTreeNodeLinkDirective","i1.IgxTreeExpandIndicatorDirective"],"mappings":"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"}