import { CSSResultGroup, html, LitElement, TemplateResult, unsafeCSS } from 'lit'; import { customElement, property } from 'lit/decorators.js'; import { createRef, ref, Ref } from 'lit/directives/ref.js'; import { localize } from '../localize/localize'; import datePickerStyle from '../scss/date-picker.scss'; import { stopEventFromActivatingCardWideActions } from '../utils/action'; import { fireAdvancedCameraCardEvent } from '../utils/fire-advanced-camera-card-event'; import './icon'; export interface DatePickerEvent { date: Date | null; } @customElement('advanced-camera-card-date-picker') export class AdvancedCameraCardDatePicker extends LitElement { @property({ attribute: false }) public icon?: string; protected _refInput: Ref = createRef(); get value(): Date | null { return this._refInput.value?.value ? new Date(this._refInput.value.value) : null; } public reset(): void { if (this._refInput.value) { this._refInput.value.value = ''; } } protected render(): TemplateResult { const changed = () => { const value = this._refInput.value?.value; fireAdvancedCameraCardEvent(this, 'date-picker:change', { date: value ? new Date(value) : null, }); }; return html` changed()} @change=${() => changed()} /> { stopEventFromActivatingCardWideActions(ev); this._refInput.value?.showPicker(); }} > `; } static get styles(): CSSResultGroup { return unsafeCSS(datePickerStyle); } } declare global { interface HTMLElementTagNameMap { 'advanced-camera-card-date-picker': AdvancedCameraCardDatePicker; } }