import "@material/mwc-list/mwc-list-item"; import { mdiDotsVertical, mdiDownload, mdiInformationOutline, mdiPencil, mdiRayEndArrow, mdiRayStartArrow, mdiRefresh, } from "@mdi/js"; import type { CSSResultGroup, TemplateResult } from "lit"; import { css, html, LitElement } from "lit"; import { customElement, property, query, state } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; import { repeat } from "lit/directives/repeat"; import { isComponentLoaded } from "../../../common/config/is_component_loaded"; import { formatDateTimeWithSeconds } from "../../../common/datetime/format_date_time"; import "../../../components/ha-icon-button"; import "../../../components/trace/ha-trace-blueprint-config"; import "../../../components/trace/ha-trace-config"; import "../../../components/trace/ha-trace-logbook"; import "../../../components/trace/ha-trace-path-details"; import "../../../components/trace/ha-trace-timeline"; import "../../../components/trace/hat-script-graph"; import type { HatScriptGraph, NodeInfo, } from "../../../components/trace/hat-script-graph"; import { traceTabStyles } from "../../../components/trace/trace-tab-styles"; import type { LogbookEntry } from "../../../data/logbook"; import { getLogbookDataForContext } from "../../../data/logbook"; import type { ScriptEntity } from "../../../data/script"; import type { ScriptTrace, ScriptTraceExtended } from "../../../data/trace"; import { loadTrace, loadTraces } from "../../../data/trace"; import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; import { haStyle } from "../../../resources/styles"; import type { HomeAssistant, Route } from "../../../types"; import "../../../layouts/hass-subpage"; import "../../../components/ha-button-menu"; import { fireEvent } from "../../../common/dom/fire_event"; import type { EntityRegistryEntry } from "../../../data/entity_registry"; @customElement("ha-script-trace") export class HaScriptTrace extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; @property({ attribute: false }) public scriptId!: string; @property({ attribute: false }) public scripts!: ScriptEntity[]; @property({ attribute: "is-wide", type: Boolean }) public isWide = false; @property({ type: Boolean, reflect: true }) public narrow = false; @property({ attribute: false }) public route!: Route; @property({ attribute: false }) public entityRegistry!: EntityRegistryEntry[]; @state() private _entityId?: string; @state() private _traces?: ScriptTrace[]; @state() private _runId?: string; @state() private _selected?: NodeInfo; @state() private _trace?: ScriptTraceExtended; @state() private _logbookEntries?: LogbookEntry[]; @state() private _view: | "details" | "config" | "timeline" | "logbook" | "blueprint" = "details"; @query("hat-script-graph") private _graph?: HatScriptGraph; protected render(): TemplateResult { const stateObj = this._entityId ? this.hass.states[this._entityId] : undefined; const graph = this._graph; const trackedNodes = graph?.trackedNodes; const renderedNodes = graph?.renderedNodes; const title = stateObj?.attributes.friendly_name || this._entityId; let devButtons: TemplateResult | string = ""; if (__DEV__) { devButtons = html`