From 1e851e0e8c10bc94a3174a638e31bef1a7989c72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Wed, 17 Nov 2021 19:34:20 +0100 Subject: [PATCH] Remove customize UI (#10632) --- .../config/customize/ha-config-customize.ts | 88 ----- .../customize/ha-customize-attribute.js | 84 ---- .../customize/ha-form-customize-attributes.js | 34 -- .../config/customize/ha-form-customize.js | 362 ------------------ .../customize/types/ha-customize-array.js | 63 --- .../customize/types/ha-customize-boolean.js | 34 -- .../customize/types/ha-customize-icon.js | 40 -- .../customize/types/ha-customize-key-value.js | 45 --- .../customize/types/ha-customize-string.js | 35 -- .../config/entities/dialog-entity-editor.ts | 15 - src/panels/config/ha-entity-config.ts | 122 ------ src/panels/config/ha-panel-config.ts | 17 +- src/panels/my/ha-panel-my.ts | 3 +- src/translations/en.json | 24 -- 14 files changed, 4 insertions(+), 962 deletions(-) delete mode 100644 src/panels/config/customize/ha-config-customize.ts delete mode 100644 src/panels/config/customize/ha-customize-attribute.js delete mode 100644 src/panels/config/customize/ha-form-customize-attributes.js delete mode 100644 src/panels/config/customize/ha-form-customize.js delete mode 100644 src/panels/config/customize/types/ha-customize-array.js delete mode 100644 src/panels/config/customize/types/ha-customize-boolean.js delete mode 100644 src/panels/config/customize/types/ha-customize-icon.js delete mode 100644 src/panels/config/customize/types/ha-customize-key-value.js delete mode 100644 src/panels/config/customize/types/ha-customize-string.js delete mode 100644 src/panels/config/ha-entity-config.ts diff --git a/src/panels/config/customize/ha-config-customize.ts b/src/panels/config/customize/ha-config-customize.ts deleted file mode 100644 index 03fd6f17e9..0000000000 --- a/src/panels/config/customize/ha-config-customize.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; -import { property } from "lit/decorators"; -import "../../../components/ha-card"; -import "../../../layouts/hass-loading-screen"; -import "../../../layouts/hass-tabs-subpage"; -import { haStyle } from "../../../resources/styles"; -import { HomeAssistant, Route } from "../../../types"; -import { documentationUrl } from "../../../util/documentation-url"; -import "../ha-config-section"; -import "../ha-entity-config"; -import { configSections } from "../ha-panel-config"; -import "./ha-form-customize"; - -class HaConfigCustomize extends LitElement { - @property({ attribute: false }) public hass!: HomeAssistant; - - @property() public isWide?: boolean; - - @property() public narrow?: boolean; - - @property() public route!: Route; - - @property() private _selectedEntityId = ""; - - protected render(): TemplateResult { - return html` - - - - ${this.hass.localize("ui.panel.config.customize.picker.header")} - - - ${this.hass.localize( - "ui.panel.config.customize.picker.introduction" - )} -
- - ${this.hass.localize( - "ui.panel.config.customize.picker.documentation" - )} - -
- - -
- -
- `; - } - - protected firstUpdated(changedProps) { - super.firstUpdated(changedProps); - - if (!this.route.path.includes("/edit/")) { - return; - } - const routeSegments = this.route.path.split("/edit/"); - this._selectedEntityId = routeSegments.length > 1 ? routeSegments[1] : ""; - } - - static get styles(): CSSResultGroup { - return [ - haStyle, - css` - a { - color: var(--primary-color); - } - `, - ]; - } -} -customElements.define("ha-config-customize", HaConfigCustomize); diff --git a/src/panels/config/customize/ha-customize-attribute.js b/src/panels/config/customize/ha-customize-attribute.js deleted file mode 100644 index 6d53b06686..0000000000 --- a/src/panels/config/customize/ha-customize-attribute.js +++ /dev/null @@ -1,84 +0,0 @@ -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import "../../../components/ha-icon"; -import "../../../components/ha-icon-button"; -import hassAttributeUtil from "../../../util/hass-attributes-util"; -import "../ha-form-style"; -import "./types/ha-customize-array"; -import "./types/ha-customize-boolean"; -import "./types/ha-customize-icon"; -import "./types/ha-customize-key-value"; -import "./types/ha-customize-string"; - -class HaCustomizeAttribute extends PolymerElement { - static get template() { - return html` - -
- - - - `; - } - - static get properties() { - return { - item: { - type: Object, - notify: true, - observer: "itemObserver", - }, - }; - } - - tapButton() { - if (this.item.secondary) { - this.item = { ...this.item, secondary: false }; - } else { - this.item = { ...this.item, closed: true }; - } - } - - getIcon(secondary) { - return secondary ? "hass:pencil" : "hass:close"; - } - - itemObserver(item) { - const wrapper = this.$.wrapper; - const tag = hassAttributeUtil.TYPE_TO_TAG[item.type].toUpperCase(); - let child; - if (wrapper.lastChild && wrapper.lastChild.tagName === tag) { - child = wrapper.lastChild; - } else { - if (wrapper.lastChild) { - wrapper.removeChild(wrapper.lastChild); - } - // Creating an element with upper case works fine in Chrome, but in FF it doesn't immediately - // become a defined Custom Element. Polymer does that in some later pass. - this.$.child = child = document.createElement(tag.toLowerCase()); - child.className = "form-control"; - child.addEventListener("item-changed", () => { - this.item = { ...child.item }; - }); - } - child.setProperties({ item: this.item }); - if (child.parentNode === null) { - wrapper.appendChild(child); - } - } -} -customElements.define("ha-customize-attribute", HaCustomizeAttribute); diff --git a/src/panels/config/customize/ha-form-customize-attributes.js b/src/panels/config/customize/ha-form-customize-attributes.js deleted file mode 100644 index 2c0def4524..0000000000 --- a/src/panels/config/customize/ha-form-customize-attributes.js +++ /dev/null @@ -1,34 +0,0 @@ -import { MutableData } from "@polymer/polymer/lib/mixins/mutable-data"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import "./ha-customize-attribute"; - -class HaFormCustomizeAttributes extends MutableData(PolymerElement) { - static get template() { - return html` - - - `; - } - - static get properties() { - return { - attributes: { - type: Array, - notify: true, - }, - }; - } -} -customElements.define( - "ha-form-customize-attributes", - HaFormCustomizeAttributes -); diff --git a/src/panels/config/customize/ha-form-customize.js b/src/panels/config/customize/ha-form-customize.js deleted file mode 100644 index cd3278abeb..0000000000 --- a/src/panels/config/customize/ha-form-customize.js +++ /dev/null @@ -1,362 +0,0 @@ -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-listbox/paper-listbox"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { computeStateDomain } from "../../../common/entity/compute_state_domain"; -import LocalizeMixin from "../../../mixins/localize-mixin"; -import "../../../styles/polymer-ha-style"; -import { documentationUrl } from "../../../util/documentation-url"; -import hassAttributeUtil from "../../../util/hass-attributes-util"; -import "../ha-form-style"; -import "./ha-form-customize-attributes"; - -export class HaFormCustomize extends LocalizeMixin(PolymerElement) { - static get template() { - return html` - - - - - - - - `; - } - - static get properties() { - return { - hass: { - type: Object, - }, - - entity: Object, - - localAttributes: { - type: Array, - computed: "computeLocalAttributes(localConfig)", - }, - hasLocalAttributes: Boolean, - - globalAttributes: { - type: Array, - computed: "computeGlobalAttributes(localConfig, globalConfig)", - }, - hasGlobalAttributes: Boolean, - - existingAttributes: { - type: Array, - computed: - "computeExistingAttributes(localConfig, globalConfig, entity)", - }, - hasExistingAttributes: Boolean, - - newAttributes: { - type: Array, - value: [], - }, - hasNewAttributes: Boolean, - - newAttributesOptions: Array, - selectedNewAttribute: { - type: Number, - value: -1, - observer: "selectedNewAttributeObserver", - }, - - localConfig: Object, - globalConfig: Object, - }; - } - - static get observers() { - return [ - "attributesObserver(localAttributes.*, globalAttributes.*, existingAttributes.*, newAttributes.*)", - ]; - } - - _initOpenObject(key, value, secondary, config) { - return { - attribute: key, - value: value, - closed: false, - domain: computeStateDomain(this.entity), - secondary: secondary, - description: key, - ...config, - }; - } - - loadEntity(entity) { - this.entity = entity; - return this.hass - .callApi("GET", "config/customize/config/" + entity.entity_id) - .then((data) => { - this.localConfig = data.local; - this.globalConfig = data.global; - this.newAttributes = []; - }); - } - - saveEntity() { - const data = {}; - const attrs = this.localAttributes.concat( - this.globalAttributes, - this.existingAttributes, - this.newAttributes - ); - attrs.forEach((attr) => { - if ( - attr.closed || - attr.secondary || - !attr.attribute || - attr.value === null || - attr.value === undefined - ) - return; - const value = attr.type === "json" ? JSON.parse(attr.value) : attr.value; - if (value === null || value === undefined) return; - data[attr.attribute] = value; - }); - - const objectId = this.entity.entity_id; - return this.hass.callApi( - "POST", - "config/customize/config/" + objectId, - data - ); - } - - _computeSingleAttribute(key, value, secondary) { - const config = hassAttributeUtil.LOGIC_STATE_ATTRIBUTES[key] || { - type: hassAttributeUtil.UNKNOWN_TYPE, - }; - return this._initOpenObject( - key, - config.type === "json" ? JSON.stringify(value) : value, - secondary, - config - ); - } - - _computeAttributes(config, keys, secondary) { - return keys.map((key) => - this._computeSingleAttribute(key, config[key], secondary) - ); - } - - _computeDocumentationUrl(hass) { - return documentationUrl( - hass, - "/docs/configuration/customizing-devices/#customization-using-the-ui" - ); - } - - computeLocalAttributes(localConfig) { - if (!localConfig) return []; - const localKeys = Object.keys(localConfig); - const result = this._computeAttributes(localConfig, localKeys, false); - return result; - } - - computeGlobalAttributes(localConfig, globalConfig) { - if (!localConfig || !globalConfig) return []; - const localKeys = Object.keys(localConfig); - const globalKeys = Object.keys(globalConfig).filter( - (key) => !localKeys.includes(key) - ); - return this._computeAttributes(globalConfig, globalKeys, true); - } - - computeExistingAttributes(localConfig, globalConfig, entity) { - if (!localConfig || !globalConfig || !entity) return []; - const localKeys = Object.keys(localConfig); - const globalKeys = Object.keys(globalConfig); - const entityKeys = Object.keys(entity.attributes).filter( - (key) => !localKeys.includes(key) && !globalKeys.includes(key) - ); - return this._computeAttributes(entity.attributes, entityKeys, true); - } - - computeShowWarning(localConfig, globalConfig) { - if (!localConfig || !globalConfig) return false; - return Object.keys(localConfig).some( - (key) => - JSON.stringify(globalConfig[key]) !== JSON.stringify(localConfig[key]) - ); - } - - filterFromAttributes(attributes) { - return (key) => - !attributes || - attributes.every((attr) => attr.attribute !== key || attr.closed); - } - - getNewAttributesOptions( - localAttributes, - globalAttributes, - existingAttributes, - newAttributes - ) { - const knownKeys = Object.keys(hassAttributeUtil.LOGIC_STATE_ATTRIBUTES) - .filter((key) => { - const conf = hassAttributeUtil.LOGIC_STATE_ATTRIBUTES[key]; - return ( - conf && - (!conf.domains || - !this.entity || - conf.domains.includes(computeStateDomain(this.entity))) - ); - }) - .filter(this.filterFromAttributes(localAttributes)) - .filter(this.filterFromAttributes(globalAttributes)) - .filter(this.filterFromAttributes(existingAttributes)) - .filter(this.filterFromAttributes(newAttributes)); - return knownKeys.sort().concat("Other"); - } - - selectedNewAttributeObserver(selected) { - if (selected < 0) return; - const option = this.newAttributesOptions[selected]; - if (selected === this.newAttributesOptions.length - 1) { - // The "Other" option. - const attr = this._initOpenObject("", "", false /* secondary */, { - type: hassAttributeUtil.ADD_TYPE, - }); - this.push("newAttributes", attr); - this.selectedNewAttribute = -1; - return; - } - let result = this.localAttributes.findIndex( - (attr) => attr.attribute === option - ); - if (result >= 0) { - this.set("localAttributes." + result + ".closed", false); - this.selectedNewAttribute = -1; - return; - } - result = this.globalAttributes.findIndex( - (attr) => attr.attribute === option - ); - if (result >= 0) { - this.set("globalAttributes." + result + ".closed", false); - this.selectedNewAttribute = -1; - return; - } - result = this.existingAttributes.findIndex( - (attr) => attr.attribute === option - ); - if (result >= 0) { - this.set("existingAttributes." + result + ".closed", false); - this.selectedNewAttribute = -1; - return; - } - result = this.newAttributes.findIndex((attr) => attr.attribute === option); - if (result >= 0) { - this.set("newAttributes." + result + ".closed", false); - this.selectedNewAttribute = -1; - return; - } - const attr = this._computeSingleAttribute( - option, - "", - false /* secondary */ - ); - this.push("newAttributes", attr); - this.selectedNewAttribute = -1; - } - - attributesObserver() { - this.hasLocalAttributes = - this.localAttributes && this.localAttributes.some((attr) => !attr.closed); - this.hasGlobalAttributes = - this.globalAttributes && - this.globalAttributes.some((attr) => !attr.closed); - this.hasExistingAttributes = - this.existingAttributes && - this.existingAttributes.some((attr) => !attr.closed); - this.hasNewAttributes = - this.newAttributes && this.newAttributes.some((attr) => !attr.closed); - this.newAttributesOptions = this.getNewAttributesOptions( - this.localAttributes, - this.globalAttributes, - this.existingAttributes, - this.newAttributes - ); - } -} -customElements.define("ha-form-customize", HaFormCustomize); diff --git a/src/panels/config/customize/types/ha-customize-array.js b/src/panels/config/customize/types/ha-customize-array.js deleted file mode 100644 index fe7147d0e9..0000000000 --- a/src/panels/config/customize/types/ha-customize-array.js +++ /dev/null @@ -1,63 +0,0 @@ -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-listbox/paper-listbox"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { EventsMixin } from "../../../../mixins/events-mixin"; - -/* - * @appliesMixin EventsMixin - */ -class HaCustomizeArray extends EventsMixin(PolymerElement) { - static get template() { - return html` - - - - - - - `; - } - - static get properties() { - return { - item: { - type: Object, - notifies: true, - }, - }; - } - - getOptions(item) { - const domain = item.domain || "*"; - const options = item.options[domain] || item.options["*"]; - if (!options) { - this.item.type = "string"; - this.fire("item-changed"); - return []; - } - return options.sort(); - } - - computeSelected(item) { - const options = this.getOptions(item); - return options.indexOf(item.value); - } -} -customElements.define("ha-customize-array", HaCustomizeArray); diff --git a/src/panels/config/customize/types/ha-customize-boolean.js b/src/panels/config/customize/types/ha-customize-boolean.js deleted file mode 100644 index 803e6d8d21..0000000000 --- a/src/panels/config/customize/types/ha-customize-boolean.js +++ /dev/null @@ -1,34 +0,0 @@ -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import "../../../../components/ha-checkbox"; -import "../../../../components/ha-formfield"; - -class HaCustomizeBoolean extends PolymerElement { - static get template() { - return html` - - - - `; - } - - static get properties() { - return { - item: { - type: Object, - notifies: true, - }, - }; - } - - checkedChanged(ev) { - this.item.value = ev.target.checked; - } -} -customElements.define("ha-customize-boolean", HaCustomizeBoolean); diff --git a/src/panels/config/customize/types/ha-customize-icon.js b/src/panels/config/customize/types/ha-customize-icon.js deleted file mode 100644 index 86b32ed5bb..0000000000 --- a/src/panels/config/customize/types/ha-customize-icon.js +++ /dev/null @@ -1,40 +0,0 @@ -import "@polymer/paper-input/paper-input"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import "../../../../components/ha-icon"; - -class HaCustomizeIcon extends PolymerElement { - static get template() { - return html` - - - - - `; - } - - static get properties() { - return { - item: { - type: Object, - notifies: true, - }, - }; - } -} -customElements.define("ha-customize-icon", HaCustomizeIcon); diff --git a/src/panels/config/customize/types/ha-customize-key-value.js b/src/panels/config/customize/types/ha-customize-key-value.js deleted file mode 100644 index 528ee13694..0000000000 --- a/src/panels/config/customize/types/ha-customize-key-value.js +++ /dev/null @@ -1,45 +0,0 @@ -import "@polymer/paper-input/paper-input"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; - -class HaCustomizeKeyValue extends PolymerElement { - static get template() { - return html` - - - - - - `; - } - - static get properties() { - return { - item: { - type: Object, - notifies: true, - }, - }; - } -} -customElements.define("ha-customize-key-value", HaCustomizeKeyValue); diff --git a/src/panels/config/customize/types/ha-customize-string.js b/src/panels/config/customize/types/ha-customize-string.js deleted file mode 100644 index 72fb4a685c..0000000000 --- a/src/panels/config/customize/types/ha-customize-string.js +++ /dev/null @@ -1,35 +0,0 @@ -import "@polymer/paper-input/paper-input"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { formatAttributeName } from "../../../../util/hass-attributes-util"; - -class HaCustomizeString extends PolymerElement { - static get template() { - return html` - - - `; - } - - static get properties() { - return { - item: { - type: Object, - notifies: true, - }, - }; - } - - getLabel(item) { - return ( - formatAttributeName(item.description) + - (item.type === "json" ? " (JSON formatted)" : "") - ); - } -} -customElements.define("ha-customize-string", HaCustomizeString); diff --git a/src/panels/config/entities/dialog-entity-editor.ts b/src/panels/config/entities/dialog-entity-editor.ts index 74bae4b7cb..afe29c75cd 100644 --- a/src/panels/config/entities/dialog-entity-editor.ts +++ b/src/panels/config/entities/dialog-entity-editor.ts @@ -165,21 +165,6 @@ export class DialogEntityEditor extends LitElement { >${this.hass.localize("ui.dialogs.entity_registry.faq")}` )} - ${this.hass.userData?.showAdvanced - ? html`

- ${this.hass.localize( - "ui.dialogs.entity_registry.info_customize", - "customize_link", - html`${this.hass.localize( - "ui.dialogs.entity_registry.customize_link" - )}` - )}` - : ""} `; case "tab-related": diff --git a/src/panels/config/ha-entity-config.ts b/src/panels/config/ha-entity-config.ts deleted file mode 100644 index 87a3fa0687..0000000000 --- a/src/panels/config/ha-entity-config.ts +++ /dev/null @@ -1,122 +0,0 @@ -import "@material/mwc-button"; -import { - css, - CSSResultGroup, - html, - LitElement, - PropertyValues, - TemplateResult, -} from "lit"; -import { customElement, property, query } from "lit/decorators"; -import "../../components/buttons/ha-progress-button"; -import "../../components/entity/ha-entity-picker"; -import "../../components/ha-card"; -import "../../components/ha-circular-progress"; -import { haStyle } from "../../resources/styles"; -import "../../styles/polymer-ha-style"; -import type { HomeAssistant } from "../../types"; -import { HaFormCustomize } from "./customize/ha-form-customize"; - -@customElement("ha-entity-config") -export class HaEntityConfig extends LitElement { - @property({ attribute: false }) public hass!: HomeAssistant; - - @property() public selectedEntityId!: string; - - // False if no entity is selected or currently saving or loading - @property() private _formEditState = false; - - @query("#form") private _form!: HaFormCustomize; - - protected render(): TemplateResult { - return html` - -
- - - -
- - -
-
-
- - ${this.hass.localize("ui.common.save")} - -
-
- `; - } - - protected updated(changedProps: PropertyValues) { - super.updated(changedProps); - if ( - changedProps.has("selectedEntityId") && - changedProps.get("selectedEntityId") !== this.selectedEntityId - ) { - this._selectEntity(this.selectedEntityId); - this.requestUpdate(); - } - } - - private _selectedEntityChanged(ev) { - this._selectEntity(ev.target.value); - } - - private async _selectEntity(entityId?: string) { - if (!this._form || !entityId) return; - const entity = this.hass.states[entityId]; - if (!entity) return; - - this._formEditState = false; - await this._form.loadEntity(entity); - this._formEditState = true; - } - - private async _saveEntity(ev) { - if (!this._formEditState) return; - this._formEditState = false; - const button = ev.target; - button.progress = true; - - try { - await this._form.saveEntity(); - this._formEditState = true; - button.actionSuccess(); - } catch { - button.actionError(); - } finally { - button.progress = false; - } - } - - static get styles(): CSSResultGroup { - return [ - haStyle, - css` - ha-card { - direction: ltr; - } - - .form-placeholder { - height: 96px; - } - - .hidden { - display: none; - } - `, - ]; - } -} diff --git a/src/panels/config/ha-panel-config.ts b/src/panels/config/ha-panel-config.ts index a6a6b46126..54ef2ac080 100644 --- a/src/panels/config/ha-panel-config.ts +++ b/src/panels/config/ha-panel-config.ts @@ -10,7 +10,6 @@ import { mdiNfcVariant, mdiPalette, mdiPaletteSwatch, - mdiPencil, mdiPuzzle, mdiRobot, mdiScriptText, @@ -180,16 +179,6 @@ export const configSections: { [name: string]: PageNavigation[] } = { core: true, }, ], - advanced: [ - { - component: "customize", - path: "/config/customize", - translationKey: "ui.panel.config.customize.caption", - iconPath: mdiPencil, - core: true, - advancedOnly: true, - }, - ], }; @customElement("ha-panel-config") @@ -243,10 +232,8 @@ class HaPanelConfig extends HassRouterPage { tag: "ha-config-info", load: () => import("./info/ha-config-info"), }, - customize: { - tag: "ha-config-customize", - load: () => import("./customize/ha-config-customize"), - }, + // customize was removed in 2021.12, fallback to dashboard + customize: "dashboard", dashboard: { tag: "ha-config-dashboard", load: () => import("./dashboard/ha-config-dashboard"), diff --git a/src/panels/my/ha-panel-my.ts b/src/panels/my/ha-panel-my.ts index 07addd5bb5..d7be560e7b 100644 --- a/src/panels/my/ha-panel-my.ts +++ b/src/panels/my/ha-panel-my.ts @@ -141,7 +141,8 @@ const REDIRECTS: Redirects = { redirect: "/config/info", }, customize: { - redirect: "/config/customize", + // customize was removed in 2021.12, fallback to dashboard + redirect: "/config/dashboard", }, profile: { redirect: "/profile/dashboard", diff --git a/src/translations/en.json b/src/translations/en.json index 90cadb1735..bf077bdc02 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -601,7 +601,6 @@ "zone": "[%key:ui::panel::config::zone::caption%]", "users": "[%key:ui::panel::config::users::caption%]", "info": "[%key:ui::panel::config::info::caption%]", - "customize": "[%key:ui::panel::config::customize::caption%]", "blueprint": "[%key:ui::panel::config::blueprint::caption%]", "server_control": "[%key:ui::panel::config::server_control::caption%]" } @@ -687,8 +686,6 @@ "dismiss": "Dismiss", "no_unique_id": "This entity (''{entity_id}'') does not have a unique ID, therefore its settings cannot be managed from the UI. See the {faq_link} for more detail.", "faq": "documentation", - "info_customize": "You can overwrite some attributes in the {customize_link} section.", - "customize_link": "entity customizations", "editor": { "name": "Name", "icon": "Icon", @@ -1404,27 +1401,6 @@ } } }, - "customize": { - "caption": "Customizations", - "description": "Customize your entities", - "picker": { - "header": "Customizations", - "introduction": "Tweak per-entity attributes. Added/edited customizations will take effect immediately. Removed customizations will take effect when the entity is updated.", - "documentation": "Customization documentation" - }, - "warning": { - "include_sentence": "It seems that your configuration.yaml doesn't properly", - "include_link": "include customize.yaml", - "not_applied": "Changes made here are written in it, but will not be applied after a configuration reload unless the include is in place." - }, - "attributes_customize": "The following attributes are already set in customize.yaml", - "attributes_outside": "The following attributes are customized from outside of customize.yaml", - "different_include": "Possibly via a domain, a glob or a different include.", - "attributes_set": "The following attributes of the entity are set programmatically.", - "attributes_override": "You can override them if you like.", - "attributes_not_set": "The following attributes weren't set. Set them if you like.", - "pick_attribute": "Pick an attribute to override" - }, "automation": { "caption": "Automations", "description": "Create custom behavior rules for your home",