n8n-editor-ui 1.22.0 → 1.22.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 +62 -62
- package/dist/assets/{AuthView-_5lvIORY.js → AuthView--On8E3VP.js} +2 -2
- package/dist/assets/{AuthView-_5lvIORY.js.map → AuthView--On8E3VP.js.map} +1 -1
- package/dist/assets/{CanvasControls-_S6dAUFr.js → CanvasControls-ebFBI-_5.js} +2 -2
- package/dist/assets/{CanvasControls-_S6dAUFr.js.map → CanvasControls-ebFBI-_5.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-Gto324pL.js → ChangePasswordView-gj93rkzc.js} +2 -2
- package/dist/assets/{ChangePasswordView-Gto324pL.js.map → ChangePasswordView-gj93rkzc.js.map} +1 -1
- package/dist/assets/{CollectionParameter-ThiBAc6J.js → CollectionParameter-V1n0L6ao.js} +2 -2
- package/dist/assets/CollectionParameter-V1n0L6ao.js.map +1 -0
- package/dist/assets/{CredentialsView-WF2GuXwX.js → CredentialsView-9Nq2fOpi.js} +2 -2
- package/dist/assets/{CredentialsView-WF2GuXwX.js.map → CredentialsView-9Nq2fOpi.js.map} +1 -1
- package/dist/assets/{ExecutionFilter-6e5m1hky.js → ExecutionFilter-dfrYJ_Rf.js} +2 -2
- package/dist/assets/{ExecutionFilter-6e5m1hky.js.map → ExecutionFilter-dfrYJ_Rf.js.map} +1 -1
- package/dist/assets/{ExecutionPreview-qQdwo4nO.js → ExecutionPreview-yFW7oTRf.js} +2 -2
- package/dist/assets/{ExecutionPreview-qQdwo4nO.js.map → ExecutionPreview-yFW7oTRf.js.map} +1 -1
- package/dist/assets/{ExecutionsInfoAccordion-HQZywboM.js → ExecutionsInfoAccordion-EztI4QOE.js} +2 -2
- package/dist/assets/{ExecutionsInfoAccordion-HQZywboM.js.map → ExecutionsInfoAccordion-EztI4QOE.js.map} +1 -1
- package/dist/assets/{ExecutionsLandingPage-FEiybFSK.js → ExecutionsLandingPage-ygQGHLu2.js} +2 -2
- package/dist/assets/{ExecutionsLandingPage-FEiybFSK.js.map → ExecutionsLandingPage-ygQGHLu2.js.map} +1 -1
- package/dist/assets/{ExecutionsList-9Pc2Zrql.js → ExecutionsList-H9VKc4jb.js} +2 -2
- package/dist/assets/{ExecutionsList-9Pc2Zrql.js.map → ExecutionsList-H9VKc4jb.js.map} +1 -1
- package/dist/assets/{ExecutionsView-Li55aBU0.js → ExecutionsView-NdkXn6EA.js} +2 -2
- package/dist/assets/{ExecutionsView-Li55aBU0.js.map → ExecutionsView-NdkXn6EA.js.map} +1 -1
- package/dist/assets/{FixedCollectionParameter-d68rB1aT.js → FixedCollectionParameter-tJFyljoK.js} +3 -3
- package/dist/assets/{FixedCollectionParameter-d68rB1aT.js.map → FixedCollectionParameter-tJFyljoK.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-3lTe1SvY.js → ForgotMyPasswordView-VxAVQQgB.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-3lTe1SvY.js.map → ForgotMyPasswordView-VxAVQQgB.js.map} +1 -1
- package/dist/assets/{MainHeader-wtrPt4Uz.js → MainHeader-luMJdQn2.js} +2 -2
- package/dist/assets/{MainHeader-wtrPt4Uz.js.map → MainHeader-luMJdQn2.js.map} +1 -1
- package/dist/assets/{MainSidebar-dKXNC9E9.js → MainSidebar-nf-k1wHF.js} +2 -2
- package/dist/assets/{MainSidebar-dKXNC9E9.js.map → MainSidebar-nf-k1wHF.js.map} +1 -1
- package/dist/assets/{NodeCreation-lpcdOti7.js → NodeCreation-RvlbocPg.js} +3 -3
- package/dist/assets/{NodeCreation-lpcdOti7.js.map → NodeCreation-RvlbocPg.js.map} +1 -1
- package/dist/assets/{NodeCreator-YAF-VpA5.js → NodeCreator-zDLKC62A.js} +2 -2
- package/dist/assets/{NodeCreator-YAF-VpA5.js.map → NodeCreator-zDLKC62A.js.map} +1 -1
- package/dist/assets/{NodeList-8URsrxUQ.js → NodeList-U4qs88M0.js} +2 -2
- package/dist/assets/{NodeList-8URsrxUQ.js.map → NodeList-U4qs88M0.js.map} +1 -1
- package/dist/assets/{NodeView-caDno-kw.js → NodeView-fUdpq96X.js} +3 -3
- package/dist/assets/{NodeView-caDno-kw.js.map → NodeView-fUdpq96X.js.map} +1 -1
- package/dist/assets/{ResourcesListLayout-N4zg03Vf.js → ResourcesListLayout-y5FSwJeu.js} +2 -2
- package/dist/assets/{ResourcesListLayout-N4zg03Vf.js.map → ResourcesListLayout-y5FSwJeu.js.map} +1 -1
- package/dist/assets/{RunDataAi-EdxjRrVc.js → RunDataAi-dgEyN_Yl.js} +2 -2
- package/dist/assets/{RunDataAi-EdxjRrVc.js.map → RunDataAi-dgEyN_Yl.js.map} +1 -1
- package/dist/assets/{RunDataJson-wqxHrAY5.js → RunDataJson-RuNn5FTw.js} +3 -3
- package/dist/assets/{RunDataJson-wqxHrAY5.js.map → RunDataJson-RuNn5FTw.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-MfJV4quL.js → RunDataJsonActions-wMN8ObC3.js} +2 -2
- package/dist/assets/{RunDataJsonActions-MfJV4quL.js.map → RunDataJsonActions-wMN8ObC3.js.map} +1 -1
- package/dist/assets/{RunDataSchema-rxgd4Q_M.js → RunDataSchema-NrdiV0Bv.js} +2 -2
- package/dist/assets/{RunDataSchema-rxgd4Q_M.js.map → RunDataSchema-NrdiV0Bv.js.map} +1 -1
- package/dist/assets/{RunDataTable-2IMpD8oi.js → RunDataTable-vThTeakV.js} +2 -2
- package/dist/assets/{RunDataTable-2IMpD8oi.js.map → RunDataTable-vThTeakV.js.map} +1 -1
- package/dist/assets/{SamlOnboarding-RIlvbmgY.js → SamlOnboarding-7ZeWtOoT.js} +2 -2
- package/dist/assets/{SamlOnboarding-RIlvbmgY.js.map → SamlOnboarding-7ZeWtOoT.js.map} +1 -1
- package/dist/assets/SettingsApiView-d7znGVgB.js +2 -0
- package/dist/assets/SettingsApiView-d7znGVgB.js.map +1 -0
- package/dist/assets/{SettingsCommunityNodesView-xqn73tJO.js → SettingsCommunityNodesView-U2OqH5_g.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-xqn73tJO.js.map → SettingsCommunityNodesView-U2OqH5_g.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets-yr_g8DWk.js → SettingsExternalSecrets-OK2zcF3w.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets-yr_g8DWk.js.map → SettingsExternalSecrets-OK2zcF3w.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-ogkrrHSL.js → SettingsFakeDoorView-wbngwN3n.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-ogkrrHSL.js.map → SettingsFakeDoorView-wbngwN3n.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-aWCvc1gM.js → SettingsLdapView-rYSjSdpv.js} +2 -2
- package/dist/assets/{SettingsLdapView-aWCvc1gM.js.map → SettingsLdapView-rYSjSdpv.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-IdWAQAEz.js → SettingsLogStreamingView-r4yJe9rt.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-IdWAQAEz.js.map → SettingsLogStreamingView-r4yJe9rt.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-s8B2f1Et.js → SettingsSourceControl-2sJrfiQZ.js} +2 -2
- package/dist/assets/{SettingsSourceControl-s8B2f1Et.js.map → SettingsSourceControl-2sJrfiQZ.js.map} +1 -1
- package/dist/assets/{SettingsSso-xhUlnU8v.js → SettingsSso-F08fTaoT.js} +2 -2
- package/dist/assets/{SettingsSso-xhUlnU8v.js.map → SettingsSso-F08fTaoT.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-qguburG-.js → SettingsUsageAndPlan-P3NemeAe.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-qguburG-.js.map → SettingsUsageAndPlan-P3NemeAe.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-mRes9Qkr.js → SettingsUsersView-qkwybUvB.js} +2 -2
- package/dist/assets/{SettingsUsersView-mRes9Qkr.js.map → SettingsUsersView-qkwybUvB.js.map} +1 -1
- package/dist/assets/{SettingsView-3Vqg8kdv.js → SettingsView-9Bw0MXcT.js} +2 -2
- package/dist/assets/{SettingsView-3Vqg8kdv.js.map → SettingsView-9Bw0MXcT.js.map} +1 -1
- package/dist/assets/{SetupView-RR2VulZH.js → SetupView-s0yzV7Gm.js} +2 -2
- package/dist/assets/{SetupView-RR2VulZH.js.map → SetupView-s0yzV7Gm.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-BbMhs31Z.js → SetupWorkflowFromTemplateView-6De7ws36.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-BbMhs31Z.js.map → SetupWorkflowFromTemplateView-6De7ws36.js.map} +1 -1
- package/dist/assets/{SigninView-hIeIEews.js → SigninView-QvYhHXWz.js} +2 -2
- package/dist/assets/{SigninView-hIeIEews.js.map → SigninView-QvYhHXWz.js.map} +1 -1
- package/dist/assets/{SignupView-iaO_BXyp.js → SignupView-ZLqXA-fI.js} +2 -2
- package/dist/assets/{SignupView-iaO_BXyp.js.map → SignupView-ZLqXA-fI.js.map} +1 -1
- package/dist/assets/{TemplateDetails-HasVFCUO.js → TemplateDetails-qWnefMYx.js} +2 -2
- package/dist/assets/{TemplateDetails-HasVFCUO.js.map → TemplateDetails-qWnefMYx.js.map} +1 -1
- package/dist/assets/{TemplateList-uT0I7BC-.js → TemplateList-Ek8NkQLd.js} +2 -2
- package/dist/assets/{TemplateList-uT0I7BC-.js.map → TemplateList-Ek8NkQLd.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-WwdzPK0w.js → TemplatesCollectionView-xoRz-QfG.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-WwdzPK0w.js.map → TemplatesCollectionView-xoRz-QfG.js.map} +1 -1
- package/dist/assets/{TemplatesInfoCarousel-WUt6CUAt.js → TemplatesInfoCarousel-TKGxiVaR.js} +2 -2
- package/dist/assets/{TemplatesInfoCarousel-WUt6CUAt.js.map → TemplatesInfoCarousel-TKGxiVaR.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-pwVBF7_m.js → TemplatesSearchView-gwbhQE6_.js} +2 -2
- package/dist/assets/{TemplatesSearchView-pwVBF7_m.js.map → TemplatesSearchView-gwbhQE6_.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-OxfZO4yX.js → TemplatesWorkflowView-VbJuwYVl.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-OxfZO4yX.js.map → TemplatesWorkflowView-VbJuwYVl.js.map} +1 -1
- package/dist/assets/{VariablesView-O1dh47w6.js → VariablesView-ZNxPDs_G.js} +2 -2
- package/dist/assets/{VariablesView-O1dh47w6.js.map → VariablesView-ZNxPDs_G.js.map} +1 -1
- package/dist/assets/{WorkerView-ehe17h1Q.js → WorkerView-Rzm_p5Pv.js} +2 -2
- package/dist/assets/{WorkerView-ehe17h1Q.js.map → WorkerView-Rzm_p5Pv.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-EK3d11st.js → WorkflowActivator-H10vhdIV.js} +2 -2
- package/dist/assets/{WorkflowActivator-EK3d11st.js.map → WorkflowActivator-H10vhdIV.js.map} +1 -1
- package/dist/assets/{WorkflowHistory-mqWH3nQZ.js → WorkflowHistory-diO3ekal.js} +2 -2
- package/dist/assets/{WorkflowHistory-mqWH3nQZ.js.map → WorkflowHistory-diO3ekal.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-LZfOfbX4.js → WorkflowOnboardingView-gUVzVQsZ.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-LZfOfbX4.js.map → WorkflowOnboardingView-gUVzVQsZ.js.map} +1 -1
- package/dist/assets/{WorkflowsView-NL0wKv4C.js → WorkflowsView-Qqq1sZTo.js} +2 -2
- package/dist/assets/{WorkflowsView-NL0wKv4C.js.map → WorkflowsView-Qqq1sZTo.js.map} +1 -1
- package/dist/assets/{cloud-JhkwKZAE.js → cloud-g7GqwUFZ.js} +2 -2
- package/dist/assets/{cloud-JhkwKZAE.js.map → cloud-g7GqwUFZ.js.map} +1 -1
- package/dist/assets/{executionsHelpers-Gkj6bYJi.js → executionsHelpers-gnbzcx5j.js} +2 -2
- package/dist/assets/{executionsHelpers-Gkj6bYJi.js.map → executionsHelpers-gnbzcx5j.js.map} +1 -1
- package/dist/assets/{index--RuZ5wHr.js → index-RXjMHIPR.js} +11 -11
- package/dist/assets/{index--RuZ5wHr.js.map → index-RXjMHIPR.js.map} +1 -1
- package/dist/assets/{pushConnection-UpdxMjHa.js → pushConnection-HdjAqr4R.js} +2 -2
- package/dist/assets/{pushConnection-UpdxMjHa.js.map → pushConnection-HdjAqr4R.js.map} +1 -1
- package/dist/assets/{templateActions-CZfTXoBx.js → templateActions-y8msVyEB.js} +2 -2
- package/dist/assets/{templateActions-CZfTXoBx.js.map → templateActions-y8msVyEB.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-FPo5qMF0.js → useExecutionDebugging-Yog1CJXv.js} +2 -2
- package/dist/assets/{useExecutionDebugging-FPo5qMF0.js.map → useExecutionDebugging-Yog1CJXv.js.map} +1 -1
- package/dist/assets/{workflowActivate-FltKJaAB.js → workflowActivate-IRvCsxq5.js} +2 -2
- package/dist/assets/{workflowActivate-FltKJaAB.js.map → workflowActivate-IRvCsxq5.js.map} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-ThiBAc6J.js.map +0 -1
- package/dist/assets/SettingsApiView-_7qUJ2zm.js +0 -2
- package/dist/assets/SettingsApiView-_7qUJ2zm.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as A,k as M,u as I,o as W,n as L,M as z,dz as V,dA as H,s as q,l as F,B as G,cQ as j,p as K,t as Q,v as Y,V as u,cP as X,A as J,ab as Z}from"./n8n-ZKR6bms9.js";import{ag as p,l as b,m as T,T as i,p as d,I as a,G as O,e as w,O as l,Q as E,u as m,S as y,R as h,aH as ee,r as se,M as U,J as te,n as oe,aE as ne,a9 as ae}from"./vendor-2CfOYFi2.js";import{e as ie,b as B,s as re,g as le,w as ce,f as P,h as ue,d as de,a as pe}from"./index--RuZ5wHr.js";import{m as me}from"./pinia-jX93eZRS.js";import{D}from"./luxon-ZRIU05qF.js";import"./lodash-es-s_m9YyW7.js";import"./axios-QLjAsgXu.js";import"./flatted-jPn12Tq4.js";import"./esprima-next-ulPLCZ1Z.js";import"./@vueuse/core-viEZCtbZ.js";import"./uuid-McvpxQtQ.js";import"./vue-i18n-2T2QU_2c.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-QL7QI0sV.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-RhDdw38P.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const ge="_notification_j2u1w_12",he={"gift-icon":"_gift-icon_j2u1w_5",notification:ge},be={},fe=d("div",null,null,-1),_e=[fe];function Se(e,s){const n=p("font-awesome-icon");return b(),T("div",{class:a(e.$style["gift-icon"])},[i(n,{icon:"gift"}),d("div",{class:a(e.$style.notification)},_e,2)],2)}const ye={$style:he},Ce=A(be,[["render",Se],["__cssModules",ye]]),Te=["value","max"],ve=8,we=O({__name:"ExecutionsUsage",props:{cloudPlanData:{}},setup(e){const s=e,n=D.utc(),C=w(()=>{const{days:o=0}=g().diff(n,["days"]).toObject();return Math.ceil(o)}),c=w(()=>{var f;if(!((f=s.cloudPlanData)!=null&&f.expirationDate))return!1;const o=D.fromISO(s.cloudPlanData.expirationDate);return n.toMillis()>o.toMillis()}),g=()=>{var o;return D.fromISO(((o=s==null?void 0:s.cloudPlanData)==null?void 0:o.expirationDate)??"")},r=w(()=>{var o;return(o=s.cloudPlanData)!=null&&o.usage?s.cloudPlanData.usage.executions<s.cloudPlanData.monthlyExecutionsLimit:0}),x=w(()=>{var t;if(!((t=s.cloudPlanData)!=null&&t.usage))return 0;const o=s.cloudPlanData.usage.executions,f=s.cloudPlanData.monthlyExecutionsLimit;return o>f?f:o}),$=w(()=>{var _;if(!((_=s.cloudPlanData)!=null&&_.usage))return 0;const o=s.cloudPlanData.usage.executions,f=s.cloudPlanData.monthlyExecutionsLimit,t=ve*f/100;return o<t?t:o}),k=w(()=>{var o;return(o=s.cloudPlanData)!=null&&o.monthlyExecutionsLimit?s.cloudPlanData.monthlyExecutionsLimit:0}),R=()=>{I().goToUpgrade("canvas-nav","upgrade-canvas-nav","redirect")};return(o,f)=>{const t=p("n8n-text"),_=p("i18n-t"),S=p("n8n-button");return b(),T("div",{class:a(o.$style.container)},[c.value?(b(),T("div",{key:0,class:a(o.$style.usageText)},[i(t,{size:"small",color:"danger"},{default:l(()=>[y(h(m(M).baseText("executionUsage.expired.text")),1)]),_:1})],2)):!c.value&&r.value?(b(),T("div",{key:1,class:a(o.$style.usageText)},[i(_,{tag:"span",keypath:"executionUsage.currentUsage"},{text:l(()=>[i(t,{size:"small",color:"text-dark"},{default:l(()=>[y(h(m(M).baseText("executionUsage.currentUsage.text")),1)]),_:1})]),count:l(()=>[i(t,{size:"small",bold:!0,color:"warning"},{default:l(()=>[y(h(m(M).baseText("executionUsage.currentUsage.count",{adjustToNumber:C.value||0})),1)]),_:1})]),_:1})],2)):r.value?E("",!0):(b(),T("div",{key:2,class:a(o.$style.usageText)},[i(t,{size:"small"},{default:l(()=>[y(h(m(M).baseText("executionUsage.ranOutOfExecutions.text")),1)]),_:1})],2)),c.value?E("",!0):(b(),T("div",{key:3,class:a(o.$style.usageCounter)},[d("div",{class:a(o.$style.progressBarDiv)},[d("progress",{class:a([r.value?o.$style.progressBarSuccess:o.$style.progressBarDanger,o.$style.progressBar]),value:$.value,max:k.value},null,10,Te)],2),d("div",{class:a(o.$style.executionsCountSection)},[i(t,{size:"xsmall",color:r.value?"text-dark":"danger"},{default:l(()=>[y(h(x.value)+"/"+h(k.value),1)]),_:1},8,["color"]),i(t,{size:"xsmall",color:r.value?"text-dark":"danger"},{default:l(()=>[y(h(m(M).baseText("executionUsage.label.executions")),1)]),_:1},8,["color"])],2)],2)),d("div",{class:a(o.$style.upgradeButtonSection)},[i(S,{label:m(M).baseText("executionUsage.button.upgrade"),size:"xmini",icon:"gem",type:"success",block:!0,onClick:R},null,8,["label"])],2)],2)}}}),ke="_container_itrcs_5",Ee="_progressBarDiv_itrcs_13",xe="_progressBar_itrcs_13",$e="_progressBarSuccess_itrcs_42",Me="_progressBarDanger_itrcs_52",Re="_usageText_itrcs_61",Ne="_usageCounter_itrcs_68",Ue="_danger_itrcs_77",Ae="_executionsCountSection_itrcs_81",De="_upgradeButtonSection_itrcs_85",Le={container:ke,progressBarDiv:Ee,progressBar:xe,progressBarSuccess:$e,progressBarDanger:Me,usageText:Re,usageCounter:Ne,danger:Ue,executionsCountSection:Ae,upgradeButtonSection:De},Ie={$style:Le},Oe=A(we,[["__cssModules",Ie]]),Pe=O({__name:"MainSidebarSourceControl",props:{isCollapsed:{type:Boolean}},setup(e){const s={CONFLICT:409};ee();const n=ie(),C=I(),c=B(),g=W(),r=z(),x=q(),$=se(300),k=w(()=>c.preferences.branchName),R=w(()=>c.isEnterpriseSourceControlEnabled&&L(["rbac"],{rbac:{scope:"sourceControl:manage"}}));async function o(){n.startLoading(),n.setLoadingText(r.baseText("settings.sourceControl.loading.checkingForChanges"));try{const t=await c.getAggregatedStatus();C.openModalWithData({name:V,data:{eventBus:x,status:t}})}catch(t){g.showError(t,r.baseText("error"))}finally{n.stopLoading(),n.setLoadingText(r.baseText("genericHelpers.loading"))}}async function f(){n.startLoading(),n.setLoadingText(r.baseText("settings.sourceControl.loading.pull"));try{const t=await c.pullWorkfolder(!1)||[];if(t.filter(S=>!(S.type==="workflow"&&S.status==="created"&&S.location==="local")).length===0)g.showMessage({title:r.baseText("settings.sourceControl.pull.upToDate.title"),message:r.baseText("settings.sourceControl.pull.upToDate.description"),type:"success"});else{g.showMessage({title:r.baseText("settings.sourceControl.pull.success.title"),type:"success"});const S=["variables","credential"];(t||[]).some(v=>S.includes(v.type))&&oe(()=>{g.showMessage({message:r.baseText("settings.sourceControl.pull.oneLastStep.description"),title:r.baseText("settings.sourceControl.pull.oneLastStep.title"),type:"info",duration:0,showClose:!0,offset:0})})}re.emit("pull")}catch(t){const _=t.response;(_==null?void 0:_.status)===s.CONFLICT?C.openModalWithData({name:H,data:{eventBus:x,status:_.data.data}}):g.showError(t,"Error")}finally{n.stopLoading(),n.setLoadingText(r.baseText("genericHelpers.loading"))}}return(t,_)=>{const S=p("n8n-icon"),N=p("n8n-button"),v=p("n8n-tooltip");return R.value?(b(),T("div",{key:0,class:a({[t.$style.sync]:!0,[t.$style.collapsed]:t.isCollapsed,[t.$style.isConnected]:m(c).isEnterpriseSourceControlEnabled}),style:te({borderLeftColor:m(c).preferences.branchColor}),"data-test-id":"main-sidebar-source-control"},[m(c).preferences.connected&&m(c).preferences.branchName?(b(),T("div",{key:0,class:a(t.$style.connected),"data-test-id":"main-sidebar-source-control-connected"},[d("span",{class:a(t.$style.branchName)},[i(S,{icon:"code-branch"}),y(" "+h(k.value),1)],2),d("div",{class:a({"pt-xs":!t.isCollapsed})},[i(v,{disabled:!t.isCollapsed,"show-after":$.value,placement:"right"},{content:l(()=>[d("div",null,h(m(r).baseText("settings.sourceControl.button.pull")),1)]),default:l(()=>[i(N,{class:a({"mr-2xs":!t.isCollapsed,"mb-2xs":t.isCollapsed&&!m(c).preferences.branchReadOnly}),icon:"arrow-down",type:"tertiary",size:"mini",square:t.isCollapsed,label:t.isCollapsed?"":m(r).baseText("settings.sourceControl.button.pull"),onClick:f},null,8,["class","square","label"])]),_:1},8,["disabled","show-after"]),m(c).preferences.branchReadOnly?E("",!0):(b(),U(v,{key:0,disabled:!t.isCollapsed,"show-after":$.value,placement:"right"},{content:l(()=>[d("div",null,h(m(r).baseText("settings.sourceControl.button.push")),1)]),default:l(()=>[i(N,{square:t.isCollapsed,label:t.isCollapsed?"":m(r).baseText("settings.sourceControl.button.push"),icon:"arrow-up",type:"tertiary",size:"mini",onClick:o},null,8,["square","label"])]),_:1},8,["disabled","show-after"]))],2)],2)):E("",!0)],6)):E("",!0)}}}),Be="_sync_1bnfs_5",We="_isConnected_1bnfs_12",ze="_collapsed_1bnfs_16",Ve="_branchName_1bnfs_26",He="_connected_1bnfs_36",qe={sync:Be,isConnected:We,collapsed:ze,branchName:Ve,connected:He},Fe={$style:qe},Ge=A(Pe,[["__cssModules",Fe]]),je=O({name:"MainSidebar",components:{GiftNotificationIcon:Ce,ExecutionsUsage:Oe,MainSidebarSourceControl:Ge},mixins:[le,ce,P,ue,de],setup(e,s){var C,c;return{externalHooks:Z(),...pe(),...(c=(C=P).setup)==null?void 0:c.call(C,e,s)}},data(){return{basePath:"",fullyExpanded:!1}},computed:{...me(Y,Q,I,K,j,G,F,B),logoPath(){return this.isCollapsed?this.basePath+"n8n-logo-collapsed.svg":this.basePath+this.uiStore.logo},hasVersionUpdates(){return this.settingsStore.settings.releaseChannel==="stable"&&this.versionsStore.hasVersionUpdates},nextVersions(){return this.versionsStore.nextVersions},isCollapsed(){return this.uiStore.sidebarMenuCollapsed},canUserAccessSettings(){return this.findFirstAccessibleSettingsRoute()!==null},showUserArea(){return L(["authenticated"])},workflowExecution(){return this.workflowsStore.getWorkflowExecution},userMenuItems(){return[{id:"settings",label:this.$locale.baseText("settings")},{id:"logout",label:this.$locale.baseText("auth.signout")}]},mainMenuItems(){var c;const e=[],s=this.uiStore.sidebarMenuItems,n={id:"workflows",icon:"network-wired",label:this.$locale.baseText("mainSidebar.workflows"),position:"top",activateOnRouteNames:[u.WORKFLOWS]};if(this.sourceControlStore.preferences.branchReadOnly&&(n.secondaryIcon={name:"lock",tooltip:{content:this.$locale.baseText("mainSidebar.workflows.readOnlyEnv.tooltip")}}),s&&s.length>0)for(const g of s)e.push({id:g.id,icon:g.icon||"",label:g.label||"",position:g.position,type:(c=g.properties)!=null&&c.href?"link":"regular",properties:g.properties});const C=[n,{id:"templates",icon:"box-open",label:this.$locale.baseText("mainSidebar.templates"),position:"top",available:this.settingsStore.isTemplatesEnabled,activateOnRouteNames:[u.TEMPLATES]},{id:"credentials",icon:"key",label:this.$locale.baseText("mainSidebar.credentials"),customIconSize:"medium",position:"top",activateOnRouteNames:[u.CREDENTIALS]},{id:"variables",icon:"variable",label:this.$locale.baseText("mainSidebar.variables"),customIconSize:"medium",position:"top",activateOnRouteNames:[u.VARIABLES]},{id:"executions",icon:"tasks",label:this.$locale.baseText("mainSidebar.executions"),position:"top",activateOnRouteNames:[u.EXECUTIONS]},{id:"cloud-admin",type:"link",position:"bottom",label:"Admin Panel",icon:"home",available:this.settingsStore.isCloudDeployment&&L(["instanceOwner"])},{id:"settings",icon:"cog",label:this.$locale.baseText("settings"),position:"bottom",available:this.canUserAccessSettings&&this.usersStore.currentUser!==null,activateOnRouteNames:[u.USERS_SETTINGS,u.API_SETTINGS,u.PERSONAL_SETTINGS]},{id:"help",icon:"question",label:"Help",position:"bottom",children:[{id:"quickstart",icon:"video",label:this.$locale.baseText("mainSidebar.helpMenuItems.quickstart"),type:"link",properties:{href:"https://www.youtube.com/watch?v=1MwSoB0gnM4",newWindow:!0}},{id:"docs",icon:"book",label:this.$locale.baseText("mainSidebar.helpMenuItems.documentation"),type:"link",properties:{href:"https://docs.n8n.io?utm_source=n8n_app&utm_medium=app_sidebar",newWindow:!0}},{id:"forum",icon:"users",label:this.$locale.baseText("mainSidebar.helpMenuItems.forum"),type:"link",properties:{href:"https://community.n8n.io?utm_source=n8n_app&utm_medium=app_sidebar",newWindow:!0}},{id:"examples",icon:"graduation-cap",label:this.$locale.baseText("mainSidebar.helpMenuItems.course"),type:"link",properties:{href:"https://www.youtube.com/watch?v=1MwSoB0gnM4",newWindow:!0}},{id:"about",icon:"info",label:this.$locale.baseText("mainSidebar.aboutN8n"),position:"bottom"}]}];return[...e,...C]},userIsTrialing(){return this.cloudPlanStore.userIsTrialing},currentPlanAndUsageData(){const e=this.cloudPlanStore.currentPlanData,s=this.cloudPlanStore.currentUsageData;return!e||!s?null:{...e,usage:s}}},async mounted(){this.basePath=this.rootStore.baseUrl,this.$refs.user&&this.externalHooks.run("mainSidebar.mounted",{userRef:this.$refs.user}),this.$nextTick(()=>{window.innerWidth<900||this.uiStore.isNodeView?this.uiStore.sidebarMenuCollapsed=!0:this.uiStore.sidebarMenuCollapsed=!1,this.fullyExpanded=!this.isCollapsed})},created(){window.addEventListener("resize",this.onResize)},beforeUnmount(){window.removeEventListener("resize",this.onResize)},methods:{trackHelpItemClick(e){this.$telemetry.track("User clicked help resource",{type:e,workflow_id:this.workflowsStore.workflowId})},async onUserActionToggle(e){switch(e){case"logout":this.onLogout();break;case"settings":this.$router.push({name:u.PERSONAL_SETTINGS});break}},onLogout(){this.$router.push({name:u.SIGNOUT})},toggleCollapse(){this.uiStore.toggleSidebarMenuCollapse(),this.isCollapsed?this.fullyExpanded=!this.isCollapsed:setTimeout(()=>{this.fullyExpanded=!this.isCollapsed},300)},openUpdatesPanel(){this.uiStore.openModal(X)},async handleSelect(e){switch(e){case"workflows":{this.$router.currentRoute.name!==u.WORKFLOWS&&this.goToRoute({name:u.WORKFLOWS});break}case"templates":{this.$router.currentRoute.name!==u.TEMPLATES&&this.goToRoute({name:u.TEMPLATES});break}case"credentials":{this.$router.currentRoute.name!==u.CREDENTIALS&&this.goToRoute({name:u.CREDENTIALS});break}case"variables":{this.$router.currentRoute.name!==u.VARIABLES&&this.goToRoute({name:u.VARIABLES});break}case"executions":{this.$router.currentRoute.name!==u.EXECUTIONS&&this.goToRoute({name:u.EXECUTIONS});break}case"settings":{const s=this.findFirstAccessibleSettingsRoute();if(s){const n=this.$router.resolve({name:s});this.$router.currentRoute.name!==s&&this.goToRoute(n.path)}break}case"about":{this.trackHelpItemClick("about"),this.uiStore.openModal(J);break}case"cloud-admin":{this.cloudPlanStore.redirectToDashboard();break}case"quickstart":case"docs":case"forum":case"examples":{this.trackHelpItemClick(e);break}}},goToRoute(e){this.$router.push(e).catch(s=>{console.log(s),ne(s)||console.error(s)})},findFirstAccessibleSettingsRoute(){const e=this.$router.getRoutes().find(n=>n.path==="/settings").children.map(n=>n.name||"");let s=null;for(const n of e)if(this.canUserAccessRouteByName(n)){s=n;break}return s},onResize(e){this.callDebounced("onResizeEnd",{debounceTime:100},e)},async onResizeEnd(e){const s=e.target.outerWidth;await this.checkWidthAndAdjustSidebar(s)},async checkWidthAndAdjustSidebar(e){e<900&&(this.uiStore.sidebarMenuCollapsed=!0,await this.$nextTick(),this.fullyExpanded=!this.isCollapsed)}}}),Ke="_sideMenu_q79od_5",Qe="_logo_q79od_12",Ye="_sideMenuCollapsed_q79od_23",Xe="_sideMenuCollapseButton_q79od_30",Je="_updates_q79od_49",Ze="_expanded_q79od_62",es="_userArea_q79od_69",ss="_userName_q79od_76",ts="_userActions_q79od_90",os={sideMenu:Ke,logo:Qe,sideMenuCollapsed:Ye,sideMenuCollapseButton:Xe,updates:Je,expanded:Ze,userArea:es,userName:ss,userActions:ts},ns=["src"],as={class:"ml-3xs","data-test-id":"main-sidebar-user-menu"};function is(e,s,n,C,c,g){const r=p("n8n-icon"),x=p("ExecutionsUsage"),$=p("GiftNotificationIcon"),k=p("n8n-text"),R=p("MainSidebarSourceControl"),o=p("n8n-avatar"),f=p("el-dropdown-item"),t=p("el-dropdown-menu"),_=p("el-dropdown"),S=p("n8n-action-dropdown"),N=p("n8n-menu");return b(),T("div",{id:"side-menu",class:a({"side-menu":!0,[e.$style.sideMenu]:!0,[e.$style.sideMenuCollapsed]:e.isCollapsed})},[d("div",{id:"collapse-change-button",class:a(["clickable",e.$style.sideMenuCollapseButton]),onClick:s[0]||(s[0]=(...v)=>e.toggleCollapse&&e.toggleCollapse(...v))},[e.isCollapsed?(b(),U(r,{key:0,icon:"chevron-right",size:"xsmall",class:"ml-5xs"})):(b(),U(r,{key:1,icon:"chevron-left",size:"xsmall",class:"mr-5xs"}))],2),i(N,{items:e.mainMenuItems,collapsed:e.isCollapsed,onSelect:e.handleSelect},ae({header:l(()=>[d("div",{class:a(e.$style.logo)},[d("img",{src:e.logoPath,"data-test-id":"n8n-logo",class:a(e.$style.icon),alt:"n8n"},null,10,ns)],2)]),beforeLowerMenu:l(()=>[e.fullyExpanded&&e.userIsTrialing?(b(),U(x,{key:0,"cloud-plan-data":e.currentPlanAndUsageData},null,8,["cloud-plan-data"])):E("",!0)]),menuSuffix:l(()=>[d("div",null,[e.hasVersionUpdates?(b(),T("div",{key:0,"data-test-id":"version-updates-panel-button",class:a(e.$style.updates),onClick:s[1]||(s[1]=(...v)=>e.openUpdatesPanel&&e.openUpdatesPanel(...v))},[d("div",{class:a(e.$style.giftContainer)},[i($)],2),i(k,{class:a({"ml-xs":!0,[e.$style.expanded]:e.fullyExpanded}),color:"text-base"},{default:l(()=>[y(h(e.nextVersions.length>99?"99+":e.nextVersions.length)+" update"+h(e.nextVersions.length>1?"s":""),1)]),_:1},8,["class"])],2)):E("",!0),i(R,{"is-collapsed":e.isCollapsed},null,8,["is-collapsed"])])]),_:2},[e.showUserArea?{name:"footer",fn:l(()=>[d("div",{class:a(e.$style.userArea)},[d("div",as,[i(_,{disabled:!e.isCollapsed,placement:"right-end",trigger:"click",onCommand:e.onUserActionToggle},{dropdown:l(()=>[i(t,null,{default:l(()=>[i(f,{command:"settings"},{default:l(()=>[y(h(e.$locale.baseText("settings")),1)]),_:1}),i(f,{command:"logout"},{default:l(()=>[y(h(e.$locale.baseText("auth.signout")),1)]),_:1})]),_:1})]),default:l(()=>[d("div",{class:a({[e.$style.avatar]:!0,clickable:e.isCollapsed})},[i(o,{firstName:e.usersStore.currentUser.firstName,lastName:e.usersStore.currentUser.lastName,size:"small"},null,8,["firstName","lastName"])],2)]),_:1},8,["disabled","onCommand"])]),d("div",{class:a({"ml-2xs":!0,[e.$style.userName]:!0,[e.$style.expanded]:e.fullyExpanded})},[i(k,{size:"small",bold:!0,color:"text-dark"},{default:l(()=>[y(h(e.usersStore.currentUser.fullName),1)]),_:1})],2),d("div",{class:a({[e.$style.userActions]:!0,[e.$style.expanded]:e.fullyExpanded})},[i(S,{items:e.userMenuItems,placement:"top-start","data-test-id":"user-menu",onSelect:e.onUserActionToggle},null,8,["items","onSelect"])],2)],2)]),key:"0"}:void 0]),1032,["items","collapsed","onSelect"])],2)}const rs={$style:os},Is=A(je,[["render",is],["__cssModules",rs]]);export{Is as default};
|
|
2
|
-
//# sourceMappingURL=MainSidebar-
|
|
1
|
+
import{_ as A,k as M,u as I,o as W,n as L,M as z,dz as V,dA as H,s as q,l as F,B as G,cQ as j,p as K,t as Q,v as Y,V as u,cP as X,A as J,ab as Z}from"./n8n-ZKR6bms9.js";import{ag as p,l as b,m as T,T as i,p as d,I as a,G as O,e as w,O as l,Q as E,u as m,S as y,R as h,aH as ee,r as se,M as U,J as te,n as oe,aE as ne,a9 as ae}from"./vendor-2CfOYFi2.js";import{e as ie,b as B,s as re,g as le,w as ce,f as P,h as ue,d as de,a as pe}from"./index-RXjMHIPR.js";import{m as me}from"./pinia-jX93eZRS.js";import{D}from"./luxon-ZRIU05qF.js";import"./lodash-es-s_m9YyW7.js";import"./axios-QLjAsgXu.js";import"./flatted-jPn12Tq4.js";import"./esprima-next-ulPLCZ1Z.js";import"./@vueuse/core-viEZCtbZ.js";import"./uuid-McvpxQtQ.js";import"./vue-i18n-2T2QU_2c.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-QL7QI0sV.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-RhDdw38P.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const ge="_notification_j2u1w_12",he={"gift-icon":"_gift-icon_j2u1w_5",notification:ge},be={},fe=d("div",null,null,-1),_e=[fe];function Se(e,s){const n=p("font-awesome-icon");return b(),T("div",{class:a(e.$style["gift-icon"])},[i(n,{icon:"gift"}),d("div",{class:a(e.$style.notification)},_e,2)],2)}const ye={$style:he},Ce=A(be,[["render",Se],["__cssModules",ye]]),Te=["value","max"],ve=8,we=O({__name:"ExecutionsUsage",props:{cloudPlanData:{}},setup(e){const s=e,n=D.utc(),C=w(()=>{const{days:o=0}=g().diff(n,["days"]).toObject();return Math.ceil(o)}),c=w(()=>{var f;if(!((f=s.cloudPlanData)!=null&&f.expirationDate))return!1;const o=D.fromISO(s.cloudPlanData.expirationDate);return n.toMillis()>o.toMillis()}),g=()=>{var o;return D.fromISO(((o=s==null?void 0:s.cloudPlanData)==null?void 0:o.expirationDate)??"")},r=w(()=>{var o;return(o=s.cloudPlanData)!=null&&o.usage?s.cloudPlanData.usage.executions<s.cloudPlanData.monthlyExecutionsLimit:0}),x=w(()=>{var t;if(!((t=s.cloudPlanData)!=null&&t.usage))return 0;const o=s.cloudPlanData.usage.executions,f=s.cloudPlanData.monthlyExecutionsLimit;return o>f?f:o}),$=w(()=>{var _;if(!((_=s.cloudPlanData)!=null&&_.usage))return 0;const o=s.cloudPlanData.usage.executions,f=s.cloudPlanData.monthlyExecutionsLimit,t=ve*f/100;return o<t?t:o}),k=w(()=>{var o;return(o=s.cloudPlanData)!=null&&o.monthlyExecutionsLimit?s.cloudPlanData.monthlyExecutionsLimit:0}),R=()=>{I().goToUpgrade("canvas-nav","upgrade-canvas-nav","redirect")};return(o,f)=>{const t=p("n8n-text"),_=p("i18n-t"),S=p("n8n-button");return b(),T("div",{class:a(o.$style.container)},[c.value?(b(),T("div",{key:0,class:a(o.$style.usageText)},[i(t,{size:"small",color:"danger"},{default:l(()=>[y(h(m(M).baseText("executionUsage.expired.text")),1)]),_:1})],2)):!c.value&&r.value?(b(),T("div",{key:1,class:a(o.$style.usageText)},[i(_,{tag:"span",keypath:"executionUsage.currentUsage"},{text:l(()=>[i(t,{size:"small",color:"text-dark"},{default:l(()=>[y(h(m(M).baseText("executionUsage.currentUsage.text")),1)]),_:1})]),count:l(()=>[i(t,{size:"small",bold:!0,color:"warning"},{default:l(()=>[y(h(m(M).baseText("executionUsage.currentUsage.count",{adjustToNumber:C.value||0})),1)]),_:1})]),_:1})],2)):r.value?E("",!0):(b(),T("div",{key:2,class:a(o.$style.usageText)},[i(t,{size:"small"},{default:l(()=>[y(h(m(M).baseText("executionUsage.ranOutOfExecutions.text")),1)]),_:1})],2)),c.value?E("",!0):(b(),T("div",{key:3,class:a(o.$style.usageCounter)},[d("div",{class:a(o.$style.progressBarDiv)},[d("progress",{class:a([r.value?o.$style.progressBarSuccess:o.$style.progressBarDanger,o.$style.progressBar]),value:$.value,max:k.value},null,10,Te)],2),d("div",{class:a(o.$style.executionsCountSection)},[i(t,{size:"xsmall",color:r.value?"text-dark":"danger"},{default:l(()=>[y(h(x.value)+"/"+h(k.value),1)]),_:1},8,["color"]),i(t,{size:"xsmall",color:r.value?"text-dark":"danger"},{default:l(()=>[y(h(m(M).baseText("executionUsage.label.executions")),1)]),_:1},8,["color"])],2)],2)),d("div",{class:a(o.$style.upgradeButtonSection)},[i(S,{label:m(M).baseText("executionUsage.button.upgrade"),size:"xmini",icon:"gem",type:"success",block:!0,onClick:R},null,8,["label"])],2)],2)}}}),ke="_container_itrcs_5",Ee="_progressBarDiv_itrcs_13",xe="_progressBar_itrcs_13",$e="_progressBarSuccess_itrcs_42",Me="_progressBarDanger_itrcs_52",Re="_usageText_itrcs_61",Ne="_usageCounter_itrcs_68",Ue="_danger_itrcs_77",Ae="_executionsCountSection_itrcs_81",De="_upgradeButtonSection_itrcs_85",Le={container:ke,progressBarDiv:Ee,progressBar:xe,progressBarSuccess:$e,progressBarDanger:Me,usageText:Re,usageCounter:Ne,danger:Ue,executionsCountSection:Ae,upgradeButtonSection:De},Ie={$style:Le},Oe=A(we,[["__cssModules",Ie]]),Pe=O({__name:"MainSidebarSourceControl",props:{isCollapsed:{type:Boolean}},setup(e){const s={CONFLICT:409};ee();const n=ie(),C=I(),c=B(),g=W(),r=z(),x=q(),$=se(300),k=w(()=>c.preferences.branchName),R=w(()=>c.isEnterpriseSourceControlEnabled&&L(["rbac"],{rbac:{scope:"sourceControl:manage"}}));async function o(){n.startLoading(),n.setLoadingText(r.baseText("settings.sourceControl.loading.checkingForChanges"));try{const t=await c.getAggregatedStatus();C.openModalWithData({name:V,data:{eventBus:x,status:t}})}catch(t){g.showError(t,r.baseText("error"))}finally{n.stopLoading(),n.setLoadingText(r.baseText("genericHelpers.loading"))}}async function f(){n.startLoading(),n.setLoadingText(r.baseText("settings.sourceControl.loading.pull"));try{const t=await c.pullWorkfolder(!1)||[];if(t.filter(S=>!(S.type==="workflow"&&S.status==="created"&&S.location==="local")).length===0)g.showMessage({title:r.baseText("settings.sourceControl.pull.upToDate.title"),message:r.baseText("settings.sourceControl.pull.upToDate.description"),type:"success"});else{g.showMessage({title:r.baseText("settings.sourceControl.pull.success.title"),type:"success"});const S=["variables","credential"];(t||[]).some(v=>S.includes(v.type))&&oe(()=>{g.showMessage({message:r.baseText("settings.sourceControl.pull.oneLastStep.description"),title:r.baseText("settings.sourceControl.pull.oneLastStep.title"),type:"info",duration:0,showClose:!0,offset:0})})}re.emit("pull")}catch(t){const _=t.response;(_==null?void 0:_.status)===s.CONFLICT?C.openModalWithData({name:H,data:{eventBus:x,status:_.data.data}}):g.showError(t,"Error")}finally{n.stopLoading(),n.setLoadingText(r.baseText("genericHelpers.loading"))}}return(t,_)=>{const S=p("n8n-icon"),N=p("n8n-button"),v=p("n8n-tooltip");return R.value?(b(),T("div",{key:0,class:a({[t.$style.sync]:!0,[t.$style.collapsed]:t.isCollapsed,[t.$style.isConnected]:m(c).isEnterpriseSourceControlEnabled}),style:te({borderLeftColor:m(c).preferences.branchColor}),"data-test-id":"main-sidebar-source-control"},[m(c).preferences.connected&&m(c).preferences.branchName?(b(),T("div",{key:0,class:a(t.$style.connected),"data-test-id":"main-sidebar-source-control-connected"},[d("span",{class:a(t.$style.branchName)},[i(S,{icon:"code-branch"}),y(" "+h(k.value),1)],2),d("div",{class:a({"pt-xs":!t.isCollapsed})},[i(v,{disabled:!t.isCollapsed,"show-after":$.value,placement:"right"},{content:l(()=>[d("div",null,h(m(r).baseText("settings.sourceControl.button.pull")),1)]),default:l(()=>[i(N,{class:a({"mr-2xs":!t.isCollapsed,"mb-2xs":t.isCollapsed&&!m(c).preferences.branchReadOnly}),icon:"arrow-down",type:"tertiary",size:"mini",square:t.isCollapsed,label:t.isCollapsed?"":m(r).baseText("settings.sourceControl.button.pull"),onClick:f},null,8,["class","square","label"])]),_:1},8,["disabled","show-after"]),m(c).preferences.branchReadOnly?E("",!0):(b(),U(v,{key:0,disabled:!t.isCollapsed,"show-after":$.value,placement:"right"},{content:l(()=>[d("div",null,h(m(r).baseText("settings.sourceControl.button.push")),1)]),default:l(()=>[i(N,{square:t.isCollapsed,label:t.isCollapsed?"":m(r).baseText("settings.sourceControl.button.push"),icon:"arrow-up",type:"tertiary",size:"mini",onClick:o},null,8,["square","label"])]),_:1},8,["disabled","show-after"]))],2)],2)):E("",!0)],6)):E("",!0)}}}),Be="_sync_1bnfs_5",We="_isConnected_1bnfs_12",ze="_collapsed_1bnfs_16",Ve="_branchName_1bnfs_26",He="_connected_1bnfs_36",qe={sync:Be,isConnected:We,collapsed:ze,branchName:Ve,connected:He},Fe={$style:qe},Ge=A(Pe,[["__cssModules",Fe]]),je=O({name:"MainSidebar",components:{GiftNotificationIcon:Ce,ExecutionsUsage:Oe,MainSidebarSourceControl:Ge},mixins:[le,ce,P,ue,de],setup(e,s){var C,c;return{externalHooks:Z(),...pe(),...(c=(C=P).setup)==null?void 0:c.call(C,e,s)}},data(){return{basePath:"",fullyExpanded:!1}},computed:{...me(Y,Q,I,K,j,G,F,B),logoPath(){return this.isCollapsed?this.basePath+"n8n-logo-collapsed.svg":this.basePath+this.uiStore.logo},hasVersionUpdates(){return this.settingsStore.settings.releaseChannel==="stable"&&this.versionsStore.hasVersionUpdates},nextVersions(){return this.versionsStore.nextVersions},isCollapsed(){return this.uiStore.sidebarMenuCollapsed},canUserAccessSettings(){return this.findFirstAccessibleSettingsRoute()!==null},showUserArea(){return L(["authenticated"])},workflowExecution(){return this.workflowsStore.getWorkflowExecution},userMenuItems(){return[{id:"settings",label:this.$locale.baseText("settings")},{id:"logout",label:this.$locale.baseText("auth.signout")}]},mainMenuItems(){var c;const e=[],s=this.uiStore.sidebarMenuItems,n={id:"workflows",icon:"network-wired",label:this.$locale.baseText("mainSidebar.workflows"),position:"top",activateOnRouteNames:[u.WORKFLOWS]};if(this.sourceControlStore.preferences.branchReadOnly&&(n.secondaryIcon={name:"lock",tooltip:{content:this.$locale.baseText("mainSidebar.workflows.readOnlyEnv.tooltip")}}),s&&s.length>0)for(const g of s)e.push({id:g.id,icon:g.icon||"",label:g.label||"",position:g.position,type:(c=g.properties)!=null&&c.href?"link":"regular",properties:g.properties});const C=[n,{id:"templates",icon:"box-open",label:this.$locale.baseText("mainSidebar.templates"),position:"top",available:this.settingsStore.isTemplatesEnabled,activateOnRouteNames:[u.TEMPLATES]},{id:"credentials",icon:"key",label:this.$locale.baseText("mainSidebar.credentials"),customIconSize:"medium",position:"top",activateOnRouteNames:[u.CREDENTIALS]},{id:"variables",icon:"variable",label:this.$locale.baseText("mainSidebar.variables"),customIconSize:"medium",position:"top",activateOnRouteNames:[u.VARIABLES]},{id:"executions",icon:"tasks",label:this.$locale.baseText("mainSidebar.executions"),position:"top",activateOnRouteNames:[u.EXECUTIONS]},{id:"cloud-admin",type:"link",position:"bottom",label:"Admin Panel",icon:"home",available:this.settingsStore.isCloudDeployment&&L(["instanceOwner"])},{id:"settings",icon:"cog",label:this.$locale.baseText("settings"),position:"bottom",available:this.canUserAccessSettings&&this.usersStore.currentUser!==null,activateOnRouteNames:[u.USERS_SETTINGS,u.API_SETTINGS,u.PERSONAL_SETTINGS]},{id:"help",icon:"question",label:"Help",position:"bottom",children:[{id:"quickstart",icon:"video",label:this.$locale.baseText("mainSidebar.helpMenuItems.quickstart"),type:"link",properties:{href:"https://www.youtube.com/watch?v=1MwSoB0gnM4",newWindow:!0}},{id:"docs",icon:"book",label:this.$locale.baseText("mainSidebar.helpMenuItems.documentation"),type:"link",properties:{href:"https://docs.n8n.io?utm_source=n8n_app&utm_medium=app_sidebar",newWindow:!0}},{id:"forum",icon:"users",label:this.$locale.baseText("mainSidebar.helpMenuItems.forum"),type:"link",properties:{href:"https://community.n8n.io?utm_source=n8n_app&utm_medium=app_sidebar",newWindow:!0}},{id:"examples",icon:"graduation-cap",label:this.$locale.baseText("mainSidebar.helpMenuItems.course"),type:"link",properties:{href:"https://www.youtube.com/watch?v=1MwSoB0gnM4",newWindow:!0}},{id:"about",icon:"info",label:this.$locale.baseText("mainSidebar.aboutN8n"),position:"bottom"}]}];return[...e,...C]},userIsTrialing(){return this.cloudPlanStore.userIsTrialing},currentPlanAndUsageData(){const e=this.cloudPlanStore.currentPlanData,s=this.cloudPlanStore.currentUsageData;return!e||!s?null:{...e,usage:s}}},async mounted(){this.basePath=this.rootStore.baseUrl,this.$refs.user&&this.externalHooks.run("mainSidebar.mounted",{userRef:this.$refs.user}),this.$nextTick(()=>{window.innerWidth<900||this.uiStore.isNodeView?this.uiStore.sidebarMenuCollapsed=!0:this.uiStore.sidebarMenuCollapsed=!1,this.fullyExpanded=!this.isCollapsed})},created(){window.addEventListener("resize",this.onResize)},beforeUnmount(){window.removeEventListener("resize",this.onResize)},methods:{trackHelpItemClick(e){this.$telemetry.track("User clicked help resource",{type:e,workflow_id:this.workflowsStore.workflowId})},async onUserActionToggle(e){switch(e){case"logout":this.onLogout();break;case"settings":this.$router.push({name:u.PERSONAL_SETTINGS});break}},onLogout(){this.$router.push({name:u.SIGNOUT})},toggleCollapse(){this.uiStore.toggleSidebarMenuCollapse(),this.isCollapsed?this.fullyExpanded=!this.isCollapsed:setTimeout(()=>{this.fullyExpanded=!this.isCollapsed},300)},openUpdatesPanel(){this.uiStore.openModal(X)},async handleSelect(e){switch(e){case"workflows":{this.$router.currentRoute.name!==u.WORKFLOWS&&this.goToRoute({name:u.WORKFLOWS});break}case"templates":{this.$router.currentRoute.name!==u.TEMPLATES&&this.goToRoute({name:u.TEMPLATES});break}case"credentials":{this.$router.currentRoute.name!==u.CREDENTIALS&&this.goToRoute({name:u.CREDENTIALS});break}case"variables":{this.$router.currentRoute.name!==u.VARIABLES&&this.goToRoute({name:u.VARIABLES});break}case"executions":{this.$router.currentRoute.name!==u.EXECUTIONS&&this.goToRoute({name:u.EXECUTIONS});break}case"settings":{const s=this.findFirstAccessibleSettingsRoute();if(s){const n=this.$router.resolve({name:s});this.$router.currentRoute.name!==s&&this.goToRoute(n.path)}break}case"about":{this.trackHelpItemClick("about"),this.uiStore.openModal(J);break}case"cloud-admin":{this.cloudPlanStore.redirectToDashboard();break}case"quickstart":case"docs":case"forum":case"examples":{this.trackHelpItemClick(e);break}}},goToRoute(e){this.$router.push(e).catch(s=>{console.log(s),ne(s)||console.error(s)})},findFirstAccessibleSettingsRoute(){const e=this.$router.getRoutes().find(n=>n.path==="/settings").children.map(n=>n.name||"");let s=null;for(const n of e)if(this.canUserAccessRouteByName(n)){s=n;break}return s},onResize(e){this.callDebounced("onResizeEnd",{debounceTime:100},e)},async onResizeEnd(e){const s=e.target.outerWidth;await this.checkWidthAndAdjustSidebar(s)},async checkWidthAndAdjustSidebar(e){e<900&&(this.uiStore.sidebarMenuCollapsed=!0,await this.$nextTick(),this.fullyExpanded=!this.isCollapsed)}}}),Ke="_sideMenu_q79od_5",Qe="_logo_q79od_12",Ye="_sideMenuCollapsed_q79od_23",Xe="_sideMenuCollapseButton_q79od_30",Je="_updates_q79od_49",Ze="_expanded_q79od_62",es="_userArea_q79od_69",ss="_userName_q79od_76",ts="_userActions_q79od_90",os={sideMenu:Ke,logo:Qe,sideMenuCollapsed:Ye,sideMenuCollapseButton:Xe,updates:Je,expanded:Ze,userArea:es,userName:ss,userActions:ts},ns=["src"],as={class:"ml-3xs","data-test-id":"main-sidebar-user-menu"};function is(e,s,n,C,c,g){const r=p("n8n-icon"),x=p("ExecutionsUsage"),$=p("GiftNotificationIcon"),k=p("n8n-text"),R=p("MainSidebarSourceControl"),o=p("n8n-avatar"),f=p("el-dropdown-item"),t=p("el-dropdown-menu"),_=p("el-dropdown"),S=p("n8n-action-dropdown"),N=p("n8n-menu");return b(),T("div",{id:"side-menu",class:a({"side-menu":!0,[e.$style.sideMenu]:!0,[e.$style.sideMenuCollapsed]:e.isCollapsed})},[d("div",{id:"collapse-change-button",class:a(["clickable",e.$style.sideMenuCollapseButton]),onClick:s[0]||(s[0]=(...v)=>e.toggleCollapse&&e.toggleCollapse(...v))},[e.isCollapsed?(b(),U(r,{key:0,icon:"chevron-right",size:"xsmall",class:"ml-5xs"})):(b(),U(r,{key:1,icon:"chevron-left",size:"xsmall",class:"mr-5xs"}))],2),i(N,{items:e.mainMenuItems,collapsed:e.isCollapsed,onSelect:e.handleSelect},ae({header:l(()=>[d("div",{class:a(e.$style.logo)},[d("img",{src:e.logoPath,"data-test-id":"n8n-logo",class:a(e.$style.icon),alt:"n8n"},null,10,ns)],2)]),beforeLowerMenu:l(()=>[e.fullyExpanded&&e.userIsTrialing?(b(),U(x,{key:0,"cloud-plan-data":e.currentPlanAndUsageData},null,8,["cloud-plan-data"])):E("",!0)]),menuSuffix:l(()=>[d("div",null,[e.hasVersionUpdates?(b(),T("div",{key:0,"data-test-id":"version-updates-panel-button",class:a(e.$style.updates),onClick:s[1]||(s[1]=(...v)=>e.openUpdatesPanel&&e.openUpdatesPanel(...v))},[d("div",{class:a(e.$style.giftContainer)},[i($)],2),i(k,{class:a({"ml-xs":!0,[e.$style.expanded]:e.fullyExpanded}),color:"text-base"},{default:l(()=>[y(h(e.nextVersions.length>99?"99+":e.nextVersions.length)+" update"+h(e.nextVersions.length>1?"s":""),1)]),_:1},8,["class"])],2)):E("",!0),i(R,{"is-collapsed":e.isCollapsed},null,8,["is-collapsed"])])]),_:2},[e.showUserArea?{name:"footer",fn:l(()=>[d("div",{class:a(e.$style.userArea)},[d("div",as,[i(_,{disabled:!e.isCollapsed,placement:"right-end",trigger:"click",onCommand:e.onUserActionToggle},{dropdown:l(()=>[i(t,null,{default:l(()=>[i(f,{command:"settings"},{default:l(()=>[y(h(e.$locale.baseText("settings")),1)]),_:1}),i(f,{command:"logout"},{default:l(()=>[y(h(e.$locale.baseText("auth.signout")),1)]),_:1})]),_:1})]),default:l(()=>[d("div",{class:a({[e.$style.avatar]:!0,clickable:e.isCollapsed})},[i(o,{firstName:e.usersStore.currentUser.firstName,lastName:e.usersStore.currentUser.lastName,size:"small"},null,8,["firstName","lastName"])],2)]),_:1},8,["disabled","onCommand"])]),d("div",{class:a({"ml-2xs":!0,[e.$style.userName]:!0,[e.$style.expanded]:e.fullyExpanded})},[i(k,{size:"small",bold:!0,color:"text-dark"},{default:l(()=>[y(h(e.usersStore.currentUser.fullName),1)]),_:1})],2),d("div",{class:a({[e.$style.userActions]:!0,[e.$style.expanded]:e.fullyExpanded})},[i(S,{items:e.userMenuItems,placement:"top-start","data-test-id":"user-menu",onSelect:e.onUserActionToggle},null,8,["items","onSelect"])],2)],2)]),key:"0"}:void 0]),1032,["items","collapsed","onSelect"])],2)}const rs={$style:os},Is=A(je,[["render",is],["__cssModules",rs]]);export{Is as default};
|
|
2
|
+
//# sourceMappingURL=MainSidebar-nf-k1wHF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainSidebar-dKXNC9E9.js","sources":["../../src/components/GiftNotificationIcon.vue","../../src/components/ExecutionsUsage.vue","../../src/components/MainSidebarSourceControl.vue","../../src/components/MainSidebar.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style['gift-icon']\">\n\t\t<font-awesome-icon icon=\"gift\" />\n\t\t<div :class=\"$style['notification']\">\n\t\t\t<div></div>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.gift-icon {\n\tdisplay: flex;\n\tposition: relative;\n\n\tsvg {\n\t\tmargin-right: 0 !important;\n\t}\n\n\t.notification {\n\t\theight: 0.47em;\n\t\twidth: 0.47em;\n\t\tborder-radius: 50%;\n\t\tcolor: $gift-notification-active-color;\n\t\tposition: absolute;\n\t\tbackground-color: $gift-notification-outer-color;\n\t\tright: -0.3em;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\ttop: -0.148em;\n\n\t\tdiv {\n\t\t\theight: 0.36em;\n\t\t\twidth: 0.36em;\n\t\t\tbackground-color: $gift-notification-inner-color;\n\t\t\tborder-radius: 50%;\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<div v-if=\"isTrialExpired\" :class=\"$style.usageText\">\n\t\t\t<n8n-text size=\"small\" color=\"danger\">\n\t\t\t\t{{ locale.baseText('executionUsage.expired.text') }}\n\t\t\t</n8n-text>\n\t\t</div>\n\t\t<div v-else-if=\"!isTrialExpired && trialHasExecutionsLeft\" :class=\"$style.usageText\">\n\t\t\t<i18n-t tag=\"span\" keypath=\"executionUsage.currentUsage\">\n\t\t\t\t<template #text>\n\t\t\t\t\t<n8n-text size=\"small\" color=\"text-dark\">\n\t\t\t\t\t\t{{ locale.baseText('executionUsage.currentUsage.text') }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</template>\n\t\t\t\t<template #count>\n\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\" color=\"warning\">\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\tlocale.baseText('executionUsage.currentUsage.count', {\n\t\t\t\t\t\t\t\tadjustToNumber: daysLeftOnTrial || 0,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</template>\n\t\t\t</i18n-t>\n\t\t</div>\n\t\t<div v-else-if=\"!trialHasExecutionsLeft\" :class=\"$style.usageText\">\n\t\t\t<n8n-text size=\"small\">\n\t\t\t\t{{ locale.baseText('executionUsage.ranOutOfExecutions.text') }}\n\t\t\t</n8n-text>\n\t\t</div>\n\t\t<div v-if=\"!isTrialExpired\" :class=\"$style.usageCounter\">\n\t\t\t<div :class=\"$style.progressBarDiv\">\n\t\t\t\t<progress\n\t\t\t\t\t:class=\"[\n\t\t\t\t\t\ttrialHasExecutionsLeft ? $style.progressBarSuccess : $style.progressBarDanger,\n\t\t\t\t\t\t$style.progressBar,\n\t\t\t\t\t]\"\n\t\t\t\t\t:value=\"currentExecutionsWithThreshold\"\n\t\t\t\t\t:max=\"maxExecutions\"\n\t\t\t\t></progress>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.executionsCountSection\">\n\t\t\t\t<n8n-text size=\"xsmall\" :color=\"trialHasExecutionsLeft ? 'text-dark' : 'danger'\">\n\t\t\t\t\t{{ currentExecutions }}/{{ maxExecutions }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<n8n-text size=\"xsmall\" :color=\"trialHasExecutionsLeft ? 'text-dark' : 'danger'\">{{\n\t\t\t\t\tlocale.baseText('executionUsage.label.executions')\n\t\t\t\t}}</n8n-text>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div :class=\"$style.upgradeButtonSection\">\n\t\t\t<n8n-button\n\t\t\t\t:label=\"locale.baseText('executionUsage.button.upgrade')\"\n\t\t\t\tsize=\"xmini\"\n\t\t\t\ticon=\"gem\"\n\t\t\t\ttype=\"success\"\n\t\t\t\t:block=\"true\"\n\t\t\t\t@click=\"onUpgradeClicked\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { i18n as locale } from '@/plugins/i18n';\nimport { DateTime } from 'luxon';\nimport type { CloudPlanAndUsageData } from '@/Interface';\nimport { computed } from 'vue';\nimport { useUIStore } from '@/stores/ui.store';\n\nconst PROGRESS_BAR_MINIMUM_THRESHOLD = 8;\n\nconst props = defineProps<{ cloudPlanData: CloudPlanAndUsageData | null }>();\n\nconst now = DateTime.utc();\n\nconst daysLeftOnTrial = computed(() => {\n\tconst { days = 0 } = getPlanExpirationDate().diff(now, ['days']).toObject();\n\treturn Math.ceil(days);\n});\n\nconst isTrialExpired = computed(() => {\n\tif (!props.cloudPlanData?.expirationDate) return false;\n\tconst trialEndsAt = DateTime.fromISO(props.cloudPlanData.expirationDate);\n\treturn now.toMillis() > trialEndsAt.toMillis();\n});\n\nconst getPlanExpirationDate = () => DateTime.fromISO(props?.cloudPlanData?.expirationDate ?? '');\n\nconst trialHasExecutionsLeft = computed(() => {\n\tif (!props.cloudPlanData?.usage) return 0;\n\treturn props.cloudPlanData.usage.executions < props.cloudPlanData.monthlyExecutionsLimit;\n});\n\nconst currentExecutions = computed(() => {\n\tif (!props.cloudPlanData?.usage) return 0;\n\tconst usedExecutions = props.cloudPlanData.usage.executions;\n\tconst executionsQuota = props.cloudPlanData.monthlyExecutionsLimit;\n\treturn usedExecutions > executionsQuota ? executionsQuota : usedExecutions;\n});\n\nconst currentExecutionsWithThreshold = computed(() => {\n\tif (!props.cloudPlanData?.usage) return 0;\n\tconst usedExecutions = props.cloudPlanData.usage.executions;\n\tconst executionsQuota = props.cloudPlanData.monthlyExecutionsLimit;\n\tconst threshold = (PROGRESS_BAR_MINIMUM_THRESHOLD * executionsQuota) / 100;\n\treturn usedExecutions < threshold ? threshold : usedExecutions;\n});\n\nconst maxExecutions = computed(() => {\n\tif (!props.cloudPlanData?.monthlyExecutionsLimit) return 0;\n\treturn props.cloudPlanData.monthlyExecutionsLimit;\n});\n\nconst onUpgradeClicked = () => {\n\tvoid useUIStore().goToUpgrade('canvas-nav', 'upgrade-canvas-nav', 'redirect');\n};\n</script>\n\n<style module lang=\"scss\">\n.container {\n\tdisplay: flex;\n\tflex-direction: column;\n\tbackground-color: var(--color-background-light);\n\tborder: var(--border-base);\n\tborder-right: 0;\n}\n\n.progressBarDiv {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.progressBar {\n\twidth: 62.4px;\n\tborder: 0;\n\theight: 5px;\n\tborder-radius: 20px;\n\tbackground-color: var(--color-foreground-base);\n}\n.progressBar::-webkit-progress-bar {\n\twidth: 62.4px;\n\tborder: 0;\n\theight: 5px;\n\tborder-radius: 20px;\n\tbackground-color: var(--color-foreground-base);\n}\n.progressBar::-moz-progress-bar {\n\twidth: 62.4px;\n\tborder: 0;\n\theight: 5px;\n\tborder-radius: 20px;\n\tbackground-color: var(--color-foreground-base);\n}\n\n.progressBarSuccess::-moz-progress-bar {\n\tbackground: var(--color-foreground-xdark);\n\tborder-radius: 20px;\n}\n\n.progressBarSuccess::-webkit-progress-value {\n\tbackground: var(--color-foreground-xdark);\n\tborder-radius: 20px;\n}\n\n.progressBarDanger::-webkit-progress-value {\n\tbackground: var(--color-danger);\n\tborder-radius: 20px;\n}\n\n.progressBarDanger::-moz-progress-bar {\n\tbackground: var(--color-danger);\n}\n\n.usageText {\n\tmargin-left: var(--spacing-s);\n\tmargin-right: var(--spacing-s);\n\tmargin-top: var(--spacing-xs);\n\tline-height: var(--spacing-xs);\n}\n\n.usageCounter {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-top: var(--spacing-2xs);\n\tfont-size: var(--font-size-3xs);\n}\n\n.danger {\n\tcolor: var(--color-danger);\n}\n\n.executionsCountSection {\n\tmargin-left: var(--spacing-xs);\n}\n\n.upgradeButtonSection {\n\tmargin: var(--spacing-s);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, nextTick, ref } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { createEventBus } from 'n8n-design-system/utils';\nimport { useI18n } from '@/composables/useI18n';\nimport { hasPermission } from '@/rbac/permissions';\nimport { useToast } from '@/composables/useToast';\nimport { useLoadingService } from '@/composables/useLoadingService';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { SOURCE_CONTROL_PULL_MODAL_KEY, SOURCE_CONTROL_PUSH_MODAL_KEY, VIEWS } from '@/constants';\nimport type { SourceControlAggregatedFile } from '../Interface';\nimport { sourceControlEventBus } from '@/event-bus/source-control';\n\nconst props = defineProps<{\n\tisCollapsed: boolean;\n}>();\n\nconst responseStatuses = {\n\tCONFLICT: 409,\n};\n\nconst router = useRouter();\nconst loadingService = useLoadingService();\nconst uiStore = useUIStore();\nconst sourceControlStore = useSourceControlStore();\nconst toast = useToast();\nconst i18n = useI18n();\n\nconst eventBus = createEventBus();\nconst tooltipOpenDelay = ref(300);\n\nconst currentBranch = computed(() => {\n\treturn sourceControlStore.preferences.branchName;\n});\nconst sourceControlAvailable = computed(\n\t() =>\n\t\tsourceControlStore.isEnterpriseSourceControlEnabled &&\n\t\thasPermission(['rbac'], { rbac: { scope: 'sourceControl:manage' } }),\n);\n\nasync function pushWorkfolder() {\n\tloadingService.startLoading();\n\tloadingService.setLoadingText(i18n.baseText('settings.sourceControl.loading.checkingForChanges'));\n\ttry {\n\t\tconst status = await sourceControlStore.getAggregatedStatus();\n\n\t\tuiStore.openModalWithData({\n\t\t\tname: SOURCE_CONTROL_PUSH_MODAL_KEY,\n\t\t\tdata: { eventBus, status },\n\t\t});\n\t} catch (error) {\n\t\ttoast.showError(error, i18n.baseText('error'));\n\t} finally {\n\t\tloadingService.stopLoading();\n\t\tloadingService.setLoadingText(i18n.baseText('genericHelpers.loading'));\n\t}\n}\n\nasync function pullWorkfolder() {\n\tloadingService.startLoading();\n\tloadingService.setLoadingText(i18n.baseText('settings.sourceControl.loading.pull'));\n\n\ttry {\n\t\tconst status: SourceControlAggregatedFile[] =\n\t\t\t((await sourceControlStore.pullWorkfolder(\n\t\t\t\tfalse,\n\t\t\t)) as unknown as SourceControlAggregatedFile[]) || [];\n\n\t\tconst statusWithoutLocallyCreatedWorkflows = status.filter((file) => {\n\t\t\treturn !(file.type === 'workflow' && file.status === 'created' && file.location === 'local');\n\t\t});\n\t\tif (statusWithoutLocallyCreatedWorkflows.length === 0) {\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: i18n.baseText('settings.sourceControl.pull.upToDate.title'),\n\t\t\t\tmessage: i18n.baseText('settings.sourceControl.pull.upToDate.description'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t} else {\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: i18n.baseText('settings.sourceControl.pull.success.title'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\n\t\t\tconst incompleteFileTypes = ['variables', 'credential'];\n\t\t\tconst hasVariablesOrCredentials = (status || []).some((file) => {\n\t\t\t\treturn incompleteFileTypes.includes(file.type);\n\t\t\t});\n\n\t\t\tif (hasVariablesOrCredentials) {\n\t\t\t\tvoid nextTick(() => {\n\t\t\t\t\ttoast.showMessage({\n\t\t\t\t\t\tmessage: i18n.baseText('settings.sourceControl.pull.oneLastStep.description'),\n\t\t\t\t\t\ttitle: i18n.baseText('settings.sourceControl.pull.oneLastStep.title'),\n\t\t\t\t\t\ttype: 'info',\n\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\tshowClose: true,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tsourceControlEventBus.emit('pull');\n\t} catch (error) {\n\t\tconst errorResponse = error.response;\n\n\t\tif (errorResponse?.status === responseStatuses.CONFLICT) {\n\t\t\tuiStore.openModalWithData({\n\t\t\t\tname: SOURCE_CONTROL_PULL_MODAL_KEY,\n\t\t\t\tdata: { eventBus, status: errorResponse.data.data },\n\t\t\t});\n\t\t} else {\n\t\t\ttoast.showError(error, 'Error');\n\t\t}\n\t} finally {\n\t\tloadingService.stopLoading();\n\t\tloadingService.setLoadingText(i18n.baseText('genericHelpers.loading'));\n\t}\n}\n\nconst goToSourceControlSetup = async () => {\n\tawait router.push({ name: VIEWS.SOURCE_CONTROL });\n};\n</script>\n\n<template>\n\t<div\n\t\tv-if=\"sourceControlAvailable\"\n\t\t:class=\"{\n\t\t\t[$style.sync]: true,\n\t\t\t[$style.collapsed]: isCollapsed,\n\t\t\t[$style.isConnected]: sourceControlStore.isEnterpriseSourceControlEnabled,\n\t\t}\"\n\t\t:style=\"{ borderLeftColor: sourceControlStore.preferences.branchColor }\"\n\t\tdata-test-id=\"main-sidebar-source-control\"\n\t>\n\t\t<div\n\t\t\tv-if=\"sourceControlStore.preferences.connected && sourceControlStore.preferences.branchName\"\n\t\t\t:class=\"$style.connected\"\n\t\t\tdata-test-id=\"main-sidebar-source-control-connected\"\n\t\t>\n\t\t\t<span :class=\"$style.branchName\">\n\t\t\t\t<n8n-icon icon=\"code-branch\" />\n\t\t\t\t{{ currentBranch }}\n\t\t\t</span>\n\t\t\t<div :class=\"{ 'pt-xs': !isCollapsed }\">\n\t\t\t\t<n8n-tooltip :disabled=\"!isCollapsed\" :show-after=\"tooltipOpenDelay\" placement=\"right\">\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{{ i18n.baseText('settings.sourceControl.button.pull') }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t'mr-2xs': !isCollapsed,\n\t\t\t\t\t\t\t'mb-2xs': isCollapsed && !sourceControlStore.preferences.branchReadOnly,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\ticon=\"arrow-down\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\tsize=\"mini\"\n\t\t\t\t\t\t:square=\"isCollapsed\"\n\t\t\t\t\t\t:label=\"isCollapsed ? '' : i18n.baseText('settings.sourceControl.button.pull')\"\n\t\t\t\t\t\t@click=\"pullWorkfolder\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-tooltip>\n\t\t\t\t<n8n-tooltip\n\t\t\t\t\tv-if=\"!sourceControlStore.preferences.branchReadOnly\"\n\t\t\t\t\t:disabled=\"!isCollapsed\"\n\t\t\t\t\t:show-after=\"tooltipOpenDelay\"\n\t\t\t\t\tplacement=\"right\"\n\t\t\t\t>\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{{ i18n.baseText('settings.sourceControl.button.push') }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t:square=\"isCollapsed\"\n\t\t\t\t\t\t:label=\"isCollapsed ? '' : i18n.baseText('settings.sourceControl.button.push')\"\n\t\t\t\t\t\ticon=\"arrow-up\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\tsize=\"mini\"\n\t\t\t\t\t\t@click=\"pushWorkfolder\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.sync {\n\tpadding: var(--spacing-s) var(--spacing-s) var(--spacing-s) var(--spacing-l);\n\tmargin: var(--spacing-2xs) 0 calc(var(--spacing-2xs) * -1);\n\tbackground: var(--color-background-light);\n\tborder-top: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\tfont-size: var(--font-size-2xs);\n\n\t&.isConnected {\n\t\tpadding-left: var(--spacing-m);\n\t\tborder-left: var(--spacing-3xs) var(--border-style-base) var(--color-foreground-base);\n\n\t\t&.collapsed {\n\t\t\tpadding-left: var(--spacing-xs);\n\t\t}\n\t}\n\n\t&:empty {\n\t\tdisplay: none;\n\t}\n\n\tbutton {\n\t\tfont-size: var(--font-size-3xs);\n\t}\n}\n\n.branchName {\n\twhite-space: normal;\n\tline-break: anywhere;\n}\n\n.collapsed {\n\ttext-align: center;\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n\n\t.connected {\n\t\t> span {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div\n\t\tid=\"side-menu\"\n\t\t:class=\"{\n\t\t\t['side-menu']: true,\n\t\t\t[$style.sideMenu]: true,\n\t\t\t[$style.sideMenuCollapsed]: isCollapsed,\n\t\t}\"\n\t>\n\t\t<div\n\t\t\tid=\"collapse-change-button\"\n\t\t\t:class=\"['clickable', $style.sideMenuCollapseButton]\"\n\t\t\t@click=\"toggleCollapse\"\n\t\t>\n\t\t\t<n8n-icon v-if=\"isCollapsed\" icon=\"chevron-right\" size=\"xsmall\" class=\"ml-5xs\" />\n\t\t\t<n8n-icon v-else icon=\"chevron-left\" size=\"xsmall\" class=\"mr-5xs\" />\n\t\t</div>\n\t\t<n8n-menu :items=\"mainMenuItems\" :collapsed=\"isCollapsed\" @select=\"handleSelect\">\n\t\t\t<template #header>\n\t\t\t\t<div :class=\"$style.logo\">\n\t\t\t\t\t<img :src=\"logoPath\" data-test-id=\"n8n-logo\" :class=\"$style.icon\" alt=\"n8n\" />\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #beforeLowerMenu>\n\t\t\t\t<ExecutionsUsage\n\t\t\t\t\t:cloud-plan-data=\"currentPlanAndUsageData\"\n\t\t\t\t\tv-if=\"fullyExpanded && userIsTrialing\"\n\t\t\t/></template>\n\t\t\t<template #menuSuffix>\n\t\t\t\t<div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"hasVersionUpdates\"\n\t\t\t\t\t\tdata-test-id=\"version-updates-panel-button\"\n\t\t\t\t\t\t:class=\"$style.updates\"\n\t\t\t\t\t\t@click=\"openUpdatesPanel\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div :class=\"$style.giftContainer\">\n\t\t\t\t\t\t\t<GiftNotificationIcon />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<n8n-text\n\t\t\t\t\t\t\t:class=\"{ ['ml-xs']: true, [$style.expanded]: fullyExpanded }\"\n\t\t\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ nextVersions.length > 99 ? '99+' : nextVersions.length }} update{{\n\t\t\t\t\t\t\t\tnextVersions.length > 1 ? 's' : ''\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<MainSidebarSourceControl :is-collapsed=\"isCollapsed\" />\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template #footer v-if=\"showUserArea\">\n\t\t\t\t<div :class=\"$style.userArea\">\n\t\t\t\t\t<div class=\"ml-3xs\" data-test-id=\"main-sidebar-user-menu\">\n\t\t\t\t\t\t<!-- This dropdown is only enabled when sidebar is collapsed -->\n\t\t\t\t\t\t<el-dropdown\n\t\t\t\t\t\t\t:disabled=\"!isCollapsed\"\n\t\t\t\t\t\t\tplacement=\"right-end\"\n\t\t\t\t\t\t\ttrigger=\"click\"\n\t\t\t\t\t\t\t@command=\"onUserActionToggle\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div :class=\"{ [$style.avatar]: true, ['clickable']: isCollapsed }\">\n\t\t\t\t\t\t\t\t<n8n-avatar\n\t\t\t\t\t\t\t\t\t:firstName=\"usersStore.currentUser.firstName\"\n\t\t\t\t\t\t\t\t\t:lastName=\"usersStore.currentUser.lastName\"\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<template #dropdown>\n\t\t\t\t\t\t\t\t<el-dropdown-menu>\n\t\t\t\t\t\t\t\t\t<el-dropdown-item command=\"settings\">\n\t\t\t\t\t\t\t\t\t\t{{ $locale.baseText('settings') }}\n\t\t\t\t\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t\t\t\t\t<el-dropdown-item command=\"logout\">\n\t\t\t\t\t\t\t\t\t\t{{ $locale.baseText('auth.signout') }}\n\t\t\t\t\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t\t\t\t</el-dropdown-menu>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</el-dropdown>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\t:class=\"{ ['ml-2xs']: true, [$style.userName]: true, [$style.expanded]: fullyExpanded }\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\" color=\"text-dark\">{{\n\t\t\t\t\t\t\tusersStore.currentUser.fullName\n\t\t\t\t\t\t}}</n8n-text>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div :class=\"{ [$style.userActions]: true, [$style.expanded]: fullyExpanded }\">\n\t\t\t\t\t\t<n8n-action-dropdown\n\t\t\t\t\t\t\t:items=\"userMenuItems\"\n\t\t\t\t\t\t\tplacement=\"top-start\"\n\t\t\t\t\t\t\tdata-test-id=\"user-menu\"\n\t\t\t\t\t\t\t@select=\"onUserActionToggle\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</n8n-menu>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { CloudPlanAndUsageData, IExecutionResponse, IMenuItem, IVersion } from '@/Interface';\nimport GiftNotificationIcon from './GiftNotificationIcon.vue';\n\nimport { genericHelpers } from '@/mixins/genericHelpers';\nimport { useMessage } from '@/composables/useMessage';\nimport { workflowHelpers } from '@/mixins/workflowHelpers';\nimport { workflowRun } from '@/mixins/workflowRun';\n\nimport { ABOUT_MODAL_KEY, VERSIONS_MODAL_KEY, VIEWS } from '@/constants';\nimport { userHelpers } from '@/mixins/userHelpers';\nimport { debounceHelper } from '@/mixins/debounce';\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useRootStore } from '@/stores/n8nRoot.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useUsersStore } from '@/stores/users.store';\nimport { useVersionsStore } from '@/stores/versions.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { isNavigationFailure } from 'vue-router';\nimport ExecutionsUsage from '@/components/ExecutionsUsage.vue';\nimport MainSidebarSourceControl from '@/components/MainSidebarSourceControl.vue';\nimport { hasPermission } from '@/rbac/permissions';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\n\nexport default defineComponent({\n\tname: 'MainSidebar',\n\tcomponents: {\n\t\tGiftNotificationIcon,\n\t\tExecutionsUsage,\n\t\tMainSidebarSourceControl,\n\t},\n\tmixins: [genericHelpers, workflowHelpers, workflowRun, userHelpers, debounceHelper],\n\tsetup(props, ctx) {\n\t\tconst externalHooks = useExternalHooks();\n\n\t\treturn {\n\t\t\texternalHooks,\n\t\t\t...useMessage(),\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-misused-promises\n\t\t\t...workflowRun.setup?.(props, ctx),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbasePath: '',\n\t\t\tfullyExpanded: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseRootStore,\n\t\t\tuseSettingsStore,\n\t\t\tuseUIStore,\n\t\t\tuseUsersStore,\n\t\t\tuseVersionsStore,\n\t\t\tuseWorkflowsStore,\n\t\t\tuseCloudPlanStore,\n\t\t\tuseSourceControlStore,\n\t\t),\n\t\tlogoPath(): string {\n\t\t\tif (this.isCollapsed) return this.basePath + 'n8n-logo-collapsed.svg';\n\n\t\t\treturn this.basePath + this.uiStore.logo;\n\t\t},\n\t\thasVersionUpdates(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.settingsStore.settings.releaseChannel === 'stable' &&\n\t\t\t\tthis.versionsStore.hasVersionUpdates\n\t\t\t);\n\t\t},\n\t\tnextVersions(): IVersion[] {\n\t\t\treturn this.versionsStore.nextVersions;\n\t\t},\n\t\tisCollapsed(): boolean {\n\t\t\treturn this.uiStore.sidebarMenuCollapsed;\n\t\t},\n\t\tcanUserAccessSettings(): boolean {\n\t\t\tconst accessibleRoute = this.findFirstAccessibleSettingsRoute();\n\t\t\treturn accessibleRoute !== null;\n\t\t},\n\t\tshowUserArea(): boolean {\n\t\t\treturn hasPermission(['authenticated']);\n\t\t},\n\t\tworkflowExecution(): IExecutionResponse | null {\n\t\t\treturn this.workflowsStore.getWorkflowExecution;\n\t\t},\n\t\tuserMenuItems(): object[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: 'settings',\n\t\t\t\t\tlabel: this.$locale.baseText('settings'),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'logout',\n\t\t\t\t\tlabel: this.$locale.baseText('auth.signout'),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\tmainMenuItems(): IMenuItem[] {\n\t\t\tconst items: IMenuItem[] = [];\n\t\t\tconst injectedItems = this.uiStore.sidebarMenuItems;\n\n\t\t\tconst workflows: IMenuItem = {\n\t\t\t\tid: 'workflows',\n\t\t\t\ticon: 'network-wired',\n\t\t\t\tlabel: this.$locale.baseText('mainSidebar.workflows'),\n\t\t\t\tposition: 'top',\n\t\t\t\tactivateOnRouteNames: [VIEWS.WORKFLOWS],\n\t\t\t};\n\n\t\t\tif (this.sourceControlStore.preferences.branchReadOnly) {\n\t\t\t\tworkflows.secondaryIcon = {\n\t\t\t\t\tname: 'lock',\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontent: this.$locale.baseText('mainSidebar.workflows.readOnlyEnv.tooltip'),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (injectedItems && injectedItems.length > 0) {\n\t\t\t\tfor (const item of injectedItems) {\n\t\t\t\t\titems.push({\n\t\t\t\t\t\tid: item.id,\n\t\t\t\t\t\ticon: item.icon || '',\n\t\t\t\t\t\tlabel: item.label || '',\n\t\t\t\t\t\tposition: item.position,\n\t\t\t\t\t\ttype: item.properties?.href ? 'link' : 'regular',\n\t\t\t\t\t\tproperties: item.properties,\n\t\t\t\t\t} as IMenuItem);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst regularItems: IMenuItem[] = [\n\t\t\t\tworkflows,\n\t\t\t\t{\n\t\t\t\t\tid: 'templates',\n\t\t\t\t\ticon: 'box-open',\n\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.templates'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.settingsStore.isTemplatesEnabled,\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.TEMPLATES],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'credentials',\n\t\t\t\t\ticon: 'key',\n\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.credentials'),\n\t\t\t\t\tcustomIconSize: 'medium',\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.CREDENTIALS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'variables',\n\t\t\t\t\ticon: 'variable',\n\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.variables'),\n\t\t\t\t\tcustomIconSize: 'medium',\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.VARIABLES],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'executions',\n\t\t\t\t\ticon: 'tasks',\n\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.executions'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.EXECUTIONS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'cloud-admin',\n\t\t\t\t\ttype: 'link',\n\t\t\t\t\tposition: 'bottom',\n\t\t\t\t\tlabel: 'Admin Panel',\n\t\t\t\t\ticon: 'home',\n\t\t\t\t\tavailable: this.settingsStore.isCloudDeployment && hasPermission(['instanceOwner']),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings',\n\t\t\t\t\ticon: 'cog',\n\t\t\t\t\tlabel: this.$locale.baseText('settings'),\n\t\t\t\t\tposition: 'bottom',\n\t\t\t\t\tavailable: this.canUserAccessSettings && this.usersStore.currentUser !== null,\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.USERS_SETTINGS, VIEWS.API_SETTINGS, VIEWS.PERSONAL_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'help',\n\t\t\t\t\ticon: 'question',\n\t\t\t\t\tlabel: 'Help',\n\t\t\t\t\tposition: 'bottom',\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'quickstart',\n\t\t\t\t\t\t\ticon: 'video',\n\t\t\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.helpMenuItems.quickstart'),\n\t\t\t\t\t\t\ttype: 'link',\n\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\thref: 'https://www.youtube.com/watch?v=1MwSoB0gnM4',\n\t\t\t\t\t\t\t\tnewWindow: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'docs',\n\t\t\t\t\t\t\ticon: 'book',\n\t\t\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.helpMenuItems.documentation'),\n\t\t\t\t\t\t\ttype: 'link',\n\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\thref: 'https://docs.n8n.io?utm_source=n8n_app&utm_medium=app_sidebar',\n\t\t\t\t\t\t\t\tnewWindow: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'forum',\n\t\t\t\t\t\t\ticon: 'users',\n\t\t\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.helpMenuItems.forum'),\n\t\t\t\t\t\t\ttype: 'link',\n\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\thref: 'https://community.n8n.io?utm_source=n8n_app&utm_medium=app_sidebar',\n\t\t\t\t\t\t\t\tnewWindow: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'examples',\n\t\t\t\t\t\t\ticon: 'graduation-cap',\n\t\t\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.helpMenuItems.course'),\n\t\t\t\t\t\t\ttype: 'link',\n\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\thref: 'https://www.youtube.com/watch?v=1MwSoB0gnM4',\n\t\t\t\t\t\t\t\tnewWindow: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'about',\n\t\t\t\t\t\t\ticon: 'info',\n\t\t\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.aboutN8n'),\n\t\t\t\t\t\t\tposition: 'bottom',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t];\n\t\t\treturn [...items, ...regularItems];\n\t\t},\n\t\tuserIsTrialing(): boolean {\n\t\t\treturn this.cloudPlanStore.userIsTrialing;\n\t\t},\n\t\tcurrentPlanAndUsageData(): CloudPlanAndUsageData | null {\n\t\t\tconst planData = this.cloudPlanStore.currentPlanData;\n\t\t\tconst usage = this.cloudPlanStore.currentUsageData;\n\t\t\tif (!planData || !usage) return null;\n\t\t\treturn {\n\t\t\t\t...planData,\n\t\t\t\tusage,\n\t\t\t};\n\t\t},\n\t},\n\tasync mounted() {\n\t\tthis.basePath = this.rootStore.baseUrl;\n\t\tif (this.$refs.user) {\n\t\t\tvoid this.externalHooks.run('mainSidebar.mounted', {\n\t\t\t\tuserRef: this.$refs.user as Element,\n\t\t\t});\n\t\t}\n\n\t\tvoid this.$nextTick(() => {\n\t\t\tif (window.innerWidth < 900 || this.uiStore.isNodeView) {\n\t\t\t\tthis.uiStore.sidebarMenuCollapsed = true;\n\t\t\t} else {\n\t\t\t\tthis.uiStore.sidebarMenuCollapsed = false;\n\t\t\t}\n\n\t\t\tthis.fullyExpanded = !this.isCollapsed;\n\t\t});\n\t},\n\tcreated() {\n\t\twindow.addEventListener('resize', this.onResize);\n\t},\n\tbeforeUnmount() {\n\t\twindow.removeEventListener('resize', this.onResize);\n\t},\n\tmethods: {\n\t\ttrackHelpItemClick(itemType: string) {\n\t\t\tthis.$telemetry.track('User clicked help resource', {\n\t\t\t\ttype: itemType,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t});\n\t\t},\n\t\tasync onUserActionToggle(action: string) {\n\t\t\tswitch (action) {\n\t\t\t\tcase 'logout':\n\t\t\t\t\tthis.onLogout();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings':\n\t\t\t\t\tvoid this.$router.push({ name: VIEWS.PERSONAL_SETTINGS });\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tonLogout() {\n\t\t\tvoid this.$router.push({ name: VIEWS.SIGNOUT });\n\t\t},\n\t\ttoggleCollapse() {\n\t\t\tthis.uiStore.toggleSidebarMenuCollapse();\n\t\t\t// When expanding, delay showing some element to ensure smooth animation\n\t\t\tif (!this.isCollapsed) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.fullyExpanded = !this.isCollapsed;\n\t\t\t\t}, 300);\n\t\t\t} else {\n\t\t\t\tthis.fullyExpanded = !this.isCollapsed;\n\t\t\t}\n\t\t},\n\t\topenUpdatesPanel() {\n\t\t\tthis.uiStore.openModal(VERSIONS_MODAL_KEY);\n\t\t},\n\t\tasync handleSelect(key: string) {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'workflows': {\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.WORKFLOWS) {\n\t\t\t\t\t\tthis.goToRoute({ name: VIEWS.WORKFLOWS });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'templates': {\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.TEMPLATES) {\n\t\t\t\t\t\tthis.goToRoute({ name: VIEWS.TEMPLATES });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'credentials': {\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.CREDENTIALS) {\n\t\t\t\t\t\tthis.goToRoute({ name: VIEWS.CREDENTIALS });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'variables': {\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.VARIABLES) {\n\t\t\t\t\t\tthis.goToRoute({ name: VIEWS.VARIABLES });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'executions': {\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.EXECUTIONS) {\n\t\t\t\t\t\tthis.goToRoute({ name: VIEWS.EXECUTIONS });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'settings': {\n\t\t\t\t\tconst defaultRoute = this.findFirstAccessibleSettingsRoute();\n\t\t\t\t\tif (defaultRoute) {\n\t\t\t\t\t\tconst route = this.$router.resolve({ name: defaultRoute });\n\t\t\t\t\t\tif (this.$router.currentRoute.name !== defaultRoute) {\n\t\t\t\t\t\t\tthis.goToRoute(route.path);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'about': {\n\t\t\t\t\tthis.trackHelpItemClick('about');\n\t\t\t\t\tthis.uiStore.openModal(ABOUT_MODAL_KEY);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'cloud-admin': {\n\t\t\t\t\tthis.cloudPlanStore.redirectToDashboard();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'quickstart':\n\t\t\t\tcase 'docs':\n\t\t\t\tcase 'forum':\n\t\t\t\tcase 'examples': {\n\t\t\t\t\tthis.trackHelpItemClick(key);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tgoToRoute(route: string | { name: string }) {\n\t\t\tthis.$router.push(route).catch((failure) => {\n\t\t\t\tconsole.log(failure);\n\t\t\t\t// Catch navigation failures caused by route guards\n\t\t\t\tif (!isNavigationFailure(failure)) {\n\t\t\t\t\tconsole.error(failure);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfindFirstAccessibleSettingsRoute() {\n\t\t\tconst settingsRoutes = this.$router\n\t\t\t\t.getRoutes()\n\t\t\t\t.find((route) => route.path === '/settings')!\n\t\t\t\t.children.map((route) => route.name || '');\n\n\t\t\tlet defaultSettingsRoute = null;\n\t\t\tfor (const route of settingsRoutes) {\n\t\t\t\tif (this.canUserAccessRouteByName(route)) {\n\t\t\t\t\tdefaultSettingsRoute = route;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn defaultSettingsRoute;\n\t\t},\n\t\tonResize(event: UIEvent) {\n\t\t\tvoid this.callDebounced('onResizeEnd', { debounceTime: 100 }, event);\n\t\t},\n\t\tasync onResizeEnd(event: UIEvent) {\n\t\t\tconst browserWidth = (event.target as Window).outerWidth;\n\t\t\tawait this.checkWidthAndAdjustSidebar(browserWidth);\n\t\t},\n\t\tasync checkWidthAndAdjustSidebar(width: number) {\n\t\t\tif (width < 900) {\n\t\t\t\tthis.uiStore.sidebarMenuCollapsed = true;\n\t\t\t\tawait this.$nextTick();\n\t\t\t\tthis.fullyExpanded = !this.isCollapsed;\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.sideMenu {\n\tposition: relative;\n\theight: 100%;\n\tborder-right: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\ttransition: width 150ms ease-in-out;\n\twidth: $sidebar-expanded-width;\n\t.logo {\n\t\theight: $header-height;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: var(--spacing-xs);\n\n\t\timg {\n\t\t\tposition: relative;\n\t\t\tleft: 1px;\n\t\t\theight: 20px;\n\t\t}\n\t}\n\n\t&.sideMenuCollapsed {\n\t\twidth: $sidebar-width;\n\n\t\t.logo img {\n\t\t\tleft: 0;\n\t\t}\n\t}\n}\n\n.sideMenuCollapseButton {\n\tposition: absolute;\n\tright: -10px;\n\ttop: 50%;\n\tz-index: 999;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tcolor: var(--color-text-base);\n\tbackground-color: var(--color-foreground-xlight);\n\twidth: 20px;\n\theight: 20px;\n\tborder: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\tborder-radius: 50%;\n\n\t&:hover {\n\t\tcolor: var(--color-primary-shade-1);\n\t}\n}\n\n.updates {\n\tdisplay: flex;\n\talign-items: center;\n\tcursor: pointer;\n\tpadding: var(--spacing-2xs) var(--spacing-l);\n\tmargin: var(--spacing-2xs) 0 0;\n\n\tsvg {\n\t\tcolor: var(--color-text-base) !important;\n\t}\n\tspan {\n\t\tdisplay: none;\n\t\t&.expanded {\n\t\t\tdisplay: initial;\n\t\t}\n\t}\n\n\t&:hover {\n\t\t&,\n\t\t& svg {\n\t\t\tcolor: var(--color-text-dark) !important;\n\t\t}\n\t}\n}\n\n.userArea {\n\tdisplay: flex;\n\tpadding: var(--spacing-xs);\n\talign-items: center;\n\theight: 60px;\n\tborder-top: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\n\t.userName {\n\t\tdisplay: none;\n\t\toverflow: hidden;\n\t\twidth: 100px;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\n\t\t&.expanded {\n\t\t\tdisplay: initial;\n\t\t}\n\n\t\tspan {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t}\n\n\t.userActions {\n\t\tdisplay: none;\n\n\t\t&.expanded {\n\t\t\tdisplay: initial;\n\t\t}\n\t}\n}\n\n@media screen and (max-height: 470px) {\n\t:global(#help) {\n\t\tdisplay: none;\n\t}\n}\n</style>\n"],"names":["_hoisted_2","_createVNode","_component_font_awesome_icon","_createElementVNode","PROGRESS_BAR_MINIMUM_THRESHOLD","now","DateTime","daysLeftOnTrial","computed","days","getPlanExpirationDate","isTrialExpired","_a","props","trialEndsAt","trialHasExecutionsLeft","currentExecutions","usedExecutions","executionsQuota","currentExecutionsWithThreshold","threshold","maxExecutions","onUpgradeClicked","useUIStore","responseStatuses","useRouter","loadingService","useLoadingService","uiStore","sourceControlStore","useSourceControlStore","toast","useToast","i18n","useI18n","eventBus","createEventBus","tooltipOpenDelay","ref","currentBranch","sourceControlAvailable","hasPermission","pushWorkfolder","status","SOURCE_CONTROL_PUSH_MODAL_KEY","error","pullWorkfolder","file","incompleteFileTypes","nextTick","sourceControlEventBus","errorResponse","SOURCE_CONTROL_PULL_MODAL_KEY","_sfc_main","defineComponent","GiftNotificationIcon","ExecutionsUsage","MainSidebarSourceControl","genericHelpers","workflowHelpers","workflowRun","userHelpers","debounceHelper","ctx","useExternalHooks","useMessage","_b","mapStores","useRootStore","useSettingsStore","useUsersStore","useVersionsStore","useWorkflowsStore","useCloudPlanStore","items","injectedItems","workflows","VIEWS","item","regularItems","planData","usage","itemType","action","VERSIONS_MODAL_KEY","key","defaultRoute","route","ABOUT_MODAL_KEY","failure","isNavigationFailure","settingsRoutes","defaultSettingsRoute","event","browserWidth","width","_hoisted_1","_resolveComponent","_openBlock","_createElementBlock","_normalizeClass","_ctx","_cache","args","_createBlock","_component_n8n_icon","_component_n8n_menu","_createSlots","_withCtx","_component_ExecutionsUsage","_createCommentVNode","_component_GiftNotificationIcon","_component_n8n_text","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","_component_n8n_avatar","_component_n8n_action_dropdown"],"mappings":"o+CAIcA,GAAA,qDAHP,aAAa,MAAA,iCACe,CACjCC,EAEMC,EAAA,CAAA,KAAA,MAAA,CAAA,EAFAC,QAAa,gICoEfC,GAAiC,6EAIjCC,EAAMC,EAAS,MAEfC,EAAkBC,EAAS,IAAM,CACtC,KAAM,CAAE,KAAAC,EAAO,CAAE,EAAIC,EAAsB,EAAE,KAAKL,EAAK,CAAC,MAAM,CAAC,EAAE,SAAS,EACnE,OAAA,KAAK,KAAKI,CAAI,CAAA,CACrB,EAEKE,EAAiBH,EAAS,IAAM,OACjC,GAAA,GAACI,EAAAC,EAAM,gBAAN,MAAAD,EAAqB,gBAAuB,MAAA,GACjD,MAAME,EAAcR,EAAS,QAAQO,EAAM,cAAc,cAAc,EACvE,OAAOR,EAAI,SAAA,EAAaS,EAAY,SAAS,CAAA,CAC7C,EAEKJ,EAAwB,IAAM,OAAA,OAAAJ,EAAS,UAAQM,EAAAC,GAAA,YAAAA,EAAO,gBAAP,YAAAD,EAAsB,iBAAkB,EAAE,GAEzFG,EAAyBP,EAAS,IAAM,OACzC,OAACI,EAAAC,EAAM,gBAAN,MAAAD,EAAqB,MACnBC,EAAM,cAAc,MAAM,WAAaA,EAAM,cAAc,uBAD1B,CAC0B,CAClE,EAEKG,EAAoBR,EAAS,IAAM,OACpC,GAAA,GAACI,EAAAC,EAAM,gBAAN,MAAAD,EAAqB,OAAc,MAAA,GAClC,MAAAK,EAAiBJ,EAAM,cAAc,MAAM,WAC3CK,EAAkBL,EAAM,cAAc,uBACrC,OAAAI,EAAiBC,EAAkBA,EAAkBD,CAAA,CAC5D,EAEKE,EAAiCX,EAAS,IAAM,OACjD,GAAA,GAACI,EAAAC,EAAM,gBAAN,MAAAD,EAAqB,OAAc,MAAA,GAClC,MAAAK,EAAiBJ,EAAM,cAAc,MAAM,WAC3CK,EAAkBL,EAAM,cAAc,uBACtCO,EAAahB,GAAiCc,EAAmB,IAChE,OAAAD,EAAiBG,EAAYA,EAAYH,CAAA,CAChD,EAEKI,EAAgBb,EAAS,IAAM,OAChC,OAACI,EAAAC,EAAM,gBAAN,MAAAD,EAAqB,uBACnBC,EAAM,cAAc,uBAD8B,CAC9B,CAC3B,EAEKS,EAAmB,IAAM,CACzBC,EAAW,EAAE,YAAY,aAAc,qBAAsB,UAAU,CAAA,0wEClG7E,MAAMC,EAAmB,CACxB,SAAU,GAAA,EAGIC,GAAU,EACzB,MAAMC,EAAiBC,KACjBC,EAAUL,IACVM,EAAqBC,IACrBC,EAAQC,IACRC,EAAOC,IAEPC,EAAWC,IACXC,EAAmBC,GAAI,GAAG,EAE1BC,EAAgB/B,EAAS,IACvBqB,EAAmB,YAAY,UACtC,EACKW,EAAyBhC,EAC9B,IACCqB,EAAmB,kCACnBY,EAAc,CAAC,MAAM,EAAG,CAAE,KAAM,CAAE,MAAO,sBAAA,EAA0B,CAAA,EAGrE,eAAeC,GAAiB,CAC/BhB,EAAe,aAAa,EAC5BA,EAAe,eAAeO,EAAK,SAAS,mDAAmD,CAAC,EAC5F,GAAA,CACG,MAAAU,EAAS,MAAMd,EAAmB,sBAExCD,EAAQ,kBAAkB,CACzB,KAAMgB,EACN,KAAM,CAAE,SAAAT,EAAU,OAAAQ,CAAO,CAAA,CACzB,QACOE,EAAO,CACfd,EAAM,UAAUc,EAAOZ,EAAK,SAAS,OAAO,CAAC,CAAA,QAC5C,CACDP,EAAe,YAAY,EAC3BA,EAAe,eAAeO,EAAK,SAAS,wBAAwB,CAAC,CACtE,CACD,CAEA,eAAea,GAAiB,CAC/BpB,EAAe,aAAa,EAC5BA,EAAe,eAAeO,EAAK,SAAS,qCAAqC,CAAC,EAE9E,GAAA,CACG,MAAAU,EACH,MAAMd,EAAmB,eAC1B,KACkD,GAKhD,GAHyCc,EAAO,OAAQI,GACpD,EAAEA,EAAK,OAAS,YAAcA,EAAK,SAAW,WAAaA,EAAK,WAAa,QACpF,EACwC,SAAW,EACnDhB,EAAM,YAAY,CACjB,MAAOE,EAAK,SAAS,4CAA4C,EACjE,QAASA,EAAK,SAAS,kDAAkD,EACzE,KAAM,SAAA,CACN,MACK,CACNF,EAAM,YAAY,CACjB,MAAOE,EAAK,SAAS,2CAA2C,EAChE,KAAM,SAAA,CACN,EAEK,MAAAe,EAAsB,CAAC,YAAa,YAAY,GACnBL,GAAU,CAAI,GAAA,KAAMI,GAC/CC,EAAoB,SAASD,EAAK,IAAI,CAC7C,GAGKE,GAAS,IAAM,CACnBlB,EAAM,YAAY,CACjB,QAASE,EAAK,SAAS,qDAAqD,EAC5E,MAAOA,EAAK,SAAS,+CAA+C,EACpE,KAAM,OACN,SAAU,EACV,UAAW,GACX,OAAQ,CAAA,CACR,CAAA,CACD,CAEH,CACAiB,GAAsB,KAAK,MAAM,QACzBL,EAAO,CACf,MAAMM,EAAgBN,EAAM,UAExBM,GAAA,YAAAA,EAAe,UAAW3B,EAAiB,SAC9CI,EAAQ,kBAAkB,CACzB,KAAMwB,EACN,KAAM,CAAE,SAAAjB,EAAU,OAAQgB,EAAc,KAAK,IAAK,CAAA,CAClD,EAEKpB,EAAA,UAAUc,EAAO,OAAO,CAC/B,QACC,CACDnB,EAAe,YAAY,EAC3BA,EAAe,eAAeO,EAAK,SAAS,wBAAwB,CAAC,CACtE,CACD,uzDCYAoB,GAAeC,EAAgB,CAC9B,KAAM,cACN,WAAY,CACX,qBAAAC,GACA,gBAAAC,GACA,yBAAAC,EACD,EACA,OAAQ,CAACC,GAAgBC,GAAiBC,EAAaC,GAAaC,EAAc,EAClF,MAAMjD,EAAOkD,EAAK,SAGV,MAAA,CACN,cAHqBC,IAIrB,GAAGC,GAAW,EAEd,IAAGC,GAAAtD,EAAAgD,GAAY,QAAZ,YAAAM,EAAA,KAAAtD,EAAoBC,EAAOkD,EAAG,CAEnC,EACA,MAAO,CACC,MAAA,CACN,SAAU,GACV,cAAe,EAAA,CAEjB,EACA,SAAU,CACT,GAAGI,GACFC,EACAC,EACA9C,EACA+C,EACAC,EACAC,EACAC,EACA3C,CACD,EACA,UAAmB,CAClB,OAAI,KAAK,YAAoB,KAAK,SAAW,yBAEtC,KAAK,SAAW,KAAK,QAAQ,IACrC,EACA,mBAA6B,CAC5B,OACC,KAAK,cAAc,SAAS,iBAAmB,UAC/C,KAAK,cAAc,iBAErB,EACA,cAA2B,CAC1B,OAAO,KAAK,cAAc,YAC3B,EACA,aAAuB,CACtB,OAAO,KAAK,QAAQ,oBACrB,EACA,uBAAiC,CAEhC,OADwB,KAAK,qCACF,IAC5B,EACA,cAAwB,CAChB,OAAAW,EAAc,CAAC,eAAe,CAAC,CACvC,EACA,mBAA+C,CAC9C,OAAO,KAAK,eAAe,oBAC5B,EACA,eAA0B,CAClB,MAAA,CACN,CACC,GAAI,WACJ,MAAO,KAAK,QAAQ,SAAS,UAAU,CACxC,EACA,CACC,GAAI,SACJ,MAAO,KAAK,QAAQ,SAAS,cAAc,CAC5C,CAAA,CAEF,EACA,eAA6B,OAC5B,MAAMiC,EAAqB,CAAA,EACrBC,EAAgB,KAAK,QAAQ,iBAE7BC,EAAuB,CAC5B,GAAI,YACJ,KAAM,gBACN,MAAO,KAAK,QAAQ,SAAS,uBAAuB,EACpD,SAAU,MACV,qBAAsB,CAACC,EAAM,SAAS,CAAA,EAYnC,GATA,KAAK,mBAAmB,YAAY,iBACvCD,EAAU,cAAgB,CACzB,KAAM,OACN,QAAS,CACR,QAAS,KAAK,QAAQ,SAAS,2CAA2C,CAC3E,CAAA,GAIED,GAAiBA,EAAc,OAAS,EAC3C,UAAWG,KAAQH,EAClBD,EAAM,KAAK,CACV,GAAII,EAAK,GACT,KAAMA,EAAK,MAAQ,GACnB,MAAOA,EAAK,OAAS,GACrB,SAAUA,EAAK,SACf,MAAMlE,EAAAkE,EAAK,aAAL,MAAAlE,EAAiB,KAAO,OAAS,UACvC,WAAYkE,EAAK,UAAA,CACJ,EAIhB,MAAMC,EAA4B,CACjCH,EACA,CACC,GAAI,YACJ,KAAM,WACN,MAAO,KAAK,QAAQ,SAAS,uBAAuB,EACpD,SAAU,MACV,UAAW,KAAK,cAAc,mBAC9B,qBAAsB,CAACC,EAAM,SAAS,CACvC,EACA,CACC,GAAI,cACJ,KAAM,MACN,MAAO,KAAK,QAAQ,SAAS,yBAAyB,EACtD,eAAgB,SAChB,SAAU,MACV,qBAAsB,CAACA,EAAM,WAAW,CACzC,EACA,CACC,GAAI,YACJ,KAAM,WACN,MAAO,KAAK,QAAQ,SAAS,uBAAuB,EACpD,eAAgB,SAChB,SAAU,MACV,qBAAsB,CAACA,EAAM,SAAS,CACvC,EACA,CACC,GAAI,aACJ,KAAM,QACN,MAAO,KAAK,QAAQ,SAAS,wBAAwB,EACrD,SAAU,MACV,qBAAsB,CAACA,EAAM,UAAU,CACxC,EACA,CACC,GAAI,cACJ,KAAM,OACN,SAAU,SACV,MAAO,cACP,KAAM,OACN,UAAW,KAAK,cAAc,mBAAqBpC,EAAc,CAAC,eAAe,CAAC,CACnF,EACA,CACC,GAAI,WACJ,KAAM,MACN,MAAO,KAAK,QAAQ,SAAS,UAAU,EACvC,SAAU,SACV,UAAW,KAAK,uBAAyB,KAAK,WAAW,cAAgB,KACzE,qBAAsB,CAACoC,EAAM,eAAgBA,EAAM,aAAcA,EAAM,iBAAiB,CACzF,EACA,CACC,GAAI,OACJ,KAAM,WACN,MAAO,OACP,SAAU,SACV,SAAU,CACT,CACC,GAAI,aACJ,KAAM,QACN,MAAO,KAAK,QAAQ,SAAS,sCAAsC,EACnE,KAAM,OACN,WAAY,CACX,KAAM,8CACN,UAAW,EACZ,CACD,EACA,CACC,GAAI,OACJ,KAAM,OACN,MAAO,KAAK,QAAQ,SAAS,yCAAyC,EACtE,KAAM,OACN,WAAY,CACX,KAAM,gEACN,UAAW,EACZ,CACD,EACA,CACC,GAAI,QACJ,KAAM,QACN,MAAO,KAAK,QAAQ,SAAS,iCAAiC,EAC9D,KAAM,OACN,WAAY,CACX,KAAM,qEACN,UAAW,EACZ,CACD,EACA,CACC,GAAI,WACJ,KAAM,iBACN,MAAO,KAAK,QAAQ,SAAS,kCAAkC,EAC/D,KAAM,OACN,WAAY,CACX,KAAM,8CACN,UAAW,EACZ,CACD,EACA,CACC,GAAI,QACJ,KAAM,OACN,MAAO,KAAK,QAAQ,SAAS,sBAAsB,EACnD,SAAU,QACX,CACD,CACD,CAAA,EAED,MAAO,CAAC,GAAGH,EAAO,GAAGK,CAAY,CAClC,EACA,gBAA0B,CACzB,OAAO,KAAK,eAAe,cAC5B,EACA,yBAAwD,CACjD,MAAAC,EAAW,KAAK,eAAe,gBAC/BC,EAAQ,KAAK,eAAe,iBAC9B,MAAA,CAACD,GAAY,CAACC,EAAc,KACzB,CACN,GAAGD,EACH,MAAAC,CAAA,CAEF,CACD,EACA,MAAM,SAAU,CACV,KAAA,SAAW,KAAK,UAAU,QAC3B,KAAK,MAAM,MACT,KAAK,cAAc,IAAI,sBAAuB,CAClD,QAAS,KAAK,MAAM,IAAA,CACpB,EAGG,KAAK,UAAU,IAAM,CACrB,OAAO,WAAa,KAAO,KAAK,QAAQ,WAC3C,KAAK,QAAQ,qBAAuB,GAEpC,KAAK,QAAQ,qBAAuB,GAGhC,KAAA,cAAgB,CAAC,KAAK,WAAA,CAC3B,CACF,EACA,SAAU,CACF,OAAA,iBAAiB,SAAU,KAAK,QAAQ,CAChD,EACA,eAAgB,CACR,OAAA,oBAAoB,SAAU,KAAK,QAAQ,CACnD,EACA,QAAS,CACR,mBAAmBC,EAAkB,CAC/B,KAAA,WAAW,MAAM,6BAA8B,CACnD,KAAMA,EACN,YAAa,KAAK,eAAe,UAAA,CACjC,CACF,EACA,MAAM,mBAAmBC,EAAgB,CACxC,OAAQA,EAAQ,CACf,IAAK,SACJ,KAAK,SAAS,EACd,MACD,IAAK,WACC,KAAK,QAAQ,KAAK,CAAE,KAAMN,EAAM,kBAAmB,EACxD,KAGF,CACD,EACA,UAAW,CACL,KAAK,QAAQ,KAAK,CAAE,KAAMA,EAAM,QAAS,CAC/C,EACA,gBAAiB,CAChB,KAAK,QAAQ,4BAER,KAAK,YAKJ,KAAA,cAAgB,CAAC,KAAK,YAJ3B,WAAW,IAAM,CACX,KAAA,cAAgB,CAAC,KAAK,aACzB,GAAG,CAIR,EACA,kBAAmB,CACb,KAAA,QAAQ,UAAUO,CAAkB,CAC1C,EACA,MAAM,aAAaC,EAAa,CAC/B,OAAQA,EAAK,CACZ,IAAK,YAAa,CACb,KAAK,QAAQ,aAAa,OAASR,EAAM,WAC5C,KAAK,UAAU,CAAE,KAAMA,EAAM,SAAW,CAAA,EAEzC,KACD,CACA,IAAK,YAAa,CACb,KAAK,QAAQ,aAAa,OAASA,EAAM,WAC5C,KAAK,UAAU,CAAE,KAAMA,EAAM,SAAW,CAAA,EAEzC,KACD,CACA,IAAK,cAAe,CACf,KAAK,QAAQ,aAAa,OAASA,EAAM,aAC5C,KAAK,UAAU,CAAE,KAAMA,EAAM,WAAa,CAAA,EAE3C,KACD,CACA,IAAK,YAAa,CACb,KAAK,QAAQ,aAAa,OAASA,EAAM,WAC5C,KAAK,UAAU,CAAE,KAAMA,EAAM,SAAW,CAAA,EAEzC,KACD,CACA,IAAK,aAAc,CACd,KAAK,QAAQ,aAAa,OAASA,EAAM,YAC5C,KAAK,UAAU,CAAE,KAAMA,EAAM,UAAY,CAAA,EAE1C,KACD,CACA,IAAK,WAAY,CACV,MAAAS,EAAe,KAAK,mCAC1B,GAAIA,EAAc,CACjB,MAAMC,EAAQ,KAAK,QAAQ,QAAQ,CAAE,KAAMD,EAAc,EACrD,KAAK,QAAQ,aAAa,OAASA,GACjC,KAAA,UAAUC,EAAM,IAAI,CAE3B,CACA,KACD,CACA,IAAK,QAAS,CACb,KAAK,mBAAmB,OAAO,EAC1B,KAAA,QAAQ,UAAUC,CAAe,EACtC,KACD,CACA,IAAK,cAAe,CACnB,KAAK,eAAe,sBACpB,KACD,CACA,IAAK,aACL,IAAK,OACL,IAAK,QACL,IAAK,WAAY,CAChB,KAAK,mBAAmBH,CAAG,EAC3B,KACD,CAGD,CACD,EACA,UAAUE,EAAkC,CAC3C,KAAK,QAAQ,KAAKA,CAAK,EAAE,MAAOE,GAAY,CAC3C,QAAQ,IAAIA,CAAO,EAEdC,GAAoBD,CAAO,GAC/B,QAAQ,MAAMA,CAAO,CACtB,CACA,CACF,EACA,kCAAmC,CAClC,MAAME,EAAiB,KAAK,QAC1B,YACA,KAAMJ,GAAUA,EAAM,OAAS,WAAW,EAC1C,SAAS,IAAKA,GAAUA,EAAM,MAAQ,EAAE,EAE1C,IAAIK,EAAuB,KAC3B,UAAWL,KAASI,EACf,GAAA,KAAK,yBAAyBJ,CAAK,EAAG,CAClBK,EAAAL,EACvB,KACD,CAGM,OAAAK,CACR,EACA,SAASC,EAAgB,CACnB,KAAK,cAAc,cAAe,CAAE,aAAc,GAAA,EAAOA,CAAK,CACpE,EACA,MAAM,YAAYA,EAAgB,CAC3B,MAAAC,EAAgBD,EAAM,OAAkB,WACxC,MAAA,KAAK,2BAA2BC,CAAY,CACnD,EACA,MAAM,2BAA2BC,EAAe,CAC3CA,EAAQ,MACX,KAAK,QAAQ,qBAAuB,GACpC,MAAM,KAAK,YACN,KAAA,cAAgB,CAAC,KAAK,YAE7B,CACD,CACD,CAAC,oXAjdSC,GAAc,CAAA,KAAA,EAAChG,GAAa,CAAA,MAAA,sTArDrCiG,EAkGM,UAAA,EAhGC,OAAAC,EAAA,EAAAC,EAAA,MAAA,CAAA,GAAA,YAAgC,MAAeC,EAAA,CAAa,YAAO,GAAA,CAAAC,EAAA,OAAA,QAAA,EAAA,kDAQlElG,EAAA,MAAA,CACL,GAAA,yBAAA,MAAAiG,EAAA,CAAA,YAAAC,EAAA,OAAA,sBAAA,CAAA,UAEeC,EAAW,CAAA,IAAAA,EAAA,CAAA,EAAA,IAAAC,IAAAF,EAAA,gBAAAA,EAAA,eAAA,GAAAE,CAAA,EAAA,EAAA,oBAAsBC,EAAAC,EAAA,CAAC,IAAI,EAAU,KAAK,gBAAA,KAAA,gCACjCD,EAAAC,EAAA,CAAC,IAAI,EAAU,KAAK,eAAA,KAAA,uBAEzD,CAAA,EAAW,EAAA,CAAA,EAAAxG,EAAkCyG,EAAW,CAAG,MAAQL,EAAA,cAAA,UAAAA,EAAA,YACvD,SAAMA,EAAA,YAChB,EAAAM,GAAA,CAAA,OAAMC,EAAK,IAAA,CAAAzG,EAAA,MAAA,CACV,MAA8EiG,EAAAC,EAAA,OAAA,IAAA,CAAA,EAAA,CAA5ClG,EAAA,MAAA,CAAY,IAAKkG,EAAA,SAAe,eAAS,WAAA,MAAAD,EAAAC,EAAA,OAAA,IAAA,wBAIlE,EAAA,CAAA,CAAA,CAAA,EACV,gBAAAO,EAAA,IAAA,CAAAP,EAAA,eAAAA,EAAA,gBAAAH,MACmBW,EAAuB,CAAA,IAAA,4EAGhCC,EAqBJ,GAAA,EAAA,CAAA,CAAA,aAlBEF,EAAiB,IAAA,CADxBzG,EAAA,MAAA,KAAA,CAAAkG,EAAA,mBAAAH,IAEcC,EAAA,MAAA,CACZ,IAAK,EACL,eAAK,+BAAA,MAAAC,EAAAC,EAAA,OAAA,OAAA,EAEN,QAEMC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,IAAAC,IAAAF,EAAA,kBAAAA,EAAA,iBAAA,GAAAE,CAAA,EAAA,EAAA,UADL,MAAwBH,EAAAC,EAAA,OAAA,aAAA,CAAA,EAAA,CAEzBpG,EAOW8G,CAAA,CANT,EAAA,CAAA,EAAA9G,EACK+G,EAAW,CAAA,MAAAZ,EAAA,CAAA,QAAA,GAAA,CAAAC,EAAA,OAAA,QAAA,EAAAA,EAAA,aAAA,CAAA,iKAOnB,EAAA,CAAA,GAAAS,EAAA,GAAA,EAAA,kEAGsB,EAAA,CAAA,EAAA,iBACvB,KAAA,SAAA,GAAMF,EAAK,IAAA,CAAAzG,EAAA,MAAA,CACV,MAAAiG,EA0BMC,EA1BN,OA0BM,QAAA,CAAA,EAAA,GAvBQ,MAAWrG,GAAA,CAAAC,EACbgH,EAAW,CACrB,SAAQ,CAAOZ,EAAA,YACd,UAAS,YAAA,QAAA,QASC,UAAQA,EAAA,kBAAA,EAAA,CAIE,SAAAO,EAAA,IAAA,CAAA3G,EAFnBiH,EAEmB,KAFD,CACiB,QAAAN,EAAA,IAAA,CAAA3G,EAAAkH,EAA/B,SAAQ,UAAQ,EAAA,CAAA,QAAAP,EAAA,IAAA,0CAEpB,EAAA,CAAA,CAAA,EACI3G,EAAAkH,EAAA,CAAA,QAAQ,QAAQ,EAAA,CAAA,QAAAP,EAAA,IAAA,8DAbX,QAAAA,EAAA,IAAA,CAAAzG,EAAA,MAAA,CACV,MAIEiG,EAAA,CAAA,CAAAC,EAAA,OAAA,MAAA,EAAA,GAAA,UAAAA,EAAA,WAAA,CAAA,CAAA,EAAA,GAFUe,EAAW,CACtB,UAAKf,EAAO,WAAA,YAAA,UAAA,SAAAA,EAAA,WAAA,YAAA,iEAqBV,EAAA,EAAA,CAAA,WAAA,WAAA,CAAA,CAAA,CAAA,WAHL,MAEaD,EAAA,CAAA,SAAA,GAAA,CAAAC,EAAA,OAAA,QAAA,EAAA,GAAA,CAAAA,EAAA,OAAA,QAAA,EAAAA,EAAA,cAAA,CAAA,EAAA,CAFqBpG,EAAA+G,EAAA,CAAE,KAAK,QAAA,KAAA,qFAI1C,CAAA,CAAM,EAAA,CAAA,EAAA7G,EAAA,MAAA,CACL,MAKEiG,EAAA,CAAA,CAAAC,EAAA,OAAA,WAAA,EAAA,GAAA,CAAAA,EAAA,OAAA,QAAA,EAAAA,EAAA,aAAA,CAAA,CAAA,EAAA,GAHSgB,EAAW,CACrB,MAAAhB,EAAA,cACC,UAAQ,YAAA,eAAA"}
|
|
1
|
+
{"version":3,"file":"MainSidebar-nf-k1wHF.js","sources":["../../src/components/GiftNotificationIcon.vue","../../src/components/ExecutionsUsage.vue","../../src/components/MainSidebarSourceControl.vue","../../src/components/MainSidebar.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style['gift-icon']\">\n\t\t<font-awesome-icon icon=\"gift\" />\n\t\t<div :class=\"$style['notification']\">\n\t\t\t<div></div>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.gift-icon {\n\tdisplay: flex;\n\tposition: relative;\n\n\tsvg {\n\t\tmargin-right: 0 !important;\n\t}\n\n\t.notification {\n\t\theight: 0.47em;\n\t\twidth: 0.47em;\n\t\tborder-radius: 50%;\n\t\tcolor: $gift-notification-active-color;\n\t\tposition: absolute;\n\t\tbackground-color: $gift-notification-outer-color;\n\t\tright: -0.3em;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\ttop: -0.148em;\n\n\t\tdiv {\n\t\t\theight: 0.36em;\n\t\t\twidth: 0.36em;\n\t\t\tbackground-color: $gift-notification-inner-color;\n\t\t\tborder-radius: 50%;\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<div v-if=\"isTrialExpired\" :class=\"$style.usageText\">\n\t\t\t<n8n-text size=\"small\" color=\"danger\">\n\t\t\t\t{{ locale.baseText('executionUsage.expired.text') }}\n\t\t\t</n8n-text>\n\t\t</div>\n\t\t<div v-else-if=\"!isTrialExpired && trialHasExecutionsLeft\" :class=\"$style.usageText\">\n\t\t\t<i18n-t tag=\"span\" keypath=\"executionUsage.currentUsage\">\n\t\t\t\t<template #text>\n\t\t\t\t\t<n8n-text size=\"small\" color=\"text-dark\">\n\t\t\t\t\t\t{{ locale.baseText('executionUsage.currentUsage.text') }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</template>\n\t\t\t\t<template #count>\n\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\" color=\"warning\">\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\tlocale.baseText('executionUsage.currentUsage.count', {\n\t\t\t\t\t\t\t\tadjustToNumber: daysLeftOnTrial || 0,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</template>\n\t\t\t</i18n-t>\n\t\t</div>\n\t\t<div v-else-if=\"!trialHasExecutionsLeft\" :class=\"$style.usageText\">\n\t\t\t<n8n-text size=\"small\">\n\t\t\t\t{{ locale.baseText('executionUsage.ranOutOfExecutions.text') }}\n\t\t\t</n8n-text>\n\t\t</div>\n\t\t<div v-if=\"!isTrialExpired\" :class=\"$style.usageCounter\">\n\t\t\t<div :class=\"$style.progressBarDiv\">\n\t\t\t\t<progress\n\t\t\t\t\t:class=\"[\n\t\t\t\t\t\ttrialHasExecutionsLeft ? $style.progressBarSuccess : $style.progressBarDanger,\n\t\t\t\t\t\t$style.progressBar,\n\t\t\t\t\t]\"\n\t\t\t\t\t:value=\"currentExecutionsWithThreshold\"\n\t\t\t\t\t:max=\"maxExecutions\"\n\t\t\t\t></progress>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.executionsCountSection\">\n\t\t\t\t<n8n-text size=\"xsmall\" :color=\"trialHasExecutionsLeft ? 'text-dark' : 'danger'\">\n\t\t\t\t\t{{ currentExecutions }}/{{ maxExecutions }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<n8n-text size=\"xsmall\" :color=\"trialHasExecutionsLeft ? 'text-dark' : 'danger'\">{{\n\t\t\t\t\tlocale.baseText('executionUsage.label.executions')\n\t\t\t\t}}</n8n-text>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div :class=\"$style.upgradeButtonSection\">\n\t\t\t<n8n-button\n\t\t\t\t:label=\"locale.baseText('executionUsage.button.upgrade')\"\n\t\t\t\tsize=\"xmini\"\n\t\t\t\ticon=\"gem\"\n\t\t\t\ttype=\"success\"\n\t\t\t\t:block=\"true\"\n\t\t\t\t@click=\"onUpgradeClicked\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { i18n as locale } from '@/plugins/i18n';\nimport { DateTime } from 'luxon';\nimport type { CloudPlanAndUsageData } from '@/Interface';\nimport { computed } from 'vue';\nimport { useUIStore } from '@/stores/ui.store';\n\nconst PROGRESS_BAR_MINIMUM_THRESHOLD = 8;\n\nconst props = defineProps<{ cloudPlanData: CloudPlanAndUsageData | null }>();\n\nconst now = DateTime.utc();\n\nconst daysLeftOnTrial = computed(() => {\n\tconst { days = 0 } = getPlanExpirationDate().diff(now, ['days']).toObject();\n\treturn Math.ceil(days);\n});\n\nconst isTrialExpired = computed(() => {\n\tif (!props.cloudPlanData?.expirationDate) return false;\n\tconst trialEndsAt = DateTime.fromISO(props.cloudPlanData.expirationDate);\n\treturn now.toMillis() > trialEndsAt.toMillis();\n});\n\nconst getPlanExpirationDate = () => DateTime.fromISO(props?.cloudPlanData?.expirationDate ?? '');\n\nconst trialHasExecutionsLeft = computed(() => {\n\tif (!props.cloudPlanData?.usage) return 0;\n\treturn props.cloudPlanData.usage.executions < props.cloudPlanData.monthlyExecutionsLimit;\n});\n\nconst currentExecutions = computed(() => {\n\tif (!props.cloudPlanData?.usage) return 0;\n\tconst usedExecutions = props.cloudPlanData.usage.executions;\n\tconst executionsQuota = props.cloudPlanData.monthlyExecutionsLimit;\n\treturn usedExecutions > executionsQuota ? executionsQuota : usedExecutions;\n});\n\nconst currentExecutionsWithThreshold = computed(() => {\n\tif (!props.cloudPlanData?.usage) return 0;\n\tconst usedExecutions = props.cloudPlanData.usage.executions;\n\tconst executionsQuota = props.cloudPlanData.monthlyExecutionsLimit;\n\tconst threshold = (PROGRESS_BAR_MINIMUM_THRESHOLD * executionsQuota) / 100;\n\treturn usedExecutions < threshold ? threshold : usedExecutions;\n});\n\nconst maxExecutions = computed(() => {\n\tif (!props.cloudPlanData?.monthlyExecutionsLimit) return 0;\n\treturn props.cloudPlanData.monthlyExecutionsLimit;\n});\n\nconst onUpgradeClicked = () => {\n\tvoid useUIStore().goToUpgrade('canvas-nav', 'upgrade-canvas-nav', 'redirect');\n};\n</script>\n\n<style module lang=\"scss\">\n.container {\n\tdisplay: flex;\n\tflex-direction: column;\n\tbackground-color: var(--color-background-light);\n\tborder: var(--border-base);\n\tborder-right: 0;\n}\n\n.progressBarDiv {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.progressBar {\n\twidth: 62.4px;\n\tborder: 0;\n\theight: 5px;\n\tborder-radius: 20px;\n\tbackground-color: var(--color-foreground-base);\n}\n.progressBar::-webkit-progress-bar {\n\twidth: 62.4px;\n\tborder: 0;\n\theight: 5px;\n\tborder-radius: 20px;\n\tbackground-color: var(--color-foreground-base);\n}\n.progressBar::-moz-progress-bar {\n\twidth: 62.4px;\n\tborder: 0;\n\theight: 5px;\n\tborder-radius: 20px;\n\tbackground-color: var(--color-foreground-base);\n}\n\n.progressBarSuccess::-moz-progress-bar {\n\tbackground: var(--color-foreground-xdark);\n\tborder-radius: 20px;\n}\n\n.progressBarSuccess::-webkit-progress-value {\n\tbackground: var(--color-foreground-xdark);\n\tborder-radius: 20px;\n}\n\n.progressBarDanger::-webkit-progress-value {\n\tbackground: var(--color-danger);\n\tborder-radius: 20px;\n}\n\n.progressBarDanger::-moz-progress-bar {\n\tbackground: var(--color-danger);\n}\n\n.usageText {\n\tmargin-left: var(--spacing-s);\n\tmargin-right: var(--spacing-s);\n\tmargin-top: var(--spacing-xs);\n\tline-height: var(--spacing-xs);\n}\n\n.usageCounter {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-top: var(--spacing-2xs);\n\tfont-size: var(--font-size-3xs);\n}\n\n.danger {\n\tcolor: var(--color-danger);\n}\n\n.executionsCountSection {\n\tmargin-left: var(--spacing-xs);\n}\n\n.upgradeButtonSection {\n\tmargin: var(--spacing-s);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, nextTick, ref } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { createEventBus } from 'n8n-design-system/utils';\nimport { useI18n } from '@/composables/useI18n';\nimport { hasPermission } from '@/rbac/permissions';\nimport { useToast } from '@/composables/useToast';\nimport { useLoadingService } from '@/composables/useLoadingService';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { SOURCE_CONTROL_PULL_MODAL_KEY, SOURCE_CONTROL_PUSH_MODAL_KEY, VIEWS } from '@/constants';\nimport type { SourceControlAggregatedFile } from '../Interface';\nimport { sourceControlEventBus } from '@/event-bus/source-control';\n\nconst props = defineProps<{\n\tisCollapsed: boolean;\n}>();\n\nconst responseStatuses = {\n\tCONFLICT: 409,\n};\n\nconst router = useRouter();\nconst loadingService = useLoadingService();\nconst uiStore = useUIStore();\nconst sourceControlStore = useSourceControlStore();\nconst toast = useToast();\nconst i18n = useI18n();\n\nconst eventBus = createEventBus();\nconst tooltipOpenDelay = ref(300);\n\nconst currentBranch = computed(() => {\n\treturn sourceControlStore.preferences.branchName;\n});\nconst sourceControlAvailable = computed(\n\t() =>\n\t\tsourceControlStore.isEnterpriseSourceControlEnabled &&\n\t\thasPermission(['rbac'], { rbac: { scope: 'sourceControl:manage' } }),\n);\n\nasync function pushWorkfolder() {\n\tloadingService.startLoading();\n\tloadingService.setLoadingText(i18n.baseText('settings.sourceControl.loading.checkingForChanges'));\n\ttry {\n\t\tconst status = await sourceControlStore.getAggregatedStatus();\n\n\t\tuiStore.openModalWithData({\n\t\t\tname: SOURCE_CONTROL_PUSH_MODAL_KEY,\n\t\t\tdata: { eventBus, status },\n\t\t});\n\t} catch (error) {\n\t\ttoast.showError(error, i18n.baseText('error'));\n\t} finally {\n\t\tloadingService.stopLoading();\n\t\tloadingService.setLoadingText(i18n.baseText('genericHelpers.loading'));\n\t}\n}\n\nasync function pullWorkfolder() {\n\tloadingService.startLoading();\n\tloadingService.setLoadingText(i18n.baseText('settings.sourceControl.loading.pull'));\n\n\ttry {\n\t\tconst status: SourceControlAggregatedFile[] =\n\t\t\t((await sourceControlStore.pullWorkfolder(\n\t\t\t\tfalse,\n\t\t\t)) as unknown as SourceControlAggregatedFile[]) || [];\n\n\t\tconst statusWithoutLocallyCreatedWorkflows = status.filter((file) => {\n\t\t\treturn !(file.type === 'workflow' && file.status === 'created' && file.location === 'local');\n\t\t});\n\t\tif (statusWithoutLocallyCreatedWorkflows.length === 0) {\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: i18n.baseText('settings.sourceControl.pull.upToDate.title'),\n\t\t\t\tmessage: i18n.baseText('settings.sourceControl.pull.upToDate.description'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t} else {\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: i18n.baseText('settings.sourceControl.pull.success.title'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\n\t\t\tconst incompleteFileTypes = ['variables', 'credential'];\n\t\t\tconst hasVariablesOrCredentials = (status || []).some((file) => {\n\t\t\t\treturn incompleteFileTypes.includes(file.type);\n\t\t\t});\n\n\t\t\tif (hasVariablesOrCredentials) {\n\t\t\t\tvoid nextTick(() => {\n\t\t\t\t\ttoast.showMessage({\n\t\t\t\t\t\tmessage: i18n.baseText('settings.sourceControl.pull.oneLastStep.description'),\n\t\t\t\t\t\ttitle: i18n.baseText('settings.sourceControl.pull.oneLastStep.title'),\n\t\t\t\t\t\ttype: 'info',\n\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\tshowClose: true,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tsourceControlEventBus.emit('pull');\n\t} catch (error) {\n\t\tconst errorResponse = error.response;\n\n\t\tif (errorResponse?.status === responseStatuses.CONFLICT) {\n\t\t\tuiStore.openModalWithData({\n\t\t\t\tname: SOURCE_CONTROL_PULL_MODAL_KEY,\n\t\t\t\tdata: { eventBus, status: errorResponse.data.data },\n\t\t\t});\n\t\t} else {\n\t\t\ttoast.showError(error, 'Error');\n\t\t}\n\t} finally {\n\t\tloadingService.stopLoading();\n\t\tloadingService.setLoadingText(i18n.baseText('genericHelpers.loading'));\n\t}\n}\n\nconst goToSourceControlSetup = async () => {\n\tawait router.push({ name: VIEWS.SOURCE_CONTROL });\n};\n</script>\n\n<template>\n\t<div\n\t\tv-if=\"sourceControlAvailable\"\n\t\t:class=\"{\n\t\t\t[$style.sync]: true,\n\t\t\t[$style.collapsed]: isCollapsed,\n\t\t\t[$style.isConnected]: sourceControlStore.isEnterpriseSourceControlEnabled,\n\t\t}\"\n\t\t:style=\"{ borderLeftColor: sourceControlStore.preferences.branchColor }\"\n\t\tdata-test-id=\"main-sidebar-source-control\"\n\t>\n\t\t<div\n\t\t\tv-if=\"sourceControlStore.preferences.connected && sourceControlStore.preferences.branchName\"\n\t\t\t:class=\"$style.connected\"\n\t\t\tdata-test-id=\"main-sidebar-source-control-connected\"\n\t\t>\n\t\t\t<span :class=\"$style.branchName\">\n\t\t\t\t<n8n-icon icon=\"code-branch\" />\n\t\t\t\t{{ currentBranch }}\n\t\t\t</span>\n\t\t\t<div :class=\"{ 'pt-xs': !isCollapsed }\">\n\t\t\t\t<n8n-tooltip :disabled=\"!isCollapsed\" :show-after=\"tooltipOpenDelay\" placement=\"right\">\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{{ i18n.baseText('settings.sourceControl.button.pull') }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t'mr-2xs': !isCollapsed,\n\t\t\t\t\t\t\t'mb-2xs': isCollapsed && !sourceControlStore.preferences.branchReadOnly,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\ticon=\"arrow-down\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\tsize=\"mini\"\n\t\t\t\t\t\t:square=\"isCollapsed\"\n\t\t\t\t\t\t:label=\"isCollapsed ? '' : i18n.baseText('settings.sourceControl.button.pull')\"\n\t\t\t\t\t\t@click=\"pullWorkfolder\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-tooltip>\n\t\t\t\t<n8n-tooltip\n\t\t\t\t\tv-if=\"!sourceControlStore.preferences.branchReadOnly\"\n\t\t\t\t\t:disabled=\"!isCollapsed\"\n\t\t\t\t\t:show-after=\"tooltipOpenDelay\"\n\t\t\t\t\tplacement=\"right\"\n\t\t\t\t>\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{{ i18n.baseText('settings.sourceControl.button.push') }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t:square=\"isCollapsed\"\n\t\t\t\t\t\t:label=\"isCollapsed ? '' : i18n.baseText('settings.sourceControl.button.push')\"\n\t\t\t\t\t\ticon=\"arrow-up\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\tsize=\"mini\"\n\t\t\t\t\t\t@click=\"pushWorkfolder\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.sync {\n\tpadding: var(--spacing-s) var(--spacing-s) var(--spacing-s) var(--spacing-l);\n\tmargin: var(--spacing-2xs) 0 calc(var(--spacing-2xs) * -1);\n\tbackground: var(--color-background-light);\n\tborder-top: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\tfont-size: var(--font-size-2xs);\n\n\t&.isConnected {\n\t\tpadding-left: var(--spacing-m);\n\t\tborder-left: var(--spacing-3xs) var(--border-style-base) var(--color-foreground-base);\n\n\t\t&.collapsed {\n\t\t\tpadding-left: var(--spacing-xs);\n\t\t}\n\t}\n\n\t&:empty {\n\t\tdisplay: none;\n\t}\n\n\tbutton {\n\t\tfont-size: var(--font-size-3xs);\n\t}\n}\n\n.branchName {\n\twhite-space: normal;\n\tline-break: anywhere;\n}\n\n.collapsed {\n\ttext-align: center;\n\tpadding-left: var(--spacing-s);\n\tpadding-right: var(--spacing-s);\n\n\t.connected {\n\t\t> span {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div\n\t\tid=\"side-menu\"\n\t\t:class=\"{\n\t\t\t['side-menu']: true,\n\t\t\t[$style.sideMenu]: true,\n\t\t\t[$style.sideMenuCollapsed]: isCollapsed,\n\t\t}\"\n\t>\n\t\t<div\n\t\t\tid=\"collapse-change-button\"\n\t\t\t:class=\"['clickable', $style.sideMenuCollapseButton]\"\n\t\t\t@click=\"toggleCollapse\"\n\t\t>\n\t\t\t<n8n-icon v-if=\"isCollapsed\" icon=\"chevron-right\" size=\"xsmall\" class=\"ml-5xs\" />\n\t\t\t<n8n-icon v-else icon=\"chevron-left\" size=\"xsmall\" class=\"mr-5xs\" />\n\t\t</div>\n\t\t<n8n-menu :items=\"mainMenuItems\" :collapsed=\"isCollapsed\" @select=\"handleSelect\">\n\t\t\t<template #header>\n\t\t\t\t<div :class=\"$style.logo\">\n\t\t\t\t\t<img :src=\"logoPath\" data-test-id=\"n8n-logo\" :class=\"$style.icon\" alt=\"n8n\" />\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #beforeLowerMenu>\n\t\t\t\t<ExecutionsUsage\n\t\t\t\t\t:cloud-plan-data=\"currentPlanAndUsageData\"\n\t\t\t\t\tv-if=\"fullyExpanded && userIsTrialing\"\n\t\t\t/></template>\n\t\t\t<template #menuSuffix>\n\t\t\t\t<div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"hasVersionUpdates\"\n\t\t\t\t\t\tdata-test-id=\"version-updates-panel-button\"\n\t\t\t\t\t\t:class=\"$style.updates\"\n\t\t\t\t\t\t@click=\"openUpdatesPanel\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div :class=\"$style.giftContainer\">\n\t\t\t\t\t\t\t<GiftNotificationIcon />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<n8n-text\n\t\t\t\t\t\t\t:class=\"{ ['ml-xs']: true, [$style.expanded]: fullyExpanded }\"\n\t\t\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ nextVersions.length > 99 ? '99+' : nextVersions.length }} update{{\n\t\t\t\t\t\t\t\tnextVersions.length > 1 ? 's' : ''\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<MainSidebarSourceControl :is-collapsed=\"isCollapsed\" />\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template #footer v-if=\"showUserArea\">\n\t\t\t\t<div :class=\"$style.userArea\">\n\t\t\t\t\t<div class=\"ml-3xs\" data-test-id=\"main-sidebar-user-menu\">\n\t\t\t\t\t\t<!-- This dropdown is only enabled when sidebar is collapsed -->\n\t\t\t\t\t\t<el-dropdown\n\t\t\t\t\t\t\t:disabled=\"!isCollapsed\"\n\t\t\t\t\t\t\tplacement=\"right-end\"\n\t\t\t\t\t\t\ttrigger=\"click\"\n\t\t\t\t\t\t\t@command=\"onUserActionToggle\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div :class=\"{ [$style.avatar]: true, ['clickable']: isCollapsed }\">\n\t\t\t\t\t\t\t\t<n8n-avatar\n\t\t\t\t\t\t\t\t\t:firstName=\"usersStore.currentUser.firstName\"\n\t\t\t\t\t\t\t\t\t:lastName=\"usersStore.currentUser.lastName\"\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<template #dropdown>\n\t\t\t\t\t\t\t\t<el-dropdown-menu>\n\t\t\t\t\t\t\t\t\t<el-dropdown-item command=\"settings\">\n\t\t\t\t\t\t\t\t\t\t{{ $locale.baseText('settings') }}\n\t\t\t\t\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t\t\t\t\t<el-dropdown-item command=\"logout\">\n\t\t\t\t\t\t\t\t\t\t{{ $locale.baseText('auth.signout') }}\n\t\t\t\t\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t\t\t\t</el-dropdown-menu>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</el-dropdown>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\t:class=\"{ ['ml-2xs']: true, [$style.userName]: true, [$style.expanded]: fullyExpanded }\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<n8n-text size=\"small\" :bold=\"true\" color=\"text-dark\">{{\n\t\t\t\t\t\t\tusersStore.currentUser.fullName\n\t\t\t\t\t\t}}</n8n-text>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div :class=\"{ [$style.userActions]: true, [$style.expanded]: fullyExpanded }\">\n\t\t\t\t\t\t<n8n-action-dropdown\n\t\t\t\t\t\t\t:items=\"userMenuItems\"\n\t\t\t\t\t\t\tplacement=\"top-start\"\n\t\t\t\t\t\t\tdata-test-id=\"user-menu\"\n\t\t\t\t\t\t\t@select=\"onUserActionToggle\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</n8n-menu>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { CloudPlanAndUsageData, IExecutionResponse, IMenuItem, IVersion } from '@/Interface';\nimport GiftNotificationIcon from './GiftNotificationIcon.vue';\n\nimport { genericHelpers } from '@/mixins/genericHelpers';\nimport { useMessage } from '@/composables/useMessage';\nimport { workflowHelpers } from '@/mixins/workflowHelpers';\nimport { workflowRun } from '@/mixins/workflowRun';\n\nimport { ABOUT_MODAL_KEY, VERSIONS_MODAL_KEY, VIEWS } from '@/constants';\nimport { userHelpers } from '@/mixins/userHelpers';\nimport { debounceHelper } from '@/mixins/debounce';\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useRootStore } from '@/stores/n8nRoot.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useUsersStore } from '@/stores/users.store';\nimport { useVersionsStore } from '@/stores/versions.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { isNavigationFailure } from 'vue-router';\nimport ExecutionsUsage from '@/components/ExecutionsUsage.vue';\nimport MainSidebarSourceControl from '@/components/MainSidebarSourceControl.vue';\nimport { hasPermission } from '@/rbac/permissions';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\n\nexport default defineComponent({\n\tname: 'MainSidebar',\n\tcomponents: {\n\t\tGiftNotificationIcon,\n\t\tExecutionsUsage,\n\t\tMainSidebarSourceControl,\n\t},\n\tmixins: [genericHelpers, workflowHelpers, workflowRun, userHelpers, debounceHelper],\n\tsetup(props, ctx) {\n\t\tconst externalHooks = useExternalHooks();\n\n\t\treturn {\n\t\t\texternalHooks,\n\t\t\t...useMessage(),\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-misused-promises\n\t\t\t...workflowRun.setup?.(props, ctx),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbasePath: '',\n\t\t\tfullyExpanded: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseRootStore,\n\t\t\tuseSettingsStore,\n\t\t\tuseUIStore,\n\t\t\tuseUsersStore,\n\t\t\tuseVersionsStore,\n\t\t\tuseWorkflowsStore,\n\t\t\tuseCloudPlanStore,\n\t\t\tuseSourceControlStore,\n\t\t),\n\t\tlogoPath(): string {\n\t\t\tif (this.isCollapsed) return this.basePath + 'n8n-logo-collapsed.svg';\n\n\t\t\treturn this.basePath + this.uiStore.logo;\n\t\t},\n\t\thasVersionUpdates(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.settingsStore.settings.releaseChannel === 'stable' &&\n\t\t\t\tthis.versionsStore.hasVersionUpdates\n\t\t\t);\n\t\t},\n\t\tnextVersions(): IVersion[] {\n\t\t\treturn this.versionsStore.nextVersions;\n\t\t},\n\t\tisCollapsed(): boolean {\n\t\t\treturn this.uiStore.sidebarMenuCollapsed;\n\t\t},\n\t\tcanUserAccessSettings(): boolean {\n\t\t\tconst accessibleRoute = this.findFirstAccessibleSettingsRoute();\n\t\t\treturn accessibleRoute !== null;\n\t\t},\n\t\tshowUserArea(): boolean {\n\t\t\treturn hasPermission(['authenticated']);\n\t\t},\n\t\tworkflowExecution(): IExecutionResponse | null {\n\t\t\treturn this.workflowsStore.getWorkflowExecution;\n\t\t},\n\t\tuserMenuItems(): object[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: 'settings',\n\t\t\t\t\tlabel: this.$locale.baseText('settings'),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'logout',\n\t\t\t\t\tlabel: this.$locale.baseText('auth.signout'),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\tmainMenuItems(): IMenuItem[] {\n\t\t\tconst items: IMenuItem[] = [];\n\t\t\tconst injectedItems = this.uiStore.sidebarMenuItems;\n\n\t\t\tconst workflows: IMenuItem = {\n\t\t\t\tid: 'workflows',\n\t\t\t\ticon: 'network-wired',\n\t\t\t\tlabel: this.$locale.baseText('mainSidebar.workflows'),\n\t\t\t\tposition: 'top',\n\t\t\t\tactivateOnRouteNames: [VIEWS.WORKFLOWS],\n\t\t\t};\n\n\t\t\tif (this.sourceControlStore.preferences.branchReadOnly) {\n\t\t\t\tworkflows.secondaryIcon = {\n\t\t\t\t\tname: 'lock',\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontent: this.$locale.baseText('mainSidebar.workflows.readOnlyEnv.tooltip'),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (injectedItems && injectedItems.length > 0) {\n\t\t\t\tfor (const item of injectedItems) {\n\t\t\t\t\titems.push({\n\t\t\t\t\t\tid: item.id,\n\t\t\t\t\t\ticon: item.icon || '',\n\t\t\t\t\t\tlabel: item.label || '',\n\t\t\t\t\t\tposition: item.position,\n\t\t\t\t\t\ttype: item.properties?.href ? 'link' : 'regular',\n\t\t\t\t\t\tproperties: item.properties,\n\t\t\t\t\t} as IMenuItem);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst regularItems: IMenuItem[] = [\n\t\t\t\tworkflows,\n\t\t\t\t{\n\t\t\t\t\tid: 'templates',\n\t\t\t\t\ticon: 'box-open',\n\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.templates'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.settingsStore.isTemplatesEnabled,\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.TEMPLATES],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'credentials',\n\t\t\t\t\ticon: 'key',\n\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.credentials'),\n\t\t\t\t\tcustomIconSize: 'medium',\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.CREDENTIALS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'variables',\n\t\t\t\t\ticon: 'variable',\n\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.variables'),\n\t\t\t\t\tcustomIconSize: 'medium',\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.VARIABLES],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'executions',\n\t\t\t\t\ticon: 'tasks',\n\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.executions'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.EXECUTIONS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'cloud-admin',\n\t\t\t\t\ttype: 'link',\n\t\t\t\t\tposition: 'bottom',\n\t\t\t\t\tlabel: 'Admin Panel',\n\t\t\t\t\ticon: 'home',\n\t\t\t\t\tavailable: this.settingsStore.isCloudDeployment && hasPermission(['instanceOwner']),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings',\n\t\t\t\t\ticon: 'cog',\n\t\t\t\t\tlabel: this.$locale.baseText('settings'),\n\t\t\t\t\tposition: 'bottom',\n\t\t\t\t\tavailable: this.canUserAccessSettings && this.usersStore.currentUser !== null,\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.USERS_SETTINGS, VIEWS.API_SETTINGS, VIEWS.PERSONAL_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'help',\n\t\t\t\t\ticon: 'question',\n\t\t\t\t\tlabel: 'Help',\n\t\t\t\t\tposition: 'bottom',\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'quickstart',\n\t\t\t\t\t\t\ticon: 'video',\n\t\t\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.helpMenuItems.quickstart'),\n\t\t\t\t\t\t\ttype: 'link',\n\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\thref: 'https://www.youtube.com/watch?v=1MwSoB0gnM4',\n\t\t\t\t\t\t\t\tnewWindow: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'docs',\n\t\t\t\t\t\t\ticon: 'book',\n\t\t\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.helpMenuItems.documentation'),\n\t\t\t\t\t\t\ttype: 'link',\n\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\thref: 'https://docs.n8n.io?utm_source=n8n_app&utm_medium=app_sidebar',\n\t\t\t\t\t\t\t\tnewWindow: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'forum',\n\t\t\t\t\t\t\ticon: 'users',\n\t\t\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.helpMenuItems.forum'),\n\t\t\t\t\t\t\ttype: 'link',\n\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\thref: 'https://community.n8n.io?utm_source=n8n_app&utm_medium=app_sidebar',\n\t\t\t\t\t\t\t\tnewWindow: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'examples',\n\t\t\t\t\t\t\ticon: 'graduation-cap',\n\t\t\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.helpMenuItems.course'),\n\t\t\t\t\t\t\ttype: 'link',\n\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\thref: 'https://www.youtube.com/watch?v=1MwSoB0gnM4',\n\t\t\t\t\t\t\t\tnewWindow: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'about',\n\t\t\t\t\t\t\ticon: 'info',\n\t\t\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.aboutN8n'),\n\t\t\t\t\t\t\tposition: 'bottom',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t];\n\t\t\treturn [...items, ...regularItems];\n\t\t},\n\t\tuserIsTrialing(): boolean {\n\t\t\treturn this.cloudPlanStore.userIsTrialing;\n\t\t},\n\t\tcurrentPlanAndUsageData(): CloudPlanAndUsageData | null {\n\t\t\tconst planData = this.cloudPlanStore.currentPlanData;\n\t\t\tconst usage = this.cloudPlanStore.currentUsageData;\n\t\t\tif (!planData || !usage) return null;\n\t\t\treturn {\n\t\t\t\t...planData,\n\t\t\t\tusage,\n\t\t\t};\n\t\t},\n\t},\n\tasync mounted() {\n\t\tthis.basePath = this.rootStore.baseUrl;\n\t\tif (this.$refs.user) {\n\t\t\tvoid this.externalHooks.run('mainSidebar.mounted', {\n\t\t\t\tuserRef: this.$refs.user as Element,\n\t\t\t});\n\t\t}\n\n\t\tvoid this.$nextTick(() => {\n\t\t\tif (window.innerWidth < 900 || this.uiStore.isNodeView) {\n\t\t\t\tthis.uiStore.sidebarMenuCollapsed = true;\n\t\t\t} else {\n\t\t\t\tthis.uiStore.sidebarMenuCollapsed = false;\n\t\t\t}\n\n\t\t\tthis.fullyExpanded = !this.isCollapsed;\n\t\t});\n\t},\n\tcreated() {\n\t\twindow.addEventListener('resize', this.onResize);\n\t},\n\tbeforeUnmount() {\n\t\twindow.removeEventListener('resize', this.onResize);\n\t},\n\tmethods: {\n\t\ttrackHelpItemClick(itemType: string) {\n\t\t\tthis.$telemetry.track('User clicked help resource', {\n\t\t\t\ttype: itemType,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t});\n\t\t},\n\t\tasync onUserActionToggle(action: string) {\n\t\t\tswitch (action) {\n\t\t\t\tcase 'logout':\n\t\t\t\t\tthis.onLogout();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings':\n\t\t\t\t\tvoid this.$router.push({ name: VIEWS.PERSONAL_SETTINGS });\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tonLogout() {\n\t\t\tvoid this.$router.push({ name: VIEWS.SIGNOUT });\n\t\t},\n\t\ttoggleCollapse() {\n\t\t\tthis.uiStore.toggleSidebarMenuCollapse();\n\t\t\t// When expanding, delay showing some element to ensure smooth animation\n\t\t\tif (!this.isCollapsed) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.fullyExpanded = !this.isCollapsed;\n\t\t\t\t}, 300);\n\t\t\t} else {\n\t\t\t\tthis.fullyExpanded = !this.isCollapsed;\n\t\t\t}\n\t\t},\n\t\topenUpdatesPanel() {\n\t\t\tthis.uiStore.openModal(VERSIONS_MODAL_KEY);\n\t\t},\n\t\tasync handleSelect(key: string) {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'workflows': {\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.WORKFLOWS) {\n\t\t\t\t\t\tthis.goToRoute({ name: VIEWS.WORKFLOWS });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'templates': {\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.TEMPLATES) {\n\t\t\t\t\t\tthis.goToRoute({ name: VIEWS.TEMPLATES });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'credentials': {\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.CREDENTIALS) {\n\t\t\t\t\t\tthis.goToRoute({ name: VIEWS.CREDENTIALS });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'variables': {\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.VARIABLES) {\n\t\t\t\t\t\tthis.goToRoute({ name: VIEWS.VARIABLES });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'executions': {\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.EXECUTIONS) {\n\t\t\t\t\t\tthis.goToRoute({ name: VIEWS.EXECUTIONS });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'settings': {\n\t\t\t\t\tconst defaultRoute = this.findFirstAccessibleSettingsRoute();\n\t\t\t\t\tif (defaultRoute) {\n\t\t\t\t\t\tconst route = this.$router.resolve({ name: defaultRoute });\n\t\t\t\t\t\tif (this.$router.currentRoute.name !== defaultRoute) {\n\t\t\t\t\t\t\tthis.goToRoute(route.path);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'about': {\n\t\t\t\t\tthis.trackHelpItemClick('about');\n\t\t\t\t\tthis.uiStore.openModal(ABOUT_MODAL_KEY);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'cloud-admin': {\n\t\t\t\t\tthis.cloudPlanStore.redirectToDashboard();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'quickstart':\n\t\t\t\tcase 'docs':\n\t\t\t\tcase 'forum':\n\t\t\t\tcase 'examples': {\n\t\t\t\t\tthis.trackHelpItemClick(key);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tgoToRoute(route: string | { name: string }) {\n\t\t\tthis.$router.push(route).catch((failure) => {\n\t\t\t\tconsole.log(failure);\n\t\t\t\t// Catch navigation failures caused by route guards\n\t\t\t\tif (!isNavigationFailure(failure)) {\n\t\t\t\t\tconsole.error(failure);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfindFirstAccessibleSettingsRoute() {\n\t\t\tconst settingsRoutes = this.$router\n\t\t\t\t.getRoutes()\n\t\t\t\t.find((route) => route.path === '/settings')!\n\t\t\t\t.children.map((route) => route.name || '');\n\n\t\t\tlet defaultSettingsRoute = null;\n\t\t\tfor (const route of settingsRoutes) {\n\t\t\t\tif (this.canUserAccessRouteByName(route)) {\n\t\t\t\t\tdefaultSettingsRoute = route;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn defaultSettingsRoute;\n\t\t},\n\t\tonResize(event: UIEvent) {\n\t\t\tvoid this.callDebounced('onResizeEnd', { debounceTime: 100 }, event);\n\t\t},\n\t\tasync onResizeEnd(event: UIEvent) {\n\t\t\tconst browserWidth = (event.target as Window).outerWidth;\n\t\t\tawait this.checkWidthAndAdjustSidebar(browserWidth);\n\t\t},\n\t\tasync checkWidthAndAdjustSidebar(width: number) {\n\t\t\tif (width < 900) {\n\t\t\t\tthis.uiStore.sidebarMenuCollapsed = true;\n\t\t\t\tawait this.$nextTick();\n\t\t\t\tthis.fullyExpanded = !this.isCollapsed;\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.sideMenu {\n\tposition: relative;\n\theight: 100%;\n\tborder-right: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\ttransition: width 150ms ease-in-out;\n\twidth: $sidebar-expanded-width;\n\t.logo {\n\t\theight: $header-height;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: var(--spacing-xs);\n\n\t\timg {\n\t\t\tposition: relative;\n\t\t\tleft: 1px;\n\t\t\theight: 20px;\n\t\t}\n\t}\n\n\t&.sideMenuCollapsed {\n\t\twidth: $sidebar-width;\n\n\t\t.logo img {\n\t\t\tleft: 0;\n\t\t}\n\t}\n}\n\n.sideMenuCollapseButton {\n\tposition: absolute;\n\tright: -10px;\n\ttop: 50%;\n\tz-index: 999;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tcolor: var(--color-text-base);\n\tbackground-color: var(--color-foreground-xlight);\n\twidth: 20px;\n\theight: 20px;\n\tborder: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\tborder-radius: 50%;\n\n\t&:hover {\n\t\tcolor: var(--color-primary-shade-1);\n\t}\n}\n\n.updates {\n\tdisplay: flex;\n\talign-items: center;\n\tcursor: pointer;\n\tpadding: var(--spacing-2xs) var(--spacing-l);\n\tmargin: var(--spacing-2xs) 0 0;\n\n\tsvg {\n\t\tcolor: var(--color-text-base) !important;\n\t}\n\tspan {\n\t\tdisplay: none;\n\t\t&.expanded {\n\t\t\tdisplay: initial;\n\t\t}\n\t}\n\n\t&:hover {\n\t\t&,\n\t\t& svg {\n\t\t\tcolor: var(--color-text-dark) !important;\n\t\t}\n\t}\n}\n\n.userArea {\n\tdisplay: flex;\n\tpadding: var(--spacing-xs);\n\talign-items: center;\n\theight: 60px;\n\tborder-top: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\n\t.userName {\n\t\tdisplay: none;\n\t\toverflow: hidden;\n\t\twidth: 100px;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\n\t\t&.expanded {\n\t\t\tdisplay: initial;\n\t\t}\n\n\t\tspan {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t}\n\n\t.userActions {\n\t\tdisplay: none;\n\n\t\t&.expanded {\n\t\t\tdisplay: initial;\n\t\t}\n\t}\n}\n\n@media screen and (max-height: 470px) {\n\t:global(#help) {\n\t\tdisplay: none;\n\t}\n}\n</style>\n"],"names":["_hoisted_2","_createVNode","_component_font_awesome_icon","_createElementVNode","PROGRESS_BAR_MINIMUM_THRESHOLD","now","DateTime","daysLeftOnTrial","computed","days","getPlanExpirationDate","isTrialExpired","_a","props","trialEndsAt","trialHasExecutionsLeft","currentExecutions","usedExecutions","executionsQuota","currentExecutionsWithThreshold","threshold","maxExecutions","onUpgradeClicked","useUIStore","responseStatuses","useRouter","loadingService","useLoadingService","uiStore","sourceControlStore","useSourceControlStore","toast","useToast","i18n","useI18n","eventBus","createEventBus","tooltipOpenDelay","ref","currentBranch","sourceControlAvailable","hasPermission","pushWorkfolder","status","SOURCE_CONTROL_PUSH_MODAL_KEY","error","pullWorkfolder","file","incompleteFileTypes","nextTick","sourceControlEventBus","errorResponse","SOURCE_CONTROL_PULL_MODAL_KEY","_sfc_main","defineComponent","GiftNotificationIcon","ExecutionsUsage","MainSidebarSourceControl","genericHelpers","workflowHelpers","workflowRun","userHelpers","debounceHelper","ctx","useExternalHooks","useMessage","_b","mapStores","useRootStore","useSettingsStore","useUsersStore","useVersionsStore","useWorkflowsStore","useCloudPlanStore","items","injectedItems","workflows","VIEWS","item","regularItems","planData","usage","itemType","action","VERSIONS_MODAL_KEY","key","defaultRoute","route","ABOUT_MODAL_KEY","failure","isNavigationFailure","settingsRoutes","defaultSettingsRoute","event","browserWidth","width","_hoisted_1","_resolveComponent","_openBlock","_createElementBlock","_normalizeClass","_ctx","_cache","args","_createBlock","_component_n8n_icon","_component_n8n_menu","_createSlots","_withCtx","_component_ExecutionsUsage","_createCommentVNode","_component_GiftNotificationIcon","_component_n8n_text","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","_component_n8n_avatar","_component_n8n_action_dropdown"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{fl as E,b9 as w,c_ as D,ah as H,eH as M,k as V,B,ab as W,a4 as z,ba as G,z as U,S as $,eN as K,fX as F,fY as j,fZ as X,f_ as Q,d4 as Z,u as q,f$ as J,g0 as ee,_ as te}from"./n8n-ZKR6bms9.js";import{a2 as x,k as oe}from"./index
|
|
2
|
-
//# sourceMappingURL=NodeCreation-
|
|
1
|
+
import{fl as E,b9 as w,c_ as D,ah as H,eH as M,k as V,B,ab as W,a4 as z,ba as G,z as U,S as $,eN as K,fX as F,fY as j,fZ as X,f_ as Q,d4 as Z,u as q,f$ as J,g0 as ee,_ as te}from"./n8n-ZKR6bms9.js";import{a2 as x,k as oe}from"./index-RXjMHIPR.js";import{u as L,t as ne,s as se}from"./NodeView-fUdpq96X.js";import{e as re,a as ae,G as ce,aD as ie,Z as de,ag as le,l as P,m as Y,I as g,p as R,T as N,O as v,Q as ue,M as pe,u as fe,aF as _e}from"./vendor-2CfOYFi2.js";const Ne=()=>{const A=L(),l=ae(),S=[E.PLUS_ENDPOINT,E.NODE_CONNECTION_ACTION,E.NODE_CONNECTION_DROP],m=re(()=>({actions:(l==null?void 0:l.proxy.$locale.baseText("nodeCreator.actionsCategory.actions"))??"",triggers:(l==null?void 0:l.proxy.$locale.baseText("nodeCreator.actionsCategory.triggers"))??""}));function f(t){const e=[z,G];return A.mergedNodes.filter(n=>e.some(s=>s===n.name)).map(n=>{const s=ne(n,t,"action");if(s.type==="action"){const c=`nodeCreator.actionsPlaceholderNode.${n.name.replace("n8n-nodes-base.","")}`,d=l==null?void 0:l.proxy.$locale.baseText(c);d!==c&&(s.properties.displayName=d)}return s})}function k(t,e){return t.filter(o=>o.type==="action"&&o.properties.codex.categories.includes(e))}function y(t){var r,c,d,p;const e=se([...t]),o=new Set;for(const i of e){if(i.type!=="action")continue;const _=(c=(r=i.properties)==null?void 0:r.codex)==null?void 0:c.label;o.add(_)}if(o.size<=1)return e;const n=new Map;for(let i=0;i<e.length;i++){const _=e[i];if(_.type!=="action")continue;const T=(p=(d=_.properties)==null?void 0:d.codex)==null?void 0:p.label;n.has(T)||n.set(T,i)}let s=0;for(const i of o){const _={uuid:i,type:"label",key:i,subcategory:e[0].key,properties:{key:i}},T=n.get(i)+s;e.splice(T,0,_),s++}return e}function b(t,e,o=!0){const n=k(t,e);return o?y(n):n}function O(t){const e=t.displayOptions,o=Object.keys((e==null?void 0:e.show)||{}).reduce((n,s)=>{var r,c;return n[s]=(c=(r=e==null?void 0:e.show)==null?void 0:r[s])==null?void 0:c[0],n},{});return{name:t.displayName,key:t.name,value:{...t.values,...o}}}function h(t){const{selectedView:e,openSource:o}=L(),{workflowTriggerNodes:n}=B(),s=t.some(i=>U().isTriggerNode(i.type)),r=n.length>0,c=e===K,d=t.every(i=>i.type===$);return!S.includes(o)&&!s&&!r&&c&&!d}function C(t){const{allNodes:e}=B(),o=[F,j,X,Q],n=e.find(r=>r.type===D)===void 0;return t.some(r=>o.includes(r.type))&&n}function I(t){if(t.length===0)return{nodes:[],connections:[]};const e=[],o=[],n=t.find(s=>s.type!==w);return n&&(n.openDetail=!0),C(t)?(t.unshift({type:D,isAutoAdd:!0}),o.push({from:{nodeIndex:0},to:{nodeIndex:1}})):h(t)&&(t.unshift({type:w,isAutoAdd:!0}),o.push({from:{nodeIndex:0},to:{nodeIndex:1}})),t.forEach((s,r)=>{switch(e.push(s),s.type){case H:{const c=r,d=c+1;e.push({type:M,isAutoAdd:!0,name:V.baseText("nodeView.replaceMe")}),o.push({from:{nodeIndex:c,outputIndex:1},to:{nodeIndex:d}},{from:{nodeIndex:d},to:{nodeIndex:c}});break}}}),{nodes:e,connections:o}}function a(t,e,o=""){const{$onAction:n}=B(),s=n(({name:r,after:c,store:{setLastNodeParameters:d},args:p})=>{r!=="addNode"||p[0].type!==t.key||c(()=>{d(t),e&&u(t,e,o),s()})});return s}function u(t,e,o){const n={node_type:t.key,action:t.name,source_mode:o.toLowerCase(),resource:t.value.resource||""};W().run("nodeCreateList.addAction",n),e==null||e.trackNodesPanel("nodeCreateList.addAction",n)}return{actionsCategoryLocales:m,getPlaceholderTriggerActions:f,parseCategoryActions:b,getAddedNodesAndConnections:I,getActionData:O,setAddedNodeActionParameters:a}},ye=ce({__name:"NodeCreation",props:{nodeViewScale:{},createNodeActive:{type:Boolean,default:!1}},emits:["addNodes","toggleNodeCreator"],setup(A,{emit:l}){const S=A,m=ie(async()=>Z(()=>import("./NodeCreator-zDLKC62A.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43]))),f=de({showStickyButton:!1}),k=q(),{getAddedNodesAndConnections:y}=Ne();function b(a){const u=a.target;f.showStickyButton=!0;const t=e=>{if(u){const o=u.getBoundingClientRect(),n=o.height,s=o.width,r=o.left,c=r+s,d=o.top,p=d+n;e.pageX>r&&e.pageX<c&&e.pageY>d&&e.pageY<p||(f.showStickyButton=!1,document.removeEventListener("mousemove",t,!1))}};document.addEventListener("mousemove",t,!1)}function O(){l("toggleNodeCreator",{source:E.ADD_NODE_BUTTON,createNodeActive:!0})}function h(){document.activeElement&&document.activeElement.blur();const a=[...k.nodeViewOffsetPosition],u=oe(S.nodeViewScale,a);u[0]-=J/2,u[1]-=ee/2,l("addNodes",y([{type:$,position:u}]))}function C(){l("toggleNodeCreator",{createNodeActive:!1})}function I(a){l("addNodes",y(a.map(u=>({type:u})))),C()}return(a,u)=>{const t=le("n8n-icon-button");return P(),Y("div",null,[a.createNodeActive?ue("",!0):(P(),Y("div",{key:0,class:g([a.$style.nodeButtonsWrapper,f.showStickyButton?a.$style.noEvents:""]),onMouseenter:b},[R("div",{class:g(a.$style.nodeCreatorButton),"data-test-id":"node-creator-plus-button"},[N(x,{label:a.$locale.baseText("nodeView.openNodesPanel"),shortcut:{keys:["Tab"]},placement:"left"},{default:v(()=>[N(t,{size:"xlarge",icon:"plus",type:"tertiary",class:g(a.$style.nodeCreatorPlus),onClick:O},null,8,["class"])]),_:1},8,["label"]),R("div",{class:g([a.$style.addStickyButton,f.showStickyButton?a.$style.visibleButton:""]),onClick:h,"data-test-id":"add-sticky-button"},[N(x,{label:a.$locale.baseText("nodeView.addStickyHint"),shortcut:{keys:["s"],shiftKey:!0},placement:"left"},{default:v(()=>[N(t,{type:"tertiary",icon:["far","note-sticky"]})]),_:1},8,["label"])],2)],2)],34)),(P(),pe(_e,null,{default:v(()=>[N(fe(m),{active:a.createNodeActive,onNodeTypeSelected:I,onCloseNodeCreator:C},null,8,["active"])]),_:1}))])}}}),Ce="_nodeButtonsWrapper_zpked_5",Te="_addStickyButton_zpked_14",ge="_visibleButton_zpked_21",Ee="_noEvents_zpked_26",Ae="_nodeCreatorButton_zpked_30",Se="_nodeCreatorPlus_zpked_47",me={nodeButtonsWrapper:Ce,addStickyButton:Te,visibleButton:ge,noEvents:Ee,nodeCreatorButton:Ae,nodeCreatorPlus:Se},ke={$style:me},be=te(ye,[["__cssModules",ke]]),Pe=Object.freeze(Object.defineProperty({__proto__:null,default:be},Symbol.toStringTag,{value:"Module"}));export{Pe as N,Ne as u};
|
|
2
|
+
//# sourceMappingURL=NodeCreation-RvlbocPg.js.map
|
|
3
3
|
function __vite__mapDeps(indexes) {
|
|
4
4
|
if (!__vite__mapDeps.viteFileDeps) {
|
|
5
|
-
__vite__mapDeps.viteFileDeps = ["assets/NodeCreator-
|
|
5
|
+
__vite__mapDeps.viteFileDeps = ["assets/NodeCreator-zDLKC62A.js","assets/n8n-ZKR6bms9.js","assets/vendor-2CfOYFi2.js","assets/lodash-es-s_m9YyW7.js","assets/axios-QLjAsgXu.js","assets/flatted-jPn12Tq4.js","assets/esprima-next-ulPLCZ1Z.js","assets/luxon-ZRIU05qF.js","assets/pinia-jX93eZRS.js","assets/@vueuse/core-viEZCtbZ.js","assets/uuid-McvpxQtQ.js","assets/vue-i18n-2T2QU_2c.js","assets/@n8n/permissions-8yMqUF1Y.js","assets/n8n-VwjxGD6F.css","assets/NodeView-fUdpq96X.js","assets/@jsplumb/core-MKwKlGip.js","assets/@jsplumb/util-DR0SB56A.js","assets/@jsplumb/common-Q5_tv_GT.js","assets/index-RXjMHIPR.js","assets/prettier-s3fE3Qyr.js","assets/codemirror-lang-html-n8n-qoVuUIQR.js","assets/@n8n/codemirror-lang-sql-zd5sOTQ9.js","assets/@lezer/common-aP6EPErF.js","assets/@jsplumb/connector-bezier-3dWY17R5.js","assets/@jsplumb/browser-ui-QL7QI0sV.js","assets/codemirror-lang-n8n-expression-qGXLqLTr.js","assets/fast-json-stable-stringify-RhDdw38P.js","assets/timeago.js--Bumj2r9.js","assets/qrcode.vue-f7Vn5Pkq.js","assets/vue3-touch-events-_RfbPMOD.js","assets/chart.js-JtqvIvkt.js","assets/index-G0m9nZxH.css","assets/useExecutionDebugging-Yog1CJXv.js","assets/file-saver-PQ97zATM.js","assets/vue-json-pretty-_sFPiXe-.js","assets/RunDataAi-dgEyN_Yl.js","assets/vue-markdown-render-arvjXOrF.js","assets/useCopyToClipboard--_VQNyU0.js","assets/copy-to-clipboard-w-_qJz-n.js","assets/RunDataAi-lJTQYpdI.css","assets/workflowActivate-IRvCsxq5.js","assets/collaboration.store-ba_Vl3Ko.js","assets/NodeView-gCoGYjvL.css","assets/NodeCreator-yOn8Fne3.css"]
|
|
6
6
|
}
|
|
7
7
|
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"idAqCO,MAAMA,GAAa,IAAM,CAC/B,MAAMC,EAAmBC,IACnBC,EAAWC,KAEXC,EAAwB,CAC7BC,EAA0B,cAC1BA,EAA0B,uBAC1BA,EAA0B,sBAGrBC,EAAyBC,GAAS,KAChC,CACN,SAASL,GAAA,YAAAA,EAAU,MAAM,QAAQ,SAAS,yCAA0C,GACpF,UAAUA,GAAA,YAAAA,EAAU,MAAM,QAAQ,SAAS,0CAA2C,IAEvF,EAED,SAASM,EAA6BC,EAAqB,CACpD,MAAAC,EAAQ,CAACC,EAAmBC,CAA0B,EAqBrD,OAnBkBZ,EAAiB,YACxC,OAAQa,GAASH,EAAM,KAAMI,GAAMA,IAAMD,EAAK,IAAI,CAAC,EACnD,IAAKA,GAAS,CACd,MAAME,EAAcC,GAAkBH,EAAMJ,EAAa,QAAQ,EAE7D,GAAAM,EAAY,OAAS,SAAU,CAE5B,MAAAE,EAAY,sCADDJ,EAAK,KAAK,QAAQ,kBAAmB,EAAE,CACQ,GAC1DK,EAAkBhB,GAAA,YAAAA,EAAU,MAAM,QAAQ,SAASe,GAIrDC,IAAoBD,IACvBF,EAAY,WAAW,YAAcG,EAEvC,CACO,OAAAH,CAAA,CACP,CAGH,CAES,SAAAI,EAAsBC,EAA6BC,EAAkB,CAC7E,OAAOD,EAAM,OACXE,GAASA,EAAK,OAAS,UAAYA,EAAK,WAAW,MAAM,WAAW,SAASD,CAAQ,EAExF,CAEA,SAASE,EAAoBH,EAAmD,aAC/E,MAAMI,EAAkBC,GAAuB,CAAC,GAAGL,CAAK,CAAC,EACnDM,MAAgB,IAGtB,UAAWC,KAAUH,EAAiB,CACrC,GAAIG,EAAO,OAAS,SAAU,SACxB,MAAAC,GAAQC,GAAAC,EAAAH,EAAO,aAAP,YAAAG,EAAmB,QAAnB,YAAAD,EAA0B,MACxCH,EAAU,IAAIE,CAAK,CACpB,CAEA,GAAIF,EAAU,MAAQ,EAAU,OAAAF,EAG1B,MAAAO,MAAoB,IAG1B,QAAS,EAAI,EAAG,EAAIP,EAAgB,OAAQ,IAAK,CAC1C,MAAAG,EAASH,EAAgB,CAAC,EAChC,GAAIG,EAAO,OAAS,SAAU,SACxB,MAAAC,GAAQI,GAAAC,EAAAN,EAAO,aAAP,YAAAM,EAAmB,QAAnB,YAAAD,EAA0B,MACnCD,EAAc,IAAIH,CAAK,GACbG,EAAA,IAAIH,EAAO,CAAC,CAE5B,CAGA,IAAIM,EAAiB,EAGrB,UAAWN,KAASF,EAAW,CAC9B,MAAMS,EAA+B,CACpC,KAAMP,EACN,KAAM,QACN,IAAKA,EACL,YAAaJ,EAAgB,CAAC,EAAE,IAChC,WAAY,CACX,IAAKI,CACN,GAGKQ,EAAcL,EAAc,IAAIH,CAAK,EAAKM,EAChCV,EAAA,OAAOY,EAAa,EAAGD,CAAQ,EAC/CD,GACD,CAEO,OAAAV,CACR,CAEA,SAASa,EACRC,EACAjB,EACAkB,EAAa,GACZ,CACK,MAAAC,EAAkBrB,EAAsBmB,EAASjB,CAAQ,EAC3D,OAAAkB,EAAmBhB,EAAoBiB,CAAe,EACnDA,CACR,CAEA,SAASC,EAAcC,EAAuD,CAC7E,MAAMC,EAAiBD,EAAW,eAE5BE,EAAoB,OAAO,MAAKD,GAAA,YAAAA,EAAgB,OAAQ,CAAE,GAAE,OACjE,CAACE,EAAkBC,IAA0B,SAC5C,OAAAD,EAAIC,CAAa,GAAIjB,GAAAC,EAAAa,GAAA,YAAAA,EAAgB,OAAhB,YAAAb,EAAuBgB,KAAvB,YAAAjB,EAAwC,GACtDgB,CACR,EACA,CAAC,GAGK,OACN,KAAMH,EAAW,YACjB,IAAKA,EAAW,KAChB,MAAO,CAAE,GAAGA,EAAW,OAAQ,GAAGE,CAAkB,EAEtD,CAEA,SAASG,EAA2BC,EAAkC,CACrE,KAAM,CAAE,aAAAC,EAAc,WAAAC,CAAW,EAAIjD,EAAoB,EACnD,CAAE,qBAAAkD,GAAyBC,IAC3BC,EAAaL,EAAW,KAAMnC,GAASyC,EAAoB,gBAAczC,EAAK,IAAI,CAAC,EACnF0C,EAA0BJ,EAAqB,OAAS,EACxDK,EAAiBP,IAAiBQ,EAClCC,EAAkBV,EAAW,MAAOnC,GAASA,EAAK,OAAS8C,CAAgB,EAKjF,MACC,CAF8BvD,EAAsB,SAAS8C,CAAU,GAGvE,CAACG,GACD,CAACE,GACDC,GACA,CAACE,CAEH,CACA,SAASE,EAAyBZ,EAAkC,CAC7D,MAAE,SAAAa,GAAaT,IAEfU,EAAwB,CAC7BC,EACAC,EACAC,EACAC,CAAA,EAGKC,EACLN,EAAS,KAAMhD,GAASA,EAAK,OAASuD,CAA6B,IAAM,OAG1E,OAFyBpB,EAAW,KAAMnC,GAASiD,EAAsB,SAASjD,EAAK,IAAI,CAAC,GAEjEsD,CAC5B,CAEA,SAASE,EAA4BrB,EAAmD,CACnF,GAAAA,EAAW,SAAW,EACzB,MAAO,CAAE,MAAO,GAAI,YAAa,CAAG,GAGrC,MAAMtC,EAAqB,GACrB4D,EAAqC,GAErCC,EAAiBvB,EAAW,KAAMnC,GAASA,EAAK,OAAS2D,CAAwB,EAEvF,OAAID,IACHA,EAAe,WAAa,IAGzBX,EAAyBZ,CAAU,GACtCA,EAAW,QAAQ,CAAE,KAAMoB,EAA+B,UAAW,GAAM,EAC3EE,EAAY,KAAK,CAChB,KAAM,CAAE,UAAW,CAAE,EACrB,GAAI,CAAE,UAAW,CAAE,EACnB,GACSvB,EAA2BC,CAAU,IAC/CA,EAAW,QAAQ,CAAE,KAAMwB,EAA0B,UAAW,GAAM,EACtEF,EAAY,KAAK,CAChB,KAAM,CAAE,UAAW,CAAE,EACrB,GAAI,CAAE,UAAW,CAAE,EACnB,GAGStB,EAAA,QAAQ,CAACnC,EAAM4D,IAAU,CAGnC,OAFA/D,EAAM,KAAKG,CAAI,EAEPA,EAAK,KAAM,CAClB,KAAK6D,EAA4B,CAChC,MAAMC,EAAsBF,EACtBG,EAAYD,EAAsB,EACxCjE,EAAM,KAAK,CACV,KAAMmE,EACN,UAAW,GACX,KAAMC,EAAK,SAAS,oBAAoB,EACxC,EACWR,EAAA,KACX,CACC,KAAM,CAAE,UAAWK,EAAqB,YAAa,CAAE,EACvD,GAAI,CAAE,UAAWC,CAAU,CAC5B,EACA,CACC,KAAM,CAAE,UAAWA,CAAU,EAC7B,GAAI,CAAE,UAAWD,CAAoB,CACtC,GAED,KACD,CACD,EACA,EAEM,CAAE,MAAAjE,EAAO,YAAA4D,EACjB,CAGA,SAASS,EACRpD,EACAqD,EACAC,EAAW,GACV,CACD,KAAM,CAAE,UAAWC,CAAsB,EAAI9B,EAAkB,EACzD+B,EAAeD,EACpB,CAAC,CAAE,KAAAE,EAAM,MAAAC,EAAO,MAAO,CAAE,sBAAAC,CAAA,EAAyB,KAAAC,KAAW,CACxDH,IAAS,WAAaG,EAAK,CAAC,EAAE,OAAS5D,EAAO,KAClD0D,EAAM,IAAM,CACXC,EAAsB3D,CAAM,EACxBqD,GAA+BQ,EAAA7D,EAAQqD,EAAWC,CAAQ,EAEjDE,GAAA,CACb,CACF,GAGM,OAAAA,CACR,CAES,SAAAK,EAAoB7D,EAA4BqD,EAAsBC,EAAkB,CAChG,MAAMQ,EAAU,CACf,UAAW9D,EAAO,IAClB,OAAQA,EAAO,KACf,YAAasD,EAAS,YAAY,EAClC,SAAWtD,EAAO,MAA0B,UAAY,IAEpD+D,EAAiB,EAAE,IAAI,2BAA4BD,CAAO,EACpDT,GAAA,MAAAA,EAAA,gBAAgB,2BAA4BS,EACxD,CAEO,OACN,uBAAAnF,EACA,6BAAAE,EACA,qBAAA6B,EACA,4BAAAgC,EACA,cAAA5B,EACA,6BAAAsC,CAAA,CAEF,sKCrRMY,EAAcC,GACnB,SAAYC,EAAA,WAAO,2BAA+C,iJAY7DC,EAAQC,GAAS,CACtB,iBAAkB,GAClB,EAEKC,EAAUC,IAEV,CAAE,4BAAA5B,GAAgCtE,KAExC,SAASmG,EAAoBC,EAA0B,CACtD,MAAMC,EAAiBD,EAAa,OAGpCL,EAAM,iBAAmB,GACnB,MAAAO,EAAgBC,GAA+B,CACpD,GAAIF,EAAgB,CACb,MAAAG,EAAgBH,EAAe,wBAC/BI,EAAWD,EAAc,OACzBE,EAAWF,EAAc,MACzBG,EAAkBH,EAAc,KAChCI,EAAiBD,EAAkBD,EACnCG,EAAiBL,EAAc,IAC/BM,EAAgBD,EAAiBJ,EAEtCF,EAAe,MAAQI,GACvBJ,EAAe,MAAQK,GACvBL,EAAe,MAAQM,GACvBN,EAAe,MAAQO,IAEvBf,EAAM,iBAAmB,GAChB,6BAAoB,YAAaO,EAAc,EAAK,EAE/D,GAEQ,0BAAiB,YAAaA,EAAc,EAAK,CAC3D,CAEA,SAASS,GAAkB,CAC1BC,EAAK,oBAAqB,CACzB,OAAQ1G,EAA0B,gBAClC,iBAAkB,GAClB,CACF,CAEA,SAAS2G,GAAgB,CACpB,SAAS,eACX,SAAS,cAA8B,OAGzC,MAAMC,EAA2B,CAAC,GAAGjB,EAAQ,sBAAsB,EAE7DkB,EAAWC,GAAqBC,EAAM,cAAeH,CAAM,EACxDC,EAAA,CAAC,GAAKG,EAAuB,EAC7BH,EAAA,CAAC,GAAKI,GAAwB,EAElCP,EAAA,WAAY1C,EAA4B,CAAC,CAAE,KAAMV,EAAkB,SAAAuD,EAAU,CAAC,CAAC,CACrF,CAEA,SAASK,GAAmB,CAC3BR,EAAK,oBAAqB,CAAE,iBAAkB,EAAO,EACtD,CAEA,SAASS,EAAiBC,EAAqB,CACzCV,EAAA,WAAY1C,EAA4BoD,EAAU,IAAKC,IAAU,CAAE,KAAAA,CAAA,EAAO,CAAC,CAAC,EAChEH,GAClB","names":["useActions","nodeCreatorStore","useNodeCreatorStore","instance","getCurrentInstance","singleNodeOpenSources","NODE_CREATOR_OPEN_SOURCES","actionsCategoryLocales","computed","getPlaceholderTriggerActions","subcategory","nodes","WEBHOOK_NODE_TYPE","SCHEDULE_TRIGGER_NODE_TYPE","node","n","transformed","transformNodeType","localeKey","overwriteLocale","filterActionsCategory","items","category","item","injectActionsLabels","extendedActions","sortNodeCreateElements","labelsSet","action","label","_b","_a","firstIndexMap","_d","_c","insertedLabels","newLabel","insertIndex","parseCategoryActions","actions","withLabels","filteredActions","getActionData","actionItem","displayOptions","displayConditions","acc","showCondition","shouldPrependManualTrigger","addedNodes","selectedView","openSource","workflowTriggerNodes","useWorkflowsStore","hasTrigger","useNodeTypesStore","workflowContainsTrigger","isTriggerPanel","TRIGGER_NODE_CREATOR_VIEW","onlyStickyNodes","STICKY_NODE_TYPE","shouldPrependChatTrigger","allNodes","COMPATIBLE_CHAT_NODES","QA_CHAIN_NODE_TYPE","AGENT_NODE_TYPE","BASIC_CHAIN_NODE_TYPE","OPEN_AI_ASSISTANT_NODE_TYPE","isChatTriggerMissing","MANUAL_CHAT_TRIGGER_NODE_TYPE","getAddedNodesAndConnections","connections","nodeToAutoOpen","MANUAL_TRIGGER_NODE_TYPE","index","SPLIT_IN_BATCHES_NODE_TYPE","splitInBatchesIndex","noOpIndex","NO_OP_NODE_TYPE","i18n","setAddedNodeActionParameters","telemetry","rootView","onWorkflowStoreAction","storeWatcher","name","after","setLastNodeParameters","args","trackActionSelected","payload","useExternalHooks","NodeCreator","defineAsyncComponent","__vitePreload","state","reactive","uiStore","useUIStore","onCreateMenuHoverIn","mouseinEvent","buttonsWrapper","moveCallback","mousemoveEvent","wrapperBounds","wrapperH","wrapperW","wrapperLeftNear","wrapperLeftFar","wrapperTopNear","wrapperTopFar","openNodeCreator","emit","addStickyNote","offset","position","getMidCanvasPosition","props","DEFAULT_STICKY_WIDTH","DEFAULT_STICKY_HEIGHT","closeNodeCreator","nodeTypeSelected","nodeTypes","type"],"sources":["../../src/components/Node/NodeCreator/composables/useActions.ts","../../src/components/Node/NodeCreation.vue"],"sourcesContent":["import { getCurrentInstance, computed } from 'vue';\nimport type { IDataObject, INodeParameters } from 'n8n-workflow';\nimport type {\n\tActionTypeDescription,\n\tAddedNode,\n\tAddedNodeConnection,\n\tAddedNodesAndConnections,\n\tINodeCreateElement,\n\tIUpdateInformation,\n\tLabelCreateElement,\n} from '@/Interface';\nimport {\n\tAGENT_NODE_TYPE,\n\tBASIC_CHAIN_NODE_TYPE,\n\tMANUAL_CHAT_TRIGGER_NODE_TYPE,\n\tMANUAL_TRIGGER_NODE_TYPE,\n\tNODE_CREATOR_OPEN_SOURCES,\n\tNO_OP_NODE_TYPE,\n\tOPEN_AI_ASSISTANT_NODE_TYPE,\n\tQA_CHAIN_NODE_TYPE,\n\tSCHEDULE_TRIGGER_NODE_TYPE,\n\tSPLIT_IN_BATCHES_NODE_TYPE,\n\tSTICKY_NODE_TYPE,\n\tTRIGGER_NODE_CREATOR_VIEW,\n\tWEBHOOK_NODE_TYPE,\n} from '@/constants';\nimport { i18n } from '@/plugins/i18n';\n\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport type { Telemetry } from '@/plugins/telemetry';\nimport { useNodeCreatorStore } from '@/stores/nodeCreator.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\n\nimport { sortNodeCreateElements, transformNodeType } from '../utils';\n\nexport const useActions = () => {\n\tconst nodeCreatorStore = useNodeCreatorStore();\n\tconst instance = getCurrentInstance();\n\n\tconst singleNodeOpenSources = [\n\t\tNODE_CREATOR_OPEN_SOURCES.PLUS_ENDPOINT,\n\t\tNODE_CREATOR_OPEN_SOURCES.NODE_CONNECTION_ACTION,\n\t\tNODE_CREATOR_OPEN_SOURCES.NODE_CONNECTION_DROP,\n\t];\n\n\tconst actionsCategoryLocales = computed(() => {\n\t\treturn {\n\t\t\tactions: instance?.proxy.$locale.baseText('nodeCreator.actionsCategory.actions') ?? '',\n\t\t\ttriggers: instance?.proxy.$locale.baseText('nodeCreator.actionsCategory.triggers') ?? '',\n\t\t};\n\t});\n\n\tfunction getPlaceholderTriggerActions(subcategory: string) {\n\t\tconst nodes = [WEBHOOK_NODE_TYPE, SCHEDULE_TRIGGER_NODE_TYPE];\n\n\t\tconst matchedNodeTypes = nodeCreatorStore.mergedNodes\n\t\t\t.filter((node) => nodes.some((n) => n === node.name))\n\t\t\t.map((node) => {\n\t\t\t\tconst transformed = transformNodeType(node, subcategory, 'action');\n\n\t\t\t\tif (transformed.type === 'action') {\n\t\t\t\t\tconst nameBase = node.name.replace('n8n-nodes-base.', '');\n\t\t\t\t\tconst localeKey = `nodeCreator.actionsPlaceholderNode.${nameBase}` as BaseTextKey;\n\t\t\t\t\tconst overwriteLocale = instance?.proxy.$locale.baseText(localeKey) as string;\n\n\t\t\t\t\t// If the locale key is not the same as the node name, it means it contain a translation\n\t\t\t\t\t// and we should use it\n\t\t\t\t\tif (overwriteLocale !== localeKey) {\n\t\t\t\t\t\ttransformed.properties.displayName = overwriteLocale;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn transformed;\n\t\t\t});\n\n\t\treturn matchedNodeTypes;\n\t}\n\n\tfunction filterActionsCategory(items: INodeCreateElement[], category: string) {\n\t\treturn items.filter(\n\t\t\t(item) => item.type === 'action' && item.properties.codex.categories.includes(category),\n\t\t);\n\t}\n\n\tfunction injectActionsLabels(items: INodeCreateElement[]): INodeCreateElement[] {\n\t\tconst extendedActions = sortNodeCreateElements([...items]);\n\t\tconst labelsSet = new Set<string>();\n\n\t\t// Collect unique labels\n\t\tfor (const action of extendedActions) {\n\t\t\tif (action.type !== 'action') continue;\n\t\t\tconst label = action.properties?.codex?.label;\n\t\t\tlabelsSet.add(label);\n\t\t}\n\n\t\tif (labelsSet.size <= 1) return extendedActions;\n\n\t\t// Create a map to store the first index of each label\n\t\tconst firstIndexMap = new Map<string, number>();\n\n\t\t// Iterate through the extendedActions to find the first index of each label\n\t\tfor (let i = 0; i < extendedActions.length; i++) {\n\t\t\tconst action = extendedActions[i];\n\t\t\tif (action.type !== 'action') continue;\n\t\t\tconst label = action.properties?.codex?.label;\n\t\t\tif (!firstIndexMap.has(label)) {\n\t\t\t\tfirstIndexMap.set(label, i);\n\t\t\t}\n\t\t}\n\n\t\t// Keep track of the number of inserted labels\n\t\tlet insertedLabels = 0;\n\n\t\t// Create and insert new label objects at the first index of each label\n\t\tfor (const label of labelsSet) {\n\t\t\tconst newLabel: LabelCreateElement = {\n\t\t\t\tuuid: label,\n\t\t\t\ttype: 'label',\n\t\t\t\tkey: label,\n\t\t\t\tsubcategory: extendedActions[0].key,\n\t\t\t\tproperties: {\n\t\t\t\t\tkey: label,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst insertIndex = firstIndexMap.get(label)! + insertedLabels;\n\t\t\textendedActions.splice(insertIndex, 0, newLabel);\n\t\t\tinsertedLabels++;\n\t\t}\n\n\t\treturn extendedActions;\n\t}\n\n\tfunction parseCategoryActions(\n\t\tactions: INodeCreateElement[],\n\t\tcategory: string,\n\t\twithLabels = true,\n\t) {\n\t\tconst filteredActions = filterActionsCategory(actions, category);\n\t\tif (withLabels) return injectActionsLabels(filteredActions);\n\t\treturn filteredActions;\n\t}\n\n\tfunction getActionData(actionItem: ActionTypeDescription): IUpdateInformation {\n\t\tconst displayOptions = actionItem.displayOptions;\n\n\t\tconst displayConditions = Object.keys(displayOptions?.show || {}).reduce(\n\t\t\t(acc: IDataObject, showCondition: string) => {\n\t\t\t\tacc[showCondition] = displayOptions?.show?.[showCondition]?.[0];\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{},\n\t\t);\n\n\t\treturn {\n\t\t\tname: actionItem.displayName,\n\t\t\tkey: actionItem.name,\n\t\t\tvalue: { ...actionItem.values, ...displayConditions } as INodeParameters,\n\t\t};\n\t}\n\n\tfunction shouldPrependManualTrigger(addedNodes: AddedNode[]): boolean {\n\t\tconst { selectedView, openSource } = useNodeCreatorStore();\n\t\tconst { workflowTriggerNodes } = useWorkflowsStore();\n\t\tconst hasTrigger = addedNodes.some((node) => useNodeTypesStore().isTriggerNode(node.type));\n\t\tconst workflowContainsTrigger = workflowTriggerNodes.length > 0;\n\t\tconst isTriggerPanel = selectedView === TRIGGER_NODE_CREATOR_VIEW;\n\t\tconst onlyStickyNodes = addedNodes.every((node) => node.type === STICKY_NODE_TYPE);\n\n\t\t// If the node creator was opened from the plus endpoint, node connection action, or node connection drop\n\t\t// then we do not want to append the manual trigger\n\t\tconst isSingleNodeOpenSource = singleNodeOpenSources.includes(openSource);\n\t\treturn (\n\t\t\t!isSingleNodeOpenSource &&\n\t\t\t!hasTrigger &&\n\t\t\t!workflowContainsTrigger &&\n\t\t\tisTriggerPanel &&\n\t\t\t!onlyStickyNodes\n\t\t);\n\t}\n\tfunction shouldPrependChatTrigger(addedNodes: AddedNode[]): boolean {\n\t\tconst { allNodes } = useWorkflowsStore();\n\n\t\tconst COMPATIBLE_CHAT_NODES = [\n\t\t\tQA_CHAIN_NODE_TYPE,\n\t\t\tAGENT_NODE_TYPE,\n\t\t\tBASIC_CHAIN_NODE_TYPE,\n\t\t\tOPEN_AI_ASSISTANT_NODE_TYPE,\n\t\t];\n\n\t\tconst isChatTriggerMissing =\n\t\t\tallNodes.find((node) => node.type === MANUAL_CHAT_TRIGGER_NODE_TYPE) === undefined;\n\t\tconst isCompatibleNode = addedNodes.some((node) => COMPATIBLE_CHAT_NODES.includes(node.type));\n\n\t\treturn isCompatibleNode && isChatTriggerMissing;\n\t}\n\n\tfunction getAddedNodesAndConnections(addedNodes: AddedNode[]): AddedNodesAndConnections {\n\t\tif (addedNodes.length === 0) {\n\t\t\treturn { nodes: [], connections: [] };\n\t\t}\n\n\t\tconst nodes: AddedNode[] = [];\n\t\tconst connections: AddedNodeConnection[] = [];\n\n\t\tconst nodeToAutoOpen = addedNodes.find((node) => node.type !== MANUAL_TRIGGER_NODE_TYPE);\n\n\t\tif (nodeToAutoOpen) {\n\t\t\tnodeToAutoOpen.openDetail = true;\n\t\t}\n\n\t\tif (shouldPrependChatTrigger(addedNodes)) {\n\t\t\taddedNodes.unshift({ type: MANUAL_CHAT_TRIGGER_NODE_TYPE, isAutoAdd: true });\n\t\t\tconnections.push({\n\t\t\t\tfrom: { nodeIndex: 0 },\n\t\t\t\tto: { nodeIndex: 1 },\n\t\t\t});\n\t\t} else if (shouldPrependManualTrigger(addedNodes)) {\n\t\t\taddedNodes.unshift({ type: MANUAL_TRIGGER_NODE_TYPE, isAutoAdd: true });\n\t\t\tconnections.push({\n\t\t\t\tfrom: { nodeIndex: 0 },\n\t\t\t\tto: { nodeIndex: 1 },\n\t\t\t});\n\t\t}\n\n\t\taddedNodes.forEach((node, index) => {\n\t\t\tnodes.push(node);\n\n\t\t\tswitch (node.type) {\n\t\t\t\tcase SPLIT_IN_BATCHES_NODE_TYPE: {\n\t\t\t\t\tconst splitInBatchesIndex = index;\n\t\t\t\t\tconst noOpIndex = splitInBatchesIndex + 1;\n\t\t\t\t\tnodes.push({\n\t\t\t\t\t\ttype: NO_OP_NODE_TYPE,\n\t\t\t\t\t\tisAutoAdd: true,\n\t\t\t\t\t\tname: i18n.baseText('nodeView.replaceMe'),\n\t\t\t\t\t});\n\t\t\t\t\tconnections.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfrom: { nodeIndex: splitInBatchesIndex, outputIndex: 1 },\n\t\t\t\t\t\t\tto: { nodeIndex: noOpIndex },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfrom: { nodeIndex: noOpIndex },\n\t\t\t\t\t\t\tto: { nodeIndex: splitInBatchesIndex },\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { nodes, connections };\n\t}\n\n\t// Hook into addNode action to set the last node parameters & track the action selected\n\tfunction setAddedNodeActionParameters(\n\t\taction: IUpdateInformation,\n\t\ttelemetry?: Telemetry,\n\t\trootView = '',\n\t) {\n\t\tconst { $onAction: onWorkflowStoreAction } = useWorkflowsStore();\n\t\tconst storeWatcher = onWorkflowStoreAction(\n\t\t\t({ name, after, store: { setLastNodeParameters }, args }) => {\n\t\t\t\tif (name !== 'addNode' || args[0].type !== action.key) return;\n\t\t\t\tafter(() => {\n\t\t\t\t\tsetLastNodeParameters(action);\n\t\t\t\t\tif (telemetry) trackActionSelected(action, telemetry, rootView);\n\t\t\t\t\t// Unsubscribe from the store watcher\n\t\t\t\t\tstoreWatcher();\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\n\t\treturn storeWatcher;\n\t}\n\n\tfunction trackActionSelected(action: IUpdateInformation, telemetry: Telemetry, rootView: string) {\n\t\tconst payload = {\n\t\t\tnode_type: action.key,\n\t\t\taction: action.name,\n\t\t\tsource_mode: rootView.toLowerCase(),\n\t\t\tresource: (action.value as INodeParameters).resource || '',\n\t\t};\n\t\tvoid useExternalHooks().run('nodeCreateList.addAction', payload);\n\t\ttelemetry?.trackNodesPanel('nodeCreateList.addAction', payload);\n\t}\n\n\treturn {\n\t\tactionsCategoryLocales,\n\t\tgetPlaceholderTriggerActions,\n\t\tparseCategoryActions,\n\t\tgetAddedNodesAndConnections,\n\t\tgetActionData,\n\t\tsetAddedNodeActionParameters,\n\t};\n};\n","<script setup lang=\"ts\">\nimport { defineAsyncComponent, reactive } from 'vue';\nimport { getMidCanvasPosition } from '@/utils/nodeViewUtils';\nimport {\n\tDEFAULT_STICKY_HEIGHT,\n\tDEFAULT_STICKY_WIDTH,\n\tNODE_CREATOR_OPEN_SOURCES,\n\tSTICKY_NODE_TYPE,\n} from '@/constants';\nimport { useUIStore } from '@/stores/ui.store';\nimport type { AddedNodesAndConnections, ToggleNodeCreatorOptions } from '@/Interface';\nimport { useActions } from './NodeCreator/composables/useActions';\nimport KeyboardShortcutTooltip from '@/components/KeyboardShortcutTooltip.vue';\n\ntype Props = {\n\tnodeViewScale: number;\n\tcreateNodeActive?: boolean;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst NodeCreator = defineAsyncComponent(\n\tasync () => import('@/components/Node/NodeCreator/NodeCreator.vue'),\n);\n\nconst props = withDefaults(defineProps<Props>(), {\n\tcreateNodeActive: false,\n});\n\nconst emit = defineEmits<{\n\t(event: 'addNodes', value: AddedNodesAndConnections): void;\n\t(event: 'toggleNodeCreator', value: ToggleNodeCreatorOptions): void;\n}>();\n\nconst state = reactive({\n\tshowStickyButton: false,\n});\n\nconst uiStore = useUIStore();\n\nconst { getAddedNodesAndConnections } = useActions();\n\nfunction onCreateMenuHoverIn(mouseinEvent: MouseEvent) {\n\tconst buttonsWrapper = mouseinEvent.target as Element;\n\n\t// Once the popup menu is hovered, it's pointer events are disabled so it's not interfering with element underneath it.\n\tstate.showStickyButton = true;\n\tconst moveCallback = (mousemoveEvent: MouseEvent) => {\n\t\tif (buttonsWrapper) {\n\t\t\tconst wrapperBounds = buttonsWrapper.getBoundingClientRect();\n\t\t\tconst wrapperH = wrapperBounds.height;\n\t\t\tconst wrapperW = wrapperBounds.width;\n\t\t\tconst wrapperLeftNear = wrapperBounds.left;\n\t\t\tconst wrapperLeftFar = wrapperLeftNear + wrapperW;\n\t\t\tconst wrapperTopNear = wrapperBounds.top;\n\t\t\tconst wrapperTopFar = wrapperTopNear + wrapperH;\n\t\t\tconst inside =\n\t\t\t\tmousemoveEvent.pageX > wrapperLeftNear &&\n\t\t\t\tmousemoveEvent.pageX < wrapperLeftFar &&\n\t\t\t\tmousemoveEvent.pageY > wrapperTopNear &&\n\t\t\t\tmousemoveEvent.pageY < wrapperTopFar;\n\t\t\tif (!inside) {\n\t\t\t\tstate.showStickyButton = false;\n\t\t\t\tdocument.removeEventListener('mousemove', moveCallback, false);\n\t\t\t}\n\t\t}\n\t};\n\tdocument.addEventListener('mousemove', moveCallback, false);\n}\n\nfunction openNodeCreator() {\n\temit('toggleNodeCreator', {\n\t\tsource: NODE_CREATOR_OPEN_SOURCES.ADD_NODE_BUTTON,\n\t\tcreateNodeActive: true,\n\t});\n}\n\nfunction addStickyNote() {\n\tif (document.activeElement) {\n\t\t(document.activeElement as HTMLElement).blur();\n\t}\n\n\tconst offset: [number, number] = [...uiStore.nodeViewOffsetPosition];\n\n\tconst position = getMidCanvasPosition(props.nodeViewScale, offset);\n\tposition[0] -= DEFAULT_STICKY_WIDTH / 2;\n\tposition[1] -= DEFAULT_STICKY_HEIGHT / 2;\n\n\temit('addNodes', getAddedNodesAndConnections([{ type: STICKY_NODE_TYPE, position }]));\n}\n\nfunction closeNodeCreator() {\n\temit('toggleNodeCreator', { createNodeActive: false });\n}\n\nfunction nodeTypeSelected(nodeTypes: string[]) {\n\temit('addNodes', getAddedNodesAndConnections(nodeTypes.map((type) => ({ type }))));\n\tcloseNodeCreator();\n}\n</script>\n\n<template>\n\t<div>\n\t\t<div\n\t\t\tv-if=\"!createNodeActive\"\n\t\t\t:class=\"[$style.nodeButtonsWrapper, state.showStickyButton ? $style.noEvents : '']\"\n\t\t\t@mouseenter=\"onCreateMenuHoverIn\"\n\t\t>\n\t\t\t<div :class=\"$style.nodeCreatorButton\" data-test-id=\"node-creator-plus-button\">\n\t\t\t\t<keyboard-shortcut-tooltip\n\t\t\t\t\t:label=\"$locale.baseText('nodeView.openNodesPanel')\"\n\t\t\t\t\t:shortcut=\"{ keys: ['Tab'] }\"\n\t\t\t\t\tplacement=\"left\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-icon-button\n\t\t\t\t\t\tsize=\"xlarge\"\n\t\t\t\t\t\ticon=\"plus\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t:class=\"$style.nodeCreatorPlus\"\n\t\t\t\t\t\t@click=\"openNodeCreator\"\n\t\t\t\t\t/>\n\t\t\t\t</keyboard-shortcut-tooltip>\n\t\t\t\t<div\n\t\t\t\t\t:class=\"[$style.addStickyButton, state.showStickyButton ? $style.visibleButton : '']\"\n\t\t\t\t\t@click=\"addStickyNote\"\n\t\t\t\t\tdata-test-id=\"add-sticky-button\"\n\t\t\t\t>\n\t\t\t\t\t<keyboard-shortcut-tooltip\n\t\t\t\t\t\t:label=\"$locale.baseText('nodeView.addStickyHint')\"\n\t\t\t\t\t\t:shortcut=\"{ keys: ['s'], shiftKey: true }\"\n\t\t\t\t\t\tplacement=\"left\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<n8n-icon-button type=\"tertiary\" :icon=\"['far', 'note-sticky']\" />\n\t\t\t\t\t</keyboard-shortcut-tooltip>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<Suspense>\n\t\t\t<NodeCreator\n\t\t\t\t:active=\"createNodeActive\"\n\t\t\t\t@nodeTypeSelected=\"nodeTypeSelected\"\n\t\t\t\t@closeNodeCreator=\"closeNodeCreator\"\n\t\t\t/>\n\t\t</Suspense>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.nodeButtonsWrapper {\n\tposition: absolute;\n\twidth: 150px;\n\theight: 200px;\n\ttop: 0;\n\tright: 0;\n\tdisplay: flex;\n}\n\n.addStickyButton {\n\tmargin-top: var(--spacing-2xs);\n\topacity: 0;\n\ttransition: 0.1s;\n\ttransition-timing-function: linear;\n}\n\n.visibleButton {\n\topacity: 1;\n\tpointer-events: all;\n}\n\n.noEvents {\n\tpointer-events: none;\n}\n\n.nodeCreatorButton {\n\tposition: absolute;\n\ttext-align: center;\n\ttop: var(--spacing-s);\n\tright: var(--spacing-s);\n\tpointer-events: all !important;\n\n\tbutton {\n\t\tborder-color: var(--color-button-node-creator-border-font);\n\t\tcolor: var(--color-button-node-creator-border-font);\n\n\t\t&:hover {\n\t\t\tborder-color: var(--color-button-node-creator-hover-border-font);\n\t\t\tcolor: var(--color-button-node-creator-hover-border-font);\n\t\t\tbackground: var(--color-button-node-creator-background);\n\t\t}\n\t}\n}\n.nodeCreatorPlus {\n\tborder-width: 2px;\n\tborder-radius: var(--border-radius-base);\n\twidth: 36px;\n\theight: 36px;\n}\n</style>\n"],"file":"assets/NodeCreation-lpcdOti7.js"}
|
|
1
|
+
{"version":3,"mappings":"idAqCO,MAAMA,GAAa,IAAM,CAC/B,MAAMC,EAAmBC,IACnBC,EAAWC,KAEXC,EAAwB,CAC7BC,EAA0B,cAC1BA,EAA0B,uBAC1BA,EAA0B,sBAGrBC,EAAyBC,GAAS,KAChC,CACN,SAASL,GAAA,YAAAA,EAAU,MAAM,QAAQ,SAAS,yCAA0C,GACpF,UAAUA,GAAA,YAAAA,EAAU,MAAM,QAAQ,SAAS,0CAA2C,IAEvF,EAED,SAASM,EAA6BC,EAAqB,CACpD,MAAAC,EAAQ,CAACC,EAAmBC,CAA0B,EAqBrD,OAnBkBZ,EAAiB,YACxC,OAAQa,GAASH,EAAM,KAAMI,GAAMA,IAAMD,EAAK,IAAI,CAAC,EACnD,IAAKA,GAAS,CACd,MAAME,EAAcC,GAAkBH,EAAMJ,EAAa,QAAQ,EAE7D,GAAAM,EAAY,OAAS,SAAU,CAE5B,MAAAE,EAAY,sCADDJ,EAAK,KAAK,QAAQ,kBAAmB,EAAE,CACQ,GAC1DK,EAAkBhB,GAAA,YAAAA,EAAU,MAAM,QAAQ,SAASe,GAIrDC,IAAoBD,IACvBF,EAAY,WAAW,YAAcG,EAEvC,CACO,OAAAH,CAAA,CACP,CAGH,CAES,SAAAI,EAAsBC,EAA6BC,EAAkB,CAC7E,OAAOD,EAAM,OACXE,GAASA,EAAK,OAAS,UAAYA,EAAK,WAAW,MAAM,WAAW,SAASD,CAAQ,EAExF,CAEA,SAASE,EAAoBH,EAAmD,aAC/E,MAAMI,EAAkBC,GAAuB,CAAC,GAAGL,CAAK,CAAC,EACnDM,MAAgB,IAGtB,UAAWC,KAAUH,EAAiB,CACrC,GAAIG,EAAO,OAAS,SAAU,SACxB,MAAAC,GAAQC,GAAAC,EAAAH,EAAO,aAAP,YAAAG,EAAmB,QAAnB,YAAAD,EAA0B,MACxCH,EAAU,IAAIE,CAAK,CACpB,CAEA,GAAIF,EAAU,MAAQ,EAAU,OAAAF,EAG1B,MAAAO,MAAoB,IAG1B,QAAS,EAAI,EAAG,EAAIP,EAAgB,OAAQ,IAAK,CAC1C,MAAAG,EAASH,EAAgB,CAAC,EAChC,GAAIG,EAAO,OAAS,SAAU,SACxB,MAAAC,GAAQI,GAAAC,EAAAN,EAAO,aAAP,YAAAM,EAAmB,QAAnB,YAAAD,EAA0B,MACnCD,EAAc,IAAIH,CAAK,GACbG,EAAA,IAAIH,EAAO,CAAC,CAE5B,CAGA,IAAIM,EAAiB,EAGrB,UAAWN,KAASF,EAAW,CAC9B,MAAMS,EAA+B,CACpC,KAAMP,EACN,KAAM,QACN,IAAKA,EACL,YAAaJ,EAAgB,CAAC,EAAE,IAChC,WAAY,CACX,IAAKI,CACN,GAGKQ,EAAcL,EAAc,IAAIH,CAAK,EAAKM,EAChCV,EAAA,OAAOY,EAAa,EAAGD,CAAQ,EAC/CD,GACD,CAEO,OAAAV,CACR,CAEA,SAASa,EACRC,EACAjB,EACAkB,EAAa,GACZ,CACK,MAAAC,EAAkBrB,EAAsBmB,EAASjB,CAAQ,EAC3D,OAAAkB,EAAmBhB,EAAoBiB,CAAe,EACnDA,CACR,CAEA,SAASC,EAAcC,EAAuD,CAC7E,MAAMC,EAAiBD,EAAW,eAE5BE,EAAoB,OAAO,MAAKD,GAAA,YAAAA,EAAgB,OAAQ,CAAE,GAAE,OACjE,CAACE,EAAkBC,IAA0B,SAC5C,OAAAD,EAAIC,CAAa,GAAIjB,GAAAC,EAAAa,GAAA,YAAAA,EAAgB,OAAhB,YAAAb,EAAuBgB,KAAvB,YAAAjB,EAAwC,GACtDgB,CACR,EACA,CAAC,GAGK,OACN,KAAMH,EAAW,YACjB,IAAKA,EAAW,KAChB,MAAO,CAAE,GAAGA,EAAW,OAAQ,GAAGE,CAAkB,EAEtD,CAEA,SAASG,EAA2BC,EAAkC,CACrE,KAAM,CAAE,aAAAC,EAAc,WAAAC,CAAW,EAAIjD,EAAoB,EACnD,CAAE,qBAAAkD,GAAyBC,IAC3BC,EAAaL,EAAW,KAAMnC,GAASyC,EAAoB,gBAAczC,EAAK,IAAI,CAAC,EACnF0C,EAA0BJ,EAAqB,OAAS,EACxDK,EAAiBP,IAAiBQ,EAClCC,EAAkBV,EAAW,MAAOnC,GAASA,EAAK,OAAS8C,CAAgB,EAKjF,MACC,CAF8BvD,EAAsB,SAAS8C,CAAU,GAGvE,CAACG,GACD,CAACE,GACDC,GACA,CAACE,CAEH,CACA,SAASE,EAAyBZ,EAAkC,CAC7D,MAAE,SAAAa,GAAaT,IAEfU,EAAwB,CAC7BC,EACAC,EACAC,EACAC,CAAA,EAGKC,EACLN,EAAS,KAAMhD,GAASA,EAAK,OAASuD,CAA6B,IAAM,OAG1E,OAFyBpB,EAAW,KAAMnC,GAASiD,EAAsB,SAASjD,EAAK,IAAI,CAAC,GAEjEsD,CAC5B,CAEA,SAASE,EAA4BrB,EAAmD,CACnF,GAAAA,EAAW,SAAW,EACzB,MAAO,CAAE,MAAO,GAAI,YAAa,CAAG,GAGrC,MAAMtC,EAAqB,GACrB4D,EAAqC,GAErCC,EAAiBvB,EAAW,KAAMnC,GAASA,EAAK,OAAS2D,CAAwB,EAEvF,OAAID,IACHA,EAAe,WAAa,IAGzBX,EAAyBZ,CAAU,GACtCA,EAAW,QAAQ,CAAE,KAAMoB,EAA+B,UAAW,GAAM,EAC3EE,EAAY,KAAK,CAChB,KAAM,CAAE,UAAW,CAAE,EACrB,GAAI,CAAE,UAAW,CAAE,EACnB,GACSvB,EAA2BC,CAAU,IAC/CA,EAAW,QAAQ,CAAE,KAAMwB,EAA0B,UAAW,GAAM,EACtEF,EAAY,KAAK,CAChB,KAAM,CAAE,UAAW,CAAE,EACrB,GAAI,CAAE,UAAW,CAAE,EACnB,GAGStB,EAAA,QAAQ,CAACnC,EAAM4D,IAAU,CAGnC,OAFA/D,EAAM,KAAKG,CAAI,EAEPA,EAAK,KAAM,CAClB,KAAK6D,EAA4B,CAChC,MAAMC,EAAsBF,EACtBG,EAAYD,EAAsB,EACxCjE,EAAM,KAAK,CACV,KAAMmE,EACN,UAAW,GACX,KAAMC,EAAK,SAAS,oBAAoB,EACxC,EACWR,EAAA,KACX,CACC,KAAM,CAAE,UAAWK,EAAqB,YAAa,CAAE,EACvD,GAAI,CAAE,UAAWC,CAAU,CAC5B,EACA,CACC,KAAM,CAAE,UAAWA,CAAU,EAC7B,GAAI,CAAE,UAAWD,CAAoB,CACtC,GAED,KACD,CACD,EACA,EAEM,CAAE,MAAAjE,EAAO,YAAA4D,EACjB,CAGA,SAASS,EACRpD,EACAqD,EACAC,EAAW,GACV,CACD,KAAM,CAAE,UAAWC,CAAsB,EAAI9B,EAAkB,EACzD+B,EAAeD,EACpB,CAAC,CAAE,KAAAE,EAAM,MAAAC,EAAO,MAAO,CAAE,sBAAAC,CAAA,EAAyB,KAAAC,KAAW,CACxDH,IAAS,WAAaG,EAAK,CAAC,EAAE,OAAS5D,EAAO,KAClD0D,EAAM,IAAM,CACXC,EAAsB3D,CAAM,EACxBqD,GAA+BQ,EAAA7D,EAAQqD,EAAWC,CAAQ,EAEjDE,GAAA,CACb,CACF,GAGM,OAAAA,CACR,CAES,SAAAK,EAAoB7D,EAA4BqD,EAAsBC,EAAkB,CAChG,MAAMQ,EAAU,CACf,UAAW9D,EAAO,IAClB,OAAQA,EAAO,KACf,YAAasD,EAAS,YAAY,EAClC,SAAWtD,EAAO,MAA0B,UAAY,IAEpD+D,EAAiB,EAAE,IAAI,2BAA4BD,CAAO,EACpDT,GAAA,MAAAA,EAAA,gBAAgB,2BAA4BS,EACxD,CAEO,OACN,uBAAAnF,EACA,6BAAAE,EACA,qBAAA6B,EACA,4BAAAgC,EACA,cAAA5B,EACA,6BAAAsC,CAAA,CAEF,sKCrRMY,EAAcC,GACnB,SAAYC,EAAA,WAAO,2BAA+C,iJAY7DC,EAAQC,GAAS,CACtB,iBAAkB,GAClB,EAEKC,EAAUC,IAEV,CAAE,4BAAA5B,GAAgCtE,KAExC,SAASmG,EAAoBC,EAA0B,CACtD,MAAMC,EAAiBD,EAAa,OAGpCL,EAAM,iBAAmB,GACnB,MAAAO,EAAgBC,GAA+B,CACpD,GAAIF,EAAgB,CACb,MAAAG,EAAgBH,EAAe,wBAC/BI,EAAWD,EAAc,OACzBE,EAAWF,EAAc,MACzBG,EAAkBH,EAAc,KAChCI,EAAiBD,EAAkBD,EACnCG,EAAiBL,EAAc,IAC/BM,EAAgBD,EAAiBJ,EAEtCF,EAAe,MAAQI,GACvBJ,EAAe,MAAQK,GACvBL,EAAe,MAAQM,GACvBN,EAAe,MAAQO,IAEvBf,EAAM,iBAAmB,GAChB,6BAAoB,YAAaO,EAAc,EAAK,EAE/D,GAEQ,0BAAiB,YAAaA,EAAc,EAAK,CAC3D,CAEA,SAASS,GAAkB,CAC1BC,EAAK,oBAAqB,CACzB,OAAQ1G,EAA0B,gBAClC,iBAAkB,GAClB,CACF,CAEA,SAAS2G,GAAgB,CACpB,SAAS,eACX,SAAS,cAA8B,OAGzC,MAAMC,EAA2B,CAAC,GAAGjB,EAAQ,sBAAsB,EAE7DkB,EAAWC,GAAqBC,EAAM,cAAeH,CAAM,EACxDC,EAAA,CAAC,GAAKG,EAAuB,EAC7BH,EAAA,CAAC,GAAKI,GAAwB,EAElCP,EAAA,WAAY1C,EAA4B,CAAC,CAAE,KAAMV,EAAkB,SAAAuD,EAAU,CAAC,CAAC,CACrF,CAEA,SAASK,GAAmB,CAC3BR,EAAK,oBAAqB,CAAE,iBAAkB,EAAO,EACtD,CAEA,SAASS,EAAiBC,EAAqB,CACzCV,EAAA,WAAY1C,EAA4BoD,EAAU,IAAKC,IAAU,CAAE,KAAAA,CAAA,EAAO,CAAC,CAAC,EAChEH,GAClB","names":["useActions","nodeCreatorStore","useNodeCreatorStore","instance","getCurrentInstance","singleNodeOpenSources","NODE_CREATOR_OPEN_SOURCES","actionsCategoryLocales","computed","getPlaceholderTriggerActions","subcategory","nodes","WEBHOOK_NODE_TYPE","SCHEDULE_TRIGGER_NODE_TYPE","node","n","transformed","transformNodeType","localeKey","overwriteLocale","filterActionsCategory","items","category","item","injectActionsLabels","extendedActions","sortNodeCreateElements","labelsSet","action","label","_b","_a","firstIndexMap","_d","_c","insertedLabels","newLabel","insertIndex","parseCategoryActions","actions","withLabels","filteredActions","getActionData","actionItem","displayOptions","displayConditions","acc","showCondition","shouldPrependManualTrigger","addedNodes","selectedView","openSource","workflowTriggerNodes","useWorkflowsStore","hasTrigger","useNodeTypesStore","workflowContainsTrigger","isTriggerPanel","TRIGGER_NODE_CREATOR_VIEW","onlyStickyNodes","STICKY_NODE_TYPE","shouldPrependChatTrigger","allNodes","COMPATIBLE_CHAT_NODES","QA_CHAIN_NODE_TYPE","AGENT_NODE_TYPE","BASIC_CHAIN_NODE_TYPE","OPEN_AI_ASSISTANT_NODE_TYPE","isChatTriggerMissing","MANUAL_CHAT_TRIGGER_NODE_TYPE","getAddedNodesAndConnections","connections","nodeToAutoOpen","MANUAL_TRIGGER_NODE_TYPE","index","SPLIT_IN_BATCHES_NODE_TYPE","splitInBatchesIndex","noOpIndex","NO_OP_NODE_TYPE","i18n","setAddedNodeActionParameters","telemetry","rootView","onWorkflowStoreAction","storeWatcher","name","after","setLastNodeParameters","args","trackActionSelected","payload","useExternalHooks","NodeCreator","defineAsyncComponent","__vitePreload","state","reactive","uiStore","useUIStore","onCreateMenuHoverIn","mouseinEvent","buttonsWrapper","moveCallback","mousemoveEvent","wrapperBounds","wrapperH","wrapperW","wrapperLeftNear","wrapperLeftFar","wrapperTopNear","wrapperTopFar","openNodeCreator","emit","addStickyNote","offset","position","getMidCanvasPosition","props","DEFAULT_STICKY_WIDTH","DEFAULT_STICKY_HEIGHT","closeNodeCreator","nodeTypeSelected","nodeTypes","type"],"sources":["../../src/components/Node/NodeCreator/composables/useActions.ts","../../src/components/Node/NodeCreation.vue"],"sourcesContent":["import { getCurrentInstance, computed } from 'vue';\nimport type { IDataObject, INodeParameters } from 'n8n-workflow';\nimport type {\n\tActionTypeDescription,\n\tAddedNode,\n\tAddedNodeConnection,\n\tAddedNodesAndConnections,\n\tINodeCreateElement,\n\tIUpdateInformation,\n\tLabelCreateElement,\n} from '@/Interface';\nimport {\n\tAGENT_NODE_TYPE,\n\tBASIC_CHAIN_NODE_TYPE,\n\tMANUAL_CHAT_TRIGGER_NODE_TYPE,\n\tMANUAL_TRIGGER_NODE_TYPE,\n\tNODE_CREATOR_OPEN_SOURCES,\n\tNO_OP_NODE_TYPE,\n\tOPEN_AI_ASSISTANT_NODE_TYPE,\n\tQA_CHAIN_NODE_TYPE,\n\tSCHEDULE_TRIGGER_NODE_TYPE,\n\tSPLIT_IN_BATCHES_NODE_TYPE,\n\tSTICKY_NODE_TYPE,\n\tTRIGGER_NODE_CREATOR_VIEW,\n\tWEBHOOK_NODE_TYPE,\n} from '@/constants';\nimport { i18n } from '@/plugins/i18n';\n\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport type { Telemetry } from '@/plugins/telemetry';\nimport { useNodeCreatorStore } from '@/stores/nodeCreator.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\n\nimport { sortNodeCreateElements, transformNodeType } from '../utils';\n\nexport const useActions = () => {\n\tconst nodeCreatorStore = useNodeCreatorStore();\n\tconst instance = getCurrentInstance();\n\n\tconst singleNodeOpenSources = [\n\t\tNODE_CREATOR_OPEN_SOURCES.PLUS_ENDPOINT,\n\t\tNODE_CREATOR_OPEN_SOURCES.NODE_CONNECTION_ACTION,\n\t\tNODE_CREATOR_OPEN_SOURCES.NODE_CONNECTION_DROP,\n\t];\n\n\tconst actionsCategoryLocales = computed(() => {\n\t\treturn {\n\t\t\tactions: instance?.proxy.$locale.baseText('nodeCreator.actionsCategory.actions') ?? '',\n\t\t\ttriggers: instance?.proxy.$locale.baseText('nodeCreator.actionsCategory.triggers') ?? '',\n\t\t};\n\t});\n\n\tfunction getPlaceholderTriggerActions(subcategory: string) {\n\t\tconst nodes = [WEBHOOK_NODE_TYPE, SCHEDULE_TRIGGER_NODE_TYPE];\n\n\t\tconst matchedNodeTypes = nodeCreatorStore.mergedNodes\n\t\t\t.filter((node) => nodes.some((n) => n === node.name))\n\t\t\t.map((node) => {\n\t\t\t\tconst transformed = transformNodeType(node, subcategory, 'action');\n\n\t\t\t\tif (transformed.type === 'action') {\n\t\t\t\t\tconst nameBase = node.name.replace('n8n-nodes-base.', '');\n\t\t\t\t\tconst localeKey = `nodeCreator.actionsPlaceholderNode.${nameBase}` as BaseTextKey;\n\t\t\t\t\tconst overwriteLocale = instance?.proxy.$locale.baseText(localeKey) as string;\n\n\t\t\t\t\t// If the locale key is not the same as the node name, it means it contain a translation\n\t\t\t\t\t// and we should use it\n\t\t\t\t\tif (overwriteLocale !== localeKey) {\n\t\t\t\t\t\ttransformed.properties.displayName = overwriteLocale;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn transformed;\n\t\t\t});\n\n\t\treturn matchedNodeTypes;\n\t}\n\n\tfunction filterActionsCategory(items: INodeCreateElement[], category: string) {\n\t\treturn items.filter(\n\t\t\t(item) => item.type === 'action' && item.properties.codex.categories.includes(category),\n\t\t);\n\t}\n\n\tfunction injectActionsLabels(items: INodeCreateElement[]): INodeCreateElement[] {\n\t\tconst extendedActions = sortNodeCreateElements([...items]);\n\t\tconst labelsSet = new Set<string>();\n\n\t\t// Collect unique labels\n\t\tfor (const action of extendedActions) {\n\t\t\tif (action.type !== 'action') continue;\n\t\t\tconst label = action.properties?.codex?.label;\n\t\t\tlabelsSet.add(label);\n\t\t}\n\n\t\tif (labelsSet.size <= 1) return extendedActions;\n\n\t\t// Create a map to store the first index of each label\n\t\tconst firstIndexMap = new Map<string, number>();\n\n\t\t// Iterate through the extendedActions to find the first index of each label\n\t\tfor (let i = 0; i < extendedActions.length; i++) {\n\t\t\tconst action = extendedActions[i];\n\t\t\tif (action.type !== 'action') continue;\n\t\t\tconst label = action.properties?.codex?.label;\n\t\t\tif (!firstIndexMap.has(label)) {\n\t\t\t\tfirstIndexMap.set(label, i);\n\t\t\t}\n\t\t}\n\n\t\t// Keep track of the number of inserted labels\n\t\tlet insertedLabels = 0;\n\n\t\t// Create and insert new label objects at the first index of each label\n\t\tfor (const label of labelsSet) {\n\t\t\tconst newLabel: LabelCreateElement = {\n\t\t\t\tuuid: label,\n\t\t\t\ttype: 'label',\n\t\t\t\tkey: label,\n\t\t\t\tsubcategory: extendedActions[0].key,\n\t\t\t\tproperties: {\n\t\t\t\t\tkey: label,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst insertIndex = firstIndexMap.get(label)! + insertedLabels;\n\t\t\textendedActions.splice(insertIndex, 0, newLabel);\n\t\t\tinsertedLabels++;\n\t\t}\n\n\t\treturn extendedActions;\n\t}\n\n\tfunction parseCategoryActions(\n\t\tactions: INodeCreateElement[],\n\t\tcategory: string,\n\t\twithLabels = true,\n\t) {\n\t\tconst filteredActions = filterActionsCategory(actions, category);\n\t\tif (withLabels) return injectActionsLabels(filteredActions);\n\t\treturn filteredActions;\n\t}\n\n\tfunction getActionData(actionItem: ActionTypeDescription): IUpdateInformation {\n\t\tconst displayOptions = actionItem.displayOptions;\n\n\t\tconst displayConditions = Object.keys(displayOptions?.show || {}).reduce(\n\t\t\t(acc: IDataObject, showCondition: string) => {\n\t\t\t\tacc[showCondition] = displayOptions?.show?.[showCondition]?.[0];\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{},\n\t\t);\n\n\t\treturn {\n\t\t\tname: actionItem.displayName,\n\t\t\tkey: actionItem.name,\n\t\t\tvalue: { ...actionItem.values, ...displayConditions } as INodeParameters,\n\t\t};\n\t}\n\n\tfunction shouldPrependManualTrigger(addedNodes: AddedNode[]): boolean {\n\t\tconst { selectedView, openSource } = useNodeCreatorStore();\n\t\tconst { workflowTriggerNodes } = useWorkflowsStore();\n\t\tconst hasTrigger = addedNodes.some((node) => useNodeTypesStore().isTriggerNode(node.type));\n\t\tconst workflowContainsTrigger = workflowTriggerNodes.length > 0;\n\t\tconst isTriggerPanel = selectedView === TRIGGER_NODE_CREATOR_VIEW;\n\t\tconst onlyStickyNodes = addedNodes.every((node) => node.type === STICKY_NODE_TYPE);\n\n\t\t// If the node creator was opened from the plus endpoint, node connection action, or node connection drop\n\t\t// then we do not want to append the manual trigger\n\t\tconst isSingleNodeOpenSource = singleNodeOpenSources.includes(openSource);\n\t\treturn (\n\t\t\t!isSingleNodeOpenSource &&\n\t\t\t!hasTrigger &&\n\t\t\t!workflowContainsTrigger &&\n\t\t\tisTriggerPanel &&\n\t\t\t!onlyStickyNodes\n\t\t);\n\t}\n\tfunction shouldPrependChatTrigger(addedNodes: AddedNode[]): boolean {\n\t\tconst { allNodes } = useWorkflowsStore();\n\n\t\tconst COMPATIBLE_CHAT_NODES = [\n\t\t\tQA_CHAIN_NODE_TYPE,\n\t\t\tAGENT_NODE_TYPE,\n\t\t\tBASIC_CHAIN_NODE_TYPE,\n\t\t\tOPEN_AI_ASSISTANT_NODE_TYPE,\n\t\t];\n\n\t\tconst isChatTriggerMissing =\n\t\t\tallNodes.find((node) => node.type === MANUAL_CHAT_TRIGGER_NODE_TYPE) === undefined;\n\t\tconst isCompatibleNode = addedNodes.some((node) => COMPATIBLE_CHAT_NODES.includes(node.type));\n\n\t\treturn isCompatibleNode && isChatTriggerMissing;\n\t}\n\n\tfunction getAddedNodesAndConnections(addedNodes: AddedNode[]): AddedNodesAndConnections {\n\t\tif (addedNodes.length === 0) {\n\t\t\treturn { nodes: [], connections: [] };\n\t\t}\n\n\t\tconst nodes: AddedNode[] = [];\n\t\tconst connections: AddedNodeConnection[] = [];\n\n\t\tconst nodeToAutoOpen = addedNodes.find((node) => node.type !== MANUAL_TRIGGER_NODE_TYPE);\n\n\t\tif (nodeToAutoOpen) {\n\t\t\tnodeToAutoOpen.openDetail = true;\n\t\t}\n\n\t\tif (shouldPrependChatTrigger(addedNodes)) {\n\t\t\taddedNodes.unshift({ type: MANUAL_CHAT_TRIGGER_NODE_TYPE, isAutoAdd: true });\n\t\t\tconnections.push({\n\t\t\t\tfrom: { nodeIndex: 0 },\n\t\t\t\tto: { nodeIndex: 1 },\n\t\t\t});\n\t\t} else if (shouldPrependManualTrigger(addedNodes)) {\n\t\t\taddedNodes.unshift({ type: MANUAL_TRIGGER_NODE_TYPE, isAutoAdd: true });\n\t\t\tconnections.push({\n\t\t\t\tfrom: { nodeIndex: 0 },\n\t\t\t\tto: { nodeIndex: 1 },\n\t\t\t});\n\t\t}\n\n\t\taddedNodes.forEach((node, index) => {\n\t\t\tnodes.push(node);\n\n\t\t\tswitch (node.type) {\n\t\t\t\tcase SPLIT_IN_BATCHES_NODE_TYPE: {\n\t\t\t\t\tconst splitInBatchesIndex = index;\n\t\t\t\t\tconst noOpIndex = splitInBatchesIndex + 1;\n\t\t\t\t\tnodes.push({\n\t\t\t\t\t\ttype: NO_OP_NODE_TYPE,\n\t\t\t\t\t\tisAutoAdd: true,\n\t\t\t\t\t\tname: i18n.baseText('nodeView.replaceMe'),\n\t\t\t\t\t});\n\t\t\t\t\tconnections.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfrom: { nodeIndex: splitInBatchesIndex, outputIndex: 1 },\n\t\t\t\t\t\t\tto: { nodeIndex: noOpIndex },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfrom: { nodeIndex: noOpIndex },\n\t\t\t\t\t\t\tto: { nodeIndex: splitInBatchesIndex },\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { nodes, connections };\n\t}\n\n\t// Hook into addNode action to set the last node parameters & track the action selected\n\tfunction setAddedNodeActionParameters(\n\t\taction: IUpdateInformation,\n\t\ttelemetry?: Telemetry,\n\t\trootView = '',\n\t) {\n\t\tconst { $onAction: onWorkflowStoreAction } = useWorkflowsStore();\n\t\tconst storeWatcher = onWorkflowStoreAction(\n\t\t\t({ name, after, store: { setLastNodeParameters }, args }) => {\n\t\t\t\tif (name !== 'addNode' || args[0].type !== action.key) return;\n\t\t\t\tafter(() => {\n\t\t\t\t\tsetLastNodeParameters(action);\n\t\t\t\t\tif (telemetry) trackActionSelected(action, telemetry, rootView);\n\t\t\t\t\t// Unsubscribe from the store watcher\n\t\t\t\t\tstoreWatcher();\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\n\t\treturn storeWatcher;\n\t}\n\n\tfunction trackActionSelected(action: IUpdateInformation, telemetry: Telemetry, rootView: string) {\n\t\tconst payload = {\n\t\t\tnode_type: action.key,\n\t\t\taction: action.name,\n\t\t\tsource_mode: rootView.toLowerCase(),\n\t\t\tresource: (action.value as INodeParameters).resource || '',\n\t\t};\n\t\tvoid useExternalHooks().run('nodeCreateList.addAction', payload);\n\t\ttelemetry?.trackNodesPanel('nodeCreateList.addAction', payload);\n\t}\n\n\treturn {\n\t\tactionsCategoryLocales,\n\t\tgetPlaceholderTriggerActions,\n\t\tparseCategoryActions,\n\t\tgetAddedNodesAndConnections,\n\t\tgetActionData,\n\t\tsetAddedNodeActionParameters,\n\t};\n};\n","<script setup lang=\"ts\">\nimport { defineAsyncComponent, reactive } from 'vue';\nimport { getMidCanvasPosition } from '@/utils/nodeViewUtils';\nimport {\n\tDEFAULT_STICKY_HEIGHT,\n\tDEFAULT_STICKY_WIDTH,\n\tNODE_CREATOR_OPEN_SOURCES,\n\tSTICKY_NODE_TYPE,\n} from '@/constants';\nimport { useUIStore } from '@/stores/ui.store';\nimport type { AddedNodesAndConnections, ToggleNodeCreatorOptions } from '@/Interface';\nimport { useActions } from './NodeCreator/composables/useActions';\nimport KeyboardShortcutTooltip from '@/components/KeyboardShortcutTooltip.vue';\n\ntype Props = {\n\tnodeViewScale: number;\n\tcreateNodeActive?: boolean;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst NodeCreator = defineAsyncComponent(\n\tasync () => import('@/components/Node/NodeCreator/NodeCreator.vue'),\n);\n\nconst props = withDefaults(defineProps<Props>(), {\n\tcreateNodeActive: false,\n});\n\nconst emit = defineEmits<{\n\t(event: 'addNodes', value: AddedNodesAndConnections): void;\n\t(event: 'toggleNodeCreator', value: ToggleNodeCreatorOptions): void;\n}>();\n\nconst state = reactive({\n\tshowStickyButton: false,\n});\n\nconst uiStore = useUIStore();\n\nconst { getAddedNodesAndConnections } = useActions();\n\nfunction onCreateMenuHoverIn(mouseinEvent: MouseEvent) {\n\tconst buttonsWrapper = mouseinEvent.target as Element;\n\n\t// Once the popup menu is hovered, it's pointer events are disabled so it's not interfering with element underneath it.\n\tstate.showStickyButton = true;\n\tconst moveCallback = (mousemoveEvent: MouseEvent) => {\n\t\tif (buttonsWrapper) {\n\t\t\tconst wrapperBounds = buttonsWrapper.getBoundingClientRect();\n\t\t\tconst wrapperH = wrapperBounds.height;\n\t\t\tconst wrapperW = wrapperBounds.width;\n\t\t\tconst wrapperLeftNear = wrapperBounds.left;\n\t\t\tconst wrapperLeftFar = wrapperLeftNear + wrapperW;\n\t\t\tconst wrapperTopNear = wrapperBounds.top;\n\t\t\tconst wrapperTopFar = wrapperTopNear + wrapperH;\n\t\t\tconst inside =\n\t\t\t\tmousemoveEvent.pageX > wrapperLeftNear &&\n\t\t\t\tmousemoveEvent.pageX < wrapperLeftFar &&\n\t\t\t\tmousemoveEvent.pageY > wrapperTopNear &&\n\t\t\t\tmousemoveEvent.pageY < wrapperTopFar;\n\t\t\tif (!inside) {\n\t\t\t\tstate.showStickyButton = false;\n\t\t\t\tdocument.removeEventListener('mousemove', moveCallback, false);\n\t\t\t}\n\t\t}\n\t};\n\tdocument.addEventListener('mousemove', moveCallback, false);\n}\n\nfunction openNodeCreator() {\n\temit('toggleNodeCreator', {\n\t\tsource: NODE_CREATOR_OPEN_SOURCES.ADD_NODE_BUTTON,\n\t\tcreateNodeActive: true,\n\t});\n}\n\nfunction addStickyNote() {\n\tif (document.activeElement) {\n\t\t(document.activeElement as HTMLElement).blur();\n\t}\n\n\tconst offset: [number, number] = [...uiStore.nodeViewOffsetPosition];\n\n\tconst position = getMidCanvasPosition(props.nodeViewScale, offset);\n\tposition[0] -= DEFAULT_STICKY_WIDTH / 2;\n\tposition[1] -= DEFAULT_STICKY_HEIGHT / 2;\n\n\temit('addNodes', getAddedNodesAndConnections([{ type: STICKY_NODE_TYPE, position }]));\n}\n\nfunction closeNodeCreator() {\n\temit('toggleNodeCreator', { createNodeActive: false });\n}\n\nfunction nodeTypeSelected(nodeTypes: string[]) {\n\temit('addNodes', getAddedNodesAndConnections(nodeTypes.map((type) => ({ type }))));\n\tcloseNodeCreator();\n}\n</script>\n\n<template>\n\t<div>\n\t\t<div\n\t\t\tv-if=\"!createNodeActive\"\n\t\t\t:class=\"[$style.nodeButtonsWrapper, state.showStickyButton ? $style.noEvents : '']\"\n\t\t\t@mouseenter=\"onCreateMenuHoverIn\"\n\t\t>\n\t\t\t<div :class=\"$style.nodeCreatorButton\" data-test-id=\"node-creator-plus-button\">\n\t\t\t\t<keyboard-shortcut-tooltip\n\t\t\t\t\t:label=\"$locale.baseText('nodeView.openNodesPanel')\"\n\t\t\t\t\t:shortcut=\"{ keys: ['Tab'] }\"\n\t\t\t\t\tplacement=\"left\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-icon-button\n\t\t\t\t\t\tsize=\"xlarge\"\n\t\t\t\t\t\ticon=\"plus\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t:class=\"$style.nodeCreatorPlus\"\n\t\t\t\t\t\t@click=\"openNodeCreator\"\n\t\t\t\t\t/>\n\t\t\t\t</keyboard-shortcut-tooltip>\n\t\t\t\t<div\n\t\t\t\t\t:class=\"[$style.addStickyButton, state.showStickyButton ? $style.visibleButton : '']\"\n\t\t\t\t\t@click=\"addStickyNote\"\n\t\t\t\t\tdata-test-id=\"add-sticky-button\"\n\t\t\t\t>\n\t\t\t\t\t<keyboard-shortcut-tooltip\n\t\t\t\t\t\t:label=\"$locale.baseText('nodeView.addStickyHint')\"\n\t\t\t\t\t\t:shortcut=\"{ keys: ['s'], shiftKey: true }\"\n\t\t\t\t\t\tplacement=\"left\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<n8n-icon-button type=\"tertiary\" :icon=\"['far', 'note-sticky']\" />\n\t\t\t\t\t</keyboard-shortcut-tooltip>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<Suspense>\n\t\t\t<NodeCreator\n\t\t\t\t:active=\"createNodeActive\"\n\t\t\t\t@nodeTypeSelected=\"nodeTypeSelected\"\n\t\t\t\t@closeNodeCreator=\"closeNodeCreator\"\n\t\t\t/>\n\t\t</Suspense>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.nodeButtonsWrapper {\n\tposition: absolute;\n\twidth: 150px;\n\theight: 200px;\n\ttop: 0;\n\tright: 0;\n\tdisplay: flex;\n}\n\n.addStickyButton {\n\tmargin-top: var(--spacing-2xs);\n\topacity: 0;\n\ttransition: 0.1s;\n\ttransition-timing-function: linear;\n}\n\n.visibleButton {\n\topacity: 1;\n\tpointer-events: all;\n}\n\n.noEvents {\n\tpointer-events: none;\n}\n\n.nodeCreatorButton {\n\tposition: absolute;\n\ttext-align: center;\n\ttop: var(--spacing-s);\n\tright: var(--spacing-s);\n\tpointer-events: all !important;\n\n\tbutton {\n\t\tborder-color: var(--color-button-node-creator-border-font);\n\t\tcolor: var(--color-button-node-creator-border-font);\n\n\t\t&:hover {\n\t\t\tborder-color: var(--color-button-node-creator-hover-border-font);\n\t\t\tcolor: var(--color-button-node-creator-hover-border-font);\n\t\t\tbackground: var(--color-button-node-creator-background);\n\t\t}\n\t}\n}\n.nodeCreatorPlus {\n\tborder-width: 2px;\n\tborder-radius: var(--border-radius-base);\n\twidth: 36px;\n\theight: 36px;\n}\n</style>\n"],"file":"assets/NodeCreation-RvlbocPg.js"}
|