import { HomeAssistant } from '@dermotduffy/custom-card-helpers'; import { CSSResultGroup, html, LitElement, TemplateResult, unsafeCSS } from 'lit'; import { customElement, property } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; import { styleMap } from 'lit/directives/style-map.js'; import { actionHandler } from '../../action-handler-directive.js'; import submenuStyle from '../../scss/submenu.scss'; import { hasAction, stopEventFromActivatingCardWideActions, } from '../../utils/action.js'; import { getEntityTitle } from '../../utils/ha'; import '../icon.js'; import { SubmenuInteraction, SubmenuItem } from './types.js'; @customElement('advanced-camera-card-submenu') export class AdvancedCameraCardSubmenu extends LitElement { @property({ attribute: false }) public hass?: HomeAssistant; @property({ attribute: false }) public items?: SubmenuItem[]; protected _renderItem(item: SubmenuItem): TemplateResult | void { if (!this.hass) { return; } const title = item.title ?? getEntityTitle(this.hass, item.entity); const style = styleMap(item.style || {}); return html` ) => { // Attach the item so ascendants have access to it. ev.detail.item = item; }} .actionHandler=${actionHandler({ allowPropagation: true, hasHold: hasAction(item.hold_action), hasDoubleClick: hasAction(item.double_tap_action), })} > ${title ?? ''} ${item.subtitle ? html`${item.subtitle}` : ''} `; } protected render(): TemplateResult { return html` ev.stopPropagation() } @click=${(ev: Event) => stopEventFromActivatingCardWideActions(ev)} > ${this.items?.map(this._renderItem.bind(this))} `; } static get styles(): CSSResultGroup { return unsafeCSS(submenuStyle); } } declare global { interface HTMLElementTagNameMap { 'advanced-camera-card-submenu': AdvancedCameraCardSubmenu; } }