n8n-editor-ui 1.74.1 → 1.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CRv-7oGl.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CGrVAIIO.js} +1 -1
  2. package/dist/assets/{AuthView-DiVCkmJO.js → AuthView-ilZ0xRQe.js} +2 -2
  3. package/dist/assets/{CanvasChat-BMwaSHw5.js → CanvasChat-B3m7qTtB.js} +4 -4
  4. package/dist/assets/{CanvasControls-B3S4M5tk.js → CanvasControls-laNSmWAd.js} +1 -1
  5. package/dist/assets/{ChangePasswordView-DMNxdEvW.js → ChangePasswordView-DGXlOlVn.js} +3 -3
  6. package/dist/assets/CollectionParameter-CS9E8rhZ.js +4 -0
  7. package/dist/assets/{ConcurrentExecutionsHeader-Cz1SdK5W.js → ConcurrentExecutionsHeader-CDIlj36E.js} +19 -14
  8. package/dist/assets/{CredentialsView-DRWQyccW.css → CredentialsView-BAqjGrNq.css} +8 -11
  9. package/dist/assets/{CredentialsView-BdvSQS_L.js → CredentialsView-BqjdkWhh.js} +67 -21
  10. package/dist/assets/{ErrorView-pJv59Fp1.js → ErrorView--I-VVLk9.js} +1 -1
  11. package/dist/assets/{ExecutionsView-DizYSIgZ.js → ExecutionsView-BiSV7J9a.js} +9 -7
  12. package/dist/assets/{ExecutionsView-C0P3HAAt.css → ExecutionsView-CB1tvZfo.css} +2 -2
  13. package/dist/assets/{FileSaver.min-CYFZIcxk.js → FileSaver.min-LAx9vEXw.js} +1 -1
  14. package/dist/assets/{FixedCollectionParameter-C-azlgUa.js → FixedCollectionParameter-ByX4uXQc.js} +1 -1
  15. package/dist/assets/{ForgotMyPasswordView-DLg1bxUi.js → ForgotMyPasswordView-C-tewPwi.js} +3 -3
  16. package/dist/assets/{Logo-DN8dwlbz.js → Logo-CyDV6IUz.js} +1 -1
  17. package/dist/assets/{MainHeader-Dj7ade30.js → MainHeader-nG1530RP.js} +9 -9
  18. package/dist/assets/{MainSidebar-DlNj8GJy.js → MainSidebar-CF4s-Ouk.js} +85 -44
  19. package/dist/assets/{NodeCreation-ZBewl4bk.js → NodeCreation-De8juZ9k.js} +4 -4
  20. package/dist/assets/{NodeCreator-DdQP0uVg.js → NodeCreator-Cra3o41k.js} +5 -5
  21. package/dist/assets/{NodeViewSwitcher-Bdg8qofd.js → NodeViewSwitcher-BE3EzD3h.js} +70 -42
  22. package/dist/assets/{NodeViewSwitcher-UPCWvuIo.css → NodeViewSwitcher-CB1zkjni.css} +2 -2
  23. package/dist/assets/{ProjectCardBadge-pbI58Ond.js → ProjectCardBadge-CYEfBgU2.js} +15 -2
  24. package/dist/assets/{ProjectHeader-D7XYidpZ.js → ProjectHeader-DUhyXx1P.js} +1 -1
  25. package/dist/assets/{ProjectSettings-CXSvZq_1.js → ProjectSettings-DmPZa04c.js} +3 -4
  26. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-B8guxlKC.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-C0Zr49w5.js} +1 -1
  27. package/dist/assets/{ResourcesListLayout-BhSNEyun.js → ResourcesListLayout-BF7yHXTU.js} +21 -6
  28. package/dist/assets/{ResourcesListLayout-Dw1dU1aW.css → ResourcesListLayout-CJC-YvjD.css} +6 -6
  29. package/dist/assets/{RunDataJson-DyoK2r6Z.js → RunDataJson-D6kl_yU3.js} +15 -15
  30. package/dist/assets/{RunDataJsonActions-DmM5PsDX.js → RunDataJsonActions-CBSKVOkR.js} +2 -2
  31. package/dist/assets/{RunDataSearch-B9xsocwZ.js → RunDataSearch-C8ri_W9l.js} +1 -1
  32. package/dist/assets/{RunDataTable-iUS0fcZW.js → RunDataTable-fDrhEtER.js} +2 -2
  33. package/dist/assets/{SamlOnboarding-c9rXuzta.js → SamlOnboarding-B9rLeJiC.js} +3 -3
  34. package/dist/assets/{SettingsApiView-BbA8em4X.js → SettingsApiView-DYA_Z_Bm.js} +1 -1
  35. package/dist/assets/{SettingsCommunityNodesView-BUA0OLqR.js → SettingsCommunityNodesView-DWF5X20Q.js} +4 -4
  36. package/dist/assets/{SettingsExternalSecrets-Bp4-QTpk.js → SettingsExternalSecrets-D56h6u5r.js} +1 -1
  37. package/dist/assets/{SettingsLdapView-DAraUZwU.js → SettingsLdapView-tZze_vXh.js} +1 -1
  38. package/dist/assets/{SettingsLogStreamingView-DTgMc-WZ.js → SettingsLogStreamingView-Bw3FugIn.js} +1 -1
  39. package/dist/assets/{SettingsPersonalView-BDWzpO2x.js → SettingsPersonalView-BRXa1jDG.js} +1 -1
  40. package/dist/assets/{SettingsSourceControl-Dr974WK5.js → SettingsSourceControl-BBn_qSA4.js} +1 -1
  41. package/dist/assets/{SettingsSso-BxAzGPEO.js → SettingsSso-BJCIqJoE.js} +1 -1
  42. package/dist/assets/{SettingsUsageAndPlan-DXkQcpTq.js → SettingsUsageAndPlan-BLxfFlk9.js} +1 -1
  43. package/dist/assets/{SettingsUsersView-ioxWjgmR.js → SettingsUsersView-DgquKogH.js} +1 -1
  44. package/dist/assets/{SettingsView-B_btgRH4.js → SettingsView-geSqtBi5.js} +1 -1
  45. package/dist/assets/{SetupView-r9ZPGr7D.js → SetupView-BUnzDsGx.js} +3 -3
  46. package/dist/assets/{SetupWorkflowCredentialsButton-BQTw1Lni.js → SetupWorkflowCredentialsButton-OMbE5FVR.js} +1 -1
  47. package/dist/assets/{SetupWorkflowFromTemplateView-ChO-yyKZ.js → SetupWorkflowFromTemplateView-CDUDJkOD.js} +3 -3
  48. package/dist/assets/{SigninView-D7_W1amk.js → SigninView-BM3kNgaO.js} +3 -3
  49. package/dist/assets/{SignoutView-BvPOsQQ0.js → SignoutView-CpD96iu3.js} +1 -1
  50. package/dist/assets/{SignupView-Bf0vYlCQ.js → SignupView-BHirfE85.js} +3 -3
  51. package/dist/assets/{TemplateDetails-D-RiAVQD.js → TemplateDetails-CnvXukVX.js} +1 -1
  52. package/dist/assets/{TemplateList-DeJfbzYl.js → TemplateList-oSLDmMo9.js} +1 -1
  53. package/dist/assets/{TemplatesCollectionView-uSsfhIa9.js → TemplatesCollectionView-CoK7iBJV.js} +5 -5
  54. package/dist/assets/{TemplatesSearchView-DBbTV_xi.js → TemplatesSearchView-Cu2hXp49.js} +3 -3
  55. package/dist/assets/{TemplatesView-Qt03GfQO.js → TemplatesView-B0NINzN-.js} +1 -1
  56. package/dist/assets/{TemplatesWorkflowView-CLplrMA6.js → TemplatesWorkflowView-BQngHyNE.js} +5 -5
  57. package/dist/assets/{TestDefinitionEditView-CEfQepq8.js → TestDefinitionEditView-DQ1n3kAQ.js} +271 -225
  58. package/dist/assets/{TestDefinitionEditView-DM4tV2LS.css → TestDefinitionEditView-FI1GVbhl.css} +123 -93
  59. package/dist/assets/{TestDefinitionListView-6hn-gG-H.js → TestDefinitionListView-BnnmuS88.js} +65 -17
  60. package/dist/assets/{TestDefinitionListView-BD5_O4Fx.css → TestDefinitionListView-GsFM1AF9.css} +15 -9
  61. package/dist/assets/TestDefinitionRootView-D0gG8g0k.js +36 -0
  62. package/dist/assets/TestDefinitionRootView-K8b6hMi2.css +128 -0
  63. package/dist/assets/{VariablesView-BrXojLhD.js → VariablesView-CkD1CK7k.js} +2 -2
  64. package/dist/assets/{WorkerView-DwULN80E.js → WorkerView-Bm_msQwI.js} +5 -5
  65. package/dist/assets/{WorkflowActivator-Dm9xwqOB.js → WorkflowActivator-B5QyeA7d.js} +35 -3
  66. package/dist/assets/{WorkflowActivator-DQhm5t0U.css → WorkflowActivator-brtYjIty.css} +2 -2
  67. package/dist/assets/{WorkflowExecutionsInfoAccordion-B-Z0pyld.js → WorkflowExecutionsInfoAccordion-BYRGFbed.js} +1 -1
  68. package/dist/assets/{WorkflowExecutionsLandingPage-HJBYlJAc.js → WorkflowExecutionsLandingPage-DuWFInNH.js} +2 -2
  69. package/dist/assets/{WorkflowExecutionsPreview-nYDpKm_b.js → WorkflowExecutionsPreview-Bwo_dPzH.js} +5 -5
  70. package/dist/assets/{WorkflowExecutionsView-Chvs3FQ3.js → WorkflowExecutionsView-9Bir7Ax7.js} +9 -7
  71. package/dist/assets/{WorkflowExecutionsView-DEqJNNDZ.css → WorkflowExecutionsView-BUHtKz5M.css} +2 -2
  72. package/dist/assets/{WorkflowHistory-6MCJq0xa.js → WorkflowHistory-Cu1-T0_R.js} +3 -3
  73. package/dist/assets/{WorkflowOnboardingView-7WiSlKOU.js → WorkflowOnboardingView-D_PW4z5K.js} +1 -1
  74. package/dist/assets/{WorkflowPreview-Dw2NtUVX.js → WorkflowPreview-DMBM5zJ7.js} +1 -1
  75. package/dist/assets/{WorkflowsView-DXnpDXEX.js → WorkflowsView-DTJQfqt9.js} +7 -19
  76. package/dist/assets/{easyAiWorkflowUtils-BTWwHsY8.js → easyAiWorkflowUtils-oy6hZxJE.js} +1 -1
  77. package/dist/assets/{index-D0W-rAl_.js → index-DVhaXv7m.js} +6493 -1873
  78. package/dist/assets/{index-B7TFhNa2.css → index-DuAsyBNI.css} +266 -96
  79. package/dist/assets/{pushConnection.store-SZWXnCKb.js → pushConnection.store-nnc6AEL8.js} +1 -1
  80. package/dist/assets/{templateActions-DDtJe_-b.js → templateActions-BjByEL0H.js} +1 -1
  81. package/dist/assets/{useBugReporting-BGxycXGV.js → useBugReporting-Cgoz2JMv.js} +1 -1
  82. package/dist/assets/{useCanvasOperations-Byu1Z5ea.css → useCanvasOperations-BSKKylIT.css} +4 -4
  83. package/dist/assets/{useCanvasOperations-BsWyQUek.js → useCanvasOperations-CZCbgXks.js} +68 -42
  84. package/dist/assets/{useExecutionDebugging-CB_jUGyC.js → useExecutionDebugging-Czm5h-sB.js} +1 -1
  85. package/dist/assets/{useExecutionHelpers-COwnTHmy.js → useExecutionHelpers-qeNSBls3.js} +1 -1
  86. package/dist/assets/{useNodeViewVersionSwitcher-C8AkOtTL.js → useNodeViewVersionSwitcher-Z6V-jW5s.js} +1 -1
  87. package/dist/assets/{usePinnedData-872bXiu-.js → usePinnedData-9d5rr-Ll.js} +1 -1
  88. package/dist/assets/{usePushConnection-CXpJRez7.js → usePushConnection-C5MO_Lyn.js} +40 -12
  89. package/dist/assets/{useRunWorkflow-u9KNHrnZ.js → useRunWorkflow-BeM5B2jX.js} +4 -8
  90. package/dist/assets/{useWorkflowActivate-D8Du1iYk.js → useWorkflowActivate-CAW-Lrw6.js} +1 -1
  91. package/dist/index.html +2 -2
  92. package/package.json +1 -1
  93. package/dist/assets/CollectionParameter-Cmdh94LV.js +0 -4
@@ -1,7 +1,7 @@
1
- import { f as useCanvasOperations, d as useVueFlow, e as useCanvasMapping, _ as __unplugin_components_0$1 } from "./useCanvasOperations-BsWyQUek.js";
2
- import { d as defineComponent, T as useWorkflowsStore, bn as useNodeTypesStore, U as useRoute, b as useRouter, r as ref, q as computed, o as onMounted, c as openBlock, h as createElementBlock, e as createBlock, n as normalizeClass, f as createCommentVNode, i as createVNode, w as withCtx, j as createBaseVNode, k as createTextVNode, t as toDisplayString, l as unref, aO as N8nTooltip, g as useI18n, C as createEventBus, aa as useCssModule, m as resolveComponent, _ as _export_sfc, hI as useTestDefinitionStore, F as Fragment, s as renderSlot, ay as withDirectives, az as vShow, hJ as ElCollapseTransition, y as nextTick, A as renderList, hC as _sfc_main$9, hK as __unplugin_components_0$2, J as useDebounce, a as useToast, hA as useAnnotationTagsStore, K as useUIStore, V as VIEWS, H as watch, hL as TestRunsTable, hM as NODE_PINNING_MODAL_KEY, hN as Modal } from "./index-D0W-rAl_.js";
3
- import "./useBugReporting-BGxycXGV.js";
4
- import "./usePinnedData-872bXiu-.js";
1
+ import { f as useCanvasOperations, d as useVueFlow, e as useCanvasMapping, _ as __unplugin_components_0 } from "./useCanvasOperations-CZCbgXks.js";
2
+ import { d as defineComponent, T as useWorkflowsStore, bp as useNodeTypesStore, U as useRoute, b as useRouter, r as ref, q as computed, o as onMounted, c as openBlock, h as createElementBlock, e as createBlock, n as normalizeClass, f as createCommentVNode, i as createVNode, w as withCtx, j as createBaseVNode, k as createTextVNode, t as toDisplayString, l as unref, aQ as N8nTooltip, g as useI18n, C as createEventBus, aa as useCssModule, m as resolveComponent, _ as _export_sfc, hM as useTestDefinitionStore, F as Fragment, s as renderSlot, ay as withDirectives, az as vShow, hN as ElCollapseTransition, y as nextTick, A as renderList, hG as _sfc_main$9, hO as __unplugin_components_0$1, J as useDebounce, a as useToast, hE as useAnnotationTagsStore, K as useUIStore, V as VIEWS, H as watch, hP as TestRunsTable, hQ as NODE_PINNING_MODAL_KEY, hR as Modal, hS as __unplugin_components_0$2 } from "./index-DVhaXv7m.js";
3
+ import "./useBugReporting-Cgoz2JMv.js";
4
+ import "./usePinnedData-9d5rr-Ll.js";
5
5
  const _sfc_main$8 = /* @__PURE__ */ defineComponent({
6
6
  __name: "NodesPinning",
7
7
  props: {
@@ -23,14 +23,14 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
23
23
  const isLoading = ref(true);
24
24
  const workflowId = computed(() => route.params.name);
25
25
  const testId = computed(() => route.params.testId);
26
- const workflow2 = computed(() => workflowsStore.getWorkflowById(workflowId.value));
26
+ const workflow = computed(() => workflowsStore.getWorkflowById(workflowId.value));
27
27
  const workflowObject = computed(() => workflowsStore.getCurrentWorkflow(true));
28
28
  const canvasId = computed(() => `${uuid}-${testId.value}`);
29
29
  const { onNodesInitialized, fitView, zoomTo } = useVueFlow({ id: canvasId.value });
30
30
  const nodes = computed(() => {
31
- return workflow2.value.nodes ?? [];
31
+ return workflow.value.nodes ?? [];
32
32
  });
33
- const connections = computed(() => workflow2.value.connections);
33
+ const connections = computed(() => workflow.value.connections);
34
34
  const { nodes: mappedNodes, connections: mappedConnections } = useCanvasMapping({
35
35
  nodes,
36
36
  connections,
@@ -44,7 +44,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
44
44
  workflowsStore.fetchWorkflow(workflowId.value)
45
45
  ]);
46
46
  await loadingPromise;
47
- initializeWorkspace(workflow2.value);
47
+ initializeWorkspace(workflow.value);
48
48
  disableAllNodes();
49
49
  }
50
50
  function getNodeNameById(id) {
@@ -71,12 +71,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
71
71
  function disableAllNodes() {
72
72
  const ids = mappedNodes.value.map((node) => node.id);
73
73
  updateNodeClasses(ids, false);
74
- const pinnedNodes = props.modelValue.map((node) => {
75
- const matchedNode = mappedNodes.value.find(
76
- (mappedNode) => mappedNode?.data?.name === node.name
77
- );
78
- return matchedNode?.id ?? null;
79
- }).filter((n) => n !== null);
74
+ const pinnedNodes = props.modelValue.map((node) => node.id).filter((id) => id !== null);
80
75
  if (pinnedNodes.length > 0) {
81
76
  updateNodeClasses(pinnedNodes, true);
82
77
  }
@@ -84,8 +79,8 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
84
79
  function onPinButtonClick(data) {
85
80
  const nodeName = getNodeNameById(data.id);
86
81
  if (!nodeName) return;
87
- const isPinned = props.modelValue.some((node) => node.name === nodeName);
88
- const updatedNodes = isPinned ? props.modelValue.filter((node) => node.name !== nodeName) : [...props.modelValue, { name: nodeName }];
82
+ const isPinned = props.modelValue.some((node) => node.id === data.id);
83
+ const updatedNodes = isPinned ? props.modelValue.filter((node) => node.id !== data.id) : [...props.modelValue, { name: nodeName, id: data.id }];
89
84
  emit("update:modelValue", updatedNodes);
90
85
  updateNodeClasses([data.id], !isPinned);
91
86
  }
@@ -101,7 +96,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
101
96
  return (_ctx, _cache) => {
102
97
  const _component_N8nSpinner = resolveComponent("N8nSpinner");
103
98
  const _component_n8n_icon_button = resolveComponent("n8n-icon-button");
104
- const _component_Canvas = __unplugin_components_0$1;
99
+ const _component_Canvas = __unplugin_components_0;
105
100
  return openBlock(), createElementBlock("div", {
106
101
  class: normalizeClass(_ctx.$style.container)
107
102
  }, [
@@ -138,6 +133,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
138
133
  size: "large",
139
134
  icon: "thumbtack",
140
135
  class: normalizeClass(_ctx.$style.pinButton),
136
+ "data-test-id": "node-pin-button",
141
137
  onClick: ($event) => onPinButtonClick(data)
142
138
  }, null, 8, ["class", "onClick"])
143
139
  ]),
@@ -168,7 +164,7 @@ const style0$7 = {
168
164
  const cssModules$7 = {
169
165
  "$style": style0$7
170
166
  };
171
- const __unplugin_components_1 = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__cssModules", cssModules$7]]);
167
+ const __unplugin_components_2 = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__cssModules", cssModules$7]]);
172
168
  const arrowConnector = "_arrowConnector_1mi41_123";
173
169
  const style0$6 = {
174
170
  arrowConnector
@@ -182,7 +178,7 @@ function _sfc_render(_ctx, _cache) {
182
178
  const cssModules$6 = {
183
179
  "$style": style0$6
184
180
  };
185
- const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render], ["__cssModules", cssModules$6]]);
181
+ const __unplugin_components_1 = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render], ["__cssModules", cssModules$6]]);
186
182
  function useTestDefinitionForm() {
187
183
  const evaluationsStore = useTestDefinitionStore();
188
184
  const state = ref({
@@ -196,7 +192,11 @@ function useTestDefinitionForm() {
196
192
  tempValue: [],
197
193
  isEditing: false
198
194
  },
199
- description: "",
195
+ description: {
196
+ value: "",
197
+ tempValue: "",
198
+ isEditing: false
199
+ },
200
200
  evaluationWorkflow: {
201
201
  mode: "list",
202
202
  value: "",
@@ -210,7 +210,8 @@ function useTestDefinitionForm() {
210
210
  const fields = ref({});
211
211
  const editableFields = computed(() => ({
212
212
  name: state.value.name,
213
- tags: state.value.tags
213
+ tags: state.value.tags,
214
+ description: state.value.description
214
215
  }));
215
216
  const loadTestData = async (testId) => {
216
217
  try {
@@ -218,7 +219,11 @@ function useTestDefinitionForm() {
218
219
  const testDefinition = evaluationsStore.testDefinitionsById[testId];
219
220
  if (testDefinition) {
220
221
  const metrics = await evaluationsStore.fetchMetrics(testId);
221
- state.value.description = testDefinition.description ?? "";
222
+ state.value.description = {
223
+ value: testDefinition.description ?? "",
224
+ isEditing: false,
225
+ tempValue: ""
226
+ };
222
227
  state.value.name = {
223
228
  value: testDefinition.name ?? "",
224
229
  isEditing: false,
@@ -249,7 +254,7 @@ function useTestDefinitionForm() {
249
254
  const params = {
250
255
  name: state.value.name.value,
251
256
  workflowId,
252
- description: state.value.description
257
+ description: state.value.description.value
253
258
  };
254
259
  return await evaluationsStore.create(params);
255
260
  } finally {
@@ -277,7 +282,9 @@ function useTestDefinitionForm() {
277
282
  });
278
283
  }
279
284
  });
285
+ isSaving.value = true;
280
286
  await Promise.all(promises);
287
+ isSaving.value = false;
281
288
  };
282
289
  const updateTest = async (testId) => {
283
290
  if (isSaving.value) return;
@@ -289,7 +296,7 @@ function useTestDefinitionForm() {
289
296
  }
290
297
  const params = {
291
298
  name: state.value.name.value,
292
- description: state.value.description
299
+ description: state.value.description.value
293
300
  };
294
301
  if (state.value.evaluationWorkflow.value) {
295
302
  params.evaluationWorkflowId = state.value.evaluationWorkflow.value.toString();
@@ -301,13 +308,14 @@ function useTestDefinitionForm() {
301
308
  if (state.value.mockedNodes.length > 0) {
302
309
  params.mockedNodes = state.value.mockedNodes;
303
310
  }
304
- return await evaluationsStore.update({ ...params, id: testId });
311
+ const response = await evaluationsStore.update({ ...params, id: testId });
312
+ return response;
305
313
  } finally {
306
314
  isSaving.value = false;
307
315
  }
308
316
  };
309
- function startEditing(field2) {
310
- const fieldObj = editableFields.value[field2];
317
+ function startEditing(field) {
318
+ const fieldObj = editableFields.value[field];
311
319
  if (fieldObj.isEditing) {
312
320
  return;
313
321
  }
@@ -318,13 +326,13 @@ function useTestDefinitionForm() {
318
326
  }
319
327
  fieldObj.isEditing = true;
320
328
  }
321
- function saveChanges(field2) {
322
- const fieldObj = editableFields.value[field2];
329
+ function saveChanges(field) {
330
+ const fieldObj = editableFields.value[field];
323
331
  fieldObj.value = Array.isArray(fieldObj.tempValue) ? [...fieldObj.tempValue] : fieldObj.tempValue;
324
332
  fieldObj.isEditing = false;
325
333
  }
326
- function cancelEditing(field2) {
327
- const fieldObj = editableFields.value[field2];
334
+ function cancelEditing(field) {
335
+ const fieldObj = editableFields.value[field];
328
336
  if (Array.isArray(fieldObj.value)) {
329
337
  fieldObj.tempValue = [...fieldObj.value];
330
338
  } else {
@@ -332,12 +340,12 @@ function useTestDefinitionForm() {
332
340
  }
333
341
  fieldObj.isEditing = false;
334
342
  }
335
- function handleKeydown(event, field2) {
343
+ function handleKeydown(event, field) {
336
344
  if (event.key === "Escape") {
337
- cancelEditing(field2);
345
+ cancelEditing(field);
338
346
  } else if (event.key === "Enter" && !event.shiftKey) {
339
347
  event.preventDefault();
340
- saveChanges(field2);
348
+ saveChanges(field);
341
349
  }
342
350
  }
343
351
  return {
@@ -374,8 +382,8 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
374
382
  class: normalizeClass(_ctx.$style.header)
375
383
  }, [
376
384
  createVNode(_component_n8n_icon_button, {
377
- icon: "arrow-left",
378
385
  class: normalizeClass(_ctx.$style.backButton),
386
+ icon: "arrow-left",
379
387
  type: "tertiary",
380
388
  title: unref(locale).baseText("testDefinition.edit.backButtonTitle"),
381
389
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$router.back())
@@ -409,14 +417,14 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
409
417
  };
410
418
  }
411
419
  });
412
- const header$1 = "_header_vi783_123";
413
- const editInputButton$1 = "_editInputButton_vi783_129";
414
- const title$1 = "_title_vi783_133";
415
- const titleText = "_titleText_vi783_144";
416
- const backButton = "_backButton_vi783_157";
420
+ const header$1 = "_header_qmfly_123";
421
+ const editInputButton$2 = "_editInputButton_qmfly_127";
422
+ const title$1 = "_title_qmfly_131";
423
+ const titleText = "_titleText_qmfly_142";
424
+ const backButton = "_backButton_qmfly_155";
417
425
  const style0$5 = {
418
426
  header: header$1,
419
- editInputButton: editInputButton$1,
427
+ editInputButton: editInputButton$2,
420
428
  title: title$1,
421
429
  titleText,
422
430
  backButton
@@ -428,40 +436,71 @@ const EvaluationHeader = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__cssModule
428
436
  const _sfc_main$5 = /* @__PURE__ */ defineComponent({
429
437
  __name: "DescriptionInput",
430
438
  props: {
431
- modelValue: { default: "" }
439
+ modelValue: {},
440
+ startEditing: { type: Function },
441
+ saveChanges: { type: Function },
442
+ handleKeydown: { type: Function }
432
443
  },
433
444
  emits: ["update:modelValue"],
434
445
  setup(__props) {
435
446
  const locale = useI18n();
436
447
  return (_ctx, _cache) => {
448
+ const _component_n8n_icon = resolveComponent("n8n-icon");
449
+ const _component_N8nText = resolveComponent("N8nText");
450
+ const _component_n8n_icon_button = resolveComponent("n8n-icon-button");
437
451
  const _component_N8nInput = resolveComponent("N8nInput");
438
- const _component_n8n_input_label = resolveComponent("n8n-input-label");
439
452
  return openBlock(), createElementBlock("div", {
440
- class: normalizeClass([_ctx.$style.description])
453
+ class: normalizeClass(_ctx.$style.description)
441
454
  }, [
442
- createVNode(_component_n8n_input_label, {
443
- label: unref(locale).baseText("testDefinition.edit.description"),
444
- bold: false,
445
- size: "small",
446
- class: normalizeClass(_ctx.$style.field)
447
- }, {
448
- default: withCtx(() => [
449
- createVNode(_component_N8nInput, {
450
- "model-value": _ctx.modelValue,
451
- type: "textarea",
452
- placeholder: unref(locale).baseText("testDefinition.edit.descriptionPlaceholder"),
453
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:modelValue", $event))
454
- }, null, 8, ["model-value", "placeholder"])
455
- ]),
456
- _: 1
457
- }, 8, ["label", "class"])
455
+ !_ctx.modelValue.isEditing ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
456
+ createBaseVNode("span", {
457
+ class: normalizeClass(_ctx.$style.descriptionText),
458
+ onClick: _cache[0] || (_cache[0] = ($event) => _ctx.startEditing("description"))
459
+ }, [
460
+ _ctx.modelValue.value.length === 0 ? (openBlock(), createBlock(_component_n8n_icon, {
461
+ key: 0,
462
+ class: normalizeClass(_ctx.$style.icon),
463
+ icon: "plus",
464
+ color: "text-light",
465
+ size: "medium"
466
+ }, null, 8, ["class"])) : createCommentVNode("", true),
467
+ createVNode(_component_N8nText, { size: "medium" }, {
468
+ default: withCtx(() => [
469
+ createTextVNode(toDisplayString(_ctx.modelValue.value.length > 0 ? _ctx.modelValue.value : "Add a description"), 1)
470
+ ]),
471
+ _: 1
472
+ })
473
+ ], 2),
474
+ createVNode(_component_n8n_icon_button, {
475
+ class: normalizeClass(_ctx.$style.editInputButton),
476
+ icon: "pen",
477
+ type: "tertiary",
478
+ onClick: _cache[1] || (_cache[1] = ($event) => _ctx.startEditing("description"))
479
+ }, null, 8, ["class"])
480
+ ], 64)) : (openBlock(), createBlock(_component_N8nInput, {
481
+ key: 1,
482
+ ref: "descriptionInput",
483
+ "data-test-id": "evaluation-description-input",
484
+ "model-value": _ctx.modelValue.tempValue,
485
+ type: "textarea",
486
+ placeholder: unref(locale).baseText("testDefinition.edit.descriptionPlaceholder"),
487
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => _ctx.$emit("update:modelValue", { ..._ctx.modelValue, tempValue: $event })),
488
+ onBlur: _cache[3] || (_cache[3] = () => _ctx.saveChanges("description")),
489
+ onKeydown: _cache[4] || (_cache[4] = (e) => _ctx.handleKeydown(e, "description"))
490
+ }, null, 8, ["model-value", "placeholder"]))
458
491
  ], 2);
459
492
  };
460
493
  }
461
494
  });
462
- const field = "_field_2al59_123";
495
+ const description$1 = "_description_f14k1_123";
496
+ const editInputButton$1 = "_editInputButton_f14k1_129";
497
+ const descriptionText = "_descriptionText_f14k1_133";
498
+ const icon$1 = "_icon_f14k1_139";
463
499
  const style0$4 = {
464
- field
500
+ description: description$1,
501
+ editInputButton: editInputButton$1,
502
+ descriptionText,
503
+ icon: icon$1
465
504
  };
466
505
  const cssModules$4 = {
467
506
  "$style": style0$4
@@ -475,7 +514,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
475
514
  warning: { type: Boolean, default: false },
476
515
  small: { type: Boolean, default: false },
477
516
  expanded: { type: Boolean, default: true },
478
- tooltip: { default: "" }
517
+ description: { default: "" }
479
518
  },
480
519
  setup(__props) {
481
520
  const props = __props;
@@ -483,7 +522,6 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
483
522
  const isExpanded = ref(props.expanded);
484
523
  const contentRef = ref(null);
485
524
  const containerRef = ref(null);
486
- const isTooltipVisible = ref(false);
487
525
  const toggleExpand = async () => {
488
526
  isExpanded.value = !isExpanded.value;
489
527
  if (isExpanded.value) {
@@ -493,12 +531,6 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
493
531
  }
494
532
  }
495
533
  };
496
- const showTooltip = () => {
497
- isTooltipVisible.value = true;
498
- };
499
- const hideTooltip = () => {
500
- isTooltipVisible.value = false;
501
- };
502
534
  return (_ctx, _cache) => {
503
535
  const _component_font_awesome_icon = resolveComponent("font-awesome-icon");
504
536
  return openBlock(), createElementBlock("div", {
@@ -507,26 +539,8 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
507
539
  class: normalizeClass([_ctx.$style.evaluationStep, _ctx.small && _ctx.$style.small]),
508
540
  "data-test-id": "evaluation-step"
509
541
  }, [
510
- createVNode(unref(N8nTooltip), {
511
- disabled: !_ctx.tooltip,
512
- placement: "right",
513
- offset: 25,
514
- visible: isTooltipVisible.value
515
- }, {
516
- content: withCtx(() => [
517
- createTextVNode(toDisplayString(_ctx.tooltip), 1)
518
- ]),
519
- default: withCtx(() => [
520
- createBaseVNode("div", {
521
- class: normalizeClass(_ctx.$style.contentPlaceholder)
522
- }, null, 2)
523
- ]),
524
- _: 1
525
- }, 8, ["disabled", "visible"]),
526
542
  createBaseVNode("div", {
527
- class: normalizeClass(_ctx.$style.content),
528
- onMouseenter: showTooltip,
529
- onMouseleave: hideTooltip
543
+ class: normalizeClass(_ctx.$style.content)
530
544
  }, [
531
545
  createBaseVNode("div", {
532
546
  class: normalizeClass(_ctx.$style.header)
@@ -558,7 +572,11 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
558
572
  }, null, 8, ["icon"])
559
573
  ], 10, _hoisted_1$1)) : createCommentVNode("", true)
560
574
  ], 2),
561
- _ctx.$slots.cardContent ? (openBlock(), createBlock(unref(ElCollapseTransition), { key: 0 }, {
575
+ _ctx.description ? (openBlock(), createElementBlock("div", {
576
+ key: 0,
577
+ class: normalizeClass(_ctx.$style.description)
578
+ }, toDisplayString(_ctx.description), 3)) : createCommentVNode("", true),
579
+ _ctx.$slots.cardContent ? (openBlock(), createBlock(unref(ElCollapseTransition), { key: 1 }, {
562
580
  default: withCtx(() => [
563
581
  withDirectives(createBaseVNode("div", {
564
582
  class: normalizeClass(_ctx.$style.cardContentWrapper)
@@ -577,36 +595,36 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
577
595
  ]),
578
596
  _: 3
579
597
  })) : createCommentVNode("", true)
580
- ], 34)
598
+ ], 2)
581
599
  ], 2);
582
600
  };
583
601
  }
584
602
  });
585
- const evaluationStep = "_evaluationStep_11knb_123";
586
- const small = "_small_11knb_135";
587
- const contentPlaceholder = "_contentPlaceholder_11knb_139";
588
- const icon = "_icon_11knb_148";
589
- const warning = "_warning_11knb_157";
590
- const content = "_content_11knb_139";
591
- const header = "_header_11knb_166";
592
- const title = "_title_11knb_172";
593
- const warningIcon = "_warningIcon_11knb_178";
594
- const cardContent = "_cardContent_11knb_182";
595
- const collapseButton = "_collapseButton_11knb_187";
596
- const cardContentWrapper = "_cardContentWrapper_11knb_200";
603
+ const evaluationStep = "_evaluationStep_65xdl_123";
604
+ const small = "_small_65xdl_135";
605
+ const icon = "_icon_65xdl_140";
606
+ const warning = "_warning_65xdl_149";
607
+ const content$1 = "_content_65xdl_153";
608
+ const header = "_header_65xdl_158";
609
+ const title = "_title_65xdl_164";
610
+ const warningIcon = "_warningIcon_65xdl_170";
611
+ const cardContent = "_cardContent_65xdl_174";
612
+ const collapseButton = "_collapseButton_65xdl_179";
613
+ const cardContentWrapper = "_cardContentWrapper_65xdl_192";
614
+ const description = "_description_65xdl_196";
597
615
  const style0$3 = {
598
616
  evaluationStep,
599
617
  small,
600
- contentPlaceholder,
601
618
  icon,
602
619
  warning,
603
- content,
620
+ content: content$1,
604
621
  header,
605
622
  title,
606
623
  warningIcon,
607
624
  cardContent,
608
625
  collapseButton,
609
- cardContentWrapper
626
+ cardContentWrapper,
627
+ description
610
628
  };
611
629
  const cssModules$3 = {
612
630
  "$style": style0$3
@@ -732,7 +750,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
732
750
  setup(__props) {
733
751
  const locale = useI18n();
734
752
  return (_ctx, _cache) => {
735
- const _component_WorkflowSelectorParameterInput = __unplugin_components_0$2;
753
+ const _component_WorkflowSelectorParameterInput = __unplugin_components_0$1;
736
754
  const _component_n8n_input_label = resolveComponent("n8n-input-label");
737
755
  return openBlock(), createElementBlock("div", null, [
738
756
  createVNode(_component_n8n_input_label, {
@@ -776,9 +794,9 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
776
794
  function addNewMetric() {
777
795
  emit("update:modelValue", [...props.modelValue, { name: "" }]);
778
796
  }
779
- function updateMetric(index, name) {
797
+ function updateMetric(index, name2) {
780
798
  const newMetrics = [...props.modelValue];
781
- newMetrics[index].name = name;
799
+ newMetrics[index].name = name2;
782
800
  emit("update:modelValue", newMetrics);
783
801
  }
784
802
  function onDeleteMetric(metric) {
@@ -869,6 +887,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
869
887
  const {
870
888
  state,
871
889
  fieldsIssues,
890
+ isSaving,
872
891
  cancelEditing,
873
892
  loadTestData,
874
893
  createTest,
@@ -884,11 +903,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
884
903
  const tagsById = computed(() => tagsStore.tagsById);
885
904
  const testId = computed(() => props.testId ?? route.params.testId);
886
905
  const currentWorkflowId = computed(() => route.params.name);
906
+ const appliedTheme = computed(() => uiStore.appliedTheme);
887
907
  const tagUsageCount = computed(
888
908
  () => tagsStore.tagsById[state.value.tags.value[0]]?.usageCount ?? 0
889
909
  );
910
+ const hasRuns = computed(() => runs2.value.length > 0);
890
911
  const nodePinningModal = ref(null);
891
912
  const modalContentWidth = ref(0);
913
+ const showConfig = ref(true);
914
+ const selectedMetric = ref("");
892
915
  onMounted(async () => {
893
916
  if (!testDefinitionStore.isFeatureEnabled) {
894
917
  toast.showMessage({
@@ -950,18 +973,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
950
973
  await testDefinitionStore.startTestRun(testId.value);
951
974
  await testDefinitionStore.fetchTestRuns(testId.value);
952
975
  }
953
- const runs = computed(
976
+ const runs2 = computed(
954
977
  () => Object.values(testDefinitionStore.testRunsById ?? {}).filter(
955
978
  (run) => run.testDefinitionId === testId.value
956
979
  )
957
980
  );
958
- async function onDeleteRuns(runs2) {
981
+ async function onDeleteRuns(toDelete) {
959
982
  await Promise.all(
960
- runs2.map(async (run) => {
983
+ toDelete.map(async (run) => {
961
984
  await testDefinitionStore.deleteTestRun({ testDefinitionId: testId.value, runId: run.id });
962
985
  })
963
986
  );
964
987
  }
988
+ function toggleConfig() {
989
+ showConfig.value = !showConfig.value;
990
+ }
965
991
  watch(
966
992
  () => state.value.metrics,
967
993
  debounce(async () => await updateMetrics(testId.value), { debounceTime: 400 }),
@@ -979,48 +1005,106 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
979
1005
  { deep: true }
980
1006
  );
981
1007
  return (_ctx, _cache) => {
982
- const _component_font_awesome_icon = resolveComponent("font-awesome-icon");
983
- const _component_BlockArrow = __unplugin_components_0;
984
1008
  const _component_n8n_button = resolveComponent("n8n-button");
1009
+ const _component_MetricsChart = __unplugin_components_0$2;
1010
+ const _component_BlockArrow = __unplugin_components_1;
1011
+ const _component_font_awesome_icon = resolveComponent("font-awesome-icon");
985
1012
  const _component_N8nHeading = resolveComponent("N8nHeading");
986
- const _component_NodesPinning = __unplugin_components_1;
1013
+ const _component_NodesPinning = __unplugin_components_2;
987
1014
  return openBlock(), createElementBlock("div", {
988
- class: normalizeClass(_ctx.$style.container)
1015
+ class: normalizeClass([_ctx.$style.container, { [_ctx.$style.noRuns]: !hasRuns.value }])
989
1016
  }, [
990
1017
  createBaseVNode("div", {
991
- class: normalizeClass(_ctx.$style.formContent)
1018
+ class: normalizeClass(_ctx.$style.headerSection)
992
1019
  }, [
993
- createVNode(EvaluationHeader, {
994
- modelValue: unref(state).name,
995
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => unref(state).name = $event),
996
- class: normalizeClass({ "has-issues": hasIssues("name") }),
997
- "start-editing": unref(startEditing),
998
- "save-changes": unref(saveChanges),
999
- "handle-keydown": unref(handleKeydown)
1000
- }, null, 8, ["modelValue", "class", "start-editing", "save-changes", "handle-keydown"]),
1001
1020
  createBaseVNode("div", {
1002
- class: normalizeClass(_ctx.$style.panelBlock)
1021
+ class: normalizeClass(_ctx.$style.headerMeta)
1022
+ }, [
1023
+ createBaseVNode("div", {
1024
+ class: normalizeClass(_ctx.$style.name)
1025
+ }, [
1026
+ createVNode(EvaluationHeader, {
1027
+ modelValue: unref(state).name,
1028
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => unref(state).name = $event),
1029
+ class: normalizeClass({ "has-issues": hasIssues("name") }),
1030
+ "start-editing": unref(startEditing),
1031
+ "save-changes": unref(saveChanges),
1032
+ "handle-keydown": unref(handleKeydown)
1033
+ }, null, 8, ["modelValue", "class", "start-editing", "save-changes", "handle-keydown"]),
1034
+ createBaseVNode("div", {
1035
+ class: normalizeClass(_ctx.$style.lastSaved)
1036
+ }, [
1037
+ unref(isSaving) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
1038
+ createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.saving")), 1)
1039
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
1040
+ createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.saved")), 1)
1041
+ ], 64))
1042
+ ], 2)
1043
+ ], 2),
1044
+ createVNode(DescriptionInput, {
1045
+ modelValue: unref(state).description,
1046
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => unref(state).description = $event),
1047
+ "start-editing": unref(startEditing),
1048
+ "save-changes": unref(saveChanges),
1049
+ "handle-keydown": unref(handleKeydown),
1050
+ class: normalizeClass(_ctx.$style.descriptionInput)
1051
+ }, null, 8, ["modelValue", "start-editing", "save-changes", "handle-keydown", "class"])
1052
+ ], 2),
1053
+ createBaseVNode("div", {
1054
+ class: normalizeClass(_ctx.$style.controls)
1055
+ }, [
1056
+ runs2.value.length > 0 ? (openBlock(), createBlock(_component_n8n_button, {
1057
+ key: 0,
1058
+ size: "small",
1059
+ icon: showConfig.value ? "eye-slash" : "eye",
1060
+ "data-test-id": "toggle-config-button",
1061
+ label: showConfig.value ? unref(locale).baseText("testDefinition.edit.hideConfig") : unref(locale).baseText("testDefinition.edit.showConfig"),
1062
+ type: "tertiary",
1063
+ onClick: toggleConfig
1064
+ }, null, 8, ["icon", "label"])) : createCommentVNode("", true),
1065
+ unref(state).evaluationWorkflow.value && unref(state).tags.value.length > 0 ? (openBlock(), createBlock(_component_n8n_button, {
1066
+ key: 1,
1067
+ class: normalizeClass(_ctx.$style.runTestButton),
1068
+ size: "small",
1069
+ "data-test-id": "run-test-button",
1070
+ label: unref(locale).baseText("testDefinition.runTest"),
1071
+ type: "primary",
1072
+ onClick: runTest
1073
+ }, null, 8, ["class", "label"])) : (openBlock(), createBlock(_component_n8n_button, {
1074
+ key: 2,
1075
+ class: normalizeClass(_ctx.$style.runTestButton),
1076
+ size: "small",
1077
+ "data-test-id": "run-test-button",
1078
+ label: unref(locale).baseText("testDefinition.edit.saveTest"),
1079
+ type: "primary",
1080
+ onClick: onSaveTest
1081
+ }, null, 8, ["class", "label"]))
1082
+ ], 2)
1083
+ ], 2),
1084
+ createBaseVNode("div", {
1085
+ class: normalizeClass(_ctx.$style.content)
1086
+ }, [
1087
+ runs2.value.length > 0 ? (openBlock(), createElementBlock("div", {
1088
+ key: 0,
1089
+ class: normalizeClass(_ctx.$style.runs)
1090
+ }, [
1091
+ createVNode(_component_MetricsChart, {
1092
+ selectedMetric: selectedMetric.value,
1093
+ "onUpdate:selectedMetric": _cache[2] || (_cache[2] = ($event) => selectedMetric.value = $event),
1094
+ runs: runs2.value,
1095
+ theme: appliedTheme.value
1096
+ }, null, 8, ["selectedMetric", "runs", "theme"]),
1097
+ createVNode(TestRunsTable, {
1098
+ class: normalizeClass(_ctx.$style.runsTable),
1099
+ runs: runs2.value,
1100
+ selectable: true,
1101
+ "data-test-id": "past-runs-table",
1102
+ onDeleteRuns
1103
+ }, null, 8, ["class", "runs"])
1104
+ ], 2)) : createCommentVNode("", true),
1105
+ createBaseVNode("div", {
1106
+ class: normalizeClass([_ctx.$style.panelBlock, { [_ctx.$style.hidden]: !showConfig.value }])
1003
1107
  }, [
1004
- createVNode(EvaluationStep, {
1005
- class: normalizeClass(_ctx.$style.step),
1006
- title: unref(locale).baseText("testDefinition.edit.description"),
1007
- expanded: false,
1008
- tooltip: unref(locale).baseText("testDefinition.edit.description.tooltip")
1009
- }, {
1010
- icon: withCtx(() => [
1011
- createVNode(_component_font_awesome_icon, {
1012
- icon: "thumbtack",
1013
- size: "lg"
1014
- })
1015
- ]),
1016
- cardContent: withCtx(() => [
1017
- createVNode(DescriptionInput, {
1018
- modelValue: unref(state).description,
1019
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => unref(state).description = $event)
1020
- }, null, 8, ["modelValue"])
1021
- ]),
1022
- _: 1
1023
- }, 8, ["class", "title", "tooltip"]),
1024
1108
  createBaseVNode("div", {
1025
1109
  class: normalizeClass(_ctx.$style.panelIntro)
1026
1110
  }, toDisplayString(unref(locale).baseText("testDefinition.edit.step.intro")), 3),
@@ -1032,7 +1116,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1032
1116
  title: unref(locale).baseText("testDefinition.edit.step.executions", {
1033
1117
  adjustToNumber: tagUsageCount.value
1034
1118
  }),
1035
- tooltip: unref(locale).baseText("testDefinition.edit.step.executions.tooltip")
1119
+ description: unref(locale).baseText("testDefinition.edit.step.executions.description")
1036
1120
  }, {
1037
1121
  icon: withCtx(() => [
1038
1122
  createVNode(_component_font_awesome_icon, {
@@ -1043,7 +1127,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1043
1127
  cardContent: withCtx(() => [
1044
1128
  createVNode(TagsInput, {
1045
1129
  modelValue: unref(state).tags,
1046
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => unref(state).tags = $event),
1130
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => unref(state).tags = $event),
1047
1131
  class: normalizeClass({ "has-issues": hasIssues("tags") }),
1048
1132
  "all-tags": allTags.value,
1049
1133
  "tags-by-id": tagsById.value,
@@ -1055,7 +1139,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1055
1139
  }, null, 8, ["modelValue", "class", "all-tags", "tags-by-id", "is-loading", "start-editing", "save-changes", "cancel-editing"])
1056
1140
  ]),
1057
1141
  _: 1
1058
- }, 8, ["class", "title", "tooltip"]),
1142
+ }, 8, ["class", "title", "description"]),
1059
1143
  createBaseVNode("div", {
1060
1144
  class: normalizeClass(_ctx.$style.evaluationArrows)
1061
1145
  }, [
@@ -1069,7 +1153,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1069
1153
  }),
1070
1154
  small: true,
1071
1155
  expanded: true,
1072
- tooltip: unref(locale).baseText("testDefinition.edit.step.nodes.tooltip")
1156
+ description: unref(locale).baseText("testDefinition.edit.step.nodes.description")
1073
1157
  }, {
1074
1158
  icon: withCtx(() => [
1075
1159
  createVNode(_component_font_awesome_icon, {
@@ -1087,12 +1171,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1087
1171
  }, null, 8, ["label"])
1088
1172
  ]),
1089
1173
  _: 1
1090
- }, 8, ["class", "title", "tooltip"]),
1174
+ }, 8, ["class", "title", "description"]),
1091
1175
  createVNode(EvaluationStep, {
1092
1176
  class: normalizeClass(_ctx.$style.step),
1093
1177
  title: unref(locale).baseText("testDefinition.edit.step.reRunExecutions"),
1094
1178
  small: true,
1095
- tooltip: unref(locale).baseText("testDefinition.edit.step.reRunExecutions.tooltip")
1179
+ description: unref(locale).baseText("testDefinition.edit.step.reRunExecutions.description")
1096
1180
  }, {
1097
1181
  icon: withCtx(() => [
1098
1182
  createVNode(_component_font_awesome_icon, {
@@ -1101,11 +1185,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1101
1185
  })
1102
1186
  ]),
1103
1187
  _: 1
1104
- }, 8, ["class", "title", "tooltip"]),
1188
+ }, 8, ["class", "title", "description"]),
1105
1189
  createVNode(EvaluationStep, {
1106
1190
  class: normalizeClass(_ctx.$style.step),
1107
1191
  title: unref(locale).baseText("testDefinition.edit.step.compareExecutions"),
1108
- tooltip: unref(locale).baseText("testDefinition.edit.step.compareExecutions.tooltip")
1192
+ description: unref(locale).baseText("testDefinition.edit.step.compareExecutions.description")
1109
1193
  }, {
1110
1194
  icon: withCtx(() => [
1111
1195
  createVNode(_component_font_awesome_icon, {
@@ -1116,16 +1200,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1116
1200
  cardContent: withCtx(() => [
1117
1201
  createVNode(_sfc_main$2, {
1118
1202
  modelValue: unref(state).evaluationWorkflow,
1119
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => unref(state).evaluationWorkflow = $event),
1203
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => unref(state).evaluationWorkflow = $event),
1120
1204
  class: normalizeClass({ "has-issues": hasIssues("evaluationWorkflow") })
1121
1205
  }, null, 8, ["modelValue", "class"])
1122
1206
  ]),
1123
1207
  _: 1
1124
- }, 8, ["class", "title", "tooltip"]),
1208
+ }, 8, ["class", "title", "description"]),
1125
1209
  createVNode(EvaluationStep, {
1126
1210
  class: normalizeClass(_ctx.$style.step),
1127
1211
  title: unref(locale).baseText("testDefinition.edit.step.metrics"),
1128
- tooltip: unref(locale).baseText("testDefinition.edit.step.metrics.tooltip")
1212
+ description: unref(locale).baseText("testDefinition.edit.step.metrics.description")
1129
1213
  }, {
1130
1214
  icon: withCtx(() => [
1131
1215
  createVNode(_component_font_awesome_icon, {
@@ -1136,53 +1220,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1136
1220
  cardContent: withCtx(() => [
1137
1221
  createVNode(MetricsInput, {
1138
1222
  modelValue: unref(state).metrics,
1139
- "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => unref(state).metrics = $event),
1223
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => unref(state).metrics = $event),
1140
1224
  class: normalizeClass({ "has-issues": hasIssues("metrics") }),
1141
1225
  onDeleteMetric
1142
1226
  }, null, 8, ["modelValue", "class"])
1143
1227
  ]),
1144
1228
  _: 1
1145
- }, 8, ["class", "title", "tooltip"])
1146
- ], 2),
1147
- unref(state).evaluationWorkflow.value && unref(state).tags.value.length > 0 ? (openBlock(), createBlock(_component_n8n_button, {
1148
- key: 0,
1149
- class: normalizeClass(_ctx.$style.runTestButton),
1150
- size: "small",
1151
- "data-test-id": "run-test-button",
1152
- label: unref(locale).baseText("testDefinition.runTest"),
1153
- type: "primary",
1154
- onClick: runTest
1155
- }, null, 8, ["class", "label"])) : (openBlock(), createBlock(_component_n8n_button, {
1156
- key: 1,
1157
- class: normalizeClass(_ctx.$style.runTestButton),
1158
- size: "small",
1159
- "data-test-id": "run-test-button",
1160
- label: "Save Test",
1161
- type: "primary",
1162
- onClick: onSaveTest
1163
- }, null, 8, ["class"]))
1229
+ }, 8, ["class", "title", "description"])
1230
+ ], 2)
1164
1231
  ], 2),
1165
- runs.value.length > 0 ? (openBlock(), createElementBlock("div", {
1166
- key: 0,
1167
- class: normalizeClass(_ctx.$style.runsTable)
1168
- }, [
1169
- createVNode(_component_N8nHeading, {
1170
- size: "large",
1171
- bold: true,
1172
- class: normalizeClass(_ctx.$style.runsTableHeading)
1173
- }, {
1174
- default: withCtx(() => [
1175
- createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.pastRuns")), 1)
1176
- ]),
1177
- _: 1
1178
- }, 8, ["class"]),
1179
- createVNode(TestRunsTable, {
1180
- runs: runs.value,
1181
- selectable: true,
1182
- "data-test-id": "past-runs-table",
1183
- onDeleteRuns
1184
- }, null, 8, ["runs"])
1185
- ], 2)) : createCommentVNode("", true),
1186
1232
  createVNode(Modal, {
1187
1233
  ref_key: "nodePinningModal",
1188
1234
  ref: nodePinningModal,
@@ -1205,7 +1251,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1205
1251
  content: withCtx(() => [
1206
1252
  createVNode(_component_NodesPinning, {
1207
1253
  modelValue: unref(state).mockedNodes,
1208
- "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => unref(state).mockedNodes = $event),
1254
+ "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => unref(state).mockedNodes = $event),
1209
1255
  width: modalContentWidth.value,
1210
1256
  "data-test-id": "nodes-pinning-modal"
1211
1257
  }, null, 8, ["modelValue", "width"])
@@ -1216,39 +1262,39 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1216
1262
  };
1217
1263
  }
1218
1264
  });
1219
- const container = "_container_7ygna_123";
1220
- const formContent = "_formContent_7ygna_133";
1221
- const runsTableTotal = "_runsTableTotal_7ygna_142";
1222
- const runsTable = "_runsTable_7ygna_142";
1223
- const runsTableHeading = "_runsTableHeading_7ygna_154";
1224
- const panelBlock = "_panelBlock_7ygna_159";
1225
- const panelIntro = "_panelIntro_7ygna_166";
1226
- const step = "_step_7ygna_175";
1227
- const introArrow = "_introArrow_7ygna_182";
1228
- const evaluationArrows = "_evaluationArrows_7ygna_187";
1229
- const footer = "_footer_7ygna_198";
1230
- const workflow = "_workflow_7ygna_204";
1231
- const workflowSteps = "_workflowSteps_7ygna_211";
1232
- const sideBySide = "_sideBySide_7ygna_218";
1233
- const mockedNodesLabel = "_mockedNodesLabel_7ygna_226";
1234
- const runTestButton = "_runTestButton_7ygna_231";
1265
+ const container = "_container_y9ejv_123";
1266
+ const content = "_content_y9ejv_141";
1267
+ const noRuns = "_noRuns_y9ejv_146";
1268
+ const headerSection = "_headerSection_y9ejv_151";
1269
+ const headerMeta = "_headerMeta_y9ejv_159";
1270
+ const name = "_name_y9ejv_163";
1271
+ const lastSaved = "_lastSaved_y9ejv_167";
1272
+ const descriptionInput = "_descriptionInput_y9ejv_172";
1273
+ const runs = "_runs_y9ejv_176";
1274
+ const panelBlock = "_panelBlock_y9ejv_190";
1275
+ const hidden = "_hidden_y9ejv_200";
1276
+ const panelIntro = "_panelIntro_y9ejv_210";
1277
+ const step = "_step_y9ejv_218";
1278
+ const introArrow = "_introArrow_y9ejv_225";
1279
+ const evaluationArrows = "_evaluationArrows_y9ejv_231";
1280
+ const controls = "_controls_y9ejv_242";
1235
1281
  const style0 = {
1236
1282
  container,
1237
- formContent,
1238
- runsTableTotal,
1239
- runsTable,
1240
- runsTableHeading,
1283
+ content,
1284
+ noRuns,
1285
+ headerSection,
1286
+ headerMeta,
1287
+ name,
1288
+ lastSaved,
1289
+ descriptionInput,
1290
+ runs,
1241
1291
  panelBlock,
1292
+ hidden,
1242
1293
  panelIntro,
1243
1294
  step,
1244
1295
  introArrow,
1245
1296
  evaluationArrows,
1246
- footer,
1247
- workflow,
1248
- workflowSteps,
1249
- sideBySide,
1250
- mockedNodesLabel,
1251
- runTestButton
1297
+ controls
1252
1298
  };
1253
1299
  const cssModules = {
1254
1300
  "$style": style0