Align configs (#3019)

* Align configurations

* cleanup

* fix imports
This commit is contained in:
Ian Richardson 2019-03-27 23:10:55 -05:00 committed by Paulus Schoutsen
parent b3f9432ae1
commit 1d24b83e5c
55 changed files with 463 additions and 453 deletions

View File

@ -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 ||

View File

@ -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) {

View File

@ -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
}

View File

@ -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<LovelaceCardEditor> {

View File

@ -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");
}

View File

@ -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<EntityConfig | string>;
state_filter: string[];
card: Partial<LovelaceCardConfig>;
show_empty?: boolean;
}
import { EntityFilterCardConfig } from "./types";
class EntityFilterCard extends HTMLElement implements LovelaceCard {
public isPanel?: boolean;

View File

@ -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;
}

View File

@ -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");
}

View File

@ -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 {

View File

@ -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");
}

View File

@ -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<LovelaceCardEditor> {
@ -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.");
}

View File

@ -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<EntityConfig | string>;
geo_location_sources?: string[];
}
import { MapCardConfig } from "./types";
@customElement("hui-map-card")
class HuiMapCard extends LitElement implements LovelaceCard {

View File

@ -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");
}

View File

@ -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");

View File

@ -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");
}

View File

@ -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 (

View File

@ -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");
}

View File

@ -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 ||

View File

@ -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<LovelaceCardEditor> {
@ -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.");
}

View File

@ -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<LovelaceCardEditor> {
@ -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.");
}

View File

@ -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 = [];

View File

@ -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");
}

View File

@ -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<LovelaceCardEditor> {
@ -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.");
}

View File

@ -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");

View File

@ -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<EntityConfig | string>;
state_filter: string[];
card: Partial<LovelaceCardConfig>;
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<EntityConfig | string>;
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;
}

View File

@ -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 = [

View File

@ -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;

View File

@ -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;
}

View File

@ -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([
{

View File

@ -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;
}

View File

@ -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;

View File

@ -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([
{

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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([
{

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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) ||

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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;
}

View File

@ -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";

View File

@ -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";

View File

@ -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";

View File

@ -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";