n8n-editor-ui 1.83.1 → 1.84.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 (110) hide show
  1. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-Cu5o7-TL.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-78eP7HIe.js} +1 -1
  2. package/dist/assets/{AuthView-mP34ZmnC.js → AuthView-Bn_LB3Kw.js} +2 -2
  3. package/dist/assets/{CanvasChat-CSLR5tKe.css → CanvasChat-CGGQcCRA.css} +45 -30
  4. package/dist/assets/{CanvasChat-cto4xkVD.js → CanvasChat-tuKMnT6J.js} +230 -143
  5. package/dist/assets/{ChangePasswordView-DkwRz1u6.js → ChangePasswordView-aXYIR8zr.js} +3 -3
  6. package/dist/assets/CollectionParameter-DR9e0MGf.js +4 -0
  7. package/dist/assets/{CredentialsView-UBVro_dv.js → CredentialsView-k8CeiyMJ.js} +5 -6
  8. package/dist/assets/{ErrorView-EWPmvugu.js → ErrorView-e-cpk6J7.js} +1 -1
  9. package/dist/assets/{ConcurrentExecutionsHeader-CEBmSYNK.css → ExecutionsTime-BOPJEomw.css} +63 -63
  10. package/dist/assets/{ConcurrentExecutionsHeader-Ul9ROpk0.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-BYacEmlc.js} +114 -114
  11. package/dist/assets/ExecutionsView-CQi8A4ps.js +926 -0
  12. package/dist/assets/{ExecutionsView-CB1tvZfo.css → ExecutionsView-CRTcP3sx.css} +60 -188
  13. package/dist/assets/{FileSaver.min-D6Iix6V9.js → FileSaver.min-DmMmlWYQ.js} +1 -1
  14. package/dist/assets/{FixedCollectionParameter-DBIBAKMF.js → FixedCollectionParameter-BfUPtP5M.js} +1 -1
  15. package/dist/assets/{ForgotMyPasswordView-DOMjwy3H.js → ForgotMyPasswordView-Dzao5PZ9.js} +3 -3
  16. package/dist/assets/{ProjectHeader-BZ6b6lat.css → Logo-DLBj1gMw.css} +23 -17
  17. package/dist/assets/{Logo-CidMx5L1.js → Logo-DVRZ2qRx.js} +8 -19
  18. package/dist/assets/{MainHeader-CpYwrGHe.js → MainHeader-BUw_JG4S.js} +10 -10
  19. package/dist/assets/{MainSidebar-u0kzXS10.js → MainSidebar-C6aXqICd.js} +75 -42
  20. package/dist/assets/{MainSidebar-BRAjTL7J.css → MainSidebar-CKMiDGvH.css} +13 -12
  21. package/dist/assets/{NodeCreation-C3kgMOiP.js → NodeCreation-B9-99kNr.js} +4 -4
  22. package/dist/assets/{NodeCreator-C3jOJmI0.js → NodeCreator-DH90304h.js} +4 -4
  23. package/dist/assets/{NodeDetailsView-CVVfk-zW.css → NodeDetailsView-0RXvy-0D.css} +2 -2
  24. package/dist/assets/{NodeDetailsView-BuAX7b_S.js → NodeDetailsView-Ci-9Cz_w.js} +69 -61
  25. package/dist/assets/{NodeView-CsrK5ExP.js → NodeView-CFUO-Q9X.js} +57 -19
  26. package/dist/assets/{ProjectCardBadge-BYZ4CZ8h.js → ProjectCardBadge-CGqr1_BG.js} +1 -1
  27. package/dist/assets/{ProjectHeader-AVHuknTg.js → ProjectHeader-C8hRwBFC.js} +60 -7
  28. package/dist/assets/ProjectHeader-CQjB5wC7.css +285 -0
  29. package/dist/assets/{ProjectSettings-BBgNR6v0.js → ProjectSettings-motYfWGR.js} +2 -3
  30. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-oVU1CjGg.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-DzkWenq4.js} +2 -2
  31. package/dist/assets/{ResourcesListLayout-C9w15Q23.js → ResourcesListLayout-BYVhS2j5.js} +14 -13
  32. package/dist/assets/{ResourcesListLayout-Brs7VKUf.css → ResourcesListLayout-BqQI0lCG.css} +29 -22
  33. package/dist/assets/{RunDataAi-DvJKJNYm.js → RunDataAi-pfKF0Nfm.js} +3 -3
  34. package/dist/assets/{RunDataJson-T-tjG8mj.js → RunDataJson-CNT_rM-i.js} +12 -12
  35. package/dist/assets/{RunDataJsonActions-zKxT1j4k.js → RunDataJsonActions-BTLAUv9R.js} +2 -2
  36. package/dist/assets/{RunDataSearch-CYKk6_W2.js → RunDataSearch-BpcbBojC.js} +1 -1
  37. package/dist/assets/{RunDataTable-rs93_vdQ.js → RunDataTable-ZnG9QEzJ.js} +2 -2
  38. package/dist/assets/{SamlOnboarding-gWhQJPLd.js → SamlOnboarding-DjhCWFIr.js} +3 -3
  39. package/dist/assets/{SettingsApiView-QxAEXccw.js → SettingsApiView-C1ClqjeG.js} +1 -1
  40. package/dist/assets/{SettingsCommunityNodesView-BpwvEtUI.js → SettingsCommunityNodesView-D5eLIpQC.js} +5 -5
  41. package/dist/assets/{SettingsExternalSecrets-DXrPZ93O.js → SettingsExternalSecrets-ubf6jijA.js} +1 -1
  42. package/dist/assets/{SettingsLdapView-nAm7w9WO.js → SettingsLdapView-BezV6JLr.js} +1 -1
  43. package/dist/assets/{SettingsLogStreamingView-Dr4ArIl_.js → SettingsLogStreamingView-ETOxA5Tw.js} +1 -1
  44. package/dist/assets/{SettingsPersonalView-DWFlvGTn.js → SettingsPersonalView-DGxUC8Q4.js} +1 -1
  45. package/dist/assets/{SettingsSourceControl-DKLeROzN.js → SettingsSourceControl-1vHHG6W9.js} +1 -1
  46. package/dist/assets/{SettingsSso-BVmlQW_R.js → SettingsSso-CdI26YPF.js} +1 -1
  47. package/dist/assets/{SettingsUsageAndPlan-I5n8xGLd.js → SettingsUsageAndPlan-BmI8cSiq.js} +1 -1
  48. package/dist/assets/{SettingsUsersView-D8uY5rsT.js → SettingsUsersView-90JmT1qM.js} +1 -1
  49. package/dist/assets/{SettingsView-e7XAFpfc.js → SettingsView-i7rE7s3I.js} +1 -1
  50. package/dist/assets/{SetupView-DQq_7fpU.js → SetupView-Lp4ullGE.js} +3 -3
  51. package/dist/assets/{SetupWorkflowCredentialsButton-frwFWfGJ.js → SetupWorkflowCredentialsButton-CoXXUd3B.js} +1 -1
  52. package/dist/assets/{SetupWorkflowFromTemplateView-C3ENxhAx.js → SetupWorkflowFromTemplateView-TVU0-Zq4.js} +3 -3
  53. package/dist/assets/{SigninView-Bq3o_KYj.js → SigninView-BqF8j6-h.js} +3 -3
  54. package/dist/assets/{SignoutView-BYQXAHDT.js → SignoutView-DrYJ9Qe3.js} +1 -1
  55. package/dist/assets/{SignupView-xqJgShbm.js → SignupView-_EKPhYKN.js} +3 -3
  56. package/dist/assets/{TemplateDetails-COPYl_Ch.js → TemplateDetails-DAalg9G2.js} +3 -3
  57. package/dist/assets/{TemplateList-DWGAiMoN.js → TemplateList-BEYMeJMu.js} +1 -1
  58. package/dist/assets/{TemplatesCollectionView-D7C-dsc7.js → TemplatesCollectionView-fMELXCRX.js} +5 -5
  59. package/dist/assets/{TemplatesSearchView-CUFKLHbU.js → TemplatesSearchView-BO-e3IH7.js} +3 -3
  60. package/dist/assets/{TemplatesView-BjZHhHGF.js → TemplatesView-p57nARMp.js} +1 -1
  61. package/dist/assets/{TemplatesWorkflowView-C2OFQoFQ.js → TemplatesWorkflowView-DAbL5S1-.js} +5 -5
  62. package/dist/assets/{TestDefinitionEditView-DjR3gJvA.js → TestDefinitionEditView-BTo9LlAU.js} +244 -252
  63. package/dist/assets/{TestDefinitionEditView-JONL00pA.css → TestDefinitionEditView-BXhOuJrU.css} +128 -116
  64. package/dist/assets/{TestDefinitionListView-BLzGSiMz.js → TestDefinitionListView-D_-DyZDv.js} +1 -1
  65. package/dist/assets/{TestDefinitionNewView-DBs9WSAD.js → TestDefinitionNewView-Crk5OePO.js} +13 -4
  66. package/dist/assets/{TestDefinitionRootView-vaMPai85.js → TestDefinitionRootView-BtiqAWW1.js} +1 -1
  67. package/dist/assets/{VariablesView-B2A18wmf.js → VariablesView-Bg3GI1iE.js} +5 -5
  68. package/dist/assets/{VariablesView-CbTLdNwU.css → VariablesView-BvDpOTm3.css} +7 -11
  69. package/dist/assets/{WorkerView-CfmL9mV2.js → WorkerView-CaTyr1ci.js} +7 -7
  70. package/dist/assets/{WorkflowActivator-Bk7lYyKD.js → WorkflowActivator-BvmRhIkt.js} +2 -2
  71. package/dist/assets/{WorkflowExecutionsInfoAccordion-BJUV_abc.js → WorkflowExecutionsInfoAccordion-BuIbG1kZ.js} +1 -1
  72. package/dist/assets/{WorkflowExecutionsLandingPage-BGJsZkAj.js → WorkflowExecutionsLandingPage-BirtsKx4.js} +2 -2
  73. package/dist/assets/{WorkflowExecutionsPreview-BDVLuC1z.css → WorkflowExecutionsPreview-CPGOOAq2.css} +48 -16
  74. package/dist/assets/{WorkflowExecutionsPreview-C1dnDirp.js → WorkflowExecutionsPreview-DFyHWF9H.js} +253 -119
  75. package/dist/assets/{WorkflowExecutionsView-CeyHBNCa.js → WorkflowExecutionsView-IUjVjxU9.js} +7 -7
  76. package/dist/assets/{WorkflowHistory-BjD7fWBc.js → WorkflowHistory-BqKSxr_5.js} +3 -3
  77. package/dist/assets/{WorkflowOnboardingView-C9XnQ0XZ.js → WorkflowOnboardingView-Bs0Rmm6I.js} +1 -1
  78. package/dist/assets/{WorkflowPreview-DzPoQOB4.js → WorkflowPreview-1jsK9hpV.js} +1 -1
  79. package/dist/assets/{WorkflowsView-DG5J9u8v.js → WorkflowsView-MzPw02jI.js} +482 -347
  80. package/dist/assets/{WorkflowsView-JN0Hvhvt.css → WorkflowsView-Sg6GR5kC.css} +53 -39
  81. package/dist/assets/{easyAiWorkflowUtils-CHIZUcBZ.js → easyAiWorkflowUtils-DlyLBhIZ.js} +1 -1
  82. package/dist/assets/{global-link-actions-DJx6dXwY.js → global-link-actions-DvwtxSrW.js} +1 -1
  83. package/dist/assets/{import-curl-BQvYdAxP.js → import-curl-CbxpR02g.js} +1 -1
  84. package/dist/assets/{index-CFLVCCgm.css → index-74EeM2i2.css} +751 -103
  85. package/dist/assets/{index-BloiTH5y.js → index-CyVlLoqB.js} +3216 -2198
  86. package/dist/assets/{index-Cvcpg6Dy.js → index-tzkIB4Tg.js} +1 -1
  87. package/dist/assets/{pickBy-fjQgBd6D.js → pickBy-DI3cF803.js} +1 -1
  88. package/dist/assets/{polyfills-C7eMRNFe.js → polyfills-CLZ4X0Ad.js} +2342 -1944
  89. package/dist/assets/{pushConnection.store-D5RQY4RP.js → pushConnection.store-BhUCpqAg.js} +1 -1
  90. package/dist/assets/{templateActions-DfmqYUYJ.js → templateActions-BnGO7zdc.js} +1 -1
  91. package/dist/assets/{typescript.worker-DP34mIHW.js → typescript.worker-Bt3bByTc.js} +1158 -695
  92. package/dist/assets/{useBeforeUnload-BTvPg0aq.js → useBeforeUnload-DtKxjKeS.js} +1 -1
  93. package/dist/assets/{useCanvasMapping-CGHW3BxZ.js → useCanvasMapping-BCP7UO9p.js} +10410 -10398
  94. package/dist/assets/{useCanvasMapping-CkNBF2SE.css → useCanvasMapping-CI4ehFWu.css} +579 -579
  95. package/dist/assets/{useCanvasOperations-Cr_vZCiR.js → useCanvasOperations-Ctquo5LL.js} +23 -6
  96. package/dist/assets/{useExecutionDebugging-CTmjDF_B.js → useExecutionDebugging-C0TAc9fj.js} +1 -1
  97. package/dist/assets/{useExecutionHelpers-C8isDFPE.js → useExecutionHelpers-BQHL3OpL.js} +1 -1
  98. package/dist/assets/{useImportCurlCommand-uH3ThHFG.js → useImportCurlCommand-IE8oJ9bp.js} +13 -20
  99. package/dist/assets/{usePinnedData-C5x08fuF.js → usePinnedData-CtRDhd6k.js} +2 -2
  100. package/dist/assets/{usePushConnection-DUixULqA.js → usePushConnection-DXozzPWi.js} +5 -4
  101. package/dist/assets/{useRunWorkflow-CnFMyZFO.js → useRunWorkflow-D9JIEr1s.js} +3 -3
  102. package/dist/assets/{useTestDefinitionForm-DxJcvrhw.js → useTestDefinitionForm-8dJH3v29.js} +1 -1
  103. package/dist/assets/{useWorkflowActivate-Cn5TIR2c.js → useWorkflowActivate-CI3X35ZJ.js} +1 -1
  104. package/dist/index.html +3 -3
  105. package/package.json +1 -1
  106. package/dist/assets/CollectionParameter-DzUDyeJC.js +0 -4
  107. package/dist/assets/ExecutionsView-DCeodQ1s.js +0 -983
  108. package/dist/assets/Logo-DJLTXpXC.css +0 -165
  109. package/dist/assets/ProjectCreateResource-cJSSCcoG.js +0 -56
  110. package/dist/assets/ProjectCreateResource-eYdTamXR.css +0 -139
@@ -1,233 +1,20 @@
1
- import { u as useTestDefinitionForm } from "./useTestDefinitionForm-DxJcvrhw.js";
2
- import { d as defineComponent, U as useWorkflowsStore, bp as useNodeTypesStore, W as useRoute, b as useRouter, r as ref, q as computed, o as onMounted, l as unref, c as openBlock, h as createElementBlock, i as createVNode, w as withCtx, k as createTextVNode, t as toDisplayString, n as normalizeClass, e as createBlock, f as createCommentVNode, aQ as N8nTooltip, g as useI18n, D as createEventBus, ab as useCssModule, m as resolveComponent, ak as useTelemetry, _ as _export_sfc, j as createBaseVNode, fY as N8nText, v as renderSlot, F as Fragment, c$ as InfoTip, g0 as ne, cS as useTemplateRef, B as renderList, cR as N8nButton, z as nextTick, g1 as N8nInput, aR as _sfc_main$a, a2 as useProjectsStore, aP as N8nLink, V as VIEWS, g2 as __unplugin_components_0$2, g3 as SAMPLE_EVALUATION_WORKFLOW, fn as mergeModels, fo as useModel, g4 as Tag, g5 as NODE_PINNING_MODAL_KEY, g6 as __unplugin_components_1, al as useMessage, dS as dateFormat, bo as watchEffect, ax as withDirectives, ay as vShow, fZ as N8nIcon, C as normalizeStyle, g7 as TestTableBase, K as useDebounce, a as useToast, bX as useTestDefinitionStore, fH as useAnnotationTagsStore, L as useUIStore, Z as useDocumentVisibility, I as watch, g8 as InlineNameEdit } from "./index-BloiTH5y.js";
3
- import { u as useVueFlow, a as useCanvasMapping, _ as __unplugin_components_0$1 } from "./useCanvasMapping-CGHW3BxZ.js";
4
- import { a as useCanvasOperations } from "./useCanvasOperations-Cr_vZCiR.js";
5
- import { L as Line } from "./index-Cvcpg6Dy.js";
6
- import "./usePinnedData-C5x08fuF.js";
7
- import "./useRunWorkflow-CnFMyZFO.js";
8
- import "./pushConnection.store-D5RQY4RP.js";
9
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
10
- __name: "NodesPinning",
11
- props: {
12
- modelValue: {}
13
- },
14
- emits: ["update:modelValue"],
15
- setup(__props, { emit: __emit }) {
16
- const workflowsStore = useWorkflowsStore();
17
- const nodeTypesStore = useNodeTypesStore();
18
- const route = useRoute();
19
- const router = useRouter();
20
- const locale = useI18n();
21
- const telemetry = useTelemetry();
22
- const { resetWorkspace, initializeWorkspace } = useCanvasOperations({ router });
23
- const eventBus = createEventBus();
24
- const style = useCssModule();
25
- const uuid = crypto.randomUUID();
26
- const props = __props;
27
- const emit = __emit;
28
- const isLoading = ref(true);
29
- const workflowId = computed(() => route.params.name);
30
- const testId = computed(() => route.params.testId);
31
- const workflow = computed(() => workflowsStore.getWorkflowById(workflowId.value));
32
- const workflowObject = computed(() => workflowsStore.getCurrentWorkflow(true));
33
- const canvasId = computed(() => `${uuid}-${testId.value}`);
34
- const { onNodesInitialized, fitView, zoomTo } = useVueFlow({ id: canvasId.value });
35
- const nodes = computed(() => {
36
- return workflow.value.nodes ?? [];
37
- });
38
- const connections = computed(() => workflow.value.connections);
39
- const { nodes: mappedNodes, connections: mappedConnections } = useCanvasMapping({
40
- nodes,
41
- connections,
42
- workflowObject
43
- });
44
- async function loadData() {
45
- workflowsStore.resetState();
46
- resetWorkspace();
47
- const loadingPromise = Promise.all([
48
- nodeTypesStore.getNodeTypes(),
49
- workflowsStore.fetchWorkflow(workflowId.value)
50
- ]);
51
- await loadingPromise;
52
- initializeWorkspace(workflow.value);
53
- disableAllNodes();
54
- }
55
- function getNodeNameById(id) {
56
- return mappedNodes.value.find((node) => node.id === id)?.data?.name;
57
- }
58
- function updateNodeClasses(nodeIds, isPinned2) {
59
- eventBus.emit("nodes:action", {
60
- ids: nodeIds,
61
- action: "update:node:class",
62
- payload: {
63
- className: style.pinnedNode,
64
- add: isPinned2
65
- }
66
- });
67
- eventBus.emit("nodes:action", {
68
- ids: nodeIds,
69
- action: "update:node:class",
70
- payload: {
71
- className: style.notPinnedNode,
72
- add: !isPinned2
73
- }
74
- });
75
- }
76
- function disableAllNodes() {
77
- const ids = mappedNodes.value.map((node) => node.id);
78
- updateNodeClasses(ids, false);
79
- const pinnedNodes = props.modelValue.map((node) => node.id).filter((id) => id !== null);
80
- if (pinnedNodes.length > 0) {
81
- updateNodeClasses(pinnedNodes, true);
82
- }
83
- }
84
- function onPinButtonClick(data) {
85
- const nodeName = getNodeNameById(data.id);
86
- if (!nodeName) return;
87
- const isPinned2 = props.modelValue.some((node) => node.id === data.id);
88
- const updatedNodes = isPinned2 ? props.modelValue.filter((node) => node.id !== data.id) : [...props.modelValue, { name: nodeName, id: data.id }];
89
- emit("update:modelValue", updatedNodes);
90
- updateNodeClasses([data.id], !isPinned2);
91
- if (!isPinned2) {
92
- telemetry.track("User selected node to be mocked", {
93
- node_id: data.id,
94
- test_id: testId.value
95
- });
96
- }
97
- }
98
- function isPinButtonVisible(outputs, inputs) {
99
- return outputs.length === 1 && inputs.length >= 1;
100
- }
101
- const isPinned = (data) => props.modelValue.some((node) => node.id === data.id);
102
- onNodesInitialized(async () => {
103
- await fitView();
104
- isLoading.value = false;
105
- await zoomTo(0.7, { duration: 400 });
106
- });
107
- onMounted(loadData);
108
- return (_ctx, _cache) => {
109
- const _component_N8nHeading = resolveComponent("N8nHeading");
110
- const _component_N8nText = resolveComponent("N8nText");
111
- const _component_N8nSpinner = resolveComponent("N8nSpinner");
112
- const _component_N8nButton = resolveComponent("N8nButton");
113
- const _component_Canvas = __unplugin_components_0$1;
114
- return unref(mappedNodes).length === 0 ? (openBlock(), createElementBlock("div", {
115
- key: 0,
116
- class: normalizeClass(_ctx.$style.noNodes)
117
- }, [
118
- createVNode(_component_N8nHeading, {
119
- size: "large",
120
- bold: true,
121
- class: normalizeClass(_ctx.$style.noNodesTitle)
122
- }, {
123
- default: withCtx(() => [
124
- createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.pinNodes.noNodes.title")), 1)
125
- ]),
126
- _: 1
127
- }, 8, ["class"]),
128
- createVNode(_component_N8nText, null, {
129
- default: withCtx(() => [
130
- createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.pinNodes.noNodes.description")), 1)
131
- ]),
132
- _: 1
133
- })
134
- ], 2)) : (openBlock(), createElementBlock("div", {
135
- key: 1,
136
- class: normalizeClass(_ctx.$style.container)
137
- }, [
138
- isLoading.value ? (openBlock(), createBlock(_component_N8nSpinner, {
139
- key: 0,
140
- size: "xlarge",
141
- type: "dots",
142
- class: normalizeClass(_ctx.$style.spinner)
143
- }, null, 8, ["class"])) : createCommentVNode("", true),
144
- createVNode(_component_Canvas, {
145
- id: canvasId.value,
146
- loading: isLoading.value,
147
- class: normalizeClass({ [_ctx.$style.canvas]: true }),
148
- nodes: unref(mappedNodes),
149
- connections: unref(mappedConnections),
150
- "show-bug-reporting-button": false,
151
- "read-only": true,
152
- "event-bus": unref(eventBus)
153
- }, {
154
- nodeToolbar: withCtx(({ data, outputs, inputs }) => [
155
- isPinButtonVisible(outputs, inputs) ? (openBlock(), createElementBlock("div", {
156
- key: 0,
157
- class: normalizeClass({
158
- [_ctx.$style.pinButtonContainer]: true,
159
- [_ctx.$style.pinButtonContainerPinned]: isPinned(data)
160
- })
161
- }, [
162
- createVNode(unref(N8nTooltip), { placement: "left" }, {
163
- content: withCtx(() => [
164
- createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.nodesPinning.pinButtonTooltip")), 1)
165
- ]),
166
- default: withCtx(() => [
167
- isPinned(data) ? (openBlock(), createBlock(_component_N8nButton, {
168
- key: 0,
169
- icon: "thumbtack",
170
- block: "",
171
- type: "secondary",
172
- class: normalizeClass(_ctx.$style.customSecondary),
173
- "data-test-id": "node-pin-button",
174
- onClick: ($event) => onPinButtonClick(data)
175
- }, {
176
- default: withCtx(() => _cache[0] || (_cache[0] = [
177
- createTextVNode(" Un Mock ")
178
- ])),
179
- _: 2
180
- }, 1032, ["class", "onClick"])) : (openBlock(), createBlock(_component_N8nButton, {
181
- key: 1,
182
- icon: "thumbtack",
183
- block: "",
184
- type: "secondary",
185
- "data-test-id": "node-pin-button",
186
- onClick: ($event) => onPinButtonClick(data)
187
- }, {
188
- default: withCtx(() => _cache[1] || (_cache[1] = [
189
- createTextVNode(" Mock ")
190
- ])),
191
- _: 2
192
- }, 1032, ["onClick"]))
193
- ]),
194
- _: 2
195
- }, 1024)
196
- ], 2)) : createCommentVNode("", true)
197
- ]),
198
- _: 1
199
- }, 8, ["id", "loading", "class", "nodes", "connections", "event-bus"])
200
- ], 2));
201
- };
202
- }
203
- });
204
- const container$1 = "_container_z719h_123";
205
- const pinButtonContainer = "_pinButtonContainer_z719h_128";
206
- const pinButtonContainerPinned = "_pinButtonContainerPinned_z719h_139";
207
- const customSecondary = "_customSecondary_z719h_143";
208
- const spinner = "_spinner_z719h_152";
209
- const noNodes = "_noNodes_z719h_159";
210
- const style0$8 = {
211
- container: container$1,
212
- pinButtonContainer,
213
- pinButtonContainerPinned,
214
- customSecondary,
215
- spinner,
216
- noNodes
217
- };
218
- const cssModules$8 = {
219
- "$style": style0$8
220
- };
221
- const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__cssModules", cssModules$8]]);
1
+ import { u as useTestDefinitionForm } from "./useTestDefinitionForm-8dJH3v29.js";
2
+ import { _ as _export_sfc, i as createElementBlock, g as openBlock, k as createBaseVNode, n as normalizeClass, d as defineComponent, r as ref, $ as useCssModule, q as computed, h as resolveComponent, m as unref, j as createVNode, f as createCommentVNode, aQ as N8nTooltip, w as withCtx, e as createBlock, c0 as N8nText, x as renderSlot, F as Fragment, l as createTextVNode, t as toDisplayString, d7 as InfoTip, c as useI18n, g7 as ne, bu as useTemplateRef, D as renderList, g8 as N8nInput, aS as _sfc_main$a, c1 as N8nButton, z as nextTick, T as useWorkflowsStore, bs as useNodeTypesStore, U as useRoute, b as useRouter, fH as useModel, o as onMounted, cS as N8nHeading, g9 as _sfc_main$b, b1 as mergeProps, ag as useTelemetry, a3 as useProjectsStore, ga as SAMPLE_EVALUATION_WORKFLOW, aR as N8nLink, gb as __unplugin_components_0, V as VIEWS, fG as mergeModels, gc as Tag, gd as NODE_PINNING_MODAL_KEY, ge as __unplugin_components_0$1, ai as useMessage, d$ as dateFormat, bo as watchEffect, aA as withDirectives, aB as vShow, gf as TestTableBase, c4 as N8nIcon, B as normalizeStyle, K as useDebounce, a as useToast, b$ as useTestDefinitionStore, fR as useAnnotationTagsStore, L as useUIStore, Z as useDocumentVisibility, I as watch, gg as InlineNameEdit } from "./index-CyVlLoqB.js";
3
+ import { u as useVueFlow, a as useCanvasMapping, C as Canvas, b as CanvasNode } from "./useCanvasMapping-BCP7UO9p.js";
4
+ import { a as useCanvasOperations } from "./useCanvasOperations-Ctquo5LL.js";
5
+ import { L as Line } from "./index-tzkIB4Tg.js";
6
+ import "./usePinnedData-CtRDhd6k.js";
7
+ import "./useRunWorkflow-D9JIEr1s.js";
8
+ import "./pushConnection.store-BhUCpqAg.js";
222
9
  const blockArrow = "_blockArrow_hbkir_123";
223
10
  const stalk = "_stalk_hbkir_129";
224
11
  const arrowHead = "_arrowHead_hbkir_136";
225
- const style0$7 = {
12
+ const style0$8 = {
226
13
  blockArrow,
227
14
  stalk,
228
15
  arrowHead
229
16
  };
230
- const _sfc_main$8 = {};
17
+ const _sfc_main$9 = {};
231
18
  function _sfc_render(_ctx, _cache) {
232
19
  return openBlock(), createElementBlock("div", {
233
20
  class: normalizeClass(_ctx.$style.blockArrow)
@@ -240,11 +27,11 @@ function _sfc_render(_ctx, _cache) {
240
27
  }, null, 2)
241
28
  ], 2);
242
29
  }
243
- const cssModules$7 = {
244
- "$style": style0$7
30
+ const cssModules$8 = {
31
+ "$style": style0$8
245
32
  };
246
- const BlockArrow = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render], ["__cssModules", cssModules$7]]);
247
- const _sfc_main$7 = /* @__PURE__ */ defineComponent({
33
+ const BlockArrow = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render], ["__cssModules", cssModules$8]]);
34
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
248
35
  __name: "EvaluationStep",
249
36
  props: {
250
37
  title: { default: "" },
@@ -411,7 +198,7 @@ const infoTip = "_infoTip_1h8fm_172";
411
198
  const actions = "_actions_1h8fm_180";
412
199
  const cardContent = "_cardContent_1h8fm_186";
413
200
  const cardContentWrapper = "_cardContentWrapper_1h8fm_192";
414
- const style0$6 = {
201
+ const style0$7 = {
415
202
  evaluationStep,
416
203
  evaluationTooltip,
417
204
  icon,
@@ -425,11 +212,11 @@ const style0$6 = {
425
212
  cardContentWrapper,
426
213
  "has-issues": "_has-issues_1h8fm_196"
427
214
  };
428
- const cssModules$6 = {
429
- "$style": style0$6
215
+ const cssModules$7 = {
216
+ "$style": style0$7
430
217
  };
431
- const EvaluationStep = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__cssModules", cssModules$6]]);
432
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
218
+ const EvaluationStep = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__cssModules", cssModules$7]]);
219
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
433
220
  __name: "MetricsInput",
434
221
  props: {
435
222
  modelValue: {}
@@ -491,13 +278,219 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
491
278
  }
492
279
  });
493
280
  const metricItem = "_metricItem_1hbcq_123";
494
- const style0$5 = {
281
+ const style0$6 = {
495
282
  metricItem
496
283
  };
284
+ const cssModules$6 = {
285
+ "$style": style0$6
286
+ };
287
+ const MetricsInput = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__cssModules", cssModules$6]]);
288
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
289
+ __name: "NodesPinning",
290
+ props: {
291
+ "modelValue": { required: true },
292
+ "modelModifiers": {}
293
+ },
294
+ emits: ["update:modelValue"],
295
+ setup(__props) {
296
+ const workflowsStore = useWorkflowsStore();
297
+ const nodeTypesStore = useNodeTypesStore();
298
+ const route = useRoute();
299
+ const router = useRouter();
300
+ const locale = useI18n();
301
+ const telemetry = useTelemetry();
302
+ const { resetWorkspace, initializeWorkspace } = useCanvasOperations({ router });
303
+ const uuid = crypto.randomUUID();
304
+ const model = useModel(__props, "modelValue");
305
+ const isLoading = ref(false);
306
+ const workflowId = computed(() => route.params.name);
307
+ const testId = computed(() => route.params.testId);
308
+ const workflow = computed(() => workflowsStore.getWorkflowById(workflowId.value));
309
+ const workflowObject = computed(() => workflowsStore.getCurrentWorkflow(true));
310
+ const canvasId = computed(() => `${uuid}-${testId.value}`);
311
+ const { onNodesInitialized, fitView, zoomTo, onNodeClick, viewport } = useVueFlow({
312
+ id: canvasId.value
313
+ });
314
+ const nodes = computed(() => workflow.value.nodes ?? []);
315
+ const connections = computed(() => workflow.value.connections);
316
+ const { nodes: mappedNodes, connections: mappedConnections } = useCanvasMapping({
317
+ nodes,
318
+ connections,
319
+ workflowObject
320
+ });
321
+ async function loadData() {
322
+ isLoading.value = true;
323
+ workflowsStore.resetState();
324
+ resetWorkspace();
325
+ await Promise.all([
326
+ nodeTypesStore.getNodeTypes(),
327
+ workflowsStore.fetchWorkflow(workflowId.value)
328
+ ]);
329
+ workflow.value.pinData = {};
330
+ initializeWorkspace(workflow.value);
331
+ }
332
+ function getNodeNameById(id) {
333
+ return mappedNodes.value.find((node) => node.id === id)?.data?.name;
334
+ }
335
+ function isMocked(data) {
336
+ return model.value.some((node) => node.id === data.id);
337
+ }
338
+ function canBeMocked(outputs, inputs) {
339
+ return outputs.length === 1 && inputs.length >= 1;
340
+ }
341
+ function handleNodeClick(data) {
342
+ const nodeName = getNodeNameById(data.id);
343
+ if (!nodeName || !canBeMocked(data.outputs, data.inputs)) return;
344
+ const mocked = isMocked(data);
345
+ model.value = mocked ? model.value.filter((node) => node.id !== data.id) : model.value.concat({ name: nodeName, id: data.id });
346
+ if (!mocked) {
347
+ telemetry.track("User selected node to be mocked", {
348
+ node_id: data.id,
349
+ test_id: testId.value
350
+ });
351
+ }
352
+ }
353
+ function tooltipContent(data) {
354
+ if (nodeTypesStore.isTriggerNode(data.type)) {
355
+ return locale.baseText("testDefinition.edit.nodesPinning.triggerTooltip");
356
+ }
357
+ if (!canBeMocked(data.outputs, data.inputs)) {
358
+ return;
359
+ }
360
+ if (isMocked(data)) {
361
+ return locale.baseText("testDefinition.edit.nodesPinning.pinButtonTooltip.pinned");
362
+ } else {
363
+ return locale.baseText("testDefinition.edit.nodesPinning.pinButtonTooltip");
364
+ }
365
+ }
366
+ function tooltipOffset(data) {
367
+ if (nodeTypesStore.isTriggerNode(data.type)) return;
368
+ return 45 * viewport.value.zoom;
369
+ }
370
+ function tooltipProps(data) {
371
+ const content2 = tooltipContent(data);
372
+ return {
373
+ disabled: !content2,
374
+ content: content2,
375
+ offset: tooltipOffset(data)
376
+ };
377
+ }
378
+ onNodeClick(({ node }) => handleNodeClick(node.data));
379
+ onNodesInitialized(async () => {
380
+ await fitView();
381
+ await zoomTo(0.7);
382
+ await new Promise((resolve) => setTimeout(resolve, 400));
383
+ isLoading.value = false;
384
+ });
385
+ onMounted(loadData);
386
+ return (_ctx, _cache) => {
387
+ return unref(mappedNodes).length === 0 ? (openBlock(), createElementBlock("div", {
388
+ key: 0,
389
+ class: normalizeClass(_ctx.$style.noNodes)
390
+ }, [
391
+ createVNode(unref(N8nHeading), {
392
+ size: "large",
393
+ bold: true,
394
+ class: normalizeClass(_ctx.$style.noNodesTitle)
395
+ }, {
396
+ default: withCtx(() => [
397
+ createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.pinNodes.noNodes.title")), 1)
398
+ ]),
399
+ _: 1
400
+ }, 8, ["class"]),
401
+ createVNode(unref(N8nText), null, {
402
+ default: withCtx(() => [
403
+ createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.pinNodes.noNodes.description")), 1)
404
+ ]),
405
+ _: 1
406
+ })
407
+ ], 2)) : (openBlock(), createElementBlock("div", {
408
+ key: 1,
409
+ class: normalizeClass(_ctx.$style.container)
410
+ }, [
411
+ isLoading.value ? (openBlock(), createBlock(unref(_sfc_main$b), {
412
+ key: 0,
413
+ size: "large",
414
+ type: "dots",
415
+ class: normalizeClass(_ctx.$style.spinner)
416
+ }, null, 8, ["class"])) : createCommentVNode("", true),
417
+ createVNode(Canvas, {
418
+ id: canvasId.value,
419
+ loading: isLoading.value,
420
+ nodes: unref(mappedNodes),
421
+ connections: unref(mappedConnections),
422
+ "show-bug-reporting-button": false,
423
+ "read-only": true
424
+ }, {
425
+ node: withCtx(({ nodeProps }) => [
426
+ createVNode(unref(N8nTooltip), mergeProps({ placement: "top" }, tooltipProps(nodeProps.data)), {
427
+ default: withCtx(() => [
428
+ createVNode(CanvasNode, mergeProps(nodeProps, {
429
+ class: {
430
+ [_ctx.$style.isTrigger]: unref(nodeTypesStore).isTriggerNode(nodeProps.data.type),
431
+ [_ctx.$style.mockNode]: true
432
+ }
433
+ }), {
434
+ toolbar: withCtx(({ data, outputs, inputs }) => [
435
+ canBeMocked(outputs, inputs) ? (openBlock(), createElementBlock("div", {
436
+ key: 0,
437
+ class: normalizeClass({
438
+ [_ctx.$style.pinButtonContainer]: true,
439
+ [_ctx.$style.pinButtonContainerPinned]: isMocked(data)
440
+ })
441
+ }, [
442
+ createVNode(unref(N8nButton), {
443
+ icon: "thumbtack",
444
+ block: "",
445
+ type: "secondary",
446
+ class: normalizeClass({ [_ctx.$style.customSecondary]: isMocked(data) }),
447
+ "data-test-id": "node-pin-button"
448
+ }, {
449
+ default: withCtx(() => [
450
+ isMocked(data) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
451
+ createTextVNode(toDisplayString(unref(locale).baseText("contextMenu.unpin")), 1)
452
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
453
+ createTextVNode(toDisplayString(unref(locale).baseText("contextMenu.pin")), 1)
454
+ ], 64))
455
+ ]),
456
+ _: 2
457
+ }, 1032, ["class"])
458
+ ], 2)) : createCommentVNode("", true)
459
+ ]),
460
+ _: 2
461
+ }, 1040, ["class"])
462
+ ]),
463
+ _: 2
464
+ }, 1040)
465
+ ]),
466
+ _: 1
467
+ }, 8, ["id", "loading", "nodes", "connections"])
468
+ ], 2));
469
+ };
470
+ }
471
+ });
472
+ const mockNode = "_mockNode_7xdc7_123";
473
+ const isTrigger = "_isTrigger_7xdc7_127";
474
+ const container$1 = "_container_7xdc7_131";
475
+ const pinButtonContainer = "_pinButtonContainer_7xdc7_138";
476
+ const pinButtonContainerPinned = "_pinButtonContainerPinned_7xdc7_149";
477
+ const customSecondary = "_customSecondary_7xdc7_153";
478
+ const spinner = "_spinner_7xdc7_162";
479
+ const noNodes = "_noNodes_7xdc7_169";
480
+ const style0$5 = {
481
+ mockNode,
482
+ isTrigger,
483
+ container: container$1,
484
+ pinButtonContainer,
485
+ pinButtonContainerPinned,
486
+ customSecondary,
487
+ spinner,
488
+ noNodes
489
+ };
497
490
  const cssModules$5 = {
498
491
  "$style": style0$5
499
492
  };
500
- const MetricsInput = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__cssModules", cssModules$5]]);
493
+ const NodesPinning = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__cssModules", cssModules$5]]);
501
494
  const _hoisted_1$3 = { class: "mt-xs" };
502
495
  const _sfc_main$5 = /* @__PURE__ */ defineComponent({
503
496
  __name: "WorkflowSelector",
@@ -558,7 +551,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
558
551
  window.open(href, "_blank");
559
552
  };
560
553
  return (_ctx, _cache) => {
561
- const _component_WorkflowSelectorParameterInput = __unplugin_components_0$2;
554
+ const _component_WorkflowSelectorParameterInput = __unplugin_components_0;
562
555
  return openBlock(), createElementBlock("div", _hoisted_1$3, [
563
556
  !_ctx.modelValue.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
564
557
  createVNode(unref(N8nButton), {
@@ -661,7 +654,6 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
661
654
  );
662
655
  const metrics = useModel(__props, "metrics");
663
656
  const mockedNodes = useModel(__props, "mockedNodes");
664
- const nodePinningModal = ref(null);
665
657
  const selectedTag = computed(() => props.tagsById[tags.value.value[0]] ?? {});
666
658
  function openExecutionsView() {
667
659
  emit("openExecutionsViewForTag");
@@ -669,9 +661,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
669
661
  return (_ctx, _cache) => {
670
662
  const _component_font_awesome_icon = resolveComponent("font-awesome-icon");
671
663
  const _component_i18n_t = resolveComponent("i18n-t");
672
- const _component_N8nHeading = resolveComponent("N8nHeading");
673
- const _component_NodesPinning = __unplugin_components_0;
674
- const _component_Modal = __unplugin_components_1;
664
+ const _component_Modal = __unplugin_components_0$1;
675
665
  return openBlock(), createElementBlock("div", null, [
676
666
  createBaseVNode("div", {
677
667
  class: normalizeClass(_ctx.$style.editForm)
@@ -814,24 +804,24 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
814
804
  }, 8, ["title", "issues", "description", "tooltip", "external-tooltip"])
815
805
  ], 2),
816
806
  createVNode(_component_Modal, {
817
- ref_key: "nodePinningModal",
818
- ref: nodePinningModal,
819
- width: "80vw",
820
- height: "85vh",
807
+ width: "calc(100% - (48px * 2))",
808
+ height: "calc(100% - (48px * 2))",
809
+ "custom-class": _ctx.$style.pinnigModal,
821
810
  name: unref(NODE_PINNING_MODAL_KEY)
822
811
  }, {
823
812
  header: withCtx(() => [
824
- createVNode(_component_N8nHeading, {
825
- size: "large",
826
- bold: true
813
+ createVNode(unref(N8nHeading), {
814
+ tag: "h3",
815
+ size: "xlarge",
816
+ color: "text-dark",
817
+ class: "mb-2xs"
827
818
  }, {
828
819
  default: withCtx(() => [
829
820
  createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.selectNodes")), 1)
830
821
  ]),
831
822
  _: 1
832
823
  }),
833
- _cache[6] || (_cache[6] = createBaseVNode("br", null, null, -1)),
834
- createVNode(unref(N8nText), null, {
824
+ createVNode(unref(N8nText), { color: "text-base" }, {
835
825
  default: withCtx(() => [
836
826
  createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.modal.description")), 1)
837
827
  ]),
@@ -839,21 +829,23 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
839
829
  })
840
830
  ]),
841
831
  content: withCtx(() => [
842
- createVNode(_component_NodesPinning, {
832
+ createVNode(NodesPinning, {
843
833
  modelValue: mockedNodes.value,
844
834
  "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => mockedNodes.value = $event),
845
835
  "data-test-id": "nodes-pinning-modal"
846
836
  }, null, 8, ["modelValue"])
847
837
  ]),
848
838
  _: 1
849
- }, 8, ["name"])
839
+ }, 8, ["custom-class", "name"])
850
840
  ]);
851
841
  };
852
842
  }
853
843
  });
854
- const nestedSteps = "_nestedSteps_1784n_123";
855
- const tagInputTag = "_tagInputTag_1784n_128";
844
+ const pinnigModal = "_pinnigModal_1qbos_123";
845
+ const nestedSteps = "_nestedSteps_1qbos_128";
846
+ const tagInputTag = "_tagInputTag_1qbos_133";
856
847
  const style0$4 = {
848
+ pinnigModal,
857
849
  nestedSteps,
858
850
  tagInputTag
859
851
  };