n8n-editor-ui 1.105.3 → 1.106.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 (115) hide show
  1. package/dist/assets/{AnimatedSpinner-DN2jXYlg.js → AnimatedSpinner-BT-tHTIr.js} +1 -1
  2. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CI8fSX5_.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BeYYXOqm.js} +1 -1
  3. package/dist/assets/{AuthView-CDj6SylT.js → AuthView-qxCpg9Vt.js} +2 -2
  4. package/dist/assets/{ChangePasswordView-B5GRVadN.js → ChangePasswordView-YpoX0OgW.js} +3 -3
  5. package/dist/assets/CollectionParameter-B7ioj7nV.js +4 -0
  6. package/dist/assets/{ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-BqZCYQqJ.js → ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-CYlb_OaL.js} +1 -1
  7. package/dist/assets/{CredentialsView-LniKS1gL.js → CredentialsView-XfBa-FgD.js} +8 -8
  8. package/dist/assets/DataStoreView-D5shCvXR.js +344 -0
  9. package/dist/assets/DataStoreView-bZrewhaR.css +159 -0
  10. package/dist/assets/{DemoFooter-BlcOl9Ia.js → DemoFooter-GL7a3c8m.js} +6 -6
  11. package/dist/assets/{EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-CkI0vaWb.js → EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-B5QhpE-B.js} +1 -1
  12. package/dist/assets/{EntityNotFound-D-i0iOEh.js → EntityNotFound-BSClXGSU.js} +1 -1
  13. package/dist/assets/{EntityUnAuthorised-CtvzhcxM.js → EntityUnAuthorised-rdODRu8_.js} +1 -1
  14. package/dist/assets/{ErrorView-DqayUzyN.js → ErrorView-DDtX9a9K.js} +1 -1
  15. package/dist/assets/{EvaluationsRootView-u-tzY3TN.js → EvaluationsRootView-NcI-bjuh.js} +1 -1
  16. package/dist/assets/{EvaluationsView-Cv6F74cp.js → EvaluationsView-P9DGMaUt.js} +3 -3
  17. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-Ar7NipI9.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-CIpd91fZ.js} +2 -2
  18. package/dist/assets/{ExecutionsView-BDCP9XVW.js → ExecutionsView-NkCHKd3U.js} +8 -8
  19. package/dist/assets/{FixedCollectionParameter-dYhz2Ism.js → FixedCollectionParameter-0-xS_bRE.js} +1 -1
  20. package/dist/assets/{ForgotMyPasswordView-C69Wn008.js → ForgotMyPasswordView-DqADZ9FM.js} +3 -3
  21. package/dist/assets/{InfoAccordion-CH0m5p8-.js → InfoAccordion-CR3AoL8Q.js} +1 -1
  22. package/dist/assets/{InsightsChartAverageRuntime-DAN-ukDS.js → InsightsChartAverageRuntime-C9xMoV66.js} +4 -4
  23. package/dist/assets/{InsightsChartFailed-DQmPYaEe.js → InsightsChartFailed-BXTLYxeQ.js} +4 -4
  24. package/dist/assets/{InsightsChartFailureRate-DO7uhap1.js → InsightsChartFailureRate-B0i0ej03.js} +4 -4
  25. package/dist/assets/{InsightsChartTimeSaved-CQA_4401.js → InsightsChartTimeSaved-DvotshIJ.js} +4 -4
  26. package/dist/assets/{InsightsChartTotal--CVbOXo5.js → InsightsChartTotal-BA2XNYoP.js} +4 -4
  27. package/dist/assets/{InsightsDashboard-CrBkWNMD.js → InsightsDashboard-CD18Zlv9.js} +10 -10
  28. package/dist/assets/{InsightsPaywall-C0dTxHKs.js → InsightsPaywall-DkCpVq9K.js} +1 -1
  29. package/dist/assets/{InsightsSummary-C6Y-SKzK.js → InsightsSummary-te2NcZ9J.js} +1 -1
  30. package/dist/assets/{InsightsTableWorkflows-BbVGyCBO.js → InsightsTableWorkflows-BWxBUXJC.js} +4 -5
  31. package/dist/assets/{Logo-CsvXL0P7.js → Logo-BxRx1Sn7.js} +1 -1
  32. package/dist/assets/{LogsPanel-CN42eNUt.js → LogsPanel-BMolfuZj.js} +6 -5
  33. package/dist/assets/{MainHeader-CoJhLOFm.js → MainHeader-04Z61-C3.js} +8 -8
  34. package/dist/assets/{MainSidebar-R8rwZ_Pn.js → MainSidebar-w66HTCDw.js} +3 -5
  35. package/dist/assets/NodeCreation-Q_eKy6g5.js +172 -0
  36. package/dist/assets/{NodeCreator-B4qIG19F.js → NodeCreator-CrAhvxUw.js} +1 -2
  37. package/dist/assets/{NodeDetailsView-DAAY8u0j.js → NodeDetailsView-B8VNYLDG.js} +16 -30
  38. package/dist/assets/{NodeDetailsView-CaTI-1QQ.css → NodeDetailsView-Cam4nPwL.css} +0 -3
  39. package/dist/assets/{NodeDetailsViewV2-rO5xAOLt.js → NodeDetailsViewV2-DnGtw1tW.js} +18 -31
  40. package/dist/assets/{NodeDetailsViewV2-LLVofUjw.css → NodeDetailsViewV2-LzYZcnv5.css} +0 -124
  41. package/dist/assets/{NodeView-B2097MY0.css → NodeView-BMiOpmk4.css} +184 -10
  42. package/dist/assets/{NodeView-COL17PiI.js → NodeView-C4gvxUVX.js} +137 -69
  43. package/dist/assets/{ProjectHeader-eW3SFgfy.js → ProjectHeader-Dj1zlff0.js} +46 -6
  44. package/dist/assets/{ProjectSettings-C2AHG6jb.js → ProjectSettings-DGLVLIdf.js} +3 -3
  45. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-qgsXLVHp.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-BMifVbDm.js} +1 -1
  46. package/dist/assets/{ResourcesListLayout-uBbUHbxU.css → ResourcesListLayout-6eIqe4Ld.css} +8 -8
  47. package/dist/assets/{ResourcesListLayout-CRbZPcXi.js → ResourcesListLayout-BBjWNm-W.js} +56 -30
  48. package/dist/assets/{RunDataJson-BsgYpb7j.js → RunDataJson-B9KyYBpg.js} +3 -3
  49. package/dist/assets/{RunDataJsonActions-BwVIOF0o.js → RunDataJsonActions-Duqt5QgE.js} +1 -1
  50. package/dist/assets/{RunDataParsedAiContent-uldVOLgS.js → RunDataParsedAiContent-CyGJ7cWY.js} +2 -2
  51. package/dist/assets/{RunDataSearch-B_OkRO9N.js → RunDataSearch-CnT_s2fI.js} +3 -2
  52. package/dist/assets/{RunDataTable-BKnUlzVX.js → RunDataTable-DS--mKOx.js} +1 -1
  53. package/dist/assets/{SamlOnboarding-uGmw-L7G.js → SamlOnboarding-CXobvVPO.js} +3 -3
  54. package/dist/assets/{SettingsApiView-DIRnZSMH.js → SettingsApiView-d2EPD0v0.js} +1 -1
  55. package/dist/assets/{SettingsCommunityNodesView-BF3-gFEu.js → SettingsCommunityNodesView-D8Hu1ibZ.js} +4 -4
  56. package/dist/assets/{SettingsExternalSecrets-BceN7BZL.js → SettingsExternalSecrets-CaEiVMrT.js} +1 -1
  57. package/dist/assets/{SettingsLdapView-ErdD4koz.js → SettingsLdapView-BG-JZnoc.js} +1 -1
  58. package/dist/assets/{SettingsLogStreamingView-BAEs0SFs.js → SettingsLogStreamingView-CSVfO_Zn.js} +1 -1
  59. package/dist/assets/{SettingsPersonalView-C-Jmfurq.js → SettingsPersonalView-CtYxuOr8.js} +1 -1
  60. package/dist/assets/{SettingsSourceControl-D0b0Y8tK.js → SettingsSourceControl-CMY9og8f.js} +1 -1
  61. package/dist/assets/{SettingsSso-DHUWvjXP.js → SettingsSso-Cb9eLBFc.js} +1 -1
  62. package/dist/assets/{SettingsUsageAndPlan-CD14-RrC.js → SettingsUsageAndPlan-Ctu7EqQt.js} +1 -1
  63. package/dist/assets/{SettingsUsersView-DjO-Sh89.js → SettingsUsersView-CZ1NXmdI.js} +1 -2
  64. package/dist/assets/{SettingsView-CHxTZS8i.js → SettingsView--K0sRU6u.js} +1 -1
  65. package/dist/assets/{SetupView-C1Ln2UdV.js → SetupView-B2miL_Xi.js} +3 -3
  66. package/dist/assets/{SetupWorkflowCredentialsButton-BPymVgJe.js → SetupWorkflowCredentialsButton-BNtMeQ7B.js} +1 -1
  67. package/dist/assets/{SetupWorkflowFromTemplateView-wFX8bZAJ.js → SetupWorkflowFromTemplateView-CTKyYiT2.js} +3 -3
  68. package/dist/assets/{SigninView-C0kbXdPM.js → SigninView-Cwal9uDr.js} +3 -3
  69. package/dist/assets/{SignoutView-DAFKgMcr.js → SignoutView-HYdgGBTv.js} +1 -1
  70. package/dist/assets/{SignupView-PPupzKGC.js → SignupView-C-cruKwR.js} +3 -3
  71. package/dist/assets/{TableBase-gdXXFVAP.js → TableBase-BrU7ycgG.js} +1 -1
  72. package/dist/assets/{Tags-F2rWzlFg.js → Tags-B52OEMR8.js} +1 -1
  73. package/dist/assets/{TemplateDetails-Cv5PGkmu.js → TemplateDetails-CJHZRvKM.js} +2 -2
  74. package/dist/assets/{TemplateList-18ftmcJJ.js → TemplateList-BNPtBAlT.js} +1 -1
  75. package/dist/assets/{TemplatesCollectionView-DMVhS77J.js → TemplatesCollectionView-B3x_Q5aa.js} +6 -6
  76. package/dist/assets/{TemplatesSearchView-CA5t-yFo.js → TemplatesSearchView-Bu485VBl.js} +3 -3
  77. package/dist/assets/{TemplatesView-C0Eg9WLM.js → TemplatesView-D6dJhGNK.js} +1 -1
  78. package/dist/assets/{TemplatesWorkflowView-CGBohTkh.js → TemplatesWorkflowView-Bpnh-uFe.js} +6 -6
  79. package/dist/assets/{TriggerPanel-e3n6XSn6.js → TriggerPanel-Bh-GmBcj.js} +5 -5
  80. package/dist/assets/{VariablesView-xpXMqeMR.js → VariablesView-DHHlaB3P.js} +5 -5
  81. package/dist/assets/{VueMarkdown-DB88HNOs.js → VueMarkdown-CPLXg7f3.js} +1 -1
  82. package/dist/assets/{WorkerView-CkGaZ7n4.js → WorkerView-BUNXsftd.js} +6 -6
  83. package/dist/assets/{WorkflowActivator-D5g0kUNF.js → WorkflowActivator-CxzTs9kB.js} +3 -3
  84. package/dist/assets/{WorkflowExecutionsInfoAccordion-Cgs62HlG.js → WorkflowExecutionsInfoAccordion-DX3IfR5Z.js} +2 -2
  85. package/dist/assets/{WorkflowExecutionsLandingPage-Dg7W4mV0.js → WorkflowExecutionsLandingPage-DOdAJCQJ.js} +3 -3
  86. package/dist/assets/{WorkflowExecutionsPreview-C4vsWZbx.js → WorkflowExecutionsPreview-BgTqxHb-.js} +4 -4
  87. package/dist/assets/{WorkflowExecutionsView-lcK1FkoU.js → WorkflowExecutionsView-EYRMn-We.js} +6 -6
  88. package/dist/assets/{WorkflowHistory-xHaZRT-3.js → WorkflowHistory-hyAEcU5h.js} +2 -2
  89. package/dist/assets/{WorkflowOnboardingView-DBkTMmpE.js → WorkflowOnboardingView-SyPwYcj1.js} +1 -1
  90. package/dist/assets/{WorkflowPreview-BwzoCwMQ.js → WorkflowPreview-DtiGZ8jt.js} +1 -1
  91. package/dist/assets/{WorkflowsView-uWjceF97.js → WorkflowsView-B_kHCXhq.js} +125 -16
  92. package/dist/assets/{canvas-DJZKQR0M.js → canvas-CXoLZ47B.js} +1 -1
  93. package/dist/assets/{chartjs.utils-B_AakY6C.js → chartjs.utils-DvLXBjgm.js} +2 -2
  94. package/dist/assets/{en-D7cJPQEa.js → en-ORjqW56z.js} +41 -7
  95. package/dist/assets/{global-link-actions-CkD1SfM8.js → global-link-actions-DJzO0XY8.js} +1 -1
  96. package/dist/assets/{index-0vi2zwei.js → index-CgvvLCqI.js} +13217 -8401
  97. package/dist/assets/{index-wfdzkZ5N.js → index-Ci6ERb78.js} +1 -1
  98. package/dist/assets/{index-BnmK7yJz.css → index-DegUPemN.css} +1058 -482
  99. package/dist/assets/{pickBy-BVWE53bB.js → pickBy-C3y4kDIS.js} +1 -1
  100. package/dist/assets/readyToRunWorkflows.store-BcJDo6QO.js +2436 -0
  101. package/dist/assets/{templateActions-DzOhSXT7.js → templateActions-UuwYO8mn.js} +1 -1
  102. package/dist/assets/{useBeforeUnload-D8cfIuzK.js → useBeforeUnload-DtWRHUnb.js} +1 -1
  103. package/dist/assets/{useExecutionDebugging-DSzk_VRK.js → useExecutionDebugging-lNwnzl0B.js} +1 -1
  104. package/dist/assets/{useImportCurlCommand-C1X3Ke_i.js → useImportCurlCommand-Y4wyh6JG.js} +1 -1
  105. package/dist/assets/useProjectPages-xsj6GD9u.js +17 -0
  106. package/dist/assets/{usePushConnection-DoC4OSDa.js → usePushConnection-Odqh2Hhm.js} +10 -3
  107. package/dist/assets/{useWorkflowActivate-BwfqoMi7.js → useWorkflowActivate-DFgPcDUt.js} +1 -1
  108. package/dist/index.html +2 -2
  109. package/package.json +1 -1
  110. package/vite.config.mts +2 -0
  111. package/dist/assets/CollectionParameter-BPA801P5.js +0 -4
  112. package/dist/assets/N8nDataTableServer-BHILYG__.js +0 -3203
  113. package/dist/assets/NodeCreation-gPsMJZWq.js +0 -440
  114. package/dist/assets/aiTemplatesStarterCollection.store-BsCe0bSk.js +0 -795
  115. package/dist/assets/useProjectPages-DYrfMJmY.js +0 -21
@@ -1,440 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/NodeCreator-B4qIG19F.js","assets/index-0vi2zwei.js","assets/index-BnmK7yJz.css","assets/NodeCreator-Cb92WDsx.css"])))=>i.map(i=>d[i]);
2
- import { c_ as useNodeCreatorStore, bK as useNodeTypesStore, x as computed, c as useI18n, a5 as useWorkflowsStore, gK as MANUAL_TRIGGER_NODE_TYPE, gL as CHAIN_LLM_LANGCHAIN_NODE_TYPE, bs as NodeConnectionTypes, bB as CHAT_TRIGGER_NODE_TYPE, gM as OPEN_AI_NODE_MESSAGE_ASSISTANT_TYPE, gN as OPEN_AI_NODE_TYPE, gO as SPLIT_IN_BATCHES_NODE_TYPE, gP as NO_OP_NODE_TYPE, gQ as WEBHOOK_NODE_TYPE, gR as SCHEDULE_TRIGGER_NODE_TYPE, gS as transformNodeType, bg as useExternalHooks, ae as useCanvasStore, gT as AI_CATEGORY_LANGUAGE_MODELS, gU as QA_CHAIN_NODE_TYPE, gV as AGENT_NODE_TYPE, gW as BASIC_CHAIN_NODE_TYPE, gX as OPEN_AI_ASSISTANT_NODE_TYPE, aT as STICKY_NODE_TYPE, gY as sortNodeCreateElements, gZ as TRIGGER_NODE_CREATOR_VIEW, dj as NODE_CREATOR_OPEN_SOURCES, d as defineComponent, T as useUIStore, cx as useFocusPanelStore, f1 as useAssistantStore, h as createElementBlock, g as openBlock, f as createCommentVNode, e as createBlock, n as normalizeClass, i as createVNode, w as withCtx, a0 as _sfc_main$1, l as unref, cb as KeyboardShortcutTooltip, q as N8nButton, j as createBaseVNode, g_ as _sfc_main$2, k as createTextVNode, t as toDisplayString, $ as N8nTooltip, dh as defineAsyncComponent, dg as Suspense, F as Fragment, aL as __vitePreload, g$ as getMidCanvasPosition, aA as useTelemetry, h0 as DEFAULT_STICKY_WIDTH, h1 as DEFAULT_STICKY_HEIGHT, _ as _export_sfc } from "./index-0vi2zwei.js";
3
- const useActions = () => {
4
- const nodeCreatorStore = useNodeCreatorStore();
5
- const nodeTypesStore = useNodeTypesStore();
6
- const i18n = useI18n();
7
- const singleNodeOpenSources = [
8
- NODE_CREATOR_OPEN_SOURCES.PLUS_ENDPOINT,
9
- NODE_CREATOR_OPEN_SOURCES.NODE_CONNECTION_ACTION,
10
- NODE_CREATOR_OPEN_SOURCES.NODE_CONNECTION_DROP
11
- ];
12
- const actionsCategoryLocales = computed(() => {
13
- return {
14
- actions: i18n.baseText("nodeCreator.actionsCategory.actions") ?? "",
15
- triggers: i18n.baseText("nodeCreator.actionsCategory.triggers") ?? ""
16
- };
17
- });
18
- function getPlaceholderTriggerActions(subcategory) {
19
- const nodes = [WEBHOOK_NODE_TYPE, SCHEDULE_TRIGGER_NODE_TYPE];
20
- const matchedNodeTypes = nodeCreatorStore.mergedNodes.filter((node) => nodes.some((n) => n === node.name)).map((node) => {
21
- const transformed = transformNodeType(node, subcategory, "action");
22
- if (transformed.type === "action") {
23
- const nameBase = node.name.replace("n8n-nodes-base.", "");
24
- const localeKey = `nodeCreator.actionsPlaceholderNode.${nameBase}`;
25
- const overwriteLocale = i18n.baseText(localeKey);
26
- if (overwriteLocale !== localeKey) {
27
- transformed.properties.displayName = overwriteLocale;
28
- }
29
- }
30
- return transformed;
31
- });
32
- return matchedNodeTypes;
33
- }
34
- function filterActionsCategory(items, category) {
35
- return items.filter(
36
- (item) => item.type === "action" && item.properties.codex.categories.includes(category)
37
- );
38
- }
39
- function injectActionsLabels(items) {
40
- const extendedActions = sortNodeCreateElements([...items]);
41
- const labelsSet = /* @__PURE__ */ new Set();
42
- for (const action of extendedActions) {
43
- if (action.type !== "action") continue;
44
- const label = action.properties?.codex?.label;
45
- labelsSet.add(label);
46
- }
47
- if (labelsSet.size <= 1) return extendedActions;
48
- const firstIndexMap = /* @__PURE__ */ new Map();
49
- for (let i = 0; i < extendedActions.length; i++) {
50
- const action = extendedActions[i];
51
- if (action.type !== "action") continue;
52
- const label = action.properties?.codex?.label;
53
- if (!firstIndexMap.has(label)) {
54
- firstIndexMap.set(label, i);
55
- }
56
- }
57
- let insertedLabels = 0;
58
- for (const label of labelsSet) {
59
- const newLabel = {
60
- uuid: label,
61
- type: "label",
62
- key: label,
63
- subcategory: extendedActions[0].key,
64
- properties: {
65
- key: label
66
- }
67
- };
68
- const insertIndex = firstIndexMap.get(label);
69
- if (insertIndex !== void 0) {
70
- extendedActions.splice(insertIndex + insertedLabels, 0, newLabel);
71
- insertedLabels++;
72
- }
73
- }
74
- return extendedActions;
75
- }
76
- function parseCategoryActions(actions, category, withLabels = true) {
77
- const filteredActions = filterActionsCategory(actions, category);
78
- if (withLabels) return injectActionsLabels(filteredActions);
79
- return filteredActions;
80
- }
81
- function getActionData(actionItem) {
82
- const displayOptions = actionItem.displayOptions;
83
- const displayConditions = Object.keys(displayOptions?.show ?? {}).reduce(
84
- (acc, showCondition) => {
85
- acc[showCondition] = displayOptions?.show?.[showCondition]?.[0];
86
- return acc;
87
- },
88
- {}
89
- );
90
- return {
91
- name: actionItem.displayName,
92
- key: actionItem.name,
93
- value: { ...actionItem.values, ...displayConditions }
94
- };
95
- }
96
- function actionDataToNodeTypeSelectedPayload(actionData) {
97
- const result = {
98
- type: actionData.key
99
- };
100
- if (typeof actionData.value.resource === "string" || typeof actionData.value.operation === "string") {
101
- result.parameters = {};
102
- if (typeof actionData.value.resource === "string") {
103
- result.parameters.resource = actionData.value.resource;
104
- }
105
- if (typeof actionData.value.operation === "string") {
106
- result.parameters.operation = actionData.value.operation;
107
- }
108
- }
109
- return result;
110
- }
111
- function nodeCreateElementToNodeTypeSelectedPayload(actionData) {
112
- const result = {
113
- type: actionData.key
114
- };
115
- if (typeof actionData.resource === "string" || typeof actionData.operation === "string") {
116
- result.parameters = {};
117
- if (typeof actionData.resource === "string") {
118
- result.parameters.resource = actionData.resource;
119
- }
120
- if (typeof actionData.operation === "string") {
121
- result.parameters.operation = actionData.operation;
122
- }
123
- }
124
- return result;
125
- }
126
- function shouldConnectWithExistingTrigger(addedNodes) {
127
- if (addedNodes.length === 2) {
128
- const isTriggerNode = useNodeTypesStore().isTriggerNode(addedNodes[0].type);
129
- return isTriggerNode;
130
- }
131
- return false;
132
- }
133
- function shouldPrependManualTrigger(addedNodes) {
134
- const { selectedView, openSource } = useNodeCreatorStore();
135
- const { workflowTriggerNodes } = useWorkflowsStore();
136
- const hasTrigger = addedNodes.some((node) => useNodeTypesStore().isTriggerNode(node.type));
137
- const workflowContainsTrigger = workflowTriggerNodes.length > 0;
138
- const isTriggerPanel = selectedView === TRIGGER_NODE_CREATOR_VIEW;
139
- const onlyStickyNodes = addedNodes.every((node) => node.type === STICKY_NODE_TYPE);
140
- const isSingleNodeOpenSource = singleNodeOpenSources.includes(openSource);
141
- return !isSingleNodeOpenSource && !hasTrigger && !workflowContainsTrigger && isTriggerPanel && !onlyStickyNodes;
142
- }
143
- function shouldPrependChatTrigger(addedNodes) {
144
- const COMPATIBLE_CHAT_NODES = [
145
- QA_CHAIN_NODE_TYPE,
146
- AGENT_NODE_TYPE,
147
- BASIC_CHAIN_NODE_TYPE,
148
- OPEN_AI_ASSISTANT_NODE_TYPE,
149
- OPEN_AI_NODE_MESSAGE_ASSISTANT_TYPE
150
- ];
151
- const isCompatibleNode = addedNodes.some((node) => COMPATIBLE_CHAT_NODES.includes(node.type));
152
- if (!isCompatibleNode) return false;
153
- const { allNodes } = useWorkflowsStore();
154
- return allNodes.filter((x) => x.type !== MANUAL_TRIGGER_NODE_TYPE).length === 0;
155
- }
156
- function shouldPrependLLMChain(addedNodes) {
157
- const canvasHasAINodes = useCanvasStore().aiNodes.length > 0;
158
- if (canvasHasAINodes) return false;
159
- return addedNodes.some((node) => {
160
- const nodeType = nodeTypesStore.getNodeType(node.type);
161
- return Object.keys(nodeType?.codex?.subcategories ?? {}).includes(
162
- AI_CATEGORY_LANGUAGE_MODELS
163
- );
164
- });
165
- }
166
- function getAddedNodesAndConnections(addedNodes) {
167
- if (addedNodes.length === 0) {
168
- return { nodes: [], connections: [] };
169
- }
170
- const nodes = [];
171
- const connections = [];
172
- const nodeToAutoOpen = addedNodes.find((node) => node.type !== MANUAL_TRIGGER_NODE_TYPE);
173
- if (nodeToAutoOpen) {
174
- nodeToAutoOpen.openDetail = true;
175
- }
176
- if (shouldPrependLLMChain(addedNodes) || shouldPrependChatTrigger(addedNodes)) {
177
- if (shouldPrependLLMChain(addedNodes)) {
178
- addedNodes.unshift({ type: CHAIN_LLM_LANGCHAIN_NODE_TYPE, isAutoAdd: true });
179
- connections.push({
180
- from: { nodeIndex: 2, type: NodeConnectionTypes.AiLanguageModel },
181
- to: { nodeIndex: 1 }
182
- });
183
- }
184
- addedNodes.unshift({ type: CHAT_TRIGGER_NODE_TYPE, isAutoAdd: true });
185
- connections.push({
186
- from: { nodeIndex: 0 },
187
- to: { nodeIndex: 1 }
188
- });
189
- } else if (shouldPrependManualTrigger(addedNodes)) {
190
- addedNodes.unshift({ type: MANUAL_TRIGGER_NODE_TYPE, isAutoAdd: true });
191
- connections.push({
192
- from: { nodeIndex: 0 },
193
- to: { nodeIndex: 1 }
194
- });
195
- } else if (shouldConnectWithExistingTrigger(addedNodes)) {
196
- connections.push({
197
- from: { nodeIndex: 0 },
198
- to: { nodeIndex: 1 }
199
- });
200
- }
201
- addedNodes.forEach((node, index) => {
202
- if (node.type === OPEN_AI_NODE_MESSAGE_ASSISTANT_TYPE) {
203
- node.type = OPEN_AI_NODE_TYPE;
204
- }
205
- nodes.push(node);
206
- switch (node.type) {
207
- case SPLIT_IN_BATCHES_NODE_TYPE: {
208
- const splitInBatchesIndex = index;
209
- const noOpIndex = splitInBatchesIndex + 1;
210
- nodes.push({
211
- type: NO_OP_NODE_TYPE,
212
- isAutoAdd: true,
213
- name: i18n.baseText("nodeView.replaceMe")
214
- });
215
- connections.push(
216
- {
217
- from: { nodeIndex: splitInBatchesIndex, outputIndex: 1 },
218
- to: { nodeIndex: noOpIndex }
219
- },
220
- {
221
- from: { nodeIndex: noOpIndex },
222
- to: { nodeIndex: splitInBatchesIndex }
223
- }
224
- );
225
- break;
226
- }
227
- }
228
- });
229
- return { nodes, connections };
230
- }
231
- function setAddedNodeActionParameters(action, telemetry, rootView = "") {
232
- const { $onAction: onWorkflowStoreAction } = useWorkflowsStore();
233
- const storeWatcher = onWorkflowStoreAction(
234
- ({ name, after, store: { setLastNodeParameters }, args }) => {
235
- if (name !== "addNode" || args[0].type !== action.key) return;
236
- after(() => {
237
- setLastNodeParameters(action);
238
- if (telemetry) trackActionSelected(action, telemetry, rootView);
239
- storeWatcher();
240
- });
241
- }
242
- );
243
- return storeWatcher;
244
- }
245
- function trackActionSelected(action, _telemetry, rootView) {
246
- const payload = {
247
- node_type: action.key,
248
- action: action.name,
249
- source_mode: rootView.toLowerCase(),
250
- resource: action.value.resource || ""
251
- };
252
- void useExternalHooks().run("nodeCreateList.addAction", payload);
253
- useNodeCreatorStore().onAddActions(payload);
254
- }
255
- return {
256
- actionsCategoryLocales,
257
- actionDataToNodeTypeSelectedPayload,
258
- nodeCreateElementToNodeTypeSelectedPayload,
259
- getPlaceholderTriggerActions,
260
- parseCategoryActions,
261
- getAddedNodesAndConnections,
262
- getActionData,
263
- setAddedNodeActionParameters
264
- };
265
- };
266
- const _sfc_main = /* @__PURE__ */ defineComponent({
267
- __name: "NodeCreation",
268
- props: {
269
- nodeViewScale: {},
270
- createNodeActive: { type: Boolean, default: false }
271
- },
272
- emits: ["addNodes", "toggleNodeCreator"],
273
- setup(__props, { emit: __emit }) {
274
- const LazyNodeCreator = defineAsyncComponent(
275
- async () => await __vitePreload(() => import("./NodeCreator-B4qIG19F.js"), true ? __vite__mapDeps([0,1,2,3]) : void 0)
276
- );
277
- const props = __props;
278
- const emit = __emit;
279
- const uiStore = useUIStore();
280
- const focusPanelStore = useFocusPanelStore();
281
- const i18n = useI18n();
282
- const telemetry = useTelemetry();
283
- const assistantStore = useAssistantStore();
284
- const { getAddedNodesAndConnections } = useActions();
285
- function openNodeCreator() {
286
- emit("toggleNodeCreator", {
287
- source: NODE_CREATOR_OPEN_SOURCES.ADD_NODE_BUTTON,
288
- createNodeActive: true
289
- });
290
- }
291
- function addStickyNote() {
292
- if (document.activeElement) {
293
- document.activeElement.blur();
294
- }
295
- const offset = [...uiStore.nodeViewOffsetPosition];
296
- const position = getMidCanvasPosition(props.nodeViewScale, offset);
297
- position[0] -= DEFAULT_STICKY_WIDTH / 2;
298
- position[1] -= DEFAULT_STICKY_HEIGHT / 2;
299
- emit("addNodes", getAddedNodesAndConnections([{ type: STICKY_NODE_TYPE, position }]));
300
- }
301
- function closeNodeCreator(hasAddedNodes = false) {
302
- if (props.createNodeActive) {
303
- emit("toggleNodeCreator", { createNodeActive: false, hasAddedNodes });
304
- }
305
- }
306
- function nodeTypeSelected(value) {
307
- emit("addNodes", getAddedNodesAndConnections(value));
308
- closeNodeCreator(true);
309
- }
310
- function toggleFocusPanel() {
311
- focusPanelStore.toggleFocusPanel();
312
- telemetry.track(`User ${focusPanelStore.focusPanelActive ? "opened" : "closed"} focus panel`, {
313
- source: "canvasButton",
314
- parameters: focusPanelStore.focusedNodeParametersInTelemetryFormat
315
- });
316
- }
317
- function onAskAssistantButtonClick() {
318
- if (!assistantStore.chatWindowOpen)
319
- assistantStore.trackUserOpenedAssistant({
320
- source: "canvas",
321
- task: "placeholder",
322
- has_existing_session: !assistantStore.isSessionEnded
323
- });
324
- assistantStore.toggleChatOpen();
325
- }
326
- return (_ctx, _cache) => {
327
- const _component_n8n_icon_button = _sfc_main$1;
328
- const _component_n8n_button = N8nButton;
329
- const _component_n8n_tooltip = N8nTooltip;
330
- return openBlock(), createElementBlock(Fragment, null, [
331
- !_ctx.createNodeActive ? (openBlock(), createElementBlock("div", {
332
- key: 0,
333
- class: normalizeClass(_ctx.$style.nodeButtonsWrapper)
334
- }, [
335
- createVNode(KeyboardShortcutTooltip, {
336
- label: unref(i18n).baseText("nodeView.openNodesPanel"),
337
- shortcut: { keys: ["Tab"] },
338
- placement: "left"
339
- }, {
340
- default: withCtx(() => [
341
- createVNode(_component_n8n_icon_button, {
342
- size: "large",
343
- icon: "plus",
344
- type: "tertiary",
345
- "data-test-id": "node-creator-plus-button",
346
- onClick: openNodeCreator
347
- })
348
- ]),
349
- _: 1
350
- }, 8, ["label"]),
351
- createVNode(KeyboardShortcutTooltip, {
352
- label: unref(i18n).baseText("nodeView.addStickyHint"),
353
- shortcut: { keys: ["s"], shiftKey: true },
354
- placement: "left"
355
- }, {
356
- default: withCtx(() => [
357
- createVNode(_component_n8n_icon_button, {
358
- size: "large",
359
- type: "tertiary",
360
- icon: "sticky-note",
361
- "data-test-id": "add-sticky-button",
362
- onClick: addStickyNote
363
- })
364
- ]),
365
- _: 1
366
- }, 8, ["label"]),
367
- createVNode(KeyboardShortcutTooltip, {
368
- label: unref(i18n).baseText("nodeView.openFocusPanel"),
369
- shortcut: { keys: ["f"], shiftKey: true },
370
- placement: "left"
371
- }, {
372
- default: withCtx(() => [
373
- createVNode(_component_n8n_icon_button, {
374
- type: "tertiary",
375
- size: "large",
376
- icon: "panel-right",
377
- onClick: toggleFocusPanel
378
- })
379
- ]),
380
- _: 1
381
- }, 8, ["label"]),
382
- unref(assistantStore).canShowAssistantButtonsOnCanvas ? (openBlock(), createBlock(_component_n8n_tooltip, {
383
- key: 0,
384
- placement: "left"
385
- }, {
386
- content: withCtx(() => [
387
- createTextVNode(toDisplayString(unref(i18n).baseText("aiAssistant.tooltip")), 1)
388
- ]),
389
- default: withCtx(() => [
390
- createVNode(_component_n8n_button, {
391
- type: "tertiary",
392
- size: "large",
393
- square: "",
394
- class: normalizeClass(_ctx.$style.icon),
395
- "data-test-id": "ask-assistant-canvas-action-button",
396
- onClick: onAskAssistantButtonClick
397
- }, {
398
- default: withCtx(() => [
399
- createBaseVNode("div", null, [
400
- createVNode(_sfc_main$2, { size: "large" })
401
- ])
402
- ]),
403
- _: 1
404
- }, 8, ["class"])
405
- ]),
406
- _: 1
407
- })) : createCommentVNode("", true)
408
- ], 2)) : createCommentVNode("", true),
409
- (openBlock(), createBlock(Suspense, null, {
410
- default: withCtx(() => [
411
- createVNode(unref(LazyNodeCreator), {
412
- active: _ctx.createNodeActive,
413
- onNodeTypeSelected: nodeTypeSelected,
414
- onCloseNodeCreator: closeNodeCreator
415
- }, null, 8, ["active"])
416
- ]),
417
- _: 1
418
- }))
419
- ], 64);
420
- };
421
- }
422
- });
423
- const nodeButtonsWrapper = "_nodeButtonsWrapper_1lpva_123";
424
- const icon = "_icon_1lpva_134";
425
- const style0 = {
426
- nodeButtonsWrapper,
427
- icon
428
- };
429
- const cssModules = {
430
- "$style": style0
431
- };
432
- const NodeCreation = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules]]);
433
- const NodeCreation$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
434
- __proto__: null,
435
- default: NodeCreation
436
- }, Symbol.toStringTag, { value: "Module" }));
437
- export {
438
- NodeCreation$1 as N,
439
- useActions as u
440
- };