import { css, CSSResult, customElement, html, LitElement, property, TemplateResult, } from 'lit-element'; import { ClassInfo, classMap } from 'lit-html/directives/class-map'; import { Layout, Period } from '../types'; /** * Renders a Time Period selector with an input for a value and two arrows for step-chaning * the value up and down. */ @customElement('time-period') export class TimePeriodComponent extends LitElement { static readonly EVENT_TOGGLE = 'toggle'; @property() private period!: Period; @property() private mode!: Layout.HourMode; private get amClass(): ClassInfo { return { 'time-period': true, active: this.period === Period.AM }; } private get pmClass(): ClassInfo { return { 'time-period': true, active: this.period === Period.PM }; } render(): TemplateResult { return html`
${this.mode === 'single' ? this.renderSingle() : this.renderDouble()}
`; } onTimePeriodChange(): void { const event = new CustomEvent(TimePeriodComponent.EVENT_TOGGLE); this.dispatchEvent(event); } private renderSingle(): TemplateResult { return html`
${this.period}
`; } private renderDouble(): TemplateResult { return html`
AM
PM
`; } static get styles(): CSSResult { return css` .time-period-selector { padding: 0 8px; } .time-period { width: 30px; padding: var(--tpc-control-padding); background: var(--tpc-off-color); color: var(--tpc-text-color); text-align: center; font-size: 1em; cursor: pointer; } .time-period.active { background: var(--tpc-accent-color); } `; } }