n8n-editor-ui 1.93.0 → 1.95.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 (128) hide show
  1. package/dist/assets/{AnimatedSpinner-hbTZDd93.js → AnimatedSpinner-DlBYfeum.js} +1 -1
  2. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CYzc5StE.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-b_VpBPcV.js} +1 -1
  3. package/dist/assets/{AuthView-8SLMP0H_.js → AuthView-3BmNl_WD.js} +2 -2
  4. package/dist/assets/{CanvasChatSwitch-Dt8TgNJg.js → CanvasChatSwitch-C8GVNbZv.js} +16 -18
  5. package/dist/assets/{ChangePasswordView-DIRyDp89.js → ChangePasswordView-HptU1MSc.js} +3 -3
  6. package/dist/assets/CollectionParameter-DB_Or-wG.js +4 -0
  7. package/dist/assets/{CredentialsView-B6-VxAJ6.js → CredentialsView-Dx5hgaaC.js} +7 -7
  8. package/dist/assets/{DemoFooter-CIHwH5PG.js → DemoFooter-BkSVK4cp.js} +6 -8
  9. package/dist/assets/{ErrorView-C7i0TZwT.js → ErrorView-HDHwqLgc.js} +1 -1
  10. package/dist/assets/EvaluationsRootView-B5AhHo41.css +594 -0
  11. package/dist/assets/EvaluationsRootView-CwzFA39P.js +654 -0
  12. package/dist/assets/{TestDefinitionListView-Di-Edppe.css → EvaluationsView-6l_Invxt.css} +193 -76
  13. package/dist/assets/EvaluationsView-Y_Nzp-LP.js +570 -0
  14. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang--2G21NNR.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-BioZloew.js} +2 -2
  15. package/dist/assets/{ExecutionsView-C_YtciAr.js → ExecutionsView-SVk21vMq.js} +18 -18
  16. package/dist/assets/{FileSaver.min-bgn7Q9Gt.js → FileSaver.min-ZbRn_Jz1.js} +1 -1
  17. package/dist/assets/{FixedCollectionParameter-BPCJ5aaq.js → FixedCollectionParameter-iCfhPCTX.js} +1 -1
  18. package/dist/assets/{ForgotMyPasswordView-DyUaGd6Z.js → ForgotMyPasswordView-DID5un7M.js} +3 -3
  19. package/dist/assets/{InsightsChartAverageRuntime-BB2I2vpV.js → InsightsChartAverageRuntime-Db4OWo7M.js} +4 -4
  20. package/dist/assets/{InsightsChartFailed-CN_Rl3Bl.js → InsightsChartFailed-DjssZ9vc.js} +4 -4
  21. package/dist/assets/{InsightsChartFailureRate-CHKlg6tg.js → InsightsChartFailureRate-C4U_fOhA.js} +4 -4
  22. package/dist/assets/{InsightsChartTimeSaved-Cd05cM8q.js → InsightsChartTimeSaved-DmcamM8z.js} +4 -4
  23. package/dist/assets/{InsightsChartTotal-ChAO7myf.js → InsightsChartTotal-ywrK30zz.js} +4 -4
  24. package/dist/assets/{InsightsDashboard-Bx4vx9gz.css → InsightsDashboard-BSrakbzr.css} +42 -8
  25. package/dist/assets/{InsightsDashboard-BeCfBVUz.js → InsightsDashboard-CM-ieUCq.js} +43 -41
  26. package/dist/assets/{InsightsPaywall-Chz8CDc3.js → InsightsPaywall-D-bIgmwT.js} +1 -1
  27. package/dist/assets/InsightsSummary-CwTpu3sa.js +209 -0
  28. package/dist/assets/{InsightsSummary-CdlaUpAt.css → InsightsSummary-DzGQpM5h.css} +27 -24
  29. package/dist/assets/{InsightsTableWorkflows-5rpYY7YT.js → InsightsTableWorkflows-CVtm_fGN.js} +5 -6
  30. package/dist/assets/{InsightsTableWorkflows-Blv_GPUj.css → InsightsTableWorkflows-DfTZQkWL.css} +3 -4
  31. package/dist/assets/{Logo-DUDCllkm.js → Logo-nyJoHWQJ.js} +1 -1
  32. package/dist/assets/{LogsPanel-mTaFEGk_.css → LogsPanel-D7j-yJQx.css} +14 -14
  33. package/dist/assets/{LogsPanel-D9r5AcQH.js → LogsPanel-mX9Nf6VB.js} +457 -360
  34. package/dist/assets/{MainHeader-DkKOOZ_D.js → MainHeader-DrG-_mAG.js} +35 -25
  35. package/dist/assets/{MainHeader-CEMGASqv.css → MainHeader-Y95RcfHb.css} +18 -18
  36. package/dist/assets/{MainSidebar-ZUBIWeXm.js → MainSidebar-BMWCsLJG.js} +2 -2
  37. package/dist/assets/{NodeCreation-DCfAFuL5.js → NodeCreation-CO1xHNgA.js} +3 -4
  38. package/dist/assets/{NodeCreator-a0YVv1IE.js → NodeCreator-Bcr66G_2.js} +174 -69
  39. package/dist/assets/{NodeCreator-D18StsVZ.css → NodeCreator-Cp8Apzva.css} +38 -21
  40. package/dist/assets/{NodeDetailsView-C5_hVJzj.js → NodeDetailsView-BFW65Lly.js} +42 -19
  41. package/dist/assets/{NodeDetailsView-pYP-34nS.css → NodeDetailsView-BtWGMS7Y.css} +16 -16
  42. package/dist/assets/{useCanvasMapping-CTTq6x8X.js → NodeView-4aDk41Oy.js} +3559 -11337
  43. package/dist/assets/{useCanvasMapping-VtpW_QZA.css → NodeView-U4YkXSfU.css} +309 -6
  44. package/dist/assets/{ProjectCardBadge-DRlDZx3d.js → ProjectCardBadge-CLVVfcVb.js} +1 -1
  45. package/dist/assets/{ProjectHeader-DNm605Kk.js → ProjectHeader-DQk1kmw3.js} +2 -2
  46. package/dist/assets/{ProjectSettings-Dge_6KaR.js → ProjectSettings-BLTHRnTQ.js} +15 -4
  47. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-CUf0LkWR.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-DhLSSpy6.js} +1 -1
  48. package/dist/assets/{ResourcesListLayout-Bbl-1i4l.js → ResourcesListLayout-BlDcQdXw.js} +2 -2
  49. package/dist/assets/{RunData-b0RE2JWc.js → RunData-C67Kx3bc.js} +234 -92
  50. package/dist/assets/{RunData-DQeENuzG.css → RunData-CE5FsU6k.css} +2 -2
  51. package/dist/assets/{RunDataAi-DnWcCR_0.js → RunDataAi-_rd0qTgN.js} +3 -4
  52. package/dist/assets/{RunDataJson-CptVuHuA.js → RunDataJson-BP0x4Zdv.js} +6 -7
  53. package/dist/assets/{RunDataJsonActions-3jjDztw7.js → RunDataJsonActions-Bc0fqS6Y.js} +1 -1
  54. package/dist/assets/{RunDataParsedAiContent-BbXv-NPD.js → RunDataParsedAiContent-l1979DuT.js} +4 -5
  55. package/dist/assets/{RunDataSearch-B90wjsDA.js → RunDataSearch-CCGPQjFW.js} +1 -1
  56. package/dist/assets/{RunDataTable-CpS78GlT.js → RunDataTable-uzdBjxmW.js} +2 -3
  57. package/dist/assets/{SamlOnboarding-Ch9K5rRW.js → SamlOnboarding-D4xkCaRS.js} +3 -3
  58. package/dist/assets/{SettingsApiView-9GU5n_rm.js → SettingsApiView-ijuSJs-i.js} +1 -1
  59. package/dist/assets/{SettingsCommunityNodesView-CPnVRzNX.js → SettingsCommunityNodesView-D3I8P7Ea.js} +4 -4
  60. package/dist/assets/{SettingsExternalSecrets-D7xTMV9h.js → SettingsExternalSecrets-ndwnYVtu.js} +1 -1
  61. package/dist/assets/{SettingsLdapView-OfrjGKkt.js → SettingsLdapView-Dzhh3gD4.js} +1 -1
  62. package/dist/assets/{SettingsLogStreamingView-C_VnOaeX.js → SettingsLogStreamingView-D-Rr-Jph.js} +1 -1
  63. package/dist/assets/{SettingsPersonalView-Dm24akPV.js → SettingsPersonalView-Cf1cBUw8.js} +1 -1
  64. package/dist/assets/{SettingsSourceControl-DDCmL82j.js → SettingsSourceControl-BXRyD_N0.js} +1 -1
  65. package/dist/assets/{SettingsSso-BGGQ0Cpg.js → SettingsSso-DZTsjRCO.js} +1 -1
  66. package/dist/assets/{SettingsUsageAndPlan-BzO_zdkH.js → SettingsUsageAndPlan-BqY4ptNL.js} +1 -1
  67. package/dist/assets/{SettingsUsersView-DHQUqhqB.js → SettingsUsersView-eqXFp615.js} +1 -1
  68. package/dist/assets/{SettingsView-CbtAqjOX.js → SettingsView-CHSTMDKz.js} +1 -1
  69. package/dist/assets/{SetupView-BME1OE6U.js → SetupView-D6-b4i8i.js} +3 -3
  70. package/dist/assets/{SetupWorkflowCredentialsButton-DZr4TCPC.js → SetupWorkflowCredentialsButton-6SWeqGx-.js} +1 -1
  71. package/dist/assets/{SetupWorkflowFromTemplateView-CPkKEY04.js → SetupWorkflowFromTemplateView-DTZ8dEhY.js} +3 -3
  72. package/dist/assets/{SigninView-DUeRvOiY.js → SigninView-B3mpecGJ.js} +3 -3
  73. package/dist/assets/{SignoutView-BC7SBunZ.js → SignoutView-Bq9cEhcZ.js} +1 -1
  74. package/dist/assets/{SignupView-B5ecYJ2q.js → SignupView-BTyAq-gW.js} +3 -3
  75. package/dist/assets/{TemplateDetails-DjanZgC1.js → TemplateDetails-Bf7Xg-KJ.js} +1 -1
  76. package/dist/assets/{TemplateList-8TyNGxY-.js → TemplateList-BmXxTP4v.js} +1 -1
  77. package/dist/assets/{TemplatesCollectionView-BkH4pJCv.js → TemplatesCollectionView-DKwycT_4.js} +5 -5
  78. package/dist/assets/{TemplatesSearchView-Bcdhi1SL.js → TemplatesSearchView-ciluP1sL.js} +3 -3
  79. package/dist/assets/{TemplatesView-De2XB6We.js → TemplatesView-CDdQbnxe.js} +1 -1
  80. package/dist/assets/{TemplatesWorkflowView-BVnwtrMa.js → TemplatesWorkflowView-uQ3eG-nR.js} +5 -5
  81. package/dist/assets/{VariablesView-BZCvPfan.js → VariablesView-Bve2WEng.js} +4 -4
  82. package/dist/assets/{WorkerView-CigxqnWi.js → WorkerView-CUyaAqvY.js} +6 -6
  83. package/dist/assets/{WorkflowActivator-B7jRy4L1.js → WorkflowActivator-DZSvs7Ye.js} +11 -9
  84. package/dist/assets/{WorkflowExecutionsInfoAccordion-C_ZycbsF.js → WorkflowExecutionsInfoAccordion-DTbkpnyq.js} +1 -1
  85. package/dist/assets/{WorkflowExecutionsLandingPage-DOqrfKlC.js → WorkflowExecutionsLandingPage-DNc0pN7t.js} +2 -2
  86. package/dist/assets/{WorkflowExecutionsPreview-B4Cj2gXW.js → WorkflowExecutionsPreview-SdFojcu-.js} +5 -6
  87. package/dist/assets/{WorkflowExecutionsView-RXfP7zkJ.js → WorkflowExecutionsView-CAbXPlyv.js} +10 -11
  88. package/dist/assets/{WorkflowHistory-DrXrRwIS.js → WorkflowHistory-BIFuha5h.js} +3 -3
  89. package/dist/assets/{WorkflowOnboardingView-CXH1vCW2.js → WorkflowOnboardingView-DLRgnF3H.js} +1 -1
  90. package/dist/assets/{WorkflowPreview-B_MuFEV8.js → WorkflowPreview-DRSvh1f-.js} +1 -1
  91. package/dist/assets/{WorkflowsView-D90hfJ35.js → WorkflowsView-DOQhvV_X.js} +9 -9
  92. package/dist/assets/{useClearExecutionButtonVisible-Dwc1_eG9.js → canvas-CdHFQJm7.js} +3 -2
  93. package/dist/assets/{chartjs.utils-DalQn9bk.js → chartjs.utils-hlpJdzhb.js} +2 -2
  94. package/dist/assets/{easyAiWorkflowUtils-kgtpBx2h.js → easyAiWorkflowUtils-GnIqpmRr.js} +1 -1
  95. package/dist/assets/{global-link-actions-CnWOMvqA.js → global-link-actions-CExoAUZJ.js} +1 -1
  96. package/dist/assets/{import-curl-BvX_O56D.js → import-curl-D2S8-TVc.js} +1 -1
  97. package/dist/assets/{index-DZ6VpjNj.js → index-BSlk84mz.js} +79639 -67526
  98. package/dist/assets/{index-yNaoC3fo.css → index-DH8MNLw5.css} +195 -488
  99. package/dist/assets/{index-Bb2NNknG.js → index-lOeP0Jxq.js} +1 -1
  100. package/dist/assets/{pickBy-B_HGYyxS.js → pickBy-BoYQMT9v.js} +1 -1
  101. package/dist/assets/{polyfills-CLZ4X0Ad.js → polyfills-J2x06Gdp.js} +157 -224
  102. package/dist/assets/{templateActions-DQfZ3ni5.js → templateActions-CAEk7dfj.js} +1 -1
  103. package/dist/assets/{typescript.worker-BsxN2afA.js → typescript.worker-DIrCbxuR.js} +2 -2
  104. package/dist/assets/{useBeforeUnload-Cu0LPVWe.js → useBeforeUnload-COWlK6zC.js} +1 -1
  105. package/dist/assets/{useExecutionDebugging-rc72wLIp.js → useExecutionDebugging-DOtIA9Qr.js} +1 -1
  106. package/dist/assets/{useExecutionHelpers-DqwMonFW.js → useExecutionHelpers-q1_8c2Pm.js} +2 -3
  107. package/dist/assets/{useImportCurlCommand-D_onuFvo.js → useImportCurlCommand-CbwqixK0.js} +2 -2
  108. package/dist/assets/{useProjectPages-e8b03-5_.js → useProjectPages-DlqnxMvy.js} +1 -1
  109. package/dist/assets/{usePushConnection-wm-7Id6Q.js → usePushConnection-Bysa9RG-.js} +35 -111
  110. package/dist/assets/{useWorkflowActivate-65xML23U.js → useWorkflowActivate-B1ps647W.js} +1 -1
  111. package/dist/assets/{useWorkflowSaving-CUel20JA.js → useWorkflowSaving-BVNVyvlZ.js} +1 -1
  112. package/dist/index.html +3 -3
  113. package/package.json +1 -1
  114. package/tsconfig.json +1 -0
  115. package/vite.config.mts +4 -0
  116. package/dist/assets/CollectionParameter-Cj4t6-hd.js +0 -4
  117. package/dist/assets/InsightsSummary-MECenLJQ.js +0 -207
  118. package/dist/assets/NodeView-Bk9h8GYy.js +0 -1719
  119. package/dist/assets/NodeView-C3A-bM1O.css +0 -304
  120. package/dist/assets/TestDefinitionEditView-Cwkrz308.css +0 -1189
  121. package/dist/assets/TestDefinitionEditView-DjmPnrTk.js +0 -1464
  122. package/dist/assets/TestDefinitionListView-BL2s_qBZ.js +0 -631
  123. package/dist/assets/TestDefinitionNewView-B9BqJZST.js +0 -75
  124. package/dist/assets/TestDefinitionRootView-AlWyxbc0.js +0 -39
  125. package/dist/assets/TestDefinitionRootView-DFT60fWE.css +0 -126
  126. package/dist/assets/dateFormatter-BPfJSa6q.js +0 -21
  127. package/dist/assets/useCanvasOperations-u8oSDa_u.js +0 -2834
  128. package/dist/assets/useTestDefinitionForm-DlUOnNC0.js +0 -154
@@ -0,0 +1,570 @@
1
+ import { f_ as useCssVar, fY as dateFormat, d as defineComponent, q as computed, a$ as watchEffect, h as resolveComponent, i as createElementBlock, g as openBlock, n as normalizeClass, k as createBaseVNode, j as createVNode, w as withCtx, F as Fragment, D as renderList, e as createBlock, m as unref, _ as _export_sfc, l as createTextVNode, t as toDisplayString, c as useI18n, f$ as TestTableBase, bf as N8nText, bJ as N8nIcon, g0 as statusDictionary, g1 as getErrorBaseKey, aV as createSlots, ct as mergeModels, b as useRouter, cu as useModel, fB as convertToDisplayDate, V as VIEWS, a as useToast, g2 as useEvaluationStore, r as ref, en as orderBy, bh as N8nButton, f as createCommentVNode } from "./index-BSlk84mz.js";
2
+ import { L as Line } from "./index-lOeP0Jxq.js";
3
+ import { _ as __unplugin_components_0 } from "./AnimatedSpinner-DlBYfeum.js";
4
+ function useMetricsChart() {
5
+ const colors = {
6
+ primary: useCssVar("--color-primary", document.body).value,
7
+ textBase: useCssVar("--color-text-base", document.body).value,
8
+ backgroundXLight: useCssVar("--color-background-xlight", document.body).value,
9
+ foregroundLight: useCssVar("--color-foreground-light", document.body).value,
10
+ foregroundBase: useCssVar("--color-foreground-base", document.body).value,
11
+ foregroundDark: useCssVar("--color-foreground-dark", document.body).value
12
+ };
13
+ function generateChartData(runs2, metric) {
14
+ const data = {
15
+ datasets: [
16
+ {
17
+ data: runs2,
18
+ parsing: {
19
+ xAxisKey: "id",
20
+ yAxisKey: `metrics.${metric}`
21
+ },
22
+ borderColor: colors.primary,
23
+ backgroundColor: colors.backgroundXLight,
24
+ borderWidth: 1,
25
+ pointRadius: 2,
26
+ pointHoverRadius: 4,
27
+ pointBackgroundColor: colors.backgroundXLight,
28
+ pointHoverBackgroundColor: colors.backgroundXLight
29
+ }
30
+ ]
31
+ };
32
+ return data;
33
+ }
34
+ function generateChartOptions({
35
+ metric,
36
+ data
37
+ }) {
38
+ return {
39
+ responsive: true,
40
+ maintainAspectRatio: false,
41
+ animation: false,
42
+ devicePixelRatio: 2,
43
+ interaction: {
44
+ mode: "index",
45
+ intersect: false
46
+ },
47
+ scales: {
48
+ y: {
49
+ border: {
50
+ display: false
51
+ },
52
+ grid: {
53
+ color: colors.foregroundBase
54
+ },
55
+ ticks: {
56
+ padding: 8,
57
+ color: colors.textBase
58
+ }
59
+ },
60
+ x: {
61
+ border: {
62
+ display: false
63
+ },
64
+ grid: {
65
+ display: false
66
+ },
67
+ ticks: {
68
+ color: colors.textBase,
69
+ // eslint-disable-next-line id-denylist
70
+ callback(_tickValue, index) {
71
+ return `#${data[index].index}`;
72
+ }
73
+ }
74
+ }
75
+ },
76
+ plugins: {
77
+ tooltip: {
78
+ backgroundColor: colors.backgroundXLight,
79
+ titleColor: colors.textBase,
80
+ titleFont: {
81
+ weight: "600"
82
+ },
83
+ bodyColor: colors.textBase,
84
+ bodySpacing: 4,
85
+ padding: 12,
86
+ borderColor: colors.foregroundBase,
87
+ borderWidth: 1,
88
+ displayColors: true,
89
+ callbacks: {
90
+ title: (tooltipItems) => {
91
+ return dateFormat(tooltipItems[0].raw.runAt, "yyyy-mm-dd HH:MM");
92
+ },
93
+ label: (context) => `${metric}: ${context.parsed.y.toFixed(2)}`,
94
+ labelColor() {
95
+ return {
96
+ borderColor: "rgba(29, 21, 21, 0)",
97
+ backgroundColor: colors.primary,
98
+ borderWidth: 0,
99
+ borderRadius: 5
100
+ };
101
+ }
102
+ }
103
+ },
104
+ legend: {
105
+ display: false
106
+ }
107
+ }
108
+ };
109
+ }
110
+ return {
111
+ generateChartData,
112
+ generateChartOptions
113
+ };
114
+ }
115
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
116
+ __name: "MetricsChart",
117
+ props: {
118
+ selectedMetric: {},
119
+ runs: {}
120
+ },
121
+ emits: ["update:selectedMetric"],
122
+ setup(__props, { emit: __emit }) {
123
+ const emit = __emit;
124
+ const props = __props;
125
+ const metricsChart = useMetricsChart();
126
+ const availableMetrics = computed(() => {
127
+ return props.runs.reduce((acc, run) => {
128
+ const metricKeys = Object.keys(run.metrics ?? {});
129
+ return [.../* @__PURE__ */ new Set([...acc, ...metricKeys])];
130
+ }, []);
131
+ });
132
+ const filteredRuns = computed(
133
+ () => props.runs.filter((run) => run.metrics?.[props.selectedMetric] !== void 0)
134
+ );
135
+ const chartData = computed(
136
+ () => metricsChart.generateChartData(filteredRuns.value, props.selectedMetric)
137
+ );
138
+ const chartOptions = computed(
139
+ () => metricsChart.generateChartOptions({
140
+ metric: props.selectedMetric,
141
+ data: filteredRuns.value
142
+ })
143
+ );
144
+ watchEffect(() => {
145
+ if (props.runs.length > 0 && !props.selectedMetric) {
146
+ emit("update:selectedMetric", availableMetrics.value[0]);
147
+ }
148
+ });
149
+ return (_ctx, _cache) => {
150
+ const _component_N8nOption = resolveComponent("N8nOption");
151
+ const _component_N8nSelect = resolveComponent("N8nSelect");
152
+ return openBlock(), createElementBlock("div", {
153
+ class: normalizeClass(_ctx.$style.metricsChartContainer)
154
+ }, [
155
+ createBaseVNode("div", {
156
+ class: normalizeClass(_ctx.$style.chartHeader)
157
+ }, [
158
+ createVNode(_component_N8nSelect, {
159
+ "model-value": _ctx.selectedMetric,
160
+ class: normalizeClass(_ctx.$style.metricSelect),
161
+ placeholder: "Select metric",
162
+ size: "small",
163
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("update:selectedMetric", $event))
164
+ }, {
165
+ default: withCtx(() => [
166
+ (openBlock(true), createElementBlock(Fragment, null, renderList(availableMetrics.value, (metric) => {
167
+ return openBlock(), createBlock(_component_N8nOption, {
168
+ key: metric,
169
+ label: metric,
170
+ value: metric
171
+ }, null, 8, ["label", "value"]);
172
+ }), 128))
173
+ ]),
174
+ _: 1
175
+ }, 8, ["model-value", "class"])
176
+ ], 2),
177
+ createBaseVNode("div", {
178
+ class: normalizeClass(_ctx.$style.chartWrapper)
179
+ }, [
180
+ (openBlock(), createBlock(unref(Line), {
181
+ key: _ctx.selectedMetric,
182
+ data: chartData.value,
183
+ options: chartOptions.value,
184
+ class: normalizeClass(_ctx.$style.metricsChart)
185
+ }, null, 8, ["data", "options", "class"]))
186
+ ], 2)
187
+ ], 2);
188
+ };
189
+ }
190
+ });
191
+ const metricsChartContainer = "_metricsChartContainer_1xhz2_123";
192
+ const chartHeader = "_chartHeader_1xhz2_128";
193
+ const chartTitle = "_chartTitle_1xhz2_131";
194
+ const metricSelect = "_metricSelect_1xhz2_136";
195
+ const chartWrapper = "_chartWrapper_1xhz2_139";
196
+ const style0$3 = {
197
+ metricsChartContainer,
198
+ chartHeader,
199
+ chartTitle,
200
+ metricSelect,
201
+ chartWrapper
202
+ };
203
+ const cssModules$3 = {
204
+ "$style": style0$3
205
+ };
206
+ const MetricsChart = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__cssModules", cssModules$3]]);
207
+ const _hoisted_1 = { style: { "display": "inline-flex", "gap": "12px", "text-transform": "capitalize", "align-items": "center" } };
208
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
209
+ __name: "TestRunsTable",
210
+ props: {
211
+ runs: {},
212
+ columns: {}
213
+ },
214
+ emits: ["rowClick"],
215
+ setup(__props, { emit: __emit }) {
216
+ const emit = __emit;
217
+ const props = __props;
218
+ const locale = useI18n();
219
+ const styledColumns = computed(() => {
220
+ return props.columns.map((column) => {
221
+ if (column.prop === "id") {
222
+ return {
223
+ ...column,
224
+ width: 100
225
+ };
226
+ }
227
+ if (column.prop === "runAt") {
228
+ return {
229
+ ...column,
230
+ width: 150
231
+ };
232
+ }
233
+ return column;
234
+ });
235
+ });
236
+ const runSummaries = computed(() => {
237
+ return props.runs.map(({ status, finalResult, errorDetails, ...run }) => {
238
+ if (status === "completed" && finalResult && ["error", "warning"].includes(finalResult)) {
239
+ status = "warning";
240
+ }
241
+ return {
242
+ ...run,
243
+ status,
244
+ finalResult,
245
+ errorDetails
246
+ };
247
+ });
248
+ });
249
+ return (_ctx, _cache) => {
250
+ const _component_N8nHeading = resolveComponent("N8nHeading");
251
+ const _component_AnimatedSpinner = __unplugin_components_0;
252
+ const _component_i18n_t = resolveComponent("i18n-t");
253
+ const _component_N8nTooltip = resolveComponent("N8nTooltip");
254
+ return openBlock(), createElementBlock("div", {
255
+ class: normalizeClass(_ctx.$style.container)
256
+ }, [
257
+ createVNode(_component_N8nHeading, {
258
+ size: "large",
259
+ bold: true,
260
+ class: normalizeClass(_ctx.$style.runsTableHeading),
261
+ color: "text-base"
262
+ }, {
263
+ default: withCtx(() => [
264
+ createTextVNode(toDisplayString(unref(locale).baseText("evaluation.listRuns.pastRuns.total", { adjustToNumber: _ctx.runs.length })) + " (" + toDisplayString(_ctx.runs.length) + ") ", 1)
265
+ ]),
266
+ _: 1
267
+ }, 8, ["class"]),
268
+ createVNode(TestTableBase, {
269
+ data: runSummaries.value,
270
+ columns: styledColumns.value,
271
+ "default-sort": { prop: "runAt", order: "descending" },
272
+ onRowClick: _cache[0] || (_cache[0] = (row) => row.status !== "error" ? emit("rowClick", row) : void 0)
273
+ }, {
274
+ id: withCtx(({ row }) => [
275
+ createTextVNode("#" + toDisplayString(row.index), 1)
276
+ ]),
277
+ status: withCtx(({ row }) => [
278
+ createBaseVNode("div", _hoisted_1, [
279
+ row.status === "running" ? (openBlock(), createBlock(unref(N8nText), {
280
+ key: 0,
281
+ color: "secondary"
282
+ }, {
283
+ default: withCtx(() => [
284
+ createVNode(_component_AnimatedSpinner)
285
+ ]),
286
+ _: 1
287
+ })) : (openBlock(), createBlock(unref(N8nIcon), {
288
+ key: 1,
289
+ icon: unref(statusDictionary)[row.status].icon,
290
+ color: unref(statusDictionary)[row.status].color
291
+ }, null, 8, ["icon", "color"])),
292
+ row.status === "warning" ? (openBlock(), createBlock(unref(N8nText), {
293
+ key: 2,
294
+ color: "warning",
295
+ class: normalizeClass([_ctx.$style.alertText, _ctx.$style.warningText])
296
+ }, {
297
+ default: withCtx(() => [
298
+ createTextVNode(toDisplayString(unref(locale).baseText(`evaluation.runDetail.error.partialCasesFailed`)), 1)
299
+ ]),
300
+ _: 1
301
+ }, 8, ["class"])) : row.status === "error" ? (openBlock(), createBlock(_component_N8nTooltip, {
302
+ key: 3,
303
+ placement: "top",
304
+ "show-after": 300
305
+ }, {
306
+ content: withCtx(() => [
307
+ createVNode(_component_i18n_t, {
308
+ keypath: `${unref(getErrorBaseKey)(row.errorCode)}`
309
+ }, createSlots({ _: 2 }, [
310
+ unref(locale).exists(`${unref(getErrorBaseKey)(row.errorCode)}.description`) ? {
311
+ name: "description",
312
+ fn: withCtx(() => [
313
+ createTextVNode(toDisplayString(unref(locale).baseText(
314
+ `${unref(getErrorBaseKey)(row.errorCode)}.description`
315
+ ) && ". ") + " " + toDisplayString(unref(locale).baseText(
316
+ `${unref(getErrorBaseKey)(row.errorCode)}.description`
317
+ )), 1)
318
+ ]),
319
+ key: "0"
320
+ } : void 0
321
+ ]), 1032, ["keypath"])
322
+ ]),
323
+ default: withCtx(() => [
324
+ createVNode(unref(N8nText), {
325
+ class: normalizeClass([_ctx.$style.alertText, _ctx.$style.errorText])
326
+ }, {
327
+ default: withCtx(() => [
328
+ createVNode(_component_i18n_t, {
329
+ keypath: `${unref(getErrorBaseKey)(row.errorCode)}`
330
+ }, createSlots({ _: 2 }, [
331
+ unref(locale).exists(`${unref(getErrorBaseKey)(row.errorCode)}.description`) ? {
332
+ name: "description",
333
+ fn: withCtx(() => [
334
+ createBaseVNode("p", {
335
+ class: normalizeClass(_ctx.$style.grayText)
336
+ }, toDisplayString(unref(locale).baseText(
337
+ `${unref(getErrorBaseKey)(row.errorCode)}.description`
338
+ )), 3)
339
+ ]),
340
+ key: "0"
341
+ } : void 0
342
+ ]), 1032, ["keypath"])
343
+ ]),
344
+ _: 2
345
+ }, 1032, ["class"])
346
+ ]),
347
+ _: 2
348
+ }, 1024)) : (openBlock(), createElementBlock(Fragment, { key: 4 }, [
349
+ createTextVNode(toDisplayString(row.status), 1)
350
+ ], 64))
351
+ ])
352
+ ]),
353
+ _: 1
354
+ }, 8, ["data", "columns"])
355
+ ], 2);
356
+ };
357
+ }
358
+ });
359
+ const container = "_container_okb74_123";
360
+ const grayText = "_grayText_okb74_129";
361
+ const alertText = "_alertText_okb74_133";
362
+ const warningText = "_warningText_okb74_151";
363
+ const errorText = "_errorText_okb74_155";
364
+ const style0$2 = {
365
+ container,
366
+ grayText,
367
+ alertText,
368
+ warningText,
369
+ errorText
370
+ };
371
+ const cssModules$2 = {
372
+ "$style": style0$2
373
+ };
374
+ const TestRunsTable = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__cssModules", cssModules$2]]);
375
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
376
+ __name: "RunsSection",
377
+ props: /* @__PURE__ */ mergeModels({
378
+ runs: {},
379
+ workflowId: {}
380
+ }, {
381
+ "selectedMetric": { required: true },
382
+ "selectedMetricModifiers": {}
383
+ }),
384
+ emits: ["update:selectedMetric"],
385
+ setup(__props) {
386
+ const props = __props;
387
+ const locale = useI18n();
388
+ const router = useRouter();
389
+ const selectedMetric = useModel(__props, "selectedMetric");
390
+ const metrics = computed(() => {
391
+ const metricKeys = props.runs.reduce((acc, run) => {
392
+ Object.keys(run.metrics ?? {}).forEach((metric) => acc.add(metric));
393
+ return acc;
394
+ }, /* @__PURE__ */ new Set());
395
+ return [...metricKeys];
396
+ });
397
+ const metricColumns = computed(
398
+ () => metrics.value.map((metric) => ({
399
+ prop: `metrics.${metric}`,
400
+ label: metric,
401
+ sortable: true,
402
+ showHeaderTooltip: true,
403
+ sortMethod: (a, b) => (a.metrics?.[metric] ?? 0) - (b.metrics?.[metric] ?? 0),
404
+ formatter: (row) => row.metrics?.[metric] !== void 0 ? (row.metrics?.[metric]).toFixed(2) : ""
405
+ }))
406
+ );
407
+ const columns = computed(() => [
408
+ {
409
+ prop: "id",
410
+ label: locale.baseText("evaluation.listRuns.runNumber"),
411
+ showOverflowTooltip: true
412
+ },
413
+ {
414
+ prop: "runAt",
415
+ label: "Run at",
416
+ sortable: true,
417
+ showOverflowTooltip: true,
418
+ formatter: (row) => {
419
+ const { date, time } = convertToDisplayDate(row.runAt);
420
+ return [date, time].join(", ");
421
+ },
422
+ sortMethod: (a, b) => new Date(a.runAt ?? a.createdAt).getTime() - new Date(b.runAt ?? b.createdAt).getTime()
423
+ },
424
+ {
425
+ prop: "status",
426
+ label: locale.baseText("evaluation.listRuns.status"),
427
+ sortable: true
428
+ },
429
+ ...metricColumns.value
430
+ ]);
431
+ const handleRowClick = (row) => {
432
+ void router.push({
433
+ name: VIEWS.EVALUATION_RUNS_DETAIL,
434
+ params: { runId: row.id }
435
+ });
436
+ };
437
+ return (_ctx, _cache) => {
438
+ return openBlock(), createElementBlock("div", {
439
+ class: normalizeClass(_ctx.$style.runs)
440
+ }, [
441
+ createVNode(MetricsChart, {
442
+ selectedMetric: selectedMetric.value,
443
+ "onUpdate:selectedMetric": _cache[0] || (_cache[0] = ($event) => selectedMetric.value = $event),
444
+ runs: _ctx.runs
445
+ }, null, 8, ["selectedMetric", "runs"]),
446
+ createVNode(TestRunsTable, {
447
+ class: normalizeClass(_ctx.$style.runsTable),
448
+ runs: _ctx.runs,
449
+ columns: columns.value,
450
+ selectable: true,
451
+ "data-test-id": "past-runs-table",
452
+ onRowClick: handleRowClick
453
+ }, null, 8, ["class", "runs", "columns"])
454
+ ], 2);
455
+ };
456
+ }
457
+ });
458
+ const runs$1 = "_runs_37xaf_123";
459
+ const style0$1 = {
460
+ runs: runs$1
461
+ };
462
+ const cssModules$1 = {
463
+ "$style": style0$1
464
+ };
465
+ const RunsSection = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__cssModules", cssModules$1]]);
466
+ const _sfc_main = /* @__PURE__ */ defineComponent({
467
+ __name: "EvaluationsView",
468
+ props: {
469
+ name: {}
470
+ },
471
+ setup(__props) {
472
+ const props = __props;
473
+ const locale = useI18n();
474
+ const toast = useToast();
475
+ const evaluationStore = useEvaluationStore();
476
+ const selectedMetric = ref("");
477
+ async function runTest() {
478
+ try {
479
+ await evaluationStore.startTestRun(props.name);
480
+ } catch (error) {
481
+ toast.showError(error, locale.baseText("evaluation.listRuns.error.cantStartTestRun"));
482
+ }
483
+ try {
484
+ await evaluationStore.fetchTestRuns(props.name);
485
+ } catch (error) {
486
+ toast.showError(error, locale.baseText("evaluation.listRuns.error.cantFetchTestRuns"));
487
+ }
488
+ }
489
+ const runs2 = computed(() => {
490
+ const testRuns = Object.values(evaluationStore.testRunsById ?? {}).filter(
491
+ ({ workflowId }) => workflowId === props.name
492
+ );
493
+ return orderBy(testRuns, (record) => new Date(record.runAt), ["asc"]).map((record, index) => ({
494
+ ...record,
495
+ index: index + 1
496
+ }));
497
+ });
498
+ const isRunning = computed(() => runs2.value.some((run) => run.status === "running"));
499
+ const isRunTestEnabled = computed(() => !isRunning.value);
500
+ return (_ctx, _cache) => {
501
+ const _component_N8nTooltip = resolveComponent("N8nTooltip");
502
+ return openBlock(), createElementBlock("div", {
503
+ class: normalizeClass(_ctx.$style.evaluationsView)
504
+ }, [
505
+ createBaseVNode("div", {
506
+ class: normalizeClass(_ctx.$style.header)
507
+ }, [
508
+ createVNode(_component_N8nTooltip, {
509
+ disabled: isRunTestEnabled.value,
510
+ placement: "left"
511
+ }, {
512
+ content: withCtx(() => [
513
+ isRunning.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
514
+ createTextVNode(toDisplayString(unref(locale).baseText("evaluation.testIsRunning")), 1)
515
+ ], 64)) : createCommentVNode("", true)
516
+ ]),
517
+ default: withCtx(() => [
518
+ createVNode(unref(N8nButton), {
519
+ disabled: !isRunTestEnabled.value,
520
+ class: normalizeClass(_ctx.$style.runTestButton),
521
+ size: "small",
522
+ "data-test-id": "run-test-button",
523
+ label: unref(locale).baseText("evaluation.runTest"),
524
+ type: "primary",
525
+ onClick: runTest
526
+ }, null, 8, ["disabled", "class", "label"])
527
+ ]),
528
+ _: 1
529
+ }, 8, ["disabled"])
530
+ ], 2),
531
+ createBaseVNode("div", {
532
+ class: normalizeClass(_ctx.$style.wrapper)
533
+ }, [
534
+ createBaseVNode("div", {
535
+ class: normalizeClass(_ctx.$style.content)
536
+ }, [
537
+ createVNode(RunsSection, {
538
+ selectedMetric: selectedMetric.value,
539
+ "onUpdate:selectedMetric": _cache[0] || (_cache[0] = ($event) => selectedMetric.value = $event),
540
+ class: normalizeClass(_ctx.$style.runs),
541
+ runs: runs2.value,
542
+ "workflow-id": props.name
543
+ }, null, 8, ["selectedMetric", "class", "runs", "workflow-id"])
544
+ ], 2)
545
+ ], 2)
546
+ ], 2);
547
+ };
548
+ }
549
+ });
550
+ const evaluationsView = "_evaluationsView_1n2uy_123";
551
+ const content = "_content_1n2uy_127";
552
+ const header = "_header_1n2uy_134";
553
+ const wrapper = "_wrapper_1n2uy_148";
554
+ const runTestButton = "_runTestButton_1n2uy_153";
555
+ const runs = "_runs_1n2uy_157";
556
+ const style0 = {
557
+ evaluationsView,
558
+ content,
559
+ header,
560
+ wrapper,
561
+ runTestButton,
562
+ runs
563
+ };
564
+ const cssModules = {
565
+ "$style": style0
566
+ };
567
+ const EvaluationsView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules]]);
568
+ export {
569
+ EvaluationsView as default
570
+ };
@@ -1,5 +1,5 @@
1
- import { d as defineComponent, au as usePostHog, q as computed, c as useI18n, ax as WORKFLOW_EVALUATION_EXPERIMENT, h as resolveComponent, i as createElementBlock, g as openBlock, j as createVNode, w as withCtx, l as createTextVNode, t as toDisplayString, k as createBaseVNode, n as normalizeClass, e as createBlock, m as unref, _ as _export_sfc, p as useSettingsStore, G as useDebounce, a6 as usePageRedirectionHelper, r as ref, aa as EnterpriseEditionFeature, bR as reactive, gx as getObjectKeys, dr as i18n, ep as isEmpty, az as onBeforeMount, f as createCommentVNode, F as Fragment, D as renderList, ad as _sfc_main$3, b2 as withModifiers, aV as createSlots, ag as useTelemetry, o as onMounted, y as onBeforeUnmount } from "./index-DZ6VpjNj.js";
2
- import { _ as _sfc_main$4 } from "./AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CYzc5StE.js";
1
+ import { d as defineComponent, au as usePostHog, q as computed, c as useI18n, ax as WORKFLOW_EVALUATION_EXPERIMENT, h as resolveComponent, i as createElementBlock, g as openBlock, j as createVNode, w as withCtx, l as createTextVNode, t as toDisplayString, k as createBaseVNode, n as normalizeClass, e as createBlock, m as unref, _ as _export_sfc, p as useSettingsStore, G as useDebounce, a6 as usePageRedirectionHelper, r as ref, aa as EnterpriseEditionFeature, d2 as reactive, fC as getObjectKeys, ez as i18n, fx as isEmpty, az as onBeforeMount, f as createCommentVNode, F as Fragment, D as renderList, ad as _sfc_main$3, b3 as withModifiers, aV as createSlots, ag as useTelemetry, o as onMounted, y as onBeforeUnmount } from "./index-BSlk84mz.js";
2
+ import { _ as _sfc_main$4 } from "./AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-b_VpBPcV.js";
3
3
  const _hoisted_1$1 = { "data-test-id": "concurrent-executions-header" };
4
4
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
5
5
  __name: "ConcurrentExecutionsHeader",
@@ -1,12 +1,11 @@
1
- import { P as ProjectHeader } from "./ProjectHeader-DNm605Kk.js";
2
- import { _ as _sfc_main$4, E as ExecutionsFilter, C as ConcurrentExecutionsHeader } from "./ExecutionsTime.vue_vue_type_script_setup_true_lang--2G21NNR.js";
3
- import { d as defineComponent, h as resolveComponent, e as createBlock, g as openBlock, w as withCtx, x as renderSlot, f as createCommentVNode, j as createVNode, n as normalizeClass, l as createTextVNode, t as toDisplayString, m as unref, c as useI18n, _ as _export_sfc, Y as useCssModule, r as ref, q as computed, gt as WAIT_INDEFINITELY, i as createElementBlock, k as createBaseVNode, dn as N8nCheckbox, aR as N8nTooltip, V as VIEWS, bE as N8nIcon, be as N8nText, F as Fragment, bg as N8nButton, b2 as withModifiers, aT as _sfc_main$5, Q as useWorkflowsStore, at as useExecutionsStore, p as useSettingsStore, a6 as usePageRedirectionHelper, a as useToast, aa as EnterpriseEditionFeature, X as watch, aY as useTemplateRef, ht as useIntersectionObserver, D as renderList, hu as ElSkeletonItem, hv as N8nTableBase, a7 as getResourcePermissions, ck as executionRetryMessage, ag as useTelemetry, ai as useMessage, aj as MODAL_CONFIRM, R as useRoute, hb as useInsightsStore, a4 as useDocumentTitle, cT as storeToRefs, az as onBeforeMount, aP as useExternalHooks, o as onMounted, y as onBeforeUnmount } from "./index-DZ6VpjNj.js";
4
- import { _ as __unplugin_components_0$1 } from "./AnimatedSpinner-hbTZDd93.js";
5
- import { u as useExecutionHelpers } from "./useExecutionHelpers-DqwMonFW.js";
6
- import { c as convertToDisplayDate } from "./dateFormatter-BPfJSa6q.js";
7
- import { u as useProjectPages } from "./useProjectPages-e8b03-5_.js";
8
- import { I as InsightsSummary } from "./InsightsSummary-MECenLJQ.js";
9
- import "./AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CYzc5StE.js";
1
+ import { P as ProjectHeader } from "./ProjectHeader-DQk1kmw3.js";
2
+ import { _ as _sfc_main$4, E as ExecutionsFilter, C as ConcurrentExecutionsHeader } from "./ExecutionsTime.vue_vue_type_script_setup_true_lang-BioZloew.js";
3
+ import { d as defineComponent, h as resolveComponent, e as createBlock, g as openBlock, w as withCtx, x as renderSlot, f as createCommentVNode, j as createVNode, n as normalizeClass, l as createTextVNode, t as toDisplayString, m as unref, c as useI18n, _ as _export_sfc, Y as useCssModule, r as ref, q as computed, cX as WAIT_INDEFINITELY, fB as convertToDisplayDate, i as createElementBlock, k as createBaseVNode, ew as N8nCheckbox, aR as N8nTooltip, V as VIEWS, bJ as N8nIcon, bf as N8nText, F as Fragment, bh as N8nButton, b3 as withModifiers, aT as _sfc_main$5, Q as useWorkflowsStore, at as useExecutionsStore, p as useSettingsStore, a6 as usePageRedirectionHelper, a as useToast, aa as EnterpriseEditionFeature, X as watch, aZ as useTemplateRef, gt as useIntersectionObserver, D as renderList, gu as ElSkeletonItem, gv as N8nTableBase, ai as useMessage, aj as MODAL_CONFIRM, a7 as getResourcePermissions, dw as executionRetryMessage, ag as useTelemetry, R as useRoute, ga as useInsightsStore, a4 as useDocumentTitle, e0 as storeToRefs, az as onBeforeMount, aP as useExternalHooks, o as onMounted, y as onBeforeUnmount } from "./index-BSlk84mz.js";
4
+ import { _ as __unplugin_components_0$1 } from "./AnimatedSpinner-DlBYfeum.js";
5
+ import { u as useExecutionHelpers } from "./useExecutionHelpers-q1_8c2Pm.js";
6
+ import { u as useProjectPages } from "./useProjectPages-DlqnxMvy.js";
7
+ import { I as InsightsSummary } from "./InsightsSummary-CwTpu3sa.js";
8
+ import "./AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-b_VpBPcV.js";
10
9
  const _sfc_main$3 = /* @__PURE__ */ defineComponent({
11
10
  __name: "GlobalExecutionsListItemQueuedTooltip",
12
11
  props: {
@@ -97,9 +96,10 @@ const cssModules$2 = {
97
96
  };
98
97
  const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__cssModules", cssModules$2]]);
99
98
  const _hoisted_1$1 = { "data-test-id": "execution-status" };
100
- const _hoisted_2$1 = { key: 0 };
101
- const _hoisted_3$1 = { key: 1 };
102
- const _hoisted_4$1 = { key: 2 };
99
+ const _hoisted_2$1 = { "data-test-id": "execution-time" };
100
+ const _hoisted_3$1 = { key: 0 };
101
+ const _hoisted_4$1 = { key: 1 };
102
+ const _hoisted_5$1 = { key: 2 };
103
103
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
104
104
  __name: "GlobalExecutionsListItem",
105
105
  props: {
@@ -184,7 +184,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
184
184
  });
185
185
  const formattedStoppedAtDate = computed(() => {
186
186
  return props.execution.stoppedAt ? locale.displayTimer(
187
- new Date(props.execution.stoppedAt).getTime() - new Date(props.execution.startedAt).getTime(),
187
+ new Date(props.execution.stoppedAt).getTime() - new Date(props.execution.startedAt ?? props.execution.createdAt).getTime(),
188
188
  true
189
189
  ) : "";
190
190
  });
@@ -307,20 +307,20 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
307
307
  }, 8, ["disabled", "content"]))
308
308
  ]),
309
309
  createBaseVNode("td", null, toDisplayString(formattedStartedAtDate.value), 1),
310
- createBaseVNode("td", null, [
310
+ createBaseVNode("td", _hoisted_2$1, [
311
311
  formattedStoppedAtDate.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
312
312
  createTextVNode(toDisplayString(formattedStoppedAtDate.value), 1)
313
313
  ], 64)) : (openBlock(), createBlock(_sfc_main$4, {
314
314
  key: 1,
315
- "start-time": _ctx.execution.startedAt
315
+ "start-time": _ctx.execution.startedAt ?? _ctx.execution.createdAt
316
316
  }, null, 8, ["start-time"]))
317
317
  ]),
318
318
  createBaseVNode("td", null, [
319
- _ctx.execution.id ? (openBlock(), createElementBlock("span", _hoisted_2$1, toDisplayString(_ctx.execution.id), 1)) : createCommentVNode("", true),
320
- _ctx.execution.retryOf ? (openBlock(), createElementBlock("span", _hoisted_3$1, [
319
+ _ctx.execution.id ? (openBlock(), createElementBlock("span", _hoisted_3$1, toDisplayString(_ctx.execution.id), 1)) : createCommentVNode("", true),
320
+ _ctx.execution.retryOf ? (openBlock(), createElementBlock("span", _hoisted_4$1, [
321
321
  _cache[1] || (_cache[1] = createBaseVNode("br", null, null, -1)),
322
322
  createBaseVNode("small", null, " (" + toDisplayString(unref(locale).baseText("executionsList.retryOf")) + " " + toDisplayString(_ctx.execution.retryOf) + ") ", 1)
323
- ])) : _ctx.execution.retrySuccessId ? (openBlock(), createElementBlock("span", _hoisted_4$1, [
323
+ ])) : _ctx.execution.retrySuccessId ? (openBlock(), createElementBlock("span", _hoisted_5$1, [
324
324
  _cache[2] || (_cache[2] = createBaseVNode("br", null, null, -1)),
325
325
  createBaseVNode("small", null, " (" + toDisplayString(unref(locale).baseText("executionsList.successRetry")) + " " + toDisplayString(_ctx.execution.retrySuccessId) + ") ", 1)
326
326
  ])) : createCommentVNode("", true)
@@ -1,4 +1,4 @@
1
- import { dN as commonjsGlobal } from "./index-DZ6VpjNj.js";
1
+ import { eV as commonjsGlobal } from "./index-BSlk84mz.js";
2
2
  var FileSaver_min$1 = { exports: {} };
3
3
  var FileSaver_min = FileSaver_min$1.exports;
4
4
  var hasRequiredFileSaver_min;
@@ -1,4 +1,4 @@
1
- import { d as defineComponent, Q as useWorkflowsStore, as as useNDVStore, q as computed, c as useI18n, r as ref, hz as isINodePropertyCollectionList, X as watch, az as onBeforeMount, cn as deepCopy, i as createElementBlock, g as openBlock, f as createCommentVNode, j as createVNode, w as withCtx, l as createTextVNode, t as toDisplayString, m as unref, be as N8nText, F as Fragment, D as renderList, e as createBlock, dm as N8nInputLabel, k as createBaseVNode, n as normalizeClass, aT as _sfc_main$1, c4 as Suspense, hA as _sfc_main$2, hB as Draggable, bg as N8nButton, ee as _sfc_main$3, ef as N8nSelect, b2 as withModifiers, bo as get, du as telemetry, _ as _export_sfc } from "./index-DZ6VpjNj.js";
1
+ import { d as defineComponent, Q as useWorkflowsStore, as as useNDVStore, q as computed, c as useI18n, r as ref, gz as isINodePropertyCollectionList, X as watch, az as onBeforeMount, dz as deepCopy, i as createElementBlock, g as openBlock, f as createCommentVNode, j as createVNode, w as withCtx, l as createTextVNode, t as toDisplayString, m as unref, bf as N8nText, F as Fragment, D as renderList, e as createBlock, ev as N8nInputLabel, k as createBaseVNode, n as normalizeClass, aT as _sfc_main$1, cN as Suspense, gA as _sfc_main$2, gB as Draggable, bh as N8nButton, fn as _sfc_main$3, fo as N8nSelect, b3 as withModifiers, gC as get, eC as telemetry, _ as _export_sfc } from "./index-BSlk84mz.js";
2
2
  const _hoisted_1 = ["data-test-id"];
3
3
  const _hoisted_2 = {
4
4
  key: 0,
@@ -1,6 +1,6 @@
1
- import { A as AuthView } from "./AuthView-8SLMP0H_.js";
2
- import { d as defineComponent, p as useSettingsStore, u as useUsersStore, a as useToast, r as ref, q as computed, c as useI18n, e as createBlock, g as openBlock } from "./index-DZ6VpjNj.js";
3
- import "./Logo-DUDCllkm.js";
1
+ import { A as AuthView } from "./AuthView-3BmNl_WD.js";
2
+ import { d as defineComponent, p as useSettingsStore, u as useUsersStore, a as useToast, r as ref, q as computed, c as useI18n, e as createBlock, g as openBlock } from "./index-BSlk84mz.js";
3
+ import "./Logo-nyJoHWQJ.js";
4
4
  const _sfc_main = /* @__PURE__ */ defineComponent({
5
5
  __name: "ForgotMyPasswordView",
6
6
  setup(__props) {