236 lines
5.5 KiB
TypeScript
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';
|
|
}
|