<!--
Copyright (C) 2017 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="../../../behaviors/gr-tooltip-behavior/gr-tooltip-behavior.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-page-nav">
  <template>
    <style include="shared-styles">
      #nav {
        background-color: #f5f5f5;
        border: 1px solid #eee;
        border-top: none;
        height: 100%;
        position: absolute;
        top: 0;
        width: 14em;
      }
      #nav.pinned {
        position: fixed;
      }
      #nav ::content ul {
        padding: 1em 0;
      }
      #nav ::content li {
        border-bottom: 1px solid transparent;
        border-top: 1px solid transparent;
        padding: 0 2em;
      }
      #nav ::content .subsectionItem {
        padding-left: 3em;
      }
      #nav ::content .hideSubsection {
        display: none;
      }
      #nav ::content li.sectionTitle {
        padding: 0 2em 0 1.5em;
      }
      #nav ::content li.sectionTitle:not(:first-child) {
        margin-top: 1em;
      }
      #nav ::content .title {
        display: flex;
        font-weight: bold;
        margin: .4em 0;
      }
      #nav ::content .selected {
        background-color: #fff;
        border-bottom: 1px dotted #808080;
        border-top: 1px dotted #808080;
        font-weight: bold;
      }
      #nav ::content a {
        color: black;
        display: inline-block;
        margin: .4em 0;
      }
      @media only screen and (max-width: 53em) {
        #nav {
          display: none;
        }
      }
    </style>
    <nav id="nav">
      <content></content>
    </nav>
  </template>
  <script src="gr-page-nav.js"></script>
</dom-module>
