button-card/src/types/lovelace.ts

236 lines
5.5 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-explicit-any */
import { HassEventBase, HassServiceTarget } from 'home-assistant-js-websocket';
import { FrontendLocaleData, HomeAssistant } from './homeassistant';
import { Constructor } from 'lit-element';
export interface Lovelace {
config: LovelaceConfig;
// If not set, a strategy was used to generate everything
rawConfig: LovelaceConfig | undefined;
editMode: boolean;
urlPath: string | null;
mode: 'generated' | 'yaml' | 'storage';
locale: FrontendLocaleData;
enableFullEditMode: () => void;
setEditMode: (editMode: boolean) => void;
saveConfig: (newConfig: LovelaceConfig) => Promise<void>;
deleteConfig: () => Promise<void>;
}
export interface LovelaceCard extends HTMLElement {
hass?: HomeAssistant;
isPanel?: boolean;
editMode?: boolean;
getCardSize(): number | Promise<number>;
setConfig(config: LovelaceCardConfig): void;
}
export interface LovelaceCardConstructor extends Constructor<LovelaceCard> {
getStubConfig?: (hass: HomeAssistant, entities: string[], entitiesFallback: string[]) => LovelaceCardConfig;
getConfigElement?: () => LovelaceCardEditor;
}
export interface LovelaceCardEditor extends LovelaceGenericElementEditor {
setConfig(config: LovelaceCardConfig): void;
}
export interface LovelaceGenericElementEditor extends HTMLElement {
hass?: HomeAssistant;
lovelace?: LovelaceConfig;
setConfig(config: any): void;
focusYamlEditor?: () => void;
}
export interface LovelacePanelConfig {
mode: 'yaml' | 'storage';
}
export interface LovelaceConfig {
title?: string;
strategy?: {
type: string;
options?: Record<string, unknown>;
};
views: LovelaceViewConfig[];
background?: string;
}
export interface LegacyLovelaceConfig extends LovelaceConfig {
resources?: LovelaceResource[];
}
export interface LovelaceResource {
id: string;
type: 'css' | 'js' | 'module' | 'html';
url: string;
}
export interface LovelaceResourcesMutableParams {
res_type: LovelaceResource['type'];
url: string;
}
export type LovelaceDashboard = LovelaceYamlDashboard | LovelaceStorageDashboard;
interface LovelaceGenericDashboard {
id: string;
url_path: string;
require_admin: boolean;
show_in_sidebar: boolean;
icon?: string;
title: string;
}
export interface LovelaceYamlDashboard extends LovelaceGenericDashboard {
mode: 'yaml';
filename: string;
}
export interface LovelaceStorageDashboard extends LovelaceGenericDashboard {
mode: 'storage';
}
export interface LovelaceDashboardMutableParams {
require_admin: boolean;
show_in_sidebar: boolean;
icon?: string;
title: string;
}
export interface LovelaceDashboardCreateParams extends LovelaceDashboardMutableParams {
url_path: string;
mode: 'storage';
}
export interface LovelaceViewConfig {
index?: number;
title?: string;
type?: string;
strategy?: {
type: string;
options?: Record<string, unknown>;
};
cards?: LovelaceCardConfig[];
path?: string;
icon?: string;
theme?: string;
panel?: boolean;
background?: string;
visible?: boolean | ShowViewConfig[];
}
export interface LovelaceViewElement extends HTMLElement {
hass?: HomeAssistant;
lovelace?: Lovelace;
narrow?: boolean;
index?: number;
cards?: Array<LovelaceCard>;
isStrategy: boolean;
setConfig(config: LovelaceViewConfig): void;
}
export interface ShowViewConfig {
user?: string;
}
export interface LovelaceBadgeConfig {
type?: string;
[key: string]: any;
}
export interface LovelaceCardConfig {
index?: number;
view_index?: number;
view_layout?: any;
type: string;
[key: string]: any;
}
export interface ToggleActionConfig extends BaseActionConfig {
action: 'toggle';
}
export interface CallServiceActionConfig extends BaseActionConfig {
action: 'call-service';
service: string;
target?: HassServiceTarget;
// "service_data" is kept for backwards compatibility. Replaced by "data".
service_data?: Record<string, unknown>;
data?: Record<string, unknown>;
}
export interface NavigateActionConfig extends BaseActionConfig {
action: 'navigate';
navigation_path: string;
}
export interface UrlActionConfig extends BaseActionConfig {
action: 'url';
url_path: string;
}
export interface MoreInfoActionConfig extends BaseActionConfig {
action: 'more-info';
}
export interface NoActionConfig extends BaseActionConfig {
action: 'none';
}
export interface CustomActionConfig extends BaseActionConfig {
action: 'fire-dom-event';
}
export interface AssistActionConfig extends BaseActionConfig {
action: 'assist';
pipeline_id?: string;
start_listening?: boolean;
}
export interface BaseActionConfig {
action: string;
confirmation?: ConfirmationRestrictionConfig;
}
export interface ConfirmationRestrictionConfig {
text?: string;
exemptions?: RestrictionConfig[];
}
export interface RestrictionConfig {
user: string;
}
export type ActionConfig =
| ToggleActionConfig
| CallServiceActionConfig
| NavigateActionConfig
| UrlActionConfig
| MoreInfoActionConfig
| AssistActionConfig
| NoActionConfig
| CustomActionConfig;
type LovelaceUpdatedEvent = HassEventBase & {
event_type: 'lovelace_updated';
data: {
url_path: string | null;
mode: 'yaml' | 'storage';
};
};
export interface WindowWithLovelaceProm extends Window {
llConfProm?: Promise<LovelaceConfig>;
llResProm?: Promise<LovelaceResource[]>;
}
export interface ActionHandlerOptions {
hasHold?: boolean;
hasDoubleClick?: boolean;
disabled?: boolean;
}
export interface ActionHandlerDetail {
action: 'hold' | 'tap' | 'double_tap';
}