diff --git a/web/server/vue-cli/src/components/Report/Report.vue b/web/server/vue-cli/src/components/Report/Report.vue
index 5419c2b338..91827f556f 100644
--- a/web/server/vue-cli/src/components/Report/Report.vue
+++ b/web/server/vue-cli/src/components/Report/Report.vue
@@ -521,6 +521,7 @@ class AdvancedLineWidget extends WidgetType {
toDOM() {
this.container = document.createElement("div");
+ this.container.style.userSelect = "text";
const vnode = h(ReportStepMessage, this.data);
vnode.appContext = this.appContext;
@@ -537,7 +538,7 @@ class AdvancedLineWidget extends WidgetType {
}
ignoreEvent() {
- return false;
+ return true;
}
}
diff --git a/web/server/vue-cli/src/components/Report/ReportStepMessage.vue b/web/server/vue-cli/src/components/Report/ReportStepMessage.vue
index ecc541d67d..22fcfc8938 100644
--- a/web/server/vue-cli/src/components/Report/ReportStepMessage.vue
+++ b/web/server/vue-cli/src/components/Report/ReportStepMessage.vue
@@ -51,6 +51,18 @@
+
+
import { ReportStepEnumIcon } from "@/components/Icons";
import { getCssColor } from "@/utilities/colors";
-import { computed } from "vue";
+import { computed, ref } from "vue";
const props = defineProps({
id: { type: [ String, Number ], required: true },
@@ -125,6 +137,22 @@ function showNextReport() {
function showDocumentation() {
window.open(props.docUrl, "_blank");
}
+
+const isCopied = ref(false);
+
+async function copyToClipboard() {
+ try {
+ await navigator.clipboard.writeText(props.value);
+ isCopied.value = true;
+
+ // Reset the icon back to the copy glyph after a short delay.
+ setTimeout(() => {
+ isCopied.value = false;
+ }, 2000);
+ } catch (error) {
+ console.warn("Clipboard copy failed: ", error);
+ }
+}