Convert default state icons (#10223)

* Convert default state icons

* update

* Update cast/src/launcher/layout/hc-cast.ts

Co-authored-by: Philip Allgaier <mail@spacegaier.de>

* Update ha-config-core.js

* Update

* Finish

* Add siren icon

* FIx

* Add curtain icons

Co-authored-by: Philip Allgaier <mail@spacegaier.de>
This commit is contained in:
Bram Kragten
2021-10-20 11:10:16 +02:00
committed by GitHub
parent b760e543b0
commit 667fd39147
75 changed files with 829 additions and 573 deletions

View File

@@ -1,7 +1,7 @@
import { html, LitElement } from "lit";
import { customElement, property } from "lit/decorators";
import { batteryIcon } from "../../common/entity/battery_icon";
import "../ha-icon";
import { batteryStateIcon } from "../../common/entity/battery_icon";
import "../ha-svg-icon";
@customElement("ha-battery-icon")
export class HaBatteryIcon extends LitElement {
@@ -11,9 +11,18 @@ export class HaBatteryIcon extends LitElement {
protected render() {
return html`
<ha-icon
.icon=${batteryIcon(this.batteryStateObj, this.batteryChargingStateObj)}
></ha-icon>
<ha-svg-icon
.path=${batteryStateIcon(
this.batteryStateObj,
this.batteryChargingStateObj
)}
></ha-svg-icon>
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"ha-battery-icon": HaBatteryIcon;
}
}

View File

@@ -14,19 +14,18 @@ import secondsToDuration from "../../common/datetime/seconds_to_duration";
import { computeStateDisplay } from "../../common/entity/compute_state_display";
import { computeStateDomain } from "../../common/entity/compute_state_domain";
import { computeStateName } from "../../common/entity/compute_state_name";
import { stateIcon } from "../../common/entity/state_icon";
import { formatNumber } from "../../common/number/format_number";
import { UNAVAILABLE, UNKNOWN } from "../../data/entity";
import { timerTimeRemaining } from "../../data/timer";
import { HomeAssistant } from "../../types";
import "../ha-label-badge";
import "../ha-icon";
import "../ha-state-icon";
@customElement("ha-state-label-badge")
export class HaStateLabelBadge extends LitElement {
@property({ attribute: false }) public hass?: HomeAssistant;
@property() public state?: HassEntity;
@property({ attribute: false }) public state?: HassEntity;
@property() public name?: string;
@@ -76,15 +75,16 @@ export class HaStateLabelBadge extends LitElement {
// 4. Icon determined via entity state
// 5. Value string as fallback
const domain = computeStateDomain(entityState);
const icon = this.icon ? this.icon : this._computeIcon(domain, entityState);
const image = this.icon
const showIcon = this.icon || this._computeShowIcon(domain, entityState);
const image = showIcon
? ""
: this.image
? this.image
: entityState.attributes.entity_picture_local ||
entityState.attributes.entity_picture;
const value =
!image && !icon ? this._computeValue(domain, entityState) : undefined;
!image && !showIcon ? this._computeValue(domain, entityState) : undefined;
return html`
<ha-label-badge
@@ -101,8 +101,13 @@ export class HaStateLabelBadge extends LitElement {
)}
.description=${this.name ?? computeStateName(entityState)}
>
${!image && icon ? html`<ha-icon .icon=${icon}></ha-icon>` : ""}
${value && !icon && !image
${!image && showIcon
? html`<ha-state-icon
.icon=${this.icon}
.state=${entityState}
></ha-state-icon>`
: ""}
${value && !image && !showIcon
? html`<span class=${value && value.length > 4 ? "big" : ""}
>${value}</span
>`
@@ -150,9 +155,9 @@ export class HaStateLabelBadge extends LitElement {
}
}
private _computeIcon(domain: string, entityState: HassEntity) {
private _computeShowIcon(domain: string, entityState: HassEntity): boolean {
if (entityState.state === UNAVAILABLE) {
return null;
return false;
}
switch (domain) {
case "alarm_control_panel":
@@ -162,17 +167,13 @@ export class HaStateLabelBadge extends LitElement {
case "person":
case "scene":
case "sun":
return stateIcon(entityState);
return true;
case "timer":
return entityState.state === "active"
? "hass:timer-outline"
: "hass:timer-off-outline";
return true;
case "sensor":
return entityState.attributes.device_class === "moon__phase"
? stateIcon(entityState)
: null;
return entityState.attributes.device_class === "moon__phase";
default:
return null;
return false;
}
}

View File

@@ -1,3 +1,4 @@
import { mdiAlert } from "@mdi/js";
import type { HassEntity } from "home-assistant-js-websocket";
import {
css,
@@ -12,10 +13,9 @@ import { ifDefined } from "lit/directives/if-defined";
import { styleMap } from "lit/directives/style-map";
import { computeActiveState } from "../../common/entity/compute_active_state";
import { computeStateDomain } from "../../common/entity/compute_state_domain";
import { stateIcon } from "../../common/entity/state_icon";
import { iconColorCSS } from "../../common/style/icon_color_css";
import type { HomeAssistant } from "../../types";
import "../ha-icon";
import "../ha-state-icon";
export class StateBadge extends LitElement {
public hass?: HomeAssistant;
@@ -39,7 +39,7 @@ export class StateBadge extends LitElement {
// We either need a `stateObj` or one override
if (!stateObj && !this.overrideIcon && !this.overrideImage) {
return html`<div class="missing">
<ha-icon icon="hass:alert"></ha-icon>
<ha-svg-icon .path=${mdiAlert}></ha-svg-icon>
</div>`;
}
@@ -49,18 +49,17 @@ export class StateBadge extends LitElement {
const domain = stateObj ? computeStateDomain(stateObj) : undefined;
return html`
<ha-icon
style=${styleMap(this._iconStyle)}
data-domain=${ifDefined(
this.stateColor || (domain === "light" && this.stateColor !== false)
? domain
: undefined
)}
data-state=${stateObj ? computeActiveState(stateObj) : ""}
.icon=${this.overrideIcon || (stateObj ? stateIcon(stateObj) : "")}
></ha-icon>
`;
return html`<ha-state-icon
style=${styleMap(this._iconStyle)}
data-domain=${ifDefined(
this.stateColor || (domain === "light" && this.stateColor !== false)
? domain
: undefined
)}
data-state=${stateObj ? computeActiveState(stateObj) : ""}
.icon=${this.overrideIcon}
.state=${stateObj}
></ha-state-icon>`;
}
public willUpdate(changedProps: PropertyValues) {
@@ -154,7 +153,7 @@ export class StateBadge extends LitElement {
:host([icon]:focus) {
background: var(--divider-color);
}
ha-icon {
ha-state-icon {
transition: color 0.3s ease-in-out, filter 0.3s ease-in-out;
}
.missing {