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

<app-load-spinner *ngIf="loading"></app-load-spinner>

<div class="m-3">
    <app-error [error]="error"></app-error>
</div>

<ng-container *ngIf="hasProbes">
    <div class="main-content flex-column d-flex justify-content-start align-items-start">
        <div *ngIf="!loading" class="d-flex flex-column align-self-stretch flex-fill">
            <app-error [error]="error"></app-error>

            <div *ngIf="hasProbes" class="row m-0 d-flex justify-content-around align-self-stretch flex-fill">
                <div class="col-8">
                    <app-details [query]="chatComponent.selectedQuery"></app-details>
                </div>

                <div class="col-4 p-0">
                    <app-chat #chatComponent [allProbes]="allProbes"></app-chat>
                </div>
            </div>
        </div>
    </div>
</ng-container>
