const FlowRenderer=function(){const t=this||{},e=100,i=8e3,n=8e3,M=13.5,o={view:{}};o.view.tools={},o.utils={},o.view.gridSize=function(){return 20},o.view.tools.calculateGridSnapOffsets=function(t,e){0;e=e||{align:"nearest"};const i={x:0,y:0},n=o.view.gridSize(),M=t.x-(n*Math.round((t.x-t.w/2)/n)+t.w/2),A=t.x-(n*Math.round((t.x+t.w/2)/n)-t.w/2);i.x=A,"right"===e.align||("left"===e.align||Math.abs(M)t.clientWidth,hasVerticalScrollbar:t.scrollHeight>t.clientHeight}}function m(t,e){let i=1;const n=t.getAttribute("transform");if(n){const t=n.match(/scale\(([^,]+)\)/);t&&(i=w(parseFloat(t[1]||1),.25,3,1))}const M=t.querySelector("g.outerContainer");x(M,i,!0),e.onwheel=function(t){if(t.ctrlKey||t.metaKey){t.preventDefault();let e=C(M);e-=.075*Math.sign(t.deltaY),e=w(e,.2,3,1),x(M,e)}};const o=function(t){const e=b(t,this);if(!e)return null;let i=t.querySelector(".toolbar");i||(i=v(t));let n=i.querySelector(".zoom-controls");if(n)return{zoomIn:i.querySelector(".zoom-in"),zoomOut:i.querySelector(".zoom-out"),zoomReset:i.querySelector(".zoom-reset")};n=e.createElement("div"),n.classList.add("zoom-controls"),n.classList.add("button-group");const M=e.createElement("button");M.classList.add("red-ui-footer-button","icon-button-bg","zoom-in"),M.innerHTML="+",M.title="Zoom In (Ctrl + Mouse Wheel Up)";const o=e.createElement("button");o.classList.add("red-ui-footer-button","icon-button-bg","zoom-reset"),o.title="Zoom & Scroll Reset";const A=e.createElement("button");A.classList.add("red-ui-footer-button","icon-button-bg","zoom-out"),A.innerHTML="-",A.title="Zoom Out (Ctrl + Mouse Wheel Down)",n.appendChild(A),n.appendChild(o),n.appendChild(M),i&&i.appendChild(n);return{zoomIn:M,zoomOut:A,zoomReset:o}}(e);o.zoomIn.onclick=function(){const t=w(C(M)+.1,.2,3,1);x(M,t)},o.zoomOut.onclick=function(){const t=w(C(M)-.1,.2,3,1);x(M,t)},o.zoomReset.onclick=function(){!function(t){const e=t.getAttribute("_scale_original")||1;x(t,e)}(M),function(t){t.scrollLeft=t.getAttribute("_scroll_x")||0,t.scrollTop=t.getAttribute("_scroll_y")||0}(e.querySelector(".red-ui-workspace-chart"))}}function C(t){return parseFloat(t.getAttribute("_scale_current")||1)}function x(t,e,M=!1){t.setAttribute("transform",`scale(${e})`);const o=t.ownerSVGElement||t;o.style.width=i*e+"px",o.style.height=n*e+"px",t.setAttribute("_scale_current",e),M&&t.setAttribute("_scale_original",e)}function T(t,e,i,n=!1){t.scrollLeft=e,t.scrollTop=i,n&&(t.setAttribute("_scroll_x",e),t.setAttribute("_scroll_y",i))}function S(t,e,M){const o=M.autoZoom||M.autoScroll?function(t,e){const M=.2,o=1,A=e.container.querySelector(".red-ui-workspace-chart"),a=A.getBoundingClientRect(),g=a.width-25,s=a.height-25;let r=i,d=n,u=0,l=0;const c=e.flowId,I=t.filter(t=>"tab"!==t.type&&"subflow"!==t.type&&t.z===c);if(0===I.length)return{scale:1,scrollX:0,scrollY:0};for(const t of I){if("tab"===t.type||"subflow"===t.type||"junction"===t.type)continue;const e=t.x||0,i=t.y||0,n=D(t),M=(n.width||100)/2,o=(n.height||30)/2,A=e-M,a=i-o,g=e+M,s=i+o;r=Math.min(r,A),d=Math.min(d,a),u=Math.max(u,g),l=Math.max(l,s)}let N=1;const j=u-r,L=l-d,y=g/j,b=s/L;(j>g||L>s)&&(N=Math.min(y,b),N*=.95);N=w(N,M,o,1);let p=r,m=d;p<50&&(p=0);m<40&&(m=0);p>0&&(p-=50);m>0&&(m-=40);return p=w(p*N,0,A.scrollWidth),m=w(m*N,0,A.scrollHeight),{scale:N,scrollX:p,scrollY:m,minX:r,minY:d,maxX:u,maxY:l}}(e,M):null;if(t=t.ownerSVGElement||t,M.zoom&&o&&M.autoZoom){x(t.querySelector("g.outerContainer"),o.scale,!0)}return o&&M.autoScroll&&T(t.parentElement,o.scrollX,o.scrollY,!0),o}function z(t,e,i){const n=t.parentElement,M=t.querySelector("g.outerContainer"),o=n.scrollLeft,A=n.scrollTop,a=C(M),g=i||e.flowId||"global";n.setAttribute(`data-tab-${g}-x`,o),n.setAttribute(`data-tab-${g}-y`,A),n.setAttribute(`data-tab-${g}-scale`,a)}function h(t,e,i){const n=t.parentElement,M=t.querySelector("g.outerContainer"),o=i||e.flowId||"global",A=n.getAttribute(`data-tab-${o}-x`),a=n.getAttribute(`data-tab-${o}-y`),g=n.getAttribute(`data-tab-${o}-scale`);"string"==typeof A&&"string"==typeof a&&T(n,A,a),"string"==typeof g&&x(M,g)}function f(t){const e=t.parentElement,i=t.querySelector("g.outerContainer");for(const t in i.dataset)/^tab-\w+-.*/.test(t)&&e.removeAttribute(t)}function E(t){const e=b(t,this).createElement("div");return e.classList.add("red-ui-workspace-chart"),t?(t.appendChild(e),e):e}function v(t){const e=b(t,this);if(!e)return null;let i=t.querySelector(".toolbar");return i||(i=e.createElement("div"),i.classList.add("toolbar"),t&&t.appendChild(i),i)}function O(t,{addDefaultLayer:e=!0,layer:M=0}={}){const o=b(t,this),A=o.createElementNS("http://www.w3.org/2000/svg","svg");A.setAttribute("style",`width:${i}px; height:${n}px;`),t.appendChild(A);const a=o.createElementNS("http://www.w3.org/2000/svg","defs");A.appendChild(a);a.innerHTML='\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ';const g=k("g",{class:"outerContainer"});return A.appendChild(g),e&&Z(A,{layer:M}),A}function k(t,e,i){const n=b(i,this).createElementNS("http://www.w3.org/2000/svg",t);if("object"==typeof e)for(const t in e)n.setAttribute(t,e[t]);return i&&i.appendChild(n),n}function Z(t,{layer:e=0,opacity:i=1}={}){let n=t.querySelector("g.outerContainer");n||(n=k("g",{class:"outerContainer"},t)),n.querySelector("g.flow_grid")||k("g",{class:"flow_grid"},n);let M=n.querySelector(`g.flow-layer-${e}`);for(M||(M=k("g",{class:`flow-layer-${e||0}`},n));M.firstChild;)M.removeChild(M.firstChild);return M.setAttribute("opacity",i),k("g","flow_group_elements",M),k("g","flow_group_select",M),k("g","flow_wires",M),k("g","flow_nodes",M),M}function B(t){if(t.childNodes.length>0)return;k("rect",{width:`${i}px`,height:`${n}px`,fill:"url(#grid)"},t).style.transform="translate(-1px, -1px)"}function Y(t,e,i,n,M){const o=b(M,this).createElement(t);if("object"==typeof e)for(const t in e)o.setAttribute(t,e[t]);return i&&"string"==typeof i?o.classList.add(...i.split(" ")):Array.isArray(i)&&o.classList.add(...i),"string"==typeof n&&(o.textContent=n),M&&M.appendChild(o),o}function U(t){const e=[],i={},n=new Set([...Object.keys(t.changed),...Object.keys(t.added),...Object.keys(t.deleted),...Object.keys(t.moved),...Object.keys(t.positionChanged)]),M=t.currentConfig,o=t.newConfig;function A(e,i,n,M,o,A){const a={tab:e,item:i,diffType:n,prop:M,value1:o,value2:A,toString:()=>""},g=t=>t?`'${t}'`:"''",s=t=>t?g(function(t,e,i){const n=$[t.type]||$._default,M=e&&e[t.type]||{};return n(t,M,i)}(t)):"'n/a'",r=t.currentConfig.all[e]||t.newConfig.all[e],d=s(r),u=t.currentConfig.all[i]||t.newConfig.all[i],l="tab"===i?r:t.currentConfig.all[i],c="tab"===i?r:t.newConfig.all[i],I="tab"===i?"tab":"node",N=/wires\[\d+\]/.test(M);let j="";N&&(a.value1&&!a.value2?j=`had wire removed from ${s(l)}`:!a.value1&&a.value2&&(j=`was wired up to ${s(c)}`));const L=o&&("z"===M||/wires\[\d+\]/.test(M))?t.currentConfig.all[o]:null,D=A&&("z"===M||/wires\[\d+\]/.test(M))?t.newConfig.all[A]:null;return a.toString=function(){const t=[];switch(n){case"deleted":t.push("deleted",I,s(u));break;case"added":t.push("added",I,s(u));break;case"moved":t.push(s(u),"moved from ",s(L),"to",s(D));break;case"changed":"g"===M?o&&!A?t.push(d,s(u),"was removed from group",g(s(o))):!o&&A?t.push(d,s(u),"was added to group",g(s(A))):t.push(d,s(u),"moved group from",g(o),"to",g(A)):N?t.push(d,s(u),j):"tab"===i?t.push("tab",d,"property",g(a.prop),"was",g(a.value1||"")+", now",g(a.value2||"")):t.push(s(u),"property",g(a.prop),"was",g(a.value1||""),"now",g(a.value2||""));break;case"positionChanged":t.push(s(u),"moved from",a.value1,"to",a.value2);break;default:t.push(d,s(u),g(a.prop),"was",g(a.value1||""),"now",g(a.value2||""))}return t.join(" ")},a}function a(t,e){const i=t.currentConfig.all,M=t.newConfig.all,o=[];if(!e.v1||!e.v2)return e.v1&&o.push(A(e.id,e.id,"tab","deleted",e.v1,null)),e.v2&&o.push(A(e.id,e.id,"tab","added",null,e.v2)),o;const a=e.v1?.tab?{...e.v1.tab.n}:{};a.order=e.v1?.order;const s=e.v2?.tab?{...e.v2.tab.n}:{};s.order=e.v2?.order;const r=e.v1?.tab?.nodes||[],d=e.v2?.tab?.nodes||[];o.push(...g(e.id,"tab","","changed",a,s));const u=r.map(t=>t.id),l=d.map(t=>t.id),c=new Set([...u,...l].filter(t=>n.has(t))),I=t=>"number"!=typeof t?null:t,N=(t,e)=>{const i={...e};for(const e of t)delete i[e];return i};for(const n of c){const A=i[n],a=M[n],s=!(!A||!a);if(t.deleted[n])o.push(...g(e.id,n,"","deleted",A,a));else if(t.added[n])o.push(...g(e.id,n,"","added",A,a));else if(s){let i=!0;if(t.moved[n]&&o.push(...g(e.id,n,"","moved",{z:A.z},{z:a.z})),t.positionChanged[n]){i=!1;const t={x:I(A.x),y:I(A.y)},M={x:I(a.x),y:I(a.y)},s=JSON.stringify(t),r=JSON.stringify(M);o.push(...g(e.id,n,"position","positionChanged",s,r))}if(i){const t=N(["x","y","z","w","h"],A),i=N(["x","y","z","w","h"],a);o.push(...g(e.id,n,"","changed",t,i))}}}return o}function g(t,e,i,n,M,o){const a=[];if("deleted"===n)a.push(A(t,e,n,i,M?"":"deleted",o?"":"deleted"));else if("added"===n)a.push(A(t,e,n,i,M?"added":"",o?"added":""));else if(typeof M!=typeof o)a.push(A(t,e,"changed",i,M||"",o||""));else if(Array.isArray(M))for(let A=0;A{const e=`${"z"===t.prop&&"moved"===t.diffType?"*":t.tab}-${t.item}-${t.diffType}-${t.prop}-${t.value1}-${t.value2}`;return!s.has(e)&&(s.add(e),!0)})}()),{get changes(){return e},get diff(){return t},get tabs(){return i},getNodeInfo:t=>({propertiesChanged:e.filter(e=>e.itemId===t&&e.tab!==t),v1:M.all[t],v2:o.all[t]}),getTabInfo:t=>({propertiesChanged:e.filter(e=>e.tab===t&&"tab"===e.itemId),nodesChanged:e.filter(e=>e.tab===t&&"tab"!==e.itemId),v1:i[t],v2:i[t]})}}function Q(t){t&&t.length&&"string"!=typeof t&&"string"==typeof t[0]&&(t=[...t].join(" "));return`\n :root {\n --red-ui-view-grid-color: #eee;\n --red-ui-view-border: 1px solid #bbbbbb;\n --red-ui-node-border: #999;\n --red-ui-node-port-background: #d9d9d9;\n --red-ui-workspace-button-color: #333;\n --red-ui-workspace-button-background: #f3f3f3;\n\n --red-ui-primary-font: Helvetica Neue, Arial, Helvetica, sans-serif;\n --red-ui-primary-font-size: 14px;\n --red-ui-monospace-font: Menlo, Consolas, DejaVu Sans Mono, Courier, monospace;\n --red-ui-primary-background: #f3f3f3;\n\n --red-ui-form-background: #fff;\n --red-ui-form-placeholder-color: #aaa;\n --red-ui-form-text-color: #555;\n --red-ui-form-text-color-disabled: #bbb;\n --red-ui-form-input-focus-color: rgba(85, 150, 230, 0.8);\n --red-ui-form-input-border-color: #ccc;\n --red-ui-form-input-border-selected-color: #aaa;\n --red-ui-form-input-border-error-color: rgb(214, 97, 95);\n --red-ui-form-input-background: #fff;\n --red-ui-form-input-background-disabled: #f9f9f9;\n --red-ui-form-button-background: #efefef;\n\n --red-ui-diff-state-color: #555;\n --red-ui-diff-state-prefix-color: #888;\n --red-ui-diff-state-added: #009900;\n --red-ui-diff-state-deleted: #f80000;\n --red-ui-diff-state-changed: #f89406;\n --red-ui-diff-state-moved: #3f81b3;\n }\n ${t=(t=t||".flow-renderer").split(" ").map(t=>`.${t}`).join(" ").trim()} .diff-table {\n width: 100%;\n font-size: var(--red-ui-primary-font-size);\n font-family: var(--red-ui-primary-font);\n }\n ${t} .diff-table thead tr {\n font-weight: bold;\n padding: 2px 4px;\n /* bottom border only */\n border-bottom: 3px solid #ddd;\n }\n ${t} .diff-table td {\n padding: 2px 4px;\n border-bottom: 1px solid #ddd;\n }\n ${t} .diff-table .diff-info {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n ${t} .diff-value button {\n height: 20px;\n width: 20px;\n padding: 1px;\n }\n ${t} .diff-value span {\n margin-left: 4px;\n margin-top: 2px;\n }\n ${t} .diff-type {\n height: 14px;\n width: 14px;\n margin: 2px;\n }\n ${t} .diff-type-text {\n flex-grow: 1;\n }\n ${t} .diff-type-moved {\n background-color: var(--red-ui-diff-state-moved);\n }\n ${t} .diff-type-added {\n background-color: var(--red-ui-diff-state-added);\n }\n ${t} .diff-type-deleted {\n background-color: var(--red-ui-diff-state-deleted);\n }\n ${t} .diff-type-changed {\n background-color: var(--red-ui-diff-state-changed);\n }\n ${t} .diff-type-positionChanged {\n background-color: var(--red-ui-diff-state-changed);\n }\n\n .red-ui-editor {\n font-size: var(--red-ui-primary-font-size);\n font-family: var(--red-ui-primary-font);\n padding: 0;\n margin: 0;\n background: var(--red-ui-primary-background);\n color: var(--red-ui-primary-text-color);\n line-height: 20px\n }\n ${t} {\n position: relative;\n }\n /* Source view */\n ${t} pre.red-ui-workspace-source {\n height: 100%;\n overflow: auto;\n width: 100%;\n font-family: var(--red-ui-monospace-font);\n background-color: #f7f7f7;\n }\n /* Chart view */\n ${t} .red-ui-workspace-chart {\n box-sizing: border-box;\n border: var(--red-ui-view-border);\n overflow: scroll;\n height: 100%;\n width: 100%;\n }\n ${t} div.red-ui-footer {\n height: 20px\n }\n ${t}.has-tabs div.red-ui-workspace-chart {\n height: calc(100% - 34px);\n }\n ${t} svg {\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 250px;\n margin: auto;\n display: block;\n border-radius: 2px;\n }\n ${t} svg {\n cursor: default;\n }\n ${t} svg .group-text-label {\n font-family: Helvetica Neue, Arial, Helvetica, sans-serif;\n font-size: 14px;\n }\n ${t} svg .node-text-label {\n font-family: Helvetica Neue, Arial, Helvetica, sans-serif;\n font-size: 14px;\n dominant-baseline: middle;\n }\n ${t} svg .subflow-node-text-label {\n color: rgb(85, 85, 85);\n dominant-baseline: middle;\n font-family: Helvetica Neue, Arial, Helvetica, sans-serif;\n font-size: 10px;\n line-height: 20px;\n pointer-events: none;\n text-anchor: middle;\n user-select: none\n }\n ${t} svg .subflow-node-text-label-number {\n color: rgb(85, 85, 85);\n dominant-baseline: middle;\n font-family: Helvetica Neue, Arial, Helvetica, sans-serif;\n font-size: 16px;\n line-height: 20px;\n pointer-events: none;\n text-anchor: middle;\n user-select: none\n }\n\n ${t} svg .node {\n fill-opacity: 1;\n stroke-width: 1px;\n }\n ${t} svg .link {\n stroke: #999;\n stroke-width: 3;\n fill: none;\n }\n ${t} svg .link-highlight, .node-highlight {\n stroke: rgb(255, 127, 14);\n }\n ${t} svg .node-highlight {\n stroke-width: 3px;\n }\n ${t} .tab-glow {\n border-radius: 2px;\n animation: tab-glow-animation 1s infinite;\n }\n @keyframes tab-glow-animation {\n 0% {\n box-shadow: 0 0 0px 0px #7d26cddd;\n }\n 50% {\n box-shadow: 0 0 10px 5px #7d26cddd;\n }\n 100% {\n box-shadow: 0 0 0px 0px #7d26cddd;\n }\n }\n\n ${t} svg .node-disabled {\n stroke-dasharray: 8,3;\n fill-opacity: 0.5;\n }\n ${t} svg .group-highlight {\n stroke: rgb(255, 127, 14);\n stroke-width: 4px;\n fill: rgb(255, 127, 14);\n fill-opacity: 0.2;\n }\n ${t} svg .link-disabled {\n stroke-dasharray: 10,8 !important;\n stroke-width: 2 !important;\n stroke: rgb(204, 204, 204);\n }\n ${t} svg .grid-line {\n shape-rendering: geometricprecision;\n stroke: rgb(238, 238, 238);\n stroke-width: 1px;\n fill: none;\n }\n ${t} svg .red-ui-flow-port {\n stroke-width: 1px;\n stroke-miterlimit: 4;\n fill: var(--red-ui-node-port-background);\n }\n ${t} svg .red-ui-flow-port-input {\n stroke-width: 1px;\n stroke-miterlimit: 4;\n fill: var(--red-ui-node-port-background);\n }\n ${t} svg .flow-render-error {\n background-color: rgb(54, 52, 52); \n color: rgb(196, 59, 59); \n width: 100%;\n }\n ${t} svg text {\n user-select: none;\n }\n ${t} .red-ui-tabs {\n display: flex;\n }\n ${t} .red-ui-tab {\n padding: 6px 12px;\n box-sizing: border-box;\n display: block;\n border: 1px solid #bbbbbb;\n border-right: none;\n background-color: #f0f0f0;\n max-width: 200px;\n max-height: 34px; /* for calculating svg height */\n height: 34px; /* for calculating svg height */\n width: 14%;\n overflow: hidden;\n white-space: nowrap;\n position: relative;\n margin-top: -1px;\n transition: 0.2s background-color;\n user-select: none;\n position: relative;\n z-index: 1;\n top: 1px;\n }\n ${t} .red-ui-tab div.red-ui-tab-label {\n position: absolute;\n top: 7px;\n left: 10px;\n }\n ${t} .red-ui-tab-subflow-icon {\n mask-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNjAiIHZpZXdCb3g9IjAsIDAsIDQwLCA2MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjUgMjUuOTRoN2MuNTggMCAxLS40MiAxLTF2LTJjMC0uNTgtLjQyLTEtMS0xaC03Yy0uNTggMC0xIC40Mi0xIDF2MmMwIC41OC40MiAxIDEgMXptLTE3IDEyaDdjLjU4IDAgMS0uNDIgMS0xdi0yYzAtLjU4LS40Mi0xLTEtMUg4Yy0uNTggMC0xIC40Mi0xIDF2MmMwIC41OC40MiAxIDEgMXptLS40MTYgMTFDNS42MjQgNDguOTQgNCA0Ny4zMTUgNCA0NS4zNTZWMTQuNTIyYzAtMS45NiAxLjYyNS0zLjU4MiAzLjU4NC0zLjU4MmgyNC44MzJjMS45NiAwIDMuNTg0IDEuNjIzIDMuNTg0IDMuNTgydjMwLjgzNGMwIDEuOTYtMS42MjUgMy41ODQtMy41ODQgMy41ODR6TTMyIDM2Ljk0SDE5YzAgMi4xOS0xLjgxIDQtNCA0SDd2NC40MTZjMCAuMzUuMjM1LjU4NC41ODQuNTg0aDI0LjgzMmMuMzUgMCAuNTg0LS4yMzUuNTg0LS41ODR2LTguNDE3em0xLTJ2LTZoLThjLTIuMTkgMC00LTEuODEtNC00aC0xYy00LjMzMy0uMDAyLTguNjY3LjAwNC0xMyAwdjZoOGMyLjE5IDAgNCAxLjgxIDQgNGgxM3ptMC0xNnYtNC40MThjMC0uMzUtLjIzNS0uNTgyLS41ODQtLjU4Mkg3LjU4NGMtLjM1IDAtLjU4NC4yMzMtLjU4NC41ODJ2OC40MTdjNC4zMzMuMDAyIDguNjY3LjAwMSAxMyAuMDAxaDFjMC0yLjE5IDEuODEtNCA0LTRoOHoiIGNvbG9yPSIjMDAwIiBmaWxsPSIjZmZmIi8+PC9zdmc+Cg==);\n display: inline-block;\n background-color: grey;\n margin-left: -8px;\n margin-right: 3px;\n margin-top: -1px;\n margin-bottom: 1px;\n opacity: 1;\n width: 16px;\n height: 18px;\n vertical-align: middle;\n mask-size: contain;\n mask-position: center;\n mask-repeat: no-repeat;\n }\n ${t} .red-ui-tab-disabled-icon {\n mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1536 1792' style='&%2310;'%3E%3Cscript xmlns=''/%3E%3Cpath d='M1312 893q0-161-87-295l-754 753q137 89 297 89 111 0 211.5-43.5t173.5-116.5 116-174.5 43-212.5zM313 1192l755-754q-135-91-300-91-148 0-273 73t-198 199-73 274q0 162 89 299zM1536 893q0 157-61 300t-163.5 246-245 164-298.5 61-298.5-61-245-164-163.5-246-61-300 61-299.5 163.5-245.5 245-164 298.5-61 298.5 61 245 164 163.5 245.5 61 299.5z' fill='currentColor'/%3E%3Cscript xmlns=''/%3E%3C/svg%3E");\n display: inline-block;\n background-color: grey;\n margin-left: -8px;\n margin-right: 3px;\n margin-top: 0px;\n margin-bottom: 0px;\n opacity: 1;\n width: 16px;\n height: 16px;\n vertical-align: middle;\n mask-size: contain;\n mask-position: center;\n mask-repeat: no-repeat;\n transform: translateY(-2px);\n }\n ${t} .red-ui-tab span {\n font-size: 0.875rem;\n font-family: Helvetica Neue, Arial, Helvetica, sans-serif;\n }\n ${t} .red-ui-tab.active {\n background-color: white;\n border-bottom-color: white;\n font-weight: bold;\n }\n ${t} .red-ui-tab.disabled {\n border-top-style: dashed;\n border-left-style: dashed;\n font-style: italic;\n }\n ${t} .red-ui-tab:last-child {\n border-right: 1px solid #bbbbbb;\n }\n ${t} .red-ui-tab:last-child.disabled {\n border-right-style: dashed;\n }\n ${t} .red-ui-tab:hover {\n cursor: pointer;\n background-color: white;\n }\n /* positioning of toolbar */\n ${t} .toolbar {\n display: flex;\n flex-direction: row;\n position: absolute;\n bottom: 5px;\n right: 5px;\n opacity: 0.6;\n }\n ${t} .toolbar:hover {\n opacity: 1;\n }\n ${t}.has-scrollbars .toolbar {\n bottom: 24px;\n right: 24px;\n }\n\n ${t} .hidden {\n display: none !important;\n }\n ${t} .toolbar .button-group.hidden {\n display: none !important;\n }\n ${t} .toolbar .icon-button-bg.view-source {\n background-image: url("${I}");\n }\n ${t} .toolbar .icon-button-bg.download-flow {\n background-image: url("${c}");\n }\n ${t} .toolbar .icon-button-bg.copy-flow {\n background-image: url("${l}");\n }\n ${t} .toolbar .icon-button-bg.zoom-reset {\n background-image: url("${u}");\n }\n ${t} .toolbar .icon-button-bg {\n background-repeat: no-repeat;\n background-position: center;\n background-size: 16px 16px; /* Size of the background SVG */\n background-color: transparent;\n padding: 4px;\n cursor: pointer;\n width: 24px;\n height: 24px;\n font-size: 0; /* Hide any default button text if present */\n line-height: 0; /* Hide any default button text if present */\n }\n\n ${t} .toolbar .icon-button-bg:hover {\n background-color: #f0f0f0;\n }\n\n /* styles for button groups and buttons */\n ${t} .button-group {\n display: flex;\n flex-direction: row;\n }\n ${t} .button-group button {\n user-select: none;\n box-sizing: border-box;\n display: inline-block;\n text-align: center;\n cursor: pointer;\n line-height: 22px;\n height: 24px;\n color: var(--red-ui-workspace-button-color) !important;\n background: var(--red-ui-workspace-button-background);\n text-decoration: none;\n border: 1px solid var(--red-ui-form-input-border-color);\n margin: 0px;\n padding: 0px;\n }\n ${t} .button-group button:not(:first-child) {\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n border-left: none;\n }\n\n /* zoom controls */\n ${t} .zoom-controls.button-group button {\n font-size: 22px;\n width: 24px;\n }\n\n /* copy controls */\n ${t} .copy-controls.button-group {\n margin-right: 8px;\n }\n ${t} .copy-controls.button-group button {\n padding: 0px 4px;\n }\n\n /* source controls */\n ${t} .source-controls.button-group {\n margin-right: 8px;\n }\n ${t} .source-controls.button-group button {\n padding: 0px 4px;\n }\n\n /* compare controls */\n ${t} .compare-controls.button-group {\n margin-right: 24px;\n }\n ${t} .compare-controls input[type='range'].flow-compare-slider {\n width: 100%;\n -webkit-appearance: none;\n }\n ${t} input[type='range'].flow-compare-slider::-webkit-slider-runnable-track {\n height: 16px;\n background: var(--red-ui-workspace-button-background);\n border-radius: 16px;\n }\n /* Track: Mozilla Firefox */\n ${t} input[type='range'].flow-compare-slider::-moz-range-track {\n height: 16px;\n background: var(--red-ui-workspace-button-background);\n border-radius: 16px;\n }\n `}function G(t,e){const i="flow-renderer-css"+(e?"--"+e.toString():"").replace(/[^a-z0-9]/gi,"-").toLowerCase();let n=t.getElementById(i);n||(n=t.createElement("style"),n.id=i,n.innerHTML=Q(e),t.head.appendChild(n))}function H(t,e){if(t){const i=t.querySelector(`.flow-layer-${e||0}`);["flow_group_elements","flow_group_select","flow_wires","flow_nodes"].forEach(t=>{const e=i.querySelector(`.${t}`)||k("g",{class:t},i);for(;e.firstChild;)e.removeChild(e.firstChild)})}}function W(t){const e=[],i={},n={},M=[],o={};return t.forEach(function(t){o[t.id]=t,"tab"===t.type?(e.push(t.id),i[t.id]={n:t,nodes:[]}):"subflow"===t.type&&(n[t.id]={n:t,nodes:[]})}),t.forEach(function(t){"tab"!==t.type&&"subflow"!==t.type&&(i[t.z]?i[t.z].nodes.push(t):n[t.z]?n[t.z].nodes.push(t):M.push(t))}),{all:o,tabOrder:e,tabs:i,subflows:n,globals:M}}function P(t,i,n,M,o,A=!1){const a=M-i,g=n-t,s=Math.sqrt(a*a+g*g);let r=.75;if(g*o>0?s0){const A=[[t+o*(e*r),i+0],[n-o*r*e,M-0]];return`M ${t} ${i} C ${A[0][0]} ${A[0][1]} ${A[1][0]} ${A[1][1]} ${n} ${M}`}{let s,d,u,l,c;const I=Math.floor(n-g/2),N=Math.floor(M-a/2);if(Math.abs(a)<10){l=Math.max(i,M)+(A?35:25);const e=l-i;return c=[[t+15*o,i],[t+25*o,i+5],[t+25*o,i+e/2],[t+25*o,i+e-5],[t+15*o,i+e],[t,i+e],[n-15*o,i+e],[n-25*o,i+e-5],[n-25*o,M+(l-M)/2],[n-25*o,M+5],[n-15*o,M],[n,M]],"M "+t+" "+i+" C "+c[0][0]+" "+c[0][1]+" "+c[1][0]+" "+c[1][1]+" "+c[2][0]+" "+c[2][1]+" C "+c[3][0]+" "+c[3][1]+" "+c[4][0]+" "+c[4][1]+" "+c[5][0]+" "+c[5][1]+" h "+g+" C "+c[6][0]+" "+c[6][1]+" "+c[7][0]+" "+c[7][1]+" "+c[8][0]+" "+c[8][1]+" C "+c[9][0]+" "+c[9][1]+" "+c[10][0]+" "+c[10][1]+" "+c[11][0]+" "+c[11][1]+" "}{const A=15,g=(M+N)/2;s=t+o*e*r,d=a>0?Math.min(g-a/2,i+A):Math.max(g-a/2,i-A),u=n-o*e*r,l=a>0?Math.max(g,M-A):Math.min(g,M+A);const j=(t+s)/2,L=a>0?1:-1;return c=[[j,i],[s,a>0?Math.max(i,d-A):Math.min(i,d+A)],[j,a>0?Math.min(N,d+A):Math.max(N,d-A)],[u,a>0?Math.max(N,l-A):Math.min(N,l+A)],[(n+u)/2,M]],c[2][1]===d+L*A&&(Math.abs(a)<10*A&&(c[1][1]=d-L*A/2,c[3][1]=l-L*A/2),c[2][0]=s),"M "+t+" "+i+" C "+c[0][0]+" "+c[0][1]+" "+c[1][0]+" "+c[1][1]+" "+s+" "+d+" S "+c[2][0]+" "+c[2][1]+" "+I+" "+N+" S "+c[3][0]+" "+c[3][1]+" "+u+" "+l+" S "+c[4][0]+" "+c[4][1]+" "+n+" "+M}}}function R(t,e){const i=function(t){let e=[];const i=t.split(/\\n /);if(i.length>1){let t=0;for(t=0;t{switch(t){case"str":return"string";case"num":return"number";case"bool":return"boolean";case"json":return"json";case"date":return"timestamp";case"bin":return"binary";case"env":return"environment";case"flow":return"flow";case"global":return"global";default:return t}},q=["inject","change","switch","function","template","delay","trigger","link in","link out","link call","watch","complete","catch","status","comment","debug","subflow","range","filter","rbe","mqtt in","mqtt out","http in","http response","http request","websocket in","websocket out","tcp in","tcp out","udp in","udp out","tcp request","split","join","sort","batch","csv","json","xml","yaml","html","file in","file","exec"],K=(t,e,i)=>{const n=t.name||e.name;if(n)return n;const M=t.label||t.info||t.text||"";let o="",A="",a="",g="";switch(t.type){case"file":a="write file";case"file in":return a=a||"read file",A=t.filename,"str"!==t.filenameType&&"env"!==t.filenameType&&(A=""),"env"===t.filenameType&&(A="env."+A),"write file"===a&&"delete"===t.overwriteFile?t.name||"delete "+A:t.name||A||a;case"html":o=t.tag;break;case"tcp in":case"tcp out":case"tcp request":a="tcp:";case"udp in":case"udp out":return a=a||"udp:",A=t.host||t.addr||t.server||"",a+(A?A+":":"")+(t.port||"");case"debug":return!0!==t.console&&"true"!==t.console||(g="\t⇲"),"jsonata"===t.targetType?(t.name||"JSONata")+g:!0===t.complete||"true"===t.complete?(t.name||"msg")+g:(t.name||"msg."+(t.complete&&"false"!==t.complete?this.complete:"payload"))+g}return t.type&&t.type.startsWith("ui-")?o=t.type.replace(/^ui-/,""):t.type&&t.type.startsWith("ui_")&&(o=t.type.replace(/^ui_/,"")),o&&o.length<=32?o:M||(t.topic&&t.topic.length<=32&&q.includes(t.type)?t.topic:t.type)},_=(t,e,i)=>(t.name||t.label||t.info||t.text||"").replace(/(.{40,60})([ \n\t])/g,"$1\\n$2")+(t.sumPass?" ⭄":"")+(t.sumPassPrio&&0!=parseInt(t.sumPassPrio)?" ("+t.sumPassPrio+")":""),$={base64:void 0,batch:void 0,catch:(t,e,i)=>{let n="";return t.uncaught&&(n=": uncaught"),t.scope&&(n=": "+t.scope.length),t.scope||t.uncaught||(n=": all"),t.name||t.type+n},change:t=>{function e(t,e){return t+"."+o.utils.parseContextKey(e).key}return t.name?t.name:(t._=t._||function(t,e){let i=t;switch(t){case"change.label.set":i="set {{property}}";break;case"change.label.change":i="change {{property}}";break;case"change.label.move":i="move {{property}}";break;case"change.label.delete":i="delete {{property}}";break;case"change.label.changeCount":i="change {{count}} properties"}for(const n in e)t=i.replace(new RegExp("\\{\\{"+n+"\\}\\}","g"),e[n]);return t},t.rules?1===t.rules.length?"set"===t.rules[0].t?t._("change.label.set",{property:e(t.rules[0].pt||"msg",t.rules[0].p)}):"change"===t.rules[0].t?t._("change.label.change",{property:e(t.rules[0].pt||"msg",t.rules[0].p)}):"move"===t.rules[0].t?t._("change.label.move",{property:e(t.rules[0].pt||"msg",t.rules[0].p)}):t._("change.label.delete",{property:e(t.rules[0].pt||"msg",t.rules[0].p)}):t._("change.label.changeCount",{count:t.rules.length}):"replace"===t.action?t._("change.label.set",{property:"msg."+t.property}):"change"===t.action?t._("change.label.change",{property:"msg."+t.property}):"move"===t.action?t._("change.label.move",{property:"msg."+t.property}):t._("change.label.delete",{property:"msg."+t.property}))},comment:void 0,csv:void 0,debug:void 0,exec:void 0,file:void 0,"file in":void 0,function:void 0,html:void 0,"http response":(t,e,i)=>t.name||"http"+(t.statusCode?" ("+t.statusCode+")":""),"http in":(t,e,i)=>t.name||"["+t.method+"] "+t.url,"http request":void 0,inject:t=>{let e="";if(t.once&&(e=" ¹"),(t.repeat&&0!=t.repeat||t.crontab)&&(e="\t↻"),t.name)return t.name+e;let i="",n="str",M="";const A=t.props;if(A)for(let e=0;e0&&i.length<24?i+e:"inject"+e;if("date"===n||"bin"===n||"env"===n)return""!==M&&M.length<=16?M+":"+X(n)+e:X(n)+e;if("flow"===n||"global"===n){return n+"."+o.utils.parseContextKey(i).key+e}return"inject"+e},join:void 0,json:void 0,junction:void 0,"link in":void 0,"link out":void 0,"link call":(t,e,i)=>{if(!t.links||0===t.links.length)return t.name||t.type;let n;return i.forEach(function(M){n||M.id===t.links[0]&&(n=($[M.type]||K)(M,e,i))}),t.name||n||t.type},markdown:void 0,postgresql:void 0,range:void 0,sort:void 0,split:void 0,switch:void 0,yaml:void 0,xml:void 0,BlogPages:void 0,BlogDetails:void 0,BlogPageInfo:(t,e,i)=>{if(t.name)return t.name;let n;return i.forEach(function(e){n||"link in"===e.type&&e.name.startsWith("[blog] ")&&(e.wires[0]||[]).indexOf(t.id)>-1&&(n=e.name.substring(7))}),n||t.type},PubMedium:void 0,Topic:_,Observation:_,Question:_,Thought:_,Idea:_,Analogy:_,Aphorism:_,Poesie:_,Humour:_,Treasure:_,Consequence:_,Advantage:_,Disadvantage:_,Text:_,"Blog-Post":_,Comment:_,Codebase:_,Sketch:_,Inspiration:_,Quote:_,Definition:_,Book:_,Author:_,"nnb-input-node":void 0,"nnb-layer-node":(t,e,i)=>t.name||t.actfunct+": "+t.bias+", "+t.threshold,"nnb-output-node":void 0,"nnb-backprop":void 0,"nnb-trainer":void 0,Seeker:void 0,Sink:void 0,Screenshot:void 0,Orphans:void 0,IsMobile:void 0,Navigator:void 0,DrawSVG:void 0,GetFlows:void 0,_default:K};function tt(t){const e={};let i=1e4,n=0;for(const M of t)"subflow"===M.type?e[M.id]={id:M.id,label:M.name,type:"subflow",disabled:M.disabled,order:i++}:"tab"!==M.type&&M.z&&(e[M.z]||(e[M.z]={id:M.z,label:"Flow "+(n+1),type:"tab",disabled:!1,order:n++}));const M=t.filter(t=>"tab"===t.type);let o=0;for(const t of M)e[t.id]&&(e[t.id].label=t.label||e[t.id].label,e[t.id].disabled=!!t.disabled,e[t.id].order=o++);const A=Object.keys(e).map(t=>e[t]);return A.sort((t,e)=>t.order-e.order),A}function et(t){Array.isArray(t)||(t=[]);const e=[...t];for(let t=0;t0?i.add(...n):e?.classList?.length&&i.add(...e.classList),0===i.size&&i.add("flow-renderer"),[...i]}(t)),t.container){const i={};["scope","gridLines","arrows","zoom","images","linkLines","labels","autoZoom","autoScroll","flowId"].forEach(function(e){if("string"==typeof t.container.dataset[e]){const n=t.container.dataset[e]||"true";i[e.replace(/-/g,"")]="true"===n}}),e.push(i)}e.push(t)}return Object.assign({},...e)}function nt(e,i){e=et(e);const n=b((i=it(i)).document,t.document,i.container,this),M=i.container;for(;M.firstChild;)M.removeChild(M.firstChild);const o=n.createElement("div");o.classList.add("red-ui-tabs"),M.appendChild(o);const A=E(M);!function(t,e,i=!0){const n=b(t,this),M=n.createElement("pre");M.classList.add("red-ui-workspace-source"),i&&M.classList.add("hidden"),M.setAttribute("data-code-wrap","json");const o=n.createElement("code");o.classList.add("lang-json","hljs","language-json"),o.textContent="object"==typeof e?JSON.stringify(e,null,2):"string"==typeof e?e:"// No content available",M.appendChild(o),t&&t.appendChild(M)}(M,e);const a=function(t){const e=b(t,this);if(!e)return null;let i=t.querySelector(".toolbar");i||(i=v(t));let n=i.querySelector(".source-controls");if(n)return{viewSource:i.querySelector(".view-source")};n=e.createElement("div"),n.classList.add("source-controls"),n.classList.add("button-group");const M=e.createElement("button");return M.classList.add("red-ui-footer-button","icon-button-bg","view-source"),M.title="Toggle Flows / Source",n.appendChild(M),i.appendChild(n),{viewSource:M}}(M);a.viewSource.onclick=function(t){!function(t){t.preventDefault(),t.stopPropagation();const e=t.target.parentElement.parentElement.parentElement.querySelector(".red-ui-workspace-chart");if(!e)return void console.warn("No container found for source view toggle");const i=e.parentElement,n=i.querySelector(".red-ui-tabs"),M=i.querySelector(".red-ui-workspace-source"),o=i.querySelector(".zoom-controls");M&&M.classList.contains("hidden")?(M.classList.remove("hidden"),e.classList.add("hidden"),n.classList.add("hidden"),o?.classList.add("hidden")):(M.classList.add("hidden"),e.classList.remove("hidden"),n.classList.remove("hidden"),o?.classList.remove("hidden"))}(t)};const g=function(t){const e=b(t,this);if(!e)return null;let i=t.querySelector(".toolbar");i||(i=v(t));let n=i.querySelector(".copy-controls");if(n)return{copy:i.querySelector(".copy-flow"),download:i.querySelector(".download-flow")};n=e.createElement("div"),n.classList.add("copy-controls"),n.classList.add("button-group");const M=e.createElement("button");M.classList.add("red-ui-footer-button","icon-button-bg","copy-flow"),M.title="Copy Flow to Clipboard";const o=e.createElement("button");return o.classList.add("red-ui-footer-button","icon-button-bg","download-flow"),o.title="Download Flows",n.appendChild(M),n.appendChild(o),i&&i.appendChild(n),{copy:M,download:o}}(M);g.copy.onclick=function(t){!function(t,e,i){i=i||function(){};let n=e||[];"object"==typeof n?n=JSON.stringify(n,null,0):"string"!=typeof n&&(n=n.toString());const M=b(t&&t.target&&t.target.ownerDocument,this);if("undefined"!=typeof navigator&&navigator.clipboard)return void navigator.clipboard.writeText(n).then(function(){i(null,!0)}).catch(function(t){i(t,!1)});const o=M.createElement("textarea");o.value=n,o.style.position="fixed",o.style.top="0",o.style.left="0";try{M.body.appendChild(o),o.focus(),o.select();const t=M.execCommand("copy");i(null,t),console.info("failed to copy",t)}catch(t){console.error("failed to copy",t)}finally{M.body.removeChild(o)}}(t,e)},g.download.onclick=function(t){!function(t,e,i,n,M){M=M||function(){};let o=e||[];"object"==typeof o?o=JSON.stringify(o,null,2):"string"!=typeof o&&(o=o.toString());const A=b(t&&t.target&&t.target.ownerDocument,this),a=new Blob([o],{type:i}),g=URL.createObjectURL(a),s=A.createElement("a");s.style.display="none",s.href=g,s.download=n,s.style.position="fixed",s.style.top="0",s.style.left="0";try{A.body.appendChild(s),s.focus(),s.click(t),URL.revokeObjectURL(g),M(null,!0)}catch(t){M(t,!1),console.error("failed to download",t)}finally{A.body.removeChild(s)}}(t,e,"application/json","flows.json")};const s=O(A);H(s),f(s),M.classList.add(i.scope);const r=function(t){o.querySelectorAll(".red-ui-tab").forEach(t=>t.classList.remove("active"));return o.querySelector(`[data-flow-id="${t}"]`).classList.add("active"),i.flowId=t,Mt(e,i)};G(n,i.scope);const d=M.querySelectorAll(".red-ui-tab");d&&d.forEach(t=>t.remove());const u=tt(e);if(u.forEach((e,n)=>{!function(e,i,n,M,o){const A=`red-ui-tab-${n}`,a=M.container,g=M.svg||a.querySelector("svg"),s=b(M.document,t.document,a,this),r=i.label;let d=a.querySelector(`.${A}`);if(d||(d=s.createElement("div"),e.appendChild(d),d.classList.add("red-ui-tab"),d.classList.add("red-ui-tab-"+i.type),d.setAttribute("data-flow-id",i.id)),i.disabled){d.classList.add("disabled");const t=s.createElement("i");t.classList.add("red-ui-tab-disabled-icon"),d.appendChild(t)}else if("subflow"===i.type){const t=s.createElement("i");t.classList.add("red-ui-tab-subflow-icon"),d.appendChild(t)}d.title=r;const u=s.createElement("span");u.textContent=r,d.appendChild(u),d.onclick=function(t){z(g,M,M.flowId),o(i.id),h(g,M,i.id)}}(o,e,n,i,r)}),u.length?M.classList.add("has-tabs"):M.classList.remove("has-tabs"),!i.flowId){const t=u.find(t=>"tab"===t.type),e=u.find(t=>"subflow"===t.type);i.flowId=t?t.id:e?e.id:null}let l=null;return l=u.length?r(i.flowId):Mt(e,i),z(s,i,i.flowId),l=l||{},l.tabs=u,l.flowId=i.flowId,l.css=l.css||Q(i.scope),l}function Mt(t,i){t=et(t);const n=(i=it(i)).container,A={},s={},u={},l={},c={},I=(i=i||{}).flowId,N=L("junction");let j=!1;const y=tt(t).find(t=>t.id===I);y&&"tab"===y.type&&(j=y.disabled);let b=n&&n.querySelector("svg");b=b||O(n),H(b,i.layer);const w=(i.svgLayer||b).querySelector(".flow_grid");i.gridLines&&w&&B(w),t.forEach(function(t){if("subflow"===t.type){s["subflow:"+t.id]=t;for(let e=0;e0&&t.wires.forEach(function(t){t.forEach(function(t){c[t]=!0})})});const C=(i.svgLayer||b).querySelector(".flow_nodes");t.forEach(function(n){if(n.z===I||n.id===I){const I=D(n),y=function(t){let e=!0;return"link out"!==t.type&&"link in"!==t.type||(e=!1),"junction"===t.type||"tab"===t.type||"subflow"===t.type||(!1===t.l?e=!1:!0===t.l&&(e=!0)),e}(n),b=!i.labels,w=L(n.type);switch(n.type){case"tab":case"ui_spacer":case"ui-spacer":break;case"group":u[n.id]=n;break;case"subflow":l[n.id]={...n};for(let t=0;t1?18:16)+")"});let t=0;l.lines.forEach(function(e){const i=k("text",{y:t,class:"node-text-label"});i.textContent=e,L.appendChild(i),t+=20})}const D=k("g",{"data-node-id":n.id,class:"node"});C.appendChild(D),y&&L&&D.appendChild(L);const p=y?L?.getBBox():{width:0,height:0},m=p.width,x=p.height+13.5,T=y?I.width>m?I.width:m:I.width,S=y?I.height>x?I.height:x:I.height,z={x:n.x,y:n.y,w:T,h:S,outputs:(n.wires||[]).length},h=!!c[n.id];try{y?(z.w=Math.max(e,20*Math.ceil((l.width+48+(h?7:0))/20)),z.h=Math.max(6+24*l.lines.length,15*(z.outputs||0),30)):(z.w=30,z.h=Math.max(30,15*(z.outputs||0)))}catch(t){}if(z.outputs>2&&y&&L&&z.h>x){const t=(z.h-x)/2;L.setAttributeNS(null,"transform","translate(38,"+((l.lines.length>1?16:14)+t)+")")}b&&L&&(L.style.display="none"),D.prepend(k("rect",{...w,rx:5,ry:5,fill:u.color||w.fill,width:z.w,height:z.h,class:"node node-"+n.id})),D.appendChild(k("path",{d:"M5 0 h25 v"+z.h+" h-25 a 5 5 0 0 1 -5 -5 v-"+(z.h-10)+" a 5 5 0 0 1 5 -5",fill:"rgb(0,0,0)","fill-opacity":.05,stroke:"none"})),y&&D.appendChild(k("path",{d:"M 29.5 0.5 l 0 "+(z.h-1),fill:"none",stroke:"rgb(0,0,0)","stroke-opacity":.1,"stroke-width":"1px"}));const f=o.view.tools.calculateGridSnapOffsets(z),E=n.x-z.w/2-f.x,v=n.y-z.h/2-f.y;if(D.setAttribute("transform",`translate(${E}, ${v})`),n.bbox=D.getBBox(),n.bbox.x=E,n.bbox.y=v,i.images){const t={x:0,y:Math.max(z.h/2-15,0),width:30,height:30},e=function(t){let e=r[t];return e||(t.startsWith("subflow:")?e=r.subflow:t.startsWith("ui-")?e=r["ui-template"]:t.startsWith("ui_")&&(e=r.ui_template)),e&&d[e]||""}(n.type);if(e)D.appendChild(k("image",{href:e,...t}));else if(n.type.startsWith("subflow:")){const e=u.icon&&d[u.icon]||d["subflow.svg"];D.appendChild(k("image",{href:e,...t}))}}(u.in&&u.in.length>0||c[n.id])&&(i.arrows?D.appendChild(k("path",{...N,transform:"translate(-3,"+(n.bbox.height/2-5)+")",d:i.arrows?"M 0,10 9,5 0,0 Z":"M -1,9.5 8,9.5 8,0.5 -1,0.5 Z",class:"red-ui-flow-port-input input-arrows","stroke-linecap":"round","stroke-linejoin":"round"})):D.appendChild(k("rect",{...N,transform:"translate(-5,"+(n.bbox.height/2-5)+")",...a,...g,class:"red-ui-flow-port-input"})));const O={...N,...a,...g,class:"red-ui-flow-port"};if(n.wires&&Array.isArray(n.wires)){const t=1===n.wires.length?n.bbox.height/2-5:n.wires.length%2==0?3.5:4.5;for(let e=0;e0;){h-=1;for(const t in u){if(T.indexOf(t)>-1)continue;const e=u[t];let i=0,n=0,M=!1;if(e.nodes.forEach(function(t){const o=(A[t]||{}).bbox;o?(i=Math.max(i,o.x-e.x+o.width),n=Math.max(n,o.y-e.y+o.height)):M=!0}),M)continue;const o=k("g",{"data-node-id":t});o.setAttribute("transform",`translate(${e.x}, ${e.y})`),o.appendChild(k("rect",{rx:5,ry:5,width:e.w,height:e.h,fill:"none","fill-opacity":0,"stroke-width":2,stroke:"grey",class:"group-"+e.id,...e.style})),x.prepend(o);const a=A[t];a.bbox=o.getBBox(),a.bbox.x=e.x,a.bbox.y=e.y;const g=k("g",{});if(o.appendChild(g),e.style.label&&e.name){const t=e.style["label-position"]||"nw",i=R(e.name,"group-text-label");let n=0,M=0,o="start";if(M="n"===t[0]?15:a.bbox.height-5-16*(i.lines.length-1),"w"===t[1]?(n=5,o="start"):"e"===t[1]?(n=a.bbox.width-5,o="end"):(n=a.bbox.width/2,o="middle"),g.setAttribute("transform",`translate(${n}, ${M})`),g.setAttribute("text-anchor",o),i){let t=0;i.lines.forEach(function(i){const n=k("text",{class:"group-text-label",x:0,y:t,fill:e.style.color||"grey"});n.textContent=i,g.appendChild(n),t+=16})}}T.push(t)}}const f=(i.svgLayer||b).querySelector(".flow_wires"),E=[],v=Object.keys(l);for(let t=0;t2&&e.splice(2);const n=new Map,M=U(function(t,e){const i=W(t),n=W(e),M={},o={},A={},a={},g={};return Object.keys(i.all).forEach(function(t){if(!j(n.all,t))return void(o[t]=!0);const e=JSON.stringify(i.all[t]),M=JSON.stringify(n.all[t]);if(e!==M)if(A[t]=!0,i.all[t].z!==n.all[t].z)g[t]=!0;else if(i.all[t].x!==n.all[t].x||i.all[t].y!==n.all[t].y||i.all[t].w!==n.all[t].w||i.all[t].h!==n.all[t].h){const i=JSON.parse(e),n=JSON.parse(M);delete i.x,delete i.y,delete i.w,delete i.h,delete n.x,delete n.y,delete n.w,delete n.h,JSON.stringify(i)===JSON.stringify(n)&&(a[t]=!0)}}),Object.keys(n.all).forEach(function(t){j(i.all,t)||(M[t]=!0)}),{currentConfig:i,newConfig:n,added:M,deleted:o,changed:A,positionChanged:a,moved:g}}(e[0],e[1]));M.changes.forEach(t=>{t.highlight=e=>function(t=-1,e){clearTimeout(N),clearTimeout(L);s.querySelectorAll(".red-ui-tab").forEach(t=>t.classList.remove("tab-glow"));d.querySelectorAll("g[data-node-id]").forEach(t=>{t.style.filter=""});const i=s.querySelector(".red-ui-tab.active").getAttribute("data-flow-id");let n=e.tab;"moved"===e.diffType&&(-1===t?t=e.v1:0===t?n=e.value1:1===t&&(n=e.value2));"added"===e.diffType&&-1===t?t=1:("deleted"===e.diffType&&-1===t||-1===t)&&(t=0);const M=s.querySelector(`.red-ui-tab[data-flow-id="${n}"]`);("tab"===e.item&&"changed"===e.diffType||n!==i)&&M&&(M.click(),M.classList.add("tab-glow"),L=setTimeout(()=>{M.classList.remove("tab-glow")},1e4));if(parseInt(l.value)<10||parseInt(l.value)>90){const e=0===t?10:90;!async function(){let t=parseInt(l.value);const i=e>t?1:-1;for(;t!==e;){t+=i,l.value=t;const e=new Event("input",{bubbles:!0});l.dispatchEvent(e),await new Promise(t=>setTimeout(t,10))}}()}const o=[e.item,e.tab][0],A=d.querySelector(`g.flow-layer-0 g[data-node-id="${o}"]`),a=d.querySelector(`g.flow-layer-1 g[data-node-id="${o}"]`);if(!A&&!a)return;(A||a).scrollIntoView({behavior:"smooth",block:"center",inline:"center"}),A&&(A.style.filter="url(#node-glow)");a&&(a.style.filter="url(#node-glow)");N=setTimeout(()=>{try{A&&(A.style.filter=""),a&&(a.style.filter="")}catch(t){}},1e4)}(e,t)}),M.tabMap=n;const o=b((i=it(i)).document,t.document,i.container,this),A=i.container;G(o,i.scope);const a=i.zoom,g=i.gridLines;for(i.zoom=!1,i.gridLines=!1;A.firstChild;)A.removeChild(A.firstChild);const s=Y("div",null,"red-ui-tabs",null,A),r=E(A),d=O(r,{addDefaultLayer:!1}),u=[...d.childNodes].find(t=>"g"===t.tagName&&t.classList.contains("outerContainer")),l=function(t){if(!b(t,this))return null;let e=t.querySelector(".toolbar");e||(e=v(t));let i=e.querySelector(".compare-controls");if(i)return e.querySelector(".flow-compare-slider");i=Y("div",null,"button-group compare-controls",null,e);const n=Y("input",null,"flow-compare-slider",null,i);return n.type="range",n.min="0",n.max="100",n}(A);l.type="range",l.min=0,l.max=100,l.value=0,l.step=5,l.style.width="100%",l.classList.add("flow-compare-slider");const c=A,I=r;f(d);for(let t=0;t{const M=n[0],o=n[1],r={...i,flowId:M,container:null,layers:o};!function(e,i,n){const M=b(i.document,t.document,A,this),o=i.layers;for(const t of Object.values(o)){const A=t.tab,a=A.label,g=`red-ui-tab-${t.index}`,s=`red-ui-tab-${A.id}`;let r=e.querySelector(`.${s}`);r||(r=M.createElement("div"),e.appendChild(r),r.classList.add("red-ui-tab"),r.classList.add(g),r.classList.add(s),r.classList.add("red-ui-tab-"+o.type),r.setAttribute("data-flow-id",A.id));let u=r.querySelector(`.red-ui-tab-label-${t.index}`);if(u||(u=M.createElement("div"),u.classList.add(`red-ui-tab-label-${t.index}`)),u.classList.add("red-ui-tab-label"),u.setAttribute("data-layer",t.index),u.style.opacity=0,r.appendChild(u),A.disabled){u.classList.add("disabled");const t=M.createElement("i");t.classList.add("red-ui-tab-disabled-icon"),u.appendChild(t)}else if("subflow"===A.type){const t=M.createElement("i");t.classList.add("red-ui-tab-subflow-icon"),u.appendChild(t)}u.title=a;const l=M.createElement("span");l.textContent=a,u.appendChild(l),r.onclick=function(t){z(d,i,i.flowId),n(i),h(d,i,A.id)}}}(s,r,function(t){s.querySelectorAll(".red-ui-tab").forEach(t=>t.classList.remove("active"));s.querySelector(`[data-flow-id="${t.flowId}"]`).classList.add("active");const n=Object.values(t.layers),M={0:!0,1:!0};n.forEach(t=>{t.svgLayer.setAttribute("opacity",0);const i=t.renderOptions;Mt(e[i.index]||[],i),M[i.index]=!1});const o=M[0]||M[1],r={...i,flowId:t.flowId,container:o?.container||o?.flowRenderer||A};if(M[0]&&(r.layer=0,r.svgLayer=d.querySelector("g.flow-layer-0"),Mt(e[0]||[],r)),M[1]&&(r.layer=1,r.svgLayer=d.querySelector("g.flow-layer-1"),Mt(e[1]||[],r)),a&&m(d,A),g){let t=[...u.childNodes].find(t=>"g"===t.tagName&&t.classList.contains("flow_grid"));t||(t=k("g",{class:"flow_grid"}),u.insertBefore(t,d.firstChild)),t&&B(t)}D()})}),l.addEventListener("input",function(t){D()});let N=null,L=null;function D(){const t=parseInt(l.value),i=[1-t/100,t/100];i.forEach((t,e)=>{t=t>.05?w(t+.15,0,1):t;const i=function(t,e){return t.querySelector(`g.flow-layer-${e||0}`)}(d,e);i?.setAttribute("opacity",t)});s.querySelectorAll(".red-ui-tab-label").forEach((t,n)=>{let M=parseInt(t.getAttribute("data-layer"));(isNaN(M)||M<0||M>=e.length)&&(M=0),t.style.opacity=i[M]||0})}const y=s.querySelector(".red-ui-tab");y&&y.click(),n.size>0?A.classList.add("has-tabs"):A.classList.remove("has-tabs");const C=p(d.parentElement);return C.hasHorizontalScrollbar||C.hasVerticalScrollbar?A.classList.add("has-scrollbars"):A.classList.remove("has-scrollbars"),M},renderFlows:nt,renderFlow:Mt,normaliseOptions:it,getStyles:Q}};"object"==typeof module&&module.exports?module.exports=FlowRenderer:"object"==typeof window?window.FlowRenderer=FlowRenderer:global.FlowRenderer=FlowRenderer;export default FlowRenderer;