From fb97a98b97a12e1615987307069f98ad40a339fb Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 18 Aug 2021 06:27:15 +0200 Subject: [PATCH] Add `view_layout` to card structs, fix button entity row struct (#9834) --- .../hui-alarm-panel-card-editor.ts | 19 +++++---- .../config-elements/hui-button-card-editor.ts | 31 ++++++++------- .../hui-calendar-card-editor.ts | 18 +++++---- .../hui-conditional-card-editor.ts | 23 ++++++++--- .../hui-entities-card-editor.ts | 39 ++++++++++++------- .../config-elements/hui-entity-card-editor.ts | 25 ++++++------ .../config-elements/hui-gauge-card-editor.ts | 35 +++++++++++------ .../config-elements/hui-glance-card-editor.ts | 26 +++++++------ .../config-elements/hui-grid-card-editor.ts | 18 +++++---- .../hui-history-graph-card-editor.ts | 27 +++++++++---- .../hui-humidifier-card-editor.ts | 17 ++++---- .../config-elements/hui-iframe-card-editor.ts | 17 ++++---- .../config-elements/hui-light-card-editor.ts | 23 ++++++----- .../hui-logbook-card-editor.ts | 27 +++++++++---- .../config-elements/hui-map-card-editor.ts | 24 +++++++----- .../hui-markdown-card-editor.ts | 17 ++++---- .../hui-media-control-card-editor.ts | 15 ++++--- .../hui-picture-card-editor.ts | 19 +++++---- .../hui-picture-entity-card-editor.ts | 33 +++++++++------- .../hui-picture-glance-card-editor.ts | 31 ++++++++------- .../hui-plant-status-card-editor.ts | 17 ++++---- .../config-elements/hui-sensor-card-editor.ts | 27 +++++++------ .../hui-shopping-list-editor.ts | 15 ++++--- .../config-elements/hui-stack-card-editor.ts | 23 ++++++++--- .../hui-statistics-graph-card-editor.ts | 20 ++++++---- .../hui-thermostat-card-editor.ts | 17 ++++---- .../hui-weather-forecast-card-editor.ts | 27 +++++++------ .../editor/structs/base-card-struct.ts | 6 +++ 28 files changed, 388 insertions(+), 248 deletions(-) create mode 100644 src/panels/lovelace/editor/structs/base-card-struct.ts diff --git a/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts index 973bcfaa2f..7f2a1c00dc 100644 --- a/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts @@ -3,7 +3,7 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { array, assert, object, optional, string } from "superstruct"; +import { array, assert, assign, object, optional, string } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/ha-entity-picker"; import "../../../../components/ha-icon"; @@ -11,16 +11,19 @@ import { HomeAssistant } from "../../../../types"; import { AlarmPanelCardConfig } from "../../cards/types"; import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -const cardConfigStruct = object({ - type: string(), - entity: optional(string()), - name: optional(string()), - states: optional(array()), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entity: optional(string()), + name: optional(string()), + states: optional(array()), + theme: optional(string()), + }) +); const includeDomains = ["alarm_control_panel"]; 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 1947d7bb9a..48439e3d3e 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 @@ -1,7 +1,7 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, boolean, object, optional, string } from "superstruct"; +import { assert, boolean, object, optional, string, assign } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { stateIcon } from "../../../../common/entity/state_icon"; import { computeRTLDirection } from "../../../../common/util/compute_rtl"; @@ -18,20 +18,23 @@ import { LovelaceCardEditor } from "../../types"; import { actionConfigStruct } from "../structs/action-struct"; import { EditorTarget } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - entity: optional(string()), - name: optional(string()), - show_name: optional(boolean()), - icon: optional(string()), - show_icon: optional(boolean()), - icon_height: optional(string()), - tap_action: optional(actionConfigStruct), - hold_action: optional(actionConfigStruct), - theme: optional(string()), - show_state: optional(boolean()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entity: optional(string()), + name: optional(string()), + show_name: optional(boolean()), + icon: optional(string()), + show_icon: optional(boolean()), + icon_height: optional(string()), + tap_action: optional(actionConfigStruct), + hold_action: optional(actionConfigStruct), + theme: optional(string()), + show_state: optional(boolean()), + }) +); const actions = [ "more-info", diff --git a/src/panels/lovelace/editor/config-elements/hui-calendar-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-calendar-card-editor.ts index 75407bb633..5be36b9d66 100644 --- a/src/panels/lovelace/editor/config-elements/hui-calendar-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-calendar-card-editor.ts @@ -3,6 +3,7 @@ import { customElement, property, state } from "lit/decorators"; import { array, assert, + assign, boolean, object, optional, @@ -18,14 +19,17 @@ import "../../components/hui-theme-select-editor"; import type { LovelaceCardEditor } from "../../types"; import type { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - title: optional(union([string(), boolean()])), - initial_view: optional(string()), - theme: optional(string()), - entities: array(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + title: optional(union([string(), boolean()])), + initial_view: optional(string()), + theme: optional(string()), + entities: array(string()), + }) +); const views = ["dayGridMonth", "dayGridDay", "listWeek"]; diff --git a/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts index 345b224c93..7f43f545e1 100644 --- a/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts @@ -3,7 +3,15 @@ import "@material/mwc-tab/mwc-tab"; import type { MDCTabBarActivatedEvent } from "@material/tab-bar"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state, query } from "lit/decorators"; -import { any, array, assert, object, optional, string } from "superstruct"; +import { + any, + array, + assert, + assign, + object, + optional, + string, +} from "superstruct"; import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/ha-entity-picker"; import { LovelaceCardConfig, LovelaceConfig } from "../../../../data/lovelace"; @@ -15,6 +23,7 @@ import type { HuiCardElementEditor } from "../card-editor/hui-card-element-edito import "../card-editor/hui-card-picker"; import "../hui-element-editor"; import type { ConfigChangedEvent } from "../hui-element-editor"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { GUIModeChangedEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; @@ -23,11 +32,13 @@ const conditionStruct = object({ state: optional(string()), state_not: optional(string()), }); -const cardConfigStruct = object({ - type: string(), - card: any(), - conditions: optional(array(conditionStruct)), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + card: any(), + conditions: optional(array(conditionStruct)), + }) +); @customElement("hui-conditional-card-editor") export class HuiConditionalCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts index e29fd4d03e..0d6910602d 100644 --- a/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts @@ -9,6 +9,7 @@ import { array, assert, boolean, + assign, literal, number, object, @@ -44,10 +45,13 @@ import { SubElementEditorConfig, } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; const buttonEntitiesRowConfigStruct = object({ type: literal("button"), - name: string(), + entity: optional(string()), + name: optional(string()), + icon: optional(string()), action_name: optional(string()), tap_action: actionConfigStruct, hold_action: optional(actionConfigStruct), @@ -107,9 +111,14 @@ const buttonsEntitiesRowConfigStruct = object({ union([ object({ entity: string(), + name: optional(string()), icon: optional(string()), image: optional(string()), - name: optional(string()), + show_name: optional(boolean()), + show_icon: optional(boolean()), + tap_action: optional(actionConfigStruct), + hold_action: optional(actionConfigStruct), + double_tap_action: optional(actionConfigStruct), }), string(), ]) @@ -151,18 +160,20 @@ const entitiesRowConfigStruct = union([ customRowConfigStruct, ]); -const cardConfigStruct = object({ - type: string(), - title: optional(union([string(), boolean()])), - entity: optional(entityId()), - theme: optional(string()), - icon: optional(string()), - show_header_toggle: optional(boolean()), - state_color: optional(boolean()), - entities: array(entitiesRowConfigStruct), - header: optional(headerFooterConfigStructs), - footer: optional(headerFooterConfigStructs), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + title: optional(union([string(), boolean()])), + entity: optional(entityId()), + theme: optional(string()), + icon: optional(string()), + show_header_toggle: optional(boolean()), + state_color: optional(boolean()), + entities: array(entitiesRowConfigStruct), + header: optional(headerFooterConfigStructs), + footer: optional(headerFooterConfigStructs), + }) +); @customElement("hui-entities-card-editor") export class HuiEntitiesCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-entity-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-entity-card-editor.ts index 2cf14f0e42..55a033ef11 100644 --- a/src/panels/lovelace/editor/config-elements/hui-entity-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-entity-card-editor.ts @@ -1,7 +1,7 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, object, optional, string } from "superstruct"; +import { assert, object, optional, string, assign } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { stateIcon } from "../../../../common/entity/state_icon"; import "../../../../components/entity/ha-entity-attribute-picker"; @@ -15,17 +15,20 @@ import { headerFooterConfigStructs } from "../../header-footer/structs"; import { LovelaceCardEditor } from "../../types"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - entity: optional(string()), - name: optional(string()), - icon: optional(string()), - attribute: optional(string()), - unit: optional(string()), - theme: optional(string()), - footer: optional(headerFooterConfigStructs), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entity: optional(string()), + name: optional(string()), + icon: optional(string()), + attribute: optional(string()), + unit: optional(string()), + theme: optional(string()), + footer: optional(headerFooterConfigStructs), + }) +); @customElement("hui-entity-card-editor") export class HuiEntityCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts index 3776dee7b0..902e438247 100644 --- a/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts @@ -1,7 +1,15 @@ import "@polymer/paper-input/paper-input"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, boolean, number, object, optional, string } from "superstruct"; +import { + assert, + assign, + boolean, + number, + object, + optional, + string, +} from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { computeRTLDirection } from "../../../../common/util/compute_rtl"; import "../../../../components/ha-formfield"; @@ -11,20 +19,23 @@ import { GaugeCardConfig, SeverityConfig } from "../../cards/types"; import "../../components/hui-entity-editor"; import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -const cardConfigStruct = object({ - type: string(), - name: optional(string()), - entity: optional(string()), - unit: optional(string()), - min: optional(number()), - max: optional(number()), - severity: optional(object()), - theme: optional(string()), - needle: optional(boolean()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + name: optional(string()), + entity: optional(string()), + unit: optional(string()), + min: optional(number()), + max: optional(number()), + severity: optional(object()), + theme: optional(string()), + needle: optional(boolean()), + }) +); const includeDomains = ["counter", "input_number", "number", "sensor"]; diff --git a/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts index 91b6554666..22b068abbe 100644 --- a/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts @@ -12,6 +12,7 @@ import { optional, string, union, + assign, } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { computeRTLDirection } from "../../../../common/util/compute_rtl"; @@ -29,18 +30,21 @@ import { processEditorEntities } from "../process-editor-entities"; import { entitiesConfigStruct } from "../structs/entities-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - title: optional(union([string(), number()])), - theme: optional(string()), - columns: optional(number()), - show_name: optional(boolean()), - show_state: optional(boolean()), - show_icon: optional(boolean()), - state_color: optional(boolean()), - entities: array(entitiesConfigStruct), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + title: optional(union([string(), number()])), + theme: optional(string()), + columns: optional(number()), + show_name: optional(boolean()), + show_state: optional(boolean()), + show_icon: optional(boolean()), + state_color: optional(boolean()), + entities: array(entitiesConfigStruct), + }) +); @customElement("hui-glance-card-editor") export class HuiGlanceCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-grid-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-grid-card-editor.ts index 4d7f8262f4..1d45bce946 100644 --- a/src/panels/lovelace/editor/config-elements/hui-grid-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-grid-card-editor.ts @@ -4,6 +4,7 @@ import { any, array, assert, + assign, boolean, number, object, @@ -13,15 +14,18 @@ import { import { fireEvent } from "../../../../common/dom/fire_event"; import { computeRTLDirection } from "../../../../common/util/compute_rtl"; import { GridCardConfig } from "../../cards/types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { HuiStackCardEditor } from "./hui-stack-card-editor"; -const cardConfigStruct = object({ - type: string(), - cards: array(any()), - title: optional(string()), - square: optional(boolean()), - columns: optional(number()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + cards: array(any()), + title: optional(string()), + square: optional(boolean()), + columns: optional(number()), + }) +); @customElement("hui-grid-card-editor") export class HuiGridCardEditor extends HuiStackCardEditor { diff --git a/src/panels/lovelace/editor/config-elements/hui-history-graph-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-history-graph-card-editor.ts index 405277dd74..2be90322cf 100644 --- a/src/panels/lovelace/editor/config-elements/hui-history-graph-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-history-graph-card-editor.ts @@ -1,7 +1,15 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { array, assert, number, object, optional, string } from "superstruct"; +import { + array, + assert, + number, + object, + optional, + string, + assign, +} from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { HomeAssistant } from "../../../../types"; import { HistoryGraphCardConfig } from "../../cards/types"; @@ -12,14 +20,17 @@ import { processEditorEntities } from "../process-editor-entities"; import { entitiesConfigStruct } from "../structs/entities-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - entities: array(entitiesConfigStruct), - title: optional(string()), - hours_to_show: optional(number()), - refresh_interval: optional(number()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entities: array(entitiesConfigStruct), + title: optional(string()), + hours_to_show: optional(number()), + refresh_interval: optional(number()), + }) +); @customElement("hui-history-graph-card-editor") export class HuiHistoryGraphCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-humidifier-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-humidifier-card-editor.ts index 4fea25f1f9..874105247d 100644 --- a/src/panels/lovelace/editor/config-elements/hui-humidifier-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-humidifier-card-editor.ts @@ -1,22 +1,25 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, object, optional, string } from "superstruct"; +import { assert, assign, object, optional, string } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/ha-entity-picker"; import { HomeAssistant } from "../../../../types"; import { HumidifierCardConfig } from "../../cards/types"; import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -const cardConfigStruct = object({ - type: string(), - entity: optional(string()), - name: optional(string()), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entity: optional(string()), + name: optional(string()), + theme: optional(string()), + }) +); const includeDomains = ["humidifier"]; diff --git a/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts index 6028a62395..ade1266f61 100644 --- a/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts @@ -1,20 +1,23 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, object, optional, string } from "superstruct"; +import { assert, assign, object, optional, string } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { HomeAssistant } from "../../../../types"; import { IframeCardConfig } from "../../cards/types"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -const cardConfigStruct = object({ - type: string(), - title: optional(string()), - url: optional(string()), - aspect_ratio: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + title: optional(string()), + url: optional(string()), + aspect_ratio: optional(string()), + }) +); @customElement("hui-iframe-card-editor") export class HuiIframeCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts index 86e499f7bc..13f0f1bb0c 100644 --- a/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts @@ -1,7 +1,7 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, object, optional, string } from "superstruct"; +import { assert, object, optional, string, assign } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { stateIcon } from "../../../../common/entity/state_icon"; import "../../../../components/ha-icon-input"; @@ -15,16 +15,19 @@ import { LovelaceCardEditor } from "../../types"; import { actionConfigStruct } from "../structs/action-struct"; import { EditorTarget } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - name: optional(string()), - entity: optional(string()), - theme: optional(string()), - icon: optional(string()), - hold_action: optional(actionConfigStruct), - double_tap_action: optional(actionConfigStruct), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + name: optional(string()), + entity: optional(string()), + theme: optional(string()), + icon: optional(string()), + hold_action: optional(actionConfigStruct), + double_tap_action: optional(actionConfigStruct), + }) +); const includeDomains = ["light"]; diff --git a/src/panels/lovelace/editor/config-elements/hui-logbook-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-logbook-card-editor.ts index f99c840bb7..13887619c7 100644 --- a/src/panels/lovelace/editor/config-elements/hui-logbook-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-logbook-card-editor.ts @@ -1,7 +1,15 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { array, assert, number, object, optional, string } from "superstruct"; +import { + array, + assert, + assign, + number, + object, + optional, + string, +} from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/ha-entities-picker"; import "../../../../components/entity/ha-entity-picker"; @@ -10,16 +18,19 @@ import { LogbookCardConfig } from "../../cards/types"; import "../../components/hui-entity-editor"; import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget } from "../types"; import { configElementStyle } from "./config-elements-style"; -const cardConfigStruct = object({ - type: string(), - entities: optional(array(string())), - title: optional(string()), - hours_to_show: optional(number()), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entities: optional(array(string())), + title: optional(string()), + hours_to_show: optional(number()), + theme: optional(string()), + }) +); @customElement("hui-logbook-card-editor") export class HuiLogbookCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts index 6e1b26fe9a..18b54b2450 100644 --- a/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts @@ -9,6 +9,7 @@ import { object, optional, string, + assign, } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { computeRTLDirection } from "../../../../common/util/compute_rtl"; @@ -25,17 +26,20 @@ import { processEditorEntities } from "../process-editor-entities"; import { entitiesConfigStruct } from "../structs/entities-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - title: optional(string()), - aspect_ratio: optional(string()), - default_zoom: optional(number()), - dark_mode: optional(boolean()), - entities: array(entitiesConfigStruct), - hours_to_show: optional(number()), - geo_location_sources: optional(array(string())), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + title: optional(string()), + aspect_ratio: optional(string()), + default_zoom: optional(number()), + dark_mode: optional(boolean()), + entities: array(entitiesConfigStruct), + hours_to_show: optional(number()), + geo_location_sources: optional(array(string())), + }) +); @customElement("hui-map-card-editor") export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor { diff --git a/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts index 0f9461d19e..7d8e994fd0 100644 --- a/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts @@ -2,21 +2,24 @@ import "@polymer/paper-input/paper-input"; import "@polymer/paper-input/paper-textarea"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, object, optional, string } from "superstruct"; +import { assert, assign, object, optional, string } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { HomeAssistant } from "../../../../types"; import { MarkdownCardConfig } from "../../cards/types"; import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -const cardConfigStruct = object({ - type: string(), - title: optional(string()), - content: string(), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + title: optional(string()), + content: string(), + theme: optional(string()), + }) +); @customElement("hui-markdown-card-editor") export class HuiMarkdownCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts index 836c96150b..e1de9a0993 100644 --- a/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts @@ -1,19 +1,22 @@ import { html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, object, optional, string } from "superstruct"; +import { assert, assign, object, optional, string } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/ha-entity-picker"; import { HomeAssistant } from "../../../../types"; import { MediaControlCardConfig } from "../../cards/types"; import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; -const cardConfigStruct = object({ - type: string(), - entity: optional(string()), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entity: optional(string()), + theme: optional(string()), + }) +); const includeDomains = ["media_player"]; diff --git a/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts index 3faebebe89..9f6985c076 100644 --- a/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts @@ -1,7 +1,7 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, object, optional, string } from "superstruct"; +import { assert, object, optional, string, assign } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { ActionConfig } from "../../../../data/lovelace"; import { HomeAssistant } from "../../../../types"; @@ -12,14 +12,17 @@ import { LovelaceCardEditor } from "../../types"; import { actionConfigStruct } from "../structs/action-struct"; import { EditorTarget } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - image: optional(string()), - tap_action: optional(actionConfigStruct), - hold_action: optional(actionConfigStruct), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + image: optional(string()), + tap_action: optional(actionConfigStruct), + hold_action: optional(actionConfigStruct), + theme: optional(string()), + }) +); @customElement("hui-picture-card-editor") export class HuiPictureCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-picture-entity-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-picture-entity-card-editor.ts index 69428d273e..37a73d2630 100644 --- a/src/panels/lovelace/editor/config-elements/hui-picture-entity-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-picture-entity-card-editor.ts @@ -4,7 +4,7 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, boolean, object, optional, string } from "superstruct"; +import { assert, boolean, object, optional, string, assign } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { computeRTLDirection } from "../../../../common/util/compute_rtl"; import "../../../../components/ha-formfield"; @@ -19,21 +19,24 @@ import { LovelaceCardEditor } from "../../types"; import { actionConfigStruct } from "../structs/action-struct"; import { EditorTarget } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - entity: optional(string()), - image: optional(string()), - name: optional(string()), - camera_image: optional(string()), - camera_view: optional(string()), - aspect_ratio: optional(string()), - tap_action: optional(actionConfigStruct), - hold_action: optional(actionConfigStruct), - show_name: optional(boolean()), - show_state: optional(boolean()), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entity: optional(string()), + image: optional(string()), + name: optional(string()), + camera_image: optional(string()), + camera_view: optional(string()), + aspect_ratio: optional(string()), + tap_action: optional(actionConfigStruct), + hold_action: optional(actionConfigStruct), + show_name: optional(boolean()), + show_state: optional(boolean()), + theme: optional(string()), + }) +); const includeDomains = ["camera"]; diff --git a/src/panels/lovelace/editor/config-elements/hui-picture-glance-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-picture-glance-card-editor.ts index 37140e59b4..eb38a5a36b 100644 --- a/src/panels/lovelace/editor/config-elements/hui-picture-glance-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-picture-glance-card-editor.ts @@ -4,7 +4,7 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { array, assert, object, optional, string } from "superstruct"; +import { array, assert, object, optional, string, assign } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/ha-entity-picker"; import { ActionConfig } from "../../../../data/lovelace"; @@ -20,20 +20,23 @@ import { actionConfigStruct } from "../structs/action-struct"; import { entitiesConfigStruct } from "../structs/entities-struct"; import { EditorTarget } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - title: optional(string()), - entity: optional(string()), - image: optional(string()), - camera_image: optional(string()), - camera_view: optional(string()), - aspect_ratio: optional(string()), - tap_action: optional(actionConfigStruct), - hold_action: optional(actionConfigStruct), - entities: array(entitiesConfigStruct), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + title: optional(string()), + entity: optional(string()), + image: optional(string()), + camera_image: optional(string()), + camera_view: optional(string()), + aspect_ratio: optional(string()), + tap_action: optional(actionConfigStruct), + hold_action: optional(actionConfigStruct), + entities: array(entitiesConfigStruct), + theme: optional(string()), + }) +); const includeDomains = ["camera"]; diff --git a/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts index b7b39db62d..8145feda36 100644 --- a/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts @@ -1,7 +1,7 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, object, optional, string } from "superstruct"; +import { assert, assign, object, optional, string } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/ha-entity-picker"; import "../../../../components/ha-icon"; @@ -9,15 +9,18 @@ import { HomeAssistant } from "../../../../types"; import { PlantStatusCardConfig } from "../../cards/types"; import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -const cardConfigStruct = object({ - type: string(), - entity: optional(string()), - name: optional(string()), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entity: optional(string()), + name: optional(string()), + theme: optional(string()), + }) +); const includeDomains = ["plant"]; diff --git a/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts index 5049e9a964..2e6273e410 100644 --- a/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts @@ -4,7 +4,7 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, number, object, optional, string } from "superstruct"; +import { assert, assign, number, object, optional, string } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { stateIcon } from "../../../../common/entity/state_icon"; import "../../../../components/entity/ha-entity-picker"; @@ -15,20 +15,23 @@ import { HomeAssistant } from "../../../../types"; import { SensorCardConfig } from "../../cards/types"; import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -const cardConfigStruct = object({ - type: string(), - entity: optional(string()), - name: optional(string()), - icon: optional(string()), - graph: optional(string()), - unit: optional(string()), - detail: optional(number()), - theme: optional(string()), - hours_to_show: optional(number()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entity: optional(string()), + name: optional(string()), + icon: optional(string()), + graph: optional(string()), + unit: optional(string()), + detail: optional(number()), + theme: optional(string()), + hours_to_show: optional(number()), + }) +); const includeDomains = ["counter", "input_number", "number", "sensor"]; diff --git a/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts b/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts index 2b473c1198..2b1ca001a6 100644 --- a/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts @@ -1,20 +1,23 @@ import "@polymer/paper-input/paper-input"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, object, optional, string } from "superstruct"; +import { assert, assign, object, optional, string } from "superstruct"; import { isComponentLoaded } from "../../../../common/config/is_component_loaded"; import { fireEvent } from "../../../../common/dom/fire_event"; import { HomeAssistant } from "../../../../types"; import { ShoppingListCardConfig } from "../../cards/types"; import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; -const cardConfigStruct = object({ - type: string(), - title: optional(string()), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + title: optional(string()), + theme: optional(string()), + }) +); @customElement("hui-shopping-list-card-editor") export class HuiShoppingListEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts index 9115370c32..2c52f0a402 100644 --- a/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts @@ -3,7 +3,15 @@ import "@polymer/paper-tabs"; import "@polymer/paper-tabs/paper-tab"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state, query } from "lit/decorators"; -import { any, array, assert, object, optional, string } from "superstruct"; +import { + any, + array, + assert, + assign, + object, + optional, + string, +} from "superstruct"; import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event"; import { LovelaceCardConfig, LovelaceConfig } from "../../../../data/lovelace"; import { HomeAssistant } from "../../../../types"; @@ -13,14 +21,17 @@ import "../card-editor/hui-card-element-editor"; import type { HuiCardElementEditor } from "../card-editor/hui-card-element-editor"; import "../card-editor/hui-card-picker"; import type { ConfigChangedEvent } from "../hui-element-editor"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { GUIModeChangedEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -const cardConfigStruct = object({ - type: string(), - cards: array(any()), - title: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + cards: array(any()), + title: optional(string()), + }) +); @customElement("hui-stack-card-editor") export class HuiStackCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts index 4acd31bca9..9eab0ed1d7 100644 --- a/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts @@ -10,6 +10,7 @@ import { optional, string, union, + assign, } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { HomeAssistant } from "../../../../types"; @@ -25,6 +26,7 @@ import "../../../../components/ha-checkbox"; import { StatisticType } from "../../../../data/history"; import "../../../../components/ha-radio"; import type { HaRadio } from "../../../../components/ha-radio"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; const statTypeStruct = union([ literal("sum"), @@ -33,14 +35,16 @@ const statTypeStruct = union([ literal("mean"), ]); -const cardConfigStruct = object({ - type: string(), - entities: array(entitiesConfigStruct), - title: optional(string()), - days_to_show: optional(number()), - chart_type: optional(union([literal("bar"), literal("line")])), - stat_types: optional(union([array(statTypeStruct), statTypeStruct])), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entities: array(entitiesConfigStruct), + title: optional(string()), + days_to_show: optional(number()), + chart_type: optional(union([literal("bar"), literal("line")])), + stat_types: optional(union([array(statTypeStruct), statTypeStruct])), + }) +); @customElement("hui-statistics-graph-card-editor") export class HuiStatisticsGraphCardEditor diff --git a/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts index d965849951..b1b9846aa9 100644 --- a/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts @@ -1,22 +1,25 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, object, optional, string } from "superstruct"; +import { assert, assign, object, optional, string } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/ha-entity-picker"; import { HomeAssistant } from "../../../../types"; import { ThermostatCardConfig } from "../../cards/types"; import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -const cardConfigStruct = object({ - type: string(), - entity: optional(string()), - name: optional(string()), - theme: optional(string()), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entity: optional(string()), + name: optional(string()), + theme: optional(string()), + }) +); const includeDomains = ["climate"]; diff --git a/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts index e610847a4d..38ccd48d12 100644 --- a/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts @@ -1,6 +1,6 @@ import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, boolean, object, optional, string } from "superstruct"; +import { assert, boolean, object, optional, string, assign } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import { computeRTLDirection } from "../../../../common/util/compute_rtl"; import "../../../../components/entity/ha-entity-attribute-picker"; @@ -14,18 +14,21 @@ import { LovelaceCardEditor } from "../../types"; import { actionConfigStruct } from "../structs/action-struct"; import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; +import { baseLovelaceCardConfig } from "../structs/base-card-struct"; -const cardConfigStruct = object({ - type: string(), - entity: optional(string()), - name: optional(string()), - theme: optional(string()), - show_forecast: optional(boolean()), - secondary_info_attribute: optional(string()), - tap_action: optional(actionConfigStruct), - hold_action: optional(actionConfigStruct), - double_tap_action: optional(actionConfigStruct), -}); +const cardConfigStruct = assign( + baseLovelaceCardConfig, + object({ + entity: optional(string()), + name: optional(string()), + theme: optional(string()), + show_forecast: optional(boolean()), + secondary_info_attribute: optional(string()), + tap_action: optional(actionConfigStruct), + hold_action: optional(actionConfigStruct), + double_tap_action: optional(actionConfigStruct), + }) +); const includeDomains = ["weather"]; diff --git a/src/panels/lovelace/editor/structs/base-card-struct.ts b/src/panels/lovelace/editor/structs/base-card-struct.ts new file mode 100644 index 0000000000..49e18c3b05 --- /dev/null +++ b/src/panels/lovelace/editor/structs/base-card-struct.ts @@ -0,0 +1,6 @@ +import { object, string, any } from "superstruct"; + +export const baseLovelaceCardConfig = object({ + type: string(), + view_layout: any(), +});