{"version":3,"file":"koobiq-components-tree.mjs","sources":["../../../packages/components/tree/control/base-tree-control.ts","../../../packages/components/tree/control/flat-tree-control.filters.ts","../../../packages/components/tree/control/flat-tree-control.ts","../../../packages/components/tree/control/nested-tree-control.ts","../../../packages/components/tree/data-source/flat-data-source.ts","../../../packages/components/tree/data-source/nested-data-source.ts","../../../packages/components/tree/node.ts","../../../packages/components/tree/outlet.ts","../../../packages/components/tree/tree-errors.ts","../../../packages/components/tree/tree-base.ts","../../../packages/components/tree/toggle.ts","../../../packages/components/tree/tree-option.component.ts","../../../packages/components/tree/tree-option.html","../../../packages/components/tree/padding.directive.ts","../../../packages/components/tree/tree.ts","../../../packages/components/tree/tree-selection.component.ts","../../../packages/components/tree/tree.module.ts","../../../packages/components/tree/koobiq-components-tree.ts"],"sourcesContent":["import { SelectionModel } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { TreeControl } from './tree-control';\n\n/** Base tree control. It has basic toggle/expand/collapse operations on a single data node. */\nexport abstract class BaseTreeControl<T> implements TreeControl<T> {\n    dataNodes: T[];\n\n    /** A selection model with multi-selection to track expansion status. */\n    expansionModel: SelectionModel<T> = new SelectionModel<T>(true);\n\n    filterModel: SelectionModel<T> = new SelectionModel<T>(true);\n\n    filterValue = new BehaviorSubject<T[] | string | null>('');\n\n    /** Get depth of a given data node, return the level number. This is for flat tree node. */\n    getLevel: (dataNode: T) => number;\n\n    /**\n     * Whether the data node is expandable. Returns true if expandable.\n     * This is for flat tree node.\n     */\n    isExpandable: (dataNode: T) => boolean;\n\n    /** Gets a stream that emits whenever the given data node's children change. */\n    getChildren: (dataNode: T) => Observable<T[]>;\n\n    /** Gets a list of descendent data nodes of a subtree rooted at given data node recursively. */\n    abstract getDescendants(dataNode: T): T[];\n\n    /** Expands all data nodes in the tree. */\n    abstract expandAll(): void;\n\n    /** Toggles one single data node's expanded/collapsed state. */\n    toggle(dataNode: T): void {\n        if (this.filterValue.value?.length) {\n            return;\n        }\n\n        this.expansionModel.toggle(dataNode);\n    }\n\n    /** Expands one single data node. */\n    expand(dataNode: T): void {\n        if (this.filterValue.value?.length) {\n            return;\n        }\n\n        this.expansionModel.select(dataNode);\n    }\n\n    /** Collapses one single data node. */\n    collapse(dataNode: T): void {\n        if (this.filterValue.value?.length) {\n            return;\n        }\n\n        this.expansionModel.deselect(dataNode);\n    }\n\n    /** Whether a given data node is expanded or not. Returns true if the data node is expanded. */\n    isExpanded(dataNode: T): boolean {\n        return this.expansionModel.isSelected(dataNode);\n    }\n\n    /** Toggles a subtree rooted at `node` recursively. */\n    toggleDescendants(dataNode: T): void {\n        this.expansionModel.isSelected(dataNode)\n            ? this.collapseDescendants(dataNode)\n            : this.expandDescendants(dataNode);\n    }\n\n    /** Collapse all dataNodes in the tree. */\n    collapseAll(): void {\n        this.expansionModel.clear();\n    }\n\n    /** Expands a subtree rooted at given data node recursively. */\n    expandDescendants(dataNode: T): void {\n        const toBeProcessed = [dataNode];\n\n        toBeProcessed.push(...this.getDescendants(dataNode));\n        this.expansionModel.select(...toBeProcessed);\n    }\n\n    /** Collapses a subtree rooted at given data node recursively. */\n    collapseDescendants(dataNode: T): void {\n        const toBeProcessed = [dataNode];\n\n        toBeProcessed.push(...this.getDescendants(dataNode));\n        this.expansionModel.deselect(...toBeProcessed);\n    }\n}\n","import { FlatTreeControl } from './flat-tree-control';\n\nexport const kbqTreeSelectAllValue = 'selectAll';\n\nexport interface FlatTreeControlFilter<T> {\n    result: T[];\n\n    handle(value: string | null, prevFilter?: FlatTreeControlFilter<T> | null): T[];\n}\n\nexport class FilterByViewValue<T> implements FlatTreeControlFilter<T> {\n    result: T[];\n\n    constructor(private control: FlatTreeControl<T>) {}\n\n    handle(value: string | null): T[] {\n        const viewValue = value || null;\n\n        this.result = this.control.dataNodes.filter((node) => {\n            if (node['value'] === kbqTreeSelectAllValue) return true;\n\n            return this.control.compareViewValues(this.control.getViewValue(node), viewValue);\n        });\n\n        if (this.result.length === 1 && this.result[0]['value'] === kbqTreeSelectAllValue) {\n            this.result.pop();\n        }\n\n        return this.result;\n    }\n}\n\nexport class FilterParentsForNodes<T> implements FlatTreeControlFilter<T> {\n    result: T[];\n\n    constructor(private control: FlatTreeControl<T>) {}\n\n    handle(_, prevFilter: FlatTreeControlFilter<T>): T[] {\n        const result: Set<T> = new Set();\n\n        this.control.dataNodes\n            .filter((node) => prevFilter?.result.includes(node))\n            .forEach((node) => {\n                this.control.getParents(node, []).forEach((parent) => result.add(parent));\n\n                result.add(node);\n            });\n\n        this.result = Array.from(result);\n\n        return this.result;\n    }\n}\n\nexport class FilterByValues<T> implements FlatTreeControlFilter<T> {\n    result: T[];\n\n    private values: string[] = [];\n\n    constructor(private control: FlatTreeControl<T>) {}\n\n    handle(_, prevFilter?: FlatTreeControlFilter<T>): T[] {\n        const found = this.control.dataNodes.filter((node) => this.values.includes(this.control.getValue(node)));\n\n        this.result = Array.from(new Set([...(prevFilter?.result || []), ...found]));\n\n        return this.result;\n    }\n\n    setValues = (values: string[]) => {\n        this.values = values;\n    };\n\n    getValues(): string[] {\n        return this.values;\n    }\n}\n","import { escapeRegExp } from '@koobiq/components/core';\nimport { BaseTreeControl } from './base-tree-control';\nimport { FilterByViewValue, FilterParentsForNodes, FlatTreeControlFilter } from './flat-tree-control.filters';\n\nexport function defaultCompareValues(firstValue: string, secondValue: string): boolean {\n    return firstValue === secondValue;\n}\n\nexport function defaultCompareViewValues(firstViewValue: string, secondViewValue: string): boolean {\n    return RegExp(escapeRegExp(secondViewValue), 'gi').test(firstViewValue);\n}\n\n/** Flat tree control. Able to expand/collapse a subtree recursively for flattened tree. */\nexport class FlatTreeControl<T> extends BaseTreeControl<T> {\n    expandedItemsBeforeFiltration: T[];\n\n    private filters: FlatTreeControlFilter<T>[];\n\n    /** Construct with flat tree data node functions getLevel, isExpandable, getValue and getViewValue. */\n    constructor(\n        public getLevel: (dataNode: T) => number,\n        public isExpandable: (dataNode: T) => boolean,\n        /** getValue will be used to determine if the tree contains value or not. Used in method hasValue */\n        public getValue: (dataNode: T) => any,\n        /** getViewValue will be used for filter nodes. Returned value will be first argument in filterNodesFunction */\n        public getViewValue: (dataNode: T) => string,\n        /** compareValues will be used to comparing values. */\n        public compareValues: (firstValue, secondValue) => boolean = defaultCompareValues,\n        /** compareValues will be used to comparing values. */\n        public compareViewValues: (firstViewValue, secondViewValue) => boolean = defaultCompareViewValues,\n        /** isDisabled will be used to determine if the node is disabled. */\n        public isDisabled: (dataNode: T) => boolean = () => false\n    ) {\n        super();\n\n        this.setFilters(new FilterByViewValue<T>(this), new FilterParentsForNodes<T>(this));\n    }\n\n    getFilters(): FlatTreeControlFilter<T>[] {\n        return this.filters;\n    }\n\n    setFilters(...filters: FlatTreeControlFilter<T>[]) {\n        this.filters = filters;\n    }\n\n    /**\n     * Gets a list of the data node's subtree of descendent data nodes.\n     *\n     * To make this working, the `dataNodes` of the TreeControl must be flattened tree nodes\n     * with correct levels.\n     */\n    getDescendants(dataNode: T): T[] {\n        const startIndex = this.dataNodes.indexOf(dataNode);\n        const results: T[] = [];\n\n        // Goes through flattened tree nodes in the `dataNodes` array, and get all descendants.\n        // The level of descendants of a tree node must be greater than the level of the given\n        // tree node.\n        // If we reach a node whose level is equal to the level of the tree node, we hit a sibling.\n        // If we reach a node whose level is greater than the level of the tree node, we hit a\n        // sibling of an ancestor.\n        for (\n            let i = startIndex + 1;\n            i < this.dataNodes.length && this.getLevel(dataNode) < this.getLevel(this.dataNodes[i]);\n            i++\n        ) {\n            results.push(this.dataNodes[i]);\n        }\n\n        return results;\n    }\n\n    /**\n     * Expands all data nodes in the tree.\n     *\n     * To make this working, the `dataNodes` variable of the TreeControl must be set to all flattened\n     * data nodes of the tree.\n     */\n    expandAll(): void {\n        this.expansionModel.select(...this.dataNodes);\n    }\n\n    getParents(node: any, result: T[]): T[] {\n        if (node.parent) {\n            result.unshift(node.parent);\n\n            return this.getParents(node.parent, result);\n        } else {\n            return result;\n        }\n    }\n\n    hasValue(value: string): T | undefined {\n        return this.dataNodes.find((node: any) => this.compareValues(this.getValue(node), value));\n    }\n\n    filterNodes(value: string | null = null): void {\n        this.saveExpansionState();\n\n        let result: T[] = [];\n\n        this.filters.forEach((filter, index, filters) => {\n            const prevFilter = filters[index - 1] || null;\n\n            result = filter.handle(value, prevFilter);\n        });\n\n        this.filterModel.clear();\n        this.filterModel.select(...result);\n\n        // set current expansion state according to filtered tree\n        this.expansionModel.setSelection(...result.filter((node) => this.isExpandable(node)));\n\n        this.updateFilterValue(value || result);\n\n        Promise.resolve().then(() => this.restoreExpansionState());\n    }\n\n    private updateFilterValue(value: T[] | string | null) {\n        Promise.resolve().then(() => this.filterValue.next(value));\n    }\n\n    private saveExpansionState() {\n        if (!this.filterValue.value?.length) {\n            this.expandedItemsBeforeFiltration = this.expansionModel.selected;\n        }\n    }\n\n    private restoreExpansionState() {\n        if (!this.filterValue.value?.length) {\n            this.expansionModel.setSelection(...this.expandedItemsBeforeFiltration);\n        }\n    }\n}\n","import { Observable } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BaseTreeControl } from './base-tree-control';\n\n/** Nested tree control. Able to expand/collapse a subtree recursively for NestedNode type. */\nexport class NestedTreeControl<T> extends BaseTreeControl<T> {\n    /** Construct with nested tree function getChildren. */\n    constructor(public getChildren: (dataNode: T) => Observable<T[]>) {\n        super();\n    }\n\n    /**\n     * Expands all dataNodes in the tree.\n     *\n     * To make this working, the `dataNodes` variable of the TreeControl must be set to all root level\n     * data nodes of the tree.\n     */\n    expandAll(): void {\n        this.expansionModel.clear();\n        const allNodes = this.dataNodes.reduce(\n            (accumulator: T[], dataNode) => [...accumulator, ...this.getDescendants(dataNode), dataNode],\n            []\n        );\n\n        this.expansionModel.select(...allNodes);\n    }\n\n    /** Gets a list of descendant dataNodes of a subtree rooted at given data node recursively. */\n    getDescendants(dataNode: T): T[] {\n        const descendants = [];\n\n        this._getDescendants(descendants, dataNode);\n\n        return descendants.splice(1);\n    }\n\n    /** A helper function to get descendants recursively. */\n    // todo нужно придумать другое название и понять в чем отличие между getDescendants и _getDescendants\n    private _getDescendants(descendants: T[], dataNode: T): void {\n        descendants.push(dataNode);\n\n        this.getChildren(dataNode)\n            .pipe(take(1))\n            .subscribe((children) => {\n                if (children && children.length > 0) {\n                    children.forEach((child: T) => this._getDescendants(descendants, child));\n                }\n            });\n    }\n}\n","import { CollectionViewer, DataSource, SelectionChange } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, merge } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { FlatTreeControl } from '../control/flat-tree-control';\nimport { TreeControl } from '../control/tree-control';\n\n/**\n * Tree flattener to convert a normal type of node to node with children & level information.\n * Transform nested nodes of type `T` to flattened nodes of type `F`.\n *\n * For example, the input data of type `T` is nested, and contains its children data:\n *   SomeNode: {\n *     key: 'Fruits',\n *     children: [\n *       NodeOne: {\n *         key: 'Apple',\n *       },\n *       NodeTwo: {\n *        key: 'Pear',\n *      }\n *    ]\n *  }\n *  After flattener flatten the tree, the structure will become\n *  SomeNode: {\n *    key: 'Fruits',\n *    expandable: true,\n *    level: 1\n *  },\n *  NodeOne: {\n *    key: 'Apple',\n *    expandable: false,\n *    level: 2\n *  },\n *  NodeTwo: {\n *   key: 'Pear',\n *   expandable: false,\n *   level: 2\n * }\n * and the output flattened type is `F` with additional information.\n */\nexport class KbqTreeFlattener<T, F> {\n    constructor(\n        public transformFunction: (node: T, level: number, parent: F | null) => F,\n        public getLevel: (node: F) => number,\n        public isExpandable: (node: F) => boolean,\n        public getChildren: (node: T) => Observable<T[]> | T[] | undefined | null\n    ) {}\n\n    flattenNode(node: T, level: number, resultNodes: F[], parent: F | null): F[] {\n        const flatNode = this.transformFunction(node, level, parent);\n\n        resultNodes.push(flatNode);\n\n        if (this.isExpandable(flatNode)) {\n            const childrenNodes = this.getChildren(node);\n\n            if (childrenNodes) {\n                if (Array.isArray(childrenNodes)) {\n                    this.flattenChildren(childrenNodes, level, resultNodes, flatNode);\n                } else {\n                    childrenNodes.pipe(take(1)).subscribe((children) => {\n                        this.flattenChildren(children, level, resultNodes, flatNode);\n                    });\n                }\n            }\n        }\n\n        return resultNodes;\n    }\n\n    flattenChildren(children: T[], level: number, resultNodes: F[], parent: F | null): void {\n        children.forEach((child) => {\n            this.flattenNode(child, level + 1, resultNodes, parent);\n        });\n    }\n\n    /**\n     * Flatten a list of node type T to flattened version of node F.\n     * Please note that type T may be nested, and the length of `structuredData` may be different\n     * from that of returned list `F[]`.\n     */\n    flattenNodes(structuredData: T[]): F[] {\n        const resultNodes: F[] = [];\n\n        structuredData.forEach((node) => this.flattenNode(node, 0, resultNodes, null));\n\n        return resultNodes;\n    }\n\n    /**\n     * Expand flattened node with current expansion status.\n     * The returned list may have different length.\n     */\n    expandFlattenedNodes(nodes: F[], treeControl: TreeControl<F>): F[] {\n        const results: F[] = [];\n        const currentExpand: boolean[] = [];\n\n        currentExpand[0] = true;\n\n        nodes.forEach((node) => {\n            let expand = true;\n\n            for (let i = 0; i <= this.getLevel(node); i++) {\n                expand = expand && currentExpand[i];\n            }\n\n            if (expand) {\n                results.push(node);\n            }\n\n            if (this.isExpandable(node)) {\n                currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);\n            }\n        });\n\n        return results;\n    }\n}\n\nenum KbqTreeDataSourceChangeTypes {\n    Expansion = 'expansion',\n    Filter = 'filter'\n}\n\n/**\n * Data source for flat tree.\n * The data source need to handle expansion/collapsion of the tree node and change the data feed\n * to `KbqTree`.\n * The nested tree nodes of type `T` are flattened through `MсTreeFlattener`, and converted\n * to type `F` for `KbqTree` to consume.\n */\nexport class KbqTreeFlatDataSource<T, F> extends DataSource<F> {\n    flattenedData = new BehaviorSubject<F[]>([]);\n\n    expandedData = new BehaviorSubject<F[]>([]);\n\n    filteredData = new BehaviorSubject<F[]>([]);\n\n    get data() {\n        return this._data.value;\n    }\n\n    set data(value: T[]) {\n        this._data.next(value);\n\n        this.flattenedData.next(this.treeFlattener.flattenNodes(this.data));\n        this.treeControl.dataNodes = this.flattenedData.value;\n    }\n\n    private _data: BehaviorSubject<T[]>;\n\n    constructor(\n        private treeControl: FlatTreeControl<F>,\n        private treeFlattener: KbqTreeFlattener<T, F>,\n        initialData: T[] = []\n    ) {\n        super();\n\n        this._data = new BehaviorSubject<T[]>(initialData);\n    }\n\n    connect(collectionViewer: CollectionViewer): Observable<F[]> {\n        return merge(\n            collectionViewer.viewChange,\n            this.treeControl.expansionModel.changed.pipe(\n                map((value) => ({ type: KbqTreeDataSourceChangeTypes.Expansion, value }))\n            ),\n            this.treeControl.filterValue.pipe(map((value) => ({ type: KbqTreeDataSourceChangeTypes.Filter, value }))),\n            this.flattenedData\n        ).pipe(\n            map((changeObj: any): any => {\n                if (changeObj.type === KbqTreeDataSourceChangeTypes.Filter) {\n                    if (changeObj.value && changeObj.value.length > 0) {\n                        return this.filterHandler();\n                    } else {\n                        return this.expansionHandler(changeObj.value);\n                    }\n                }\n\n                return this.expansionHandler(changeObj.value);\n            })\n        );\n    }\n\n    filterHandler(): F[] {\n        this.filteredData.next(this.treeControl.filterModel.selected);\n\n        return this.filteredData.value;\n    }\n\n    expansionHandler(_change: SelectionChange<F>): F[] {\n        const expandedNodes = this.treeFlattener.expandFlattenedNodes(this.flattenedData.value, this.treeControl);\n\n        this.expandedData.next(expandedNodes);\n\n        return this.expandedData.value;\n    }\n\n    disconnect() {\n        // no op\n    }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, merge } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Data source for nested tree.\n *\n * The data source for nested tree doesn't have to consider node flattener, or the way to expand\n * or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.\n */\nexport class KbqTreeNestedDataSource<T> extends DataSource<T> {\n    get data() {\n        return this._data.value;\n    }\n\n    set data(value: T[]) {\n        this._data.next(value);\n    }\n\n    private _data = new BehaviorSubject<T[]>([]);\n\n    connect(collectionViewer: CollectionViewer): Observable<T[]> {\n        return merge(...[collectionViewer.viewChange, this._data as any]).pipe(map(() => this.data));\n    }\n\n    disconnect() {\n        // no op\n    }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n/** Context provided to the tree node component. */\nexport class KbqTreeNodeOutletContext<T> {\n    /** Data for the node. */\n    $implicit: T;\n\n    /** Depth of the node. */\n    level: number;\n\n    /** Index location of the node. */\n    index?: number;\n\n    /** Length of the number of total dataNodes. */\n    count?: number;\n\n    constructor(data: T) {\n        this.$implicit = data;\n    }\n}\n\n/**\n * Data node definition for the KbqTree.\n * Captures the node's template and a when predicate that describes when this node should be used.\n */\n@Directive({\n    selector: '[kbqTreeNodeDef]',\n    inputs: ['when: kbqTreeNodeDefWhen']\n})\nexport class KbqTreeNodeDef<T> {\n    @Input('kbqTreeNode') data: T;\n\n    /**\n     * Function that should return true if this node template should be used for the provided node\n     * data and index. If left undefined, this node will be considered the default node template to\n     * use when no other when functions return true for the data.\n     * For every node, there must be at least one when function that passes or an undefined to\n     * default.\n     */\n    when: (index: number, nodeData: T) => boolean;\n\n    /** @docs-private */\n    constructor(public template: TemplateRef<any>) {}\n}\n","import { ChangeDetectorRef, Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n    selector: '[kbqTreeNodeOutlet]'\n})\nexport class KbqTreeNodeOutlet {\n    constructor(\n        public viewContainer: ViewContainerRef,\n        public changeDetectorRef: ChangeDetectorRef\n    ) {}\n}\n","/**\n * Returns an error to be thrown when there is no usable data.\n * @docs-private\n */\nexport function getTreeNoValidDataSourceError() {\n    return Error(`A valid data source must be provided.`);\n}\n\n/**\n * Returns an error to be thrown when there are multiple nodes that are missing a when function.\n * @docs-private\n */\nexport function getTreeMultipleDefaultNodeDefsError() {\n    return Error(`There can only be one default row without a when predicate function.`);\n}\n\n/**\n * Returns an error to be thrown when there are no matching node defs for a particular set of data.\n * @docs-private\n */\nexport function getTreeMissingMatchingNodeDefError() {\n    return Error(`Could not find a matching node definition for the provided node data.`);\n}\n\n/**\n * Returns an error to be thrown when there are tree control.\n * @docs-private\n */\nexport function getTreeControlMissingError() {\n    return Error(`Could not find a tree control for the tree.`);\n}\n\n/**\n * Returns an error to be thrown when tree control did not implement functions for flat/nested node.\n * @docs-private\n */\nexport function getTreeControlFunctionsMissingError() {\n    return Error(`Could not find functions for nested/flat tree in tree control.`);\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport {\n    AfterContentChecked,\n    ChangeDetectorRef,\n    ContentChildren,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    Inject,\n    Input,\n    IterableChangeRecord,\n    IterableDiffer,\n    IterableDiffers,\n    OnDestroy,\n    OnInit,\n    QueryList,\n    TrackByFunction,\n    ViewChild,\n    ViewContainerRef,\n    forwardRef,\n    inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IFocusableOption } from '@koobiq/cdk/a11y';\nimport { BehaviorSubject, Observable, Subject, Subscription, of as observableOf } from 'rxjs';\nimport { TreeControl } from './control/tree-control';\nimport { KbqTreeNodeDef, KbqTreeNodeOutletContext } from './node';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport {\n    getTreeControlMissingError,\n    getTreeMissingMatchingNodeDefError,\n    getTreeMultipleDefaultNodeDefsError,\n    getTreeNoValidDataSourceError\n} from './tree-errors';\n\n@Directive()\nexport class KbqTreeBase<T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {\n    @Input() treeControl: TreeControl<T>;\n\n    /**\n     * Tracking function that will be used to check the differences in data changes. Used similarly\n     * to `ngFor` `trackBy` function. Optimize node operations by identifying a node based on its data\n     * relative to the function to know if a node should be added/removed/moved.\n     * Accepts a function that takes two parameters, `index` and `item`.\n     */\n    @Input() trackBy: TrackByFunction<T>;\n\n    // Outlets within the tree's template where the dataNodes will be inserted.\n    @ViewChild(KbqTreeNodeOutlet, { static: true }) nodeOutlet: KbqTreeNodeOutlet;\n\n    /** The tree node template for the tree */\n    @ContentChildren(KbqTreeNodeDef) nodeDefs: QueryList<KbqTreeNodeDef<T>>;\n\n    // TODO(tinayuangao): Setup a listener for scrolling, emit the calculated view to viewChange.\n    //     Remove the MAX_VALUE in viewChange\n    /**\n     * Stream containing the latest information on what rows are being displayed on screen.\n     * Can be used by the data source to as a heuristic of what data should be provided.\n     */\n    viewChange = new BehaviorSubject<{ start: number; end: number }>({ start: 0, end: Number.MAX_VALUE });\n\n    /** Differ used to find the changes in the data provided by the data source. */\n    protected dataDiffer: IterableDiffer<T>;\n\n    /** Stores the node definition that does not have a when predicate. */\n    private defaultNodeDef: KbqTreeNodeDef<T> | null;\n\n    /** Data subscription */\n    private dataSubscription: Subscription | null;\n\n    /** Level of nodes */\n    private levels: Map<T, number> = new Map<T, number>();\n\n    /**\n     * Provides a stream containing the latest data array to render. Influenced by the tree's\n     * stream of view window (what dataNodes are currently on screen).\n     * Data source can be an observable of data array, or a data array to render.\n     */\n    @Input()\n    get dataSource(): DataSource<T> | Observable<T[]> | T[] {\n        return this._dataSource;\n    }\n\n    set dataSource(dataSource: DataSource<T> | Observable<T[]> | T[]) {\n        if (this._dataSource !== dataSource) {\n            this.switchDataSource(dataSource);\n        }\n    }\n\n    private _dataSource: DataSource<T> | Observable<T[]> | T[];\n\n    protected readonly destroyRef = inject(DestroyRef);\n\n    constructor(\n        protected differs: IterableDiffers,\n        protected changeDetectorRef: ChangeDetectorRef\n    ) {}\n\n    ngOnInit() {\n        this.dataDiffer = this.differs.find([]).create(this.trackBy);\n\n        if (!this.treeControl) {\n            throw getTreeControlMissingError();\n        }\n    }\n\n    ngOnDestroy() {\n        this.nodeOutlet.viewContainer.clear();\n\n        if (this._dataSource && typeof (this.dataSource as DataSource<T>).disconnect === 'function') {\n            (this.dataSource as DataSource<T>).disconnect(this);\n        }\n\n        if (this.dataSubscription) {\n            this.dataSubscription.unsubscribe();\n            this.dataSubscription = null;\n        }\n    }\n\n    ngAfterContentChecked() {\n        const defaultNodeDefs = this.nodeDefs.filter((def) => !def.when);\n\n        if (defaultNodeDefs.length > 1) {\n            throw getTreeMultipleDefaultNodeDefsError();\n        }\n\n        this.defaultNodeDef = defaultNodeDefs[0];\n\n        if (this.dataSource && this.nodeDefs && !this.dataSubscription) {\n            this.observeRenderChanges();\n        }\n    }\n\n    /** Check for changes made in the data and render each change (node added/removed/moved). */\n    renderNodeChanges(\n        data: T[] | ReadonlyArray<T>,\n        dataDiffer: IterableDiffer<T> = this.dataDiffer,\n        viewContainer: ViewContainerRef = this.nodeOutlet.viewContainer,\n        parentData?: T\n    ) {\n        const changes = dataDiffer.diff(data);\n\n        if (!changes) {\n            return;\n        }\n\n        changes.forEachOperation(\n            (item: IterableChangeRecord<T>, adjustedPreviousIndex: number | null, currentIndex: number | null) => {\n                if (item.previousIndex == null) {\n                    this.insertNode(data[currentIndex!], currentIndex!, viewContainer, parentData);\n                } else if (currentIndex == null) {\n                    viewContainer.remove(adjustedPreviousIndex!);\n                    this.levels.delete(item.item);\n                } else {\n                    const view = viewContainer.get(adjustedPreviousIndex!);\n\n                    viewContainer.move(view!, currentIndex);\n                }\n            }\n        );\n\n        this.changeDetectorRef.detectChanges();\n    }\n\n    /**\n     * Finds the matching node definition that should be used for this node data. If there is only\n     * one node definition, it is returned. Otherwise, find the node definition that has a when\n     * predicate that returns true with the data. If none return true, return the default node\n     * definition.\n     */\n    getNodeDef(data: T, i: number): KbqTreeNodeDef<T> {\n        if (this.nodeDefs.length === 1) {\n            return this.nodeDefs.first;\n        }\n\n        const nodeDef = this.nodeDefs.find((def) => def.when && def.when(i, data)) || this.defaultNodeDef;\n\n        if (!nodeDef) {\n            throw getTreeMissingMatchingNodeDefError();\n        }\n\n        return nodeDef;\n    }\n\n    /**\n     * Create the embedded view for the data node template and place it in the correct index location\n     * within the data node view container.\n     */\n    insertNode(nodeData: T, index: number, viewContainer?: ViewContainerRef, parentData?: T) {\n        const node = this.getNodeDef(nodeData, index);\n\n        // Node context that will be provided to created embedded view\n        const context = new KbqTreeNodeOutletContext<T>(nodeData);\n\n        // If the tree is flat tree, then use the `getLevel` function in flat tree control\n        // Otherwise, use the level of parent node.\n        if (this.treeControl.getLevel) {\n            context.level = this.treeControl.getLevel(nodeData);\n        } else if (typeof parentData !== 'undefined' && this.levels.has(parentData)) {\n            context.level = this.levels.get(parentData)! + 1;\n        } else {\n            context.level = 0;\n        }\n\n        this.levels.set(nodeData, context.level);\n\n        // Use default tree nodeOutlet, or nested node's nodeOutlet\n        const container = viewContainer ? viewContainer : this.nodeOutlet.viewContainer;\n\n        container.createEmbeddedView(node.template, context, index);\n\n        // Set the data to just created `KbqTreeNode`.\n        // The `KbqTreeNode` created from `createEmbeddedView` will be saved in static variable\n        //     `mostRecentTreeNode`. We get it from static variable and pass the node data to it.\n        if (KbqTreeNode.mostRecentTreeNode) {\n            KbqTreeNode.mostRecentTreeNode.data = nodeData;\n        }\n    }\n\n    /** Set up a subscription for the data provided by the data source. */\n    private observeRenderChanges() {\n        let dataStream: Observable<T[] | ReadonlyArray<T>> | undefined;\n\n        // Cannot use `instanceof DataSource` since the data source could be a literal with\n        // `connect` function and may not extends DataSource.\n        if (typeof (this._dataSource as DataSource<T>).connect === 'function') {\n            dataStream = (this._dataSource as DataSource<T>).connect(this);\n        } else if (this._dataSource instanceof Observable) {\n            dataStream = this._dataSource;\n        } else if (Array.isArray(this._dataSource)) {\n            dataStream = observableOf(this._dataSource);\n        }\n\n        if (dataStream) {\n            this.dataSubscription = dataStream\n                .pipe(takeUntilDestroyed(this.destroyRef))\n                .subscribe((data) => this.renderNodeChanges(data));\n        } else {\n            throw getTreeNoValidDataSourceError();\n        }\n    }\n\n    /**\n     * Switch to the provided data source by resetting the data and unsubscribing from the current\n     * render change subscription if one exists. If the data source is null, interpret this by\n     * clearing the node outlet. Otherwise start listening for new data.\n     */\n    private switchDataSource(dataSource: DataSource<T> | Observable<T[]> | T[]) {\n        if (this._dataSource && typeof (this._dataSource as DataSource<T>).disconnect === 'function') {\n            (this.dataSource as DataSource<T>).disconnect(this);\n        }\n\n        if (this.dataSubscription) {\n            this.dataSubscription.unsubscribe();\n            this.dataSubscription = null;\n        }\n\n        // Remove the all dataNodes if there is now no data source\n        if (!dataSource) {\n            this.nodeOutlet.viewContainer.clear();\n        }\n\n        this._dataSource = dataSource;\n\n        if (this.nodeDefs) {\n            this.observeRenderChanges();\n        }\n    }\n}\n\n@Directive({\n    selector: 'kbq-tree-node',\n    exportAs: 'kbqTreeNode'\n})\nexport class KbqTreeNode<T> implements IFocusableOption, OnDestroy {\n    /**\n     * The most recently created `KbqTreeNode`. We save it in static variable so we can retrieve it\n     * in `KbqTree` and set the data to it.\n     */\n    static mostRecentTreeNode: KbqTreeNode<any> | null = null;\n\n    protected destroyed = new Subject<void>();\n\n    get data(): T {\n        return this._data;\n    }\n\n    set data(value: T) {\n        this._data = value;\n    }\n\n    private _data: T;\n\n    get isExpanded(): boolean {\n        return this.tree.treeControl.isExpanded(this.data);\n    }\n\n    get level(): number {\n        return this.tree.treeControl.getLevel ? this.tree.treeControl.getLevel(this._data) : 0;\n    }\n\n    constructor(\n        protected elementRef: ElementRef<HTMLElement>,\n        @Inject(forwardRef(() => KbqTreeBase)) public tree: KbqTreeBase<T>\n    ) {\n        KbqTreeNode.mostRecentTreeNode = this;\n    }\n\n    ngOnDestroy() {\n        this.destroyed.next();\n        this.destroyed.complete();\n    }\n\n    focus(): void {\n        this.elementRef.nativeElement.focus();\n    }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    Directive,\n    Input,\n    ViewEncapsulation\n} from '@angular/core';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqTreeBase, KbqTreeNode } from './tree-base';\n\n/** @docs-private */\n@Directive()\nexport class KbqTreeNodeToggleBaseDirective<T> {\n    @Input() node: T;\n\n    @Input('kbqTreeNodeToggleRecursive')\n    get recursive(): boolean {\n        return this._recursive;\n    }\n\n    set recursive(value: any) {\n        this._recursive = coerceBooleanProperty(value);\n    }\n\n    private _recursive = false;\n\n    @Input({ transform: booleanAttribute })\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        if (value !== this.disabled) {\n            this._disabled = value;\n        }\n    }\n\n    private _disabled: boolean = false;\n\n    get iconState(): boolean {\n        return this.tree.treeControl.isExpanded(this.node);\n    }\n\n    constructor(\n        private tree: KbqTreeBase<T>,\n        private treeNode: KbqTreeNode<T>\n    ) {\n        this.tree.treeControl.filterValue.subscribe((value) => (this.disabled = !!value?.length));\n    }\n\n    toggle(event: Event): void {\n        if (this.disabled) {\n            return;\n        }\n\n        this.recursive\n            ? this.tree.treeControl.toggleDescendants(this.treeNode.data)\n            : this.tree.treeControl.toggle(this.treeNode.data);\n\n        event.stopPropagation();\n    }\n}\n\n@Component({\n    selector: 'kbq-tree-node-toggle',\n    imports: [\n        KbqIcon\n    ],\n    template: `\n        <ng-content>\n            <i kbq-icon=\"kbq-chevron-down-s_16\"></i>\n        </ng-content>\n    `,\n    styleUrls: ['./toggle.scss', './tree-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqTreeNodeToggle',\n    host: {\n        class: 'kbq-tree-node-toggle',\n        '[class.kbq-expanded]': 'iconState',\n        '[attr.disabled]': 'disabled || null',\n        '(click)': 'toggle($event)'\n    }\n})\nexport class KbqTreeNodeToggleComponent<T> extends KbqTreeNodeToggleBaseDirective<T> {}\n\n@Directive({\n    selector: '[kbq-tree-node-toggle], [kbqTreeNodeToggle]',\n    exportAs: 'kbqTreeNodeToggle',\n    host: {\n        '[attr.disabled]': 'disabled || null',\n        '(click)': 'toggle($event)'\n    }\n})\nexport class KbqTreeNodeToggleDirective<T> extends KbqTreeNodeToggleBaseDirective<T> {}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n    AfterContentInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ElementRef,\n    EventEmitter,\n    Inject,\n    InjectionToken,\n    Input,\n    NgZone,\n    Output,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { hasModifierKey, TAB } from '@koobiq/cdk/keycodes';\nimport {\n    KBQ_OPTION_ACTION_PARENT,\n    KBQ_TITLE_TEXT_REF,\n    KbqActionContainer,\n    KbqOptionActionComponent,\n    KbqPseudoCheckbox,\n    KbqPseudoCheckboxState,\n    KbqTitleTextRef\n} from '@koobiq/components/core';\nimport { KbqDropdownTrigger } from '@koobiq/components/dropdown';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { KbqTreeNodeToggleBaseDirective, KbqTreeNodeToggleComponent, KbqTreeNodeToggleDirective } from './toggle';\nimport { KbqTreeNode } from './tree-base';\n\nexport interface KbqTreeOptionEvent {\n    option: KbqTreeOption;\n}\n\n/** Injection token used to provide the parent component to options. */\nexport const KBQ_TREE_OPTION_PARENT_COMPONENT = new InjectionToken<any>('KBQ_TREE_OPTION_PARENT_COMPONENT');\n\n/**\n * Represents a change event for a tree option.\n *\n * @param source - The tree option that has been modified or selected.\n * @param isUserInput - DEPRECATED Will be removed in version 20.\n */\nexport class KbqTreeOptionChange {\n    isUserInput: boolean;\n\n    constructor(\n        public source: KbqTreeOption,\n        isUserInput = false\n    ) {\n        this.isUserInput = isUserInput;\n    }\n}\n\nlet uniqueIdCounter: number = 0;\n\n@Component({\n    selector: 'kbq-tree-option',\n    imports: [\n        KbqPseudoCheckbox,\n        KbqActionContainer\n    ],\n    templateUrl: './tree-option.html',\n    styleUrls: ['./tree-option.scss', './tree-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqTreeOption',\n    host: {\n        class: 'kbq-tree-option',\n        '[class.kbq-tree-option_multiple]': 'tree.multiple',\n        '[class.kbq-selected]': 'selected',\n        '[class.kbq-focused]': 'hasFocus',\n        '[class.kbq-disabled]': 'disabled',\n        '[class.kbq-action-button-focused]': 'actionButton?.active',\n        '[attr.id]': 'id',\n        '[attr.tabindex]': '-1',\n        '[attr.disabled]': 'disabled || null',\n        '(focusin)': 'focus()',\n        '(mouseenter)': 'onMouseenter()',\n        '(blur)': 'blur()',\n        '(click)': 'selectViaInteraction($event)',\n        '(keydown)': 'onKeydown($event)'\n    },\n    providers: [\n        { provide: KbqTreeNode, useExisting: KbqTreeOption },\n        { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqTreeOption },\n        { provide: KBQ_OPTION_ACTION_PARENT, useExisting: KbqTreeOption }\n    ]\n})\nexport class KbqTreeOption extends KbqTreeNode<KbqTreeOption> implements AfterContentInit, KbqTitleTextRef {\n    readonly onFocus = new Subject<KbqTreeOptionEvent>();\n\n    readonly onBlur = new Subject<KbqTreeOptionEvent>();\n\n    preventBlur: boolean = false;\n\n    @ViewChild('kbqTitleContainer') parentTextElement: ElementRef;\n    @ContentChild(KbqTreeNodeToggleDirective) toggleElementDirective: KbqTreeNodeToggleBaseDirective<KbqTreeOption>;\n    @ContentChild(KbqTreeNodeToggleComponent) toggleElementComponent: KbqTreeNodeToggleBaseDirective<KbqTreeOption>;\n    @ContentChild(KbqPseudoCheckbox) pseudoCheckbox: KbqPseudoCheckbox;\n    @ContentChild(KbqOptionActionComponent) actionButton: KbqOptionActionComponent;\n    @ContentChild(KbqTooltipTrigger) tooltipTrigger: KbqTooltipTrigger;\n    @ContentChild(KbqDropdownTrigger) dropdownTrigger: KbqDropdownTrigger;\n\n    @Input() checkboxThirdState: boolean = false;\n\n    get externalPseudoCheckbox(): boolean {\n        return !!this.pseudoCheckbox;\n    }\n\n    get value(): any {\n        return this._value;\n    }\n\n    set value(value: any) {\n        this._value = value;\n    }\n\n    private _value: any;\n\n    @Input()\n    get disabled() {\n        return this._disabled || this.tree!.disabled || this.tree.treeControl.isDisabled(this.data);\n    }\n\n    set disabled(value: any) {\n        const newValue = coerceBooleanProperty(value);\n\n        if (newValue !== this._disabled) {\n            this._disabled = newValue;\n        }\n    }\n\n    private _disabled: boolean = false;\n\n    @Input({ transform: booleanAttribute }) selectable: boolean = true;\n\n    @Input()\n    get showCheckbox() {\n        return this._showCheckbox !== undefined ? this._showCheckbox : this.tree.showCheckbox;\n    }\n\n    set showCheckbox(value: any) {\n        this._showCheckbox = coerceBooleanProperty(value);\n    }\n\n    private _showCheckbox: boolean;\n\n    @Output() readonly onSelectionChange = new EventEmitter<KbqTreeOptionChange>();\n    readonly userInteraction = new EventEmitter<void>();\n\n    get selected(): boolean {\n        return this._selected;\n    }\n\n    set selected(value: boolean) {\n        const isSelected = coerceBooleanProperty(value);\n\n        if (isSelected !== this._selected) {\n            this.setSelected(isSelected);\n        }\n    }\n\n    private _selected: boolean = false;\n\n    get id(): string {\n        return this._id;\n    }\n\n    private _id = `kbq-tree-option-${uniqueIdCounter++}`;\n\n    get viewValue(): string {\n        // TODO: Add input property alternative for node envs.\n        return (this.getHostElement().textContent || '').trim();\n    }\n\n    hasFocus: boolean = false;\n\n    get isExpandable(): boolean {\n        return !this.toggleElement?.disabled && this.tree.treeControl.isExpandable(this.data);\n    }\n\n    get toggleElement(): KbqTreeNodeToggleBaseDirective<KbqTreeOption> {\n        return this.toggleElementComponent || this.toggleElementDirective;\n    }\n\n    get isToggleInDefaultPlace(): boolean {\n        return !!(this.toggleElementDirective || this.toggleElementComponent);\n    }\n\n    checkboxState: KbqPseudoCheckboxState;\n\n    constructor(\n        elementRef: ElementRef<HTMLElement>,\n        private changeDetectorRef: ChangeDetectorRef,\n        private ngZone: NgZone,\n        @Inject(KBQ_TREE_OPTION_PARENT_COMPONENT) public tree: any\n    ) {\n        super(elementRef, tree);\n    }\n\n    ngAfterContentInit(): void {\n        Promise.resolve().then(this.updateCheckboxState);\n\n        this.value = this.tree.treeControl.getValue(this.data);\n    }\n\n    descendantsAllSelected(): boolean {\n        const descendants = this.tree.treeControl.getDescendants(this.data);\n\n        return descendants.every((child) => this.tree?.selectionModel.isSelected(child));\n    }\n\n    descendantsPartiallySelected(): boolean {\n        const descendants = this.tree.treeControl.getDescendants(this.data);\n\n        return descendants.some((child) => this.tree?.selectionModel.isSelected(child));\n    }\n\n    updateParentsCheckboxState(node) {\n        this.tree.treeControl.getParents(node, []).forEach((parent) => {\n            const parentOption = this.tree.unorderedOptions.find((option) => option.data === parent);\n\n            parentOption?.updateCheckboxState();\n        });\n    }\n\n    updateCheckboxState = () => {\n        if (this.checkboxThirdState && this.isExpandable) {\n            if (this.descendantsAllSelected()) {\n                this.checkboxState = 'checked';\n            } else if (this.descendantsPartiallySelected()) {\n                this.checkboxState = 'indeterminate';\n            } else {\n                this.checkboxState = this.selected ? 'checked' : 'unchecked';\n            }\n        } else {\n            this.checkboxState = this.selected ? 'checked' : 'unchecked';\n        }\n\n        this.updateParentsCheckboxState(this.data);\n    };\n\n    toggle(): void {\n        this.selected = !this.selected;\n    }\n\n    setSelected(selected: boolean): void {\n        if (this._selected === selected || !this.tree.selectionModel) {\n            return;\n        }\n\n        this._selected = selected;\n\n        if (selected) {\n            this.tree.selectionModel.select(this.data);\n        } else {\n            this.tree.selectionModel.deselect(this.data);\n        }\n\n        if (this.showCheckbox) {\n            this.updateCheckboxState();\n        }\n\n        this.markForCheck();\n    }\n\n    focus(focusOrigin?: FocusOrigin) {\n        if (focusOrigin === 'program' || this.disabled || this.actionButton?.hasFocus) return;\n\n        this.elementRef.nativeElement.focus({ preventScroll: focusOrigin === 'mouse' });\n\n        if (!this.hasFocus) {\n            this.onFocus.next({ option: this });\n\n            Promise.resolve().then(() => {\n                this.hasFocus = true;\n\n                this.markForCheck();\n            });\n        }\n    }\n\n    blur(): void {\n        if (this.preventBlur) {\n            return;\n        }\n\n        // When animations are enabled, Angular may end up removing the option from the DOM a little\n        // earlier than usual, causing it to be blurred and throwing off the logic in the tree\n        // that moves focus not the next item. To work around the issue, we defer marking the option\n        // as not focused until the next time the zone stabilizes.\n        this.ngZone.onStable\n            .asObservable()\n            .pipe(take(1))\n            .subscribe(() => {\n                this.ngZone.run(() => {\n                    if (this.actionButton?.hasFocus || this.tree.optionShouldHoldFocusOnBlur) {\n                        return;\n                    }\n\n                    this.hasFocus = false;\n\n                    this.onBlur.next({ option: this });\n                });\n            });\n    }\n\n    /** @docs-private */\n    getHeight(): number {\n        const element = this.elementRef.nativeElement;\n\n        // For SSR compatibility\n        if (typeof element.getClientRects !== 'function') return 0;\n\n        return element.getClientRects()[0]?.height ?? 0;\n    }\n\n    select(setFocus = true): void {\n        if (this._selected) {\n            return;\n        }\n\n        this._selected = true;\n\n        if (setFocus && !this.hasFocus) {\n            this.focus();\n        }\n\n        this.updateCheckboxState();\n        this.markForCheck();\n        this.emitSelectionChangeEvent();\n    }\n\n    deselect(): void {\n        if (!this._selected) {\n            return;\n        }\n\n        this._selected = false;\n\n        this.updateCheckboxState();\n\n        this.markForCheck();\n        this.emitSelectionChangeEvent();\n    }\n\n    onKeydown($event) {\n        if (!this.actionButton) {\n            return;\n        }\n\n        if ($event.keyCode === TAB && !$event.shiftKey && !this.actionButton.hasFocus) {\n            this.actionButton.focus();\n\n            $event.preventDefault();\n        }\n    }\n\n    selectViaInteraction($event?: KeyboardEvent): void {\n        if (this.disabled || !this.selectable) {\n            return;\n        }\n\n        this.markForCheck();\n\n        this.userInteraction.emit();\n\n        const shiftKey = $event ? hasModifierKey($event, 'shiftKey') : false;\n        // ctrlKey is for Windows, metaKey is for MacOS\n        const ctrlKey = $event ? hasModifierKey($event, 'ctrlKey', 'metaKey') : false;\n\n        this.tree.setSelectedOptionsByClick(this, shiftKey, ctrlKey);\n    }\n\n    emitSelectionChangeEvent(): void {\n        this.onSelectionChange.emit(new KbqTreeOptionChange(this));\n    }\n\n    getHostElement(): HTMLElement {\n        return this.elementRef.nativeElement;\n    }\n\n    markForCheck() {\n        this.changeDetectorRef.markForCheck();\n\n        if (this.showCheckbox) {\n            this.updateCheckboxState();\n        }\n    }\n\n    /** @docs-private */\n    protected onMouseenter() {\n        if (this.disabled || !this.tree.inSelect) return;\n\n        this.focus('mouse');\n    }\n}\n","<ng-content select=\"kbq-tree-node-toggle, [kbq-tree-node-toggle], [kbqTreeNodeToggle]\" />\n\n@if (externalPseudoCheckbox) {\n    <ng-content select=\"kbq-pseudo-checkbox\" />\n} @else if (showCheckbox) {\n    <kbq-pseudo-checkbox [disabled]=\"disabled\" [state]=\"checkboxState\" />\n}\n\n<ng-content select=\"kbq-checkbox\" />\n\n<ng-content select=\"[kbq-icon]\" />\n\n<ng-content select=\"kbq-progress-spinner\" />\n\n<span #kbqTitleContainer class=\"kbq-option-text\">\n    <ng-content />\n</span>\n\n@if (actionButton) {\n    <kbq-action-container>\n        <ng-content select=\"kbq-option-action\" />\n    </kbq-action-container>\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { AfterViewInit, Directive, ElementRef, Input, Optional, Renderer2 } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqTreeBase, KbqTreeNode } from './tree-base';\nimport { KbqTreeOption } from './tree-option.component';\n\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n\n@Directive({\n    selector: '[kbqTreeNodePadding]',\n    exportAs: 'kbqTreeNodePadding'\n})\nexport class KbqTreeNodePadding<T> implements AfterViewInit {\n    get level(): number {\n        return this._level;\n    }\n\n    set level(value: number) {\n        this.setLevelInput(value);\n    }\n\n    private _level: number;\n\n    @Input('kbqTreeNodePaddingIndent')\n    get indent(): number | string {\n        return this._indent;\n    }\n\n    set indent(indent: number | string) {\n        this.setIndentInput(indent);\n    }\n\n    private _indent: number = 12;\n\n    get leftPadding(): number {\n        return (this.withIcon ? 0 : this.iconWidth) + this._indent;\n    }\n\n    get leftPaddingForFirstLevel(): number {\n        const border = 2;\n\n        return (this.withIcon ? 0 : this.iconWidth) + this._indent - border;\n    }\n\n    /** CSS units used for the indentation value. */\n    indentUnits = 'px';\n\n    withIcon: boolean;\n    iconWidth: number = 24;\n\n    constructor(\n        protected treeNode: KbqTreeNode<T>,\n        protected tree: KbqTreeBase<T>,\n        private renderer: Renderer2,\n        private element: ElementRef<HTMLElement>,\n        private option: KbqTreeOption,\n        @Optional() private dir: Directionality\n    ) {\n        this.dir?.change?.pipe(takeUntilDestroyed()).subscribe(() => this.setPadding());\n    }\n\n    ngAfterViewInit(): void {\n        this.withIcon = this.option.isToggleInDefaultPlace;\n        this.setPadding();\n    }\n\n    paddingIndent(): string | null {\n        const nodeLevel =\n            this.treeNode.data && this.tree.treeControl.getLevel\n                ? this.tree.treeControl.getLevel(this.treeNode.data)\n                : 0;\n\n        const level = this.level || nodeLevel;\n\n        return level > 0 ? `${level * this._indent + this.leftPadding}px` : `${this.leftPaddingForFirstLevel}px`;\n    }\n\n    /**\n     * This has been extracted to a util because of TS 4 and VE.\n     * View Engine doesn't support property rename inheritance.\n     * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n     * @docs-private\n     */\n    private setLevelInput(value: number) {\n        // Set to null as the fallback value so that _setPadding can fall back to the node level if the\n        // consumer set the directive as `kbqTreeNodePadding=\"\"`. We still want to take this value if\n        // they set 0 explicitly.\n        this._level = coerceNumberProperty(value, null)!;\n        this.setPadding();\n    }\n\n    /**\n     * This has been extracted to a util because of TS 4 and VE.\n     * View Engine doesn't support property rename inheritance.\n     * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n     * @docs-private\n     */\n    private setIndentInput(indent: number | string) {\n        let value = indent;\n        let units = 'px';\n\n        if (typeof indent === 'string') {\n            const parts = indent.split(cssUnitPattern);\n\n            value = parts[0];\n            units = parts[1] || units;\n        }\n\n        this.indentUnits = units;\n        this._indent = coerceNumberProperty(value);\n        this.setPadding();\n    }\n\n    private setPadding() {\n        const padding = this.paddingIndent();\n        const paddingProp = this.dir?.value === 'rtl' ? 'paddingRight' : 'paddingLeft';\n\n        this.renderer.setStyle(this.element.nativeElement, paddingProp, padding);\n    }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport { KbqTreeBase } from './tree-base';\n\n@Component({\n    selector: 'kbq-tree',\n    imports: [\n        KbqTreeNodeOutlet\n    ],\n    template: `\n        <ng-container kbqTreeNodeOutlet />\n    `,\n    styleUrls: ['./tree.scss', 'tree-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqTree',\n    host: {\n        class: 'kbq-tree'\n    }\n})\nexport class KbqTree extends KbqTreeBase<any> {}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n    AfterContentInit,\n    AfterViewInit,\n    Attribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    inject,\n    Input,\n    IterableDiffer,\n    IterableDiffers,\n    OnDestroy,\n    Optional,\n    Output,\n    QueryList,\n    ViewChild,\n    ViewContainerRef,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FocusKeyManager } from '@koobiq/cdk/a11y';\nimport {\n    DOWN_ARROW,\n    END,\n    ENTER,\n    hasModifierKey,\n    HOME,\n    isCopy,\n    isSelectAll,\n    isVerticalMovement,\n    LEFT_ARROW,\n    PAGE_DOWN,\n    PAGE_UP,\n    RIGHT_ARROW,\n    SPACE,\n    TAB,\n    UP_ARROW\n} from '@koobiq/cdk/keycodes';\nimport { getKbqSelectNonArrayValueError, KBQ_FORM_FIELD_REF, MultipleMode } from '@koobiq/components/core';\nimport { merge, Observable, Subscription } from 'rxjs';\nimport { AsyncScheduler } from 'rxjs/internal/scheduler/AsyncScheduler';\nimport { delay } from 'rxjs/operators';\nimport { FlatTreeControl } from './control/flat-tree-control';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport { KbqTreeBase } from './tree-base';\nimport { KBQ_TREE_OPTION_PARENT_COMPONENT, KbqTreeOption, KbqTreeOptionEvent } from './tree-option.component';\n\nexport const KBQ_SELECTION_TREE_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => KbqTreeSelection),\n    multi: true\n};\n\nexport class KbqTreeSelectAllEvent<T> {\n    constructor(\n        public source: KbqTreeSelection,\n        public options: T[]\n    ) {}\n}\n\n/**\n * Event class that occurs when copying an item from the KbqTreeSelection.\n * Used to pass data about the copied item and copy context.\n *\n * @param source - instance of KbqTreeSelection\n * @param option - instance of KbqTreeOption\n * @param event - original keyboard event (optional) that triggered the copy\n */\nexport class KbqTreeCopyEvent<T> {\n    constructor(\n        public source: KbqTreeSelection,\n        public option: T,\n        public event?: KeyboardEvent\n    ) {}\n}\n\nexport class KbqTreeNavigationChange<T> {\n    constructor(\n        public source: KbqTreeSelection,\n        public option: T\n    ) {}\n}\n\nexport class KbqTreeSelectionChange<T> {\n    constructor(\n        public source: KbqTreeSelection,\n        public option: T,\n        public options?: T[]\n    ) {}\n}\n\ninterface SelectionModelOption {\n    id: number | string;\n    value: string;\n}\n\n@Component({\n    selector: 'kbq-tree-selection',\n    imports: [\n        KbqTreeNodeOutlet\n    ],\n    template: '<ng-container kbqTreeNodeOutlet />',\n    styleUrls: ['./tree-selection.scss', 'tree-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqTreeSelection',\n    host: {\n        class: 'kbq-tree-selection',\n        '[attr.tabindex]': 'tabIndex',\n        '[attr.disabled]': 'disabled || null',\n        '(blur)': 'blur()',\n        '(focus)': 'focus($event)',\n        '(keydown)': 'onKeyDown($event)',\n        '(window:resize)': 'updateScrollSize()'\n    },\n    providers: [\n        KBQ_SELECTION_TREE_VALUE_ACCESSOR,\n        { provide: KBQ_TREE_OPTION_PARENT_COMPONENT, useExisting: KbqTreeSelection },\n        { provide: KbqTreeBase, useExisting: KbqTreeSelection }\n    ]\n})\nexport class KbqTreeSelection\n    extends KbqTreeBase<any>\n    implements ControlValueAccessor, AfterContentInit, AfterViewInit, OnDestroy\n{\n    protected readonly focusMonitor = inject(FocusMonitor);\n\n    /** Indicates whether this component is placed inside a KbqFormField component. */\n    protected readonly inSelect = !!inject(KBQ_FORM_FIELD_REF, { optional: true, host: true });\n\n    renderedOptions = new QueryList<KbqTreeOption>();\n\n    keyManager: FocusKeyManager<KbqTreeOption>;\n\n    selectionModel: SelectionModel<SelectionModelOption>;\n\n    resetFocusedItemOnBlur: boolean = true;\n\n    multipleMode: MultipleMode | null = null;\n\n    userTabIndex: number | null = null;\n\n    // this parameter used when select has a search field\n    optionShouldHoldFocusOnBlur: boolean = false;\n\n    @ViewChild(KbqTreeNodeOutlet, { static: true }) declare nodeOutlet: KbqTreeNodeOutlet;\n\n    @ContentChildren(KbqTreeOption) unorderedOptions: QueryList<KbqTreeOption>;\n\n    @Input() declare treeControl: FlatTreeControl<any>;\n\n    @Output() readonly navigationChange = new EventEmitter<KbqTreeNavigationChange<KbqTreeOption>>();\n\n    @Output() readonly selectionChange = new EventEmitter<KbqTreeSelectionChange<KbqTreeOption>>();\n\n    @Output() readonly onSelectAll = new EventEmitter<KbqTreeSelectAllEvent<KbqTreeOption>>();\n\n    @Output() readonly onCopy = new EventEmitter<KbqTreeCopyEvent<KbqTreeOption>>();\n\n    private sortedNodes: KbqTreeOption[] = [];\n\n    private lastSyncedDataNodes: readonly any[] | null = null;\n\n    @Input()\n    get autoSelect(): boolean {\n        return this._autoSelect;\n    }\n\n    set autoSelect(value: boolean) {\n        this._autoSelect = coerceBooleanProperty(value);\n    }\n\n    private _autoSelect: boolean = true;\n\n    get optionFocusChanges(): Observable<KbqTreeOptionEvent> {\n        return merge(...this.renderedOptions.map((option) => option.onFocus));\n    }\n\n    get optionBlurChanges(): Observable<KbqTreeOptionEvent> {\n        return merge(...this.renderedOptions.map((option) => option.onBlur));\n    }\n\n    get multiple(): boolean {\n        return !!this.multipleMode;\n    }\n\n    @Input()\n    get noUnselectLast(): boolean {\n        return this._noUnselectLast;\n    }\n\n    set noUnselectLast(value: boolean) {\n        this._noUnselectLast = coerceBooleanProperty(value);\n    }\n\n    private _noUnselectLast: boolean = true;\n\n    @Input()\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(rawValue: boolean) {\n        const value = coerceBooleanProperty(rawValue);\n\n        if (this._disabled !== value) {\n            this._disabled = value;\n\n            this.markOptionsForCheck();\n        }\n    }\n\n    private _disabled: boolean = false;\n\n    @Input()\n    get tabIndex(): any {\n        return this.disabled ? -1 : this._tabIndex;\n    }\n\n    set tabIndex(value: any) {\n        this._tabIndex = value;\n        this.userTabIndex = value;\n    }\n\n    private _tabIndex = 0;\n\n    get showCheckbox(): boolean {\n        return this.multipleMode === MultipleMode.CHECKBOX;\n    }\n\n    get isEmpty(): boolean {\n        return this.sortedNodes.length === 0;\n    }\n\n    private optionFocusSubscription: Subscription | null;\n\n    private optionBlurSubscription: Subscription | null;\n\n    constructor(\n        private elementRef: ElementRef<HTMLElement>,\n        private scheduler: AsyncScheduler,\n        differs: IterableDiffers,\n        changeDetectorRef: ChangeDetectorRef,\n        @Attribute('multiple') multiple: MultipleMode,\n        @Optional() private clipboard: Clipboard\n    ) {\n        super(differs, changeDetectorRef);\n\n        if (multiple === MultipleMode.CHECKBOX || multiple === MultipleMode.KEYBOARD) {\n            this.multipleMode = multiple;\n        } else if (multiple !== null) {\n            this.multipleMode = MultipleMode.CHECKBOX;\n        }\n\n        if (this.multipleMode === MultipleMode.CHECKBOX) {\n            this.autoSelect = false;\n            this.noUnselectLast = false;\n        }\n\n        this.selectionModel = new SelectionModel<SelectionModelOption>(this.multiple);\n    }\n\n    ngAfterContentInit(): void {\n        this.unorderedOptions.changes.subscribe(this.updateRenderedOptions);\n\n        this.keyManager = new FocusKeyManager<KbqTreeOption>(this.renderedOptions)\n            .withVerticalOrientation(true)\n            .withHorizontalOrientation(null);\n\n        this.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            if (this.keyManager.activeItem) {\n                this.emitNavigationEvent(this.keyManager.activeItem);\n\n                // todo need check this logic\n                if (this.autoSelect && !this.keyManager.activeItem.disabled) {\n                    this.updateOptionsFocus();\n                }\n            }\n        });\n\n        this.keyManager.tabOut.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.allowFocusEscape());\n\n        this.selectionModel.changed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            this.onChange(this.getSelectedValues());\n\n            this.renderedOptions.notifyOnChanges();\n        });\n\n        this.renderedOptions.changes\n            .pipe(delay(0, this.scheduler), takeUntilDestroyed(this.destroyRef))\n            .subscribe((options) => {\n                this.resetOptions();\n\n                // Check to see if we need to update our tab index\n                this.updateTabIndex();\n\n                this.syncSelectionModelToDataNodes();\n\n                const selectedValues = this.multiple ? this.getSelectedValues() : [this.getSelectedValues()];\n\n                options.forEach((option) => {\n                    if (selectedValues.includes(option.value)) {\n                        option.select(false);\n                    } else {\n                        option.deselect();\n                    }\n\n                    option.markForCheck();\n                });\n            });\n    }\n\n    ngAfterViewInit(): void {\n        this.focusMonitor.monitor(this.elementRef, true);\n    }\n\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n\n        this.focusMonitor.stopMonitoring(this.elementRef);\n    }\n\n    focus($event): void {\n        if (this.renderedOptions.length === 0 || this.isFocusReceivedFromNestedOption($event)) {\n            return;\n        }\n\n        this.keyManager.setFocusOrigin('keyboard');\n\n        if (this.selectionModel.selected.length) {\n            this.highlightSelectedOption();\n        } else {\n            this.keyManager.setFirstItemActive();\n        }\n\n        this.keyManager.setFocusOrigin('program');\n    }\n\n    highlightSelectedOption(): void {\n        this.renderedOptions.find((item) => item.data === this.selectionModel.selected[0])?.focus();\n    }\n\n    blur() {\n        if (!this.hasFocusedOption() && this.resetFocusedItemOnBlur) {\n            this.keyManager.setActiveItem(-1);\n        }\n\n        this.onTouched();\n        this.changeDetectorRef.markForCheck();\n    }\n\n    onKeyDown(event: KeyboardEvent): void {\n        this.keyManager.setFocusOrigin('keyboard');\n        const keyCode = event.keyCode;\n\n        if ([SPACE, LEFT_ARROW, RIGHT_ARROW].includes(keyCode) || isVerticalMovement(event)) {\n            event.preventDefault();\n        }\n\n        if (this.multiple && isSelectAll(event)) {\n            this.selectAllOptions();\n            event.preventDefault();\n\n            return;\n        } else if (isCopy(event)) {\n            this.copyActiveOption(event);\n\n            return;\n        } else if (keyCode === TAB) {\n            this.keyManager.tabOut.next();\n\n            return;\n        } else if (keyCode === LEFT_ARROW && this.keyManager.activeItem?.isExpandable) {\n            this.treeControl.collapse(this.keyManager.activeItem.data as KbqTreeOption);\n\n            return;\n        } else if (keyCode === RIGHT_ARROW && this.keyManager.activeItem?.isExpandable) {\n            this.treeControl.expand(this.keyManager.activeItem.data as KbqTreeOption);\n\n            return;\n        } else if (keyCode === DOWN_ARROW) {\n            this.keyManager.setNextItemActive();\n        } else if (keyCode === UP_ARROW) {\n            this.keyManager.setPreviousItemActive();\n        } else if ([SPACE, ENTER].includes(keyCode)) {\n            this.toggleFocusedOption();\n\n            return;\n        } else if (keyCode === HOME) {\n            this.keyManager.setFirstItemActive();\n        } else if (keyCode === END) {\n            this.keyManager.setLastItemActive();\n        } else if (keyCode === PAGE_UP) {\n            this.keyManager.setPreviousPageItemActive();\n        } else if (keyCode === PAGE_DOWN) {\n            this.keyManager.setNextPageItemActive();\n        }\n\n        if (this.keyManager.activeItem && isVerticalMovement(event)) {\n            this.setSelectedOptionsByKey(\n                this.keyManager.activeItem,\n                hasModifierKey(event, 'shiftKey'),\n                // ctrlKey is for Windows, metaKey is for MacOS\n                hasModifierKey(event, 'ctrlKey', 'metaKey')\n            );\n        }\n    }\n\n    updateScrollSize(): void {\n        if (!this.renderedOptions.first) {\n            return;\n        }\n\n        this.keyManager.withScrollSize(Math.floor(this.getHeight() / this.renderedOptions.first.getHeight()));\n    }\n\n    setSelectedOptionsByKey(option: KbqTreeOption, shiftKey: boolean, ctrlKey: boolean): void {\n        if (shiftKey && this.multiple) {\n            this.selectActiveOptions();\n\n            this.emitChangeEvent(option);\n        } else if (ctrlKey) {\n            if (!this.canDeselectLast(option)) {\n                return;\n            }\n        } else if (this.autoSelect) {\n            this.selectionModel.clear();\n            this.selectionModel.toggle(option.data);\n\n            this.emitChangeEvent(option);\n        }\n    }\n\n    setSelectedOptionsByClick(option: KbqTreeOption, shiftKey: boolean, ctrlKey: boolean): void {\n        if (!shiftKey && !ctrlKey) {\n            this.keyManager.setActiveItem(option);\n        }\n\n        if (shiftKey && this.multiple) {\n            this.selectActiveOptions();\n        } else if (ctrlKey) {\n            if (!this.canDeselectLast(option)) {\n                return;\n            }\n\n            this.selectionModel.toggle(option.data);\n            this.keyManager.setActiveItem(option);\n        } else if (this.autoSelect) {\n            this.selectionModel.clear();\n            this.selectionModel.toggle(option.data);\n        } else {\n            this.selectionModel.toggle(option.data);\n        }\n\n        this.emitChangeEvent(option);\n    }\n\n    selectActiveOptions(): void {\n        const options = this.renderedOptions.toArray();\n\n        let fromIndex = this.keyManager.previousActiveItemIndex;\n        let toIndex = (this.keyManager.previousActiveItemIndex = this.keyManager.activeItemIndex);\n\n        const selectedOptionState = options[fromIndex]?.selected;\n\n        if (toIndex === fromIndex || fromIndex === -1) {\n            options[toIndex].toggle();\n\n            return;\n        }\n\n        if (fromIndex > toIndex) {\n            [fromIndex, toIndex] = [toIndex, fromIndex];\n        }\n\n        options\n            .slice(fromIndex, toIndex + 1)\n            .filter((item) => !item.disabled)\n            .forEach((renderedOption) => {\n                if (!selectedOptionState && this.noUnselectLast && this.selectionModel.selected.length === 1) {\n                    return;\n                }\n\n                renderedOption.setSelected(selectedOptionState);\n            });\n    }\n\n    setFocusedOption(option: KbqTreeOption): void {\n        this.keyManager.setActiveItem(option);\n    }\n\n    toggleFocusedOption(): void {\n        const focusedOption = this.keyManager.activeItem;\n\n        if (!focusedOption?.selectable) return;\n\n        if (focusedOption && (!focusedOption.selected || this.canDeselectLast(focusedOption))) {\n            this.selectionModel.toggle(focusedOption.data);\n            this.emitChangeEvent(focusedOption);\n        }\n    }\n\n    renderNodeChanges(\n        data: KbqTreeOption[],\n        dataDiffer: IterableDiffer<KbqTreeOption> = this.dataDiffer,\n        viewContainer: ViewContainerRef = this.nodeOutlet.viewContainer,\n        parentData?: KbqTreeOption\n    ): void {\n        super.renderNodeChanges(data, dataDiffer, viewContainer, parentData);\n\n        this.sortedNodes = this.getSortedNodes(viewContainer);\n\n        this.nodeOutlet.changeDetectorRef.detectChanges();\n    }\n\n    emitNavigationEvent(option: KbqTreeOption): void {\n        this.navigationChange.emit(new KbqTreeNavigationChange(this, option));\n    }\n\n    emitChangeEvent(option: KbqTreeOption): void {\n        this.selectionChange.emit(new KbqTreeSelectionChange(this, option, [option]));\n    }\n\n    selectAllOptions(): void {\n        const disabledDataNodes = this.renderedOptions.filter((option) => option.disabled).map((option) => option.data);\n\n        const dataNodes = this.treeControl.dataNodes.filter(\n            (node) => !this.treeControl.isDisabled(node) && !disabledDataNodes.includes(node)\n        );\n\n        const selectableOptions = this.renderedOptions.filter((option) => !option.disabled);\n        let changedOptions: KbqTreeOption[] = selectableOptions;\n\n        if (dataNodes.length === this.selectionModel.selected.length) {\n            this.selectionModel.clear();\n        } else {\n            this.selectionModel.select(...dataNodes);\n            changedOptions = selectableOptions.filter((option) => !option.selected);\n        }\n\n        this.selectionChange.emit(new KbqTreeSelectionChange(this, changedOptions[0], changedOptions));\n        this.onSelectAll.emit(new KbqTreeSelectAllEvent(this, selectableOptions));\n    }\n\n    copyActiveOption(event: KeyboardEvent): void {\n        if (!this.keyManager.activeItem) return;\n\n        const option = this.keyManager.activeItem;\n\n        option.preventBlur = true;\n\n        if (this.onCopy.observed) {\n            this.onCopy.emit(new KbqTreeCopyEvent(this, this.keyManager.activeItem as KbqTreeOption, event));\n        } else {\n            this.onCopyDefaultHandler();\n\n            event.preventDefault();\n        }\n\n        option.preventBlur = false;\n    }\n\n    writeValue(value: any): void {\n        if (this.multiple && value && !Array.isArray(value)) {\n            throw getKbqSelectNonArrayValueError();\n        }\n\n        if (value) {\n            this.setOptionsFromValues(this.multiple ? value : [value]);\n        } else {\n            this.selectionModel.clear();\n        }\n    }\n\n    /** `View -> model callback called when value changes` */\n    onChange: (value: any) => void = () => {};\n\n    registerOnChange(fn: (value: any) => void): void {\n        this.onChange = fn;\n    }\n\n    /** `View -> model callback called when select has been touched` */\n    onTouched = () => {};\n\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    registerOnTouched(fn: () => {}): void {\n        this.onTouched = fn;\n    }\n\n    /**\n     * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n     */\n    setDisabledState(isDisabled: boolean): void {\n        this._disabled = isDisabled;\n        this.changeDetectorRef.markForCheck();\n    }\n\n    setOptionsFromValues(values: any[]): void {\n        this.selectionModel.clear();\n\n        const valuesToSelect = values.reduce((result, value) => {\n            return this.treeControl.hasValue(value) ? [...result, this.treeControl.hasValue(value)] : [...result];\n        }, []);\n\n        this.selectionModel.select(...valuesToSelect);\n    }\n\n    /**\n     * Rebinds orphan node references in selectionModel to current treeControl.dataNodes by value.\n     * Needed after dataSource.data is replaced — selectionModel holds references to old node\n     * objects, but options render with new ones, so toggle()/isSelected() break on identity.\n     */\n    private syncSelectionModelToDataNodes(): void {\n        const currentNodes = this.treeControl.dataNodes;\n\n        // Fast path: dataNodes ref hasn't changed since last sync → orphans impossible.\n        // Skips work on filter / expand / selection-toggle re-renders where data ref is stable.\n        if (currentNodes === this.lastSyncedDataNodes) return;\n        this.lastSyncedDataNodes = currentNodes;\n\n        if (this.selectionModel.isEmpty() || !currentNodes?.length) return;\n\n        const selected = this.selectionModel.selected;\n        const currentNodesSet = new Set<any>(currentNodes);\n\n        let hasOrphans = false;\n\n        for (const node of selected) {\n            if (!currentNodesSet.has(node)) {\n                hasOrphans = true;\n                break;\n            }\n        }\n\n        if (!hasOrphans) return;\n\n        const reconciled = selected.map((node) => {\n            if (currentNodesSet.has(node)) return node;\n\n            const replacement = this.treeControl.hasValue(this.treeControl.getValue(node));\n\n            return replacement ?? node;\n        });\n\n        this.selectionModel.setSelection(...reconciled);\n    }\n\n    getSelectedValues(): any[] {\n        const selectedValues = this.selectionModel.selected.map((selected) => this.treeControl.getValue(selected));\n\n        return this.multiple ? selectedValues : selectedValues[0];\n    }\n\n    getItemHeight(): number {\n        return this.renderedOptions.first ? this.renderedOptions.first.getHeight() : 0;\n    }\n\n    setStateChildren(option: KbqTreeOption, state: boolean) {\n        const valuesToChange = this.treeControl.getDescendants(option.data);\n\n        if (state) {\n            this.selectionModel.select(...valuesToChange);\n        } else {\n            this.selectionModel.deselect(...valuesToChange);\n        }\n    }\n\n    private onCopyDefaultHandler(): void {\n        this.clipboard?.copy(this.keyManager.activeItem!.value);\n    }\n\n    private getHeight(): number {\n        const element = this.elementRef.nativeElement;\n\n        // For SSR compatibility\n        if (typeof element.getClientRects !== 'function') return 0;\n\n        return element.getClientRects()[0]?.height ?? 0;\n    }\n\n    private updateTabIndex(): void {\n        this._tabIndex = this.renderedOptions.length === 0 ? -1 : 0;\n    }\n\n    private updateRenderedOptions = () => {\n        const orderedOptions: KbqTreeOption[] = [];\n\n        this.sortedNodes.forEach((node) => {\n            const found = this.unorderedOptions.find((option) => option.value === this.treeControl.getValue(node));\n\n            if (found) {\n                orderedOptions.push(found);\n            }\n        });\n\n        this.renderedOptions.reset(orderedOptions);\n        this.renderedOptions.notifyOnChanges();\n\n        this.updateScrollSize();\n    };\n\n    private getSortedNodes(viewContainer: ViewContainerRef) {\n        const array: KbqTreeOption[] = [];\n\n        for (let i = 0; i < viewContainer.length; i++) {\n            const viewRef = viewContainer.get(i) as any;\n\n            array.push(viewRef.context.$implicit);\n        }\n\n        return array;\n    }\n\n    private allowFocusEscape() {\n        if (this._tabIndex !== -1) {\n            this._tabIndex = -1;\n\n            setTimeout(() => {\n                this._tabIndex = this.userTabIndex || 0;\n                this.changeDetectorRef.markForCheck();\n            });\n        }\n    }\n\n    private resetOptions() {\n        this.dropSubscriptions();\n        this.listenToOptionsFocus();\n    }\n\n    private dropSubscriptions() {\n        if (this.optionFocusSubscription) {\n            this.optionFocusSubscription.unsubscribe();\n            this.optionFocusSubscription = null;\n        }\n\n        if (this.optionBlurSubscription) {\n            this.optionBlurSubscription.unsubscribe();\n            this.optionBlurSubscription = null;\n        }\n    }\n\n    private listenToOptionsFocus(): void {\n        this.optionFocusSubscription = this.optionFocusChanges.subscribe((event) => {\n            const index: number = this.renderedOptions.toArray().indexOf(event.option as KbqTreeOption);\n\n            this.renderedOptions.filter((option) => option.hasFocus).forEach((option) => (option.hasFocus = false));\n\n            if (this.isValidIndex(index)) {\n                this.keyManager.updateActiveItem(index);\n            }\n        });\n\n        this.optionBlurSubscription = this.optionBlurChanges.subscribe(() => this.blur());\n    }\n\n    /**\n     * Utility to ensure all indexes are valid.\n     * @param index The index to be checked.\n     * @returns True if the index is valid for our list of options.\n     */\n    private isValidIndex(index: number): boolean {\n        return index >= 0 && index < this.renderedOptions.length;\n    }\n\n    /** Checks whether any of the options is focused. */\n    private hasFocusedOption() {\n        return this.renderedOptions.some((option) => option.hasFocus);\n    }\n\n    private markOptionsForCheck() {\n        this.renderedOptions.forEach((option) => option.markForCheck());\n    }\n\n    private updateOptionsFocus() {\n        this.renderedOptions.filter((option) => option.hasFocus).forEach((option) => (option.hasFocus = false));\n    }\n\n    private canDeselectLast(option: KbqTreeOption): boolean {\n        return !(this.noUnselectLast && this.selectionModel.selected.length === 1 && option.selected);\n    }\n\n    private isFocusReceivedFromNestedOption($event: FocusEvent) {\n        if (!$event || !$event.relatedTarget) {\n            return false;\n        }\n\n        return ($event.relatedTarget as HTMLElement).classList.contains('kbq-tree-option');\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqActionContainer, KbqPseudoCheckboxModule } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { asyncScheduler } from 'rxjs';\nimport { AsyncScheduler } from 'rxjs/internal/scheduler/AsyncScheduler';\nimport { KbqTreeNodeDef } from './node';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport { KbqTreeNodePadding } from './padding.directive';\nimport { KbqTreeNodeToggleComponent, KbqTreeNodeToggleDirective } from './toggle';\nimport { KbqTree } from './tree';\nimport { KbqTreeNode } from './tree-base';\nimport { KbqTreeOption } from './tree-option.component';\nimport { KbqTreeSelection } from './tree-selection.component';\n\nconst KBQ_TREE_DIRECTIVES = [\n    KbqTreeNodeOutlet,\n    KbqTreeNodeDef,\n    KbqTreeNode,\n    KbqTreeNodePadding,\n    KbqTree,\n    KbqTreeSelection,\n    KbqTreeOption,\n    KbqTreeNodeToggleComponent,\n    KbqTreeNodeToggleDirective\n];\n\n@NgModule({\n    imports: [\n        KbqPseudoCheckboxModule,\n        KbqIconModule,\n        KbqActionContainer,\n        ...KBQ_TREE_DIRECTIVES\n    ],\n    exports: KBQ_TREE_DIRECTIVES,\n    providers: [{ provide: AsyncScheduler, useValue: asyncScheduler }]\n})\nexport class KbqTreeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableOf","i1.KbqTreeBase","i1.KbqTreeNode","i2.KbqTreeOption"],"mappings":"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"}