mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-23 09:16:38 +00:00
commit
e7ac95e314
@ -137,14 +137,14 @@ export class HcMain extends HassElement {
|
|||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this._error = err;
|
this._error = this._getErrorMessage(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let connection;
|
let connection;
|
||||||
try {
|
try {
|
||||||
connection = await createConnection({ auth });
|
connection = await createConnection({ auth });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this._error = err;
|
this._error = this._getErrorMessage(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.hass) {
|
if (this.hass) {
|
||||||
@ -213,6 +213,23 @@ export class HcMain extends HassElement {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _getErrorMessage(error: number): string {
|
||||||
|
switch (error) {
|
||||||
|
case 1:
|
||||||
|
return "Unable to connect to the Home Assistant websocket API.";
|
||||||
|
case 2:
|
||||||
|
return "The supplied authentication is invalid.";
|
||||||
|
case 3:
|
||||||
|
return "The connection to Home Assistant was lost.";
|
||||||
|
case 4:
|
||||||
|
return "Missing hassUrl. This is required.";
|
||||||
|
case 5:
|
||||||
|
return "Home Assistant needs to be served over https:// to use with Home Assistant Cast.";
|
||||||
|
default:
|
||||||
|
return "Unknown Error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private _breakFree() {
|
private _breakFree() {
|
||||||
const controls = document.body.querySelector("touch-controls");
|
const controls = document.body.querySelector("touch-controls");
|
||||||
if (controls) {
|
if (controls) {
|
||||||
|
@ -115,10 +115,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
|
|||||||
attributes: {
|
attributes: {
|
||||||
friendly_name: "Abode Updates",
|
friendly_name: "Abode Updates",
|
||||||
icon: "hademo:security",
|
icon: "hademo:security",
|
||||||
templates: {
|
|
||||||
icon_color:
|
|
||||||
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"input_boolean.tv": {
|
"input_boolean.tv": {
|
||||||
@ -127,10 +123,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
|
|||||||
attributes: {
|
attributes: {
|
||||||
friendly_name: "TV",
|
friendly_name: "TV",
|
||||||
icon: "hademo:television",
|
icon: "hademo:television",
|
||||||
templates: {
|
|
||||||
icon_color:
|
|
||||||
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"input_boolean.homeautomation": {
|
"input_boolean.homeautomation": {
|
||||||
@ -139,10 +131,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
|
|||||||
attributes: {
|
attributes: {
|
||||||
friendly_name: "Home Automation",
|
friendly_name: "Home Automation",
|
||||||
icon: "hass:home-automation",
|
icon: "hass:home-automation",
|
||||||
templates: {
|
|
||||||
icon_color:
|
|
||||||
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"input_boolean.tvtime": {
|
"input_boolean.tvtime": {
|
||||||
@ -151,12 +139,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
|
|||||||
attributes: {
|
attributes: {
|
||||||
friendly_name: "TV Time",
|
friendly_name: "TV Time",
|
||||||
icon: "hademo:television-guide",
|
icon: "hademo:television-guide",
|
||||||
templates: {
|
|
||||||
icon:
|
|
||||||
"if (state === 'on') return 'hademo:television-classic'; return 'hademo:television-classic-off';\n",
|
|
||||||
icon_color:
|
|
||||||
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"input_select.livingroomharmony": {
|
"input_select.livingroomharmony": {
|
||||||
@ -560,12 +542,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
|
|||||||
state: "off",
|
state: "off",
|
||||||
attributes: {
|
attributes: {
|
||||||
friendly_name: "Driveway Light",
|
friendly_name: "Driveway Light",
|
||||||
templates: {
|
|
||||||
icon_color:
|
|
||||||
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
|
|
||||||
icon:
|
|
||||||
"if (state === 'on') return 'hademo:lightbulb-on'; return 'hademo:lightbulb';\n",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"switch.wemoporch": {
|
"switch.wemoporch": {
|
||||||
@ -573,12 +549,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
|
|||||||
state: "off",
|
state: "off",
|
||||||
attributes: {
|
attributes: {
|
||||||
friendly_name: "Porch Lights",
|
friendly_name: "Porch Lights",
|
||||||
templates: {
|
|
||||||
icon_color:
|
|
||||||
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
|
|
||||||
icon:
|
|
||||||
"if (state === 'on') return 'hademo:lightbulb-on'; return 'hademo:lightbulb';\n",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
"@material/mwc-checkbox": "^0.8.0",
|
"@material/mwc-checkbox": "^0.8.0",
|
||||||
"@material/mwc-fab": "^0.8.0",
|
"@material/mwc-fab": "^0.8.0",
|
||||||
"@material/mwc-ripple": "0.8.0",
|
"@material/mwc-ripple": "0.8.0",
|
||||||
"@mdi/svg": "4.3.95",
|
"@mdi/svg": "4.4.95",
|
||||||
"@polymer/app-layout": "^3.0.2",
|
"@polymer/app-layout": "^3.0.2",
|
||||||
"@polymer/app-localize-behavior": "^3.0.1",
|
"@polymer/app-localize-behavior": "^3.0.1",
|
||||||
"@polymer/app-route": "^3.0.2",
|
"@polymer/app-route": "^3.0.2",
|
||||||
|
2
setup.py
2
setup.py
@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="home-assistant-frontend",
|
name="home-assistant-frontend",
|
||||||
version="20190918.0",
|
version="20190918.1",
|
||||||
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",
|
||||||
|
@ -36,6 +36,7 @@ class MoreInfoSettings extends LocalizeMixin(EventsMixin(PolymerElement)) {
|
|||||||
app-toolbar mwc-button {
|
app-toolbar mwc-button {
|
||||||
font-size: 0.8em;
|
font-size: 0.8em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
--mdc-theme-primary: var(--more-info-header-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.form {
|
.form {
|
||||||
|
@ -35,6 +35,8 @@ import { EntityRegistryEntry } from "../../../data/entity_registry";
|
|||||||
import { ConfigEntry } from "../../../data/config_entries";
|
import { ConfigEntry } from "../../../data/config_entries";
|
||||||
import { AreaRegistryEntry } from "../../../data/area_registry";
|
import { AreaRegistryEntry } from "../../../data/area_registry";
|
||||||
import { navigate } from "../../../common/navigate";
|
import { navigate } from "../../../common/navigate";
|
||||||
|
import { LocalizeFunc } from "../../../common/translations/localize";
|
||||||
|
import computeStateName from "../../../common/entity/compute_state_name";
|
||||||
|
|
||||||
interface DeviceRowData extends DeviceRegistryEntry {
|
interface DeviceRowData extends DeviceRegistryEntry {
|
||||||
device?: DeviceRowData;
|
device?: DeviceRowData;
|
||||||
@ -43,6 +45,10 @@ interface DeviceRowData extends DeviceRegistryEntry {
|
|||||||
battery_entity?: string;
|
battery_entity?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface DeviceEntityLookup {
|
||||||
|
[deviceId: string]: EntityRegistryEntry[];
|
||||||
|
}
|
||||||
|
|
||||||
@customElement("ha-config-devices-dashboard")
|
@customElement("ha-config-devices-dashboard")
|
||||||
export class HaConfigDeviceDashboard extends LitElement {
|
export class HaConfigDeviceDashboard extends LitElement {
|
||||||
@property() public hass!: HomeAssistant;
|
@property() public hass!: HomeAssistant;
|
||||||
@ -59,37 +65,73 @@ export class HaConfigDeviceDashboard extends LitElement {
|
|||||||
entries: ConfigEntry[],
|
entries: ConfigEntry[],
|
||||||
entities: EntityRegistryEntry[],
|
entities: EntityRegistryEntry[],
|
||||||
areas: AreaRegistryEntry[],
|
areas: AreaRegistryEntry[],
|
||||||
domain: string
|
domain: string,
|
||||||
|
localize: LocalizeFunc
|
||||||
) => {
|
) => {
|
||||||
|
// Some older installations might have devices pointing at invalid entryIDs
|
||||||
|
// So we guard for that.
|
||||||
|
|
||||||
let outputDevices: DeviceRowData[] = devices;
|
let outputDevices: DeviceRowData[] = devices;
|
||||||
|
|
||||||
|
const deviceLookup: { [deviceId: string]: DeviceRegistryEntry } = {};
|
||||||
|
for (const device of devices) {
|
||||||
|
deviceLookup[device.id] = device;
|
||||||
|
}
|
||||||
|
|
||||||
|
const deviceEntityLookup: DeviceEntityLookup = {};
|
||||||
|
for (const entity of entities) {
|
||||||
|
if (!entity.device_id) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!(entity.device_id in deviceEntityLookup)) {
|
||||||
|
deviceEntityLookup[entity.device_id] = [];
|
||||||
|
}
|
||||||
|
deviceEntityLookup[entity.device_id].push(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
const entryLookup: { [entryId: string]: ConfigEntry } = {};
|
||||||
|
for (const entry of entries) {
|
||||||
|
entryLookup[entry.entry_id] = entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
const areaLookup: { [areaId: string]: AreaRegistryEntry } = {};
|
||||||
|
for (const area of areas) {
|
||||||
|
areaLookup[area.area_id] = area;
|
||||||
|
}
|
||||||
|
|
||||||
if (domain) {
|
if (domain) {
|
||||||
outputDevices = outputDevices.filter(
|
outputDevices = outputDevices.filter((device) =>
|
||||||
(device) =>
|
device.config_entries.find(
|
||||||
entries.find((entry) =>
|
(entryId) =>
|
||||||
device.config_entries.includes(entry.entry_id)
|
entryId in entryLookup && entryLookup[entryId].domain === domain
|
||||||
)!.domain === domain
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
outputDevices = outputDevices.map((device) => {
|
outputDevices = outputDevices.map((device) => {
|
||||||
const output = { ...device };
|
return {
|
||||||
output.name = device.name_by_user || device.name || "No name";
|
...device,
|
||||||
|
name:
|
||||||
output.area =
|
device.name_by_user ||
|
||||||
!areas || !device || !device.area_id
|
device.name ||
|
||||||
? "No area"
|
this._fallbackDeviceName(device.id, deviceEntityLookup) ||
|
||||||
: areas.find((area) => area.area_id === device.area_id)!.name;
|
"No name",
|
||||||
|
model: device.model || "<unknown>",
|
||||||
output.integration =
|
manufacturer: device.manufacturer || "<unknown>",
|
||||||
!entries || !device || !device.config_entries
|
area: device.area_id ? areaLookup[device.area_id].name : "No area",
|
||||||
? "No integration"
|
integration: device.config_entries.length
|
||||||
: entries.find((entry) =>
|
? device.config_entries
|
||||||
device.config_entries.includes(entry.entry_id)
|
.filter((entId) => entId in entryLookup)
|
||||||
)!.domain;
|
.map(
|
||||||
|
(entId) =>
|
||||||
output.battery_entity = this._batteryEntity(device, entities);
|
localize(
|
||||||
|
`component.${entryLookup[entId].domain}.config.title`
|
||||||
return output;
|
) || entryLookup[entId].domain
|
||||||
|
)
|
||||||
|
.join(", ")
|
||||||
|
: "No integration",
|
||||||
|
battery_entity: this._batteryEntity(device.id, deviceEntityLookup),
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
return outputDevices;
|
return outputDevices;
|
||||||
@ -171,7 +213,7 @@ export class HaConfigDeviceDashboard extends LitElement {
|
|||||||
></ha-state-icon>
|
></ha-state-icon>
|
||||||
`
|
`
|
||||||
: html`
|
: html`
|
||||||
n/a
|
-
|
||||||
`;
|
`;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -190,7 +232,8 @@ export class HaConfigDeviceDashboard extends LitElement {
|
|||||||
this.entries,
|
this.entries,
|
||||||
this.entities,
|
this.entities,
|
||||||
this.areas,
|
this.areas,
|
||||||
this.domain
|
this.domain,
|
||||||
|
this.hass.localize
|
||||||
).map((device: DeviceRowData) => {
|
).map((device: DeviceRowData) => {
|
||||||
// We don't need a lot of this data for mobile view, but kept it for filtering...
|
// We don't need a lot of this data for mobile view, but kept it for filtering...
|
||||||
const data: DataTabelRowData = {
|
const data: DataTabelRowData = {
|
||||||
@ -214,10 +257,12 @@ export class HaConfigDeviceDashboard extends LitElement {
|
|||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _batteryEntity(device, entities): string | undefined {
|
private _batteryEntity(
|
||||||
const batteryEntity = entities.find(
|
deviceId: string,
|
||||||
|
deviceEntityLookup: DeviceEntityLookup
|
||||||
|
): string | undefined {
|
||||||
|
const batteryEntity = (deviceEntityLookup[deviceId] || []).find(
|
||||||
(entity) =>
|
(entity) =>
|
||||||
entity.device_id === device.id &&
|
|
||||||
this.hass.states[entity.entity_id] &&
|
this.hass.states[entity.entity_id] &&
|
||||||
this.hass.states[entity.entity_id].attributes.device_class === "battery"
|
this.hass.states[entity.entity_id].attributes.device_class === "battery"
|
||||||
);
|
);
|
||||||
@ -225,6 +270,20 @@ export class HaConfigDeviceDashboard extends LitElement {
|
|||||||
return batteryEntity ? batteryEntity.entity_id : undefined;
|
return batteryEntity ? batteryEntity.entity_id : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _fallbackDeviceName(
|
||||||
|
deviceId: string,
|
||||||
|
deviceEntityLookup: DeviceEntityLookup
|
||||||
|
): string | undefined {
|
||||||
|
for (const entity of deviceEntityLookup[deviceId] || []) {
|
||||||
|
const stateObj = this.hass.states[entity.entity_id];
|
||||||
|
if (stateObj) {
|
||||||
|
return computeStateName(stateObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
private _handleRowClicked(ev: CustomEvent) {
|
private _handleRowClicked(ev: CustomEvent) {
|
||||||
const deviceId = (ev.detail as RowClickedEvent).id;
|
const deviceId = (ev.detail as RowClickedEvent).id;
|
||||||
navigate(this, `/config/devices/device/${deviceId}`);
|
navigate(this, `/config/devices/device/${deviceId}`);
|
||||||
|
@ -34,6 +34,7 @@ class HaConfigDevices extends HassRouterPage {
|
|||||||
routes: {
|
routes: {
|
||||||
dashboard: {
|
dashboard: {
|
||||||
tag: "ha-config-devices-dashboard",
|
tag: "ha-config-devices-dashboard",
|
||||||
|
cache: true,
|
||||||
},
|
},
|
||||||
device: {
|
device: {
|
||||||
tag: "ha-config-device-page",
|
tag: "ha-config-device-page",
|
||||||
@ -41,10 +42,10 @@ class HaConfigDevices extends HassRouterPage {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@property() private _configEntries?: ConfigEntry[];
|
@property() private _configEntries: ConfigEntry[] = [];
|
||||||
@property() private _entityRegistryEntries?: EntityRegistryEntry[];
|
@property() private _entityRegistryEntries: EntityRegistryEntry[] = [];
|
||||||
@property() private _deviceRegistryEntries?: DeviceRegistryEntry[];
|
@property() private _deviceRegistryEntries: DeviceRegistryEntry[] = [];
|
||||||
@property() private _areas?: AreaRegistryEntry[];
|
@property() private _areas: AreaRegistryEntry[] = [];
|
||||||
|
|
||||||
private _unsubs?: UnsubscribeFunc[];
|
private _unsubs?: UnsubscribeFunc[];
|
||||||
|
|
||||||
|
@ -37,25 +37,24 @@ import { HomeAssistant } from "../../../types";
|
|||||||
import { ConfigEntry } from "../../../data/config_entries";
|
import { ConfigEntry } from "../../../data/config_entries";
|
||||||
import { fireEvent } from "../../../common/dom/fire_event";
|
import { fireEvent } from "../../../common/dom/fire_event";
|
||||||
import { EntityRegistryEntry } from "../../../data/entity_registry";
|
import { EntityRegistryEntry } from "../../../data/entity_registry";
|
||||||
|
import { DataEntryFlowProgress } from "../../../data/data_entry_flow";
|
||||||
|
|
||||||
@customElement("ha-config-entries-dashboard")
|
@customElement("ha-config-entries-dashboard")
|
||||||
export class HaConfigManagerDashboard extends LitElement {
|
export class HaConfigManagerDashboard extends LitElement {
|
||||||
@property() public hass!: HomeAssistant;
|
@property() public hass!: HomeAssistant;
|
||||||
|
|
||||||
@property() public isWide = false;
|
@property() private configEntries!: ConfigEntry[];
|
||||||
|
|
||||||
@property() private entries = [];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entity Registry entries.
|
* Entity Registry entries.
|
||||||
*/
|
*/
|
||||||
@property() private entities: EntityRegistryEntry[] = [];
|
@property() private entityRegistryEntries!: EntityRegistryEntry[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Current flows that are in progress and have not been started by a user.
|
* Current flows that are in progress and have not been started by a user.
|
||||||
* For example, can be discovered devices that require more config.
|
* For example, can be discovered devices that require more config.
|
||||||
*/
|
*/
|
||||||
@property() private progress = [];
|
@property() private configEntriesInProgress!: DataEntryFlowProgress[];
|
||||||
|
|
||||||
public connectedCallback() {
|
public connectedCallback() {
|
||||||
super.connectedCallback();
|
super.connectedCallback();
|
||||||
@ -67,7 +66,7 @@ export class HaConfigManagerDashboard extends LitElement {
|
|||||||
<hass-subpage
|
<hass-subpage
|
||||||
header=${this.hass.localize("ui.panel.config.integrations.caption")}
|
header=${this.hass.localize("ui.panel.config.integrations.caption")}
|
||||||
>
|
>
|
||||||
${this.progress.length
|
${this.configEntriesInProgress.length
|
||||||
? html`
|
? html`
|
||||||
<ha-config-section>
|
<ha-config-section>
|
||||||
<span slot="header"
|
<span slot="header"
|
||||||
@ -76,7 +75,7 @@ export class HaConfigManagerDashboard extends LitElement {
|
|||||||
)}</span
|
)}</span
|
||||||
>
|
>
|
||||||
<ha-card>
|
<ha-card>
|
||||||
${this.progress.map(
|
${this.configEntriesInProgress.map(
|
||||||
(flow) => html`
|
(flow) => html`
|
||||||
<div class="config-entry-row">
|
<div class="config-entry-row">
|
||||||
<paper-item-body>
|
<paper-item-body>
|
||||||
@ -102,8 +101,8 @@ export class HaConfigManagerDashboard extends LitElement {
|
|||||||
)}</span
|
)}</span
|
||||||
>
|
>
|
||||||
<ha-card>
|
<ha-card>
|
||||||
${this.entities.length
|
${this.entityRegistryEntries.length
|
||||||
? this.entries.map(
|
? this.configEntries.map(
|
||||||
(item: any, idx) => html`
|
(item: any, idx) => html`
|
||||||
<a
|
<a
|
||||||
href="/config/integrations/config_entry/${item.entry_id}"
|
href="/config/integrations/config_entry/${item.entry_id}"
|
||||||
@ -155,7 +154,6 @@ export class HaConfigManagerDashboard extends LitElement {
|
|||||||
title=${this.hass.localize("ui.panel.config.integrations.new")}
|
title=${this.hass.localize("ui.panel.config.integrations.new")}
|
||||||
@click=${this._createFlow}
|
@click=${this._createFlow}
|
||||||
?rtl=${computeRTL(this.hass!)}
|
?rtl=${computeRTL(this.hass!)}
|
||||||
?isWide=${this.isWide}
|
|
||||||
></ha-fab>
|
></ha-fab>
|
||||||
</hass-subpage>
|
</hass-subpage>
|
||||||
`;
|
`;
|
||||||
@ -175,11 +173,11 @@ export class HaConfigManagerDashboard extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _getEntities(configEntry: ConfigEntry): HassEntity[] {
|
private _getEntities(configEntry: ConfigEntry): HassEntity[] {
|
||||||
if (!this.entities) {
|
if (!this.entityRegistryEntries) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
const states: HassEntity[] = [];
|
const states: HassEntity[] = [];
|
||||||
this.entities.forEach((entity) => {
|
this.entityRegistryEntries.forEach((entity) => {
|
||||||
if (
|
if (
|
||||||
entity.config_entry_id === configEntry.entry_id &&
|
entity.config_entry_id === configEntry.entry_id &&
|
||||||
entity.entity_id in this.hass.states
|
entity.entity_id in this.hass.states
|
||||||
@ -217,21 +215,10 @@ export class HaConfigManagerDashboard extends LitElement {
|
|||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ha-fab[is-wide] {
|
|
||||||
bottom: 24px;
|
|
||||||
right: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
ha-fab[rtl] {
|
ha-fab[rtl] {
|
||||||
right: auto;
|
right: auto;
|
||||||
left: 16px;
|
left: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
ha-fab[rtl][is-wide] {
|
|
||||||
bottom: 24px;
|
|
||||||
right: auto;
|
|
||||||
left: 24px;
|
|
||||||
}
|
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import "@polymer/app-route/app-route";
|
import "@polymer/app-route/app-route";
|
||||||
|
import { property, customElement, PropertyValues } from "lit-element";
|
||||||
|
|
||||||
import "./ha-config-entries-dashboard";
|
import "./ha-config-entries-dashboard";
|
||||||
import "./config-entry/ha-config-entry-page";
|
import "./config-entry/ha-config-entry-page";
|
||||||
@ -11,7 +12,6 @@ import {
|
|||||||
HassRouterPage,
|
HassRouterPage,
|
||||||
RouterOptions,
|
RouterOptions,
|
||||||
} from "../../../layouts/hass-router-page";
|
} from "../../../layouts/hass-router-page";
|
||||||
import { property, customElement, PropertyValues } from "lit-element";
|
|
||||||
import { HomeAssistant } from "../../../types";
|
import { HomeAssistant } from "../../../types";
|
||||||
import { ConfigEntry, getConfigEntries } from "../../../data/config_entries";
|
import { ConfigEntry, getConfigEntries } from "../../../data/config_entries";
|
||||||
import {
|
import {
|
||||||
@ -42,7 +42,6 @@ class HaConfigIntegrations extends HassRouterPage {
|
|||||||
|
|
||||||
protected routerOptions: RouterOptions = {
|
protected routerOptions: RouterOptions = {
|
||||||
defaultPage: "dashboard",
|
defaultPage: "dashboard",
|
||||||
preloadAll: true,
|
|
||||||
routes: {
|
routes: {
|
||||||
dashboard: {
|
dashboard: {
|
||||||
tag: "ha-config-entries-dashboard",
|
tag: "ha-config-entries-dashboard",
|
||||||
@ -53,11 +52,11 @@ class HaConfigIntegrations extends HassRouterPage {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@property() private _configEntries?: ConfigEntry[];
|
@property() private _configEntries: ConfigEntry[] = [];
|
||||||
@property() private _configEntriesInProgress?: DataEntryFlowProgress[];
|
@property() private _configEntriesInProgress: DataEntryFlowProgress[] = [];
|
||||||
@property() private _entityRegistryEntries?: EntityRegistryEntry[];
|
@property() private _entityRegistryEntries: EntityRegistryEntry[] = [];
|
||||||
@property() private _deviceRegistryEntries?: DeviceRegistryEntry[];
|
@property() private _deviceRegistryEntries: DeviceRegistryEntry[] = [];
|
||||||
@property() private _areas?: AreaRegistryEntry[];
|
@property() private _areas: AreaRegistryEntry[] = [];
|
||||||
|
|
||||||
private _unsubs?: UnsubscribeFunc[];
|
private _unsubs?: UnsubscribeFunc[];
|
||||||
|
|
||||||
@ -98,15 +97,14 @@ class HaConfigIntegrations extends HassRouterPage {
|
|||||||
protected updatePageEl(pageEl) {
|
protected updatePageEl(pageEl) {
|
||||||
pageEl.hass = this.hass;
|
pageEl.hass = this.hass;
|
||||||
|
|
||||||
|
pageEl.entityRegistryEntries = this._entityRegistryEntries;
|
||||||
|
pageEl.configEntries = this._configEntries;
|
||||||
|
|
||||||
if (this._currentPage === "dashboard") {
|
if (this._currentPage === "dashboard") {
|
||||||
pageEl.entities = this._entityRegistryEntries;
|
pageEl.configEntriesInProgress = this._configEntriesInProgress;
|
||||||
pageEl.entries = this._configEntries;
|
|
||||||
pageEl.progress = this._configEntriesInProgress;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pageEl.entityRegistryEntries = this._entityRegistryEntries;
|
|
||||||
pageEl.configEntries = this._configEntries;
|
|
||||||
pageEl.configEntryId = this.routeTail.path.substr(1);
|
pageEl.configEntryId = this.routeTail.path.substr(1);
|
||||||
pageEl.deviceRegistryEntries = this._deviceRegistryEntries;
|
pageEl.deviceRegistryEntries = this._deviceRegistryEntries;
|
||||||
pageEl.areas = this._areas;
|
pageEl.areas = this._areas;
|
||||||
|
@ -39,7 +39,7 @@ export class HuiUnavailable extends LitElement {
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
font-size: 50px;
|
font-size: 24px;
|
||||||
color: var(--primary-text-color);
|
color: var(--primary-text-color);
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
-ms-transform: translate(-50%, -50%);
|
-ms-transform: translate(-50%, -50%);
|
||||||
|
@ -681,7 +681,7 @@
|
|||||||
},
|
},
|
||||||
"integrations": {
|
"integrations": {
|
||||||
"caption": "Integracions",
|
"caption": "Integracions",
|
||||||
"description": "Gestiona dispositius i serveis connectats",
|
"description": "Gestiona i configura la integració",
|
||||||
"discovered": "Descobertes",
|
"discovered": "Descobertes",
|
||||||
"configured": "Configurades",
|
"configured": "Configurades",
|
||||||
"new": "Configura una nova integració",
|
"new": "Configura una nova integració",
|
||||||
@ -805,6 +805,10 @@
|
|||||||
"confirm_stop": "Segur que vols aturar Home Assistant?"
|
"confirm_stop": "Segur que vols aturar Home Assistant?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"devices": {
|
||||||
|
"caption": "Dispositius",
|
||||||
|
"description": "Gestiona els dispositius connectats"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
@ -681,7 +681,7 @@
|
|||||||
},
|
},
|
||||||
"integrations": {
|
"integrations": {
|
||||||
"caption": "Integrations",
|
"caption": "Integrations",
|
||||||
"description": "Manage connected devices and services",
|
"description": "Manage and setup integrations",
|
||||||
"discovered": "Discovered",
|
"discovered": "Discovered",
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"new": "Set up a new integration",
|
"new": "Set up a new integration",
|
||||||
@ -805,6 +805,10 @@
|
|||||||
"confirm_stop": "Are you sure you want to stop Home Assistant?"
|
"confirm_stop": "Are you sure you want to stop Home Assistant?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"devices": {
|
||||||
|
"caption": "Devices",
|
||||||
|
"description": "Manage connected devices"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
@ -805,6 +805,10 @@
|
|||||||
"confirm_stop": "¿Seguro que quieres detener Home Assistant?"
|
"confirm_stop": "¿Seguro que quieres detener Home Assistant?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"devices": {
|
||||||
|
"caption": "Dispositivos",
|
||||||
|
"description": "Administrar dispositivos conectados"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
@ -1301,6 +1301,11 @@
|
|||||||
},
|
},
|
||||||
"config_entry_system_options": {
|
"config_entry_system_options": {
|
||||||
"title": "אפשרויות מערכת"
|
"title": "אפשרויות מערכת"
|
||||||
|
},
|
||||||
|
"zha_device_info": {
|
||||||
|
"services": {
|
||||||
|
"remove": "הסר מכשיר מרשת ה-ZigBee"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"auth_store": {
|
"auth_store": {
|
||||||
|
@ -681,7 +681,7 @@
|
|||||||
},
|
},
|
||||||
"integrations": {
|
"integrations": {
|
||||||
"caption": "통합 구성요소",
|
"caption": "통합 구성요소",
|
||||||
"description": "연결된 기기 및 서비스를 관리합니다",
|
"description": "통합 구성요소를 관리하고 설정합니다",
|
||||||
"discovered": "발견된 구성요소",
|
"discovered": "발견된 구성요소",
|
||||||
"configured": "설정된 구성요소",
|
"configured": "설정된 구성요소",
|
||||||
"new": "새로운 통합 구성요소 설정",
|
"new": "새로운 통합 구성요소 설정",
|
||||||
@ -805,6 +805,10 @@
|
|||||||
"confirm_stop": "Home Assistant 를 중지 하시겠습니까?"
|
"confirm_stop": "Home Assistant 를 중지 하시겠습니까?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"devices": {
|
||||||
|
"caption": "기기",
|
||||||
|
"description": "연결된 기기 관리"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
@ -805,6 +805,10 @@
|
|||||||
"confirm_stop": "Sécher fir Home Assistant ze stoppen?"
|
"confirm_stop": "Sécher fir Home Assistant ze stoppen?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"devices": {
|
||||||
|
"caption": "Apparater",
|
||||||
|
"description": "Verwalt verbonnen Apparater"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
@ -681,7 +681,7 @@
|
|||||||
},
|
},
|
||||||
"integrations": {
|
"integrations": {
|
||||||
"caption": "Integraties",
|
"caption": "Integraties",
|
||||||
"description": "Beheer verbonden apparaten en services",
|
"description": "Beheer en installeer integraties",
|
||||||
"discovered": "Ontdekt",
|
"discovered": "Ontdekt",
|
||||||
"configured": "Geconfigureerd",
|
"configured": "Geconfigureerd",
|
||||||
"new": "Stel een nieuwe integratie in",
|
"new": "Stel een nieuwe integratie in",
|
||||||
@ -805,6 +805,10 @@
|
|||||||
"confirm_stop": "Weet je zeker dat je Home Assistant wilt afsluiten?"
|
"confirm_stop": "Weet je zeker dat je Home Assistant wilt afsluiten?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"devices": {
|
||||||
|
"caption": "Apparaten",
|
||||||
|
"description": "Beheer verbonden apparaten"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
@ -544,6 +544,9 @@
|
|||||||
"label": "Zone",
|
"label": "Zone",
|
||||||
"entity": "Entitate cu localizare",
|
"entity": "Entitate cu localizare",
|
||||||
"zone": "Zone"
|
"zone": "Zone"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"label": "Dispozitiv"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"learn_more": "Aflați mai multe despre condiții"
|
"learn_more": "Aflați mai multe despre condiții"
|
||||||
@ -578,6 +581,9 @@
|
|||||||
"label": "Eveniment declansare",
|
"label": "Eveniment declansare",
|
||||||
"event": "Eveniment",
|
"event": "Eveniment",
|
||||||
"service_data": "Date serviciu"
|
"service_data": "Date serviciu"
|
||||||
|
},
|
||||||
|
"device_id": {
|
||||||
|
"label": "Dispozitiv"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"learn_more": "Aflați mai multe despre acțiuni"
|
"learn_more": "Aflați mai multe despre acțiuni"
|
||||||
@ -626,6 +632,8 @@
|
|||||||
"header": "Valoare nod"
|
"header": "Valoare nod"
|
||||||
},
|
},
|
||||||
"node_config": {
|
"node_config": {
|
||||||
|
"true": "Adevărat",
|
||||||
|
"false": "Fals",
|
||||||
"set_config_parameter": "Setați parametrul de configurare"
|
"set_config_parameter": "Setați parametrul de configurare"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -738,7 +746,9 @@
|
|||||||
"unavailable": "Această entitate nu este disponibilă momentan.",
|
"unavailable": "Această entitate nu este disponibilă momentan.",
|
||||||
"default_name": "Zonă nouă",
|
"default_name": "Zonă nouă",
|
||||||
"delete": "ȘTERGE",
|
"delete": "ȘTERGE",
|
||||||
"update": "ACTUALIZAȚI"
|
"update": "ACTUALIZAȚI",
|
||||||
|
"enabled_label": "Activează entitatea",
|
||||||
|
"enabled_description": "Entitățile dezactivate nu vof fi adăugate in Home Assistant"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"person": {
|
"person": {
|
||||||
@ -750,6 +760,26 @@
|
|||||||
"device_tracker_picked": "Urmăriți dispozitivul",
|
"device_tracker_picked": "Urmăriți dispozitivul",
|
||||||
"device_tracker_pick": "Alegeți dispozitivul pentru a urmări"
|
"device_tracker_pick": "Alegeți dispozitivul pentru a urmări"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"server_control": {
|
||||||
|
"caption": "Control server",
|
||||||
|
"description": "Repornește si oprește serverul Home Assistant",
|
||||||
|
"section": {
|
||||||
|
"validation": {
|
||||||
|
"heading": "Validare configurație",
|
||||||
|
"introduction": "Validați configurația dvs. dacă ați făcut recent unele modificări și doriți să vă asigurați că aceasta este validă",
|
||||||
|
"check_config": "Verificați configurația",
|
||||||
|
"valid": "Configurația este validă!",
|
||||||
|
"invalid": "Configurația este invalidă"
|
||||||
|
},
|
||||||
|
"reloading": {
|
||||||
|
"heading": "Reîncărcarea configurației",
|
||||||
|
"core": "Reîncărcați nucleul",
|
||||||
|
"group": "Reîncărcați grupurile",
|
||||||
|
"automation": "Reîncarcă automatizările",
|
||||||
|
"script": "Reîncărcați script-uri"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
@ -1090,7 +1120,7 @@
|
|||||||
"week": "{count}{count, plural,\n one { săptămână }\n other { săptămâni }\n}",
|
"week": "{count}{count, plural,\n one { săptămână }\n other { săptămâni }\n}",
|
||||||
"second": "{count} {count, plural,\none {secunda}\nother {secunde}\n}",
|
"second": "{count} {count, plural,\none {secunda}\nother {secunde}\n}",
|
||||||
"minute": "{count} {count, plural,\n one { minut }\n other { minute }\n}",
|
"minute": "{count} {count, plural,\n one { minut }\n other { minute }\n}",
|
||||||
"hour": "{count}{count, plural,\n one { zi }\n other { zile }\n}"
|
"hour": "{count}{count, plural,\n one { ora }\n other { ore }\n}"
|
||||||
},
|
},
|
||||||
"login-form": {
|
"login-form": {
|
||||||
"password": "Parola",
|
"password": "Parola",
|
||||||
@ -1159,7 +1189,8 @@
|
|||||||
"fan": {
|
"fan": {
|
||||||
"speed": "Viteză",
|
"speed": "Viteză",
|
||||||
"oscillate": "Oscilare",
|
"oscillate": "Oscilare",
|
||||||
"direction": "Direcţie"
|
"direction": "Direcţie",
|
||||||
|
"forward": "Înainte"
|
||||||
},
|
},
|
||||||
"light": {
|
"light": {
|
||||||
"brightness": "Luminozitate",
|
"brightness": "Luminozitate",
|
||||||
@ -1204,6 +1235,11 @@
|
|||||||
"target_temperature": "Temperatura țintă",
|
"target_temperature": "Temperatura țintă",
|
||||||
"operation": "Operație",
|
"operation": "Operație",
|
||||||
"away_mode": "Plecat"
|
"away_mode": "Plecat"
|
||||||
|
},
|
||||||
|
"timer": {
|
||||||
|
"actions": {
|
||||||
|
"finish": "Termina"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"components": {
|
"components": {
|
||||||
@ -1222,7 +1258,7 @@
|
|||||||
"duration": {
|
"duration": {
|
||||||
"second": "{count} {count, plural,\none {secunda}\nother {secunde}\n}",
|
"second": "{count} {count, plural,\none {secunda}\nother {secunde}\n}",
|
||||||
"minute": "{count} {count, plural,\n one { minut }\n other { minute }\n}",
|
"minute": "{count} {count, plural,\n one { minut }\n other { minute }\n}",
|
||||||
"hour": "{count}{count, plural,\n one { zi }\n other { zile }\n}",
|
"hour": "{count}{count, plural,\n one { ora }\n other { ore }\n}",
|
||||||
"day": "{count}{count, plural,\n one { zi }\n other { zile }\n}",
|
"day": "{count}{count, plural,\n one { zi }\n other { zile }\n}",
|
||||||
"week": "{count}{count, plural,\n one { săptămână }\n other { săptămâni }\n}"
|
"week": "{count}{count, plural,\n one { săptămână }\n other { săptămâni }\n}"
|
||||||
}
|
}
|
||||||
@ -1257,6 +1293,31 @@
|
|||||||
"updater": {
|
"updater": {
|
||||||
"title": "Actualizați instrucțiunile"
|
"title": "Actualizați instrucțiunile"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"options_flow": {
|
||||||
|
"form": {
|
||||||
|
"header": "Opțiuni"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"description": "Opțiunile salvate cu succes."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"config_entry_system_options": {
|
||||||
|
"title": "Setări de sistem",
|
||||||
|
"enable_new_entities_label": "Activează entitățile nou adăugate"
|
||||||
|
},
|
||||||
|
"zha_device_info": {
|
||||||
|
"manuf": "de {producator}",
|
||||||
|
"no_area": "Nici o zonă",
|
||||||
|
"services": {
|
||||||
|
"updateDeviceName": "Setați un nume personalizat pentru acest dispozitiv în registrul de dispozitive.",
|
||||||
|
"remove": "Eliminați un dispozitiv din rețeaua ZigBee."
|
||||||
|
},
|
||||||
|
"zha_device_card": {
|
||||||
|
"device_name_placeholder": "Nume dat de utilizator",
|
||||||
|
"area_picker_label": "Zonă",
|
||||||
|
"update_name_button": "Actualizați numele"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"auth_store": {
|
"auth_store": {
|
||||||
@ -1352,5 +1413,10 @@
|
|||||||
"system-admin": "Administratori",
|
"system-admin": "Administratori",
|
||||||
"system-users": "Utilizatori",
|
"system-users": "Utilizatori",
|
||||||
"system-read-only": "Utilizatori cu drepturi de citire"
|
"system-read-only": "Utilizatori cu drepturi de citire"
|
||||||
|
},
|
||||||
|
"config_entry": {
|
||||||
|
"disabled_by": {
|
||||||
|
"user": "Utilizator"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -681,7 +681,7 @@
|
|||||||
},
|
},
|
||||||
"integrations": {
|
"integrations": {
|
||||||
"caption": "Интеграции",
|
"caption": "Интеграции",
|
||||||
"description": "Управляйте подключенными устройствами и службами",
|
"description": "Добавляйте и настраивайте интеграции",
|
||||||
"discovered": "Обнаружено",
|
"discovered": "Обнаружено",
|
||||||
"configured": "Настроено",
|
"configured": "Настроено",
|
||||||
"new": "Интеграции",
|
"new": "Интеграции",
|
||||||
@ -805,6 +805,10 @@
|
|||||||
"confirm_stop": "Вы уверены, что хотите остановить Home Assistant?"
|
"confirm_stop": "Вы уверены, что хотите остановить Home Assistant?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"devices": {
|
||||||
|
"caption": "Устройства",
|
||||||
|
"description": "Управляйте подключенными устройствами"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
@ -348,7 +348,7 @@
|
|||||||
"description": "Skontrolujte Váš konfiguračný súbor a ovládajte server",
|
"description": "Skontrolujte Váš konfiguračný súbor a ovládajte server",
|
||||||
"section": {
|
"section": {
|
||||||
"core": {
|
"core": {
|
||||||
"header": "Konfigurácia a ovládanie servera",
|
"header": "Všeobecná konfigurácia",
|
||||||
"introduction": "Zmena konfigurácie môže byť ťažkým procesom. My vieme. Táto sekcia sa Vám pokúsi zjednodušiť život.",
|
"introduction": "Zmena konfigurácie môže byť ťažkým procesom. My vieme. Táto sekcia sa Vám pokúsi zjednodušiť život.",
|
||||||
"core_config": {
|
"core_config": {
|
||||||
"edit_requires_storage": "Editor je zablokovaný, pretože konfigurácia je uložená v configuration.yaml",
|
"edit_requires_storage": "Editor je zablokovaný, pretože konfigurácia je uložená v configuration.yaml",
|
||||||
@ -540,6 +540,9 @@
|
|||||||
"label": "Zóna",
|
"label": "Zóna",
|
||||||
"entity": "Entita s umiestnením",
|
"entity": "Entita s umiestnením",
|
||||||
"zone": "Zóna"
|
"zone": "Zóna"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"label": "Zariadenie"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"learn_more": "Získajte viac informácií o podmienkach"
|
"learn_more": "Získajte viac informácií o podmienkach"
|
||||||
@ -574,6 +577,9 @@
|
|||||||
"label": "Odpáliť udalosť",
|
"label": "Odpáliť udalosť",
|
||||||
"event": "Udalosť:",
|
"event": "Udalosť:",
|
||||||
"service_data": "Dáta služby"
|
"service_data": "Dáta služby"
|
||||||
|
},
|
||||||
|
"device_id": {
|
||||||
|
"label": "Zariadenie"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"learn_more": "Získajte viac informácií o akciách"
|
"learn_more": "Získajte viac informácií o akciách"
|
||||||
@ -1006,6 +1012,10 @@
|
|||||||
"save": "Uložiť",
|
"save": "Uložiť",
|
||||||
"unsaved_changes": "Neuložené zmeny",
|
"unsaved_changes": "Neuložené zmeny",
|
||||||
"saved": "Uložené"
|
"saved": "Uložené"
|
||||||
|
},
|
||||||
|
"edit_lovelace": {
|
||||||
|
"header": "Názov vášho Lovelace UI",
|
||||||
|
"explanation": "Tento názov sa zobrazuje nad všetkými vašimi zobrazeniami v Lovelace."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
@ -1249,6 +1259,12 @@
|
|||||||
"updater": {
|
"updater": {
|
||||||
"title": "Pokyny pre aktualizáciu"
|
"title": "Pokyny pre aktualizáciu"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"zha_device_info": {
|
||||||
|
"zha_device_card": {
|
||||||
|
"area_picker_label": "Oblasť",
|
||||||
|
"update_name_button": "Aktualizovať názov"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"auth_store": {
|
"auth_store": {
|
||||||
|
@ -699,10 +699,10 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@material/feature-targeting" "^3.1.0"
|
"@material/feature-targeting" "^3.1.0"
|
||||||
|
|
||||||
"@mdi/svg@4.3.95":
|
"@mdi/svg@4.4.95":
|
||||||
version "4.3.95"
|
version "4.4.95"
|
||||||
resolved "https://registry.yarnpkg.com/@mdi/svg/-/svg-4.3.95.tgz#f2121132baab9e8953ee7ef71834cbe2f03065bb"
|
resolved "https://registry.yarnpkg.com/@mdi/svg/-/svg-4.4.95.tgz#0af47ecd777deb75bd2e1514afa52cfbd81ac262"
|
||||||
integrity sha512-RRda3q+270vhiL0Nt7oyeGX03zndEzkGJQJSz8dny1Yjwx2iVRUz51Xop6PTBPaEH4csa3sRkFY3q2PeIa2fKg==
|
integrity sha512-ttQWCXZE8tAvqzFh4vijuuBJNbF2VsGB61rny5MAytWorqf0LKd3XyCrFxODi3uo/BH3Skb+7iXYav3E/9+sIw==
|
||||||
|
|
||||||
"@polymer/app-layout@^3.0.2":
|
"@polymer/app-layout@^3.0.2":
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user