From 1d24b83e5ccfa87165521d3ebe71e3806e04a346 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Wed, 27 Mar 2019 23:10:55 -0500 Subject: [PATCH] Align configs (#3019) * Align configurations * cleanup * fix imports --- .../lovelace/cards/hui-alarm-panel-card.ts | 20 +- .../lovelace/cards/hui-conditional-card.ts | 10 +- .../lovelace/cards/hui-empty-state-card.ts | 9 +- .../lovelace/cards/hui-entities-card.ts | 21 +- .../lovelace/cards/hui-entity-button-card.ts | 18 +- .../lovelace/cards/hui-entity-filter-card.ts | 9 +- src/panels/lovelace/cards/hui-error-card.ts | 10 +- src/panels/lovelace/cards/hui-gauge-card.ts | 30 +-- src/panels/lovelace/cards/hui-glance-card.ts | 28 +-- src/panels/lovelace/cards/hui-iframe-card.ts | 12 +- src/panels/lovelace/cards/hui-light-card.ts | 28 +-- src/panels/lovelace/cards/hui-map-card.ts | 13 +- .../lovelace/cards/hui-markdown-card.ts | 11 +- .../lovelace/cards/hui-media-control-card.js | 5 - src/panels/lovelace/cards/hui-picture-card.ts | 12 +- .../cards/hui-picture-elements-card.ts | 17 +- .../lovelace/cards/hui-picture-entity-card.ts | 19 +- .../lovelace/cards/hui-picture-glance-card.ts | 30 +-- .../lovelace/cards/hui-plant-status-card.ts | 17 +- src/panels/lovelace/cards/hui-sensor-card.ts | 29 +-- .../lovelace/cards/hui-shopping-list-card.ts | 10 +- src/panels/lovelace/cards/hui-stack-card.ts | 10 +- .../lovelace/cards/hui-thermostat-card.ts | 12 +- .../cards/hui-weather-forecast-card.js | 6 - src/panels/lovelace/cards/types.ts | 200 ++++++++++++++++++ .../common/generate-lovelace-config.ts | 4 +- .../components/hui-generic-entity-row.ts | 8 +- .../hui-alarm-panel-card-editor.ts | 6 +- .../hui-entities-card-editor.ts | 16 +- .../hui-entity-button-card-editor.ts | 14 +- .../config-elements/hui-gauge-card-editor.ts | 12 +- .../config-elements/hui-glance-card-editor.ts | 14 +- .../config-elements/hui-iframe-card-editor.ts | 6 +- .../config-elements/hui-light-card-editor.ts | 12 +- .../config-elements/hui-map-card-editor.ts | 8 +- .../hui-markdown-card-editor.ts | 6 +- .../hui-media-control-card-editor.ts | 6 +- .../hui-picture-card-editor.ts | 10 +- .../hui-plant-status-card-editor.ts | 12 +- .../config-elements/hui-sensor-card-editor.ts | 12 +- .../hui-shopping-list-editor.ts | 6 +- .../hui-thermostat-card-editor.ts | 12 +- .../hui-weather-forecast-card-editor.ts | 10 +- .../elements/hui-conditional-element.ts | 17 +- .../lovelace/elements/hui-icon-element.ts | 15 +- .../lovelace/elements/hui-image-element.ts | 19 +- .../elements/hui-service-button-element.ts | 12 +- .../elements/hui-state-badge-element.ts | 10 +- .../elements/hui-state-icon-element.ts | 13 +- .../elements/hui-state-label-element.ts | 15 +- src/panels/lovelace/elements/types.ts | 51 +++++ .../entity-rows/hui-group-entity-row.ts | 1 + .../hui-input-select-entity-row.ts | 1 + .../entity-rows/hui-text-entity-row.ts | 1 + .../entity-rows/hui-timer-entity-row.ts | 1 + 55 files changed, 463 insertions(+), 453 deletions(-) create mode 100644 src/panels/lovelace/cards/types.ts diff --git a/src/panels/lovelace/cards/hui-alarm-panel-card.ts b/src/panels/lovelace/cards/hui-alarm-panel-card.ts index 921c0f4640..8b99421f7e 100644 --- a/src/panels/lovelace/cards/hui-alarm-panel-card.ts +++ b/src/panels/lovelace/cards/hui-alarm-panel-card.ts @@ -10,17 +10,17 @@ import { } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; +import "../../../components/ha-card"; +import "../../../components/ha-label-badge"; +import "../components/hui-warning"; + import { LovelaceCard } from "../types"; import { HomeAssistant } from "../../../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { callAlarmAction, FORMAT_NUMBER, } from "../../../data/alarm_control_panel"; - -import "../../../components/ha-card"; -import "../../../components/ha-label-badge"; -import "../components/hui-warning"; +import { AlarmPanelCardConfig } from "./types"; const ICONS = { armed_away: "hass:shield-lock", @@ -34,12 +34,6 @@ const ICONS = { const BUTTONS = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "", "0", "clear"]; -export interface Config extends LovelaceCardConfig { - entity: string; - name?: string; - states?: string[]; -} - @customElement("hui-alarm-panel-card") class HuiAlarmPanelCard extends LitElement implements LovelaceCard { public static async getConfigElement() { @@ -53,7 +47,7 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: AlarmPanelCardConfig; @property() private _code?: string; @@ -69,7 +63,7 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard { : 8; } - public setConfig(config: Config): void { + public setConfig(config: AlarmPanelCardConfig): void { if ( !config || !config.entity || diff --git a/src/panels/lovelace/cards/hui-conditional-card.ts b/src/panels/lovelace/cards/hui-conditional-card.ts index c0c7e39d68..45907b3229 100644 --- a/src/panels/lovelace/cards/hui-conditional-card.ts +++ b/src/panels/lovelace/cards/hui-conditional-card.ts @@ -1,22 +1,16 @@ import { createCardElement } from "../common/create-card-element"; import { computeCardSize } from "../common/compute-card-size"; import { - Condition, checkConditionsMet, validateConditionalConfig, } from "../../lovelace/common/validate-condition"; import { HomeAssistant } from "../../../types"; import { LovelaceCard } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; - -interface Config extends LovelaceCardConfig { - card: LovelaceCardConfig; - conditions: Condition[]; -} +import { ConditionalCardConfig } from "./types"; class HuiConditionalCard extends HTMLElement implements LovelaceCard { private _hass?: HomeAssistant; - private _config?: Config; + private _config?: ConditionalCardConfig; private _card?: LovelaceCard; public setConfig(config) { diff --git a/src/panels/lovelace/cards/hui-empty-state-card.ts b/src/panels/lovelace/cards/hui-empty-state-card.ts index ed3553685f..4090fdffd8 100644 --- a/src/panels/lovelace/cards/hui-empty-state-card.ts +++ b/src/panels/lovelace/cards/hui-empty-state-card.ts @@ -11,13 +11,8 @@ import { import "@polymer/paper-card/paper-card"; import { LovelaceCard } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; - -export interface Config extends LovelaceCardConfig { - content: string; - title?: string; -} +import { EmptyStateCardConfig } from "./types"; @customElement("hui-empty-state-card") export class HuiEmptyStateCard extends LitElement implements LovelaceCard { @@ -27,7 +22,7 @@ export class HuiEmptyStateCard extends LitElement implements LovelaceCard { return 2; } - public setConfig(_config: Config): void { + public setConfig(_config: EmptyStateCardConfig): void { // tslint:disable-next-line } diff --git a/src/panels/lovelace/cards/hui-entities-card.ts b/src/panels/lovelace/cards/hui-entities-card.ts index 6b057ab09e..3ff8951ece 100644 --- a/src/panels/lovelace/cards/hui-entities-card.ts +++ b/src/panels/lovelace/cards/hui-entities-card.ts @@ -15,30 +15,15 @@ import "../components/hui-entities-toggle"; import { fireEvent } from "../../../common/dom/fire_event"; import { DOMAINS_HIDE_MORE_INFO } from "../../../common/const"; import { HomeAssistant } from "../../../types"; -import { EntityConfig, EntityRow } from "../entity-rows/types"; +import { EntityRow } from "../entity-rows/types"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { processConfigEntities } from "../common/process-config-entities"; import { createRowElement } from "../common/create-row-element"; +import { EntitiesCardConfig, EntitiesCardEntityConfig } from "./types"; + import computeDomain from "../../../common/entity/compute_domain"; import applyThemesOnElement from "../../../common/dom/apply_themes_on_element"; -export interface EntitiesCardEntityConfig extends EntityConfig { - type?: string; - secondary_info?: "entity-id" | "last-changed"; - action_name?: string; - service?: string; - service_data?: object; - url?: string; -} - -export interface EntitiesCardConfig extends LovelaceCardConfig { - show_header_toggle?: boolean; - title?: string; - entities: EntitiesCardEntityConfig[]; - theme?: string; -} - @customElement("hui-entities-card") class HuiEntitiesCard extends LitElement implements LovelaceCard { public static async getConfigElement(): Promise { diff --git a/src/panels/lovelace/cards/hui-entity-button-card.ts b/src/panels/lovelace/cards/hui-entity-button-card.ts index 25b79be422..5178f1d1ab 100644 --- a/src/panels/lovelace/cards/hui-entity-button-card.ts +++ b/src/panels/lovelace/cards/hui-entity-button-card.ts @@ -21,23 +21,13 @@ import computeStateDomain from "../../../common/entity/compute_state_domain"; import computeStateName from "../../../common/entity/compute_state_name"; import applyThemesOnElement from "../../../common/dom/apply_themes_on_element"; import computeDomain from "../../../common/entity/compute_domain"; + import { HomeAssistant, LightEntity } from "../../../types"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { LovelaceCardConfig, ActionConfig } from "../../../data/lovelace"; import { longPress } from "../common/directives/long-press-directive"; import { handleClick } from "../common/handle-click"; import { DOMAINS_TOGGLE } from "../../../common/const"; - -export interface Config extends LovelaceCardConfig { - entity: string; - name?: string; - snow_name?: boolean; - icon?: string; - show_icon?: boolean; - theme?: string; - tap_action?: ActionConfig; - hold_action?: ActionConfig; -} +import { EntityButtonCardConfig } from "./types"; @customElement("hui-entity-button-card") class HuiEntityButtonCard extends LitElement implements LovelaceCard { @@ -57,13 +47,13 @@ class HuiEntityButtonCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: EntityButtonCardConfig; public getCardSize(): number { return 2; } - public setConfig(config: Config): void { + public setConfig(config: EntityButtonCardConfig): void { if (!isValidEntityId(config.entity)) { throw new Error("Invalid Entity"); } diff --git a/src/panels/lovelace/cards/hui-entity-filter-card.ts b/src/panels/lovelace/cards/hui-entity-filter-card.ts index 10126c2df2..15b8636224 100644 --- a/src/panels/lovelace/cards/hui-entity-filter-card.ts +++ b/src/panels/lovelace/cards/hui-entity-filter-card.ts @@ -4,14 +4,7 @@ import { LovelaceCard } from "../types"; import { LovelaceCardConfig } from "../../../data/lovelace"; import { EntityConfig } from "../entity-rows/types"; import { HomeAssistant } from "../../../types"; - -export interface EntityFilterCardConfig extends LovelaceCardConfig { - type: "entity-filter"; - entities: Array; - state_filter: string[]; - card: Partial; - show_empty?: boolean; -} +import { EntityFilterCardConfig } from "./types"; class EntityFilterCard extends HTMLElement implements LovelaceCard { public isPanel?: boolean; diff --git a/src/panels/lovelace/cards/hui-error-card.ts b/src/panels/lovelace/cards/hui-error-card.ts index 946f782a79..62bbfe4548 100644 --- a/src/panels/lovelace/cards/hui-error-card.ts +++ b/src/panels/lovelace/cards/hui-error-card.ts @@ -11,11 +11,7 @@ import { import { LovelaceCard } from "../types"; import { LovelaceCardConfig } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; - -interface Config extends LovelaceCardConfig { - error: string; - origConfig: LovelaceCardConfig; -} +import { ErrorCardConfig } from "./types"; export const createErrorCardElement = (config) => { const el = document.createElement("hui-error-card"); @@ -33,13 +29,13 @@ export const createErrorCardConfig = (error, origConfig) => ({ export class HuiErrorCard extends LitElement implements LovelaceCard { public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: ErrorCardConfig; public getCardSize(): number { return 4; } - public setConfig(config: Config): void { + public setConfig(config: ErrorCardConfig): void { this._config = config; } diff --git a/src/panels/lovelace/cards/hui-gauge-card.ts b/src/panels/lovelace/cards/hui-gauge-card.ts index 96fcf946fe..677d8378d0 100644 --- a/src/panels/lovelace/cards/hui-gauge-card.ts +++ b/src/panels/lovelace/cards/hui-gauge-card.ts @@ -13,31 +13,15 @@ import { styleMap } from "lit-html/directives/style-map"; import "../../../components/ha-card"; import "../components/hui-warning"; -import { LovelaceCardConfig } from "../../../data/lovelace"; -import { HomeAssistant } from "../../../types"; -import { fireEvent } from "../../../common/dom/fire_event"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { LovelaceCard, LovelaceCardEditor } from "../types"; - import isValidEntityId from "../../../common/entity/valid_entity_id"; import applyThemesOnElement from "../../../common/dom/apply_themes_on_element"; import computeStateName from "../../../common/entity/compute_state_name"; -export interface SeverityConfig { - green?: number; - yellow?: number; - red?: number; -} - -export interface Config extends LovelaceCardConfig { - entity: string; - name?: string; - unit?: string; - min?: number; - max?: number; - severity?: SeverityConfig; - theme?: string; -} +import { HomeAssistant } from "../../../types"; +import { fireEvent } from "../../../common/dom/fire_event"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { LovelaceCard, LovelaceCardEditor } from "../types"; +import { GaugeCardConfig } from "./types"; export const severityMap = { red: "var(--label-badge-red)", @@ -58,7 +42,7 @@ class HuiGaugeCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: GaugeCardConfig; private _updated?: boolean; @@ -66,7 +50,7 @@ class HuiGaugeCard extends LitElement implements LovelaceCard { return 2; } - public setConfig(config: Config): void { + public setConfig(config: GaugeCardConfig): void { if (!config || !config.entity) { throw new Error("Invalid card configuration"); } diff --git a/src/panels/lovelace/cards/hui-glance-card.ts b/src/panels/lovelace/cards/hui-glance-card.ts index 8ec574c234..21dd867d9f 100644 --- a/src/panels/lovelace/cards/hui-glance-card.ts +++ b/src/panels/lovelace/cards/hui-glance-card.ts @@ -10,14 +10,6 @@ import { } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; -import { HomeAssistant } from "../../../types"; -import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { LovelaceCardConfig, ActionConfig } from "../../../data/lovelace"; -import { longPress } from "../common/directives/long-press-directive"; -import { EntityConfig } from "../entity-rows/types"; -import { processConfigEntities } from "../common/process-config-entities"; -import { handleClick } from "../common/handle-click"; - import computeStateDisplay from "../../../common/entity/compute_state_display"; import computeStateName from "../../../common/entity/compute_state_name"; import applyThemesOnElement from "../../../common/dom/apply_themes_on_element"; @@ -27,20 +19,12 @@ import "../../../components/ha-card"; import "../../../components/ha-icon"; import "../components/hui-warning-element"; -export interface ConfigEntity extends EntityConfig { - tap_action?: ActionConfig; - hold_action?: ActionConfig; -} - -export interface GlanceCardConfig extends LovelaceCardConfig { - show_name?: boolean; - show_state?: boolean; - show_icon?: boolean; - title?: string; - theme?: string; - entities: ConfigEntity[]; - columns?: number; -} +import { HomeAssistant } from "../../../types"; +import { LovelaceCard, LovelaceCardEditor } from "../types"; +import { longPress } from "../common/directives/long-press-directive"; +import { processConfigEntities } from "../common/process-config-entities"; +import { handleClick } from "../common/handle-click"; +import { GlanceCardConfig, ConfigEntity } from "./types"; @customElement("hui-glance-card") export class HuiGlanceCard extends LitElement implements LovelaceCard { diff --git a/src/panels/lovelace/cards/hui-iframe-card.ts b/src/panels/lovelace/cards/hui-iframe-card.ts index e49e149d47..b74dc68cdb 100644 --- a/src/panels/lovelace/cards/hui-iframe-card.ts +++ b/src/panels/lovelace/cards/hui-iframe-card.ts @@ -11,14 +11,8 @@ import { import "../../../components/ha-card"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { styleMap } from "lit-html/directives/style-map"; - -export interface Config extends LovelaceCardConfig { - aspect_ratio?: string; - title?: string; - url: string; -} +import { IframeCardConfig } from "./types"; @customElement("hui-iframe-card") export class HuiIframeCard extends LitElement implements LovelaceCard { @@ -30,7 +24,7 @@ export class HuiIframeCard extends LitElement implements LovelaceCard { return { url: "https://www.home-assistant.io", aspect_ratio: "50%" }; } - @property() protected _config?: Config; + @property() protected _config?: IframeCardConfig; public getCardSize(): number { if (!this._config) { @@ -42,7 +36,7 @@ export class HuiIframeCard extends LitElement implements LovelaceCard { return 1 + aspectRatio / 25; } - public setConfig(config: Config): void { + public setConfig(config: IframeCardConfig): void { if (!config.url) { throw new Error("URL required"); } diff --git a/src/panels/lovelace/cards/hui-light-card.ts b/src/panels/lovelace/cards/hui-light-card.ts index 46ed51c616..9618e4a3bf 100644 --- a/src/panels/lovelace/cards/hui-light-card.ts +++ b/src/panels/lovelace/cards/hui-light-card.ts @@ -8,15 +8,6 @@ import { } from "lit-element"; import "@polymer/paper-icon-button/paper-icon-button"; -import { fireEvent } from "../../../common/dom/fire_event"; -import { styleMap } from "lit-html/directives/style-map"; -import { HomeAssistant, LightEntity } from "../../../types"; -import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { loadRoundslider } from "../../../resources/jquery.roundslider.ondemand"; -import { toggleEntity } from "../common/entity/toggle-entity"; - import stateIcon from "../../../common/entity/state_icon"; import computeStateName from "../../../common/entity/compute_state_name"; import applyThemesOnElement from "../../../common/dom/apply_themes_on_element"; @@ -25,6 +16,15 @@ import "../../../components/ha-card"; import "../../../components/ha-icon"; import "../components/hui-warning"; +import { fireEvent } from "../../../common/dom/fire_event"; +import { styleMap } from "lit-html/directives/style-map"; +import { HomeAssistant, LightEntity } from "../../../types"; +import { LovelaceCard, LovelaceCardEditor } from "../types"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { loadRoundslider } from "../../../resources/jquery.roundslider.ondemand"; +import { toggleEntity } from "../common/entity/toggle-entity"; +import { LightCardConfig } from "./types"; + const lightConfig = { radius: 80, step: 1, @@ -40,12 +40,6 @@ const lightConfig = { animation: false, }; -export interface Config extends LovelaceCardConfig { - entity: string; - name?: string; - theme?: string; -} - @customElement("hui-light-card") export class HuiLightCard extends LitElement implements LovelaceCard { public static async getConfigElement(): Promise { @@ -58,7 +52,7 @@ export class HuiLightCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: LightCardConfig; @property() private _roundSliderStyle?: TemplateResult; @@ -70,7 +64,7 @@ export class HuiLightCard extends LitElement implements LovelaceCard { return 2; } - public setConfig(config: Config): void { + public setConfig(config: LightCardConfig): void { if (!config.entity || config.entity.split(".")[0] !== "light") { throw new Error("Specify an entity from within the light domain."); } diff --git a/src/panels/lovelace/cards/hui-map-card.ts b/src/panels/lovelace/cards/hui-map-card.ts index b56c064de7..227304da45 100644 --- a/src/panels/lovelace/cards/hui-map-card.ts +++ b/src/panels/lovelace/cards/hui-map-card.ts @@ -21,20 +21,13 @@ import computeStateDomain from "../../../common/entity/compute_state_domain"; import computeStateName from "../../../common/entity/compute_state_name"; import debounce from "../../../common/util/debounce"; import parseAspectRatio from "../../../common/util/parse-aspect-ratio"; -import { HomeAssistant } from "../../../types"; import computeDomain from "../../../common/entity/compute_domain"; + +import { HomeAssistant } from "../../../types"; import { LovelaceCard } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { EntityConfig } from "../entity-rows/types"; import { processConfigEntities } from "../common/process-config-entities"; - -export interface MapCardConfig extends LovelaceCardConfig { - title: string; - aspect_ratio: string; - default_zoom?: number; - entities?: Array; - geo_location_sources?: string[]; -} +import { MapCardConfig } from "./types"; @customElement("hui-map-card") class HuiMapCard extends LitElement implements LovelaceCard { diff --git a/src/panels/lovelace/cards/hui-markdown-card.ts b/src/panels/lovelace/cards/hui-markdown-card.ts index 9f66d23952..35a92d9231 100644 --- a/src/panels/lovelace/cards/hui-markdown-card.ts +++ b/src/panels/lovelace/cards/hui-markdown-card.ts @@ -13,12 +13,7 @@ import "../../../components/ha-card"; import "../../../components/ha-markdown"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; - -export interface Config extends LovelaceCardConfig { - content: string; - title?: string; -} +import { MarkdownCardConfig } from "./types"; @customElement("hui-markdown-card") export class HuiMarkdownCard extends LitElement implements LovelaceCard { @@ -31,13 +26,13 @@ export class HuiMarkdownCard extends LitElement implements LovelaceCard { return { content: " " }; } - @property() private _config?: Config; + @property() private _config?: MarkdownCardConfig; public getCardSize(): number { return this._config!.content.split("\n").length; } - public setConfig(config: Config): void { + public setConfig(config: MarkdownCardConfig): void { if (!config.content) { throw new Error("Invalid Configuration: Content Required"); } diff --git a/src/panels/lovelace/cards/hui-media-control-card.js b/src/panels/lovelace/cards/hui-media-control-card.js index dc78585aa4..3d38b9114f 100644 --- a/src/panels/lovelace/cards/hui-media-control-card.js +++ b/src/panels/lovelace/cards/hui-media-control-card.js @@ -2,11 +2,6 @@ import "../../../cards/ha-media_player-card"; import LegacyWrapperCard from "./hui-legacy-wrapper-card"; -// should be interface when converted to TS -export const Config = { - entity: "", -}; - class HuiMediaControlCard extends LegacyWrapperCard { static async getConfigElement() { await import(/* webpackChunkName: "hui-media-control-card-editor" */ "../editor/config-elements/hui-media-control-card-editor"); diff --git a/src/panels/lovelace/cards/hui-picture-card.ts b/src/panels/lovelace/cards/hui-picture-card.ts index ac2b0128bb..4d6c4fda48 100644 --- a/src/panels/lovelace/cards/hui-picture-card.ts +++ b/src/panels/lovelace/cards/hui-picture-card.ts @@ -11,17 +11,11 @@ import { import "../../../components/ha-card"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { LovelaceCardConfig, ActionConfig } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; import { classMap } from "lit-html/directives/class-map"; import { handleClick } from "../common/handle-click"; import { longPress } from "../common/directives/long-press-directive"; - -export interface Config extends LovelaceCardConfig { - image?: string; - tap_action?: ActionConfig; - hold_action?: ActionConfig; -} +import { PictureCardConfig } from "./types"; @customElement("hui-picture-card") export class HuiPictureCard extends LitElement implements LovelaceCard { @@ -40,13 +34,13 @@ export class HuiPictureCard extends LitElement implements LovelaceCard { public hass?: HomeAssistant; - @property() protected _config?: Config; + @property() protected _config?: PictureCardConfig; public getCardSize(): number { return 3; } - public setConfig(config: Config): void { + public setConfig(config: PictureCardConfig): void { if (!config || !config.image) { throw new Error("Invalid Configuration: 'image' required"); } diff --git a/src/panels/lovelace/cards/hui-picture-elements-card.ts b/src/panels/lovelace/cards/hui-picture-elements-card.ts index 9f4ec65730..0aa673df83 100644 --- a/src/panels/lovelace/cards/hui-picture-elements-card.ts +++ b/src/panels/lovelace/cards/hui-picture-elements-card.ts @@ -9,25 +9,14 @@ import { } from "lit-element"; import { createStyledHuiElement } from "./picture-elements/create-styled-hui-element"; - import { LovelaceCard } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; import { LovelaceElementConfig, LovelaceElement } from "../elements/types"; - -interface Config extends LovelaceCardConfig { - title?: string; - image?: string; - camera_image?: string; - state_image?: {}; - aspect_ratio?: string; - entity?: string; - elements: LovelaceElementConfig[]; -} +import { PictureElementsCardConfig } from "./types"; @customElement("hui-picture-elements-card") class HuiPictureElementsCard extends LitElement implements LovelaceCard { - @property() private _config?: Config; + @property() private _config?: PictureElementsCardConfig; private _hass?: HomeAssistant; @@ -43,7 +32,7 @@ class HuiPictureElementsCard extends LitElement implements LovelaceCard { return 4; } - public setConfig(config: Config): void { + public setConfig(config: PictureElementsCardConfig): void { if (!config) { throw new Error("Invalid Configuration"); } else if ( diff --git a/src/panels/lovelace/cards/hui-picture-entity-card.ts b/src/panels/lovelace/cards/hui-picture-entity-card.ts index 9a2334f923..a65526e901 100644 --- a/src/panels/lovelace/cards/hui-picture-entity-card.ts +++ b/src/panels/lovelace/cards/hui-picture-entity-card.ts @@ -20,36 +20,23 @@ import computeStateName from "../../../common/entity/compute_state_name"; import { longPress } from "../common/directives/long-press-directive"; import { HomeAssistant } from "../../../types"; -import { LovelaceCardConfig, ActionConfig } from "../../../data/lovelace"; import { LovelaceCard } from "../types"; import { handleClick } from "../common/handle-click"; import { UNAVAILABLE } from "../../../data/entity"; import { hasConfigOrEntityChanged } from "../common/has-changed"; - -interface Config extends LovelaceCardConfig { - entity: string; - name?: string; - image?: string; - camera_image?: string; - state_image?: {}; - aspect_ratio?: string; - tap_action?: ActionConfig; - hold_action?: ActionConfig; - show_name?: boolean; - show_state?: boolean; -} +import { PictureEntityCardConfig } from "./types"; @customElement("hui-picture-entity-card") class HuiPictureEntityCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: PictureEntityCardConfig; public getCardSize(): number { return 3; } - public setConfig(config: Config): void { + public setConfig(config: PictureEntityCardConfig): void { if (!config || !config.entity) { throw new Error("Invalid Configuration: 'entity' required"); } diff --git a/src/panels/lovelace/cards/hui-picture-glance-card.ts b/src/panels/lovelace/cards/hui-picture-glance-card.ts index f2de5b80e5..0fb78c5298 100644 --- a/src/panels/lovelace/cards/hui-picture-glance-card.ts +++ b/src/panels/lovelace/cards/hui-picture-glance-card.ts @@ -10,13 +10,6 @@ import { } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; -import { DOMAINS_TOGGLE } from "../../../common/const"; -import { LovelaceCard } from "../types"; -import { LovelaceCardConfig, ActionConfig } from "../../../data/lovelace"; -import { EntityConfig } from "../entity-rows/types"; -import { HomeAssistant } from "../../../types"; -import { longPress } from "../common/directives/long-press-directive"; -import { processConfigEntities } from "../common/process-config-entities"; import computeStateDisplay from "../../../common/entity/compute_state_display"; import computeStateName from "../../../common/entity/compute_state_name"; import computeDomain from "../../../common/entity/compute_domain"; @@ -27,29 +20,24 @@ import "../../../components/ha-icon"; import "../components/hui-image"; import "../components/hui-warning-element"; +import { DOMAINS_TOGGLE } from "../../../common/const"; +import { LovelaceCard } from "../types"; +import { EntityConfig } from "../entity-rows/types"; +import { HomeAssistant } from "../../../types"; +import { longPress } from "../common/directives/long-press-directive"; +import { processConfigEntities } from "../common/process-config-entities"; import { handleClick } from "../common/handle-click"; import { fireEvent } from "../../../common/dom/fire_event"; import { toggleEntity } from "../common/entity/toggle-entity"; +import { PictureGlanceCardConfig } from "./types"; const STATES_OFF = new Set(["closed", "locked", "not_home", "off"]); -interface Config extends LovelaceCardConfig { - entities: EntityConfig[]; - title?: string; - image?: string; - camera_image?: string; - state_image?: {}; - aspect_ratio?: string; - entity?: string; - tap_action?: ActionConfig; - hold_action?: ActionConfig; -} - @customElement("hui-picture-glance-card") class HuiPictureGlanceCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: PictureGlanceCardConfig; private _entitiesDialog?: EntityConfig[]; @@ -59,7 +47,7 @@ class HuiPictureGlanceCard extends LitElement implements LovelaceCard { return 3; } - public setConfig(config: Config): void { + public setConfig(config: PictureGlanceCardConfig): void { if ( !config || !config.entities || diff --git a/src/panels/lovelace/cards/hui-plant-status-card.ts b/src/panels/lovelace/cards/hui-plant-status-card.ts index 80b7fa03bd..239051374c 100644 --- a/src/panels/lovelace/cards/hui-plant-status-card.ts +++ b/src/panels/lovelace/cards/hui-plant-status-card.ts @@ -8,18 +8,18 @@ import { customElement, PropertyValues, } from "lit-element"; +import { HassEntity } from "home-assistant-js-websocket"; import "../../../components/ha-card"; import "../../../components/ha-icon"; -import { HassEntity } from "home-assistant-js-websocket"; import computeStateName from "../../../common/entity/compute_state_name"; import { LovelaceCardEditor, LovelaceCard } from "../types"; import { HomeAssistant } from "../../../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { fireEvent } from "../../../common/dom/fire_event"; import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { PlantStatusCardConfig, PlantAttributeTarget } from "./types"; const SENSORS = { moisture: "hass:water", @@ -29,15 +29,6 @@ const SENSORS = { battery: "hass:battery", }; -export interface PlantAttributeTarget extends EventTarget { - value?: string; -} - -export interface PlantStatusConfig extends LovelaceCardConfig { - name?: string; - entity: string; -} - @customElement("hui-plant-status-card") class HuiPlantStatusCard extends LitElement implements LovelaceCard { public static async getConfigElement(): Promise { @@ -51,13 +42,13 @@ class HuiPlantStatusCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; - @property() private _config?: PlantStatusConfig; + @property() private _config?: PlantStatusCardConfig; public getCardSize(): number { return 3; } - public setConfig(config: PlantStatusConfig): void { + public setConfig(config: PlantStatusCardConfig): void { if (!config.entity || config.entity.split(".")[0] !== "plant") { throw new Error("Specify an entity from within the plant domain."); } diff --git a/src/panels/lovelace/cards/hui-sensor-card.ts b/src/panels/lovelace/cards/hui-sensor-card.ts index ff6f980565..76bac76fe4 100644 --- a/src/panels/lovelace/cards/hui-sensor-card.ts +++ b/src/panels/lovelace/cards/hui-sensor-card.ts @@ -11,13 +11,6 @@ import { } from "lit-element"; import "@polymer/paper-spinner/paper-spinner"; -import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; -import { HomeAssistant } from "../../../types"; -import { fireEvent } from "../../../common/dom/fire_event"; -import { fetchRecent } from "../../../data/history"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; - import applyThemesOnElement from "../../../common/dom/apply_themes_on_element"; import computeStateName from "../../../common/entity/compute_state_name"; import stateIcon from "../../../common/entity/state_icon"; @@ -26,6 +19,13 @@ import "../../../components/ha-card"; import "../../../components/ha-icon"; import "../components/hui-warning"; +import { LovelaceCard, LovelaceCardEditor } from "../types"; +import { HomeAssistant } from "../../../types"; +import { fireEvent } from "../../../common/dom/fire_event"; +import { fetchRecent } from "../../../data/history"; +import { SensorCardConfig } from "./types"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; + const midPoint = ( _Ax: number, _Ay: number, @@ -138,17 +138,6 @@ const coordinates = ( return calcPoints(history, hours, width, detail, min, max); }; -export interface Config extends LovelaceCardConfig { - entity: string; - name?: string; - icon?: string; - graph?: string; - unit?: string; - detail?: number; - theme?: string; - hours_to_show?: number; -} - @customElement("hui-sensor-card") class HuiSensorCard extends LitElement implements LovelaceCard { public static async getConfigElement(): Promise { @@ -162,13 +151,13 @@ class HuiSensorCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: SensorCardConfig; @property() private _history?: any; private _date?: Date; - public setConfig(config: Config): void { + public setConfig(config: SensorCardConfig): void { if (!config.entity || config.entity.split(".")[0] !== "sensor") { throw new Error("Specify an entity from within the sensor domain."); } diff --git a/src/panels/lovelace/cards/hui-shopping-list-card.ts b/src/panels/lovelace/cards/hui-shopping-list-card.ts index 7eecc139a7..10f391e6aa 100644 --- a/src/panels/lovelace/cards/hui-shopping-list-card.ts +++ b/src/panels/lovelace/cards/hui-shopping-list-card.ts @@ -16,7 +16,6 @@ import "../../../components/ha-icon"; import { HomeAssistant } from "../../../types"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { fetchItems, updateItem, @@ -24,10 +23,7 @@ import { clearItems, addItem, } from "../../../data/shopping-list"; - -export interface Config extends LovelaceCardConfig { - title?: string; -} +import { ShoppingListCardConfig } from "./types"; @customElement("hui-shopping-list-card") class HuiShoppingListCard extends LitElement implements LovelaceCard { @@ -42,7 +38,7 @@ class HuiShoppingListCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: ShoppingListCardConfig; @property() private _uncheckedItems?: ShoppingListItem[]; @@ -54,7 +50,7 @@ class HuiShoppingListCard extends LitElement implements LovelaceCard { return (this._config ? (this._config.title ? 1 : 0) : 0) + 3; } - public setConfig(config: Config): void { + public setConfig(config: ShoppingListCardConfig): void { this._config = config; this._uncheckedItems = []; this._checkedItems = []; diff --git a/src/panels/lovelace/cards/hui-stack-card.ts b/src/panels/lovelace/cards/hui-stack-card.ts index c3fdd18ba6..b2f6d17034 100644 --- a/src/panels/lovelace/cards/hui-stack-card.ts +++ b/src/panels/lovelace/cards/hui-stack-card.ts @@ -1,14 +1,10 @@ import { html, LitElement, TemplateResult } from "lit-element"; import { createCardElement } from "../common/create-card-element"; - import { LovelaceCard } from "../types"; import { LovelaceCardConfig } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; - -interface Config extends LovelaceCardConfig { - cards: LovelaceCardConfig[]; -} +import { StackCardConfig } from "./types"; export abstract class HuiStackCard extends LitElement implements LovelaceCard { static get properties() { @@ -29,12 +25,12 @@ export abstract class HuiStackCard extends LitElement implements LovelaceCard { } } protected _cards?: LovelaceCard[]; - private _config?: Config; + private _config?: StackCardConfig; private _hass?: HomeAssistant; public abstract getCardSize(): number; - public setConfig(config: Config): void { + public setConfig(config: StackCardConfig): void { if (!config || !config.cards || !Array.isArray(config.cards)) { throw new Error("Card config incorrect"); } diff --git a/src/panels/lovelace/cards/hui-thermostat-card.ts b/src/panels/lovelace/cards/hui-thermostat-card.ts index 74bec1a21f..a6af4caf24 100644 --- a/src/panels/lovelace/cards/hui-thermostat-card.ts +++ b/src/panels/lovelace/cards/hui-thermostat-card.ts @@ -19,10 +19,10 @@ import computeStateName from "../../../common/entity/compute_state_name"; import { hasConfigOrEntityChanged } from "../common/has-changed"; import { HomeAssistant, ClimateEntity } from "../../../types"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { loadRoundslider } from "../../../resources/jquery.roundslider.ondemand"; import { UNIT_F } from "../../../common/const"; import { fireEvent } from "../../../common/dom/fire_event"; +import { ThermostatCardConfig } from "./types"; const thermostatConfig = { radius: 150, @@ -47,12 +47,6 @@ const modeIcons = { idle: "hass:power-sleep", }; -export interface Config extends LovelaceCardConfig { - entity: string; - theme?: string; - name?: string; -} - @customElement("hui-thermostat-card") export class HuiThermostatCard extends LitElement implements LovelaceCard { public static async getConfigElement(): Promise { @@ -66,7 +60,7 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: ThermostatCardConfig; @property() private _roundSliderStyle?: TemplateResult; @@ -82,7 +76,7 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard { return 4; } - public setConfig(config: Config): void { + public setConfig(config: ThermostatCardConfig): void { if (!config.entity || config.entity.split(".")[0] !== "climate") { throw new Error("Specify an entity from within the climate domain."); } diff --git a/src/panels/lovelace/cards/hui-weather-forecast-card.js b/src/panels/lovelace/cards/hui-weather-forecast-card.js index 0ef2b8c2c2..9c05fdc2c9 100644 --- a/src/panels/lovelace/cards/hui-weather-forecast-card.js +++ b/src/panels/lovelace/cards/hui-weather-forecast-card.js @@ -2,12 +2,6 @@ import "../../../cards/ha-weather-card"; import LegacyWrapperCard from "./hui-legacy-wrapper-card"; -// should be interface when converted to TS -export const Config = { - entity: "", - name: "", -}; - class HuiWeatherForecastCard extends LegacyWrapperCard { static async getConfigElement() { await import(/* webpackChunkName: "hui-weather-forecast-card-editor" */ "../editor/config-elements/hui-weather-forecast-card-editor"); diff --git a/src/panels/lovelace/cards/types.ts b/src/panels/lovelace/cards/types.ts new file mode 100644 index 0000000000..6d8820b2fd --- /dev/null +++ b/src/panels/lovelace/cards/types.ts @@ -0,0 +1,200 @@ +import { LovelaceCardConfig, ActionConfig } from "../../../data/lovelace"; +import { Condition } from "../common/validate-condition"; +import { EntityConfig } from "../entity-rows/types"; +import { LovelaceElementConfig } from "../elements/types"; + +export interface AlarmPanelCardConfig extends LovelaceCardConfig { + entity: string; + name?: string; + states?: string[]; +} + +export interface ConditionalCardConfig extends LovelaceCardConfig { + card: LovelaceCardConfig; + conditions: Condition[]; +} + +export interface EmptyStateCardConfig extends LovelaceCardConfig { + content: string; + title?: string; +} + +export interface EntitiesCardEntityConfig extends EntityConfig { + type?: string; + secondary_info?: "entity-id" | "last-changed"; + action_name?: string; + service?: string; + service_data?: object; + url?: string; +} + +export interface EntitiesCardConfig extends LovelaceCardConfig { + show_header_toggle?: boolean; + title?: string; + entities: EntitiesCardEntityConfig[]; + theme?: string; +} + +export interface EntityButtonCardConfig extends LovelaceCardConfig { + entity: string; + name?: string; + snow_name?: boolean; + icon?: string; + show_icon?: boolean; + theme?: string; + tap_action?: ActionConfig; + hold_action?: ActionConfig; +} + +export interface EntityFilterCardConfig extends LovelaceCardConfig { + type: "entity-filter"; + entities: Array; + state_filter: string[]; + card: Partial; + show_empty?: boolean; +} + +export interface ErrorCardConfig extends LovelaceCardConfig { + error: string; + origConfig: LovelaceCardConfig; +} + +export interface SeverityConfig { + green?: number; + yellow?: number; + red?: number; +} + +export interface GaugeCardConfig extends LovelaceCardConfig { + entity: string; + name?: string; + unit?: string; + min?: number; + max?: number; + severity?: SeverityConfig; + theme?: string; +} + +export interface ConfigEntity extends EntityConfig { + tap_action?: ActionConfig; + hold_action?: ActionConfig; +} + +export interface GlanceCardConfig extends LovelaceCardConfig { + show_name?: boolean; + show_state?: boolean; + show_icon?: boolean; + title?: string; + theme?: string; + entities: ConfigEntity[]; + columns?: number; +} + +export interface IframeCardConfig extends LovelaceCardConfig { + aspect_ratio?: string; + title?: string; + url: string; +} + +export interface LightCardConfig extends LovelaceCardConfig { + entity: string; + name?: string; + theme?: string; +} + +export interface MapCardConfig extends LovelaceCardConfig { + title: string; + aspect_ratio: string; + default_zoom?: number; + entities?: Array; + geo_location_sources?: string[]; +} + +export interface MarkdownCardConfig extends LovelaceCardConfig { + content: string; + title?: string; +} + +export interface MediaControlCardConfig extends LovelaceCardConfig { + entity: string; +} + +export interface PictureCardConfig extends LovelaceCardConfig { + image?: string; + tap_action?: ActionConfig; + hold_action?: ActionConfig; +} + +export interface PictureElementsCardConfig extends LovelaceCardConfig { + title?: string; + image?: string; + camera_image?: string; + state_image?: {}; + aspect_ratio?: string; + entity?: string; + elements: LovelaceElementConfig[]; +} + +export interface PictureEntityCardConfig extends LovelaceCardConfig { + entity: string; + name?: string; + image?: string; + camera_image?: string; + state_image?: {}; + aspect_ratio?: string; + tap_action?: ActionConfig; + hold_action?: ActionConfig; + show_name?: boolean; + show_state?: boolean; +} + +export interface PictureGlanceCardConfig extends LovelaceCardConfig { + entities: EntityConfig[]; + title?: string; + image?: string; + camera_image?: string; + state_image?: {}; + aspect_ratio?: string; + entity?: string; + tap_action?: ActionConfig; + hold_action?: ActionConfig; +} + +export interface PlantAttributeTarget extends EventTarget { + value?: string; +} + +export interface PlantStatusCardConfig extends LovelaceCardConfig { + name?: string; + entity: string; +} + +export interface SensorCardConfig extends LovelaceCardConfig { + entity: string; + name?: string; + icon?: string; + graph?: string; + unit?: string; + detail?: number; + theme?: string; + hours_to_show?: number; +} + +export interface ShoppingListCardConfig extends LovelaceCardConfig { + title?: string; +} + +export interface StackCardConfig extends LovelaceCardConfig { + cards: LovelaceCardConfig[]; +} + +export interface ThermostatCardConfig extends LovelaceCardConfig { + entity: string; + theme?: string; + name?: string; +} + +export interface WeatherForecastCardConfig extends LovelaceCardConfig { + entity: string; + name?: string; +} diff --git a/src/panels/lovelace/common/generate-lovelace-config.ts b/src/panels/lovelace/common/generate-lovelace-config.ts index 70b794cf13..3e771733a2 100644 --- a/src/panels/lovelace/common/generate-lovelace-config.ts +++ b/src/panels/lovelace/common/generate-lovelace-config.ts @@ -5,6 +5,7 @@ import { LovelaceViewConfig, } from "../../../data/lovelace"; import { HassEntity, HassEntities } from "home-assistant-js-websocket"; + import extractViews from "../../../common/entity/extract_views"; import getViewEntities from "../../../common/entity/get_view_entities"; import computeStateName from "../../../common/entity/compute_state_name"; @@ -12,9 +13,10 @@ import splitByGroups from "../../../common/entity/split_by_groups"; import computeObjectId from "../../../common/entity/compute_object_id"; import computeStateDomain from "../../../common/entity/compute_state_domain"; import computeDomain from "../../../common/entity/compute_domain"; + import { EntityRowConfig, WeblinkConfig } from "../entity-rows/types"; -import { EntitiesCardConfig } from "../cards/hui-entities-card"; import { LocalizeFunc } from "../../../common/translations/localize"; +import { EntitiesCardConfig } from "../cards/types"; const DEFAULT_VIEW_ENTITY_ID = "group.default_view"; const DOMAINS_BADGES = [ diff --git a/src/panels/lovelace/components/hui-generic-entity-row.ts b/src/panels/lovelace/components/hui-generic-entity-row.ts index d38b413dfc..515eafdd6b 100644 --- a/src/panels/lovelace/components/hui-generic-entity-row.ts +++ b/src/panels/lovelace/components/hui-generic-entity-row.ts @@ -9,15 +9,15 @@ import { TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../../types"; -import { EntitiesCardEntityConfig } from "../cards/hui-entities-card"; -import { computeRTL } from "../../../common/util/compute_rtl"; - import "../../../components/entity/state-badge"; import "../../../components/ha-relative-time"; import "../../../components/ha-icon"; import "../components/hui-warning"; +import { HomeAssistant } from "../../../types"; +import { computeRTL } from "../../../common/util/compute_rtl"; +import { EntitiesCardEntityConfig } from "../cards/types"; + class HuiGenericEntityRow extends LitElement { @property() public hass?: HomeAssistant; diff --git a/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts index 8daa8ead02..47da255b09 100644 --- a/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts @@ -16,11 +16,11 @@ import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-alarm-panel-card"; import { configElementStyle } from "./config-elements-style"; import "../../../../components/entity/ha-entity-picker"; import "../../../../components/ha-icon"; +import { AlarmPanelCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -34,9 +34,9 @@ export class HuiAlarmPanelCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: AlarmPanelCardConfig; - public setConfig(config: Config): void { + public setConfig(config: AlarmPanelCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts index 7e61259e97..4b9be7d22c 100644 --- a/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts @@ -10,23 +10,23 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-toggle-button/paper-toggle-button"; +import "../../../../components/entity/state-badge"; +import "../../components/hui-theme-select-editor"; +import "../../components/hui-entity-editor"; +import "../../../../components/ha-card"; +import "../../../../components/ha-icon"; + import { processEditorEntities } from "../process-editor-entities"; import { struct } from "../../common/structs/struct"; import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; +import { configElementStyle } from "./config-elements-style"; import { EntitiesCardConfig, EntitiesCardEntityConfig, -} from "../../cards/hui-entities-card"; -import { configElementStyle } from "./config-elements-style"; - -import "../../../../components/entity/state-badge"; -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; -import "../../../../components/ha-card"; -import "../../../../components/ha-icon"; +} from "../../cards/types"; const entitiesConfigStruct = struct.union([ { diff --git a/src/panels/lovelace/editor/config-elements/hui-entity-button-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-entity-button-card-editor.ts index 93ecd9498a..7ac9ffca2a 100644 --- a/src/panels/lovelace/editor/config-elements/hui-entity-button-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-entity-button-card-editor.ts @@ -7,6 +7,10 @@ import { } from "lit-element"; import "@polymer/paper-input/paper-input"; +import "../../components/hui-action-editor"; +import "../../components/hui-theme-select-editor"; +import "../../components/hui-entity-editor"; + import { struct } from "../../common/structs/struct"; import { EntitiesEditorEvent, @@ -16,13 +20,9 @@ import { import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-entity-button-card"; import { configElementStyle } from "./config-elements-style"; import { ActionConfig } from "../../../../data/lovelace"; - -import "../../components/hui-action-editor"; -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; +import { EntityButtonCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -41,9 +41,9 @@ export class HuiEntityButtonCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: EntityButtonCardConfig; - public setConfig(config: Config): void { + public setConfig(config: EntityButtonCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts index a9f5af2dec..d92c8262bf 100644 --- a/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts @@ -10,16 +10,16 @@ import { import "@polymer/paper-input/paper-input"; import "@polymer/paper-toggle-button/paper-toggle-button"; +import "../../components/hui-theme-select-editor"; +import "../../components/hui-entity-editor"; + import { struct } from "../../common/structs/struct"; import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config, SeverityConfig } from "../../cards/hui-gauge-card"; import { configElementStyle } from "./config-elements-style"; - -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; +import { GaugeCardConfig, SeverityConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -37,11 +37,11 @@ export class HuiGaugeCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: GaugeCardConfig; private _useSeverity?: boolean; - public setConfig(config: Config): void { + public setConfig(config: GaugeCardConfig): void { config = cardConfigStruct(config); this._useSeverity = !!config.severity; this._config = config; diff --git a/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts index cef49e197e..68397b381b 100644 --- a/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts @@ -10,20 +10,20 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-toggle-button/paper-toggle-button"; +import "../../../../components/entity/state-badge"; +import "../../components/hui-theme-select-editor"; +import "../../components/hui-entity-editor"; +import "../../../../components/ha-card"; +import "../../../../components/ha-icon"; + import { struct } from "../../common/structs/struct"; import { processEditorEntities } from "../process-editor-entities"; import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { GlanceCardConfig, ConfigEntity } from "../../cards/hui-glance-card"; import { configElementStyle } from "./config-elements-style"; - -import "../../../../components/entity/state-badge"; -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; -import "../../../../components/ha-card"; -import "../../../../components/ha-icon"; +import { GlanceCardConfig, ConfigEntity } from "../../cards/types"; const entitiesConfigStruct = struct.union([ { diff --git a/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts index 6d01f24ee5..3672b8af54 100644 --- a/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts @@ -12,8 +12,8 @@ import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-iframe-card"; import { configElementStyle } from "./config-elements-style"; +import { IframeCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -27,9 +27,9 @@ export class HuiIframeCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: IframeCardConfig; - public setConfig(config: Config): void { + public setConfig(config: IframeCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts index 742fe7ee4c..8f1eba6876 100644 --- a/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts @@ -7,16 +7,16 @@ import { } from "lit-element"; import "@polymer/paper-input/paper-input"; +import "../../components/hui-theme-select-editor"; +import "../../components/hui-entity-editor"; + import { struct } from "../../common/structs/struct"; import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-light-card"; import { configElementStyle } from "./config-elements-style"; - -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; +import { LightCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -30,9 +30,9 @@ export class HuiLightCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: LightCardConfig; - public setConfig(config: Config): void { + public setConfig(config: LightCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts index bacda9c4d5..0e43e36e88 100644 --- a/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts @@ -9,19 +9,19 @@ import { } from "lit-element"; import "@polymer/paper-input/paper-input"; +import "../../components/hui-entity-editor"; +import "../../components/hui-input-list-editor"; + import { struct } from "../../common/structs/struct"; import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { MapCardConfig } from "../../cards/hui-map-card"; import { configElementStyle } from "./config-elements-style"; import { processEditorEntities } from "../process-editor-entities"; import { EntityConfig } from "../../entity-rows/types"; import { PolymerChangedEvent } from "../../../../polymer-types"; - -import "../../components/hui-entity-editor"; -import "../../components/hui-input-list-editor"; +import { MapCardConfig } from "../../cards/types"; const entitiesConfigStruct = struct.union([ { diff --git a/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts index 362ed6940f..a1da22d8a6 100644 --- a/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts @@ -13,8 +13,8 @@ import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-markdown-card"; import { configElementStyle } from "./config-elements-style"; +import { MarkdownCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -27,9 +27,9 @@ export class HuiMarkdownCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: MarkdownCardConfig; - public setConfig(config: Config): void { + public setConfig(config: MarkdownCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts index 6a3b6a835d..104959e8f0 100644 --- a/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts @@ -11,7 +11,7 @@ import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-media-control-card"; +import { MediaControlCardConfig } from "../../cards/hui-media-control-card"; import "../../../../components/entity/ha-entity-picker"; @@ -25,9 +25,9 @@ export class HuiMediaControlCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: MediaControlCardConfig; - public setConfig(config: Config): void { + public setConfig(config: MediaControlCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts index b6cfc6125a..cfde20c852 100644 --- a/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts @@ -7,6 +7,8 @@ import { } from "lit-element"; import "@polymer/paper-input/paper-input"; +import "../../components/hui-action-editor"; + import { struct } from "../../common/structs/struct"; import { EntitiesEditorEvent, @@ -16,11 +18,9 @@ import { import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-picture-card"; import { configElementStyle } from "./config-elements-style"; import { ActionConfig } from "../../../../data/lovelace"; - -import "../../components/hui-action-editor"; +import { PictureCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -34,9 +34,9 @@ export class HuiPictureCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: PictureCardConfig; - public setConfig(config: Config): void { + public setConfig(config: PictureCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts index 942da40302..335eb0e8b9 100644 --- a/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts @@ -7,16 +7,16 @@ import { } from "lit-element"; import "@polymer/paper-input/paper-input"; +import "../../../../components/entity/ha-entity-picker"; +import "../../../../components/ha-icon"; + import { struct } from "../../common/structs/struct"; import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-alarm-panel-card"; import { configElementStyle } from "./config-elements-style"; - -import "../../../../components/entity/ha-entity-picker"; -import "../../../../components/ha-icon"; +import { PlantStatusCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -29,9 +29,9 @@ export class HuiPlantStatusCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: PlantStatusCardConfig; - public setConfig(config: Config): void { + public setConfig(config: PlantStatusCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts index 062a9baeed..30654517f4 100644 --- a/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts @@ -10,16 +10,16 @@ import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; +import "../../components/hui-theme-select-editor"; +import "../../../../components/entity/ha-entity-picker"; + import { struct } from "../../common/structs/struct"; import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-sensor-card"; import { configElementStyle } from "./config-elements-style"; - -import "../../components/hui-theme-select-editor"; -import "../../../../components/entity/ha-entity-picker"; +import { SensorCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -38,9 +38,9 @@ export class HuiSensorCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: SensorCardConfig; - public setConfig(config: Config): void { + public setConfig(config: SensorCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts b/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts index b2c0090299..0ea1fa00dc 100644 --- a/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts @@ -12,7 +12,7 @@ import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-shopping-list-card"; +import { ShoppingListCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -24,9 +24,9 @@ export class HuiShoppingListEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: ShoppingListCardConfig; - public setConfig(config: Config): void { + public setConfig(config: ShoppingListCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts index bc6e27edae..cd98e60286 100644 --- a/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts @@ -7,16 +7,16 @@ import { } from "lit-element"; import "@polymer/paper-input/paper-input"; +import "../../components/hui-theme-select-editor"; +import "../../../../components/entity/ha-entity-picker"; + import { struct } from "../../common/structs/struct"; import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-thermostat-card"; import { configElementStyle } from "./config-elements-style"; - -import "../../components/hui-theme-select-editor"; -import "../../../../components/entity/ha-entity-picker"; +import { ThermostatCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -30,9 +30,9 @@ export class HuiThermostatCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: ThermostatCardConfig; - public setConfig(config: Config): void { + public setConfig(config: ThermostatCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts index cf394c5450..6502054af9 100644 --- a/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts @@ -6,15 +6,15 @@ import { property, } from "lit-element"; +import "../../../../components/entity/ha-entity-picker"; + import { struct } from "../../common/structs/struct"; import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { Config } from "../../cards/hui-weather-forecast-card"; import { configElementStyle } from "./config-elements-style"; - -import "../../../../components/entity/ha-entity-picker"; +import { WeatherForecastCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -27,9 +27,9 @@ export class HuiWeatherForecastCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: WeatherForecastCardConfig; - public setConfig(config: Config): void { + public setConfig(config: WeatherForecastCardConfig): void { config = cardConfigStruct(config); this._config = config; } diff --git a/src/panels/lovelace/elements/hui-conditional-element.ts b/src/panels/lovelace/elements/hui-conditional-element.ts index 15901e294d..648c15af40 100644 --- a/src/panels/lovelace/elements/hui-conditional-element.ts +++ b/src/panels/lovelace/elements/hui-conditional-element.ts @@ -1,24 +1,21 @@ import { - Condition, checkConditionsMet, validateConditionalConfig, } from "../../lovelace/common/validate-condition"; import { createStyledHuiElement } from "../cards/picture-elements/create-styled-hui-element"; - -import { LovelaceElement, LovelaceElementConfig } from "./types"; +import { + LovelaceElement, + LovelaceElementConfig, + ConditionalElementConfig, +} from "./types"; import { HomeAssistant } from "../../../types"; -interface Config extends LovelaceElementConfig { - conditions: Condition[]; - elements: LovelaceElementConfig[]; -} - class HuiConditionalElement extends HTMLElement implements LovelaceElement { public _hass?: HomeAssistant; - private _config?: Config; + private _config?: ConditionalElementConfig; private _elements: LovelaceElement[] = []; - public setConfig(config: Config): void { + public setConfig(config: ConditionalElementConfig): void { if ( !config.conditions || !Array.isArray(config.conditions) || diff --git a/src/panels/lovelace/elements/hui-icon-element.ts b/src/panels/lovelace/elements/hui-icon-element.ts index 489e9a6742..f0da18717d 100644 --- a/src/panels/lovelace/elements/hui-icon-element.ts +++ b/src/panels/lovelace/elements/hui-icon-element.ts @@ -13,24 +13,15 @@ import "../../../components/ha-icon"; import { computeTooltip } from "../common/compute-tooltip"; import { handleClick } from "../common/handle-click"; import { longPress } from "../common/directives/long-press-directive"; -import { LovelaceElement, LovelaceElementConfig } from "./types"; +import { LovelaceElement, IconElementConfig } from "./types"; import { HomeAssistant } from "../../../types"; -import { ActionConfig } from "../../../data/lovelace"; - -export interface Config extends LovelaceElementConfig { - entity?: string; - name?: string; - tap_action?: ActionConfig; - hold_action?: ActionConfig; - icon: string; -} @customElement("hui-icon-element") export class HuiIconElement extends LitElement implements LovelaceElement { public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: IconElementConfig; - public setConfig(config: Config): void { + public setConfig(config: IconElementConfig): void { if (!config.icon) { throw Error("Invalid Configuration: 'icon' required"); } diff --git a/src/panels/lovelace/elements/hui-image-element.ts b/src/panels/lovelace/elements/hui-image-element.ts index 76e55b08e2..e6d98e2163 100644 --- a/src/panels/lovelace/elements/hui-image-element.ts +++ b/src/panels/lovelace/elements/hui-image-element.ts @@ -13,28 +13,15 @@ import "../components/hui-image"; import { computeTooltip } from "../common/compute-tooltip"; import { handleClick } from "../common/handle-click"; import { longPress } from "../common/directives/long-press-directive"; -import { LovelaceElement, LovelaceElementConfig } from "./types"; +import { LovelaceElement, ImageElementConfig } from "./types"; import { HomeAssistant } from "../../../types"; -import { ActionConfig } from "../../../data/lovelace"; - -export interface Config extends LovelaceElementConfig { - entity?: string; - tap_action?: ActionConfig; - hold_action?: ActionConfig; - image?: string; - state_image?: string; - camera_image?: string; - filter?: string; - state_filter?: string; - aspect_ratio?: string; -} @customElement("hui-image-element") export class HuiImageElement extends LitElement implements LovelaceElement { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: ImageElementConfig; - public setConfig(config: Config): void { + public setConfig(config: ImageElementConfig): void { if (!config) { throw Error("Error in element configuration"); } diff --git a/src/panels/lovelace/elements/hui-service-button-element.ts b/src/panels/lovelace/elements/hui-service-button-element.ts index 1c3ecef0ab..7f2ebb34d8 100644 --- a/src/panels/lovelace/elements/hui-service-button-element.ts +++ b/src/panels/lovelace/elements/hui-service-button-element.ts @@ -10,20 +10,14 @@ import { import "../../../components/buttons/ha-call-service-button"; -import { LovelaceElement, LovelaceElementConfig } from "./types"; +import { LovelaceElement, ServiceButtonElementConfig } from "./types"; import { HomeAssistant } from "../../../types"; -export interface Config extends LovelaceElementConfig { - title?: string; - service?: string; - service_data?: object; -} - @customElement("hui-service-button-element") export class HuiServiceButtonElement extends LitElement implements LovelaceElement { public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: ServiceButtonElementConfig; private _domain?: string; private _service?: string; @@ -31,7 +25,7 @@ export class HuiServiceButtonElement extends LitElement return { _config: {} }; } - public setConfig(config: Config): void { + public setConfig(config: ServiceButtonElementConfig): void { if (!config || !config.service) { throw Error("Invalid Configuration: 'service' required"); } diff --git a/src/panels/lovelace/elements/hui-state-badge-element.ts b/src/panels/lovelace/elements/hui-state-badge-element.ts index 6b191a678f..9ac63484cf 100644 --- a/src/panels/lovelace/elements/hui-state-badge-element.ts +++ b/src/panels/lovelace/elements/hui-state-badge-element.ts @@ -11,21 +11,17 @@ import "../../../components/entity/ha-state-label-badge"; import "../components/hui-warning-element"; import computeStateName from "../../../common/entity/compute_state_name"; -import { LovelaceElement, LovelaceElementConfig } from "./types"; +import { LovelaceElement, StateBadgeElementConfig } from "./types"; import { HomeAssistant } from "../../../types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; -export interface Config extends LovelaceElementConfig { - entity: string; -} - @customElement("hui-state-badge-element") export class HuiStateBadgeElement extends LitElement implements LovelaceElement { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: StateBadgeElementConfig; - public setConfig(config: Config): void { + public setConfig(config: StateBadgeElementConfig): void { if (!config.entity) { throw Error("Invalid Configuration: 'entity' required"); } diff --git a/src/panels/lovelace/elements/hui-state-icon-element.ts b/src/panels/lovelace/elements/hui-state-icon-element.ts index 59d57989cf..91a41748d9 100644 --- a/src/panels/lovelace/elements/hui-state-icon-element.ts +++ b/src/panels/lovelace/elements/hui-state-icon-element.ts @@ -15,23 +15,16 @@ import "../components/hui-warning-element"; import { computeTooltip } from "../common/compute-tooltip"; import { handleClick } from "../common/handle-click"; import { longPress } from "../common/directives/long-press-directive"; -import { LovelaceElement, LovelaceElementConfig } from "./types"; +import { LovelaceElement, StateIconElementConfig } from "./types"; import { HomeAssistant } from "../../../types"; -import { ActionConfig } from "../../../data/lovelace"; import { hasConfigOrEntityChanged } from "../common/has-changed"; -export interface Config extends LovelaceElementConfig { - entity: string; - tap_action?: ActionConfig; - hold_action?: ActionConfig; -} - @customElement("hui-state-icon-element") export class HuiStateIconElement extends LitElement implements LovelaceElement { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: StateIconElementConfig; - public setConfig(config: Config): void { + public setConfig(config: StateIconElementConfig): void { if (!config.entity) { throw Error("Invalid Configuration: 'entity' required"); } diff --git a/src/panels/lovelace/elements/hui-state-label-element.ts b/src/panels/lovelace/elements/hui-state-label-element.ts index 87cc147ebe..561e9a8588 100644 --- a/src/panels/lovelace/elements/hui-state-label-element.ts +++ b/src/panels/lovelace/elements/hui-state-label-element.ts @@ -16,25 +16,16 @@ import computeStateDisplay from "../../../common/entity/compute_state_display"; import { computeTooltip } from "../common/compute-tooltip"; import { handleClick } from "../common/handle-click"; import { longPress } from "../common/directives/long-press-directive"; -import { LovelaceElement, LovelaceElementConfig } from "./types"; +import { LovelaceElement, StateLabelElementConfig } from "./types"; import { HomeAssistant } from "../../../types"; -import { ActionConfig } from "../../../data/lovelace"; import { hasConfigOrEntityChanged } from "../common/has-changed"; -interface Config extends LovelaceElementConfig { - entity: string; - prefix?: string; - suffix?: string; - tap_action?: ActionConfig; - hold_action?: ActionConfig; -} - @customElement("hui-state-label-element") class HuiStateLabelElement extends LitElement implements LovelaceElement { @property() public hass?: HomeAssistant; - @property() private _config?: Config; + @property() private _config?: StateLabelElementConfig; - public setConfig(config: Config): void { + public setConfig(config: StateLabelElementConfig): void { if (!config.entity) { throw Error("Invalid Configuration: 'entity' required"); } diff --git a/src/panels/lovelace/elements/types.ts b/src/panels/lovelace/elements/types.ts index 6d6b908a29..5c82484003 100644 --- a/src/panels/lovelace/elements/types.ts +++ b/src/panels/lovelace/elements/types.ts @@ -1,4 +1,6 @@ import { HomeAssistant } from "../../../types"; +import { Condition } from "../common/validate-condition"; +import { ActionConfig } from "../../../data/lovelace"; export interface LovelaceElementConfig { type: string; @@ -9,3 +11,52 @@ export interface LovelaceElement extends HTMLElement { hass?: HomeAssistant; setConfig(config: LovelaceElementConfig): void; } + +export interface ConditionalElementConfig extends LovelaceElementConfig { + conditions: Condition[]; + elements: LovelaceElementConfig[]; +} + +export interface IconElementConfig extends LovelaceElementConfig { + entity?: string; + name?: string; + tap_action?: ActionConfig; + hold_action?: ActionConfig; + icon: string; +} + +export interface ImageElementConfig extends LovelaceElementConfig { + entity?: string; + tap_action?: ActionConfig; + hold_action?: ActionConfig; + image?: string; + state_image?: string; + camera_image?: string; + filter?: string; + state_filter?: string; + aspect_ratio?: string; +} + +export interface ServiceButtonElementConfig extends LovelaceElementConfig { + title?: string; + service?: string; + service_data?: object; +} + +export interface StateBadgeElementConfig extends LovelaceElementConfig { + entity: string; +} + +export interface StateIconElementConfig extends LovelaceElementConfig { + entity: string; + tap_action?: ActionConfig; + hold_action?: ActionConfig; +} + +export interface StateLabelElementConfig extends LovelaceElementConfig { + entity: string; + prefix?: string; + suffix?: string; + tap_action?: ActionConfig; + hold_action?: ActionConfig; +} diff --git a/src/panels/lovelace/entity-rows/hui-group-entity-row.ts b/src/panels/lovelace/entity-rows/hui-group-entity-row.ts index 7a172b9a78..ebc78cee83 100644 --- a/src/panels/lovelace/entity-rows/hui-group-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-group-entity-row.ts @@ -12,6 +12,7 @@ import "../../../components/entity/ha-entity-toggle"; import "../components/hui-warning"; import computeStateDisplay from "../../../common/entity/compute_state_display"; + import { DOMAINS_TOGGLE } from "../../../common/const"; import { HomeAssistant } from "../../../types"; import { EntityRow, EntityConfig } from "./types"; diff --git a/src/panels/lovelace/entity-rows/hui-input-select-entity-row.ts b/src/panels/lovelace/entity-rows/hui-input-select-entity-row.ts index a17e16d314..9909c89106 100644 --- a/src/panels/lovelace/entity-rows/hui-input-select-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-input-select-entity-row.ts @@ -17,6 +17,7 @@ import "../../../components/entity/state-badge"; import "../components/hui-warning"; import computeStateName from "../../../common/entity/compute_state_name"; + import { HomeAssistant } from "../../../types"; import { EntityRow, EntityConfig } from "./types"; import { setOption } from "../../../data/input-select"; diff --git a/src/panels/lovelace/entity-rows/hui-text-entity-row.ts b/src/panels/lovelace/entity-rows/hui-text-entity-row.ts index eafd7f42c7..34e98c737c 100644 --- a/src/panels/lovelace/entity-rows/hui-text-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-text-entity-row.ts @@ -13,6 +13,7 @@ import "../components/hui-generic-entity-row"; import "../components/hui-warning"; import computeStateDisplay from "../../../common/entity/compute_state_display"; + import { HomeAssistant } from "../../../types"; import { EntityRow, EntityConfig } from "./types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; diff --git a/src/panels/lovelace/entity-rows/hui-timer-entity-row.ts b/src/panels/lovelace/entity-rows/hui-timer-entity-row.ts index bbd27aa51b..cd46bccae8 100644 --- a/src/panels/lovelace/entity-rows/hui-timer-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-timer-entity-row.ts @@ -12,6 +12,7 @@ import "../components/hui-warning"; import timerTimeRemaining from "../../../common/entity/timer_time_remaining"; import secondsToDuration from "../../../common/datetime/seconds_to_duration"; + import { HomeAssistant } from "../../../types"; import { EntityConfig } from "./types"; import { HassEntity } from "home-assistant-js-websocket";