${this._mode === "gui"
? html`
@@ -688,9 +656,7 @@ export class HaScriptEditor extends SubscribeMixin(
this._dirty = true;
}
- private async _runScript(ev: CustomEvent) {
- ev.stopPropagation();
-
+ private async _runScript() {
if (hasScriptFields(this.hass, this._entityId!)) {
showMoreInfoDialog(this, {
entityId: this._entityId!,
@@ -1155,6 +1121,63 @@ export class HaScriptEditor extends SubscribeMixin(
this._undoRedoController.redo();
}
+ private _handleDropdownSelect(ev: CustomEvent<{ item: HaDropdownItem }>) {
+ const action = ev.detail?.item?.value;
+
+ if (!action) {
+ return;
+ }
+
+ switch (action) {
+ case "undo":
+ this._undo();
+ break;
+ case "redo":
+ this._redo();
+ break;
+ case "info":
+ this._showInfo();
+ break;
+ case "settings":
+ this._showSettings();
+ break;
+ case "category":
+ this._editCategory();
+ break;
+ case "run":
+ this._runScript();
+ break;
+ case "add_fields":
+ this._addFields();
+ break;
+ case "rename":
+ this._promptScriptAlias();
+ break;
+ case "change_mode":
+ this._promptScriptMode();
+ break;
+ case "duplicate":
+ this._duplicate();
+ break;
+ case "take_control":
+ this._takeControl();
+ break;
+ case "toggle_yaml_mode":
+ if (this._mode === "gui") {
+ this._switchYamlMode();
+ break;
+ }
+ this._switchUiMode();
+ break;
+ case "delete":
+ this._deleteConfirm();
+ break;
+ case "trace":
+ this._showTrace();
+ break;
+ }
+ }
+
static get styles(): CSSResultGroup {
return [
haStyle,
@@ -1245,9 +1268,6 @@ export class HaScriptEditor extends SubscribeMixin(
ha-fab.dirty {
bottom: calc(16px + var(--safe-area-inset-bottom, 0px));
}
- li[role="separator"] {
- border-bottom-color: var(--divider-color);
- }
.header {
display: flex;
margin: 16px 0;
@@ -1261,10 +1281,6 @@ export class HaScriptEditor extends SubscribeMixin(
.header a {
color: var(--secondary-text-color);
}
- ha-button-menu a {
- text-decoration: none;
- color: var(--primary-color);
- }
ha-tooltip ha-svg-icon {
width: 12px;
}
diff --git a/src/panels/config/script/ha-script-field-row.ts b/src/panels/config/script/ha-script-field-row.ts
index 1453d12ef4..43220616dd 100644
--- a/src/panels/config/script/ha-script-field-row.ts
+++ b/src/panels/config/script/ha-script-field-row.ts
@@ -15,18 +15,19 @@ import type { LocalizeKeys } from "../../../common/translations/localize";
import "../../../components/ha-automation-row";
import type { HaAutomationRow } from "../../../components/ha-automation-row";
import "../../../components/ha-card";
-import "../../../components/ha-md-button-menu";
-import "../../../components/ha-md-menu-item";
+import "../../../components/ha-dropdown";
+import "../../../components/ha-dropdown-item";
+import type { HaDropdownItem } from "../../../components/ha-dropdown-item";
import type { ScriptFieldSidebarConfig } from "../../../data/automation";
import type { Field } from "../../../data/script";
import { SELECTOR_SELECTOR_BUILDING_BLOCKS } from "../../../data/selector/selector_selector";
import { haStyle } from "../../../resources/styles";
import type { HomeAssistant } from "../../../types";
import { isMac } from "../../../util/is_mac";
+import { showToast } from "../../../util/toast";
import { indentStyle, overflowStyles } from "../automation/styles";
import "./ha-script-field-selector-editor";
import type HaScriptFieldSelectorEditor from "./ha-script-field-selector-editor";
-import { showToast } from "../../../util/toast";
@customElement("ha-script-field-row")
export default class HaScriptFieldRow extends LitElement {
@@ -79,36 +80,33 @@ export default class HaScriptFieldRow extends LitElement {
.highlight=${this.highlight}
@delete-row=${this._onDelete}
>
-
-
-
+
+
${this.hass.localize(
`ui.panel.config.automation.editor.edit_${!this._yamlMode ? "yaml" : "ui"}`
)}
-
-
+
-
+
${this.hass.localize(
"ui.panel.config.automation.editor.actions.delete"
@@ -118,7 +116,6 @@ export default class HaScriptFieldRow extends LitElement {
${isMac
? html``
: this.hass.localize(
@@ -134,8 +131,8 @@ export default class HaScriptFieldRow extends LitElement {
`
: nothing}
-
-
+
+
${this.key}
@@ -170,27 +167,21 @@ export default class HaScriptFieldRow extends LitElement {
"ui.panel.config.script.editor.field.selector"
)}
-
-
+
@@ -201,16 +192,13 @@ export default class HaScriptFieldRow extends LitElement {
class="shortcut-placeholder ${isMac ? "mac" : ""}"
>
-
-
+
-
+
${this.hass.localize(
"ui.panel.config.automation.editor.actions.delete"
@@ -220,7 +208,6 @@ export default class HaScriptFieldRow extends LitElement {
${isMac
? html``
: this.hass.localize(
@@ -236,8 +223,8 @@ export default class HaScriptFieldRow extends LitElement {
`
: nothing}
-
-
+
+
${typeof this.field.selector === "object" &&
@@ -420,6 +407,23 @@ export default class HaScriptFieldRow extends LitElement {
this._selectorRowElement?.focus();
}
+ private _handleDropdownSelect(ev: CustomEvent<{ item: HaDropdownItem }>) {
+ const action = ev.detail?.item?.value;
+
+ if (!action) {
+ return;
+ }
+
+ switch (action) {
+ case "toggle_yaml_mode":
+ this._toggleYamlMode(ev.target as HTMLElement);
+ break;
+ case "delete":
+ this._onDelete();
+ break;
+ }
+ }
+
static get styles(): CSSResultGroup {
return [
haStyle,
@@ -477,9 +481,6 @@ export default class HaScriptFieldRow extends LitElement {
.selected_menu_item {
color: var(--primary-color);
}
- li[role="separator"] {
- border-bottom-color: var(--divider-color);
- }
.selector-row {
padding-top: 12px;
padding-bottom: 16px;
diff --git a/src/panels/config/script/ha-script-trace.ts b/src/panels/config/script/ha-script-trace.ts
index 6d620af034..2e8f667ca6 100644
--- a/src/panels/config/script/ha-script-trace.ts
+++ b/src/panels/config/script/ha-script-trace.ts
@@ -1,3 +1,4 @@
+import "@home-assistant/webawesome/dist/components/divider/divider";
import {
mdiDotsVertical,
mdiDownload,
@@ -8,17 +9,19 @@ import {
mdiRefresh,
} from "@mdi/js";
import type { CSSResultGroup, TemplateResult } from "lit";
-import { css, html, LitElement } from "lit";
+import { css, html, LitElement, nothing } 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 { fireEvent } from "../../../common/dom/fire_event";
-import "../../../components/ha-button-menu";
+import { navigate } from "../../../common/navigate";
import "../../../components/ha-button";
+import "../../../components/ha-dropdown";
+import "../../../components/ha-dropdown-item";
+import type { HaDropdownItem } from "../../../components/ha-dropdown-item";
import "../../../components/ha-icon-button";
-import "../../../components/ha-list-item";
import "../../../components/trace/ha-trace-blueprint-config";
import "../../../components/trace/ha-trace-config";
import "../../../components/trace/ha-trace-logbook";
@@ -104,7 +107,7 @@ export class HaScriptTrace extends LitElement {
? html`
@@ -113,64 +116,49 @@ export class HaScriptTrace extends LitElement {
)}
`
- : ""}
+ : nothing}
-
+
-
+
${this.hass.localize("ui.panel.config.script.editor.show_info")}
-
+
${this.narrow && this.scriptId
- ? html`
-
-
- ${this.hass.localize(
- "ui.panel.config.script.trace.edit_script"
- )}
-
-
-
- `
- : ""}
+ ? html`
+ ${this.hass.localize(
+ "ui.panel.config.script.trace.edit_script"
+ )}
+
+ `
+ : nothing}
-
+
-
+
${this.hass.localize("ui.panel.config.automation.trace.refresh")}
-
-
+
+
-
+
${this.hass.localize(
"ui.panel.config.automation.trace.download_trace"
)}
-
-
-
+
+
+
${this._traces && this._traces.length > 0
@@ -530,6 +518,35 @@ export class HaScriptTrace extends LitElement {
fireEvent(this, "hass-more-info", { entityId: this._entityId });
}
+ private _navigateToScript() {
+ if (this.scriptId) {
+ navigate(`/config/script/edit/${this.scriptId}`);
+ }
+ }
+
+ private _handleDropdownSelect(ev: CustomEvent<{ item: HaDropdownItem }>) {
+ const action = ev.detail?.item?.value;
+
+ if (!action) {
+ return;
+ }
+
+ switch (action) {
+ case "show_info":
+ this._showInfo();
+ break;
+ case "refresh":
+ this._refreshTraces();
+ break;
+ case "download_trace":
+ this._downloadTrace();
+ break;
+ case "edit_script":
+ this._navigateToScript();
+ break;
+ }
+ }
+
static get styles(): CSSResultGroup {
return [
haStyle,
diff --git a/yarn.lock b/yarn.lock
index b07a330124..8ad6ecda53 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1940,9 +1940,9 @@ __metadata:
languageName: node
linkType: hard
-"@home-assistant/webawesome@npm:3.0.0-ha.0":
- version: 3.0.0-ha.0
- resolution: "@home-assistant/webawesome@npm:3.0.0-ha.0"
+"@home-assistant/webawesome@npm:3.0.0-ha.1":
+ version: 3.0.0-ha.1
+ resolution: "@home-assistant/webawesome@npm:3.0.0-ha.1"
dependencies:
"@ctrl/tinycolor": "npm:4.1.0"
"@floating-ui/dom": "npm:^1.6.13"
@@ -1953,7 +1953,7 @@ __metadata:
lit: "npm:^3.2.1"
nanoid: "npm:^5.1.5"
qr-creator: "npm:^1.0.0"
- checksum: 10/2034d498d5b26bb0573ebc2c9aadd144604bb48c04becbae0c67b16857d8e5d6562626e795974362c3fc41e9b593a9005595d8b5ff434b1569b2d724af13043b
+ checksum: 10/281f16c2c6c28d95a381de6fca05948a9c67d8184f20844d64ce33dc2caf9e6761d2cf8337b97e7487a71be011ab04f2a021b20b823a20e3c049cc68205de86a
languageName: node
linkType: hard
@@ -9213,7 +9213,7 @@ __metadata:
"@fullcalendar/list": "npm:6.1.19"
"@fullcalendar/luxon3": "npm:6.1.19"
"@fullcalendar/timegrid": "npm:6.1.19"
- "@home-assistant/webawesome": "npm:3.0.0-ha.0"
+ "@home-assistant/webawesome": "npm:3.0.0-ha.1"
"@lezer/highlight": "npm:1.2.3"
"@lit-labs/motion": "npm:1.0.9"
"@lit-labs/observers": "npm:2.0.6"