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
@@ -1,31 +1,6 @@
1
- import { d as defineComponent, co as resolveDirective, i as createElementBlock, g as openBlock, aA as withDirectives, k as createBaseVNode, t as toDisplayString, m as unref, c as useI18n, Q as useWorkflowsStore, H as useUIStore, dx as clearPopupWindowState, ag as useTelemetry, dy as parse, dz as hasTrimmedItem, p as useSettingsStore, a5 as useWorkflowHelpers, ak as WORKFLOW_SETTINGS_MODAL_KEY, a as useToast, dA as generateNodesGraph, aq as h, bz as useNodeTypesStore, dB as getTriggerNodeServiceName, bA as useNodeHelpers, dC as hasTrimmedData, aP as useExternalHooks, dD as codeNodeEditorEventBus, bS as useCredentialsStore, dE as useAssistantStore, dF as useSchemaPreviewStore, dG as isCommunityPackageName, dH as makeRestApiRequest, O as defineStore, Z as useRootStore, P as usePushConnectionStore, r as ref } from "./index-DZ6VpjNj.js";
2
- import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-kgtpBx2h.js";
3
- import { g as globalLinkActionsEventBus } from "./global-link-actions-CnWOMvqA.js";
4
- const _hoisted_1 = { "data-test-id": "sanitized-error-message" };
5
- const _hoisted_2 = ["data-action-parameter-node"];
6
- const _sfc_main = /* @__PURE__ */ defineComponent({
7
- __name: "NodeExecutionErrorMessage",
8
- props: {
9
- nodeName: {},
10
- errorMessage: {}
11
- },
12
- setup(__props) {
13
- const i18n = useI18n();
14
- return (_ctx, _cache) => {
15
- const _directive_n8n_html = resolveDirective("n8n-html");
16
- return openBlock(), createElementBlock("div", null, [
17
- withDirectives(createBaseVNode("span", _hoisted_1, null, 512), [
18
- [_directive_n8n_html, _ctx.errorMessage]
19
- ]),
20
- _cache[0] || (_cache[0] = createBaseVNode("br", null, null, -1)),
21
- createBaseVNode("a", {
22
- "data-action": "openNodeDetail",
23
- "data-action-parameter-node": _ctx.nodeName
24
- }, toDisplayString(unref(i18n).baseText("node.executionError.openNode")), 9, _hoisted_2)
25
- ]);
26
- };
27
- }
28
- });
1
+ import { Q as useWorkflowsStore, H as useUIStore, eF as clearPopupWindowState, ag as useTelemetry, bV as parse, de as EVALUATION_TRIGGER_NODE_TYPE, eG as hasTrimmedItem, p as useSettingsStore, a5 as useWorkflowHelpers, ak as WORKFLOW_SETTINGS_MODAL_KEY, a as useToast, eH as generateNodesGraph, c as useI18n, eI as getExecutionErrorToastConfiguration, bz as useNodeTypesStore, cS as getTriggerNodeServiceName, bA as useNodeHelpers, eJ as hasTrimmedData, aP as useExternalHooks, eK as codeNodeEditorEventBus, eL as getExecutionErrorMessage, d3 as useCredentialsStore, eM as useAssistantStore, eN as useSchemaPreviewStore, eO as isCommunityPackageName, eP as makeRestApiRequest, O as defineStore, Z as useRootStore, P as usePushConnectionStore, r as ref } from "./index-BSlk84mz.js";
2
+ import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-GnIqpmRr.js";
3
+ import { g as globalLinkActionsEventBus } from "./global-link-actions-CExoAUZJ.js";
29
4
  async function executionFinished({ data }, options) {
30
5
  const workflowsStore = useWorkflowsStore();
31
6
  const uiStore = useUIStore();
@@ -73,6 +48,25 @@ async function executionFinished({ data }, options) {
73
48
  return;
74
49
  }
75
50
  }
51
+ if (execution.status === "success" && execution.data?.startData?.destinationNode === void 0) {
52
+ const evalTrigger = execution.workflowData.nodes.find(
53
+ (node) => node.type === EVALUATION_TRIGGER_NODE_TYPE
54
+ );
55
+ const triggerRunData = evalTrigger ? execution?.data?.resultData?.runData[evalTrigger.name] : void 0;
56
+ if (evalTrigger && triggerRunData !== void 0) {
57
+ const mainData = triggerRunData[0]?.data?.main[0];
58
+ const rowsLeft = mainData ? mainData[0]?.json?._rowsLeft : 0;
59
+ if (rowsLeft && rowsLeft > 0) {
60
+ const testId = `execute-workflow-button-${evalTrigger.name}`;
61
+ setTimeout(() => {
62
+ const button = Array.from(document.querySelectorAll("[data-test-id]")).filter(
63
+ (x) => x?.dataset?.testId?.startsWith(testId)
64
+ )[0];
65
+ button?.click();
66
+ }, 2);
67
+ }
68
+ }
69
+ }
76
70
  const runExecutionData = getRunExecutionData(execution);
77
71
  uiStore.setProcessingExecutionResults(false);
78
72
  if (execution.data?.waitTill !== void 0) {
@@ -122,35 +116,6 @@ function getRunExecutionData(execution) {
122
116
  }
123
117
  return runExecutionData;
124
118
  }
125
- function getExecutionError(execution) {
126
- const error = execution.data?.resultData.error;
127
- const i18n = useI18n();
128
- let errorMessage;
129
- if (execution.data?.resultData.lastNodeExecuted && error) {
130
- errorMessage = error.message ?? error.description ?? "";
131
- } else {
132
- errorMessage = i18n.baseText("pushConnection.executionError", {
133
- interpolate: { error: "!" }
134
- });
135
- if (error?.message) {
136
- let nodeName;
137
- if ("node" in error) {
138
- nodeName = typeof error.node === "string" ? error.node : error.node.name;
139
- }
140
- const receivedError = nodeName ? `${nodeName}: ${error.message}` : error.message;
141
- errorMessage = i18n.baseText("pushConnection.executionError", {
142
- interpolate: {
143
- error: `.${i18n.baseText("pushConnection.executionError.details", {
144
- interpolate: {
145
- details: receivedError
146
- }
147
- })}`
148
- }
149
- });
150
- }
151
- }
152
- return errorMessage;
153
- }
154
119
  function getRunDataExecutedErrorMessage(execution) {
155
120
  const i18n = useI18n();
156
121
  if (execution.status === "crashed") {
@@ -161,7 +126,10 @@ function getRunDataExecutedErrorMessage(execution) {
161
126
  interpolate: { activeExecutionId: workflowsStore.activeExecutionId ?? "" }
162
127
  });
163
128
  }
164
- return getExecutionError(execution);
129
+ return getExecutionErrorMessage({
130
+ error: execution.data?.resultData.error,
131
+ lastNodeExecuted: execution.data?.resultData.lastNodeExecuted
132
+ });
165
133
  }
166
134
  function handleExecutionFinishedWithWaitTill(options) {
167
135
  const workflowsStore = useWorkflowsStore();
@@ -189,7 +157,6 @@ function handleExecutionFinishedWithErrorOrCanceled(execution, runExecutionData,
189
157
  const workflowsStore = useWorkflowsStore();
190
158
  const workflowHelpers = useWorkflowHelpers(options);
191
159
  const workflowObject = workflowsStore.getCurrentWorkflow();
192
- const runDataExecutedErrorMessage = getRunDataExecutedErrorMessage(execution);
193
160
  workflowHelpers.setDocumentTitle(workflowObject.name, "ERROR");
194
161
  if (runExecutionData.resultData.error?.name === "ExpressionError" && runExecutionData.resultData.error.functionality === "pairedItem") {
195
162
  const error = runExecutionData.resultData.error;
@@ -222,52 +189,17 @@ function handleExecutionFinishedWithErrorOrCanceled(execution, runExecutionData,
222
189
  });
223
190
  });
224
191
  }
225
- if (runExecutionData.resultData.error?.name === "SubworkflowOperationError") {
226
- const error = runExecutionData.resultData.error;
227
- workflowsStore.subWorkflowExecutionError = error;
192
+ if (execution.status === "canceled") {
228
193
  toast.showMessage({
229
- title: error.message,
230
- message: error.description,
231
- type: "error",
232
- duration: 0
194
+ title: i18n.baseText("nodeView.showMessage.stopExecutionTry.title"),
195
+ type: "success"
233
196
  });
234
- } else if ((runExecutionData.resultData.error?.name === "NodeOperationError" || runExecutionData.resultData.error?.name === "NodeApiError") && runExecutionData.resultData.error.functionality === "configuration-node") {
235
- let title;
236
- const nodeError = runExecutionData.resultData.error;
237
- if (nodeError.node.name) {
238
- title = `Error in sub-node ‘${nodeError.node.name}‘`;
239
- } else {
240
- title = "Problem executing workflow";
241
- }
242
- toast.showMessage({
243
- title,
244
- message: h(_sfc_main, {
245
- errorMessage: nodeError?.description ?? runDataExecutedErrorMessage,
246
- nodeName: nodeError.node.name
247
- }),
248
- type: "error",
249
- duration: 0
197
+ } else if (execution.data?.resultData.error) {
198
+ const { message, title } = getExecutionErrorToastConfiguration({
199
+ error: execution.data.resultData.error,
200
+ lastNodeExecuted: execution.data?.resultData.lastNodeExecuted
250
201
  });
251
- } else {
252
- if (execution.status === "canceled") {
253
- toast.showMessage({
254
- title: i18n.baseText("nodeView.showMessage.stopExecutionTry.title"),
255
- type: "success"
256
- });
257
- } else {
258
- let title;
259
- if (runExecutionData.resultData.lastNodeExecuted) {
260
- title = `Problem in node ‘${runExecutionData.resultData.lastNodeExecuted}‘`;
261
- } else {
262
- title = "Problem executing workflow";
263
- }
264
- toast.showMessage({
265
- title,
266
- message: runDataExecutedErrorMessage,
267
- type: "error",
268
- duration: 0
269
- });
270
- }
202
+ toast.showMessage({ title, message, type: "error", duration: 0 });
271
203
  }
272
204
  }
273
205
  function handleExecutionFinishedSuccessfully(workflowId, options) {
@@ -330,7 +262,6 @@ function setRunExecutionData(execution, runExecutionData) {
330
262
  if (workflowsStore.getWorkflowRunData && !hasTrimmedData(workflowsStore.getWorkflowRunData)) {
331
263
  runExecutionData.resultData.runData = workflowsStore.getWorkflowRunData;
332
264
  }
333
- removeRunningTaskData(runExecutionData.resultData.runData);
334
265
  workflowsStore.executingNode.length = 0;
335
266
  workflowsStore.setWorkflowExecutionData({
336
267
  ...workflowExecution,
@@ -357,13 +288,6 @@ function setRunExecutionData(execution, runExecutionData) {
357
288
  const lineNumber = runExecutionData.resultData?.error?.lineNumber;
358
289
  codeNodeEditorEventBus.emit("highlightLine", lineNumber ?? "last");
359
290
  }
360
- function removeRunningTaskData(runData) {
361
- for (const [nodeName, taskItems] of Object.entries(runData)) {
362
- if (taskItems.some((item) => item.executionStatus === "running")) {
363
- runData[nodeName] = taskItems.filter((item) => item.executionStatus !== "running");
364
- }
365
- }
366
- }
367
291
  async function executionRecovered({ data }, options) {
368
292
  const workflowsStore = useWorkflowsStore();
369
293
  const uiStore = useUIStore();
@@ -421,7 +345,7 @@ async function nodeExecuteAfter({ data: pushData }) {
421
345
  async function nodeExecuteBefore({ data }) {
422
346
  const workflowsStore = useWorkflowsStore();
423
347
  workflowsStore.addExecutingNode(data.nodeName);
424
- workflowsStore.addNodeExecutionData(data);
348
+ workflowsStore.addNodeExecutionStartedData(data);
425
349
  }
426
350
  async function reloadNodeType({ data }) {
427
351
  const nodeTypesStore = useNodeTypesStore();
@@ -1,4 +1,4 @@
1
- import { r as ref, b as useRouter, a5 as useWorkflowHelpers, Q as useWorkflowsStore, H as useUIStore, a as useToast, a3 as useNpsSurveyStore, S as PLACEHOLDER_EMPTY_WORKFLOW_ID, ag as useTelemetry, aP as useExternalHooks, c as useI18n, aJ as useStorage, dO as LOCAL_STORAGE_ACTIVATION_FLAG, dP as WORKFLOW_ACTIVE_MODAL_KEY } from "./index-DZ6VpjNj.js";
1
+ import { r as ref, b as useRouter, a5 as useWorkflowHelpers, Q as useWorkflowsStore, H as useUIStore, a as useToast, a3 as useNpsSurveyStore, S as PLACEHOLDER_EMPTY_WORKFLOW_ID, ag as useTelemetry, aP as useExternalHooks, c as useI18n, aJ as useStorage, eW as LOCAL_STORAGE_ACTIVATION_FLAG, eX as WORKFLOW_ACTIVE_MODAL_KEY } from "./index-BSlk84mz.js";
2
2
  function useWorkflowActivate() {
3
3
  const updatingWorkflowActivation = ref(false);
4
4
  const router = useRouter();
@@ -1,4 +1,4 @@
1
- import { H as useUIStore, a3 as useNpsSurveyStore, Q as useWorkflowsStore, a5 as useWorkflowHelpers, ai as useMessage, c as useI18n, cl as MODAL_CLOSE, S as PLACEHOLDER_EMPTY_WORKFLOW_ID, cm as MODAL_CANCEL, aj as MODAL_CONFIRM, V as VIEWS } from "./index-DZ6VpjNj.js";
1
+ import { H as useUIStore, a3 as useNpsSurveyStore, Q as useWorkflowsStore, a5 as useWorkflowHelpers, ai as useMessage, c as useI18n, dx as MODAL_CLOSE, S as PLACEHOLDER_EMPTY_WORKFLOW_ID, dy as MODAL_CANCEL, aj as MODAL_CONFIRM, V as VIEWS } from "./index-BSlk84mz.js";
2
2
  function useWorkflowSaving({ router }) {
3
3
  const uiStore = useUIStore();
4
4
  const npsSurveyStore = useNpsSurveyStore();
package/dist/index.html CHANGED
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
- <script type="module" crossorigin src="/{{BASE_PATH}}/assets/polyfills-CLZ4X0Ad.js"></script>
4
+ <script type="module" crossorigin src="/{{BASE_PATH}}/assets/polyfills-J2x06Gdp.js"></script>
5
5
 
6
6
  <meta charset="utf-8" />
7
7
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -16,8 +16,8 @@
16
16
  <script>!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled getFeatureFlag onFeatureFlags reloadFeatureFlags".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[])</script>
17
17
 
18
18
  <title>n8n.io - Workflow Automation</title>
19
- <script type="module" crossorigin src="/{{BASE_PATH}}/assets/index-DZ6VpjNj.js"></script>
20
- <link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-yNaoC3fo.css">
19
+ <script type="module" crossorigin src="/{{BASE_PATH}}/assets/index-BSlk84mz.js"></script>
20
+ <link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-DH8MNLw5.css">
21
21
  </head>
22
22
  <body>
23
23
  <noscript>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-editor-ui",
3
- "version": "1.93.0",
3
+ "version": "1.95.0",
4
4
  "description": "Workflow Editor UI for n8n",
5
5
  "main": "index.js",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
package/tsconfig.json CHANGED
@@ -14,6 +14,7 @@
14
14
  "@n8n/composables*": ["../@n8n/composables/src*"],
15
15
  "@n8n/chat*": ["../@n8n/chat/src*"],
16
16
  "@n8n/design-system*": ["../@n8n/design-system/src*"],
17
+ "@n8n/stores*": ["../@n8n/stores/src*"],
17
18
  "@n8n/api-types*": ["../../@n8n/api-types/src*"],
18
19
  "@n8n/utils*": ["../../@n8n/utils/src*"]
19
20
  },
package/vite.config.mts CHANGED
@@ -35,6 +35,10 @@ const alias = [
35
35
  find: /^@n8n\/design-system(.+)$/,
36
36
  replacement: resolve(packagesDir, 'frontend', '@n8n', 'design-system', 'src$1'),
37
37
  },
38
+ {
39
+ find: /^@n8n\/stores(.+)$/,
40
+ replacement: resolve(packagesDir, 'frontend', '@n8n', 'stores', 'src$1'),
41
+ },
38
42
  {
39
43
  find: /^@n8n\/utils(.+)$/,
40
44
  replacement: resolve(packagesDir, '@n8n', 'utils', 'src$1'),
@@ -1,4 +0,0 @@
1
- import { hC as _sfc_main } from "./index-DZ6VpjNj.js";
2
- export {
3
- _sfc_main as default
4
- };
@@ -1,207 +0,0 @@
1
- import { d as defineComponent, R as useRoute, Y as useCssModule, q as computed, c as useI18n, V as VIEWS, h as resolveComponent, i as createElementBlock, g as openBlock, k as createBaseVNode, e as createBlock, n as normalizeClass, m as unref, F as Fragment, D as renderList, j as createVNode, w as withCtx, l as createTextVNode, t as toDisplayString, hi as TIME_RANGE_LABELS, f as createCommentVNode, hj as INSIGHT_IMPACT_TYPES, hk as INSIGHTS_UNIT_IMPACT_MAPPING, ag as useTelemetry, _ as _export_sfc } from "./index-DZ6VpjNj.js";
2
- const smartDecimal = (value, decimals = 2) => {
3
- if (Number.isInteger(value)) {
4
- return value;
5
- }
6
- if (value.toString().split(".")[1].length <= decimals) {
7
- return value;
8
- }
9
- return Number(value.toFixed(decimals));
10
- };
11
- const _hoisted_1 = { "data-test-id": "insights-summary-tabs" };
12
- const _hoisted_2 = ["data-test-id"];
13
- const _hoisted_3 = { key: 2 };
14
- const _sfc_main = /* @__PURE__ */ defineComponent({
15
- __name: "InsightsSummary",
16
- props: {
17
- summary: {},
18
- timeRange: {},
19
- loading: { type: Boolean }
20
- },
21
- setup(__props) {
22
- const props = __props;
23
- const i18n = useI18n();
24
- const route = useRoute();
25
- const $style = useCssModule();
26
- const telemetry = useTelemetry();
27
- const summaryTitles = computed(() => ({
28
- total: i18n.baseText("insights.banner.title.total"),
29
- failed: i18n.baseText("insights.banner.title.failed"),
30
- failureRate: i18n.baseText("insights.banner.title.failureRate"),
31
- timeSaved: i18n.baseText("insights.banner.title.timeSaved"),
32
- averageRunTime: i18n.baseText("insights.banner.title.averageRunTime")
33
- }));
34
- const summaryHasNoData = computed(() => {
35
- const summaryValues = Object.values(props.summary);
36
- return summaryValues.length > 0 && summaryValues.every((summary) => !summary.value);
37
- });
38
- const summaryWithRouteLocations = computed(
39
- () => props.summary.map((s) => ({
40
- ...s,
41
- to: { name: VIEWS.INSIGHTS, params: { insightType: s.id }, query: route.query }
42
- }))
43
- );
44
- const getImpactStyle = (id, value) => {
45
- const impact = INSIGHTS_UNIT_IMPACT_MAPPING[id];
46
- if (value === 0 || impact === INSIGHT_IMPACT_TYPES.NEUTRAL) {
47
- return $style.neutral;
48
- }
49
- if (impact === INSIGHT_IMPACT_TYPES.POSITIVE) {
50
- return value > 0 ? $style.positive : $style.negative;
51
- }
52
- if (impact === INSIGHT_IMPACT_TYPES.NEGATIVE) {
53
- return value < 0 ? $style.positive : $style.negative;
54
- }
55
- return $style.neutral;
56
- };
57
- const trackTabClick = (insightType) => {
58
- telemetry.track(`User clicked ${summaryTitles.value[insightType]}`, {
59
- referrer: route.name === VIEWS.INSIGHTS ? "Dashboard" : "Overview"
60
- });
61
- };
62
- return (_ctx, _cache) => {
63
- const _component_N8nLoading = resolveComponent("N8nLoading");
64
- const _component_N8nTooltip = resolveComponent("N8nTooltip");
65
- const _component_i18n_t = resolveComponent("i18n-t");
66
- const _component_N8nIcon = resolveComponent("N8nIcon");
67
- const _component_router_link = resolveComponent("router-link");
68
- return openBlock(), createElementBlock("div", {
69
- class: normalizeClass(unref($style).insights)
70
- }, [
71
- createBaseVNode("ul", _hoisted_1, [
72
- _ctx.loading ? (openBlock(), createBlock(_component_N8nLoading, {
73
- key: 0,
74
- class: normalizeClass(unref($style).loading),
75
- cols: 5
76
- }, null, 8, ["class"])) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(summaryWithRouteLocations.value, ({ id, value, deviation, deviationUnit, unit, to }) => {
77
- return openBlock(), createElementBlock("li", {
78
- key: id,
79
- "data-test-id": `insights-summary-tab-${id}`
80
- }, [
81
- createVNode(_component_router_link, {
82
- to,
83
- "exact-active-class": unref($style).activeTab,
84
- onClick: ($event) => trackTabClick(id)
85
- }, {
86
- default: withCtx(() => [
87
- createBaseVNode("strong", null, [
88
- createVNode(_component_N8nTooltip, {
89
- placement: "bottom",
90
- disabled: id !== "timeSaved"
91
- }, {
92
- content: withCtx(() => [
93
- createTextVNode(toDisplayString(unref(i18n).baseText("insights.banner.title.timeSaved.tooltip")), 1)
94
- ]),
95
- default: withCtx(() => [
96
- createTextVNode(" " + toDisplayString(summaryTitles.value[id]), 1)
97
- ]),
98
- _: 2
99
- }, 1032, ["disabled"])
100
- ]),
101
- createBaseVNode("small", {
102
- class: normalizeClass(unref($style).days)
103
- }, toDisplayString(unref(TIME_RANGE_LABELS)[_ctx.timeRange]), 3),
104
- summaryHasNoData.value ? (openBlock(), createElementBlock("span", {
105
- key: 0,
106
- class: normalizeClass(unref($style).noData)
107
- }, [
108
- createVNode(_component_N8nTooltip, { placement: "bottom" }, {
109
- content: withCtx(() => [
110
- createTextVNode(toDisplayString(unref(i18n).baseText("insights.banner.noData.tooltip")), 1)
111
- ]),
112
- default: withCtx(() => [
113
- createBaseVNode("em", null, toDisplayString(unref(i18n).baseText("insights.banner.noData")), 1)
114
- ]),
115
- _: 1
116
- })
117
- ], 2)) : value === 0 && id === "timeSaved" ? (openBlock(), createElementBlock("span", {
118
- key: 1,
119
- class: normalizeClass(unref($style).empty)
120
- }, [
121
- _cache[0] || (_cache[0] = createBaseVNode("em", null, "--", -1)),
122
- createBaseVNode("small", null, [
123
- createVNode(_component_N8nTooltip, { placement: "bottom" }, {
124
- content: withCtx(() => [
125
- createVNode(_component_i18n_t, { keypath: "insights.banner.timeSaved.tooltip" }, {
126
- link: withCtx(() => [
127
- createTextVNode(toDisplayString(unref(i18n).baseText("insights.banner.timeSaved.tooltip.link.text")), 1)
128
- ]),
129
- _: 1
130
- })
131
- ]),
132
- default: withCtx(() => [
133
- createVNode(_component_N8nIcon, {
134
- class: normalizeClass(unref($style).icon),
135
- icon: "info-circle"
136
- }, null, 8, ["class"])
137
- ]),
138
- _: 1
139
- })
140
- ])
141
- ], 2)) : (openBlock(), createElementBlock("span", _hoisted_3, [
142
- createBaseVNode("em", null, [
143
- createTextVNode(toDisplayString(unref(smartDecimal)(value).toLocaleString("en-US")) + " ", 1),
144
- createBaseVNode("i", null, toDisplayString(unit), 1)
145
- ]),
146
- deviation !== null ? (openBlock(), createElementBlock("small", {
147
- key: 0,
148
- class: normalizeClass(getImpactStyle(id, deviation))
149
- }, [
150
- createVNode(_component_N8nIcon, {
151
- class: normalizeClass([unref($style).icon, getImpactStyle(id, deviation)]),
152
- icon: deviation === 0 ? "caret-right" : deviation > 0 ? "caret-up" : "caret-down"
153
- }, null, 8, ["class", "icon"]),
154
- createVNode(_component_N8nTooltip, {
155
- placement: "bottom",
156
- disabled: id !== "failureRate"
157
- }, {
158
- content: withCtx(() => [
159
- createTextVNode(toDisplayString(unref(i18n).baseText("insights.banner.failureRate.deviation.tooltip")), 1)
160
- ]),
161
- default: withCtx(() => [
162
- createTextVNode(" " + toDisplayString(unref(smartDecimal)(Math.abs(deviation)).toLocaleString("en-US")) + toDisplayString(deviationUnit), 1)
163
- ]),
164
- _: 2
165
- }, 1032, ["disabled"])
166
- ], 2)) : createCommentVNode("", true)
167
- ]))
168
- ]),
169
- _: 2
170
- }, 1032, ["to", "exact-active-class", "onClick"])
171
- ], 8, _hoisted_2);
172
- }), 128))
173
- ])
174
- ], 2);
175
- };
176
- }
177
- });
178
- const insights = "_insights_syjwy_123";
179
- const activeTab = "_activeTab_syjwy_161";
180
- const days = "_days_syjwy_174";
181
- const empty = "_empty_syjwy_185";
182
- const icon = "_icon_syjwy_193";
183
- const noData = "_noData_syjwy_225";
184
- const positive = "_positive_syjwy_230";
185
- const negative = "_negative_syjwy_234";
186
- const neutral = "_neutral_syjwy_238";
187
- const loading = "_loading_syjwy_253";
188
- const style0 = {
189
- insights,
190
- activeTab,
191
- days,
192
- empty,
193
- icon,
194
- noData,
195
- positive,
196
- negative,
197
- neutral,
198
- loading
199
- };
200
- const cssModules = {
201
- "$style": style0
202
- };
203
- const InsightsSummary = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules]]);
204
- export {
205
- InsightsSummary as I,
206
- smartDecimal as s
207
- };