<!--
  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.
-->

<fims-layout-card-over title="{{ 'Report categories' | translate}}">
  <div layout-gt-xs="row" flex layout-align="center center">
    <div flex-gt-xs="50">
      <mat-nav-list>
        <h3 mat-subheader>Categories</h3>
        <a mat-list-item *ngFor="let category of categories$ | async" [routerLink]="['categories', category]" routerLinkActive="active">
          <h3 matLine>{{ category }}</h3>
          <mat-icon>chevron_right</mat-icon>
        </a>
      </mat-nav-list>
    </div>
    <div flex-gt-xs="50">
      <router-outlet></router-outlet>
    </div>
  </div>
</fims-layout-card-over>
