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

<div layout="row">
  <mat-form-field layout-margin flex>
    <input matInput [placeholder]="title" [matAutocomplete]="auto" [formControl]="formControl">
    <mat-hint class="tc-red-600">
      <ng-content></ng-content>
    </mat-hint>
  </mat-form-field>
</div>

<mat-autocomplete #auto="matAutocomplete">
  <mat-option *ngFor="let account of accounts | async" [value]="account.identifier">
    {{ account.identifier }}({{account.name}})
  </mat-option>
</mat-autocomplete>
