UNPKG

n8n-editor-ui

Version:

Workflow Editor UI for n8n

2 lines 63.8 kB
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.13.4`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`4496474c-407c-4a44-9f06-e4ad85fd6dad`,e._sentryDebugIdIdentifier=`sentry-dbid-4496474c-407c-4a44-9f06-e4ad85fd6dad`)})()}catch{}import{o as e}from"./chunk-DxpFCn6T.js";import{$ as t,A as n,Bt as r,C as i,E as a,F as o,Ft as s,Ht as c,Mt as l,N as u,O as d,R as f,Rt as p,S as m,Sn as h,T as g,U as _,Vt as v,W as y,Wt as b,X as x,Z as S,_ as C,_n as w,bt as T,f as E,gt as D,h as O,i as k,it as A,j,m as M,ot as N,p as ee,pt as P,q as F,rt as I,st as L,tt as R,vn as z,w as B,yn as V,yt as H}from"./vue.runtime.esm-bundler-D9KLAxvJ.js";import{A as te,S as U,V as W,b as ne,bt as G,xt as re}from"./_MapCache-CUJwh2qp.js";import{$i as ie,Bt as ae,H as oe,Ii as K,Mi as q,Qi as J,Vi as se,Zi as Y,_t as ce,gt as le,lt as ue,z as de}from"./src-wni2AGA3.js";import{t as X}from"./_plugin-vue_export-helper-Dm3nT7Ps.js";import{$t as fe,Ar as pe,As as me,C as he,Dr as ge,Ft as _e,Gn as ve,Gr as ye,Or as be,Pt as xe,Tr as Se,_i as Ce,aa as we,at as Te,cn as Ee,d as De,en as Oe,in as ke,na as Ae,p as je,q as Me,r as Ne,ra as Pe,rn as Fe,s as Ie,tt as Le,ul as Re,un as ze,vn as Be,w as Ve}from"./users.store-BHWXXawf.js";import{Ic as He,Uo as Z,ma as Ue,ms as Q,pl as We,ya as Ge}from"./constants-CIP7tKq1.js";import{r as Ke}from"./_baseOrderBy-CaKruttV.js";import{t as qe}from"./executions.store-CZbPSd3l.js";import{c as Je,n as Ye,t as Xe}from"./RunData-CqDg79Fs.js";import{t as Ze}from"./NDVEmptyState-DMWlSoOG.js";import{t as Qe}from"./canvas.eventBus-C-z2MFNA.js";import{S as $e,_ as et,a as tt,b as nt,c as rt,d as it,f as at,g as ot,h as st,i as ct,l as $,m as lt,n as ut,o as dt,p as ft,r as pt,s as mt,t as ht,u as gt,v as _t,x as vt,y as yt}from"./useCanvasOperations-CI7Ylcwf.js";import{t as bt}from"./NodeIcon-0naEDfOR.js";import{t as xt}from"./useRunWorkflow-BbbTafql.js";import{t as St}from"./useInjectWorkflowId-BSmCE6rY.js";import{t as Ct}from"./KeyboardShortcutTooltip-CrTbwZwY.js";import{t as wt}from"./folders.store-DKth0xuB.js";import{t as Tt}from"./useKeybindings-C1FXJp2f.js";import{_ as Et,a as Dt,c as Ot,d as kt,f as At,g as jt,h as Mt,i as Nt,l as Pt,m as Ft,n as It,p as Lt,r as Rt,t as zt}from"./useLogsTreeExpand-CFu0Brhy.js";import{n as Bt,t as Vt}from"./useResizablePanel-CFn0Gfyi.js";import{t as Ht}from"./aiTemplatesStarterCollection.store-BmxR4DN8.js";import{t as Ut}from"./readyToRunWorkflows.store-Cuyl81V2.js";import{t as Wt}from"./useExecutionDebugging-CgM9Buet.js";function Gt(e,t){let n=G(),r=Ie(),i=ke(),a=Ke(),o=pt(),l=ce(),u=fe(),d=Ve(),{runWorkflow:f}=xt({router:l}),p=s(!1),h=s(!1),g=m(()=>o.chatSessionMessages),_=m(()=>o.chatSessionId),v=m(()=>c(t)??_.value),y=m(()=>r.getPastChatMessages),b=m(()=>r.allNodes.find(De)??null),x=e=>{let t=b.value,n=t?d.getNodeType(t.type,t.typeVersion):null;if(!t||!n)return;let r=Ge(n.properties,t.parameters,!0,!1,t,n)??{},i=r.options??{};if(e in i)return i[e];let a=n.properties.find(e=>e.name===`options`&&e.type===`collection`&&Ue(r,e,t,n));for(let o of a?.options??[])if(!(o.name!==e||!(`default`in o))&&Ue(i,o,t,n,r))return o.default},S=m(()=>x(`responseMode`)===`streaming`),C=m(()=>x(`allowFileUploads`)===!0),w=m(()=>x(`allowedFilesMimeTypes`)),T=m(()=>!(!b.value||!r.workflowId&&!r.isNewWorkflow)),E=m(()=>{if(!b.value)return``;let e=r.workflowId;return e?`${a.webhookTestUrl}/${e}/${v.value}`:``});async function O(){if(!(h.value||!b.value)){h.value=!0;try{i.setWorkflowExecutionData(null),i.setActiveExecutionId(void 0);let e={triggerNode:b.value.name,source:`RunData.ManualChatTrigger`,sessionId:v.value};r.chatPartialExecutionDestinationNode&&=(e.destinationNode={nodeName:r.chatPartialExecutionDestinationNode,mode:`inclusive`},null),await f(e),p.value=!0}finally{h.value=!1}}}let k=m(()=>({webhookUrl:E.value,webhookConfig:{method:`POST`,headers:{"Content-Type":`application/json`}},mode:`fullscreen`,showWindowCloseButton:!1,showWelcomeScreen:!1,sessionId:v.value,enableStreaming:S.value,enableMessageActions:!0,allowFileUploads:C.value,allowedFilesMimeTypes:w.value,chatInputKey:`chatInput`,chatSessionKey:`sessionId`,defaultLanguage:`en`,messageComponents:{[ot.WITH_BUTTONS]:et},messageHistory:g.value,disabled:s(e),i18n:{en:{title:n.baseText(`chat.window.title`)||`Chat`,repostButton:n.baseText(`chat.window.chat.chatMessageOptions.repostMessage`)||`Repost message`,reuseButton:n.baseText(`chat.window.chat.chatMessageOptions.reuseMessage`)||`Reuse message`,subtitle:``,footer:``,getStarted:``,inputPlaceholder:n.baseText(`chat.window.chat.placeholder`)||`Type your message...`,closeButtonTooltip:``}},beforeMessageSent:async t=>{e||(await O(),o.addChatMessage({id:Z(),text:t,sender:`user`}))},afterMessageSent:(t,n)=>{if(e||!n)return;if(n.hasReceivedChunks){let e=n.message;e&&typeof e==`object`&&`text`in e&&o.addChatMessage({id:e.id,text:e.text,sender:`bot`});return}let r=n.output??n.text??n.message;o.addChatMessage({id:Z(),text:typeof r==`string`?r:JSON.stringify(n),sender:`bot`})}})),A=m(()=>Et(r.workflowExecutionData,n.baseText(`chat.window.chat.response.empty`)));function j(){i.setWorkflowExecutionData(null),u.updateNodesExecutionIssues(),o.resetChatSessionId(),o.resetMessages(),r.chatPartialExecutionDestinationNode=null,o.isOpen&&$.emit(`focusInput`)}function M(e){let t=l.resolve({name:Q.EXECUTION_PREVIEW,params:{name:r.workflowId,executionId:e}});window.open(t.href,`_blank`)}return D(()=>r.workflowId,(e,t)=>{t&&j()}),{currentSessionId:m(()=>o.chatSessionId),messages:m(()=>e?A.value:o.chatSessionMessages),previousChatMessages:y,refreshSession:j,displayExecution:M,chatTriggerNode:b,isStreamingEnabled:S,isFileUploadsAllowed:C,allowedFilesMimeTypes:w,isWorkflowReadyForChat:T,webhookUrl:E,chatOptions:k,registerChatWebhook:O,webhookRegistered:p,isRegistering:h}}var Kt=X(u({__name:`LogsPanelHeader`,props:{title:{},isClickable:{type:Boolean}},emits:[`click`],setup(e,{emit:r}){let o=r;function s(){e.isClickable&&o(`click`)}return(r,o)=>(t(),a(`header`,{class:w([r.$style.container,{[r.$style.clickable]:e.isClickable}]),onClick:s},[j(b(Y),{class:w(r.$style.title),bold:!0,size:`small`},{default:H(()=>[A(r.$slots,`title`,{},()=>[n(h(e.title),1)])]),_:3},8,[`class`]),i(`div`,{class:w(r.$style.actions)},[A(r.$slots,`actions`)],2)],2))}}),[[`__cssModules`,{$style:{container:`_container_16vzt_125`,clickable:`_clickable_16vzt_137`,title:`_title_16vzt_145`,actions:`_actions_16vzt_153`}}]]),qt=e(Le(),1),Jt=X(u({__name:`LogsViewExecutionSummary`,props:{status:{},consumedTokens:{},startTime:{},timeTook:{}},setup(e){let n=G(),r=W({interval:1e3}),a=m(()=>e.status===`running`||e.status===`waiting`?n.baseText(`logs.overview.body.summaryText.for`,{interpolate:{status:(0,qt.default)(e.status),time:n.displayTimer(Math.floor((r.value-e.startTime)/1e3)*1e3,!0)}}):e.timeTook===void 0?(0,qt.default)(e.status):n.baseText(`logs.overview.body.summaryText.in`,{interpolate:{status:(0,qt.default)(e.status),time:n.displayTimer(e.timeTook,!0)}}));return(n,r)=>(t(),B(b(Y),{tag:`div`,color:`text-light`,size:`small`,class:w(n.$style.container)},{default:H(()=>[i(`span`,null,h(a.value),1),e.consumedTokens.totalTokens>0?(t(),B(Dt,{key:0,"consumed-tokens":e.consumedTokens},null,8,[`consumed-tokens`])):g(``,!0)]),_:1},8,[`class`]))}}),[[`__cssModules`,{$style:{container:`_container_1dsxk_125`}}]]);function Yt(){let e=le(),t=pe(),n=Ie(),r=m(()=>n.workflowExecutionData),i=m(()=>n.isWorkflowRunning),a=m(()=>!!e?.meta?.readOnlyCanvas),{editableWorkflow:o}=ht(),s=Ve(),c=m(()=>t.preferences.branchReadOnly),l=m(()=>o.value.nodes.filter(e=>s.isTriggerNode(e.type)).every(e=>e.disabled));return m(()=>!a.value&&!c.value&&!i.value&&!l.value&&!!r.value)}var Xt=X(u({__name:`LogsOverviewPanel`,props:{isOpen:{type:Boolean},selected:{},isReadOnly:{type:Boolean},isCompact:{type:Boolean},execution:{},entries:{},flatLogEntries:{},latestNodeInfo:{},isHeaderClickable:{type:Boolean}},emits:[`clickHeader`,`select`,`clearExecutionData`,`openNdv`,`toggleExpanded`],setup(e,{emit:r}){let i=r,o=G(),s=Yt(),c=m(()=>e.flatLogEntries.length===0||e.execution===void 0),l=m(()=>[{label:o.baseText(`logs.overview.header.switch.overview`),value:`overview`},{label:o.baseText(`logs.overview.header.switch.details`),value:`details`}]),u=Re()>0,d=m(()=>Ft(...e.entries.map(e=>Lt(e,!1)))),f=m(()=>e.execution?.startedAt&&e.execution.stoppedAt?new Date(e.execution.stoppedAt)-+new Date(e.execution.startedAt):void 0),p=m(()=>d.value.totalTokens>0||e.entries.some(e=>Lt(e,!0).totalTokens>0));function _(t){i(`select`,t===`overview`?void 0:e.flatLogEntries[0])}return(r,m)=>(t(),a(`div`,{class:w([r.$style.container,u?r.$style.staticScrollBar:``]),"data-test-id":`logs-overview`},[j(Kt,{title:b(o).baseText(`logs.overview.header.title`),"data-test-id":`logs-overview-header`,"is-clickable":e.isHeaderClickable,onClick:m[1]||=e=>i(`clickHeader`)},{actions:H(()=>[b(s)?(t(),B(b(q),{key:0,content:b(o).baseText(`logs.overview.header.actions.clearExecution.tooltip`)},{default:H(()=>[j(b(J),{variant:`subtle`,size:`xsmall`,icon:`trash-2`,"icon-size":`medium`,"data-test-id":`clear-execution-data-button`,class:w(r.$style.clearButton),onClick:m[0]||=O(e=>i(`clearExecutionData`),[`stop`])},{default:H(()=>[n(h(b(o).baseText(`logs.overview.header.actions.clearExecution`)),1)]),_:1},8,[`class`])]),_:1},8,[`content`])):g(``,!0),A(r.$slots,`actions`)]),_:3},8,[`title`,`is-clickable`]),e.isOpen?(t(),a(`div`,{key:0,class:w([r.$style.content,c.value?r.$style.empty:``]),"data-test-id":`logs-overview-body`},[c.value||e.execution===void 0?(t(),B(b(Y),{key:0,tag:`p`,size:`medium`,color:`text-base`,class:w(r.$style.emptyText),"data-test-id":`logs-overview-empty`},{default:H(()=>[n(h(b(o).baseText(`logs.overview.body.empty.message`)),1)]),_:1},8,[`class`])):(t(),a(C,{key:1},[j(Jt,{"data-test-id":`logs-overview-status`,class:w(r.$style.summary),status:e.execution.status,"consumed-tokens":d.value,"start-time":+new Date(e.execution.startedAt),"time-took":f.value},null,8,[`class`,`status`,`consumed-tokens`,`start-time`,`time-took`]),j(Rt,{"is-read-only":e.isReadOnly,selected:e.selected,"is-compact":e.isCompact,"should-show-token-count-column":p.value,"latest-node-info":e.latestNodeInfo,"flat-log-entries":e.flatLogEntries,"can-open-ndv":!0,execution:e.execution,onToggleExpanded:m[2]||=e=>i(`toggleExpanded`,e),onOpenNdv:m[3]||=e=>i(`openNdv`,e),onSelect:m[4]||=e=>i(`select`,e)},null,8,[`is-read-only`,`selected`,`is-compact`,`should-show-token-count-column`,`latest-node-info`,`flat-log-entries`,`execution`]),j(b(oe),{size:`small-medium`,class:w(r.$style.switchViewButtons),"model-value":e.selected?`details`:`overview`,options:l.value,"onUpdate:modelValue":_},null,8,[`class`,`model-value`,`options`])],64))],2)):g(``,!0)],2))}}),[[`__cssModules`,{$style:{container:`_container_1qsnq_125`,clearButton:`_clearButton_1qsnq_135`,content:`_content_1qsnq_141`,empty:`_empty_1qsnq_151`,emptyText:`_emptyText_1qsnq_156`,summary:`_summary_1qsnq_161`,switchViewButtons:`_switchViewButtons_1qsnq_165`}}]]),Zt={class:`chat-get-started`},Qt=u({__name:`GetStarted`,setup(e){let{t:r}=nt();return(e,i)=>(t(),a(`div`,Zt,[j(yt,{onClick:i[0]||=t=>e.$emit(`click:button`)},{default:H(()=>[n(h(b(r)(`getStarted`)),1)]),_:1})]))}}),$t={},en={class:`chat-powered-by`};function tn(e,r){return t(),a(`div`,en,[...r[0]||=[n(` Powered by `,-1),i(`a`,{href:`https://n8n.io?utm_source=n8n-external&utm_medium=widget-powered-by`},`n8n`,-1)]])}var nn=X($t,[[`render`,tn]]),rn={class:`chat-get-started-footer`},an={key:0},on=u({__name:`GetStartedFooter`,setup(e){let{t:n,te:r}=nt();return(e,i)=>(t(),a(`div`,rn,[b(r)(`footer`)?(t(),a(`div`,an,h(b(n)(`footer`)),1)):g(``,!0),j(nn)]))}}),sn={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cn(e,n){return t(),a(`svg`,sn,[...n[0]||=[i(`path`,{fill:`currentColor`,d:`M16.5 6v11.5a4 4 0 0 1-4 4a4 4 0 0 1-4-4V5A2.5 2.5 0 0 1 11 2.5A2.5 2.5 0 0 1 13.5 5v10.5a1 1 0 0 1-1 1a1 1 0 0 1-1-1V6H10v9.5a2.5 2.5 0 0 0 2.5 2.5a2.5 2.5 0 0 0 2.5-2.5V5a4 4 0 0 0-4-4a4 4 0 0 0-4 4v12.5a5.5 5.5 0 0 0 5.5 5.5a5.5 5.5 0 0 0 5.5-5.5V6z`},null,-1)]])}var ln={name:`mdi-paperclip`,render:cn},un={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dn(e,n){return t(),a(`svg`,un,[...n[0]||=[i(`path`,{fill:`currentColor`,d:`m2 21l21-9L2 3v7l15 2l-15 2z`},null,-1)]])}var fn={name:`mdi-send`,render:dn},pn={class:`chat-inputs`},mn={key:0,class:`chat-input-left-panel`},hn=[`disabled`,`placeholder`],gn={class:`chat-inputs-controls`},_n=[`disabled`],vn=[`disabled`],yn={key:0,class:`chat-files`},bn=X(u({__name:`Input`,props:{placeholder:{default:`inputPlaceholder`}},emits:[`arrowKeyDown`],setup(e,{emit:n}){let r=e,{t:o}=nt(),c=n,{options:l}=vt(),u=$e(),{waitingForResponse:d}=u,f=s(null),p=s(null),h=s(``),_=s(!1),v=s(null),y=s(!1),w=m(()=>u.blockUserInput.value?!0:y.value?!1:h.value===``||b(d)||l.disabled?.value===!0),D=m(()=>l.disabled?.value===!0),O=m(()=>k.value&&b(d)&&!l.disabled?.value),k=m(()=>b(l.allowFileUploads)===!0),N=m(()=>b(l.allowedFilesMimeTypes)),ee=m(()=>{let e=k.value?2:1;return{"--controls-count":e}}),{open:P,reset:F,onChange:L}=te({multiple:!0,reset:!1});L(e=>{if(!e)return;let t=new DataTransfer;if(f.value)for(let e=0;e<f.value.length;e++)t.items.add(f.value[e]);for(let n=0;n<e.length;n++)t.items.add(e[n]);f.value=t.files}),x(()=>{$.on(`focusInput`,z),$.on(`blurInput`,R),$.on(`setInputValue`,H),p.value&&(v.value=new ResizeObserver(e=>{for(let t of e)t.target===p.value&&q()}),v.value.observe(p.value))}),S(()=>{$.off(`focusInput`,z),$.off(`blurInput`,R),$.off(`setInputValue`,H),v.value&&=(v.value.disconnect(),null)});function R(){p.value&&p.value.blur()}function z(){p.value&&p.value.focus()}function H(e){h.value=e,z()}function U(){if(f.value){let e=Array.from(f.value);return F(),f.value=null,e}return[]}function W(e){if(l.webhookUrl&&u.currentSessionId.value)try{let t=gt(l.webhookUrl,e,u.currentSessionId.value,!0);u.ws=new WebSocket(t),u.ws.onmessage=e=>{if(e.data===`n8n|heartbeat`){u.ws?.send(`n8n|heartbeat-ack`);return}if(e.data===`n8n|continue`){y.value=!1,u.waitingForResponse.value=!0;return}let t=it(e.data);u.messages.value.push(t),y.value=!0,u.waitingForResponse.value=!1,u.blockUserInput.value=at(t)},u.ws.onclose=()=>{u.ws=null,y.value=!1,u.waitingForResponse.value=!1,u.blockUserInput.value=!1}}catch(e){console.error(`Error setting up websocket connection`,e)}}async function ne(e){if(!e||e.length===0)return[];let t=e.map(async e=>new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t({name:e.name,type:e.type,data:r.result}),r.onerror=()=>n(Error(`Error reading file: ${r.error?.message??`Unknown error`}`)),r.readAsDataURL(e)}));return await Promise.all(t)}async function G(e,t){let n={id:Z(),text:t,sender:`user`,files:f.value?U():void 0};u.messages.value.push(n),e.send(JSON.stringify({sessionId:u.currentSessionId.value,action:`sendMessage`,chatInput:t,files:await ne(n.files)})),u.waitingForResponse.value=!0,y.value=!1}async function re(e){if(e.preventDefault(),w.value)return;let t=h.value;if(h.value=``,_.value=!0,u.ws&&y.value){await G(u.ws,t),$.emit(`messageSent`);return}let n=await u.sendMessage(t,U());n?.executionId&&W(n.executionId),$.emit(`messageSent`),_.value=!1}async function ie(e){e.shiftKey||e.isComposing||(await re(e),q())}function ae(e){if(!f.value)return;let t=new DataTransfer;for(let n=0;n<f.value.length;n++){let r=f.value[n];e.name!==r.name&&t.items.add(r)}F(),f.value=t.files}function oe(e){(e.key===`ArrowUp`||e.key===`ArrowDown`)&&(e.preventDefault(),c(`arrowKeyDown`,{key:e.key,currentInputValue:h.value}))}function K(){O.value||P({accept:b(N)})}function q(){let e=p.value;if(!e)return;e.style.height=`var(--chat--textarea--height)`;let t=Math.min(e.scrollHeight,480);e.style.height=`${t}px`}return(e,n)=>(t(),a(`div`,{class:`chat-input`,style:V(ee.value)},[i(`div`,pn,[e.$slots.leftPanel?(t(),a(`div`,mn,[A(e.$slots,`leftPanel`,{},void 0,!0)])):g(``,!0),T(i(`textarea`,{ref_key:`chatTextArea`,ref:p,"onUpdate:modelValue":n[0]||=e=>h.value=e,"data-test-id":`chat-input`,disabled:D.value,placeholder:b(o)(r.placeholder),onKeydown:[M(ie,[`enter`]),oe],onInput:q,onMousedown:q,onFocus:q},null,40,hn),[[E,h.value]]),i(`div`,gn,[k.value?(t(),a(`button`,{key:0,disabled:O.value,class:`chat-input-file-button`,"data-test-id":`chat-attach-file-button`,onClick:K},[j(b(ln),{height:`24`,width:`24`})],8,_n)):g(``,!0),i(`button`,{disabled:w.value,class:`chat-input-send-button`,onClick:re},[j(b(fn),{height:`24`,width:`24`})],8,vn)])]),f.value?.length&&(!_.value||y.value)?(t(),a(`div`,yn,[(t(!0),a(C,null,I(f.value,e=>(t(),B(Bt,{key:e.name,file:e,"is-removable":!0,"is-previewable":!0,onRemove:ae},null,8,[`file`]))),128))])):g(``,!0)],4))}}),[[`__scopeId`,`data-v-25e01beb`]]),xn={class:`chat-layout`},Sn={key:0,class:`chat-header`},Cn={key:2,class:`chat-footer`},wn=u({__name:`Layout`,setup(e){let n=s(null);function r(){let e=n.value;e&&(e.scrollTop=e.scrollHeight)}return x(()=>{$.on(`scrollToBottom`,r),window.addEventListener(`resize`,r)}),F(()=>{$.off(`scrollToBottom`,r),window.removeEventListener(`resize`,r)}),(e,r)=>(t(),a(`main`,xn,[e.$slots.header?(t(),a(`div`,Sn,[A(e.$slots,`header`)])):g(``,!0),e.$slots.default?(t(),a(`div`,{key:1,ref_key:`chatBodyRef`,ref:n,class:`chat-body`},[A(e.$slots,`default`)],512)):g(``,!0),e.$slots.footer?(t(),a(`div`,Cn,[A(e.$slots,`footer`)])):g(``,!0)]))}}),Tn={key:0,class:`message-actions`},En=X(u({__name:`MessageActions`,props:{message:{}},setup(e){let r=e,{options:i}=vt(),o=$e(),{t:s}=nt();async function c(){if(r.message.sender===`user`){let e=`text`in r.message&&typeof r.message.text==`string`?r.message.text:``;e.trim()&&await o.sendMessage(e,r.message.files?Array.from(r.message.files):[])}}function l(){let e=`text`in r.message&&typeof r.message?.text==`string`?r.message?.text:``;e.trim()&&$.emit(`setInputValue`,e)}return(r,o)=>b(i).enableMessageActions?(t(),a(`div`,Tn,[e.message.sender===`user`?(t(),B(b(q),{key:0},{content:H(()=>[n(h(b(s)(`repostButton`)),1)]),default:H(()=>[j(b(ie),{icon:`redo-2`,size:`medium`,class:`icon`,onClick:c})]),_:1})):g(``,!0),e.message.sender===`user`?(t(),B(b(q),{key:1},{content:H(()=>[n(h(b(s)(`reuseButton`)),1)]),default:H(()=>[j(b(ie),{icon:`files`,size:`medium`,class:`icon`,onClick:l})]),_:1})):g(``,!0)])):g(``,!0)}}),[[`__scopeId`,`data-v-207aef80`]]),Dn={key:0,class:`chat-message-actions`},On={key:2,class:`chat-message-files`},kn=u({__name:`Message`,props:{message:{}},setup(e,{expose:n}){let{message:r}=v(e),{options:i}=vt(),c=s(null),l=s({}),u=m(()=>r.value.text||`&lt;Empty response&gt;`),d=m(()=>({"chat-message-from-user":r.value.sender===`user`,"chat-message-from-bot":r.value.sender===`bot`,"chat-message-transparent":r.value.transparent===!0})),f=()=>{c.value?.scrollIntoView&&c.value.scrollIntoView({block:`start`})},p={...i?.messageComponents??{}};n({scrollToView:f});let h=async e=>await new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(r.result),r.onerror=n,r.readAsDataURL(e)});return x(async()=>{if(r.value.files)for(let e of r.value.files)try{let t=await h(e);l.value[e.name]=t}catch(e){console.error(`Error reading file:`,e)}}),(e,n)=>(t(),a(`div`,{ref_key:`messageContainer`,ref:c,class:w([`chat-message`,d.value])},[e.$slots.beforeMessage||b(i)?.enableMessageActions?(t(),a(`div`,Dn,[A(e.$slots,`beforeMessage`,z(o({message:b(r)}))),j(En,{message:b(r)},null,8,[`message`])])):g(``,!0),A(e.$slots,`default`,{},()=>[b(r).type===`component`&&p[b(r).key]?(t(),B(L(p[b(r).key]),z(_({key:0},b(r).arguments)),null,16)):(t(),B(_t,{key:1,text:u.value},null,8,[`text`])),(b(r).files??[]).length>0?(t(),a(`div`,On,[(t(!0),a(C,null,I(b(r).files??[],e=>(t(),a(`div`,{key:e.name,class:`chat-message-file`},[j(Bt,{file:e,"is-removable":!1,"is-previewable":!0},null,8,[`file`])]))),128))])):g(``,!0)])],2))}}),An=u({__name:`MessageTyping`,props:{animation:{default:`bouncing`}},setup(e){let n=e,r={id:`typing`,text:``,sender:`bot`},a=s(),o=m(()=>({"chat-message-typing":!0,[`chat-message-typing-animation-${n.animation}`]:!0}));return x(()=>{a.value?.scrollToView()}),(e,n)=>(t(),B(b(kn),{ref_key:`messageContainer`,ref:a,class:w(o.value),message:r,"data-test-id":`chat-message-typing`},{default:H(()=>[...n[0]||=[i(`div`,{class:`chat-message-typing-body`},[i(`span`,{class:`chat-message-typing-circle`}),i(`span`,{class:`chat-message-typing-circle`}),i(`span`,{class:`chat-message-typing-circle`})],-1)]]),_:1},8,[`class`]))}}),jn={key:0,class:`empty-container`},Mn={class:`empty`,"data-test-id":`chat-messages-empty`},Nn={key:1,class:`chat-messages-list`},Pn=u({__name:`MessagesList`,props:{messages:{},emptyText:{}},setup(e){let r=$e(),o=s([]),{initialMessages:c,waitingForResponse:l}=r;return D(()=>o.value.length,()=>{let e=o.value[o.value.length-1];e&&e.scrollToView()}),(r,s)=>e.emptyText&&b(c).length===0&&e.messages.length===0?(t(),a(`div`,jn,[i(`div`,Mn,[j(b(ie),{icon:`message-circle`,size:`large`,class:`emptyIcon`}),j(b(Y),{tag:`p`,size:`medium`,color:`text-base`},{default:H(()=>[n(h(e.emptyText),1)]),_:1})])])):(t(),a(`div`,Nn,[(t(!0),a(C,null,I(b(c),e=>(t(),B(kn,{key:e.id,message:e},null,8,[`message`]))),128)),(t(!0),a(C,null,I(e.messages,e=>(t(),B(kn,{key:e.id,ref_for:!0,ref_key:`messageComponents`,ref:o,message:e},{beforeMessage:H(({message:e})=>[A(r.$slots,`beforeMessage`,_({ref_for:!0},{message:e}))]),_:2},1032,[`message`]))),128)),b(l)?(t(),B(An,{key:0})):g(``,!0)]))}}),Fn={class:`chat-heading`},In=[`title`],Ln={key:0},Rn=u({__name:`Chat`,setup(e){let{t:n}=nt(),r=$e(),{messages:o,currentSessionId:c}=r,{options:l}=vt(),u=m(()=>l.mode===`window`&&l.showWindowCloseButton),d=s(-1),f=s(``),p=m(()=>o.value.filter(e=>e.sender===`user`).map(e=>`text`in e&&typeof e.text==`string`?e.text:``));function _(){r.startNewSession&&(r.startNewSession(),y(()=>{$.emit(`scrollToBottom`)}))}async function v(){r.loadPreviousSession&&(await r.loadPreviousSession(),y(()=>{$.emit(`scrollToBottom`)}))}function C(){$.emit(`close`)}function w(e){let t=p.value;if(t.length!==0){if(d.value===-1&&e.currentInputValue.length>0&&(f.value=e.currentInputValue),e.key===`ArrowUp`){if($.emit(`blurInput`),d.value<t.length-1){d.value++;let e=t[t.length-1-d.value];$.emit(`setInputValue`,e)}$.emit(`focusInput`)}else if(e.key===`ArrowDown`){if(d.value===-1)return;if($.emit(`blurInput`),d.value>0){d.value--;let e=t[t.length-1-d.value];$.emit(`setInputValue`,e)}else d.value===0&&(d.value=-1,$.emit(`setInputValue`,f.value),f.value=``);$.emit(`focusInput`)}}}let T;return x(async()=>{!o.value.length&&l.messageHistory&&(o.value=l.messageHistory.map(e=>({...e}))),await v(),!l.showWelcomeScreen&&!c.value&&_(),T=$.on(`messageSent`,()=>{d.value=-1,f.value=``})}),S(()=>{T&&T()}),(e,r)=>(t(),B(wn,{class:`chat-wrapper`},{header:H(()=>[i(`div`,Fn,[i(`h1`,null,h(b(n)(`title`)),1),u.value?(t(),a(`button`,{key:0,class:`chat-close-button`,title:b(n)(`closeButtonTooltip`),onClick:C},[j(b(Je),{height:`18`,width:`18`})],8,In)):g(``,!0)]),b(n)(`subtitle`)?(t(),a(`p`,Ln,h(b(n)(`subtitle`)),1)):g(``,!0)]),footer:H(()=>[b(c)?(t(),B(bn,{key:0,onArrowKeyDown:w})):(t(),B(on,{key:1}))]),default:H(()=>[!b(c)&&b(l).showWelcomeScreen?(t(),B(Qt,{key:0,"onClick:button":_})):(t(),B(Pn,{key:1,messages:b(o)},null,8,[`messages`]))]),_:1}))}});async function zn(){return``}async function Bn(...e){let t=await zn(),n=e[1]?.body,r={...t?{authorization:`Bearer ${t}`}:{},...e[1]?.headers};n instanceof FormData?delete r[`Content-Type`]:r[`Content-Type`]=`application/json`;let i=await fetch(e[0],{...e[1],mode:`cors`,cache:`no-cache`,headers:r}),a;try{a=await i.clone().json()}catch{a=await i.text()}return a}async function Vn(e,t={},n={}){let r=e;return Object.keys(t).length>0&&(r=`${r}?${new URLSearchParams(t).toString()}`),await Bn(r,{...n,method:`GET`})}async function Hn(e,t={},n={}){return await Bn(e,{...n,method:`POST`,body:JSON.stringify(t)})}async function Un(e,t={},n=[],r={}){let i=new FormData;for(let e in t){let n=t[e];typeof n==`object`&&n?i.append(e,JSON.stringify(n)):i.append(e,n)}for(let e of n)i.append(`files`,e);return await Bn(e,{...r,method:`POST`,body:i})}async function Wn(e,t){return await(t.webhookConfig?.method===`POST`?Hn:Vn)(`${t.webhookUrl}`,{action:`loadPreviousSession`,[t.chatSessionKey]:e,...t.metadata?{metadata:t.metadata}:{}},{headers:t.webhookConfig?.headers})}async function Gn(e,t,n,r){let i;return i=t.length>0?await Un(`${r.webhookUrl}`,{action:`sendMessage`,[r.chatSessionKey]:n,[r.chatInputKey]:e,...r.metadata?{metadata:r.metadata}:{}},t,{headers:r.webhookConfig?.headers}):await(r.webhookConfig?.method===`POST`?Hn:Vn)(`${r.webhookUrl}`,{action:`sendMessage`,[r.chatSessionKey]:n,[r.chatInputKey]:e,...r.metadata?{metadata:r.metadata}:{}},{headers:r.webhookConfig?.headers}),r.afterMessageSent&&await r.afterMessageSent(e,i),i}function Kn(){let e=``,t=new TextDecoder;return new TransformStream({transform(n,r){e+=t.decode(n,{stream:!0});let i=e.split(` `);e=i.pop()??``;for(let e of i)if(e.trim())try{let t=JSON.parse(e);r.enqueue(t)}catch{r.enqueue({type:`item`,content:e})}},flush(t){if(e.trim())try{let n=JSON.parse(e);t.enqueue(n)}catch{t.enqueue({type:`item`,content:e})}}})}async function qn(e,t,n,r,i){let a=await(t.length>0?Jn(e,t,n,r):Yn(e,n,r));if(!a.ok){let e=await a.text();throw console.error(`HTTP error response:`,a.status,e),Error(`Error while sending message. Error: ${e}`)}if(!a.body)throw Error(`Response body is not readable`);let o=a.body.pipeThrough(Kn()).getReader(),s=!1;try{for(;;){let{done:e,value:t}=await o.read();if(e)break;let n=t.metadata?.nodeId||`unknown`,r=t.metadata?.runIndex;switch(t.type){case`begin`:i.onBeginMessage(n,r);break;case`item`:s=!0,i.onChunk(t.content??``,n,r);break;case`end`:await i.onEndMessage(n,r);break;case`error`:s=!0,i.onChunk(`Error: ${t.content??`Unknown error`}`,n,r),await i.onEndMessage(n,r);break}}}finally{o.releaseLock()}return{hasReceivedChunks:s}}async function Jn(e,t,n,r){let i=new FormData;i.append(`action`,`sendMessage`),i.append(r.chatSessionKey,n),i.append(r.chatInputKey,e),r.metadata&&i.append(`metadata`,JSON.stringify(r.metadata));for(let e of t)i.append(`files`,e);let a={Accept:`text/plain`,...r.webhookConfig?.headers};return delete a[`Content-Type`],await fetch(r.webhookUrl,{method:`POST`,headers:a,body:i})}async function Yn(e,t,n){let r={action:`sendMessage`,[n.chatSessionKey]:t,[n.chatInputKey]:e,...n.metadata?{metadata:n.metadata}:{}};return await fetch(n.webhookUrl,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/plain`,...n.webhookConfig?.headers},body:JSON.stringify(r)})}var Xn=class{nodeRuns=new Map;runOrder=[];activeRuns=new Set;constructor(){}getRunKey(e,t){return t===void 0?e:`${e}-${t}`}initializeRun(e,t){let n=this.getRunKey(e,t);if(!this.nodeRuns.has(n)){let e=Zn();return this.nodeRuns.set(n,{content:``,isComplete:!1,message:e}),this.runOrder.push(n),e}return this.nodeRuns.get(n).message}registerRunStart(e,t){let n=this.getRunKey(e,t);this.activeRuns.add(n)}addRunToActive(e,t){let n=this.getRunKey(e,t);return this.activeRuns.add(n),this.initializeRun(e,t)}removeRunFromActive(e,t){let n=this.getRunKey(e,t);this.activeRuns.delete(n);let r=this.nodeRuns.get(n);r&&(r.isComplete=!0)}addChunkToRun(e,t,n){let r=this.getRunKey(e,n),i=this.nodeRuns.get(r);if(i){i.content+=t;let e={...i.message,text:i.content};return i.message=e,e}return null}getRunMessage(e,t){let n=this.getRunKey(e,t);return this.nodeRuns.get(n)?.message??null}areAllRunsComplete(){return Array.from(this.nodeRuns.values()).every(e=>e.isComplete)}getRunCount(){return this.runOrder.length}getActiveRunCount(){return this.activeRuns.size}getAllMessages(){return this.runOrder.map(e=>this.nodeRuns.get(e)?.message).filter(e=>e!==void 0)}reset(){this.nodeRuns.clear(),this.runOrder=[],this.activeRuns.clear()}};function Zn(e){return{id:e??Z(),type:`text`,text:``,sender:`bot`}}function Qn(e,t,n){let r=e.findIndex(e=>e.id===t);if(r===-1)throw Error(`Can't update message. No message with id ${t} found`);e[r]=n}function $n(e,t,n,r,i,a){try{if(e===``)return;if(t){let r=n.getRunMessage(t,a);r||(r=n.addRunToActive(t,a),i.value.push(r));let o=n.addChunkToRun(t,e,a);o&&Qn(i.value,o.id,o)}else{r.value||(r.value=Zn(),i.value.push(r.value));let t={...r.value,text:r.value.text+e};Qn(i.value,r.value.id,t),r.value=t}y(()=>{$.emit(`scrollToBottom`)})}catch(e){console.error(`Error handling stream chunk:`,e)}}function er(e,t,n){try{t.registerRunStart(e,n)}catch(e){console.error(`Error handling node start:`,e)}}async function tr(e,t,n,r,i,a){try{let o=t.getRunMessage(e,n);if(t.removeRunFromActive(e,n),o&&`text`in o){let e=it(o.text);if(e.type===`component`){let t=a.value.findIndex(e=>e.id===o.id);return t!==-1&&(e.id=o.id,a.value[t]=e),at(e)}}i.afterMessageSent&&o&&await i.afterMessageSent(r,{message:o,hasReceivedChunks:!0})}catch(e){console.error(`Error handling node complete:`,e)}return!1}function nr(e,t=[]){return{id:Z(),text:e,sender:`user`,files:t}}function rr(e){let t=e.output??e.text??e.message??``;if(typeof t==`object`&&t.type&&t.type===`text`)return t.text;if(t===``&&Object.keys(e).length>0)try{t=JSON.stringify(e,null,2)}catch{}return t}function ir(e){let{receivedMessage:t,messages:n}=e;t.value&&n.value.some(e=>e.sender===`bot`&&`text`in e&&e.text.trim().length>0)||(t.value=Zn(),n.value.push(t.value)),t.value.text=`[No response received. This could happen if streaming is enabled in the trigger but disabled in agent node(s)]`}function ar(e){let{error:t,receivedMessage:n,messages:r}=e;n.value??=Zn(),n.value.text=`Error: Failed to receive response`,r.value.includes(n.value)||r.value.push(n.value),console.error(`Chat API error:`,t)}async function or(e){let{text:t,files:n,sessionId:r,options:i,messages:a,receivedMessage:o,streamingManager:s,blockUserInput:c}=e,{hasReceivedChunks:l}=await qn(t,n,r,i,{onChunk:(e,t,n)=>{$n(e,t,s,o,a,n)},onBeginMessage:(e,t)=>{er(e,s,t)},onEndMessage:async(e,n)=>{await tr(e,s,n,t,i,a)&&(c.value=!0)}});return l||ir({receivedMessage:o,messages:a}),l}async function sr(e){let{text:t,files:n,sessionId:r,options:i}=e,a=await Gn(t,n,r,i);if(a?.executionStarted)return{response:a};let o=Zn();return o.text=rr(a),{response:a,botMessage:o}}const cr={install(e,t){e.provide(ft,t);let n=s([]),r=s(null),i=s(!1),a=s(!1),o=m(()=>(t.initialMessages??[]).map(e=>({id:Z(),text:e,sender:`bot`})));async function c(e,o=[]){let c=nr(e,o);n.value.push(c),i.value=!0,y(()=>{$.emit(`scrollToBottom`)});let l=s(null),u=new Xn;try{if(t.beforeMessageSent&&await t.beforeMessageSent(e),t?.enableStreaming){let i=await or({text:e,files:o,sessionId:r.value,options:t,messages:n,receivedMessage:l,streamingManager:u,blockUserInput:a});t.afterMessageSent&&await t.afterMessageSent(e,{hasReceivedChunks:i,message:l.value??``})}else{let a=await sr({text:e,files:o,sessionId:r.value,options:t});if(a.response?.executionStarted)return i.value=!1,a.response;a.botMessage&&(l.value=a.botMessage,n.value.push(a.botMessage)),t.afterMessageSent&&await t.afterMessageSent(e,a.response)}}catch(e){ar({error:e,receivedMessage:l,messages:n})}finally{i.value=!1}return y(()=>{$.emit(`scrollToBottom`)}),null}async function l(){if(!t.loadPreviousSession)return;let e=t.sessionId??localStorage.getItem(st);return e||(e=Z(),localStorage.setItem(st,e)),n.value=((await Wn(e,t))?.data||[]).map((e,t)=>({id:`${t}`,text:e.kwargs.content,sender:e.id.includes(`HumanMessage`)?`user`:`bot`})),r.value=e,localStorage.setItem(st,e),e}async function u(){let e=localStorage.getItem(st);e&&t.loadPreviousSession&&!t.sessionId?r.value=e:(r.value=t.sessionId??Z(),localStorage.setItem(st,r.value))}let d={initialMessages:o,messages:n,currentSessionId:r,waitingForResponse:i,blockUserInput:a,loadPreviousSession:l,startNewSession:u,sendMessage:c};e.provide(lt,d),e.config.globalProperties.$chat=d}};var lr=X(u({__name:`ChatMessagesPanel`,props:{sessionId:{},showCloseButton:{type:Boolean},isOpen:{type:Boolean,default:!0},isReadOnly:{type:Boolean,default:!1},isHeaderClickable:{type:Boolean}},emits:[`displayExecution`,`refreshSession`,`close`,`clickHeader`,`hideChatPanel`],setup(e,{emit:r}){let o=e,s=r,c=G(),l=U(),u=St(),d=Se(),f=P(`chatContainer`),{chatTriggerNode:p,isStreamingEnabled:_,isFileUploadsAllowed:v,allowedFilesMimeTypes:C,isWorkflowReadyForChat:E,chatOptions:A}=Gt(o.isReadOnly,()=>o.sessionId),M=null,N=m(()=>c.baseText(`chat.window.session.id`,{interpolate:{id:`${o.sessionId.slice(0,5)}...`}}));async function F(){await l.copy(o.sessionId),d.showMessage({title:c.baseText(`generic.copiedToClipboard`),message:``,type:`success`})}function I(){E.value&&f.value&&(M||(M=k(Rn),M.use(cr,A.value),M.mount(f.value)))}function L(){M&&f.value&&(M.unmount(),M=null,f.value.innerHTML=``)}return D(()=>o.isOpen,async e=>{e&&!M&&(L(),I())}),D(()=>p.value,async(e,t)=>{o.isOpen&&(e&&!t?(await y(),I()):!e&&t&&(L(),s(`hideChatPanel`)))}),D(()=>f.value,async e=>{e&&o.isOpen&&E.value&&I()}),D(u,async(e,t)=>{o.isOpen&&E.value&&e!==t&&(L(),I())}),D(()=>_.value,async(e,t)=>{o.isOpen&&E.value&&M&&e!==t&&(L(),I())}),D(()=>[v.value,C.value],async(e,t)=>{o.isOpen&&E.value&&M&&JSON.stringify(e)!==JSON.stringify(t)&&(L(),I())}),x(async()=>{o.isOpen&&(await y(),I())}),S(()=>{L()}),(r,o)=>(t(),a(`div`,{class:w([r.$style.chat,`ignore-key-press-canvas`]),"data-test-id":`workflow-lm-chat-dialog`,tabindex:`0`},[j(Kt,{"data-test-id":`chat-header`,title:b(c).baseText(`chat.window.title`),"is-clickable":e.isHeaderClickable,onClick:o[1]||=e=>s(`clickHeader`)},{actions:H(()=>[e.isReadOnly?g(``,!0):(t(),B(b(q),{key:0},{content:H(()=>[n(h(e.sessionId)+` `,1),o[2]||=i(`br`,null,null,-1),n(` `+h(b(c).baseText(`chat.window.session.id.copy`)),1)]),default:H(()=>[j(b(J),{variant:`ghost`,"data-test-id":`chat-session-id`,size:`xsmall`,class:w(r.$style.newHeaderButton),onClick:O(F,[`stop`])},{default:H(()=>[n(h(N.value),1)]),_:1},8,[`class`])]),_:1})),e.isReadOnly?g(``,!0):(t(),B(b(q),{key:1,content:b(c).baseText(`chat.window.session.resetSession`)},{default:H(()=>[j(b(K),{variant:`ghost`,class:w(r.$style.newHeaderButton),"data-test-id":`refresh-session-button`,size:`xsmall`,"icon-size":`medium`,icon:`undo-2`,title:b(c).baseText(`chat.window.session.reset`),onClick:o[0]||=O(e=>s(`refreshSession`),[`stop`])},null,8,[`class`,`title`])]),_:1},8,[`content`]))]),_:1},8,[`title`,`is-clickable`]),T(i(`main`,{class:w(r.$style.chatSdkContainer),"data-test-id":`canvas-chat-body`},[i(`div`,{ref_key:`chatContainer`,ref:f,class:w(r.$style.chatContainer)},null,2)],2),[[ee,e.isOpen&&b(p)]])],2))}}),[[`__cssModules`,{$style:{chat:`_chat_1gl9t_125`,headerButton:`_headerButton_1gl9t_185`,newHeaderButton:`_newHeaderButton_1gl9t_190`,chatSdkContainer:`_chatSdkContainer_1gl9t_195`,chatContainer:`_chatContainer_1gl9t_202`}}]]),ur=X(u({__name:`LogsViewRunData`,props:{title:{},paneType:{},logEntry:{},collapsingTableColumnName:{},searchShortcut:{}},emits:[`collapsingTableColumnChanged`],setup(e,{emit:r}){let a=r,o=G(),c=Fe(),l=f(He,s()),u=s(e.paneType===`input`?`schema`:`table`),p=m(()=>e.paneType===`input`&&(e.logEntry.runData?.source.length??0)>1),v=m(()=>{if(jt(e.logEntry)||e.paneType===`output`)return{node:e.logEntry.node,runIndex:e.logEntry.runIndex};let t=e.logEntry.runData?.source[0],n=t&&e.logEntry.workflow.getNode(t.previousNode);if(!(!t||!n))return{node:{...n,disabled:!1},runIndex:t.previousNodeRun??0,overrideOutputs:[t.previousNodeOutput??0]}}),y=m(()=>e.paneType===`output`&&(e.logEntry.runData?.executionStatus===`running`||e.logEntry.runData?.executionStatus===`waiting`));function x(){c.setActiveNodeName(e.logEntry.node.name,`logs_view`)}function S(e){u.value=e}return(r,s)=>{let c=N(`n8n-html`);return v.value?(t(),B(Xe,_({key:0},v.value,{key:`run-data${b(l)?`-pop-out`:``}`,class:r.$style.component,"workflow-object":e.logEntry.workflow,"workflow-execution":e.logEntry.execution,"no-data-in-branch-message":b(o).baseText(`ndv.output.noOutputDataInBranch`),"executing-message":b(o).baseText(`ndv.output.executing`),"pane-type":e.paneType,"disable-run-index-selection":!0,compact:!0,"show-actions-on-hover":!0,"disable-pin":!0,"disable-edit":!0,"disable-hover-highlight":!0,"disable-settings-hint":!0,"display-mode":u.value,"disable-ai-content":!b(jt)(e.logEntry),"is-executing":y.value,"table-header-bg-color":`light`,"collapsing-table-column-name":e.collapsingTableColumnName,"search-shortcut":e.searchShortcut,onDisplayModeChange:S,onCollapsingTableColumnChanged:s[0]||=e=>a(`collapsingTableColumnChanged`,e)}),d({header:H(()=>[j(b(Y),{class:w(r.$style.title),bold:!0,color:`text-light`,size:`small`},{default:H(()=>[n(h(e.title),1)]),_:1},8,[`class`])]),"header-end":H(e=>[j(Ye,_(e,{search:u.value===`schema`?``:e.search}),null,16,[`search`])]),"no-output-data":H(()=>[j(Ze,{title:b(o).baseText(`ndv.output.noOutputData.title`)},null,8,[`title`])]),"node-waiting":H(()=>[j(Ze,{title:b(o).baseText(`ndv.output.waitNodeWaiting.title`),wide:``},{default:H(()=>[T(i(`span`,null,null,512),[[c,b(he)(e.logEntry.node,e.logEntry.workflow)]])]),_:1},8,[`title`])]),_:2},[p.value?{name:`content`,fn:H(()=>[]),key:`0`}:void 0,p.value?{name:`callout-message`,fn:H(()=>[j(b(re),{keypath:`logs.details.body.multipleInputs`,scope:`global`},{button:H(()=>[j(b(ue),{size:`small`,onClick:x},{default:H(()=>[n(h(b(o).baseText(`logs.details.body.multipleInputs.openingTheNode`)),1)]),_:1})]),_:1})]),key:`1`}:void 0]),1040,[`class`,`workflow-object`,`workflow-execution`,`no-data-in-branch-message`,`executing-message`,`pane-type`,`display-mode`,`disable-ai-content`,`is-executing`,`collapsing-table-column-name`,`search-shortcut`])):g(``,!0)}}}),[[`__cssModules`,{$style:{component:`_component_7mlt9_125`,title:`_title_7mlt9_129`}}]]),dr=200,fr=X(u({__name:`LogDetailsPanel`,props:{isOpen:{type:Boolean},logEntry:{},window:{},latestInfo:{},panels:{},collapsingInputTableColumnName:{},collapsingOutputTableColumnName:{},isHeaderClickable:{type:Boolean}},emits:[`clickHeader`,`toggleInputOpen`,`toggleOutputOpen`,`collapsingInputTableColumnChanged`,`collapsingOutputTableColumnChanged`],setup(e,{emit:r}){let o=r,s=G(),c=Ve(),l=Fe(),u=ut(),d=m(()=>c.getNodeType(e.logEntry.node.type)),f=m(()=>Lt(e.logEntry,!1)),p=m(()=>d.value?.group.includes(`trigger`)),_=P(`container`),v=Vt(`N8N_LOGS_INPUT_PANEL_WIDTH`,{container:_,defaultSize:e=>e/2,minSize:dr,maxSize:e=>e-dr,allowCollapse:!0,allowFullSize:!0}),y=m(()=>e.panels===rt.BOTH),x=m(()=>l.isNDVOpen||u.isMapperOpen?void 0:e.panels===rt.INPUT?`input`:`output`);function S(){v.isCollapsed.value&&o(`toggleInputOpen`,!1),v.isFullSize.value&&o(`toggleOutputOpen`,!1),v.onResizeEnd()}return(r,c)=>(t(),a(`div`,{ref_key:`container`,ref:_,class:w(r.$style.container),"data-test-id":`log-details`},[j(Kt,{"data-test-id":`log-details-header`,class:w(r.$style.header),"is-clickable":e.isHeaderClickable,onClick:c[2]||=e=>o(`clickHeader`)},{title:H(()=>[i(`div`,{class:w(r.$style.title)},[j(bt,{"node-type":d.value,size:16,class:w(r.$style.icon)},null,8,[`node-type`,`class`]),j(Nt,{name:e.latestInfo?.name??e.logEntry.node.name,"is-deleted":e.latestInfo?.deleted??!1},null,8,[`name`,`is-deleted`]),e.isOpen&&e.logEntry.runData!==void 0?(t(),B(Jt,{key:0,class:w(r.$style.executionSummary),status:e.logEntry.runData.executionStatus??`unknown`,"consumed-tokens":f.value,"start-time":e.logEntry.runData.startTime,"time-took":e.logEntry.runData.executionTime},null,8,[`class`,`status`,`consumed-tokens`,`start-time`,`time-took`])):g(``,!0)],2)]),actions:H(()=>[e.isOpen&&!p.value&&!b(Mt)(e.logEntry)?(t(),a(`div`,{key:0,class:w(r.$style.actions)},[j(Ct,{label:b(s).baseText(`generic.shortcutHint`),shortcut:{keys:[`i`]}},{default:H(()=>[j(b(J),{variant:`subtle`,size:`xsmall`,class:w(e.panels===b(rt).OUTPUT?``:r.$style.pressed),onClick:c[0]||=O(e=>o(`toggleInputOpen`),[`stop`])},{default:H(()=>[n(h(b(s).baseText(`logs.details.header.actions.input`)),1)]),_:1},8,[`class`])]),_:1},8,[`label`]),j(Ct,{label:b(s).baseText(`generic.shortcutHint`),shortcut:{keys:[`o`]}},{default:H(()=>[j(b(J),{variant:`subtle`,size:`xsmall`,class:w(e.panels===b(rt).INPUT?``:r.$style.pressed),onClick:c[1]||=O(e=>o(`toggleOutputOpen`),[`stop`])},{default:H(()=>[n(h(b(s).baseText(`logs.details.header.actions.output`)),1)]),_:1},8,[`class`])]),_:1},8,[`label`])],2)):g(``,!0),A(r.$slots,`actions`)]),_:3},8,[`class`,`is-clickable`]),e.isOpen?(t(),a(`div`,{key:0,class:w(r.$style.content),"data-test-id":`logs-details-body`},[b(Mt)(e.logEntry)?(t(),a(`div`,{key:0,class:w(r.$style.placeholder)},[j(b(Y),{color:`text-base`},{default:H(()=>[n(h(b(s).baseText(`ndv.output.runNodeHint`)),1)]),_:1})],2)):(t(),a(C,{key:1},[!p.value&&e.panels!==b(rt).OUTPUT?(t(),B(b(de),{key:0,class:w({[r.$style.inputResizer]:!0,[r.$style.collapsed]:b(v).isCollapsed.value,[r.$style.full]:b(v).isFullSize.value}),width:b(v).size.value,style:V(y.value?{width:`${b(v).size.value??0}px`}:void 0),"supported-directions":[`right`],"is-resizing-enabled":y.value,window:e.window,onResize:b(v).onResize,onResizeend:S},{default:H(()=>[j(ur,{"data-test-id":`log-details-input`,"pane-type":`input`,title:b(s).baseText(`logs.details.header.actions.input`),"log-entry":e.logEntry,"collapsing-table-column-name":e.collapsingInputTableColumnName,"search-shortcut":x.value===`input`?`ctrl+f`:void 0,onCollapsingTableColumnChanged:c[3]||=e=>o(`collapsingInputTableColumnChanged`,e)},null,8,[`title`,`log-entry`,`collapsing-table-column-name`,`search-shortcut`])]),_:1},8,[`class`,`width`,`style`,`is-resizing-enabled`,`window`,`onResize`])):g(``,!0),p.value||e.panels!==b(rt).INPUT?(t(),B(ur,{key:1,"data-test-id":`log-details-output`,"pane-type":`output`,class:w(r.$style.outputPanel),title:b(s).baseText(`logs.details.header.actions.output`),"log-entry":e.logEntry,"collapsing-table-column-name":e.collapsingOutputTableColumnName,"search-shortcut":x.value===`output`?`ctrl+f`:void 0,onCollapsingTableColumnChanged:c[4]||=e=>o(`collapsingOutputTableColumnChanged`,e)},null,8,[`class`,`title`,`log-entry`,`collapsing-table-column-name`,`search-shortcut`])):g(``,!0)],64))],2)):g(``,!0)],2))}}),[[`__cssModules`,{$style:{container:`_container_1du2i_125`,header:`_header_1du2i_134`,actions:`_actions_1du2i_138`,pressed:`_pressed_1du2i_144`,title:`_title_1du2i_148`,icon:`_icon_1du2i_154`,executionSummary:`_executionSummary_1du2i_158`,content:`_content_1du2i_162`,outputPanel:`_outputPanel_1du2i_170`,inputResizer:`_inputResizer_1du2i_175`,collapsed:`_collapsed_1du2i_179`,full:`_full_1du2i_179`,placeholder:`_placeholder_1du2i_183`}}]]),pr=X(u({__name:`LogsPanelActions`,props:{isOpen:{type:Boolean},isSyncSelectionEnabled:{type:Boolean},showToggleButton:{type:Boolean},showPopOutButton:{type:Boolean}},emits:[`popOut`,`toggleOpen`,`toggleSyncSelection`],setup(e,{emit:n}){let r=n,i=G(),o=m(()=>i.baseText(`runData.panel.actions.popOut`)),s=m(()=>i.baseText(e.isOpen?`runData.panel.actions.collapse`:`runData.panel.actions.open`)),c=m(()=>[{id:`toggleSyncSelection`,label:i.baseText(`runData.panel.actions.sync`),checked:e.isSyncSelectionEnabled},...e.showPopOutButton?[{id:`popOut`,label:o.value}]:[]]);function l(e){switch(e){case`popOut`:r(e);return;case`toggleSyncSelection`:r(e);return}}return(n,u)=>(t(),a(`div`,{class:w(n.$style.container)},[!e.isOpen&&e.showPopOutButton?(t(),B(b(q),{key:0,content:o.value},{default:H(()=>[j(b(K),{variant:`ghost`,icon:`pop-out`,size:`small`,"icon-size":`medium`,"aria-label":o.value,onClick:u[0]||=O(e=>r(`popOut`),[`stop`])},null,8,[`aria-label`])]),_:1},8,[`content`])):g(``,!0),e.isOpen?(t(),B(b(ae),{key:1,"icon-size":`small`,"activator-icon":`ellipsis`,"activator-size":`small`,items:c.value,teleported:!1,onSelect:l,onClick:u[1]||=O(()=>{},[`stop`])},null,8,[`items`])):g(``,!0),e.showToggleButton?(t(),B(Ct,{key:`tooltip-${e.isOpen}`,label:b(i).baseText(`generic.shortcutHint`),shortcut:{keys:[`l`]}},{default:H(()=>[j(b(K),{variant:`ghost`,size:`small`,"icon-size":`medium`,icon:e.isOpen?`chevron-down`:`chevron-up`,"aria-label":s.value,onClick:u[2]||=O(e=>r(`toggleOpen`),[`stop`])},null,8,[`icon`,`aria-label`])]),_:1},8,[`label`])):g(``,!0)],2))}}),[[`__cssModules`,{$style:{container:`_container_1g4ug_125`}}]]);function mr(e,t,n,r){let i=Oe(),a=p({type:`initial`}),o=p(),s=m(()=>e.value?.stoppedAt!==void 0),c=m(()=>Pt(a.value,t.value,!s.value)),l=pt(),u=Ne(),d=be(),f=Ie();function h(e){l.isLogSelectionSyncedWithCanvas&&Qe.emit(`nodes:select`,{ids:[e.node.id],panIntoView:!0})}function g(t){a.value=t===void 0?{type:`none`}:{type:`selected`,entry:t},t&&(h(t),i.track(`User selected node in log view`,{node_type:t.node.type,node_id:t.node.id,execution_id:e.value?.id,workflow_id:e.value?.workflowData.id,subworkflow_depth:kt(t)}))}function _(){let e=n.value;if(e.length===0)return;let t=c.value?At(e,c.value.id,-1)??e[0]:e[e.length-1];a.value={type:`selected`,entry:t},h(t)}function v(){let e=n.value;if(e.length===0)return;let t=c.value?At(e,c.value.id,1)??e[e.length-1]:e[0];a.value={type:`selected`,entry:t},h(t)}return D(c,e=>{e&&l.setSubNodeSelected(jt(e))},{immediate:!0}),D([()=>u.lastSelectedNode,()=>l.isLogSelectionSyncedWithCanvas],([e,t])=>{let n=e?f.nodesByName[e]?.id:void 0;o.value=t&&!d.hasRangeSelection&&c.value?.node.id!==n?n:void 0},{immediate:!0}),D([t,o],([e,t])=>{if(t===void 0)return;let n=Ot(e=>e.node.id===t,e);if(!n)return;o.value=void 0,a.value={type:`selected`,entry:n};let i=n.parent;for(;i!==void 0;)r(i,!0),i=i.parent},{immediate:!0}),{selected:c,select:g,selectPrev:_,selectNext:v}}function hr(e){return e instanceof HTMLStyleElement||e instanceof HTMLLinkElement&&e.rel===`stylesheet`}function gr(e,t){let n=e.document.head.querySelectorAll(`style, link[rel="stylesheet"]`);for(let r of t){for(let t of r.addedNodes)hr(t)&&e.document.head.appendChild(t.cloneNode(!0));for(let e of r.removedNodes)if(hr(e))for(let t of n)t.isEqualNode(e)&&t.remove()}}function _r(e,t){let n=e.document.querySelector(`link[rel=icon]`)?.getAttribute(`href`);if(n){let e=t.document.createElement(`link`);e.setAttribute(`rel`,`icon`),e.setAttribute(`href`,n),t.document.head.appendChild(e)}}function vr({title:e,container:t,content:n,initialHeight:r,initialWidth:i,shouldPopOut:a,onRequestClose:o}){let c=s(),u=s(!1),d=m(()=>window.parent===window),f=m(()=>!!c.value),p=m(()=>f.value?n.value??void 0:void 0),h=new MutationObserver(e=>{c.value&&gr(c.value,e)}),g=Be(c);h.observe(document.head,{childList:!0,subtree:!0});let _=new MutationObserver(()=>{if(c.value){let e=document.body.getAttribute(`data-theme`);e?c.value.document.body.setAttribute(`data-theme`,e):c.value.document.body.removeAttribute(`data-theme`),c.value.document.documentElement.style.colorScheme=e===`dark`?`dark`:`light`}});_.observe(document.body,{attributes:!0,attributeFilter:[`data-theme`]}),R(He,c),se(p);async function v(){if(!n.value)return;if(!c.value){let e=`popup=yes,width=${i},height=${r},left=100,top=100,toolbar=no,menubar=no,scrollbars=yes,resizable=yes`;c.value=window.open(``,`_blank`,e)??void 0}if(!c.value)return;_r(window,c.value);for(let e of[...document.styleSheets])try{let t=[...e.cssRules].map(e=>e.cssText).join(``),n=document.createElement(`style`);n.textContent=t,c.value.document.head.appendChild(n)}catch{let t=document.createElement(`link`);t.rel=`stylesheet`,t.type=e.type,t.media=e.media,t.href=e.href,c.value.document.head.appendChild(t)}let e=document.body.getAttribute(`data-theme`);e&&c.value.document.body.setAttribute(`data-theme`,e),c.value.document.documentElement.style.colorScheme=e===`dark`?`dark`:`light`,c.value.document.body.append(n.value),c.value.addEventListener(`pagehide`,()=>!u.value&&o())}function y(){n.value&&t.value?.isConnected&&t.value.appendChild(n.value),c.value?.close(),c.value=void 0}return D(a,e=>e?requestAnimationFrame(v):y(),{immediate:!0}),D([e,c],([e,t])=>{t&&g.set(e)},{immediate:!0}),l(()=>{h.disconnect(),_.disconnect()}),F(()=>{u.value=!0,c.value&&(c.value.close(),o())}),{canPopOut:d,isPoppedOut:f,popOutWindow:c}}var yr=400,br=32;function xr(e,t,n,r,i){let a=pt(),o=Oe(),s=Vt(tt,{container:document.body,position:`bottom`,snap:!1,defaultSize:e=>e*.3,minSize:160,maxSize:e=>e*.75,allowCollapse:!0}),c=Vt(dt,{container:r,defaultSize:e=>Math.min(800,e*.3),minSize:240,maxSize:e=>e*.8}),l=Vt(ct,{container:i,defaultSize:e=>Math.min(240,e*.2),minSize:80,maxSize:500,allowFullSize:!0}),u=m(()=>a.isOpen?!s.isCollapsed.value:s.isResizing.value&&s.size.value>0),d=m(()=>l.isFullSize.value),f=m(()=>`Logs - ${e.value}`),p=m(()=>a.state===mt.FLOATING),{canPopOut:h,isPoppedOut:g,popOutWindow:_}=vr({title:f,initialHeight:yr,initialWidth:window.document.body.offsetWidth*.8,container:t,content:n,shouldPopOut:p,onRequestClose:()=>{u.value&&(o.track(`User toggled log view`,{new_state:`attached`}),a.setPreferPoppedOut(!1))}});function v(e){let t=a.isOpen;e!==t&&(a.toggleOpen(e),o.track(`User toggled log view`,{new_state:t?`collapsed`:`attached`}))}function y(){o.track(`User toggled log view`,{new_state:`floating`}),a.toggleOpen(!0),a.setPreferPoppedOut(!0)}function b(){!a.isOpen&&!s.isCollapsed.value&&v(!0),s.isCollapsed.value&&v(!1),s.onResizeEnd()}return D([()=>a.state,s.size,g],([e,t])=>{let n=e===mt.FLOATING?0:e===mt.ATTACHED?t:br;e===mt.FLOATING?_?.value?.document.documentElement.style.setProperty(`--logs-panel--height`,`100vh`):document.documentElement.style.setProperty(`--logs-panel--height`,`${n}px`),a.setHeight(n)},{immediate:!0}),F(()=>a.setHeight(0)),{height:s.size,chatPanelWidth:c.size,overviewPanelWidth:l.size,canPopOut:h,isOpen:u,isCollapsingDetailsPanel:d,isPoppedOut:g,isOverviewPanelFullWidth:l.isFullSize,popOutWindow:_,onToggleOpen:v,onPopOut:y,onResize:s.onResize,onResizeEnd:b,onChatPanelResize:c.onResize,onChatPanelResizeEnd:c.onResizeEnd,onOverviewPanelResize:l.onResize,onOverviewPanelResizeEnd:l.onResizeEnd}}var Sr=u({__name:`LogsViewKeyboardEventListener`,props:{keyMap:{},container:{}},setup(e){let n=f(He,s()),i=ne({window:n?.value}),o=m(()=>n?.value?n.value.document.activeElement===null:!i.value||!e.container||!e.container.contains(i.value)&&e.container!==i.value)