diff --git a/src/data/lovelace_custom_cards.ts b/src/data/lovelace_custom_cards.ts new file mode 100644 index 0000000000..2e021e7a6f --- /dev/null +++ b/src/data/lovelace_custom_cards.ts @@ -0,0 +1,23 @@ +export interface CustomCardEntry { + type: string; + name?: string; + description?: string; + preview?: boolean; +} + +export interface CustomCardsWindow { + customCards?: CustomCardEntry[]; +} + +export const CUSTOM_TYPE_PREFIX = "custom:"; + +const customCardsWindow = window as CustomCardsWindow; + +if (!("customCards" in customCardsWindow)) { + customCardsWindow.customCards = []; +} + +export const customCards = customCardsWindow.customCards!; + +export const getCustomCardEntry = (type: string) => + customCards.find((card) => card.type === type); diff --git a/src/panels/lovelace/create-element/create-element-base.ts b/src/panels/lovelace/create-element/create-element-base.ts index 4c8879b93c..c2c01cb279 100644 --- a/src/panels/lovelace/create-element/create-element-base.ts +++ b/src/panels/lovelace/create-element/create-element-base.ts @@ -17,8 +17,8 @@ import { fireEvent } from "../../../common/dom/fire_event"; import { LovelaceElementConfig, LovelaceElement } from "../elements/types"; import { LovelaceRow, LovelaceRowConfig } from "../entity-rows/types"; import { LovelaceHeaderFooterConfig } from "../header-footer/types"; +import { CUSTOM_TYPE_PREFIX } from "../../../data/lovelace_custom_cards"; -const CUSTOM_TYPE_PREFIX = "custom:"; const TIMEOUT = 2000; interface CreateElementConfigTypes { diff --git a/src/panels/lovelace/editor/card-editor/hui-card-picker.ts b/src/panels/lovelace/editor/card-editor/hui-card-picker.ts index 374c650016..b69ab18973 100644 --- a/src/panels/lovelace/editor/card-editor/hui-card-picker.ts +++ b/src/panels/lovelace/editor/card-editor/hui-card-picker.ts @@ -23,6 +23,11 @@ import { calcUnusedEntities, } from "../../common/compute-unused-entities"; import { UNKNOWN, UNAVAILABLE } from "../../../../data/entity"; +import { + customCards, + getCustomCardEntry, + CUSTOM_TYPE_PREFIX, +} from "../../../../data/lovelace_custom_cards"; const previewCards: string[] = [ "alarm-panel", @@ -100,6 +105,24 @@ export class HuiCardPicker extends LitElement { `; })} + ${customCards.length + ? html` +