n8n-editor-ui 1.85.2 → 1.87.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 (120) hide show
  1. package/dist/assets/AnimatedSpinner-ChSRgyeI.css +39 -0
  2. package/dist/assets/AnimatedSpinner-urWn52iY.js +18 -0
  3. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-B2Xk-4o2.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-DIbgkfAC.js} +1 -1
  4. package/dist/assets/{AuthView-Bhr2Ols-.js → AuthView-DIQI5asI.js} +2 -2
  5. package/dist/assets/{CanvasChatSwitch-BcSDHC-c.css → CanvasChatSwitch-0IWSu8RE.css} +488 -46
  6. package/dist/assets/{CanvasChatSwitch-E9vu2jW8.js → CanvasChatSwitch-BIpZuY-n.js} +697 -214
  7. package/dist/assets/{ChangePasswordView-BzAEcqVw.js → ChangePasswordView-D8Qv0tim.js} +3 -3
  8. package/dist/assets/CollectionParameter-DT1MnS63.js +4 -0
  9. package/dist/assets/{CredentialsView-CZiEXdjH.js → CredentialsView-tJ8-2RrO.js} +8 -8
  10. package/dist/assets/{ErrorView-C1QywuMY.js → ErrorView-CZEZD7LB.js} +1 -1
  11. package/dist/assets/{ExecutionsTime-BOPJEomw.css → ExecutionsTime-DZHUIJjP.css} +6 -6
  12. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-l5VZIkoy.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-gcknFyjA.js} +23 -20
  13. package/dist/assets/{ExecutionsView-Bo0Nk8lV.js → ExecutionsView-BCfIz8EF.js} +49 -57
  14. package/dist/assets/{ExecutionsView-JCKikuIS.css → ExecutionsView-ByQf9yli.css} +13 -47
  15. package/dist/assets/{FileSaver.min-D3VgyjMF.js → FileSaver.min-Bs2qHlKb.js} +1 -1
  16. package/dist/assets/{FixedCollectionParameter-RpfOY9Ho.js → FixedCollectionParameter-E0LDqNW3.js} +1 -1
  17. package/dist/assets/{ForgotMyPasswordView-DPTddCxG.js → ForgotMyPasswordView-YOnrzvKJ.js} +3 -3
  18. package/dist/assets/InsightsChartAverageRuntime-DWrrriYN.js +61 -0
  19. package/dist/assets/InsightsChartFailed-DRi6JC3m.js +57 -0
  20. package/dist/assets/InsightsChartFailureRate-BdFNsMpg.js +57 -0
  21. package/dist/assets/InsightsChartTimeSaved-C12GZzSQ.js +71 -0
  22. package/dist/assets/InsightsChartTotal-Cn386HO4.js +59 -0
  23. package/dist/assets/InsightsDashboard-BawwZ0Oo.js +154 -0
  24. package/dist/assets/InsightsDashboard-CB4vHnBh.css +152 -0
  25. package/dist/assets/InsightsPaywall-OeXh6LeZ.css +133 -0
  26. package/dist/assets/InsightsPaywall-g3JcqAYL.js +58 -0
  27. package/dist/assets/{useOverview-DcRuPjLJ.css → InsightsSummary-W08OzElS.css} +57 -35
  28. package/dist/assets/InsightsSummary-vMmKUcie.js +185 -0
  29. package/dist/assets/InsightsTableWorkflows-DQQ1vvMz.js +129 -0
  30. package/dist/assets/InsightsTableWorkflows-Us3j4UTO.css +128 -0
  31. package/dist/assets/{Logo-CxllxUni.js → Logo-Vm92axlM.js} +1 -1
  32. package/dist/assets/{MainHeader-9gTxUJIR.js → MainHeader-BUhpvu2K.js} +9 -10
  33. package/dist/assets/{MainSidebar-CRJML8mh.js → MainSidebar-D5P5FSUQ.js} +11 -4
  34. package/dist/assets/{NodeCreation-zoYjBJl6.js → NodeCreation-BgW5u-Bc.js} +4 -4
  35. package/dist/assets/{NodeCreator-D-qBRyBy.js → NodeCreator-CFe2n6vJ.js} +10 -26
  36. package/dist/assets/{NodeDetailsView-C1z3N5z_.css → NodeDetailsView-BT-ro74o.css} +63 -70
  37. package/dist/assets/{NodeDetailsView-C1iBFaC1.js → NodeDetailsView-CmtK-rDD.js} +145 -482
  38. package/dist/assets/{NodeView-Bio-FnnF.js → NodeView-BqaNPfpx.js} +19 -21
  39. package/dist/assets/{ProjectCardBadge-BEflW6oP.js → ProjectCardBadge-BKgtzWr1.js} +69 -36
  40. package/dist/assets/{ProjectCardBadge-C78ap7Rc.css → ProjectCardBadge-t3v64i1e.css} +18 -13
  41. package/dist/assets/{ProjectHeader-DK3_g_D8.js → ProjectHeader-BWVSdavS.js} +33 -7
  42. package/dist/assets/{ProjectHeader-B-a6_GH6.css → ProjectHeader-BsBpG-Mj.css} +7 -7
  43. package/dist/assets/{ProjectSettings-CLMy_-YC.js → ProjectSettings-BL-2-uOg.js} +3 -3
  44. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-CSazgsi8.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-BL-bMMgn.js} +1 -2
  45. package/dist/assets/{ResourcesListLayout-CBvvL0VM.js → ResourcesListLayout-CozpmfUY.js} +1 -1
  46. package/dist/assets/{RunDataAi-C-tu9GrI.js → RunDataAi-B_EadpzG.js} +188 -94
  47. package/dist/assets/{RunDataAi-CN9FrT9c.css → RunDataAi-CUUDqZRP.css} +128 -0
  48. package/dist/assets/{RunDataJson-ClpS_600.js → RunDataJson-CyNNCtyd.js} +11 -12
  49. package/dist/assets/{RunDataJsonActions-gWW8Qkt_.js → RunDataJsonActions-SQqaiBEP.js} +1 -2
  50. package/dist/assets/{RunDataSearch-Dgv5JYk-.js → RunDataSearch-BF9kshKq.js} +1 -1
  51. package/dist/assets/{RunDataTable-nsOk35pD.js → RunDataTable-DsW7wuc2.js} +10 -8
  52. package/dist/assets/{SamlOnboarding-C5TSdGcx.js → SamlOnboarding-BX7RiRJB.js} +3 -3
  53. package/dist/assets/{SettingsApiView-CzQG1ofR.js → SettingsApiView-CDIPYvaG.js} +1 -1
  54. package/dist/assets/{SettingsCommunityNodesView-D_F3n2NO.js → SettingsCommunityNodesView-BRSEkT73.js} +4 -5
  55. package/dist/assets/{SettingsExternalSecrets-BUgKlMoR.js → SettingsExternalSecrets-D7ASuAnS.js} +1 -1
  56. package/dist/assets/{SettingsLdapView-CAmuVErd.js → SettingsLdapView-DA5fZZ51.js} +1 -1
  57. package/dist/assets/{SettingsLogStreamingView-DLkHrsx5.js → SettingsLogStreamingView-C9qkYvCr.js} +1 -1
  58. package/dist/assets/{SettingsPersonalView-2elwsG0f.js → SettingsPersonalView-BnNOJcvO.js} +2 -2
  59. package/dist/assets/{SettingsSourceControl-BD426GUo.js → SettingsSourceControl--ozL4427.js} +1 -1
  60. package/dist/assets/{SettingsSso-B-7lLoTI.js → SettingsSso-Bfe_HRSr.js} +1 -1
  61. package/dist/assets/{SettingsUsageAndPlan-EUWVJYe2.js → SettingsUsageAndPlan-CzvMNudh.js} +1 -1
  62. package/dist/assets/{SettingsUsersView-C3GbTYvU.js → SettingsUsersView-DGu5ku48.js} +1 -1
  63. package/dist/assets/{SettingsView-DSMM_8SL.js → SettingsView-CvreVxXL.js} +1 -1
  64. package/dist/assets/{SetupView-CexY8Lic.js → SetupView-BJT6GtIA.js} +3 -3
  65. package/dist/assets/{SetupWorkflowCredentialsButton-BpLp754t.js → SetupWorkflowCredentialsButton-BEq2gs_-.js} +2 -4
  66. package/dist/assets/{SetupWorkflowFromTemplateView-CLvS9Kda.js → SetupWorkflowFromTemplateView-F9oCDWX8.js} +3 -12
  67. package/dist/assets/{SigninView-CYkcm3hG.js → SigninView-DyoDtCBc.js} +3 -3
  68. package/dist/assets/{SignoutView-C2HutrZm.js → SignoutView-DclBslYe.js} +1 -1
  69. package/dist/assets/{SignupView-B-o-ka0Z.js → SignupView-BhB0Hhj0.js} +3 -3
  70. package/dist/assets/{TemplateDetails-C20G_lj4.js → TemplateDetails-B3utdyMi.js} +1 -1
  71. package/dist/assets/{TemplateList-DQzcYS6n.js → TemplateList-Bgz1iiiH.js} +1 -1
  72. package/dist/assets/{TemplatesCollectionView-DEEMhmYZ.js → TemplatesCollectionView-CORzb8YZ.js} +7 -9
  73. package/dist/assets/{TemplatesSearchView-S6802uNr.js → TemplatesSearchView-DTuv4-5C.js} +3 -3
  74. package/dist/assets/{TemplatesView-CT7S5O4K.js → TemplatesView-CFV5SVF7.js} +1 -1
  75. package/dist/assets/{TemplatesWorkflowView-BMd9OmqA.js → TemplatesWorkflowView-CQVVdNty.js} +5 -7
  76. package/dist/assets/{TestDefinitionEditView-BXhOuJrU.css → TestDefinitionEditView-Cwkrz308.css} +12 -143
  77. package/dist/assets/{TestDefinitionEditView-5kDGEtaD.js → TestDefinitionEditView-DX6GIeq2.js} +179 -331
  78. package/dist/assets/{TestDefinitionListView-BM-hghAY.js → TestDefinitionListView-CLEkthYQ.js} +1 -1
  79. package/dist/assets/{TestDefinitionNewView-CNN-qAmL.js → TestDefinitionNewView-DWTTqvlN.js} +2 -2
  80. package/dist/assets/{TestDefinitionRootView-S8g84AaK.js → TestDefinitionRootView-D0yLW0V6.js} +1 -1
  81. package/dist/assets/{VariablesView-D90WCfYK.js → VariablesView-Dsr4pqth.js} +3 -3
  82. package/dist/assets/{WorkerView-BHVIRKm_.js → WorkerView-Bbu5wv-g.js} +6 -7
  83. package/dist/assets/{WorkflowActivator-BsceIfln.js → WorkflowActivator-C197X_D6.js} +2 -2
  84. package/dist/assets/{WorkflowExecutionsInfoAccordion-DxGIzmq4.js → WorkflowExecutionsInfoAccordion-CHPlRtMQ.js} +1 -1
  85. package/dist/assets/{WorkflowExecutionsLandingPage-czqJYUnQ.js → WorkflowExecutionsLandingPage-CnvMc3SA.js} +2 -2
  86. package/dist/assets/{WorkflowExecutionsPreview-BzCGXWj0.js → WorkflowExecutionsPreview-CJBM3Awe.js} +24 -256
  87. package/dist/assets/{WorkflowExecutionsPreview-CHu6M3Dh.css → WorkflowExecutionsPreview-D7jTJ8GL.css} +16 -48
  88. package/dist/assets/{WorkflowExecutionsView-syep-_N0.js → WorkflowExecutionsView-BwB6WS6M.js} +11 -17
  89. package/dist/assets/{WorkflowHistory-CmHn_hnX.js → WorkflowHistory-U5a4aYts.js} +4 -4
  90. package/dist/assets/{WorkflowOnboardingView-BmhaZBkH.js → WorkflowOnboardingView-DHUUTLOo.js} +1 -1
  91. package/dist/assets/{WorkflowPreview-BN13256Q.js → WorkflowPreview-D8pwehRe.js} +1 -1
  92. package/dist/assets/{WorkflowsView-r9qJOUEb.css → WorkflowsView-CJB9aI6A.css} +27 -41
  93. package/dist/assets/{WorkflowsView-6qbtftll.js → WorkflowsView-DIh7kqZk.js} +76 -141
  94. package/dist/assets/chartjs.utils-DTEY3u-V.js +193 -0
  95. package/dist/assets/dateFormatter-C7xnNKzY.js +21 -0
  96. package/dist/assets/{easyAiWorkflowUtils-C7LfXIgb.js → easyAiWorkflowUtils-V__OjFo9.js} +1 -1
  97. package/dist/assets/{global-link-actions-znEIb0N4.js → global-link-actions-vGpWr9Uz.js} +1 -1
  98. package/dist/assets/{import-curl-BsKs3fYs.js → import-curl-C6ERUxFe.js} +1 -1
  99. package/dist/assets/{index-Cjz62pAo.js → index-BrjPYODL.js} +3 -1
  100. package/dist/assets/{index-DZljH0cm.js → index-DD7Wuhk5.js} +11407 -5580
  101. package/dist/assets/{index-CgXKy7t-.css → index-DJ205bL0.css} +418 -92
  102. package/dist/assets/{pickBy-DlIFPp_M.js → pickBy-BILEJ4hg.js} +1 -1
  103. package/dist/assets/{templateActions-ClDjWPHA.js → templateActions-M3qRQiV6.js} +2 -7
  104. package/dist/assets/{useBeforeUnload-BFlrxvKb.js → useBeforeUnload-DTsj_abb.js} +1 -1
  105. package/dist/assets/{useCanvasMapping-CJcAsQmx.css → useCanvasMapping-BkGr1HdJ.css} +29 -28
  106. package/dist/assets/{useCanvasMapping-C0PMQVwg.js → useCanvasMapping-DJvMRP2s.js} +71 -56
  107. package/dist/assets/{useCanvasOperations-2Ca5hPmu.js → useCanvasOperations-DCaSrD1N.js} +26 -254
  108. package/dist/assets/{useClearExecutionButtonVisible-D8unhL-H.js → useClearExecutionButtonVisible-CVPKhr9F.js} +2 -2
  109. package/dist/assets/{useExecutionDebugging-MiAgkS54.js → useExecutionDebugging-yY2o_eNc.js} +1 -1
  110. package/dist/assets/{useExecutionHelpers-CgD9G_XU.js → useExecutionHelpers-BVY9xXbG.js} +2 -19
  111. package/dist/assets/{useImportCurlCommand-D6LUnncf.js → useImportCurlCommand-Chewi-_x.js} +2 -2
  112. package/dist/assets/{usePushConnection-DAhrfl2L.js → usePushConnection-9zsAnuvC.js} +13 -6
  113. package/dist/assets/{useTestDefinitionForm-TDiKTq9o.js → useTestDefinitionForm-CCVy0jKP.js} +1 -31
  114. package/dist/assets/{useWorkflowActivate-C_GRAYoC.js → useWorkflowActivate-DeEvbrsK.js} +1 -1
  115. package/dist/index.html +2 -2
  116. package/package.json +1 -1
  117. package/dist/assets/CollectionParameter-XKkHxrwX.js +0 -4
  118. package/dist/assets/pushConnection.store-DHLcz9cC.js +0 -238
  119. package/dist/assets/useOverview-BqIOGpWx.js +0 -161
  120. package/dist/assets/useRunWorkflow-sGIs6NeH.js +0 -521
@@ -1,19 +1,19 @@
1
- import { u as useTestDefinitionForm } from "./useTestDefinitionForm-TDiKTq9o.js";
2
- import { _ as _export_sfc, i as createElementBlock, g as openBlock, k as createBaseVNode, n as normalizeClass, d as defineComponent, r as ref, $ as useCssModule, q as computed, h as resolveComponent, m as unref, j as createVNode, f as createCommentVNode, aR as N8nTooltip, w as withCtx, e as createBlock, by as N8nText, x as renderSlot, F as Fragment, l as createTextVNode, t as toDisplayString, da as InfoTip, c as useI18n, ga as ne, bw as useTemplateRef, D as renderList, gb as N8nInput, aT as _sfc_main$a, b9 as N8nButton, z as nextTick, T as useWorkflowsStore, bu as useNodeTypesStore, U as useRoute, b as useRouter, fK as useModel, o as onMounted, cV as N8nHeading, gc as _sfc_main$b, b2 as mergeProps, ah as useTelemetry, a3 as useProjectsStore, gd as SAMPLE_EVALUATION_WORKFLOW, aS as N8nLink, ge as __unplugin_components_0, V as VIEWS, fJ as mergeModels, gf as Tag, gg as NODE_PINNING_MODAL_KEY, gh as __unplugin_components_0$1, aj as useMessage, fj as dateFormat, ba as watchEffect, aB as withDirectives, aC as vShow, gi as TestTableBase, c7 as N8nIcon, B as normalizeStyle, K as useDebounce, a as useToast, c4 as useTestDefinitionStore, fU as useAnnotationTagsStore, L as useUIStore, Z as useDocumentVisibility, I as watch, gj as InlineNameEdit } from "./index-DZljH0cm.js";
3
- import { u as useVueFlow, a as useCanvasMapping, C as Canvas, b as CanvasNode } from "./useCanvasMapping-C0PMQVwg.js";
4
- import { b as useCanvasOperations } from "./useCanvasOperations-2Ca5hPmu.js";
5
- import { L as Line } from "./index-Cjz62pAo.js";
6
- import "./useRunWorkflow-sGIs6NeH.js";
7
- import "./pushConnection.store-DHLcz9cC.js";
1
+ import { u as useTestDefinitionForm } from "./useTestDefinitionForm-CCVy0jKP.js";
2
+ import { _ as _export_sfc, i as createElementBlock, g as openBlock, k as createBaseVNode, n as normalizeClass, d as defineComponent, r as ref, a0 as useCssModule, q as computed, h as resolveComponent, m as unref, j as createVNode, f as createCommentVNode, aS as N8nTooltip, w as withCtx, e as createBlock, b9 as N8nText, x as renderSlot, F as Fragment, l as createTextVNode, t as toDisplayString, df as InfoTip, c as useI18n, g8 as ne, U as useWorkflowsStore, bw as useNodeTypesStore, W as useRoute, b as useRouter, fA as useModel, o as onMounted, c_ as N8nHeading, g9 as _sfc_main$9, b3 as mergeProps, bb as N8nButton, ai as useTelemetry, a4 as useProjectsStore, ga as SAMPLE_EVALUATION_WORKFLOW, aT as N8nLink, gb as __unplugin_components_0, V as VIEWS, fz as mergeModels, gc as Tag, gd as NODE_PINNING_MODAL_KEY, ge as __unplugin_components_0$1, ak as useMessage, gf as useCssVar, f9 as dateformat, bc as watchEffect, D as renderList, gg as TestTableBase, bE as N8nIcon, K as useDebounce, a as useToast, g5 as useTestDefinitionStore, fQ as useAnnotationTagsStore, L as useUIStore, $ as useDocumentVisibility, I as watch, d2 as orderBy, aU as _sfc_main$a, gh as InlineNameEdit } from "./index-DD7Wuhk5.js";
3
+ import { u as useVueFlow, a as useCanvasMapping, C as Canvas, b as CanvasNode } from "./useCanvasMapping-DJvMRP2s.js";
4
+ import { b as useCanvasOperations } from "./useCanvasOperations-DCaSrD1N.js";
5
+ import { L as Line } from "./index-BrjPYODL.js";
6
+ import { _ as __unplugin_components_0$2 } from "./AnimatedSpinner-urWn52iY.js";
7
+ import { c as convertToDisplayDate } from "./dateFormatter-C7xnNKzY.js";
8
8
  const blockArrow = "_blockArrow_hbkir_123";
9
9
  const stalk = "_stalk_hbkir_129";
10
10
  const arrowHead = "_arrowHead_hbkir_136";
11
- const style0$8 = {
11
+ const style0$7 = {
12
12
  blockArrow,
13
13
  stalk,
14
14
  arrowHead
15
15
  };
16
- const _sfc_main$9 = {};
16
+ const _sfc_main$8 = {};
17
17
  function _sfc_render(_ctx, _cache) {
18
18
  return openBlock(), createElementBlock("div", {
19
19
  class: normalizeClass(_ctx.$style.blockArrow)
@@ -26,11 +26,11 @@ function _sfc_render(_ctx, _cache) {
26
26
  }, null, 2)
27
27
  ], 2);
28
28
  }
29
- const cssModules$8 = {
30
- "$style": style0$8
29
+ const cssModules$7 = {
30
+ "$style": style0$7
31
31
  };
32
- const BlockArrow = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render], ["__cssModules", cssModules$8]]);
33
- const _sfc_main$8 = /* @__PURE__ */ defineComponent({
32
+ const BlockArrow = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render], ["__cssModules", cssModules$7]]);
33
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
34
34
  __name: "EvaluationStep",
35
35
  props: {
36
36
  title: { default: "" },
@@ -197,7 +197,7 @@ const infoTip = "_infoTip_1h8fm_172";
197
197
  const actions = "_actions_1h8fm_180";
198
198
  const cardContent = "_cardContent_1h8fm_186";
199
199
  const cardContentWrapper = "_cardContentWrapper_1h8fm_192";
200
- const style0$7 = {
200
+ const style0$6 = {
201
201
  evaluationStep,
202
202
  evaluationTooltip,
203
203
  icon,
@@ -211,79 +211,10 @@ const style0$7 = {
211
211
  cardContentWrapper,
212
212
  "has-issues": "_has-issues_1h8fm_196"
213
213
  };
214
- const cssModules$7 = {
215
- "$style": style0$7
216
- };
217
- const EvaluationStep = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__cssModules", cssModules$7]]);
218
- const _sfc_main$7 = /* @__PURE__ */ defineComponent({
219
- __name: "MetricsInput",
220
- props: {
221
- modelValue: {}
222
- },
223
- emits: ["update:modelValue", "deleteMetric"],
224
- setup(__props, { emit: __emit }) {
225
- const props = __props;
226
- const emit = __emit;
227
- const locale = useI18n();
228
- const metricsRefs = useTemplateRef("metric");
229
- function addNewMetric() {
230
- emit("update:modelValue", [...props.modelValue, { name: "" }]);
231
- void nextTick(() => metricsRefs.value?.at(-1)?.focus());
232
- }
233
- function updateMetric(index, name) {
234
- const newMetrics = [...props.modelValue];
235
- newMetrics[index].name = name;
236
- emit("update:modelValue", newMetrics);
237
- }
238
- function onDeleteMetric(metric, index) {
239
- if (!metric.id) {
240
- const newMetrics = [...props.modelValue];
241
- newMetrics.splice(index, 1);
242
- emit("update:modelValue", newMetrics);
243
- } else {
244
- emit("deleteMetric", metric);
245
- }
246
- }
247
- return (_ctx, _cache) => {
248
- return openBlock(), createElementBlock("div", null, [
249
- (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.modelValue, (metric, index) => {
250
- return openBlock(), createElementBlock("div", {
251
- key: index,
252
- class: normalizeClass([_ctx.$style.metricItem, "mb-xs"])
253
- }, [
254
- createVNode(unref(N8nInput), {
255
- ref_for: true,
256
- ref: "metric",
257
- "data-test-id": "evaluation-metric-item",
258
- "model-value": metric.name,
259
- placeholder: unref(locale).baseText("testDefinition.edit.metricsPlaceholder"),
260
- "onUpdate:modelValue": (value) => updateMetric(index, value)
261
- }, null, 8, ["model-value", "placeholder", "onUpdate:modelValue"]),
262
- createVNode(unref(_sfc_main$a), {
263
- icon: "trash",
264
- type: "secondary",
265
- text: "",
266
- onClick: ($event) => onDeleteMetric(metric, index)
267
- }, null, 8, ["onClick"])
268
- ], 2);
269
- }), 128)),
270
- createVNode(unref(N8nButton), {
271
- type: "secondary",
272
- label: unref(locale).baseText("testDefinition.edit.metricsNew"),
273
- onClick: addNewMetric
274
- }, null, 8, ["label"])
275
- ]);
276
- };
277
- }
278
- });
279
- const metricItem = "_metricItem_1hbcq_123";
280
- const style0$6 = {
281
- metricItem
282
- };
283
214
  const cssModules$6 = {
284
215
  "$style": style0$6
285
216
  };
286
- const MetricsInput = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__cssModules", cssModules$6]]);
217
+ const EvaluationStep = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__cssModules", cssModules$6]]);
287
218
  const _sfc_main$6 = /* @__PURE__ */ defineComponent({
288
219
  __name: "NodesPinning",
289
220
  props: {
@@ -407,7 +338,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
407
338
  key: 1,
408
339
  class: normalizeClass(_ctx.$style.container)
409
340
  }, [
410
- isLoading.value ? (openBlock(), createBlock(unref(_sfc_main$b), {
341
+ isLoading.value ? (openBlock(), createBlock(unref(_sfc_main$9), {
411
342
  key: 0,
412
343
  size: "large",
413
344
  type: "dots",
@@ -615,14 +546,12 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
615
546
  "tagsModifiers": {},
616
547
  "evaluationWorkflow": { required: true },
617
548
  "evaluationWorkflowModifiers": {},
618
- "metrics": { required: true },
619
- "metricsModifiers": {},
620
549
  "mockedNodes": {
621
550
  required: true
622
551
  },
623
552
  "mockedNodesModifiers": {}
624
553
  }),
625
- emits: /* @__PURE__ */ mergeModels(["openPinningModal", "deleteMetric", "openExecutionsViewForTag", "renameTag", "evaluationWorkflowCreated"], ["update:tags", "update:evaluationWorkflow", "update:metrics", "update:mockedNodes"]),
554
+ emits: /* @__PURE__ */ mergeModels(["openPinningModal", "openExecutionsViewForTag", "renameTag", "evaluationWorkflowCreated"], ["update:tags", "update:evaluationWorkflow", "update:mockedNodes"]),
626
555
  setup(__props, { emit: __emit }) {
627
556
  const props = __props;
628
557
  const emit = __emit;
@@ -651,7 +580,6 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
651
580
  __props,
652
581
  "evaluationWorkflow"
653
582
  );
654
- const metrics = useModel(__props, "metrics");
655
583
  const mockedNodes = useModel(__props, "mockedNodes");
656
584
  const selectedTag = computed(() => props.tagsById[tags.value.value[0]] ?? {});
657
585
  function openExecutionsView() {
@@ -782,25 +710,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
782
710
  }, null, 8, ["modelValue", "example-pinned-data", "class", "sample-workflow-name"])
783
711
  ]),
784
712
  _: 1
785
- }, 8, ["title", "description", "issues", "tooltip", "external-tooltip"]),
786
- createVNode(BlockArrow, { class: "mt-5xs mb-5xs" }),
787
- createVNode(EvaluationStep, {
788
- title: unref(locale).baseText("testDefinition.edit.step.metrics"),
789
- issues: _ctx.getFieldIssues("metrics"),
790
- description: unref(locale).baseText("testDefinition.edit.step.metrics.description"),
791
- tooltip: unref(locale).baseText("testDefinition.edit.step.metrics.tooltip"),
792
- "external-tooltip": !_ctx.hasRuns
793
- }, {
794
- cardContent: withCtx(() => [
795
- createVNode(MetricsInput, {
796
- modelValue: metrics.value,
797
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => metrics.value = $event),
798
- class: normalizeClass([{ "has-issues": _ctx.getFieldIssues("metrics").length > 0 }, "mt-xs"]),
799
- onDeleteMetric: _cache[4] || (_cache[4] = (metric) => emit("deleteMetric", metric))
800
- }, null, 8, ["modelValue", "class"])
801
- ]),
802
- _: 1
803
- }, 8, ["title", "issues", "description", "tooltip", "external-tooltip"])
713
+ }, 8, ["title", "description", "issues", "tooltip", "external-tooltip"])
804
714
  ], 2),
805
715
  createVNode(_component_Modal, {
806
716
  width: "calc(100% - (48px * 2))",
@@ -830,7 +740,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
830
740
  content: withCtx(() => [
831
741
  createVNode(NodesPinning, {
832
742
  modelValue: mockedNodes.value,
833
- "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => mockedNodes.value = $event),
743
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => mockedNodes.value = $event),
834
744
  "data-test-id": "nodes-pinning-modal"
835
745
  }, null, 8, ["modelValue"])
836
746
  ]),
@@ -852,61 +762,44 @@ const cssModules$4 = {
852
762
  "$style": style0$4
853
763
  };
854
764
  const ConfigSection = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__cssModules", cssModules$4]]);
855
- const THEME_COLORS = {
856
- light: {
857
- primary: "rgb(255, 110, 92)",
858
- text: {
859
- primary: "rgb(68, 68, 68)",
860
- secondary: "rgb(102, 102, 102)"
861
- },
862
- background: "rgb(255, 255, 255)",
863
- grid: "rgba(68, 68, 68, 0.1)"
864
- },
865
- dark: {
866
- primary: "rgb(255, 110, 92)",
867
- text: {
868
- primary: "rgb(255, 255, 255)",
869
- secondary: "rgba(255, 255, 255, 0.7)"
870
- },
871
- background: "rgb(32, 32, 32)",
872
- grid: "rgba(255, 255, 255, 0.1)"
873
- }
874
- };
875
- function useMetricsChart(mode = "light") {
876
- const colors = THEME_COLORS[mode];
877
- const toRGBA = (color, alpha) => {
878
- if (color.includes("rgba")) return color;
879
- return color.replace("rgb", "rgba").replace(")", `, ${alpha})`);
765
+ function useMetricsChart() {
766
+ const colors = {
767
+ primary: useCssVar("--color-primary", document.body).value,
768
+ textBase: useCssVar("--color-text-base", document.body).value,
769
+ backgroundXLight: useCssVar("--color-background-xlight", document.body).value,
770
+ foregroundLight: useCssVar("--color-foreground-light", document.body).value,
771
+ foregroundBase: useCssVar("--color-foreground-base", document.body).value,
772
+ foregroundDark: useCssVar("--color-foreground-dark", document.body).value
880
773
  };
881
774
  function generateChartData(runs2, metric) {
882
- const sortedRuns = [...runs2].sort((a, b) => new Date(a.runAt).getTime() - new Date(b.runAt).getTime()).filter((run) => run.metrics?.[metric]);
883
- return {
884
- labels: sortedRuns.map((run) => {
885
- return dateFormat(run.runAt, "yyyy-mm-dd HH:MM");
886
- }),
775
+ const data = {
887
776
  datasets: [
888
777
  {
889
- label: metric,
890
- data: sortedRuns.map((run) => run.metrics?.[metric] ?? 0),
778
+ data: runs2,
779
+ parsing: {
780
+ xAxisKey: "id",
781
+ yAxisKey: `metrics.${metric}`
782
+ },
891
783
  borderColor: colors.primary,
892
- backgroundColor: toRGBA(colors.primary, 0.1),
893
- borderWidth: 2,
894
- pointRadius: 4,
895
- pointHoverRadius: 6,
896
- pointBackgroundColor: colors.primary,
897
- pointBorderColor: colors.primary,
898
- pointHoverBackgroundColor: colors.background,
899
- pointHoverBorderColor: colors.primary,
900
- tension: 0.4,
901
- fill: true
784
+ backgroundColor: colors.backgroundXLight,
785
+ borderWidth: 1,
786
+ pointRadius: 2,
787
+ pointHoverRadius: 4,
788
+ pointBackgroundColor: colors.backgroundXLight,
789
+ pointHoverBackgroundColor: colors.backgroundXLight
902
790
  }
903
791
  ]
904
792
  };
793
+ return data;
905
794
  }
906
- function generateChartOptions(params) {
795
+ function generateChartOptions({
796
+ metric,
797
+ data
798
+ }) {
907
799
  return {
908
800
  responsive: true,
909
801
  maintainAspectRatio: false,
802
+ animation: false,
910
803
  devicePixelRatio: 2,
911
804
  interaction: {
912
805
  mode: "index",
@@ -914,67 +807,64 @@ function useMetricsChart(mode = "light") {
914
807
  },
915
808
  scales: {
916
809
  y: {
917
- beginAtZero: true,
810
+ border: {
811
+ display: false
812
+ },
918
813
  grid: {
919
- color: colors.grid
814
+ color: colors.foregroundBase
920
815
  },
921
816
  ticks: {
922
817
  padding: 8,
923
- color: colors.text.primary
924
- },
925
- title: {
926
- display: false,
927
- text: params.metric,
928
- padding: 16,
929
- color: colors.text.primary
818
+ color: colors.textBase
930
819
  }
931
820
  },
932
821
  x: {
933
- grid: {
822
+ border: {
934
823
  display: false
935
824
  },
936
- ticks: {
825
+ grid: {
937
826
  display: false
938
827
  },
939
- title: {
940
- text: params.xTitle,
941
- padding: 1,
942
- color: colors.text.primary
828
+ ticks: {
829
+ color: colors.textBase,
830
+ // eslint-disable-next-line id-denylist
831
+ callback(_tickValue, index) {
832
+ return `#${data[index].index}`;
833
+ }
943
834
  }
944
835
  }
945
836
  },
946
837
  plugins: {
947
838
  tooltip: {
948
- backgroundColor: colors.background,
949
- titleColor: colors.text.primary,
839
+ backgroundColor: colors.backgroundXLight,
840
+ titleColor: colors.textBase,
950
841
  titleFont: {
951
842
  weight: "600"
952
843
  },
953
- bodyColor: colors.text.secondary,
844
+ bodyColor: colors.textBase,
954
845
  bodySpacing: 4,
955
846
  padding: 12,
956
- borderColor: toRGBA(colors.primary, 0.2),
847
+ borderColor: colors.foregroundBase,
957
848
  borderWidth: 1,
958
849
  displayColors: true,
959
850
  callbacks: {
960
- title: (tooltipItems) => tooltipItems[0].label,
961
- label: (context) => `${params.metric}: ${context.parsed.y.toFixed(2)}`
851
+ title: (tooltipItems) => {
852
+ return dateformat(tooltipItems[0].raw.runAt, "yyyy-mm-dd HH:MM");
853
+ },
854
+ label: (context) => `${metric}: ${context.parsed.y.toFixed(2)}`,
855
+ labelColor() {
856
+ return {
857
+ borderColor: "rgba(29, 21, 21, 0)",
858
+ backgroundColor: colors.primary,
859
+ borderWidth: 0,
860
+ borderRadius: 5
861
+ };
862
+ }
962
863
  }
963
864
  },
964
865
  legend: {
965
866
  display: false
966
867
  }
967
- },
968
- animation: {
969
- duration: 750,
970
- easing: "easeInOutQuart"
971
- },
972
- transitions: {
973
- active: {
974
- animation: {
975
- duration: 300
976
- }
977
- }
978
868
  }
979
869
  };
980
870
  }
@@ -987,26 +877,29 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
987
877
  __name: "MetricsChart",
988
878
  props: {
989
879
  selectedMetric: {},
990
- runs: {},
991
- theme: {}
880
+ runs: {}
992
881
  },
993
882
  emits: ["update:selectedMetric"],
994
883
  setup(__props, { emit: __emit }) {
995
884
  const emit = __emit;
996
885
  const props = __props;
997
- const locale = useI18n();
998
- const metricsChart = useMetricsChart(props.theme);
886
+ const metricsChart = useMetricsChart();
999
887
  const availableMetrics = computed(() => {
1000
888
  return props.runs.reduce((acc, run) => {
1001
889
  const metricKeys = Object.keys(run.metrics ?? {});
1002
890
  return [.../* @__PURE__ */ new Set([...acc, ...metricKeys])];
1003
891
  }, []);
1004
892
  });
1005
- const chartData = computed(() => metricsChart.generateChartData(props.runs, props.selectedMetric));
893
+ const filteredRuns = computed(
894
+ () => props.runs.filter((run) => run.metrics?.[props.selectedMetric] !== void 0)
895
+ );
896
+ const chartData = computed(
897
+ () => metricsChart.generateChartData(filteredRuns.value, props.selectedMetric)
898
+ );
1006
899
  const chartOptions = computed(
1007
900
  () => metricsChart.generateChartOptions({
1008
901
  metric: props.selectedMetric,
1009
- xTitle: locale.baseText("testDefinition.listRuns.runDate")
902
+ data: filteredRuns.value
1010
903
  })
1011
904
  );
1012
905
  watchEffect(() => {
@@ -1017,8 +910,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1017
910
  return (_ctx, _cache) => {
1018
911
  const _component_N8nOption = resolveComponent("N8nOption");
1019
912
  const _component_N8nSelect = resolveComponent("N8nSelect");
1020
- return availableMetrics.value.length > 0 ? (openBlock(), createElementBlock("div", {
1021
- key: 0,
913
+ return openBlock(), createElementBlock("div", {
1022
914
  class: normalizeClass(_ctx.$style.metricsChartContainer)
1023
915
  }, [
1024
916
  createBaseVNode("div", {
@@ -1046,22 +938,22 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1046
938
  createBaseVNode("div", {
1047
939
  class: normalizeClass(_ctx.$style.chartWrapper)
1048
940
  }, [
1049
- availableMetrics.value.length > 0 ? (openBlock(), createBlock(unref(Line), {
941
+ (openBlock(), createBlock(unref(Line), {
1050
942
  key: _ctx.selectedMetric,
1051
943
  data: chartData.value,
1052
944
  options: chartOptions.value,
1053
945
  class: normalizeClass(_ctx.$style.metricsChart)
1054
- }, null, 8, ["data", "options", "class"])) : createCommentVNode("", true)
946
+ }, null, 8, ["data", "options", "class"]))
1055
947
  ], 2)
1056
- ], 2)) : createCommentVNode("", true);
948
+ ], 2);
1057
949
  };
1058
950
  }
1059
951
  });
1060
- const metricsChartContainer = "_metricsChartContainer_1ejem_123";
1061
- const chartHeader = "_chartHeader_1ejem_128";
1062
- const chartTitle = "_chartTitle_1ejem_136";
1063
- const metricSelect = "_metricSelect_1ejem_141";
1064
- const chartWrapper = "_chartWrapper_1ejem_144";
952
+ const metricsChartContainer = "_metricsChartContainer_1xhz2_123";
953
+ const chartHeader = "_chartHeader_1xhz2_128";
954
+ const chartTitle = "_chartTitle_1xhz2_131";
955
+ const metricSelect = "_metricSelect_1xhz2_136";
956
+ const chartWrapper = "_chartWrapper_1xhz2_139";
1065
957
  const style0$3 = {
1066
958
  metricsChartContainer,
1067
959
  chartHeader,
@@ -1078,24 +970,43 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1078
970
  __name: "TestRunsTable",
1079
971
  props: {
1080
972
  runs: {},
1081
- columns: {},
1082
- selectable: { type: Boolean }
973
+ columns: {}
1083
974
  },
1084
- emits: ["rowClick", "selectionChange", "deleteRuns"],
975
+ emits: ["rowClick"],
1085
976
  setup(__props, { emit: __emit }) {
1086
977
  const emit = __emit;
1087
978
  const props = __props;
1088
- const statusesColorDictionary = {
1089
- new: "var(--color-primary)",
1090
- running: "var(--color-secondary)",
1091
- completed: "var(--color-success)",
1092
- error: "var(--color-danger)",
1093
- cancelled: "var(--color-foreground-dark)",
1094
- warning: "var(--color-warning)",
1095
- success: "var(--color-success)"
979
+ const statusDictionary = {
980
+ new: {
981
+ icon: "status-new",
982
+ color: "foreground-xdark"
983
+ },
984
+ running: {
985
+ icon: "spinner",
986
+ color: "secondary"
987
+ },
988
+ completed: {
989
+ icon: "status-completed",
990
+ color: "success"
991
+ },
992
+ error: {
993
+ icon: "status-error",
994
+ color: "danger"
995
+ },
996
+ cancelled: {
997
+ icon: "status-canceled",
998
+ color: "foreground-xdark"
999
+ },
1000
+ warning: {
1001
+ icon: "status-warning",
1002
+ color: "warning"
1003
+ },
1004
+ success: {
1005
+ icon: "status-completed",
1006
+ color: "success"
1007
+ }
1096
1008
  };
1097
1009
  const locale = useI18n();
1098
- const selectedRows = ref([]);
1099
1010
  const runSummaries = computed(() => {
1100
1011
  return props.runs.map(({ status, finalResult, ...run }) => {
1101
1012
  if (status === "completed" && finalResult) {
@@ -1104,86 +1015,60 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1104
1015
  return { ...run, status };
1105
1016
  });
1106
1017
  });
1107
- function onSelectionChange(runs2) {
1108
- selectedRows.value = runs2;
1109
- emit("selectionChange", runs2);
1110
- }
1111
- async function deleteRuns() {
1112
- emit("deleteRuns", selectedRows.value);
1113
- }
1114
1018
  return (_ctx, _cache) => {
1115
1019
  const _component_N8nHeading = resolveComponent("N8nHeading");
1116
- const _component_n8n_button = resolveComponent("n8n-button");
1020
+ const _component_AnimatedSpinner = __unplugin_components_0$2;
1117
1021
  return openBlock(), createElementBlock("div", {
1118
1022
  class: normalizeClass(_ctx.$style.container)
1119
1023
  }, [
1120
1024
  createVNode(_component_N8nHeading, {
1121
1025
  size: "large",
1122
1026
  bold: true,
1123
- class: normalizeClass(_ctx.$style.runsTableHeading)
1027
+ class: normalizeClass(_ctx.$style.runsTableHeading),
1028
+ color: "text-base"
1124
1029
  }, {
1125
1030
  default: withCtx(() => [
1126
- createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.pastRuns.total", { adjustToNumber: _ctx.runs.length })), 1)
1031
+ createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.pastRuns.total", { adjustToNumber: _ctx.runs.length })) + " ", 1),
1032
+ createVNode(unref(N8nText), null, {
1033
+ default: withCtx(() => [
1034
+ createTextVNode(" (" + toDisplayString(_ctx.runs.length) + ") ", 1)
1035
+ ]),
1036
+ _: 1
1037
+ })
1127
1038
  ]),
1128
1039
  _: 1
1129
1040
  }, 8, ["class"]),
1130
- createBaseVNode("div", {
1131
- class: normalizeClass(_ctx.$style.header)
1132
- }, [
1133
- withDirectives(createVNode(_component_n8n_button, {
1134
- type: "danger",
1135
- class: normalizeClass(_ctx.$style.activator),
1136
- size: "medium",
1137
- icon: "trash",
1138
- "data-test-id": "delete-runs-button",
1139
- onClick: deleteRuns
1140
- }, {
1141
- default: withCtx(() => [
1142
- createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.listRuns.deleteRuns", {
1143
- adjustToNumber: selectedRows.value.length
1144
- })), 1)
1145
- ]),
1146
- _: 1
1147
- }, 8, ["class"]), [
1148
- [vShow, selectedRows.value.length > 0]
1149
- ])
1150
- ], 2),
1151
1041
  createVNode(TestTableBase, {
1152
1042
  data: runSummaries.value,
1153
1043
  columns: _ctx.columns,
1154
- selectable: "",
1155
1044
  "default-sort": { prop: "runAt", order: "descending" },
1156
- onRowClick: _cache[0] || (_cache[0] = (row) => emit("rowClick", row)),
1157
- onSelectionChange
1045
+ onRowClick: _cache[0] || (_cache[0] = (row) => emit("rowClick", row))
1158
1046
  }, {
1047
+ id: withCtx(({ row }) => [
1048
+ createTextVNode("#" + toDisplayString(row.index), 1)
1049
+ ]),
1159
1050
  status: withCtx(({ row }) => [
1160
1051
  createBaseVNode("div", _hoisted_1$1, [
1161
- createVNode(unref(N8nIcon), {
1162
- icon: "circle",
1163
- size: "xsmall",
1164
- style: normalizeStyle({ color: statusesColorDictionary[row.status] })
1165
- }, null, 8, ["style"]),
1166
- row.status === "error" ? (openBlock(), createBlock(unref(N8nText), {
1052
+ row.status === "running" ? (openBlock(), createBlock(unref(N8nText), {
1167
1053
  key: 0,
1168
- size: "small",
1169
- bold: "",
1170
- color: "text-base"
1054
+ color: "secondary",
1055
+ class: "mr-2xs"
1171
1056
  }, {
1172
1057
  default: withCtx(() => [
1173
- createTextVNode(toDisplayString(row.failedCases) + " / " + toDisplayString(row.totalCases) + " " + toDisplayString(row.status), 1)
1058
+ createVNode(_component_AnimatedSpinner)
1174
1059
  ]),
1175
- _: 2
1176
- }, 1024)) : (openBlock(), createBlock(unref(N8nText), {
1060
+ _: 1
1061
+ })) : (openBlock(), createBlock(unref(N8nIcon), {
1177
1062
  key: 1,
1178
- size: "small",
1179
- bold: "",
1180
- color: "text-base"
1181
- }, {
1182
- default: withCtx(() => [
1183
- createTextVNode(toDisplayString(row.status), 1)
1184
- ]),
1185
- _: 2
1186
- }, 1024))
1063
+ icon: statusDictionary[row.status].icon,
1064
+ color: statusDictionary[row.status].color,
1065
+ class: "mr-2xs"
1066
+ }, null, 8, ["icon", "color"])),
1067
+ row.status === "error" ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
1068
+ createTextVNode(toDisplayString(row.failedCases) + " " + toDisplayString(row.status), 1)
1069
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 3 }, [
1070
+ createTextVNode(toDisplayString(row.status), 1)
1071
+ ], 64))
1187
1072
  ])
1188
1073
  ]),
1189
1074
  _: 1
@@ -1192,7 +1077,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1192
1077
  };
1193
1078
  }
1194
1079
  });
1195
- const container = "_container_fgn23_123";
1080
+ const container = "_container_1rjad_123";
1196
1081
  const style0$2 = {
1197
1082
  container
1198
1083
  };
@@ -1204,22 +1089,17 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1204
1089
  __name: "RunsSection",
1205
1090
  props: /* @__PURE__ */ mergeModels({
1206
1091
  runs: {},
1207
- testId: {},
1208
- appliedTheme: {}
1092
+ testId: {}
1209
1093
  }, {
1210
1094
  "selectedMetric": { required: true },
1211
1095
  "selectedMetricModifiers": {}
1212
1096
  }),
1213
- emits: /* @__PURE__ */ mergeModels(["deleteRuns"], ["update:selectedMetric"]),
1214
- setup(__props, { emit: __emit }) {
1097
+ emits: ["update:selectedMetric"],
1098
+ setup(__props) {
1215
1099
  const props = __props;
1216
- const emit = __emit;
1217
1100
  const locale = useI18n();
1218
1101
  const router = useRouter();
1219
1102
  const selectedMetric = useModel(__props, "selectedMetric");
1220
- function onDeleteRuns(toDelete) {
1221
- emit("deleteRuns", toDelete);
1222
- }
1223
1103
  const metrics = computed(() => {
1224
1104
  const metricKeys = props.runs.reduce((acc, run) => {
1225
1105
  Object.keys(run.metrics ?? {}).forEach((metric) => acc.add(metric));
@@ -1234,14 +1114,13 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1234
1114
  sortable: true,
1235
1115
  showHeaderTooltip: true,
1236
1116
  sortMethod: (a, b) => (a.metrics?.[metric] ?? 0) - (b.metrics?.[metric] ?? 0),
1237
- formatter: (row) => (row.metrics?.[metric] ?? 0).toFixed(2)
1117
+ formatter: (row) => row.metrics?.[metric] !== void 0 ? (row.metrics?.[metric]).toFixed(2) : ""
1238
1118
  }))
1239
1119
  );
1240
1120
  const columns = computed(() => [
1241
1121
  {
1242
- prop: "runNumber",
1122
+ prop: "id",
1243
1123
  label: locale.baseText("testDefinition.listRuns.runNumber"),
1244
- formatter: (row) => `${row.id}`,
1245
1124
  showOverflowTooltip: true
1246
1125
  },
1247
1126
  {
@@ -1249,6 +1128,10 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1249
1128
  label: "Run at",
1250
1129
  sortable: true,
1251
1130
  showOverflowTooltip: true,
1131
+ formatter: (row) => {
1132
+ const { date, time } = convertToDisplayDate(row.runAt);
1133
+ return [date, time].join(", ");
1134
+ },
1252
1135
  sortMethod: (a, b) => new Date(a.runAt ?? a.createdAt).getTime() - new Date(b.runAt ?? b.createdAt).getTime()
1253
1136
  },
1254
1137
  {
@@ -1271,23 +1154,21 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1271
1154
  createVNode(MetricsChart, {
1272
1155
  selectedMetric: selectedMetric.value,
1273
1156
  "onUpdate:selectedMetric": _cache[0] || (_cache[0] = ($event) => selectedMetric.value = $event),
1274
- runs: _ctx.runs,
1275
- theme: _ctx.appliedTheme
1276
- }, null, 8, ["selectedMetric", "runs", "theme"]),
1157
+ runs: _ctx.runs
1158
+ }, null, 8, ["selectedMetric", "runs"]),
1277
1159
  createVNode(TestRunsTable, {
1278
1160
  class: normalizeClass(_ctx.$style.runsTable),
1279
1161
  runs: _ctx.runs,
1280
1162
  columns: columns.value,
1281
1163
  selectable: true,
1282
1164
  "data-test-id": "past-runs-table",
1283
- onDeleteRuns,
1284
1165
  onRowClick: handleRowClick
1285
1166
  }, null, 8, ["class", "runs", "columns"])
1286
1167
  ], 2);
1287
1168
  };
1288
1169
  }
1289
1170
  });
1290
- const runs = "_runs_gua3g_123";
1171
+ const runs = "_runs_37xaf_123";
1291
1172
  const style0$1 = {
1292
1173
  runs
1293
1174
  };
@@ -1321,21 +1202,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1321
1202
  await getExamplePinnedDataForTags();
1322
1203
  testDefinitionStore.updateRunFieldIssues(props.testId);
1323
1204
  });
1324
- const {
1325
- state,
1326
- isSaving,
1327
- cancelEditing,
1328
- loadTestData,
1329
- updateTest,
1330
- startEditing,
1331
- saveChanges,
1332
- deleteMetric,
1333
- updateMetrics
1334
- } = useTestDefinitionForm();
1205
+ const { state, isSaving, cancelEditing, loadTestData, updateTest, startEditing, saveChanges } = useTestDefinitionForm();
1335
1206
  const isLoading = computed(() => tagsStore.isLoading);
1336
1207
  const tagsById = computed(() => tagsStore.tagsById);
1337
1208
  const currentWorkflowId = computed(() => props.name);
1338
- const appliedTheme = computed(() => uiStore.appliedTheme);
1339
1209
  const workflowName = computed(() => workflowStore.workflow.name);
1340
1210
  const hasRuns = computed(() => runs2.value.length > 0);
1341
1211
  const fieldsIssues = computed(() => testDefinitionStore.getFieldIssues(props.testId) ?? []);
@@ -1351,19 +1221,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1351
1221
  }
1352
1222
  };
1353
1223
  const handleUpdateTestDebounced = debounce(handleUpdateTest, { debounceTime: 400, trailing: true });
1354
- const handleUpdateMetricsDebounced = debounce(
1355
- async (testId) => {
1356
- await updateMetrics(testId);
1357
- testDefinitionStore.updateRunFieldIssues(testId);
1358
- },
1359
- { debounceTime: 400, trailing: true }
1360
- );
1361
1224
  function getFieldIssues(key) {
1362
1225
  return fieldsIssues.value.filter((issue) => issue.field === key);
1363
1226
  }
1364
- async function onDeleteMetric(deletedMetric) {
1365
- await deleteMetric(deletedMetric.id, props.testId);
1366
- }
1367
1227
  async function openPinningModal() {
1368
1228
  uiStore.openModal(NODE_PINNING_MODAL_KEY);
1369
1229
  }
@@ -1379,20 +1239,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1379
1239
  });
1380
1240
  window.open(executionsRoute.href, "_blank");
1381
1241
  }
1382
- const runs2 = computed(
1383
- () => Object.values(testDefinitionStore.testRunsById ?? {}).filter(
1384
- (run) => run.testDefinitionId === props.testId
1385
- )
1386
- );
1242
+ const runs2 = computed(() => {
1243
+ const testRuns = Object.values(testDefinitionStore.testRunsById ?? {}).filter(
1244
+ ({ testDefinitionId }) => testDefinitionId === props.testId
1245
+ );
1246
+ return orderBy(testRuns, (record) => new Date(record.runAt), ["asc"]).map(
1247
+ (record, index) => Object.assign(record, { index: index + 1 })
1248
+ );
1249
+ });
1387
1250
  const isRunning = computed(() => runs2.value.some((run) => run.status === "running"));
1388
1251
  const isRunTestEnabled = computed(() => fieldsIssues.value.length === 0 && !isRunning.value);
1389
- async function onDeleteRuns(toDelete) {
1390
- await Promise.all(
1391
- toDelete.map(async (run) => {
1392
- await testDefinitionStore.deleteTestRun({ testDefinitionId: props.testId, runId: run.id });
1393
- })
1394
- );
1395
- }
1396
1252
  async function renameTag(newName) {
1397
1253
  await tagsStore.rename({ id: state.value.tags.value[0], name: newName });
1398
1254
  }
@@ -1546,10 +1402,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1546
1402
  "onUpdate:selectedMetric": _cache[1] || (_cache[1] = ($event) => selectedMetric.value = $event),
1547
1403
  class: normalizeClass(_ctx.$style.runs),
1548
1404
  runs: runs2.value,
1549
- "test-id": _ctx.testId,
1550
- "applied-theme": appliedTheme.value,
1551
- onDeleteRuns
1552
- }, null, 8, ["selectedMetric", "class", "runs", "test-id", "applied-theme"])) : createCommentVNode("", true),
1405
+ "test-id": _ctx.testId
1406
+ }, null, 8, ["selectedMetric", "class", "runs", "test-id"])) : createCommentVNode("", true),
1553
1407
  showConfig.value ? (openBlock(), createBlock(ConfigSection, {
1554
1408
  key: 1,
1555
1409
  tags: unref(state).tags,
@@ -1559,14 +1413,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1559
1413
  _cache[3] || (_cache[3] = ($event) => unref(state).evaluationWorkflow = $event),
1560
1414
  unref(handleUpdateTestDebounced)
1561
1415
  ],
1562
- metrics: unref(state).metrics,
1563
- "onUpdate:metrics": [
1564
- _cache[4] || (_cache[4] = ($event) => unref(state).metrics = $event),
1565
- _cache[6] || (_cache[6] = () => unref(handleUpdateMetricsDebounced)(_ctx.testId))
1566
- ],
1567
1416
  mockedNodes: unref(state).mockedNodes,
1568
1417
  "onUpdate:mockedNodes": [
1569
- _cache[5] || (_cache[5] = ($event) => unref(state).mockedNodes = $event),
1418
+ _cache[4] || (_cache[4] = ($event) => unref(state).mockedNodes = $event),
1570
1419
  unref(handleUpdateTestDebounced)
1571
1420
  ],
1572
1421
  class: normalizeClass(_ctx.$style.config),
@@ -1581,10 +1430,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1581
1430
  "sample-workflow-name": workflowName.value,
1582
1431
  onRenameTag: renameTag,
1583
1432
  onOpenPinningModal: openPinningModal,
1584
- onDeleteMetric,
1585
1433
  onOpenExecutionsViewForTag: openExecutionsViewForTag,
1586
- onEvaluationWorkflowCreated: _cache[7] || (_cache[7] = ($event) => onEvaluationWorkflowCreated($event))
1587
- }, null, 8, ["tags", "evaluationWorkflow", "metrics", "mockedNodes", "class", "cancel-editing", "tags-by-id", "is-loading", "start-editing", "save-changes", "has-runs", "example-pinned-data", "sample-workflow-name", "onUpdate:evaluationWorkflow", "onUpdate:mockedNodes"])) : createCommentVNode("", true)
1434
+ onEvaluationWorkflowCreated: _cache[5] || (_cache[5] = ($event) => onEvaluationWorkflowCreated($event))
1435
+ }, null, 8, ["tags", "evaluationWorkflow", "mockedNodes", "class", "cancel-editing", "tags-by-id", "is-loading", "start-editing", "save-changes", "has-runs", "example-pinned-data", "sample-workflow-name", "onUpdate:evaluationWorkflow", "onUpdate:mockedNodes"])) : createCommentVNode("", true)
1588
1436
  ], 2)
1589
1437
  ], 2)
1590
1438
  ], 2)) : createCommentVNode("", true);