igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
951 lines (941 loc) • 33.5 kB
TypeScript
import * as i0 from '@angular/core';
import { QueryList, ElementRef, EventEmitter, TemplateRef, OnDestroy, OnInit, ChangeDetectorRef, AfterViewInit } from '@angular/core';
import { IBaseCancelableBrowserEventArgs, IBaseEventArgs, ITreeResourceStrings } from 'igniteui-angular/core';
import { ToggleAnimationSettings, ToggleAnimationPlayer } from 'igniteui-angular/expansion-panel';
import { Subject } from 'rxjs';
/** Comparer function that can be used when searching through IgxTreeNode<any>[] */
type IgxTreeSearchResolver = (data: any, node: IgxTreeNode<any>) => boolean;
interface IgxTree {
/** @hidden @internal */
nodes: QueryList<IgxTreeNode<any>>;
/** @hidden @internal */
rootNodes: IgxTreeNode<any>[];
singleBranchExpand: boolean;
toggleNodeOnClick: boolean;
selection: IgxTreeSelectionType;
expandIndicator: TemplateRef<any>;
animationSettings: ToggleAnimationSettings;
/** @hidden @internal */
forceSelect: IgxTreeNode<any>[];
/** @hidden @internal */
disabledChange: EventEmitter<IgxTreeNode<any>>;
/** @hidden @internal */
activeNodeBindingChange: EventEmitter<IgxTreeNode<any>>;
nodeSelection: EventEmitter<ITreeNodeSelectionEvent>;
nodeExpanding: EventEmitter<ITreeNodeTogglingEventArgs>;
nodeExpanded: EventEmitter<ITreeNodeToggledEventArgs>;
nodeCollapsing: EventEmitter<ITreeNodeTogglingEventArgs>;
nodeCollapsed: EventEmitter<ITreeNodeToggledEventArgs>;
activeNodeChanged: EventEmitter<IgxTreeNode<any>>;
expandAll(nodes: IgxTreeNode<any>[]): void;
collapseAll(nodes: IgxTreeNode<any>[]): void;
deselectAll(node?: IgxTreeNode<any>[]): void;
findNodes(searchTerm: any, comparer?: IgxTreeSearchResolver): IgxTreeNode<any>[] | null;
}
interface IgxTreeNode<T> {
parentNode?: IgxTreeNode<any> | null;
loading: boolean;
path: IgxTreeNode<any>[];
expanded: boolean | null;
/** @hidden @internal */
indeterminate: boolean;
selected: boolean | null;
disabled: boolean;
/** @hidden @internal */
isFocused: boolean;
active: boolean;
level: number;
data: T;
/** @hidden @internal */
nativeElement: HTMLElement;
/** @hidden @internal */
header: ElementRef;
/** @hidden @internal */
tabIndex: number;
/** @hidden @internal */
allChildren: QueryList<IgxTreeNode<any>>;
/** @hidden @internal */
_children: QueryList<IgxTreeNode<any>> | null;
selectedChange: EventEmitter<boolean>;
expandedChange: EventEmitter<boolean>;
expand(): void;
collapse(): void;
toggle(): void;
/** @hidden @internal */
addLinkChild(node: any): void;
/** @hidden @internal */
removeLinkChild(node: any): void;
}
interface ITreeNodeSelectionEvent extends IBaseCancelableBrowserEventArgs {
oldSelection: IgxTreeNode<any>[];
newSelection: IgxTreeNode<any>[];
added: IgxTreeNode<any>[];
removed: IgxTreeNode<any>[];
event?: Event;
}
interface ITreeNodeEditingEvent extends IBaseCancelableBrowserEventArgs {
node: IgxTreeNode<any>;
value: string;
}
interface ITreeNodeEditedEvent extends IBaseEventArgs {
node: IgxTreeNode<any>;
value: any;
}
interface ITreeNodeTogglingEventArgs extends IBaseEventArgs, IBaseCancelableBrowserEventArgs {
node: IgxTreeNode<any>;
}
interface ITreeNodeToggledEventArgs extends IBaseEventArgs {
node: IgxTreeNode<any>;
}
declare const IgxTreeSelectionType: {
readonly None: "None";
readonly BiState: "BiState";
readonly Cascading: "Cascading";
};
type IgxTreeSelectionType = (typeof IgxTreeSelectionType)[keyof typeof IgxTreeSelectionType];
/** @hidden @internal */
declare class IgxTreeNavigationService implements OnDestroy {
private treeService;
private selectionService;
private tree;
private _focusedNode;
private _lastFocusedNode;
private _activeNode;
private _visibleChildren;
private _invisibleChildren;
private _disabledChildren;
private _cacheChange;
constructor();
register(tree: IgxTree): void;
get focusedNode(): IgxTreeNode<any>;
set focusedNode(value: IgxTreeNode<any>);
get activeNode(): IgxTreeNode<any>;
set activeNode(value: IgxTreeNode<any>);
get visibleChildren(): IgxTreeNode<any>[];
update_disabled_cache(node: IgxTreeNode<any>): void;
init_invisible_cache(): void;
update_visible_cache(node: IgxTreeNode<any>, expanded: boolean, shouldEmit?: boolean): void;
/**
* Sets the node as focused (and active)
*
* @param node target node
* @param isActive if true, sets the node as active
*/
setFocusedAndActiveNode(node: IgxTreeNode<any>, isActive?: boolean): void;
/** Handler for keydown events. Used in tree.component.ts */
handleKeydown(event: KeyboardEvent): void;
ngOnDestroy(): void;
private handleNavigation;
private handleArrowLeft;
private handleArrowRight;
private handleUpDownArrow;
private handleAsterisk;
private handleSpace;
/** Gets the next visible node in the given direction - 1 -> next, -1 -> previous */
private getVisibleNode;
static ɵfac: i0.ɵɵFactoryDeclaration<IgxTreeNavigationService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<IgxTreeNavigationService>;
}
/** @hidden @internal */
declare class IgxTreeSelectionService {
private tree;
private nodeSelection;
private indeterminateNodes;
private nodesToBeSelected;
private nodesToBeIndeterminate;
register(tree: IgxTree): void;
/** Select range from last selected node to the current specified node. */
selectMultipleNodes(node: IgxTreeNode<any>, event?: Event): void;
/** Select the specified node and emit event. */
selectNode(node: IgxTreeNode<any>, event?: Event): void;
/** Deselect the specified node and emit event. */
deselectNode(node: IgxTreeNode<any>, event?: Event): void;
/** Clears node selection */
clearNodesSelection(): void;
isNodeSelected(node: IgxTreeNode<any>): boolean;
isNodeIndeterminate(node: IgxTreeNode<any>): boolean;
/** Select specified nodes. No event is emitted. */
selectNodesWithNoEvent(nodes: IgxTreeNode<any>[], clearPrevSelection?: boolean, shouldEmit?: boolean): void;
/** Deselect specified nodes. No event is emitted. */
deselectNodesWithNoEvent(nodes?: IgxTreeNode<any>[], shouldEmit?: boolean): void;
/** Called on `node.ngOnDestroy` to ensure state is correct after node is removed */
ensureStateOnNodeDelete(node: IgxTreeNode<any>): void;
/** Retriggers a node's selection state */
private retriggerNodeState;
/** Returns array of the selected nodes. */
private getSelectedNodes;
/** Returns array of the nodes in indeterminate state. */
private getIndeterminateNodes;
private emitNodeSelectionEvent;
private areEqualCollections;
private cascadeSelectNodesWithNoEvent;
private cascadeDeselectNodesWithNoEvent;
/**
* populates the nodesToBeSelected and nodesToBeIndeterminate sets
* with the nodes which will be eventually in selected/indeterminate state
*/
private calculateNodesNewSelectionState;
/** Ensures proper selection state for all predescessors and descendants during a selection event */
private cascadeSelectionState;
private emitCascadeNodeSelectionEvent;
/**
* recursively handle the selection state of the direct and indirect parents
*/
private handleParentSelectionState;
/**
* Handle the selection state of a given node based the selection states of its direct children
*/
private handleNodeSelectionState;
/**
* Get a collection of all nodes affected by the change event
*
* @param nodesToBeProcessed set of the nodes to be selected/deselected
* @returns a collection of all affected nodes and all their parents
*/
private getCascadingNodeCollection;
/**
* retrieve the nodes which should be added/removed to/from the old selection
*/
private populateAddRemoveArgs;
/** Emits the `selectedChange` event for each node affected by the selection */
private emitSelectedChangeEvent;
static ɵfac: i0.ɵɵFactoryDeclaration<IgxTreeSelectionService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<IgxTreeSelectionService>;
}
/** @hidden @internal */
declare class IgxTreeService {
expandedNodes: Set<IgxTreeNode<any>>;
collapsingNodes: Set<IgxTreeNode<any>>;
private tree;
/**
* Adds the node to the `expandedNodes` set and fires the nodes change event
*
* @param node target node
* @param uiTrigger is the event triggered by a ui interraction (so we know if we should animate)
* @returns void
*/
expand(node: IgxTreeNode<any>, uiTrigger?: boolean): void;
/**
* Adds a node to the `collapsing` collection
*
* @param node target node
*/
collapsing(node: IgxTreeNode<any>): void;
/**
* Removes the node from the 'expandedNodes' set and emits the node's change event
*
* @param node target node
* @returns void
*/
collapse(node: IgxTreeNode<any>): void;
isExpanded(node: IgxTreeNode<any>): boolean;
register(tree: IgxTree): void;
private siblingComparer;
static ɵfac: i0.ɵɵFactoryDeclaration<IgxTreeService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<IgxTreeService>;
}
/**
* @hidden @internal
* Used for links (`a` tags) in the body of an `igx-tree-node`. Handles aria and event dispatch.
*/
declare class IgxTreeNodeLinkDirective implements OnDestroy {
private node;
private navService;
elementRef: ElementRef<any>;
role: string;
/**
* The node's parent. Should be used only when the link is defined
* in `<ng-template>` tag outside of its parent, as Angular DI will not properly provide a reference
*
* ```html
* <igx-tree>
* <igx-tree-node #myNode *ngFor="let node of data" [data]="node">
* <ng-template *ngTemplateOutlet="nodeTemplate; context: { $implicit: data, parentNode: myNode }">
* </ng-template>
* </igx-tree-node>
* ...
* <!-- node template is defined under tree to access related services -->
* <ng-template #nodeTemplate let-data let-node="parentNode">
* <a [igxTreeNodeLink]="node">{{ data.label }}</a>
* </ng-template>
* </igx-tree>
* ```
*/
set parentNode(val: any);
get parentNode(): any;
/** A pointer to the parent node */
private get target();
private _parentNode;
/** @hidden @internal */
get tabIndex(): number;
/**
* @hidden @internal
* Clear the node's focused state
*/
handleBlur(): void;
/**
* @hidden @internal
* Set the node as focused
*/
handleFocus(): void;
ngOnDestroy(): void;
static ɵfac: i0.ɵɵFactoryDeclaration<IgxTreeNodeLinkDirective, never>;
static ɵdir: i0.ɵɵDirectiveDeclaration<IgxTreeNodeLinkDirective, "[igxTreeNodeLink]", never, { "parentNode": { "alias": "igxTreeNodeLink"; "required": false; }; }, {}, never, never, true, never>;
}
/**
*
* The tree node component represents a child node of the tree component or another tree node.
* Usage:
*
* ```html
* <igx-tree>
* ...
* <igx-tree-node [data]="data" [selected]="service.isNodeSelected(data.Key)" [expanded]="service.isNodeExpanded(data.Key)">
* {{ data.FirstName }} {{ data.LastName }}
* </igx-tree-node>
* ...
* </igx-tree>
* ```
*/
declare class IgxTreeNodeComponent<T> extends ToggleAnimationPlayer implements IgxTreeNode<T>, OnInit, OnDestroy {
tree: IgxTree;
protected selectionService: IgxTreeSelectionService;
protected treeService: IgxTreeService;
protected navService: IgxTreeNavigationService;
protected cdr: ChangeDetectorRef;
private element;
parentNode: IgxTreeNode<any>;
/**
* The data entry that the node is visualizing.
*
* @remarks
* Required for searching through nodes.
*
* @example
* ```html
* <igx-tree>
* ...
* <igx-tree-node [data]="data">
* {{ data.FirstName }} {{ data.LastName }}
* </igx-tree-node>
* ...
* </igx-tree>
* ```
*/
data: T;
/**
* To be used for load-on-demand scenarios in order to specify whether the node is loading data.
*
* @remarks
* Loading nodes do not render children.
*/
loading: boolean;
/** @hidden @internal */
set tabIndex(val: number);
/** @hidden @internal */
get tabIndex(): number;
/** @hidden @internal */
get animationSettings(): ToggleAnimationSettings;
/**
* Gets/Sets the resource strings.
*
* @remarks
* Uses EN resources by default.
*/
set resourceStrings(value: ITreeResourceStrings);
/**
* An accessor that returns the resource strings.
*/
get resourceStrings(): ITreeResourceStrings;
/**
* Gets/Sets the active state of the node
*
* @param value: boolean
*/
set active(value: boolean);
get active(): boolean;
/**
* Emitted when the node's `selected` property changes.
*
* ```html
* <igx-tree>
* <igx-tree-node *ngFor="let node of data" [data]="node" [(selected)]="node.selected">
* </igx-tree-node>
* </igx-tree>
* ```
*
* ```typescript
* const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];
* node.selectedChange.pipe(takeUntil(this.destroy$)).subscribe((e: boolean) => console.log("Node selection changed to ", e))
* ```
*/
selectedChange: EventEmitter<boolean>;
/**
* Emitted when the node's `expanded` property changes.
*
* ```html
* <igx-tree>
* <igx-tree-node *ngFor="let node of data" [data]="node" [(expanded)]="node.expanded">
* </igx-tree-node>
* </igx-tree>
* ```
*
* ```typescript
* const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];
* node.expandedChange.pipe(takeUntil(this.destroy$)).subscribe((e: boolean) => console.log("Node expansion state changed to ", e))
* ```
*/
expandedChange: EventEmitter<boolean>;
/** @hidden @internal */
get focused(): boolean;
/**
* Retrieves the full path to the node incuding itself
*
* ```typescript
* const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];
* const path: IgxTreeNode<any>[] = node.path;
* ```
*/
get path(): IgxTreeNode<any>[];
/**
* Gets/Sets the disabled state of the node
*
* @param value: boolean
*/
get disabled(): boolean;
set disabled(value: boolean);
/** @hidden @internal */
cssClass: string;
/** @hidden @internal */
get role(): "treeitem" | "none";
/** @hidden @internal */
linkChildren: QueryList<ElementRef>;
/** @hidden @internal */
_children: QueryList<IgxTreeNode<any>>;
/** @hidden @internal */
allChildren: QueryList<IgxTreeNode<any>>;
/**
* Return the child nodes of the node (if any)
*
* @remarks
* Returns `null` if node does not have children
*
* @example
* ```typescript
* const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];
* const children: IgxTreeNode<any>[] = node.children;
* ```
*/
get children(): IgxTreeNode<any>[];
/** @hidden @internal */
header: ElementRef;
private _defaultExpandIndicatorTemplate;
private childrenContainer;
private get hasLinkChildren();
/** @hidden @internal */
isFocused: boolean;
/** @hidden @internal */
registeredChildren: IgxTreeNodeLinkDirective[];
/** @hidden @internal */
private _resourceStrings;
private _tabIndex;
private _disabled;
/**
* @hidden @internal
*/
get showSelectors(): boolean;
/**
* @hidden @internal
*/
get indeterminate(): boolean;
/** The depth of the node, relative to the root
*
* ```html
* <igx-tree>
* ...
* <igx-tree-node #node>
* My level is {{ node.level }}
* </igx-tree-node>
* </igx-tree>
* ```
*
* ```typescript
* const node: IgxTreeNode<any> = this.tree.findNodes(data[12])[0];
* const level: number = node.level;
* ```
*/
get level(): number;
/** Get/set whether the node is selected. Supporst two-way binding.
*
* ```html
* <igx-tree>
* ...
* <igx-tree-node *ngFor="let node of data" [(selected)]="node.selected">
* {{ node.label }}
* </igx-tree-node>
* </igx-tree>
* ```
*
* ```typescript
* const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];
* const selected = node.selected;
* node.selected = true;
* ```
*/
get selected(): boolean;
set selected(val: boolean);
/** Get/set whether the node is expanded
*
* ```html
* <igx-tree>
* ...
* <igx-tree-node *ngFor="let node of data" [expanded]="node.name === this.expandedNode">
* {{ node.label }}
* </igx-tree-node>
* </igx-tree>
* ```
*
* ```typescript
* const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];
* const expanded = node.expanded;
* node.expanded = true;
* ```
*/
get expanded(): boolean;
set expanded(val: boolean);
/** @hidden @internal */
get expandIndicatorTemplate(): TemplateRef<any>;
/**
* The native DOM element representing the node. Could be null in certain environments.
*
* ```typescript
* // get the nativeElement of the second node
* const node: IgxTreeNode = this.tree.nodes.first();
* const nodeElement: HTMLElement = node.nativeElement;
* ```
*/
/** @hidden @internal */
get nativeElement(): HTMLElement;
/** @hidden @internal */
ngOnInit(): void;
/**
* @hidden @internal
* Sets the focus to the node's <a> child, if present
* Sets the node as the tree service's focusedNode
* Marks the node as the current active element
*/
handleFocus(): void;
/**
* @hidden @internal
* Clear the node's focused status
*/
clearFocus(): void;
/**
* @hidden @internal
*/
onSelectorPointerDown(event: any): void;
/**
* @hidden @internal
*/
onSelectorClick(event: any): void;
/**
* Toggles the node expansion state, triggering animation
*
* ```html
* <igx-tree>
* <igx-tree-node #node>My Node</igx-tree-node>
* </igx-tree>
* <button type="button" igxButton (click)="node.toggle()">Toggle Node</button>
* ```
*
* ```typescript
* const myNode: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];
* myNode.toggle();
* ```
*/
toggle(): void;
/** @hidden @internal */
indicatorClick(): void;
/**
* @hidden @internal
*/
onPointerDown(event: any): void;
ngOnDestroy(): void;
/**
* Expands the node, triggering animation
*
* ```html
* <igx-tree>
* <igx-tree-node #node>My Node</igx-tree-node>
* </igx-tree>
* <button type="button" igxButton (click)="node.expand()">Expand Node</button>
* ```
*
* ```typescript
* const myNode: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];
* myNode.expand();
* ```
*/
expand(): void;
/**
* Collapses the node, triggering animation
*
* ```html
* <igx-tree>
* <igx-tree-node #node>My Node</igx-tree-node>
* </igx-tree>
* <button type="button" igxButton (click)="node.collapse()">Collapse Node</button>
* ```
*
* ```typescript
* const myNode: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];
* myNode.collapse();
* ```
*/
collapse(): void;
/** @hidden @internal */
addLinkChild(link: IgxTreeNodeLinkDirective): void;
/** @hidden @internal */
removeLinkChild(link: IgxTreeNodeLinkDirective): void;
static ɵfac: i0.ɵɵFactoryDeclaration<IgxTreeNodeComponent<any>, never>;
static ɵcmp: i0.ɵɵComponentDeclaration<IgxTreeNodeComponent<any>, "igx-tree-node", never, { "data": { "alias": "data"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "resourceStrings": { "alias": "resourceStrings"; "required": false; }; "active": { "alias": "active"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; }, { "selectedChange": "selectedChange"; "expandedChange": "expandedChange"; }, ["linkChildren", "_children", "allChildren"], ["igx-tree-node", "*"], true, never>;
static ngAcceptInputType_loading: unknown;
static ngAcceptInputType_active: unknown;
static ngAcceptInputType_disabled: unknown;
static ngAcceptInputType_selected: unknown;
static ngAcceptInputType_expanded: unknown;
}
/**
* @hidden @internal
* Used for templating the expand indicator of the tree
*/
declare class IgxTreeExpandIndicatorDirective {
static ɵfac: i0.ɵɵFactoryDeclaration<IgxTreeExpandIndicatorDirective, never>;
static ɵdir: i0.ɵɵDirectiveDeclaration<IgxTreeExpandIndicatorDirective, "[igxTreeExpandIndicator]", never, {}, {}, never, never, true, never>;
}
/**
* IgxTreeComponent allows a developer to show a set of nodes in a hierarchical fashion.
*
* @igxModule IgxTreeModule
* @igxKeywords tree
* @igxTheme igx-tree-theme
* @igxGroup Grids & Lists
*
* @remark
* The Angular Tree Component allows users to represent hierarchical data in a tree-view structure,
* maintaining parent-child relationships, as well as to define static tree-view structure without a corresponding data model.
* Its primary purpose is to allow end-users to visualize and navigate within hierarchical data structures.
* The Ignite UI for Angular Tree Component also provides load on demand capabilities, item activation,
* bi-state and cascading selection of items through built-in checkboxes, built-in keyboard navigation and more.
*
* @example
* ```html
* <igx-tree>
* <igx-tree-node>
* I am a parent node 1
* <igx-tree-node>
* I am a child node 1
* </igx-tree-node>
* ...
* </igx-tree-node>
* ...
* </igx-tree>
* ```
*/
declare class IgxTreeComponent implements IgxTree, OnInit, AfterViewInit, OnDestroy {
private navService;
private selectionService;
private treeService;
private element;
private platform;
cssClass: string;
/**
* Gets/Sets tree selection mode
*
* @remarks
* By default the tree selection mode is 'None'
* @param selectionMode: IgxTreeSelectionType
*/
get selection(): IgxTreeSelectionType;
set selection(selectionMode: IgxTreeSelectionType);
/** Get/Set how the tree should handle branch expansion.
* If set to `true`, only a single branch can be expanded at a time, collapsing all others
*
* ```html
* <igx-tree [singleBranchExpand]="true">
* ...
* </igx-tree>
* ```
*
* ```typescript
* const tree: IgxTree = this.tree;
* this.tree.singleBranchExpand = false;
* ```
*/
singleBranchExpand: boolean;
/** Get/Set if nodes should be expanded/collapsed when clicking over them.
*
* ```html
* <igx-tree [toggleNodeOnClick]="true">
* ...
* </igx-tree>
* ```
*
* ```typescript
* const tree: IgxTree = this.tree;
* this.tree.toggleNodeOnClick = false;
* ```
*/
toggleNodeOnClick: boolean;
/** Get/Set the animation settings that branches should use when expanding/collpasing.
*
* ```html
* <igx-tree [animationSettings]="customAnimationSettings">
* </igx-tree>
* ```
*
* ```typescript
* const animationSettings: ToggleAnimationSettings = {
* openAnimation: growVerIn,
* closeAnimation: growVerOut
* };
*
* this.tree.animationSettings = animationSettings;
* ```
*/
animationSettings: ToggleAnimationSettings;
/** Emitted when the node selection is changed through interaction
*
* ```html
* <igx-tree (nodeSelection)="handleNodeSelection($event)">
* </igx-tree>
* ```
*
*```typescript
* public handleNodeSelection(event: ITreeNodeSelectionEvent) {
* const newSelection: IgxTreeNode<any>[] = event.newSelection;
* const added: IgxTreeNode<any>[] = event.added;
* console.log("New selection will be: ", newSelection);
* console.log("Added nodes: ", event.added);
* }
*```
*/
nodeSelection: EventEmitter<ITreeNodeSelectionEvent>;
/** Emitted when a node is expanding, before it finishes
*
* ```html
* <igx-tree (nodeExpanding)="handleNodeExpanding($event)">
* </igx-tree>
* ```
*
*```typescript
* public handleNodeExpanding(event: ITreeNodeTogglingEventArgs) {
* const expandedNode: IgxTreeNode<any> = event.node;
* if (expandedNode.disabled) {
* event.cancel = true;
* }
* }
*```
*/
nodeExpanding: EventEmitter<ITreeNodeTogglingEventArgs>;
/** Emitted when a node is expanded, after it finishes
*
* ```html
* <igx-tree (nodeExpanded)="handleNodeExpanded($event)">
* </igx-tree>
* ```
*
*```typescript
* public handleNodeExpanded(event: ITreeNodeToggledEventArgs) {
* const expandedNode: IgxTreeNode<any> = event.node;
* console.log("Node is expanded: ", expandedNode.data);
* }
*```
*/
nodeExpanded: EventEmitter<ITreeNodeToggledEventArgs>;
/** Emitted when a node is collapsing, before it finishes
*
* ```html
* <igx-tree (nodeCollapsing)="handleNodeCollapsing($event)">
* </igx-tree>
* ```
*
*```typescript
* public handleNodeCollapsing(event: ITreeNodeTogglingEventArgs) {
* const collapsedNode: IgxTreeNode<any> = event.node;
* if (collapsedNode.alwaysOpen) {
* event.cancel = true;
* }
* }
*```
*/
nodeCollapsing: EventEmitter<ITreeNodeTogglingEventArgs>;
/** Emitted when a node is collapsed, after it finishes
*
* @example
* ```html
* <igx-tree (nodeCollapsed)="handleNodeCollapsed($event)">
* </igx-tree>
* ```
* ```typescript
* public handleNodeCollapsed(event: ITreeNodeToggledEventArgs) {
* const collapsedNode: IgxTreeNode<any> = event.node;
* console.log("Node is collapsed: ", collapsedNode.data);
* }
* ```
*/
nodeCollapsed: EventEmitter<ITreeNodeToggledEventArgs>;
/**
* Emitted when the active node is changed.
*
* @example
* ```
* <igx-tree (activeNodeChanged)="activeNodeChanged($event)"></igx-tree>
* ```
*/
activeNodeChanged: EventEmitter<IgxTreeNode<any>>;
/**
* A custom template to be used for the expand indicator of nodes
* ```html
* <igx-tree>
* <ng-template igxTreeExpandIndicator let-expanded>
* <igx-icon>{{ expanded ? "close_fullscreen": "open_in_full"}}</igx-icon>
* </ng-template>
* </igx-tree>
* ```
*/
expandIndicator: TemplateRef<any>;
/** @hidden @internal */
nodes: QueryList<IgxTreeNodeComponent<any>>;
/** @hidden @internal */
disabledChange: EventEmitter<IgxTreeNode<any>>;
/**
* Returns all **root level** nodes
*
* ```typescript
* const tree: IgxTree = this.tree;
* const rootNodes: IgxTreeNodeComponent<any>[] = tree.rootNodes;
* ```
*/
get rootNodes(): IgxTreeNodeComponent<any>[];
/**
* Emitted when the active node is set through API
*
* @hidden @internal
*/
activeNodeBindingChange: EventEmitter<IgxTreeNode<any>>;
/** @hidden @internal */
forceSelect: any[];
/** @hidden @internal */
resizeNotify: Subject<void>;
private _selection;
private destroy$;
private unsubChildren$;
constructor();
/** @hidden @internal */
get nativeElement(): HTMLElement;
/**
* Expands all of the passed nodes.
* If no nodes are passed, expands ALL nodes
*
* @param nodes nodes to be expanded
*
* ```typescript
* const targetNodes: IgxTreeNode<any> = this.tree.findNodes(true, (_data: any, node: IgxTreeNode<any>) => node.data.expandable);
* tree.expandAll(nodes);
* ```
*/
expandAll(nodes?: IgxTreeNode<any>[]): void;
/**
* Collapses all of the passed nodes.
* If no nodes are passed, collapses ALL nodes
*
* @param nodes nodes to be collapsed
*
* ```typescript
* const targetNodes: IgxTreeNode<any> = this.tree.findNodes(true, (_data: any, node: IgxTreeNode<any>) => node.data.collapsible);
* tree.collapseAll(nodes);
* ```
*/
collapseAll(nodes?: IgxTreeNode<any>[]): void;
/**
* Deselect all nodes if the nodes collection is empty. Otherwise, deselect the nodes in the nodes collection.
*
* @example
* ```typescript
* const arr = [
* this.tree.nodes.toArray()[0],
* this.tree.nodes.toArray()[1]
* ];
* this.tree.deselectAll(arr);
* ```
* @param nodes: IgxTreeNodeComponent<any>[]
*/
deselectAll(nodes?: IgxTreeNodeComponent<any>[]): void;
/**
* Returns all of the nodes that match the passed searchTerm.
* Accepts a custom comparer function for evaluating the search term against the nodes.
*
* @remarks
* Default search compares the passed `searchTerm` against the node's `data` Input.
* When using `findNodes` w/o a `comparer`, make sure all nodes have `data` passed.
*
* @param searchTerm The data of the searched node
* @param comparer A custom comparer function that evaluates the passed `searchTerm` against all nodes.
* @returns Array of nodes that match the search. `null` if no nodes are found.
*
* ```html
* <igx-tree>
* <igx-tree-node *ngFor="let node of data" [data]="node">
* {{ node.label }}
* </igx-tree-node>
* </igx-tree>
* ```
*
* ```typescript
* public data: DataEntry[] = FETCHED_DATA;
* ...
* const matchedNodes: IgxTreeNode<DataEntry>[] = this.tree.findNodes<DataEntry>(searchTerm: data[5]);
* ```
*
* Using a custom comparer
* ```typescript
* public data: DataEntry[] = FETCHED_DATA;
* ...
* const comparer: IgxTreeSearchResolver = (data: any, node: IgxTreeNode<DataEntry>) {
* return node.data.index % 2 === 0;
* }
* const evenIndexNodes: IgxTreeNode<DataEntry>[] = this.tree.findNodes<DataEntry>(null, comparer);
* ```
*/
findNodes(searchTerm: any, comparer?: IgxTreeSearchResolver): IgxTreeNodeComponent<any>[] | null;
/** @hidden @internal */
handleKeydown(event: KeyboardEvent): void;
/** @hidden @internal */
ngOnInit(): void;
/** @hidden @internal */
ngAfterViewInit(): void;
/** @hidden @internal */
ngOnDestroy(): void;
private expandToNode;
private subToCollapsing;
private subToChanges;
private scrollNodeIntoView;
private _comparer;
static ɵfac: i0.ɵɵFactoryDeclaration<IgxTreeComponent, never>;
static ɵcmp: i0.ɵɵComponentDeclaration<IgxTreeComponent, "igx-tree", never, { "selection": { "alias": "selection"; "required": false; }; "singleBranchExpand": { "alias": "singleBranchExpand"; "required": false; }; "toggleNodeOnClick": { "alias": "toggleNodeOnClick"; "required": false; }; "animationSettings": { "alias": "animationSettings"; "required": false; }; }, { "nodeSelection": "nodeSelection"; "nodeExpanding": "nodeExpanding"; "nodeExpanded": "nodeExpanded"; "nodeCollapsing": "nodeCollapsing"; "nodeCollapsed": "nodeCollapsed"; "activeNodeChanged": "activeNodeChanged"; }, ["expandIndicator", "nodes"], ["igx-tree-node"], true, never>;
static ngAcceptInputType_singleBranchExpand: unknown;
static ngAcceptInputType_toggleNodeOnClick: unknown;
}
declare const IGX_TREE_DIRECTIVES: readonly [typeof IgxTreeComponent, typeof IgxTreeNodeComponent, typeof IgxTreeNodeLinkDirective, typeof IgxTreeExpandIndicatorDirective];
/**
* @hidden
* IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components
*/
declare class IgxTreeModule {
static ɵfac: i0.ɵɵFactoryDeclaration<IgxTreeModule, never>;
static ɵmod: i0.ɵɵNgModuleDeclaration<IgxTreeModule, never, [typeof IgxTreeComponent, typeof IgxTreeNodeComponent, typeof IgxTreeNodeLinkDirective, typeof IgxTreeExpandIndicatorDirective], [typeof IgxTreeComponent, typeof IgxTreeNodeComponent, typeof IgxTreeNodeLinkDirective, typeof IgxTreeExpandIndicatorDirective]>;
static ɵinj: i0.ɵɵInjectorDeclaration<IgxTreeModule>;
}
export { IGX_TREE_DIRECTIVES, IgxTreeComponent, IgxTreeExpandIndicatorDirective, IgxTreeModule, IgxTreeNodeComponent, IgxTreeNodeLinkDirective, IgxTreeSelectionType };
export type { ITreeNodeEditedEvent, ITreeNodeEditingEvent, ITreeNodeSelectionEvent, ITreeNodeToggledEventArgs, ITreeNodeTogglingEventArgs, IgxTree, IgxTreeNode, IgxTreeSearchResolver };