{"version":3,"file":"eui-components-eui-tree.mjs","sources":["../../eui-tree/eui-tree.model.ts","../../eui-tree/eui-tree.component.ts","../../eui-tree/eui-tree.component.html","../../eui-tree/eui-dropdown-tree.directive.ts","../../eui-tree/eui-tree-helper.ts","../../eui-tree/eui-tree-form-control.directive.ts","../../eui-tree/index.ts","../../eui-tree/eui-components-eui-tree.ts"],"sourcesContent":["import { UxLinkLegacy } from '@eui/core';\n\nexport type TreeDataModel = Array<TreeItemModel>;\n\nexport type TreeItemModel = {\n    node: TreeNode;\n    children?: TreeDataModel;\n};\n\nexport type TreeNode = {\n    // metadata can be block content, or any\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    treeContentBlock: EuiTreeContentBlockModel | any;\n} & SelectionModel &\n    ExpandModel;\n\nexport interface EuiTreeContentBlockModel {\n    id?: string | number;\n    label: string;\n    tooltipLabel: string;\n    url: string;\n    urlExternal: string;\n    urlExternalTarget: string;\n    typeLabel: string;\n    typeClass: string;\n    chips?: Array<{ label: string; typeClass?: string; isOutline?: boolean }>;\n    iconClass: string;\n    iconTypeClass: string;\n    iconSvgName?: string;\n    rightContent?: {\n        iconClass: string;\n        iconTypeClass: string;\n        iconSvgName?: string;\n        badges?: Array<{ label: string; typeClass: string }>;\n        chips?: Array<{ label: string; typeClass?: string; isOutline?: boolean }>;\n        // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        contextMenuMetaData?: any;\n    };\n    metaData: string;\n\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    [key: string]: any;\n}\n\nexport type SelectionModel = {\n    selectable?: boolean;\n    isSelected?: boolean;\n    // if one of sub is selected, it becomes intermediate\n    isIndeterminate?: boolean;\n    selectConfig?: SelectConfigModel;\n};\n\nexport interface SelectConfigModel extends MultiSelectionLogic, SingleSelectionLogic {\n    /*\n    If It is true;\n    When user select parent, all the children will be selected\n    When selection state is changed, If all children is selected parent will be selected as long as noAutoSelectParent is not true\n    */\n    recursive?: boolean;\n    /* when It is true, If all children is selected, parent will not be selected, while recursive is true*/\n    noAutoSelectParent?: boolean;\n    singleSelect?: boolean;\n}\n\nexport interface MultiSelectionLogic {\n    /*\n    If It is true;\n    When user select parent, all the children will be selected\n    When selection state is changed, If all children is selected parent will be selected as long as noAutoSelectParent is not true\n    */\n    recursive?: boolean;\n    /* when It is true, If all children is selected, parent will not be selected, while recursive is true*/\n    noAutoSelectParent?: boolean;\n}\n\nexport interface SingleSelectionLogic {\n    singleSelect?: boolean;\n}\n\nexport type ExpandModel = {\n    isExpanded?: boolean;\n};\n\nexport type EuiTreeSelectionChanges = { added: TreeDataModel; removed: TreeDataModel; selection: TreeDataModel };\n\nexport type TreeDataRunTimeModel = Array<TreeItemRunTimeModel>;\n\nexport type TreeItemRunTimeModel = { index: number; path: string; children?: Array<TreeItemRunTimeModel>; last?: boolean, matched?: boolean };\n\nexport type TreeItemSelectionRecursiveModel = {\n    selectionRecursiveState: SelectionRecursiveState;\n    children?: Array<TreeItemSelectionRecursiveModel>;\n};\n\nexport type SelectionRecursiveState = 'indeterminate' | 'allSelected' | 'allNotSelected';\n\n// eslint-disable-next-line prefer-arrow/prefer-arrow-functions\nexport function uxTreeNodesMetaDataMapper(oldTree: Array<UxLinkLegacy>): TreeDataModel {\n    return oldTree.map((item) => {\n        if (item?.typeClass === 'default') {\n            // default typeClass will be\n            item.typeClass = 'secondary';\n        }\n        if (item?.badgeLabel) {\n            // default typeClass will be\n            if (item?.badges?.length > 0) {\n                item.badges.push({ label: item?.badgeLabel, typeClass: 'secondary' });\n            } else {\n                item.badges = [{ label: item?.badgeLabel, typeClass: 'secondary' }];\n            }\n        }\n        return {\n            node: {\n                treeContentBlock: {\n                    label: item.label,\n                    typeLabel: item.typeLabel,\n                    typeClass: item.typeLabel && !item.typeClass ? 'secondary' : item.typeClass,\n                    tooltipLabel: item.tooltipLabel,\n                    url: item.url,\n                    urlExternal: item.urlExternal,\n                    urlExternalTarget: item.urlExternal && item.urlExternalTarget ? item.urlExternalTarget : undefined,\n                    badges: item.badges,\n                    metadata: item.metadata,\n                },\n            },\n            children: item.children ? uxTreeNodesMetaDataMapper(item.children) : undefined,\n        };\n    });\n}\n\nexport class EuiTreePagination<T> {\n    private data: T[];\n    private startPage: number;\n    private totalItems: number;\n    private renderedPageCount: number;\n    private perPage: number;\n    private totalPages: number;\n\n    constructor(data: T[], startPage: number, renderedPageCount: number, perPage: number) {\n        this.data = data;\n        this.setCurrentStartPage(startPage);\n        this.renderedPageCount = renderedPageCount;\n        this.totalItems = this.data.length;\n        this.perPage = perPage;\n        this.totalPages = Math.ceil(this.totalItems / this.perPage);\n    }\n\n    public paginateNext(): { startPage: number; data: T[] } {\n        if (this.startPage < this.totalPages) {\n            this.startPage += 1;\n        }\n        return this.getViewData();\n    }\n\n    public paginatePrev(): { startPage: number; data: T[] } {\n        if (this.startPage > 1) {\n            this.startPage -= 1;\n        }\n        return this.getViewData();\n    }\n\n    public getCurrentStartPage(): number {\n        return this.startPage;\n    }\n\n    public setCurrentStartPage(startPage: number): void {\n        this.startPage = startPage;\n    }\n\n    public isAtMax(): boolean {\n        return this.totalPages < this.startPage + this.renderedPageCount;\n    }\n\n    public getViewData(): { startPage: number; data: T[] } {\n        const startIndex = (this.startPage - 1) * this.perPage;\n        const endIndex = startIndex + this.perPage * this.renderedPageCount;\n        const pageData = structuredClone(this.data).slice(startIndex, endIndex);\n        return {\n            startPage: this.startPage,\n            data: pageData,\n        };\n    }\n}\n\nexport class CustomNodeSelectFnHelper{\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    constructor(private compInstance: any) {\n    }\n\n    select(path: string, isChecked: boolean): void{\n        this.compInstance.silentSelect(path, isChecked);\n    }\n\n    getParents(path: string): Array<string>{\n        return this.compInstance.getParentPaths(path);\n    }\n\n    getTreeItem(path: string): TreeItemModel{\n        return this.compInstance.getTreeItem(path);\n    }\n\n    getSelectionRecursiveState(path: string): TreeItemSelectionRecursiveModel{\n        return this.compInstance.getRunTimeSelectionRecursiveState(path);\n    }\n\n}\n\nexport type CustomNodeSelectFn = (path: string, isChecked:boolean, treeItem: TreeItemModel, helper: CustomNodeSelectFnHelper) => void;\n","import {\n    Component,\n    Input,\n    ChangeDetectionStrategy,\n    EventEmitter,\n    Output,\n    ViewEncapsulation,\n    TemplateRef,\n    ChangeDetectorRef,\n    SimpleChanges,\n    OnInit,\n    OnChanges,\n    HostBinding,\n    OnDestroy,\n    booleanAttribute,\n    ViewChild,\n    inject,\n    numberAttribute,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport {\n    SelectionRecursiveState,\n    TreeDataModel,\n    TreeItemModel,\n    TreeDataRunTimeModel,\n    TreeItemRunTimeModel,\n    TreeItemSelectionRecursiveModel,\n    EuiTreeSelectionChanges,\n    EuiTreePagination,\n    CustomNodeSelectFn,\n    CustomNodeSelectFnHelper,\n} from './eui-tree.model';\nimport { FormsModule } from '@angular/forms';\nimport { EUI_INPUT_CHECKBOX } from '@eui/components/eui-input-checkbox';\nimport { EUI_BUTTON } from '@eui/components/eui-button';\nimport { EUI_ICON } from '@eui/components/eui-icon';\nimport { EUI_LABEL } from '@eui/components/eui-label';\nimport { EUI_BADGE } from '@eui/components/eui-badge';\nimport { EUI_CHIP } from '@eui/components/eui-chip';\nimport { EUI_DROPDOWN } from '@eui/components/eui-dropdown';\nimport { NestedTreeControl, CdkTreeModule, CdkTree } from '@angular/cdk/tree';\nimport { ArrayDataSource, SelectionModel } from '@angular/cdk/collections';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ScrollingModule, ScrollDispatcher, CdkScrollable } from '@angular/cdk/scrolling';\nimport { debounceTime, Subscription } from 'rxjs';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * @description\n * The eui-tree can be used to display hierarchy data with optional added behavior inside node templates and interactions that could affect the rendered data such as expand, collapse, direct actions, extra menu actions, etc.\n * Hierarchical tree component for displaying and interacting with nested data structures.\n * Supports single and multi-select modes, recursive selection, virtual scrolling for large datasets, and custom node templates.\n * Provides expand/collapse functionality, path highlighting, and customizable node rendering.\n * Integrates with Angular CDK Tree for efficient rendering and state management.\n * Commonly used for file explorers, organizational charts, category navigation, and any hierarchical data visualization.\n *\n * @usageNotes\n * ### Basic Usage\n * ```html\n * <eui-tree\n *   [nodes]=\"treeData\"\n *   [isSelectable]=\"true\"\n *   (selectionChange)=\"onSelectionChange($event)\">\n * </eui-tree>\n * ```\n *\n * ```typescript\n * treeData: TreeDataModel = [\n *   {\n *     id: '1',\n *     label: 'Root',\n *     children: [\n *       { id: '1.1', label: 'Child 1' },\n *       { id: '1.2', label: 'Child 2' }\n *     ]\n *   }\n * ];\n * ```\n *\n * ### With Custom Template\n * ```html\n * <eui-tree [nodes]=\"data\" [nodeTemplateRef]=\"customNode\">\n * </eui-tree>\n *\n * <ng-template #customNode let-node>\n *   <eui-icon [svgName]=\"node.icon\" />\n *   <span>{{ node.label }}</span>\n * </ng-template>\n * ```\n *\n * ### Accessibility\n * - Use role=\"tree\" on container (automatically applied)\n * - Each node has role=\"treeitem\"\n * - Keyboard navigation: Arrow keys to navigate, Enter to select, Space to expand/collapse\n * - Provide aria-label describing the tree purpose\n *\n * ### Notes\n * - Virtual scrolling improves performance for large trees (1000+ nodes)\n * - Recursive selection propagates selection to all children\n * - Custom templates allow full control over node rendering\n * - Supports lazy loading of child nodes\n */\n@Component({\n    selector: 'eui-tree',\n    templateUrl: './eui-tree.component.html',\n    styleUrl: './eui-tree.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        NgTemplateOutlet,\n        FormsModule,\n        TranslateModule,\n        ScrollingModule,\n        CdkTreeModule,\n        RouterModule,\n        ...EUI_INPUT_CHECKBOX,\n        ...EUI_BUTTON,\n        ...EUI_ICON,\n        ...EUI_LABEL,\n        ...EUI_BADGE,\n        ...EUI_CHIP,\n        ...EUI_DROPDOWN,\n    ],\n})\nexport class EuiTreeComponent implements OnInit, OnChanges, OnDestroy {\n    @HostBinding('class')\n    public get cssClasses(): string {\n        return this.getCssClasses();\n    }\n    @HostBinding('attr.data-e2e') @Input() e2eAttr = 'eui-tree';\n    /**\n     * Hierarchy of data to display in the tree\n     */\n    @Input() nodes: TreeDataModel;\n    /**\n     * Reference to the `ng-template` used to render node item\n     */\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    @Input() nodeTemplateRef: TemplateRef<any>;\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    @Input() nodeContentMetadataTemplateRef: TemplateRef<any>;\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    @Input() rightContextMenuTemplateRef: TemplateRef<any>;\n    @Input() customNodeSelectFn: CustomNodeSelectFn;\n    /**\n     * Icon to display when a node is closed\n     *\n     * @default 'eui-chevron-right'\n     */\n    @Input() expandedSvgIconClass = 'eui-chevron-right';\n    /**\n     * Icon to display when a node is opened\n     *\n     * @default 'eui-chevron-down'\n     */\n    @Input() collapsedSvgIconClass = 'eui-chevron-down';\n\n    @ViewChild('cdkScrollableRef', { read: CdkScrollable }) cdkScrollableRef: CdkScrollable;\n    @ViewChild('treeComponentInstance') public treeComponentInstance: CdkTree<TreeItemRunTimeModel>;\n\n    /**\n     * Whether the full node display can be clicked to toggle the node.\n     *\n     * @default false\n     */\n    @Input({ transform: booleanAttribute }) isClickTogglingNode = false;\n    /**\n     * Whether multiple nodes can be selected.\n     *\n     * @default false\n     */\n    @Input({ transform: booleanAttribute }) isMultiselect = false;\n    /**\n     * Whether only one node can be selected. Select one will unselect the previous selected.\n     *\n     * @default false\n     */\n    @Input({ transform: booleanAttribute }) isSingleSelect = false;\n    /**\n     * In combination with `isMultiselect`. Whether the selection of a node will automatically select its children.\n     *\n     * @default false\n     */\n    @Input({ transform: booleanAttribute }) isRecursiveSelection = false;\n    /**\n     * In combination with `isMultiselect`. Whether the selection of all children will automatically select the parent.\n     *\n     * @default true\n     */\n    @Input({ transform: booleanAttribute }) isRecursiveParentSelection = true;\n    /**\n     * Whether the links are underlined on hiver in the tree.\n     *\n     * @default true\n     */\n    @Input({ transform: booleanAttribute }) showUnderlinedLinks = false;\n    /**\n     * Whether the lines are displayed on the left of nodes.\n     *\n     * @default true\n     */\n    @Input({ transform: booleanAttribute }) showLines = true;\n    /**\n     * Whether i18n key can be passed to be translated with `TranslateService`.\n     *\n     * @default true\n     */\n    @Input({ transform: booleanAttribute }) autoTranslate = true;\n    /**\n     * Whether all parents till the selected are highlighted in bold.\n     *\n     * @default false\n     */\n    @Input({ transform: booleanAttribute }) highlightPath = false;\n    /**\n     * Treshold for the virtual scroll to be activated\n     *\n     * @default 800\n     */\n    @Input({ transform: numberAttribute }) virtualScrollThreshold = 800;\n    /**\n     * Size of the virtaul scroll pages\n     *\n     * @default 400\n     */\n    @Input({ transform: numberAttribute }) virtualScrollPageSize = 400;\n\n    @Output() selectionChange = new EventEmitter<EuiTreeSelectionChanges>();\n    @Output() nodeClick = new EventEmitter<TreeItemModel>();\n    @Output() nodeToggle = new EventEmitter<TreeItemModel>();\n    cdkArrayDataSource: ArrayDataSource<TreeItemRunTimeModel>;\n    cdkTreeControl: NestedTreeControl<TreeItemRunTimeModel>;\n    renderTree: boolean;\n    public uid: string = Math.floor(Math.random() * 1000000000).toString();\n    protected _isMultiLevel: boolean;\n    private processedNodes: TreeDataModel;\n    private treeDataRunTime: TreeDataRunTimeModel;\n    private treeDataRunTimeBackup: TreeDataRunTimeModel;\n    private runTimeSelectionRecursiveState: Array<TreeItemSelectionRecursiveModel>;\n    private selectionModel: SelectionModel<TreeItemRunTimeModel>;\n    private tempSelectionModel: SelectionModel<TreeItemRunTimeModel>;\n    private selectionModelSubs: Subscription;\n    private scrollDispatcherSubs: Subscription;\n    private _selection: TreeDataModel;\n    private treePagination: EuiTreePagination<TreeItemRunTimeModel>;\n    private changeDetectorRef = inject(ChangeDetectorRef);\n    private scrollDispatcher = inject(ScrollDispatcher);\n\n    ngOnInit(): void {\n        this.initTree();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes['nodes']?.currentValue !== changes['nodes']?.previousValue) {\n            this.renderTree = false;\n            this.initTree();\n            if(this.treeComponentInstance) {\n                this.treeComponentInstance?.renderNodeChanges([]);\n                this.treeComponentInstance?.renderNodeChanges(this.treeDataRunTime);\n            }\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this.selectionModelSubs) {\n            this.selectionModelSubs.unsubscribe();\n        }\n        if (this.scrollDispatcherSubs) {\n            this.scrollDispatcherSubs.unsubscribe();\n        }\n    }\n\n    getSelection(): TreeDataModel {\n        return this._selection;\n    }\n\n    getProcessedNodes(): TreeDataModel {\n        return this.processedNodes;\n    }\n\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    trackBy(index: number, item: TreeItemRunTimeModel): any {\n        return item.path;\n    }\n\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    trackByControl(item: TreeItemRunTimeModel): any {\n        return item;\n    }\n\n    getTreeItem(path: string): TreeItemModel {\n        const indexArr: Array<number> = this.resolvePath(path);\n        let nodeArr = this.processedNodes;\n        let node;\n        if (nodeArr && Array.isArray(nodeArr)) {\n            indexArr?.forEach((pathIndex: number, index) => {\n                if (index < indexArr.length - 1) {\n                    nodeArr = nodeArr && nodeArr[pathIndex]?.children;\n                } else {\n                    node = nodeArr[pathIndex];\n                }\n            });\n        }\n        return node;\n    }\n\n    expandAll(): void {\n        this.cdkTreeControl.expandAll();\n        this.changeDetectorRef.markForCheck();\n    }\n\n    expandAt(path: string, detectChanges = true): void {\n        this.getParentPaths(path).reverse().forEach((parentPath)=>{\n            this.cdkTreeControl.expand(this.getRunTimeTreeItem(parentPath));\n        });\n        this.cdkTreeControl.expand(this.getRunTimeTreeItem(path));\n\n        if (detectChanges) {\n            this.changeDetectorRef.detectChanges();\n        }\n    }\n\n    collapseAll(): void {\n        this.cdkTreeControl.collapseAll();\n        this.changeDetectorRef.markForCheck();\n    }\n\n    collapseAt(path: string, detectChanges = true): void {\n        this.cdkTreeControl.collapse(this.getRunTimeTreeItem(path));\n\n        if (detectChanges) {\n            this.changeDetectorRef.detectChanges();\n        }\n    }\n\n    filterTerm(filterInput: string, filterKey?: string, showChildrenOfMatchedItems?: boolean): void {\n        if (filterInput !== '' && filterInput !== null && typeof filterInput !== 'undefined') {\n            this.treeDataRunTime = this.filterTreeData(structuredClone(this.treeDataRunTimeBackup), filterKey || 'label', filterInput, showChildrenOfMatchedItems);\n            this.treeDataRunTime = this.applyRunTimeLastItems(this.treeDataRunTime);\n\n            this.treePagination = new EuiTreePagination<TreeItemRunTimeModel>(this.treeDataRunTime, 1, 2, this.virtualScrollPageSize);\n            const paginatedData = this.treePagination.getViewData().data;\n\n            this.cdkArrayDataSource = new ArrayDataSource(paginatedData);\n            this.cdkTreeControl = new NestedTreeControl<TreeItemRunTimeModel>((node) => node?.children, { trackBy: this.trackByControl });\n\n            this.cdkTreeControl.dataNodes = paginatedData;\n            this.renderTree = false;\n            this.changeDetectorRef.detectChanges();\n            this.renderTree = true;\n            this.changeDetectorRef.detectChanges();\n            this.expandAll();\n        } else {\n            this.treeDataRunTime = structuredClone(this.treeDataRunTimeBackup);\n\n            this.treePagination = new EuiTreePagination<TreeItemRunTimeModel>(this.treeDataRunTime, 1, 2, this.virtualScrollPageSize);\n            const paginatedData = this.treePagination.getViewData().data;\n\n            this.cdkArrayDataSource = new ArrayDataSource(paginatedData);\n            this.cdkTreeControl = new NestedTreeControl<TreeItemRunTimeModel>((node) => node?.children, { trackBy: this.trackByControl });\n            this.cdkTreeControl.dataNodes = paginatedData;\n            this.renderTree = false;\n            this.changeDetectorRef.detectChanges();\n            this.renderTree = true;\n            this.changeDetectorRef.detectChanges();\n            this.expandAll();\n        }\n    }\n\n    setAllSelection(isChecked: boolean): void {\n        if (!this.selectionModel) {\n            return;\n        }\n        this.tempSelectionModel = new SelectionModel<TreeItemRunTimeModel>(\n            true,\n            this.selectionModel.selected,\n            true,\n            (a, b) => a?.path === b?.path,\n        );\n        this.setIsCheckedForAll(this.treeDataRunTime, isChecked);\n        this.selectionModel.setSelection(...this.tempSelectionModel.selected);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    updateTreeItem(givenTreeItem: TreeItemModel, path: string): void {\n        const treeItem = structuredClone(givenTreeItem);\n        if (treeItem && path) {\n        this.tempSelectionModel = new SelectionModel<TreeItemRunTimeModel>(\n            true,\n            this.selectionModel.selected,\n            true,\n            (a, b) => a?.path === b?.path,\n        );\n        this.setTreeData(path, this.processInputs([treeItem])[0]);\n        const pathArr = path.split('.');\n        const index = parseInt(pathArr.pop(), 10);\n        const treeItemRuntime = this.calculateRunTimeState(treeItem, index, pathArr.join('.'));\n        if (treeItemRuntime?.children?.length > 0) {\n            treeItemRuntime.children = this.applyRunTimeLastItems(treeItemRuntime.children);\n        }\n        this.setTreeDataRunTimeBackup(path, treeItemRuntime);\n        this.setTreeDataRunTime(path, treeItemRuntime);\n        // itemRecursiveSelectionState\n        const itemRecursiveSelectionState = this.calculateItemSelectionRecursiveState(treeItem);\n        this.setRunTimeSelectionRecursiveStateTree(path, itemRecursiveSelectionState);\n        this.syncStateChangesAtPath(path);\n        if (this.cdkTreeControl.isExpanded(treeItemRuntime) && !treeItem.node.isExpanded) {\n            this.cdkTreeControl.toggle(treeItemRuntime);\n        } else if (!this.cdkTreeControl.isExpanded(treeItemRuntime) && treeItem.node.isExpanded) {\n            this.cdkTreeControl.expand(treeItemRuntime);\n        }\n        this.renderInitialExpand(this.getRunTimeTreeItem(path)?.children);\n        this.getInitialSelection(this.getRunTimeTreeItem(path)?.children)?.forEach((runTimeItem) => {\n            this.selectTreeItem(this.getRunTimeBackupTreeItem(runTimeItem.path));\n        });\n        this.selectionModel.setSelection(...this.tempSelectionModel.selected);\n        // Rendering\n        this.changeDetectorRef.detectChanges();\n        this.treeComponentInstance.renderNodeChanges([]);\n        this.treeComponentInstance.renderNodeChanges(this.treeDataRunTime);\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onNodeClick(treeRunTimeItem: TreeItemRunTimeModel, e: any): void {\n        if (!this.isMultiselect || e.pointerId !== -1) {\n            this.nodeClick.emit(this.getTreeItem(treeRunTimeItem?.path));\n        }\n\n        if (this.isClickTogglingNode) {\n            this.cdkTreeControl.toggle(treeRunTimeItem);\n            this.onNodeToggle(treeRunTimeItem);\n        }\n    }\n\n    onNodeToggle(treeRunTimeItem: TreeItemRunTimeModel): void {\n        this.getTreeItem(treeRunTimeItem?.path).node.isExpanded = this.cdkTreeControl.isExpanded(treeRunTimeItem);\n        this.nodeToggle.emit(this.getTreeItem(treeRunTimeItem?.path));\n    }\n\n    onToggleButtonClick(treeRunTimeItem: TreeItemRunTimeModel, event: Event): void {\n        event.stopPropagation();\n        this.cdkTreeControl.toggle(treeRunTimeItem);\n        this.onNodeToggle(treeRunTimeItem);\n    }\n\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    nodeSelected(evt: any, path: string): void {\n        const item = this.getTreeItem(path);\n        const runTimeBackupTreeItem = this.getRunTimeBackupTreeItem(path);\n        const renderedRunTimeTreeItem = this.getRunTimeTreeItem(path);\n        const node = item?.node;\n        this.tempSelectionModel = new SelectionModel<TreeItemRunTimeModel>(\n            true,\n            this.selectionModel.selected,\n            true,\n            (a, b) => a?.path === b?.path,\n        );\n        // console.log(path,item,runTimeTreeItem, renderedRunTimeTreeItem);\n        if(this.customNodeSelectFn){\n            this.customNodeSelectFn(path, evt.target.checked, item, new CustomNodeSelectFnHelper(this));\n            this.selectionModel.setSelection(...this.tempSelectionModel.selected);\n        }  else if (!node?.selectConfig?.singleSelect) {\n            node.isSelected = evt.target.checked;\n            node.isIndeterminate = false;\n            // If the node is recursive it sets every children with the change.\n            if (renderedRunTimeTreeItem?.children && renderedRunTimeTreeItem?.children?.length > 0) {\n                if (node?.selectConfig?.recursive) {\n                    // console.log(renderedRunTimeTreeItem);\n                    this.setIsCheckedForAll(renderedRunTimeTreeItem?.children, evt.target.checked);\n                }\n            }\n\n            this.setRunTimeSelectionRecursiveStateTree(\n                path,\n                this.calculateItemSelectionRecursiveState(structuredClone(this.getTreeItem(path))),\n            );\n            if (renderedRunTimeTreeItem?.children && renderedRunTimeTreeItem?.children?.length >= 0) {\n                if (node?.selectConfig?.recursive) {\n                    // this.setIsCheckedForAll(renderedRunTimeTreeItem?.children, evt.target.checked);\n                    this.runStateChangesForAll(renderedRunTimeTreeItem?.children);\n                }\n                const activeElement = evt.target as HTMLElement;\n                const expandedNodes = this.cdkTreeControl.expansionModel.selected;\n                // TODO v23: optimize using signals without destroying/recreating the entire dom subtree that causes focus loss, lines 489-496 could be then removed\n                this.treeComponentInstance?.renderNodeChanges([]);\n                this.treeComponentInstance?.renderNodeChanges(this.treeDataRunTime);\n                expandedNodes.forEach((expandedNode) => {\n                    const runtimeNode = this.getRunTimeTreeItem(expandedNode.path);\n                    if (runtimeNode) {\n                        this.cdkTreeControl.expand(runtimeNode);\n                    }\n                });\n                setTimeout(() => {\n                    const newEl = document.getElementById(activeElement.id) as HTMLElement;\n                    newEl?.focus();\n                });\n            }\n            this.syncStateChangesAtPath(path);\n            if (this.getTreeItem(path).node.isSelected) {\n                this.selectTreeItem(runTimeBackupTreeItem);\n            } else {\n                this.deselectTreeItem(runTimeBackupTreeItem);\n            }\n            const nodePathsSeq = this.getParentPaths(path);\n            if (nodePathsSeq.length > 0) {\n                nodePathsSeq.forEach((nodePath: string) => {\n                    const treeItem = this.getTreeItem(nodePath);\n                    const childStates = this.getRunTimeSelectionRecursiveState(nodePath).children.map((_) => _.selectionRecursiveState);\n                    this.updateRunTimeSelectionRecursiveState(\n                        nodePath,\n                        this.decideSelectionRecursiveState(\n                            childStates,\n                            treeItem.node?.isSelected,\n                            treeItem.node?.selectConfig?.recursive,\n                            treeItem.node?.selectConfig?.noAutoSelectParent,\n                        ),\n                    );\n                    this.syncStateChangesAtPath(nodePath);\n                });\n                this.changeDetectorRef.detectChanges();\n            } else {\n                this.changeDetectorRef.detectChanges();\n            }\n            this.selectionModel.setSelection(...this.tempSelectionModel.selected);\n        } else {\n            const prevItem = this.selectionModel.selected[0];\n            if (evt.target.checked) {\n                if (prevItem) {\n                    this.getTreeItem(prevItem.path).node.isSelected = false;\n                    this.selectionModel.deselect(prevItem);\n                }\n                item.node.isSelected = true;\n                this.selectionModel.select(runTimeBackupTreeItem);\n            } else {\n                item.node.isSelected = false;\n                this.selectionModel.deselect(runTimeBackupTreeItem);\n            }\n            if (this.highlightPath) {\n                if (evt.target.checked && prevItem) {\n                    const prevItemNodePathsSeq = this.getParentPaths(prevItem.path);\n                    if (prevItemNodePathsSeq.length > 0) {\n                        prevItemNodePathsSeq.forEach((nodePath: string) => {\n                            this.updateRunTimeSelectionRecursiveState(nodePath, 'allNotSelected');\n                            this.syncStateChangesAtPath(nodePath);\n                        });\n                    }\n                }\n                const nodePathsSeq = this.getParentPaths(path);\n                if (nodePathsSeq?.length > 0) {\n                    nodePathsSeq.forEach((nodePath: string) => {\n                        this.updateRunTimeSelectionRecursiveState(nodePath, evt.target.checked ? 'indeterminate' : 'allNotSelected');\n                        this.syncStateChangesAtPath(nodePath);\n                    });\n                    this.changeDetectorRef.detectChanges();\n                }\n            }\n        }\n    }\n\n    hasChild = (_: number, item: TreeItemRunTimeModel): boolean => !!item?.children && item?.children?.length >= 0;\n\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onSelectFn(path: string): (evt: any) => void {\n        if (this.getTreeItem(path)?.node?.selectable) {\n            const nodeSelected = this.nodeSelected.bind(this);\n            // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            return (evt: any) => nodeSelected(evt, path);\n        }\n        // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return (evt: any) => {\n            console.warn('treeItemModel.node.selectable is false, you can not implement onSelect');\n        };\n    }\n\n    getRunTimeSelectionRecursiveState(path: string): TreeItemSelectionRecursiveModel {\n        const indexArr: Array<number> = this.resolvePath(path);\n        let nodeArr = this.runTimeSelectionRecursiveState;\n        let node;\n        indexArr?.forEach((pathIndex: number, index) => {\n            if (index < indexArr.length - 1) {\n                nodeArr = nodeArr[pathIndex]?.children;\n            } else {\n                node = nodeArr[pathIndex];\n            }\n        });\n        return node;\n    }\n\n    private initTree(): void {\n        if (this.nodes) {\n            this._isMultiLevel = this.checkIfMultiLevel(this.nodes);\n            this.processedNodes = this.processInputs(structuredClone(this.nodes));\n            this.treeDataRunTime = this.createTreeDataRuntime(this.processedNodes);\n            this.treeDataRunTime = this.applyRunTimeLastItems(this.treeDataRunTime);\n            this.runTimeSelectionRecursiveState = this.createRunTimeSelectionRecursiveState(this.processedNodes);\n            this.treeDataRunTimeBackup = structuredClone(this.treeDataRunTime);\n\n            if (this.treeDataRunTimeBackup.length > this.virtualScrollThreshold) {\n                this.treePagination = new EuiTreePagination<TreeItemRunTimeModel>(this.treeDataRunTimeBackup, 1, 2, this.virtualScrollPageSize);\n                const paginatedData = this.treePagination.getViewData().data;\n                this.cdkArrayDataSource = new ArrayDataSource<TreeItemRunTimeModel>(paginatedData);\n                this.cdkTreeControl = new NestedTreeControl<TreeItemRunTimeModel>((node) => node?.children, {\n                    trackBy: this.trackByControl,\n                });\n                this.cdkTreeControl.dataNodes = paginatedData;\n                this.runScrollListener();\n            } else {\n                this.cdkArrayDataSource = new ArrayDataSource<TreeItemRunTimeModel>(this.treeDataRunTime);\n                this.cdkTreeControl = new NestedTreeControl<TreeItemRunTimeModel>((node) => node?.children, {\n                    trackBy: this.trackByControl,\n                });\n                this.cdkTreeControl.dataNodes = this.treeDataRunTime;\n            }\n            this.renderInitialExpand(this.treeDataRunTime);\n            this.selectionModel = new SelectionModel<TreeItemRunTimeModel>(\n                true,\n                this.getInitialSelection(this.treeDataRunTime),\n                true,\n                (a, b) => a?.path === b?.path,\n            );\n            this._selection = [...this.selectionModel.selected]?.map((item) => this.getTreeItem(item?.path));\n            this.renderTree = true;\n            if (this.selectionModelSubs) {\n                this.selectionModelSubs.unsubscribe();\n            }\n            this.selectionModelSubs = this.selectionModel.changed.pipe(debounceTime(1)).subscribe((sc) => {\n                const selectionChange = {\n                    added: sc.added.map((_) => this.getTreeItem(_.path)),\n                    removed: sc.removed.map((_) => this.getTreeItem(_.path)),\n                    selection: [...this.selectionModel.selected].map((item) => this.getTreeItem(item.path)),\n                };\n                this._selection = selectionChange.selection;\n                this.selectionChange.emit(selectionChange);\n            });\n            this.changeDetectorRef.markForCheck();\n        }\n    }\n\n    private processInputs(treeData: TreeDataModel): TreeDataModel {\n        if (this.isMultiselect) {\n            treeData = this.overrideTreeDataModelForSelection(treeData, this.isRecursiveSelection, !this.isRecursiveParentSelection);\n        }\n        if (this.isSingleSelect) {\n            treeData = this.overrideTreeDataModelForSelection(treeData, false, false, true);\n        }\n        return treeData;\n    }\n\n    private overrideTreeDataModelForSelection(\n        nodeArr: TreeDataModel,\n        isRecursive: boolean,\n        noAutoSelectParent: boolean,\n        singleSelect?: boolean,\n    ): TreeDataModel {\n        return nodeArr?.map((item: TreeItemModel, index: number) => {\n            if (item?.children && item.children.length > 0) {\n                return {\n                    ...item,\n                    node: {\n                        ...item.node,\n                        selectable: typeof item?.node?.selectable === 'undefined' ? true : item?.node?.selectable,\n                        // isSelected: false,\n                        // isIndeterminate: false,\n                        selectConfig: {\n                            ...item.node.selectConfig,\n                            recursive:\n                                typeof item?.node?.selectConfig?.recursive === 'undefined'\n                                    ? !!isRecursive\n                                    : item?.node?.selectConfig?.recursive,\n                            noAutoSelectParent:\n                                typeof item?.node?.selectConfig?.noAutoSelectParent === 'undefined'\n                                    ? noAutoSelectParent\n                                    : item?.node?.selectConfig?.noAutoSelectParent,\n                            singleSelect:\n                                typeof item?.node?.selectConfig?.singleSelect === 'undefined'\n                                    ? singleSelect\n                                    : item?.node?.selectConfig?.singleSelect,\n                        },\n                    },\n                    children: this.overrideTreeDataModelForSelection(item.children, isRecursive, noAutoSelectParent, singleSelect),\n                };\n            } else {\n                return {\n                    ...item,\n                    node: {\n                        ...item.node,\n                        selectable: typeof item?.node?.selectable === 'undefined' ? true : item?.node?.selectable,\n                        selectConfig: {\n                            ...item.node?.selectConfig,\n                            singleSelect:\n                                typeof item?.node?.selectConfig?.singleSelect === 'undefined'\n                                    ? singleSelect\n                                    : item?.node?.selectConfig?.singleSelect,\n                        },\n                    },\n                };\n            }\n        });\n    }\n\n    private runScrollListener(): void {\n        /* if (this.scrollDispatcherSubs) { todo\n            this.scrollDispatcherSubs.unsubscribe();\n        }*/\n        this.scrollDispatcherSubs = this.scrollDispatcher.scrolled().subscribe((scrollable: CdkScrollable) => {\n            if (scrollable && this.checkIfCurrentScrollable(scrollable)) {\n                const isAtBottom =\n                    scrollable?.getElementRef().nativeElement.scrollTop + scrollable?.getElementRef().nativeElement.clientHeight >=\n                    scrollable?.getElementRef().nativeElement.scrollHeight;\n                const isAtTop = scrollable?.getElementRef().nativeElement.scrollTop === 0;\n                // console.log('Element:', this.cdkScrollableRef.getElementRef());\n                if (isAtBottom && !this.treePagination.isAtMax()) {\n                    if (this.nodes.length > 0) {\n                        this.treeDataRunTime = this.treePagination.paginateNext().data;\n                        this.treeDataRunTime = this.applyRunTimeLastItems(this.treeDataRunTime);\n                        this.cdkArrayDataSource = new ArrayDataSource(this.treeDataRunTime);\n                        this.cdkTreeControl = new NestedTreeControl<TreeItemRunTimeModel>((node) => node?.children, {\n                            trackBy: this.trackByControl,\n                        });\n                        this.cdkTreeControl.dataNodes = this.treeDataRunTime;\n                        this.renderTree = false;\n                        this.changeDetectorRef.detectChanges();\n                        this.renderTree = true;\n                        this.changeDetectorRef.detectChanges();\n                        this.expandAll();\n                        const totalHeight = scrollable.measureScrollOffset('bottom') + scrollable.measureScrollOffset('top');\n                        const viewportHeight = scrollable.getElementRef().nativeElement.clientHeight;\n                        const positionToScroll = totalHeight - viewportHeight;\n                        scrollable.scrollTo({ top: positionToScroll / 2 });\n                    }\n                } else if (isAtTop && this.treePagination.getCurrentStartPage() > 1) {\n                    if (this.nodes.length > 0) {\n                        this.treeDataRunTime = this.treePagination.paginatePrev().data;\n                        this.treeDataRunTime = this.applyRunTimeLastItems(this.treeDataRunTime);\n                        this.cdkArrayDataSource = new ArrayDataSource(this.treeDataRunTime);\n                        this.cdkTreeControl = new NestedTreeControl<TreeItemRunTimeModel>((node) => node?.children, {\n                            trackBy: this.trackByControl,\n                        });\n                        this.cdkTreeControl.dataNodes = this.treeDataRunTime;\n                        this.renderTree = false;\n                        this.changeDetectorRef.detectChanges();\n                        this.renderTree = true;\n                        this.changeDetectorRef.detectChanges();\n                        this.expandAll();\n                        const totalHeight = scrollable.measureScrollOffset('bottom') + scrollable.measureScrollOffset('top');\n                        const viewportHeight = scrollable.getElementRef().nativeElement.clientHeight;\n                        const positionToScroll = totalHeight - viewportHeight;\n                        scrollable.scrollTo({ top: positionToScroll / 2 + viewportHeight });\n                    }\n                }\n            }\n        });\n    }\n\n    private getSelectionIndexOfItem(runTimeTreeItem: TreeItemRunTimeModel): number {\n        return this.selectionModel.selected.findIndex((i) => i?.path === runTimeTreeItem?.path);\n    }\n    // todo re-think about the access from custom on node select helper\n    private silentSelect(path:string, isChecked: boolean): void{\n        const runtimeBackupTreeItem = this.getRunTimeBackupTreeItem(path);\n        const treeItem = this.getTreeItem(path);\n        const node = treeItem.node;\n        if (node?.selectable) {\n            node.isSelected = isChecked;\n            node.isIndeterminate = false;\n            if (isChecked) {\n                this.tempSelectionModel.select(runtimeBackupTreeItem);\n            } else {\n                this.tempSelectionModel.deselect(runtimeBackupTreeItem);\n            }\n        }\n    }\n\n    private selectTreeItem(runTimeBackupTreeItem: TreeItemRunTimeModel): void {\n        this.tempSelectionModel.select(runTimeBackupTreeItem);\n    }\n\n    private deselectTreeItem(runTimeTreeItem: TreeItemRunTimeModel): void {\n        this.tempSelectionModel.deselect(runTimeTreeItem);\n    }\n\n    private createTreeDataRuntime(nodes: TreeDataModel): TreeDataRunTimeModel {\n        return structuredClone(nodes)?.map((item, index) => {\n            return this.calculateRunTimeState(item, index);\n        });\n    }\n\n    private applyRunTimeLastItems(items: TreeDataRunTimeModel): TreeDataRunTimeModel {\n        return items?.map((item, index) => {\n            if (item?.children) {\n                return {\n                    ...item,\n                    last: items.length === index + 1 ? true : undefined,\n                    children: item.children?.length > 0 ? this.applyRunTimeLastItems(item.children) : item?.children,\n                };\n            } else {\n                return {\n                    ...item,\n                    last: items.length === index + 1 ? true : undefined,\n                };\n            }\n        });\n    }\n\n    private createRunTimeSelectionRecursiveState(nodes: TreeDataModel): Array<TreeItemSelectionRecursiveModel> {\n        return structuredClone(nodes)?.map((item) => this.calculateItemSelectionRecursiveState({ ...item }));\n    }\n\n    // Creating run time state which includes children selection state for selection tree.\n    private calculateItemSelectionRecursiveState(treeItem: TreeItemModel): TreeItemSelectionRecursiveModel {\n        const childrenSelectionRecursive: Array<TreeItemSelectionRecursiveModel> = [];\n        if (treeItem.children && treeItem.children.length > 0) {\n            treeItem.children.forEach((child, index) => {\n                childrenSelectionRecursive[index] = this.calculateItemSelectionRecursiveState(child);\n            });\n        }\n        const childStates = childrenSelectionRecursive.map((_) => _.selectionRecursiveState);\n        const itemState: SelectionRecursiveState =  treeItem.node.selectable ? this.decideSelectionRecursiveState(\n            childStates,\n            treeItem.node.isSelected,\n            treeItem.node?.selectConfig?.recursive,\n            treeItem.node?.selectConfig?.noAutoSelectParent,\n        ) : undefined;\n        return {\n            selectionRecursiveState: itemState,\n            children: childrenSelectionRecursive,\n        };\n    }\n\n    private decideSelectionRecursiveState(\n        childStates: Array<SelectionRecursiveState> = [],\n        isSelected: boolean,\n        recursive: boolean,\n        noAutoSelectParent: boolean,\n    ): SelectionRecursiveState {\n        let itemState: SelectionRecursiveState = 'indeterminate';\n        if (isSelected && childStates.filter((childStates)=>childStates).every((state) => state === 'allSelected')) {\n            itemState = 'allSelected';\n        } else if (!isSelected && childStates.filter((childStates)=>childStates).every((state) => state === 'allNotSelected')) {\n            itemState = 'allNotSelected';\n        } else if (recursive && childStates.filter((childStates)=>childStates).every((state) => state === 'allSelected') && !isSelected && !noAutoSelectParent) {\n            itemState = 'allSelected';\n        } else if (recursive && childStates.filter((childStates)=>childStates).every((state) => state === 'allNotSelected') && isSelected) {\n            itemState = 'allNotSelected';\n        }\n        return itemState;\n    }\n\n    private syncStateChangesAtPath(nodePath): void {\n        const treeItem = this.getTreeItem(nodePath);\n        const runTimeBackupTreeItem = this.getRunTimeBackupTreeItem(nodePath);\n        const runTimeSelectionRecursiveItem = this.getRunTimeSelectionRecursiveState(nodePath);\n        if (treeItem?.node?.selectable && treeItem.node?.selectConfig?.recursive) {\n            if (!treeItem.node?.selectConfig?.noAutoSelectParent) {\n                treeItem.node = {\n                    ...treeItem.node,\n                    isSelected: runTimeSelectionRecursiveItem.selectionRecursiveState === 'allSelected',\n                    isIndeterminate: runTimeSelectionRecursiveItem.selectionRecursiveState === 'indeterminate',\n                };\n            } else {\n                treeItem.node = {\n                    ...treeItem.node,\n                    isSelected: treeItem.node.isSelected && runTimeSelectionRecursiveItem.selectionRecursiveState === 'allSelected',\n                    isIndeterminate:\n                        runTimeSelectionRecursiveItem.selectionRecursiveState === 'indeterminate' ||\n                        (!treeItem.node.isSelected && runTimeSelectionRecursiveItem.selectionRecursiveState === 'allSelected'),\n                };\n            }\n            // console.log(treeItem, treeItem.node.treeContentBlock.label, 'isSelected:' + treeItem.node.isSelected, 'isIndeterminate:' + treeItem.node.isIndeterminate);\n            if (treeItem.node.isSelected === true && !this.selectionModel.isSelected(runTimeBackupTreeItem)) {\n                this.selectTreeItem(runTimeBackupTreeItem);\n            } else if (treeItem.node.isSelected === false && this.selectionModel.isSelected(runTimeBackupTreeItem)) {\n                this.deselectTreeItem(runTimeBackupTreeItem);\n            }\n        }\n    }\n\n    private setTreeData(path: string, item: TreeItemModel): void {\n        const indexArr: Array<number> = this.resolvePath(path);\n        let itemArr = this.processedNodes;\n        indexArr?.forEach((pathIndex: number, index) => {\n            if (index < indexArr.length - 1) {\n                itemArr = itemArr[pathIndex]?.children;\n            } else {\n                itemArr[pathIndex] = item;\n            }\n        });\n    }\n\n    private setTreeDataRunTimeBackup(path: string, item: TreeItemRunTimeModel): void {\n        const indexArr: Array<number> = this.resolvePath(path);\n        let itemArr = this.treeDataRunTimeBackup;\n        indexArr.forEach((pathIndex: number, index) => {\n            if (index < indexArr.length - 1) {\n                itemArr = itemArr[pathIndex]?.children;\n            } else {\n                itemArr[pathIndex] = item;\n            }\n        });\n    }\n\n    private setTreeDataRunTime(path: string, item: TreeItemRunTimeModel): void {\n        const oldItem = this.getRunTimeTreeItem(path);\n        if(oldItem){\n            Object.keys(item)?.forEach(key => {\n                oldItem[key] = item[key];\n            });\n        }\n    }\n\n    private setRunTimeSelectionRecursiveStateTree(path: string, item: TreeItemSelectionRecursiveModel): void {\n        const indexArr: Array<number> = this.resolvePath(path);\n        let itemArr = this.runTimeSelectionRecursiveState;\n        indexArr.forEach((pathIndex: number, index) => {\n            if (index < indexArr.length - 1) {\n                itemArr = itemArr[pathIndex]?.children;\n            } else {\n                itemArr[pathIndex] = item;\n            }\n        });\n    }\n\n    private updateRunTimeSelectionRecursiveState(path: string, selectionRecursiveState: SelectionRecursiveState): void {\n        const indexArr: Array<number> = this.resolvePath(path);\n        let itemArr = this.runTimeSelectionRecursiveState;\n        indexArr.forEach((pathIndex: number, index) => {\n            if (index < indexArr.length - 1) {\n                itemArr = itemArr[pathIndex]?.children;\n            } else {\n                itemArr[pathIndex] = {\n                    ...itemArr[pathIndex],\n                    selectionRecursiveState,\n                };\n            }\n        });\n    }\n\n    private setIsCheckedForAll(nodeArr: Array<TreeItemRunTimeModel>, isChecked: boolean): void {\n        nodeArr.forEach((runTimeItem: TreeItemRunTimeModel, index: number) => {\n            const runtimeBackupTreeItem = this.getRunTimeBackupTreeItem(runTimeItem.path);\n            const treeItem = this.getTreeItem(runTimeItem.path);\n            const node = treeItem.node;\n            if (node?.selectable) {\n                node.isSelected = isChecked;\n                node.isIndeterminate = false;\n                if (isChecked) {\n                    this.selectTreeItem(runtimeBackupTreeItem);\n                } else {\n                    this.deselectTreeItem(runtimeBackupTreeItem);\n                }\n            }\n            if (runTimeItem?.children?.length > 0) {\n                this.setIsCheckedForAll(nodeArr[index].children, isChecked);\n            }\n        });\n    }\n\n    private runStateChangesForAll(nodeArr: Array<TreeItemRunTimeModel>): void {\n        nodeArr?.forEach((runTimeItem: TreeItemRunTimeModel, index: number) => {\n            if (runTimeItem?.children?.length >= 0) {\n                this.runStateChangesForAll(nodeArr[index].children);\n                this.syncSelectionAtPath(runTimeItem);\n            }\n        });\n    }\n\n    private syncSelectionAtPath(runTimeTreeItem: TreeItemRunTimeModel): void {\n        // It is here for the filter edge case.\n        this.syncStateChangesAtPath(runTimeTreeItem.path);\n        // Sets isSelected change on the control.\n        if (this.getTreeItem(runTimeTreeItem.path).node.isSelected) {\n            this.selectTreeItem(this.getRunTimeBackupTreeItem(runTimeTreeItem.path));\n        } else {\n            this.deselectTreeItem(this.getRunTimeBackupTreeItem(runTimeTreeItem.path));\n        }\n    }\n\n    private resolvePath(path: string): Array<number> {\n        return path?.split('.').map((index: string) => parseInt(index, 10));\n    }\n\n    private getParentPaths(path: string): Array<string> {\n        const pathArr = path.split('.');\n        const hasParent = pathArr.length > 1;\n        // Sets the hasParent If there is a parent, and removes the last element form pathArr.\n        if (hasParent) {\n            pathArr.pop();\n            // Calculates parent path\n            const parentPath = pathArr.join('.');\n            // Creating node index sequence f.e If path is '1.2' it will be [1,2]\n            const nodeIndexSeq = parentPath.split('.').map((indexStr) => parseInt(indexStr, 10));\n            // Calculating the node paths array to be re-calculated from bottom to top\n            const nodePathsSeq = [];\n            nodeIndexSeq.forEach((nodeIndex, index) => {\n                nodePathsSeq[index] = nodeIndexSeq.slice(0, index + 1).join('.');\n            });\n            return nodePathsSeq.reverse();\n        } else {\n            return [];\n        }\n    }\n\n    private calculateRunTimeState(treeItem: TreeItemModel, index: number, parentPath?: string): TreeItemRunTimeModel {\n        const runTimeTreeItem: TreeItemRunTimeModel = {\n            path: parentPath ? parentPath + '.' + index : index.toString(),\n            index,\n        };\n        if (treeItem.children && treeItem.children.length >= 0) {\n            runTimeTreeItem.children = [];\n            treeItem.children.forEach((child, treeItemIndex) => {\n                runTimeTreeItem.children[treeItemIndex] = this.calculateRunTimeState(child, treeItemIndex, runTimeTreeItem.path);\n            });\n        }\n        return runTimeTreeItem;\n    }\n\n    private filterTreeData(runTimeTreeData: TreeDataRunTimeModel, key = 'label', filterStr: string, showChildren: boolean, show?:boolean): TreeDataRunTimeModel {\n        return runTimeTreeData.filter((runTimeItem) => {\n            const targetData = this.getTreeItem(runTimeItem.path).node.treeContentBlock[key];\n            if (\n                targetData && this.normalizedStr(targetData)?.includes(this.normalizedStr(filterStr))\n            ) {\n                if(runTimeItem?.children?.length > 0){\n                    runTimeItem.children = this.filterTreeData(runTimeItem.children, key, filterStr, showChildren, showChildren);\n                }\n                Object.assign(runTimeItem,{ matched: true })\n                // runTimeItem.matched = true;\n                return true;\n            } else if (runTimeItem?.children?.length > 0) {\n                runTimeItem.children = this.filterTreeData(runTimeItem.children, key, filterStr, showChildren, show);\n                runTimeItem.children = runTimeItem.children.length > 0 ? runTimeItem.children : undefined;\n                return runTimeItem?.children?.length > 0 || show;\n            } else {\n                return show;\n            }\n        });\n    }\n\n    private normalizedStr(str: string): string {\n        return str\n            .toLowerCase()\n            .normalize('NFD')\n            .replace(/[\\u0300-\\u036f]/g, '');\n    }\n\n    private getInitialSelection(nodes: TreeDataRunTimeModel): Array<TreeItemRunTimeModel> {\n        const selection: Array<TreeItemRunTimeModel> = [];\n        this.scanSelection(nodes, selection);\n        return selection;\n    }\n\n    private scanSelection(nodes: TreeDataRunTimeModel, selection: Array<TreeItemRunTimeModel>): void {\n        nodes?.forEach((item: TreeItemRunTimeModel) => {\n            if (this.getTreeItem(item.path).node?.selectable && this.getTreeItem(item.path).node.isSelected) {\n                selection.push(item);\n            }\n            if (item?.children?.length > 0) {\n                this.scanSelection(item.children, selection);\n            }\n        });\n    }\n\n    private renderInitialExpand(nodes: TreeDataRunTimeModel): void {\n        const expandRecursive = (items: TreeDataRunTimeModel): void => {\n            items?.forEach((item: TreeItemRunTimeModel) => {\n                if (item?.children?.length > 0) {\n                    expandRecursive(item.children);\n                }\n\n                const treeItemNode = this.getTreeItem(item.path).node;\n                if (typeof treeItemNode.isExpanded !== 'undefined') {\n                    if (treeItemNode.isExpanded && !this.cdkTreeControl.isExpanded(item)) {\n                        this.expandAt(item.path, false);\n                    } else if (!treeItemNode.isExpanded && this.cdkTreeControl.isExpanded(item)) {\n                        this.cdkTreeControl.collapse(item);\n                    }\n                }\n            });\n        };\n\n        expandRecursive(nodes);\n        this.changeDetectorRef.detectChanges();\n    }\n\n    private expandMatched(nodes: TreeDataRunTimeModel): void {\n        nodes.forEach((item: TreeItemRunTimeModel) => {\n            if (item.matched) {\n                const parentPath = this.getParentPaths(item.path)[0];\n                if (parentPath) {\n                    let parentTreeItem = this.getTreeItem(parentPath);\n                    parentTreeItem = {\n                        ...parentTreeItem,\n                        node: {\n                            ...parentTreeItem.node,\n                            isExpanded: true,\n                        },\n                    };\n                    //  node.isExpanded = true;\n                    // console.log(\"here\", parentTreeItem.node.treeContentBlock.label, parentPath, item);\n                    this.expandAt(parentPath);\n                }\n            }\n            if (item?.children?.length > 0) {\n                this.expandMatched(item.children);\n            }\n        });\n    }\n\n    private getRunTimeTreeItem(path: string): TreeItemRunTimeModel {\n        return this.findRunTimeTreeItem(this.treeDataRunTime, path);\n    }\n\n    private findRunTimeTreeItem(treeDataRunTime: TreeDataRunTimeModel, path): TreeItemRunTimeModel {\n        for (const runTimeItem of treeDataRunTime) {\n            if (runTimeItem.path === path) {\n                return runTimeItem;\n            } else if (runTimeItem?.children?.length > 0) {\n                const found = this.findRunTimeTreeItem(runTimeItem.children, path);\n                if (found) {\n                    return found;\n                }\n            }\n        }\n        return null;\n    }\n\n    private getRunTimeBackupTreeItem(path: string): TreeItemRunTimeModel {\n        const indexArr: Array<number> = this.resolvePath(path);\n        let nodeArr = this.treeDataRunTimeBackup;\n        let node;\n        if (nodeArr && Array.isArray(nodeArr)) {\n            indexArr?.forEach((pathIndex: number, index) => {\n                if (index < indexArr.length - 1) {\n                    nodeArr = nodeArr && nodeArr[pathIndex]?.children;\n                } else {\n                    node = nodeArr[pathIndex];\n                }\n            });\n        }\n        return node;\n    }\n\n    private getCssClasses(): string {\n        return [\n            'eui-tree',\n            this.isMultiselect ? 'eui-tree--multiselect' : '',\n            this._isMultiLevel ? 'eui-tree--with-children' : '',\n            this.showLines ? 'eui-tree--show-lines' : '',\n        ]\n        .join(' ')\n        .trim();\n    }\n\n    private checkIfMultiLevel(tree: TreeDataModel): boolean {\n        let isMultiLevel = false;\n        tree.forEach((item: TreeItemModel) => {\n            if (item?.children?.length >= 0) {\n                isMultiLevel = true;\n            }\n        });\n        return isMultiLevel;\n    }\n\n    private checkIfCurrentScrollable(scrolled: CdkScrollable): boolean {\n        return scrolled.getElementRef().nativeElement === this.cdkScrollableRef.getElementRef().nativeElement;\n    }\n}\n","<div class=\"eui-ul-rep eui-tree__wrapper\" cdkScrollable #cdkScrollableRef>\n    @if (renderTree) {\n    <cdk-tree\n        #treeComponentInstance\n        [dataSource]=\"cdkArrayDataSource\"\n        [treeControl]=\"cdkTreeControl\"\n        [trackBy]=\"trackBy\"\n        class=\"eui-cdk-tree\">\n        <!-- There are two states of generic cdk-nested-tree-node declarations.\n        First one is without child. No sub rendering.\n        -->\n        <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n            @if (treeRunTimeItemModel) {\n            <div\n                class=\"eui-li-rep eui-tree-node\"\n                [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n                [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n                title=\"{{\n                autoTranslate\n                    ? ((getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel\n                        || getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label) | translate)\n                    : (getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel\n                        || getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label)\n                }}\">\n                <div class=\"eui-tree-node-wrapper\"\n                     (click)=\"onNodeClick(treeRunTimeItemModel, $event)\">\n                    <div class=\"eui-tree-node-wrapper__container\">\n                        <!--\n                        Renders node in default or provided template's context.\n                        Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n                        Provides id to be used on generic template\n                        -->\n                        <ng-container\n                            [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n                            [ngTemplateOutletContext]=\"{\n                                $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n                                onSelect: onSelectFn(treeRunTimeItemModel.path),\n                                id: uid + treeRunTimeItemModel.path,\n                                path: treeRunTimeItemModel.path\n                            }\">\n                        </ng-container>\n                    </div>\n                </div>\n            </div>\n            }\n        </cdk-nested-tree-node>\n        <!-- This is the tree node template for expandable nodes -->\n        <cdk-nested-tree-node\n            *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n            class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n            @if (treeRunTimeItemModel) {\n            <div\n                class=\"eui-li-rep eui-tree-node eui-tree-node--with-child\"\n                [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n                [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n                title=\"{{\n                autoTranslate\n                    ? ((getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel\n                        || getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label) | translate)\n                    : (getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel\n                        || getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label)\n                }}\">\n                <div\n                    class=\"eui-tree-node-wrapper\">\n                    <!--Here wraps the node, and listen for node clicks.-->\n                    <div (click)=\"onNodeClick(treeRunTimeItemModel, $event)\" class=\"eui-tree-node-wrapper__container\">\n                        <!-- Expand/collapse action button -->\n                        <button\n                            euiButton\n                            euiIconButton\n                            euiBasicButton\n                            euiRounded\n                            euiSizeS\n                            type=\"button\"\n                            [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n                            (click)=\"onToggleButtonClick(treeRunTimeItemModel, $event)\"\n                            class=\"eui-tree-node__button\">\n                            @if (!cdkTreeControl.isExpanded(treeRunTimeItemModel)) {\n                            <eui-icon-svg\n                                [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n                            }\n                            @if (cdkTreeControl.isExpanded(treeRunTimeItemModel)) {\n                            <eui-icon-svg\n                                [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n                            }\n                        </button>\n                        <!--\n                        Renders node in default or provided template's context.\n                        Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n                        Provides id to be used on generic template\n                        -->\n                        <ng-container\n                            [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n                            [ngTemplateOutletContext]=\"{\n                                $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n                                onSelect: onSelectFn(treeRunTimeItemModel.path),\n                                id: uid + treeRunTimeItemModel.path,\n                                path: treeRunTimeItemModel.path,\n                                children: getTreeItem(treeRunTimeItemModel?.path)?.children\n                            }\">\n                        </ng-container>\n                    </div>\n                </div>\n                <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n                @if (cdkTreeControl.isExpanded(treeRunTimeItemModel)) {\n                <div class=\"eui-ul-rep eui-tree-node\" role=\"group\">\n                    <ng-container cdkTreeNodeOutlet></ng-container>\n                </div>\n                }\n            </div>\n            }\n        </cdk-nested-tree-node>\n    </cdk-tree>\n    }\n</div>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n    @if (node) {\n        <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n            <!--input checkbox area-->\n            @if (node && node.selectable) {\n            <input\n                euiInputCheckBox\n                type=\"checkbox\"\n                id=\"{{ id }}\"\n                [checked]=\"!!node?.isSelected\"\n                [indeterminate]=\"!!node?.isIndeterminate\"\n                (change)=\"onSelect($event)\" />\n            }\n\n            <!--icon area-->\n            @if (node?.treeContentBlock?.iconSvgName) {\n                <eui-icon-svg\n                    icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n                    fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'neutral' }}\"\n                    size=\"s\"\n                    class=\"eui-u-mr-xs\">\n                </eui-icon-svg>\n            }\n\n            <!--chips area-->\n            @if (node?.treeContentBlock?.chips) {\n                @for (chip of node.treeContentBlock.chips; track chip) {\n                <eui-chip\n                    euiSizeS\n                    [euiVariant]=\"chip.typeClass || 'secondary'\"\n                    [euiOutline]=\"chip.isOutline\"\n                    class=\"eui-chip--rounded eui-u-mr-xs\">\n                    <span euiLabel>{{ chip.label }}</span>\n                </eui-chip>\n                }\n            }\n\n            <!--badge (typeLabel & typeClass) area-->\n            @if (node?.treeContentBlock?.typeLabel) {\n                <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n                    {{ node?.treeContentBlock?.typeLabel }}\n                </eui-badge>\n            }\n        </div>\n\n        <!--label area-->\n        <div class=\"eui-tree-node-wrapper__container-middle\">\n            @if (!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal) {\n            <label\n                euiLabel\n                for=\"{{ id }}\"\n                class=\"eui-u-text-truncate eui-u-p-2xs\"\n                [class.eui-label--selected]=\"\n                    highlightPath\n                        ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n                        : node?.isSelected\n                \"\n                [class.eui-u-cursor-pointer]=\"node?.selectable\">\n                {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n            </label>\n            }\n            @if (node?.treeContentBlock?.url) {\n            <label euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n                <a\n                    class=\"eui-u-text-link\"\n                    [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n                    [routerLink]=\"node?.treeContentBlock?.url\">\n                    {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n                </a>\n            </label>\n            }\n            @if (node?.treeContentBlock?.urlExternal) {\n            <label euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n                <a\n                    class=\"eui-u-text-link-external\"\n                    [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n                    href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n                    target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n                    {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n                </a>\n            </label>\n            }\n        </div>\n\n        @if (node?.treeContentBlock?.rightContent) {\n        <div class=\"eui-tree-node-wrapper__container-right\">\n            <!--badges area-->\n            @for (badge of node.treeContentBlock.rightContent?.badges; track badge) {\n                <eui-badge euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n                    {{ badge.label }}\n                </eui-badge>\n            }\n\n            <!--chips area-->\n            @for (chip of node.treeContentBlock.rightContent?.chips; track chip) {\n                <eui-chip\n                    euiSizeS\n                    [euiVariant]=\"chip.typeClass || 'secondary'\"\n                    [euiOutline]=\"chip.isOutline\"\n                    class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n                    {{ chip.label }}\n                </eui-chip>\n            }\n\n            <!--Context menu-->\n            @if (node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef) {\n                <eui-dropdown class=\"eui-u-ml-xs\">\n                    <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n                        <eui-icon-svg icon=\"eui-ellipsis-vertical\"></eui-icon-svg>\n                    </button>\n                    <eui-dropdown-content>\n                        <ng-template\n                            [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n                            [ngTemplateOutletContext]=\"{\n                                $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n                                metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n                            }\">\n                        </ng-template>\n                    </eui-dropdown-content>\n                </eui-dropdown>\n            }\n        </div>\n        }\n\n        <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n        @if (node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef) {\n        <ng-container\n            [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n            [ngTemplateOutletContext]=\"{\n                $implicit: { expanded: false }\n            }\" />\n        }\n        <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n            <button\n                euiButton\n                euiBasicButton\n                euiIconButton\n                euiRounded\n                euiSizeS\n                type=\"button\"\n                aria-label=\"expand collapse tree item\"\n                (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n                <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-right'\"></eui-icon-svg>\n            </button>\n            @if (metaDataContainer.expanded) {\n            <div class=\"eui-tree-node__metacontent\">\n                <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n                <ng-template\n                    [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n                    [ngTemplateOutletContext]=\"{\n                        $implicit: node?.treeContentBlock?.metadata,\n                        metadata: node?.treeContentBlock?.metadata\n                    }\">\n                </ng-template>\n            </div>\n            }\n        </ng-template>\n        }\n</ng-template>\n","import {\n    Directive,\n    AfterContentInit,\n    ContentChild,\n    Input,\n    TemplateRef,\n    AfterViewInit,\n    ChangeDetectorRef,\n    ElementRef,\n    Renderer2,\n    inject,\n} from '@angular/core';\nimport { EuiTreeComponent } from './eui-tree.component';\nimport { TreeDataModel } from './eui-tree.model';\nimport { EuiDropdownComponent } from '@eui/components/eui-dropdown';\n\n/**\n * @description\n * Directive that integrates eui-tree with eui-dropdown for tree-based selection in dropdown menus.\n * Automatically updates dropdown trigger button label based on tree selection state.\n * Supports custom button templates for flexible trigger rendering.\n * Displays selected node labels as comma-separated text in the dropdown trigger.\n * Must be applied to eui-dropdown component containing an eui-tree child.\n *\n * @usageNotes\n * ### Basic Usage\n * ```html\n * <eui-dropdown euiDropdownTree>\n *   <button euiButton>Select Items</button>\n *   <eui-dropdown-content>\n *     <eui-tree\n *       [nodes]=\"treeData\"\n *       [isMultiselect]=\"true\"\n *       (selectionChange)=\"onSelectionChange($event)\">\n *     </eui-tree>\n *   </eui-dropdown-content>\n * </eui-dropdown>\n * ```\n *\n * ### With Custom Button Template\n * ```html\n * <eui-dropdown euiDropdownTree [buttonTemplateRef]=\"customButton\">\n *   <eui-dropdown-content>\n *     <eui-tree [nodes]=\"data\" [isMultiselect]=\"true\" />\n *   </eui-dropdown-content>\n * </eui-dropdown>\n *\n * <ng-template #customButton let-label>\n *   <button euiButton euiPrimary>\n *     <eui-icon-svg icon=\"eui-tree\" />\n *     {{ label || 'Select from tree' }}\n *   </button>\n * </ng-template>\n * ```\n *\n * ### Accessibility\n * - Dropdown trigger button maintains keyboard accessibility\n * - Selection state announced through button label updates\n * - Tree navigation remains accessible within dropdown\n *\n * ### Notes\n * - Button label automatically updates on selection changes\n * - Default label shows comma-separated selected node labels\n * - Custom template receives current label as $implicit context\n * - Works with both single and multi-select tree modes\n */\n@Directive({\n    selector: 'eui-dropdown[euiDropdownTree]',\n})\nexport class EuiDropdownTreeDirective implements AfterContentInit, AfterViewInit {\n    /**\n     * Template reference for custom dropdown trigger button rendering.\n     * Receives current selection label as template context ($implicit).\n     * Allows complete customization of dropdown trigger appearance.\n     */\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    @Input() buttonTemplateRef: TemplateRef<any>;\n    @ContentChild(EuiTreeComponent, { static: false }) euiTree: EuiTreeComponent;\n\n    private buttonLabel: string;\n    private buttonViewRef;\n    private changeDetectorRef = inject(ChangeDetectorRef);\n    private hostElement = inject(ElementRef);\n    private renderer = inject(Renderer2);\n    private euiDropdown = inject(EuiDropdownComponent, { host: true });\n\n    ngAfterContentInit(): void {\n        this.buttonLabel = this.createButtonLabel(this.euiTree.getSelection());\n        this.euiTree.selectionChange.subscribe((selectionChanges) => {\n            this.buttonLabel = this.createButtonLabel(selectionChanges.selection);\n            this.buttonViewRef.context.$implicit = this.buttonLabel;\n            this.buttonViewRef.detectChanges();\n        });\n    }\n\n    ngAfterViewInit(): void {\n        if (this.buttonTemplateRef) {\n            const triggerContainer = this.hostElement.nativeElement.querySelector('.eui-dropdown__trigger-container');\n            if (!triggerContainer) {\n                console.error('Could not find the triggerContainer');\n                return;\n            }\n            while (triggerContainer.firstChild) {\n                triggerContainer.removeChild(triggerContainer.firstChild);\n            }\n            this.buttonViewRef = this.buttonTemplateRef.createEmbeddedView({ $implicit: this.buttonLabel });\n            this.buttonViewRef.detectChanges();\n\n            this.buttonViewRef.rootNodes.forEach((node) => {\n                if (node.nodeType === Node.ELEMENT_NODE) {\n                    this.renderer.appendChild(triggerContainer, node);\n                }\n            });\n        }\n    }\n\n    private createButtonLabel(selection: TreeDataModel): string {\n        if (selection?.length > 0) {\n            return this.euiTree\n                .getSelection()\n                ?.map((item) => item.node.treeContentBlock.label)\n                .join(',') as string;\n        }\n        return 'No node selected.';\n    }\n}\n","import { TreeDataModel, TreeItemModel } from './eui-tree.model';\n\n/**\n * @description\n * Utility class for navigating and querying hierarchical tree data structures.\n * Provides methods to locate nodes by value, retrieve paths, and extract items from tree data.\n * Supports custom identifier keys for flexible node matching across different tree schemas.\n * Commonly used with eui-tree component for programmatic tree manipulation and node lookup.\n *\n * @usageNotes\n * ### Basic Usage\n * ```typescript\n * const treeData: TreeDataModel = [\n *   {\n *     node: { treeContentBlock: { id: '1', label: 'Root' } },\n *     children: [\n *       { node: { treeContentBlock: { id: '1.1', label: 'Child' } } }\n *     ]\n *   }\n * ];\n *\n * const helper = new EuiTreeHelper(treeData);\n *\n * // Get path to a node by ID\n * const path = helper.getPath('1.1', 'node.treeContentBlock.id');\n * // Returns: '0.0'\n *\n * // Get multiple paths\n * const paths = helper.getPaths(['1', '1.1'], 'node.treeContentBlock.id');\n * // Returns: ['0', '0.0']\n *\n * // Get actual tree items\n * const items = helper.getItems(['1.1'], 'node.treeContentBlock.id');\n * // Returns: [TreeItemModel]\n * ```\n *\n * ### With Custom Identifier\n * ```typescript\n * // Tree with custom structure\n * const customTree = [\n *   { node: { customId: 'abc', label: 'Item' } }\n * ];\n *\n * const helper = new EuiTreeHelper(customTree);\n * const path = helper.getPath('abc', 'node.customId');\n * ```\n *\n * ### Accessibility\n * - Helper methods are synchronous and non-blocking\n * - No direct accessibility concerns (utility class)\n *\n * ### Notes\n * - Path format uses dot notation: '0.2.1' (indices at each level)\n * - Supports deeply nested tree structures\n * - Deep equality comparison for complex value matching\n * - Identifier key uses dot notation for nested properties\n * - Returns null/empty array if no matches found\n */\nexport class EuiTreeHelper {\n    private readonly treeData: TreeDataModel;\n\n    constructor(treeData: TreeDataModel) {\n        this.treeData = treeData;\n    }\n\n    /**\n     * Retrieves the path string for a single node matching the provided value.\n     * Path format uses dot notation with indices (e.g., '0.2.1' for first child, third grandchild, second great-grandchild).\n     * \n     * @param value - Value to search for in the tree\n     * @param identifierKey - Dot-notation property path to use for matching (e.g., 'node.treeContentBlock.id'). Default: 'node.treeContentBlock.id'\n     * @returns Path string to the matched node, or null if not found\n     */\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public getPath(value: any, identifierKey = 'node.treeContentBlock.id'): string {\n        if(typeof value !=='undefined'){\n        const paths: Array<string> = [];\n        this.traverse(this.treeData, '', [value], paths, undefined, identifierKey);\n        return paths[0];\n        }\n        return null;\n    }\n\n    /**\n     * Retrieves path strings for multiple nodes matching the provided values.\n     * Returns paths in the order nodes are found during tree traversal.\n     * \n     * @param values - Array of values to search for in the tree\n     * @param identifierKey - Dot-notation property path to use for matching\n     * @returns Array of path strings to matched nodes\n     */\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public getPaths(values: Array<any>, identifierKey?: string): Array<string> {\n        const paths: Array<string> = [];\n        this.traverse(this.treeData, '', values, paths, undefined, identifierKey);\n        return paths;\n    }\n\n    /**\n     * Retrieves the actual TreeItemModel objects for nodes matching the provided values.\n     * Returns full node data including children and metadata.\n     * \n     * @param values - Array of values to search for in the tree\n     * @param identifierKey - Dot-notation property path to use for matching\n     * @returns Array of TreeItemModel objects for matched nodes\n     */\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public getItems(values: Array<any>, identifierKey?: string): Array<TreeItemModel> {\n        const matchedItems: Array<TreeItemModel> = [];\n        this.traverse(this.treeData, '', values, undefined, matchedItems, identifierKey);\n        return matchedItems;\n    }\n\n    private traverse(\n        tree: TreeDataModel,\n        currentPath: string,\n        // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        values: Array<any>,\n        paths?: Array<string>,\n        items?: Array<TreeItemModel>,\n        identifierKey?: string,\n    ): void {\n        for (const [i, item] of tree.entries()) {\n            const valueToCheck = identifierKey ? this.getValueAtKey(item, identifierKey) : item;\n\n            if (values.some((v) => this.deepEqual(v, valueToCheck))) {\n                if (paths) paths.push(`${currentPath}${i}`);\n                if (items) items.push(item);\n            }\n\n            if (item.children && item.children.length) {\n                this.traverse(item.children, `${currentPath}${i}.`, values, paths, items, identifierKey);\n            }\n        }\n    }\n\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    private getValueAtKey(object: any, key: string): any {\n        const keys = key.split('.');\n        let current = object;\n        for (const k of keys) {\n            if (current[k] !== undefined) {\n                current = current[k];\n            } else {\n                return undefined;\n            }\n        }\n        return current;\n    }\n\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    private deepEqual(obj1: any, obj2: any): boolean {\n        if (obj1 === obj2) {\n            return true;\n        }\n        if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {\n            return false;\n        }\n        const keys1 = Object.keys(obj1);\n        const keys2 = Object.keys(obj2);\n\n        if (keys1.length !== keys2.length) {\n            return false;\n        }\n        for (const key of keys1) {\n            if (!keys2.includes(key) || !this.deepEqual(obj1[key], obj2[key])) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n","import { Directive, forwardRef, AfterContentInit, Input, NgModule, inject } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { EuiTreeComponent } from './eui-tree.component';\nimport { EuiTreeSelectionChanges, TreeDataModel, TreeItemModel } from './eui-tree.model';\nimport { EuiTreeHelper } from './eui-tree-helper';\n\n/**\n * @description\n * Form control directive that integrates eui-tree with Angular reactive and template-driven forms.\n * Implements ControlValueAccessor to enable two-way binding and form validation for tree selections.\n * Provides customizable value transformation functions for mapping between form model and tree selection.\n * Automatically synchronizes tree selection state with form control value.\n * Must be applied to eui-tree component to enable form integration.\n *\n * @usageNotes\n * ### Basic Usage with Reactive Forms\n * ```html\n * <form [formGroup]=\"myForm\">\n *   <eui-tree\n *     euiTreeFormControl\n *     formControlName=\"selectedNodes\"\n *     [nodes]=\"treeData\"\n *     [isMultiselect]=\"true\">\n *   </eui-tree>\n * </form>\n * ```\n *\n * ```typescript\n * myForm = this.fb.group({\n *   selectedNodes: [[]]\n * });\n *\n * ngOnInit() {\n *   // Set initial selection\n *   this.myForm.patchValue({\n *     selectedNodes: [{ id: '1', label: 'Node 1' }]\n *   });\n * }\n * ```\n *\n * ### With Custom Value Mapping\n * ```html\n * <eui-tree\n *   euiTreeFormControl\n *   formControlName=\"nodeIds\"\n *   [nodes]=\"treeData\"\n *   [euiTreeControlValueSetter]=\"valueSetter\"\n *   [euiTreeControlModelMapper]=\"modelMapper\"\n *   [isMultiselect]=\"true\">\n * </eui-tree>\n * ```\n *\n * ```typescript\n * // Extract only IDs for form value\n * valueSetter = (selection: TreeDataModel) => {\n *   return selection.map(item => item.node.treeContentBlock.id);\n * };\n *\n * // Map IDs back to tree items\n * modelMapper = (ids: string[], tree: TreeDataModel) => {\n *   return new EuiTreeHelper(tree).getItems(ids, 'node.treeContentBlock.id');\n * };\n * ```\n *\n * ### Accessibility\n * - Form validation states properly announced\n * - Error messages associated with tree control\n * - Required field indication supported\n *\n * ### Notes\n * - Works with both reactive and template-driven forms\n * - Default value setter extracts full tree items\n * - Custom mappers allow flexible data transformation\n * - Supports form validation and dirty state tracking\n * - Selection changes automatically update form value\n */\n@Directive({\n    selector: 'eui-tree[euiTreeFormControl]',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => EuiTreeFormControlDirective),\n            multi: true,\n        },\n    ],\n})\nexport class EuiTreeFormControlDirective implements ControlValueAccessor, AfterContentInit {\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    private onChange: (value: any) => void;\n    private onTouched: () => void;\n    private tree = inject(EuiTreeComponent, { host: true });\n\n    /**\n     * Custom function to transform tree selection into form control value.\n     * Receives current selection and returns the value to be written to the form control.\n     * Default implementation extracts node IDs from selected items.\n     * \n     * @param selection - Current tree selection as TreeDataModel\n     * @returns Transformed value to be set on the form control\n     */\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    @Input() euiTreeControlValueSetter: (selection: TreeDataModel) => any = (selection: TreeDataModel) => {\n        return new EuiTreeHelper(this.tree.nodes).getItems(selection.map(item=>item.node.treeContentBlock.id), 'node.treeContentBlock.id');\n    };\n    /**\n     * Custom function to transform form control value into tree selection items.\n     * Receives form control value and tree data, returns array of TreeItemModel to be selected.\n     * Default implementation passes through the value unchanged.\n     * \n     * @param model - Current form control value\n     * @param tree - Complete tree data structure for reference\n     * @returns Array of TreeItemModel objects to be selected in the tree\n     */\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    @Input() euiTreeControlModelMapper: (model: any, tree?: TreeDataModel) => Array<TreeItemModel> = (model: Array<TreeItemModel>) => {\n        return model;\n    };\n\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    writeValue(value: any): void {\n        this.tree.setAllSelection(false);\n        if (typeof value !== 'undefined' && value !== null && value?.length > 0) {\n            const initialItems = this.euiTreeControlModelMapper(value, this.tree.nodes);\n            const paths = new EuiTreeHelper(this.tree.nodes).getPaths(initialItems);\n            paths.forEach((path: string) => {\n                this.tree.nodeSelected({ target: { checked: true } }, path);\n            });\n        }\n    }\n\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    registerOnChange(fn: any): void {\n        this.onChange = fn;\n    }\n\n    // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    registerOnTouched(fn: any): void {\n        this.onTouched = fn;\n    }\n\n    ngAfterContentInit(): void {\n        this.tree.selectionChange.subscribe((selectionChanges: EuiTreeSelectionChanges) => {\n            this.onChange(this.euiTreeControlValueSetter(selectionChanges.selection));\n        });\n    }\n}\n\n","import { EuiTreeComponent } from './eui-tree.component';\n\nexport * from './eui-tree.component';\nexport * from './eui-tree.model';\nexport * from './eui-dropdown-tree.directive';\nexport * from './eui-tree-form-control.directive';\nexport * from './eui-tree-helper';\n\nexport const EUI_TREE = [\n    EuiTreeComponent,\n] as const;\n\n// export { EuiTreeComponent as EuiTree } from './eui-tree.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}