{"version":3,"file":"primeng-tree.mjs","sources":["../../src/tree/tree-token.ts","../../src/tree/style/treestyle.ts","../../src/tree/tree-node.ts","../../src/tree/tree.ts","../../src/tree/primeng-tree.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const TREE_INSTANCE = new InjectionToken<any>('TREE_INSTANCE');\nexport const TREENODE_INSTANCE = new InjectionToken<any>('TREENODE_INSTANCE');\n","import { Injectable } from '@angular/core';\nimport { style } from '@primeuix/styles/tree';\nimport { BaseStyle } from 'primeng/base';\n\nconst classes = {\n    root: ({ instance }) => [\n        'p-tree p-component',\n        {\n            'p-tree-selectable': instance.selectionMode() != null,\n            'p-tree-loading': instance.loading(),\n            'p-tree-flex-scrollable': instance.scrollHeight() === 'flex',\n            'p-tree-node-dragover': instance.dragHover\n        }\n    ],\n    mask: 'p-tree-mask p-overlay-mask',\n    loadingIcon: 'p-tree-loading-icon',\n    pcFilterInput: 'p-tree-filter-input',\n    wrapper: 'p-tree-root',\n    rootChildren: 'p-tree-root-children',\n    node: ({ instance }) => ({ 'p-tree-node': true, 'p-tree-node-leaf': instance.isLeaf() }),\n    nodeContent: ({ instance }) => ({\n        'p-tree-node-content': true,\n        'p-tree-node-selectable': instance.selectable,\n        'p-tree-node-dragover': instance.isNodeDropActive(),\n        'p-tree-node-selected': instance.tree.selectionMode() === 'checkbox' && instance.tree.highlightOnSelect() ? instance.checked : instance.selected,\n        'p-tree-node-contextmenu-selected': instance.isContextMenuSelected()\n    }),\n    nodeToggleButton: 'p-tree-node-toggle-button',\n    nodeToggleIcon: 'p-tree-node-toggle-icon',\n    nodeCheckbox: 'p-tree-node-checkbox',\n    nodeIcon: 'p-tree-node-icon',\n    nodeLabel: 'p-tree-node-label',\n    nodeChildren: 'p-tree-node-children',\n    emptyMessage: 'p-tree-empty-message',\n    dropPoint: 'p-tree-node-drop-point'\n};\n\n@Injectable()\nexport class TreeStyle extends BaseStyle {\n    name = 'tree';\n\n    style = style;\n\n    classes = classes;\n}\n\n/**\n *\n * Tree is used to display hierarchical data.\n *\n * [Live Demo](https://www.primeng.org/tree/)\n *\n * @module treestyle\n *\n */\nexport enum TreeClasses {\n    /**\n     * Class name of the root element\n     */\n    root = 'p-tree',\n    /**\n     * Class name of the mask element\n     */\n    mask = 'p-tree-mask',\n    /**\n     * Class name of the loading icon element\n     */\n    loadingIcon = 'p-tree-loading-icon',\n    /**\n     * Class name of the filter input element\n     */\n    pcFilterInput = 'p-tree-filter-input',\n    /**\n     * Class name of the wrapper element\n     */\n    wrapper = 'p-tree-root',\n    /**\n     * Class name of the root children element\n     */\n    rootChildren = 'p-tree-root-children',\n    /**\n     * Class name of the node element\n     */\n    node = 'p-tree-node',\n    /**\n     * Class name of the node content element\n     */\n    nodeContent = 'p-tree-node-content',\n    /**\n     * Class name of the node toggle button element\n     */\n    nodeToggleButton = 'p-tree-node-toggle-button',\n    /**\n     * Class name of the node toggle icon element\n     */\n    nodeToggleIcon = 'p-tree-node-toggle-icon',\n    /**\n     * Class name of the node checkbox element\n     */\n    nodeCheckbox = 'p-tree-node-checkbox',\n    /**\n     * Class name of the node icon element\n     */\n    nodeIcon = 'p-tree-node-icon',\n    /**\n     * Class name of the node label element\n     */\n    nodeLabel = 'p-tree-node-label',\n    /**\n     * Class name of the node children element\n     */\n    nodeChildren = 'p-tree-node-children',\n    /**\n     * Class name of the empty message element\n     */\n    emptyMessage = 'p-tree-empty-message',\n    /**\n     * Class name of the drop point element\n     */\n    dropPoint = 'p-tree-node-droppoint'\n}\n\nexport interface TreeStyle extends BaseStyle {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, computed, inject, input, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { find, findSingle, focus, getOuterHeight, getOuterWidth } from '@primeuix/utils';\nimport { TreeNode } from 'primeng/api';\nimport { BaseComponent, PARENT_INSTANCE } from 'primeng/basecomponent';\nimport { Bind } from 'primeng/bind';\nimport { Checkbox } from 'primeng/checkbox';\nimport { ChevronDown as ChevronDownIcon } from '@primeicons/angular/chevron-down';\nimport { ChevronRight as ChevronRightIcon } from '@primeicons/angular/chevron-right';\nimport { Spinner as SpinnerIcon } from '@primeicons/angular/spinner';\nimport { Ripple } from 'primeng/ripple';\nimport { TreeLoadingMode, TreePassThrough } from 'primeng/types/tree';\nimport type { Tree } from './tree';\nimport { TREE_INSTANCE, TREENODE_INSTANCE } from './tree-token';\nimport { TreeStyle } from './style/treestyle';\n\n@Component({\n    selector: 'p-treenode',\n    standalone: true,\n    imports: [NgTemplateOutlet, Ripple, Checkbox, FormsModule, ChevronRightIcon, ChevronDownIcon, SpinnerIcon, Bind],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        @if (node()) {\n            <li\n                [class]=\"cn(cx('node'), node()!.styleClass)\"\n                [style.height.px]=\"itemSize()\"\n                [style]=\"node()!.style\"\n                [attr.aria-label]=\"node()!.label\"\n                [attr.aria-checked]=\"checked\"\n                [attr.aria-setsize]=\"ariaSetSize\"\n                [attr.aria-selected]=\"selected\"\n                [attr.aria-expanded]=\"ariaExpanded\"\n                [attr.aria-posinset]=\"ariaPosInSet()\"\n                [attr.aria-level]=\"ariaLevel()\"\n                [attr.tabindex]=\"nodeTabindex()\"\n                [attr.data-id]=\"node()!.key\"\n                role=\"treeitem\"\n                (keydown)=\"onKeyDown($event)\"\n                [pBind]=\"getPTOptions('node')\"\n            >\n                @if (isPrevDropPointActive()) {\n                    <div [class]=\"cx('dropPoint')\" [attr.aria-hidden]=\"true\" [pBind]=\"getPTOptions('dropPoint')\"></div>\n                }\n                <div\n                    [class]=\"cx('nodeContent')\"\n                    [style.paddingLeft]=\"nodeContentPaddingLeft()\"\n                    (click)=\"onNodeClick($event)\"\n                    (contextmenu)=\"onNodeRightClick($event)\"\n                    (dblclick)=\"onNodeDblClick($event)\"\n                    (touchend)=\"onNodeTouchEnd()\"\n                    (drop)=\"onNodeDrop($event)\"\n                    (dragstart)=\"onNodeDragStart($event)\"\n                    (dragover)=\"onNodeDragOver($event)\"\n                    (dragleave)=\"onNodeDragLeave($event)\"\n                    (dragend)=\"onNodeDragEnd($event)\"\n                    [draggable]=\"tree.draggableNodes()\"\n                    [pBind]=\"getPTOptions('nodeContent')\"\n                >\n                    <button type=\"button\" [class]=\"cx('nodeToggleButton')\" (click)=\"toggle($event)\" pRipple tabindex=\"-1\" [pBind]=\"getPTOptions('nodeToggleButton')\">\n                        @if (!tree.togglerIconTemplate()) {\n                            @if (!node()!.loading) {\n                                @if (!node()!.expanded) {\n                                    <svg data-p-icon=\"chevron-right\" [class]=\"cx('nodeToggleIcon')\" [pBind]=\"getPTOptions('nodeToggleIcon')\" />\n                                }\n                                @if (node()!.expanded) {\n                                    <svg data-p-icon=\"chevron-down\" [class]=\"cx('nodeToggleIcon')\" [pBind]=\"getPTOptions('nodeToggleIcon')\" />\n                                }\n                            }\n                            @if (showLoadingSpinner) {\n                                <svg data-p-icon=\"spinner\" [class]=\"cx('nodeToggleIcon')\" [spin]=\"true\" [pBind]=\"getPTOptions('nodeToggleIcon')\" />\n                            }\n                        }\n                        @if (tree.togglerIconTemplate()) {\n                            <span [class]=\"cx('nodeToggleIcon')\" [pBind]=\"getPTOptions('nodeToggleIcon')\">\n                                <ng-template *ngTemplateOutlet=\"tree.togglerIconTemplate()!; context: togglerIconContext\"></ng-template>\n                            </span>\n                        }\n                    </button>\n\n                    @if (tree.selectionMode() == 'checkbox') {\n                        <p-checkbox\n                            [ngModel]=\"isSelected()\"\n                            [class]=\"cx('nodeCheckbox')\"\n                            [binary]=\"true\"\n                            [indeterminate]=\"node()!.partialSelected\"\n                            [disabled]=\"node()!.selectable === false\"\n                            [variant]=\"checkboxVariant()\"\n                            [attr.data-p-partialchecked]=\"node()!.partialSelected\"\n                            [tabindex]=\"-1\"\n                            (click)=\"$event.preventDefault()\"\n                            [pt]=\"getPTOptions('pcNodeCheckbox')\"\n                            [unstyled]=\"unstyled()\"\n                        >\n                            @if (tree.checkboxIconTemplate()) {\n                                <ng-template #icon>\n                                    <ng-template *ngTemplateOutlet=\"tree.checkboxIconTemplate()!; context: checkboxIconContext\"></ng-template>\n                                </ng-template>\n                            }\n                        </p-checkbox>\n                    }\n\n                    @if (hasNodeIcon) {\n                        <span [class]=\"getIcon()\" [pBind]=\"getPTOptions('nodeIcon')\"></span>\n                    }\n                    <span [class]=\"cx('nodeLabel')\" [pBind]=\"getPTOptions('nodeLabel')\">\n                        @if (!tree.getTemplateForNode(node()!)) {\n                            <span>{{ node()!.label }}</span>\n                        }\n                        @if (tree.getTemplateForNode(node()!)) {\n                            <span>\n                                <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node()!)!; context: { $implicit: node() }\"></ng-container>\n                            </span>\n                        }\n                    </span>\n                </div>\n                @if (isNextDropPointActive()) {\n                    <div [class]=\"cx('dropPoint', { next: true })\" [attr.aria-hidden]=\"true\" [pBind]=\"getPTOptions('dropPoint')\"></div>\n                }\n                @if (showChildren) {\n                    <ul [class]=\"cx('nodeChildren')\" role=\"group\" [pBind]=\"ptm('nodeChildren')\">\n                        @for (childNode of node()!.children; track tree.trackBy()($index, childNode); let firstChild = $first; let lastChild = $last; let idx = $index) {\n                            <p-treenode\n                                [node]=\"childNode\"\n                                [parentNode]=\"node()\"\n                                [firstChild]=\"firstChild\"\n                                [lastChild]=\"lastChild\"\n                                [index]=\"idx\"\n                                [itemSize]=\"itemSize()\"\n                                [level]=\"level()! + 1\"\n                                [loadingMode]=\"loadingMode()\"\n                                [pt]=\"pt\"\n                                [unstyled]=\"unstyled()\"\n                            />\n                        }\n                    </ul>\n                }\n            </li>\n        }\n    `,\n    encapsulation: ViewEncapsulation.None,\n    providers: [TreeStyle, { provide: TREENODE_INSTANCE, useExisting: UITreeNode }, { provide: PARENT_INSTANCE, useExisting: UITreeNode }]\n})\nexport class UITreeNode extends BaseComponent<TreePassThrough> {\n    $pcTreeNode: UITreeNode | undefined = inject(TREENODE_INSTANCE, { optional: true, skipSelf: true }) ?? undefined;\n\n    static ICON_CLASS: string = 'p-tree-node-icon ';\n\n    rowNode = input<any>();\n\n    node = input<TreeNode<any> | undefined>();\n\n    parentNode = input<TreeNode<any> | undefined>();\n\n    root = input(false, { transform: booleanAttribute });\n\n    index = input<number | undefined>();\n\n    firstChild = input(false, { transform: booleanAttribute });\n\n    lastChild = input(false, { transform: booleanAttribute });\n\n    level = input<number | undefined>();\n\n    indentation = input<number | undefined>();\n\n    itemSize = input<number | undefined>();\n\n    loadingMode = input<TreeLoadingMode>();\n\n    tree = inject<Tree>(TREE_INSTANCE);\n\n    timeout: any;\n\n    isPrevDropPointHovered = signal<boolean>(false);\n\n    isNextDropPointHovered = signal<boolean>(false);\n\n    isNodeDropHovered = signal<boolean>(false);\n\n    isPrevDropPointActive = computed(() => this.isPrevDropPointHovered() && this.isDroppable());\n\n    isNextDropPointActive = computed(() => this.isNextDropPointHovered() && this.isDroppable());\n\n    isNodeDropActive = computed(() => this.isNodeDropHovered() && this.isNodeDroppable());\n\n    dropPosition = computed(() => (this.isPrevDropPointActive() ? -1 : this.isNextDropPointActive() ? 1 : 0));\n\n    get ariaSetSize() {\n        return this.node()?.children?.length ?? 0;\n    }\n\n    get ariaExpanded() {\n        return this.node()?.expanded;\n    }\n\n    ariaPosInSet = computed(() => (this.index() ?? 0) + 1);\n\n    ariaLevel = computed(() => (this.level() ?? 0) + 1);\n\n    nodeTabindex = computed(() => (this.index() === 0 ? 0 : -1));\n\n    nodeContentPaddingLeft = computed(() => this.level()! * this.indentation()! + 'rem');\n\n    get hasNodeIcon() {\n        return !!(this.node()?.icon || this.node()?.expandedIcon || this.node()?.collapsedIcon);\n    }\n\n    get showChildren() {\n        return !this.tree.virtualScroll() && !!this.node()?.children && !!this.node()?.expanded;\n    }\n\n    get showLoadingSpinner() {\n        return this.loadingMode() === 'icon' && !!this.node()?.loading;\n    }\n\n    checkboxVariant = computed(() => this.tree?.config.inputVariant() || 'outlined');\n\n    get togglerIconContext() {\n        return {\n            $implicit: this.node()?.expanded,\n            loading: this.node()?.loading\n        };\n    }\n\n    get checkboxIconContext() {\n        return {\n            $implicit: this.isSelected(),\n            partialSelected: this.node()?.partialSelected,\n            class: this.cx('nodeCheckbox')\n        };\n    }\n\n    _componentStyle = inject(TreeStyle);\n\n    /**\n     * Computed signal that reactively tracks selection state.\n     */\n    private _selected = computed(() => {\n        // Reading selection() makes this computed reactive to selection changes\n        this.tree.selection();\n        return this.tree.isSelected(<TreeNode>this.node());\n    });\n\n    /**\n     * Computed signal that reactively tracks context menu selection state.\n     */\n    private _contextMenuSelected = computed(() => {\n        const selection = this.tree.contextMenuSelection();\n        const node = this.node();\n        if (!selection || !node) {\n            return false;\n        }\n        return selection === node || (selection.key && selection.key === node.key);\n    });\n\n    get selected() {\n        return this.tree.selectionMode() === 'single' || this.tree.selectionMode() === 'multiple' ? this._selected() : undefined;\n    }\n\n    get checked() {\n        return this.tree.selectionMode() === 'checkbox' ? this._selected() : undefined;\n    }\n\n    get nodeClass() {\n        return this.tree._componentStyle.classes.node({ instance: this });\n    }\n\n    get selectable() {\n        return this.node()?.selectable === false ? false : this.tree?.selectionMode() != null;\n    }\n\n    get subNodes(): TreeNode[] | undefined {\n        return this.node()?.parent ? this.node()!.parent!.children : this.tree.value();\n    }\n\n    getPTOptions(key: string) {\n        return this.ptm(key, {\n            context: {\n                node: this.node(),\n                index: this.index(),\n                expanded: this.node()?.expanded,\n                selected: this.selected,\n                checked: this.checked,\n                partialChecked: this.node()?.partialSelected,\n                leaf: this.isLeaf()\n            }\n        });\n    }\n\n    onInit() {\n        (<TreeNode>this.node()).parent = this.parentNode();\n        const nativeElement = this.tree.el.nativeElement;\n        const pDialogWrapper = nativeElement.closest('p-dialog');\n        if (this.parentNode() && !pDialogWrapper) {\n            this.setAllNodesTabIndexes();\n            this.tree.syncNodeOption(<TreeNode>this.node(), <TreeNode<any>[]>this.tree.value(), 'parent', this.tree.getNodeWithKey(<string>this.parentNode()!.key, <TreeNode<any>[]>this.tree.value()));\n        }\n    }\n\n    getIcon() {\n        let icon: string | undefined;\n        const node = this.node();\n\n        if ((<TreeNode>node).icon) icon = (<TreeNode>node).icon as string;\n        else icon = (<TreeNode>node).expanded && (<TreeNode>node).children && (<TreeNode>node).children?.length ? (<TreeNode>node).expandedIcon : (<TreeNode>node).collapsedIcon;\n\n        return UITreeNode.ICON_CLASS + ' ' + icon + ' p-tree-node-icon';\n    }\n\n    isLeaf() {\n        return this.tree.isNodeLeaf(<TreeNode>this.node());\n    }\n\n    isSelected() {\n        return this._selected();\n    }\n\n    isContextMenuSelected() {\n        return this._contextMenuSelected();\n    }\n\n    isSameNode(event) {\n        return event.currentTarget && (event.currentTarget.isSameNode(event.target) || event.currentTarget.isSameNode(event.target.closest('[role=\"treeitem\"]')));\n    }\n\n    isDraggable() {\n        return this.tree.draggableNodes();\n    }\n\n    isDroppable() {\n        return this.tree.droppableNodes() && this.tree.allowDrop(<TreeNode>this.tree.dragNode, <TreeNode>this.node(), this.tree.dragNodeScope);\n    }\n\n    isNodeDroppable() {\n        return (<TreeNode>this.node())?.droppable !== false && this.isDroppable();\n    }\n\n    isNodeDraggable() {\n        return (<TreeNode>this.node())?.draggable !== false && this.isDraggable();\n    }\n\n    toggle(event: Event) {\n        if ((<TreeNode>this.node()).expanded) this.collapse(event);\n        else this.expand(event);\n\n        event.stopPropagation();\n    }\n\n    expand(event: Event) {\n        (<TreeNode>this.node()).expanded = true;\n        this.tree.setNodeCollapsed(<TreeNode>this.node(), false);\n        if (this.tree.virtualScroll()) {\n            this.tree.updateSerializedValue();\n            this.focusVirtualNode();\n        }\n        this.tree.onNodeExpand.emit({ originalEvent: event, node: <TreeNode>this.node() });\n    }\n\n    collapse(event: Event) {\n        (<TreeNode>this.node()).expanded = false;\n        this.tree.setNodeCollapsed(<TreeNode>this.node(), true);\n        if (this.tree.virtualScroll()) {\n            this.tree.updateSerializedValue();\n        }\n        this.tree.onNodeCollapse.emit({ originalEvent: event, node: <TreeNode>this.node() });\n        this.focusVirtualNode();\n    }\n\n    onNodeClick(event: MouseEvent) {\n        this.tree.onNodeClick(event, <TreeNode>this.node());\n    }\n\n    onNodeKeydown(event: KeyboardEvent) {\n        if (event.key === 'Enter') {\n            this.tree.onNodeClick(event, <TreeNode>this.node());\n        }\n    }\n\n    onNodeTouchEnd() {\n        this.tree.onNodeTouchEnd();\n    }\n\n    onNodeRightClick(event: MouseEvent) {\n        this.tree.onNodeRightClick(event, <TreeNode>this.node());\n    }\n\n    onNodeDblClick(event: MouseEvent) {\n        this.tree.onNodeDblClick(event, <TreeNode>this.node());\n    }\n\n    insertNodeOnDrop() {\n        const { dragNode, dragNodeIndex, dragNodeSubNodes } = this.tree;\n\n        if (!this.node() || dragNodeIndex == null || !dragNode || !dragNodeSubNodes) {\n            return;\n        }\n\n        const position = this.dropPosition();\n        const subNodes = this.subNodes || [];\n        const index = this.index() || 0;\n        const dropIndex = dragNodeSubNodes === subNodes ? (dragNodeIndex > index ? index : index - 1) : index;\n\n        dragNodeSubNodes.splice(dragNodeIndex, 1);\n\n        if (position < 0) {\n            // insert before a Node\n            subNodes.splice(dropIndex, 0, dragNode);\n        } else if (position > 0) {\n            // insert after a Node\n            subNodes.splice(dropIndex + 1, 0, dragNode);\n        } else {\n            // insert as child of a Node\n            this.node()!.children = this.node()!.children || [];\n            this.node()!.children!.push(dragNode);\n        }\n\n        this.tree.dragDropService!.stopDrag({\n            node: dragNode,\n            subNodes,\n            index: dragNodeIndex\n        });\n    }\n\n    onNodeDrop(event: any) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        if (this.isDroppable()) {\n            const { dragNode } = this.tree;\n            const position = this.dropPosition();\n            const isValidDrop = position !== 0 || (position === 0 && this.isNodeDroppable());\n            const dropPoint: 'node' | 'between' = position === 0 ? 'node' : 'between';\n\n            if (isValidDrop) {\n                if (this.tree.validateDrop()) {\n                    this.tree.onNodeDrop.emit({\n                        originalEvent: event,\n                        dragNode: dragNode,\n                        dropNode: this.node(),\n                        index: this.index(),\n                        dropPoint: dropPoint,\n                        accept: () => {\n                            this.insertNodeOnDrop();\n                        }\n                    });\n                } else {\n                    this.insertNodeOnDrop();\n                    this.tree.onNodeDrop.emit({\n                        originalEvent: event,\n                        dragNode: dragNode,\n                        dropNode: this.node(),\n                        index: this.index(),\n                        dropPoint: dropPoint\n                    });\n                }\n            }\n        }\n\n        this.isPrevDropPointHovered.set(false);\n        this.isNextDropPointHovered.set(false);\n        this.isNodeDropHovered.set(false);\n    }\n\n    onNodeDragStart(event: any) {\n        if (this.isNodeDraggable()) {\n            event.dataTransfer.effectAllowed = 'all';\n            event.dataTransfer?.setData('text', 'data');\n\n            const target = event.currentTarget as HTMLElement;\n            const dragEl = target.cloneNode(true) as HTMLElement;\n            const toggler = <HTMLElement>dragEl.querySelector('[data-pc-section=\"nodetogglebutton\"]');\n            const checkbox = <HTMLElement>dragEl.querySelector('[data-pc-name=\"pcnodecheckbox\"]');\n\n            target.setAttribute('data-p-dragging', 'true');\n            dragEl.style.width = getOuterWidth(target) + 'px';\n            dragEl.style.height = getOuterHeight(target) + 'px';\n            dragEl.setAttribute('data-pc-section', 'drag-image');\n            toggler.style.visibility = 'hidden';\n            checkbox?.remove();\n            document.body.appendChild(dragEl);\n\n            event.dataTransfer?.setDragImage(dragEl, 0, 0);\n\n            setTimeout(() => document.body.removeChild(dragEl), 0);\n\n            this.tree.dragDropService!.startDrag({\n                tree: this,\n                node: this.node(),\n                subNodes: this.subNodes,\n                index: this.index(),\n                scope: this.tree.draggableScope()\n            });\n        } else {\n            event.preventDefault();\n        }\n    }\n\n    onNodeDragOver(event: any) {\n        if (this.isDroppable()) {\n            event.dataTransfer.dropEffect = 'copy';\n\n            const nodeElement = event.currentTarget as HTMLElement;\n            const rect = nodeElement.getBoundingClientRect();\n            const y = event.clientY - parseInt(rect.top as any);\n\n            this.isPrevDropPointHovered.set(false);\n            this.isNextDropPointHovered.set(false);\n            this.isNodeDropHovered.set(false);\n\n            if (y < rect.height * 0.25) {\n                this.isPrevDropPointHovered.set(true);\n            } else if (y > rect.height * 0.75) {\n                this.isNextDropPointHovered.set(true);\n            } else if (this.isNodeDroppable()) {\n                this.isNodeDropHovered.set(true);\n            }\n        } else {\n            event.dataTransfer.dropEffect = 'none';\n        }\n\n        if (this.tree.droppableNodes()) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    }\n\n    onNodeDragLeave() {\n        this.isPrevDropPointHovered.set(false);\n        this.isNextDropPointHovered.set(false);\n        this.isNodeDropHovered.set(false);\n    }\n\n    onNodeDragEnd(event: any) {\n        event.currentTarget?.removeAttribute('data-p-dragging');\n\n        this.tree.dragDropService!.stopDrag({\n            node: this.node(),\n            subNodes: this.subNodes,\n            index: this.index()\n        });\n    }\n\n    onKeyDown(event: KeyboardEvent) {\n        if (!this.isSameNode(event) || (this.tree.contextMenu() && this.tree.contextMenu().containerViewChild?.nativeElement.style.display === 'block')) {\n            return;\n        }\n\n        switch (event.code) {\n            //down arrow\n            case 'ArrowDown':\n                this.onArrowDown(event);\n                break;\n\n            //up arrow\n            case 'ArrowUp':\n                this.onArrowUp(event);\n                break;\n\n            //right arrow\n            case 'ArrowRight':\n                this.onArrowRight(event);\n                break;\n\n            //left arrow\n            case 'ArrowLeft':\n                this.onArrowLeft(event);\n                break;\n\n            //enter\n            case 'Enter':\n            case 'Space':\n            case 'NumpadEnter':\n                this.onEnter(event);\n                break;\n            //tab\n            case 'Tab':\n                this.setAllNodesTabIndexes();\n                break;\n\n            default:\n                //no op\n                break;\n        }\n    }\n\n    onArrowUp(event: KeyboardEvent) {\n        const nodeElement = (<HTMLDivElement>event.target).getAttribute('data-pc-section') === 'nodetogglebutton' ? (<HTMLDivElement>event.target).closest('[role=\"treeitem\"]') : (<HTMLDivElement>event.target).parentElement;\n\n        if (nodeElement?.previousElementSibling) {\n            this.focusRowChange(nodeElement, nodeElement.previousElementSibling, this.findLastVisibleDescendant(nodeElement.previousElementSibling));\n        } else {\n            let parentNodeElement = this.getParentNodeElement(nodeElement!);\n\n            if (parentNodeElement) {\n                this.focusRowChange(nodeElement, parentNodeElement);\n            }\n        }\n\n        event.preventDefault();\n    }\n\n    onArrowDown(event: KeyboardEvent) {\n        const nodeElement = (<HTMLDivElement>event.target).getAttribute('data-pc-section') === 'nodetogglebutton' ? (<HTMLDivElement>event.target).closest('[role=\"treeitem\"]') : <HTMLDivElement>event.target;\n        const listElement = nodeElement?.children[1];\n\n        if (listElement && listElement.children.length > 0) {\n            this.focusRowChange(nodeElement, listElement.children[0]);\n        } else {\n            if (nodeElement?.parentElement?.nextElementSibling) {\n                this.focusRowChange(nodeElement, nodeElement.parentElement.nextElementSibling);\n            } else {\n                let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement?.parentElement!);\n\n                if (nextSiblingAncestor) {\n                    this.focusRowChange(nodeElement, nextSiblingAncestor);\n                }\n            }\n        }\n        event.preventDefault();\n    }\n\n    onArrowRight(event: KeyboardEvent) {\n        if (!this.node()?.expanded && !this.tree.isNodeLeaf(<TreeNode>this.node())) {\n            this.expand(event);\n            (<HTMLDivElement>event.currentTarget).tabIndex = -1;\n\n            setTimeout(() => {\n                this.onArrowDown(event);\n            }, 1);\n        }\n        event.preventDefault();\n    }\n\n    onArrowLeft(event: KeyboardEvent) {\n        const nodeElement = (<HTMLDivElement>event.target).getAttribute('data-pc-section') === 'nodetogglebutton' ? (<HTMLDivElement>event.target).closest('[role=\"treeitem\"]') : <HTMLDivElement>event.target;\n\n        if (this.level() === 0 && !this.node()?.expanded) {\n            return false;\n        }\n\n        if (this.node()?.expanded) {\n            this.collapse(event);\n            return;\n        }\n\n        let parentNodeElement = this.getParentNodeElement(nodeElement?.parentElement!);\n\n        if (parentNodeElement) {\n            this.focusRowChange(event.currentTarget, parentNodeElement);\n        }\n\n        event.preventDefault();\n    }\n\n    onEnter(event: KeyboardEvent) {\n        this.tree.onNodeClick(event, <TreeNode>this.node());\n        this.setTabIndexForSelectionMode(event, this.tree.nodeTouched);\n        event.preventDefault();\n    }\n\n    setAllNodesTabIndexes() {\n        const nodes = <any>find(this.tree.el.nativeElement, '[data-pc-section=\"node\"]');\n\n        const hasSelectedNode = [...nodes].some((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');\n\n        [...nodes].forEach((node) => {\n            node.tabIndex = -1;\n        });\n\n        if (hasSelectedNode) {\n            const selectedNodes = [...nodes].filter((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');\n\n            selectedNodes[0].tabIndex = 0;\n\n            return;\n        }\n\n        if (nodes.length) {\n            ([...nodes][0] as any).tabIndex = 0;\n        }\n    }\n\n    setTabIndexForSelectionMode(event, nodeTouched) {\n        if (this.tree.selectionMode() !== null) {\n            const elements = [...find(this.tree.el.nativeElement, '[role=\"treeitem\"]')];\n\n            event.currentTarget.tabIndex = nodeTouched === false ? -1 : 0;\n\n            if (elements.every((element: any) => element.tabIndex === -1)) {\n                (elements[0] as any).tabIndex = 0;\n            }\n        }\n    }\n\n    findNextSiblingOfAncestor(nodeElement: any): any {\n        let parentNodeElement = this.getParentNodeElement(nodeElement);\n\n        if (parentNodeElement) {\n            if (parentNodeElement.nextElementSibling) return parentNodeElement.nextElementSibling;\n            else return this.findNextSiblingOfAncestor(parentNodeElement);\n        } else {\n            return null;\n        }\n    }\n\n    findLastVisibleDescendant(nodeElement: any): any {\n        const listElement = <HTMLElement>Array.from(nodeElement.children).find((el: any) => el.getAttribute('data-pc-section') === 'node');\n        const childrenListElement = listElement?.children[1];\n        if (childrenListElement && childrenListElement.children.length > 0) {\n            const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];\n\n            return this.findLastVisibleDescendant(lastChildElement);\n        } else {\n            return nodeElement;\n        }\n    }\n\n    getParentNodeElement(nodeElement: HTMLElement | Element) {\n        const parentNodeElement = nodeElement.parentElement?.parentElement?.parentElement;\n\n        return parentNodeElement?.tagName === 'P-TREENODE' ? parentNodeElement : null;\n    }\n\n    focusNode(element: any) {\n        (element.children[0] as HTMLElement).focus();\n    }\n\n    focusRowChange(firstFocusableRow, currentFocusedRow, lastVisibleDescendant?) {\n        firstFocusableRow.tabIndex = '-1';\n        currentFocusedRow.children[0].tabIndex = '0';\n\n        this.focusNode(lastVisibleDescendant || currentFocusedRow);\n    }\n\n    focusVirtualNode() {\n        this.timeout = setTimeout(() => {\n            let node = <any>findSingle(this.tree?.contentViewChild()?.nativeElement, `[data-id=\"${<TreeNode>this.node()?.key ?? <TreeNode>this.node()?.data}\"]`);\n            focus(node);\n        }, 1);\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    DestroyRef,\n    effect,\n    ElementRef,\n    inject,\n    input,\n    model,\n    NgModule,\n    numberAttribute,\n    output,\n    TemplateRef,\n    untracked,\n    viewChild,\n    ViewEncapsulation,\n    contentChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { removeAccents, resolveFieldData } from '@primeuix/utils';\nimport { BlockableUI, ScrollerOptions, TranslationKeys, TreeDragDropService, TreeNode } from 'primeng/api';\nimport { AutoFocusModule } from 'primeng/autofocus';\nimport { BaseComponent, PARENT_INSTANCE } from 'primeng/basecomponent';\nimport { Bind } from 'primeng/bind';\nimport { IconField } from 'primeng/iconfield';\nimport { Search as SearchIcon } from '@primeicons/angular/search';\nimport { Spinner as SpinnerIcon } from '@primeicons/angular/spinner';\nimport { InputIcon } from 'primeng/inputicon';\nimport { InputText } from 'primeng/inputtext';\nimport { Scroller } from 'primeng/scroller';\nimport {\n    TreeCheckboxIconTemplateContext,\n    TreeFilterEvent,\n    TreeFilterTemplateContext,\n    TreeLazyLoadEvent,\n    TreeLoaderTemplateContext,\n    TreeNodeCollapseEvent,\n    TreeNodeContextMenuSelectEvent,\n    TreeNodeDoubleClickEvent,\n    TreeNodeDropEvent,\n    TreeNodeExpandEvent,\n    TreeNodeSelectEvent,\n    TreeNodeUnSelectEvent,\n    TreePassThrough,\n    TreeScrollEvent,\n    TreeLoadingMode,\n    TreeScrollIndexChangeEvent,\n    TreeSelectionMode,\n    TreeTogglerIconTemplateContext\n} from 'primeng/types/tree';\nimport { UITreeNode } from './tree-node';\nimport { TREE_INSTANCE } from './tree-token';\nimport { TreeStyle } from './style/treestyle';\n\n/**\n * Tree is used to display hierarchical data.\n * @group Components\n */\n@Component({\n    selector: 'p-tree',\n    standalone: true,\n    imports: [NgTemplateOutlet, Scroller, SearchIcon, SpinnerIcon, InputText, IconField, InputIcon, UITreeNode, AutoFocusModule, Bind],\n    template: `\n        @if (showLoadingMask()) {\n            <div [class]=\"cx('mask')\" [pBind]=\"ptm('mask')\" animate.enter=\"p-overlay-mask-enter-active\" animate.leave=\"p-overlay-mask-leave-active\">\n                @if (loadingIcon()) {\n                    <i [class]=\"cn(cx('loadingIcon'), 'pi-spin' + loadingIcon())\" [pBind]=\"ptm('loadingIcon')\"></i>\n                }\n                @if (!loadingIcon()) {\n                    @if (!loadingIconTemplate()) {\n                        <svg data-p-icon=\"spinner\" [class]=\"cx('loadingIcon')\" [spin]=\"true\" [pBind]=\"ptm('loadingIcon')\" />\n                    }\n                    @if (loadingIconTemplate()) {\n                        <span [class]=\"cx('loadingIcon')\" [pBind]=\"ptm('loadingIcon')\">\n                            <ng-template *ngTemplateOutlet=\"loadingIconTemplate()!\"></ng-template>\n                        </span>\n                    }\n                }\n            </div>\n        }\n        <ng-container *ngTemplateOutlet=\"headerTemplate()\"></ng-container>\n        @if (filterTemplate()) {\n            <ng-container *ngTemplateOutlet=\"filterTemplate()!; context: { $implicit: filterOptions }\"></ng-container>\n        } @else {\n            @if (filter()) {\n                <p-iconfield [class]=\"cx('pcFilterContainer')\" [pt]=\"ptm('pcFilterContainer')\" [unstyled]=\"unstyled()\">\n                    <input\n                        #filter\n                        [pAutoFocus]=\"filterInputAutoFocus()\"\n                        pInputText\n                        type=\"search\"\n                        autocomplete=\"off\"\n                        [class]=\"cx('pcFilterInput')\"\n                        [attr.placeholder]=\"filterPlaceholder()\"\n                        (keydown.enter)=\"$event.preventDefault()\"\n                        (input)=\"_filter($event.target?.value)\"\n                        [pt]=\"ptm('pcFilterInput')\"\n                        [unstyled]=\"unstyled()\"\n                    />\n                    <p-inputicon [pt]=\"ptm('pcFilterIconContainer')\" [unstyled]=\"unstyled()\">\n                        @if (!filterIconTemplate()) {\n                            <svg data-p-icon=\"search\" [class]=\"cx('filterIcon')\" [pBind]=\"ptm('filterIcon')\" />\n                        }\n                        @if (filterIconTemplate()) {\n                            <span [class]=\"cx('filterIcon')\" [pBind]=\"ptm('filterIcon')\">\n                                <ng-template *ngTemplateOutlet=\"filterIconTemplate()!\"></ng-template>\n                            </span>\n                        }\n                    </p-inputicon>\n                </p-iconfield>\n            }\n        }\n\n        @if (getRootNode()?.length) {\n            @if (virtualScroll()) {\n                <p-scroller\n                    #scroller\n                    [items]=\"serializedValue\"\n                    [tabindex]=\"-1\"\n                    [styleClass]=\"cx('wrapper')\"\n                    [style]=\"{ height: scrollerStyleHeight() }\"\n                    [scrollHeight]=\"scrollerScrollHeight()\"\n                    [itemSize]=\"virtualScrollItemSize()\"\n                    [lazy]=\"lazy()\"\n                    (onScroll)=\"onScroll.emit($event)\"\n                    (onScrollIndexChange)=\"onScrollIndexChange.emit($event)\"\n                    (onLazyLoad)=\"onLazyLoad.emit($event)\"\n                    [options]=\"virtualScrollOptions()\"\n                    [pt]=\"ptm('virtualScroller')\"\n                    hostName=\"tree\"\n                    [attr.data-p]=\"wrapperDataP\"\n                >\n                    <ng-template #content let-items let-scrollerOptions=\"options\">\n                        @if (items) {\n                            <ul\n                                #content\n                                [class]=\"cn(cx('rootChildren'), scrollerOptions.contentStyleClass)\"\n                                [style]=\"scrollerOptions.contentStyle\"\n                                role=\"tree\"\n                                [attr.aria-label]=\"ariaLabel()\"\n                                [attr.aria-labelledby]=\"ariaLabelledBy()\"\n                                [pBind]=\"ptm('rootChildren')\"\n                            >\n                                @for (rowNode of items; track trackBy()($index, rowNode); let firstChild = $first; let lastChild = $last; let idx = $index) {\n                                    <p-treenode\n                                        #treeNode\n                                        [level]=\"rowNode.level\"\n                                        [rowNode]=\"rowNode\"\n                                        [node]=\"rowNode.node\"\n                                        [parentNode]=\"rowNode.parent\"\n                                        [firstChild]=\"firstChild\"\n                                        [lastChild]=\"lastChild\"\n                                        [index]=\"getIndex(scrollerOptions, idx)\"\n                                        [itemSize]=\"scrollerOptions.itemSize\"\n                                        [indentation]=\"indentation()\"\n                                        [loadingMode]=\"loadingMode()\"\n                                        [pt]=\"pt\"\n                                        [unstyled]=\"unstyled()\"\n                                    />\n                                }\n                            </ul>\n                        }\n                    </ng-template>\n                    @if (loaderTemplate()) {\n                        <ng-template #loader let-scrollerOptions=\"options\">\n                            <ng-container *ngTemplateOutlet=\"loaderTemplate()!; context: { options: scrollerOptions }\"></ng-container>\n                        </ng-template>\n                    }\n                </p-scroller>\n            }\n            @if (!virtualScroll()) {\n                <div #wrapper [class]=\"cx('wrapper')\" [style.max-height]=\"scrollHeight()\" [pBind]=\"ptm('wrapper')\" [attr.data-p]=\"wrapperDataP\">\n                    @if (getRootNode()) {\n                        <ul #content [class]=\"cx('rootChildren')\" role=\"tree\" [attr.aria-label]=\"ariaLabel()\" [attr.aria-labelledby]=\"ariaLabelledBy()\" [pBind]=\"ptm('rootChildren')\">\n                            @for (node of getRootNode(); track trackBy().bind(this)($index, node); let firstChild = $first; let lastChild = $last; let idx = $index) {\n                                <p-treenode [node]=\"node\" [firstChild]=\"firstChild\" [lastChild]=\"lastChild\" [index]=\"idx\" [level]=\"0\" [loadingMode]=\"loadingMode()\" [pt]=\"pt\" [unstyled]=\"unstyled()\" />\n                            }\n                        </ul>\n                    }\n                </div>\n            }\n        }\n\n        @if (showEmptyMessage) {\n            <div [class]=\"cx('emptyMessage')\" [pBind]=\"ptm('emptyMessage')\">\n                @if (!emptyTemplate()) {\n                    {{ emptyMessageLabel }}\n                }\n                @if (emptyTemplate()) {\n                    <ng-template *ngTemplateOutlet=\"emptyTemplate()!\"></ng-template>\n                }\n            </div>\n        }\n        <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [TreeStyle, { provide: TREE_INSTANCE, useExisting: Tree }, { provide: PARENT_INSTANCE, useExisting: Tree }],\n    host: {\n        '[class]': \"cx('root')\",\n        '[attr.data-p]': 'containerDataP',\n        '(drop)': 'onDrop($event)',\n        '(dragover)': 'onDragOver($event)',\n        '(dragenter)': 'onDragEnter()',\n        '(dragleave)': 'onDragLeave($event)'\n    },\n    hostDirectives: [Bind]\n})\nexport class Tree extends BaseComponent<TreePassThrough> implements BlockableUI {\n    componentName = 'Tree';\n\n    private _destroyed = false;\n\n    bindDirectiveInstance = inject(Bind, { self: true });\n\n    $pcTree: Tree | undefined = inject(TREE_INSTANCE, { optional: true, skipSelf: true }) ?? undefined;\n\n    onDestroy() {\n        this._destroyed = true;\n    }\n\n    onAfterViewChecked(): void {\n        this.bindDirectiveInstance.setAttrs(this.ptms(['host', 'root']));\n    }\n    /**\n     * An array of treenodes.\n     * @group Props\n     */\n    value = input<TreeNode<any> | TreeNode<any>[] | any[] | any>();\n    /**\n     * Defines the selection mode.\n     * @group Props\n     */\n    selectionMode = input<TreeSelectionMode>();\n    /**\n     * Loading mode display.\n     * @group Props\n     */\n    loadingMode = input<TreeLoadingMode>('mask');\n    /**\n     * A single treenode instance or an array to refer to the selections.\n     * @deprecated since v22, use `selectionKeys` instead for key-based selection state.\n     * @group Props\n     */\n    selection = model<TreeNode<any> | TreeNode<any>[] | null | undefined>(null);\n    /**\n     * A map of node keys (by `TreeNode.key`) whose value is `true` for collapsed nodes. Two-way bindable.\n     * When provided it controls expansion (a node is expanded unless its key maps to `true`); leave it\n     * unset to keep driving expansion from each node's `expanded` flag (default, non-breaking).\n     * @group Props\n     */\n    collapsedKeys = model<{ [key: string]: boolean } | null>(null);\n    /**\n     * A map of node keys (by `TreeNode.key`) describing the selection state. Two-way bindable.\n     * For single/multiple selection a key maps to `true`; for checkbox selection it maps to\n     * `{ checked, partialChecked }`. When provided it is kept in sync with `selection`; leave it unset\n     * to keep using the node-reference based `selection` model (default, non-breaking).\n     * @group Props\n     */\n    selectionKeys = model<{ [key: string]: any } | null>(null);\n    /**\n     * Context menu instance.\n     * @group Props\n     */\n    contextMenu = input<any>();\n    /**\n     * Selected node with a context menu.\n     * @group Props\n     */\n    contextMenuSelection = model<TreeNode<any> | null>(null);\n    /**\n     * Scope of the draggable nodes to match a droppableScope.\n     * @group Props\n     */\n    draggableScope = input<any>();\n    /**\n     * Scope of the droppable nodes to match a draggableScope.\n     * @group Props\n     */\n    droppableScope = input<any>();\n    /**\n     * Whether the nodes are draggable.\n     * @group Props\n     */\n    draggableNodes = input(false, { transform: booleanAttribute });\n    /**\n     * Whether the nodes are droppable.\n     * @group Props\n     */\n    droppableNodes = input(false, { transform: booleanAttribute });\n    /**\n     * Defines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically.\n     * @group Props\n     */\n    metaKeySelection = input(false, { transform: booleanAttribute });\n    /**\n     * Whether checkbox selections propagate to ancestor nodes.\n     * @group Props\n     */\n    propagateSelectionUp = input(true, { transform: booleanAttribute });\n    /**\n     * Whether checkbox selections propagate to descendant nodes.\n     * @group Props\n     */\n    propagateSelectionDown = input(true, { transform: booleanAttribute });\n    /**\n     * Displays a loader to indicate data load is in progress.\n     * @group Props\n     */\n    loading = input(false, { transform: booleanAttribute });\n    /**\n     * The icon to show while indicating data load is in progress.\n     * @group Props\n     */\n    loadingIcon = input<string | undefined>();\n    /**\n     * Text to display when there is no data.\n     * @group Props\n     */\n    emptyMessage = input('');\n    /**\n     * Used to define a string that labels the tree.\n     * @group Props\n     */\n    ariaLabel = input<string | undefined>();\n    /**\n     * Defines a string that labels the toggler icon for accessibility.\n     * @group Props\n     */\n    togglerAriaLabel = input<string | undefined>();\n    /**\n     * Establishes relationships between the component and label(s) where its value should be one or more element IDs.\n     * @group Props\n     */\n    ariaLabelledBy = input<string | undefined>();\n    /**\n     * When enabled, drop can be accepted or rejected based on condition defined at onNodeDrop.\n     * @group Props\n     */\n    validateDrop = input(false, { transform: booleanAttribute });\n    /**\n     * When specified, displays an input field to filter the items.\n     * @group Props\n     */\n    filter = input(false, { transform: booleanAttribute });\n    /**\n     * Determines whether the filter input should be automatically focused when the component is rendered.\n     * @group Props\n     */\n    filterInputAutoFocus = input(false, { transform: booleanAttribute });\n    /**\n     * When filtering is enabled, filterBy decides which field or fields (comma separated) to search against.\n     * @group Props\n     */\n    filterBy = input('label');\n    /**\n     * Mode for filtering valid values are \"lenient\" and \"strict\". Default is lenient.\n     * @group Props\n     */\n    filterMode = input('lenient');\n    /**\n     * Mode for filtering valid values are \"lenient\" and \"strict\". Default is lenient.\n     * @group Props\n     */\n    filterOptions: any;\n    /**\n     * Placeholder text to show when filter input is empty.\n     * @group Props\n     */\n    filterPlaceholder = input<string | undefined>();\n    /**\n     * Values after the tree nodes are filtered.\n     * @group Props\n     */\n    filteredNodes: TreeNode<any>[] | undefined | null;\n    /**\n     * Locale to use in filtering. The default locale is the host environment's current locale.\n     * @group Props\n     */\n    filterLocale = input<string | undefined>();\n    /**\n     * Height of the scrollable viewport.\n     * @group Props\n     */\n    scrollHeight = input<string | undefined>();\n    /**\n     * Defines if data is loaded and interacted with in lazy manner.\n     * @group Props\n     */\n    lazy = input(false, { transform: booleanAttribute });\n    /**\n     * Whether the data should be loaded on demand during scroll.\n     * @group Props\n     */\n    virtualScroll = input(false, { transform: booleanAttribute });\n    /**\n     * Height of an item in the list for VirtualScrolling.\n     * @group Props\n     */\n    virtualScrollItemSize = input<number | undefined>();\n    /**\n     * Whether to use the scroller feature. The properties of scroller component can be used like an object in it.\n     * @group Props\n     */\n    virtualScrollOptions = input<ScrollerOptions | undefined>();\n    /**\n     * Indentation factor for spacing of the nested node when virtual scrolling is enabled.\n     * @group Props\n     */\n    indentation = input(1.5, { transform: numberAttribute });\n    /**\n     * Function to optimize the node list rendering, default algorithm checks for object identity.\n     * @group Props\n     */\n    trackBy = input<Function>((index: number, item: any) => item);\n    /**\n     * Highlights the node on select.\n     * @group Props\n     */\n    highlightOnSelect = input(false, { transform: booleanAttribute });\n    /**\n     * Callback to invoke when a node is selected.\n     * @param {TreeNodeSelectEvent} event - Node select event.\n     * @group Emits\n     */\n    onNodeSelect = output<TreeNodeSelectEvent>();\n    /**\n     * Callback to invoke when a node is unselected.\n     * @param {TreeNodeUnSelectEvent} event - Node unselect event.\n     * @group Emits\n     */\n    onNodeUnselect = output<TreeNodeUnSelectEvent>();\n    /**\n     * Callback to invoke when a node is expanded.\n     * @param {TreeNodeExpandEvent} event - Node expand event.\n     * @group Emits\n     */\n    onNodeExpand = output<TreeNodeExpandEvent>();\n    /**\n     * Callback to invoke when a node is collapsed.\n     * @param {TreeNodeCollapseEvent} event - Node collapse event.\n     * @group Emits\n     */\n    onNodeCollapse = output<TreeNodeCollapseEvent>();\n    /**\n     * Callback to invoke when a node is selected with right click.\n     * @param {onNodeContextMenuSelect} event - Node context menu select event.\n     * @group Emits\n     */\n    onNodeContextMenuSelect = output<TreeNodeContextMenuSelectEvent>();\n    /**\n     * Callback to invoke when a node is double clicked.\n     * @param {TreeNodeDoubleClickEvent} event - Node double click event.\n     * @group Emits\n     */\n    onNodeDoubleClick = output<TreeNodeDoubleClickEvent>();\n    /**\n     * Callback to invoke when a node is dropped.\n     * @param {TreeNodeDropEvent} event - Node drop event.\n     * @group Emits\n     */\n    onNodeDrop = output<TreeNodeDropEvent>();\n    /**\n     * Callback to invoke in lazy mode to load new data.\n     * @param {TreeLazyLoadEvent} event - Custom lazy load event.\n     * @group Emits\n     */\n    onLazyLoad = output<TreeLazyLoadEvent>();\n    /**\n     * Callback to invoke in virtual scroll mode when scroll position changes.\n     * @param {TreeScrollEvent} event - Custom scroll event.\n     * @group Emits\n     */\n    onScroll = output<TreeScrollEvent>();\n    /**\n     * Callback to invoke in virtual scroll mode when scroll position and item's range in view changes.\n     * @param {TreeScrollIndexChangeEvent} event - Scroll index change event.\n     * @group Emits\n     */\n    onScrollIndexChange = output<TreeScrollIndexChangeEvent>();\n    /**\n     * Callback to invoke when data is filtered.\n     * @param {TreeFilterEvent} event - Custom filter event.\n     * @group Emits\n     */\n    onFilter = output<TreeFilterEvent>();\n    /**\n     * Custom filter template.\n     * @param {TreeFilterTemplateContext} context - filter context.\n     * @see {@link TreeFilterTemplateContext}\n     * @group Templates\n     */\n    filterTemplate = contentChild<TemplateRef<TreeFilterTemplateContext>>('filter', { descendants: false });\n    /**\n     * Custom node template.\n     * @group Templates\n     */\n    nodeTemplate = contentChild<TemplateRef<any>>('node', { descendants: false });\n    /**\n     * Custom header template.\n     * @group Templates\n     */\n    headerTemplate = contentChild<TemplateRef<void>>('header', { descendants: false });\n    /**\n     * Custom footer template.\n     * @group Templates\n     */\n    footerTemplate = contentChild<TemplateRef<void>>('footer', { descendants: false });\n    /**\n     * Custom loader template.\n     * @param {TreeLoaderTemplateContext} context - loader context.\n     * @see {@link TreeLoaderTemplateContext}\n     * @group Templates\n     */\n    loaderTemplate = contentChild<TemplateRef<TreeLoaderTemplateContext>>('loader', { descendants: false });\n    /**\n     * Custom empty message template.\n     * @group Templates\n     */\n    emptyTemplate = contentChild<TemplateRef<void>>('empty', { descendants: false });\n    /**\n     * Custom toggler icon template.\n     * @param {TreeTogglerIconTemplateContext} context - toggler icon context.\n     * @see {@link TreeTogglerIconTemplateContext}\n     * @group Templates\n     */\n    togglerIconTemplate = contentChild<TemplateRef<TreeTogglerIconTemplateContext>>('togglericon', { descendants: false });\n    /**\n     * Custom checkbox icon template.\n     * @param {TreeCheckboxIconTemplateContext} context - checkbox icon context.\n     * @see {@link TreeCheckboxIconTemplateContext}\n     * @group Templates\n     */\n    checkboxIconTemplate = contentChild<TemplateRef<TreeCheckboxIconTemplateContext>>('checkboxicon', { descendants: false });\n    /**\n     * Custom loading icon template.\n     * @group Templates\n     */\n    loadingIconTemplate = contentChild<TemplateRef<void>>('loadingicon', { descendants: false });\n    /**\n     * Custom filter icon template.\n     * @group Templates\n     */\n    filterIconTemplate = contentChild<TemplateRef<void>>('filtericon', { descendants: false });\n\n    filterViewChild = viewChild<ElementRef>('filter');\n\n    scroller = viewChild<Scroller>('scroller');\n\n    wrapperViewChild = viewChild<ElementRef>('wrapper');\n\n    contentViewChild = viewChild<ElementRef>('content');\n\n    serializedValue: TreeNode<any>[] | null | undefined;\n\n    public nodeTouched: boolean | undefined | null;\n\n    public dragNodeTree: Tree | undefined | null;\n\n    public dragNode: TreeNode<any> | undefined | null;\n\n    public dragNodeSubNodes: TreeNode<any>[] | undefined | null;\n\n    public dragNodeIndex: number | undefined | null;\n\n    public dragNodeScope: any;\n\n    public dragHover: boolean | undefined | null;\n\n    _componentStyle = inject(TreeStyle);\n\n    dragDropService = inject(TreeDragDropService, { optional: true });\n\n    private destroyRef = inject(DestroyRef);\n\n    constructor() {\n        super();\n\n        effect(() => {\n            this.value();\n            untracked(() => {\n                this.updateSerializedValue();\n                if (this.hasFilterActive()) {\n                    this._filter(this.filterViewChild()?.nativeElement?.value);\n                }\n            });\n        });\n\n        // Two-way `collapsedKeys` sync: when provided, project the map onto each node's `expanded` flag\n        // so the existing expansion engine keeps working unchanged. Untracked writes avoid feedback loops.\n        effect(() => {\n            this.collapsedKeys();\n            this.value();\n            untracked(() => {\n                if (this.collapsedKeys() == null) {\n                    return;\n                }\n                this.applyCollapsedKeys();\n                this.updateSerializedValue();\n            });\n        });\n\n        // Two-way `selectionKeys` <-> `selection` projection. Value-based comparison breaks the feedback\n        // loop: once the two representations agree, neither effect writes again.\n        effect(() => {\n            this.selectionKeys();\n            this.value();\n            untracked(() => {\n                if (this.selectionKeys() == null) {\n                    return;\n                }\n                if (!this.isSameSelectionKeys(this.deriveSelectionKeys(), this.selectionKeys())) {\n                    this.applySelectionKeys();\n                }\n            });\n        });\n        effect(() => {\n            this.selection();\n            untracked(() => {\n                if (this.selectionKeys() == null) {\n                    return;\n                }\n                const derived = this.deriveSelectionKeys();\n                if (!this.isSameSelectionKeys(derived, this.selectionKeys())) {\n                    this.selectionKeys.set(derived);\n                }\n            });\n        });\n    }\n\n    onInit() {\n        if (this.filterBy()) {\n            this.filterOptions = {\n                filter: (value) => this._filter(value),\n                reset: () => this.resetFilter()\n            };\n        }\n        if (this.droppableNodes()) {\n            this.dragDropService?.dragStart$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n                this.dragNodeTree = event.tree;\n                this.dragNode = event.node;\n                this.dragNodeSubNodes = event.subNodes;\n                this.dragNodeIndex = event.index;\n                this.dragNodeScope = event.scope;\n            });\n\n            this.dragDropService?.dragStop$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n                this.dragNodeTree = null;\n                this.dragNode = null;\n                this.dragNodeSubNodes = null;\n                this.dragNodeIndex = null;\n                this.dragNodeScope = null;\n                this.dragHover = false;\n            });\n        }\n    }\n\n    showLoadingMask = computed(() => this.loading() && this.loadingMode() === 'mask');\n\n    get showEmptyMessage() {\n        return !this.loading() && (this.getRootNode() == null || this.getRootNode()!.length === 0);\n    }\n\n    scrollerStyleHeight = computed(() => (this.scrollHeight() !== 'flex' ? this.scrollHeight() : undefined));\n\n    scrollerScrollHeight = computed(() => (this.scrollHeight() !== 'flex' ? undefined : '100%'));\n\n    get emptyMessageLabel(): string {\n        return this.emptyMessage() || this.translate(TranslationKeys.EMPTY_MESSAGE);\n    }\n\n    updateSerializedValue() {\n        this.serializedValue = [];\n        this.serializeNodes(null, this.getRootNode(), 0, true);\n    }\n\n    /**\n     * Projects the current `collapsedKeys` map onto each node's `expanded` flag (a node is expanded\n     * unless its key maps to `true`).\n     */\n    private applyCollapsedKeys() {\n        const collapsedKeys = this.collapsedKeys();\n        if (collapsedKeys == null) {\n            return;\n        }\n        const walk = (nodes?: TreeNode<any>[] | null) => {\n            if (!nodes) return;\n            for (const node of nodes) {\n                if (node.key != null) {\n                    node.expanded = !collapsedKeys[node.key as string];\n                }\n                if (node.children) {\n                    walk(node.children);\n                }\n            }\n        };\n        walk(this.getRootNode() as TreeNode<any>[]);\n    }\n\n    /**\n     * Reflects a node's expansion change back into the two-way `collapsedKeys` map when it is in use.\n     */\n    setNodeCollapsed(node: TreeNode<any>, collapsed: boolean) {\n        const collapsedKeys = this.collapsedKeys();\n        if (collapsedKeys == null || node.key == null) {\n            return;\n        }\n        const next = { ...collapsedKeys };\n        if (collapsed) {\n            next[node.key as string] = true;\n        } else {\n            delete next[node.key as string];\n        }\n        this.collapsedKeys.set(next);\n    }\n\n    /** Builds a `key -> node` lookup over the whole tree (for `selectionKeys` projection). */\n    private collectNodesByKey(): Map<string, TreeNode<any>> {\n        const map = new Map<string, TreeNode<any>>();\n        const walk = (nodes?: TreeNode<any>[] | null) => {\n            if (!nodes) return;\n            for (const node of nodes) {\n                if (node.key != null) {\n                    map.set(node.key as string, node);\n                }\n                if (node.children) {\n                    walk(node.children);\n                }\n            }\n        };\n        walk(this.getRootNode() as TreeNode<any>[]);\n        return map;\n    }\n\n    /** Derives the `selectionKeys` map from the current `selection` (and `partialSelected` for checkbox). */\n    private deriveSelectionKeys(): { [key: string]: any } {\n        const mode = this.selectionMode();\n        const map: { [key: string]: any } = {};\n\n        if (mode === 'checkbox') {\n            const selection = (this.selection() as TreeNode<any>[]) || [];\n            const selectedKeys = new Set(selection.map((node) => node.key));\n            const walk = (nodes?: TreeNode<any>[] | null) => {\n                if (!nodes) return;\n                for (const node of nodes) {\n                    if (node.key != null) {\n                        if (selectedKeys.has(node.key)) {\n                            map[node.key as string] = { checked: true, partialChecked: false };\n                        } else if (node.partialSelected) {\n                            map[node.key as string] = { checked: false, partialChecked: true };\n                        }\n                    }\n                    if (node.children) {\n                        walk(node.children);\n                    }\n                }\n            };\n            walk(this.getRootNode() as TreeNode<any>[]);\n        } else if (mode === 'single') {\n            const selected = this.selection() as TreeNode<any> | null;\n            if (selected?.key != null) {\n                map[selected.key as string] = true;\n            }\n        } else {\n            const selection = (this.selection() as TreeNode<any>[]) || [];\n            for (const node of selection) {\n                if (node.key != null) {\n                    map[node.key as string] = true;\n                }\n            }\n        }\n\n        return map;\n    }\n\n    /** Applies the current `selectionKeys` map onto the `selection` model (and `partialSelected` for checkbox). */\n    private applySelectionKeys() {\n        const keys = this.selectionKeys();\n        if (keys == null) {\n            return;\n        }\n        const mode = this.selectionMode();\n        const nodesByKey = this.collectNodesByKey();\n        const isChecked = (value: any) => value === true || value?.checked === true;\n\n        if (mode === 'single') {\n            const key = Object.keys(keys).find((k) => isChecked(keys[k]));\n            this.selection.set(key != null ? (nodesByKey.get(key) ?? null) : null);\n            return;\n        }\n\n        const selected: TreeNode<any>[] = [];\n        nodesByKey.forEach((node, key) => {\n            const value = keys[key];\n            if (mode === 'checkbox') {\n                node.partialSelected = value?.partialChecked === true;\n            }\n            if (isChecked(value)) {\n                selected.push(node);\n            }\n        });\n        this.selection.set(selected);\n    }\n\n    /** Value-based equality for two `selectionKeys` maps (handles both boolean and `{checked,partialChecked}` values). */\n    private isSameSelectionKeys(a: { [key: string]: any } | null, b: { [key: string]: any } | null): boolean {\n        const aKeys = Object.keys(a || {});\n        const bKeys = Object.keys(b || {});\n        if (aKeys.length !== bKeys.length) {\n            return false;\n        }\n        return aKeys.every((key) => {\n            const av = (a as any)[key];\n            const bv = (b as any)[key];\n            if (av === bv) return true;\n            if (av && bv && typeof av === 'object' && typeof bv === 'object') {\n                return av.checked === bv.checked && av.partialChecked === bv.partialChecked;\n            }\n            return false;\n        });\n    }\n\n    serializeNodes(parent: TreeNode<any> | null, nodes: TreeNode<any>[] | any, level: number, visible: boolean) {\n        if (nodes && nodes.length) {\n            for (let node of nodes) {\n                node.parent = parent;\n                const rowNode = {\n                    node: node,\n                    parent: parent,\n                    level: level,\n                    visible: visible && (parent ? parent.expanded : true)\n                };\n                (this.serializedValue as TreeNode<any>[]).push(<TreeNode>rowNode);\n\n                if (rowNode.visible && node.expanded) {\n                    this.serializeNodes(node, node.children, level + 1, rowNode.visible);\n                }\n            }\n        }\n    }\n\n    onNodeClick(event: Event, node: TreeNode) {\n        let eventTarget = <Element>event.target;\n        const section = eventTarget?.getAttribute?.('data-pc-section');\n        if (section === 'nodetogglebutton' || section === 'nodetoggleicon') {\n            return;\n        }\n\n        if (this.selectionMode()) {\n            if (node.selectable === false) {\n                return;\n            }\n\n            if (this.hasFilteredNodes()) {\n                node = this.getNodeWithKey(<string>node.key, <TreeNode<any>[]>this.filteredNodes) as TreeNode;\n                if (!node) {\n                    return;\n                }\n            }\n\n            let index = this.findIndexInSelection(node);\n            let selected = index >= 0;\n            const currentSelection = this.selection();\n\n            if (this.isCheckboxSelectionMode()) {\n                if (selected) {\n                    if (this.propagateSelectionDown()) this.propagateDown(node, false);\n                    else this.selection.set((currentSelection as TreeNode[]).filter((_val: TreeNode, i: number) => i != index));\n\n                    if (this.propagateSelectionUp() && node.parent) {\n                        this.propagateUp(node.parent, false);\n                    }\n\n                    this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                } else {\n                    if (this.propagateSelectionDown()) this.propagateDown(node, true);\n                    else this.selection.set([...((currentSelection as TreeNode[]) || []), node]);\n\n                    if (this.propagateSelectionUp() && node.parent) {\n                        this.propagateUp(node.parent, true);\n                    }\n\n                    this.onNodeSelect.emit({ originalEvent: event, node: node });\n                }\n            } else {\n                let metaSelection = this.nodeTouched ? false : this.metaKeySelection();\n\n                if (metaSelection) {\n                    let metaKey = (<KeyboardEvent>event).metaKey || (<KeyboardEvent>event).ctrlKey;\n\n                    if (selected && metaKey) {\n                        if (this.isSingleSelectionMode()) {\n                            this.selection.set(null);\n                        } else {\n                            this.selection.set((currentSelection as TreeNode[]).filter((_val: TreeNode, i: number) => i != index));\n                        }\n\n                        this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                    } else {\n                        if (this.isSingleSelectionMode()) {\n                            this.selection.set(node);\n                        } else if (this.isMultipleSelectionMode()) {\n                            const base = !metaKey ? [] : (currentSelection as TreeNode[]) || [];\n                            this.selection.set([...base, node]);\n                        }\n\n                        this.onNodeSelect.emit({ originalEvent: event, node: node });\n                    }\n                } else {\n                    if (this.isSingleSelectionMode()) {\n                        if (selected) {\n                            this.selection.set(null);\n                            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                        } else {\n                            this.selection.set(node);\n                            setTimeout(() => {\n                                if (this._destroyed) return;\n                                this.onNodeSelect.emit({ originalEvent: event, node: node });\n                            });\n                        }\n                    } else {\n                        if (selected) {\n                            this.selection.set((currentSelection as TreeNode[]).filter((_val: TreeNode, i: number) => i != index));\n                            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                        } else {\n                            this.selection.set([...((currentSelection as TreeNode[]) || []), node]);\n                            setTimeout(() => {\n                                if (this._destroyed) return;\n                                this.onNodeSelect.emit({ originalEvent: event, node: node });\n                            });\n                        }\n                    }\n                }\n            }\n        }\n\n        this.nodeTouched = false;\n    }\n\n    onNodeTouchEnd() {\n        this.nodeTouched = true;\n    }\n\n    onNodeRightClick(event: MouseEvent, node: TreeNode<any>) {\n        if (this.contextMenu()) {\n            let eventTarget = <Element>event.target;\n            const section = eventTarget.getAttribute('data-pc-section');\n\n            if (section === 'nodetogglebutton' || section === 'nodetoggleicon') {\n                return;\n            }\n\n            let index = this.findIndexInSelection(node);\n            let isNodeSelected = index >= 0;\n\n            const onContextMenuCallback = () => {\n                this.contextMenu().show(event);\n                this.contextMenu().hideCallback = () => {\n                    this.contextMenuSelection.set(null);\n                };\n\n                this.onNodeContextMenuSelect.emit({ originalEvent: event, node: node });\n            };\n\n            this.contextMenuSelection.set(node);\n            onContextMenuCallback();\n        }\n    }\n\n    onNodeDblClick(event: MouseEvent, node: TreeNode<any>) {\n        this.onNodeDoubleClick.emit({ originalEvent: event, node: node });\n    }\n\n    findIndexInSelection(node: TreeNode) {\n        let index: number = -1;\n        const currentSelection = this.selection();\n        if (this.selectionMode() && currentSelection) {\n            if (this.isSingleSelectionMode()) {\n                const sel = currentSelection as TreeNode;\n                let areNodesEqual = (sel.key && sel.key === node.key) || sel == node;\n                index = areNodesEqual ? 0 : -1;\n            } else {\n                const selArray = currentSelection as TreeNode[];\n                for (let i = 0; i < selArray.length; i++) {\n                    let selectedNode = selArray[i];\n                    let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;\n                    if (areNodesEqual) {\n                        index = i;\n                        break;\n                    }\n                }\n            }\n        }\n\n        return index;\n    }\n\n    syncNodeOption(node: TreeNode, parentNodes: TreeNode<any>[], option: any, value?: any) {\n        // to synchronize the node option between the filtered nodes and the original nodes(this.value)\n        const _node = this.hasFilteredNodes() ? this.getNodeWithKey(<string>node.key, parentNodes) : null;\n        if (_node) {\n            (<any>_node)[option] = value || (<any>node)[option];\n        }\n    }\n\n    hasFilteredNodes() {\n        return this.filter() && this.filteredNodes && this.filteredNodes.length;\n    }\n\n    hasFilterActive() {\n        return this.filter() && this.filterViewChild()?.nativeElement?.value.length > 0;\n    }\n\n    getNodeWithKey(key: string, nodes: TreeNode<any>[]): TreeNode<any> | undefined {\n        for (let node of nodes) {\n            if (node.key === key) {\n                return node;\n            }\n\n            if (node.children) {\n                let matchedNode = this.getNodeWithKey(key, node.children);\n                if (matchedNode) {\n                    return matchedNode;\n                }\n            }\n        }\n    }\n\n    propagateUp(node: TreeNode, select: boolean) {\n        if (node.children && node.children.length) {\n            let selectedCount: number = 0;\n            let childPartialSelected: boolean = false;\n            for (let child of node.children) {\n                if (this.isSelected(child)) {\n                    selectedCount++;\n                } else if (child.partialSelected) {\n                    childPartialSelected = true;\n                }\n            }\n\n            const currentSelection = (this.selection() as TreeNode[]) || [];\n            if (select && selectedCount == node.children.length) {\n                this.selection.set([...currentSelection, node]);\n                node.partialSelected = false;\n            } else {\n                if (!select) {\n                    let index = this.findIndexInSelection(node);\n                    if (index >= 0) {\n                        this.selection.set(currentSelection.filter((_val: TreeNode, i: number) => i != index));\n                    }\n                }\n\n                if (childPartialSelected || (selectedCount > 0 && selectedCount != node.children.length)) node.partialSelected = true;\n                else node.partialSelected = false;\n            }\n\n            this.syncNodeOption(node, <TreeNode<any>[]>this.filteredNodes, 'partialSelected');\n        }\n\n        let parent = node.parent;\n        if (parent) {\n            this.propagateUp(parent, select);\n        }\n    }\n\n    propagateDown(node: TreeNode, select: boolean) {\n        let index = this.findIndexInSelection(node);\n        const currentSelection = (this.selection() as TreeNode[]) || [];\n\n        if (select && index == -1) {\n            this.selection.set([...currentSelection, node]);\n        } else if (!select && index > -1) {\n            this.selection.set(currentSelection.filter((_val: TreeNode, i: number) => i != index));\n        }\n\n        node.partialSelected = false;\n\n        this.syncNodeOption(node, <TreeNode<any>[]>this.filteredNodes, 'partialSelected');\n\n        if (node.children && node.children.length) {\n            for (let child of node.children) {\n                this.propagateDown(child, select);\n            }\n        }\n    }\n\n    isSelected(node: TreeNode) {\n        return this.findIndexInSelection(node) != -1;\n    }\n\n    isSingleSelectionMode() {\n        return this.selectionMode() && this.selectionMode() == 'single';\n    }\n\n    isMultipleSelectionMode() {\n        return this.selectionMode() && this.selectionMode() == 'multiple';\n    }\n\n    isCheckboxSelectionMode() {\n        return this.selectionMode() && this.selectionMode() == 'checkbox';\n    }\n\n    isNodeLeaf(node: TreeNode): boolean {\n        return node.leaf == false ? false : !(node.children && node.children.length);\n    }\n\n    getRootNode() {\n        return this.filteredNodes ? this.filteredNodes : this.value();\n    }\n\n    getTemplateForNode(node: TreeNode): TemplateRef<any> | null {\n        return this.nodeTemplate() ?? null;\n    }\n\n    onDragOver(event: DragEvent) {\n        if (this.droppableNodes() && this.allowDrop(<TreeNode>this.dragNode, null, this.dragNodeScope)) {\n            (<any>event).dataTransfer.dropEffect = 'copy';\n            event.preventDefault();\n        }\n    }\n\n    onDrop(event: DragEvent) {\n        if (this.droppableNodes()) {\n            event.preventDefault();\n            let dragNode = this.dragNode as TreeNode;\n\n            if (this.isSameTreeScope(this.dragNodeScope)) {\n                return;\n            }\n\n            if (this.allowDrop(dragNode, null, this.dragNodeScope)) {\n                let dragNodeIndex = <number>this.dragNodeIndex;\n                let currentValue = this.value() || [];\n\n                if (this.validateDrop()) {\n                    this.onNodeDrop.emit({\n                        originalEvent: event,\n                        dragNode: dragNode,\n                        dropNode: null,\n                        index: dragNodeIndex,\n                        accept: () => {\n                            this.processTreeDrop(dragNode, dragNodeIndex);\n                        }\n                    });\n                } else {\n                    this.onNodeDrop.emit({\n                        originalEvent: event,\n                        dragNode: dragNode,\n                        dropNode: null,\n                        index: dragNodeIndex\n                    });\n\n                    this.processTreeDrop(dragNode, dragNodeIndex);\n                }\n            }\n        }\n    }\n\n    processTreeDrop(dragNode: TreeNode, dragNodeIndex: number) {\n        (<TreeNode<any>[]>this.dragNodeSubNodes).splice(dragNodeIndex, 1);\n        (this.value() as TreeNode<any>[]).push(dragNode);\n        this.dragDropService!.stopDrag({\n            node: dragNode\n        });\n    }\n\n    onDragEnter() {\n        if (this.droppableNodes() && this.allowDrop(<TreeNode>this.dragNode, null, this.dragNodeScope)) {\n            this.dragHover = true;\n        }\n    }\n\n    onDragLeave(event: DragEvent) {\n        if (this.droppableNodes()) {\n            let rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n            if (event.x > parseInt(rect.left as any) + rect.width || event.x < parseInt(rect.left as any) || event.y > parseInt(rect.top as any) + rect.height || event.y < parseInt(rect.top as any)) {\n                this.dragHover = false;\n            }\n        }\n    }\n\n    allowDrop(dragNode: TreeNode, dropNode: TreeNode<any> | null, dragNodeScope: any): boolean {\n        if (!dragNode) {\n            //prevent random html elements to be dragged\n            return false;\n        } else if (this.isValidDragScope(dragNodeScope)) {\n            let allow: boolean = true;\n            if (dropNode) {\n                if (dragNode === dropNode) {\n                    allow = false;\n                } else {\n                    let parent = dropNode.parent;\n                    while (parent != null) {\n                        if (parent === dragNode) {\n                            allow = false;\n                            break;\n                        }\n                        parent = parent.parent;\n                    }\n                }\n            }\n\n            return allow;\n        } else {\n            return false;\n        }\n    }\n\n    hasCommonScope(dragScope: any, dropScope: any): boolean {\n        if (typeof dropScope === 'string') {\n            if (typeof dragScope === 'string') return dropScope === dragScope;\n            else if (Array.isArray(dragScope)) return (<Array<any>>dragScope).indexOf(dropScope) != -1;\n        } else if (Array.isArray(dropScope)) {\n            if (typeof dragScope === 'string') {\n                return (<Array<any>>dropScope).indexOf(dragScope) != -1;\n            } else if (Array.isArray(dragScope)) {\n                for (let s of dropScope) {\n                    for (let ds of dragScope) {\n                        if (s === ds) {\n                            return true;\n                        }\n                    }\n                }\n            }\n        }\n        return false;\n    }\n\n    isSameTreeScope(dragScope: any): boolean {\n        return this.hasCommonScope(dragScope, this.draggableScope());\n    }\n\n    isValidDragScope(dragScope: any): boolean {\n        let dropScope = this.droppableScope();\n\n        if (dropScope) {\n            return this.hasCommonScope(dragScope, dropScope);\n        } else {\n            return true;\n        }\n    }\n\n    public _filter(value: string) {\n        let filterValue = value;\n        if (filterValue === '') {\n            this.filteredNodes = null;\n        } else {\n            this.filteredNodes = [];\n            const searchFields: string[] = this.filterBy().split(',');\n            const filterText = removeAccents(filterValue).toLocaleLowerCase(this.filterLocale());\n            const isStrictMode = this.filterMode() === 'strict';\n            for (let node of <TreeNode<any>[]>this.value()) {\n                let copyNode = { ...node };\n                let paramsWithoutNode = { searchFields, filterText, isStrictMode };\n                if (\n                    (isStrictMode && (this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||\n                    (!isStrictMode && (this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))\n                ) {\n                    this.filteredNodes.push(copyNode);\n                }\n            }\n        }\n\n        this.updateSerializedValue();\n        this.onFilter.emit({\n            filter: filterValue,\n            filteredValue: this.filteredNodes\n        });\n    }\n\n    /**\n     * Resets filter.\n     * @group Method\n     */\n    public resetFilter() {\n        this.filteredNodes = null;\n\n        const filterEl = this.filterViewChild();\n        if (filterEl && filterEl.nativeElement) {\n            filterEl.nativeElement.value = '';\n        }\n    }\n    /**\n     * Scrolls to virtual index.\n     * @param {number} number - Index to be scrolled.\n     * @group Method\n     */\n    public scrollToVirtualIndex(index: number) {\n        this.virtualScroll() && this.scroller()?.scrollToIndex(index);\n    }\n    /**\n     * Scrolls to virtual index.\n     * @param {ScrollToOptions} options - Scroll options.\n     * @group Method\n     */\n    public scrollTo(options: any) {\n        if (this.virtualScroll()) {\n            this.scroller()?.scrollTo(options);\n        } else {\n            const wrapper = this.wrapperViewChild();\n            if (wrapper && wrapper.nativeElement) {\n                if (wrapper.nativeElement.scrollTo) {\n                    wrapper.nativeElement.scrollTo(options);\n                } else {\n                    wrapper.nativeElement.scrollLeft = options.left;\n                    wrapper.nativeElement.scrollTop = options.top;\n                }\n            }\n        }\n    }\n\n    findFilteredNodes(node: TreeNode, paramsWithoutNode: any) {\n        if (node) {\n            let matched = false;\n            if (node.children) {\n                let childNodes = [...node.children];\n                node.children = [];\n                for (let childNode of childNodes) {\n                    let copyChildNode = { ...childNode };\n                    if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {\n                        matched = true;\n                        node.children.push(copyChildNode);\n                    }\n                }\n            }\n\n            if (matched) {\n                node.expanded = true;\n                return true;\n            }\n        }\n    }\n\n    isFilterMatched(node: TreeNode, params: any) {\n        let { searchFields, filterText, isStrictMode } = params;\n        let matched = false;\n        for (let field of searchFields) {\n            let fieldValue = removeAccents(String(resolveFieldData(node, field))).toLocaleLowerCase(this.filterLocale());\n            if (fieldValue.indexOf(filterText) > -1) {\n                matched = true;\n            }\n        }\n\n        if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {\n            matched = this.findFilteredNodes(node, { searchFields, filterText, isStrictMode }) || matched;\n        }\n\n        return matched;\n    }\n\n    getIndex(options: any, index: number) {\n        const getItemOptions = options['getItemOptions'];\n        return getItemOptions ? getItemOptions(index).index : index;\n    }\n\n    getBlockableElement(): HTMLElement {\n        return this.el.nativeElement.children[0];\n    }\n\n    get containerDataP() {\n        return this.cn({\n            loading: this.loading(),\n            scrollable: this.scrollHeight() === 'flex'\n        });\n    }\n\n    get wrapperDataP() {\n        return this.cn({\n            scrollable: this.scrollHeight() === 'flex'\n        });\n    }\n}\n@NgModule({\n    imports: [Tree],\n    exports: [Tree]\n})\nexport class TreeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ChevronRightIcon","ChevronDownIcon","SpinnerIcon","i1","SearchIcon"],"mappings":"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"}