<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<mat-sidenav-container fxFill>
  <mat-sidenav
    #sidenav
    [mode]="isNarrowView ? 'over' : 'side'"
    [opened]="!isNarrowView"
    [disableClose]="!isNarrowView"
    class="mat-elevation-z4">
    <hi-cluster-list></hi-cluster-list>
  </mat-sidenav>
  <section fxFill>
    <router-outlet></router-outlet>
  </section>
</mat-sidenav-container>
<button mat-mini-fab [ngClass]="['toggle-button', sidenav.opened ? 'open' : 'close']" color="" (click)="toggleSidenav()">
  <mat-icon>chevron_{{ sidenav.opened ? 'left' : 'right' }}</mat-icon>
</button>
