n8n-editor-ui 1.47.0 → 1.47.2
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 +79 -79
- package/dist/assets/{AuthView-BgFWzBDm.js → AuthView-B_jZMnGj.js} +2 -2
- package/dist/assets/{AuthView-BgFWzBDm.js.map → AuthView-B_jZMnGj.js.map} +1 -1
- package/dist/assets/{CanvasControls-m_3acPPd.js → CanvasControls-ns1B0A0j.js} +2 -2
- package/dist/assets/{CanvasControls-m_3acPPd.js.map → CanvasControls-ns1B0A0j.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-CN6JWR-N.js → ChangePasswordView-BDsuHv0B.js} +2 -2
- package/dist/assets/{ChangePasswordView-CN6JWR-N.js.map → ChangePasswordView-BDsuHv0B.js.map} +1 -1
- package/dist/assets/{CollectionParameter-DHmcKhO-.js → CollectionParameter-Br-xtutZ.js} +2 -2
- package/dist/assets/CollectionParameter-Br-xtutZ.js.map +1 -0
- package/dist/assets/{CredentialsView-D9TXjOnK.js → CredentialsView-DnJ_jhDo.js} +2 -2
- package/dist/assets/{CredentialsView-D9TXjOnK.js.map → CredentialsView-DnJ_jhDo.js.map} +1 -1
- package/dist/assets/{ErrorView-CYag8fsg.js → ErrorView-BfV5e5ko.js} +2 -2
- package/dist/assets/{ErrorView-CYag8fsg.js.map → ErrorView-BfV5e5ko.js.map} +1 -1
- package/dist/assets/{ExecutionsFilter-Cf35yNfd.js → ExecutionsFilter-0XcXH83H.js} +2 -2
- package/dist/assets/{ExecutionsFilter-Cf35yNfd.js.map → ExecutionsFilter-0XcXH83H.js.map} +1 -1
- package/dist/assets/{ExecutionsView-ztrgLYNP.js → ExecutionsView-aFiZuLVt.js} +2 -2
- package/dist/assets/{ExecutionsView-ztrgLYNP.js.map → ExecutionsView-aFiZuLVt.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-C-0yB-bx.js → ForgotMyPasswordView-64X9tXq4.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-C-0yB-bx.js.map → ForgotMyPasswordView-64X9tXq4.js.map} +1 -1
- package/dist/assets/MainHeader-Ch0Iz_7s.js +2 -0
- package/dist/assets/{MainHeader-CMxbwL4C.js.map → MainHeader-Ch0Iz_7s.js.map} +1 -1
- package/dist/assets/{MainSidebar-BuwaBgG9.js → MainSidebar-3ee-tTgz.js} +2 -2
- package/dist/assets/{MainSidebar-BuwaBgG9.js.map → MainSidebar-3ee-tTgz.js.map} +1 -1
- package/dist/assets/{NodeCreation-B7Uimsok.js → NodeCreation-PrQGENrl.js} +3 -3
- package/dist/assets/{NodeCreation-B7Uimsok.js.map → NodeCreation-PrQGENrl.js.map} +1 -1
- package/dist/assets/{NodeCreator-IRjqf3_R.js → NodeCreator-DlK1669m.js} +2 -2
- package/dist/assets/{NodeCreator-IRjqf3_R.js.map → NodeCreator-DlK1669m.js.map} +1 -1
- package/dist/assets/{NodeDetailsView-CSnjluIR.js → NodeDetailsView-DcV7LI-g.js} +4 -4
- package/dist/assets/{NodeDetailsView-CSnjluIR.js.map → NodeDetailsView-DcV7LI-g.js.map} +1 -1
- package/dist/assets/{NodeView-DMzj-gox.css → NodeView--67hs6V6.css} +1 -1
- package/dist/assets/NodeView-D_kbUfVN.js +3 -0
- package/dist/assets/NodeView-D_kbUfVN.js.map +1 -0
- package/dist/assets/{NodeView.v2-DyU_S0rY.js → NodeView.v2-D_Wbnl01.js} +3 -3
- package/dist/assets/{NodeView.v2-DyU_S0rY.js.map → NodeView.v2-D_Wbnl01.js.map} +1 -1
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-C1N0EZCM.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js} +2 -2
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-C1N0EZCM.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js.map} +1 -1
- package/dist/assets/{ProjectSettings-CbNlX27g.js → ProjectSettings-CfcplqBX.js} +2 -2
- package/dist/assets/{ProjectSettings-CbNlX27g.js.map → ProjectSettings-CfcplqBX.js.map} +1 -1
- package/dist/assets/{ProjectTabs-Cx2VWeba.js → ProjectTabs-5ZO9YR8J.js} +2 -2
- package/dist/assets/{ProjectTabs-Cx2VWeba.js.map → ProjectTabs-5ZO9YR8J.js.map} +1 -1
- package/dist/assets/{PushConnectionTracker-C_r8Zv-p.js → PushConnectionTracker-Bp-RjnYr.js} +2 -2
- package/dist/assets/{PushConnectionTracker-C_r8Zv-p.js.map → PushConnectionTracker-Bp-RjnYr.js.map} +1 -1
- package/dist/assets/{ResourcesListLayout-CKSHiUAP.js → ResourcesListLayout-B4W1PSHT.js} +2 -2
- package/dist/assets/{ResourcesListLayout-CKSHiUAP.js.map → ResourcesListLayout-B4W1PSHT.js.map} +1 -1
- package/dist/assets/{RunDataAi-BVqsN7UN.js → RunDataAi-C3XiqNZa.js} +2 -2
- package/dist/assets/{RunDataAi-BVqsN7UN.js.map → RunDataAi-C3XiqNZa.js.map} +1 -1
- package/dist/assets/{RunDataJson-6Yfwd78r.js → RunDataJson-CMcOD-78.js} +3 -3
- package/dist/assets/{RunDataJson-6Yfwd78r.js.map → RunDataJson-CMcOD-78.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-5ig3g4km.js → RunDataJsonActions-BQBpmtOi.js} +2 -2
- package/dist/assets/{RunDataJsonActions-5ig3g4km.js.map → RunDataJsonActions-BQBpmtOi.js.map} +1 -1
- package/dist/assets/{RunDataSchema-CrW957BW.js → RunDataSchema-CF4YH-8y.js} +3 -3
- package/dist/assets/{RunDataSchema-CrW957BW.js.map → RunDataSchema-CF4YH-8y.js.map} +1 -1
- package/dist/assets/{RunDataSearch-BrIWOZXO.js → RunDataSearch-DwB8g_cE.js} +2 -2
- package/dist/assets/{RunDataSearch-BrIWOZXO.js.map → RunDataSearch-DwB8g_cE.js.map} +1 -1
- package/dist/assets/RunDataTable-BVAuNDP9.js +2 -0
- package/dist/assets/{RunDataTable-B01U16vv.js.map → RunDataTable-BVAuNDP9.js.map} +1 -1
- package/dist/assets/{SamlOnboarding-CfbBlTNm.js → SamlOnboarding-Csd8l-7T.js} +2 -2
- package/dist/assets/{SamlOnboarding-CfbBlTNm.js.map → SamlOnboarding-Csd8l-7T.js.map} +1 -1
- package/dist/assets/{SettingsApiView-CuliNEKo.js → SettingsApiView-DnvdV7dx.js} +2 -2
- package/dist/assets/{SettingsApiView-CuliNEKo.js.map → SettingsApiView-DnvdV7dx.js.map} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-CeY4uqH-.js → SettingsCommunityNodesView-C11a_Ybs.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-CeY4uqH-.js.map → SettingsCommunityNodesView-C11a_Ybs.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets-CE7ObFx_.js → SettingsExternalSecrets-IIReUcRG.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets-CE7ObFx_.js.map → SettingsExternalSecrets-IIReUcRG.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-DQqNf_Q9.js → SettingsFakeDoorView-BOUfBJS8.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-DQqNf_Q9.js.map → SettingsFakeDoorView-BOUfBJS8.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-9hy5C87y.js → SettingsLdapView-BaSjQ4cy.js} +2 -2
- package/dist/assets/{SettingsLdapView-9hy5C87y.js.map → SettingsLdapView-BaSjQ4cy.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-Cc0h5DhT.js → SettingsLogStreamingView-COGhA1hN.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-Cc0h5DhT.js.map → SettingsLogStreamingView-COGhA1hN.js.map} +1 -1
- package/dist/assets/{SettingsPersonalView-Cs82ezMX.js → SettingsPersonalView-BJGgPTwa.js} +2 -2
- package/dist/assets/{SettingsPersonalView-Cs82ezMX.js.map → SettingsPersonalView-BJGgPTwa.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-Dr7R-QpH.js → SettingsSourceControl-DkdSLuvp.js} +2 -2
- package/dist/assets/{SettingsSourceControl-Dr7R-QpH.js.map → SettingsSourceControl-DkdSLuvp.js.map} +1 -1
- package/dist/assets/{SettingsSso-Di6lHXV2.js → SettingsSso-DA9AOKH5.js} +2 -2
- package/dist/assets/{SettingsSso-Di6lHXV2.js.map → SettingsSso-DA9AOKH5.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-g86Q7EQY.js → SettingsUsageAndPlan-BVPtlthH.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-g86Q7EQY.js.map → SettingsUsageAndPlan-BVPtlthH.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-dOWjUJTW.js → SettingsUsersView-BuKt4ZDO.js} +2 -2
- package/dist/assets/{SettingsUsersView-dOWjUJTW.js.map → SettingsUsersView-BuKt4ZDO.js.map} +1 -1
- package/dist/assets/{SettingsView-DQ0hQWFt.js → SettingsView-DJ78VuiY.js} +2 -2
- package/dist/assets/{SettingsView-DQ0hQWFt.js.map → SettingsView-DJ78VuiY.js.map} +1 -1
- package/dist/assets/{SetupView-CqT8d0D8.js → SetupView-C70Dkfed.js} +2 -2
- package/dist/assets/{SetupView-CqT8d0D8.js.map → SetupView-C70Dkfed.js.map} +1 -1
- package/dist/assets/{SetupWorkflowCredentialsButton-BR-ObOqw.js → SetupWorkflowCredentialsButton-CEQ1LrFl.js} +2 -2
- package/dist/assets/{SetupWorkflowCredentialsButton-BR-ObOqw.js.map → SetupWorkflowCredentialsButton-CEQ1LrFl.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-DHHtk6_-.js → SetupWorkflowFromTemplateView-BUzzXtBr.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-DHHtk6_-.js.map → SetupWorkflowFromTemplateView-BUzzXtBr.js.map} +1 -1
- package/dist/assets/{SigninView-2eLLF8DU.js → SigninView-B3CNL-yp.js} +2 -2
- package/dist/assets/{SigninView-2eLLF8DU.js.map → SigninView-B3CNL-yp.js.map} +1 -1
- package/dist/assets/{SignoutView-BQyCyjsK.js → SignoutView-svcLavkC.js} +2 -2
- package/dist/assets/{SignoutView-BQyCyjsK.js.map → SignoutView-svcLavkC.js.map} +1 -1
- package/dist/assets/{SignupView-ByYEkUpW.js → SignupView-DJWRTPKF.js} +2 -2
- package/dist/assets/{SignupView-ByYEkUpW.js.map → SignupView-DJWRTPKF.js.map} +1 -1
- package/dist/assets/{TemplateDetails-I6WMCxGm.js → TemplateDetails-BnbiWxo-.js} +2 -2
- package/dist/assets/{TemplateDetails-I6WMCxGm.js.map → TemplateDetails-BnbiWxo-.js.map} +1 -1
- package/dist/assets/{TemplateList-DRf0Cbhg.js → TemplateList-By-t2s0M.js} +2 -2
- package/dist/assets/{TemplateList-DRf0Cbhg.js.map → TemplateList-By-t2s0M.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-BYkDe49v.js → TemplatesCollectionView-D2L1fmSc.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-BYkDe49v.js.map → TemplatesCollectionView-D2L1fmSc.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-CiZ7aZcy.js → TemplatesSearchView-Bmr6Nd6g.js} +2 -2
- package/dist/assets/{TemplatesSearchView-CiZ7aZcy.js.map → TemplatesSearchView-Bmr6Nd6g.js.map} +1 -1
- package/dist/assets/{TemplatesView-zULLoEwu.js → TemplatesView-BbunSn-s.js} +2 -2
- package/dist/assets/{TemplatesView-zULLoEwu.js.map → TemplatesView-BbunSn-s.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-DptRLbdX.js → TemplatesWorkflowView-XxBIlMWY.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-DptRLbdX.js.map → TemplatesWorkflowView-XxBIlMWY.js.map} +1 -1
- package/dist/assets/{VariablesView-NcNcsjHY.js → VariablesView-ZY5xLmKI.js} +2 -2
- package/dist/assets/{VariablesView-NcNcsjHY.js.map → VariablesView-ZY5xLmKI.js.map} +1 -1
- package/dist/assets/{WorkerView-dtJzfgCM.js → WorkerView-DV19-i1-.js} +2 -2
- package/dist/assets/{WorkerView-dtJzfgCM.js.map → WorkerView-DV19-i1-.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-D6Zad1X2.js → WorkflowActivator-BXWURYao.js} +2 -2
- package/dist/assets/{WorkflowActivator-D6Zad1X2.js.map → WorkflowActivator-BXWURYao.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsInfoAccordion-C86A1CHv.js → WorkflowExecutionsInfoAccordion-aldNazgt.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-C86A1CHv.js.map → WorkflowExecutionsInfoAccordion-aldNazgt.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-DAfHDMth.js → WorkflowExecutionsLandingPage-CaAameTk.js} +2 -2
- package/dist/assets/{WorkflowExecutionsLandingPage-DAfHDMth.js.map → WorkflowExecutionsLandingPage-CaAameTk.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsPreview-C_EBlNX6.js → WorkflowExecutionsPreview-Bb-wJtr-.js} +2 -2
- package/dist/assets/WorkflowExecutionsPreview-Bb-wJtr-.js.map +1 -0
- package/dist/assets/WorkflowExecutionsView-D7nlOP1-.js +2 -0
- package/dist/assets/WorkflowExecutionsView-D7nlOP1-.js.map +1 -0
- package/dist/assets/{WorkflowHistory-DkdQ1koF.js → WorkflowHistory-C6zCGFoY.js} +2 -2
- package/dist/assets/{WorkflowHistory-DkdQ1koF.js.map → WorkflowHistory-C6zCGFoY.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-BPMBW_hz.js → WorkflowOnboardingView-Bu_Oqtr7.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-BPMBW_hz.js.map → WorkflowOnboardingView-Bu_Oqtr7.js.map} +1 -1
- package/dist/assets/{WorkflowPreview-CLzyAzmJ.js → WorkflowPreview-CVwpKdpj.js} +2 -2
- package/dist/assets/{WorkflowPreview-CLzyAzmJ.js.map → WorkflowPreview-CVwpKdpj.js.map} +1 -1
- package/dist/assets/{WorkflowsView-CzJx_-P5.js → WorkflowsView-DVeAZ2zW.js} +2 -2
- package/dist/assets/{WorkflowsView-CzJx_-P5.js.map → WorkflowsView-DVeAZ2zW.js.map} +1 -1
- package/dist/assets/{cloud-CRMEbZfJ.js → cloud-BRhZDk2r.js} +2 -2
- package/dist/assets/{cloud-CRMEbZfJ.js.map → cloud-BRhZDk2r.js.map} +1 -1
- package/dist/assets/{collaboration.store-Co5wlk8y.js → collaboration.store-Ol7bcCFc.js} +2 -2
- package/dist/assets/{collaboration.store-Co5wlk8y.js.map → collaboration.store-Ol7bcCFc.js.map} +1 -1
- package/dist/assets/index-1OxaEeO3.js +341 -0
- package/dist/assets/index-1OxaEeO3.js.map +1 -0
- package/dist/assets/{nodeCreator.store-CTXKjjQB.js → nodeCreator.store-FIsc3SCx.js} +2 -2
- package/dist/assets/{nodeCreator.store-CTXKjjQB.js.map → nodeCreator.store-FIsc3SCx.js.map} +1 -1
- package/dist/assets/{templateActions-CIRsIG2W.js → templateActions-w_1vSarr.js} +2 -2
- package/dist/assets/{templateActions-CIRsIG2W.js.map → templateActions-w_1vSarr.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-BzC-1xF-.js → useExecutionDebugging-EHinBq_u.js} +2 -2
- package/dist/assets/{useExecutionDebugging-BzC-1xF-.js.map → useExecutionDebugging-EHinBq_u.js.map} +1 -1
- package/dist/assets/{useExecutionHelpers-C2K8pfbF.js → useExecutionHelpers-LeKoU_T-.js} +2 -2
- package/dist/assets/{useExecutionHelpers-C2K8pfbF.js.map → useExecutionHelpers-LeKoU_T-.js.map} +1 -1
- package/dist/assets/{usePushConnection-EMXpPhl-.js → usePushConnection-PQgFeT_8.js} +2 -2
- package/dist/assets/{usePushConnection-EMXpPhl-.js.map → usePushConnection-PQgFeT_8.js.map} +1 -1
- package/dist/assets/{useUserHelpers-Bn_ZV9Jv.js → useUserHelpers-DZtbUAMm.js} +2 -2
- package/dist/assets/{useUserHelpers-Bn_ZV9Jv.js.map → useUserHelpers-DZtbUAMm.js.map} +1 -1
- package/dist/assets/{useWorkflowActivate-BwVActuc.js → useWorkflowActivate-npf1npdP.js} +2 -2
- package/dist/assets/{useWorkflowActivate-BwVActuc.js.map → useWorkflowActivate-npf1npdP.js.map} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-DHmcKhO-.js.map +0 -1
- package/dist/assets/MainHeader-CMxbwL4C.js +0 -2
- package/dist/assets/NodeView-C-hQ3_xD.js +0 -3
- package/dist/assets/NodeView-C-hQ3_xD.js.map +0 -1
- package/dist/assets/RunDataTable-B01U16vv.js +0 -2
- package/dist/assets/WorkflowExecutionsPreview-C_EBlNX6.js.map +0 -1
- package/dist/assets/WorkflowExecutionsView-Nm1Oo9El.js +0 -2
- package/dist/assets/WorkflowExecutionsView-Nm1Oo9El.js.map +0 -1
- package/dist/assets/index-Dtri_pSJ.js +0 -341
- package/dist/assets/index-Dtri_pSJ.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as j}from"./pinia-sugP77Im.js";import{bW as D,bX as U,bY as x,bZ as De,O as Le,a4 as Y,$ as Ye,bC as F,b_ as X,b$ as te,c0 as oe,c1 as re,c2 as se,c3 as ne,c4 as ie,c5 as ae,c6 as Ge,c7 as Me,c8 as ce,c9 as le,ca as ue,b2 as M,as as de,bL as V,cb as Ue,cc as pe,bM as fe,cd as ye,aU as ge,ce as Ee,bP as W,cf as He,cg as Be,ch as Te,ci as Ve,cj as Ne,ck as Fe,cl as me,cm as We,cn as Ke,co as $e,cp as ze,cq as je,cr as _e,cs as Xe,ct as qe,cu as Ze,cv as Qe,cw as Je,cx as et,cy as tt,cz as ot,cA as Ae,cB as rt,cC as st,cD as be,cE as nt,x as H,cF as it,m as at,cG as Ce,cH as ct,R as lt,j as ut,L as dt,e as pt,aN as ft,a3 as yt,G as gt}from"./index-Dtri_pSJ.js";import{v as K}from"./uuid-SoommWqA.js";import{B as Et,C as Se}from"./lodash-es-CZ1inz46.js";import{N as P,n as Tt,o as Nt}from"./n8n-4UEsHtUL.js";import{r as w,e as L,n as mt}from"./vendor-Dv5OeN6t.js";const _t=60,At=30,bt=30,Ct=15,St=-20,he=-200,ht=-5;function It(e,r){let t=0,n=0;for(;t<e.length&&n<r.length;){const u=e.charAt(t).toLowerCase(),a=r.charAt(n).toLowerCase();u===a&&t++,++n}return e.length!==0&&r.length!==0&&t===e.length}function Ot(e,r){return Pe(e,r,0,0,null,[],256,0,0,5)}function Pe(e,r,t,n,u,a,f,T,y,b){let g=0;if(++y>=b)return{matched:!1,outScore:g};if(t===e.length||n===r.length)return{matched:!1,outScore:g};let C=!1,O=[],N=0,v=!0;for(;t<e.length&&n<r.length;){if(e[t].toLowerCase()===r[n].toLowerCase()){if(T>=f)return{matched:!1,outScore:g};v&&u&&(a=[...u],v=!1);const c=[],p=Pe(e,r,t,n+1,a,c,f,T,y,b),_=p.outScore;p.matched&&((!C||_>N)&&(O=[...c],N=_),C=!0),a[T++]=n,++t}++n}const S=t===e.length;if(S){g=100;let c=St*a[0];c=c<he?he:c,g+=c;const p=r.length-T;g+=ht*p;for(let _=0;_<T;_++){const k=a[_];if(_>0){const h=a[_-1];k===h+1&&(g+=_t)}if(k>0){const h=r[k-1],o=r[k];h!==h.toUpperCase()&&o!==o.toLowerCase()&&(g+=bt),(h==="_"||h===" ")&&(g+=At)}else g+=Ct}return C&&(!S||N>g)?(a=[...O],g=N,{matched:!0,outScore:g}):S?{matched:!0,outScore:g}:{matched:!1,outScore:g}}return{matched:!1,outScore:g}}function vt(e,r){if(e.hasOwnProperty(r))return e[r];const t=r.split(".");let n=e,u=0;for(;n&&u<t.length;){const a=t[u];n=n[a],u++}return n}function Rt(e,r,t){const n=r.reduce((u,a)=>{let f=[];t.forEach(({key:y,weight:b})=>{const g=vt(a,y);Array.isArray(g)?f=f.concat(g.map(C=>({value:C,weight:b}))):typeof g=="string"&&f.push({value:g,weight:b})});const T=f.reduce((y,{value:b,weight:g})=>{if(!It(e,b))return y;const C=Ot(e,b);C.outScore*=g;const{matched:O,outScore:N}=C;return!y&&O||O&&y&&N>y.outScore?C:y},null);return T&&u.push({score:T.outScore,item:a}),u},[]);return n.sort((u,a)=>a.score-u.score),n}function G(e,r,t="node"){var u,a,f;const n={uuid:K(),key:e.name,subcategory:r??((f=(a=(u=e.codex)==null?void 0:u.subcategories)==null?void 0:a[D])==null?void 0:f[0])??U,properties:{...e},type:t};return n}function kt(e){const r=[D,x];return e.reduce((t,n)=>{let u=[U];return r.forEach(a=>{var f,T,y,b;(T=(f=n.codex)==null?void 0:f.categories)!=null&&T.includes(a)&&(u=((b=(y=n.codex)==null?void 0:y.subcategories)==null?void 0:b[a])??[])}),u.forEach(a=>{t[a]||(t[a]=[]),t[a].push(G(n,a))}),t},{})}function $(e){return e.sort((r,t)=>{var a,f,T,y;if(r.type!=="node"||t.type!=="node")return 0;const n=((f=(a=r.properties)==null?void 0:a.displayName)==null?void 0:f.toLowerCase())||r.key,u=((y=(T=t.properties)==null?void 0:T.displayName)==null?void 0:y.toLowerCase())||t.key;return n.localeCompare(u,void 0,{sensitivity:"base"})})}function Ie(e,r){const t=e.toLowerCase().replace("trigger","").trimEnd();return(Rt(t,r,[{key:"properties.displayName",weight:1.3},{key:"properties.codex.alias",weight:1}])||[]).map(({item:u})=>u)}function Oe(e){return e.map(r=>r.type==="section"?r.children:r).flat()}function z(e){var t,n,u,a,f;return e.type==="node"&&(n=(t=e.properties.codex)==null?void 0:t.categories)!=null&&n.includes(x)?!((f=(a=(u=e.properties.codex)==null?void 0:u.subcategories)==null?void 0:a[x])==null?void 0:f.includes(De)):!1}function ve(e,r,t=!0){const n=r.filter(N=>typeof N=="object"),u=N=>N.reduce((v,S)=>{const c=n.find(_=>_.items.includes(S.key)),p=(c==null?void 0:c.key)??"other";return p&&(v[p]=[...v[p]??[],S]),v},{}),a=(N,v)=>N.map(S=>({type:"section",key:S.key,title:S.title,children:t?$(v[S.key]??[]):v[S.key]??[]})),f=e.filter(N=>!z(N)),T=e.filter(N=>z(N)),y=u(f),b=a(n,y),g=u(T),C=a(Et(n,["title"]),g),O=[...b,...C].concat({type:"section",key:"other",title:Le.baseText("nodeCreator.sectionNames.other"),children:$(y.other??[])}).filter(N=>N.type!=="section"||N.children.length>0);return O.length<=1?e:O}function Re(e,r){return e.filter(t=>{var n,u,a;return!t.hidden&&((a=(u=(n=t.codex)==null?void 0:n.subcategories)==null?void 0:u[x])==null?void 0:a.includes(r))}).map(t=>({key:t.name,type:"node",properties:{group:[],name:t.name,displayName:t.displayName,title:t.displayName,description:t.description,icon:t.icon,iconUrl:t.iconUrl}})).sort((t,n)=>t.properties.displayName.localeCompare(n.properties.displayName))}function Vt(e){const r=H(),t=Y(),n=Ye(),u=Re(t.allLatestNodeTypes,it),a=Re(t.allLatestNodeTypes,De);return{value:F,title:r.baseText("nodeCreator.aiPanel.aiNodes"),subtitle:r.baseText("nodeCreator.aiPanel.selectAiNode"),items:[{key:"ai_templates_root",type:"link",properties:{title:r.baseText("nodeCreator.aiPanel.linkItem.title"),icon:"box-open",description:r.baseText("nodeCreator.aiPanel.linkItem.description"),name:"ai_templates_root",url:n.getWebsiteCategoryURL(void 0,"AdvancedAI"),tag:{type:"info",text:r.baseText("nodeCreator.triggerHelperPanel.manualTriggerTag")}}},...a,...u,{key:X,type:"view",properties:{title:r.baseText("nodeCreator.aiPanel.aiOtherNodes"),icon:"robot",description:r.baseText("nodeCreator.aiPanel.aiOtherNodesDescription")}}]}}function Dt(e){const r=H();function t(n){return{connectionType:n,iconProps:{color:`var(--node-type-${n}-color)`},panelClass:`nodes-list-panel-${n}`}}return{value:X,title:r.baseText("nodeCreator.aiPanel.aiOtherNodes"),subtitle:r.baseText("nodeCreator.aiPanel.selectAiNode"),items:[{key:te,type:"subcategory",properties:{title:te,icon:"file-import",...t(P.AiDocument)}},{key:oe,type:"subcategory",properties:{title:oe,icon:"language",...t(P.AiLanguageModel)}},{key:re,type:"subcategory",properties:{title:re,icon:"brain",...t(P.AiMemory)}},{key:se,type:"subcategory",properties:{title:se,icon:"list",...t(P.AiOutputParser)}},{key:ne,type:"subcategory",properties:{title:ne,icon:"search",...t(P.AiRetriever)}},{key:ie,type:"subcategory",properties:{title:ie,icon:"grip-lines-vertical",...t(P.AiTextSplitter)}},{type:"subcategory",key:ae,category:D,properties:{title:ae,icon:"tools",...t(P.AiTool),sections:[{key:"popular",title:r.baseText("nodeCreator.sectionNames.popular"),items:[Ge,Me]}]}},{key:ce,type:"subcategory",properties:{title:ce,icon:"vector-square",...t(P.AiEmbedding)}},{key:le,type:"subcategory",properties:{title:le,icon:"project-diagram",...t(P.AiVectorStore)}},{key:ue,type:"subcategory",properties:{title:ue,icon:"code"}}]}}function Ft(){const e=H();return{value:M,title:e.baseText("nodeCreator.triggerHelperPanel.selectATrigger"),subtitle:e.baseText("nodeCreator.triggerHelperPanel.selectATriggerDescription"),items:[{key:de,type:"node",category:[D],properties:{group:[],name:de,displayName:e.baseText("nodeCreator.triggerHelperPanel.manualTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.manualTriggerDescription"),icon:"fa:mouse-pointer"}},{key:U,type:"subcategory",properties:{forceIncludeNodes:[V,Ue],title:"App Trigger Nodes",icon:"satellite-dish"}},{key:pe,type:"node",category:[D],properties:{group:[],name:pe,displayName:e.baseText("nodeCreator.triggerHelperPanel.scheduleTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.scheduleTriggerDescription"),icon:"fa:clock"}},{key:V,type:"node",category:[D],properties:{group:[],name:V,displayName:e.baseText("nodeCreator.triggerHelperPanel.webhookTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.webhookTriggerDescription"),iconData:{type:"file",icon:"webhook",fileBuffer:"/static/webhook-icon.svg"}}},{key:fe,type:"node",category:[D],properties:{group:[],name:fe,displayName:e.baseText("nodeCreator.triggerHelperPanel.formTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.formTriggerDescription"),iconData:{type:"file",icon:"form",fileBuffer:"/static/form-grey.svg"}}},{key:ye,type:"node",category:[D],properties:{group:[],name:ye,displayName:e.baseText("nodeCreator.triggerHelperPanel.workflowTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.workflowTriggerDescription"),icon:"fa:sign-out-alt"}},{key:ge,type:"node",category:[D],properties:{group:[],name:ge,displayName:e.baseText("nodeCreator.triggerHelperPanel.manualChatTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.manualChatTriggerDescription"),icon:"fa:comments"}},{type:"subcategory",key:Ee,category:D,properties:{title:Ee,icon:"folder-open"}}]}}function Wt(e){const r=H(),t={value:W,title:r.baseText("nodeCreator.triggerHelperPanel.whatHappensNext"),items:[{key:U,type:"subcategory",properties:{title:"App Regular Nodes",icon:"globe",forceIncludeNodes:[He,Be]}},{type:"subcategory",key:Te,category:D,properties:{title:Te,icon:"pen",sections:[{key:"popular",title:r.baseText("nodeCreator.sectionNames.popular"),items:[Ve,Ne,Fe]},{key:"addOrRemove",title:r.baseText("nodeCreator.sectionNames.transform.addOrRemove"),items:[me,We,Ke,$e]},{key:"combine",title:r.baseText("nodeCreator.sectionNames.transform.combine"),items:[ze,je,_e]},{key:"convert",title:r.baseText("nodeCreator.sectionNames.transform.convert"),items:[Xe,qe,Ze,Qe,Je,et,tt,ot]}]}},{type:"subcategory",key:Ae,category:D,properties:{title:Ae,icon:"code-branch",sections:[{key:"popular",title:r.baseText("nodeCreator.sectionNames.popular"),items:[me,rt,st,_e]}]}},{type:"subcategory",key:be,category:D,properties:{title:be,icon:"toolbox",sections:[{key:"popular",title:r.baseText("nodeCreator.sectionNames.popular"),items:[nt,V,Ne]}]}}]};return(e??[]).some(u=>{var a,f;return(f=(a=u.codex)==null?void 0:a.categories)==null?void 0:f.includes(x)})&&t.items.push({key:F,type:"view",properties:{title:r.baseText("nodeCreator.aiPanel.langchainAiNodes"),icon:"robot",description:r.baseText("nodeCreator.aiPanel.nodesForAi"),tag:{type:"success",text:r.baseText("nodeCreator.aiPanel.newTag")},borderless:!0}}),t.items.push({key:M,type:"view",properties:{title:r.baseText("nodeCreator.triggerHelperPanel.addAnotherTrigger"),icon:"bolt",description:r.baseText("nodeCreator.triggerHelperPanel.addAnotherTriggerDescription")}}),t}const Pt="data-keyboard-nav-id",ke=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Enter","Escape","Tab"],wt=j("nodeCreatorKeyboardNavigation",()=>{const e=w([]),r=w(null),t=w({});function n(c){return c==null?void 0:c.getAttribute("data-keyboard-nav-type")}function u(c){return(c==null?void 0:c.getAttribute(Pt))||void 0}async function a(){return await new Promise(c=>{v(),setTimeout(()=>{e.value=Array.from(document.querySelectorAll("[data-keyboard-nav-type]")).map(p=>new WeakRef(p)),c()},0)})}function f(c,p){Object.values(t.value).filter(h=>h.keyboardKeys.includes(c)).forEach(h=>{if(!r.value)return;(h.condition===void 0||h.condition(n(p)||"",r.value))&&r.value&&h.handler(r.value,c)})}async function T(c){var s,d,l;const p=c.key;if(!ke.includes(p))return;c.preventDefault(),c.stopPropagation(),await a();const _=e.value.findIndex(i=>u(i==null?void 0:i.deref())===r.value),k=(s=e.value[_])==null?void 0:s.deref(),h=p==="ArrowDown",o=p==="ArrowUp";if(k){if(h){const i=_<e.value.length-1?_+1:0;b((d=e.value[i])==null?void 0:d.deref())}if(o){const i=_>0?_-1:e.value.length-1;b((l=e.value[i])==null?void 0:l.deref())}f(p,k)}}function y(c){r.value=c}function b(c){const p=u(c);p&&(y(p),c!=null&&c.scrollIntoView&&(c==null||c.scrollIntoView({block:"center"})))}async function g(c){var p;await a(),b((p=e.value[c])==null?void 0:p.deref())}function C(){document.addEventListener("keydown",T,{capture:!0})}function O(){v(),document.removeEventListener("keydown",T,{capture:!0})}function N(c,p){p.keyboardKeys.forEach(_=>{if(ke.includes(_))t.value={...t.value,[c]:p};else throw new Error(`Key ${_} is not supported`)})}function v(){e.value=[]}function S(){return e.value.findIndex(c=>u(c==null?void 0:c.deref())===r.value)}return{activeItemId:r,attachKeydownEvent:C,refreshSelectableItems:a,detachKeydownEvent:O,registerKeyHook:N,getActiveItemIndex:S,setActiveItemId:y,setActiveItemIndex:g}}),xt=j("nodeCreatorViewStacks",()=>{const e=Lt(),{getActiveItemIndex:r}=wt(),t=H(),n=w([]),u=L(()=>{const o=y();if(!(o!=null&&o.baselineItems))return o.items?c(o.items):[];if(o.search&&T.value){const s=T.value.length>0?T.value:Oe(o.baselineItems??[]),d=at().aiNodes.length>0,l=C(o)||d?s:N(s),i=c(Ie(o.search||"",l)),A=O(i,!1)??i;return o.activeIndex=A.some(E=>E.type==="section")?1:0,A}return c(O(o.baselineItems,!0))}),a=L(()=>{const o=y();if(!o)return{};const s=Oe(o.baselineItems??[]);return{...o,items:u.value,hasSearch:s.length>8||(o==null?void 0:o.hasSearch)}}),f=L(()=>a.value.mode||M),T=L(()=>{const o=y();return o!=null&&o.searchItems?o.searchItems.map(s=>G(s,o.subcategory)):[]});function y(){return n.value[n.value.length-1]}const b=L(()=>{const o=y();if(!(o!=null&&o.search))return[];const s=e.mergedNodes.map(E=>G(E)),d=C(o)?s:N(s);let l=c(Ie(o.search||"",d));return C(o)&&(l=O(l)),l.filter(E=>!u.value.find(R=>R.type==="section"?R.children.some(I=>I.key===E.key):R.key===E.key)).filter(E=>E.type==="section"?E.children.some(m=>u.value.some(I=>I.key===m.key)):!0)}),g=L(()=>kt(e.mergedNodes));function C(o){return o.rootView===F}function O(o,s=!0){const d=o.filter(l=>z(l));if(d.length>0){const l=new Map;d.forEach(m=>{var B,q,Z,Q,J,ee;const I=(Z=(q=(B=m.properties.codex)==null?void 0:B.subcategories)==null?void 0:q[x])==null?void 0:Z[0];if(I){const we=((Q=l.get(I))==null?void 0:Q.items)??[],xe=!((ee=(J=m.properties.codex)==null?void 0:J.subcategories)!=null&&ee[x].includes(Ce));l.set(I,{key:I,title:xe?`${I} (${t.baseText("nodeCreator.subnodes")})`:I,items:[...we,m.key]})}});const i=Se(o,d),A=i.filter(m=>m.type==="node"&&Y().isTriggerNode(m.properties.name)),E=Se(i,A);if(i.length>0){let m="";E.length&&A.length?m=t.baseText("nodeCreator.actionsCategory.regularAndTriggers"):m=E.length?t.baseText("nodeCreator.actionsCategory.regularNodes"):t.baseText("nodeCreator.actionsCategory.triggerNodes");const I=i.map(B=>B.key);l.set(m,{key:m,title:m,items:[...I]})}const R=Array.from(l.values());return ve(o,R,s)}return o}function N(o){return o.filter(d=>{var l,i,A,E,R;return d.type==="node"&&((i=(l=d.properties.codex)==null?void 0:l.categories)==null?void 0:i.includes(x))===!0?(R=(E=(A=d.properties.codex)==null?void 0:A.subcategories)==null?void 0:E[x])==null?void 0:R.includes(Ce):!0})}async function v(o,s,d){var A;let l,i;s===!0?(l=Y().visibleNodeTypesByInputConnectionTypeNames,i={properties:{title:t.baseText("nodeCreator.aiPanel.aiNodes"),icon:"robot"}}):(l=Y().visibleNodeTypesByOutputConnectionTypeNames,i=Dt().items.find(E=>E.properties.connectionType===o)),await mt(),p({title:i==null?void 0:i.properties.title,rootView:X,mode:"nodes",items:e.allNodeCreatorNodes,nodeIcon:{iconType:"icon",icon:i==null?void 0:i.properties.icon,color:(A=i==null?void 0:i.properties.iconProps)==null?void 0:A.color},panelClass:i==null?void 0:i.properties.panelClass,baseFilter:E=>{var m;if(E.key===ct)return!1;const R=l[o].includes(E.key);return R&&((m=d==null?void 0:d.nodes)!=null&&m.length)?d.nodes.includes(E.key):R},itemsMapper(E){return{...E,subcategory:o}},preventBack:!0})}function S(){const o=y();if(!o||!a.value.uuid)return;let s=(o==null?void 0:o.items)??[];if(!(o!=null&&o.items)){const d=(o==null?void 0:o.subcategory)??U,l=g.value[d],i=o.sections;i?s=ve(l,i):s=l}if((o.forceIncludeNodes??[]).length>0){const d=e.mergedNodes.filter(l=>{var i;return(i=o.forceIncludeNodes)==null?void 0:i.includes(l.name)}).map(l=>G(l,o.subcategory));s.push(...d)}o.baseFilter&&(s=s.filter(o.baseFilter)),o.itemsMapper&&(s=s.map(o.itemsMapper)),o.items||(s=$(s)),k({baselineItems:s})}function c(o){return o.map(s=>({...s,uuid:`${s.key}-${K()}`}))}function p(o){a.value.uuid&&k({activeIndex:r()});const s=K();n.value.push({...o,uuid:s,transitionDirection:"in",activeIndex:0}),S()}function _(){a.value.uuid&&(n.value.pop(),k({transitionDirection:"out"}))}function k(o){const s=y(),d=n.value.findIndex(l=>l.uuid===s.uuid);s&&Object.keys(o).forEach(l=>{const i=l;n.value[d]={...n.value[d],[l]:o[i]}})}function h(){n.value=[]}return{viewStacks:n,activeViewStack:a,activeViewStackMode:f,globalSearchItemsDiff:b,gotoCompatibleConnectionView:v,resetViewStacks:h,updateCurrentViewStack:k,pushViewStack:p,popViewStack:_}}),Lt=j(lt.NODE_CREATOR,()=>{const e=ut(),r=dt(),t=pt(),n=Y(),u=yt(),a=gt(),f=w(M),T=w([]),y=w({}),b=w(!1),g=w(""),C=L(()=>Object.values(T.value).map(s=>G(s)));function O(s){T.value=s}function N(s){y.value=s}function v(s){b.value=s}function S(s){f.value=s}function c(s){g.value=s}function p({source:s,createNodeActive:d,nodeCreatorView:l}){if(d===t.isCreateNodeActive)return;l||(l=e.workflowTriggerNodes.length>0?W:M),S(l);let i;switch(f.value){case F:i="ai";break;case W:i="regular";break;default:i="regular"}t.isCreateNodeActive=d,d&&s&&c(s),u.run("nodeView.createNodeActiveChanged",{source:s,mode:i,createNodeActive:d}),_({source:s,mode:i,createNodeActive:d,workflowId:e.workflowId})}function _({source:s,mode:d,createNodeActive:l,workflowId:i}){a.trackNodesPanel("nodeView.createNodeActiveChanged",{source:s,mode:d,createNodeActive:l,workflow_id:i})}function k({connectionType:s,node:d,creatorView:l}){const i=d??r.activeNodeName,A=i?e.getNodeByName(i):null;r.activeNodeName=null,setTimeout(()=>{l?p({createNodeActive:!0,nodeCreatorView:l}):s&&A&&h({index:0,endpointUuid:`${A.id}-input${s}0`,eventSource:ft.NOTICE_ERROR_MESSAGE,outputType:s,sourceId:A.id})})}function h(s){var E,R,m;const d=s.outputType??P.Main,l=e.getNodeById(s.sourceId);if(!l)return;t.lastSelectedNode=l.name,t.lastSelectedNodeEndpointUuid=s.endpointUuid??((R=(E=s.connection)==null?void 0:E.target.jtk)==null?void 0:R.endpoint.uuid),t.lastSelectedNodeOutputIndex=s.index,p({source:s.eventSource,createNodeActive:!0,nodeCreatorView:s.nodeCreatorView});const i=((m=s.connection)==null?void 0:m.endpoints[0].parameters.connection)==="source";d!==P.Main&&Tt.includes(d)&&xt().gotoCompatibleConnectionView(d,i,o(l.name,d)).catch(()=>{})}function o(s,d){let l;const i=e.getCurrentWorkflow(),A=i.getNode(s);if(!A)return{nodes:[]};const E=n.getNodeType(A==null?void 0:A.type,A.typeVersion);if(E){const m=Nt(i,A,E).filter(I=>!(typeof I=="string"||I.type!==d||!I.filter));m.length&&(l=m[0].filter)}return l}return{openSource:g,selectedView:f,showScrim:b,mergedNodes:T,actions:y,setShowScrim:v,setSelectedView:S,setOpenSource:c,setActions:N,setMergeNodes:O,openNodeCreator:p,openSelectiveNodeCreator:k,allNodeCreatorNodes:C}});export{Vt as A,Wt as R,Ft as T,xt as a,wt as b,Dt as c,Oe as f,$ as s,G as t,Lt as u};
|
|
2
|
-
//# sourceMappingURL=nodeCreator.store-
|
|
1
|
+
import{d as j}from"./pinia-sugP77Im.js";import{bS as D,bT as M,bU as x,bV as De,O as Ye,a4 as L,$ as Le,bC as F,bW as X,bX as te,bY as oe,bZ as re,b_ as se,b$ as ne,c0 as ie,c1 as ae,c2 as Ge,c3 as Ue,c4 as ce,c5 as le,c6 as ue,b2 as U,as as de,c7 as V,c8 as Me,c9 as pe,ca as fe,cb as ye,aU as ge,cc as Ee,bL as K,cd as He,ce as Be,cf as Te,cg as Ve,ch as Ne,ci as Fe,cj as me,ck as Ke,cl as We,cm as $e,cn as ze,co as je,cp as _e,cq as Xe,cr as qe,cs as Ze,ct as Qe,cu as Je,cv as et,cw as tt,cx as ot,cy as Ae,cz as rt,cA as st,cB as be,cC as nt,x as H,cD as it,m as at,cE as Se,cF as ct,R as lt,j as ut,K as dt,e as pt,aN as ft,a3 as yt,G as gt}from"./index-1OxaEeO3.js";import{v as W}from"./uuid-SoommWqA.js";import{B as Et,C as Ce}from"./lodash-es-CZ1inz46.js";import{N as P,n as Tt,o as Nt}from"./n8n-4UEsHtUL.js";import{r as w,e as Y,n as mt}from"./vendor-Dv5OeN6t.js";const _t=60,At=30,bt=30,St=15,Ct=-20,he=-200,ht=-5;function It(e,r){let t=0,n=0;for(;t<e.length&&n<r.length;){const u=e.charAt(t).toLowerCase(),a=r.charAt(n).toLowerCase();u===a&&t++,++n}return e.length!==0&&r.length!==0&&t===e.length}function Ot(e,r){return Pe(e,r,0,0,null,[],256,0,0,5)}function Pe(e,r,t,n,u,a,f,T,y,b){let g=0;if(++y>=b)return{matched:!1,outScore:g};if(t===e.length||n===r.length)return{matched:!1,outScore:g};let S=!1,O=[],N=0,v=!0;for(;t<e.length&&n<r.length;){if(e[t].toLowerCase()===r[n].toLowerCase()){if(T>=f)return{matched:!1,outScore:g};v&&u&&(a=[...u],v=!1);const c=[],p=Pe(e,r,t,n+1,a,c,f,T,y,b),_=p.outScore;p.matched&&((!S||_>N)&&(O=[...c],N=_),S=!0),a[T++]=n,++t}++n}const C=t===e.length;if(C){g=100;let c=Ct*a[0];c=c<he?he:c,g+=c;const p=r.length-T;g+=ht*p;for(let _=0;_<T;_++){const k=a[_];if(_>0){const h=a[_-1];k===h+1&&(g+=_t)}if(k>0){const h=r[k-1],o=r[k];h!==h.toUpperCase()&&o!==o.toLowerCase()&&(g+=bt),(h==="_"||h===" ")&&(g+=At)}else g+=St}return S&&(!C||N>g)?(a=[...O],g=N,{matched:!0,outScore:g}):C?{matched:!0,outScore:g}:{matched:!1,outScore:g}}return{matched:!1,outScore:g}}function vt(e,r){if(e.hasOwnProperty(r))return e[r];const t=r.split(".");let n=e,u=0;for(;n&&u<t.length;){const a=t[u];n=n[a],u++}return n}function Rt(e,r,t){const n=r.reduce((u,a)=>{let f=[];t.forEach(({key:y,weight:b})=>{const g=vt(a,y);Array.isArray(g)?f=f.concat(g.map(S=>({value:S,weight:b}))):typeof g=="string"&&f.push({value:g,weight:b})});const T=f.reduce((y,{value:b,weight:g})=>{if(!It(e,b))return y;const S=Ot(e,b);S.outScore*=g;const{matched:O,outScore:N}=S;return!y&&O||O&&y&&N>y.outScore?S:y},null);return T&&u.push({score:T.outScore,item:a}),u},[]);return n.sort((u,a)=>a.score-u.score),n}function G(e,r,t="node"){var u,a,f;const n={uuid:W(),key:e.name,subcategory:r??((f=(a=(u=e.codex)==null?void 0:u.subcategories)==null?void 0:a[D])==null?void 0:f[0])??M,properties:{...e},type:t};return n}function kt(e){const r=[D,x];return e.reduce((t,n)=>{let u=[M];return r.forEach(a=>{var f,T,y,b;(T=(f=n.codex)==null?void 0:f.categories)!=null&&T.includes(a)&&(u=((b=(y=n.codex)==null?void 0:y.subcategories)==null?void 0:b[a])??[])}),u.forEach(a=>{t[a]||(t[a]=[]),t[a].push(G(n,a))}),t},{})}function $(e){return e.sort((r,t)=>{var a,f,T,y;if(r.type!=="node"||t.type!=="node")return 0;const n=((f=(a=r.properties)==null?void 0:a.displayName)==null?void 0:f.toLowerCase())||r.key,u=((y=(T=t.properties)==null?void 0:T.displayName)==null?void 0:y.toLowerCase())||t.key;return n.localeCompare(u,void 0,{sensitivity:"base"})})}function Ie(e,r){const t=e.toLowerCase().replace("trigger","").trimEnd();return(Rt(t,r,[{key:"properties.displayName",weight:1.3},{key:"properties.codex.alias",weight:1}])||[]).map(({item:u})=>u)}function Oe(e){return e.map(r=>r.type==="section"?r.children:r).flat()}function z(e){var t,n,u,a,f;return e.type==="node"&&(n=(t=e.properties.codex)==null?void 0:t.categories)!=null&&n.includes(x)?!((f=(a=(u=e.properties.codex)==null?void 0:u.subcategories)==null?void 0:a[x])==null?void 0:f.includes(De)):!1}function ve(e,r,t=!0){const n=r.filter(N=>typeof N=="object"),u=N=>N.reduce((v,C)=>{const c=n.find(_=>_.items.includes(C.key)),p=(c==null?void 0:c.key)??"other";return p&&(v[p]=[...v[p]??[],C]),v},{}),a=(N,v)=>N.map(C=>({type:"section",key:C.key,title:C.title,children:t?$(v[C.key]??[]):v[C.key]??[]})),f=e.filter(N=>!z(N)),T=e.filter(N=>z(N)),y=u(f),b=a(n,y),g=u(T),S=a(Et(n,["title"]),g),O=[...b,...S].concat({type:"section",key:"other",title:Ye.baseText("nodeCreator.sectionNames.other"),children:$(y.other??[])}).filter(N=>N.type!=="section"||N.children.length>0);return O.length<=1?e:O}function Re(e,r){return e.filter(t=>{var n,u,a;return!t.hidden&&((a=(u=(n=t.codex)==null?void 0:n.subcategories)==null?void 0:u[x])==null?void 0:a.includes(r))}).map(t=>({key:t.name,type:"node",properties:{group:[],name:t.name,displayName:t.displayName,title:t.displayName,description:t.description,icon:t.icon,iconUrl:t.iconUrl}})).sort((t,n)=>t.properties.displayName.localeCompare(n.properties.displayName))}function Vt(e){const r=H(),t=L(),n=Le(),u=Re(t.allLatestNodeTypes,it),a=Re(t.allLatestNodeTypes,De);return{value:F,title:r.baseText("nodeCreator.aiPanel.aiNodes"),subtitle:r.baseText("nodeCreator.aiPanel.selectAiNode"),items:[{key:"ai_templates_root",type:"link",properties:{title:r.baseText("nodeCreator.aiPanel.linkItem.title"),icon:"box-open",description:r.baseText("nodeCreator.aiPanel.linkItem.description"),name:"ai_templates_root",url:n.getWebsiteCategoryURL(void 0,"AdvancedAI"),tag:{type:"info",text:r.baseText("nodeCreator.triggerHelperPanel.manualTriggerTag")}}},...a,...u,{key:X,type:"view",properties:{title:r.baseText("nodeCreator.aiPanel.aiOtherNodes"),icon:"robot",description:r.baseText("nodeCreator.aiPanel.aiOtherNodesDescription")}}]}}function Dt(e){const r=H();function t(n){return{connectionType:n,iconProps:{color:`var(--node-type-${n}-color)`},panelClass:`nodes-list-panel-${n}`}}return{value:X,title:r.baseText("nodeCreator.aiPanel.aiOtherNodes"),subtitle:r.baseText("nodeCreator.aiPanel.selectAiNode"),items:[{key:te,type:"subcategory",properties:{title:te,icon:"file-import",...t(P.AiDocument)}},{key:oe,type:"subcategory",properties:{title:oe,icon:"language",...t(P.AiLanguageModel)}},{key:re,type:"subcategory",properties:{title:re,icon:"brain",...t(P.AiMemory)}},{key:se,type:"subcategory",properties:{title:se,icon:"list",...t(P.AiOutputParser)}},{key:ne,type:"subcategory",properties:{title:ne,icon:"search",...t(P.AiRetriever)}},{key:ie,type:"subcategory",properties:{title:ie,icon:"grip-lines-vertical",...t(P.AiTextSplitter)}},{type:"subcategory",key:ae,category:D,properties:{title:ae,icon:"tools",...t(P.AiTool),sections:[{key:"popular",title:r.baseText("nodeCreator.sectionNames.popular"),items:[Ge,Ue]}]}},{key:ce,type:"subcategory",properties:{title:ce,icon:"vector-square",...t(P.AiEmbedding)}},{key:le,type:"subcategory",properties:{title:le,icon:"project-diagram",...t(P.AiVectorStore)}},{key:ue,type:"subcategory",properties:{title:ue,icon:"code"}}]}}function Ft(){const e=H();return{value:U,title:e.baseText("nodeCreator.triggerHelperPanel.selectATrigger"),subtitle:e.baseText("nodeCreator.triggerHelperPanel.selectATriggerDescription"),items:[{key:de,type:"node",category:[D],properties:{group:[],name:de,displayName:e.baseText("nodeCreator.triggerHelperPanel.manualTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.manualTriggerDescription"),icon:"fa:mouse-pointer"}},{key:M,type:"subcategory",properties:{forceIncludeNodes:[V,Me],title:"App Trigger Nodes",icon:"satellite-dish"}},{key:pe,type:"node",category:[D],properties:{group:[],name:pe,displayName:e.baseText("nodeCreator.triggerHelperPanel.scheduleTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.scheduleTriggerDescription"),icon:"fa:clock"}},{key:V,type:"node",category:[D],properties:{group:[],name:V,displayName:e.baseText("nodeCreator.triggerHelperPanel.webhookTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.webhookTriggerDescription"),iconData:{type:"file",icon:"webhook",fileBuffer:"/static/webhook-icon.svg"}}},{key:fe,type:"node",category:[D],properties:{group:[],name:fe,displayName:e.baseText("nodeCreator.triggerHelperPanel.formTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.formTriggerDescription"),iconData:{type:"file",icon:"form",fileBuffer:"/static/form-grey.svg"}}},{key:ye,type:"node",category:[D],properties:{group:[],name:ye,displayName:e.baseText("nodeCreator.triggerHelperPanel.workflowTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.workflowTriggerDescription"),icon:"fa:sign-out-alt"}},{key:ge,type:"node",category:[D],properties:{group:[],name:ge,displayName:e.baseText("nodeCreator.triggerHelperPanel.manualChatTriggerDisplayName"),description:e.baseText("nodeCreator.triggerHelperPanel.manualChatTriggerDescription"),icon:"fa:comments"}},{type:"subcategory",key:Ee,category:D,properties:{title:Ee,icon:"folder-open"}}]}}function Kt(e){const r=H(),t={value:K,title:r.baseText("nodeCreator.triggerHelperPanel.whatHappensNext"),items:[{key:M,type:"subcategory",properties:{title:"App Regular Nodes",icon:"globe",forceIncludeNodes:[He,Be]}},{type:"subcategory",key:Te,category:D,properties:{title:Te,icon:"pen",sections:[{key:"popular",title:r.baseText("nodeCreator.sectionNames.popular"),items:[Ve,Ne,Fe]},{key:"addOrRemove",title:r.baseText("nodeCreator.sectionNames.transform.addOrRemove"),items:[me,Ke,We,$e]},{key:"combine",title:r.baseText("nodeCreator.sectionNames.transform.combine"),items:[ze,je,_e]},{key:"convert",title:r.baseText("nodeCreator.sectionNames.transform.convert"),items:[Xe,qe,Ze,Qe,Je,et,tt,ot]}]}},{type:"subcategory",key:Ae,category:D,properties:{title:Ae,icon:"code-branch",sections:[{key:"popular",title:r.baseText("nodeCreator.sectionNames.popular"),items:[me,rt,st,_e]}]}},{type:"subcategory",key:be,category:D,properties:{title:be,icon:"toolbox",sections:[{key:"popular",title:r.baseText("nodeCreator.sectionNames.popular"),items:[nt,V,Ne]}]}}]};return(e??[]).some(u=>{var a,f;return(f=(a=u.codex)==null?void 0:a.categories)==null?void 0:f.includes(x)})&&t.items.push({key:F,type:"view",properties:{title:r.baseText("nodeCreator.aiPanel.langchainAiNodes"),icon:"robot",description:r.baseText("nodeCreator.aiPanel.nodesForAi"),tag:{type:"success",text:r.baseText("nodeCreator.aiPanel.newTag")},borderless:!0}}),t.items.push({key:U,type:"view",properties:{title:r.baseText("nodeCreator.triggerHelperPanel.addAnotherTrigger"),icon:"bolt",description:r.baseText("nodeCreator.triggerHelperPanel.addAnotherTriggerDescription")}}),t}const Pt="data-keyboard-nav-id",ke=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Enter","Escape","Tab"],wt=j("nodeCreatorKeyboardNavigation",()=>{const e=w([]),r=w(null),t=w({});function n(c){return c==null?void 0:c.getAttribute("data-keyboard-nav-type")}function u(c){return(c==null?void 0:c.getAttribute(Pt))||void 0}async function a(){return await new Promise(c=>{v(),setTimeout(()=>{e.value=Array.from(document.querySelectorAll("[data-keyboard-nav-type]")).map(p=>new WeakRef(p)),c()},0)})}function f(c,p){Object.values(t.value).filter(h=>h.keyboardKeys.includes(c)).forEach(h=>{if(!r.value)return;(h.condition===void 0||h.condition(n(p)||"",r.value))&&r.value&&h.handler(r.value,c)})}async function T(c){var s,d,l;const p=c.key;if(!ke.includes(p))return;c.preventDefault(),c.stopPropagation(),await a();const _=e.value.findIndex(i=>u(i==null?void 0:i.deref())===r.value),k=(s=e.value[_])==null?void 0:s.deref(),h=p==="ArrowDown",o=p==="ArrowUp";if(k){if(h){const i=_<e.value.length-1?_+1:0;b((d=e.value[i])==null?void 0:d.deref())}if(o){const i=_>0?_-1:e.value.length-1;b((l=e.value[i])==null?void 0:l.deref())}f(p,k)}}function y(c){r.value=c}function b(c){const p=u(c);p&&(y(p),c!=null&&c.scrollIntoView&&(c==null||c.scrollIntoView({block:"center"})))}async function g(c){var p;await a(),b((p=e.value[c])==null?void 0:p.deref())}function S(){document.addEventListener("keydown",T,{capture:!0})}function O(){v(),document.removeEventListener("keydown",T,{capture:!0})}function N(c,p){p.keyboardKeys.forEach(_=>{if(ke.includes(_))t.value={...t.value,[c]:p};else throw new Error(`Key ${_} is not supported`)})}function v(){e.value=[]}function C(){return e.value.findIndex(c=>u(c==null?void 0:c.deref())===r.value)}return{activeItemId:r,attachKeydownEvent:S,refreshSelectableItems:a,detachKeydownEvent:O,registerKeyHook:N,getActiveItemIndex:C,setActiveItemId:y,setActiveItemIndex:g}}),xt=j("nodeCreatorViewStacks",()=>{const e=Yt(),{getActiveItemIndex:r}=wt(),t=H(),n=w([]),u=Y(()=>{const o=y();if(!(o!=null&&o.baselineItems))return o.items?c(o.items):[];if(o.search&&T.value){const s=T.value.length>0?T.value:Oe(o.baselineItems??[]),d=at().aiNodes.length>0,l=S(o)||d?s:N(s),i=c(Ie(o.search||"",l)),A=O(i,!1)??i;return o.activeIndex=A.some(E=>E.type==="section")?1:0,A}return c(O(o.baselineItems,!0))}),a=Y(()=>{const o=y();if(!o)return{};const s=Oe(o.baselineItems??[]);return{...o,items:u.value,hasSearch:s.length>8||(o==null?void 0:o.hasSearch)}}),f=Y(()=>a.value.mode||U),T=Y(()=>{const o=y();return o!=null&&o.searchItems?o.searchItems.map(s=>G(s,o.subcategory)):[]});function y(){return n.value[n.value.length-1]}const b=Y(()=>{const o=y();if(!(o!=null&&o.search))return[];const s=e.mergedNodes.map(E=>G(E)),d=S(o)?s:N(s);let l=c(Ie(o.search||"",d));return S(o)&&(l=O(l)),l.filter(E=>!u.value.find(R=>R.type==="section"?R.children.some(I=>I.key===E.key):R.key===E.key)).filter(E=>E.type==="section"?E.children.some(m=>u.value.some(I=>I.key===m.key)):!0)}),g=Y(()=>kt(e.mergedNodes));function S(o){return o.rootView===F}function O(o,s=!0){const d=o.filter(l=>z(l));if(d.length>0){const l=new Map;d.forEach(m=>{var B,q,Z,Q,J,ee;const I=(Z=(q=(B=m.properties.codex)==null?void 0:B.subcategories)==null?void 0:q[x])==null?void 0:Z[0];if(I){const we=((Q=l.get(I))==null?void 0:Q.items)??[],xe=!((ee=(J=m.properties.codex)==null?void 0:J.subcategories)!=null&&ee[x].includes(Se));l.set(I,{key:I,title:xe?`${I} (${t.baseText("nodeCreator.subnodes")})`:I,items:[...we,m.key]})}});const i=Ce(o,d),A=i.filter(m=>m.type==="node"&&L().isTriggerNode(m.properties.name)),E=Ce(i,A);if(i.length>0){let m="";E.length&&A.length?m=t.baseText("nodeCreator.actionsCategory.regularAndTriggers"):m=E.length?t.baseText("nodeCreator.actionsCategory.regularNodes"):t.baseText("nodeCreator.actionsCategory.triggerNodes");const I=i.map(B=>B.key);l.set(m,{key:m,title:m,items:[...I]})}const R=Array.from(l.values());return ve(o,R,s)}return o}function N(o){return o.filter(d=>{var l,i,A,E,R;return d.type==="node"&&((i=(l=d.properties.codex)==null?void 0:l.categories)==null?void 0:i.includes(x))===!0?(R=(E=(A=d.properties.codex)==null?void 0:A.subcategories)==null?void 0:E[x])==null?void 0:R.includes(Se):!0})}async function v(o,s,d){var A;let l,i;s===!0?(l=L().visibleNodeTypesByInputConnectionTypeNames,i={properties:{title:t.baseText("nodeCreator.aiPanel.aiNodes"),icon:"robot"}}):(l=L().visibleNodeTypesByOutputConnectionTypeNames,i=Dt().items.find(E=>E.properties.connectionType===o)),await mt(),p({title:i==null?void 0:i.properties.title,rootView:X,mode:"nodes",items:e.allNodeCreatorNodes,nodeIcon:{iconType:"icon",icon:i==null?void 0:i.properties.icon,color:(A=i==null?void 0:i.properties.iconProps)==null?void 0:A.color},panelClass:i==null?void 0:i.properties.panelClass,baseFilter:E=>{var m;if(E.key===ct)return!1;const R=l[o].includes(E.key);return R&&((m=d==null?void 0:d.nodes)!=null&&m.length)?d.nodes.includes(E.key):R},itemsMapper(E){return{...E,subcategory:o}},preventBack:!0})}function C(){const o=y();if(!o||!a.value.uuid)return;let s=(o==null?void 0:o.items)??[];if(!(o!=null&&o.items)){const d=(o==null?void 0:o.subcategory)??M,l=g.value[d],i=o.sections;i?s=ve(l,i):s=l}if((o.forceIncludeNodes??[]).length>0){const d=e.mergedNodes.filter(l=>{var i;return(i=o.forceIncludeNodes)==null?void 0:i.includes(l.name)}).map(l=>G(l,o.subcategory));s.push(...d)}o.baseFilter&&(s=s.filter(o.baseFilter)),o.itemsMapper&&(s=s.map(o.itemsMapper)),o.items||(s=$(s)),k({baselineItems:s})}function c(o){return o.map(s=>({...s,uuid:`${s.key}-${W()}`}))}function p(o){a.value.uuid&&k({activeIndex:r()});const s=W();n.value.push({...o,uuid:s,transitionDirection:"in",activeIndex:0}),C()}function _(){a.value.uuid&&(n.value.pop(),k({transitionDirection:"out"}))}function k(o){const s=y(),d=n.value.findIndex(l=>l.uuid===s.uuid);s&&Object.keys(o).forEach(l=>{const i=l;n.value[d]={...n.value[d],[l]:o[i]}})}function h(){n.value=[]}return{viewStacks:n,activeViewStack:a,activeViewStackMode:f,globalSearchItemsDiff:b,gotoCompatibleConnectionView:v,resetViewStacks:h,updateCurrentViewStack:k,pushViewStack:p,popViewStack:_}}),Yt=j(lt.NODE_CREATOR,()=>{const e=ut(),r=dt(),t=pt(),n=L(),u=yt(),a=gt(),f=w(U),T=w([]),y=w({}),b=w(!1),g=w(""),S=Y(()=>Object.values(T.value).map(s=>G(s)));function O(s){T.value=s}function N(s){y.value=s}function v(s){b.value=s}function C(s){f.value=s}function c(s){g.value=s}function p({source:s,createNodeActive:d,nodeCreatorView:l}){if(d===t.isCreateNodeActive)return;l||(l=e.workflowTriggerNodes.length>0?K:U),C(l);let i;switch(f.value){case F:i="ai";break;case K:i="regular";break;default:i="regular"}t.isCreateNodeActive=d,d&&s&&c(s),u.run("nodeView.createNodeActiveChanged",{source:s,mode:i,createNodeActive:d}),_({source:s,mode:i,createNodeActive:d,workflowId:e.workflowId})}function _({source:s,mode:d,createNodeActive:l,workflowId:i}){a.trackNodesPanel("nodeView.createNodeActiveChanged",{source:s,mode:d,createNodeActive:l,workflow_id:i})}function k({connectionType:s,node:d,creatorView:l}){const i=d??r.activeNodeName,A=i?e.getNodeByName(i):null;r.activeNodeName=null,setTimeout(()=>{l?p({createNodeActive:!0,nodeCreatorView:l}):s&&A&&h({index:0,endpointUuid:`${A.id}-input${s}0`,eventSource:ft.NOTICE_ERROR_MESSAGE,outputType:s,sourceId:A.id})})}function h(s){var E,R,m;const d=s.outputType??P.Main,l=e.getNodeById(s.sourceId);if(!l)return;t.lastSelectedNode=l.name,t.lastSelectedNodeEndpointUuid=s.endpointUuid??((R=(E=s.connection)==null?void 0:E.target.jtk)==null?void 0:R.endpoint.uuid),t.lastSelectedNodeOutputIndex=s.index,p({source:s.eventSource,createNodeActive:!0,nodeCreatorView:s.nodeCreatorView});const i=((m=s.connection)==null?void 0:m.endpoints[0].parameters.connection)==="source";d!==P.Main&&Tt.includes(d)&&xt().gotoCompatibleConnectionView(d,i,o(l.name,d)).catch(()=>{})}function o(s,d){let l;const i=e.getCurrentWorkflow(),A=i.getNode(s);if(!A)return{nodes:[]};const E=n.getNodeType(A==null?void 0:A.type,A.typeVersion);if(E){const m=Nt(i,A,E).filter(I=>!(typeof I=="string"||I.type!==d||!I.filter));m.length&&(l=m[0].filter)}return l}return{openSource:g,selectedView:f,showScrim:b,mergedNodes:T,actions:y,setShowScrim:v,setSelectedView:C,setOpenSource:c,setActions:N,setMergeNodes:O,openNodeCreator:p,openSelectiveNodeCreator:k,allNodeCreatorNodes:S}});export{Vt as A,Kt as R,Ft as T,xt as a,wt as b,Dt as c,Oe as f,$ as s,G as t,Yt as u};
|
|
2
|
+
//# sourceMappingURL=nodeCreator.store-FIsc3SCx.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeCreator.store-CTXKjjQB.js","sources":["../../src/utils/sortUtils.ts","../../src/components/Node/NodeCreator/utils.ts","../../src/components/Node/NodeCreator/viewsData.ts","../../src/components/Node/NodeCreator/composables/useKeyboardNavigation.ts","../../src/components/Node/NodeCreator/composables/useViewStacks.ts","../../src/stores/nodeCreator.store.ts"],"sourcesContent":["/*\n\tConstants and utility functions used for searching for node types in node creator component\n*/\n\n// based on https://github.com/forrestthewoods/lib_fts/blob/master/code/fts_fuzzy_match.js\n\nconst SEQUENTIAL_BONUS = 60; // bonus for adjacent matches\nconst SEPARATOR_BONUS = 30; // bonus if match occurs after a separator\nconst CAMEL_BONUS = 30; // bonus if match is uppercase and prev is lower\nconst FIRST_LETTER_BONUS = 15; // bonus if the first letter is matched\n\nconst LEADING_LETTER_PENALTY = -20; // penalty applied for every letter in str before the first match\nconst MAX_LEADING_LETTER_PENALTY = -200; // maximum penalty for leading letters\nconst UNMATCHED_LETTER_PENALTY = -5;\n\n/**\n * Returns true if each character in pattern is found sequentially within target\n * @param {*} pattern string\n * @param {*} target string\n */\nfunction fuzzyMatchSimple(pattern: string, target: string): boolean {\n\tlet patternIdx = 0;\n\tlet strIdx = 0;\n\n\twhile (patternIdx < pattern.length && strIdx < target.length) {\n\t\tconst patternChar = pattern.charAt(patternIdx).toLowerCase();\n\t\tconst targetChar = target.charAt(strIdx).toLowerCase();\n\t\tif (patternChar === targetChar) {\n\t\t\tpatternIdx++;\n\t\t}\n\t\t++strIdx;\n\t}\n\n\treturn pattern.length !== 0 && target.length !== 0 && patternIdx === pattern.length;\n}\n\n/**\n * Does a fuzzy search to find pattern inside a string.\n * @param {*} pattern string pattern to search for\n * @param {*} target string string which is being searched\n * @returns [boolean, number] a boolean which tells if pattern was\n * found or not and a search score\n */\nfunction fuzzyMatch(pattern: string, target: string): { matched: boolean; outScore: number } {\n\tconst recursionCount = 0;\n\tconst recursionLimit = 5;\n\tconst matches: number[] = [];\n\tconst maxMatches = 256;\n\n\treturn fuzzyMatchRecursive(\n\t\tpattern,\n\t\ttarget,\n\t\t0 /* patternCurIndex */,\n\t\t0 /* strCurrIndex */,\n\t\tnull /* srcMatces */,\n\t\tmatches,\n\t\tmaxMatches,\n\t\t0 /* nextMatch */,\n\t\trecursionCount,\n\t\trecursionLimit,\n\t);\n}\n\nfunction fuzzyMatchRecursive(\n\tpattern: string,\n\ttarget: string,\n\tpatternCurIndex: number,\n\ttargetCurrIndex: number,\n\ttargetMatches: null | number[],\n\tmatches: number[],\n\tmaxMatches: number,\n\tnextMatch: number,\n\trecursionCount: number,\n\trecursionLimit: number,\n): { matched: boolean; outScore: number } {\n\tlet outScore = 0;\n\n\t// Return if recursion limit is reached.\n\tif (++recursionCount >= recursionLimit) {\n\t\treturn { matched: false, outScore };\n\t}\n\n\t// Return if we reached ends of strings.\n\tif (patternCurIndex === pattern.length || targetCurrIndex === target.length) {\n\t\treturn { matched: false, outScore };\n\t}\n\n\t// Recursion params\n\tlet recursiveMatch = false;\n\tlet bestRecursiveMatches: number[] = [];\n\tlet bestRecursiveScore = 0;\n\n\t// Loop through pattern and str looking for a match.\n\tlet firstMatch = true;\n\twhile (patternCurIndex < pattern.length && targetCurrIndex < target.length) {\n\t\t// Match found.\n\t\tif (pattern[patternCurIndex].toLowerCase() === target[targetCurrIndex].toLowerCase()) {\n\t\t\tif (nextMatch >= maxMatches) {\n\t\t\t\treturn { matched: false, outScore };\n\t\t\t}\n\n\t\t\tif (firstMatch && targetMatches) {\n\t\t\t\tmatches = [...targetMatches];\n\t\t\t\tfirstMatch = false;\n\t\t\t}\n\n\t\t\tconst recursiveMatches: number[] = [];\n\t\t\tconst recursiveResult = fuzzyMatchRecursive(\n\t\t\t\tpattern,\n\t\t\t\ttarget,\n\t\t\t\tpatternCurIndex,\n\t\t\t\ttargetCurrIndex + 1,\n\t\t\t\tmatches,\n\t\t\t\trecursiveMatches,\n\t\t\t\tmaxMatches,\n\t\t\t\tnextMatch,\n\t\t\t\trecursionCount,\n\t\t\t\trecursionLimit,\n\t\t\t);\n\n\t\t\tconst recursiveScore = recursiveResult.outScore;\n\t\t\tif (recursiveResult.matched) {\n\t\t\t\t// Pick best recursive score.\n\t\t\t\tif (!recursiveMatch || recursiveScore > bestRecursiveScore) {\n\t\t\t\t\tbestRecursiveMatches = [...recursiveMatches];\n\t\t\t\t\tbestRecursiveScore = recursiveScore;\n\t\t\t\t}\n\t\t\t\trecursiveMatch = true;\n\t\t\t}\n\n\t\t\tmatches[nextMatch++] = targetCurrIndex;\n\t\t\t++patternCurIndex;\n\t\t}\n\t\t++targetCurrIndex;\n\t}\n\n\tconst matched = patternCurIndex === pattern.length;\n\n\tif (matched) {\n\t\toutScore = 100;\n\n\t\t// Apply leading letter penalty\n\t\tlet penalty = LEADING_LETTER_PENALTY * matches[0];\n\t\tpenalty = penalty < MAX_LEADING_LETTER_PENALTY ? MAX_LEADING_LETTER_PENALTY : penalty;\n\t\toutScore += penalty;\n\n\t\t//Apply unmatched penalty\n\t\tconst unmatched = target.length - nextMatch;\n\t\toutScore += UNMATCHED_LETTER_PENALTY * unmatched;\n\n\t\t// Apply ordering bonuses\n\t\tfor (let i = 0; i < nextMatch; i++) {\n\t\t\tconst currIdx = matches[i];\n\n\t\t\tif (i > 0) {\n\t\t\t\tconst prevIdx = matches[i - 1];\n\t\t\t\tif (currIdx === prevIdx + 1) {\n\t\t\t\t\toutScore += SEQUENTIAL_BONUS;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check for bonuses based on neighbor character value.\n\t\t\tif (currIdx > 0) {\n\t\t\t\t// Camel case\n\t\t\t\tconst neighbor = target[currIdx - 1];\n\t\t\t\tconst curr = target[currIdx];\n\t\t\t\tif (neighbor !== neighbor.toUpperCase() && curr !== curr.toLowerCase()) {\n\t\t\t\t\toutScore += CAMEL_BONUS;\n\t\t\t\t}\n\t\t\t\tconst isNeighbourSeparator = neighbor === '_' || neighbor === ' ';\n\t\t\t\tif (isNeighbourSeparator) {\n\t\t\t\t\toutScore += SEPARATOR_BONUS;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// First letter\n\t\t\t\toutScore += FIRST_LETTER_BONUS;\n\t\t\t}\n\t\t}\n\n\t\t// Return best result\n\t\tif (recursiveMatch && (!matched || bestRecursiveScore > outScore)) {\n\t\t\t// Recursive score is better than \"this\"\n\t\t\tmatches = [...bestRecursiveMatches];\n\t\t\toutScore = bestRecursiveScore;\n\t\t\treturn { matched: true, outScore };\n\t\t} else if (matched) {\n\t\t\t// \"this\" score is better than recursive\n\t\t\treturn { matched: true, outScore };\n\t\t} else {\n\t\t\treturn { matched: false, outScore };\n\t\t}\n\t}\n\treturn { matched: false, outScore };\n}\n\n// prop = 'key'\n// prop = 'key1.key2'\n// prop = ['key1', 'key2']\nfunction getValue<T extends object>(obj: T, prop: string): unknown {\n\tif (obj.hasOwnProperty(prop)) {\n\t\treturn obj[prop as keyof T];\n\t}\n\n\tconst segments = prop.split('.');\n\n\tlet result = obj;\n\tlet i = 0;\n\twhile (result && i < segments.length) {\n\t\tconst key = segments[i] as keyof T;\n\t\tresult = result[key] as T;\n\t\ti++;\n\t}\n\treturn result;\n}\n\nexport function sublimeSearch<T extends object>(\n\tfilter: string,\n\tdata: Readonly<T[]>,\n\tkeys: Array<{ key: string; weight: number }>,\n): Array<{ score: number; item: T }> {\n\tconst results = data.reduce((accu: Array<{ score: number; item: T }>, item: T) => {\n\t\tlet values: Array<{ value: string; weight: number }> = [];\n\t\tkeys.forEach(({ key, weight }) => {\n\t\t\tconst value = getValue(item, key);\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalues = values.concat(value.map((v) => ({ value: v, weight })));\n\t\t\t} else if (typeof value === 'string') {\n\t\t\t\tvalues.push({\n\t\t\t\t\tvalue,\n\t\t\t\t\tweight,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// for each item, check every key and get maximum score\n\t\tconst itemMatch = values.reduce(\n\t\t\t(\n\t\t\t\taccu: null | { matched: boolean; outScore: number },\n\t\t\t\t{ value, weight }: { value: string; weight: number },\n\t\t\t) => {\n\t\t\t\tif (!fuzzyMatchSimple(filter, value)) {\n\t\t\t\t\treturn accu;\n\t\t\t\t}\n\n\t\t\t\tconst match = fuzzyMatch(filter, value);\n\t\t\t\tmatch.outScore *= weight;\n\n\t\t\t\tconst { matched, outScore } = match;\n\t\t\t\tif (!accu && matched) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\tif (matched && accu && outScore > accu.outScore) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\treturn accu;\n\t\t\t},\n\t\t\tnull,\n\t\t);\n\n\t\tif (itemMatch) {\n\t\t\taccu.push({\n\t\t\t\tscore: itemMatch.outScore,\n\t\t\t\titem,\n\t\t\t});\n\t\t}\n\n\t\treturn accu;\n\t}, []);\n\n\tresults.sort((a, b) => {\n\t\treturn b.score - a.score;\n\t});\n\n\treturn results;\n}\n","import type {\n\tNodeCreateElement,\n\tActionCreateElement,\n\tSubcategorizedNodeTypes,\n\tSimplifiedNodeType,\n\tINodeCreateElement,\n\tSectionCreateElement,\n} from '@/Interface';\nimport {\n\tAI_CATEGORY_AGENTS,\n\tAI_SUBCATEGORY,\n\tCORE_NODES_CATEGORY,\n\tDEFAULT_SUBCATEGORY,\n} from '@/constants';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { sublimeSearch } from '@/utils/sortUtils';\nimport type { NodeViewItemSection } from './viewsData';\nimport { i18n } from '@/plugins/i18n';\nimport { sortBy } from 'lodash-es';\n\nexport function transformNodeType(\n\tnode: SimplifiedNodeType,\n\tsubcategory?: string,\n\ttype: 'node' | 'action' = 'node',\n): NodeCreateElement | ActionCreateElement {\n\tconst createElement = {\n\t\tuuid: uuidv4(),\n\t\tkey: node.name,\n\t\tsubcategory:\n\t\t\tsubcategory ?? node.codex?.subcategories?.[CORE_NODES_CATEGORY]?.[0] ?? DEFAULT_SUBCATEGORY,\n\t\tproperties: {\n\t\t\t...node,\n\t\t},\n\t\ttype,\n\t};\n\n\treturn type === 'action'\n\t\t? (createElement as ActionCreateElement)\n\t\t: (createElement as NodeCreateElement);\n}\n\nexport function subcategorizeItems(items: SimplifiedNodeType[]) {\n\tconst WHITE_LISTED_SUBCATEGORIES = [CORE_NODES_CATEGORY, AI_SUBCATEGORY];\n\treturn items.reduce((acc: SubcategorizedNodeTypes, item) => {\n\t\t// Only some subcategories are allowed\n\t\tlet subcategories: string[] = [DEFAULT_SUBCATEGORY];\n\n\t\tWHITE_LISTED_SUBCATEGORIES.forEach((category) => {\n\t\t\tif (item.codex?.categories?.includes(category)) {\n\t\t\t\tsubcategories = item.codex?.subcategories?.[category] ?? [];\n\t\t\t}\n\t\t});\n\n\t\tsubcategories.forEach((subcategory: string) => {\n\t\t\tif (!acc[subcategory]) {\n\t\t\t\tacc[subcategory] = [];\n\t\t\t}\n\t\t\tacc[subcategory].push(transformNodeType(item, subcategory));\n\t\t});\n\n\t\treturn acc;\n\t}, {});\n}\n\nexport function sortNodeCreateElements(nodes: INodeCreateElement[]) {\n\treturn nodes.sort((a, b) => {\n\t\tif (a.type !== 'node' || b.type !== 'node') return 0;\n\t\tconst displayNameA = a.properties?.displayName?.toLowerCase() || a.key;\n\t\tconst displayNameB = b.properties?.displayName?.toLowerCase() || b.key;\n\n\t\treturn displayNameA.localeCompare(displayNameB, undefined, { sensitivity: 'base' });\n\t});\n}\n\nexport function searchNodes(searchFilter: string, items: INodeCreateElement[]) {\n\t// In order to support the old search we need to remove the 'trigger' part\n\tconst trimmedFilter = searchFilter.toLowerCase().replace('trigger', '').trimEnd();\n\n\tconst result = (\n\t\tsublimeSearch<INodeCreateElement>(trimmedFilter, items, [\n\t\t\t{ key: 'properties.displayName', weight: 1.3 },\n\t\t\t{ key: 'properties.codex.alias', weight: 1 },\n\t\t]) || []\n\t).map(({ item }) => item);\n\n\treturn result;\n}\n\nexport function flattenCreateElements(items: INodeCreateElement[]): INodeCreateElement[] {\n\treturn items.map((item) => (item.type === 'section' ? item.children : item)).flat();\n}\nexport function isAINode(node: INodeCreateElement) {\n\tconst isNode = node.type === 'node';\n\tif (!isNode) return false;\n\n\tif (node.properties.codex?.categories?.includes(AI_SUBCATEGORY)) {\n\t\tconst isAgentSubcategory =\n\t\t\tnode.properties.codex?.subcategories?.[AI_SUBCATEGORY]?.includes(AI_CATEGORY_AGENTS);\n\n\t\treturn !isAgentSubcategory;\n\t}\n\n\treturn false;\n}\nexport function groupItemsInSections(\n\titems: INodeCreateElement[],\n\tsections: string[] | NodeViewItemSection[],\n\tsortAlphabetically = true,\n): INodeCreateElement[] {\n\tconst filteredSections = sections.filter(\n\t\t(section): section is NodeViewItemSection => typeof section === 'object',\n\t);\n\n\tconst itemsBySection = (items2: INodeCreateElement[]) =>\n\t\titems2.reduce((acc: Record<string, INodeCreateElement[]>, item) => {\n\t\t\tconst section = filteredSections.find((s) => s.items.includes(item.key));\n\n\t\t\tconst key = section?.key ?? 'other';\n\t\t\tif (key) {\n\t\t\t\tacc[key] = [...(acc[key] ?? []), item];\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {});\n\n\tconst mapNewSections = (\n\t\tnewSections: NodeViewItemSection[],\n\t\tchildren: Record<string, INodeCreateElement[]>,\n\t) =>\n\t\tnewSections.map(\n\t\t\t(section): SectionCreateElement => ({\n\t\t\t\ttype: 'section',\n\t\t\t\tkey: section.key,\n\t\t\t\ttitle: section.title,\n\t\t\t\tchildren: sortAlphabetically\n\t\t\t\t\t? sortNodeCreateElements(children[section.key] ?? [])\n\t\t\t\t\t: children[section.key] ?? [],\n\t\t\t}),\n\t\t);\n\n\tconst nonAINodes = items.filter((item) => !isAINode(item));\n\tconst AINodes = items.filter((item) => isAINode(item));\n\n\tconst nonAINodesBySection = itemsBySection(nonAINodes);\n\tconst nonAINodesSections = mapNewSections(filteredSections, nonAINodesBySection);\n\n\tconst AINodesBySection = itemsBySection(AINodes);\n\n\tconst AINodesSections = mapNewSections(sortBy(filteredSections, ['title']), AINodesBySection);\n\n\tconst result = [...nonAINodesSections, ...AINodesSections]\n\t\t.concat({\n\t\t\ttype: 'section',\n\t\t\tkey: 'other',\n\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.other'),\n\t\t\tchildren: sortNodeCreateElements(nonAINodesBySection.other ?? []),\n\t\t})\n\t\t.filter((section) => section.type !== 'section' || section.children.length > 0);\n\n\tif (result.length <= 1) {\n\t\treturn items;\n\t}\n\n\treturn result;\n}\n","import {\n\tCORE_NODES_CATEGORY,\n\tWEBHOOK_NODE_TYPE,\n\tOTHER_TRIGGER_NODES_SUBCATEGORY,\n\tEXECUTE_WORKFLOW_TRIGGER_NODE_TYPE,\n\tFORM_TRIGGER_NODE_TYPE,\n\tMANUAL_TRIGGER_NODE_TYPE,\n\tMANUAL_CHAT_TRIGGER_NODE_TYPE,\n\tSCHEDULE_TRIGGER_NODE_TYPE,\n\tREGULAR_NODE_CREATOR_VIEW,\n\tTRANSFORM_DATA_SUBCATEGORY,\n\tFLOWS_CONTROL_SUBCATEGORY,\n\tTRIGGER_NODE_CREATOR_VIEW,\n\tEMAIL_IMAP_NODE_TYPE,\n\tDEFAULT_SUBCATEGORY,\n\tAI_NODE_CREATOR_VIEW,\n\tAI_CATEGORY_AGENTS,\n\tAI_CATEGORY_CHAINS,\n\tAI_CATEGORY_DOCUMENT_LOADERS,\n\tAI_CATEGORY_LANGUAGE_MODELS,\n\tAI_CATEGORY_MEMORY,\n\tAI_CATEGORY_OUTPUTPARSER,\n\tAI_CATEGORY_RETRIEVERS,\n\tAI_CATEGORY_TEXT_SPLITTERS,\n\tAI_CATEGORY_TOOLS,\n\tAI_CATEGORY_VECTOR_STORES,\n\tAI_SUBCATEGORY,\n\tAI_CATEGORY_EMBEDDING,\n\tAI_OTHERS_NODE_CREATOR_VIEW,\n\tAI_UNCATEGORIZED_CATEGORY,\n\tCONVERT_TO_FILE_NODE_TYPE,\n\tEXTRACT_FROM_FILE_NODE_TYPE,\n\tSET_NODE_TYPE,\n\tCODE_NODE_TYPE,\n\tDATETIME_NODE_TYPE,\n\tFILTER_NODE_TYPE,\n\tREMOVE_DUPLICATES_NODE_TYPE,\n\tSPLIT_OUT_NODE_TYPE,\n\tLIMIT_NODE_TYPE,\n\tSUMMARIZE_NODE_TYPE,\n\tAGGREGATE_NODE_TYPE,\n\tMERGE_NODE_TYPE,\n\tHTML_NODE_TYPE,\n\tMARKDOWN_NODE_TYPE,\n\tXML_NODE_TYPE,\n\tCRYPTO_NODE_TYPE,\n\tIF_NODE_TYPE,\n\tSPLIT_IN_BATCHES_NODE_TYPE,\n\tHTTP_REQUEST_NODE_TYPE,\n\tHELPERS_SUBCATEGORY,\n\tRSS_READ_NODE_TYPE,\n\tEMAIL_SEND_NODE_TYPE,\n\tEDIT_IMAGE_NODE_TYPE,\n\tCOMPRESSION_NODE_TYPE,\n\tAI_CODE_TOOL_LANGCHAIN_NODE_TYPE,\n\tAI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE,\n} from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport type { SimplifiedNodeType } from '@/Interface';\nimport type { INodeTypeDescription, Themed } from 'n8n-workflow';\nimport { NodeConnectionType } from 'n8n-workflow';\nimport { useTemplatesStore } from '@/stores/templates.store';\n\nexport interface NodeViewItemSection {\n\tkey: string;\n\ttitle: string;\n\titems: string[];\n}\n\nexport interface NodeViewItem {\n\tkey: string;\n\ttype: string;\n\tproperties: {\n\t\tname?: string;\n\t\ttitle?: string;\n\t\ticon?: Themed<string>;\n\t\ticonProps?: {\n\t\t\tcolor?: string;\n\t\t};\n\t\turl?: string;\n\t\tconnectionType?: NodeConnectionType;\n\t\tpanelClass?: string;\n\t\tgroup?: string[];\n\t\tsections?: NodeViewItemSection[];\n\t\tdescription?: string;\n\t\tdisplayName?: string;\n\t\ttag?: {\n\t\t\ttype: string;\n\t\t\ttext: string;\n\t\t};\n\t\tforceIncludeNodes?: string[];\n\t\ticonData?: {\n\t\t\ttype: string;\n\t\t\ticon?: string;\n\t\t\tfileBuffer?: string;\n\t\t};\n\t};\n\tcategory?: string | string[];\n}\n\ninterface NodeView {\n\tvalue: string;\n\ttitle: string;\n\tinfo?: string;\n\tsubtitle?: string;\n\titems: NodeViewItem[];\n}\n\nfunction getAiNodesBySubcategory(nodes: INodeTypeDescription[], subcategory: string) {\n\treturn nodes\n\t\t.filter(\n\t\t\t(node) => !node.hidden && node.codex?.subcategories?.[AI_SUBCATEGORY]?.includes(subcategory),\n\t\t)\n\t\t.map((node) => ({\n\t\t\tkey: node.name,\n\t\t\ttype: 'node',\n\t\t\tproperties: {\n\t\t\t\tgroup: [],\n\t\t\t\tname: node.name,\n\t\t\t\tdisplayName: node.displayName,\n\t\t\t\ttitle: node.displayName,\n\t\t\t\tdescription: node.description,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\ticon: node.icon!,\n\t\t\t\ticonUrl: node.iconUrl,\n\t\t\t},\n\t\t}))\n\t\t.sort((a, b) => a.properties.displayName.localeCompare(b.properties.displayName));\n}\n\nexport function AIView(_nodes: SimplifiedNodeType[]): NodeView {\n\tconst i18n = useI18n();\n\tconst nodeTypesStore = useNodeTypesStore();\n\tconst templatesStore = useTemplatesStore();\n\n\tconst chainNodes = getAiNodesBySubcategory(nodeTypesStore.allLatestNodeTypes, AI_CATEGORY_CHAINS);\n\tconst agentNodes = getAiNodesBySubcategory(nodeTypesStore.allLatestNodeTypes, AI_CATEGORY_AGENTS);\n\n\treturn {\n\t\tvalue: AI_NODE_CREATOR_VIEW,\n\t\ttitle: i18n.baseText('nodeCreator.aiPanel.aiNodes'),\n\t\tsubtitle: i18n.baseText('nodeCreator.aiPanel.selectAiNode'),\n\t\titems: [\n\t\t\t{\n\t\t\t\tkey: 'ai_templates_root',\n\t\t\t\ttype: 'link',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: i18n.baseText('nodeCreator.aiPanel.linkItem.title'),\n\t\t\t\t\ticon: 'box-open',\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.aiPanel.linkItem.description'),\n\t\t\t\t\tname: 'ai_templates_root',\n\t\t\t\t\turl: templatesStore.getWebsiteCategoryURL(undefined, 'AdvancedAI'),\n\t\t\t\t\ttag: {\n\t\t\t\t\t\ttype: 'info',\n\t\t\t\t\t\ttext: i18n.baseText('nodeCreator.triggerHelperPanel.manualTriggerTag'),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t...agentNodes,\n\t\t\t...chainNodes,\n\t\t\t{\n\t\t\t\tkey: AI_OTHERS_NODE_CREATOR_VIEW,\n\t\t\t\ttype: 'view',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: i18n.baseText('nodeCreator.aiPanel.aiOtherNodes'),\n\t\t\t\t\ticon: 'robot',\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.aiPanel.aiOtherNodesDescription'),\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n}\n\nexport function AINodesView(_nodes: SimplifiedNodeType[]): NodeView {\n\tconst i18n = useI18n();\n\n\tfunction getAISubcategoryProperties(nodeConnectionType: NodeConnectionType) {\n\t\treturn {\n\t\t\tconnectionType: nodeConnectionType,\n\t\t\ticonProps: {\n\t\t\t\tcolor: `var(--node-type-${nodeConnectionType}-color)`,\n\t\t\t},\n\t\t\tpanelClass: `nodes-list-panel-${nodeConnectionType}`,\n\t\t};\n\t}\n\n\treturn {\n\t\tvalue: AI_OTHERS_NODE_CREATOR_VIEW,\n\t\ttitle: i18n.baseText('nodeCreator.aiPanel.aiOtherNodes'),\n\t\tsubtitle: i18n.baseText('nodeCreator.aiPanel.selectAiNode'),\n\t\titems: [\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_DOCUMENT_LOADERS,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_DOCUMENT_LOADERS,\n\t\t\t\t\ticon: 'file-import',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiDocument),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_LANGUAGE_MODELS,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_LANGUAGE_MODELS,\n\t\t\t\t\ticon: 'language',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiLanguageModel),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_MEMORY,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_MEMORY,\n\t\t\t\t\ticon: 'brain',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiMemory),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_OUTPUTPARSER,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_OUTPUTPARSER,\n\t\t\t\t\ticon: 'list',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiOutputParser),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_RETRIEVERS,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_RETRIEVERS,\n\t\t\t\t\ticon: 'search',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiRetriever),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_TEXT_SPLITTERS,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_TEXT_SPLITTERS,\n\t\t\t\t\ticon: 'grip-lines-vertical',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiTextSplitter),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: AI_CATEGORY_TOOLS,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_TOOLS,\n\t\t\t\t\ticon: 'tools',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiTool),\n\t\t\t\t\tsections: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'popular',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.popular'),\n\t\t\t\t\t\t\titems: [AI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE, AI_CODE_TOOL_LANGCHAIN_NODE_TYPE],\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\t{\n\t\t\t\tkey: AI_CATEGORY_EMBEDDING,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_EMBEDDING,\n\t\t\t\t\ticon: 'vector-square',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiEmbedding),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_VECTOR_STORES,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_VECTOR_STORES,\n\t\t\t\t\ticon: 'project-diagram',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiVectorStore),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_UNCATEGORIZED_CATEGORY,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_UNCATEGORIZED_CATEGORY,\n\t\t\t\t\ticon: 'code',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n}\n\nexport function TriggerView() {\n\tconst i18n = useI18n();\n\n\tconst view: NodeView = {\n\t\tvalue: TRIGGER_NODE_CREATOR_VIEW,\n\t\ttitle: i18n.baseText('nodeCreator.triggerHelperPanel.selectATrigger'),\n\t\tsubtitle: i18n.baseText('nodeCreator.triggerHelperPanel.selectATriggerDescription'),\n\t\titems: [\n\t\t\t{\n\t\t\t\tkey: MANUAL_TRIGGER_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: MANUAL_TRIGGER_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.manualTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.manualTriggerDescription'),\n\t\t\t\t\ticon: 'fa:mouse-pointer',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: DEFAULT_SUBCATEGORY,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\tforceIncludeNodes: [WEBHOOK_NODE_TYPE, EMAIL_IMAP_NODE_TYPE],\n\t\t\t\t\ttitle: 'App Trigger Nodes',\n\t\t\t\t\ticon: 'satellite-dish',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: SCHEDULE_TRIGGER_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: SCHEDULE_TRIGGER_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.scheduleTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.scheduleTriggerDescription'),\n\t\t\t\t\ticon: 'fa:clock',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: WEBHOOK_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: WEBHOOK_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.webhookTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.webhookTriggerDescription'),\n\t\t\t\t\ticonData: {\n\t\t\t\t\t\ttype: 'file',\n\t\t\t\t\t\ticon: 'webhook',\n\t\t\t\t\t\tfileBuffer: '/static/webhook-icon.svg',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: FORM_TRIGGER_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: FORM_TRIGGER_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.formTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.formTriggerDescription'),\n\t\t\t\t\ticonData: {\n\t\t\t\t\t\ttype: 'file',\n\t\t\t\t\t\ticon: 'form',\n\t\t\t\t\t\tfileBuffer: '/static/form-grey.svg',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.workflowTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.workflowTriggerDescription'),\n\t\t\t\t\ticon: 'fa:sign-out-alt',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: MANUAL_CHAT_TRIGGER_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: MANUAL_CHAT_TRIGGER_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.manualChatTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.manualChatTriggerDescription'),\n\t\t\t\t\ticon: 'fa:comments',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: OTHER_TRIGGER_NODES_SUBCATEGORY,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: OTHER_TRIGGER_NODES_SUBCATEGORY,\n\t\t\t\t\ticon: 'folder-open',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n\n\treturn view;\n}\n\nexport function RegularView(nodes: SimplifiedNodeType[]) {\n\tconst i18n = useI18n();\n\n\tconst view: NodeView = {\n\t\tvalue: REGULAR_NODE_CREATOR_VIEW,\n\t\ttitle: i18n.baseText('nodeCreator.triggerHelperPanel.whatHappensNext'),\n\t\titems: [\n\t\t\t{\n\t\t\t\tkey: DEFAULT_SUBCATEGORY,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: 'App Regular Nodes',\n\t\t\t\t\ticon: 'globe',\n\t\t\t\t\tforceIncludeNodes: [RSS_READ_NODE_TYPE, EMAIL_SEND_NODE_TYPE],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: TRANSFORM_DATA_SUBCATEGORY,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: TRANSFORM_DATA_SUBCATEGORY,\n\t\t\t\t\ticon: 'pen',\n\t\t\t\t\tsections: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'popular',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.popular'),\n\t\t\t\t\t\t\titems: [SET_NODE_TYPE, CODE_NODE_TYPE, DATETIME_NODE_TYPE],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'addOrRemove',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.transform.addOrRemove'),\n\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\tFILTER_NODE_TYPE,\n\t\t\t\t\t\t\t\tREMOVE_DUPLICATES_NODE_TYPE,\n\t\t\t\t\t\t\t\tSPLIT_OUT_NODE_TYPE,\n\t\t\t\t\t\t\t\tLIMIT_NODE_TYPE,\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\tkey: 'combine',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.transform.combine'),\n\t\t\t\t\t\t\titems: [SUMMARIZE_NODE_TYPE, AGGREGATE_NODE_TYPE, MERGE_NODE_TYPE],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'convert',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.transform.convert'),\n\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\tHTML_NODE_TYPE,\n\t\t\t\t\t\t\t\tMARKDOWN_NODE_TYPE,\n\t\t\t\t\t\t\t\tXML_NODE_TYPE,\n\t\t\t\t\t\t\t\tCRYPTO_NODE_TYPE,\n\t\t\t\t\t\t\t\tEXTRACT_FROM_FILE_NODE_TYPE,\n\t\t\t\t\t\t\t\tCONVERT_TO_FILE_NODE_TYPE,\n\t\t\t\t\t\t\t\tCOMPRESSION_NODE_TYPE,\n\t\t\t\t\t\t\t\tEDIT_IMAGE_NODE_TYPE,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: FLOWS_CONTROL_SUBCATEGORY,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: FLOWS_CONTROL_SUBCATEGORY,\n\t\t\t\t\ticon: 'code-branch',\n\t\t\t\t\tsections: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'popular',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.popular'),\n\t\t\t\t\t\t\titems: [FILTER_NODE_TYPE, IF_NODE_TYPE, SPLIT_IN_BATCHES_NODE_TYPE, MERGE_NODE_TYPE],\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\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: HELPERS_SUBCATEGORY,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: HELPERS_SUBCATEGORY,\n\t\t\t\t\ticon: 'toolbox',\n\t\t\t\t\tsections: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'popular',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.popular'),\n\t\t\t\t\t\t\titems: [HTTP_REQUEST_NODE_TYPE, WEBHOOK_NODE_TYPE, CODE_NODE_TYPE],\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],\n\t};\n\n\tconst hasAINodes = (nodes ?? []).some((node) => node.codex?.categories?.includes(AI_SUBCATEGORY));\n\tif (hasAINodes)\n\t\tview.items.push({\n\t\t\tkey: AI_NODE_CREATOR_VIEW,\n\t\t\ttype: 'view',\n\t\t\tproperties: {\n\t\t\t\ttitle: i18n.baseText('nodeCreator.aiPanel.langchainAiNodes'),\n\t\t\t\ticon: 'robot',\n\t\t\t\tdescription: i18n.baseText('nodeCreator.aiPanel.nodesForAi'),\n\t\t\t\ttag: {\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttext: i18n.baseText('nodeCreator.aiPanel.newTag'),\n\t\t\t\t},\n\t\t\t\tborderless: true,\n\t\t\t},\n\t\t} as NodeViewItem);\n\n\tview.items.push({\n\t\tkey: TRIGGER_NODE_CREATOR_VIEW,\n\t\ttype: 'view',\n\t\tproperties: {\n\t\t\ttitle: i18n.baseText('nodeCreator.triggerHelperPanel.addAnotherTrigger'),\n\t\t\ticon: 'bolt',\n\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.addAnotherTriggerDescription'),\n\t\t},\n\t});\n\n\treturn view;\n}\n","import { ref } from 'vue';\nimport { defineStore } from 'pinia';\n\nexport type KeyboardKey = (typeof WATCHED_KEYS)[number];\ninterface KeyHook {\n\tkeyboardKeys: KeyboardKey[];\n\tcondition?: (type: string, activeItemId: string) => boolean;\n\thandler: (activeItemId: string, keyboardKey: KeyboardKey) => void;\n}\n\nexport const KEYBOARD_ID_ATTR = 'data-keyboard-nav-id';\nexport const WATCHED_KEYS = [\n\t'ArrowUp',\n\t'ArrowDown',\n\t'ArrowLeft',\n\t'ArrowRight',\n\t'Enter',\n\t'Escape',\n\t'Tab',\n];\n\nexport const useKeyboardNavigation = defineStore('nodeCreatorKeyboardNavigation', () => {\n\tconst selectableItems = ref<Array<WeakRef<Element>>>([]);\n\tconst activeItemId = ref<string | null>(null);\n\t// Array of objects that contains key code and handler\n\tconst keysHooks = ref<Record<string, KeyHook>>({});\n\n\tfunction getItemType(element?: Element) {\n\t\treturn element?.getAttribute('data-keyboard-nav-type');\n\t}\n\tfunction getElementId(element?: Element) {\n\t\treturn element?.getAttribute(KEYBOARD_ID_ATTR) || undefined;\n\t}\n\tasync function refreshSelectableItems(): Promise<void> {\n\t\treturn await new Promise((resolve) => {\n\t\t\t// Wait for DOM to update\n\t\t\tcleanupSelectableItems();\n\t\t\tsetTimeout(() => {\n\t\t\t\tselectableItems.value = Array.from(\n\t\t\t\t\tdocument.querySelectorAll('[data-keyboard-nav-type]'),\n\t\t\t\t).map((el) => new WeakRef(el));\n\t\t\t\tresolve();\n\t\t\t}, 0);\n\t\t});\n\t}\n\n\tfunction executeKeyHooks(keyboardKey: KeyboardKey, activeItem: Element) {\n\t\tconst flatHooks = Object.values(keysHooks.value);\n\t\tconst hooks = flatHooks.filter((hook) => hook.keyboardKeys.includes(keyboardKey));\n\n\t\thooks.forEach((hook) => {\n\t\t\tif (!activeItemId.value) return;\n\n\t\t\tconst conditionPassed =\n\t\t\t\thook.condition === undefined ||\n\t\t\t\thook.condition(getItemType(activeItem) || '', activeItemId.value);\n\n\t\t\tif (conditionPassed && activeItemId.value) {\n\t\t\t\thook.handler(activeItemId.value, keyboardKey);\n\t\t\t}\n\t\t});\n\t}\n\n\tasync function onKeyDown(e: KeyboardEvent) {\n\t\tconst pressedKey = e.key;\n\t\tif (!WATCHED_KEYS.includes(pressedKey)) return;\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tawait refreshSelectableItems();\n\t\tconst activeItemIndex = selectableItems.value.findIndex(\n\t\t\t(item) => getElementId(item?.deref()) === activeItemId.value,\n\t\t);\n\t\tconst activeItem = selectableItems.value[activeItemIndex]?.deref();\n\n\t\tconst isArrowDown = pressedKey === 'ArrowDown';\n\t\tconst isArrowUp = pressedKey === 'ArrowUp';\n\n\t\tif (!activeItem) return;\n\n\t\tif (isArrowDown) {\n\t\t\tconst nextItemIndex =\n\t\t\t\tactiveItemIndex < selectableItems.value.length - 1 ? activeItemIndex + 1 : 0;\n\n\t\t\tsetActiveItem(selectableItems.value[nextItemIndex]?.deref());\n\t\t}\n\t\tif (isArrowUp) {\n\t\t\tconst previousIndex =\n\t\t\t\tactiveItemIndex > 0 ? activeItemIndex - 1 : selectableItems.value.length - 1;\n\n\t\t\tsetActiveItem(selectableItems.value[previousIndex]?.deref());\n\t\t}\n\t\texecuteKeyHooks(pressedKey, activeItem);\n\t}\n\n\tfunction setActiveItemId(id: string) {\n\t\tactiveItemId.value = id;\n\t}\n\n\tfunction setActiveItem(item?: Element) {\n\t\tconst itemId = getElementId(item);\n\t\tif (!itemId) return;\n\n\t\tsetActiveItemId(itemId);\n\t\tif (item?.scrollIntoView) {\n\t\t\titem?.scrollIntoView({ block: 'center' });\n\t\t}\n\t}\n\n\tasync function setActiveItemIndex(index: number) {\n\t\tawait refreshSelectableItems();\n\n\t\tsetActiveItem(selectableItems.value[index]?.deref());\n\t}\n\n\tfunction attachKeydownEvent() {\n\t\tdocument.addEventListener('keydown', onKeyDown, { capture: true });\n\t}\n\n\tfunction detachKeydownEvent() {\n\t\tcleanupSelectableItems();\n\t\tdocument.removeEventListener('keydown', onKeyDown, { capture: true });\n\t}\n\n\tfunction registerKeyHook(name: string, hook: KeyHook) {\n\t\thook.keyboardKeys.forEach((keyboardKey) => {\n\t\t\tif (WATCHED_KEYS.includes(keyboardKey)) {\n\t\t\t\tkeysHooks.value = { ...keysHooks.value, [name]: hook };\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Key ${keyboardKey} is not supported`);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction cleanupSelectableItems() {\n\t\t// Cleanup to make sure DOM elements get garbage collected\n\t\tselectableItems.value = [];\n\t}\n\n\tfunction getActiveItemIndex() {\n\t\treturn selectableItems.value.findIndex(\n\t\t\t(item) => getElementId(item?.deref()) === activeItemId.value,\n\t\t);\n\t}\n\n\treturn {\n\t\tactiveItemId,\n\t\tattachKeydownEvent,\n\t\trefreshSelectableItems,\n\t\tdetachKeydownEvent,\n\t\tregisterKeyHook,\n\t\tgetActiveItemIndex,\n\t\tsetActiveItemId,\n\t\tsetActiveItemIndex,\n\t};\n});\n","import type {\n\tINodeCreateElement,\n\tNodeCreateElement,\n\tNodeFilterType,\n\tSimplifiedNodeType,\n} from '@/Interface';\nimport {\n\tAI_CATEGORY_ROOT_NODES,\n\tAI_CODE_NODE_TYPE,\n\tAI_NODE_CREATOR_VIEW,\n\tAI_OTHERS_NODE_CREATOR_VIEW,\n\tAI_SUBCATEGORY,\n\tDEFAULT_SUBCATEGORY,\n\tTRIGGER_NODE_CREATOR_VIEW,\n} from '@/constants';\nimport { defineStore } from 'pinia';\nimport { v4 as uuid } from 'uuid';\nimport { computed, nextTick, ref } from 'vue';\nimport difference from 'lodash-es/difference';\n\nimport { useNodeCreatorStore } from '@/stores/nodeCreator.store';\n\nimport {\n\tflattenCreateElements,\n\tgroupItemsInSections,\n\tisAINode,\n\tsearchNodes,\n\tsortNodeCreateElements,\n\tsubcategorizeItems,\n\ttransformNodeType,\n} from '../utils';\n\nimport type { NodeViewItem, NodeViewItemSection } from '@/components/Node/NodeCreator/viewsData';\nimport { AINodesView } from '@/components/Node/NodeCreator/viewsData';\nimport { useI18n } from '@/composables/useI18n';\nimport { useKeyboardNavigation } from './useKeyboardNavigation';\n\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport type { INodeInputFilter, NodeConnectionType, Themed } from 'n8n-workflow';\nimport { useCanvasStore } from '@/stores/canvas.store';\n\ninterface ViewStack {\n\tuuid?: string;\n\ttitle?: string;\n\tsubtitle?: string;\n\tsearch?: string;\n\tsubcategory?: string;\n\tinfo?: string;\n\tnodeIcon?: {\n\t\ticonType?: string;\n\t\ticon?: Themed<string>;\n\t\tcolor?: string;\n\t};\n\ticonUrl?: string;\n\trootView?: NodeFilterType;\n\tactiveIndex?: number;\n\ttransitionDirection?: 'in' | 'out';\n\thasSearch?: boolean;\n\tpreventBack?: boolean;\n\titems?: INodeCreateElement[];\n\tbaselineItems?: INodeCreateElement[];\n\tsearchItems?: SimplifiedNodeType[];\n\tforceIncludeNodes?: string[];\n\tmode?: 'actions' | 'nodes';\n\tbaseFilter?: (item: INodeCreateElement) => boolean;\n\titemsMapper?: (item: INodeCreateElement) => INodeCreateElement;\n\tpanelClass?: string;\n\tsections?: string[] | NodeViewItemSection[];\n}\n\nexport const useViewStacks = defineStore('nodeCreatorViewStacks', () => {\n\tconst nodeCreatorStore = useNodeCreatorStore();\n\tconst { getActiveItemIndex } = useKeyboardNavigation();\n\tconst i18n = useI18n();\n\n\tconst viewStacks = ref<ViewStack[]>([]);\n\n\tconst activeStackItems = computed<INodeCreateElement[]>(() => {\n\t\tconst stack = getLastActiveStack();\n\n\t\tif (!stack?.baselineItems) {\n\t\t\treturn stack.items ? extendItemsWithUUID(stack.items) : [];\n\t\t}\n\n\t\tif (stack.search && searchBaseItems.value) {\n\t\t\tconst searchBase =\n\t\t\t\tsearchBaseItems.value.length > 0\n\t\t\t\t\t? searchBaseItems.value\n\t\t\t\t\t: flattenCreateElements(stack.baselineItems ?? []);\n\n\t\t\tconst canvasHasAINodes = useCanvasStore().aiNodes.length > 0;\n\t\t\tconst filteredNodes =\n\t\t\t\tisAiRootView(stack) || canvasHasAINodes ? searchBase : filterOutAiNodes(searchBase);\n\n\t\t\tconst searchResults = extendItemsWithUUID(searchNodes(stack.search || '', filteredNodes));\n\n\t\t\tconst groupedNodes = groupIfAiNodes(searchResults, false) ?? searchResults;\n\t\t\t// Set the active index to the second item if there's a section\n\t\t\t// as the first item is collapsable\n\t\t\tstack.activeIndex = groupedNodes.some((node) => node.type === 'section') ? 1 : 0;\n\n\t\t\treturn groupedNodes;\n\t\t}\n\t\treturn extendItemsWithUUID(groupIfAiNodes(stack.baselineItems, true));\n\t});\n\n\tconst activeViewStack = computed<ViewStack>(() => {\n\t\tconst stack = getLastActiveStack();\n\t\tif (!stack) return {};\n\n\t\tconst flatBaselineItems = flattenCreateElements(stack.baselineItems ?? []);\n\n\t\treturn {\n\t\t\t...stack,\n\t\t\titems: activeStackItems.value,\n\t\t\thasSearch: flatBaselineItems.length > 8 || stack?.hasSearch,\n\t\t};\n\t});\n\n\tconst activeViewStackMode = computed(\n\t\t() => activeViewStack.value.mode || TRIGGER_NODE_CREATOR_VIEW,\n\t);\n\n\tconst searchBaseItems = computed<INodeCreateElement[]>(() => {\n\t\tconst stack = getLastActiveStack();\n\t\tif (!stack?.searchItems) return [];\n\n\t\treturn stack.searchItems.map((item) => transformNodeType(item, stack.subcategory));\n\t});\n\n\tfunction getLastActiveStack() {\n\t\treturn viewStacks.value[viewStacks.value.length - 1];\n\t}\n\n\t// Generate a delta between the global search results(all nodes) and the stack search results\n\tconst globalSearchItemsDiff = computed<INodeCreateElement[]>(() => {\n\t\tconst stack = getLastActiveStack();\n\t\tif (!stack?.search) return [];\n\n\t\tconst allNodes = nodeCreatorStore.mergedNodes.map((item) => transformNodeType(item));\n\t\t// Apply filtering for AI nodes if the current view is not the AI root view\n\t\tconst filteredNodes = isAiRootView(stack) ? allNodes : filterOutAiNodes(allNodes);\n\n\t\tlet globalSearchResult: INodeCreateElement[] = extendItemsWithUUID(\n\t\t\tsearchNodes(stack.search || '', filteredNodes),\n\t\t);\n\t\tif (isAiRootView(stack)) {\n\t\t\tglobalSearchResult = groupIfAiNodes(globalSearchResult);\n\t\t}\n\n\t\tconst filteredItems = globalSearchResult.filter((item) => {\n\t\t\treturn !activeStackItems.value.find((activeItem) => {\n\t\t\t\tif (activeItem.type === 'section') {\n\t\t\t\t\tconst matchingSectionItem = activeItem.children.some(\n\t\t\t\t\t\t(sectionItem) => sectionItem.key === item.key,\n\t\t\t\t\t);\n\t\t\t\t\treturn matchingSectionItem;\n\t\t\t\t}\n\n\t\t\t\treturn activeItem.key === item.key;\n\t\t\t});\n\t\t});\n\n\t\t// Filter out empty sections if all of their children are filtered out\n\t\tconst filteredSections = filteredItems.filter((item) => {\n\t\t\tif (item.type === 'section') {\n\t\t\t\tconst hasVisibleChildren = item.children.some((child) =>\n\t\t\t\t\tactiveStackItems.value.some((filteredItem) => filteredItem.key === child.key),\n\t\t\t\t);\n\n\t\t\t\treturn hasVisibleChildren;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\treturn filteredSections;\n\t});\n\n\tconst itemsBySubcategory = computed(() => subcategorizeItems(nodeCreatorStore.mergedNodes));\n\n\tfunction isAiRootView(stack: ViewStack) {\n\t\treturn stack.rootView === AI_NODE_CREATOR_VIEW;\n\t}\n\n\tfunction groupIfAiNodes(items: INodeCreateElement[], sortAlphabetically = true) {\n\t\tconst aiNodes = items.filter((node): node is NodeCreateElement => isAINode(node));\n\n\t\tif (aiNodes.length > 0) {\n\t\t\tconst sectionsMap = new Map<string, NodeViewItemSection>();\n\t\t\taiNodes.forEach((node) => {\n\t\t\t\tconst section = node.properties.codex?.subcategories?.[AI_SUBCATEGORY]?.[0];\n\n\t\t\t\tif (section) {\n\t\t\t\t\tconst currentItems = sectionsMap.get(section)?.items ?? [];\n\t\t\t\t\tconst isSubnodesSection =\n\t\t\t\t\t\t!node.properties.codex?.subcategories?.[AI_SUBCATEGORY].includes(\n\t\t\t\t\t\t\tAI_CATEGORY_ROOT_NODES,\n\t\t\t\t\t\t);\n\n\t\t\t\t\tsectionsMap.set(section, {\n\t\t\t\t\t\tkey: section,\n\t\t\t\t\t\ttitle: isSubnodesSection\n\t\t\t\t\t\t\t? `${section} (${i18n.baseText('nodeCreator.subnodes')})`\n\t\t\t\t\t\t\t: section,\n\t\t\t\t\t\titems: [...currentItems, node.key],\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst nonAiNodes = difference(items, aiNodes);\n\t\t\tconst nonAiTriggerNodes = nonAiNodes.filter(\n\t\t\t\t(item) => item.type === 'node' && useNodeTypesStore().isTriggerNode(item.properties.name),\n\t\t\t);\n\n\t\t\tconst nonAiRegularNodes = difference(nonAiNodes, nonAiTriggerNodes);\n\n\t\t\tif (nonAiNodes.length > 0) {\n\t\t\t\tlet sectionKey = '';\n\t\t\t\tif (nonAiRegularNodes.length && nonAiTriggerNodes.length) {\n\t\t\t\t\tsectionKey = i18n.baseText('nodeCreator.actionsCategory.regularAndTriggers');\n\t\t\t\t} else {\n\t\t\t\t\tsectionKey = nonAiRegularNodes.length\n\t\t\t\t\t\t? i18n.baseText('nodeCreator.actionsCategory.regularNodes')\n\t\t\t\t\t\t: i18n.baseText('nodeCreator.actionsCategory.triggerNodes');\n\t\t\t\t}\n\n\t\t\t\tconst nodesKeys = nonAiNodes.map((node) => node.key);\n\n\t\t\t\tsectionsMap.set(sectionKey, {\n\t\t\t\t\tkey: sectionKey,\n\t\t\t\t\ttitle: sectionKey,\n\t\t\t\t\titems: [...nodesKeys],\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Convert sectionsMap to array of sections\n\t\t\tconst sections = Array.from(sectionsMap.values());\n\n\t\t\treturn groupItemsInSections(items, sections, sortAlphabetically);\n\t\t}\n\n\t\treturn items;\n\t}\n\n\tfunction filterOutAiNodes(items: INodeCreateElement[]) {\n\t\tconst filteredSearchBase = items.filter((item) => {\n\t\t\tif (item.type === 'node') {\n\t\t\t\tconst isAICategory = item.properties.codex?.categories?.includes(AI_SUBCATEGORY) === true;\n\n\t\t\t\tif (!isAICategory) return true;\n\n\t\t\t\tconst isRootNodeSubcategory =\n\t\t\t\t\titem.properties.codex?.subcategories?.[AI_SUBCATEGORY]?.includes(AI_CATEGORY_ROOT_NODES);\n\n\t\t\t\treturn isRootNodeSubcategory;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\treturn filteredSearchBase;\n\t}\n\n\tasync function gotoCompatibleConnectionView(\n\t\tconnectionType: NodeConnectionType,\n\t\tisOutput?: boolean,\n\t\tfilter?: INodeInputFilter,\n\t) {\n\t\tlet nodesByConnectionType: { [key: string]: string[] };\n\t\tlet relatedAIView: { properties: NodeViewItem['properties'] } | undefined;\n\n\t\tif (isOutput === true) {\n\t\t\tnodesByConnectionType = useNodeTypesStore().visibleNodeTypesByInputConnectionTypeNames;\n\t\t\trelatedAIView = {\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: i18n.baseText('nodeCreator.aiPanel.aiNodes'),\n\t\t\t\t\ticon: 'robot',\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tnodesByConnectionType = useNodeTypesStore().visibleNodeTypesByOutputConnectionTypeNames;\n\n\t\t\trelatedAIView = AINodesView([]).items.find(\n\t\t\t\t(item) => item.properties.connectionType === connectionType,\n\t\t\t);\n\t\t}\n\n\t\tawait nextTick();\n\t\tpushViewStack({\n\t\t\ttitle: relatedAIView?.properties.title,\n\t\t\trootView: AI_OTHERS_NODE_CREATOR_VIEW,\n\t\t\tmode: 'nodes',\n\t\t\titems: nodeCreatorStore.allNodeCreatorNodes,\n\t\t\tnodeIcon: {\n\t\t\t\ticonType: 'icon',\n\t\t\t\ticon: relatedAIView?.properties.icon,\n\t\t\t\tcolor: relatedAIView?.properties.iconProps?.color,\n\t\t\t},\n\t\t\tpanelClass: relatedAIView?.properties.panelClass,\n\t\t\tbaseFilter: (i: INodeCreateElement) => {\n\t\t\t\t// AI Code node could have any connection type so we don't want to display it\n\t\t\t\t// in the compatible connection view as it would be displayed in all of them\n\t\t\t\tif (i.key === AI_CODE_NODE_TYPE) return false;\n\t\t\t\tconst displayNode = nodesByConnectionType[connectionType].includes(i.key);\n\n\t\t\t\t// TODO: Filtering works currently fine for displaying compatible node when dropping\n\t\t\t\t// input connections. However, it does not work for output connections.\n\t\t\t\t// For that reason does it currently display nodes that are maybe not compatible\n\t\t\t\t// but then errors once it got selected by the user.\n\t\t\t\tif (displayNode && filter?.nodes?.length) {\n\t\t\t\t\treturn filter.nodes.includes(i.key);\n\t\t\t\t}\n\n\t\t\t\treturn displayNode;\n\t\t\t},\n\t\t\titemsMapper(item) {\n\t\t\t\treturn {\n\t\t\t\t\t...item,\n\t\t\t\t\tsubcategory: connectionType,\n\t\t\t\t};\n\t\t\t},\n\t\t\tpreventBack: true,\n\t\t});\n\t}\n\n\tfunction setStackBaselineItems() {\n\t\tconst stack = getLastActiveStack();\n\t\tif (!stack || !activeViewStack.value.uuid) return;\n\n\t\tlet stackItems = stack?.items ?? [];\n\n\t\tif (!stack?.items) {\n\t\t\tconst subcategory = stack?.subcategory ?? DEFAULT_SUBCATEGORY;\n\t\t\tconst itemsInSubcategory = itemsBySubcategory.value[subcategory];\n\t\t\tconst sections = stack.sections;\n\n\t\t\tif (sections) {\n\t\t\t\tstackItems = groupItemsInSections(itemsInSubcategory, sections);\n\t\t\t} else {\n\t\t\t\tstackItems = itemsInSubcategory;\n\t\t\t}\n\t\t}\n\n\t\t// Ensure that the nodes specified in `stack.forceIncludeNodes` are always included,\n\t\t// regardless of whether the subcategory is matched\n\t\tif ((stack.forceIncludeNodes ?? []).length > 0) {\n\t\t\tconst matchedNodes = nodeCreatorStore.mergedNodes\n\t\t\t\t.filter((item) => stack.forceIncludeNodes?.includes(item.name))\n\t\t\t\t.map((item) => transformNodeType(item, stack.subcategory));\n\n\t\t\tstackItems.push(...matchedNodes);\n\t\t}\n\n\t\tif (stack.baseFilter) {\n\t\t\tstackItems = stackItems.filter(stack.baseFilter);\n\t\t}\n\n\t\tif (stack.itemsMapper) {\n\t\t\tstackItems = stackItems.map(stack.itemsMapper);\n\t\t}\n\n\t\t// Sort only if non-root view\n\t\tif (!stack.items) {\n\t\t\tstackItems = sortNodeCreateElements(stackItems);\n\t\t}\n\n\t\tupdateCurrentViewStack({ baselineItems: stackItems });\n\t}\n\n\tfunction extendItemsWithUUID(items: INodeCreateElement[]) {\n\t\treturn items.map((item) => ({\n\t\t\t...item,\n\t\t\tuuid: `${item.key}-${uuid()}`,\n\t\t}));\n\t}\n\n\tfunction pushViewStack(stack: ViewStack) {\n\t\tif (activeViewStack.value.uuid) {\n\t\t\tupdateCurrentViewStack({ activeIndex: getActiveItemIndex() });\n\t\t}\n\n\t\tconst newStackUuid = uuid();\n\t\tviewStacks.value.push({\n\t\t\t...stack,\n\t\t\tuuid: newStackUuid,\n\t\t\ttransitionDirection: 'in',\n\t\t\tactiveIndex: 0,\n\t\t});\n\t\tsetStackBaselineItems();\n\t}\n\n\tfunction popViewStack() {\n\t\tif (activeViewStack.value.uuid) {\n\t\t\tviewStacks.value.pop();\n\t\t\tupdateCurrentViewStack({ transitionDirection: 'out' });\n\t\t}\n\t}\n\n\tfunction updateCurrentViewStack(stack: Partial<ViewStack>) {\n\t\tconst currentStack = getLastActiveStack();\n\t\tconst matchedIndex = viewStacks.value.findIndex((s) => s.uuid === currentStack.uuid);\n\t\tif (!currentStack) return;\n\n\t\t// For each key in the stack, update the matched stack\n\t\tObject.keys(stack).forEach((key) => {\n\t\t\tconst typedKey = key as keyof ViewStack;\n\t\t\tviewStacks.value[matchedIndex] = {\n\t\t\t\t...viewStacks.value[matchedIndex],\n\t\t\t\t[key]: stack[typedKey],\n\t\t\t};\n\t\t});\n\t}\n\n\tfunction resetViewStacks() {\n\t\tviewStacks.value = [];\n\t}\n\n\treturn {\n\t\tviewStacks,\n\t\tactiveViewStack,\n\t\tactiveViewStackMode,\n\t\tglobalSearchItemsDiff,\n\t\tgotoCompatibleConnectionView,\n\t\tresetViewStacks,\n\t\tupdateCurrentViewStack,\n\t\tpushViewStack,\n\t\tpopViewStack,\n\t};\n});\n","import { defineStore } from 'pinia';\nimport {\n\tAI_NODE_CREATOR_VIEW,\n\tNODE_CREATOR_OPEN_SOURCES,\n\tREGULAR_NODE_CREATOR_VIEW,\n\tSTORES,\n\tTRIGGER_NODE_CREATOR_VIEW,\n} from '@/constants';\nimport type {\n\tNodeFilterType,\n\tNodeCreatorOpenSource,\n\tSimplifiedNodeType,\n\tActionsRecord,\n\tToggleNodeCreatorOptions,\n\tAIAssistantConnectionInfo,\n} from '@/Interface';\n\nimport { computed, ref } from 'vue';\nimport { transformNodeType } from '@/components/Node/NodeCreator/utils';\nimport type { INodeInputConfiguration } from 'n8n-workflow';\nimport { NodeConnectionType, nodeConnectionTypes, NodeHelpers } from 'n8n-workflow';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useViewStacks } from '@/components/Node/NodeCreator/composables/useViewStacks';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\n\nexport const useNodeCreatorStore = defineStore(STORES.NODE_CREATOR, () => {\n\tconst workflowsStore = useWorkflowsStore();\n\tconst ndvStore = useNDVStore();\n\tconst uiStore = useUIStore();\n\tconst nodeTypesStore = useNodeTypesStore();\n\n\tconst externalHooks = useExternalHooks();\n\tconst telemetry = useTelemetry();\n\n\tconst selectedView = ref<NodeFilterType>(TRIGGER_NODE_CREATOR_VIEW);\n\tconst mergedNodes = ref<SimplifiedNodeType[]>([]);\n\tconst actions = ref<ActionsRecord<typeof mergedNodes.value>>({});\n\n\tconst showScrim = ref(false);\n\tconst openSource = ref<NodeCreatorOpenSource>('');\n\n\tconst allNodeCreatorNodes = computed(() =>\n\t\tObject.values(mergedNodes.value).map((i) => transformNodeType(i)),\n\t);\n\n\tfunction setMergeNodes(nodes: SimplifiedNodeType[]) {\n\t\tmergedNodes.value = nodes;\n\t}\n\n\tfunction setActions(nodes: ActionsRecord<typeof mergedNodes.value>) {\n\t\tactions.value = nodes;\n\t}\n\n\tfunction setShowScrim(isVisible: boolean) {\n\t\tshowScrim.value = isVisible;\n\t}\n\n\tfunction setSelectedView(view: NodeFilterType) {\n\t\tselectedView.value = view;\n\t}\n\n\tfunction setOpenSource(view: NodeCreatorOpenSource) {\n\t\topenSource.value = view;\n\t}\n\n\tfunction openNodeCreator({\n\t\tsource,\n\t\tcreateNodeActive,\n\t\tnodeCreatorView,\n\t}: ToggleNodeCreatorOptions) {\n\t\tif (createNodeActive === uiStore.isCreateNodeActive) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!nodeCreatorView) {\n\t\t\tnodeCreatorView =\n\t\t\t\tworkflowsStore.workflowTriggerNodes.length > 0\n\t\t\t\t\t? REGULAR_NODE_CREATOR_VIEW\n\t\t\t\t\t: TRIGGER_NODE_CREATOR_VIEW;\n\t\t}\n\t\t// Default to the trigger tab in node creator if there's no trigger node yet\n\t\tsetSelectedView(nodeCreatorView);\n\n\t\tlet mode;\n\t\tswitch (selectedView.value) {\n\t\t\tcase AI_NODE_CREATOR_VIEW:\n\t\t\t\tmode = 'ai';\n\t\t\t\tbreak;\n\t\t\tcase REGULAR_NODE_CREATOR_VIEW:\n\t\t\t\tmode = 'regular';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmode = 'regular';\n\t\t}\n\n\t\tuiStore.isCreateNodeActive = createNodeActive;\n\t\tif (createNodeActive && source) {\n\t\t\tsetOpenSource(source);\n\t\t}\n\n\t\tvoid externalHooks.run('nodeView.createNodeActiveChanged', {\n\t\t\tsource,\n\t\t\tmode,\n\t\t\tcreateNodeActive,\n\t\t});\n\n\t\ttrackNodesPanelActiveChanged({\n\t\t\tsource,\n\t\t\tmode,\n\t\t\tcreateNodeActive,\n\t\t\tworkflowId: workflowsStore.workflowId,\n\t\t});\n\t}\n\n\tfunction trackNodesPanelActiveChanged({\n\t\tsource,\n\t\tmode,\n\t\tcreateNodeActive,\n\t\tworkflowId,\n\t}: {\n\t\tsource?: string;\n\t\tmode?: string;\n\t\tcreateNodeActive?: boolean;\n\t\tworkflowId?: string;\n\t}) {\n\t\ttelemetry.trackNodesPanel('nodeView.createNodeActiveChanged', {\n\t\t\tsource,\n\t\t\tmode,\n\t\t\tcreateNodeActive,\n\t\t\tworkflow_id: workflowId,\n\t\t});\n\t}\n\n\tfunction openSelectiveNodeCreator({\n\t\tconnectionType,\n\t\tnode,\n\t\tcreatorView,\n\t}: {\n\t\tconnectionType: NodeConnectionType;\n\t\tnode: string;\n\t\tcreatorView?: NodeFilterType;\n\t}) {\n\t\tconst nodeName = node ?? ndvStore.activeNodeName;\n\t\tconst nodeData = nodeName ? workflowsStore.getNodeByName(nodeName) : null;\n\n\t\tndvStore.activeNodeName = null;\n\n\t\tsetTimeout(() => {\n\t\t\tif (creatorView) {\n\t\t\t\topenNodeCreator({\n\t\t\t\t\tcreateNodeActive: true,\n\t\t\t\t\tnodeCreatorView: creatorView,\n\t\t\t\t});\n\t\t\t} else if (connectionType && nodeData) {\n\t\t\t\tinsertNodeAfterSelected({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tendpointUuid: `${nodeData.id}-input${connectionType}0`,\n\t\t\t\t\teventSource: NODE_CREATOR_OPEN_SOURCES.NOTICE_ERROR_MESSAGE,\n\t\t\t\t\toutputType: connectionType,\n\t\t\t\t\tsourceId: nodeData.id,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction insertNodeAfterSelected(info: AIAssistantConnectionInfo) {\n\t\tconst type = info.outputType ?? NodeConnectionType.Main;\n\t\t// Get the node and set it as active that new nodes\n\t\t// which get created get automatically connected\n\t\t// to it.\n\t\tconst sourceNode = workflowsStore.getNodeById(info.sourceId);\n\t\tif (!sourceNode) {\n\t\t\treturn;\n\t\t}\n\n\t\tuiStore.lastSelectedNode = sourceNode.name;\n\t\tuiStore.lastSelectedNodeEndpointUuid =\n\t\t\tinfo.endpointUuid ?? info.connection?.target.jtk?.endpoint.uuid;\n\t\tuiStore.lastSelectedNodeOutputIndex = info.index;\n\t\t// canvasStore.newNodeInsertPosition = null;\n\n\t\t// @TODO Add connection to store\n\t\t// if (info.connection) {\n\t\t// \tcanvasStore.setLastSelectedConnection(info.connection);\n\t\t// }\n\n\t\topenNodeCreator({\n\t\t\tsource: info.eventSource,\n\t\t\tcreateNodeActive: true,\n\t\t\tnodeCreatorView: info.nodeCreatorView,\n\t\t});\n\n\t\t// TODO: The animation is a bit glitchy because we're updating view stack immediately\n\t\t// after the node creator is opened\n\t\tconst isOutput = info.connection?.endpoints[0].parameters.connection === 'source';\n\t\tconst isScopedConnection =\n\t\t\ttype !== NodeConnectionType.Main && nodeConnectionTypes.includes(type);\n\n\t\tif (isScopedConnection) {\n\t\t\tuseViewStacks()\n\t\t\t\t.gotoCompatibleConnectionView(type, isOutput, getNodeCreatorFilter(sourceNode.name, type))\n\t\t\t\t.catch(() => {});\n\t\t}\n\t}\n\n\tfunction getNodeCreatorFilter(nodeName: string, outputType?: NodeConnectionType) {\n\t\tlet filter;\n\t\tconst workflow = workflowsStore.getCurrentWorkflow();\n\t\tconst workflowNode = workflow.getNode(nodeName);\n\t\tif (!workflowNode) return { nodes: [] };\n\n\t\tconst nodeType = nodeTypesStore.getNodeType(workflowNode?.type, workflowNode.typeVersion);\n\t\tif (nodeType) {\n\t\t\tconst inputs = NodeHelpers.getNodeInputs(workflow, workflowNode, nodeType);\n\n\t\t\tconst filterFound = inputs.filter((input) => {\n\t\t\t\tif (typeof input === 'string' || input.type !== outputType || !input.filter) {\n\t\t\t\t\t// No filters defined or wrong connection type\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}) as INodeInputConfiguration[];\n\n\t\t\tif (filterFound.length) {\n\t\t\t\tfilter = filterFound[0].filter;\n\t\t\t}\n\t\t}\n\n\t\treturn filter;\n\t}\n\n\treturn {\n\t\topenSource,\n\t\tselectedView,\n\t\tshowScrim,\n\t\tmergedNodes,\n\t\tactions,\n\t\tsetShowScrim,\n\t\tsetSelectedView,\n\t\tsetOpenSource,\n\t\tsetActions,\n\t\tsetMergeNodes,\n\t\topenNodeCreator,\n\t\topenSelectiveNodeCreator,\n\t\tallNodeCreatorNodes,\n\t};\n});\n"],"names":["SEQUENTIAL_BONUS","SEPARATOR_BONUS","CAMEL_BONUS","FIRST_LETTER_BONUS","LEADING_LETTER_PENALTY","MAX_LEADING_LETTER_PENALTY","UNMATCHED_LETTER_PENALTY","fuzzyMatchSimple","pattern","target","patternIdx","strIdx","patternChar","targetChar","fuzzyMatch","fuzzyMatchRecursive","patternCurIndex","targetCurrIndex","targetMatches","matches","maxMatches","nextMatch","recursionCount","recursionLimit","outScore","recursiveMatch","bestRecursiveMatches","bestRecursiveScore","firstMatch","recursiveMatches","recursiveResult","recursiveScore","matched","penalty","unmatched","i","currIdx","prevIdx","neighbor","curr","getValue","obj","prop","segments","result","key","sublimeSearch","filter","data","keys","results","accu","item","values","weight","value","v","itemMatch","match","a","b","transformNodeType","node","subcategory","type","createElement","uuidv4","_c","_b","_a","CORE_NODES_CATEGORY","DEFAULT_SUBCATEGORY","subcategorizeItems","items","WHITE_LISTED_SUBCATEGORIES","AI_SUBCATEGORY","acc","subcategories","category","_d","sortNodeCreateElements","nodes","displayNameA","displayNameB","searchNodes","searchFilter","trimmedFilter","flattenCreateElements","isAINode","_e","AI_CATEGORY_AGENTS","groupItemsInSections","sections","sortAlphabetically","filteredSections","section","itemsBySection","items2","s","mapNewSections","newSections","children","nonAINodes","AINodes","nonAINodesBySection","nonAINodesSections","AINodesBySection","AINodesSections","sortBy","i18n","getAiNodesBySubcategory","AIView","_nodes","useI18n","nodeTypesStore","useNodeTypesStore","templatesStore","useTemplatesStore","chainNodes","AI_CATEGORY_CHAINS","agentNodes","AI_NODE_CREATOR_VIEW","AI_OTHERS_NODE_CREATOR_VIEW","AINodesView","getAISubcategoryProperties","nodeConnectionType","AI_CATEGORY_DOCUMENT_LOADERS","NodeConnectionType","AI_CATEGORY_LANGUAGE_MODELS","AI_CATEGORY_MEMORY","AI_CATEGORY_OUTPUTPARSER","AI_CATEGORY_RETRIEVERS","AI_CATEGORY_TEXT_SPLITTERS","AI_CATEGORY_TOOLS","AI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE","AI_CODE_TOOL_LANGCHAIN_NODE_TYPE","AI_CATEGORY_EMBEDDING","AI_CATEGORY_VECTOR_STORES","AI_UNCATEGORIZED_CATEGORY","TriggerView","TRIGGER_NODE_CREATOR_VIEW","MANUAL_TRIGGER_NODE_TYPE","WEBHOOK_NODE_TYPE","EMAIL_IMAP_NODE_TYPE","SCHEDULE_TRIGGER_NODE_TYPE","FORM_TRIGGER_NODE_TYPE","EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE","MANUAL_CHAT_TRIGGER_NODE_TYPE","OTHER_TRIGGER_NODES_SUBCATEGORY","RegularView","view","REGULAR_NODE_CREATOR_VIEW","RSS_READ_NODE_TYPE","EMAIL_SEND_NODE_TYPE","TRANSFORM_DATA_SUBCATEGORY","SET_NODE_TYPE","CODE_NODE_TYPE","DATETIME_NODE_TYPE","FILTER_NODE_TYPE","REMOVE_DUPLICATES_NODE_TYPE","SPLIT_OUT_NODE_TYPE","LIMIT_NODE_TYPE","SUMMARIZE_NODE_TYPE","AGGREGATE_NODE_TYPE","MERGE_NODE_TYPE","HTML_NODE_TYPE","MARKDOWN_NODE_TYPE","XML_NODE_TYPE","CRYPTO_NODE_TYPE","EXTRACT_FROM_FILE_NODE_TYPE","CONVERT_TO_FILE_NODE_TYPE","COMPRESSION_NODE_TYPE","EDIT_IMAGE_NODE_TYPE","FLOWS_CONTROL_SUBCATEGORY","IF_NODE_TYPE","SPLIT_IN_BATCHES_NODE_TYPE","HELPERS_SUBCATEGORY","HTTP_REQUEST_NODE_TYPE","KEYBOARD_ID_ATTR","WATCHED_KEYS","useKeyboardNavigation","defineStore","selectableItems","ref","activeItemId","keysHooks","getItemType","element","getElementId","refreshSelectableItems","resolve","cleanupSelectableItems","el","executeKeyHooks","keyboardKey","activeItem","hook","onKeyDown","e","pressedKey","activeItemIndex","isArrowDown","isArrowUp","nextItemIndex","setActiveItem","previousIndex","setActiveItemId","id","itemId","setActiveItemIndex","index","attachKeydownEvent","detachKeydownEvent","registerKeyHook","name","getActiveItemIndex","useViewStacks","nodeCreatorStore","useNodeCreatorStore","viewStacks","activeStackItems","computed","stack","getLastActiveStack","extendItemsWithUUID","searchBaseItems","searchBase","canvasHasAINodes","useCanvasStore","filteredNodes","isAiRootView","filterOutAiNodes","searchResults","groupedNodes","groupIfAiNodes","activeViewStack","flatBaselineItems","activeViewStackMode","globalSearchItemsDiff","allNodes","globalSearchResult","sectionItem","child","filteredItem","itemsBySubcategory","aiNodes","sectionsMap","currentItems","isSubnodesSection","_f","AI_CATEGORY_ROOT_NODES","nonAiNodes","difference","nonAiTriggerNodes","nonAiRegularNodes","sectionKey","nodesKeys","gotoCompatibleConnectionView","connectionType","isOutput","nodesByConnectionType","relatedAIView","nextTick","pushViewStack","AI_CODE_NODE_TYPE","displayNode","setStackBaselineItems","stackItems","itemsInSubcategory","matchedNodes","updateCurrentViewStack","uuid","newStackUuid","popViewStack","currentStack","matchedIndex","typedKey","resetViewStacks","STORES","workflowsStore","useWorkflowsStore","ndvStore","useNDVStore","uiStore","useUIStore","externalHooks","useExternalHooks","telemetry","useTelemetry","selectedView","mergedNodes","actions","showScrim","openSource","allNodeCreatorNodes","setMergeNodes","setActions","setShowScrim","isVisible","setSelectedView","setOpenSource","openNodeCreator","source","createNodeActive","nodeCreatorView","mode","trackNodesPanelActiveChanged","workflowId","openSelectiveNodeCreator","creatorView","nodeName","nodeData","insertNodeAfterSelected","NODE_CREATOR_OPEN_SOURCES","info","sourceNode","nodeConnectionTypes","getNodeCreatorFilter","outputType","workflow","workflowNode","nodeType","filterFound","NodeHelpers.getNodeInputs","input"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nodeCreator.store-FIsc3SCx.js","sources":["../../src/utils/sortUtils.ts","../../src/components/Node/NodeCreator/utils.ts","../../src/components/Node/NodeCreator/viewsData.ts","../../src/components/Node/NodeCreator/composables/useKeyboardNavigation.ts","../../src/components/Node/NodeCreator/composables/useViewStacks.ts","../../src/stores/nodeCreator.store.ts"],"sourcesContent":["/*\n\tConstants and utility functions used for searching for node types in node creator component\n*/\n\n// based on https://github.com/forrestthewoods/lib_fts/blob/master/code/fts_fuzzy_match.js\n\nconst SEQUENTIAL_BONUS = 60; // bonus for adjacent matches\nconst SEPARATOR_BONUS = 30; // bonus if match occurs after a separator\nconst CAMEL_BONUS = 30; // bonus if match is uppercase and prev is lower\nconst FIRST_LETTER_BONUS = 15; // bonus if the first letter is matched\n\nconst LEADING_LETTER_PENALTY = -20; // penalty applied for every letter in str before the first match\nconst MAX_LEADING_LETTER_PENALTY = -200; // maximum penalty for leading letters\nconst UNMATCHED_LETTER_PENALTY = -5;\n\n/**\n * Returns true if each character in pattern is found sequentially within target\n * @param {*} pattern string\n * @param {*} target string\n */\nfunction fuzzyMatchSimple(pattern: string, target: string): boolean {\n\tlet patternIdx = 0;\n\tlet strIdx = 0;\n\n\twhile (patternIdx < pattern.length && strIdx < target.length) {\n\t\tconst patternChar = pattern.charAt(patternIdx).toLowerCase();\n\t\tconst targetChar = target.charAt(strIdx).toLowerCase();\n\t\tif (patternChar === targetChar) {\n\t\t\tpatternIdx++;\n\t\t}\n\t\t++strIdx;\n\t}\n\n\treturn pattern.length !== 0 && target.length !== 0 && patternIdx === pattern.length;\n}\n\n/**\n * Does a fuzzy search to find pattern inside a string.\n * @param {*} pattern string pattern to search for\n * @param {*} target string string which is being searched\n * @returns [boolean, number] a boolean which tells if pattern was\n * found or not and a search score\n */\nfunction fuzzyMatch(pattern: string, target: string): { matched: boolean; outScore: number } {\n\tconst recursionCount = 0;\n\tconst recursionLimit = 5;\n\tconst matches: number[] = [];\n\tconst maxMatches = 256;\n\n\treturn fuzzyMatchRecursive(\n\t\tpattern,\n\t\ttarget,\n\t\t0 /* patternCurIndex */,\n\t\t0 /* strCurrIndex */,\n\t\tnull /* srcMatces */,\n\t\tmatches,\n\t\tmaxMatches,\n\t\t0 /* nextMatch */,\n\t\trecursionCount,\n\t\trecursionLimit,\n\t);\n}\n\nfunction fuzzyMatchRecursive(\n\tpattern: string,\n\ttarget: string,\n\tpatternCurIndex: number,\n\ttargetCurrIndex: number,\n\ttargetMatches: null | number[],\n\tmatches: number[],\n\tmaxMatches: number,\n\tnextMatch: number,\n\trecursionCount: number,\n\trecursionLimit: number,\n): { matched: boolean; outScore: number } {\n\tlet outScore = 0;\n\n\t// Return if recursion limit is reached.\n\tif (++recursionCount >= recursionLimit) {\n\t\treturn { matched: false, outScore };\n\t}\n\n\t// Return if we reached ends of strings.\n\tif (patternCurIndex === pattern.length || targetCurrIndex === target.length) {\n\t\treturn { matched: false, outScore };\n\t}\n\n\t// Recursion params\n\tlet recursiveMatch = false;\n\tlet bestRecursiveMatches: number[] = [];\n\tlet bestRecursiveScore = 0;\n\n\t// Loop through pattern and str looking for a match.\n\tlet firstMatch = true;\n\twhile (patternCurIndex < pattern.length && targetCurrIndex < target.length) {\n\t\t// Match found.\n\t\tif (pattern[patternCurIndex].toLowerCase() === target[targetCurrIndex].toLowerCase()) {\n\t\t\tif (nextMatch >= maxMatches) {\n\t\t\t\treturn { matched: false, outScore };\n\t\t\t}\n\n\t\t\tif (firstMatch && targetMatches) {\n\t\t\t\tmatches = [...targetMatches];\n\t\t\t\tfirstMatch = false;\n\t\t\t}\n\n\t\t\tconst recursiveMatches: number[] = [];\n\t\t\tconst recursiveResult = fuzzyMatchRecursive(\n\t\t\t\tpattern,\n\t\t\t\ttarget,\n\t\t\t\tpatternCurIndex,\n\t\t\t\ttargetCurrIndex + 1,\n\t\t\t\tmatches,\n\t\t\t\trecursiveMatches,\n\t\t\t\tmaxMatches,\n\t\t\t\tnextMatch,\n\t\t\t\trecursionCount,\n\t\t\t\trecursionLimit,\n\t\t\t);\n\n\t\t\tconst recursiveScore = recursiveResult.outScore;\n\t\t\tif (recursiveResult.matched) {\n\t\t\t\t// Pick best recursive score.\n\t\t\t\tif (!recursiveMatch || recursiveScore > bestRecursiveScore) {\n\t\t\t\t\tbestRecursiveMatches = [...recursiveMatches];\n\t\t\t\t\tbestRecursiveScore = recursiveScore;\n\t\t\t\t}\n\t\t\t\trecursiveMatch = true;\n\t\t\t}\n\n\t\t\tmatches[nextMatch++] = targetCurrIndex;\n\t\t\t++patternCurIndex;\n\t\t}\n\t\t++targetCurrIndex;\n\t}\n\n\tconst matched = patternCurIndex === pattern.length;\n\n\tif (matched) {\n\t\toutScore = 100;\n\n\t\t// Apply leading letter penalty\n\t\tlet penalty = LEADING_LETTER_PENALTY * matches[0];\n\t\tpenalty = penalty < MAX_LEADING_LETTER_PENALTY ? MAX_LEADING_LETTER_PENALTY : penalty;\n\t\toutScore += penalty;\n\n\t\t//Apply unmatched penalty\n\t\tconst unmatched = target.length - nextMatch;\n\t\toutScore += UNMATCHED_LETTER_PENALTY * unmatched;\n\n\t\t// Apply ordering bonuses\n\t\tfor (let i = 0; i < nextMatch; i++) {\n\t\t\tconst currIdx = matches[i];\n\n\t\t\tif (i > 0) {\n\t\t\t\tconst prevIdx = matches[i - 1];\n\t\t\t\tif (currIdx === prevIdx + 1) {\n\t\t\t\t\toutScore += SEQUENTIAL_BONUS;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check for bonuses based on neighbor character value.\n\t\t\tif (currIdx > 0) {\n\t\t\t\t// Camel case\n\t\t\t\tconst neighbor = target[currIdx - 1];\n\t\t\t\tconst curr = target[currIdx];\n\t\t\t\tif (neighbor !== neighbor.toUpperCase() && curr !== curr.toLowerCase()) {\n\t\t\t\t\toutScore += CAMEL_BONUS;\n\t\t\t\t}\n\t\t\t\tconst isNeighbourSeparator = neighbor === '_' || neighbor === ' ';\n\t\t\t\tif (isNeighbourSeparator) {\n\t\t\t\t\toutScore += SEPARATOR_BONUS;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// First letter\n\t\t\t\toutScore += FIRST_LETTER_BONUS;\n\t\t\t}\n\t\t}\n\n\t\t// Return best result\n\t\tif (recursiveMatch && (!matched || bestRecursiveScore > outScore)) {\n\t\t\t// Recursive score is better than \"this\"\n\t\t\tmatches = [...bestRecursiveMatches];\n\t\t\toutScore = bestRecursiveScore;\n\t\t\treturn { matched: true, outScore };\n\t\t} else if (matched) {\n\t\t\t// \"this\" score is better than recursive\n\t\t\treturn { matched: true, outScore };\n\t\t} else {\n\t\t\treturn { matched: false, outScore };\n\t\t}\n\t}\n\treturn { matched: false, outScore };\n}\n\n// prop = 'key'\n// prop = 'key1.key2'\n// prop = ['key1', 'key2']\nfunction getValue<T extends object>(obj: T, prop: string): unknown {\n\tif (obj.hasOwnProperty(prop)) {\n\t\treturn obj[prop as keyof T];\n\t}\n\n\tconst segments = prop.split('.');\n\n\tlet result = obj;\n\tlet i = 0;\n\twhile (result && i < segments.length) {\n\t\tconst key = segments[i] as keyof T;\n\t\tresult = result[key] as T;\n\t\ti++;\n\t}\n\treturn result;\n}\n\nexport function sublimeSearch<T extends object>(\n\tfilter: string,\n\tdata: Readonly<T[]>,\n\tkeys: Array<{ key: string; weight: number }>,\n): Array<{ score: number; item: T }> {\n\tconst results = data.reduce((accu: Array<{ score: number; item: T }>, item: T) => {\n\t\tlet values: Array<{ value: string; weight: number }> = [];\n\t\tkeys.forEach(({ key, weight }) => {\n\t\t\tconst value = getValue(item, key);\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalues = values.concat(value.map((v) => ({ value: v, weight })));\n\t\t\t} else if (typeof value === 'string') {\n\t\t\t\tvalues.push({\n\t\t\t\t\tvalue,\n\t\t\t\t\tweight,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// for each item, check every key and get maximum score\n\t\tconst itemMatch = values.reduce(\n\t\t\t(\n\t\t\t\taccu: null | { matched: boolean; outScore: number },\n\t\t\t\t{ value, weight }: { value: string; weight: number },\n\t\t\t) => {\n\t\t\t\tif (!fuzzyMatchSimple(filter, value)) {\n\t\t\t\t\treturn accu;\n\t\t\t\t}\n\n\t\t\t\tconst match = fuzzyMatch(filter, value);\n\t\t\t\tmatch.outScore *= weight;\n\n\t\t\t\tconst { matched, outScore } = match;\n\t\t\t\tif (!accu && matched) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\tif (matched && accu && outScore > accu.outScore) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\treturn accu;\n\t\t\t},\n\t\t\tnull,\n\t\t);\n\n\t\tif (itemMatch) {\n\t\t\taccu.push({\n\t\t\t\tscore: itemMatch.outScore,\n\t\t\t\titem,\n\t\t\t});\n\t\t}\n\n\t\treturn accu;\n\t}, []);\n\n\tresults.sort((a, b) => {\n\t\treturn b.score - a.score;\n\t});\n\n\treturn results;\n}\n","import type {\n\tNodeCreateElement,\n\tActionCreateElement,\n\tSubcategorizedNodeTypes,\n\tSimplifiedNodeType,\n\tINodeCreateElement,\n\tSectionCreateElement,\n} from '@/Interface';\nimport {\n\tAI_CATEGORY_AGENTS,\n\tAI_SUBCATEGORY,\n\tCORE_NODES_CATEGORY,\n\tDEFAULT_SUBCATEGORY,\n} from '@/constants';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { sublimeSearch } from '@/utils/sortUtils';\nimport type { NodeViewItemSection } from './viewsData';\nimport { i18n } from '@/plugins/i18n';\nimport { sortBy } from 'lodash-es';\n\nexport function transformNodeType(\n\tnode: SimplifiedNodeType,\n\tsubcategory?: string,\n\ttype: 'node' | 'action' = 'node',\n): NodeCreateElement | ActionCreateElement {\n\tconst createElement = {\n\t\tuuid: uuidv4(),\n\t\tkey: node.name,\n\t\tsubcategory:\n\t\t\tsubcategory ?? node.codex?.subcategories?.[CORE_NODES_CATEGORY]?.[0] ?? DEFAULT_SUBCATEGORY,\n\t\tproperties: {\n\t\t\t...node,\n\t\t},\n\t\ttype,\n\t};\n\n\treturn type === 'action'\n\t\t? (createElement as ActionCreateElement)\n\t\t: (createElement as NodeCreateElement);\n}\n\nexport function subcategorizeItems(items: SimplifiedNodeType[]) {\n\tconst WHITE_LISTED_SUBCATEGORIES = [CORE_NODES_CATEGORY, AI_SUBCATEGORY];\n\treturn items.reduce((acc: SubcategorizedNodeTypes, item) => {\n\t\t// Only some subcategories are allowed\n\t\tlet subcategories: string[] = [DEFAULT_SUBCATEGORY];\n\n\t\tWHITE_LISTED_SUBCATEGORIES.forEach((category) => {\n\t\t\tif (item.codex?.categories?.includes(category)) {\n\t\t\t\tsubcategories = item.codex?.subcategories?.[category] ?? [];\n\t\t\t}\n\t\t});\n\n\t\tsubcategories.forEach((subcategory: string) => {\n\t\t\tif (!acc[subcategory]) {\n\t\t\t\tacc[subcategory] = [];\n\t\t\t}\n\t\t\tacc[subcategory].push(transformNodeType(item, subcategory));\n\t\t});\n\n\t\treturn acc;\n\t}, {});\n}\n\nexport function sortNodeCreateElements(nodes: INodeCreateElement[]) {\n\treturn nodes.sort((a, b) => {\n\t\tif (a.type !== 'node' || b.type !== 'node') return 0;\n\t\tconst displayNameA = a.properties?.displayName?.toLowerCase() || a.key;\n\t\tconst displayNameB = b.properties?.displayName?.toLowerCase() || b.key;\n\n\t\treturn displayNameA.localeCompare(displayNameB, undefined, { sensitivity: 'base' });\n\t});\n}\n\nexport function searchNodes(searchFilter: string, items: INodeCreateElement[]) {\n\t// In order to support the old search we need to remove the 'trigger' part\n\tconst trimmedFilter = searchFilter.toLowerCase().replace('trigger', '').trimEnd();\n\n\tconst result = (\n\t\tsublimeSearch<INodeCreateElement>(trimmedFilter, items, [\n\t\t\t{ key: 'properties.displayName', weight: 1.3 },\n\t\t\t{ key: 'properties.codex.alias', weight: 1 },\n\t\t]) || []\n\t).map(({ item }) => item);\n\n\treturn result;\n}\n\nexport function flattenCreateElements(items: INodeCreateElement[]): INodeCreateElement[] {\n\treturn items.map((item) => (item.type === 'section' ? item.children : item)).flat();\n}\nexport function isAINode(node: INodeCreateElement) {\n\tconst isNode = node.type === 'node';\n\tif (!isNode) return false;\n\n\tif (node.properties.codex?.categories?.includes(AI_SUBCATEGORY)) {\n\t\tconst isAgentSubcategory =\n\t\t\tnode.properties.codex?.subcategories?.[AI_SUBCATEGORY]?.includes(AI_CATEGORY_AGENTS);\n\n\t\treturn !isAgentSubcategory;\n\t}\n\n\treturn false;\n}\nexport function groupItemsInSections(\n\titems: INodeCreateElement[],\n\tsections: string[] | NodeViewItemSection[],\n\tsortAlphabetically = true,\n): INodeCreateElement[] {\n\tconst filteredSections = sections.filter(\n\t\t(section): section is NodeViewItemSection => typeof section === 'object',\n\t);\n\n\tconst itemsBySection = (items2: INodeCreateElement[]) =>\n\t\titems2.reduce((acc: Record<string, INodeCreateElement[]>, item) => {\n\t\t\tconst section = filteredSections.find((s) => s.items.includes(item.key));\n\n\t\t\tconst key = section?.key ?? 'other';\n\t\t\tif (key) {\n\t\t\t\tacc[key] = [...(acc[key] ?? []), item];\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {});\n\n\tconst mapNewSections = (\n\t\tnewSections: NodeViewItemSection[],\n\t\tchildren: Record<string, INodeCreateElement[]>,\n\t) =>\n\t\tnewSections.map(\n\t\t\t(section): SectionCreateElement => ({\n\t\t\t\ttype: 'section',\n\t\t\t\tkey: section.key,\n\t\t\t\ttitle: section.title,\n\t\t\t\tchildren: sortAlphabetically\n\t\t\t\t\t? sortNodeCreateElements(children[section.key] ?? [])\n\t\t\t\t\t: children[section.key] ?? [],\n\t\t\t}),\n\t\t);\n\n\tconst nonAINodes = items.filter((item) => !isAINode(item));\n\tconst AINodes = items.filter((item) => isAINode(item));\n\n\tconst nonAINodesBySection = itemsBySection(nonAINodes);\n\tconst nonAINodesSections = mapNewSections(filteredSections, nonAINodesBySection);\n\n\tconst AINodesBySection = itemsBySection(AINodes);\n\n\tconst AINodesSections = mapNewSections(sortBy(filteredSections, ['title']), AINodesBySection);\n\n\tconst result = [...nonAINodesSections, ...AINodesSections]\n\t\t.concat({\n\t\t\ttype: 'section',\n\t\t\tkey: 'other',\n\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.other'),\n\t\t\tchildren: sortNodeCreateElements(nonAINodesBySection.other ?? []),\n\t\t})\n\t\t.filter((section) => section.type !== 'section' || section.children.length > 0);\n\n\tif (result.length <= 1) {\n\t\treturn items;\n\t}\n\n\treturn result;\n}\n","import {\n\tCORE_NODES_CATEGORY,\n\tWEBHOOK_NODE_TYPE,\n\tOTHER_TRIGGER_NODES_SUBCATEGORY,\n\tEXECUTE_WORKFLOW_TRIGGER_NODE_TYPE,\n\tFORM_TRIGGER_NODE_TYPE,\n\tMANUAL_TRIGGER_NODE_TYPE,\n\tMANUAL_CHAT_TRIGGER_NODE_TYPE,\n\tSCHEDULE_TRIGGER_NODE_TYPE,\n\tREGULAR_NODE_CREATOR_VIEW,\n\tTRANSFORM_DATA_SUBCATEGORY,\n\tFLOWS_CONTROL_SUBCATEGORY,\n\tTRIGGER_NODE_CREATOR_VIEW,\n\tEMAIL_IMAP_NODE_TYPE,\n\tDEFAULT_SUBCATEGORY,\n\tAI_NODE_CREATOR_VIEW,\n\tAI_CATEGORY_AGENTS,\n\tAI_CATEGORY_CHAINS,\n\tAI_CATEGORY_DOCUMENT_LOADERS,\n\tAI_CATEGORY_LANGUAGE_MODELS,\n\tAI_CATEGORY_MEMORY,\n\tAI_CATEGORY_OUTPUTPARSER,\n\tAI_CATEGORY_RETRIEVERS,\n\tAI_CATEGORY_TEXT_SPLITTERS,\n\tAI_CATEGORY_TOOLS,\n\tAI_CATEGORY_VECTOR_STORES,\n\tAI_SUBCATEGORY,\n\tAI_CATEGORY_EMBEDDING,\n\tAI_OTHERS_NODE_CREATOR_VIEW,\n\tAI_UNCATEGORIZED_CATEGORY,\n\tCONVERT_TO_FILE_NODE_TYPE,\n\tEXTRACT_FROM_FILE_NODE_TYPE,\n\tSET_NODE_TYPE,\n\tCODE_NODE_TYPE,\n\tDATETIME_NODE_TYPE,\n\tFILTER_NODE_TYPE,\n\tREMOVE_DUPLICATES_NODE_TYPE,\n\tSPLIT_OUT_NODE_TYPE,\n\tLIMIT_NODE_TYPE,\n\tSUMMARIZE_NODE_TYPE,\n\tAGGREGATE_NODE_TYPE,\n\tMERGE_NODE_TYPE,\n\tHTML_NODE_TYPE,\n\tMARKDOWN_NODE_TYPE,\n\tXML_NODE_TYPE,\n\tCRYPTO_NODE_TYPE,\n\tIF_NODE_TYPE,\n\tSPLIT_IN_BATCHES_NODE_TYPE,\n\tHTTP_REQUEST_NODE_TYPE,\n\tHELPERS_SUBCATEGORY,\n\tRSS_READ_NODE_TYPE,\n\tEMAIL_SEND_NODE_TYPE,\n\tEDIT_IMAGE_NODE_TYPE,\n\tCOMPRESSION_NODE_TYPE,\n\tAI_CODE_TOOL_LANGCHAIN_NODE_TYPE,\n\tAI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE,\n} from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport type { SimplifiedNodeType } from '@/Interface';\nimport type { INodeTypeDescription, Themed } from 'n8n-workflow';\nimport { NodeConnectionType } from 'n8n-workflow';\nimport { useTemplatesStore } from '@/stores/templates.store';\n\nexport interface NodeViewItemSection {\n\tkey: string;\n\ttitle: string;\n\titems: string[];\n}\n\nexport interface NodeViewItem {\n\tkey: string;\n\ttype: string;\n\tproperties: {\n\t\tname?: string;\n\t\ttitle?: string;\n\t\ticon?: Themed<string>;\n\t\ticonProps?: {\n\t\t\tcolor?: string;\n\t\t};\n\t\turl?: string;\n\t\tconnectionType?: NodeConnectionType;\n\t\tpanelClass?: string;\n\t\tgroup?: string[];\n\t\tsections?: NodeViewItemSection[];\n\t\tdescription?: string;\n\t\tdisplayName?: string;\n\t\ttag?: {\n\t\t\ttype: string;\n\t\t\ttext: string;\n\t\t};\n\t\tforceIncludeNodes?: string[];\n\t\ticonData?: {\n\t\t\ttype: string;\n\t\t\ticon?: string;\n\t\t\tfileBuffer?: string;\n\t\t};\n\t};\n\tcategory?: string | string[];\n}\n\ninterface NodeView {\n\tvalue: string;\n\ttitle: string;\n\tinfo?: string;\n\tsubtitle?: string;\n\titems: NodeViewItem[];\n}\n\nfunction getAiNodesBySubcategory(nodes: INodeTypeDescription[], subcategory: string) {\n\treturn nodes\n\t\t.filter(\n\t\t\t(node) => !node.hidden && node.codex?.subcategories?.[AI_SUBCATEGORY]?.includes(subcategory),\n\t\t)\n\t\t.map((node) => ({\n\t\t\tkey: node.name,\n\t\t\ttype: 'node',\n\t\t\tproperties: {\n\t\t\t\tgroup: [],\n\t\t\t\tname: node.name,\n\t\t\t\tdisplayName: node.displayName,\n\t\t\t\ttitle: node.displayName,\n\t\t\t\tdescription: node.description,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\ticon: node.icon!,\n\t\t\t\ticonUrl: node.iconUrl,\n\t\t\t},\n\t\t}))\n\t\t.sort((a, b) => a.properties.displayName.localeCompare(b.properties.displayName));\n}\n\nexport function AIView(_nodes: SimplifiedNodeType[]): NodeView {\n\tconst i18n = useI18n();\n\tconst nodeTypesStore = useNodeTypesStore();\n\tconst templatesStore = useTemplatesStore();\n\n\tconst chainNodes = getAiNodesBySubcategory(nodeTypesStore.allLatestNodeTypes, AI_CATEGORY_CHAINS);\n\tconst agentNodes = getAiNodesBySubcategory(nodeTypesStore.allLatestNodeTypes, AI_CATEGORY_AGENTS);\n\n\treturn {\n\t\tvalue: AI_NODE_CREATOR_VIEW,\n\t\ttitle: i18n.baseText('nodeCreator.aiPanel.aiNodes'),\n\t\tsubtitle: i18n.baseText('nodeCreator.aiPanel.selectAiNode'),\n\t\titems: [\n\t\t\t{\n\t\t\t\tkey: 'ai_templates_root',\n\t\t\t\ttype: 'link',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: i18n.baseText('nodeCreator.aiPanel.linkItem.title'),\n\t\t\t\t\ticon: 'box-open',\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.aiPanel.linkItem.description'),\n\t\t\t\t\tname: 'ai_templates_root',\n\t\t\t\t\turl: templatesStore.getWebsiteCategoryURL(undefined, 'AdvancedAI'),\n\t\t\t\t\ttag: {\n\t\t\t\t\t\ttype: 'info',\n\t\t\t\t\t\ttext: i18n.baseText('nodeCreator.triggerHelperPanel.manualTriggerTag'),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t...agentNodes,\n\t\t\t...chainNodes,\n\t\t\t{\n\t\t\t\tkey: AI_OTHERS_NODE_CREATOR_VIEW,\n\t\t\t\ttype: 'view',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: i18n.baseText('nodeCreator.aiPanel.aiOtherNodes'),\n\t\t\t\t\ticon: 'robot',\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.aiPanel.aiOtherNodesDescription'),\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n}\n\nexport function AINodesView(_nodes: SimplifiedNodeType[]): NodeView {\n\tconst i18n = useI18n();\n\n\tfunction getAISubcategoryProperties(nodeConnectionType: NodeConnectionType) {\n\t\treturn {\n\t\t\tconnectionType: nodeConnectionType,\n\t\t\ticonProps: {\n\t\t\t\tcolor: `var(--node-type-${nodeConnectionType}-color)`,\n\t\t\t},\n\t\t\tpanelClass: `nodes-list-panel-${nodeConnectionType}`,\n\t\t};\n\t}\n\n\treturn {\n\t\tvalue: AI_OTHERS_NODE_CREATOR_VIEW,\n\t\ttitle: i18n.baseText('nodeCreator.aiPanel.aiOtherNodes'),\n\t\tsubtitle: i18n.baseText('nodeCreator.aiPanel.selectAiNode'),\n\t\titems: [\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_DOCUMENT_LOADERS,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_DOCUMENT_LOADERS,\n\t\t\t\t\ticon: 'file-import',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiDocument),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_LANGUAGE_MODELS,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_LANGUAGE_MODELS,\n\t\t\t\t\ticon: 'language',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiLanguageModel),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_MEMORY,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_MEMORY,\n\t\t\t\t\ticon: 'brain',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiMemory),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_OUTPUTPARSER,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_OUTPUTPARSER,\n\t\t\t\t\ticon: 'list',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiOutputParser),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_RETRIEVERS,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_RETRIEVERS,\n\t\t\t\t\ticon: 'search',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiRetriever),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_TEXT_SPLITTERS,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_TEXT_SPLITTERS,\n\t\t\t\t\ticon: 'grip-lines-vertical',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiTextSplitter),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: AI_CATEGORY_TOOLS,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_TOOLS,\n\t\t\t\t\ticon: 'tools',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiTool),\n\t\t\t\t\tsections: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'popular',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.popular'),\n\t\t\t\t\t\t\titems: [AI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE, AI_CODE_TOOL_LANGCHAIN_NODE_TYPE],\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\t{\n\t\t\t\tkey: AI_CATEGORY_EMBEDDING,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_EMBEDDING,\n\t\t\t\t\ticon: 'vector-square',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiEmbedding),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_CATEGORY_VECTOR_STORES,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_CATEGORY_VECTOR_STORES,\n\t\t\t\t\ticon: 'project-diagram',\n\t\t\t\t\t...getAISubcategoryProperties(NodeConnectionType.AiVectorStore),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: AI_UNCATEGORIZED_CATEGORY,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: AI_UNCATEGORIZED_CATEGORY,\n\t\t\t\t\ticon: 'code',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n}\n\nexport function TriggerView() {\n\tconst i18n = useI18n();\n\n\tconst view: NodeView = {\n\t\tvalue: TRIGGER_NODE_CREATOR_VIEW,\n\t\ttitle: i18n.baseText('nodeCreator.triggerHelperPanel.selectATrigger'),\n\t\tsubtitle: i18n.baseText('nodeCreator.triggerHelperPanel.selectATriggerDescription'),\n\t\titems: [\n\t\t\t{\n\t\t\t\tkey: MANUAL_TRIGGER_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: MANUAL_TRIGGER_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.manualTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.manualTriggerDescription'),\n\t\t\t\t\ticon: 'fa:mouse-pointer',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: DEFAULT_SUBCATEGORY,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\tforceIncludeNodes: [WEBHOOK_NODE_TYPE, EMAIL_IMAP_NODE_TYPE],\n\t\t\t\t\ttitle: 'App Trigger Nodes',\n\t\t\t\t\ticon: 'satellite-dish',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: SCHEDULE_TRIGGER_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: SCHEDULE_TRIGGER_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.scheduleTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.scheduleTriggerDescription'),\n\t\t\t\t\ticon: 'fa:clock',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: WEBHOOK_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: WEBHOOK_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.webhookTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.webhookTriggerDescription'),\n\t\t\t\t\ticonData: {\n\t\t\t\t\t\ttype: 'file',\n\t\t\t\t\t\ticon: 'webhook',\n\t\t\t\t\t\tfileBuffer: '/static/webhook-icon.svg',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: FORM_TRIGGER_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: FORM_TRIGGER_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.formTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.formTriggerDescription'),\n\t\t\t\t\ticonData: {\n\t\t\t\t\t\ttype: 'file',\n\t\t\t\t\t\ticon: 'form',\n\t\t\t\t\t\tfileBuffer: '/static/form-grey.svg',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.workflowTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.workflowTriggerDescription'),\n\t\t\t\t\ticon: 'fa:sign-out-alt',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: MANUAL_CHAT_TRIGGER_NODE_TYPE,\n\t\t\t\ttype: 'node',\n\t\t\t\tcategory: [CORE_NODES_CATEGORY],\n\t\t\t\tproperties: {\n\t\t\t\t\tgroup: [],\n\t\t\t\t\tname: MANUAL_CHAT_TRIGGER_NODE_TYPE,\n\t\t\t\t\tdisplayName: i18n.baseText('nodeCreator.triggerHelperPanel.manualChatTriggerDisplayName'),\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.manualChatTriggerDescription'),\n\t\t\t\t\ticon: 'fa:comments',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: OTHER_TRIGGER_NODES_SUBCATEGORY,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: OTHER_TRIGGER_NODES_SUBCATEGORY,\n\t\t\t\t\ticon: 'folder-open',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n\n\treturn view;\n}\n\nexport function RegularView(nodes: SimplifiedNodeType[]) {\n\tconst i18n = useI18n();\n\n\tconst view: NodeView = {\n\t\tvalue: REGULAR_NODE_CREATOR_VIEW,\n\t\ttitle: i18n.baseText('nodeCreator.triggerHelperPanel.whatHappensNext'),\n\t\titems: [\n\t\t\t{\n\t\t\t\tkey: DEFAULT_SUBCATEGORY,\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: 'App Regular Nodes',\n\t\t\t\t\ticon: 'globe',\n\t\t\t\t\tforceIncludeNodes: [RSS_READ_NODE_TYPE, EMAIL_SEND_NODE_TYPE],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: TRANSFORM_DATA_SUBCATEGORY,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: TRANSFORM_DATA_SUBCATEGORY,\n\t\t\t\t\ticon: 'pen',\n\t\t\t\t\tsections: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'popular',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.popular'),\n\t\t\t\t\t\t\titems: [SET_NODE_TYPE, CODE_NODE_TYPE, DATETIME_NODE_TYPE],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'addOrRemove',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.transform.addOrRemove'),\n\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\tFILTER_NODE_TYPE,\n\t\t\t\t\t\t\t\tREMOVE_DUPLICATES_NODE_TYPE,\n\t\t\t\t\t\t\t\tSPLIT_OUT_NODE_TYPE,\n\t\t\t\t\t\t\t\tLIMIT_NODE_TYPE,\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\tkey: 'combine',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.transform.combine'),\n\t\t\t\t\t\t\titems: [SUMMARIZE_NODE_TYPE, AGGREGATE_NODE_TYPE, MERGE_NODE_TYPE],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'convert',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.transform.convert'),\n\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\tHTML_NODE_TYPE,\n\t\t\t\t\t\t\t\tMARKDOWN_NODE_TYPE,\n\t\t\t\t\t\t\t\tXML_NODE_TYPE,\n\t\t\t\t\t\t\t\tCRYPTO_NODE_TYPE,\n\t\t\t\t\t\t\t\tEXTRACT_FROM_FILE_NODE_TYPE,\n\t\t\t\t\t\t\t\tCONVERT_TO_FILE_NODE_TYPE,\n\t\t\t\t\t\t\t\tCOMPRESSION_NODE_TYPE,\n\t\t\t\t\t\t\t\tEDIT_IMAGE_NODE_TYPE,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: FLOWS_CONTROL_SUBCATEGORY,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: FLOWS_CONTROL_SUBCATEGORY,\n\t\t\t\t\ticon: 'code-branch',\n\t\t\t\t\tsections: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'popular',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.popular'),\n\t\t\t\t\t\t\titems: [FILTER_NODE_TYPE, IF_NODE_TYPE, SPLIT_IN_BATCHES_NODE_TYPE, MERGE_NODE_TYPE],\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\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: HELPERS_SUBCATEGORY,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: HELPERS_SUBCATEGORY,\n\t\t\t\t\ticon: 'toolbox',\n\t\t\t\t\tsections: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'popular',\n\t\t\t\t\t\t\ttitle: i18n.baseText('nodeCreator.sectionNames.popular'),\n\t\t\t\t\t\t\titems: [HTTP_REQUEST_NODE_TYPE, WEBHOOK_NODE_TYPE, CODE_NODE_TYPE],\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],\n\t};\n\n\tconst hasAINodes = (nodes ?? []).some((node) => node.codex?.categories?.includes(AI_SUBCATEGORY));\n\tif (hasAINodes)\n\t\tview.items.push({\n\t\t\tkey: AI_NODE_CREATOR_VIEW,\n\t\t\ttype: 'view',\n\t\t\tproperties: {\n\t\t\t\ttitle: i18n.baseText('nodeCreator.aiPanel.langchainAiNodes'),\n\t\t\t\ticon: 'robot',\n\t\t\t\tdescription: i18n.baseText('nodeCreator.aiPanel.nodesForAi'),\n\t\t\t\ttag: {\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttext: i18n.baseText('nodeCreator.aiPanel.newTag'),\n\t\t\t\t},\n\t\t\t\tborderless: true,\n\t\t\t},\n\t\t} as NodeViewItem);\n\n\tview.items.push({\n\t\tkey: TRIGGER_NODE_CREATOR_VIEW,\n\t\ttype: 'view',\n\t\tproperties: {\n\t\t\ttitle: i18n.baseText('nodeCreator.triggerHelperPanel.addAnotherTrigger'),\n\t\t\ticon: 'bolt',\n\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.addAnotherTriggerDescription'),\n\t\t},\n\t});\n\n\treturn view;\n}\n","import { ref } from 'vue';\nimport { defineStore } from 'pinia';\n\nexport type KeyboardKey = (typeof WATCHED_KEYS)[number];\ninterface KeyHook {\n\tkeyboardKeys: KeyboardKey[];\n\tcondition?: (type: string, activeItemId: string) => boolean;\n\thandler: (activeItemId: string, keyboardKey: KeyboardKey) => void;\n}\n\nexport const KEYBOARD_ID_ATTR = 'data-keyboard-nav-id';\nexport const WATCHED_KEYS = [\n\t'ArrowUp',\n\t'ArrowDown',\n\t'ArrowLeft',\n\t'ArrowRight',\n\t'Enter',\n\t'Escape',\n\t'Tab',\n];\n\nexport const useKeyboardNavigation = defineStore('nodeCreatorKeyboardNavigation', () => {\n\tconst selectableItems = ref<Array<WeakRef<Element>>>([]);\n\tconst activeItemId = ref<string | null>(null);\n\t// Array of objects that contains key code and handler\n\tconst keysHooks = ref<Record<string, KeyHook>>({});\n\n\tfunction getItemType(element?: Element) {\n\t\treturn element?.getAttribute('data-keyboard-nav-type');\n\t}\n\tfunction getElementId(element?: Element) {\n\t\treturn element?.getAttribute(KEYBOARD_ID_ATTR) || undefined;\n\t}\n\tasync function refreshSelectableItems(): Promise<void> {\n\t\treturn await new Promise((resolve) => {\n\t\t\t// Wait for DOM to update\n\t\t\tcleanupSelectableItems();\n\t\t\tsetTimeout(() => {\n\t\t\t\tselectableItems.value = Array.from(\n\t\t\t\t\tdocument.querySelectorAll('[data-keyboard-nav-type]'),\n\t\t\t\t).map((el) => new WeakRef(el));\n\t\t\t\tresolve();\n\t\t\t}, 0);\n\t\t});\n\t}\n\n\tfunction executeKeyHooks(keyboardKey: KeyboardKey, activeItem: Element) {\n\t\tconst flatHooks = Object.values(keysHooks.value);\n\t\tconst hooks = flatHooks.filter((hook) => hook.keyboardKeys.includes(keyboardKey));\n\n\t\thooks.forEach((hook) => {\n\t\t\tif (!activeItemId.value) return;\n\n\t\t\tconst conditionPassed =\n\t\t\t\thook.condition === undefined ||\n\t\t\t\thook.condition(getItemType(activeItem) || '', activeItemId.value);\n\n\t\t\tif (conditionPassed && activeItemId.value) {\n\t\t\t\thook.handler(activeItemId.value, keyboardKey);\n\t\t\t}\n\t\t});\n\t}\n\n\tasync function onKeyDown(e: KeyboardEvent) {\n\t\tconst pressedKey = e.key;\n\t\tif (!WATCHED_KEYS.includes(pressedKey)) return;\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tawait refreshSelectableItems();\n\t\tconst activeItemIndex = selectableItems.value.findIndex(\n\t\t\t(item) => getElementId(item?.deref()) === activeItemId.value,\n\t\t);\n\t\tconst activeItem = selectableItems.value[activeItemIndex]?.deref();\n\n\t\tconst isArrowDown = pressedKey === 'ArrowDown';\n\t\tconst isArrowUp = pressedKey === 'ArrowUp';\n\n\t\tif (!activeItem) return;\n\n\t\tif (isArrowDown) {\n\t\t\tconst nextItemIndex =\n\t\t\t\tactiveItemIndex < selectableItems.value.length - 1 ? activeItemIndex + 1 : 0;\n\n\t\t\tsetActiveItem(selectableItems.value[nextItemIndex]?.deref());\n\t\t}\n\t\tif (isArrowUp) {\n\t\t\tconst previousIndex =\n\t\t\t\tactiveItemIndex > 0 ? activeItemIndex - 1 : selectableItems.value.length - 1;\n\n\t\t\tsetActiveItem(selectableItems.value[previousIndex]?.deref());\n\t\t}\n\t\texecuteKeyHooks(pressedKey, activeItem);\n\t}\n\n\tfunction setActiveItemId(id: string) {\n\t\tactiveItemId.value = id;\n\t}\n\n\tfunction setActiveItem(item?: Element) {\n\t\tconst itemId = getElementId(item);\n\t\tif (!itemId) return;\n\n\t\tsetActiveItemId(itemId);\n\t\tif (item?.scrollIntoView) {\n\t\t\titem?.scrollIntoView({ block: 'center' });\n\t\t}\n\t}\n\n\tasync function setActiveItemIndex(index: number) {\n\t\tawait refreshSelectableItems();\n\n\t\tsetActiveItem(selectableItems.value[index]?.deref());\n\t}\n\n\tfunction attachKeydownEvent() {\n\t\tdocument.addEventListener('keydown', onKeyDown, { capture: true });\n\t}\n\n\tfunction detachKeydownEvent() {\n\t\tcleanupSelectableItems();\n\t\tdocument.removeEventListener('keydown', onKeyDown, { capture: true });\n\t}\n\n\tfunction registerKeyHook(name: string, hook: KeyHook) {\n\t\thook.keyboardKeys.forEach((keyboardKey) => {\n\t\t\tif (WATCHED_KEYS.includes(keyboardKey)) {\n\t\t\t\tkeysHooks.value = { ...keysHooks.value, [name]: hook };\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Key ${keyboardKey} is not supported`);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction cleanupSelectableItems() {\n\t\t// Cleanup to make sure DOM elements get garbage collected\n\t\tselectableItems.value = [];\n\t}\n\n\tfunction getActiveItemIndex() {\n\t\treturn selectableItems.value.findIndex(\n\t\t\t(item) => getElementId(item?.deref()) === activeItemId.value,\n\t\t);\n\t}\n\n\treturn {\n\t\tactiveItemId,\n\t\tattachKeydownEvent,\n\t\trefreshSelectableItems,\n\t\tdetachKeydownEvent,\n\t\tregisterKeyHook,\n\t\tgetActiveItemIndex,\n\t\tsetActiveItemId,\n\t\tsetActiveItemIndex,\n\t};\n});\n","import type {\n\tINodeCreateElement,\n\tNodeCreateElement,\n\tNodeFilterType,\n\tSimplifiedNodeType,\n} from '@/Interface';\nimport {\n\tAI_CATEGORY_ROOT_NODES,\n\tAI_CODE_NODE_TYPE,\n\tAI_NODE_CREATOR_VIEW,\n\tAI_OTHERS_NODE_CREATOR_VIEW,\n\tAI_SUBCATEGORY,\n\tDEFAULT_SUBCATEGORY,\n\tTRIGGER_NODE_CREATOR_VIEW,\n} from '@/constants';\nimport { defineStore } from 'pinia';\nimport { v4 as uuid } from 'uuid';\nimport { computed, nextTick, ref } from 'vue';\nimport difference from 'lodash-es/difference';\n\nimport { useNodeCreatorStore } from '@/stores/nodeCreator.store';\n\nimport {\n\tflattenCreateElements,\n\tgroupItemsInSections,\n\tisAINode,\n\tsearchNodes,\n\tsortNodeCreateElements,\n\tsubcategorizeItems,\n\ttransformNodeType,\n} from '../utils';\n\nimport type { NodeViewItem, NodeViewItemSection } from '@/components/Node/NodeCreator/viewsData';\nimport { AINodesView } from '@/components/Node/NodeCreator/viewsData';\nimport { useI18n } from '@/composables/useI18n';\nimport { useKeyboardNavigation } from './useKeyboardNavigation';\n\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport type { INodeInputFilter, NodeConnectionType, Themed } from 'n8n-workflow';\nimport { useCanvasStore } from '@/stores/canvas.store';\n\ninterface ViewStack {\n\tuuid?: string;\n\ttitle?: string;\n\tsubtitle?: string;\n\tsearch?: string;\n\tsubcategory?: string;\n\tinfo?: string;\n\tnodeIcon?: {\n\t\ticonType?: string;\n\t\ticon?: Themed<string>;\n\t\tcolor?: string;\n\t};\n\ticonUrl?: string;\n\trootView?: NodeFilterType;\n\tactiveIndex?: number;\n\ttransitionDirection?: 'in' | 'out';\n\thasSearch?: boolean;\n\tpreventBack?: boolean;\n\titems?: INodeCreateElement[];\n\tbaselineItems?: INodeCreateElement[];\n\tsearchItems?: SimplifiedNodeType[];\n\tforceIncludeNodes?: string[];\n\tmode?: 'actions' | 'nodes';\n\tbaseFilter?: (item: INodeCreateElement) => boolean;\n\titemsMapper?: (item: INodeCreateElement) => INodeCreateElement;\n\tpanelClass?: string;\n\tsections?: string[] | NodeViewItemSection[];\n}\n\nexport const useViewStacks = defineStore('nodeCreatorViewStacks', () => {\n\tconst nodeCreatorStore = useNodeCreatorStore();\n\tconst { getActiveItemIndex } = useKeyboardNavigation();\n\tconst i18n = useI18n();\n\n\tconst viewStacks = ref<ViewStack[]>([]);\n\n\tconst activeStackItems = computed<INodeCreateElement[]>(() => {\n\t\tconst stack = getLastActiveStack();\n\n\t\tif (!stack?.baselineItems) {\n\t\t\treturn stack.items ? extendItemsWithUUID(stack.items) : [];\n\t\t}\n\n\t\tif (stack.search && searchBaseItems.value) {\n\t\t\tconst searchBase =\n\t\t\t\tsearchBaseItems.value.length > 0\n\t\t\t\t\t? searchBaseItems.value\n\t\t\t\t\t: flattenCreateElements(stack.baselineItems ?? []);\n\n\t\t\tconst canvasHasAINodes = useCanvasStore().aiNodes.length > 0;\n\t\t\tconst filteredNodes =\n\t\t\t\tisAiRootView(stack) || canvasHasAINodes ? searchBase : filterOutAiNodes(searchBase);\n\n\t\t\tconst searchResults = extendItemsWithUUID(searchNodes(stack.search || '', filteredNodes));\n\n\t\t\tconst groupedNodes = groupIfAiNodes(searchResults, false) ?? searchResults;\n\t\t\t// Set the active index to the second item if there's a section\n\t\t\t// as the first item is collapsable\n\t\t\tstack.activeIndex = groupedNodes.some((node) => node.type === 'section') ? 1 : 0;\n\n\t\t\treturn groupedNodes;\n\t\t}\n\t\treturn extendItemsWithUUID(groupIfAiNodes(stack.baselineItems, true));\n\t});\n\n\tconst activeViewStack = computed<ViewStack>(() => {\n\t\tconst stack = getLastActiveStack();\n\t\tif (!stack) return {};\n\n\t\tconst flatBaselineItems = flattenCreateElements(stack.baselineItems ?? []);\n\n\t\treturn {\n\t\t\t...stack,\n\t\t\titems: activeStackItems.value,\n\t\t\thasSearch: flatBaselineItems.length > 8 || stack?.hasSearch,\n\t\t};\n\t});\n\n\tconst activeViewStackMode = computed(\n\t\t() => activeViewStack.value.mode || TRIGGER_NODE_CREATOR_VIEW,\n\t);\n\n\tconst searchBaseItems = computed<INodeCreateElement[]>(() => {\n\t\tconst stack = getLastActiveStack();\n\t\tif (!stack?.searchItems) return [];\n\n\t\treturn stack.searchItems.map((item) => transformNodeType(item, stack.subcategory));\n\t});\n\n\tfunction getLastActiveStack() {\n\t\treturn viewStacks.value[viewStacks.value.length - 1];\n\t}\n\n\t// Generate a delta between the global search results(all nodes) and the stack search results\n\tconst globalSearchItemsDiff = computed<INodeCreateElement[]>(() => {\n\t\tconst stack = getLastActiveStack();\n\t\tif (!stack?.search) return [];\n\n\t\tconst allNodes = nodeCreatorStore.mergedNodes.map((item) => transformNodeType(item));\n\t\t// Apply filtering for AI nodes if the current view is not the AI root view\n\t\tconst filteredNodes = isAiRootView(stack) ? allNodes : filterOutAiNodes(allNodes);\n\n\t\tlet globalSearchResult: INodeCreateElement[] = extendItemsWithUUID(\n\t\t\tsearchNodes(stack.search || '', filteredNodes),\n\t\t);\n\t\tif (isAiRootView(stack)) {\n\t\t\tglobalSearchResult = groupIfAiNodes(globalSearchResult);\n\t\t}\n\n\t\tconst filteredItems = globalSearchResult.filter((item) => {\n\t\t\treturn !activeStackItems.value.find((activeItem) => {\n\t\t\t\tif (activeItem.type === 'section') {\n\t\t\t\t\tconst matchingSectionItem = activeItem.children.some(\n\t\t\t\t\t\t(sectionItem) => sectionItem.key === item.key,\n\t\t\t\t\t);\n\t\t\t\t\treturn matchingSectionItem;\n\t\t\t\t}\n\n\t\t\t\treturn activeItem.key === item.key;\n\t\t\t});\n\t\t});\n\n\t\t// Filter out empty sections if all of their children are filtered out\n\t\tconst filteredSections = filteredItems.filter((item) => {\n\t\t\tif (item.type === 'section') {\n\t\t\t\tconst hasVisibleChildren = item.children.some((child) =>\n\t\t\t\t\tactiveStackItems.value.some((filteredItem) => filteredItem.key === child.key),\n\t\t\t\t);\n\n\t\t\t\treturn hasVisibleChildren;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\treturn filteredSections;\n\t});\n\n\tconst itemsBySubcategory = computed(() => subcategorizeItems(nodeCreatorStore.mergedNodes));\n\n\tfunction isAiRootView(stack: ViewStack) {\n\t\treturn stack.rootView === AI_NODE_CREATOR_VIEW;\n\t}\n\n\tfunction groupIfAiNodes(items: INodeCreateElement[], sortAlphabetically = true) {\n\t\tconst aiNodes = items.filter((node): node is NodeCreateElement => isAINode(node));\n\n\t\tif (aiNodes.length > 0) {\n\t\t\tconst sectionsMap = new Map<string, NodeViewItemSection>();\n\t\t\taiNodes.forEach((node) => {\n\t\t\t\tconst section = node.properties.codex?.subcategories?.[AI_SUBCATEGORY]?.[0];\n\n\t\t\t\tif (section) {\n\t\t\t\t\tconst currentItems = sectionsMap.get(section)?.items ?? [];\n\t\t\t\t\tconst isSubnodesSection =\n\t\t\t\t\t\t!node.properties.codex?.subcategories?.[AI_SUBCATEGORY].includes(\n\t\t\t\t\t\t\tAI_CATEGORY_ROOT_NODES,\n\t\t\t\t\t\t);\n\n\t\t\t\t\tsectionsMap.set(section, {\n\t\t\t\t\t\tkey: section,\n\t\t\t\t\t\ttitle: isSubnodesSection\n\t\t\t\t\t\t\t? `${section} (${i18n.baseText('nodeCreator.subnodes')})`\n\t\t\t\t\t\t\t: section,\n\t\t\t\t\t\titems: [...currentItems, node.key],\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst nonAiNodes = difference(items, aiNodes);\n\t\t\tconst nonAiTriggerNodes = nonAiNodes.filter(\n\t\t\t\t(item) => item.type === 'node' && useNodeTypesStore().isTriggerNode(item.properties.name),\n\t\t\t);\n\n\t\t\tconst nonAiRegularNodes = difference(nonAiNodes, nonAiTriggerNodes);\n\n\t\t\tif (nonAiNodes.length > 0) {\n\t\t\t\tlet sectionKey = '';\n\t\t\t\tif (nonAiRegularNodes.length && nonAiTriggerNodes.length) {\n\t\t\t\t\tsectionKey = i18n.baseText('nodeCreator.actionsCategory.regularAndTriggers');\n\t\t\t\t} else {\n\t\t\t\t\tsectionKey = nonAiRegularNodes.length\n\t\t\t\t\t\t? i18n.baseText('nodeCreator.actionsCategory.regularNodes')\n\t\t\t\t\t\t: i18n.baseText('nodeCreator.actionsCategory.triggerNodes');\n\t\t\t\t}\n\n\t\t\t\tconst nodesKeys = nonAiNodes.map((node) => node.key);\n\n\t\t\t\tsectionsMap.set(sectionKey, {\n\t\t\t\t\tkey: sectionKey,\n\t\t\t\t\ttitle: sectionKey,\n\t\t\t\t\titems: [...nodesKeys],\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Convert sectionsMap to array of sections\n\t\t\tconst sections = Array.from(sectionsMap.values());\n\n\t\t\treturn groupItemsInSections(items, sections, sortAlphabetically);\n\t\t}\n\n\t\treturn items;\n\t}\n\n\tfunction filterOutAiNodes(items: INodeCreateElement[]) {\n\t\tconst filteredSearchBase = items.filter((item) => {\n\t\t\tif (item.type === 'node') {\n\t\t\t\tconst isAICategory = item.properties.codex?.categories?.includes(AI_SUBCATEGORY) === true;\n\n\t\t\t\tif (!isAICategory) return true;\n\n\t\t\t\tconst isRootNodeSubcategory =\n\t\t\t\t\titem.properties.codex?.subcategories?.[AI_SUBCATEGORY]?.includes(AI_CATEGORY_ROOT_NODES);\n\n\t\t\t\treturn isRootNodeSubcategory;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\treturn filteredSearchBase;\n\t}\n\n\tasync function gotoCompatibleConnectionView(\n\t\tconnectionType: NodeConnectionType,\n\t\tisOutput?: boolean,\n\t\tfilter?: INodeInputFilter,\n\t) {\n\t\tlet nodesByConnectionType: { [key: string]: string[] };\n\t\tlet relatedAIView: { properties: NodeViewItem['properties'] } | undefined;\n\n\t\tif (isOutput === true) {\n\t\t\tnodesByConnectionType = useNodeTypesStore().visibleNodeTypesByInputConnectionTypeNames;\n\t\t\trelatedAIView = {\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: i18n.baseText('nodeCreator.aiPanel.aiNodes'),\n\t\t\t\t\ticon: 'robot',\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tnodesByConnectionType = useNodeTypesStore().visibleNodeTypesByOutputConnectionTypeNames;\n\n\t\t\trelatedAIView = AINodesView([]).items.find(\n\t\t\t\t(item) => item.properties.connectionType === connectionType,\n\t\t\t);\n\t\t}\n\n\t\tawait nextTick();\n\t\tpushViewStack({\n\t\t\ttitle: relatedAIView?.properties.title,\n\t\t\trootView: AI_OTHERS_NODE_CREATOR_VIEW,\n\t\t\tmode: 'nodes',\n\t\t\titems: nodeCreatorStore.allNodeCreatorNodes,\n\t\t\tnodeIcon: {\n\t\t\t\ticonType: 'icon',\n\t\t\t\ticon: relatedAIView?.properties.icon,\n\t\t\t\tcolor: relatedAIView?.properties.iconProps?.color,\n\t\t\t},\n\t\t\tpanelClass: relatedAIView?.properties.panelClass,\n\t\t\tbaseFilter: (i: INodeCreateElement) => {\n\t\t\t\t// AI Code node could have any connection type so we don't want to display it\n\t\t\t\t// in the compatible connection view as it would be displayed in all of them\n\t\t\t\tif (i.key === AI_CODE_NODE_TYPE) return false;\n\t\t\t\tconst displayNode = nodesByConnectionType[connectionType].includes(i.key);\n\n\t\t\t\t// TODO: Filtering works currently fine for displaying compatible node when dropping\n\t\t\t\t// input connections. However, it does not work for output connections.\n\t\t\t\t// For that reason does it currently display nodes that are maybe not compatible\n\t\t\t\t// but then errors once it got selected by the user.\n\t\t\t\tif (displayNode && filter?.nodes?.length) {\n\t\t\t\t\treturn filter.nodes.includes(i.key);\n\t\t\t\t}\n\n\t\t\t\treturn displayNode;\n\t\t\t},\n\t\t\titemsMapper(item) {\n\t\t\t\treturn {\n\t\t\t\t\t...item,\n\t\t\t\t\tsubcategory: connectionType,\n\t\t\t\t};\n\t\t\t},\n\t\t\tpreventBack: true,\n\t\t});\n\t}\n\n\tfunction setStackBaselineItems() {\n\t\tconst stack = getLastActiveStack();\n\t\tif (!stack || !activeViewStack.value.uuid) return;\n\n\t\tlet stackItems = stack?.items ?? [];\n\n\t\tif (!stack?.items) {\n\t\t\tconst subcategory = stack?.subcategory ?? DEFAULT_SUBCATEGORY;\n\t\t\tconst itemsInSubcategory = itemsBySubcategory.value[subcategory];\n\t\t\tconst sections = stack.sections;\n\n\t\t\tif (sections) {\n\t\t\t\tstackItems = groupItemsInSections(itemsInSubcategory, sections);\n\t\t\t} else {\n\t\t\t\tstackItems = itemsInSubcategory;\n\t\t\t}\n\t\t}\n\n\t\t// Ensure that the nodes specified in `stack.forceIncludeNodes` are always included,\n\t\t// regardless of whether the subcategory is matched\n\t\tif ((stack.forceIncludeNodes ?? []).length > 0) {\n\t\t\tconst matchedNodes = nodeCreatorStore.mergedNodes\n\t\t\t\t.filter((item) => stack.forceIncludeNodes?.includes(item.name))\n\t\t\t\t.map((item) => transformNodeType(item, stack.subcategory));\n\n\t\t\tstackItems.push(...matchedNodes);\n\t\t}\n\n\t\tif (stack.baseFilter) {\n\t\t\tstackItems = stackItems.filter(stack.baseFilter);\n\t\t}\n\n\t\tif (stack.itemsMapper) {\n\t\t\tstackItems = stackItems.map(stack.itemsMapper);\n\t\t}\n\n\t\t// Sort only if non-root view\n\t\tif (!stack.items) {\n\t\t\tstackItems = sortNodeCreateElements(stackItems);\n\t\t}\n\n\t\tupdateCurrentViewStack({ baselineItems: stackItems });\n\t}\n\n\tfunction extendItemsWithUUID(items: INodeCreateElement[]) {\n\t\treturn items.map((item) => ({\n\t\t\t...item,\n\t\t\tuuid: `${item.key}-${uuid()}`,\n\t\t}));\n\t}\n\n\tfunction pushViewStack(stack: ViewStack) {\n\t\tif (activeViewStack.value.uuid) {\n\t\t\tupdateCurrentViewStack({ activeIndex: getActiveItemIndex() });\n\t\t}\n\n\t\tconst newStackUuid = uuid();\n\t\tviewStacks.value.push({\n\t\t\t...stack,\n\t\t\tuuid: newStackUuid,\n\t\t\ttransitionDirection: 'in',\n\t\t\tactiveIndex: 0,\n\t\t});\n\t\tsetStackBaselineItems();\n\t}\n\n\tfunction popViewStack() {\n\t\tif (activeViewStack.value.uuid) {\n\t\t\tviewStacks.value.pop();\n\t\t\tupdateCurrentViewStack({ transitionDirection: 'out' });\n\t\t}\n\t}\n\n\tfunction updateCurrentViewStack(stack: Partial<ViewStack>) {\n\t\tconst currentStack = getLastActiveStack();\n\t\tconst matchedIndex = viewStacks.value.findIndex((s) => s.uuid === currentStack.uuid);\n\t\tif (!currentStack) return;\n\n\t\t// For each key in the stack, update the matched stack\n\t\tObject.keys(stack).forEach((key) => {\n\t\t\tconst typedKey = key as keyof ViewStack;\n\t\t\tviewStacks.value[matchedIndex] = {\n\t\t\t\t...viewStacks.value[matchedIndex],\n\t\t\t\t[key]: stack[typedKey],\n\t\t\t};\n\t\t});\n\t}\n\n\tfunction resetViewStacks() {\n\t\tviewStacks.value = [];\n\t}\n\n\treturn {\n\t\tviewStacks,\n\t\tactiveViewStack,\n\t\tactiveViewStackMode,\n\t\tglobalSearchItemsDiff,\n\t\tgotoCompatibleConnectionView,\n\t\tresetViewStacks,\n\t\tupdateCurrentViewStack,\n\t\tpushViewStack,\n\t\tpopViewStack,\n\t};\n});\n","import { defineStore } from 'pinia';\nimport {\n\tAI_NODE_CREATOR_VIEW,\n\tNODE_CREATOR_OPEN_SOURCES,\n\tREGULAR_NODE_CREATOR_VIEW,\n\tSTORES,\n\tTRIGGER_NODE_CREATOR_VIEW,\n} from '@/constants';\nimport type {\n\tNodeFilterType,\n\tNodeCreatorOpenSource,\n\tSimplifiedNodeType,\n\tActionsRecord,\n\tToggleNodeCreatorOptions,\n\tAIAssistantConnectionInfo,\n} from '@/Interface';\n\nimport { computed, ref } from 'vue';\nimport { transformNodeType } from '@/components/Node/NodeCreator/utils';\nimport type { INodeInputConfiguration } from 'n8n-workflow';\nimport { NodeConnectionType, nodeConnectionTypes, NodeHelpers } from 'n8n-workflow';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useViewStacks } from '@/components/Node/NodeCreator/composables/useViewStacks';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\n\nexport const useNodeCreatorStore = defineStore(STORES.NODE_CREATOR, () => {\n\tconst workflowsStore = useWorkflowsStore();\n\tconst ndvStore = useNDVStore();\n\tconst uiStore = useUIStore();\n\tconst nodeTypesStore = useNodeTypesStore();\n\n\tconst externalHooks = useExternalHooks();\n\tconst telemetry = useTelemetry();\n\n\tconst selectedView = ref<NodeFilterType>(TRIGGER_NODE_CREATOR_VIEW);\n\tconst mergedNodes = ref<SimplifiedNodeType[]>([]);\n\tconst actions = ref<ActionsRecord<typeof mergedNodes.value>>({});\n\n\tconst showScrim = ref(false);\n\tconst openSource = ref<NodeCreatorOpenSource>('');\n\n\tconst allNodeCreatorNodes = computed(() =>\n\t\tObject.values(mergedNodes.value).map((i) => transformNodeType(i)),\n\t);\n\n\tfunction setMergeNodes(nodes: SimplifiedNodeType[]) {\n\t\tmergedNodes.value = nodes;\n\t}\n\n\tfunction setActions(nodes: ActionsRecord<typeof mergedNodes.value>) {\n\t\tactions.value = nodes;\n\t}\n\n\tfunction setShowScrim(isVisible: boolean) {\n\t\tshowScrim.value = isVisible;\n\t}\n\n\tfunction setSelectedView(view: NodeFilterType) {\n\t\tselectedView.value = view;\n\t}\n\n\tfunction setOpenSource(view: NodeCreatorOpenSource) {\n\t\topenSource.value = view;\n\t}\n\n\tfunction openNodeCreator({\n\t\tsource,\n\t\tcreateNodeActive,\n\t\tnodeCreatorView,\n\t}: ToggleNodeCreatorOptions) {\n\t\tif (createNodeActive === uiStore.isCreateNodeActive) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!nodeCreatorView) {\n\t\t\tnodeCreatorView =\n\t\t\t\tworkflowsStore.workflowTriggerNodes.length > 0\n\t\t\t\t\t? REGULAR_NODE_CREATOR_VIEW\n\t\t\t\t\t: TRIGGER_NODE_CREATOR_VIEW;\n\t\t}\n\t\t// Default to the trigger tab in node creator if there's no trigger node yet\n\t\tsetSelectedView(nodeCreatorView);\n\n\t\tlet mode;\n\t\tswitch (selectedView.value) {\n\t\t\tcase AI_NODE_CREATOR_VIEW:\n\t\t\t\tmode = 'ai';\n\t\t\t\tbreak;\n\t\t\tcase REGULAR_NODE_CREATOR_VIEW:\n\t\t\t\tmode = 'regular';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmode = 'regular';\n\t\t}\n\n\t\tuiStore.isCreateNodeActive = createNodeActive;\n\t\tif (createNodeActive && source) {\n\t\t\tsetOpenSource(source);\n\t\t}\n\n\t\tvoid externalHooks.run('nodeView.createNodeActiveChanged', {\n\t\t\tsource,\n\t\t\tmode,\n\t\t\tcreateNodeActive,\n\t\t});\n\n\t\ttrackNodesPanelActiveChanged({\n\t\t\tsource,\n\t\t\tmode,\n\t\t\tcreateNodeActive,\n\t\t\tworkflowId: workflowsStore.workflowId,\n\t\t});\n\t}\n\n\tfunction trackNodesPanelActiveChanged({\n\t\tsource,\n\t\tmode,\n\t\tcreateNodeActive,\n\t\tworkflowId,\n\t}: {\n\t\tsource?: string;\n\t\tmode?: string;\n\t\tcreateNodeActive?: boolean;\n\t\tworkflowId?: string;\n\t}) {\n\t\ttelemetry.trackNodesPanel('nodeView.createNodeActiveChanged', {\n\t\t\tsource,\n\t\t\tmode,\n\t\t\tcreateNodeActive,\n\t\t\tworkflow_id: workflowId,\n\t\t});\n\t}\n\n\tfunction openSelectiveNodeCreator({\n\t\tconnectionType,\n\t\tnode,\n\t\tcreatorView,\n\t}: {\n\t\tconnectionType: NodeConnectionType;\n\t\tnode: string;\n\t\tcreatorView?: NodeFilterType;\n\t}) {\n\t\tconst nodeName = node ?? ndvStore.activeNodeName;\n\t\tconst nodeData = nodeName ? workflowsStore.getNodeByName(nodeName) : null;\n\n\t\tndvStore.activeNodeName = null;\n\n\t\tsetTimeout(() => {\n\t\t\tif (creatorView) {\n\t\t\t\topenNodeCreator({\n\t\t\t\t\tcreateNodeActive: true,\n\t\t\t\t\tnodeCreatorView: creatorView,\n\t\t\t\t});\n\t\t\t} else if (connectionType && nodeData) {\n\t\t\t\tinsertNodeAfterSelected({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tendpointUuid: `${nodeData.id}-input${connectionType}0`,\n\t\t\t\t\teventSource: NODE_CREATOR_OPEN_SOURCES.NOTICE_ERROR_MESSAGE,\n\t\t\t\t\toutputType: connectionType,\n\t\t\t\t\tsourceId: nodeData.id,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction insertNodeAfterSelected(info: AIAssistantConnectionInfo) {\n\t\tconst type = info.outputType ?? NodeConnectionType.Main;\n\t\t// Get the node and set it as active that new nodes\n\t\t// which get created get automatically connected\n\t\t// to it.\n\t\tconst sourceNode = workflowsStore.getNodeById(info.sourceId);\n\t\tif (!sourceNode) {\n\t\t\treturn;\n\t\t}\n\n\t\tuiStore.lastSelectedNode = sourceNode.name;\n\t\tuiStore.lastSelectedNodeEndpointUuid =\n\t\t\tinfo.endpointUuid ?? info.connection?.target.jtk?.endpoint.uuid;\n\t\tuiStore.lastSelectedNodeOutputIndex = info.index;\n\t\t// canvasStore.newNodeInsertPosition = null;\n\n\t\t// @TODO Add connection to store\n\t\t// if (info.connection) {\n\t\t// \tcanvasStore.setLastSelectedConnection(info.connection);\n\t\t// }\n\n\t\topenNodeCreator({\n\t\t\tsource: info.eventSource,\n\t\t\tcreateNodeActive: true,\n\t\t\tnodeCreatorView: info.nodeCreatorView,\n\t\t});\n\n\t\t// TODO: The animation is a bit glitchy because we're updating view stack immediately\n\t\t// after the node creator is opened\n\t\tconst isOutput = info.connection?.endpoints[0].parameters.connection === 'source';\n\t\tconst isScopedConnection =\n\t\t\ttype !== NodeConnectionType.Main && nodeConnectionTypes.includes(type);\n\n\t\tif (isScopedConnection) {\n\t\t\tuseViewStacks()\n\t\t\t\t.gotoCompatibleConnectionView(type, isOutput, getNodeCreatorFilter(sourceNode.name, type))\n\t\t\t\t.catch(() => {});\n\t\t}\n\t}\n\n\tfunction getNodeCreatorFilter(nodeName: string, outputType?: NodeConnectionType) {\n\t\tlet filter;\n\t\tconst workflow = workflowsStore.getCurrentWorkflow();\n\t\tconst workflowNode = workflow.getNode(nodeName);\n\t\tif (!workflowNode) return { nodes: [] };\n\n\t\tconst nodeType = nodeTypesStore.getNodeType(workflowNode?.type, workflowNode.typeVersion);\n\t\tif (nodeType) {\n\t\t\tconst inputs = NodeHelpers.getNodeInputs(workflow, workflowNode, nodeType);\n\n\t\t\tconst filterFound = inputs.filter((input) => {\n\t\t\t\tif (typeof input === 'string' || input.type !== outputType || !input.filter) {\n\t\t\t\t\t// No filters defined or wrong connection type\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}) as INodeInputConfiguration[];\n\n\t\t\tif (filterFound.length) {\n\t\t\t\tfilter = filterFound[0].filter;\n\t\t\t}\n\t\t}\n\n\t\treturn filter;\n\t}\n\n\treturn {\n\t\topenSource,\n\t\tselectedView,\n\t\tshowScrim,\n\t\tmergedNodes,\n\t\tactions,\n\t\tsetShowScrim,\n\t\tsetSelectedView,\n\t\tsetOpenSource,\n\t\tsetActions,\n\t\tsetMergeNodes,\n\t\topenNodeCreator,\n\t\topenSelectiveNodeCreator,\n\t\tallNodeCreatorNodes,\n\t};\n});\n"],"names":["SEQUENTIAL_BONUS","SEPARATOR_BONUS","CAMEL_BONUS","FIRST_LETTER_BONUS","LEADING_LETTER_PENALTY","MAX_LEADING_LETTER_PENALTY","UNMATCHED_LETTER_PENALTY","fuzzyMatchSimple","pattern","target","patternIdx","strIdx","patternChar","targetChar","fuzzyMatch","fuzzyMatchRecursive","patternCurIndex","targetCurrIndex","targetMatches","matches","maxMatches","nextMatch","recursionCount","recursionLimit","outScore","recursiveMatch","bestRecursiveMatches","bestRecursiveScore","firstMatch","recursiveMatches","recursiveResult","recursiveScore","matched","penalty","unmatched","i","currIdx","prevIdx","neighbor","curr","getValue","obj","prop","segments","result","key","sublimeSearch","filter","data","keys","results","accu","item","values","weight","value","v","itemMatch","match","a","b","transformNodeType","node","subcategory","type","createElement","uuidv4","_c","_b","_a","CORE_NODES_CATEGORY","DEFAULT_SUBCATEGORY","subcategorizeItems","items","WHITE_LISTED_SUBCATEGORIES","AI_SUBCATEGORY","acc","subcategories","category","_d","sortNodeCreateElements","nodes","displayNameA","displayNameB","searchNodes","searchFilter","trimmedFilter","flattenCreateElements","isAINode","_e","AI_CATEGORY_AGENTS","groupItemsInSections","sections","sortAlphabetically","filteredSections","section","itemsBySection","items2","s","mapNewSections","newSections","children","nonAINodes","AINodes","nonAINodesBySection","nonAINodesSections","AINodesBySection","AINodesSections","sortBy","i18n","getAiNodesBySubcategory","AIView","_nodes","useI18n","nodeTypesStore","useNodeTypesStore","templatesStore","useTemplatesStore","chainNodes","AI_CATEGORY_CHAINS","agentNodes","AI_NODE_CREATOR_VIEW","AI_OTHERS_NODE_CREATOR_VIEW","AINodesView","getAISubcategoryProperties","nodeConnectionType","AI_CATEGORY_DOCUMENT_LOADERS","NodeConnectionType","AI_CATEGORY_LANGUAGE_MODELS","AI_CATEGORY_MEMORY","AI_CATEGORY_OUTPUTPARSER","AI_CATEGORY_RETRIEVERS","AI_CATEGORY_TEXT_SPLITTERS","AI_CATEGORY_TOOLS","AI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE","AI_CODE_TOOL_LANGCHAIN_NODE_TYPE","AI_CATEGORY_EMBEDDING","AI_CATEGORY_VECTOR_STORES","AI_UNCATEGORIZED_CATEGORY","TriggerView","TRIGGER_NODE_CREATOR_VIEW","MANUAL_TRIGGER_NODE_TYPE","WEBHOOK_NODE_TYPE","EMAIL_IMAP_NODE_TYPE","SCHEDULE_TRIGGER_NODE_TYPE","FORM_TRIGGER_NODE_TYPE","EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE","MANUAL_CHAT_TRIGGER_NODE_TYPE","OTHER_TRIGGER_NODES_SUBCATEGORY","RegularView","view","REGULAR_NODE_CREATOR_VIEW","RSS_READ_NODE_TYPE","EMAIL_SEND_NODE_TYPE","TRANSFORM_DATA_SUBCATEGORY","SET_NODE_TYPE","CODE_NODE_TYPE","DATETIME_NODE_TYPE","FILTER_NODE_TYPE","REMOVE_DUPLICATES_NODE_TYPE","SPLIT_OUT_NODE_TYPE","LIMIT_NODE_TYPE","SUMMARIZE_NODE_TYPE","AGGREGATE_NODE_TYPE","MERGE_NODE_TYPE","HTML_NODE_TYPE","MARKDOWN_NODE_TYPE","XML_NODE_TYPE","CRYPTO_NODE_TYPE","EXTRACT_FROM_FILE_NODE_TYPE","CONVERT_TO_FILE_NODE_TYPE","COMPRESSION_NODE_TYPE","EDIT_IMAGE_NODE_TYPE","FLOWS_CONTROL_SUBCATEGORY","IF_NODE_TYPE","SPLIT_IN_BATCHES_NODE_TYPE","HELPERS_SUBCATEGORY","HTTP_REQUEST_NODE_TYPE","KEYBOARD_ID_ATTR","WATCHED_KEYS","useKeyboardNavigation","defineStore","selectableItems","ref","activeItemId","keysHooks","getItemType","element","getElementId","refreshSelectableItems","resolve","cleanupSelectableItems","el","executeKeyHooks","keyboardKey","activeItem","hook","onKeyDown","e","pressedKey","activeItemIndex","isArrowDown","isArrowUp","nextItemIndex","setActiveItem","previousIndex","setActiveItemId","id","itemId","setActiveItemIndex","index","attachKeydownEvent","detachKeydownEvent","registerKeyHook","name","getActiveItemIndex","useViewStacks","nodeCreatorStore","useNodeCreatorStore","viewStacks","activeStackItems","computed","stack","getLastActiveStack","extendItemsWithUUID","searchBaseItems","searchBase","canvasHasAINodes","useCanvasStore","filteredNodes","isAiRootView","filterOutAiNodes","searchResults","groupedNodes","groupIfAiNodes","activeViewStack","flatBaselineItems","activeViewStackMode","globalSearchItemsDiff","allNodes","globalSearchResult","sectionItem","child","filteredItem","itemsBySubcategory","aiNodes","sectionsMap","currentItems","isSubnodesSection","_f","AI_CATEGORY_ROOT_NODES","nonAiNodes","difference","nonAiTriggerNodes","nonAiRegularNodes","sectionKey","nodesKeys","gotoCompatibleConnectionView","connectionType","isOutput","nodesByConnectionType","relatedAIView","nextTick","pushViewStack","AI_CODE_NODE_TYPE","displayNode","setStackBaselineItems","stackItems","itemsInSubcategory","matchedNodes","updateCurrentViewStack","uuid","newStackUuid","popViewStack","currentStack","matchedIndex","typedKey","resetViewStacks","STORES","workflowsStore","useWorkflowsStore","ndvStore","useNDVStore","uiStore","useUIStore","externalHooks","useExternalHooks","telemetry","useTelemetry","selectedView","mergedNodes","actions","showScrim","openSource","allNodeCreatorNodes","setMergeNodes","setActions","setShowScrim","isVisible","setSelectedView","setOpenSource","openNodeCreator","source","createNodeActive","nodeCreatorView","mode","trackNodesPanelActiveChanged","workflowId","openSelectiveNodeCreator","creatorView","nodeName","nodeData","insertNodeAfterSelected","NODE_CREATOR_OPEN_SOURCES","info","sourceNode","nodeConnectionTypes","getNodeCreatorFilter","outputType","workflow","workflowNode","nodeType","filterFound","NodeHelpers.getNodeInputs","input"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=templateActions-
|
|
1
|
+
import{dd as f,aC as m,V as c,b4 as u,dg as T,dh as k,di as y,b3 as E}from"./index-1OxaEeO3.js";async function I(e){const{credentialOverrides:o,nodeTypeProvider:t,rootStore:n,template:a,workflowsStore:s}=e,r=await k(n.restApiContext,{name:a.name}),l=y(t,a.workflow.nodes,o),i=E(l),w=a.workflow.connections,p={name:r.name,nodes:i,connections:w,active:!1,meta:{templateId:a.id.toString()}};return await s.createNewWorkflow(p)}async function N(e){const{router:o,templateId:t,inNewBrowserTab:n=!1,telemetry:a,source:s}=e;a.track("User opened cred setup",{source:s},{withPostHog:!0});const r={name:c.TEMPLATE_SETUP,params:{id:t}};if(n){const l=o.resolve(r);window.open(l.href,"_blank")}else await o.push(r)}async function d(e){const{externalHooks:o,templateId:t,templatesStore:n,inNewBrowserTab:a,router:s}=e,r={name:c.TEMPLATE_IMPORT,params:{id:t}},l={source:"workflow",template_id:u(t),wf_template_repo_session_id:n.currentSessionId};if(await o.run("templatesWorkflowView.openWorkflow",l),a){const i=s.resolve(r);window.open(i.href,"_blank")}else await s.push(r)}function P(e,o){return o.workflow.nodes.some(t=>T(e,t))}async function S(e,o){const t=e.getFullTemplateById(o);return t||(await e.fetchTemplateById(o),e.getFullTemplateById(o))}async function W(e){const{nodeTypesStore:o,posthogStore:t,templateId:n,templatesStore:a}=e;if(!t.isFeatureEnabled(f)){await d(e);return}const[r]=await Promise.all([S(a,n),o.loadNodeTypesIfNotLoaded()]);m(r),P(o,r)?await N(e):await d(e)}export{I as c,W as u};
|
|
2
|
+
//# sourceMappingURL=templateActions-w_1vSarr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateActions-
|
|
1
|
+
{"version":3,"file":"templateActions-w_1vSarr.js","sources":["../../src/utils/templates/templateActions.ts"],"sourcesContent":["import type {\n\tINodeUi,\n\tITemplatesWorkflowFull,\n\tIWorkflowData,\n\tIWorkflowTemplate,\n} from '@/Interface';\nimport { getNewWorkflow } from '@/api/workflows';\nimport { TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT, VIEWS } from '@/constants';\nimport type { useRootStore } from '@/stores/root.store';\nimport type { PosthogStore } from '@/stores/posthog.store';\nimport type { useWorkflowsStore } from '@/stores/workflows.store';\nimport { getFixedNodesList } from '@/utils/nodeViewUtils';\nimport type { NodeTypeProvider } from '@/utils/nodeTypes/nodeTypeTransforms';\nimport type { TemplateCredentialKey } from '@/utils/templates/templateTransforms';\nimport { replaceAllTemplateNodeCredentials } from '@/utils/templates/templateTransforms';\nimport type { INodeCredentialsDetails } from 'n8n-workflow';\nimport type { RouteLocationRaw, Router } from 'vue-router';\nimport type { TemplatesStore } from '@/stores/templates.store';\nimport type { NodeTypesStore } from '@/stores/nodeTypes.store';\nimport type { Telemetry } from '@/plugins/telemetry';\nimport type { useExternalHooks } from '@/composables/useExternalHooks';\nimport { assert } from '@/utils/assert';\nimport { doesNodeHaveCredentialsToFill } from '@/utils/nodes/nodeTransforms';\nimport { tryToParseNumber } from '@/utils/typesUtils';\n\ntype ExternalHooks = ReturnType<typeof useExternalHooks>;\n\n/**\n * Creates a new workflow from a template\n */\nexport async function createWorkflowFromTemplate(opts: {\n\ttemplate: IWorkflowTemplate;\n\tcredentialOverrides: Record<TemplateCredentialKey, INodeCredentialsDetails>;\n\trootStore: ReturnType<typeof useRootStore>;\n\tworkflowsStore: ReturnType<typeof useWorkflowsStore>;\n\tnodeTypeProvider: NodeTypeProvider;\n}) {\n\tconst { credentialOverrides, nodeTypeProvider, rootStore, template, workflowsStore } = opts;\n\n\tconst workflowData = await getNewWorkflow(rootStore.restApiContext, { name: template.name });\n\tconst nodesWithCreds = replaceAllTemplateNodeCredentials(\n\t\tnodeTypeProvider,\n\t\ttemplate.workflow.nodes,\n\t\tcredentialOverrides,\n\t);\n\tconst nodes = getFixedNodesList(nodesWithCreds) as INodeUi[];\n\tconst connections = template.workflow.connections;\n\n\tconst workflowToCreate: IWorkflowData = {\n\t\tname: workflowData.name,\n\t\tnodes,\n\t\tconnections,\n\t\tactive: false,\n\t\tmeta: {\n\t\t\ttemplateId: template.id.toString(),\n\t\t},\n\t\t// Ignored: pinData, settings, tags, versionId\n\t};\n\n\tconst createdWorkflow = await workflowsStore.createNewWorkflow(workflowToCreate);\n\n\treturn createdWorkflow;\n}\n\n/**\n * Opens the template credential setup view\n */\nasync function openTemplateCredentialSetup(opts: {\n\ttemplateId: string;\n\trouter: Router;\n\tinNewBrowserTab?: boolean;\n\ttelemetry: Telemetry;\n\tsource: string;\n}) {\n\tconst { router, templateId, inNewBrowserTab = false, telemetry, source } = opts;\n\n\ttelemetry.track('User opened cred setup', { source }, { withPostHog: true });\n\n\tconst routeLocation: RouteLocationRaw = {\n\t\tname: VIEWS.TEMPLATE_SETUP,\n\t\tparams: { id: templateId },\n\t};\n\n\tif (inNewBrowserTab) {\n\t\tconst route = router.resolve(routeLocation);\n\t\twindow.open(route.href, '_blank');\n\t} else {\n\t\tawait router.push(routeLocation);\n\t}\n}\n\n/**\n * Opens the given template's workflow on NodeView. Fires necessary\n * telemetry events.\n */\nasync function openTemplateWorkflowOnNodeView(opts: {\n\texternalHooks: ExternalHooks;\n\ttemplateId: string;\n\ttemplatesStore: TemplatesStore;\n\trouter: Router;\n\tinNewBrowserTab?: boolean;\n}) {\n\tconst { externalHooks, templateId, templatesStore, inNewBrowserTab, router } = opts;\n\tconst routeLocation: RouteLocationRaw = {\n\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\tparams: { id: templateId },\n\t};\n\tconst telemetryPayload = {\n\t\tsource: 'workflow',\n\t\ttemplate_id: tryToParseNumber(templateId),\n\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t};\n\n\tawait externalHooks.run('templatesWorkflowView.openWorkflow', telemetryPayload);\n\n\tif (inNewBrowserTab) {\n\t\tconst route = router.resolve(routeLocation);\n\t\twindow.open(route.href, '_blank');\n\t} else {\n\t\tawait router.push(routeLocation);\n\t}\n}\n\nfunction hasTemplateCredentials(\n\tnodeTypeProvider: NodeTypeProvider,\n\ttemplate: ITemplatesWorkflowFull,\n) {\n\treturn template.workflow.nodes.some((node) =>\n\t\tdoesNodeHaveCredentialsToFill(nodeTypeProvider, node),\n\t);\n}\n\nasync function getFullTemplate(templatesStore: TemplatesStore, templateId: string) {\n\tconst template = templatesStore.getFullTemplateById(templateId);\n\tif (template) {\n\t\treturn template;\n\t}\n\n\tawait templatesStore.fetchTemplateById(templateId);\n\treturn templatesStore.getFullTemplateById(templateId);\n}\n\n/**\n * Uses the given template by opening the template workflow on NodeView\n * or the template credential setup view. Fires necessary telemetry events.\n */\nexport async function useTemplateWorkflow(opts: {\n\texternalHooks: ExternalHooks;\n\tnodeTypesStore: NodeTypesStore;\n\tposthogStore: PosthogStore;\n\ttemplateId: string;\n\ttemplatesStore: TemplatesStore;\n\trouter: Router;\n\tinNewBrowserTab?: boolean;\n\ttelemetry: Telemetry;\n\tsource: string;\n}) {\n\tconst { nodeTypesStore, posthogStore, templateId, templatesStore } = opts;\n\n\tconst openCredentialSetup = posthogStore.isFeatureEnabled(TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT);\n\tif (!openCredentialSetup) {\n\t\tawait openTemplateWorkflowOnNodeView(opts);\n\t\treturn;\n\t}\n\n\tconst [template] = await Promise.all([\n\t\tgetFullTemplate(templatesStore, templateId),\n\t\tnodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t]);\n\tassert(template);\n\n\tif (hasTemplateCredentials(nodeTypesStore, template)) {\n\t\tawait openTemplateCredentialSetup(opts);\n\t} else {\n\t\tawait openTemplateWorkflowOnNodeView(opts);\n\t}\n}\n"],"names":["createWorkflowFromTemplate","opts","credentialOverrides","nodeTypeProvider","rootStore","template","workflowsStore","workflowData","getNewWorkflow","nodesWithCreds","replaceAllTemplateNodeCredentials","nodes","getFixedNodesList","connections","workflowToCreate","openTemplateCredentialSetup","router","templateId","inNewBrowserTab","telemetry","source","routeLocation","VIEWS","route","openTemplateWorkflowOnNodeView","externalHooks","templatesStore","telemetryPayload","tryToParseNumber","hasTemplateCredentials","node","doesNodeHaveCredentialsToFill","getFullTemplate","useTemplateWorkflow","nodeTypesStore","posthogStore","TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT","assert"],"mappings":"gGA8BA,eAAsBA,EAA2BC,EAM9C,CACF,KAAM,CAAE,oBAAAC,EAAqB,iBAAAC,EAAkB,UAAAC,EAAW,SAAAC,EAAU,eAAAC,CAAmB,EAAAL,EAEjFM,EAAe,MAAMC,EAAeJ,EAAU,eAAgB,CAAE,KAAMC,EAAS,IAAA,CAAM,EACrFI,EAAiBC,EACtBP,EACAE,EAAS,SAAS,MAClBH,CAAA,EAEKS,EAAQC,EAAkBH,CAAc,EACxCI,EAAcR,EAAS,SAAS,YAEhCS,EAAkC,CACvC,KAAMP,EAAa,KACnB,MAAAI,EACA,YAAAE,EACA,OAAQ,GACR,KAAM,CACL,WAAYR,EAAS,GAAG,SAAS,CAClC,CAAA,EAMM,OAFiB,MAAMC,EAAe,kBAAkBQ,CAAgB,CAGhF,CAKA,eAAeC,EAA4Bd,EAMxC,CACF,KAAM,CAAE,OAAAe,EAAQ,WAAAC,EAAY,gBAAAC,EAAkB,GAAO,UAAAC,EAAW,OAAAC,CAAW,EAAAnB,EAEjEkB,EAAA,MAAM,yBAA0B,CAAE,OAAAC,GAAU,CAAE,YAAa,GAAM,EAE3E,MAAMC,EAAkC,CACvC,KAAMC,EAAM,eACZ,OAAQ,CAAE,GAAIL,CAAW,CAAA,EAG1B,GAAIC,EAAiB,CACd,MAAAK,EAAQP,EAAO,QAAQK,CAAa,EACnC,OAAA,KAAKE,EAAM,KAAM,QAAQ,CAAA,MAE1B,MAAAP,EAAO,KAAKK,CAAa,CAEjC,CAMA,eAAeG,EAA+BvB,EAM3C,CACF,KAAM,CAAE,cAAAwB,EAAe,WAAAR,EAAY,eAAAS,EAAgB,gBAAAR,EAAiB,OAAAF,CAAW,EAAAf,EACzEoB,EAAkC,CACvC,KAAMC,EAAM,gBACZ,OAAQ,CAAE,GAAIL,CAAW,CAAA,EAEpBU,EAAmB,CACxB,OAAQ,WACR,YAAaC,EAAiBX,CAAU,EACxC,4BAA6BS,EAAe,gBAAA,EAK7C,GAFM,MAAAD,EAAc,IAAI,qCAAsCE,CAAgB,EAE1ET,EAAiB,CACd,MAAAK,EAAQP,EAAO,QAAQK,CAAa,EACnC,OAAA,KAAKE,EAAM,KAAM,QAAQ,CAAA,MAE1B,MAAAP,EAAO,KAAKK,CAAa,CAEjC,CAEA,SAASQ,EACR1B,EACAE,EACC,CACM,OAAAA,EAAS,SAAS,MAAM,KAAMyB,GACpCC,EAA8B5B,EAAkB2B,CAAI,CAAA,CAEtD,CAEA,eAAeE,EAAgBN,EAAgCT,EAAoB,CAC5E,MAAAZ,EAAWqB,EAAe,oBAAoBT,CAAU,EAC9D,OAAIZ,IAIE,MAAAqB,EAAe,kBAAkBT,CAAU,EAC1CS,EAAe,oBAAoBT,CAAU,EACrD,CAMA,eAAsBgB,EAAoBhC,EAUvC,CACF,KAAM,CAAE,eAAAiC,EAAgB,aAAAC,EAAc,WAAAlB,EAAY,eAAAS,GAAmBzB,EAGrE,GAAI,CADwBkC,EAAa,iBAAiBC,CAAoC,EACpE,CACzB,MAAMZ,EAA+BvB,CAAI,EACzC,MACD,CAEA,KAAM,CAACI,CAAQ,EAAI,MAAM,QAAQ,IAAI,CACpC2B,EAAgBN,EAAgBT,CAAU,EAC1CiB,EAAe,yBAAyB,CAAA,CACxC,EACDG,EAAOhC,CAAQ,EAEXwB,EAAuBK,EAAgB7B,CAAQ,EAClD,MAAMU,EAA4Bd,CAAI,EAEtC,MAAMuB,EAA+BvB,CAAI,CAE3C"}
|