igniteui-angular 21.0.3 → 21.1.0-alpha.1

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