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.
- package/dist/assets/{AnimatedSpinner-DN2jXYlg.js → AnimatedSpinner-BT-tHTIr.js} +1 -1
- 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
- package/dist/assets/{AuthView-CDj6SylT.js → AuthView-qxCpg9Vt.js} +2 -2
- package/dist/assets/{ChangePasswordView-B5GRVadN.js → ChangePasswordView-YpoX0OgW.js} +3 -3
- package/dist/assets/CollectionParameter-B7ioj7nV.js +4 -0
- 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
- package/dist/assets/{CredentialsView-LniKS1gL.js → CredentialsView-XfBa-FgD.js} +8 -8
- package/dist/assets/DataStoreView-D5shCvXR.js +344 -0
- package/dist/assets/DataStoreView-bZrewhaR.css +159 -0
- package/dist/assets/{DemoFooter-BlcOl9Ia.js → DemoFooter-GL7a3c8m.js} +6 -6
- 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
- package/dist/assets/{EntityNotFound-D-i0iOEh.js → EntityNotFound-BSClXGSU.js} +1 -1
- package/dist/assets/{EntityUnAuthorised-CtvzhcxM.js → EntityUnAuthorised-rdODRu8_.js} +1 -1
- package/dist/assets/{ErrorView-DqayUzyN.js → ErrorView-DDtX9a9K.js} +1 -1
- package/dist/assets/{EvaluationsRootView-u-tzY3TN.js → EvaluationsRootView-NcI-bjuh.js} +1 -1
- package/dist/assets/{EvaluationsView-Cv6F74cp.js → EvaluationsView-P9DGMaUt.js} +3 -3
- 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
- package/dist/assets/{ExecutionsView-BDCP9XVW.js → ExecutionsView-NkCHKd3U.js} +8 -8
- package/dist/assets/{FixedCollectionParameter-dYhz2Ism.js → FixedCollectionParameter-0-xS_bRE.js} +1 -1
- package/dist/assets/{ForgotMyPasswordView-C69Wn008.js → ForgotMyPasswordView-DqADZ9FM.js} +3 -3
- package/dist/assets/{InfoAccordion-CH0m5p8-.js → InfoAccordion-CR3AoL8Q.js} +1 -1
- package/dist/assets/{InsightsChartAverageRuntime-DAN-ukDS.js → InsightsChartAverageRuntime-C9xMoV66.js} +4 -4
- package/dist/assets/{InsightsChartFailed-DQmPYaEe.js → InsightsChartFailed-BXTLYxeQ.js} +4 -4
- package/dist/assets/{InsightsChartFailureRate-DO7uhap1.js → InsightsChartFailureRate-B0i0ej03.js} +4 -4
- package/dist/assets/{InsightsChartTimeSaved-CQA_4401.js → InsightsChartTimeSaved-DvotshIJ.js} +4 -4
- package/dist/assets/{InsightsChartTotal--CVbOXo5.js → InsightsChartTotal-BA2XNYoP.js} +4 -4
- package/dist/assets/{InsightsDashboard-CrBkWNMD.js → InsightsDashboard-CD18Zlv9.js} +10 -10
- package/dist/assets/{InsightsPaywall-C0dTxHKs.js → InsightsPaywall-DkCpVq9K.js} +1 -1
- package/dist/assets/{InsightsSummary-C6Y-SKzK.js → InsightsSummary-te2NcZ9J.js} +1 -1
- package/dist/assets/{InsightsTableWorkflows-BbVGyCBO.js → InsightsTableWorkflows-BWxBUXJC.js} +4 -5
- package/dist/assets/{Logo-CsvXL0P7.js → Logo-BxRx1Sn7.js} +1 -1
- package/dist/assets/{LogsPanel-CN42eNUt.js → LogsPanel-BMolfuZj.js} +6 -5
- package/dist/assets/{MainHeader-CoJhLOFm.js → MainHeader-04Z61-C3.js} +8 -8
- package/dist/assets/{MainSidebar-R8rwZ_Pn.js → MainSidebar-w66HTCDw.js} +3 -5
- package/dist/assets/NodeCreation-Q_eKy6g5.js +172 -0
- package/dist/assets/{NodeCreator-B4qIG19F.js → NodeCreator-CrAhvxUw.js} +1 -2
- package/dist/assets/{NodeDetailsView-DAAY8u0j.js → NodeDetailsView-B8VNYLDG.js} +16 -30
- package/dist/assets/{NodeDetailsView-CaTI-1QQ.css → NodeDetailsView-Cam4nPwL.css} +0 -3
- package/dist/assets/{NodeDetailsViewV2-rO5xAOLt.js → NodeDetailsViewV2-DnGtw1tW.js} +18 -31
- package/dist/assets/{NodeDetailsViewV2-LLVofUjw.css → NodeDetailsViewV2-LzYZcnv5.css} +0 -124
- package/dist/assets/{NodeView-B2097MY0.css → NodeView-BMiOpmk4.css} +184 -10
- package/dist/assets/{NodeView-COL17PiI.js → NodeView-C4gvxUVX.js} +137 -69
- package/dist/assets/{ProjectHeader-eW3SFgfy.js → ProjectHeader-Dj1zlff0.js} +46 -6
- package/dist/assets/{ProjectSettings-C2AHG6jb.js → ProjectSettings-DGLVLIdf.js} +3 -3
- 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
- package/dist/assets/{ResourcesListLayout-uBbUHbxU.css → ResourcesListLayout-6eIqe4Ld.css} +8 -8
- package/dist/assets/{ResourcesListLayout-CRbZPcXi.js → ResourcesListLayout-BBjWNm-W.js} +56 -30
- package/dist/assets/{RunDataJson-BsgYpb7j.js → RunDataJson-B9KyYBpg.js} +3 -3
- package/dist/assets/{RunDataJsonActions-BwVIOF0o.js → RunDataJsonActions-Duqt5QgE.js} +1 -1
- package/dist/assets/{RunDataParsedAiContent-uldVOLgS.js → RunDataParsedAiContent-CyGJ7cWY.js} +2 -2
- package/dist/assets/{RunDataSearch-B_OkRO9N.js → RunDataSearch-CnT_s2fI.js} +3 -2
- package/dist/assets/{RunDataTable-BKnUlzVX.js → RunDataTable-DS--mKOx.js} +1 -1
- package/dist/assets/{SamlOnboarding-uGmw-L7G.js → SamlOnboarding-CXobvVPO.js} +3 -3
- package/dist/assets/{SettingsApiView-DIRnZSMH.js → SettingsApiView-d2EPD0v0.js} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-BF3-gFEu.js → SettingsCommunityNodesView-D8Hu1ibZ.js} +4 -4
- package/dist/assets/{SettingsExternalSecrets-BceN7BZL.js → SettingsExternalSecrets-CaEiVMrT.js} +1 -1
- package/dist/assets/{SettingsLdapView-ErdD4koz.js → SettingsLdapView-BG-JZnoc.js} +1 -1
- package/dist/assets/{SettingsLogStreamingView-BAEs0SFs.js → SettingsLogStreamingView-CSVfO_Zn.js} +1 -1
- package/dist/assets/{SettingsPersonalView-C-Jmfurq.js → SettingsPersonalView-CtYxuOr8.js} +1 -1
- package/dist/assets/{SettingsSourceControl-D0b0Y8tK.js → SettingsSourceControl-CMY9og8f.js} +1 -1
- package/dist/assets/{SettingsSso-DHUWvjXP.js → SettingsSso-Cb9eLBFc.js} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-CD14-RrC.js → SettingsUsageAndPlan-Ctu7EqQt.js} +1 -1
- package/dist/assets/{SettingsUsersView-DjO-Sh89.js → SettingsUsersView-CZ1NXmdI.js} +1 -2
- package/dist/assets/{SettingsView-CHxTZS8i.js → SettingsView--K0sRU6u.js} +1 -1
- package/dist/assets/{SetupView-C1Ln2UdV.js → SetupView-B2miL_Xi.js} +3 -3
- package/dist/assets/{SetupWorkflowCredentialsButton-BPymVgJe.js → SetupWorkflowCredentialsButton-BNtMeQ7B.js} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-wFX8bZAJ.js → SetupWorkflowFromTemplateView-CTKyYiT2.js} +3 -3
- package/dist/assets/{SigninView-C0kbXdPM.js → SigninView-Cwal9uDr.js} +3 -3
- package/dist/assets/{SignoutView-DAFKgMcr.js → SignoutView-HYdgGBTv.js} +1 -1
- package/dist/assets/{SignupView-PPupzKGC.js → SignupView-C-cruKwR.js} +3 -3
- package/dist/assets/{TableBase-gdXXFVAP.js → TableBase-BrU7ycgG.js} +1 -1
- package/dist/assets/{Tags-F2rWzlFg.js → Tags-B52OEMR8.js} +1 -1
- package/dist/assets/{TemplateDetails-Cv5PGkmu.js → TemplateDetails-CJHZRvKM.js} +2 -2
- package/dist/assets/{TemplateList-18ftmcJJ.js → TemplateList-BNPtBAlT.js} +1 -1
- package/dist/assets/{TemplatesCollectionView-DMVhS77J.js → TemplatesCollectionView-B3x_Q5aa.js} +6 -6
- package/dist/assets/{TemplatesSearchView-CA5t-yFo.js → TemplatesSearchView-Bu485VBl.js} +3 -3
- package/dist/assets/{TemplatesView-C0Eg9WLM.js → TemplatesView-D6dJhGNK.js} +1 -1
- package/dist/assets/{TemplatesWorkflowView-CGBohTkh.js → TemplatesWorkflowView-Bpnh-uFe.js} +6 -6
- package/dist/assets/{TriggerPanel-e3n6XSn6.js → TriggerPanel-Bh-GmBcj.js} +5 -5
- package/dist/assets/{VariablesView-xpXMqeMR.js → VariablesView-DHHlaB3P.js} +5 -5
- package/dist/assets/{VueMarkdown-DB88HNOs.js → VueMarkdown-CPLXg7f3.js} +1 -1
- package/dist/assets/{WorkerView-CkGaZ7n4.js → WorkerView-BUNXsftd.js} +6 -6
- package/dist/assets/{WorkflowActivator-D5g0kUNF.js → WorkflowActivator-CxzTs9kB.js} +3 -3
- package/dist/assets/{WorkflowExecutionsInfoAccordion-Cgs62HlG.js → WorkflowExecutionsInfoAccordion-DX3IfR5Z.js} +2 -2
- package/dist/assets/{WorkflowExecutionsLandingPage-Dg7W4mV0.js → WorkflowExecutionsLandingPage-DOdAJCQJ.js} +3 -3
- package/dist/assets/{WorkflowExecutionsPreview-C4vsWZbx.js → WorkflowExecutionsPreview-BgTqxHb-.js} +4 -4
- package/dist/assets/{WorkflowExecutionsView-lcK1FkoU.js → WorkflowExecutionsView-EYRMn-We.js} +6 -6
- package/dist/assets/{WorkflowHistory-xHaZRT-3.js → WorkflowHistory-hyAEcU5h.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-DBkTMmpE.js → WorkflowOnboardingView-SyPwYcj1.js} +1 -1
- package/dist/assets/{WorkflowPreview-BwzoCwMQ.js → WorkflowPreview-DtiGZ8jt.js} +1 -1
- package/dist/assets/{WorkflowsView-uWjceF97.js → WorkflowsView-B_kHCXhq.js} +125 -16
- package/dist/assets/{canvas-DJZKQR0M.js → canvas-CXoLZ47B.js} +1 -1
- package/dist/assets/{chartjs.utils-B_AakY6C.js → chartjs.utils-DvLXBjgm.js} +2 -2
- package/dist/assets/{en-D7cJPQEa.js → en-ORjqW56z.js} +41 -7
- package/dist/assets/{global-link-actions-CkD1SfM8.js → global-link-actions-DJzO0XY8.js} +1 -1
- package/dist/assets/{index-0vi2zwei.js → index-CgvvLCqI.js} +13217 -8401
- package/dist/assets/{index-wfdzkZ5N.js → index-Ci6ERb78.js} +1 -1
- package/dist/assets/{index-BnmK7yJz.css → index-DegUPemN.css} +1058 -482
- package/dist/assets/{pickBy-BVWE53bB.js → pickBy-C3y4kDIS.js} +1 -1
- package/dist/assets/readyToRunWorkflows.store-BcJDo6QO.js +2436 -0
- package/dist/assets/{templateActions-DzOhSXT7.js → templateActions-UuwYO8mn.js} +1 -1
- package/dist/assets/{useBeforeUnload-D8cfIuzK.js → useBeforeUnload-DtWRHUnb.js} +1 -1
- package/dist/assets/{useExecutionDebugging-DSzk_VRK.js → useExecutionDebugging-lNwnzl0B.js} +1 -1
- package/dist/assets/{useImportCurlCommand-C1X3Ke_i.js → useImportCurlCommand-Y4wyh6JG.js} +1 -1
- package/dist/assets/useProjectPages-xsj6GD9u.js +17 -0
- package/dist/assets/{usePushConnection-DoC4OSDa.js → usePushConnection-Odqh2Hhm.js} +10 -3
- package/dist/assets/{useWorkflowActivate-BwfqoMi7.js → useWorkflowActivate-DFgPcDUt.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/vite.config.mts +2 -0
- package/dist/assets/CollectionParameter-BPA801P5.js +0 -4
- package/dist/assets/N8nDataTableServer-BHILYG__.js +0 -3203
- package/dist/assets/NodeCreation-gPsMJZWq.js +0 -440
- package/dist/assets/aiTemplatesStarterCollection.store-BsCe0bSk.js +0 -795
- 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
|
-
};
|