@elicdavis/node-flow 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +29 -2
- package/dist/index.d.ts +29 -2
- package/dist/index.js +332 -95
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +331 -95
- package/dist/index.mjs.map +1 -1
- package/dist/web/NodeFlow.js +4 -4
- package/dist/web/NodeFlow.js.map +3 -3
- package/package.json +1 -1
- package/src/camera.ts +23 -1
- package/src/connection.ts +33 -4
- package/src/contextMenu.ts +35 -3
- package/src/graph.ts +97 -38
- package/src/index.ts +3 -0
- package/src/input.ts +183 -74
- package/src/node.ts +19 -18
- package/src/nodes/subsystem.ts +43 -0
- package/src/theme.ts +1 -0
package/dist/web/NodeFlow.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var d={FontFamily:"Courier New",Graph:{BackgroundColor:"#07212a"},Node:{FontColor:"#afb9bb",BackgroundColor:"#0c2b35",Title:{Color:"#154050",FontColor:"#afb9bb",Padding:5},BorderRadius:15,Border:{Idle:"#1c1c1c",MouseOver:"#8e8e8e",Grabbed:"white",Selected:"#6e6e6e"},Port:{FontColor:"#afb9bb"},Message:{InfoColor:"#afb9bb",WarnColor:"#f1f663ff",ErrorColor:"#FF0000"}},BoxSelect:{Color:"white",Size:1,Radius:2,LineDashLength:5},Widget:{FontColor:"#afb9bb",BackgroundColor:"#0f313c",Border:{Color:"#154050",Size:2,Radius:2},Hover:{BackgroundColor:"#195366"},Slider:{FillColor:"#07212A"},Button:{Click:{BackgroundColor:"#1f637a"}}},ContextMenu:{BackgroundColor:"#07212A",HighlightColor:"#205A6D",FontColor:"#afb9bb"},Note:{FontColor:"#afb9bb",FontSize:16,EntrySpacing:20,LineSpacing:5,DotSize:3,HeaderLineWidth:2,H1:{FontSize:32},H2:{FontSize:16},H3:{FontSize:16},CodeBlock:{BackgroundColor:"#0c2b35",Padding:16,BorderRadius:4}}};var Tt=16,Mt="black";function H(s,e){return{color:s?.color===void 0?e?.color:s?.color,size:s?.size===void 0?e?.size:s?.size,font:s?.font===void 0?e?.font:s?.font,style:s?.style===void 0?e?.style:s?.style,weight:s?.weight===void 0?e?.weight:s?.weight}}var W=class{#t;#e;#i;#n;#o;constructor(e){this.#t=e?.size===void 0?Tt:e.size,this.#e=e?.color===void 0?Mt:e.color,this.#i=e?.font===void 0?d.FontFamily:e.font,this.#n=e?.weight===void 0?"":e.weight,this.#o=e?.style===void 0?"":e.style}setupStyle(e,t){e.fillStyle=this.#e,e.font=this.#o+" "+this.#n+" "+this.#t*t+"px "+this.#i}getSize(){return this.#t}getFont(){return this.#i}measure(e,t,i,o){this.setupStyle(e,t);let n=e.measureText(i);o.x=n.width,o.y=n.actualBoundingBoxAscent+n.actualBoundingBoxDescent}setColor(e){this.#e=e}getColor(){return this.#e}setSize(e){this.#t=e}setWeight(e){this.#n=e}};var Ze=class{#t;#e;#i;#n;#o;constructor(e,t){this.#t=new Array,this.#e=0,this.#i=e,this.#n=t,this.#o=0}runIf(e,t){e&&this.run(t)}#r(){return this.#o>0}run(e){let t=this.#e;this.#o+=1,e(),this.#o-=1,this.#e=t}get(){if(!this.#r())throw new Error("can't use pool outside of running context");let e;return this.#t.length===this.#e?(e=this.#i(),this.#t.push(this.#i())):(e=this.#t[this.#e],this.#n(e)),this.#e++,e}},x=new Ze(()=>({x:0,y:0}),s=>{s.x=0,s.y=0});function g(s,e){s.x=e.x,s.y=e.y}function Ne(s,e,t){s.x=e.x-t.x,s.y=e.y-t.y}function ge(s,e,t){s.x=e.x+t.x,s.y=e.y+t.y}function Q(s,e){s.x*=e,s.y*=e}function f(){return{x:0,y:0}}function lt(s,e){let t=e.x-s.x,i=e.y-s.y;return Math.sqrt(t*t+i*i)}function dt(s,e){if(s.x>e.x){let t=e.x;e.x=s.x,s.x=t}if(s.y>e.y){let t=e.y;e.y=s.y,s.y=t}}function ht(s,e){let t=!1;return x.run(()=>{let i=x.get(),o=x.get();g(i,s.Position),ge(o,i,s.Size),dt(i,o);let n=x.get(),r=x.get();g(n,e.Position),ge(r,n,e.Size),dt(n,r),t=i.x<=r.x&&o.x>=n.x&&i.y<=r.y&&o.y>=n.y}),t}function je(s,e){return e.x=s.Position.x+s.Size.x/2,e.y=s.Position.y+s.Size.y/2,e}function b(s,e){let t=s.Position;return!(e.x<t.x||e.y<t.y||e.x>t.x+s.Size.x||e.y>t.y+s.Size.y)}var w=class{#t;#e;constructor(){this.#t=new Array,this.#e=0}Count(){return this.#e}Clear(){this.#e=0}At(e){return this.#t[e]}Push(e){this.#t.length===this.#e?this.#t.push(e):this.#t[this.#e]=e,this.#e++}ToArray(){let e=new Array(this.Count());for(let t=0;t<this.#e;t++)e[t]=this.#t[t];return e}};var at=30;var _e=class{#t;#e;#i;group;constructor(e){this.#t=e?.name===void 0?"item":e.name,this.#e=e?.callback,this.#i=new W(e?.textStyle),this.group=e?.group}getName(){return this.#t}execute(){this.#e!==void 0&&this.#e()}},Ye=class{constructor(e){this.entries=e;this.#t=e.length*at}#t;height(){return this.#t}},ke=class{constructor(e,t,i){this.text=e;this.subMenu=t;this.item=i}click(){this.item?.execute()}};function X(...s){let e={items:new Array,subMenus:new Array};for(let t=0;t<s.length;t++){let i=s[t];i!==void 0&&(i.items!==void 0&&(e.items=e.items?.concat(i.items)),i.subMenus!==void 0&&(e.subMenus=e.subMenus?.concat(i.subMenus)))}return e}var he=class{#t;#e;#i;#n;#o;#r;#l;constructor(e){if(this.#l=f(),this.#o=new w,this.#t=e?.name===void 0?"menu":e?.name,this.#e=new Array,this.#i=new Array,this.#n=new W(H(e?.textStyle,{color:d.ContextMenu.FontColor})),this.#r=e?.group,e?.subMenus!==void 0)for(let t=0;t<e?.subMenus.length;t++)this.#i.push(new he(e?.subMenus[t]));if(e?.items!==void 0)for(let t=0;t<e?.items.length;t++)this.#e.push(new _e(e?.items[t]));this.#s()}#s(){let e=new Map,t=new Array;t.push(new Array);for(let i=0;i<this.#e.length;i++){let o=0,n=this.#e[i];if(n.group!==void 0){let r=e.get(n.group);r!==void 0?o=r:(o=t.length,e.set(n.group,o),t.push(new Array))}t[o].push(new ke(this.#e[i].getName(),void 0,this.#e[i]))}for(let i=0;i<this.#i.length;i++){let o=0,n=this.#i[i];if(n.#r!==void 0){let r=e.get(n.#r);r!==void 0?o=r:(o=t.length,e.set(n.#r,o),t.push(new Array))}t[o].push(new ke(this.#i[i].getName(),this.#i[i],void 0))}this.#o.Clear();for(let i=0;i<t.length;i++){let o=t[i];o.length!==0&&this.#o.Push(new Ye(o))}}#d=0;#u(e,t){if(this.#d>0)return this.#d;let i=f();for(let o=0;o<this.#o.Count();o++){let n=this.#o.At(o);for(let r=0;r<n.entries.length;r++)this.#n.measure(e,t,n.entries[r].text,i),this.#d=Math.max(i.x,this.#d)}return this.#d}getName(){return this.#t}#h={Position:f(),Size:f()};#a;render(e,t,i,o,n){let l=1.25*at,h=1.25*40+this.#u(e,1.25),a=0;for(let T=0;T<this.#o.Count();T++)a+=this.#o.At(T).height();a*=1.25;let c={x:0,y:0};g(c,t),n||(c.x-=h),c.y+a>e.canvas.clientHeight&&(c.y=e.canvas.clientHeight-a);let m=n;n&&c.x+h>e.canvas.clientWidth&&(c.x=e.canvas.clientWidth-h,m=!m),this.#h.Size.x=h,this.#h.Size.y=l,g(this.#h.Position,c),e.textAlign="left",e.fillStyle=d.ContextMenu.BackgroundColor,e.shadowColor="#000000",e.shadowBlur=5*1.25,e.beginPath(),e.roundRect(c.x,this.#h.Position.y,h,a,5*1.25),e.fill(),e.shadowBlur=0;let p=null,F=!1,G=0;for(let T=0;T<this.#o.Count();T++){let j=this.#o.At(T);for(let V=0;V<j.entries.length;V++){let u=j.entries[V];this.#h.Position.y=c.y+l*G;let S=!1;o!==void 0&&b(this.#h,o)&&(p=u,S=!0,u.subMenu!==void 0?(this.#a=u.subMenu,this.#l.x=c.x,this.#l.y=this.#h.Position.y,m&&(this.#l.x+=h),F=!0):this.#a=void 0),(S||this.#a!==void 0&&u.subMenu===this.#a)&&(e.fillStyle=d.ContextMenu.HighlightColor,e.beginPath(),e.roundRect(c.x+l/10,this.#h.Position.y+l/10,h-l/5,l-l/5,5*1.25),e.fill()),this.#n.setupStyle(e,1.25),e.fillText(u.text,c.x+l/5,this.#h.Position.y+l/2),u.subMenu!==void 0&&(e.beginPath(),e.strokeStyle=d.ContextMenu.FontColor,e.lineWidth=1*1.25,e.lineTo(c.x+h-l/2.5,this.#h.Position.y+l/3),e.lineTo(c.x+h-l/4,this.#h.Position.y+l/2),e.lineTo(c.x+h-l/2.5,this.#h.Position.y+l-l/3),e.stroke()),G++}if(T!==this.#o.Count()-1){e.strokeStyle=d.ContextMenu.FontColor,e.lineWidth=.5*1.25,e.beginPath();let V=c.x+l/10,u=this.#h.Position.y+l;e.lineTo(V,u),e.lineTo(V+h-l/5,u),e.stroke()}}if(this.#a!==void 0){let T=this.#a.render(e,this.#l,1.25,o,m);T!==null&&(p=T)}return p}};var Pe=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;constructor(e,t,i,o,n,r,l){this.#i=e,this.#o=t,this.#r=i,this.#l=o,this.#s=n,this.#d=r,this.#t=!1,this.#e=f(),this.#n=f(),e.addEventListener("mousedown",this.#c.bind(this),!1),e.addEventListener("touchstart",this.#g.bind(this),!1),document.addEventListener("mouseup",this.#f.bind(this),!1),document.addEventListener("touchend",this.#f.bind(this),!1),e.addEventListener("mousemove",this.#h.bind(this),!1),e.addEventListener("touchmove",this.#a.bind(this),!1),e.addEventListener("drop",h=>{h.preventDefault(),console.log(h),h.dataTransfer?.items?[...h.dataTransfer.items].forEach((a,c)=>{if(a.kind==="file"){let m=a.getAsFile();m&&(l(m),console.log(m),console.log(`\u2026 file[${c}].name = ${m.name}`))}}):h.dataTransfer&&[...h.dataTransfer.files].forEach((a,c)=>{console.log(`\u2026 file[${c}].name = ${a.name}`)})}),e.addEventListener("dragover",h=>{h.preventDefault(),this.#r(this.#u(h))}),e.addEventListener("contextmenu",h=>{r(this.#u(h)),h.preventDefault()},!1)}#u(e){var t=this.#i.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}}#h(e){let t=this.#u(e);if(this.#t){let i=f();Ne(i,t,this.#n),this.#o(i)}this.#r(t),g(this.#n,t)}#a(e){let t=this.#i.getBoundingClientRect(),i={x:e.touches[0].clientX-t.left,y:e.touches[0].clientY-t.top};this.#r(i),this.#t&&this.#o({x:i.x-this.#e.x,y:i.y-this.#e.y}),g(this.#e,i)}#c(e){e.button===0&&(this.#t=!0,this.#l(this.#u(e),e.ctrlKey||e.shiftKey))}#g(e){this.#t=!0;let t=this.#i.getBoundingClientRect();this.#e.x=e.touches[0].clientX-t.left,this.#e.y=e.touches[0].clientY-t.top,this.#l(this.#e,!1)}#f(e){e.button===0&&(this.#t=!1,this.#s())}};function qe(s){return typeof s=="number"?{Bottom:s,Right:s,Top:s,Left:s}:{Bottom:s?.Bottom===void 0?0:s?.Bottom,Right:s?.Right===void 0?0:s?.Right,Left:s?.Left===void 0?0:s?.Left,Top:s?.Top===void 0?0:s?.Top}}var ae=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;constructor(e){this.#t=qe(e?.Margin),this.#e=qe(e?.Padding),this.#n=e?.BackgroundColor,this.#i={Color:e?.Border?.Color??"black",Thickness:e?.Border?.Thickness??0,Radius:e?.Border?.Radius??0},this.#o=e?.MinWidth,this.#r=e?.MaxWidth,this.#l=e?.MinHeight,this.#s=e?.MaxHeight,this.#d=e?.Grow,this.#u=e?.Display??"flex"}setBackgroundColor(e){this.#n=e}render(e,t,i,o){if(this.#u==="none")return;let n={x:0,y:0};this.size(e,n),n.x=n.x*i,n.y=n.y*i,n.x=Math.max(n.x,o.x),n.y=Math.max(n.y,o.y),this.#n&&(e.fillStyle=this.#n,e.beginPath(),e.roundRect(t.x+this.#t.Left*i,t.y+this.#t.Right*i,n.x-(this.#t.Left+this.#t.Right)*i,n.y-(this.#t.Top+this.#t.Bottom)*i,this.#i.Radius*i),e.fill()),this.#i.Thickness>0&&(e.lineWidth=this.#i.Thickness*i,e.strokeStyle=this.#i.Color,e.stroke());let r={x:t.x+this.#g()*i,y:t.y+this.#c()*i},l={x:n.x-this.#h()*i,y:n.y-this.#a()*i};this.doRender(e,r,i,l)}maxLimitations(e){e.x=-1,e.y=-1,this.#r&&(e.x=this.#r),this.#s&&(e.y=this.#s)}setDisplay(e){this.#u=e}getDisplay(){return this.#u}size(e,t){if(t.x=0,t.y=0,this.#u==="none")return;let i={x:-1,y:-1};this.maxLimitations(i),this.calcSize(e,t,i),t.x+=this.#h(),t.y+=this.#a(),this.#o&&(t.x=Math.max(t.x,this.#o)),this.#r&&(t.x=Math.min(this.#r,t.x)),this.#s&&(t.y=Math.min(this.#s,t.y)),this.#l&&(t.y=Math.max(this.#l,t.y))}#h(){return this.#i.Thickness+this.#t.Left+this.#t.Right+this.#e.Left+this.#e.Right}#a(){return this.#i.Thickness+this.#t.Top+this.#t.Bottom+this.#e.Top+this.#e.Bottom}#c(){return this.#i.Thickness/2+this.#t.Top+this.#e.Top}#g(){return this.#i.Thickness/2+this.#t.Left+this.#e.Left}};var $=class extends ae{#t;#e;#i;constructor(e,t){super(t),this.#t=e,this.#e="column",this.#i="stretch"}calcSize(e,t,i){t.x=0,t.y=0;let o={x:0,y:0};switch(this.#e){case"column":for(let n=0;n<this.#t.length;n++)this.#t[n].size(e,o),t.x=Math.max(t.x,o.x),t.y+=o.y;break;case"row":for(let n=0;n<this.#t.length;n++)this.#t[n].size(e,o),t.y=Math.max(t.y,o.y),t.x+=o.x;break;default:throw new Error("unknown layout: "+this.#e)}}doRender(e,t,i,o){switch(this.#e){case"column":this.#n(e,t,i,o);break;default:throw new Error("unimplemented layout direction: "+this.#e)}}#n(e,t,i,o){let n={x:t.x,y:t.y},r={x:0,y:0};for(let l=0;l<this.#t.length;l++){let h=this.#t[l];switch(h.size(e,r),Q(r,i),this.#i){case"stretch":n.x=t.x,r.x=o.x;break;case"start":n.x=t.x;break;case"end":n.x=o.x-r.x;break;case"center":n.x=o.x-r.x/2;break;default:throw new Error("unimplmeneted alignment: "+this.#i)}h.render(e,n,i,r),n.y+=r.y}}};var U=class extends ae{#t;#e;#i;#n;constructor(e,t){super(t),this.#t=e,this.#e=t?.Align??"left",this.#i=t?.VerticalAlign??"top",this.#n=t?.LineHeight??1}doRender(e,t,i,o){let n=f();this.calcSize(e,n,o),Q(n,i);let r=f();switch(g(r,t),e.textAlign="left",e.textBaseline="top",this.#e){case"left":break;case"right":r.x+=o.x-n.x;break;case"center":r.x+=(o.x-n.x)/2;break;default:throw new Error("unimplemented justification: "+this.#e)}switch(this.#i){case"top":break;case"bottom":r.y+=o.y-n.y;break;case"center":r.y+=(o.y-n.y)/2;break;default:throw new Error("unimplemented justification: "+this.#e)}if(o.x<=0)this.#t.render(e,i,r);else{let l=this.#t.breakIntoLines(e,o.x),h={x:0,y:0};for(let a=0;a<l.length;a++)l[a].render(e,i,r),l[a].size(e,1,h),r.y+=this.#t.style().getSize()*this.#n}}calcSize(e,t,i){if(i.x<=0){this.#t.size(e,1,t);return}let o=this.#t.breakIntoLines(e,i.x),n={x:0,y:0};t.x=0,t.y=this.#t.style().getSize()*o.length*this.#n;for(let r=0;r<o.length;r++)o[r].size(e,1,n),t.x=Math.max(n.x,t.x)}};var Qe=({max:s,getValue:e,match:t})=>{let i=0;for(;i<=s;){let o=Math.floor((i+s)/2),n=e(o);if(n===t)return o;n<t?i=o+1:s=o-1}return s};function ut(s,e,t){let i=s.measureText(e).width,o="\u2026",n=s.measureText(o).width;if(i<=t||i<=n)return e;let r=Qe({max:e.length,getValue:l=>s.measureText(e.substring(0,l)).width,match:t-n});return e.substring(0,r)+o}function ct(s,e,t){if(s.measureText(e).width<=t)return[e];let o=Qe({max:e.length,getValue:n=>s.measureText(e.substring(0,n)).width,match:t});for(let n=o-1;n>=1;n--)if(e.charAt(n)===" "){o=n+1;break}return[e.substring(0,o),e.substring(o)]}function pe(s,e,t){if(s.measureText(e).width<=t)return[e];let o=new Array,n=e;for(;n!=="";){let r=Qe({max:n.length,getValue:l=>s.measureText(n.substring(0,l)).width,match:t});if(r===n.length){o.push(n.substring(0,r));break}for(let l=r-1;l>=1;l--)if(n.charAt(l)===" "){r=l+1;break}o.push(n.substring(0,r)),n=n.substring(r)}return o}var y=class{#t;#e;#i;#n;#o;#r;#l;constructor(e,t,i){this.#n=e,this.#t=!1,this.#e=f(),this.#i=new W(t),this.#o=i?.MaxWidth?i?.MaxWidth:-1,this.#r=i?.LineSpacing?i?.LineSpacing:5,this.#l=[e],document.fonts.check(`16px "${this.#i.getFont()}"`)||document.fonts.addEventListener("loadingdone",o=>{this.#t=!1})}set(e){this.#n=e,this.#t=!1}get(){return this.#n}breakIntoLines(e,t){let i=new Array;this.#i.setupStyle(e,1);let o=pe(e,this.#n,t);if(o.length===1)return[this];for(let n=0;n<o.length;n++){let r=new y(o[n]);r.#i=this.#i,i.push(r)}return i}split(e){let t=this.#n.split(e),i=new Array;for(let o=0;o<t.length;o++){let n=new y(t[o]);n.#i=this.#i,i.push(n)}return i}splitAtIndex(e){let t=[new y(this.#n.substring(0,e)),new y(this.#n.substring(e,0))];for(let i=0;i<t.length;i++)t[i].#i=this.#i;return t}splitAtWidth(e,t){this.#i.setupStyle(e,1);let i=ct(e,this.#n,t);if(i.length===1)return[this];let o=new Array;for(let n=0;n<i.length;n++){let r=new y(i[n]);r.#i=this.#i,o.push(r)}return o}#s(e){if(!this.#t){if(this.#i.setupStyle(e,1),this.#o==-1){let t=e.measureText(this.#n);this.#e.x=t.width,this.#e.y=t.actualBoundingBoxAscent+t.actualBoundingBoxDescent,this.#l=[this.#n],this.#t=!0;return}this.#l=pe(e,this.#n,this.#o),this.#e.x=0,this.#e.y=0;for(let t=0;t<this.#l.length;t++){let i=e.measureText(this.#l[t]);this.#e.x=Math.max(this.#e.x,i.width)}this.#e.y+=(this.#l.length-1)*this.#r+this.#i.getSize()*this.#l.length,this.#t=!0}}size(e,t,i){this.#s(e),g(i,this.#e),Q(i,t)}height(e){return this.#s(e),this.#e.y}setColor(e){this.#i.setColor(e)}getColor(){return this.#i.getColor()}setSize(e){this.#i.setSize(e)}setWeight(e){this.#i.setWeight(e)}render(e,t,i){this.#s(e),this.#i.setupStyle(e,t);let o=0;for(let n=0;n<this.#l.length;n++)e.fillText(this.#l[n],i.x,i.y+o),o+=(this.#i.getSize()+this.#r)*t}style(){return this.#i}};function Xe(s,e,t){return Math.min(Math.max(s,e),t)}function _(s){return Xe(s,0,1)}function $e(s){var e=s.toString(16);return e.length==1?"0"+e:e}function mt(s){return"#"+$e(Math.round(s.r*255))+$e(Math.round(s.g*255))+$e(Math.round(s.b*255))}function ft(s){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(s);return e?{r:parseInt(e[1],16)/255,g:parseInt(e[2],16)/255,b:parseInt(e[3],16)/255}:null}function gt(s,e){if(s.s<=0){e.r=s.v,e.g=s.v,e.b=s.v;return}let t=s.h;t>=360&&(t=0),t/=60;let i=Math.round(t),o=t-i,n=s.v*(1-s.s),r=s.v*(1-s.s*o),l=s.v*(1-s.s*(1-o));switch(i){case 0:e.r=s.v,e.g=l,e.b=n;break;case 1:e.r=r,e.g=s.v,e.b=n;break;case 2:e.r=n,e.g=s.v,e.b=l;break;case 3:e.r=n,e.g=r,e.b=s.v;break;case 4:e.r=l,e.g=n,e.b=s.v;break;default:e.r=s.v,e.g=n,e.b=r;break}e.r=_(e.r),e.g=_(e.g),e.b=_(e.b)}function pt(s,e){let t=0;for(var i=0;i<s.length;i++)t+=s.charCodeAt(i)*(i+1);let o=24;t=Math.round(t)%o;let n={h:t/(o-1)*360,s:e,v:1},r={r:0,g:0,b:0};return gt(n,r),mt(r)}var ye=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;constructor(e,t,i){this.#t=e,this.#o=new Array,this.#r=t,this.#e=i?.name===void 0?"Port":i?.name,this.#l=i?.type===void 0?"":i?.type,this.#i={borderColor:i?.emptyStyle?.borderColor===void 0?"#1c1c1c":i.emptyStyle?.borderColor,fillColor:i?.emptyStyle?.fillColor===void 0?pt(this.#l,.3):i.emptyStyle?.fillColor,borderSize:i?.emptyStyle?.borderSize===void 0?1:i.emptyStyle?.borderSize,size:i?.emptyStyle?.size===void 0?4:i.emptyStyle?.size},this.#n={borderColor:i?.filledStyle?.borderColor===void 0?"#1c1c1c":i.filledStyle?.borderColor,fillColor:i?.filledStyle?.fillColor===void 0?pt(this.#l,1):i.filledStyle?.fillColor,borderSize:i?.filledStyle?.borderSize===void 0?1:i.filledStyle?.borderSize,size:i?.filledStyle?.size===void 0?5:i.filledStyle?.size},this.#d=new Array,i?.onConnectionAdded&&this.#d.push(i?.onConnectionAdded),this.#u=new Array,i?.onConnectionRemoved&&this.#u.push(i?.onConnectionRemoved);let o=new Array,n=this.#l;i?.array===!0&&(n="Array<"+n+">"),o.push(new U(new y(n,{color:"white"}),{Align:"center"}));let r=i?.description;r&&r!==""&&o.push(new U(new y(r,{color:"white",style:"italic"}),{Align:"center",Padding:{Top:16},MaxWidth:400,LineHeight:1.5})),this.#s=new $(o,{BackgroundColor:"rgba(0, 0, 0, 0.85)",Border:{Radius:6},Padding:13})}addConnection(e){let t=this.#o.length;this.#o.push(e);for(let i=0;i<this.#d.length;i++)this.#d[i](e,t,this,this.#r,this.#t)}replaceConnection(e,t){let i=this.#o.length;this.#o[t]=e;for(let o=0;o<this.#d.length;o++)this.#d[o](e,i,this,this.#r,this.#t)}addConnectionAddedListener(e){e!==void 0&&this.#d.push(e)}connections(){return this.#o}addConnectionRemovedListener(e){e!==void 0&&this.#u.push(e)}clearConnection(e){let t=this.#o.indexOf(e);if(t>-1){this.#o.splice(t,1);for(let i=0;i<this.#u.length;i++)this.#u[i](e,t,this,this.#r,this.#t)}else console.error("no connection found to remove")}getDataType(){return this.#l}getPortType(){return this.#r}getDisplayName(){return this.#e}filledStyleColor(){return this.#n.fillColor===void 0?(console.error("There's no fill color!!!!!!!!!"),"black"):this.#n.fillColor}#h={Position:{x:0,y:0},Size:{x:0,y:0}};render(e,t,i,o,n){let r=this.#i;this.#o.length>0&&(r=this.#n);let l=r.size*i.zoom;if(o&&b(this.#h,o)){l*=1.25;let h=t.x,a=t.y;n.queue(()=>{let c={x:0,y:0};this.#s.calcSize(e,c,{x:-1,y:-1}),this.#s.render(e,{x:h-c.x/2,y:a},1,c)})}return this.#h.Position.x=t.x-l,this.#h.Position.y=t.y-l,this.#h.Size.x=l*2,this.#h.Size.y=l*2,e.strokeStyle=r.borderColor,e.fillStyle=r.fillColor,e.beginPath(),this.#r==="INPUTARRAY"?e.rect(t.x-l,t.y-l,l*2,l*2):e.arc(t.x,t.y,l,0,2*Math.PI),e.fill(),e.stroke(),this.#h}};function yt(s,e){return{color:s?.color===void 0?e?.color:s?.color,size:s?.size===void 0?e?.size:s?.size}}var Ce=class{#t;#e;constructor(e){this.#t=e?.size===void 0?.5:e.size,this.#e=e?.color===void 0?"black":e.color}setupStyle(e,t){e.strokeStyle=this.#e,e.lineWidth=t*this.#t}setColor(e){this.#e=e}setSize(e){this.#t=e}size(){return this.#t}};function K(s,e){return{radius:s?.radius===void 0?e?.radius:s?.radius,color:s?.color===void 0?e?.color:s?.color,border:yt(s?.border,e?.border)}}var D=class{#t;#e;#i;constructor(e){this.#e=e?.color===void 0?"#CCCCCC":e.color,this.#t=e?.border===void 0?null:new Ce(e.border),this.#i=e?.radius===void 0?2:e.radius}#n(e,t,i,o){e.fillStyle=this.#e,this.#t?.setupStyle(e,i),e.beginPath(),e.roundRect(t.Position.x,t.Position.y,t.Size.x,t.Size.y,o),e.fill()}#o(e,t,i,o){this.#n(e,t,i,o),e.stroke()}Outline(e,t,i,o){this.#t?.setupStyle(e,i),e.beginPath(),e.roundRect(t.Position.x,t.Position.y,t.Size.x,t.Size.y,o),e.stroke()}Draw(e,t,i){this.#o(e,t,i,this.#i*i)}DrawRoundedTopOnly(e,t,i){this.#o(e,t,i,[this.#i*i*2,this.#i*i*2,0,0])}DrawUnderline(e,t,i){this.#n(e,t,i,[this.#i*i*2,this.#i*i*2,0,0]),e.beginPath(),e.moveTo(t.Position.x,t.Position.y+t.Size.y),e.lineTo(t.Position.x+t.Size.x,t.Position.y+t.Size.y),e.stroke()}borderSize(){return this.#t===null?0:this.#t.size()}radius(){return this.#i}setColor(e){this.#e=e}setBorderColor(e){this.#t===null?this.#t=new Ce({color:e}):this.#t.setColor(e)}};var E=class{#t;#e;#i;#n;#o;#r;constructor(e){this.#t=e.title,this.#e=e.options,this.#i=e.content,this.#n=e.onClose,this.#o=e.buttonCSS===void 0?"flex-grow: 1; margin-right: 8px;":e.buttonCSS,this.#r=null}Hide(){this.#r!==null&&(document.body.removeChild(this.#r),this.#r=null)}Show(){this.#r=document.createElement("div"),this.#r.style.cssText="position:absolute;top:0;width:100%;display:flex;height:100%;justify-content:center;align-items:center;background-color:#00000070;",document.body.appendChild(this.#r);let e=document.createElement("div");e.style.cssText="background-color:#000;color:white;font-family:Verdana;border-radius:8px;padding:16px;",this.#r.appendChild(e);let t=document.createElement("h2");t.textContent=this.#t,t.style.cssText="margin-top:0;margin-bottom:16px;",e.appendChild(t),this.#i!==void 0&&e.appendChild(this.#i());let i=document.createElement("div");i.style.cssText="margin-top:16px;justify-content:space-around;align-items:center;flex-direction:row;display:flex;",e.appendChild(i);for(let o=0;o<this.#e.length;o++){let n=document.createElement("button");n.style.cssText=this.#o,n.textContent=this.#e[o],n.onclick=()=>{this.Hide(),this.#n!==void 0&&this.#n(this.#e[o])},i.appendChild(n)}}};function R(s,e){return{box:K(s?.box,e?.box),text:H(s?.text,e?.text),textAlign:s?.textAlign===void 0?e?.textAlign:s?.textAlign,textBaseline:s?.textBaseline===void 0?e?.textBaseline:s?.textBaseline}}var P=class{#t;#e;#i;#n;constructor(e){this.#t=new D(e?.box),this.#e=new W(e?.text),this.#i=e?.textAlign===void 0?"center":e.textAlign,this.#n=e?.textBaseline===void 0?"middle":e.textBaseline}Draw(e,t,i,o){this.#t.Draw(e,t,i),e.textAlign=this.#i,e.textBaseline=this.#n,this.#e.setupStyle(e,i),e.fillText(o,t.Position.x+t.Size.x/2,t.Position.y+t.Size.y/2)}DrawUnderline(e,t,i,o){this.#t.DrawUnderline(e,t,i),e.textAlign=this.#i,e.textBaseline=this.#n,this.#e.setupStyle(e,i),e.fillText(o,t.Position.x+t.Size.x/2,t.Position.y+t.Size.y/2)}setTextColor(e){this.#e.setColor(e)}setBoxColor(e){this.#t.setColor(e)}setBorderColor(e){this.#t.setBorderColor(e)}};var N=150,k=25;var J=class{#t;#e;#i;#n;#o;#r;#l;constructor(e,t){this.#i=0,this.#r="0",this.#t=e,this.#e=t?.property,this.#n=new P(R(t?.idleBoxStyle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color},radius:d.Widget.Border.Radius},text:{color:d.Widget.FontColor}})),this.#o=new P(R(t?.highlightBoxStyle,{box:{color:d.Widget.Hover.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color},radius:d.Widget.Border.Radius},text:{color:d.Widget.FontColor}})),this.Set(t?.value===void 0?0:t?.value),this.#l=t?.callback,this.#e!==void 0&&this.#t.addPropertyChangeListener(this.#e,(i,o)=>{this.Set(o)})}Size(){return{x:N,y:k}}Set(e){this.#i!==e&&(this.#i=e,this.#e!==void 0&&this.#t.setProperty(this.#e,this.#i),this.#l!==void 0&&this.#l(this.#i),this.#r=""+parseFloat(this.#i.toPrecision(6)))}ClickStart(){}ClickEnd(){let e=null,t="Set",i="Cancel";new E({title:"Set Number",options:[t,i],content:()=>{let n=document.createElement("div");return e=document.createElement("input"),e.type="number",e.valueAsNumber=this.#i,n.append(e),n},onClose:n=>{n!==t||e===null||this.Set(e.valueAsNumber)}}).Show()}Draw(e,t,i,o){let n={Position:{x:0,y:0},Size:{x:N*i,y:k*i}};g(n.Position,t);let r=this.#n;return o!==void 0&&b(n,o)&&(r=this.#o),r.DrawUnderline(e,n,i,this.#r),n}};var ee=class{#t;#e;#i;#n;#o;#r;constructor(e){this.#t=e?.text===void 0?"Button":e?.text,this.#o=e?.callback,this.#r=!1,this.#e=new P(R(e?.idleStyle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}})),this.#i=new P(R(e?.hoverStyle,{box:{color:d.Widget.Hover.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}})),this.#n=new P(R(e?.clickStyle,{box:{color:d.Widget.Button.Click.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}}))}Size(){return{x:N,y:k}}Draw(e,t,i,o){let n={Position:{x:0,y:0},Size:{x:N*i,y:k*i}};g(n.Position,t);let r=this.#e;return o!==void 0&&!this.#r&&b(n,o)&&(r=this.#i),this.#r&&(r=this.#n),r.Draw(e,n,i,this.#t),n}ClickStart(){this.#r=!0}ClickEnd(){this.#r=!1,this.#o!==void 0&&this.#o()}};function Ct(s){let e=ft(s);return e===null||(e.r+e.g+e.b)/3>.5?"black":"white"}var te=class{#t;#e;#i;#n;#o;#r;constructor(e,t){this.#i="#000000",this.#n=Ct(this.#i),this.Set(t?.value===void 0?"#000000":t?.value),this.#t=e,this.#e=t?.property,this.#o=new P({box:{color:this.#i,border:{color:this.#n,size:d.Widget.Border.Size}},text:t?.textStyle}),this.#r=t?.callback,this.#e!==void 0&&this.#t.addPropertyChangeListener(this.#e,(i,o)=>{this.Set(o)})}Size(){return{x:N,y:k}}Set(e){this.#i!==e&&(this.#i=e,this.#r!==void 0&&this.#r(this.#i),this.#e!==void 0&&this.#t.setProperty(this.#e,this.#i),this.#n=Ct(this.#i),this.#o.setBoxColor(this.#i),this.#o.setBorderColor(this.#n),this.#o.setTextColor(this.#n))}ClickStart(){}ClickEnd(){let e=null;new E({title:"Set Color",options:["Set","Cancel"],content:()=>{let i=document.createElement("div");e=document.createElement("input"),e.type="color",e.value=this.#i,e.name="color",i.append(e);let o=document.createElement("label");return o.htmlFor="color",o.textContent="Color",i.append(o),i},onClose:i=>{i!=="Set"||e===null||this.Set(e.value)}}).Show()}Draw(e,t,i,o){let n={Position:{x:0,y:0},Size:{x:N*i,y:k*i}};return g(n.Position,t),this.#o.Draw(e,n,i,this.#i),n}};var ie=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;#h;#a;#c;#g;#f;#m;constructor(e,t){this.#r=e,this.#i=0,this.#t=t?.min===void 0?0:t?.min,this.#e=t?.max===void 0?1:t?.max,this.#o=t?.snapIncrement,this.#l=t?.property,this.#n="",this.#d=t?.release,this.#h=t?.backgroundColor===void 0?d.Widget.BackgroundColor:t?.backgroundColor,this.#c=t?.fillColor===void 0?d.Widget.Slider.FillColor:t?.fillColor,this.#a=t?.borderColor===void 0?d.Widget.Border.Color:t?.borderColor,this.#u=new W(H(t?.textStyle,{color:d.Widget.FontColor})),this.#g=f(),this.#f=f(),this.#m=!1,t?.property!==void 0&&t?.property!==null&&e.addPropertyChangeListener(t.property,(i,o)=>{this.SetValue(o)}),this.SetValue(t?.value===void 0?0:t?.value),this.#s=t?.change}SetValue(e){let t=Xe(e,this.#t,this.#e);this.#i!==t&&(this.#i=t,this.#l&&this.#r.setProperty(this.#l,this.#i),this.#n=this.#i.toFixed(3),this.#s!==void 0&&this.#s(this.#i))}Size(){return{x:N,y:k}}ClickStart(){this.#m=!0,g(this.#f,this.#g)}ClickEnd(){this.#m=!1,this.#d!==void 0&&this.#d(this.#i)}Draw(e,t,i,o){let n=N*i,r=k*i,l=d.Widget.Border.Size*i;e.fillStyle=this.#h,e.strokeStyle=this.#a,e.lineWidth=l,e.beginPath(),e.roundRect(t.x,t.y,n,r,d.Widget.Border.Radius*i),e.fill(),e.stroke();let h=_((this.#i-this.#t)/(this.#e-this.#t));if(e.fillStyle=this.#c,e.beginPath(),e.roundRect(t.x+l/2,t.y+l/2,n*h-l,r-l,d.Widget.Border.Radius*i),e.fill(),e.textAlign="center",e.textBaseline="middle",this.#u.setupStyle(e,i),e.fillText(this.#n,t.x+n/2,t.y+r/2),o!==void 0&&(g(this.#g,o),this.#m)){let a=t.x+l/2,c=a+n-l,p=_((this.#g.x-a)/(c-a))*(this.#e-this.#t)+this.#t;this.#o!==void 0&&(p=Math.round(p/this.#o)*this.#o),this.SetValue(p)}return{Position:{x:t.x,y:t.y},Size:{x:n,y:r}}}};function ue(s){let e=null;return new E({title:s.title,options:["Set","Cancel"],content:()=>{let t=document.createElement("div");return e=document.createElement("input"),e.value=s.startingValue,t.append(e),t},onClose:t=>{if(t!=="Set"||e===null){s.onCancel&&s.onCancel();return}s.onUpdate(e.value)}})}var oe=class{#t;#e;#i;#n;#o;#r;constructor(e,t){this.#t="",this.#o=e,this.#r=t?.property,this.#e=new P(R(t?.textBoxStyle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color},radius:d.Widget.Border.Radius},text:{color:d.Widget.FontColor}})),this.#i=new P(R(t?.textBoxStyle,{box:{color:d.Widget.Hover.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color},radius:d.Widget.Border.Radius},text:{color:d.Widget.FontColor}})),this.Set(t?.value===void 0?"":t?.value),this.#n=t?.callback,this.#r!==void 0&&this.#o.addPropertyChangeListener(this.#r,(i,o)=>{this.Set(o)})}Size(){return{x:N,y:k}}Set(e){this.#t!==e&&(this.#t=e,this.#r!==void 0&&this.#o.setProperty(this.#r,this.#t),this.#n!==void 0&&this.#n(this.#t))}ClickStart(){}ClickEnd(){ue({title:"Set String",startingValue:this.#t,onUpdate:t=>{this.Set(t)}}).Show()}Draw(e,t,i,o){let n={Position:{x:0,y:0},Size:{x:N*i,y:k*i}};g(n.Position,t);let r=this.#e;return o!==void 0&&b(n,o)&&(r=this.#i),r.DrawUnderline(e,n,i,ut(e,this.#t,n.Size.x-20*i)),n}};var Te=class{#t;#e;#i;#n;#o;#r;constructor(e){this.#t=new P(R(e?.idle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}})),this.#e=new P(R(e?.hover,{box:{color:d.Widget.Hover.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}})),this.#i=e?.lightColor===void 0?"#222222":e.lightColor,this.#n=e?.lightBorderColor===void 0?"black":e.lightBorderColor,this.#o=e?.lightBlur,this.#r={Position:{x:0,y:0},Size:{x:0,y:0}}}Draw(e,t,i,o,n){let r=N*i,l=k*i;this.#r.Size.x=r,this.#r.Size.y=l,g(this.#r.Position,t);let h=this.#t;n!==void 0&&b(this.#r,n)&&(h=this.#e),h.Draw(e,this.#r,i,o);let a=Math.min(r,l);return e.strokeStyle=this.#n,e.fillStyle=this.#i,e.beginPath(),e.roundRect(t.x+a*.2,t.y+a*.2,a*.6,a*.6,d.Widget.Border.Radius*i),this.#o&&(e.shadowBlur=this.#o*i,e.shadowColor=this.#i),e.fill(),this.#o&&(e.shadowBlur=0),this.#r}},ne=class{#t;#e;#i;#n;#o;#r;#l;constructor(e,t){this.#i=!1,this.#t=e,this.#e=t?.property,this.#n=t?.text===void 0?"Toggle":t?.text,this.#o=new Te({idle:R(t?.enabledStyle?.idle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}}),lightBorderColor:t?.enabledStyle?.lightBorderColor,lightColor:t?.enabledStyle?.lightColor===void 0?"#00FF00":t?.enabledStyle?.lightColor,lightBlur:t?.enabledStyle?.lightBlur===void 0?15:t?.enabledStyle?.lightBlur}),this.#r=new Te({idle:R(t?.disabledStyle?.idle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}}),lightBorderColor:t?.disabledStyle?.lightBorderColor,lightColor:t?.disabledStyle?.lightColor===void 0?"#004400":t?.enabledStyle?.lightColor}),this.Set(t?.value===void 0?!1:t?.value),this.#l=t?.callback,this.#e!==void 0&&this.#t.addPropertyChangeListener(this.#e,(i,o)=>{this.Set(o)})}Size(){return{x:N,y:k}}Draw(e,t,i,o){return(this.#i?this.#o:this.#r).Draw(e,t,i,this.#n,o)}Toggle(){this.Set(!this.#i)}Set(e){this.#i!==e&&(this.#i=e,this.#e!==void 0&&this.#t.setProperty(this.#e,this.#i),this.#l!==void 0&&this.#l(this.#i))}ClickStart(){this.Toggle()}ClickEnd(){}};var re=class{#t;#e;#i;#n;constructor(e){this.#i=e?.maxWidth===void 0?150:e?.maxWidth,this.#n=e?.maxHeight===void 0?150:e?.maxHeight,e?.image?this.SetUrl(e?.image):e?.blob&&this.SetBlob(e?.blob)}SetBlob(e){let i=(window.URL||window.webkitURL).createObjectURL(e);this.SetUrl(i)}SetUrl(e){this.#e=void 0,this.#t=e;let t=document.createElement("img");t.src=e,t.onload=()=>{this.#e=t},t.onerror=i=>{console.log("error loading image:",e,i)}}Size(){if(this.#e===void 0)return{x:0,y:0};let e=1;if(this.#e.width>this.#i&&(e=this.#i/this.#e.width),this.#e.height>this.#n){let t=this.#n/this.#e.height;t<e&&(e=t)}return{x:e*this.#e.width,y:e*this.#e.height}}ClickStart(){}ClickEnd(){}Draw(e,t,i,o){let n=this.Size(),r={Position:{x:0,y:0},Size:{x:n.x*i,y:n.y*i}};return g(r.Position,t),this.#e&&e.drawImage(this.#e,t.x,t.y,r.Size.x,r.Size.y),r}};var xe=class{#t;#e;#i;#n;#o;constructor(e,t){this.#o=f(),this.#i=e,this.#n=t?.property,this.#t=new y("",H(t?.textBoxStyle,{font:d.FontFamily,color:d.Widget.FontColor,size:d.Note.FontSize})),this.Set(t?.value===void 0?"":t?.value),this.#e=t?.callback,this.#n!==void 0&&this.#i.addPropertyChangeListener(this.#n,(i,o)=>{this.Set(o)})}Size(){return this.#o}Set(e){this.#t.get()!==e&&(this.#t.set(e),this.#n!==void 0&&this.#i.setProperty(this.#n,e),this.#e!==void 0&&this.#e(e))}ClickStart(){}ClickEnd(){}Draw(e,t,i,o){this.#t.size(e,i,this.#o);let n={Position:{x:0,y:0},Size:this.#o};return g(n.Position,t),this.#t.size(e,1,this.#o),e.textAlign="left",this.#t.render(e,i,n.Position),n}};var Je=class{#t;constructor(){this.#t=new Map}register(e,t){this.#t.set(e,t)}create(e,t,i){let o=this.#t.get(t);if(o===void 0)throw new Error("no builder registered for widget: "+t);return o(e,i)}},O=new Je;O.register("button",(s,e)=>new ee(e));O.register("number",(s,e)=>new J(s,e));O.register("color",(s,e)=>new te(s,e));O.register("slider",(s,e)=>new ie(s,e));O.register("string",(s,e)=>new oe(s,e));O.register("toggle",(s,e)=>new ne(s,e));O.register("image",(s,e)=>new re(e));O.register("text",(s,e)=>new xe(s,e));function xt(s,e,t,i){return o=>{let n="#00FF00";o.outPort!==null?n=o.outPort.filledStyleColor():o.inPort!==null&&(n=o.inPort.filledStyleColor());let r=s*o.graphScale;e!==void 0&&(n=e),(o.mouseOver||o.inNode?.selected()||o.outNode?.selected())&&(r=t*o.graphScale,o.ctx.shadowBlur=25*o.graphScale,i!==void 0&&(n=i),o.ctx.shadowColor=n),o.ctx.strokeStyle=n,o.ctx.lineWidth=r,o.ctx.beginPath(),o.ctx.moveTo(o.start.x,o.start.y);let l=(o.start.x+o.end.x)/2;o.ctx.bezierCurveTo(l,o.start.y,l,o.end.y,o.end.x,o.end.y),o.ctx.stroke(),o.ctx.shadowBlur=0}}var be=class{#t;#e;#i;#n;#o;#r;#l;constructor(e,t,i,o,n){this.#i=e,this.#n=t,this.#o=i,this.#r=o,this.#l=n,this.#t=f(),this.#e=f(),e!==null&&e.inputPort(this.#n).addConnection(this),i!==null&&i.outputPort(this.#r).addConnection(this)}render(e,t,i,o){if(!(this.#i===null&&this.#o===null)){if(this.#i!==null){let n=this.#i.inputPortPosition(this.#n);if(n===void 0)return;je(n,this.#t)}else if(o!==void 0)this.#t.x=o.x,this.#t.y=o.y;else return;if(this.#o!==null){let n=this.#o.outputPortPosition(this.#r);if(n===void 0)return;je(n,this.#e)}else if(o!==void 0)this.#e.x=o.x,this.#e.y=o.y;else return;this.#l({ctx:e,start:this.#t,end:this.#e,graphScale:t,mouseOver:i,inPort:this.inPort(),inNode:this.#i,outPort:this.outPort(),outNode:this.#o})}}inNode(){return this.#i}outNode(){return this.#o}clearPort(e){if(this.#i!==null){let t=this.#i.inputPortPosition(this.#n);t!==void 0&&b(t,e)&&this.clearInput()}if(this.#o!==null){let t=this.#o.outputPortPosition(this.#r);t!==void 0&&b(t,e)&&this.clearOutput()}}clearPorts(){this.clearInput(),this.clearOutput()}setInput(e,t,i){this.#i=e,this.#n=t;let o=this.#i.inputPort(t);!!i&&o.connections().length>0?o.replaceConnection(this,0):o.addConnection(this)}setOutput(e,t){this.#o=e,this.#r=t,this.#o.outputPort(t).addConnection(this)}clearInput(){this.#i?.inputPort(this.#n).clearConnection(this),this.#i=null,this.#n=-1}clearOutput(){this.#o?.outputPort(this.#r).clearConnection(this),this.#o=null,this.#r=-1}mouseOverPort(e){if(this.#i!==null){let t=this.#i.inputPortPosition(this.#n);if(t!==void 0&&b(t,e))return this.#i.inputPort(this.#n)}if(this.#o!==null){let t=this.#o.outputPortPosition(this.#r);if(t!==void 0&&b(t,e))return this.#o.outputPort(this.#r)}return null}outPort(){return this.#o===null?null:this.#o.outputPort(this.#r)}inPort(){return this.#i===null?null:this.#i.inputPort(this.#n)}referencesNode(e){return this.#i===e||this.#o===e}};var ce=class{zoom;position;constructor(){this.zoom=1,this.position=f()}screenSpaceToGraphSpace(e,t){let i=this.zoom;t.x=e.x/i-this.position.x/i,t.y=e.y/i-this.position.y/i}graphSpaceToScreenSpace(e,t){t.x=this.position.x+e.x*this.zoom,t.y=this.position.y+e.y*this.zoom}reset(){this.zoom=1,this.position.x=0,this.position.y=0}};function bt(s,e,t,i,o,n){let r=s.connectedInputsNodeReferencesByIndex(i);for(let l=0;l<r.length;l++){let h=t.get(r[l]);!n.has(r[l])||(e[h]=o,bt(s,e,t,h,o-1,n))}}function St(s,e,t,i,o,n){let r=s.connectedInputsNodeReferencesByIndex(i);for(let l=0;l<r.length;l++){let h=t.get(r[l]);!n.has(r[l])||(e[h]=o,St(s,e,t,h,o+1,n))}}function et(s,e,t){let i=e.getNodes(),o=new Map,n=new Array(i.length),r=new Array(i.length),l=new Array(i.length),h=new Map;if(t){if(t.length<2)return;for(let u=0;u<t.length;u++)h.set(i[t[u]],!0)}else for(let u=0;u<i.length;u++)h.set(i[u],!0);let a=new ce;for(let u=0;u<i.length;u++)n[u]=i[u].calculateBounds(s,a),r[u]=new Array(i.length),o.set(i[u],u),l[u]=!1;for(let u=0;u<i.length;u++)r[u][u]=0,bt(e,r[u],o,u,-1,h),St(e,r[u],o,u,1,h);let c=new Array(h.size),m=0;for(let u=0;u<i.length;u++){if(!h.has(i[u]))continue;let S=0,v=0;for(let M=0;M<i.length;M++){let L=r[u][M];L!==void 0&&(S=Math.min(S,L),v=Math.max(v,L))}c[m]={length:v-S,node:u,min:S,max:v},m++}c.sort((u,S)=>S.length-u.length);let p=Array(c[0].length+1);for(let u=0;u<p.length;u++)p[u]={Nodes:new Array,Width:0};for(let u=0;u<c.length;u++){let S=c[u];if(l[S.node]===!0)continue;let v=r[S.node];for(let M=0;M<v.length;M++){let L=v[M];if(L===void 0||l[M]===!0)continue;let q=n[M],C=p[L-S.min];C.Nodes.push(i[M]),C.Width=Math.max(C.Width,q.Size.x),l[M]=!0}}let F=0;for(let u=0;u<p.length;u++)F+=p[u].Width;let G=100,T=50,j=0;for(let u=0;u<p.length;u++){var V=p[u];let S=0;j-=G+V.Width;for(let v=0;v<V.Nodes.length;v++){let M=V.Nodes[v],L=n[o.get(M)],q={x:j+F+p.length*G,y:S};S+=L.Size.y+T,M.setPosition(q)}}}function Y(s,e){let t=s+"_Start",i=s+"_End";performance.mark(t),e(),performance.mark(i),performance.measure(s,t,i)}var Se=class{#t;#e;#i;#n;constructor(e){if(this.#t=e?.name===void 0?"Unknown":e.name,this.#e=e?.description===void 0?"":e.description,this.#i=e?.version===void 0?"v0.0.0":e.version,this.#n=new Map,e?.nodes!==void 0)for(let t in e.nodes)this.register(t,e.nodes[t])}nodes(){return this.#n}register(e,t){this.#n.set(e,t)}unregister(e){return this.#n.delete(e)}#o(e,t,i,o){let n=[],r=new Map;for(let[h,a]of i){let c=h.indexOf("/"),m=h.indexOf("[");if(c===-1||m!==-1&&m<c)n.push({name:h,callback:()=>{let p=new se(a);p.setPosition(o),e.addNode(p)}});else{let p=h.split("/");r.has(p[0])||r.set(p[0],new Map);let F=r.get(p[0]);p.shift(),F?.set(p.join("/"),a)}}let l=[];for(let[h,a]of r)l.push(this.#o(e,h,a,o));return{name:t,items:n,subMenus:l}}contextMenu(e,t){return this.#o(e,this.#t,this.#n,t)}create(e){let t=this.#n.get(e);if(t===void 0)throw new Error("no builder registered for node: "+e);return new se(t)}};var Me=class{#t;#e;constructor(e){if(this.#t=new Map,this.#e=new Array,e?.onNodeCreated&&this.#e.push(e?.onNodeCreated),e?.publishers!==void 0)for(let t in e.publishers)this.addPublisher(t,new Se(e.publishers[t]))}addOnNodeCreatedListener(e){this.#e.push(e)}addPublisher(e,t){this.#t.set(e,t)}create(e,t){let i=this.#t.get(e);if(i===void 0)throw new Error("no publisher registered with identifier: "+e);let o=i.create(t);for(let n=0;n<this.#e.length;n++){let r=this.#e[n];r(e,t,o)}return o}newNodeSubmenus(e,t){let i=[];for(let[o,n]of this.#t)i.push(n.contextMenu(e,t));return i}openMenu(e,t){return{name:"New Node",group:z,subMenus:this.newNodeSubmenus(e,t)}}};var z="node-flow-graph-node-menu";function Ft(s){return s?.renderer!==void 0?s.renderer:xt(s?.size===void 0?2:s.size,void 0,s?.mouseOverSize===void 0?4:s.mouseOverSize,void 0)}var ze=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;#h;#a;#c;#g;#f;#m;#v;#y;#C;constructor(e,t){this.#t=e,this.#e=[],this.#n=-1,this.#o=new w,this.#r=null,this.#s=null,this.#d=null,this.#u=null,this.#i=new Array,this.#a=new Me(t?.nodes),this.#l=Ft(t?.idleConnection),this.#C=new Array,this.#y=new Array,this.#h="default",this.#c=!1,this.#g=f(),this.#f=f(),this.#m=new w,this.#v=new D({border:{color:d.BoxSelect.Color,size:d.BoxSelect.Size},color:"rgba(0,0,0,0)",radius:d.BoxSelect.Radius})}addPublisher(e,t){this.#a.addPublisher(e,t)}addOnNodeCreatedListener(e){this.#a.addOnNodeCreatedListener(e)}nodeFactory(){return this.#a}addOnNodeAddedListener(e){e!=null&&this.#C.push(e)}addOnNodeRemovedListener(e){e!=null&&this.#y.push(e)}clickStart(e,t,i){this.#c=!1;let o=!1;if(this.#n>-1){this.#A(this.#n,!i);for(let n=0;n<this.#e.length;n++)this.#e[n].selected()&&this.#o.Push(n);o=!0}if(this.#d!==null&&(this.#d.ClickStart(),this.#u=this.#d,o=!0),this.#s===null)return i&&!o&&(t.screenSpaceToGraphSpace(e,this.#g),g(this.#f,this.#g),this.#c=!0),o||i;if(this.#s.InputPort){for(let n=0;n<this.#i.length;n++)if(this.#i[n].inPort()===this.#s.Port){this.#i[n].clearInput(),this.#r=this.#i[n];break}}else{let n=this.#s.Node,r=this.#s.Index,l=this.#s.Node,h=this.#s.Index;this.#s.InputPort?(l=null,h=-1):(n=null,r=-1);let a=new be(n,r,l,h,this.#l);this.#r=a,this.#i.push(a)}return!0}mouseDragEvent(e,t){let i=!1;return x.run(()=>{let o=x.get();if(o.x=e.x/t,o.y=e.y/t,ge(this.#f,this.#f,o),this.#p())for(let n=0;n<this.#o.Count();n++){let r=this.#e[this.#o.At(n)];r.locked()||(r.translate(o),i=!0)}}),i?!0:this.#T()||this.#V()||this.#c}clearNodeInputConnection(e,t){let i=e.inputPort(t);for(let o=this.#i.length-1;o>=0;o--)this.#i[o].inPort()===i&&this.#b(this.#i[o],!0)}clickEnd(){for(let i=0;i<this.#o.Count();i++)this.#e[this.#o.At(i)].raiseDragStoppedEvent();if(this.#o.Clear(),this.#c){for(let i=0;i<this.#m.Count();i++)this.#S(this.#e[this.#m.At(i)],!1);this.#m.Clear(),this.#c=!1}if(this.#u!==null&&(this.#u.ClickEnd(),this.#u=null),this.#r===null)return;if(this.#s===null){this.#w();return}let e=this.#s.Port,t=this.#r;if(e===t.inPort()||e===t.outPort()){this.#w();return}if(this.#s.InputPort&&t.inPort()!==null){this.#w();return}if(!this.#s.InputPort&&t.outPort()!==null){this.#w();return}if(this.#s.InputPort&&this.#s.Port.getDataType()!==t.outPort()?.getDataType()){this.#w();return}if(!this.#s.InputPort&&this.#s.Port.getDataType()!==t.inPort()?.getDataType()){this.#w();return}if(this.#s.InputPort){let i=!1,o=this.#s.Node.inputPort(this.#s.Index);this.#s.Port.getPortType()!=="INPUTARRAY"&&o.connections().length>0&&(i=!0),i&&(o.connections()[0].clearOutput(),this.#b(o.connections()[0],!1)),t.setInput(this.#s.Node,this.#s.Index,i)}else t.setOutput(this.#s.Node,this.#s.Index);this.#r=null}connectNodes(e,t,i,o){let n=e.outputPort(t).getDataType(),r=i.inputPort(o).getDataType();if(n!==r){console.error("can't connect nodes of different types",n,r);return}let l=i.inputPort(o).connections();for(let a=0;a<l.length;a++){let c=l[a];if(c.outNode()===e&&c.outPort()===e.outputPort(t))return}let h=new be(i,o,e,t,this.#l);return this.#i.push(h),h}getNodes(){return this.#e}connectedInputsNodeReferencesByIndex(e){return this.connectedInputsNodeReferences(this.#e[e])}connectedInputsNodeReferences(e){let t=new Array;for(let i=0;i<this.#i.length;i++){let o=this.#i[i];if(e!==o.inNode())continue;let n=o.outNode();n!==null&&t.push(n)}return t}connectedOutputsNodeReferences(e){let t=this.#e[e],i=new Array;for(let o=0;o<this.#i.length;o++){let n=this.#i[o];if(t!==n.outNode())continue;let r=n.inNode();r!==null&&i.push(r)}return i}addNode(e){this.#e.push(e);for(let t=0;t<this.#C.length;t++){let i=this.#C[t];!i||i(e)}}fileDrop(e){return this.#n===-1?!1:(this.#e[this.#n].dropFile(e),!0)}#x(e){if(e>=this.#e.length||e<0){console.error("invalid node connection");return}for(let t=this.#i.length-1;t>=0;t--)this.#i[t].referencesNode(this.#e[e])&&this.#M(t,!0)}#p(){return this.#o.Count()>0}#T(){return this.#r!==null}#V(){return this.#u!==null}removeNode(e){for(let t=0;t<this.#e.length;t++)this.#e[t]===e&&this.#N(t)}#N(e){this.#x(e);let t=this.#e[e];this.#e.splice(e,1);for(let i=0;i<this.#y.length;i++)this.#y[i](t)}#M(e,t){t&&this.#i[e].clearPorts(),this.#i.splice(e,1)}#b(e,t){let i=this.#i.indexOf(e);i>-1?this.#M(i,t):console.error("no connection found to remove")}organize(e){et(e,this)}#k(){let e=new Array;for(let t=0;t<this.#e.length;t++)this.#e[t].selected()&&e.push(t);return e}#B(e){et(e,this,this.#k())}openContextMenu(e,t){let i={name:"Organize",group:z,items:[{name:"All Nodes",group:z,callback:()=>{this.organize(e)}}]},o={items:[],subMenus:[i,this.#a.openMenu(this,t)]};if(this.#k().length>0&&i.items?.push({name:"Selected Nodes",group:z,callback:()=>{this.#B(e)}}),this.#n>-1){let n=this.#n,r=this.#e[n];o.subMenus?.push({group:z,name:"Select",items:[{name:"Direct Connected Nodes",group:z,callback:()=>{this.#z(n)}},{name:"Input Nodes + Descendents",group:z,callback:()=>{this.#P(r)}}]}),o.subMenus?.push({group:z,name:"Delete",items:[{name:"Node",group:z,callback:()=>{this.#N(n)}},{name:"Connections",group:z,callback:()=>{this.#x(n)}}]}),o=X(o,r.contextMenu())}return o}#P(e){if(e===void 0)return;this.#S(e,!1);let t=this.connectedInputsNodeReferences(e);for(let i=0;i<t.length;i++)this.#P(t[i])}#z(e){let t=this.#e[e];if(t===void 0)return;this.#S(t,!1);let i=this.connectedOutputsNodeReferences(e);for(let n=0;n<i.length;n++)this.#S(i[n],!1);let o=this.connectedInputsNodeReferencesByIndex(e);for(let n=0;n<o.length;n++)this.#S(o[n],!1)}#A(e,t){this.#S(this.#e[e],t)}#S(e,t){if(e.select(),!!t)for(let i=0;i<this.#e.length;i++)e!==this.#e[i]&&this.#e[i].unselect()}#w(){this.#r!==null&&(this.#b(this.#r,!0),this.#r=null)}#R(e,t,i){for(let o=0;o<this.#i.length;o++){let n=!1;i!==void 0&&(n=this.#i[o].mouseOverPort(i)!==null),this.#i[o].render(e,t.zoom,n,i)}}#W(e,t,i){this.#s=null,this.#d=null,this.#n=-1,this.#m.Clear();let o=this.#F(t);for(let n=0;n<this.#e.length;n++){let r=0;if(i!==void 0&&!this.#c){let l=this.#e[n].inBounds(e,t,i);l.Node!==void 0&&l.PortIndex===void 0&&l.Widget===void 0&&(r=1,this.#n=n,this.#h="grab"),l.Widget!==void 0&&(this.#d=l.Widget,this.#h="pointer"),l.Port!==void 0&&l.Node!==void 0&&l.PortIndex!==void 0&&l.PortIsInput!==void 0&&(this.#s={Index:l.PortIndex,Node:l.Node,Port:l.Port,InputPort:l.PortIsInput})}else if(this.#c){let l=this.#e[n].calculateBounds(e,t);ht(o,l)&&(r=1,this.#m.Push(n))}this.#e[n].selected()&&this.#o.Count()>0&&(r=2,this.#h="grabbing"),this.#e[n].render(e,t,r,i,this.#t)}}#F(e){let t={Position:f(),Size:f()};return e.graphSpaceToScreenSpace(this.#g,t.Position),e.graphSpaceToScreenSpace(this.#f,t.Size),Ne(t.Size,t.Size,t.Position),t}render(e,t,i){if(this.#h="default",Y("Render_Connections",()=>{this.#R(e,t,i)}),Y("Render_Nodes",()=>{this.#W(e,t,i)}),this.#c){let o=this.#F(t);e.setLineDash([d.BoxSelect.LineDashLength]),this.#v.Draw(e,o,1),e.setLineDash([])}return{cursorStyle:this.#h}}};function we(s){let e=new Array,t="Set",i="Cancel";return new E({title:s.title,options:[t,i],content:()=>{let o=document.createElement("div");o.style.flexDirection="column",o.style.display="flex";for(let n=0;n<s.form.length;n++){let r=document.createElement("h4");r.innerText=s.form[n].name,o.append(r);let l=document.createElement("input");l.value=s.form[n].startingValue,l.type=s.form[n].type,o.append(l),e.push(l),o.append(document.createElement("br"))}return o},onClose:o=>{if(o!==t||e===null){s.onCancel&&s.onCancel();return}let n=new Array;for(let r=0;r<s.form.length;r++)n[r]=e[r]?.value;s.onUpdate(n)}})}var tt=150,Wt=(i=>(i.Info="info",i.Warning="warning",i.Error="error",i))(Wt||{});function Dt(s){switch(s){case"info":return d.Node.Message.InfoColor;case"warning":return d.Node.Message.WarnColor;case"error":return d.Node.Message.ErrorColor;default:throw new Error(`unrecognized message type ${s}`)}}var wt=(i=>(i[i.Idle=0]="Idle",i[i.MouseOver=1]="MouseOver",i[i.Grabbed=2]="Grabbed",i))(wt||{}),Ae=class{#t;#e;constructor(e){this.#e=e.alwaysShow?e.alwaysShow:!1,this.#t=new y(e.message,{color:e.color?e.color:Dt(e.type?e.type:"info")},{LineSpacing:2.5,MaxWidth:200})}render(e,t,i,o){return!this.#e&&!o?0:(e.textAlign="center",this.#t.render(e,t,i),this.#t.height(e)*t)}},se=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;#h;#a;#c;#g;#f;#m;#v;#y;#C;#x;#p;#T;#V;#N;#M;#b;#k;#B;#P;#z;#A;#S;#w;#R;constructor(e){if(this.#l=new Array,this.#s=new Array,this.#d=new Array,this.#P=new w,this.#z=new w,this.#A=new w,this.#k=15,this.#u=e?.locked===void 0?!1:e.locked,this.#S=e?.data===void 0?{}:e?.data,this.#R=new Map,this.#w=new Array,this.#c=e?.canEditPorts===void 0?!1:e.canEditPorts,this.#h=e?.canEditTitle===void 0?!1:e.canEditTitle,this.#a=e?.canEditInfo===void 0?!1:e.canEditInfo,this.#g=e?.contextMenu===void 0?null:e.contextMenu,this.#f=e?.metadata,this.#r=[],e?.messages)for(let t=0;t<e.messages.length;t++){let i=e.messages[t];this.#r.push(new Ae(i))}if(this.#B=!1,this.#m=new Array,this.#v=new Array,this.#y=new Array,this.#C=new Array,this.#x=new Array,this.#p=new Array,e?.onSelect&&this.#m.push(e?.onSelect),e?.onUnselect&&this.#v.push(e?.onUnselect),e?.onFileDrop&&this.#y.push(e?.onFileDrop),e?.onDragStop&&this.#C.push(e.onDragStop),e?.onTitleChange&&this.#x.push(e.onTitleChange),e?.onInfoChange&&this.#p.push(e.onInfoChange),this.#t=e?.position===void 0?{x:0,y:0}:e.position,this.#e=new y(e?.title===void 0?"":e.title,H(e?.style?.title?.textStyle,{size:16,weight:"bold",color:d.Node.FontColor})),this.#i=new y(e?.subTitle===void 0?"":e.subTitle,H(e?.style?.title?.textStyle,{size:10,weight:"bold",color:d.Node.FontColor})),this.#n=new y("i",{size:13,weight:"bold",color:d.Node.FontColor}),this.#o=e?.info?e?.info:"",this.#T=e?.style?.title?.color===void 0?"#154050":e?.style?.title?.color,this.#M=e?.style?.title?.padding===void 0?15:e?.style?.title?.padding,this.#N=new Map,this.#N.set(0,new D(K(e?.style?.idle,{border:{color:d.Node.Border.Idle,size:1},radius:d.Node.BorderRadius,color:d.Node.BackgroundColor}))),this.#N.set(1,new D(K(e?.style?.mouseOver,{border:{color:d.Node.Border.MouseOver,size:1.1},radius:d.Node.BorderRadius,color:d.Node.BackgroundColor}))),this.#N.set(2,new D(K(e?.style?.grabbed,{border:{color:d.Node.Border.Grabbed,size:2},radius:d.Node.BorderRadius,color:d.Node.BackgroundColor}))),this.#V=new D(K(e?.style?.selected,{border:{color:d.Node.Border.Selected,size:1},radius:d.Node.BorderRadius,color:d.Node.BackgroundColor})),this.#b=new W({size:e?.style?.portText?.size===void 0?14:e?.style?.portText?.size,color:e?.style?.portText?.color===void 0?d.Node.Port.FontColor:e?.style?.portText?.color,font:e?.style?.portText?.font,weight:e?.style?.portText?.weight}),e?.inputs!==void 0)for(let t=0;t<e.inputs.length;t++)this.addInput(e.inputs[t]);if(e?.outputs!==void 0)for(let t=0;t<e.outputs.length;t++)this.addOutput(e.outputs[t]);if(e?.widgets!==void 0)for(let t=0;t<e.widgets.length;t++){let i=e.widgets[t];i.type!==void 0&&this.addWidget(O.create(this,i.type,i.config))}}metadata(){return this.#f}selected(){return this.#B}select(){if(!this.#B){this.#B=!0;for(let e=0;e<this.#m.length;e++)this.#m[e]()}}raiseDragStoppedEvent(){for(let e=0;e<this.#C.length;e++)this.#C[e](this)}addTitleChangeListener(e){e==null,this.#x.push(e)}addInfoChangeListener(e){e==null,this.#p.push(e)}addDragStoppedListener(e){e==null,this.#C.push(e)}addAnyPropertyChangeListener(e){e==null,this.#w.push(e)}addPropertyChangeListener(e,t){this.#R.has(e)||this.#R.set(e,[]);let i=this.#R.get(e);i!==void 0&&i.push(t)}setProperty(e,t){let i=this.#S[e];if(i===t)return;this.#S[e]=t;for(let n=0;n<this.#w.length;n++)this.#w[n](e,i,t);let o=this.#R.get(e);if(o!==void 0)for(let n=0;n<o.length;n++)o[n](i,t)}getProperty(e){return this.#S[e]}#W(){ue({title:"Set Node Title",startingValue:this.title(),onUpdate:e=>{this.setTitle(e)}}).Show()}#F(){ue({title:"Set Node Info",startingValue:this.#o,onUpdate:e=>{this.setInfo(e)}}).Show()}#D(){ue({title:"New Button Widget Text",startingValue:"My Button",onUpdate:e=>{this.addWidget(new ee({text:e}))}}).Show()}#E(){return{name:"Widget",items:[{name:"Button",callback:this.#D.bind(this)},{name:"Number",callback:()=>{this.addWidget(new J(this))}},{name:"Color",callback:()=>{this.addWidget(new te(this))}},{name:"Slider",callback:()=>{we({title:"New Slider",form:[{name:"min",type:"number",startingValue:0},{name:"max",type:"number",startingValue:100}],onUpdate:e=>{this.addWidget(new ie(this,{min:e[0],max:e[1]}))}}).Show()}},{name:"String",callback:()=>{this.addWidget(new oe(this))}},{name:"Toggle",callback:()=>{this.addWidget(new ne(this))}},{name:"Image",callback:()=>{we({title:"New Image",form:[{name:"URL",type:"text",startingValue:"https://pbs.twimg.com/media/GYabtu6bsAA7m99?format=jpg&name=medium"},{name:"Max Width",type:"number",startingValue:tt},{name:"Max Height",type:"number",startingValue:tt}],onUpdate:e=>{this.addWidget(new re({image:e[0],maxWidth:e[1],maxHeight:e[2]}))}}).Show()}}]}}contextMenu(){let e={group:z,items:[],subMenus:[]};if(this.canEditPorts()||this.canEditTitle()||this.#a){let t=new Array;this.canEditTitle()&&t.push({name:"Title",callback:()=>{this.#W()}}),this.#a&&t.push({name:"Info",callback:()=>{this.#F()}});let i=new Array;this.canEditPorts()&&i.push({name:"Add",items:[{name:"Input",callback:()=>{we({title:"New Input",form:[{name:"name",type:"text",startingValue:"input"},{name:"type",type:"text",startingValue:"string"}],onUpdate:o=>{this.addInput({name:o[0],type:o[1]})}}).Show()}},{name:"Output",callback:()=>{we({title:"New Output",form:[{name:"name",type:"text",startingValue:"output"},{name:"type",type:"text",startingValue:"string"}],onUpdate:o=>{this.addOutput({name:o[0],type:o[1]})}}).Show()}}],subMenus:[this.#E()]}),e.subMenus?.push({group:z,name:"Edit",items:t,subMenus:i})}return this.locked()?e.items?.push({name:"Unlock Node Position",group:z,callback:this.unlock.bind(this)}):e.items?.push({name:"Lock Node Position",group:z,callback:this.lock.bind(this)}),this.#g!==null&&(e=X(e,this.#g)),e}unselect(){if(!!this.#B){this.#B=!1;for(let e=0;e<this.#v.length;e++)this.#v[e]()}}addUnselectListener(e){this.#v.push(e)}addSelectListener(e){this.#m.push(e)}dropFile(e){for(let t=0;t<this.#y.length;t++)this.#y[t](e)}addFileDropListener(e){this.#y.push(e)}locked(){return this.#u}lock(){this.#u=!0}unlock(){this.#u=!1}setPosition(e){g(this.#t,e)}getPosition(){return this.#t}calculateBounds(e,t){let i=f(),o=this.#M*2,n=f();t.graphSpaceToScreenSpace(this.#t,n);let r=f();this.#e.size(e,1,r);let l=f();this.#i.size(e,1,l),r.x=Math.max(r.x,l.x),this.#o!==""&&(r.x+=r.y*4),r.x+=o,r.y+=o+this.#k*this.#l.length;for(let h=0;h<this.#l.length;h++){let a=this.#l[h];this.#b.measure(e,1,a.getDisplayName(),i),r.y+=i.y,r.x=Math.max(r.x,i.x+o)}r.y+=this.#k*this.#s.length;for(let h=0;h<this.#s.length;h++){let a=this.#s[h];this.#b.measure(e,1,a.getDisplayName(),i),r.y+=i.y,r.x=Math.max(r.x,i.x+o)}r.y+=this.#k*this.#d.length;for(let h=0;h<this.#d.length;h++){let c=this.#d[h].Size();r.y+=c.y,r.x=Math.max(r.x,c.x+o)}return r.y+=this.#k,r.x=Math.max(r.x,tt),Q(r,t.zoom),{Position:n,Size:r}}addInput(e){let t=new ye(this,e.array?"INPUTARRAY":"INPUT",e);return this.#l.push(t),t}addOutput(e){let t=new ye(this,"OUTPUT",e);return this.#s.push(t),t}addWidget(e){this.#d.push(e)}removeWidget(e){let t=this.#d.indexOf(e,0);if(t===-1)throw new Error("node does not contain widget");this.#d.splice(t,1)}getWidget(e){return this.#d[e]}widgetCount(){return this.#d.length}translate(e){this.#t.x+=e.x,this.#t.y+=e.y}inBounds(e,t,i){var o={};let n=this.calculateBounds(e,t);b(n,i)&&(o.Node=this);for(let r=0;r<this.#P.Count();r++)b(this.#P.At(r),i)&&(o.Node=this,o.PortIndex=r,o.PortIsInput=!0,o.Port=this.#l[r]);for(let r=0;r<this.#z.Count();r++)b(this.#z.At(r),i)&&(o.Node=this,o.PortIndex=r,o.PortIsInput=!1,o.Port=this.#s[r]);for(let r=0;r<this.#A.Count();r++)b(this.#A.At(r),i)&&(o.Node=this,o.WidgetIndex=r,o.Widget=this.#d[r]);return o}canEditTitle(){return this.#h}canEditPorts(){return this.#c}title(){return this.#e.get()}setTitle(e){if(!this.#h){console.warn("setTitle instruction ignored, as node has been marked un-editable");return}let t=e;t==null&&(t="");let i=this.title();if(t!==i){this.#e.set(t);for(let o=0;o<this.#x.length;o++){let n=this.#x[o];n(this,i,t)}}}setInfo(e){this.#a||console.warn("setInfo instruction ignored, as node has been marked un-editable");let t=e;if(t==null&&(t=""),t===this.#o)return;let i=this.#o;this.#o=t;for(let o=0;o<this.#p.length;o++){let n=this.#p[o];n(this,i,t)}}inputPortPosition(e){return this.#P.At(e)}inputPort(e){return this.#l[e]}inputs(){return this.#l.length}outputPortPosition(e){return this.#z.At(e)}outputPort(e){return this.#s[e]}outputs(){return this.#s.length}#I(e){if(this.#B&&e===0)return this.#V;let t=this.#N.get(e);if(t===void 0)throw new Error("no registered border style for state: "+e);return t}addMessage(e){this.#r.push(new Ae(e))}clearMessages(){this.#r=[]}render(e,t,i,o,n){x.run(()=>{let r=x.get();this.#P.Clear(),this.#z.Clear(),this.#A.Clear();let l=this.#M*t.zoom,h=this.#k*t.zoom,a=this.calculateBounds(e,t),c=this.#I(i);c.Draw(e,a,t.zoom);let m=c.borderSize();e.textAlign="center",e.textBaseline="middle";let p=x.get();this.#e.size(e,t.zoom,p);let F=x.get();this.#i.size(e,t.zoom,F);let G=x.get();G.x=a.Size.x,G.y=p.y+l*2,e.fillStyle=this.#T,e.beginPath();let T=a.Position.x+m*t.zoom*.5,j=a.Position.y+m*t.zoom*.5,V=G.x-m*t.zoom,u=G.y-m*t.zoom*.5;e.roundRect(T,j,V,u,[c.radius()*t.zoom,c.radius()*t.zoom,0,0]),e.fill();let S=x.get();if(S.x=a.Position.x+a.Size.x/2,S.y=a.Position.y+l+p.y/2,this.#i.get()!==""){let C=x.get();g(C,S),C.y-=p.y/1.5,S.y+=l/2,this.#i.render(e,t.zoom,C)}if(this.#e.render(e,t.zoom,S),this.#o!==""){let C=u*.25,B=T+V-u*.25-C,A=j+u*.25+C,le=x.get();le.x=B,le.y=A+u*.025;let de=1.5*t.zoom;o&<(le,o)<=C&&(de*=1.5,n.queue(()=>{this.#n.style().setupStyle(e,t.zoom),e.textAlign="center";let Oe=V*1.5,Ge=pe(e,this.#o,Oe),Ue=this.#n.style().getSize()+2,rt=Ue*Ge.length*t.zoom,fe=Ue*t.zoom,st=j-rt-fe/2;e.fillStyle=this.#T,e.beginPath(),e.roundRect(B-Oe/2-fe/2,st-fe,Oe+fe,rt+fe,c.radius()*t.zoom),e.fill(),this.#n.style().setupStyle(e,t.zoom);for(let ve=0;ve<Ge.length;ve++){let Pt=Ge[ve];e.fillText(Pt,B,st+ve*Ue*t.zoom)}})),e.beginPath(),e.arc(B,A,C,0,2*Math.PI,!1),e.lineWidth=de,e.strokeStyle=this.#n.getColor(),e.stroke(),e.textAlign="center",this.#n.render(e,t.zoom,le)}let v=a.Position.y+l*2+p.y+h,M=a.Position.x+l;for(let C=0;C<this.#l.length;C++){e.textAlign="left";let B=this.#l[C];this.#b.measure(e,t.zoom,B.getDisplayName(),r);let A=x.get();A.x=a.Position.x,A.y=v+r.y/2,this.#b.setupStyle(e,t.zoom),e.fillText(B.getDisplayName(),M,A.y),this.#P.Push(B.render(e,A,t,o,n)),v+=r.y+h}let L=a.Position.x+a.Size.x;e.textAlign="right";for(let C=0;C<this.#s.length;C++){let B=this.#s[C];this.#b.measure(e,t.zoom,B.getDisplayName(),r);let A=x.get();A.x=L,A.y=v+r.y/2,this.#b.setupStyle(e,t.zoom),e.fillText(B.getDisplayName(),L-l,A.y),this.#z.Push(B.render(e,A,t,o,n)),v+=r.y+h}for(let C=0;C<this.#d.length;C++){let B=this.#d[C],A=B.Size(),le=A.x*t.zoom,de=x.get();de.x=a.Position.x+(a.Size.x-le)/2,de.y=v,this.#A.Push(B.Draw(e,de,t.zoom,o)),v+=A.y*t.zoom+h}let q=x.get();q.x=a.Position.x+a.Size.x/2,q.y=a.Position.y+a.Size.y+15*t.zoom;for(let C=0;C<this.#r.length;C++){let B=this.#r[C];q.y+=B.render(e,t.zoom,q,i!==0)+10*t.zoom}})}};var Re=class{#t;#e;#i;#n;constructor(e,t,i,o){this.#t=e,this.#e=t,this.#i=i,this.#n=o}type(){return this.#t}lexeme(){return this.#e}tokenStart(){return this.#i}tokenEnd(){return this.#n}};var Ve=class{#t;#e;#i;constructor(e){this.#e=0,this.#t=e,this.#i=new Array}tokens(){return this.#i}#n(){return this.#e>this.#t.length-1?"":this.#t.charAt(this.#e)}#o(){this.#e++}#r(){return this.#e++,this.#e>this.#t.length-1?"":this.#t.charAt(this.#e)}#l=0;#s(e,t){this.#i.push(new Re(e,t,this.#l,this.#e)),this.#l=this.#e}#d(){this.#r()==="#"?(this.#s("H3","###"),this.#o()):this.#s("H2","##")}#u(){this.#r()==="#"?this.#d():this.#s("H1","#")}#h(){let e=this.#n();for(;e!==""&&!(e!==" "&&e!==" ");)e=this.#r();this.#s("Space"," ")}#a(){let e=this.#n(),t=-1;for(;e!=="";){if((e===" "||e===" ")&&t===-1){this.#o();continue}if(e===`
|
|
1
|
+
var d={FontFamily:"Courier New",Graph:{BackgroundColor:"#07212a"},Node:{FontColor:"#afb9bb",BackgroundColor:"#0c2b35",Title:{Color:"#154050",FontColor:"#afb9bb",Padding:5},BorderRadius:15,Border:{Idle:"#1c1c1c",MouseOver:"#8e8e8e",Grabbed:"white",Selected:"#6e6e6e"},Port:{FontColor:"#afb9bb"},Message:{InfoColor:"#afb9bb",WarnColor:"#f1f663ff",ErrorColor:"#FF0000"}},BoxSelect:{Color:"white",Size:1,Radius:2,LineDashLength:5},Widget:{FontColor:"#afb9bb",BackgroundColor:"#0f313c",Border:{Color:"#154050",Size:2,Radius:2},Hover:{BackgroundColor:"#195366"},Slider:{FillColor:"#07212A"},Button:{Click:{BackgroundColor:"#1f637a"}}},ContextMenu:{BackgroundColor:"#07212A",HighlightColor:"#205A6D",FontColor:"#afb9bb",DisabledFontColor:"#4a585c"},Note:{FontColor:"#afb9bb",FontSize:16,EntrySpacing:20,LineSpacing:5,DotSize:3,HeaderLineWidth:2,H1:{FontSize:32},H2:{FontSize:16},H3:{FontSize:16},CodeBlock:{BackgroundColor:"#0c2b35",Padding:16,BorderRadius:4}}};var zt=16,At="black";function G(s,e){return{color:s?.color===void 0?e?.color:s?.color,size:s?.size===void 0?e?.size:s?.size,font:s?.font===void 0?e?.font:s?.font,style:s?.style===void 0?e?.style:s?.style,weight:s?.weight===void 0?e?.weight:s?.weight}}var E=class{#t;#e;#i;#n;#o;constructor(e){this.#t=e?.size===void 0?zt:e.size,this.#e=e?.color===void 0?At:e.color,this.#i=e?.font===void 0?d.FontFamily:e.font,this.#n=e?.weight===void 0?"":e.weight,this.#o=e?.style===void 0?"":e.style}setupStyle(e,t){e.fillStyle=this.#e,e.font=this.#o+" "+this.#n+" "+this.#t*t+"px "+this.#i}getSize(){return this.#t}getFont(){return this.#i}measure(e,t,i,o){this.setupStyle(e,t);let n=e.measureText(i);o.x=n.width,o.y=n.actualBoundingBoxAscent+n.actualBoundingBoxDescent}setColor(e){this.#e=e}getColor(){return this.#e}setSize(e){this.#t=e}setWeight(e){this.#n=e}};var Ze=class{#t;#e;#i;#n;#o;constructor(e,t){this.#t=new Array,this.#e=0,this.#i=e,this.#n=t,this.#o=0}runIf(e,t){e&&this.run(t)}#r(){return this.#o>0}run(e){let t=this.#e;this.#o+=1,e(),this.#o-=1,this.#e=t}get(){if(!this.#r())throw new Error("can't use pool outside of running context");let e;return this.#t.length===this.#e?(e=this.#i(),this.#t.push(this.#i())):(e=this.#t[this.#e],this.#n(e)),this.#e++,e}},x=new Ze(()=>({x:0,y:0}),s=>{s.x=0,s.y=0});function p(s,e){s.x=e.x,s.y=e.y}function ke(s,e,t){s.x=e.x-t.x,s.y=e.y-t.y}function pe(s,e,t){s.x=e.x+t.x,s.y=e.y+t.y}function he(s,e){s.x*=e,s.y*=e}function g(){return{x:0,y:0}}function ae(s,e){let t=e.x-s.x,i=e.y-s.y;return Math.sqrt(t*t+i*i)}function dt(s,e){if(s.x>e.x){let t=e.x;e.x=s.x,s.x=t}if(s.y>e.y){let t=e.y;e.y=s.y,s.y=t}}function ht(s,e){let t=!1;return x.run(()=>{let i=x.get(),o=x.get();p(i,s.Position),pe(o,i,s.Size),dt(i,o);let n=x.get(),r=x.get();p(n,e.Position),pe(r,n,e.Size),dt(n,r),t=i.x<=r.x&&o.x>=n.x&&i.y<=r.y&&o.y>=n.y}),t}function Xe(s,e){return e.x=s.Position.x+s.Size.x/2,e.y=s.Position.y+s.Size.y/2,e}function b(s,e){let t=s.Position;return!(e.x<t.x||e.y<t.y||e.x>t.x+s.Size.x||e.y>t.y+s.Size.y)}var P=class{#t;#e;constructor(){this.#t=new Array,this.#e=0}Count(){return this.#e}Clear(){this.#e=0}At(e){return this.#t[e]}Push(e){this.#t.length===this.#e?this.#t.push(e):this.#t[this.#e]=e,this.#e++}ToArray(){let e=new Array(this.Count());for(let t=0;t<this.#e;t++)e[t]=this.#t[t];return e}};var at=30;var ut=(i=>(i[i.Enabled=0]="Enabled",i[i.Disabled=1]="Disabled",i[i.Hidden=2]="Hidden",i))(ut||{}),Ye=class{#t;#e;#i;#n;group;constructor(e){this.#t=e?.name===void 0?"item":e.name,this.#e=e?.callback,this.#i=new E(e?.textStyle),this.group=e?.group,this.#n=e?.enabled===void 0?0:e.enabled()}getName(){return this.#t}state(){return this.#n}execute(){this.#n!==0||this.#e===void 0||this.#e()}},je=class{constructor(e){this.entries=e;this.#t=e.length*at}#t;height(){return this.#t}},Pe=class{constructor(e,t,i){this.text=e;this.subMenu=t;this.item=i}click(){this.item?.execute()}};function q(...s){let e={items:new Array,subMenus:new Array};for(let t=0;t<s.length;t++){let i=s[t];i!==void 0&&(i.items!==void 0&&(e.items=e.items?.concat(i.items)),i.subMenus!==void 0&&(e.subMenus=e.subMenus?.concat(i.subMenus)))}return e}var ue=class{#t;#e;#i;#n;#o;#r;#l;constructor(e){if(this.#l=g(),this.#o=new P,this.#t=e?.name===void 0?"menu":e?.name,this.#e=new Array,this.#i=new Array,this.#n=new E(G(e?.textStyle,{color:d.ContextMenu.FontColor})),this.#r=e?.group,e?.subMenus!==void 0)for(let t=0;t<e?.subMenus.length;t++)this.#i.push(new ue(e?.subMenus[t]));if(e?.items!==void 0)for(let t=0;t<e?.items.length;t++){let i=new Ye(e?.items[t]);i.state()!==2&&this.#e.push(i)}this.#s()}#s(){let e=new Map,t=new Array;t.push(new Array);for(let i=0;i<this.#e.length;i++){let o=0,n=this.#e[i];if(n.group!==void 0){let r=e.get(n.group);r!==void 0?o=r:(o=t.length,e.set(n.group,o),t.push(new Array))}t[o].push(new Pe(this.#e[i].getName(),void 0,this.#e[i]))}for(let i=0;i<this.#i.length;i++){let o=0,n=this.#i[i];if(n.#r!==void 0){let r=e.get(n.#r);r!==void 0?o=r:(o=t.length,e.set(n.#r,o),t.push(new Array))}t[o].push(new Pe(this.#i[i].getName(),this.#i[i],void 0))}this.#o.Clear();for(let i=0;i<t.length;i++){let o=t[i];o.length!==0&&this.#o.Push(new je(o))}}#d=0;#u(e,t){if(this.#d>0)return this.#d;let i=g();for(let o=0;o<this.#o.Count();o++){let n=this.#o.At(o);for(let r=0;r<n.entries.length;r++)this.#n.measure(e,t,n.entries[r].text,i),this.#d=Math.max(i.x,this.#d)}return this.#d}getName(){return this.#t}#h={Position:g(),Size:g()};#a;render(e,t,i,o,n){let l=1.25*at,a=1.25*40+this.#u(e,1.25),h=0;for(let N=0;N<this.#o.Count();N++)h+=this.#o.At(N).height();h*=1.25;let u={x:0,y:0};p(u,t),n||(u.x-=a),u.y+h>e.canvas.clientHeight&&(u.y=e.canvas.clientHeight-h);let m=n;n&&u.x+a>e.canvas.clientWidth&&(u.x=e.canvas.clientWidth-a,m=!m),this.#h.Size.x=a,this.#h.Size.y=l,p(this.#h.Position,u),e.textAlign="left",e.fillStyle=d.ContextMenu.BackgroundColor,e.shadowColor="#000000",e.shadowBlur=5*1.25,e.beginPath(),e.roundRect(u.x,this.#h.Position.y,a,h,5*1.25),e.fill(),e.shadowBlur=0;let f=null,w=!1,M=0;for(let N=0;N<this.#o.Count();N++){let R=this.#o.At(N);for(let S=0;S<R.entries.length;S++){let c=R.entries[S];this.#h.Position.y=u.y+l*M;let v=!1;o!==void 0&&b(this.#h,o)&&(f=c,v=!0,c.subMenu!==void 0?(this.#a=c.subMenu,this.#l.x=u.x,this.#l.y=this.#h.Position.y,m&&(this.#l.x+=a),w=!0):this.#a=void 0);let k=c.item!==void 0&&c.item.state()===1;!k&&(v||this.#a!==void 0&&c.subMenu===this.#a)&&(e.fillStyle=d.ContextMenu.HighlightColor,e.beginPath(),e.roundRect(u.x+l/10,this.#h.Position.y+l/10,a-l/5,l-l/5,5*1.25),e.fill()),this.#n.setupStyle(e,1.25),k&&(e.fillStyle=d.ContextMenu.DisabledFontColor),e.fillText(c.text,u.x+l/5,this.#h.Position.y+l/2),c.subMenu!==void 0&&(e.beginPath(),e.strokeStyle=d.ContextMenu.FontColor,e.lineWidth=1*1.25,e.lineTo(u.x+a-l/2.5,this.#h.Position.y+l/3),e.lineTo(u.x+a-l/4,this.#h.Position.y+l/2),e.lineTo(u.x+a-l/2.5,this.#h.Position.y+l-l/3),e.stroke()),M++}if(N!==this.#o.Count()-1){e.strokeStyle=d.ContextMenu.FontColor,e.lineWidth=.5*1.25,e.beginPath();let S=u.x+l/10,c=this.#h.Position.y+l;e.lineTo(S,c),e.lineTo(S+a-l/5,c),e.stroke()}}if(this.#a!==void 0){let N=this.#a.render(e,this.#l,1.25,o,m);N!==null&&(f=N)}return f}};var Rt=500,Vt=12,Ft=50,ct=600,Te=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;#h=null;#a=g();#c=!1;#f=0;#g=0;constructor(e,t,i,o,n,r,l,a){this.#i=e,this.#o=t,this.#r=i,this.#l=o,this.#s=n,this.#d=r,this.#u=a,this.#t=!1,this.#e=g(),this.#n=g(),e.style.touchAction="none",e.addEventListener("mousedown",this.#k.bind(this),!1),e.addEventListener("touchstart",this.#v.bind(this),{passive:!1}),document.addEventListener("mouseup",this.#M.bind(this),!1),document.addEventListener("touchend",this.#S.bind(this),!1),document.addEventListener("touchcancel",this.#S.bind(this),!1),e.addEventListener("mousemove",this.#p.bind(this),!1),e.addEventListener("touchmove",this.#P.bind(this),{passive:!1}),e.addEventListener("wheel",this.#b.bind(this),{passive:!1}),e.addEventListener("drop",h=>{h.preventDefault(),h.dataTransfer?.items&&[...h.dataTransfer.items].forEach((u,m)=>{if(u.kind==="file"){let f=u.getAsFile();f&&l(f)}})}),e.addEventListener("dragover",h=>{h.preventDefault(),this.#r(this.#m(h))}),e.addEventListener("contextmenu",h=>{h.preventDefault(),!(Date.now()-this.#g<ct)&&this.#d(this.#m(h))},!1)}#m(e){let t=this.#i.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}}#C(e){let t=this.#i.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}}#x(){return Date.now()-this.#g<ct}#y(){this.#h!==null&&(clearTimeout(this.#h),this.#h=null)}#b(e){e.preventDefault();let t=e.deltaY;e.deltaMode===WheelEvent.DOM_DELTA_LINE?t*=16:e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this.#i.clientHeight);let i=-t/100;if(i===0)return;let o=this.#m(e);this.#r(o),this.#u(i,o)}#p(e){if(this.#x())return;let t=this.#m(e);if(this.#t){let i=g();ke(i,t,this.#n),this.#o(i)}this.#r(t),p(this.#n,t)}#k(e){e.button!==0||this.#x()||(this.#t=!0,this.#l(this.#m(e),e.ctrlKey||e.shiftKey))}#M(e){e.button!==0||this.#x()||(this.#t=!1,this.#s())}#v(e){if(this.#g=Date.now(),e.preventDefault(),e.touches.length>=2){this.#y(),this.#t=!1,this.#f=ae(this.#C(e.touches[0]),this.#C(e.touches[1]));return}if(e.touches.length!==1)return;let t=this.#C(e.touches[0]);p(this.#a,t),p(this.#e,t),this.#c=!1,this.#f=0,this.#y();let i=t.x,o=t.y;this.#h=setTimeout(()=>{this.#h=null,this.#c=!0,this.#t=!1,this.#s(),this.#d({x:i,y:o})},Rt),this.#t=!0,this.#r(t),this.#l(t,!1)}#P(e){if(this.#g=Date.now(),e.preventDefault(),e.touches.length>=2){this.#y(),this.#t=!1;let i=this.#C(e.touches[0]),o=this.#C(e.touches[1]),n=ae(i,o),r={x:(i.x+o.x)/2,y:(i.y+o.y)/2};this.#f>0&&(this.#r(r),this.#u((n-this.#f)/Ft,r)),this.#f=n;return}if(e.touches.length!==1)return;let t=this.#C(e.touches[0]);this.#h!==null&&ae(t,this.#a)>Vt&&this.#y(),this.#r(t),this.#t&&!this.#c&&this.#o({x:t.x-this.#e.x,y:t.y-this.#e.y}),p(this.#e,t)}#S(e){if(this.#g=Date.now(),this.#y(),e.touches.length>=1){this.#f=0;return}this.#f=0,this.#t=!1,this.#c||this.#s(),this.#c=!1}};function qe(s){return typeof s=="number"?{Bottom:s,Right:s,Top:s,Left:s}:{Bottom:s?.Bottom===void 0?0:s?.Bottom,Right:s?.Right===void 0?0:s?.Right,Left:s?.Left===void 0?0:s?.Left,Top:s?.Top===void 0?0:s?.Top}}var ce=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;constructor(e){this.#t=qe(e?.Margin),this.#e=qe(e?.Padding),this.#n=e?.BackgroundColor,this.#i={Color:e?.Border?.Color??"black",Thickness:e?.Border?.Thickness??0,Radius:e?.Border?.Radius??0},this.#o=e?.MinWidth,this.#r=e?.MaxWidth,this.#l=e?.MinHeight,this.#s=e?.MaxHeight,this.#d=e?.Grow,this.#u=e?.Display??"flex"}setBackgroundColor(e){this.#n=e}render(e,t,i,o){if(this.#u==="none")return;let n={x:0,y:0};this.size(e,n),n.x=n.x*i,n.y=n.y*i,n.x=Math.max(n.x,o.x),n.y=Math.max(n.y,o.y),this.#n&&(e.fillStyle=this.#n,e.beginPath(),e.roundRect(t.x+this.#t.Left*i,t.y+this.#t.Right*i,n.x-(this.#t.Left+this.#t.Right)*i,n.y-(this.#t.Top+this.#t.Bottom)*i,this.#i.Radius*i),e.fill()),this.#i.Thickness>0&&(e.lineWidth=this.#i.Thickness*i,e.strokeStyle=this.#i.Color,e.stroke());let r={x:t.x+this.#f()*i,y:t.y+this.#c()*i},l={x:n.x-this.#h()*i,y:n.y-this.#a()*i};this.doRender(e,r,i,l)}maxLimitations(e){e.x=-1,e.y=-1,this.#r&&(e.x=this.#r),this.#s&&(e.y=this.#s)}setDisplay(e){this.#u=e}getDisplay(){return this.#u}size(e,t){if(t.x=0,t.y=0,this.#u==="none")return;let i={x:-1,y:-1};this.maxLimitations(i),this.calcSize(e,t,i),t.x+=this.#h(),t.y+=this.#a(),this.#o&&(t.x=Math.max(t.x,this.#o)),this.#r&&(t.x=Math.min(this.#r,t.x)),this.#s&&(t.y=Math.min(this.#s,t.y)),this.#l&&(t.y=Math.max(this.#l,t.y))}#h(){return this.#i.Thickness+this.#t.Left+this.#t.Right+this.#e.Left+this.#e.Right}#a(){return this.#i.Thickness+this.#t.Top+this.#t.Bottom+this.#e.Top+this.#e.Bottom}#c(){return this.#i.Thickness/2+this.#t.Top+this.#e.Top}#f(){return this.#i.Thickness/2+this.#t.Left+this.#e.Left}};var Q=class extends ce{#t;#e;#i;constructor(e,t){super(t),this.#t=e,this.#e="column",this.#i="stretch"}calcSize(e,t,i){t.x=0,t.y=0;let o={x:0,y:0};switch(this.#e){case"column":for(let n=0;n<this.#t.length;n++)this.#t[n].size(e,o),t.x=Math.max(t.x,o.x),t.y+=o.y;break;case"row":for(let n=0;n<this.#t.length;n++)this.#t[n].size(e,o),t.y=Math.max(t.y,o.y),t.x+=o.x;break;default:throw new Error("unknown layout: "+this.#e)}}doRender(e,t,i,o){switch(this.#e){case"column":this.#n(e,t,i,o);break;default:throw new Error("unimplemented layout direction: "+this.#e)}}#n(e,t,i,o){let n={x:t.x,y:t.y},r={x:0,y:0};for(let l=0;l<this.#t.length;l++){let a=this.#t[l];switch(a.size(e,r),he(r,i),this.#i){case"stretch":n.x=t.x,r.x=o.x;break;case"start":n.x=t.x;break;case"end":n.x=o.x-r.x;break;case"center":n.x=o.x-r.x/2;break;default:throw new Error("unimplmeneted alignment: "+this.#i)}a.render(e,n,i,r),n.y+=r.y}}};var Z=class extends ce{#t;#e;#i;#n;constructor(e,t){super(t),this.#t=e,this.#e=t?.Align??"left",this.#i=t?.VerticalAlign??"top",this.#n=t?.LineHeight??1}doRender(e,t,i,o){let n=g();this.calcSize(e,n,o),he(n,i);let r=g();switch(p(r,t),e.textAlign="left",e.textBaseline="top",this.#e){case"left":break;case"right":r.x+=o.x-n.x;break;case"center":r.x+=(o.x-n.x)/2;break;default:throw new Error("unimplemented justification: "+this.#e)}switch(this.#i){case"top":break;case"bottom":r.y+=o.y-n.y;break;case"center":r.y+=(o.y-n.y)/2;break;default:throw new Error("unimplemented justification: "+this.#e)}if(o.x<=0)this.#t.render(e,i,r);else{let l=this.#t.breakIntoLines(e,o.x),a={x:0,y:0};for(let h=0;h<l.length;h++)l[h].render(e,i,r),l[h].size(e,1,a),r.y+=this.#t.style().getSize()*this.#n}}calcSize(e,t,i){if(i.x<=0){this.#t.size(e,1,t);return}let o=this.#t.breakIntoLines(e,i.x),n={x:0,y:0};t.x=0,t.y=this.#t.style().getSize()*o.length*this.#n;for(let r=0;r<o.length;r++)o[r].size(e,1,n),t.x=Math.max(n.x,t.x)}};var Qe=({max:s,getValue:e,match:t})=>{let i=0;for(;i<=s;){let o=Math.floor((i+s)/2),n=e(o);if(n===t)return o;n<t?i=o+1:s=o-1}return s};function mt(s,e,t){let i=s.measureText(e).width,o="\u2026",n=s.measureText(o).width;if(i<=t||i<=n)return e;let r=Qe({max:e.length,getValue:l=>s.measureText(e.substring(0,l)).width,match:t-n});return e.substring(0,r)+o}function ft(s,e,t){if(s.measureText(e).width<=t)return[e];let o=Qe({max:e.length,getValue:n=>s.measureText(e.substring(0,n)).width,match:t});for(let n=o-1;n>=1;n--)if(e.charAt(n)===" "){o=n+1;break}return[e.substring(0,o),e.substring(o)]}function ye(s,e,t){if(s.measureText(e).width<=t)return[e];let o=new Array,n=e;for(;n!=="";){let r=Qe({max:n.length,getValue:l=>s.measureText(n.substring(0,l)).width,match:t});if(r===n.length){o.push(n.substring(0,r));break}for(let l=r-1;l>=1;l--)if(n.charAt(l)===" "){r=l+1;break}o.push(n.substring(0,r)),n=n.substring(r)}return o}var y=class{#t;#e;#i;#n;#o;#r;#l;constructor(e,t,i){this.#n=e,this.#t=!1,this.#e=g(),this.#i=new E(t),this.#o=i?.MaxWidth?i?.MaxWidth:-1,this.#r=i?.LineSpacing?i?.LineSpacing:5,this.#l=[e],document.fonts.check(`16px "${this.#i.getFont()}"`)||document.fonts.addEventListener("loadingdone",o=>{this.#t=!1})}set(e){this.#n=e,this.#t=!1}get(){return this.#n}breakIntoLines(e,t){let i=new Array;this.#i.setupStyle(e,1);let o=ye(e,this.#n,t);if(o.length===1)return[this];for(let n=0;n<o.length;n++){let r=new y(o[n]);r.#i=this.#i,i.push(r)}return i}split(e){let t=this.#n.split(e),i=new Array;for(let o=0;o<t.length;o++){let n=new y(t[o]);n.#i=this.#i,i.push(n)}return i}splitAtIndex(e){let t=[new y(this.#n.substring(0,e)),new y(this.#n.substring(e,0))];for(let i=0;i<t.length;i++)t[i].#i=this.#i;return t}splitAtWidth(e,t){this.#i.setupStyle(e,1);let i=ft(e,this.#n,t);if(i.length===1)return[this];let o=new Array;for(let n=0;n<i.length;n++){let r=new y(i[n]);r.#i=this.#i,o.push(r)}return o}#s(e){if(!this.#t){if(this.#i.setupStyle(e,1),this.#o==-1){let t=e.measureText(this.#n);this.#e.x=t.width,this.#e.y=t.actualBoundingBoxAscent+t.actualBoundingBoxDescent,this.#l=[this.#n],this.#t=!0;return}this.#l=ye(e,this.#n,this.#o),this.#e.x=0,this.#e.y=0;for(let t=0;t<this.#l.length;t++){let i=e.measureText(this.#l[t]);this.#e.x=Math.max(this.#e.x,i.width)}this.#e.y+=(this.#l.length-1)*this.#r+this.#i.getSize()*this.#l.length,this.#t=!0}}size(e,t,i){this.#s(e),p(i,this.#e),he(i,t)}height(e){return this.#s(e),this.#e.y}setColor(e){this.#i.setColor(e)}getColor(){return this.#i.getColor()}setSize(e){this.#i.setSize(e)}setWeight(e){this.#i.setWeight(e)}render(e,t,i){this.#s(e),this.#i.setupStyle(e,t);let o=0;for(let n=0;n<this.#l.length;n++)e.fillText(this.#l[n],i.x,i.y+o),o+=(this.#i.getSize()+this.#r)*t}style(){return this.#i}};function Ke(s,e,t){return Math.min(Math.max(s,e),t)}function U(s){return Ke(s,0,1)}function $e(s){var e=s.toString(16);return e.length==1?"0"+e:e}function gt(s){return"#"+$e(Math.round(s.r*255))+$e(Math.round(s.g*255))+$e(Math.round(s.b*255))}function pt(s){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(s);return e?{r:parseInt(e[1],16)/255,g:parseInt(e[2],16)/255,b:parseInt(e[3],16)/255}:null}function yt(s,e){if(s.s<=0){e.r=s.v,e.g=s.v,e.b=s.v;return}let t=s.h;t>=360&&(t=0),t/=60;let i=Math.round(t),o=t-i,n=s.v*(1-s.s),r=s.v*(1-s.s*o),l=s.v*(1-s.s*(1-o));switch(i){case 0:e.r=s.v,e.g=l,e.b=n;break;case 1:e.r=r,e.g=s.v,e.b=n;break;case 2:e.r=n,e.g=s.v,e.b=l;break;case 3:e.r=n,e.g=r,e.b=s.v;break;case 4:e.r=l,e.g=n,e.b=s.v;break;default:e.r=s.v,e.g=n,e.b=r;break}e.r=U(e.r),e.g=U(e.g),e.b=U(e.b)}function Ct(s,e){let t=0;for(var i=0;i<s.length;i++)t+=s.charCodeAt(i)*(i+1);let o=24;t=Math.round(t)%o;let n={h:t/(o-1)*360,s:e,v:1},r={r:0,g:0,b:0};return yt(n,r),gt(r)}var Ce=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;constructor(e,t,i){this.#t=e,this.#o=new Array,this.#r=t,this.#e=i?.name===void 0?"Port":i?.name,this.#l=i?.type===void 0?"":i?.type,this.#i={borderColor:i?.emptyStyle?.borderColor===void 0?"#1c1c1c":i.emptyStyle?.borderColor,fillColor:i?.emptyStyle?.fillColor===void 0?Ct(this.#l,.3):i.emptyStyle?.fillColor,borderSize:i?.emptyStyle?.borderSize===void 0?1:i.emptyStyle?.borderSize,size:i?.emptyStyle?.size===void 0?4:i.emptyStyle?.size},this.#n={borderColor:i?.filledStyle?.borderColor===void 0?"#1c1c1c":i.filledStyle?.borderColor,fillColor:i?.filledStyle?.fillColor===void 0?Ct(this.#l,1):i.filledStyle?.fillColor,borderSize:i?.filledStyle?.borderSize===void 0?1:i.filledStyle?.borderSize,size:i?.filledStyle?.size===void 0?5:i.filledStyle?.size},this.#d=new Array,i?.onConnectionAdded&&this.#d.push(i?.onConnectionAdded),this.#u=new Array,i?.onConnectionRemoved&&this.#u.push(i?.onConnectionRemoved);let o=new Array,n=this.#l;i?.array===!0&&(n="Array<"+n+">"),o.push(new Z(new y(n,{color:"white"}),{Align:"center"}));let r=i?.description;r&&r!==""&&o.push(new Z(new y(r,{color:"white",style:"italic"}),{Align:"center",Padding:{Top:16},MaxWidth:400,LineHeight:1.5})),this.#s=new Q(o,{BackgroundColor:"rgba(0, 0, 0, 0.85)",Border:{Radius:6},Padding:13})}addConnection(e){let t=this.#o.length;this.#o.push(e);for(let i=0;i<this.#d.length;i++)this.#d[i](e,t,this,this.#r,this.#t)}replaceConnection(e,t){let i=this.#o.length;this.#o[t]=e;for(let o=0;o<this.#d.length;o++)this.#d[o](e,i,this,this.#r,this.#t)}addConnectionAddedListener(e){e!==void 0&&this.#d.push(e)}connections(){return this.#o}addConnectionRemovedListener(e){e!==void 0&&this.#u.push(e)}clearConnection(e){let t=this.#o.indexOf(e);if(t>-1){this.#o.splice(t,1);for(let i=0;i<this.#u.length;i++)this.#u[i](e,t,this,this.#r,this.#t)}else console.error("no connection found to remove")}getDataType(){return this.#l}getPortType(){return this.#r}getDisplayName(){return this.#e}filledStyleColor(){return this.#n.fillColor===void 0?(console.error("There's no fill color!!!!!!!!!"),"black"):this.#n.fillColor}#h={Position:{x:0,y:0},Size:{x:0,y:0}};render(e,t,i,o,n){let r=this.#i;this.#o.length>0&&(r=this.#n);let l=r.size*i.zoom;if(o&&b(this.#h,o)){l*=1.25;let a=t.x,h=t.y;n.queue(()=>{let u={x:0,y:0};this.#s.calcSize(e,u,{x:-1,y:-1}),this.#s.render(e,{x:a-u.x/2,y:h},1,u)})}return this.#h.Position.x=t.x-l,this.#h.Position.y=t.y-l,this.#h.Size.x=l*2,this.#h.Size.y=l*2,e.strokeStyle=r.borderColor,e.fillStyle=r.fillColor,e.beginPath(),this.#r==="INPUTARRAY"?e.rect(t.x-l,t.y-l,l*2,l*2):e.arc(t.x,t.y,l,0,2*Math.PI),e.fill(),e.stroke(),this.#h}};function xt(s,e){return{color:s?.color===void 0?e?.color:s?.color,size:s?.size===void 0?e?.size:s?.size}}var xe=class{#t;#e;constructor(e){this.#t=e?.size===void 0?.5:e.size,this.#e=e?.color===void 0?"black":e.color}setupStyle(e,t){e.strokeStyle=this.#e,e.lineWidth=t*this.#t}setColor(e){this.#e=e}setSize(e){this.#t=e}size(){return this.#t}};function K(s,e){return{radius:s?.radius===void 0?e?.radius:s?.radius,color:s?.color===void 0?e?.color:s?.color,border:xt(s?.border,e?.border)}}var I=class{#t;#e;#i;constructor(e){this.#e=e?.color===void 0?"#CCCCCC":e.color,this.#t=e?.border===void 0?null:new xe(e.border),this.#i=e?.radius===void 0?2:e.radius}#n(e,t,i,o){e.fillStyle=this.#e,this.#t?.setupStyle(e,i),e.beginPath(),e.roundRect(t.Position.x,t.Position.y,t.Size.x,t.Size.y,o),e.fill()}#o(e,t,i,o){this.#n(e,t,i,o),e.stroke()}Outline(e,t,i,o){this.#t?.setupStyle(e,i),e.beginPath(),e.roundRect(t.Position.x,t.Position.y,t.Size.x,t.Size.y,o),e.stroke()}Draw(e,t,i){this.#o(e,t,i,this.#i*i)}DrawRoundedTopOnly(e,t,i){this.#o(e,t,i,[this.#i*i*2,this.#i*i*2,0,0])}DrawUnderline(e,t,i){this.#n(e,t,i,[this.#i*i*2,this.#i*i*2,0,0]),e.beginPath(),e.moveTo(t.Position.x,t.Position.y+t.Size.y),e.lineTo(t.Position.x+t.Size.x,t.Position.y+t.Size.y),e.stroke()}borderSize(){return this.#t===null?0:this.#t.size()}radius(){return this.#i}setColor(e){this.#e=e}setBorderColor(e){this.#t===null?this.#t=new xe({color:e}):this.#t.setColor(e)}};var L=class{#t;#e;#i;#n;#o;#r;constructor(e){this.#t=e.title,this.#e=e.options,this.#i=e.content,this.#n=e.onClose,this.#o=e.buttonCSS===void 0?"flex-grow: 1; margin-right: 8px;":e.buttonCSS,this.#r=null}Hide(){this.#r!==null&&(document.body.removeChild(this.#r),this.#r=null)}Show(){this.#r=document.createElement("div"),this.#r.style.cssText="position:absolute;top:0;width:100%;display:flex;height:100%;justify-content:center;align-items:center;background-color:#00000070;",document.body.appendChild(this.#r);let e=document.createElement("div");e.style.cssText="background-color:#000;color:white;font-family:Verdana;border-radius:8px;padding:16px;",this.#r.appendChild(e);let t=document.createElement("h2");t.textContent=this.#t,t.style.cssText="margin-top:0;margin-bottom:16px;",e.appendChild(t),this.#i!==void 0&&e.appendChild(this.#i());let i=document.createElement("div");i.style.cssText="margin-top:16px;justify-content:space-around;align-items:center;flex-direction:row;display:flex;",e.appendChild(i);for(let o=0;o<this.#e.length;o++){let n=document.createElement("button");n.style.cssText=this.#o,n.textContent=this.#e[o],n.onclick=()=>{this.Hide(),this.#n!==void 0&&this.#n(this.#e[o])},i.appendChild(n)}}};function D(s,e){return{box:K(s?.box,e?.box),text:G(s?.text,e?.text),textAlign:s?.textAlign===void 0?e?.textAlign:s?.textAlign,textBaseline:s?.textBaseline===void 0?e?.textBaseline:s?.textBaseline}}var A=class{#t;#e;#i;#n;constructor(e){this.#t=new I(e?.box),this.#e=new E(e?.text),this.#i=e?.textAlign===void 0?"center":e.textAlign,this.#n=e?.textBaseline===void 0?"middle":e.textBaseline}Draw(e,t,i,o){this.#t.Draw(e,t,i),e.textAlign=this.#i,e.textBaseline=this.#n,this.#e.setupStyle(e,i),e.fillText(o,t.Position.x+t.Size.x/2,t.Position.y+t.Size.y/2)}DrawUnderline(e,t,i,o){this.#t.DrawUnderline(e,t,i),e.textAlign=this.#i,e.textBaseline=this.#n,this.#e.setupStyle(e,i),e.fillText(o,t.Position.x+t.Size.x/2,t.Position.y+t.Size.y/2)}setTextColor(e){this.#e.setColor(e)}setBoxColor(e){this.#t.setColor(e)}setBorderColor(e){this.#t.setBorderColor(e)}};var B=150,T=25;var $=class{#t;#e;#i;#n;#o;#r;#l;constructor(e,t){this.#i=0,this.#r="0",this.#t=e,this.#e=t?.property,this.#n=new A(D(t?.idleBoxStyle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color},radius:d.Widget.Border.Radius},text:{color:d.Widget.FontColor}})),this.#o=new A(D(t?.highlightBoxStyle,{box:{color:d.Widget.Hover.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color},radius:d.Widget.Border.Radius},text:{color:d.Widget.FontColor}})),this.Set(t?.value===void 0?0:t?.value),this.#l=t?.callback,this.#e!==void 0&&this.#t.addPropertyChangeListener(this.#e,(i,o)=>{this.Set(o)})}Size(){return{x:B,y:T}}Set(e){this.#i!==e&&(this.#i=e,this.#e!==void 0&&this.#t.setProperty(this.#e,this.#i),this.#l!==void 0&&this.#l(this.#i),this.#r=""+parseFloat(this.#i.toPrecision(6)))}ClickStart(){}ClickEnd(){let e=null,t="Set",i="Cancel";new L({title:"Set Number",options:[t,i],content:()=>{let n=document.createElement("div");return e=document.createElement("input"),e.type="number",e.valueAsNumber=this.#i,n.append(e),n},onClose:n=>{n!==t||e===null||this.Set(e.valueAsNumber)}}).Show()}Draw(e,t,i,o){let n={Position:{x:0,y:0},Size:{x:B*i,y:T*i}};p(n.Position,t);let r=this.#n;return o!==void 0&&b(n,o)&&(r=this.#o),r.DrawUnderline(e,n,i,this.#r),n}};var J=class{#t;#e;#i;#n;#o;#r;constructor(e){this.#t=e?.text===void 0?"Button":e?.text,this.#o=e?.callback,this.#r=!1,this.#e=new A(D(e?.idleStyle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}})),this.#i=new A(D(e?.hoverStyle,{box:{color:d.Widget.Hover.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}})),this.#n=new A(D(e?.clickStyle,{box:{color:d.Widget.Button.Click.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}}))}Size(){return{x:B,y:T}}Draw(e,t,i,o){let n={Position:{x:0,y:0},Size:{x:B*i,y:T*i}};p(n.Position,t);let r=this.#e;return o!==void 0&&!this.#r&&b(n,o)&&(r=this.#i),this.#r&&(r=this.#n),r.Draw(e,n,i,this.#t),n}ClickStart(){this.#r=!0}ClickEnd(){this.#r=!1,this.#o!==void 0&&this.#o()}};function bt(s){let e=pt(s);return e===null||(e.r+e.g+e.b)/3>.5?"black":"white"}var ee=class{#t;#e;#i;#n;#o;#r;constructor(e,t){this.#i="#000000",this.#n=bt(this.#i),this.Set(t?.value===void 0?"#000000":t?.value),this.#t=e,this.#e=t?.property,this.#o=new A({box:{color:this.#i,border:{color:this.#n,size:d.Widget.Border.Size}},text:t?.textStyle}),this.#r=t?.callback,this.#e!==void 0&&this.#t.addPropertyChangeListener(this.#e,(i,o)=>{this.Set(o)})}Size(){return{x:B,y:T}}Set(e){this.#i!==e&&(this.#i=e,this.#r!==void 0&&this.#r(this.#i),this.#e!==void 0&&this.#t.setProperty(this.#e,this.#i),this.#n=bt(this.#i),this.#o.setBoxColor(this.#i),this.#o.setBorderColor(this.#n),this.#o.setTextColor(this.#n))}ClickStart(){}ClickEnd(){let e=null;new L({title:"Set Color",options:["Set","Cancel"],content:()=>{let i=document.createElement("div");e=document.createElement("input"),e.type="color",e.value=this.#i,e.name="color",i.append(e);let o=document.createElement("label");return o.htmlFor="color",o.textContent="Color",i.append(o),i},onClose:i=>{i!=="Set"||e===null||this.Set(e.value)}}).Show()}Draw(e,t,i,o){let n={Position:{x:0,y:0},Size:{x:B*i,y:T*i}};return p(n.Position,t),this.#o.Draw(e,n,i,this.#i),n}};var te=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;#h;#a;#c;#f;#g;#m;constructor(e,t){this.#r=e,this.#i=0,this.#t=t?.min===void 0?0:t?.min,this.#e=t?.max===void 0?1:t?.max,this.#o=t?.snapIncrement,this.#l=t?.property,this.#n="",this.#d=t?.release,this.#h=t?.backgroundColor===void 0?d.Widget.BackgroundColor:t?.backgroundColor,this.#c=t?.fillColor===void 0?d.Widget.Slider.FillColor:t?.fillColor,this.#a=t?.borderColor===void 0?d.Widget.Border.Color:t?.borderColor,this.#u=new E(G(t?.textStyle,{color:d.Widget.FontColor})),this.#f=g(),this.#g=g(),this.#m=!1,t?.property!==void 0&&t?.property!==null&&e.addPropertyChangeListener(t.property,(i,o)=>{this.SetValue(o)}),this.SetValue(t?.value===void 0?0:t?.value),this.#s=t?.change}SetValue(e){let t=Ke(e,this.#t,this.#e);this.#i!==t&&(this.#i=t,this.#l&&this.#r.setProperty(this.#l,this.#i),this.#n=this.#i.toFixed(3),this.#s!==void 0&&this.#s(this.#i))}Size(){return{x:B,y:T}}ClickStart(){this.#m=!0,p(this.#g,this.#f)}ClickEnd(){this.#m=!1,this.#d!==void 0&&this.#d(this.#i)}Draw(e,t,i,o){let n=B*i,r=T*i,l=d.Widget.Border.Size*i;e.fillStyle=this.#h,e.strokeStyle=this.#a,e.lineWidth=l,e.beginPath(),e.roundRect(t.x,t.y,n,r,d.Widget.Border.Radius*i),e.fill(),e.stroke();let a=U((this.#i-this.#t)/(this.#e-this.#t));if(e.fillStyle=this.#c,e.beginPath(),e.roundRect(t.x+l/2,t.y+l/2,n*a-l,r-l,d.Widget.Border.Radius*i),e.fill(),e.textAlign="center",e.textBaseline="middle",this.#u.setupStyle(e,i),e.fillText(this.#n,t.x+n/2,t.y+r/2),o!==void 0&&(p(this.#f,o),this.#m)){let h=t.x+l/2,u=h+n-l,f=U((this.#f.x-h)/(u-h))*(this.#e-this.#t)+this.#t;this.#o!==void 0&&(f=Math.round(f/this.#o)*this.#o),this.SetValue(f)}return{Position:{x:t.x,y:t.y},Size:{x:n,y:r}}}};function me(s){let e=null;return new L({title:s.title,options:["Set","Cancel"],content:()=>{let t=document.createElement("div");return e=document.createElement("input"),e.value=s.startingValue,t.append(e),t},onClose:t=>{if(t!=="Set"||e===null){s.onCancel&&s.onCancel();return}s.onUpdate(e.value)}})}var ie=class{#t;#e;#i;#n;#o;#r;constructor(e,t){this.#t="",this.#o=e,this.#r=t?.property,this.#e=new A(D(t?.textBoxStyle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color},radius:d.Widget.Border.Radius},text:{color:d.Widget.FontColor}})),this.#i=new A(D(t?.textBoxStyle,{box:{color:d.Widget.Hover.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color},radius:d.Widget.Border.Radius},text:{color:d.Widget.FontColor}})),this.Set(t?.value===void 0?"":t?.value),this.#n=t?.callback,this.#r!==void 0&&this.#o.addPropertyChangeListener(this.#r,(i,o)=>{this.Set(o)})}Size(){return{x:B,y:T}}Set(e){this.#t!==e&&(this.#t=e,this.#r!==void 0&&this.#o.setProperty(this.#r,this.#t),this.#n!==void 0&&this.#n(this.#t))}ClickStart(){}ClickEnd(){me({title:"Set String",startingValue:this.#t,onUpdate:t=>{this.Set(t)}}).Show()}Draw(e,t,i,o){let n={Position:{x:0,y:0},Size:{x:B*i,y:T*i}};p(n.Position,t);let r=this.#e;return o!==void 0&&b(n,o)&&(r=this.#i),r.DrawUnderline(e,n,i,mt(e,this.#t,n.Size.x-20*i)),n}};var Me=class{#t;#e;#i;#n;#o;#r;constructor(e){this.#t=new A(D(e?.idle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}})),this.#e=new A(D(e?.hover,{box:{color:d.Widget.Hover.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}})),this.#i=e?.lightColor===void 0?"#222222":e.lightColor,this.#n=e?.lightBorderColor===void 0?"black":e.lightBorderColor,this.#o=e?.lightBlur,this.#r={Position:{x:0,y:0},Size:{x:0,y:0}}}Draw(e,t,i,o,n){let r=B*i,l=T*i;this.#r.Size.x=r,this.#r.Size.y=l,p(this.#r.Position,t);let a=this.#t;n!==void 0&&b(this.#r,n)&&(a=this.#e),a.Draw(e,this.#r,i,o);let h=Math.min(r,l);return e.strokeStyle=this.#n,e.fillStyle=this.#i,e.beginPath(),e.roundRect(t.x+h*.2,t.y+h*.2,h*.6,h*.6,d.Widget.Border.Radius*i),this.#o&&(e.shadowBlur=this.#o*i,e.shadowColor=this.#i),e.fill(),this.#o&&(e.shadowBlur=0),this.#r}},oe=class{#t;#e;#i;#n;#o;#r;#l;constructor(e,t){this.#i=!1,this.#t=e,this.#e=t?.property,this.#n=t?.text===void 0?"Toggle":t?.text,this.#o=new Me({idle:D(t?.enabledStyle?.idle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}}),lightBorderColor:t?.enabledStyle?.lightBorderColor,lightColor:t?.enabledStyle?.lightColor===void 0?"#00FF00":t?.enabledStyle?.lightColor,lightBlur:t?.enabledStyle?.lightBlur===void 0?15:t?.enabledStyle?.lightBlur}),this.#r=new Me({idle:D(t?.disabledStyle?.idle,{box:{color:d.Widget.BackgroundColor,border:{size:d.Widget.Border.Size,color:d.Widget.Border.Color}},text:{color:d.Widget.FontColor}}),lightBorderColor:t?.disabledStyle?.lightBorderColor,lightColor:t?.disabledStyle?.lightColor===void 0?"#004400":t?.enabledStyle?.lightColor}),this.Set(t?.value===void 0?!1:t?.value),this.#l=t?.callback,this.#e!==void 0&&this.#t.addPropertyChangeListener(this.#e,(i,o)=>{this.Set(o)})}Size(){return{x:B,y:T}}Draw(e,t,i,o){return(this.#i?this.#o:this.#r).Draw(e,t,i,this.#n,o)}Toggle(){this.Set(!this.#i)}Set(e){this.#i!==e&&(this.#i=e,this.#e!==void 0&&this.#t.setProperty(this.#e,this.#i),this.#l!==void 0&&this.#l(this.#i))}ClickStart(){this.Toggle()}ClickEnd(){}};var ne=class{#t;#e;#i;#n;constructor(e){this.#i=e?.maxWidth===void 0?150:e?.maxWidth,this.#n=e?.maxHeight===void 0?150:e?.maxHeight,e?.image?this.SetUrl(e?.image):e?.blob&&this.SetBlob(e?.blob)}SetBlob(e){let i=(window.URL||window.webkitURL).createObjectURL(e);this.SetUrl(i)}SetUrl(e){this.#e=void 0,this.#t=e;let t=document.createElement("img");t.src=e,t.onload=()=>{this.#e=t},t.onerror=i=>{console.log("error loading image:",e,i)}}Size(){if(this.#e===void 0)return{x:0,y:0};let e=1;if(this.#e.width>this.#i&&(e=this.#i/this.#e.width),this.#e.height>this.#n){let t=this.#n/this.#e.height;t<e&&(e=t)}return{x:e*this.#e.width,y:e*this.#e.height}}ClickStart(){}ClickEnd(){}Draw(e,t,i,o){let n=this.Size(),r={Position:{x:0,y:0},Size:{x:n.x*i,y:n.y*i}};return p(r.Position,t),this.#e&&e.drawImage(this.#e,t.x,t.y,r.Size.x,r.Size.y),r}};var be=class{#t;#e;#i;#n;#o;constructor(e,t){this.#o=g(),this.#i=e,this.#n=t?.property,this.#t=new y("",G(t?.textBoxStyle,{font:d.FontFamily,color:d.Widget.FontColor,size:d.Note.FontSize})),this.Set(t?.value===void 0?"":t?.value),this.#e=t?.callback,this.#n!==void 0&&this.#i.addPropertyChangeListener(this.#n,(i,o)=>{this.Set(o)})}Size(){return this.#o}Set(e){this.#t.get()!==e&&(this.#t.set(e),this.#n!==void 0&&this.#i.setProperty(this.#n,e),this.#e!==void 0&&this.#e(e))}ClickStart(){}ClickEnd(){}Draw(e,t,i,o){this.#t.size(e,i,this.#o);let n={Position:{x:0,y:0},Size:this.#o};return p(n.Position,t),this.#t.size(e,1,this.#o),e.textAlign="left",this.#t.render(e,i,n.Position),n}};var et=class{#t;constructor(){this.#t=new Map}register(e,t){this.#t.set(e,t)}create(e,t,i){let o=this.#t.get(t);if(o===void 0)throw new Error("no builder registered for widget: "+t);return o(e,i)}},_=new et;_.register("button",(s,e)=>new J(e));_.register("number",(s,e)=>new $(s,e));_.register("color",(s,e)=>new ee(s,e));_.register("slider",(s,e)=>new te(s,e));_.register("string",(s,e)=>new ie(s,e));_.register("toggle",(s,e)=>new oe(s,e));_.register("image",(s,e)=>new ne(e));_.register("text",(s,e)=>new be(s,e));var Et=30,It=80;function Lt(s){let e=U(s);return e*e*(3-2*e)}function St(s,e,t,i){return o=>{let n="#00FF00";o.outPort!==null?n=o.outPort.filledStyleColor():o.inPort!==null&&(n=o.inPort.filledStyleColor());let r=s*o.graphScale;e!==void 0&&(n=e),(o.mouseOver||o.inNode?.selected()||o.outNode?.selected())&&(r=t*o.graphScale,o.ctx.shadowBlur=25*o.graphScale,i!==void 0&&(n=i),o.ctx.shadowColor=n),o.ctx.strokeStyle=n,o.ctx.lineWidth=r;let l=o.start.x,a=o.start.y,h=o.end.x,u=o.end.y,m=h-l,f=Et*o.graphScale,w=It*o.graphScale,M=m<=0?0:f*Lt(m/w),N=l-M,R=h+M;o.ctx.beginPath(),o.ctx.moveTo(l,a),M>0&&o.ctx.lineTo(N,a);let S=(N+R)/2;o.ctx.bezierCurveTo(S,a,S,u,R,u),M>0&&o.ctx.lineTo(h,u),o.ctx.stroke(),o.ctx.shadowBlur=0}}var Se=class{#t;#e;#i;#n;#o;#r;#l;constructor(e,t,i,o,n){this.#i=e,this.#n=t,this.#o=i,this.#r=o,this.#l=n,this.#t=g(),this.#e=g(),e!==null&&e.inputPort(this.#n).addConnection(this),i!==null&&i.outputPort(this.#r).addConnection(this)}render(e,t,i,o){if(!(this.#i===null&&this.#o===null)){if(this.#i!==null){let n=this.#i.inputPortPosition(this.#n);if(n===void 0)return;Xe(n,this.#t)}else if(o!==void 0)this.#t.x=o.x,this.#t.y=o.y;else return;if(this.#o!==null){let n=this.#o.outputPortPosition(this.#r);if(n===void 0)return;Xe(n,this.#e)}else if(o!==void 0)this.#e.x=o.x,this.#e.y=o.y;else return;this.#l({ctx:e,start:this.#t,end:this.#e,graphScale:t,mouseOver:i,inPort:this.inPort(),inNode:this.#i,outPort:this.outPort(),outNode:this.#o})}}inNode(){return this.#i}outNode(){return this.#o}clearPort(e){if(this.#i!==null){let t=this.#i.inputPortPosition(this.#n);t!==void 0&&b(t,e)&&this.clearInput()}if(this.#o!==null){let t=this.#o.outputPortPosition(this.#r);t!==void 0&&b(t,e)&&this.clearOutput()}}clearPorts(){this.clearInput(),this.clearOutput()}setInput(e,t,i){this.#i=e,this.#n=t;let o=this.#i.inputPort(t);!!i&&o.connections().length>0?o.replaceConnection(this,0):o.addConnection(this)}setOutput(e,t){this.#o=e,this.#r=t,this.#o.outputPort(t).addConnection(this)}clearInput(){this.#i?.inputPort(this.#n).clearConnection(this),this.#i=null,this.#n=-1}clearOutput(){this.#o?.outputPort(this.#r).clearConnection(this),this.#o=null,this.#r=-1}mouseOverPort(e){if(this.#i!==null){let t=this.#i.inputPortPosition(this.#n);if(t!==void 0&&b(t,e))return this.#i.inputPort(this.#n)}if(this.#o!==null){let t=this.#o.outputPortPosition(this.#r);if(t!==void 0&&b(t,e))return this.#o.outputPort(this.#r)}return null}outPort(){return this.#o===null?null:this.#o.outputPort(this.#r)}inPort(){return this.#i===null?null:this.#i.inputPort(this.#n)}referencesNode(e){return this.#i===e||this.#o===e}};var re=class{zoom;position;constructor(){this.zoom=1,this.position=g()}screenSpaceToGraphSpace(e,t){let i=this.zoom;t.x=e.x/i-this.position.x/i,t.y=e.y/i-this.position.y/i}graphSpaceToScreenSpace(e,t){t.x=this.position.x+e.x*this.zoom,t.y=this.position.y+e.y*this.zoom}reset(){this.zoom=1,this.position.x=0,this.position.y=0}};function wt(s,e,t,i,o,n){let r=s.connectedInputsNodeReferencesByIndex(i);for(let l=0;l<r.length;l++){let a=t.get(r[l]);!n.has(r[l])||(e[a]=o,wt(s,e,t,a,o-1,n))}}function vt(s,e,t,i,o,n){let r=s.connectedInputsNodeReferencesByIndex(i);for(let l=0;l<r.length;l++){let a=t.get(r[l]);!n.has(r[l])||(e[a]=o,vt(s,e,t,a,o+1,n))}}function tt(s,e,t){let i=e.getNodes(),o=new Map,n=new Array(i.length),r=new Array(i.length),l=new Array(i.length),a=new Map;if(t){if(t.length<2)return;for(let c=0;c<t.length;c++)a.set(i[t[c]],!0)}else for(let c=0;c<i.length;c++)a.set(i[c],!0);let h=new re;for(let c=0;c<i.length;c++)n[c]=i[c].calculateBounds(s,h),r[c]=new Array(i.length),o.set(i[c],c),l[c]=!1;for(let c=0;c<i.length;c++)r[c][c]=0,wt(e,r[c],o,c,-1,a),vt(e,r[c],o,c,1,a);let u=new Array(a.size),m=0;for(let c=0;c<i.length;c++){if(!a.has(i[c]))continue;let v=0,k=0;for(let V=0;V<i.length;V++){let O=r[c][V];O!==void 0&&(v=Math.min(v,O),k=Math.max(k,O))}u[m]={length:k-v,node:c,min:v,max:k},m++}u.sort((c,v)=>v.length-c.length);let f=Array(u[0].length+1);for(let c=0;c<f.length;c++)f[c]={Nodes:new Array,Width:0};for(let c=0;c<u.length;c++){let v=u[c];if(l[v.node]===!0)continue;let k=r[v.node];for(let V=0;V<k.length;V++){let O=k[V];if(O===void 0||l[V]===!0)continue;let j=n[V],C=f[O-v.min];C.Nodes.push(i[V]),C.Width=Math.max(C.Width,j.Size.x),l[V]=!0}}let w=0;for(let c=0;c<f.length;c++)w+=f[c].Width;let M=100,N=50,R=0;for(let c=0;c<f.length;c++){var S=f[c];let v=0;R-=M+S.Width;for(let k=0;k<S.Nodes.length;k++){let V=S.Nodes[k],O=n[o.get(V)],j={x:R+w+f.length*M,y:v};v+=O.Size.y+N,V.setPosition(j)}}}function Y(s,e){let t=s+"_Start",i=s+"_End";performance.mark(t),e(),performance.mark(i),performance.measure(s,t,i)}var we=class{#t;#e;#i;#n;constructor(e){if(this.#t=e?.name===void 0?"Unknown":e.name,this.#e=e?.description===void 0?"":e.description,this.#i=e?.version===void 0?"v0.0.0":e.version,this.#n=new Map,e?.nodes!==void 0)for(let t in e.nodes)this.register(t,e.nodes[t])}nodes(){return this.#n}register(e,t){this.#n.set(e,t)}unregister(e){return this.#n.delete(e)}#o(e,t,i,o){let n=[],r=new Map;for(let[a,h]of i){let u=a.indexOf("/"),m=a.indexOf("[");if(u===-1||m!==-1&&m<u)n.push({name:a,callback:()=>{let f=new se(h);f.setPosition(o),e.addNode(f)}});else{let f=a.split("/");r.has(f[0])||r.set(f[0],new Map);let w=r.get(f[0]);f.shift(),w?.set(f.join("/"),h)}}let l=[];for(let[a,h]of r)l.push(this.#o(e,a,h,o));return{name:t,items:n,subMenus:l}}contextMenu(e,t){return this.#o(e,this.#t,this.#n,t)}create(e){let t=this.#n.get(e);if(t===void 0)throw new Error("no builder registered for node: "+e);return new se(t)}};var ze=class{#t;#e;constructor(e){if(this.#t=new Map,this.#e=new Array,e?.onNodeCreated&&this.#e.push(e?.onNodeCreated),e?.publishers!==void 0)for(let t in e.publishers)this.addPublisher(t,new we(e.publishers[t]))}addOnNodeCreatedListener(e){this.#e.push(e)}addPublisher(e,t){this.#t.set(e,t)}create(e,t){let i=this.#t.get(e);if(i===void 0)throw new Error("no publisher registered with identifier: "+e);let o=i.create(t);for(let n=0;n<this.#e.length;n++){let r=this.#e[n];r(e,t,o)}return o}newNodeSubmenus(e,t){let i=[];for(let[o,n]of this.#t)i.push(n.contextMenu(e,t));return i}openMenu(e,t){return{name:"New Node",group:F,subMenus:this.newNodeSubmenus(e,t)}}};var F="node-flow-graph-node-menu";function Gt(s){return s?.renderer!==void 0?s.renderer:St(s?.size===void 0?2:s.size,void 0,s?.mouseOverSize===void 0?4:s.mouseOverSize,void 0)}var Ae=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;#h;#a;#c;#f;#g;#m;#C;#x;#y;#b;constructor(e,t){this.#t=e,this.#e=[],this.#n=-1,this.#o=new P,this.#r=null,this.#s=null,this.#d=null,this.#u=null,this.#i=new Array,this.#a=new ze(t?.nodes),this.#l=Gt(t?.idleConnection),this.#b=new Array,this.#y=new Array,this.#h="default",this.#c=!1,this.#f=g(),this.#g=g(),this.#m=new P,this.#x=null,this.#C=new I({border:{color:d.BoxSelect.Color,size:d.BoxSelect.Size},color:"rgba(0,0,0,0)",radius:d.BoxSelect.Radius})}addPublisher(e,t){this.#a.addPublisher(e,t)}addOnNodeCreatedListener(e){this.#a.addOnNodeCreatedListener(e)}nodeFactory(){return this.#a}addOnNodeAddedListener(e){e!=null&&this.#b.push(e)}addOnNodeRemovedListener(e){e!=null&&this.#y.push(e)}clickStart(e,t,i){if(this.#c=!1,this.#o.Clear(),this.#x!==null){this.#s=null,this.#d=null,this.#n=-1;for(let n=0;n<this.#e.length;n++){let r=this.#e[n].inBounds(this.#x,t,e);r.Node!==void 0&&r.PortIndex===void 0&&r.Widget===void 0&&(this.#n=n),r.Widget!==void 0&&(this.#d=r.Widget),r.Port!==void 0&&r.Node!==void 0&&r.PortIndex!==void 0&&r.PortIsInput!==void 0&&(this.#s={Index:r.PortIndex,Node:r.Node,Port:r.Port,InputPort:r.PortIsInput})}}let o=!1;if(this.#n>-1){this.#V(this.#n,!i);for(let n=0;n<this.#e.length;n++)this.#e[n].selected()&&this.#o.Push(n);o=!0}if(this.#d!==null&&(this.#d.ClickStart(),this.#u=this.#d,o=!0),this.#s===null)return i&&!o&&(t.screenSpaceToGraphSpace(e,this.#f),p(this.#g,this.#f),this.#c=!0),o||i;if(this.#s.InputPort){for(let n=0;n<this.#i.length;n++)if(this.#i[n].inPort()===this.#s.Port){this.#i[n].clearInput(),this.#r=this.#i[n];break}}else{let n=this.#s.Node,r=this.#s.Index,l=this.#s.Node,a=this.#s.Index;this.#s.InputPort?(l=null,a=-1):(n=null,r=-1);let h=new Se(n,r,l,a,this.#l);this.#r=h,this.#i.push(h)}return!0}mouseDragEvent(e,t){let i=!1;return x.run(()=>{let o=x.get();if(o.x=e.x/t,o.y=e.y/t,pe(this.#g,this.#g,o),this.#k())for(let n=0;n<this.#o.Count();n++){let r=this.#e[this.#o.At(n)];r.locked()||(r.translate(o),i=!0)}}),i?!0:this.#M()||this.#v()||this.#c}clearNodeInputConnection(e,t){let i=e.inputPort(t);for(let o=this.#i.length-1;o>=0;o--)this.#i[o].inPort()===i&&this.#A(this.#i[o],!0)}clickEnd(){for(let i=0;i<this.#o.Count();i++)this.#e[this.#o.At(i)].raiseDragStoppedEvent();if(this.#o.Clear(),this.#c){for(let i=0;i<this.#m.Count();i++)this.#N(this.#e[this.#m.At(i)],!1);this.#m.Clear(),this.#c=!1}if(this.#u!==null&&(this.#u.ClickEnd(),this.#u=null),this.#r===null)return;if(this.#s===null){this.#w();return}let e=this.#s.Port,t=this.#r;if(e===t.inPort()||e===t.outPort()){this.#w();return}if(this.#s.InputPort&&t.inPort()!==null){this.#w();return}if(!this.#s.InputPort&&t.outPort()!==null){this.#w();return}if(this.#s.InputPort&&this.#s.Port.getDataType()!==t.outPort()?.getDataType()){this.#w();return}if(!this.#s.InputPort&&this.#s.Port.getDataType()!==t.inPort()?.getDataType()){this.#w();return}if(this.#s.InputPort){let i=!1,o=this.#s.Node.inputPort(this.#s.Index);this.#s.Port.getPortType()!=="INPUTARRAY"&&o.connections().length>0&&(i=!0),i&&(o.connections()[0].clearOutput(),this.#A(o.connections()[0],!1)),t.setInput(this.#s.Node,this.#s.Index,i)}else t.setOutput(this.#s.Node,this.#s.Index);this.#r=null}connectNodes(e,t,i,o){let n=e.outputPort(t).getDataType(),r=i.inputPort(o).getDataType();if(n!==r){console.error("can't connect nodes of different types",n,r);return}let l=i.inputPort(o).connections();for(let h=0;h<l.length;h++){let u=l[h];if(u.outNode()===e&&u.outPort()===e.outputPort(t))return}let a=new Se(i,o,e,t,this.#l);return this.#i.push(a),a}getNodes(){return this.#e}getSelectedNodes(){let e=new Array;for(let t=0;t<this.#e.length;t++)this.#e[t].selected()&&e.push(this.#e[t]);return e}connectedInputsNodeReferencesByIndex(e){return this.connectedInputsNodeReferences(this.#e[e])}connectedInputsNodeReferences(e){let t=new Array;for(let i=0;i<this.#i.length;i++){let o=this.#i[i];if(e!==o.inNode())continue;let n=o.outNode();n!==null&&t.push(n)}return t}connectedOutputsNodeReferences(e){let t=this.#e[e],i=new Array;for(let o=0;o<this.#i.length;o++){let n=this.#i[o];if(t!==n.outNode())continue;let r=n.inNode();r!==null&&i.push(r)}return i}addNode(e){this.#e.push(e);for(let t=0;t<this.#b.length;t++){let i=this.#b[t];!i||i(e)}}fileDrop(e){return this.#n===-1?!1:(this.#e[this.#n].dropFile(e),!0)}#p(e){if(e>=this.#e.length||e<0){console.error("invalid node connection");return}for(let t=this.#i.length-1;t>=0;t--)this.#i[t].referencesNode(this.#e[e])&&this.#S(t,!0)}#k(){return this.#o.Count()>0}#M(){return this.#r!==null}#v(){return this.#u!==null}removeNode(e){for(let t=0;t<this.#e.length;t++)this.#e[t]===e&&this.#P(t)}#P(e){this.#p(e);let t=this.#e[e];this.#e.splice(e,1);for(let i=0;i<this.#y.length;i++)this.#y[i](t)}#S(e,t){t&&this.#i[e].clearPorts(),this.#i.splice(e,1)}#A(e,t){let i=this.#i.indexOf(e);i>-1?this.#S(i,t):console.error("no connection found to remove")}organize(e){tt(e,this)}#B(){let e=new Array;for(let t=0;t<this.#e.length;t++)this.#e[t].selected()&&e.push(t);return e}#z(e){tt(e,this,this.#B())}openContextMenu(e,t){let i={name:"Organize",group:F,items:[{name:"All Nodes",group:F,callback:()=>{this.organize(e)}}]},o={items:[],subMenus:[i,this.#a.openMenu(this,t)]};if(this.#B().length>0&&i.items?.push({name:"Selected Nodes",group:F,callback:()=>{this.#z(e)}}),this.#n>-1){let n=this.#n,r=this.#e[n];o.subMenus?.push({group:F,name:"Select",items:[{name:"Direct Connected Nodes",group:F,callback:()=>{this.#R(n)}},{name:"Input Nodes + Descendents",group:F,callback:()=>{this.#T(r)}}]}),o.subMenus?.push({group:F,name:"Delete",items:[{name:"Node",group:F,callback:()=>{this.#P(n)}},{name:"Connections",group:F,callback:()=>{this.#p(n)}}]}),o=q(o,r.contextMenu())}return o}#T(e){if(e===void 0)return;this.#N(e,!1);let t=this.connectedInputsNodeReferences(e);for(let i=0;i<t.length;i++)this.#T(t[i])}#R(e){let t=this.#e[e];if(t===void 0)return;this.#N(t,!1);let i=this.connectedOutputsNodeReferences(e);for(let n=0;n<i.length;n++)this.#N(i[n],!1);let o=this.connectedInputsNodeReferencesByIndex(e);for(let n=0;n<o.length;n++)this.#N(o[n],!1)}#V(e,t){this.#N(this.#e[e],t)}#N(e,t){if(e.select(),!!t)for(let i=0;i<this.#e.length;i++)e!==this.#e[i]&&this.#e[i].unselect()}#w(){this.#r!==null&&(this.#A(this.#r,!0),this.#r=null)}#W(e,t,i){for(let o=0;o<this.#i.length;o++){let n=!1;i!==void 0&&(n=this.#i[o].mouseOverPort(i)!==null),this.#i[o].render(e,t.zoom,n,i)}}#D(e,t,i){this.#s=null,this.#d=null,this.#n=-1,this.#m.Clear();let o=this.#F(t);for(let n=0;n<this.#e.length;n++){let r=0;if(i!==void 0&&!this.#c){let l=this.#e[n].inBounds(e,t,i);l.Node!==void 0&&l.PortIndex===void 0&&l.Widget===void 0&&(r=1,this.#n=n,this.#h="grab"),l.Widget!==void 0&&(this.#d=l.Widget,this.#h="pointer"),l.Port!==void 0&&l.Node!==void 0&&l.PortIndex!==void 0&&l.PortIsInput!==void 0&&(this.#s={Index:l.PortIndex,Node:l.Node,Port:l.Port,InputPort:l.PortIsInput})}else if(this.#c){let l=this.#e[n].calculateBounds(e,t);ht(o,l)&&(r=1,this.#m.Push(n))}this.#e[n].selected()&&this.#o.Count()>0&&(r=2,this.#h="grabbing"),this.#e[n].render(e,t,r,i,this.#t)}}#F(e){let t={Position:g(),Size:g()};return e.graphSpaceToScreenSpace(this.#f,t.Position),e.graphSpaceToScreenSpace(this.#g,t.Size),ke(t.Size,t.Size,t.Position),t}render(e,t,i){if(this.#x=e,this.#h="default",Y("Render_Connections",()=>{this.#W(e,t,i)}),Y("Render_Nodes",()=>{this.#D(e,t,i)}),this.#c){let o=this.#F(t);e.setLineDash([d.BoxSelect.LineDashLength]),this.#C.Draw(e,o,1),e.setLineDash([])}return{cursorStyle:this.#h}}};function ve(s){let e=new Array,t="Set",i="Cancel";return new L({title:s.title,options:[t,i],content:()=>{let o=document.createElement("div");o.style.flexDirection="column",o.style.display="flex";for(let n=0;n<s.form.length;n++){let r=document.createElement("h4");r.innerText=s.form[n].name,o.append(r);let l=document.createElement("input");l.value=s.form[n].startingValue,l.type=s.form[n].type,o.append(l),e.push(l),o.append(document.createElement("br"))}return o},onClose:o=>{if(o!==t||e===null){s.onCancel&&s.onCancel();return}let n=new Array;for(let r=0;r<s.form.length;r++)n[r]=e[r]?.value;s.onUpdate(n)}})}var it=150,Ut=(i=>(i.Info="info",i.Warning="warning",i.Error="error",i))(Ut||{});function _t(s){switch(s){case"info":return d.Node.Message.InfoColor;case"warning":return d.Node.Message.WarnColor;case"error":return d.Node.Message.ErrorColor;default:throw new Error(`unrecognized message type ${s}`)}}var Nt=(i=>(i[i.Idle=0]="Idle",i[i.MouseOver=1]="MouseOver",i[i.Grabbed=2]="Grabbed",i))(Nt||{}),Re=class{#t;#e;constructor(e){this.#e=e.alwaysShow?e.alwaysShow:!1,this.#t=new y(e.message,{color:e.color?e.color:_t(e.type?e.type:"info")},{LineSpacing:2.5,MaxWidth:200})}render(e,t,i,o){return!this.#e&&!o?0:(e.textAlign="center",this.#t.render(e,t,i),this.#t.height(e)*t)}},se=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;#h;#a;#c;#f;#g;#m;#C;#x;#y;#b;#p;#k;#M;#v;#P;#S;#A;#B;#z;#T;#R;#V;#N;#w;constructor(e){if(this.#l=new Array,this.#s=new Array,this.#d=new Array,this.#z=new P,this.#T=new P,this.#R=new P,this.#A=15,this.#u=e?.locked===void 0?!1:e.locked,this.#V=e?.data===void 0?{}:e?.data,this.#w=new Map,this.#N=new Array,this.#c=e?.canEditPorts===void 0?!1:e.canEditPorts,this.#h=e?.canEditTitle===void 0?!1:e.canEditTitle,this.#a=e?.canEditInfo===void 0?!1:e.canEditInfo,this.#f=e?.contextMenu===void 0?null:e.contextMenu,this.#g=e?.metadata,this.#r=[],e?.messages)for(let t=0;t<e.messages.length;t++){let i=e.messages[t];this.#r.push(new Re(i))}if(this.#B=!1,this.#m=new Array,this.#C=new Array,this.#x=new Array,this.#y=new Array,this.#b=new Array,this.#p=new Array,e?.onSelect&&this.#m.push(e?.onSelect),e?.onUnselect&&this.#C.push(e?.onUnselect),e?.onFileDrop&&this.#x.push(e?.onFileDrop),e?.onDragStop&&this.#y.push(e.onDragStop),e?.onTitleChange&&this.#b.push(e.onTitleChange),e?.onInfoChange&&this.#p.push(e.onInfoChange),this.#t=e?.position===void 0?{x:0,y:0}:e.position,this.#e=new y(e?.title===void 0?"":e.title,G(e?.style?.title?.textStyle,{size:16,weight:"bold",color:d.Node.FontColor})),this.#i=new y(e?.subTitle===void 0?"":e.subTitle,G(e?.style?.title?.textStyle,{size:10,weight:"bold",color:d.Node.FontColor})),this.#n=new y("i",{size:13,weight:"bold",color:d.Node.FontColor}),this.#o=e?.info?e?.info:"",this.#k=e?.style?.title?.color===void 0?"#154050":e?.style?.title?.color,this.#P=e?.style?.title?.padding===void 0?15:e?.style?.title?.padding,this.#v=new Map,this.#v.set(0,new I(K(e?.style?.idle,{border:{color:d.Node.Border.Idle,size:1},radius:d.Node.BorderRadius,color:d.Node.BackgroundColor}))),this.#v.set(1,new I(K(e?.style?.mouseOver,{border:{color:d.Node.Border.MouseOver,size:1.1},radius:d.Node.BorderRadius,color:d.Node.BackgroundColor}))),this.#v.set(2,new I(K(e?.style?.grabbed,{border:{color:d.Node.Border.Grabbed,size:2},radius:d.Node.BorderRadius,color:d.Node.BackgroundColor}))),this.#M=new I(K(e?.style?.selected,{border:{color:d.Node.Border.Selected,size:1},radius:d.Node.BorderRadius,color:d.Node.BackgroundColor})),this.#S=new E({size:e?.style?.portText?.size===void 0?14:e?.style?.portText?.size,color:e?.style?.portText?.color===void 0?d.Node.Port.FontColor:e?.style?.portText?.color,font:e?.style?.portText?.font,weight:e?.style?.portText?.weight}),e?.inputs!==void 0)for(let t=0;t<e.inputs.length;t++)this.addInput(e.inputs[t]);if(e?.outputs!==void 0)for(let t=0;t<e.outputs.length;t++)this.addOutput(e.outputs[t]);if(e?.widgets!==void 0)for(let t=0;t<e.widgets.length;t++){let i=e.widgets[t];i.type!==void 0&&this.addWidget(_.create(this,i.type,i.config))}}metadata(){return this.#g}selected(){return this.#B}select(){if(!this.#B){this.#B=!0;for(let e=0;e<this.#m.length;e++)this.#m[e]()}}raiseDragStoppedEvent(){for(let e=0;e<this.#y.length;e++)this.#y[e](this)}addTitleChangeListener(e){e==null,this.#b.push(e)}addInfoChangeListener(e){e==null,this.#p.push(e)}addDragStoppedListener(e){e==null,this.#y.push(e)}addAnyPropertyChangeListener(e){e==null,this.#N.push(e)}addPropertyChangeListener(e,t){this.#w.has(e)||this.#w.set(e,[]);let i=this.#w.get(e);i!==void 0&&i.push(t)}setProperty(e,t){let i=this.#V[e];if(i===t)return;this.#V[e]=t;for(let n=0;n<this.#N.length;n++)this.#N[n](e,i,t);let o=this.#w.get(e);if(o!==void 0)for(let n=0;n<o.length;n++)o[n](i,t)}getProperty(e){return this.#V[e]}#W(){me({title:"Set Node Title",startingValue:this.title(),onUpdate:e=>{this.setTitle(e)}}).Show()}#D(){me({title:"Set Node Info",startingValue:this.#o,onUpdate:e=>{this.setInfo(e)}}).Show()}#F(){me({title:"New Button Widget Text",startingValue:"My Button",onUpdate:e=>{this.addWidget(new J({text:e}))}}).Show()}#E(){return{name:"Widget",items:[{name:"Button",callback:this.#F.bind(this)},{name:"Number",callback:()=>{this.addWidget(new $(this))}},{name:"Color",callback:()=>{this.addWidget(new ee(this))}},{name:"Slider",callback:()=>{ve({title:"New Slider",form:[{name:"min",type:"number",startingValue:0},{name:"max",type:"number",startingValue:100}],onUpdate:e=>{this.addWidget(new te(this,{min:e[0],max:e[1]}))}}).Show()}},{name:"String",callback:()=>{this.addWidget(new ie(this))}},{name:"Toggle",callback:()=>{this.addWidget(new oe(this))}},{name:"Image",callback:()=>{ve({title:"New Image",form:[{name:"URL",type:"text",startingValue:"https://pbs.twimg.com/media/GYabtu6bsAA7m99?format=jpg&name=medium"},{name:"Max Width",type:"number",startingValue:it},{name:"Max Height",type:"number",startingValue:it}],onUpdate:e=>{this.addWidget(new ne({image:e[0],maxWidth:e[1],maxHeight:e[2]}))}}).Show()}}]}}contextMenu(){let e={group:F,items:[],subMenus:[]};if(this.canEditPorts()||this.canEditTitle()||this.#a){let t=new Array;this.canEditTitle()&&t.push({name:"Title",callback:()=>{this.#W()}}),this.#a&&t.push({name:"Info",callback:()=>{this.#D()}});let i=new Array;this.canEditPorts()&&i.push({name:"Add",items:[{name:"Input",callback:()=>{ve({title:"New Input",form:[{name:"name",type:"text",startingValue:"input"},{name:"type",type:"text",startingValue:"string"}],onUpdate:o=>{this.addInput({name:o[0],type:o[1]})}}).Show()}},{name:"Output",callback:()=>{ve({title:"New Output",form:[{name:"name",type:"text",startingValue:"output"},{name:"type",type:"text",startingValue:"string"}],onUpdate:o=>{this.addOutput({name:o[0],type:o[1]})}}).Show()}}],subMenus:[this.#E()]}),e.subMenus?.push({group:F,name:"Edit",items:t,subMenus:i})}return this.locked()?e.items?.push({name:"Unlock Node Position",group:F,callback:this.unlock.bind(this)}):e.items?.push({name:"Lock Node Position",group:F,callback:this.lock.bind(this)}),this.#f!==null&&(e=q(e,this.#f)),e}unselect(){if(!!this.#B){this.#B=!1;for(let e=0;e<this.#C.length;e++)this.#C[e]()}}addUnselectListener(e){this.#C.push(e)}addSelectListener(e){this.#m.push(e)}dropFile(e){for(let t=0;t<this.#x.length;t++)this.#x[t](e)}addFileDropListener(e){this.#x.push(e)}locked(){return this.#u}lock(){this.#u=!0}unlock(){this.#u=!1}setPosition(e){p(this.#t,e)}getPosition(){return this.#t}calculateBounds(e,t){let i=g(),o=t.zoom,r=this.#P*o*2,l=this.#A*o,a=g();t.graphSpaceToScreenSpace(this.#t,a);let h=g();this.#e.size(e,o,h);let u=g();this.#i.size(e,o,u),h.x=Math.max(h.x,u.x),this.#o!==""&&(h.x+=h.y*4),h.x+=r,h.y+=r+l*this.#l.length;for(let m=0;m<this.#l.length;m++){let f=this.#l[m];this.#S.measure(e,o,f.getDisplayName(),i),h.y+=i.y,h.x=Math.max(h.x,i.x+r)}h.y+=l*this.#s.length;for(let m=0;m<this.#s.length;m++){let f=this.#s[m];this.#S.measure(e,o,f.getDisplayName(),i),h.y+=i.y,h.x=Math.max(h.x,i.x+r)}h.y+=l*this.#d.length;for(let m=0;m<this.#d.length;m++){let w=this.#d[m].Size();h.y+=w.y*o,h.x=Math.max(h.x,w.x*o+r)}return h.y+=l,h.x=Math.max(h.x,it*o),{Position:a,Size:h}}addInput(e){let t=new Ce(this,e.array?"INPUTARRAY":"INPUT",e);return this.#l.push(t),t}addOutput(e){let t=new Ce(this,"OUTPUT",e);return this.#s.push(t),t}addWidget(e){this.#d.push(e)}removeWidget(e){let t=this.#d.indexOf(e,0);if(t===-1)throw new Error("node does not contain widget");this.#d.splice(t,1)}getWidget(e){return this.#d[e]}widgetCount(){return this.#d.length}translate(e){this.#t.x+=e.x,this.#t.y+=e.y}inBounds(e,t,i){var o={};let n=this.calculateBounds(e,t);b(n,i)&&(o.Node=this);for(let r=0;r<this.#z.Count();r++)b(this.#z.At(r),i)&&(o.Node=this,o.PortIndex=r,o.PortIsInput=!0,o.Port=this.#l[r]);for(let r=0;r<this.#T.Count();r++)b(this.#T.At(r),i)&&(o.Node=this,o.PortIndex=r,o.PortIsInput=!1,o.Port=this.#s[r]);for(let r=0;r<this.#R.Count();r++)b(this.#R.At(r),i)&&(o.Node=this,o.WidgetIndex=r,o.Widget=this.#d[r]);return o}canEditTitle(){return this.#h}canEditPorts(){return this.#c}title(){return this.#e.get()}setTitle(e){if(!this.#h){console.warn("setTitle instruction ignored, as node has been marked un-editable");return}let t=e;t==null&&(t="");let i=this.title();if(t!==i){this.#e.set(t);for(let o=0;o<this.#b.length;o++){let n=this.#b[o];n(this,i,t)}}}setInfo(e){this.#a||console.warn("setInfo instruction ignored, as node has been marked un-editable");let t=e;if(t==null&&(t=""),t===this.#o)return;let i=this.#o;this.#o=t;for(let o=0;o<this.#p.length;o++){let n=this.#p[o];n(this,i,t)}}inputPortPosition(e){return this.#z.At(e)}inputPort(e){return this.#l[e]}inputs(){return this.#l.length}outputPortPosition(e){return this.#T.At(e)}outputPort(e){return this.#s[e]}outputs(){return this.#s.length}#I(e){if(this.#B&&e===0)return this.#M;let t=this.#v.get(e);if(t===void 0)throw new Error("no registered border style for state: "+e);return t}addMessage(e){this.#r.push(new Re(e))}clearMessages(){this.#r=[]}render(e,t,i,o,n){x.run(()=>{let r=x.get();this.#z.Clear(),this.#T.Clear(),this.#R.Clear();let l=this.#P*t.zoom,a=this.#A*t.zoom,h=this.calculateBounds(e,t),u=this.#I(i);u.Draw(e,h,t.zoom);let m=u.borderSize();e.textAlign="center",e.textBaseline="middle";let f=x.get();this.#e.size(e,t.zoom,f);let w=x.get();this.#i.size(e,t.zoom,w);let M=x.get();M.x=h.Size.x,M.y=f.y+l*2,e.fillStyle=this.#k,e.beginPath();let N=h.Position.x+m*t.zoom*.5,R=h.Position.y+m*t.zoom*.5,S=M.x-m*t.zoom,c=M.y-m*t.zoom*.5;e.roundRect(N,R,S,c,[u.radius()*t.zoom,u.radius()*t.zoom,0,0]),e.fill();let v=x.get();if(v.x=h.Position.x+h.Size.x/2,v.y=h.Position.y+l+f.y/2,this.#i.get()!==""){let C=x.get();p(C,v),C.y-=f.y/1.5,v.y+=l/2,this.#i.render(e,t.zoom,C)}if(this.#e.render(e,t.zoom,v),this.#o!==""){let C=c*.25,z=N+S-c*.25-C,W=R+c*.25+C,le=x.get();le.x=z,le.y=W+c*.025;let de=1.5*t.zoom;o&&ae(le,o)<=C&&(de*=1.5,n.queue(()=>{this.#n.style().setupStyle(e,t.zoom),e.textAlign="center";let Ge=S*1.5,Ue=ye(e,this.#o,Ge),_e=this.#n.style().getSize()+2,st=_e*Ue.length*t.zoom,ge=_e*t.zoom,lt=R-st-ge/2;e.fillStyle=this.#k,e.beginPath(),e.roundRect(z-Ge/2-ge/2,lt-ge,Ge+ge,st+ge,u.radius()*t.zoom),e.fill(),this.#n.style().setupStyle(e,t.zoom);for(let Ne=0;Ne<Ue.length;Ne++){let Mt=Ue[Ne];e.fillText(Mt,z,lt+Ne*_e*t.zoom)}})),e.beginPath(),e.arc(z,W,C,0,2*Math.PI,!1),e.lineWidth=de,e.strokeStyle=this.#n.getColor(),e.stroke(),e.textAlign="center",this.#n.render(e,t.zoom,le)}let k=h.Position.y+l*2+f.y+a,V=h.Position.x+l;for(let C=0;C<this.#l.length;C++){e.textAlign="left";let z=this.#l[C];this.#S.measure(e,t.zoom,z.getDisplayName(),r);let W=x.get();W.x=h.Position.x,W.y=k+r.y/2,this.#S.setupStyle(e,t.zoom),e.fillText(z.getDisplayName(),V,W.y),this.#z.Push(z.render(e,W,t,o,n)),k+=r.y+a}let O=h.Position.x+h.Size.x;e.textAlign="right";for(let C=0;C<this.#s.length;C++){let z=this.#s[C];this.#S.measure(e,t.zoom,z.getDisplayName(),r);let W=x.get();W.x=O,W.y=k+r.y/2,this.#S.setupStyle(e,t.zoom),e.fillText(z.getDisplayName(),O-l,W.y),this.#T.Push(z.render(e,W,t,o,n)),k+=r.y+a}for(let C=0;C<this.#d.length;C++){let z=this.#d[C],W=z.Size(),le=W.x*t.zoom,de=x.get();de.x=h.Position.x+(h.Size.x-le)/2,de.y=k,this.#R.Push(z.Draw(e,de,t.zoom,o)),k+=W.y*t.zoom+a}let j=x.get();j.x=h.Position.x+h.Size.x/2,j.y=h.Position.y+h.Size.y+15*t.zoom;for(let C=0;C<this.#r.length;C++){let z=this.#r[C];j.y+=z.render(e,t.zoom,j,i!==0)+10*t.zoom}})}};var Ve=class{#t;#e;#i;#n;constructor(e,t,i,o){this.#t=e,this.#e=t,this.#i=i,this.#n=o}type(){return this.#t}lexeme(){return this.#e}tokenStart(){return this.#i}tokenEnd(){return this.#n}};var Fe=class{#t;#e;#i;constructor(e){this.#e=0,this.#t=e,this.#i=new Array}tokens(){return this.#i}#n(){return this.#e>this.#t.length-1?"":this.#t.charAt(this.#e)}#o(){this.#e++}#r(){return this.#e++,this.#e>this.#t.length-1?"":this.#t.charAt(this.#e)}#l=0;#s(e,t){this.#i.push(new Ve(e,t,this.#l,this.#e)),this.#l=this.#e}#d(){this.#r()==="#"?(this.#s("H3","###"),this.#o()):this.#s("H2","##")}#u(){this.#r()==="#"?this.#d():this.#s("H1","#")}#h(){let e=this.#n();for(;e!==""&&!(e!==" "&&e!==" ");)e=this.#r();this.#s("Space"," ")}#a(){let e=this.#n(),t=-1;for(;e!=="";){if((e===" "||e===" ")&&t===-1){this.#o();continue}if(e===`
|
|
2
2
|
`||e==="*"||e==="`"){t!=-1&&this.#s("Text",this.#t.substring(t,this.#e));return}t===-1&&(t=this.#e),e=this.#r()}t!=-1&&this.#s("Text",this.#t.substring(t,this.#e))}parse(){let e=this.#n();for(;e!=="";)e===" "||e===" "?this.#h():e==="#"?this.#u():e===`
|
|
3
3
|
`?(this.#s("New Line",`
|
|
4
|
-
`),this.#o()):e==="*"?(this.#s("Star","*"),this.#o()):e==="`"?(this.#s("`","`"),this.#o()):this.#a(),e=this.#n()}};var
|
|
5
|
-
`);for(let l=0;l<r.length;l++){let
|
|
4
|
+
`),this.#o()):e==="*"?(this.#s("Star","*"),this.#o()):e==="`"?(this.#s("`","`"),this.#o()):this.#a(),e=this.#n()}};var We=class{#t;#e;#i;#n;constructor(e){this.#t=e,this.#n=-1,this.#i=new P,this.#e=new P,document.fonts.addEventListener("loadingdone",t=>{this.#n=-1})}#o(e,t){if(this.#n===t)return;let i=t;i-=d.Note.CodeBlock.Padding*2,this.#i.Clear(),this.#e.Clear();let o=0,n=this.#t.style().getSize()+d.Note.LineSpacing,r=this.#t.split(`
|
|
5
|
+
`);for(let l=0;l<r.length;l++){let h=r[l].breakIntoLines(e,i);for(let u=0;u<h.length;u++)this.#i.Push(h[u]),this.#e.Push({x:0,y:o}),o+=n}this.#n=t}render(e,t,i,o){this.#o(e,o);let n=d.Note.CodeBlock.Padding*i,r=0;for(let a=0;a<this.#i.Count();a++){let h=this.#e.At(a);r=Math.max(r,h.y*i)}let l=t.y+r+i*5;e.fillStyle=d.Note.CodeBlock.BackgroundColor,e.beginPath(),e.roundRect(t.x,t.y,o*i,r+n*2,d.Note.CodeBlock.BorderRadius*i),e.fill();for(let a=0;a<this.#i.Count();a++){let h=this.#i.At(a),u=this.#e.At(a);h.render(e,i,{x:u.x*i+t.x+n,y:u.y*i+t.y+n}),r=Math.max(r,u.y*i)}return r+n*2}},De=class{#t;constructor(e){this.#t=e}render(e,t,i,o){let n=0,r=20,l={x:t.x+r*i,y:t.y},a=d.Note.DotSize*i;for(let h=0;h<this.#t.length;h++)e.beginPath(),e.arc(t.x+a,l.y+a*3,a,0,2*Math.PI),e.fill(),n+=this.#t[h].render(e,l,i,o-r)+i*d.Note.LineSpacing*2,l.y=t.y+n;return n}},X=class{#t;#e;#i;#n;#o;#r;constructor(e,t,i){this.#i=e,this.#t=t,this.#e=i,this.#r=-1,this.#o=new P,this.#n=new P,document.fonts.addEventListener("loadingdone",o=>{this.#r=-1})}#l(e,t){if(this.#r===t)return;let i=t;this.#e&&(i-=d.Note.CodeBlock.Padding*2),this.#o.Clear(),this.#n.Clear();let o=g(),n=g(),r=0,l=new P,a=new P;for(let h=0;h<this.#i.length;h++){let m=this.#i[h].splitAtWidth(e,i-o.x),f=0;for(;m.length>1&&f<100;){if(f++,m[0].get()===""&&l.Count()===0)if(m[1].get().length===1){m[0]=m[1];break}else m=m[1].splitAtIndex(1);m[0].get()!==""&&(m[0].size(e,1,n),r=Math.max(r,n.y),l.Push(m[0]),a.Push(o.x)),o.y+=r;for(let w=0;w<l.Count();w++)this.#o.Push(l.At(w)),this.#n.Push({x:a.At(w),y:o.y});l.Clear(),a.Clear(),o.y+=d.Note.LineSpacing,r=0,o.x=0,m=m[1].splitAtWidth(e,i)}f===100&&console.log(m),m[0].size(e,1,n),r=Math.max(r,n.y),l.Push(m[0]),a.Push(o.x),o.x+=n.x}o.y+=r;for(let h=0;h<l.Count();h++)this.#o.Push(l.At(h)),this.#n.Push({x:a.At(h),y:o.y});this.#r=t}render(e,t,i,o){this.#l(e,o);let n=0;if(this.#e&&(n+=d.Note.CodeBlock.Padding*i),this.#e){let l=0;for(let h=0;h<this.#o.Count();h++){let u=this.#n.At(h);l=Math.max(l,u.y*i)}let a=t.y+l+i*5;e.fillStyle=d.Note.CodeBlock.BackgroundColor,e.beginPath(),e.roundRect(t.x,t.y,o*i,l+n*2,d.Note.CodeBlock.BorderRadius*i),e.fill()}let r=0;for(let l=0;l<this.#o.Count();l++){let a=this.#o.At(l),h=this.#n.At(l);a.render(e,i,{x:h.x*i+t.x+n,y:h.y*i+t.y+n}),r=Math.max(r,h.y*i)}if(this.#t){let l=t.y+r+i*5;e.strokeStyle=d.Note.FontColor,e.lineWidth=d.Note.HeaderLineWidth*i,e.beginPath(),e.moveTo(t.x,l),e.lineTo(t.x+o*i,l),e.stroke()}return r+n*2}};var Ee=class{#t;#e;#i;constructor(e,t){this.#i=e,this.#e=0,this.#t=t}#n(){return this.#e>this.#t.length-1?null:this.#t[this.#e]}#o(){this.#e++}#r(){return this.#e++,this.#e>=this.#t.length-1?null:this.#t[this.#e]}#l(){return this.#e+1>=this.#t.length-1?null:this.#t[this.#e+1]}#s(e){return this.#e+e>=this.#t.length-1?null:this.#t[this.#e+e]}#d(){let e=this.#r();if(e?.type()==="Space")return[new y("*")];let t=!1;for(;e!==null&&e.type()==="Star";)t=!0,e=this.#r();let i="",o=!1,n=!1,r=!1;for(;e!==null&&e.type()!=="New Line";){if(e.type()==="Star"){if(n){o=!0;break}if(n=!0,t===!1)break}if(n&&e.type()!=="Star")break;e.type()==="Text"&&(i+=e.lexeme(),r=!0),e.type()==="Space"&&(i+=e.lexeme(),r=!1),e=this.#r()}let l={};return r&&n&&(o?l.weight="bold":l.style="italic"),[new y(i,l)]}#u(){let e=new Array,t="",i=this.#n();for(;i!==null&&i.type()==="Space";)i=this.#r();for(;i!==null&&i.type()!=="New Line";){switch(i.type()){case"Text":case"H1":case"H2":case"H3":case"Space":t+=i.lexeme();break;case"Star":t!==""&&(e.push(new y(t)),t="");let o=this.#d();for(let n=0;n<o.length;n++)e.push(o[n]);break}i=this.#r()}return t!==""&&e.push(new y(t)),e}#h(){this.#o();let e=this.#u();for(let t=0;t<e.length;t++)e[t].setColor(d.Note.FontColor),e[t].setSize(d.Note.H1.FontSize),e[t].setWeight("bold");return new X(e,!0,!1)}#a(){this.#o();let e=this.#u();for(let t=0;t<e.length;t++)e[t].setColor(d.Note.FontColor),e[t].setSize(d.Note.H2.FontSize),e[t].setWeight("bold");return new X(e,!0,!1)}#c(){this.#o();let e=this.#u();for(let t=0;t<e.length;t++)e[t].setColor(d.Note.FontColor),e[t].setSize(d.Note.H3.FontSize),e[t].setWeight("bold");return new X(e,!1,!1)}#f(){if(this.#l()?.type()!=="Space"){let t=this.#u();return this.#g(t),new X(t,!1,!1)}let e=new Array;for(;this.#n()?.type()==="Star"&&this.#l()?.type()==="Space";){this.#o();let t=this.#u();this.#g(t),e.push(new X(t,!1,!1)),this.#o()}return new De(e)}#g(e){for(let t=0;t<e.length;t++)e[t].setColor(d.Note.FontColor),e[t].setSize(d.Note.FontSize)}#m(){if(this.#l()?.type()!=="`"||this.#s(2)?.type()!=="`"){let r=this.#u();return this.#g(r),new X(r,!1,!1)}this.#o(),this.#o();let e=this.#r();e?.type()==="New Line"&&(e=this.#r());let t=e?.tokenStart(),i=t;for(;e!==null;){if(e.type()==="`"&&this.#l()?.type()==="`"&&this.#s(2)?.type()==="`"){i=e.tokenEnd()-1;break}e=this.#r()}this.#o(),this.#o(),this.#o();let o=this.#i.substring(t,i),n=new y(o);return this.#g([n]),new We(n)}parse(){let e=this.#n(),t=new Array;for(;e!==null;){switch(e.type()){case"H1":t.push(this.#h());break;case"H2":t.push(this.#a());break;case"H3":t.push(this.#c());break;case"Text":let i=this.#u();this.#g(i),t.push(new X(i,!1,!1));break;case"Star":t.push(this.#f());break;case"New Line":this.#o();break;case"`":t.push(this.#m());break;default:this.#o()}e=this.#n()}return t}};function Pt(s){let e=new Fe(s);return e.parse(),new Ee(s,e.tokens()).parse()}var Ie=20,H=10,fe=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;#h;#a;constructor(e){this.#h=new Array,this.#a=new Array,this.#o=e?.metadata===void 0?{}:e?.metadata,this.#e=[],this.#t="",this.#u=!1,this.#s=e?.locked===void 0?!0:!e?.locked,this.#i=e?.width===void 0?500:e.width,this.#r=e?.position===void 0?{x:0,y:0}:e.position,this.setText(e?.text===void 0?"":e?.text),this.#d={Position:{x:0,y:0},Size:{x:0,y:0}},this.#l=0,this.#n=new I({border:{color:"white",size:1}}),e?.onWidthChange&&this.#h.push(e.onWidthChange),e?.onContentChange&&this.#a.push(e.onContentChange)}setText(e){this.#t=e,this.#e=Pt(this.#t);for(let t=0;t<this.#a.length;t++)this.#a[t](this,e)}setMetadataProperty(e,t){this.#o[e]=t}getMetadataProperty(e){return this.#o[e]}text(){return this.#t}width(){return this.#i}position(){return this.#r}translate(e){this.#r.x+=e.x,this.#r.y+=e.y}setPosition(e){p(this.#r,e)}handleSelected(){return this.#l}selectHandle(e){this.#l=e}#c=g();setWidth(e){e===void 0&&console.error("Attempted to set note's width to undefined"),this.#i=e;for(let t=0;t<this.#h.length;t++)this.#h[t](this,e)}addWidthChangeListener(e){e!=null&&this.#h.push(e)}addContentChangeListener(e){e!=null&&this.#a.push(e)}render(e,t,i){if(this.#s&&(this.#u||this.#l!==0)){if(i){if(this.#l===2){let u=this.#r.x*t.zoom+t.position.x;this.setWidth(Math.max((i.x-u)/t.zoom,1))}else if(this.#l===1){let u=this.#i*t.zoom,m=this.#r.x*t.zoom+t.position.x+u;this.setWidth(Math.max((m-i.x)/t.zoom,1)),this.#r.x=m-this.#i*t.zoom-t.position.x,this.#r.x/=t.zoom}}this.#n.Outline(e,this.leftResizeHandleBox(),t.zoom,2),this.#n.Outline(e,this.rightResizeHandleBox(),t.zoom,2),e.beginPath();let r=this.#d.Position.x,l=this.#d.Position.x+this.#d.Size.x,a=this.#d.Position.y,h=this.#d.Position.y+this.#d.Size.y;e.moveTo(r,a+this.#d.Size.y/2-H),e.lineTo(r,a),e.lineTo(l,a),e.lineTo(l,a+this.#d.Size.y/2-H),e.moveTo(r,h-this.#d.Size.y/2+H),e.lineTo(r,h),e.lineTo(l,h),e.lineTo(l,h-this.#d.Size.y/2+H),e.stroke()}t.graphSpaceToScreenSpace(this.#r,this.#c),p(this.#d.Position,this.#c);let o=this.#c.y,n=d.Note.EntrySpacing*t.zoom;e.textAlign="left",e.textBaseline="alphabetic";for(let r=0;r<this.#e.length;r++){let l=this.#e[r];this.#c.y+=l.render(e,this.#c,t.zoom,this.#i)+n}this.#d.Position.x-=Ie,this.#d.Position.y-=Ie,this.#d.Size.x=t.zoom*this.#i+Ie*2,this.#d.Size.y=this.#c.y-o+Ie*2}leftResizeHandleBox(){return{Position:{x:this.#d.Position.x-H/2,y:this.#d.Position.y+this.#d.Size.y/2-H/2},Size:{x:H,y:H}}}rightResizeHandleBox(){return{Position:{x:this.#d.Position.x-H/2+this.#d.Size.x,y:this.#d.Position.y+this.#d.Size.y/2-H/2},Size:{x:H,y:H}}}edittingLayout(){return this.#s}setHovering(e){this.#u=e}editContent(){let e=null,t="Save";new L({title:"Edit Note",options:[t,"Cancel"],content:()=>{let o=document.createElement("div");return e=document.createElement("textarea"),e.rows=8,e.cols=50,e.value=this.#t,o.append(e),o},onClose:o=>{o!==t||e===null||this.setText(e.value)}}).Show()}lock(){this.#s=!1}unlock(){this.#s=!0}bounds(){return this.#d}};var Le=class{#t;#e;#i;#n;#o;#r;#l;#s;constructor(e){if(this.#n=0,this.#t=[],this.#e=null,this.#i=null,this.#o=new Array,this.#r=new Array,this.#l=new Array,this.#s=new Array,e?.notes!==void 0)for(let t=0;t<e?.notes.length;t++)this.addNote(new fe(e?.notes[t]));e?.onNoteAdded!==void 0&&this.#o.push(e?.onNoteAdded),e?.onNoteDragStop!==void 0&&this.#s.push(e?.onNoteDragStop),e?.onNoteDragStart!==void 0&&this.#l.push(e?.onNoteDragStart),e?.onNoteRemoved!==void 0&&this.#r.push(e?.onNoteRemoved)}addNote(e){if(e!=null){this.#t.push(e);for(let t=0;t<this.#o.length;t++)this.#o[t](e)}}getNotes(){return this.#t}addNoteAddedListener(e){e!=null&&this.#o.push(e)}addNoteRemovedListener(e){e!=null&&this.#r.push(e)}addNoteDragStartListener(e){e!=null&&this.#l.push(e)}addNoteDragStopListener(e){e!=null&&this.#s.push(e)}openContextMenu(e,t){let i="node-flow-graph-note-menu",o={items:[{name:"New Note",group:i,callback:()=>{this.addNote(new fe({text:`#Note
|
|
6
6
|
|
|
7
|
-
Right-click this note and select "edit note" to put what you want here.`,width:300,position:t}))}}],subMenus:[]};if(this.#e!==null){let n=this.#e;o.items?.push({name:"Delete Note",group:i,callback:()=>{this.removeNote(n)}},{name:"Edit Note",group:i,callback:n.editContent.bind(n)}),n.edittingLayout()?o.items?.push({name:"Lock Note",group:i,callback:n.lock.bind(n)}):o.items?.push({name:"Unlock Note",group:i,callback:n.unlock.bind(n)})}return o}clickStart(e,t,i){if(this.#e!==null&&this.#e.edittingLayout()){this.#i=this.#e,this.#i.selectHandle(this.#n);for(let o=0;o<this.#l.length;o++)this.#l[o](this.#i);return!0}return!1}clickEnd(){if(this.#i!==null){this.#i.selectHandle(0);for(let e=0;e<this.#s.length;e++)this.#s[e](this.#i)}this.#i=null}mouseDragEvent(e,t){return this.#i===null?!1:(this.#i.handleSelected()||this.#i.translate({x:e.x*(1/t),y:e.y*(1/t)}),!0)}fileDrop(e){return!1}removeNote(e){let t=this.#t.indexOf(e);if(t>-1){let i=this.#t[t];this.#t.splice(t,1);for(let o=0;o<this.#r.length;o++)this.#r[o](i)}else console.error("no note found to remove")}removeAllNotes(){let e=this.#t;this.#t=[],this.#e=null,this.#i=null;for(let t=0;t<e.length;t++)for(let i=0;i<this.#r.length;i++)this.#r[i](e[t])}render(e,t,i){if(this.#e=null,this.#n=0,i)for(let o=0;o<this.#t.length;o++)this.#t[o].setHovering(!1),b(this.#t[o].bounds(),i)&&(this.#e=this.#t[o]);this.#e!=null&&(this.#e.setHovering(!0),i&&(b(this.#e.leftResizeHandleBox(),i)?this.#n=1:b(this.#e.rightResizeHandleBox(),i)&&(this.#n=2)));for(let o=0;o<this.#t.length;o++)this.#t[o].render(e,t,i)}};var Le=class{#t;constructor(){this.#t=new w}queue(e){!e||this.#t.Push(e)}render(e,t,i){for(let o=0;o<this.#t.Count();o++)this.#t.At(o)();this.#t.Clear()}openContextMenu(e,t){return null}clickStart(e,t,i){return!1}mouseDragEvent(e,t){return!1}fileDrop(e){return!1}clickEnd(){}};var it=class{#t;items;constructor(e,t){this.#t=e,this.items=t}updateRendering(e){let t=!1;for(let i=0;i<this.items.length;i++){let o=this.items[i].filter(e);this.items[i].render(o),o&&(t=!0)}this.#t.setDisplay(t?"flex":"none")}},ot=class{#t;#e;#i;constructor(e,t,i){this.#t=e.toLowerCase(),this.#e=t,this.#i=i}filter(e){if(e.length===0)return!0;for(let t=0;t<e.length;t++)if(e[t]!==""&&this.#t.indexOf(e[t])===-1)return!1;return!0}render(e){this.#e.setDisplay(e?"flex":"none")}rendering(){return this.#e.getDisplay()==="flex"}highlight(e){this.#e.setBackgroundColor(e?d.ContextMenu.HighlightColor:"")}select(){this.#i.callback&&this.#i.callback()}};function kt(s,e,t,i){let o=e?.name??"";if(s!==""&&(o=s+" / "+o),e?.items&&e.items.length>0){let n=new U(new y(o,{color:d.ContextMenu.FontColor,weight:"bold",size:12}),{Align:"center",VerticalAlign:"center",Padding:16});t.push(n);let r=new Array;for(let l=0;l<e.items.length;l++){let h=e.items[l],a=new U(new y(h.name??"Item",{color:d.ContextMenu.FontColor}),{Padding:8});r.push(new ot(o+(h.name??""),a,h)),t.push(a)}i.push(new it(n,r))}if(e?.subMenus)for(let n=0;n<e?.subMenus.length;n++){let r=e?.subMenus[n];kt(o,r,t,i)}}var He=class{#t;#e;#i;#n;constructor(e){this.#t=[],this.#n=0,this.#i=new y("",{color:d.ContextMenu.FontColor});let t=[new U(new y("Search",{color:d.ContextMenu.FontColor}),{Padding:{Bottom:0,Left:8,Right:8,Top:8}}),new $([new U(this.#i,void 0)],{Border:{Radius:2},BackgroundColor:"#003847",Padding:8,Margin:8,MinHeight:46})];e&&kt("",e,t,this.#t),this.#e=new $(t,{BackgroundColor:d.ContextMenu.BackgroundColor,Border:{Thickness:1,Radius:4}}),this.#o()}execute(){let e=this.#n;for(let t=0;t<this.#t.length;t++){let i=this.#t[t];for(let o=0;o<i.items.length;o++)if(i.items[o].rendering()){if(e===0){i.items[o].select();return}e--}}}#o(){let e=this.#i.get().trim().toLowerCase(),t=new Array;if(e!==""){var i=e.split(" ");for(let n=0;n<i.length;n++){let r=i[n].trim();r!==""&&t.push(r)}}let o=this.#n;for(let n=0;n<this.#t.length;n++){let r=this.#t[n];r.updateRendering(t);for(let l=0;l<r.items.length;l++)r.items[l].rendering()&&(r.items[l].highlight(o===0),o--)}}keyboardEvent(e){let t=!0;if(e.code==="Backspace"){this.#n=0;let i=this.#i.get();this.#i.set(i.slice(0,i.length-1))}else/^[a-zA-Z0-9]$/.test(e.key)||e.key===" "?(this.#n=0,this.#i.set(this.#i.get()+e.key)):e.key==="ArrowUp"?this.#n=Math.max(0,this.#n-1):e.key==="ArrowDown"?this.#n++:t=!1;t&&(this.#o(),e.preventDefault())}renderSize={x:0,y:0};render(e,t,i,o){return this.#e.calcSize(e,this.renderSize,{x:-1,y:-1}),t.y+Math.min(this.renderSize.y,400)>e.canvas.clientHeight&&(t.y=e.canvas.clientHeight-Math.min(this.renderSize.y,400)),t.x+this.renderSize.x>e.canvas.clientWidth&&(t.x=e.canvas.clientWidth-this.renderSize.x),t.y<0&&(t.y=0),t.x<0&&(t.x=0),this.#e.render(e,t,1,this.renderSize),null}};function It(s){return(e,t,i,o)=>{t.fillStyle=s,t.fillRect(0,0,e.width,e.height);let n=Math.round(_(o-.3)*255);if(n<=0)return;t.fillStyle=`rgba(41, 54, 57, ${n})`;let r=100,l=2*Math.PI,h=2*o;for(let a=-50;a<50;a++){let c=a*r*o+i.x;for(let m=-50;m<50;m++){let p=m*r*o+i.y;t.beginPath(),t.arc(c,p,h,0,l),t.fill()}}}}var Lt="graph-context-menu",nt=class{#t;constructor(e){this.#t=e}clickStart(e,t,i){for(let o=this.#t.length-1;o>=0;o--)if(this.#t[o].clickStart(e,t,i))return}fileDrop(e){for(let t=this.#t.length-1;t>=0;t--)if(this.#t[t].fileDrop(e))return!0;return!1}openContextMenu(e,t){let i={};for(let o=0;o<this.#t.length;o++){let n=this.#t[o].openContextMenu(e,t);n!==null&&(i=X(i,n))}return i}clickEnd(){for(let e=0;e<this.#t.length;e++)this.#t[e].clickEnd()}mouseDragEvent(e,t){for(let i=0;i<this.#t.length;i++)if(this.#t[i].mouseDragEvent(e,t))return!0;return!1}render(e,t,i){let o={};for(let n=0;n<this.#t.length;n++)Y("Render_Subsystem_"+n,()=>{let r=this.#t[n].render(e,t,i);r?.cursorStyle&&(r.cursorStyle=r?.cursorStyle)});return o}},Bt=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;#h;#a;#c;constructor(e,t){let i=new Le;this.#a=new ze(i,{nodes:t?.nodes,idleConnection:t?.idleConnection}),this.#x="default",this.#p="default",this.#c=new Ie(t?.board),this.#u=[new nt([this.#c,this.#a,i])],this.#h=0,this.#r=new ce,this.#n=X({items:[{name:"Reset View",group:Lt,callback:this.#r.reset.bind(this.#r)}]},t?.contextMenu),this.#l=null,this.#s=null,this.#d=null,this.#e=e;let o=e.getContext("2d");if(o===null)throw new Error("could not create canvas context");if(this.#t=o,t?.backgroundRenderer!==void 0)this.#i=t?.backgroundRenderer;else{let n=t?.backgroundColor===void 0?d.Graph.BackgroundColor:t.backgroundColor;this.#i=It(n)}window.requestAnimationFrame(this.#T.bind(this)),this.#e.addEventListener("wheel",n=>{n.preventDefault(),this.zoom(Math.sign(n.deltaY))},!1),new Pe(this.#e,this.#C.bind(this),n=>{this.#o=n},this.#f.bind(this),this.#y.bind(this),this.#v.bind(this),this.#g.bind(this)),document.addEventListener("keydown",n=>{if(document.activeElement&&["INPUT","TEXTAREA"].includes(document.activeElement.tagName))return;if(this.#s){if(n.code==="Escape"){this.#s=null;return}if(n.code==="Enter"){this.#s.Menu.execute(),this.#s=null;return}this.#s.Menu.keyboardEvent(n);return}if(!(n.key==" "||n.code=="Space")||!this.#o)return;let l=this.#m(this.#o),h=this.#a.nodeFactory().newNodeSubmenus(this.#a,l);this.#s={Menu:new He({subMenus:h}),Position:l}})}#g(e){if(this.currentView().fileDrop(e))return;let t=e.name.split("."),i=t[t.length-1];if(i!=="jpg"&&i!=="jpeg"&&i!=="png")return;let o=f();this.#o&&g(o,this.#m(this.#o)),this.#a.addNode(new se({title:t[0],position:o,widgets:[{type:"image",config:{blob:e}}]}))}addNoteAddedListener(e){this.#c.addNoteAddedListener(e)}addNoteRemovedListener(e){this.#c.addNoteRemovedListener(e)}addNoteDragStartListener(e){this.#c.addNoteDragStartListener(e)}addNoteDragStopListener(e){this.#c.addNoteDragStopListener(e)}zoom(e){let t;if(this.#o&&(t=this.#m(this.#o)),this.#r.zoom+=e*this.#r.zoom*.05,!t||!this.#o)return;let i=this.#m(this.#o);this.#r.position.x+=(i.x-t.x)*this.#r.zoom,this.#r.position.y+=(i.y-t.y)*this.#r.zoom}#f(e,t){if(this.#d!==null){this.#d.click(),this.#l=null,this.#d=null;return}this.#l=null,this.#s=null,this.#d=null,this.#o=e,this.currentView().clickStart(e,this.#r,t)}currentView(){return this.#u[this.#h]}organize(){this.#a.organize(this.#t)}addPublisher(e,t){this.#a.addPublisher(e,t)}getNodes(){return this.#a.getNodes()}connectedInputsNodeReferences(e){return this.#a.connectedInputsNodeReferencesByIndex(e)}connectedOutputsNodeReferences(e){return this.#a.connectedOutputsNodeReferences(e)}connectNodes(e,t,i,o){return this.#a.connectNodes(e,t,i,o)}addNode(e){this.#a.addNode(e)}removeNode(e){this.#a.removeNode(e)}addNote(e){this.#c.addNote(e)}removeNote(e){this.#c.removeNote(e)}removeAllNotes(){this.#c.removeAllNotes()}getNotes(){return this.#c.getNotes()}addOnNodeCreatedListener(e){this.#a.addOnNodeCreatedListener(e)}addOnNodeAddedListener(e){this.#a.addOnNodeAddedListener(e)}addOnNodeRemovedListener(e){this.#a.addOnNodeRemovedListener(e)}#m(e){let t=f();return this.#r.screenSpaceToGraphSpace(e,t),t}#v(e){let t=this.#n,i=this.#m(e);t=X(t,this.currentView().openContextMenu(this.#t,i)),this.#l={Menu:new he(t),Position:i}}#y(){this.currentView().clickEnd()}#C(e){this.currentView().mouseDragEvent(e,this.#r.zoom)||(this.#r.position.x+=e.x,this.#r.position.y+=e.y)}#x;#p;#T(){if(this.#e.parentNode!==null){var e=this.#e.parentNode.getBoundingClientRect();this.#e.width=e.width,this.#e.height=e.height}this.#p="default",Y("Render_Background",this.#V.bind(this)),Y("Render_View_"+this.#h,()=>{let t=this.currentView().render(this.#t,this.#r,this.#o);t?.cursorStyle&&(this.#p=t?.cursorStyle)}),Y("Render_Context",this.#N.bind(this)),Y("Render_QuickMenu",this.#M.bind(this)),this.#x!==this.#p&&(this.#e.style.cursor=this.#p),this.#x=this.#p,window.requestAnimationFrame(this.#T.bind(this))}#V(){this.#i(this.#e,this.#t,this.#r.position,this.#r.zoom)}#N(){x.run(()=>{if(this.#l!==null){let e=x.get();this.#r.graphSpaceToScreenSpace(this.#l.Position,e),this.#d=this.#l.Menu.render(this.#t,e,this.#r.zoom,this.#o,!0),this.#d!==null&&(this.#p="pointer")}})}#M(){x.run(()=>{if(this.#s!==null){let e=x.get();this.#r.graphSpaceToScreenSpace(this.#s.Position,e),this.#d=this.#s.Menu.render(this.#t,e,this.#r.zoom,this.#o),this.#d!==null&&(this.#p="pointer")}})}};export{ee as ButtonWidget,te as ColorWidget,se as FlowNode,me as FlowNote,O as GlobalWidgetFactory,re as ImageWidget,Wt as MessageType,Bt as NodeFlowGraph,wt as NodeState,J as NumberWidget,Se as Publisher,ie as SliderWidget,oe as StringWidget,xe as TextWidget,d as Theme,ne as ToggleWidget};
|
|
7
|
+
Right-click this note and select "edit note" to put what you want here.`,width:300,position:t}))}}],subMenus:[]};if(this.#e!==null){let n=this.#e;o.items?.push({name:"Delete Note",group:i,callback:()=>{this.removeNote(n)}},{name:"Edit Note",group:i,callback:n.editContent.bind(n)}),n.edittingLayout()?o.items?.push({name:"Lock Note",group:i,callback:n.lock.bind(n)}):o.items?.push({name:"Unlock Note",group:i,callback:n.unlock.bind(n)})}return o}clickStart(e,t,i){if(this.#e!==null&&this.#e.edittingLayout()){this.#i=this.#e,this.#i.selectHandle(this.#n);for(let o=0;o<this.#l.length;o++)this.#l[o](this.#i);return!0}return!1}clickEnd(){if(this.#i!==null){this.#i.selectHandle(0);for(let e=0;e<this.#s.length;e++)this.#s[e](this.#i)}this.#i=null}mouseDragEvent(e,t){return this.#i===null?!1:(this.#i.handleSelected()||this.#i.translate({x:e.x*(1/t),y:e.y*(1/t)}),!0)}fileDrop(e){return!1}removeNote(e){let t=this.#t.indexOf(e);if(t>-1){let i=this.#t[t];this.#t.splice(t,1);for(let o=0;o<this.#r.length;o++)this.#r[o](i)}else console.error("no note found to remove")}removeAllNotes(){let e=this.#t;this.#t=[],this.#e=null,this.#i=null;for(let t=0;t<e.length;t++)for(let i=0;i<this.#r.length;i++)this.#r[i](e[t])}render(e,t,i){if(this.#e=null,this.#n=0,i)for(let o=0;o<this.#t.length;o++)this.#t[o].setHovering(!1),b(this.#t[o].bounds(),i)&&(this.#e=this.#t[o]);this.#e!=null&&(this.#e.setHovering(!0),i&&(b(this.#e.leftResizeHandleBox(),i)?this.#n=1:b(this.#e.rightResizeHandleBox(),i)&&(this.#n=2)));for(let o=0;o<this.#t.length;o++)this.#t[o].render(e,t,i)}};var He=class{#t;constructor(){this.#t=new P}queue(e){!e||this.#t.Push(e)}render(e,t,i){for(let o=0;o<this.#t.Count();o++)this.#t.At(o)();this.#t.Clear()}openContextMenu(e,t){return null}clickStart(e,t,i){return!1}mouseDragEvent(e,t){return!1}fileDrop(e){return!1}clickEnd(){}};var ot=class{#t;items;constructor(e,t){this.#t=e,this.items=t}updateRendering(e){let t=!1;for(let i=0;i<this.items.length;i++){let o=this.items[i].filter(e);this.items[i].render(o),o&&(t=!0)}this.#t.setDisplay(t?"flex":"none")}},nt=class{#t;#e;#i;constructor(e,t,i){this.#t=e.toLowerCase(),this.#e=t,this.#i=i}filter(e){if(e.length===0)return!0;for(let t=0;t<e.length;t++)if(e[t]!==""&&this.#t.indexOf(e[t])===-1)return!1;return!0}render(e){this.#e.setDisplay(e?"flex":"none")}rendering(){return this.#e.getDisplay()==="flex"}highlight(e){this.#e.setBackgroundColor(e?d.ContextMenu.HighlightColor:"")}select(){this.#i.callback&&this.#i.callback()}};function Bt(s,e,t,i){let o=e?.name??"";if(s!==""&&(o=s+" / "+o),e?.items&&e.items.length>0){let n=new Z(new y(o,{color:d.ContextMenu.FontColor,weight:"bold",size:12}),{Align:"center",VerticalAlign:"center",Padding:16});t.push(n);let r=new Array;for(let l=0;l<e.items.length;l++){let a=e.items[l],h=new Z(new y(a.name??"Item",{color:d.ContextMenu.FontColor}),{Padding:8});r.push(new nt(o+(a.name??""),h,a)),t.push(h)}i.push(new ot(n,r))}if(e?.subMenus)for(let n=0;n<e?.subMenus.length;n++){let r=e?.subMenus[n];Bt(o,r,t,i)}}var Oe=class{#t;#e;#i;#n;constructor(e){this.#t=[],this.#n=0,this.#i=new y("",{color:d.ContextMenu.FontColor});let t=[new Z(new y("Search",{color:d.ContextMenu.FontColor}),{Padding:{Bottom:0,Left:8,Right:8,Top:8}}),new Q([new Z(this.#i,void 0)],{Border:{Radius:2},BackgroundColor:"#003847",Padding:8,Margin:8,MinHeight:46})];e&&Bt("",e,t,this.#t),this.#e=new Q(t,{BackgroundColor:d.ContextMenu.BackgroundColor,Border:{Thickness:1,Radius:4}}),this.#o()}execute(){let e=this.#n;for(let t=0;t<this.#t.length;t++){let i=this.#t[t];for(let o=0;o<i.items.length;o++)if(i.items[o].rendering()){if(e===0){i.items[o].select();return}e--}}}#o(){let e=this.#i.get().trim().toLowerCase(),t=new Array;if(e!==""){var i=e.split(" ");for(let n=0;n<i.length;n++){let r=i[n].trim();r!==""&&t.push(r)}}let o=this.#n;for(let n=0;n<this.#t.length;n++){let r=this.#t[n];r.updateRendering(t);for(let l=0;l<r.items.length;l++)r.items[l].rendering()&&(r.items[l].highlight(o===0),o--)}}keyboardEvent(e){let t=!0;if(e.code==="Backspace"){this.#n=0;let i=this.#i.get();this.#i.set(i.slice(0,i.length-1))}else/^[a-zA-Z0-9]$/.test(e.key)||e.key===" "?(this.#n=0,this.#i.set(this.#i.get()+e.key)):e.key==="ArrowUp"?this.#n=Math.max(0,this.#n-1):e.key==="ArrowDown"?this.#n++:t=!1;t&&(this.#o(),e.preventDefault())}renderSize={x:0,y:0};render(e,t,i,o){return this.#e.calcSize(e,this.renderSize,{x:-1,y:-1}),t.y+Math.min(this.renderSize.y,400)>e.canvas.clientHeight&&(t.y=e.canvas.clientHeight-Math.min(this.renderSize.y,400)),t.x+this.renderSize.x>e.canvas.clientWidth&&(t.x=e.canvas.clientWidth-this.renderSize.x),t.y<0&&(t.y=0),t.x<0&&(t.x=0),this.#e.render(e,t,1,this.renderSize),null}};function Xt(s){return(e,t,i,o)=>{t.fillStyle=s,t.fillRect(0,0,e.width,e.height);let n=Math.round(U(o-.3)*255);if(n<=0)return;t.fillStyle=`rgba(41, 54, 57, ${n})`;let r=100,l=2*Math.PI,a=2*o;for(let h=-50;h<50;h++){let u=h*r*o+i.x;for(let m=-50;m<50;m++){let f=m*r*o+i.y;t.beginPath(),t.arc(u,f,a,0,l),t.fill()}}}}var Yt="graph-context-menu",rt=class{#t;constructor(e){this.#t=e}clickStart(e,t,i){for(let o=this.#t.length-1;o>=0;o--)if(this.#t[o].clickStart(e,t,i))return}fileDrop(e){for(let t=this.#t.length-1;t>=0;t--)if(this.#t[t].fileDrop(e))return!0;return!1}openContextMenu(e,t){let i={};for(let o=0;o<this.#t.length;o++){let n=this.#t[o].openContextMenu(e,t);n!==null&&(i=q(i,n))}return i}clickEnd(){for(let e=0;e<this.#t.length;e++)this.#t[e].clickEnd()}mouseDragEvent(e,t){for(let i=0;i<this.#t.length;i++)if(this.#t[i].mouseDragEvent(e,t))return!0;return!1}render(e,t,i){let o={};for(let n=0;n<this.#t.length;n++)Y("Render_Subsystem_"+n,()=>{let r=this.#t[n].render(e,t,i);r?.cursorStyle&&(r.cursorStyle=r?.cursorStyle)});return o}},Tt=class{#t;#e;#i;#n;#o;#r;#l;#s;#d;#u;#h;#a;#c;constructor(e,t){let i=new He;this.#a=new Ae(i,{nodes:t?.nodes,idleConnection:t?.idleConnection}),this.#b="default",this.#p="default",this.#c=new Le(t?.board),this.#u=[new rt([this.#c,this.#a,i])],this.#h=0,this.#r=new re,this.#n=q({items:[{name:"Center on Graph",group:Yt,callback:this.centerOnGraph.bind(this)}]},t?.contextMenu),this.#l=null,this.#s=null,this.#d=null,this.#e=e;let o=e.getContext("2d");if(o===null)throw new Error("could not create canvas context");if(this.#t=o,t?.backgroundRenderer!==void 0)this.#i=t?.backgroundRenderer;else{let n=t?.backgroundColor===void 0?d.Graph.BackgroundColor:t.backgroundColor;this.#i=Xt(n)}window.requestAnimationFrame(this.#k.bind(this)),new Te(this.#e,this.#y.bind(this),n=>{this.#o=n},this.#g.bind(this),this.#x.bind(this),this.#C.bind(this),this.#f.bind(this),(n,r)=>{this.zoom(n,r)}),document.addEventListener("keydown",n=>{if(document.activeElement&&["INPUT","TEXTAREA"].includes(document.activeElement.tagName))return;if(this.#s){if(n.code==="Escape"){this.#s=null;return}if(n.code==="Enter"){this.#s.Menu.execute(),this.#s=null;return}this.#s.Menu.keyboardEvent(n);return}if(!(n.key==" "||n.code=="Space")||!this.#o)return;let l=this.#m(this.#o),a=this.#a.nodeFactory().newNodeSubmenus(this.#a,l);this.#s={Menu:new Oe({subMenus:a}),Position:l}})}#f(e){if(this.currentView().fileDrop(e))return;let t=e.name.split("."),i=t[t.length-1];if(i!=="jpg"&&i!=="jpeg"&&i!=="png")return;let o=g();this.#o&&p(o,this.#m(this.#o)),this.#a.addNode(new se({title:t[0],position:o,widgets:[{type:"image",config:{blob:e}}]}))}addNoteAddedListener(e){this.#c.addNoteAddedListener(e)}addNoteRemovedListener(e){this.#c.addNoteRemovedListener(e)}addNoteDragStartListener(e){this.#c.addNoteDragStartListener(e)}addNoteDragStopListener(e){this.#c.addNoteDragStopListener(e)}zoom(e,t){let i=t??this.#o,o;if(i!==void 0&&(o=this.#m(i)),this.#r.zoom+=e*this.#r.zoom*.05,!o||i===void 0)return;t!==void 0&&(this.#o=t);let n=this.#m(i);this.#r.position.x+=(n.x-o.x)*this.#r.zoom,this.#r.position.y+=(n.y-o.y)*this.#r.zoom}#g(e,t){if(this.#d!==null){this.#d.click(),this.#l=null,this.#d=null;return}this.#l=null,this.#s=null,this.#d=null,this.#o=e,this.currentView().clickStart(e,this.#r,t)}currentView(){return this.#u[this.#h]}organize(){this.#a.organize(this.#t)}addPublisher(e,t){this.#a.addPublisher(e,t)}getNodes(){return this.#a.getNodes()}getSelectedNodes(){return this.#a.getSelectedNodes()}getCamera(){return{position:{x:this.#r.position.x,y:this.#r.position.y},zoom:this.#r.zoom}}setCamera(e){this.#r.position.x=e.position.x,this.#r.position.y=e.position.y,this.#r.zoom=e.zoom}centerOnGraph(){let e=this.getNodes();if(e.length===0){this.#r.reset();return}let t=new re,i=1/0,o=1/0,n=-1/0,r=-1/0;for(let R=0;R<e.length;R++){let S=e[R].calculateBounds(this.#t,t);i=Math.min(i,S.Position.x),o=Math.min(o,S.Position.y),n=Math.max(n,S.Position.x+S.Size.x),r=Math.max(r,S.Position.y+S.Size.y)}let l=n-i,a=r-o;if(l<=0||a<=0){this.#r.reset();return}let h=l*.05,u=a*.05;i-=h,o-=u,l+=h*2,a+=u*2;let m=this.#e.clientWidth,f=this.#e.clientHeight;if(m<=0||f<=0){this.#r.reset();return}let w=Math.min(m/l,f/a),M=i+l/2,N=o+a/2;this.#r.zoom=w,this.#r.position.x=m/2-M*w,this.#r.position.y=f/2-N*w}connectedInputsNodeReferences(e){return this.#a.connectedInputsNodeReferencesByIndex(e)}connectedOutputsNodeReferences(e){return this.#a.connectedOutputsNodeReferences(e)}connectNodes(e,t,i,o){return this.#a.connectNodes(e,t,i,o)}addNode(e){this.#a.addNode(e)}removeNode(e){this.#a.removeNode(e)}addNote(e){this.#c.addNote(e)}removeNote(e){this.#c.removeNote(e)}removeAllNotes(){this.#c.removeAllNotes()}getNotes(){return this.#c.getNotes()}addOnNodeCreatedListener(e){this.#a.addOnNodeCreatedListener(e)}addOnNodeAddedListener(e){this.#a.addOnNodeAddedListener(e)}addOnNodeRemovedListener(e){this.#a.addOnNodeRemovedListener(e)}#m(e){let t=g();return this.#r.screenSpaceToGraphSpace(e,t),t}#C(e){let t=this.#n,i=this.#m(e);t=q(t,this.currentView().openContextMenu(this.#t,i)),this.#l={Menu:new ue(t),Position:i}}#x(){this.currentView().clickEnd()}#y(e){this.currentView().mouseDragEvent(e,this.#r.zoom)||(this.#r.position.x+=e.x,this.#r.position.y+=e.y)}#b;#p;#k(){if(this.#e.parentNode!==null){var e=this.#e.parentNode.getBoundingClientRect();this.#e.width=e.width,this.#e.height=e.height}this.#p="default",Y("Render_Background",this.#M.bind(this)),Y("Render_View_"+this.#h,()=>{let t=this.currentView().render(this.#t,this.#r,this.#o);t?.cursorStyle&&(this.#p=t?.cursorStyle)}),Y("Render_Context",this.#v.bind(this)),Y("Render_QuickMenu",this.#P.bind(this)),this.#b!==this.#p&&(this.#e.style.cursor=this.#p),this.#b=this.#p,window.requestAnimationFrame(this.#k.bind(this))}#M(){this.#i(this.#e,this.#t,this.#r.position,this.#r.zoom)}#v(){x.run(()=>{if(this.#l!==null){let e=x.get();this.#r.graphSpaceToScreenSpace(this.#l.Position,e),this.#d=this.#l.Menu.render(this.#t,e,this.#r.zoom,this.#o,!0),this.#d!==null&&(this.#p="pointer")}})}#P(){x.run(()=>{if(this.#s!==null){let e=x.get();this.#r.graphSpaceToScreenSpace(this.#s.Position,e),this.#d=this.#s.Menu.render(this.#t,e,this.#r.zoom,this.#o),this.#d!==null&&(this.#p="pointer")}})}};export{J as ButtonWidget,ee as ColorWidget,ut as ContextMenuItemState,se as FlowNode,fe as FlowNote,_ as GlobalWidgetFactory,ne as ImageWidget,Ut as MessageType,Tt as NodeFlowGraph,Nt as NodeState,$ as NumberWidget,we as Publisher,te as SliderWidget,ie as StringWidget,be as TextWidget,d as Theme,oe as ToggleWidget};
|
|
8
8
|
//# sourceMappingURL=NodeFlow.js.map
|