diff --git a/src/panels/lovelace/common/ha-card-condition-editor.ts b/src/panels/lovelace/common/ha-card-condition-editor.ts
index 301cc6131e..7209868ed4 100644
--- a/src/panels/lovelace/common/ha-card-condition-editor.ts
+++ b/src/panels/lovelace/common/ha-card-condition-editor.ts
@@ -8,7 +8,6 @@ import "../../../components/ha-yaml-editor";
import { haStyle } from "../../../resources/styles";
import type { HomeAssistant } from "../../../types";
import "./types/ha-card-condition-state";
-import "./types/ha-card-condition-responsive";
import { Condition } from "./validate-condition";
@customElement("ha-card-condition-editor")
diff --git a/src/panels/lovelace/common/types/ha-card-condition-responsive.ts b/src/panels/lovelace/common/types/ha-card-condition-responsive.ts
deleted file mode 100644
index 0b753c2b89..0000000000
--- a/src/panels/lovelace/common/types/ha-card-condition-responsive.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-import { html, LitElement, PropertyValues } from "lit";
-import { customElement, property } from "lit/decorators";
-import { assert, literal, number, object, optional } from "superstruct";
-import { fireEvent } from "../../../../common/dom/fire_event";
-import "../../../../components/ha-form/ha-form";
-import type { SchemaUnion } from "../../../../components/ha-form/types";
-import { HaFormSchema } from "../../../../components/ha-form/types";
-import type { HomeAssistant } from "../../../../types";
-import { ResponsiveCondition } from "../validate-condition";
-
-const responsiveConditionStruct = object({
- condition: literal("responsive"),
- max_width: optional(number()),
- min_width: optional(number()),
-});
-
-const SCHEMA = [
- {
- name: "",
- type: "grid",
- schema: [
- {
- name: "min_width",
- selector: {
- number: {
- mode: "box",
- step: 1,
- unit_of_measurement: "px",
- },
- },
- },
- {
- name: "max_width",
- selector: {
- number: {
- mode: "box",
- step: 1,
- unit_of_measurement: "px",
- },
- },
- },
- ],
- },
-] as const satisfies readonly HaFormSchema[];
-
-@customElement("ha-card-condition-responsive")
-export class HaCardConditionResponsive extends LitElement {
- @property({ attribute: false }) public hass!: HomeAssistant;
-
- @property({ attribute: false }) public condition!: ResponsiveCondition;
-
- @property({ type: Boolean }) public disabled = false;
-
- public static get defaultConfig(): ResponsiveCondition {
- return { condition: "responsive" };
- }
-
- protected willUpdate(changedProperties: PropertyValues): void {
- if (!changedProperties.has("condition")) {
- return;
- }
- try {
- assert(this.condition, responsiveConditionStruct);
- } catch (err: any) {
- fireEvent(this, "ui-mode-not-available", err);
- }
- }
-
- protected render() {
- return html`
-
- `;
- }
-
- private _valueChanged(ev: CustomEvent): void {
- ev.stopPropagation();
- const data = ev.detail.value as ResponsiveCondition;
- fireEvent(this, "value-changed", { value: data });
- }
-
- private _computeLabelCallback = (
- schema: SchemaUnion
- ): string => {
- switch (schema.name) {
- case "min_width":
- case "max_width":
- return this.hass.localize(
- `ui.panel.lovelace.editor.card.conditional.${schema.name}`
- );
- default:
- return "";
- }
- };
-}
-
-declare global {
- interface HTMLElementTagNameMap {
- "ha-card-condition-responsive": HaCardConditionResponsive;
- }
-}
diff --git a/src/panels/lovelace/common/validate-condition.ts b/src/panels/lovelace/common/validate-condition.ts
index 66bb4d9f42..87e179260a 100644
--- a/src/panels/lovelace/common/validate-condition.ts
+++ b/src/panels/lovelace/common/validate-condition.ts
@@ -12,8 +12,7 @@ export type StateCondition = {
export type ResponsiveCondition = {
condition: "responsive";
- min_width?: number;
- max_width?: number;
+ media_query?: string;
};
function checkStateCondition(condition: StateCondition, hass: HomeAssistant) {
@@ -26,23 +25,11 @@ function checkStateCondition(condition: StateCondition, hass: HomeAssistant) {
: state !== condition.state_not;
}
-export function buildMediaQuery(condition: ResponsiveCondition) {
- const queries: string[] = [];
- if (condition.min_width != null) {
- queries.push(`(min-width: ${condition.min_width}px)`);
- }
- if (condition.max_width != null) {
- queries.push(`(max-width: ${condition.max_width}px)`);
- }
- return queries.join(" and ");
-}
-
function checkResponsiveCondition(
condition: ResponsiveCondition,
_hass: HomeAssistant
) {
- const query = buildMediaQuery(condition);
- return matchMedia(query).matches;
+ return matchMedia(condition.media_query ?? "").matches;
}
export function checkConditionsMet(
@@ -59,14 +46,14 @@ export function checkConditionsMet(
}
function valideStateCondition(condition: StateCondition) {
- return (condition.entity &&
- (condition.state != null ||
- condition.state_not != null)) as unknown as boolean;
+ return (
+ !!condition.entity &&
+ (condition.state != null || condition.state_not != null)
+ );
}
function valideResponsiveCondition(condition: ResponsiveCondition) {
- return (condition.min_width != null ||
- condition.max_width != null) as unknown as boolean;
+ return condition.media_query != null;
}
export function validateConditionalConfig(conditions: Condition[]): boolean {
diff --git a/src/panels/lovelace/components/hui-conditional-base.ts b/src/panels/lovelace/components/hui-conditional-base.ts
index 3392014400..228b114211 100644
--- a/src/panels/lovelace/components/hui-conditional-base.ts
+++ b/src/panels/lovelace/components/hui-conditional-base.ts
@@ -4,7 +4,6 @@ import { HomeAssistant } from "../../../types";
import { ConditionalCardConfig } from "../cards/types";
import {
ResponsiveCondition,
- buildMediaQuery,
checkConditionsMet,
validateConditionalConfig,
} from "../common/validate-condition";
@@ -82,7 +81,9 @@ export class HuiConditionalBase extends ReactiveElement {
(c) => c.condition === "responsive"
) as ResponsiveCondition[];
- const mediaQueries = conditions.map((c) => buildMediaQuery(c));
+ const mediaQueries = conditions
+ .map((c) => c.media_query ?? "")
+ .filter((m) => m !== "");
if (deepEqual(mediaQueries, this._mediaQueries)) return;