n8n-editor-ui 1.47.0 → 1.47.1
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/.turbo/turbo-build.log +78 -78
- package/dist/assets/{AuthView-BgFWzBDm.js → AuthView-CMxdNKZJ.js} +2 -2
- package/dist/assets/{AuthView-BgFWzBDm.js.map → AuthView-CMxdNKZJ.js.map} +1 -1
- package/dist/assets/{CanvasControls-m_3acPPd.js → CanvasControls-3FMjwMqA.js} +2 -2
- package/dist/assets/{CanvasControls-m_3acPPd.js.map → CanvasControls-3FMjwMqA.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-CN6JWR-N.js → ChangePasswordView-_NkkcUVb.js} +2 -2
- package/dist/assets/{ChangePasswordView-CN6JWR-N.js.map → ChangePasswordView-_NkkcUVb.js.map} +1 -1
- package/dist/assets/{CollectionParameter-DHmcKhO-.js → CollectionParameter-BXMOfisf.js} +2 -2
- package/dist/assets/CollectionParameter-BXMOfisf.js.map +1 -0
- package/dist/assets/{CredentialsView-D9TXjOnK.js → CredentialsView-B2UF3tK_.js} +2 -2
- package/dist/assets/{CredentialsView-D9TXjOnK.js.map → CredentialsView-B2UF3tK_.js.map} +1 -1
- package/dist/assets/{ErrorView-CYag8fsg.js → ErrorView-B_lpOlen.js} +2 -2
- package/dist/assets/{ErrorView-CYag8fsg.js.map → ErrorView-B_lpOlen.js.map} +1 -1
- package/dist/assets/{ExecutionsFilter-Cf35yNfd.js → ExecutionsFilter-dNFZor7l.js} +2 -2
- package/dist/assets/{ExecutionsFilter-Cf35yNfd.js.map → ExecutionsFilter-dNFZor7l.js.map} +1 -1
- package/dist/assets/{ExecutionsView-ztrgLYNP.js → ExecutionsView-BYe-KERG.js} +2 -2
- package/dist/assets/{ExecutionsView-ztrgLYNP.js.map → ExecutionsView-BYe-KERG.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-C-0yB-bx.js → ForgotMyPasswordView-D97J06wc.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-C-0yB-bx.js.map → ForgotMyPasswordView-D97J06wc.js.map} +1 -1
- package/dist/assets/MainHeader-CT4nF2mY.js +2 -0
- package/dist/assets/{MainHeader-CMxbwL4C.js.map → MainHeader-CT4nF2mY.js.map} +1 -1
- package/dist/assets/{MainSidebar-BuwaBgG9.js → MainSidebar-CTg5wPzP.js} +2 -2
- package/dist/assets/{MainSidebar-BuwaBgG9.js.map → MainSidebar-CTg5wPzP.js.map} +1 -1
- package/dist/assets/{NodeCreation-B7Uimsok.js → NodeCreation-BF_L2-99.js} +3 -3
- package/dist/assets/{NodeCreation-B7Uimsok.js.map → NodeCreation-BF_L2-99.js.map} +1 -1
- package/dist/assets/{NodeCreator-IRjqf3_R.js → NodeCreator-B_yCtSu6.js} +2 -2
- package/dist/assets/{NodeCreator-IRjqf3_R.js.map → NodeCreator-B_yCtSu6.js.map} +1 -1
- package/dist/assets/{NodeDetailsView-CSnjluIR.js → NodeDetailsView-ggolOsHM.js} +4 -4
- package/dist/assets/{NodeDetailsView-CSnjluIR.js.map → NodeDetailsView-ggolOsHM.js.map} +1 -1
- package/dist/assets/{NodeView-DMzj-gox.css → NodeView--67hs6V6.css} +1 -1
- package/dist/assets/NodeView-B2MlTl6g.js +3 -0
- package/dist/assets/NodeView-B2MlTl6g.js.map +1 -0
- package/dist/assets/{NodeView.v2-DyU_S0rY.js → NodeView.v2-D_CKj9CS.js} +3 -3
- package/dist/assets/{NodeView.v2-DyU_S0rY.js.map → NodeView.v2-D_CKj9CS.js.map} +1 -1
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-C1N0EZCM.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-DdHOM703.js} +2 -2
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-C1N0EZCM.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-DdHOM703.js.map} +1 -1
- package/dist/assets/{ProjectSettings-CbNlX27g.js → ProjectSettings-DpJesEZX.js} +2 -2
- package/dist/assets/{ProjectSettings-CbNlX27g.js.map → ProjectSettings-DpJesEZX.js.map} +1 -1
- package/dist/assets/{ProjectTabs-Cx2VWeba.js → ProjectTabs-D7nNxtFO.js} +2 -2
- package/dist/assets/{ProjectTabs-Cx2VWeba.js.map → ProjectTabs-D7nNxtFO.js.map} +1 -1
- package/dist/assets/{PushConnectionTracker-C_r8Zv-p.js → PushConnectionTracker-YJuy57g2.js} +2 -2
- package/dist/assets/{PushConnectionTracker-C_r8Zv-p.js.map → PushConnectionTracker-YJuy57g2.js.map} +1 -1
- package/dist/assets/{ResourcesListLayout-CKSHiUAP.js → ResourcesListLayout-mZ4ijKRB.js} +2 -2
- package/dist/assets/{ResourcesListLayout-CKSHiUAP.js.map → ResourcesListLayout-mZ4ijKRB.js.map} +1 -1
- package/dist/assets/{RunDataAi-BVqsN7UN.js → RunDataAi-D0m0Vg_p.js} +2 -2
- package/dist/assets/{RunDataAi-BVqsN7UN.js.map → RunDataAi-D0m0Vg_p.js.map} +1 -1
- package/dist/assets/{RunDataJson-6Yfwd78r.js → RunDataJson-DkHNIqVj.js} +3 -3
- package/dist/assets/{RunDataJson-6Yfwd78r.js.map → RunDataJson-DkHNIqVj.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-5ig3g4km.js → RunDataJsonActions-Cgxcpw8t.js} +2 -2
- package/dist/assets/{RunDataJsonActions-5ig3g4km.js.map → RunDataJsonActions-Cgxcpw8t.js.map} +1 -1
- package/dist/assets/{RunDataSchema-CrW957BW.js → RunDataSchema-C6aZoC0a.js} +3 -3
- package/dist/assets/{RunDataSchema-CrW957BW.js.map → RunDataSchema-C6aZoC0a.js.map} +1 -1
- package/dist/assets/{RunDataSearch-BrIWOZXO.js → RunDataSearch-D2CDg21N.js} +2 -2
- package/dist/assets/{RunDataSearch-BrIWOZXO.js.map → RunDataSearch-D2CDg21N.js.map} +1 -1
- package/dist/assets/RunDataTable-D597NRFD.js +2 -0
- package/dist/assets/{RunDataTable-B01U16vv.js.map → RunDataTable-D597NRFD.js.map} +1 -1
- package/dist/assets/{SamlOnboarding-CfbBlTNm.js → SamlOnboarding-Me669myi.js} +2 -2
- package/dist/assets/{SamlOnboarding-CfbBlTNm.js.map → SamlOnboarding-Me669myi.js.map} +1 -1
- package/dist/assets/{SettingsApiView-CuliNEKo.js → SettingsApiView-DV8pIHDw.js} +2 -2
- package/dist/assets/{SettingsApiView-CuliNEKo.js.map → SettingsApiView-DV8pIHDw.js.map} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-CeY4uqH-.js → SettingsCommunityNodesView-D_gtSdk3.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-CeY4uqH-.js.map → SettingsCommunityNodesView-D_gtSdk3.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets-CE7ObFx_.js → SettingsExternalSecrets-xprYKjAW.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets-CE7ObFx_.js.map → SettingsExternalSecrets-xprYKjAW.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-DQqNf_Q9.js → SettingsFakeDoorView-CKaSOYh5.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-DQqNf_Q9.js.map → SettingsFakeDoorView-CKaSOYh5.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-9hy5C87y.js → SettingsLdapView-BBCv2tmk.js} +2 -2
- package/dist/assets/{SettingsLdapView-9hy5C87y.js.map → SettingsLdapView-BBCv2tmk.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-Cc0h5DhT.js → SettingsLogStreamingView-HRIp8kyL.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-Cc0h5DhT.js.map → SettingsLogStreamingView-HRIp8kyL.js.map} +1 -1
- package/dist/assets/{SettingsPersonalView-Cs82ezMX.js → SettingsPersonalView-CsUb3SvK.js} +2 -2
- package/dist/assets/{SettingsPersonalView-Cs82ezMX.js.map → SettingsPersonalView-CsUb3SvK.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-Dr7R-QpH.js → SettingsSourceControl-BkPpVGsk.js} +2 -2
- package/dist/assets/{SettingsSourceControl-Dr7R-QpH.js.map → SettingsSourceControl-BkPpVGsk.js.map} +1 -1
- package/dist/assets/{SettingsSso-Di6lHXV2.js → SettingsSso-BueUV3RH.js} +2 -2
- package/dist/assets/{SettingsSso-Di6lHXV2.js.map → SettingsSso-BueUV3RH.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-g86Q7EQY.js → SettingsUsageAndPlan-DzDC9m54.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-g86Q7EQY.js.map → SettingsUsageAndPlan-DzDC9m54.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-dOWjUJTW.js → SettingsUsersView-CTd5MQLw.js} +2 -2
- package/dist/assets/{SettingsUsersView-dOWjUJTW.js.map → SettingsUsersView-CTd5MQLw.js.map} +1 -1
- package/dist/assets/{SettingsView-DQ0hQWFt.js → SettingsView-DMxqsNh0.js} +2 -2
- package/dist/assets/{SettingsView-DQ0hQWFt.js.map → SettingsView-DMxqsNh0.js.map} +1 -1
- package/dist/assets/{SetupView-CqT8d0D8.js → SetupView-tkyttChl.js} +2 -2
- package/dist/assets/{SetupView-CqT8d0D8.js.map → SetupView-tkyttChl.js.map} +1 -1
- package/dist/assets/{SetupWorkflowCredentialsButton-BR-ObOqw.js → SetupWorkflowCredentialsButton-B3HZvKQp.js} +2 -2
- package/dist/assets/{SetupWorkflowCredentialsButton-BR-ObOqw.js.map → SetupWorkflowCredentialsButton-B3HZvKQp.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-DHHtk6_-.js → SetupWorkflowFromTemplateView-DL3b-TZS.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-DHHtk6_-.js.map → SetupWorkflowFromTemplateView-DL3b-TZS.js.map} +1 -1
- package/dist/assets/{SigninView-2eLLF8DU.js → SigninView-BPLGsvzz.js} +2 -2
- package/dist/assets/{SigninView-2eLLF8DU.js.map → SigninView-BPLGsvzz.js.map} +1 -1
- package/dist/assets/{SignoutView-BQyCyjsK.js → SignoutView-BySf9D7k.js} +2 -2
- package/dist/assets/{SignoutView-BQyCyjsK.js.map → SignoutView-BySf9D7k.js.map} +1 -1
- package/dist/assets/{SignupView-ByYEkUpW.js → SignupView-EU3JWt4T.js} +2 -2
- package/dist/assets/{SignupView-ByYEkUpW.js.map → SignupView-EU3JWt4T.js.map} +1 -1
- package/dist/assets/{TemplateDetails-I6WMCxGm.js → TemplateDetails-Cemx-ozB.js} +2 -2
- package/dist/assets/{TemplateDetails-I6WMCxGm.js.map → TemplateDetails-Cemx-ozB.js.map} +1 -1
- package/dist/assets/{TemplateList-DRf0Cbhg.js → TemplateList-h3b91b7e.js} +2 -2
- package/dist/assets/{TemplateList-DRf0Cbhg.js.map → TemplateList-h3b91b7e.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-BYkDe49v.js → TemplatesCollectionView-aBX3f7Pp.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-BYkDe49v.js.map → TemplatesCollectionView-aBX3f7Pp.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-CiZ7aZcy.js → TemplatesSearchView-DyoC9WUR.js} +2 -2
- package/dist/assets/{TemplatesSearchView-CiZ7aZcy.js.map → TemplatesSearchView-DyoC9WUR.js.map} +1 -1
- package/dist/assets/{TemplatesView-zULLoEwu.js → TemplatesView-GQmC_sY8.js} +2 -2
- package/dist/assets/{TemplatesView-zULLoEwu.js.map → TemplatesView-GQmC_sY8.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-DptRLbdX.js → TemplatesWorkflowView-C-0pXdDh.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-DptRLbdX.js.map → TemplatesWorkflowView-C-0pXdDh.js.map} +1 -1
- package/dist/assets/{VariablesView-NcNcsjHY.js → VariablesView-BO5fdkwt.js} +2 -2
- package/dist/assets/{VariablesView-NcNcsjHY.js.map → VariablesView-BO5fdkwt.js.map} +1 -1
- package/dist/assets/{WorkerView-dtJzfgCM.js → WorkerView-C3Rdbsfq.js} +2 -2
- package/dist/assets/{WorkerView-dtJzfgCM.js.map → WorkerView-C3Rdbsfq.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-D6Zad1X2.js → WorkflowActivator-DQXSsw0V.js} +2 -2
- package/dist/assets/{WorkflowActivator-D6Zad1X2.js.map → WorkflowActivator-DQXSsw0V.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsInfoAccordion-C86A1CHv.js → WorkflowExecutionsInfoAccordion-DJPF47om.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-C86A1CHv.js.map → WorkflowExecutionsInfoAccordion-DJPF47om.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-DAfHDMth.js → WorkflowExecutionsLandingPage-DoSsHWxH.js} +2 -2
- package/dist/assets/{WorkflowExecutionsLandingPage-DAfHDMth.js.map → WorkflowExecutionsLandingPage-DoSsHWxH.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsPreview-C_EBlNX6.js → WorkflowExecutionsPreview-Dt23N5A4.js} +2 -2
- package/dist/assets/WorkflowExecutionsPreview-Dt23N5A4.js.map +1 -0
- package/dist/assets/WorkflowExecutionsView-CpAIVxYQ.js +2 -0
- package/dist/assets/WorkflowExecutionsView-CpAIVxYQ.js.map +1 -0
- package/dist/assets/{WorkflowHistory-DkdQ1koF.js → WorkflowHistory-D1-E_J_s.js} +2 -2
- package/dist/assets/{WorkflowHistory-DkdQ1koF.js.map → WorkflowHistory-D1-E_J_s.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-BPMBW_hz.js → WorkflowOnboardingView-fzAZuVh5.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-BPMBW_hz.js.map → WorkflowOnboardingView-fzAZuVh5.js.map} +1 -1
- package/dist/assets/{WorkflowPreview-CLzyAzmJ.js → WorkflowPreview-BkL2jDRm.js} +2 -2
- package/dist/assets/{WorkflowPreview-CLzyAzmJ.js.map → WorkflowPreview-BkL2jDRm.js.map} +1 -1
- package/dist/assets/{WorkflowsView-CzJx_-P5.js → WorkflowsView-rbygROmM.js} +2 -2
- package/dist/assets/{WorkflowsView-CzJx_-P5.js.map → WorkflowsView-rbygROmM.js.map} +1 -1
- package/dist/assets/{cloud-CRMEbZfJ.js → cloud-B90x0-JC.js} +2 -2
- package/dist/assets/{cloud-CRMEbZfJ.js.map → cloud-B90x0-JC.js.map} +1 -1
- package/dist/assets/{collaboration.store-Co5wlk8y.js → collaboration.store-ElxCV91F.js} +2 -2
- package/dist/assets/{collaboration.store-Co5wlk8y.js.map → collaboration.store-ElxCV91F.js.map} +1 -1
- package/dist/assets/index-BE0Xl-jy.js +341 -0
- package/dist/assets/index-BE0Xl-jy.js.map +1 -0
- package/dist/assets/{nodeCreator.store-CTXKjjQB.js → nodeCreator.store-Q1T99YCl.js} +2 -2
- package/dist/assets/{nodeCreator.store-CTXKjjQB.js.map → nodeCreator.store-Q1T99YCl.js.map} +1 -1
- package/dist/assets/{templateActions-CIRsIG2W.js → templateActions-B7R6qRak.js} +2 -2
- package/dist/assets/{templateActions-CIRsIG2W.js.map → templateActions-B7R6qRak.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-BzC-1xF-.js → useExecutionDebugging-BJ0CgMh8.js} +2 -2
- package/dist/assets/{useExecutionDebugging-BzC-1xF-.js.map → useExecutionDebugging-BJ0CgMh8.js.map} +1 -1
- package/dist/assets/{useExecutionHelpers-C2K8pfbF.js → useExecutionHelpers-D3294Pbg.js} +2 -2
- package/dist/assets/{useExecutionHelpers-C2K8pfbF.js.map → useExecutionHelpers-D3294Pbg.js.map} +1 -1
- package/dist/assets/{usePushConnection-EMXpPhl-.js → usePushConnection-CsYeEXN4.js} +2 -2
- package/dist/assets/{usePushConnection-EMXpPhl-.js.map → usePushConnection-CsYeEXN4.js.map} +1 -1
- package/dist/assets/{useUserHelpers-Bn_ZV9Jv.js → useUserHelpers-CzNhI0vP.js} +2 -2
- package/dist/assets/{useUserHelpers-Bn_ZV9Jv.js.map → useUserHelpers-CzNhI0vP.js.map} +1 -1
- package/dist/assets/{useWorkflowActivate-BwVActuc.js → useWorkflowActivate-D8iK20ua.js} +2 -2
- package/dist/assets/{useWorkflowActivate-BwVActuc.js.map → useWorkflowActivate-D8iK20ua.js.map} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-DHmcKhO-.js.map +0 -1
- package/dist/assets/MainHeader-CMxbwL4C.js +0 -2
- package/dist/assets/NodeView-C-hQ3_xD.js +0 -3
- package/dist/assets/NodeView-C-hQ3_xD.js.map +0 -1
- package/dist/assets/RunDataTable-B01U16vv.js +0 -2
- package/dist/assets/WorkflowExecutionsPreview-C_EBlNX6.js.map +0 -1
- package/dist/assets/WorkflowExecutionsView-Nm1Oo9El.js +0 -2
- package/dist/assets/WorkflowExecutionsView-Nm1Oo9El.js.map +0 -1
- package/dist/assets/index-Dtri_pSJ.js +0 -341
- package/dist/assets/index-Dtri_pSJ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["ndvEventBus","createEventBus","props","__props","emit","__emit","editName","ref","newName","input","editable","computed","onEdit","nextTick","onRename","externalHooks","useExternalHooks","ndvStore","useNDVStore","workflowsStore","useWorkflowsStore","i18n","useI18n","telemetry","useTelemetry","activeNode","isCommunityNode","nodeType","isCommunityPackageName","packageName","_a","documentationUrl","utmParams","primaryDocUrl","_d","_c","_b","NPM_PACKAGE_DOCS_BASE_URL","BUILTIN_NODES_DOCS_URL","options","COMMUNITY_NODES_INSTALLATION_DOCS_URL","onTabSelect","tab","NodeConnectionType","onTooltipClick","event","_sfc_main$k","defineComponent","router","useRouter","clipboard","useClipboard","workflowHelpers","useWorkflowHelpers","useToast","OPEN_URL_PANEL_TRIGGER_NODE_TYPES","PRODUCTION_ONLY_TRIGGER_NODE_TYPES","webhook","webhookData","CHAT_TRIGGER_NODE_TYPE","FORM_TRIGGER_NODE_TYPE","webhookUrl","method","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_7","_hoisted_8","_createElementVNode","_hoisted_11","_hoisted_12","visibleWebhookUrls","_ctx","_openBlock","isMinimized","_normalizeClass","_cache","$event","_component_font_awesome_icon","_createTextVNode","_toDisplayString","_createVNode","_withCtx","_createCommentVNode","_createElementBlock","_component_el_row","_component_el_col","showUrlFor","_component_n8n_radio_buttons","urlOptions","_Fragment","_renderList","index","_createBlock","_component_n8n_tooltip","getWebhookHttpMethod","_hoisted_9","copyWebhookUrl","getWebhookUrlDisplay","_hoisted_13","_hoisted_15","nodeTypesStore","useNodeTypesStore","nodeHelpers","useNodeHelpers","debounce","useDebounce","possibleConnections","expandedGroups","shouldShowNodeInputIssues","nodeData","workflow","nodeInputIssues","issues","connectedNodes","acc","connection","nodes","getINodesFromNames","getConnectionConfig","connectionType","c","isMultiConnection","connectionConfig","shouldShowConnectionTooltip","expandConnectionGroup","isExpanded","g","names","name","node","matchedNodeType","stringifiedIssues","NodeHelpers.nodeIssuesToString","hasInputIssues","isNodeInputConfiguration","getPossibleSubInputConnections","NodeHelpers.getNodeInputs","onNodeClick","nodeName","onPlusClick","connectionNodes","showNodeInputsIssues","watch","__expose","NODE_TEST_STEP_POPUP_COUNT_KEY","MAX_POPUP_COUNT","POPUP_UPDATE_DELAY","_sfc_main$i","pinnedData","usePinnedData","runWorkflow","stopCurrentExecution","useRunWorkflow","useMessage","mapStores","useUIStore","triggeredNode","MANUAL_TRIGGER_NODE_TYPE","WEBHOOK_NODE_TYPE","waitingOnWebhook","executedNode","error","count","now","nodeViewEventBus","shouldUnpinAndExecute","MODAL_CONFIRM","telemetryPayload","_resolveComponent","tooltipText","loading","disabled","disabledHint","buttonLabel","type","size","isListeningForEvents","isTriggerNode","$locale","_sfc_main$h","NodeTitle","NodeCredentials","ParameterInputList","NodeSettingsTabs","NodeWebhooks","NDVSubConnections","NodeExecuteButton","showMessage","useHistoryStore","useCredentialsStore","useWorkflowsEEStore","workflowNode","inputs","NodeHelpers.getConnectionTypes","shortNodeType","NodeHelpers.isSingleExecution","item","credential","nodeCredential","CUSTOM_NODES_DOCS_URL","MAIN_NODE_PANEL_WIDTH","importCurlEventBus","parameters","parameter","parameterName","value","nameParts","lastNamePart","isArray","lastNameParts","removedNodeValue","remainingNodeValues","tempValue","get","removedArrayNodeValue","remainingArrayNodeValues","set","deepCopy","updateInformation","RenameNodeCommand","parameterData","newValue","nodeNameBefore","sendData","nodeParameters","NodeHelpers.getNodeParameters","oldNodeParameters","parameterPath","parameterPathArray","path","data","unset","key","SHOULD_CLEAR_NODE_OUTPUTS","nodeParameterValues","updatedParameter","prop","displayOptions","showCondition","hideCondition","hasValidOptions","isINodePropertyCollectionList","isINodePropertiesList","option","isINodePropertyOptionsList","displayParameter","foundNodeSettings","nodeSetting","_hoisted_10","_withModifiers","_component_NodeTitle","isReadOnly","_component_NodeExecuteButton","outputPanelEditMode","executeButtonTooltip","onStopExecution","nodeValid","openPanel","pushRef","$style","_component_n8n_text","_component_i18n_t","onMissingNodeTextClick","_hoisted_6","onMissingNodeLearnMoreLinkClick","hasForeignCredential","_component_n8n_notice","_withDirectives","_component_NodeWebhooks","nodeValuesInitialized","parametersNoneSetting","_component_ParameterInputList","nodeValues","valueChanged","onParameterBlur","hiddenIssuesInputs","parametersSetting","nodeSettings","_component_NDVSubConnections","blockUI","_sfc_main$g","draggablePosition","activeElement","_sfc_render","$props","$setup","$data","$options","isDragging","_renderSlot","_Teleport","_normalizeStyle","draggingEl","_sfc_main$f","Draggable","onDragStart","onDragEnd","canMoveLeft","moveNodeDirection","direction","matchedDirectionNode","onKeyDown","e","matchingDirection","rootName","connectionGroups","tooltipPositionMapper","onMounted","onBeforeUnmount","SIDE_MARGIN","SIDE_PANELS_MARGIN","MIN_PANEL_WIDTH","PANEL_WIDTH","PANEL_WIDTH_LARGE","initialMainPanelWidth","_sfc_main$d","PanelDragButton","NDVFloatingNodes","callDebounced","supportedDirections","hasInput","outputPanelRelativeLeft","panelMinLeft","currentRelativeLeftDelta","multiplier","minRelativeWidth","windowWidth","isBelowMinLeft","isMaxRight","width","relativeWidth","mainPanelRelativeWidth","relativeLeft","mainPanelRelativeLeft","mainPanelRelativeRight","isMinLeft","isInputless","position","positionByName","px","x","relativeDistance","storedPanelWidthData","useStorage","LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH","parsedWidth","initialPosition","_component_NDVFloatingNodes","mainPanelStyles","relativeWidthToPx","mainPanelDimensions","onResizeDebounced","onResizeStart","onResizeEnd","hideInputAndOutput","isDraggable","canMoveRight","onDrag","sanitizeOptions","defaults","_sfc_main$c","sanitizeHtml","isLoading","embedSource","embedClass","id","binaryData","fileName","fileType","mimeType","isJSONData","isHTMLData","jsonParse","binaryUrl","fetchedData","workflowRunData","workflowExecution","executionData","binaryDataLocal","closeWindow","toast","rootStore","useRootStore","displayCause","MAX_DISPLAY_DATA_SIZE","n8nVersion","baseUrl","instanceType","hasManyInputItems","nodeDefaultName","prepareRawMessages","returnData","errorMessage","getErrorMessage","message","parts","part","parsed","nodeVersionTag","latestNodeVersion","prepareDescription","description","getErrorDescription","interpolate","parameterDisplayName","addItemIndexSuffix","itemIndexSuffix","isSubNodeError","isNonEmptyString","fullPath","params","getParameterName","pathParts","currentParameterName","arrayMatch","currentParameter","copyErrorDetails","errorInfo","errorDetails","n8nDetails","_e","_f","copySuccess","locale","visible","RunDataTable","defineAsyncComponent","__vitePreload","RunDataJson","RunDataSchema","RunDataHtml","RunDataSearch","_sfc_main$7","BinaryDataDisplay","NodeErrorView","JsonEditor","RunDataPinButton","toRef","MAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW","MAX_DISPLAY_ITEMS_AUTO_ALL","useSourceControlStore","DATA_PINNING_DOCS_URL","DATA_EDITING_DOCS_URL","schemaView","HTML_NODE_TYPE","hints","runData","taskData","offset","executionDataToJson","capitalize","branches","totalItemsCount","itemsCount","items","outputName","appendBranchWord","NODE_TYPES_EXCLUDED_FROM_OUTPUT_NAME_APPEND","parentNode","parentNodeData","newNode","prevNode","isEmpty","prevData","isEqual","newData","branchIndex","newSearch","NodeHelpers.getNodeOutputs","hint","location","whenToDisplay","executionHints","nodeHints","NodeHelpers.getNodeHints","itemIndex","pinDataDiscoveryFlag","LOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG","dataPinningEventBus","LOCAL_STORAGE_PIN_DATA_DISCOVERY_CANVAS_FLAG","origin","inputData","clearJsonKey","TEST_PIN_DATA","clearedValue","source","maxPage","pageSize","displayMode","previous","dataContainerRef","dataDisplay","i","itemsLabel","runIndex","outputIndex","json","searchInObject","rawInputData","pinOrLiveData","outputTypes","outputs","fileExtension","url","saveAs","bufferString","blob","d","outputConfiguration","isObject","jsonItems","byteSize","run","canPinData","_component_n8n_callout","dataPinningDocsUrl","_component_n8n_link","isReadOnlyRoute","binaryDataDisplayVisible","closeBinaryDataDisplay","buttons","_component_n8n_icon_button","editMode","_vShow","_component_RunDataPinButton","readOnlyEnv","isControlledPinDataTooltip","pinDataDiscoveryTooltipVisible","_component_n8n_button","extraControlsLocation","maxRunIndex","_component_n8n_select","_component_n8n_option","canLinkRuns","linkedRuns","showIOSearch","search","_component_RunDataSearch","paneType","isPaneActive","activatePane","maxOutputIndex","hasRunError","dataCount","isArtificialRecoveredEventItem","unfilteredDataCount","isExecuting","_component_n8n_spinner","executingMessage","_component_JsonEditor","_component_n8n_info_tip","dataEditingDocsUrl","_component_NodeErrorView","hasNodeRun","isPaneTypeInput","$slots","workflowRunErrorAsNodeError","noDataInBranchMessage","dataSizeInMB","showTooMuchData","jsonData","showIoSearchNoMatchContent","_Suspense","_component_RunDataTable","currentPageOffset","$emit","onDisplayModeChange","_component_RunDataJson","inputDataPage","_component_RunDataHtml","_component_RunDataSchema","mappingEnabled","binaryDataEntry","isViewable","displayBinaryData","isDownloadable","downloadBinaryData","isSchemaView","_component_el_pagination","_component_n8n_block_ui","_sfc_main$6","date","time","convertToDisplayDateComponents","hasPinData","runMetadata","OUTPUT_TYPE","_sfc_main$5","RunData","RunInfo","RunDataAi","storeToRefs","isSubNodeType","useNodeType","resultData","updatedAt","runAt","runDataRef","outputMode","_component_RunData","isNodeRunning","onRunIndexChange","onLinkRun","onUnlinkRun","_createSlots","hasAiMetadata","onUpdateOutputMode","runTaskData","_component_RunInfo","args","_component_RunDataAi","selectedInputNode","selectedInputNodeType","inputNodes","fullNode","isPresent","activeNodeType","isMultiInputNode","getMultipleNodesText","connectedInputs","inputIndex","title","truncated","subtitle","depth","multipleNodesText","onInputNodeChange","_sfc_main$2","WireMeUp","InputNodeSelect","toIgnore","START_NODE_TYPE","CRON_NODE_TYPE","INTERVAL_NODE_TYPE","output","executingNode","parent","val","curr","prev","mappedNode","isExecutingPrevious","connectedCurrentNodeOutputs","currentNodeDepth","isActiveNodeConfig","readOnly","currentNodeName","parentNodes","showDraggableHintWithDelay","onNodeExecute","_component_WireMeUp","isMappingMode","_resolveDynamicComponent","rootNodesParents","_sfc_main$1","CopyInput","NodeIcon","panel","isTriggerPanelObject","hideContent","hideContentValue","getTriggerNodeServiceName","httpMethod","serviceName","target","VIEWS","WORKFLOW_SETTINGS_MODAL_KEY","_Transition","_component_n8n_pulse","_component_NodeIcon","isWebhookNode","webhookHttpMethod","_component_CopyInput","onTestLinkCopied","listeningHint","displayChatButton","header","_component_n8n_heading","activationHint","executionsHelp","_component_n8n_info_accordion","executionsHelpEventBus","onLinkClick","workflowActivate","useWorkflowActivate","uiStore","settingsStore","useSettingsStore","deviceSupport","useDeviceSupport","settingsEventBus","redrawRequired","runInputIndex","runOutputIndex","isLinkingEnabled","selectedInput","triggerWaitingWarningEnabled","mainPanelPosition","avgInputRowHeight","avgOutputRowHeight","isInputPaneActive","isOutputPaneActive","isPairedItemHoveringEnabled","workflowRunning","showTriggerWaitingWarning","parentNodeName","inputNodeName","inputNode","inputSize","showTriggerPanel","override","isWebhookBasedNode","isPollingNode","hasOutputConnection","outgoingConnections","isExecutableTriggerNode","EXECUTABLE_TRIGGER_NODE_TYPES","isActiveStickyNode","STICKY_NODE_TYPE","maxOutputRun","outputRun","maxInputRun","inputRun","linked","featureRequestUrl","BASE_NODE_SURVEY_URL","isWorkflowRunning","isExecutionWaitingForWebhook","blockUi","foreignCredentials","credentials","usedCredentials","foreignCredentialsArray","EnterpriseEditionFeature","setIsTooltipVisible","isTooltipVisible","onInputItemHover","onInputTableMounted","onWorkflowActivate","onOutputItemHover","onFeatureRequestClick","onPanelsInit","onLinkRunToOutput","trackLinking","pane","openSettings","onLinkRunToInput","onSwitchSelectedNode","nodeTypeName","onOpenConnectionNodeCreator","close","trackRunChange","onRunOutputIndexChange","onRunInputIndexChange","onOutputTableMounted","activateInputPane","activateOutputPane","onSearch","oldNode"],"ignoreList":[],"sources":["../../src/event-bus/ndv.ts","../../src/components/NodeTitle.vue","../../src/components/NodeSettingsTabs.vue","../../src/components/NodeWebhooks.vue","../../src/components/NDVSubConnections.vue","../../src/components/NodeExecuteButton.vue","../../src/components/NodeSettings.vue","../../src/components/Draggable.vue","../../src/components/PanelDragButton.vue","../../src/components/NDVFloatingNodes.vue","../../src/components/NDVDraggablePanels.vue","../../src/components/RunDataHtml.vue","../../src/components/BinaryDataDisplayEmbed.vue","../../src/components/BinaryDataDisplay.vue","../../src/components/Error/NodeErrorView.vue","../../src/components/RunDataPinButton.vue","../../src/components/RunData.vue","../../src/components/RunInfo.vue","../../src/components/OutputPanel.vue","../../src/components/InputNodeSelect.vue","../../src/components/WireMeUp.vue","../../src/components/InputPanel.vue","../../src/components/TriggerPanel.vue","../../src/components/NodeDetailsView.vue"],"sourcesContent":["import { createEventBus } from 'n8n-design-system/utils';\n\nexport const ndvEventBus = createEventBus();\n","<template>\n\t<span :class=\"$style.container\" data-test-id=\"node-title-container\" @click=\"onEdit\">\n\t\t<span :class=\"$style.iconWrapper\">\n\t\t\t<NodeIcon :node-type=\"nodeType\" :size=\"18\" />\n\t\t</span>\n\t\t<n8n-popover placement=\"right\" width=\"200\" :visible=\"editName\" :disabled=\"!editable\">\n\t\t\t<div\n\t\t\t\t:class=\"$style.editContainer\"\n\t\t\t\t@keydown.enter=\"onRename\"\n\t\t\t\t@keydown.stop\n\t\t\t\t@keydown.esc=\"editName = false\"\n\t\t\t>\n\t\t\t\t<n8n-text :bold=\"true\" color=\"text-base\" tag=\"div\">{{\n\t\t\t\t\t$locale.baseText('ndv.title.renameNode')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-input ref=\"input\" v-model=\"newName\" size=\"small\" data-test-id=\"node-rename-input\" />\n\t\t\t\t<div :class=\"$style.editButtons\">\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t:label=\"$locale.baseText('ndv.title.cancel')\"\n\t\t\t\t\t\t@click=\"editName = false\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t:label=\"$locale.baseText('ndv.title.rename')\"\n\t\t\t\t\t\t@click=\"onRename\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<template #reference>\n\t\t\t\t<div :class=\"{ [$style.title]: true, [$style.hoverable]: editable }\">\n\t\t\t\t\t{{ modelValue }}\n\t\t\t\t\t<div :class=\"$style.editIconContainer\">\n\t\t\t\t\t\t<font-awesome-icon v-if=\"editable\" :class=\"$style.editIcon\" icon=\"pencil-alt\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</n8n-popover>\n\t</span>\n</template>\n\n<script setup lang=\"ts\">\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport { computed, nextTick, ref } from 'vue';\n\ntype Props = {\n\tmodelValue: string;\n\tnodeType?: INodeTypeDescription | null;\n\treadOnly?: boolean;\n};\n\nconst props = withDefaults(defineProps<Props>(), {\n\tmodelValue: '',\n\tnodeType: undefined,\n\treadOnly: false,\n});\nconst emit = defineEmits<{\n\t(event: 'update:model-value', value: string): void;\n}>();\nconst editName = ref(false);\nconst newName = ref('');\nconst input = ref<HTMLInputElement>();\n\nconst editable = computed(() => !props.readOnly && window === window.parent);\n\nasync function onEdit() {\n\tnewName.value = props.modelValue;\n\teditName.value = true;\n\tawait nextTick();\n\tif (input.value) {\n\t\tinput.value.focus();\n\t}\n}\n\nfunction onRename() {\n\tif (newName.value.trim() !== '') {\n\t\temit('update:model-value', newName.value.trim());\n\t}\n\n\teditName.value = false;\n}\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\tfont-weight: var(--font-weight-bold);\n\tdisplay: flex;\n\tfont-size: var(--font-size-m);\n\tline-height: var(--font-line-height-compact);\n\toverflow-wrap: anywhere;\n\tpadding-right: var(--spacing-s);\n\toverflow: hidden;\n}\n\n.title {\n\tmax-height: 100px;\n\tdisplay: -webkit-box;\n\t-webkit-line-clamp: 5;\n\t-webkit-box-orient: vertical;\n\tcolor: var(--color-text-dark);\n}\n\n.hoverable {\n\t&:hover {\n\t\tcursor: pointer;\n\t\t.editIcon {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n}\n\n.iconWrapper {\n\tdisplay: inline-flex;\n\tmargin-right: var(--spacing-2xs);\n}\n\n.editIcon {\n\tdisplay: none;\n\tfont-size: var(--font-size-xs);\n\tcolor: var(--color-text-base);\n\tposition: absolute;\n\tbottom: 0;\n}\n\n.editIconContainer {\n\tdisplay: inline-block;\n\tposition: relative;\n\twidth: 0;\n}\n\n.editButtons {\n\ttext-align: right;\n\tmargin-top: var(--spacing-s);\n\n\t> * {\n\t\tmargin-left: var(--spacing-4xs);\n\t}\n}\n\n.editContainer {\n\ttext-align: left;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-4xs);\n\t}\n}\n</style>\n","<template>\n\t<N8nTabs\n\t\t:options=\"options\"\n\t\t:model-value=\"modelValue\"\n\t\t@update:model-value=\"onTabSelect\"\n\t\t@tooltip-click=\"onTooltipClick\"\n\t/>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ITab } from '@/Interface';\nimport {\n\tBUILTIN_NODES_DOCS_URL,\n\tCOMMUNITY_NODES_INSTALLATION_DOCS_URL,\n\tNPM_PACKAGE_DOCS_BASE_URL,\n} from '@/constants';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport { NodeConnectionType } from 'n8n-workflow';\nimport { computed } from 'vue';\n\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useI18n } from '@/composables/useI18n';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { isCommunityPackageName } from '@/utils/nodeTypesUtils';\n\ntype Tab = 'settings' | 'params';\ntype Props = {\n\tmodelValue?: Tab;\n\tnodeType?: INodeTypeDescription | null;\n\tpushRef?: string;\n};\n\nconst props = withDefaults(defineProps<Props>(), {\n\tmodelValue: 'params',\n\tnodeType: undefined,\n\tpushRef: '',\n});\nconst emit = defineEmits<{\n\t(event: 'update:model-value', tab: Tab): void;\n}>();\n\nconst externalHooks = useExternalHooks();\nconst ndvStore = useNDVStore();\nconst workflowsStore = useWorkflowsStore();\nconst i18n = useI18n();\nconst telemetry = useTelemetry();\n\nconst activeNode = computed(() => ndvStore.activeNode);\n\nconst isCommunityNode = computed(() => {\n\tconst nodeType = props.nodeType;\n\tif (nodeType) {\n\t\treturn isCommunityPackageName(nodeType.name);\n\t}\n\treturn false;\n});\n\nconst packageName = computed(() => props.nodeType?.name.split('.')[0] ?? '');\n\nconst documentationUrl = computed(() => {\n\tconst nodeType = props.nodeType;\n\n\tif (!nodeType) {\n\t\treturn '';\n\t}\n\n\tif (nodeType.documentationUrl && nodeType.documentationUrl.startsWith('http')) {\n\t\treturn nodeType.documentationUrl;\n\t}\n\n\tconst utmParams = new URLSearchParams({\n\t\tutm_source: 'n8n_app',\n\t\tutm_medium: 'node_settings_modal-credential_link',\n\t\tutm_campaign: nodeType.name,\n\t});\n\n\t// Built-in node documentation available via its codex entry\n\tconst primaryDocUrl = nodeType.codex?.resources?.primaryDocumentation?.[0]?.url;\n\tif (primaryDocUrl) {\n\t\treturn `${primaryDocUrl}?${utmParams.toString()}`;\n\t}\n\n\tif (isCommunityNode.value) {\n\t\treturn `${NPM_PACKAGE_DOCS_BASE_URL}${packageName.value}`;\n\t}\n\n\t// Fallback to the root of the node documentation\n\treturn `${BUILTIN_NODES_DOCS_URL}?${utmParams.toString()}`;\n});\n\nconst options = computed<ITab[]>(() => {\n\tconst options: ITab[] = [\n\t\t{\n\t\t\tlabel: i18n.baseText('nodeSettings.parameters'),\n\t\t\tvalue: 'params',\n\t\t},\n\t\t{\n\t\t\tlabel: i18n.baseText('nodeSettings.settings'),\n\t\t\tvalue: 'settings',\n\t\t},\n\t];\n\n\tif (isCommunityNode.value) {\n\t\toptions.push({\n\t\t\ticon: 'cube',\n\t\t\tvalue: 'communityNode',\n\t\t\talign: 'right',\n\t\t\ttooltip: i18n.baseText('generic.communityNode.tooltip', {\n\t\t\t\tinterpolate: {\n\t\t\t\t\tdocUrl: COMMUNITY_NODES_INSTALLATION_DOCS_URL,\n\t\t\t\t\tpackageName: packageName.value,\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t}\n\n\tif (documentationUrl.value) {\n\t\toptions.push({\n\t\t\tlabel: i18n.baseText('nodeSettings.docs'),\n\t\t\tvalue: 'docs',\n\t\t\thref: documentationUrl.value,\n\t\t\talign: 'right',\n\t\t});\n\t}\n\n\treturn options;\n});\n\nfunction onTabSelect(tab: string) {\n\tif (tab === 'docs' && props.nodeType) {\n\t\tvoid externalHooks.run('dataDisplay.onDocumentationUrlClick', {\n\t\t\tnodeType: props.nodeType,\n\t\t\tdocumentationUrl: documentationUrl.value,\n\t\t});\n\n\t\ttelemetry.track('User clicked ndv link', {\n\t\t\tnode_type: activeNode.value?.type,\n\t\t\tworkflow_id: workflowsStore.workflowId,\n\t\t\tpush_ref: props.pushRef,\n\t\t\tpane: NodeConnectionType.Main,\n\t\t\ttype: 'docs',\n\t\t});\n\t}\n\n\tif (tab === 'settings' && props.nodeType) {\n\t\ttelemetry.track('User viewed node settings', {\n\t\t\tnode_type: props.nodeType.name,\n\t\t\tworkflow_id: workflowsStore.workflowId,\n\t\t});\n\t}\n\n\tif (tab === 'settings' || tab === 'params') {\n\t\temit('update:model-value', tab);\n\t}\n}\n\nfunction onTooltipClick(tab: string, event: MouseEvent) {\n\tif (tab === 'communityNode' && (event.target as Element).localName === 'a') {\n\t\ttelemetry.track('user clicked cnr docs link', { source: 'node details view' });\n\t}\n}\n</script>\n\n<style lang=\"scss\">\n#communityNode > div {\n\tcursor: auto;\n\tpadding-right: 0;\n\tpadding-left: 0;\n\n\t&:hover {\n\t\tcolor: unset;\n\t}\n}\n</style>\n","<template>\n\t<div v-if=\"webhooksNode.length && visibleWebhookUrls.length > 0\" class=\"webhooks\">\n\t\t<div\n\t\t\tclass=\"clickable headline\"\n\t\t\t:class=\"{ expanded: !isMinimized }\"\n\t\t\t:title=\"isMinimized ? baseText.clickToDisplay : baseText.clickToHide\"\n\t\t\t@click=\"isMinimized = !isMinimized\"\n\t\t>\n\t\t\t<font-awesome-icon icon=\"angle-right\" class=\"minimize-button minimize-icon\" />\n\t\t\t{{ baseText.toggleTitle }}\n\t\t</div>\n\t\t<el-collapse-transition>\n\t\t\t<div v-if=\"!isMinimized\" class=\"node-webhooks\">\n\t\t\t\t<div v-if=\"!isProductionOnly\" class=\"url-selection\">\n\t\t\t\t\t<el-row>\n\t\t\t\t\t\t<el-col :span=\"24\">\n\t\t\t\t\t\t\t<n8n-radio-buttons v-model=\"showUrlFor\" :options=\"urlOptions\" />\n\t\t\t\t\t\t</el-col>\n\t\t\t\t\t</el-row>\n\t\t\t\t</div>\n\n\t\t\t\t<n8n-tooltip\n\t\t\t\t\tv-for=\"(webhook, index) in visibleWebhookUrls\"\n\t\t\t\t\t:key=\"index\"\n\t\t\t\t\tclass=\"item\"\n\t\t\t\t\t:content=\"baseText.clickToCopy\"\n\t\t\t\t\tplacement=\"left\"\n\t\t\t\t>\n\t\t\t\t\t<div v-if=\"isWebhookMethodVisible(webhook)\" class=\"webhook-wrapper\">\n\t\t\t\t\t\t<div class=\"http-field\">\n\t\t\t\t\t\t\t<div class=\"http-method\">{{ getWebhookHttpMethod(webhook) }}<br /></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"url-field\">\n\t\t\t\t\t\t\t<div class=\"webhook-url left-ellipsis clickable\" @click=\"copyWebhookUrl(webhook)\">\n\t\t\t\t\t\t\t\t{{ getWebhookUrlDisplay(webhook) }}<br />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-else class=\"webhook-wrapper\">\n\t\t\t\t\t\t<div class=\"url-field-full-width\">\n\t\t\t\t\t\t\t<div class=\"webhook-url left-ellipsis clickable\" @click=\"copyWebhookUrl(webhook)\">\n\t\t\t\t\t\t\t\t{{ getWebhookUrlDisplay(webhook) }}<br />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</div>\n\t\t</el-collapse-transition>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { INodeTypeDescription, IWebhookDescription } from 'n8n-workflow';\nimport { defineComponent } from 'vue';\n\nimport { useToast } from '@/composables/useToast';\nimport {\n\tCHAT_TRIGGER_NODE_TYPE,\n\tFORM_TRIGGER_NODE_TYPE,\n\tOPEN_URL_PANEL_TRIGGER_NODE_TYPES,\n\tPRODUCTION_ONLY_TRIGGER_NODE_TYPES,\n} from '@/constants';\nimport { useClipboard } from '@/composables/useClipboard';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\nimport { useRouter } from 'vue-router';\n\nexport default defineComponent({\n\tname: 'NodeWebhooks',\n\tprops: [\n\t\t'node', // NodeUi\n\t\t'nodeType', // INodeTypeDescription\n\t],\n\tsetup() {\n\t\tconst router = useRouter();\n\t\tconst clipboard = useClipboard();\n\t\tconst workflowHelpers = useWorkflowHelpers({ router });\n\t\treturn {\n\t\t\tclipboard,\n\t\t\tworkflowHelpers,\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisMinimized: this.nodeType && !OPEN_URL_PANEL_TRIGGER_NODE_TYPES.includes(this.nodeType.name),\n\t\t\tshowUrlFor: 'test',\n\t\t};\n\t},\n\tcomputed: {\n\t\tisProductionOnly(): boolean {\n\t\t\treturn this.nodeType && PRODUCTION_ONLY_TRIGGER_NODE_TYPES.includes(this.nodeType.name);\n\t\t},\n\t\turlOptions(): Array<{ label: string; value: string }> {\n\t\t\treturn [\n\t\t\t\t...(this.isProductionOnly ? [] : [{ label: this.baseText.testUrl, value: 'test' }]),\n\t\t\t\t{\n\t\t\t\t\tlabel: this.baseText.productionUrl,\n\t\t\t\t\tvalue: 'production',\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\tvisibleWebhookUrls(): IWebhookDescription[] {\n\t\t\treturn this.webhooksNode.filter((webhook) => {\n\t\t\t\tif (typeof webhook.ndvHideUrl === 'string') {\n\t\t\t\t\treturn !this.workflowHelpers.getWebhookExpressionValue(webhook, 'ndvHideUrl');\n\t\t\t\t}\n\n\t\t\t\treturn !webhook.ndvHideUrl;\n\t\t\t});\n\t\t},\n\t\twebhooksNode(): IWebhookDescription[] {\n\t\t\tif (this.nodeType === null || this.nodeType.webhooks === undefined) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn (this.nodeType as INodeTypeDescription).webhooks!.filter(\n\t\t\t\t(webhookData) => webhookData.restartWebhook !== true,\n\t\t\t);\n\t\t},\n\t\tbaseText() {\n\t\t\tconst nodeType = this.nodeType.name;\n\t\t\tswitch (nodeType) {\n\t\t\t\tcase CHAT_TRIGGER_NODE_TYPE:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttoggleTitle: this.$locale.baseText('nodeWebhooks.webhookUrls.chatTrigger'),\n\t\t\t\t\t\tclickToDisplay: this.$locale.baseText(\n\t\t\t\t\t\t\t'nodeWebhooks.clickToDisplayWebhookUrls.formTrigger',\n\t\t\t\t\t\t),\n\t\t\t\t\t\tclickToHide: this.$locale.baseText('nodeWebhooks.clickToHideWebhookUrls.chatTrigger'),\n\t\t\t\t\t\tclickToCopy: this.$locale.baseText('nodeWebhooks.clickToCopyWebhookUrls.chatTrigger'),\n\t\t\t\t\t\ttestUrl: this.$locale.baseText('nodeWebhooks.testUrl'),\n\t\t\t\t\t\tproductionUrl: this.$locale.baseText('nodeWebhooks.productionUrl'),\n\t\t\t\t\t\tcopyTitle: this.$locale.baseText('nodeWebhooks.showMessage.title.chatTrigger'),\n\t\t\t\t\t\tcopyMessage: this.$locale.baseText('nodeWebhooks.showMessage.message.chatTrigger'),\n\t\t\t\t\t};\n\n\t\t\t\tcase FORM_TRIGGER_NODE_TYPE:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttoggleTitle: this.$locale.baseText('nodeWebhooks.webhookUrls.formTrigger'),\n\t\t\t\t\t\tclickToDisplay: this.$locale.baseText(\n\t\t\t\t\t\t\t'nodeWebhooks.clickToDisplayWebhookUrls.formTrigger',\n\t\t\t\t\t\t),\n\t\t\t\t\t\tclickToHide: this.$locale.baseText('nodeWebhooks.clickToHideWebhookUrls.formTrigger'),\n\t\t\t\t\t\tclickToCopy: this.$locale.baseText('nodeWebhooks.clickToCopyWebhookUrls.formTrigger'),\n\t\t\t\t\t\ttestUrl: this.$locale.baseText('nodeWebhooks.testUrl'),\n\t\t\t\t\t\tproductionUrl: this.$locale.baseText('nodeWebhooks.productionUrl'),\n\t\t\t\t\t\tcopyTitle: this.$locale.baseText('nodeWebhooks.showMessage.title.formTrigger'),\n\t\t\t\t\t\tcopyMessage: this.$locale.baseText('nodeWebhooks.showMessage.message.formTrigger'),\n\t\t\t\t\t};\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttoggleTitle: this.$locale.baseText('nodeWebhooks.webhookUrls'),\n\t\t\t\t\t\tclickToDisplay: this.$locale.baseText('nodeWebhooks.clickToDisplayWebhookUrls'),\n\t\t\t\t\t\tclickToHide: this.$locale.baseText('nodeWebhooks.clickToHideWebhookUrls'),\n\t\t\t\t\t\tclickToCopy: this.$locale.baseText('nodeWebhooks.clickToCopyWebhookUrls'),\n\t\t\t\t\t\ttestUrl: this.$locale.baseText('nodeWebhooks.testUrl'),\n\t\t\t\t\t\tproductionUrl: this.$locale.baseText('nodeWebhooks.productionUrl'),\n\t\t\t\t\t\tcopyTitle: this.$locale.baseText('nodeWebhooks.showMessage.title'),\n\t\t\t\t\t\tcopyMessage: undefined,\n\t\t\t\t\t};\n\t\t\t}\n\t\t},\n\t},\n\twatch: {\n\t\tnode() {\n\t\t\tthis.isMinimized = !OPEN_URL_PANEL_TRIGGER_NODE_TYPES.includes(this.nodeType.name);\n\t\t},\n\t},\n\tmethods: {\n\t\tcopyWebhookUrl(webhookData: IWebhookDescription): void {\n\t\t\tconst webhookUrl = this.getWebhookUrlDisplay(webhookData);\n\t\t\tvoid this.clipboard.copy(webhookUrl);\n\n\t\t\tthis.showMessage({\n\t\t\t\ttitle: this.baseText.copyTitle,\n\t\t\t\tmessage: this.baseText.copyMessage,\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t\tthis.$telemetry.track('User copied webhook URL', {\n\t\t\t\tpane: 'parameters',\n\t\t\t\ttype: `${this.showUrlFor} url`,\n\t\t\t});\n\t\t},\n\t\tgetWebhookUrlDisplay(webhookData: IWebhookDescription): string {\n\t\t\tif (this.node) {\n\t\t\t\treturn this.workflowHelpers.getWebhookUrl(\n\t\t\t\t\twebhookData,\n\t\t\t\t\tthis.node,\n\t\t\t\t\tthis.isProductionOnly ? 'production' : this.showUrlFor,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn '';\n\t\t},\n\t\tisWebhookMethodVisible(webhook: IWebhookDescription): boolean {\n\t\t\ttry {\n\t\t\t\tconst method = this.workflowHelpers.getWebhookExpressionValue(webhook, 'httpMethod', false);\n\t\t\t\tif (Array.isArray(method) && method.length !== 1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} catch (error) {}\n\n\t\t\tif (typeof webhook.ndvHideMethod === 'string') {\n\t\t\t\treturn !this.workflowHelpers.getWebhookExpressionValue(webhook, 'ndvHideMethod');\n\t\t\t}\n\n\t\t\treturn !webhook.ndvHideMethod;\n\t\t},\n\n\t\tgetWebhookHttpMethod(webhook: IWebhookDescription): string {\n\t\t\tconst method = this.workflowHelpers.getWebhookExpressionValue(webhook, 'httpMethod', false);\n\t\t\tif (Array.isArray(method)) {\n\t\t\t\treturn method[0];\n\t\t\t}\n\t\t\treturn method;\n\t\t},\n\t},\n});\n</script>\n\n<style scoped lang=\"scss\">\n.webhooks {\n\tpadding-bottom: var(--spacing-xs);\n\tmargin: var(--spacing-xs) 0;\n\tborder-bottom: 1px solid var(--color-text-lighter);\n\n\t.headline {\n\t\tcolor: $color-primary;\n\t\tfont-weight: 600;\n\t\tfont-size: var(--font-size-2xs);\n\t}\n}\n\n.http-field {\n\tposition: absolute;\n\twidth: 50px;\n\tdisplay: inline-block;\n\ttop: calc(50% - 8px);\n}\n\n.http-method {\n\tbackground-color: var(--color-foreground-xdark);\n\twidth: 40px;\n\theight: 16px;\n\tline-height: 16px;\n\tmargin-left: 5px;\n\ttext-align: center;\n\tborder-radius: 2px;\n\tfont-size: var(--font-size-2xs);\n\tfont-weight: var(--font-weight-bold);\n\tcolor: var(--color-foreground-xlight);\n}\n\n.minimize-icon {\n\tfont-size: 1.3em;\n\tmargin-right: 0.5em;\n}\n\n.mode-selection-headline {\n\tline-height: 1.8em;\n}\n\n.node-webhooks {\n\tmargin-left: 1em;\n}\n\n.url-field {\n\tdisplay: inline-block;\n\twidth: calc(100% - 60px);\n\tmargin-left: 55px;\n}\n.url-field-full-width {\n\tdisplay: inline-block;\n\tmargin: 5px 10px;\n}\n\n.url-selection {\n\tmargin-top: var(--spacing-xs);\n}\n\n.minimize-button {\n\tdisplay: inline-block;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-duration: 0.5s;\n\t-o-transition-duration: 0.5s;\n\ttransition-duration: 0.5s;\n\n\t-webkit-transition-property: -webkit-transform;\n\t-moz-transition-property: -moz-transform;\n\t-o-transition-property: -o-transform;\n\ttransition-property: transform;\n}\n.expanded .minimize-button {\n\t-webkit-transform: rotate(90deg);\n\t-moz-transform: rotate(90deg);\n\t-o-transform: rotate(90deg);\n\ttransform: rotate(90deg);\n}\n\n.webhook-url {\n\tposition: relative;\n\ttop: 0;\n\twidth: 100%;\n\tfont-size: var(--font-size-2xs);\n\twhite-space: normal;\n\toverflow: visible;\n\ttext-overflow: initial;\n\tcolor: var(--color-text-dark);\n\ttext-align: left;\n\tdirection: ltr;\n\tword-break: break-all;\n}\n\n.webhook-wrapper {\n\tline-height: 1.5;\n\tposition: relative;\n\tmargin-top: var(--spacing-xs);\n\tbackground-color: var(--color-foreground-xlight);\n\tborder-radius: 3px;\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<div\n\t\t\t:class=\"$style.connections\"\n\t\t\t:style=\"`--possible-connections: ${possibleConnections.length}`\"\n\t\t>\n\t\t\t<div\n\t\t\t\tv-for=\"connection in possibleConnections\"\n\t\t\t\t:key=\"connection.type\"\n\t\t\t\t:data-test-id=\"`subnode-connection-group-${connection.type}`\"\n\t\t\t>\n\t\t\t\t<div :class=\"$style.connectionType\">\n\t\t\t\t\t<span\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t[$style.connectionLabel]: true,\n\t\t\t\t\t\t\t[$style.hasIssues]: hasInputIssues(connection.type),\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\tv-text=\"`${connection.displayName}${connection.required ? ' *' : ''}`\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-on-click-outside=\"() => expandConnectionGroup(connection.type, false)\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t[$style.connectedNodesWrapper]: true,\n\t\t\t\t\t\t\t[$style.connectedNodesWrapperExpanded]: expandedGroups.includes(connection.type),\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:style=\"`--nodes-length: ${connectedNodes[connection.type].length}`\"\n\t\t\t\t\t\t@click=\"expandConnectionGroup(connection.type, true)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"\n\t\t\t\t\t\t\t\tconnectedNodes[connection.type].length >= 1 ? connection.maxConnections !== 1 : true\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\t[$style.plusButton]: true,\n\t\t\t\t\t\t\t\t[$style.hasIssues]: hasInputIssues(connection.type),\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t@click=\"onPlusClick(connection.type)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<n8n-tooltip\n\t\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\t\t:teleported=\"true\"\n\t\t\t\t\t\t\t\t:offset=\"10\"\n\t\t\t\t\t\t\t\t:show-after=\"300\"\n\t\t\t\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t\t\t\tshouldShowConnectionTooltip(connection.type) &&\n\t\t\t\t\t\t\t\t\tconnectedNodes[connection.type].length >= 1\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t\tAdd {{ connection.displayName }}\n\t\t\t\t\t\t\t\t\t<template v-if=\"hasInputIssues(connection.type)\">\n\t\t\t\t\t\t\t\t\t\t<TitledList\n\t\t\t\t\t\t\t\t\t\t\t:title=\"`${$locale.baseText('node.issues')}:`\"\n\t\t\t\t\t\t\t\t\t\t\t:items=\"nodeInputIssues[connection.type]\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t<n8n-icon-button\n\t\t\t\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\t\t\t\ticon=\"plus\"\n\t\t\t\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t\t\t\t:data-test-id=\"`add-subnode-${connection.type}`\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"connectedNodes[connection.type].length > 0\"\n\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\t[$style.connectedNodes]: true,\n\t\t\t\t\t\t\t\t[$style.connectedNodesMultiple]: connectedNodes[connection.type].length > 1,\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tv-for=\"(node, index) in connectedNodes[connection.type]\"\n\t\t\t\t\t\t\t\t:key=\"node.node.name\"\n\t\t\t\t\t\t\t\t:class=\"{ [$style.nodeWrapper]: true, [$style.hasIssues]: node.issues }\"\n\t\t\t\t\t\t\t\tdata-test-id=\"floating-subnode\"\n\t\t\t\t\t\t\t\t:data-node-name=\"node.node.name\"\n\t\t\t\t\t\t\t\t:style=\"`--node-index: ${index}`\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<n8n-tooltip\n\t\t\t\t\t\t\t\t\t:key=\"node.node.name\"\n\t\t\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\t\t\t:teleported=\"true\"\n\t\t\t\t\t\t\t\t\t:offset=\"10\"\n\t\t\t\t\t\t\t\t\t:show-after=\"300\"\n\t\t\t\t\t\t\t\t\t:disabled=\"shouldShowConnectionTooltip(connection.type)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t\t\t{{ node.node.name }}\n\t\t\t\t\t\t\t\t\t\t<template v-if=\"node.issues\">\n\t\t\t\t\t\t\t\t\t\t\t<TitledList\n\t\t\t\t\t\t\t\t\t\t\t\t:title=\"`${$locale.baseText('node.issues')}:`\"\n\t\t\t\t\t\t\t\t\t\t\t\t:items=\"node.issues\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t</template>\n\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t:class=\"$style.connectedNode\"\n\t\t\t\t\t\t\t\t\t\t@click=\"onNodeClick(node.node.name, connection.type)\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<NodeIcon\n\t\t\t\t\t\t\t\t\t\t\t:node-type=\"node.nodeType\"\n\t\t\t\t\t\t\t\t\t\t\t:node-name=\"node.node.name\"\n\t\t\t\t\t\t\t\t\t\t\ttooltip-position=\"top\"\n\t\t\t\t\t\t\t\t\t\t\t:size=\"20\"\n\t\t\t\t\t\t\t\t\t\t\tcircle\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { INodeUi } from '@/Interface';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { computed, ref, watch } from 'vue';\nimport { NodeHelpers } from 'n8n-workflow';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport TitledList from '@/components/TitledList.vue';\nimport type { ConnectionTypes, INodeInputConfiguration, INodeTypeDescription } from 'n8n-workflow';\nimport { useDebounce } from '@/composables/useDebounce';\n\ninterface Props {\n\trootNode: INodeUi;\n}\n\nconst props = defineProps<Props>();\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst nodeHelpers = useNodeHelpers();\nconst { debounce } = useDebounce();\nconst emit = defineEmits(['switchSelectedNode', 'openConnectionNodeCreator']);\n\ninterface NodeConfig {\n\tnode: INodeUi;\n\tnodeType: INodeTypeDescription;\n\tissues: string[];\n}\n\nconst possibleConnections = ref<INodeInputConfiguration[]>([]);\n\nconst expandedGroups = ref<ConnectionTypes[]>([]);\nconst shouldShowNodeInputIssues = ref(false);\n\nconst nodeType = computed(() =>\n\tnodeTypesStore.getNodeType(props.rootNode.type, props.rootNode.typeVersion),\n);\n\nconst nodeData = computed(() => workflowsStore.getNodeByName(props.rootNode.name));\n\nconst workflow = computed(() => workflowsStore.getCurrentWorkflow());\n\nconst nodeInputIssues = computed(() => {\n\tconst issues = nodeHelpers.getNodeIssues(nodeType.value, props.rootNode, workflow.value, [\n\t\t'typeUnknown',\n\t\t'parameters',\n\t\t'credentials',\n\t\t'execution',\n\t]);\n\treturn issues?.input ?? {};\n});\n\nconst connectedNodes = computed<Record<ConnectionTypes, NodeConfig[]>>(() => {\n\treturn possibleConnections.value.reduce(\n\t\t(acc, connection) => {\n\t\t\tconst nodes = getINodesFromNames(\n\t\t\t\tworkflow.value.getParentNodes(props.rootNode.name, connection.type),\n\t\t\t);\n\t\t\treturn { ...acc, [connection.type]: nodes };\n\t\t},\n\t\t{} as Record<ConnectionTypes, NodeConfig[]>,\n\t);\n});\n\nfunction getConnectionConfig(connectionType: ConnectionTypes) {\n\treturn possibleConnections.value.find((c) => c.type === connectionType);\n}\n\nfunction isMultiConnection(connectionType: ConnectionTypes) {\n\tconst connectionConfig = getConnectionConfig(connectionType);\n\treturn connectionConfig?.maxConnections !== 1;\n}\n\nfunction shouldShowConnectionTooltip(connectionType: ConnectionTypes) {\n\treturn isMultiConnection(connectionType) && !expandedGroups.value.includes(connectionType);\n}\n\nfunction expandConnectionGroup(connectionType: ConnectionTypes, isExpanded: boolean) {\n\t// If the connection is a single connection, we don't need to expand the group\n\tif (!isMultiConnection(connectionType)) {\n\t\treturn;\n\t}\n\n\tif (isExpanded) {\n\t\texpandedGroups.value = [...expandedGroups.value, connectionType];\n\t} else {\n\t\texpandedGroups.value = expandedGroups.value.filter((g) => g !== connectionType);\n\t}\n}\n\nfunction getINodesFromNames(names: string[]): NodeConfig[] {\n\treturn names\n\t\t.map((name) => {\n\t\t\tconst node = workflowsStore.getNodeByName(name);\n\t\t\tif (node) {\n\t\t\t\tconst matchedNodeType = nodeTypesStore.getNodeType(node.type);\n\t\t\t\tif (matchedNodeType) {\n\t\t\t\t\tconst issues = nodeHelpers.getNodeIssues(matchedNodeType, node, workflow.value);\n\t\t\t\t\tconst stringifiedIssues = issues ? NodeHelpers.nodeIssuesToString(issues, node) : '';\n\t\t\t\t\treturn { node, nodeType: matchedNodeType, issues: stringifiedIssues };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t})\n\t\t.filter((n): n is NodeConfig => n !== null);\n}\n\nfunction hasInputIssues(connectionType: ConnectionTypes) {\n\treturn (\n\t\tshouldShowNodeInputIssues.value && (nodeInputIssues.value[connectionType] ?? []).length > 0\n\t);\n}\n\nfunction isNodeInputConfiguration(\n\tconnectionConfig: ConnectionTypes | INodeInputConfiguration,\n): connectionConfig is INodeInputConfiguration {\n\tif (typeof connectionConfig === 'string') return false;\n\n\treturn 'type' in connectionConfig;\n}\n\nfunction getPossibleSubInputConnections(): INodeInputConfiguration[] {\n\tif (!nodeType.value || !props.rootNode) return [];\n\n\tconst inputs = NodeHelpers.getNodeInputs(workflow.value, props.rootNode, nodeType.value);\n\n\tconst nonMainInputs = inputs.filter((input): input is INodeInputConfiguration => {\n\t\tif (!isNodeInputConfiguration(input)) return false;\n\n\t\treturn input.type !== 'main';\n\t});\n\n\treturn nonMainInputs;\n}\n\nfunction onNodeClick(nodeName: string, connectionType: ConnectionTypes) {\n\tif (isMultiConnection(connectionType) && !expandedGroups.value.includes(connectionType)) {\n\t\texpandConnectionGroup(connectionType, true);\n\t\treturn;\n\t}\n\n\temit('switchSelectedNode', nodeName);\n}\n\nfunction onPlusClick(connectionType: ConnectionTypes) {\n\tconst connectionNodes = connectedNodes.value[connectionType];\n\tif (\n\t\tisMultiConnection(connectionType) &&\n\t\t!expandedGroups.value.includes(connectionType) &&\n\t\tconnectionNodes.length >= 1\n\t) {\n\t\texpandConnectionGroup(connectionType, true);\n\t\treturn;\n\t}\n\n\temit('openConnectionNodeCreator', props.rootNode.name, connectionType);\n}\n\nfunction showNodeInputsIssues() {\n\tshouldShowNodeInputIssues.value = false;\n\t// Reset animation\n\tsetTimeout(() => {\n\t\tshouldShowNodeInputIssues.value = true;\n\t}, 0);\n}\n\nwatch(\n\tnodeData,\n\tdebounce(\n\t\t() =>\n\t\t\tsetTimeout(() => {\n\t\t\t\texpandedGroups.value = [];\n\t\t\t\tpossibleConnections.value = getPossibleSubInputConnections();\n\t\t\t}, 0),\n\t\t{ debounceTime: 1000 },\n\t),\n\t{ immediate: true },\n);\n\ndefineExpose({\n\tshowNodeInputsIssues,\n});\n</script>\n\n<style lang=\"scss\" module>\n@keyframes horizontal-shake {\n\t0% {\n\t\ttransform: translateX(0);\n\t}\n\t25% {\n\t\ttransform: translateX(5px);\n\t}\n\t50% {\n\t\ttransform: translateX(-5px);\n\t}\n\t75% {\n\t\ttransform: translateX(5px);\n\t}\n\t100% {\n\t\ttransform: translateX(0);\n\t}\n}\n.container {\n\t--node-size: 45px;\n\t--plus-button-size: 30px;\n\t--animation-duration: 150ms;\n\t--collapsed-offset: 10px;\n\tpadding-top: calc(var(--node-size) + var(--spacing-3xs));\n}\n.connections {\n\t// Make sure container has matching height if there's no connections\n\t// since the plus button is absolutely positioned\n\tmin-height: calc(var(--node-size) + var(--spacing-m));\n\tposition: absolute;\n\tbottom: calc((var(--node-size) / 2) * -1);\n\tleft: 0;\n\tright: 0;\n\tuser-select: none;\n\tjustify-content: space-between;\n\tdisplay: grid;\n\tgrid-template-columns: repeat(var(--possible-connections), 1fr);\n}\n.connectionType {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\ttransition: all calc((var(--animation-duration) - 50ms)) ease;\n}\n.connectionLabel {\n\tmargin-bottom: var(--spacing-2xs);\n\tfont-size: var(--font-size-2xs);\n\tuser-select: none;\n\ttext-wrap: nowrap;\n\n\t&.hasIssues {\n\t\tcolor: var(--color-danger);\n\t}\n}\n.connectedNodesWrapper {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: space-between;\n\tposition: relative;\n}\n.plusButton {\n\ttransition: all var(--animation-duration) ease;\n\tposition: absolute;\n\ttop: var(--spacing-2xs);\n\n\t&.hasIssues {\n\t\tanimation: horizontal-shake 500ms;\n\t\tbutton {\n\t\t\t--button-font-color: var(--color-danger);\n\t\t\t--button-border-color: var(--color-danger);\n\t\t}\n\t}\n\n\t&:not(:last-child) {\n\t\tz-index: 1;\n\t\tright: 100%;\n\t\tmargin-right: calc((var(--plus-button-size) * -1) * 0.9);\n\t\tpointer-events: none;\n\n\t\t.connectedNodesWrapperExpanded & {\n\t\t\t// left: 100%;\n\t\t\tmargin-right: var(--spacing-2xs);\n\t\t\topacity: 1;\n\t\t\tpointer-events: all;\n\t\t}\n\t}\n}\n\n.connectedNodesMultiple {\n\ttransition: all var(--animation-duration) ease;\n}\n.connectedNodesWrapperExpanded {\n\tz-index: 1;\n}\n// Hide all other connection groups when one is expanded\n.connections:has(.connectedNodesWrapperExpanded)\n\t.connectionType:not(:has(.connectedNodesWrapperExpanded)) {\n\topacity: 0;\n\tpointer-events: none;\n\tvisibility: hidden;\n}\n.connectedNode {\n\tborder: var(--border-base);\n\tbackground-color: var(--color-node-background);\n\tborder-radius: 100%;\n\tpadding: var(--spacing-xs);\n\tcursor: pointer;\n\tpointer-events: all;\n\ttransition: all var(--animation-duration) ease;\n\tposition: relative;\n\tdisplay: flex;\n\tjustify-self: center;\n\talign-self: center;\n}\n.connectedNodes {\n\tdisplay: flex;\n\tjustify-content: center;\n\tmargin-right: calc(\n\t\t(var(--nodes-length) - 1) * (-1 * (var(--node-size) - var(--collapsed-offset)))\n\t);\n\t.connectedNodesWrapperExpanded & {\n\t\tmargin-right: 0;\n\t\t// Negative margin to offset the absolutely positioned plus button\n\t\t// when the nodes are expanded to center the nodes\n\t\tmargin-right: calc((var(--spacing-2xs) + var(--plus-button-size)) * -1);\n\t}\n}\n.nodeWrapper {\n\ttransition: all var(--animation-duration) ease;\n\ttransform-origin: center;\n\tz-index: 1;\n\t.connectedNodesWrapperExpanded &:not(:first-child) {\n\t\tmargin-left: var(--spacing-2xs);\n\t}\n\t&.hasIssues {\n\t\t.connectedNode {\n\t\t\tborder-width: calc(var(--border-width-base) * 2);\n\t\t\tborder-color: var(--color-danger);\n\t\t}\n\t}\n\n\t&:not(:first-child) {\n\t\ttransform: translateX(\n\t\t\tcalc(var(--node-index) * (-1 * (var(--node-size) - var(--collapsed-offset))))\n\t\t);\n\t}\n\n\t.connectedNodesWrapperExpanded & {\n\t\ttransform: translateX(0);\n\t}\n}\n</style>\n","<template>\n\t<div>\n\t\t<n8n-tooltip placement=\"right\" :disabled=\"!tooltipText\">\n\t\t\t<template #content>\n\t\t\t\t<div>{{ tooltipText }}</div>\n\t\t\t</template>\n\t\t\t<div>\n\t\t\t\t<n8n-button\n\t\t\t\t\tv-bind=\"$attrs\"\n\t\t\t\t\t:loading\n\t\t\t\t\t:disabled=\"disabled || !!disabledHint\"\n\t\t\t\t\t:label=\"buttonLabel\"\n\t\t\t\t\t:type=\"type\"\n\t\t\t\t\t:size=\"size\"\n\t\t\t\t\t:icon=\"!isListeningForEvents && !hideIcon ? 'flask' : undefined\"\n\t\t\t\t\t:transparent-background=\"transparent\"\n\t\t\t\t\t:title=\"\n\t\t\t\t\t\t!isTriggerNode && !tooltipText\n\t\t\t\t\t\t\t? $locale.baseText('ndv.execute.testNode.description')\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\"\n\t\t\t\t\t@mouseover=\"onMouseOver\"\n\t\t\t\t\t@click=\"onClick\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</n8n-tooltip>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport {\n\tWEBHOOK_NODE_TYPE,\n\tMANUAL_TRIGGER_NODE_TYPE,\n\tMODAL_CONFIRM,\n\tFORM_TRIGGER_NODE_TYPE,\n\tCHAT_TRIGGER_NODE_TYPE,\n} from '@/constants';\nimport type { INodeUi } from '@/Interface';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useMessage } from '@/composables/useMessage';\nimport { useToast } from '@/composables/useToast';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { nodeViewEventBus } from '@/event-bus';\nimport { usePinnedData } from '@/composables/usePinnedData';\nimport { useRunWorkflow } from '@/composables/useRunWorkflow';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useRouter } from 'vue-router';\n\nconst NODE_TEST_STEP_POPUP_COUNT_KEY = 'N8N_NODE_TEST_STEP_POPUP_COUNT';\nconst MAX_POPUP_COUNT = 10;\nconst POPUP_UPDATE_DELAY = 3000;\n\nexport default defineComponent({\n\tinheritAttrs: false,\n\tprops: {\n\t\tnodeName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t},\n\t\tsize: {\n\t\t\ttype: String,\n\t\t},\n\t\ttransparent: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttelemetrySource: {\n\t\t\ttype: String,\n\t\t},\n\t\thideIcon: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\ttooltip: {\n\t\t\ttype: String,\n\t\t},\n\t},\n\temits: ['stopExecution', 'execute'],\n\tsetup(props) {\n\t\tconst router = useRouter();\n\t\tconst workflowsStore = useWorkflowsStore();\n\t\tconst node = workflowsStore.getNodeByName(props.nodeName);\n\t\tconst pinnedData = usePinnedData(node);\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst { runWorkflow, stopCurrentExecution } = useRunWorkflow({ router });\n\n\t\treturn {\n\t\t\texternalHooks,\n\t\t\tpinnedData,\n\t\t\trunWorkflow,\n\t\t\tstopCurrentExecution,\n\t\t\tlastPopupCountUpdate: 0,\n\t\t\t...useToast(),\n\t\t\t...useMessage(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNodeTypesStore, useNDVStore, useWorkflowsStore, useUIStore),\n\t\tnode(): INodeUi | null {\n\t\t\treturn this.workflowsStore.getNodeByName(this.nodeName);\n\t\t},\n\t\tnodeType(): INodeTypeDescription | null {\n\t\t\tif (this.node) {\n\t\t\t\treturn this.nodeTypesStore.getNodeType(this.node.type, this.node.typeVersion);\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tnodeRunning(): boolean {\n\t\t\tconst triggeredNode = this.workflowsStore.executedNode;\n\t\t\treturn (\n\t\t\t\tthis.workflowRunning &&\n\t\t\t\t(this.workflowsStore.isNodeExecuting(this.node?.name ?? '') ||\n\t\t\t\t\ttriggeredNode === this.node?.name)\n\t\t\t);\n\t\t},\n\t\tworkflowRunning(): boolean {\n\t\t\treturn this.uiStore.isActionActive('workflowRunning');\n\t\t},\n\t\tisTriggerNode(): boolean {\n\t\t\tif (!this.node) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn this.nodeTypesStore.isTriggerNode(this.node.type);\n\t\t},\n\t\tisManualTriggerNode(): boolean {\n\t\t\treturn Boolean(this.nodeType && this.nodeType.name === MANUAL_TRIGGER_NODE_TYPE);\n\t\t},\n\t\tisChatNode(): boolean {\n\t\t\treturn Boolean(this.nodeType && this.nodeType.name === CHAT_TRIGGER_NODE_TYPE);\n\t\t},\n\t\tisChatChild(): boolean {\n\t\t\treturn this.workflowsStore.checkIfNodeHasChatParent(this.nodeName);\n\t\t},\n\t\tisFormTriggerNode(): boolean {\n\t\t\treturn Boolean(this.nodeType && this.nodeType.name === FORM_TRIGGER_NODE_TYPE);\n\t\t},\n\t\tisPollingTypeNode(): boolean {\n\t\t\treturn !!this.nodeType?.polling;\n\t\t},\n\t\tisScheduleTrigger(): boolean {\n\t\t\treturn !!this.nodeType?.group.includes('schedule');\n\t\t},\n\t\tisWebhookNode(): boolean {\n\t\t\treturn Boolean(this.nodeType && this.nodeType.name === WEBHOOK_NODE_TYPE);\n\t\t},\n\t\tisListeningForEvents(): boolean {\n\t\t\tconst waitingOnWebhook = this.workflowsStore.executionWaitingForWebhook;\n\t\t\tconst executedNode = this.workflowsStore.executedNode;\n\n\t\t\treturn (\n\t\t\t\t!!this.node &&\n\t\t\t\t!this.node.disabled &&\n\t\t\t\tthis.isTriggerNode &&\n\t\t\t\twaitingOnWebhook &&\n\t\t\t\t(!executedNode || executedNode === this.nodeName)\n\t\t\t);\n\t\t},\n\t\tisListeningForWorkflowEvents(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.nodeRunning &&\n\t\t\t\tthis.isTriggerNode &&\n\t\t\t\t!this.isScheduleTrigger &&\n\t\t\t\t!this.isManualTriggerNode\n\t\t\t);\n\t\t},\n\t\thasIssues(): boolean {\n\t\t\treturn Boolean(\n\t\t\t\tthis.node?.issues && (this.node.issues.parameters || this.node.issues.credentials),\n\t\t\t);\n\t\t},\n\t\tdisabledHint(): string {\n\t\t\tif (this.isListeningForEvents) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (this.isTriggerNode && this.node?.disabled) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.nodeIsDisabled');\n\t\t\t}\n\n\t\t\tif (this.isTriggerNode && this.hasIssues) {\n\t\t\t\tconst activeNode = this.ndvStore.activeNode;\n\t\t\t\tif (activeNode && activeNode.name !== this.nodeName) {\n\t\t\t\t\treturn this.$locale.baseText('ndv.execute.fixPrevious');\n\t\t\t\t}\n\n\t\t\t\treturn this.$locale.baseText('ndv.execute.requiredFieldsMissing');\n\t\t\t}\n\n\t\t\tif (this.workflowRunning && !this.nodeRunning) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.workflowAlreadyRunning');\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\ttooltipText(): string {\n\t\t\tif (this.disabledHint) return this.disabledHint;\n\t\t\tif (this.tooltip && !this.loading && this.testStepButtonPopupCount() < MAX_POPUP_COUNT)\n\t\t\t\treturn this.tooltip;\n\t\t\treturn '';\n\t\t},\n\t\tbuttonLabel(): string {\n\t\t\tif (this.isListeningForEvents || this.isListeningForWorkflowEvents) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.stopListening');\n\t\t\t}\n\n\t\t\tif (this.label) {\n\t\t\t\treturn this.label;\n\t\t\t}\n\n\t\t\tif (this.isChatNode) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.testChat');\n\t\t\t}\n\n\t\t\tif (this.isWebhookNode) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.listenForTestEvent');\n\t\t\t}\n\n\t\t\tif (this.isFormTriggerNode) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.testStep');\n\t\t\t}\n\n\t\t\tif (this.isPollingTypeNode || this.nodeType?.mockManualExecution) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.fetchEvent');\n\t\t\t}\n\n\t\t\treturn this.$locale.baseText('ndv.execute.testNode');\n\t\t},\n\n\t\tloading(): boolean {\n\t\t\treturn this.nodeRunning && !this.isListeningForEvents && !this.isListeningForWorkflowEvents;\n\t\t},\n\t},\n\tmethods: {\n\t\tasync stopWaitingForWebhook() {\n\t\t\ttry {\n\t\t\t\tawait this.workflowsStore.removeTestWebhook(this.workflowsStore.workflowId);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error, this.$locale.baseText('ndv.execute.stopWaitingForWebhook.error'));\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\n\t\ttestStepButtonPopupCount() {\n\t\t\treturn Number(localStorage.getItem(NODE_TEST_STEP_POPUP_COUNT_KEY));\n\t\t},\n\n\t\tonMouseOver() {\n\t\t\tconst count = this.testStepButtonPopupCount();\n\n\t\t\tif (count < MAX_POPUP_COUNT && !this.disabledHint && this.tooltipText) {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tif (!this.lastPopupCountUpdate || now - this.lastPopupCountUpdate >= POPUP_UPDATE_DELAY) {\n\t\t\t\t\tlocalStorage.setItem(NODE_TEST_STEP_POPUP_COUNT_KEY, `${count + 1}`);\n\t\t\t\t\tthis.lastPopupCountUpdate = now;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tasync onClick() {\n\t\t\t// Show chat if it's a chat node or a child of a chat node with no input data\n\t\t\tif (this.isChatNode || (this.isChatChild && this.ndvStore.isNDVDataEmpty('input'))) {\n\t\t\t\tthis.ndvStore.setActiveNodeName(null);\n\t\t\t\tnodeViewEventBus.emit('openChat');\n\t\t\t} else if (this.isListeningForEvents) {\n\t\t\t\tawait this.stopWaitingForWebhook();\n\t\t\t} else if (this.isListeningForWorkflowEvents) {\n\t\t\t\tawait this.stopCurrentExecution();\n\t\t\t\tthis.$emit('stopExecution');\n\t\t\t} else {\n\t\t\t\tlet shouldUnpinAndExecute = false;\n\t\t\t\tif (this.pinnedData.hasData.value) {\n\t\t\t\t\tconst confirmResult = await this.confirm(\n\t\t\t\t\t\tthis.$locale.baseText('ndv.pinData.unpinAndExecute.description'),\n\t\t\t\t\t\tthis.$locale.baseText('ndv.pinData.unpinAndExecute.title'),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconfirmButtonText: this.$locale.baseText('ndv.pinData.unpinAndExecute.confirm'),\n\t\t\t\t\t\t\tcancelButtonText: this.$locale.baseText('ndv.pinData.unpinAndExecute.cancel'),\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tshouldUnpinAndExecute = confirmResult === MODAL_CONFIRM;\n\n\t\t\t\t\tif (shouldUnpinAndExecute && this.node) {\n\t\t\t\t\t\tthis.pinnedData.unsetData('unpin-and-execute-modal');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!this.pinnedData.hasData.value || shouldUnpinAndExecute) {\n\t\t\t\t\tconst telemetryPayload = {\n\t\t\t\t\t\tnode_type: this.nodeType ? this.nodeType.name : null,\n\t\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\t\tsource: this.telemetrySource,\n\t\t\t\t\t\tpush_ref: this.ndvStore.pushRef,\n\t\t\t\t\t};\n\t\t\t\t\tthis.$telemetry.track('User clicked execute node button', telemetryPayload);\n\t\t\t\t\tawait this.externalHooks.run('nodeExecuteButton.onClick', telemetryPayload);\n\n\t\t\t\t\tawait this.runWorkflow({\n\t\t\t\t\t\tdestinationNode: this.nodeName,\n\t\t\t\t\t\tsource: 'RunData.ExecuteNodeButton',\n\t\t\t\t\t});\n\t\t\t\t\tthis.$emit('execute');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n","<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'node-settings': true,\n\t\t\tdragging: dragging,\n\t\t}\"\n\t\t@keydown.stop\n\t>\n\t\t<div :class=\"$style.header\">\n\t\t\t<div class=\"header-side-menu\">\n\t\t\t\t<NodeTitle\n\t\t\t\t\tv-if=\"node\"\n\t\t\t\t\tclass=\"node-name\"\n\t\t\t\t\t:model-value=\"node.name\"\n\t\t\t\t\t:node-type=\"nodeType\"\n\t\t\t\t\t:read-only=\"isReadOnly\"\n\t\t\t\t\t@update:model-value=\"nameChanged\"\n\t\t\t\t></NodeTitle>\n\t\t\t\t<div v-if=\"isExecutable\">\n\t\t\t\t\t<NodeExecuteButton\n\t\t\t\t\t\tv-if=\"!blockUI && node && nodeValid\"\n\t\t\t\t\t\tdata-test-id=\"node-execute-button\"\n\t\t\t\t\t\t:node-name=\"node.name\"\n\t\t\t\t\t\t:disabled=\"outputPanelEditMode.enabled && !isTriggerNode\"\n\t\t\t\t\t\t:tooltip=\"executeButtonTooltip\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\ttelemetry-source=\"parameters\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t\t@stop-execution=\"onStopExecution\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<NodeSettingsTabs\n\t\t\t\tv-if=\"node && nodeValid\"\n\t\t\t\t:model-value=\"openPanel\"\n\t\t\t\t:node-type=\"nodeType\"\n\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t@update:model-value=\"onTabSelect\"\n\t\t\t/>\n\t\t</div>\n\t\t<div v-if=\"node && !nodeValid\" class=\"node-is-not-valid\">\n\t\t\t<p :class=\"$style.warningIcon\">\n\t\t\t\t<font-awesome-icon icon=\"exclamation-triangle\" />\n\t\t\t</p>\n\t\t\t<div class=\"missingNodeTitleContainer mt-s mb-xs\">\n\t\t\t\t<n8n-text size=\"large\" color=\"text-dark\" bold>\n\t\t\t\t\t{{ $locale.baseText('nodeSettings.communityNodeUnknown.title') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<div v-if=\"isCommunityNode\" :class=\"$style.descriptionContainer\">\n\t\t\t\t<div class=\"mb-l\">\n\t\t\t\t\t<i18n-t\n\t\t\t\t\t\tkeypath=\"nodeSettings.communityNodeUnknown.description\"\n\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t@click=\"onMissingNodeTextClick\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #action>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t:href=\"`https://www.npmjs.com/package/${node.type.split('.')[0]}`\"\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t>{{ node.type.split('.')[0] }}</a\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</i18n-t>\n\t\t\t\t</div>\n\t\t\t\t<n8n-link\n\t\t\t\t\t:to=\"COMMUNITY_NODES_INSTALLATION_DOCS_URL\"\n\t\t\t\t\t@click=\"onMissingNodeLearnMoreLinkClick\"\n\t\t\t\t>\n\t\t\t\t\t{{ $locale.baseText('nodeSettings.communityNodeUnknown.installLink.text') }}\n\t\t\t\t</n8n-link>\n\t\t\t</div>\n\t\t\t<i18n-t v-else keypath=\"nodeSettings.nodeTypeUnknown.description\" tag=\"span\">\n\t\t\t\t<template #action>\n\t\t\t\t\t<a\n\t\t\t\t\t\t:href=\"CUSTOM_NODES_DOCS_URL\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\tv-text=\"$locale.baseText('nodeSettings.nodeTypeUnknown.description.customNode')\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t</i18n-t>\n\t\t</div>\n\t\t<div v-if=\"node && nodeValid\" class=\"node-parameters-wrapper\" data-test-id=\"node-parameters\">\n\t\t\t<n8n-notice\n\t\t\t\tv-if=\"hasForeignCredential\"\n\t\t\t\t:content=\"\n\t\t\t\t\t$locale.baseText('nodeSettings.hasForeignCredential', {\n\t\t\t\t\t\tinterpolate: { owner: credentialOwnerName },\n\t\t\t\t\t})\n\t\t\t\t\"\n\t\t\t/>\n\t\t\t<div v-show=\"openPanel === 'params'\">\n\t\t\t\t<NodeWebhooks :node=\"node\" :node-type=\"nodeType\" />\n\n\t\t\t\t<ParameterInputList\n\t\t\t\t\tv-if=\"nodeValuesInitialized\"\n\t\t\t\t\t:parameters=\"parametersNoneSetting\"\n\t\t\t\t\t:hide-delete=\"true\"\n\t\t\t\t\t:node-values=\"nodeValues\"\n\t\t\t\t\t:is-read-only=\"isReadOnly\"\n\t\t\t\t\t:hidden-issues-inputs=\"hiddenIssuesInputs\"\n\t\t\t\t\tpath=\"parameters\"\n\t\t\t\t\t@value-changed=\"valueChanged\"\n\t\t\t\t\t@activate=\"onWorkflowActivate\"\n\t\t\t\t\t@parameter-blur=\"onParameterBlur\"\n\t\t\t\t>\n\t\t\t\t\t<NodeCredentials\n\t\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t\t:readonly=\"isReadOnly\"\n\t\t\t\t\t\t:show-all=\"true\"\n\t\t\t\t\t\t:hide-issues=\"hiddenIssuesInputs.includes('credentials')\"\n\t\t\t\t\t\t@credential-selected=\"credentialSelected\"\n\t\t\t\t\t\t@value-changed=\"valueChanged\"\n\t\t\t\t\t\t@blur=\"onParameterBlur\"\n\t\t\t\t\t/>\n\t\t\t\t</ParameterInputList>\n\t\t\t\t<div v-if=\"parametersNoneSetting.length === 0\" class=\"no-parameters\">\n\t\t\t\t\t<n8n-text>\n\t\t\t\t\t\t{{ $locale.baseText('nodeSettings.thisNodeDoesNotHaveAnyParameters') }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"nodeHelpers.isCustomApiCallSelected(nodeValues)\"\n\t\t\t\t\tclass=\"parameter-item parameter-notice\"\n\t\t\t\t\tdata-test-id=\"node-parameters-http-notice\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-notice\n\t\t\t\t\t\t:content=\"\n\t\t\t\t\t\t\t$locale.baseText('nodeSettings.useTheHttpRequestNode', {\n\t\t\t\t\t\t\t\tinterpolate: { nodeTypeDisplayName: nodeType?.displayName ?? '' },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-show=\"openPanel === 'settings'\">\n\t\t\t\t<ParameterInputList\n\t\t\t\t\t:parameters=\"parametersSetting\"\n\t\t\t\t\t:node-values=\"nodeValues\"\n\t\t\t\t\t:is-read-only=\"isReadOnly\"\n\t\t\t\t\t:hide-delete=\"true\"\n\t\t\t\t\t:hidden-issues-inputs=\"hiddenIssuesInputs\"\n\t\t\t\t\tpath=\"parameters\"\n\t\t\t\t\t@value-changed=\"valueChanged\"\n\t\t\t\t\t@parameter-blur=\"onParameterBlur\"\n\t\t\t\t/>\n\t\t\t\t<ParameterInputList\n\t\t\t\t\t:parameters=\"nodeSettings\"\n\t\t\t\t\t:hide-delete=\"true\"\n\t\t\t\t\t:node-values=\"nodeValues\"\n\t\t\t\t\t:is-read-only=\"isReadOnly\"\n\t\t\t\t\t:hidden-issues-inputs=\"hiddenIssuesInputs\"\n\t\t\t\t\tpath=\"\"\n\t\t\t\t\t@value-changed=\"valueChanged\"\n\t\t\t\t\t@parameter-blur=\"onParameterBlur\"\n\t\t\t\t/>\n\t\t\t\t<div class=\"node-version\" data-test-id=\"node-version\">\n\t\t\t\t\t{{\n\t\t\t\t\t\t$locale.baseText('nodeSettings.nodeVersion', {\n\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\tnode: nodeType?.displayName as string,\n\t\t\t\t\t\t\t\tversion: (node.typeVersion ?? latestVersion).toString(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t\t<span>({{ nodeVersionTag }})</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<NDVSubConnections\n\t\t\tv-if=\"node\"\n\t\t\tref=\"subConnections\"\n\t\t\t:root-node=\"node\"\n\t\t\t@switch-selected-node=\"onSwitchSelectedNode\"\n\t\t\t@open-connection-node-creator=\"onOpenConnectionNodeCreator\"\n\t\t/>\n\t\t<n8n-block-ui :show=\"blockUI\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport type {\n\tINodeTypeDescription,\n\tINodeParameters,\n\tINodeProperties,\n\tNodeParameterValue,\n\tConnectionTypes,\n\tNodeParameterValueType,\n} from 'n8n-workflow';\nimport {\n\tNodeHelpers,\n\tNodeConnectionType,\n\tdeepCopy,\n\tisINodePropertyCollectionList,\n\tisINodePropertiesList,\n\tisINodePropertyOptionsList,\n\tdisplayParameter,\n} from 'n8n-workflow';\nimport type {\n\tINodeUi,\n\tINodeUpdatePropertiesInformation,\n\tIUpdateInformation,\n\tIUsedCredential,\n} from '@/Interface';\n\nimport {\n\tCOMMUNITY_NODES_INSTALLATION_DOCS_URL,\n\tCUSTOM_NODES_DOCS_URL,\n\tMAIN_NODE_PANEL_WIDTH,\n\tSHOULD_CLEAR_NODE_OUTPUTS,\n} from '@/constants';\n\nimport NodeTitle from '@/components/NodeTitle.vue';\nimport ParameterInputList from '@/components/ParameterInputList.vue';\nimport NodeCredentials from '@/components/NodeCredentials.vue';\nimport NodeSettingsTabs from '@/components/NodeSettingsTabs.vue';\nimport NodeWebhooks from '@/components/NodeWebhooks.vue';\nimport NDVSubConnections from '@/components/NDVSubConnections.vue';\nimport { get, set, unset } from 'lodash-es';\n\nimport NodeExecuteButton from './NodeExecuteButton.vue';\nimport { isCommunityPackageName } from '@/utils/nodeTypesUtils';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useHistoryStore } from '@/stores/history.store';\nimport { RenameNodeCommand } from '@/models/history';\nimport useWorkflowsEEStore from '@/stores/workflows.ee.store';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport type { EventBus } from 'n8n-design-system';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport { importCurlEventBus } from '@/event-bus';\nimport { useToast } from '@/composables/useToast';\n\nexport default defineComponent({\n\tname: 'NodeSettings',\n\tcomponents: {\n\t\tNodeTitle,\n\t\tNodeCredentials,\n\t\tParameterInputList,\n\t\tNodeSettingsTabs,\n\t\tNodeWebhooks,\n\t\tNDVSubConnections,\n\t\tNodeExecuteButton,\n\t},\n\tsetup() {\n\t\tconst nodeHelpers = useNodeHelpers();\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst { showMessage } = useToast();\n\n\t\treturn {\n\t\t\texternalHooks,\n\t\t\tnodeHelpers,\n\t\t\tshowMessage,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseHistoryStore,\n\t\t\tuseNodeTypesStore,\n\t\t\tuseNDVStore,\n\t\t\tuseUIStore,\n\t\t\tuseCredentialsStore,\n\t\t\tuseWorkflowsStore,\n\t\t\tuseWorkflowsEEStore,\n\t\t),\n\t\tisReadOnly(): boolean {\n\t\t\treturn this.readOnly || this.hasForeignCredential;\n\t\t},\n\t\tisExecutable(): boolean {\n\t\t\tif (this.nodeType && this.node) {\n\t\t\t\tconst workflow = this.workflowsStore.getCurrentWorkflow();\n\t\t\t\tconst workflowNode = workflow.getNode(this.node.name);\n\t\t\t\tconst inputs = NodeHelpers.getNodeInputs(workflow, workflowNode!, this.nodeType);\n\t\t\t\tconst inputNames = NodeHelpers.getConnectionTypes(inputs);\n\n\t\t\t\tif (!inputNames.includes(NodeConnectionType.Main) && !this.isTriggerNode) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.executable || this.hasForeignCredential;\n\t\t},\n\t\tnodeTypeName(): string {\n\t\t\tif (this.nodeType) {\n\t\t\t\tconst shortNodeType = this.$locale.shortNodeType(this.nodeType.name);\n\n\t\t\t\treturn this.$locale.headerText({\n\t\t\t\t\tkey: `headers.${shortNodeType}.displayName`,\n\t\t\t\t\tfallback: this.nodeType.name,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\tnodeTypeVersions(): number[] {\n\t\t\tif (!this.node) return [];\n\t\t\treturn this.nodeTypesStore.getNodeVersions(this.node.type);\n\t\t},\n\t\tlatestVersion(): number {\n\t\t\treturn Math.max(...this.nodeTypeVersions);\n\t\t},\n\t\tisLatestNodeVersion(): boolean {\n\t\t\treturn !this.node?.typeVersion || this.latestVersion === this.node.typeVersion;\n\t\t},\n\t\texecuteButtonTooltip(): string {\n\t\t\tif (\n\t\t\t\tthis.node &&\n\t\t\t\tthis.isLatestNodeVersion &&\n\t\t\t\tthis.inputSize > 1 &&\n\t\t\t\t!NodeHelpers.isSingleExecution(this.node.type, this.node.parameters)\n\t\t\t) {\n\t\t\t\treturn this.$locale.baseText('nodeSettings.executeButtonTooltip.times', {\n\t\t\t\t\tinterpolate: { inputSize: this.inputSize },\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn '';\n\t\t},\n\t\tnodeVersionTag(): string {\n\t\t\tif (!this.nodeType || this.nodeType.hidden) {\n\t\t\t\treturn this.$locale.baseText('nodeSettings.deprecated');\n\t\t\t}\n\n\t\t\tif (this.isLatestNodeVersion) {\n\t\t\t\treturn this.$locale.baseText('nodeSettings.latest');\n\t\t\t}\n\n\t\t\treturn this.$locale.baseText('nodeSettings.latestVersion', {\n\t\t\t\tinterpolate: { version: this.latestVersion.toString() },\n\t\t\t});\n\t\t},\n\t\tnodeTypeDescription(): string {\n\t\t\tif (this.nodeType?.description) {\n\t\t\t\tconst shortNodeType = this.$locale.shortNodeType(this.nodeType.name);\n\n\t\t\t\treturn this.$locale.headerText({\n\t\t\t\t\tkey: `headers.${shortNodeType}.description`,\n\t\t\t\t\tfallback: this.nodeType.description,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn this.$locale.baseText('nodeSettings.noDescriptionFound');\n\t\t\t}\n\t\t},\n\t\theaderStyle(): object {\n\t\t\tif (!this.node) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t'background-color': this.node.color,\n\t\t\t};\n\t\t},\n\t\tnode(): INodeUi | null {\n\t\t\treturn this.ndvStore.activeNode;\n\t\t},\n\t\tparametersSetting(): INodeProperties[] {\n\t\t\treturn this.parameters.filter((item) => {\n\t\t\t\treturn item.isNodeSetting;\n\t\t\t});\n\t\t},\n\t\tparametersNoneSetting(): INodeProperties[] {\n\t\t\treturn this.parameters.filter((item) => {\n\t\t\t\treturn !item.isNodeSetting;\n\t\t\t});\n\t\t},\n\t\tparameters(): INodeProperties[] {\n\t\t\tif (this.nodeType === null) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn this.nodeType?.properties ?? [];\n\t\t},\n\t\toutputPanelEditMode(): { enabled: boolean; value: string } {\n\t\t\treturn this.ndvStore.outputPanelEditMode;\n\t\t},\n\t\tisCommunityNode(): boolean {\n\t\t\treturn !!this.node && isCommunityPackageName(this.node.type);\n\t\t},\n\t\tisTriggerNode(): boolean {\n\t\t\treturn !!this.node && this.nodeTypesStore.isTriggerNode(this.node.type);\n\t\t},\n\t\tworkflowOwnerName(): string {\n\t\t\treturn this.workflowsEEStore.getWorkflowOwnerName(`${this.workflowsStore.workflowId}`);\n\t\t},\n\t\thasForeignCredential(): boolean {\n\t\t\treturn this.foreignCredentials.length > 0;\n\t\t},\n\t\tusedCredentials(): IUsedCredential[] {\n\t\t\treturn Object.values(this.workflowsStore.usedCredentials).filter((credential) => {\n\t\t\t\treturn Object.values(this.node?.credentials || []).find((nodeCredential) => {\n\t\t\t\t\treturn nodeCredential.id === credential.id;\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tcredentialOwnerName(): string {\n\t\t\tconst credential = this.usedCredentials\n\t\t\t\t? Object.values(this.usedCredentials).find((credential) => {\n\t\t\t\t\t\treturn credential.id === this.foreignCredentials[0];\n\t\t\t\t\t})\n\t\t\t\t: undefined;\n\n\t\t\treturn this.credentialsStore.getCredentialOwnerName(credential);\n\t\t},\n\t},\n\tprops: {\n\t\teventBus: {\n\t\t\ttype: Object as PropType<EventBus>,\n\t\t},\n\t\tdragging: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\tnodeType: {\n\t\t\ttype: Object as PropType<INodeTypeDescription | null>,\n\t\t},\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tforeignCredentials: {\n\t\t\ttype: Array as PropType<string[]>,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tblockUI: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\texecutable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tinputSize: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnodeValid: true,\n\t\t\tnodeColor: null,\n\t\t\topenPanel: 'params' as 'params' | 'settings',\n\t\t\tnodeValues: {\n\t\t\t\tcolor: '#ff0000',\n\t\t\t\talwaysOutputData: false,\n\t\t\t\texecuteOnce: false,\n\t\t\t\tnotesInFlow: false,\n\t\t\t\tonError: 'stopWorkflow',\n\t\t\t\tretryOnFail: false,\n\t\t\t\tmaxTries: 3,\n\t\t\t\twaitBetweenTries: 1000,\n\t\t\t\tnotes: '',\n\t\t\t\tparameters: {},\n\t\t\t} as INodeParameters,\n\t\t\tnodeValuesInitialized: false, // Used to prevent nodeValues from being overwritten by defaults on reopening ndv\n\t\t\tnodeSettings: [] as INodeProperties[],\n\t\t\tCOMMUNITY_NODES_INSTALLATION_DOCS_URL,\n\t\t\tCUSTOM_NODES_DOCS_URL,\n\t\t\tMAIN_NODE_PANEL_WIDTH,\n\t\t\thiddenIssuesInputs: [] as string[],\n\t\t};\n\t},\n\twatch: {\n\t\tnode() {\n\t\t\tthis.setNodeValues();\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.populateHiddenIssuesSet();\n\t\tthis.populateSettings();\n\t\tthis.setNodeValues();\n\t\tthis.eventBus?.on('openSettings', this.openSettings);\n\n\t\tthis.nodeHelpers.updateNodeParameterIssues(this.node as INodeUi, this.nodeType);\n\t\timportCurlEventBus.on('setHttpNodeParameters', this.setHttpNodeParameters);\n\t},\n\tbeforeUnmount() {\n\t\tthis.eventBus?.off('openSettings', this.openSettings);\n\t\timportCurlEventBus.off('setHttpNodeParameters', this.setHttpNodeParameters);\n\t},\n\tmethods: {\n\t\tsetHttpNodeParameters(parameters: NodeParameterValueType) {\n\t\t\ttry {\n\t\t\t\tthis.valueChanged({\n\t\t\t\t\tnode: this.node?.name,\n\t\t\t\t\tname: 'parameters',\n\t\t\t\t\tvalue: parameters,\n\t\t\t\t});\n\t\t\t} catch {}\n\t\t},\n\t\tonSwitchSelectedNode(node: string) {\n\t\t\tthis.$emit('switchSelectedNode', node);\n\t\t},\n\t\tonOpenConnectionNodeCreator(node: string, connectionType: ConnectionTypes) {\n\t\t\tthis.$emit('openConnectionNodeCreator', node, connectionType);\n\t\t},\n\t\tpopulateHiddenIssuesSet() {\n\t\t\tif (!this.node || !this.workflowsStore.isNodePristine(this.node.name)) return;\n\n\t\t\tthis.hiddenIssuesInputs.push('credentials');\n\t\t\tthis.parametersNoneSetting.forEach((parameter) => {\n\t\t\t\tthis.hiddenIssuesInputs.push(parameter.name);\n\t\t\t});\n\n\t\t\tthis.workflowsStore.setNodePristine(this.node.name, false);\n\t\t},\n\t\tpopulateSettings() {\n\t\t\tif (this.isExecutable && !this.isTriggerNode) {\n\t\t\t\tthis.nodeSettings.push(\n\t\t\t\t\t...([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.alwaysOutputData.displayName'),\n\t\t\t\t\t\t\tname: 'alwaysOutputData',\n\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.alwaysOutputData.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.executeOnce.displayName'),\n\t\t\t\t\t\t\tname: 'executeOnce',\n\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.executeOnce.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.retryOnFail.displayName'),\n\t\t\t\t\t\t\tname: 'retryOnFail',\n\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.retryOnFail.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.maxTries.displayName'),\n\t\t\t\t\t\t\tname: 'maxTries',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\t\tminValue: 2,\n\t\t\t\t\t\t\t\tmaxValue: 5,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdefault: 3,\n\t\t\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\t\tretryOnFail: [true],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.maxTries.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.waitBetweenTries.displayName'),\n\t\t\t\t\t\t\tname: 'waitBetweenTries',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\t\tminValue: 0,\n\t\t\t\t\t\t\t\tmaxValue: 5000,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdefault: 1000,\n\t\t\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\t\tretryOnFail: [true],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.waitBetweenTries.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.onError.displayName'),\n\t\t\t\t\t\t\tname: 'onError',\n\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.stopWorkflow.displayName',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tvalue: 'stopWorkflow',\n\t\t\t\t\t\t\t\t\tdescription: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.stopWorkflow.description',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.continueRegularOutput.displayName',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tvalue: 'continueRegularOutput',\n\t\t\t\t\t\t\t\t\tdescription: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.continueRegularOutput.description',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.continueErrorOutput.displayName',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tvalue: 'continueErrorOutput',\n\t\t\t\t\t\t\t\t\tdescription: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.continueErrorOutput.description',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdefault: 'stopWorkflow',\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.onError.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t] as INodeProperties[]),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.nodeSettings.push(\n\t\t\t\t...([\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.notes.displayName'),\n\t\t\t\t\t\tname: 'notes',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\trows: 5,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.notes.description'),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.notesInFlow.displayName'),\n\t\t\t\t\t\tname: 'notesInFlow',\n\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.notesInFlow.description'),\n\t\t\t\t\t},\n\t\t\t\t] as INodeProperties[]),\n\t\t\t);\n\t\t},\n\t\tonParameterBlur(parameterName: string) {\n\t\t\tthis.hiddenIssuesInputs = this.hiddenIssuesInputs.filter((name) => name !== parameterName);\n\t\t},\n\t\tonWorkflowActivate() {\n\t\t\tthis.hiddenIssuesInputs = [];\n\t\t\tthis.$emit('activate');\n\t\t},\n\t\tonNodeExecute() {\n\t\t\tthis.hiddenIssuesInputs = [];\n\t\t\t(this.$refs.subConnections as InstanceType<typeof NDVSubConnections>)?.showNodeInputsIssues();\n\t\t\tthis.$emit('execute');\n\t\t},\n\t\tsetValue(name: string, value: NodeParameterValue) {\n\t\t\tconst nameParts = name.split('.');\n\t\t\tlet lastNamePart: string | undefined = nameParts.pop();\n\n\t\t\tlet isArray = false;\n\t\t\tif (lastNamePart !== undefined && lastNamePart.includes('[')) {\n\t\t\t\t// It includes an index so we have to extract it\n\t\t\t\tconst lastNameParts = lastNamePart.match(/(.*)\\[(\\d+)\\]$/);\n\t\t\t\tif (lastNameParts) {\n\t\t\t\t\tnameParts.push(lastNameParts[1]);\n\t\t\t\t\tlastNamePart = lastNameParts[2];\n\t\t\t\t\tisArray = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the value so that everything updates correctly in the UI\n\t\t\tif (nameParts.length === 0) {\n\t\t\t\t// Data is on top level\n\t\t\t\tif (value === null) {\n\t\t\t\t\t// Property should be deleted\n\t\t\t\t\tif (lastNamePart) {\n\t\t\t\t\t\tconst { [lastNamePart]: removedNodeValue, ...remainingNodeValues } = this.nodeValues;\n\t\t\t\t\t\tthis.nodeValues = remainingNodeValues;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Value should be set\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\t[lastNamePart as string]: value,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Data is on lower level\n\t\t\t\tif (value === null) {\n\t\t\t\t\t// Property should be deleted\n\t\t\t\t\tlet tempValue = get(this.nodeValues, nameParts.join('.')) as\n\t\t\t\t\t\t| INodeParameters\n\t\t\t\t\t\t| INodeParameters[];\n\n\t\t\t\t\tif (lastNamePart && !Array.isArray(tempValue)) {\n\t\t\t\t\t\tconst { [lastNamePart]: removedNodeValue, ...remainingNodeValues } = tempValue;\n\t\t\t\t\t\ttempValue = remainingNodeValues;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArray && Array.isArray(tempValue) && tempValue.length === 0) {\n\t\t\t\t\t\t// If a value from an array got delete and no values are left\n\t\t\t\t\t\t// delete also the parent\n\t\t\t\t\t\tlastNamePart = nameParts.pop();\n\t\t\t\t\t\ttempValue = get(this.nodeValues, nameParts.join('.')) as INodeParameters;\n\t\t\t\t\t\tif (lastNamePart) {\n\t\t\t\t\t\t\tconst { [lastNamePart]: removedArrayNodeValue, ...remainingArrayNodeValues } =\n\t\t\t\t\t\t\t\ttempValue;\n\t\t\t\t\t\t\ttempValue = remainingArrayNodeValues;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Value should be set\n\t\t\t\t\tif (typeof value === 'object') {\n\t\t\t\t\t\tset(\n\t\t\t\t\t\t\tget(this.nodeValues, nameParts.join('.')) as Record<string, unknown>,\n\t\t\t\t\t\t\tlastNamePart as string,\n\t\t\t\t\t\t\tdeepCopy(value),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tset(\n\t\t\t\t\t\t\tget(this.nodeValues, nameParts.join('.')) as Record<string, unknown>,\n\t\t\t\t\t\t\tlastNamePart as string,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.nodeValues = { ...this.nodeValues };\n\t\t},\n\t\tcredentialSelected(updateInformation: INodeUpdatePropertiesInformation) {\n\t\t\t// Update the values on the node\n\t\t\tthis.workflowsStore.updateNodeProperties(updateInformation);\n\n\t\t\tconst node = this.workflowsStore.getNodeByName(updateInformation.name);\n\n\t\t\tif (node) {\n\t\t\t\t// Update the issues\n\t\t\t\tthis.nodeHelpers.updateNodeCredentialIssues(node);\n\t\t\t}\n\n\t\t\tvoid this.externalHooks.run('nodeSettings.credentialSelected', { updateInformation });\n\t\t},\n\t\tnameChanged(name: string) {\n\t\t\tif (this.node) {\n\t\t\t\tthis.historyStore.pushCommandToUndo(new RenameNodeCommand(this.node.name, name));\n\t\t\t}\n\t\t\t// @ts-ignore\n\t\t\tthis.valueChanged({\n\t\t\t\tvalue: name,\n\t\t\t\tname: 'name',\n\t\t\t});\n\t\t},\n\t\tvalueChanged(parameterData: IUpdateInformation) {\n\t\t\tlet newValue: NodeParameterValue;\n\n\t\t\tif (parameterData.hasOwnProperty('value')) {\n\t\t\t\t// New value is given\n\t\t\t\tnewValue = parameterData.value as string | number;\n\t\t\t} else {\n\t\t\t\t// Get new value from nodeData where it is set already\n\t\t\t\tnewValue = get(this.nodeValues, parameterData.name) as NodeParameterValue;\n\t\t\t}\n\t\t\t// Save the node name before we commit the change because\n\t\t\t// we need the old name to rename the node properly\n\t\t\tconst nodeNameBefore = parameterData.node || this.node?.name;\n\n\t\t\tif (!nodeNameBefore) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst node = this.workflowsStore.getNodeByName(nodeNameBefore);\n\n\t\t\tif (node === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (parameterData.name === 'onError') {\n\t\t\t\t// If that parameter changes, we need to redraw the connections, as the error output may need to be added or removed\n\t\t\t\tthis.$emit('redrawRequired');\n\t\t\t}\n\n\t\t\tif (parameterData.name === 'name') {\n\t\t\t\t// Name of node changed so we have to set also the new node name as active\n\n\t\t\t\t// Update happens in NodeView so emit event\n\t\t\t\tconst sendData = {\n\t\t\t\t\tvalue: newValue,\n\t\t\t\t\toldValue: nodeNameBefore,\n\t\t\t\t\tname: parameterData.name,\n\t\t\t\t};\n\t\t\t\tthis.$emit('valueChanged', sendData);\n\t\t\t} else if (parameterData.name === 'parameters') {\n\t\t\t\tconst nodeType = this.nodeTypesStore.getNodeType(node.type, node.typeVersion);\n\t\t\t\tif (!nodeType) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Get only the parameters which are different to the defaults\n\t\t\t\tlet nodeParameters = NodeHelpers.getNodeParameters(\n\t\t\t\t\tnodeType.properties,\n\t\t\t\t\tnode.parameters,\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tnode,\n\t\t\t\t);\n\n\t\t\t\tconst oldNodeParameters = Object.assign({}, nodeParameters);\n\n\t\t\t\t// Copy the data because it is the data of vuex so make sure that\n\t\t\t\t// we do not edit it directly\n\t\t\t\tnodeParameters = deepCopy(nodeParameters);\n\n\t\t\t\tif (parameterData.value && typeof parameterData.value === 'object') {\n\t\t\t\t\tfor (const parameterName of Object.keys(parameterData.value)) {\n\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\tnewValue = parameterData.value[parameterName];\n\n\t\t\t\t\t\t// Remove the 'parameters.' from the beginning to just have the\n\t\t\t\t\t\t// actual parameter name\n\t\t\t\t\t\tconst parameterPath = parameterName.split('.').slice(1).join('.');\n\n\t\t\t\t\t\t// Check if the path is supposed to change an array and if so get\n\t\t\t\t\t\t// the needed data like path and index\n\t\t\t\t\t\tconst parameterPathArray = parameterPath.match(/(.*)\\[(\\d+)\\]$/);\n\n\t\t\t\t\t\t// Apply the new value\n\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\tif (parameterData[parameterName] === undefined && parameterPathArray !== null) {\n\t\t\t\t\t\t\t// Delete array item\n\t\t\t\t\t\t\tconst path = parameterPathArray[1];\n\t\t\t\t\t\t\tconst index = parameterPathArray[2];\n\t\t\t\t\t\t\tconst data = get(nodeParameters, path);\n\n\t\t\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\t\t\tdata.splice(parseInt(index, 10), 1);\n\t\t\t\t\t\t\t\tset(nodeParameters as object, path, data);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (newValue === undefined) {\n\t\t\t\t\t\t\t\tunset(nodeParameters as object, parameterPath);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tset(nodeParameters as object, parameterPath, newValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvoid this.externalHooks.run('nodeSettings.valueChanged', {\n\t\t\t\t\t\t\tparameterPath,\n\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\tparameters: this.parameters,\n\t\t\t\t\t\t\toldNodeParameters,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Get the parameters with the now new defaults according to the\n\t\t\t\t// from the user actually defined parameters\n\t\t\t\tnodeParameters = NodeHelpers.getNodeParameters(\n\t\t\t\t\tnodeType.properties,\n\t\t\t\t\tnodeParameters as INodeParameters,\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t\tnode,\n\t\t\t\t);\n\n\t\t\t\tfor (const key of Object.keys(nodeParameters as object)) {\n\t\t\t\t\tif (nodeParameters && nodeParameters[key] !== null && nodeParameters[key] !== undefined) {\n\t\t\t\t\t\tthis.setValue(`parameters.${key}`, nodeParameters[key] as string);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (nodeParameters) {\n\t\t\t\t\tconst updateInformation: IUpdateInformation = {\n\t\t\t\t\t\tname: node.name,\n\t\t\t\t\t\tvalue: nodeParameters,\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.workflowsStore.setNodeParameters(updateInformation);\n\n\t\t\t\t\tthis.nodeHelpers.updateNodeParameterIssuesByName(node.name);\n\t\t\t\t\tthis.nodeHelpers.updateNodeCredentialIssuesByName(node.name);\n\t\t\t\t}\n\t\t\t} else if (parameterData.name.startsWith('parameters.')) {\n\t\t\t\t// A node parameter changed\n\n\t\t\t\tconst nodeType = this.nodeTypesStore.getNodeType(node.type, node.typeVersion);\n\t\t\t\tif (!nodeType) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tparameterData.type &&\n\t\t\t\t\tthis.workflowsStore.nodeHasOutputConnection(node.name) &&\n\t\t\t\t\tSHOULD_CLEAR_NODE_OUTPUTS[nodeType.name]?.eventTypes.includes(parameterData.type) &&\n\t\t\t\t\tSHOULD_CLEAR_NODE_OUTPUTS[nodeType.name]?.parameterPaths.includes(parameterData.name)\n\t\t\t\t) {\n\t\t\t\t\tthis.workflowsStore.removeAllNodeConnection(node, { preserveInputConnections: true });\n\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\ttype: 'warning',\n\t\t\t\t\t\ttitle: this.$locale.baseText('nodeSettings.outputCleared.title'),\n\t\t\t\t\t\tmessage: this.$locale.baseText('nodeSettings.outputCleared.message'),\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Get only the parameters which are different to the defaults\n\t\t\t\tlet nodeParameters = NodeHelpers.getNodeParameters(\n\t\t\t\t\tnodeType.properties,\n\t\t\t\t\tnode.parameters,\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tnode,\n\t\t\t\t);\n\t\t\t\tconst oldNodeParameters = Object.assign({}, nodeParameters);\n\n\t\t\t\t// Copy the data because it is the data of vuex so make sure that\n\t\t\t\t// we do not edit it directly\n\t\t\t\tnodeParameters = deepCopy(nodeParameters);\n\n\t\t\t\t// Remove the 'parameters.' from the beginning to just have the\n\t\t\t\t// actual parameter name\n\t\t\t\tconst parameterPath = parameterData.name.split('.').slice(1).join('.');\n\n\t\t\t\t// Check if the path is supposed to change an array and if so get\n\t\t\t\t// the needed data like path and index\n\t\t\t\tconst parameterPathArray = parameterPath.match(/(.*)\\[(\\d+)\\]$/);\n\n\t\t\t\t// Apply the new value\n\t\t\t\tif (parameterData.value === undefined && parameterPathArray !== null) {\n\t\t\t\t\t// Delete array item\n\t\t\t\t\tconst path = parameterPathArray[1];\n\t\t\t\t\tconst index = parameterPathArray[2];\n\t\t\t\t\tconst data = get(nodeParameters, path);\n\n\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\tdata.splice(parseInt(index, 10), 1);\n\t\t\t\t\t\tset(nodeParameters as object, path, data);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (newValue === undefined) {\n\t\t\t\t\t\tunset(nodeParameters as object, parameterPath);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tset(nodeParameters as object, parameterPath, newValue);\n\t\t\t\t\t}\n\t\t\t\t\t// If value is updated, remove parameter values that have invalid options\n\t\t\t\t\t// so getNodeParameters checks don't fail\n\t\t\t\t\tthis.removeMismatchedOptionValues(nodeType, nodeParameters, {\n\t\t\t\t\t\tname: parameterPath,\n\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Get the parameters with the now new defaults according to the\n\t\t\t\t// from the user actually defined parameters\n\t\t\t\tnodeParameters = NodeHelpers.getNodeParameters(\n\t\t\t\t\tnodeType.properties,\n\t\t\t\t\tnodeParameters as INodeParameters,\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t\tnode,\n\t\t\t\t);\n\n\t\t\t\tfor (const key of Object.keys(nodeParameters as object)) {\n\t\t\t\t\tif (nodeParameters && nodeParameters[key] !== null && nodeParameters[key] !== undefined) {\n\t\t\t\t\t\tthis.setValue(`parameters.${key}`, nodeParameters[key] as string);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Update the data in vuex\n\t\t\t\tconst updateInformation: IUpdateInformation = {\n\t\t\t\t\tname: node.name,\n\t\t\t\t\tvalue: nodeParameters,\n\t\t\t\t};\n\n\t\t\t\tthis.workflowsStore.setNodeParameters(updateInformation);\n\n\t\t\t\tvoid this.externalHooks.run('nodeSettings.valueChanged', {\n\t\t\t\t\tparameterPath,\n\t\t\t\t\tnewValue,\n\t\t\t\t\tparameters: this.parameters,\n\t\t\t\t\toldNodeParameters,\n\t\t\t\t});\n\n\t\t\t\tthis.nodeHelpers.updateNodeParameterIssuesByName(node.name);\n\t\t\t\tthis.nodeHelpers.updateNodeCredentialIssuesByName(node.name);\n\t\t\t\tthis.$telemetry.trackNodeParametersValuesChange(nodeType.name, parameterData);\n\t\t\t} else {\n\t\t\t\t// A property on the node itself changed\n\n\t\t\t\t// Update data in settings\n\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t[parameterData.name]: newValue,\n\t\t\t\t};\n\n\t\t\t\t// Update data in vuex\n\t\t\t\tconst updateInformation = {\n\t\t\t\t\tname: node.name,\n\t\t\t\t\tkey: parameterData.name,\n\t\t\t\t\tvalue: newValue,\n\t\t\t\t};\n\n\t\t\t\tthis.workflowsStore.setNodeValue(updateInformation);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Removes node values that are not valid options for the given parameter.\n\t\t * This can happen when there are multiple node parameters with the same name\n\t\t * but different options and display conditions\n\t\t * @param nodeType The node type description\n\t\t * @param nodeParameterValues Current node parameter values\n\t\t * @param updatedParameter The parameter that was updated. Will be used to determine which parameters to remove based on their display conditions and option values\n\t\t */\n\t\tremoveMismatchedOptionValues(\n\t\t\tnodeType: INodeTypeDescription,\n\t\t\tnodeParameterValues: INodeParameters | null,\n\t\t\tupdatedParameter: { name: string; value: NodeParameterValue },\n\t\t) {\n\t\t\tnodeType.properties.forEach((prop) => {\n\t\t\t\tconst displayOptions = prop.displayOptions;\n\t\t\t\t// Not processing parameters that are not set or don't have options\n\t\t\t\tif (!nodeParameterValues?.hasOwnProperty(prop.name) || !displayOptions || !prop.options) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Only process the parameters that depend on the updated parameter\n\t\t\t\tconst showCondition = displayOptions.show?.[updatedParameter.name];\n\t\t\t\tconst hideCondition = displayOptions.hide?.[updatedParameter.name];\n\t\t\t\tif (showCondition === undefined && hideCondition === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet hasValidOptions = true;\n\n\t\t\t\t// Every value should be a possible option\n\t\t\t\tif (isINodePropertyCollectionList(prop.options) || isINodePropertiesList(prop.options)) {\n\t\t\t\t\thasValidOptions = Object.keys(nodeParameterValues).every(\n\t\t\t\t\t\t(key) => (prop.options ?? []).find((option) => option.name === key) !== undefined,\n\t\t\t\t\t);\n\t\t\t\t} else if (isINodePropertyOptionsList(prop.options)) {\n\t\t\t\t\thasValidOptions = !!prop.options.find(\n\t\t\t\t\t\t(option) => option.value === nodeParameterValues[prop.name],\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (!hasValidOptions && displayParameter(nodeParameterValues, prop, this.node)) {\n\t\t\t\t\tunset(nodeParameterValues as object, prop.name);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * Sets the values of the active node in the internal settings variables\n\t\t */\n\t\tsetNodeValues() {\n\t\t\t// No node selected\n\t\t\tif (!this.node) {\n\t\t\t\tthis.nodeValuesInitialized = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.nodeType !== null) {\n\t\t\t\tthis.nodeValid = true;\n\n\t\t\t\tconst foundNodeSettings = [];\n\t\t\t\tif (this.node.color) {\n\t\t\t\t\tfoundNodeSettings.push('color');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tcolor: this.node.color,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.notes) {\n\t\t\t\t\tfoundNodeSettings.push('notes');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tnotes: this.node.notes,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.alwaysOutputData) {\n\t\t\t\t\tfoundNodeSettings.push('alwaysOutputData');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\talwaysOutputData: this.node.alwaysOutputData,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.executeOnce) {\n\t\t\t\t\tfoundNodeSettings.push('executeOnce');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\texecuteOnce: this.node.executeOnce,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.continueOnFail) {\n\t\t\t\t\tfoundNodeSettings.push('onError');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tonError: 'continueRegularOutput',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.onError) {\n\t\t\t\t\tfoundNodeSettings.push('onError');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tonError: this.node.onError,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.notesInFlow) {\n\t\t\t\t\tfoundNodeSettings.push('notesInFlow');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tnotesInFlow: this.node.notesInFlow,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.retryOnFail) {\n\t\t\t\t\tfoundNodeSettings.push('retryOnFail');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tretryOnFail: this.node.retryOnFail,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.maxTries) {\n\t\t\t\t\tfoundNodeSettings.push('maxTries');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tmaxTries: this.node.maxTries,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.waitBetweenTries) {\n\t\t\t\t\tfoundNodeSettings.push('waitBetweenTries');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\twaitBetweenTries: this.node.waitBetweenTries,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Set default node settings\n\t\t\t\tfor (const nodeSetting of this.nodeSettings) {\n\t\t\t\t\tif (!foundNodeSettings.includes(nodeSetting.name)) {\n\t\t\t\t\t\t// Set default value\n\t\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\t\t[nodeSetting.name]: nodeSetting.default,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\tparameters: deepCopy(this.node.parameters),\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tthis.nodeValid = false;\n\t\t\t}\n\n\t\t\tthis.nodeValuesInitialized = true;\n\t\t},\n\t\tonMissingNodeTextClick(event: MouseEvent) {\n\t\t\tif ((event.target as Element).localName === 'a') {\n\t\t\t\tthis.$telemetry.track('user clicked cnr browse button', {\n\t\t\t\t\tsource: 'cnr missing node modal',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tonMissingNodeLearnMoreLinkClick() {\n\t\t\tthis.$telemetry.track('user clicked cnr docs link', {\n\t\t\t\tsource: 'missing node modal source',\n\t\t\t\tpackage_name: this.node?.type.split('.')[0],\n\t\t\t\tnode_type: this.node?.type,\n\t\t\t});\n\t\t},\n\t\tonStopExecution() {\n\t\t\tthis.$emit('stopExecution');\n\t\t},\n\t\topenSettings() {\n\t\t\tthis.openPanel = 'settings';\n\t\t},\n\t\tonTabSelect(tab: 'params' | 'settings') {\n\t\t\tthis.openPanel = tab;\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.header {\n\tbackground-color: var(--color-background-base);\n}\n\n.warningIcon {\n\tcolor: var(--color-text-lighter);\n\tfont-size: var(--font-size-2xl);\n}\n\n.descriptionContainer {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.node-settings {\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n\tbackground-color: var(--color-background-xlight);\n\theight: 100%;\n\twidth: 100%;\n\n\t.no-parameters {\n\t\tmargin-top: var(--spacing-xs);\n\t}\n\n\t.header-side-menu {\n\t\tpadding: var(--spacing-s) var(--spacing-s) var(--spacing-s) var(--spacing-s);\n\t\tfont-size: var(--font-size-l);\n\t\tdisplay: flex;\n\n\t\t.node-name {\n\t\t\tpadding-top: var(--spacing-5xs);\n\t\t\tflex-grow: 1;\n\t\t}\n\t}\n\n\t.node-is-not-valid {\n\t\theight: 75%;\n\t\tpadding: 10px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\ttext-align: center;\n\t\tline-height: var(--font-line-height-regular);\n\t}\n\n\t.node-parameters-wrapper {\n\t\toverflow-y: auto;\n\t\tpadding: 0 var(--spacing-m) var(--spacing-l) var(--spacing-m);\n\t\tflex-grow: 1;\n\t}\n\n\t&.dragging {\n\t\tborder-color: var(--color-primary);\n\t\tbox-shadow: 0px 6px 16px rgba(255, 74, 51, 0.15);\n\t}\n}\n\n.parameter-content {\n\tfont-size: 0.9em;\n\tmargin-right: -15px;\n\tmargin-left: -15px;\n\tinput {\n\t\twidth: calc(100% - 35px);\n\t\tpadding: 5px;\n\t}\n\tselect {\n\t\twidth: calc(100% - 20px);\n\t\tpadding: 5px;\n\t}\n\n\t&:before {\n\t\tdisplay: table;\n\t\tcontent: ' ';\n\t\tposition: relative;\n\t\tbox-sizing: border-box;\n\t\tclear: both;\n\t}\n}\n\n.parameter-wrapper {\n\tpadding: 0 1em;\n}\n\n.color-reset-button-wrapper {\n\tposition: relative;\n}\n.color-reset-button {\n\tposition: absolute;\n\tright: 7px;\n\ttop: -25px;\n}\n\n.node-version {\n\tborder-top: var(--border-base);\n\tfont-size: var(--font-size-xs);\n\tfont-size: var(--font-size-2xs);\n\tpadding: var(--spacing-xs) 0 var(--spacing-2xs) 0;\n\tcolor: var(--color-text-light);\n}\n\n.parameter-value {\n\tinput.expression {\n\t\tborder-style: dashed;\n\t\tborder-color: #ff9600;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\tbox-sizing: border-box;\n\t\tbackground-color: #793300;\n\t}\n}\n</style>\n","<template>\n\t<component\n\t\t:is=\"tag\"\n\t\tref=\"wrapper\"\n\t\t:class=\"{ [$style.dragging]: isDragging }\"\n\t\t@mousedown=\"onDragStart\"\n\t>\n\t\t<slot :is-dragging=\"isDragging\"></slot>\n\n\t\t<Teleport to=\"body\">\n\t\t\t<div v-show=\"isDragging\" ref=\"draggable\" :class=\"$style.draggable\" :style=\"draggableStyle\">\n\t\t\t\t<slot name=\"preview\" :can-drop=\"canDrop\" :el=\"draggingEl\"></slot>\n\t\t\t</div>\n\t\t</Teleport>\n\t</component>\n</template>\n\n<script lang=\"ts\">\nimport type { XYPosition } from '@/Interface';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { mapStores } from 'pinia';\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tname: 'Draggable',\n\tprops: {\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdata: {\n\t\t\ttype: String,\n\t\t},\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'div',\n\t\t},\n\t\ttargetDataKey: {\n\t\t\ttype: String,\n\t\t},\n\t},\n\tdata() {\n\t\tconst draggablePosition = {\n\t\t\tx: -100,\n\t\t\ty: -100,\n\t\t};\n\n\t\treturn {\n\t\t\tisDragging: false,\n\t\t\tdraggablePosition,\n\t\t\tdraggingEl: null as null | HTMLElement,\n\t\t\tdraggableStyle: {\n\t\t\t\ttransform: `translate(${draggablePosition.x}px, ${draggablePosition.y}px)`,\n\t\t\t},\n\t\t\tanimationFrameId: 0,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNDVStore),\n\t\tcanDrop(): boolean {\n\t\t\treturn this.ndvStore.canDraggableDrop;\n\t\t},\n\t\tstickyPosition(): XYPosition | null {\n\t\t\treturn this.ndvStore.draggableStickyPos;\n\t\t},\n\t},\n\tmethods: {\n\t\tsetDraggableStyle() {\n\t\t\tthis.draggableStyle = {\n\t\t\t\ttransform: `translate(${this.draggablePosition.x}px, ${this.draggablePosition.y}px)`,\n\t\t\t};\n\t\t},\n\t\tonDragStart(e: MouseEvent) {\n\t\t\tif (this.disabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.draggingEl = e.target as HTMLElement;\n\t\t\tif (this.targetDataKey && this.draggingEl.dataset?.target !== this.targetDataKey) {\n\t\t\t\tthis.draggingEl = this.draggingEl.closest(\n\t\t\t\t\t`[data-target=\"${this.targetDataKey}\"]`,\n\t\t\t\t) as HTMLElement;\n\t\t\t}\n\n\t\t\tif (this.targetDataKey && this.draggingEl?.dataset?.target !== this.targetDataKey) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tthis.isDragging = false;\n\t\t\tthis.draggablePosition = { x: e.pageX, y: e.pageY };\n\t\t\tthis.setDraggableStyle();\n\n\t\t\twindow.addEventListener('mousemove', this.onDrag);\n\t\t\twindow.addEventListener('mouseup', this.onDragEnd);\n\n\t\t\t// blur so that any focused inputs update value\n\t\t\tconst activeElement = document.activeElement as HTMLElement;\n\t\t\tif (activeElement) {\n\t\t\t\tactiveElement.blur();\n\t\t\t}\n\t\t},\n\t\tonDrag(e: MouseEvent) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tif (this.disabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!this.isDragging) {\n\t\t\t\tthis.isDragging = true;\n\n\t\t\t\tconst data =\n\t\t\t\t\tthis.targetDataKey && this.draggingEl ? this.draggingEl.dataset.value : this.data || '';\n\t\t\t\tthis.ndvStore.draggableStartDragging({\n\t\t\t\t\ttype: this.type,\n\t\t\t\t\tdata: data || '',\n\t\t\t\t\tdimensions: this.draggingEl?.getBoundingClientRect() ?? null,\n\t\t\t\t});\n\n\t\t\t\tthis.$emit('dragstart', this.draggingEl);\n\t\t\t\tdocument.body.style.cursor = 'grabbing';\n\t\t\t}\n\n\t\t\tthis.animationFrameId = window.requestAnimationFrame(() => {\n\t\t\t\tif (this.canDrop && this.stickyPosition) {\n\t\t\t\t\tthis.draggablePosition = { x: this.stickyPosition[0], y: this.stickyPosition[1] };\n\t\t\t\t} else {\n\t\t\t\t\tthis.draggablePosition = { x: e.pageX, y: e.pageY };\n\t\t\t\t}\n\t\t\t\tthis.setDraggableStyle();\n\t\t\t\tthis.$emit('drag', this.draggablePosition);\n\t\t\t});\n\t\t},\n\t\tonDragEnd() {\n\t\t\tif (this.disabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdocument.body.style.cursor = 'unset';\n\t\t\twindow.removeEventListener('mousemove', this.onDrag);\n\t\t\twindow.removeEventListener('mouseup', this.onDragEnd);\n\t\t\twindow.cancelAnimationFrame(this.animationFrameId);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.$emit('dragend', this.draggingEl);\n\t\t\t\tthis.isDragging = false;\n\t\t\t\tthis.draggingEl = null;\n\t\t\t\tthis.ndvStore.draggableStopDragging();\n\t\t\t}, 0);\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.dragging {\n\tvisibility: visible;\n\tcursor: grabbing;\n}\n\n.draggable {\n\tposition: fixed;\n\tz-index: 9999999;\n\ttop: 0;\n\tleft: 0;\n}\n\n.draggable-data-transfer {\n\twidth: 0;\n\theight: 0;\n}\n</style>\n","<template>\n\t<Draggable\n\t\ttype=\"panel-resize\"\n\t\t:class=\"$style.dragContainer\"\n\t\t@drag=\"onDrag\"\n\t\t@dragstart=\"onDragStart\"\n\t\t@dragend=\"onDragEnd\"\n\t>\n\t\t<template #default=\"{ isDragging }\">\n\t\t\t<div :class=\"{ [$style.dragButton]: true }\">\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"canMoveLeft\"\n\t\t\t\t\t:class=\"{ [$style.leftArrow]: true, [$style.visible]: isDragging }\"\n\t\t\t\t>\n\t\t\t\t\t<font-awesome-icon icon=\"arrow-left\" />\n\t\t\t\t</span>\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"canMoveRight\"\n\t\t\t\t\t:class=\"{ [$style.rightArrow]: true, [$style.visible]: isDragging }\"\n\t\t\t\t>\n\t\t\t\t\t<font-awesome-icon icon=\"arrow-right\" />\n\t\t\t\t</span>\n\t\t\t\t<div :class=\"$style.grid\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</Draggable>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport Draggable from './Draggable.vue';\n\nexport default defineComponent({\n\tcomponents: {\n\t\tDraggable,\n\t},\n\tprops: {\n\t\tcanMoveRight: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tcanMoveLeft: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tmethods: {\n\t\tonDrag(e: { x: number; y: number }) {\n\t\t\tthis.$emit('drag', e);\n\t\t},\n\t\tonDragStart() {\n\t\t\tthis.$emit('dragstart');\n\t\t},\n\t\tonDragEnd() {\n\t\t\tthis.$emit('dragend');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.dragContainer {\n\tpointer-events: all;\n}\n.dragButton {\n\tbackground-color: var(--color-background-base);\n\twidth: 64px;\n\theight: 21px;\n\tborder-top-left-radius: var(--border-radius-base);\n\tborder-top-right-radius: var(--border-radius-base);\n\tcursor: grab;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\toverflow: visible;\n\tposition: relative;\n\tz-index: 3;\n\n\t&:hover {\n\t\t.leftArrow,\n\t\t.rightArrow {\n\t\t\tvisibility: visible;\n\t\t}\n\t}\n}\n\n.visible {\n\tvisibility: visible !important;\n}\n\n.arrow {\n\tposition: absolute;\n\tcolor: var(--color-background-xlight);\n\tfont-size: var(--font-size-3xs);\n\tvisibility: hidden;\n\ttop: 0;\n}\n\n.leftArrow {\n\tcomposes: arrow;\n\tleft: -16px;\n}\n\n.rightArrow {\n\tcomposes: arrow;\n\tright: -16px;\n}\n\n.grid {\n\t> div {\n\t\tdisplay: flex;\n\n\t\t&:first-child {\n\t\t\t> div {\n\t\t\t\tmargin-bottom: 2px;\n\t\t\t}\n\t\t}\n\n\t\t> div {\n\t\t\theight: 2px;\n\t\t\twidth: 2px;\n\t\t\tborder-radius: 50%;\n\t\t\tbackground-color: var(--color-foreground-xdark);\n\t\t\tmargin-right: 4px;\n\n\t\t\t&:last-child {\n\t\t\t\tmargin-right: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<aside :class=\"$style.floatingNodes\">\n\t\t<ul\n\t\t\tv-for=\"connectionGroup in connectionGroups\"\n\t\t\t:key=\"connectionGroup\"\n\t\t\t:class=\"[$style.nodesList, $style[connectionGroup]]\"\n\t\t>\n\t\t\t<template v-for=\"{ node, nodeType } in connectedNodes[connectionGroup]\">\n\t\t\t\t<n8n-tooltip\n\t\t\t\t\tv-if=\"node && nodeType\"\n\t\t\t\t\t:key=\"node.name\"\n\t\t\t\t\t:placement=\"tooltipPositionMapper[connectionGroup]\"\n\t\t\t\t\t:teleported=\"false\"\n\t\t\t\t\t:offset=\"60\"\n\t\t\t\t>\n\t\t\t\t\t<template #content>{{ node.name }}</template>\n\n\t\t\t\t\t<li\n\t\t\t\t\t\t:class=\"$style.connectedNode\"\n\t\t\t\t\t\tdata-test-id=\"floating-node\"\n\t\t\t\t\t\t:data-node-name=\"node.name\"\n\t\t\t\t\t\t:data-node-placement=\"connectionGroup\"\n\t\t\t\t\t\t@click=\"$emit('switchSelectedNode', node.name)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<NodeIcon\n\t\t\t\t\t\t\t:node-type=\"nodeType\"\n\t\t\t\t\t\t\t:node-name=\"node.name\"\n\t\t\t\t\t\t\t:tooltip-position=\"tooltipPositionMapper[connectionGroup]\"\n\t\t\t\t\t\t\t:size=\"35\"\n\t\t\t\t\t\t\tcircle\n\t\t\t\t\t\t/>\n\t\t\t\t\t</li>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</template>\n\t\t</ul>\n\t</aside>\n</template>\n\n<script setup lang=\"ts\">\nimport type { INodeUi } from '@/Interface';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { computed, onMounted, onBeforeUnmount } from 'vue';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport type { INodeTypeDescription } from 'n8n-workflow';\n\ninterface Props {\n\trootNode: INodeUi;\n}\nconst enum FloatingNodePosition {\n\ttop = 'outputSub',\n\tright = 'outputMain',\n\tleft = 'inputMain',\n}\nconst props = defineProps<Props>();\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst workflow = workflowsStore.getCurrentWorkflow();\nconst emit = defineEmits(['switchSelectedNode']);\n\ninterface NodeConfig {\n\tnode: INodeUi;\n\tnodeType: INodeTypeDescription;\n}\nfunction moveNodeDirection(direction: FloatingNodePosition) {\n\tconst matchedDirectionNode = connectedNodes.value[direction][0];\n\tif (matchedDirectionNode) {\n\t\temit('switchSelectedNode', matchedDirectionNode.node.name);\n\t}\n}\n\nfunction onKeyDown(e: KeyboardEvent) {\n\tif (e.shiftKey && e.altKey && (e.ctrlKey || e.metaKey)) {\n\t\t/* eslint-disable @typescript-eslint/naming-convention */\n\t\tconst mapper = {\n\t\t\tArrowUp: FloatingNodePosition.top,\n\t\t\tArrowRight: FloatingNodePosition.right,\n\t\t\tArrowLeft: FloatingNodePosition.left,\n\t\t};\n\t\t/* eslint-enable @typescript-eslint/naming-convention */\n\n\t\tconst matchingDirection = mapper[e.key as keyof typeof mapper] || null;\n\t\tif (matchingDirection) {\n\t\t\tmoveNodeDirection(matchingDirection);\n\t\t}\n\t}\n}\nfunction getINodesFromNames(names: string[]): NodeConfig[] {\n\treturn names\n\t\t.map((name) => {\n\t\t\tconst node = workflowsStore.getNodeByName(name);\n\t\t\tif (node) {\n\t\t\t\tconst nodeType = nodeTypesStore.getNodeType(node.type);\n\t\t\t\tif (nodeType) {\n\t\t\t\t\treturn { node, nodeType };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t})\n\t\t.filter((n): n is NodeConfig => n !== null);\n}\nconst connectedNodes = computed<\n\tRecord<FloatingNodePosition, Array<{ node: INodeUi; nodeType: INodeTypeDescription }>>\n>(() => {\n\tconst rootName = props.rootNode.name;\n\treturn {\n\t\t[FloatingNodePosition.top]: getINodesFromNames(\n\t\t\tworkflow.getChildNodes(rootName, 'ALL_NON_MAIN'),\n\t\t),\n\t\t[FloatingNodePosition.right]: getINodesFromNames(workflow.getChildNodes(rootName, 'main', 1)),\n\t\t[FloatingNodePosition.left]: getINodesFromNames(workflow.getParentNodes(rootName, 'main', 1)),\n\t};\n});\n\nconst connectionGroups = [\n\tFloatingNodePosition.top,\n\tFloatingNodePosition.right,\n\tFloatingNodePosition.left,\n];\nconst tooltipPositionMapper = {\n\t[FloatingNodePosition.top]: 'bottom',\n\t[FloatingNodePosition.right]: 'left',\n\t[FloatingNodePosition.left]: 'right',\n} as const;\n\nonMounted(() => {\n\tdocument.addEventListener('keydown', onKeyDown, true);\n});\n\nonBeforeUnmount(() => {\n\tdocument.removeEventListener('keydown', onKeyDown, true);\n});\ndefineExpose({\n\tmoveNodeDirection,\n});\n</script>\n\n<style lang=\"scss\" module>\n.floatingNodes {\n\tposition: fixed;\n\tbottom: 0;\n\ttop: 0;\n\tright: 0;\n\tleft: 0;\n\tz-index: 10;\n\tpointer-events: none;\n}\n.floatingNodes {\n\tright: 0;\n}\n\n.nodesList {\n\tlist-style: none;\n\tpadding: 0;\n\tposition: absolute;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-direction: column;\n\twidth: min-content;\n\tmargin: auto;\n\ttransform-origin: center;\n\tgap: var(--spacing-s);\n\ttransition: transform 0.2s ease-in-out;\n\n\t&.inputSub,\n\t&.outputSub {\n\t\tright: 0;\n\t\tleft: 0;\n\t\tflex-direction: row;\n\t}\n\t&.outputSub {\n\t\ttop: 0;\n\t}\n\t&.inputSub {\n\t\tbottom: 0;\n\t}\n\t&.outputMain,\n\t&.inputMain {\n\t\ttop: 0;\n\t\tbottom: 0;\n\t}\n\t&.outputMain {\n\t\tright: 0;\n\t}\n\t&.inputMain {\n\t\tleft: 0;\n\t}\n\n\t&.outputMain {\n\t\ttransform: translateX(50%);\n\t}\n\t&.outputSub {\n\t\ttransform: translateY(-50%);\n\t}\n\t&.inputMain {\n\t\ttransform: translateX(-50%);\n\t}\n\t&.inputSub {\n\t\ttransform: translateY(50%);\n\t}\n}\n.connectedNode {\n\tborder: var(--border-base);\n\tbackground-color: var(--color-node-background);\n\tborder-radius: 100%;\n\tpadding: var(--spacing-s);\n\tcursor: pointer;\n\tpointer-events: all;\n\ttransition: transform 0.2s cubic-bezier(0.19, 1, 0.22, 1);\n\tposition: relative;\n\ttransform: scale(0.8);\n\tdisplay: flex;\n\tjustify-self: center;\n\talign-self: center;\n\n\t&::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\ttop: -35%;\n\t\tright: -30%;\n\t\tbottom: -35%;\n\t\tleft: -30%;\n\t\tz-index: -1;\n\t}\n\t.outputMain &,\n\t.inputMain & {\n\t\tborder-radius: var(--border-radius-large);\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\t.outputMain & {\n\t\t&:hover {\n\t\t\ttransform: scale(1.2) translateX(-50%);\n\t\t}\n\t}\n\t.outputSub & {\n\t\t&:hover {\n\t\t\ttransform: scale(1.2) translateY(50%);\n\t\t}\n\t}\n\t.inputMain & {\n\t\t&:hover {\n\t\t\ttransform: scale(1.2) translateX(50%);\n\t\t}\n\t}\n\t.inputSub & {\n\t\t&:hover {\n\t\t\ttransform: scale(1.2) translateY(-50%);\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div>\n\t\t<NDVFloatingNodes\n\t\t\tv-if=\"activeNode\"\n\t\t\t:root-node=\"activeNode\"\n\t\t\t@switch-selected-node=\"onSwitchSelectedNode\"\n\t\t/>\n\t\t<div v-if=\"!hideInputAndOutput\" :class=\"$style.inputPanel\" :style=\"inputPanelStyles\">\n\t\t\t<slot name=\"input\"></slot>\n\t\t</div>\n\t\t<div v-if=\"!hideInputAndOutput\" :class=\"$style.outputPanel\" :style=\"outputPanelStyles\">\n\t\t\t<slot name=\"output\"></slot>\n\t\t</div>\n\t\t<div :class=\"$style.mainPanel\" :style=\"mainPanelStyles\">\n\t\t\t<n8n-resize-wrapper\n\t\t\t\t:is-resizing-enabled=\"currentNodePaneType !== 'unknown'\"\n\t\t\t\t:width=\"relativeWidthToPx(mainPanelDimensions.relativeWidth)\"\n\t\t\t\t:min-width=\"MIN_PANEL_WIDTH\"\n\t\t\t\t:grid-size=\"20\"\n\t\t\t\t:supported-directions=\"supportedResizeDirections\"\n\t\t\t\t@resize=\"onResizeDebounced\"\n\t\t\t\t@resizestart=\"onResizeStart\"\n\t\t\t\t@resizeend=\"onResizeEnd\"\n\t\t\t>\n\t\t\t\t<div :class=\"$style.dragButtonContainer\">\n\t\t\t\t\t<PanelDragButton\n\t\t\t\t\t\tv-if=\"!hideInputAndOutput && isDraggable\"\n\t\t\t\t\t\t:class=\"{ [$style.draggable]: true, [$style.visible]: isDragging }\"\n\t\t\t\t\t\t:can-move-left=\"canMoveLeft\"\n\t\t\t\t\t\t:can-move-right=\"canMoveRight\"\n\t\t\t\t\t\t@dragstart=\"onDragStart\"\n\t\t\t\t\t\t@drag=\"onDrag\"\n\t\t\t\t\t\t@dragend=\"onDragEnd\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div :class=\"{ [$style.mainPanelInner]: true, [$style.dragging]: isDragging }\">\n\t\t\t\t\t<slot name=\"main\" />\n\t\t\t\t</div>\n\t\t\t</n8n-resize-wrapper>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { PropType } from 'vue';\nimport { mapStores } from 'pinia';\nimport { get } from 'lodash-es';\nimport { useStorage } from '@/composables/useStorage';\n\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport PanelDragButton from './PanelDragButton.vue';\n\nimport { LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH, MAIN_NODE_PANEL_WIDTH } from '@/constants';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { ndvEventBus } from '@/event-bus';\nimport NDVFloatingNodes from '@/components/NDVFloatingNodes.vue';\nimport { useDebounce } from '@/composables/useDebounce';\n\nconst SIDE_MARGIN = 24;\nconst SIDE_PANELS_MARGIN = 80;\nconst MIN_PANEL_WIDTH = 280;\nconst PANEL_WIDTH = 320;\nconst PANEL_WIDTH_LARGE = 420;\n\nconst initialMainPanelWidth: { [key: string]: number } = {\n\tregular: MAIN_NODE_PANEL_WIDTH,\n\tdragless: MAIN_NODE_PANEL_WIDTH,\n\tunknown: MAIN_NODE_PANEL_WIDTH,\n\tinputless: MAIN_NODE_PANEL_WIDTH,\n\twide: MAIN_NODE_PANEL_WIDTH * 2,\n};\n\nexport default defineComponent({\n\tname: 'NDVDraggablePanels',\n\tcomponents: {\n\t\tPanelDragButton,\n\t\tNDVFloatingNodes,\n\t},\n\tprops: {\n\t\tisDraggable: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\thideInputAndOutput: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tposition: {\n\t\t\ttype: Number,\n\t\t},\n\t\tnodeType: {\n\t\t\ttype: Object as PropType<INodeTypeDescription | null>,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\tsetup() {\n\t\tconst { callDebounced } = useDebounce();\n\n\t\treturn { callDebounced };\n\t},\n\tdata(): {\n\t\twindowWidth: number;\n\t\tisDragging: boolean;\n\t\tMIN_PANEL_WIDTH: number;\n\t\tinitialized: boolean;\n\t} {\n\t\treturn {\n\t\t\twindowWidth: 1,\n\t\t\tisDragging: false,\n\t\t\tMIN_PANEL_WIDTH,\n\t\t\tinitialized: false,\n\t\t};\n\t},\n\tmounted() {\n\t\tthis.setTotalWidth();\n\n\t\t/*\n\t\t\tOnly set(or restore) initial position if `mainPanelDimensions`\n\t\t\tis at the default state({relativeLeft:1, relativeRight: 1, relativeWidth: 1}) to make sure we use store values if they are set\n\t\t*/\n\t\tif (\n\t\t\tthis.mainPanelDimensions.relativeLeft === 1 &&\n\t\t\tthis.mainPanelDimensions.relativeRight === 1\n\t\t) {\n\t\t\tthis.setMainPanelWidth();\n\t\t\tthis.setPositions(this.getInitialLeftPosition(this.mainPanelDimensions.relativeWidth));\n\t\t\tthis.restorePositionData();\n\t\t}\n\n\t\twindow.addEventListener('resize', this.setTotalWidth);\n\t\tthis.$emit('init', { position: this.mainPanelDimensions.relativeLeft });\n\t\tsetTimeout(() => {\n\t\t\tthis.initialized = true;\n\t\t}, 0);\n\n\t\tndvEventBus.on('setPositionByName', this.setPositionByName);\n\t},\n\tbeforeUnmount() {\n\t\twindow.removeEventListener('resize', this.setTotalWidth);\n\t\tndvEventBus.off('setPositionByName', this.setPositionByName);\n\t},\n\tcomputed: {\n\t\t...mapStores(useNDVStore),\n\t\tmainPanelDimensions(): {\n\t\t\trelativeWidth: number;\n\t\t\trelativeLeft: number;\n\t\t\trelativeRight: number;\n\t\t} {\n\t\t\treturn this.ndvStore.getMainPanelDimensions(this.currentNodePaneType);\n\t\t},\n\t\tactiveNode() {\n\t\t\treturn this.ndvStore.activeNode;\n\t\t},\n\t\tsupportedResizeDirections(): string[] {\n\t\t\tconst supportedDirections = ['right'];\n\n\t\t\tif (this.isDraggable) supportedDirections.push('left');\n\t\t\treturn supportedDirections;\n\t\t},\n\t\tcurrentNodePaneType(): string {\n\t\t\tif (!this.hasInputSlot) return 'inputless';\n\t\t\tif (!this.isDraggable) return 'dragless';\n\t\t\tif (this.nodeType === null) return 'unknown';\n\t\t\treturn get(this, 'nodeType.parameterPane') || 'regular';\n\t\t},\n\t\thasInputSlot(): boolean {\n\t\t\treturn this.$slots.input !== undefined;\n\t\t},\n\t\tinputPanelMargin(): number {\n\t\t\treturn this.pxToRelativeWidth(SIDE_PANELS_MARGIN);\n\t\t},\n\t\tminWindowWidth(): number {\n\t\t\treturn 2 * (SIDE_MARGIN + SIDE_PANELS_MARGIN) + MIN_PANEL_WIDTH;\n\t\t},\n\t\tminimumLeftPosition(): number {\n\t\t\tif (this.windowWidth < this.minWindowWidth) return this.pxToRelativeWidth(1);\n\n\t\t\tif (!this.hasInputSlot) return this.pxToRelativeWidth(SIDE_MARGIN);\n\t\t\treturn this.pxToRelativeWidth(SIDE_MARGIN + 20) + this.inputPanelMargin;\n\t\t},\n\t\tmaximumRightPosition(): number {\n\t\t\tif (this.windowWidth < this.minWindowWidth) return this.pxToRelativeWidth(1);\n\n\t\t\treturn this.pxToRelativeWidth(SIDE_MARGIN + 20) + this.inputPanelMargin;\n\t\t},\n\t\tcanMoveLeft(): boolean {\n\t\t\treturn this.mainPanelDimensions.relativeLeft > this.minimumLeftPosition;\n\t\t},\n\t\tcanMoveRight(): boolean {\n\t\t\treturn this.mainPanelDimensions.relativeRight > this.maximumRightPosition;\n\t\t},\n\t\tmainPanelStyles(): { left: string; right: string } {\n\t\t\treturn {\n\t\t\t\tleft: `${this.relativeWidthToPx(this.mainPanelDimensions.relativeLeft)}px`,\n\t\t\t\tright: `${this.relativeWidthToPx(this.mainPanelDimensions.relativeRight)}px`,\n\t\t\t};\n\t\t},\n\t\tinputPanelStyles(): { right: string } {\n\t\t\treturn {\n\t\t\t\tright: `${this.relativeWidthToPx(this.calculatedPositions.inputPanelRelativeRight)}px`,\n\t\t\t};\n\t\t},\n\t\toutputPanelStyles(): { left: string; transform: string } {\n\t\t\treturn {\n\t\t\t\tleft: `${this.relativeWidthToPx(this.calculatedPositions.outputPanelRelativeLeft)}px`,\n\t\t\t\ttransform: `translateX(-${this.relativeWidthToPx(this.outputPanelRelativeTranslate)}px)`,\n\t\t\t};\n\t\t},\n\t\tcalculatedPositions(): { inputPanelRelativeRight: number; outputPanelRelativeLeft: number } {\n\t\t\tconst hasInput = this.$slots.input !== undefined;\n\t\t\tconst outputPanelRelativeLeft =\n\t\t\t\tthis.mainPanelDimensions.relativeLeft + this.mainPanelDimensions.relativeWidth;\n\n\t\t\tconst inputPanelRelativeRight = hasInput\n\t\t\t\t? 1 - outputPanelRelativeLeft + this.mainPanelDimensions.relativeWidth\n\t\t\t\t: 1 - this.pxToRelativeWidth(SIDE_MARGIN);\n\n\t\t\treturn {\n\t\t\t\tinputPanelRelativeRight,\n\t\t\t\toutputPanelRelativeLeft,\n\t\t\t};\n\t\t},\n\t\toutputPanelRelativeTranslate(): number {\n\t\t\tconst panelMinLeft = 1 - this.pxToRelativeWidth(MIN_PANEL_WIDTH + SIDE_MARGIN);\n\t\t\tconst currentRelativeLeftDelta =\n\t\t\t\tthis.calculatedPositions.outputPanelRelativeLeft - panelMinLeft;\n\t\t\treturn currentRelativeLeftDelta > 0 ? currentRelativeLeftDelta : 0;\n\t\t},\n\t\thasDoubleWidth(): boolean {\n\t\t\treturn get(this, 'nodeType.parameterPane') === 'wide';\n\t\t},\n\t\tfixedPanelWidth(): number {\n\t\t\tconst multiplier = this.hasDoubleWidth ? 2 : 1;\n\n\t\t\tif (this.windowWidth > 1700) {\n\t\t\t\treturn PANEL_WIDTH_LARGE * multiplier;\n\t\t\t}\n\n\t\t\treturn PANEL_WIDTH * multiplier;\n\t\t},\n\t\tisBelowMinWidthMainPanel(): boolean {\n\t\t\tconst minRelativeWidth = this.pxToRelativeWidth(MIN_PANEL_WIDTH);\n\t\t\treturn this.mainPanelDimensions.relativeWidth < minRelativeWidth;\n\t\t},\n\t},\n\twatch: {\n\t\twindowWidth(windowWidth) {\n\t\t\tconst minRelativeWidth = this.pxToRelativeWidth(MIN_PANEL_WIDTH);\n\t\t\t// Prevent the panel resizing below MIN_PANEL_WIDTH whhile maintaing position\n\t\t\tif (this.isBelowMinWidthMainPanel) {\n\t\t\t\tthis.setMainPanelWidth(minRelativeWidth);\n\t\t\t}\n\n\t\t\tconst isBelowMinLeft = this.minimumLeftPosition > this.mainPanelDimensions.relativeLeft;\n\t\t\tconst isMaxRight = this.maximumRightPosition > this.mainPanelDimensions.relativeRight;\n\n\t\t\t// When user is resizing from non-supported view(sub ~488px) we need to refit the panels\n\t\t\tif (windowWidth > this.minWindowWidth && isBelowMinLeft && isMaxRight) {\n\t\t\t\tthis.setMainPanelWidth(minRelativeWidth);\n\t\t\t\tthis.setPositions(this.getInitialLeftPosition(this.mainPanelDimensions.relativeWidth));\n\t\t\t}\n\n\t\t\tthis.setPositions(this.mainPanelDimensions.relativeLeft);\n\t\t},\n\t},\n\tmethods: {\n\t\tonSwitchSelectedNode(node: string) {\n\t\t\tthis.$emit('switchSelectedNode', node);\n\t\t},\n\t\tgetInitialLeftPosition(width: number) {\n\t\t\tif (this.currentNodePaneType === 'dragless')\n\t\t\t\treturn this.pxToRelativeWidth(SIDE_MARGIN + 1 + this.fixedPanelWidth);\n\n\t\t\treturn this.hasInputSlot ? 0.5 - width / 2 : this.minimumLeftPosition;\n\t\t},\n\t\tsetMainPanelWidth(relativeWidth?: number) {\n\t\t\tconst mainPanelRelativeWidth =\n\t\t\t\trelativeWidth || this.pxToRelativeWidth(initialMainPanelWidth[this.currentNodePaneType]);\n\n\t\t\tthis.ndvStore.setMainPanelDimensions({\n\t\t\t\tpanelType: this.currentNodePaneType,\n\t\t\t\tdimensions: {\n\t\t\t\t\trelativeWidth: mainPanelRelativeWidth,\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tsetPositions(relativeLeft: number) {\n\t\t\tconst mainPanelRelativeLeft =\n\t\t\t\trelativeLeft || 1 - this.calculatedPositions.inputPanelRelativeRight;\n\t\t\tconst mainPanelRelativeRight =\n\t\t\t\t1 - mainPanelRelativeLeft - this.mainPanelDimensions.relativeWidth;\n\n\t\t\tconst isMaxRight = this.maximumRightPosition > mainPanelRelativeRight;\n\t\t\tconst isMinLeft = this.minimumLeftPosition > mainPanelRelativeLeft;\n\t\t\tconst isInputless = this.currentNodePaneType === 'inputless';\n\n\t\t\tif (isMinLeft) {\n\t\t\t\tthis.ndvStore.setMainPanelDimensions({\n\t\t\t\t\tpanelType: this.currentNodePaneType,\n\t\t\t\t\tdimensions: {\n\t\t\t\t\t\trelativeLeft: this.minimumLeftPosition,\n\t\t\t\t\t\trelativeRight: 1 - this.mainPanelDimensions.relativeWidth - this.minimumLeftPosition,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isMaxRight) {\n\t\t\t\tthis.ndvStore.setMainPanelDimensions({\n\t\t\t\t\tpanelType: this.currentNodePaneType,\n\t\t\t\t\tdimensions: {\n\t\t\t\t\t\trelativeLeft: 1 - this.mainPanelDimensions.relativeWidth - this.maximumRightPosition,\n\t\t\t\t\t\trelativeRight: this.maximumRightPosition,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.ndvStore.setMainPanelDimensions({\n\t\t\t\tpanelType: this.currentNodePaneType,\n\t\t\t\tdimensions: {\n\t\t\t\t\trelativeLeft: isInputless ? this.minimumLeftPosition : mainPanelRelativeLeft,\n\t\t\t\t\trelativeRight: mainPanelRelativeRight,\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tsetPositionByName(position: 'minLeft' | 'maxRight' | 'initial') {\n\t\t\tconst positionByName: Record<string, number> = {\n\t\t\t\tminLeft: this.minimumLeftPosition,\n\t\t\t\tmaxRight: this.maximumRightPosition,\n\t\t\t\tinitial: this.getInitialLeftPosition(this.mainPanelDimensions.relativeWidth),\n\t\t\t};\n\n\t\t\tthis.setPositions(positionByName[position]);\n\t\t},\n\t\tpxToRelativeWidth(px: number) {\n\t\t\treturn px / this.windowWidth;\n\t\t},\n\t\trelativeWidthToPx(relativeWidth: number) {\n\t\t\treturn relativeWidth * this.windowWidth;\n\t\t},\n\t\tonResizeStart() {\n\t\t\tthis.setTotalWidth();\n\t\t},\n\t\tonResizeEnd() {\n\t\t\tthis.storePositionData();\n\t\t},\n\t\tonResizeDebounced(data: { direction: string; x: number; width: number }) {\n\t\t\tif (this.initialized) {\n\t\t\t\tvoid this.callDebounced(this.onResize, { debounceTime: 10, trailing: true }, data);\n\t\t\t}\n\t\t},\n\t\tonResize({ direction, x, width }: { direction: string; x: number; width: number }) {\n\t\t\tconst relativeDistance = this.pxToRelativeWidth(x);\n\t\t\tconst relativeWidth = this.pxToRelativeWidth(width);\n\n\t\t\tif (direction === 'left' && relativeDistance <= this.minimumLeftPosition) return;\n\t\t\tif (direction === 'right' && 1 - relativeDistance <= this.maximumRightPosition) return;\n\t\t\tif (width <= MIN_PANEL_WIDTH) return;\n\n\t\t\tthis.setMainPanelWidth(relativeWidth);\n\t\t\tthis.setPositions(\n\t\t\t\tdirection === 'left' ? relativeDistance : this.mainPanelDimensions.relativeLeft,\n\t\t\t);\n\t\t},\n\t\trestorePositionData() {\n\t\t\tconst storedPanelWidthData = useStorage(\n\t\t\t\t`${LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH}_${this.currentNodePaneType}`,\n\t\t\t).value;\n\n\t\t\tif (storedPanelWidthData) {\n\t\t\t\tconst parsedWidth = parseFloat(storedPanelWidthData);\n\t\t\t\tthis.setMainPanelWidth(parsedWidth);\n\t\t\t\tconst initialPosition = this.getInitialLeftPosition(parsedWidth);\n\n\t\t\t\tthis.setPositions(initialPosition);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tstorePositionData() {\n\t\t\tuseStorage(`${LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH}_${this.currentNodePaneType}`).value =\n\t\t\t\tthis.mainPanelDimensions.relativeWidth.toString();\n\t\t},\n\t\tonDragStart() {\n\t\t\tthis.isDragging = true;\n\t\t\tthis.$emit('dragstart', { position: this.mainPanelDimensions.relativeLeft });\n\t\t},\n\t\tonDrag(e: { x: number; y: number }) {\n\t\t\tconst relativeLeft = this.pxToRelativeWidth(e.x) - this.mainPanelDimensions.relativeWidth / 2;\n\n\t\t\tthis.setPositions(relativeLeft);\n\t\t},\n\t\tonDragEnd() {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.isDragging = false;\n\t\t\t\tthis.$emit('dragend', {\n\t\t\t\t\twindowWidth: this.windowWidth,\n\t\t\t\t\tposition: this.mainPanelDimensions.relativeLeft,\n\t\t\t\t});\n\t\t\t}, 0);\n\t\t\tthis.storePositionData();\n\t\t},\n\t\tsetTotalWidth() {\n\t\t\tthis.windowWidth = window.innerWidth;\n\t\t},\n\t\tclose() {\n\t\t\tthis.$emit('close');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.dataPanel {\n\tposition: absolute;\n\theight: calc(100% - 2 * var(--spacing-l));\n\tposition: absolute;\n\ttop: var(--spacing-l);\n\tz-index: 0;\n\tmin-width: 280px;\n}\n\n.inputPanel {\n\tcomposes: dataPanel;\n\tleft: var(--spacing-l);\n\n\t> * {\n\t\tborder-radius: var(--border-radius-large) 0 0 var(--border-radius-large);\n\t}\n}\n\n.outputPanel {\n\tcomposes: dataPanel;\n\tright: var(--spacing-l);\n\n\t> * {\n\t\tborder-radius: 0 var(--border-radius-large) var(--border-radius-large) 0;\n\t}\n}\n\n.mainPanel {\n\tposition: absolute;\n\theight: 100%;\n\n\t&:hover {\n\t\t.draggable {\n\t\t\tvisibility: visible;\n\t\t}\n\t}\n}\n\n.mainPanelInner {\n\theight: 100%;\n\tborder: var(--border-base);\n\tborder-radius: var(--border-radius-large);\n\tbox-shadow: 0 4px 16px rgb(50 61 85 / 10%);\n\toverflow: hidden;\n\n\t&.dragging {\n\t\tborder-color: var(--color-primary);\n\t\tbox-shadow: 0px 6px 16px rgba(255, 74, 51, 0.15);\n\t}\n}\n\n.draggable {\n\tvisibility: hidden;\n}\n\n.double-width {\n\tleft: 90%;\n}\n\n.dragButtonContainer {\n\tposition: absolute;\n\ttop: -12px;\n\twidth: 100%;\n\theight: 12px;\n\tdisplay: flex;\n\tjustify-content: center;\n\tpointer-events: none;\n\n\t.draggable {\n\t\tpointer-events: all;\n\t}\n\t&:hover .draggable {\n\t\tvisibility: visible;\n\t}\n}\n\n.visible {\n\tvisibility: visible;\n}\n</style>\n","<template>\n\t<iframe class=\"__html-display\" :srcdoc=\"sanitizedHtml\" />\n</template>\n\n<script lang=\"ts\">\nimport sanitizeHtml, { defaults, type IOptions as SanitizeOptions } from 'sanitize-html';\n\nconst sanitizeOptions: SanitizeOptions = {\n\tallowVulnerableTags: false,\n\tenforceHtmlBoundary: false,\n\tdisallowedTagsMode: 'discard',\n\tallowedTags: [...defaults.allowedTags, 'style', 'img', 'title'],\n\tallowedAttributes: {\n\t\t...defaults.allowedAttributes,\n\t\t'*': ['class', 'style'],\n\t},\n\ttransformTags: {\n\t\thead: '',\n\t},\n};\n\nexport default {\n\tname: 'RunDataHtml',\n\tprops: {\n\t\tinputHtml: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsanitizedHtml() {\n\t\t\treturn sanitizeHtml(this.inputHtml, sanitizeOptions);\n\t\t},\n\t},\n};\n</script>\n\n<style lang=\"scss\">\n.__html-display {\n\twidth: 100%;\n\theight: 100%;\n}\n</style>\n","<template>\n\t<span>\n\t\t<div v-if=\"isLoading\">Loading binary data...</div>\n\t\t<div v-else-if=\"error\">Error loading binary data</div>\n\t\t<span v-else>\n\t\t\t<video v-if=\"binaryData.fileType === 'video'\" controls autoplay>\n\t\t\t\t<source :src=\"embedSource\" :type=\"binaryData.mimeType\" />\n\t\t\t\t{{ $locale.baseText('binaryDataDisplay.yourBrowserDoesNotSupport') }}\n\t\t\t</video>\n\t\t\t<audio v-else-if=\"binaryData.fileType === 'audio'\" controls autoplay>\n\t\t\t\t<source :src=\"embedSource\" :type=\"binaryData.mimeType\" />\n\t\t\t\t{{ $locale.baseText('binaryDataDisplay.yourBrowserDoesNotSupport') }}\n\t\t\t</audio>\n\t\t\t<VueJsonPretty\n\t\t\t\tv-else-if=\"binaryData.fileType === 'json'\"\n\t\t\t\t:data=\"data\"\n\t\t\t\t:deep=\"3\"\n\t\t\t\t:show-length=\"true\"\n\t\t\t/>\n\t\t\t<RunDataHtml v-else-if=\"binaryData.fileType === 'html'\" :input-html=\"data\" />\n\t\t\t<embed v-else :src=\"embedSource\" class=\"binary-data\" :class=\"embedClass\" />\n\t\t</span>\n\t</span>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, computed } from 'vue';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { IBinaryData } from 'n8n-workflow';\nimport { jsonParse } from 'n8n-workflow';\nimport VueJsonPretty from 'vue-json-pretty';\nimport RunDataHtml from '@/components/RunDataHtml.vue';\n\nconst props = defineProps<{\n\tbinaryData: IBinaryData;\n}>();\n\nconst isLoading = ref(true);\nconst embedSource = ref('');\nconst error = ref(false);\nconst data = ref('');\n\nconst workflowsStore = useWorkflowsStore();\n\nconst embedClass = computed(() => {\n\treturn [props.binaryData.fileType ?? 'other'];\n});\n\nonMounted(async () => {\n\tconst { id, data: binaryData, fileName, fileType, mimeType } = props.binaryData;\n\tconst isJSONData = fileType === 'json';\n\tconst isHTMLData = fileType === 'html';\n\n\tif (!id) {\n\t\tif (isJSONData || isHTMLData) {\n\t\t\tdata.value = jsonParse(atob(binaryData));\n\t\t} else {\n\t\t\tembedSource.value = 'data:' + mimeType + ';base64,' + binaryData;\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tconst binaryUrl = workflowsStore.getBinaryUrl(id, 'view', fileName ?? '', mimeType);\n\t\t\tif (isJSONData || isHTMLData) {\n\t\t\t\tconst fetchedData = await fetch(binaryUrl, { credentials: 'include' });\n\t\t\t\tdata.value = await (isJSONData ? fetchedData.json() : fetchedData.text());\n\t\t\t} else {\n\t\t\t\tembedSource.value = binaryUrl;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\terror.value = true;\n\t\t}\n\t}\n\n\tisLoading.value = false;\n});\n</script>\n\n<style lang=\"scss\">\n.binary-data {\n\tbackground-color: var(--color-foreground-xlight);\n\n\t&.image {\n\t\tmax-height: calc(100% - 1em);\n\t\tmax-width: calc(100% - 1em);\n\t}\n\n\t&.other,\n\t&.pdf {\n\t\theight: calc(100% - 1em);\n\t\twidth: calc(100% - 1em);\n\t}\n}\n</style>\n","<template>\n\t<div v-if=\"windowVisible\" :class=\"['binary-data-window', binaryData?.fileType]\">\n\t\t<n8n-button\n\t\t\tsize=\"small\"\n\t\t\tclass=\"binary-data-window-back\"\n\t\t\t:title=\"$locale.baseText('binaryDataDisplay.backToOverviewPage')\"\n\t\t\ticon=\"arrow-left\"\n\t\t\t:label=\"$locale.baseText('binaryDataDisplay.backToList')\"\n\t\t\t@click.stop=\"closeWindow\"\n\t\t/>\n\n\t\t<div class=\"binary-data-window-wrapper\">\n\t\t\t<div v-if=\"!binaryData\">\n\t\t\t\t{{ $locale.baseText('binaryDataDisplay.noDataFoundToDisplay') }}\n\t\t\t</div>\n\t\t\t<BinaryDataDisplayEmbed v-else :binary-data=\"binaryData\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { IBinaryData, IRunData } from 'n8n-workflow';\nimport BinaryDataDisplayEmbed from '@/components/BinaryDataDisplayEmbed.vue';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\n\nconst props = defineProps<{\n\tdisplayData: IBinaryData;\n\twindowVisible: boolean;\n}>();\n\nconst emit = defineEmits<{\n\t(event: 'close'): void;\n}>();\n\nconst nodeHelpers = useNodeHelpers();\nconst workflowsStore = useWorkflowsStore();\n\nconst workflowRunData = computed<IRunData | null>(() => {\n\tconst workflowExecution = workflowsStore.getWorkflowExecution;\n\tif (workflowExecution === null) {\n\t\treturn null;\n\t}\n\tconst executionData = workflowExecution.data;\n\treturn executionData ? executionData.resultData.runData : null;\n});\n\nconst binaryData = computed<IBinaryData | null>(() => {\n\tif (\n\t\ttypeof props.displayData.node !== 'string' ||\n\t\ttypeof props.displayData.key !== 'string' ||\n\t\ttypeof props.displayData.runIndex !== 'number' ||\n\t\ttypeof props.displayData.index !== 'number' ||\n\t\ttypeof props.displayData.outputIndex !== 'number'\n\t) {\n\t\treturn null;\n\t}\n\n\tconst binaryDataLocal = nodeHelpers.getBinaryData(\n\t\tworkflowRunData.value,\n\t\tprops.displayData.node,\n\t\tprops.displayData.runIndex,\n\t\tprops.displayData.outputIndex,\n\t);\n\n\tif (binaryDataLocal.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (\n\t\tprops.displayData.index >= binaryDataLocal.length ||\n\t\tbinaryDataLocal[props.displayData.index][props.displayData.key] === undefined\n\t) {\n\t\treturn null;\n\t}\n\n\tconst binaryDataItem: IBinaryData =\n\t\tbinaryDataLocal[props.displayData.index][props.displayData.key];\n\n\treturn binaryDataItem;\n});\n\nfunction closeWindow() {\n\t// Handle the close externally as the visible parameter is an external prop\n\t// and is so not allowed to be changed here.\n\temit('close');\n\treturn false;\n}\n</script>\n\n<style lang=\"scss\">\n.binary-data-window {\n\tposition: absolute;\n\ttop: 50px;\n\tleft: 0;\n\tz-index: 10;\n\twidth: 100%;\n\theight: calc(100% - 50px);\n\tbackground-color: var(--color-run-data-background);\n\toverflow: hidden;\n\ttext-align: center;\n\n\t&.json {\n\t\toverflow: auto;\n\t}\n\n\t.binary-data-window-wrapper {\n\t\tmargin-top: 0.5em;\n\t\tpadding: 0 1em;\n\t\theight: calc(100% - 50px);\n\n\t\t.el-row,\n\t\t.el-col {\n\t\t\theight: 100%;\n\t\t}\n\t}\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from '@/composables/useI18n';\nimport { computed } from 'vue';\nimport { useClipboard } from '@/composables/useClipboard';\nimport { useToast } from '@/composables/useToast';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useRootStore } from '@/stores/root.store';\nimport type {\n\tIDataObject,\n\tINodeProperties,\n\tINodePropertyCollection,\n\tINodePropertyOptions,\n\tNodeApiError,\n\tNodeError,\n\tNodeOperationError,\n} from 'n8n-workflow';\nimport { sanitizeHtml } from '@/utils/htmlUtils';\nimport { MAX_DISPLAY_DATA_SIZE } from '@/constants';\nimport type { BaseTextKey } from '@/plugins/i18n';\n\ntype Props = {\n\terror: NodeError | NodeApiError | NodeOperationError;\n};\n\nconst props = defineProps<Props>();\nconst clipboard = useClipboard();\nconst toast = useToast();\nconst i18n = useI18n();\n\nconst nodeTypesStore = useNodeTypesStore();\nconst ndvStore = useNDVStore();\nconst rootStore = useRootStore();\n\nconst displayCause = computed(() => {\n\treturn JSON.stringify(props.error.cause ?? '').length < MAX_DISPLAY_DATA_SIZE;\n});\n\nconst parameters = computed<INodeProperties[]>(() => {\n\tconst node = ndvStore.activeNode;\n\tif (!node) {\n\t\treturn [];\n\t}\n\tconst nodeType = nodeTypesStore.getNodeType(node.type, node.typeVersion);\n\n\tif (nodeType === null) {\n\t\treturn [];\n\t}\n\n\treturn nodeType.properties;\n});\n\nconst n8nVersion = computed(() => {\n\tconst baseUrl = rootStore.urlBaseEditor;\n\tlet instanceType = 'Self Hosted';\n\n\tif (baseUrl.includes('n8n.cloud')) {\n\t\tinstanceType = 'Cloud';\n\t}\n\n\treturn rootStore.versionCli + ` (${instanceType})`;\n});\n\nconst hasManyInputItems = computed(() => {\n\treturn ndvStore.ndvInputData.length > 1;\n});\n\nconst nodeDefaultName = computed(() => {\n\tconst node = props.error?.node;\n\tif (!node) {\n\t\treturn 'Node';\n\t}\n\n\tconst nodeType = nodeTypesStore.getNodeType(node.type, node.typeVersion);\n\treturn nodeType?.defaults?.name || node.name;\n});\n\nconst prepareRawMessages = computed(() => {\n\tconst returnData: Array<string | IDataObject> = [];\n\tif (!props.error.messages?.length) {\n\t\treturn [];\n\t}\n\tconst errorMessage = getErrorMessage();\n\n\tArray.from(new Set(props.error.messages)).forEach((message) => {\n\t\tconst isParsable = /^\\d{3} - \\{/.test(message);\n\t\tconst parts = isParsable ? message.split(' - ').map((part) => part.trim()) : [];\n\n\t\t//try to parse the message as JSON\n\t\tfor (const part of parts) {\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(part);\n\t\t\t\tif (typeof parsed === 'object') {\n\t\t\t\t\treturnData.push(parsed);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (error) {}\n\t\t}\n\t\t//if message is the same as error message, do not include it\n\t\tif (message === errorMessage) return;\n\t\treturnData.push(message);\n\t});\n\treturn returnData;\n});\n\nfunction nodeVersionTag(nodeType: NodeError['node']): string {\n\tif (!nodeType || ('hidden' in nodeType && nodeType.hidden)) {\n\t\treturn i18n.baseText('nodeSettings.deprecated');\n\t}\n\n\tconst latestNodeVersion = Math.max(...nodeTypesStore.getNodeVersions(nodeType.type));\n\n\tif (latestNodeVersion === nodeType.typeVersion) {\n\t\treturn i18n.baseText('nodeSettings.latest');\n\t}\n\n\treturn i18n.baseText('nodeSettings.latestVersion', {\n\t\tinterpolate: { version: latestNodeVersion.toString() },\n\t});\n}\n\nfunction prepareDescription(description: string): string {\n\treturn sanitizeHtml(description.replace(/`(.*?)`/g, '<code>$1</code>'));\n}\n\nfunction getErrorDescription(): string {\n\tconst isSubNodeError =\n\t\tprops.error.name === 'NodeOperationError' &&\n\t\t(props.error as NodeOperationError).functionality === 'configuration-node';\n\n\tif (isSubNodeError) {\n\t\treturn prepareDescription(\n\t\t\tprops.error.description +\n\t\t\t\ti18n.baseText('pushConnection.executionError.openNode', {\n\t\t\t\t\tinterpolate: { node: props.error.node.name },\n\t\t\t\t}),\n\t\t);\n\t}\n\n\tif (props.error.context?.descriptionKey) {\n\t\tconst interpolate = {\n\t\t\tnodeCause: props.error.context.nodeCause as string,\n\t\t\trunIndex: (props.error.context.runIndex as string) ?? '0',\n\t\t\titemIndex: (props.error.context.itemIndex as string) ?? '0',\n\t\t};\n\t\treturn prepareDescription(\n\t\t\ti18n.baseText(\n\t\t\t\t`nodeErrorView.description.${props.error.context.descriptionKey as string}` as BaseTextKey,\n\t\t\t\t{ interpolate },\n\t\t\t),\n\t\t);\n\t}\n\n\tif (!props.error.context?.descriptionTemplate) {\n\t\treturn prepareDescription(props.error.description ?? '');\n\t}\n\n\tconst parameterName = parameterDisplayName(props.error.context.parameter as string);\n\treturn prepareDescription(\n\t\t(props.error.context.descriptionTemplate as string).replace(/%%PARAMETER%%/g, parameterName),\n\t);\n}\n\nfunction addItemIndexSuffix(message: string): string {\n\tlet itemIndexSuffix = '';\n\n\tconst ITEM_INDEX_SUFFIX_TEXT = '[item ';\n\n\tif (\n\t\thasManyInputItems.value &&\n\t\t!message.includes(ITEM_INDEX_SUFFIX_TEXT) &&\n\t\tprops.error?.context?.itemIndex !== undefined\n\t) {\n\t\titemIndexSuffix = ` [item ${props.error.context.itemIndex}]`;\n\t}\n\n\treturn message + itemIndexSuffix;\n}\n\nfunction getErrorMessage(): string {\n\tlet message = '';\n\n\tconst isSubNodeError =\n\t\tprops.error.name === 'NodeOperationError' &&\n\t\t(props.error as NodeOperationError).functionality === 'configuration-node';\n\tconst isNonEmptyString = (value?: unknown): value is string =>\n\t\t!!value && typeof value === 'string';\n\n\tif (isSubNodeError) {\n\t\tmessage = i18n.baseText('nodeErrorView.errorSubNode', {\n\t\t\tinterpolate: { node: props.error.node.name },\n\t\t});\n\t} else if (\n\t\tisNonEmptyString(props.error.message) &&\n\t\t(props.error.message === props.error.description || !props.error.context?.messageTemplate)\n\t) {\n\t\tmessage = props.error.message;\n\t} else if (\n\t\tisNonEmptyString(props.error.context?.messageTemplate) &&\n\t\tisNonEmptyString(props.error.context?.parameter)\n\t) {\n\t\tconst parameterName = parameterDisplayName(props.error.context.parameter);\n\t\tmessage = props.error.context.messageTemplate.replace(/%%PARAMETER%%/g, parameterName);\n\t} else if (Array.isArray(props.error.messages) && props.error.messages.length > 0) {\n\t\tmessage = props.error.messages[0];\n\t}\n\n\treturn addItemIndexSuffix(message);\n}\n\nfunction parameterDisplayName(path: string, fullPath = true) {\n\ttry {\n\t\tconst params = getParameterName(parameters.value, path.split('.'));\n\t\tif (!params.length) {\n\t\t\tthrow new Error();\n\t\t}\n\n\t\tif (!fullPath) {\n\t\t\treturn params.pop()!.displayName;\n\t\t}\n\t\treturn params.map((parameter) => parameter.displayName).join(' > ');\n\t} catch (error) {\n\t\treturn `Could not find parameter \"${path}\"`;\n\t}\n}\n\nfunction getParameterName(\n\tparams: Array<INodePropertyOptions | INodeProperties | INodePropertyCollection>,\n\tpathParts: string[],\n): Array<INodeProperties | INodePropertyCollection> {\n\tlet currentParameterName = pathParts.shift();\n\n\tif (currentParameterName === undefined) {\n\t\treturn [];\n\t}\n\n\tconst arrayMatch = currentParameterName.match(/(.*)\\[([\\d])\\]$/);\n\tif (arrayMatch !== null && arrayMatch.length > 0) {\n\t\tcurrentParameterName = arrayMatch[1];\n\t}\n\tconst currentParameter = params.find(\n\t\t(parameter) => parameter.name === currentParameterName,\n\t) as unknown as INodeProperties | INodePropertyCollection;\n\n\tif (currentParameter === undefined) {\n\t\tthrow new Error(`Could not find parameter \"${currentParameterName}\"`);\n\t}\n\n\tif (pathParts.length === 0) {\n\t\treturn [currentParameter];\n\t}\n\n\tif (currentParameter.hasOwnProperty('options')) {\n\t\treturn [\n\t\t\tcurrentParameter,\n\t\t\t...getParameterName((currentParameter as INodeProperties).options!, pathParts),\n\t\t];\n\t}\n\n\tif (currentParameter.hasOwnProperty('values')) {\n\t\treturn [\n\t\t\tcurrentParameter,\n\t\t\t...getParameterName((currentParameter as INodePropertyCollection).values, pathParts),\n\t\t];\n\t}\n\n\t// We can not resolve any deeper so lets stop here and at least return hopefully something useful\n\treturn [currentParameter];\n}\n\nfunction copyErrorDetails() {\n\tconst error = props.error;\n\n\tconst errorInfo: IDataObject = {\n\t\terrorMessage: getErrorMessage(),\n\t};\n\tif (error.description) {\n\t\terrorInfo.errorDescription = error.description;\n\t}\n\n\t//add error details\n\tconst errorDetails: IDataObject = {};\n\n\tif (error?.messages?.length) {\n\t\terrorDetails.rawErrorMessage = error.messages;\n\t}\n\n\tif ('httpCode' in error && error.httpCode) {\n\t\terrorDetails.httpCode = error.httpCode;\n\t}\n\n\tif (error.context && error.context.data) {\n\t\terrorDetails.errorData = error.context.data;\n\t}\n\n\tif (error.extra) {\n\t\terrorDetails.errorExtra = error.extra;\n\t}\n\n\terrorInfo.errorDetails = errorDetails;\n\n\t//add n8n details\n\tconst n8nDetails: IDataObject = {};\n\n\tif (error.node) {\n\t\tn8nDetails.nodeName = error.node.name;\n\t\tn8nDetails.nodeType = error.node.type;\n\t\tn8nDetails.nodeVersion = error.node.typeVersion;\n\n\t\tif (error.node?.parameters?.resource) {\n\t\t\tn8nDetails.resource = error.node.parameters.resource;\n\t\t}\n\t\tif (error?.node?.parameters?.operation) {\n\t\t\tn8nDetails.operation = error.node.parameters.operation;\n\t\t}\n\t}\n\n\tif (error.context) {\n\t\tif (error.context.itemIndex !== undefined) {\n\t\t\tn8nDetails.itemIndex = error.context.itemIndex;\n\t\t}\n\n\t\tif (error.context.runIndex !== undefined) {\n\t\t\tn8nDetails.runIndex = error.context.runIndex;\n\t\t}\n\n\t\tif (error.context.parameter !== undefined) {\n\t\t\tn8nDetails.parameter = error.context.parameter;\n\t\t}\n\n\t\tif (error.context.causeDetailed) {\n\t\t\tn8nDetails.causeDetailed = error.context.causeDetailed;\n\t\t}\n\t}\n\n\tif (error.timestamp) {\n\t\tn8nDetails.time = new Date(error.timestamp).toLocaleString();\n\t}\n\n\tn8nDetails.n8nVersion = n8nVersion.value;\n\n\tn8nDetails.binaryDataMode = rootStore.binaryDataMode;\n\n\tif (error.cause) {\n\t\tn8nDetails.cause = error.cause;\n\t}\n\n\tn8nDetails.stackTrace = error.stack?.split('\\n');\n\n\terrorInfo.n8nDetails = n8nDetails;\n\n\tvoid clipboard.copy(JSON.stringify(errorInfo, null, 2));\n\tcopySuccess();\n}\n\nfunction copySuccess() {\n\ttoast.showMessage({\n\t\ttitle: i18n.baseText('nodeErrorView.showMessage.title'),\n\t\ttype: 'info',\n\t});\n}\n</script>\n\n<template>\n\t<div class=\"node-error-view\">\n\t\t<div class=\"node-error-view__header\">\n\t\t\t<div class=\"node-error-view__header-message\" data-test-id=\"node-error-message\">\n\t\t\t\t<div>\n\t\t\t\t\t{{ getErrorMessage() }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"error.description || error.context?.descriptionKey\"\n\t\t\t\tdata-test-id=\"node-error-description\"\n\t\t\t\tclass=\"node-error-view__header-description\"\n\t\t\t\tv-html=\"getErrorDescription()\"\n\t\t\t></div>\n\t\t</div>\n\n\t\t<div class=\"node-error-view__info\">\n\t\t\t<div class=\"node-error-view__info-header\">\n\t\t\t\t<p class=\"node-error-view__info-title\">\n\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.title') }}\n\t\t\t\t</p>\n\t\t\t\t<n8n-tooltip\n\t\t\t\t\tclass=\"item\"\n\t\t\t\t\t:content=\"i18n.baseText('nodeErrorView.copyToClipboard.tooltip')\"\n\t\t\t\t\tplacement=\"left\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"copy-button\">\n\t\t\t\t\t\t<n8n-icon-button\n\t\t\t\t\t\t\ticon=\"copy\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\tsize=\"mini\"\n\t\t\t\t\t\t\ttext=\"true\"\n\t\t\t\t\t\t\ttransparent-background=\"transparent\"\n\t\t\t\t\t\t\t@click=\"copyErrorDetails\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</div>\n\n\t\t\t<div class=\"node-error-view__info-content\">\n\t\t\t\t<details\n\t\t\t\t\tv-if=\"\n\t\t\t\t\t\t('httpCode' in error && error.httpCode) ||\n\t\t\t\t\t\tprepareRawMessages.length ||\n\t\t\t\t\t\terror?.context?.data ||\n\t\t\t\t\t\terror.extra\n\t\t\t\t\t\"\n\t\t\t\t\tclass=\"node-error-view__details\"\n\t\t\t\t>\n\t\t\t\t\t<summary class=\"node-error-view__details-summary\">\n\t\t\t\t\t\t<font-awesome-icon class=\"node-error-view__details-icon\" icon=\"angle-right\" />\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\ti18n.baseText('nodeErrorView.details.from', {\n\t\t\t\t\t\t\t\tinterpolate: { node: `${nodeDefaultName}` },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}}\n\t\t\t\t\t</summary>\n\t\t\t\t\t<div class=\"node-error-view__details-content\">\n\t\t\t\t\t\t<div v-if=\"'httpCode' in error && error.httpCode\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.errorCode') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ error.httpCode }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"prepareRawMessages.length\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.rawMessages') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<div v-for=\"(msg, index) in prepareRawMessages\" :key=\"index\">\n\t\t\t\t\t\t\t\t\t<pre><code>{{ msg }}</code></pre>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"error?.context?.data\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.errorData') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<pre><code>{{ error.context.data }}</code></pre>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"error.extra\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.errorExtra') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<pre><code>{{ error.extra }}</code></pre>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"error.context && error.context.request\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.request') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<pre><code>{{ error.context.request }}</code></pre>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</details>\n\n\t\t\t\t<details class=\"node-error-view__details\">\n\t\t\t\t\t<summary class=\"node-error-view__details-summary\">\n\t\t\t\t\t\t<font-awesome-icon class=\"node-error-view__details-icon\" icon=\"angle-right\" />\n\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.info') }}\n\t\t\t\t\t</summary>\n\t\t\t\t\t<div class=\"node-error-view__details-content\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"error.context && error.context.itemIndex !== undefined\"\n\t\t\t\t\t\t\tclass=\"node-error-view__details-row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.itemIndex') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ error.context.itemIndex }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"error.context && error.context.runIndex !== undefined\"\n\t\t\t\t\t\t\tclass=\"node-error-view__details-row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.runIndex') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ error.context.runIndex }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"error.context && error.context.parameter !== undefined\"\n\t\t\t\t\t\t\tclass=\"node-error-view__details-row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.inParameter') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ parameterDisplayName(`${error.context.parameter}`) }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div v-if=\"error.node && error.node.type\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.nodeType') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ error.node.type }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div v-if=\"error.node && error.node.typeVersion\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.nodeVersion') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>\n\t\t\t\t\t\t\t\t\t<span>{{ error.node.typeVersion + ' ' }}</span>\n\t\t\t\t\t\t\t\t\t<span>({{ nodeVersionTag(error.node) }})</span>\n\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.n8nVersion') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ n8nVersion }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div v-if=\"error.timestamp\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.time') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ new Date(error.timestamp).toLocaleString() }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div v-if=\"error.cause && displayCause\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.errorCause') }}\n\t\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t\t<pre class=\"node-error-view__details-value\"><code>{{ error.cause }}</code></pre>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"error.context && error.context.causeDetailed\"\n\t\t\t\t\t\t\tclass=\"node-error-view__details-row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.causeDetailed') }}\n\t\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t\t<pre\n\t\t\t\t\t\t\t\tclass=\"node-error-view__details-value\"\n\t\t\t\t\t\t\t><code>{{ error.context.causeDetailed }}</code></pre>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div v-if=\"error.stack\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.stackTrace') }}\n\t\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t\t<pre class=\"node-error-view__details-value\"><code>{{ error.stack }}</code></pre>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</details>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\">\n.node-error-view {\n\t&__header {\n\t\tmax-width: 960px;\n\t\tmargin: 0 auto var(--spacing-s) auto;\n\t\tpadding-bottom: var(--spacing-3xs);\n\t\tbackground-color: var(--color-background-xlight);\n\t\tborder: 1px solid var(--color-foreground-base);\n\t\tborder-radius: var(--border-radius-large);\n\t}\n\n\t&__header-title {\n\t\tpadding: var(--spacing-2xs) var(--spacing-s);\n\t\tborder-bottom: 1px solid var(--color-danger-tint-1);\n\t\tfont-size: var(--font-size-3xs);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tbackground-color: var(--color-danger-tint-2);\n\t\tborder-radius: var(--border-radius-large) var(--border-radius-large) 0 0;\n\t\tcolor: var(--color-danger);\n\t}\n\n\t&__header-message {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t\tgap: var(--spacing-xs);\n\t\tpadding: var(--spacing-xs) var(--spacing-s) var(--spacing-3xs) var(--spacing-s);\n\t\tcolor: var(--color-danger);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tfont-size: var(--font-size-s);\n\t}\n\n\t&__header-description {\n\t\tpadding: 0 var(--spacing-s) var(--spacing-3xs) var(--spacing-s);\n\t\tfont-size: var(--font-size-xs);\n\n\t\tul {\n\t\t\tpadding: var(--spacing-s) 0;\n\t\t\tpadding-left: var(--spacing-l);\n\t\t}\n\n\t\tcode {\n\t\t\tfont-size: var(--font-size-xs);\n\t\t\tcolor: var(--color-text-base);\n\t\t\tbackground: var(--color-background-base);\n\t\t\tpadding: var(--spacing-5xs);\n\t\t\tborder-radius: var(--border-radius-base);\n\t\t}\n\t}\n\n\t&__debugging {\n\t\tfont-size: var(--font-size-s);\n\n\t\tul,\n\t\tol,\n\t\tdl {\n\t\t\tpadding-left: var(--spacing-s);\n\t\t\tmargin-top: var(--spacing-2xs);\n\t\t\tmargin-bottom: var(--spacing-2xs);\n\t\t}\n\n\t\tpre {\n\t\t\tpadding: var(--spacing-s);\n\t\t\twidth: 100%;\n\t\t\toverflow: auto;\n\t\t\tbackground: var(--color-background-light);\n\t\t\tcode {\n\t\t\t\tfont-size: var(--font-size-s);\n\t\t\t}\n\t\t}\n\t}\n\n\t&__feedback-toolbar {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin-top: var(--spacing-s);\n\t\tpadding-top: var(--spacing-3xs);\n\t\tborder-top: 1px solid var(--color-foreground-base);\n\t}\n\n\t&__feedback-button {\n\t\twidth: var(--spacing-2xl);\n\t\theight: var(--spacing-2xl);\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tcursor: pointer;\n\t\t&:hover {\n\t\t\tcolor: var(--color-primary);\n\t\t}\n\t}\n\n\t&__info {\n\t\tmax-width: 960px;\n\t\tmargin: 0 auto;\n\t\tborder: 1px solid var(--color-foreground-base);\n\t\tborder-radius: var(--border-radius-large);\n\t}\n\n\t&__info-header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tpadding: var(--spacing-3xs) var(--spacing-3xs) var(--spacing-3xs) var(--spacing-s);\n\t\tborder-bottom: 1px solid var(--color-foreground-base);\n\t}\n\n\t&__info-title {\n\t\tfont-size: var(--font-size-2xs);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tcolor: var(--color-text-dark);\n\t}\n\n\t&__info-content {\n\t\tpadding: var(--spacing-2xs) var(--spacing-s);\n\t}\n\n\t&__details:not(:last-child) {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n\n\t&__details[open] {\n\t\t.node-error-view__details {\n\t\t\t&-icon {\n\t\t\t\ttransform: rotate(90deg);\n\t\t\t\ttransition: transform 0.3s ease;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__details-summary {\n\t\tpadding: var(--spacing-5xs) 0;\n\t\tfont-size: var(--font-size-2xs);\n\t\tcolor: var(--color-text-dark);\n\t\tcursor: pointer;\n\t\tlist-style-type: none;\n\t\toutline: none;\n\t}\n\n\t&__details-content {\n\t\tpadding: var(--spacing-2xs) var(--spacing-s);\n\t}\n\n\t&__details-row {\n\t\tdisplay: flex;\n\t\tpadding: var(--spacing-4xs) 0;\n\t}\n\n\t&__details-row:not(:first-child) {\n\t\tborder-top: 1px solid var(--color-foreground-base);\n\t}\n\n\t&__details-icon {\n\t\tmargin-right: var(--spacing-xs);\n\t}\n\n\t&__details-label {\n\t\tflex-grow: 0;\n\t\tflex-shrink: 0;\n\t\twidth: 120px;\n\t\tcolor: var(--color-text);\n\t\tfont-size: var(--font-size-2xs);\n\t}\n\n\t&__details-value {\n\t\tflex: 1;\n\t\toverflow: hidden;\n\t\tmargin-right: auto;\n\t\tcolor: var(--color-text);\n\t\tfont-size: var(--font-size-2xs);\n\t\tword-wrap: break-word;\n\n\t\tcode {\n\t\t\tcolor: var(--color-json-string);\n\t\t\twhite-space: normal;\n\t\t\tword-wrap: break-word;\n\t\t}\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useI18n } from '@/composables/useI18n';\nimport type { usePinnedData } from '@/composables/usePinnedData';\n\nconst locale = useI18n();\n\ntype Props = {\n\ttooltipContentsVisibility: {\n\t\tbinaryDataTooltipContent: boolean;\n\t\tpinDataDiscoveryTooltipContent: boolean;\n\t};\n\tdataPinningDocsUrl: string;\n\tpinnedData: ReturnType<typeof usePinnedData>;\n\tdisabled: boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n\t(event: 'togglePinData'): void;\n}>();\n\nconst visible = computed(() =>\n\tprops.tooltipContentsVisibility.pinDataDiscoveryTooltipContent ? true : undefined,\n);\n</script>\n\n<template>\n\t<n8n-tooltip placement=\"bottom-end\" :visible=\"visible\">\n\t\t<template #content>\n\t\t\t<div v-if=\"props.tooltipContentsVisibility.binaryDataTooltipContent\">\n\t\t\t\t{{ locale.baseText('ndv.pinData.pin.binary') }}\n\t\t\t</div>\n\t\t\t<div v-else-if=\"props.tooltipContentsVisibility.pinDataDiscoveryTooltipContent\">\n\t\t\t\t{{ locale.baseText('node.discovery.pinData.ndv') }}\n\t\t\t</div>\n\t\t\t<div v-else>\n\t\t\t\t<strong>{{ locale.baseText('ndv.pinData.pin.title') }}</strong>\n\t\t\t\t<n8n-text size=\"small\" tag=\"p\">\n\t\t\t\t\t{{ locale.baseText('ndv.pinData.pin.description') }}\n\n\t\t\t\t\t<n8n-link :to=\"props.dataPinningDocsUrl\" size=\"small\">\n\t\t\t\t\t\t{{ locale.baseText('ndv.pinData.pin.link') }}\n\t\t\t\t\t</n8n-link>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</template>\n\t\t<n8n-icon-button\n\t\t\t:class=\"$style.pinDataButton\"\n\t\t\ttype=\"tertiary\"\n\t\t\t:active=\"props.pinnedData.hasData.value\"\n\t\t\ticon=\"thumbtack\"\n\t\t\t:disabled=\"props.disabled\"\n\t\t\tdata-test-id=\"ndv-pin-data\"\n\t\t\t@click=\"emit('togglePinData')\"\n\t\t/>\n\t</n8n-tooltip>\n</template>\n\n<style lang=\"scss\" module>\n.pinDataButton {\n\tmargin-left: var(--spacing-2xs);\n\tsvg {\n\t\ttransition: transform 0.3s ease;\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"['run-data', $style.container]\" @mouseover=\"activatePane\">\n\t\t<n8n-callout\n\t\t\tv-if=\"\n\t\t\t\tcanPinData && pinnedData.hasData.value && !editMode.enabled && !isProductionExecutionPreview\n\t\t\t\"\n\t\t\ttheme=\"secondary\"\n\t\t\ticon=\"thumbtack\"\n\t\t\t:class=\"$style.pinnedDataCallout\"\n\t\t>\n\t\t\t{{ $locale.baseText('runData.pindata.thisDataIsPinned') }}\n\t\t\t<span v-if=\"!isReadOnlyRoute && !readOnlyEnv\" class=\"ml-4xs\">\n\t\t\t\t<n8n-link\n\t\t\t\t\ttheme=\"secondary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tunderline\n\t\t\t\t\tbold\n\t\t\t\t\t@click.stop=\"onTogglePinData({ source: 'banner-link' })\"\n\t\t\t\t>\n\t\t\t\t\t{{ $locale.baseText('runData.pindata.unpin') }}\n\t\t\t\t</n8n-link>\n\t\t\t</span>\n\t\t\t<template #trailingContent>\n\t\t\t\t<n8n-link\n\t\t\t\t\t:to=\"dataPinningDocsUrl\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\ttheme=\"secondary\"\n\t\t\t\t\tbold\n\t\t\t\t\tunderline\n\t\t\t\t\t@click=\"onClickDataPinningDocsLink\"\n\t\t\t\t>\n\t\t\t\t\t{{ $locale.baseText('runData.pindata.learnMore') }}\n\t\t\t\t</n8n-link>\n\t\t\t</template>\n\t\t</n8n-callout>\n\n\t\t<BinaryDataDisplay\n\t\t\tv-if=\"binaryDataDisplayData\"\n\t\t\t:window-visible=\"binaryDataDisplayVisible\"\n\t\t\t:display-data=\"binaryDataDisplayData\"\n\t\t\t@close=\"closeBinaryDataDisplay\"\n\t\t/>\n\n\t\t<div :class=\"$style.header\">\n\t\t\t<slot name=\"header\"></slot>\n\n\t\t\t<div\n\t\t\t\tv-show=\"!hasRunError\"\n\t\t\t\t:class=\"$style.displayModes\"\n\t\t\t\tdata-test-id=\"run-data-pane-header\"\n\t\t\t\t@click.stop\n\t\t\t>\n\t\t\t\t<n8n-radio-buttons\n\t\t\t\t\tv-show=\"\n\t\t\t\t\t\thasNodeRun && (inputData.length || binaryData.length || search) && !editMode.enabled\n\t\t\t\t\t\"\n\t\t\t\t\t:model-value=\"displayMode\"\n\t\t\t\t\t:options=\"buttons\"\n\t\t\t\t\tdata-test-id=\"ndv-run-data-display-mode\"\n\t\t\t\t\t@update:model-value=\"onDisplayModeChange\"\n\t\t\t\t/>\n\n\t\t\t\t<n8n-icon-button\n\t\t\t\t\tv-if=\"canPinData && !isReadOnlyRoute && !readOnlyEnv\"\n\t\t\t\t\tv-show=\"!editMode.enabled\"\n\t\t\t\t\t:title=\"$locale.baseText('runData.editOutput')\"\n\t\t\t\t\t:circle=\"false\"\n\t\t\t\t\t:disabled=\"node?.disabled\"\n\t\t\t\t\tclass=\"ml-2xs\"\n\t\t\t\t\ticon=\"pencil-alt\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tdata-test-id=\"ndv-edit-pinned-data\"\n\t\t\t\t\t@click=\"enterEditMode({ origin: 'editIconButton' })\"\n\t\t\t\t/>\n\n\t\t\t\t<RunDataPinButton\n\t\t\t\t\tv-if=\"(canPinData || !!binaryData?.length) && rawInputData.length && !editMode.enabled\"\n\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t(!rawInputData.length && !pinnedData.hasData.value) ||\n\t\t\t\t\t\tisReadOnlyRoute ||\n\t\t\t\t\t\treadOnlyEnv ||\n\t\t\t\t\t\t!!binaryData?.length\n\t\t\t\t\t\"\n\t\t\t\t\t:tooltip-contents-visibility=\"{\n\t\t\t\t\t\tbinaryDataTooltipContent: !!binaryData?.length,\n\t\t\t\t\t\tpinDataDiscoveryTooltipContent:\n\t\t\t\t\t\t\tisControlledPinDataTooltip && pinDataDiscoveryTooltipVisible,\n\t\t\t\t\t}\"\n\t\t\t\t\t:data-pinning-docs-url=\"dataPinningDocsUrl\"\n\t\t\t\t\t:pinned-data=\"pinnedData\"\n\t\t\t\t\t@toggle-pin-data=\"onTogglePinData({ source: 'pin-icon-click' })\"\n\t\t\t\t/>\n\n\t\t\t\t<div v-show=\"editMode.enabled\" :class=\"$style.editModeActions\">\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t:label=\"$locale.baseText('runData.editor.cancel')\"\n\t\t\t\t\t\t@click=\"onClickCancelEdit\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\tclass=\"ml-2xs\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t:label=\"$locale.baseText('runData.editor.save')\"\n\t\t\t\t\t\t@click=\"onClickSaveEdit\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div v-if=\"extraControlsLocation === 'header'\" :class=\"$style.inputSelect\">\n\t\t\t<slot name=\"input-select\"></slot>\n\t\t</div>\n\n\t\t<div v-if=\"maxRunIndex > 0\" v-show=\"!editMode.enabled\" :class=\"$style.runSelector\">\n\t\t\t<slot v-if=\"extraControlsLocation === 'runs'\" name=\"input-select\"></slot>\n\n\t\t\t<n8n-select\n\t\t\t\t:model-value=\"runIndex\"\n\t\t\t\t:class=\"$style.runSelectorInner\"\n\t\t\t\tsize=\"small\"\n\t\t\t\tteleported\n\t\t\t\tdata-test-id=\"run-selector\"\n\t\t\t\t@update:model-value=\"onRunIndexChange\"\n\t\t\t\t@click.stop\n\t\t\t>\n\t\t\t\t<template #prepend>{{ $locale.baseText('ndv.output.run') }}</template>\n\t\t\t\t<n8n-option\n\t\t\t\t\tv-for=\"option in maxRunIndex + 1\"\n\t\t\t\t\t:key=\"option\"\n\t\t\t\t\t:label=\"getRunLabel(option)\"\n\t\t\t\t\t:value=\"option - 1\"\n\t\t\t\t></n8n-option>\n\t\t\t</n8n-select>\n\n\t\t\t<n8n-tooltip v-if=\"canLinkRuns\" placement=\"right\">\n\t\t\t\t<template #content>\n\t\t\t\t\t{{ $locale.baseText(linkedRuns ? 'runData.unlinking.hint' : 'runData.linking.hint') }}\n\t\t\t\t</template>\n\t\t\t\t<n8n-icon-button\n\t\t\t\t\t:icon=\"linkedRuns ? 'unlink' : 'link'\"\n\t\t\t\t\tclass=\"linkRun\"\n\t\t\t\t\ttext\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tdata-test-id=\"link-run\"\n\t\t\t\t\t@click=\"toggleLinkRuns\"\n\t\t\t\t/>\n\t\t\t</n8n-tooltip>\n\n\t\t\t<slot name=\"run-info\"></slot>\n\n\t\t\t<RunDataSearch\n\t\t\t\tv-if=\"showIOSearch && extraControlsLocation === 'runs'\"\n\t\t\t\tv-model=\"search\"\n\t\t\t\t:class=\"$style.search\"\n\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t:is-area-active=\"isPaneActive\"\n\t\t\t\t@focus=\"activatePane\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<slot name=\"before-data\" />\n\n\t\t<n8n-callout\n\t\t\tv-for=\"hint in getNodeHints()\"\n\t\t\t:key=\"hint.message\"\n\t\t\t:class=\"$style.hintCallout\"\n\t\t\t:theme=\"hint.type || 'info'\"\n\t\t>\n\t\t\t<n8n-text size=\"small\" v-html=\"hint.message\"></n8n-text>\n\t\t</n8n-callout>\n\n\t\t<div\n\t\t\tv-if=\"maxOutputIndex > 0 && branches.length > 1\"\n\t\t\t:class=\"$style.outputs\"\n\t\t\tdata-test-id=\"branches\"\n\t\t>\n\t\t\t<slot v-if=\"extraControlsLocation === 'outputs'\" name=\"input-select\"></slot>\n\n\t\t\t<div :class=\"$style.tabs\">\n\t\t\t\t<n8n-tabs\n\t\t\t\t\t:model-value=\"currentOutputIndex\"\n\t\t\t\t\t:options=\"branches\"\n\t\t\t\t\t@update:model-value=\"onBranchChange\"\n\t\t\t\t/>\n\n\t\t\t\t<RunDataSearch\n\t\t\t\t\tv-if=\"showIOSearch && extraControlsLocation === 'outputs'\"\n\t\t\t\t\tv-model=\"search\"\n\t\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t\t:is-area-active=\"isPaneActive\"\n\t\t\t\t\t@focus=\"activatePane\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-else-if=\"\n\t\t\t\t!hasRunError &&\n\t\t\t\thasNodeRun &&\n\t\t\t\t((dataCount > 0 && maxRunIndex === 0) || search) &&\n\t\t\t\t!isArtificialRecoveredEventItem\n\t\t\t\"\n\t\t\tv-show=\"!editMode.enabled && !hasRunError\"\n\t\t\t:class=\"[$style.itemsCount, { [$style.muted]: paneType === 'input' && maxRunIndex === 0 }]\"\n\t\t\tdata-test-id=\"ndv-items-count\"\n\t\t>\n\t\t\t<slot v-if=\"extraControlsLocation === 'items'\" name=\"input-select\"></slot>\n\n\t\t\t<n8n-text v-if=\"search\" :class=\"$style.itemsText\">\n\t\t\t\t{{\n\t\t\t\t\t$locale.baseText('ndv.search.items', {\n\t\t\t\t\t\tadjustToNumber: unfilteredDataCount,\n\t\t\t\t\t\tinterpolate: { matched: dataCount, total: unfilteredDataCount },\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t</n8n-text>\n\t\t\t<n8n-text v-else :class=\"$style.itemsText\">\n\t\t\t\t{{\n\t\t\t\t\t$locale.baseText('ndv.output.items', {\n\t\t\t\t\t\tadjustToNumber: dataCount,\n\t\t\t\t\t\tinterpolate: { count: dataCount },\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t</n8n-text>\n\n\t\t\t<RunDataSearch\n\t\t\t\tv-if=\"showIOSearch && extraControlsLocation === 'items'\"\n\t\t\t\tv-model=\"search\"\n\t\t\t\t:class=\"$style.search\"\n\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t:is-area-active=\"isPaneActive\"\n\t\t\t\t@focus=\"activatePane\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div ref=\"dataContainer\" :class=\"$style.dataContainer\" data-test-id=\"ndv-data-container\">\n\t\t\t<div v-if=\"isExecuting\" :class=\"$style.center\" data-test-id=\"ndv-executing\">\n\t\t\t\t<div :class=\"$style.spinner\"><n8n-spinner type=\"ring\" /></div>\n\t\t\t\t<n8n-text>{{ executingMessage }}</n8n-text>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"editMode.enabled\" :class=\"$style.editMode\">\n\t\t\t\t<div :class=\"[$style.editModeBody, 'ignore-key-press']\">\n\t\t\t\t\t<JsonEditor\n\t\t\t\t\t\t:model-value=\"editMode.value\"\n\t\t\t\t\t\t:fill-parent=\"true\"\n\t\t\t\t\t\t@update:model-value=\"ndvStore.setOutputPanelEditModeValue($event)\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div :class=\"$style.editModeFooter\">\n\t\t\t\t\t<n8n-info-tip :bold=\"false\" :class=\"$style.editModeFooterInfotip\">\n\t\t\t\t\t\t{{ $locale.baseText('runData.editor.copyDataInfo') }}\n\t\t\t\t\t\t<n8n-link :to=\"dataEditingDocsUrl\" size=\"small\">\n\t\t\t\t\t\t\t{{ $locale.baseText('generic.learnMore') }}\n\t\t\t\t\t\t</n8n-link>\n\t\t\t\t\t</n8n-info-tip>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-else-if=\"paneType === 'output' && hasSubworkflowExecutionError\"\n\t\t\t\t:class=\"$style.stretchVertically\"\n\t\t\t>\n\t\t\t\t<NodeErrorView :error=\"subworkflowExecutionError\" :class=\"$style.errorDisplay\" />\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"!hasNodeRun\" :class=\"$style.center\">\n\t\t\t\t<slot name=\"node-not-run\"></slot>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"paneType === 'input' && node?.disabled\" :class=\"$style.center\">\n\t\t\t\t<n8n-text>\n\t\t\t\t\t{{ $locale.baseText('ndv.input.disabled', { interpolate: { nodeName: node.name } }) }}\n\t\t\t\t\t<n8n-link @click=\"enableNode\">\n\t\t\t\t\t\t{{ $locale.baseText('ndv.input.disabled.cta') }}\n\t\t\t\t\t</n8n-link>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"hasNodeRun && isArtificialRecoveredEventItem\" :class=\"$style.center\">\n\t\t\t\t<slot name=\"recovered-artificial-output-data\"></slot>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"hasNodeRun && hasRunError\" :class=\"$style.stretchVertically\">\n\t\t\t\t<n8n-text v-if=\"isPaneTypeInput\" :class=\"$style.center\" size=\"large\" tag=\"p\" bold>\n\t\t\t\t\t{{\n\t\t\t\t\t\t$locale.baseText('nodeErrorView.inputPanel.previousNodeError.title', {\n\t\t\t\t\t\t\tinterpolate: { nodeName: node?.name ?? '' },\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t</n8n-text>\n\t\t\t\t<slot v-else-if=\"$slots['content']\" name=\"content\"></slot>\n\t\t\t\t<NodeErrorView\n\t\t\t\t\tv-else-if=\"workflowRunErrorAsNodeError\"\n\t\t\t\t\t:error=\"workflowRunErrorAsNodeError\"\n\t\t\t\t\t:class=\"$style.dataDisplay\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-else-if=\"\n\t\t\t\t\thasNodeRun && (!unfilteredDataCount || (search && !dataCount)) && branches.length > 1\n\t\t\t\t\"\n\t\t\t\t:class=\"$style.center\"\n\t\t\t>\n\t\t\t\t<div v-if=\"search\">\n\t\t\t\t\t<n8n-text tag=\"h3\" size=\"large\">{{\n\t\t\t\t\t\t$locale.baseText('ndv.search.noMatch.title')\n\t\t\t\t\t}}</n8n-text>\n\t\t\t\t\t<n8n-text>\n\t\t\t\t\t\t<i18n-t keypath=\"ndv.search.noMatch.description\" tag=\"span\">\n\t\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t\t<a href=\"#\" @click=\"onSearchClear\">\n\t\t\t\t\t\t\t\t\t{{ $locale.baseText('ndv.search.noMatch.description.link') }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</i18n-t>\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t\t<n8n-text v-else>\n\t\t\t\t\t{{ noDataInBranchMessage }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"hasNodeRun && !inputData.length && !search\" :class=\"$style.center\">\n\t\t\t\t<slot name=\"no-output-data\">xxx</slot>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"hasNodeRun && !showData\" :class=\"$style.center\">\n\t\t\t\t<n8n-text :bold=\"true\" color=\"text-dark\" size=\"large\">{{ tooMuchDataTitle }}</n8n-text>\n\t\t\t\t<n8n-text align=\"center\" tag=\"div\"\n\t\t\t\t\t><span\n\t\t\t\t\t\tv-html=\"\n\t\t\t\t\t\t\t$locale.baseText('ndv.output.tooMuchData.message', {\n\t\t\t\t\t\t\t\tinterpolate: { size: dataSizeInMB },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\"\n\t\t\t\t\t></span\n\t\t\t\t></n8n-text>\n\n\t\t\t\t<n8n-button\n\t\t\t\t\toutline\n\t\t\t\t\t:label=\"$locale.baseText('ndv.output.tooMuchData.showDataAnyway')\"\n\t\t\t\t\t@click=\"showTooMuchData\"\n\t\t\t\t/>\n\n\t\t\t\t<n8n-button\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t:label=\"$locale.baseText('runData.downloadBinaryData')\"\n\t\t\t\t\t@click=\"downloadJsonData()\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<!-- V-else slot named content which only renders if $slots.content is passed and hasNodeRun -->\n\t\t\t<slot v-else-if=\"hasNodeRun && $slots['content']\" name=\"content\"></slot>\n\n\t\t\t<div\n\t\t\t\tv-else-if=\"\n\t\t\t\t\thasNodeRun &&\n\t\t\t\t\tdisplayMode === 'table' &&\n\t\t\t\t\tbinaryData.length > 0 &&\n\t\t\t\t\tinputData.length === 1 &&\n\t\t\t\t\tObject.keys(jsonData[0] || {}).length === 0\n\t\t\t\t\"\n\t\t\t\t:class=\"$style.center\"\n\t\t\t>\n\t\t\t\t<n8n-text>\n\t\t\t\t\t{{ $locale.baseText('runData.switchToBinary.info') }}\n\t\t\t\t\t<a @click=\"switchToBinary\">\n\t\t\t\t\t\t{{ $locale.baseText('runData.switchToBinary.binary') }}\n\t\t\t\t\t</a>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"showIoSearchNoMatchContent\" :class=\"$style.center\">\n\t\t\t\t<n8n-text tag=\"h3\" size=\"large\">{{\n\t\t\t\t\t$locale.baseText('ndv.search.noMatch.title')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-text>\n\t\t\t\t\t<i18n-t keypath=\"ndv.search.noMatch.description\" tag=\"span\">\n\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t<a href=\"#\" @click=\"onSearchClear\">\n\t\t\t\t\t\t\t\t{{ $locale.baseText('ndv.search.noMatch.description.link') }}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</i18n-t>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\n\t\t\t<Suspense v-else-if=\"hasNodeRun && displayMode === 'table' && node\">\n\t\t\t\t<RunDataTable\n\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t:input-data=\"inputDataPage\"\n\t\t\t\t\t:mapping-enabled=\"mappingEnabled\"\n\t\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t\t:run-index=\"runIndex\"\n\t\t\t\t\t:page-offset=\"currentPageOffset\"\n\t\t\t\t\t:total-runs=\"maxRunIndex\"\n\t\t\t\t\t:has-default-hover-state=\"paneType === 'input' && !search\"\n\t\t\t\t\t:search=\"search\"\n\t\t\t\t\t@mounted=\"$emit('tableMounted', $event)\"\n\t\t\t\t\t@active-row-changed=\"onItemHover\"\n\t\t\t\t\t@display-mode-change=\"onDisplayModeChange\"\n\t\t\t\t/>\n\t\t\t</Suspense>\n\n\t\t\t<Suspense v-else-if=\"hasNodeRun && displayMode === 'json' && node\">\n\t\t\t\t<RunDataJson\n\t\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t\t:edit-mode=\"editMode\"\n\t\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t:input-data=\"inputDataPage\"\n\t\t\t\t\t:mapping-enabled=\"mappingEnabled\"\n\t\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t\t:run-index=\"runIndex\"\n\t\t\t\t\t:total-runs=\"maxRunIndex\"\n\t\t\t\t\t:search=\"search\"\n\t\t\t\t/>\n\t\t\t</Suspense>\n\n\t\t\t<Suspense v-else-if=\"hasNodeRun && isPaneTypeOutput && displayMode === 'html'\">\n\t\t\t\t<RunDataHtml :input-html=\"inputHtml\" />\n\t\t\t</Suspense>\n\n\t\t\t<Suspense v-else-if=\"hasNodeRun && isSchemaView\">\n\t\t\t\t<RunDataSchema\n\t\t\t\t\t:data=\"jsonData\"\n\t\t\t\t\t:mapping-enabled=\"mappingEnabled\"\n\t\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t\t:run-index=\"runIndex\"\n\t\t\t\t\t:total-runs=\"maxRunIndex\"\n\t\t\t\t\t:search=\"search\"\n\t\t\t\t/>\n\t\t\t</Suspense>\n\n\t\t\t<div v-else-if=\"displayMode === 'binary' && binaryData.length === 0\" :class=\"$style.center\">\n\t\t\t\t<n8n-text align=\"center\" tag=\"div\">{{\n\t\t\t\t\t$locale.baseText('runData.noBinaryDataFound')\n\t\t\t\t}}</n8n-text>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"displayMode === 'binary'\" :class=\"$style.dataDisplay\">\n\t\t\t\t<div v-for=\"(binaryDataEntry, index) in binaryData\" :key=\"index\">\n\t\t\t\t\t<div v-if=\"binaryData.length > 1\" :class=\"$style.binaryIndex\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{{ index + 1 }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div :class=\"$style.binaryRow\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"(binaryData, key) in binaryDataEntry\"\n\t\t\t\t\t\t\t:key=\"index + '_' + key\"\n\t\t\t\t\t\t\t:class=\"$style.binaryCell\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div :data-test-id=\"'ndv-binary-data_' + index\">\n\t\t\t\t\t\t\t\t<div :class=\"$style.binaryHeader\">\n\t\t\t\t\t\t\t\t\t{{ key }}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div v-if=\"binaryData.fileName\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t>{{ $locale.baseText('runData.fileName') }}:\n\t\t\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div :class=\"$style.binaryValue\">{{ binaryData.fileName }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div v-if=\"binaryData.directory\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t>{{ $locale.baseText('runData.directory') }}:\n\t\t\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div :class=\"$style.binaryValue\">{{ binaryData.directory }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div v-if=\"binaryData.fileExtension\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t>{{ $locale.baseText('runData.fileExtension') }}:</n8n-text\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div :class=\"$style.binaryValue\">{{ binaryData.fileExtension }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div v-if=\"binaryData.mimeType\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t>{{ $locale.baseText('runData.mimeType') }}:\n\t\t\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div :class=\"$style.binaryValue\">{{ binaryData.mimeType }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div v-if=\"binaryData.fileSize\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t>{{ $locale.baseText('runData.fileSize') }}:\n\t\t\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div :class=\"$style.binaryValue\">{{ binaryData.fileSize }}</div>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<div :class=\"$style.binaryButtonContainer\">\n\t\t\t\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t\t\t\tv-if=\"isViewable(index, key)\"\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t:label=\"$locale.baseText('runData.showBinaryData')\"\n\t\t\t\t\t\t\t\t\t\tdata-test-id=\"ndv-view-binary-data\"\n\t\t\t\t\t\t\t\t\t\t@click=\"displayBinaryData(index, key)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t\t\t\tv-if=\"isDownloadable(index, key)\"\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t:label=\"$locale.baseText('runData.downloadBinaryData')\"\n\t\t\t\t\t\t\t\t\t\tdata-test-id=\"ndv-download-binary-data\"\n\t\t\t\t\t\t\t\t\t\t@click=\"downloadBinaryData(index, key)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div\n\t\t\tv-if=\"\n\t\t\t\thasNodeRun &&\n\t\t\t\t!hasRunError &&\n\t\t\t\tbinaryData.length === 0 &&\n\t\t\t\tdataCount > pageSize &&\n\t\t\t\t!isSchemaView &&\n\t\t\t\t!isArtificialRecoveredEventItem\n\t\t\t\"\n\t\t\tv-show=\"!editMode.enabled\"\n\t\t\t:class=\"$style.pagination\"\n\t\t\tdata-test-id=\"ndv-data-pagination\"\n\t\t>\n\t\t\t<el-pagination\n\t\t\t\tbackground\n\t\t\t\t:hide-on-single-page=\"true\"\n\t\t\t\t:current-page=\"currentPage\"\n\t\t\t\t:pager-count=\"5\"\n\t\t\t\t:page-size=\"pageSize\"\n\t\t\t\tlayout=\"prev, pager, next\"\n\t\t\t\t:total=\"dataCount\"\n\t\t\t\t@update:current-page=\"onCurrentPageChange\"\n\t\t\t>\n\t\t\t</el-pagination>\n\n\t\t\t<div :class=\"$style.pageSizeSelector\">\n\t\t\t\t<n8n-select\n\t\t\t\t\tsize=\"mini\"\n\t\t\t\t\t:model-value=\"pageSize\"\n\t\t\t\t\tteleported\n\t\t\t\t\t@update:model-value=\"onPageSizeChange\"\n\t\t\t\t>\n\t\t\t\t\t<template #prepend>{{ $locale.baseText('ndv.output.pageSize') }}</template>\n\t\t\t\t\t<n8n-option v-for=\"size in pageSizes\" :key=\"size\" :label=\"size\" :value=\"size\">\n\t\t\t\t\t</n8n-option>\n\t\t\t\t\t<n8n-option :label=\"$locale.baseText('ndv.output.all')\" :value=\"dataCount\"> </n8n-option>\n\t\t\t\t</n8n-select>\n\t\t\t</div>\n\t\t</div>\n\t\t<n8n-block-ui :show=\"blockUI\" :class=\"$style.uiBlocker\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineAsyncComponent, defineComponent, toRef } from 'vue';\nimport type { PropType } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useStorage } from '@/composables/useStorage';\nimport { saveAs } from 'file-saver';\nimport type {\n\tConnectionTypes,\n\tIBinaryData,\n\tIBinaryKeyData,\n\tIDataObject,\n\tINodeExecutionData,\n\tINodeOutputConfiguration,\n\tINodeTypeDescription,\n\tIRunData,\n\tIRunExecutionData,\n\tNodeHint,\n\tNodeError,\n\tWorkflow,\n} from 'n8n-workflow';\nimport { NodeHelpers, NodeConnectionType } from 'n8n-workflow';\n\nimport type {\n\tIExecutionResponse,\n\tINodeUi,\n\tINodeUpdatePropertiesInformation,\n\tIRunDataDisplayMode,\n\tITab,\n\tNodePanelType,\n} from '@/Interface';\n\nimport {\n\tDATA_PINNING_DOCS_URL,\n\tDATA_EDITING_DOCS_URL,\n\tNODE_TYPES_EXCLUDED_FROM_OUTPUT_NAME_APPEND,\n\tLOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG,\n\tLOCAL_STORAGE_PIN_DATA_DISCOVERY_CANVAS_FLAG,\n\tMAX_DISPLAY_DATA_SIZE,\n\tMAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW,\n\tMAX_DISPLAY_ITEMS_AUTO_ALL,\n\tTEST_PIN_DATA,\n\tHTML_NODE_TYPE,\n} from '@/constants';\n\nimport BinaryDataDisplay from '@/components/BinaryDataDisplay.vue';\nimport NodeErrorView from '@/components/Error/NodeErrorView.vue';\nimport JsonEditor from '@/components/JsonEditor/JsonEditor.vue';\n\nimport type { PinDataSource, UnpinDataSource } from '@/composables/usePinnedData';\nimport { usePinnedData } from '@/composables/usePinnedData';\nimport { dataPinningEventBus } from '@/event-bus';\nimport { clearJsonKey, isEmpty } from '@/utils/typesUtils';\nimport { executionDataToJson } from '@/utils/nodeTypesUtils';\nimport { searchInObject } from '@/utils/objectUtils';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport { useToast } from '@/composables/useToast';\nimport { isEqual, isObject } from 'lodash-es';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { useRootStore } from '@/stores/root.store';\nimport RunDataPinButton from '@/components/RunDataPinButton.vue';\n\nconst RunDataTable = defineAsyncComponent(\n\tasync () => await import('@/components/RunDataTable.vue'),\n);\nconst RunDataJson = defineAsyncComponent(async () => await import('@/components/RunDataJson.vue'));\nconst RunDataSchema = defineAsyncComponent(\n\tasync () => await import('@/components/RunDataSchema.vue'),\n);\nconst RunDataHtml = defineAsyncComponent(async () => await import('@/components/RunDataHtml.vue'));\nconst RunDataSearch = defineAsyncComponent(\n\tasync () => await import('@/components/RunDataSearch.vue'),\n);\n\nexport type EnterEditModeArgs = {\n\torigin: 'editIconButton' | 'insertTestDataLink';\n};\n\nexport default defineComponent({\n\tname: 'RunData',\n\tcomponents: {\n\t\tBinaryDataDisplay,\n\t\tNodeErrorView,\n\t\tJsonEditor,\n\t\tRunDataTable,\n\t\tRunDataJson,\n\t\tRunDataSchema,\n\t\tRunDataHtml,\n\t\tRunDataSearch,\n\t\tRunDataPinButton,\n\t},\n\tprops: {\n\t\tnode: {\n\t\t\ttype: Object as PropType<INodeUi | null>,\n\t\t\tdefault: null,\n\t\t},\n\t\tworkflow: {\n\t\t\ttype: Object as PropType<Workflow>,\n\t\t\trequired: true,\n\t\t},\n\t\trunIndex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tlinkedRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tcanLinkRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\ttooMuchDataTitle: {\n\t\t\ttype: String,\n\t\t},\n\t\tnoDataInBranchMessage: {\n\t\t\ttype: String,\n\t\t},\n\t\tisExecuting: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\texecutingMessage: {\n\t\t\ttype: String,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\tpaneType: {\n\t\t\ttype: String as PropType<NodePanelType>,\n\t\t\trequired: true,\n\t\t},\n\t\toverrideOutputs: {\n\t\t\ttype: Array as PropType<number[]>,\n\t\t},\n\t\tmappingEnabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tdistanceFromActive: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tblockUI: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisProductionExecutionPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisPaneActive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tsetup(props) {\n\t\tconst ndvStore = useNDVStore();\n\t\tconst nodeHelpers = useNodeHelpers();\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst node = toRef(props, 'node');\n\t\tconst pinnedData = usePinnedData(node, {\n\t\t\trunIndex: props.runIndex,\n\t\t\tdisplayMode: ndvStore.getPanelDisplayMode(props.paneType),\n\t\t});\n\n\t\treturn {\n\t\t\t...useToast(),\n\t\t\texternalHooks,\n\t\t\tnodeHelpers,\n\t\t\tpinnedData,\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tconnectionType: NodeConnectionType.Main as ConnectionTypes,\n\t\t\tbinaryDataPreviewActive: false,\n\t\t\tdataSize: 0,\n\t\t\tshowData: false,\n\t\t\tuserEnabledShowData: false,\n\t\t\toutputIndex: 0,\n\t\t\tbinaryDataDisplayVisible: false,\n\t\t\tbinaryDataDisplayData: null as IBinaryData | null,\n\n\t\t\tMAX_DISPLAY_DATA_SIZE,\n\t\t\tMAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW,\n\t\t\tMAX_DISPLAY_ITEMS_AUTO_ALL,\n\t\t\tcurrentPage: 1,\n\t\t\tpageSize: 10,\n\t\t\tpageSizes: [10, 25, 50, 100],\n\n\t\t\tpinDataDiscoveryTooltipVisible: false,\n\t\t\tisControlledPinDataTooltip: false,\n\t\t\tsearch: '',\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseNodeTypesStore,\n\t\t\tuseNDVStore,\n\t\t\tuseWorkflowsStore,\n\t\t\tuseSourceControlStore,\n\t\t\tuseRootStore,\n\t\t),\n\t\tisReadOnlyRoute() {\n\t\t\treturn this.$route?.meta?.readOnlyCanvas === true;\n\t\t},\n\t\tactiveNode(): INodeUi | null {\n\t\t\treturn this.ndvStore.activeNode;\n\t\t},\n\t\tdataPinningDocsUrl(): string {\n\t\t\treturn DATA_PINNING_DOCS_URL;\n\t\t},\n\t\tdataEditingDocsUrl(): string {\n\t\t\treturn DATA_EDITING_DOCS_URL;\n\t\t},\n\t\tdisplayMode(): IRunDataDisplayMode {\n\t\t\treturn this.ndvStore.getPanelDisplayMode(this.paneType);\n\t\t},\n\t\tnodeType(): INodeTypeDescription | null {\n\t\t\tif (this.node) {\n\t\t\t\treturn this.nodeTypesStore.getNodeType(this.node.type, this.node.typeVersion);\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tisSchemaView(): boolean {\n\t\t\treturn this.displayMode === 'schema';\n\t\t},\n\t\tisTriggerNode(): boolean {\n\t\t\tif (this.node === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn this.nodeTypesStore.isTriggerNode(this.node.type);\n\t\t},\n\t\tcanPinData(): boolean {\n\t\t\tif (this.node === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst canPinNode = usePinnedData(this.node).canPinNode(false);\n\n\t\t\treturn (\n\t\t\t\tcanPinNode &&\n\t\t\t\t!this.isPaneTypeInput &&\n\t\t\t\tthis.pinnedData.isValidNodeType.value &&\n\t\t\t\t!(this.binaryData && this.binaryData.length > 0)\n\t\t\t);\n\t\t},\n\t\tbuttons(): Array<{ label: string; value: string }> {\n\t\t\tconst defaults = [\n\t\t\t\t{ label: this.$locale.baseText('runData.table'), value: 'table' },\n\t\t\t\t{ label: this.$locale.baseText('runData.json'), value: 'json' },\n\t\t\t];\n\n\t\t\tif (this.binaryData.length) {\n\t\t\t\tdefaults.push({ label: this.$locale.baseText('runData.binary'), value: 'binary' });\n\t\t\t}\n\n\t\t\tconst schemaView = { label: this.$locale.baseText('runData.schema'), value: 'schema' };\n\t\t\tif (this.isPaneTypeInput) {\n\t\t\t\tdefaults.unshift(schemaView);\n\t\t\t} else {\n\t\t\t\tdefaults.push(schemaView);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tthis.isPaneTypeOutput &&\n\t\t\t\tthis.activeNode?.type === HTML_NODE_TYPE &&\n\t\t\t\tthis.activeNode.parameters.operation === 'generateHtmlTemplate'\n\t\t\t) {\n\t\t\t\tdefaults.unshift({ label: 'HTML', value: 'html' });\n\t\t\t}\n\n\t\t\treturn defaults;\n\t\t},\n\t\thasNodeRun(): boolean {\n\t\t\treturn Boolean(\n\t\t\t\t!this.isExecuting &&\n\t\t\t\t\tthis.node &&\n\t\t\t\t\t((this.workflowRunData && this.workflowRunData.hasOwnProperty(this.node.name)) ||\n\t\t\t\t\t\tthis.pinnedData.hasData.value),\n\t\t\t);\n\t\t},\n\t\tisArtificialRecoveredEventItem(): boolean {\n\t\t\treturn !!this.rawInputData?.[0]?.json?.isArtificialRecoveredEventItem;\n\t\t},\n\t\tsubworkflowExecutionError(): NodeError {\n\t\t\treturn {\n\t\t\t\tnode: this.node,\n\t\t\t\tmessages: [this.workflowsStore.subWorkflowExecutionError?.message ?? ''],\n\t\t\t} as NodeError;\n\t\t},\n\t\thasSubworkflowExecutionError(): boolean {\n\t\t\treturn Boolean(this.workflowsStore.subWorkflowExecutionError);\n\t\t},\n\t\tworkflowRunErrorAsNodeError(): NodeError | null {\n\t\t\tif (!this.node) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn this.workflowRunData?.[this.node?.name]?.[this.runIndex]?.error as NodeError;\n\t\t},\n\t\thasRunError(): boolean {\n\t\t\treturn Boolean(this.node && this.workflowRunErrorAsNodeError);\n\t\t},\n\t\texecutionHints(): NodeHint[] {\n\t\t\tif (this.hasNodeRun) {\n\t\t\t\tconst hints = this.node && this.workflowRunData?.[this.node.name]?.[this.runIndex]?.hints;\n\n\t\t\t\tif (hints) return hints;\n\t\t\t}\n\n\t\t\treturn [];\n\t\t},\n\t\tworkflowExecution(): IExecutionResponse | null {\n\t\t\treturn this.workflowsStore.getWorkflowExecution;\n\t\t},\n\t\tworkflowRunData(): IRunData | null {\n\t\t\tif (this.workflowExecution === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst executionData: IRunExecutionData | undefined = this.workflowExecution.data;\n\t\t\tif (executionData?.resultData) {\n\t\t\t\treturn executionData.resultData.runData;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tdataCount(): number {\n\t\t\treturn this.getDataCount(this.runIndex, this.currentOutputIndex);\n\t\t},\n\t\tunfilteredDataCount(): number {\n\t\t\treturn this.pinnedData.data.value\n\t\t\t\t? this.pinnedData.data.value.length\n\t\t\t\t: this.rawInputData.length;\n\t\t},\n\t\tdataSizeInMB(): string {\n\t\t\treturn (this.dataSize / (1024 * 1024)).toFixed(1);\n\t\t},\n\t\tmaxOutputIndex(): number {\n\t\t\tif (this.node === null || this.runIndex === undefined) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tconst runData: IRunData | null = this.workflowRunData;\n\n\t\t\tif (runData === null || !runData.hasOwnProperty(this.node.name)) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (runData[this.node.name].length < this.runIndex) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (runData[this.node.name][this.runIndex]) {\n\t\t\t\tconst taskData = runData[this.node.name][this.runIndex].data;\n\t\t\t\tif (taskData?.main) {\n\t\t\t\t\treturn taskData.main.length - 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t},\n\t\tcurrentPageOffset(): number {\n\t\t\treturn this.pageSize * (this.currentPage - 1);\n\t\t},\n\t\tmaxRunIndex(): number {\n\t\t\tif (this.node === null) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tconst runData: IRunData | null = this.workflowRunData;\n\n\t\t\tif (runData === null || !runData.hasOwnProperty(this.node.name)) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (runData[this.node.name].length) {\n\t\t\t\treturn runData[this.node.name].length - 1;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t},\n\t\trawInputData(): INodeExecutionData[] {\n\t\t\treturn this.getRawInputData(this.runIndex, this.currentOutputIndex, this.connectionType);\n\t\t},\n\t\tunfilteredInputData(): INodeExecutionData[] {\n\t\t\treturn this.getPinDataOrLiveData(this.rawInputData);\n\t\t},\n\t\tinputData(): INodeExecutionData[] {\n\t\t\treturn this.getFilteredData(this.unfilteredInputData);\n\t\t},\n\t\tinputDataPage(): INodeExecutionData[] {\n\t\t\tconst offset = this.pageSize * (this.currentPage - 1);\n\t\t\treturn this.inputData.slice(offset, offset + this.pageSize);\n\t\t},\n\t\tjsonData(): IDataObject[] {\n\t\t\treturn executionDataToJson(this.inputData);\n\t\t},\n\t\tbinaryData(): IBinaryKeyData[] {\n\t\t\tif (!this.node) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst binaryData = this.nodeHelpers.getBinaryData(\n\t\t\t\tthis.workflowRunData,\n\t\t\t\tthis.node.name,\n\t\t\t\tthis.runIndex,\n\t\t\t\tthis.currentOutputIndex,\n\t\t\t);\n\t\t\treturn binaryData.filter((data) => Boolean(data && Object.keys(data).length));\n\t\t},\n\t\tinputHtml(): string {\n\t\t\treturn String(this.inputData[0]?.json?.html ?? '');\n\t\t},\n\t\tcurrentOutputIndex(): number {\n\t\t\tif (this.overrideOutputs?.length && !this.overrideOutputs.includes(this.outputIndex)) {\n\t\t\t\treturn this.overrideOutputs[0];\n\t\t\t}\n\n\t\t\treturn this.outputIndex;\n\t\t},\n\t\tbranches(): ITab[] {\n\t\t\tconst capitalize = (name: string) => name.charAt(0).toLocaleUpperCase() + name.slice(1);\n\n\t\t\tconst branches: ITab[] = [];\n\n\t\t\tfor (let i = 0; i <= this.maxOutputIndex; i++) {\n\t\t\t\tif (this.overrideOutputs && !this.overrideOutputs.includes(i)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst totalItemsCount = this.getRawInputData(this.runIndex, i).length;\n\t\t\t\tconst itemsCount = this.getDataCount(this.runIndex, i);\n\t\t\t\tconst items = this.search\n\t\t\t\t\t? this.$locale.baseText('ndv.search.items', {\n\t\t\t\t\t\t\tadjustToNumber: totalItemsCount,\n\t\t\t\t\t\t\tinterpolate: { matched: itemsCount, total: totalItemsCount },\n\t\t\t\t\t\t})\n\t\t\t\t\t: this.$locale.baseText('ndv.output.items', {\n\t\t\t\t\t\t\tadjustToNumber: itemsCount,\n\t\t\t\t\t\t\tinterpolate: { count: itemsCount },\n\t\t\t\t\t\t});\n\t\t\t\tlet outputName = this.getOutputName(i);\n\n\t\t\t\tif (`${outputName}` === `${i}`) {\n\t\t\t\t\toutputName = `${this.$locale.baseText('ndv.output')} ${outputName}`;\n\t\t\t\t} else {\n\t\t\t\t\tconst appendBranchWord = NODE_TYPES_EXCLUDED_FROM_OUTPUT_NAME_APPEND.includes(\n\t\t\t\t\t\tthis.node?.type ?? '',\n\t\t\t\t\t)\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: ` ${this.$locale.baseText('ndv.output.branch')}`;\n\t\t\t\t\toutputName = capitalize(`${this.getOutputName(i)}${appendBranchWord}`);\n\t\t\t\t}\n\t\t\t\tbranches.push({\n\t\t\t\t\tlabel:\n\t\t\t\t\t\t(this.search && itemsCount) || totalItemsCount\n\t\t\t\t\t\t\t? `${outputName} (${items})`\n\t\t\t\t\t\t\t: outputName,\n\t\t\t\t\tvalue: i,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn branches;\n\t\t},\n\t\teditMode(): { enabled: boolean; value: string } {\n\t\t\treturn this.isPaneTypeInput\n\t\t\t\t? { enabled: false, value: '' }\n\t\t\t\t: this.ndvStore.outputPanelEditMode;\n\t\t},\n\t\tisPaneTypeInput(): boolean {\n\t\t\treturn this.paneType === 'input';\n\t\t},\n\t\tisPaneTypeOutput(): boolean {\n\t\t\treturn this.paneType === 'output';\n\t\t},\n\t\treadOnlyEnv(): boolean {\n\t\t\treturn this.sourceControlStore.preferences.branchReadOnly;\n\t\t},\n\t\tshowIOSearch(): boolean {\n\t\t\treturn this.hasNodeRun && !this.hasRunError && this.unfilteredInputData.length > 0;\n\t\t},\n\t\textraControlsLocation() {\n\t\t\tif (!this.hasNodeRun) return 'header';\n\t\t\tif (this.maxRunIndex > 0) return 'runs';\n\t\t\tif (this.maxOutputIndex > 0 && this.branches.length > 1) {\n\t\t\t\treturn 'outputs';\n\t\t\t}\n\n\t\t\treturn 'items';\n\t\t},\n\t\tshowIoSearchNoMatchContent(): boolean {\n\t\t\treturn this.hasNodeRun && !this.inputData.length && !!this.search;\n\t\t},\n\t\tparentNodeOutputData(): INodeExecutionData[] {\n\t\t\tconst parentNode = this.workflow.getParentNodesByDepth(this.node?.name ?? '')[0];\n\t\t\tlet parentNodeData: INodeExecutionData[] = [];\n\n\t\t\tif (parentNode?.name) {\n\t\t\t\tparentNodeData = this.nodeHelpers.getNodeInputData(\n\t\t\t\t\tthis.workflow.getNode(parentNode?.name),\n\t\t\t\t\tthis.runIndex,\n\t\t\t\t\tthis.outputIndex,\n\t\t\t\t\t'input',\n\t\t\t\t\tthis.connectionType,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn parentNodeData;\n\t\t},\n\t},\n\twatch: {\n\t\tnode(newNode: INodeUi, prevNode: INodeUi) {\n\t\t\tif (newNode.id === prevNode.id) return;\n\t\t\tthis.init();\n\t\t},\n\t\thasNodeRun() {\n\t\t\tif (this.paneType === 'output') this.setDisplayMode();\n\t\t},\n\t\tinputDataPage: {\n\t\t\thandler(data: INodeExecutionData[]) {\n\t\t\t\tif (this.paneType && data) {\n\t\t\t\t\tthis.ndvStore.setNDVPanelDataIsEmpty({\n\t\t\t\t\t\tpanel: this.paneType as 'input' | 'output',\n\t\t\t\t\t\tisEmpty: data.every((item) => isEmpty(item.json)),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\timmediate: true,\n\t\t\tdeep: true,\n\t\t},\n\t\tjsonData(data: IDataObject[], prevData: IDataObject[]) {\n\t\t\tif (isEqual(data, prevData)) return;\n\t\t\tthis.refreshDataSize();\n\t\t\tif (this.dataCount) {\n\t\t\t\tthis.resetCurrentPageIfTooFar();\n\t\t\t}\n\t\t\tthis.showPinDataDiscoveryTooltip(data);\n\t\t},\n\t\tbinaryData(newData: IBinaryKeyData[], prevData: IBinaryKeyData[]) {\n\t\t\tif (newData.length && !prevData.length && this.displayMode !== 'binary') {\n\t\t\t\tthis.switchToBinary();\n\t\t\t} else if (!newData.length && this.displayMode === 'binary') {\n\t\t\t\tthis.onDisplayModeChange('table');\n\t\t\t}\n\t\t},\n\t\tcurrentOutputIndex(branchIndex: number) {\n\t\t\tthis.ndvStore.setNDVBranchIndex({\n\t\t\t\tpane: this.paneType as 'input' | 'output',\n\t\t\t\tbranchIndex,\n\t\t\t});\n\t\t},\n\t\tsearch(newSearch: string) {\n\t\t\tthis.$emit('search', newSearch);\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.init();\n\n\t\tif (!this.isPaneTypeInput) {\n\t\t\tthis.showPinDataDiscoveryTooltip(this.jsonData);\n\t\t}\n\t\tthis.ndvStore.setNDVBranchIndex({\n\t\t\tpane: this.paneType as 'input' | 'output',\n\t\t\tbranchIndex: this.currentOutputIndex,\n\t\t});\n\n\t\tif (this.paneType === 'output') {\n\t\t\tthis.setDisplayMode();\n\t\t\tthis.activatePane();\n\t\t}\n\n\t\tif (this.hasRunError && this.node) {\n\t\t\tconst error = this.workflowRunData?.[this.node.name]?.[this.runIndex]?.error;\n\t\t\tconst errorsToTrack = ['unknown error'];\n\n\t\t\tif (error && errorsToTrack.some((e) => error.message.toLowerCase().includes(e))) {\n\t\t\t\tthis.$telemetry.track(\n\t\t\t\t\t`User encountered an error: \"${error.message}\"`,\n\t\t\t\t\t{\n\t\t\t\t\t\tnode: this.node.type,\n\t\t\t\t\t\terrorMessage: error.message,\n\t\t\t\t\t\tnodeVersion: this.node.typeVersion,\n\t\t\t\t\t\tn8nVersion: this.rootStore.versionCli,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\twithPostHog: true,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tthis.hidePinDataDiscoveryTooltip();\n\t},\n\tmethods: {\n\t\tgetResolvedNodeOutputs() {\n\t\t\tif (this.node && this.nodeType) {\n\t\t\t\tconst workflowNode = this.workflow.getNode(this.node.name);\n\n\t\t\t\tif (workflowNode) {\n\t\t\t\t\tconst outputs = NodeHelpers.getNodeOutputs(this.workflow, workflowNode, this.nodeType);\n\t\t\t\t\treturn outputs;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t\tshouldHintBeDisplayed(hint: NodeHint): boolean {\n\t\t\tconst { location, whenToDisplay } = hint;\n\n\t\t\tif (location) {\n\t\t\t\tif (location === 'ndv' && !['input', 'output'].includes(this.paneType)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (location === 'inputPane' && this.paneType !== 'input') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (location === 'outputPane' && this.paneType !== 'output') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (whenToDisplay === 'afterExecution' && !this.hasNodeRun) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (whenToDisplay === 'beforeExecution' && this.hasNodeRun) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tgetNodeHints(): NodeHint[] {\n\t\t\tif (this.node && this.nodeType) {\n\t\t\t\tconst workflowNode = this.workflow.getNode(this.node.name);\n\n\t\t\t\tif (workflowNode) {\n\t\t\t\t\tconst executionHints = this.executionHints;\n\t\t\t\t\tconst nodeHints = NodeHelpers.getNodeHints(this.workflow, workflowNode, this.nodeType, {\n\t\t\t\t\t\trunExecutionData: this.workflowExecution?.data ?? null,\n\t\t\t\t\t\trunIndex: this.runIndex,\n\t\t\t\t\t\tconnectionInputData: this.parentNodeOutputData,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn executionHints.concat(nodeHints).filter(this.shouldHintBeDisplayed);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t\tonItemHover(itemIndex: number | null) {\n\t\t\tif (itemIndex === null) {\n\t\t\t\tthis.$emit('itemHover', null);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$emit('itemHover', {\n\t\t\t\toutputIndex: this.currentOutputIndex,\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t},\n\t\tonClickDataPinningDocsLink() {\n\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tpane: 'output',\n\t\t\t\ttype: 'data-pinning-docs',\n\t\t\t});\n\t\t},\n\t\tshowPinDataDiscoveryTooltip(value: IDataObject[]) {\n\t\t\tif (!this.isTriggerNode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst pinDataDiscoveryFlag = useStorage(LOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG).value;\n\n\t\t\tif (value && value.length > 0 && !this.isReadOnlyRoute && !pinDataDiscoveryFlag) {\n\t\t\t\tthis.pinDataDiscoveryComplete();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.isControlledPinDataTooltip = true;\n\t\t\t\t\tthis.pinDataDiscoveryTooltipVisible = true;\n\t\t\t\t\tdataPinningEventBus.emit('data-pinning-discovery', { isTooltipVisible: true });\n\t\t\t\t}, 500); // Wait for NDV to open\n\t\t\t}\n\t\t},\n\t\thidePinDataDiscoveryTooltip() {\n\t\t\tif (this.pinDataDiscoveryTooltipVisible) {\n\t\t\t\tthis.isControlledPinDataTooltip = false;\n\t\t\t\tthis.pinDataDiscoveryTooltipVisible = false;\n\t\t\t\tdataPinningEventBus.emit('data-pinning-discovery', { isTooltipVisible: false });\n\t\t\t}\n\t\t},\n\t\tpinDataDiscoveryComplete() {\n\t\t\tuseStorage(LOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG).value = 'true';\n\t\t\tuseStorage(LOCAL_STORAGE_PIN_DATA_DISCOVERY_CANVAS_FLAG).value = 'true';\n\t\t},\n\t\tenterEditMode({ origin }: EnterEditModeArgs) {\n\t\t\tconst inputData = this.pinnedData.data.value\n\t\t\t\t? clearJsonKey(this.pinnedData.data.value)\n\t\t\t\t: executionDataToJson(this.rawInputData);\n\n\t\t\tconst inputDataLength = Array.isArray(inputData)\n\t\t\t\t? inputData.length\n\t\t\t\t: Object.keys(inputData ?? {}).length;\n\n\t\t\tconst data = inputDataLength > 0 ? inputData : TEST_PIN_DATA;\n\n\t\t\tthis.ndvStore.setOutputPanelEditModeEnabled(true);\n\t\t\tthis.ndvStore.setOutputPanelEditModeValue(JSON.stringify(data, null, 2));\n\n\t\t\tthis.$telemetry.track('User opened ndv edit state', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tclick_type: origin === 'editIconButton' ? 'button' : 'link',\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\trun_index: this.runIndex,\n\t\t\t\tis_output_present: this.hasNodeRun || this.pinnedData.hasData.value,\n\t\t\t\tview: !this.hasNodeRun && !this.pinnedData.hasData.value ? 'undefined' : this.displayMode,\n\t\t\t\tis_data_pinned: this.pinnedData.hasData.value,\n\t\t\t});\n\t\t},\n\t\tonClickCancelEdit() {\n\t\t\tthis.ndvStore.setOutputPanelEditModeEnabled(false);\n\t\t\tthis.ndvStore.setOutputPanelEditModeValue('');\n\t\t\tthis.onExitEditMode({ type: 'cancel' });\n\t\t},\n\t\tonClickSaveEdit() {\n\t\t\tif (!this.node) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { value } = this.editMode;\n\n\t\t\tthis.clearAllStickyNotifications();\n\n\t\t\ttry {\n\t\t\t\tconst clearedValue = clearJsonKey(value) as INodeExecutionData[];\n\t\t\t\ttry {\n\t\t\t\t\tthis.pinnedData.setData(clearedValue, 'save-edit');\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// setData function already shows toasts on error, so just return here\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error, this.$locale.baseText('ndv.pinData.error.syntaxError.title'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.ndvStore.setOutputPanelEditModeEnabled(false);\n\n\t\t\tthis.onExitEditMode({ type: 'save' });\n\t\t},\n\t\tonExitEditMode({ type }: { type: 'save' | 'cancel' }) {\n\t\t\tthis.$telemetry.track('User closed ndv edit state', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\trun_index: this.runIndex,\n\t\t\t\tview: this.displayMode,\n\t\t\t\ttype,\n\t\t\t});\n\t\t},\n\t\tasync onTogglePinData({ source }: { source: PinDataSource | UnpinDataSource }) {\n\t\t\tif (!this.node) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (source === 'pin-icon-click') {\n\t\t\t\tconst telemetryPayload = {\n\t\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\trun_index: this.runIndex,\n\t\t\t\t\tview: !this.hasNodeRun && !this.pinnedData.hasData.value ? 'none' : this.displayMode,\n\t\t\t\t};\n\n\t\t\t\tvoid this.externalHooks.run('runData.onTogglePinData', telemetryPayload);\n\t\t\t\tthis.$telemetry.track('User clicked pin data icon', telemetryPayload);\n\t\t\t}\n\n\t\t\tthis.nodeHelpers.updateNodeParameterIssues(this.node);\n\n\t\t\tif (this.pinnedData.hasData.value) {\n\t\t\t\tthis.pinnedData.unsetData(source);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.pinnedData.setData(this.rawInputData, 'pin-icon-click');\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.maxRunIndex > 0) {\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttitle: this.$locale.baseText('ndv.pinData.pin.multipleRuns.title', {\n\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\tindex: `${this.runIndex}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tmessage: this.$locale.baseText('ndv.pinData.pin.multipleRuns.description'),\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\tduration: 2000,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.hidePinDataDiscoveryTooltip();\n\t\t\tthis.pinDataDiscoveryComplete();\n\t\t},\n\t\tswitchToBinary() {\n\t\t\tthis.onDisplayModeChange('binary');\n\t\t},\n\t\tonBranchChange(value: number) {\n\t\t\tthis.outputIndex = value;\n\n\t\t\tthis.$telemetry.track('User changed ndv branch', {\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tbranch_index: value,\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tnode_type_input_selection: this.nodeType ? this.nodeType.name : '',\n\t\t\t\tpane: this.paneType,\n\t\t\t});\n\t\t},\n\t\tshowTooMuchData() {\n\t\t\tthis.showData = true;\n\t\t\tthis.userEnabledShowData = true;\n\t\t\tthis.$telemetry.track('User clicked ndv button', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tpane: this.paneType,\n\t\t\t\ttype: 'showTooMuchData',\n\t\t\t});\n\t\t},\n\t\ttoggleLinkRuns() {\n\t\t\tthis.linkedRuns ? this.unlinkRun() : this.linkRun();\n\t\t},\n\t\tlinkRun() {\n\t\t\tthis.$emit('linkRun');\n\t\t},\n\t\tunlinkRun() {\n\t\t\tthis.$emit('unlinkRun');\n\t\t},\n\t\tonCurrentPageChange(value: number) {\n\t\t\tthis.currentPage = value;\n\t\t\tthis.$telemetry.track('User changed ndv page', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tpane: this.paneType,\n\t\t\t\tpage_selected: this.currentPage,\n\t\t\t\tpage_size: this.pageSize,\n\t\t\t\titems_total: this.dataCount,\n\t\t\t});\n\t\t},\n\t\tresetCurrentPageIfTooFar() {\n\t\t\tconst maxPage = Math.ceil(this.dataCount / this.pageSize);\n\t\t\tif (maxPage < this.currentPage) {\n\t\t\t\tthis.currentPage = maxPage;\n\t\t\t}\n\t\t},\n\t\tonPageSizeChange(pageSize: number) {\n\t\t\tthis.pageSize = pageSize;\n\n\t\t\tthis.resetCurrentPageIfTooFar();\n\n\t\t\tthis.$telemetry.track('User changed ndv page size', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tpane: this.paneType,\n\t\t\t\tpage_selected: this.currentPage,\n\t\t\t\tpage_size: this.pageSize,\n\t\t\t\titems_total: this.dataCount,\n\t\t\t});\n\t\t},\n\t\tonDisplayModeChange(displayMode: IRunDataDisplayMode) {\n\t\t\tconst previous = this.displayMode;\n\t\t\tthis.ndvStore.setPanelDisplayMode({ pane: this.paneType, mode: displayMode });\n\n\t\t\tif (!this.userEnabledShowData) this.updateShowData();\n\n\t\t\tconst dataContainerRef = this.$refs.dataContainer as Element | undefined;\n\t\t\tif (dataContainerRef) {\n\t\t\t\tconst dataDisplay = dataContainerRef.children[0];\n\n\t\t\t\tif (dataDisplay) {\n\t\t\t\t\tdataDisplay.scrollTo(0, 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.closeBinaryDataDisplay();\n\t\t\tvoid this.externalHooks.run('runData.displayModeChanged', {\n\t\t\t\tnewValue: displayMode,\n\t\t\t\toldValue: previous,\n\t\t\t});\n\t\t\tif (this.activeNode) {\n\t\t\t\tthis.$telemetry.track('User changed ndv item view', {\n\t\t\t\t\tprevious_view: previous,\n\t\t\t\t\tnew_view: displayMode,\n\t\t\t\t\tnode_type: this.activeNode.type,\n\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\tpane: this.paneType,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetRunLabel(option: number) {\n\t\t\tlet itemsCount = 0;\n\t\t\tfor (let i = 0; i <= this.maxOutputIndex; i++) {\n\t\t\t\titemsCount += this.getPinDataOrLiveData(this.getRawInputData(option - 1, i)).length;\n\t\t\t}\n\t\t\tconst items = this.$locale.baseText('ndv.output.items', {\n\t\t\t\tadjustToNumber: itemsCount,\n\t\t\t\tinterpolate: { count: itemsCount },\n\t\t\t});\n\t\t\tconst itemsLabel = itemsCount > 0 ? ` (${items})` : '';\n\t\t\treturn option + this.$locale.baseText('ndv.output.of') + (this.maxRunIndex + 1) + itemsLabel;\n\t\t},\n\t\tgetRawInputData(\n\t\t\trunIndex: number,\n\t\t\toutputIndex: number,\n\t\t\tconnectionType: ConnectionTypes = NodeConnectionType.Main,\n\t\t): INodeExecutionData[] {\n\t\t\tlet inputData: INodeExecutionData[] = [];\n\n\t\t\tif (this.node) {\n\t\t\t\tinputData = this.nodeHelpers.getNodeInputData(\n\t\t\t\t\tthis.node,\n\t\t\t\t\trunIndex,\n\t\t\t\t\toutputIndex,\n\t\t\t\t\tthis.paneType,\n\t\t\t\t\tconnectionType,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (inputData.length === 0 || !Array.isArray(inputData)) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn inputData;\n\t\t},\n\t\tgetPinDataOrLiveData(inputData: INodeExecutionData[]): INodeExecutionData[] {\n\t\t\tif (this.pinnedData.data.value && !this.isProductionExecutionPreview) {\n\t\t\t\treturn Array.isArray(this.pinnedData.data.value)\n\t\t\t\t\t? this.pinnedData.data.value.map((value) => ({\n\t\t\t\t\t\t\tjson: value,\n\t\t\t\t\t\t}))\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tjson: this.pinnedData.data.value,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t];\n\t\t\t}\n\t\t\treturn inputData;\n\t\t},\n\t\tgetFilteredData(inputData: INodeExecutionData[]): INodeExecutionData[] {\n\t\t\tif (!this.search) {\n\t\t\t\treturn inputData;\n\t\t\t}\n\n\t\t\tthis.currentPage = 1;\n\t\t\treturn inputData.filter(({ json }) => searchInObject(json, this.search));\n\t\t},\n\t\tgetDataCount(\n\t\t\trunIndex: number,\n\t\t\toutputIndex: number,\n\t\t\tconnectionType: ConnectionTypes = NodeConnectionType.Main,\n\t\t) {\n\t\t\tif (!this.node) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (this.workflowRunData?.[this.node.name]?.[runIndex]?.hasOwnProperty('error')) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tconst rawInputData = this.getRawInputData(runIndex, outputIndex, connectionType);\n\t\t\tconst pinOrLiveData = this.getPinDataOrLiveData(rawInputData);\n\t\t\treturn this.getFilteredData(pinOrLiveData).length;\n\t\t},\n\t\tinit() {\n\t\t\t// Reset the selected output index every time another node gets selected\n\t\t\tthis.outputIndex = 0;\n\t\t\tthis.refreshDataSize();\n\t\t\tthis.closeBinaryDataDisplay();\n\t\t\tlet outputTypes: ConnectionTypes[] = [];\n\t\t\tif (this.nodeType !== null && this.node !== null) {\n\t\t\t\tconst outputs = this.getResolvedNodeOutputs();\n\t\t\t\toutputTypes = NodeHelpers.getConnectionTypes(outputs);\n\t\t\t}\n\t\t\tthis.connectionType = outputTypes.length === 0 ? NodeConnectionType.Main : outputTypes[0];\n\t\t\tif (this.binaryData.length > 0) {\n\t\t\t\tthis.ndvStore.setPanelDisplayMode({\n\t\t\t\t\tpane: this.paneType as 'input' | 'output',\n\t\t\t\t\tmode: 'binary',\n\t\t\t\t});\n\t\t\t} else if (this.displayMode === 'binary') {\n\t\t\t\tthis.ndvStore.setPanelDisplayMode({\n\t\t\t\t\tpane: this.paneType as 'input' | 'output',\n\t\t\t\t\tmode: 'table',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tcloseBinaryDataDisplay() {\n\t\t\tthis.binaryDataDisplayVisible = false;\n\t\t\tthis.binaryDataDisplayData = null;\n\t\t},\n\t\tclearExecutionData() {\n\t\t\tthis.workflowsStore.setWorkflowExecutionData(null);\n\t\t\tthis.nodeHelpers.updateNodesExecutionIssues();\n\t\t},\n\t\tisViewable(index: number, key: string | number): boolean {\n\t\t\tconst { fileType } = this.binaryData[index][key];\n\t\t\treturn (\n\t\t\t\t!!fileType && ['image', 'audio', 'video', 'text', 'json', 'pdf', 'html'].includes(fileType)\n\t\t\t);\n\t\t},\n\t\tisDownloadable(index: number, key: string | number): boolean {\n\t\t\tconst { mimeType, fileName } = this.binaryData[index][key];\n\t\t\treturn !!(mimeType && fileName);\n\t\t},\n\t\tasync downloadBinaryData(index: number, key: string | number) {\n\t\t\tconst { id, data, fileName, fileExtension, mimeType } = this.binaryData[index][key];\n\n\t\t\tif (id) {\n\t\t\t\tconst url = this.workflowsStore.getBinaryUrl(id, 'download', fileName ?? '', mimeType);\n\t\t\t\tsaveAs(url, [fileName, fileExtension].join('.'));\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tconst bufferString = 'data:' + mimeType + ';base64,' + data;\n\t\t\t\tconst blob = await fetch(bufferString).then(async (d) => await d.blob());\n\t\t\t\tsaveAs(blob, fileName);\n\t\t\t}\n\t\t},\n\t\tasync downloadJsonData() {\n\t\t\tconst fileName = (this.node?.name ?? '').replace(/[^\\w\\d]/g, '_');\n\t\t\tconst blob = new Blob([JSON.stringify(this.rawInputData, null, 2)], {\n\t\t\t\ttype: 'application/json',\n\t\t\t});\n\n\t\t\tsaveAs(blob, `${fileName}.json`);\n\t\t},\n\t\tdisplayBinaryData(index: number, key: string | number) {\n\t\t\tconst { data, mimeType } = this.binaryData[index][key];\n\t\t\tthis.binaryDataDisplayVisible = true;\n\n\t\t\tthis.binaryDataDisplayData = {\n\t\t\t\tnode: this.node?.name,\n\t\t\t\trunIndex: this.runIndex,\n\t\t\t\toutputIndex: this.currentOutputIndex,\n\t\t\t\tindex,\n\t\t\t\tkey,\n\t\t\t\tdata,\n\t\t\t\tmimeType,\n\t\t\t};\n\t\t},\n\t\tgetOutputName(outputIndex: number) {\n\t\t\tif (this.node === null) {\n\t\t\t\treturn outputIndex + 1;\n\t\t\t}\n\n\t\t\tconst nodeType = this.nodeType;\n\t\t\tconst outputs = this.getResolvedNodeOutputs();\n\t\t\tconst outputConfiguration = outputs?.[outputIndex] as INodeOutputConfiguration;\n\n\t\t\tif (outputConfiguration && isObject(outputConfiguration)) {\n\t\t\t\treturn outputConfiguration?.displayName;\n\t\t\t}\n\t\t\tif (!nodeType?.outputNames || nodeType.outputNames.length <= outputIndex) {\n\t\t\t\treturn outputIndex + 1;\n\t\t\t}\n\n\t\t\treturn nodeType.outputNames[outputIndex];\n\t\t},\n\t\trefreshDataSize() {\n\t\t\t// Hide by default the data from being displayed\n\t\t\tthis.showData = false;\n\t\t\tconst jsonItems = this.inputDataPage.map((item) => item.json);\n\t\t\tconst byteSize = new Blob([JSON.stringify(jsonItems)]).size;\n\t\t\tthis.dataSize = byteSize;\n\t\t\tthis.updateShowData();\n\t\t},\n\t\tupdateShowData() {\n\t\t\t// Display data if it is reasonably small (< 1MB)\n\t\t\tthis.showData =\n\t\t\t\t(this.isSchemaView && this.dataSize < this.MAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW) ||\n\t\t\t\tthis.dataSize < this.MAX_DISPLAY_DATA_SIZE;\n\t\t},\n\t\tonRunIndexChange(run: number) {\n\t\t\tthis.$emit('runChange', run);\n\t\t},\n\t\tenableNode() {\n\t\t\tif (this.node) {\n\t\t\t\tconst updateInformation = {\n\t\t\t\t\tname: this.node.name,\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tdisabled: !this.node.disabled,\n\t\t\t\t\t} as IDataObject,\n\t\t\t\t} as INodeUpdatePropertiesInformation;\n\n\t\t\t\tthis.workflowsStore.updateNodeProperties(updateInformation);\n\t\t\t}\n\t\t},\n\t\tsetDisplayMode() {\n\t\t\tif (!this.activeNode) return;\n\n\t\t\tconst shouldDisplayHtml =\n\t\t\t\tthis.activeNode.type === HTML_NODE_TYPE &&\n\t\t\t\tthis.activeNode.parameters.operation === 'generateHtmlTemplate';\n\n\t\t\tif (shouldDisplayHtml) {\n\t\t\t\tthis.ndvStore.setPanelDisplayMode({\n\t\t\t\t\tpane: 'output',\n\t\t\t\t\tmode: 'html',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tactivatePane() {\n\t\t\tthis.$emit('activatePane');\n\t\t},\n\t\tonSearchClear() {\n\t\t\tthis.search = '';\n\t\t\tdocument.dispatchEvent(new KeyboardEvent('keyup', { key: '/' }));\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.infoIcon {\n\tcolor: var(--color-foreground-dark);\n}\n\n.center {\n\tdisplay: flex;\n\theight: 100%;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: var(--spacing-s) var(--spacing-s) var(--spacing-xl) var(--spacing-s);\n\ttext-align: center;\n\n\t> * {\n\t\tmax-width: 316px;\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.container {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: var(--color-run-data-background);\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.pinnedDataCallout {\n\tborder-radius: inherit;\n\tborder-bottom-right-radius: 0;\n\tborder-top: 0;\n\tborder-left: 0;\n\tborder-right: 0;\n}\n\n.header {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-bottom: var(--spacing-s);\n\tpadding: var(--spacing-s) var(--spacing-s) 0 var(--spacing-s);\n\tposition: relative;\n\toverflow-x: auto;\n\toverflow-y: hidden;\n\tmin-height: calc(30px + var(--spacing-s));\n\n\t> *:first-child {\n\t\tflex-grow: 1;\n\t}\n}\n\n.dataContainer {\n\tposition: relative;\n\toverflow-y: auto;\n\theight: 100%;\n\n\t&:hover {\n\t\t.actions-group {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n\n.dataDisplay {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: 0 var(--spacing-s) var(--spacing-3xl) var(--spacing-s);\n\tright: 0;\n\toverflow-y: auto;\n\tline-height: var(--font-line-height-xloose);\n\tword-break: normal;\n\theight: 100%;\n}\n\n.outputs {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--spacing-s);\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n\tpadding-bottom: var(--spacing-s);\n}\n\n.tabs {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmin-height: 30px;\n}\n\n.itemsCount {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-2xs);\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n\tpadding-bottom: var(--spacing-s);\n\n\t.itemsText {\n\t\tflex-shrink: 0;\n\t\toverflow-x: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&.muted .itemsText {\n\t\tcolor: var(--color-text-light);\n\t\tfont-size: var(--font-size-2xs);\n\t}\n}\n\n.inputSelect {\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n\tpadding-bottom: var(--spacing-s);\n}\n\n.runSelector {\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n\tpadding-bottom: var(--spacing-s);\n\tdisplay: flex;\n\tgap: var(--spacing-4xs);\n\talign-items: center;\n\n\t:global(.el-input--suffix .el-input__inner) {\n\t\tpadding-right: var(--spacing-l);\n\t}\n}\n\n.search {\n\tmargin-left: auto;\n}\n\n.runSelectorInner {\n\tmax-width: 172px;\n}\n\n.pagination {\n\twidth: 100%;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tbottom: 0;\n\tpadding: 5px;\n\toverflow-y: hidden;\n}\n\n.pageSizeSelector {\n\ttext-transform: capitalize;\n\tmax-width: 150px;\n\tflex: 0 1 auto;\n}\n\n.binaryIndex {\n\tdisplay: block;\n\tpadding: var(--spacing-2xs);\n\tfont-size: var(--font-size-2xs);\n\n\t> * {\n\t\tdisplay: inline-block;\n\t\twidth: 30px;\n\t\theight: 30px;\n\t\tline-height: 30px;\n\t\tborder-radius: var(--border-radius-base);\n\t\ttext-align: center;\n\t\tbackground-color: var(--color-foreground-xdark);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tcolor: var(--color-text-xlight);\n\t}\n}\n\n.binaryRow {\n\tdisplay: inline-flex;\n\tfont-size: var(--font-size-2xs);\n}\n\n.binaryCell {\n\tdisplay: inline-block;\n\twidth: 300px;\n\toverflow: hidden;\n\tbackground-color: var(--color-foreground-xlight);\n\tmargin-right: var(--spacing-s);\n\tmargin-bottom: var(--spacing-s);\n\tborder-radius: var(--border-radius-base);\n\tborder: var(--border-base);\n\tpadding: var(--spacing-s);\n}\n\n.binaryHeader {\n\tcolor: $color-primary;\n\tfont-weight: var(--font-weight-bold);\n\tfont-size: 1.2em;\n\tpadding-bottom: var(--spacing-2xs);\n\tmargin-bottom: var(--spacing-2xs);\n\tborder-bottom: 1px solid var(--color-text-light);\n}\n\n.binaryButtonContainer {\n\tmargin-top: 1.5em;\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n\n\t> * {\n\t\tflex-grow: 0;\n\t\tmargin-right: var(--spacing-3xs);\n\t}\n}\n\n.binaryValue {\n\twhite-space: initial;\n\tword-wrap: break-word;\n}\n\n.displayModes {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tflex-grow: 1;\n}\n.tooltipContain {\n\tmax-width: 240px;\n}\n\n.spinner {\n\t* {\n\t\tcolor: var(--color-primary);\n\t\tmin-height: 40px;\n\t\tmin-width: 40px;\n\t}\n\n\tdisplay: flex;\n\tjustify-content: center;\n\tmargin-bottom: var(--spacing-s);\n}\n\n.editMode {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: stretch;\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n}\n\n.editModeBody {\n\tflex: 1 1 auto;\n\tmax-height: 100%;\n\twidth: 100%;\n\toverflow: auto;\n}\n\n.editModeFooter {\n\tflex: 0 1 auto;\n\tdisplay: flex;\n\twidth: 100%;\n\tjustify-content: space-between;\n\talign-items: center;\n\tpadding-top: var(--spacing-s);\n\tpadding-bottom: var(--spacing-s);\n}\n\n.editModeFooterInfotip {\n\tdisplay: flex;\n\tflex: 1;\n\twidth: 100%;\n}\n\n.editModeActions {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n\tmargin-left: var(--spacing-s);\n}\n\n.stretchVertically {\n\theight: 100%;\n}\n\n.uiBlocker {\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n\n.hintCallout {\n\tmargin-bottom: var(--spacing-xs);\n\tmargin-left: var(--spacing-s);\n\tmargin-right: var(--spacing-s);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.run-data {\n\t.code-node-editor {\n\t\theight: 100%;\n\t}\n}\n</style>\n\n<style lang=\"scss\" scoped>\n:deep(.highlight) {\n\tbackground-color: #f7dc55;\n\tcolor: black;\n\tborder-radius: var(--border-radius-base);\n\tpadding: 0 1px;\n\tfont-weight: normal;\n\tfont-style: normal;\n}\n</style>\n","<template>\n\t<n8n-info-tip\n\t\tv-if=\"hasStaleData\"\n\t\ttheme=\"warning\"\n\t\ttype=\"tooltip\"\n\t\ttooltip-placement=\"right\"\n\t\tdata-test-id=\"node-run-info-stale\"\n\t>\n\t\t<span\n\t\t\tv-html=\"\n\t\t\t\t$locale.baseText(\n\t\t\t\t\thasPinData\n\t\t\t\t\t\t? 'ndv.output.staleDataWarning.pinData'\n\t\t\t\t\t\t: 'ndv.output.staleDataWarning.regular',\n\t\t\t\t)\n\t\t\t\"\n\t\t></span>\n\t</n8n-info-tip>\n\t<n8n-info-tip\n\t\tv-else-if=\"runMetadata\"\n\t\ttype=\"tooltip\"\n\t\t:theme=\"theme\"\n\t\t:data-test-id=\"`node-run-info-${theme}`\"\n\t\ttooltip-placement=\"right\"\n\t>\n\t\t<div>\n\t\t\t<n8n-text :bold=\"true\" size=\"small\"\n\t\t\t\t>{{\n\t\t\t\t\trunTaskData.error\n\t\t\t\t\t\t? $locale.baseText('runData.executionStatus.failed')\n\t\t\t\t\t\t: $locale.baseText('runData.executionStatus.success')\n\t\t\t\t}} </n8n-text\n\t\t\t><br />\n\t\t\t<n8n-text :bold=\"true\" size=\"small\">{{\n\t\t\t\t$locale.baseText('runData.startTime') + ':'\n\t\t\t}}</n8n-text>\n\t\t\t{{ runMetadata.startTime }}<br />\n\t\t\t<n8n-text :bold=\"true\" size=\"small\">{{\n\t\t\t\t$locale.baseText('runData.executionTime') + ':'\n\t\t\t}}</n8n-text>\n\t\t\t{{ runMetadata.executionTime }} {{ $locale.baseText('runData.ms') }}\n\t\t</div>\n\t</n8n-info-tip>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { ITaskData } from 'n8n-workflow';\nimport { convertToDisplayDateComponents } from '@/utils/formatters/dateFormatter';\n\nexport default defineComponent({\n\tprops: {\n\t\ttaskData: {}, // ITaskData\n\t\thasStaleData: Boolean,\n\t\thasPinData: Boolean,\n\t},\n\n\tcomputed: {\n\t\ttheme(): string {\n\t\t\treturn this.runTaskData?.error ? 'danger' : 'success';\n\t\t},\n\t\trunTaskData(): ITaskData {\n\t\t\treturn this.taskData as ITaskData;\n\t\t},\n\t\trunMetadata(): { executionTime: number; startTime: string } | null {\n\t\t\tif (!this.runTaskData) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst { date, time } = convertToDisplayDateComponents(this.runTaskData.startTime);\n\t\t\treturn {\n\t\t\t\texecutionTime: this.runTaskData.executionTime,\n\t\t\t\tstartTime: `${date} at ${time}`,\n\t\t\t};\n\t\t},\n\t},\n});\n</script>\n","<template>\n\t<RunData\n\t\tref=\"runData\"\n\t\t:node=\"node\"\n\t\t:workflow=\"workflow\"\n\t\t:run-index=\"runIndex\"\n\t\t:linked-runs=\"linkedRuns\"\n\t\t:can-link-runs=\"canLinkRuns\"\n\t\t:too-much-data-title=\"$locale.baseText('ndv.output.tooMuchData.title')\"\n\t\t:no-data-in-branch-message=\"$locale.baseText('ndv.output.noOutputDataInBranch')\"\n\t\t:is-executing=\"isNodeRunning\"\n\t\t:executing-message=\"$locale.baseText('ndv.output.executing')\"\n\t\t:push-ref=\"pushRef\"\n\t\t:block-u-i=\"blockUI\"\n\t\t:is-production-execution-preview=\"isProductionExecutionPreview\"\n\t\t:is-pane-active=\"isPaneActive\"\n\t\tpane-type=\"output\"\n\t\t:data-output-type=\"outputMode\"\n\t\t@activate-pane=\"activatePane\"\n\t\t@run-change=\"onRunIndexChange\"\n\t\t@link-run=\"onLinkRun\"\n\t\t@unlink-run=\"onUnlinkRun\"\n\t\t@table-mounted=\"$emit('tableMounted', $event)\"\n\t\t@item-hover=\"$emit('itemHover', $event)\"\n\t\t@search=\"$emit('search', $event)\"\n\t>\n\t\t<template #header>\n\t\t\t<div :class=\"$style.titleSection\">\n\t\t\t\t<template v-if=\"hasAiMetadata\">\n\t\t\t\t\t<n8n-radio-buttons\n\t\t\t\t\t\tv-model=\"outputMode\"\n\t\t\t\t\t\t:options=\"outputTypes\"\n\t\t\t\t\t\t@update:model-value=\"onUpdateOutputMode\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<span v-else :class=\"$style.title\">\n\t\t\t\t\t{{ $locale.baseText(outputPanelEditMode.enabled ? 'ndv.output.edit' : 'ndv.output') }}\n\t\t\t\t</span>\n\t\t\t\t<RunInfo\n\t\t\t\t\tv-if=\"hasNodeRun && !pinnedData.hasData.value && runsCount === 1\"\n\t\t\t\t\tv-show=\"!outputPanelEditMode.enabled\"\n\t\t\t\t\t:task-data=\"runTaskData\"\n\t\t\t\t\t:has-stale-data=\"staleData\"\n\t\t\t\t\t:has-pin-data=\"pinnedData.hasData.value\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template #node-not-run>\n\t\t\t<n8n-text v-if=\"workflowRunning && !isTriggerNode\" data-test-id=\"ndv-output-waiting\">{{\n\t\t\t\t$locale.baseText('ndv.output.waitingToRun')\n\t\t\t}}</n8n-text>\n\t\t\t<n8n-text v-if=\"!workflowRunning\" data-test-id=\"ndv-output-run-node-hint\">\n\t\t\t\t<template v-if=\"isSubNodeType\">\n\t\t\t\t\t{{ $locale.baseText('ndv.output.runNodeHintSubNode') }}\n\t\t\t\t</template>\n\t\t\t\t<template v-else>\n\t\t\t\t\t{{ $locale.baseText('ndv.output.runNodeHint') }}\n\t\t\t\t\t<span v-if=\"canPinData\" @click=\"insertTestData\">\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t{{ $locale.baseText('generic.or') }}\n\t\t\t\t\t\t<n8n-text tag=\"a\" size=\"medium\" color=\"primary\">\n\t\t\t\t\t\t\t{{ $locale.baseText('ndv.output.insertTestData') }}\n\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t</span>\n\t\t\t\t</template>\n\t\t\t</n8n-text>\n\t\t</template>\n\n\t\t<template #no-output-data>\n\t\t\t<n8n-text :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t$locale.baseText('ndv.output.noOutputData.title')\n\t\t\t}}</n8n-text>\n\t\t\t<n8n-text>\n\t\t\t\t{{ $locale.baseText('ndv.output.noOutputData.message') }}\n\t\t\t\t<a @click=\"openSettings\">{{\n\t\t\t\t\t$locale.baseText('ndv.output.noOutputData.message.settings')\n\t\t\t\t}}</a>\n\t\t\t\t{{ $locale.baseText('ndv.output.noOutputData.message.settingsOption') }}\n\t\t\t</n8n-text>\n\t\t</template>\n\n\t\t<template v-if=\"outputMode === 'logs' && node\" #content>\n\t\t\t<RunDataAi :node=\"node\" :run-index=\"runIndex\" />\n\t\t</template>\n\t\t<template #recovered-artificial-output-data>\n\t\t\t<div :class=\"$style.recoveredOutputData\">\n\t\t\t\t<n8n-text tag=\"div\" :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t\t$locale.baseText('executionDetails.executionFailed.recoveredNodeTitle')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-text>\n\t\t\t\t\t{{ $locale.baseText('executionDetails.executionFailed.recoveredNodeMessage') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template v-if=\"!pinnedData.hasData.value && runsCount > 1\" #run-info>\n\t\t\t<RunInfo :task-data=\"runTaskData\" />\n\t\t</template>\n\t</RunData>\n</template>\n\n<script lang=\"ts\">\nimport { type PropType, defineComponent } from 'vue';\nimport type { IExecutionResponse, INodeUi } from '@/Interface';\nimport type {\n\tINodeTypeDescription,\n\tIRunData,\n\tIRunExecutionData,\n\tITaskData,\n\tWorkflow,\n} from 'n8n-workflow';\nimport RunData from './RunData.vue';\nimport RunInfo from './RunInfo.vue';\nimport { mapStores, storeToRefs } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport RunDataAi from './RunDataAi/RunDataAi.vue';\nimport { ndvEventBus } from '@/event-bus';\nimport { useNodeType } from '@/composables/useNodeType';\nimport { usePinnedData } from '@/composables/usePinnedData';\n\ntype RunDataRef = InstanceType<typeof RunData>;\n\nconst OUTPUT_TYPE = {\n\tREGULAR: 'regular',\n\tLOGS: 'logs',\n} as const;\n\ntype OutputTypeKey = keyof typeof OUTPUT_TYPE;\ntype OutputType = (typeof OUTPUT_TYPE)[OutputTypeKey];\n\nexport default defineComponent({\n\tname: 'OutputPanel',\n\tcomponents: { RunData, RunInfo, RunDataAi },\n\tprops: {\n\t\tworkflow: {\n\t\t\ttype: Object as PropType<Workflow>,\n\t\t\trequired: true,\n\t\t},\n\t\trunIndex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tisReadOnly: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tlinkedRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tcanLinkRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\tblockUI: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisProductionExecutionPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisPaneActive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tsetup(props) {\n\t\tconst ndvStore = useNDVStore();\n\t\tconst { activeNode } = storeToRefs(ndvStore);\n\t\tconst { isSubNodeType } = useNodeType({\n\t\t\tnode: activeNode,\n\t\t});\n\t\tconst pinnedData = usePinnedData(activeNode, {\n\t\t\trunIndex: props.runIndex,\n\t\t\tdisplayMode: ndvStore.getPanelDisplayMode('output'),\n\t\t});\n\n\t\treturn {\n\t\t\tpinnedData,\n\t\t\tisSubNodeType,\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toutputMode: 'regular',\n\t\t\toutputTypes: [\n\t\t\t\t{ label: this.$locale.baseText('ndv.output.outType.regular'), value: OUTPUT_TYPE.REGULAR },\n\t\t\t\t{ label: this.$locale.baseText('ndv.output.outType.logs'), value: OUTPUT_TYPE.LOGS },\n\t\t\t],\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNodeTypesStore, useNDVStore, useUIStore, useWorkflowsStore),\n\t\tnode(): INodeUi | undefined {\n\t\t\treturn this.ndvStore.activeNode ?? undefined;\n\t\t},\n\t\tnodeType(): INodeTypeDescription | null {\n\t\t\tif (this.node) {\n\t\t\t\treturn this.nodeTypesStore.getNodeType(this.node.type, this.node.typeVersion);\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tisTriggerNode(): boolean {\n\t\t\treturn !!this.node && this.nodeTypesStore.isTriggerNode(this.node.type);\n\t\t},\n\t\thasAiMetadata(): boolean {\n\t\t\tif (this.node) {\n\t\t\t\tconst resultData = this.workflowsStore.getWorkflowResultDataByNodeName(this.node.name);\n\n\t\t\t\tif (!resultData || !Array.isArray(resultData) || resultData.length === 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn !!resultData[resultData.length - 1].metadata;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tisPollingTypeNode(): boolean {\n\t\t\treturn !!this.nodeType?.polling;\n\t\t},\n\t\tisScheduleTrigger(): boolean {\n\t\t\treturn !!(this.nodeType && this.nodeType.group.includes('schedule'));\n\t\t},\n\t\tisNodeRunning(): boolean {\n\t\t\treturn !!this.node && this.workflowsStore.isNodeExecuting(this.node.name);\n\t\t},\n\t\tworkflowRunning(): boolean {\n\t\t\treturn this.uiStore.isActionActive('workflowRunning');\n\t\t},\n\t\tworkflowExecution(): IExecutionResponse | null {\n\t\t\treturn this.workflowsStore.getWorkflowExecution;\n\t\t},\n\t\tworkflowRunData(): IRunData | null {\n\t\t\tif (this.workflowExecution === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst executionData: IRunExecutionData | undefined = this.workflowExecution.data;\n\t\t\tif (!executionData?.resultData?.runData) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn executionData.resultData.runData;\n\t\t},\n\t\thasNodeRun(): boolean {\n\t\t\tif (this.workflowsStore.subWorkflowExecutionError) return true;\n\n\t\t\treturn Boolean(\n\t\t\t\tthis.node && this.workflowRunData && this.workflowRunData.hasOwnProperty(this.node.name),\n\t\t\t);\n\t\t},\n\t\trunTaskData(): ITaskData | null {\n\t\t\tif (!this.node || this.workflowExecution === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst runData = this.workflowRunData;\n\n\t\t\tif (runData === null || !runData.hasOwnProperty(this.node.name)) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (runData[this.node.name].length <= this.runIndex) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn runData[this.node.name][this.runIndex];\n\t\t},\n\t\trunsCount(): number {\n\t\t\tif (this.node === null) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tconst runData: IRunData | null = this.workflowRunData;\n\n\t\t\tif (runData === null || (this.node && !runData.hasOwnProperty(this.node.name))) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (this.node && runData[this.node.name].length) {\n\t\t\t\treturn runData[this.node.name].length;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t},\n\t\tstaleData(): boolean {\n\t\t\tif (!this.node) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst updatedAt = this.workflowsStore.getParametersLastUpdate(this.node.name);\n\t\t\tif (!updatedAt || !this.runTaskData) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst runAt = this.runTaskData.startTime;\n\t\t\treturn updatedAt > runAt;\n\t\t},\n\t\toutputPanelEditMode(): { enabled: boolean; value: string } {\n\t\t\treturn this.ndvStore.outputPanelEditMode;\n\t\t},\n\t\tcanPinData(): boolean {\n\t\t\treturn this.pinnedData.isValidNodeType.value && !this.isReadOnly;\n\t\t},\n\t},\n\tmethods: {\n\t\tinsertTestData() {\n\t\t\tconst runDataRef = this.$refs.runData as RunDataRef | undefined;\n\t\t\tif (runDataRef) {\n\t\t\t\trunDataRef.enterEditMode({\n\t\t\t\t\torigin: 'insertTestDataLink',\n\t\t\t\t});\n\n\t\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\tnode_type: this.node?.type,\n\t\t\t\t\tpane: 'output',\n\t\t\t\t\ttype: 'insert-test-data',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tonLinkRun() {\n\t\t\tthis.$emit('linkRun');\n\t\t},\n\t\tonUnlinkRun() {\n\t\t\tthis.$emit('unlinkRun');\n\t\t},\n\t\topenSettings() {\n\t\t\tthis.$emit('openSettings');\n\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\tnode_type: this.node?.type,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tpane: 'output',\n\t\t\t\ttype: 'settings',\n\t\t\t});\n\t\t},\n\t\tonRunIndexChange(run: number) {\n\t\t\tthis.$emit('runChange', run);\n\t\t},\n\t\tonUpdateOutputMode(outputMode: OutputType) {\n\t\t\tif (outputMode === OUTPUT_TYPE.LOGS) {\n\t\t\t\tndvEventBus.emit('setPositionByName', 'minLeft');\n\t\t\t} else {\n\t\t\t\tndvEventBus.emit('setPositionByName', 'initial');\n\t\t\t}\n\t\t},\n\t\tactivatePane() {\n\t\t\tthis.$emit('activatePane');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n// The items count and displayModes are rendered in the RunData component\n// this is a workaround to hide it in the output panel(for ai type) to not add unnecessary one-time props\n:global([data-output-type='logs'] [class*='itemsCount']),\n:global([data-output-type='logs'] [class*='displayModes']) {\n\tdisplay: none;\n}\n.outputTypeSelect {\n\tmargin-bottom: var(--spacing-4xs);\n\twidth: fit-content;\n}\n.titleSection {\n\tdisplay: flex;\n\talign-items: center;\n\n\t> * {\n\t\tmargin-right: var(--spacing-2xs);\n\t}\n}\n\n.title {\n\ttext-transform: uppercase;\n\tcolor: var(--color-text-light);\n\tletter-spacing: 3px;\n\tfont-weight: var(--font-weight-bold);\n\tfont-size: var(--font-size-s);\n}\n\n.noOutputData {\n\tmax-width: 180px;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-m);\n\t}\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.recoveredOutputData {\n\tmargin: auto;\n\tmax-width: 250px;\n\ttext-align: center;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-m);\n\t}\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from '@/composables/useI18n';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { isPresent } from '@/utils/typesUtils';\nimport type { IConnectedNode, Workflow } from 'n8n-workflow';\nimport { computed } from 'vue';\nimport NodeIcon from './NodeIcon.vue';\n\ntype Props = {\n\tnodes: IConnectedNode[];\n\tworkflow: Workflow;\n\tmodelValue: string | null;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n\t(event: 'update:model-value', value: string): void;\n}>();\n\nconst i18n = useI18n();\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst ndvStore = useNDVStore();\n\nconst selectedInputNode = computed(() => workflowsStore.getNodeByName(props.modelValue ?? ''));\n\nconst selectedInputNodeType = computed(() => {\n\tconst node = selectedInputNode.value;\n\tif (!node) return null;\n\n\treturn nodeTypesStore.getNodeType(node.type, node.typeVersion);\n});\n\nconst inputNodes = computed(() =>\n\tprops.nodes\n\t\t.map((node) => {\n\t\t\tconst fullNode = workflowsStore.getNodeByName(node.name);\n\t\t\tif (!fullNode) return null;\n\n\t\t\treturn {\n\t\t\t\tnode: fullNode,\n\t\t\t\ttype: nodeTypesStore.getNodeType(fullNode.type, fullNode.typeVersion),\n\t\t\t\tdepth: node.depth,\n\t\t\t};\n\t\t})\n\t\t.filter(isPresent),\n);\n\nconst activeNode = computed(() => ndvStore.activeNode);\n\nconst activeNodeType = computed(() => {\n\tconst node = activeNode.value;\n\tif (!node) return null;\n\n\treturn nodeTypesStore.getNodeType(node.type, node.typeVersion);\n});\n\nconst isMultiInputNode = computed(() => {\n\tconst nodeType = activeNodeType.value;\n\treturn nodeType !== null && nodeType.inputs.length > 1;\n});\n\nfunction getMultipleNodesText(nodeName: string): string {\n\tif (\n\t\t!nodeName ||\n\t\t!isMultiInputNode.value ||\n\t\t!activeNode.value ||\n\t\t!activeNodeType.value?.inputNames\n\t)\n\t\treturn '';\n\n\tconst activeNodeConnections =\n\t\tprops.workflow.connectionsByDestinationNode[activeNode.value.name].main || [];\n\t// Collect indexes of connected nodes\n\tconst connectedInputIndexes = activeNodeConnections.reduce((acc: number[], node, index) => {\n\t\tif (node[0] && node[0].node === nodeName) return [...acc, index];\n\t\treturn acc;\n\t}, []);\n\n\t// Match connected input indexes to their names specified by active node\n\tconst connectedInputs = connectedInputIndexes.map(\n\t\t(inputIndex) => activeNodeType.value?.inputNames?.[inputIndex],\n\t);\n\n\tif (connectedInputs.length === 0) return '';\n\n\treturn `(${connectedInputs.join(' & ')})`;\n}\n\nfunction title(nodeName: string) {\n\tconst truncated = nodeName.substring(0, 30);\n\tif (truncated.length < nodeName.length) {\n\t\treturn `${truncated}...`;\n\t}\n\treturn truncated;\n}\n\nfunction subtitle(nodeName: string, depth: number) {\n\tconst multipleNodesText = getMultipleNodesText(nodeName);\n\tif (multipleNodesText) return multipleNodesText;\n\treturn i18n.baseText('ndv.input.nodeDistance', { adjustToNumber: depth });\n}\n\nfunction onInputNodeChange(value: string) {\n\temit('update:model-value', value);\n}\n</script>\n\n<template>\n\t<n8n-select\n\t\t:model-value=\"modelValue\"\n\t\t:no-data-text=\"i18n.baseText('ndv.input.noNodesFound')\"\n\t\t:placeholder=\"i18n.baseText('ndv.input.parentNodes')\"\n\t\t:class=\"$style.select\"\n\t\tteleported\n\t\tsize=\"small\"\n\t\tfilterable\n\t\tdata-test-id=\"ndv-input-select\"\n\t\t@update:model-value=\"onInputNodeChange\"\n\t>\n\t\t<template #prefix>\n\t\t\t<NodeIcon\n\t\t\t\t:disabled=\"selectedInputNode?.disabled\"\n\t\t\t\t:node-type=\"selectedInputNodeType\"\n\t\t\t\t:size=\"14\"\n\t\t\t\t:shrink=\"false\"\n\t\t\t/>\n\t\t</template>\n\n\t\t<n8n-option\n\t\t\tv-for=\"{ node, type, depth } of inputNodes\"\n\t\t\t:key=\"node.name\"\n\t\t\t:value=\"node.name\"\n\t\t\t:class=\"[$style.node, { [$style.disabled]: node.disabled }]\"\n\t\t\t:label=\"`${title(node.name)} ${getMultipleNodesText(node.name)}`\"\n\t\t\tdata-test-id=\"ndv-input-option\"\n\t\t>\n\t\t\t<NodeIcon\n\t\t\t\t:disabled=\"node.disabled\"\n\t\t\t\t:node-type=\"type\"\n\t\t\t\t:size=\"14\"\n\t\t\t\t:shrink=\"false\"\n\t\t\t\t:class=\"$style.icon\"\n\t\t\t/>\n\t\t\t<span :class=\"$style.title\">\n\t\t\t\t{{ title(node.name) }}\n\t\t\t\t<span v-if=\"node.disabled\">({{ i18n.baseText('node.disabled') }})</span>\n\t\t\t</span>\n\n\t\t\t<span :class=\"$style.subtitle\">{{ subtitle(node.name, depth) }}</span>\n\t\t</n8n-option>\n\t</n8n-select>\n</template>\n\n<style lang=\"scss\" module>\n.select {\n\tmax-width: 224px;\n\n\t:global(.el-input--suffix .el-input__inner) {\n\t\tpadding-left: calc(var(--spacing-l) + var(--spacing-4xs));\n\t\tpadding-right: var(--spacing-l);\n\t}\n}\n\n.node {\n\t--select-option-padding: 0 var(--spacing-s);\n\tdisplay: flex;\n\talign-items: center;\n\tfont-size: var(--font-size-2xs);\n\tgap: var(--spacing-4xs);\n}\n\n.icon {\n\tpadding-right: var(--spacing-4xs);\n}\n\n.title {\n\tcolor: var(--color-text-dark);\n\tfont-weight: var(--font-weight-regular);\n}\n\n.disabled .title {\n\tcolor: var(--color-text-light);\n}\n\n.subtitle {\n\tcolor: var(--color-text-light);\n\tfont-weight: var(--font-weight-regular);\n}\n</style>\n","<template>\n\t<svg\n\t\twidth=\"112\"\n\t\theight=\"80\"\n\t\tviewBox=\"0 0 112 80\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t>\n\t\t<mask\n\t\t\tid=\"mask0_489_46042\"\n\t\t\tstyle=\"mask-type: alpha\"\n\t\t\tmaskUnits=\"userSpaceOnUse\"\n\t\t\tx=\"0\"\n\t\t\ty=\"0\"\n\t\t\twidth=\"112\"\n\t\t\theight=\"80\"\n\t\t>\n\t\t\t<rect width=\"112\" height=\"80\" fill=\"url(#paint0_linear_489_46042)\" />\n\t\t</mask>\n\t\t<g mask=\"url(#mask0_489_46042)\">\n\t\t\t<rect x=\"-0.5\" width=\"112\" height=\"80\" fill=\"url(#pattern0)\" fill-opacity=\"0.6\" />\n\t\t</g>\n\t\t<defs>\n\t\t\t<pattern id=\"pattern0\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n\t\t\t\t<use xlink:href=\"#image0_489_46042\" transform=\"scale(0.00357143 0.005)\" />\n\t\t\t</pattern>\n\t\t\t<linearGradient\n\t\t\t\tid=\"paint0_linear_489_46042\"\n\t\t\t\tx1=\"90.5\"\n\t\t\t\ty1=\"40.4494\"\n\t\t\t\tx2=\"112.5\"\n\t\t\t\ty2=\"40.4494\"\n\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t>\n\t\t\t\t<stop />\n\t\t\t\t<stop offset=\"1\" stop-color=\"white\" stop-opacity=\"0\" />\n\t\t\t</linearGradient>\n\t\t\t<image\n\t\t\t\tid=\"image0_489_46042\"\n\t\t\t\twidth=\"280\"\n\t\t\t\theight=\"200\"\n\t\t\t\txlink:href=\"data:image/png;base64,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\"\n\t\t\t/>\n\t\t</defs>\n\t</svg>\n</template>\n","<template>\n\t<RunData\n\t\t:node=\"currentNode\"\n\t\t:workflow=\"workflow\"\n\t\t:run-index=\"runIndex\"\n\t\t:linked-runs=\"linkedRuns\"\n\t\t:can-link-runs=\"!mappedNode && canLinkRuns\"\n\t\t:too-much-data-title=\"$locale.baseText('ndv.input.tooMuchData.title')\"\n\t\t:no-data-in-branch-message=\"$locale.baseText('ndv.input.noOutputDataInBranch')\"\n\t\t:is-executing=\"isExecutingPrevious\"\n\t\t:executing-message=\"$locale.baseText('ndv.input.executingPrevious')\"\n\t\t:push-ref=\"pushRef\"\n\t\t:override-outputs=\"connectedCurrentNodeOutputs\"\n\t\t:mapping-enabled=\"isMappingEnabled\"\n\t\t:distance-from-active=\"currentNodeDepth\"\n\t\t:is-production-execution-preview=\"isProductionExecutionPreview\"\n\t\t:is-pane-active=\"isPaneActive\"\n\t\tpane-type=\"input\"\n\t\tdata-test-id=\"ndv-input-panel\"\n\t\t@activate-pane=\"activatePane\"\n\t\t@item-hover=\"$emit('itemHover', $event)\"\n\t\t@link-run=\"onLinkRun\"\n\t\t@unlink-run=\"onUnlinkRun\"\n\t\t@run-change=\"onRunIndexChange\"\n\t\t@table-mounted=\"$emit('tableMounted', $event)\"\n\t\t@search=\"$emit('search', $event)\"\n\t>\n\t\t<template #header>\n\t\t\t<div :class=\"$style.titleSection\">\n\t\t\t\t<span :class=\"$style.title\">{{ $locale.baseText('ndv.input') }}</span>\n\t\t\t\t<n8n-radio-buttons\n\t\t\t\t\tv-if=\"isActiveNodeConfig && !readOnly\"\n\t\t\t\t\t:options=\"inputModes\"\n\t\t\t\t\t:model-value=\"inputMode\"\n\t\t\t\t\t@update:model-value=\"onInputModeChange\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</template>\n\t\t<template #input-select>\n\t\t\t<InputNodeSelect\n\t\t\t\tv-if=\"parentNodes.length && currentNodeName\"\n\t\t\t\t:model-value=\"currentNodeName\"\n\t\t\t\t:workflow=\"workflow\"\n\t\t\t\t:nodes=\"parentNodes\"\n\t\t\t\t@update:model-value=\"onInputNodeChange\"\n\t\t\t/>\n\t\t</template>\n\t\t<template v-if=\"isMappingMode\" #before-data>\n\t\t\t<!--\n\t\t\t\t\t\tHide the run linking buttons for both input and ouput panels when in 'Mapping Mode' because the run indices wouldn't match.\n\t\t\t\t\t\tAlthough this is not the most elegant solution, it's straightforward and simpler than introducing a new props and logic to handle this.\n\t\t\t\t-->\n\t\t\t<component :is=\"'style'\">button.linkRun { display: none }</component>\n\t\t\t<div :class=\"$style.mappedNode\">\n\t\t\t\t<InputNodeSelect\n\t\t\t\t\t:model-value=\"mappedNode\"\n\t\t\t\t\t:workflow=\"workflow\"\n\t\t\t\t\t:nodes=\"rootNodesParents\"\n\t\t\t\t\t@update:model-value=\"onMappedNodeSelected\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</template>\n\t\t<template #node-not-run>\n\t\t\t<div\n\t\t\t\tv-if=\"(isActiveNodeConfig && rootNode) || parentNodes.length\"\n\t\t\t\t:class=\"$style.noOutputData\"\n\t\t\t>\n\t\t\t\t<n8n-text tag=\"div\" :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t\t$locale.baseText('ndv.input.noOutputData.title')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-tooltip v-if=\"!readOnly\" :visible=\"showDraggableHint && showDraggableHintWithDelay\">\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-html=\"\n\t\t\t\t\t\t\t\t$locale.baseText('dataMapping.dragFromPreviousHint', {\n\t\t\t\t\t\t\t\t\tinterpolate: { name: focusedMappableInput },\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NodeExecuteButton\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\thide-icon\n\t\t\t\t\t\t:transparent=\"true\"\n\t\t\t\t\t\t:node-name=\"isActiveNodeConfig ? rootNode : currentNodeName ?? ''\"\n\t\t\t\t\t\t:label=\"$locale.baseText('ndv.input.noOutputData.executePrevious')\"\n\t\t\t\t\t\ttelemetry-source=\"inputs\"\n\t\t\t\t\t\tdata-test-id=\"execute-previous-node\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-tooltip>\n\t\t\t\t<n8n-text v-if=\"!readOnly\" tag=\"div\" size=\"small\">\n\t\t\t\t\t{{ $locale.baseText('ndv.input.noOutputData.hint') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<div v-else :class=\"$style.notConnected\">\n\t\t\t\t<div>\n\t\t\t\t\t<WireMeUp />\n\t\t\t\t</div>\n\t\t\t\t<n8n-text tag=\"div\" :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t\t$locale.baseText('ndv.input.notConnected.title')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-text tag=\"div\">\n\t\t\t\t\t{{ $locale.baseText('ndv.input.notConnected.message') }}\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://docs.n8n.io/workflows/connections/\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t@click=\"onConnectionHelpClick\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ $locale.baseText('ndv.input.notConnected.learnMore') }}\n\t\t\t\t\t</a>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template #no-output-data>\n\t\t\t<n8n-text tag=\"div\" :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t$locale.baseText('ndv.input.noOutputData')\n\t\t\t}}</n8n-text>\n\t\t</template>\n\n\t\t<template #recovered-artificial-output-data>\n\t\t\t<div :class=\"$style.recoveredOutputData\">\n\t\t\t\t<n8n-text tag=\"div\" :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t\t$locale.baseText('executionDetails.executionFailed.recoveredNodeTitle')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-text>\n\t\t\t\t\t{{ $locale.baseText('executionDetails.executionFailed.recoveredNodeMessage') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</template>\n\t</RunData>\n</template>\n\n<script lang=\"ts\">\nimport type { INodeUi } from '@/Interface';\nimport {\n\tCRON_NODE_TYPE,\n\tINTERVAL_NODE_TYPE,\n\tMANUAL_TRIGGER_NODE_TYPE,\n\tSTART_NODE_TYPE,\n} from '@/constants';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type {\n\tConnectionTypes,\n\tIConnectedNode,\n\tINodeOutputConfiguration,\n\tINodeTypeDescription,\n\tWorkflow,\n} from 'n8n-workflow';\nimport { NodeConnectionType, NodeHelpers } from 'n8n-workflow';\nimport { mapStores } from 'pinia';\nimport { defineComponent, type PropType } from 'vue';\nimport InputNodeSelect from './InputNodeSelect.vue';\nimport NodeExecuteButton from './NodeExecuteButton.vue';\nimport RunData from './RunData.vue';\nimport WireMeUp from './WireMeUp.vue';\n\ntype MappingMode = 'debugging' | 'mapping';\n\nexport default defineComponent({\n\tname: 'InputPanel',\n\tcomponents: { RunData, NodeExecuteButton, WireMeUp, InputNodeSelect },\n\tprops: {\n\t\tcurrentNodeName: {\n\t\t\ttype: String,\n\t\t},\n\t\trunIndex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tlinkedRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tworkflow: {\n\t\t\ttype: Object as PropType<Workflow>,\n\t\t\trequired: true,\n\t\t},\n\t\tcanLinkRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisProductionExecutionPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisPaneActive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: [\n\t\t'itemHover',\n\t\t'tableMounted',\n\t\t'linkRun',\n\t\t'unlinkRun',\n\t\t'runChange',\n\t\t'search',\n\t\t'changeInputNode',\n\t\t'execute',\n\t\t'activatePane',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tshowDraggableHintWithDelay: false,\n\t\t\tdraggableHintShown: false,\n\t\t\tinputMode: 'debugging' as MappingMode,\n\t\t\tmappedNode: null as string | null,\n\t\t\tinputModes: [\n\t\t\t\t{ value: 'mapping', label: this.$locale.baseText('ndv.input.mapping') },\n\t\t\t\t{ value: 'debugging', label: this.$locale.baseText('ndv.input.debugging') },\n\t\t\t],\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNodeTypesStore, useNDVStore, useWorkflowsStore, useUIStore),\n\t\tfocusedMappableInput(): string {\n\t\t\treturn this.ndvStore.focusedMappableInput;\n\t\t},\n\t\tisUserOnboarded(): boolean {\n\t\t\treturn this.ndvStore.isMappingOnboarded;\n\t\t},\n\t\tisMappingMode(): boolean {\n\t\t\treturn this.isActiveNodeConfig && this.inputMode === 'mapping';\n\t\t},\n\t\tshowDraggableHint(): boolean {\n\t\t\tconst toIgnore = [\n\t\t\t\tSTART_NODE_TYPE,\n\t\t\t\tMANUAL_TRIGGER_NODE_TYPE,\n\t\t\t\tCRON_NODE_TYPE,\n\t\t\t\tINTERVAL_NODE_TYPE,\n\t\t\t];\n\t\t\tif (!this.currentNode || toIgnore.includes(this.currentNode.type)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn !!this.focusedMappableInput && !this.isUserOnboarded;\n\t\t},\n\t\tisActiveNodeConfig(): boolean {\n\t\t\tlet inputs = this.activeNodeType?.inputs ?? [];\n\t\t\tlet outputs = this.activeNodeType?.outputs ?? [];\n\t\t\tif (this.activeNode !== null && this.workflow !== null) {\n\t\t\t\tconst node = this.workflow.getNode(this.activeNode.name);\n\t\t\t\tinputs = NodeHelpers.getNodeInputs(this.workflow, node!, this.activeNodeType!);\n\t\t\t\toutputs = NodeHelpers.getNodeOutputs(this.workflow, node!, this.activeNodeType!);\n\t\t\t} else {\n\t\t\t\t// If we can not figure out the node type we set no outputs\n\t\t\t\tif (!Array.isArray(inputs)) {\n\t\t\t\t\tinputs = [] as ConnectionTypes[];\n\t\t\t\t}\n\t\t\t\tif (!Array.isArray(outputs)) {\n\t\t\t\t\toutputs = [] as ConnectionTypes[];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tinputs.length === 0 ||\n\t\t\t\t(inputs.every((input) => this.filterOutConnectionType(input, NodeConnectionType.Main)) &&\n\t\t\t\t\toutputs.find((output) => this.filterOutConnectionType(output, NodeConnectionType.Main)))\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tisMappingEnabled(): boolean {\n\t\t\tif (this.readOnly) return false;\n\n\t\t\t// Mapping is only enabled in mapping mode for config nodes and if node to map is selected\n\t\t\tif (this.isActiveNodeConfig) return this.isMappingMode && this.mappedNode !== null;\n\n\t\t\treturn true;\n\t\t},\n\t\tisExecutingPrevious(): boolean {\n\t\t\tif (!this.workflowRunning) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst triggeredNode = this.workflowsStore.executedNode;\n\t\t\tconst executingNode = this.workflowsStore.executingNode;\n\n\t\t\tif (\n\t\t\t\tthis.activeNode &&\n\t\t\t\ttriggeredNode === this.activeNode.name &&\n\t\t\t\t!this.workflowsStore.isNodeExecuting(this.activeNode.name)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (executingNode.length || triggeredNode) {\n\t\t\t\treturn !!this.parentNodes.find(\n\t\t\t\t\t(node) => this.workflowsStore.isNodeExecuting(node.name) || node.name === triggeredNode,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tworkflowRunning(): boolean {\n\t\t\treturn this.uiStore.isActionActive('workflowRunning');\n\t\t},\n\n\t\tactiveNode(): INodeUi | null {\n\t\t\treturn this.ndvStore.activeNode;\n\t\t},\n\n\t\trootNode(): string {\n\t\t\tconst workflow = this.workflow;\n\t\t\tconst rootNodes = workflow.getChildNodes(this.activeNode?.name ?? '', 'ALL_NON_MAIN');\n\n\t\t\treturn rootNodes[0];\n\t\t},\n\t\trootNodesParents() {\n\t\t\tconst workflow = this.workflow;\n\t\t\tconst parentNodes = [...workflow.getParentNodes(this.rootNode, 'main')]\n\t\t\t\t.reverse()\n\t\t\t\t.map((parent): IConnectedNode => ({ name: parent, depth: 1, indicies: [] }));\n\n\t\t\treturn parentNodes;\n\t\t},\n\t\tcurrentNode(): INodeUi | null {\n\t\t\tif (this.isActiveNodeConfig) {\n\t\t\t\t// if we're mapping node we want to show the output of the mapped node\n\t\t\t\tif (this.mappedNode) {\n\t\t\t\t\treturn this.workflowsStore.getNodeByName(this.mappedNode);\n\t\t\t\t}\n\n\t\t\t\t// in debugging mode data does get set manually and is only for debugging\n\t\t\t\t// so we want to force the node to be the active node to make sure we show the correct data\n\t\t\t\treturn this.activeNode;\n\t\t\t}\n\n\t\t\treturn this.workflowsStore.getNodeByName(this.currentNodeName ?? '');\n\t\t},\n\t\tconnectedCurrentNodeOutputs(): number[] | undefined {\n\t\t\tconst search = this.parentNodes.find(({ name }) => name === this.currentNodeName);\n\t\t\tif (search) {\n\t\t\t\treturn search.indicies;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\tparentNodes(): IConnectedNode[] {\n\t\t\tif (!this.activeNode) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst nodes = this.workflow.getParentNodesByDepth(this.activeNode.name);\n\n\t\t\treturn nodes.filter(\n\t\t\t\t({ name }, i) =>\n\t\t\t\t\tthis.activeNode &&\n\t\t\t\t\tname !== this.activeNode.name &&\n\t\t\t\t\tnodes.findIndex((node) => node.name === name) === i,\n\t\t\t);\n\t\t},\n\t\tcurrentNodeDepth(): number {\n\t\t\tconst node = this.parentNodes.find(\n\t\t\t\t(parent) => this.currentNode && parent.name === this.currentNode.name,\n\t\t\t);\n\t\t\treturn node ? node.depth : -1;\n\t\t},\n\t\tactiveNodeType(): INodeTypeDescription | null {\n\t\t\tif (!this.activeNode) return null;\n\n\t\t\treturn this.nodeTypesStore.getNodeType(this.activeNode.type, this.activeNode.typeVersion);\n\t\t},\n\t\tisMultiInputNode(): boolean {\n\t\t\treturn this.activeNodeType !== null && this.activeNodeType.inputs.length > 1;\n\t\t},\n\t},\n\twatch: {\n\t\tinputMode: {\n\t\t\thandler(val) {\n\t\t\t\tthis.onRunIndexChange(-1);\n\t\t\t\tif (val === 'mapping') {\n\t\t\t\t\tthis.onUnlinkRun();\n\t\t\t\t\tthis.mappedNode = this.rootNodesParents[0]?.name ?? null;\n\t\t\t\t} else {\n\t\t\t\t\tthis.mappedNode = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\timmediate: true,\n\t\t},\n\t\tshowDraggableHint(curr: boolean, prev: boolean) {\n\t\t\tif (curr && !prev) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (this.draggableHintShown) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.showDraggableHintWithDelay = this.showDraggableHint;\n\t\t\t\t\tif (this.showDraggableHintWithDelay) {\n\t\t\t\t\t\tthis.draggableHintShown = true;\n\n\t\t\t\t\t\tthis.$telemetry.track('User viewed data mapping tooltip', {\n\t\t\t\t\t\t\ttype: 'unexecuted input pane',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t} else if (!curr) {\n\t\t\t\tthis.showDraggableHintWithDelay = false;\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tfilterOutConnectionType(\n\t\t\titem: ConnectionTypes | INodeOutputConfiguration,\n\t\t\ttype: ConnectionTypes,\n\t\t) {\n\t\t\tif (!item) return false;\n\n\t\t\treturn typeof item === 'string' ? item !== type : item.type !== type;\n\t\t},\n\t\tonInputModeChange(val: MappingMode) {\n\t\t\tthis.inputMode = val;\n\t\t},\n\t\tonMappedNodeSelected(val: string) {\n\t\t\tthis.mappedNode = val;\n\n\t\t\tthis.onRunIndexChange(0);\n\t\t\tthis.onUnlinkRun();\n\t\t},\n\t\tonNodeExecute() {\n\t\t\tthis.$emit('execute');\n\t\t\tif (this.activeNode) {\n\t\t\t\tthis.$telemetry.track('User clicked ndv button', {\n\t\t\t\t\tnode_type: this.activeNode.type,\n\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\tpane: 'input',\n\t\t\t\t\ttype: 'executePrevious',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tonRunIndexChange(run: number) {\n\t\t\tthis.$emit('runChange', run);\n\t\t},\n\t\tonLinkRun() {\n\t\t\tthis.$emit('linkRun');\n\t\t},\n\t\tonUnlinkRun() {\n\t\t\tthis.$emit('unlinkRun');\n\t\t},\n\t\tonInputNodeChange(value: string) {\n\t\t\tconst index = this.parentNodes.findIndex((node) => node.name === value) + 1;\n\t\t\tthis.$emit('changeInputNode', value, index);\n\t\t},\n\t\tonConnectionHelpClick() {\n\t\t\tif (this.activeNode) {\n\t\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\t\tnode_type: this.activeNode.type,\n\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\tpane: 'input',\n\t\t\t\t\ttype: 'not-connected-help',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tactivatePane() {\n\t\t\tthis.$emit('activatePane');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.mappedNode {\n\tpadding: 0 var(--spacing-s) var(--spacing-s);\n}\n\n.titleSection {\n\tdisplay: flex;\n\tmax-width: 300px;\n\talign-items: center;\n\n\t> * {\n\t\tmargin-right: var(--spacing-2xs);\n\t}\n}\n.inputModeTab {\n\tmargin-left: auto;\n}\n.noOutputData {\n\tmax-width: 180px;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-m);\n\t}\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.recoveredOutputData {\n\tmargin: auto;\n\tmax-width: 250px;\n\ttext-align: center;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-m);\n\t}\n}\n\n.notConnected {\n\tmax-width: 300px;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-m);\n\t}\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.title {\n\ttext-transform: uppercase;\n\tcolor: var(--color-text-light);\n\tletter-spacing: 3px;\n\tfont-size: var(--font-size-s);\n\tfont-weight: var(--font-weight-bold);\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t<div v-if=\"hasIssues || hideContent\" key=\"empty\"></div>\n\t\t\t<div v-else-if=\"isListeningForEvents\" key=\"listening\">\n\t\t\t\t<n8n-pulse>\n\t\t\t\t\t<NodeIcon :node-type=\"nodeType\" :size=\"40\"></NodeIcon>\n\t\t\t\t</n8n-pulse>\n\t\t\t\t<div v-if=\"isWebhookNode\">\n\t\t\t\t\t<n8n-text tag=\"div\" size=\"large\" color=\"text-dark\" class=\"mb-2xs\" bold>{{\n\t\t\t\t\t\t$locale.baseText('ndv.trigger.webhookNode.listening')\n\t\t\t\t\t}}</n8n-text>\n\t\t\t\t\t<div :class=\"[$style.shake, 'mb-xs']\">\n\t\t\t\t\t\t<n8n-text>\n\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t$locale.baseText('ndv.trigger.webhookNode.requestHint', {\n\t\t\t\t\t\t\t\t\tinterpolate: { type: webhookHttpMethod ?? '' },\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t</div>\n\t\t\t\t\t<CopyInput\n\t\t\t\t\t\t:value=\"webhookTestUrl\"\n\t\t\t\t\t\t:toast-title=\"$locale.baseText('ndv.trigger.copiedTestUrl')\"\n\t\t\t\t\t\tclass=\"mb-2xl\"\n\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\t:collapse=\"true\"\n\t\t\t\t\t\t:copy-button-text=\"$locale.baseText('generic.clickToCopy')\"\n\t\t\t\t\t\t@copy=\"onTestLinkCopied\"\n\t\t\t\t\t></CopyInput>\n\t\t\t\t\t<NodeExecuteButton\n\t\t\t\t\t\tdata-test-id=\"trigger-execute-button\"\n\t\t\t\t\t\t:node-name=\"nodeName\"\n\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\ttelemetry-source=\"inputs\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div v-else>\n\t\t\t\t\t<n8n-text tag=\"div\" size=\"large\" color=\"text-dark\" class=\"mb-2xs\" bold>{{\n\t\t\t\t\t\tlisteningTitle\n\t\t\t\t\t}}</n8n-text>\n\t\t\t\t\t<div :class=\"[$style.shake, 'mb-xs']\">\n\t\t\t\t\t\t<n8n-text tag=\"div\">\n\t\t\t\t\t\t\t{{ listeningHint }}\n\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-if=\"displayChatButton\">\n\t\t\t\t\t\t<n8n-button class=\"mb-xl\" @click=\"openWebhookUrl()\">\n\t\t\t\t\t\t\t{{ $locale.baseText('ndv.trigger.chatTrigger.openChat') }}\n\t\t\t\t\t\t</n8n-button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<NodeExecuteButton\n\t\t\t\t\t\tdata-test-id=\"trigger-execute-button\"\n\t\t\t\t\t\t:node-name=\"nodeName\"\n\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\ttelemetry-source=\"inputs\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-else key=\"default\">\n\t\t\t\t<div v-if=\"isActivelyPolling\" class=\"mb-xl\">\n\t\t\t\t\t<n8n-spinner type=\"ring\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div :class=\"$style.action\">\n\t\t\t\t\t<div :class=\"$style.header\">\n\t\t\t\t\t\t<n8n-heading v-if=\"header\" tag=\"h1\" bold>\n\t\t\t\t\t\t\t{{ header }}\n\t\t\t\t\t\t</n8n-heading>\n\t\t\t\t\t\t<n8n-text v-if=\"subheader\">\n\t\t\t\t\t\t\t<span v-text=\"subheader\" />\n\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<NodeExecuteButton\n\t\t\t\t\t\tdata-test-id=\"trigger-execute-button\"\n\t\t\t\t\t\t:node-name=\"nodeName\"\n\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\ttelemetry-source=\"inputs\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<n8n-text v-if=\"activationHint\" size=\"small\" @click=\"onLinkClick\">\n\t\t\t\t\t<span v-html=\"activationHint\"></span> \n\t\t\t\t</n8n-text>\n\t\t\t\t<n8n-link\n\t\t\t\t\tv-if=\"activationHint && executionsHelp\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t@click=\"expandExecutionHelp\"\n\t\t\t\t\t>{{ $locale.baseText('ndv.trigger.moreInfo') }}</n8n-link\n\t\t\t\t>\n\t\t\t\t<n8n-info-accordion\n\t\t\t\t\tv-if=\"executionsHelp\"\n\t\t\t\t\tref=\"help\"\n\t\t\t\t\t:class=\"$style.accordion\"\n\t\t\t\t\t:title=\"$locale.baseText('ndv.trigger.executionsHint.question')\"\n\t\t\t\t\t:description=\"executionsHelp\"\n\t\t\t\t\t:event-bus=\"executionsHelpEventBus\"\n\t\t\t\t\t@click:body=\"onLinkClick\"\n\t\t\t\t></n8n-info-accordion>\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport {\n\tCHAT_TRIGGER_NODE_TYPE,\n\tVIEWS,\n\tWEBHOOK_NODE_TYPE,\n\tWORKFLOW_SETTINGS_MODAL_KEY,\n\tFORM_TRIGGER_NODE_TYPE,\n} from '@/constants';\nimport type { INodeUi } from '@/Interface';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport { getTriggerNodeServiceName } from '@/utils/nodeTypesUtils';\nimport NodeExecuteButton from '@/components/NodeExecuteButton.vue';\nimport CopyInput from '@/components/CopyInput.vue';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { createEventBus } from 'n8n-design-system/utils';\nimport { useRouter } from 'vue-router';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\nimport { isTriggerPanelObject } from '@/utils/typeGuards';\n\nexport default defineComponent({\n\tname: 'TriggerPanel',\n\tcomponents: {\n\t\tNodeExecuteButton,\n\t\tCopyInput,\n\t\tNodeIcon,\n\t},\n\tprops: {\n\t\tnodeName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\temits: { activate: null, execute: null },\n\tsetup() {\n\t\tconst router = useRouter();\n\t\tconst workflowHelpers = useWorkflowHelpers({ router });\n\n\t\treturn {\n\t\t\tworkflowHelpers,\n\t\t};\n\t},\n\tdata: () => {\n\t\treturn {\n\t\t\texecutionsHelpEventBus: createEventBus(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNodeTypesStore, useNDVStore, useUIStore, useWorkflowsStore),\n\t\tnode(): INodeUi | null {\n\t\t\treturn this.workflowsStore.getNodeByName(this.nodeName);\n\t\t},\n\t\tnodeType(): INodeTypeDescription | null {\n\t\t\tif (this.node) {\n\t\t\t\treturn this.nodeTypesStore.getNodeType(this.node.type, this.node.typeVersion);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\ttriggerPanel() {\n\t\t\tconst panel = this.nodeType?.triggerPanel;\n\t\t\tif (isTriggerPanelObject(panel)) {\n\t\t\t\treturn panel;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\thideContent(): boolean {\n\t\t\tconst hideContent = this.triggerPanel?.hideContent;\n\t\t\tif (typeof hideContent === 'boolean') {\n\t\t\t\treturn hideContent;\n\t\t\t}\n\n\t\t\tif (this.node) {\n\t\t\t\tconst hideContentValue = this.workflowHelpers\n\t\t\t\t\t.getCurrentWorkflow()\n\t\t\t\t\t.expression.getSimpleParameterValue(this.node, hideContent, 'internal', {});\n\n\t\t\t\tif (typeof hideContentValue === 'boolean') {\n\t\t\t\t\treturn hideContentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\thasIssues(): boolean {\n\t\t\treturn Boolean(\n\t\t\t\tthis.node?.issues && (this.node.issues.parameters ?? this.node.issues.credentials),\n\t\t\t);\n\t\t},\n\t\tserviceName(): string {\n\t\t\tif (this.nodeType) {\n\t\t\t\treturn getTriggerNodeServiceName(this.nodeType);\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\tdisplayChatButton(): boolean {\n\t\t\treturn Boolean(\n\t\t\t\tthis.node &&\n\t\t\t\t\tthis.node.type === CHAT_TRIGGER_NODE_TYPE &&\n\t\t\t\t\tthis.node.parameters.mode !== 'webhook',\n\t\t\t);\n\t\t},\n\t\tisWebhookNode(): boolean {\n\t\t\treturn Boolean(this.node && this.node.type === WEBHOOK_NODE_TYPE);\n\t\t},\n\t\twebhookHttpMethod(): string | undefined {\n\t\t\tif (!this.node || !this.nodeType?.webhooks?.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst httpMethod = this.workflowHelpers.getWebhookExpressionValue(\n\t\t\t\tthis.nodeType.webhooks[0],\n\t\t\t\t'httpMethod',\n\t\t\t\tfalse,\n\t\t\t);\n\n\t\t\tif (Array.isArray(httpMethod)) {\n\t\t\t\treturn httpMethod.join(', ');\n\t\t\t}\n\n\t\t\treturn httpMethod;\n\t\t},\n\t\twebhookTestUrl(): string | undefined {\n\t\t\tif (!this.node || !this.nodeType?.webhooks?.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn this.workflowHelpers.getWebhookUrl(this.nodeType.webhooks[0], this.node, 'test');\n\t\t},\n\t\tisWebhookBasedNode(): boolean {\n\t\t\treturn Boolean(this.nodeType?.webhooks?.length);\n\t\t},\n\t\tisPollingNode(): boolean {\n\t\t\treturn Boolean(this.nodeType?.polling);\n\t\t},\n\t\tisListeningForEvents(): boolean {\n\t\t\tconst waitingOnWebhook = this.workflowsStore.executionWaitingForWebhook;\n\t\t\tconst executedNode = this.workflowsStore.executedNode;\n\t\t\treturn (\n\t\t\t\t!!this.node &&\n\t\t\t\t!this.node.disabled &&\n\t\t\t\tthis.isWebhookBasedNode &&\n\t\t\t\twaitingOnWebhook &&\n\t\t\t\t(!executedNode || executedNode === this.nodeName)\n\t\t\t);\n\t\t},\n\t\tworkflowRunning(): boolean {\n\t\t\treturn this.uiStore.isActionActive('workflowRunning');\n\t\t},\n\t\tisActivelyPolling(): boolean {\n\t\t\tconst triggeredNode = this.workflowsStore.executedNode;\n\n\t\t\treturn this.workflowRunning && this.isPollingNode && this.nodeName === triggeredNode;\n\t\t},\n\t\tisWorkflowActive(): boolean {\n\t\t\treturn this.workflowsStore.isWorkflowActive;\n\t\t},\n\t\tlisteningTitle(): string {\n\t\t\treturn this.nodeType?.name === FORM_TRIGGER_NODE_TYPE\n\t\t\t\t? this.$locale.baseText('ndv.trigger.webhookNode.formTrigger.listening')\n\t\t\t\t: this.$locale.baseText('ndv.trigger.webhookNode.listening');\n\t\t},\n\t\tlisteningHint(): string {\n\t\t\tswitch (this.nodeType?.name) {\n\t\t\t\tcase CHAT_TRIGGER_NODE_TYPE:\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.chatTrigger.serviceHint');\n\t\t\t\tcase FORM_TRIGGER_NODE_TYPE:\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.formTrigger.serviceHint');\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.serviceHint', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\theader(): string {\n\t\t\tconst serviceName = this.nodeType ? getTriggerNodeServiceName(this.nodeType) : '';\n\n\t\t\tif (this.isActivelyPolling) {\n\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.fetchingEvent');\n\t\t\t}\n\n\t\t\tif (this.triggerPanel?.header) {\n\t\t\t\treturn this.triggerPanel.header;\n\t\t\t}\n\n\t\t\tif (this.isWebhookBasedNode) {\n\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.action', {\n\t\t\t\t\tinterpolate: { name: serviceName },\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\tsubheader(): string {\n\t\t\tconst serviceName = this.nodeType ? getTriggerNodeServiceName(this.nodeType) : '';\n\t\t\tif (this.isActivelyPolling) {\n\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.fetchingHint', {\n\t\t\t\t\tinterpolate: { name: serviceName },\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\texecutionsHelp(): string {\n\t\t\tif (this.triggerPanel?.executionsHelp) {\n\t\t\t\tif (typeof this.triggerPanel.executionsHelp === 'string') {\n\t\t\t\t\treturn this.triggerPanel.executionsHelp;\n\t\t\t\t}\n\t\t\t\tif (!this.isWorkflowActive && this.triggerPanel.executionsHelp.inactive) {\n\t\t\t\t\treturn this.triggerPanel.executionsHelp.inactive;\n\t\t\t\t}\n\t\t\t\tif (this.isWorkflowActive && this.triggerPanel.executionsHelp.active) {\n\t\t\t\t\treturn this.triggerPanel.executionsHelp.active;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isWebhookBasedNode) {\n\t\t\t\tif (this.isWorkflowActive) {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.executionsHelp.active', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.executionsHelp.inactive', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isPollingNode) {\n\t\t\t\tif (this.isWorkflowActive) {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.executionsHelp.active', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.executionsHelp.inactive', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\tactivationHint(): string {\n\t\t\tif (this.isActivelyPolling || !this.triggerPanel) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (this.triggerPanel.activationHint) {\n\t\t\t\tif (typeof this.triggerPanel.activationHint === 'string') {\n\t\t\t\t\treturn this.triggerPanel.activationHint;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t!this.isWorkflowActive &&\n\t\t\t\t\ttypeof this.triggerPanel.activationHint.inactive === 'string'\n\t\t\t\t) {\n\t\t\t\t\treturn this.triggerPanel.activationHint.inactive;\n\t\t\t\t}\n\t\t\t\tif (this.isWorkflowActive && typeof this.triggerPanel.activationHint.active === 'string') {\n\t\t\t\t\treturn this.triggerPanel.activationHint.active;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isWebhookBasedNode) {\n\t\t\t\tif (this.isWorkflowActive) {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.activationHint.active', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.activationHint.inactive', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isPollingNode) {\n\t\t\t\tif (this.isWorkflowActive) {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.activationHint.active', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.activationHint.inactive', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t},\n\tmethods: {\n\t\texpandExecutionHelp() {\n\t\t\tif (this.$refs.help) {\n\t\t\t\tthis.executionsHelpEventBus.emit('expand');\n\t\t\t}\n\t\t},\n\t\topenWebhookUrl() {\n\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tpane: 'input',\n\t\t\t\ttype: 'open-chat',\n\t\t\t});\n\t\t\twindow.open(this.webhookTestUrl, '_blank', 'noreferrer');\n\t\t},\n\t\tonLinkClick(e: MouseEvent) {\n\t\t\tif (!e.target) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst target = e.target as HTMLElement;\n\t\t\tif (target.localName !== 'a') return;\n\n\t\t\tif (target.dataset?.key) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (target.dataset.key === 'activate') {\n\t\t\t\t\tthis.$emit('activate');\n\t\t\t\t} else if (target.dataset.key === 'executions') {\n\t\t\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\t\tpane: 'input',\n\t\t\t\t\t\ttype: 'open-executions-log',\n\t\t\t\t\t});\n\t\t\t\t\tthis.ndvStore.activeNodeName = null;\n\t\t\t\t\tvoid this.$router.push({\n\t\t\t\t\t\tname: VIEWS.EXECUTIONS,\n\t\t\t\t\t});\n\t\t\t\t} else if (target.dataset.key === 'settings') {\n\t\t\t\t\tthis.uiStore.openModal(WORKFLOW_SETTINGS_MODAL_KEY);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonTestLinkCopied() {\n\t\t\tthis.$telemetry.track('User copied webhook URL', {\n\t\t\t\tpane: 'inputs',\n\t\t\t\ttype: 'test url',\n\t\t\t});\n\t\t},\n\t\tonNodeExecute() {\n\t\t\tthis.$emit('execute');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: var(--color-background-base);\n\tdisplay: flex;\n\tflex-direction: column;\n\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: var(--spacing-s) var(--spacing-s) var(--spacing-xl) var(--spacing-s);\n\ttext-align: center;\n\toverflow: hidden;\n\n\t> * {\n\t\twidth: 100%;\n\t}\n}\n\n.header {\n\tmargin-bottom: var(--spacing-s);\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.action {\n\tmargin-bottom: var(--spacing-2xl);\n}\n\n.shake {\n\tanimation: shake 8s infinite;\n}\n\n@keyframes shake {\n\t90% {\n\t\ttransform: translateX(0);\n\t}\n\t92.5% {\n\t\ttransform: translateX(6px);\n\t}\n\t95% {\n\t\ttransform: translateX(-6px);\n\t}\n\t97.5% {\n\t\ttransform: translateX(6px);\n\t}\n\t100% {\n\t\ttransform: translateX(0);\n\t}\n}\n\n.accordion {\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\twidth: 100%;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.fade-enter-active,\n.fade-leave-active {\n\ttransition: opacity 200ms;\n}\n.fade-enter,\n.fade-leave-to {\n\topacity: 0;\n}\n</style>\n","<template>\n\t<el-dialog\n\t\t:model-value=\"(!!activeNode || renaming) && !isActiveStickyNode\"\n\t\t:before-close=\"close\"\n\t\t:show-close=\"false\"\n\t\tclass=\"data-display-wrapper ndv-wrapper\"\n\t\toverlay-class=\"data-display-overlay\"\n\t\twidth=\"auto\"\n\t\tappend-to-body\n\t\tdata-test-id=\"ndv\"\n\t\t:data-has-output-connection=\"hasOutputConnection\"\n\t>\n\t\t<n8n-tooltip\n\t\t\tplacement=\"bottom-start\"\n\t\t\t:visible=\"showTriggerWaitingWarning\"\n\t\t\t:disabled=\"!showTriggerWaitingWarning\"\n\t\t>\n\t\t\t<template #content>\n\t\t\t\t<div :class=\"$style.triggerWarning\">\n\t\t\t\t\t{{ $locale.baseText('ndv.backToCanvas.waitingForTriggerWarning') }}\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<div :class=\"$style.backToCanvas\" data-test-id=\"back-to-canvas\" @click=\"close\">\n\t\t\t\t<n8n-icon icon=\"arrow-left\" color=\"text-xlight\" size=\"medium\" />\n\t\t\t\t<n8n-text color=\"text-xlight\" size=\"medium\" :bold=\"true\">\n\t\t\t\t\t{{ $locale.baseText('ndv.backToCanvas') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</n8n-tooltip>\n\n\t\t<div\n\t\t\tv-if=\"activeNode\"\n\t\t\tref=\"container\"\n\t\t\tclass=\"data-display\"\n\t\t\ttabindex=\"0\"\n\t\t\t@keydown.capture=\"onKeyDown\"\n\t\t>\n\t\t\t<div :class=\"$style.modalBackground\" @click=\"close\"></div>\n\t\t\t<NDVDraggablePanels\n\t\t\t\t:key=\"activeNode.name\"\n\t\t\t\t:is-trigger-node=\"isTriggerNode\"\n\t\t\t\t:hide-input-and-output=\"activeNodeType === null\"\n\t\t\t\t:position=\"isTriggerNode && !showTriggerPanel ? 0 : undefined\"\n\t\t\t\t:is-draggable=\"!isTriggerNode\"\n\t\t\t\t:has-double-width=\"activeNodeType?.parameterPane === 'wide'\"\n\t\t\t\t:node-type=\"activeNodeType\"\n\t\t\t\t@switch-selected-node=\"onSwitchSelectedNode\"\n\t\t\t\t@open-connection-node-creator=\"onOpenConnectionNodeCreator\"\n\t\t\t\t@close=\"close\"\n\t\t\t\t@init=\"onPanelsInit\"\n\t\t\t\t@dragstart=\"onDragStart\"\n\t\t\t\t@dragend=\"onDragEnd\"\n\t\t\t>\n\t\t\t\t<template v-if=\"showTriggerPanel || !isTriggerNode\" #input>\n\t\t\t\t\t<TriggerPanel\n\t\t\t\t\t\tv-if=\"showTriggerPanel\"\n\t\t\t\t\t\t:node-name=\"activeNode.name\"\n\t\t\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t\t@activate=\"onWorkflowActivate\"\n\t\t\t\t\t/>\n\t\t\t\t\t<InputPanel\n\t\t\t\t\t\tv-else-if=\"!isTriggerNode\"\n\t\t\t\t\t\t:workflow=\"workflow\"\n\t\t\t\t\t\t:can-link-runs=\"canLinkRuns\"\n\t\t\t\t\t\t:run-index=\"inputRun\"\n\t\t\t\t\t\t:linked-runs=\"linked\"\n\t\t\t\t\t\t:current-node-name=\"inputNodeName\"\n\t\t\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t\t\t:read-only=\"readOnly || hasForeignCredential\"\n\t\t\t\t\t\t:is-production-execution-preview=\"isProductionExecutionPreview\"\n\t\t\t\t\t\t:is-pane-active=\"isInputPaneActive\"\n\t\t\t\t\t\t@activate-pane=\"activateInputPane\"\n\t\t\t\t\t\t@link-run=\"onLinkRunToInput\"\n\t\t\t\t\t\t@unlink-run=\"() => onUnlinkRun('input')\"\n\t\t\t\t\t\t@run-change=\"onRunInputIndexChange\"\n\t\t\t\t\t\t@open-settings=\"openSettings\"\n\t\t\t\t\t\t@change-input-node=\"onInputNodeChange\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t\t@table-mounted=\"onInputTableMounted\"\n\t\t\t\t\t\t@item-hover=\"onInputItemHover\"\n\t\t\t\t\t\t@search=\"onSearch\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<template #output>\n\t\t\t\t\t<OutputPanel\n\t\t\t\t\t\tdata-test-id=\"output-panel\"\n\t\t\t\t\t\t:workflow=\"workflow\"\n\t\t\t\t\t\t:can-link-runs=\"canLinkRuns\"\n\t\t\t\t\t\t:run-index=\"outputRun\"\n\t\t\t\t\t\t:linked-runs=\"linked\"\n\t\t\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t\t\t:is-read-only=\"readOnly || hasForeignCredential\"\n\t\t\t\t\t\t:block-u-i=\"blockUi && isTriggerNode && !isExecutableTriggerNode\"\n\t\t\t\t\t\t:is-production-execution-preview=\"isProductionExecutionPreview\"\n\t\t\t\t\t\t:is-pane-active=\"isOutputPaneActive\"\n\t\t\t\t\t\t@activate-pane=\"activateOutputPane\"\n\t\t\t\t\t\t@link-run=\"onLinkRunToOutput\"\n\t\t\t\t\t\t@unlink-run=\"() => onUnlinkRun('output')\"\n\t\t\t\t\t\t@run-change=\"onRunOutputIndexChange\"\n\t\t\t\t\t\t@open-settings=\"openSettings\"\n\t\t\t\t\t\t@table-mounted=\"onOutputTableMounted\"\n\t\t\t\t\t\t@item-hover=\"onOutputItemHover\"\n\t\t\t\t\t\t@search=\"onSearch\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<template #main>\n\t\t\t\t\t<NodeSettings\n\t\t\t\t\t\t:event-bus=\"settingsEventBus\"\n\t\t\t\t\t\t:dragging=\"isDragging\"\n\t\t\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t\t\t:node-type=\"activeNodeType\"\n\t\t\t\t\t\t:foreign-credentials=\"foreignCredentials\"\n\t\t\t\t\t\t:read-only=\"readOnly\"\n\t\t\t\t\t\t:block-u-i=\"blockUi && showTriggerPanel\"\n\t\t\t\t\t\t:executable=\"!readOnly\"\n\t\t\t\t\t\t:input-size=\"inputSize\"\n\t\t\t\t\t\t@value-changed=\"valueChanged\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t\t@stop-execution=\"onStopExecution\"\n\t\t\t\t\t\t@redraw-required=\"redrawRequired = true\"\n\t\t\t\t\t\t@activate=\"onWorkflowActivate\"\n\t\t\t\t\t\t@switch-selected-node=\"onSwitchSelectedNode\"\n\t\t\t\t\t\t@open-connection-node-creator=\"onOpenConnectionNodeCreator\"\n\t\t\t\t\t/>\n\t\t\t\t\t<a\n\t\t\t\t\t\tv-if=\"featureRequestUrl\"\n\t\t\t\t\t\t:class=\"$style.featureRequest\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t@click=\"onFeatureRequestClick\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<font-awesome-icon icon=\"lightbulb\" />\n\t\t\t\t\t\t{{ $locale.baseText('ndv.featureRequest') }}\n\t\t\t\t\t</a>\n\t\t\t\t</template>\n\t\t\t</NDVDraggablePanels>\n\t\t</div>\n\t</el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount, computed, watch } from 'vue';\nimport { createEventBus } from 'n8n-design-system/utils';\nimport type { IRunData, ConnectionTypes } from 'n8n-workflow';\nimport { jsonParse, NodeHelpers, NodeConnectionType } from 'n8n-workflow';\nimport type { IUpdateInformation, TargetItem } from '@/Interface';\n\nimport NodeSettings from '@/components/NodeSettings.vue';\nimport NDVDraggablePanels from './NDVDraggablePanels.vue';\n\nimport OutputPanel from './OutputPanel.vue';\nimport InputPanel from './InputPanel.vue';\nimport TriggerPanel from './TriggerPanel.vue';\nimport {\n\tBASE_NODE_SURVEY_URL,\n\tEnterpriseEditionFeature,\n\tEXECUTABLE_TRIGGER_NODE_TYPES,\n\tMODAL_CONFIRM,\n\tSTART_NODE_TYPE,\n\tSTICKY_NODE_TYPE,\n} from '@/constants';\nimport { useWorkflowActivate } from '@/composables/useWorkflowActivate';\nimport { dataPinningEventBus } from '@/event-bus';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useDeviceSupport } from 'n8n-design-system';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport { useMessage } from '@/composables/useMessage';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { usePinnedData } from '@/composables/usePinnedData';\nimport { useRouter } from 'vue-router';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useI18n } from '@/composables/useI18n';\nimport { storeToRefs } from 'pinia';\n\nconst emit = defineEmits([\n\t'saveKeyboardShortcut',\n\t'valueChanged',\n\t'nodeTypeSelected',\n\t'switchSelectedNode',\n\t'openConnectionNodeCreator',\n\t'redrawNode',\n\t'stopExecution',\n]);\n\nconst props = withDefaults(\n\tdefineProps<{\n\t\treadOnly?: boolean;\n\t\trenaming?: boolean;\n\t\tisProductionExecutionPreview?: boolean;\n\t}>(),\n\t{\n\t\tisProductionExecutionPreview: false,\n\t},\n);\n\nconst ndvStore = useNDVStore();\nconst externalHooks = useExternalHooks();\nconst nodeHelpers = useNodeHelpers();\nconst { activeNode } = storeToRefs(ndvStore);\nconst pinnedData = usePinnedData(activeNode);\nconst router = useRouter();\nconst workflowHelpers = useWorkflowHelpers({ router });\nconst workflowActivate = useWorkflowActivate();\nconst nodeTypesStore = useNodeTypesStore();\nconst uiStore = useUIStore();\nconst workflowsStore = useWorkflowsStore();\nconst settingsStore = useSettingsStore();\nconst deviceSupport = useDeviceSupport();\nconst telemetry = useTelemetry();\nconst i18n = useI18n();\nconst message = useMessage();\n\nconst settingsEventBus = createEventBus();\nconst redrawRequired = ref(false);\nconst runInputIndex = ref(-1);\nconst runOutputIndex = ref(-1);\nconst isLinkingEnabled = ref(true);\nconst selectedInput = ref<string | undefined>();\nconst triggerWaitingWarningEnabled = ref(false);\nconst isDragging = ref(false);\nconst mainPanelPosition = ref(0);\nconst pinDataDiscoveryTooltipVisible = ref(false);\nconst avgInputRowHeight = ref(0);\nconst avgOutputRowHeight = ref(0);\nconst isInputPaneActive = ref(false);\nconst isOutputPaneActive = ref(false);\nconst isPairedItemHoveringEnabled = ref(true);\n\n//computed\n\nconst pushRef = computed(() => ndvStore.pushRef);\n\nconst activeNodeType = computed(() => {\n\tif (activeNode.value) {\n\t\treturn nodeTypesStore.getNodeType(activeNode.value.type, activeNode.value.typeVersion);\n\t}\n\treturn null;\n});\n\nconst workflowRunning = computed(() => uiStore.isActionActive('workflowRunning'));\n\nconst showTriggerWaitingWarning = computed(\n\t() =>\n\t\ttriggerWaitingWarningEnabled.value &&\n\t\t!!activeNodeType.value &&\n\t\t!activeNodeType.value.group.includes('trigger') &&\n\t\tworkflowRunning.value &&\n\t\tworkflowsStore.executionWaitingForWebhook,\n);\n\nconst workflowRunData = computed(() => {\n\tif (workflowExecution.value === null) {\n\t\treturn null;\n\t}\n\n\tconst executionData = workflowExecution.value.data;\n\n\tif (executionData?.resultData) {\n\t\treturn executionData.resultData.runData;\n\t}\n\n\treturn null;\n});\n\nconst workflow = computed(() => workflowHelpers.getCurrentWorkflow());\n\nconst parentNodes = computed(() => {\n\tif (activeNode.value) {\n\t\treturn (\n\t\t\tworkflow.value.getParentNodesByDepth(activeNode.value.name, 1).map(({ name }) => name) || []\n\t\t);\n\t} else {\n\t\treturn [];\n\t}\n});\n\nconst parentNode = computed(() => {\n\tfor (const parentNodeName of parentNodes.value) {\n\t\tif (workflowsStore?.pinnedWorkflowData?.[parentNodeName]) {\n\t\t\treturn parentNodeName;\n\t\t}\n\n\t\tif (workflowRunData.value?.[parentNodeName]) {\n\t\t\treturn parentNodeName;\n\t\t}\n\t}\n\treturn parentNodes.value[0];\n});\n\nconst inputNodeName = computed<string | undefined>(() => {\n\treturn selectedInput.value || parentNode.value;\n});\n\nconst inputNode = computed(() => {\n\tif (inputNodeName.value) {\n\t\treturn workflowsStore.getNodeByName(inputNodeName.value);\n\t}\n\treturn null;\n});\n\nconst inputSize = computed(() => ndvStore.ndvInputDataWithPinnedData.length);\n\nconst isTriggerNode = computed(\n\t() =>\n\t\t!!activeNodeType.value &&\n\t\t(activeNodeType.value.group.includes('trigger') ||\n\t\t\tactiveNodeType.value.name === START_NODE_TYPE),\n);\n\nconst showTriggerPanel = computed(() => {\n\tconst override = !!activeNodeType.value?.triggerPanel;\n\tif (typeof activeNodeType.value?.triggerPanel === 'boolean') {\n\t\treturn override;\n\t}\n\n\tconst isWebhookBasedNode = !!activeNodeType.value?.webhooks?.length;\n\tconst isPollingNode = activeNodeType.value?.polling;\n\n\treturn (\n\t\t!props.readOnly && isTriggerNode.value && (isWebhookBasedNode || isPollingNode || override)\n\t);\n});\n\nconst hasOutputConnection = computed(() => {\n\tif (!activeNode.value) return false;\n\tconst outgoingConnections = workflowsStore.outgoingConnectionsByNodeName(activeNode.value.name);\n\n\t// Check if there's at-least one output connection\n\treturn (Object.values(outgoingConnections)?.[0]?.[0] ?? []).length > 0;\n});\n\nconst isExecutableTriggerNode = computed(() => {\n\tif (!activeNodeType.value) return false;\n\n\treturn EXECUTABLE_TRIGGER_NODE_TYPES.includes(activeNodeType.value.name);\n});\n\nconst isActiveStickyNode = computed(\n\t() => !!ndvStore.activeNode && ndvStore.activeNode.type === STICKY_NODE_TYPE,\n);\n\nconst workflowExecution = computed(() => workflowsStore.getWorkflowExecution);\n\nconst maxOutputRun = computed(() => {\n\tif (activeNode.value === null) {\n\t\treturn 0;\n\t}\n\n\tconst runData = workflowRunData.value;\n\n\tif (!runData?.[activeNode.value.name]) {\n\t\treturn 0;\n\t}\n\n\tif (runData[activeNode.value.name].length) {\n\t\treturn runData[activeNode.value.name].length - 1;\n\t}\n\n\treturn 0;\n});\n\nconst outputRun = computed(() =>\n\trunOutputIndex.value === -1\n\t\t? maxOutputRun.value\n\t\t: Math.min(runOutputIndex.value, maxOutputRun.value),\n);\n\nconst maxInputRun = computed(() => {\n\tif (inputNode.value === null || activeNode.value === null) {\n\t\treturn 0;\n\t}\n\n\tconst workflowNode = workflow.value.getNode(activeNode.value.name);\n\n\tif (!workflowNode || !activeNodeType.value) {\n\t\treturn 0;\n\t}\n\n\tconst outputs = NodeHelpers.getNodeOutputs(workflow.value, workflowNode, activeNodeType.value);\n\n\tlet node = inputNode.value;\n\n\tconst runData: IRunData | null = workflowRunData.value;\n\n\tif (outputs.some((output) => output !== NodeConnectionType.Main)) {\n\t\tnode = activeNode.value;\n\t}\n\n\tif (!node || !runData || !runData.hasOwnProperty(node.name)) {\n\t\treturn 0;\n\t}\n\n\tif (runData[node.name].length) {\n\t\treturn runData[node.name].length - 1;\n\t}\n\n\treturn 0;\n});\n\nconst inputRun = computed(() => {\n\tif (isLinkingEnabled.value && maxOutputRun.value === maxInputRun.value) {\n\t\treturn outputRun.value;\n\t}\n\tif (runInputIndex.value === -1) {\n\t\treturn maxInputRun.value;\n\t}\n\n\treturn Math.min(runInputIndex.value, maxInputRun.value);\n});\n\nconst canLinkRuns = computed(\n\t() => maxOutputRun.value > 0 && maxOutputRun.value === maxInputRun.value,\n);\n\nconst linked = computed(() => isLinkingEnabled.value && canLinkRuns.value);\n\nconst inputPanelMargin = computed(() => (isTriggerNode.value ? 0 : 80));\n\nconst featureRequestUrl = computed(() => {\n\tif (!activeNodeType.value) {\n\t\treturn '';\n\t}\n\treturn `${BASE_NODE_SURVEY_URL}${activeNodeType.value.name}`;\n});\n\nconst outputPanelEditMode = computed(() => ndvStore.outputPanelEditMode);\n\nconst isWorkflowRunning = computed(() => uiStore.isActionActive('workflowRunning'));\n\nconst isExecutionWaitingForWebhook = computed(() => workflowsStore.executionWaitingForWebhook);\n\nconst blockUi = computed(() => isWorkflowRunning.value || isExecutionWaitingForWebhook.value);\n\nconst foreignCredentials = computed(() => {\n\tconst credentials = activeNode.value?.credentials;\n\tconst usedCredentials = workflowsStore.usedCredentials;\n\n\tconst foreignCredentialsArray: string[] = [];\n\tif (credentials && settingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.Sharing)) {\n\t\tObject.values(credentials).forEach((credential) => {\n\t\t\tif (\n\t\t\t\tcredential.id &&\n\t\t\t\tusedCredentials[credential.id] &&\n\t\t\t\t!usedCredentials[credential.id].currentUserHasAccess\n\t\t\t) {\n\t\t\t\tforeignCredentialsArray.push(credential.id);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn foreignCredentialsArray;\n});\n\nconst hasForeignCredential = computed(() => foreignCredentials.value.length > 0);\n\n//methods\n\nconst setIsTooltipVisible = ({ isTooltipVisible }: { isTooltipVisible: boolean }) => {\n\tpinDataDiscoveryTooltipVisible.value = isTooltipVisible;\n};\n\nconst onKeyDown = (e: KeyboardEvent) => {\n\tif (e.key === 's' && deviceSupport.isCtrlKeyPressed(e)) {\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\n\t\tif (props.readOnly) return;\n\n\t\temit('saveKeyboardShortcut', e);\n\t}\n};\n\nconst onInputItemHover = (e: { itemIndex: number; outputIndex: number } | null) => {\n\tif (e === null || !inputNodeName.value || !isPairedItemHoveringEnabled.value) {\n\t\tndvStore.setHoveringItem(null);\n\t\treturn;\n\t}\n\n\tconst item = {\n\t\tnodeName: inputNodeName.value,\n\t\trunIndex: inputRun.value,\n\t\toutputIndex: e.outputIndex,\n\t\titemIndex: e.itemIndex,\n\t};\n\tndvStore.setHoveringItem(item);\n};\n\nconst onInputTableMounted = (e: { avgRowHeight: number }) => {\n\tavgInputRowHeight.value = e.avgRowHeight;\n};\n\nconst onWorkflowActivate = () => {\n\tndvStore.activeNodeName = null;\n\tsetTimeout(() => {\n\t\tvoid workflowActivate.activateCurrentWorkflow('ndv');\n\t}, 1000);\n};\n\nconst onOutputItemHover = (e: { itemIndex: number; outputIndex: number }) => {\n\tif (e === null || !activeNode.value || !isPairedItemHoveringEnabled.value) {\n\t\tndvStore.setHoveringItem(null);\n\t\treturn;\n\t}\n\n\tconst item: TargetItem = {\n\t\tnodeName: activeNode.value?.name,\n\t\trunIndex: outputRun.value,\n\t\toutputIndex: e.outputIndex,\n\t\titemIndex: e.itemIndex,\n\t};\n\tndvStore.setHoveringItem(item);\n};\n\nconst onFeatureRequestClick = () => {\n\twindow.open(featureRequestUrl.value, '_blank');\n\tif (activeNode.value) {\n\t\ttelemetry.track('User clicked ndv link', {\n\t\t\tnode_type: activeNode.value.type,\n\t\t\tworkflow_id: workflowsStore.workflowId,\n\t\t\tpush_ref: pushRef.value,\n\t\t\tpane: NodeConnectionType.Main,\n\t\t\ttype: 'i-wish-this-node-would',\n\t\t});\n\t}\n};\n\nconst onDragEnd = (e: { windowWidth: number; position: number }) => {\n\tisDragging.value = false;\n\ttelemetry.track('User moved parameters pane', {\n\t\t// example method for tracking\n\t\twindow_width: e.windowWidth,\n\t\tstart_position: mainPanelPosition.value,\n\t\tend_position: e.position,\n\t\tnode_type: activeNodeType.value ? activeNodeType.value.name : '',\n\t\tpush_ref: pushRef.value,\n\t\tworkflow_id: workflowsStore.workflowId,\n\t});\n\tmainPanelPosition.value = e.position;\n};\n\nconst onDragStart = (e: { position: number }) => {\n\tisDragging.value = true;\n\tmainPanelPosition.value = e.position;\n};\n\nconst onPanelsInit = (e: { position: number }) => {\n\tmainPanelPosition.value = e.position;\n};\n\nconst onLinkRunToOutput = () => {\n\tisLinkingEnabled.value = true;\n\ttrackLinking('output');\n};\n\nconst onUnlinkRun = (pane: string) => {\n\trunInputIndex.value = runOutputIndex.value;\n\tisLinkingEnabled.value = false;\n\ttrackLinking(pane);\n};\n\nconst onNodeExecute = () => {\n\tsetTimeout(() => {\n\t\tif (!activeNode.value || !workflowRunning.value) {\n\t\t\treturn;\n\t\t}\n\t\ttriggerWaitingWarningEnabled.value = true;\n\t}, 1000);\n};\n\nconst openSettings = () => {\n\tsettingsEventBus.emit('openSettings');\n};\n\nconst trackLinking = (pane: string) => {\n\ttelemetry.track('User changed ndv run linking', {\n\t\tnode_type: activeNodeType.value ? activeNodeType.value.name : '',\n\t\tpush_ref: pushRef.value,\n\t\tlinked: linked.value,\n\t\tpane,\n\t});\n};\n\nconst onLinkRunToInput = () => {\n\trunOutputIndex.value = runInputIndex.value;\n\tisLinkingEnabled.value = true;\n\ttrackLinking('input');\n};\n\nconst valueChanged = (parameterData: IUpdateInformation) => {\n\temit('valueChanged', parameterData);\n};\n\nconst nodeTypeSelected = (nodeTypeName: string) => {\n\temit('nodeTypeSelected', nodeTypeName);\n};\n\nconst onSwitchSelectedNode = (nodeTypeName: string) => {\n\temit('switchSelectedNode', nodeTypeName);\n};\n\nconst onOpenConnectionNodeCreator = (nodeTypeName: string, connectionType: ConnectionTypes) => {\n\temit('openConnectionNodeCreator', nodeTypeName, connectionType);\n};\n\nconst close = async () => {\n\tif (isDragging.value) {\n\t\treturn;\n\t}\n\n\tif (\n\t\tactiveNode.value &&\n\t\t(typeof activeNodeType.value?.outputs === 'string' ||\n\t\t\ttypeof activeNodeType.value?.inputs === 'string' ||\n\t\t\tredrawRequired.value)\n\t) {\n\t\tconst nodeName = activeNode.value.name;\n\t\tsetTimeout(() => {\n\t\t\temit('redrawNode', nodeName);\n\t\t}, 1);\n\t}\n\n\tif (outputPanelEditMode.value.enabled && activeNode.value) {\n\t\tconst shouldPinDataBeforeClosing = await message.confirm(\n\t\t\t'',\n\t\t\ti18n.baseText('ndv.pinData.beforeClosing.title'),\n\t\t\t{\n\t\t\t\tconfirmButtonText: i18n.baseText('ndv.pinData.beforeClosing.confirm'),\n\t\t\t\tcancelButtonText: i18n.baseText('ndv.pinData.beforeClosing.cancel'),\n\t\t\t},\n\t\t);\n\n\t\tif (shouldPinDataBeforeClosing === MODAL_CONFIRM) {\n\t\t\tconst { value } = outputPanelEditMode.value;\n\t\t\ttry {\n\t\t\t\tpinnedData.setData(jsonParse(value), 'on-ndv-close-modal');\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t}\n\n\t\tndvStore.setOutputPanelEditModeEnabled(false);\n\t}\n\n\tawait externalHooks.run('dataDisplay.nodeEditingFinished');\n\ttelemetry.track('User closed node modal', {\n\t\tnode_type: activeNodeType.value ? activeNodeType.value?.name : '',\n\t\tpush_ref: pushRef.value,\n\t\tworkflow_id: workflowsStore.workflowId,\n\t});\n\ttriggerWaitingWarningEnabled.value = false;\n\tndvStore.activeNodeName = null;\n\tndvStore.resetNDVPushRef();\n};\n\nconst trackRunChange = (run: number, pane: string) => {\n\ttelemetry.track('User changed ndv run dropdown', {\n\t\tpush_ref: pushRef.value,\n\t\trun_index: run,\n\t\tnode_type: activeNodeType.value ? activeNodeType.value?.name : '',\n\t\tpane,\n\t});\n};\n\nconst onRunOutputIndexChange = (run: number) => {\n\trunOutputIndex.value = run;\n\ttrackRunChange(run, 'output');\n};\n\nconst onRunInputIndexChange = (run: number) => {\n\trunInputIndex.value = run;\n\tif (linked.value) {\n\t\trunOutputIndex.value = run;\n\t}\n\ttrackRunChange(run, 'input');\n};\n\nconst onOutputTableMounted = (e: { avgRowHeight: number }) => {\n\tavgOutputRowHeight.value = e.avgRowHeight;\n};\n\nconst onInputNodeChange = (value: string, index: number) => {\n\trunInputIndex.value = -1;\n\tisLinkingEnabled.value = true;\n\tselectedInput.value = value;\n\n\ttelemetry.track('User changed ndv input dropdown', {\n\t\tnode_type: activeNode.value ? activeNode.value.type : '',\n\t\tpush_ref: pushRef.value,\n\t\tworkflow_id: workflowsStore.workflowId,\n\t\tselection_value: index,\n\t\tinput_node_type: inputNode.value ? inputNode.value.type : '',\n\t});\n};\n\nconst onStopExecution = () => {\n\temit('stopExecution');\n};\n\nconst activateInputPane = () => {\n\tisInputPaneActive.value = true;\n\tisOutputPaneActive.value = false;\n};\n\nconst activateOutputPane = () => {\n\tisInputPaneActive.value = false;\n\tisOutputPaneActive.value = true;\n};\n\nconst onSearch = (search: string) => {\n\tisPairedItemHoveringEnabled.value = !search;\n};\n\n//watchers\n\nwatch(\n\tactiveNode,\n\t(node, oldNode) => {\n\t\tif (node && node.name !== oldNode?.name && !isActiveStickyNode.value) {\n\t\t\trunInputIndex.value = -1;\n\t\t\trunOutputIndex.value = -1;\n\t\t\tisLinkingEnabled.value = true;\n\t\t\tselectedInput.value = undefined;\n\t\t\ttriggerWaitingWarningEnabled.value = false;\n\t\t\tavgOutputRowHeight.value = 0;\n\t\t\tavgInputRowHeight.value = 0;\n\n\t\t\tsetTimeout(() => ndvStore.setNDVPushRef(), 0);\n\n\t\t\tif (!activeNodeType.value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid externalHooks.run('dataDisplay.nodeTypeChanged', {\n\t\t\t\tnodeSubtitle: nodeHelpers.getNodeSubtitle(\n\t\t\t\t\tnode,\n\t\t\t\t\tactiveNodeType.value,\n\t\t\t\t\tworkflowHelpers.getCurrentWorkflow(),\n\t\t\t\t),\n\t\t\t});\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (activeNode.value) {\n\t\t\t\t\tconst outgoingConnections = workflowsStore.outgoingConnectionsByNodeName(\n\t\t\t\t\t\tactiveNode.value?.name,\n\t\t\t\t\t);\n\n\t\t\t\t\ttelemetry.track('User opened node modal', {\n\t\t\t\t\t\tnode_type: activeNodeType.value ? activeNodeType.value?.name : '',\n\t\t\t\t\t\tworkflow_id: workflowsStore.workflowId,\n\t\t\t\t\t\tpush_ref: pushRef.value,\n\t\t\t\t\t\tis_editable: !hasForeignCredential.value,\n\t\t\t\t\t\tparameters_pane_position: mainPanelPosition.value,\n\t\t\t\t\t\tinput_first_connector_runs: maxInputRun.value,\n\t\t\t\t\t\toutput_first_connector_runs: maxOutputRun.value,\n\t\t\t\t\t\tselected_view_inputs: isTriggerNode.value ? 'trigger' : ndvStore.inputPanelDisplayMode,\n\t\t\t\t\t\tselected_view_outputs: ndvStore.outputPanelDisplayMode,\n\t\t\t\t\t\tinput_connectors: parentNodes.value.length,\n\t\t\t\t\t\toutput_connectors: outgoingConnections?.main?.length,\n\t\t\t\t\t\tinput_displayed_run_index: inputRun.value,\n\t\t\t\t\t\toutput_displayed_run_index: outputRun.value,\n\t\t\t\t\t\tdata_pinning_tooltip_presented: pinDataDiscoveryTooltipVisible.value,\n\t\t\t\t\t\tinput_displayed_row_height_avg: avgInputRowHeight.value,\n\t\t\t\t\t\toutput_displayed_row_height_avg: avgOutputRowHeight.value,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, 2000); // wait for RunData to mount and present pindata discovery tooltip\n\t\t}\n\t\tif (window.top && !isActiveStickyNode.value) {\n\t\t\twindow.top.postMessage(JSON.stringify({ command: node ? 'openNDV' : 'closeNDV' }), '*');\n\t\t}\n\t},\n\t{ immediate: true },\n);\nwatch(maxOutputRun, () => {\n\trunOutputIndex.value = -1;\n});\n\nwatch(maxInputRun, () => {\n\trunInputIndex.value = -1;\n});\n\nwatch(inputNodeName, (nodeName) => {\n\tsetTimeout(() => {\n\t\tndvStore.setInputNodeName(nodeName);\n\t}, 0);\n});\n\nwatch(inputRun, (inputRun) => {\n\tsetTimeout(() => {\n\t\tndvStore.setInputRunIndex(inputRun);\n\t}, 0);\n});\n\nonMounted(() => {\n\tdataPinningEventBus.on('data-pinning-discovery', setIsTooltipVisible);\n});\n\nonBeforeUnmount(() => {\n\tdataPinningEventBus.off('data-pinning-discovery', setIsTooltipVisible);\n});\n</script>\n\n<style lang=\"scss\">\n// Hide notice(.ndv-connection-hint-notice) warning when node has output connection\n[data-has-output-connection='true'] .ndv-connection-hint-notice {\n\tdisplay: none;\n}\n.ndv-wrapper {\n\toverflow: visible;\n\tmargin-top: 0;\n}\n\n.data-display-wrapper {\n\theight: calc(100% - var(--spacing-l)) !important;\n\tmargin-top: var(--spacing-xl) !important;\n\tmargin-bottom: var(--spacing-xl) !important;\n\twidth: 100%;\n\tbackground: none;\n\tborder: none;\n\n\t.el-dialog__header {\n\t\tpadding: 0 !important;\n\t}\n\n\t.el-dialog__body {\n\t\tpadding: 0 !important;\n\t\theight: 100%;\n\t\tmin-height: 400px;\n\t\toverflow: visible;\n\t\tborder-radius: 8px;\n\t}\n}\n\n.data-display {\n\theight: 100%;\n\twidth: 100%;\n\tdisplay: flex;\n}\n</style>\n\n<style lang=\"scss\" module>\n$main-panel-width: 360px;\n\n.modalBackground {\n\theight: 100%;\n\twidth: 100%;\n}\n\n.triggerWarning {\n\tmax-width: 180px;\n}\n\n.backToCanvas {\n\tposition: fixed;\n\ttop: var(--spacing-xs);\n\tleft: var(--spacing-l);\n\n\tspan {\n\t\tcolor: var(--color-ndv-back-font);\n\t}\n\n\t&:hover {\n\t\tcursor: pointer;\n\t}\n\n\t> * {\n\t\tmargin-right: var(--spacing-3xs);\n\t}\n}\n\n@media (min-width: $breakpoint-lg) {\n\t.backToCanvas {\n\t\ttop: var(--spacing-xs);\n\t\tleft: var(--spacing-m);\n\t}\n}\n\n.featureRequest {\n\tposition: absolute;\n\tbottom: var(--spacing-4xs);\n\tleft: calc(100% + var(--spacing-s));\n\tcolor: var(--color-feature-request-font);\n\tfont-size: var(--font-size-2xs);\n\twhite-space: nowrap;\n\n\t* {\n\t\tmargin-right: var(--spacing-3xs);\n\t}\n}\n</style>\n"],"file":"assets/NodeDetailsView-CSnjluIR.js"}
|
|
1
|
+
{"version":3,"mappings":"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","names":["ndvEventBus","createEventBus","props","__props","emit","__emit","editName","ref","newName","input","editable","computed","onEdit","nextTick","onRename","externalHooks","useExternalHooks","ndvStore","useNDVStore","workflowsStore","useWorkflowsStore","i18n","useI18n","telemetry","useTelemetry","activeNode","isCommunityNode","nodeType","isCommunityPackageName","packageName","_a","documentationUrl","utmParams","primaryDocUrl","_d","_c","_b","NPM_PACKAGE_DOCS_BASE_URL","BUILTIN_NODES_DOCS_URL","options","COMMUNITY_NODES_INSTALLATION_DOCS_URL","onTabSelect","tab","NodeConnectionType","onTooltipClick","event","_sfc_main$k","defineComponent","router","useRouter","clipboard","useClipboard","workflowHelpers","useWorkflowHelpers","useToast","OPEN_URL_PANEL_TRIGGER_NODE_TYPES","PRODUCTION_ONLY_TRIGGER_NODE_TYPES","webhook","webhookData","CHAT_TRIGGER_NODE_TYPE","FORM_TRIGGER_NODE_TYPE","webhookUrl","method","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_7","_hoisted_8","_createElementVNode","_hoisted_11","_hoisted_12","visibleWebhookUrls","_ctx","_openBlock","isMinimized","_normalizeClass","_cache","$event","_component_font_awesome_icon","_createTextVNode","_toDisplayString","_createVNode","_withCtx","_createCommentVNode","_createElementBlock","_component_el_row","_component_el_col","showUrlFor","_component_n8n_radio_buttons","urlOptions","_Fragment","_renderList","index","_createBlock","_component_n8n_tooltip","getWebhookHttpMethod","_hoisted_9","copyWebhookUrl","getWebhookUrlDisplay","_hoisted_13","_hoisted_15","nodeTypesStore","useNodeTypesStore","nodeHelpers","useNodeHelpers","debounce","useDebounce","possibleConnections","expandedGroups","shouldShowNodeInputIssues","nodeData","workflow","nodeInputIssues","issues","connectedNodes","acc","connection","nodes","getINodesFromNames","getConnectionConfig","connectionType","c","isMultiConnection","connectionConfig","shouldShowConnectionTooltip","expandConnectionGroup","isExpanded","g","names","name","node","matchedNodeType","stringifiedIssues","NodeHelpers.nodeIssuesToString","hasInputIssues","isNodeInputConfiguration","getPossibleSubInputConnections","NodeHelpers.getNodeInputs","onNodeClick","nodeName","onPlusClick","connectionNodes","showNodeInputsIssues","watch","__expose","NODE_TEST_STEP_POPUP_COUNT_KEY","MAX_POPUP_COUNT","POPUP_UPDATE_DELAY","_sfc_main$i","pinnedData","usePinnedData","runWorkflow","stopCurrentExecution","useRunWorkflow","useMessage","mapStores","useUIStore","triggeredNode","MANUAL_TRIGGER_NODE_TYPE","WEBHOOK_NODE_TYPE","waitingOnWebhook","executedNode","error","count","now","nodeViewEventBus","shouldUnpinAndExecute","MODAL_CONFIRM","telemetryPayload","_resolveComponent","tooltipText","loading","disabled","disabledHint","buttonLabel","type","size","isListeningForEvents","isTriggerNode","$locale","_sfc_main$h","NodeTitle","NodeCredentials","ParameterInputList","NodeSettingsTabs","NodeWebhooks","NDVSubConnections","NodeExecuteButton","showMessage","useHistoryStore","useCredentialsStore","useWorkflowsEEStore","workflowNode","inputs","NodeHelpers.getConnectionTypes","shortNodeType","NodeHelpers.isSingleExecution","item","credential","nodeCredential","CUSTOM_NODES_DOCS_URL","MAIN_NODE_PANEL_WIDTH","importCurlEventBus","parameters","parameter","parameterName","value","nameParts","lastNamePart","isArray","lastNameParts","removedNodeValue","remainingNodeValues","tempValue","get","removedArrayNodeValue","remainingArrayNodeValues","set","deepCopy","updateInformation","RenameNodeCommand","parameterData","newValue","nodeNameBefore","sendData","nodeParameters","NodeHelpers.getNodeParameters","oldNodeParameters","parameterPath","parameterPathArray","path","data","unset","key","SHOULD_CLEAR_NODE_OUTPUTS","nodeParameterValues","updatedParameter","prop","displayOptions","showCondition","hideCondition","hasValidOptions","isINodePropertyCollectionList","isINodePropertiesList","option","isINodePropertyOptionsList","displayParameter","foundNodeSettings","nodeSetting","_hoisted_10","_withModifiers","_component_NodeTitle","isReadOnly","_component_NodeExecuteButton","outputPanelEditMode","executeButtonTooltip","onStopExecution","nodeValid","openPanel","pushRef","$style","_component_n8n_text","_component_i18n_t","onMissingNodeTextClick","_hoisted_6","onMissingNodeLearnMoreLinkClick","hasForeignCredential","_component_n8n_notice","_withDirectives","_component_NodeWebhooks","nodeValuesInitialized","parametersNoneSetting","_component_ParameterInputList","nodeValues","valueChanged","onParameterBlur","hiddenIssuesInputs","parametersSetting","nodeSettings","_component_NDVSubConnections","blockUI","_sfc_main$g","draggablePosition","activeElement","_sfc_render","$props","$setup","$data","$options","isDragging","_renderSlot","_Teleport","_normalizeStyle","draggingEl","_sfc_main$f","Draggable","onDragStart","onDragEnd","canMoveLeft","moveNodeDirection","direction","matchedDirectionNode","onKeyDown","e","matchingDirection","rootName","connectionGroups","tooltipPositionMapper","onMounted","onBeforeUnmount","SIDE_MARGIN","SIDE_PANELS_MARGIN","MIN_PANEL_WIDTH","PANEL_WIDTH","PANEL_WIDTH_LARGE","initialMainPanelWidth","_sfc_main$d","PanelDragButton","NDVFloatingNodes","callDebounced","supportedDirections","hasInput","outputPanelRelativeLeft","panelMinLeft","currentRelativeLeftDelta","multiplier","minRelativeWidth","windowWidth","isBelowMinLeft","isMaxRight","width","relativeWidth","mainPanelRelativeWidth","relativeLeft","mainPanelRelativeLeft","mainPanelRelativeRight","isMinLeft","isInputless","position","positionByName","px","x","relativeDistance","storedPanelWidthData","useStorage","LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH","parsedWidth","initialPosition","_component_NDVFloatingNodes","mainPanelStyles","relativeWidthToPx","mainPanelDimensions","onResizeDebounced","onResizeStart","onResizeEnd","hideInputAndOutput","isDraggable","canMoveRight","onDrag","sanitizeOptions","defaults","_sfc_main$c","sanitizeHtml","isLoading","embedSource","embedClass","id","binaryData","fileName","fileType","mimeType","isJSONData","isHTMLData","jsonParse","binaryUrl","fetchedData","workflowRunData","workflowExecution","executionData","binaryDataLocal","closeWindow","toast","rootStore","useRootStore","displayCause","MAX_DISPLAY_DATA_SIZE","n8nVersion","baseUrl","instanceType","hasManyInputItems","nodeDefaultName","prepareRawMessages","returnData","errorMessage","getErrorMessage","message","parts","part","parsed","nodeVersionTag","latestNodeVersion","prepareDescription","description","getErrorDescription","interpolate","parameterDisplayName","addItemIndexSuffix","itemIndexSuffix","isSubNodeError","isNonEmptyString","fullPath","params","getParameterName","pathParts","currentParameterName","arrayMatch","currentParameter","copyErrorDetails","errorInfo","errorDetails","n8nDetails","_e","_f","copySuccess","locale","visible","RunDataTable","defineAsyncComponent","__vitePreload","RunDataJson","RunDataSchema","RunDataHtml","RunDataSearch","_sfc_main$7","BinaryDataDisplay","NodeErrorView","JsonEditor","RunDataPinButton","toRef","MAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW","MAX_DISPLAY_ITEMS_AUTO_ALL","useSourceControlStore","DATA_PINNING_DOCS_URL","DATA_EDITING_DOCS_URL","schemaView","HTML_NODE_TYPE","hints","runData","taskData","offset","executionDataToJson","capitalize","branches","totalItemsCount","itemsCount","items","outputName","appendBranchWord","NODE_TYPES_EXCLUDED_FROM_OUTPUT_NAME_APPEND","parentNode","parentNodeData","newNode","prevNode","isEmpty","prevData","isEqual","newData","branchIndex","newSearch","NodeHelpers.getNodeOutputs","hint","location","whenToDisplay","executionHints","nodeHints","NodeHelpers.getNodeHints","itemIndex","pinDataDiscoveryFlag","LOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG","dataPinningEventBus","LOCAL_STORAGE_PIN_DATA_DISCOVERY_CANVAS_FLAG","origin","inputData","clearJsonKey","TEST_PIN_DATA","clearedValue","source","maxPage","pageSize","displayMode","previous","dataContainerRef","dataDisplay","i","itemsLabel","runIndex","outputIndex","json","searchInObject","rawInputData","pinOrLiveData","outputTypes","outputs","fileExtension","url","saveAs","bufferString","blob","d","outputConfiguration","isObject","jsonItems","byteSize","run","canPinData","_component_n8n_callout","dataPinningDocsUrl","_component_n8n_link","isReadOnlyRoute","binaryDataDisplayVisible","closeBinaryDataDisplay","buttons","_component_n8n_icon_button","editMode","_vShow","_component_RunDataPinButton","readOnlyEnv","isControlledPinDataTooltip","pinDataDiscoveryTooltipVisible","_component_n8n_button","extraControlsLocation","maxRunIndex","_component_n8n_select","_component_n8n_option","canLinkRuns","linkedRuns","showIOSearch","search","_component_RunDataSearch","paneType","isPaneActive","activatePane","maxOutputIndex","hasRunError","dataCount","isArtificialRecoveredEventItem","unfilteredDataCount","isExecuting","_component_n8n_spinner","executingMessage","_component_JsonEditor","_component_n8n_info_tip","dataEditingDocsUrl","_component_NodeErrorView","hasNodeRun","isPaneTypeInput","$slots","workflowRunErrorAsNodeError","noDataInBranchMessage","dataSizeInMB","showTooMuchData","jsonData","showIoSearchNoMatchContent","_Suspense","_component_RunDataTable","currentPageOffset","$emit","onDisplayModeChange","_component_RunDataJson","inputDataPage","_component_RunDataHtml","_component_RunDataSchema","mappingEnabled","binaryDataEntry","isViewable","displayBinaryData","isDownloadable","downloadBinaryData","isSchemaView","_component_el_pagination","_component_n8n_block_ui","_sfc_main$6","date","time","convertToDisplayDateComponents","hasPinData","runMetadata","OUTPUT_TYPE","_sfc_main$5","RunData","RunInfo","RunDataAi","storeToRefs","isSubNodeType","useNodeType","resultData","updatedAt","runAt","runDataRef","outputMode","_component_RunData","isNodeRunning","onRunIndexChange","onLinkRun","onUnlinkRun","_createSlots","hasAiMetadata","onUpdateOutputMode","runTaskData","_component_RunInfo","args","_component_RunDataAi","selectedInputNode","selectedInputNodeType","inputNodes","fullNode","isPresent","activeNodeType","isMultiInputNode","getMultipleNodesText","connectedInputs","inputIndex","title","truncated","subtitle","depth","multipleNodesText","onInputNodeChange","_sfc_main$2","WireMeUp","InputNodeSelect","toIgnore","START_NODE_TYPE","CRON_NODE_TYPE","INTERVAL_NODE_TYPE","output","executingNode","parent","val","curr","prev","mappedNode","isExecutingPrevious","connectedCurrentNodeOutputs","currentNodeDepth","isActiveNodeConfig","readOnly","currentNodeName","parentNodes","showDraggableHintWithDelay","onNodeExecute","_component_WireMeUp","isMappingMode","_resolveDynamicComponent","rootNodesParents","_sfc_main$1","CopyInput","NodeIcon","panel","isTriggerPanelObject","hideContent","hideContentValue","getTriggerNodeServiceName","httpMethod","serviceName","target","VIEWS","WORKFLOW_SETTINGS_MODAL_KEY","_Transition","_component_n8n_pulse","_component_NodeIcon","isWebhookNode","webhookHttpMethod","_component_CopyInput","onTestLinkCopied","listeningHint","displayChatButton","header","_component_n8n_heading","activationHint","executionsHelp","_component_n8n_info_accordion","executionsHelpEventBus","onLinkClick","workflowActivate","useWorkflowActivate","uiStore","settingsStore","useSettingsStore","deviceSupport","useDeviceSupport","settingsEventBus","redrawRequired","runInputIndex","runOutputIndex","isLinkingEnabled","selectedInput","triggerWaitingWarningEnabled","mainPanelPosition","avgInputRowHeight","avgOutputRowHeight","isInputPaneActive","isOutputPaneActive","isPairedItemHoveringEnabled","workflowRunning","showTriggerWaitingWarning","parentNodeName","inputNodeName","inputNode","inputSize","showTriggerPanel","override","isWebhookBasedNode","isPollingNode","hasOutputConnection","outgoingConnections","isExecutableTriggerNode","EXECUTABLE_TRIGGER_NODE_TYPES","isActiveStickyNode","STICKY_NODE_TYPE","maxOutputRun","outputRun","maxInputRun","inputRun","linked","featureRequestUrl","BASE_NODE_SURVEY_URL","isWorkflowRunning","isExecutionWaitingForWebhook","blockUi","foreignCredentials","credentials","usedCredentials","foreignCredentialsArray","EnterpriseEditionFeature","setIsTooltipVisible","isTooltipVisible","onInputItemHover","onInputTableMounted","onWorkflowActivate","onOutputItemHover","onFeatureRequestClick","onPanelsInit","onLinkRunToOutput","trackLinking","pane","openSettings","onLinkRunToInput","onSwitchSelectedNode","nodeTypeName","onOpenConnectionNodeCreator","close","trackRunChange","onRunOutputIndexChange","onRunInputIndexChange","onOutputTableMounted","activateInputPane","activateOutputPane","onSearch","oldNode"],"ignoreList":[],"sources":["../../src/event-bus/ndv.ts","../../src/components/NodeTitle.vue","../../src/components/NodeSettingsTabs.vue","../../src/components/NodeWebhooks.vue","../../src/components/NDVSubConnections.vue","../../src/components/NodeExecuteButton.vue","../../src/components/NodeSettings.vue","../../src/components/Draggable.vue","../../src/components/PanelDragButton.vue","../../src/components/NDVFloatingNodes.vue","../../src/components/NDVDraggablePanels.vue","../../src/components/RunDataHtml.vue","../../src/components/BinaryDataDisplayEmbed.vue","../../src/components/BinaryDataDisplay.vue","../../src/components/Error/NodeErrorView.vue","../../src/components/RunDataPinButton.vue","../../src/components/RunData.vue","../../src/components/RunInfo.vue","../../src/components/OutputPanel.vue","../../src/components/InputNodeSelect.vue","../../src/components/WireMeUp.vue","../../src/components/InputPanel.vue","../../src/components/TriggerPanel.vue","../../src/components/NodeDetailsView.vue"],"sourcesContent":["import { createEventBus } from 'n8n-design-system/utils';\n\nexport const ndvEventBus = createEventBus();\n","<template>\n\t<span :class=\"$style.container\" data-test-id=\"node-title-container\" @click=\"onEdit\">\n\t\t<span :class=\"$style.iconWrapper\">\n\t\t\t<NodeIcon :node-type=\"nodeType\" :size=\"18\" />\n\t\t</span>\n\t\t<n8n-popover placement=\"right\" width=\"200\" :visible=\"editName\" :disabled=\"!editable\">\n\t\t\t<div\n\t\t\t\t:class=\"$style.editContainer\"\n\t\t\t\t@keydown.enter=\"onRename\"\n\t\t\t\t@keydown.stop\n\t\t\t\t@keydown.esc=\"editName = false\"\n\t\t\t>\n\t\t\t\t<n8n-text :bold=\"true\" color=\"text-base\" tag=\"div\">{{\n\t\t\t\t\t$locale.baseText('ndv.title.renameNode')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-input ref=\"input\" v-model=\"newName\" size=\"small\" data-test-id=\"node-rename-input\" />\n\t\t\t\t<div :class=\"$style.editButtons\">\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t:label=\"$locale.baseText('ndv.title.cancel')\"\n\t\t\t\t\t\t@click=\"editName = false\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t:label=\"$locale.baseText('ndv.title.rename')\"\n\t\t\t\t\t\t@click=\"onRename\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<template #reference>\n\t\t\t\t<div :class=\"{ [$style.title]: true, [$style.hoverable]: editable }\">\n\t\t\t\t\t{{ modelValue }}\n\t\t\t\t\t<div :class=\"$style.editIconContainer\">\n\t\t\t\t\t\t<font-awesome-icon v-if=\"editable\" :class=\"$style.editIcon\" icon=\"pencil-alt\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</n8n-popover>\n\t</span>\n</template>\n\n<script setup lang=\"ts\">\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport { computed, nextTick, ref } from 'vue';\n\ntype Props = {\n\tmodelValue: string;\n\tnodeType?: INodeTypeDescription | null;\n\treadOnly?: boolean;\n};\n\nconst props = withDefaults(defineProps<Props>(), {\n\tmodelValue: '',\n\tnodeType: undefined,\n\treadOnly: false,\n});\nconst emit = defineEmits<{\n\t(event: 'update:model-value', value: string): void;\n}>();\nconst editName = ref(false);\nconst newName = ref('');\nconst input = ref<HTMLInputElement>();\n\nconst editable = computed(() => !props.readOnly && window === window.parent);\n\nasync function onEdit() {\n\tnewName.value = props.modelValue;\n\teditName.value = true;\n\tawait nextTick();\n\tif (input.value) {\n\t\tinput.value.focus();\n\t}\n}\n\nfunction onRename() {\n\tif (newName.value.trim() !== '') {\n\t\temit('update:model-value', newName.value.trim());\n\t}\n\n\teditName.value = false;\n}\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\tfont-weight: var(--font-weight-bold);\n\tdisplay: flex;\n\tfont-size: var(--font-size-m);\n\tline-height: var(--font-line-height-compact);\n\toverflow-wrap: anywhere;\n\tpadding-right: var(--spacing-s);\n\toverflow: hidden;\n}\n\n.title {\n\tmax-height: 100px;\n\tdisplay: -webkit-box;\n\t-webkit-line-clamp: 5;\n\t-webkit-box-orient: vertical;\n\tcolor: var(--color-text-dark);\n}\n\n.hoverable {\n\t&:hover {\n\t\tcursor: pointer;\n\t\t.editIcon {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n}\n\n.iconWrapper {\n\tdisplay: inline-flex;\n\tmargin-right: var(--spacing-2xs);\n}\n\n.editIcon {\n\tdisplay: none;\n\tfont-size: var(--font-size-xs);\n\tcolor: var(--color-text-base);\n\tposition: absolute;\n\tbottom: 0;\n}\n\n.editIconContainer {\n\tdisplay: inline-block;\n\tposition: relative;\n\twidth: 0;\n}\n\n.editButtons {\n\ttext-align: right;\n\tmargin-top: var(--spacing-s);\n\n\t> * {\n\t\tmargin-left: var(--spacing-4xs);\n\t}\n}\n\n.editContainer {\n\ttext-align: left;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-4xs);\n\t}\n}\n</style>\n","<template>\n\t<N8nTabs\n\t\t:options=\"options\"\n\t\t:model-value=\"modelValue\"\n\t\t@update:model-value=\"onTabSelect\"\n\t\t@tooltip-click=\"onTooltipClick\"\n\t/>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ITab } from '@/Interface';\nimport {\n\tBUILTIN_NODES_DOCS_URL,\n\tCOMMUNITY_NODES_INSTALLATION_DOCS_URL,\n\tNPM_PACKAGE_DOCS_BASE_URL,\n} from '@/constants';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport { NodeConnectionType } from 'n8n-workflow';\nimport { computed } from 'vue';\n\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useI18n } from '@/composables/useI18n';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { isCommunityPackageName } from '@/utils/nodeTypesUtils';\n\ntype Tab = 'settings' | 'params';\ntype Props = {\n\tmodelValue?: Tab;\n\tnodeType?: INodeTypeDescription | null;\n\tpushRef?: string;\n};\n\nconst props = withDefaults(defineProps<Props>(), {\n\tmodelValue: 'params',\n\tnodeType: undefined,\n\tpushRef: '',\n});\nconst emit = defineEmits<{\n\t(event: 'update:model-value', tab: Tab): void;\n}>();\n\nconst externalHooks = useExternalHooks();\nconst ndvStore = useNDVStore();\nconst workflowsStore = useWorkflowsStore();\nconst i18n = useI18n();\nconst telemetry = useTelemetry();\n\nconst activeNode = computed(() => ndvStore.activeNode);\n\nconst isCommunityNode = computed(() => {\n\tconst nodeType = props.nodeType;\n\tif (nodeType) {\n\t\treturn isCommunityPackageName(nodeType.name);\n\t}\n\treturn false;\n});\n\nconst packageName = computed(() => props.nodeType?.name.split('.')[0] ?? '');\n\nconst documentationUrl = computed(() => {\n\tconst nodeType = props.nodeType;\n\n\tif (!nodeType) {\n\t\treturn '';\n\t}\n\n\tif (nodeType.documentationUrl && nodeType.documentationUrl.startsWith('http')) {\n\t\treturn nodeType.documentationUrl;\n\t}\n\n\tconst utmParams = new URLSearchParams({\n\t\tutm_source: 'n8n_app',\n\t\tutm_medium: 'node_settings_modal-credential_link',\n\t\tutm_campaign: nodeType.name,\n\t});\n\n\t// Built-in node documentation available via its codex entry\n\tconst primaryDocUrl = nodeType.codex?.resources?.primaryDocumentation?.[0]?.url;\n\tif (primaryDocUrl) {\n\t\treturn `${primaryDocUrl}?${utmParams.toString()}`;\n\t}\n\n\tif (isCommunityNode.value) {\n\t\treturn `${NPM_PACKAGE_DOCS_BASE_URL}${packageName.value}`;\n\t}\n\n\t// Fallback to the root of the node documentation\n\treturn `${BUILTIN_NODES_DOCS_URL}?${utmParams.toString()}`;\n});\n\nconst options = computed<ITab[]>(() => {\n\tconst options: ITab[] = [\n\t\t{\n\t\t\tlabel: i18n.baseText('nodeSettings.parameters'),\n\t\t\tvalue: 'params',\n\t\t},\n\t\t{\n\t\t\tlabel: i18n.baseText('nodeSettings.settings'),\n\t\t\tvalue: 'settings',\n\t\t},\n\t];\n\n\tif (isCommunityNode.value) {\n\t\toptions.push({\n\t\t\ticon: 'cube',\n\t\t\tvalue: 'communityNode',\n\t\t\talign: 'right',\n\t\t\ttooltip: i18n.baseText('generic.communityNode.tooltip', {\n\t\t\t\tinterpolate: {\n\t\t\t\t\tdocUrl: COMMUNITY_NODES_INSTALLATION_DOCS_URL,\n\t\t\t\t\tpackageName: packageName.value,\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t}\n\n\tif (documentationUrl.value) {\n\t\toptions.push({\n\t\t\tlabel: i18n.baseText('nodeSettings.docs'),\n\t\t\tvalue: 'docs',\n\t\t\thref: documentationUrl.value,\n\t\t\talign: 'right',\n\t\t});\n\t}\n\n\treturn options;\n});\n\nfunction onTabSelect(tab: string) {\n\tif (tab === 'docs' && props.nodeType) {\n\t\tvoid externalHooks.run('dataDisplay.onDocumentationUrlClick', {\n\t\t\tnodeType: props.nodeType,\n\t\t\tdocumentationUrl: documentationUrl.value,\n\t\t});\n\n\t\ttelemetry.track('User clicked ndv link', {\n\t\t\tnode_type: activeNode.value?.type,\n\t\t\tworkflow_id: workflowsStore.workflowId,\n\t\t\tpush_ref: props.pushRef,\n\t\t\tpane: NodeConnectionType.Main,\n\t\t\ttype: 'docs',\n\t\t});\n\t}\n\n\tif (tab === 'settings' && props.nodeType) {\n\t\ttelemetry.track('User viewed node settings', {\n\t\t\tnode_type: props.nodeType.name,\n\t\t\tworkflow_id: workflowsStore.workflowId,\n\t\t});\n\t}\n\n\tif (tab === 'settings' || tab === 'params') {\n\t\temit('update:model-value', tab);\n\t}\n}\n\nfunction onTooltipClick(tab: string, event: MouseEvent) {\n\tif (tab === 'communityNode' && (event.target as Element).localName === 'a') {\n\t\ttelemetry.track('user clicked cnr docs link', { source: 'node details view' });\n\t}\n}\n</script>\n\n<style lang=\"scss\">\n#communityNode > div {\n\tcursor: auto;\n\tpadding-right: 0;\n\tpadding-left: 0;\n\n\t&:hover {\n\t\tcolor: unset;\n\t}\n}\n</style>\n","<template>\n\t<div v-if=\"webhooksNode.length && visibleWebhookUrls.length > 0\" class=\"webhooks\">\n\t\t<div\n\t\t\tclass=\"clickable headline\"\n\t\t\t:class=\"{ expanded: !isMinimized }\"\n\t\t\t:title=\"isMinimized ? baseText.clickToDisplay : baseText.clickToHide\"\n\t\t\t@click=\"isMinimized = !isMinimized\"\n\t\t>\n\t\t\t<font-awesome-icon icon=\"angle-right\" class=\"minimize-button minimize-icon\" />\n\t\t\t{{ baseText.toggleTitle }}\n\t\t</div>\n\t\t<el-collapse-transition>\n\t\t\t<div v-if=\"!isMinimized\" class=\"node-webhooks\">\n\t\t\t\t<div v-if=\"!isProductionOnly\" class=\"url-selection\">\n\t\t\t\t\t<el-row>\n\t\t\t\t\t\t<el-col :span=\"24\">\n\t\t\t\t\t\t\t<n8n-radio-buttons v-model=\"showUrlFor\" :options=\"urlOptions\" />\n\t\t\t\t\t\t</el-col>\n\t\t\t\t\t</el-row>\n\t\t\t\t</div>\n\n\t\t\t\t<n8n-tooltip\n\t\t\t\t\tv-for=\"(webhook, index) in visibleWebhookUrls\"\n\t\t\t\t\t:key=\"index\"\n\t\t\t\t\tclass=\"item\"\n\t\t\t\t\t:content=\"baseText.clickToCopy\"\n\t\t\t\t\tplacement=\"left\"\n\t\t\t\t>\n\t\t\t\t\t<div v-if=\"isWebhookMethodVisible(webhook)\" class=\"webhook-wrapper\">\n\t\t\t\t\t\t<div class=\"http-field\">\n\t\t\t\t\t\t\t<div class=\"http-method\">{{ getWebhookHttpMethod(webhook) }}<br /></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"url-field\">\n\t\t\t\t\t\t\t<div class=\"webhook-url left-ellipsis clickable\" @click=\"copyWebhookUrl(webhook)\">\n\t\t\t\t\t\t\t\t{{ getWebhookUrlDisplay(webhook) }}<br />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-else class=\"webhook-wrapper\">\n\t\t\t\t\t\t<div class=\"url-field-full-width\">\n\t\t\t\t\t\t\t<div class=\"webhook-url left-ellipsis clickable\" @click=\"copyWebhookUrl(webhook)\">\n\t\t\t\t\t\t\t\t{{ getWebhookUrlDisplay(webhook) }}<br />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</div>\n\t\t</el-collapse-transition>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { INodeTypeDescription, IWebhookDescription } from 'n8n-workflow';\nimport { defineComponent } from 'vue';\n\nimport { useToast } from '@/composables/useToast';\nimport {\n\tCHAT_TRIGGER_NODE_TYPE,\n\tFORM_TRIGGER_NODE_TYPE,\n\tOPEN_URL_PANEL_TRIGGER_NODE_TYPES,\n\tPRODUCTION_ONLY_TRIGGER_NODE_TYPES,\n} from '@/constants';\nimport { useClipboard } from '@/composables/useClipboard';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\nimport { useRouter } from 'vue-router';\n\nexport default defineComponent({\n\tname: 'NodeWebhooks',\n\tprops: [\n\t\t'node', // NodeUi\n\t\t'nodeType', // INodeTypeDescription\n\t],\n\tsetup() {\n\t\tconst router = useRouter();\n\t\tconst clipboard = useClipboard();\n\t\tconst workflowHelpers = useWorkflowHelpers({ router });\n\t\treturn {\n\t\t\tclipboard,\n\t\t\tworkflowHelpers,\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisMinimized: this.nodeType && !OPEN_URL_PANEL_TRIGGER_NODE_TYPES.includes(this.nodeType.name),\n\t\t\tshowUrlFor: 'test',\n\t\t};\n\t},\n\tcomputed: {\n\t\tisProductionOnly(): boolean {\n\t\t\treturn this.nodeType && PRODUCTION_ONLY_TRIGGER_NODE_TYPES.includes(this.nodeType.name);\n\t\t},\n\t\turlOptions(): Array<{ label: string; value: string }> {\n\t\t\treturn [\n\t\t\t\t...(this.isProductionOnly ? [] : [{ label: this.baseText.testUrl, value: 'test' }]),\n\t\t\t\t{\n\t\t\t\t\tlabel: this.baseText.productionUrl,\n\t\t\t\t\tvalue: 'production',\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\tvisibleWebhookUrls(): IWebhookDescription[] {\n\t\t\treturn this.webhooksNode.filter((webhook) => {\n\t\t\t\tif (typeof webhook.ndvHideUrl === 'string') {\n\t\t\t\t\treturn !this.workflowHelpers.getWebhookExpressionValue(webhook, 'ndvHideUrl');\n\t\t\t\t}\n\n\t\t\t\treturn !webhook.ndvHideUrl;\n\t\t\t});\n\t\t},\n\t\twebhooksNode(): IWebhookDescription[] {\n\t\t\tif (this.nodeType === null || this.nodeType.webhooks === undefined) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn (this.nodeType as INodeTypeDescription).webhooks!.filter(\n\t\t\t\t(webhookData) => webhookData.restartWebhook !== true,\n\t\t\t);\n\t\t},\n\t\tbaseText() {\n\t\t\tconst nodeType = this.nodeType.name;\n\t\t\tswitch (nodeType) {\n\t\t\t\tcase CHAT_TRIGGER_NODE_TYPE:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttoggleTitle: this.$locale.baseText('nodeWebhooks.webhookUrls.chatTrigger'),\n\t\t\t\t\t\tclickToDisplay: this.$locale.baseText(\n\t\t\t\t\t\t\t'nodeWebhooks.clickToDisplayWebhookUrls.formTrigger',\n\t\t\t\t\t\t),\n\t\t\t\t\t\tclickToHide: this.$locale.baseText('nodeWebhooks.clickToHideWebhookUrls.chatTrigger'),\n\t\t\t\t\t\tclickToCopy: this.$locale.baseText('nodeWebhooks.clickToCopyWebhookUrls.chatTrigger'),\n\t\t\t\t\t\ttestUrl: this.$locale.baseText('nodeWebhooks.testUrl'),\n\t\t\t\t\t\tproductionUrl: this.$locale.baseText('nodeWebhooks.productionUrl'),\n\t\t\t\t\t\tcopyTitle: this.$locale.baseText('nodeWebhooks.showMessage.title.chatTrigger'),\n\t\t\t\t\t\tcopyMessage: this.$locale.baseText('nodeWebhooks.showMessage.message.chatTrigger'),\n\t\t\t\t\t};\n\n\t\t\t\tcase FORM_TRIGGER_NODE_TYPE:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttoggleTitle: this.$locale.baseText('nodeWebhooks.webhookUrls.formTrigger'),\n\t\t\t\t\t\tclickToDisplay: this.$locale.baseText(\n\t\t\t\t\t\t\t'nodeWebhooks.clickToDisplayWebhookUrls.formTrigger',\n\t\t\t\t\t\t),\n\t\t\t\t\t\tclickToHide: this.$locale.baseText('nodeWebhooks.clickToHideWebhookUrls.formTrigger'),\n\t\t\t\t\t\tclickToCopy: this.$locale.baseText('nodeWebhooks.clickToCopyWebhookUrls.formTrigger'),\n\t\t\t\t\t\ttestUrl: this.$locale.baseText('nodeWebhooks.testUrl'),\n\t\t\t\t\t\tproductionUrl: this.$locale.baseText('nodeWebhooks.productionUrl'),\n\t\t\t\t\t\tcopyTitle: this.$locale.baseText('nodeWebhooks.showMessage.title.formTrigger'),\n\t\t\t\t\t\tcopyMessage: this.$locale.baseText('nodeWebhooks.showMessage.message.formTrigger'),\n\t\t\t\t\t};\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttoggleTitle: this.$locale.baseText('nodeWebhooks.webhookUrls'),\n\t\t\t\t\t\tclickToDisplay: this.$locale.baseText('nodeWebhooks.clickToDisplayWebhookUrls'),\n\t\t\t\t\t\tclickToHide: this.$locale.baseText('nodeWebhooks.clickToHideWebhookUrls'),\n\t\t\t\t\t\tclickToCopy: this.$locale.baseText('nodeWebhooks.clickToCopyWebhookUrls'),\n\t\t\t\t\t\ttestUrl: this.$locale.baseText('nodeWebhooks.testUrl'),\n\t\t\t\t\t\tproductionUrl: this.$locale.baseText('nodeWebhooks.productionUrl'),\n\t\t\t\t\t\tcopyTitle: this.$locale.baseText('nodeWebhooks.showMessage.title'),\n\t\t\t\t\t\tcopyMessage: undefined,\n\t\t\t\t\t};\n\t\t\t}\n\t\t},\n\t},\n\twatch: {\n\t\tnode() {\n\t\t\tthis.isMinimized = !OPEN_URL_PANEL_TRIGGER_NODE_TYPES.includes(this.nodeType.name);\n\t\t},\n\t},\n\tmethods: {\n\t\tcopyWebhookUrl(webhookData: IWebhookDescription): void {\n\t\t\tconst webhookUrl = this.getWebhookUrlDisplay(webhookData);\n\t\t\tvoid this.clipboard.copy(webhookUrl);\n\n\t\t\tthis.showMessage({\n\t\t\t\ttitle: this.baseText.copyTitle,\n\t\t\t\tmessage: this.baseText.copyMessage,\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t\tthis.$telemetry.track('User copied webhook URL', {\n\t\t\t\tpane: 'parameters',\n\t\t\t\ttype: `${this.showUrlFor} url`,\n\t\t\t});\n\t\t},\n\t\tgetWebhookUrlDisplay(webhookData: IWebhookDescription): string {\n\t\t\tif (this.node) {\n\t\t\t\treturn this.workflowHelpers.getWebhookUrl(\n\t\t\t\t\twebhookData,\n\t\t\t\t\tthis.node,\n\t\t\t\t\tthis.isProductionOnly ? 'production' : this.showUrlFor,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn '';\n\t\t},\n\t\tisWebhookMethodVisible(webhook: IWebhookDescription): boolean {\n\t\t\ttry {\n\t\t\t\tconst method = this.workflowHelpers.getWebhookExpressionValue(webhook, 'httpMethod', false);\n\t\t\t\tif (Array.isArray(method) && method.length !== 1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} catch (error) {}\n\n\t\t\tif (typeof webhook.ndvHideMethod === 'string') {\n\t\t\t\treturn !this.workflowHelpers.getWebhookExpressionValue(webhook, 'ndvHideMethod');\n\t\t\t}\n\n\t\t\treturn !webhook.ndvHideMethod;\n\t\t},\n\n\t\tgetWebhookHttpMethod(webhook: IWebhookDescription): string {\n\t\t\tconst method = this.workflowHelpers.getWebhookExpressionValue(webhook, 'httpMethod', false);\n\t\t\tif (Array.isArray(method)) {\n\t\t\t\treturn method[0];\n\t\t\t}\n\t\t\treturn method;\n\t\t},\n\t},\n});\n</script>\n\n<style scoped lang=\"scss\">\n.webhooks {\n\tpadding-bottom: var(--spacing-xs);\n\tmargin: var(--spacing-xs) 0;\n\tborder-bottom: 1px solid var(--color-text-lighter);\n\n\t.headline {\n\t\tcolor: $color-primary;\n\t\tfont-weight: 600;\n\t\tfont-size: var(--font-size-2xs);\n\t}\n}\n\n.http-field {\n\tposition: absolute;\n\twidth: 50px;\n\tdisplay: inline-block;\n\ttop: calc(50% - 8px);\n}\n\n.http-method {\n\tbackground-color: var(--color-foreground-xdark);\n\twidth: 40px;\n\theight: 16px;\n\tline-height: 16px;\n\tmargin-left: 5px;\n\ttext-align: center;\n\tborder-radius: 2px;\n\tfont-size: var(--font-size-2xs);\n\tfont-weight: var(--font-weight-bold);\n\tcolor: var(--color-foreground-xlight);\n}\n\n.minimize-icon {\n\tfont-size: 1.3em;\n\tmargin-right: 0.5em;\n}\n\n.mode-selection-headline {\n\tline-height: 1.8em;\n}\n\n.node-webhooks {\n\tmargin-left: 1em;\n}\n\n.url-field {\n\tdisplay: inline-block;\n\twidth: calc(100% - 60px);\n\tmargin-left: 55px;\n}\n.url-field-full-width {\n\tdisplay: inline-block;\n\tmargin: 5px 10px;\n}\n\n.url-selection {\n\tmargin-top: var(--spacing-xs);\n}\n\n.minimize-button {\n\tdisplay: inline-block;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-duration: 0.5s;\n\t-o-transition-duration: 0.5s;\n\ttransition-duration: 0.5s;\n\n\t-webkit-transition-property: -webkit-transform;\n\t-moz-transition-property: -moz-transform;\n\t-o-transition-property: -o-transform;\n\ttransition-property: transform;\n}\n.expanded .minimize-button {\n\t-webkit-transform: rotate(90deg);\n\t-moz-transform: rotate(90deg);\n\t-o-transform: rotate(90deg);\n\ttransform: rotate(90deg);\n}\n\n.webhook-url {\n\tposition: relative;\n\ttop: 0;\n\twidth: 100%;\n\tfont-size: var(--font-size-2xs);\n\twhite-space: normal;\n\toverflow: visible;\n\ttext-overflow: initial;\n\tcolor: var(--color-text-dark);\n\ttext-align: left;\n\tdirection: ltr;\n\tword-break: break-all;\n}\n\n.webhook-wrapper {\n\tline-height: 1.5;\n\tposition: relative;\n\tmargin-top: var(--spacing-xs);\n\tbackground-color: var(--color-foreground-xlight);\n\tborder-radius: 3px;\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<div\n\t\t\t:class=\"$style.connections\"\n\t\t\t:style=\"`--possible-connections: ${possibleConnections.length}`\"\n\t\t>\n\t\t\t<div\n\t\t\t\tv-for=\"connection in possibleConnections\"\n\t\t\t\t:key=\"connection.type\"\n\t\t\t\t:data-test-id=\"`subnode-connection-group-${connection.type}`\"\n\t\t\t>\n\t\t\t\t<div :class=\"$style.connectionType\">\n\t\t\t\t\t<span\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t[$style.connectionLabel]: true,\n\t\t\t\t\t\t\t[$style.hasIssues]: hasInputIssues(connection.type),\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\tv-text=\"`${connection.displayName}${connection.required ? ' *' : ''}`\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-on-click-outside=\"() => expandConnectionGroup(connection.type, false)\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t[$style.connectedNodesWrapper]: true,\n\t\t\t\t\t\t\t[$style.connectedNodesWrapperExpanded]: expandedGroups.includes(connection.type),\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:style=\"`--nodes-length: ${connectedNodes[connection.type].length}`\"\n\t\t\t\t\t\t@click=\"expandConnectionGroup(connection.type, true)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"\n\t\t\t\t\t\t\t\tconnectedNodes[connection.type].length >= 1 ? connection.maxConnections !== 1 : true\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\t[$style.plusButton]: true,\n\t\t\t\t\t\t\t\t[$style.hasIssues]: hasInputIssues(connection.type),\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t@click=\"onPlusClick(connection.type)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<n8n-tooltip\n\t\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\t\t:teleported=\"true\"\n\t\t\t\t\t\t\t\t:offset=\"10\"\n\t\t\t\t\t\t\t\t:show-after=\"300\"\n\t\t\t\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t\t\t\tshouldShowConnectionTooltip(connection.type) &&\n\t\t\t\t\t\t\t\t\tconnectedNodes[connection.type].length >= 1\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t\tAdd {{ connection.displayName }}\n\t\t\t\t\t\t\t\t\t<template v-if=\"hasInputIssues(connection.type)\">\n\t\t\t\t\t\t\t\t\t\t<TitledList\n\t\t\t\t\t\t\t\t\t\t\t:title=\"`${$locale.baseText('node.issues')}:`\"\n\t\t\t\t\t\t\t\t\t\t\t:items=\"nodeInputIssues[connection.type]\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t<n8n-icon-button\n\t\t\t\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\t\t\t\ticon=\"plus\"\n\t\t\t\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t\t\t\t:data-test-id=\"`add-subnode-${connection.type}`\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"connectedNodes[connection.type].length > 0\"\n\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\t[$style.connectedNodes]: true,\n\t\t\t\t\t\t\t\t[$style.connectedNodesMultiple]: connectedNodes[connection.type].length > 1,\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tv-for=\"(node, index) in connectedNodes[connection.type]\"\n\t\t\t\t\t\t\t\t:key=\"node.node.name\"\n\t\t\t\t\t\t\t\t:class=\"{ [$style.nodeWrapper]: true, [$style.hasIssues]: node.issues }\"\n\t\t\t\t\t\t\t\tdata-test-id=\"floating-subnode\"\n\t\t\t\t\t\t\t\t:data-node-name=\"node.node.name\"\n\t\t\t\t\t\t\t\t:style=\"`--node-index: ${index}`\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<n8n-tooltip\n\t\t\t\t\t\t\t\t\t:key=\"node.node.name\"\n\t\t\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\t\t\t:teleported=\"true\"\n\t\t\t\t\t\t\t\t\t:offset=\"10\"\n\t\t\t\t\t\t\t\t\t:show-after=\"300\"\n\t\t\t\t\t\t\t\t\t:disabled=\"shouldShowConnectionTooltip(connection.type)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t\t\t{{ node.node.name }}\n\t\t\t\t\t\t\t\t\t\t<template v-if=\"node.issues\">\n\t\t\t\t\t\t\t\t\t\t\t<TitledList\n\t\t\t\t\t\t\t\t\t\t\t\t:title=\"`${$locale.baseText('node.issues')}:`\"\n\t\t\t\t\t\t\t\t\t\t\t\t:items=\"node.issues\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t</template>\n\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t:class=\"$style.connectedNode\"\n\t\t\t\t\t\t\t\t\t\t@click=\"onNodeClick(node.node.name, connection.type)\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<NodeIcon\n\t\t\t\t\t\t\t\t\t\t\t:node-type=\"node.nodeType\"\n\t\t\t\t\t\t\t\t\t\t\t:node-name=\"node.node.name\"\n\t\t\t\t\t\t\t\t\t\t\ttooltip-position=\"top\"\n\t\t\t\t\t\t\t\t\t\t\t:size=\"20\"\n\t\t\t\t\t\t\t\t\t\t\tcircle\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { INodeUi } from '@/Interface';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { computed, ref, watch } from 'vue';\nimport { NodeHelpers } from 'n8n-workflow';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport TitledList from '@/components/TitledList.vue';\nimport type { ConnectionTypes, INodeInputConfiguration, INodeTypeDescription } from 'n8n-workflow';\nimport { useDebounce } from '@/composables/useDebounce';\n\ninterface Props {\n\trootNode: INodeUi;\n}\n\nconst props = defineProps<Props>();\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst nodeHelpers = useNodeHelpers();\nconst { debounce } = useDebounce();\nconst emit = defineEmits(['switchSelectedNode', 'openConnectionNodeCreator']);\n\ninterface NodeConfig {\n\tnode: INodeUi;\n\tnodeType: INodeTypeDescription;\n\tissues: string[];\n}\n\nconst possibleConnections = ref<INodeInputConfiguration[]>([]);\n\nconst expandedGroups = ref<ConnectionTypes[]>([]);\nconst shouldShowNodeInputIssues = ref(false);\n\nconst nodeType = computed(() =>\n\tnodeTypesStore.getNodeType(props.rootNode.type, props.rootNode.typeVersion),\n);\n\nconst nodeData = computed(() => workflowsStore.getNodeByName(props.rootNode.name));\n\nconst workflow = computed(() => workflowsStore.getCurrentWorkflow());\n\nconst nodeInputIssues = computed(() => {\n\tconst issues = nodeHelpers.getNodeIssues(nodeType.value, props.rootNode, workflow.value, [\n\t\t'typeUnknown',\n\t\t'parameters',\n\t\t'credentials',\n\t\t'execution',\n\t]);\n\treturn issues?.input ?? {};\n});\n\nconst connectedNodes = computed<Record<ConnectionTypes, NodeConfig[]>>(() => {\n\treturn possibleConnections.value.reduce(\n\t\t(acc, connection) => {\n\t\t\tconst nodes = getINodesFromNames(\n\t\t\t\tworkflow.value.getParentNodes(props.rootNode.name, connection.type),\n\t\t\t);\n\t\t\treturn { ...acc, [connection.type]: nodes };\n\t\t},\n\t\t{} as Record<ConnectionTypes, NodeConfig[]>,\n\t);\n});\n\nfunction getConnectionConfig(connectionType: ConnectionTypes) {\n\treturn possibleConnections.value.find((c) => c.type === connectionType);\n}\n\nfunction isMultiConnection(connectionType: ConnectionTypes) {\n\tconst connectionConfig = getConnectionConfig(connectionType);\n\treturn connectionConfig?.maxConnections !== 1;\n}\n\nfunction shouldShowConnectionTooltip(connectionType: ConnectionTypes) {\n\treturn isMultiConnection(connectionType) && !expandedGroups.value.includes(connectionType);\n}\n\nfunction expandConnectionGroup(connectionType: ConnectionTypes, isExpanded: boolean) {\n\t// If the connection is a single connection, we don't need to expand the group\n\tif (!isMultiConnection(connectionType)) {\n\t\treturn;\n\t}\n\n\tif (isExpanded) {\n\t\texpandedGroups.value = [...expandedGroups.value, connectionType];\n\t} else {\n\t\texpandedGroups.value = expandedGroups.value.filter((g) => g !== connectionType);\n\t}\n}\n\nfunction getINodesFromNames(names: string[]): NodeConfig[] {\n\treturn names\n\t\t.map((name) => {\n\t\t\tconst node = workflowsStore.getNodeByName(name);\n\t\t\tif (node) {\n\t\t\t\tconst matchedNodeType = nodeTypesStore.getNodeType(node.type);\n\t\t\t\tif (matchedNodeType) {\n\t\t\t\t\tconst issues = nodeHelpers.getNodeIssues(matchedNodeType, node, workflow.value);\n\t\t\t\t\tconst stringifiedIssues = issues ? NodeHelpers.nodeIssuesToString(issues, node) : '';\n\t\t\t\t\treturn { node, nodeType: matchedNodeType, issues: stringifiedIssues };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t})\n\t\t.filter((n): n is NodeConfig => n !== null);\n}\n\nfunction hasInputIssues(connectionType: ConnectionTypes) {\n\treturn (\n\t\tshouldShowNodeInputIssues.value && (nodeInputIssues.value[connectionType] ?? []).length > 0\n\t);\n}\n\nfunction isNodeInputConfiguration(\n\tconnectionConfig: ConnectionTypes | INodeInputConfiguration,\n): connectionConfig is INodeInputConfiguration {\n\tif (typeof connectionConfig === 'string') return false;\n\n\treturn 'type' in connectionConfig;\n}\n\nfunction getPossibleSubInputConnections(): INodeInputConfiguration[] {\n\tif (!nodeType.value || !props.rootNode) return [];\n\n\tconst inputs = NodeHelpers.getNodeInputs(workflow.value, props.rootNode, nodeType.value);\n\n\tconst nonMainInputs = inputs.filter((input): input is INodeInputConfiguration => {\n\t\tif (!isNodeInputConfiguration(input)) return false;\n\n\t\treturn input.type !== 'main';\n\t});\n\n\treturn nonMainInputs;\n}\n\nfunction onNodeClick(nodeName: string, connectionType: ConnectionTypes) {\n\tif (isMultiConnection(connectionType) && !expandedGroups.value.includes(connectionType)) {\n\t\texpandConnectionGroup(connectionType, true);\n\t\treturn;\n\t}\n\n\temit('switchSelectedNode', nodeName);\n}\n\nfunction onPlusClick(connectionType: ConnectionTypes) {\n\tconst connectionNodes = connectedNodes.value[connectionType];\n\tif (\n\t\tisMultiConnection(connectionType) &&\n\t\t!expandedGroups.value.includes(connectionType) &&\n\t\tconnectionNodes.length >= 1\n\t) {\n\t\texpandConnectionGroup(connectionType, true);\n\t\treturn;\n\t}\n\n\temit('openConnectionNodeCreator', props.rootNode.name, connectionType);\n}\n\nfunction showNodeInputsIssues() {\n\tshouldShowNodeInputIssues.value = false;\n\t// Reset animation\n\tsetTimeout(() => {\n\t\tshouldShowNodeInputIssues.value = true;\n\t}, 0);\n}\n\nwatch(\n\tnodeData,\n\tdebounce(\n\t\t() =>\n\t\t\tsetTimeout(() => {\n\t\t\t\texpandedGroups.value = [];\n\t\t\t\tpossibleConnections.value = getPossibleSubInputConnections();\n\t\t\t}, 0),\n\t\t{ debounceTime: 1000 },\n\t),\n\t{ immediate: true },\n);\n\ndefineExpose({\n\tshowNodeInputsIssues,\n});\n</script>\n\n<style lang=\"scss\" module>\n@keyframes horizontal-shake {\n\t0% {\n\t\ttransform: translateX(0);\n\t}\n\t25% {\n\t\ttransform: translateX(5px);\n\t}\n\t50% {\n\t\ttransform: translateX(-5px);\n\t}\n\t75% {\n\t\ttransform: translateX(5px);\n\t}\n\t100% {\n\t\ttransform: translateX(0);\n\t}\n}\n.container {\n\t--node-size: 45px;\n\t--plus-button-size: 30px;\n\t--animation-duration: 150ms;\n\t--collapsed-offset: 10px;\n\tpadding-top: calc(var(--node-size) + var(--spacing-3xs));\n}\n.connections {\n\t// Make sure container has matching height if there's no connections\n\t// since the plus button is absolutely positioned\n\tmin-height: calc(var(--node-size) + var(--spacing-m));\n\tposition: absolute;\n\tbottom: calc((var(--node-size) / 2) * -1);\n\tleft: 0;\n\tright: 0;\n\tuser-select: none;\n\tjustify-content: space-between;\n\tdisplay: grid;\n\tgrid-template-columns: repeat(var(--possible-connections), 1fr);\n}\n.connectionType {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\ttransition: all calc((var(--animation-duration) - 50ms)) ease;\n}\n.connectionLabel {\n\tmargin-bottom: var(--spacing-2xs);\n\tfont-size: var(--font-size-2xs);\n\tuser-select: none;\n\ttext-wrap: nowrap;\n\n\t&.hasIssues {\n\t\tcolor: var(--color-danger);\n\t}\n}\n.connectedNodesWrapper {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: space-between;\n\tposition: relative;\n}\n.plusButton {\n\ttransition: all var(--animation-duration) ease;\n\tposition: absolute;\n\ttop: var(--spacing-2xs);\n\n\t&.hasIssues {\n\t\tanimation: horizontal-shake 500ms;\n\t\tbutton {\n\t\t\t--button-font-color: var(--color-danger);\n\t\t\t--button-border-color: var(--color-danger);\n\t\t}\n\t}\n\n\t&:not(:last-child) {\n\t\tz-index: 1;\n\t\tright: 100%;\n\t\tmargin-right: calc((var(--plus-button-size) * -1) * 0.9);\n\t\tpointer-events: none;\n\n\t\t.connectedNodesWrapperExpanded & {\n\t\t\t// left: 100%;\n\t\t\tmargin-right: var(--spacing-2xs);\n\t\t\topacity: 1;\n\t\t\tpointer-events: all;\n\t\t}\n\t}\n}\n\n.connectedNodesMultiple {\n\ttransition: all var(--animation-duration) ease;\n}\n.connectedNodesWrapperExpanded {\n\tz-index: 1;\n}\n// Hide all other connection groups when one is expanded\n.connections:has(.connectedNodesWrapperExpanded)\n\t.connectionType:not(:has(.connectedNodesWrapperExpanded)) {\n\topacity: 0;\n\tpointer-events: none;\n\tvisibility: hidden;\n}\n.connectedNode {\n\tborder: var(--border-base);\n\tbackground-color: var(--color-node-background);\n\tborder-radius: 100%;\n\tpadding: var(--spacing-xs);\n\tcursor: pointer;\n\tpointer-events: all;\n\ttransition: all var(--animation-duration) ease;\n\tposition: relative;\n\tdisplay: flex;\n\tjustify-self: center;\n\talign-self: center;\n}\n.connectedNodes {\n\tdisplay: flex;\n\tjustify-content: center;\n\tmargin-right: calc(\n\t\t(var(--nodes-length) - 1) * (-1 * (var(--node-size) - var(--collapsed-offset)))\n\t);\n\t.connectedNodesWrapperExpanded & {\n\t\tmargin-right: 0;\n\t\t// Negative margin to offset the absolutely positioned plus button\n\t\t// when the nodes are expanded to center the nodes\n\t\tmargin-right: calc((var(--spacing-2xs) + var(--plus-button-size)) * -1);\n\t}\n}\n.nodeWrapper {\n\ttransition: all var(--animation-duration) ease;\n\ttransform-origin: center;\n\tz-index: 1;\n\t.connectedNodesWrapperExpanded &:not(:first-child) {\n\t\tmargin-left: var(--spacing-2xs);\n\t}\n\t&.hasIssues {\n\t\t.connectedNode {\n\t\t\tborder-width: calc(var(--border-width-base) * 2);\n\t\t\tborder-color: var(--color-danger);\n\t\t}\n\t}\n\n\t&:not(:first-child) {\n\t\ttransform: translateX(\n\t\t\tcalc(var(--node-index) * (-1 * (var(--node-size) - var(--collapsed-offset))))\n\t\t);\n\t}\n\n\t.connectedNodesWrapperExpanded & {\n\t\ttransform: translateX(0);\n\t}\n}\n</style>\n","<template>\n\t<div>\n\t\t<n8n-tooltip placement=\"right\" :disabled=\"!tooltipText\">\n\t\t\t<template #content>\n\t\t\t\t<div>{{ tooltipText }}</div>\n\t\t\t</template>\n\t\t\t<div>\n\t\t\t\t<n8n-button\n\t\t\t\t\tv-bind=\"$attrs\"\n\t\t\t\t\t:loading\n\t\t\t\t\t:disabled=\"disabled || !!disabledHint\"\n\t\t\t\t\t:label=\"buttonLabel\"\n\t\t\t\t\t:type=\"type\"\n\t\t\t\t\t:size=\"size\"\n\t\t\t\t\t:icon=\"!isListeningForEvents && !hideIcon ? 'flask' : undefined\"\n\t\t\t\t\t:transparent-background=\"transparent\"\n\t\t\t\t\t:title=\"\n\t\t\t\t\t\t!isTriggerNode && !tooltipText\n\t\t\t\t\t\t\t? $locale.baseText('ndv.execute.testNode.description')\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\"\n\t\t\t\t\t@mouseover=\"onMouseOver\"\n\t\t\t\t\t@click=\"onClick\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</n8n-tooltip>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport {\n\tWEBHOOK_NODE_TYPE,\n\tMANUAL_TRIGGER_NODE_TYPE,\n\tMODAL_CONFIRM,\n\tFORM_TRIGGER_NODE_TYPE,\n\tCHAT_TRIGGER_NODE_TYPE,\n} from '@/constants';\nimport type { INodeUi } from '@/Interface';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useMessage } from '@/composables/useMessage';\nimport { useToast } from '@/composables/useToast';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { nodeViewEventBus } from '@/event-bus';\nimport { usePinnedData } from '@/composables/usePinnedData';\nimport { useRunWorkflow } from '@/composables/useRunWorkflow';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useRouter } from 'vue-router';\n\nconst NODE_TEST_STEP_POPUP_COUNT_KEY = 'N8N_NODE_TEST_STEP_POPUP_COUNT';\nconst MAX_POPUP_COUNT = 10;\nconst POPUP_UPDATE_DELAY = 3000;\n\nexport default defineComponent({\n\tinheritAttrs: false,\n\tprops: {\n\t\tnodeName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t},\n\t\tsize: {\n\t\t\ttype: String,\n\t\t},\n\t\ttransparent: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttelemetrySource: {\n\t\t\ttype: String,\n\t\t},\n\t\thideIcon: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\ttooltip: {\n\t\t\ttype: String,\n\t\t},\n\t},\n\temits: ['stopExecution', 'execute'],\n\tsetup(props) {\n\t\tconst router = useRouter();\n\t\tconst workflowsStore = useWorkflowsStore();\n\t\tconst node = workflowsStore.getNodeByName(props.nodeName);\n\t\tconst pinnedData = usePinnedData(node);\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst { runWorkflow, stopCurrentExecution } = useRunWorkflow({ router });\n\n\t\treturn {\n\t\t\texternalHooks,\n\t\t\tpinnedData,\n\t\t\trunWorkflow,\n\t\t\tstopCurrentExecution,\n\t\t\tlastPopupCountUpdate: 0,\n\t\t\t...useToast(),\n\t\t\t...useMessage(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNodeTypesStore, useNDVStore, useWorkflowsStore, useUIStore),\n\t\tnode(): INodeUi | null {\n\t\t\treturn this.workflowsStore.getNodeByName(this.nodeName);\n\t\t},\n\t\tnodeType(): INodeTypeDescription | null {\n\t\t\tif (this.node) {\n\t\t\t\treturn this.nodeTypesStore.getNodeType(this.node.type, this.node.typeVersion);\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tnodeRunning(): boolean {\n\t\t\tconst triggeredNode = this.workflowsStore.executedNode;\n\t\t\treturn (\n\t\t\t\tthis.workflowRunning &&\n\t\t\t\t(this.workflowsStore.isNodeExecuting(this.node?.name ?? '') ||\n\t\t\t\t\ttriggeredNode === this.node?.name)\n\t\t\t);\n\t\t},\n\t\tworkflowRunning(): boolean {\n\t\t\treturn this.uiStore.isActionActive('workflowRunning');\n\t\t},\n\t\tisTriggerNode(): boolean {\n\t\t\tif (!this.node) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn this.nodeTypesStore.isTriggerNode(this.node.type);\n\t\t},\n\t\tisManualTriggerNode(): boolean {\n\t\t\treturn Boolean(this.nodeType && this.nodeType.name === MANUAL_TRIGGER_NODE_TYPE);\n\t\t},\n\t\tisChatNode(): boolean {\n\t\t\treturn Boolean(this.nodeType && this.nodeType.name === CHAT_TRIGGER_NODE_TYPE);\n\t\t},\n\t\tisChatChild(): boolean {\n\t\t\treturn this.workflowsStore.checkIfNodeHasChatParent(this.nodeName);\n\t\t},\n\t\tisFormTriggerNode(): boolean {\n\t\t\treturn Boolean(this.nodeType && this.nodeType.name === FORM_TRIGGER_NODE_TYPE);\n\t\t},\n\t\tisPollingTypeNode(): boolean {\n\t\t\treturn !!this.nodeType?.polling;\n\t\t},\n\t\tisScheduleTrigger(): boolean {\n\t\t\treturn !!this.nodeType?.group.includes('schedule');\n\t\t},\n\t\tisWebhookNode(): boolean {\n\t\t\treturn Boolean(this.nodeType && this.nodeType.name === WEBHOOK_NODE_TYPE);\n\t\t},\n\t\tisListeningForEvents(): boolean {\n\t\t\tconst waitingOnWebhook = this.workflowsStore.executionWaitingForWebhook;\n\t\t\tconst executedNode = this.workflowsStore.executedNode;\n\n\t\t\treturn (\n\t\t\t\t!!this.node &&\n\t\t\t\t!this.node.disabled &&\n\t\t\t\tthis.isTriggerNode &&\n\t\t\t\twaitingOnWebhook &&\n\t\t\t\t(!executedNode || executedNode === this.nodeName)\n\t\t\t);\n\t\t},\n\t\tisListeningForWorkflowEvents(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.nodeRunning &&\n\t\t\t\tthis.isTriggerNode &&\n\t\t\t\t!this.isScheduleTrigger &&\n\t\t\t\t!this.isManualTriggerNode\n\t\t\t);\n\t\t},\n\t\thasIssues(): boolean {\n\t\t\treturn Boolean(\n\t\t\t\tthis.node?.issues && (this.node.issues.parameters || this.node.issues.credentials),\n\t\t\t);\n\t\t},\n\t\tdisabledHint(): string {\n\t\t\tif (this.isListeningForEvents) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (this.isTriggerNode && this.node?.disabled) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.nodeIsDisabled');\n\t\t\t}\n\n\t\t\tif (this.isTriggerNode && this.hasIssues) {\n\t\t\t\tconst activeNode = this.ndvStore.activeNode;\n\t\t\t\tif (activeNode && activeNode.name !== this.nodeName) {\n\t\t\t\t\treturn this.$locale.baseText('ndv.execute.fixPrevious');\n\t\t\t\t}\n\n\t\t\t\treturn this.$locale.baseText('ndv.execute.requiredFieldsMissing');\n\t\t\t}\n\n\t\t\tif (this.workflowRunning && !this.nodeRunning) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.workflowAlreadyRunning');\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\ttooltipText(): string {\n\t\t\tif (this.disabledHint) return this.disabledHint;\n\t\t\tif (this.tooltip && !this.loading && this.testStepButtonPopupCount() < MAX_POPUP_COUNT)\n\t\t\t\treturn this.tooltip;\n\t\t\treturn '';\n\t\t},\n\t\tbuttonLabel(): string {\n\t\t\tif (this.isListeningForEvents || this.isListeningForWorkflowEvents) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.stopListening');\n\t\t\t}\n\n\t\t\tif (this.label) {\n\t\t\t\treturn this.label;\n\t\t\t}\n\n\t\t\tif (this.isChatNode) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.testChat');\n\t\t\t}\n\n\t\t\tif (this.isWebhookNode) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.listenForTestEvent');\n\t\t\t}\n\n\t\t\tif (this.isFormTriggerNode) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.testStep');\n\t\t\t}\n\n\t\t\tif (this.isPollingTypeNode || this.nodeType?.mockManualExecution) {\n\t\t\t\treturn this.$locale.baseText('ndv.execute.fetchEvent');\n\t\t\t}\n\n\t\t\treturn this.$locale.baseText('ndv.execute.testNode');\n\t\t},\n\n\t\tloading(): boolean {\n\t\t\treturn this.nodeRunning && !this.isListeningForEvents && !this.isListeningForWorkflowEvents;\n\t\t},\n\t},\n\tmethods: {\n\t\tasync stopWaitingForWebhook() {\n\t\t\ttry {\n\t\t\t\tawait this.workflowsStore.removeTestWebhook(this.workflowsStore.workflowId);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error, this.$locale.baseText('ndv.execute.stopWaitingForWebhook.error'));\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\n\t\ttestStepButtonPopupCount() {\n\t\t\treturn Number(localStorage.getItem(NODE_TEST_STEP_POPUP_COUNT_KEY));\n\t\t},\n\n\t\tonMouseOver() {\n\t\t\tconst count = this.testStepButtonPopupCount();\n\n\t\t\tif (count < MAX_POPUP_COUNT && !this.disabledHint && this.tooltipText) {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tif (!this.lastPopupCountUpdate || now - this.lastPopupCountUpdate >= POPUP_UPDATE_DELAY) {\n\t\t\t\t\tlocalStorage.setItem(NODE_TEST_STEP_POPUP_COUNT_KEY, `${count + 1}`);\n\t\t\t\t\tthis.lastPopupCountUpdate = now;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tasync onClick() {\n\t\t\t// Show chat if it's a chat node or a child of a chat node with no input data\n\t\t\tif (this.isChatNode || (this.isChatChild && this.ndvStore.isNDVDataEmpty('input'))) {\n\t\t\t\tthis.ndvStore.setActiveNodeName(null);\n\t\t\t\tnodeViewEventBus.emit('openChat');\n\t\t\t} else if (this.isListeningForEvents) {\n\t\t\t\tawait this.stopWaitingForWebhook();\n\t\t\t} else if (this.isListeningForWorkflowEvents) {\n\t\t\t\tawait this.stopCurrentExecution();\n\t\t\t\tthis.$emit('stopExecution');\n\t\t\t} else {\n\t\t\t\tlet shouldUnpinAndExecute = false;\n\t\t\t\tif (this.pinnedData.hasData.value) {\n\t\t\t\t\tconst confirmResult = await this.confirm(\n\t\t\t\t\t\tthis.$locale.baseText('ndv.pinData.unpinAndExecute.description'),\n\t\t\t\t\t\tthis.$locale.baseText('ndv.pinData.unpinAndExecute.title'),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconfirmButtonText: this.$locale.baseText('ndv.pinData.unpinAndExecute.confirm'),\n\t\t\t\t\t\t\tcancelButtonText: this.$locale.baseText('ndv.pinData.unpinAndExecute.cancel'),\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tshouldUnpinAndExecute = confirmResult === MODAL_CONFIRM;\n\n\t\t\t\t\tif (shouldUnpinAndExecute && this.node) {\n\t\t\t\t\t\tthis.pinnedData.unsetData('unpin-and-execute-modal');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!this.pinnedData.hasData.value || shouldUnpinAndExecute) {\n\t\t\t\t\tconst telemetryPayload = {\n\t\t\t\t\t\tnode_type: this.nodeType ? this.nodeType.name : null,\n\t\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\t\tsource: this.telemetrySource,\n\t\t\t\t\t\tpush_ref: this.ndvStore.pushRef,\n\t\t\t\t\t};\n\t\t\t\t\tthis.$telemetry.track('User clicked execute node button', telemetryPayload);\n\t\t\t\t\tawait this.externalHooks.run('nodeExecuteButton.onClick', telemetryPayload);\n\n\t\t\t\t\tawait this.runWorkflow({\n\t\t\t\t\t\tdestinationNode: this.nodeName,\n\t\t\t\t\t\tsource: 'RunData.ExecuteNodeButton',\n\t\t\t\t\t});\n\t\t\t\t\tthis.$emit('execute');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n","<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'node-settings': true,\n\t\t\tdragging: dragging,\n\t\t}\"\n\t\t@keydown.stop\n\t>\n\t\t<div :class=\"$style.header\">\n\t\t\t<div class=\"header-side-menu\">\n\t\t\t\t<NodeTitle\n\t\t\t\t\tv-if=\"node\"\n\t\t\t\t\tclass=\"node-name\"\n\t\t\t\t\t:model-value=\"node.name\"\n\t\t\t\t\t:node-type=\"nodeType\"\n\t\t\t\t\t:read-only=\"isReadOnly\"\n\t\t\t\t\t@update:model-value=\"nameChanged\"\n\t\t\t\t></NodeTitle>\n\t\t\t\t<div v-if=\"isExecutable\">\n\t\t\t\t\t<NodeExecuteButton\n\t\t\t\t\t\tv-if=\"!blockUI && node && nodeValid\"\n\t\t\t\t\t\tdata-test-id=\"node-execute-button\"\n\t\t\t\t\t\t:node-name=\"node.name\"\n\t\t\t\t\t\t:disabled=\"outputPanelEditMode.enabled && !isTriggerNode\"\n\t\t\t\t\t\t:tooltip=\"executeButtonTooltip\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\ttelemetry-source=\"parameters\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t\t@stop-execution=\"onStopExecution\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<NodeSettingsTabs\n\t\t\t\tv-if=\"node && nodeValid\"\n\t\t\t\t:model-value=\"openPanel\"\n\t\t\t\t:node-type=\"nodeType\"\n\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t@update:model-value=\"onTabSelect\"\n\t\t\t/>\n\t\t</div>\n\t\t<div v-if=\"node && !nodeValid\" class=\"node-is-not-valid\">\n\t\t\t<p :class=\"$style.warningIcon\">\n\t\t\t\t<font-awesome-icon icon=\"exclamation-triangle\" />\n\t\t\t</p>\n\t\t\t<div class=\"missingNodeTitleContainer mt-s mb-xs\">\n\t\t\t\t<n8n-text size=\"large\" color=\"text-dark\" bold>\n\t\t\t\t\t{{ $locale.baseText('nodeSettings.communityNodeUnknown.title') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<div v-if=\"isCommunityNode\" :class=\"$style.descriptionContainer\">\n\t\t\t\t<div class=\"mb-l\">\n\t\t\t\t\t<i18n-t\n\t\t\t\t\t\tkeypath=\"nodeSettings.communityNodeUnknown.description\"\n\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t@click=\"onMissingNodeTextClick\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #action>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t:href=\"`https://www.npmjs.com/package/${node.type.split('.')[0]}`\"\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t>{{ node.type.split('.')[0] }}</a\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</i18n-t>\n\t\t\t\t</div>\n\t\t\t\t<n8n-link\n\t\t\t\t\t:to=\"COMMUNITY_NODES_INSTALLATION_DOCS_URL\"\n\t\t\t\t\t@click=\"onMissingNodeLearnMoreLinkClick\"\n\t\t\t\t>\n\t\t\t\t\t{{ $locale.baseText('nodeSettings.communityNodeUnknown.installLink.text') }}\n\t\t\t\t</n8n-link>\n\t\t\t</div>\n\t\t\t<i18n-t v-else keypath=\"nodeSettings.nodeTypeUnknown.description\" tag=\"span\">\n\t\t\t\t<template #action>\n\t\t\t\t\t<a\n\t\t\t\t\t\t:href=\"CUSTOM_NODES_DOCS_URL\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\tv-text=\"$locale.baseText('nodeSettings.nodeTypeUnknown.description.customNode')\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t</i18n-t>\n\t\t</div>\n\t\t<div v-if=\"node && nodeValid\" class=\"node-parameters-wrapper\" data-test-id=\"node-parameters\">\n\t\t\t<n8n-notice\n\t\t\t\tv-if=\"hasForeignCredential\"\n\t\t\t\t:content=\"\n\t\t\t\t\t$locale.baseText('nodeSettings.hasForeignCredential', {\n\t\t\t\t\t\tinterpolate: { owner: credentialOwnerName },\n\t\t\t\t\t})\n\t\t\t\t\"\n\t\t\t/>\n\t\t\t<div v-show=\"openPanel === 'params'\">\n\t\t\t\t<NodeWebhooks :node=\"node\" :node-type=\"nodeType\" />\n\n\t\t\t\t<ParameterInputList\n\t\t\t\t\tv-if=\"nodeValuesInitialized\"\n\t\t\t\t\t:parameters=\"parametersNoneSetting\"\n\t\t\t\t\t:hide-delete=\"true\"\n\t\t\t\t\t:node-values=\"nodeValues\"\n\t\t\t\t\t:is-read-only=\"isReadOnly\"\n\t\t\t\t\t:hidden-issues-inputs=\"hiddenIssuesInputs\"\n\t\t\t\t\tpath=\"parameters\"\n\t\t\t\t\t@value-changed=\"valueChanged\"\n\t\t\t\t\t@activate=\"onWorkflowActivate\"\n\t\t\t\t\t@parameter-blur=\"onParameterBlur\"\n\t\t\t\t>\n\t\t\t\t\t<NodeCredentials\n\t\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t\t:readonly=\"isReadOnly\"\n\t\t\t\t\t\t:show-all=\"true\"\n\t\t\t\t\t\t:hide-issues=\"hiddenIssuesInputs.includes('credentials')\"\n\t\t\t\t\t\t@credential-selected=\"credentialSelected\"\n\t\t\t\t\t\t@value-changed=\"valueChanged\"\n\t\t\t\t\t\t@blur=\"onParameterBlur\"\n\t\t\t\t\t/>\n\t\t\t\t</ParameterInputList>\n\t\t\t\t<div v-if=\"parametersNoneSetting.length === 0\" class=\"no-parameters\">\n\t\t\t\t\t<n8n-text>\n\t\t\t\t\t\t{{ $locale.baseText('nodeSettings.thisNodeDoesNotHaveAnyParameters') }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"nodeHelpers.isCustomApiCallSelected(nodeValues)\"\n\t\t\t\t\tclass=\"parameter-item parameter-notice\"\n\t\t\t\t\tdata-test-id=\"node-parameters-http-notice\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-notice\n\t\t\t\t\t\t:content=\"\n\t\t\t\t\t\t\t$locale.baseText('nodeSettings.useTheHttpRequestNode', {\n\t\t\t\t\t\t\t\tinterpolate: { nodeTypeDisplayName: nodeType?.displayName ?? '' },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-show=\"openPanel === 'settings'\">\n\t\t\t\t<ParameterInputList\n\t\t\t\t\t:parameters=\"parametersSetting\"\n\t\t\t\t\t:node-values=\"nodeValues\"\n\t\t\t\t\t:is-read-only=\"isReadOnly\"\n\t\t\t\t\t:hide-delete=\"true\"\n\t\t\t\t\t:hidden-issues-inputs=\"hiddenIssuesInputs\"\n\t\t\t\t\tpath=\"parameters\"\n\t\t\t\t\t@value-changed=\"valueChanged\"\n\t\t\t\t\t@parameter-blur=\"onParameterBlur\"\n\t\t\t\t/>\n\t\t\t\t<ParameterInputList\n\t\t\t\t\t:parameters=\"nodeSettings\"\n\t\t\t\t\t:hide-delete=\"true\"\n\t\t\t\t\t:node-values=\"nodeValues\"\n\t\t\t\t\t:is-read-only=\"isReadOnly\"\n\t\t\t\t\t:hidden-issues-inputs=\"hiddenIssuesInputs\"\n\t\t\t\t\tpath=\"\"\n\t\t\t\t\t@value-changed=\"valueChanged\"\n\t\t\t\t\t@parameter-blur=\"onParameterBlur\"\n\t\t\t\t/>\n\t\t\t\t<div class=\"node-version\" data-test-id=\"node-version\">\n\t\t\t\t\t{{\n\t\t\t\t\t\t$locale.baseText('nodeSettings.nodeVersion', {\n\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\tnode: nodeType?.displayName as string,\n\t\t\t\t\t\t\t\tversion: (node.typeVersion ?? latestVersion).toString(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t\t<span>({{ nodeVersionTag }})</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<NDVSubConnections\n\t\t\tv-if=\"node\"\n\t\t\tref=\"subConnections\"\n\t\t\t:root-node=\"node\"\n\t\t\t@switch-selected-node=\"onSwitchSelectedNode\"\n\t\t\t@open-connection-node-creator=\"onOpenConnectionNodeCreator\"\n\t\t/>\n\t\t<n8n-block-ui :show=\"blockUI\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport type {\n\tINodeTypeDescription,\n\tINodeParameters,\n\tINodeProperties,\n\tNodeParameterValue,\n\tConnectionTypes,\n\tNodeParameterValueType,\n} from 'n8n-workflow';\nimport {\n\tNodeHelpers,\n\tNodeConnectionType,\n\tdeepCopy,\n\tisINodePropertyCollectionList,\n\tisINodePropertiesList,\n\tisINodePropertyOptionsList,\n\tdisplayParameter,\n} from 'n8n-workflow';\nimport type {\n\tINodeUi,\n\tINodeUpdatePropertiesInformation,\n\tIUpdateInformation,\n\tIUsedCredential,\n} from '@/Interface';\n\nimport {\n\tCOMMUNITY_NODES_INSTALLATION_DOCS_URL,\n\tCUSTOM_NODES_DOCS_URL,\n\tMAIN_NODE_PANEL_WIDTH,\n\tSHOULD_CLEAR_NODE_OUTPUTS,\n} from '@/constants';\n\nimport NodeTitle from '@/components/NodeTitle.vue';\nimport ParameterInputList from '@/components/ParameterInputList.vue';\nimport NodeCredentials from '@/components/NodeCredentials.vue';\nimport NodeSettingsTabs from '@/components/NodeSettingsTabs.vue';\nimport NodeWebhooks from '@/components/NodeWebhooks.vue';\nimport NDVSubConnections from '@/components/NDVSubConnections.vue';\nimport { get, set, unset } from 'lodash-es';\n\nimport NodeExecuteButton from './NodeExecuteButton.vue';\nimport { isCommunityPackageName } from '@/utils/nodeTypesUtils';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useHistoryStore } from '@/stores/history.store';\nimport { RenameNodeCommand } from '@/models/history';\nimport useWorkflowsEEStore from '@/stores/workflows.ee.store';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport type { EventBus } from 'n8n-design-system';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport { importCurlEventBus } from '@/event-bus';\nimport { useToast } from '@/composables/useToast';\n\nexport default defineComponent({\n\tname: 'NodeSettings',\n\tcomponents: {\n\t\tNodeTitle,\n\t\tNodeCredentials,\n\t\tParameterInputList,\n\t\tNodeSettingsTabs,\n\t\tNodeWebhooks,\n\t\tNDVSubConnections,\n\t\tNodeExecuteButton,\n\t},\n\tsetup() {\n\t\tconst nodeHelpers = useNodeHelpers();\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst { showMessage } = useToast();\n\n\t\treturn {\n\t\t\texternalHooks,\n\t\t\tnodeHelpers,\n\t\t\tshowMessage,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseHistoryStore,\n\t\t\tuseNodeTypesStore,\n\t\t\tuseNDVStore,\n\t\t\tuseUIStore,\n\t\t\tuseCredentialsStore,\n\t\t\tuseWorkflowsStore,\n\t\t\tuseWorkflowsEEStore,\n\t\t),\n\t\tisReadOnly(): boolean {\n\t\t\treturn this.readOnly || this.hasForeignCredential;\n\t\t},\n\t\tisExecutable(): boolean {\n\t\t\tif (this.nodeType && this.node) {\n\t\t\t\tconst workflow = this.workflowsStore.getCurrentWorkflow();\n\t\t\t\tconst workflowNode = workflow.getNode(this.node.name);\n\t\t\t\tconst inputs = NodeHelpers.getNodeInputs(workflow, workflowNode!, this.nodeType);\n\t\t\t\tconst inputNames = NodeHelpers.getConnectionTypes(inputs);\n\n\t\t\t\tif (!inputNames.includes(NodeConnectionType.Main) && !this.isTriggerNode) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.executable || this.hasForeignCredential;\n\t\t},\n\t\tnodeTypeName(): string {\n\t\t\tif (this.nodeType) {\n\t\t\t\tconst shortNodeType = this.$locale.shortNodeType(this.nodeType.name);\n\n\t\t\t\treturn this.$locale.headerText({\n\t\t\t\t\tkey: `headers.${shortNodeType}.displayName`,\n\t\t\t\t\tfallback: this.nodeType.name,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\tnodeTypeVersions(): number[] {\n\t\t\tif (!this.node) return [];\n\t\t\treturn this.nodeTypesStore.getNodeVersions(this.node.type);\n\t\t},\n\t\tlatestVersion(): number {\n\t\t\treturn Math.max(...this.nodeTypeVersions);\n\t\t},\n\t\tisLatestNodeVersion(): boolean {\n\t\t\treturn !this.node?.typeVersion || this.latestVersion === this.node.typeVersion;\n\t\t},\n\t\texecuteButtonTooltip(): string {\n\t\t\tif (\n\t\t\t\tthis.node &&\n\t\t\t\tthis.isLatestNodeVersion &&\n\t\t\t\tthis.inputSize > 1 &&\n\t\t\t\t!NodeHelpers.isSingleExecution(this.node.type, this.node.parameters)\n\t\t\t) {\n\t\t\t\treturn this.$locale.baseText('nodeSettings.executeButtonTooltip.times', {\n\t\t\t\t\tinterpolate: { inputSize: this.inputSize },\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn '';\n\t\t},\n\t\tnodeVersionTag(): string {\n\t\t\tif (!this.nodeType || this.nodeType.hidden) {\n\t\t\t\treturn this.$locale.baseText('nodeSettings.deprecated');\n\t\t\t}\n\n\t\t\tif (this.isLatestNodeVersion) {\n\t\t\t\treturn this.$locale.baseText('nodeSettings.latest');\n\t\t\t}\n\n\t\t\treturn this.$locale.baseText('nodeSettings.latestVersion', {\n\t\t\t\tinterpolate: { version: this.latestVersion.toString() },\n\t\t\t});\n\t\t},\n\t\tnodeTypeDescription(): string {\n\t\t\tif (this.nodeType?.description) {\n\t\t\t\tconst shortNodeType = this.$locale.shortNodeType(this.nodeType.name);\n\n\t\t\t\treturn this.$locale.headerText({\n\t\t\t\t\tkey: `headers.${shortNodeType}.description`,\n\t\t\t\t\tfallback: this.nodeType.description,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn this.$locale.baseText('nodeSettings.noDescriptionFound');\n\t\t\t}\n\t\t},\n\t\theaderStyle(): object {\n\t\t\tif (!this.node) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t'background-color': this.node.color,\n\t\t\t};\n\t\t},\n\t\tnode(): INodeUi | null {\n\t\t\treturn this.ndvStore.activeNode;\n\t\t},\n\t\tparametersSetting(): INodeProperties[] {\n\t\t\treturn this.parameters.filter((item) => {\n\t\t\t\treturn item.isNodeSetting;\n\t\t\t});\n\t\t},\n\t\tparametersNoneSetting(): INodeProperties[] {\n\t\t\treturn this.parameters.filter((item) => {\n\t\t\t\treturn !item.isNodeSetting;\n\t\t\t});\n\t\t},\n\t\tparameters(): INodeProperties[] {\n\t\t\tif (this.nodeType === null) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn this.nodeType?.properties ?? [];\n\t\t},\n\t\toutputPanelEditMode(): { enabled: boolean; value: string } {\n\t\t\treturn this.ndvStore.outputPanelEditMode;\n\t\t},\n\t\tisCommunityNode(): boolean {\n\t\t\treturn !!this.node && isCommunityPackageName(this.node.type);\n\t\t},\n\t\tisTriggerNode(): boolean {\n\t\t\treturn !!this.node && this.nodeTypesStore.isTriggerNode(this.node.type);\n\t\t},\n\t\tworkflowOwnerName(): string {\n\t\t\treturn this.workflowsEEStore.getWorkflowOwnerName(`${this.workflowsStore.workflowId}`);\n\t\t},\n\t\thasForeignCredential(): boolean {\n\t\t\treturn this.foreignCredentials.length > 0;\n\t\t},\n\t\tusedCredentials(): IUsedCredential[] {\n\t\t\treturn Object.values(this.workflowsStore.usedCredentials).filter((credential) => {\n\t\t\t\treturn Object.values(this.node?.credentials || []).find((nodeCredential) => {\n\t\t\t\t\treturn nodeCredential.id === credential.id;\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tcredentialOwnerName(): string {\n\t\t\tconst credential = this.usedCredentials\n\t\t\t\t? Object.values(this.usedCredentials).find((credential) => {\n\t\t\t\t\t\treturn credential.id === this.foreignCredentials[0];\n\t\t\t\t\t})\n\t\t\t\t: undefined;\n\n\t\t\treturn this.credentialsStore.getCredentialOwnerName(credential);\n\t\t},\n\t},\n\tprops: {\n\t\teventBus: {\n\t\t\ttype: Object as PropType<EventBus>,\n\t\t},\n\t\tdragging: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\tnodeType: {\n\t\t\ttype: Object as PropType<INodeTypeDescription | null>,\n\t\t},\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tforeignCredentials: {\n\t\t\ttype: Array as PropType<string[]>,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tblockUI: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\texecutable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tinputSize: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnodeValid: true,\n\t\t\tnodeColor: null,\n\t\t\topenPanel: 'params' as 'params' | 'settings',\n\t\t\tnodeValues: {\n\t\t\t\tcolor: '#ff0000',\n\t\t\t\talwaysOutputData: false,\n\t\t\t\texecuteOnce: false,\n\t\t\t\tnotesInFlow: false,\n\t\t\t\tonError: 'stopWorkflow',\n\t\t\t\tretryOnFail: false,\n\t\t\t\tmaxTries: 3,\n\t\t\t\twaitBetweenTries: 1000,\n\t\t\t\tnotes: '',\n\t\t\t\tparameters: {},\n\t\t\t} as INodeParameters,\n\t\t\tnodeValuesInitialized: false, // Used to prevent nodeValues from being overwritten by defaults on reopening ndv\n\t\t\tnodeSettings: [] as INodeProperties[],\n\t\t\tCOMMUNITY_NODES_INSTALLATION_DOCS_URL,\n\t\t\tCUSTOM_NODES_DOCS_URL,\n\t\t\tMAIN_NODE_PANEL_WIDTH,\n\t\t\thiddenIssuesInputs: [] as string[],\n\t\t};\n\t},\n\twatch: {\n\t\tnode() {\n\t\t\tthis.setNodeValues();\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.populateHiddenIssuesSet();\n\t\tthis.populateSettings();\n\t\tthis.setNodeValues();\n\t\tthis.eventBus?.on('openSettings', this.openSettings);\n\n\t\tthis.nodeHelpers.updateNodeParameterIssues(this.node as INodeUi, this.nodeType);\n\t\timportCurlEventBus.on('setHttpNodeParameters', this.setHttpNodeParameters);\n\t},\n\tbeforeUnmount() {\n\t\tthis.eventBus?.off('openSettings', this.openSettings);\n\t\timportCurlEventBus.off('setHttpNodeParameters', this.setHttpNodeParameters);\n\t},\n\tmethods: {\n\t\tsetHttpNodeParameters(parameters: NodeParameterValueType) {\n\t\t\ttry {\n\t\t\t\tthis.valueChanged({\n\t\t\t\t\tnode: this.node?.name,\n\t\t\t\t\tname: 'parameters',\n\t\t\t\t\tvalue: parameters,\n\t\t\t\t});\n\t\t\t} catch {}\n\t\t},\n\t\tonSwitchSelectedNode(node: string) {\n\t\t\tthis.$emit('switchSelectedNode', node);\n\t\t},\n\t\tonOpenConnectionNodeCreator(node: string, connectionType: ConnectionTypes) {\n\t\t\tthis.$emit('openConnectionNodeCreator', node, connectionType);\n\t\t},\n\t\tpopulateHiddenIssuesSet() {\n\t\t\tif (!this.node || !this.workflowsStore.isNodePristine(this.node.name)) return;\n\n\t\t\tthis.hiddenIssuesInputs.push('credentials');\n\t\t\tthis.parametersNoneSetting.forEach((parameter) => {\n\t\t\t\tthis.hiddenIssuesInputs.push(parameter.name);\n\t\t\t});\n\n\t\t\tthis.workflowsStore.setNodePristine(this.node.name, false);\n\t\t},\n\t\tpopulateSettings() {\n\t\t\tif (this.isExecutable && !this.isTriggerNode) {\n\t\t\t\tthis.nodeSettings.push(\n\t\t\t\t\t...([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.alwaysOutputData.displayName'),\n\t\t\t\t\t\t\tname: 'alwaysOutputData',\n\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.alwaysOutputData.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.executeOnce.displayName'),\n\t\t\t\t\t\t\tname: 'executeOnce',\n\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.executeOnce.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.retryOnFail.displayName'),\n\t\t\t\t\t\t\tname: 'retryOnFail',\n\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.retryOnFail.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.maxTries.displayName'),\n\t\t\t\t\t\t\tname: 'maxTries',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\t\tminValue: 2,\n\t\t\t\t\t\t\t\tmaxValue: 5,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdefault: 3,\n\t\t\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\t\tretryOnFail: [true],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.maxTries.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.waitBetweenTries.displayName'),\n\t\t\t\t\t\t\tname: 'waitBetweenTries',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\t\tminValue: 0,\n\t\t\t\t\t\t\t\tmaxValue: 5000,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdefault: 1000,\n\t\t\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\t\tretryOnFail: [true],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.waitBetweenTries.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.onError.displayName'),\n\t\t\t\t\t\t\tname: 'onError',\n\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.stopWorkflow.displayName',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tvalue: 'stopWorkflow',\n\t\t\t\t\t\t\t\t\tdescription: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.stopWorkflow.description',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.continueRegularOutput.displayName',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tvalue: 'continueRegularOutput',\n\t\t\t\t\t\t\t\t\tdescription: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.continueRegularOutput.description',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.continueErrorOutput.displayName',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tvalue: 'continueErrorOutput',\n\t\t\t\t\t\t\t\t\tdescription: this.$locale.baseText(\n\t\t\t\t\t\t\t\t\t\t'nodeSettings.onError.options.continueErrorOutput.description',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdefault: 'stopWorkflow',\n\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.onError.description'),\n\t\t\t\t\t\t},\n\t\t\t\t\t] as INodeProperties[]),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.nodeSettings.push(\n\t\t\t\t...([\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.notes.displayName'),\n\t\t\t\t\t\tname: 'notes',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\trows: 5,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.notes.description'),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: this.$locale.baseText('nodeSettings.notesInFlow.displayName'),\n\t\t\t\t\t\tname: 'notesInFlow',\n\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\tdescription: this.$locale.baseText('nodeSettings.notesInFlow.description'),\n\t\t\t\t\t},\n\t\t\t\t] as INodeProperties[]),\n\t\t\t);\n\t\t},\n\t\tonParameterBlur(parameterName: string) {\n\t\t\tthis.hiddenIssuesInputs = this.hiddenIssuesInputs.filter((name) => name !== parameterName);\n\t\t},\n\t\tonWorkflowActivate() {\n\t\t\tthis.hiddenIssuesInputs = [];\n\t\t\tthis.$emit('activate');\n\t\t},\n\t\tonNodeExecute() {\n\t\t\tthis.hiddenIssuesInputs = [];\n\t\t\t(this.$refs.subConnections as InstanceType<typeof NDVSubConnections>)?.showNodeInputsIssues();\n\t\t\tthis.$emit('execute');\n\t\t},\n\t\tsetValue(name: string, value: NodeParameterValue) {\n\t\t\tconst nameParts = name.split('.');\n\t\t\tlet lastNamePart: string | undefined = nameParts.pop();\n\n\t\t\tlet isArray = false;\n\t\t\tif (lastNamePart !== undefined && lastNamePart.includes('[')) {\n\t\t\t\t// It includes an index so we have to extract it\n\t\t\t\tconst lastNameParts = lastNamePart.match(/(.*)\\[(\\d+)\\]$/);\n\t\t\t\tif (lastNameParts) {\n\t\t\t\t\tnameParts.push(lastNameParts[1]);\n\t\t\t\t\tlastNamePart = lastNameParts[2];\n\t\t\t\t\tisArray = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the value so that everything updates correctly in the UI\n\t\t\tif (nameParts.length === 0) {\n\t\t\t\t// Data is on top level\n\t\t\t\tif (value === null) {\n\t\t\t\t\t// Property should be deleted\n\t\t\t\t\tif (lastNamePart) {\n\t\t\t\t\t\tconst { [lastNamePart]: removedNodeValue, ...remainingNodeValues } = this.nodeValues;\n\t\t\t\t\t\tthis.nodeValues = remainingNodeValues;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Value should be set\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\t[lastNamePart as string]: value,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Data is on lower level\n\t\t\t\tif (value === null) {\n\t\t\t\t\t// Property should be deleted\n\t\t\t\t\tlet tempValue = get(this.nodeValues, nameParts.join('.')) as\n\t\t\t\t\t\t| INodeParameters\n\t\t\t\t\t\t| INodeParameters[];\n\n\t\t\t\t\tif (lastNamePart && !Array.isArray(tempValue)) {\n\t\t\t\t\t\tconst { [lastNamePart]: removedNodeValue, ...remainingNodeValues } = tempValue;\n\t\t\t\t\t\ttempValue = remainingNodeValues;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArray && Array.isArray(tempValue) && tempValue.length === 0) {\n\t\t\t\t\t\t// If a value from an array got delete and no values are left\n\t\t\t\t\t\t// delete also the parent\n\t\t\t\t\t\tlastNamePart = nameParts.pop();\n\t\t\t\t\t\ttempValue = get(this.nodeValues, nameParts.join('.')) as INodeParameters;\n\t\t\t\t\t\tif (lastNamePart) {\n\t\t\t\t\t\t\tconst { [lastNamePart]: removedArrayNodeValue, ...remainingArrayNodeValues } =\n\t\t\t\t\t\t\t\ttempValue;\n\t\t\t\t\t\t\ttempValue = remainingArrayNodeValues;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Value should be set\n\t\t\t\t\tif (typeof value === 'object') {\n\t\t\t\t\t\tset(\n\t\t\t\t\t\t\tget(this.nodeValues, nameParts.join('.')) as Record<string, unknown>,\n\t\t\t\t\t\t\tlastNamePart as string,\n\t\t\t\t\t\t\tdeepCopy(value),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tset(\n\t\t\t\t\t\t\tget(this.nodeValues, nameParts.join('.')) as Record<string, unknown>,\n\t\t\t\t\t\t\tlastNamePart as string,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.nodeValues = { ...this.nodeValues };\n\t\t},\n\t\tcredentialSelected(updateInformation: INodeUpdatePropertiesInformation) {\n\t\t\t// Update the values on the node\n\t\t\tthis.workflowsStore.updateNodeProperties(updateInformation);\n\n\t\t\tconst node = this.workflowsStore.getNodeByName(updateInformation.name);\n\n\t\t\tif (node) {\n\t\t\t\t// Update the issues\n\t\t\t\tthis.nodeHelpers.updateNodeCredentialIssues(node);\n\t\t\t}\n\n\t\t\tvoid this.externalHooks.run('nodeSettings.credentialSelected', { updateInformation });\n\t\t},\n\t\tnameChanged(name: string) {\n\t\t\tif (this.node) {\n\t\t\t\tthis.historyStore.pushCommandToUndo(new RenameNodeCommand(this.node.name, name));\n\t\t\t}\n\t\t\t// @ts-ignore\n\t\t\tthis.valueChanged({\n\t\t\t\tvalue: name,\n\t\t\t\tname: 'name',\n\t\t\t});\n\t\t},\n\t\tvalueChanged(parameterData: IUpdateInformation) {\n\t\t\tlet newValue: NodeParameterValue;\n\n\t\t\tif (parameterData.hasOwnProperty('value')) {\n\t\t\t\t// New value is given\n\t\t\t\tnewValue = parameterData.value as string | number;\n\t\t\t} else {\n\t\t\t\t// Get new value from nodeData where it is set already\n\t\t\t\tnewValue = get(this.nodeValues, parameterData.name) as NodeParameterValue;\n\t\t\t}\n\t\t\t// Save the node name before we commit the change because\n\t\t\t// we need the old name to rename the node properly\n\t\t\tconst nodeNameBefore = parameterData.node || this.node?.name;\n\n\t\t\tif (!nodeNameBefore) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst node = this.workflowsStore.getNodeByName(nodeNameBefore);\n\n\t\t\tif (node === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (parameterData.name === 'onError') {\n\t\t\t\t// If that parameter changes, we need to redraw the connections, as the error output may need to be added or removed\n\t\t\t\tthis.$emit('redrawRequired');\n\t\t\t}\n\n\t\t\tif (parameterData.name === 'name') {\n\t\t\t\t// Name of node changed so we have to set also the new node name as active\n\n\t\t\t\t// Update happens in NodeView so emit event\n\t\t\t\tconst sendData = {\n\t\t\t\t\tvalue: newValue,\n\t\t\t\t\toldValue: nodeNameBefore,\n\t\t\t\t\tname: parameterData.name,\n\t\t\t\t};\n\t\t\t\tthis.$emit('valueChanged', sendData);\n\t\t\t} else if (parameterData.name === 'parameters') {\n\t\t\t\tconst nodeType = this.nodeTypesStore.getNodeType(node.type, node.typeVersion);\n\t\t\t\tif (!nodeType) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Get only the parameters which are different to the defaults\n\t\t\t\tlet nodeParameters = NodeHelpers.getNodeParameters(\n\t\t\t\t\tnodeType.properties,\n\t\t\t\t\tnode.parameters,\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tnode,\n\t\t\t\t);\n\n\t\t\t\tconst oldNodeParameters = Object.assign({}, nodeParameters);\n\n\t\t\t\t// Copy the data because it is the data of vuex so make sure that\n\t\t\t\t// we do not edit it directly\n\t\t\t\tnodeParameters = deepCopy(nodeParameters);\n\n\t\t\t\tif (parameterData.value && typeof parameterData.value === 'object') {\n\t\t\t\t\tfor (const parameterName of Object.keys(parameterData.value)) {\n\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\tnewValue = parameterData.value[parameterName];\n\n\t\t\t\t\t\t// Remove the 'parameters.' from the beginning to just have the\n\t\t\t\t\t\t// actual parameter name\n\t\t\t\t\t\tconst parameterPath = parameterName.split('.').slice(1).join('.');\n\n\t\t\t\t\t\t// Check if the path is supposed to change an array and if so get\n\t\t\t\t\t\t// the needed data like path and index\n\t\t\t\t\t\tconst parameterPathArray = parameterPath.match(/(.*)\\[(\\d+)\\]$/);\n\n\t\t\t\t\t\t// Apply the new value\n\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\tif (parameterData[parameterName] === undefined && parameterPathArray !== null) {\n\t\t\t\t\t\t\t// Delete array item\n\t\t\t\t\t\t\tconst path = parameterPathArray[1];\n\t\t\t\t\t\t\tconst index = parameterPathArray[2];\n\t\t\t\t\t\t\tconst data = get(nodeParameters, path);\n\n\t\t\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\t\t\tdata.splice(parseInt(index, 10), 1);\n\t\t\t\t\t\t\t\tset(nodeParameters as object, path, data);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (newValue === undefined) {\n\t\t\t\t\t\t\t\tunset(nodeParameters as object, parameterPath);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tset(nodeParameters as object, parameterPath, newValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvoid this.externalHooks.run('nodeSettings.valueChanged', {\n\t\t\t\t\t\t\tparameterPath,\n\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\tparameters: this.parameters,\n\t\t\t\t\t\t\toldNodeParameters,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Get the parameters with the now new defaults according to the\n\t\t\t\t// from the user actually defined parameters\n\t\t\t\tnodeParameters = NodeHelpers.getNodeParameters(\n\t\t\t\t\tnodeType.properties,\n\t\t\t\t\tnodeParameters as INodeParameters,\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t\tnode,\n\t\t\t\t);\n\n\t\t\t\tfor (const key of Object.keys(nodeParameters as object)) {\n\t\t\t\t\tif (nodeParameters && nodeParameters[key] !== null && nodeParameters[key] !== undefined) {\n\t\t\t\t\t\tthis.setValue(`parameters.${key}`, nodeParameters[key] as string);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (nodeParameters) {\n\t\t\t\t\tconst updateInformation: IUpdateInformation = {\n\t\t\t\t\t\tname: node.name,\n\t\t\t\t\t\tvalue: nodeParameters,\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.workflowsStore.setNodeParameters(updateInformation);\n\n\t\t\t\t\tthis.nodeHelpers.updateNodeParameterIssuesByName(node.name);\n\t\t\t\t\tthis.nodeHelpers.updateNodeCredentialIssuesByName(node.name);\n\t\t\t\t}\n\t\t\t} else if (parameterData.name.startsWith('parameters.')) {\n\t\t\t\t// A node parameter changed\n\n\t\t\t\tconst nodeType = this.nodeTypesStore.getNodeType(node.type, node.typeVersion);\n\t\t\t\tif (!nodeType) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tparameterData.type &&\n\t\t\t\t\tthis.workflowsStore.nodeHasOutputConnection(node.name) &&\n\t\t\t\t\tSHOULD_CLEAR_NODE_OUTPUTS[nodeType.name]?.eventTypes.includes(parameterData.type) &&\n\t\t\t\t\tSHOULD_CLEAR_NODE_OUTPUTS[nodeType.name]?.parameterPaths.includes(parameterData.name)\n\t\t\t\t) {\n\t\t\t\t\tthis.workflowsStore.removeAllNodeConnection(node, { preserveInputConnections: true });\n\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\ttype: 'warning',\n\t\t\t\t\t\ttitle: this.$locale.baseText('nodeSettings.outputCleared.title'),\n\t\t\t\t\t\tmessage: this.$locale.baseText('nodeSettings.outputCleared.message'),\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Get only the parameters which are different to the defaults\n\t\t\t\tlet nodeParameters = NodeHelpers.getNodeParameters(\n\t\t\t\t\tnodeType.properties,\n\t\t\t\t\tnode.parameters,\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tnode,\n\t\t\t\t);\n\t\t\t\tconst oldNodeParameters = Object.assign({}, nodeParameters);\n\n\t\t\t\t// Copy the data because it is the data of vuex so make sure that\n\t\t\t\t// we do not edit it directly\n\t\t\t\tnodeParameters = deepCopy(nodeParameters);\n\n\t\t\t\t// Remove the 'parameters.' from the beginning to just have the\n\t\t\t\t// actual parameter name\n\t\t\t\tconst parameterPath = parameterData.name.split('.').slice(1).join('.');\n\n\t\t\t\t// Check if the path is supposed to change an array and if so get\n\t\t\t\t// the needed data like path and index\n\t\t\t\tconst parameterPathArray = parameterPath.match(/(.*)\\[(\\d+)\\]$/);\n\n\t\t\t\t// Apply the new value\n\t\t\t\tif (parameterData.value === undefined && parameterPathArray !== null) {\n\t\t\t\t\t// Delete array item\n\t\t\t\t\tconst path = parameterPathArray[1];\n\t\t\t\t\tconst index = parameterPathArray[2];\n\t\t\t\t\tconst data = get(nodeParameters, path);\n\n\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\tdata.splice(parseInt(index, 10), 1);\n\t\t\t\t\t\tset(nodeParameters as object, path, data);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (newValue === undefined) {\n\t\t\t\t\t\tunset(nodeParameters as object, parameterPath);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tset(nodeParameters as object, parameterPath, newValue);\n\t\t\t\t\t}\n\t\t\t\t\t// If value is updated, remove parameter values that have invalid options\n\t\t\t\t\t// so getNodeParameters checks don't fail\n\t\t\t\t\tthis.removeMismatchedOptionValues(nodeType, nodeParameters, {\n\t\t\t\t\t\tname: parameterPath,\n\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Get the parameters with the now new defaults according to the\n\t\t\t\t// from the user actually defined parameters\n\t\t\t\tnodeParameters = NodeHelpers.getNodeParameters(\n\t\t\t\t\tnodeType.properties,\n\t\t\t\t\tnodeParameters as INodeParameters,\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t\tnode,\n\t\t\t\t);\n\n\t\t\t\tfor (const key of Object.keys(nodeParameters as object)) {\n\t\t\t\t\tif (nodeParameters && nodeParameters[key] !== null && nodeParameters[key] !== undefined) {\n\t\t\t\t\t\tthis.setValue(`parameters.${key}`, nodeParameters[key] as string);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Update the data in vuex\n\t\t\t\tconst updateInformation: IUpdateInformation = {\n\t\t\t\t\tname: node.name,\n\t\t\t\t\tvalue: nodeParameters,\n\t\t\t\t};\n\n\t\t\t\tthis.workflowsStore.setNodeParameters(updateInformation);\n\n\t\t\t\tvoid this.externalHooks.run('nodeSettings.valueChanged', {\n\t\t\t\t\tparameterPath,\n\t\t\t\t\tnewValue,\n\t\t\t\t\tparameters: this.parameters,\n\t\t\t\t\toldNodeParameters,\n\t\t\t\t});\n\n\t\t\t\tthis.nodeHelpers.updateNodeParameterIssuesByName(node.name);\n\t\t\t\tthis.nodeHelpers.updateNodeCredentialIssuesByName(node.name);\n\t\t\t\tthis.$telemetry.trackNodeParametersValuesChange(nodeType.name, parameterData);\n\t\t\t} else {\n\t\t\t\t// A property on the node itself changed\n\n\t\t\t\t// Update data in settings\n\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t[parameterData.name]: newValue,\n\t\t\t\t};\n\n\t\t\t\t// Update data in vuex\n\t\t\t\tconst updateInformation = {\n\t\t\t\t\tname: node.name,\n\t\t\t\t\tkey: parameterData.name,\n\t\t\t\t\tvalue: newValue,\n\t\t\t\t};\n\n\t\t\t\tthis.workflowsStore.setNodeValue(updateInformation);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Removes node values that are not valid options for the given parameter.\n\t\t * This can happen when there are multiple node parameters with the same name\n\t\t * but different options and display conditions\n\t\t * @param nodeType The node type description\n\t\t * @param nodeParameterValues Current node parameter values\n\t\t * @param updatedParameter The parameter that was updated. Will be used to determine which parameters to remove based on their display conditions and option values\n\t\t */\n\t\tremoveMismatchedOptionValues(\n\t\t\tnodeType: INodeTypeDescription,\n\t\t\tnodeParameterValues: INodeParameters | null,\n\t\t\tupdatedParameter: { name: string; value: NodeParameterValue },\n\t\t) {\n\t\t\tnodeType.properties.forEach((prop) => {\n\t\t\t\tconst displayOptions = prop.displayOptions;\n\t\t\t\t// Not processing parameters that are not set or don't have options\n\t\t\t\tif (!nodeParameterValues?.hasOwnProperty(prop.name) || !displayOptions || !prop.options) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Only process the parameters that depend on the updated parameter\n\t\t\t\tconst showCondition = displayOptions.show?.[updatedParameter.name];\n\t\t\t\tconst hideCondition = displayOptions.hide?.[updatedParameter.name];\n\t\t\t\tif (showCondition === undefined && hideCondition === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet hasValidOptions = true;\n\n\t\t\t\t// Every value should be a possible option\n\t\t\t\tif (isINodePropertyCollectionList(prop.options) || isINodePropertiesList(prop.options)) {\n\t\t\t\t\thasValidOptions = Object.keys(nodeParameterValues).every(\n\t\t\t\t\t\t(key) => (prop.options ?? []).find((option) => option.name === key) !== undefined,\n\t\t\t\t\t);\n\t\t\t\t} else if (isINodePropertyOptionsList(prop.options)) {\n\t\t\t\t\thasValidOptions = !!prop.options.find(\n\t\t\t\t\t\t(option) => option.value === nodeParameterValues[prop.name],\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (!hasValidOptions && displayParameter(nodeParameterValues, prop, this.node)) {\n\t\t\t\t\tunset(nodeParameterValues as object, prop.name);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * Sets the values of the active node in the internal settings variables\n\t\t */\n\t\tsetNodeValues() {\n\t\t\t// No node selected\n\t\t\tif (!this.node) {\n\t\t\t\tthis.nodeValuesInitialized = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.nodeType !== null) {\n\t\t\t\tthis.nodeValid = true;\n\n\t\t\t\tconst foundNodeSettings = [];\n\t\t\t\tif (this.node.color) {\n\t\t\t\t\tfoundNodeSettings.push('color');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tcolor: this.node.color,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.notes) {\n\t\t\t\t\tfoundNodeSettings.push('notes');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tnotes: this.node.notes,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.alwaysOutputData) {\n\t\t\t\t\tfoundNodeSettings.push('alwaysOutputData');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\talwaysOutputData: this.node.alwaysOutputData,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.executeOnce) {\n\t\t\t\t\tfoundNodeSettings.push('executeOnce');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\texecuteOnce: this.node.executeOnce,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.continueOnFail) {\n\t\t\t\t\tfoundNodeSettings.push('onError');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tonError: 'continueRegularOutput',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.onError) {\n\t\t\t\t\tfoundNodeSettings.push('onError');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tonError: this.node.onError,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.notesInFlow) {\n\t\t\t\t\tfoundNodeSettings.push('notesInFlow');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tnotesInFlow: this.node.notesInFlow,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.retryOnFail) {\n\t\t\t\t\tfoundNodeSettings.push('retryOnFail');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tretryOnFail: this.node.retryOnFail,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.maxTries) {\n\t\t\t\t\tfoundNodeSettings.push('maxTries');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\tmaxTries: this.node.maxTries,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.node.waitBetweenTries) {\n\t\t\t\t\tfoundNodeSettings.push('waitBetweenTries');\n\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\twaitBetweenTries: this.node.waitBetweenTries,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Set default node settings\n\t\t\t\tfor (const nodeSetting of this.nodeSettings) {\n\t\t\t\t\tif (!foundNodeSettings.includes(nodeSetting.name)) {\n\t\t\t\t\t\t// Set default value\n\t\t\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\t\t\t[nodeSetting.name]: nodeSetting.default,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.nodeValues = {\n\t\t\t\t\t...this.nodeValues,\n\t\t\t\t\tparameters: deepCopy(this.node.parameters),\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tthis.nodeValid = false;\n\t\t\t}\n\n\t\t\tthis.nodeValuesInitialized = true;\n\t\t},\n\t\tonMissingNodeTextClick(event: MouseEvent) {\n\t\t\tif ((event.target as Element).localName === 'a') {\n\t\t\t\tthis.$telemetry.track('user clicked cnr browse button', {\n\t\t\t\t\tsource: 'cnr missing node modal',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tonMissingNodeLearnMoreLinkClick() {\n\t\t\tthis.$telemetry.track('user clicked cnr docs link', {\n\t\t\t\tsource: 'missing node modal source',\n\t\t\t\tpackage_name: this.node?.type.split('.')[0],\n\t\t\t\tnode_type: this.node?.type,\n\t\t\t});\n\t\t},\n\t\tonStopExecution() {\n\t\t\tthis.$emit('stopExecution');\n\t\t},\n\t\topenSettings() {\n\t\t\tthis.openPanel = 'settings';\n\t\t},\n\t\tonTabSelect(tab: 'params' | 'settings') {\n\t\t\tthis.openPanel = tab;\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.header {\n\tbackground-color: var(--color-background-base);\n}\n\n.warningIcon {\n\tcolor: var(--color-text-lighter);\n\tfont-size: var(--font-size-2xl);\n}\n\n.descriptionContainer {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.node-settings {\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n\tbackground-color: var(--color-background-xlight);\n\theight: 100%;\n\twidth: 100%;\n\n\t.no-parameters {\n\t\tmargin-top: var(--spacing-xs);\n\t}\n\n\t.header-side-menu {\n\t\tpadding: var(--spacing-s) var(--spacing-s) var(--spacing-s) var(--spacing-s);\n\t\tfont-size: var(--font-size-l);\n\t\tdisplay: flex;\n\n\t\t.node-name {\n\t\t\tpadding-top: var(--spacing-5xs);\n\t\t\tflex-grow: 1;\n\t\t}\n\t}\n\n\t.node-is-not-valid {\n\t\theight: 75%;\n\t\tpadding: 10px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\ttext-align: center;\n\t\tline-height: var(--font-line-height-regular);\n\t}\n\n\t.node-parameters-wrapper {\n\t\toverflow-y: auto;\n\t\tpadding: 0 var(--spacing-m) var(--spacing-l) var(--spacing-m);\n\t\tflex-grow: 1;\n\t}\n\n\t&.dragging {\n\t\tborder-color: var(--color-primary);\n\t\tbox-shadow: 0px 6px 16px rgba(255, 74, 51, 0.15);\n\t}\n}\n\n.parameter-content {\n\tfont-size: 0.9em;\n\tmargin-right: -15px;\n\tmargin-left: -15px;\n\tinput {\n\t\twidth: calc(100% - 35px);\n\t\tpadding: 5px;\n\t}\n\tselect {\n\t\twidth: calc(100% - 20px);\n\t\tpadding: 5px;\n\t}\n\n\t&:before {\n\t\tdisplay: table;\n\t\tcontent: ' ';\n\t\tposition: relative;\n\t\tbox-sizing: border-box;\n\t\tclear: both;\n\t}\n}\n\n.parameter-wrapper {\n\tpadding: 0 1em;\n}\n\n.color-reset-button-wrapper {\n\tposition: relative;\n}\n.color-reset-button {\n\tposition: absolute;\n\tright: 7px;\n\ttop: -25px;\n}\n\n.node-version {\n\tborder-top: var(--border-base);\n\tfont-size: var(--font-size-xs);\n\tfont-size: var(--font-size-2xs);\n\tpadding: var(--spacing-xs) 0 var(--spacing-2xs) 0;\n\tcolor: var(--color-text-light);\n}\n\n.parameter-value {\n\tinput.expression {\n\t\tborder-style: dashed;\n\t\tborder-color: #ff9600;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\tbox-sizing: border-box;\n\t\tbackground-color: #793300;\n\t}\n}\n</style>\n","<template>\n\t<component\n\t\t:is=\"tag\"\n\t\tref=\"wrapper\"\n\t\t:class=\"{ [$style.dragging]: isDragging }\"\n\t\t@mousedown=\"onDragStart\"\n\t>\n\t\t<slot :is-dragging=\"isDragging\"></slot>\n\n\t\t<Teleport to=\"body\">\n\t\t\t<div v-show=\"isDragging\" ref=\"draggable\" :class=\"$style.draggable\" :style=\"draggableStyle\">\n\t\t\t\t<slot name=\"preview\" :can-drop=\"canDrop\" :el=\"draggingEl\"></slot>\n\t\t\t</div>\n\t\t</Teleport>\n\t</component>\n</template>\n\n<script lang=\"ts\">\nimport type { XYPosition } from '@/Interface';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { mapStores } from 'pinia';\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tname: 'Draggable',\n\tprops: {\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdata: {\n\t\t\ttype: String,\n\t\t},\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'div',\n\t\t},\n\t\ttargetDataKey: {\n\t\t\ttype: String,\n\t\t},\n\t},\n\tdata() {\n\t\tconst draggablePosition = {\n\t\t\tx: -100,\n\t\t\ty: -100,\n\t\t};\n\n\t\treturn {\n\t\t\tisDragging: false,\n\t\t\tdraggablePosition,\n\t\t\tdraggingEl: null as null | HTMLElement,\n\t\t\tdraggableStyle: {\n\t\t\t\ttransform: `translate(${draggablePosition.x}px, ${draggablePosition.y}px)`,\n\t\t\t},\n\t\t\tanimationFrameId: 0,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNDVStore),\n\t\tcanDrop(): boolean {\n\t\t\treturn this.ndvStore.canDraggableDrop;\n\t\t},\n\t\tstickyPosition(): XYPosition | null {\n\t\t\treturn this.ndvStore.draggableStickyPos;\n\t\t},\n\t},\n\tmethods: {\n\t\tsetDraggableStyle() {\n\t\t\tthis.draggableStyle = {\n\t\t\t\ttransform: `translate(${this.draggablePosition.x}px, ${this.draggablePosition.y}px)`,\n\t\t\t};\n\t\t},\n\t\tonDragStart(e: MouseEvent) {\n\t\t\tif (this.disabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.draggingEl = e.target as HTMLElement;\n\t\t\tif (this.targetDataKey && this.draggingEl.dataset?.target !== this.targetDataKey) {\n\t\t\t\tthis.draggingEl = this.draggingEl.closest(\n\t\t\t\t\t`[data-target=\"${this.targetDataKey}\"]`,\n\t\t\t\t) as HTMLElement;\n\t\t\t}\n\n\t\t\tif (this.targetDataKey && this.draggingEl?.dataset?.target !== this.targetDataKey) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tthis.isDragging = false;\n\t\t\tthis.draggablePosition = { x: e.pageX, y: e.pageY };\n\t\t\tthis.setDraggableStyle();\n\n\t\t\twindow.addEventListener('mousemove', this.onDrag);\n\t\t\twindow.addEventListener('mouseup', this.onDragEnd);\n\n\t\t\t// blur so that any focused inputs update value\n\t\t\tconst activeElement = document.activeElement as HTMLElement;\n\t\t\tif (activeElement) {\n\t\t\t\tactiveElement.blur();\n\t\t\t}\n\t\t},\n\t\tonDrag(e: MouseEvent) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tif (this.disabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!this.isDragging) {\n\t\t\t\tthis.isDragging = true;\n\n\t\t\t\tconst data =\n\t\t\t\t\tthis.targetDataKey && this.draggingEl ? this.draggingEl.dataset.value : this.data || '';\n\t\t\t\tthis.ndvStore.draggableStartDragging({\n\t\t\t\t\ttype: this.type,\n\t\t\t\t\tdata: data || '',\n\t\t\t\t\tdimensions: this.draggingEl?.getBoundingClientRect() ?? null,\n\t\t\t\t});\n\n\t\t\t\tthis.$emit('dragstart', this.draggingEl);\n\t\t\t\tdocument.body.style.cursor = 'grabbing';\n\t\t\t}\n\n\t\t\tthis.animationFrameId = window.requestAnimationFrame(() => {\n\t\t\t\tif (this.canDrop && this.stickyPosition) {\n\t\t\t\t\tthis.draggablePosition = { x: this.stickyPosition[0], y: this.stickyPosition[1] };\n\t\t\t\t} else {\n\t\t\t\t\tthis.draggablePosition = { x: e.pageX, y: e.pageY };\n\t\t\t\t}\n\t\t\t\tthis.setDraggableStyle();\n\t\t\t\tthis.$emit('drag', this.draggablePosition);\n\t\t\t});\n\t\t},\n\t\tonDragEnd() {\n\t\t\tif (this.disabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdocument.body.style.cursor = 'unset';\n\t\t\twindow.removeEventListener('mousemove', this.onDrag);\n\t\t\twindow.removeEventListener('mouseup', this.onDragEnd);\n\t\t\twindow.cancelAnimationFrame(this.animationFrameId);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.$emit('dragend', this.draggingEl);\n\t\t\t\tthis.isDragging = false;\n\t\t\t\tthis.draggingEl = null;\n\t\t\t\tthis.ndvStore.draggableStopDragging();\n\t\t\t}, 0);\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.dragging {\n\tvisibility: visible;\n\tcursor: grabbing;\n}\n\n.draggable {\n\tposition: fixed;\n\tz-index: 9999999;\n\ttop: 0;\n\tleft: 0;\n}\n\n.draggable-data-transfer {\n\twidth: 0;\n\theight: 0;\n}\n</style>\n","<template>\n\t<Draggable\n\t\ttype=\"panel-resize\"\n\t\t:class=\"$style.dragContainer\"\n\t\t@drag=\"onDrag\"\n\t\t@dragstart=\"onDragStart\"\n\t\t@dragend=\"onDragEnd\"\n\t>\n\t\t<template #default=\"{ isDragging }\">\n\t\t\t<div :class=\"{ [$style.dragButton]: true }\">\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"canMoveLeft\"\n\t\t\t\t\t:class=\"{ [$style.leftArrow]: true, [$style.visible]: isDragging }\"\n\t\t\t\t>\n\t\t\t\t\t<font-awesome-icon icon=\"arrow-left\" />\n\t\t\t\t</span>\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"canMoveRight\"\n\t\t\t\t\t:class=\"{ [$style.rightArrow]: true, [$style.visible]: isDragging }\"\n\t\t\t\t>\n\t\t\t\t\t<font-awesome-icon icon=\"arrow-right\" />\n\t\t\t\t</span>\n\t\t\t\t<div :class=\"$style.grid\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</Draggable>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport Draggable from './Draggable.vue';\n\nexport default defineComponent({\n\tcomponents: {\n\t\tDraggable,\n\t},\n\tprops: {\n\t\tcanMoveRight: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tcanMoveLeft: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tmethods: {\n\t\tonDrag(e: { x: number; y: number }) {\n\t\t\tthis.$emit('drag', e);\n\t\t},\n\t\tonDragStart() {\n\t\t\tthis.$emit('dragstart');\n\t\t},\n\t\tonDragEnd() {\n\t\t\tthis.$emit('dragend');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.dragContainer {\n\tpointer-events: all;\n}\n.dragButton {\n\tbackground-color: var(--color-background-base);\n\twidth: 64px;\n\theight: 21px;\n\tborder-top-left-radius: var(--border-radius-base);\n\tborder-top-right-radius: var(--border-radius-base);\n\tcursor: grab;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\toverflow: visible;\n\tposition: relative;\n\tz-index: 3;\n\n\t&:hover {\n\t\t.leftArrow,\n\t\t.rightArrow {\n\t\t\tvisibility: visible;\n\t\t}\n\t}\n}\n\n.visible {\n\tvisibility: visible !important;\n}\n\n.arrow {\n\tposition: absolute;\n\tcolor: var(--color-background-xlight);\n\tfont-size: var(--font-size-3xs);\n\tvisibility: hidden;\n\ttop: 0;\n}\n\n.leftArrow {\n\tcomposes: arrow;\n\tleft: -16px;\n}\n\n.rightArrow {\n\tcomposes: arrow;\n\tright: -16px;\n}\n\n.grid {\n\t> div {\n\t\tdisplay: flex;\n\n\t\t&:first-child {\n\t\t\t> div {\n\t\t\t\tmargin-bottom: 2px;\n\t\t\t}\n\t\t}\n\n\t\t> div {\n\t\t\theight: 2px;\n\t\t\twidth: 2px;\n\t\t\tborder-radius: 50%;\n\t\t\tbackground-color: var(--color-foreground-xdark);\n\t\t\tmargin-right: 4px;\n\n\t\t\t&:last-child {\n\t\t\t\tmargin-right: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<aside :class=\"$style.floatingNodes\">\n\t\t<ul\n\t\t\tv-for=\"connectionGroup in connectionGroups\"\n\t\t\t:key=\"connectionGroup\"\n\t\t\t:class=\"[$style.nodesList, $style[connectionGroup]]\"\n\t\t>\n\t\t\t<template v-for=\"{ node, nodeType } in connectedNodes[connectionGroup]\">\n\t\t\t\t<n8n-tooltip\n\t\t\t\t\tv-if=\"node && nodeType\"\n\t\t\t\t\t:key=\"node.name\"\n\t\t\t\t\t:placement=\"tooltipPositionMapper[connectionGroup]\"\n\t\t\t\t\t:teleported=\"false\"\n\t\t\t\t\t:offset=\"60\"\n\t\t\t\t>\n\t\t\t\t\t<template #content>{{ node.name }}</template>\n\n\t\t\t\t\t<li\n\t\t\t\t\t\t:class=\"$style.connectedNode\"\n\t\t\t\t\t\tdata-test-id=\"floating-node\"\n\t\t\t\t\t\t:data-node-name=\"node.name\"\n\t\t\t\t\t\t:data-node-placement=\"connectionGroup\"\n\t\t\t\t\t\t@click=\"$emit('switchSelectedNode', node.name)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<NodeIcon\n\t\t\t\t\t\t\t:node-type=\"nodeType\"\n\t\t\t\t\t\t\t:node-name=\"node.name\"\n\t\t\t\t\t\t\t:tooltip-position=\"tooltipPositionMapper[connectionGroup]\"\n\t\t\t\t\t\t\t:size=\"35\"\n\t\t\t\t\t\t\tcircle\n\t\t\t\t\t\t/>\n\t\t\t\t\t</li>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</template>\n\t\t</ul>\n\t</aside>\n</template>\n\n<script setup lang=\"ts\">\nimport type { INodeUi } from '@/Interface';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { computed, onMounted, onBeforeUnmount } from 'vue';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport type { INodeTypeDescription } from 'n8n-workflow';\n\ninterface Props {\n\trootNode: INodeUi;\n}\nconst enum FloatingNodePosition {\n\ttop = 'outputSub',\n\tright = 'outputMain',\n\tleft = 'inputMain',\n}\nconst props = defineProps<Props>();\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst workflow = workflowsStore.getCurrentWorkflow();\nconst emit = defineEmits(['switchSelectedNode']);\n\ninterface NodeConfig {\n\tnode: INodeUi;\n\tnodeType: INodeTypeDescription;\n}\nfunction moveNodeDirection(direction: FloatingNodePosition) {\n\tconst matchedDirectionNode = connectedNodes.value[direction][0];\n\tif (matchedDirectionNode) {\n\t\temit('switchSelectedNode', matchedDirectionNode.node.name);\n\t}\n}\n\nfunction onKeyDown(e: KeyboardEvent) {\n\tif (e.shiftKey && e.altKey && (e.ctrlKey || e.metaKey)) {\n\t\t/* eslint-disable @typescript-eslint/naming-convention */\n\t\tconst mapper = {\n\t\t\tArrowUp: FloatingNodePosition.top,\n\t\t\tArrowRight: FloatingNodePosition.right,\n\t\t\tArrowLeft: FloatingNodePosition.left,\n\t\t};\n\t\t/* eslint-enable @typescript-eslint/naming-convention */\n\n\t\tconst matchingDirection = mapper[e.key as keyof typeof mapper] || null;\n\t\tif (matchingDirection) {\n\t\t\tmoveNodeDirection(matchingDirection);\n\t\t}\n\t}\n}\nfunction getINodesFromNames(names: string[]): NodeConfig[] {\n\treturn names\n\t\t.map((name) => {\n\t\t\tconst node = workflowsStore.getNodeByName(name);\n\t\t\tif (node) {\n\t\t\t\tconst nodeType = nodeTypesStore.getNodeType(node.type);\n\t\t\t\tif (nodeType) {\n\t\t\t\t\treturn { node, nodeType };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t})\n\t\t.filter((n): n is NodeConfig => n !== null);\n}\nconst connectedNodes = computed<\n\tRecord<FloatingNodePosition, Array<{ node: INodeUi; nodeType: INodeTypeDescription }>>\n>(() => {\n\tconst rootName = props.rootNode.name;\n\treturn {\n\t\t[FloatingNodePosition.top]: getINodesFromNames(\n\t\t\tworkflow.getChildNodes(rootName, 'ALL_NON_MAIN'),\n\t\t),\n\t\t[FloatingNodePosition.right]: getINodesFromNames(workflow.getChildNodes(rootName, 'main', 1)),\n\t\t[FloatingNodePosition.left]: getINodesFromNames(workflow.getParentNodes(rootName, 'main', 1)),\n\t};\n});\n\nconst connectionGroups = [\n\tFloatingNodePosition.top,\n\tFloatingNodePosition.right,\n\tFloatingNodePosition.left,\n];\nconst tooltipPositionMapper = {\n\t[FloatingNodePosition.top]: 'bottom',\n\t[FloatingNodePosition.right]: 'left',\n\t[FloatingNodePosition.left]: 'right',\n} as const;\n\nonMounted(() => {\n\tdocument.addEventListener('keydown', onKeyDown, true);\n});\n\nonBeforeUnmount(() => {\n\tdocument.removeEventListener('keydown', onKeyDown, true);\n});\ndefineExpose({\n\tmoveNodeDirection,\n});\n</script>\n\n<style lang=\"scss\" module>\n.floatingNodes {\n\tposition: fixed;\n\tbottom: 0;\n\ttop: 0;\n\tright: 0;\n\tleft: 0;\n\tz-index: 10;\n\tpointer-events: none;\n}\n.floatingNodes {\n\tright: 0;\n}\n\n.nodesList {\n\tlist-style: none;\n\tpadding: 0;\n\tposition: absolute;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-direction: column;\n\twidth: min-content;\n\tmargin: auto;\n\ttransform-origin: center;\n\tgap: var(--spacing-s);\n\ttransition: transform 0.2s ease-in-out;\n\n\t&.inputSub,\n\t&.outputSub {\n\t\tright: 0;\n\t\tleft: 0;\n\t\tflex-direction: row;\n\t}\n\t&.outputSub {\n\t\ttop: 0;\n\t}\n\t&.inputSub {\n\t\tbottom: 0;\n\t}\n\t&.outputMain,\n\t&.inputMain {\n\t\ttop: 0;\n\t\tbottom: 0;\n\t}\n\t&.outputMain {\n\t\tright: 0;\n\t}\n\t&.inputMain {\n\t\tleft: 0;\n\t}\n\n\t&.outputMain {\n\t\ttransform: translateX(50%);\n\t}\n\t&.outputSub {\n\t\ttransform: translateY(-50%);\n\t}\n\t&.inputMain {\n\t\ttransform: translateX(-50%);\n\t}\n\t&.inputSub {\n\t\ttransform: translateY(50%);\n\t}\n}\n.connectedNode {\n\tborder: var(--border-base);\n\tbackground-color: var(--color-node-background);\n\tborder-radius: 100%;\n\tpadding: var(--spacing-s);\n\tcursor: pointer;\n\tpointer-events: all;\n\ttransition: transform 0.2s cubic-bezier(0.19, 1, 0.22, 1);\n\tposition: relative;\n\ttransform: scale(0.8);\n\tdisplay: flex;\n\tjustify-self: center;\n\talign-self: center;\n\n\t&::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\ttop: -35%;\n\t\tright: -30%;\n\t\tbottom: -35%;\n\t\tleft: -30%;\n\t\tz-index: -1;\n\t}\n\t.outputMain &,\n\t.inputMain & {\n\t\tborder-radius: var(--border-radius-large);\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\t.outputMain & {\n\t\t&:hover {\n\t\t\ttransform: scale(1.2) translateX(-50%);\n\t\t}\n\t}\n\t.outputSub & {\n\t\t&:hover {\n\t\t\ttransform: scale(1.2) translateY(50%);\n\t\t}\n\t}\n\t.inputMain & {\n\t\t&:hover {\n\t\t\ttransform: scale(1.2) translateX(50%);\n\t\t}\n\t}\n\t.inputSub & {\n\t\t&:hover {\n\t\t\ttransform: scale(1.2) translateY(-50%);\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div>\n\t\t<NDVFloatingNodes\n\t\t\tv-if=\"activeNode\"\n\t\t\t:root-node=\"activeNode\"\n\t\t\t@switch-selected-node=\"onSwitchSelectedNode\"\n\t\t/>\n\t\t<div v-if=\"!hideInputAndOutput\" :class=\"$style.inputPanel\" :style=\"inputPanelStyles\">\n\t\t\t<slot name=\"input\"></slot>\n\t\t</div>\n\t\t<div v-if=\"!hideInputAndOutput\" :class=\"$style.outputPanel\" :style=\"outputPanelStyles\">\n\t\t\t<slot name=\"output\"></slot>\n\t\t</div>\n\t\t<div :class=\"$style.mainPanel\" :style=\"mainPanelStyles\">\n\t\t\t<n8n-resize-wrapper\n\t\t\t\t:is-resizing-enabled=\"currentNodePaneType !== 'unknown'\"\n\t\t\t\t:width=\"relativeWidthToPx(mainPanelDimensions.relativeWidth)\"\n\t\t\t\t:min-width=\"MIN_PANEL_WIDTH\"\n\t\t\t\t:grid-size=\"20\"\n\t\t\t\t:supported-directions=\"supportedResizeDirections\"\n\t\t\t\t@resize=\"onResizeDebounced\"\n\t\t\t\t@resizestart=\"onResizeStart\"\n\t\t\t\t@resizeend=\"onResizeEnd\"\n\t\t\t>\n\t\t\t\t<div :class=\"$style.dragButtonContainer\">\n\t\t\t\t\t<PanelDragButton\n\t\t\t\t\t\tv-if=\"!hideInputAndOutput && isDraggable\"\n\t\t\t\t\t\t:class=\"{ [$style.draggable]: true, [$style.visible]: isDragging }\"\n\t\t\t\t\t\t:can-move-left=\"canMoveLeft\"\n\t\t\t\t\t\t:can-move-right=\"canMoveRight\"\n\t\t\t\t\t\t@dragstart=\"onDragStart\"\n\t\t\t\t\t\t@drag=\"onDrag\"\n\t\t\t\t\t\t@dragend=\"onDragEnd\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div :class=\"{ [$style.mainPanelInner]: true, [$style.dragging]: isDragging }\">\n\t\t\t\t\t<slot name=\"main\" />\n\t\t\t\t</div>\n\t\t\t</n8n-resize-wrapper>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { PropType } from 'vue';\nimport { mapStores } from 'pinia';\nimport { get } from 'lodash-es';\nimport { useStorage } from '@/composables/useStorage';\n\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport PanelDragButton from './PanelDragButton.vue';\n\nimport { LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH, MAIN_NODE_PANEL_WIDTH } from '@/constants';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { ndvEventBus } from '@/event-bus';\nimport NDVFloatingNodes from '@/components/NDVFloatingNodes.vue';\nimport { useDebounce } from '@/composables/useDebounce';\n\nconst SIDE_MARGIN = 24;\nconst SIDE_PANELS_MARGIN = 80;\nconst MIN_PANEL_WIDTH = 280;\nconst PANEL_WIDTH = 320;\nconst PANEL_WIDTH_LARGE = 420;\n\nconst initialMainPanelWidth: { [key: string]: number } = {\n\tregular: MAIN_NODE_PANEL_WIDTH,\n\tdragless: MAIN_NODE_PANEL_WIDTH,\n\tunknown: MAIN_NODE_PANEL_WIDTH,\n\tinputless: MAIN_NODE_PANEL_WIDTH,\n\twide: MAIN_NODE_PANEL_WIDTH * 2,\n};\n\nexport default defineComponent({\n\tname: 'NDVDraggablePanels',\n\tcomponents: {\n\t\tPanelDragButton,\n\t\tNDVFloatingNodes,\n\t},\n\tprops: {\n\t\tisDraggable: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\thideInputAndOutput: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tposition: {\n\t\t\ttype: Number,\n\t\t},\n\t\tnodeType: {\n\t\t\ttype: Object as PropType<INodeTypeDescription | null>,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\tsetup() {\n\t\tconst { callDebounced } = useDebounce();\n\n\t\treturn { callDebounced };\n\t},\n\tdata(): {\n\t\twindowWidth: number;\n\t\tisDragging: boolean;\n\t\tMIN_PANEL_WIDTH: number;\n\t\tinitialized: boolean;\n\t} {\n\t\treturn {\n\t\t\twindowWidth: 1,\n\t\t\tisDragging: false,\n\t\t\tMIN_PANEL_WIDTH,\n\t\t\tinitialized: false,\n\t\t};\n\t},\n\tmounted() {\n\t\tthis.setTotalWidth();\n\n\t\t/*\n\t\t\tOnly set(or restore) initial position if `mainPanelDimensions`\n\t\t\tis at the default state({relativeLeft:1, relativeRight: 1, relativeWidth: 1}) to make sure we use store values if they are set\n\t\t*/\n\t\tif (\n\t\t\tthis.mainPanelDimensions.relativeLeft === 1 &&\n\t\t\tthis.mainPanelDimensions.relativeRight === 1\n\t\t) {\n\t\t\tthis.setMainPanelWidth();\n\t\t\tthis.setPositions(this.getInitialLeftPosition(this.mainPanelDimensions.relativeWidth));\n\t\t\tthis.restorePositionData();\n\t\t}\n\n\t\twindow.addEventListener('resize', this.setTotalWidth);\n\t\tthis.$emit('init', { position: this.mainPanelDimensions.relativeLeft });\n\t\tsetTimeout(() => {\n\t\t\tthis.initialized = true;\n\t\t}, 0);\n\n\t\tndvEventBus.on('setPositionByName', this.setPositionByName);\n\t},\n\tbeforeUnmount() {\n\t\twindow.removeEventListener('resize', this.setTotalWidth);\n\t\tndvEventBus.off('setPositionByName', this.setPositionByName);\n\t},\n\tcomputed: {\n\t\t...mapStores(useNDVStore),\n\t\tmainPanelDimensions(): {\n\t\t\trelativeWidth: number;\n\t\t\trelativeLeft: number;\n\t\t\trelativeRight: number;\n\t\t} {\n\t\t\treturn this.ndvStore.getMainPanelDimensions(this.currentNodePaneType);\n\t\t},\n\t\tactiveNode() {\n\t\t\treturn this.ndvStore.activeNode;\n\t\t},\n\t\tsupportedResizeDirections(): string[] {\n\t\t\tconst supportedDirections = ['right'];\n\n\t\t\tif (this.isDraggable) supportedDirections.push('left');\n\t\t\treturn supportedDirections;\n\t\t},\n\t\tcurrentNodePaneType(): string {\n\t\t\tif (!this.hasInputSlot) return 'inputless';\n\t\t\tif (!this.isDraggable) return 'dragless';\n\t\t\tif (this.nodeType === null) return 'unknown';\n\t\t\treturn get(this, 'nodeType.parameterPane') || 'regular';\n\t\t},\n\t\thasInputSlot(): boolean {\n\t\t\treturn this.$slots.input !== undefined;\n\t\t},\n\t\tinputPanelMargin(): number {\n\t\t\treturn this.pxToRelativeWidth(SIDE_PANELS_MARGIN);\n\t\t},\n\t\tminWindowWidth(): number {\n\t\t\treturn 2 * (SIDE_MARGIN + SIDE_PANELS_MARGIN) + MIN_PANEL_WIDTH;\n\t\t},\n\t\tminimumLeftPosition(): number {\n\t\t\tif (this.windowWidth < this.minWindowWidth) return this.pxToRelativeWidth(1);\n\n\t\t\tif (!this.hasInputSlot) return this.pxToRelativeWidth(SIDE_MARGIN);\n\t\t\treturn this.pxToRelativeWidth(SIDE_MARGIN + 20) + this.inputPanelMargin;\n\t\t},\n\t\tmaximumRightPosition(): number {\n\t\t\tif (this.windowWidth < this.minWindowWidth) return this.pxToRelativeWidth(1);\n\n\t\t\treturn this.pxToRelativeWidth(SIDE_MARGIN + 20) + this.inputPanelMargin;\n\t\t},\n\t\tcanMoveLeft(): boolean {\n\t\t\treturn this.mainPanelDimensions.relativeLeft > this.minimumLeftPosition;\n\t\t},\n\t\tcanMoveRight(): boolean {\n\t\t\treturn this.mainPanelDimensions.relativeRight > this.maximumRightPosition;\n\t\t},\n\t\tmainPanelStyles(): { left: string; right: string } {\n\t\t\treturn {\n\t\t\t\tleft: `${this.relativeWidthToPx(this.mainPanelDimensions.relativeLeft)}px`,\n\t\t\t\tright: `${this.relativeWidthToPx(this.mainPanelDimensions.relativeRight)}px`,\n\t\t\t};\n\t\t},\n\t\tinputPanelStyles(): { right: string } {\n\t\t\treturn {\n\t\t\t\tright: `${this.relativeWidthToPx(this.calculatedPositions.inputPanelRelativeRight)}px`,\n\t\t\t};\n\t\t},\n\t\toutputPanelStyles(): { left: string; transform: string } {\n\t\t\treturn {\n\t\t\t\tleft: `${this.relativeWidthToPx(this.calculatedPositions.outputPanelRelativeLeft)}px`,\n\t\t\t\ttransform: `translateX(-${this.relativeWidthToPx(this.outputPanelRelativeTranslate)}px)`,\n\t\t\t};\n\t\t},\n\t\tcalculatedPositions(): { inputPanelRelativeRight: number; outputPanelRelativeLeft: number } {\n\t\t\tconst hasInput = this.$slots.input !== undefined;\n\t\t\tconst outputPanelRelativeLeft =\n\t\t\t\tthis.mainPanelDimensions.relativeLeft + this.mainPanelDimensions.relativeWidth;\n\n\t\t\tconst inputPanelRelativeRight = hasInput\n\t\t\t\t? 1 - outputPanelRelativeLeft + this.mainPanelDimensions.relativeWidth\n\t\t\t\t: 1 - this.pxToRelativeWidth(SIDE_MARGIN);\n\n\t\t\treturn {\n\t\t\t\tinputPanelRelativeRight,\n\t\t\t\toutputPanelRelativeLeft,\n\t\t\t};\n\t\t},\n\t\toutputPanelRelativeTranslate(): number {\n\t\t\tconst panelMinLeft = 1 - this.pxToRelativeWidth(MIN_PANEL_WIDTH + SIDE_MARGIN);\n\t\t\tconst currentRelativeLeftDelta =\n\t\t\t\tthis.calculatedPositions.outputPanelRelativeLeft - panelMinLeft;\n\t\t\treturn currentRelativeLeftDelta > 0 ? currentRelativeLeftDelta : 0;\n\t\t},\n\t\thasDoubleWidth(): boolean {\n\t\t\treturn get(this, 'nodeType.parameterPane') === 'wide';\n\t\t},\n\t\tfixedPanelWidth(): number {\n\t\t\tconst multiplier = this.hasDoubleWidth ? 2 : 1;\n\n\t\t\tif (this.windowWidth > 1700) {\n\t\t\t\treturn PANEL_WIDTH_LARGE * multiplier;\n\t\t\t}\n\n\t\t\treturn PANEL_WIDTH * multiplier;\n\t\t},\n\t\tisBelowMinWidthMainPanel(): boolean {\n\t\t\tconst minRelativeWidth = this.pxToRelativeWidth(MIN_PANEL_WIDTH);\n\t\t\treturn this.mainPanelDimensions.relativeWidth < minRelativeWidth;\n\t\t},\n\t},\n\twatch: {\n\t\twindowWidth(windowWidth) {\n\t\t\tconst minRelativeWidth = this.pxToRelativeWidth(MIN_PANEL_WIDTH);\n\t\t\t// Prevent the panel resizing below MIN_PANEL_WIDTH whhile maintaing position\n\t\t\tif (this.isBelowMinWidthMainPanel) {\n\t\t\t\tthis.setMainPanelWidth(minRelativeWidth);\n\t\t\t}\n\n\t\t\tconst isBelowMinLeft = this.minimumLeftPosition > this.mainPanelDimensions.relativeLeft;\n\t\t\tconst isMaxRight = this.maximumRightPosition > this.mainPanelDimensions.relativeRight;\n\n\t\t\t// When user is resizing from non-supported view(sub ~488px) we need to refit the panels\n\t\t\tif (windowWidth > this.minWindowWidth && isBelowMinLeft && isMaxRight) {\n\t\t\t\tthis.setMainPanelWidth(minRelativeWidth);\n\t\t\t\tthis.setPositions(this.getInitialLeftPosition(this.mainPanelDimensions.relativeWidth));\n\t\t\t}\n\n\t\t\tthis.setPositions(this.mainPanelDimensions.relativeLeft);\n\t\t},\n\t},\n\tmethods: {\n\t\tonSwitchSelectedNode(node: string) {\n\t\t\tthis.$emit('switchSelectedNode', node);\n\t\t},\n\t\tgetInitialLeftPosition(width: number) {\n\t\t\tif (this.currentNodePaneType === 'dragless')\n\t\t\t\treturn this.pxToRelativeWidth(SIDE_MARGIN + 1 + this.fixedPanelWidth);\n\n\t\t\treturn this.hasInputSlot ? 0.5 - width / 2 : this.minimumLeftPosition;\n\t\t},\n\t\tsetMainPanelWidth(relativeWidth?: number) {\n\t\t\tconst mainPanelRelativeWidth =\n\t\t\t\trelativeWidth || this.pxToRelativeWidth(initialMainPanelWidth[this.currentNodePaneType]);\n\n\t\t\tthis.ndvStore.setMainPanelDimensions({\n\t\t\t\tpanelType: this.currentNodePaneType,\n\t\t\t\tdimensions: {\n\t\t\t\t\trelativeWidth: mainPanelRelativeWidth,\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tsetPositions(relativeLeft: number) {\n\t\t\tconst mainPanelRelativeLeft =\n\t\t\t\trelativeLeft || 1 - this.calculatedPositions.inputPanelRelativeRight;\n\t\t\tconst mainPanelRelativeRight =\n\t\t\t\t1 - mainPanelRelativeLeft - this.mainPanelDimensions.relativeWidth;\n\n\t\t\tconst isMaxRight = this.maximumRightPosition > mainPanelRelativeRight;\n\t\t\tconst isMinLeft = this.minimumLeftPosition > mainPanelRelativeLeft;\n\t\t\tconst isInputless = this.currentNodePaneType === 'inputless';\n\n\t\t\tif (isMinLeft) {\n\t\t\t\tthis.ndvStore.setMainPanelDimensions({\n\t\t\t\t\tpanelType: this.currentNodePaneType,\n\t\t\t\t\tdimensions: {\n\t\t\t\t\t\trelativeLeft: this.minimumLeftPosition,\n\t\t\t\t\t\trelativeRight: 1 - this.mainPanelDimensions.relativeWidth - this.minimumLeftPosition,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isMaxRight) {\n\t\t\t\tthis.ndvStore.setMainPanelDimensions({\n\t\t\t\t\tpanelType: this.currentNodePaneType,\n\t\t\t\t\tdimensions: {\n\t\t\t\t\t\trelativeLeft: 1 - this.mainPanelDimensions.relativeWidth - this.maximumRightPosition,\n\t\t\t\t\t\trelativeRight: this.maximumRightPosition,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.ndvStore.setMainPanelDimensions({\n\t\t\t\tpanelType: this.currentNodePaneType,\n\t\t\t\tdimensions: {\n\t\t\t\t\trelativeLeft: isInputless ? this.minimumLeftPosition : mainPanelRelativeLeft,\n\t\t\t\t\trelativeRight: mainPanelRelativeRight,\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tsetPositionByName(position: 'minLeft' | 'maxRight' | 'initial') {\n\t\t\tconst positionByName: Record<string, number> = {\n\t\t\t\tminLeft: this.minimumLeftPosition,\n\t\t\t\tmaxRight: this.maximumRightPosition,\n\t\t\t\tinitial: this.getInitialLeftPosition(this.mainPanelDimensions.relativeWidth),\n\t\t\t};\n\n\t\t\tthis.setPositions(positionByName[position]);\n\t\t},\n\t\tpxToRelativeWidth(px: number) {\n\t\t\treturn px / this.windowWidth;\n\t\t},\n\t\trelativeWidthToPx(relativeWidth: number) {\n\t\t\treturn relativeWidth * this.windowWidth;\n\t\t},\n\t\tonResizeStart() {\n\t\t\tthis.setTotalWidth();\n\t\t},\n\t\tonResizeEnd() {\n\t\t\tthis.storePositionData();\n\t\t},\n\t\tonResizeDebounced(data: { direction: string; x: number; width: number }) {\n\t\t\tif (this.initialized) {\n\t\t\t\tvoid this.callDebounced(this.onResize, { debounceTime: 10, trailing: true }, data);\n\t\t\t}\n\t\t},\n\t\tonResize({ direction, x, width }: { direction: string; x: number; width: number }) {\n\t\t\tconst relativeDistance = this.pxToRelativeWidth(x);\n\t\t\tconst relativeWidth = this.pxToRelativeWidth(width);\n\n\t\t\tif (direction === 'left' && relativeDistance <= this.minimumLeftPosition) return;\n\t\t\tif (direction === 'right' && 1 - relativeDistance <= this.maximumRightPosition) return;\n\t\t\tif (width <= MIN_PANEL_WIDTH) return;\n\n\t\t\tthis.setMainPanelWidth(relativeWidth);\n\t\t\tthis.setPositions(\n\t\t\t\tdirection === 'left' ? relativeDistance : this.mainPanelDimensions.relativeLeft,\n\t\t\t);\n\t\t},\n\t\trestorePositionData() {\n\t\t\tconst storedPanelWidthData = useStorage(\n\t\t\t\t`${LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH}_${this.currentNodePaneType}`,\n\t\t\t).value;\n\n\t\t\tif (storedPanelWidthData) {\n\t\t\t\tconst parsedWidth = parseFloat(storedPanelWidthData);\n\t\t\t\tthis.setMainPanelWidth(parsedWidth);\n\t\t\t\tconst initialPosition = this.getInitialLeftPosition(parsedWidth);\n\n\t\t\t\tthis.setPositions(initialPosition);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tstorePositionData() {\n\t\t\tuseStorage(`${LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH}_${this.currentNodePaneType}`).value =\n\t\t\t\tthis.mainPanelDimensions.relativeWidth.toString();\n\t\t},\n\t\tonDragStart() {\n\t\t\tthis.isDragging = true;\n\t\t\tthis.$emit('dragstart', { position: this.mainPanelDimensions.relativeLeft });\n\t\t},\n\t\tonDrag(e: { x: number; y: number }) {\n\t\t\tconst relativeLeft = this.pxToRelativeWidth(e.x) - this.mainPanelDimensions.relativeWidth / 2;\n\n\t\t\tthis.setPositions(relativeLeft);\n\t\t},\n\t\tonDragEnd() {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.isDragging = false;\n\t\t\t\tthis.$emit('dragend', {\n\t\t\t\t\twindowWidth: this.windowWidth,\n\t\t\t\t\tposition: this.mainPanelDimensions.relativeLeft,\n\t\t\t\t});\n\t\t\t}, 0);\n\t\t\tthis.storePositionData();\n\t\t},\n\t\tsetTotalWidth() {\n\t\t\tthis.windowWidth = window.innerWidth;\n\t\t},\n\t\tclose() {\n\t\t\tthis.$emit('close');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.dataPanel {\n\tposition: absolute;\n\theight: calc(100% - 2 * var(--spacing-l));\n\tposition: absolute;\n\ttop: var(--spacing-l);\n\tz-index: 0;\n\tmin-width: 280px;\n}\n\n.inputPanel {\n\tcomposes: dataPanel;\n\tleft: var(--spacing-l);\n\n\t> * {\n\t\tborder-radius: var(--border-radius-large) 0 0 var(--border-radius-large);\n\t}\n}\n\n.outputPanel {\n\tcomposes: dataPanel;\n\tright: var(--spacing-l);\n\n\t> * {\n\t\tborder-radius: 0 var(--border-radius-large) var(--border-radius-large) 0;\n\t}\n}\n\n.mainPanel {\n\tposition: absolute;\n\theight: 100%;\n\n\t&:hover {\n\t\t.draggable {\n\t\t\tvisibility: visible;\n\t\t}\n\t}\n}\n\n.mainPanelInner {\n\theight: 100%;\n\tborder: var(--border-base);\n\tborder-radius: var(--border-radius-large);\n\tbox-shadow: 0 4px 16px rgb(50 61 85 / 10%);\n\toverflow: hidden;\n\n\t&.dragging {\n\t\tborder-color: var(--color-primary);\n\t\tbox-shadow: 0px 6px 16px rgba(255, 74, 51, 0.15);\n\t}\n}\n\n.draggable {\n\tvisibility: hidden;\n}\n\n.double-width {\n\tleft: 90%;\n}\n\n.dragButtonContainer {\n\tposition: absolute;\n\ttop: -12px;\n\twidth: 100%;\n\theight: 12px;\n\tdisplay: flex;\n\tjustify-content: center;\n\tpointer-events: none;\n\n\t.draggable {\n\t\tpointer-events: all;\n\t}\n\t&:hover .draggable {\n\t\tvisibility: visible;\n\t}\n}\n\n.visible {\n\tvisibility: visible;\n}\n</style>\n","<template>\n\t<iframe class=\"__html-display\" :srcdoc=\"sanitizedHtml\" />\n</template>\n\n<script lang=\"ts\">\nimport sanitizeHtml, { defaults, type IOptions as SanitizeOptions } from 'sanitize-html';\n\nconst sanitizeOptions: SanitizeOptions = {\n\tallowVulnerableTags: false,\n\tenforceHtmlBoundary: false,\n\tdisallowedTagsMode: 'discard',\n\tallowedTags: [...defaults.allowedTags, 'style', 'img', 'title'],\n\tallowedAttributes: {\n\t\t...defaults.allowedAttributes,\n\t\t'*': ['class', 'style'],\n\t},\n\ttransformTags: {\n\t\thead: '',\n\t},\n};\n\nexport default {\n\tname: 'RunDataHtml',\n\tprops: {\n\t\tinputHtml: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsanitizedHtml() {\n\t\t\treturn sanitizeHtml(this.inputHtml, sanitizeOptions);\n\t\t},\n\t},\n};\n</script>\n\n<style lang=\"scss\">\n.__html-display {\n\twidth: 100%;\n\theight: 100%;\n}\n</style>\n","<template>\n\t<span>\n\t\t<div v-if=\"isLoading\">Loading binary data...</div>\n\t\t<div v-else-if=\"error\">Error loading binary data</div>\n\t\t<span v-else>\n\t\t\t<video v-if=\"binaryData.fileType === 'video'\" controls autoplay>\n\t\t\t\t<source :src=\"embedSource\" :type=\"binaryData.mimeType\" />\n\t\t\t\t{{ $locale.baseText('binaryDataDisplay.yourBrowserDoesNotSupport') }}\n\t\t\t</video>\n\t\t\t<audio v-else-if=\"binaryData.fileType === 'audio'\" controls autoplay>\n\t\t\t\t<source :src=\"embedSource\" :type=\"binaryData.mimeType\" />\n\t\t\t\t{{ $locale.baseText('binaryDataDisplay.yourBrowserDoesNotSupport') }}\n\t\t\t</audio>\n\t\t\t<VueJsonPretty\n\t\t\t\tv-else-if=\"binaryData.fileType === 'json'\"\n\t\t\t\t:data=\"data\"\n\t\t\t\t:deep=\"3\"\n\t\t\t\t:show-length=\"true\"\n\t\t\t/>\n\t\t\t<RunDataHtml v-else-if=\"binaryData.fileType === 'html'\" :input-html=\"data\" />\n\t\t\t<embed v-else :src=\"embedSource\" class=\"binary-data\" :class=\"embedClass\" />\n\t\t</span>\n\t</span>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, computed } from 'vue';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { IBinaryData } from 'n8n-workflow';\nimport { jsonParse } from 'n8n-workflow';\nimport VueJsonPretty from 'vue-json-pretty';\nimport RunDataHtml from '@/components/RunDataHtml.vue';\n\nconst props = defineProps<{\n\tbinaryData: IBinaryData;\n}>();\n\nconst isLoading = ref(true);\nconst embedSource = ref('');\nconst error = ref(false);\nconst data = ref('');\n\nconst workflowsStore = useWorkflowsStore();\n\nconst embedClass = computed(() => {\n\treturn [props.binaryData.fileType ?? 'other'];\n});\n\nonMounted(async () => {\n\tconst { id, data: binaryData, fileName, fileType, mimeType } = props.binaryData;\n\tconst isJSONData = fileType === 'json';\n\tconst isHTMLData = fileType === 'html';\n\n\tif (!id) {\n\t\tif (isJSONData || isHTMLData) {\n\t\t\tdata.value = jsonParse(atob(binaryData));\n\t\t} else {\n\t\t\tembedSource.value = 'data:' + mimeType + ';base64,' + binaryData;\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tconst binaryUrl = workflowsStore.getBinaryUrl(id, 'view', fileName ?? '', mimeType);\n\t\t\tif (isJSONData || isHTMLData) {\n\t\t\t\tconst fetchedData = await fetch(binaryUrl, { credentials: 'include' });\n\t\t\t\tdata.value = await (isJSONData ? fetchedData.json() : fetchedData.text());\n\t\t\t} else {\n\t\t\t\tembedSource.value = binaryUrl;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\terror.value = true;\n\t\t}\n\t}\n\n\tisLoading.value = false;\n});\n</script>\n\n<style lang=\"scss\">\n.binary-data {\n\tbackground-color: var(--color-foreground-xlight);\n\n\t&.image {\n\t\tmax-height: calc(100% - 1em);\n\t\tmax-width: calc(100% - 1em);\n\t}\n\n\t&.other,\n\t&.pdf {\n\t\theight: calc(100% - 1em);\n\t\twidth: calc(100% - 1em);\n\t}\n}\n</style>\n","<template>\n\t<div v-if=\"windowVisible\" :class=\"['binary-data-window', binaryData?.fileType]\">\n\t\t<n8n-button\n\t\t\tsize=\"small\"\n\t\t\tclass=\"binary-data-window-back\"\n\t\t\t:title=\"$locale.baseText('binaryDataDisplay.backToOverviewPage')\"\n\t\t\ticon=\"arrow-left\"\n\t\t\t:label=\"$locale.baseText('binaryDataDisplay.backToList')\"\n\t\t\t@click.stop=\"closeWindow\"\n\t\t/>\n\n\t\t<div class=\"binary-data-window-wrapper\">\n\t\t\t<div v-if=\"!binaryData\">\n\t\t\t\t{{ $locale.baseText('binaryDataDisplay.noDataFoundToDisplay') }}\n\t\t\t</div>\n\t\t\t<BinaryDataDisplayEmbed v-else :binary-data=\"binaryData\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { IBinaryData, IRunData } from 'n8n-workflow';\nimport BinaryDataDisplayEmbed from '@/components/BinaryDataDisplayEmbed.vue';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\n\nconst props = defineProps<{\n\tdisplayData: IBinaryData;\n\twindowVisible: boolean;\n}>();\n\nconst emit = defineEmits<{\n\t(event: 'close'): void;\n}>();\n\nconst nodeHelpers = useNodeHelpers();\nconst workflowsStore = useWorkflowsStore();\n\nconst workflowRunData = computed<IRunData | null>(() => {\n\tconst workflowExecution = workflowsStore.getWorkflowExecution;\n\tif (workflowExecution === null) {\n\t\treturn null;\n\t}\n\tconst executionData = workflowExecution.data;\n\treturn executionData ? executionData.resultData.runData : null;\n});\n\nconst binaryData = computed<IBinaryData | null>(() => {\n\tif (\n\t\ttypeof props.displayData.node !== 'string' ||\n\t\ttypeof props.displayData.key !== 'string' ||\n\t\ttypeof props.displayData.runIndex !== 'number' ||\n\t\ttypeof props.displayData.index !== 'number' ||\n\t\ttypeof props.displayData.outputIndex !== 'number'\n\t) {\n\t\treturn null;\n\t}\n\n\tconst binaryDataLocal = nodeHelpers.getBinaryData(\n\t\tworkflowRunData.value,\n\t\tprops.displayData.node,\n\t\tprops.displayData.runIndex,\n\t\tprops.displayData.outputIndex,\n\t);\n\n\tif (binaryDataLocal.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (\n\t\tprops.displayData.index >= binaryDataLocal.length ||\n\t\tbinaryDataLocal[props.displayData.index][props.displayData.key] === undefined\n\t) {\n\t\treturn null;\n\t}\n\n\tconst binaryDataItem: IBinaryData =\n\t\tbinaryDataLocal[props.displayData.index][props.displayData.key];\n\n\treturn binaryDataItem;\n});\n\nfunction closeWindow() {\n\t// Handle the close externally as the visible parameter is an external prop\n\t// and is so not allowed to be changed here.\n\temit('close');\n\treturn false;\n}\n</script>\n\n<style lang=\"scss\">\n.binary-data-window {\n\tposition: absolute;\n\ttop: 50px;\n\tleft: 0;\n\tz-index: 10;\n\twidth: 100%;\n\theight: calc(100% - 50px);\n\tbackground-color: var(--color-run-data-background);\n\toverflow: hidden;\n\ttext-align: center;\n\n\t&.json {\n\t\toverflow: auto;\n\t}\n\n\t.binary-data-window-wrapper {\n\t\tmargin-top: 0.5em;\n\t\tpadding: 0 1em;\n\t\theight: calc(100% - 50px);\n\n\t\t.el-row,\n\t\t.el-col {\n\t\t\theight: 100%;\n\t\t}\n\t}\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from '@/composables/useI18n';\nimport { computed } from 'vue';\nimport { useClipboard } from '@/composables/useClipboard';\nimport { useToast } from '@/composables/useToast';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useRootStore } from '@/stores/root.store';\nimport type {\n\tIDataObject,\n\tINodeProperties,\n\tINodePropertyCollection,\n\tINodePropertyOptions,\n\tNodeApiError,\n\tNodeError,\n\tNodeOperationError,\n} from 'n8n-workflow';\nimport { sanitizeHtml } from '@/utils/htmlUtils';\nimport { MAX_DISPLAY_DATA_SIZE } from '@/constants';\nimport type { BaseTextKey } from '@/plugins/i18n';\n\ntype Props = {\n\terror: NodeError | NodeApiError | NodeOperationError;\n};\n\nconst props = defineProps<Props>();\nconst clipboard = useClipboard();\nconst toast = useToast();\nconst i18n = useI18n();\n\nconst nodeTypesStore = useNodeTypesStore();\nconst ndvStore = useNDVStore();\nconst rootStore = useRootStore();\n\nconst displayCause = computed(() => {\n\treturn JSON.stringify(props.error.cause ?? '').length < MAX_DISPLAY_DATA_SIZE;\n});\n\nconst parameters = computed<INodeProperties[]>(() => {\n\tconst node = ndvStore.activeNode;\n\tif (!node) {\n\t\treturn [];\n\t}\n\tconst nodeType = nodeTypesStore.getNodeType(node.type, node.typeVersion);\n\n\tif (nodeType === null) {\n\t\treturn [];\n\t}\n\n\treturn nodeType.properties;\n});\n\nconst n8nVersion = computed(() => {\n\tconst baseUrl = rootStore.urlBaseEditor;\n\tlet instanceType = 'Self Hosted';\n\n\tif (baseUrl.includes('n8n.cloud')) {\n\t\tinstanceType = 'Cloud';\n\t}\n\n\treturn rootStore.versionCli + ` (${instanceType})`;\n});\n\nconst hasManyInputItems = computed(() => {\n\treturn ndvStore.ndvInputData.length > 1;\n});\n\nconst nodeDefaultName = computed(() => {\n\tconst node = props.error?.node;\n\tif (!node) {\n\t\treturn 'Node';\n\t}\n\n\tconst nodeType = nodeTypesStore.getNodeType(node.type, node.typeVersion);\n\treturn nodeType?.defaults?.name || node.name;\n});\n\nconst prepareRawMessages = computed(() => {\n\tconst returnData: Array<string | IDataObject> = [];\n\tif (!props.error.messages?.length) {\n\t\treturn [];\n\t}\n\tconst errorMessage = getErrorMessage();\n\n\tArray.from(new Set(props.error.messages)).forEach((message) => {\n\t\tconst isParsable = /^\\d{3} - \\{/.test(message);\n\t\tconst parts = isParsable ? message.split(' - ').map((part) => part.trim()) : [];\n\n\t\t//try to parse the message as JSON\n\t\tfor (const part of parts) {\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(part);\n\t\t\t\tif (typeof parsed === 'object') {\n\t\t\t\t\treturnData.push(parsed);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (error) {}\n\t\t}\n\t\t//if message is the same as error message, do not include it\n\t\tif (message === errorMessage) return;\n\t\treturnData.push(message);\n\t});\n\treturn returnData;\n});\n\nfunction nodeVersionTag(nodeType: NodeError['node']): string {\n\tif (!nodeType || ('hidden' in nodeType && nodeType.hidden)) {\n\t\treturn i18n.baseText('nodeSettings.deprecated');\n\t}\n\n\tconst latestNodeVersion = Math.max(...nodeTypesStore.getNodeVersions(nodeType.type));\n\n\tif (latestNodeVersion === nodeType.typeVersion) {\n\t\treturn i18n.baseText('nodeSettings.latest');\n\t}\n\n\treturn i18n.baseText('nodeSettings.latestVersion', {\n\t\tinterpolate: { version: latestNodeVersion.toString() },\n\t});\n}\n\nfunction prepareDescription(description: string): string {\n\treturn sanitizeHtml(description.replace(/`(.*?)`/g, '<code>$1</code>'));\n}\n\nfunction getErrorDescription(): string {\n\tconst isSubNodeError =\n\t\tprops.error.name === 'NodeOperationError' &&\n\t\t(props.error as NodeOperationError).functionality === 'configuration-node';\n\n\tif (isSubNodeError) {\n\t\treturn prepareDescription(\n\t\t\tprops.error.description +\n\t\t\t\ti18n.baseText('pushConnection.executionError.openNode', {\n\t\t\t\t\tinterpolate: { node: props.error.node.name },\n\t\t\t\t}),\n\t\t);\n\t}\n\n\tif (props.error.context?.descriptionKey) {\n\t\tconst interpolate = {\n\t\t\tnodeCause: props.error.context.nodeCause as string,\n\t\t\trunIndex: (props.error.context.runIndex as string) ?? '0',\n\t\t\titemIndex: (props.error.context.itemIndex as string) ?? '0',\n\t\t};\n\t\treturn prepareDescription(\n\t\t\ti18n.baseText(\n\t\t\t\t`nodeErrorView.description.${props.error.context.descriptionKey as string}` as BaseTextKey,\n\t\t\t\t{ interpolate },\n\t\t\t),\n\t\t);\n\t}\n\n\tif (!props.error.context?.descriptionTemplate) {\n\t\treturn prepareDescription(props.error.description ?? '');\n\t}\n\n\tconst parameterName = parameterDisplayName(props.error.context.parameter as string);\n\treturn prepareDescription(\n\t\t(props.error.context.descriptionTemplate as string).replace(/%%PARAMETER%%/g, parameterName),\n\t);\n}\n\nfunction addItemIndexSuffix(message: string): string {\n\tlet itemIndexSuffix = '';\n\n\tconst ITEM_INDEX_SUFFIX_TEXT = '[item ';\n\n\tif (\n\t\thasManyInputItems.value &&\n\t\t!message.includes(ITEM_INDEX_SUFFIX_TEXT) &&\n\t\tprops.error?.context?.itemIndex !== undefined\n\t) {\n\t\titemIndexSuffix = ` [item ${props.error.context.itemIndex}]`;\n\t}\n\n\treturn message + itemIndexSuffix;\n}\n\nfunction getErrorMessage(): string {\n\tlet message = '';\n\n\tconst isSubNodeError =\n\t\tprops.error.name === 'NodeOperationError' &&\n\t\t(props.error as NodeOperationError).functionality === 'configuration-node';\n\tconst isNonEmptyString = (value?: unknown): value is string =>\n\t\t!!value && typeof value === 'string';\n\n\tif (isSubNodeError) {\n\t\tmessage = i18n.baseText('nodeErrorView.errorSubNode', {\n\t\t\tinterpolate: { node: props.error.node.name },\n\t\t});\n\t} else if (\n\t\tisNonEmptyString(props.error.message) &&\n\t\t(props.error.message === props.error.description || !props.error.context?.messageTemplate)\n\t) {\n\t\tmessage = props.error.message;\n\t} else if (\n\t\tisNonEmptyString(props.error.context?.messageTemplate) &&\n\t\tisNonEmptyString(props.error.context?.parameter)\n\t) {\n\t\tconst parameterName = parameterDisplayName(props.error.context.parameter);\n\t\tmessage = props.error.context.messageTemplate.replace(/%%PARAMETER%%/g, parameterName);\n\t} else if (Array.isArray(props.error.messages) && props.error.messages.length > 0) {\n\t\tmessage = props.error.messages[0];\n\t}\n\n\treturn addItemIndexSuffix(message);\n}\n\nfunction parameterDisplayName(path: string, fullPath = true) {\n\ttry {\n\t\tconst params = getParameterName(parameters.value, path.split('.'));\n\t\tif (!params.length) {\n\t\t\tthrow new Error();\n\t\t}\n\n\t\tif (!fullPath) {\n\t\t\treturn params.pop()!.displayName;\n\t\t}\n\t\treturn params.map((parameter) => parameter.displayName).join(' > ');\n\t} catch (error) {\n\t\treturn `Could not find parameter \"${path}\"`;\n\t}\n}\n\nfunction getParameterName(\n\tparams: Array<INodePropertyOptions | INodeProperties | INodePropertyCollection>,\n\tpathParts: string[],\n): Array<INodeProperties | INodePropertyCollection> {\n\tlet currentParameterName = pathParts.shift();\n\n\tif (currentParameterName === undefined) {\n\t\treturn [];\n\t}\n\n\tconst arrayMatch = currentParameterName.match(/(.*)\\[([\\d])\\]$/);\n\tif (arrayMatch !== null && arrayMatch.length > 0) {\n\t\tcurrentParameterName = arrayMatch[1];\n\t}\n\tconst currentParameter = params.find(\n\t\t(parameter) => parameter.name === currentParameterName,\n\t) as unknown as INodeProperties | INodePropertyCollection;\n\n\tif (currentParameter === undefined) {\n\t\tthrow new Error(`Could not find parameter \"${currentParameterName}\"`);\n\t}\n\n\tif (pathParts.length === 0) {\n\t\treturn [currentParameter];\n\t}\n\n\tif (currentParameter.hasOwnProperty('options')) {\n\t\treturn [\n\t\t\tcurrentParameter,\n\t\t\t...getParameterName((currentParameter as INodeProperties).options!, pathParts),\n\t\t];\n\t}\n\n\tif (currentParameter.hasOwnProperty('values')) {\n\t\treturn [\n\t\t\tcurrentParameter,\n\t\t\t...getParameterName((currentParameter as INodePropertyCollection).values, pathParts),\n\t\t];\n\t}\n\n\t// We can not resolve any deeper so lets stop here and at least return hopefully something useful\n\treturn [currentParameter];\n}\n\nfunction copyErrorDetails() {\n\tconst error = props.error;\n\n\tconst errorInfo: IDataObject = {\n\t\terrorMessage: getErrorMessage(),\n\t};\n\tif (error.description) {\n\t\terrorInfo.errorDescription = error.description;\n\t}\n\n\t//add error details\n\tconst errorDetails: IDataObject = {};\n\n\tif (error?.messages?.length) {\n\t\terrorDetails.rawErrorMessage = error.messages;\n\t}\n\n\tif ('httpCode' in error && error.httpCode) {\n\t\terrorDetails.httpCode = error.httpCode;\n\t}\n\n\tif (error.context && error.context.data) {\n\t\terrorDetails.errorData = error.context.data;\n\t}\n\n\tif (error.extra) {\n\t\terrorDetails.errorExtra = error.extra;\n\t}\n\n\terrorInfo.errorDetails = errorDetails;\n\n\t//add n8n details\n\tconst n8nDetails: IDataObject = {};\n\n\tif (error.node) {\n\t\tn8nDetails.nodeName = error.node.name;\n\t\tn8nDetails.nodeType = error.node.type;\n\t\tn8nDetails.nodeVersion = error.node.typeVersion;\n\n\t\tif (error.node?.parameters?.resource) {\n\t\t\tn8nDetails.resource = error.node.parameters.resource;\n\t\t}\n\t\tif (error?.node?.parameters?.operation) {\n\t\t\tn8nDetails.operation = error.node.parameters.operation;\n\t\t}\n\t}\n\n\tif (error.context) {\n\t\tif (error.context.itemIndex !== undefined) {\n\t\t\tn8nDetails.itemIndex = error.context.itemIndex;\n\t\t}\n\n\t\tif (error.context.runIndex !== undefined) {\n\t\t\tn8nDetails.runIndex = error.context.runIndex;\n\t\t}\n\n\t\tif (error.context.parameter !== undefined) {\n\t\t\tn8nDetails.parameter = error.context.parameter;\n\t\t}\n\n\t\tif (error.context.causeDetailed) {\n\t\t\tn8nDetails.causeDetailed = error.context.causeDetailed;\n\t\t}\n\t}\n\n\tif (error.timestamp) {\n\t\tn8nDetails.time = new Date(error.timestamp).toLocaleString();\n\t}\n\n\tn8nDetails.n8nVersion = n8nVersion.value;\n\n\tn8nDetails.binaryDataMode = rootStore.binaryDataMode;\n\n\tif (error.cause) {\n\t\tn8nDetails.cause = error.cause;\n\t}\n\n\tn8nDetails.stackTrace = error.stack?.split('\\n');\n\n\terrorInfo.n8nDetails = n8nDetails;\n\n\tvoid clipboard.copy(JSON.stringify(errorInfo, null, 2));\n\tcopySuccess();\n}\n\nfunction copySuccess() {\n\ttoast.showMessage({\n\t\ttitle: i18n.baseText('nodeErrorView.showMessage.title'),\n\t\ttype: 'info',\n\t});\n}\n</script>\n\n<template>\n\t<div class=\"node-error-view\">\n\t\t<div class=\"node-error-view__header\">\n\t\t\t<div class=\"node-error-view__header-message\" data-test-id=\"node-error-message\">\n\t\t\t\t<div>\n\t\t\t\t\t{{ getErrorMessage() }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"error.description || error.context?.descriptionKey\"\n\t\t\t\tdata-test-id=\"node-error-description\"\n\t\t\t\tclass=\"node-error-view__header-description\"\n\t\t\t\tv-html=\"getErrorDescription()\"\n\t\t\t></div>\n\t\t</div>\n\n\t\t<div class=\"node-error-view__info\">\n\t\t\t<div class=\"node-error-view__info-header\">\n\t\t\t\t<p class=\"node-error-view__info-title\">\n\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.title') }}\n\t\t\t\t</p>\n\t\t\t\t<n8n-tooltip\n\t\t\t\t\tclass=\"item\"\n\t\t\t\t\t:content=\"i18n.baseText('nodeErrorView.copyToClipboard.tooltip')\"\n\t\t\t\t\tplacement=\"left\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"copy-button\">\n\t\t\t\t\t\t<n8n-icon-button\n\t\t\t\t\t\t\ticon=\"copy\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\tsize=\"mini\"\n\t\t\t\t\t\t\ttext=\"true\"\n\t\t\t\t\t\t\ttransparent-background=\"transparent\"\n\t\t\t\t\t\t\t@click=\"copyErrorDetails\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</div>\n\n\t\t\t<div class=\"node-error-view__info-content\">\n\t\t\t\t<details\n\t\t\t\t\tv-if=\"\n\t\t\t\t\t\t('httpCode' in error && error.httpCode) ||\n\t\t\t\t\t\tprepareRawMessages.length ||\n\t\t\t\t\t\terror?.context?.data ||\n\t\t\t\t\t\terror.extra\n\t\t\t\t\t\"\n\t\t\t\t\tclass=\"node-error-view__details\"\n\t\t\t\t>\n\t\t\t\t\t<summary class=\"node-error-view__details-summary\">\n\t\t\t\t\t\t<font-awesome-icon class=\"node-error-view__details-icon\" icon=\"angle-right\" />\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\ti18n.baseText('nodeErrorView.details.from', {\n\t\t\t\t\t\t\t\tinterpolate: { node: `${nodeDefaultName}` },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}}\n\t\t\t\t\t</summary>\n\t\t\t\t\t<div class=\"node-error-view__details-content\">\n\t\t\t\t\t\t<div v-if=\"'httpCode' in error && error.httpCode\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.errorCode') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ error.httpCode }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"prepareRawMessages.length\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.rawMessages') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<div v-for=\"(msg, index) in prepareRawMessages\" :key=\"index\">\n\t\t\t\t\t\t\t\t\t<pre><code>{{ msg }}</code></pre>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"error?.context?.data\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.errorData') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<pre><code>{{ error.context.data }}</code></pre>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"error.extra\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.errorExtra') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<pre><code>{{ error.extra }}</code></pre>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"error.context && error.context.request\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.request') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<pre><code>{{ error.context.request }}</code></pre>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</details>\n\n\t\t\t\t<details class=\"node-error-view__details\">\n\t\t\t\t\t<summary class=\"node-error-view__details-summary\">\n\t\t\t\t\t\t<font-awesome-icon class=\"node-error-view__details-icon\" icon=\"angle-right\" />\n\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.info') }}\n\t\t\t\t\t</summary>\n\t\t\t\t\t<div class=\"node-error-view__details-content\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"error.context && error.context.itemIndex !== undefined\"\n\t\t\t\t\t\t\tclass=\"node-error-view__details-row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.itemIndex') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ error.context.itemIndex }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"error.context && error.context.runIndex !== undefined\"\n\t\t\t\t\t\t\tclass=\"node-error-view__details-row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.runIndex') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ error.context.runIndex }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"error.context && error.context.parameter !== undefined\"\n\t\t\t\t\t\t\tclass=\"node-error-view__details-row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.inParameter') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ parameterDisplayName(`${error.context.parameter}`) }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div v-if=\"error.node && error.node.type\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.nodeType') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ error.node.type }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div v-if=\"error.node && error.node.typeVersion\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.nodeVersion') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>\n\t\t\t\t\t\t\t\t\t<span>{{ error.node.typeVersion + ' ' }}</span>\n\t\t\t\t\t\t\t\t\t<span>({{ nodeVersionTag(error.node) }})</span>\n\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.n8nVersion') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ n8nVersion }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div v-if=\"error.timestamp\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.time') }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-value\">\n\t\t\t\t\t\t\t\t<code>{{ new Date(error.timestamp).toLocaleString() }}</code>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div v-if=\"error.cause && displayCause\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.errorCause') }}\n\t\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t\t<pre class=\"node-error-view__details-value\"><code>{{ error.cause }}</code></pre>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"error.context && error.context.causeDetailed\"\n\t\t\t\t\t\t\tclass=\"node-error-view__details-row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.causeDetailed') }}\n\t\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t\t<pre\n\t\t\t\t\t\t\t\tclass=\"node-error-view__details-value\"\n\t\t\t\t\t\t\t><code>{{ error.context.causeDetailed }}</code></pre>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div v-if=\"error.stack\" class=\"node-error-view__details-row\">\n\t\t\t\t\t\t\t<p class=\"node-error-view__details-label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('nodeErrorView.details.stackTrace') }}\n\t\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t\t<pre class=\"node-error-view__details-value\"><code>{{ error.stack }}</code></pre>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</details>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\">\n.node-error-view {\n\t&__header {\n\t\tmax-width: 960px;\n\t\tmargin: 0 auto var(--spacing-s) auto;\n\t\tpadding-bottom: var(--spacing-3xs);\n\t\tbackground-color: var(--color-background-xlight);\n\t\tborder: 1px solid var(--color-foreground-base);\n\t\tborder-radius: var(--border-radius-large);\n\t}\n\n\t&__header-title {\n\t\tpadding: var(--spacing-2xs) var(--spacing-s);\n\t\tborder-bottom: 1px solid var(--color-danger-tint-1);\n\t\tfont-size: var(--font-size-3xs);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tbackground-color: var(--color-danger-tint-2);\n\t\tborder-radius: var(--border-radius-large) var(--border-radius-large) 0 0;\n\t\tcolor: var(--color-danger);\n\t}\n\n\t&__header-message {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t\tgap: var(--spacing-xs);\n\t\tpadding: var(--spacing-xs) var(--spacing-s) var(--spacing-3xs) var(--spacing-s);\n\t\tcolor: var(--color-danger);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tfont-size: var(--font-size-s);\n\t}\n\n\t&__header-description {\n\t\tpadding: 0 var(--spacing-s) var(--spacing-3xs) var(--spacing-s);\n\t\tfont-size: var(--font-size-xs);\n\n\t\tul {\n\t\t\tpadding: var(--spacing-s) 0;\n\t\t\tpadding-left: var(--spacing-l);\n\t\t}\n\n\t\tcode {\n\t\t\tfont-size: var(--font-size-xs);\n\t\t\tcolor: var(--color-text-base);\n\t\t\tbackground: var(--color-background-base);\n\t\t\tpadding: var(--spacing-5xs);\n\t\t\tborder-radius: var(--border-radius-base);\n\t\t}\n\t}\n\n\t&__debugging {\n\t\tfont-size: var(--font-size-s);\n\n\t\tul,\n\t\tol,\n\t\tdl {\n\t\t\tpadding-left: var(--spacing-s);\n\t\t\tmargin-top: var(--spacing-2xs);\n\t\t\tmargin-bottom: var(--spacing-2xs);\n\t\t}\n\n\t\tpre {\n\t\t\tpadding: var(--spacing-s);\n\t\t\twidth: 100%;\n\t\t\toverflow: auto;\n\t\t\tbackground: var(--color-background-light);\n\t\t\tcode {\n\t\t\t\tfont-size: var(--font-size-s);\n\t\t\t}\n\t\t}\n\t}\n\n\t&__feedback-toolbar {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin-top: var(--spacing-s);\n\t\tpadding-top: var(--spacing-3xs);\n\t\tborder-top: 1px solid var(--color-foreground-base);\n\t}\n\n\t&__feedback-button {\n\t\twidth: var(--spacing-2xl);\n\t\theight: var(--spacing-2xl);\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tcursor: pointer;\n\t\t&:hover {\n\t\t\tcolor: var(--color-primary);\n\t\t}\n\t}\n\n\t&__info {\n\t\tmax-width: 960px;\n\t\tmargin: 0 auto;\n\t\tborder: 1px solid var(--color-foreground-base);\n\t\tborder-radius: var(--border-radius-large);\n\t}\n\n\t&__info-header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tpadding: var(--spacing-3xs) var(--spacing-3xs) var(--spacing-3xs) var(--spacing-s);\n\t\tborder-bottom: 1px solid var(--color-foreground-base);\n\t}\n\n\t&__info-title {\n\t\tfont-size: var(--font-size-2xs);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tcolor: var(--color-text-dark);\n\t}\n\n\t&__info-content {\n\t\tpadding: var(--spacing-2xs) var(--spacing-s);\n\t}\n\n\t&__details:not(:last-child) {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n\n\t&__details[open] {\n\t\t.node-error-view__details {\n\t\t\t&-icon {\n\t\t\t\ttransform: rotate(90deg);\n\t\t\t\ttransition: transform 0.3s ease;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__details-summary {\n\t\tpadding: var(--spacing-5xs) 0;\n\t\tfont-size: var(--font-size-2xs);\n\t\tcolor: var(--color-text-dark);\n\t\tcursor: pointer;\n\t\tlist-style-type: none;\n\t\toutline: none;\n\t}\n\n\t&__details-content {\n\t\tpadding: var(--spacing-2xs) var(--spacing-s);\n\t}\n\n\t&__details-row {\n\t\tdisplay: flex;\n\t\tpadding: var(--spacing-4xs) 0;\n\t}\n\n\t&__details-row:not(:first-child) {\n\t\tborder-top: 1px solid var(--color-foreground-base);\n\t}\n\n\t&__details-icon {\n\t\tmargin-right: var(--spacing-xs);\n\t}\n\n\t&__details-label {\n\t\tflex-grow: 0;\n\t\tflex-shrink: 0;\n\t\twidth: 120px;\n\t\tcolor: var(--color-text);\n\t\tfont-size: var(--font-size-2xs);\n\t}\n\n\t&__details-value {\n\t\tflex: 1;\n\t\toverflow: hidden;\n\t\tmargin-right: auto;\n\t\tcolor: var(--color-text);\n\t\tfont-size: var(--font-size-2xs);\n\t\tword-wrap: break-word;\n\n\t\tcode {\n\t\t\tcolor: var(--color-json-string);\n\t\t\twhite-space: normal;\n\t\t\tword-wrap: break-word;\n\t\t}\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useI18n } from '@/composables/useI18n';\nimport type { usePinnedData } from '@/composables/usePinnedData';\n\nconst locale = useI18n();\n\ntype Props = {\n\ttooltipContentsVisibility: {\n\t\tbinaryDataTooltipContent: boolean;\n\t\tpinDataDiscoveryTooltipContent: boolean;\n\t};\n\tdataPinningDocsUrl: string;\n\tpinnedData: ReturnType<typeof usePinnedData>;\n\tdisabled: boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n\t(event: 'togglePinData'): void;\n}>();\n\nconst visible = computed(() =>\n\tprops.tooltipContentsVisibility.pinDataDiscoveryTooltipContent ? true : undefined,\n);\n</script>\n\n<template>\n\t<n8n-tooltip placement=\"bottom-end\" :visible=\"visible\">\n\t\t<template #content>\n\t\t\t<div v-if=\"props.tooltipContentsVisibility.binaryDataTooltipContent\">\n\t\t\t\t{{ locale.baseText('ndv.pinData.pin.binary') }}\n\t\t\t</div>\n\t\t\t<div v-else-if=\"props.tooltipContentsVisibility.pinDataDiscoveryTooltipContent\">\n\t\t\t\t{{ locale.baseText('node.discovery.pinData.ndv') }}\n\t\t\t</div>\n\t\t\t<div v-else>\n\t\t\t\t<strong>{{ locale.baseText('ndv.pinData.pin.title') }}</strong>\n\t\t\t\t<n8n-text size=\"small\" tag=\"p\">\n\t\t\t\t\t{{ locale.baseText('ndv.pinData.pin.description') }}\n\n\t\t\t\t\t<n8n-link :to=\"props.dataPinningDocsUrl\" size=\"small\">\n\t\t\t\t\t\t{{ locale.baseText('ndv.pinData.pin.link') }}\n\t\t\t\t\t</n8n-link>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</template>\n\t\t<n8n-icon-button\n\t\t\t:class=\"$style.pinDataButton\"\n\t\t\ttype=\"tertiary\"\n\t\t\t:active=\"props.pinnedData.hasData.value\"\n\t\t\ticon=\"thumbtack\"\n\t\t\t:disabled=\"props.disabled\"\n\t\t\tdata-test-id=\"ndv-pin-data\"\n\t\t\t@click=\"emit('togglePinData')\"\n\t\t/>\n\t</n8n-tooltip>\n</template>\n\n<style lang=\"scss\" module>\n.pinDataButton {\n\tmargin-left: var(--spacing-2xs);\n\tsvg {\n\t\ttransition: transform 0.3s ease;\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"['run-data', $style.container]\" @mouseover=\"activatePane\">\n\t\t<n8n-callout\n\t\t\tv-if=\"\n\t\t\t\tcanPinData && pinnedData.hasData.value && !editMode.enabled && !isProductionExecutionPreview\n\t\t\t\"\n\t\t\ttheme=\"secondary\"\n\t\t\ticon=\"thumbtack\"\n\t\t\t:class=\"$style.pinnedDataCallout\"\n\t\t>\n\t\t\t{{ $locale.baseText('runData.pindata.thisDataIsPinned') }}\n\t\t\t<span v-if=\"!isReadOnlyRoute && !readOnlyEnv\" class=\"ml-4xs\">\n\t\t\t\t<n8n-link\n\t\t\t\t\ttheme=\"secondary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tunderline\n\t\t\t\t\tbold\n\t\t\t\t\t@click.stop=\"onTogglePinData({ source: 'banner-link' })\"\n\t\t\t\t>\n\t\t\t\t\t{{ $locale.baseText('runData.pindata.unpin') }}\n\t\t\t\t</n8n-link>\n\t\t\t</span>\n\t\t\t<template #trailingContent>\n\t\t\t\t<n8n-link\n\t\t\t\t\t:to=\"dataPinningDocsUrl\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\ttheme=\"secondary\"\n\t\t\t\t\tbold\n\t\t\t\t\tunderline\n\t\t\t\t\t@click=\"onClickDataPinningDocsLink\"\n\t\t\t\t>\n\t\t\t\t\t{{ $locale.baseText('runData.pindata.learnMore') }}\n\t\t\t\t</n8n-link>\n\t\t\t</template>\n\t\t</n8n-callout>\n\n\t\t<BinaryDataDisplay\n\t\t\tv-if=\"binaryDataDisplayData\"\n\t\t\t:window-visible=\"binaryDataDisplayVisible\"\n\t\t\t:display-data=\"binaryDataDisplayData\"\n\t\t\t@close=\"closeBinaryDataDisplay\"\n\t\t/>\n\n\t\t<div :class=\"$style.header\">\n\t\t\t<slot name=\"header\"></slot>\n\n\t\t\t<div\n\t\t\t\tv-show=\"!hasRunError\"\n\t\t\t\t:class=\"$style.displayModes\"\n\t\t\t\tdata-test-id=\"run-data-pane-header\"\n\t\t\t\t@click.stop\n\t\t\t>\n\t\t\t\t<n8n-radio-buttons\n\t\t\t\t\tv-show=\"\n\t\t\t\t\t\thasNodeRun && (inputData.length || binaryData.length || search) && !editMode.enabled\n\t\t\t\t\t\"\n\t\t\t\t\t:model-value=\"displayMode\"\n\t\t\t\t\t:options=\"buttons\"\n\t\t\t\t\tdata-test-id=\"ndv-run-data-display-mode\"\n\t\t\t\t\t@update:model-value=\"onDisplayModeChange\"\n\t\t\t\t/>\n\n\t\t\t\t<n8n-icon-button\n\t\t\t\t\tv-if=\"canPinData && !isReadOnlyRoute && !readOnlyEnv\"\n\t\t\t\t\tv-show=\"!editMode.enabled\"\n\t\t\t\t\t:title=\"$locale.baseText('runData.editOutput')\"\n\t\t\t\t\t:circle=\"false\"\n\t\t\t\t\t:disabled=\"node?.disabled\"\n\t\t\t\t\tclass=\"ml-2xs\"\n\t\t\t\t\ticon=\"pencil-alt\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tdata-test-id=\"ndv-edit-pinned-data\"\n\t\t\t\t\t@click=\"enterEditMode({ origin: 'editIconButton' })\"\n\t\t\t\t/>\n\n\t\t\t\t<RunDataPinButton\n\t\t\t\t\tv-if=\"(canPinData || !!binaryData?.length) && rawInputData.length && !editMode.enabled\"\n\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t(!rawInputData.length && !pinnedData.hasData.value) ||\n\t\t\t\t\t\tisReadOnlyRoute ||\n\t\t\t\t\t\treadOnlyEnv ||\n\t\t\t\t\t\t!!binaryData?.length\n\t\t\t\t\t\"\n\t\t\t\t\t:tooltip-contents-visibility=\"{\n\t\t\t\t\t\tbinaryDataTooltipContent: !!binaryData?.length,\n\t\t\t\t\t\tpinDataDiscoveryTooltipContent:\n\t\t\t\t\t\t\tisControlledPinDataTooltip && pinDataDiscoveryTooltipVisible,\n\t\t\t\t\t}\"\n\t\t\t\t\t:data-pinning-docs-url=\"dataPinningDocsUrl\"\n\t\t\t\t\t:pinned-data=\"pinnedData\"\n\t\t\t\t\t@toggle-pin-data=\"onTogglePinData({ source: 'pin-icon-click' })\"\n\t\t\t\t/>\n\n\t\t\t\t<div v-show=\"editMode.enabled\" :class=\"$style.editModeActions\">\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t:label=\"$locale.baseText('runData.editor.cancel')\"\n\t\t\t\t\t\t@click=\"onClickCancelEdit\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\tclass=\"ml-2xs\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t:label=\"$locale.baseText('runData.editor.save')\"\n\t\t\t\t\t\t@click=\"onClickSaveEdit\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div v-if=\"extraControlsLocation === 'header'\" :class=\"$style.inputSelect\">\n\t\t\t<slot name=\"input-select\"></slot>\n\t\t</div>\n\n\t\t<div v-if=\"maxRunIndex > 0\" v-show=\"!editMode.enabled\" :class=\"$style.runSelector\">\n\t\t\t<slot v-if=\"extraControlsLocation === 'runs'\" name=\"input-select\"></slot>\n\n\t\t\t<n8n-select\n\t\t\t\t:model-value=\"runIndex\"\n\t\t\t\t:class=\"$style.runSelectorInner\"\n\t\t\t\tsize=\"small\"\n\t\t\t\tteleported\n\t\t\t\tdata-test-id=\"run-selector\"\n\t\t\t\t@update:model-value=\"onRunIndexChange\"\n\t\t\t\t@click.stop\n\t\t\t>\n\t\t\t\t<template #prepend>{{ $locale.baseText('ndv.output.run') }}</template>\n\t\t\t\t<n8n-option\n\t\t\t\t\tv-for=\"option in maxRunIndex + 1\"\n\t\t\t\t\t:key=\"option\"\n\t\t\t\t\t:label=\"getRunLabel(option)\"\n\t\t\t\t\t:value=\"option - 1\"\n\t\t\t\t></n8n-option>\n\t\t\t</n8n-select>\n\n\t\t\t<n8n-tooltip v-if=\"canLinkRuns\" placement=\"right\">\n\t\t\t\t<template #content>\n\t\t\t\t\t{{ $locale.baseText(linkedRuns ? 'runData.unlinking.hint' : 'runData.linking.hint') }}\n\t\t\t\t</template>\n\t\t\t\t<n8n-icon-button\n\t\t\t\t\t:icon=\"linkedRuns ? 'unlink' : 'link'\"\n\t\t\t\t\tclass=\"linkRun\"\n\t\t\t\t\ttext\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tdata-test-id=\"link-run\"\n\t\t\t\t\t@click=\"toggleLinkRuns\"\n\t\t\t\t/>\n\t\t\t</n8n-tooltip>\n\n\t\t\t<slot name=\"run-info\"></slot>\n\n\t\t\t<RunDataSearch\n\t\t\t\tv-if=\"showIOSearch && extraControlsLocation === 'runs'\"\n\t\t\t\tv-model=\"search\"\n\t\t\t\t:class=\"$style.search\"\n\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t:is-area-active=\"isPaneActive\"\n\t\t\t\t@focus=\"activatePane\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<slot name=\"before-data\" />\n\n\t\t<n8n-callout\n\t\t\tv-for=\"hint in getNodeHints()\"\n\t\t\t:key=\"hint.message\"\n\t\t\t:class=\"$style.hintCallout\"\n\t\t\t:theme=\"hint.type || 'info'\"\n\t\t>\n\t\t\t<n8n-text size=\"small\" v-html=\"hint.message\"></n8n-text>\n\t\t</n8n-callout>\n\n\t\t<div\n\t\t\tv-if=\"maxOutputIndex > 0 && branches.length > 1\"\n\t\t\t:class=\"$style.outputs\"\n\t\t\tdata-test-id=\"branches\"\n\t\t>\n\t\t\t<slot v-if=\"extraControlsLocation === 'outputs'\" name=\"input-select\"></slot>\n\n\t\t\t<div :class=\"$style.tabs\">\n\t\t\t\t<n8n-tabs\n\t\t\t\t\t:model-value=\"currentOutputIndex\"\n\t\t\t\t\t:options=\"branches\"\n\t\t\t\t\t@update:model-value=\"onBranchChange\"\n\t\t\t\t/>\n\n\t\t\t\t<RunDataSearch\n\t\t\t\t\tv-if=\"showIOSearch && extraControlsLocation === 'outputs'\"\n\t\t\t\t\tv-model=\"search\"\n\t\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t\t:is-area-active=\"isPaneActive\"\n\t\t\t\t\t@focus=\"activatePane\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-else-if=\"\n\t\t\t\t!hasRunError &&\n\t\t\t\thasNodeRun &&\n\t\t\t\t((dataCount > 0 && maxRunIndex === 0) || search) &&\n\t\t\t\t!isArtificialRecoveredEventItem\n\t\t\t\"\n\t\t\tv-show=\"!editMode.enabled && !hasRunError\"\n\t\t\t:class=\"[$style.itemsCount, { [$style.muted]: paneType === 'input' && maxRunIndex === 0 }]\"\n\t\t\tdata-test-id=\"ndv-items-count\"\n\t\t>\n\t\t\t<slot v-if=\"extraControlsLocation === 'items'\" name=\"input-select\"></slot>\n\n\t\t\t<n8n-text v-if=\"search\" :class=\"$style.itemsText\">\n\t\t\t\t{{\n\t\t\t\t\t$locale.baseText('ndv.search.items', {\n\t\t\t\t\t\tadjustToNumber: unfilteredDataCount,\n\t\t\t\t\t\tinterpolate: { matched: dataCount, total: unfilteredDataCount },\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t</n8n-text>\n\t\t\t<n8n-text v-else :class=\"$style.itemsText\">\n\t\t\t\t{{\n\t\t\t\t\t$locale.baseText('ndv.output.items', {\n\t\t\t\t\t\tadjustToNumber: dataCount,\n\t\t\t\t\t\tinterpolate: { count: dataCount },\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t</n8n-text>\n\n\t\t\t<RunDataSearch\n\t\t\t\tv-if=\"showIOSearch && extraControlsLocation === 'items'\"\n\t\t\t\tv-model=\"search\"\n\t\t\t\t:class=\"$style.search\"\n\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t:is-area-active=\"isPaneActive\"\n\t\t\t\t@focus=\"activatePane\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div ref=\"dataContainer\" :class=\"$style.dataContainer\" data-test-id=\"ndv-data-container\">\n\t\t\t<div v-if=\"isExecuting\" :class=\"$style.center\" data-test-id=\"ndv-executing\">\n\t\t\t\t<div :class=\"$style.spinner\"><n8n-spinner type=\"ring\" /></div>\n\t\t\t\t<n8n-text>{{ executingMessage }}</n8n-text>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"editMode.enabled\" :class=\"$style.editMode\">\n\t\t\t\t<div :class=\"[$style.editModeBody, 'ignore-key-press']\">\n\t\t\t\t\t<JsonEditor\n\t\t\t\t\t\t:model-value=\"editMode.value\"\n\t\t\t\t\t\t:fill-parent=\"true\"\n\t\t\t\t\t\t@update:model-value=\"ndvStore.setOutputPanelEditModeValue($event)\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div :class=\"$style.editModeFooter\">\n\t\t\t\t\t<n8n-info-tip :bold=\"false\" :class=\"$style.editModeFooterInfotip\">\n\t\t\t\t\t\t{{ $locale.baseText('runData.editor.copyDataInfo') }}\n\t\t\t\t\t\t<n8n-link :to=\"dataEditingDocsUrl\" size=\"small\">\n\t\t\t\t\t\t\t{{ $locale.baseText('generic.learnMore') }}\n\t\t\t\t\t\t</n8n-link>\n\t\t\t\t\t</n8n-info-tip>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-else-if=\"paneType === 'output' && hasSubworkflowExecutionError\"\n\t\t\t\t:class=\"$style.stretchVertically\"\n\t\t\t>\n\t\t\t\t<NodeErrorView :error=\"subworkflowExecutionError\" :class=\"$style.errorDisplay\" />\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"!hasNodeRun\" :class=\"$style.center\">\n\t\t\t\t<slot name=\"node-not-run\"></slot>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"paneType === 'input' && node?.disabled\" :class=\"$style.center\">\n\t\t\t\t<n8n-text>\n\t\t\t\t\t{{ $locale.baseText('ndv.input.disabled', { interpolate: { nodeName: node.name } }) }}\n\t\t\t\t\t<n8n-link @click=\"enableNode\">\n\t\t\t\t\t\t{{ $locale.baseText('ndv.input.disabled.cta') }}\n\t\t\t\t\t</n8n-link>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"hasNodeRun && isArtificialRecoveredEventItem\" :class=\"$style.center\">\n\t\t\t\t<slot name=\"recovered-artificial-output-data\"></slot>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"hasNodeRun && hasRunError\" :class=\"$style.stretchVertically\">\n\t\t\t\t<n8n-text v-if=\"isPaneTypeInput\" :class=\"$style.center\" size=\"large\" tag=\"p\" bold>\n\t\t\t\t\t{{\n\t\t\t\t\t\t$locale.baseText('nodeErrorView.inputPanel.previousNodeError.title', {\n\t\t\t\t\t\t\tinterpolate: { nodeName: node?.name ?? '' },\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t</n8n-text>\n\t\t\t\t<slot v-else-if=\"$slots['content']\" name=\"content\"></slot>\n\t\t\t\t<NodeErrorView\n\t\t\t\t\tv-else-if=\"workflowRunErrorAsNodeError\"\n\t\t\t\t\t:error=\"workflowRunErrorAsNodeError\"\n\t\t\t\t\t:class=\"$style.dataDisplay\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-else-if=\"\n\t\t\t\t\thasNodeRun && (!unfilteredDataCount || (search && !dataCount)) && branches.length > 1\n\t\t\t\t\"\n\t\t\t\t:class=\"$style.center\"\n\t\t\t>\n\t\t\t\t<div v-if=\"search\">\n\t\t\t\t\t<n8n-text tag=\"h3\" size=\"large\">{{\n\t\t\t\t\t\t$locale.baseText('ndv.search.noMatch.title')\n\t\t\t\t\t}}</n8n-text>\n\t\t\t\t\t<n8n-text>\n\t\t\t\t\t\t<i18n-t keypath=\"ndv.search.noMatch.description\" tag=\"span\">\n\t\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t\t<a href=\"#\" @click=\"onSearchClear\">\n\t\t\t\t\t\t\t\t\t{{ $locale.baseText('ndv.search.noMatch.description.link') }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</i18n-t>\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t\t<n8n-text v-else>\n\t\t\t\t\t{{ noDataInBranchMessage }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"hasNodeRun && !inputData.length && !search\" :class=\"$style.center\">\n\t\t\t\t<slot name=\"no-output-data\">xxx</slot>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"hasNodeRun && !showData\" :class=\"$style.center\">\n\t\t\t\t<n8n-text :bold=\"true\" color=\"text-dark\" size=\"large\">{{ tooMuchDataTitle }}</n8n-text>\n\t\t\t\t<n8n-text align=\"center\" tag=\"div\"\n\t\t\t\t\t><span\n\t\t\t\t\t\tv-html=\"\n\t\t\t\t\t\t\t$locale.baseText('ndv.output.tooMuchData.message', {\n\t\t\t\t\t\t\t\tinterpolate: { size: dataSizeInMB },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\"\n\t\t\t\t\t></span\n\t\t\t\t></n8n-text>\n\n\t\t\t\t<n8n-button\n\t\t\t\t\toutline\n\t\t\t\t\t:label=\"$locale.baseText('ndv.output.tooMuchData.showDataAnyway')\"\n\t\t\t\t\t@click=\"showTooMuchData\"\n\t\t\t\t/>\n\n\t\t\t\t<n8n-button\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t:label=\"$locale.baseText('runData.downloadBinaryData')\"\n\t\t\t\t\t@click=\"downloadJsonData()\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<!-- V-else slot named content which only renders if $slots.content is passed and hasNodeRun -->\n\t\t\t<slot v-else-if=\"hasNodeRun && $slots['content']\" name=\"content\"></slot>\n\n\t\t\t<div\n\t\t\t\tv-else-if=\"\n\t\t\t\t\thasNodeRun &&\n\t\t\t\t\tdisplayMode === 'table' &&\n\t\t\t\t\tbinaryData.length > 0 &&\n\t\t\t\t\tinputData.length === 1 &&\n\t\t\t\t\tObject.keys(jsonData[0] || {}).length === 0\n\t\t\t\t\"\n\t\t\t\t:class=\"$style.center\"\n\t\t\t>\n\t\t\t\t<n8n-text>\n\t\t\t\t\t{{ $locale.baseText('runData.switchToBinary.info') }}\n\t\t\t\t\t<a @click=\"switchToBinary\">\n\t\t\t\t\t\t{{ $locale.baseText('runData.switchToBinary.binary') }}\n\t\t\t\t\t</a>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"showIoSearchNoMatchContent\" :class=\"$style.center\">\n\t\t\t\t<n8n-text tag=\"h3\" size=\"large\">{{\n\t\t\t\t\t$locale.baseText('ndv.search.noMatch.title')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-text>\n\t\t\t\t\t<i18n-t keypath=\"ndv.search.noMatch.description\" tag=\"span\">\n\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t<a href=\"#\" @click=\"onSearchClear\">\n\t\t\t\t\t\t\t\t{{ $locale.baseText('ndv.search.noMatch.description.link') }}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</i18n-t>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\n\t\t\t<Suspense v-else-if=\"hasNodeRun && displayMode === 'table' && node\">\n\t\t\t\t<RunDataTable\n\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t:input-data=\"inputDataPage\"\n\t\t\t\t\t:mapping-enabled=\"mappingEnabled\"\n\t\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t\t:run-index=\"runIndex\"\n\t\t\t\t\t:page-offset=\"currentPageOffset\"\n\t\t\t\t\t:total-runs=\"maxRunIndex\"\n\t\t\t\t\t:has-default-hover-state=\"paneType === 'input' && !search\"\n\t\t\t\t\t:search=\"search\"\n\t\t\t\t\t@mounted=\"$emit('tableMounted', $event)\"\n\t\t\t\t\t@active-row-changed=\"onItemHover\"\n\t\t\t\t\t@display-mode-change=\"onDisplayModeChange\"\n\t\t\t\t/>\n\t\t\t</Suspense>\n\n\t\t\t<Suspense v-else-if=\"hasNodeRun && displayMode === 'json' && node\">\n\t\t\t\t<RunDataJson\n\t\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t\t:edit-mode=\"editMode\"\n\t\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t:input-data=\"inputDataPage\"\n\t\t\t\t\t:mapping-enabled=\"mappingEnabled\"\n\t\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t\t:run-index=\"runIndex\"\n\t\t\t\t\t:total-runs=\"maxRunIndex\"\n\t\t\t\t\t:search=\"search\"\n\t\t\t\t/>\n\t\t\t</Suspense>\n\n\t\t\t<Suspense v-else-if=\"hasNodeRun && isPaneTypeOutput && displayMode === 'html'\">\n\t\t\t\t<RunDataHtml :input-html=\"inputHtml\" />\n\t\t\t</Suspense>\n\n\t\t\t<Suspense v-else-if=\"hasNodeRun && isSchemaView\">\n\t\t\t\t<RunDataSchema\n\t\t\t\t\t:data=\"jsonData\"\n\t\t\t\t\t:mapping-enabled=\"mappingEnabled\"\n\t\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t\t:run-index=\"runIndex\"\n\t\t\t\t\t:total-runs=\"maxRunIndex\"\n\t\t\t\t\t:search=\"search\"\n\t\t\t\t/>\n\t\t\t</Suspense>\n\n\t\t\t<div v-else-if=\"displayMode === 'binary' && binaryData.length === 0\" :class=\"$style.center\">\n\t\t\t\t<n8n-text align=\"center\" tag=\"div\">{{\n\t\t\t\t\t$locale.baseText('runData.noBinaryDataFound')\n\t\t\t\t}}</n8n-text>\n\t\t\t</div>\n\n\t\t\t<div v-else-if=\"displayMode === 'binary'\" :class=\"$style.dataDisplay\">\n\t\t\t\t<div v-for=\"(binaryDataEntry, index) in binaryData\" :key=\"index\">\n\t\t\t\t\t<div v-if=\"binaryData.length > 1\" :class=\"$style.binaryIndex\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{{ index + 1 }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div :class=\"$style.binaryRow\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"(binaryData, key) in binaryDataEntry\"\n\t\t\t\t\t\t\t:key=\"index + '_' + key\"\n\t\t\t\t\t\t\t:class=\"$style.binaryCell\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div :data-test-id=\"'ndv-binary-data_' + index\">\n\t\t\t\t\t\t\t\t<div :class=\"$style.binaryHeader\">\n\t\t\t\t\t\t\t\t\t{{ key }}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div v-if=\"binaryData.fileName\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t>{{ $locale.baseText('runData.fileName') }}:\n\t\t\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div :class=\"$style.binaryValue\">{{ binaryData.fileName }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div v-if=\"binaryData.directory\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t>{{ $locale.baseText('runData.directory') }}:\n\t\t\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div :class=\"$style.binaryValue\">{{ binaryData.directory }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div v-if=\"binaryData.fileExtension\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t>{{ $locale.baseText('runData.fileExtension') }}:</n8n-text\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div :class=\"$style.binaryValue\">{{ binaryData.fileExtension }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div v-if=\"binaryData.mimeType\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t>{{ $locale.baseText('runData.mimeType') }}:\n\t\t\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div :class=\"$style.binaryValue\">{{ binaryData.mimeType }}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div v-if=\"binaryData.fileSize\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t>{{ $locale.baseText('runData.fileSize') }}:\n\t\t\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div :class=\"$style.binaryValue\">{{ binaryData.fileSize }}</div>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<div :class=\"$style.binaryButtonContainer\">\n\t\t\t\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t\t\t\tv-if=\"isViewable(index, key)\"\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t:label=\"$locale.baseText('runData.showBinaryData')\"\n\t\t\t\t\t\t\t\t\t\tdata-test-id=\"ndv-view-binary-data\"\n\t\t\t\t\t\t\t\t\t\t@click=\"displayBinaryData(index, key)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t\t\t\tv-if=\"isDownloadable(index, key)\"\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t:label=\"$locale.baseText('runData.downloadBinaryData')\"\n\t\t\t\t\t\t\t\t\t\tdata-test-id=\"ndv-download-binary-data\"\n\t\t\t\t\t\t\t\t\t\t@click=\"downloadBinaryData(index, key)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div\n\t\t\tv-if=\"\n\t\t\t\thasNodeRun &&\n\t\t\t\t!hasRunError &&\n\t\t\t\tbinaryData.length === 0 &&\n\t\t\t\tdataCount > pageSize &&\n\t\t\t\t!isSchemaView &&\n\t\t\t\t!isArtificialRecoveredEventItem\n\t\t\t\"\n\t\t\tv-show=\"!editMode.enabled\"\n\t\t\t:class=\"$style.pagination\"\n\t\t\tdata-test-id=\"ndv-data-pagination\"\n\t\t>\n\t\t\t<el-pagination\n\t\t\t\tbackground\n\t\t\t\t:hide-on-single-page=\"true\"\n\t\t\t\t:current-page=\"currentPage\"\n\t\t\t\t:pager-count=\"5\"\n\t\t\t\t:page-size=\"pageSize\"\n\t\t\t\tlayout=\"prev, pager, next\"\n\t\t\t\t:total=\"dataCount\"\n\t\t\t\t@update:current-page=\"onCurrentPageChange\"\n\t\t\t>\n\t\t\t</el-pagination>\n\n\t\t\t<div :class=\"$style.pageSizeSelector\">\n\t\t\t\t<n8n-select\n\t\t\t\t\tsize=\"mini\"\n\t\t\t\t\t:model-value=\"pageSize\"\n\t\t\t\t\tteleported\n\t\t\t\t\t@update:model-value=\"onPageSizeChange\"\n\t\t\t\t>\n\t\t\t\t\t<template #prepend>{{ $locale.baseText('ndv.output.pageSize') }}</template>\n\t\t\t\t\t<n8n-option v-for=\"size in pageSizes\" :key=\"size\" :label=\"size\" :value=\"size\">\n\t\t\t\t\t</n8n-option>\n\t\t\t\t\t<n8n-option :label=\"$locale.baseText('ndv.output.all')\" :value=\"dataCount\"> </n8n-option>\n\t\t\t\t</n8n-select>\n\t\t\t</div>\n\t\t</div>\n\t\t<n8n-block-ui :show=\"blockUI\" :class=\"$style.uiBlocker\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineAsyncComponent, defineComponent, toRef } from 'vue';\nimport type { PropType } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useStorage } from '@/composables/useStorage';\nimport { saveAs } from 'file-saver';\nimport type {\n\tConnectionTypes,\n\tIBinaryData,\n\tIBinaryKeyData,\n\tIDataObject,\n\tINodeExecutionData,\n\tINodeOutputConfiguration,\n\tINodeTypeDescription,\n\tIRunData,\n\tIRunExecutionData,\n\tNodeHint,\n\tNodeError,\n\tWorkflow,\n} from 'n8n-workflow';\nimport { NodeHelpers, NodeConnectionType } from 'n8n-workflow';\n\nimport type {\n\tIExecutionResponse,\n\tINodeUi,\n\tINodeUpdatePropertiesInformation,\n\tIRunDataDisplayMode,\n\tITab,\n\tNodePanelType,\n} from '@/Interface';\n\nimport {\n\tDATA_PINNING_DOCS_URL,\n\tDATA_EDITING_DOCS_URL,\n\tNODE_TYPES_EXCLUDED_FROM_OUTPUT_NAME_APPEND,\n\tLOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG,\n\tLOCAL_STORAGE_PIN_DATA_DISCOVERY_CANVAS_FLAG,\n\tMAX_DISPLAY_DATA_SIZE,\n\tMAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW,\n\tMAX_DISPLAY_ITEMS_AUTO_ALL,\n\tTEST_PIN_DATA,\n\tHTML_NODE_TYPE,\n} from '@/constants';\n\nimport BinaryDataDisplay from '@/components/BinaryDataDisplay.vue';\nimport NodeErrorView from '@/components/Error/NodeErrorView.vue';\nimport JsonEditor from '@/components/JsonEditor/JsonEditor.vue';\n\nimport type { PinDataSource, UnpinDataSource } from '@/composables/usePinnedData';\nimport { usePinnedData } from '@/composables/usePinnedData';\nimport { dataPinningEventBus } from '@/event-bus';\nimport { clearJsonKey, isEmpty } from '@/utils/typesUtils';\nimport { executionDataToJson } from '@/utils/nodeTypesUtils';\nimport { searchInObject } from '@/utils/objectUtils';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport { useToast } from '@/composables/useToast';\nimport { isEqual, isObject } from 'lodash-es';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { useRootStore } from '@/stores/root.store';\nimport RunDataPinButton from '@/components/RunDataPinButton.vue';\n\nconst RunDataTable = defineAsyncComponent(\n\tasync () => await import('@/components/RunDataTable.vue'),\n);\nconst RunDataJson = defineAsyncComponent(async () => await import('@/components/RunDataJson.vue'));\nconst RunDataSchema = defineAsyncComponent(\n\tasync () => await import('@/components/RunDataSchema.vue'),\n);\nconst RunDataHtml = defineAsyncComponent(async () => await import('@/components/RunDataHtml.vue'));\nconst RunDataSearch = defineAsyncComponent(\n\tasync () => await import('@/components/RunDataSearch.vue'),\n);\n\nexport type EnterEditModeArgs = {\n\torigin: 'editIconButton' | 'insertTestDataLink';\n};\n\nexport default defineComponent({\n\tname: 'RunData',\n\tcomponents: {\n\t\tBinaryDataDisplay,\n\t\tNodeErrorView,\n\t\tJsonEditor,\n\t\tRunDataTable,\n\t\tRunDataJson,\n\t\tRunDataSchema,\n\t\tRunDataHtml,\n\t\tRunDataSearch,\n\t\tRunDataPinButton,\n\t},\n\tprops: {\n\t\tnode: {\n\t\t\ttype: Object as PropType<INodeUi | null>,\n\t\t\tdefault: null,\n\t\t},\n\t\tworkflow: {\n\t\t\ttype: Object as PropType<Workflow>,\n\t\t\trequired: true,\n\t\t},\n\t\trunIndex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tlinkedRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tcanLinkRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\ttooMuchDataTitle: {\n\t\t\ttype: String,\n\t\t},\n\t\tnoDataInBranchMessage: {\n\t\t\ttype: String,\n\t\t},\n\t\tisExecuting: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\texecutingMessage: {\n\t\t\ttype: String,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\tpaneType: {\n\t\t\ttype: String as PropType<NodePanelType>,\n\t\t\trequired: true,\n\t\t},\n\t\toverrideOutputs: {\n\t\t\ttype: Array as PropType<number[]>,\n\t\t},\n\t\tmappingEnabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tdistanceFromActive: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tblockUI: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisProductionExecutionPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisPaneActive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tsetup(props) {\n\t\tconst ndvStore = useNDVStore();\n\t\tconst nodeHelpers = useNodeHelpers();\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst node = toRef(props, 'node');\n\t\tconst pinnedData = usePinnedData(node, {\n\t\t\trunIndex: props.runIndex,\n\t\t\tdisplayMode: ndvStore.getPanelDisplayMode(props.paneType),\n\t\t});\n\n\t\treturn {\n\t\t\t...useToast(),\n\t\t\texternalHooks,\n\t\t\tnodeHelpers,\n\t\t\tpinnedData,\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tconnectionType: NodeConnectionType.Main as ConnectionTypes,\n\t\t\tbinaryDataPreviewActive: false,\n\t\t\tdataSize: 0,\n\t\t\tshowData: false,\n\t\t\tuserEnabledShowData: false,\n\t\t\toutputIndex: 0,\n\t\t\tbinaryDataDisplayVisible: false,\n\t\t\tbinaryDataDisplayData: null as IBinaryData | null,\n\n\t\t\tMAX_DISPLAY_DATA_SIZE,\n\t\t\tMAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW,\n\t\t\tMAX_DISPLAY_ITEMS_AUTO_ALL,\n\t\t\tcurrentPage: 1,\n\t\t\tpageSize: 10,\n\t\t\tpageSizes: [10, 25, 50, 100],\n\n\t\t\tpinDataDiscoveryTooltipVisible: false,\n\t\t\tisControlledPinDataTooltip: false,\n\t\t\tsearch: '',\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseNodeTypesStore,\n\t\t\tuseNDVStore,\n\t\t\tuseWorkflowsStore,\n\t\t\tuseSourceControlStore,\n\t\t\tuseRootStore,\n\t\t),\n\t\tisReadOnlyRoute() {\n\t\t\treturn this.$route?.meta?.readOnlyCanvas === true;\n\t\t},\n\t\tactiveNode(): INodeUi | null {\n\t\t\treturn this.ndvStore.activeNode;\n\t\t},\n\t\tdataPinningDocsUrl(): string {\n\t\t\treturn DATA_PINNING_DOCS_URL;\n\t\t},\n\t\tdataEditingDocsUrl(): string {\n\t\t\treturn DATA_EDITING_DOCS_URL;\n\t\t},\n\t\tdisplayMode(): IRunDataDisplayMode {\n\t\t\treturn this.ndvStore.getPanelDisplayMode(this.paneType);\n\t\t},\n\t\tnodeType(): INodeTypeDescription | null {\n\t\t\tif (this.node) {\n\t\t\t\treturn this.nodeTypesStore.getNodeType(this.node.type, this.node.typeVersion);\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tisSchemaView(): boolean {\n\t\t\treturn this.displayMode === 'schema';\n\t\t},\n\t\tisTriggerNode(): boolean {\n\t\t\tif (this.node === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn this.nodeTypesStore.isTriggerNode(this.node.type);\n\t\t},\n\t\tcanPinData(): boolean {\n\t\t\tif (this.node === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst canPinNode = usePinnedData(this.node).canPinNode(false);\n\n\t\t\treturn (\n\t\t\t\tcanPinNode &&\n\t\t\t\t!this.isPaneTypeInput &&\n\t\t\t\tthis.pinnedData.isValidNodeType.value &&\n\t\t\t\t!(this.binaryData && this.binaryData.length > 0)\n\t\t\t);\n\t\t},\n\t\tbuttons(): Array<{ label: string; value: string }> {\n\t\t\tconst defaults = [\n\t\t\t\t{ label: this.$locale.baseText('runData.table'), value: 'table' },\n\t\t\t\t{ label: this.$locale.baseText('runData.json'), value: 'json' },\n\t\t\t];\n\n\t\t\tif (this.binaryData.length) {\n\t\t\t\tdefaults.push({ label: this.$locale.baseText('runData.binary'), value: 'binary' });\n\t\t\t}\n\n\t\t\tconst schemaView = { label: this.$locale.baseText('runData.schema'), value: 'schema' };\n\t\t\tif (this.isPaneTypeInput) {\n\t\t\t\tdefaults.unshift(schemaView);\n\t\t\t} else {\n\t\t\t\tdefaults.push(schemaView);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tthis.isPaneTypeOutput &&\n\t\t\t\tthis.activeNode?.type === HTML_NODE_TYPE &&\n\t\t\t\tthis.activeNode.parameters.operation === 'generateHtmlTemplate'\n\t\t\t) {\n\t\t\t\tdefaults.unshift({ label: 'HTML', value: 'html' });\n\t\t\t}\n\n\t\t\treturn defaults;\n\t\t},\n\t\thasNodeRun(): boolean {\n\t\t\treturn Boolean(\n\t\t\t\t!this.isExecuting &&\n\t\t\t\t\tthis.node &&\n\t\t\t\t\t((this.workflowRunData && this.workflowRunData.hasOwnProperty(this.node.name)) ||\n\t\t\t\t\t\tthis.pinnedData.hasData.value),\n\t\t\t);\n\t\t},\n\t\tisArtificialRecoveredEventItem(): boolean {\n\t\t\treturn !!this.rawInputData?.[0]?.json?.isArtificialRecoveredEventItem;\n\t\t},\n\t\tsubworkflowExecutionError(): NodeError {\n\t\t\treturn {\n\t\t\t\tnode: this.node,\n\t\t\t\tmessages: [this.workflowsStore.subWorkflowExecutionError?.message ?? ''],\n\t\t\t} as NodeError;\n\t\t},\n\t\thasSubworkflowExecutionError(): boolean {\n\t\t\treturn Boolean(this.workflowsStore.subWorkflowExecutionError);\n\t\t},\n\t\tworkflowRunErrorAsNodeError(): NodeError | null {\n\t\t\tif (!this.node) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn this.workflowRunData?.[this.node?.name]?.[this.runIndex]?.error as NodeError;\n\t\t},\n\t\thasRunError(): boolean {\n\t\t\treturn Boolean(this.node && this.workflowRunErrorAsNodeError);\n\t\t},\n\t\texecutionHints(): NodeHint[] {\n\t\t\tif (this.hasNodeRun) {\n\t\t\t\tconst hints = this.node && this.workflowRunData?.[this.node.name]?.[this.runIndex]?.hints;\n\n\t\t\t\tif (hints) return hints;\n\t\t\t}\n\n\t\t\treturn [];\n\t\t},\n\t\tworkflowExecution(): IExecutionResponse | null {\n\t\t\treturn this.workflowsStore.getWorkflowExecution;\n\t\t},\n\t\tworkflowRunData(): IRunData | null {\n\t\t\tif (this.workflowExecution === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst executionData: IRunExecutionData | undefined = this.workflowExecution.data;\n\t\t\tif (executionData?.resultData) {\n\t\t\t\treturn executionData.resultData.runData;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tdataCount(): number {\n\t\t\treturn this.getDataCount(this.runIndex, this.currentOutputIndex);\n\t\t},\n\t\tunfilteredDataCount(): number {\n\t\t\treturn this.pinnedData.data.value\n\t\t\t\t? this.pinnedData.data.value.length\n\t\t\t\t: this.rawInputData.length;\n\t\t},\n\t\tdataSizeInMB(): string {\n\t\t\treturn (this.dataSize / (1024 * 1024)).toFixed(1);\n\t\t},\n\t\tmaxOutputIndex(): number {\n\t\t\tif (this.node === null || this.runIndex === undefined) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tconst runData: IRunData | null = this.workflowRunData;\n\n\t\t\tif (runData === null || !runData.hasOwnProperty(this.node.name)) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (runData[this.node.name].length < this.runIndex) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (runData[this.node.name][this.runIndex]) {\n\t\t\t\tconst taskData = runData[this.node.name][this.runIndex].data;\n\t\t\t\tif (taskData?.main) {\n\t\t\t\t\treturn taskData.main.length - 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t},\n\t\tcurrentPageOffset(): number {\n\t\t\treturn this.pageSize * (this.currentPage - 1);\n\t\t},\n\t\tmaxRunIndex(): number {\n\t\t\tif (this.node === null) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tconst runData: IRunData | null = this.workflowRunData;\n\n\t\t\tif (runData === null || !runData.hasOwnProperty(this.node.name)) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (runData[this.node.name].length) {\n\t\t\t\treturn runData[this.node.name].length - 1;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t},\n\t\trawInputData(): INodeExecutionData[] {\n\t\t\treturn this.getRawInputData(this.runIndex, this.currentOutputIndex, this.connectionType);\n\t\t},\n\t\tunfilteredInputData(): INodeExecutionData[] {\n\t\t\treturn this.getPinDataOrLiveData(this.rawInputData);\n\t\t},\n\t\tinputData(): INodeExecutionData[] {\n\t\t\treturn this.getFilteredData(this.unfilteredInputData);\n\t\t},\n\t\tinputDataPage(): INodeExecutionData[] {\n\t\t\tconst offset = this.pageSize * (this.currentPage - 1);\n\t\t\treturn this.inputData.slice(offset, offset + this.pageSize);\n\t\t},\n\t\tjsonData(): IDataObject[] {\n\t\t\treturn executionDataToJson(this.inputData);\n\t\t},\n\t\tbinaryData(): IBinaryKeyData[] {\n\t\t\tif (!this.node) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst binaryData = this.nodeHelpers.getBinaryData(\n\t\t\t\tthis.workflowRunData,\n\t\t\t\tthis.node.name,\n\t\t\t\tthis.runIndex,\n\t\t\t\tthis.currentOutputIndex,\n\t\t\t);\n\t\t\treturn binaryData.filter((data) => Boolean(data && Object.keys(data).length));\n\t\t},\n\t\tinputHtml(): string {\n\t\t\treturn String(this.inputData[0]?.json?.html ?? '');\n\t\t},\n\t\tcurrentOutputIndex(): number {\n\t\t\tif (this.overrideOutputs?.length && !this.overrideOutputs.includes(this.outputIndex)) {\n\t\t\t\treturn this.overrideOutputs[0];\n\t\t\t}\n\n\t\t\treturn this.outputIndex;\n\t\t},\n\t\tbranches(): ITab[] {\n\t\t\tconst capitalize = (name: string) => name.charAt(0).toLocaleUpperCase() + name.slice(1);\n\n\t\t\tconst branches: ITab[] = [];\n\n\t\t\tfor (let i = 0; i <= this.maxOutputIndex; i++) {\n\t\t\t\tif (this.overrideOutputs && !this.overrideOutputs.includes(i)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst totalItemsCount = this.getRawInputData(this.runIndex, i).length;\n\t\t\t\tconst itemsCount = this.getDataCount(this.runIndex, i);\n\t\t\t\tconst items = this.search\n\t\t\t\t\t? this.$locale.baseText('ndv.search.items', {\n\t\t\t\t\t\t\tadjustToNumber: totalItemsCount,\n\t\t\t\t\t\t\tinterpolate: { matched: itemsCount, total: totalItemsCount },\n\t\t\t\t\t\t})\n\t\t\t\t\t: this.$locale.baseText('ndv.output.items', {\n\t\t\t\t\t\t\tadjustToNumber: itemsCount,\n\t\t\t\t\t\t\tinterpolate: { count: itemsCount },\n\t\t\t\t\t\t});\n\t\t\t\tlet outputName = this.getOutputName(i);\n\n\t\t\t\tif (`${outputName}` === `${i}`) {\n\t\t\t\t\toutputName = `${this.$locale.baseText('ndv.output')} ${outputName}`;\n\t\t\t\t} else {\n\t\t\t\t\tconst appendBranchWord = NODE_TYPES_EXCLUDED_FROM_OUTPUT_NAME_APPEND.includes(\n\t\t\t\t\t\tthis.node?.type ?? '',\n\t\t\t\t\t)\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: ` ${this.$locale.baseText('ndv.output.branch')}`;\n\t\t\t\t\toutputName = capitalize(`${this.getOutputName(i)}${appendBranchWord}`);\n\t\t\t\t}\n\t\t\t\tbranches.push({\n\t\t\t\t\tlabel:\n\t\t\t\t\t\t(this.search && itemsCount) || totalItemsCount\n\t\t\t\t\t\t\t? `${outputName} (${items})`\n\t\t\t\t\t\t\t: outputName,\n\t\t\t\t\tvalue: i,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn branches;\n\t\t},\n\t\teditMode(): { enabled: boolean; value: string } {\n\t\t\treturn this.isPaneTypeInput\n\t\t\t\t? { enabled: false, value: '' }\n\t\t\t\t: this.ndvStore.outputPanelEditMode;\n\t\t},\n\t\tisPaneTypeInput(): boolean {\n\t\t\treturn this.paneType === 'input';\n\t\t},\n\t\tisPaneTypeOutput(): boolean {\n\t\t\treturn this.paneType === 'output';\n\t\t},\n\t\treadOnlyEnv(): boolean {\n\t\t\treturn this.sourceControlStore.preferences.branchReadOnly;\n\t\t},\n\t\tshowIOSearch(): boolean {\n\t\t\treturn this.hasNodeRun && !this.hasRunError && this.unfilteredInputData.length > 0;\n\t\t},\n\t\textraControlsLocation() {\n\t\t\tif (!this.hasNodeRun) return 'header';\n\t\t\tif (this.maxRunIndex > 0) return 'runs';\n\t\t\tif (this.maxOutputIndex > 0 && this.branches.length > 1) {\n\t\t\t\treturn 'outputs';\n\t\t\t}\n\n\t\t\treturn 'items';\n\t\t},\n\t\tshowIoSearchNoMatchContent(): boolean {\n\t\t\treturn this.hasNodeRun && !this.inputData.length && !!this.search;\n\t\t},\n\t\tparentNodeOutputData(): INodeExecutionData[] {\n\t\t\tconst parentNode = this.workflow.getParentNodesByDepth(this.node?.name ?? '')[0];\n\t\t\tlet parentNodeData: INodeExecutionData[] = [];\n\n\t\t\tif (parentNode?.name) {\n\t\t\t\tparentNodeData = this.nodeHelpers.getNodeInputData(\n\t\t\t\t\tthis.workflow.getNode(parentNode?.name),\n\t\t\t\t\tthis.runIndex,\n\t\t\t\t\tthis.outputIndex,\n\t\t\t\t\t'input',\n\t\t\t\t\tthis.connectionType,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn parentNodeData;\n\t\t},\n\t},\n\twatch: {\n\t\tnode(newNode: INodeUi, prevNode: INodeUi) {\n\t\t\tif (newNode.id === prevNode.id) return;\n\t\t\tthis.init();\n\t\t},\n\t\thasNodeRun() {\n\t\t\tif (this.paneType === 'output') this.setDisplayMode();\n\t\t},\n\t\tinputDataPage: {\n\t\t\thandler(data: INodeExecutionData[]) {\n\t\t\t\tif (this.paneType && data) {\n\t\t\t\t\tthis.ndvStore.setNDVPanelDataIsEmpty({\n\t\t\t\t\t\tpanel: this.paneType as 'input' | 'output',\n\t\t\t\t\t\tisEmpty: data.every((item) => isEmpty(item.json)),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\timmediate: true,\n\t\t\tdeep: true,\n\t\t},\n\t\tjsonData(data: IDataObject[], prevData: IDataObject[]) {\n\t\t\tif (isEqual(data, prevData)) return;\n\t\t\tthis.refreshDataSize();\n\t\t\tif (this.dataCount) {\n\t\t\t\tthis.resetCurrentPageIfTooFar();\n\t\t\t}\n\t\t\tthis.showPinDataDiscoveryTooltip(data);\n\t\t},\n\t\tbinaryData(newData: IBinaryKeyData[], prevData: IBinaryKeyData[]) {\n\t\t\tif (newData.length && !prevData.length && this.displayMode !== 'binary') {\n\t\t\t\tthis.switchToBinary();\n\t\t\t} else if (!newData.length && this.displayMode === 'binary') {\n\t\t\t\tthis.onDisplayModeChange('table');\n\t\t\t}\n\t\t},\n\t\tcurrentOutputIndex(branchIndex: number) {\n\t\t\tthis.ndvStore.setNDVBranchIndex({\n\t\t\t\tpane: this.paneType as 'input' | 'output',\n\t\t\t\tbranchIndex,\n\t\t\t});\n\t\t},\n\t\tsearch(newSearch: string) {\n\t\t\tthis.$emit('search', newSearch);\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.init();\n\n\t\tif (!this.isPaneTypeInput) {\n\t\t\tthis.showPinDataDiscoveryTooltip(this.jsonData);\n\t\t}\n\t\tthis.ndvStore.setNDVBranchIndex({\n\t\t\tpane: this.paneType as 'input' | 'output',\n\t\t\tbranchIndex: this.currentOutputIndex,\n\t\t});\n\n\t\tif (this.paneType === 'output') {\n\t\t\tthis.setDisplayMode();\n\t\t\tthis.activatePane();\n\t\t}\n\n\t\tif (this.hasRunError && this.node) {\n\t\t\tconst error = this.workflowRunData?.[this.node.name]?.[this.runIndex]?.error;\n\t\t\tconst errorsToTrack = ['unknown error'];\n\n\t\t\tif (error && errorsToTrack.some((e) => error.message.toLowerCase().includes(e))) {\n\t\t\t\tthis.$telemetry.track(\n\t\t\t\t\t`User encountered an error: \"${error.message}\"`,\n\t\t\t\t\t{\n\t\t\t\t\t\tnode: this.node.type,\n\t\t\t\t\t\terrorMessage: error.message,\n\t\t\t\t\t\tnodeVersion: this.node.typeVersion,\n\t\t\t\t\t\tn8nVersion: this.rootStore.versionCli,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\twithPostHog: true,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tthis.hidePinDataDiscoveryTooltip();\n\t},\n\tmethods: {\n\t\tgetResolvedNodeOutputs() {\n\t\t\tif (this.node && this.nodeType) {\n\t\t\t\tconst workflowNode = this.workflow.getNode(this.node.name);\n\n\t\t\t\tif (workflowNode) {\n\t\t\t\t\tconst outputs = NodeHelpers.getNodeOutputs(this.workflow, workflowNode, this.nodeType);\n\t\t\t\t\treturn outputs;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t\tshouldHintBeDisplayed(hint: NodeHint): boolean {\n\t\t\tconst { location, whenToDisplay } = hint;\n\n\t\t\tif (location) {\n\t\t\t\tif (location === 'ndv' && !['input', 'output'].includes(this.paneType)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (location === 'inputPane' && this.paneType !== 'input') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (location === 'outputPane' && this.paneType !== 'output') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (whenToDisplay === 'afterExecution' && !this.hasNodeRun) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (whenToDisplay === 'beforeExecution' && this.hasNodeRun) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tgetNodeHints(): NodeHint[] {\n\t\t\tif (this.node && this.nodeType) {\n\t\t\t\tconst workflowNode = this.workflow.getNode(this.node.name);\n\n\t\t\t\tif (workflowNode) {\n\t\t\t\t\tconst executionHints = this.executionHints;\n\t\t\t\t\tconst nodeHints = NodeHelpers.getNodeHints(this.workflow, workflowNode, this.nodeType, {\n\t\t\t\t\t\trunExecutionData: this.workflowExecution?.data ?? null,\n\t\t\t\t\t\trunIndex: this.runIndex,\n\t\t\t\t\t\tconnectionInputData: this.parentNodeOutputData,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn executionHints.concat(nodeHints).filter(this.shouldHintBeDisplayed);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t\tonItemHover(itemIndex: number | null) {\n\t\t\tif (itemIndex === null) {\n\t\t\t\tthis.$emit('itemHover', null);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$emit('itemHover', {\n\t\t\t\toutputIndex: this.currentOutputIndex,\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t},\n\t\tonClickDataPinningDocsLink() {\n\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tpane: 'output',\n\t\t\t\ttype: 'data-pinning-docs',\n\t\t\t});\n\t\t},\n\t\tshowPinDataDiscoveryTooltip(value: IDataObject[]) {\n\t\t\tif (!this.isTriggerNode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst pinDataDiscoveryFlag = useStorage(LOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG).value;\n\n\t\t\tif (value && value.length > 0 && !this.isReadOnlyRoute && !pinDataDiscoveryFlag) {\n\t\t\t\tthis.pinDataDiscoveryComplete();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.isControlledPinDataTooltip = true;\n\t\t\t\t\tthis.pinDataDiscoveryTooltipVisible = true;\n\t\t\t\t\tdataPinningEventBus.emit('data-pinning-discovery', { isTooltipVisible: true });\n\t\t\t\t}, 500); // Wait for NDV to open\n\t\t\t}\n\t\t},\n\t\thidePinDataDiscoveryTooltip() {\n\t\t\tif (this.pinDataDiscoveryTooltipVisible) {\n\t\t\t\tthis.isControlledPinDataTooltip = false;\n\t\t\t\tthis.pinDataDiscoveryTooltipVisible = false;\n\t\t\t\tdataPinningEventBus.emit('data-pinning-discovery', { isTooltipVisible: false });\n\t\t\t}\n\t\t},\n\t\tpinDataDiscoveryComplete() {\n\t\t\tuseStorage(LOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG).value = 'true';\n\t\t\tuseStorage(LOCAL_STORAGE_PIN_DATA_DISCOVERY_CANVAS_FLAG).value = 'true';\n\t\t},\n\t\tenterEditMode({ origin }: EnterEditModeArgs) {\n\t\t\tconst inputData = this.pinnedData.data.value\n\t\t\t\t? clearJsonKey(this.pinnedData.data.value)\n\t\t\t\t: executionDataToJson(this.rawInputData);\n\n\t\t\tconst inputDataLength = Array.isArray(inputData)\n\t\t\t\t? inputData.length\n\t\t\t\t: Object.keys(inputData ?? {}).length;\n\n\t\t\tconst data = inputDataLength > 0 ? inputData : TEST_PIN_DATA;\n\n\t\t\tthis.ndvStore.setOutputPanelEditModeEnabled(true);\n\t\t\tthis.ndvStore.setOutputPanelEditModeValue(JSON.stringify(data, null, 2));\n\n\t\t\tthis.$telemetry.track('User opened ndv edit state', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tclick_type: origin === 'editIconButton' ? 'button' : 'link',\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\trun_index: this.runIndex,\n\t\t\t\tis_output_present: this.hasNodeRun || this.pinnedData.hasData.value,\n\t\t\t\tview: !this.hasNodeRun && !this.pinnedData.hasData.value ? 'undefined' : this.displayMode,\n\t\t\t\tis_data_pinned: this.pinnedData.hasData.value,\n\t\t\t});\n\t\t},\n\t\tonClickCancelEdit() {\n\t\t\tthis.ndvStore.setOutputPanelEditModeEnabled(false);\n\t\t\tthis.ndvStore.setOutputPanelEditModeValue('');\n\t\t\tthis.onExitEditMode({ type: 'cancel' });\n\t\t},\n\t\tonClickSaveEdit() {\n\t\t\tif (!this.node) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { value } = this.editMode;\n\n\t\t\tthis.clearAllStickyNotifications();\n\n\t\t\ttry {\n\t\t\t\tconst clearedValue = clearJsonKey(value) as INodeExecutionData[];\n\t\t\t\ttry {\n\t\t\t\t\tthis.pinnedData.setData(clearedValue, 'save-edit');\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// setData function already shows toasts on error, so just return here\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error, this.$locale.baseText('ndv.pinData.error.syntaxError.title'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.ndvStore.setOutputPanelEditModeEnabled(false);\n\n\t\t\tthis.onExitEditMode({ type: 'save' });\n\t\t},\n\t\tonExitEditMode({ type }: { type: 'save' | 'cancel' }) {\n\t\t\tthis.$telemetry.track('User closed ndv edit state', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\trun_index: this.runIndex,\n\t\t\t\tview: this.displayMode,\n\t\t\t\ttype,\n\t\t\t});\n\t\t},\n\t\tasync onTogglePinData({ source }: { source: PinDataSource | UnpinDataSource }) {\n\t\t\tif (!this.node) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (source === 'pin-icon-click') {\n\t\t\t\tconst telemetryPayload = {\n\t\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\trun_index: this.runIndex,\n\t\t\t\t\tview: !this.hasNodeRun && !this.pinnedData.hasData.value ? 'none' : this.displayMode,\n\t\t\t\t};\n\n\t\t\t\tvoid this.externalHooks.run('runData.onTogglePinData', telemetryPayload);\n\t\t\t\tthis.$telemetry.track('User clicked pin data icon', telemetryPayload);\n\t\t\t}\n\n\t\t\tthis.nodeHelpers.updateNodeParameterIssues(this.node);\n\n\t\t\tif (this.pinnedData.hasData.value) {\n\t\t\t\tthis.pinnedData.unsetData(source);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.pinnedData.setData(this.rawInputData, 'pin-icon-click');\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.maxRunIndex > 0) {\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttitle: this.$locale.baseText('ndv.pinData.pin.multipleRuns.title', {\n\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\tindex: `${this.runIndex}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tmessage: this.$locale.baseText('ndv.pinData.pin.multipleRuns.description'),\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\tduration: 2000,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.hidePinDataDiscoveryTooltip();\n\t\t\tthis.pinDataDiscoveryComplete();\n\t\t},\n\t\tswitchToBinary() {\n\t\t\tthis.onDisplayModeChange('binary');\n\t\t},\n\t\tonBranchChange(value: number) {\n\t\t\tthis.outputIndex = value;\n\n\t\t\tthis.$telemetry.track('User changed ndv branch', {\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tbranch_index: value,\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tnode_type_input_selection: this.nodeType ? this.nodeType.name : '',\n\t\t\t\tpane: this.paneType,\n\t\t\t});\n\t\t},\n\t\tshowTooMuchData() {\n\t\t\tthis.showData = true;\n\t\t\tthis.userEnabledShowData = true;\n\t\t\tthis.$telemetry.track('User clicked ndv button', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tpane: this.paneType,\n\t\t\t\ttype: 'showTooMuchData',\n\t\t\t});\n\t\t},\n\t\ttoggleLinkRuns() {\n\t\t\tthis.linkedRuns ? this.unlinkRun() : this.linkRun();\n\t\t},\n\t\tlinkRun() {\n\t\t\tthis.$emit('linkRun');\n\t\t},\n\t\tunlinkRun() {\n\t\t\tthis.$emit('unlinkRun');\n\t\t},\n\t\tonCurrentPageChange(value: number) {\n\t\t\tthis.currentPage = value;\n\t\t\tthis.$telemetry.track('User changed ndv page', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tpane: this.paneType,\n\t\t\t\tpage_selected: this.currentPage,\n\t\t\t\tpage_size: this.pageSize,\n\t\t\t\titems_total: this.dataCount,\n\t\t\t});\n\t\t},\n\t\tresetCurrentPageIfTooFar() {\n\t\t\tconst maxPage = Math.ceil(this.dataCount / this.pageSize);\n\t\t\tif (maxPage < this.currentPage) {\n\t\t\t\tthis.currentPage = maxPage;\n\t\t\t}\n\t\t},\n\t\tonPageSizeChange(pageSize: number) {\n\t\t\tthis.pageSize = pageSize;\n\n\t\t\tthis.resetCurrentPageIfTooFar();\n\n\t\t\tthis.$telemetry.track('User changed ndv page size', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tpane: this.paneType,\n\t\t\t\tpage_selected: this.currentPage,\n\t\t\t\tpage_size: this.pageSize,\n\t\t\t\titems_total: this.dataCount,\n\t\t\t});\n\t\t},\n\t\tonDisplayModeChange(displayMode: IRunDataDisplayMode) {\n\t\t\tconst previous = this.displayMode;\n\t\t\tthis.ndvStore.setPanelDisplayMode({ pane: this.paneType, mode: displayMode });\n\n\t\t\tif (!this.userEnabledShowData) this.updateShowData();\n\n\t\t\tconst dataContainerRef = this.$refs.dataContainer as Element | undefined;\n\t\t\tif (dataContainerRef) {\n\t\t\t\tconst dataDisplay = dataContainerRef.children[0];\n\n\t\t\t\tif (dataDisplay) {\n\t\t\t\t\tdataDisplay.scrollTo(0, 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.closeBinaryDataDisplay();\n\t\t\tvoid this.externalHooks.run('runData.displayModeChanged', {\n\t\t\t\tnewValue: displayMode,\n\t\t\t\toldValue: previous,\n\t\t\t});\n\t\t\tif (this.activeNode) {\n\t\t\t\tthis.$telemetry.track('User changed ndv item view', {\n\t\t\t\t\tprevious_view: previous,\n\t\t\t\t\tnew_view: displayMode,\n\t\t\t\t\tnode_type: this.activeNode.type,\n\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\tpane: this.paneType,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetRunLabel(option: number) {\n\t\t\tlet itemsCount = 0;\n\t\t\tfor (let i = 0; i <= this.maxOutputIndex; i++) {\n\t\t\t\titemsCount += this.getPinDataOrLiveData(this.getRawInputData(option - 1, i)).length;\n\t\t\t}\n\t\t\tconst items = this.$locale.baseText('ndv.output.items', {\n\t\t\t\tadjustToNumber: itemsCount,\n\t\t\t\tinterpolate: { count: itemsCount },\n\t\t\t});\n\t\t\tconst itemsLabel = itemsCount > 0 ? ` (${items})` : '';\n\t\t\treturn option + this.$locale.baseText('ndv.output.of') + (this.maxRunIndex + 1) + itemsLabel;\n\t\t},\n\t\tgetRawInputData(\n\t\t\trunIndex: number,\n\t\t\toutputIndex: number,\n\t\t\tconnectionType: ConnectionTypes = NodeConnectionType.Main,\n\t\t): INodeExecutionData[] {\n\t\t\tlet inputData: INodeExecutionData[] = [];\n\n\t\t\tif (this.node) {\n\t\t\t\tinputData = this.nodeHelpers.getNodeInputData(\n\t\t\t\t\tthis.node,\n\t\t\t\t\trunIndex,\n\t\t\t\t\toutputIndex,\n\t\t\t\t\tthis.paneType,\n\t\t\t\t\tconnectionType,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (inputData.length === 0 || !Array.isArray(inputData)) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn inputData;\n\t\t},\n\t\tgetPinDataOrLiveData(inputData: INodeExecutionData[]): INodeExecutionData[] {\n\t\t\tif (this.pinnedData.data.value && !this.isProductionExecutionPreview) {\n\t\t\t\treturn Array.isArray(this.pinnedData.data.value)\n\t\t\t\t\t? this.pinnedData.data.value.map((value) => ({\n\t\t\t\t\t\t\tjson: value,\n\t\t\t\t\t\t}))\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tjson: this.pinnedData.data.value,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t];\n\t\t\t}\n\t\t\treturn inputData;\n\t\t},\n\t\tgetFilteredData(inputData: INodeExecutionData[]): INodeExecutionData[] {\n\t\t\tif (!this.search) {\n\t\t\t\treturn inputData;\n\t\t\t}\n\n\t\t\tthis.currentPage = 1;\n\t\t\treturn inputData.filter(({ json }) => searchInObject(json, this.search));\n\t\t},\n\t\tgetDataCount(\n\t\t\trunIndex: number,\n\t\t\toutputIndex: number,\n\t\t\tconnectionType: ConnectionTypes = NodeConnectionType.Main,\n\t\t) {\n\t\t\tif (!this.node) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (this.workflowRunData?.[this.node.name]?.[runIndex]?.hasOwnProperty('error')) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tconst rawInputData = this.getRawInputData(runIndex, outputIndex, connectionType);\n\t\t\tconst pinOrLiveData = this.getPinDataOrLiveData(rawInputData);\n\t\t\treturn this.getFilteredData(pinOrLiveData).length;\n\t\t},\n\t\tinit() {\n\t\t\t// Reset the selected output index every time another node gets selected\n\t\t\tthis.outputIndex = 0;\n\t\t\tthis.refreshDataSize();\n\t\t\tthis.closeBinaryDataDisplay();\n\t\t\tlet outputTypes: ConnectionTypes[] = [];\n\t\t\tif (this.nodeType !== null && this.node !== null) {\n\t\t\t\tconst outputs = this.getResolvedNodeOutputs();\n\t\t\t\toutputTypes = NodeHelpers.getConnectionTypes(outputs);\n\t\t\t}\n\t\t\tthis.connectionType = outputTypes.length === 0 ? NodeConnectionType.Main : outputTypes[0];\n\t\t\tif (this.binaryData.length > 0) {\n\t\t\t\tthis.ndvStore.setPanelDisplayMode({\n\t\t\t\t\tpane: this.paneType as 'input' | 'output',\n\t\t\t\t\tmode: 'binary',\n\t\t\t\t});\n\t\t\t} else if (this.displayMode === 'binary') {\n\t\t\t\tthis.ndvStore.setPanelDisplayMode({\n\t\t\t\t\tpane: this.paneType as 'input' | 'output',\n\t\t\t\t\tmode: 'table',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tcloseBinaryDataDisplay() {\n\t\t\tthis.binaryDataDisplayVisible = false;\n\t\t\tthis.binaryDataDisplayData = null;\n\t\t},\n\t\tclearExecutionData() {\n\t\t\tthis.workflowsStore.setWorkflowExecutionData(null);\n\t\t\tthis.nodeHelpers.updateNodesExecutionIssues();\n\t\t},\n\t\tisViewable(index: number, key: string | number): boolean {\n\t\t\tconst { fileType } = this.binaryData[index][key];\n\t\t\treturn (\n\t\t\t\t!!fileType && ['image', 'audio', 'video', 'text', 'json', 'pdf', 'html'].includes(fileType)\n\t\t\t);\n\t\t},\n\t\tisDownloadable(index: number, key: string | number): boolean {\n\t\t\tconst { mimeType, fileName } = this.binaryData[index][key];\n\t\t\treturn !!(mimeType && fileName);\n\t\t},\n\t\tasync downloadBinaryData(index: number, key: string | number) {\n\t\t\tconst { id, data, fileName, fileExtension, mimeType } = this.binaryData[index][key];\n\n\t\t\tif (id) {\n\t\t\t\tconst url = this.workflowsStore.getBinaryUrl(id, 'download', fileName ?? '', mimeType);\n\t\t\t\tsaveAs(url, [fileName, fileExtension].join('.'));\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tconst bufferString = 'data:' + mimeType + ';base64,' + data;\n\t\t\t\tconst blob = await fetch(bufferString).then(async (d) => await d.blob());\n\t\t\t\tsaveAs(blob, fileName);\n\t\t\t}\n\t\t},\n\t\tasync downloadJsonData() {\n\t\t\tconst fileName = (this.node?.name ?? '').replace(/[^\\w\\d]/g, '_');\n\t\t\tconst blob = new Blob([JSON.stringify(this.rawInputData, null, 2)], {\n\t\t\t\ttype: 'application/json',\n\t\t\t});\n\n\t\t\tsaveAs(blob, `${fileName}.json`);\n\t\t},\n\t\tdisplayBinaryData(index: number, key: string | number) {\n\t\t\tconst { data, mimeType } = this.binaryData[index][key];\n\t\t\tthis.binaryDataDisplayVisible = true;\n\n\t\t\tthis.binaryDataDisplayData = {\n\t\t\t\tnode: this.node?.name,\n\t\t\t\trunIndex: this.runIndex,\n\t\t\t\toutputIndex: this.currentOutputIndex,\n\t\t\t\tindex,\n\t\t\t\tkey,\n\t\t\t\tdata,\n\t\t\t\tmimeType,\n\t\t\t};\n\t\t},\n\t\tgetOutputName(outputIndex: number) {\n\t\t\tif (this.node === null) {\n\t\t\t\treturn outputIndex + 1;\n\t\t\t}\n\n\t\t\tconst nodeType = this.nodeType;\n\t\t\tconst outputs = this.getResolvedNodeOutputs();\n\t\t\tconst outputConfiguration = outputs?.[outputIndex] as INodeOutputConfiguration;\n\n\t\t\tif (outputConfiguration && isObject(outputConfiguration)) {\n\t\t\t\treturn outputConfiguration?.displayName;\n\t\t\t}\n\t\t\tif (!nodeType?.outputNames || nodeType.outputNames.length <= outputIndex) {\n\t\t\t\treturn outputIndex + 1;\n\t\t\t}\n\n\t\t\treturn nodeType.outputNames[outputIndex];\n\t\t},\n\t\trefreshDataSize() {\n\t\t\t// Hide by default the data from being displayed\n\t\t\tthis.showData = false;\n\t\t\tconst jsonItems = this.inputDataPage.map((item) => item.json);\n\t\t\tconst byteSize = new Blob([JSON.stringify(jsonItems)]).size;\n\t\t\tthis.dataSize = byteSize;\n\t\t\tthis.updateShowData();\n\t\t},\n\t\tupdateShowData() {\n\t\t\t// Display data if it is reasonably small (< 1MB)\n\t\t\tthis.showData =\n\t\t\t\t(this.isSchemaView && this.dataSize < this.MAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW) ||\n\t\t\t\tthis.dataSize < this.MAX_DISPLAY_DATA_SIZE;\n\t\t},\n\t\tonRunIndexChange(run: number) {\n\t\t\tthis.$emit('runChange', run);\n\t\t},\n\t\tenableNode() {\n\t\t\tif (this.node) {\n\t\t\t\tconst updateInformation = {\n\t\t\t\t\tname: this.node.name,\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tdisabled: !this.node.disabled,\n\t\t\t\t\t} as IDataObject,\n\t\t\t\t} as INodeUpdatePropertiesInformation;\n\n\t\t\t\tthis.workflowsStore.updateNodeProperties(updateInformation);\n\t\t\t}\n\t\t},\n\t\tsetDisplayMode() {\n\t\t\tif (!this.activeNode) return;\n\n\t\t\tconst shouldDisplayHtml =\n\t\t\t\tthis.activeNode.type === HTML_NODE_TYPE &&\n\t\t\t\tthis.activeNode.parameters.operation === 'generateHtmlTemplate';\n\n\t\t\tif (shouldDisplayHtml) {\n\t\t\t\tthis.ndvStore.setPanelDisplayMode({\n\t\t\t\t\tpane: 'output',\n\t\t\t\t\tmode: 'html',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tactivatePane() {\n\t\t\tthis.$emit('activatePane');\n\t\t},\n\t\tonSearchClear() {\n\t\t\tthis.search = '';\n\t\t\tdocument.dispatchEvent(new KeyboardEvent('keyup', { key: '/' }));\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.infoIcon {\n\tcolor: var(--color-foreground-dark);\n}\n\n.center {\n\tdisplay: flex;\n\theight: 100%;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: var(--spacing-s) var(--spacing-s) var(--spacing-xl) var(--spacing-s);\n\ttext-align: center;\n\n\t> * {\n\t\tmax-width: 316px;\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.container {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: var(--color-run-data-background);\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.pinnedDataCallout {\n\tborder-radius: inherit;\n\tborder-bottom-right-radius: 0;\n\tborder-top: 0;\n\tborder-left: 0;\n\tborder-right: 0;\n}\n\n.header {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-bottom: var(--spacing-s);\n\tpadding: var(--spacing-s) var(--spacing-s) 0 var(--spacing-s);\n\tposition: relative;\n\toverflow-x: auto;\n\toverflow-y: hidden;\n\tmin-height: calc(30px + var(--spacing-s));\n\n\t> *:first-child {\n\t\tflex-grow: 1;\n\t}\n}\n\n.dataContainer {\n\tposition: relative;\n\toverflow-y: auto;\n\theight: 100%;\n\n\t&:hover {\n\t\t.actions-group {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n\n.dataDisplay {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: 0 var(--spacing-s) var(--spacing-3xl) var(--spacing-s);\n\tright: 0;\n\toverflow-y: auto;\n\tline-height: var(--font-line-height-xloose);\n\tword-break: normal;\n\theight: 100%;\n}\n\n.outputs {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--spacing-s);\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n\tpadding-bottom: var(--spacing-s);\n}\n\n.tabs {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmin-height: 30px;\n}\n\n.itemsCount {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-2xs);\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n\tpadding-bottom: var(--spacing-s);\n\n\t.itemsText {\n\t\tflex-shrink: 0;\n\t\toverflow-x: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&.muted .itemsText {\n\t\tcolor: var(--color-text-light);\n\t\tfont-size: var(--font-size-2xs);\n\t}\n}\n\n.inputSelect {\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n\tpadding-bottom: var(--spacing-s);\n}\n\n.runSelector {\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n\tpadding-bottom: var(--spacing-s);\n\tdisplay: flex;\n\tgap: var(--spacing-4xs);\n\talign-items: center;\n\n\t:global(.el-input--suffix .el-input__inner) {\n\t\tpadding-right: var(--spacing-l);\n\t}\n}\n\n.search {\n\tmargin-left: auto;\n}\n\n.runSelectorInner {\n\tmax-width: 172px;\n}\n\n.pagination {\n\twidth: 100%;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tbottom: 0;\n\tpadding: 5px;\n\toverflow-y: hidden;\n}\n\n.pageSizeSelector {\n\ttext-transform: capitalize;\n\tmax-width: 150px;\n\tflex: 0 1 auto;\n}\n\n.binaryIndex {\n\tdisplay: block;\n\tpadding: var(--spacing-2xs);\n\tfont-size: var(--font-size-2xs);\n\n\t> * {\n\t\tdisplay: inline-block;\n\t\twidth: 30px;\n\t\theight: 30px;\n\t\tline-height: 30px;\n\t\tborder-radius: var(--border-radius-base);\n\t\ttext-align: center;\n\t\tbackground-color: var(--color-foreground-xdark);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tcolor: var(--color-text-xlight);\n\t}\n}\n\n.binaryRow {\n\tdisplay: inline-flex;\n\tfont-size: var(--font-size-2xs);\n}\n\n.binaryCell {\n\tdisplay: inline-block;\n\twidth: 300px;\n\toverflow: hidden;\n\tbackground-color: var(--color-foreground-xlight);\n\tmargin-right: var(--spacing-s);\n\tmargin-bottom: var(--spacing-s);\n\tborder-radius: var(--border-radius-base);\n\tborder: var(--border-base);\n\tpadding: var(--spacing-s);\n}\n\n.binaryHeader {\n\tcolor: $color-primary;\n\tfont-weight: var(--font-weight-bold);\n\tfont-size: 1.2em;\n\tpadding-bottom: var(--spacing-2xs);\n\tmargin-bottom: var(--spacing-2xs);\n\tborder-bottom: 1px solid var(--color-text-light);\n}\n\n.binaryButtonContainer {\n\tmargin-top: 1.5em;\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n\n\t> * {\n\t\tflex-grow: 0;\n\t\tmargin-right: var(--spacing-3xs);\n\t}\n}\n\n.binaryValue {\n\twhite-space: initial;\n\tword-wrap: break-word;\n}\n\n.displayModes {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tflex-grow: 1;\n}\n.tooltipContain {\n\tmax-width: 240px;\n}\n\n.spinner {\n\t* {\n\t\tcolor: var(--color-primary);\n\t\tmin-height: 40px;\n\t\tmin-width: 40px;\n\t}\n\n\tdisplay: flex;\n\tjustify-content: center;\n\tmargin-bottom: var(--spacing-s);\n}\n\n.editMode {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: stretch;\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n}\n\n.editModeBody {\n\tflex: 1 1 auto;\n\tmax-height: 100%;\n\twidth: 100%;\n\toverflow: auto;\n}\n\n.editModeFooter {\n\tflex: 0 1 auto;\n\tdisplay: flex;\n\twidth: 100%;\n\tjustify-content: space-between;\n\talign-items: center;\n\tpadding-top: var(--spacing-s);\n\tpadding-bottom: var(--spacing-s);\n}\n\n.editModeFooterInfotip {\n\tdisplay: flex;\n\tflex: 1;\n\twidth: 100%;\n}\n\n.editModeActions {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n\tmargin-left: var(--spacing-s);\n}\n\n.stretchVertically {\n\theight: 100%;\n}\n\n.uiBlocker {\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n\n.hintCallout {\n\tmargin-bottom: var(--spacing-xs);\n\tmargin-left: var(--spacing-s);\n\tmargin-right: var(--spacing-s);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.run-data {\n\t.code-node-editor {\n\t\theight: 100%;\n\t}\n}\n</style>\n\n<style lang=\"scss\" scoped>\n:deep(.highlight) {\n\tbackground-color: #f7dc55;\n\tcolor: black;\n\tborder-radius: var(--border-radius-base);\n\tpadding: 0 1px;\n\tfont-weight: normal;\n\tfont-style: normal;\n}\n</style>\n","<template>\n\t<n8n-info-tip\n\t\tv-if=\"hasStaleData\"\n\t\ttheme=\"warning\"\n\t\ttype=\"tooltip\"\n\t\ttooltip-placement=\"right\"\n\t\tdata-test-id=\"node-run-info-stale\"\n\t>\n\t\t<span\n\t\t\tv-html=\"\n\t\t\t\t$locale.baseText(\n\t\t\t\t\thasPinData\n\t\t\t\t\t\t? 'ndv.output.staleDataWarning.pinData'\n\t\t\t\t\t\t: 'ndv.output.staleDataWarning.regular',\n\t\t\t\t)\n\t\t\t\"\n\t\t></span>\n\t</n8n-info-tip>\n\t<n8n-info-tip\n\t\tv-else-if=\"runMetadata\"\n\t\ttype=\"tooltip\"\n\t\t:theme=\"theme\"\n\t\t:data-test-id=\"`node-run-info-${theme}`\"\n\t\ttooltip-placement=\"right\"\n\t>\n\t\t<div>\n\t\t\t<n8n-text :bold=\"true\" size=\"small\"\n\t\t\t\t>{{\n\t\t\t\t\trunTaskData.error\n\t\t\t\t\t\t? $locale.baseText('runData.executionStatus.failed')\n\t\t\t\t\t\t: $locale.baseText('runData.executionStatus.success')\n\t\t\t\t}} </n8n-text\n\t\t\t><br />\n\t\t\t<n8n-text :bold=\"true\" size=\"small\">{{\n\t\t\t\t$locale.baseText('runData.startTime') + ':'\n\t\t\t}}</n8n-text>\n\t\t\t{{ runMetadata.startTime }}<br />\n\t\t\t<n8n-text :bold=\"true\" size=\"small\">{{\n\t\t\t\t$locale.baseText('runData.executionTime') + ':'\n\t\t\t}}</n8n-text>\n\t\t\t{{ runMetadata.executionTime }} {{ $locale.baseText('runData.ms') }}\n\t\t</div>\n\t</n8n-info-tip>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { ITaskData } from 'n8n-workflow';\nimport { convertToDisplayDateComponents } from '@/utils/formatters/dateFormatter';\n\nexport default defineComponent({\n\tprops: {\n\t\ttaskData: {}, // ITaskData\n\t\thasStaleData: Boolean,\n\t\thasPinData: Boolean,\n\t},\n\n\tcomputed: {\n\t\ttheme(): string {\n\t\t\treturn this.runTaskData?.error ? 'danger' : 'success';\n\t\t},\n\t\trunTaskData(): ITaskData {\n\t\t\treturn this.taskData as ITaskData;\n\t\t},\n\t\trunMetadata(): { executionTime: number; startTime: string } | null {\n\t\t\tif (!this.runTaskData) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst { date, time } = convertToDisplayDateComponents(this.runTaskData.startTime);\n\t\t\treturn {\n\t\t\t\texecutionTime: this.runTaskData.executionTime,\n\t\t\t\tstartTime: `${date} at ${time}`,\n\t\t\t};\n\t\t},\n\t},\n});\n</script>\n","<template>\n\t<RunData\n\t\tref=\"runData\"\n\t\t:node=\"node\"\n\t\t:workflow=\"workflow\"\n\t\t:run-index=\"runIndex\"\n\t\t:linked-runs=\"linkedRuns\"\n\t\t:can-link-runs=\"canLinkRuns\"\n\t\t:too-much-data-title=\"$locale.baseText('ndv.output.tooMuchData.title')\"\n\t\t:no-data-in-branch-message=\"$locale.baseText('ndv.output.noOutputDataInBranch')\"\n\t\t:is-executing=\"isNodeRunning\"\n\t\t:executing-message=\"$locale.baseText('ndv.output.executing')\"\n\t\t:push-ref=\"pushRef\"\n\t\t:block-u-i=\"blockUI\"\n\t\t:is-production-execution-preview=\"isProductionExecutionPreview\"\n\t\t:is-pane-active=\"isPaneActive\"\n\t\tpane-type=\"output\"\n\t\t:data-output-type=\"outputMode\"\n\t\t@activate-pane=\"activatePane\"\n\t\t@run-change=\"onRunIndexChange\"\n\t\t@link-run=\"onLinkRun\"\n\t\t@unlink-run=\"onUnlinkRun\"\n\t\t@table-mounted=\"$emit('tableMounted', $event)\"\n\t\t@item-hover=\"$emit('itemHover', $event)\"\n\t\t@search=\"$emit('search', $event)\"\n\t>\n\t\t<template #header>\n\t\t\t<div :class=\"$style.titleSection\">\n\t\t\t\t<template v-if=\"hasAiMetadata\">\n\t\t\t\t\t<n8n-radio-buttons\n\t\t\t\t\t\tv-model=\"outputMode\"\n\t\t\t\t\t\t:options=\"outputTypes\"\n\t\t\t\t\t\t@update:model-value=\"onUpdateOutputMode\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<span v-else :class=\"$style.title\">\n\t\t\t\t\t{{ $locale.baseText(outputPanelEditMode.enabled ? 'ndv.output.edit' : 'ndv.output') }}\n\t\t\t\t</span>\n\t\t\t\t<RunInfo\n\t\t\t\t\tv-if=\"hasNodeRun && !pinnedData.hasData.value && runsCount === 1\"\n\t\t\t\t\tv-show=\"!outputPanelEditMode.enabled\"\n\t\t\t\t\t:task-data=\"runTaskData\"\n\t\t\t\t\t:has-stale-data=\"staleData\"\n\t\t\t\t\t:has-pin-data=\"pinnedData.hasData.value\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template #node-not-run>\n\t\t\t<n8n-text v-if=\"workflowRunning && !isTriggerNode\" data-test-id=\"ndv-output-waiting\">{{\n\t\t\t\t$locale.baseText('ndv.output.waitingToRun')\n\t\t\t}}</n8n-text>\n\t\t\t<n8n-text v-if=\"!workflowRunning\" data-test-id=\"ndv-output-run-node-hint\">\n\t\t\t\t<template v-if=\"isSubNodeType\">\n\t\t\t\t\t{{ $locale.baseText('ndv.output.runNodeHintSubNode') }}\n\t\t\t\t</template>\n\t\t\t\t<template v-else>\n\t\t\t\t\t{{ $locale.baseText('ndv.output.runNodeHint') }}\n\t\t\t\t\t<span v-if=\"canPinData\" @click=\"insertTestData\">\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t{{ $locale.baseText('generic.or') }}\n\t\t\t\t\t\t<n8n-text tag=\"a\" size=\"medium\" color=\"primary\">\n\t\t\t\t\t\t\t{{ $locale.baseText('ndv.output.insertTestData') }}\n\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t</span>\n\t\t\t\t</template>\n\t\t\t</n8n-text>\n\t\t</template>\n\n\t\t<template #no-output-data>\n\t\t\t<n8n-text :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t$locale.baseText('ndv.output.noOutputData.title')\n\t\t\t}}</n8n-text>\n\t\t\t<n8n-text>\n\t\t\t\t{{ $locale.baseText('ndv.output.noOutputData.message') }}\n\t\t\t\t<a @click=\"openSettings\">{{\n\t\t\t\t\t$locale.baseText('ndv.output.noOutputData.message.settings')\n\t\t\t\t}}</a>\n\t\t\t\t{{ $locale.baseText('ndv.output.noOutputData.message.settingsOption') }}\n\t\t\t</n8n-text>\n\t\t</template>\n\n\t\t<template v-if=\"outputMode === 'logs' && node\" #content>\n\t\t\t<RunDataAi :node=\"node\" :run-index=\"runIndex\" />\n\t\t</template>\n\t\t<template #recovered-artificial-output-data>\n\t\t\t<div :class=\"$style.recoveredOutputData\">\n\t\t\t\t<n8n-text tag=\"div\" :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t\t$locale.baseText('executionDetails.executionFailed.recoveredNodeTitle')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-text>\n\t\t\t\t\t{{ $locale.baseText('executionDetails.executionFailed.recoveredNodeMessage') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template v-if=\"!pinnedData.hasData.value && runsCount > 1\" #run-info>\n\t\t\t<RunInfo :task-data=\"runTaskData\" />\n\t\t</template>\n\t</RunData>\n</template>\n\n<script lang=\"ts\">\nimport { type PropType, defineComponent } from 'vue';\nimport type { IExecutionResponse, INodeUi } from '@/Interface';\nimport type {\n\tINodeTypeDescription,\n\tIRunData,\n\tIRunExecutionData,\n\tITaskData,\n\tWorkflow,\n} from 'n8n-workflow';\nimport RunData from './RunData.vue';\nimport RunInfo from './RunInfo.vue';\nimport { mapStores, storeToRefs } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport RunDataAi from './RunDataAi/RunDataAi.vue';\nimport { ndvEventBus } from '@/event-bus';\nimport { useNodeType } from '@/composables/useNodeType';\nimport { usePinnedData } from '@/composables/usePinnedData';\n\ntype RunDataRef = InstanceType<typeof RunData>;\n\nconst OUTPUT_TYPE = {\n\tREGULAR: 'regular',\n\tLOGS: 'logs',\n} as const;\n\ntype OutputTypeKey = keyof typeof OUTPUT_TYPE;\ntype OutputType = (typeof OUTPUT_TYPE)[OutputTypeKey];\n\nexport default defineComponent({\n\tname: 'OutputPanel',\n\tcomponents: { RunData, RunInfo, RunDataAi },\n\tprops: {\n\t\tworkflow: {\n\t\t\ttype: Object as PropType<Workflow>,\n\t\t\trequired: true,\n\t\t},\n\t\trunIndex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tisReadOnly: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tlinkedRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tcanLinkRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\tblockUI: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisProductionExecutionPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisPaneActive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tsetup(props) {\n\t\tconst ndvStore = useNDVStore();\n\t\tconst { activeNode } = storeToRefs(ndvStore);\n\t\tconst { isSubNodeType } = useNodeType({\n\t\t\tnode: activeNode,\n\t\t});\n\t\tconst pinnedData = usePinnedData(activeNode, {\n\t\t\trunIndex: props.runIndex,\n\t\t\tdisplayMode: ndvStore.getPanelDisplayMode('output'),\n\t\t});\n\n\t\treturn {\n\t\t\tpinnedData,\n\t\t\tisSubNodeType,\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toutputMode: 'regular',\n\t\t\toutputTypes: [\n\t\t\t\t{ label: this.$locale.baseText('ndv.output.outType.regular'), value: OUTPUT_TYPE.REGULAR },\n\t\t\t\t{ label: this.$locale.baseText('ndv.output.outType.logs'), value: OUTPUT_TYPE.LOGS },\n\t\t\t],\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNodeTypesStore, useNDVStore, useUIStore, useWorkflowsStore),\n\t\tnode(): INodeUi | undefined {\n\t\t\treturn this.ndvStore.activeNode ?? undefined;\n\t\t},\n\t\tnodeType(): INodeTypeDescription | null {\n\t\t\tif (this.node) {\n\t\t\t\treturn this.nodeTypesStore.getNodeType(this.node.type, this.node.typeVersion);\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tisTriggerNode(): boolean {\n\t\t\treturn !!this.node && this.nodeTypesStore.isTriggerNode(this.node.type);\n\t\t},\n\t\thasAiMetadata(): boolean {\n\t\t\tif (this.node) {\n\t\t\t\tconst resultData = this.workflowsStore.getWorkflowResultDataByNodeName(this.node.name);\n\n\t\t\t\tif (!resultData || !Array.isArray(resultData) || resultData.length === 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn !!resultData[resultData.length - 1].metadata;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tisPollingTypeNode(): boolean {\n\t\t\treturn !!this.nodeType?.polling;\n\t\t},\n\t\tisScheduleTrigger(): boolean {\n\t\t\treturn !!(this.nodeType && this.nodeType.group.includes('schedule'));\n\t\t},\n\t\tisNodeRunning(): boolean {\n\t\t\treturn !!this.node && this.workflowsStore.isNodeExecuting(this.node.name);\n\t\t},\n\t\tworkflowRunning(): boolean {\n\t\t\treturn this.uiStore.isActionActive('workflowRunning');\n\t\t},\n\t\tworkflowExecution(): IExecutionResponse | null {\n\t\t\treturn this.workflowsStore.getWorkflowExecution;\n\t\t},\n\t\tworkflowRunData(): IRunData | null {\n\t\t\tif (this.workflowExecution === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst executionData: IRunExecutionData | undefined = this.workflowExecution.data;\n\t\t\tif (!executionData?.resultData?.runData) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn executionData.resultData.runData;\n\t\t},\n\t\thasNodeRun(): boolean {\n\t\t\tif (this.workflowsStore.subWorkflowExecutionError) return true;\n\n\t\t\treturn Boolean(\n\t\t\t\tthis.node && this.workflowRunData && this.workflowRunData.hasOwnProperty(this.node.name),\n\t\t\t);\n\t\t},\n\t\trunTaskData(): ITaskData | null {\n\t\t\tif (!this.node || this.workflowExecution === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst runData = this.workflowRunData;\n\n\t\t\tif (runData === null || !runData.hasOwnProperty(this.node.name)) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (runData[this.node.name].length <= this.runIndex) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn runData[this.node.name][this.runIndex];\n\t\t},\n\t\trunsCount(): number {\n\t\t\tif (this.node === null) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tconst runData: IRunData | null = this.workflowRunData;\n\n\t\t\tif (runData === null || (this.node && !runData.hasOwnProperty(this.node.name))) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (this.node && runData[this.node.name].length) {\n\t\t\t\treturn runData[this.node.name].length;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t},\n\t\tstaleData(): boolean {\n\t\t\tif (!this.node) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst updatedAt = this.workflowsStore.getParametersLastUpdate(this.node.name);\n\t\t\tif (!updatedAt || !this.runTaskData) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst runAt = this.runTaskData.startTime;\n\t\t\treturn updatedAt > runAt;\n\t\t},\n\t\toutputPanelEditMode(): { enabled: boolean; value: string } {\n\t\t\treturn this.ndvStore.outputPanelEditMode;\n\t\t},\n\t\tcanPinData(): boolean {\n\t\t\treturn this.pinnedData.isValidNodeType.value && !this.isReadOnly;\n\t\t},\n\t},\n\tmethods: {\n\t\tinsertTestData() {\n\t\t\tconst runDataRef = this.$refs.runData as RunDataRef | undefined;\n\t\t\tif (runDataRef) {\n\t\t\t\trunDataRef.enterEditMode({\n\t\t\t\t\torigin: 'insertTestDataLink',\n\t\t\t\t});\n\n\t\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\tnode_type: this.node?.type,\n\t\t\t\t\tpane: 'output',\n\t\t\t\t\ttype: 'insert-test-data',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tonLinkRun() {\n\t\t\tthis.$emit('linkRun');\n\t\t},\n\t\tonUnlinkRun() {\n\t\t\tthis.$emit('unlinkRun');\n\t\t},\n\t\topenSettings() {\n\t\t\tthis.$emit('openSettings');\n\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\tnode_type: this.node?.type,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tpane: 'output',\n\t\t\t\ttype: 'settings',\n\t\t\t});\n\t\t},\n\t\tonRunIndexChange(run: number) {\n\t\t\tthis.$emit('runChange', run);\n\t\t},\n\t\tonUpdateOutputMode(outputMode: OutputType) {\n\t\t\tif (outputMode === OUTPUT_TYPE.LOGS) {\n\t\t\t\tndvEventBus.emit('setPositionByName', 'minLeft');\n\t\t\t} else {\n\t\t\t\tndvEventBus.emit('setPositionByName', 'initial');\n\t\t\t}\n\t\t},\n\t\tactivatePane() {\n\t\t\tthis.$emit('activatePane');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n// The items count and displayModes are rendered in the RunData component\n// this is a workaround to hide it in the output panel(for ai type) to not add unnecessary one-time props\n:global([data-output-type='logs'] [class*='itemsCount']),\n:global([data-output-type='logs'] [class*='displayModes']) {\n\tdisplay: none;\n}\n.outputTypeSelect {\n\tmargin-bottom: var(--spacing-4xs);\n\twidth: fit-content;\n}\n.titleSection {\n\tdisplay: flex;\n\talign-items: center;\n\n\t> * {\n\t\tmargin-right: var(--spacing-2xs);\n\t}\n}\n\n.title {\n\ttext-transform: uppercase;\n\tcolor: var(--color-text-light);\n\tletter-spacing: 3px;\n\tfont-weight: var(--font-weight-bold);\n\tfont-size: var(--font-size-s);\n}\n\n.noOutputData {\n\tmax-width: 180px;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-m);\n\t}\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.recoveredOutputData {\n\tmargin: auto;\n\tmax-width: 250px;\n\ttext-align: center;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-m);\n\t}\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from '@/composables/useI18n';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { isPresent } from '@/utils/typesUtils';\nimport type { IConnectedNode, Workflow } from 'n8n-workflow';\nimport { computed } from 'vue';\nimport NodeIcon from './NodeIcon.vue';\n\ntype Props = {\n\tnodes: IConnectedNode[];\n\tworkflow: Workflow;\n\tmodelValue: string | null;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n\t(event: 'update:model-value', value: string): void;\n}>();\n\nconst i18n = useI18n();\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst ndvStore = useNDVStore();\n\nconst selectedInputNode = computed(() => workflowsStore.getNodeByName(props.modelValue ?? ''));\n\nconst selectedInputNodeType = computed(() => {\n\tconst node = selectedInputNode.value;\n\tif (!node) return null;\n\n\treturn nodeTypesStore.getNodeType(node.type, node.typeVersion);\n});\n\nconst inputNodes = computed(() =>\n\tprops.nodes\n\t\t.map((node) => {\n\t\t\tconst fullNode = workflowsStore.getNodeByName(node.name);\n\t\t\tif (!fullNode) return null;\n\n\t\t\treturn {\n\t\t\t\tnode: fullNode,\n\t\t\t\ttype: nodeTypesStore.getNodeType(fullNode.type, fullNode.typeVersion),\n\t\t\t\tdepth: node.depth,\n\t\t\t};\n\t\t})\n\t\t.filter(isPresent),\n);\n\nconst activeNode = computed(() => ndvStore.activeNode);\n\nconst activeNodeType = computed(() => {\n\tconst node = activeNode.value;\n\tif (!node) return null;\n\n\treturn nodeTypesStore.getNodeType(node.type, node.typeVersion);\n});\n\nconst isMultiInputNode = computed(() => {\n\tconst nodeType = activeNodeType.value;\n\treturn nodeType !== null && nodeType.inputs.length > 1;\n});\n\nfunction getMultipleNodesText(nodeName: string): string {\n\tif (\n\t\t!nodeName ||\n\t\t!isMultiInputNode.value ||\n\t\t!activeNode.value ||\n\t\t!activeNodeType.value?.inputNames\n\t)\n\t\treturn '';\n\n\tconst activeNodeConnections =\n\t\tprops.workflow.connectionsByDestinationNode[activeNode.value.name].main || [];\n\t// Collect indexes of connected nodes\n\tconst connectedInputIndexes = activeNodeConnections.reduce((acc: number[], node, index) => {\n\t\tif (node[0] && node[0].node === nodeName) return [...acc, index];\n\t\treturn acc;\n\t}, []);\n\n\t// Match connected input indexes to their names specified by active node\n\tconst connectedInputs = connectedInputIndexes.map(\n\t\t(inputIndex) => activeNodeType.value?.inputNames?.[inputIndex],\n\t);\n\n\tif (connectedInputs.length === 0) return '';\n\n\treturn `(${connectedInputs.join(' & ')})`;\n}\n\nfunction title(nodeName: string) {\n\tconst truncated = nodeName.substring(0, 30);\n\tif (truncated.length < nodeName.length) {\n\t\treturn `${truncated}...`;\n\t}\n\treturn truncated;\n}\n\nfunction subtitle(nodeName: string, depth: number) {\n\tconst multipleNodesText = getMultipleNodesText(nodeName);\n\tif (multipleNodesText) return multipleNodesText;\n\treturn i18n.baseText('ndv.input.nodeDistance', { adjustToNumber: depth });\n}\n\nfunction onInputNodeChange(value: string) {\n\temit('update:model-value', value);\n}\n</script>\n\n<template>\n\t<n8n-select\n\t\t:model-value=\"modelValue\"\n\t\t:no-data-text=\"i18n.baseText('ndv.input.noNodesFound')\"\n\t\t:placeholder=\"i18n.baseText('ndv.input.parentNodes')\"\n\t\t:class=\"$style.select\"\n\t\tteleported\n\t\tsize=\"small\"\n\t\tfilterable\n\t\tdata-test-id=\"ndv-input-select\"\n\t\t@update:model-value=\"onInputNodeChange\"\n\t>\n\t\t<template #prefix>\n\t\t\t<NodeIcon\n\t\t\t\t:disabled=\"selectedInputNode?.disabled\"\n\t\t\t\t:node-type=\"selectedInputNodeType\"\n\t\t\t\t:size=\"14\"\n\t\t\t\t:shrink=\"false\"\n\t\t\t/>\n\t\t</template>\n\n\t\t<n8n-option\n\t\t\tv-for=\"{ node, type, depth } of inputNodes\"\n\t\t\t:key=\"node.name\"\n\t\t\t:value=\"node.name\"\n\t\t\t:class=\"[$style.node, { [$style.disabled]: node.disabled }]\"\n\t\t\t:label=\"`${title(node.name)} ${getMultipleNodesText(node.name)}`\"\n\t\t\tdata-test-id=\"ndv-input-option\"\n\t\t>\n\t\t\t<NodeIcon\n\t\t\t\t:disabled=\"node.disabled\"\n\t\t\t\t:node-type=\"type\"\n\t\t\t\t:size=\"14\"\n\t\t\t\t:shrink=\"false\"\n\t\t\t\t:class=\"$style.icon\"\n\t\t\t/>\n\t\t\t<span :class=\"$style.title\">\n\t\t\t\t{{ title(node.name) }}\n\t\t\t\t<span v-if=\"node.disabled\">({{ i18n.baseText('node.disabled') }})</span>\n\t\t\t</span>\n\n\t\t\t<span :class=\"$style.subtitle\">{{ subtitle(node.name, depth) }}</span>\n\t\t</n8n-option>\n\t</n8n-select>\n</template>\n\n<style lang=\"scss\" module>\n.select {\n\tmax-width: 224px;\n\n\t:global(.el-input--suffix .el-input__inner) {\n\t\tpadding-left: calc(var(--spacing-l) + var(--spacing-4xs));\n\t\tpadding-right: var(--spacing-l);\n\t}\n}\n\n.node {\n\t--select-option-padding: 0 var(--spacing-s);\n\tdisplay: flex;\n\talign-items: center;\n\tfont-size: var(--font-size-2xs);\n\tgap: var(--spacing-4xs);\n}\n\n.icon {\n\tpadding-right: var(--spacing-4xs);\n}\n\n.title {\n\tcolor: var(--color-text-dark);\n\tfont-weight: var(--font-weight-regular);\n}\n\n.disabled .title {\n\tcolor: var(--color-text-light);\n}\n\n.subtitle {\n\tcolor: var(--color-text-light);\n\tfont-weight: var(--font-weight-regular);\n}\n</style>\n","<template>\n\t<svg\n\t\twidth=\"112\"\n\t\theight=\"80\"\n\t\tviewBox=\"0 0 112 80\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t>\n\t\t<mask\n\t\t\tid=\"mask0_489_46042\"\n\t\t\tstyle=\"mask-type: alpha\"\n\t\t\tmaskUnits=\"userSpaceOnUse\"\n\t\t\tx=\"0\"\n\t\t\ty=\"0\"\n\t\t\twidth=\"112\"\n\t\t\theight=\"80\"\n\t\t>\n\t\t\t<rect width=\"112\" height=\"80\" fill=\"url(#paint0_linear_489_46042)\" />\n\t\t</mask>\n\t\t<g mask=\"url(#mask0_489_46042)\">\n\t\t\t<rect x=\"-0.5\" width=\"112\" height=\"80\" fill=\"url(#pattern0)\" fill-opacity=\"0.6\" />\n\t\t</g>\n\t\t<defs>\n\t\t\t<pattern id=\"pattern0\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n\t\t\t\t<use xlink:href=\"#image0_489_46042\" transform=\"scale(0.00357143 0.005)\" />\n\t\t\t</pattern>\n\t\t\t<linearGradient\n\t\t\t\tid=\"paint0_linear_489_46042\"\n\t\t\t\tx1=\"90.5\"\n\t\t\t\ty1=\"40.4494\"\n\t\t\t\tx2=\"112.5\"\n\t\t\t\ty2=\"40.4494\"\n\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t>\n\t\t\t\t<stop />\n\t\t\t\t<stop offset=\"1\" stop-color=\"white\" stop-opacity=\"0\" />\n\t\t\t</linearGradient>\n\t\t\t<image\n\t\t\t\tid=\"image0_489_46042\"\n\t\t\t\twidth=\"280\"\n\t\t\t\theight=\"200\"\n\t\t\t\txlink:href=\"data:image/png;base64,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\"\n\t\t\t/>\n\t\t</defs>\n\t</svg>\n</template>\n","<template>\n\t<RunData\n\t\t:node=\"currentNode\"\n\t\t:workflow=\"workflow\"\n\t\t:run-index=\"runIndex\"\n\t\t:linked-runs=\"linkedRuns\"\n\t\t:can-link-runs=\"!mappedNode && canLinkRuns\"\n\t\t:too-much-data-title=\"$locale.baseText('ndv.input.tooMuchData.title')\"\n\t\t:no-data-in-branch-message=\"$locale.baseText('ndv.input.noOutputDataInBranch')\"\n\t\t:is-executing=\"isExecutingPrevious\"\n\t\t:executing-message=\"$locale.baseText('ndv.input.executingPrevious')\"\n\t\t:push-ref=\"pushRef\"\n\t\t:override-outputs=\"connectedCurrentNodeOutputs\"\n\t\t:mapping-enabled=\"isMappingEnabled\"\n\t\t:distance-from-active=\"currentNodeDepth\"\n\t\t:is-production-execution-preview=\"isProductionExecutionPreview\"\n\t\t:is-pane-active=\"isPaneActive\"\n\t\tpane-type=\"input\"\n\t\tdata-test-id=\"ndv-input-panel\"\n\t\t@activate-pane=\"activatePane\"\n\t\t@item-hover=\"$emit('itemHover', $event)\"\n\t\t@link-run=\"onLinkRun\"\n\t\t@unlink-run=\"onUnlinkRun\"\n\t\t@run-change=\"onRunIndexChange\"\n\t\t@table-mounted=\"$emit('tableMounted', $event)\"\n\t\t@search=\"$emit('search', $event)\"\n\t>\n\t\t<template #header>\n\t\t\t<div :class=\"$style.titleSection\">\n\t\t\t\t<span :class=\"$style.title\">{{ $locale.baseText('ndv.input') }}</span>\n\t\t\t\t<n8n-radio-buttons\n\t\t\t\t\tv-if=\"isActiveNodeConfig && !readOnly\"\n\t\t\t\t\t:options=\"inputModes\"\n\t\t\t\t\t:model-value=\"inputMode\"\n\t\t\t\t\t@update:model-value=\"onInputModeChange\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</template>\n\t\t<template #input-select>\n\t\t\t<InputNodeSelect\n\t\t\t\tv-if=\"parentNodes.length && currentNodeName\"\n\t\t\t\t:model-value=\"currentNodeName\"\n\t\t\t\t:workflow=\"workflow\"\n\t\t\t\t:nodes=\"parentNodes\"\n\t\t\t\t@update:model-value=\"onInputNodeChange\"\n\t\t\t/>\n\t\t</template>\n\t\t<template v-if=\"isMappingMode\" #before-data>\n\t\t\t<!--\n\t\t\t\t\t\tHide the run linking buttons for both input and ouput panels when in 'Mapping Mode' because the run indices wouldn't match.\n\t\t\t\t\t\tAlthough this is not the most elegant solution, it's straightforward and simpler than introducing a new props and logic to handle this.\n\t\t\t\t-->\n\t\t\t<component :is=\"'style'\">button.linkRun { display: none }</component>\n\t\t\t<div :class=\"$style.mappedNode\">\n\t\t\t\t<InputNodeSelect\n\t\t\t\t\t:model-value=\"mappedNode\"\n\t\t\t\t\t:workflow=\"workflow\"\n\t\t\t\t\t:nodes=\"rootNodesParents\"\n\t\t\t\t\t@update:model-value=\"onMappedNodeSelected\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</template>\n\t\t<template #node-not-run>\n\t\t\t<div\n\t\t\t\tv-if=\"(isActiveNodeConfig && rootNode) || parentNodes.length\"\n\t\t\t\t:class=\"$style.noOutputData\"\n\t\t\t>\n\t\t\t\t<n8n-text tag=\"div\" :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t\t$locale.baseText('ndv.input.noOutputData.title')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-tooltip v-if=\"!readOnly\" :visible=\"showDraggableHint && showDraggableHintWithDelay\">\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-html=\"\n\t\t\t\t\t\t\t\t$locale.baseText('dataMapping.dragFromPreviousHint', {\n\t\t\t\t\t\t\t\t\tinterpolate: { name: focusedMappableInput },\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NodeExecuteButton\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\thide-icon\n\t\t\t\t\t\t:transparent=\"true\"\n\t\t\t\t\t\t:node-name=\"isActiveNodeConfig ? rootNode : currentNodeName ?? ''\"\n\t\t\t\t\t\t:label=\"$locale.baseText('ndv.input.noOutputData.executePrevious')\"\n\t\t\t\t\t\ttelemetry-source=\"inputs\"\n\t\t\t\t\t\tdata-test-id=\"execute-previous-node\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-tooltip>\n\t\t\t\t<n8n-text v-if=\"!readOnly\" tag=\"div\" size=\"small\">\n\t\t\t\t\t{{ $locale.baseText('ndv.input.noOutputData.hint') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<div v-else :class=\"$style.notConnected\">\n\t\t\t\t<div>\n\t\t\t\t\t<WireMeUp />\n\t\t\t\t</div>\n\t\t\t\t<n8n-text tag=\"div\" :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t\t$locale.baseText('ndv.input.notConnected.title')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-text tag=\"div\">\n\t\t\t\t\t{{ $locale.baseText('ndv.input.notConnected.message') }}\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://docs.n8n.io/workflows/connections/\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t@click=\"onConnectionHelpClick\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ $locale.baseText('ndv.input.notConnected.learnMore') }}\n\t\t\t\t\t</a>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template #no-output-data>\n\t\t\t<n8n-text tag=\"div\" :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t$locale.baseText('ndv.input.noOutputData')\n\t\t\t}}</n8n-text>\n\t\t</template>\n\n\t\t<template #recovered-artificial-output-data>\n\t\t\t<div :class=\"$style.recoveredOutputData\">\n\t\t\t\t<n8n-text tag=\"div\" :bold=\"true\" color=\"text-dark\" size=\"large\">{{\n\t\t\t\t\t$locale.baseText('executionDetails.executionFailed.recoveredNodeTitle')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<n8n-text>\n\t\t\t\t\t{{ $locale.baseText('executionDetails.executionFailed.recoveredNodeMessage') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</template>\n\t</RunData>\n</template>\n\n<script lang=\"ts\">\nimport type { INodeUi } from '@/Interface';\nimport {\n\tCRON_NODE_TYPE,\n\tINTERVAL_NODE_TYPE,\n\tMANUAL_TRIGGER_NODE_TYPE,\n\tSTART_NODE_TYPE,\n} from '@/constants';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type {\n\tConnectionTypes,\n\tIConnectedNode,\n\tINodeOutputConfiguration,\n\tINodeTypeDescription,\n\tWorkflow,\n} from 'n8n-workflow';\nimport { NodeConnectionType, NodeHelpers } from 'n8n-workflow';\nimport { mapStores } from 'pinia';\nimport { defineComponent, type PropType } from 'vue';\nimport InputNodeSelect from './InputNodeSelect.vue';\nimport NodeExecuteButton from './NodeExecuteButton.vue';\nimport RunData from './RunData.vue';\nimport WireMeUp from './WireMeUp.vue';\n\ntype MappingMode = 'debugging' | 'mapping';\n\nexport default defineComponent({\n\tname: 'InputPanel',\n\tcomponents: { RunData, NodeExecuteButton, WireMeUp, InputNodeSelect },\n\tprops: {\n\t\tcurrentNodeName: {\n\t\t\ttype: String,\n\t\t},\n\t\trunIndex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tlinkedRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tworkflow: {\n\t\t\ttype: Object as PropType<Workflow>,\n\t\t\trequired: true,\n\t\t},\n\t\tcanLinkRuns: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisProductionExecutionPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisPaneActive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: [\n\t\t'itemHover',\n\t\t'tableMounted',\n\t\t'linkRun',\n\t\t'unlinkRun',\n\t\t'runChange',\n\t\t'search',\n\t\t'changeInputNode',\n\t\t'execute',\n\t\t'activatePane',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tshowDraggableHintWithDelay: false,\n\t\t\tdraggableHintShown: false,\n\t\t\tinputMode: 'debugging' as MappingMode,\n\t\t\tmappedNode: null as string | null,\n\t\t\tinputModes: [\n\t\t\t\t{ value: 'mapping', label: this.$locale.baseText('ndv.input.mapping') },\n\t\t\t\t{ value: 'debugging', label: this.$locale.baseText('ndv.input.debugging') },\n\t\t\t],\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNodeTypesStore, useNDVStore, useWorkflowsStore, useUIStore),\n\t\tfocusedMappableInput(): string {\n\t\t\treturn this.ndvStore.focusedMappableInput;\n\t\t},\n\t\tisUserOnboarded(): boolean {\n\t\t\treturn this.ndvStore.isMappingOnboarded;\n\t\t},\n\t\tisMappingMode(): boolean {\n\t\t\treturn this.isActiveNodeConfig && this.inputMode === 'mapping';\n\t\t},\n\t\tshowDraggableHint(): boolean {\n\t\t\tconst toIgnore = [\n\t\t\t\tSTART_NODE_TYPE,\n\t\t\t\tMANUAL_TRIGGER_NODE_TYPE,\n\t\t\t\tCRON_NODE_TYPE,\n\t\t\t\tINTERVAL_NODE_TYPE,\n\t\t\t];\n\t\t\tif (!this.currentNode || toIgnore.includes(this.currentNode.type)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn !!this.focusedMappableInput && !this.isUserOnboarded;\n\t\t},\n\t\tisActiveNodeConfig(): boolean {\n\t\t\tlet inputs = this.activeNodeType?.inputs ?? [];\n\t\t\tlet outputs = this.activeNodeType?.outputs ?? [];\n\t\t\tif (this.activeNode !== null && this.workflow !== null) {\n\t\t\t\tconst node = this.workflow.getNode(this.activeNode.name);\n\t\t\t\tinputs = NodeHelpers.getNodeInputs(this.workflow, node!, this.activeNodeType!);\n\t\t\t\toutputs = NodeHelpers.getNodeOutputs(this.workflow, node!, this.activeNodeType!);\n\t\t\t} else {\n\t\t\t\t// If we can not figure out the node type we set no outputs\n\t\t\t\tif (!Array.isArray(inputs)) {\n\t\t\t\t\tinputs = [] as ConnectionTypes[];\n\t\t\t\t}\n\t\t\t\tif (!Array.isArray(outputs)) {\n\t\t\t\t\toutputs = [] as ConnectionTypes[];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tinputs.length === 0 ||\n\t\t\t\t(inputs.every((input) => this.filterOutConnectionType(input, NodeConnectionType.Main)) &&\n\t\t\t\t\toutputs.find((output) => this.filterOutConnectionType(output, NodeConnectionType.Main)))\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tisMappingEnabled(): boolean {\n\t\t\tif (this.readOnly) return false;\n\n\t\t\t// Mapping is only enabled in mapping mode for config nodes and if node to map is selected\n\t\t\tif (this.isActiveNodeConfig) return this.isMappingMode && this.mappedNode !== null;\n\n\t\t\treturn true;\n\t\t},\n\t\tisExecutingPrevious(): boolean {\n\t\t\tif (!this.workflowRunning) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst triggeredNode = this.workflowsStore.executedNode;\n\t\t\tconst executingNode = this.workflowsStore.executingNode;\n\n\t\t\tif (\n\t\t\t\tthis.activeNode &&\n\t\t\t\ttriggeredNode === this.activeNode.name &&\n\t\t\t\t!this.workflowsStore.isNodeExecuting(this.activeNode.name)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (executingNode.length || triggeredNode) {\n\t\t\t\treturn !!this.parentNodes.find(\n\t\t\t\t\t(node) => this.workflowsStore.isNodeExecuting(node.name) || node.name === triggeredNode,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tworkflowRunning(): boolean {\n\t\t\treturn this.uiStore.isActionActive('workflowRunning');\n\t\t},\n\n\t\tactiveNode(): INodeUi | null {\n\t\t\treturn this.ndvStore.activeNode;\n\t\t},\n\n\t\trootNode(): string {\n\t\t\tconst workflow = this.workflow;\n\t\t\tconst rootNodes = workflow.getChildNodes(this.activeNode?.name ?? '', 'ALL_NON_MAIN');\n\n\t\t\treturn rootNodes[0];\n\t\t},\n\t\trootNodesParents() {\n\t\t\tconst workflow = this.workflow;\n\t\t\tconst parentNodes = [...workflow.getParentNodes(this.rootNode, 'main')]\n\t\t\t\t.reverse()\n\t\t\t\t.map((parent): IConnectedNode => ({ name: parent, depth: 1, indicies: [] }));\n\n\t\t\treturn parentNodes;\n\t\t},\n\t\tcurrentNode(): INodeUi | null {\n\t\t\tif (this.isActiveNodeConfig) {\n\t\t\t\t// if we're mapping node we want to show the output of the mapped node\n\t\t\t\tif (this.mappedNode) {\n\t\t\t\t\treturn this.workflowsStore.getNodeByName(this.mappedNode);\n\t\t\t\t}\n\n\t\t\t\t// in debugging mode data does get set manually and is only for debugging\n\t\t\t\t// so we want to force the node to be the active node to make sure we show the correct data\n\t\t\t\treturn this.activeNode;\n\t\t\t}\n\n\t\t\treturn this.workflowsStore.getNodeByName(this.currentNodeName ?? '');\n\t\t},\n\t\tconnectedCurrentNodeOutputs(): number[] | undefined {\n\t\t\tconst search = this.parentNodes.find(({ name }) => name === this.currentNodeName);\n\t\t\tif (search) {\n\t\t\t\treturn search.indicies;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\tparentNodes(): IConnectedNode[] {\n\t\t\tif (!this.activeNode) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst nodes = this.workflow.getParentNodesByDepth(this.activeNode.name);\n\n\t\t\treturn nodes.filter(\n\t\t\t\t({ name }, i) =>\n\t\t\t\t\tthis.activeNode &&\n\t\t\t\t\tname !== this.activeNode.name &&\n\t\t\t\t\tnodes.findIndex((node) => node.name === name) === i,\n\t\t\t);\n\t\t},\n\t\tcurrentNodeDepth(): number {\n\t\t\tconst node = this.parentNodes.find(\n\t\t\t\t(parent) => this.currentNode && parent.name === this.currentNode.name,\n\t\t\t);\n\t\t\treturn node ? node.depth : -1;\n\t\t},\n\t\tactiveNodeType(): INodeTypeDescription | null {\n\t\t\tif (!this.activeNode) return null;\n\n\t\t\treturn this.nodeTypesStore.getNodeType(this.activeNode.type, this.activeNode.typeVersion);\n\t\t},\n\t\tisMultiInputNode(): boolean {\n\t\t\treturn this.activeNodeType !== null && this.activeNodeType.inputs.length > 1;\n\t\t},\n\t},\n\twatch: {\n\t\tinputMode: {\n\t\t\thandler(val) {\n\t\t\t\tthis.onRunIndexChange(-1);\n\t\t\t\tif (val === 'mapping') {\n\t\t\t\t\tthis.onUnlinkRun();\n\t\t\t\t\tthis.mappedNode = this.rootNodesParents[0]?.name ?? null;\n\t\t\t\t} else {\n\t\t\t\t\tthis.mappedNode = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\timmediate: true,\n\t\t},\n\t\tshowDraggableHint(curr: boolean, prev: boolean) {\n\t\t\tif (curr && !prev) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (this.draggableHintShown) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.showDraggableHintWithDelay = this.showDraggableHint;\n\t\t\t\t\tif (this.showDraggableHintWithDelay) {\n\t\t\t\t\t\tthis.draggableHintShown = true;\n\n\t\t\t\t\t\tthis.$telemetry.track('User viewed data mapping tooltip', {\n\t\t\t\t\t\t\ttype: 'unexecuted input pane',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t} else if (!curr) {\n\t\t\t\tthis.showDraggableHintWithDelay = false;\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tfilterOutConnectionType(\n\t\t\titem: ConnectionTypes | INodeOutputConfiguration,\n\t\t\ttype: ConnectionTypes,\n\t\t) {\n\t\t\tif (!item) return false;\n\n\t\t\treturn typeof item === 'string' ? item !== type : item.type !== type;\n\t\t},\n\t\tonInputModeChange(val: MappingMode) {\n\t\t\tthis.inputMode = val;\n\t\t},\n\t\tonMappedNodeSelected(val: string) {\n\t\t\tthis.mappedNode = val;\n\n\t\t\tthis.onRunIndexChange(0);\n\t\t\tthis.onUnlinkRun();\n\t\t},\n\t\tonNodeExecute() {\n\t\t\tthis.$emit('execute');\n\t\t\tif (this.activeNode) {\n\t\t\t\tthis.$telemetry.track('User clicked ndv button', {\n\t\t\t\t\tnode_type: this.activeNode.type,\n\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\tpane: 'input',\n\t\t\t\t\ttype: 'executePrevious',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tonRunIndexChange(run: number) {\n\t\t\tthis.$emit('runChange', run);\n\t\t},\n\t\tonLinkRun() {\n\t\t\tthis.$emit('linkRun');\n\t\t},\n\t\tonUnlinkRun() {\n\t\t\tthis.$emit('unlinkRun');\n\t\t},\n\t\tonInputNodeChange(value: string) {\n\t\t\tconst index = this.parentNodes.findIndex((node) => node.name === value) + 1;\n\t\t\tthis.$emit('changeInputNode', value, index);\n\t\t},\n\t\tonConnectionHelpClick() {\n\t\t\tif (this.activeNode) {\n\t\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\t\tnode_type: this.activeNode.type,\n\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\tpane: 'input',\n\t\t\t\t\ttype: 'not-connected-help',\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tactivatePane() {\n\t\t\tthis.$emit('activatePane');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.mappedNode {\n\tpadding: 0 var(--spacing-s) var(--spacing-s);\n}\n\n.titleSection {\n\tdisplay: flex;\n\tmax-width: 300px;\n\talign-items: center;\n\n\t> * {\n\t\tmargin-right: var(--spacing-2xs);\n\t}\n}\n.inputModeTab {\n\tmargin-left: auto;\n}\n.noOutputData {\n\tmax-width: 180px;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-m);\n\t}\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.recoveredOutputData {\n\tmargin: auto;\n\tmax-width: 250px;\n\ttext-align: center;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-m);\n\t}\n}\n\n.notConnected {\n\tmax-width: 300px;\n\n\t> *:first-child {\n\t\tmargin-bottom: var(--spacing-m);\n\t}\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.title {\n\ttext-transform: uppercase;\n\tcolor: var(--color-text-light);\n\tletter-spacing: 3px;\n\tfont-size: var(--font-size-s);\n\tfont-weight: var(--font-weight-bold);\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t<div v-if=\"hasIssues || hideContent\" key=\"empty\"></div>\n\t\t\t<div v-else-if=\"isListeningForEvents\" key=\"listening\">\n\t\t\t\t<n8n-pulse>\n\t\t\t\t\t<NodeIcon :node-type=\"nodeType\" :size=\"40\"></NodeIcon>\n\t\t\t\t</n8n-pulse>\n\t\t\t\t<div v-if=\"isWebhookNode\">\n\t\t\t\t\t<n8n-text tag=\"div\" size=\"large\" color=\"text-dark\" class=\"mb-2xs\" bold>{{\n\t\t\t\t\t\t$locale.baseText('ndv.trigger.webhookNode.listening')\n\t\t\t\t\t}}</n8n-text>\n\t\t\t\t\t<div :class=\"[$style.shake, 'mb-xs']\">\n\t\t\t\t\t\t<n8n-text>\n\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t$locale.baseText('ndv.trigger.webhookNode.requestHint', {\n\t\t\t\t\t\t\t\t\tinterpolate: { type: webhookHttpMethod ?? '' },\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t</div>\n\t\t\t\t\t<CopyInput\n\t\t\t\t\t\t:value=\"webhookTestUrl\"\n\t\t\t\t\t\t:toast-title=\"$locale.baseText('ndv.trigger.copiedTestUrl')\"\n\t\t\t\t\t\tclass=\"mb-2xl\"\n\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\t:collapse=\"true\"\n\t\t\t\t\t\t:copy-button-text=\"$locale.baseText('generic.clickToCopy')\"\n\t\t\t\t\t\t@copy=\"onTestLinkCopied\"\n\t\t\t\t\t></CopyInput>\n\t\t\t\t\t<NodeExecuteButton\n\t\t\t\t\t\tdata-test-id=\"trigger-execute-button\"\n\t\t\t\t\t\t:node-name=\"nodeName\"\n\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\ttelemetry-source=\"inputs\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div v-else>\n\t\t\t\t\t<n8n-text tag=\"div\" size=\"large\" color=\"text-dark\" class=\"mb-2xs\" bold>{{\n\t\t\t\t\t\tlisteningTitle\n\t\t\t\t\t}}</n8n-text>\n\t\t\t\t\t<div :class=\"[$style.shake, 'mb-xs']\">\n\t\t\t\t\t\t<n8n-text tag=\"div\">\n\t\t\t\t\t\t\t{{ listeningHint }}\n\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-if=\"displayChatButton\">\n\t\t\t\t\t\t<n8n-button class=\"mb-xl\" @click=\"openWebhookUrl()\">\n\t\t\t\t\t\t\t{{ $locale.baseText('ndv.trigger.chatTrigger.openChat') }}\n\t\t\t\t\t\t</n8n-button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<NodeExecuteButton\n\t\t\t\t\t\tdata-test-id=\"trigger-execute-button\"\n\t\t\t\t\t\t:node-name=\"nodeName\"\n\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\ttelemetry-source=\"inputs\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-else key=\"default\">\n\t\t\t\t<div v-if=\"isActivelyPolling\" class=\"mb-xl\">\n\t\t\t\t\t<n8n-spinner type=\"ring\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div :class=\"$style.action\">\n\t\t\t\t\t<div :class=\"$style.header\">\n\t\t\t\t\t\t<n8n-heading v-if=\"header\" tag=\"h1\" bold>\n\t\t\t\t\t\t\t{{ header }}\n\t\t\t\t\t\t</n8n-heading>\n\t\t\t\t\t\t<n8n-text v-if=\"subheader\">\n\t\t\t\t\t\t\t<span v-text=\"subheader\" />\n\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<NodeExecuteButton\n\t\t\t\t\t\tdata-test-id=\"trigger-execute-button\"\n\t\t\t\t\t\t:node-name=\"nodeName\"\n\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\ttelemetry-source=\"inputs\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<n8n-text v-if=\"activationHint\" size=\"small\" @click=\"onLinkClick\">\n\t\t\t\t\t<span v-html=\"activationHint\"></span> \n\t\t\t\t</n8n-text>\n\t\t\t\t<n8n-link\n\t\t\t\t\tv-if=\"activationHint && executionsHelp\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t@click=\"expandExecutionHelp\"\n\t\t\t\t\t>{{ $locale.baseText('ndv.trigger.moreInfo') }}</n8n-link\n\t\t\t\t>\n\t\t\t\t<n8n-info-accordion\n\t\t\t\t\tv-if=\"executionsHelp\"\n\t\t\t\t\tref=\"help\"\n\t\t\t\t\t:class=\"$style.accordion\"\n\t\t\t\t\t:title=\"$locale.baseText('ndv.trigger.executionsHint.question')\"\n\t\t\t\t\t:description=\"executionsHelp\"\n\t\t\t\t\t:event-bus=\"executionsHelpEventBus\"\n\t\t\t\t\t@click:body=\"onLinkClick\"\n\t\t\t\t></n8n-info-accordion>\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport {\n\tCHAT_TRIGGER_NODE_TYPE,\n\tVIEWS,\n\tWEBHOOK_NODE_TYPE,\n\tWORKFLOW_SETTINGS_MODAL_KEY,\n\tFORM_TRIGGER_NODE_TYPE,\n} from '@/constants';\nimport type { INodeUi } from '@/Interface';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport { getTriggerNodeServiceName } from '@/utils/nodeTypesUtils';\nimport NodeExecuteButton from '@/components/NodeExecuteButton.vue';\nimport CopyInput from '@/components/CopyInput.vue';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { createEventBus } from 'n8n-design-system/utils';\nimport { useRouter } from 'vue-router';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\nimport { isTriggerPanelObject } from '@/utils/typeGuards';\n\nexport default defineComponent({\n\tname: 'TriggerPanel',\n\tcomponents: {\n\t\tNodeExecuteButton,\n\t\tCopyInput,\n\t\tNodeIcon,\n\t},\n\tprops: {\n\t\tnodeName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\temits: { activate: null, execute: null },\n\tsetup() {\n\t\tconst router = useRouter();\n\t\tconst workflowHelpers = useWorkflowHelpers({ router });\n\n\t\treturn {\n\t\t\tworkflowHelpers,\n\t\t};\n\t},\n\tdata: () => {\n\t\treturn {\n\t\t\texecutionsHelpEventBus: createEventBus(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNodeTypesStore, useNDVStore, useUIStore, useWorkflowsStore),\n\t\tnode(): INodeUi | null {\n\t\t\treturn this.workflowsStore.getNodeByName(this.nodeName);\n\t\t},\n\t\tnodeType(): INodeTypeDescription | null {\n\t\t\tif (this.node) {\n\t\t\t\treturn this.nodeTypesStore.getNodeType(this.node.type, this.node.typeVersion);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\ttriggerPanel() {\n\t\t\tconst panel = this.nodeType?.triggerPanel;\n\t\t\tif (isTriggerPanelObject(panel)) {\n\t\t\t\treturn panel;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\thideContent(): boolean {\n\t\t\tconst hideContent = this.triggerPanel?.hideContent;\n\t\t\tif (typeof hideContent === 'boolean') {\n\t\t\t\treturn hideContent;\n\t\t\t}\n\n\t\t\tif (this.node) {\n\t\t\t\tconst hideContentValue = this.workflowHelpers\n\t\t\t\t\t.getCurrentWorkflow()\n\t\t\t\t\t.expression.getSimpleParameterValue(this.node, hideContent, 'internal', {});\n\n\t\t\t\tif (typeof hideContentValue === 'boolean') {\n\t\t\t\t\treturn hideContentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\thasIssues(): boolean {\n\t\t\treturn Boolean(\n\t\t\t\tthis.node?.issues && (this.node.issues.parameters ?? this.node.issues.credentials),\n\t\t\t);\n\t\t},\n\t\tserviceName(): string {\n\t\t\tif (this.nodeType) {\n\t\t\t\treturn getTriggerNodeServiceName(this.nodeType);\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\tdisplayChatButton(): boolean {\n\t\t\treturn Boolean(\n\t\t\t\tthis.node &&\n\t\t\t\t\tthis.node.type === CHAT_TRIGGER_NODE_TYPE &&\n\t\t\t\t\tthis.node.parameters.mode !== 'webhook',\n\t\t\t);\n\t\t},\n\t\tisWebhookNode(): boolean {\n\t\t\treturn Boolean(this.node && this.node.type === WEBHOOK_NODE_TYPE);\n\t\t},\n\t\twebhookHttpMethod(): string | undefined {\n\t\t\tif (!this.node || !this.nodeType?.webhooks?.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst httpMethod = this.workflowHelpers.getWebhookExpressionValue(\n\t\t\t\tthis.nodeType.webhooks[0],\n\t\t\t\t'httpMethod',\n\t\t\t\tfalse,\n\t\t\t);\n\n\t\t\tif (Array.isArray(httpMethod)) {\n\t\t\t\treturn httpMethod.join(', ');\n\t\t\t}\n\n\t\t\treturn httpMethod;\n\t\t},\n\t\twebhookTestUrl(): string | undefined {\n\t\t\tif (!this.node || !this.nodeType?.webhooks?.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn this.workflowHelpers.getWebhookUrl(this.nodeType.webhooks[0], this.node, 'test');\n\t\t},\n\t\tisWebhookBasedNode(): boolean {\n\t\t\treturn Boolean(this.nodeType?.webhooks?.length);\n\t\t},\n\t\tisPollingNode(): boolean {\n\t\t\treturn Boolean(this.nodeType?.polling);\n\t\t},\n\t\tisListeningForEvents(): boolean {\n\t\t\tconst waitingOnWebhook = this.workflowsStore.executionWaitingForWebhook;\n\t\t\tconst executedNode = this.workflowsStore.executedNode;\n\t\t\treturn (\n\t\t\t\t!!this.node &&\n\t\t\t\t!this.node.disabled &&\n\t\t\t\tthis.isWebhookBasedNode &&\n\t\t\t\twaitingOnWebhook &&\n\t\t\t\t(!executedNode || executedNode === this.nodeName)\n\t\t\t);\n\t\t},\n\t\tworkflowRunning(): boolean {\n\t\t\treturn this.uiStore.isActionActive('workflowRunning');\n\t\t},\n\t\tisActivelyPolling(): boolean {\n\t\t\tconst triggeredNode = this.workflowsStore.executedNode;\n\n\t\t\treturn this.workflowRunning && this.isPollingNode && this.nodeName === triggeredNode;\n\t\t},\n\t\tisWorkflowActive(): boolean {\n\t\t\treturn this.workflowsStore.isWorkflowActive;\n\t\t},\n\t\tlisteningTitle(): string {\n\t\t\treturn this.nodeType?.name === FORM_TRIGGER_NODE_TYPE\n\t\t\t\t? this.$locale.baseText('ndv.trigger.webhookNode.formTrigger.listening')\n\t\t\t\t: this.$locale.baseText('ndv.trigger.webhookNode.listening');\n\t\t},\n\t\tlisteningHint(): string {\n\t\t\tswitch (this.nodeType?.name) {\n\t\t\t\tcase CHAT_TRIGGER_NODE_TYPE:\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.chatTrigger.serviceHint');\n\t\t\t\tcase FORM_TRIGGER_NODE_TYPE:\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.formTrigger.serviceHint');\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.serviceHint', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\theader(): string {\n\t\t\tconst serviceName = this.nodeType ? getTriggerNodeServiceName(this.nodeType) : '';\n\n\t\t\tif (this.isActivelyPolling) {\n\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.fetchingEvent');\n\t\t\t}\n\n\t\t\tif (this.triggerPanel?.header) {\n\t\t\t\treturn this.triggerPanel.header;\n\t\t\t}\n\n\t\t\tif (this.isWebhookBasedNode) {\n\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.action', {\n\t\t\t\t\tinterpolate: { name: serviceName },\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\tsubheader(): string {\n\t\t\tconst serviceName = this.nodeType ? getTriggerNodeServiceName(this.nodeType) : '';\n\t\t\tif (this.isActivelyPolling) {\n\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.fetchingHint', {\n\t\t\t\t\tinterpolate: { name: serviceName },\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\texecutionsHelp(): string {\n\t\t\tif (this.triggerPanel?.executionsHelp) {\n\t\t\t\tif (typeof this.triggerPanel.executionsHelp === 'string') {\n\t\t\t\t\treturn this.triggerPanel.executionsHelp;\n\t\t\t\t}\n\t\t\t\tif (!this.isWorkflowActive && this.triggerPanel.executionsHelp.inactive) {\n\t\t\t\t\treturn this.triggerPanel.executionsHelp.inactive;\n\t\t\t\t}\n\t\t\t\tif (this.isWorkflowActive && this.triggerPanel.executionsHelp.active) {\n\t\t\t\t\treturn this.triggerPanel.executionsHelp.active;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isWebhookBasedNode) {\n\t\t\t\tif (this.isWorkflowActive) {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.executionsHelp.active', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.executionsHelp.inactive', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isPollingNode) {\n\t\t\t\tif (this.isWorkflowActive) {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.executionsHelp.active', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.executionsHelp.inactive', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\tactivationHint(): string {\n\t\t\tif (this.isActivelyPolling || !this.triggerPanel) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (this.triggerPanel.activationHint) {\n\t\t\t\tif (typeof this.triggerPanel.activationHint === 'string') {\n\t\t\t\t\treturn this.triggerPanel.activationHint;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t!this.isWorkflowActive &&\n\t\t\t\t\ttypeof this.triggerPanel.activationHint.inactive === 'string'\n\t\t\t\t) {\n\t\t\t\t\treturn this.triggerPanel.activationHint.inactive;\n\t\t\t\t}\n\t\t\t\tif (this.isWorkflowActive && typeof this.triggerPanel.activationHint.active === 'string') {\n\t\t\t\t\treturn this.triggerPanel.activationHint.active;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isWebhookBasedNode) {\n\t\t\t\tif (this.isWorkflowActive) {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.activationHint.active', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.webhookBasedNode.activationHint.inactive', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isPollingNode) {\n\t\t\t\tif (this.isWorkflowActive) {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.activationHint.active', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.$locale.baseText('ndv.trigger.pollingNode.activationHint.inactive', {\n\t\t\t\t\t\tinterpolate: { service: this.serviceName },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t},\n\tmethods: {\n\t\texpandExecutionHelp() {\n\t\t\tif (this.$refs.help) {\n\t\t\t\tthis.executionsHelpEventBus.emit('expand');\n\t\t\t}\n\t\t},\n\t\topenWebhookUrl() {\n\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\tpane: 'input',\n\t\t\t\ttype: 'open-chat',\n\t\t\t});\n\t\t\twindow.open(this.webhookTestUrl, '_blank', 'noreferrer');\n\t\t},\n\t\tonLinkClick(e: MouseEvent) {\n\t\t\tif (!e.target) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst target = e.target as HTMLElement;\n\t\t\tif (target.localName !== 'a') return;\n\n\t\t\tif (target.dataset?.key) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (target.dataset.key === 'activate') {\n\t\t\t\t\tthis.$emit('activate');\n\t\t\t\t} else if (target.dataset.key === 'executions') {\n\t\t\t\t\tthis.$telemetry.track('User clicked ndv link', {\n\t\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\t\t\tpane: 'input',\n\t\t\t\t\t\ttype: 'open-executions-log',\n\t\t\t\t\t});\n\t\t\t\t\tthis.ndvStore.activeNodeName = null;\n\t\t\t\t\tvoid this.$router.push({\n\t\t\t\t\t\tname: VIEWS.EXECUTIONS,\n\t\t\t\t\t});\n\t\t\t\t} else if (target.dataset.key === 'settings') {\n\t\t\t\t\tthis.uiStore.openModal(WORKFLOW_SETTINGS_MODAL_KEY);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonTestLinkCopied() {\n\t\t\tthis.$telemetry.track('User copied webhook URL', {\n\t\t\t\tpane: 'inputs',\n\t\t\t\ttype: 'test url',\n\t\t\t});\n\t\t},\n\t\tonNodeExecute() {\n\t\t\tthis.$emit('execute');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: var(--color-background-base);\n\tdisplay: flex;\n\tflex-direction: column;\n\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: var(--spacing-s) var(--spacing-s) var(--spacing-xl) var(--spacing-s);\n\ttext-align: center;\n\toverflow: hidden;\n\n\t> * {\n\t\twidth: 100%;\n\t}\n}\n\n.header {\n\tmargin-bottom: var(--spacing-s);\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.action {\n\tmargin-bottom: var(--spacing-2xl);\n}\n\n.shake {\n\tanimation: shake 8s infinite;\n}\n\n@keyframes shake {\n\t90% {\n\t\ttransform: translateX(0);\n\t}\n\t92.5% {\n\t\ttransform: translateX(6px);\n\t}\n\t95% {\n\t\ttransform: translateX(-6px);\n\t}\n\t97.5% {\n\t\ttransform: translateX(6px);\n\t}\n\t100% {\n\t\ttransform: translateX(0);\n\t}\n}\n\n.accordion {\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\twidth: 100%;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.fade-enter-active,\n.fade-leave-active {\n\ttransition: opacity 200ms;\n}\n.fade-enter,\n.fade-leave-to {\n\topacity: 0;\n}\n</style>\n","<template>\n\t<el-dialog\n\t\t:model-value=\"(!!activeNode || renaming) && !isActiveStickyNode\"\n\t\t:before-close=\"close\"\n\t\t:show-close=\"false\"\n\t\tclass=\"data-display-wrapper ndv-wrapper\"\n\t\toverlay-class=\"data-display-overlay\"\n\t\twidth=\"auto\"\n\t\tappend-to-body\n\t\tdata-test-id=\"ndv\"\n\t\t:data-has-output-connection=\"hasOutputConnection\"\n\t>\n\t\t<n8n-tooltip\n\t\t\tplacement=\"bottom-start\"\n\t\t\t:visible=\"showTriggerWaitingWarning\"\n\t\t\t:disabled=\"!showTriggerWaitingWarning\"\n\t\t>\n\t\t\t<template #content>\n\t\t\t\t<div :class=\"$style.triggerWarning\">\n\t\t\t\t\t{{ $locale.baseText('ndv.backToCanvas.waitingForTriggerWarning') }}\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<div :class=\"$style.backToCanvas\" data-test-id=\"back-to-canvas\" @click=\"close\">\n\t\t\t\t<n8n-icon icon=\"arrow-left\" color=\"text-xlight\" size=\"medium\" />\n\t\t\t\t<n8n-text color=\"text-xlight\" size=\"medium\" :bold=\"true\">\n\t\t\t\t\t{{ $locale.baseText('ndv.backToCanvas') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</n8n-tooltip>\n\n\t\t<div\n\t\t\tv-if=\"activeNode\"\n\t\t\tref=\"container\"\n\t\t\tclass=\"data-display\"\n\t\t\ttabindex=\"0\"\n\t\t\t@keydown.capture=\"onKeyDown\"\n\t\t>\n\t\t\t<div :class=\"$style.modalBackground\" @click=\"close\"></div>\n\t\t\t<NDVDraggablePanels\n\t\t\t\t:key=\"activeNode.name\"\n\t\t\t\t:is-trigger-node=\"isTriggerNode\"\n\t\t\t\t:hide-input-and-output=\"activeNodeType === null\"\n\t\t\t\t:position=\"isTriggerNode && !showTriggerPanel ? 0 : undefined\"\n\t\t\t\t:is-draggable=\"!isTriggerNode\"\n\t\t\t\t:has-double-width=\"activeNodeType?.parameterPane === 'wide'\"\n\t\t\t\t:node-type=\"activeNodeType\"\n\t\t\t\t@switch-selected-node=\"onSwitchSelectedNode\"\n\t\t\t\t@open-connection-node-creator=\"onOpenConnectionNodeCreator\"\n\t\t\t\t@close=\"close\"\n\t\t\t\t@init=\"onPanelsInit\"\n\t\t\t\t@dragstart=\"onDragStart\"\n\t\t\t\t@dragend=\"onDragEnd\"\n\t\t\t>\n\t\t\t\t<template v-if=\"showTriggerPanel || !isTriggerNode\" #input>\n\t\t\t\t\t<TriggerPanel\n\t\t\t\t\t\tv-if=\"showTriggerPanel\"\n\t\t\t\t\t\t:node-name=\"activeNode.name\"\n\t\t\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t\t@activate=\"onWorkflowActivate\"\n\t\t\t\t\t/>\n\t\t\t\t\t<InputPanel\n\t\t\t\t\t\tv-else-if=\"!isTriggerNode\"\n\t\t\t\t\t\t:workflow=\"workflow\"\n\t\t\t\t\t\t:can-link-runs=\"canLinkRuns\"\n\t\t\t\t\t\t:run-index=\"inputRun\"\n\t\t\t\t\t\t:linked-runs=\"linked\"\n\t\t\t\t\t\t:current-node-name=\"inputNodeName\"\n\t\t\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t\t\t:read-only=\"readOnly || hasForeignCredential\"\n\t\t\t\t\t\t:is-production-execution-preview=\"isProductionExecutionPreview\"\n\t\t\t\t\t\t:is-pane-active=\"isInputPaneActive\"\n\t\t\t\t\t\t@activate-pane=\"activateInputPane\"\n\t\t\t\t\t\t@link-run=\"onLinkRunToInput\"\n\t\t\t\t\t\t@unlink-run=\"() => onUnlinkRun('input')\"\n\t\t\t\t\t\t@run-change=\"onRunInputIndexChange\"\n\t\t\t\t\t\t@open-settings=\"openSettings\"\n\t\t\t\t\t\t@change-input-node=\"onInputNodeChange\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t\t@table-mounted=\"onInputTableMounted\"\n\t\t\t\t\t\t@item-hover=\"onInputItemHover\"\n\t\t\t\t\t\t@search=\"onSearch\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<template #output>\n\t\t\t\t\t<OutputPanel\n\t\t\t\t\t\tdata-test-id=\"output-panel\"\n\t\t\t\t\t\t:workflow=\"workflow\"\n\t\t\t\t\t\t:can-link-runs=\"canLinkRuns\"\n\t\t\t\t\t\t:run-index=\"outputRun\"\n\t\t\t\t\t\t:linked-runs=\"linked\"\n\t\t\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t\t\t:is-read-only=\"readOnly || hasForeignCredential\"\n\t\t\t\t\t\t:block-u-i=\"blockUi && isTriggerNode && !isExecutableTriggerNode\"\n\t\t\t\t\t\t:is-production-execution-preview=\"isProductionExecutionPreview\"\n\t\t\t\t\t\t:is-pane-active=\"isOutputPaneActive\"\n\t\t\t\t\t\t@activate-pane=\"activateOutputPane\"\n\t\t\t\t\t\t@link-run=\"onLinkRunToOutput\"\n\t\t\t\t\t\t@unlink-run=\"() => onUnlinkRun('output')\"\n\t\t\t\t\t\t@run-change=\"onRunOutputIndexChange\"\n\t\t\t\t\t\t@open-settings=\"openSettings\"\n\t\t\t\t\t\t@table-mounted=\"onOutputTableMounted\"\n\t\t\t\t\t\t@item-hover=\"onOutputItemHover\"\n\t\t\t\t\t\t@search=\"onSearch\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<template #main>\n\t\t\t\t\t<NodeSettings\n\t\t\t\t\t\t:event-bus=\"settingsEventBus\"\n\t\t\t\t\t\t:dragging=\"isDragging\"\n\t\t\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t\t\t:node-type=\"activeNodeType\"\n\t\t\t\t\t\t:foreign-credentials=\"foreignCredentials\"\n\t\t\t\t\t\t:read-only=\"readOnly\"\n\t\t\t\t\t\t:block-u-i=\"blockUi && showTriggerPanel\"\n\t\t\t\t\t\t:executable=\"!readOnly\"\n\t\t\t\t\t\t:input-size=\"inputSize\"\n\t\t\t\t\t\t@value-changed=\"valueChanged\"\n\t\t\t\t\t\t@execute=\"onNodeExecute\"\n\t\t\t\t\t\t@stop-execution=\"onStopExecution\"\n\t\t\t\t\t\t@redraw-required=\"redrawRequired = true\"\n\t\t\t\t\t\t@activate=\"onWorkflowActivate\"\n\t\t\t\t\t\t@switch-selected-node=\"onSwitchSelectedNode\"\n\t\t\t\t\t\t@open-connection-node-creator=\"onOpenConnectionNodeCreator\"\n\t\t\t\t\t/>\n\t\t\t\t\t<a\n\t\t\t\t\t\tv-if=\"featureRequestUrl\"\n\t\t\t\t\t\t:class=\"$style.featureRequest\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t@click=\"onFeatureRequestClick\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<font-awesome-icon icon=\"lightbulb\" />\n\t\t\t\t\t\t{{ $locale.baseText('ndv.featureRequest') }}\n\t\t\t\t\t</a>\n\t\t\t\t</template>\n\t\t\t</NDVDraggablePanels>\n\t\t</div>\n\t</el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount, computed, watch } from 'vue';\nimport { createEventBus } from 'n8n-design-system/utils';\nimport type { IRunData, ConnectionTypes } from 'n8n-workflow';\nimport { jsonParse, NodeHelpers, NodeConnectionType } from 'n8n-workflow';\nimport type { IUpdateInformation, TargetItem } from '@/Interface';\n\nimport NodeSettings from '@/components/NodeSettings.vue';\nimport NDVDraggablePanels from './NDVDraggablePanels.vue';\n\nimport OutputPanel from './OutputPanel.vue';\nimport InputPanel from './InputPanel.vue';\nimport TriggerPanel from './TriggerPanel.vue';\nimport {\n\tBASE_NODE_SURVEY_URL,\n\tEnterpriseEditionFeature,\n\tEXECUTABLE_TRIGGER_NODE_TYPES,\n\tMODAL_CONFIRM,\n\tSTART_NODE_TYPE,\n\tSTICKY_NODE_TYPE,\n} from '@/constants';\nimport { useWorkflowActivate } from '@/composables/useWorkflowActivate';\nimport { dataPinningEventBus } from '@/event-bus';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useDeviceSupport } from 'n8n-design-system';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport { useMessage } from '@/composables/useMessage';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { usePinnedData } from '@/composables/usePinnedData';\nimport { useRouter } from 'vue-router';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useI18n } from '@/composables/useI18n';\nimport { storeToRefs } from 'pinia';\n\nconst emit = defineEmits([\n\t'saveKeyboardShortcut',\n\t'valueChanged',\n\t'nodeTypeSelected',\n\t'switchSelectedNode',\n\t'openConnectionNodeCreator',\n\t'redrawNode',\n\t'stopExecution',\n]);\n\nconst props = withDefaults(\n\tdefineProps<{\n\t\treadOnly?: boolean;\n\t\trenaming?: boolean;\n\t\tisProductionExecutionPreview?: boolean;\n\t}>(),\n\t{\n\t\tisProductionExecutionPreview: false,\n\t},\n);\n\nconst ndvStore = useNDVStore();\nconst externalHooks = useExternalHooks();\nconst nodeHelpers = useNodeHelpers();\nconst { activeNode } = storeToRefs(ndvStore);\nconst pinnedData = usePinnedData(activeNode);\nconst router = useRouter();\nconst workflowHelpers = useWorkflowHelpers({ router });\nconst workflowActivate = useWorkflowActivate();\nconst nodeTypesStore = useNodeTypesStore();\nconst uiStore = useUIStore();\nconst workflowsStore = useWorkflowsStore();\nconst settingsStore = useSettingsStore();\nconst deviceSupport = useDeviceSupport();\nconst telemetry = useTelemetry();\nconst i18n = useI18n();\nconst message = useMessage();\n\nconst settingsEventBus = createEventBus();\nconst redrawRequired = ref(false);\nconst runInputIndex = ref(-1);\nconst runOutputIndex = ref(-1);\nconst isLinkingEnabled = ref(true);\nconst selectedInput = ref<string | undefined>();\nconst triggerWaitingWarningEnabled = ref(false);\nconst isDragging = ref(false);\nconst mainPanelPosition = ref(0);\nconst pinDataDiscoveryTooltipVisible = ref(false);\nconst avgInputRowHeight = ref(0);\nconst avgOutputRowHeight = ref(0);\nconst isInputPaneActive = ref(false);\nconst isOutputPaneActive = ref(false);\nconst isPairedItemHoveringEnabled = ref(true);\n\n//computed\n\nconst pushRef = computed(() => ndvStore.pushRef);\n\nconst activeNodeType = computed(() => {\n\tif (activeNode.value) {\n\t\treturn nodeTypesStore.getNodeType(activeNode.value.type, activeNode.value.typeVersion);\n\t}\n\treturn null;\n});\n\nconst workflowRunning = computed(() => uiStore.isActionActive('workflowRunning'));\n\nconst showTriggerWaitingWarning = computed(\n\t() =>\n\t\ttriggerWaitingWarningEnabled.value &&\n\t\t!!activeNodeType.value &&\n\t\t!activeNodeType.value.group.includes('trigger') &&\n\t\tworkflowRunning.value &&\n\t\tworkflowsStore.executionWaitingForWebhook,\n);\n\nconst workflowRunData = computed(() => {\n\tif (workflowExecution.value === null) {\n\t\treturn null;\n\t}\n\n\tconst executionData = workflowExecution.value.data;\n\n\tif (executionData?.resultData) {\n\t\treturn executionData.resultData.runData;\n\t}\n\n\treturn null;\n});\n\nconst workflow = computed(() => workflowHelpers.getCurrentWorkflow());\n\nconst parentNodes = computed(() => {\n\tif (activeNode.value) {\n\t\treturn (\n\t\t\tworkflow.value.getParentNodesByDepth(activeNode.value.name, 1).map(({ name }) => name) || []\n\t\t);\n\t} else {\n\t\treturn [];\n\t}\n});\n\nconst parentNode = computed(() => {\n\tfor (const parentNodeName of parentNodes.value) {\n\t\tif (workflowsStore?.pinnedWorkflowData?.[parentNodeName]) {\n\t\t\treturn parentNodeName;\n\t\t}\n\n\t\tif (workflowRunData.value?.[parentNodeName]) {\n\t\t\treturn parentNodeName;\n\t\t}\n\t}\n\treturn parentNodes.value[0];\n});\n\nconst inputNodeName = computed<string | undefined>(() => {\n\treturn selectedInput.value || parentNode.value;\n});\n\nconst inputNode = computed(() => {\n\tif (inputNodeName.value) {\n\t\treturn workflowsStore.getNodeByName(inputNodeName.value);\n\t}\n\treturn null;\n});\n\nconst inputSize = computed(() => ndvStore.ndvInputDataWithPinnedData.length);\n\nconst isTriggerNode = computed(\n\t() =>\n\t\t!!activeNodeType.value &&\n\t\t(activeNodeType.value.group.includes('trigger') ||\n\t\t\tactiveNodeType.value.name === START_NODE_TYPE),\n);\n\nconst showTriggerPanel = computed(() => {\n\tconst override = !!activeNodeType.value?.triggerPanel;\n\tif (typeof activeNodeType.value?.triggerPanel === 'boolean') {\n\t\treturn override;\n\t}\n\n\tconst isWebhookBasedNode = !!activeNodeType.value?.webhooks?.length;\n\tconst isPollingNode = activeNodeType.value?.polling;\n\n\treturn (\n\t\t!props.readOnly && isTriggerNode.value && (isWebhookBasedNode || isPollingNode || override)\n\t);\n});\n\nconst hasOutputConnection = computed(() => {\n\tif (!activeNode.value) return false;\n\tconst outgoingConnections = workflowsStore.outgoingConnectionsByNodeName(activeNode.value.name);\n\n\t// Check if there's at-least one output connection\n\treturn (Object.values(outgoingConnections)?.[0]?.[0] ?? []).length > 0;\n});\n\nconst isExecutableTriggerNode = computed(() => {\n\tif (!activeNodeType.value) return false;\n\n\treturn EXECUTABLE_TRIGGER_NODE_TYPES.includes(activeNodeType.value.name);\n});\n\nconst isActiveStickyNode = computed(\n\t() => !!ndvStore.activeNode && ndvStore.activeNode.type === STICKY_NODE_TYPE,\n);\n\nconst workflowExecution = computed(() => workflowsStore.getWorkflowExecution);\n\nconst maxOutputRun = computed(() => {\n\tif (activeNode.value === null) {\n\t\treturn 0;\n\t}\n\n\tconst runData = workflowRunData.value;\n\n\tif (!runData?.[activeNode.value.name]) {\n\t\treturn 0;\n\t}\n\n\tif (runData[activeNode.value.name].length) {\n\t\treturn runData[activeNode.value.name].length - 1;\n\t}\n\n\treturn 0;\n});\n\nconst outputRun = computed(() =>\n\trunOutputIndex.value === -1\n\t\t? maxOutputRun.value\n\t\t: Math.min(runOutputIndex.value, maxOutputRun.value),\n);\n\nconst maxInputRun = computed(() => {\n\tif (inputNode.value === null || activeNode.value === null) {\n\t\treturn 0;\n\t}\n\n\tconst workflowNode = workflow.value.getNode(activeNode.value.name);\n\n\tif (!workflowNode || !activeNodeType.value) {\n\t\treturn 0;\n\t}\n\n\tconst outputs = NodeHelpers.getNodeOutputs(workflow.value, workflowNode, activeNodeType.value);\n\n\tlet node = inputNode.value;\n\n\tconst runData: IRunData | null = workflowRunData.value;\n\n\tif (outputs.some((output) => output !== NodeConnectionType.Main)) {\n\t\tnode = activeNode.value;\n\t}\n\n\tif (!node || !runData || !runData.hasOwnProperty(node.name)) {\n\t\treturn 0;\n\t}\n\n\tif (runData[node.name].length) {\n\t\treturn runData[node.name].length - 1;\n\t}\n\n\treturn 0;\n});\n\nconst inputRun = computed(() => {\n\tif (isLinkingEnabled.value && maxOutputRun.value === maxInputRun.value) {\n\t\treturn outputRun.value;\n\t}\n\tif (runInputIndex.value === -1) {\n\t\treturn maxInputRun.value;\n\t}\n\n\treturn Math.min(runInputIndex.value, maxInputRun.value);\n});\n\nconst canLinkRuns = computed(\n\t() => maxOutputRun.value > 0 && maxOutputRun.value === maxInputRun.value,\n);\n\nconst linked = computed(() => isLinkingEnabled.value && canLinkRuns.value);\n\nconst inputPanelMargin = computed(() => (isTriggerNode.value ? 0 : 80));\n\nconst featureRequestUrl = computed(() => {\n\tif (!activeNodeType.value) {\n\t\treturn '';\n\t}\n\treturn `${BASE_NODE_SURVEY_URL}${activeNodeType.value.name}`;\n});\n\nconst outputPanelEditMode = computed(() => ndvStore.outputPanelEditMode);\n\nconst isWorkflowRunning = computed(() => uiStore.isActionActive('workflowRunning'));\n\nconst isExecutionWaitingForWebhook = computed(() => workflowsStore.executionWaitingForWebhook);\n\nconst blockUi = computed(() => isWorkflowRunning.value || isExecutionWaitingForWebhook.value);\n\nconst foreignCredentials = computed(() => {\n\tconst credentials = activeNode.value?.credentials;\n\tconst usedCredentials = workflowsStore.usedCredentials;\n\n\tconst foreignCredentialsArray: string[] = [];\n\tif (credentials && settingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.Sharing)) {\n\t\tObject.values(credentials).forEach((credential) => {\n\t\t\tif (\n\t\t\t\tcredential.id &&\n\t\t\t\tusedCredentials[credential.id] &&\n\t\t\t\t!usedCredentials[credential.id].currentUserHasAccess\n\t\t\t) {\n\t\t\t\tforeignCredentialsArray.push(credential.id);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn foreignCredentialsArray;\n});\n\nconst hasForeignCredential = computed(() => foreignCredentials.value.length > 0);\n\n//methods\n\nconst setIsTooltipVisible = ({ isTooltipVisible }: { isTooltipVisible: boolean }) => {\n\tpinDataDiscoveryTooltipVisible.value = isTooltipVisible;\n};\n\nconst onKeyDown = (e: KeyboardEvent) => {\n\tif (e.key === 's' && deviceSupport.isCtrlKeyPressed(e)) {\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\n\t\tif (props.readOnly) return;\n\n\t\temit('saveKeyboardShortcut', e);\n\t}\n};\n\nconst onInputItemHover = (e: { itemIndex: number; outputIndex: number } | null) => {\n\tif (e === null || !inputNodeName.value || !isPairedItemHoveringEnabled.value) {\n\t\tndvStore.setHoveringItem(null);\n\t\treturn;\n\t}\n\n\tconst item = {\n\t\tnodeName: inputNodeName.value,\n\t\trunIndex: inputRun.value,\n\t\toutputIndex: e.outputIndex,\n\t\titemIndex: e.itemIndex,\n\t};\n\tndvStore.setHoveringItem(item);\n};\n\nconst onInputTableMounted = (e: { avgRowHeight: number }) => {\n\tavgInputRowHeight.value = e.avgRowHeight;\n};\n\nconst onWorkflowActivate = () => {\n\tndvStore.activeNodeName = null;\n\tsetTimeout(() => {\n\t\tvoid workflowActivate.activateCurrentWorkflow('ndv');\n\t}, 1000);\n};\n\nconst onOutputItemHover = (e: { itemIndex: number; outputIndex: number }) => {\n\tif (e === null || !activeNode.value || !isPairedItemHoveringEnabled.value) {\n\t\tndvStore.setHoveringItem(null);\n\t\treturn;\n\t}\n\n\tconst item: TargetItem = {\n\t\tnodeName: activeNode.value?.name,\n\t\trunIndex: outputRun.value,\n\t\toutputIndex: e.outputIndex,\n\t\titemIndex: e.itemIndex,\n\t};\n\tndvStore.setHoveringItem(item);\n};\n\nconst onFeatureRequestClick = () => {\n\twindow.open(featureRequestUrl.value, '_blank');\n\tif (activeNode.value) {\n\t\ttelemetry.track('User clicked ndv link', {\n\t\t\tnode_type: activeNode.value.type,\n\t\t\tworkflow_id: workflowsStore.workflowId,\n\t\t\tpush_ref: pushRef.value,\n\t\t\tpane: NodeConnectionType.Main,\n\t\t\ttype: 'i-wish-this-node-would',\n\t\t});\n\t}\n};\n\nconst onDragEnd = (e: { windowWidth: number; position: number }) => {\n\tisDragging.value = false;\n\ttelemetry.track('User moved parameters pane', {\n\t\t// example method for tracking\n\t\twindow_width: e.windowWidth,\n\t\tstart_position: mainPanelPosition.value,\n\t\tend_position: e.position,\n\t\tnode_type: activeNodeType.value ? activeNodeType.value.name : '',\n\t\tpush_ref: pushRef.value,\n\t\tworkflow_id: workflowsStore.workflowId,\n\t});\n\tmainPanelPosition.value = e.position;\n};\n\nconst onDragStart = (e: { position: number }) => {\n\tisDragging.value = true;\n\tmainPanelPosition.value = e.position;\n};\n\nconst onPanelsInit = (e: { position: number }) => {\n\tmainPanelPosition.value = e.position;\n};\n\nconst onLinkRunToOutput = () => {\n\tisLinkingEnabled.value = true;\n\ttrackLinking('output');\n};\n\nconst onUnlinkRun = (pane: string) => {\n\trunInputIndex.value = runOutputIndex.value;\n\tisLinkingEnabled.value = false;\n\ttrackLinking(pane);\n};\n\nconst onNodeExecute = () => {\n\tsetTimeout(() => {\n\t\tif (!activeNode.value || !workflowRunning.value) {\n\t\t\treturn;\n\t\t}\n\t\ttriggerWaitingWarningEnabled.value = true;\n\t}, 1000);\n};\n\nconst openSettings = () => {\n\tsettingsEventBus.emit('openSettings');\n};\n\nconst trackLinking = (pane: string) => {\n\ttelemetry.track('User changed ndv run linking', {\n\t\tnode_type: activeNodeType.value ? activeNodeType.value.name : '',\n\t\tpush_ref: pushRef.value,\n\t\tlinked: linked.value,\n\t\tpane,\n\t});\n};\n\nconst onLinkRunToInput = () => {\n\trunOutputIndex.value = runInputIndex.value;\n\tisLinkingEnabled.value = true;\n\ttrackLinking('input');\n};\n\nconst valueChanged = (parameterData: IUpdateInformation) => {\n\temit('valueChanged', parameterData);\n};\n\nconst nodeTypeSelected = (nodeTypeName: string) => {\n\temit('nodeTypeSelected', nodeTypeName);\n};\n\nconst onSwitchSelectedNode = (nodeTypeName: string) => {\n\temit('switchSelectedNode', nodeTypeName);\n};\n\nconst onOpenConnectionNodeCreator = (nodeTypeName: string, connectionType: ConnectionTypes) => {\n\temit('openConnectionNodeCreator', nodeTypeName, connectionType);\n};\n\nconst close = async () => {\n\tif (isDragging.value) {\n\t\treturn;\n\t}\n\n\tif (\n\t\tactiveNode.value &&\n\t\t(typeof activeNodeType.value?.outputs === 'string' ||\n\t\t\ttypeof activeNodeType.value?.inputs === 'string' ||\n\t\t\tredrawRequired.value)\n\t) {\n\t\tconst nodeName = activeNode.value.name;\n\t\tsetTimeout(() => {\n\t\t\temit('redrawNode', nodeName);\n\t\t}, 1);\n\t}\n\n\tif (outputPanelEditMode.value.enabled && activeNode.value) {\n\t\tconst shouldPinDataBeforeClosing = await message.confirm(\n\t\t\t'',\n\t\t\ti18n.baseText('ndv.pinData.beforeClosing.title'),\n\t\t\t{\n\t\t\t\tconfirmButtonText: i18n.baseText('ndv.pinData.beforeClosing.confirm'),\n\t\t\t\tcancelButtonText: i18n.baseText('ndv.pinData.beforeClosing.cancel'),\n\t\t\t},\n\t\t);\n\n\t\tif (shouldPinDataBeforeClosing === MODAL_CONFIRM) {\n\t\t\tconst { value } = outputPanelEditMode.value;\n\t\t\ttry {\n\t\t\t\tpinnedData.setData(jsonParse(value), 'on-ndv-close-modal');\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t}\n\n\t\tndvStore.setOutputPanelEditModeEnabled(false);\n\t}\n\n\tawait externalHooks.run('dataDisplay.nodeEditingFinished');\n\ttelemetry.track('User closed node modal', {\n\t\tnode_type: activeNodeType.value ? activeNodeType.value?.name : '',\n\t\tpush_ref: pushRef.value,\n\t\tworkflow_id: workflowsStore.workflowId,\n\t});\n\ttriggerWaitingWarningEnabled.value = false;\n\tndvStore.activeNodeName = null;\n\tndvStore.resetNDVPushRef();\n};\n\nconst trackRunChange = (run: number, pane: string) => {\n\ttelemetry.track('User changed ndv run dropdown', {\n\t\tpush_ref: pushRef.value,\n\t\trun_index: run,\n\t\tnode_type: activeNodeType.value ? activeNodeType.value?.name : '',\n\t\tpane,\n\t});\n};\n\nconst onRunOutputIndexChange = (run: number) => {\n\trunOutputIndex.value = run;\n\ttrackRunChange(run, 'output');\n};\n\nconst onRunInputIndexChange = (run: number) => {\n\trunInputIndex.value = run;\n\tif (linked.value) {\n\t\trunOutputIndex.value = run;\n\t}\n\ttrackRunChange(run, 'input');\n};\n\nconst onOutputTableMounted = (e: { avgRowHeight: number }) => {\n\tavgOutputRowHeight.value = e.avgRowHeight;\n};\n\nconst onInputNodeChange = (value: string, index: number) => {\n\trunInputIndex.value = -1;\n\tisLinkingEnabled.value = true;\n\tselectedInput.value = value;\n\n\ttelemetry.track('User changed ndv input dropdown', {\n\t\tnode_type: activeNode.value ? activeNode.value.type : '',\n\t\tpush_ref: pushRef.value,\n\t\tworkflow_id: workflowsStore.workflowId,\n\t\tselection_value: index,\n\t\tinput_node_type: inputNode.value ? inputNode.value.type : '',\n\t});\n};\n\nconst onStopExecution = () => {\n\temit('stopExecution');\n};\n\nconst activateInputPane = () => {\n\tisInputPaneActive.value = true;\n\tisOutputPaneActive.value = false;\n};\n\nconst activateOutputPane = () => {\n\tisInputPaneActive.value = false;\n\tisOutputPaneActive.value = true;\n};\n\nconst onSearch = (search: string) => {\n\tisPairedItemHoveringEnabled.value = !search;\n};\n\n//watchers\n\nwatch(\n\tactiveNode,\n\t(node, oldNode) => {\n\t\tif (node && node.name !== oldNode?.name && !isActiveStickyNode.value) {\n\t\t\trunInputIndex.value = -1;\n\t\t\trunOutputIndex.value = -1;\n\t\t\tisLinkingEnabled.value = true;\n\t\t\tselectedInput.value = undefined;\n\t\t\ttriggerWaitingWarningEnabled.value = false;\n\t\t\tavgOutputRowHeight.value = 0;\n\t\t\tavgInputRowHeight.value = 0;\n\n\t\t\tsetTimeout(() => ndvStore.setNDVPushRef(), 0);\n\n\t\t\tif (!activeNodeType.value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid externalHooks.run('dataDisplay.nodeTypeChanged', {\n\t\t\t\tnodeSubtitle: nodeHelpers.getNodeSubtitle(\n\t\t\t\t\tnode,\n\t\t\t\t\tactiveNodeType.value,\n\t\t\t\t\tworkflowHelpers.getCurrentWorkflow(),\n\t\t\t\t),\n\t\t\t});\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (activeNode.value) {\n\t\t\t\t\tconst outgoingConnections = workflowsStore.outgoingConnectionsByNodeName(\n\t\t\t\t\t\tactiveNode.value?.name,\n\t\t\t\t\t);\n\n\t\t\t\t\ttelemetry.track('User opened node modal', {\n\t\t\t\t\t\tnode_type: activeNodeType.value ? activeNodeType.value?.name : '',\n\t\t\t\t\t\tworkflow_id: workflowsStore.workflowId,\n\t\t\t\t\t\tpush_ref: pushRef.value,\n\t\t\t\t\t\tis_editable: !hasForeignCredential.value,\n\t\t\t\t\t\tparameters_pane_position: mainPanelPosition.value,\n\t\t\t\t\t\tinput_first_connector_runs: maxInputRun.value,\n\t\t\t\t\t\toutput_first_connector_runs: maxOutputRun.value,\n\t\t\t\t\t\tselected_view_inputs: isTriggerNode.value ? 'trigger' : ndvStore.inputPanelDisplayMode,\n\t\t\t\t\t\tselected_view_outputs: ndvStore.outputPanelDisplayMode,\n\t\t\t\t\t\tinput_connectors: parentNodes.value.length,\n\t\t\t\t\t\toutput_connectors: outgoingConnections?.main?.length,\n\t\t\t\t\t\tinput_displayed_run_index: inputRun.value,\n\t\t\t\t\t\toutput_displayed_run_index: outputRun.value,\n\t\t\t\t\t\tdata_pinning_tooltip_presented: pinDataDiscoveryTooltipVisible.value,\n\t\t\t\t\t\tinput_displayed_row_height_avg: avgInputRowHeight.value,\n\t\t\t\t\t\toutput_displayed_row_height_avg: avgOutputRowHeight.value,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, 2000); // wait for RunData to mount and present pindata discovery tooltip\n\t\t}\n\t\tif (window.top && !isActiveStickyNode.value) {\n\t\t\twindow.top.postMessage(JSON.stringify({ command: node ? 'openNDV' : 'closeNDV' }), '*');\n\t\t}\n\t},\n\t{ immediate: true },\n);\nwatch(maxOutputRun, () => {\n\trunOutputIndex.value = -1;\n});\n\nwatch(maxInputRun, () => {\n\trunInputIndex.value = -1;\n});\n\nwatch(inputNodeName, (nodeName) => {\n\tsetTimeout(() => {\n\t\tndvStore.setInputNodeName(nodeName);\n\t}, 0);\n});\n\nwatch(inputRun, (inputRun) => {\n\tsetTimeout(() => {\n\t\tndvStore.setInputRunIndex(inputRun);\n\t}, 0);\n});\n\nonMounted(() => {\n\tdataPinningEventBus.on('data-pinning-discovery', setIsTooltipVisible);\n});\n\nonBeforeUnmount(() => {\n\tdataPinningEventBus.off('data-pinning-discovery', setIsTooltipVisible);\n});\n</script>\n\n<style lang=\"scss\">\n// Hide notice(.ndv-connection-hint-notice) warning when node has output connection\n[data-has-output-connection='true'] .ndv-connection-hint-notice {\n\tdisplay: none;\n}\n.ndv-wrapper {\n\toverflow: visible;\n\tmargin-top: 0;\n}\n\n.data-display-wrapper {\n\theight: calc(100% - var(--spacing-l)) !important;\n\tmargin-top: var(--spacing-xl) !important;\n\tmargin-bottom: var(--spacing-xl) !important;\n\twidth: 100%;\n\tbackground: none;\n\tborder: none;\n\n\t.el-dialog__header {\n\t\tpadding: 0 !important;\n\t}\n\n\t.el-dialog__body {\n\t\tpadding: 0 !important;\n\t\theight: 100%;\n\t\tmin-height: 400px;\n\t\toverflow: visible;\n\t\tborder-radius: 8px;\n\t}\n}\n\n.data-display {\n\theight: 100%;\n\twidth: 100%;\n\tdisplay: flex;\n}\n</style>\n\n<style lang=\"scss\" module>\n$main-panel-width: 360px;\n\n.modalBackground {\n\theight: 100%;\n\twidth: 100%;\n}\n\n.triggerWarning {\n\tmax-width: 180px;\n}\n\n.backToCanvas {\n\tposition: fixed;\n\ttop: var(--spacing-xs);\n\tleft: var(--spacing-l);\n\n\tspan {\n\t\tcolor: var(--color-ndv-back-font);\n\t}\n\n\t&:hover {\n\t\tcursor: pointer;\n\t}\n\n\t> * {\n\t\tmargin-right: var(--spacing-3xs);\n\t}\n}\n\n@media (min-width: $breakpoint-lg) {\n\t.backToCanvas {\n\t\ttop: var(--spacing-xs);\n\t\tleft: var(--spacing-m);\n\t}\n}\n\n.featureRequest {\n\tposition: absolute;\n\tbottom: var(--spacing-4xs);\n\tleft: calc(100% + var(--spacing-s));\n\tcolor: var(--color-feature-request-font);\n\tfont-size: var(--font-size-2xs);\n\twhite-space: nowrap;\n\n\t* {\n\t\tmargin-right: var(--spacing-3xs);\n\t}\n}\n</style>\n"],"file":"assets/NodeDetailsView-ggolOsHM.js"}
|