<!--
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(--gr-button-background, #fff);
        --button-color: var(--gr-button-color, var(--color-link));
        display: inline-block;
        font-family: var(--font-family-bold);
        font-size: 12px;
        position: relative;
      }
      :host([hidden]) {
        display: none;
      }
      :host([no-uppercase]) paper-button {
        text-transform: none;
      }
      paper-button {
        /* paper-button sets this to anti-aliased, which appears different than
        roboto-medium elsewhere. */
        -webkit-font-smoothing: initial;
        align-items: center;
        background-color: var(--background-color);
        color: var(--button-color);
        display: flex;
        font-family: inherit;
        justify-content: center;
        margin: var(--margin, 0);
        min-width: var(--border, 0);
        padding: var(--padding, 5px 10px);
        @apply --gr-button;
      }
      paper-button:hover {
        background: linear-gradient(
          rgba(0, 0, 0, .12),
          rgba(0, 0, 0, .12)
        ), var(--background-color);
      }

      /* Styles for raised buttons specifically */
      :host([primary][raised]),
      :host([secondary][raised]) {
        --background-color: var(--color-link);
        --button-color: #fff;
      }

      /* Keep below color definition for primary/secondary so that this takes
       precedence when disabled. */
      :host([disabled]) {
        --background-color: #eaeaea;
        --button-color: #a8a8a8;
        cursor: default;
      }

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

      /* 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: #666;
      }
    </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>
