<!--
@license
Copyright (C) 2016 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.
-->

<link rel="import" href="/bower_components/polymer/polymer.html">

<link rel="import" href="../../../behaviors/gr-tooltip-behavior/gr-tooltip-behavior.html">
<link rel="import" href="../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.html">
<link rel="import" href="/bower_components/paper-button/paper-button.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-button">
  <template strip-whitespace>
    <style include="shared-styles">
      /* general styles for all buttons */
      :host {
        --background-color: var(--button-background-color, var(--default-button-background-color));
        --text-color: var(--default-button-text-color);
        display: inline-block;
        position: relative;
      }
      :host([hidden]) {
        display: none;
      }
      :host([no-uppercase]) paper-button {
        text-transform: none;
      }
      paper-button {
        /* The next lines contains a copy of paper-button style.
          Without a copy, the @apply works incorrectly with Polymer 2.
          @apply is deprecated and is not recommended to use. It is expected
          that @apply will be replaced with the ::part CSS pseudo-element.
          After replacecment copied lines can be removed.
        */
        @apply --layout-inline;
        @apply --layout-center-center;
        position: relative;
        box-sizing: border-box;
        min-width: 5.14em;
        margin: 0 0.29em;
        background: transparent;
        -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
        -webkit-tap-highlight-color: transparent;
        font: inherit;
        text-transform: uppercase;
        outline-width: 0;
        border-radius: 3px;
        -moz-user-select: none;
        -ms-user-select: none;
        -webkit-user-select: none;
        user-select: none;
        cursor: pointer;
        z-index: 0;
        padding: 0.7em 0.57em;

        @apply --paper-font-common-base;
        @apply --paper-button;
        /* End of copy*/

        /* paper-button sets this to anti-aliased, which appears different than
          bold font elsewhere on macOS. */
        -webkit-font-smoothing: initial;
        align-items: center;
        background-color: var(--background-color);
        color: var(--text-color);
        display: flex;
        font-family: inherit;
        justify-content: center;
        margin: var(--margin, 0);
        min-width: var(--border, 0);
        padding: var(--padding, 4px 8px);
        @apply --gr-button;
      }
      paper-button:hover {
        background: linear-gradient(
          rgba(0, 0, 0, .12),
          rgba(0, 0, 0, .12)
        ), var(--background-color);
      }

      :host([primary]) {
        --background-color: var(--primary-button-background-color);
        --text-color: var(--primary-button-text-color);
      }
      :host([link][primary]) {
        --text-color: var(--primary-button-background-color);
      }
      :host([secondary]) {
        --background-color: var(--secondary-button-text-color);
        --text-color: var(--secondary-button-background-color);
      }
      :host([link][secondary]) {
        --text-color: var(--secondary-button-text-color);
      }

      /* Keep below color definition for primary so that this takes precedence
        when disabled. */
      :host([disabled]) {
        --background-color: var(--table-subheader-background-color);
        --text-color: var(--deemphasized-text-color);
        cursor: default;
      }

      /* Styles for link buttons specifically */
      :host([link]) {
        --background-color: transparent;
        --margin: 0;
        --padding: 5px 4px;
      }
      :host([disabled][link]) {
        --background-color: transparent;
      }

      /* Styles for the optional down arrow */
      :host(:not([down-arrow])) .downArrow {
        display: none;
      }
      :host([down-arrow]) .downArrow {
        border-top: .36em solid #ccc;
        border-left: .36em solid transparent;
        border-right: .36em solid transparent;
        margin-bottom: .05em;
        margin-left: .5em;
        transition: border-top-color 200ms;
      }
      :host([down-arrow]) paper-button:hover .downArrow {
        border-top-color: var(--deemphasized-text-color);
      }
    </style>
    <paper-button
        raised="[[!link]]"
        disabled="[[_computeDisabled(disabled, loading)]]"
        tabindex="-1">
      <slot></slot>
      <i class="downArrow"></i>
    </paper-button>
  </template>
  <script src="gr-button.js"></script>
</dom-module>
