diff --git a/src/auth/ha-auth-flow.ts b/src/auth/ha-auth-flow.ts index a189cf9ab3..eef3da0d33 100644 --- a/src/auth/ha-auth-flow.ts +++ b/src/auth/ha-auth-flow.ts @@ -314,7 +314,8 @@ class HaAuthFlow extends litLocalizeLiteMixin(LitElement) { } private _computeStepDescription(step: DataEntryFlowStepForm) { - const resourceKey = `ui.panel.page-authorize.form.providers.${step.handler[0]}.step.${step.step_id}.description`; + const resourceKey = + `ui.panel.page-authorize.form.providers.${step.handler[0]}.step.${step.step_id}.description` as const; const args: string[] = []; const placeholders = step.description_placeholders || {}; Object.keys(placeholders).forEach((key) => { diff --git a/src/common/translations/localize.ts b/src/common/translations/localize.ts index 13c5a2e49b..20be6e44db 100644 --- a/src/common/translations/localize.ts +++ b/src/common/translations/localize.ts @@ -11,7 +11,6 @@ import { getLocalLanguage } from "../../util/common-translation"; // Fixing component category will require tighter definition of types from backend and/or web socket export type LocalizeKeys = | FlattenObjectKeys> - | `${string}` | `panel.${string}` | `state.${string}` | `state_attributes.${string}` diff --git a/src/data/panel.ts b/src/data/panel.ts index b71721c71c..fb6013e0fd 100644 --- a/src/data/panel.ts +++ b/src/data/panel.ts @@ -21,16 +21,16 @@ export const getDefaultPanel = (hass: HomeAssistant): PanelInfo => ? hass.panels[hass.defaultPanel] : hass.panels[DEFAULT_PANEL]; -export const getPanelNameTranslationKey = (panel: PanelInfo): string => { +export const getPanelNameTranslationKey = (panel: PanelInfo) => { if (panel.url_path === "lovelace") { - return "panel.states"; + return "panel.states" as const; } if (panel.url_path === "profile") { - return "panel.profile"; + return "panel.profile" as const; } - return `panel.${panel.title}`; + return `panel.${panel.title}` as const; }; export const getPanelTitle = (hass: HomeAssistant): string | undefined => { diff --git a/src/dialogs/quick-bar/ha-quick-bar.ts b/src/dialogs/quick-bar/ha-quick-bar.ts index ee987044ab..7a49575171 100644 --- a/src/dialogs/quick-bar/ha-quick-bar.ts +++ b/src/dialogs/quick-bar/ha-quick-bar.ts @@ -550,7 +550,7 @@ export class QuickBar extends LitElement { } private _generateServerControlCommands(): CommandItem[] { - const serverActions = ["restart", "stop"]; + const serverActions = ["restart", "stop"] as const; return serverActions.map((action) => { const categoryKey: CommandItem["categoryKey"] = "server_control"; @@ -673,6 +673,7 @@ export class QuickBar extends LitElement { this.hass.localize( `ui.dialogs.quick-bar.commands.navigation.${name}` )) || + // @ts-expect-error (page.translationKey && this.hass.localize(page.translationKey)); if (caption) { diff --git a/src/panels/config/devices/device-detail/ha-device-actions-card.ts b/src/panels/config/devices/device-detail/ha-device-actions-card.ts index 4a85f1951a..6498b7df9a 100644 --- a/src/panels/config/devices/device-detail/ha-device-actions-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-actions-card.ts @@ -7,9 +7,9 @@ import { HaDeviceAutomationCard } from "./ha-device-automation-card"; @customElement("ha-device-actions-card") export class HaDeviceActionsCard extends HaDeviceAutomationCard { - protected type = "action"; + readonly type = "action"; - protected headerKey = "ui.panel.config.devices.automation.actions.caption"; + readonly headerKey = "ui.panel.config.devices.automation.actions.caption"; constructor() { super(localizeDeviceAutomationAction); diff --git a/src/panels/config/devices/device-detail/ha-device-automation-card.ts b/src/panels/config/devices/device-detail/ha-device-automation-card.ts index 369a31d405..dc22f8a1dc 100644 --- a/src/panels/config/devices/device-detail/ha-device-automation-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-automation-card.ts @@ -25,15 +25,15 @@ export abstract class HaDeviceAutomationCard< @property() public deviceId?: string; - @property() public script = false; + @property({ type: Boolean }) public script = false; - @property() public automations: T[] = []; + @property({ attribute: false }) public automations: T[] = []; @state() public _showSecondary = false; - protected headerKey = ""; + abstract headerKey: Parameters[0]; - protected type = ""; + abstract type: "action" | "condition" | "trigger"; private _localizeDeviceAutomation: ( hass: HomeAssistant, diff --git a/src/panels/config/devices/device-detail/ha-device-conditions-card.ts b/src/panels/config/devices/device-detail/ha-device-conditions-card.ts index 3ed9548e84..3fb7e150d3 100644 --- a/src/panels/config/devices/device-detail/ha-device-conditions-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-conditions-card.ts @@ -7,9 +7,9 @@ import { HaDeviceAutomationCard } from "./ha-device-automation-card"; @customElement("ha-device-conditions-card") export class HaDeviceConditionsCard extends HaDeviceAutomationCard { - protected type = "condition"; + readonly type = "condition"; - protected headerKey = "ui.panel.config.devices.automation.conditions.caption"; + readonly headerKey = "ui.panel.config.devices.automation.conditions.caption"; constructor() { super(localizeDeviceAutomationCondition); diff --git a/src/panels/config/devices/device-detail/ha-device-triggers-card.ts b/src/panels/config/devices/device-detail/ha-device-triggers-card.ts index bdf15ee03b..c65acc738a 100644 --- a/src/panels/config/devices/device-detail/ha-device-triggers-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-triggers-card.ts @@ -7,9 +7,9 @@ import { HaDeviceAutomationCard } from "./ha-device-automation-card"; @customElement("ha-device-triggers-card") export class HaDeviceTriggersCard extends HaDeviceAutomationCard { - protected type = "trigger"; + readonly type = "trigger"; - protected headerKey = "ui.panel.config.devices.automation.triggers.caption"; + readonly headerKey = "ui.panel.config.devices.automation.triggers.caption"; constructor() { super(localizeDeviceAutomationTrigger); diff --git a/src/panels/config/entities/dialog-entity-editor.ts b/src/panels/config/entities/dialog-entity-editor.ts index 8b1d412ec1..ec234961bb 100644 --- a/src/panels/config/entities/dialog-entity-editor.ts +++ b/src/panels/config/entities/dialog-entity-editor.ts @@ -31,7 +31,7 @@ interface Tabs { interface Tab { component: string; - translationKey: string; + translationKey: Parameters[0]; } @customElement("dialog-entity-editor") diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index a588af70d8..8681103d5c 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -494,7 +494,7 @@ class ZWaveJSConfigDashboard extends SubscribeMixin(LitElement) { private _renderErrorScreen() { const item = this._configEntry!; - let stateText: [string, ...unknown[]] | undefined; + let stateText: Parameters | undefined; let stateTextExtra: TemplateResult | string | undefined; if (item.disabled_by) { diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-node-config.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-node-config.ts index 5128f7fecd..771b260274 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-node-config.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-node-config.ts @@ -217,8 +217,7 @@ class ZWaveJSNodeConfig extends SubscribeMixin(LitElement) { slot="item-icon" > ${this.hass.localize( - "ui.panel.config.zwave_js.node_config.set_param_" + - result.status + `ui.panel.config.zwave_js.node_config.set_param_${result.status}` )} ${result.status === "error" && result.error ? html`
${result.error} ` diff --git a/src/panels/config/logs/dialog-system-log-detail.ts b/src/panels/config/logs/dialog-system-log-detail.ts index f73f0b8f43..42113c9772 100644 --- a/src/panels/config/logs/dialog-system-log-detail.ts +++ b/src/panels/config/logs/dialog-system-log-detail.ts @@ -74,7 +74,7 @@ class DialogSystemLogDetail extends LitElement { "level", html`${this.hass.localize( - "ui.panel.config.logs.level." + item.level.toLowerCase() + `ui.panel.config.logs.level.${item.level.toLowerCase()}` )}` ); diff --git a/src/panels/config/logs/system-log-card.ts b/src/panels/config/logs/system-log-card.ts index 617d1bf8a1..e2b2b8a10c 100644 --- a/src/panels/config/logs/system-log-card.ts +++ b/src/panels/config/logs/system-log-card.ts @@ -106,8 +106,7 @@ export class SystemLogCard extends LitElement { ${this._timestamp(item)} – ${html`(${this.hass.localize( - "ui.panel.config.logs.level." + - item.level.toLowerCase() + `ui.panel.config.logs.level.${item.level.toLowerCase()}` )}) `} ${integrations[idx] diff --git a/src/panels/lovelace/common/handle-action.ts b/src/panels/lovelace/common/handle-action.ts index ef489d49ca..6f8865f7d2 100644 --- a/src/panels/lovelace/common/handle-action.ts +++ b/src/panels/lovelace/common/handle-action.ts @@ -72,8 +72,7 @@ export const handleAction = async ( "action", serviceName || hass.localize( - "ui.panel.lovelace.editor.action-editor.actions." + - actionConfig.action + `ui.panel.lovelace.editor.action-editor.actions.${actionConfig.action}` ) || actionConfig.action ),