UNPKG

@dile/dile-menu-hamburger

Version:

A component to implement a full hamburger menu

89 lines (80 loc) 1.89 kB
import { html, css, LitElement } from "lit"; import '@dile/dile-app-drawer/dile-app-drawer.js'; import '@dile/dile-hamburger/dile-hamburger.js'; export class DileMenuHamburger extends LitElement { static get properties() { return { direction: { type: String, reflect: true }, opened: { type: Boolean, reflect: true }, hamburgerAlwaysVisible: { type: Boolean, reflect: true } }; } static get styles() { return css` :host { display: flex; align-items: center; } :host([hamburgerAlwaysVisible]) dile-hamburger { position: relative; z-index: 100020; } `; } constructor() { super(); this.direction = 'top'; this.opened = false; this.hamburgerAlwaysVisible = false; } firstUpdated() { this.drawer = this.shadowRoot.getElementById('drawer'); let menu = this.querySelector('[dile-cloak]'); if(menu) { menu.removeAttribute('dile-cloak'); } } updated(changedProperties) { if(changedProperties.has('opened')) { let theEvent = this.opened ? 'dile-menu-hamburger-opened' : 'dile-menu-hamburger-closed'; this.dispatchEvent(new CustomEvent(theEvent, { bubbles: true, composed: true, detail: { opened: this.opened, } })); } } render() { return html` <dile-hamburger @click="${this.toggle}" ?active="${this.opened}"></dile-hamburger> <dile-app-drawer id="drawer" ?opened="${this.opened}" direction="${this.direction}" @dile-app-drawer-closed="${this.close}" > <slot name="menu"></slot> </dile-app-drawer> `; } toggle() { this.opened = ! this.opened; } open() { this.opened = true; } close() { this.opened = false; } }