n8n-editor-ui 1.75.1 → 1.77.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 (96) hide show
  1. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BhRv3Xk0.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-DI9LKNPl.js} +1 -1
  2. package/dist/assets/{AuthView-vL9vjCvD.js → AuthView-DM7o3O4n.js} +2 -2
  3. package/dist/assets/{CanvasChat-B69VJDcA.js → CanvasChat-D_6gR76j.js} +19 -18
  4. package/dist/assets/{CanvasControls-DhhKk7yf.js → CanvasControls-Nhfb4Lvl.js} +1 -1
  5. package/dist/assets/{ChangePasswordView-D8y2rYLl.js → ChangePasswordView-BaAm4ZVG.js} +3 -3
  6. package/dist/assets/CollectionParameter-B6Y-W51v.js +4 -0
  7. package/dist/assets/{ConcurrentExecutionsHeader-Dv0s5rxY.js → ConcurrentExecutionsHeader-DIjBdza6.js} +2 -2
  8. package/dist/assets/{CredentialsView-Dp0fVbpZ.js → CredentialsView-Xu6hENWr.js} +4 -4
  9. package/dist/assets/{ErrorView-a6qq4rkt.js → ErrorView-DUTGEeMV.js} +1 -1
  10. package/dist/assets/{ExecutionsView-CpILe_1o.js → ExecutionsView-BUxJO71n.js} +17 -5
  11. package/dist/assets/{FileSaver.min-C1QTiJmy.js → FileSaver.min-BEdek61R.js} +1 -1
  12. package/dist/assets/{FixedCollectionParameter-DvdC-9QQ.css → FixedCollectionParameter-BReT5syB.css} +18 -18
  13. package/dist/assets/{FixedCollectionParameter-kphzKyyy.js → FixedCollectionParameter-C347CzJX.js} +27 -3
  14. package/dist/assets/{ForgotMyPasswordView-DzUekqel.js → ForgotMyPasswordView-COBAL4BR.js} +3 -3
  15. package/dist/assets/{Logo-B-pFOUGc.js → Logo-D0YIkpeq.js} +1 -1
  16. package/dist/assets/{MainHeader-C6S60KwG.js → MainHeader-C9fFpTj2.js} +15 -105
  17. package/dist/assets/{MainHeader-BIKp2Ncp.css → MainHeader-DC-g9NGP.css} +12 -11
  18. package/dist/assets/{MainSidebar-CJ-OKhK-.js → MainSidebar-DqTz49bY.js} +38 -81
  19. package/dist/assets/{NodeCreation-CNcty5fl.js → NodeCreation-BfPITu8g.js} +4 -4
  20. package/dist/assets/{NodeCreator-DAW2sX8p.js → NodeCreator-CK6kn0Jv.js} +4 -5
  21. package/dist/assets/{NodeViewSwitcher-mtWBt9cw.js → NodeViewSwitcher-Ccwulgc_.js} +164 -83
  22. package/dist/assets/{NodeViewSwitcher-CB1zkjni.css → NodeViewSwitcher-DApULbEt.css} +36 -39
  23. package/dist/assets/{ProjectCardBadge-DcWhzEr6.js → ProjectCardBadge-Dzk3JBiy.js} +2 -15
  24. package/dist/assets/{ProjectHeader-D2FCquSr.js → ProjectHeader-DScDlb97.js} +1 -1
  25. package/dist/assets/{ProjectSettings-CDg4IQw7.js → ProjectSettings-BKBT1ZQ3.js} +2 -2
  26. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-BPBen7Li.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-vHkaCcgH.js} +1 -1
  27. package/dist/assets/{ResourcesListLayout-DWASP6Vp.js → ResourcesListLayout-Bm25PbPe.js} +21 -11
  28. package/dist/assets/{ResourcesListLayout-CJC-YvjD.css → ResourcesListLayout-d7mMNhOL.css} +6 -6
  29. package/dist/assets/{RunDataJson-CFNeORgR.js → RunDataJson-DdPA-vUg.js} +14 -15
  30. package/dist/assets/{RunDataJson-BXTLuo7i.css → RunDataJson-Txw0lqay.css} +1 -0
  31. package/dist/assets/{RunDataJsonActions-COFXneND.js → RunDataJsonActions-DQOpbX-O.js} +2 -2
  32. package/dist/assets/{RunDataSearch-D9UDSGjR.js → RunDataSearch-CouFZTIv.js} +1 -1
  33. package/dist/assets/{RunDataTable-C3flt0dy.js → RunDataTable-BTSlSsV8.js} +18 -20
  34. package/dist/assets/{SamlOnboarding-CWM-8qu7.js → SamlOnboarding-ByjacAW7.js} +3 -3
  35. package/dist/assets/{SettingsApiView-Bl6jvpWQ.js → SettingsApiView-Bcy_zE6E.js} +1 -1
  36. package/dist/assets/{SettingsCommunityNodesView-5Dl4EOzd.js → SettingsCommunityNodesView-Cjl8HKbz.js} +4 -4
  37. package/dist/assets/{SettingsExternalSecrets-DljwCjwW.js → SettingsExternalSecrets-BdjUgns5.js} +1 -1
  38. package/dist/assets/{SettingsLdapView-5kgLPxB7.js → SettingsLdapView-JZznK2gT.js} +1 -1
  39. package/dist/assets/{SettingsLogStreamingView-CsB-E4Kv.js → SettingsLogStreamingView-Dr-YFp2W.js} +1 -1
  40. package/dist/assets/{SettingsPersonalView-B0vJNuPt.js → SettingsPersonalView-inpY_nzK.js} +1 -1
  41. package/dist/assets/{SettingsSourceControl-B7SGpzBu.js → SettingsSourceControl-Cg7lS-SE.js} +1 -1
  42. package/dist/assets/{SettingsSso-pDsu2lsS.js → SettingsSso-NG13hUzi.js} +1 -1
  43. package/dist/assets/{SettingsUsageAndPlan-B83lunzH.js → SettingsUsageAndPlan-BgSLN2VF.js} +1 -1
  44. package/dist/assets/{SettingsUsersView-DPM5R_9p.js → SettingsUsersView-DUmnh2jo.js} +1 -1
  45. package/dist/assets/{SettingsView-NF_8zzqr.js → SettingsView-DdHGr_vR.js} +1 -1
  46. package/dist/assets/{SetupView-Dzehb2sC.js → SetupView-ByLBPzaO.js} +3 -3
  47. package/dist/assets/{SetupWorkflowCredentialsButton-Bhx7c9Lu.js → SetupWorkflowCredentialsButton-Dv3O2B1n.js} +3 -2
  48. package/dist/assets/{SetupWorkflowFromTemplateView-DaP6_l4S.js → SetupWorkflowFromTemplateView-DFn8kOzj.js} +3 -3
  49. package/dist/assets/{SigninView-BLyXzN0c.js → SigninView-DIJ4QhSe.js} +3 -3
  50. package/dist/assets/{SignoutView-BsaJctbQ.js → SignoutView-CzgpQ3SX.js} +1 -1
  51. package/dist/assets/{SignupView-m53hHk3y.js → SignupView-Ki2_QcUU.js} +3 -3
  52. package/dist/assets/{TemplateDetails-CWR4kXyf.js → TemplateDetails-BSeVX-wU.js} +1 -1
  53. package/dist/assets/{TemplateList-DLQxEmgt.js → TemplateList-CM9EZ6da.js} +1 -1
  54. package/dist/assets/{TemplatesCollectionView-CobxDh9v.js → TemplatesCollectionView-DQMG3Nx0.js} +5 -5
  55. package/dist/assets/{TemplatesSearchView-CDW7EH1p.js → TemplatesSearchView-BG5Bfpq9.js} +3 -3
  56. package/dist/assets/{TemplatesView-DJCodjB-.js → TemplatesView-D3vhmKK2.js} +1 -1
  57. package/dist/assets/{TemplatesWorkflowView-DOlLEzEa.js → TemplatesWorkflowView-BVZExmo-.js} +5 -5
  58. package/dist/assets/{TestDefinitionEditView-Cuphh86f.js → TestDefinitionEditView-DeYXSHuX.js} +837 -549
  59. package/dist/assets/{TestDefinitionEditView-FI1GVbhl.css → TestDefinitionEditView-d7yfvp9P.css} +601 -238
  60. package/dist/assets/{TestDefinitionListView-Dgq9dXJL.js → TestDefinitionListView-Dm0Wfpbk.js} +93 -68
  61. package/dist/assets/{TestDefinitionRootView-DU-JMBSH.js → TestDefinitionRootView-v_AUC4gJ.js} +1 -1
  62. package/dist/assets/VariablesView-BBjPCn4K.js +509 -0
  63. package/dist/assets/{VariablesView-D4pRzSuY.css → VariablesView-CIfrpJdg.css} +21 -54
  64. package/dist/assets/{WorkerView-CbqToUTB.js → WorkerView-wAx-DxZp.js} +5 -5
  65. package/dist/assets/{WorkflowActivator-BaM6Tydw.js → WorkflowActivator-KzTynbZM.js} +2 -2
  66. package/dist/assets/{WorkflowExecutionsInfoAccordion-6kKOPXK7.js → WorkflowExecutionsInfoAccordion-BWYv1FIv.js} +1 -1
  67. package/dist/assets/{WorkflowExecutionsLandingPage-Cqq5FeZE.js → WorkflowExecutionsLandingPage-LwIHX7rs.js} +2 -2
  68. package/dist/assets/{WorkflowExecutionsPreview-D1cSllVi.js → WorkflowExecutionsPreview-D68OCpWf.js} +8 -7
  69. package/dist/assets/{WorkflowExecutionsView-BUHtKz5M.css → WorkflowExecutionsView-BjdRnQOE.css} +32 -32
  70. package/dist/assets/{WorkflowExecutionsView-qTFEWbeC.js → WorkflowExecutionsView-C47WjaF2.js} +43 -29
  71. package/dist/assets/{WorkflowHistory-De54-QkN.js → WorkflowHistory-VBfitRhR.js} +3 -3
  72. package/dist/assets/{WorkflowOnboardingView-p6cAElRZ.js → WorkflowOnboardingView-X9Yz2kZe.js} +1 -31
  73. package/dist/assets/{WorkflowPreview-CKK96lnJ.js → WorkflowPreview-D0IqMbWq.js} +24 -6
  74. package/dist/assets/{WorkflowsView-D5G530AX.js → WorkflowsView-CXhmco5U.js} +7 -7
  75. package/dist/assets/{easyAiWorkflowUtils-eykvtlKm.js → easyAiWorkflowUtils-B7xBZAZO.js} +1 -1
  76. package/dist/assets/{index-CWcTt6jd.js → index-BW7gX0J2.js} +232838 -231981
  77. package/dist/assets/{index-DXFsvbJ_.css → index-Bs_8II2j.css} +257 -38
  78. package/dist/assets/{polyfills-BN5TIqPj.js → polyfills-DNwgos9f.js} +650 -0
  79. package/dist/assets/{pushConnection.store-CTrZ_kO6.js → pushConnection.store-C6PSl50Z.js} +1 -1
  80. package/dist/assets/{templateActions-B712CNo3.js → templateActions-BHlzMnfj.js} +1 -1
  81. package/dist/assets/useBeforeUnload-BudMrcxz.js +43 -0
  82. package/dist/assets/{useCanvasOperations-BSKKylIT.css → useCanvasOperations-CEWecDkR.css} +12 -12
  83. package/dist/assets/{useCanvasOperations-DTx4vbp_.js → useCanvasOperations-ZjLeZwpS.js} +62 -61
  84. package/dist/assets/{useExecutionDebugging-DjYGtT4w.js → useExecutionDebugging-C_Y6ee_L.js} +1 -1
  85. package/dist/assets/{useExecutionHelpers-DcyS3__o.js → useExecutionHelpers-MX6P-wr8.js} +1 -1
  86. package/dist/assets/{usePinnedData-C5NRkSpx.js → usePinnedData-CHMuwypo.js} +1 -1
  87. package/dist/assets/{usePushConnection-CGv57TM5.js → usePushConnection-3HzYJp1-.js} +3 -3
  88. package/dist/assets/{useRunWorkflow-C_vazd74.js → useRunWorkflow-DUK8ev8x.js} +19 -7
  89. package/dist/assets/{useWorkflowActivate-Dxi5zSSs.js → useWorkflowActivate-BjJ3P-qa.js} +1 -1
  90. package/dist/index.html +3 -3
  91. package/dist/static/n8n-logo.png +0 -0
  92. package/package.json +1 -1
  93. package/dist/assets/CollectionParameter-djLQ8MUO.js +0 -4
  94. package/dist/assets/VariablesView-CaGkZXjl.js +0 -599
  95. package/dist/assets/useBugReporting-BxDqzvRW.js +0 -38
  96. package/dist/assets/useNodeViewVersionSwitcher-CXU1PYlK.js +0 -93
@@ -0,0 +1,43 @@
1
+ import { K as useUIStore, $ as useCanvasStore, r as ref, q as computed, V as VIEWS, g as useI18n } from "./index-BW7gX0J2.js";
2
+ function useBeforeUnload({ route }) {
3
+ const uiStore = useUIStore();
4
+ const canvasStore = useCanvasStore();
5
+ const i18n = useI18n();
6
+ const unloadTimeout = ref(null);
7
+ const isDemoRoute = computed(() => route.name === VIEWS.DEMO);
8
+ const handlers = [];
9
+ function onBeforeUnload(e) {
10
+ if (isDemoRoute.value || window.preventNodeViewBeforeUnload) {
11
+ return;
12
+ }
13
+ handlers.forEach((handler) => handler());
14
+ if (uiStore.stateIsDirty) {
15
+ e.returnValue = true;
16
+ return true;
17
+ } else {
18
+ canvasStore.startLoading(i18n.baseText("nodeView.redirecting"));
19
+ return;
20
+ }
21
+ }
22
+ function addBeforeUnloadHandler(handler) {
23
+ handlers.push(handler);
24
+ }
25
+ function addBeforeUnloadEventBindings() {
26
+ window.addEventListener("beforeunload", onBeforeUnload);
27
+ }
28
+ function removeBeforeUnloadEventBindings() {
29
+ if (unloadTimeout.value) {
30
+ clearTimeout(unloadTimeout.value);
31
+ }
32
+ window.removeEventListener("beforeunload", onBeforeUnload);
33
+ }
34
+ return {
35
+ onBeforeUnload,
36
+ addBeforeUnloadEventBindings,
37
+ removeBeforeUnloadEventBindings,
38
+ addBeforeUnloadHandler
39
+ };
40
+ }
41
+ export {
42
+ useBeforeUnload as u
43
+ };
@@ -2471,16 +2471,16 @@
2471
2471
  -------------------------- */
2472
2472
  /* BEM
2473
2473
  -------------------------- */
2474
- ._handle_17785_123 {
2474
+ ._handle_19arw_123 {
2475
2475
  display: flex;
2476
2476
  flex-direction: row;
2477
2477
  align-items: center;
2478
2478
  justify-content: center;
2479
2479
  }
2480
- ._handle_17785_123._connected_17785_129 ._label_17785_129 {
2480
+ ._handle_19arw_123._connected_19arw_129 ._label_19arw_129 {
2481
2481
  max-width: 96px;
2482
2482
  }
2483
- ._label_17785_129 {
2483
+ ._label_19arw_129 {
2484
2484
  position: absolute;
2485
2485
  background: var(--color-canvas-label-background);
2486
2486
  z-index: 1;
@@ -2489,22 +2489,22 @@
2489
2489
  text-overflow: ellipsis;
2490
2490
  overflow: hidden;
2491
2491
  }
2492
- ._required_17785_143 ._label_17785_129::after {
2492
+ ._required_19arw_143 ._label_19arw_129::after {
2493
2493
  content: "*";
2494
2494
  color: var(--color-danger);
2495
2495
  }
2496
- ._outputLabel_17785_148 {
2496
+ ._outputLabel_19arw_148 {
2497
2497
  top: 50%;
2498
2498
  left: var(--spacing-m);
2499
2499
  transform: translate(0, -50%);
2500
2500
  font-size: var(--font-size-2xs);
2501
2501
  color: var(--color-foreground-xdark);
2502
2502
  }
2503
- ._runDataLabel_17785_156 {
2503
+ ._runDataLabel_19arw_156 {
2504
2504
  position: absolute;
2505
- top: 0;
2505
+ top: 50%;
2506
2506
  left: 50%;
2507
- transform: translate(-50%, -50%);
2507
+ transform: translate(-50%, -150%);
2508
2508
  font-size: var(--font-size-xs);
2509
2509
  color: var(--color-success);
2510
2510
  }/* BEM support Func
@@ -4134,11 +4134,11 @@ path[data-v-161512f5] {
4134
4134
  -------------------------- */
4135
4135
  /* BEM
4136
4136
  -------------------------- */
4137
- .minimap-enter-active[data-v-179da034],
4138
- .minimap-leave-active[data-v-179da034] {
4137
+ .minimap-enter-active[data-v-e20cd71d],
4138
+ .minimap-leave-active[data-v-e20cd71d] {
4139
4139
  transition: opacity 0.3s ease;
4140
4140
  }
4141
- .minimap-enter-from[data-v-179da034],
4142
- .minimap-leave-to[data-v-179da034] {
4141
+ .minimap-enter-from[data-v-e20cd71d],
4142
+ .minimap-leave-to[data-v-e20cd71d] {
4143
4143
  opacity: 0;
4144
4144
  }
@@ -1,6 +1,5 @@
1
- import { gj as createCompounder, gk as SetCache, gl as arrayIncludes, gm as cacheHas, gn as baseRest, go as isArrayLikeObject, gp as baseFlatten, r as ref, K as useUIStore, bp as useNodeTypesStore, T as useWorkflowsStore, a0 as useSourceControlStore, q as computed, am as getResourcePermissions, cT as isPresent, H as watch, dB as getMousePosition$1, aC as STICKY_NODE_TYPE, g as useI18n, gq as NOT_DUPLICATABLE_NODE_TYPES, d as defineComponent, E as onClickOutside, l as unref, c as openBlock, e as createBlock, j as createBaseVNode, i as createVNode, w as withCtx, n as normalizeClass, gr as N8nActionDropdown, B as normalizeStyle, gs as Teleport, f as createCommentVNode, _ as _export_sfc$1, bl as v4, gt as CORE_NODES_CATEGORY, gu as DEFAULT_SUBCATEGORY, p as useSettingsStore, gv as AI_TRANSFORM_NODE_TYPE, gw as sublimeSearch, bb as AI_SUBCATEGORY, bc as AI_CATEGORY_AGENTS, gx as sortBy, fP as i18n, gy as AI_CATEGORY_OTHER_TOOLS, gz as AI_OTHERS_NODE_CREATOR_VIEW, gA as AI_CATEGORY_DOCUMENT_LOADERS, bi as NodeConnectionType, gB as AI_CATEGORY_LANGUAGE_MODELS, gC as AI_CATEGORY_MEMORY, gD as AI_CATEGORY_OUTPUTPARSER, gE as AI_CATEGORY_RETRIEVERS, gF as AI_CATEGORY_TEXT_SPLITTERS, gG as AI_CATEGORY_TOOLS, gH as AI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE, gI as AI_CODE_TOOL_LANGCHAIN_NODE_TYPE, gJ as AI_CATEGORY_EMBEDDING, gK as AI_CATEGORY_VECTOR_STORES, gL as AI_UNCATEGORIZED_CATEGORY, aN as useTemplatesStore, eq as AI_NODE_CREATOR_VIEW, dR as TRIGGER_NODE_CREATOR_VIEW, bJ as MANUAL_TRIGGER_NODE_TYPE, bK as WEBHOOK_NODE_TYPE, gM as EMAIL_IMAP_NODE_TYPE, gN as SCHEDULE_TRIGGER_NODE_TYPE, bz as FORM_TRIGGER_NODE_TYPE, g4 as EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE, b8 as CHAT_TRIGGER_NODE_TYPE, gO as OTHER_TRIGGER_NODES_SUBCATEGORY, eJ as REGULAR_NODE_CREATOR_VIEW, gP as RSS_READ_NODE_TYPE, gQ as EMAIL_SEND_NODE_TYPE, gR as TRANSFORM_DATA_SUBCATEGORY, gS as FILTER_NODE_TYPE, gT as REMOVE_DUPLICATES_NODE_TYPE, gU as SPLIT_OUT_NODE_TYPE, gV as LIMIT_NODE_TYPE, gW as SUMMARIZE_NODE_TYPE, gX as AGGREGATE_NODE_TYPE, gY as MERGE_NODE_TYPE, cp as HTML_NODE_TYPE, gZ as MARKDOWN_NODE_TYPE, g_ as XML_NODE_TYPE, g$ as CRYPTO_NODE_TYPE, h0 as EXTRACT_FROM_FILE_NODE_TYPE, h1 as CONVERT_TO_FILE_NODE_TYPE, h2 as COMPRESSION_NODE_TYPE, h3 as EDIT_IMAGE_NODE_TYPE, h4 as FLOWS_CONTROL_SUBCATEGORY, h5 as IF_NODE_TYPE, h6 as SPLIT_IN_BATCHES_NODE_TYPE, h7 as HELPERS_SUBCATEGORY, h8 as HTTP_REQUEST_NODE_TYPE, h9 as CODE_NODE_TYPE, bd as AI_CATEGORY_CHAINS, ha as SET_NODE_TYPE, hb as DATETIME_NODE_TYPE, R as defineStore, $ as useCanvasStore, hc as AI_CATEGORY_ROOT_NODES, y as nextTick, be as AI_CODE_NODE_TYPE, bL as AI_TRANSFORM_NODE_TYPE$1, eS as CanvasConnectionMode, hd as isValidCanvasConnectionMode, d9 as isValidNodeConnectionType, S as STORES, at as useNDVStore, dG as NODE_CREATOR_OPEN_SOURCES, he as isVueFlowConnection, e1 as nodeConnectionTypes, bf as getNodeInputs, dr as CUSTOM_API_CALL_KEY, aU as useExternalHooks, ak as useTelemetry, hf as effectScope, ck as toRef, h as createElementBlock, s as renderSlot, cb as useSlots, br as provide, b5 as onUnmounted, ax as onBeforeMount, o as onMounted, hg as createPropsRestProxy, hh as useAttrs, F as Fragment, d7 as getCurrentInstance, dA as reactive, aX as inject, t as toDisplayString, A as renderList, x as onBeforeUnmount, hi as isMemoSame, hj as getCurrentScope, hk as onScopeDispose, aY as isRef, aZ as toRefs$1, hl as customRef, hm as toValue$1, b1 as resolveDynamicComponent, k as createTextVNode, b0 as mergeProps, m as resolveComponent, aq as h, hn as markRaw, ho as readonly, dF as KeyboardShortcutTooltip, hp as CanvasKey, aa as useCssModule, bo as watchEffect, a_ as normalizeProps, hq as CanvasNodeKey, eP as CanvasNodeRenderType, hr as refThrottled, hs as mergeModels, ht as useModel, bq as useNodeHelpers, bI as TitledList, cQ as resolveDirective, ay as withDirectives, ac as nodeViewEventBus, hu as CanvasNodeHandleKey, az as vShow, c$ as Transition$2, bs as _sfc_main$y, I as withModifiers, C as createEventBus, bQ as isEqual, hv as useActiveElement, d2 as useDeviceSupport, hw as useEventListener$1, aT as createSlots, dm as GRID_SIZE, hx as onKeyDown, hy as onKeyUp, ca as useThrottleFn, a$ as guardReactiveProps, cs as Suspense, bh as getNodeOutputs, d1 as getTriggerNodeServiceName, eY as sanitizeHtml, bH as nodeIssuesToString, du as WAIT_NODE_TYPE, dv as SEND_AND_WAIT_OPERATION, dw as FORM_NODE_TYPE, dx as WAIT_INDEFINITELY, Z as useRootStore, bS as useCredentialsStore, bV as useHistoryStore, D as useTagsStore, au as useExecutionsStore, a as useToast, a4 as useWorkflowHelpers, b7 as useClipboard, dU as MoveNodeCommand, c4 as RenameNodeCommand, eN as RemoveNodeCommand, eL as useDataSchema, d$ as NODE_SIZE, hz as AddNodeCommand, c0 as getNodeParameters, dW as getNewNodePosition, hA as DEFAULT_NODE_SIZE, hB as CONFIGURATION_NODE_SIZE, bg as getConnectionTypes, e0 as generateOffsets, hC as CONFIGURABLE_NODE_SIZE, d_ as PUSH_NODES_OFFSET, ea as AddConnectionCommand, ek as RemoveConnectionCommand, dV as UPDATE_WEBHOOK_ID_NODE_TYPES, dP as generateNodesGraph, a8 as EnterpriseEditionFeature, c1 as deepCopy } from "./index-CWcTt6jd.js";
2
- import { u as useBugReporting } from "./useBugReporting-BxDqzvRW.js";
3
- import { c as capitalize, u as usePinnedData } from "./usePinnedData-C5NRkSpx.js";
1
+ import { gn as createCompounder, go as SetCache, gp as arrayIncludes, gq as cacheHas, gr as baseRest, gs as isArrayLikeObject, gt as baseFlatten, r as ref, K as useUIStore, bo as useNodeTypesStore, T as useWorkflowsStore, a0 as useSourceControlStore, q as computed, al as getResourcePermissions, cR as isPresent, H as watch, dz as getMousePosition$1, aB as STICKY_NODE_TYPE, g as useI18n, gu as NOT_DUPLICATABLE_NODE_TYPES, d as defineComponent, E as onClickOutside, l as unref, c as openBlock, e as createBlock, j as createBaseVNode, i as createVNode, w as withCtx, n as normalizeClass, gv as N8nActionDropdown, B as normalizeStyle, gw as Teleport, f as createCommentVNode, _ as _export_sfc$1, bk as v4, gx as CORE_NODES_CATEGORY, gy as DEFAULT_SUBCATEGORY, p as useSettingsStore, gz as AI_TRANSFORM_NODE_TYPE, gA as sublimeSearch, ba as AI_SUBCATEGORY, bb as AI_CATEGORY_AGENTS, gB as sortBy, fV as i18n, gC as AI_CATEGORY_OTHER_TOOLS, gD as AI_OTHERS_NODE_CREATOR_VIEW, gE as AI_CATEGORY_DOCUMENT_LOADERS, bh as NodeConnectionType, gF as AI_CATEGORY_LANGUAGE_MODELS, gG as AI_CATEGORY_MEMORY, gH as AI_CATEGORY_OUTPUTPARSER, gI as AI_CATEGORY_RETRIEVERS, gJ as AI_CATEGORY_TEXT_SPLITTERS, gK as AI_CATEGORY_TOOLS, gL as AI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE, gM as AI_CODE_TOOL_LANGCHAIN_NODE_TYPE, gN as AI_CATEGORY_EMBEDDING, gO as AI_CATEGORY_VECTOR_STORES, gP as AI_UNCATEGORIZED_CATEGORY, aM as useTemplatesStore, eo as AI_NODE_CREATOR_VIEW, dP as TRIGGER_NODE_CREATOR_VIEW, bI as MANUAL_TRIGGER_NODE_TYPE, bJ as WEBHOOK_NODE_TYPE, gQ as EMAIL_IMAP_NODE_TYPE, gR as SCHEDULE_TRIGGER_NODE_TYPE, by as FORM_TRIGGER_NODE_TYPE, g9 as EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE, b7 as CHAT_TRIGGER_NODE_TYPE, gS as OTHER_TRIGGER_NODES_SUBCATEGORY, eH as REGULAR_NODE_CREATOR_VIEW, gT as RSS_READ_NODE_TYPE, gU as EMAIL_SEND_NODE_TYPE, gV as TRANSFORM_DATA_SUBCATEGORY, gW as FILTER_NODE_TYPE, gX as REMOVE_DUPLICATES_NODE_TYPE, gY as SPLIT_OUT_NODE_TYPE, gZ as LIMIT_NODE_TYPE, g_ as SUMMARIZE_NODE_TYPE, g$ as AGGREGATE_NODE_TYPE, h0 as MERGE_NODE_TYPE, co as HTML_NODE_TYPE, h1 as MARKDOWN_NODE_TYPE, h2 as XML_NODE_TYPE, h3 as CRYPTO_NODE_TYPE, h4 as EXTRACT_FROM_FILE_NODE_TYPE, h5 as CONVERT_TO_FILE_NODE_TYPE, h6 as COMPRESSION_NODE_TYPE, h7 as EDIT_IMAGE_NODE_TYPE, h8 as FLOWS_CONTROL_SUBCATEGORY, h9 as IF_NODE_TYPE, ha as SPLIT_IN_BATCHES_NODE_TYPE, hb as HELPERS_SUBCATEGORY, hc as HTTP_REQUEST_NODE_TYPE, hd as CODE_NODE_TYPE, bc as AI_CATEGORY_CHAINS, he as SET_NODE_TYPE, hf as DATETIME_NODE_TYPE, R as defineStore, $ as useCanvasStore, hg as AI_CATEGORY_ROOT_NODES, y as nextTick, bd as AI_CODE_NODE_TYPE, bK as AI_TRANSFORM_NODE_TYPE$1, eQ as CanvasConnectionMode, hh as isValidCanvasConnectionMode, d7 as isValidNodeConnectionType, S as STORES, as as useNDVStore, dE as NODE_CREATOR_OPEN_SOURCES, hi as isVueFlowConnection, d$ as nodeConnectionTypes, be as getNodeInputs, dp as CUSTOM_API_CALL_KEY, aT as useExternalHooks, aj as useTelemetry, hj as effectScope, cj as toRef, h as createElementBlock, s as renderSlot, ca as useSlots, bq as provide, b4 as onUnmounted, aw as onBeforeMount, o as onMounted, hk as createPropsRestProxy, hl as useAttrs, F as Fragment, d5 as getCurrentInstance, dy as reactive, aW as inject, t as toDisplayString, A as renderList, x as onBeforeUnmount, hm as isMemoSame, hn as getCurrentScope, ho as onScopeDispose, aX as isRef, aY as toRefs$1, hp as customRef, hq as toValue$1, b0 as resolveDynamicComponent, k as createTextVNode, a$ as mergeProps, m as resolveComponent, ap as h, hr as markRaw, hs as readonly, dD as KeyboardShortcutTooltip, ht as CanvasKey, aa as useCssModule, bn as watchEffect, aZ as normalizeProps, hu as CanvasNodeKey, eN as CanvasNodeRenderType, hv as refThrottled, hw as mergeModels, hx as useModel, bp as useNodeHelpers, bH as TitledList, cO as resolveDirective, ax as withDirectives, ac as nodeViewEventBus, hy as CanvasNodeHandleKey, ay as vShow, cZ as Transition$2, br as _sfc_main$y, I as withModifiers, C as createEventBus, bP as isEqual, hz as useActiveElement, d0 as useDeviceSupport, hA as useEventListener$1, aS as createSlots, dk as GRID_SIZE, hB as onKeyDown, hC as onKeyUp, c9 as useThrottleFn, a_ as guardReactiveProps, cr as Suspense, bg as getNodeOutputs, c$ as getTriggerNodeServiceName, eW as sanitizeHtml, bG as nodeIssuesToString, ds as WAIT_NODE_TYPE, dt as SEND_AND_WAIT_OPERATION, du as FORM_NODE_TYPE, dv as WAIT_INDEFINITELY, Z as useRootStore, bR as useCredentialsStore, bU as useHistoryStore, D as useTagsStore, at as useExecutionsStore, a as useToast, a4 as useWorkflowHelpers, b6 as useClipboard, dS as MoveNodeCommand, c3 as RenameNodeCommand, eL as RemoveNodeCommand, eJ as useDataSchema, dZ as NODE_SIZE, hD as AddNodeCommand, b$ as getNodeParameters, dU as getNewNodePosition, hE as DEFAULT_NODE_SIZE, hF as CONFIGURATION_NODE_SIZE, bf as getConnectionTypes, d_ as generateOffsets, hG as CONFIGURABLE_NODE_SIZE, dY as PUSH_NODES_OFFSET, e8 as AddConnectionCommand, ei as RemoveConnectionCommand, dT as UPDATE_WEBHOOK_ID_NODE_TYPES, dN as generateNodesGraph, a8 as EnterpriseEditionFeature, c0 as deepCopy } from "./index-BW7gX0J2.js";
2
+ import { c as capitalize, u as usePinnedData } from "./usePinnedData-CHMuwypo.js";
4
3
  var camelCase = createCompounder(function(result, word, index) {
5
4
  word = word.toLowerCase();
6
5
  return result + (index ? capitalize(word) : word);
@@ -248,7 +247,9 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
248
247
  emit("action", action, contextMenu2.targetNodeIds.value);
249
248
  }
250
249
  function closeMenu(event) {
251
- event.preventDefault();
250
+ if (event.cancelable) {
251
+ event.preventDefault();
252
+ }
252
253
  event.stopPropagation();
253
254
  contextMenu2.close();
254
255
  }
@@ -11245,7 +11246,7 @@ function useStylesLoadedWarning() {
11245
11246
  }
11246
11247
  });
11247
11248
  }
11248
- const _hoisted_1$d = /* @__PURE__ */ createBaseVNode("div", { class: "vue-flow__edge-labels" }, null, -1);
11249
+ const _hoisted_1$c = /* @__PURE__ */ createBaseVNode("div", { class: "vue-flow__edge-labels" }, null, -1);
11249
11250
  const __default__$1$2 = {
11250
11251
  name: "VueFlow",
11251
11252
  compatConfig: { MODE: 3 }
@@ -11338,7 +11339,7 @@ const _sfc_main$1$4 = /* @__PURE__ */ defineComponent({
11338
11339
  createVNode(_sfc_main$8$1, null, {
11339
11340
  default: withCtx(() => [
11340
11341
  createVNode(_sfc_main$4$1),
11341
- _hoisted_1$d,
11342
+ _hoisted_1$c,
11342
11343
  createVNode(_sfc_main$2$1),
11343
11344
  renderSlot(_ctx.$slots, "zoom-pane")
11344
11345
  ]),
@@ -11439,7 +11440,7 @@ function render$1(_ctx, _cache) {
11439
11440
  return openBlock(), createElementBlock("svg", _hoisted_1$1$2, _hoisted_3$1$1);
11440
11441
  }
11441
11442
  const Lock = { render: render$1 };
11442
- const _hoisted_1$c = {
11443
+ const _hoisted_1$b = {
11443
11444
  xmlns: "http://www.w3.org/2000/svg",
11444
11445
  viewBox: "0 0 25 32"
11445
11446
  };
@@ -11448,7 +11449,7 @@ const _hoisted_3$5 = [
11448
11449
  _hoisted_2$7
11449
11450
  ];
11450
11451
  function render(_ctx, _cache) {
11451
- return openBlock(), createElementBlock("svg", _hoisted_1$c, _hoisted_3$5);
11452
+ return openBlock(), createElementBlock("svg", _hoisted_1$b, _hoisted_3$5);
11452
11453
  }
11453
11454
  const Unlock = { render };
11454
11455
  const __default__$4 = {
@@ -11571,19 +11572,15 @@ const _sfc_main$v = /* @__PURE__ */ defineComponent({
11571
11572
  };
11572
11573
  }
11573
11574
  });
11574
- const _hoisted_1$b = ["href"];
11575
11575
  const _sfc_main$u = /* @__PURE__ */ defineComponent({
11576
11576
  __name: "CanvasControlButtons",
11577
11577
  props: {
11578
- zoom: { default: 1 },
11579
- showBugReportingButton: { type: Boolean, default: false }
11578
+ zoom: { default: 1 }
11580
11579
  },
11581
11580
  emits: ["reset-zoom", "zoom-in", "zoom-out", "zoom-to-fit"],
11582
11581
  setup(__props, { emit: __emit }) {
11583
11582
  const props = __props;
11584
11583
  const emit = __emit;
11585
- const { getReportingURL } = useBugReporting();
11586
- const telemetry = useTelemetry();
11587
11584
  const i18n2 = useI18n();
11588
11585
  const isResetZoomVisible = computed(() => props.zoom !== 1);
11589
11586
  function onResetZoom() {
@@ -11598,9 +11595,6 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
11598
11595
  function onZoomToFit() {
11599
11596
  emit("zoom-to-fit");
11600
11597
  }
11601
- function trackBugReport() {
11602
- telemetry.track("User clicked bug report button in canvas", {}, { withPostHog: true });
11603
- }
11604
11598
  return (_ctx, _cache) => {
11605
11599
  const _component_N8nIconButton = resolveComponent("N8nIconButton");
11606
11600
  return openBlock(), createBlock(unref(_sfc_main$v), {
@@ -11668,26 +11662,6 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
11668
11662
  })
11669
11663
  ]),
11670
11664
  _: 1
11671
- }, 8, ["label"])) : createCommentVNode("", true),
11672
- props.showBugReportingButton ? (openBlock(), createBlock(KeyboardShortcutTooltip, {
11673
- key: 1,
11674
- label: unref(i18n2).baseText("nodeView.reportBug")
11675
- }, {
11676
- default: withCtx(() => [
11677
- createBaseVNode("a", {
11678
- href: unref(getReportingURL)(),
11679
- target: "_blank",
11680
- onClick: trackBugReport
11681
- }, [
11682
- createVNode(_component_N8nIconButton, {
11683
- type: "tertiary",
11684
- size: "large",
11685
- icon: "bug",
11686
- "data-test-id": "report-bug"
11687
- })
11688
- ], 8, _hoisted_1$b)
11689
- ]),
11690
- _: 1
11691
11665
  }, 8, ["label"])) : createCommentVNode("", true)
11692
11666
  ]),
11693
11667
  _: 1
@@ -11704,11 +11678,13 @@ function getEdgeRenderData(props, {
11704
11678
  connectionType = NodeConnectionType.Main
11705
11679
  } = {}) {
11706
11680
  const { targetX, targetY, sourceX, sourceY, sourcePosition, targetPosition } = props;
11681
+ const isConnectorStraight = sourceY === targetY;
11707
11682
  if (!isRightOfSourceHandle(sourceX, targetX) || connectionType !== NodeConnectionType.Main) {
11708
11683
  const segment = getBezierPath(props);
11709
11684
  return {
11710
11685
  segments: [segment],
11711
- labelPosition: [segment[1], segment[2]]
11686
+ labelPosition: [segment[1], segment[2]],
11687
+ isConnectorStraight
11712
11688
  };
11713
11689
  }
11714
11690
  const firstSegmentTargetX = (sourceX + targetX) / 2;
@@ -11735,7 +11711,8 @@ function getEdgeRenderData(props, {
11735
11711
  });
11736
11712
  return {
11737
11713
  segments: [firstSegment, secondSegment],
11738
- labelPosition: [firstSegmentTargetX, firstSegmentTargetY]
11714
+ labelPosition: [firstSegmentTargetX, firstSegmentTargetY],
11715
+ isConnectorStraight
11739
11716
  };
11740
11717
  }
11741
11718
  function injectStrict(key, fallback) {
@@ -17098,8 +17075,9 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
17098
17075
  const node2 = inject(CanvasNodeKey);
17099
17076
  const slots = useSlots();
17100
17077
  const Render = () => {
17078
+ const renderType2 = node2?.data.value.render.type ?? CanvasNodeRenderType.Default;
17101
17079
  let Component;
17102
- switch (node2?.data.value.render.type) {
17080
+ switch (renderType2) {
17103
17081
  case CanvasNodeRenderType.StickyNote:
17104
17082
  Component = CanvasNodeStickyNote;
17105
17083
  break;
@@ -17109,7 +17087,13 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
17109
17087
  default:
17110
17088
  Component = CanvasNodeDefault;
17111
17089
  }
17112
- return h(Component, slots.default);
17090
+ return h(
17091
+ Component,
17092
+ {
17093
+ "data-canvas-node-render-type": renderType2
17094
+ },
17095
+ slots.default
17096
+ );
17113
17097
  };
17114
17098
  return (_ctx, _cache) => {
17115
17099
  return openBlock(), createBlock(Render);
@@ -17446,12 +17430,12 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
17446
17430
  };
17447
17431
  }
17448
17432
  });
17449
- const handle$3 = "_handle_17785_123";
17450
- const connected = "_connected_17785_129";
17451
- const label$2 = "_label_17785_129";
17452
- const required$2 = "_required_17785_143";
17453
- const outputLabel = "_outputLabel_17785_148";
17454
- const runDataLabel = "_runDataLabel_17785_156";
17433
+ const handle$3 = "_handle_19arw_123";
17434
+ const connected = "_connected_19arw_129";
17435
+ const label$2 = "_label_19arw_129";
17436
+ const required$2 = "_required_19arw_143";
17437
+ const outputLabel = "_outputLabel_19arw_148";
17438
+ const runDataLabel = "_runDataLabel_19arw_156";
17455
17439
  const style0$8 = {
17456
17440
  handle: handle$3,
17457
17441
  connected,
@@ -17728,7 +17712,7 @@ const cssModules$4 = {
17728
17712
  "$style": style0$4
17729
17713
  };
17730
17714
  const CanvasHandleRenderer = /* @__PURE__ */ _export_sfc$1(_sfc_main$8, [["__cssModules", cssModules$4]]);
17731
- const _hoisted_1$4 = ["data-node-name", "data-node-type"];
17715
+ const _hoisted_1$4 = ["data-test-id", "data-node-name", "data-node-type"];
17732
17716
  const _sfc_main$7 = /* @__PURE__ */ defineComponent({
17733
17717
  __name: "CanvasNode",
17734
17718
  props: {
@@ -17791,6 +17775,10 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
17791
17775
  selected: props.selected,
17792
17776
  ...Object.fromEntries([...nodeClasses.value].map((c) => [c, true]))
17793
17777
  }));
17778
+ const renderType2 = computed(() => props.data.render.type);
17779
+ const dataTestId = computed(
17780
+ () => [CanvasNodeRenderType.StickyNote, CanvasNodeRenderType.AddNodes].includes(renderType2.value) ? void 0 : "canvas-node"
17781
+ );
17794
17782
  const canvasNodeEventBus = ref(createEventBus());
17795
17783
  function emitCanvasNodeEvent(event) {
17796
17784
  if (event.ids.includes(props.id) && canvasNodeEventBus.value) {
@@ -17936,7 +17924,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
17936
17924
  return (_ctx, _cache) => {
17937
17925
  return openBlock(), createElementBlock("div", {
17938
17926
  class: normalizeClass(classes.value),
17939
- "data-test-id": "canvas-node",
17927
+ "data-test-id": dataTestId.value,
17940
17928
  "data-node-name": data.value.name,
17941
17929
  "data-node-type": data.value.type
17942
17930
  }, [
@@ -18154,9 +18142,11 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
18154
18142
  const edgeLabelStyle = computed(() => ({
18155
18143
  color: edgeColor.value
18156
18144
  }));
18145
+ const isConnectorStraight = computed(() => renderData.value.isConnectorStraight);
18157
18146
  const edgeToolbarStyle = computed(() => {
18147
+ const translateY = isConnectorStraight.value ? "-150%" : "-50%";
18158
18148
  return {
18159
- transform: `translate(-50%, -50%) translate(${labelPosition.value[0]}px,${labelPosition.value[1]}px)`,
18149
+ transform: `translate(-50%, ${translateY}) translate(${labelPosition.value[0]}px, ${labelPosition.value[1]}px)`,
18160
18150
  ...props.hovered ? { zIndex: 1 } : {}
18161
18151
  };
18162
18152
  });
@@ -18265,10 +18255,10 @@ const useKeybindings = (keymap, options) => {
18265
18255
  });
18266
18256
  const normalizedKeymap = computed(
18267
18257
  () => Object.fromEntries(
18268
- Object.entries(keymap.value).map(([shortcut, handler]) => {
18258
+ Object.entries(keymap.value).flatMap(([shortcut, handler]) => {
18269
18259
  const shortcuts = shortcut.split("|");
18270
18260
  return shortcuts.map((s) => [normalizeShortcutString(s), handler]);
18271
- }).flat()
18261
+ })
18272
18262
  )
18273
18263
  );
18274
18264
  function shortcutPartsToString(parts) {
@@ -18287,10 +18277,19 @@ const useKeybindings = (keymap, options) => {
18287
18277
  }, "");
18288
18278
  return shortcutPartsToString(shortcut.split(new RegExp(`[${splitCharsRegEx}]`)));
18289
18279
  }
18280
+ function keyboardEventCodeToKey(code) {
18281
+ if (code.startsWith("Digit")) {
18282
+ return code.replace("Digit", "").toLowerCase();
18283
+ } else if (code.startsWith("Key")) {
18284
+ return code.replace("Key", "").toLowerCase();
18285
+ }
18286
+ return code.toLowerCase();
18287
+ }
18290
18288
  function toShortcutString(event) {
18291
18289
  const { shiftKey, altKey } = event;
18292
18290
  const ctrlKey = isCtrlKeyPressed(event);
18293
- const keys = [event.key];
18291
+ const keys = "key" in event ? [event.key] : [];
18292
+ const codes = "code" in event ? [keyboardEventCodeToKey(event.code)] : [];
18294
18293
  const modifiers = [];
18295
18294
  if (shiftKey) {
18296
18295
  modifiers.push("shift");
@@ -18301,12 +18300,15 @@ const useKeybindings = (keymap, options) => {
18301
18300
  if (altKey) {
18302
18301
  modifiers.push("alt");
18303
18302
  }
18304
- return shortcutPartsToString([...modifiers, ...keys]);
18303
+ return {
18304
+ byKey: shortcutPartsToString([...modifiers, ...keys]),
18305
+ byCode: shortcutPartsToString([...modifiers, ...codes])
18306
+ };
18305
18307
  }
18306
18308
  function onKeyDown2(event) {
18307
18309
  if (ignoreKeyPresses.value || isDisabled.value) return;
18308
- const shortcutString = toShortcutString(event);
18309
- const handler = normalizedKeymap.value[shortcutString];
18310
+ const { byKey, byCode } = toShortcutString(event);
18311
+ const handler = normalizedKeymap.value[byKey] ?? normalizedKeymap.value[byCode];
18310
18312
  if (handler) {
18311
18313
  event.preventDefault();
18312
18314
  event.stopPropagation();
@@ -18599,7 +18601,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
18599
18601
  readOnly: { type: Boolean, default: false },
18600
18602
  executing: { type: Boolean, default: false },
18601
18603
  keyBindings: { type: Boolean, default: true },
18602
- showBugReportingButton: { type: Boolean },
18603
18604
  loading: { type: Boolean, default: false }
18604
18605
  },
18605
18606
  emits: ["update:modelValue", "update:node:position", "update:nodes:position", "update:node:active", "update:node:enabled", "update:node:selected", "update:node:name", "update:node:parameters", "update:node:inputs", "update:node:outputs", "click:node:add", "run:node", "delete:node", "create:node", "create:sticky", "delete:nodes", "update:nodes:enabled", "copy:nodes", "duplicate:nodes", "update:nodes:pin", "cut:nodes", "delete:connection", "create:connection:start", "create:connection", "create:connection:end", "create:connection:cancelled", "click:connection:add", "click:pane", "run:workflow", "save:workflow", "create:workflow", "drag-and-drop"],
@@ -18702,8 +18703,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
18702
18703
  ctrl_c: emitWithSelectedNodes((ids) => emit("copy:nodes", ids)),
18703
18704
  enter: emitWithLastSelectedNode((id2) => onSetNodeActive(id2)),
18704
18705
  ctrl_a: () => addSelectedNodes(graphNodes.value),
18705
- "shift_+|+|=": async () => await onZoomIn(),
18706
- "shift+_|-|_": async () => await onZoomOut(),
18706
+ // Support both key and code for zooming in and out
18707
+ "shift_+|+|=|shift_Equal|Equal": async () => await onZoomIn(),
18708
+ "shift+_|-|_|shift_Minus|Minus": async () => await onZoomOut(),
18707
18709
  0: async () => await onResetZoom(),
18708
18710
  1: async () => await onFitView(),
18709
18711
  ArrowUp: emitWithLastSelectedNode(selectUpperSiblingNode),
@@ -19127,13 +19129,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
19127
19129
  class: normalizeClass(unref($style).canvasControls),
19128
19130
  position: _ctx.controlsPosition,
19129
19131
  "show-interactive": false,
19130
- "show-bug-reporting-button": _ctx.showBugReportingButton,
19131
19132
  zoom: unref(viewport).zoom,
19132
19133
  onZoomToFit: onFitView,
19133
19134
  onZoomIn,
19134
19135
  onZoomOut,
19135
19136
  onResetZoom
19136
- }, null, 8, ["class", "position", "show-bug-reporting-button", "zoom"]),
19137
+ }, null, 8, ["class", "position", "zoom"]),
19137
19138
  (openBlock(), createBlock(Suspense, null, {
19138
19139
  default: withCtx(() => [
19139
19140
  createVNode(ContextMenu, { onAction: onContextMenuAction })
@@ -19155,7 +19156,7 @@ const style0 = {
19155
19156
  const cssModules = {
19156
19157
  "$style": style0
19157
19158
  };
19158
- const __unplugin_components_0 = /* @__PURE__ */ _export_sfc$1(_sfc_main, [["__cssModules", cssModules], ["__scopeId", "data-v-179da034"]]);
19159
+ const __unplugin_components_0 = /* @__PURE__ */ _export_sfc$1(_sfc_main, [["__cssModules", cssModules], ["__scopeId", "data-v-e20cd71d"]]);
19159
19160
  function useCanvasMapping({
19160
19161
  nodes,
19161
19162
  connections,
@@ -1,4 +1,4 @@
1
- import { b as useRouter, a as useToast, T as useWorkflowsStore, p as useSettingsStore, K as useUIStore, a5 as usePageRedirectionHelper, q as computed, a8 as EnterpriseEditionFeature, aq as h, eY as sanitizeHtml, ae as MODAL_CONFIRM, V as VIEWS, Z as useRootStore, f5 as isFullExecutionResponse, f6 as DEBUG_PAYWALL_MODAL_KEY, ak as useTelemetry, g as useI18n, al as useMessage } from "./index-CWcTt6jd.js";
1
+ import { b as useRouter, a as useToast, T as useWorkflowsStore, p as useSettingsStore, K as useUIStore, a5 as usePageRedirectionHelper, q as computed, a8 as EnterpriseEditionFeature, ap as h, eW as sanitizeHtml, ae as MODAL_CONFIRM, V as VIEWS, Z as useRootStore, f3 as isFullExecutionResponse, f4 as DEBUG_PAYWALL_MODAL_KEY, aj as useTelemetry, g as useI18n, ak as useMessage } from "./index-BW7gX0J2.js";
2
2
  const useExecutionDebugging = () => {
3
3
  const telemetry = useTelemetry();
4
4
  const router = useRouter();
@@ -1,4 +1,4 @@
1
- import { gi as dateformat, b as useRouter, V as VIEWS, g as useI18n, ak as useTelemetry } from "./index-CWcTt6jd.js";
1
+ import { gm as dateformat, b as useRouter, V as VIEWS, g as useI18n, aj as useTelemetry } from "./index-BW7gX0J2.js";
2
2
  const convertToDisplayDateComponents = (fullDate) => {
3
3
  const mask = `d mmm${new Date(fullDate).getFullYear() === (/* @__PURE__ */ new Date()).getFullYear() ? "" : ", yyyy"}#HH:MM:ss`;
4
4
  const formattedDate = dateformat(fullDate, mask);
@@ -1,4 +1,4 @@
1
- import { g9 as baseSlice, ga as toString, bp as useNodeTypesStore, q as computed, l as unref, eK as isSubNodeType, Z as useRootStore, T as useWorkflowsStore, a as useToast, gb as PIN_DATA_NODE_TYPES_DENYLIST, bh as getNodeOutputs, bi as NodeConnectionType, gc as jsonStringify, gd as toMegaBytes, ge as stringSizeInBytes, ci as jsonParse, g as useI18n, ak as useTelemetry, aU as useExternalHooks, eL as useDataSchema, gf as MAX_PINNED_DATA_SIZE, gg as MAX_WORKFLOW_SIZE, gh as MAX_EXPECTED_REQUEST_SIZE } from "./index-CWcTt6jd.js";
1
+ import { gd as baseSlice, ge as toString, bo as useNodeTypesStore, q as computed, l as unref, eI as isSubNodeType, Z as useRootStore, T as useWorkflowsStore, a as useToast, gf as PIN_DATA_NODE_TYPES_DENYLIST, bg as getNodeOutputs, bh as NodeConnectionType, gg as jsonStringify, gh as toMegaBytes, gi as stringSizeInBytes, ch as jsonParse, g as useI18n, aj as useTelemetry, aT as useExternalHooks, eJ as useDataSchema, gj as MAX_PINNED_DATA_SIZE, gk as MAX_WORKFLOW_SIZE, gl as MAX_EXPECTED_REQUEST_SIZE } from "./index-BW7gX0J2.js";
2
2
  function castSlice(array, start, end) {
3
3
  var length = array.length;
4
4
  end = end === void 0 ? length : end;
@@ -1,6 +1,6 @@
1
- import { fZ as makeRestApiRequest, R as defineStore, Z as useRootStore, d as defineComponent, cQ as resolveDirective, c as openBlock, h as createElementBlock, ay as withDirectives, j as createBaseVNode, t as toDisplayString, l as unref, g as useI18n, a4 as useWorkflowHelpers, bq as useNodeHelpers, a as useToast, bS as useCredentialsStore, bp as useNodeTypesStore, p as useSettingsStore, K as useUIStore, T as useWorkflowsStore, eV as useAssistantStore, av as usePostHog, r as ref, bU as AI_CREDITS_EXPERIMENT, f_ as parse, f$ as hasTrimmedItem, g0 as codeNodeEditorEventBus, ag as WORKFLOW_SETTINGS_MODAL_KEY, dP as generateNodesGraph, aq as h, d1 as getTriggerNodeServiceName, g1 as hasTrimmedData, aU as useExternalHooks, ak as useTelemetry, g2 as clearPopupWindowState } from "./index-CWcTt6jd.js";
2
- import { u as usePushConnectionStore, g as globalLinkActionsEventBus } from "./pushConnection.store-CTrZ_kO6.js";
3
- import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-eykvtlKm.js";
1
+ import { g2 as makeRestApiRequest, R as defineStore, Z as useRootStore, d as defineComponent, cO as resolveDirective, c as openBlock, h as createElementBlock, ax as withDirectives, j as createBaseVNode, t as toDisplayString, l as unref, g as useI18n, a4 as useWorkflowHelpers, bp as useNodeHelpers, a as useToast, bR as useCredentialsStore, bo as useNodeTypesStore, p as useSettingsStore, K as useUIStore, T as useWorkflowsStore, eT as useAssistantStore, au as usePostHog, r as ref, bT as AI_CREDITS_EXPERIMENT, g3 as parse, g4 as hasTrimmedItem, g5 as codeNodeEditorEventBus, af as WORKFLOW_SETTINGS_MODAL_KEY, dN as generateNodesGraph, ap as h, c$ as getTriggerNodeServiceName, g6 as hasTrimmedData, aT as useExternalHooks, aj as useTelemetry, g7 as clearPopupWindowState } from "./index-BW7gX0J2.js";
2
+ import { u as usePushConnectionStore, g as globalLinkActionsEventBus } from "./pushConnection.store-C6PSl50Z.js";
3
+ import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-B7xBZAZO.js";
4
4
  const GET_STATUS_ENDPOINT = "/orchestration/worker/status";
5
5
  const sendGetWorkerStatus = async (context) => {
6
6
  await makeRestApiRequest(context, "POST", GET_STATUS_ENDPOINT);
@@ -1,6 +1,6 @@
1
- import { cf as getDefaultExportFromCjs, d as defineComponent, b7 as useClipboard, a as useToast, eU as useAIAssistantHelpers, bp as useNodeTypesStore, at as useNDVStore, Z as useRootStore, eV as useAssistantStore, K as useUIStore, q as computed, c as openBlock, h as createElementBlock, j as createBaseVNode, t as toDisplayString, ay as withDirectives, f as createCommentVNode, i as createVNode, l as unref, eW as InlineAskAssistantButton, w as withCtx, k as createTextVNode, F as Fragment, A as renderList, g as useI18n, co as MAX_DISPLAY_DATA_SIZE, bt as isCommunityPackageName, eX as NEW_ASSISTANT_SESSION_MODAL, m as resolveComponent, cQ as resolveDirective, eY as sanitizeHtml, bi as NodeConnectionType, eZ as isObjectEmpty, r as ref, o as onMounted, n as normalizeClass, e as createBlock, b2 as VueMarkdown, _ as _export_sfc, T as useWorkflowsStore, bs as _sfc_main$4, I as withModifiers, H as watch, B as normalizeStyle, e_ as ElTree, bq as useNodeHelpers, a4 as useWorkflowHelpers, au as useExecutionsStore, b8 as CHAT_TRIGGER_NODE_TYPE, bk as get, e$ as SINGLE_WEBHOOK_TRIGGERS, aw as useLocalStorage, f0 as displayForm, aU as useExternalHooks, cI as isEmpty } from "./index-CWcTt6jd.js";
2
- import { c as capitalize } from "./usePinnedData-C5NRkSpx.js";
3
- import { u as useExecutionHelpers } from "./useExecutionHelpers-DcyS3__o.js";
1
+ import { ce as getDefaultExportFromCjs, d as defineComponent, b6 as useClipboard, a as useToast, eS as useAIAssistantHelpers, bo as useNodeTypesStore, as as useNDVStore, Z as useRootStore, eT as useAssistantStore, K as useUIStore, q as computed, c as openBlock, h as createElementBlock, j as createBaseVNode, t as toDisplayString, ax as withDirectives, f as createCommentVNode, i as createVNode, l as unref, eU as InlineAskAssistantButton, w as withCtx, k as createTextVNode, F as Fragment, A as renderList, g as useI18n, cn as MAX_DISPLAY_DATA_SIZE, bs as isCommunityPackageName, eV as NEW_ASSISTANT_SESSION_MODAL, m as resolveComponent, cO as resolveDirective, eW as sanitizeHtml, bh as NodeConnectionType, eX as isObjectEmpty, r as ref, o as onMounted, n as normalizeClass, e as createBlock, b1 as VueMarkdown, _ as _export_sfc, T as useWorkflowsStore, br as _sfc_main$4, I as withModifiers, H as watch, B as normalizeStyle, eY as ElTree, bp as useNodeHelpers, a4 as useWorkflowHelpers, at as useExecutionsStore, b7 as CHAT_TRIGGER_NODE_TYPE, bj as get, eZ as SINGLE_WEBHOOK_TRIGGERS, av as useLocalStorage, e_ as displayForm, aT as useExternalHooks, cG as isEmpty } from "./index-BW7gX0J2.js";
2
+ import { c as capitalize } from "./usePinnedData-CHMuwypo.js";
3
+ import { u as useExecutionHelpers } from "./useExecutionHelpers-MX6P-wr8.js";
4
4
  var core;
5
5
  var hasRequiredCore;
6
6
  function requireCore() {
@@ -3108,17 +3108,20 @@ function useRunWorkflow(useRunWorkflowOpts) {
3108
3108
  );
3109
3109
  newRunData = { [options.triggerNode]: [options.nodeData] };
3110
3110
  executedNode = options.triggerNode;
3111
+ }
3112
+ if (options.triggerNode && options.nodeData) {
3111
3113
  triggerToStartFrom = {
3112
3114
  name: options.triggerNode,
3113
3115
  data: options.nodeData
3114
3116
  };
3115
3117
  }
3116
- if (options.destinationNode && (workflowsStore.checkIfNodeHasChatParent(options.destinationNode) || destinationNodeType === CHAT_TRIGGER_NODE_TYPE)) {
3118
+ if (options.destinationNode && (workflowsStore.checkIfNodeHasChatParent(options.destinationNode) || destinationNodeType === CHAT_TRIGGER_NODE_TYPE) && options.source !== "RunData.ManualChatMessage") {
3117
3119
  const startNode = workflow.getStartNode(options.destinationNode);
3118
3120
  if (startNode && startNode.type === CHAT_TRIGGER_NODE_TYPE) {
3119
3121
  const chatHasInputData = nodeHelpers.getNodeInputData(startNode, 0, 0, "input")?.length > 0;
3120
3122
  const chatHasPinData = !!workflowData.pinData?.[startNode.name];
3121
3123
  if (!chatHasInputData && !chatHasPinData) {
3124
+ workflowsStore.chatPartialExecutionDestinationNode = options.destinationNode;
3122
3125
  workflowsStore.setPanelOpen("chat", true);
3123
3126
  return;
3124
3127
  }
@@ -3169,11 +3172,20 @@ function useRunWorkflow(useRunWorkflowOpts) {
3169
3172
  return void 0;
3170
3173
  }
3171
3174
  const partialExecutionVersion = useLocalStorage("PartialExecution.version", -1);
3175
+ const isPartialExecution = options.destinationNode !== void 0;
3172
3176
  const startRunData = {
3173
3177
  workflowData,
3174
- // With the new partial execution version the backend decides what run
3175
- // data to use and what to ignore.
3176
- runData: partialExecutionVersion.value === 1 ? runData2 ?? void 0 : newRunData,
3178
+ runData: !isPartialExecution ? (
3179
+ // if it's a full execution we don't want to send any run data
3180
+ void 0
3181
+ ) : partialExecutionVersion.value === 1 ? (
3182
+ // With the new partial execution version the backend decides
3183
+ //what run data to use and what to ignore.
3184
+ runData2 ?? void 0
3185
+ ) : (
3186
+ // for v0 we send the run data the FE constructed
3187
+ newRunData
3188
+ ),
3177
3189
  startNodes,
3178
3190
  triggerToStartFrom
3179
3191
  };
@@ -1,4 +1,4 @@
1
- import { r as ref, b as useRouter, a4 as useWorkflowHelpers, T as useWorkflowsStore, K as useUIStore, a as useToast, a2 as useNpsSurveyStore, X as PLACEHOLDER_EMPTY_WORKFLOW_ID, aU as useExternalHooks, aK as useStorage, g6 as LOCAL_STORAGE_ACTIVATION_FLAG, g7 as WORKFLOW_ACTIVE_MODAL_KEY, ak as useTelemetry, g as useI18n } from "./index-CWcTt6jd.js";
1
+ import { r as ref, b as useRouter, a4 as useWorkflowHelpers, T as useWorkflowsStore, K as useUIStore, a as useToast, a2 as useNpsSurveyStore, X as PLACEHOLDER_EMPTY_WORKFLOW_ID, aT as useExternalHooks, aI as useStorage, gb as LOCAL_STORAGE_ACTIVATION_FLAG, gc as WORKFLOW_ACTIVE_MODAL_KEY, aj as useTelemetry, g as useI18n } from "./index-BW7gX0J2.js";
2
2
  function useWorkflowActivate() {
3
3
  const updatingWorkflowActivation = ref(false);
4
4
  const router = useRouter();
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-BN5TIqPj.js"></script>
4
+ <script type="module" crossorigin src="/{{BASE_PATH}}/assets/polyfills-DNwgos9f.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-CWcTt6jd.js"></script>
20
- <link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-DXFsvbJ_.css">
19
+ <script type="module" crossorigin src="/{{BASE_PATH}}/assets/index-BW7gX0J2.js"></script>
20
+ <link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-Bs_8II2j.css">
21
21
  </head>
22
22
  <body>
23
23
  <noscript>
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-editor-ui",
3
- "version": "1.75.1",
3
+ "version": "1.77.0",
4
4
  "description": "Workflow Editor UI for n8n",
5
5
  "main": "index.js",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -1,4 +0,0 @@
1
- import { ie as _sfc_main } from "./index-CWcTt6jd.js";
2
- export {
3
- _sfc_main as default
4
- };