<!--
@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="../gr-button/gr-button.html">
<link rel="import" href="../../../styles/shared-styles.html">

<script src="../../../scripts/rootElement.js"></script>

<dom-module id="gr-alert">
  <template>
    <style include="shared-styles">
      /**
       * ALERT: DO NOT ADD TRANSITION PROPERTIES WITHOUT PROPERLY UNDERSTANDING
       * HOW THEY ARE USED IN THE CODE.
       */
      :host([toast]) {
        background-color: var(--tooltip-background-color);
        bottom: 1.25rem;
        border-radius: 3px;
        box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
        color: var(--view-background-color);
        left: 1.25rem;
        position: fixed;
        transform: translateY(5rem);
        transition: transform var(--gr-alert-transition-duration, 80ms) ease-out;
        z-index: 1000;
      }
      :host([shown]) {
        transform: translateY(0);
      }
      /**
       * NOTE: To avoid style being overwritten by outside of the shadow DOM
       * (as outside styles always win), .content-wrapper is introduced as a
       * wrapper around main content to have better encapsulation, styles that
       * may be affected by outside should be defined on it.
       * In this case, `padding:0px` is defined in main.css for all elements
       * with the universal selector: *.
       */
      .content-wrapper {
        padding: 1em 1.5em;
      }
      .text {
        color: var(--tooltip-text-color);
        display: inline-block;
        max-height: 10rem;
        max-width: 80vw;
        vertical-align: bottom;
        word-break: break-all;
      }
      .action {
        color: var(--link-color);
        font-weight: var(--font-weight-bold);
        margin-left: 1em;
        text-decoration: none;
        --gr-button: {
          padding: 0;
        }
      }
    </style>
    <div class="content-wrapper">
      <span class="text">[[text]]</span>
      <gr-button
          link
          class="action"
          hidden$="[[_hideActionButton]]"
          on-tap="_handleActionTap">[[actionText]]</gr-button>
    </div>
  </template>
  <script src="gr-alert.js"></script>
</dom-module>

