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

<form (ngSubmit)="onCancel()" #inputForm="ngForm">
  <h1 mat-dialog-title>{{ title }}</h1>
  <div mat-dialog-content>
    <section>
      {{ message }}
    </section>
  </div>
  <div mat-dialog-actions>
    <button mat-button type="submit" color="primary" [disabled]="!inputForm.form.valid">Cancel</button>
    <button mat-button type="button" (click)="onConfirm()">Continue</button>
  </div>
</form>
