| // Copyright 2019 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'; |
| |
| /** |
| * `<chops-collapse>` displays a collapsible element. |
| * |
| */ |
| export class ChopsCollapse extends LitElement { |
| /** @override */ |
| static get properties() { |
| return { |
| opened: { |
| type: Boolean, |
| reflect: true, |
| }, |
| ariaHidden: { |
| attribute: 'aria-hidden', |
| type: Boolean, |
| reflect: true, |
| }, |
| }; |
| } |
| |
| /** @override */ |
| static get styles() { |
| return css` |
| :host, :host([hidden]) { |
| display: none; |
| } |
| :host([opened]) { |
| display: block; |
| } |
| `; |
| } |
| |
| /** @override */ |
| render() { |
| return html` |
| <slot></slot> |
| `; |
| } |
| |
| /** @override */ |
| constructor() { |
| super(); |
| |
| this.opened = false; |
| this.ariaHidden = true; |
| } |
| |
| /** @override */ |
| update(changedProperties) { |
| if (changedProperties.has('opened')) { |
| this.ariaHidden = !this.opened; |
| } |
| super.update(changedProperties); |
| } |
| } |
| customElements.define('chops-collapse', ChopsCollapse); |