diff --git a/package.json b/package.json index 66c8aa500d..00f19210a4 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "fuse.js": "^6.0.0", "google-timezones-json": "^1.0.2", "hls.js": "^0.12.4", - "home-assistant-js-websocket": "^5.4.0", + "home-assistant-js-websocket": "^5.4.1", "idb-keyval": "^3.2.0", "intl-messageformat": "^8.3.9", "js-yaml": "^3.13.1", diff --git a/script/version_bump.js b/script/version_bump.js index e38ff4dae6..197dca4196 100755 --- a/script/version_bump.js +++ b/script/version_bump.js @@ -16,14 +16,31 @@ function today() { )}${String(now.getDate()).padStart(2, "0")}.0`; } +function auto(version) { + const todayVersion = today(); + if (todayVersion !== version) { + return todayVersion; + } + return patch(version); +} + const methods = { patch, today, + auto, }; async function main(args) { - const method = args.length > 0 && methods[args[0]]; - const commit = args.length > 1 && args[1] == "--commit"; + let method; + let commit; + + if (args.length === 0) { + method = methods.auto; + commit = true; + } else { + method = args.length > 0 && methods[args[0]]; + commit = args.length > 1 && args[1] == "--commit"; + } if (!method) { console.error( diff --git a/setup.py b/setup.py index 1d9ca6a700..4e1cddad04 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="home-assistant-frontend", - version="20200626.0", + version="20200626.1", description="The Home Assistant frontend", url="https://github.com/home-assistant/home-assistant-polymer", author="The Home Assistant Authors", diff --git a/src/layouts/partial-panel-resolver.ts b/src/layouts/partial-panel-resolver.ts index e8383d1a45..e17e41d8ed 100644 --- a/src/layouts/partial-panel-resolver.ts +++ b/src/layouts/partial-panel-resolver.ts @@ -13,6 +13,7 @@ import { STATE_NOT_RUNNING, STATE_RUNNING, } from "home-assistant-js-websocket"; +import { CustomPanelInfo } from "../data/panel_custom"; const CACHE_URL_PATHS = ["lovelace", "developer-tools"]; const COMPONENTS = { @@ -159,7 +160,17 @@ class PartialPanelResolver extends HassRouterPage { if (document.hidden) { this._hiddenTimeout = window.setTimeout(() => { this._hiddenTimeout = undefined; - if (this.lastChild) { + const curPanel = this.hass.panels[this._currentPage]; + if ( + this.lastChild && + // iFrames will lose their state when disconnected + // Do not disconnect any iframe panel + curPanel.component_name !== "iframe" && + // Do not disconnect any custom panel that embeds into iframe (ie hassio) + (curPanel.component_name !== "custom" || + !(curPanel.config as CustomPanelInfo).config._panel_custom + .embed_iframe) + ) { this._disconnectedPanel = this.lastChild; this.removeChild(this.lastChild); } diff --git a/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts b/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts index 7a2ec32a87..a6738488cc 100644 --- a/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts +++ b/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts @@ -143,15 +143,17 @@ class CloudGoogleAssistant extends LitElement { ${entity.might_2fa ? html` - - ${this.hass!.localize( + + > + + ` : ""} @@ -375,6 +377,9 @@ class CloudGoogleAssistant extends LitElement { state-info { cursor: pointer; } + ha-formfield { + display: block; + } ha-switch { padding: 8px 0; } diff --git a/src/panels/config/dashboard/ha-config-dashboard.ts b/src/panels/config/dashboard/ha-config-dashboard.ts index b416e3b9b9..87ca5ea457 100644 --- a/src/panels/config/dashboard/ha-config-dashboard.ts +++ b/src/panels/config/dashboard/ha-config-dashboard.ts @@ -26,7 +26,8 @@ import { mdiCloudLock } from "@mdi/js"; class HaConfigDashboard extends LitElement { @property() public hass!: HomeAssistant; - @property() public narrow!: boolean; + @property({ type: Boolean, reflect: true }) + public narrow!: boolean; @property() public isWide!: boolean; @@ -35,6 +36,96 @@ class HaConfigDashboard extends LitElement { @property() public showAdvanced!: boolean; protected render(): TemplateResult { + const content = html` +
+ ${this.hass.localize("ui.panel.config.header")} +
+ +
+ ${this.hass.localize("ui.panel.config.introduction")} +
+ + ${this.cloudStatus && isComponentLoaded(this.hass, "cloud") + ? html` + + + + ` + : ""} + ${Object.values(configSections).map( + (section) => html` + + + + ` + )} + ${isComponentLoaded(this.hass, "zha") + ? html` +
+ ${this.hass.localize( + "ui.panel.config.integration_panel_move.missing_zha", + "integrations_page", + html` + ${this.hass.localize( + "ui.panel.config.integration_panel_move.link_integration_page" + )} + ` + )} +
+ ` + : ""} + ${isComponentLoaded(this.hass, "zwave") + ? html` +
+ ${this.hass.localize( + "ui.panel.config.integration_panel_move.missing_zwave", + "integrations_page", + html` + ${this.hass.localize( + "ui.panel.config.integration_panel_move.link_integration_page" + )} + ` + )} +
+ ` + : ""} + ${!this.showAdvanced + ? html` +
+ ${this.hass.localize("ui.panel.config.advanced_mode.hint_enable")} + ${this.hass.localize( + "ui.panel.config.advanced_mode.link_profile_page" + )}. +
+ ` + : ""} +
`; + + if (!this.narrow) { + return content; + } + return html` @@ -46,90 +137,7 @@ class HaConfigDashboard extends LitElement { - -
- ${this.hass.localize("ui.panel.config.header")} -
- -
- ${this.hass.localize("ui.panel.config.introduction")} -
- - ${this.cloudStatus && isComponentLoaded(this.hass, "cloud") - ? html` - - - - ` - : ""} - ${Object.values(configSections).map( - (section) => html` - - - - ` - )} - ${isComponentLoaded(this.hass, "zha") - ? html` -
- ${this.hass.localize( - "ui.panel.config.integration_panel_move.missing_zha", - "integrations_page", - html` - ${this.hass.localize( - "ui.panel.config.integration_panel_move.link_integration_page" - )} - ` - )} -
- ` - : ""} - ${isComponentLoaded(this.hass, "zwave") - ? html` -
- ${this.hass.localize( - "ui.panel.config.integration_panel_move.missing_zwave", - "integrations_page", - html` - ${this.hass.localize( - "ui.panel.config.integration_panel_move.link_integration_page" - )} - ` - )} -
- ` - : ""} - ${!this.showAdvanced - ? html` -
- ${this.hass.localize( - "ui.panel.config.advanced_mode.hint_enable" - )} - ${this.hass.localize( - "ui.panel.config.advanced_mode.link_profile_page" - )}. -
- ` - : ""} -
+ ${content}
`; } @@ -145,6 +153,9 @@ class HaConfigDashboard extends LitElement { margin-bottom: 24px; } ha-config-section { + margin-top: -12px; + } + :host([narrow]) ha-config-section { margin-top: -20px; } ha-card { diff --git a/src/panels/config/devices/device-detail/integration-elements/mqtt/dialog-mqtt-device-debug-info.ts b/src/panels/config/devices/device-detail/integration-elements/mqtt/dialog-mqtt-device-debug-info.ts index 5bad83bf07..920b1ef790 100644 --- a/src/panels/config/devices/device-detail/integration-elements/mqtt/dialog-mqtt-device-debug-info.ts +++ b/src/panels/config/devices/device-detail/integration-elements/mqtt/dialog-mqtt-device-debug-info.ts @@ -232,6 +232,9 @@ class DialogMQTTDeviceDebugInfo extends LitElement { .triggerlistitem { margin-bottom: 12px; } + ha-formfield { + display: block; + } `, ]; } diff --git a/src/panels/config/lovelace/dashboards/dialog-lovelace-dashboard-detail.ts b/src/panels/config/lovelace/dashboards/dialog-lovelace-dashboard-detail.ts index 3ecf330d99..a99cf2c359 100644 --- a/src/panels/config/lovelace/dashboards/dialog-lovelace-dashboard-detail.ts +++ b/src/panels/config/lovelace/dashboards/dialog-lovelace-dashboard-detail.ts @@ -318,6 +318,9 @@ export class DialogLovelaceDashboardDetail extends LitElement { ha-switch { padding: 16px 0; } + ha-formfield { + display: block; + } `, ]; } diff --git a/src/panels/logbook/ha-panel-logbook.ts b/src/panels/logbook/ha-panel-logbook.ts index 42dc369094..8adb2a6c82 100644 --- a/src/panels/logbook/ha-panel-logbook.ts +++ b/src/panels/logbook/ha-panel-logbook.ts @@ -59,12 +59,14 @@ export class HaPanelLogbook extends LitElement { start.setHours(start.getHours() - 2); start.setMinutes(0); start.setSeconds(0); + start.setMilliseconds(0); this._startDate = start; const end = new Date(); end.setHours(end.getHours() + 1); end.setMinutes(0); end.setSeconds(0); + end.setMilliseconds(0); this._endDate = end; } diff --git a/src/panels/lovelace/components/hui-card-options.ts b/src/panels/lovelace/components/hui-card-options.ts index 243f7ba60f..0416697a59 100644 --- a/src/panels/lovelace/components/hui-card-options.ts +++ b/src/panels/lovelace/components/hui-card-options.ts @@ -136,19 +136,12 @@ export class HuiCardOptions extends LitElement { color: var(--disabled-text-color); } - paper-item.header { - color: var(--primary-text-color); - text-transform: uppercase; - font-weight: 500; - font-size: 14px; - } - - paper-item { + mwc-list-item { cursor: pointer; white-space: nowrap; } - paper-item.delete-item { + mwc-list-item.delete-item { color: var(--error-color); } `; diff --git a/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts b/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts index 8666f48327..c5ffaf0167 100755 --- a/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts +++ b/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts @@ -209,6 +209,7 @@ export class HuiDialogEditCard extends LitElement { ` : this.hass!.localize("ui.common.save")} @@ -291,8 +292,6 @@ export class HuiDialogEditCard extends LitElement { } mwc-button ha-circular-progress { - width: 14px; - height: 14px; margin-right: 20px; } .hidden { diff --git a/src/panels/lovelace/editor/config-elements/hui-button-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-button-card-editor.ts index f281b43867..0b76abb66a 100644 --- a/src/panels/lovelace/editor/config-elements/hui-button-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-button-card-editor.ts @@ -107,11 +107,11 @@ export class HuiButtonCardEditor extends LitElement ${configElementStyle}
- - - - - + + + + +
px
+ >
px
- -
- ${this.hass.localize( + + ${this.hass.localize( "ui.panel.lovelace.editor.view.panel_mode.description" - )} + )} +
`; } @@ -181,6 +181,9 @@ export class HuiViewEditor extends LitElement { .panel { color: var(--secondary-text-color); } + ha-formfield { + display: block; + } `; } } diff --git a/translations/frontend/es.json b/translations/frontend/es.json index 1600140cb9..ae82017897 100644 --- a/translations/frontend/es.json +++ b/translations/frontend/es.json @@ -527,7 +527,7 @@ }, "date-range-picker": { "end_date": "Fecha de finalización", - "select": "Seleccione", + "select": "Seleccionar", "start_date": "Fecha de inicio" }, "device-picker": { diff --git a/translations/frontend/it.json b/translations/frontend/it.json index 7e8c166117..b3c80f8041 100644 --- a/translations/frontend/it.json +++ b/translations/frontend/it.json @@ -2198,6 +2198,10 @@ "description": "La scheda Pila Orizzontale consente di raggruppare insieme più schede, in modo che siano sempre l'una accanto all'altra nello spazio di una colonna.", "name": "Pila orizzontale" }, + "humidifier": { + "description": "La scheda Umidificatore fornisce il controllo della tua entità umidificatore, consentendo di modificare l'umidità e la modalità dell'entità.", + "name": "Umidificatore" + }, "iframe": { "description": "La scheda Pagina Web consente di incorporare la pagina Web preferita direttamente in Home Assistant.", "name": "Pagina web" diff --git a/translations/frontend/nl.json b/translations/frontend/nl.json index 4738cbdf80..02a13c7da4 100644 --- a/translations/frontend/nl.json +++ b/translations/frontend/nl.json @@ -48,6 +48,19 @@ "none": "Geen", "sleep": "Slapen" } + }, + "humidifier": { + "mode": { + "auto": "Auto", + "away": "Afwezig", + "baby": "Baby", + "boost": "Boost", + "comfort": "Comfort", + "eco": "Eco", + "home": "Thuis", + "normal": "Normaal", + "sleep": "Slapen" + } } }, "state_badge": { @@ -388,6 +401,12 @@ "reverse": "Omkeren", "speed": "Snelheid" }, + "humidifier": { + "humidity": "Doel luchtvochtigheid", + "mode": "Modus", + "on_entity": "{name} aan", + "target_humidity_entity": "{name} doel luchtvochtigheid" + }, "light": { "brightness": "Helderheid", "color_temperature": "Kleurtemperatuur", @@ -506,6 +525,11 @@ "clear": "Wis", "show_areas": "Toon gebieden" }, + "date-range-picker": { + "end_date": "Einddatum", + "select": "Selecteer", + "start_date": "Startdatum" + }, "device-picker": { "clear": "Wis", "device": "Apparaat", @@ -695,6 +719,7 @@ "zha_device_info": { "buttons": { "add": "Apparaten toevoegen via dit apparaat", + "clusters": "Clusters beheren", "reconfigure": "Apparaat opnieuw configureren", "remove": "Verwijder apparaat", "zigbee_information": "Zigbee-apparaathandtekening" @@ -744,7 +769,7 @@ "connection_lost": "Verbinding verbroken. Opnieuw verbinden...", "service_call_failed": "Kan service {service} niet aanroepen", "started": "Home Assistant is gestart!", - "starting": "Home Assistant is aan het opstarten, nog niet alles is beschikbaar tot dit is voltooid.", + "starting": "Home Assistant is aan het opstarten. Gedurende het opstarten zal niet alles beschikbaar zijn.", "triggered": "Geactiveerd {name}" }, "panel": { @@ -1391,6 +1416,11 @@ "system_health_error": "De systeemstatus component is niet geladen. Voeg ' system_health: ' toe aan het configuratiebestand.", "title": "Info" }, + "integration_panel_move": { + "link_integration_page": "integraties pagina", + "missing_zha": "Mis je de ZHA configuratie? Dit is verplaatst naar de ZHA integratie op de {integrations_page}.", + "missing_zwave": "Mis je de Z-Wave configuratie? Dit is verplaatst naar de Z-Wave integratie op de {integrations_page}." + }, "integrations": { "add_integration": "Integratie toevoegen", "caption": "Integraties", @@ -1553,6 +1583,7 @@ } }, "mqtt": { + "button": "Configureer", "description_listen": "Luisteren naar onderwerp", "description_publish": "Publiceer een pakket", "listening_to": "Luisteren naar", @@ -1673,6 +1704,11 @@ "core": "Herlaad locatie en aanpassingen", "group": "Herlaad groepen", "heading": "Configuratie herladen", + "input_boolean": "Herlaad input booleans", + "input_datetime": "Herlaad input date times", + "input_number": "Herlaad input numbers", + "input_select": "Herlaad input selects", + "input_text": "Herlaad input texts", "introduction": "Sommige delen van Home Assistant kunnen opnieuw worden geladen zonder dat een herstart vereist is. Als je herladen gebruikt, wordt de huidige configuratie leeggemaakt en wordt de nieuwe geladen.", "person": "Herlaad personen", "scene": "Herlaad scenes", @@ -1732,13 +1768,15 @@ "system": "Systeem" } }, - "users_privileges_note": "Gebruikersgroepen zijn nog werk in uitvoering. De gebruiker kan de instantie niet beheren via de interface. We zijn bezig met het uitvoeren van een audit om verzekerd te zijn dat de management API-eindpunten toegang voor beheerders correct beperken." + "users_privileges_note": "Gebruikersgroepen zijn nog in ontwikkeling. De gebruiker kan de instantie niet beheren via de interface. We zijn bezig met het controleren van de API-eindpunten toegang voor beheerders." }, "zha": { "add_device_page": { "discovered_text": "Apparaten zullen hier verschijnen zodra ze zijn ontdekt.", "discovery_text": "Gevonden apparaten worden hier weergegeven. Volg de instructies voor je apparaat of apparaten en plaats het apparaat of de apparaten in de koppelingsmodus.", "header": "Zigbee Home Automation - Apparaten toevoegen", + "no_devices_found": "Geen apparaten gevonden, zorg ervoor dat ze in de koppelingsmodus staan en dat gedurende het ontdekken ze actief zijn.", + "pairing_mode": "Zorg ervoor dat de apparaten in de koppelingsmodus staan. Kijk in de instructies van het apparaat hoe dit moet.", "search_again": "Opnieuw zoeken", "spinner": "Zoeken naar ZHA Zigbee-apparaten ..." }, @@ -2001,11 +2039,23 @@ }, "history": { "period": "Periode", + "ranges": { + "last_week": "Vorige week", + "this_week": "Deze week", + "today": "Vandaag", + "yesterday": "Gisteren" + }, "showing_entries": "Toon items voor" }, "logbook": { "entries_not_found": "Geen logboekvermeldingen gevonden.", "period": "Periode", + "ranges": { + "last_week": "Vorige week", + "this_week": "Deze week", + "today": "Vandaag", + "yesterday": "Gisteren" + }, "showing_entries": "Toont gegevens van" }, "lovelace": { @@ -2145,6 +2195,10 @@ "description": "Met de Horizontal Stack-kaart kun je meerdere kaarten op elkaar stapelen, zodat ze altijd naast elkaar in de ruimte van één kolom zitten.", "name": "Horizontale stapel" }, + "humidifier": { + "description": "De luchtbevochtiger-kaart geeft controle over de entiteit van de luchtbevochtiger. Hiermee kun je de vochtigheid en de modus van de entiteit wijzigen.", + "name": "Bevochtiger" + }, "iframe": { "description": "Met de Webpage-kaart kunt u uw favoriete webpagina rechtstreeks in de Home Assistant insluiten.", "name": "Webpagina" diff --git a/translations/frontend/zh-Hant.json b/translations/frontend/zh-Hant.json index faa6554c7b..f770aadf86 100644 --- a/translations/frontend/zh-Hant.json +++ b/translations/frontend/zh-Hant.json @@ -48,6 +48,19 @@ "none": "無", "sleep": "睡眠" } + }, + "humidifier": { + "mode": { + "auto": "自動模式", + "away": "離家模式", + "baby": "孩童模式", + "boost": "全速模式", + "comfort": "舒適模式", + "eco": "節能模式", + "home": "居家模式", + "normal": "一般模式", + "sleep": "睡眠模式" + } } }, "state_badge": { @@ -388,6 +401,12 @@ "reverse": "反向", "speed": "風速" }, + "humidifier": { + "humidity": "設定濕度", + "mode": "模式", + "on_entity": "{name} 已開啟", + "target_humidity_entity": "{name} 設定濕度" + }, "light": { "brightness": "亮度", "color_temperature": "色溫", @@ -2198,6 +2217,10 @@ "description": "水平排列面板可供將多個面板排列、同時顯示。", "name": "水平排列面板" }, + "humidifier": { + "description": "加濕器面板可供控制加濕物件、可允許變更濕度與模式。", + "name": "加濕器" + }, "iframe": { "description": "網頁面板可供於 Home Assistant 嵌入喜愛的網頁。", "name": "網頁面板" diff --git a/yarn.lock b/yarn.lock index 9882f3ec8f..9c72bc22ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6683,10 +6683,10 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -home-assistant-js-websocket@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-5.4.0.tgz#637321ba47138562716290404adfa921d8d525dc" - integrity sha512-/sMJZwKTkoDvCljBTwGRiZy67ODZua/xYNH61n4zmX3Lcgb1D/zRDiJtwvW+g//BO/RAsNR5GulbUOdDrqmQlA== +home-assistant-js-websocket@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-5.4.1.tgz#3f677391b38e4feb24f1670e3a9b695767332a51" + integrity sha512-FTVoO5yMSa2dy1ffZDvJy/r79VTjwFOzyP/bPld5lDHKbNyXC8wgqpn8Kdf5ZQISYJf1T1dfH+v2NYEngn5NgQ== homedir-polyfill@^1.0.1: version "1.0.3"