n8n-editor-ui
Version:
Workflow Editor UI for n8n
2 lines • 39.7 kB
JavaScript
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.13.4`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`164aced2-afd4-458a-ae3f-c35c5f245b7d`,e._sentryDebugIdIdentifier=`sentry-dbid-164aced2-afd4-458a-ae3f-c35c5f245b7d`)})()}catch{}import{o as e,t}from"./chunk-DxpFCn6T.js";import{$ as n,A as r,At as i,C as a,E as o,Ft as s,N as c,R as l,Rt as u,S as d,Sn as f,T as p,U as m,W as h,Wt as g,_,_n as v,it as y,j as b,rt as x,st as S,w as C,yt as w}from"./vue.runtime.esm-bundler-D9KLAxvJ.js";import{M as T,S as E,bt as D}from"./_MapCache-CUJwh2qp.js";import{Ni as O,_t as ee,gt as te}from"./src-wni2AGA3.js";import{t as k}from"./_plugin-vue_export-helper-Dm3nT7Ps.js";import{$t as ne,An as re,As as ie,Ci as ae,Di as oe,Dn as se,Dr as ce,Ei as le,Et as ue,Ft as de,Hn as fe,Hr as pe,In as me,Ln as he,Mn as ge,Nn as _e,On as ve,Or as ye,Pn as A,Sn as be,Ta as xe,Ti as Se,Tr as Ce,Wn as we,_i as Te,aa as j,an as Ee,at as De,b as Oe,ba as ke,ca as Ae,d as je,en as Me,gi as M,in as Ne,jn as N,kt as Pe,lt as Fe,mi as P,na as F,r as Ie,rn as Le,s as Re,ui as ze,vi as Be,w as Ve,wi as He,yi as Ue,z as We}from"./users.store-BHWXXawf.js";import{Gc as I,Ia as Ge,Oa as Ke,Pn as qe,Sr as Je,Uo as Ye,Vi as L,Xa as Xe,Yi as R,Za as Ze,_a as Qe,_c as $e,ga as z,gc as et,gn as tt,gr as B,hc as nt,ho as V,mc as H,ms as rt,pa as it,pl as at,rl as ot,va as st,wa as ct,wr as lt,ya as ut}from"./constants-CIP7tKq1.js";import{j as dt,r as ft}from"./_baseOrderBy-CaKruttV.js";import{t as pt}from"./executions.store-CZbPSd3l.js";import{t as mt}from"./usePinnedData-bxdhY-Ce.js";import{a as ht,c as gt,i as _t,n as U,o as vt}from"./canvas.utils-BMxgA7cX.js";import{n as yt,t as bt}from"./canvas.eventBus-C-z2MFNA.js";import{t as W}from"./core-M4qnWLDf.js";import{a as xt,i as St,n as G,r as Ct,t as wt}from"./xml-DDaPr_bf.js";import{t as Tt}from"./VueMarkdown-B-lNBlW1.js";import{t as Et}from"./setupPanel.store-D0Kh-_X7.js";import{t as Dt}from"./templateTransforms-Bcjcx-gt.js";function Ot(){function e(){return Ve().allNodeTypes.reduce((e,t)=>{if(typeof t.defaults.name!=`string`)throw Error(`Expected node name default to be a string`);return/\d$/.test(t.defaults.name)&&e.push(t.defaults.name),e},[])}function t(t,n=[]){let{canvasNames:r}=Re();if(!r.has(t)&&!n.includes(t))return t;let i=e().find(e=>t.startsWith(e));if(i){let e=``,a=1,o=t.split(i).pop(),s=o?.[o.length-1];for(s&&Number.isInteger(Number(s))&&(a=parseInt(s,10),t=t.slice(0,-1)),e=t;r.has(e)||n.includes(e);)e=t+ a++;return e}if(/^\d+-?\d*$/.test(t)){let e=``,i=1,a=t.match(/(?<base>\d+)-?(?<suffix>\d*)/);if(!a?.groups)throw Error(`Failed to find match for unique name`);for(a?.groups?.suffix!==``&&(i=parseInt(a.groups.suffix,10)),e=a.groups.base;r.has(e)||n.includes(e);)e=a.groups.base+`-`+ i++;return e}let a=``,o=1,s=t.match(/(?<base>.*\D+)(?<suffix>\d*)/);if(!s?.groups)throw Error(`Failed to find match for unique name`);for(s?.groups?.suffix!==``&&(o=parseInt(s.groups.suffix,10)),a=s.groups.base;r.has(a)||n.includes(a);)a=s.groups.base+ o++;return a}return{uniqueNodeName:t}}function kt(){let e=new Map;function t(t,n){let r=e.get(t);r&&r.splice(r.indexOf(n)>>>0,1)}function n(n,r){let i=e.get(n);return i?i.push(r):i=[r],e.set(n,i),()=>t(n,r)}function r(t,n){let r=e.get(t);r&&r.slice().forEach(async e=>{await e(n)})}return{on:n,off:t,emit:r}}function At(){return l(Y)}function K(){return{options:l(It)}}function jt(){let{options:e}=K(),t=e?.defaultLanguage??`en`;function n(n){let r=e?.i18n?.[t]?.[n];return i(r)?r.value:r??n}function r(n){return!!e?.i18n?.[t]?.[n]}return{t:n,te:r}}var Mt=c({inheritAttrs:!1,__name:`Button`,props:{type:{default:`primary`},element:{default:`button`},disabled:{type:Boolean,default:!1}},setup(e){let t=e,r=d(()=>`chat-button-${t.type}${t.disabled?`-disabled`:``}`);return(i,a)=>(n(),o(`span`,{class:v({"chat-button-wrapper-disabled":t.disabled})},[(n(),C(S(e.element),m({class:[`chat-button`,r.value]},i.$attrs),{default:w(()=>[y(i.$slots,`default`)]),_:3},16,[`class`]))],2))}}),Nt=e(O()),Pt=c({__name:`MarkdownRenderer`,props:{text:{}},setup(e){W.registerLanguage(`javascript`,St),W.registerLanguage(`typescript`,G),W.registerLanguage(`python`,Ct),W.registerLanguage(`xml`,wt),W.registerLanguage(`bash`,xt);let t=e=>{e.use(Nt.default,{attrs:{target:`_blank`,rel:`noopener`}})},r={highlight(e,t){if(t&&W.getLanguage(t))try{return W.highlight(e,{language:t}).value}catch{}return``}};return(i,a)=>(n(),C(g(Tt),{class:`chat-message-markdown`,source:e.text,options:r,plugins:[t]},null,8,[`source`,`plugins`]))}}),Ft=k(c({__name:`MessageWithButtons`,props:{text:{},buttons:{}},setup(e){let t=K(),i=s(null),c=(e,n)=>{try{let r=new URL(t.options.webhookUrl).origin;return new URL(e,window.location.href).origin===r?i.value===null||n===i.value:!1}catch{return!1}},l=async(e,t)=>{i.value===null&&(await fetch(e)).ok&&(i.value=t)};return(t,s)=>(n(),o(`div`,null,[b(Pt,{text:e.text},null,8,[`text`]),a(`div`,{class:v(t.$style.buttons)},[(n(!0),o(_,null,x(e.buttons,(e,t)=>(n(),o(_,{key:e.text},[c(e.link,t)?(n(),C(Mt,{key:0,element:`button`,type:e.type,disabled:t===i.value,onClick:n=>l(e.link,t)},{default:w(()=>[r(f(e.text),1)]),_:2},1032,[`type`,`disabled`,`onClick`])):p(``,!0)],64))),128))],2)]))}}),[[`__cssModules`,{$style:{buttons:`_buttons_1hb9q_125`}}]]);const q={WITH_BUTTONS:`with-buttons`};q.WITH_BUTTONS;const J=`n8n-chat/sessionId`,Y=`Chat`,It=`ChatOptions`;var Lt=`with-buttons`;function Rt(e,t,n,r){let i=new URL(e).origin,a=i.startsWith(`https`)?`wss`:`ws`;return`${i.replace(/^https?/,a)}/chat?sessionId=${n}&executionId=${t}${r?`&isPublic=true`:``}`}function zt(e){let t=Ye(),n={id:t,sender:`bot`,text:e};try{let r=JSON.parse(e);r.type===Lt&&(n={id:t,sender:`bot`,type:`component`,key:q.WITH_BUTTONS,arguments:{text:r.text,buttons:r.buttons,blockUserInput:r.blockUserInput}})}catch{}return n}function Bt(e){return e.type===`component`&&e.key===q.WITH_BUTTONS&&typeof e.arguments?.blockUserInput==`boolean`?e.arguments?.blockUserInput:!1}const Vt=kt(),Ht=`N8N_CANVAS_CHAT_HEIGHT`,Ut=`N8N_CANVAS_CHAT_WIDTH`,Wt=`N8N_LOGS_OVERVIEW_PANEL_WIDTH`,X={CLOSED:`closed`,ATTACHED:`attached`,FLOATING:`floating`},Z={INPUT:`input`,OUTPUT:`output`,BOTH:`both`},Gt=dt(`logs`,()=>{let e=T(et,!1),t=s(!1),n=d(()=>e.value?t.value?X.FLOATING:X.ATTACHED:X.CLOSED),r=s(0),i=T(H,Z.OUTPUT,{writeDefaults:!1}),a=T(nt,Z.BOTH,{writeDefaults:!1}),o=T($e,!0,{writeDefaults:!1}),c=s(!1),l=Me(),u=s(m()),f=s([]);function p(e){r.value=e}function m(){return Ye().replace(/-/g,``)}function h(){u.value=m()}function g(){f.value=[]}function _(t){e.value=t??!e.value}function v(e){t.value=e}function y(e){c.value=e}function b(e){let t=[Z.INPUT,Z.BOTH],n=c.value?a:i,r=t.includes(n.value);e!==r&&(n.value=r?Z.OUTPUT:Z.BOTH,l.track(`User toggled log view sub pane`,{pane:`input`,newState:r?`hidden`:`visible`,isSubNode:c.value}))}function x(e){let t=[Z.OUTPUT,Z.BOTH],n=c.value?a:i,r=t.includes(n.value);e!==r&&(n.value=r?Z.INPUT:Z.BOTH,l.track(`User toggled log view sub pane`,{pane:`output`,newState:r?`hidden`:`visible`,isSubNode:c.value}))}function S(e){o.value=e??!o.value}function C(e){f.value.push(e)}return{state:n,isOpen:d(()=>n.value!==X.CLOSED),detailsState:d(()=>c.value?a.value:i.value),height:d(()=>r.value),isLogSelectionSyncedWithCanvas:d(()=>o.value),chatSessionId:d(()=>u.value),chatSessionMessages:d(()=>f.value),addChatMessage:C,setHeight:p,toggleOpen:_,setPreferPoppedOut:v,setSubNodeSelected:y,toggleInputOpen:b,toggleOutputOpen:x,toggleLogSelectionSync:S,resetChatSessionId:h,resetMessages:g}});var Kt=t(((e,t)=>{var n=R();function r(e){return e&&e.length?n(e):[]}t.exports=r}));const qt=dt(`experimentalNdv`,()=>{let e=Re(),t=pe(),n=d(()=>t.getVariant(I.name)===I.variant),r=d(()=>t.getVariant(ot.name)===ot.variant),i=d(()=>n.value?2:4),a=s(),o=u({}),c=s(),l=s(!1);function f(e,t){o.value={...o.value,[e]:t===void 0?!o.value[e]:!t}}function p(){o.value=e.allNodes.reduce((e,t)=>(e[t.id]=!0,e),{})}function m(){o.value={}}function h(e){return n.value&&Math.abs(e-i.value)<1e-6}function g(e){c.value=e}function _(e){l.value=e}function v(e,{canvasDimensions:t,canvasViewport:n,setCenter:r}){o.value={...o.value,[e.id]:!1};let a=e.dimensions.width*(h(n.zoom)?1:1.5);c.value===e.data.name&&(c.value=void 0),r(e.position.x+a/2,e.position.y+(t.height*(1/2)-80)/i.value,{duration:200,zoom:i.value,interpolate:`linear`})}function y(e){if(h(e.canvasViewport.zoom)){if(a.value===void 0){e.fitView({duration:200,interpolate:`linear`});return}e.setViewport(a.value,{duration:200,interpolate:`linear`});return}a.value=e.canvasViewport;let t=e.selectedNodes.filter(e=>e.data.render.type===M.Default).toSorted((e,t)=>e.position.y===t.position.y?e.position.x-t.position.x:e.position.y-t.position.y)[0];if(t){v(t,e);return}e.zoomTo(i.value,{duration:200,interpolate:`linear`})}return{isZoomedViewEnabled:n,isNdvInFocusPanelEnabled:r,maxCanvasZoom:i,previousZoom:d(()=>a.value),collapsedNodes:d(()=>o.value),nodeNameToBeFocused:d(()=>c.value),isMapperOpen:d(()=>l.value),isActive:h,setNodeExpanded:f,expandAllNodes:m,collapseAllNodes:p,toggleZoomMode:y,focusNode:v,setNodeNameToBeFocused:g,setMapperOpen:_}});var Jt=e(L(),1),Yt=e(Kt(),1);function Xt(){let e=ft(),t=Re(),n=Ne(),r=De(),i=Te(),a=Ie(),o=Le(),c=Ve(),l=ye(),u=ie(),f=Pe(),p=yt(),m=pt(),g=de(),_=Gt(),v=qt(),y=se(),b=be(),x=Et(),S=D(),C=Ce(),w=ue(),T=ne(),O=Me(),k=ce(),pe=E(),{uniqueNodeName:_e}=Ot(),M=ee(),I=te(),qe=s([0,0]),Ye=!!localStorage.getItem(`NodeView.preventOpeningNDV`),L=d(()=>t.workflow),R=d(()=>t.workflowObject),$e=d(()=>t.workflowTriggerNodes);function et({result:e,source:t,target:n},{trackEvents:r=!0,trackHistory:i=!0,trackBulk:a=!0}={}){nt(e.nodes.map(({id:e,x:t,y:n})=>({id:e,position:{x:t,y:n}})),{trackBulk:a,trackHistory:i}),r&&tt({result:e,source:t,target:n})}function tt({result:e,source:t,target:n}){O.track(`User tidied up canvas`,{source:t,target:n,nodes_count:e.nodes.length})}function nt(e,{trackHistory:t=!1,trackBulk:n=!0}={}){t&&n&&i.startRecordingUndo(),e.forEach(({id:e,position:n})=>{H(e,n,{trackHistory:t})}),t&&n&&i.stopRecordingUndo()}function H(e,r,{trackHistory:a=!1}={}){let o=t.getNodeById(e);if(!o)return;let s=[...o.position],c=[r.x,r.y];n.setNodePositionById(e,c),a&&i.pushCommandToUndo(new ae(o.name,s,c,Date.now()))}function ot(e,n){let r=t.getNodeByName(e);r&&H(r.id,n)}function lt(e,r,a,{trackHistory:o=!1,trackBulk:s=!0}={}){let c=t.getNodeById(e);c&&(o&&s&&i.startRecordingUndo(),n.setNodeParameters({name:c.name,value:a}),o&&i.pushCommandToUndo(new oe(e,r,a,Date.now())),o&&s&&i.stopRecordingUndo())}async function dt(e,t,n){lt(e,n,t)}async function W(e,n,{trackHistory:r=!1,trackBulk:a=!0,showErrorToast:s=!0}={}){if(e===n)return!1;r&&a&&i.startRecordingUndo(),n=_e(n);let c=t.cloneWorkflowObject();try{c.renameNode(e,n)}catch(e){return s&&C.showMessage({type:`error`,title:e.message,message:e.description}),!1}return r&&i.pushCommandToUndo(new le(e,n,Date.now())),t.renameNodeSelectedAndExecution({old:e,new:n}),t.setNodes(Object.values(c.nodes)),t.setConnections(c.connectionsBySourceNode),o.activeNodeName===e&&o.setActiveNodeName(n,`other`),r&&a&&i.stopRecordingUndo(),n}async function xt(e,t){await W(e,t)}function St(e,{trackHistory:n=!1}={}){let r=t.getNodeById(e);if(!r)return;let a=t.outgoingConnectionsByNodeName(r.name),o=t.incomingConnectionsByNodeName(r.name);for(let[e,r]of Object.entries(o))for(let o of r.at(0)??[]){let r=t.getNodeByName(o.node)?.id;if(r)for(let s of a[e]?.at(0)??[]){let a=t.getNodeByName(s.node)?.id;a&&(n&&i.pushCommandToUndo(new Be([{node:o.node,type:e,index:o.index},{node:s.node,type:e,index:s.index}],Date.now())),Q({source:r,sourceHandle:U({mode:P.Output,type:e,index:o.index}),target:a,targetHandle:U({mode:P.Input,type:e,index:s.index})}))}}}function G(e,{trackHistory:n=!1,trackBulk:r=!0}={}){let o=t.getNodeById(e);o&&(n&&r&&i.startRecordingUndo(),a.lastInteractedWithNodeId===e&&(a.lastInteractedWithNodeId=void 0),St(e,{trackHistory:n}),sn(e,{trackHistory:n,trackBulk:!1}),t.removeNodeExecutionDataById(e),t.removeNodeById(e),n&&(i.pushCommandToUndo(new Se(o,Date.now())),r&&i.stopRecordingUndo()),Tt(e))}function Ct(e,{trackHistory:t=!0,trackBulk:n=!0}={}){t&&n&&i.startRecordingUndo(),e.forEach(e=>G(e,{trackHistory:t,trackBulk:!1})),t&&n&&i.stopRecordingUndo()}function wt(e){t.addNode(e),a.markStateDirty()}function Tt(e){let n=t.getNodeById(e);n&&(n.type===`n8n-nodes-base.stickyNote`?O.track(`User deleted workflow note`,{workflow_id:t.workflowId}):(k.run(`node.deleteNode`,{node:n}),O.track(`User deleted node`,{node_type:n.type,workflow_id:t.workflowId})))}function kt(e,n,{trackHistory:r=!1,trackBulk:a=!0,replaceInputs:o=!0,replaceOutputs:s=!0}={}){let c=t.getNodeById(e),l=t.getNodeById(n);if(!c||!l)return;let u=t.workflowObject,d=o?(0,Yt.default)(u.getParentNodes(c.name,`ALL`,1)):[],f=s?(0,Yt.default)(u.getChildNodes(c.name,`ALL`,1)):[],p=[...u.getConnectionsBetweenNodes(d,[c.name]),...u.getConnectionsBetweenNodes([c.name],f)];r&&a&&i.startRecordingUndo();for(let e of p){let n=t.getNodeByName(e[0].node),i=t.getNodeByName(e[1].node);if(!n||!i)continue;$(ht(n,i,e),{trackHistory:r,trackBulk:!1});let a={...e[0],node:e[0].node===c.name?l.name:e[0].node},o={...e[1],node:e[1].node===c.name?l.name:e[1].node},s=n.name===c.name?l:n,u=i.name===c.name?l:i;if(!fn(s,u,a,o))continue;let d=ht(s,u,[a,o]);Q(d,{trackHistory:r}),un(d.target),dn(d.source)}r&&a&&i.stopRecordingUndo()}function At(e,n){let r=t.getNodeById(e);r&&(t.setNodePristine(r.name,!1),K(r.name,n))}function K(e,t){o.setActiveNodeName(e,t)}function jt(){o.unsetActiveNodeName()}function Mt(e,r){let i=t.getNodeById(e);i&&n.setNodeParameters({name:i.name,value:r},!0)}function Nt(e){if(!e){a.lastInteractedWithNodeId=void 0,a.lastSelectedNode=``;return}let n=t.getNodeById(e);n&&(a.lastInteractedWithNodeId=e,a.lastSelectedNode=n.name)}function Pt(e,{trackHistory:n=!0,trackBulk:r=!0}={}){n&&r&&i.startRecordingUndo();let a=t.getNodesByIds(e);T.disableNodes(a,{trackHistory:n,trackBulk:!1}),n&&r&&i.stopRecordingUndo()}function Ft(e){let n=t.getNodeByName(e);n&&T.disableNodes([n])}function q(e,n,{trackHistory:r=!0,trackBulk:a=!0}={}){r&&a&&i.startRecordingUndo();let o=t.getNodesByIds(e).map(e=>({node:e,pinnedData:mt(e)})).filter(({pinnedData:e})=>e.canPinNode(!0)),s=o.some(({pinnedData:e})=>!e.hasData.value);for(let{node:e,pinnedData:t}of o)if(s){let r=Fe().getInputDataWithPinned(e);r.length!==0&&t.setData(r,n)}else t.unsetData(n);r&&a&&i.stopRecordingUndo()}function J(e,t){return c.getNodeType(e,t)??c.communityNodeType(e)?.nodeDescription??{properties:[],displayName:e,name:e,group:[],description:``,version:t??1,defaults:{},inputs:[],outputs:[]}}async function Y(e,{viewport:t,...n}={}){let r=n.position,o,s=[],c=e.map(e=>{let t=e.typeVersion??Kt(J(e.type));return{...e,typeVersion:t}});await Z(c),n.trackHistory&&n.trackBulk&&i.startRecordingUndo();for(let[e,i]of c.entries()){let{isAutoAdd:a,placeholder:c,openDetail:l,actionName:u,positionOffset:d,...f}=i,p=f.position??r,m=p&&d?[p[0]+d[0],p[1]+d[1]]:p,h=J(f.type,f.typeVersion);try{let r=Rt({...f,position:m},h,{...n,...e===0?{viewport:t}:{},openNDV:l,isAutoAdd:a,actionName:u});o=r,i.placeholder&&(r.placeholder=!0),s.push(r)}catch(e){C.showError(e,S.baseText(`error`)),console.error(e);continue}r=[o.position[0]+N[0]*2+16,o.position[1]]}return o&&It(o),n.trackHistory&&n.trackBulk&&i.stopRecordingUndo(),n.keepPristine||a.markStateDirty(),s}function It(e){let n=R.value.getParentNodesByDepth(e.name,1);n.length>1&&n.slice(1).forEach((e,n)=>{let r=t.getNodeByName(e.name);r&&H(r.id,{x:r.position[0],y:r.position[1]+100*(n+1)})})}function Lt(e){if(e.maxNodes!==void 0&&w.getNodeTypeCount(e.name)>=e.maxNodes)throw Error(S.baseText(`nodeView.showMessage.showMaxNodeTypeError.message`,{adjustToNumber:e.maxNodes,interpolate:{nodeTypeDataDisplayName:e.displayName}}))}function Rt(e,n,r={}){Lt(n);let s=X(e,n,{viewport:r.viewport});if(!s)throw Error(S.baseText(`nodeViewV2.showError.failedToCreateNode`));return t.addNode(s),r.trackHistory&&i.pushCommandToUndo(new Ue(s,Date.now())),r.isAutoAdd||Bt(s,r),h(()=>{r.keepPristine||a.markStateDirty(),t.setNodePristine(s.name,!0),T.matchCredentials(s),T.updateNodeParameterIssues(s),T.updateNodeCredentialIssues(s),T.updateNodeInputIssues(s);let e=s.type===B,n=e||!r.openNDV||Ye?void 0:v.isNdvInFocusPanelEnabled&&b.focusPanelActive&&b.resolvedParameter===void 0?`focus_panel`:v.isZoomedViewEnabled?`zoomed_view`:`ndv`;r.telemetry&&Ht(s,r,n),e||(k.run(`nodeView.addNodeButton`,{nodeTypeName:s.type}),n===`focus_panel`||(n===`zoomed_view`?v.setNodeNameToBeFocused(s.name):n===`ndv`&&o.setActiveNodeName(s.name,`added_new_node`)))}),s}async function zt(e){let n=t.getNodeByName(e);n&&G(n.id)}function Bt(e,n={}){let r=a.lastInteractedWithNode;if(!r)return;let i=Ke(e.type),o=r.id,s=a.lastInteractedWithNodeConnection,c=a.lastInteractedWithNodeHandle;if(i&&s){let{type:t}=gt(c),n=e.id,r=U({mode:P.Input,type:t,index:0});Q({target:s.target,targetHandle:s.targetHandle,source:n,sourceHandle:r}),$(s),Q({source:s.source,sourceHandle:s.sourceHandle,target:n,targetHandle:r});return}let l={trackHistory:n.trackHistory,trackBulk:!1};if(c){let{type:t,mode:n}=gt(c),r=e.id,i=U({mode:P.Input,type:t,index:0});n===P.Input?Q({source:r,sourceHandle:i,target:o,targetHandle:c},l):Q({source:o,sourceHandle:c,target:r,targetHandle:i},l)}else Q({source:o,sourceHandle:U({mode:P.Output,type:V.Main,index:0}),target:e.id,targetHandle:U({mode:P.Input,type:V.Main,index:0})},l);s&&($(s,l),t.getNodeById(s.target)&&Q({source:e.id,sourceHandle:U({mode:P.Input,type:V.Main,index:0}),target:s.target,targetHandle:s.targetHandle},l))}function Ht(e,t,n){switch(e.type){case B:Ut();break;default:Wt(e,t,n)}}function Ut(){O.track(`User inserted workflow note`,{workflow_id:t.workflowId})}function Wt(e,n,r){let i=e.parameters,o=typeof i?.resource==`string`?i.resource:void 0,s=typeof i?.operation==`string`?i.operation:void 0;p.onNodeAddedToCanvas({node_id:e.id,node_type:e.type,node_version:e.typeVersion,is_auto_add:n.isAutoAdd,workflow_id:t.workflowId,drag_and_drop:n.dragAndDrop,input_node_type:a.lastInteractedWithNode?a.lastInteractedWithNode.type:void 0,resource:o,operation:s,action:n.actionName,next_view_shown:r})}function X(e,t,n={}){let r=e.id??T.assignNodeId(e),i=e.name??T.getDefaultNodeName(e)??t.defaults.name,a=e.type??t.name,o=e.typeVersion,s=n.forcePosition&&e.position?e.position:Zt(e,t,{viewport:n.viewport}),l=e.disabled??!1,u=e.parameters??{},d={...e,id:r,name:i,type:a,typeVersion:o,position:s,disabled:l,parameters:u,placeholder:e.placeholder};return Qt(d),c.getIsNodeInstalled(d.type)&&(Xt(d,t),$t(d,t)),d}async function Z(e){let t=c.allNodeTypes,n=[];t.forEach(t=>{let r=Array.isArray(t.version)?t.version:[t.version];e.find(e=>e.type===t.name&&r.includes(e.typeVersion))&&!t.hasOwnProperty(`properties`)&&n.push({name:t.name,version:Array.isArray(t.version)?t.version.slice(-1)[0]:t.version})}),n.length>0&&await c.getNodesInformation(n)}function Kt(e){let t=e.defaultVersion;return t===void 0&&(t=Array.isArray(e.version)?e.version.slice(-1)[0]:e.version),t}function Xt(e,t){e.parameters=ut(t?.properties??[],e.parameters,!0,!1,e,t)??{}}function Zt(e,n,r={}){let i=a.lastInteractedWithNode,o=a.lastInteractedWithNodeConnection,s=a.lastInteractedWithNodeHandle,{type:l,index:u}=gt(s??o?.sourceHandle??``),d=l===V.Main?N:re,f=[d[0]/2,d[1]/2],p=e.position;if(p)return fe(t.allNodes,p,{offset:f,size:d,viewport:r.viewport,normalize:!1});if(i){let s=c.getNodeType(i.type,i.typeVersion),m=R.value.getNode(i.name),h=a.lastCancelledConnectionPosition;if(h){let e=l===V.Main?0:-d[0]/2,t=l===V.Main?-d[1]/2:0;p=[h[0]+e,h[1]+t],a.lastCancelledConnectionPosition=void 0}else if(s&&m){if(Ke(e.type)&&o&&l===V.AiTool){let e=t.getNodeById(o.target);if(e){let n=e.position[1],a=i.position[1],o=(a-n)/2,s=n+o;if(p=[i.position[0]-ve[0]/2,s],Math.abs(s-a)<A){let e=A/2;H(i.id,{x:i.position[0],y:i.position[1]+(o>0?e:-e)},{trackHistory:!0})}return fe(t.allNodes,p,{offset:f,size:d,viewport:r.viewport})}}let a=z(Qe(R.value,m,s)),c=(a||[]).filter(e=>e!==V.Main),h=z(st(R.value,m,s)).filter(e=>e===V.Main),g=0;if(o){let e=!1;typeof n.inputs==`string`?e=!0:Array.isArray(n.inputs)&&(e=z(n.inputs).filter(e=>e!==V.Main).length>0);let t=e?ve:N,r=A+(e?ve[0]-N[0]:0);an(i.name,r,{trackHistory:!0,nodeSize:t})}h.length>1&&(g=he(h.length,N[1],16)[u]);let _=[];try{_=st(R.value,e,n)}catch{}let v=z(_),y={[V.AiLanguageModel]:d[0]*2,[V.AiMemory]:d[0]}[l]??0;if(v.length>0&&v.every(e=>e!==V.Main)){let e=c.findIndex(e=>_[0]===e),t=Math.max(c.length+1,1);p=[i.position[0]+ve[0]/t*(e+1)-d[0]/2-y,i.position[1]+A]}else{let e=A;a.find(e=>e!==V.Main)&&(e+=140),p=[i.position[0]+e,i.position[1]+g],o&&(p=[p[0],i.position[1]])}}}return p||=c.isTriggerNode(e.type)&&$e.value.length===0?[0,0]:qe.value,fe(t.allNodes,p,{offset:f,size:d,viewport:r.viewport})}function Qt(t){t.name=_e(S.localizeNodeName(e.defaultLocale,t.name,t.type))}function $t(e,t){Ge(e,t),[`n8n-nodes-base.webhook`,`n8n-nodes-base.formTrigger`,`@n8n/n8n-nodes-langchain.mcpTrigger`].includes(e.type)&&e.parameters.path===``&&(e.parameters.path=e.webhookId)}function en(e){return e.type===`n8n-nodes-base.stickyNote`?{x:e.position[0],y:e.position[1],width:e.parameters.width||N[0],height:e.parameters.height||N[1]}:{x:e.position[0],y:e.position[1],width:N[0],height:N[1]}}function tn(e,t,n){let r={x:e[0],y:e[1],width:t[0]+16,height:t[1]};for(let e of n)if(e.type!==`n8n-nodes-base.stickyNote`&&me(r,en(e)))return!1;return!0}function nn(e,n,r=N){let i=Object.values(t.nodesByName),a=e[0],o=e[1],s=N[1]*2,c=e=>({x:e.position[0]+N[0]/2,y:e.position[1]+N[1]/2}),l=e=>Math.abs(e.position[1]-o)<=s,u=e=>e.position[0]+N[0]>a||e.position[0]>=a,d=(e,t,n)=>e.position[0]>=t.position[0]&&e.position[0]+N[0]<=t.position[0]+n.width&&e.position[1]>=t.position[1]&&e.position[1]+N[1]<=t.position[1]+n.height,f=(e,t,n)=>Math.abs(e.x-t.x)<=n.x&&Math.abs(e.y-t.y)<=n.y,p=(e,t,n,r,i)=>d(e,t,n)||f(c(e),r,i),m=(e,t,n,r,i)=>i.filter(i=>p(i,e,t,n,r)),h=i.filter(e=>e.type===`n8n-nodes-base.stickyNote`||e.name===n?!1:l(e)&&u(e)),g=new Set(h.map(e=>e.name));for(let e of h)w.getConnectedNodes(`downstream`,R.value,e.name).filter(e=>{let n=t.getNodeByName(e);return n?u(n):!1}).forEach(e=>g.add(e));let _=i.filter(e=>e.type===`n8n-nodes-base.stickyNote`?!1:g.has(e.name)),v=[],y=[],b=[],x=new Map,S=i.filter(e=>e.type===B),C=Math.min(o,..._.map(e=>e.position[1])),T=Math.max(o+r[1],..._.map(e=>e.position[1]+N[1])),E=t.nodesByName[n],D={x:r[0]/2,y:r[1]/2};for(let e of S){let t=en(e),n=e.position[0],i=n+t.width,o=e.position[1],s=!(o+t.height<=C||o>=T),c=a>=n&&a<=i,l={x:e.position[0]+t.width/2,y:e.position[1]+t.height/2};if(E&&p(E,e,t,l,D)&&c){let n=m(e,t,l,D,_);x.set(e.id,n),v.push(e);continue}let u=m(e,t,l,D,_);u.length>0&&x.set(e.id,u);let d=u.length>0;s&&(d?a+r[0]>n+2*A/3?b.push(e):y.push(e):c?v.push(e):n>=a&&y.push(e))}return{nodesToMove:[..._,...y,...b],stickiesToStretch:v,stickiesToMoveAndStretch:b,stickyAssociatedNodes:x}}function rn(e,n,r,i,{trackHistory:a=!1}){let o=en(e),s=e.position[0],c=s+o.width,l=n[0]-20,u=n[0]+r[0]+20;for(let e of i){let n=t.getNodeById(e.id);if(!n)continue;let r=n.position[0]-20,i=n.position[0]+N[0]+20;l=Math.min(l,r),u=Math.max(u,i)}let d=Math.min(s,l),f=Math.max(c,u)-d,p={...e.parameters,width:f};lt(e.id,e.parameters,p,{trackHistory:a,trackBulk:!1}),d!==s&&H(e.id,{x:d,y:e.position[1]},{trackHistory:a})}function an(e,n,{trackHistory:r=!1,nodeSize:i=N}){let a=t.nodesByName[e];if(!a)return;let o=[a.position[0]+A,a.position[1]];if(tn(o,i,Object.values(t.nodesByName).filter(t=>t.name!==e&&t.type!==`n8n-nodes-base.stickyNote`)))return;let{nodesToMove:s,stickiesToStretch:c,stickiesToMoveAndStretch:l,stickyAssociatedNodes:u}=nn(o,e,i);for(let e of s)H(e.id,{x:e.position[0]+n,y:e.position[1]},{trackHistory:r});for(let e of l){let n=t.getNodeById(e.id);n&&rn(n,o,i,u.get(e.id)??[],{trackHistory:r})}for(let e of c)rn(e,o,i,u.get(e.id)??[],{trackHistory:r})}function Q(e,{trackHistory:n=!1,keepPristine:r=!1}={}){let o=t.getNodeById(e.source),s=t.getNodeById(e.target);if(!o||!s)return;n&&i.pushCommandToUndo(new Be(_t(o,s,e),Date.now()));let c=_t(o,s,e);fn(o,s,c[0],c[1])&&(t.addConnection({connection:c}),h(()=>{T.updateNodeInputIssues(o),T.updateNodeInputIssues(s)}),r||a.markStateDirty())}function on(e){let n=e[0].node,r=t.getNodeByName(n),i=e[1].node,a=t.getNodeByName(i);!r||!a||$(ht(r,a,e))}function sn(e,{trackHistory:n=!1,trackBulk:r=!0}={}){let a=t.getNodeById(e);if(!a)return;n&&r&&i.startRecordingUndo();let o=(0,Jt.default)(t.workflow.connections);for(let e of Object.keys(o)){let r=t.getNodeByName(e);if(r)for(let i of Object.keys(o[e]))for(let s of Object.keys(o[e][i])){let c=o[e][i][parseInt(s,10)]??[];for(let e of Object.keys(c)){let o=c[parseInt(e,10)];if(!o)continue;let l=t.getNodeByName(o.node);l&&(l.id===a.id||r.name===a.name)&&$({source:r.id,sourceHandle:U({mode:P.Output,type:i,index:parseInt(s,10)}),target:l.id,targetHandle:U({mode:P.Input,type:o.type,index:o.index})},{trackHistory:n,trackBulk:!1})}}}delete t.workflow.connections[a.name],n&&r&&i.stopRecordingUndo()}function $(e,{trackHistory:n=!1,trackBulk:r=!0}={}){let a=t.getNodeById(e.source),o=t.getNodeById(e.target);if(!a||!o)return;let s=_t(a,o,e);n&&r&&i.startRecordingUndo(),t.removeConnection({connection:s}),h(()=>{T.updateNodeInputIssues(a),T.updateNodeInputIssues(o)}),n&&(i.pushCommandToUndo(new He(s,Date.now())),r&&i.stopRecordingUndo())}function cn(e){t.addConnection({connection:e})}function ln(e,n){let r=t.getNodeById(e),i=n===P.Input;r&&c.getNodeType(r.type,r.typeVersion)&&vt(t.workflow.connections,t.workflow.nodes).forEach(n=>{if(i?n.target===e:n.source===e){let e=i?n.source:n.target,a=t.getNodeById(e);if(!a||!n.data)return;let[o,s]=i?[a,r]:[r,a];fn(o,s,n.data.source,n.data.target)||h(()=>$(n))}})}function un(e){return ln(e,P.Input)}function dn(e){return ln(e,P.Output)}function fn(e,t,n,r){let i=[B],a=e=>Ze(e.type)&&!Ve().getIsNodeInstalled(e.type),o=a(e),s=a(t),l=e=>c.getNodeType(e.type,e.typeVersion)??c.communityNodeType(e.type)?.nodeDescription,u=(e,t)=>e.filter(e=>(typeof e==`string`?e:e.type)===t),d=e=>{if(e&&typeof e==`object`&&`filter`in e)return e.filter};if(n.type!==r.type||i.includes(e.type)||i.includes(t.type))return!1;let f=l(e),p=R.value.getNode(e.name);if(!p)return!1;let m=[];f&&(m=st(R.value,p,f)||[]);let h=u(m,n.type),g=h.length>0,_=n.index<h.length,v=d(_?h[n.index]:void 0);if((!g||!_)&&!o)return!1;let y=l(t),b=R.value.getNode(t.name);if(!b)return!1;let x=[];y&&(x=Qe(R.value,b,y)||[]);let w=u(x,r.type),T=w.length>0,E=r.index<w.length,D=d(E?w[r.index]:void 0);function O(e,t){let n=!!e?.nodes?.length&&!e.nodes.includes(t),r=!!e?.excludedNodes?.length&&e.excludedNodes.includes(t);return n||r}let ee=O(D,e.type),te=O(v,t.type);return ee||te?(C.showToast({title:S.baseText(`nodeView.showError.nodeNodeCompatible.title`),message:S.baseText(`nodeView.showError.nodeNodeCompatible.message`,{interpolate:{sourceNodeName:e.name,targetNodeName:t.name}}),type:`error`,duration:5e3}),!1):!((!T||!E)&&!s)}async function pn(e,{trackBulk:t=!0,trackHistory:n=!1,keepPristine:r=!1}={}){await h(),t&&n&&i.startRecordingUndo();for(let t of e)Q(t,{trackHistory:n,keepPristine:r});t&&n&&i.stopRecordingUndo(),r||a.markStateDirty()}function mn(){if(p.setNodeCreatorState({createNodeActive:!1}),p.setShowScrim(!1),t.executionWaitingForWebhook)try{t.removeTestWebhook(t.workflowId)}catch{}t.resetWorkflow(),n.resetState(),t.currentWorkflowExecutions=[],n.setActiveExecutionId(void 0),t.lastSuccessfulExecution=null,a.resetLastInteractedWith(),a.markStateClean(),m.activeExecution=null,T.credentialsUpdated.value=!1}async function hn(e){let{workflowDocumentStore:n}=await w.initState(e,Ee());return e.nodes.forEach(e=>{let t=J(e.type,e.typeVersion),n=c.getIsNodeInstalled(e.type);T.matchCredentials(e),n&&(Xt(e,t),$t(e,t))}),t.setNodes(e.nodes),t.setConnections(e.connections),{workflowDocumentStore:n}}let gn=e=>{e.forEach(e=>{let r=J(We(e.type),e.typeVersion);T.matchCredentials(e),Xt(e,r),$t(e,r);let i=t.workflow.nodes.findIndex(t=>t.name===e.name);n.updateNodeAtIndex(i,{...e,type:We(e.type)})})};function _n(e){if(e?.nodes){for(let t of e.nodes)if(t.credentials)for(let[e,n]of Object.entries(t.credentials))typeof n==`string`||n.id===null||r.getCredentialById(n.id)||delete t.credentials[e]}}async function vn(n,{trackBulk:r=!0,trackHistory:o=!1,viewport:s=ge,setStateDirty:l=!0}={}){let u={},d=new Set((n.nodes??[]).map(e=>e.name));if(!n.nodes)throw Error(S.baseText(`nodeView.noNodesGivenToAdd`));let f=w.getNodeTypesMaxCount(),p,m,h=[];await T.loadNodesProperties(n.nodes.map(e=>({name:e.type,version:e.typeVersion}))),n.nodes.forEach(t=>{if(f[t.type]!==void 0)if(f[t.type].exist>=f[t.type].max){u[t.name]=f[t.type].nodeNames[0];return}else f[t.type].exist+=1;p=t.name;let n=S.localizeNodeName(e.defaultLocale,t.name,t.type);d.delete(p),m=_e(n,Array.from(d)),d.add(m),u[p]=m,h.push(t)});let g={},_=n.connections??{},v=h.map(e=>e.name),y,b,x,E,D;for(y of Object.keys(_)){if(!v.includes(y))continue;let e={};for(b of Object.keys(_[y]))for(e[b]=[],x=0;x<_[y][b].length;x++){let t=[],n=_[y][b][x];if(n)for(E=0;E<n.length;E++)D=n[E],v.includes(D.node)&&t.push(D);e[b].push(t)}g[y]=e}let O=t.createWorkflowObject(h,g,!0);for(let e of Object.keys(O.nodes)){let t=O.nodes[e];c.getIsNodeInstalled(t.type)||(t.parameters=h.find(t=>t.name===e)?.parameters??t.parameters)}for(p in u){let e=u[p];!e||p===e||O.renameNode(p,e)}if(n.pinData){let e=!0;for(let t of Object.keys(n.pinData)){if(!e){C.showError(Error(S.baseText(`ndv.pinData.error.tooLarge.description`)),S.baseText(`ndv.pinData.error.tooLarge.title`));continue}let r=O.nodes[u[t]??t];if(r)try{mt(r).setData(n.pinData[t],`add-nodes`),e=!0}catch(t){e=!1,console.error(t)}}}return r&&o&&i.startRecordingUndo(),await Y(Object.values(O.nodes),{trackBulk:!1,trackHistory:o,viewport:s,keepPristine:!0}),await pn(vt(O.connectionsBySourceNode,Object.values(O.nodes)),{trackBulk:!1,trackHistory:o,keepPristine:!0}),r&&o&&i.stopRecordingUndo(),l?a.markStateDirty():a.markStateClean(),{nodes:Object.values(O.nodes),connections:O.connectionsBySourceNode}}async function yn(r,i,{importTags:o=!0,trackBulk:s=!0,trackHistory:l=!0,viewport:d,regenerateIds:f=!0,trackEvents:p=!0,setStateDirty:m=!0}={}){if(a.resetLastInteractedWith(),!r.hasOwnProperty(`nodes`)||!r.hasOwnProperty(`connections`))return{};try{let a={};if(r.nodes){let e=new Set(r.nodes.map(e=>e.name));r.nodes.forEach(t=>{if(!t.name){let n=_e(c.getNodeType(t.type)?.displayName??t.type,Array.from(e));t.name=n,e.add(n)}if(t.webhookId&&Je.includes(t.type)&&t.webhookId&&(T.assignWebhookId(t),t.parameters.path?t.parameters.path=t.webhookId:t.parameters.options?.path&&(t.parameters.options.path=t.webhookId)),t.id){let e=t.id;if(f){let n=T.assignNodeId(t);a[n]=e}}else T.assignNodeId(t)})}_n(r);try{if(p){let n=JSON.stringify(it(r,w.getNodeTypes(),{nodeIdMap:a,sourceInstanceId:r.meta&&r.meta.instanceId!==e.instanceId?r.meta.instanceId:``,isCloudDeployment:u.isCloudDeployment}).nodeGraph);i===`paste`?O.track(`User pasted nodes`,{workflow_id:t.workflowId,node_graph_string:n}):i===`duplicate`?O.track(`User duplicated nodes`,{workflow_id:t.workflowId,node_graph_string:n}):O.track(`User imported workflow`,{source:i,workflow_id:t.workflowId,node_graph_string:n})}}catch{}return w.updateNodePositions(r,fe(L.value.nodes,qe.value,{...r.nodes&&r.nodes.length>1?{size:we(r.nodes)}:{},viewport:d})),await vn(r,{trackBulk:s,trackHistory:l,viewport:d,setStateDirty:m}),o&&u.areTagsEnabled&&Array.isArray(r.tags)&&await bn(r),r.name&&n.setWorkflowName({newName:r.name,setStateDirty:m}),r}catch(e){return console.error(e),C.showError(e,S.baseText(`nodeView.showError.importWorkflowData.title`)),{}}}async function bn(e){let n=await f.fetchAll(),r=new Set(n.map(e=>e.name)),i=e.tags,a=i.filter(e=>!r.has(e.name)),o=[];for(let e of a){let t=f.create(e.name).then(e=>(n.push(e),e));o.push(t)}await Promise.all(o);let s=i.reduce((e,t)=>{let r=n.find(e=>e.name===t.name);return r&&e.push(r.id),e},[]);j(F(t.workflowId)).addTags(s)}async function xn(e){let n,r=g.currentProjectId??g.personalProject?.id;if(!r)throw Error(`No project selected`);l.startLoading();try{n=await t.getWorkflowFromUrl(e,r)}catch(e){C.showError(e,S.baseText(`nodeView.showError.getWorkflowDataFromUrl.title`));return}finally{l.stopLoading()}return n}function Sn(e){let n={nodes:[],connections:{},pinData:{}},i=new Set;for(let r of e){let e=w.getNodeDataToSave(r),a=t.workflowId?j(F(t.workflowId)):null,o=a?Ae(a.pinData)[r.name]:void 0;o&&(n.pinData[r.name]=o),e.credentials&&u.isEnterpriseFeatureEnabled[at.Sharing]&&(e.credentials=Cn(e.credentials,a?.usedCredentials??{})),n.nodes.push(e),i.add(r.name)}return n.connections=wn(n.nodes,i),w.removeForeignCredentialsFromWorkflow(n,r.allCredentials),n}function Cn(e,t){return Object.fromEntries(Object.entries(e).filter(([,e])=>e.id&&(!t[e.id]||t[e.id]?.currentUserHasAccess)))}function wn(e,n){let r={};for(let i of e){let e=t.outgoingConnectionsByNodeName(i.name);if(!Object.keys(e).length)continue;let a=Tn(e,n);Object.keys(a).length&&(r[i.name]=a)}return r}function Tn(e,t){let n={};for(let[r,i]of Object.entries(e)){let e=i.map(e=>(e??[]).filter(e=>t.has(e.node)));e.length&&(n[r]=e)}return n}async function En(e,n={}){return(await yn(Xe(Sn(t.getNodesByIds(e))),`duplicate`,{viewport:n.viewport,importTags:!1})).nodes?.map(e=>e.id).filter(ke)??[]}async function Dn(n){let r=Xe(Sn(t.getNodesByIds(n))),i=j(F(t.workflowId));r.meta={...r.meta,...i.meta,instanceId:e.instanceId},await pe.copy(JSON.stringify(r,null,2)),O.track(`User copied nodes`,{node_types:r.nodes.map(e=>e.type),workflow_id:t.workflowId})}async function On(e){await Dn(e),Ct(e)}async function kn(e,r){let i;try{i=await t.getExecution(e)}catch(e){C.showError(e,S.baseText(`nodeView.showError.openExecution.title`));return}if(i===void 0)throw Error(`Execution with id "${e}" could not be found!`);if(i.status===`error`&&i.data?.resultData.error){let{title:e,message:t}=Oe({error:i.data.resultData.error,lastNodeExecuted:i.data.resultData.lastNodeExecuted});C.showMessage({title:e,message:t,type:`error`,duration:0})}if(await hn(i.workflowData),n.setWorkflowExecutionData(i),[`manual`,`evaluation`].includes(i.mode)||t.workflowId&&j(F(t.workflowId)).setPinData({}),r){let e=t.getNodeById(r);e?o.setActiveNodeName(e.name,`other`):C.showError(Error(`Node with id "${r}" could not be found!`),S.baseText(`nodeView.showError.openExecution.node`))}return a.markStateClean(),i}function An(e){if(!t.allNodes.some(je))return;let n=t.workflowObject;_.toggleOpen(!0);let r={workflow_id:n.id,button_type:e};k.run(`nodeView.onOpenChat`,r),O.track(`User clicked chat open button`,r),setTimeout(()=>{Vt.emit(`focusInput`)},0)}async function jn({name:e,workflow:r}){let i=r.nodes?.map(t.convertTemplateNodeToNodeUi);x.isFeatureEnabled&&i&&(i=Dt(i)),r.connections&&t.setConnections(r.connections),await Y(i??[],{keepPristine:!0}),await n.getNewWorkflowData(e,g.currentProjectId)}function Mn(n){let r=t.getNodeById(n);if(!r)return!1;let i=ct(r);return i?(window.open(`${e.baseUrl}workflow/${i}`,`_blank`),!0):!1}function Nn(e,n,{trackHistory:r=!0,trackBulk:o=!0}={}){let s=t.getNodeById(e),c=t.getNodeById(n);if(!s||!c)return;r&&o&&i.startRecordingUndo();let[l,u]=s.position;H(n,{x:l,y:u},{trackHistory:r}),kt(e,n,{trackBulk:!1,trackHistory:r}),G(e,{trackHistory:r,trackBulk:!1}),a.markStateDirty(),r&&o&&i.stopRecordingUndo()}async function Pn(e,t,{trackBulk:n=!0,trackHistory:r=!0,...o}){r&&n&&i.startRecordingUndo();let s=await Y(e,{...o,trackHistory:r,trackBulk:!1,telemetry:!0}),c=L.value.nodes.length-e.length;if(await pn(t.map(({from:e,to:t})=>{let n=L.value.nodes[c+e.nodeIndex],r=L.value.nodes[c+t.nodeIndex],i=e.type??t.type??V.Main;return{source:n.id,sourceHandle:U({mode:P.Output,type:ze(i)?i:V.Main,index:e.outputIndex??0}),target:r.id,targetHandle:U({mode:P.Input,type:ze(i)?i:V.Main,index:t.inputIndex??0}),data:{source:{index:e.outputIndex??0,type:i},target:{index:t.inputIndex??0,type:i}}}}),{trackHistory:r,trackBulk:!1}),a.resetLastInteractedWith(),s.length>0&&o.replaceNodeId){let e=s[s.length-1].id;Nn(o.replaceNodeId,e,{trackHistory:r,trackBulk:!1})}return r&&n&&i.stopRecordingUndo(),{addedNodes:s}}function Fn(){setTimeout(()=>bt.emit(`fitView`))}function In(e){O.track(`User inserted workflow template`,{source:`workflow`,template_id:xe(e),wf_template_repo_session_id:y.previousSessionId})}function Ln(){x.isFeatureEnabled&&(b.openFocusPanel(),b.setSelectedTab(`setup`))}async function Rn(e){mn(),l.startLoading(),l.setLoadingText(S.baseText(`nodeView.loadingTemplate`)),t.currentWorkflowExecutions=[],m.activeExecution=null;let r;try{if(k.run(`template.requested`,{templateId:e}),r=await y.getFixedWorkflowTemplate(e),!r)throw Error(S.baseText(`nodeView.workflowTemplateWithIdCouldNotBeFound`,{interpolate:{templateId:e}}))}catch(e){C.showError(e,S.baseText(`nodeView.couldntImportWorkflow`)),await M.replace({name:rt.NEW_WORKFLOW});return}In(e),a.isBlankRedirect=!0,await M.replace({name:rt.NEW_WORKFLOW,query:{templateId:e}}),await jn({name:r.name,workflow:r.workflow}),typeof I.params.name==`string`&&n.setWorkflowId(I.params.name),j(F(t.workflowId)).addToMeta({templateId:`${e}`}),Ln(),l.stopLoading(),k.run(`template.open`,{templateId:e,templateName:r.name,workflow:r.workflow}),Fn()}async function zn(e){if(!e.nodes||!e.connections){C.showError(Error(S.baseText(`nodeView.couldntLoadWorkflow.invalidWorkflowObject`)),S.baseText(`nodeView.couldntImportWorkflow`)),await M.replace({name:rt.NEW_WORKFLOW});return}mn(),l.startLoading(),l.setLoadingText(S.baseText(`nodeView.loadingTemplate`)),t.currentWorkflowExecutions=[],m.activeExecution=null,a.isBlankRedirect=!0;let n=e.meta.templateId,r=I.query.parentFolderId;await g.refreshCurrentProject(),await M.replace({name:rt.NEW_WORKFLOW,query:{templateId:n,parentFolderId:r,projectId:g.currentProjectId}}),await jn({name:e.name,workflow:e}),j(F(t.workflowId)).addToMeta({templateId:`${n}`}),Ln(),l.stopLoading(),Fn()}return{lastClickPosition:qe,editableWorkflow:L,editableWorkflowObject:R,triggerNodes:$e,requireNodeTypeDescription:J,addNodes:Y,addNode:Rt,resolveNodePosition:Zt,revertAddNode:zt,updateNodesPosition:nt,updateNodePosition:H,tidyUp:et,revertUpdateNodePosition:ot,setNodeActive:At,setNodeActiveByName:K,clearNodeActive:jt,setNodeSelected:Nt,toggleNodesDisabled:Pt,revertToggleNodeDisabled:Ft,toggleNodesPinned:q,setNodeParameters:Mt,renameNode:W,revertRenameNode:xt,replaceNodeParameters:lt,revertReplaceNodeParameters:dt,deleteNode:G,deleteNodes:Ct,copyNodes:Dn,cutNodes:On,duplicateNodes:En,getNodesToSave:Sn,getNodesToShift:nn,revertDeleteNode:wt,addConnections:pn,createConnection:Q,revertCreateConnection:on,deleteConnection:$,revertDeleteConnection:cn,deleteConnectionsByNodeId:sn,revalidateNodeInputConnections:un,revalidateNodeOutputConnections:dn,isConnectionAllowed:fn,filterConnectionsByNodes:Tn,connectAdjacentNodes:St,importWorkflowData:yn,fetchWorkflowDataFromUrl:xn,resetWorkspace:mn,initializeWorkspace:hn,resolveNodeWebhook:$t,openExecution:kn,startChat:An,importTemplate:jn,replaceNodeConnections:kt,tryToOpenSubworkflowInNewTab:Mn,initializeUnknownNodes:gn,replaceNode:Nn,addNodesAndConnections:Pn,fitView:Fn,openWorkflowTemplate:Rn,openWorkflowTemplateFromJSON:zn}}export{At as S,Ft as _,Ht as a,jt as b,Z as c,zt as d,Bt as f,q as g,J as h,Wt as i,Vt as l,Y as m,qt as n,Ut as o,It as p,Gt as r,X as s,Xt as t,Rt as u,Pt as v,K as x,Mt as y};
//# sourceMappingURL=useCanvasOperations-CI7Ylcwf.js.map