Files
ueblueprint/dist/ueblueprint.min.js
2022-09-07 22:17:14 +02:00

24 lines
98 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
const e=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,t=Symbol(),n=new WeakMap;class i{constructor(e,n,i){if(this._$cssResult$=!0,i!==t)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=n}get styleSheet(){let t=this.o;const i=this.t;if(e&&void 0===t){const e=void 0!==i&&1===i.length;e&&(t=n.get(i)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&n.set(i,t))}return t}toString(){return this.cssText}}const r=(e,...n)=>{const r=1===e.length?e[0]:n.reduce(((t,n,i)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+e[i+1]),e[0]);return new i(r,e,t)},s=e?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let n="";for(const t of e.cssRules)n+=t.cssText;return(e=>new i("string"==typeof e?e:e+"",void 0,t))(n)})(e):e
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/;var o;const a=window.trustedTypes,l=a?a.emptyScript:"",u=window.reactiveElementPolyfillSupport,c={toAttribute(e,t){switch(t){case Boolean:e=e?l:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=null!==e;break;case Number:n=null===e?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch(e){n=null}}return n}},d=(e,t)=>t!==e&&(t==t||e==e),h={attribute:!0,type:String,converter:c,reflect:!1,hasChanged:d};class p extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(e){var t;null!==(t=this.h)&&void 0!==t||(this.h=[]),this.h.push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach(((t,n)=>{const i=this._$Ep(n,t);void 0!==i&&(this._$Ev.set(i,n),e.push(i))})),e}static createProperty(e,t=h){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const n="symbol"==typeof e?Symbol():"__"+e,i=this.getPropertyDescriptor(e,n,t);void 0!==i&&Object.defineProperty(this.prototype,e,i)}}static getPropertyDescriptor(e,t,n){return{get(){return this[t]},set(i){const r=this[e];this[t]=i,this.requestUpdate(e,r,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||h}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const n of t)this.createProperty(n,e[n])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const n=new Set(e.flat(1/0).reverse());for(const e of n)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Ep(e,t){const n=t.attribute;return!1===n?void 0:"string"==typeof n?n:"string"==typeof e?e.toLowerCase():void 0}u(){var e;this._$E_=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(e=this.constructor.h)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,n;(null!==(t=this._$ES)&&void 0!==t?t:this._$ES=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(n=e.hostConnected)||void 0===n||n.call(e))}removeController(e){var t;null===(t=this._$ES)||void 0===t||t.splice(this._$ES.indexOf(e)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Ei.set(t,this[t]),delete this[t])}))}createRenderRoot(){var t;const n=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return((t,n)=>{e?t.adoptedStyleSheets=n.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):n.forEach((e=>{const n=document.createElement("style"),i=window.litNonce;void 0!==i&&n.setAttribute("nonce",i),n.textContent=e.cssText,t.appendChild(n)}))})(n,this.constructor.elementStyles),n}connectedCallback(){var e;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)}))}enableUpdating(e){}disconnectedCallback(){var e;null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,n){this._$AK(e,n)}_$EO(e,t,n=h){var i,r;const s=this.constructor._$Ep(e,n);if(void 0!==s&&!0===n.reflect){const o=(null!==(r=null===(i=n.converter)||void 0===i?void 0:i.toAttribute)&&void 0!==r?r:c.toAttribute)(t,n.type);this._$El=e,null==o?this.removeAttribute(s):this.setAttribute(s,o),this._$El=null}}_$AK(e,t){var n,i;const r=this.constructor,s=r._$Ev.get(e);if(void 0!==s&&this._$El!==s){const e=r.getPropertyOptions(s),o=e.converter,a=null!==(i=null!==(n=null==o?void 0:o.fromAttribute)&&void 0!==n?n:"function"==typeof o?o:null)&&void 0!==i?i:c.fromAttribute;this._$El=s,this[s]=a(t,e.type),this._$El=null}}requestUpdate(e,t,n){let i=!0;void 0!==e&&(((n=n||this.constructor.getPropertyOptions(e)).hasChanged||d)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===n.reflect&&this._$El!==e&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(e,n))):i=!1),!this.isUpdatePending&&i&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((e,t)=>this[t]=e)),this._$Ei=void 0);let t=!1;const n=this._$AL;try{t=this.shouldUpdate(n),t?(this.willUpdate(n),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)})),this.update(n)):this._$Ek()}catch(e){throw t=!1,this._$Ek(),e}t&&this._$AE(n)}willUpdate(e){}_$AE(e){var t;null===(t=this._$ES)||void 0===t||t.forEach((e=>{var t;return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(e){return!0}update(e){void 0!==this._$EC&&(this._$EC.forEach(((e,t)=>this._$EO(t,this[t],e))),this._$EC=void 0),this._$Ek()}updated(e){}firstUpdated(e){}}
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
var g;p.finalized=!0,p.elementProperties=new Map,p.elementStyles=[],p.shadowRootOptions={mode:"open"},null==u||u({ReactiveElement:p}),(null!==(o=globalThis.reactiveElementVersions)&&void 0!==o?o:globalThis.reactiveElementVersions=[]).push("1.3.4");const m=globalThis.trustedTypes,f=m?m.createPolicy("lit-html",{createHTML:e=>e}):void 0,v=`lit$${(Math.random()+"").slice(9)}$`,b="?"+v,y=`<${b}>`,E=document,w=(e="")=>E.createComment(e),P=e=>null===e||"object"!=typeof e&&"function"!=typeof e,S=Array.isArray,k=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,x=/-->/g,A=/>/g,C=RegExp(">|[ \t\n\f\r](?:([^\\s\"'>=/]+)([ \t\n\f\r]*=[ \t\n\f\r]*(?:[^ \t\n\f\r\"'`<>=]|(\"|')|))|$)","g"),N=/'/g,$=/"/g,L=/^(?:script|style|textarea|title)$/i,O=(e=>(t,...n)=>({_$litType$:e,strings:t,values:n}))(1),D=Symbol.for("lit-noChange"),T=Symbol.for("lit-nothing"),M=new WeakMap,_=E.createTreeWalker(E,129,null,!1),H=(e,t)=>{const n=e.length-1,i=[];let r,s=2===t?"<svg>":"",o=k;for(let t=0;t<n;t++){const n=e[t];let a,l,u=-1,c=0;for(;c<n.length&&(o.lastIndex=c,l=o.exec(n),null!==l);)c=o.lastIndex,o===k?"!--"===l[1]?o=x:void 0!==l[1]?o=A:void 0!==l[2]?(L.test(l[2])&&(r=RegExp("</"+l[2],"g")),o=C):void 0!==l[3]&&(o=C):o===C?">"===l[0]?(o=null!=r?r:k,u=-1):void 0===l[1]?u=-2:(u=o.lastIndex-l[2].length,a=l[1],o=void 0===l[3]?C:'"'===l[3]?$:N):o===$||o===N?o=C:o===x||o===A?o=k:(o=C,r=void 0);const d=o===C&&e[t+1].startsWith("/>")?" ":"";s+=o===k?n+y:u>=0?(i.push(a),n.slice(0,u)+"$lit$"+n.slice(u)+v+d):n+v+(-2===u?(i.push(void 0),t):d)}const a=s+(e[n]||"<?>")+(2===t?"</svg>":"");if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return[void 0!==f?f.createHTML(a):a,i]};class I{constructor({strings:e,_$litType$:t},n){let i;this.parts=[];let r=0,s=0;const o=e.length-1,a=this.parts,[l,u]=H(e,t);if(this.el=I.createElement(l,n),_.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(i=_.nextNode())&&a.length<o;){if(1===i.nodeType){if(i.hasAttributes()){const e=[];for(const t of i.getAttributeNames())if(t.endsWith("$lit$")||t.startsWith(v)){const n=u[s++];if(e.push(t),void 0!==n){const e=i.getAttribute(n.toLowerCase()+"$lit$").split(v),t=/([.?@])?(.*)/.exec(n);a.push({type:1,index:r,name:t[2],strings:e,ctor:"."===t[1]?G:"?"===t[1]?U:"@"===t[1]?V:z})}else a.push({type:6,index:r})}for(const t of e)i.removeAttribute(t)}if(L.test(i.tagName)){const e=i.textContent.split(v),t=e.length-1;if(t>0){i.textContent=m?m.emptyScript:"";for(let n=0;n<t;n++)i.append(e[n],w()),_.nextNode(),a.push({type:2,index:++r});i.append(e[t],w())}}}else if(8===i.nodeType)if(i.data===b)a.push({type:2,index:r});else{let e=-1;for(;-1!==(e=i.data.indexOf(v,e+1));)a.push({type:7,index:r}),e+=v.length-1}r++}}static createElement(e,t){const n=E.createElement("template");return n.innerHTML=e,n}}function j(e,t,n=e,i){var r,s,o,a;if(t===D)return t;let l=void 0!==i?null===(r=n._$Cl)||void 0===r?void 0:r[i]:n._$Cu;const u=P(t)?void 0:t._$litDirective$;return(null==l?void 0:l.constructor)!==u&&(null===(s=null==l?void 0:l._$AO)||void 0===s||s.call(l,!1),void 0===u?l=void 0:(l=new u(e),l._$AT(e,n,i)),void 0!==i?(null!==(o=(a=n)._$Cl)&&void 0!==o?o:a._$Cl=[])[i]=l:n._$Cu=l),void 0!==l&&(t=j(e,l._$AS(e,t.values),l,i)),t}class B{constructor(e,t){this.v=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(e){var t;const{el:{content:n},parts:i}=this._$AD,r=(null!==(t=null==e?void 0:e.creationScope)&&void 0!==t?t:E).importNode(n,!0);_.currentNode=r;let s=_.nextNode(),o=0,a=0,l=i[0];for(;void 0!==l;){if(o===l.index){let t;2===l.type?t=new F(s,s.nextSibling,this,e):1===l.type?t=new l.ctor(s,l.name,l.strings,this,e):6===l.type&&(t=new K(s,this,e)),this.v.push(t),l=i[++a]}o!==(null==l?void 0:l.index)&&(s=_.nextNode(),o++)}return r}m(e){let t=0;for(const n of this.v)void 0!==n&&(void 0!==n.strings?(n._$AI(e,n,t),t+=n.strings.length-2):n._$AI(e[t])),t++}}class F{constructor(e,t,n,i){var r;this.type=2,this._$AH=T,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=n,this.options=i,this._$C_=null===(r=null==i?void 0:i.isConnected)||void 0===r||r}get _$AU(){var e,t;return null!==(t=null===(e=this._$AM)||void 0===e?void 0:e._$AU)&&void 0!==t?t:this._$C_}get parentNode(){let e=this._$AA.parentNode;const t=this._$AM;return void 0!==t&&11===e.nodeType&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=j(this,e,t),P(e)?e===T||null==e||""===e?(this._$AH!==T&&this._$AR(),this._$AH=T):e!==this._$AH&&e!==D&&this.T(e):void 0!==e._$litType$?this.$(e):void 0!==e.nodeType?this.k(e):(e=>S(e)||"function"==typeof(null==e?void 0:e[Symbol.iterator]))(e)?this.S(e):this.T(e)}j(e,t=this._$AB){return this._$AA.parentNode.insertBefore(e,t)}k(e){this._$AH!==e&&(this._$AR(),this._$AH=this.j(e))}T(e){this._$AH!==T&&P(this._$AH)?this._$AA.nextSibling.data=e:this.k(E.createTextNode(e)),this._$AH=e}$(e){var t;const{values:n,_$litType$:i}=e,r="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=I.createElement(i.h,this.options)),i);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===r)this._$AH.m(n);else{const e=new B(r,this),t=e.p(this.options);e.m(n),this.k(t),this._$AH=e}}_$AC(e){let t=M.get(e.strings);return void 0===t&&M.set(e.strings,t=new I(e)),t}S(e){S(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let n,i=0;for(const r of e)i===t.length?t.push(n=new F(this.j(w()),this.j(w()),this,this.options)):n=t[i],n._$AI(r),i++;i<t.length&&(this._$AR(n&&n._$AB.nextSibling,i),t.length=i)}_$AR(e=this._$AA.nextSibling,t){var n;for(null===(n=this._$AP)||void 0===n||n.call(this,!1,!0,t);e&&e!==this._$AB;){const t=e.nextSibling;e.remove(),e=t}}setConnected(e){var t;void 0===this._$AM&&(this._$C_=e,null===(t=this._$AP)||void 0===t||t.call(this,e))}}class z{constructor(e,t,n,i,r){this.type=1,this._$AH=T,this._$AN=void 0,this.element=e,this.name=t,this._$AM=i,this.options=r,n.length>2||""!==n[0]||""!==n[1]?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=T}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,n,i){const r=this.strings;let s=!1;if(void 0===r)e=j(this,e,t,0),s=!P(e)||e!==this._$AH&&e!==D,s&&(this._$AH=e);else{const i=e;let o,a;for(e=r[0],o=0;o<r.length-1;o++)a=j(this,i[n+o],t,o),a===D&&(a=this._$AH[o]),s||(s=!P(a)||a!==this._$AH[o]),a===T?e=T:e!==T&&(e+=(null!=a?a:"")+r[o+1]),this._$AH[o]=a}s&&!i&&this.P(e)}P(e){e===T?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=e?e:"")}}class G extends z{constructor(){super(...arguments),this.type=3}P(e){this.element[this.name]=e===T?void 0:e}}const R=m?m.emptyScript:"";class U extends z{constructor(){super(...arguments),this.type=4}P(e){e&&e!==T?this.element.setAttribute(this.name,R):this.element.removeAttribute(this.name)}}class V extends z{constructor(e,t,n,i,r){super(e,t,n,i,r),this.type=5}_$AI(e,t=this){var n;if((e=null!==(n=j(this,e,t,0))&&void 0!==n?n:T)===D)return;const i=this._$AH,r=e===T&&i!==T||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,s=e!==T&&(i===T||r);r&&this.element.removeEventListener(this.name,this,i),s&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var t,n;"function"==typeof this._$AH?this._$AH.call(null!==(n=null===(t=this.options)||void 0===t?void 0:t.host)&&void 0!==n?n:this.element,e):this._$AH.handleEvent(e)}}class K{constructor(e,t,n){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(e){j(this,e)}}const W=window.litHtmlPolyfillSupport;
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
var X,Y;null==W||W(I,F),(null!==(g=globalThis.litHtmlVersions)&&void 0!==g?g:globalThis.litHtmlVersions=[]).push("2.2.7");class q extends p{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var e,t;const n=super.createRenderRoot();return null!==(e=(t=this.renderOptions).renderBefore)&&void 0!==e||(t.renderBefore=n.firstChild),n}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=((e,t,n)=>{var i,r;const s=null!==(i=null==n?void 0:n.renderBefore)&&void 0!==i?i:t;let o=s._$litPart$;if(void 0===o){const e=null!==(r=null==n?void 0:n.renderBefore)&&void 0!==r?r:null;s._$litPart$=o=new F(t.insertBefore(w(),e),e,void 0,null!=n?n:{})}return o._$AI(e),o})(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!1)}render(){return D}}q.finalized=!0,q._$litElement$=!0,null===(X=globalThis.litElementHydrateSupport)||void 0===X||X.call(globalThis,{LitElement:q});const Z=globalThis.litElementPolyfillSupport;null==Z||Z({LitElement:q}),(null!==(Y=globalThis.litElementVersions)&&void 0!==Y?Y:globalThis.litElementVersions=[]).push("3.2.2");class J{static deleteNodesKeyboardKey="Delete";static editTextEventName={begin:"ueb-edit-text-begin",end:"ueb-edit-text-end"};static enableZoomIn=["LeftControl","RightControl"];static expandGridSize=400;static focusEventName={begin:"blueprint-focus",end:"blueprint-unfocus"};static fontSize=r``;static gridAxisLineColor=r``;static gridExpandThreshold=.25;static gridLineColor=r``;static gridLineWidth=1;static gridSet=8;static gridSetLineColor=r``;static gridShrinkThreshold=4;static gridSize=16;static hexColorRegex=/^\s*#(?<r>[0-9a-fA-F]{2})(?<g>[0-9a-fA-F]{2})(?<b>[0-9a-fA-F]{2})([0-9a-fA-F]{2})?|#(?<rs>[0-9a-fA-F])(?<gs>[0-9a-fA-F])(?<bs>[0-9a-fA-F])\s*$/;static keysSeparator="+";static linkCurveHeight=15;static linkCurveWidth=80;static linkMinWidth=100;static linkRightSVGPath=(e,t,n)=>{let i=100-e;return`M ${e} 0 C ${t} 0, ${n} 0, 50 50 S ${i-t+e} 100, ${i} 100`};static maxZoom=7;static minZoom=-12;static mouseWheelFactor=.2;static nodeDeleteEventName="ueb-node-delete";static nodeDragEventName="ueb-node-drag";static nodeDragLocalEventName="ueb-node-drag-local";static nodeName=(e,t)=>`${e}_${t}`;static nodeRadius=8;static nodeReflowEventName="ueb-node-reflow";static pinColor={bool:r``,default:r``,exec:r``,name:r``,real:r``,string:r``,"/Script/CoreUObject.LinearColor":r``};static selectAllKeyboardKey="(bCtrl=True,Key=A)";static trackingMouseEventName={begin:"ueb-tracking-mouse-begin",end:"ueb-tracking-mouse-end"};static ModifierKeys=["Ctrl","Shift","Alt","Meta"];static Keys={Backspace:"Backspace",Tab:"Tab",LeftControl:"ControlLeft",RightControl:"ControlRight",LeftShift:"ShiftLeft",RightShift:"ShiftRight",LeftAlt:"AltLeft",RightAlt:"AltRight",Enter:"Enter",Pause:"Pause",CapsLock:"CapsLock",Escape:"Escape",Space:"Space",PageUp:"PageUp",PageDown:"PageDown",End:"End",Home:"Home",ArrowLeft:"Left",ArrowUp:"Up",ArrowRight:"Right",ArrowDown:"Down",PrintScreen:"PrintScreen",Insert:"Insert",Delete:"Delete",Zero:"Digit0",One:"Digit1",Two:"Digit2",Three:"Digit3",Four:"Digit4",Five:"Digit5",Six:"Digit6",Seven:"Digit7",Eight:"Digit8",Nine:"Digit9",A:"KeyA",B:"KeyB",C:"KeyC",D:"KeyD",E:"KeyE",F:"KeyF",G:"KeyG",H:"KeyH",I:"KeyI",K:"KeyK",L:"KeyL",M:"KeyM",N:"KeyN",O:"KeyO",P:"KeyP",Q:"KeyQ",R:"KeyR",S:"KeyS",T:"KeyT",U:"KeyU",V:"KeyV",W:"KeyW",X:"KeyX",Y:"KeyY",Z:"KeyZ",NumPadZero:"Numpad0",NumPadOne:"Numpad1",NumPadTwo:"Numpad2",NumPadThree:"Numpad3",NumPadFour:"Numpad4",NumPadFive:"Numpad5",NumPadSix:"Numpad6",NumPadSeven:"Numpad7",NumPadEight:"Numpad8",NumPadNine:"Numpad9",Multiply:"NumpadMultiply",Add:"NumpadAdd",Subtract:"NumpadSubtract",Decimal:"NumpadDecimal",Divide:"NumpadDivide",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12",NumLock:"NumLock",ScrollLock:"ScrollLock"}}class Q{#e;get target(){return this.#e}#t;get blueprint(){return this.#t}options;constructor(e,t,n){this.#e=e,this.#t=t,n.consumeEvent??=!1,n.listenOnFocus??=!1,n.unlistenOnTextEdit??=!1,this.options=n;let i=this;this.listenHandler=e=>i.listenEvents(),this.unlistenHandler=e=>i.unlistenEvents(),this.options.listenOnFocus&&(this.blueprint.addEventListener(J.focusEventName.begin,this.listenHandler),this.blueprint.addEventListener(J.focusEventName.end,this.unlistenHandler)),this.options.unlistenOnTextEdit&&(this.blueprint.addEventListener(J.editTextEventName.begin,this.unlistenHandler),this.blueprint.addEventListener(J.editTextEventName.end,this.listenHandler))}unlistenDOMElement(){this.unlistenEvents(),this.blueprint.removeEventListener(J.focusEventName.begin,this.listenHandler),this.blueprint.removeEventListener(J.focusEventName.end,this.unlistenHandler),this.blueprint.removeEventListener(J.editTextEventName.begin,this.unlistenHandler),this.blueprint.removeEventListener(J.editTextEventName.end,this.listenHandler)}listenEvents(){}unlistenEvents(){}}class ee{#n;get types(){return this.#n}set types(e){this.#n=e}constructor(...e){this.#n=e}}class te{#i;get type(){return this.#i}set type(e){this.#i=e}#r=!0;get showDefault(){return this.#r}set showDefault(e){this.#r=e}#s;get value(){return this.#s}set value(e){this.#s=e}static sanitize(e,t){return void 0===t&&(t=e?.constructor),t&&t!==ee&&!(e?.constructor===t||e instanceof t)&&(e=new t(e)),(e instanceof Boolean||e instanceof Number||e instanceof String)&&(e=e.valueOf()),e}constructor(e,t=!0,n){void 0===n&&(n=e instanceof Array?[]:e instanceof ee?"":te.sanitize(new e)),this.#r=t,this.#i=e}}class ne{static booleanConverter={fromAttribute:(e,t)=>{},toAttribute:(e,t)=>!0===e?"true":!1===e?"false":""};static sigmoid(e,t=1.7){return 1/(1+e/(1-e)**-t)}static clamp(e,t,n){return Math.min(Math.max(e,t),n)}static getScale(e){return Number(getComputedStyle(e).getPropertyValue("--ueb-scale"))}static minDecimals(e,t=1){const n=e*10**t;return Math.abs(n%1)>Number.EPSILON?e.toString():e.toFixed(t)}static convertLocation(e,t){const n=1/ne.getScale(t),i=t.getBoundingClientRect();return[Math.round((e[0]-i.x)*n),Math.round((e[1]-i.y)*n)]}static objectGet(e,t,n){if(void 0!==e){if(!(t instanceof Array))throw new TypeError("Expected keys to be an array.");return 0!=t.length&&t[0]in e&&void 0!==e[t[0]]?1==t.length?e[t[0]]:ne.objectGet(e[t[0]],t.slice(1),n):n}}static objectSet(e,t,n,i=!1,r=Object){if(!(t instanceof Array))throw new TypeError("Expected keys to be an array.");if(1==t.length){if(i||t[0]in e||void 0===e[t[0]])return e[t[0]]=n,!0}else if(t.length>0)return!i||e[t[0]]instanceof Object||(e[t[0]]=new r),ne.objectSet(e[t[0]],t.slice(1),n,i,r);return!1}static equals(e,t){return(e=te.sanitize(e))===(t=te.sanitize(t))||(e instanceof Array&&t instanceof Array?e.length==t.length&&!e.find(((e,n)=>!ne.equals(e,t[n]))):void 0)}static FirstCapital(e){return e.charAt(0).toUpperCase()+e.substring(1)}static getType(e){let t=e?.constructor;switch(t){case te:return ne.getType(e.type);case Function:return e;default:return t}}static snapToGrid(e,t){return 1===t?e:[t*Math.round(e[0]/t),t*Math.round(e[1]/t)]}static mergeArrays(e=[],t=[]){let n=[];for(let i=0;i<t.length;++i)for(let r=0;r<e.length;++r)if(e[r]==t[i]){n.push(...e.splice(0,r),...t.splice(0,i),...e.splice(0,1)),i=0,r=0,t.shift();break}return[...new Set(n.concat(...e,...t))]}static encodeInputString(e){return e.replace(/\n$/,"").replaceAll(" "," ").replaceAll("\n",String.raw`\r\n`)}static decodeInputString(e){return e.replaceAll("\\r\n","\n")}static encodeString(e,t=!1){return e.replaceAll(" "," ").replaceAll("\n",String.raw`\n`)}static decodeString(e,t=!1){return e.replaceAll(" "," ").replaceAll(String.raw`\n`,"\n")}static formatStringName(e){return e.trim().replace(/^b/,"").replaceAll(/(?<=[a-z])(?=[A-Z])|_|\s+/g," ")}static printLinearColor(e){return`${Math.round(255*e.R)}, ${Math.round(255*e.G)}, ${Math.round(255*e.B)}`}}class ie extends class{#o=new Map;subscribe(e,t){let n=this.#o;if(n.has(e)){let i=n.get(e);if(i.includes(t))return!1;i.push(t)}else{let i=!1,r=Object.getOwnPropertyDescriptor(this,e);if(!r&&(i=!0,r=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this),e)??{},!r))return!1;n.set(e,[t]);const s="value"in r,o="set"in r;if(!s&&!o)throw new Error(`Property ${e} is not a value or a setter`);const a=Symbol.for(e+"Storage"),l=Symbol.for(e+"ValInfo");Object.defineProperties(i?Object.getPrototypeOf(this):this,{[a]:{configurable:!0,enumerable:!1,...s?{value:this[e],writable:!0}:{get:r.get,set:r.set}},[l]:{configurable:!0,enumerable:!1,value:[i,s]},[e]:{configurable:!0,...s&&{get(){return this[a]}},set(t){this[a]=t,n.get(e).forEach((t=>{t(this[e])}))}}})}return!0}unsubscribe(e,t){let n=this.#o.get(e);if(!n?.includes(t))return!1;if(n.splice(n.indexOf(t),1),0==n.length){const t=Symbol.for(e+"Storage"),n=Symbol.for(e+"ValInfo"),i=this[n][0];this[n][1],Object.defineProperty(i?Object.getPrototypeOf(this):this,e,Object.getOwnPropertyDescriptor(i?Object.getPrototypeOf(this):this,t)),delete this[n],delete this[t]}return!0}}{static attributes={};#a=!1;constructor(e){super();const t=(e,n,i,r="")=>{for(let s of ne.mergeArrays(Object.getOwnPropertyNames(n),Object.getOwnPropertyNames(i??{}))){let o=n[s];const a=ne.getType(o);if(s in n?null==o||o instanceof te&&!o.showDefault||s in i||console.warn(`${this.constructor.name} adds property ${r}${s} not defined in the serialized data`):console.warn(`Property ${r}${s} is not defined in ${this.constructor.name}`),a===Object){e[s]={},t(e[s],n[s],i[s],s+".");continue}const l=ne.objectGet(i,[s]);if(void 0===l){if(o instanceof te){if(!o.showDefault){e[s]=void 0;continue}o=o.value}o instanceof Array?e[s]=[]:(o instanceof Function&&(o=te.sanitize(new o,a)),e[s]=te.sanitize(o,a))}else e[s]=te.sanitize(l,a)}},n=this.constructor.attributes;e.constructor!==Object&&1==Object.getOwnPropertyNames(n).length&&(e={[Object.getOwnPropertyNames(n)[0]]:e}),t(this,n,e)}isShownAsString(){return this.#a}setShowAsString(e){this.#a=e}}class re extends ie{static attributes={type:String,path:String}}class se extends ie{static attributes={MemberParent:re,MemberName:""}}class oe extends ie{static attributes={value:String};static generateGuid(e=!0){let t=new Uint32Array(4);!0===e&&crypto.getRandomValues(t);let n="";return t.forEach((e=>{n+=("0".repeat(8)+e.toString(16).toUpperCase()).slice(-8)})),new oe({value:n})}valueOf(){return this.value}toString(){return this.value}}class ae extends ie{static attributes={value:String};static attributeConverter={fromAttribute:(e,t)=>new ae(e),toAttribute:(e,t)=>e.toString()};valueOf(){return this.value}toString(){return this.value}}class le extends ie{static attributes={value:Number};constructor(e=0){super(e),this.value=Math.round(this.value)}valueOf(){return this.value}toString(){return this.value.toString()}}class ue extends ie{static lookbehind="INVTEXT";static attributes={value:String}}class ce extends ie{static attributes={ActionName:"",bShift:!1,bCtrl:!1,bAlt:!1,bCmd:!1,Key:ae};constructor(e={}){e.ActionName=e.ActionName??"",e.bShift=e.bShift??!1,e.bCtrl=e.bCtrl??!1,e.bAlt=e.bAlt??!1,e.bCmd=e.bCmd??!1,super(e)}}class de extends ie{static attributes={R:Number,G:Number,B:Number,A:Number};toString(){return ne.printLinearColor(this)}}class he extends ie{static lookbehind="NSLOCTEXT";static attributes={namespace:String,key:String,value:String}}class pe extends ie{static attributes={value:String};valueOf(){return this.value}toString(){return this.value}}class ge extends ie{static attributes={objectName:pe,pinGuid:oe}}class me extends ie{static lookbehind="Pin";static attributes={PinId:oe,PinName:"",PinFriendlyName:new te(he,!1,null),PinToolTip:"",Direction:new te(String,!1,""),PinType:{PinCategory:"",PinSubCategory:"",PinSubCategoryObject:re,PinSubCategoryMemberReference:null,PinValueType:null,ContainerType:re,bIsReference:!1,bIsConst:!1,bIsWeakPointer:!1,bIsUObjectWrapper:!1,bSerializeAsSinglePrecisionFloat:!1},LinkedTo:new te([ge],!1),DefaultValue:new te(new ee(de,String),!1),AutogeneratedDefaultValue:new te(String,!1),DefaultObject:new te(re,!1,null),PersistentGuid:oe,bHidden:!1,bNotConnectable:!1,bDefaultValueIsReadOnly:!1,bDefaultValueIsIgnored:!1,bAdvancedView:!1,bOrphanedPin:!1};getDefaultValue(){return this.DefaultValue??""}isHidden(){return this.bHidden}isInput(){return!this.bHidden&&"EGPD_Output"!=this.Direction}isOutput(){return!this.bHidden&&"EGPD_Output"==this.Direction}isLinked(){return this.LinkedTo?.length>0??!1}linkTo(e,t){this.LinkedTo;const n=this.LinkedTo?.find((n=>n.objectName==e&&n.pinGuid.valueOf()==t.PinId.valueOf()));return!n&&((this.LinkedTo??(this.LinkedTo=[])).push(new ge({objectName:e,pinGuid:t.PinId})),!0)}unlinkFrom(e,t){const n=this.LinkedTo?.findIndex((n=>n.objectName==e&&n.pinGuid.valueOf()==t.PinId.valueOf()));return n>=0&&(1==this.LinkedTo.length?this.LinkedTo=void 0:this.LinkedTo.splice(n,1),!0)}getType(){return"struct"==this.PinType.PinCategory?this.PinType.PinSubCategoryObject.path:this.PinType.PinCategory}getSubCategory(){return this.PinType.PinSubCategoryObject.path}}class fe extends ie{static attributes={MemberName:String,MemberGuid:oe,bSelfContext:!1}}class ve extends ie{static attributes={Class:re,Name:"",bIsPureFunc:new te(Boolean,!1,!1),VariableReference:new te(fe,!1,null),FunctionReference:new te(se,!1,null),EventReference:new te(se,!1,null),TargetType:new te(re,!1,null),NodePosX:le,NodePosY:le,AdvancedPinDisplay:new te(ae,!1,null),EnabledState:new te(ae,!1,null),NodeGuid:oe,ErrorType:new te(le,!1),ErrorMsg:new te(String,!1,""),CustomProperties:[me]};static nameRegex=/(\w+)_(\d+)/;getObjectName(e=!1){return e?this.getNameAndCounter()[0]:this.Name}getNameAndCounter(){const e=this.getObjectName(!1).match(ve.nameRegex);return e&&3==e.length?[e[1],parseInt(e[2])]:["",0]}getDisplayName(){let e=this.FunctionReference?.MemberName;return e?(e=ne.formatStringName(e),e):(e=ne.formatStringName(this.getNameAndCounter()[0]),e)}getCounter(){return this.getNameAndCounter()[1]}}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function be(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ye={exports:{}};"undefined"!=typeof self&&self;var Ee=be(ye.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:i})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){function i(e){if(!(this instanceof i))return new i(e);this._=e}var r=i.prototype;function s(e,t){for(var n=0;n<e;n++)t(n)}function o(e,t,n){return function(e,t){s(t.length,(function(n){e(t[n],n,t)}))}((function(n,i,r){t=e(t,n,i,r)}),n),t}function a(e,t){return o((function(t,n,i,r){return t.concat([e(n,i,r)])}),[],t)}function l(e,t){var n={v:0,buf:t};return s(e,(function(){var e;n={v:n.v<<1|(e=n.buf,e[0]>>7),buf:function(e){var t=o((function(e,t,n,i){return e.concat(n===i.length-1?Buffer.from([t,0]).readUInt16BE(0):i.readUInt16BE(n))}),[],e);return Buffer.from(a((function(e){return(e<<1&65535)>>8}),t))}(n.buf)}})),n}function u(){return"undefined"!=typeof Buffer}function c(){if(!u())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function d(e){c();var t=o((function(e,t){return e+t}),0,e);if(t%8!=0)throw new Error("The bits ["+e.join(", ")+"] add up to "+t+" which is not an even number of bytes; the total should be divisible by 8");var n,r=t/8,s=(n=function(e){return e>48},o((function(e,t){return e||(n(t)?t:e)}),null,e));if(s)throw new Error(s+" bit range requested exceeds 48 bit (6 byte) Number max.");return new i((function(t,n){var i=r+n;return i>t.length?P(n,r.toString()+" bytes"):w(i,o((function(e,t){var n=l(t,e.buf);return{coll:e.coll.concat(n.v),buf:n.buf}}),{coll:[],buf:t.slice(n,i)},e).coll)}))}function h(e,t){return new i((function(n,i){return c(),i+t>n.length?P(i,t+" bytes for "+e):w(i+t,n.slice(i,i+t))}))}function p(e,t){if("number"!=typeof(n=t)||Math.floor(n)!==n||t<0||t>6)throw new Error(e+" requires integer length in range [0, 6].");var n}function g(e){return p("uintBE",e),h("uintBE("+e+")",e).map((function(t){return t.readUIntBE(0,e)}))}function m(e){return p("uintLE",e),h("uintLE("+e+")",e).map((function(t){return t.readUIntLE(0,e)}))}function f(e){return p("intBE",e),h("intBE("+e+")",e).map((function(t){return t.readIntBE(0,e)}))}function v(e){return p("intLE",e),h("intLE("+e+")",e).map((function(t){return t.readIntLE(0,e)}))}function b(e){return e instanceof i}function y(e){return"[object Array]"==={}.toString.call(e)}function E(e){return u()&&Buffer.isBuffer(e)}function w(e,t){return{status:!0,index:e,value:t,furthest:-1,expected:[]}}function P(e,t){return y(t)||(t=[t]),{status:!1,index:-1,value:null,furthest:e,expected:t}}function S(e,t){if(!t)return e;if(e.furthest>t.furthest)return e;var n=e.furthest===t.furthest?function(e,t){if(function(){if(void 0!==i._supportsSet)return i._supportsSet;var e="undefined"!=typeof Set;return i._supportsSet=e,e}()&&Array.from){for(var n=new Set(e),r=0;r<t.length;r++)n.add(t[r]);var s=Array.from(n);return s.sort(),s}for(var o={},a=0;a<e.length;a++)o[e[a]]=!0;for(var l=0;l<t.length;l++)o[t[l]]=!0;var u=[];for(var c in o)({}).hasOwnProperty.call(o,c)&&u.push(c);return u.sort(),u}(e.expected,t.expected):t.expected;return{status:e.status,index:e.index,value:e.value,furthest:t.furthest,expected:n}}var k={};function x(e,t){if(E(e))return{offset:t,line:-1,column:-1};e in k||(k[e]={});for(var n=k[e],i=0,r=0,s=0,o=t;o>=0;){if(o in n){i=n[o].line,0===s&&(s=n[o].lineStart);break}("\n"===e.charAt(o)||"\r"===e.charAt(o)&&"\n"!==e.charAt(o+1))&&(r++,0===s&&(s=o+1)),o--}var a=i+r,l=t-s;return n[t]={line:a,lineStart:s},{offset:t,line:a+1,column:l+1}}function A(e){if(!b(e))throw new Error("not a parser: "+e)}function C(e,t){return"string"==typeof e?e.charAt(t):e[t]}function N(e){if("number"!=typeof e)throw new Error("not a number: "+e)}function $(e){if("function"!=typeof e)throw new Error("not a function: "+e)}function L(e){if("string"!=typeof e)throw new Error("not a string: "+e)}var O=2,D=3,T=8,M=5*T,_=4*T,H=" ";function I(e,t){return new Array(t+1).join(e)}function j(e,t,n){var i=t-e.length;return i<=0?e:I(n,i)+e}function B(e,t,n,i){return{from:e-t>0?e-t:0,to:e+n>i?i:e+n}}function F(e,t){var n,i,r,s,l,u=t.index,c=u.offset,d=1;if(c===e.length)return"Got the end of the input";if(E(e)){var h=c-c%T,p=c-h,g=B(h,M,_+T,e.length),m=a((function(e){return a((function(e){return j(e.toString(16),2,"0")}),e)}),function(e,t){var n=e.length,i=[],r=0;if(n<=t)return[e.slice()];for(var s=0;s<n;s++)i[r]||i.push([]),i[r].push(e[s]),(s+1)%t==0&&r++;return i}(e.slice(g.from,g.to).toJSON().data,T));s=function(e){return 0===e.from&&1===e.to?{from:e.from,to:e.to}:{from:e.from/T,to:Math.floor(e.to/T)}}(g),i=h/T,n=3*p,p>=4&&(n+=1),d=2,r=a((function(e){return e.length<=4?e.join(" "):e.slice(0,4).join(" ")+" "+e.slice(4).join(" ")}),m),(l=(8*(s.to>0?s.to-1:s.to)).toString(16).length)<2&&(l=2)}else{var f=e.split(/\r\n|[\n\r\u2028\u2029]/);n=u.column-1,i=u.line-1,s=B(i,O,D,f.length),r=f.slice(s.from,s.to),l=s.to.toString().length}var v=i-s.from;return E(e)&&(l=(8*(s.to>0?s.to-1:s.to)).toString(16).length)<2&&(l=2),o((function(t,i,r){var o,a=r===v,u=a?"> ":H;return o=E(e)?j((8*(s.from+r)).toString(16),l,"0"):j((s.from+r+1).toString(),l," "),[].concat(t,[u+o+" | "+i],a?[H+I(" ",l)+" | "+j("",n," ")+I("^",d)]:[])}),[],r).join("\n")}function z(e,t){return["\n","-- PARSING FAILED "+I("-",50),"\n\n",F(e,t),"\n\n",(n=t.expected,1===n.length?"Expected:\n\n"+n[0]:"Expected one of the following: \n\n"+n.join(", ")),"\n"].join("");var n}function G(e){return void 0!==e.flags?e.flags:[e.global?"g":"",e.ignoreCase?"i":"",e.multiline?"m":"",e.unicode?"u":"",e.sticky?"y":""].join("")}function R(){for(var e=[].slice.call(arguments),t=e.length,n=0;n<t;n+=1)A(e[n]);return i((function(n,i){for(var r,s=new Array(t),o=0;o<t;o+=1){if(!(r=S(e[o]._(n,i),r)).status)return r;s[o]=r.value,i=r.index}return S(w(i,s),r)}))}function U(){var e=[].slice.call(arguments);if(0===e.length)throw new Error("seqMap needs at least one argument");var t=e.pop();return $(t),R.apply(null,e).map((function(e){return t.apply(null,e)}))}function V(){var e=[].slice.call(arguments),t=e.length;if(0===t)return Z("zero alternates");for(var n=0;n<t;n+=1)A(e[n]);return i((function(t,n){for(var i,r=0;r<e.length;r+=1)if((i=S(e[r]._(t,n),i)).status)return i;return i}))}function K(e,t){return W(e,t).or(q([]))}function W(e,t){return A(e),A(t),U(e,t.then(e).many(),(function(e,t){return[e].concat(t)}))}function X(e){L(e);var t="'"+e+"'";return i((function(n,i){var r=i+e.length,s=n.slice(i,r);return s===e?w(r,s):P(i,t)}))}function Y(e,t){!function(e){if(!(e instanceof RegExp))throw new Error("not a regexp: "+e);for(var t=G(e),n=0;n<t.length;n++){var i=t.charAt(n);if("i"!==i&&"m"!==i&&"u"!==i&&"s"!==i)throw new Error('unsupported regexp flag "'+i+'": '+e)}}(e),arguments.length>=2?N(t):t=0;var n=function(e){return RegExp("^(?:"+e.source+")",G(e))}(e),r=""+e;return i((function(e,i){var s=n.exec(e.slice(i));if(s){if(0<=t&&t<=s.length){var o=s[0],a=s[t];return w(i+o.length,a)}return P(i,"valid match group (0 to "+s.length+") in "+r)}return P(i,r)}))}function q(e){return i((function(t,n){return w(n,e)}))}function Z(e){return i((function(t,n){return P(n,e)}))}function J(e){if(b(e))return i((function(t,n){var i=e._(t,n);return i.index=n,i.value="",i}));if("string"==typeof e)return J(X(e));if(e instanceof RegExp)return J(Y(e));throw new Error("not a string, regexp, or parser: "+e)}function Q(e){return A(e),i((function(t,n){var i=e._(t,n),r=t.slice(n,i.index);return i.status?P(n,'not "'+r+'"'):w(n,null)}))}function ee(e){return $(e),i((function(t,n){var i=C(t,n);return n<t.length&&e(i)?w(n+1,i):P(n,"a character/byte matching "+e)}))}function te(e,t){arguments.length<2&&(t=e,e=void 0);var n=i((function(e,i){return n._=t()._,n._(e,i)}));return e?n.desc(e):n}function ne(){return Z("fantasy-land/empty")}r.parse=function(e){if("string"!=typeof e&&!E(e))throw new Error(".parse must be called with a string or Buffer as its argument");var t,n=this.skip(oe)._(e,0);return t=n.status?{status:!0,value:n.value}:{status:!1,index:x(e,n.furthest),expected:n.expected},delete k[e],t},r.tryParse=function(e){var t=this.parse(e);if(t.status)return t.value;var n=z(e,t),i=new Error(n);throw i.type="ParsimmonError",i.result=t,i},r.assert=function(e,t){return this.chain((function(n){return e(n)?q(n):Z(t)}))},r.or=function(e){return V(this,e)},r.trim=function(e){return this.wrap(e,e)},r.wrap=function(e,t){return U(e,this,t,(function(e,t){return t}))},r.thru=function(e){return e(this)},r.then=function(e){return A(e),R(this,e).map((function(e){return e[1]}))},r.many=function(){var e=this;return i((function(t,n){for(var i=[],r=void 0;;){if(!(r=S(e._(t,n),r)).status)return S(w(n,i),r);if(n===r.index)throw new Error("infinite loop detected in .many() parser --- calling .many() on a parser which can accept zero characters is usually the cause");n=r.index,i.push(r.value)}}))},r.tieWith=function(e){return L(e),this.map((function(t){if(function(e){if(!y(e))throw new Error("not an array: "+e)}(t),t.length){L(t[0]);for(var n=t[0],i=1;i<t.length;i++)L(t[i]),n+=e+t[i];return n}return""}))},r.tie=function(){return this.tieWith("")},r.times=function(e,t){var n=this;return arguments.length<2&&(t=e),N(e),N(t),i((function(i,r){for(var s=[],o=void 0,a=void 0,l=0;l<e;l+=1){if(a=S(o=n._(i,r),a),!o.status)return a;r=o.index,s.push(o.value)}for(;l<t&&(a=S(o=n._(i,r),a),o.status);l+=1)r=o.index,s.push(o.value);return S(w(r,s),a)}))},r.result=function(e){return this.map((function(){return e}))},r.atMost=function(e){return this.times(0,e)},r.atLeast=function(e){return U(this.times(e),this.many(),(function(e,t){return e.concat(t)}))},r.map=function(e){$(e);var t=this;return i((function(n,i){var r=t._(n,i);return r.status?S(w(r.index,e(r.value)),r):r}))},r.contramap=function(e){$(e);var t=this;return i((function(n,i){var r=t.parse(e(n.slice(i)));return r.status?w(i+n.length,r.value):r}))},r.promap=function(e,t){return $(e),$(t),this.contramap(e).map(t)},r.skip=function(e){return R(this,e).map((function(e){return e[0]}))},r.mark=function(){return U(ie,this,ie,(function(e,t,n){return{start:e,value:t,end:n}}))},r.node=function(e){return U(ie,this,ie,(function(t,n,i){return{name:e,value:n,start:t,end:i}}))},r.sepBy=function(e){return K(this,e)},r.sepBy1=function(e){return W(this,e)},r.lookahead=function(e){return this.skip(J(e))},r.notFollowedBy=function(e){return this.skip(Q(e))},r.desc=function(e){y(e)||(e=[e]);var t=this;return i((function(n,i){var r=t._(n,i);return r.status||(r.expected=e),r}))},r.fallback=function(e){return this.or(q(e))},r.ap=function(e){return U(e,this,(function(e,t){return e(t)}))},r.chain=function(e){var t=this;return i((function(n,i){var r=t._(n,i);return r.status?S(e(r.value)._(n,r.index),r):r}))},r.concat=r.or,r.empty=ne,r.of=q,r["fantasy-land/ap"]=r.ap,r["fantasy-land/chain"]=r.chain,r["fantasy-land/concat"]=r.concat,r["fantasy-land/empty"]=r.empty,r["fantasy-land/of"]=r.of,r["fantasy-land/map"]=r.map;var ie=i((function(e,t){return w(t,x(e,t))})),re=i((function(e,t){return t>=e.length?P(t,"any character/byte"):w(t+1,C(e,t))})),se=i((function(e,t){return w(e.length,e.slice(t))})),oe=i((function(e,t){return t<e.length?P(t,"EOF"):w(t,null)})),ae=Y(/[0-9]/).desc("a digit"),le=Y(/[0-9]*/).desc("optional digits"),ue=Y(/[a-z]/i).desc("a letter"),ce=Y(/[a-z]*/i).desc("optional letters"),de=Y(/\s*/).desc("optional whitespace"),he=Y(/\s+/).desc("whitespace"),pe=X("\r"),ge=X("\n"),me=X("\r\n"),fe=V(me,ge,pe).desc("newline"),ve=V(fe,oe);i.all=se,i.alt=V,i.any=re,i.cr=pe,i.createLanguage=function(e){var t={};for(var n in e)({}).hasOwnProperty.call(e,n)&&function(n){t[n]=te((function(){return e[n](t)}))}(n);return t},i.crlf=me,i.custom=function(e){return i(e(w,P))},i.digit=ae,i.digits=le,i.empty=ne,i.end=ve,i.eof=oe,i.fail=Z,i.formatError=z,i.index=ie,i.isParser=b,i.lazy=te,i.letter=ue,i.letters=ce,i.lf=ge,i.lookahead=J,i.makeFailure=P,i.makeSuccess=w,i.newline=fe,i.noneOf=function(e){return ee((function(t){return e.indexOf(t)<0})).desc("none of '"+e+"'")},i.notFollowedBy=Q,i.of=q,i.oneOf=function(e){for(var t=e.split(""),n=0;n<t.length;n++)t[n]="'"+t[n]+"'";return ee((function(t){return e.indexOf(t)>=0})).desc(t)},i.optWhitespace=de,i.Parser=i,i.range=function(e,t){return ee((function(n){return e<=n&&n<=t})).desc(e+"-"+t)},i.regex=Y,i.regexp=Y,i.sepBy=K,i.sepBy1=W,i.seq=R,i.seqMap=U,i.seqObj=function(){for(var e,t={},n=0,r=(e=arguments,Array.prototype.slice.call(e)),s=r.length,o=0;o<s;o+=1){var a=r[o];if(!b(a)){if(y(a)&&2===a.length&&"string"==typeof a[0]&&b(a[1])){var l=a[0];if(Object.prototype.hasOwnProperty.call(t,l))throw new Error("seqObj: duplicate key "+l);t[l]=!0,n++;continue}throw new Error("seqObj arguments must be parsers or [string, parser] array pairs.")}}if(0===n)throw new Error("seqObj expects at least one named parser, found zero");return i((function(e,t){for(var n,i={},o=0;o<s;o+=1){var a,l;if(y(r[o])?(a=r[o][0],l=r[o][1]):(a=null,l=r[o]),!(n=S(l._(e,t),n)).status)return n;a&&(i[a]=n.value),t=n.index}return S(w(t,i),n)}))},i.string=X,i.succeed=q,i.takeWhile=function(e){return $(e),i((function(t,n){for(var i=n;i<t.length&&e(C(t,i));)i++;return w(i,t.slice(n,i))}))},i.test=ee,i.whitespace=he,i["fantasy-land/empty"]=ne,i["fantasy-land/of"]=q,i.Binary={bitSeq:d,bitSeqObj:function(e){c();var t={},n=0,i=a((function(e){if(y(e)){var i=e;if(2!==i.length)throw new Error("["+i.join(", ")+"] should be length 2, got length "+i.length);if(L(i[0]),N(i[1]),Object.prototype.hasOwnProperty.call(t,i[0]))throw new Error("duplicate key in bitSeqObj: "+i[0]);return t[i[0]]=!0,n++,i}return N(e),[null,e]}),e);if(n<1)throw new Error("bitSeqObj expects at least one named pair, got ["+e.join(", ")+"]");var r=a((function(e){return e[0]}),i);return d(a((function(e){return e[1]}),i)).map((function(e){return o((function(e,t){return null!==t[0]&&(e[t[0]]=t[1]),e}),{},a((function(t,n){return[t,e[n]]}),r))}))},byte:function(e){if(c(),N(e),e>255)throw new Error("Value specified to byte constructor ("+e+"=0x"+e.toString(16)+") is larger in value than a single byte.");var t=(e>15?"0x":"0x0")+e.toString(16);return i((function(n,i){var r=C(n,i);return r===e?w(i+1,r):P(i,t)}))},buffer:function(e){return h("buffer",e).map((function(e){return Buffer.from(e)}))},encodedString:function(e,t){return h("string",t).map((function(t){return t.toString(e)}))},uintBE:g,uint8BE:g(1),uint16BE:g(2),uint32BE:g(4),uintLE:m,uint8LE:m(1),uint16LE:m(2),uint32LE:m(4),intBE:f,int8BE:f(1),int16BE:f(2),int32BE:f(4),intLE:v,int8LE:v(1),int16LE:v(2),int32LE:v(4),floatBE:h("floatBE",4).map((function(e){return e.readFloatBE(0)})),floatLE:h("floatLE",4).map((function(e){return e.readFloatLE(0)})),doubleBE:h("doubleBE",8).map((function(e){return e.readDoubleBE(0)})),doubleLE:h("doubleLE",8).map((function(e){return e.readDoubleLE(0)}))},e.exports=i}]));let we=Ee;class Pe{static getGrammarForType(e,t,n){if(t instanceof te)return t=t.type,Pe.getGrammarForType(e,t,n);if(t instanceof ee){const n=t.types.filter((e=>e!==String));let i=we.alt(...n.map((t=>Pe.getGrammarForType(e,t).wrap(we.string('"'),we.string('"')).map((e=>(e.setShowAsString(!0),e))))));return n.length<t.types.length&&(i=i.or(e.String)),i}switch(ne.getType(t)){case Boolean:return e.Boolean;case Number:return e.Number;case le:return e.Integer;case String:return e.String;case oe:return e.Guid;case ae:return e.Identifier;case re:return e.Reference;case he:return e.LocalizedText;case ue:return e.InvariantText;case ge:return e.PinReference;case de:return e.LinearColor;case se:return e.FunctionReference;case me:return e.Pin;case Array:return we.seqMap(we.string("("),t.map((t=>Pe.getGrammarForType(e,ne.getType(t)))).reduce(((t,n)=>n&&t!==e.AttributeAnyValue?t.or(n):e.AttributeAnyValue)).trim(we.optWhitespace).sepBy(we.string(",")).skip(we.regex(/,?\s*/)),we.string(")"),((e,t,n)=>t));default:return n}}static createAttributeGrammar=(e,t,n=we.string("=").trim(we.optWhitespace))=>e.AttributeName.skip(n).chain((n=>{const i=n.split("."),r=ne.objectGet(t.attributes,i);return Pe.getGrammarForType(e,r,e.AttributeAnyValue).map((e=>t=>ne.objectSet(t,i,e,!0)))}));static createMultiAttributeGrammar=(e,t)=>we.seqMap(t.lookbehind?we.seq(we.string(t.lookbehind),we.optWhitespace,we.string("(")):we.string("("),Pe.createAttributeGrammar(e,t).trim(we.optWhitespace).sepBy(we.string(",")).skip(we.regex(/,?/).then(we.optWhitespace)),we.string(")"),((e,n,i)=>{let r={};return n.forEach((e=>e(r))),new t(r)}));InlineWhitespace=e=>we.regex(/[^\S\n]+/).desc("inline whitespace");InlineOptWhitespace=e=>we.regex(/[^\S\n]*/).desc("inline optional whitespace");MultilineWhitespace=e=>we.regex(/[^\S\n]*\n\s*/).desc("whitespace with at least a newline");Null=e=>we.seq(we.string("("),e.InlineOptWhitespace,we.string(")")).map((e=>null)).desc("null: ()");Boolean=e=>we.alt(we.string("True"),we.string("False")).map((e=>"True"===e)).desc("either True or False");HexDigit=e=>we.regex(/[0-9a-fA-f]/).desc("hexadecimal digit");Number=e=>we.regex(/[\-\+]?[0-9]+(?:\.[0-9]+)?/).map(Number).desc("a number");NaturalNumber=e=>we.regex(/0|[1-9]\d*/).map(Number).desc("a natural number");ColorNumber=e=>e.NaturalNumber.assert((e=>0<=e&&e<256),"the color must be between 0 and 256 excluded");Word=e=>we.regex(/[a-zA-Z]+/).desc("a word");String=e=>we.regex(/(?:[^"\\]|\\.)*/).wrap(we.string('"'),we.string('"')).map(ne.decodeString).desc('string (with possibility to escape the quote using ")');ReferencePath=e=>we.seq(we.string("/"),e.PathSymbol.map((e=>e.toString())).sepBy1(we.string(".")).tieWith(".")).tie().atLeast(2).tie().desc('a path (words with possibly underscore, separated by ".", separated by "/")');AttributeName=e=>e.Word.sepBy1(we.string(".")).tieWith(".").desc('words separated by ""');None=e=>we.string("None").map((e=>new re({type:"None",path:""}))).desc("none");Integer=e=>we.regex(/[\-\+]?[0-9]+/).map((e=>new le(e))).desc("an integer");Guid=e=>we.regex(/[0-9a-zA-Z]{32}/).map((e=>new oe({value:e}))).desc("32 digit hexadecimal (accepts all the letters for safety) value");Identifier=e=>we.regex(/\w+/).map((e=>new ae(e)));PathSymbol=e=>we.regex(/[0-9\w]+/).map((e=>new pe({value:e})));Reference=e=>we.alt(e.None,...[e.ReferencePath.map((e=>new re({type:"",path:e})))].flatMap((e=>[e,e.trim(we.string('"'))])),we.seqMap(e.Word,we.optWhitespace,we.alt(...[e.ReferencePath].flatMap((e=>[e.wrap(we.string('"'),we.string('"')),e.wrap(we.string("'\""),we.string("\"'"))]))),((e,t,n)=>new re({type:e,path:n}))),e.Word.map((e=>new re({type:e,path:""}))));LocalizedText=e=>we.seqMap(we.string(he.lookbehind).skip(we.optWhitespace).skip(we.string("(")),e.String.trim(we.optWhitespace),we.string(","),e.String.trim(we.optWhitespace),we.string(","),e.String.trim(we.optWhitespace),we.string(")"),((e,t,n,i,r,s,o)=>new he({namespace:t,key:i,value:s})));InvariantText=e=>e.String.trim(we.optWhitespace).wrap(we.string(ue.lookbehind).skip(we.optWhitespace).skip(we.string("(")),we.string(")")).map((e=>new ue({value:e})));AttributeAnyValue=e=>we.alt(e.Null,e.None,e.Boolean,e.Number,e.Integer,e.String,e.Guid,e.LocalizedText,e.InvariantText,e.Reference);PinReference=e=>we.seqMap(e.PathSymbol,we.whitespace,e.Guid,((e,t,n)=>new ge({objectName:e,pinGuid:n})));LinearColor=e=>Pe.createMultiAttributeGrammar(e,de);FunctionReference=e=>Pe.createMultiAttributeGrammar(e,se);KeyBinding=e=>we.alt(e.Identifier.map((e=>new ce({Key:e}))),Pe.createMultiAttributeGrammar(e,ce));Pin=e=>Pe.createMultiAttributeGrammar(e,me);CustomProperties=e=>we.string("CustomProperties").then(we.whitespace).then(e.Pin).map((e=>t=>{let n=ne.objectGet(t,["CustomProperties"],[]);n.push(e),ne.objectSet(t,["CustomProperties"],n,!0)}));Object=e=>we.seqMap(we.seq(we.string("Begin"),we.whitespace,we.string("Object"),we.whitespace),we.alt(e.CustomProperties,Pe.createAttributeGrammar(e,ve)).sepBy1(we.whitespace),we.seq(e.MultilineWhitespace,we.string("End"),we.whitespace,we.string("Object")),((e,t,n)=>{let i={};return t.forEach((e=>e(i))),new ve(i)}));MultipleObject=e=>e.Object.sepBy1(we.whitespace).trim(we.optWhitespace);LinearColorFromHex=e=>we.string("#").then(e.HexDigit.times(2).tie().times(3,4)).trim(we.optWhitespace).map((([e,t,n,i])=>new de({R:parseInt(e,16)/255,G:parseInt(t,16)/255,B:parseInt(n,16)/255,A:i?parseInt(i,16)/255:1})));LinearColorFromRGBList=e=>we.seqMap(e.ColorNumber,we.string(",").skip(we.optWhitespace),e.ColorNumber,we.string(",").skip(we.optWhitespace),e.ColorNumber.map(Number),((e,t,n,i,r)=>new de({R:e/255,G:n/255,B:r/255,A:1})));LinearColorFromRGB=e=>we.string("rgb").then(e.LinearColorFromRGBList.wrap(we.regex(/\(\s*/),we.regex(/\s*\)/)));LinearColorFromRGBA=e=>we.string("rgba").then(we.seqMap(e.ColorNumber,we.string(",").skip(we.optWhitespace),e.ColorNumber,we.string(",").skip(we.optWhitespace),e.ColorNumber.map(Number),we.string(",").skip(we.optWhitespace),we.regex(/0?\.\d+|[01]/).map(Number),((e,t,n,i,r,s,o)=>new de({R:e/255,G:n/255,B:r/255,A:o}))).wrap(we.regex(/\(\s*/),we.regex(/\s*\)/)));LinearColorFromAnyColor=e=>we.alt(e.LinearColorFromRGBList,e.LinearColorFromHex,e.LinearColorFromRGB,e.LinearColorFromRGBA)}class Se{static#l=new Map;static registerSerializer(e,t){Se.#l.set(e,t)}static getSerializer(e){return Se.#l.get(ne.getType(e))}}class ke{static grammar=Ee.createLanguage(new Pe);constructor(e,t,n,i,r,s){this.entityType=e,this.prefix=t??"",this.separator=n??",",this.trailingSeparator=i??!1,this.attributeValueConjunctionSign=r??"=",this.attributeKeyPrinter=s??(e=>e.join("."))}deserialize(e){return this.read(e)}serialize(e,t){t||=e.isShownAsString();let n=this.write(e,t);return e.isShownAsString()&&(n=`"${n}"`),n}read(e){throw new Error("Not implemented")}write(e,t){throw new Error("Not implemented")}writeValue(e,t,n){if(null===e)return"()";const i=e=>Se.getSerializer(ne.getType(e)).serialize(e);switch(e?.constructor){case Function:return this.writeValue(e(),t,n);case Boolean:return ne.FirstCapital(e.toString());case Number:return e.toString();case String:return n?`\\"${ne.encodeString(e)}\\"`:`"${ne.encodeString(e)}"`}return e instanceof Array?`(${e.map((e=>i(e)+",")).join("")})`:e instanceof ie?i(e):void 0}subWrite(e,t,n){let i="",r=e.concat("");const s=r.length-1;for(const e of Object.getOwnPropertyNames(t)){r[s]=e;const o=t[e];o?.constructor===Object?i+=(i.length?this.separator:"")+this.subWrite(r,o,n):void 0!==o&&this.showProperty(t,r,o)&&(i+=(i.length?this.separator:"")+this.prefix+this.attributeKeyPrinter(r)+this.attributeValueConjunctionSign+this.writeValue(o,r,n))}return this.trailingSeparator&&i.length&&1===r.length&&(i+=this.separator),i}showProperty(e,t,n){const i=this.entityType.attributes,r=ne.objectGet(i,t);return!(r instanceof te)||(!ne.equals(r.value,n)||r.showDefault)}}class xe extends ke{constructor(){super(ve," ","\n",!1)}showProperty(e,t,n){switch(t.toString()){case"Class":case"Name":case"CustomProperties":return!1}return super.showProperty(e,t,n)}read(e){const t=ke.grammar.Object.parse(e);if(!t.status)throw new Error("Error when trying to parse the object.");return t.value}readMultiple(e){const t=ke.grammar.MultipleObject.parse(e);if(!t.status)throw new Error("Error when trying to parse the object.");return t.value}write(e,t){return`Begin Object Class=${e.Class.path} Name=${this.writeValue(e.Name,["Name"],t)}\n${this.subWrite([],e,t)+e.CustomProperties.map((e=>this.separator+this.prefix+"CustomProperties "+Se.getSerializer(me).serialize(e))).join("")}\nEnd Object\n`}}class Ae extends Q{#u;constructor(e,t,n={}){n.listenOnFocus=!0,n.unlistenOnTextEdit=!0,super(e,t,n),this.serializer=new xe;let i=this;this.#u=e=>i.copied()}listenEvents(){document.body.addEventListener("copy",this.#u)}unlistenEvents(){document.body.removeEventListener("copy",this.#u)}copied(){const e=this.blueprint.getNodes(!0).map((e=>this.serializer.serialize(e.entity,!1))).join("\n\n");navigator.clipboard.writeText(e)}}class Ce{static styles=r``;#c=[];get inputObjects(){return this.#c}constructed(e){}connectedCallback(e){}willUpdate(e,t){}update(e,t){}render(e){return O``}firstUpdated(e,t){}updated(e,t){}inputSetup(e){this.#c=this.createInputObjects(e)}cleanup(e){this.#c.forEach((e=>e.unlistenDOMElement()))}createInputObjects(e){return[]}}class Ne extends Q{#d;constructor(e,t,n={}){n.activateAnyKey??=!1,n.activationKeys??=[],n.listenOnFocus??=!0,n.unlistenOnTextEdit??=!0,n.activationKeys instanceof Array||(n.activationKeys=[n.activationKeys]),n.activationKeys=n.activationKeys.map((e=>{if(e instanceof ce)return e;if(e.constructor===String){const t=ke.grammar.KeyBinding.parse(e);if(t.status)return t.value}throw new Error("Unexpected key value")})),super(e,t,n),this.#d=this.options.activationKeys??[];let i=this;this.keyDownHandler=e=>{(this.options.activateAnyKey||i.#d.some((t=>(e=>e.bShift||"LeftShift"==e.Key||"RightShift"==e.Key)(t)==e.shiftKey&&(e=>e.bCtrl||"LeftControl"==e.Key||"RightControl"==e.Key)(t)==e.ctrlKey&&(e=>e.bAlt||"LeftAlt"==e.Key||"RightAlt"==e.Key)(t)==e.altKey&&J.Keys[t.Key]==e.code)))&&(n.consumeEvent&&e.stopImmediatePropagation(),i.fire(),document.removeEventListener("keydown",i.keyDownHandler),document.addEventListener("keyup",i.keyUpHandler))},this.keyUpHandler=e=>{(this.options.activateAnyKey||i.#d.some((t=>t.bShift&&"Shift"==e.key||t.bCtrl&&"Control"==e.key||t.bAlt&&"Alt"==e.key||t.bCmd&&"Meta"==e.key||J.Keys[t.Key]==e.code)))&&(n.consumeEvent&&e.stopImmediatePropagation(),i.unfire(),document.removeEventListener("keyup",this.keyUpHandler),document.addEventListener("keydown",this.keyDownHandler))}}listenEvents(){document.addEventListener("keydown",this.keyDownHandler)}unlistenEvents(){document.removeEventListener("keydown",this.keyDownHandler)}fire(){}unfire(){}}class $e extends Ne{constructor(e,t,n={}){n.activationKeys=J.deleteNodesKeyboardKey,super(e,t,n)}fire(){this.blueprint.removeGraphElement(...this.blueprint.getNodes(!0))}}class Le extends Q{constructor(e,t,n){super(e,t,n),this.movementSpace=this.blueprint?.getGridDOMElement()??document.documentElement}locationFromEvent(e){const t=ne.convertLocation([e.clientX,e.clientY],this.movementSpace);return this.blueprint.compensateTranslation(t)}}class Oe extends Le{#h;#p;constructor(e,t,n){n.listenOnFocus=!0,super(e,t,n),this.looseTarget=n?.looseTarget??!0;let i=this;this.#h=e=>{e.preventDefault();const t=i.locationFromEvent(e);i.wheel(Math.sign(e.deltaY*J.mouseWheelFactor),t)},this.#p=e=>e.preventDefault(),this.blueprint.focused&&this.movementSpace.addEventListener("wheel",this.#h,!1)}listenEvents(){this.movementSpace.addEventListener("wheel",this.#h,!1),this.movementSpace.parentElement?.addEventListener("wheel",this.#p)}unlistenEvents(){this.movementSpace.removeEventListener("wheel",this.#h,!1),this.movementSpace.parentElement?.removeEventListener("wheel",this.#p)}wheel(e,t){}}class De extends Oe{#g=!1;get enableZoonIn(){return this.#g}set enableZoonIn(e){(e=Boolean(e))!=this.#g&&(this.#g=e)}wheel(e,t){let n=this.blueprint.getZoom();e=-e,!this.enableZoonIn&&0==n&&e>0||(n+=e,this.blueprint.setZoom(n,t))}}class Te extends Ne{#m;constructor(e,t,n={}){n.activationKeys=J.enableZoomIn,super(e,t,n)}fire(){this.#m=this.blueprint.getInputObject(De),this.#m.enableZoonIn=!0}unfire(){this.#m.enableZoonIn=!1}}class Me extends Ne{constructor(e,t,n={}){n.activationKeys=J.selectAllKeyboardKey,super(e,t,n)}fire(){this.blueprint.selectAll()}}class _e extends Le{#f;#v;#b;#y;#E=!1;started=!1;constructor(e,t,n={}){n.clickButton??=0,n.consumeEvent??=!0,n.exitAnyButton??=!0,n.looseTarget??=!1,n.moveEverywhere??=!1,super(e,t,n),this.clickedPosition=[0,0];const i=this.options.moveEverywhere?document.documentElement:this.movementSpace;let r=this;this.#f=e=>{if(r.blueprint.setFocused(!0),e.button===r.options.clickButton)(r.options.looseTarget||e.target==e.currentTarget)&&(r.options.consumeEvent&&e.stopImmediatePropagation(),i.addEventListener("mousemove",r.#v),document.addEventListener("mouseup",r.#y),r.clickedPosition=r.locationFromEvent(e),r.clicked(r.clickedPosition));else r.options.exitAnyButton||r.#y(e)},this.#v=e=>{r.options.consumeEvent&&e.stopImmediatePropagation(),i.removeEventListener("mousemove",r.#v),i.addEventListener("mousemove",r.#b);const t=r.getEvent(J.trackingMouseEventName.begin);r.#E=0==r.target.dispatchEvent(t);const n=r.locationFromEvent(e);r.startDrag(n),r.started=!0},this.#b=e=>{r.options.consumeEvent&&e.stopImmediatePropagation();const t=r.locationFromEvent(e),n=[e.movementX,e.movementY];r.dragTo(t,n),r.#E&&(r.blueprint.mousePosition=r.locationFromEvent(e))},this.#y=e=>{if(!r.options.exitAnyButton||e.button==r.options.clickButton){if(r.options.consumeEvent&&e.stopImmediatePropagation(),i.removeEventListener("mousemove",r.#v),i.removeEventListener("mousemove",r.#b),document.removeEventListener("mouseup",r.#y),r.started&&r.endDrag(),r.unclicked(),r.#E){const e=r.getEvent(J.trackingMouseEventName.end);r.target.dispatchEvent(e),r.#E=!1}r.started=!1}},this.listenEvents()}listenEvents(){this.target.addEventListener("mousedown",this.#f),2==this.options.clickButton&&this.target.addEventListener("contextmenu",(e=>e.preventDefault()))}unlistenEvents(){this.target.removeEventListener("mousedown",this.#f)}getEvent(e){return new CustomEvent(e,{detail:{tracker:this},bubbles:!0,cancelable:!0})}clicked(e){}startDrag(e){}dragTo(e,t){}endDrag(){}unclicked(e){}}class He extends _e{startDrag(){this.blueprint.scrolling=!0}dragTo(e,t){this.blueprint.scrollDelta([-t[0],-t[1]])}endDrag(){this.blueprint.scrolling=!1}}class Ie extends Le{#w=null;#P;#S;#k;constructor(e,t,n={}){n.listenOnFocus=!0,super(e,t,n);let i=this;this.#P=e=>{e.preventDefault(),i.blueprint.mousePosition=i.locationFromEvent(e)},this.#S=e=>{i.#w||(e.preventDefault(),this.#w=e.detail.tracker,i.unlistenMouseMove())},this.#k=e=>{i.#w==e.detail.tracker&&(e.preventDefault(),i.#w=null,i.listenMouseMove())}}listenMouseMove(){this.target.addEventListener("mousemove",this.#P)}unlistenMouseMove(){this.target.removeEventListener("mousemove",this.#P)}listenEvents(){this.listenMouseMove(),this.blueprint.addEventListener(J.trackingMouseEventName.begin,this.#S),this.blueprint.addEventListener(J.trackingMouseEventName.end,this.#k)}unlistenEvents(){this.unlistenMouseMove(),this.blueprint.removeEventListener(J.trackingMouseEventName.begin,this.#S),this.blueprint.removeEventListener(J.trackingMouseEventName.end,this.#k)}}class je extends q{static properties={};#x=[];#t;get blueprint(){return this.#t}set blueprint(e){return this.#t=e}#A;get entity(){return this.#A}set entity(e){this.#A=e}#C;get template(){return this.#C}inputObjects=[];constructor(e,t){super(),this.#A=e,this.#C=t,this.inputObjects=[],this.#C.constructed(this)}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.blueprint=this.closest("ueb-blueprint"),this.template.connectedCallback(this)}willUpdate(e){super.willUpdate(e),this.template.willUpdate(this,e)}update(e){super.update(e),this.template.update(this,e)}render(){return this.template.render(this)}firstUpdated(e){super.firstUpdated(e),this.template.firstUpdated(this,e),this.template.inputSetup(this)}updated(e){super.updated(e),this.template.updated(this,e),this.#x.forEach((t=>t(e))),this.#x=[]}disconnectedCallback(){super.disconnectedCallback(),this.template.cleanup(this)}addNextUpdatedCallbacks(e,t=!1){this.#x.push(e),t&&this.requestUpdate()}isSameGraph(e){return this.blueprint&&this.blueprint==e?.blueprint}getInputObject(e){return this.template.inputObjects.find((t=>t.constructor==e))}}class Be extends je{static properties={...super.properties,selected:{type:Boolean,attribute:"data-selected",reflect:!0,converter:ne.booleanConverter},locationX:{type:Number,attribute:!1},locationY:{type:Number,attribute:!1}};constructor(...e){super(...e),this.selected=!1,this.locationX=0,this.locationY=0,this.listeningDrag=!1;let t=this;this.dragHandler=e=>t.addLocation(e.detail.value)}connectedCallback(){super.connectedCallback(),this.setSelected(this.selected)}disconnectedCallback(){super.disconnectedCallback(),this.blueprint.removeEventListener(J.nodeDragEventName,this.dragHandler)}setLocation([e,t]){const n=[e-this.locationX,t-this.locationY];if(this.locationX=e,this.locationY=t,this.blueprint){const e=new CustomEvent(J.nodeDragLocalEventName,{detail:{value:n},bubbles:!1,cancelable:!0});this.dispatchEvent(e)}}addLocation([e,t]){this.setLocation([this.locationX+e,this.locationY+t])}setSelected(e=!0){this.selected=e,this.blueprint&&(this.selected?(this.listeningDrag=!0,this.blueprint.addEventListener(J.nodeDragEventName,this.dragHandler)):(this.blueprint.removeEventListener(J.nodeDragEventName,this.dragHandler),this.listeningDrag=!1))}dispatchDragEvent(e){const t=new CustomEvent(J.nodeDragEventName,{detail:{value:e},bubbles:!0,cancelable:!0});this.dispatchEvent(t)}snapToGrid(){const e=ne.snapToGrid([this.locationX,this.locationY],J.gridSize);this.locationX==e[0]&&this.locationY==e[1]||this.setLocation(e)}}class Fe extends _e{constructor(e,t,n={}){n.consumeEvent=!0,super(e,t,n)}}class ze extends je{static properties={...super.properties,initialPositionX:{type:Number,attribute:!1},initialPositionY:{type:Number,attribute:!1},finaPositionX:{type:Number,attribute:!1},finaPositionY:{type:Number,attribute:!1}};constructor(...e){super(...e),this.initialPositionX=0,this.initialPositionY=0,this.finaPositionX=0,this.finaPositionY=0}setBothLocations([e,t]){this.initialPositionX=e,this.initialPositionY=t,this.finaPositionX=e,this.finaPositionY=t}addSourceLocation([e,t]){this.initialPositionX+=e,this.initialPositionY+=t}addDestinationLocation([e,t]){this.finaPositionX+=e,this.finaPositionY+=t}}class Ge extends Ce{update(e,t){super.update(e,t),t.has("initialPositionX")&&e.style.setProperty("--ueb-from-x",`${e.initialPositionX}`),t.has("initialPositionY")&&e.style.setProperty("--ueb-from-y",`${e.initialPositionY}`),t.has("finaPositionX")&&e.style.setProperty("--ueb-to-x",`${e.finaPositionX}`),t.has("finaPositionY")&&e.style.setProperty("--ueb-to-y",`${e.finaPositionY}`)}}class Re extends Ge{static decreasingValue(e,t){const n=-e*t[0]**2,i=t[1]-n/t[0];return e=>n/e+i}static clampedLine(e,t){if(e[0]>t[0]){const n=e;e=t,t=n}const n=(t[1]-e[1])/(t[0]-e[0]),i=e[1]-n*e[0];return r=>r<e[0]?e[1]:r>t[0]?t[1]:n*r+i}static c1DecreasingValue=Re.decreasingValue(-.15,[100,15]);static c2DecreasingValue=Re.decreasingValue(-.06,[500,130]);static c2Clamped=Re.clampedLine([0,100],[200,30]);willUpdate(e,t){super.willUpdate(e,t);const n=Math.max(Math.abs(e.initialPositionX-e.finaPositionX),1),i=Math.max(n,J.linkMinWidth),r=n/i,s=e.originatesFromInput?e.initialPositionX<e.finaPositionX:e.finaPositionX<e.initialPositionX;e.startPixels=n<i?(i-n)/2:0,e.startPercentage=s?e.startPixels+100*r:e.startPixels;const o=e.startPercentage+(s?Re.c1DecreasingValue(i):10)*r;let a=Re.c2Clamped(s?-n:n)+e.startPercentage;a=Math.min(a,Re.c2DecreasingValue(i)),e.svgPathD=J.linkRightSVGPath(e.startPercentage,o,a)}update(e,t){super.update(e,t),t.has("originatesFromInput")&&e.style.setProperty("--ueb-from-input",e.originatesFromInput?"1":"0");const n=e.sourcePin??e.destinationPin;n&&e.style.setProperty("--ueb-link-color-rgb",ne.printLinearColor(n.color)),e.style.setProperty("--ueb-link-start",`${Math.round(e.startPixels)}`),e.style.setProperty("--ueb-start-percentage",`${Math.round(e.startPercentage)}%`)}render(e){const t="ueb-id-"+Math.floor(1e12*Math.random());return O`<svg version="1.2" baseProfile="tiny" width="100%" height="100%" viewBox="0 0 100 100" preserveAspectRatio="none"><g><path id="${t}" fill="none" vector-effect="non-scaling-stroke" d="${e.svgPathD}"/><use href="#${t}" pointer-events="stroke" stroke-width="10"/></g></svg> ${""!=e.linkMessageIcon||""!=e.linkMessageText?O`<div class="ueb-link-message"><span class="${e.linkMessageIcon}"></span> <span class="ueb-link-message-text">${e.linkMessageText}</span></div>`:O``}`}}class Ue extends ze{static properties={...super.properties,source:{type:String,reflect:!0},destination:{type:String,reflect:!0},dragging:{type:Boolean,attribute:"data-dragging",converter:ne.booleanConverter,reflect:!0},originatesFromInput:{type:Boolean,attribute:!1},svgPathD:{type:String,attribute:!1},linkMessageIcon:{type:String,attribute:!1},linkMessageText:{type:String,attribute:!1}};#N;get sourcePin(){return this.#N}set sourcePin(e){this.#$(e,!1)}#L;get destinationPin(){return this.#L}set destinationPin(e){this.#$(e,!0)}#O;#D;#T;#M;#_;pathElement;constructor(e,t){super({},new Re);const n=this;this.#O=()=>n.remove(),this.#D=e=>n.addSourceLocation(e.detail.value),this.#T=e=>n.addDestinationLocation(e.detail.value),this.#M=e=>n.setSourceLocation(),this.#_=e=>n.setDestinationLocation(),this.source=null,this.destination=null,this.dragging=!1,this.originatesFromInput=!1,this.startPercentage=0,this.svgPathD="",this.startPixels=0,this.linkMessageIcon="",this.linkMessageText="",e&&(this.sourcePin=e,t||(this.finaPositionX=this.initialPositionX,this.finaPositionY=this.initialPositionY)),t&&(this.destinationPin=t,e||(this.initialPositionX=this.finaPositionX,this.initialPositionY=this.finaPositionY)),this.#H()}#$(e,t){const n=()=>t?this.destinationPin:this.sourcePin;if(n()!=e){if(n()){const e=n().getNodeElement();e.removeEventListener(J.nodeDeleteEventName,this.#O),e.removeEventListener(J.nodeDragLocalEventName,t?this.#T:this.#D),e.removeEventListener(J.nodeReflowEventName,t?this.#_:this.#M),this.#I()}if(t?this.#L=e:this.#N=e,n()){const e=n().getNodeElement();e.addEventListener(J.nodeDeleteEventName,this.#O),e.addEventListener(J.nodeDragLocalEventName,t?this.#T:this.#D),e.addEventListener(J.nodeReflowEventName,t?this.#_:this.#M),t?this.setDestinationLocation():(this.setSourceLocation(),this.originatesFromInput=this.sourcePin.isInput()),this.#H()}}}#H(){this.sourcePin&&this.destinationPin&&(this.sourcePin.linkTo(this.destinationPin),this.destinationPin.linkTo(this.sourcePin))}#I(){this.sourcePin&&this.destinationPin&&(this.sourcePin.unlinkFrom(this.destinationPin),this.destinationPin.unlinkFrom(this.sourcePin))}disconnectedCallback(){super.disconnectedCallback(),this.#I(),this.sourcePin=null,this.destinationPin=null}setSourceLocation(e=null){if(null==e){const t=this;if(!this.hasUpdated||!this.sourcePin.hasUpdated)return void Promise.all([this.updateComplete,this.sourcePin.updateComplete]).then((()=>t.setSourceLocation()));e=this.sourcePin.template.getLinkLocation(this.sourcePin)}const[t,n]=e;this.initialPositionX=t,this.initialPositionY=n}setDestinationLocation(e=null){if(null==e){const t=this;if(!this.hasUpdated||!this.destinationPin.hasUpdated)return void Promise.all([this.updateComplete,this.destinationPin.updateComplete]).then((()=>t.setDestinationLocation()));e=this.destinationPin.template.getLinkLocation(this.destinationPin)}this.finaPositionX=e[0],this.finaPositionY=e[1]}startDragging(){this.dragging=!0}finishDragging(){this.dragging=!1}removeMessage(){this.linkMessageIcon="",this.linkMessageText=""}setMessageConvertType(){this.linkMessageIcon="ueb-icon-conver-type",this.linkMessageText=`Convert ${this.sourcePin.pinType} to ${this.destinationPin.pinType}.`}setMessageCorrect(){this.linkMessageIcon="ueb-icon-correct",this.linkMessageText=""}setMessageDirectionsIncompatible(){this.linkMessageIcon="ueb-icon-directions-incompatible",this.linkMessageText="Directions are not compatbile."}setMessagePlaceNode(){this.linkMessageIcon="ueb-icon-place-node",this.linkMessageText="Place a new node."}setMessageReplaceLink(){this.linkMessageIcon="ueb-icon-replace-link",this.linkMessageText="Replace existing input connections."}setMessageSameNode(){this.linkMessageIcon="ueb-icon-same-node",this.linkMessageText="Both are on the same node."}setMEssagetypesIncompatible(){this.linkMessageIcon="ueb-icon-types-incompatible",this.linkMessageText=`${this.sourcePin.pinType} is not compatible with ${this.destinationPin.pinType}.`}}customElements.define("ueb-link",Ue);class Ve extends _e{#j;#B;#F;link;enteredPin;linkValid=!1;constructor(e,t,n){super(e,t,n);let i=this;this.#B=e=>{if(!i.enteredPin){i.linkValid=!1,i.enteredPin=e.target;const t=i.enteredPin,n=i.target;t.getNodeElement()==n.getNodeElement()?i.link.setMessageSameNode():t.isOutput()==n.isOutput()||t.isOutput()==n.isOutput()?i.link.setMessageDirectionsIncompatible():i.blueprint.getLinks([t,n]).length?(i.link.setMessageReplaceLink(),i.linkValid=!0):(i.link.setMessageCorrect(),i.linkValid=!0)}},this.#F=e=>{i.enteredPin==e.target&&(i.enteredPin=null,i.linkValid=!1,i.link?.setMessagePlaceNode())}}startDrag(e){this.link=new Ue(this.target,null),this.blueprint.linksContainerElement.prepend(this.link),this.link.setMessagePlaceNode(),this.#j=this.blueprint.querySelectorAll("ueb-pin"),this.#j.forEach((e=>{e!=this.target&&(e.getClickableElement().addEventListener("mouseenter",this.#B),e.getClickableElement().addEventListener("mouseleave",this.#F))})),this.link.startDragging(),this.link.setDestinationLocation(e)}dragTo(e,t){this.link.setDestinationLocation(e)}endDrag(){this.#j.forEach((e=>{e.removeEventListener("mouseenter",this.#B),e.removeEventListener("mouseleave",this.#F)})),this.enteredPin&&this.linkValid?(this.blueprint.addGraphElement(this.link),this.link.destinationPin=this.enteredPin,this.link.removeMessage(),this.link.finishDragging()):(this.link.finishDragging(),this.link.remove()),this.enteredPin=null,this.link=null,this.#j=null}}class Ke extends Ce{static styles=r``;connectedCallback(e){super.connectedCallback(e),e.nodeElement=e.closest("ueb-node")}createInputObjects(e){return[new Ve(e.clickableElement,e.blueprint,{moveEverywhere:!0,looseTarget:!0})]}render(e){const t=O`<div class="ueb-pin-icon">${this.renderIcon(e)}</div>`,n=O`<div class="ueb-pin-content"><span class="ueb-pin-name">${e.getPinDisplayName()}</span> ${this.renderInput(e)}</div>`;return O`<div class="ueb-pin-wrapper">${e.isInput()?O`${t}${n}`:O`${n}${t}`}</div>`}renderIcon(e){return O`<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><circle class="ueb-pin-tofill" cx="16" cy="16" r="14" fill="none" stroke="currentColor" stroke-width="5"/><path d="M 34 6 L 34 26 L 42 16 Z" fill="currentColor"/></svg>`}renderInput(e){return O``}firstUpdated(e,t){super.firstUpdated(e,t),e.dataset.id=e.GetPinIdValue(),e.clickableElement=e}getLinkLocation(e){const t=e.querySelector(".ueb-pin-icon").getBoundingClientRect(),n=ne.convertLocation([(t.left+t.right)/2,(t.top+t.bottom)/2],e.blueprint.gridElement);return e.blueprint.compensateTranslation(n)}}class We extends Ke{#z;get inputContentElements(){return this.#z}firstUpdated(e,t){if(super.firstUpdated(e,t),this.#z=[...e.querySelectorAll(".ueb-pin-input-content")],this.#z.length){this.setInputs(e,this.getInputs(e));let t=this;this.onFocusHandler=t=>e.blueprint.dispatchEditTextEvent(!0),this.onFocusOutHandler=n=>{n.preventDefault(),document.getSelection()?.removeAllRanges(),t.setInputs(e,this.getInputs(e)),e.blueprint.dispatchEditTextEvent(!1)},this.#z.forEach((e=>{e.addEventListener("focus",this.onFocusHandler),e.addEventListener("focusout",this.onFocusOutHandler)}))}}cleanup(e){super.cleanup(e),this.#z.forEach((e=>{e.removeEventListener("focus",this.onFocusHandler),e.removeEventListener("focusout",this.onFocusOutHandler)}))}createInputObjects(e){return[...super.createInputObjects(e),...this.#z.map((t=>new Fe(t,e.blueprint)))]}getInput(e){return this.getInputs(e).reduce(((e,t)=>e+t),"")}getInputs(e){return ne.decodeInputString(e.entity.DefaultValue),this.#z.map((e=>e.innerHTML.replaceAll("<br>","\n")))}setInputs(e,t=[],n=!0){this.#z.forEach(((e,n)=>e.innerText=t[n])),n&&e.setDefaultValue(t.reduce(((e,t)=>e+t),""))}renderInput(e){return e.isInput()?O`<div class="ueb-pin-input"><span class="ueb-pin-input-content" role="textbox" contenteditable="true" .innerText="${e.unreactiveDefaultValue}"></span></div>`:O``}}class Xe extends We{#G;firstUpdated(e,t){super.firstUpdated(e,t),this.#G=e.querySelector(".ueb-pin-input");let n=this;this.onChangeHandler=t=>e.entity.DefaultValue=n.#G.checked?"true":"false",this.#G.addEventListener("change",this.onChangeHandler)}cleanup(e){super.cleanup(e),this.#G.removeEventListener("change",this.onChangeHandler)}getInputs(e){return[this.#G.checked?"true":"false"]}renderInput(e){return e.isInput()?O`<input type="checkbox" class="ueb-pin-input" .checked="${"true"==e.defaultValue}">`:super.renderInput(e)}}class Ye extends Ke{renderIcon(e){return O`<svg viewBox="-2 0 16 16"><path class="ueb-pin-tofill" stroke-width="1.25" stroke="white" d="M 2 1 a 2 2 0 0 0 -2 2 v 10 a 2 2 0 0 0 2 2 h 4 a 2 2 0 0 0 1.519 -0.698 l 4.843 -5.651 a 1 1 0 0 0 0 -1.302 L 7.52 1.7 a 2 2 0 0 0 -1.519 -0.698 z"/></svg>`}}class qe extends We{#G;firstUpdated(e,t){super.firstUpdated(e,t),this.#G=e.querySelector(".ueb-pin-input")}getInputs(e){return[this.#G.dataset.linearColor]}setInputs(e,t=[]){}renderInput(e){return e.isInput()?O`<span class="ueb-pin-input" data-linear-color="${e.defaultValue.toString()}" style="--ueb-linear-color:rgba(${e.defaultValue.toString()})"></span>`:super.renderInput(e)}}class Ze extends We{onInputHandler;firstUpdated(e,t){super.firstUpdated(e,t),this.onInputHandler=e=>{e.stopPropagation(),("insertParagraph"==e.inputType||"insertLineBreak"==e.inputType||"insertFromPaste"==e.inputType&&e.target.innerText.includes("\n"))&&(e.target.blur(),this.inputContentElements.forEach((e=>e.innerText=e.innerText.replaceAll("\n",""))))},this.inputContentElements.forEach((e=>{e.addEventListener("input",this.onInputHandler)}))}cleanup(e){super.cleanup(e),this.inputContentElements.forEach((e=>{e.removeEventListener("input",this.onInputHandler)}))}getInputs(e){return this.inputContentElements.map((e=>e.textContent))}setInputs(e,t=[],n=!0){t=t.map((e=>e.replaceAll("\n",""))),super.setInputs(e,t,n)}}class Je extends We{setInputs(e,t=[]){let n=parseFloat(t.length?t[0]:this.getInput(e)),i=!0;isNaN(n)&&(n=parseFloat(""!=e.entity.DefaultValue?e.entity.DefaultValue:e.entity.AutogeneratedDefaultValue)),isNaN(n)&&(n=0,i=!1),t[0]=ne.minDecimals(n),super.setInputs(e,t,i)}}class Qe extends We{firstUpdated(e,t){super.firstUpdated(e,t)}}class et extends je{static#R={bool:Xe,exec:Ye,name:Ze,real:Je,string:Qe,"/Script/CoreUObject.LinearColor":qe};static properties={advancedView:{type:String,attribute:"data-advanced-view",reflect:!0},color:{type:de,converter:{fromAttribute:(e,t)=>ke.grammar.LinearColorFromAnyColor.parse(e).value,toAttribute:(e,t)=>ne.printLinearColor(e)},attribute:"data-color",reflect:!0},defaultValue:{type:String,attribute:!1},isLinked:{type:Boolean,converter:ne.booleanConverter,attribute:"data-linked",reflect:!0},pinType:{type:String,attribute:"data-type",reflect:!0},pinDirection:{type:String,attribute:"data-direction",reflect:!0}};static getTypeTemplate(e){return et.#R[e.getType()]??Ke}nodeElement;clickableElement;connections=0;get defaultValue(){return this.unreactiveDefaultValue}set defaultValue(e){let t=this.unreactiveDefaultValue;this.unreactiveDefaultValue=e,this.requestUpdate("defaultValue",t)}constructor(e){super(e,new(et.getTypeTemplate(e))),this.advancedView=e.bAdvancedView,this.unreactiveDefaultValue=e.getDefaultValue(),this.pinType=this.entity.getType(),this.color=this.constructor.properties.color.converter.fromAttribute(J.pinColor[this.pinType].toString()),this.isLinked=!1,this.pinDirection=e.isInput()?"input":e.isOutput()?"output":"hidden",this.entity.subscribe("DefaultValue",(e=>this.defaultValue=e.toString())),this.entity.subscribe("PinToolTip",(e=>{let t=e.match(/\s*(.+?(?=\n)|.+\S)\s*/);return t?ne.formatStringName(t[1]):ne.formatStringName(this.entity.PinName)}))}connectedCallback(){super.connectedCallback()}GetPinId(){return this.entity.PinId}GetPinIdValue(){return this.GetPinId().value}getPinName(){return this.entity.PinName}getPinDisplayName(){let e=null;return this.entity.PinToolTip&&(e=this.entity.PinToolTip.match(/\s*(.+?(?=\n)|.+\S)\s*/))?ne.formatStringName(e[1]):ne.formatStringName(this.entity.PinName)}isInput(){return this.entity.isInput()}isOutput(){return this.entity.isOutput()}getClickableElement(){return this.clickableElement}getLinkLocation(){return this.template.getLinkLocation(this)}getNodeElement(){return this.nodeElement}getLinks(){return this.entity.LinkedTo??[]}setDefaultValue(e){this.entity.DefaultValue=e}sanitizeLinks(){this.entity.LinkedTo=this.getLinks().filter((e=>{let t=this.blueprint.getPin(e);if(t){this.blueprint.getLink(this,t,!0)||this.blueprint.addGraphElement(new Ue(this,t))}return t}))}linkTo(e){this.entity.linkTo(e.getNodeElement().getNodeName(),e.entity),this.isLinked=this.entity.isLinked()}unlinkFrom(e){this.entity.unlinkFrom(e.getNodeElement().getNodeName(),e.entity),this.isLinked=this.entity.isLinked()}redirectLink(e,t){const n=this.entity.LinkedTo.findIndex((t=>t.objectName.toString()==e.getNodeElement().getNodeName()&&t.pinGuid.valueOf()==e.entity.PinId.valueOf()));return n>=0&&(this.entity.LinkedTo[n]=t,!0)}}customElements.define("ueb-pin",et);class tt extends _e{constructor(e,t,n){super(e,t,n),this.stepSize=parseInt(n?.stepSize??J.gridSize),this.mouseLocation=[0,0]}startDrag(){this.mouseLocation=ne.snapToGrid(this.clickedPosition,this.stepSize),this.target.selected||(this.blueprint.unselectAll(),this.target.setSelected(!0))}dragTo(e,t){const n=[this.target.locationX,this.target.locationY],[i,r]=this.stepSize>1?[ne.snapToGrid(e,this.stepSize),ne.snapToGrid(n,this.stepSize)]:[e,n],s=[i[0]-this.mouseLocation[0],i[1]-this.mouseLocation[1]];0==s[0]&&0==s[1]||(s[0]+=r[0]-this.target.locationX,s[1]+=r[1]-this.target.locationY,this.target.dispatchDragEvent(s),this.mouseLocation=i)}unclicked(){this.started||(this.blueprint.unselectAll(),this.target.setSelected(!0))}}class nt extends Ce{createInputObjects(e){return[...super.createInputObjects(e),new tt(e,e.blueprint,{looseTarget:!0})]}update(e,t){super.update(e,t),t.has("locationX")&&e.style.setProperty("--ueb-position-x",`${e.locationX}`),t.has("locationY")&&e.style.setProperty("--ueb-position-y",`${e.locationY}`)}firstUpdated(e,t){super.firstUpdated(e,t),e.selected&&!e.listeningDrag&&e.setSelected(!0)}}class it extends nt{toggleAdvancedDisplayHandler;render(e){return O`<div class="ueb-node-border"><div class="ueb-node-wrapper"><div class="ueb-node-top"><div class="ueb-node-name"><span class="ueb-node-name-symbol"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.72002 6.0699C9.88111 4.96527 10.299 3.9138 10.94 2.99991C10.94 2.99991 10.94 3.05991 10.94 3.08991C10.94 3.36573 11.0496 3.63026 11.2446 3.8253C11.4397 4.02033 11.7042 4.12991 11.98 4.12991C12.2558 4.12991 12.5204 4.02033 12.7154 3.8253C12.9105 3.63026 13.02 3.36573 13.02 3.08991C13.0204 2.90249 12.9681 2.71873 12.8691 2.5596C12.7701 2.40047 12.6283 2.27237 12.46 2.18991H12.37C11.8725 2.00961 11.3275 2.00961 10.83 2.18991C9.21002 2.63991 8.58002 4.99991 8.58002 4.99991L8.40002 5.1199H5.40002L5.15002 6.1199H8.27002L7.27002 11.4199C7.11348 12.0161 6.79062 12.5555 6.33911 12.9751C5.8876 13.3948 5.32607 13.6773 4.72002 13.7899C4.78153 13.655 4.81227 13.5081 4.81002 13.3599C4.81002 13.0735 4.69624 12.7988 4.4937 12.5962C4.29116 12.3937 4.01646 12.2799 3.73002 12.2799C3.44359 12.2799 3.16889 12.3937 2.96635 12.5962C2.76381 12.7988 2.65002 13.0735 2.65002 13.3599C2.66114 13.605 2.75692 13.8386 2.92104 14.021C3.08517 14.2033 3.30746 14.3231 3.55002 14.3599C7.91002 15.1999 8.55002 11.4499 8.55002 11.4499L9.55002 7.05991H12.55L12.8 6.05991H9.64002L9.72002 6.0699Z" fill="currentColor"/></svg> </span><span class="ueb-node-name-text">${e.nodeDisplayName}</span></div></div><div class="ueb-node-content"><div class="ueb-node-inputs"></div><div class="ueb-node-outputs"></div></div>${"DevelopmentOnly"==e.enabledState?.toString()?O`<div class="ueb-node-developmentonly">Development Only</div>`:O``} ${e.advancedPinDisplay?O`<div class="ueb-node-expansion" @click="${this.toggleAdvancedDisplayHandler}"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="ueb-node-expansion-icon" viewBox="4 4 24 24"><path d="M 16.003 18.626 l 7.081 -7.081 L 25 13.46 l -8.997 8.998 -9.003 -9 1.917 -1.916 z"/></svg></div>`:O``}</div></div>`}async firstUpdated(e,t){super.firstUpdated(e,t);const n=e.querySelector(".ueb-node-inputs"),i=e.querySelector(".ueb-node-outputs");Promise.all(e.getPinElements().map((e=>e.updateComplete))).then((()=>e.dispatchReflowEvent())),e.getPinElements().forEach((e=>{e.isInput()?n.appendChild(e):e.isOutput()&&i.appendChild(e)})),this.toggleAdvancedDisplayHandler=t=>{e.toggleShowAdvancedPinDisplay(),e.addNextUpdatedCallbacks((()=>e.dispatchReflowEvent()),!0)},e.nodeNameElement=e.querySelector(".ueb-node-name-text")}getPinElements(e){return e.querySelectorAll("ueb-pin")}}class rt extends Be{static properties={...Be.properties,name:{type:String,attribute:"data-name",reflect:!0},advancedPinDisplay:{type:String,attribute:"data-advanced-display",converter:ae.attributeConverter,reflect:!0},enabledState:{type:String,attribute:"data-enabled-state",reflect:!0},nodeDisplayName:{type:String,attribute:!1},pureFunction:{type:Boolean,converter:ne.booleanConverter,attribute:"data-pure-function"}};get blueprint(){return super.blueprint}set blueprint(e){super.blueprint=e,this.#U.forEach((t=>t.blueprint=e))}#V;get nodeNameElement(){return this.#V}set nodeNameElement(e){this.#V=e}#U;constructor(e){super(e,new it),this.#U=this.getPinEntities().filter((e=>!e.isHidden())).map((e=>new et(e))),this.#U.forEach((e=>e.nodeElement=this)),this.name=e.getObjectName(),this.advancedPinDisplay=e.AdvancedPinDisplay?.toString(),this.enabledState=e.EnabledState,this.nodeDisplayName=e.getDisplayName(),this.pureFunction=e.bIsPureFunc,this.dragLinkObjects=[],super.setLocation([this.entity.NodePosX.value,this.entity.NodePosY.value]),this.entity.subscribe("AdvancedPinDisplay",(e=>this.advancedPinDisplay=e)),this.entity.subscribe("Name",(e=>this.name=e))}static fromSerializedObject(e){e=e.trim();let t=Se.getSerializer(ve).deserialize(e);return new rt(t)}connectedCallback(){this.getAttribute("type")?.trim(),super.connectedCallback()}disconnectedCallback(){super.disconnectedCallback(),this.dispatchDeleteEvent()}getNodeName(){return this.entity.getObjectName()}getNodeDisplayName(){return this.entity.getDisplayName()}sanitizeLinks(){this.getPinElements().forEach((e=>e.sanitizeLinks()))}rename(e){if(this.entity.Name==e)return!1;for(let t of this.getPinElements())for(let n of t.getLinks())this.blueprint.getPin(n).redirectLink(t,new ge({objectName:e,pinGuid:t.entity.PinId}));this.entity.Name=e}getPinElements(){return this.#U}getPinEntities(){return this.entity.CustomProperties.filter((e=>e instanceof me))}setLocation(e=[0,0]){let t=this.entity.NodePosX.constructor;this.entity.NodePosX=new t(e[0]),this.entity.NodePosY=new t(e[1]),super.setLocation(e)}dispatchDeleteEvent(e){let t=new CustomEvent(J.nodeDeleteEventName,{bubbles:!0,cancelable:!0});this.dispatchEvent(t)}dispatchReflowEvent(){let e=new CustomEvent(J.nodeReflowEventName,{bubbles:!0,cancelable:!0});this.dispatchEvent(e)}setShowAdvancedPinDisplay(e){this.entity.AdvancedPinDisplay=new ae(e?"Shown":"Hidden")}toggleShowAdvancedPinDisplay(){this.setShowAdvancedPinDisplay("Shown"!=this.entity.AdvancedPinDisplay?.toString())}}customElements.define("ueb-node",rt);class st extends Q{#K;constructor(e,t,n={}){n.listenOnFocus=!0,n.unlistenOnTextEdit=!0,super(e,t,n),this.serializer=new xe;let i=this;this.#K=e=>i.pasted(e.clipboardData.getData("Text"))}listenEvents(){document.body.addEventListener("paste",this.#K)}unlistenEvents(){document.body.removeEventListener("paste",this.#K)}pasted(e){let t=0,n=0,i=0,r=this.serializer.readMultiple(e).map((e=>{let r=new rt(e);return t+=r.locationY,n+=r.locationX,++i,r}));t/=i,n/=i,r.length>0&&this.blueprint.unselectAll();let s=this.blueprint.mousePosition;return r.forEach((e=>{const i=[s[0]-n,s[1]-t];e.addLocation(i),e.snapToGrid(),e.setSelected(!0)})),this.blueprint.addGraphElement(...r),!0}}class ot extends _e{constructor(e,t,n){super(e,t,n),this.selectorElement=this.blueprint.selectorElement}startDrag(){this.selectorElement.beginSelect(this.clickedPosition)}dragTo(e,t){this.selectorElement.selectTo(e)}endDrag(){this.started&&this.selectorElement.endSelect()}unclicked(){this.started||this.blueprint.unselectAll()}}class at{constructor(e=(e=>e),t=null){this.array=new Uint32Array(t),this.comparisonValueSupplier=e,this.length=0,this.currentPosition=0}get(e){return e>=0&&e<this.length?this.array[e]:null}getArray(){return this.array}getPosition(e){let t=0,n=this.length;for(;t<n;){let i=Math.floor((t+n)/2);this.comparisonValueSupplier(this.array[i])<e?t=i+1:n=i}return t}reserve(e){if(this.array.length<e){let t=new Uint32Array(e);t.set(this.array),this.array=t}}insert(e,t=null){let n=this.getPosition(this.comparisonValueSupplier(e));return(n<this.currentPosition||null!=t&&n==this.currentPosition&&this.comparisonValueSupplier(e)<t)&&++this.currentPosition,this.shiftRight(n),this.array[n]=e,++this.length,n}remove(e){let t=this.getPosition(this.comparisonValueSupplier(e));this.array[t]==e&&this.removeAt(t)}removeAt(e){return e<this.currentPosition&&--this.currentPosition,this.shiftLeft(e),--this.length,e}getNext(){return this.currentPosition>=0&&this.currentPosition<this.length?this.get(this.currentPosition):null}getNextValue(){return this.currentPosition>=0&&this.currentPosition<this.length?this.comparisonValueSupplier(this.get(this.currentPosition)):Number.MAX_SAFE_INTEGER}getPrev(){return this.currentPosition>0?this.get(this.currentPosition-1):null}getPrevValue(){return this.currentPosition>0?this.comparisonValueSupplier(this.get(this.currentPosition-1)):Number.MIN_SAFE_INTEGER}shiftLeft(e,t=1){this.array.set(this.array.subarray(e+t),e)}shiftRight(e,t=1){this.array.set(this.array.subarray(e,-t),e+t)}}class lt{constructor(e,t,n,i){this.initialPosition=e,this.finalPosition=e,this.metadata=new Array(t.length),this.primaryOrder=new at((e=>this.metadata[e].primaryBoundary)),this.secondaryOrder=new at((e=>this.metadata[e].secondaryBoundary)),this.selectFunc=i,this.rectangles=t,this.primaryOrder.reserve(this.rectangles.length),this.secondaryOrder.reserve(this.rectangles.length),t.forEach(((e,t)=>{let r={primaryBoundary:this.initialPosition[0],secondaryBoundary:this.initialPosition[1],rectangle:t,onSecondaryAxis:!1};this.metadata[t]=r,i(e,!1);const s=n(e);this.initialPosition[1]<s.secondaryInf?r.secondaryBoundary=s.secondaryInf:s.secondarySup<this.initialPosition[1]?r.secondaryBoundary=s.secondarySup:r.onSecondaryAxis=!0,this.initialPosition[0]<s.primaryInf?(r.primaryBoundary=s.primaryInf,this.primaryOrder.insert(t)):s.primarySup<this.initialPosition[0]?(r.primaryBoundary=s.primarySup,this.primaryOrder.insert(t)):s.secondarySup<this.initialPosition[1]||this.initialPosition[1]<s.secondaryInf?this.secondaryOrder.insert(t):i(e,!0)})),this.primaryOrder.currentPosition=this.primaryOrder.getPosition(this.initialPosition[0]),this.secondaryOrder.currentPosition=this.secondaryOrder.getPosition(this.initialPosition[1]),this.computeBoundaries()}computeBoundaries(){this.boundaries={primaryN:{v:this.primaryOrder.getPrevValue(),i:this.primaryOrder.getPrev()},primaryP:{v:this.primaryOrder.getNextValue(),i:this.primaryOrder.getNext()},secondaryN:{v:this.secondaryOrder.getPrevValue(),i:this.secondaryOrder.getPrev()},secondaryP:{v:this.secondaryOrder.getNextValue(),i:this.secondaryOrder.getNext()}}}selectTo(e){const t=[Math.sign(e[0]-this.initialPosition[0]),Math.sign(e[1]-this.initialPosition[1])],n=(n,i)=>{if(this.metadata[n].onSecondaryAxis)this.selectFunc(this.rectangles[n],i);else if(i){this.secondaryOrder.insert(n,e[1]);const i=this.metadata[n].secondaryBoundary;Math.sign(e[1]-i)==t[1]&&Math.sign(i-this.initialPosition[1])==t[1]&&this.selectFunc(this.rectangles[n],!0)}else this.selectFunc(this.rectangles[n],!1),this.secondaryOrder.remove(n);this.computeBoundaries(),this.selectTo(e)};e[0]<this.boundaries.primaryN.v?(--this.primaryOrder.currentPosition,n(this.boundaries.primaryN.i,this.initialPosition[0]>this.boundaries.primaryN.v&&e[0]<this.initialPosition[0])):e[0]>this.boundaries.primaryP.v&&(++this.primaryOrder.currentPosition,n(this.boundaries.primaryP.i,this.initialPosition[0]<this.boundaries.primaryP.v&&this.initialPosition[0]<e[0]));const i=(t,n)=>{this.selectFunc(this.rectangles[t],n),this.computeBoundaries(),this.selectTo(e)};e[1]<this.boundaries.secondaryN.v?(--this.secondaryOrder.currentPosition,i(this.boundaries.secondaryN.i,this.initialPosition[1]>this.boundaries.secondaryN.v&&e[1]<this.initialPosition[1])):e[1]>this.boundaries.secondaryP.v&&(++this.secondaryOrder.currentPosition,i(this.boundaries.secondaryP.i,this.initialPosition[1]<this.boundaries.secondaryP.v&&this.initialPosition[1]<e[1])),this.finalPosition=e}}class ut extends Ge{}class ct extends ze{constructor(){super({},new ut),this.selectionModel=null}beginSelect(e){this.blueprint.selecting=!0,this.setBothLocations(e),this.selectionModel=new lt(e,this.blueprint.getNodes(),this.blueprint.nodeBoundariesSupplier,this.blueprint.nodeSelectToggleFunction)}selectTo(e){this.selectionModel.selectTo(e),this.finaPositionX=e[0],this.finaPositionY=e[1]}endSelect(){this.blueprint.selecting=!1,this.selectionModel=null,this.initialPositionX=0,this.initialPositionY=0,this.finaPositionX=0,this.finaPositionY=0}}customElements.define("ueb-selector",ct);class dt extends Q{#W;constructor(e,t,n={}){n.listenOnFocus=!0,super(e,t,n);let i=this;this.#W=e=>i.clickedSomewhere(e.target),this.blueprint.focus&&document.addEventListener("click",this.#W)}clickedSomewhere(e){e.closest("ueb-blueprint")||this.blueprint.setFocused(!1)}listenEvents(){document.addEventListener("click",this.#W)}unlistenEvents(){document.removeEventListener("click",this.#W)}}class ht extends Ce{static styleVariables={"--ueb-font-size":`${J.fontSize}`,"--ueb-grid-axis-line-color":`${J.gridAxisLineColor}`,"--ueb-grid-expand":`${J.expandGridSize}px`,"--ueb-grid-line-color":`${J.gridLineColor}`,"--ueb-grid-line-width":`${J.gridLineWidth}px`,"--ueb-grid-set-line-color":`${J.gridSetLineColor}`,"--ueb-grid-set":`${J.gridSet}`,"--ueb-grid-size":`${J.gridSize}px`,"--ueb-link-min-width":`${J.linkMinWidth}`,"--ueb-node-radius":`${J.nodeRadius}px`,"--ueb-pin-bool-color":`${J.pinColor.bool}`,"--ueb-pin-default-color":`${J.pinColor.default}`,"--ueb-pin-exec-color":`${J.pinColor.exec}`,"--ueb-pin-name-color":`${J.pinColor.name}`,"--ueb-pin-real-color":`${J.pinColor.real}`,"--ueb-pin-string-color":`${J.pinColor.string}`,"--ueb-pin-linear-color":`${J.pinColor["/Script/CoreUObject.LinearColor"]}`};constructed(e){e.style.cssText=Object.entries(ht.styleVariables).map((([e,t])=>`${e}:${t};`)).join("")}createInputObjects(e){return[new Ae(e.getGridDOMElement(),e),new st(e.getGridDOMElement(),e),new $e(e.getGridDOMElement(),e),new Me(e.getGridDOMElement(),e),new De(e.getGridDOMElement(),e,{looseTarget:!0}),new ot(e.getGridDOMElement(),e,{clickButton:0,exitAnyButton:!0,looseTarget:!0,moveEverywhere:!0}),new He(e.getGridDOMElement(),e,{clickButton:2,exitAnyButton:!1,looseTarget:!0,moveEverywhere:!0}),new dt(e.getGridDOMElement(),e),new Ie(e.getGridDOMElement(),e),new Te(e.getGridDOMElement(),e)]}render(e){return O`<div class="ueb-viewport-header"><div class="ueb-viewport-zoom">1:1</div></div><div class="ueb-viewport-overlay"></div><div class="ueb-viewport-body"><div class="ueb-grid" style="--ueb-additional-x:${e}--ueb-additional-y:${e.translateY}--ueb-translate-x:${e.translateX}--ueb-translate-y:${e.translateY}"><div class="ueb-grid-content"><div data-links></div><div data-nodes></div></div></div></div>`}firstUpdated(e,t){super.firstUpdated(e,t),e.headerElement=e.querySelector(".ueb-viewport-header"),e.overlayElement=e.querySelector(".ueb-viewport-overlay"),e.viewportElement=e.querySelector(".ueb-viewport-body"),e.selectorElement=new ct,e.querySelector(".ueb-grid-content")?.append(e.selectorElement),e.gridElement=e.viewportElement.querySelector(".ueb-grid"),e.linksContainerElement=e.querySelector("[data-links]"),e.linksContainerElement.append(...e.getLinks()),e.nodesContainerElement=e.querySelector("[data-nodes]"),e.nodesContainerElement.append(...e.getNodes()),e.viewportElement.scroll(J.expandGridSize,J.expandGridSize)}updated(e,t){super.updated(e,t),(t.has("scrollX")||t.has("scrollY"))&&e.viewportElement.scroll(e.scrollX,e.scrollY)}getPin(e,t){return e.querySelector(`ueb-node[data-name="${t.objectName}"] ueb-pin[data-id="${t.pinGuid}"]`)}}class pt extends je{static properties={selecting:{type:Boolean,attribute:"data-selecting",reflect:!0,converter:ne.booleanConverter},scrolling:{type:Boolean,attribute:"data-scrolling",reflect:!0,converter:ne.booleanConverter},focused:{type:Boolean,attribute:"data-focused",reflect:!0,converter:ne.booleanConverter},zoom:{type:Number,attribute:"data-zoom",reflect:!0},scrollX:{type:Number,attribute:!1},scrollY:{type:Number,attribute:!1},additionalX:{type:Number,attribute:!1},additionalY:{type:Number,attribute:!1},translateX:{type:Number,attribute:!1},translateY:{type:Number,attribute:!1}};static styles=ht.styles;#X=new Map;nodes=[];links=[];mousePosition=[0,0];gridElement;viewportElement;overlayElement;selectorElement;linksContainerElement;nodesContainerElement;headerElement;focused=!1;nodeBoundariesSupplier=e=>{let t=e.getBoundingClientRect(),n=this.nodesContainerElement.getBoundingClientRect();const i=1/this.getScale();return{primaryInf:(t.left-n.left)*i,primarySup:(t.right-n.right)*i,secondaryInf:(t.top-n.top)*i,secondarySup:(t.bottom-n.bottom)*i}};nodeSelectToggleFunction=(e,t)=>{e.setSelected(t)};constructor(e=new J){super({},new ht),this.selecting=!1,this.scrolling=!1,this.focused=!1,this.zoom=0,this.scrollX=J.expandGridSize,this.scrollY=J.expandGridSize,this.translateX=J.expandGridSize,this.translateY=J.expandGridSize}getGridDOMElement(){return this.gridElement}disconnectedCallback(){super.disconnectedCallback()}getScroll(){return[this.scrollX,this.scrollY]}setScroll([e,t],n=!1){this.scrollX=e,this.scrollY=t}scrollDelta(e,t=!1){const n=[2*J.expandGridSize,2*J.expandGridSize];let i=this.getScroll(),r=[i[0]+e[0],i[1]+e[1]],s=[0,0];for(let t=0;t<2;++t)e[t]<0&&r[t]<J.gridExpandThreshold*J.expandGridSize?s[t]=-1:e[t]>0&&r[t]>n[t]-J.gridExpandThreshold*J.expandGridSize&&(s[t]=1);0==s[0]&&0==s[1]||this.seamlessExpand(s),i=this.getScroll(),r=[i[0]+e[0],i[1]+e[1]],this.setScroll(r,t)}scrollCenter(){const e=this.getScroll(),t=[this.translateX-e[0],this.translateY-e[1]],n=this.getViewportSize().map((e=>e/2)),i=[t[0]-n[0],t[1]-n[1]];this.scrollDelta(i,!0)}getViewportSize(){return[this.viewportElement.clientWidth,this.viewportElement.clientHeight]}getScrollMax(){return[this.viewportElement.scrollWidth-this.viewportElement.clientWidth,this.viewportElement.scrollHeight-this.viewportElement.clientHeight]}snapToGrid(e){return ne.snapToGrid(e,J.gridSize)}seamlessExpand([e,t]){e=Math.round(e),t=Math.round(t);let n=this.getScale();[e,t]=[-e*J.expandGridSize,-t*J.expandGridSize],0!=e&&(this.scrollX+=e,e/=n),0!=t&&(this.scrollY+=t,t/=n),this.translateX+=e,this.translateY+=t}progressiveSnapToGrid(e){return J.expandGridSize*Math.round(e/J.expandGridSize+.5*Math.sign(e))}getZoom(){return this.zoom}setZoom(e,t){if((e=ne.clamp(e,J.minZoom,J.maxZoom))==this.zoom)return;let n=this.getScale();this.zoom=e,t&&requestAnimationFrame((e=>{t[0]+=this.translateX,t[1]+=this.translateY;let i=this.getScale()/n,r=[i*t[0],i*t[1]];this.scrollDelta([(r[0]-t[0])*n,(r[1]-t[1])*n])}))}getScale(){return parseFloat(getComputedStyle(this.gridElement).getPropertyValue("--ueb-scale"))}compensateTranslation([e,t]){return[e-=this.translateX,t-=this.translateY]}getNodes(e=!1){return e?this.nodes.filter((e=>e.selected)):this.nodes}getPin(e){return[...this.nodes.find((t=>e.objectName.toString()==t.getNodeName()))?.getPinElements()??[]].find((t=>e.pinGuid.toString()==t.GetPinIdValue()))}getLinks([e,t]=[]){if(null==e!=t==null){const n=e??t;return this.links.filter((e=>e.sourcePin==n||e.destinationPin==n))}return null!=e&&null!=t?this.links.filter((n=>n.sourcePin==e&&n.destinationPin==t||n.sourcePin==t&&n.destinationPin==e)):this.links}getLink(e,t,n=!1){return this.links.find((i=>i.sourcePin==e&&i.destinationPin==t||n&&i.sourcePin==t&&i.destinationPin==e))}selectAll(){this.getNodes().forEach((e=>this.nodeSelectToggleFunction(e,!0)))}unselectAll(){this.getNodes().forEach((e=>this.nodeSelectToggleFunction(e,!1)))}addGraphElement(...e){for(let t of e)if(t.blueprint=this,t instanceof rt&&!this.nodes.includes(t)){const e=t.entity.getObjectName(),n=this.nodes.find((t=>t.entity.getObjectName()==e));if(n){let e=n.entity.getObjectName(!0);this.#X[e]=this.#X[e]??-1;do{++this.#X[e]}while(this.nodes.find((t=>t.entity.getObjectName()==J.nodeName(e,this.#X[e]))));n.rename(J.nodeName(e,this.#X[e]))}this.nodes.push(t),this.nodesContainerElement?.appendChild(t)}else t instanceof Ue&&!this.links.includes(t)&&(this.links.push(t),this.linksContainerElement&&!this.linksContainerElement.contains(t)&&this.linksContainerElement.appendChild(t));e.filter((e=>e instanceof rt)).forEach((e=>e.sanitizeLinks()))}removeGraphElement(...e){for(let t of e)if(t.closest("ueb-blueprint")==this){t.remove();let e=t instanceof rt?this.nodes:t instanceof Ue?this.links:null;e?.splice(e.findIndex((e=>e===t)),1)}}setFocused(e=!0){if(this.focused==e)return;let t=new CustomEvent(e?"blueprint-focus":"blueprint-unfocus");this.focused=e,this.focused||this.unselectAll(),this.dispatchEvent(t)}dispatchEditTextEvent(e){const t=new CustomEvent(e?J.editTextEventName.begin:J.editTextEventName.end);this.dispatchEvent(t)}}customElements.define("ueb-blueprint",pt);class gt extends ke{constructor(e,t,n,i,r,s,o){e=e??(e=>`(${e})`),super(t,n,i,r,s,o),this.wrap=e}read(e){const t=Pe.getGrammarForType(ke.grammar,this.entityType).parse(e);if(!t.status)throw new Error(`Error when trying to parse the entity ${this.entityType.prototype.constructor.name}.`);return t.value}write(e,t=!1){return this.wrap(this.subWrite([],e,t))}}class mt extends gt{constructor(e,t){super(void 0,t),this.objectWriter=e}write(e,t=!1){return this.objectWriter(e,t)}}class ft extends gt{constructor(){super((e=>`${me.lookbehind} (${e})`),me,"",",",!0)}writeValue(e,t,n){return e?.constructor===String&&1==t.length&&"DefaultValue"==t[0]?`"${ne.encodeInputString(e)}"`:super.writeValue(e,t,n)}}class vt extends gt{constructor(e){super(void 0,e)}write(e,t){return t||e.isShownAsString()?`"${e.toString().replaceAll('"','\\"')}"`:e.toString()}}!function(){const e=e=>`(${e})`;Se.registerSerializer(se,new gt(e,se)),Se.registerSerializer(oe,new vt(oe)),Se.registerSerializer(ae,new vt(ae)),Se.registerSerializer(le,new vt(le)),Se.registerSerializer(ue,new gt((e=>`${ue.lookbehind}(${e})`),ue,"",", ",!1,"",(e=>""))),Se.registerSerializer(ce,new gt(e,ce)),Se.registerSerializer(de,new gt(e,de)),Se.registerSerializer(he,new gt((e=>`${he.lookbehind}(${e})`),he,"",", ",!1,"",(e=>""))),Se.registerSerializer(ve,new xe),Se.registerSerializer(re,new mt((e=>(e.type??"")+(e.path?e.type?`'"${e.path}"'`:`"${e.path}"`:"")),re)),Se.registerSerializer(pe,new vt(pe)),Se.registerSerializer(ge,new gt((e=>e),ge,""," ",!1,"",(e=>""))),Se.registerSerializer(me,new ft)}();export{pt as Blueprint,J as Configuration,Ue as LinkElement,rt as NodeElement};