n8n-editor-ui 1.8.0 → 1.8.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 +15 -15
- package/dist/assets/{CanvasControls-cf48927a.js → CanvasControls-f8442535.js} +2 -2
- package/dist/assets/{CanvasControls-cf48927a.js.map → CanvasControls-f8442535.js.map} +1 -1
- package/dist/assets/{FixedCollectionParameter-f646d2bf.js → FixedCollectionParameter-8ad1e897.js} +2 -2
- package/dist/assets/{FixedCollectionParameter-f646d2bf.js.map → FixedCollectionParameter-8ad1e897.js.map} +1 -1
- package/dist/assets/{NodeCreation-bbf36a1a.js → NodeCreation-aa65a415.js} +2 -2
- package/dist/assets/{NodeCreation-bbf36a1a.js.map → NodeCreation-aa65a415.js.map} +1 -1
- package/dist/assets/NodeCreator-626fd9f1.js +2 -0
- package/dist/assets/NodeCreator-626fd9f1.js.map +1 -0
- package/dist/assets/{RunDataJson-6215e222.js → RunDataJson-1392d3f8.js} +2 -2
- package/dist/assets/{RunDataJson-6215e222.js.map → RunDataJson-1392d3f8.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-1d385291.js → RunDataJsonActions-b7eb9ddb.js} +2 -2
- package/dist/assets/{RunDataJsonActions-1d385291.js.map → RunDataJsonActions-b7eb9ddb.js.map} +1 -1
- package/dist/assets/{RunDataSchema-43df3299.js → RunDataSchema-066ea2d7.js} +2 -2
- package/dist/assets/{RunDataSchema-43df3299.js.map → RunDataSchema-066ea2d7.js.map} +1 -1
- package/dist/assets/{RunDataTable-7ab80bf8.js → RunDataTable-301414b2.js} +2 -2
- package/dist/assets/{RunDataTable-7ab80bf8.js.map → RunDataTable-301414b2.js.map} +1 -1
- package/dist/assets/{index-12dd1e47.css → index-445a502e.css} +1 -1
- package/dist/assets/{index-1cdec20f.js → index-adc9f77e.js} +5 -9
- package/dist/assets/index-adc9f77e.js.map +1 -0
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/NodeCreator-0d763ba3.js +0 -2
- package/dist/assets/NodeCreator-0d763ba3.js.map +0 -1
- package/dist/assets/index-1cdec20f.js.map +0 -1
package/dist/index.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<script>!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled getFeatureFlag onFeatureFlags reloadFeatureFlags".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[])</script>
|
|
13
13
|
|
|
14
14
|
<title>n8n.io - Workflow Automation</title>
|
|
15
|
-
<script type="module" crossorigin src="/%7B%7BBASE_PATH%7D%7D/assets/index-
|
|
15
|
+
<script type="module" crossorigin src="/%7B%7BBASE_PATH%7D%7D/assets/index-adc9f77e.js"></script>
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/vendor-18a4b4e1.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/luxon-19e1de07.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/esprima-next-8c7e8ff9.js">
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
<link rel="modulepreload" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/@fortawesome/free-regular-svg-icons-74cb85f8.js">
|
|
51
51
|
<link rel="stylesheet" href="/%7B%7BBASE_PATH%7D%7D/assets/n8n-dc7cfc9d.css">
|
|
52
52
|
<link rel="stylesheet" href="/%7B%7BBASE_PATH%7D%7D/assets/vue-agile-d964f598.css">
|
|
53
|
-
<link rel="stylesheet" href="/%7B%7BBASE_PATH%7D%7D/assets/index-
|
|
53
|
+
<link rel="stylesheet" href="/%7B%7BBASE_PATH%7D%7D/assets/index-445a502e.css">
|
|
54
54
|
</head>
|
|
55
55
|
<body>
|
|
56
56
|
<noscript>
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{C as Y,v as oe,w as j,T as F,p as yt,x as de,W as Q,E as ft,y as $e,M as Ne,z as Be,O as He,R as Le,A as Ue,H as Ke,F as xe,B as ze,G as ne,r as ue,m as pe,d as Se,I as je,N as ke,S as mt,J as vt,K as _t,L as ge,P as Fe,Q as ye,U as qe,V as ht,X as Ie,Y as Tt,Z as bt,u as wt}from"./index-1cdec20f.js";import{d as H,o as k,c as L,w as A,r as X,Z as Xe,y as G,i as $,a0 as Re,v as ve,P as Ze,a1 as Me,b as B,f as R,g as I,e as O,n as w,k as M,s as _e,ab as fe,j as K,X as Qe,V as Oe,a4 as he,Y as Je,t as W,$ as et,C as J,M as kt,a9 as Ct,m as me,ad as tt,am as $t,ah as Nt,aI as St,l as re}from"./vendor-18a4b4e1.js";import{_ as U}from"./n8n-80219ee5.js";import{d as ot}from"./pinia-82c4461b.js";import"./axios-c5a64f4c.js";import"./dateformat-ec5521d1.js";import{v as Ae}from"./uuid-cf522c50.js";import{m as It,x as Te,y as nt}from"./lodash-es-876af2e5.js";import"./flatted-8b14da7d.js";import"./@fortawesome/vue-fontawesome-f597912a.js";import"./@fortawesome/fontawesome-svg-core-984d6dde.js";import"./vue-i18n-c3b0f366.js";import"./luxon-19e1de07.js";import"./@jsplumb/browser-ui-70b0a0d6.js";import"./@jsplumb/core-0a463c13.js";import"./@jsplumb/util-98a92a84.js";import"./@jsplumb/common-fe415eb9.js";import"./@jsplumb/connector-bezier-53998944.js";import"./@n8n/codemirror-lang-sql-9a304659.js";import"./codemirror-lang-n8n-expression-47e67c3a.js";import"./codemirror-lang-html-n8n-4223f8c7.js";import"./fast-json-stable-stringify-7a62a64e.js";import"./prettier-51497383.js";import"./esprima-next-8c7e8ff9.js";import"./@vueuse/core-60457efe.js";import"./timeago.js-a9e71aec.js";import"./qrcode.vue-338130ab.js";import"./file-saver-a0bd4f44.js";import"./vue-json-pretty-c769fa0d.js";import"./humanize-duration-706bc8a1.js";import"./v3-infinite-loading-8fbfd594.js";import"./vue-agile-19059f80.js";import"./copy-to-clipboard-067d994e.js";import"./vue3-touch-events-ee55ce04.js";import"./@fortawesome/free-solid-svg-icons-d79f1537.js";import"./@fortawesome/free-regular-svg-icons-74cb85f8.js";const At=30,Et=30,Lt=30,Rt=15,Mt=-15,Ye=-200,Ot=-5;function Vt(t,e){let o=0,n=0;for(;o<t.length&&n<e.length;){const r=t.charAt(o).toLowerCase(),p=e.charAt(n).toLowerCase();r===p&&o++,++n}return t.length!==0&&e.length!==0&&o===t.length}function Dt(t,e){return st(t,e,0,0,null,[],256,0,0,5)}function st(t,e,o,n,r,p,v,h,s,d){let g=0;if(++s>=d)return{matched:!1,outScore:g};if(o===t.length||n===e.length)return{matched:!1,outScore:g};let f=!1,i=[],l=0,a=!0;for(;o<t.length&&n<e.length;){if(t[o].toLowerCase()===e[n].toLowerCase()){if(h>=v)return{matched:!1,outScore:g};a&&r&&(p=[...r],a=!1);const y=[],c=st(t,e,o,n+1,p,y,v,h,s,d),_=c.outScore;c.matched&&((!f||_>l)&&(i=[...y],l=_),f=!0),p[h++]=n,++o}++n}const m=o===t.length;if(m){g=100;let y=Mt*p[0];y=y<Ye?Ye:y,g+=y;const c=e.length-h;g+=Ot*c;for(let _=0;_<h;_++){const u=p[_];if(_>0){const T=p[_-1];u===T+1&&(g+=At)}if(u>0){const T=e[u-1],b=e[u];T!==T.toUpperCase()&&b!==b.toLowerCase()&&(g+=Lt),(T==="_"||T===" ")&&(g+=Et)}else g+=Rt}return f&&(!m||l>g)?(p=[...i],g=l,{matched:!0,outScore:g}):m?{matched:!0,outScore:g}:{matched:!1,outScore:g}}return{matched:!1,outScore:g}}function Pt(t,e){if(t.hasOwnProperty(e))return t[e];const o=e.split(".");let n=t,r=0;for(;n&&r<o.length;)n=n[o[r]],r++;return n}function Bt(t,e,o){const n=e.reduce((r,p)=>{let v=[];o.forEach(({key:s,weight:d})=>{const g=Pt(p,s);Array.isArray(g)?v=v.concat(g.map(f=>({value:f,weight:d}))):typeof g=="string"&&v.push({value:g,weight:d})});const h=v.reduce((s,{value:d,weight:g})=>{if(!Vt(t,d))return s;const f=Dt(t,d);f.outScore*=g;const{matched:i,outScore:l}=f;return!s&&i||i&&s&&l>s.outScore?f:s},null);return h&&r.push({score:h.outScore,item:p}),r},[]);return n.sort((r,p)=>p.score-r.score),n}const Ht=H({name:"SlideTransition"});function Ut(t,e,o,n,r,p){return k(),L(Xe,{name:"slide"},{default:A(()=>[X(t.$slots,"default",{},void 0,!0)]),_:3})}const Kt=U(Ht,[["render",Ut],["__scopeId","data-v-88e2114c"]]),xt="data-keyboard-nav-id",We=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Enter","Escape","Tab"],q=ot("nodeCreatorKeyboardNavigation",()=>{const t=G([]),e=G(null),o=G({});function n(y){return y==null?void 0:y.getAttribute("data-keyboard-nav-type")}function r(y){return(y==null?void 0:y.getAttribute(xt))||void 0}async function p(){return new Promise(y=>{a(),setTimeout(()=>{t.value=Array.from(document.querySelectorAll("[data-keyboard-nav-type]")).map(c=>new WeakRef(c)),y()},0)})}function v(y,c){Object.values(o.value).filter(T=>T.keyboardKeys.includes(y)).forEach(T=>{if(!e.value)return;(T.condition===void 0||T.condition(n(c)||"",e.value))&&e.value&&T.handler(e.value,y)})}async function h(y){var N,C,D;const c=y.key;if(!We.includes(c))return;y.preventDefault(),y.stopPropagation(),await p();const _=t.value.findIndex(P=>r(P==null?void 0:P.deref())===e.value),u=(N=t.value[_])==null?void 0:N.deref(),T=c==="ArrowDown",b=c==="ArrowUp";if(u){if(T){const P=_<t.value.length-1?_+1:0;d((C=t.value[P])==null?void 0:C.deref())}if(b){const P=_>0?_-1:t.value.length-1;d((D=t.value[P])==null?void 0:D.deref())}v(c,u)}}function s(y){e.value=y}function d(y){const c=r(y);c&&(s(c),y!=null&&y.scrollIntoView&&(y==null||y.scrollIntoView({block:"center"})))}async function g(y){var c;await p(),d((c=t.value[y])==null?void 0:c.deref())}function f(){document.addEventListener("keydown",h,{capture:!0})}function i(){a(),document.removeEventListener("keydown",h,{capture:!0})}function l(y,c){c.keyboardKeys.forEach(_=>{if(We.includes(_))o.value={...o.value,[y]:c};else throw new Error(`Key ${_} is not supported`)})}function a(){t.value=[]}function m(){return t.value.findIndex(y=>r(y==null?void 0:y.deref())===e.value)}return{activeItemId:e,attachKeydownEvent:f,refreshSelectableItems:p,detachKeydownEvent:i,registerKeyHook:l,getActiveItemIndex:m,setActiveItemId:s,setActiveItemIndex:g}});function ee(t,e,o="node"){var r,p,v;const n={uuid:Ae(),key:t.name,subcategory:e??((v=(p=(r=t.codex)==null?void 0:r.subcategories)==null?void 0:p[Y])==null?void 0:v[0])??oe,properties:{...t},type:o};return n}function zt(t){return t.reduce((e,o)=>{var p,v,h,s;return(((v=(p=o.codex)==null?void 0:p.categories)==null?void 0:v.includes(Y))?((s=(h=o==null?void 0:o.codex)==null?void 0:h.subcategories)==null?void 0:s[Y])??[]:[oe]).forEach(d=>{e[d]||(e[d]=[]),e[d].push(ee(o,d))}),e},{})}function at(t){return t.sort((e,o)=>{var p,v,h,s;if(e.type!=="node"||o.type!=="node")return-1;const n=((v=(p=e.properties)==null?void 0:p.displayName)==null?void 0:v.toLowerCase())||e.key,r=((s=(h=o.properties)==null?void 0:h.displayName)==null?void 0:s.toLowerCase())||o.key;return n.localeCompare(r,void 0,{sensitivity:"base"})})}function Ge(t,e){const o=t.toLowerCase().replace("trigger","").trimEnd();return(Bt(o,e,[{key:"properties.displayName",weight:2},{key:"properties.codex.alias",weight:1}])||[]).map(({item:r})=>r)}const V=ot("nodeCreatorViewStacks",()=>{const t=j(),{getActiveItemIndex:e}=q(),o=G([]),n=$(()=>{const a=o.value[o.value.length-1];if(!(a!=null&&a.baselineItems))return a.items?d(a.items):[];if(a.search&&v.value){const m=v.value.length>0?v.value:a.baselineItems;return d(Ge(a.search||"",m))}return d(a.baselineItems)}),r=$(()=>{const a=o.value[o.value.length-1];return a?{...a,items:n.value,hasSearch:(a.baselineItems||[]).length>8||(a==null?void 0:a.hasSearch)}:{}}),p=$(()=>r.value.mode||F),v=$(()=>{const a=o.value[o.value.length-1];return!a||!a.searchItems?[]:a.searchItems.map(m=>ee(m,a.subcategory))}),h=$(()=>{const a=o.value[o.value.length-1];if(!a||!a.search)return[];const m=t.mergedNodes.map(c=>ee(c));return d(Ge(a.search||"",m)).filter(c=>!n.value.find(_=>_.key===c.key))});function s(){const a=o.value[o.value.length-1];if(!a||!r.value.uuid)return;const m=zt(t.mergedNodes);let y=(a==null?void 0:a.items)??m[(a==null?void 0:a.subcategory)??oe]??[];if((a.forceIncludeNodes??[]).length>0){const c=t.mergedNodes.filter(_=>{var u;return(u=a.forceIncludeNodes)==null?void 0:u.includes(_.name)}).map(_=>ee(_,a.subcategory));y.push(...c)}a.baseFilter&&(y=y.filter(a.baseFilter)),a.itemsMapper&&(y=y.map(a.itemsMapper)),a.items||at(y),i({baselineItems:y})}function d(a){return a.map(m=>({...m,uuid:`${m.key}-${Ae()}`}))}function g(a){r.value.uuid&&i({activeIndex:e()});const m=Ae();o.value.push({...a,uuid:m,transitionDirection:"in",activeIndex:0}),s()}function f(){r.value.uuid&&(o.value.pop(),i({transitionDirection:"out"}))}function i(a){const m=o.value[o.value.length-1],y=o.value.findIndex(c=>c.uuid===m.uuid);m&&Object.keys(a).forEach(c=>{const _=c;o.value[y]={...o.value[y],[c]:a[_]}})}function l(){o.value=[]}return{viewStacks:o,activeViewStack:r,activeViewStackMode:p,globalSearchItemsDiff:h,resetViewStacks:l,updateCurrentViewStack:i,pushViewStack:g,popViewStack:f}}),rt="placeholder_recommended";function Yt(...t){return yt.baseText(...t)}const te=It(Yt,(...t)=>JSON.stringify(t)),Ce={"n8n-nodes-base.hubspotTrigger":(t,e)=>{var n,r,p;const o=(n=t==null?void 0:t.options)==null?void 0:n[0];return(p=(r=o==null?void 0:o.values[0])==null?void 0:r.options)==null?void 0:p.map(v=>({...ie(e),actionKey:v.value,displayName:te("nodeCreator.actionsCategory.onEvent",{interpolate:{event:Te(v.name)}}),description:v.description||"",displayOptions:t.displayOptions,values:{eventsUi:{eventValues:[{name:v.value}]}}}))}};function ie(t,e){const o=t.group.includes("trigger"),n=te(o?"nodeCreator.actionsCategory.triggers":"nodeCreator.actionsCategory.actions");return{name:t.name,group:t.group,codex:{label:e||"",categories:[n]},iconUrl:t.iconUrl,icon:t.icon,defaults:t.defaults}}function Wt(t){if(t.properties.find(r=>r.name==="resource"))return[];const e=t.properties.find(r=>{var p;return((p=r.name)==null?void 0:p.toLowerCase())==="operation"});if(!e||!e.options)return[];const n=e.options.filter(r=>!["*",""," "].includes(r.name)).map(r=>({...ie(t),actionKey:r.value,displayName:r.action??Te(r.name),description:r.description??"",displayOptions:e.displayOptions,values:{[e.name]:e.type==="multiOptions"?[r.value]:r.value}}));return n.length===0?[]:n}function Gt(t){var h,s;const e=["event","events","trigger on"],o=(h=t.displayName)==null?void 0:h.toLowerCase().includes("trigger"),n=t.properties.find(d=>{var g;return e.includes((g=d.displayName)==null?void 0:g.toLowerCase())});if(!o)return[];if(!n||!n.options)return[{...ie(t),actionKey:rt,displayName:te("nodeCreator.actionsCategory.onNewEvent",{interpolate:{event:t.displayName.replace("Trigger","").trimEnd()}}),description:""}];const r=n.options.filter(d=>!["*",""," "].includes(d.name));return((s=Ce[t.name])==null?void 0:s.call(Ce,n,t))??r.map(d=>({...ie(t),actionKey:d.value,displayName:d.action??te("nodeCreator.actionsCategory.onEvent",{interpolate:{event:Te(d.name)}}),description:d.description||"",displayOptions:n.displayOptions,values:{[n.name]:n.type==="multiOptions"?[d.value]:d.value}}))}function jt(t){const e=[];return t.properties.filter(n=>{var r;return((r=n.displayName)==null?void 0:r.toLowerCase())==="resource"}).forEach(n=>{(n.options||[]).filter(r=>r.value!==de).forEach((r,p,v)=>{const h=v.length===1,s=t.properties.find(g=>{var f,i,l;return g.name==="operation"&&(((l=(i=(f=g.displayOptions)==null?void 0:f.show)==null?void 0:i.resource)==null?void 0:l.includes(r.value))||h)});if(!(s!=null&&s.options))return;const d=(s.options||[]).map(g=>{var l;const f=g.action??`${r.name} ${Te(g.name)}`,i=h?{show:{resource:[(l=v[0])==null?void 0:l.value]}}:s==null?void 0:s.displayOptions;return{...ie(t,`${r.name} ${te("nodeCreator.actionsCategory.actions")}`),actionKey:g.value,description:(g==null?void 0:g.description)??"",displayOptions:i,values:{operation:(s==null?void 0:s.type)==="multiOptions"?[g.value]:g.value},displayName:f,group:["trigger"]}});e.push(...d)})}),e}function Ft(){function t(r){return r?[...Gt(r),...Wt(r),...jt(r)]:[]}function e(r){return r.length<=1?[]:r.filter((p,v,h)=>{if(p.actionKey===de)return!1;const d=p.actionKey===rt;return!d||d&&h.length>1})}function o(r){const{displayName:p,defaults:v,description:h,name:s,group:d,icon:g,iconUrl:f,codex:i}=r;return{displayName:p,defaults:v,description:h,name:s,group:d,icon:g,iconUrl:f,codex:i}}function n(r){const p=[...r],v={},h=[];return p.filter(s=>!s.group.includes("trigger")).forEach(s=>{const d=t(s);v[s.name]=d,h.push(o(s))}),p.filter(s=>s.group.includes("trigger")).forEach(s=>{const d=s.name.replace("Trigger",""),g=t(s),f=(v==null?void 0:v[d])||[],i=h.find(l=>l.name===d);if(i&&(f==null?void 0:f.length)>0){const l=e([...f,...g]);v[d]=l,i.description=s.description}else v[s.name]=e(g),h.push(o(s))}),{actions:v,mergedNodes:h}}return{generateMergedNodesAndActions:n}}function it(){const t=ne();return{value:F,title:t.baseText("nodeCreator.triggerHelperPanel.selectATrigger"),subtitle:t.baseText("nodeCreator.triggerHelperPanel.selectATriggerDescription"),items:[{key:oe,type:"subcategory",properties:{forceIncludeNodes:[Q,ft],title:"App Trigger Nodes",icon:"satellite-dish"}},{key:$e,type:"node",category:[Y],properties:{group:[],name:$e,displayName:t.baseText("nodeCreator.triggerHelperPanel.scheduleTriggerDisplayName"),description:t.baseText("nodeCreator.triggerHelperPanel.scheduleTriggerDescription"),icon:"fa:clock"}},{key:Q,type:"node",category:[Y],properties:{group:[],name:Q,displayName:t.baseText("nodeCreator.triggerHelperPanel.webhookTriggerDisplayName"),description:t.baseText("nodeCreator.triggerHelperPanel.webhookTriggerDescription"),iconData:{type:"file",icon:"webhook",fileBuffer:"/static/webhook-icon.svg"}}},{key:Ne,type:"node",category:[Y],properties:{group:[],name:Ne,displayName:t.baseText("nodeCreator.triggerHelperPanel.manualTriggerDisplayName"),description:t.baseText("nodeCreator.triggerHelperPanel.manualTriggerDescription"),icon:"fa:mouse-pointer"}},{key:Be,type:"node",category:[Y],properties:{group:[],name:Be,displayName:t.baseText("nodeCreator.triggerHelperPanel.workflowTriggerDisplayName"),description:t.baseText("nodeCreator.triggerHelperPanel.workflowTriggerDescription"),icon:"fa:sign-out-alt"}},{type:"subcategory",key:He,category:Y,properties:{title:He,icon:"folder-open"}}]}}function ct(){const t=ne();return{value:Le,title:t.baseText("nodeCreator.triggerHelperPanel.whatHappensNext"),items:[{key:oe,type:"subcategory",properties:{title:"App Regular Nodes",icon:"globe"}},{type:"subcategory",key:Ue,category:Y,properties:{title:Ue,icon:"pen"}},{type:"subcategory",key:Ke,category:Y,properties:{title:Ke,icon:"toolbox"}},{type:"subcategory",key:xe,category:Y,properties:{title:xe,icon:"code-branch"}},{type:"subcategory",key:ze,category:Y,properties:{title:ze,icon:"file-alt"}},{key:F,type:"view",properties:{title:t.baseText("nodeCreator.triggerHelperPanel.addAnotherTrigger"),icon:"bolt",description:t.baseText("nodeCreator.triggerHelperPanel.addAnotherTriggerDescription")}}]}}const qt=["placeholder","value"],Xt=H({__name:"SearchBar",props:{placeholder:{default:""},modelValue:{default:""}},emits:["update:modelValue"],setup(t,{expose:e,emit:o}){const n=Re({inputRef:null});function r(){var s;(s=n.inputRef)==null||s.focus()}function p(s){const d=s.target;o("update:modelValue",d.value)}function v(){o("update:modelValue","")}ve(()=>{ue("nodeCreator_searchBar.mount",pe(),{inputRef:n.inputRef}),setTimeout(r,0)}),Ze(()=>{var s;(s=n.inputRef)==null||s.remove()});const{inputRef:h}=Me(n);return e({focus:r}),(s,d)=>{const g=B("font-awesome-icon");return k(),R("div",{class:w(s.$style.searchContainer),"data-test-id":"search-bar"},[I("div",{class:w({[s.$style.prefix]:!0,[s.$style.active]:s.modelValue.length>0})},[O(g,{icon:"search",size:"sm"})],2),I("div",{class:w(s.$style.text)},[I("input",{placeholder:s.placeholder,value:s.modelValue,class:w(s.$style.input),ref_key:"inputRef",ref:h,autofocus:"","data-test-id":"node-creator-search-bar",tabindex:"0",onInput:p},null,42,qt)],2),s.modelValue.length>0?(k(),R("div",{key:0,class:w(s.$style.suffix),onClick:v},[I("button",{class:w([s.$style.clear,s.$style.clickable])},[O(g,{icon:"times-circle"})],2)],2)):M("",!0)],2)}}}),Zt="_searchContainer_1wh9v_5",Qt="_prefix_1wh9v_21",Jt="_active_1wh9v_26",eo="_text_1wh9v_30",to="_suffix_1wh9v_46",oo="_clear_1wh9v_52",no={searchContainer:Zt,prefix:Qt,active:Jt,text:eo,suffix:to,clear:oo},so={$style:no},ao=U(Xt,[["__cssModules",so]]),be=()=>{const t=j(),e=_e(),o=$(()=>({actions:(e==null?void 0:e.proxy.$locale.baseText("nodeCreator.actionsCategory.actions"))??"",triggers:(e==null?void 0:e.proxy.$locale.baseText("nodeCreator.actionsCategory.triggers"))??""}));function n(f){const i=[Q,$e];return t.mergedNodes.filter(a=>i.some(m=>m===a.name)).map(a=>{const m=ee(a,f,"action");if(m.type==="action"){const c=`nodeCreator.actionsPlaceholderNode.${a.name.replace("n8n-nodes-base.","")}`,_=e==null?void 0:e.proxy.$locale.baseText(c);_!==c&&(m.properties.displayName=_)}return m})}function r(f,i){return f.filter(l=>l.type==="action"&&l.properties.codex.categories.includes(i))}function p(f){var y,c,_,u;const i=at([...f]),l=new Set;for(const T of i){if(T.type!=="action")continue;const b=(c=(y=T.properties)==null?void 0:y.codex)==null?void 0:c.label;l.add(b)}if(l.size<=1)return i;const a=new Map;for(let T=0;T<i.length;T++){const b=i[T];if(b.type!=="action")continue;const N=(u=(_=b.properties)==null?void 0:_.codex)==null?void 0:u.label;a.has(N)||a.set(N,T)}let m=0;for(const T of l){const b={uuid:T,type:"label",key:T,subcategory:i[0].key,properties:{key:T}},N=a.get(T)+m;i.splice(N,0,b),m++}return i}function v(f,i,l=!0){const a=r(f,i);return l?p(a):a}function h(f){const i=f.displayOptions,l=Object.keys((i==null?void 0:i.show)||{}).reduce((a,m)=>{var y,c;return a[m]=(c=(y=i==null?void 0:i.show)==null?void 0:y[m])==null?void 0:c[0],a},{});return{name:f.displayName,key:f.name,value:{...f.values,...l}}}function s(f){if(!f)return[];const{selectedView:i,openSource:l}=j(),{workflowTriggerNodes:a}=Se(),m=je().isTriggerNode(f),y=a.length>0,c=i===F,_=f===mt;return![ke.PLUS_ENDPOINT,ke.NODE_CONNECTION_ACTION,ke.NODE_CONNECTION_DROP].includes(l)&&!m&&!y&&c&&!_?[Ne,f]:[f]}function d(f,i,l=""){const{$onAction:a}=Se(),m=a(({name:y,after:c,store:{setLastNodeParameters:_},args:u})=>{y!=="addNode"||u[0].type!==f.key||c(()=>{_(f),i&&g(f,i,l),m()})});return m}function g(f,i,l){const a={node_type:f.key,action:f.name,source_mode:l.toLowerCase(),resource:f.value.resource||""};ue("nodeCreateList.addAction",pe(),a),i==null||i.trackNodesPanel("nodeCreateList.addAction",a)}return{actionsCategoryLocales:o,getPlaceholderTriggerActions:n,parseCategoryActions:v,getNodeTypesWithManualTrigger:s,getActionData:h,setAddedNodeActionParameters:d}},ro=["innerHTML"],io=H({__name:"NodeItem",props:{nodeType:{},subcategory:{},active:{type:Boolean,default:!1}},setup(t){const e=t,o=ne(),n=qe(),{actions:r}=j(),{getNodeTypesWithManualTrigger:p}=be(),v=G(!1),h=G({x:-100,y:-100}),s=G(null),d=$(()=>o.headerText({key:`headers.${a.value}.description`,fallback:e.nodeType.description})),g=$(()=>i.value),f=$(()=>i.value?"node-creator-action-item":"node-creator-node-item"),i=$(()=>l.value.length>1),l=$(()=>r[e.nodeType.name]||[]),a=$(()=>o.shortNodeType(e.nodeType.name)||""),m=$(()=>({top:`${h.value.y}px`,left:`${h.value.x}px`})),y=$(()=>vt(e.nodeType.name)),c=$(()=>{const C=e.nodeType.displayName.trimEnd();return o.headerText({key:`headers.${a.value}.displayName`,fallback:i.value?C.replace("Trigger",""):C})}),_=$(()=>e.nodeType.group.includes("trigger")&&!i.value);function u(C){document.body.addEventListener("dragover",T);const{pageX:D,pageY:P}=C;C.dataTransfer&&(C.dataTransfer.effectAllowed="copy",C.dataTransfer.dropEffect="copy",C.dataTransfer.setDragImage(s.value,0,0),C.dataTransfer.setData("nodeTypeName",p(e.nodeType.name).join(","))),v.value=!0,h.value={x:D,y:P}}function T(C){if(!v.value||C.pageX===0&&C.pageY===0)return;const[D,P]=Fe([],[C.pageX-ye/2,C.pageY-ye/2]);h.value={x:D,y:P}}function b(C){document.body.removeEventListener("dragover",T),v.value=!1,setTimeout(()=>{h.value={x:-100,y:-100}},300)}function N(C){C.target.localName==="a"&&n.track("user clicked cnr docs link",{source:"nodes panel node"})}return(C,D)=>{const P=B("n8n-node-creator-node");return k(),L(P,{draggable:!g.value,onDragstart:u,onDragend:b,class:w(C.$style.nodeItem),description:C.subcategory!==K(oe)?d.value:"",title:c.value,"show-action-arrow":g.value,"is-trigger":_.value,"data-test-id":f.value},fe({icon:A(()=>[O(ge,{nodeType:C.nodeType},null,8,["nodeType"])]),dragContent:A(()=>[I("div",{class:w(C.$style.draggableDataTransfer),ref_key:"draggableDataTransfer",ref:s},null,2),Qe(I("div",{class:w(C.$style.draggable),style:Oe(m.value)},[O(ge,{nodeType:C.nodeType,onClickCapture:D[0]||(D[0]=he(()=>{},["stop"])),size:40,shrink:!1},null,8,["nodeType"])],6),[[Je,v.value]])]),_:2},[y.value?{name:"tooltip",fn:A(()=>[I("p",{class:w(C.$style.communityNodeIcon),innerHTML:K(o).baseText("generic.communityNode.tooltip",{interpolate:{packageName:C.nodeType.name.split(".")[0],docURL:K(_t)}}),onClick:N},null,10,ro)]),key:"0"}:void 0]),1032,["draggable","class","description","title","show-action-arrow","is-trigger","data-test-id"])}}}),co="_nodeItem_nbf3g_5",lo="_communityNodeIcon_nbf3g_13",uo="_draggable_nbf3g_17",po="_draggableDataTransfer_nbf3g_31",go={nodeItem:co,communityNodeIcon:lo,draggable:uo,draggableDataTransfer:po},yo={$style:go},fo=U(io,[["__cssModules",yo]]),mo=H({__name:"SubcategoryItem",props:{item:{}},setup(t){const e=t,o=ne(),n=$(()=>nt(e.item.subcategory||e.item.title));return(r,p)=>{const v=B("n8n-node-icon"),h=B("n8n-node-creator-node");return k(),L(h,{class:w(r.$style.subCategory),title:K(o).baseText(`nodeCreator.subcategoryNames.${n.value}`),isTrigger:!1,description:K(o).baseText(`nodeCreator.subcategoryDescriptions.${n.value}`),showActionArrow:!0},{icon:A(()=>[O(v,{type:"icon",name:r.item.icon,circle:!1,showTooltip:!1},null,8,["name"])]),_:1},8,["class","title","description"])}}}),vo="_subCategory_1js79_5",_o={subCategory:vo},ho={$style:_o},To=U(mo,[["__cssModules",ho]]),bo=["textContent"],wo=H({__name:"LabelItem",props:{item:{}},setup(t){return(e,o)=>(k(),R("div",{class:w(e.$style.label)},[I("span",{class:w(e.$style.name),textContent:W(e.item.key)},null,10,bo)],2))}}),ko="_label_92wv5_5",Co={label:ko},$o={$style:Co},No=U(wo,[["__cssModules",$o]]),So=H({__name:"ActionItem",props:{nodeType:{},action:{}},setup(t){const e=t,o=_e(),n=o==null?void 0:o.proxy.$telemetry,{getActionData:r,getNodeTypesWithManualTrigger:p,setAddedNodeActionParameters:v}=be(),{activeViewStack:h}=V(),s=Re({dragging:!1,draggablePosition:{x:-100,y:-100},storeWatcher:null,draggableDataTransfer:null}),d=$(()=>({top:`${s.draggablePosition.y}px`,left:`${s.draggablePosition.x}px`})),g=$(()=>r(e.action)),f=c=>{var _;return((_=c.name)==null?void 0:_.toLowerCase().includes("trigger"))||c.name===Q};function i(c){var T;document.body.addEventListener("dragover",l);const{pageX:_,pageY:u}=c;c.dataTransfer&&(c.dataTransfer.effectAllowed="copy",c.dataTransfer.dropEffect="copy",c.dataTransfer.setDragImage(s.draggableDataTransfer,0,0),c.dataTransfer.setData("nodeTypeName",p((T=g.value)==null?void 0:T.key).join(",")),n&&(s.storeWatcher=v(g.value,n,h.rootView)),document.body.addEventListener("dragend",a)),s.dragging=!0,s.draggablePosition={x:_,y:u}}function l(c){if(!s.dragging||c.pageX===0&&c.pageY===0)return;const[_,u]=Fe([],[c.pageX-ye/2,c.pageY-ye/2]);s.draggablePosition={x:_,y:u}}function a(c){s.storeWatcher&&s.storeWatcher(),document.body.removeEventListener("dragend",a),document.body.removeEventListener("dragover",l),s.dragging=!1,setTimeout(()=>{s.draggablePosition={x:-100,y:-100}},300)}const{draggableDataTransfer:m,dragging:y}=Me(s);return(c,_)=>{const u=B("n8n-node-creator-node");return k(),L(u,{onDragstart:i,onDragend:a,draggable:"",class:w(c.$style.action),title:c.action.displayName,isTrigger:f(c.action),"data-keyboard-nav":"true"},{dragContent:A(()=>[I("div",{class:w(c.$style.draggableDataTransfer),ref_key:"draggableDataTransfer",ref:m},null,2),Qe(I("div",{class:w(c.$style.draggable),style:Oe(d.value)},[O(ge,{nodeType:c.nodeType,onClickCapture:_[0]||(_[0]=he(()=>{},["stop"])),size:40,shrink:!1},null,8,["nodeType"])],6),[[Je,K(y)]])]),icon:A(()=>[O(ge,{nodeType:c.action},null,8,["nodeType"])]),_:1},8,["class","title","isTrigger"])}}}),Io="_action_vsx3h_5",Ao="_nodeIcon_vsx3h_17",Eo="_draggable_vsx3h_21",Lo="_draggableDataTransfer_vsx3h_35",Ro={action:Io,nodeIcon:Ao,draggable:Eo,draggableDataTransfer:Lo},Mo={$style:Ro},Oo=U(So,[["__cssModules",Mo]]),Vo=H({__name:"ViewItem",props:{view:{}},setup(t){return(e,o)=>{const n=B("n8n-node-icon"),r=B("n8n-node-creator-node");return k(),L(r,{class:w(e.$style.view),title:e.view.title,isTrigger:!1,description:e.view.description,showActionArrow:!0},{icon:A(()=>[O(n,{type:"icon",name:e.view.icon,circle:!1,showTooltip:!1},null,8,["name"])]),_:1},8,["class","title","description"])}}}),Do="_view_5t09j_5",Po={view:Do},Bo={$style:Po},Ho=U(Vo,[["__cssModules",Bo]]),Uo=["data-keyboard-nav-type","data-keyboard-nav-id","onClick"],Ko={key:0},xo=20,zo=5,Yo=H({__name:"ItemsRenderer",props:{elements:{default:()=>[]},activeIndex:{},disabled:{type:Boolean},lazyRender:{type:Boolean,default:!0}},emits:["selected","dragstart","dragend"],setup(t,{emit:e}){const o=t,n=G([]),r=G(0),p=$(()=>{var i;return(i=q())==null?void 0:i.activeItemId});function v(){if(o.elements.length<=xo||o.lazyRender===!1){n.value=o.elements;return}n.value.length<o.elements.length&&(n.value.push(...o.elements.slice(n.value.length,n.value.length+zo)),r.value=window.requestAnimationFrame(v))}function h(i,l,a){o.disabled||e(i||"dragstart",l,a)}function s(i){i.style.height="0"}function d(i){i.style.height=`${i.scrollHeight}px`}function g(i){i.style.height=`${i.scrollHeight}px`}function f(i){i.style.height="0"}return ve(()=>{v()}),et(()=>{window.cancelAnimationFrame(r.value),n.value=[]}),J(()=>o.elements,()=>{window.cancelAnimationFrame(r.value),n.value=[],v()}),(i,l)=>{const a=B("n8n-loading");return i.elements.length>0?(k(),R("div",{key:0,class:w(i.$style.itemsRenderer),name:"accordion",onBeforeEnter:s,onEnter:d,onBeforeLeave:g,onLeave:f},[X(i.$slots,"default"),(k(!0),R(kt,null,Ct(i.elements,m=>(k(),R("div",{key:m.uuid,"data-test-id":"item-iterator-item",class:w({clickable:!i.disabled,[i.$style.active]:p.value===m.uuid,[i.$style.iteratorItem]:!0,[i.$style[m.type]]:!0}),ref_for:!0,ref:"iteratorItems","data-keyboard-nav-type":m.type!=="label"?m.type:void 0,"data-keyboard-nav-id":m.uuid,onClick:y=>h("selected",m)},[n.value.includes(m)?(k(),R("div",Ko,[m.type==="label"?(k(),L(No,{key:0,item:m},null,8,["item"])):M("",!0),m.type==="subcategory"?(k(),L(To,{key:1,item:m.properties},null,8,["item"])):M("",!0),m.type==="node"?(k(),L(fo,{key:2,nodeType:m.properties,active:!0,subcategory:m.subcategory},null,8,["nodeType","subcategory"])):M("",!0),m.type==="action"?(k(),L(Oo,{key:3,nodeType:m.properties,action:m.properties,active:!0},null,8,["nodeType","action"])):m.type==="view"?(k(),L(Ho,{key:4,view:m.properties,class:w(i.$style.viewItem)},null,8,["view","class"])):M("",!0)])):(k(),L(a,{key:1,loading:!0,rows:1,variant:"p",class:w(i.$style.itemSkeleton)},null,8,["class"]))],10,Uo))),128))],34)):(k(),R("div",{key:1,class:w(i.$style.empty)},[X(i.$slots,"empty")],2))}}}),Wo="_itemSkeleton_7kw47_5",Go="_iteratorItem_7kw47_9",jo="_label_7kw47_21",Fo="_category_7kw47_21",qo="_active_7kw47_24",Xo="_empty_7kw47_28",Zo="_itemsRenderer_7kw47_32",Qo="_view_7kw47_41",Jo={itemSkeleton:Wo,iteratorItem:Go,label:jo,category:Fo,active:qo,empty:Xo,itemsRenderer:Zo,view:Qo},en={$style:Jo},Ve=U(Yo,[["__cssModules",en]]),tn=["textContent"],on=H({__name:"CategoryItem",props:{expanded:{type:Boolean,default:!0},active:{type:Boolean},count:{},name:{},isTrigger:{type:Boolean}},setup(t){const e=t,o=$(()=>{const n=e.count||0;return n>0?`${e.name} (${n})`:e.name});return(n,r)=>{const p=B("font-awesome-icon");return k(),R("div",me({class:n.$style.categoryWrapper},n.$attrs,{"data-keyboard-nav":"true","data-test-id":"node-creator-category-item"}),[I("div",{class:w({[n.$style.category]:!0,[n.$style.active]:n.active})},[I("span",{class:w(n.$style.name)},[I("span",{textContent:W(o.value)},null,8,tn),n.isTrigger?(k(),L(p,{key:0,icon:"bolt",size:"xs",class:w(n.$style.triggerIcon)},null,8,["class"])):M("",!0),X(n.$slots,"default")],2),n.expanded?(k(),L(p,{key:0,icon:"chevron-down",class:w(n.$style.arrow)},null,8,["class"])):(k(),L(p,{key:1,class:w(n.$style.arrow),icon:"chevron-up"},null,8,["class"]))],2)],16)}}}),nn="_triggerIcon_jzfdi_5",sn="_category_jzfdi_10",an="_active_jzfdi_31",rn="_name_jzfdi_35",cn="_arrow_jzfdi_40",ln={triggerIcon:nn,category:sn,active:an,name:rn,arrow:cn},dn={$style:ln},un=U(on,[["__cssModules",dn]]),pn=["data-category-collapsed"],gn=["innerHTML"],yn=H({__name:"CategorizedItemsRenderer",props:{elements:{default:()=>[]},category:{},disabled:{type:Boolean},activeIndex:{},isTriggerCategory:{type:Boolean},mouseOverTooltip:{},expanded:{type:Boolean}},setup(t){const e=t,o=_e(),{popViewStack:n}=V(),{registerKeyHook:r}=q(),{workflowId:p}=Se(),v=$(()=>{var l;return(l=q())==null?void 0:l.activeItemId}),h=$(()=>e.elements.filter(({type:l})=>l==="action").length),s=G(e.expanded??!1);function d(){g(!s.value)}function g(l){s.value=l,s.value&&(o==null||o.proxy.$telemetry.trackNodesPanel("nodeCreateList.onCategoryExpanded",{category_name:e.category,workflow_id:p}))}function f(){s.value||g(!0)}function i(){if(!s.value){n();return}g(!1)}return J(()=>e.elements,()=>{g(!0)}),r(`CategoryRight_${e.category}`,{keyboardKeys:["ArrowRight"],condition:(l,a)=>l==="category"&&e.category===a,handler:f}),r(`CategoryToggle_${e.category}`,{keyboardKeys:["Enter"],condition:(l,a)=>l==="category"&&e.category===a,handler:d}),r(`CategoryLeft_${e.category}`,{keyboardKeys:["ArrowLeft"],condition:(l,a)=>l==="category"&&e.category===a,handler:i}),(l,a)=>{const m=B("n8n-icon"),y=B("n8n-tooltip");return k(),R("div",{class:w(l.$style.categorizedItemsRenderer),"data-category-collapsed":!s.value},[O(un,{class:w(l.$style.categoryItem),name:l.category,disabled:l.disabled,active:v.value===l.category,count:h.value,expanded:s.value,isTrigger:l.isTriggerCategory,"data-keyboard-nav-type":"category","data-keyboard-nav-id":l.category,onClick:d},{default:A(()=>[l.mouseOverTooltip?(k(),R("span",{key:0,class:w(l.$style.mouseOverTooltip)},[O(y,{placement:"top","popper-class":l.$style.tooltipPopper},{content:A(()=>[I("div",{innerHTML:l.mouseOverTooltip},null,8,gn)]),default:A(()=>[O(m,{icon:"question-circle",size:"small"})]),_:1},8,["popper-class"])],2)):M("",!0)]),_:1},8,["class","name","disabled","active","count","expanded","isTrigger","data-keyboard-nav-id"]),s.value&&h.value>0&&l.$slots.default?(k(),R("div",{key:0,class:w(l.$style.contentSlot)},[X(l.$slots,"default")],2)):M("",!0),s.value?(k(),L(Ve,me({key:1},l.$attrs,{elements:l.elements,isTrigger:l.isTriggerCategory}),{default:A(()=>[]),empty:A(()=>[X(l.$slots,"empty",tt($t({elements:l.elements})))]),_:3},16,["elements","isTrigger"])):M("",!0)],10,pn)}}}),fn="_mouseOverTooltip_1c8m2_5",mn="_categorizedItemsRenderer_1c8m2_12",vn="_tooltipPopper_1c8m2_16",_n="_contentSlot_1c8m2_20",hn={mouseOverTooltip:fn,categorizedItemsRenderer:mn,tooltipPopper:vn,contentSlot:_n},Tn={$style:hn},Ee=U(yn,[["__cssModules",Tn]]),bn=["innerHTML"],wn=["innerHTML"],kn=["innerHTML"],Cn=["innerHTML"],$n=["onClick","innerHTML"],Nn=H({__name:"ActionsMode",emits:{nodeTypeSelected:t=>!0},setup(t,{emit:e}){const o=_e(),n=o==null?void 0:o.proxy.$telemetry,{userActivated:r}=ht(),{popViewStack:p,updateCurrentViewStack:v}=V(),{registerKeyHook:h}=q(),{getNodeTypesWithManualTrigger:s,setAddedNodeActionParameters:d,getActionData:g,getPlaceholderTriggerActions:f,parseCategoryActions:i,actionsCategoryLocales:l}=be(),a=$(()=>ce(u.value,l.value.triggers,!1)),m=$(()=>ce(u.value,l.value.actions,!T.value)),y=$(()=>ce(V().activeViewStack.baselineItems||[],l.value.triggers,!1)),c=$(()=>ce(V().activeViewStack.baselineItems||[],l.value.actions,!T.value)),_=$(()=>a.value.length||T.value?l.value.triggers:`${l.value.triggers} (${C.length})`),u=$(()=>(V().activeViewStack.items||[]).filter(S=>S.properties.actionKey!==de)),T=$(()=>V().activeViewStack.search),b=$(()=>V().activeViewStack.subcategory),N=$(()=>V().activeViewStack.rootView),C=f(b.value||""),D=$(()=>i(V().activeViewStack.baselineItems||[],l.value.triggers,!T.value).length===0),P=$(()=>(V().activeViewStack.baselineItems||[]).some(x=>(x.properties.actionKey??"")===de)===!0),Z=$(()=>N.value===F);h("ActionsKeyRight",{keyboardKeys:["ArrowRight","Enter"],condition:S=>S==="action",handler:dt}),h("ActionsKeyLeft",{keyboardKeys:["ArrowLeft"],condition:S=>S==="action",handler:lt});function ce(S,E,x=!1){return i(S,E,x)}function lt(){p()}function dt(S){const x=[...u.value,...C].find(z=>z.uuid===S);x&&le(x)}function le(S){const E=g(S.properties);if(C.some(z=>z.key===S.key)&&Z.value){const z=u.value[0].key;e("nodeTypeSelected",[E.key,z])}else e("nodeTypeSelected",s(E.key));n&&d(E,n,N.value)}function ut(){var se,ae,Pe;const S=V().activeViewStack,E=(se=S.baselineItems||[])==null?void 0:se.filter(we=>we.key.toLowerCase().includes("trigger")).length,z={app_identifier:[...u.value,...C][0].key,actions:(ae=S.baselineItems||[])==null?void 0:ae.map(we=>we.properties.displayName),regular_action_count:((Pe=S.baselineItems||[])==null?void 0:Pe.length)-E,trigger_action_count:E};ue("nodeCreateList.onViewActions",pe(),z),n==null||n.trackNodesPanel("nodeCreateList.onViewActions",z)}function De(){v({search:""})}function pt(){const S={name:"",key:Ie,value:{authentication:"predefinedCredentialType"}};e("nodeTypeSelected",[Ie]),n&&d(S);const E=u.value[0].key;ue("nodeCreateList.onActionsCustmAPIClicked",pe(),{app_identifier:E}),n==null||n.trackNodesPanel("nodeCreateList.onActionsCustmAPIClicked",{app_identifier:E})}const gt=H({props:{rootView:{type:String}},setup(S,{slots:E}){return()=>{var x,z,se,ae;return Nt("div",{},S.rootView===Le?[(x=E.actions)==null?void 0:x.call(E),(z=E.triggers)==null?void 0:z.call(E)]:[(se=E.triggers)==null?void 0:se.call(E),(ae=E.actions)==null?void 0:ae.call(E)])}}});return ve(()=>{ut()}),(S,E)=>{const x=B("n8n-callout"),z=B("n8n-info-tip");return k(),R("div",{class:w(S.$style.container)},[O(K(gt),{rootView:N.value},fe({_:2},[Z.value||y.value.length!==0?{name:"triggers",fn:A(()=>[O(Ee,{elements:a.value,category:_.value,mouseOverTooltip:S.$locale.baseText("nodeCreator.actionsTooltip.triggersStartWorkflow"),isTriggerCategory:"",expanded:Z.value||m.value.length===0,onSelected:le},fe({_:2},[D.value?{name:"empty",fn:A(()=>[D.value?(k(),L(x,{key:0,theme:"info",iconless:"",slim:"","data-test-id":"actions-panel-no-triggers-callout"},{default:A(()=>[I("span",{innerHTML:S.$locale.baseText("nodeCreator.actionsCallout.noTriggerItems",{interpolate:{nodeName:b.value}})},null,8,bn)]),_:1})):M("",!0),O(Ve,{onSelected:le,elements:K(C)},null,8,["elements"])]),key:"0"}:{name:"empty",fn:A(()=>[I("p",{class:w(S.$style.resetSearch),innerHTML:S.$locale.baseText("nodeCreator.actionsCategory.noMatchingTriggers"),onClick:De},null,10,["innerHTML"])]),key:"1"}]),1032,["elements","category","mouseOverTooltip","expanded"])]),key:"0"}:void 0,!Z.value||c.value.length!==0?{name:"actions",fn:A(()=>[O(Ee,{elements:m.value,category:K(l).actions,mouseOverTooltip:S.$locale.baseText("nodeCreator.actionsTooltip.actionsPerformStep"),expanded:!Z.value||a.value.length===0,onSelected:le},{empty:A(()=>[T.value?(k(),R("p",{key:1,class:w(S.$style.resetSearch),innerHTML:S.$locale.baseText("nodeCreator.actionsCategory.noMatchingActions"),onClick:De,"data-test-id":"actions-panel-no-matching-actions"},null,10,Cn)):(k(),L(z,{key:0,theme:"info",type:"note",class:w(S.$style.actionsEmpty)},{default:A(()=>[I("span",{innerHTML:S.$locale.baseText("nodeCreator.actionsCallout.noActionItems",{interpolate:{nodeName:b.value}})},null,8,kn)]),_:1},8,["class"]))]),default:A(()=>[!K(r)&&Z.value?(k(),L(x,{key:0,theme:"info",iconless:"",slim:"","data-test-id":"actions-panel-activation-callout"},{default:A(()=>[I("span",{innerHTML:S.$locale.baseText("nodeCreator.actionsCallout.triggersStartWorkflow")},null,8,wn)]),_:1})):M("",!0)]),_:1},8,["elements","category","mouseOverTooltip","expanded"])]),key:"1"}:void 0]),1032,["rootView"]),P.value?(k(),R("div",{key:0,class:w(S.$style.apiHint)},[I("span",{onClick:he(pt,["prevent"]),innerHTML:S.$locale.baseText("nodeCreator.actionsList.apiCall",{interpolate:{node:b.value}})},null,8,$n)],2)):M("",!0)],2)}}}),Sn="_container_1tz2w_5",In="_resetSearch_1tz2w_11",An="_actionsEmpty_1tz2w_25",En="_apiHint_1tz2w_33",Ln={container:Sn,resetSearch:In,actionsEmpty:An,apiHint:En},Rn={$style:Ln},Mn=U(Nn,[["__cssModules",Rn]]),On={},Vn={width:"75px",height:"75px",viewBox:"0 0 75 75",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},Dn=St('<title>no-nodes-keyart</title><g id="Nodes-panel-prototype-V2.1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="nodes-panel-(component)" transform="translate(-2085.000000, -352.000000)"><g id="nodes_panel" transform="translate(1880.000000, 151.000000)"><g id="Panel" transform="translate(50.000000, 0.000000)"><g id="Group-3" transform="translate(105.000000, 171.000000)"><g id="no-nodes-keyart" transform="translate(50.000000, 30.000000)"><rect id="Rectangle" x="0" y="0" width="75" height="75"></rect><g id="Group" transform="translate(6.562500, 8.164062)" fill="#C4C8D1" fill-rule="nonzero"><polygon id="Rectangle" transform="translate(49.192016, 45.302553) rotate(-45.000000) translate(-49.192016, -45.302553) " points="44.5045606 32.0526802 53.8794707 32.0526802 53.8794707 58.5524261 44.5045606 58.5524261"></polygon><path d="M48.125,23.0859375 C54.15625,23.0859375 59.0625,18.1796875 59.0625,12.1484375 C59.0625,10.3359375 58.5625,8.6484375 57.78125,7.1484375 L49.34375,15.5859375 L44.6875,10.9296875 L53.125,2.4921875 C51.625,1.7109375 49.9375,1.2109375 48.125,1.2109375 C42.09375,1.2109375 37.1875,6.1171875 37.1875,12.1484375 C37.1875,13.4296875 37.4375,14.6484375 37.84375,15.7734375 L32.0625,21.5546875 L26.5,15.9921875 L28.71875,13.7734375 L24.3125,9.3671875 L30.9375,2.7421875 C27.28125,-0.9140625 21.34375,-0.9140625 17.6875,2.7421875 L6.625,13.8046875 L11.03125,18.2109375 L2.21875,18.2109375 L1.38777878e-15,20.4296875 L11.0625,31.4921875 L13.28125,29.2734375 L13.28125,20.4296875 L17.6875,24.8359375 L19.90625,22.6171875 L25.46875,28.1796875 L2.3125,51.3359375 L8.9375,57.9609375 L44.5,22.4296875 C45.625,22.8359375 46.84375,23.0859375 48.125,23.0859375 Z" id="Path"></path></g></g></g></g></g></g></g>',2),Pn=[Dn];function Bn(t,e){return k(),R("svg",Vn,Pn)}const Hn=U(On,[["render",Bn]]),Un=["textContent"],Kn=["textContent"],xn=H({__name:"NoResults",props:{showIcon:{type:Boolean},showRequest:{type:Boolean},rootView:{}},setup(t){return(e,o)=>{const n=B("n8n-link"),r=B("font-awesome-icon");return k(),R("div",{class:w({[e.$style.noResults]:!0,[e.$style.iconless]:!e.showIcon}),"data-test-id":"node-creator-no-results"},[e.showIcon?(k(),R("div",{key:0,class:w(e.$style.icon)},[O(Hn)],2)):M("",!0),I("div",{class:w(e.$style.title)},[X(e.$slots,"title"),I("p",{textContent:W(e.$locale.baseText("nodeCreator.noResults.weDidntMakeThatYet"))},null,8,Un),I("div",{class:w(e.$style.action)},[re(W(e.$locale.baseText("nodeCreator.noResults.dontWorryYouCanProbablyDoItWithThe"))+" ",1),e.rootView===K(Le)?(k(),L(n,{key:0,onClick:o[0]||(o[0]=p=>e.$emit("addHttpNode"))},{default:A(()=>[re(W(e.$locale.baseText("nodeCreator.noResults.httpRequest")),1)]),_:1})):M("",!0),e.rootView===K(F)?(k(),L(n,{key:1,onClick:o[1]||(o[1]=p=>e.$emit("addWebhookNode"))},{default:A(()=>[re(W(e.$locale.baseText("nodeCreator.noResults.webhook")),1)]),_:1})):M("",!0),re(" "+W(e.$locale.baseText("nodeCreator.noResults.node")),1)],2)],2),e.showRequest?(k(),R("div",{key:1,class:w(e.$style.request)},[I("p",{textContent:W(e.$locale.baseText("nodeCreator.noResults.wantUsToMakeItFaster"))},null,8,Kn),I("div",null,[O(n,{to:K(Tt)},{default:A(()=>[I("span",null,W(e.$locale.baseText("nodeCreator.noResults.requestTheNode")),1),re(" "),I("span",null,[O(r,{class:w(e.$style.external),icon:"external-link-alt",title:e.$locale.baseText("nodeCreator.noResults.requestTheNode")},null,8,["class","title"])])]),_:1},8,["to"])])],2)):M("",!0)],2)}}}),zn="_noResults_1jje6_5",Yn="_title_1jje6_18",Wn="_action_1jje6_27",Gn="_request_1jje6_28",jn="_icon_1jje6_44",Fn="_external_1jje6_50",qn={noResults:zn,title:Yn,action:Wn,request:Gn,icon:jn,external:Fn},Xn={$style:qn},Zn=U(xn,[["__cssModules",Xn]]),Qn=H({__name:"NodesMode",emits:{nodeTypeSelected:t=>!0},setup(t,{emit:e}){const o=ne(),n=qe(),{mergedNodes:r,actions:p}=j(),{baseUrl:v}=bt(),{getNodeTypesWithManualTrigger:h}=be(),{pushViewStack:s,popViewStack:d}=V(),{registerKeyHook:g}=q(),f=$(()=>V().activeViewStack),i=$(()=>V().globalSearchItemsDiff);function l(u){e("nodeTypeSelected",u.length===1?h(u[0]):u)}function a(u){var T,b;if(u.type==="subcategory"){const N=o.baseText(`nodeCreator.subcategoryNames.${nt(u.properties.title)}`);s({subcategory:u.key,title:N,mode:"nodes",rootView:f.value.rootView,forceIncludeNodes:u.properties.forceIncludeNodes,baseFilter:y,itemsMapper:m}),n.trackNodesPanel("nodeCreateList.onSubcategorySelected",{subcategory:u.key})}if(u.type==="node"){const N=(p==null?void 0:p[u.key])||[];if(N.length<=1){l([u.key]);return}const C=u.properties.iconUrl?`${v}${u.properties.iconUrl}`:(T=u.properties.icon)==null?void 0:T.split(":")[1],D=N==null?void 0:N.map(P=>ee(P,u.properties.displayName,"action"));s({subcategory:u.properties.displayName,title:u.properties.displayName,nodeIcon:{color:((b=u.properties.defaults)==null?void 0:b.color)||"",icon:C,iconType:u.properties.iconUrl?"file":"icon"},rootView:f.value.rootView,hasSearch:!0,mode:"actions",items:D})}if(u.type==="view"){const N=u.key===F?it():ct();s({title:N.title,subtitle:(N==null?void 0:N.subtitle)??"",items:N.items,hasSearch:!0,rootView:N.value,mode:"nodes",searchItems:r})}}function m(u){var C,D;if(u.type!=="node")return u;const T=u.properties.group.includes("trigger"),N=((p==null?void 0:p[u.key])||[]).length>0;return T&&N&&((C=u.properties)!=null&&C.codex&&(u.properties.codex.alias=[...((D=u.properties.codex)==null?void 0:D.alias)||[],u.properties.displayName]),u.properties.displayName=u.properties.displayName.replace(" Trigger","")),u}function y(u){if(u.type!=="node")return!1;const T=u.properties.group.includes("trigger"),N=((p==null?void 0:p[u.key])||[]).length>0;return f.value.rootView===F?N||T:N||!T}function c(){d()}function _(u){const b=[...f.value.items||[],...i.value||[]].find(N=>N.uuid===u);b&&a(b)}return g("MainViewArrowRight",{keyboardKeys:["ArrowRight","Enter"],condition:u=>["subcategory","node","view"].includes(u),handler:_}),g("MainViewArrowLeft",{keyboardKeys:["ArrowLeft"],condition:u=>["subcategory","node","view"].includes(u),handler:c}),(u,T)=>(k(),R("span",null,[O(Ve,{elements:f.value.items,onSelected:a,class:w(u.$style.items)},fe({_:2},[(f.value.items||[]).length===0&&i.value.length===0?{name:"empty",fn:A(()=>[O(Zn,{rootView:f.value.rootView,showIcon:"",showRequest:"",onAddWebhookNode:T[0]||(T[0]=b=>l([K(Q)])),onAddHttpNode:T[1]||(T[1]=b=>l([K(Ie)]))},null,8,["rootView"])]),key:"0"}:void 0]),1032,["elements","class"]),i.value.length>0?(k(),L(Ee,{key:0,elements:i.value,category:u.$locale.baseText("nodeCreator.categoryNames.otherCategories"),onSelected:a},null,8,["elements","category"])):M("",!0)]))}}),Jn="_items_1t7lf_5",es={items:Jn},ts={$style:es},os=U(Qn,[["__cssModules",ts]]),ns=["textContent"],ss=["textContent"],as=H({__name:"NodesListPanel",setup(t){const e=ne(),{mergedNodes:o}=j(),{pushViewStack:n,popViewStack:r,updateCurrentViewStack:p}=V(),{setActiveItemIndex:v,attachKeydownEvent:h,detachKeydownEvent:s}=q(),d=$(()=>V().activeViewStack),g=$(()=>V().viewStacks),f=$(()=>V().activeViewStackMode==="actions"),i=$(()=>f.value?e.baseText("nodeCreator.actionsCategory.searchActions",{interpolate:{node:d.value.title}}):e.baseText("nodeCreator.searchBar.searchNodes")),l=$(()=>j().selectedView);function a(c){d.value.uuid&&(p({search:c}),v(d.value.activeIndex??0))}function m(){const c=d.value.mode==="actions"?1:0;v(d.value.activeIndex||0||c)}ve(()=>{h(),v(d.value.activeIndex??0)}),et(()=>{s()}),J(()=>l.value,c=>{const _=c===F?it():ct();n({title:_.title,subtitle:(_==null?void 0:_.subtitle)??"",items:_.items,hasSearch:!0,mode:"nodes",rootView:c,searchItems:o})},{immediate:!0});function y(){r()}return(c,_)=>{const u=B("font-awesome-icon"),T=B("n8n-node-icon");return g.value.length>0?(k(),L(Xe,{key:0,name:`panel-slide-${d.value.transitionDirection}`,onAfterLeave:m},{default:A(()=>[(k(),R("aside",{class:w(c.$style.nodesListPanel),onKeydownCapture:_[0]||(_[0]=he(()=>{},["stop"])),key:`${d.value.uuid}`},[I("header",{class:w({[c.$style.header]:!0,[c.$style.hasBg]:!d.value.subtitle}),"data-test-id":"nodes-list-header"},[I("div",{class:w(c.$style.top)},[g.value.length>1?(k(),R("button",{key:0,class:w(c.$style.backButton),onClick:y},[O(u,{class:w(c.$style.backButtonIcon),icon:"arrow-left",size:"2x"},null,8,["class"])],2)):M("",!0),d.value.nodeIcon?(k(),L(T,{key:1,class:w(c.$style.nodeIcon),type:d.value.nodeIcon.iconType||"unknown",src:d.value.nodeIcon.icon,name:d.value.nodeIcon.icon,color:d.value.nodeIcon.color,circle:!1,showTooltip:!1,size:16},null,8,["class","type","src","name","color"])):M("",!0),d.value.title?(k(),R("p",{key:2,class:w(c.$style.title),textContent:W(d.value.title)},null,10,ns)):M("",!0)],2),d.value.subtitle?(k(),R("p",{key:0,class:w({[c.$style.subtitle]:!0,[c.$style.offsetSubtitle]:g.value.length>1}),textContent:W(d.value.subtitle)},null,10,ss)):M("",!0)],2),d.value.hasSearch?(k(),L(ao,{key:0,class:w(c.$style.searchBar),placeholder:i.value?i.value:c.$locale.baseText("nodeCreator.searchBar.searchNodes"),modelValue:d.value.search,"onUpdate:modelValue":a},null,8,["class","placeholder","modelValue"])):M("",!0),I("div",{class:w(c.$style.renderedItems)},[f.value&&d.value.subcategory?(k(),L(Mn,tt(me({key:0},c.$attrs)),null,16)):(k(),L(os,me({key:1,rootView:l.value},c.$attrs),null,16,["rootView"]))],2)],34))]),_:1},8,["name"])):M("",!0)}}}),rs="_backButton_uvop2_27",is="_backButtonIcon_uvop2_34",cs="_nodeIcon_uvop2_40",ls="_renderedItems_uvop2_45",ds="_searchBar_uvop2_57",us="_nodesListPanel_uvop2_61",ps="_footer_uvop2_78",gs="_top_uvop2_89",ys="_header_uvop2_94",fs="_hasBg_uvop2_100",ms="_title_uvop2_105",vs="_subtitle_uvop2_115",_s="_offsetSubtitle_uvop2_123",hs={backButton:rs,backButtonIcon:is,nodeIcon:cs,renderedItems:ls,searchBar:ds,nodesListPanel:us,footer:ps,top:gs,header:ys,hasBg:fs,title:ms,subtitle:vs,offsetSubtitle:_s},Ts={$style:hs},bs=U(as,[["__cssModules",Ts]]),ws=H({__name:"NodeCreator",props:{active:{type:Boolean},onNodeTypeSelected:{type:Function}},emits:["closeNodeCreator","nodeTypeSelected"],setup(t,{emit:e}){const o=t,{resetViewStacks:n}=V(),{registerKeyHook:r}=q(),p=wt(),{setShowScrim:v,setActions:h,setMergeNodes:s}=j(),{generateMergedNodesAndActions:d}=Ft(),g=Re({nodeCreator:null,mousedownInsideEvent:null}),f=$(()=>j().showScrim),i=$(()=>V().viewStacks.length),l=$(()=>({top:`${p.bannersHeight+p.headerHeight}px`}));function a(){var b;if(g.mousedownInsideEvent){const N=new MouseEvent("click",{bubbles:!0,cancelable:!0});(b=g.mousedownInsideEvent.target)==null||b.dispatchEvent(N),g.mousedownInsideEvent=null,m()}}function m(){document.removeEventListener("mouseup",a),document.removeEventListener("touchstart",a)}function y(){g.mousedownInsideEvent=null,m()}function c(b){g.mousedownInsideEvent=b,document.addEventListener("mouseup",a),document.addEventListener("touchstart",a)}function _(b){b.preventDefault()}function u(b){if(!b.dataTransfer)return;const N=b.dataTransfer.getData("nodeTypeName"),C=g.nodeCreator.getBoundingClientRect();N&&b.pageX>=C.x&&b.pageY>=C.y&&b.stopPropagation()}J(()=>o.active,b=>{b===!1&&(v(!1),n())}),J(i,b=>{b===0&&(e("closeNodeCreator"),v(!1))}),r("NodeCreatorCloseEscape",{keyboardKeys:["Escape"],handler:()=>e("closeNodeCreator")}),r("NodeCreatorCloseTab",{keyboardKeys:["Tab"],handler:()=>e("closeNodeCreator")}),J(()=>je().visibleNodeTypes,b=>{const{actions:N,mergedNodes:C}=d(b);h(N),s(C)},{immediate:!0});const{nodeCreator:T}=Me(g);return Ze(()=>{m()}),(b,N)=>(k(),R("div",null,[I("aside",{class:w({[b.$style.nodeCreatorScrim]:!0,[b.$style.active]:f.value})},null,2),O(Kt,null,{default:A(()=>[b.active?(k(),R("div",{key:0,class:w(b.$style.nodeCreator),style:Oe(l.value),ref_key:"nodeCreator",ref:T,onDragover:_,onDrop:u,onMousedown:c,onMouseup:y,"data-test-id":"node-creator"},[O(bs,{onNodeTypeSelected:b.onNodeTypeSelected},null,8,["onNodeTypeSelected"])],38)):M("",!0)]),_:1})]))}}),ks="_nodeCreator_py8o5_9",Cs="_nodeCreatorScrim_py8o5_20",$s="_active_py8o5_32",Ns={nodeCreator:ks,nodeCreatorScrim:Cs,active:$s},Ss={$style:Ns},da=U(ws,[["__cssModules",Ss]]);export{da as default};
|
|
2
|
-
//# sourceMappingURL=NodeCreator-0d763ba3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NodeCreator-0d763ba3.js","sources":["../../src/utils/sortUtils.ts","../../src/components/transitions/SlideTransition.vue","../../src/components/Node/NodeCreator/composables/useKeyboardNavigation.ts","../../src/components/Node/NodeCreator/utils.ts","../../src/components/Node/NodeCreator/composables/useViewStacks.ts","../../src/components/Node/NodeCreator/composables/useActionsGeneration.ts","../../src/components/Node/NodeCreator/viewsData.ts","../../src/components/Node/NodeCreator/Panel/SearchBar.vue","../../src/components/Node/NodeCreator/composables/useActions.ts","../../src/components/Node/NodeCreator/ItemTypes/NodeItem.vue","../../src/components/Node/NodeCreator/ItemTypes/SubcategoryItem.vue","../../src/components/Node/NodeCreator/ItemTypes/ActionItem.vue","../../src/components/Node/NodeCreator/Renderers/ItemsRenderer.vue","../../src/components/Node/NodeCreator/ItemTypes/CategoryItem.vue","../../src/components/Node/NodeCreator/Renderers/CategorizedItemsRenderer.vue","../../src/components/Node/NodeCreator/Modes/ActionsMode.vue","../../src/components/Node/NodeCreator/Panel/NoResultsIcon.vue","../../src/components/Node/NodeCreator/Modes/NodesMode.vue","../../src/components/Node/NodeCreator/Panel/NodesListPanel.vue","../../src/components/Node/NodeCreator/NodeCreator.vue"],"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 = 30; // 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 = -15; // 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: any = obj;\n\tlet i = 0;\n\twhile (result && i < segments.length) {\n\t\tresult = result[segments[i]];\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","<template>\n\t<transition name=\"slide\">\n\t\t<slot />\n\t</transition>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tname: 'SlideTransition',\n});\n</script>\n\n<style lang=\"scss\" scoped>\n.slide-leave-active,\n.slide-enter-active {\n\ttransition: 200ms ease;\n}\n.slide-leave-to,\n.slide-enter-from {\n\ttransform: translateX(100%);\n}\n</style>\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 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\tNodeCreateElement,\n\tActionCreateElement,\n\tSubcategorizedNodeTypes,\n\tSimplifiedNodeType,\n\tINodeCreateElement,\n} from '@/Interface';\nimport { CORE_NODES_CATEGORY, DEFAULT_SUBCATEGORY } from '@/constants';\nimport { v4 as uuidv4 } from 'uuid';\nimport { sublimeSearch } from '@/utils';\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\treturn items.reduce((acc: SubcategorizedNodeTypes, item) => {\n\t\t// Only Core Nodes subcategories are valid, others are uncategorized\n\t\tconst isCoreNodesCategory = item.codex?.categories?.includes(CORE_NODES_CATEGORY);\n\t\tconst subcategories = isCoreNodesCategory\n\t\t\t? item?.codex?.subcategories?.[CORE_NODES_CATEGORY] ?? []\n\t\t\t: [DEFAULT_SUBCATEGORY];\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 -1;\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\tconst result = (\n\t\tsublimeSearch<INodeCreateElement>(trimmedFilter, items, [\n\t\t\t{ key: 'properties.displayName', weight: 2 },\n\t\t\t{ key: 'properties.codex.alias', weight: 1 },\n\t\t]) || []\n\t).map(({ item }) => item);\n\n\treturn result;\n}\n","import { computed, ref } from 'vue';\nimport { defineStore } from 'pinia';\nimport { v4 as uuid } from 'uuid';\nimport type { INodeCreateElement, NodeFilterType, SimplifiedNodeType } from '@/Interface';\nimport { DEFAULT_SUBCATEGORY, TRIGGER_NODE_CREATOR_VIEW } from '@/constants';\n\nimport { useNodeCreatorStore } from '@/stores/nodeCreator.store';\n\nimport { useKeyboardNavigation } from './useKeyboardNavigation';\nimport {\n\ttransformNodeType,\n\tsubcategorizeItems,\n\tsortNodeCreateElements,\n\tsearchNodes,\n} from '../utils';\n\ninterface ViewStack {\n\tuuid?: string;\n\ttitle?: string;\n\tsubtitle?: string;\n\tsearch?: string;\n\tsubcategory?: string;\n\tnodeIcon?: {\n\t\ticonType?: string;\n\t\ticon?: string;\n\t\tcolor?: string;\n\t};\n\ticonUrl?: string;\n\trootView?: NodeFilterType;\n\tactiveIndex?: number;\n\ttransitionDirection?: 'in' | 'out';\n\thasSearch?: 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}\n\nexport const useViewStacks = defineStore('nodeCreatorViewStacks', () => {\n\tconst nodeCreatorStore = useNodeCreatorStore();\n\tconst { getActiveItemIndex } = useKeyboardNavigation();\n\n\tconst viewStacks = ref<ViewStack[]>([]);\n\n\tconst activeStackItems = computed<INodeCreateElement[]>(() => {\n\t\tconst stack = viewStacks.value[viewStacks.value.length - 1];\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 ? searchBaseItems.value : stack.baselineItems;\n\n\t\t\treturn extendItemsWithUUID(searchNodes(stack.search || '', searchBase));\n\t\t}\n\t\treturn extendItemsWithUUID(stack.baselineItems);\n\t});\n\n\tconst activeViewStack = computed<ViewStack>(() => {\n\t\tconst stack = viewStacks.value[viewStacks.value.length - 1];\n\t\tif (!stack) return {};\n\n\t\treturn {\n\t\t\t...stack,\n\t\t\titems: activeStackItems.value,\n\t\t\thasSearch: (stack.baselineItems || []).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 = viewStacks.value[viewStacks.value.length - 1];\n\t\tif (!stack || !stack.searchItems) return [];\n\n\t\treturn stack.searchItems.map((item) => transformNodeType(item, stack.subcategory));\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 = viewStacks.value[viewStacks.value.length - 1];\n\t\tif (!stack || !stack.search) return [];\n\n\t\tconst allNodes = nodeCreatorStore.mergedNodes.map((item) => transformNodeType(item));\n\t\tconst globalSearchResult = extendItemsWithUUID(searchNodes(stack.search || '', allNodes));\n\n\t\treturn globalSearchResult.filter((item) => {\n\t\t\treturn !activeStackItems.value.find((activeItem) => activeItem.key === item.key);\n\t\t});\n\t});\n\n\tfunction setStackBaselineItems() {\n\t\tconst stack = viewStacks.value[viewStacks.value.length - 1];\n\t\tif (!stack || !activeViewStack.value.uuid) return;\n\n\t\tconst subcategorizedItems = subcategorizeItems(nodeCreatorStore.mergedNodes);\n\t\tlet stackItems =\n\t\t\tstack?.items ?? subcategorizedItems[stack?.subcategory ?? DEFAULT_SUBCATEGORY] ?? [];\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\tsortNodeCreateElements(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 = viewStacks.value[viewStacks.value.length - 1];\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\tresetViewStacks,\n\t\tupdateCurrentViewStack,\n\t\tpushViewStack,\n\t\tpopViewStack,\n\t};\n});\n","import { memoize, startCase } from 'lodash-es';\nimport type {\n\tINodePropertyCollection,\n\tINodePropertyOptions,\n\tINodeProperties,\n\tINodeTypeDescription,\n} from 'n8n-workflow';\nimport { CUSTOM_API_CALL_KEY } from '@/constants';\nimport type { ActionTypeDescription, SimplifiedNodeType, ActionsRecord } from '@/Interface';\n\nimport { i18n } from '@/plugins/i18n';\n\nconst PLACEHOLDER_RECOMMENDED_ACTION_KEY = 'placeholder_recommended';\n\nfunction translate(...args: Parameters<typeof i18n.baseText>) {\n\treturn i18n.baseText(...args);\n}\n// Memoize the translation function so we don't have to re-translate the same string\n// multiple times when generating the actions\nconst cachedBaseText = memoize(translate, (...args) => JSON.stringify(args));\n\nconst customNodeActionsParsers: {\n\t[key: string]: (\n\t\tmatchedProperty: INodeProperties,\n\t\tnodeTypeDescription: INodeTypeDescription,\n\t) => ActionTypeDescription[] | undefined;\n} = {\n\t['n8n-nodes-base.hubspotTrigger']: (matchedProperty, nodeTypeDescription) => {\n\t\tconst collection = matchedProperty?.options?.[0] as INodePropertyCollection;\n\n\t\treturn (collection?.values[0]?.options as INodePropertyOptions[])?.map(\n\t\t\t(categoryItem): ActionTypeDescription => ({\n\t\t\t\t...getNodeTypeBase(nodeTypeDescription),\n\t\t\t\tactionKey: categoryItem.value as string,\n\t\t\t\tdisplayName: cachedBaseText('nodeCreator.actionsCategory.onEvent', {\n\t\t\t\t\tinterpolate: { event: startCase(categoryItem.name) },\n\t\t\t\t}),\n\t\t\t\tdescription: categoryItem.description || '',\n\t\t\t\tdisplayOptions: matchedProperty.displayOptions,\n\t\t\t\tvalues: { eventsUi: { eventValues: [{ name: categoryItem.value }] } },\n\t\t\t}),\n\t\t);\n\t},\n};\n\nfunction getNodeTypeBase(nodeTypeDescription: INodeTypeDescription, label?: string) {\n\tconst isTrigger = nodeTypeDescription.group.includes('trigger');\n\tconst category = isTrigger\n\t\t? cachedBaseText('nodeCreator.actionsCategory.triggers')\n\t\t: cachedBaseText('nodeCreator.actionsCategory.actions');\n\treturn {\n\t\tname: nodeTypeDescription.name,\n\t\tgroup: nodeTypeDescription.group,\n\t\tcodex: {\n\t\t\tlabel: label || '',\n\t\t\tcategories: [category],\n\t\t},\n\t\ticonUrl: nodeTypeDescription.iconUrl,\n\t\ticon: nodeTypeDescription.icon,\n\t\tdefaults: nodeTypeDescription.defaults,\n\t};\n}\n\nfunction operationsCategory(nodeTypeDescription: INodeTypeDescription): ActionTypeDescription[] {\n\tif (!!nodeTypeDescription.properties.find((property) => property.name === 'resource')) return [];\n\n\tconst matchedProperty = nodeTypeDescription.properties.find(\n\t\t(property) => property.name?.toLowerCase() === 'operation',\n\t);\n\n\tif (!matchedProperty || !matchedProperty.options) return [];\n\n\tconst filteredOutItems = (matchedProperty.options as INodePropertyOptions[]).filter(\n\t\t(categoryItem: INodePropertyOptions) => !['*', '', ' '].includes(categoryItem.name),\n\t);\n\n\tconst items = filteredOutItems.map((item: INodePropertyOptions) => ({\n\t\t...getNodeTypeBase(nodeTypeDescription),\n\t\tactionKey: item.value as string,\n\t\tdisplayName: item.action ?? startCase(item.name),\n\t\tdescription: item.description ?? '',\n\t\tdisplayOptions: matchedProperty.displayOptions,\n\t\tvalues: {\n\t\t\t[matchedProperty.name]: matchedProperty.type === 'multiOptions' ? [item.value] : item.value,\n\t\t},\n\t}));\n\n\t// Do not return empty category\n\tif (items.length === 0) return [];\n\n\treturn items;\n}\n\nfunction triggersCategory(nodeTypeDescription: INodeTypeDescription): ActionTypeDescription[] {\n\tconst matchingKeys = ['event', 'events', 'trigger on'];\n\tconst isTrigger = nodeTypeDescription.displayName?.toLowerCase().includes('trigger');\n\tconst matchedProperty = nodeTypeDescription.properties.find((property) =>\n\t\tmatchingKeys.includes(property.displayName?.toLowerCase()),\n\t);\n\n\tif (!isTrigger) return [];\n\n\t// Inject placeholder action if no events are available\n\t// so user is able to add node to the canvas from the actions panel\n\tif (!matchedProperty || !matchedProperty.options) {\n\t\treturn [\n\t\t\t{\n\t\t\t\t...getNodeTypeBase(nodeTypeDescription),\n\t\t\t\tactionKey: PLACEHOLDER_RECOMMENDED_ACTION_KEY,\n\t\t\t\tdisplayName: cachedBaseText('nodeCreator.actionsCategory.onNewEvent', {\n\t\t\t\t\tinterpolate: { event: nodeTypeDescription.displayName.replace('Trigger', '').trimEnd() },\n\t\t\t\t}),\n\t\t\t\tdescription: '',\n\t\t\t},\n\t\t];\n\t}\n\n\tconst filteredOutItems = (matchedProperty.options as INodePropertyOptions[]).filter(\n\t\t(categoryItem: INodePropertyOptions) => !['*', '', ' '].includes(categoryItem.name),\n\t);\n\n\tconst customParsedItem = customNodeActionsParsers[nodeTypeDescription.name]?.(\n\t\tmatchedProperty,\n\t\tnodeTypeDescription,\n\t);\n\n\tconst items =\n\t\tcustomParsedItem ??\n\t\tfilteredOutItems.map((categoryItem: INodePropertyOptions) => ({\n\t\t\t...getNodeTypeBase(nodeTypeDescription),\n\t\t\tactionKey: categoryItem.value as string,\n\t\t\tdisplayName:\n\t\t\t\tcategoryItem.action ??\n\t\t\t\tcachedBaseText('nodeCreator.actionsCategory.onEvent', {\n\t\t\t\t\tinterpolate: { event: startCase(categoryItem.name) },\n\t\t\t\t}),\n\t\t\tdescription: categoryItem.description || '',\n\t\t\tdisplayOptions: matchedProperty.displayOptions,\n\t\t\tvalues: {\n\t\t\t\t[matchedProperty.name]:\n\t\t\t\t\tmatchedProperty.type === 'multiOptions' ? [categoryItem.value] : categoryItem.value,\n\t\t\t},\n\t\t}));\n\n\treturn items;\n}\n\nfunction resourceCategories(nodeTypeDescription: INodeTypeDescription): ActionTypeDescription[] {\n\tconst transformedNodes: ActionTypeDescription[] = [];\n\tconst matchedProperties = nodeTypeDescription.properties.filter(\n\t\t(property) => property.displayName?.toLowerCase() === 'resource',\n\t);\n\n\tmatchedProperties.forEach((property) => {\n\t\t((property.options as INodePropertyOptions[]) || [])\n\t\t\t.filter((option) => option.value !== CUSTOM_API_CALL_KEY)\n\t\t\t.forEach((resourceOption, i, options) => {\n\t\t\t\tconst isSingleResource = options.length === 1;\n\n\t\t\t\t// Match operations for the resource by checking if displayOptions matches or contains the resource name\n\t\t\t\tconst operations = nodeTypeDescription.properties.find(\n\t\t\t\t\t(operation) =>\n\t\t\t\t\t\toperation.name === 'operation' &&\n\t\t\t\t\t\t(operation.displayOptions?.show?.resource?.includes(resourceOption.value) ||\n\t\t\t\t\t\t\tisSingleResource),\n\t\t\t\t);\n\n\t\t\t\tif (!operations?.options) return;\n\n\t\t\t\tconst items = ((operations.options as INodePropertyOptions[]) || []).map(\n\t\t\t\t\t(operationOption) => {\n\t\t\t\t\t\tconst displayName =\n\t\t\t\t\t\t\toperationOption.action ?? `${resourceOption.name} ${startCase(operationOption.name)}`;\n\n\t\t\t\t\t\t// We need to manually populate displayOptions as they are not present in the node description\n\t\t\t\t\t\t// if the resource has only one option\n\t\t\t\t\t\tconst displayOptions = isSingleResource\n\t\t\t\t\t\t\t? { show: { resource: [(options as INodePropertyOptions[])[0]?.value] } }\n\t\t\t\t\t\t\t: operations?.displayOptions;\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...getNodeTypeBase(\n\t\t\t\t\t\t\t\tnodeTypeDescription,\n\t\t\t\t\t\t\t\t`${resourceOption.name} ${cachedBaseText('nodeCreator.actionsCategory.actions')}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tactionKey: operationOption.value as string,\n\t\t\t\t\t\t\tdescription: operationOption?.description ?? '',\n\t\t\t\t\t\t\tdisplayOptions,\n\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\toperation:\n\t\t\t\t\t\t\t\t\toperations?.type === 'multiOptions'\n\t\t\t\t\t\t\t\t\t\t? [operationOption.value]\n\t\t\t\t\t\t\t\t\t\t: operationOption.value,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdisplayName,\n\t\t\t\t\t\t\tgroup: ['trigger'],\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\ttransformedNodes.push(...items);\n\t\t\t});\n\t});\n\n\treturn transformedNodes;\n}\n\nexport function useActionsGenerator() {\n\tfunction generateNodeActions(node: INodeTypeDescription | undefined) {\n\t\tif (!node) return [];\n\t\treturn [...triggersCategory(node), ...operationsCategory(node), ...resourceCategories(node)];\n\t}\n\tfunction filterActions(actions: ActionTypeDescription[]) {\n\t\t// Do not show single action nodes\n\t\tif (actions.length <= 1) return [];\n\t\treturn actions.filter(\n\t\t\t(action: ActionTypeDescription, _: number, arr: ActionTypeDescription[]) => {\n\t\t\t\tconst isApiCall = action.actionKey === CUSTOM_API_CALL_KEY;\n\t\t\t\tif (isApiCall) return false;\n\n\t\t\t\tconst isPlaceholderTriggerAction = action.actionKey === PLACEHOLDER_RECOMMENDED_ACTION_KEY;\n\t\t\t\treturn !isPlaceholderTriggerAction || (isPlaceholderTriggerAction && arr.length > 1);\n\t\t\t},\n\t\t);\n\t}\n\n\tfunction getSimplifiedNodeType(node: INodeTypeDescription): SimplifiedNodeType {\n\t\tconst { displayName, defaults, description, name, group, icon, iconUrl, codex } = node;\n\n\t\treturn {\n\t\t\tdisplayName,\n\t\t\tdefaults,\n\t\t\tdescription,\n\t\t\tname,\n\t\t\tgroup,\n\t\t\ticon,\n\t\t\ticonUrl,\n\t\t\tcodex,\n\t\t};\n\t}\n\n\tfunction generateMergedNodesAndActions(nodeTypes: INodeTypeDescription[]) {\n\t\tconst visibleNodeTypes = [...nodeTypes];\n\t\tconst actions: ActionsRecord<typeof mergedNodes> = {};\n\t\tconst mergedNodes: SimplifiedNodeType[] = [];\n\n\t\tvisibleNodeTypes\n\t\t\t.filter((node) => !node.group.includes('trigger'))\n\t\t\t.forEach((app) => {\n\t\t\t\tconst appActions = generateNodeActions(app);\n\t\t\t\tactions[app.name] = appActions;\n\n\t\t\t\tmergedNodes.push(getSimplifiedNodeType(app));\n\t\t\t});\n\n\t\tvisibleNodeTypes\n\t\t\t.filter((node) => node.group.includes('trigger'))\n\t\t\t.forEach((trigger) => {\n\t\t\t\tconst normalizedName = trigger.name.replace('Trigger', '');\n\t\t\t\tconst triggerActions = generateNodeActions(trigger);\n\t\t\t\tconst appActions = actions?.[normalizedName] || [];\n\t\t\t\tconst app = mergedNodes.find((node) => node.name === normalizedName);\n\n\t\t\t\tif (app && appActions?.length > 0) {\n\t\t\t\t\t// merge triggers into regular nodes that match\n\t\t\t\t\tconst mergedActions = filterActions([...appActions, ...triggerActions]);\n\t\t\t\t\tactions[normalizedName] = mergedActions;\n\n\t\t\t\t\tapp.description = trigger.description; // default to trigger description\n\t\t\t\t} else {\n\t\t\t\t\tactions[trigger.name] = filterActions(triggerActions);\n\t\t\t\t\tmergedNodes.push(getSimplifiedNodeType(trigger));\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn {\n\t\t\tactions,\n\t\t\tmergedNodes,\n\t\t};\n\t}\n\n\treturn {\n\t\tgenerateMergedNodesAndActions,\n\t};\n}\n","import {\n\tCORE_NODES_CATEGORY,\n\tWEBHOOK_NODE_TYPE,\n\tOTHER_TRIGGER_NODES_SUBCATEGORY,\n\tEXECUTE_WORKFLOW_TRIGGER_NODE_TYPE,\n\tMANUAL_TRIGGER_NODE_TYPE,\n\tSCHEDULE_TRIGGER_NODE_TYPE,\n\tREGULAR_NODE_CREATOR_VIEW,\n\tTRANSFORM_DATA_SUBCATEGORY,\n\tFILES_SUBCATEGORY,\n\tFLOWS_CONTROL_SUBCATEGORY,\n\tHELPERS_SUBCATEGORY,\n\tTRIGGER_NODE_CREATOR_VIEW,\n\tEMAIL_IMAP_NODE_TYPE,\n\tDEFAULT_SUBCATEGORY,\n} from '@/constants';\nimport { useI18n } from '@/composables';\n\nexport function TriggerView() {\n\tconst i18n = useI18n();\n\n\treturn {\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: 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: 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: 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\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\nexport function RegularView() {\n\tconst i18n = useI18n();\n\n\treturn {\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},\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},\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},\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},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'subcategory',\n\t\t\t\tkey: FILES_SUBCATEGORY,\n\t\t\t\tcategory: CORE_NODES_CATEGORY,\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: FILES_SUBCATEGORY,\n\t\t\t\t\ticon: 'file-alt',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: TRIGGER_NODE_CREATOR_VIEW,\n\t\t\t\ttype: 'view',\n\t\t\t\tproperties: {\n\t\t\t\t\ttitle: i18n.baseText('nodeCreator.triggerHelperPanel.addAnotherTrigger'),\n\t\t\t\t\ticon: 'bolt',\n\t\t\t\t\tdescription: i18n.baseText('nodeCreator.triggerHelperPanel.addAnotherTriggerDescription'),\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n}\n","<template>\n\t<div :class=\"$style.searchContainer\" data-test-id=\"search-bar\">\n\t\t<div :class=\"{ [$style.prefix]: true, [$style.active]: modelValue.length > 0 }\">\n\t\t\t<font-awesome-icon icon=\"search\" size=\"sm\" />\n\t\t</div>\n\t\t<div :class=\"$style.text\">\n\t\t\t<input\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:value=\"modelValue\"\n\t\t\t\t:class=\"$style.input\"\n\t\t\t\tref=\"inputRef\"\n\t\t\t\tautofocus\n\t\t\t\tdata-test-id=\"node-creator-search-bar\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t@input=\"onInput\"\n\t\t\t/>\n\t\t</div>\n\t\t<div :class=\"$style.suffix\" v-if=\"modelValue.length > 0\" @click=\"clear\">\n\t\t\t<button :class=\"[$style.clear, $style.clickable]\">\n\t\t\t\t<font-awesome-icon icon=\"times-circle\" />\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, reactive, toRefs, onBeforeUnmount } from 'vue';\nimport { useWebhooksStore } from '@/stores/webhooks.store';\nimport { runExternalHook } from '@/utils';\n\nexport interface Props {\n\tplaceholder: string;\n\tmodelValue: string;\n}\n\nwithDefaults(defineProps<Props>(), {\n\tplaceholder: '',\n\tmodelValue: '',\n});\n\nconst emit = defineEmits<{\n\t(event: 'update:modelValue', value: string): void;\n}>();\n\nconst state = reactive({\n\tinputRef: null as HTMLInputElement | null,\n});\n\nfunction focus() {\n\tstate.inputRef?.focus();\n}\n\nfunction onInput(event: Event) {\n\tconst input = event.target as HTMLInputElement;\n\temit('update:modelValue', input.value);\n}\n\nfunction clear() {\n\temit('update:modelValue', '');\n}\n\nonMounted(() => {\n\tvoid runExternalHook('nodeCreator_searchBar.mount', useWebhooksStore(), {\n\t\tinputRef: state.inputRef,\n\t});\n\tsetTimeout(focus, 0);\n});\n\nonBeforeUnmount(() => {\n\tstate.inputRef?.remove();\n});\n\nconst { inputRef } = toRefs(state);\ndefineExpose({\n\tfocus,\n});\n</script>\n\n<style lang=\"scss\" module>\n.searchContainer {\n\tdisplay: flex;\n\theight: 40px;\n\tpadding: 0 var(--spacing-xs);\n\talign-items: center;\n\tmargin: var(--search-margin, var(--spacing-s));\n\tfilter: drop-shadow(0px 2px 5px rgba(46, 46, 50, 0.04));\n\n\tborder: 1px solid $node-creator-border-color;\n\tbackground-color: $node-creator-search-background-color;\n\tcolor: $node-creator-search-placeholder-color;\n\tborder-radius: 4px;\n\n\t&:focus-within {\n\t\tborder-color: var(--color-secondary);\n\t}\n}\n\n.prefix {\n\ttext-align: center;\n\tfont-size: var(--font-size-m);\n\tmargin-right: var(--spacing-xs);\n\n\t&.active {\n\t\tcolor: $color-primary !important;\n\t}\n}\n\n.text {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder: none;\n\t\toutline: none;\n\t\tfont-size: var(--font-size-s);\n\t\tappearance: none;\n\t\tbackground-color: var(--color-background-xlight);\n\t\tcolor: var(--color-text-dark);\n\n\t\t&::placeholder,\n\t\t&::-webkit-input-placeholder {\n\t\t\tcolor: $node-creator-search-placeholder-color;\n\t\t}\n\t}\n}\n\n.suffix {\n\tmin-width: 20px;\n\ttext-align: right;\n\tdisplay: inline-block;\n}\n\n.clear {\n\tbackground-color: $node-creator-search-clear-color;\n\tpadding: 0;\n\tborder: none;\n\tcursor: pointer;\n\n\tsvg path {\n\t\tfill: $node-creator-search-clear-background-color;\n\t}\n\n\t&:hover svg path {\n\t\tfill: $node-creator-search-clear-background-color-hover;\n\t}\n}\n</style>\n","import { getCurrentInstance, computed } from 'vue';\nimport type { IDataObject, INodeParameters } from 'n8n-workflow';\nimport type {\n\tActionTypeDescription,\n\tINodeCreateElement,\n\tIUpdateInformation,\n\tLabelCreateElement,\n} from '@/Interface';\nimport {\n\tMANUAL_TRIGGER_NODE_TYPE,\n\tNODE_CREATOR_OPEN_SOURCES,\n\tSCHEDULE_TRIGGER_NODE_TYPE,\n\tSTICKY_NODE_TYPE,\n\tTRIGGER_NODE_CREATOR_VIEW,\n\tWEBHOOK_NODE_TYPE,\n} from '@/constants';\n\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport type { Telemetry } from '@/plugins/telemetry';\nimport { useNodeCreatorStore } from '@/stores/nodeCreator.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { runExternalHook } from '@/utils';\nimport { useWebhooksStore } from '@/stores/webhooks.store';\n\nimport { sortNodeCreateElements, transformNodeType } from '../utils';\n\nexport const useActions = () => {\n\tconst nodeCreatorStore = useNodeCreatorStore();\n\tconst instance = getCurrentInstance();\n\n\tconst actionsCategoryLocales = computed(() => {\n\t\treturn {\n\t\t\tactions: instance?.proxy.$locale.baseText('nodeCreator.actionsCategory.actions') ?? '',\n\t\t\ttriggers: instance?.proxy.$locale.baseText('nodeCreator.actionsCategory.triggers') ?? '',\n\t\t};\n\t});\n\n\tfunction getPlaceholderTriggerActions(subcategory: string) {\n\t\tconst nodes = [WEBHOOK_NODE_TYPE, SCHEDULE_TRIGGER_NODE_TYPE];\n\n\t\tconst matchedNodeTypes = nodeCreatorStore.mergedNodes\n\t\t\t.filter((node) => nodes.some((n) => n === node.name))\n\t\t\t.map((node) => {\n\t\t\t\tconst transformed = transformNodeType(node, subcategory, 'action');\n\n\t\t\t\tif (transformed.type === 'action') {\n\t\t\t\t\tconst nameBase = node.name.replace('n8n-nodes-base.', '');\n\t\t\t\t\tconst localeKey = `nodeCreator.actionsPlaceholderNode.${nameBase}` as BaseTextKey;\n\t\t\t\t\tconst overwriteLocale = instance?.proxy.$locale.baseText(localeKey) as string;\n\n\t\t\t\t\t// If the locale key is not the same as the node name, it means it contain a translation\n\t\t\t\t\t// and we should use it\n\t\t\t\t\tif (overwriteLocale !== localeKey) {\n\t\t\t\t\t\ttransformed.properties.displayName = overwriteLocale;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn transformed;\n\t\t\t});\n\n\t\treturn matchedNodeTypes;\n\t}\n\n\tfunction filterActionsCategory(items: INodeCreateElement[], category: string) {\n\t\treturn items.filter(\n\t\t\t(item) => item.type === 'action' && item.properties.codex.categories.includes(category),\n\t\t);\n\t}\n\n\tfunction injectActionsLabels(items: INodeCreateElement[]): INodeCreateElement[] {\n\t\tconst extendedActions = sortNodeCreateElements([...items]);\n\t\tconst labelsSet = new Set<string>();\n\n\t\t// Collect unique labels\n\t\tfor (const action of extendedActions) {\n\t\t\tif (action.type !== 'action') continue;\n\t\t\tconst label = action.properties?.codex?.label;\n\t\t\tlabelsSet.add(label);\n\t\t}\n\n\t\tif (labelsSet.size <= 1) return extendedActions;\n\n\t\t// Create a map to store the first index of each label\n\t\tconst firstIndexMap = new Map<string, number>();\n\n\t\t// Iterate through the extendedActions to find the first index of each label\n\t\tfor (let i = 0; i < extendedActions.length; i++) {\n\t\t\tconst action = extendedActions[i];\n\t\t\tif (action.type !== 'action') continue;\n\t\t\tconst label = action.properties?.codex?.label;\n\t\t\tif (!firstIndexMap.has(label)) {\n\t\t\t\tfirstIndexMap.set(label, i);\n\t\t\t}\n\t\t}\n\n\t\t// Keep track of the number of inserted labels\n\t\tlet insertedLabels = 0;\n\n\t\t// Create and insert new label objects at the first index of each label\n\t\tfor (const label of labelsSet) {\n\t\t\tconst newLabel: LabelCreateElement = {\n\t\t\t\tuuid: label,\n\t\t\t\ttype: 'label',\n\t\t\t\tkey: label,\n\t\t\t\tsubcategory: extendedActions[0].key,\n\t\t\t\tproperties: {\n\t\t\t\t\tkey: label,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst insertIndex = firstIndexMap.get(label)! + insertedLabels;\n\t\t\textendedActions.splice(insertIndex, 0, newLabel);\n\t\t\tinsertedLabels++;\n\t\t}\n\n\t\treturn extendedActions;\n\t}\n\n\tfunction parseCategoryActions(\n\t\tactions: INodeCreateElement[],\n\t\tcategory: string,\n\t\twithLabels = true,\n\t) {\n\t\tconst filteredActions = filterActionsCategory(actions, category);\n\t\tif (withLabels) return injectActionsLabels(filteredActions);\n\t\treturn filteredActions;\n\t}\n\n\tfunction getActionData(actionItem: ActionTypeDescription): IUpdateInformation {\n\t\tconst displayOptions = actionItem.displayOptions;\n\n\t\tconst displayConditions = Object.keys(displayOptions?.show || {}).reduce(\n\t\t\t(acc: IDataObject, showCondition: string) => {\n\t\t\t\tacc[showCondition] = displayOptions?.show?.[showCondition]?.[0];\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{},\n\t\t);\n\n\t\treturn {\n\t\t\tname: actionItem.displayName,\n\t\t\tkey: actionItem.name as string,\n\t\t\tvalue: { ...actionItem.values, ...displayConditions } as INodeParameters,\n\t\t};\n\t}\n\n\tfunction getNodeTypesWithManualTrigger(nodeType?: string): string[] {\n\t\tif (!nodeType) return [];\n\n\t\tconst { selectedView, openSource } = useNodeCreatorStore();\n\t\tconst { workflowTriggerNodes } = useWorkflowsStore();\n\t\tconst isTrigger = useNodeTypesStore().isTriggerNode(nodeType);\n\t\tconst workflowContainsTrigger = workflowTriggerNodes.length > 0;\n\t\tconst isTriggerPanel = selectedView === TRIGGER_NODE_CREATOR_VIEW;\n\t\tconst isStickyNode = nodeType === STICKY_NODE_TYPE;\n\t\tconst singleNodeOpenSources = [\n\t\t\tNODE_CREATOR_OPEN_SOURCES.PLUS_ENDPOINT,\n\t\t\tNODE_CREATOR_OPEN_SOURCES.NODE_CONNECTION_ACTION,\n\t\t\tNODE_CREATOR_OPEN_SOURCES.NODE_CONNECTION_DROP,\n\t\t];\n\n\t\t// If the node creator was opened from the plus endpoint, node connection action, or node connection drop\n\t\t// then we do not want to append the manual trigger\n\t\tconst isSingleNodeOpenSource = singleNodeOpenSources.includes(openSource);\n\t\tconst shouldAppendManualTrigger =\n\t\t\t!isSingleNodeOpenSource &&\n\t\t\t!isTrigger &&\n\t\t\t!workflowContainsTrigger &&\n\t\t\tisTriggerPanel &&\n\t\t\t!isStickyNode;\n\n\t\tconst nodeTypes = shouldAppendManualTrigger ? [MANUAL_TRIGGER_NODE_TYPE, nodeType] : [nodeType];\n\n\t\treturn nodeTypes;\n\t}\n\n\t// Hook into addNode action to set the last node parameters & track the action selected\n\tfunction setAddedNodeActionParameters(\n\t\taction: IUpdateInformation,\n\t\ttelemetry?: Telemetry,\n\t\trootView = '',\n\t) {\n\t\tconst { $onAction: onWorkflowStoreAction } = useWorkflowsStore();\n\t\tconst storeWatcher = onWorkflowStoreAction(\n\t\t\t({ name, after, store: { setLastNodeParameters }, args }) => {\n\t\t\t\tif (name !== 'addNode' || args[0].type !== action.key) return;\n\t\t\t\tafter(() => {\n\t\t\t\t\tsetLastNodeParameters(action);\n\t\t\t\t\tif (telemetry) trackActionSelected(action, telemetry, rootView);\n\t\t\t\t\t// Unsubscribe from the store watcher\n\t\t\t\t\tstoreWatcher();\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\n\t\treturn storeWatcher;\n\t}\n\n\tfunction trackActionSelected(action: IUpdateInformation, telemetry: Telemetry, rootView: string) {\n\t\tconst payload = {\n\t\t\tnode_type: action.key,\n\t\t\taction: action.name,\n\t\t\tsource_mode: rootView.toLowerCase(),\n\t\t\tresource: (action.value as INodeParameters).resource || '',\n\t\t};\n\t\tvoid runExternalHook('nodeCreateList.addAction', useWebhooksStore(), payload);\n\t\ttelemetry?.trackNodesPanel('nodeCreateList.addAction', payload);\n\t}\n\n\treturn {\n\t\tactionsCategoryLocales,\n\t\tgetPlaceholderTriggerActions,\n\t\tparseCategoryActions,\n\t\tgetNodeTypesWithManualTrigger,\n\t\tgetActionData,\n\t\tsetAddedNodeActionParameters,\n\t};\n};\n","<template>\n\t<!-- Node Item is draggable only if it doesn't contain actions -->\n\t<n8n-node-creator-node\n\t\t:draggable=\"!showActionArrow\"\n\t\t@dragstart=\"onDragStart\"\n\t\t@dragend=\"onDragEnd\"\n\t\t:class=\"$style.nodeItem\"\n\t\t:description=\"subcategory !== DEFAULT_SUBCATEGORY ? description : ''\"\n\t\t:title=\"displayName\"\n\t\t:show-action-arrow=\"showActionArrow\"\n\t\t:is-trigger=\"isTrigger\"\n\t\t:data-test-id=\"dataTestId\"\n\t>\n\t\t<template #icon>\n\t\t\t<node-icon :nodeType=\"nodeType\" />\n\t\t</template>\n\n\t\t<template #tooltip v-if=\"isCommunityNode\">\n\t\t\t<p\n\t\t\t\t:class=\"$style.communityNodeIcon\"\n\t\t\t\tv-html=\"\n\t\t\t\t\ti18n.baseText('generic.communityNode.tooltip', {\n\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\tpackageName: nodeType.name.split('.')[0],\n\t\t\t\t\t\t\tdocURL: COMMUNITY_NODES_INSTALLATION_DOCS_URL,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\"\n\t\t\t\t@click=\"onCommunityNodeTooltipClick\"\n\t\t\t/>\n\t\t</template>\n\t\t<template #dragContent>\n\t\t\t<div :class=\"$style.draggableDataTransfer\" ref=\"draggableDataTransfer\" />\n\t\t\t<div :class=\"$style.draggable\" :style=\"draggableStyle\" v-show=\"dragging\">\n\t\t\t\t<node-icon :nodeType=\"nodeType\" @click.capture.stop :size=\"40\" :shrink=\"false\" />\n\t\t\t</div>\n\t\t</template>\n\t</n8n-node-creator-node>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { SimplifiedNodeType } from '@/Interface';\nimport { COMMUNITY_NODES_INSTALLATION_DOCS_URL, DEFAULT_SUBCATEGORY } from '@/constants';\n\nimport { isCommunityPackageName } from '@/utils';\nimport { getNewNodePosition, NODE_SIZE } from '@/utils/nodeViewUtils';\nimport { useNodeCreatorStore } from '@/stores/nodeCreator.store';\nimport NodeIcon from '@/components/NodeIcon.vue';\n\nimport { useActions } from '../composables/useActions';\nimport { useI18n, useTelemetry } from '@/composables';\n\nexport interface Props {\n\tnodeType: SimplifiedNodeType;\n\tsubcategory?: string;\n\tactive?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n\tactive: false,\n});\n\nconst i18n = useI18n();\nconst telemetry = useTelemetry();\n\nconst { actions } = useNodeCreatorStore();\nconst { getNodeTypesWithManualTrigger } = useActions();\n\nconst dragging = ref(false);\nconst draggablePosition = ref({ x: -100, y: -100 });\nconst draggableDataTransfer = ref(null as Element | null);\n\nconst description = computed<string>(() => {\n\treturn i18n.headerText({\n\t\tkey: `headers.${shortNodeType.value}.description`,\n\t\tfallback: props.nodeType.description,\n\t}) as string;\n});\nconst showActionArrow = computed(() => hasActions.value);\nconst dataTestId = computed(() =>\n\thasActions.value ? 'node-creator-action-item' : 'node-creator-node-item',\n);\n\nconst hasActions = computed(() => {\n\treturn nodeActions.value.length > 1;\n});\n\nconst nodeActions = computed(() => {\n\tconst nodeActions = actions[props.nodeType.name] || [];\n\treturn nodeActions;\n});\n\nconst shortNodeType = computed<string>(() => i18n.shortNodeType(props.nodeType.name) || '');\n\nconst draggableStyle = computed<{ top: string; left: string }>(() => ({\n\ttop: `${draggablePosition.value.y}px`,\n\tleft: `${draggablePosition.value.x}px`,\n}));\n\nconst isCommunityNode = computed<boolean>(() => isCommunityPackageName(props.nodeType.name));\n\nconst displayName = computed<any>(() => {\n\tconst displayName = props.nodeType.displayName.trimEnd();\n\n\treturn i18n.headerText({\n\t\tkey: `headers.${shortNodeType.value}.displayName`,\n\t\tfallback: hasActions.value ? displayName.replace('Trigger', '') : displayName,\n\t});\n});\n\nconst isTrigger = computed<boolean>(() => {\n\treturn props.nodeType.group.includes('trigger') && !hasActions.value;\n});\nfunction onDragStart(event: DragEvent): void {\n\t/**\n\t * Workaround for firefox, that doesn't attach the pageX and pageY coordinates to \"ondrag\" event.\n\t * All browsers attach the correct page coordinates to the \"dragover\" event.\n\t * @bug https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n\t */\n\tdocument.body.addEventListener('dragover', onDragOver);\n\n\tconst { pageX: x, pageY: y } = event;\n\n\tif (event.dataTransfer) {\n\t\tevent.dataTransfer.effectAllowed = 'copy';\n\t\tevent.dataTransfer.dropEffect = 'copy';\n\t\tevent.dataTransfer.setDragImage(draggableDataTransfer.value as Element, 0, 0);\n\t\tevent.dataTransfer.setData(\n\t\t\t'nodeTypeName',\n\t\t\tgetNodeTypesWithManualTrigger(props.nodeType.name).join(','),\n\t\t);\n\t}\n\n\tdragging.value = true;\n\tdraggablePosition.value = { x, y };\n}\n\nfunction onDragOver(event: DragEvent): void {\n\tif (!dragging.value || (event.pageX === 0 && event.pageY === 0)) {\n\t\treturn;\n\t}\n\n\tconst [x, y] = getNewNodePosition([], [event.pageX - NODE_SIZE / 2, event.pageY - NODE_SIZE / 2]);\n\n\tdraggablePosition.value = { x, y };\n}\n\nfunction onDragEnd(event: DragEvent): void {\n\tdocument.body.removeEventListener('dragover', onDragOver);\n\n\tdragging.value = false;\n\tsetTimeout(() => {\n\t\tdraggablePosition.value = { x: -100, y: -100 };\n\t}, 300);\n}\n\nfunction onCommunityNodeTooltipClick(event: MouseEvent) {\n\tif ((event.target as Element).localName === 'a') {\n\t\ttelemetry.track('user clicked cnr docs link', { source: 'nodes panel node' });\n\t}\n}\n</script>\n<style lang=\"scss\" module>\n.nodeItem {\n\t--trigger-icon-background-color: #{$trigger-icon-background-color};\n\t--trigger-icon-border-color: #{$trigger-icon-border-color};\n\tmargin-left: 15px;\n\tmargin-right: 12px;\n\tuser-select: none;\n}\n\n.communityNodeIcon {\n\tvertical-align: top;\n}\n\n.draggable {\n\twidth: 100px;\n\theight: 100px;\n\tposition: fixed;\n\tz-index: 1;\n\topacity: 0.66;\n\tborder: 2px solid var(--color-foreground-xdark);\n\tborder-radius: var(--border-radius-large);\n\tbackground-color: var(--color-background-xlight);\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n.draggableDataTransfer {\n\twidth: 1px;\n\theight: 1px;\n}\n</style>\n","<template>\n\t<n8n-node-creator-node\n\t\t:class=\"$style.subCategory\"\n\t\t:title=\"i18n.baseText(`nodeCreator.subcategoryNames.${subcategoryName}`)\"\n\t\t:isTrigger=\"false\"\n\t\t:description=\"i18n.baseText(`nodeCreator.subcategoryDescriptions.${subcategoryName}`)\"\n\t\t:showActionArrow=\"true\"\n\t>\n\t\t<template #icon>\n\t\t\t<n8n-node-icon type=\"icon\" :name=\"item.icon\" :circle=\"false\" :showTooltip=\"false\" />\n\t\t</template>\n\t</n8n-node-creator-node>\n</template>\n\n<script setup lang=\"ts\">\nimport type { SubcategoryItemProps } from '@/Interface';\nimport { camelCase } from 'lodash-es';\nimport { computed } from 'vue';\nimport { useI18n } from '@/composables';\n\nexport interface Props {\n\titem: SubcategoryItemProps;\n}\n\nconst props = defineProps<Props>();\nconst i18n = useI18n();\nconst subcategoryName = computed(() => camelCase(props.item.subcategory || props.item.title));\n</script>\n\n<style lang=\"scss\" module>\n.subCategory {\n\t--action-arrow-color: var(--color-text-light);\n\tmargin-left: 15px;\n\tmargin-right: 12px;\n}\n</style>\n","<template>\n\t<n8n-node-creator-node\n\t\t@dragstart=\"onDragStart\"\n\t\t@dragend=\"onDragEnd\"\n\t\tdraggable\n\t\t:class=\"$style.action\"\n\t\t:title=\"action.displayName\"\n\t\t:isTrigger=\"isTriggerAction(action)\"\n\t\tdata-keyboard-nav=\"true\"\n\t>\n\t\t<template #dragContent>\n\t\t\t<div :class=\"$style.draggableDataTransfer\" ref=\"draggableDataTransfer\" />\n\t\t\t<div :class=\"$style.draggable\" :style=\"draggableStyle\" v-show=\"dragging\">\n\t\t\t\t<node-icon :nodeType=\"nodeType\" @click.capture.stop :size=\"40\" :shrink=\"false\" />\n\t\t\t</div>\n\t\t</template>\n\t\t<template #icon>\n\t\t\t<node-icon :nodeType=\"action\" />\n\t\t</template>\n\t</n8n-node-creator-node>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, computed, toRefs, getCurrentInstance } from 'vue';\nimport type { ActionTypeDescription, SimplifiedNodeType } from '@/Interface';\nimport { WEBHOOK_NODE_TYPE } from '@/constants';\n\nimport { getNewNodePosition, NODE_SIZE } from '@/utils/nodeViewUtils';\nimport NodeIcon from '@/components/NodeIcon.vue';\n\nimport { useViewStacks } from '../composables/useViewStacks';\nimport { useActions } from '../composables/useActions';\n\nexport interface Props {\n\tnodeType: SimplifiedNodeType;\n\taction: ActionTypeDescription;\n}\n\nconst props = defineProps<Props>();\n\nconst instance = getCurrentInstance();\nconst telemetry = instance?.proxy.$telemetry;\n\nconst { getActionData, getNodeTypesWithManualTrigger, setAddedNodeActionParameters } = useActions();\nconst { activeViewStack } = useViewStacks();\n\nconst state = reactive({\n\tdragging: false,\n\tdraggablePosition: {\n\t\tx: -100,\n\t\ty: -100,\n\t},\n\tstoreWatcher: null as Function | null,\n\tdraggableDataTransfer: null as Element | null,\n});\n\nconst draggableStyle = computed<{ top: string; left: string }>(() => ({\n\ttop: `${state.draggablePosition.y}px`,\n\tleft: `${state.draggablePosition.x}px`,\n}));\n\nconst actionData = computed(() => getActionData(props.action));\n\nconst isTriggerAction = (action: ActionTypeDescription) =>\n\taction.name?.toLowerCase().includes('trigger') || action.name === WEBHOOK_NODE_TYPE;\n\nfunction onDragStart(event: DragEvent): void {\n\t/**\n\t * Workaround for firefox, that doesn't attach the pageX and pageY coordinates to \"ondrag\" event.\n\t * All browsers attach the correct page coordinates to the \"dragover\" event.\n\t * @bug https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n\t */\n\tdocument.body.addEventListener('dragover', onDragOver);\n\tconst { pageX: x, pageY: y } = event;\n\tif (event.dataTransfer) {\n\t\tevent.dataTransfer.effectAllowed = 'copy';\n\t\tevent.dataTransfer.dropEffect = 'copy';\n\t\tevent.dataTransfer.setDragImage(state.draggableDataTransfer as Element, 0, 0);\n\t\tevent.dataTransfer.setData(\n\t\t\t'nodeTypeName',\n\t\t\tgetNodeTypesWithManualTrigger(actionData.value?.key).join(','),\n\t\t);\n\t\tif (telemetry) {\n\t\t\tstate.storeWatcher = setAddedNodeActionParameters(\n\t\t\t\tactionData.value,\n\t\t\t\ttelemetry,\n\t\t\t\tactiveViewStack.rootView,\n\t\t\t);\n\t\t}\n\t\tdocument.body.addEventListener('dragend', onDragEnd);\n\t}\n\n\tstate.dragging = true;\n\tstate.draggablePosition = { x, y };\n}\n\nfunction onDragOver(event: DragEvent): void {\n\tif (!state.dragging || (event.pageX === 0 && event.pageY === 0)) {\n\t\treturn;\n\t}\n\n\tconst [x, y] = getNewNodePosition([], [event.pageX - NODE_SIZE / 2, event.pageY - NODE_SIZE / 2]);\n\n\tstate.draggablePosition = { x, y };\n}\n\nfunction onDragEnd(event: DragEvent): void {\n\tif (state.storeWatcher) state.storeWatcher();\n\tdocument.body.removeEventListener('dragend', onDragEnd);\n\tdocument.body.removeEventListener('dragover', onDragOver);\n\n\tstate.dragging = false;\n\tsetTimeout(() => {\n\t\tstate.draggablePosition = { x: -100, y: -100 };\n\t}, 300);\n}\nconst { draggableDataTransfer, dragging } = toRefs(state);\n</script>\n\n<style lang=\"scss\" module>\n.action {\n\t--node-creator-name-size: var(--font-size-2xs);\n\t--node-creator-name-weight: var(--font-weight-normal);\n\t--trigger-icon-background-color: #{$trigger-icon-background-color};\n\t--trigger-icon-border-color: #{$trigger-icon-border-color};\n\t--node-icon-size: 20px;\n\t--node-icon-margin-right: var(--spacing-xs);\n\n\tmargin-left: var(--spacing-s);\n\tmargin-right: var(--spacing-s);\n\tpadding: var(--spacing-2xs) 0;\n}\n.nodeIcon {\n\tmargin-right: var(--spacing-xs);\n}\n\n.draggable {\n\twidth: 100px;\n\theight: 100px;\n\tposition: fixed;\n\tz-index: 1;\n\topacity: 0.66;\n\tborder: 2px solid var(--color-foreground-xdark);\n\tborder-radius: var(--border-radius-large);\n\tbackground-color: var(--color-background-xlight);\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n.draggableDataTransfer {\n\twidth: 1px;\n\theight: 1px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { INodeCreateElement } from '@/Interface';\nimport { onMounted, watch, onUnmounted, ref, computed } from 'vue';\n\nimport { useKeyboardNavigation } from '../composables/useKeyboardNavigation';\nimport NodeItem from '../ItemTypes/NodeItem.vue';\nimport SubcategoryItem from '../ItemTypes/SubcategoryItem.vue';\nimport LabelItem from '../ItemTypes/LabelItem.vue';\nimport ActionItem from '../ItemTypes/ActionItem.vue';\nimport ViewItem from '../ItemTypes/ViewItem.vue';\nexport interface Props {\n\telements: INodeCreateElement[];\n\tactiveIndex?: number;\n\tdisabled?: boolean;\n\tlazyRender?: boolean;\n}\n\nconst LAZY_LOAD_THRESHOLD = 20;\nconst LAZY_LOAD_ITEMS_PER_TICK = 5;\nconst props = withDefaults(defineProps<Props>(), {\n\telements: () => [],\n\tlazyRender: true,\n});\n\nconst emit = defineEmits<{\n\t(event: 'selected', element: INodeCreateElement, $e?: Event): void;\n\t(event: 'dragstart', element: INodeCreateElement, $e: Event): void;\n\t(event: 'dragend', element: INodeCreateElement, $e: Event): void;\n}>();\n\nconst renderedItems = ref<INodeCreateElement[]>([]);\nconst renderAnimationRequest = ref<number>(0);\n\nconst activeItemId = computed(() => useKeyboardNavigation()?.activeItemId);\n\n// Lazy render large items lists to prevent the browser from freezing\n// when loading many items.\nfunction renderItems() {\n\tif (props.elements.length <= LAZY_LOAD_THRESHOLD || props.lazyRender === false) {\n\t\trenderedItems.value = props.elements;\n\t\treturn;\n\t}\n\n\tif (renderedItems.value.length < props.elements.length) {\n\t\trenderedItems.value.push(\n\t\t\t...props.elements.slice(\n\t\t\t\trenderedItems.value.length,\n\t\t\t\trenderedItems.value.length + LAZY_LOAD_ITEMS_PER_TICK,\n\t\t\t),\n\t\t);\n\t\trenderAnimationRequest.value = window.requestAnimationFrame(renderItems);\n\t}\n}\n\nfunction wrappedEmit(\n\tevent: 'selected' | 'dragstart' | 'dragend',\n\telement: INodeCreateElement,\n\t$e?: Event,\n) {\n\tif (props.disabled) return;\n\n\temit((event as 'selected') || 'dragstart' || 'dragend', element, $e);\n}\n\nfunction beforeEnter(el: HTMLElement) {\n\tel.style.height = '0';\n}\n\nfunction enter(el: HTMLElement) {\n\tel.style.height = `${el.scrollHeight}px`;\n}\n\nfunction beforeLeave(el: HTMLElement) {\n\tel.style.height = `${el.scrollHeight}px`;\n}\n\nfunction leave(el: HTMLElement) {\n\tel.style.height = '0';\n}\n\nonMounted(() => {\n\trenderItems();\n});\n\nonUnmounted(() => {\n\twindow.cancelAnimationFrame(renderAnimationRequest.value);\n\trenderedItems.value = [];\n});\n\n// Make sure the active item is always visible\n// scroll if needed\nwatch(\n\t() => props.elements,\n\t() => {\n\t\twindow.cancelAnimationFrame(renderAnimationRequest.value);\n\t\trenderedItems.value = [];\n\t\trenderItems();\n\t},\n);\n</script>\n\n<template>\n\t<div\n\t\tv-if=\"elements.length > 0\"\n\t\t:class=\"$style.itemsRenderer\"\n\t\tname=\"accordion\"\n\t\t@before-enter=\"beforeEnter\"\n\t\t@enter=\"enter\"\n\t\t@before-leave=\"beforeLeave\"\n\t\t@leave=\"leave\"\n\t>\n\t\t<slot />\n\t\t<div\n\t\t\tv-for=\"item in elements\"\n\t\t\t:key=\"item.uuid\"\n\t\t\tdata-test-id=\"item-iterator-item\"\n\t\t\t:class=\"{\n\t\t\t\tclickable: !disabled,\n\t\t\t\t[$style.active]: activeItemId === item.uuid,\n\t\t\t\t[$style.iteratorItem]: true,\n\t\t\t\t[$style[item.type]]: true,\n\t\t\t}\"\n\t\t\tref=\"iteratorItems\"\n\t\t\t:data-keyboard-nav-type=\"item.type !== 'label' ? item.type : undefined\"\n\t\t\t:data-keyboard-nav-id=\"item.uuid\"\n\t\t\t@click=\"wrappedEmit('selected', item)\"\n\t\t>\n\t\t\t<div v-if=\"renderedItems.includes(item)\">\n\t\t\t\t<label-item v-if=\"item.type === 'label'\" :item=\"item\" />\n\t\t\t\t<subcategory-item v-if=\"item.type === 'subcategory'\" :item=\"item.properties\" />\n\n\t\t\t\t<node-item\n\t\t\t\t\tv-if=\"item.type === 'node'\"\n\t\t\t\t\t:nodeType=\"item.properties\"\n\t\t\t\t\t:active=\"true\"\n\t\t\t\t\t:subcategory=\"item.subcategory\"\n\t\t\t\t/>\n\n\t\t\t\t<action-item\n\t\t\t\t\tv-if=\"item.type === 'action'\"\n\t\t\t\t\t:nodeType=\"item.properties\"\n\t\t\t\t\t:action=\"item.properties\"\n\t\t\t\t\t:active=\"true\"\n\t\t\t\t/>\n\n\t\t\t\t<view-item\n\t\t\t\t\tv-else-if=\"item.type === 'view'\"\n\t\t\t\t\t:view=\"item.properties\"\n\t\t\t\t\t:class=\"$style.viewItem\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<n8n-loading :loading=\"true\" :rows=\"1\" variant=\"p\" :class=\"$style.itemSkeleton\" v-else />\n\t\t</div>\n\t</div>\n\t<div :class=\"$style.empty\" v-else>\n\t\t<slot name=\"empty\" />\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.itemSkeleton {\n\theight: 50px;\n}\n.iteratorItem {\n\t// Make sure border is fully visible\n\tmargin-left: 1px;\n\tposition: relative;\n\t&::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: -1px;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tborder-left: 2px solid transparent;\n\t}\n\t&:not(.label):not(.category):hover::before {\n\t\tborder-color: $node-creator-item-hover-border-color;\n\t}\n\n\t&.active:not(.category)::before {\n\t\tborder-color: $color-primary;\n\t}\n}\n.empty {\n\t:global([role='alert']) {\n\t\tmargin: var(--spacing-xs) var(--spacing-s);\n\t}\n}\n.itemsRenderer {\n\tdisplay: flex;\n\tflex-direction: column;\n\n\tscrollbar-width: none; /* Firefox 64 */\n\t& > *::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n}\n.view {\n\tmargin-top: var(--spacing-s);\n\tpadding-top: var(--spacing-xs);\n\tposition: relative;\n\n\t&::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: var(--spacing-s);\n\t\tright: var(--spacing-s);\n\t\ttop: 0;\n\t\tmargin: auto;\n\t\tbottom: 0;\n\t\tborder-top: 1px solid var(--color-foreground-base);\n\t}\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\nexport interface Props {\n\texpanded?: boolean;\n\tactive?: boolean;\n\tcount?: number;\n\tname: string;\n\tisTrigger?: boolean;\n}\nconst props = withDefaults(defineProps<Props>(), {\n\texpanded: true,\n});\n\nconst categoryName = computed(() => {\n\tconst itemsCount = props.count || 0;\n\treturn itemsCount > 0 ? `${props.name} (${itemsCount})` : props.name;\n});\n</script>\n\n<template>\n\t<div\n\t\t:class=\"$style.categoryWrapper\"\n\t\tv-bind=\"$attrs\"\n\t\tdata-keyboard-nav=\"true\"\n\t\tdata-test-id=\"node-creator-category-item\"\n\t>\n\t\t<div :class=\"{ [$style.category]: true, [$style.active]: active }\">\n\t\t\t<span :class=\"$style.name\">\n\t\t\t\t<span v-text=\"categoryName\" />\n\t\t\t\t<font-awesome-icon icon=\"bolt\" v-if=\"isTrigger\" size=\"xs\" :class=\"$style.triggerIcon\" />\n\t\t\t\t<slot />\n\t\t\t</span>\n\t\t\t<font-awesome-icon v-if=\"expanded\" icon=\"chevron-down\" :class=\"$style.arrow\" />\n\t\t\t<font-awesome-icon :class=\"$style.arrow\" icon=\"chevron-up\" v-else />\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.triggerIcon {\n\tcolor: var(--color-primary);\n\tmargin-left: var(--spacing-3xs);\n}\n.category {\n\tfont-size: var(--font-size-s);\n\tfont-weight: var(--font-weight-bold);\n\tline-height: var(--font-line-height-compact);\n\tpadding: var(--spacing-2xs) var(--spacing-s);\n\tborder-bottom: 1px solid $node-creator-border-color;\n\tdisplay: flex;\n\tcursor: pointer;\n\n\tposition: relative;\n\t&::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tborder-left: 2px solid transparent;\n\t}\n\t&:hover::before {\n\t\tborder-color: $node-creator-item-hover-border-color;\n\t}\n\t&.active::before {\n\t\tborder-color: $color-primary;\n\t}\n}\n\n.name {\n\tflex-grow: 1;\n\tcolor: var(--color-text-dark);\n}\n\n.arrow {\n\tfont-size: var(--font-size-2xs);\n\twidth: 12px;\n\tcolor: $node-creator-arrow-color;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, watch, ref, getCurrentInstance } from 'vue';\nimport type { INodeCreateElement } from '@/Interface';\n\nimport { useWorkflowsStore } from '@/stores/workflows.store';\n\nimport { useKeyboardNavigation } from '../composables/useKeyboardNavigation';\nimport { useViewStacks } from '../composables/useViewStacks';\nimport ItemsRenderer from './ItemsRenderer.vue';\nimport CategoryItem from '../ItemTypes/CategoryItem.vue';\n\nexport interface Props {\n\telements: INodeCreateElement[];\n\tcategory: string;\n\tdisabled?: boolean;\n\tactiveIndex?: number;\n\tisTriggerCategory?: boolean;\n\tmouseOverTooltip?: string;\n\texpanded?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n\telements: () => [],\n});\n\nconst instance = getCurrentInstance();\n\nconst { popViewStack } = useViewStacks();\nconst { registerKeyHook } = useKeyboardNavigation();\nconst { workflowId } = useWorkflowsStore();\n\nconst activeItemId = computed(() => useKeyboardNavigation()?.activeItemId);\nconst actionCount = computed(() => props.elements.filter(({ type }) => type === 'action').length);\nconst expanded = ref(props.expanded ?? false);\n\nfunction toggleExpanded() {\n\tsetExpanded(!expanded.value);\n}\n\nfunction setExpanded(isExpanded: boolean) {\n\texpanded.value = isExpanded;\n\n\tif (expanded.value) {\n\t\tinstance?.proxy.$telemetry.trackNodesPanel('nodeCreateList.onCategoryExpanded', {\n\t\t\tcategory_name: props.category,\n\t\t\tworkflow_id: workflowId,\n\t\t});\n\t}\n}\n\nfunction arrowRight() {\n\tif (expanded.value) return;\n\n\tsetExpanded(true);\n}\n\nfunction arrowLeft() {\n\tif (!expanded.value) {\n\t\tpopViewStack();\n\t\treturn;\n\t}\n\n\tsetExpanded(false);\n}\n\nwatch(\n\t() => props.elements,\n\t() => {\n\t\tsetExpanded(true);\n\t},\n);\n\nregisterKeyHook(`CategoryRight_${props.category}`, {\n\tkeyboardKeys: ['ArrowRight'],\n\tcondition: (type, activeItemId) => type === 'category' && props.category === activeItemId,\n\thandler: arrowRight,\n});\nregisterKeyHook(`CategoryToggle_${props.category}`, {\n\tkeyboardKeys: ['Enter'],\n\tcondition: (type, activeItemId) => type === 'category' && props.category === activeItemId,\n\thandler: toggleExpanded,\n});\n\nregisterKeyHook(`CategoryLeft_${props.category}`, {\n\tkeyboardKeys: ['ArrowLeft'],\n\tcondition: (type, activeItemId) => type === 'category' && props.category === activeItemId,\n\thandler: arrowLeft,\n});\n</script>\n\n<template>\n\t<div :class=\"$style.categorizedItemsRenderer\" :data-category-collapsed=\"!expanded\">\n\t\t<CategoryItem\n\t\t\t:class=\"$style.categoryItem\"\n\t\t\t:name=\"category\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:active=\"activeItemId === category\"\n\t\t\t:count=\"actionCount\"\n\t\t\t:expanded=\"expanded\"\n\t\t\t:isTrigger=\"isTriggerCategory\"\n\t\t\tdata-keyboard-nav-type=\"category\"\n\t\t\t:data-keyboard-nav-id=\"category\"\n\t\t\t@click=\"toggleExpanded\"\n\t\t>\n\t\t\t<span :class=\"$style.mouseOverTooltip\" v-if=\"mouseOverTooltip\">\n\t\t\t\t<n8n-tooltip placement=\"top\" :popper-class=\"$style.tooltipPopper\">\n\t\t\t\t\t<n8n-icon icon=\"question-circle\" size=\"small\" />\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<div v-html=\"mouseOverTooltip\" />\n\t\t\t\t\t</template>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</span>\n\t\t</CategoryItem>\n\t\t<div :class=\"$style.contentSlot\" v-if=\"expanded && actionCount > 0 && $slots.default\">\n\t\t\t<slot />\n\t\t</div>\n\t\t<!-- Pass through listeners & empty slot to ItemsRenderer -->\n\t\t<ItemsRenderer\n\t\t\tv-if=\"expanded\"\n\t\t\tv-bind=\"$attrs\"\n\t\t\t:elements=\"elements\"\n\t\t\t:isTrigger=\"isTriggerCategory\"\n\t\t>\n\t\t\t<template #default> </template>\n\t\t\t<template #empty>\n\t\t\t\t<slot name=\"empty\" v-bind=\"{ elements }\" />\n\t\t\t</template>\n\t\t</ItemsRenderer>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.mouseOverTooltip {\n\topacity: 0;\n\tmargin-left: var(--spacing-3xs);\n\t&:hover {\n\t\tcolor: var(--color-primary);\n\t}\n\n\t.categorizedItemsRenderer:hover & {\n\t\topacity: 1;\n\t}\n}\n.tooltipPopper {\n\tmax-width: 260px;\n}\n.contentSlot {\n\tpadding: 0 var(--spacing-s) var(--spacing-3xs);\n\tmargin-top: var(--spacing-xs);\n}\n.categorizedItemsRenderer {\n\tpadding-bottom: var(--spacing-s);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, onMounted, defineComponent, h } from 'vue';\nimport type { PropType } from 'vue';\nimport type {\n\tINodeCreateElement,\n\tActionTypeDescription,\n\tNodeFilterType,\n\tIUpdateInformation,\n\tActionCreateElement,\n} from '@/Interface';\nimport {\n\tHTTP_REQUEST_NODE_TYPE,\n\tREGULAR_NODE_CREATOR_VIEW,\n\tTRIGGER_NODE_CREATOR_VIEW,\n\tCUSTOM_API_CALL_KEY,\n} from '@/constants';\n\nimport { useUsersStore } from '@/stores/users.store';\nimport { useWebhooksStore } from '@/stores/webhooks.store';\nimport { runExternalHook } from '@/utils';\n\nimport { useActions } from '../composables/useActions';\nimport { useKeyboardNavigation } from '../composables/useKeyboardNavigation';\nimport { useViewStacks } from '../composables/useViewStacks';\n\nimport ItemsRenderer from '../Renderers/ItemsRenderer.vue';\nimport CategorizedItemsRenderer from '../Renderers/CategorizedItemsRenderer.vue';\n\nconst emit = defineEmits({\n\tnodeTypeSelected: (nodeTypes: string[]) => true,\n});\nconst instance = getCurrentInstance();\nconst telemetry = instance?.proxy.$telemetry;\n\nconst { userActivated } = useUsersStore();\nconst { popViewStack, updateCurrentViewStack } = useViewStacks();\nconst { registerKeyHook } = useKeyboardNavigation();\nconst {\n\tgetNodeTypesWithManualTrigger,\n\tsetAddedNodeActionParameters,\n\tgetActionData,\n\tgetPlaceholderTriggerActions,\n\tparseCategoryActions,\n\tactionsCategoryLocales,\n} = useActions();\n\n// We only inject labels if search is empty\nconst parsedTriggerActions = computed(() =>\n\tparseActions(actions.value, actionsCategoryLocales.value.triggers, false),\n);\nconst parsedActionActions = computed(() =>\n\tparseActions(actions.value, actionsCategoryLocales.value.actions, !search.value),\n);\nconst parsedTriggerActionsBaseline = computed(() =>\n\tparseActions(\n\t\tuseViewStacks().activeViewStack.baselineItems || [],\n\t\tactionsCategoryLocales.value.triggers,\n\t\tfalse,\n\t),\n);\nconst parsedActionActionsBaseline = computed(() =>\n\tparseActions(\n\t\tuseViewStacks().activeViewStack.baselineItems || [],\n\t\tactionsCategoryLocales.value.actions,\n\t\t!search.value,\n\t),\n);\n\n// Because the placeholder items are inserted into the slots, we need to\n// add the placeholder count to the category name manually\nconst triggerCategoryName = computed(() =>\n\tparsedTriggerActions.value.length || search.value\n\t\t? actionsCategoryLocales.value.triggers\n\t\t: `${actionsCategoryLocales.value.triggers} (${placeholderTriggerActions.length})`,\n);\n\nconst actions = computed(() => {\n\treturn (useViewStacks().activeViewStack.items || []).filter(\n\t\t(p) => (p as ActionCreateElement).properties.actionKey !== CUSTOM_API_CALL_KEY,\n\t);\n});\n\nconst search = computed(() => useViewStacks().activeViewStack.search);\n\nconst subcategory = computed(() => useViewStacks().activeViewStack.subcategory);\n\nconst rootView = computed(() => useViewStacks().activeViewStack.rootView);\n\nconst placeholderTriggerActions = getPlaceholderTriggerActions(subcategory.value || '');\n\nconst hasNoTriggerActions = computed(\n\t() =>\n\t\tparseCategoryActions(\n\t\t\tuseViewStacks().activeViewStack.baselineItems || [],\n\t\t\tactionsCategoryLocales.value.triggers,\n\t\t\t!search.value,\n\t\t).length === 0,\n);\n\nconst containsAPIAction = computed(() => {\n\tconst actions = useViewStacks().activeViewStack.baselineItems || [];\n\n\tconst result = actions.some((p) => {\n\t\treturn ((p as ActionCreateElement).properties.actionKey ?? '') === CUSTOM_API_CALL_KEY;\n\t});\n\n\treturn result === true;\n});\n\nconst isTriggerRootView = computed(() => rootView.value === TRIGGER_NODE_CREATOR_VIEW);\n\nregisterKeyHook('ActionsKeyRight', {\n\tkeyboardKeys: ['ArrowRight', 'Enter'],\n\tcondition: (type) => type === 'action',\n\thandler: onKeySelect,\n});\n\nregisterKeyHook('ActionsKeyLeft', {\n\tkeyboardKeys: ['ArrowLeft'],\n\tcondition: (type) => type === 'action',\n\thandler: arrowLeft,\n});\n\nfunction parseActions(base: INodeCreateElement[], locale: string, withLabels = false) {\n\treturn parseCategoryActions(base, locale, withLabels);\n}\n\nfunction arrowLeft() {\n\tpopViewStack();\n}\n\nfunction onKeySelect(activeItemId: string) {\n\tconst mergedActions = [...actions.value, ...placeholderTriggerActions];\n\tconst activeAction = mergedActions.find((a) => a.uuid === activeItemId);\n\n\tif (activeAction) onSelected(activeAction);\n}\n\nfunction onSelected(actionCreateElement: INodeCreateElement) {\n\tconst actionData = getActionData(actionCreateElement.properties as ActionTypeDescription);\n\tconst isPlaceholderTriggerAction = placeholderTriggerActions.some(\n\t\t(p) => p.key === actionCreateElement.key,\n\t);\n\n\tif (isPlaceholderTriggerAction && isTriggerRootView.value) {\n\t\tconst actionNode = actions.value[0].key;\n\n\t\temit('nodeTypeSelected', [actionData.key as string, actionNode]);\n\t} else {\n\t\temit('nodeTypeSelected', getNodeTypesWithManualTrigger(actionData.key));\n\t}\n\n\tif (telemetry) setAddedNodeActionParameters(actionData, telemetry, rootView.value);\n}\n\nfunction trackActionsView() {\n\tconst activeViewStack = useViewStacks().activeViewStack;\n\n\tconst trigger_action_count = (activeViewStack.baselineItems || [])?.filter((action) =>\n\t\taction.key.toLowerCase().includes('trigger'),\n\t).length;\n\n\tconst appIdentifier = [...actions.value, ...placeholderTriggerActions][0].key;\n\n\tconst trackingPayload = {\n\t\tapp_identifier: appIdentifier,\n\t\tactions: (activeViewStack.baselineItems || [])?.map(\n\t\t\t(action) => (action as ActionCreateElement).properties.displayName,\n\t\t),\n\t\tregular_action_count: (activeViewStack.baselineItems || [])?.length - trigger_action_count,\n\t\ttrigger_action_count,\n\t};\n\n\tvoid runExternalHook('nodeCreateList.onViewActions', useWebhooksStore(), trackingPayload);\n\ttelemetry?.trackNodesPanel('nodeCreateList.onViewActions', trackingPayload);\n}\n\nfunction resetSearch() {\n\tupdateCurrentViewStack({ search: '' });\n}\n\nfunction addHttpNode() {\n\tconst updateData = {\n\t\tname: '',\n\t\tkey: HTTP_REQUEST_NODE_TYPE,\n\t\tvalue: {\n\t\t\tauthentication: 'predefinedCredentialType',\n\t\t},\n\t} as IUpdateInformation;\n\n\temit('nodeTypeSelected', [HTTP_REQUEST_NODE_TYPE]);\n\tif (telemetry) setAddedNodeActionParameters(updateData);\n\n\tconst app_identifier = actions.value[0].key;\n\tvoid runExternalHook('nodeCreateList.onActionsCustmAPIClicked', useWebhooksStore(), {\n\t\tapp_identifier,\n\t});\n\ttelemetry?.trackNodesPanel('nodeCreateList.onActionsCustmAPIClicked', { app_identifier });\n}\n\n// Anonymous component to handle triggers and actions rendering order\nconst OrderSwitcher = defineComponent({\n\tprops: {\n\t\trootView: {\n\t\t\ttype: String as PropType<NodeFilterType>,\n\t\t},\n\t},\n\tsetup(props, { slots }) {\n\t\treturn () =>\n\t\t\th(\n\t\t\t\t'div',\n\t\t\t\t{},\n\t\t\t\tprops.rootView === REGULAR_NODE_CREATOR_VIEW\n\t\t\t\t\t? [slots.actions?.(), slots.triggers?.()]\n\t\t\t\t\t: [slots.triggers?.(), slots.actions?.()],\n\t\t\t);\n\t},\n});\n\nonMounted(() => {\n\ttrackActionsView();\n});\n</script>\n\n<template>\n\t<div :class=\"$style.container\">\n\t\t<OrderSwitcher :rootView=\"rootView\">\n\t\t\t<template #triggers v-if=\"isTriggerRootView || parsedTriggerActionsBaseline.length !== 0\">\n\t\t\t\t<!-- Triggers Category -->\n\t\t\t\t<CategorizedItemsRenderer\n\t\t\t\t\t:elements=\"parsedTriggerActions\"\n\t\t\t\t\t:category=\"triggerCategoryName\"\n\t\t\t\t\t:mouseOverTooltip=\"$locale.baseText('nodeCreator.actionsTooltip.triggersStartWorkflow')\"\n\t\t\t\t\tisTriggerCategory\n\t\t\t\t\t:expanded=\"isTriggerRootView || parsedActionActions.length === 0\"\n\t\t\t\t\t@selected=\"onSelected\"\n\t\t\t\t>\n\t\t\t\t\t<!-- Empty state -->\n\t\t\t\t\t<template #empty v-if=\"hasNoTriggerActions\">\n\t\t\t\t\t\t<n8n-callout\n\t\t\t\t\t\t\tv-if=\"hasNoTriggerActions\"\n\t\t\t\t\t\t\ttheme=\"info\"\n\t\t\t\t\t\t\ticonless\n\t\t\t\t\t\t\tslim\n\t\t\t\t\t\t\tdata-test-id=\"actions-panel-no-triggers-callout\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tv-html=\"\n\t\t\t\t\t\t\t\t\t$locale.baseText('nodeCreator.actionsCallout.noTriggerItems', {\n\t\t\t\t\t\t\t\t\t\tinterpolate: { nodeName: subcategory },\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</n8n-callout>\n\t\t\t\t\t\t<ItemsRenderer @selected=\"onSelected\" :elements=\"placeholderTriggerActions\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template #empty v-else>\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t:class=\"$style.resetSearch\"\n\t\t\t\t\t\t\tv-html=\"$locale.baseText('nodeCreator.actionsCategory.noMatchingTriggers')\"\n\t\t\t\t\t\t\t@click=\"resetSearch\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</template>\n\t\t\t\t</CategorizedItemsRenderer>\n\t\t\t</template>\n\t\t\t<template #actions v-if=\"!isTriggerRootView || parsedActionActionsBaseline.length !== 0\">\n\t\t\t\t<!-- Actions Category -->\n\t\t\t\t<CategorizedItemsRenderer\n\t\t\t\t\t:elements=\"parsedActionActions\"\n\t\t\t\t\t:category=\"actionsCategoryLocales.actions\"\n\t\t\t\t\t:mouseOverTooltip=\"$locale.baseText('nodeCreator.actionsTooltip.actionsPerformStep')\"\n\t\t\t\t\t:expanded=\"!isTriggerRootView || parsedTriggerActions.length === 0\"\n\t\t\t\t\t@selected=\"onSelected\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-callout\n\t\t\t\t\t\ttheme=\"info\"\n\t\t\t\t\t\ticonless\n\t\t\t\t\t\tv-if=\"!userActivated && isTriggerRootView\"\n\t\t\t\t\t\tslim\n\t\t\t\t\t\tdata-test-id=\"actions-panel-activation-callout\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span v-html=\"$locale.baseText('nodeCreator.actionsCallout.triggersStartWorkflow')\" />\n\t\t\t\t\t</n8n-callout>\n\t\t\t\t\t<!-- Empty state -->\n\t\t\t\t\t<template #empty>\n\t\t\t\t\t\t<n8n-info-tip theme=\"info\" type=\"note\" v-if=\"!search\" :class=\"$style.actionsEmpty\">\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tv-html=\"\n\t\t\t\t\t\t\t\t\t$locale.baseText('nodeCreator.actionsCallout.noActionItems', {\n\t\t\t\t\t\t\t\t\t\tinterpolate: { nodeName: subcategory },\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</n8n-info-tip>\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t:class=\"$style.resetSearch\"\n\t\t\t\t\t\t\tv-html=\"$locale.baseText('nodeCreator.actionsCategory.noMatchingActions')\"\n\t\t\t\t\t\t\t@click=\"resetSearch\"\n\t\t\t\t\t\t\tdata-test-id=\"actions-panel-no-matching-actions\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</template>\n\t\t\t\t</CategorizedItemsRenderer>\n\t\t\t</template>\n\t\t</OrderSwitcher>\n\t\t<div :class=\"$style.apiHint\" v-if=\"containsAPIAction\">\n\t\t\t<span\n\t\t\t\t@click.prevent=\"addHttpNode\"\n\t\t\t\tv-html=\"\n\t\t\t\t\t$locale.baseText('nodeCreator.actionsList.apiCall', {\n\t\t\t\t\t\tinterpolate: { node: subcategory },\n\t\t\t\t\t})\n\t\t\t\t\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.container {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding-bottom: var(--spacing-3xl);\n}\n\n.resetSearch {\n\tcursor: pointer;\n\tline-height: var(--font-line-height-regular);\n\tfont-weight: var(--font-weight-regular);\n\tfont-size: var(--font-size-2xs);\n\tpadding: var(--spacing-2xs) var(--spacing-s) 0;\n\tcolor: var(--color-text-base);\n\n\ti {\n\t\tfont-weight: var(--font-weight-bold);\n\t\tfont-style: normal;\n\t\ttext-decoration: underline;\n\t}\n}\n.actionsEmpty {\n\tpadding: var(--spacing-2xs) var(--spacing-xs) var(--spacing-s);\n\tfont-weight: var(--font-weight-regular);\n\n\tstrong {\n\t\tfont-weight: var(--font-weight-bold);\n\t}\n}\n.apiHint {\n\tpadding: 0 var(--spacing-s) var(--spacing-xl);\n\tfont-size: var(--font-size-2xs);\n\tcolor: var(--color-text-base);\n\tline-height: var(--font-line-height-regular);\n\tz-index: 1;\n}\n</style>\n","<template>\n\t<svg\n\t\twidth=\"75px\"\n\t\theight=\"75px\"\n\t\tviewBox=\"0 0 75 75\"\n\t\tversion=\"1.1\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t>\n\t\t<title>no-nodes-keyart</title>\n\t\t<g\n\t\t\tid=\"Nodes-panel-prototype-V2.1\"\n\t\t\tstroke=\"none\"\n\t\t\tstroke-width=\"1\"\n\t\t\tfill=\"none\"\n\t\t\tfill-rule=\"evenodd\"\n\t\t>\n\t\t\t<g id=\"nodes-panel-(component)\" transform=\"translate(-2085.000000, -352.000000)\">\n\t\t\t\t<g id=\"nodes_panel\" transform=\"translate(1880.000000, 151.000000)\">\n\t\t\t\t\t<g id=\"Panel\" transform=\"translate(50.000000, 0.000000)\">\n\t\t\t\t\t\t<g id=\"Group-3\" transform=\"translate(105.000000, 171.000000)\">\n\t\t\t\t\t\t\t<g id=\"no-nodes-keyart\" transform=\"translate(50.000000, 30.000000)\">\n\t\t\t\t\t\t\t\t<rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"75\" height=\"75\"></rect>\n\t\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\t\tid=\"Group\"\n\t\t\t\t\t\t\t\t\ttransform=\"translate(6.562500, 8.164062)\"\n\t\t\t\t\t\t\t\t\tfill=\"#C4C8D1\"\n\t\t\t\t\t\t\t\t\tfill-rule=\"nonzero\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<polygon\n\t\t\t\t\t\t\t\t\t\tid=\"Rectangle\"\n\t\t\t\t\t\t\t\t\t\ttransform=\"translate(49.192016, 45.302553) rotate(-45.000000) translate(-49.192016, -45.302553) \"\n\t\t\t\t\t\t\t\t\t\tpoints=\"44.5045606 32.0526802 53.8794707 32.0526802 53.8794707 58.5524261 44.5045606 58.5524261\"\n\t\t\t\t\t\t\t\t\t></polygon>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M48.125,23.0859375 C54.15625,23.0859375 59.0625,18.1796875 59.0625,12.1484375 C59.0625,10.3359375 58.5625,8.6484375 57.78125,7.1484375 L49.34375,15.5859375 L44.6875,10.9296875 L53.125,2.4921875 C51.625,1.7109375 49.9375,1.2109375 48.125,1.2109375 C42.09375,1.2109375 37.1875,6.1171875 37.1875,12.1484375 C37.1875,13.4296875 37.4375,14.6484375 37.84375,15.7734375 L32.0625,21.5546875 L26.5,15.9921875 L28.71875,13.7734375 L24.3125,9.3671875 L30.9375,2.7421875 C27.28125,-0.9140625 21.34375,-0.9140625 17.6875,2.7421875 L6.625,13.8046875 L11.03125,18.2109375 L2.21875,18.2109375 L1.38777878e-15,20.4296875 L11.0625,31.4921875 L13.28125,29.2734375 L13.28125,20.4296875 L17.6875,24.8359375 L19.90625,22.6171875 L25.46875,28.1796875 L2.3125,51.3359375 L8.9375,57.9609375 L44.5,22.4296875 C45.625,22.8359375 46.84375,23.0859375 48.125,23.0859375 Z\"\n\t\t\t\t\t\t\t\t\t\tid=\"Path\"\n\t\t\t\t\t\t\t\t\t></path>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t</g>\n\t\t</g>\n\t</svg>\n</template>\n","<script setup lang=\"ts\">\nimport { camelCase } from 'lodash-es';\nimport { computed } from 'vue';\nimport type { INodeCreateElement, NodeFilterType } from '@/Interface';\nimport { TRIGGER_NODE_CREATOR_VIEW, HTTP_REQUEST_NODE_TYPE, WEBHOOK_NODE_TYPE } from '@/constants';\n\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport { useRootStore } from '@/stores/n8nRoot.store';\nimport { useNodeCreatorStore } from '@/stores/nodeCreator.store';\n\nimport { TriggerView, RegularView } from '../viewsData';\nimport { transformNodeType } from '../utils';\nimport { useViewStacks } from '../composables/useViewStacks';\nimport { useActions } from '../composables/useActions';\nimport { useKeyboardNavigation } from '../composables/useKeyboardNavigation';\nimport ItemsRenderer from '../Renderers/ItemsRenderer.vue';\nimport CategorizedItemsRenderer from '../Renderers/CategorizedItemsRenderer.vue';\nimport NoResults from '../Panel/NoResults.vue';\nimport { useI18n, useTelemetry } from '@/composables';\n\nexport interface Props {\n\trootView: 'trigger' | 'action';\n}\n\nconst emit = defineEmits({\n\tnodeTypeSelected: (nodeTypes: string[]) => true,\n});\n\nconst i18n = useI18n();\nconst telemetry = useTelemetry();\n\nconst { mergedNodes, actions } = useNodeCreatorStore();\nconst { baseUrl } = useRootStore();\nconst { getNodeTypesWithManualTrigger } = useActions();\nconst { pushViewStack, popViewStack } = useViewStacks();\n\nconst { registerKeyHook } = useKeyboardNavigation();\n\nconst activeViewStack = computed(() => useViewStacks().activeViewStack);\nconst globalSearchItemsDiff = computed(() => useViewStacks().globalSearchItemsDiff);\n\nfunction selectNodeType(nodeTypes: string[]) {\n\temit(\n\t\t'nodeTypeSelected',\n\t\tnodeTypes.length === 1 ? getNodeTypesWithManualTrigger(nodeTypes[0]) : nodeTypes,\n\t);\n}\n\nfunction onSelected(item: INodeCreateElement) {\n\tif (item.type === 'subcategory') {\n\t\tconst title = i18n.baseText(\n\t\t\t`nodeCreator.subcategoryNames.${camelCase(item.properties.title)}` as BaseTextKey,\n\t\t);\n\n\t\tpushViewStack({\n\t\t\tsubcategory: item.key,\n\t\t\ttitle,\n\t\t\tmode: 'nodes',\n\t\t\trootView: activeViewStack.value.rootView,\n\t\t\tforceIncludeNodes: item.properties.forceIncludeNodes,\n\t\t\tbaseFilter: baseSubcategoriesFilter,\n\t\t\titemsMapper: subcategoriesMapper,\n\t\t});\n\n\t\ttelemetry.trackNodesPanel('nodeCreateList.onSubcategorySelected', {\n\t\t\tsubcategory: item.key,\n\t\t});\n\t}\n\n\tif (item.type === 'node') {\n\t\tconst nodeActions = actions?.[item.key] || [];\n\t\tif (nodeActions.length <= 1) {\n\t\t\tselectNodeType([item.key]);\n\t\t\treturn;\n\t\t}\n\n\t\tconst icon = item.properties.iconUrl\n\t\t\t? `${baseUrl}${item.properties.iconUrl}`\n\t\t\t: item.properties.icon?.split(':')[1];\n\n\t\tconst transformedActions = nodeActions?.map((a) =>\n\t\t\ttransformNodeType(a, item.properties.displayName, 'action'),\n\t\t);\n\n\t\tpushViewStack({\n\t\t\tsubcategory: item.properties.displayName,\n\t\t\ttitle: item.properties.displayName,\n\t\t\tnodeIcon: {\n\t\t\t\tcolor: item.properties.defaults?.color || '',\n\t\t\t\ticon,\n\t\t\t\ticonType: item.properties.iconUrl ? 'file' : 'icon',\n\t\t\t},\n\n\t\t\trootView: activeViewStack.value.rootView,\n\t\t\thasSearch: true,\n\t\t\tmode: 'actions',\n\t\t\titems: transformedActions,\n\t\t});\n\t}\n\n\tif (item.type === 'view') {\n\t\tconst view = item.key === TRIGGER_NODE_CREATOR_VIEW ? TriggerView() : RegularView();\n\n\t\tpushViewStack({\n\t\t\ttitle: view.title,\n\t\t\tsubtitle: view?.subtitle ?? '',\n\t\t\titems: view.items as INodeCreateElement[],\n\t\t\thasSearch: true,\n\t\t\trootView: view.value as NodeFilterType,\n\t\t\tmode: 'nodes',\n\t\t\t// Root search should include all nodes\n\t\t\tsearchItems: mergedNodes,\n\t\t});\n\t}\n}\n\nfunction subcategoriesMapper(item: INodeCreateElement) {\n\tif (item.type !== 'node') return item;\n\n\tconst hasTriggerGroup = item.properties.group.includes('trigger');\n\tconst nodeActions = actions?.[item.key] || [];\n\tconst hasActions = nodeActions.length > 0;\n\n\tif (hasTriggerGroup && hasActions) {\n\t\tif (item.properties?.codex) {\n\t\t\t// Store the original name in the alias so we can search for it\n\t\t\titem.properties.codex.alias = [\n\t\t\t\t...(item.properties.codex?.alias || []),\n\t\t\t\titem.properties.displayName,\n\t\t\t];\n\t\t}\n\t\titem.properties.displayName = item.properties.displayName.replace(' Trigger', '');\n\t}\n\treturn item;\n}\n\nfunction baseSubcategoriesFilter(item: INodeCreateElement) {\n\tif (item.type !== 'node') return false;\n\n\tconst hasTriggerGroup = item.properties.group.includes('trigger');\n\tconst nodeActions = actions?.[item.key] || [];\n\tconst hasActions = nodeActions.length > 0;\n\n\tconst isTriggerRootView = activeViewStack.value.rootView === TRIGGER_NODE_CREATOR_VIEW;\n\tif (isTriggerRootView) {\n\t\treturn hasActions || hasTriggerGroup;\n\t}\n\n\treturn hasActions || !hasTriggerGroup;\n}\n\nfunction arrowLeft() {\n\tpopViewStack();\n}\n\nfunction onKeySelect(activeItemId: string) {\n\tconst mergedItems = [\n\t\t...(activeViewStack.value.items || []),\n\t\t...(globalSearchItemsDiff.value || []),\n\t];\n\n\tconst item = mergedItems.find((i) => i.uuid === activeItemId);\n\tif (!item) return;\n\n\tonSelected(item as INodeCreateElement);\n}\n\nregisterKeyHook('MainViewArrowRight', {\n\tkeyboardKeys: ['ArrowRight', 'Enter'],\n\tcondition: (type) => ['subcategory', 'node', 'view'].includes(type),\n\thandler: onKeySelect,\n});\n\nregisterKeyHook('MainViewArrowLeft', {\n\tkeyboardKeys: ['ArrowLeft'],\n\tcondition: (type) => ['subcategory', 'node', 'view'].includes(type),\n\thandler: arrowLeft,\n});\n</script>\n\n<template>\n\t<span>\n\t\t<!-- Main Node Items -->\n\t\t<ItemsRenderer :elements=\"activeViewStack.items\" @selected=\"onSelected\" :class=\"$style.items\">\n\t\t\t<template\n\t\t\t\t#empty\n\t\t\t\tv-if=\"(activeViewStack.items || []).length === 0 && globalSearchItemsDiff.length === 0\"\n\t\t\t>\n\t\t\t\t<NoResults\n\t\t\t\t\t:rootView=\"activeViewStack.rootView\"\n\t\t\t\t\tshowIcon\n\t\t\t\t\tshowRequest\n\t\t\t\t\t@addWebhookNode=\"selectNodeType([WEBHOOK_NODE_TYPE])\"\n\t\t\t\t\t@addHttpNode=\"selectNodeType([HTTP_REQUEST_NODE_TYPE])\"\n\t\t\t\t/>\n\t\t\t</template>\n\t\t</ItemsRenderer>\n\t\t<!-- Results in other categories -->\n\t\t<CategorizedItemsRenderer\n\t\t\tv-if=\"globalSearchItemsDiff.length > 0\"\n\t\t\t:elements=\"globalSearchItemsDiff\"\n\t\t\t:category=\"$locale.baseText('nodeCreator.categoryNames.otherCategories')\"\n\t\t\t@selected=\"onSelected\"\n\t\t>\n\t\t</CategorizedItemsRenderer>\n\t</span>\n</template>\n\n<style lang=\"scss\" module>\n.items {\n\tmargin-bottom: var(--spacing-s);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted, watch } from 'vue';\nimport type { INodeCreateElement } from '@/Interface';\nimport { TRIGGER_NODE_CREATOR_VIEW } from '@/constants';\n\nimport { useNodeCreatorStore } from '@/stores/nodeCreator.store';\n\nimport { TriggerView, RegularView } from '../viewsData';\nimport { useViewStacks } from '../composables/useViewStacks';\nimport { useKeyboardNavigation } from '../composables/useKeyboardNavigation';\nimport SearchBar from './SearchBar.vue';\nimport ActionsRenderer from '../Modes/ActionsMode.vue';\nimport NodesRenderer from '../Modes/NodesMode.vue';\nimport { useI18n } from '@/composables';\n\nconst i18n = useI18n();\n\nconst { mergedNodes } = useNodeCreatorStore();\nconst { pushViewStack, popViewStack, updateCurrentViewStack } = useViewStacks();\nconst { setActiveItemIndex, attachKeydownEvent, detachKeydownEvent } = useKeyboardNavigation();\n\nconst activeViewStack = computed(() => useViewStacks().activeViewStack);\n\nconst viewStacks = computed(() => useViewStacks().viewStacks);\n\nconst isActionsMode = computed(() => useViewStacks().activeViewStackMode === 'actions');\nconst searchPlaceholder = computed(() =>\n\tisActionsMode.value\n\t\t? i18n.baseText('nodeCreator.actionsCategory.searchActions', {\n\t\t\t\tinterpolate: { node: activeViewStack.value.title as string },\n\t\t })\n\t\t: i18n.baseText('nodeCreator.searchBar.searchNodes'),\n);\n\nconst nodeCreatorView = computed(() => useNodeCreatorStore().selectedView);\n\nfunction onSearch(value: string) {\n\tif (activeViewStack.value.uuid) {\n\t\tupdateCurrentViewStack({ search: value });\n\t\tvoid setActiveItemIndex(activeViewStack.value.activeIndex ?? 0);\n\t}\n}\n\nfunction onTransitionEnd() {\n\t// For actions, set the active focus to the first action, not category\n\tconst newStackIndex = activeViewStack.value.mode === 'actions' ? 1 : 0;\n\tvoid setActiveItemIndex(activeViewStack.value.activeIndex || 0 || newStackIndex);\n}\n\nonMounted(() => {\n\tattachKeydownEvent();\n\tvoid setActiveItemIndex(activeViewStack.value.activeIndex ?? 0);\n});\n\nonUnmounted(() => {\n\tdetachKeydownEvent();\n});\n\nwatch(\n\t() => nodeCreatorView.value,\n\t(selectedView) => {\n\t\tconst view = selectedView === TRIGGER_NODE_CREATOR_VIEW ? TriggerView() : RegularView();\n\n\t\tpushViewStack({\n\t\t\ttitle: view.title,\n\t\t\tsubtitle: view?.subtitle ?? '',\n\t\t\titems: view.items as INodeCreateElement[],\n\t\t\thasSearch: true,\n\t\t\tmode: 'nodes',\n\t\t\trootView: selectedView,\n\t\t\t// Root search should include all nodes\n\t\t\tsearchItems: mergedNodes,\n\t\t});\n\t},\n\t{ immediate: true },\n);\n\nfunction onBackButton() {\n\tpopViewStack();\n}\n</script>\n\n<template>\n\t<transition\n\t\tv-if=\"viewStacks.length > 0\"\n\t\t:name=\"`panel-slide-${activeViewStack.transitionDirection}`\"\n\t\t@afterLeave=\"onTransitionEnd\"\n\t>\n\t\t<aside :class=\"$style.nodesListPanel\" @keydown.capture.stop :key=\"`${activeViewStack.uuid}`\">\n\t\t\t<header\n\t\t\t\t:class=\"{ [$style.header]: true, [$style.hasBg]: !activeViewStack.subtitle }\"\n\t\t\t\tdata-test-id=\"nodes-list-header\"\n\t\t\t>\n\t\t\t\t<div :class=\"$style.top\">\n\t\t\t\t\t<button :class=\"$style.backButton\" @click=\"onBackButton\" v-if=\"viewStacks.length > 1\">\n\t\t\t\t\t\t<font-awesome-icon :class=\"$style.backButtonIcon\" icon=\"arrow-left\" size=\"2x\" />\n\t\t\t\t\t</button>\n\t\t\t\t\t<n8n-node-icon\n\t\t\t\t\t\tv-if=\"activeViewStack.nodeIcon\"\n\t\t\t\t\t\t:class=\"$style.nodeIcon\"\n\t\t\t\t\t\t:type=\"activeViewStack.nodeIcon.iconType || 'unknown'\"\n\t\t\t\t\t\t:src=\"activeViewStack.nodeIcon.icon\"\n\t\t\t\t\t\t:name=\"activeViewStack.nodeIcon.icon\"\n\t\t\t\t\t\t:color=\"activeViewStack.nodeIcon.color\"\n\t\t\t\t\t\t:circle=\"false\"\n\t\t\t\t\t\t:showTooltip=\"false\"\n\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t/>\n\t\t\t\t\t<p :class=\"$style.title\" v-text=\"activeViewStack.title\" v-if=\"activeViewStack.title\" />\n\t\t\t\t</div>\n\t\t\t\t<p\n\t\t\t\t\tv-if=\"activeViewStack.subtitle\"\n\t\t\t\t\t:class=\"{ [$style.subtitle]: true, [$style.offsetSubtitle]: viewStacks.length > 1 }\"\n\t\t\t\t\tv-text=\"activeViewStack.subtitle\"\n\t\t\t\t/>\n\t\t\t</header>\n\t\t\t<search-bar\n\t\t\t\tv-if=\"activeViewStack.hasSearch\"\n\t\t\t\t:class=\"$style.searchBar\"\n\t\t\t\t:placeholder=\"\n\t\t\t\t\tsearchPlaceholder\n\t\t\t\t\t\t? searchPlaceholder\n\t\t\t\t\t\t: $locale.baseText('nodeCreator.searchBar.searchNodes')\n\t\t\t\t\"\n\t\t\t\t:modelValue=\"activeViewStack.search\"\n\t\t\t\t@update:modelValue=\"onSearch\"\n\t\t\t/>\n\t\t\t<div :class=\"$style.renderedItems\">\n\t\t\t\t<!-- Actions mode -->\n\t\t\t\t<ActionsRenderer v-if=\"isActionsMode && activeViewStack.subcategory\" v-bind=\"$attrs\" />\n\n\t\t\t\t<!-- Nodes Mode -->\n\t\t\t\t<NodesRenderer v-else :rootView=\"nodeCreatorView\" v-bind=\"$attrs\" />\n\t\t\t</div>\n\t\t</aside>\n\t</transition>\n</template>\n\n<style lang=\"scss\" module>\n:global(.panel-slide-in-leave-active),\n:global(.panel-slide-in-enter-active),\n:global(.panel-slide-out-leave-active),\n:global(.panel-slide-out-enter-active) {\n\ttransition: transform 200ms ease;\n\tposition: absolute;\n\tleft: 0;\n\tright: 0;\n}\n\n:global(.panel-slide-out-enter-from),\n:global(.panel-slide-in-leave-to) {\n\ttransform: translateX(0);\n\tz-index: -1;\n}\n\n:global(.panel-slide-out-leave-to),\n:global(.panel-slide-in-enter-from) {\n\ttransform: translateX(100%);\n\t// Make sure the leaving panel stays on top\n\t// for the slide-out panel effect\n\tz-index: 1;\n}\n.backButton {\n\tbackground: transparent;\n\tborder: none;\n\tcursor: pointer;\n\tpadding: 0 var(--spacing-xs) 0 0;\n}\n\n.backButtonIcon {\n\tcolor: $node-creator-arrow-color;\n\theight: 16px;\n\tpadding: 0;\n}\n.nodeIcon {\n\t--node-icon-size: 16px;\n\tmargin-right: var(--spacing-s);\n}\n.renderedItems {\n\toverflow: auto;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\tscrollbar-width: none; /* Firefox 64 */\n\tpadding-bottom: var(--spacing-xl);\n\t&::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n}\n.searchBar {\n\tflex-shrink: 0;\n}\n.nodesListPanel {\n\tbackground: var(--color-background-xlight);\n\theight: 100%;\n\tbackground-color: $node-creator-background-color;\n\twidth: 385px;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&:before {\n\t\tbox-sizing: border-box;\n\t\tcontent: '';\n\t\tborder-left: 1px solid $node-creator-border-color;\n\t\twidth: 1px;\n\t\tposition: absolute;\n\t\theight: 100%;\n\t}\n}\n.footer {\n\tfont-size: var(--font-size-2xs);\n\tcolor: var(--color-text-base);\n\tmargin: 0 var(--spacing-xs) 0;\n\tpadding: var(--spacing-4xs) 0;\n\tline-height: var(--font-line-height-regular);\n\tborder-top: 1px solid var(--color-foreground-base);\n\tz-index: 1;\n\tmargin-top: -1px;\n}\n.top {\n\tdisplay: flex;\n\talign-items: center;\n}\n.header {\n\tfont-size: var(--font-size-l);\n\tfont-weight: var(--font-weight-bold);\n\tline-height: var(--font-line-height-compact);\n\n\tpadding: var(--spacing-s) var(--spacing-s);\n\n\t&.hasBg {\n\t\tborder-bottom: $node-creator-border-color solid 1px;\n\t\tbackground-color: $node-creator-subcategory-panel-header-bacground-color;\n\t}\n}\n.title {\n\tline-height: 24px;\n\tfont-weight: var(--font-weight-bold);\n\tfont-size: var(--font-size-l);\n\n\t.hasBg & {\n\t\tfont-size: var(--font-size-s-m);\n\t\tline-height: 22px;\n\t}\n}\n.subtitle {\n\tmargin-top: var(--spacing-4xs);\n\tfont-size: var(--font-size-s);\n\tline-height: 19px;\n\tcolor: var(--color-text-base);\n\tfont-weight: var(--font-weight-regular);\n}\n.offsetSubtitle {\n\tmargin-left: calc(var(--spacing-xl) + var(--spacing-4xs));\n}\n</style>\n","<template>\n\t<div>\n\t\t<aside :class=\"{ [$style.nodeCreatorScrim]: true, [$style.active]: showScrim }\" />\n\t\t<slide-transition>\n\t\t\t<div\n\t\t\t\tv-if=\"active\"\n\t\t\t\t:class=\"$style.nodeCreator\"\n\t\t\t\t:style=\"nodeCreatorInlineStyle\"\n\t\t\t\tref=\"nodeCreator\"\n\t\t\t\t@dragover=\"onDragOver\"\n\t\t\t\t@drop=\"onDrop\"\n\t\t\t\t@mousedown=\"onMouseDown\"\n\t\t\t\t@mouseup=\"onMouseUp\"\n\t\t\t\tdata-test-id=\"node-creator\"\n\t\t\t>\n\t\t\t\t<NodesListPanel @nodeTypeSelected=\"onNodeTypeSelected\" />\n\t\t\t</div>\n\t\t</slide-transition>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { watch, reactive, toRefs, computed, onBeforeUnmount } from 'vue';\n\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useNodeCreatorStore } from '@/stores/nodeCreator.store';\nimport SlideTransition from '@/components/transitions/SlideTransition.vue';\n\nimport { useViewStacks } from './composables/useViewStacks';\nimport { useKeyboardNavigation } from './composables/useKeyboardNavigation';\nimport { useActionsGenerator } from './composables/useActionsGeneration';\nimport NodesListPanel from './Panel/NodesListPanel.vue';\nimport { useUIStore } from '@/stores';\n\nexport interface Props {\n\tactive?: boolean;\n\tonNodeTypeSelected?: (nodeType: string) => void;\n}\n\nconst props = defineProps<Props>();\nconst { resetViewStacks } = useViewStacks();\nconst { registerKeyHook } = useKeyboardNavigation();\nconst emit = defineEmits<{\n\t(event: 'closeNodeCreator'): void;\n\t(event: 'nodeTypeSelected', value: string[]): void;\n}>();\nconst uiStore = useUIStore();\n\nconst { setShowScrim, setActions, setMergeNodes } = useNodeCreatorStore();\nconst { generateMergedNodesAndActions } = useActionsGenerator();\n\nconst state = reactive({\n\tnodeCreator: null as HTMLElement | null,\n\tmousedownInsideEvent: null as MouseEvent | null,\n});\n\nconst showScrim = computed(() => useNodeCreatorStore().showScrim);\n\nconst viewStacksLength = computed(() => useViewStacks().viewStacks.length);\n\nconst nodeCreatorInlineStyle = computed(() => {\n\treturn { top: `${uiStore.bannersHeight + uiStore.headerHeight}px` };\n});\nfunction onMouseUpOutside() {\n\tif (state.mousedownInsideEvent) {\n\t\tconst clickEvent = new MouseEvent('click', {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t});\n\t\tstate.mousedownInsideEvent.target?.dispatchEvent(clickEvent);\n\t\tstate.mousedownInsideEvent = null;\n\t\tunBindOnMouseUpOutside();\n\t}\n}\nfunction unBindOnMouseUpOutside() {\n\tdocument.removeEventListener('mouseup', onMouseUpOutside);\n\tdocument.removeEventListener('touchstart', onMouseUpOutside);\n}\nfunction onMouseUp() {\n\tstate.mousedownInsideEvent = null;\n\tunBindOnMouseUpOutside();\n}\nfunction onMouseDown(event: MouseEvent) {\n\tstate.mousedownInsideEvent = event;\n\tdocument.addEventListener('mouseup', onMouseUpOutside);\n\tdocument.addEventListener('touchstart', onMouseUpOutside);\n}\nfunction onDragOver(event: DragEvent) {\n\tevent.preventDefault();\n}\nfunction onDrop(event: DragEvent) {\n\tif (!event.dataTransfer) {\n\t\treturn;\n\t}\n\n\tconst nodeTypeName = event.dataTransfer.getData('nodeTypeName');\n\tconst nodeCreatorBoundingRect = (state.nodeCreator as Element).getBoundingClientRect();\n\n\t// Abort drag end event propagation if dropped inside nodes panel\n\tif (\n\t\tnodeTypeName &&\n\t\tevent.pageX >= nodeCreatorBoundingRect.x &&\n\t\tevent.pageY >= nodeCreatorBoundingRect.y\n\t) {\n\t\tevent.stopPropagation();\n\t}\n}\n\nwatch(\n\t() => props.active,\n\t(isActive) => {\n\t\tif (isActive === false) {\n\t\t\tsetShowScrim(false);\n\t\t\tresetViewStacks();\n\t\t}\n\t},\n);\n\n// Close node creator when the last view stacks is closed\nwatch(viewStacksLength, (viewStacksLength) => {\n\tif (viewStacksLength === 0) {\n\t\temit('closeNodeCreator');\n\t\tsetShowScrim(false);\n\t}\n});\n\nregisterKeyHook('NodeCreatorCloseEscape', {\n\tkeyboardKeys: ['Escape'],\n\thandler: () => emit('closeNodeCreator'),\n});\nregisterKeyHook('NodeCreatorCloseTab', {\n\tkeyboardKeys: ['Tab'],\n\thandler: () => emit('closeNodeCreator'),\n});\n\nwatch(\n\t() => useNodeTypesStore().visibleNodeTypes,\n\t(nodeTypes) => {\n\t\tconst { actions, mergedNodes } = generateMergedNodesAndActions(nodeTypes);\n\n\t\tsetActions(actions);\n\t\tsetMergeNodes(mergedNodes);\n\t},\n\t{ immediate: true },\n);\nconst { nodeCreator } = toRefs(state);\n\nonBeforeUnmount(() => {\n\tunBindOnMouseUpOutside();\n});\n</script>\n\n<style module lang=\"scss\">\n:global(strong) {\n\tfont-weight: var(--font-weight-bold);\n}\n.nodeCreator {\n\t--node-icon-color: var(--color-text-base);\n\tposition: fixed;\n\ttop: $header-height;\n\tbottom: 0;\n\tright: 0;\n\tz-index: 200;\n\twidth: $node-creator-width;\n\tcolor: $node-creator-text-color;\n}\n\n.nodeCreatorScrim {\n\tposition: fixed;\n\ttop: $header-height;\n\tright: 0;\n\tbottom: 0;\n\tleft: $sidebar-width;\n\topacity: 0;\n\tz-index: 1;\n\tbackground: var(--color-background-dark);\n\tpointer-events: none;\n\ttransition: opacity 200ms ease-in-out;\n\n\t&.active {\n\t\topacity: 0.7;\n\t}\n}\n</style>\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","sublimeSearch","filter","data","keys","results","accu","item","values","key","weight","value","v","itemMatch","match","a","b","_sfc_main$f","defineComponent","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_Transition","_withCtx","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","_a","isArrowDown","isArrowUp","nextItemIndex","setActiveItem","_b","previousIndex","_c","setActiveItemId","id","itemId","setActiveItemIndex","index","attachKeydownEvent","detachKeydownEvent","registerKeyHook","name","getActiveItemIndex","transformNodeType","node","subcategory","type","createElement","uuidv4","CORE_NODES_CATEGORY","DEFAULT_SUBCATEGORY","subcategorizeItems","items","acc","_d","sortNodeCreateElements","nodes","displayNameA","displayNameB","searchNodes","searchFilter","trimmedFilter","useViewStacks","nodeCreatorStore","useNodeCreatorStore","viewStacks","activeStackItems","computed","stack","extendItemsWithUUID","searchBaseItems","searchBase","activeViewStack","activeViewStackMode","TRIGGER_NODE_CREATOR_VIEW","globalSearchItemsDiff","allNodes","setStackBaselineItems","subcategorizedItems","stackItems","matchedNodes","updateCurrentViewStack","uuid","pushViewStack","newStackUuid","popViewStack","currentStack","matchedIndex","s","typedKey","resetViewStacks","PLACEHOLDER_RECOMMENDED_ACTION_KEY","translate","args","i18n","cachedBaseText","memoize","customNodeActionsParsers","matchedProperty","nodeTypeDescription","collection","categoryItem","getNodeTypeBase","startCase","label","isTrigger","category","operationsCategory","property","triggersCategory","matchingKeys","filteredOutItems","resourceCategories","transformedNodes","option","CUSTOM_API_CALL_KEY","resourceOption","options","isSingleResource","operations","operation","operationOption","displayName","displayOptions","useActionsGenerator","generateNodeActions","filterActions","actions","action","_","arr","isPlaceholderTriggerAction","getSimplifiedNodeType","defaults","description","group","icon","iconUrl","codex","generateMergedNodesAndActions","nodeTypes","visibleNodeTypes","mergedNodes","app","appActions","trigger","normalizedName","triggerActions","mergedActions","TriggerView","useI18n","WEBHOOK_NODE_TYPE","EMAIL_IMAP_NODE_TYPE","SCHEDULE_TRIGGER_NODE_TYPE","MANUAL_TRIGGER_NODE_TYPE","EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE","OTHER_TRIGGER_NODES_SUBCATEGORY","RegularView","REGULAR_NODE_CREATOR_VIEW","TRANSFORM_DATA_SUBCATEGORY","HELPERS_SUBCATEGORY","FLOWS_CONTROL_SUBCATEGORY","FILES_SUBCATEGORY","state","reactive","focus","onInput","event","input","emit","clear","onMounted","runExternalHook","useWebhooksStore","onBeforeUnmount","inputRef","toRefs","__expose","useActions","instance","getCurrentInstance","actionsCategoryLocales","getPlaceholderTriggerActions","n","transformed","localeKey","overwriteLocale","filterActionsCategory","injectActionsLabels","extendedActions","labelsSet","firstIndexMap","insertedLabels","newLabel","insertIndex","parseCategoryActions","withLabels","filteredActions","getActionData","actionItem","displayConditions","showCondition","getNodeTypesWithManualTrigger","nodeType","selectedView","openSource","workflowTriggerNodes","useWorkflowsStore","useNodeTypesStore","workflowContainsTrigger","isTriggerPanel","isStickyNode","STICKY_NODE_TYPE","NODE_CREATOR_OPEN_SOURCES","setAddedNodeActionParameters","telemetry","rootView","onWorkflowStoreAction","storeWatcher","after","setLastNodeParameters","trackActionSelected","payload","useTelemetry","dragging","draggablePosition","draggableDataTransfer","shortNodeType","props","showActionArrow","hasActions","dataTestId","nodeActions","draggableStyle","isCommunityNode","isCommunityPackageName","onDragStart","onDragOver","x","y","getNewNodePosition","NODE_SIZE","onDragEnd","onCommunityNodeTooltipClick","subcategoryName","camelCase","actionData","isTriggerAction","LAZY_LOAD_THRESHOLD","LAZY_LOAD_ITEMS_PER_TICK","renderedItems","renderAnimationRequest","renderItems","wrappedEmit","$e","beforeEnter","enter","beforeLeave","leave","onUnmounted","watch","categoryName","itemsCount","workflowId","actionCount","expanded","toggleExpanded","setExpanded","isExpanded","arrowRight","arrowLeft","userActivated","useUsersStore","parsedTriggerActions","parseActions","parsedActionActions","search","parsedTriggerActionsBaseline","parsedActionActionsBaseline","triggerCategoryName","placeholderTriggerActions","p","hasNoTriggerActions","containsAPIAction","isTriggerRootView","onKeySelect","base","locale","activeAction","onSelected","actionCreateElement","actionNode","trackActionsView","trigger_action_count","trackingPayload","resetSearch","addHttpNode","updateData","HTTP_REQUEST_NODE_TYPE","app_identifier","OrderSwitcher","slots","h","_hoisted_1","_hoisted_4","baseUrl","useRootStore","selectNodeType","title","baseSubcategoriesFilter","subcategoriesMapper","transformedActions","view","hasTriggerGroup","isActionsMode","searchPlaceholder","nodeCreatorView","onSearch","onTransitionEnd","newStackIndex","onBackButton","uiStore","useUIStore","setShowScrim","setActions","setMergeNodes","showScrim","viewStacksLength","nodeCreatorInlineStyle","onMouseUpOutside","clickEvent","unBindOnMouseUpOutside","onMouseUp","onMouseDown","onDrop","nodeTypeName","nodeCreatorBoundingRect","isActive","nodeCreator"],"mappings":"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"}
|