/**
 * @license
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed 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.
 */
import {html} from '@polymer/polymer/lib/utils/html-tag.js';

export const htmlTemplate = html`
  <style include="shared-styles">
    .searchIcon {
      display: none;
    }
    .searchIcon.showSearchIcon {
      display: inline-block;
    }
    iron-icon {
      margin: 0 var(--spacing-xs);
      vertical-align: top;
    }
    paper-input.borderless {
      border: none;
      padding: 0;
    }
    paper-input {
      background-color: var(--view-background-color);
      color: var(--primary-text-color);
      border: 1px solid var(--border-color);
      border-radius: var(--border-radius);
      padding: var(--spacing-s);
      --paper-input-container: {
        padding: 0;
      }
      --paper-input-container-input: {
        font-size: var(--font-size-normal);
        line-height: var(--line-height-normal);
      }
      /* This is a hack for not being able to set height:0 on the underline
           of a paper-input 2.2.3 element. All the underline fixes below only
           actually work in 3.x.x, so the height must be adjusted directly as
           a workaround until we are on Polymer 3. */
      height: var(--line-height-normal);
      --paper-input-container-underline-height: 0;
      --paper-input-container-underline-wrapper-height: 0;
      --paper-input-container-underline-focus-height: 0;
      --paper-input-container-underline-legacy-height: 0;
      --paper-input-container-underline: {
        height: 0;
        display: none;
      }
      --paper-input-container-underline-focus: {
        height: 0;
        display: none;
      }
      --paper-input-container-underline-disabled: {
        height: 0;
        display: none;
      }
    }
    paper-input.warnUncommitted {
      --paper-input-container-input: {
        color: var(--error-text-color);
        font-size: inherit;
      }
    }
  </style>
  <paper-input
    no-label-float=""
    id="input"
    class$="[[_computeClass(borderless)]]"
    disabled$="[[disabled]]"
    value="{{text}}"
    placeholder="[[placeholder]]"
    on-keydown="_handleKeydown"
    on-focus="_onInputFocus"
    on-blur="_onInputBlur"
    autocomplete="off"
  >
    <!-- prefix as attribute is required to for polymer 1 -->
    <div slot="prefix" prefix="">
      <iron-icon
        icon="gr-icons:search"
        class$="searchIcon [[_computeShowSearchIconClass(showSearchIcon)]]"
      >
      </iron-icon>
    </div>
  </paper-input>
  <gr-autocomplete-dropdown
    vertical-align="top"
    vertical-offset="[[verticalOffset]]"
    horizontal-align="left"
    id="suggestions"
    on-item-selected="_handleItemSelect"
    on-keydown="_handleKeydown"
    suggestions="[[_suggestions]]"
    role="listbox"
    index="[[_index]]"
    position-target="[[_inputElement]]"
  >
  </gr-autocomplete-dropdown>
`;
