| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {LitElement, html, css} from 'lit-element'; |
| import 'shared/typedef.js'; |
| |
| /** |
| * `<mr-tabs>` |
| * |
| * A Material Design tabs strip. https://material.io/components/tabs/ |
| * |
| */ |
| export class MrTabs extends LitElement { |
| /** @override */ |
| static get styles() { |
| return css` |
| ul { |
| display: flex; |
| list-style: none; |
| margin: 0; |
| padding: 0; |
| } |
| li { |
| color: var(--chops-choice-color); |
| } |
| li.selected { |
| color: var(--chops-active-choice-color); |
| } |
| li:hover { |
| background: var(--chops-primary-accent-bg); |
| color: var(--chops-active-choice-color); |
| } |
| a { |
| color: inherit; |
| text-decoration: none; |
| |
| display: inline-block; |
| line-height: 38px; |
| padding: 0 24px; |
| } |
| li.selected a { |
| border-bottom: solid 2px; |
| } |
| i.material-icons { |
| vertical-align: middle; |
| margin-right: 4px; |
| } |
| `; |
| } |
| |
| /** @override */ |
| render() { |
| return html` |
| <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> |
| <ul> |
| ${this.items.map(this._renderTab.bind(this))} |
| </ul> |
| `; |
| } |
| |
| /** |
| * Renders one tab. |
| * @param {MenuItem} item |
| * @param {number} index |
| * @return {TemplateResult} |
| */ |
| _renderTab(item, index) { |
| return html` |
| <li class=${index === this.selected ? 'selected' : ''}> |
| <a href=${item.url}> |
| <i class="material-icons" ?hidden=${!item.icon}> |
| ${item.icon} |
| </i> |
| ${item.text} |
| </a> |
| </li> |
| `; |
| } |
| |
| /** @override */ |
| static get properties() { |
| return { |
| items: {type: Array}, |
| selected: {type: Number}, |
| }; |
| } |
| |
| /** @override */ |
| constructor() { |
| super(); |
| |
| /** @type {Array<MenuItem>} */ |
| this.items = []; |
| this.selected = 0; |
| } |
| } |
| |
| customElements.define('mr-tabs', MrTabs); |