Lootstrap-angular
Accordion
Avatar
Breadcrumb
Card
Carousel
Dialog
Notify
Pagination
Rating
Sidenav
Spinner
Table
Tabs
Time
Timeline
TreeView
Highlighter
Mapper
Tooltip

Ng - TreeView

Styled byLS TreeView

Basic usage

Applications
Files
tree-view
tree-view.component.html
tree-view.component.ts
Models
Applications
Files
tree-view
tree-view.component.html
tree-view.component.ts
Models
  <TreeView [Mode]="'Single'" [Items]="Basic"></TreeView>
  <TreeView [Mode]="'Multiple'" [Items]="Basic" (SelectedItems)="SelectedItems($event)"></TreeView>
        
  Basic: TreeItem [] = [
    {Id: 1, Expanded: false, Content: {Text: 'Applications'}, Children: [{Id: 11, Content: {Text: 'WebStorm'}}]},
    {
      Id: 2, Content: {Text: 'Files'}, Children: [
        {
          Id: 21, PId: 2, Content: {Text: 'tree-view'}, Children: [
            {Id: 211, PId: 21, Content: {Text: 'tree-view.component.html'}},
            {Id: 212, PId: 21, Content: {Text: 'tree-view.component.ts'}}
          ]
        },
        {
          Id: 22, PId: 2, Expanded: false, Content: {Text: 'Models'}, Children: [
            {Id: 221, PId: 22, Content: {Text: 'index.ts'}}
          ]
        },
      ]
    }
  ] as TreeItem[];

  SelectedItems(results: TreeItem[]) {
    console.log('Selected (raw)', results, 'Ids', results.map(x => x.Id));
  }
        

Customization

Custom icons, border and animation

Mail design

All Mail
Trash
Categories
Social
13
Updates
2,666
Forums
5,366
Promotions
842
History
  <TreeView [Mode]="'Single'" [Items]="Mail" (SelectedItems)="SelectedItems($event)"></TreeView>
        
  Mail: TreeItem [] = [
    {Id: 1, Content: {Text: 'All Mail', Icon: 'fa-solid fa-envelope'}},
    {Id: 2, Content: {Text: 'Trash', Icon: 'fa-solid fa-trash'}},
    {
      Id: 3, Content: {Text: 'Categories', Icon: 'fa-solid fa-folder'}, Children: [
        {Id: 31, PId: 3, Content: {Text: 'Social', Icon: 'fa-solid fa-user-group', Caption: '13'},},
        {Id: 32, PId: 3, Content: {Text: 'Updates', Icon: 'fa-solid fa-circle-info', Caption: '2,666'},},
        {Id: 33, PId: 3, Content: {Text: 'Forums', Icon: 'fa-solid fa-comments', Caption: '5,366'},},
        {Id: 34, PId: 3, Content: {Text: 'Promotions', Icon: 'fa-solid fa-tag', Caption: '842'},},
      ]
    },
    {Id: 4, Content: {Text: 'History', Icon: 'fa-solid fa-folder'}},
  ] as TreeItem[];
        

Disabled Item and Separator

One
Two
Tree

Four

Five
Six
    <TreeView [Mode]="'Single'" [Items]="Customized" (SelectedItems)="SelectedItems($event)"></TreeView>
        
  Disabled: TreeItem [] = [
    {Id: 1, Content: {Text: 'One'}, Children: [{Id: 11, Content: {Text: 'Two'}}, {Id: 12, Content: {Text: 'Tree'}}]},
    {Separator: true} as TreeItem,
    {
      Id: 2,
      Expanded: false, Disabled: true, Content: {Text: 'Four'}, Children: [{Content: {Text: 'NaN'}}]
    },
    {Separator: true} as TreeItem,
    {
      Id: 3, Content: {Text: 'Five'}, Children: [
        {
          Id: 31, PId: 3, Expanded: false, Content: {Text: 'Six'}, Children: [
            {Id: 311, PId: 31, Content: {Text: 'Seven'}},
            {Id: 312, PId: 31, Content: {Text: 'Eight'}}
          ]
        },
      ]
    }
  ] as TreeItem[];
        

Categories

Balkans Tours
Spain Tours
BUsb Tour
nY7I Tour
YLqt Tour
Dfh2 Tour
9MMV Tour
G4S5 Tour
dJWV Tour
klbP Tour
iElh Tour
rx54 Tour
Italy Tours
    <TreeView [Mode]="'Multiple'" [Items]="Categories" [Sort]="Sort"
              (SelectedItems)="SelectedItems($event)"></TreeView>
        
  Categories: TreeItem [] = this.FillCategories();
  Sort: boolean = false;

  FillCategories(): TreeItem[] {
    const cats: TreeItem[] = [];

    const Parents: any[] = [
      {Id: 1, Text: 'Balkans Tours'},
      {Id: 2, Text: 'Spain Tours'},
      {Id: 3, Text: 'Italy Tours'},
    ];

    Parents.forEach(x => cats.push({
      Id: x.Id,
      Content: {Text: x.Text,},
      Expanded: (x.Id == 2),
      Children: []
    } as unknown as TreeItem));

    for (let i = 10; i <= 30; i++) {
      let parentId = Math.floor(Math.random() * Parents.length) + 1;

      const parent = cats.find(x => x.Id === parentId);
      parent?.Children.push({Id: i, Content: {Text: this.Word(4) + ' Tour',}, PId: parentId} as TreeItem);
    }

    return cats;
  }