ha-frontend/src/panels/lovelace/cards/types.ts

561 lines
14 KiB
TypeScript

import { HaDurationData } from "../../../components/ha-duration-input";
import { ActionConfig } from "../../../data/lovelace/config/action";
import { LovelaceCardConfig } from "../../../data/lovelace/config/card";
import { Statistic, StatisticType } from "../../../data/recorder";
import { ForecastType } from "../../../data/weather";
import { FullCalendarView, TranslationDict } from "../../../types";
import { LovelaceCardFeatureConfig } from "../card-features/types";
import { LovelaceCondition } from "../common/conditions/types";
import { LegacyStateFilter } from "../common/evaluate-filter";
import { LegacyCondition } from "../common/validate-condition";
import { HuiImage } from "../components/hui-image";
import { TimestampRenderingFormat } from "../components/types";
import { LovelaceElementConfig } from "../elements/types";
import {
EntityConfig,
EntityFilterEntityConfig,
LovelaceRowConfig,
} from "../entity-rows/types";
import { LovelaceHeaderFooterConfig } from "../header-footer/types";
export type AlarmPanelCardConfigState =
| "arm_away"
| "arm_home"
| "arm_night"
| "arm_vacation"
| "arm_custom_bypass";
export interface AlarmPanelCardConfig extends LovelaceCardConfig {
entity: string;
name?: string;
states?: AlarmPanelCardConfigState[];
theme?: string;
}
export interface CalendarCardConfig extends LovelaceCardConfig {
entities: string[];
initial_view?: FullCalendarView;
title?: string;
theme?: string;
}
export interface ConditionalCardConfig extends LovelaceCardConfig {
card: LovelaceCardConfig;
conditions: (LovelaceCondition | LegacyCondition)[];
}
export interface EmptyStateCardConfig extends LovelaceCardConfig {
content: string;
title?: string;
}
export interface EntityCardConfig extends LovelaceCardConfig {
attribute?: string;
unit?: string;
theme?: string;
state_color?: boolean;
}
export interface EntitiesCardEntityConfig extends EntityConfig {
type?: string;
secondary_info?:
| "entity-id"
| "last-changed"
| "last-triggered"
| "last-updated"
| "position"
| "tilt-position"
| "brightness";
action_name?: string;
service?: string;
// "service_data" is kept for backwards compatibility. Replaced by "data".
service_data?: Record<string, unknown>;
data?: Record<string, unknown>;
url?: string;
tap_action?: ActionConfig;
hold_action?: ActionConfig;
double_tap_action?: ActionConfig;
state_color?: boolean;
show_name?: boolean;
show_icon?: boolean;
}
export interface EntitiesCardConfig extends LovelaceCardConfig {
type: "entities";
show_header_toggle?: boolean;
title?: string;
entities: Array<LovelaceRowConfig | string>;
theme?: string;
icon?: string;
header?: LovelaceHeaderFooterConfig;
footer?: LovelaceHeaderFooterConfig;
state_color?: boolean;
}
export interface AreaCardConfig extends LovelaceCardConfig {
area: string;
navigation_path?: string;
show_camera?: boolean;
camera_view?: HuiImage["cameraView"];
aspect_ratio?: string;
}
export interface ButtonCardConfig extends LovelaceCardConfig {
entity?: string;
name?: string;
show_name?: boolean;
icon?: string;
icon_height?: string;
show_icon?: boolean;
theme?: string;
tap_action?: ActionConfig;
hold_action?: ActionConfig;
double_tap_action?: ActionConfig;
state_color?: boolean;
show_state?: boolean;
}
export interface EnergyCardBaseConfig extends LovelaceCardConfig {
collection_key?: string;
}
export interface EnergySummaryCardConfig extends LovelaceCardConfig {
type: "energy-summary";
title?: string;
collection_key?: string;
}
export interface EnergyDistributionCardConfig extends LovelaceCardConfig {
type: "energy-distribution";
title?: string;
link_dashboard?: boolean;
collection_key?: string;
}
export interface EnergyUsageGraphCardConfig extends LovelaceCardConfig {
type: "energy-summary-graph";
title?: string;
collection_key?: string;
}
export interface EnergySolarGraphCardConfig extends LovelaceCardConfig {
type: "energy-solar-graph";
title?: string;
collection_key?: string;
}
export interface EnergyGasGraphCardConfig extends LovelaceCardConfig {
type: "energy-gas-graph";
title?: string;
collection_key?: string;
}
export interface EnergyWaterGraphCardConfig extends LovelaceCardConfig {
type: "energy-water-graph";
title?: string;
collection_key?: string;
}
export interface EnergyDevicesGraphCardConfig extends LovelaceCardConfig {
type: "energy-devices-graph";
title?: string;
collection_key?: string;
max_devices?: number;
}
export interface EnergyDevicesDetailGraphCardConfig extends LovelaceCardConfig {
type: "energy-devices-detail-graph";
title?: string;
collection_key?: string;
max_devices?: number;
}
export interface EnergySourcesTableCardConfig extends LovelaceCardConfig {
type: "energy-sources-table";
title?: string;
collection_key?: string;
}
export interface EnergySolarGaugeCardConfig extends LovelaceCardConfig {
type: "energy-solar-consumed-gauge";
title?: string;
collection_key?: string;
}
export interface EnergySelfSufficiencyGaugeCardConfig
extends LovelaceCardConfig {
type: "energy-self-sufficiency-gauge";
title?: string;
collection_key?: string;
}
export interface EnergyGridGaugeCardConfig extends LovelaceCardConfig {
type: "energy-grid-result-gauge";
title?: string;
collection_key?: string;
}
export interface EnergyCarbonGaugeCardConfig extends LovelaceCardConfig {
type: "energy-carbon-consumed-gauge";
title?: string;
collection_key?: string;
}
export interface EntityFilterCardConfig extends LovelaceCardConfig {
type: "entity-filter";
entities: Array<EntityFilterEntityConfig | string>;
state_filter?: Array<LegacyStateFilter>;
conditions: Array<LovelaceCondition>;
card?: Partial<LovelaceCardConfig>;
show_empty?: boolean;
}
export interface ErrorCardConfig extends LovelaceCardConfig {
error: string;
origConfig: LovelaceCardConfig;
}
export interface SeverityConfig {
green?: number;
yellow?: number;
red?: number;
}
export interface GaugeSegment {
from: number;
color: string;
label?: string;
}
export interface GaugeCardConfig extends LovelaceCardConfig {
entity: string;
name?: string;
unit?: string;
min?: number;
max?: number;
severity?: SeverityConfig;
theme?: string;
needle?: boolean;
segments?: GaugeSegment[];
}
export interface ConfigEntity extends EntityConfig {
tap_action?: ActionConfig;
hold_action?: ActionConfig;
double_tap_action?: ActionConfig;
}
export interface PictureGlanceEntityConfig extends ConfigEntity {
show_state?: boolean;
attribute?: string;
prefix?: string;
suffix?: string;
}
export interface GlanceConfigEntity extends ConfigEntity {
show_last_changed?: boolean;
image?: string;
show_state?: boolean;
state_color?: boolean;
format: TimestampRenderingFormat;
}
export interface GlanceCardConfig extends LovelaceCardConfig {
show_name?: boolean;
show_state?: boolean;
show_icon?: boolean;
title?: string;
theme?: string;
entities: (string | GlanceConfigEntity)[];
columns?: number;
state_color?: boolean;
}
export interface HumidifierCardConfig extends LovelaceCardConfig {
entity: string;
theme?: string;
name?: string;
show_current_as_primary?: boolean;
features?: LovelaceCardFeatureConfig[];
}
export interface IframeCardConfig extends LovelaceCardConfig {
allow_open_top_navigation?: boolean;
aspect_ratio?: string;
title?: string;
url: string;
}
export interface LightCardConfig extends LovelaceCardConfig {
entity: string;
name?: string;
theme?: string;
icon?: string;
tap_action?: ActionConfig;
hold_action?: ActionConfig;
double_tap_action?: ActionConfig;
}
export interface LogbookCardConfig extends LovelaceCardConfig {
type: "logbook";
entities: string[];
title?: string;
hours_to_show?: number;
theme?: string;
}
export interface MapCardConfig extends LovelaceCardConfig {
type: "map";
title?: string;
aspect_ratio?: string;
auto_fit?: boolean;
fit_zones?: boolean;
default_zoom?: number;
entities?: Array<EntityConfig | string>;
hours_to_show?: number;
geo_location_sources?: string[];
dark_mode?: boolean;
}
export interface MarkdownCardConfig extends LovelaceCardConfig {
type: "markdown";
content: string;
title?: string;
card_size?: number;
entity_ids?: string | string[];
theme?: string;
}
export interface MediaControlCardConfig extends LovelaceCardConfig {
entity: string;
theme?: string;
}
export interface HistoryGraphCardConfig extends LovelaceCardConfig {
entities: Array<EntityConfig | string>;
hours_to_show?: number;
title?: string;
show_names?: boolean;
logarithmic_scale?: boolean;
min_y_axis?: number;
max_y_axis?: number;
fit_y_data?: boolean;
split_device_classes?: boolean;
}
export interface StatisticsGraphCardConfig extends LovelaceCardConfig {
title?: string;
entities: Array<EntityConfig | string>;
unit?: string;
days_to_show?: number;
period?: "5minute" | "hour" | "day" | "month";
stat_types?: StatisticType | StatisticType[];
chart_type?: "line" | "bar";
hide_legend?: boolean;
logarithmic_scale?: boolean;
}
export interface StatisticCardConfig extends LovelaceCardConfig {
name?: string;
entities: Array<EntityConfig | string>;
period: {
fixed_period?: { start: string; end: string };
calendar?: { period: string; offset: number };
rolling_window?: { duration: HaDurationData; offset: HaDurationData };
};
stat_type: keyof Statistic;
theme?: string;
}
export interface PictureCardConfig extends LovelaceCardConfig {
image?: string;
image_entity?: string;
tap_action?: ActionConfig;
hold_action?: ActionConfig;
double_tap_action?: ActionConfig;
theme?: string;
alt_text?: string;
}
export interface PictureElementsCardConfig extends LovelaceCardConfig {
title?: string;
image?: string;
image_entity?: string;
camera_image?: string;
camera_view?: HuiImage["cameraView"];
state_image?: Record<string, unknown>;
state_filter?: string[];
aspect_ratio?: string;
entity?: string;
elements: LovelaceElementConfig[];
theme?: string;
dark_mode_image?: string;
dark_mode_filter?: string;
}
export interface PictureEntityCardConfig extends LovelaceCardConfig {
entity: string;
name?: string;
image?: string;
camera_image?: string;
camera_view?: HuiImage["cameraView"];
state_image?: Record<string, unknown>;
state_filter?: string[];
aspect_ratio?: string;
tap_action?: ActionConfig;
hold_action?: ActionConfig;
double_tap_action?: ActionConfig;
show_name?: boolean;
show_state?: boolean;
theme?: string;
}
export interface PictureGlanceCardConfig extends LovelaceCardConfig {
entities: Array<string | PictureGlanceEntityConfig>;
title?: string;
image?: string;
camera_image?: string;
camera_view?: HuiImage["cameraView"];
state_image?: Record<string, unknown>;
state_filter?: string[];
aspect_ratio?: string;
entity?: string;
tap_action?: ActionConfig;
hold_action?: ActionConfig;
double_tap_action?: ActionConfig;
show_state?: boolean;
theme?: string;
}
export interface PlantAttributeTarget extends EventTarget {
value?: string;
}
export interface PlantStatusCardConfig extends LovelaceCardConfig {
name?: string;
entity: string;
theme?: string;
}
export interface SensorCardConfig extends LovelaceCardConfig {
entity: string;
name?: string;
icon?: string;
graph?: string;
unit?: string;
detail?: number;
theme?: string;
hours_to_show?: number;
limits?: {
min?: number;
max?: number;
};
}
export interface TodoListCardConfig extends LovelaceCardConfig {
title?: string;
theme?: string;
entity?: string;
}
export interface StackCardConfig extends LovelaceCardConfig {
cards: LovelaceCardConfig[];
title?: string;
}
export interface GridCardConfig extends StackCardConfig {
columns?: number;
square?: boolean;
}
export interface ThermostatCardConfig extends LovelaceCardConfig {
entity: string;
theme?: string;
name?: string;
show_current_as_primary?: boolean;
features?: LovelaceCardFeatureConfig[];
}
export interface WeatherForecastCardConfig extends LovelaceCardConfig {
entity: string;
name?: string;
show_current?: boolean;
show_forecast?: boolean;
forecast_type?: ForecastType;
secondary_info_attribute?: keyof TranslationDict["ui"]["card"]["weather"]["attributes"];
theme?: string;
tap_action?: ActionConfig;
hold_action?: ActionConfig;
double_tap_action?: ActionConfig;
}
export interface EnergyFlowCardConfig extends LovelaceCardConfig {
type: string;
name?: string;
show_header_toggle?: boolean;
show_warning?: boolean;
show_error?: boolean;
test_gui?: boolean;
show_w_not_kw?: any;
hide_inactive_lines?: boolean;
threshold_in_k?: number;
energy_flow_diagramm?: boolean;
energy_flow_diagramm_lines_factor?: number;
change_house_bubble_color_with_flow?: boolean;
grid_icon?: string;
generation_icon?: string;
house_icon?: string;
battery_icon?: string;
appliance1_icon?: string;
appliance2_icon?: string;
icon_entities?: Map<string, string>;
line_entities?: Map<string, string>;
house_entity?: string;
battery_entity?: string;
generation_entity?: string;
grid_entity?: string;
grid_to_house_entity?: string;
grid_to_battery_entity?: string;
generation_to_grid_entity?: string;
generation_to_battery_entity?: string;
generation_to_house_entity?: string;
battery_to_house_entity?: string;
battery_to_grid_entity?: string;
grid_extra_entity?: string;
generation_extra_entity?: string;
house_extra_entity?: string;
battery_extra_entity?: string;
appliance1_consumption_entity?: string;
appliance1_extra_entity?: string;
appliance2_consumption_entity?: string;
appliance2_extra_entity?: string;
tap_action?: ActionConfig;
hold_action?: ActionConfig;
double_tap_action?: ActionConfig;
}
export interface TileCardConfig extends LovelaceCardConfig {
entity: string;
name?: string;
hide_state?: boolean;
state_content?: string | string[];
icon?: string;
color?: string;
show_entity_picture?: boolean;
vertical?: boolean;
tap_action?: ActionConfig;
hold_action?: ActionConfig;
double_tap_action?: ActionConfig;
icon_tap_action?: ActionConfig;
features?: LovelaceCardFeatureConfig[];
}