diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts
index 8dddca7c3d..5dd2a99083 100644
--- a/src/panels/config/script/ha-script-editor.ts
+++ b/src/panels/config/script/ha-script-editor.ts
@@ -1,5 +1,11 @@
import "@material/mwc-fab";
-import { mdiCheck, mdiContentSave, mdiDelete, mdiDotsVertical } from "@mdi/js";
+import {
+ mdiCheck,
+ mdiContentSave,
+ mdiDelete,
+ mdiDotsVertical,
+ mdiContentDuplicate,
+} from "@mdi/js";
import "@polymer/app-layout/app-header/app-header";
import "@polymer/app-layout/app-toolbar/app-toolbar";
import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light";
@@ -36,6 +42,7 @@ import {
MODES,
MODES_MAX,
ScriptConfig,
+ showScriptEditor,
triggerScript,
} from "../../../data/script";
import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box";
@@ -132,6 +139,22 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
+
+ ${this.hass.localize(
+ "ui.panel.config.script.picker.duplicate_script"
+ )}
+
+
+
setTimeout(resolve, 0));
+ }
+ showScriptEditor(this, {
+ ...this._config,
+ alias: `${this._config?.alias} (${this.hass.localize(
+ "ui.panel.config.script.picker.duplicate"
+ )})`,
+ });
+ }
+
private async _deleteConfirm() {
showConfirmationDialog(this, {
text: this.hass.localize("ui.panel.config.script.editor.delete_confirm"),
@@ -574,6 +621,9 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
this._mode = "yaml";
break;
case 2:
+ this._duplicate();
+ break;
+ case 3:
this._deleteConfirm();
break;
}
diff --git a/src/translations/en.json b/src/translations/en.json
index c365044443..db29694f98 100755
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -1435,7 +1435,9 @@
"edit_script": "Edit script",
"headers": {
"name": "Name"
- }
+ },
+ "duplicate_script": "Duplicate script",
+ "duplicate": "[%key:ui::panel::config::automation::picker::duplicate%]"
},
"editor": {
"alias": "Name",