/** * @license * Copyright 2019 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ import {LitElement, html, css, unsafeCSS, PropertyValueMap} from 'lit'; import {customElement, property, queryAssignedNodes} from 'lit/decorators.js'; import { breakpoints } from '../../breakpoints'; /** * An example element. */ @customElement('iu-header-topbar') export class SiteHeaderTopbar extends LitElement { static override styles = css` :host{ background: var(--iu-color-black); height: 40px; display: none; align-items: center; font-size: 0.8125rem; } @media ${unsafeCSS(breakpoints.xl)} { :host{ display: flex; } } :host nav ul{ margin: 0; padding: 0; display: flex; list-style-type: none; } :host nav ul ::slotted(li:not(:last-child)){ margin-right: 20px; } :host a{ color: #fff; text-decoration: none; } :host iu-container{ display: flex; align-items: center; justify-content: space-between; margin-bottom: 0; } :host div{ display: flex; align-items: center; justify-content: space-between; } :host nav ul ::slotted(*){ margin-right: 20px; } :host nav ul ::slotted(.last){ margin-right: 0; } :host div svg{ width: 1.375rem; height: 2.25rem; display: block; } :host div a{ margin-left: 0.9375rem; } `; @property({type: Boolean}) i18n = false; @property({type: Boolean}) searchable = false; @queryAssignedNodes() private slottedElements?: NodeList; private getLastElement(){ if (!this.slottedElements) return; //prevents accessing undefined const slotted = Array.from(this.slottedElements).filter(el => el instanceof HTMLElement) as HTMLElement[]; if (slotted.length > 0) { slotted[slotted.length - 1].classList.add('last'); } } protected override firstUpdated() { this.getLastElement(); } override render() { return html` <iu-container> <nav role="navigation"> <ul> <slot></slot> </ul> </nav> <div> ${this.i18n && html`<a href="#">EN</a>`} ${this.searchable ? html`<a href="#"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 37"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.5 24a7.5 7.5 0 1 0 0-15 7.5 7.5 0 0 0 0 15Zm0 1a8.5 8.5 0 1 0 0-17 8.5 8.5 0 0 0 0 17Z" fill="currentColor"/><path fill-rule="evenodd" clip-rule="evenodd" d="m14.854 22.146 6.5 6.5-.707.708-6.5-6.5.707-.707Z" fill="currentColor"/></svg></a>` : ''} </div> </iu-container> `; } } declare global { interface HTMLElementTagNameMap { 'iu-header-topbar': SiteHeaderTopbar; } }