UNPKG

carbon-components-angular

Version:
1,267 lines (1,107 loc) 62.3 kB
<!doctype html> <html class="no-js" lang=""> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>carbon-components-angular documentation</title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="../images/favicon.ico"> <link rel="stylesheet" href="../styles/style.css"> <link rel="stylesheet" href="../styles/dark.css"> </head> <body> <div class="navbar navbar-default navbar-fixed-top d-block d-sm-none"> <a href="../" class="navbar-brand">carbon-components-angular documentation</a> <button type="button" class="btn btn-default btn-menu ion-ios-menu" id="btn-menu"></button> </div> <div class="xs-menu menu" id="mobile-menu"> <div id="book-search-input" role="search"><input type="text" placeholder="Type to search"></div> <compodoc-menu></compodoc-menu> </div> <div class="container-fluid main"> <div class="row main"> <div class="hidden-xs menu"> <compodoc-menu mode="normal"></compodoc-menu> </div> <!-- START CONTENT --> <div class="content component"> <div class="content-data"> <ol class="breadcrumb"> <li class="breadcrumb-item">Components</li> <li class="breadcrumb-item" > TreeViewComponent</li> </ol> <ul class="nav nav-tabs" role="tablist"> <li class="nav-item"> <a href="#info" class="nav-link active" role="tab" id="info-tab" data-bs-toggle="tab" data-link="info">Info</a> </li> <li class="nav-item"> <a href="#source" class="nav-link" role="tab" id="source-tab" data-bs-toggle="tab" data-link="source">Source</a> </li> <li class="nav-item"> <a href="#tree" class="nav-link" role="tab" id="tree-tab" data-bs-toggle="tab" data-link="dom-tree">DOM Tree</a> </li> </ul> <div class="tab-content"> <div class="tab-pane fade active in" id="info"><p class="comment"> <h3>File</h3> </p> <p class="comment"> <code>src/treeview/treeview.component.ts</code> </p> <p class="comment"> <h3>Description</h3> </p> <p class="comment"> <p>Get started with importing the module:</p> <div><pre class="line-numbers"><code class="language-typescript">import { TreeviewModule } from &#39;carbon-components-angular&#39;;</code></pre></div><p><a href="../../?path=/story/components-tree-view--basic">See demo</a></p> </p> <p class="comment"> <h3>Implements</h3> </p> <p class="comment"> <code>AfterViewInit</code> <code>OnInit</code> <code>OnDestroy</code> </p> <section data-compodoc="block-metadata"> <h3>Metadata</h3> <table class="table table-sm table-hover metadata"> <tbody> <tr> <td class="col-md-3">providers</td> <td class="col-md-9"> <code><a href="../injectables/TreeViewService.html" target="_self" >TreeViewService</a></code> </td> </tr> <tr> <td class="col-md-3">selector</td> <td class="col-md-9"><code>cds-tree-view</code></td> </tr> <tr> <td class="col-md-3">template</td> <td class="col-md-9"><pre class="line-numbers"><code class="language-html">&lt;label *ngIf&#x3D;&quot;label&quot; [id]&#x3D;&quot;id&quot; class&#x3D;&quot;cds--label&quot;&gt; {{label}} &lt;/label&gt; &lt;div class&#x3D;&quot;cds--tree&quot; [ngClass]&#x3D;&quot;{ &#x27;cds--tree--sm&#x27;: size &#x3D;&#x3D;&#x3D; &#x27;sm&#x27;, &#x27;cds--tree--xs&#x27;: size &#x3D;&#x3D;&#x3D; &#x27;xs&#x27; }&quot; [attr.aria-label]&#x3D;&quot;label ? label : null&quot; [attr.aria-labelledby]&#x3D;&quot;!label ? id : null&quot; [attr.aria-multiselectable]&#x3D;&quot;isMultiSelect || null&quot; role&#x3D;&quot;tree&quot; (keydown)&#x3D;&quot;navigateTree($event)&quot; #treeWrapper&gt; &lt;ng-container *ngIf&#x3D;&quot;isProjected(); else notProjected&quot;&gt; &lt;ng-content&gt;&lt;/ng-content&gt; &lt;/ng-container&gt; &lt;ng-template #notProjected&gt; &lt;cds-tree-node *ngFor&#x3D;&quot;let node of tree&quot; [node]&#x3D;&quot;node&quot;&gt; &lt;/cds-tree-node&gt; &lt;/ng-template&gt; &lt;/div&gt; </code></pre></td> </tr> </tbody> </table> </section> <section data-compodoc="block-index"> <h3 id="index">Index</h3> <table class="table table-sm table-bordered index-table"> <tbody> <tr> <td class="col-md-4"> <h6><b>Properties</b></h6> </td> </tr> <tr> <td class="col-md-4"> <ul class="index-list"> <li> <span class="modifier">Private</span> <a href="#_tree" >_tree</a> </li> <li> <span class="modifier"></span> <a href="#root" >root</a> </li> <li> <span class="modifier">Private</span> <a href="#subscription" >subscription</a> </li> <li> <span class="modifier">Static</span> <a href="#treeViewCount" >treeViewCount</a> </li> <li> <span class="modifier">Private</span> <a href="#treeWalker" >treeWalker</a> </li> </ul> </td> </tr> <tr> <td class="col-md-4"> <h6><b>Methods</b></h6> </td> </tr> <tr> <td class="col-md-4"> <ul class="index-list"> <li> <span class="modifier">Public</span> <a href="#isProjected" >isProjected</a> </li> <li> <a href="#navigateTree" >navigateTree</a> </li> <li> <a href="#ngAfterViewInit" >ngAfterViewInit</a> </li> <li> <a href="#ngOnDestroy" >ngOnDestroy</a> </li> <li> <a href="#ngOnInit" >ngOnInit</a> </li> </ul> </td> </tr> <tr> <td class="col-md-4"> <h6><b>Inputs</b></h6> </td> </tr> <tr> <td class="col-md-4"> <ul class="index-list"> <li> <a href="#id" >id</a> </li> <li> <a href="#isMultiSelect" >isMultiSelect</a> </li> <li> <a href="#label" >label</a> </li> <li> <a href="#size" >size</a> </li> <li> <a href="#tree" >tree</a> </li> </ul> </td> </tr> <tr> <td class="col-md-4"> <h6><b>Outputs</b></h6> </td> </tr> <tr> <td class="col-md-4"> <ul class="index-list"> <li> <a href="#select" >select</a> </li> </ul> </td> </tr> <tr> <td class="col-md-4"> <h6><b>Accessors</b></h6> </td> </tr> <tr> <td class="col-md-4"> <ul class="index-list"> <li> <a href="#tree" >tree</a> </li> <li> <a href="#isMultiSelect" >isMultiSelect</a> </li> </ul> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-constructor"> <h3 id="constructor">Constructor</h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <code>constructor(document: Document, treeViewService: <a href="../injectables/TreeViewService.html" target="_self">TreeViewService</a>, elementRef: ElementRef)</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="99" class="link-to-prism">src/treeview/treeview.component.ts:99</a></div> </td> </tr> <tr> <td class="col-md-4"> <div> <b>Parameters :</b> <table class="params"> <thead> <tr> <td>Name</td> <td>Type</td> <td>Optional</td> </tr> </thead> <tbody> <tr> <td>document</td> <td> <code>Document</code> </td> <td> No </td> </tr> <tr> <td>treeViewService</td> <td> <code><a href="../injectables/TreeViewService.html" target="_self" >TreeViewService</a></code> </td> <td> No </td> </tr> <tr> <td>elementRef</td> <td> <code>ElementRef</code> </td> <td> No </td> </tr> </tbody> </table> </div> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-inputs"> <h3 id="inputs">Inputs</h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="id"></a> <b>id</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code> </td> </tr> <tr> <td class="col-md-4"> <i>Default value : </i><code>&#x60;tree-view-${TreeViewComponent.treeViewCount++}&#x60;</code> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="78" class="link-to-prism">src/treeview/treeview.component.ts:78</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="isMultiSelect"></a> <b>isMultiSelect</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank" >boolean</a></code> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="90" class="link-to-prism">src/treeview/treeview.component.ts:90</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"><p><strong>Experimental</strong> - Enable to select multiple nodes</p> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="label"></a> <b>label</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>string | TemplateRef&lt;any&gt;</code> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="82" class="link-to-prism">src/treeview/treeview.component.ts:82</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"><p>Tree view label</p> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="size"></a> <b>size</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>&quot;xs&quot; | &quot;sm&quot;</code> </td> </tr> <tr> <td class="col-md-4"> <i>Default value : </i><code>&quot;sm&quot;</code> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="86" class="link-to-prism">src/treeview/treeview.component.ts:86</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"><p>Specify the size of the list items in the tree</p> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="tree"></a> <b>tree</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code><a href="../interfaces/Node.html" target="_self" >Node[]</a></code> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="67" class="link-to-prism">src/treeview/treeview.component.ts:67</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"><p>Pass <code>Node[]</code> array to have tree view render the nodes Passing value will disregard projected content</p> </div> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-outputs"> <h3 id="outputs">Outputs</h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="select"></a> <b>select</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>EventEmitter</code> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="94" class="link-to-prism">src/treeview/treeview.component.ts:94</a></div> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-methods"> <h3 id="methods"> Methods </h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="isProjected"></a> <span class="name"> <span class="modifier">Public</span> <span ><b>isProjected</b></span> <a href="#isProjected"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <span class="modifier-icon icon ion-ios-reset"></span> <code>isProjected()</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="157" class="link-to-prism">src/treeview/treeview.component.ts:157</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >any</a></code> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="navigateTree"></a> <span class="name"> <span ><b>navigateTree</b></span> <a href="#navigateTree"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <code>navigateTree(event: KeyboardEvent)</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="147" class="link-to-prism">src/treeview/treeview.component.ts:147</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"><p>Navigate tree using tree walker</p> </div> <div class="io-description"> <b>Parameters :</b> <table class="params"> <thead> <tr> <td>Name</td> <td>Type</td> <td>Optional</td> <td>Description</td> </tr> </thead> <tbody> <tr> <td>event</td> <td> <code>KeyboardEvent</code> </td> <td> No </td> <td> <ul> <li>KeyboardEvent</li> </ul> </td> </tr> </tbody> </table> </div> <div> </div> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code> </div> <div class="io-description"> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="ngAfterViewInit"></a> <span class="name"> <span ><b>ngAfterViewInit</b></span> <a href="#ngAfterViewInit"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <code>ngAfterViewInit()</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="129" class="link-to-prism">src/treeview/treeview.component.ts:129</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"><p>Initialize tree walker to support keyboard navigation</p> </div> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="ngOnDestroy"></a> <span class="name"> <span ><b>ngOnDestroy</b></span> <a href="#ngOnDestroy"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <code>ngOnDestroy()</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="122" class="link-to-prism">src/treeview/treeview.component.ts:122</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="ngOnInit"></a> <span class="name"> <span ><b>ngOnInit</b></span> <a href="#ngOnInit"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <code>ngOnInit()</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="110" class="link-to-prism">src/treeview/treeview.component.ts:110</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"><p>Subscribe for node selection</p> </div> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code> </div> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-properties"> <h3 id="inputs"> Properties </h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="_tree"></a> <span class="name"> <span class="modifier">Private</span> <span ><b>_tree</b></span> <a href="#_tree"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code><a href="../interfaces/Node.html" target="_self" >Node[]</a></code> </td> </tr> <tr> <td class="col-md-4"> <i>Default value : </i><code>[]</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="98" class="link-to-prism">src/treeview/treeview.component.ts:98</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="root"></a> <span class="name"> <span class="modifier"></span> <span ><b>root</b></span> <a href="#root"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>ElementRef</code> </td> </tr> <tr> <td class="col-md-4"> <b>Decorators : </b> <br /> <code> @ViewChild(&#x27;treeWrapper&#x27;)<br /> </code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="95" class="link-to-prism">src/treeview/treeview.component.ts:95</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="subscription"></a> <span class="name"> <span class="modifier">Private</span> <span ><b>subscription</b></span> <a href="#subscription"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>Subscription</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="99" class="link-to-prism">src/treeview/treeview.component.ts:99</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="treeViewCount"></a> <span class="name"> <span class="modifier">Static</span> <span ><b>treeViewCount</b></span> <a href="#treeViewCount"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/number" target="_blank" >number</a></code> </td> </tr> <tr> <td class="col-md-4"> <i>Default value : </i><code>0</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="76" class="link-to-prism">src/treeview/treeview.component.ts:76</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="treeWalker"></a> <span class="name"> <span class="modifier">Private</span> <span ><b>treeWalker</b></span> <a href="#treeWalker"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>TreeWalker</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="97" class="link-to-prism">src/treeview/treeview.component.ts:97</a></div> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-accessors"> <h3 id="accessors"> Accessors </h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="tree"></a> <span class="name"><b>tree</b><a href="#tree"><span class="icon ion-ios-link"></span></a></span> </td> </tr> <tr> <td class="col-md-4"> <span class="accessor"><b>get</b><code>tree()</code></span> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="72" class="link-to-prism">src/treeview/treeview.component.ts:72</a></div> </td> </tr> <tr> <td class="col-md-4"> <span class="accessor"><b>set</b><code>tree(treeNodes: <a href="../interfaces/Node.html" target="_self">Node[]</a>)</code></span> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="67" class="link-to-prism">src/treeview/treeview.component.ts:67</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"><p>Pass <code>Node[]</code> array to have tree view render the nodes Passing value will disregard projected content</p> </div> <div class="io-description"> <b>Parameters :</b> <table class="params"> <thead> <tr> <td>Name</td> <td>Type</td> <td>Optional</td> </tr> </thead> <tbody> <tr> <td>treeNodes</td> <td> <code><a href="../interfaces/Node.html" target="_self" >Node[]</a></code> </td> <td> No </td> </tr> </tbody> </table> </div> <div> </div> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="isMultiSelect"></a> <span class="name"><b>isMultiSelect</b><a href="#isMultiSelect"><span class="icon ion-ios-link"></span></a></span> </td> </tr> <tr> <td class="col-md-4"> <span class="accessor"><b>set</b><code>isMultiSelect(isMulti: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank">boolean</a>)</code></span> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="90" class="link-to-prism">src/treeview/treeview.component.ts:90</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"><p><strong>Experimental</strong> - Enable to select multiple nodes</p> </div> <div class="io-description"> <b>Parameters :</b> <table class="params"> <thead> <tr> <td>Name</td> <td>Type</td> <td>Optional</td> </tr> </thead> <tbody> <tr> <td>isMulti</td> <td> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank" >boolean</a></code> </td> <td> No </td> </tr> </tbody> </table> </div> <div> </div> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code> </div> </td> </tr> </tbody> </table> </section> </div> <div class="tab-pane fade tab-source-code" id="source"> <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { DOCUMENT } from &quot;@angular/common&quot;; import { Component, Input, Output, TemplateRef, EventEmitter, AfterViewInit, Inject, ViewChild, ElementRef, OnInit, OnDestroy } from &quot;@angular/core&quot;; import { Subscription } from &quot;rxjs&quot;; import { Node } from &quot;./tree-node.types&quot;; import { TreeViewService } from &quot;./treeview.service&quot;; /** * Get started with importing the module: * * &#x60;&#x60;&#x60;typescript * import { TreeviewModule } from &#x27;carbon-components-angular&#x27;; * &#x60;&#x60;&#x60; * * [See demo](../../?path&#x3D;/story/components-tree-view--basic) */ @Component({ selector: &quot;cds-tree-view&quot;, template: &#x60; &lt;label *ngIf&#x3D;&quot;label&quot; [id]&#x3D;&quot;id&quot; class&#x3D;&quot;cds--label&quot;&gt; {{label}} &lt;/label&gt; &lt;div class&#x3D;&quot;cds--tree&quot; [ngClass]&#x3D;&quot;{ &#x27;cds--tree--sm&#x27;: size &#x3D;&#x3D;&#x3D; &#x27;sm&#x27;, &#x27;cds--tree--xs&#x27;: size &#x3D;&#x3D;&#x3D; &#x27;xs&#x27; }&quot; [attr.aria-label]&#x3D;&quot;label ? label : null&quot; [attr.aria-labelledby]&#x3D;&quot;!label ? id : null&quot; [attr.aria-multiselectable]&#x3D;&quot;isMultiSelect || null&quot; role&#x3D;&quot;tree&quot; (keydown)&#x3D;&quot;navigateTree($event)&quot; #treeWrapper&gt; &lt;ng-container *ngIf&#x3D;&quot;isProjected(); else notProjected&quot;&gt; &lt;ng-content&gt;&lt;/ng-content&gt; &lt;/ng-container&gt; &lt;ng-template #notProjected&gt; &lt;cds-tree-node *ngFor&#x3D;&quot;let node of tree&quot; [node]&#x3D;&quot;node&quot;&gt; &lt;/cds-tree-node&gt; &lt;/ng-template&gt; &lt;/div&gt; &#x60;, providers: [TreeViewService] }) export class TreeViewComponent implements AfterViewInit, OnInit, OnDestroy { /** * Pass &#x60;Node[]&#x60; array to have tree view render the nodes * Passing value will disregard projected content */ @Input() set tree(treeNodes: Node[]) { this._tree &#x3D; treeNodes.map((node) &#x3D;&gt; Object.assign({}, node)); this.treeViewService.contentProjected &#x3D; false; } get tree() { return this._tree; } static treeViewCount &#x3D; 0; @Input() id &#x3D; &#x60;tree-view-${TreeViewComponent.treeViewCount++}&#x60;; /** * Tree view label */ @Input() label: string | TemplateRef&lt;any&gt;; /** * Specify the size of the list items in the tree */ @Input() size: &quot;xs&quot; | &quot;sm&quot; &#x3D; &quot;sm&quot;; /** * **Experimental** - Enable to select multiple nodes */ @Input() set isMultiSelect(isMulti: boolean) { this.treeViewService.isMultiSelect &#x3D; isMulti; } @Output() select &#x3D; new EventEmitter&lt;Node | Node[]&gt;(); @ViewChild(&quot;treeWrapper&quot;) root: ElementRef; private treeWalker: TreeWalker; private _tree: Node[] &#x3D; []; private subscription: Subscription; constructor( @Inject(DOCUMENT) private document: Document, protected treeViewService: TreeViewService, private elementRef: ElementRef ) {} /** * Subscribe for node selection */ ngOnInit(): void { this.subscription &#x3D; this.treeViewService.selectionObservable.subscribe((nodesMap: Map&lt;string, Node&gt;) &#x3D;&gt; { // Get all values from the map to emit const nodes &#x3D; [...nodesMap.values()]; // Update focus to reset arrow key traversal // Select the current highlight node as the last node, since we preserve order in map this.treeWalker.currentNode &#x3D; this.elementRef.nativeElement.querySelector(&#x60;#${CSS.escape(nodes[nodes.length - 1].id)}&#x60;); this.select.emit(this.treeViewService.isMultiSelect ? nodes : nodes[0]); }); } ngOnDestroy(): void { this.subscription.unsubscribe(); } /** * Initialize tree walker to support keyboard navigation */ ngAfterViewInit(): void { this.treeWalker &#x3D; this.document.createTreeWalker(this.root.nativeElement, NodeFilter.SHOW_ELEMENT, { acceptNode: function (node: HTMLElement) { if (node.classList.contains(&#x60;cds--tree-node--disabled&#x60;)) { return NodeFilter.FILTER_REJECT; } if (node.matches(&#x60;div.cds--tree-node&#x60;)) { return NodeFilter.FILTER_ACCEPT; } return NodeFilter.FILTER_SKIP; } }); } /** * Navigate tree using tree walker * @param event - KeyboardEvent */ navigateTree(event: KeyboardEvent) { if (event.key &#x3D;&#x3D;&#x3D; &quot;ArrowUp&quot;) { (this.treeWalker.previousNode() as HTMLElement)?.focus(); } if (event.key &#x3D;&#x3D;&#x3D; &quot;ArrowDown&quot;) { (this.treeWalker.nextNode() as HTMLElement)?.focus(); } } public isProjected() { return this.treeViewService.contentProjected; } } </code></pre> </div> <div class="tab-pane fade " id="tree"> <div id="tree-container"></div> <div class="tree-legend"> <div class="title"> <b>Legend</b> </div> <div> <div class="color htmlelement"></div><span>Html element</span> </div> <div> <div class="color component"></div><span>Component</span> </div> <div> <div class="color directive"></div><span>Html element with directive</span> </div> </div> </div> </div> <script src="../js/libs/vis.min.js"></script> <script src="../js/libs/htmlparser.js"></script> <script src="../js/libs/deep-iterator.js"></script> <script> var COMPONENT_TEMPLATE = '<div><label *ngIf="label" [id]="id" class="cds--label"> {{label}}</label><div class="cds--tree" [ngClass]="{ \'cds--tree--sm\': size === \'sm\', \'cds--tree--xs\': size === \'xs\' }" [attr.aria-label]="label ? label : null" [attr.aria-labelledby]="!label ? id : null" [attr.aria-multiselectable]="isMultiSelect || null" role="tree" (keydown)="navigateTree($event)" #treeWrapper> <ng-container *ngIf="isProjected(); else notProjected"> <ng-content></ng-content> </ng-container> <ng-template #notProjected> <cds-tree-node *ngFor="let node of tree" [node]="node"> </cds-tree-node> </ng-template></div> </div>' var COMPONENTS = [{'name': 'Accordion', 'selector': 'cds-accordion, ibm-accordion'},{'name': 'AccordionItem', 'selector': 'cds-accordion-item, ibm-accordion-item'},{'name': 'ActionableNotification', 'selector': 'cds-actionable-notification, ibm-actionable-notification'},{'name': 'AlertModal', 'selector': 'cds-alert-modal, ibm-alert-modal'},{'name': 'BaseIconButton', 'selector': ''},{'name': 'BaseNotification', 'selector': ''},{'name': 'BaseTabHeader', 'selector': ''},{'name': 'Breadcrumb', 'selector': 'cds-breadcrumb, ibm-breadcrumb'},{'name': 'BreadcrumbItemComponent', 'selector': 'cds-breadcrumb-item, ibm-breadcrumb-item'},{'name': 'ButtonSet', 'selector': 'cds-button-set, ibm-button-set'},{'name': 'Checkbox', 'selector': 'cds-checkbox, ibm-checkbox'},{'name': 'ClickableTile', 'selector': 'cds-clickable-tile, ibm-clickable-tile'},{'name': 'CodeSnippet', 'selector': 'cds-code-snippet, ibm-code-snippet'},{'name': 'ComboBox', 'selector': 'cds-combo-box, ibm-combo-box'},{'name': 'ContainedList', 'selector': 'cds-contained-list, ibm-contained-list'},{'name': 'ContainedListItem', 'selector': 'cds-contained-list-item, ibm-contained-list-item'},{'name': 'ContentSwitcher', 'selector': 'cds-content-switcher, ibm-content-switcher'},{'name': 'ContextMenuComponent', 'selector': 'cds-context-menu, ibm-context-menu'},{'name': 'ContextMenuDividerComponent', 'selector': 'cds-context-menu-divider, ibm-context-menu-divider'},{'name': 'ContextMenuGroupComponent', 'selector': 'cds-context-menu-group, ibm-context-menu-group'},{'name': 'ContextMenuItemComponent', 'selector': 'cds-context-menu-item, ibm-context-menu-item'},{'name': 'DatePicker', 'selector': 'cds-date-picker, ibm-date-picker'},{'name': 'DatePickerInput', 'selector': 'cds-date-picker-input, ibm-date-picker-input'},{'name': 'Dialog', 'selector': 'cds-dialog, ibm-dialog'},{'name': 'Documentation', 'selector': 'cds-documentation'},{'name': 'Dropdown', 'selector': 'cds-dropdown, ibm-dropdown'},{'name': 'DropdownList', 'selector': 'cds-dropdown-list, ibm-dropdown-list'},{'name': 'ExpandableTile', 'selector': 'cds-expandable-tile, ibm-expandable-tile'},{'name': 'FileComponent', 'selector': 'cds-file, ibm-file'},{'name': 'FileUploader', 'selector': 'cds-file-uploader, ibm-file-uploader'},{'name': 'Hamburger', 'selector': 'cds-hamburger, ibm-hamburger'},{'name': 'Header', 'selector': 'cds-header, ibm-header'},{'name': 'HeaderAction', 'selector': 'cds-header-action, ibm-header-action'},{'name': 'HeaderGlobal', 'selec