Merge pull request #3282 from home-assistant/dev

20190618.0
This commit is contained in:
Paulus Schoutsen 2019-06-18 11:47:21 -07:00 committed by GitHub
commit 7baf6382ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 112 additions and 2104 deletions

File diff suppressed because it is too large Load Diff

View File

@ -6,12 +6,9 @@ import {
PropertyDeclarations, PropertyDeclarations,
} from "lit-element"; } from "lit-element";
import { until } from "lit-html/directives/until"; import { until } from "lit-html/directives/until";
import "@polymer/paper-icon-button";
import "@material/mwc-button"; import "@material/mwc-button";
import "@polymer/paper-spinner/paper-spinner-lite"; import "@polymer/paper-spinner/paper-spinner-lite";
import "../../../src/components/ha-card"; import "../../../src/components/ha-card";
import "../../../src/components/ha-paper-icon-button-next";
import "../../../src/components/ha-paper-icon-button-prev";
import { LovelaceCard, Lovelace } from "../../../src/panels/lovelace/types"; import { LovelaceCard, Lovelace } from "../../../src/panels/lovelace/types";
import { LovelaceCardConfig } from "../../../src/data/lovelace"; import { LovelaceCardConfig } from "../../../src/data/lovelace";
import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; import { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
@ -49,11 +46,7 @@ export class HADemoCard extends LitElement implements LovelaceCard {
return html` return html`
<ha-card> <ha-card>
<div class="picker"> <div class="picker">
<ha-paper-icon-button-prev <div class="label">
@click=${this._prevConfig}
.disabled=${this._switching}
></ha-paper-icon-button-prev>
<div>
${this._switching ${this._switching
? html` ? html`
<paper-spinner-lite active></paper-spinner-lite> <paper-spinner-lite active></paper-spinner-lite>
@ -73,16 +66,15 @@ export class HADemoCard extends LitElement implements LovelaceCard {
"" ""
)} )}
</div> </div>
<ha-paper-icon-button-next <mwc-button @click=${this._nextConfig} .disabled=${this._switching}>
@click=${this._nextConfig} Next demo
.disabled=${this._switching} </mwc-button>
></ha-paper-icon-button-next>
</div> </div>
<div class="content"> <div class="content small-hidden">
Welcome home! You've reached the Home Assistant demo where we showcase Welcome home! You've reached the Home Assistant demo where we showcase
the best UIs created by our community. the best UIs created by our community.
</div> </div>
<div class="actions"> <div class="actions small-hidden">
<a href="https://www.home-assistant.io" target="_blank"> <a href="https://www.home-assistant.io" target="_blank">
<mwc-button>Learn more about Home Assistant</mwc-button> <mwc-button>Learn more about Home Assistant</mwc-button>
</a> </a>
@ -91,14 +83,6 @@ export class HADemoCard extends LitElement implements LovelaceCard {
`; `;
} }
private _prevConfig() {
this._updateConfig(
selectedDemoConfigIndex > 0
? selectedDemoConfigIndex - 1
: demoConfigs.length - 1
);
}
private _nextConfig() { private _nextConfig() {
this._updateConfig( this._updateConfig(
selectedDemoConfigIndex < demoConfigs.length - 1 selectedDemoConfigIndex < demoConfigs.length - 1
@ -125,6 +109,10 @@ export class HADemoCard extends LitElement implements LovelaceCard {
color: var(--primary-color); color: var(--primary-color);
} }
.actions a {
text-decoration: none;
}
.content { .content {
padding: 16px; padding: 16px;
} }
@ -136,17 +124,27 @@ export class HADemoCard extends LitElement implements LovelaceCard {
height: 60px; height: 60px;
} }
.picker div { .picker mwc-button {
text-align: center; margin-right: 8px;
} }
.picker small { .label {
padding-left: 16px;
}
.label small {
display: block; display: block;
} }
.actions { .actions {
padding-left: 8px; padding-left: 8px;
} }
@media only screen and (max-width: 500px) {
.small-hidden {
display: none;
}
}
`, `,
]; ];
} }

View File

@ -87,7 +87,7 @@
#ha-init-skeleton::before { #ha-init-skeleton::before {
display: block; display: block;
content: ""; content: "";
height: 112px; height: 64px;
background-color: #03a9f4; background-color: #03a9f4;
} }
</style> </style>

View File

@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup( setup(
name="home-assistant-frontend", name="home-assistant-frontend",
version="20190614.0", version="20190618.0",
description="The Home Assistant frontend", description="The Home Assistant frontend",
url="https://github.com/home-assistant/home-assistant-polymer", url="https://github.com/home-assistant/home-assistant-polymer",
author="The Home Assistant Authors", author="The Home Assistant Authors",

View File

@ -4,7 +4,8 @@ import { Map } from "leaflet";
export type LeafletModuleType = typeof import("leaflet"); export type LeafletModuleType = typeof import("leaflet");
export const setupLeafletMap = async ( export const setupLeafletMap = async (
mapElement: HTMLElement mapElement: HTMLElement,
darkMode = false
): Promise<[Map, LeafletModuleType]> => { ): Promise<[Map, LeafletModuleType]> => {
if (!mapElement.parentNode) { if (!mapElement.parentNode) {
throw new Error("Cannot setup Leaflet map on disconnected element"); throw new Error("Cannot setup Leaflet map on disconnected element");
@ -20,9 +21,9 @@ export const setupLeafletMap = async (
mapElement.parentNode.appendChild(style); mapElement.parentNode.appendChild(style);
map.setView([52.3731339, 4.8903147], 13); map.setView([52.3731339, 4.8903147], 13);
Leaflet.tileLayer( Leaflet.tileLayer(
`https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}${ `https://{s}.basemaps.cartocdn.com/${
Leaflet.Browser.retina ? "@2x.png" : ".png" darkMode ? "dark_all" : "light_all"
}`, }/{z}/{x}/{y}${Leaflet.Browser.retina ? "@2x.png" : ".png"}`,
{ {
attribution: attribution:
'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, &copy; <a href="https://carto.com/attributions">CARTO</a>', '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, &copy; <a href="https://carto.com/attributions">CARTO</a>',

View File

@ -8,6 +8,7 @@ export interface ZHAEntityReference extends HassEntity {
export interface ZHADevice { export interface ZHADevice {
name: string; name: string;
ieee: string; ieee: string;
nwk: string;
manufacturer: string; manufacturer: string;
model: string; model: string;
quirk_applied: boolean; quirk_applied: boolean;

View File

@ -4,12 +4,10 @@ import "@polymer/paper-input/paper-input";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import { EventsMixin } from "../../../mixins/events-mixin";
import LocalizeMixin from "../../../mixins/localize-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin";
import { fireEvent } from "../../../common/dom/fire_event";
class MoreInfoAlarmControlPanel extends LocalizeMixin( class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) {
EventsMixin(PolymerElement)
) {
static get template() { static get template() {
return html` return html`
<style include="iron-flex"></style> <style include="iron-flex"></style>
@ -187,7 +185,8 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(
}, },
_codeValid: { _codeValid: {
type: Boolean, type: Boolean,
computed: "_validateCode(_enteredCode, _codeFormat)", computed:
"_validateCode(_enteredCode, _codeFormat, _armVisible, _codeArmRequired)",
}, },
_disarmVisible: { _disarmVisible: {
type: Boolean, type: Boolean,
@ -220,6 +219,7 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(
const props = { const props = {
_codeFormat: newVal.attributes.code_format, _codeFormat: newVal.attributes.code_format,
_armVisible: state === "disarmed", _armVisible: state === "disarmed",
_codeArmRequired: newVal.attributes.code_arm_required,
_disarmVisible: _disarmVisible:
this._armedStates.includes(state) || this._armedStates.includes(state) ||
state === "pending" || state === "pending" ||
@ -231,7 +231,7 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(
} }
if (oldVal) { if (oldVal) {
setTimeout(() => { setTimeout(() => {
this.fire("iron-resize"); fireEvent(this, "iron-resize");
}, 500); }, 500);
} }
} }
@ -240,8 +240,8 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(
return format === "Number"; return format === "Number";
} }
_validateCode(code, format) { _validateCode(code, format, armVisible, codeArmRequired) {
return !format || code.length > 0; return !format || code.length > 0 || (armVisible && !codeArmRequired);
} }
_digitClicked(ev) { _digitClicked(ev) {

View File

@ -36,10 +36,10 @@ class ZHAAddDevicesPage extends LitElement {
public connectedCallback(): void { public connectedCallback(): void {
super.connectedCallback(); super.connectedCallback();
if (this.route && this.route.path && this.route.path !== "") { this.route && this.route.path && this.route.path !== ""
this._ieeeAddress = this.route.path.substring(1); ? (this._ieeeAddress = this.route.path.substring(1))
} : (this._ieeeAddress = undefined);
this._subscribe(this._ieeeAddress); this._subscribe();
} }
public disconnectedCallback(): void { public disconnectedCallback(): void {
@ -156,10 +156,10 @@ class ZHAAddDevicesPage extends LitElement {
} }
} }
private _subscribe(ieeeAddress: string | undefined): void { private _subscribe(): void {
const data: any = { type: "zha/devices/permit" }; const data: any = { type: "zha/devices/permit" };
if (ieeeAddress) { if (this._ieeeAddress) {
data.ieee = ieeeAddress; data.ieee = this._ieeeAddress;
} }
this._subscribed = this.hass!.connection.subscribeMessage( this._subscribed = this.hass!.connection.subscribeMessage(
(message) => this._handleMessage(message), (message) => this._handleMessage(message),

View File

@ -36,6 +36,7 @@ import { HomeAssistant } from "../../../types";
import { ItemSelectedEvent, NodeServiceData } from "./types"; import { ItemSelectedEvent, NodeServiceData } from "./types";
import { navigate } from "../../../common/navigate"; import { navigate } from "../../../common/navigate";
import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { UnsubscribeFunc } from "home-assistant-js-websocket";
import { formatAsPaddedHex } from "./functions";
declare global { declare global {
// for fire event // for fire event
@ -132,6 +133,8 @@ class ZHADeviceCard extends LitElement {
<dl> <dl>
<dt>IEEE:</dt> <dt>IEEE:</dt>
<dd class="zha-info">${this.device!.ieee}</dd> <dd class="zha-info">${this.device!.ieee}</dd>
<dt>Nwk:</dt>
<dd class="zha-info">${formatAsPaddedHex(this.device!.nwk)}</dd>
${ ${
this.device!.quirk_applied this.device!.quirk_applied
? html` ? html`

View File

@ -180,7 +180,10 @@ class HuiMapCard extends LitElement implements LovelaceCard {
} }
private async loadMap(): Promise<void> { private async loadMap(): Promise<void> {
[this._leafletMap, this.Leaflet] = await setupLeafletMap(this._mapEl); [this._leafletMap, this.Leaflet] = await setupLeafletMap(
this._mapEl,
this._config !== undefined ? this._config.dark_mode !== false : false
);
this._drawEntities(); this._drawEntities();
this._leafletMap.invalidateSize(); this._leafletMap.invalidateSize();
this._fitMap(); this._fitMap();

View File

@ -109,6 +109,7 @@ export interface MapCardConfig extends LovelaceCardConfig {
default_zoom?: number; default_zoom?: number;
entities?: Array<EntityConfig | string>; entities?: Array<EntityConfig | string>;
geo_location_sources?: string[]; geo_location_sources?: string[];
dark_mode?: boolean;
} }
export interface MarkdownCardConfig extends LovelaceCardConfig { export interface MarkdownCardConfig extends LovelaceCardConfig {

View File

@ -37,6 +37,7 @@ const cardConfigStruct = struct({
title: "string?", title: "string?",
aspect_ratio: "string?", aspect_ratio: "string?",
default_zoom: "number?", default_zoom: "number?",
dark_mode: "boolean?",
entities: [entitiesConfigStruct], entities: [entitiesConfigStruct],
geo_location_sources: "array?", geo_location_sources: "array?",
}); });
@ -71,6 +72,10 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor {
return this._config!.geo_location_sources || []; return this._config!.geo_location_sources || [];
} }
get _dark_mode(): boolean {
return this._config!.dark_mode || false;
}
protected render(): TemplateResult | void { protected render(): TemplateResult | void {
if (!this.hass) { if (!this.hass) {
return html``; return html``;
@ -100,6 +105,12 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor {
@value-changed="${this._valueChanged}" @value-changed="${this._valueChanged}"
></paper-input> ></paper-input>
</div> </div>
<paper-toggle-button
?checked="${this._dark_mode !== false}"
.configValue="${"dark_mode"}"
@change="${this._valueChanged}"
>Dark Mode?</paper-toggle-button
>
<hui-entity-editor <hui-entity-editor
.hass="${this.hass}" .hass="${this.hass}"
.entities="${this._configEntities}" .entities="${this._configEntities}"
@ -155,7 +166,8 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor {
} }
this._config = { this._config = {
...this._config, ...this._config,
[target.configValue!]: value, [target.configValue]:
target.checked !== undefined ? target.checked : value,
}; };
} }
} }

View File

@ -619,7 +619,8 @@
"firmware": "Firmware: {version}", "firmware": "Firmware: {version}",
"device_unavailable": "dispositiu no disponible", "device_unavailable": "dispositiu no disponible",
"entity_unavailable": "entitat no disponible", "entity_unavailable": "entitat no disponible",
"no_area": "Sense àrea" "no_area": "Sense àrea",
"hub": "Connectat a través de"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {

View File

@ -619,7 +619,8 @@
"firmware": "Firmware: {version}", "firmware": "Firmware: {version}",
"device_unavailable": "device unavailable", "device_unavailable": "device unavailable",
"entity_unavailable": "entity unavailable", "entity_unavailable": "entity unavailable",
"no_area": "No Area" "no_area": "No Area",
"hub": "Connected via"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {

View File

@ -113,7 +113,7 @@
"on": "Caliente" "on": "Caliente"
}, },
"window": { "window": {
"off": "Cerrado", "off": "Cerrada",
"on": "Abierta" "on": "Abierta"
}, },
"lock": { "lock": {
@ -361,7 +361,7 @@
"location_name": "Nombre de tu instalación de Home Assistant", "location_name": "Nombre de tu instalación de Home Assistant",
"latitude": "Latitud", "latitude": "Latitud",
"longitude": "Longitud", "longitude": "Longitud",
"elevation": "Elevación", "elevation": "Altitud",
"elevation_meters": "metros", "elevation_meters": "metros",
"time_zone": "Zona horaria", "time_zone": "Zona horaria",
"unit_system": "Sistema de unidades", "unit_system": "Sistema de unidades",
@ -619,7 +619,8 @@
"firmware": "Firmware: {version}", "firmware": "Firmware: {version}",
"device_unavailable": "dispositivo no disponible", "device_unavailable": "dispositivo no disponible",
"entity_unavailable": "entidad no disponible", "entity_unavailable": "entidad no disponible",
"no_area": "Ningún área" "no_area": "Ningún área",
"hub": "Conectado a través de"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {

View File

@ -619,7 +619,8 @@
"firmware": "קושחה: {version}", "firmware": "קושחה: {version}",
"device_unavailable": "התקן אינו זמין", "device_unavailable": "התקן אינו זמין",
"entity_unavailable": "ישות לא זמינה", "entity_unavailable": "ישות לא זמינה",
"no_area": "ללא אזור" "no_area": "ללא אזור",
"hub": "מחובר באמצעות"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {
@ -1138,7 +1139,7 @@
"dialogs": { "dialogs": {
"more_info_settings": { "more_info_settings": {
"save": "שמור", "save": "שמור",
"name": "שם", "name": "שם חלופי",
"entity_id": "מזהה ישות" "entity_id": "מזהה ישות"
}, },
"more_info_control": { "more_info_control": {

View File

@ -619,7 +619,8 @@
"firmware": "Firmware: {version}", "firmware": "Firmware: {version}",
"device_unavailable": "eszköz nem érhető el", "device_unavailable": "eszköz nem érhető el",
"entity_unavailable": "entitás nem érhető el", "entity_unavailable": "entitás nem érhető el",
"no_area": "Nincs Terület" "no_area": "Nincs Terület",
"hub": "Kapcsolódva"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {

View File

@ -298,9 +298,11 @@
"stop": "Stöðva" "stop": "Stöðva"
}, },
"core_config": { "core_config": {
"location_name": "Nafnið á Home Assistant uppsetningunni",
"latitude": "Breiddargráða", "latitude": "Breiddargráða",
"longitude": "Lengdargráða", "longitude": "Lengdargráða",
"elevation": "Hækkun", "elevation": "Hækkun",
"elevation_meters": "metrar",
"time_zone": "Tímabelti", "time_zone": "Tímabelti",
"save_button": "Vista" "save_button": "Vista"
} }
@ -521,7 +523,8 @@
"firmware": "Fastbúnaðarútgáfa: {version}", "firmware": "Fastbúnaðarútgáfa: {version}",
"device_unavailable": "Tæki ekki tiltækt", "device_unavailable": "Tæki ekki tiltækt",
"entity_unavailable": "Eining ekki tiltæk", "entity_unavailable": "Eining ekki tiltæk",
"no_area": "Ekkert svæði" "no_area": "Ekkert svæði",
"hub": "Tengt gegnum"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {
@ -771,6 +774,10 @@
"integration": { "integration": {
"more_integrations": "Meira", "more_integrations": "Meira",
"finish": "Ljúka" "finish": "Ljúka"
},
"core-config": {
"location_name_default": "Heima",
"finish": "Næsta"
} }
}, },
"lovelace": { "lovelace": {
@ -841,7 +848,11 @@
}, },
"warning": { "warning": {
"entity_not_found": "Eining ekki tiltæk: {entity}" "entity_not_found": "Eining ekki tiltæk: {entity}"
} },
"changed_toast": {
"refresh": "Endurnýja"
},
"reload_lovelace": "Endurhlaða Lovelace"
} }
}, },
"sidebar": { "sidebar": {
@ -871,7 +882,7 @@
"not_available": "Mynd ekki tiltæk" "not_available": "Mynd ekki tiltæk"
}, },
"persistent_notification": { "persistent_notification": {
"dismiss": "Hafna" "dismiss": "Vísa frá"
}, },
"scene": { "scene": {
"activate": "Virkja" "activate": "Virkja"

View File

@ -619,7 +619,8 @@
"firmware": "펌웨어: {version}", "firmware": "펌웨어: {version}",
"device_unavailable": "기기 사용불가", "device_unavailable": "기기 사용불가",
"entity_unavailable": "구성요소 사용불가", "entity_unavailable": "구성요소 사용불가",
"no_area": "영역 없음" "no_area": "영역 없음",
"hub": "연결 경유 대상"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {

View File

@ -619,7 +619,8 @@
"firmware": "Firmware: {version}", "firmware": "Firmware: {version}",
"device_unavailable": "Apparat net erreechbar", "device_unavailable": "Apparat net erreechbar",
"entity_unavailable": "Entitéit net erreechbar", "entity_unavailable": "Entitéit net erreechbar",
"no_area": "Kee Beräich" "no_area": "Kee Beräich",
"hub": "Verbonnen via"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {

View File

@ -619,7 +619,8 @@
"firmware": "Fastvare: {version}", "firmware": "Fastvare: {version}",
"device_unavailable": "enheten er utilgjengelig", "device_unavailable": "enheten er utilgjengelig",
"entity_unavailable": "oppføringen er utilgjengelig", "entity_unavailable": "oppføringen er utilgjengelig",
"no_area": "Intet område" "no_area": "Intet område",
"hub": "Ligado atravez de"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {

View File

@ -619,7 +619,8 @@
"firmware": "Oprogramowanie: {version}", "firmware": "Oprogramowanie: {version}",
"device_unavailable": "urządzenie niedostępne", "device_unavailable": "urządzenie niedostępne",
"entity_unavailable": "encja niedostępna", "entity_unavailable": "encja niedostępna",
"no_area": "brak" "no_area": "brak",
"hub": "Połączony przez"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {

View File

@ -619,7 +619,8 @@
"firmware": "Прошивка: {version}", "firmware": "Прошивка: {version}",
"device_unavailable": "устройство недоступно", "device_unavailable": "устройство недоступно",
"entity_unavailable": "объект недоступен", "entity_unavailable": "объект недоступен",
"no_area": "Не указано" "no_area": "Не указано",
"hub": "Подключено через"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {

View File

@ -619,7 +619,8 @@
"firmware": "固件:{version}", "firmware": "固件:{version}",
"device_unavailable": "设备不可用", "device_unavailable": "设备不可用",
"entity_unavailable": "实体不可用", "entity_unavailable": "实体不可用",
"no_area": "没有区域" "no_area": "没有区域",
"hub": "连接于"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {
@ -888,7 +889,7 @@
"intro": "{name},您好!欢迎来到 Home Assistant。您想怎样命名您的家呢", "intro": "{name},您好!欢迎来到 Home Assistant。您想怎样命名您的家呢",
"intro_location": "我们想知道您住在哪里。这将用于显示资讯以及设置基于太阳的自动化。此数据永远不会在您的网络以外共享。", "intro_location": "我们想知道您住在哪里。这将用于显示资讯以及设置基于太阳的自动化。此数据永远不会在您的网络以外共享。",
"intro_location_detect": "我们可以通过向外部服务发出一个一次性请求来帮助您填写此信息。", "intro_location_detect": "我们可以通过向外部服务发出一个一次性请求来帮助您填写此信息。",
"location_name_default": "Home", "location_name_default": "",
"button_detect": "自动检测", "button_detect": "自动检测",
"finish": "下一步" "finish": "下一步"
} }

View File

@ -619,7 +619,8 @@
"firmware": "韌體:{version}", "firmware": "韌體:{version}",
"device_unavailable": "裝置不可用", "device_unavailable": "裝置不可用",
"entity_unavailable": "物件不可用", "entity_unavailable": "物件不可用",
"no_area": "無分區" "no_area": "無分區",
"hub": "連線:"
}, },
"config_flow": { "config_flow": {
"external_step": { "external_step": {