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

<nav class="navbar navbar-dark bg-dark px-4 sticky-top">
    <span class="navbar-brand">
        <img alt="NLPCraft" class="logo" src="assets/logo.gif">
    </span>
    <div>
        <ul *ngIf="loggedIn" class="navbar-nav ml-auto">
            <li class="nav-item">
                <a (click)="logout()" class="nav-link" href="javascript:">
                    <fa-icon icon="sign-out-alt"></fa-icon>
                    Logout
                </a>
            </li>
        </ul>
    </div>
</nav>
