diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4b92eae..da014ac 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,6 +29,44 @@ Classes used to map input events (generated from a mouse or a keyboard for examp ### Selection It contains just a few classes related exclusively to the operation of selecting nodes. It is an (arguably useless) attempt to optimize the selection in case of graphs with a very large numbers of nodes (it is not really usefull because in the case of many many nodes, the bootleneck becomes the DOM rendering, not deciding in JavaScript which nodes are selected and which are not even though this happens every frame). Selection has two models: one very simple that checks every frame all the nodes in the graph to see whether or not they are selected by the selector, and the fast model that attemps to optimize the number of nodes that are looked up at, much more complicated and not super usefull as stated before. +# Getting Started + +Clone the repository then run the command: + +``` +npm install +``` + +In order to download the dependencies of the project. + +An http server is also needed to test the changes, one option is `http-server`: + +``` +npm install -g http-server +``` + +In case of linux and permission error then: + +``` +npm config set prefix ~/.local +``` + +And try again the previous command. The path `~/.local/bin` should be added to the `$PATH` environment variable, therefor the following command will be available in the command line: + +``` +http-server +``` + +The example page will be available at the addreess `http://127.0.0.1:8080/` + +Now the iteration steps simply are: make a change to the code, then run: + +``` +npm run build +``` + +And refresh the HTML page possibly holding `Shift`. + # Code Style ## Formatting diff --git a/dist/ueblueprint.js b/dist/ueblueprint.js index 98e6853..1d7f199 100755 --- a/dist/ueblueprint.js +++ b/dist/ueblueprint.js @@ -3,26 +3,26 @@ * Copyright 2019 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -const t$2=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,e$3=Symbol(),n$3=new WeakMap;class s$3{constructor(t,n,s){if(this._$cssResult$=!0,s!==e$3)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=n;}get styleSheet(){let e=this.o;const s=this.t;if(t$2&&void 0===e){const t=void 0!==s&&1===s.length;t&&(e=n$3.get(s)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),t&&n$3.set(s,e));}return e}toString(){return this.cssText}}const o$3=t=>new s$3("string"==typeof t?t:t+"",void 0,e$3),r$2=(t,...n)=>{const o=1===t.length?t[0]:n.reduce(((e,n,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+t[s+1]),t[0]);return new s$3(o,t,e$3)},i$3=(e,n)=>{t$2?e.adoptedStyleSheets=n.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):n.forEach((t=>{const n=document.createElement("style"),s=window.litNonce;void 0!==s&&n.setAttribute("nonce",s),n.textContent=t.cssText,e.appendChild(n);}));},S$1=t$2?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const n of t.cssRules)e+=n.cssText;return o$3(e)})(t):t; +const t$2=window,e$3=t$2.ShadowRoot&&(void 0===t$2.ShadyCSS||t$2.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,s$3=Symbol(),n$3=new WeakMap;class o$3{constructor(t,e,n){if(this._$cssResult$=!0,n!==s$3)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e;}get styleSheet(){let t=this.o;const s=this.t;if(e$3&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=n$3.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&n$3.set(s,t));}return t}toString(){return this.cssText}}const r$2=t=>new o$3("string"==typeof t?t:t+"",void 0,s$3),i$3=(t,...e)=>{const n=1===t.length?t[0]:e.reduce(((e,s,n)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+t[n+1]),t[0]);return new o$3(n,t,s$3)},S$1=(s,n)=>{e$3?s.adoptedStyleSheets=n.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):n.forEach((e=>{const n=document.createElement("style"),o=t$2.litNonce;void 0!==o&&n.setAttribute("nonce",o),n.textContent=e.cssText,s.appendChild(n);}));},c$1=e$3?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const s of t.cssRules)e+=s.cssText;return r$2(e)})(t):t; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */var s$2;const e$2=window.trustedTypes,r$1=e$2?e$2.emptyScript:"",h$1=window.reactiveElementPolyfillSupport,o$2={toAttribute(t,i){switch(i){case Boolean:t=t?r$1:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t);}return t},fromAttribute(t,i){let s=t;switch(i){case Boolean:s=null!==t;break;case Number:s=null===t?null:Number(t);break;case Object:case Array:try{s=JSON.parse(t);}catch(t){s=null;}}return s}},n$2=(t,i)=>i!==t&&(i==i||t==t),l$2={attribute:!0,type:String,converter:o$2,reflect:!1,hasChanged:n$2};class a$1 extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u();}static addInitializer(t){var i;null!==(i=this.h)&&void 0!==i||(this.h=[]),this.h.push(t);}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((i,s)=>{const e=this._$Ep(s,i);void 0!==e&&(this._$Ev.set(e,s),t.push(e));})),t}static createProperty(t,i=l$2){if(i.state&&(i.attribute=!1),this.finalize(),this.elementProperties.set(t,i),!i.noAccessor&&!this.prototype.hasOwnProperty(t)){const s="symbol"==typeof t?Symbol():"__"+t,e=this.getPropertyDescriptor(t,s,i);void 0!==e&&Object.defineProperty(this.prototype,t,e);}}static getPropertyDescriptor(t,i,s){return {get(){return this[i]},set(e){const r=this[t];this[i]=e,this.requestUpdate(t,r,s);},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||l$2}static finalize(){if(this.hasOwnProperty("finalized"))return !1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const t=this.properties,i=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const s of i)this.createProperty(s,t[s]);}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(i){const s=[];if(Array.isArray(i)){const e=new Set(i.flat(1/0).reverse());for(const i of e)s.unshift(S$1(i));}else void 0!==i&&s.push(S$1(i));return s}static _$Ep(t,i){const s=i.attribute;return !1===s?void 0:"string"==typeof s?s:"string"==typeof t?t.toLowerCase():void 0}u(){var t;this._$E_=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(t=this.constructor.h)||void 0===t||t.forEach((t=>t(this)));}addController(t){var i,s;(null!==(i=this._$ES)&&void 0!==i?i:this._$ES=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(s=t.hostConnected)||void 0===s||s.call(t));}removeController(t){var i;null===(i=this._$ES)||void 0===i||i.splice(this._$ES.indexOf(t)>>>0,1);}_$Eg(){this.constructor.elementProperties.forEach(((t,i)=>{this.hasOwnProperty(i)&&(this._$Ei.set(i,this[i]),delete this[i]);}));}createRenderRoot(){var t;const s=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return i$3(s,this.constructor.elementStyles),s}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostConnected)||void 0===i?void 0:i.call(t)}));}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$ES)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostDisconnected)||void 0===i?void 0:i.call(t)}));}attributeChangedCallback(t,i,s){this._$AK(t,s);}_$EO(t,i,s=l$2){var e,r;const h=this.constructor._$Ep(t,s);if(void 0!==h&&!0===s.reflect){const n=(null!==(r=null===(e=s.converter)||void 0===e?void 0:e.toAttribute)&&void 0!==r?r:o$2.toAttribute)(i,s.type);this._$El=t,null==n?this.removeAttribute(h):this.setAttribute(h,n),this._$El=null;}}_$AK(t,i){var s,e;const r=this.constructor,h=r._$Ev.get(t);if(void 0!==h&&this._$El!==h){const t=r.getPropertyOptions(h),n=t.converter,l=null!==(e=null!==(s=null==n?void 0:n.fromAttribute)&&void 0!==s?s:"function"==typeof n?n:null)&&void 0!==e?e:o$2.fromAttribute;this._$El=h,this[h]=l(i,t.type),this._$El=null;}}requestUpdate(t,i,s){let e=!0;void 0!==t&&(((s=s||this.constructor.getPropertyOptions(t)).hasChanged||n$2)(this[t],i)?(this._$AL.has(t)||this._$AL.set(t,i),!0===s.reflect&&this._$El!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,s))):e=!1),!this.isUpdatePending&&e&&(this._$E_=this._$Ej());}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_;}catch(t){Promise.reject(t);}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((t,i)=>this[i]=t)),this._$Ei=void 0);let i=!1;const s=this._$AL;try{i=this.shouldUpdate(s),i?(this.willUpdate(s),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostUpdate)||void 0===i?void 0:i.call(t)})),this.update(s)):this._$Ek();}catch(t){throw i=!1,this._$Ek(),t}i&&this._$AE(s);}willUpdate(t){}_$AE(t){var i;null===(i=this._$ES)||void 0===i||i.forEach((t=>{var i;return null===(i=t.hostUpdated)||void 0===i?void 0:i.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t);}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1;}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return !0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,i)=>this._$EO(i,this[i],t))),this._$EC=void 0),this._$Ek();}updated(t){}firstUpdated(t){}}a$1.finalized=!0,a$1.elementProperties=new Map,a$1.elementStyles=[],a$1.shadowRootOptions={mode:"open"},null==h$1||h$1({ReactiveElement:a$1}),(null!==(s$2=globalThis.reactiveElementVersions)&&void 0!==s$2?s$2:globalThis.reactiveElementVersions=[]).push("1.3.4"); + */var s$2;const e$2=window,r$1=e$2.trustedTypes,h$1=r$1?r$1.emptyScript:"",o$2=e$2.reactiveElementPolyfillSupport,n$2={toAttribute(t,i){switch(i){case Boolean:t=t?h$1:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t);}return t},fromAttribute(t,i){let s=t;switch(i){case Boolean:s=null!==t;break;case Number:s=null===t?null:Number(t);break;case Object:case Array:try{s=JSON.parse(t);}catch(t){s=null;}}return s}},a$1=(t,i)=>i!==t&&(i==i||t==t),l$2={attribute:!0,type:String,converter:n$2,reflect:!1,hasChanged:a$1};class d$1 extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u();}static addInitializer(t){var i;this.finalize(),(null!==(i=this.h)&&void 0!==i?i:this.h=[]).push(t);}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((i,s)=>{const e=this._$Ep(s,i);void 0!==e&&(this._$Ev.set(e,s),t.push(e));})),t}static createProperty(t,i=l$2){if(i.state&&(i.attribute=!1),this.finalize(),this.elementProperties.set(t,i),!i.noAccessor&&!this.prototype.hasOwnProperty(t)){const s="symbol"==typeof t?Symbol():"__"+t,e=this.getPropertyDescriptor(t,s,i);void 0!==e&&Object.defineProperty(this.prototype,t,e);}}static getPropertyDescriptor(t,i,s){return {get(){return this[i]},set(e){const r=this[t];this[i]=e,this.requestUpdate(t,r,s);},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||l$2}static finalize(){if(this.hasOwnProperty("finalized"))return !1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),void 0!==t.h&&(this.h=[...t.h]),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const t=this.properties,i=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const s of i)this.createProperty(s,t[s]);}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(i){const s=[];if(Array.isArray(i)){const e=new Set(i.flat(1/0).reverse());for(const i of e)s.unshift(c$1(i));}else void 0!==i&&s.push(c$1(i));return s}static _$Ep(t,i){const s=i.attribute;return !1===s?void 0:"string"==typeof s?s:"string"==typeof t?t.toLowerCase():void 0}u(){var t;this._$E_=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(t=this.constructor.h)||void 0===t||t.forEach((t=>t(this)));}addController(t){var i,s;(null!==(i=this._$ES)&&void 0!==i?i:this._$ES=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(s=t.hostConnected)||void 0===s||s.call(t));}removeController(t){var i;null===(i=this._$ES)||void 0===i||i.splice(this._$ES.indexOf(t)>>>0,1);}_$Eg(){this.constructor.elementProperties.forEach(((t,i)=>{this.hasOwnProperty(i)&&(this._$Ei.set(i,this[i]),delete this[i]);}));}createRenderRoot(){var t;const s=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return S$1(s,this.constructor.elementStyles),s}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostConnected)||void 0===i?void 0:i.call(t)}));}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$ES)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostDisconnected)||void 0===i?void 0:i.call(t)}));}attributeChangedCallback(t,i,s){this._$AK(t,s);}_$EO(t,i,s=l$2){var e;const r=this.constructor._$Ep(t,s);if(void 0!==r&&!0===s.reflect){const h=(void 0!==(null===(e=s.converter)||void 0===e?void 0:e.toAttribute)?s.converter:n$2).toAttribute(i,s.type);this._$El=t,null==h?this.removeAttribute(r):this.setAttribute(r,h),this._$El=null;}}_$AK(t,i){var s;const e=this.constructor,r=e._$Ev.get(t);if(void 0!==r&&this._$El!==r){const t=e.getPropertyOptions(r),h="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==(null===(s=t.converter)||void 0===s?void 0:s.fromAttribute)?t.converter:n$2;this._$El=r,this[r]=h.fromAttribute(i,t.type),this._$El=null;}}requestUpdate(t,i,s){let e=!0;void 0!==t&&(((s=s||this.constructor.getPropertyOptions(t)).hasChanged||a$1)(this[t],i)?(this._$AL.has(t)||this._$AL.set(t,i),!0===s.reflect&&this._$El!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,s))):e=!1),!this.isUpdatePending&&e&&(this._$E_=this._$Ej());}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_;}catch(t){Promise.reject(t);}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((t,i)=>this[i]=t)),this._$Ei=void 0);let i=!1;const s=this._$AL;try{i=this.shouldUpdate(s),i?(this.willUpdate(s),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostUpdate)||void 0===i?void 0:i.call(t)})),this.update(s)):this._$Ek();}catch(t){throw i=!1,this._$Ek(),t}i&&this._$AE(s);}willUpdate(t){}_$AE(t){var i;null===(i=this._$ES)||void 0===i||i.forEach((t=>{var i;return null===(i=t.hostUpdated)||void 0===i?void 0:i.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t);}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1;}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return !0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,i)=>this._$EO(i,this[i],t))),this._$EC=void 0),this._$Ek();}updated(t){}firstUpdated(t){}}d$1.finalized=!0,d$1.elementProperties=new Map,d$1.elementStyles=[],d$1.shadowRootOptions={mode:"open"},null==o$2||o$2({ReactiveElement:d$1}),(null!==(s$2=e$2.reactiveElementVersions)&&void 0!==s$2?s$2:e$2.reactiveElementVersions=[]).push("1.4.2"); /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -var t$1;const i$2=globalThis.trustedTypes,s$1=i$2?i$2.createPolicy("lit-html",{createHTML:t=>t}):void 0,e$1=`lit$${(Math.random()+"").slice(9)}$`,o$1="?"+e$1,n$1=`<${o$1}>`,l$1=document,h=(t="")=>l$1.createComment(t),r=t=>null===t||"object"!=typeof t&&"function"!=typeof t,d=Array.isArray,u=t=>d(t)||"function"==typeof(null==t?void 0:t[Symbol.iterator]),c=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,v=/-->/g,a=/>/g,f=RegExp(">|[ \t\n\f\r](?:([^\\s\"'>=/]+)([ \t\n\f\r]*=[ \t\n\f\r]*(?:[^ \t\n\f\r\"'`<>=]|(\"|')|))|$)","g"),_=/'/g,g=/"/g,m=/^(?:script|style|textarea|title)$/i,p=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),$=p(1),b=Symbol.for("lit-noChange"),w=Symbol.for("lit-nothing"),x=new WeakMap,T=(t,i,s)=>{var e,o;const n=null!==(e=null==s?void 0:s.renderBefore)&&void 0!==e?e:i;let l=n._$litPart$;if(void 0===l){const t=null!==(o=null==s?void 0:s.renderBefore)&&void 0!==o?o:null;n._$litPart$=l=new N(i.insertBefore(h(),t),t,void 0,null!=s?s:{});}return l._$AI(t),l},A=l$1.createTreeWalker(l$1,129,null,!1),E=(t,i)=>{const o=t.length-1,l=[];let h,r=2===i?"":"",d=c;for(let i=0;i"===u[0]?(d=null!=h?h:c,p=-1):void 0===u[1]?p=-2:(p=d.lastIndex-u[2].length,o=u[1],d=void 0===u[3]?f:'"'===u[3]?g:_):d===g||d===_?d=f:d===v||d===a?d=c:(d=f,h=void 0);const y=d===f&&t[i+1].startsWith("/>")?" ":"";r+=d===c?s+n$1:p>=0?(l.push(o),s.slice(0,p)+"$lit$"+s.slice(p)+e$1+y):s+e$1+(-2===p?(l.push(void 0),i):y);}const u=r+(t[o]||">")+(2===i?"":"");if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return [void 0!==s$1?s$1.createHTML(u):u,l]};class C{constructor({strings:t,_$litType$:s},n){let l;this.parts=[];let r=0,d=0;const u=t.length-1,c=this.parts,[v,a]=E(t,s);if(this.el=C.createElement(v,n),A.currentNode=this.el.content,2===s){const t=this.el.content,i=t.firstChild;i.remove(),t.append(...i.childNodes);}for(;null!==(l=A.nextNode())&&c.length0){l.textContent=i$2?i$2.emptyScript:"";for(let i=0;i2||""!==s[0]||""!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=w;}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,i=this,s,e){const o=this.strings;let n=!1;if(void 0===o)t=P$1(this,t,i,0),n=!r(t)||t!==this._$AH&&t!==b,n&&(this._$AH=t);else {const e=t;let l,h;for(t=o[0],l=0;lt}):void 0,o$1=`lit$${(Math.random()+"").slice(9)}$`,n$1="?"+o$1,l$1=`<${n$1}>`,h=document,r=(t="")=>h.createComment(t),d=t=>null===t||"object"!=typeof t&&"function"!=typeof t,u=Array.isArray,c=t=>u(t)||"function"==typeof(null==t?void 0:t[Symbol.iterator]),v=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,a=/-->/g,f=/>/g,_=RegExp(">|[ \t\n\f\r](?:([^\\s\"'>=/]+)([ \t\n\f\r]*=[ \t\n\f\r]*(?:[^ \t\n\f\r\"'`<>=]|(\"|')|))|$)","g"),m=/'/g,p=/"/g,$=/^(?:script|style|textarea|title)$/i,g=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),y=g(1),x=Symbol.for("lit-noChange"),b=Symbol.for("lit-nothing"),T=new WeakMap,A=h.createTreeWalker(h,129,null,!1),E=(t,i)=>{const s=t.length-1,n=[];let h,r=2===i?"":"",d=v;for(let i=0;i"===u[0]?(d=null!=h?h:v,c=-1):void 0===u[1]?c=-2:(c=d.lastIndex-u[2].length,e=u[1],d=void 0===u[3]?_:'"'===u[3]?p:m):d===p||d===m?d=_:d===a||d===f?d=v:(d=_,h=void 0);const y=d===_&&t[i+1].startsWith("/>")?" ":"";r+=d===v?s+l$1:c>=0?(n.push(e),s.slice(0,c)+"$lit$"+s.slice(c)+o$1+y):s+o$1+(-2===c?(n.push(void 0),i):y);}const u=r+(t[s]||">")+(2===i?"":"");if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return [void 0!==e$1?e$1.createHTML(u):u,n]};class C{constructor({strings:t,_$litType$:i},e){let l;this.parts=[];let h=0,d=0;const u=t.length-1,c=this.parts,[v,a]=E(t,i);if(this.el=C.createElement(v,e),A.currentNode=this.el.content,2===i){const t=this.el.content,i=t.firstChild;i.remove(),t.append(...i.childNodes);}for(;null!==(l=A.nextNode())&&c.length0){l.textContent=s$1?s$1.emptyScript:"";for(let s=0;s2||""!==s[0]||""!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=b;}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,i=this,s,e){const o=this.strings;let n=!1;if(void 0===o)t=P$1(this,t,i,0),n=!d(t)||t!==this._$AH&&t!==x,n&&(this._$AH=t);else {const e=t;let l,h;for(t=o[0],l=0;l{var e,o;const n=null!==(e=null==s?void 0:s.renderBefore)&&void 0!==e?e:i;let l=n._$litPart$;if(void 0===l){const t=null!==(o=null==s?void 0:s.renderBefore)&&void 0!==o?o:null;n._$litPart$=l=new N(i.insertBefore(r(),t),t,void 0,null!=s?s:{});}return l._$AI(t),l}; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */var l,o;class s extends a$1{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0;}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const i=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=T(i,this.renderRoot,this.renderOptions);}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Do)||void 0===t||t.setConnected(!0);}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Do)||void 0===t||t.setConnected(!1);}render(){return b}}s.finalized=!0,s._$litElement$=!0,null===(l=globalThis.litElementHydrateSupport)||void 0===l||l.call(globalThis,{LitElement:s});const n=globalThis.litElementPolyfillSupport;null==n||n({LitElement:s});(null!==(o=globalThis.litElementVersions)&&void 0!==o?o:globalThis.litElementVersions=[]).push("3.2.2"); + */var l,o;class s extends d$1{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0;}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const i=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=Z(i,this.renderRoot,this.renderOptions);}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Do)||void 0===t||t.setConnected(!0);}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Do)||void 0===t||t.setConnected(!1);}render(){return x}}s.finalized=!0,s._$litElement$=!0,null===(l=globalThis.litElementHydrateSupport)||void 0===l||l.call(globalThis,{LitElement:s});const n=globalThis.litElementPolyfillSupport;null==n||n({LitElement:s});(null!==(o=globalThis.litElementVersions)&&void 0!==o?o:globalThis.litElementVersions=[]).push("3.2.2"); /** * @typedef {import("./element/PinElement").default} PinElement @@ -31,24 +31,24 @@ var t$1;const i$2=globalThis.trustedTypes,s$1=i$2?i$2.createPolicy("lit-html",{c class Configuration { static #pinColor = { - "/Script/CoreUObject.LinearColor": r$2`3, 76, 168`, - "/Script/CoreUObject.Rotator": r$2`152, 171, 241`, - "/Script/CoreUObject.Transform": r$2`241, 110, 1`, - "/Script/CoreUObject.Vector": r$2`215, 202, 11`, - "/Script/Engine.Actor": r$2`0, 168, 242`, - "/Script/Engine.GameStateBase": r$2`0, 168, 242`, - "/Script/Engine.Pawn": r$2`0, 168, 242`, - "/Script/Engine.PlayerState": r$2`0, 168, 242`, - "bool": r$2`117, 0, 0`, - "byte": r$2`0, 110, 98`, - "class": r$2`88, 0, 186`, - "default": r$2`167, 167, 167`, - "exec": r$2`240, 240, 240`, - "int": r$2`32, 224, 173`, - "name": r$2`203, 129, 252`, - "real": r$2`50, 187, 0`, - "string": r$2`213, 0, 176`, - "wildcard": r$2`128, 120, 120`, + "/Script/CoreUObject.LinearColor": i$3`3, 76, 168`, + "/Script/CoreUObject.Rotator": i$3`152, 171, 241`, + "/Script/CoreUObject.Transform": i$3`241, 110, 1`, + "/Script/CoreUObject.Vector": i$3`215, 202, 11`, + "/Script/Engine.Actor": i$3`0, 168, 242`, + "/Script/Engine.GameStateBase": i$3`0, 168, 242`, + "/Script/Engine.Pawn": i$3`0, 168, 242`, + "/Script/Engine.PlayerState": i$3`0, 168, 242`, + "bool": i$3`117, 0, 0`, + "byte": i$3`0, 110, 98`, + "class": i$3`88, 0, 186`, + "default": i$3`167, 167, 167`, + "exec": i$3`240, 240, 240`, + "int": i$3`32, 224, 173`, + "name": i$3`203, 129, 252`, + "real": i$3`50, 187, 0`, + "string": i$3`213, 0, 176`, + "wildcard": i$3`128, 120, 120`, } static alphaPattern = "repeating-conic-gradient(#7c8184 0% 25%, #c2c3c4 0% 50%) 50% / 10px 10px" static colorDragEventName = "ueb-color-drag" @@ -67,7 +67,7 @@ class Configuration { begin: "blueprint-focus", end: "blueprint-unfocus", } - static fontSize = r$2`12.5px` + static fontSize = i$3`12.5px` /** * @param {PinElement} pin @@ -83,7 +83,7 @@ class Configuration { if (pin.entity.PinType.PinCategory == "struct" || pin.entity.PinType.PinCategory == "object") { switch (pin.entity.PinType.PinSubCategoryObject.type) { case "ScriptStruct": - return r$2`0, 88, 200` + return i$3`0, 88, 200` default: if (pin.entity.PinType.PinSubCategoryObject.getName().endsWith("Actor")) { return Configuration.#pinColor["/Script/Engine.Actor"] @@ -92,12 +92,12 @@ class Configuration { } return Configuration.#pinColor["default"] } - static gridAxisLineColor = r$2`black` + static gridAxisLineColor = i$3`black` static gridExpandThreshold = 0.25 // remaining size factor threshold to cause an expansion event - static gridLineColor = r$2`#353535` + static gridLineColor = i$3`#353535` static gridLineWidth = 1 // pixel static gridSet = 8 - static gridSetLineColor = r$2`#161616` + static gridSetLineColor = i$3`#161616` static gridShrinkThreshold = 4 // exceding size factor threshold to cause a shrink event static gridSize = 16 // pixel static hexColorRegex = /^\s*#(?[0-9a-fA-F]{2})(?[0-9a-fA-F]{2})(?[0-9a-fA-F]{2})([0-9a-fA-F]{2})?|#(?[0-9a-fA-F])(?[0-9a-fA-F])(?[0-9a-fA-F])\s*$/ @@ -1700,6 +1700,18 @@ class PinEntity extends IEntity { } } +class SymbolEntity extends IEntity { + + static attributes = { + value: String + } + + constructor(values) { + super(values); + /** @type {String} */ this.value; + } +} + class VariableReferenceEntity extends IEntity { static attributes = { @@ -1717,18 +1729,6 @@ class VariableReferenceEntity extends IEntity { } } -class SymbolEntity extends IEntity { - - static attributes = { - value: String - } - - constructor(values) { - super(values); - /** @type {String} */ this.value; - } -} - class ObjectEntity extends IEntity { static attributes = { @@ -2579,7 +2579,7 @@ class Copy extends IInput { /** @template {IElement} T */ class ITemplate { - static styles = r$2`` + static styles = i$3`` /** @type {T} */ element @@ -2612,7 +2612,7 @@ class ITemplate { } render() { - return $`` + return y`` } /** @param {Map} changedProperties */ @@ -3560,7 +3560,7 @@ class BlueprintTemplate extends ITemplate { } render() { - return $` + return y` ${this.element.zoom == 0 ? "1:1" : this.element.zoom} @@ -3952,30 +3952,30 @@ class LinkTemplate extends IFromToPositionedTemplate { render() { const uniqueId = `ueb-id-${Math.floor(Math.random() * 1E12)}`; - return $` + return y` - ${this.element.linkMessageIcon || this.element.linkMessageText ? $` + ${this.element.linkMessageIcon || this.element.linkMessageText ? y` - ${this.element.linkMessageIcon !== w ? $` + ${this.element.linkMessageIcon !== b ? y` ${this.element.linkMessageIcon} - ` : w} - ${this.element.linkMessageText !== w ? $` + ` : b} + ${this.element.linkMessageText !== b ? y` ${this.element.linkMessageText} - ` : w} + ` : b} - ` : w} + ` : b} ` } } class SVGIcon { - static branchNode = $` + static branchNode = y` @@ -3984,7 +3984,7 @@ class SVGIcon { ` - static breakStruct = $` + static breakStruct = y` @@ -3992,7 +3992,7 @@ class SVGIcon { ` - static cast = $` + static cast = y` @@ -4003,40 +4003,40 @@ class SVGIcon { ` - static close = $` + static close = y` ` - static correct = $` + static correct = y` ` - static doN = $` + static doN = y` ` - static execPin = $` + static execPin = y` ` - static expandIcon = $` + static expandIcon = y` ` - static forEachLoop = $` + static forEachLoop = y` @@ -4047,7 +4047,7 @@ class SVGIcon { ` - static functionSymbol = $` + static functionSymbol = y` ` - static genericPin = $` + static genericPin = y` ` - static loop = $` + static loop = y` `;static macro=$``;static makeArray=$``;static makeMap=$``;static makeStruct=$``;static referencePin=$``;static reject=$``;static select=$``;static sequence=$``}class ot extends et{static properties={...super.properties,source:{type:String,reflect:!0},destination:{type:String,reflect:!0},dragging:{type:Boolean,attribute:"data-dragging",converter:re.booleanConverter,reflect:!0},originatesFromInput:{type:Boolean,attribute:!1},svgPathD:{type:String,attribute:!1},linkMessageIcon:{type:String,attribute:!1},linkMessageText:{type:String,attribute:!1}};#j;get sourcePin(){return this.#j}set sourcePin(e){this.#z(e,!1)}#U;get destinationPin(){return this.#U}set destinationPin(e){this.#z(e,!0)}#K;#W;#q;#X;#Z;linkMessageIcon=O;linkMessageText=O;pathElement;constructor(e,t){super({},new rt);const i=this;this.#K=()=>i.remove(),this.#W=e=>i.addSourceLocation(e.detail.value),this.#q=e=>i.addDestinationLocation(e.detail.value),this.#X=e=>i.setSourceLocation(),this.#Z=e=>i.setDestinationLocation(),this.source=null,this.destination=null,this.dragging=!1,this.originatesFromInput=!1,this.startPercentage=0,this.svgPathD="",this.startPixels=0,e&&(this.sourcePin=e,t||(this.toX=this.fromX,this.toY=this.fromY)),t&&(this.destinationPin=t,e||(this.fromX=this.toX,this.fromY=this.toY)),this.#Y()}#z(e,t){const i=()=>t?this.destinationPin:this.sourcePin;if(i()!=e){if(i()){const e=i().getNodeElement();e.removeEventListener(J.nodeDeleteEventName,this.#K),e.removeEventListener(J.nodeDragEventName,t?this.#q:this.#W),e.removeEventListener(J.nodeReflowEventName,t?this.#Z:this.#X),this.#J()}if(t?this.#U=e:this.#j=e,i()){const e=i().getNodeElement();e.addEventListener(J.nodeDeleteEventName,this.#K),e.addEventListener(J.nodeDragEventName,t?this.#q:this.#W),e.addEventListener(J.nodeReflowEventName,t?this.#Z:this.#X),t?this.setDestinationLocation():(this.setSourceLocation(),this.originatesFromInput=this.sourcePin.isInput()),this.#Y()}}}#Y(){this.sourcePin&&this.destinationPin&&(this.sourcePin.linkTo(this.destinationPin),this.destinationPin.linkTo(this.sourcePin))}#J(){this.sourcePin&&this.destinationPin&&(this.sourcePin.unlinkFrom(this.destinationPin),this.destinationPin.unlinkFrom(this.sourcePin))}disconnectedCallback(){super.disconnectedCallback(),this.#J(),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()}const[t,i]=e;this.fromX=t,this.fromY=i}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.toX=e[0],this.toY=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=st.correct,this.linkMessageText=O}setMessageReplace(){this.linkMessageIcon=st.correct,this.linkMessageText=O}setMessageDirectionsIncompatible(){this.linkMessageIcon=st.reject,this.linkMessageText=$`Directions are not compatbile.`}setMessagePlaceNode(){this.linkMessageIcon="ueb-icon-place-node",this.linkMessageText=$`Place a new node.`}setMessageReplaceLink(){this.linkMessageIcon=st.correct,this.linkMessageText=$`Replace existing input connections.`}setMessageSameNode(){this.linkMessageIcon=st.reject,this.linkMessageText=$`Both are on the same node.`}setMEssagetypesIncompatible(){this.linkMessageIcon=st.reject,this.linkMessageText=$`${this.sourcePin.pinType} is not compatible with ${this.destinationPin.pinType}.`}}class at extends Ue{static properties={...super.properties,selected:{type:Boolean,attribute:"data-selected",reflect:!0,converter:re.booleanConverter}};constructor(...e){super(...e),this.selected=!1,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.nodeDragGeneralEventName,this.dragHandler)}setSelected(e=!0){this.selected=e,this.blueprint&&(this.selected?(this.listeningDrag=!0,this.blueprint.addEventListener(J.nodeDragGeneralEventName,this.dragHandler)):(this.blueprint.removeEventListener(J.nodeDragGeneralEventName,this.dragHandler),this.listeningDrag=!1))}}class lt extends Ke{#Q;#ee=null;#te=e=>{if(!this.enteredPin){this.linkValid=!1,this.enteredPin=e.target;const t=this.link.sourcePin??this.target,i=this.enteredPin;t.nodeElement.getType()==J.nodeType.knot||i.nodeElement.getType()==J.nodeType.knot?(this.link.setMessageCorrect(),this.linkValid=!0):t.getNodeElement()==i.getNodeElement()?this.link.setMessageSameNode():t.isOutput()==i.isOutput()||t.isOutput()==i.isOutput()?this.link.setMessageDirectionsIncompatible():this.blueprint.getLinks([t,i]).length?(this.link.setMessageReplaceLink(),this.linkValid=!0):(this.link.setMessageCorrect(),this.linkValid=!0)}};#ie=e=>{this.enteredPin==e.target&&(this.enteredPin=null,this.linkValid=!1,this.link?.setMessagePlaceNode())};link;enteredPin;linkValid=!1;startDrag(e){this.target.nodeElement.getType()==J.nodeType.knot&&(this.#ee=this.target),this.link=new(Xe.getConstructor("ueb-link"))(this.target,null),this.blueprint.linksContainerElement.prepend(this.link),this.link.setMessagePlaceNode(),this.#Q=this.blueprint.querySelectorAll("ueb-pin"),this.#Q.forEach((e=>{if(e!=this.target){const t=e.template.getClickableElement();t.addEventListener("mouseenter",this.#te),t.addEventListener("mouseleave",this.#ie)}})),this.link.startDragging(),this.link.setDestinationLocation(e)}dragTo(e,t){this.link.setDestinationLocation(e)}endDrag(){if(this.#Q.forEach((e=>{e.removeEventListener("mouseenter",this.#te),e.removeEventListener("mouseleave",this.#ie)})),this.enteredPin&&this.linkValid){if(this.#ee){const e=this.#ee!==this.link.sourcePin?this.link.sourcePin:this.enteredPin;if(this.#ee.isInput()&&e.isInput()||this.#ee.isOutput()&&e.isOutput()){const e=this.#ee.isInput()?this.#ee.nodeElement.template.outputPin:this.#ee.nodeElement.template.inputPin;this.#ee===this.link.sourcePin?this.link.sourcePin=e:this.enteredPin=e}}this.blueprint.addGraphElement(this.link),this.link.destinationPin=this.enteredPin,this.link.removeMessage(),this.link.finishDragging()}else this.link.finishDragging(),this.link.remove();this.enteredPin=null,this.link=null,this.#Q=null}}class ct extends Be{#ne;get iconElement(){return this.#ne}connectedCallback(){super.connectedCallback(),this.element.nodeElement=this.element.closest("ueb-node")}createInputObjects(){return[new lt(this.getClickableElement(),this.element.blueprint,{moveEverywhere:!0})]}render(){const e=$`${this.renderIcon()}`,t=$`${this.renderName()} ${this.element.isInput()&&!this.element.entity.bDefaultValueIsIgnored?this.renderInput():$``}`;return $`${this.element.isInput()?$`${e}${t}`:$`${t}${e}`}`}renderIcon(){return st.genericPin}renderName(){return $`${this.element.getPinDisplayName()}`}renderInput(){return $``}updated(e){if(this.element.isInput()&&e.has("isLinked")){const e=this.element.nodeElement;e.addNextUpdatedCallbacks((()=>e.dispatchReflowEvent())),e.requestUpdate()}}firstUpdated(e){super.firstUpdated(e),this.element.style.setProperty("--ueb-pin-color-rgb",J.getPinColor(this.element).cssText),this.#ne=this.element.querySelector(".ueb-pin-icon")??this.element}getLinkLocation(){const e=this.iconElement.getBoundingClientRect(),t=re.convertLocation([(e.left+e.right)/2,(e.top+e.bottom)/2],this.element.blueprint.gridElement);return this.element.blueprint.compensateTranslation(t)}getClickableElement(){return this.element}}class ut extends ct{render(){return this.element.isOutput()?$`${this.renderIcon()}`:$``}getLinkLocation(){const e=(this.element.isInput()?this.element.nodeElement.template.outputPin.template:this).iconElement.getBoundingClientRect(),t=re.convertLocation([this.element.isInput()?e.left+1:e.right+2,(e.top+e.bottom)/2],this.element.blueprint.gridElement);return this.element.blueprint.compensateTranslation(t)}}class ht extends Ke{clicked(e){this.options.repositionOnClick&&(this.target.setLocation(this.stepSize>1?re.snapToGrid(e,this.stepSize):e),this.clickedOffset=[0,0])}dragTo(e,t){const i=[this.target.locationX,this.target.locationY],[n,r]=this.stepSize>1?[re.snapToGrid(e,this.stepSize),re.snapToGrid(i,this.stepSize)]:[e,i];0==(t=[n[0]-this.mouseLocation[0],n[1]-this.mouseLocation[1]])[0]&&0==t[1]||(t[0]+=r[0]-this.target.locationX,t[1]+=r[1]-this.target.locationY,this.dragAction(n,t),this.mouseLocation=n)}dragAction(e,t){this.target.setLocation([e[0]-this.clickedOffset[0],e[1]-this.clickedOffset[1]])}}class dt extends Be{getDraggableElement(){return this.element}createDraggableObject(){return new ht(this.element,this.element.blueprint,{draggableElement:this.getDraggableElement()})}createInputObjects(){return[...super.createInputObjects(),this.createDraggableObject()]}}class pt extends dt{update(e){super.update(e),e.has("locationX")&&(this.element.style.left=`${this.element.locationX}px`),e.has("locationY")&&(this.element.style.top=`${this.element.locationY}px`)}}class mt extends ht{startDrag(){this.target.selected||(this.blueprint.unselectAll(),this.target.setSelected(!0))}dragAction(e,t){this.target.dispatchDragEvent(t)}unclicked(){this.started||(this.blueprint.unselectAll(),this.target.setSelected(!0))}}class gt extends pt{getDraggableElement(){return this.element}createDraggableObject(){return new mt(this.element,this.element.blueprint,{draggableElement:this.getDraggableElement()})}firstUpdated(e){super.firstUpdated(e),this.element.selected&&!this.element.listeningDrag&&this.element.setSelected(!0)}}class vt extends gt{static#re={[J.nodeType.doN]:st.doN,[J.nodeType.dynamicCast]:st.cast,[J.nodeType.executionSequence]:st.sequence,[J.nodeType.forEachElementInEnum]:st.loop,[J.nodeType.forEachLoop]:st.forEachLoop,[J.nodeType.forEachLoopWithBreak]:st.forEachLoop,[J.nodeType.forLoop]:st.loop,[J.nodeType.forLoopWithBreak]:st.loop,[J.nodeType.ifThenElse]:st.branchNode,[J.nodeType.makeArray]:st.makeArray,[J.nodeType.makeMap]:st.makeMap,[J.nodeType.select]:st.select,[J.nodeType.whileLoop]:st.loop,default:st.functionSymbol};#se=!1;toggleAdvancedDisplayHandler=()=>{this.element.toggleShowAdvancedPinDisplay(),this.element.addNextUpdatedCallbacks((()=>this.element.dispatchReflowEvent()),!0)};getColor(){const e=r``,t=r``;switch(this.element.entity.getClass()){case J.nodeType.callFunction:return this.element.entity.bIsPureFunc?t:e;case J.nodeType.makeArray:case J.nodeType.makeMap:case J.nodeType.select:return t;case J.nodeType.macro:case J.nodeType.executionSequence:case J.nodeType.dynamicCast:return r``}return e}constructed(e){super.constructed(e),this.element.style.setProperty("--ueb-node-color",this.getColor().cssText)}render(){const e=this.renderNodeIcon(),t=this.renderNodeName();return $`${e?$`${e}`:O} ${t?$`${t} ${this.#se?$`Target is ${re.formatStringName(this.element.entity.FunctionReference.MemberParent.getName())}`:O}`:O}${"DevelopmentOnly"==this.element.enabledState?.toString()?$`Development Only`:O} ${this.element.advancedPinDisplay?$`${st.expandIcon}`:O}`}renderNodeIcon(){let e=vt.#re[this.element.getType()];return e||(this.element.getNodeDisplayName().startsWith("Break")?st.breakStruct:this.element.entity.getClass()===J.nodeType.macro?st.macro:vt.#re.default)}renderNodeName(){return this.element.getNodeDisplayName()}firstUpdated(e){super.firstUpdated(e),this.setupPins(),Promise.all(this.element.getPinElements().map((e=>e.updateComplete))).then((()=>this.element.dispatchReflowEvent()))}setupPins(){const e=this.element.querySelector(".ueb-node-inputs"),t=this.element.querySelector(".ueb-node-outputs");this.element.nodeNameElement=this.element.querySelector(".ueb-node-name-text"),this.element.getPinElements().forEach((i=>{i.isInput()?e.appendChild(i):i.isOutput()&&t.appendChild(i)}))}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>(this.#se||"Target"!==e.getDisplayName()||(this.#se=!0),new(Xe.getConstructor("ueb-pin"))(e,void 0,this.element))))}getPinElements(e){return e.querySelectorAll("ueb-pin")}linksChanged(){}}class bt extends vt{static#oe=new Set;#ae=null;#le;get inputPin(){return this.#le}#ce;get outputPin(){return this.#ce}findDirectionaPin(e){if(e.nodeElement.getType()!==J.nodeType.knot||bt.#oe.has(e))return bt.#oe.clear(),!0;bt.#oe.add(e);for(let t of e.getLinks().map((e=>this.element.blueprint.getPin(e))))if(this.findDirectionaPin(t))return!0;return!1}render(){return $``}setupPins(){this.element.getPinElements().forEach((e=>this.element.querySelector(".ueb-node-border").appendChild(e)))}getPinElements(e){return e.querySelectorAll("ueb-pin")}createPinElements(){const e=this.element.getPinEntities().filter((e=>!e.isHidden())),t=e[e[0].isInput()?0:1],i=e[e[0].isOutput()?0:1],n=Xe.getConstructor("ueb-pin");return[this.#le=new n(t,new ut,this.element),this.#ce=new n(i,new ut,this.element)]}linksChanged(){}}class ft extends vt{#ue=!1;#he=!1;#de="";constructed(e){super.constructed(e),this.element.classList.add("ueb-node-style-glass"),this.#de=this.element.getNodeDisplayName()}render(){return $`${this.#de?$`${this.#de}`:O}${this.#ue?$``:O} ${this.#he?$``:O}`}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>(this.#ue||=e.isInput(),this.#he||=e.isOutput(),new(Xe.getConstructor("ueb-pin"))(e,void 0,this.element))))}setupPins(){super.setupPins();let e=this.element.getPinElements().find((e=>!e.entity.isHidden()&&!e.entity.isExecution()));this.element.style.setProperty("--ueb-node-color",e.getColor().cssText)}}class yt extends at{static#pe={[J.nodeType.knot]:bt,[J.nodeType.variableGet]:ft,[J.nodeType.variableSet]:ft};static properties={...at.properties,typePath:{type:String,attribute:"data-type",reflect:!0},nodeName:{type:String,attribute:"data-name",reflect:!0},advancedPinDisplay:{type:String,attribute:"data-advanced-display",converter:ce.attributeConverter,reflect:!0},enabledState:{type:String,attribute:"data-enabled-state",reflect:!0},nodeDisplayName:{type:String,attribute:!1},pureFunction:{type:Boolean,converter:re.booleanConverter,attribute:"data-pure-function",reflect:!0}};static dragEventName=J.nodeDragEventName;static dragGeneralEventName=J.nodeDragGeneralEventName;get blueprint(){return super.blueprint}set blueprint(e){super.blueprint=e,this.#me.forEach((t=>t.blueprint=e))}#ge;get nodeNameElement(){return this.#ge}set nodeNameElement(e){this.#ge=e}#me;constructor(e,t){super(e,t??new(yt.getTypeTemplate(e))),this.#me=this.template.createPinElements(),this.typePath=this.entity.getType(),this.nodeName=this.entity.getObjectName(),this.advancedPinDisplay=this.entity.AdvancedPinDisplay?.toString(),this.enabledState=this.entity.EnabledState,this.nodeDisplayName=this.entity.getDisplayName(),this.pureFunction=this.entity.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.nodeName=e))}static getTypeTemplate(e){return yt.#pe[e.getClass()]??vt}static fromSerializedObject(e){e=e.trim();let t=te.getSerializer(xe).deserialize(e);return new yt(t)}disconnectedCallback(){super.disconnectedCallback(),this.dispatchDeleteEvent()}getType(){return this.entity.getType()}getNodeName(){return this.entity.getObjectName()}getNodeDisplayName(){return this.entity.getDisplayName()}sanitizeLinks(e=[]){this.getPinElements().forEach((t=>t.sanitizeLinks(e)))}rename(e){if(this.entity.Name==e)return!1;for(let t of this.getPinElements())for(let i of t.getLinks())this.blueprint.getPin(i).redirectLink(t,new fe({objectName:e,pinGuid:t.entity.PinId}));this.entity.Name=e}getPinElements(){return this.#me}getPinEntities(){return this.entity.CustomProperties.filter((e=>e instanceof Pe))}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(){let e=new CustomEvent(J.nodeDeleteEventName);this.dispatchEvent(e)}dispatchReflowEvent(){let e=new CustomEvent(J.nodeReflowEventName);this.dispatchEvent(e)}setShowAdvancedPinDisplay(e){this.entity.AdvancedPinDisplay=new ce(e?"Shown":"Hidden")}toggleShowAdvancedPinDisplay(){this.setShowAdvancedPinDisplay("Shown"!=this.entity.AdvancedPinDisplay?.toString())}}class wt{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=0&&this.currentPosition=0&&this.currentPosition0?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 Et{constructor(e,t,i,n){this.initialPosition=e,this.finalPosition=e,this.metadata=new Array(t.length),this.primaryOrder=new wt((e=>this.metadata[e].primaryBoundary)),this.secondaryOrder=new wt((e=>this.metadata[e].secondaryBoundary)),this.selectFunc=n,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,n(e,!1);const s=i(e);this.initialPosition[1]{if(this.metadata[i].onSecondaryAxis)this.selectFunc(this.rectangles[i],n);else if(n){this.secondaryOrder.insert(i,e[1]);const n=this.metadata[i].secondaryBoundary;Math.sign(e[1]-n)==t[1]&&Math.sign(n-this.initialPosition[1])==t[1]&&this.selectFunc(this.rectangles[i],!0)}else this.selectFunc(this.rectangles[i],!1),this.secondaryOrder.remove(i);this.computeBoundaries(),this.selectTo(e)};e[0]this.boundaries.primaryN.v&&e[0]this.boundaries.primaryP.v&&(++this.primaryOrder.currentPosition,i(this.boundaries.primaryP.i,this.initialPosition[0]{this.selectFunc(this.rectangles[t],i),this.computeBoundaries(),this.selectTo(e)};e[1]this.boundaries.secondaryN.v&&e[1]this.boundaries.secondaryP.v&&(++this.secondaryOrder.currentPosition,n(this.boundaries.secondaryP.i,this.initialPosition[1]{let t=e.getBoundingClientRect(),i=this.nodesContainerElement.getBoundingClientRect();const n=1/this.getScale();return{primaryInf:(t.left-i.left)*n,primarySup:(t.right-i.right)*n,secondaryInf:(t.top-i.top)*n,secondarySup:(t.bottom-i.bottom)*n}};nodeSelectToggleFunction=(e,t)=>{e.setSelected(t)};constructor(e=new J){super({},new Qe),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],i=!1){this.scrollX=e,this.scrollY=t}scrollDelta(e,t=!1){const i=[2*J.expandGridSize,2*J.expandGridSize];let n=this.getScroll(),r=[n[0]+e[0],n[1]+e[1]],s=[0,0];for(let t=0;t<2;++t)e[t]<0&&r[t]0&&r[t]>i[t]-J.gridExpandThreshold*J.expandGridSize&&(s[t]=1);0==s[0]&&0==s[1]||this.seamlessExpand(s),n=this.getScroll(),r=[n[0]+e[0],n[1]+e[1]],this.setScroll(r,t)}scrollCenter(){const e=this.getScroll(),t=[this.translateX-e[0],this.translateY-e[1]],i=this.getViewportSize().map((e=>e/2)),n=[t[0]-i[0],t[1]-i[1]];this.scrollDelta(n,!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 re.snapToGrid(e,J.gridSize)}seamlessExpand([e,t]){e=Math.round(e),t=Math.round(t);let i=this.getScale();[e,t]=[-e*J.expandGridSize,-t*J.expandGridSize],0!=e&&(this.scrollX+=e,e/=i),0!=t&&(this.scrollY+=t,t/=i),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=re.clamp(e,J.minZoom,J.maxZoom))==this.zoom)return;let i=this.getScale();this.zoom=e,t&&requestAnimationFrame((e=>{t[0]+=this.translateX,t[1]+=this.translateY;let n=this.getScale()/i,r=[n*t[0],n*t[1]];this.scrollDelta([(r[0]-t[0])*i,(r[1]-t[1])*i])}))}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){let t=this.template.getPin(e);return t&&t.nodeElement.getNodeName()==e.objectName.toString()?t:[...this.nodes.find((t=>e.objectName.toString()==t.getNodeName()))?.getPinElements()??[]].find((t=>e.pinGuid.toString()==t.getPinId().toString()))}getLinks([e,t]=[]){if(null==e!=t==null){const i=e??t;return this.links.filter((e=>e.sourcePin==i||e.destinationPin==i))}return null!=e&&null!=t?this.links.filter((i=>i.sourcePin==e&&i.destinationPin==t||i.sourcePin==t&&i.destinationPin==e)):this.links}getLink(e,t,i=!1){return this.links.find((n=>n.sourcePin==e&&n.destinationPin==t||i&&n.sourcePin==t&&n.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 yt&&!this.nodes.includes(t)){const e=t.entity.getObjectName(),i=this.nodes.find((t=>t.entity.getObjectName()==e));if(i){let e=i.entity.getObjectName(!0);this.#ve[e]=this.#ve[e]??-1;do{++this.#ve[e]}while(this.nodes.find((t=>t.entity.getObjectName()==J.nodeName(e,this.#ve[e]))));i.rename(J.nodeName(e,this.#ve[e]))}this.nodes.push(t),this.nodesContainerElement?.appendChild(t)}else t instanceof ot&&!this.links.includes(t)&&(this.links.push(t),this.linksContainerElement&&!this.linksContainerElement.contains(t)&&this.linksContainerElement.appendChild(t));e.filter((e=>e instanceof yt)).forEach((t=>t.sanitizeLinks(e)))}removeGraphElement(...e){for(let t of e)if(t.closest("ueb-blueprint")==this){t.remove();let e=t instanceof yt?this.nodes:t instanceof ot?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",kt);class Ct extends dt{#be;get locationChangeCallback(){return this.#be}set locationChangeCallback(e){this.#be=e}movementSpace;movementSpaceSize=[0,0];connectedCallback(){super.connectedCallback(),this.movementSpace=this.element.parentElement;const e=this.movementSpace.getBoundingClientRect();this.movementSpaceSize=[e.width,e.height]}createDraggableObject(){return new ht(this.element,this.element.blueprint,{draggableElement:this.movementSpace,ignoreTranslateCompensate:!0,moveEverywhere:!0,movementSpace:this.movementSpace,repositionOnClick:!0,stepSize:1})}adjustLocation([e,t]){return this.locationChangeCallback?.(e,t),[e,t]}}class xt extends Ct{adjustLocation([e,t]){const i=Math.round(this.movementSpaceSize[0]/2);e-=i,t=-(t-i);let[n,r]=re.getPolarCoordinates([e,t]);return n=Math.min(n,i),[e,t]=re.getCartesianCoordinates([n,r]),this.locationChangeCallback?.(e/i,t/i),[e=Math.round(e+i),t=Math.round(-t+i)]}}class Lt extends Ue{windowElement;constructor(e,t){super(e,t)}connectedCallback(){super.connectedCallback(),this.windowElement=this.closest("ueb-window")}setLocation([e,t]){super.setLocation(this.template.adjustLocation([e,t]))}}class Nt extends Lt{constructor(){super({},new xt)}}class At extends Ct{adjustLocation([e,t]){return e=re.clamp(e,0,this.movementSpaceSize[0]),t=re.clamp(t,0,this.movementSpaceSize[1]),this.locationChangeCallback?.(e/this.movementSpaceSize[0],1-t/this.movementSpaceSize[1]),[e,t]}}class Tt extends Lt{constructor(){super({},new At)}}class $t extends Be{#fe=()=>{this.element.blueprint.dispatchEditTextEvent(!0),this.element.selectOnFocus&&getSelection().selectAllChildren(this.element)};#ye=()=>{this.element.blueprint.dispatchEditTextEvent(!1),document.getSelection()?.removeAllRanges()};#we=e=>e.target.querySelectorAll("br").forEach((e=>e.remove()));#Ee=e=>{"Enter"!=e.code||e.shiftKey||e.target.blur()};constructed(e){super.constructed(e),this.element.classList.add("ueb-pin-input-content"),this.element.setAttribute("role","textbox"),this.element.contentEditable="true"}connectedCallback(){this.element.addEventListener("focus",this.#fe),this.element.addEventListener("focusout",this.#ye),this.element.singleLine&&this.element.addEventListener("input",this.#we),this.element.blurOnEnter&&this.element.addEventListener("keydown",this.#Ee)}cleanup(){this.element.removeEventListener("focus",this.#fe),this.element.removeEventListener("focusout",this.#ye),this.element.singleLine&&this.element.removeEventListener("input",this.#we),this.element.blurOnEnter&&this.element.removeEventListener("keydown",this.#Ee)}}class Mt extends ze{static properties={...super.properties,singleLine:{type:Boolean,attribute:"data-single-line",converter:re.booleanConverter,reflect:!0},selectOnFocus:{type:Boolean,attribute:"data-select-focus",converter:re.booleanConverter,reflect:!0},blurOnEnter:{type:Boolean,attribute:"data-blur-enter",converter:re.booleanConverter,reflect:!0}};constructor(){super({},new $t),this.singleLine=!1,this.selectOnFocus=!0,this.blurOnEnter=!0}}class Ot extends Ke{constructor(e,t,i={}){i.consumeEvent=!0,super(e,t,i)}}class Dt extends ct{#Se;#Pe=e=>this.element.setDefaultValue(this.#Se.checked);firstUpdated(e){super.firstUpdated(e),this.#Se=this.element.querySelector(".ueb-pin-input"),this.#Se?.addEventListener("change",this.#Pe)}cleanup(){super.cleanup(),this.#Se?.removeEventListener("change",this.#Pe)}createInputObjects(){return[...super.createInputObjects(),new Ot(this.#Se,this.element.blueprint)]}renderInput(){return $``}}class Ht extends ct{renderIcon(){return st.execPin}renderName(){let e=this.element.entity.PinName;if(this.element.entity.PinFriendlyName)e=this.element.entity.PinFriendlyName.toString();else if("execute"===e||"then"===e)return $``;return $`${re.formatStringName(e)}`}}class Bt extends ct{static singleLineInput=!1;static selectOnFocus=!0;#ke;get inputContentElements(){return this.#ke}static stringFromInputToUE(e){return e.replace(/(?=\n\s*)\n$/,"").replaceAll("\n","\\r\n")}static stringFromUEToInput(e){return e.replaceAll(/(?:\r|(?<=(?:^|[^\\])(?:\\\\)*)\\r)(?=\n)/g,"").replace(/(?<=\n\s*)$/,"\n")}#Ce=()=>this.setInputs(this.getInputs(),!0);firstUpdated(e){super.firstUpdated(e),this.#ke=[...this.element.querySelectorAll("ueb-input")],this.#ke.length&&this.#ke.forEach((e=>{e.addEventListener("focusout",this.#Ce)}))}cleanup(){super.cleanup(),this.#ke.forEach((e=>{e.removeEventListener("focusout",this.#Ce)}))}createInputObjects(){return[...super.createInputObjects(),...this.#ke.map((e=>new Ot(e,this.element.blueprint)))]}getInput(){return this.getInputs().reduce(((e,t)=>e+t),"")}getInputs(){return this.#ke.map((e=>re.clearHTMLWhitespace(e.innerHTML)))}setInputs(e=[],t=!0){this.#ke.forEach(this.constructor.singleLineInput?(t,i)=>t.innerText=e[i]:(t,i)=>t.innerText=e[i].replaceAll("\n","")),t&&this.setDefaultValue(e.map((e=>Bt.stringFromInputToUE(e))),e),this.element.addNextUpdatedCallbacks((()=>this.element.nodeElement.dispatchReflowEvent()))}setDefaultValue(e=[],t=e){this.element.setDefaultValue(e.join(""))}renderInput(){const e=this.constructor.singleLineInput,t=this.constructor.selectOnFocus;return $``}}class It extends Bt{static singleLineInput=!0;setInputs(e=[],t=!1){e&&0!=e.length||(e=[this.getInput()]);let i=[];for(const t of e){let e=parseFloat(t);isNaN(e)&&(e=0,!1),i.push(e)}super.setInputs(e,!1),this.setDefaultValue(i,e)}setDefaultValue(e=[],t){this.element.setDefaultValue(e[0])}}class Vt extends It{setDefaultValue(e=[],t=e){this.element.setDefaultValue(new ue(e[0]))}renderInput(){return $``}} +var Y,J;class Q extends g{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var e,t;const i=super.createRenderRoot();return null!==(e=(t=this.renderOptions).renderBefore)&&void 0!==e||(t.renderBefore=i.firstChild),i}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=((e,t,i)=>{var n,r;const s=null!==(n=null==i?void 0:i.renderBefore)&&void 0!==n?n:t;let o=s._$litPart$;if(void 0===o){const e=null!==(r=null==i?void 0:i.renderBefore)&&void 0!==r?r:null;s._$litPart$=o=new j(t.insertBefore(k(),e),e,void 0,null!=i?i:{})}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 H}}Q.finalized=!0,Q._$litElement$=!0,null===(Y=globalThis.litElementHydrateSupport)||void 0===Y||Y.call(globalThis,{LitElement:Q});const ee=globalThis.litElementPolyfillSupport;null==ee||ee({LitElement:Q}),(null!==(J=globalThis.litElementVersions)&&void 0!==J?J:globalThis.litElementVersions=[]).push("3.2.2");class te{static#e={"/Script/CoreUObject.LinearColor":s``,"/Script/CoreUObject.Rotator":s``,"/Script/CoreUObject.Transform":s``,"/Script/CoreUObject.Vector":s``,"/Script/Engine.Actor":s``,"/Script/Engine.GameStateBase":s``,"/Script/Engine.Pawn":s``,"/Script/Engine.PlayerState":s``,bool:s``,byte:s``,class:s``,default:s``,exec:s``,int:s``,name:s``,real:s``,string:s``,wildcard:s``};static alphaPattern="repeating-conic-gradient(#7c8184 0% 25%, #c2c3c4 0% 50%) 50% / 10px 10px";static colorDragEventName="ueb-color-drag";static colorPickEventName="ueb-color-pick";static colorWindowEventName="ueb-color-window";static deleteNodesKeyboardKey="Delete";static dragGeneralEventName="ueb-drag-general";static dragEventName="ueb-drag";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=s``;static getPinColor(e){if(!e)return te.#e.default;if(te.#e[e.pinType])return te.#e[e.pinType];if("struct"==e.entity.PinType.PinCategory||"object"==e.entity.PinType.PinCategory){if("ScriptStruct"===e.entity.PinType.PinSubCategoryObject.type)return s``;if(e.entity.PinType.PinSubCategoryObject.getName().endsWith("Actor"))return te.#e["/Script/Engine.Actor"]}return te.#e.default}static gridAxisLineColor=s``;static gridExpandThreshold=.25;static gridLineColor=s``;static gridLineWidth=1;static gridSet=8;static gridSetLineColor=s``;static gridShrinkThreshold=4;static gridSize=16;static hexColorRegex=/^\s*#(?[0-9a-fA-F]{2})(?[0-9a-fA-F]{2})(?[0-9a-fA-F]{2})([0-9a-fA-F]{2})?|#(?[0-9a-fA-F])(?[0-9a-fA-F])(?[0-9a-fA-F])\s*$/;static keysSeparator="+";static linkCurveHeight=15;static linkCurveWidth=80;static linkMinWidth=100;static linkRightSVGPath=(e,t,i)=>{let n=100-e;return`M ${e} 0 C ${t} 0, ${i} 0, 50 50 S ${n-t+e} 100, ${n} 100`};static maxZoom=7;static minZoom=-12;static mouseWheelFactor=.2;static nodeDeleteEventName="ueb-node-delete";static nodeDragGeneralEventName="ueb-node-drag-general";static nodeDragEventName="ueb-node-drag";static nodeName=(e,t)=>`${e}_${t}`;static nodeRadius=8;static nodeReflowEventName="ueb-node-reflow";static nodeType={callFunction:"/Script/BlueprintGraph.K2Node_CallFunction",doN:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:Do N",dynamicCast:"/Script/BlueprintGraph.K2Node_DynamicCast",executionSequence:"/Script/BlueprintGraph.K2Node_ExecutionSequence",forEachElementInEnum:"/Script/BlueprintGraph.K2Node_ForEachElementInEnum",forEachLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForEachLoop",forEachLoopWithBreak:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForEachLoopWithBreak",forLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForLoop",forLoopWithBreak:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForLoopWithBreak",ifThenElse:"/Script/BlueprintGraph.K2Node_IfThenElse",knot:"/Script/BlueprintGraph.K2Node_Knot",macro:"/Script/BlueprintGraph.K2Node_MacroInstance",makeArray:"/Script/BlueprintGraph.K2Node_MakeArray",makeMap:"/Script/BlueprintGraph.K2Node_MakeMap",pawn:"/Script/Engine.Pawn",reverseForEachLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ReverseForEachLoop",select:"/Script/BlueprintGraph.K2Node_Select",variableGet:"/Script/BlueprintGraph.K2Node_VariableGet",variableSet:"/Script/BlueprintGraph.K2Node_VariableSet",whileLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:WhileLoop"};static selectAllKeyboardKey="(bCtrl=True,Key=A)";static distanceThreshold=5;static trackingMouseEventName={begin:"ueb-tracking-mouse-begin",end:"ueb-tracking-mouse-end"};static windowApplyEventName="ueb-window-apply";static windowCancelEventName="ueb-window-cancel";static windowCloseEventName="ueb-window-close";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 ie{#t;get target(){return this.#t}#i;get blueprint(){return this.#i}options;constructor(e,t,i={}){i.consumeEvent??=!1,i.listenOnFocus??=!1,i.unlistenOnTextEdit??=!1,this.#t=e,this.#i=t,this.options=i;let n=this;this.listenHandler=e=>n.listenEvents(),this.unlistenHandler=e=>n.unlistenEvents(),this.options.listenOnFocus&&(this.blueprint.addEventListener(te.focusEventName.begin,this.listenHandler),this.blueprint.addEventListener(te.focusEventName.end,this.unlistenHandler)),this.options.unlistenOnTextEdit&&(this.blueprint.addEventListener(te.editTextEventName.begin,this.unlistenHandler),this.blueprint.addEventListener(te.editTextEventName.end,this.listenHandler))}unlistenDOMElement(){this.unlistenEvents(),this.blueprint.removeEventListener(te.focusEventName.begin,this.listenHandler),this.blueprint.removeEventListener(te.focusEventName.end,this.unlistenHandler),this.blueprint.removeEventListener(te.editTextEventName.begin,this.unlistenHandler),this.blueprint.removeEventListener(te.editTextEventName.end,this.listenHandler)}listenEvents(){}unlistenEvents(){}}class ne{#n;constructor(e){this.#n=e}calculate(e){return this.#n(e)}}class re{#r=new Map;subscribe(e,t){let i=this.#r;if(i.has(e)){let n=i.get(e);if(n.includes(t))return!1;n.push(t)}else{let n=!1,r=Object.getOwnPropertyDescriptor(this,e);if(!r&&(n=!0,r=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this),e)??{},!r))return!1;i.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(n?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:[n,s]},[e]:{configurable:!0,...s&&{get(){return this[a]}},set(t){this[a]=t,i.get(e).forEach((t=>{t(this[e])}))}}})}return!0}unsubscribe(e,t){let i=this.#r.get(e);if(!i?.includes(t))return!1;if(i.splice(i.indexOf(t),1),0==i.length){const t=Symbol.for(e+"Storage"),i=Symbol.for(e+"ValInfo"),n=this[i][0];this[i][1],Object.defineProperty(n?Object.getPrototypeOf(this):this,e,Object.getOwnPropertyDescriptor(n?Object.getPrototypeOf(this):this,t)),delete this[i],delete this[t]}return!0}}class se{static#s=new Map;static registerSerializer(e,t){se.#s.set(e,t)}static getSerializer(e){return se.#s.get(e)}}class oe{#o;get types(){return this.#o}constructor(...e){this.#o=e}getFirstType(){return this.#o[0]}}class ae{#a;get type(){return this.#a}set type(e){this.#a=e}#l=!0;get showDefault(){return this.#l}set showDefault(e){this.#l=e}#c;get value(){return this.#c}set value(e){this.#c=e}#u;get serialized(){return this.#u}set serialized(e){this.#u=e}#h;get ignored(){return this.#h}set ignored(e){this.#h=e}static isValueOfType(e,t){return null!=e&&(e instanceof t||e.constructor===t)}static sanitize(e,t){if(void 0===t&&(t=e?.constructor),t instanceof Array){let i=t.find((t=>ae.isValueOfType(e,t)));i||(i=t[0]),t=i}return t&&!ae.isValueOfType(e,t)&&(e=new t(e)),(e instanceof Boolean||e instanceof Number||e instanceof String)&&(e=e.valueOf()),e}constructor(e,t=!0,i,n=!1,r=!1){void 0===i&&(i=e instanceof Array?[]:n?"":()=>ae.sanitize(new e)),this.#a=e,this.#l=t,this.#c=i,this.#u=n,this.#h=r}}class le{static emptyObj={};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,i){return Math.min(Math.max(e,t),i)}static getScale(e){const t=getComputedStyle(e).getPropertyValue("--ueb-scale");return""!=t?parseFloat(t):1}static minDecimals(e,t=1){const i=e*10**t;return Math.abs(i%1)>Number.EPSILON?e.toString():e.toFixed(t)}static roundDecimals(e,t=1){const i=10**t;return Math.round(e*i)/i}static convertLocation(e,t){const i=1/le.getScale(t),n=t.getBoundingClientRect();return[Math.round((e[0]-n.x)*i),Math.round((e[1]-n.y)*i)]}static isSerialized(e,t,i=le.objectGet(e.constructor.attributes,t)){return i instanceof ne?le.isSerialized(e,t,i.calculate(e)):i instanceof ae&&(!!i.serialized||le.isSerialized(e,t,i.type))}static objectGet(e,t,i){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]]:le.objectGet(e[t[0]],t.slice(1),i):i}}static objectSet(e,t,i,n=!1,r=Object){if(!(t instanceof Array))throw new TypeError("Expected keys to be an array.");if(1==t.length){if(n||t[0]in e||void 0===e[t[0]])return e[t[0]]=i,!0}else if(t.length>0)return!n||e[t[0]]instanceof Object||(e[t[0]]=new r),le.objectSet(e[t[0]],t.slice(1),i,n,r);return!1}static equals(e,t){return(e=ae.sanitize(e))===(t=ae.sanitize(t))||(e instanceof Array&&t instanceof Array?e.length==t.length&&!e.find(((e,i)=>!le.equals(e,t[i]))):void 0)}static getType(e){return null===e?null:e instanceof ae?le.getType(e.type):e instanceof oe?e.types:e instanceof Function?e:e?.constructor}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 i=[];for(let n=0;n","\n").replaceAll(/(\)/g,"")}static capitalFirstLetter(e){return 0===e.length?e:e.charAt(0).toLocaleUpperCase()+e.slice(1).toLocaleLowerCase()}static formatStringName(e){return e.trim().replace(/^b/,"").replaceAll(/^K2(?:Node|node)?_|(?<=[a-z])(?=[A-Z])|_|\s+/g," ").split(" ").map((e=>le.capitalFirstLetter(e))).join(" ")}static getIdFromReference(e){return e.replace(/(?:.+\.)?([^\.]+)$/,"$1").replaceAll(/(?<=[a-z\d])(?=[A-Z])|(?<=[a-zA-Z])(?=\d)|(?<=[A-Z]{2})(?=[A-Z][a-z])/g,"-").toLowerCase()}static printLinearColor(e){return`${Math.round(255*e.R.valueOf())}, ${Math.round(255*e.G.valueOf())}, ${Math.round(255*e.B.valueOf())}`}static getPolarCoordinates([e,t],i=!1){let n=Math.atan2(t,e);return i&&n<0&&(n=2*Math.PI+n),[Math.sqrt(e*e+t*t),n]}static getCartesianCoordinates([e,t]){return[e*Math.cos(t),e*Math.sin(t)]}static range(e,t,i=1){return Array.from({length:Math.ceil((t-e)/i)},((t,n)=>e+n*i))}}class ce extends re{static attributes={};constructor(e={}){super();const t=(e,i,n={},r="")=>{const s=Object.getOwnPropertyNames(n);for(let o of le.mergeArrays(Object.getOwnPropertyNames(i),s)){let a=le.objectGet(n,[o]),l=i[o],c=le.getType(l);if(l instanceof ne&&(l=l.calculate(this),c=le.getType(l)),null!=l&&l===c&&(l=new c),o in i?!(s.length>0)||o in n||void 0===l||l instanceof ae&&(!l.showDefault||l.ignored)||console.warn(`${this.constructor.name} will add attribute ${r}${o} not defined in the serialized data`):console.warn(`Attribute ${r}${o} in the serialized data is not defined in ${this.constructor.name}.attributes`),c!==Object)if(void 0===a){if(l instanceof ae){if(!l.showDefault){e[o]=void 0;continue}l.serialized?l="":(c=l.type,l=l.value,l instanceof Function&&(l=l()))}l instanceof oe&&(c=l.getFirstType(),l=ae.sanitize(null,c)),l instanceof Array&&(l=[]),e[o]=ae.sanitize(l,c)}else a?.constructor===String&&l instanceof ae&&l.serialized&&l.type!==String&&(a=se.getSerializer(l.type).deserialize(a)),e[o]=ae.sanitize(a,le.getType(l));else e[o]={},t(e[o],i[o],n[o],o+".")}},i=this.constructor.attributes;e.constructor!==Object&&1===Object.getOwnPropertyNames(i).length&&(e={[Object.getOwnPropertyNames(i)[0]]:e}),t(this,i,e)}unexpectedKeys(){return Object.getOwnPropertyNames(this).length-Object.getOwnPropertyNames(this.constructor.attributes).length}}class ue extends ce{static attributes={type:String,path:String};constructor(e={}){e.constructor!==Object&&(e={path:e}),super(e),this.type,this.path}getName(){return this.path.match(/[^\.\/]+$/)[0]}}class he extends ce{static attributes={MemberParent:new ae(ue,!1),MemberName:""};constructor(e){super(e),this.MemberParent,this.MemberName}}class de extends ce{static attributes={value:String};static generateGuid(e=!0){let t=new Uint32Array(4);!0===e&&crypto.getRandomValues(t);let i="";return t.forEach((e=>{i+=("0".repeat(8)+e.toString(16).toUpperCase()).slice(-8)})),new de({value:i})}constructor(e){e||(e=de.generateGuid().value),super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class pe extends ce{static attributes={value:String};static attributeConverter={fromAttribute:(e,t)=>new pe(e),toAttribute:(e,t)=>e.toString()};constructor(e){super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class me extends ce{static attributes={value:0};constructor(e=0){super(e),this.value=Math.round(this.value)}valueOf(){return this.value}toString(){return this.value.toString()}}class ge extends ce{static lookbehind="INVTEXT";static attributes={value:String};constructor(e){super(e),this.value}}class ve extends ce{static attributes={ActionName:"",bShift:!1,bCtrl:!1,bAlt:!1,bCmd:!1,Key:pe};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),this.ActionName,this.bShift,this.bCtrl,this.bAlt,this.bCmd,this.Key}}class be extends ce{static attributes={value:0};constructor(e=0){super(e),this.value=le.clamp(this.value,0,1)}valueOf(){return this.value}toString(){return this.value.toFixed(6)}}class fe extends ce{static attributes={R:be,G:be,B:be,A:new ae(be,!0,(()=>new be(1)),!1,!0),H:new ae(be,!0,void 0,!1,!0),S:new ae(be,!0,void 0,!1,!0),V:new ae(be,!0,void 0,!1,!0)};static linearToSRGB(e){return e<=0?0:e>=1?1:e<.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055}static sRGBtoLinear(e){return e<=0?0:e>=1?1:e<.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}constructor(e){super(e),this.R,this.G,this.B,this.A,this.H,this.S,this.V,this.#d()}#d(){const e=this.R.value,t=this.G.value,i=this.B.value;if(!(Math.abs(e-t)>Number.EPSILON||Math.abs(e-i)>Number.EPSILON||Math.abs(t-i)>Number.EPSILON))return void(this.V.value=0);const n=Math.max(e,t,i),r=Math.min(e,t,i),s=n-r;let o;switch(n){case r:o=0;break;case e:o=(t-i)/s+(te.toString(16).toUpperCase().padStart(2,"0"))).join("")}toSRGBAString(){return this.toSRGBA().map((e=>e.toString(16).toUpperCase().padStart(2,"0"))).join("")}toHSVA(){return[this.H.value,this.S.value,this.V.value,this.A.value]}toNumber(){return(this.R.value<<24)+(this.G.value<<16)+(this.B.value<<8)+this.A.value}setFromRGBANumber(e){this.A.value=(255&e)/255,this.B.value=(e>>8&255)/255,this.G.value=(e>>16&255)/255,this.R.value=(e>>24&255)/255,this.#d()}setFromSRGBANumber(e){this.A.value=(255&e)/255,this.B.value=fe.sRGBtoLinear((e>>8&255)/255),this.G.value=fe.sRGBtoLinear((e>>16&255)/255),this.R.value=fe.sRGBtoLinear((e>>24&255)/255),this.#d()}toString(){return le.printLinearColor(this)}}class ye extends ce{static lookbehind="NSLOCTEXT";static attributes={namespace:String,key:String,value:String};constructor(e){super(e),this.namespace,this.key,this.value}toString(){return le.capitalFirstLetter(this.value)}}class we extends ce{static attributes={MacroGraph:ue,GraphBlueprint:ue,GraphGuid:de};constructor(e){super(e),this.MacroGraph,this.GraphBlueprint,this.GuidEntity}getMacroName(){const e=this.MacroGraph.path.search(":");return this.MacroGraph.path.substring(e+1)}}class Ee extends ce{static attributes={value:String};constructor(e){super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class Se extends ce{static attributes={objectName:Ee,pinGuid:de};constructor(e){super(e),this.objectName,this.pinGuid}}class Pe extends ce{static attributes={R:Number,P:Number,Y:Number};constructor(e){super(e),this.R,this.P,this.Y}}class ke extends Pe{}class Ce extends ce{static attributes={X:Number,Y:Number,Z:Number};constructor(e){super(e),this.X,this.Y,this.Z}}class xe extends Ce{}class Le extends ce{static#p={"/Script/CoreUObject.LinearColor":fe,"/Script/CoreUObject.Rotator":Pe,"/Script/CoreUObject.Vector":Ce,bool:Boolean,exec:String,int:me,name:String,real:Number,string:String};static#m={"/Script/CoreUObject.Vector":xe,"/Script/CoreUObject.Rotator":ke};static lookbehind="Pin";static attributes={PinId:de,PinName:"",PinFriendlyName:new ae(new oe(ye,String),!1,null),PinToolTip:new ae(String,!1,""),Direction:new ae(String,!1,""),PinType:{PinCategory:"",PinSubCategory:"",PinSubCategoryObject:ue,PinSubCategoryMemberReference:null,PinValueType:null,ContainerType:ue,bIsReference:!1,bIsConst:!1,bIsWeakPointer:!1,bIsUObjectWrapper:!1,bSerializeAsSinglePrecisionFloat:!1},LinkedTo:new ae([Se],!1),DefaultValue:new ne((e=>new ae(Le.getEntityType(e.getType(),!0)??String,!1,void 0,!0))),AutogeneratedDefaultValue:new ae(String,!1),DefaultObject:new ae(ue,!1,null),PersistentGuid:de,bHidden:!1,bNotConnectable:!1,bDefaultValueIsReadOnly:!1,bDefaultValueIsIgnored:!1,bAdvancedView:!1,bOrphanedPin:!1};static getEntityType(e,t=!1){const[i,n]=[this.#p[e],this.#m[e]];return t&&void 0!==n?n:i}constructor(e={}){super(e),this.PinId,this.PinName,this.PinFriendlyName,this.PinToolTip,this.Direction,this.PinType,this.LinkedTo,this.DefaultValue,this.AutogeneratedDefaultValue,this.DefaultObject,this.PersistentGuid,this.bHidden,this.bNotConnectable,this.bDefaultValueIsReadOnly,this.bDefaultValueIsIgnored,this.bAdvancedView,this.bOrphanedPin}getType(){return"struct"==this.PinType.PinCategory||"object"==this.PinType.PinCategory?this.PinType.PinSubCategoryObject.path:this.PinType.PinCategory}getDisplayName(){let e=null;return this.PinToolTip&&(e=this.PinToolTip.match(/\s*(.+?(?=\n)|.+\S)\s*/))?le.formatStringName(e[1]):le.formatStringName(this.PinName)}copyTypeFrom(e){this.PinType.PinCategory=e.PinType.PinCategory,this.PinType.PinSubCategory=e.PinType.PinSubCategory,this.PinType.PinSubCategoryObject=e.PinType.PinSubCategoryObject,this.PinType.PinSubCategoryMemberReference=e.PinType.PinSubCategoryMemberReference,this.PinType.PinValueType=e.PinType.PinValueType,this.PinType.ContainerType=e.PinType.ContainerType,this.PinType.bIsReference=e.PinType.bIsReference,this.PinType.bIsConst=e.PinType.bIsConst,this.PinType.bIsWeakPointer=e.PinType.bIsWeakPointer,this.PinType.bIsUObjectWrapper=e.PinType.bIsUObjectWrapper,this.PinType.bSerializeAsSinglePrecisionFloat=e.PinType.bSerializeAsSinglePrecisionFloat}getDefaultValue(){return this.DefaultValue}isExecution(){return"exec"===this.PinType.PinCategory}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 i=this.LinkedTo?.find((i=>i.objectName.toString()==e&&i.pinGuid.valueOf()==t.PinId.valueOf()));return!i&&((this.LinkedTo??(this.LinkedTo=[])).push(new Se({objectName:e,pinGuid:t.PinId})),!0)}unlinkFrom(e,t){const i=this.LinkedTo?.findIndex((i=>i.objectName.toString()==e&&i.pinGuid.valueOf()==t.PinId.valueOf()));return i>=0&&(1==this.LinkedTo.length?this.LinkedTo=void 0:this.LinkedTo.splice(i,1),!0)}getSubCategory(){return this.PinType.PinSubCategoryObject.path}}class Ne extends ce{static attributes={value:String};constructor(e){super(e),this.value}}class Ae extends ce{static attributes={MemberScope:new ae(String,!1),MemberName:String,MemberGuid:de,bSelfContext:new ae(Boolean,!1,!1)};constructor(e){super(e),this.MemberName,this.GuidEntity,this.bSelfContext}}class Te extends ce{static attributes={Class:ue,Name:"",bIsPureFunc:new ae(Boolean,!1,!1),VariableReference:new ae(Ae,!1,null),SelfContextInfo:new ae(Ne,!1,null),FunctionReference:new ae(he,!1,null),EventReference:new ae(he,!1,null),TargetType:new ae(ue,!1,null),MacroGraphReference:new ae(we,!1,null),Enum:new ae(ue,!1),NodePosX:me,NodePosY:me,AdvancedPinDisplay:new ae(pe,!1,null),EnabledState:new ae(pe,!1,null),NodeGuid:de,ErrorType:new ae(me,!1),ErrorMsg:new ae(String,!1,""),CustomProperties:[Le]};static nameRegex=/^(\w+?)(?:_(\d+))?$/;static sequencerScriptingNameRegex=/\/Script\/SequencerScripting\.MovieSceneScripting(.+)Channel/;constructor(e){super(e),this.Class,this.Name,this.bIsPureFunc,this.VariableReference,this.FunctionReference,this.EventReference,this.TargetType,this.MacroGraphReference,this.Enum,this.NodePosX,this.NodePosY,this.AdvancedPinDisplay,this.EnabledState,this.NodeGuid,this.ErrorType,this.ErrorMsg,this.CustomProperties}getClass(){return this.Class.path}getType(){let e=this.getClass();return e===te.nodeType.macro?this.MacroGraphReference.MacroGraph.path:e}getObjectName(e=!1){return e?this.getNameAndCounter()[0]:this.Name}getNameAndCounter(){const e=this.getObjectName(!1).match(Te.nameRegex);let t="",i=null;return e?(e.length>1&&(t=e[1]),e.length>2&&(i=parseInt(e[2])),[t,i]):["",0]}getDisplayName(){switch(this.getType()){case te.nodeType.callFunction:if("AddKey"===this.FunctionReference.MemberName){let e=this.FunctionReference.MemberParent.path.match(Te.sequencerScriptingNameRegex);if(e)return`Add Key (${le.formatStringName(e[1])})`}return le.formatStringName(this.FunctionReference.MemberName);case te.nodeType.dynamicCast:return`Cast To ${this.TargetType.getName()}`;case te.nodeType.executionSequence:return"Sequence";case te.nodeType.ifThenElse:return"Branch";case te.nodeType.forEachElementInEnum:return`For Each ${this.Enum.getName()}`;case te.nodeType.forEachLoopWithBreak:return"For Each Loop with Break";case te.nodeType.variableGet:return"";case te.nodeType.variableSet:return"SET";default:return this.getClass()===te.nodeType.macro?le.formatStringName(this.MacroGraphReference.getMacroName()):le.formatStringName(this.getNameAndCounter()[0])}}getCounter(){return this.getNameAndCounter()[1]}}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function $e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Me={exports:{}};"undefined"!=typeof self&&self;var Oe=$e(Me.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},i.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=0)}([function(e,t,i){function n(e){if(!(this instanceof n))return new n(e);this._=e}var r=n.prototype;function s(e,t){for(var i=0;i>7),buf:function(e){var t=o((function(e,t,i,n){return e.concat(i===n.length-1?Buffer.from([t,0]).readUInt16BE(0):n.readUInt16BE(i))}),[],e);return Buffer.from(a((function(e){return(e<<1&65535)>>8}),t))}(i.buf)}})),i}function c(){return"undefined"!=typeof Buffer}function u(){if(!c())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function h(e){u();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 i,r=t/8,s=(i=function(e){return e>48},o((function(e,t){return e||(i(t)?t:e)}),null,e));if(s)throw new Error(s+" bit range requested exceeds 48 bit (6 byte) Number max.");return new n((function(t,i){var n=r+i;return n>t.length?S(i,r.toString()+" bytes"):E(n,o((function(e,t){var i=l(t,e.buf);return{coll:e.coll.concat(i.v),buf:i.buf}}),{coll:[],buf:t.slice(i,n)},e).coll)}))}function d(e,t){return new n((function(i,n){return u(),n+t>i.length?S(n,t+" bytes for "+e):E(n+t,i.slice(n,n+t))}))}function p(e,t){if("number"!=typeof(i=t)||Math.floor(i)!==i||t<0||t>6)throw new Error(e+" requires integer length in range [0, 6].");var i}function m(e){return p("uintBE",e),d("uintBE("+e+")",e).map((function(t){return t.readUIntBE(0,e)}))}function g(e){return p("uintLE",e),d("uintLE("+e+")",e).map((function(t){return t.readUIntLE(0,e)}))}function v(e){return p("intBE",e),d("intBE("+e+")",e).map((function(t){return t.readIntBE(0,e)}))}function b(e){return p("intLE",e),d("intLE("+e+")",e).map((function(t){return t.readIntLE(0,e)}))}function f(e){return e instanceof n}function y(e){return"[object Array]"==={}.toString.call(e)}function w(e){return c()&&Buffer.isBuffer(e)}function E(e,t){return{status:!0,index:e,value:t,furthest:-1,expected:[]}}function S(e,t){return y(t)||(t=[t]),{status:!1,index:-1,value:null,furthest:e,expected:t}}function P(e,t){if(!t)return e;if(e.furthest>t.furthest)return e;var i=e.furthest===t.furthest?function(e,t){if(function(){if(void 0!==n._supportsSet)return n._supportsSet;var e="undefined"!=typeof Set;return n._supportsSet=e,e}()&&Array.from){for(var i=new Set(e),r=0;r=0;){if(o in i){n=i[o].line,0===s&&(s=i[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=n+r,l=t-s;return i[t]={line:a,lineStart:s},{offset:t,line:a+1,column:l+1}}function x(e){if(!f(e))throw new Error("not a parser: "+e)}function L(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 A(e){if("function"!=typeof e)throw new Error("not a function: "+e)}function T(e){if("string"!=typeof e)throw new Error("not a string: "+e)}var $=2,M=3,O=8,D=5*O,H=4*O,B=" ";function I(e,t){return new Array(t+1).join(e)}function V(e,t,i){var n=t-e.length;return n<=0?e:I(i,n)+e}function _(e,t,i,n){return{from:e-t>0?e-t:0,to:e+i>n?n:e+i}}function R(e,t){var i,n,r,s,l,c=t.index,u=c.offset,h=1;if(u===e.length)return"Got the end of the input";if(w(e)){var d=u-u%O,p=u-d,m=_(d,D,H+O,e.length),g=a((function(e){return a((function(e){return V(e.toString(16),2,"0")}),e)}),function(e,t){var i=e.length,n=[],r=0;if(i<=t)return[e.slice()];for(var s=0;s=4&&(i+=1),h=2,r=a((function(e){return e.length<=4?e.join(" "):e.slice(0,4).join(" ")+" "+e.slice(4).join(" ")}),g),(l=(8*(s.to>0?s.to-1:s.to)).toString(16).length)<2&&(l=2)}else{var v=e.split(/\r\n|[\n\r\u2028\u2029]/);i=c.column-1,n=c.line-1,s=_(n,$,M,v.length),r=v.slice(s.from,s.to),l=s.to.toString().length}var b=n-s.from;return w(e)&&(l=(8*(s.to>0?s.to-1:s.to)).toString(16).length)<2&&(l=2),o((function(t,n,r){var o,a=r===b,c=a?"> ":B;return o=w(e)?V((8*(s.from+r)).toString(16),l,"0"):V((s.from+r+1).toString(),l," "),[].concat(t,[c+o+" | "+n],a?[B+I(" ",l)+" | "+V("",i," ")+I("^",h)]:[])}),[],r).join("\n")}function G(e,t){return["\n","-- PARSING FAILED "+I("-",50),"\n\n",R(e,t),"\n\n",(i=t.expected,1===i.length?"Expected:\n\n"+i[0]:"Expected one of the following: \n\n"+i.join(", ")),"\n"].join("");var i}function F(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 j(){for(var e=[].slice.call(arguments),t=e.length,i=0;i=2?N(t):t=0;var i=function(e){return RegExp("^(?:"+e.source+")",F(e))}(e),r=""+e;return n((function(e,n){var s=i.exec(e.slice(n));if(s){if(0<=t&&t<=s.length){var o=s[0],a=s[t];return E(n+o.length,a)}return S(n,"valid match group (0 to "+s.length+") in "+r)}return S(n,r)}))}function Z(e){return n((function(t,i){return E(i,e)}))}function Y(e){return n((function(t,i){return S(i,e)}))}function J(e){if(f(e))return n((function(t,i){var n=e._(t,i);return n.index=i,n.value="",n}));if("string"==typeof e)return J(q(e));if(e instanceof RegExp)return J(X(e));throw new Error("not a string, regexp, or parser: "+e)}function Q(e){return x(e),n((function(t,i){var n=e._(t,i),r=t.slice(i,n.index);return n.status?S(i,'not "'+r+'"'):E(i,null)}))}function ee(e){return A(e),n((function(t,i){var n=L(t,i);return i=e.length?S(t,"any character/byte"):E(t+1,L(e,t))})),se=n((function(e,t){return E(e.length,e.slice(t))})),oe=n((function(e,t){return t=0})).desc(t)},n.optWhitespace=he,n.Parser=n,n.range=function(e,t){return ee((function(i){return e<=i&&i<=t})).desc(e+"-"+t)},n.regex=X,n.regexp=X,n.sepBy=K,n.sepBy1=W,n.seq=j,n.seqMap=z,n.seqObj=function(){for(var e,t={},i=0,r=(e=arguments,Array.prototype.slice.call(e)),s=r.length,o=0;o255)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 n((function(i,n){var r=L(i,n);return r===e?E(n+1,r):S(n,t)}))},buffer:function(e){return d("buffer",e).map((function(e){return Buffer.from(e)}))},encodedString:function(e,t){return d("string",t).map((function(t){return t.toString(e)}))},uintBE:m,uint8BE:m(1),uint16BE:m(2),uint32BE:m(4),uintLE:g,uint8LE:g(1),uint16LE:g(2),uint32LE:g(4),intBE:v,int8BE:v(1),int16BE:v(2),int32BE:v(4),intLE:b,int8LE:b(1),int16LE:b(2),int32LE:b(4),floatBE:d("floatBE",4).map((function(e){return e.readFloatBE(0)})),floatLE:d("floatLE",4).map((function(e){return e.readFloatLE(0)})),doubleBE:d("doubleBE",8).map((function(e){return e.readDoubleBE(0)})),doubleLE:d("doubleLE",8).map((function(e){return e.readDoubleLE(0)}))},e.exports=n}]));class De extends ce{static attributes={lookbehind:new ae(String,!1,"",!1,!0)};constructor(e){super(e),this.lookbehind}}let He=Oe;class Be{static getGrammarForType(e,t,i=e.AttributeAnyValue){if(t instanceof ae){let n=Be.getGrammarForType(e,t.type,i);return!t.serialized||t.type instanceof String||(n=n.wrap(He.string('"'),He.string('"'))),n}switch(le.getType(t)){case Array:return He.seqMap(He.string("("),t.map((t=>Be.getGrammarForType(e,le.getType(t)))).reduce(((t,i)=>i&&t!==e.AttributeAnyValue?t.or(i):e.AttributeAnyValue)).trim(He.optWhitespace).sepBy(He.string(",")).skip(He.regex(/,?\s*/)),He.string(")"),((e,t,i)=>t));case Boolean:return e.Boolean;case he:return e.FunctionReference;case de:return e.Guid;case pe:return e.Identifier;case me:return e.Integer;case ge:return e.InvariantText;case fe:return e.LinearColor;case ye:return e.LocalizedText;case we:return e.MacroGraphReference;case Number:return e.Number;case ue:return e.ObjectReference;case Le:return e.Pin;case Se:return e.PinReference;case be:return e.RealUnit;case Pe:return e.Rotator;case ke:return e.SimpleSerializationRotator;case xe:return e.SimpleSerializationVector;case String:return e.String;case Ne:return e.Symbol;case oe:return t.types.map((t=>Be.getGrammarForType(e,le.getType(t)))).reduce(((t,i)=>i&&t!==e.AttributeAnyValue?t.or(i):e.AttributeAnyValue));case Ae:return e.VariableReference;case Ce:return e.Vector;default:return i}}static ReferencePath=(e,t)=>He.alt(t,He.seq(He.string("/"),t.map((e=>e.toString())).sepBy1(He.string(".")).tieWith(".").sepBy1(He.string(":")).tieWith(":")).tie().atLeast(2).tie());static createAttributeGrammar=(e,t,i=He.string("=").trim(He.optWhitespace))=>e.AttributeName.skip(i).chain((i=>{const n=i.split("."),r=le.objectGet(t.attributes,n);return Be.getGrammarForType(e,r,e.AttributeAnyValue).map((e=>t=>le.objectSet(t,n,e,!0)))}));static createEntityGrammar=(e,t)=>He.seqMap(t.lookbehind?He.seq(He.string(t.lookbehind),He.optWhitespace,He.string("(")):He.string("("),Be.createAttributeGrammar(e,t).trim(He.optWhitespace).sepBy(He.string(",")).skip(He.regex(/,?/).then(He.optWhitespace)),He.string(")"),((e,t,i)=>{let n={};return t.forEach((e=>e(n))),n})).chain((e=>{let i=0,n=0;for(const r in e)i+=r in t.attributes?0:1,++n;return i+.5>Math.sqrt(n)?He.fail():He.succeed().map((()=>new t(e)))}));InlineWhitespace=e=>He.regex(/[^\S\n]+/).desc("single line whitespace");InlineOptWhitespace=e=>He.regex(/[^\S\n]*/).desc("single line optional whitespace");MultilineWhitespace=e=>He.regex(/[^\S\n]*\n\s*/).desc("whitespace with at least a newline");Null=e=>He.seq(He.string("("),e.InlineOptWhitespace,He.string(")")).map((e=>null)).desc("null: ()");Boolean=e=>He.alt(He.string("True"),He.string("true"),He.string("False"),He.string("false")).map((e=>"true"===e.toLocaleLowerCase())).desc("either True or False");HexDigit=e=>He.regex(/[0-9a-fA-f]/).desc("hexadecimal digit");Number=e=>He.regex(/[-\+]?[0-9]+(?:\.[0-9]+)?/).map(Number).desc("a number");RealNumber=e=>He.regex(/[-\+]?[0-9]+\.[0-9]+/).map(Number).desc("a number written as real");RealUnit=e=>He.regex(/\+?[0-9]+(?:\.[0-9]+)?/).map(Number).assert((e=>e>=0&&e<=1)).desc("a number between 0 and 1");NaturalNumber=e=>He.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=>He.regex(/[a-zA-Z]+/).desc("a word");String=e=>He.regex(/(?:[^"\\]|\\.)*/).wrap(He.string('"'),He.string('"')).map(le.unescapeString).desc('string (with possibility to escape the quote using ")');AttributeName=e=>e.Word.sepBy1(He.string(".")).tieWith(".").desc("dot-separated words");None=e=>He.string("None").map((e=>new ue({type:"None",path:""}))).desc("none");Integer=e=>He.regex(/[\-\+]?[0-9]+/).map((e=>new me(e))).desc("an integer");Guid=e=>e.HexDigit.times(32).tie().map((e=>new de({value:e}))).desc("32 digit hexadecimal value");Identifier=e=>He.regex(/\w+/).map((e=>new pe(e)));PathSymbol=e=>He.regex(/[0-9\w]+/).map((e=>new Ee({value:e})));PathSymbolOptSpaces=e=>He.regex(/[0-9\w]+(?: [0-9\w]+)+|[0-9\w]+/).map((e=>new Ee({value:e})));Symbol=e=>He.regex(/\w+/).map((e=>new Ne({value:e})));ObjectReference=e=>He.alt(e.None,...[Be.ReferencePath(e,e.PathSymbolOptSpaces).map((e=>new ue({type:"",path:e})))].flatMap((e=>[e.wrap(He.string('"'),He.string('"')),e.wrap(He.string("'\""),He.string("\"'"))])),He.seqMap(e.Word,He.optWhitespace,He.alt(...[Be.ReferencePath(e,e.PathSymbolOptSpaces)].flatMap((e=>[e.wrap(He.string('"'),He.string('"')),e.wrap(He.string("'\""),He.string("\"'"))]))),((e,t,i)=>new ue({type:e,path:i}))),Be.ReferencePath(e,e.PathSymbol).map((e=>new ue({type:"",path:e}))),e.Word.map((e=>new ue({type:e,path:""}))));LocalizedText=e=>He.seqMap(He.string(ye.lookbehind).skip(He.optWhitespace).skip(He.string("(")),e.String.trim(He.optWhitespace),He.string(","),e.String.trim(He.optWhitespace),He.string(","),e.String.trim(He.optWhitespace),He.string(")"),((e,t,i,n,r,s,o)=>new ye({namespace:t,key:n,value:s})));InvariantText=e=>e.String.trim(He.optWhitespace).wrap(He.string(ge.lookbehind).skip(He.optWhitespace).skip(He.string("(")),He.string(")")).map((e=>new ge({value:e})));AttributeAnyValue=e=>He.alt(e.Boolean,e.Guid,e.None,e.Null,e.Integer,e.Number,e.String,e.LocalizedText,e.InvariantText,e.Vector,e.LinearColor,e.UnknownKeys,e.ObjectReference,e.Symbol);PinReference=e=>He.seqMap(e.PathSymbol,He.whitespace,e.Guid,((e,t,i)=>new Se({objectName:e,pinGuid:i})));Vector=e=>Be.createEntityGrammar(e,Ce);Rotator=e=>Be.createEntityGrammar(e,Pe);SimpleSerializationRotator=e=>He.seqMap(e.Number,He.string(",").trim(He.optWhitespace),e.Number,He.string(",").trim(He.optWhitespace),e.Number,((e,t,i,n,r)=>new ke({R:r,P:e,Y:i})));SimpleSerializationVector=e=>He.seqMap(e.Number,He.string(",").trim(He.optWhitespace),e.Number,He.string(",").trim(He.optWhitespace),e.Number,((e,t,i,n,r)=>new xe({X:e,Y:i,Z:r})));LinearColor=e=>Be.createEntityGrammar(e,fe);FunctionReference=e=>Be.createEntityGrammar(e,he);VariableReference=e=>Be.createEntityGrammar(e,Ae);MacroGraphReference=e=>Be.createEntityGrammar(e,we);KeyBinding=e=>He.alt(e.Identifier.map((e=>new ve({Key:e}))),Be.createEntityGrammar(e,ve));Pin=e=>Be.createEntityGrammar(e,Le);CustomProperties=e=>He.string("CustomProperties").then(He.whitespace).then(e.Pin).map((e=>t=>{let i=le.objectGet(t,["CustomProperties"],[]);i.push(e),le.objectSet(t,["CustomProperties"],i,!0)}));Object=e=>He.seqMap(He.seq(He.string("Begin"),He.whitespace,He.string("Object"),He.whitespace),He.alt(e.CustomProperties,Be.createAttributeGrammar(e,Te)).sepBy1(He.whitespace),He.seq(e.MultilineWhitespace,He.string("End"),He.whitespace,He.string("Object")),((e,t,i)=>{let n={};return t.forEach((e=>e(n))),new Te(n)}));MultipleObject=e=>e.Object.sepBy1(He.whitespace).trim(He.optWhitespace);LinearColorFromHex=e=>He.string("#").then(e.HexDigit.times(2).tie().times(3,4)).trim(He.optWhitespace).map((([e,t,i,n])=>new fe({R:parseInt(e,16)/255,G:parseInt(t,16)/255,B:parseInt(i,16)/255,A:n?parseInt(n,16)/255:1})));LinearColorFromRGBList=e=>He.seqMap(e.ColorNumber,He.string(",").skip(He.optWhitespace),e.ColorNumber,He.string(",").skip(He.optWhitespace),e.ColorNumber.map(Number),((e,t,i,n,r)=>new fe({R:e/255,G:i/255,B:r/255,A:1})));LinearColorFromRGB=e=>He.string("rgb").then(e.LinearColorFromRGBList.wrap(He.regex(/\(\s*/),He.regex(/\s*\)/)));LinearColorFromRGBA=e=>He.string("rgba").then(He.seqMap(e.ColorNumber,He.string(",").skip(He.optWhitespace),e.ColorNumber,He.string(",").skip(He.optWhitespace),e.ColorNumber.map(Number),He.string(",").skip(He.optWhitespace),He.regex(/0?\.\d+|[01]/).map(Number),((e,t,i,n,r,s,o)=>new fe({R:e/255,G:i/255,B:r/255,A:o}))).wrap(He.regex(/\(\s*/),He.regex(/\s*\)/)));LinearColorFromAnyColor=e=>He.alt(e.LinearColorFromRGBList,e.LinearColorFromHex,e.LinearColorFromRGB,e.LinearColorFromRGBA);UnknownKeys=e=>He.seqMap(He.regex(/\w*\s*/).skip(He.string("(")),He.seqMap(e.AttributeName,He.string("=").trim(He.optWhitespace),e.AttributeAnyValue,((e,t,i)=>t=>le.objectSet(t,e.split("."),i,!0))).trim(He.optWhitespace).sepBy(He.string(",")).skip(He.regex(/,?/).then(He.optWhitespace)),He.string(")"),((e,t,i)=>{let n={};t.forEach((e=>e(n)));let r=new De(n);return e&&(r.lookbehind=e),r}))}class Ie{static grammar=Oe.createLanguage(new Be);constructor(e,t="",i=",",n=!1,r="=",s=(e=>e.join("."))){this.entityType=e,this.attributePrefix=t,this.attributeSeparator=i,this.trailingSeparator=n,this.attributeValueConjunctionSign=r,this.attributeKeyPrinter=s}deserialize(e){return this.read(e)}serialize(e,t=!1,i=e){return this.write(i,e,t)}read(e){throw new Error("Not implemented")}write(e,t,i){throw new Error("Not implemented")}writeValue(e,t,i,n){const r=le.getType(t),s=se.getSerializer(r);if(!s)throw new Error(`Unknown value type "${r.name}", a serializer must be registered in the SerializerFactory class, check initializeSerializerFactory.js`);return s.write(e,t,n)}subWrite(e,t,i,n){let r="",s=t.concat("");const o=s.length-1;for(const t of Object.getOwnPropertyNames(i)){s[o]=t;const a=i[t];if(a?.constructor===Object)r+=(r.length?this.attributeSeparator:"")+this.subWrite(e,s,a,n);else if(void 0!==a&&this.showProperty(e,i,s,a)){const t=le.isSerialized(e,s);r+=(r.length?this.attributeSeparator:"")+this.attributePrefix+this.attributeKeyPrinter(s)+this.attributeValueConjunctionSign+(t?`"${this.writeValue(e,a,s,!0)}"`:this.writeValue(e,a,s,n))}}return this.trailingSeparator&&r.length&&1===s.length&&(r+=this.attributeSeparator),r}showProperty(e,t,i,n){const r=this.entityType.attributes,s=le.objectGet(r,i);return!(s instanceof ae)||!s.ignored&&(!le.equals(s.value,n)||s.showDefault)}}class Ve extends Ie{constructor(){super(Te," ","\n",!1)}showProperty(e,t,i,n){switch(i.toString()){case"Class":case"Name":case"CustomProperties":return!1}return super.showProperty(e,t,i,n)}read(e){const t=Ie.grammar.Object.parse(e);if(!t.status)throw new Error("Error when trying to parse the object.");return t.value}readMultiple(e){const t=Ie.grammar.MultipleObject.parse(e);if(!t.status)throw new Error("Error when trying to parse the object.");return t.value}write(e,t,i){return`Begin Object Class=${t.Class.path} Name=${this.writeValue(e,t.Name,["Name"],i)}\n${this.subWrite(e,[],t,i)+t.CustomProperties.map((e=>this.attributeSeparator+this.attributePrefix+"CustomProperties "+se.getSerializer(Le).serialize(e))).join("")}\nEnd Object\n`}}class _e extends ie{static#g=new Ve;#v;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let n=this;this.#v=e=>n.copied()}listenEvents(){document.body.addEventListener("copy",this.#v)}unlistenEvents(){document.body.removeEventListener("copy",this.#v)}copied(){const e=this.blueprint.getNodes(!0).map((e=>_e.#g.serialize(e.entity,!1))).join("\n\n");navigator.clipboard.writeText(e)}}class Re{static styles=s``;element;#b=[];get inputObjects(){return this.#b}constructed(e){this.element=e}createInputObjects(){return[]}connectedCallback(){}willUpdate(e){}update(e){}render(){return D``}firstUpdated(e){}updated(e){}inputSetup(){this.#b=this.createInputObjects()}cleanup(){this.#b.forEach((e=>e.unlistenDOMElement()))}}class Ge extends ie{#f;constructor(e,t,i={}){i.activateAnyKey??=!1,i.activationKeys??=[],i.consumeEvent??=!0,i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,i.activationKeys instanceof Array||(i.activationKeys=[i.activationKeys]),i.activationKeys=i.activationKeys.map((e=>{if(e instanceof ve)return e;if(e.constructor===String){const t=Ie.grammar.KeyBinding.parse(e);if(t.status)return t.value}throw new Error("Unexpected key value")})),super(e,t,i),this.#f=this.options.activationKeys??[];let n=this;this.keyDownHandler=e=>{(this.options.activateAnyKey||n.#f.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&&te.Keys[t.Key]==e.code)))&&(i.consumeEvent&&(e.preventDefault(),e.stopImmediatePropagation()),n.fire(),document.removeEventListener("keydown",n.keyDownHandler),document.addEventListener("keyup",n.keyUpHandler))},this.keyUpHandler=e=>{(this.options.activateAnyKey||n.#f.some((t=>t.bShift&&"Shift"==e.key||t.bCtrl&&"Control"==e.key||t.bAlt&&"Alt"==e.key||t.bCmd&&"Meta"==e.key||te.Keys[t.Key]==e.code)))&&(i.consumeEvent&&e.stopImmediatePropagation(),n.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 Fe extends Ge{constructor(e,t,i={}){i.activationKeys=te.deleteNodesKeyboardKey,super(e,t,i)}fire(){this.blueprint.removeGraphElement(...this.blueprint.getNodes(!0))}}class je extends ie{constructor(e,t,i={}){i.ignoreTranslateCompensate??=!1,i.movementSpace??=t.getGridDOMElement()??document.documentElement,super(e,t,i),this.movementSpace=i.movementSpace}locationFromEvent(e){const t=le.convertLocation([e.clientX,e.clientY],this.movementSpace);return this.options.ignoreTranslateCompensate?t:this.blueprint.compensateTranslation(t)}}class ze extends je{#y=e=>{e.preventDefault();const t=this.locationFromEvent(e);this.wheel(Math.sign(e.deltaY*te.mouseWheelFactor),t)};#w=e=>e.preventDefault();constructor(e,t,i={}){i.listenOnFocus=!0,i.strictTarget??=!1,super(e,t,i),this.strictTarget=i.strictTarget}listenEvents(){this.movementSpace.addEventListener("wheel",this.#y,!1),this.movementSpace.parentElement?.addEventListener("wheel",this.#w)}unlistenEvents(){this.movementSpace.removeEventListener("wheel",this.#y,!1),this.movementSpace.parentElement?.removeEventListener("wheel",this.#w)}wheel(e,t){}}class Ue extends ze{#E=!1;get enableZoonIn(){return this.#E}set enableZoonIn(e){(e=Boolean(e))!=this.#E&&(this.#E=e)}wheel(e,t){let i=this.blueprint.getZoom();e=-e,!this.enableZoonIn&&0==i&&e>0||(i+=e,this.blueprint.setZoom(i,t))}}class Ke extends Ge{#S;constructor(e,t,i={}){i.activationKeys=te.enableZoomIn,super(e,t,i)}fire(){this.#S=this.blueprint.getInputObject(Ue),this.#S.enableZoonIn=!0}unfire(){this.#S.enableZoonIn=!1}}class We extends Ge{constructor(e,t,i={}){i.activationKeys=te.selectAllKeyboardKey,super(e,t,i)}fire(){this.blueprint.selectAll()}}class qe extends Q{static properties={};#P=[];#i;get blueprint(){return this.#i}set blueprint(e){this.#i=e}#k;get entity(){return this.#k}set entity(e){this.#k=e}#C;get template(){return this.#C}inputObjects=[];constructor(e,t){super(),this.#k=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()}willUpdate(e){super.willUpdate(e),this.template.willUpdate(e)}update(e){super.update(e),this.template.update(e)}render(){return this.template.render()}firstUpdated(e){super.firstUpdated(e),this.template.firstUpdated(e),this.template.inputSetup()}updated(e){super.updated(e),this.template.updated(e),this.#P.forEach((t=>t(e))),this.#P=[]}disconnectedCallback(){super.disconnectedCallback(),this.template.cleanup()}addNextUpdatedCallbacks(e,t=!1){this.#P.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 Xe extends qe{static properties={...super.properties,locationX:{type:Number,attribute:!1},locationY:{type:Number,attribute:!1}};static dragEventName=te.dragEventName;static dragGeneralEventName=te.dragGeneralEventName;constructor(e,t){super(e,t),this.locationX=0,this.locationY=0}setLocation([e,t]){const i=[e-this.locationX,t-this.locationY];if(this.locationX=e,this.locationY=t,this.blueprint){const e=new CustomEvent(this.constructor.dragEventName,{detail:{value:i},bubbles:!1,cancelable:!0});this.dispatchEvent(e)}}addLocation([e,t]){this.setLocation([this.locationX+e,this.locationY+t])}dispatchDragEvent(e){const t=new CustomEvent(this.constructor.dragGeneralEventName,{detail:{value:e},bubbles:!0,cancelable:!0});this.dispatchEvent(t)}snapToGrid(){const e=le.snapToGrid([this.locationX,this.locationY],te.gridSize);this.locationX==e[0]&&this.locationY==e[1]||this.setLocation(e)}}class Ze extends je{#x=e=>{if(this.blueprint.setFocused(!0),e.button===this.options.clickButton)this.options.strictTarget&&e.target!=e.currentTarget||(this.options.consumeEvent&&e.stopImmediatePropagation(),this.#L.addEventListener("mousemove",this.#N),document.addEventListener("mouseup",this.#A),this.clickedPosition=this.locationFromEvent(e),this.blueprint.mousePosition[0]=this.clickedPosition[0],this.blueprint.mousePosition[1]=this.clickedPosition[1],this.target instanceof Xe&&(this.clickedOffset=[this.clickedPosition[0]-this.target.locationX,this.clickedPosition[1]-this.target.locationY]),this.clicked(this.clickedPosition));else this.options.exitAnyButton||this.#A(e)};#N=e=>{this.options.consumeEvent&&e.stopImmediatePropagation(),this.#L.removeEventListener("mousemove",this.#N),this.#L.addEventListener("mousemove",this.#T);const t=this.getEvent(te.trackingMouseEventName.begin);this.#$=0==this.target.dispatchEvent(t);const i=this.locationFromEvent(e);this.mouseLocation=le.snapToGrid(this.clickedPosition,this.stepSize),this.startDrag(i),this.started=!0};#T=e=>{this.options.consumeEvent&&e.stopImmediatePropagation();const t=this.locationFromEvent(e),i=[e.movementX,e.movementY];this.dragTo(t,i),this.#$&&(this.blueprint.mousePosition=this.locationFromEvent(e))};#A=e=>{if(!this.options.exitAnyButton||e.button==this.options.clickButton){if(this.options.consumeEvent&&e.stopImmediatePropagation(),this.#L.removeEventListener("mousemove",this.#N),this.#L.removeEventListener("mousemove",this.#T),document.removeEventListener("mouseup",this.#A),this.started&&this.endDrag(),this.unclicked(),this.#$){const e=this.getEvent(te.trackingMouseEventName.end);this.target.dispatchEvent(e),this.#$=!1}this.started=!1}};#$=!1;#L;#M;clickedOffset=[0,0];clickedPosition=[0,0];mouseLocation=[0,0];started=!1;stepSize=1;constructor(e,t,i={}){i.clickButton??=0,i.consumeEvent??=!0,i.draggableElement??=e,i.exitAnyButton??=!0,i.moveEverywhere??=!1,i.movementSpace??=t?.getGridDOMElement(),i.repositionOnClick??=!1,i.strictTarget??=!1,super(e,t,i),this.stepSize=parseInt(i?.stepSize??te.gridSize),this.#L=this.options.moveEverywhere?document.documentElement:this.movementSpace,this.#M=this.options.draggableElement,this.listenEvents()}listenEvents(){this.#M.addEventListener("mousedown",this.#x),2==this.options.clickButton&&this.#M.addEventListener("contextmenu",(e=>e.preventDefault()))}unlistenEvents(){this.#M.removeEventListener("mousedown",this.#x)}getEvent(e){return new CustomEvent(e,{detail:{tracker:this},bubbles:!0,cancelable:!0})}clicked(e){}startDrag(e){}dragTo(e,t){}endDrag(){}unclicked(e){}}class Ye extends Ze{startDrag(){this.blueprint.scrolling=!0}dragTo(e,t){this.blueprint.scrollDelta([-t[0],-t[1]])}endDrag(){this.blueprint.scrolling=!1}}class Je extends je{#O=null;#D;#H;#B;constructor(e,t,i={}){i.listenOnFocus=!0,super(e,t,i);let n=this;this.#D=e=>{e.preventDefault(),n.blueprint.mousePosition=n.locationFromEvent(e)},this.#H=e=>{n.#O||(e.preventDefault(),this.#O=e.detail.tracker,n.unlistenMouseMove())},this.#B=e=>{n.#O==e.detail.tracker&&(e.preventDefault(),n.#O=null,n.listenMouseMove())}}listenMouseMove(){this.target.addEventListener("mousemove",this.#D)}unlistenMouseMove(){this.target.removeEventListener("mousemove",this.#D)}listenEvents(){this.listenMouseMove(),this.blueprint.addEventListener(te.trackingMouseEventName.begin,this.#H),this.blueprint.addEventListener(te.trackingMouseEventName.end,this.#B)}unlistenEvents(){this.unlistenMouseMove(),this.blueprint.removeEventListener(te.trackingMouseEventName.begin,this.#H),this.blueprint.removeEventListener(te.trackingMouseEventName.end,this.#B)}}class Qe{static#I=new Map;static registerElement(e,t){Qe.#I.set(e,t)}static getConstructor(e){return Qe.#I.get(e)}}class et extends ie{static#g=new Ve;#V;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let n=this;this.#V=e=>n.pasted(e.clipboardData.getData("Text"))}listenEvents(){document.body.addEventListener("paste",this.#V)}unlistenEvents(){document.body.removeEventListener("paste",this.#V)}pasted(e){let t=0,i=0,n=0,r=et.#g.readMultiple(e).map((e=>{let r=new(Qe.getConstructor("ueb-node"))(e);return t+=r.locationY,i+=r.locationX,++n,r}));t/=n,i/=n,r.length>0&&this.blueprint.unselectAll();let s=this.blueprint.mousePosition;return r.forEach((e=>{const n=[s[0]-i,s[1]-t];e.addLocation(n),e.snapToGrid(),e.setSelected(!0)})),this.blueprint.addGraphElement(...r),!0}}class tt extends Ze{constructor(e,t,i){super(e,t,i),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 it extends ie{#_;constructor(e,t,i={}){i.listenOnFocus=!0,super(e,t,i);let n=this;this.#_=e=>n.clickedSomewhere(e.target),this.blueprint.focus&&document.addEventListener("click",this.#_)}clickedSomewhere(e){e.closest("ueb-blueprint")||this.blueprint.setFocused(!1)}listenEvents(){document.addEventListener("click",this.#_)}unlistenEvents(){document.removeEventListener("click",this.#_)}}class nt extends Re{static styleVariables={"--ueb-font-size":`${te.fontSize}`,"--ueb-grid-axis-line-color":`${te.gridAxisLineColor}`,"--ueb-grid-expand":`${te.expandGridSize}px`,"--ueb-grid-line-color":`${te.gridLineColor}`,"--ueb-grid-line-width":`${te.gridLineWidth}px`,"--ueb-grid-set-line-color":`${te.gridSetLineColor}`,"--ueb-grid-set":`${te.gridSet}`,"--ueb-grid-size":`${te.gridSize}px`,"--ueb-link-min-width":`${te.linkMinWidth}`,"--ueb-node-radius":`${te.nodeRadius}px`};constructed(e){super.constructed(e),this.element.style.cssText=Object.entries(nt.styleVariables).map((([e,t])=>`${e}:${t};`)).join("")}createInputObjects(){return[...super.createInputObjects(),new _e(this.element.getGridDOMElement(),this.element),new et(this.element.getGridDOMElement(),this.element),new Fe(this.element.getGridDOMElement(),this.element),new We(this.element.getGridDOMElement(),this.element),new Ue(this.element.getGridDOMElement(),this.element),new tt(this.element.getGridDOMElement(),this.element,{clickButton:0,exitAnyButton:!0,moveEverywhere:!0}),new Ye(this.element.getGridDOMElement(),this.element,{clickButton:2,exitAnyButton:!1,moveEverywhere:!0}),new it(this.element.getGridDOMElement(),this.element),new Je(this.element.getGridDOMElement(),this.element),new Ke(this.element.getGridDOMElement(),this.element)]}render(){return D`${0==this.element.zoom?"1:1":this.element.zoom}`}firstUpdated(e){super.firstUpdated(e),this.element.headerElement=this.element.querySelector(".ueb-viewport-header"),this.element.overlayElement=this.element.querySelector(".ueb-viewport-overlay"),this.element.viewportElement=this.element.querySelector(".ueb-viewport-body"),this.element.selectorElement=this.element.querySelector("ueb-selector"),this.element.gridElement=this.element.viewportElement.querySelector(".ueb-grid"),this.element.linksContainerElement=this.element.querySelector("[data-links]"),this.element.linksContainerElement.append(...this.element.getLinks()),this.element.nodesContainerElement=this.element.querySelector("[data-nodes]"),this.element.nodesContainerElement.append(...this.element.getNodes()),this.element.viewportElement.scroll(te.expandGridSize,te.expandGridSize)}updated(e){if(super.updated(e),(e.has("scrollX")||e.has("scrollY"))&&this.element.viewportElement.scroll(this.element.scrollX,this.element.scrollY),e.has("zoom")){const t=e.get("zoom"),i=Math.min(t,this.element.zoom),n=Math.max(t,this.element.zoom),r=le.range(i,n),s=e=>`ueb-zoom-${e}`;te<0)).map(s)),this.element.classList.add(...r.filter((e=>e>0)).map(s))):(this.element.classList.remove(...r.filter((e=>e>0)).map(s)),this.element.classList.add(...r.filter((e=>e<0)).map(s)))}}getPin(e){return this.element.querySelector(`ueb-node[data-name="${e.objectName}"] ueb-pin[data-id="${e.pinGuid}"]`)}}class rt extends qe{static properties={...super.properties,fromX:{type:Number,attribute:!1},fromY:{type:Number,attribute:!1},toX:{type:Number,attribute:!1},toY:{type:Number,attribute:!1}};constructor(...e){super(...e),this.fromX=0,this.fromY=0,this.toX=0,this.toY=0}setBothLocations([e,t]){this.fromX=e,this.fromY=t,this.toX=e,this.toY=t}addSourceLocation([e,t]){this.fromX+=e,this.fromY+=t}addDestinationLocation([e,t]){this.toX+=e,this.toY+=t}}class st extends Re{update(e){super.update(e);const[t,i,n,r]=[Math.round(this.element.fromX),Math.round(this.element.fromY),Math.round(this.element.toX),Math.round(this.element.toY)],[s,o,a,l]=[Math.min(t,n),Math.min(i,r),Math.abs(t-n),Math.abs(i-r)];(e.has("fromX")||e.has("toX"))&&(this.element.style.left=`${s}px`,this.element.style.width=`${a}px`),(e.has("fromY")||e.has("toY"))&&(this.element.style.top=`${o}px`,this.element.style.height=`${l}px`)}}class ot extends Te{constructor(e={},t){super(e),this.Class=new ue("/Script/BlueprintGraph.K2Node_Knot"),this.Name="K2Node_Knot";const i=new Le({PinName:"InputPin"}),n=new Le({PinName:"OutputPin",Direction:"EGPD_Output"});t&&(i.copyTypeFrom(t),n.copyTypeFrom(t)),this.CustomProperties=[i,n]}}class at extends je{static ignoreDbClick=e=>{};#R=e=>{this.options.strictTarget&&e.target!==e.currentTarget||(this.options.consumeEvent&&e.stopImmediatePropagation(),this.clickedPosition=this.locationFromEvent(e),this.blueprint.mousePosition[0]=this.clickedPosition[0],this.blueprint.mousePosition[1]=this.clickedPosition[1],this.dbclicked(this.clickedPosition))};#G;get onDbClick(){return this.#G}set onDbClick(e){this.#G=e}clickedPosition=[0,0];constructor(e,t,i={},n=at.ignoreDbClick){i.consumeEvent??=!0,i.strictTarget??=!1,super(e,t,i),this.#G=n,this.listenEvents()}listenEvents(){this.target.addEventListener("dblclick",this.#R)}unlistenEvents(){this.target.removeEventListener("dblclick",this.#R)}dbclicked(e){this.onDbClick(e)}}class lt extends st{static decreasingValue(e,t){const i=-e*t[0]**2,n=t[1]-i/t[0];return e=>i/e+n}static clampedLine(e,t){if(e[0]>t[0]){const i=e;e=t,t=i}const i=(t[1]-e[1])/(t[0]-e[0]),n=e[1]-i*e[0];return r=>rt[0]?t[1]:i*r+n}static c1DecreasingValue=lt.decreasingValue(-.15,[100,15]);static c2DecreasingValue=lt.decreasingValue(-.06,[500,130]);static c2Clamped=lt.clampedLine([0,100],[200,30]);#F=e=>{const t=new ot({},this.element.sourcePin.entity),i=new(Qe.getConstructor("ueb-node"))(t);i.setLocation(this.element.blueprint.snapToGrid(e)),this.element.blueprint.addGraphElement(i);const n=new(Qe.getConstructor("ueb-link"))(i.template.outputPin,this.element.destinationPin);this.element.destinationPin=i.template.inputPin,this.element.blueprint.addGraphElement(n)};createInputObjects(){return[...super.createInputObjects(),new at(this.element.querySelector(".ueb-link-area"),this.element.blueprint,void 0,(e=>this.#F(e)))]}willUpdate(e){super.willUpdate(e);const t=this.element.sourcePin,i=this.element.destinationPin;if(e.has("fromX")||e.has("toX")){const e=t?.nodeElement.getType()==te.nodeType.knot,n=i?.nodeElement.getType()==te.nodeType.knot;!e||i&&!n||(t?.isInput()&&this.element.toX>this.element.fromX+te.distanceThreshold?this.element.sourcePin=t.nodeElement.template.outputPin:t?.isOutput()&&this.element.toXthis.element.fromX-te.distanceThreshold&&(this.element.destinationPin=i.nodeElement.template.inputPin))}const n=Math.max(Math.abs(this.element.fromX-this.element.toX),1);Math.max(Math.abs(this.element.fromY-this.element.toY),1);const r=Math.max(n,te.linkMinWidth),s=n/r,o=this.element.originatesFromInput?this.element.fromXthis.element.toY?1:0)),this.element.style.setProperty("--ueb-start-percentage",`${Math.round(this.element.startPercentage)}%`),this.element.style.setProperty("--ueb-link-start",`${Math.round(this.element.startPixels)}`)}render(){const e=`ueb-id-${Math.floor(1e12*Math.random())}`;return D` ${this.element.linkMessageIcon||this.element.linkMessageText?D`${this.element.linkMessageIcon!==B?D`${this.element.linkMessageIcon}`:B} ${this.element.linkMessageText!==B?D`${this.element.linkMessageText}`:B}`:B}`}}class ct{static branchNode=D``;static breakStruct=D``;static cast=D``;static close=D``;static correct=D``;static doN=D``;static execPin=D``;static expandIcon=D``;static forEachLoop=D``;static functionSymbol=D``;static genericPin=D``;static loop=D``;static macro=D``;static makeArray=D``;static makeMap=D``;static makeStruct=D``;static referencePin=D``;static reject=D``;static select=D``;static sequence=D``}class ut extends rt{static properties={...super.properties,source:{type:String,reflect:!0},destination:{type:String,reflect:!0},dragging:{type:Boolean,attribute:"data-dragging",converter:le.booleanConverter,reflect:!0},originatesFromInput:{type:Boolean,attribute:!1},svgPathD:{type:String,attribute:!1},linkMessageIcon:{type:String,attribute:!1},linkMessageText:{type:String,attribute:!1}};#j;get sourcePin(){return this.#j}set sourcePin(e){this.#z(e,!1)}#U;get destinationPin(){return this.#U}set destinationPin(e){this.#z(e,!0)}#K;#W;#q;#X;#Z;linkMessageIcon=B;linkMessageText=B;pathElement;constructor(e,t){super({},new lt);const i=this;this.#K=()=>i.remove(),this.#W=e=>i.addSourceLocation(e.detail.value),this.#q=e=>i.addDestinationLocation(e.detail.value),this.#X=e=>i.setSourceLocation(),this.#Z=e=>i.setDestinationLocation(),this.source=null,this.destination=null,this.dragging=!1,this.originatesFromInput=!1,this.startPercentage=0,this.svgPathD="",this.startPixels=0,e&&(this.sourcePin=e,t||(this.toX=this.fromX,this.toY=this.fromY)),t&&(this.destinationPin=t,e||(this.fromX=this.toX,this.fromY=this.toY)),this.#Y()}#z(e,t){const i=()=>t?this.destinationPin:this.sourcePin;if(i()!=e){if(i()){const e=i().getNodeElement();e.removeEventListener(te.nodeDeleteEventName,this.#K),e.removeEventListener(te.nodeDragEventName,t?this.#q:this.#W),e.removeEventListener(te.nodeReflowEventName,t?this.#Z:this.#X),this.#J()}if(t?this.#U=e:this.#j=e,i()){const e=i().getNodeElement();e.addEventListener(te.nodeDeleteEventName,this.#K),e.addEventListener(te.nodeDragEventName,t?this.#q:this.#W),e.addEventListener(te.nodeReflowEventName,t?this.#Z:this.#X),t?this.setDestinationLocation():(this.setSourceLocation(),this.originatesFromInput=this.sourcePin.isInput()),this.#Y()}}}#Y(){this.sourcePin&&this.destinationPin&&(this.sourcePin.linkTo(this.destinationPin),this.destinationPin.linkTo(this.sourcePin))}#J(){this.sourcePin&&this.destinationPin&&(this.sourcePin.unlinkFrom(this.destinationPin),this.destinationPin.unlinkFrom(this.sourcePin))}disconnectedCallback(){super.disconnectedCallback(),this.#J(),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()}const[t,i]=e;this.fromX=t,this.fromY=i}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.toX=e[0],this.toY=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=ct.correct,this.linkMessageText=B}setMessageReplace(){this.linkMessageIcon=ct.correct,this.linkMessageText=B}setMessageDirectionsIncompatible(){this.linkMessageIcon=ct.reject,this.linkMessageText=D`Directions are not compatbile.`}setMessagePlaceNode(){this.linkMessageIcon="ueb-icon-place-node",this.linkMessageText=D`Place a new node.`}setMessageReplaceLink(){this.linkMessageIcon=ct.correct,this.linkMessageText=D`Replace existing input connections.`}setMessageSameNode(){this.linkMessageIcon=ct.reject,this.linkMessageText=D`Both are on the same node.`}setMEssagetypesIncompatible(){this.linkMessageIcon=ct.reject,this.linkMessageText=D`${this.sourcePin.pinType} is not compatible with ${this.destinationPin.pinType}.`}}class ht extends Xe{static properties={...super.properties,selected:{type:Boolean,attribute:"data-selected",reflect:!0,converter:le.booleanConverter}};constructor(...e){super(...e),this.selected=!1,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(te.nodeDragGeneralEventName,this.dragHandler)}setSelected(e=!0){this.selected=e,this.blueprint&&(this.selected?(this.listeningDrag=!0,this.blueprint.addEventListener(te.nodeDragGeneralEventName,this.dragHandler)):(this.blueprint.removeEventListener(te.nodeDragGeneralEventName,this.dragHandler),this.listeningDrag=!1))}}class dt extends Ze{#Q;#ee=null;#te=e=>{if(!this.enteredPin){this.linkValid=!1,this.enteredPin=e.target;const t=this.link.sourcePin??this.target,i=this.enteredPin;t.nodeElement.getType()==te.nodeType.knot||i.nodeElement.getType()==te.nodeType.knot?(this.link.setMessageCorrect(),this.linkValid=!0):t.getNodeElement()==i.getNodeElement()?this.link.setMessageSameNode():t.isOutput()==i.isOutput()||t.isOutput()==i.isOutput()?this.link.setMessageDirectionsIncompatible():this.blueprint.getLinks([t,i]).length?(this.link.setMessageReplaceLink(),this.linkValid=!0):(this.link.setMessageCorrect(),this.linkValid=!0)}};#ie=e=>{this.enteredPin==e.target&&(this.enteredPin=null,this.linkValid=!1,this.link?.setMessagePlaceNode())};link;enteredPin;linkValid=!1;startDrag(e){this.target.nodeElement.getType()==te.nodeType.knot&&(this.#ee=this.target),this.link=new(Qe.getConstructor("ueb-link"))(this.target,null),this.blueprint.linksContainerElement.prepend(this.link),this.link.setMessagePlaceNode(),this.#Q=this.blueprint.querySelectorAll("ueb-pin"),this.#Q.forEach((e=>{if(e!=this.target){const t=e.template.getClickableElement();t.addEventListener("mouseenter",this.#te),t.addEventListener("mouseleave",this.#ie)}})),this.link.startDragging(),this.link.setDestinationLocation(e)}dragTo(e,t){this.link.setDestinationLocation(e)}endDrag(){if(this.#Q.forEach((e=>{e.removeEventListener("mouseenter",this.#te),e.removeEventListener("mouseleave",this.#ie)})),this.enteredPin&&this.linkValid){if(this.#ee){const e=this.#ee!==this.link.sourcePin?this.link.sourcePin:this.enteredPin;if(this.#ee.isInput()&&e.isInput()||this.#ee.isOutput()&&e.isOutput()){const e=this.#ee.isInput()?this.#ee.nodeElement.template.outputPin:this.#ee.nodeElement.template.inputPin;this.#ee===this.link.sourcePin?this.link.sourcePin=e:this.enteredPin=e}}this.blueprint.addGraphElement(this.link),this.link.destinationPin=this.enteredPin,this.link.removeMessage(),this.link.finishDragging()}else this.link.finishDragging(),this.link.remove();this.enteredPin=null,this.link=null,this.#Q=null}}class pt extends Re{#ne;get iconElement(){return this.#ne}connectedCallback(){super.connectedCallback(),this.element.nodeElement=this.element.closest("ueb-node")}createInputObjects(){return[new dt(this.getClickableElement(),this.element.blueprint,{moveEverywhere:!0})]}render(){const e=D`${this.renderIcon()}`,t=D`${this.renderName()} ${this.element.isInput()&&!this.element.entity.bDefaultValueIsIgnored?this.renderInput():D``}`;return D`${this.element.isInput()?D`${e}${t}`:D`${t}${e}`}`}renderIcon(){return ct.genericPin}renderName(){return D`${this.element.getPinDisplayName()}`}renderInput(){return D``}updated(e){if(this.element.isInput()&&e.has("isLinked")){const e=this.element.nodeElement;e.addNextUpdatedCallbacks((()=>e.dispatchReflowEvent())),e.requestUpdate()}}firstUpdated(e){super.firstUpdated(e),this.element.style.setProperty("--ueb-pin-color-rgb",te.getPinColor(this.element).cssText),this.#ne=this.element.querySelector(".ueb-pin-icon")??this.element}getLinkLocation(){const e=this.iconElement.getBoundingClientRect(),t=le.convertLocation([(e.left+e.right)/2,(e.top+e.bottom)/2],this.element.blueprint.gridElement);return this.element.blueprint.compensateTranslation(t)}getClickableElement(){return this.element}}class mt extends pt{render(){return this.element.isOutput()?D`${this.renderIcon()}`:D``}getLinkLocation(){const e=(this.element.isInput()?this.element.nodeElement.template.outputPin.template:this).iconElement.getBoundingClientRect(),t=le.convertLocation([this.element.isInput()?e.left+1:e.right+2,(e.top+e.bottom)/2],this.element.blueprint.gridElement);return this.element.blueprint.compensateTranslation(t)}}class gt extends Ze{clicked(e){this.options.repositionOnClick&&(this.target.setLocation(this.stepSize>1?le.snapToGrid(e,this.stepSize):e),this.clickedOffset=[0,0])}dragTo(e,t){const i=[this.target.locationX,this.target.locationY],[n,r]=this.stepSize>1?[le.snapToGrid(e,this.stepSize),le.snapToGrid(i,this.stepSize)]:[e,i];0==(t=[n[0]-this.mouseLocation[0],n[1]-this.mouseLocation[1]])[0]&&0==t[1]||(t[0]+=r[0]-this.target.locationX,t[1]+=r[1]-this.target.locationY,this.dragAction(n,t),this.mouseLocation=n)}dragAction(e,t){this.target.setLocation([e[0]-this.clickedOffset[0],e[1]-this.clickedOffset[1]])}}class vt extends Re{getDraggableElement(){return this.element}createDraggableObject(){return new gt(this.element,this.element.blueprint,{draggableElement:this.getDraggableElement()})}createInputObjects(){return[...super.createInputObjects(),this.createDraggableObject()]}}class bt extends vt{update(e){super.update(e),e.has("locationX")&&(this.element.style.left=`${this.element.locationX}px`),e.has("locationY")&&(this.element.style.top=`${this.element.locationY}px`)}}class ft extends gt{startDrag(){this.target.selected||(this.blueprint.unselectAll(),this.target.setSelected(!0))}dragAction(e,t){this.target.dispatchDragEvent(t)}unclicked(){this.started||(this.blueprint.unselectAll(),this.target.setSelected(!0))}}class yt extends bt{getDraggableElement(){return this.element}createDraggableObject(){return new ft(this.element,this.element.blueprint,{draggableElement:this.getDraggableElement()})}firstUpdated(e){super.firstUpdated(e),this.element.selected&&!this.element.listeningDrag&&this.element.setSelected(!0)}}class wt extends yt{static#re={[te.nodeType.doN]:ct.doN,[te.nodeType.dynamicCast]:ct.cast,[te.nodeType.executionSequence]:ct.sequence,[te.nodeType.forEachElementInEnum]:ct.loop,[te.nodeType.forEachLoop]:ct.forEachLoop,[te.nodeType.forEachLoopWithBreak]:ct.forEachLoop,[te.nodeType.forLoop]:ct.loop,[te.nodeType.forLoopWithBreak]:ct.loop,[te.nodeType.ifThenElse]:ct.branchNode,[te.nodeType.makeArray]:ct.makeArray,[te.nodeType.makeMap]:ct.makeMap,[te.nodeType.select]:ct.select,[te.nodeType.whileLoop]:ct.loop,default:ct.functionSymbol};#se=!1;toggleAdvancedDisplayHandler=()=>{this.element.toggleShowAdvancedPinDisplay(),this.element.addNextUpdatedCallbacks((()=>this.element.dispatchReflowEvent()),!0)};getColor(){const e=s``,t=s``;switch(this.element.entity.getClass()){case te.nodeType.callFunction:return this.element.entity.bIsPureFunc?t:e;case te.nodeType.makeArray:case te.nodeType.makeMap:case te.nodeType.select:return t;case te.nodeType.macro:case te.nodeType.executionSequence:case te.nodeType.dynamicCast:return s``}return e}constructed(e){super.constructed(e),this.element.style.setProperty("--ueb-node-color",this.getColor().cssText)}render(){const e=this.renderNodeIcon(),t=this.renderNodeName();return D`${e?D`${e}`:B} ${t?D`${t} ${this.#se?D`Target is ${le.formatStringName(this.element.entity.FunctionReference.MemberParent.getName())}`:B}`:B}${"DevelopmentOnly"==this.element.enabledState?.toString()?D`Development Only`:B} ${this.element.advancedPinDisplay?D`${ct.expandIcon}`:B}`}renderNodeIcon(){let e=wt.#re[this.element.getType()];return e||(this.element.getNodeDisplayName().startsWith("Break")?ct.breakStruct:this.element.entity.getClass()===te.nodeType.macro?ct.macro:wt.#re.default)}renderNodeName(){return this.element.getNodeDisplayName()}firstUpdated(e){super.firstUpdated(e),this.setupPins(),Promise.all(this.element.getPinElements().map((e=>e.updateComplete))).then((()=>this.element.dispatchReflowEvent()))}setupPins(){const e=this.element.querySelector(".ueb-node-inputs"),t=this.element.querySelector(".ueb-node-outputs");this.element.nodeNameElement=this.element.querySelector(".ueb-node-name-text"),this.element.getPinElements().forEach((i=>{i.isInput()?e.appendChild(i):i.isOutput()&&t.appendChild(i)}))}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>(this.#se||"Target"!==e.getDisplayName()||(this.#se=!0),new(Qe.getConstructor("ueb-pin"))(e,void 0,this.element))))}getPinElements(e){return e.querySelectorAll("ueb-pin")}linksChanged(){}}class Et extends wt{static#oe=new Set;#ae=null;#le;get inputPin(){return this.#le}#ce;get outputPin(){return this.#ce}findDirectionaPin(e){if(e.nodeElement.getType()!==te.nodeType.knot||Et.#oe.has(e))return Et.#oe.clear(),!0;Et.#oe.add(e);for(let t of e.getLinks().map((e=>this.element.blueprint.getPin(e))))if(this.findDirectionaPin(t))return!0;return!1}render(){return D``}setupPins(){this.element.getPinElements().forEach((e=>this.element.querySelector(".ueb-node-border").appendChild(e)))}getPinElements(e){return e.querySelectorAll("ueb-pin")}createPinElements(){const e=this.element.getPinEntities().filter((e=>!e.isHidden())),t=e[e[0].isInput()?0:1],i=e[e[0].isOutput()?0:1],n=Qe.getConstructor("ueb-pin");return[this.#le=new n(t,new mt,this.element),this.#ce=new n(i,new mt,this.element)]}linksChanged(){}}class St extends wt{#ue=!1;#he=!1;#de="";constructed(e){super.constructed(e),this.element.classList.add("ueb-node-style-glass"),this.#de=this.element.getNodeDisplayName()}render(){return D`${this.#de?D`${this.#de}`:B}${this.#ue?D``:B} ${this.#he?D``:B}`}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>(this.#ue||=e.isInput(),this.#he||=e.isOutput(),new(Qe.getConstructor("ueb-pin"))(e,void 0,this.element))))}setupPins(){super.setupPins();let e=this.element.getPinElements().find((e=>!e.entity.isHidden()&&!e.entity.isExecution()));this.element.style.setProperty("--ueb-node-color",e.getColor().cssText)}}class Pt extends ht{static#pe={[te.nodeType.knot]:Et,[te.nodeType.variableGet]:St,[te.nodeType.variableSet]:St};static properties={...ht.properties,typePath:{type:String,attribute:"data-type",reflect:!0},nodeName:{type:String,attribute:"data-name",reflect:!0},advancedPinDisplay:{type:String,attribute:"data-advanced-display",converter:pe.attributeConverter,reflect:!0},enabledState:{type:String,attribute:"data-enabled-state",reflect:!0},nodeDisplayName:{type:String,attribute:!1},pureFunction:{type:Boolean,converter:le.booleanConverter,attribute:"data-pure-function",reflect:!0}};static dragEventName=te.nodeDragEventName;static dragGeneralEventName=te.nodeDragGeneralEventName;get blueprint(){return super.blueprint}set blueprint(e){super.blueprint=e,this.#me.forEach((t=>t.blueprint=e))}#ge;get nodeNameElement(){return this.#ge}set nodeNameElement(e){this.#ge=e}#me;constructor(e,t){super(e,t??new(Pt.getTypeTemplate(e))),this.#me=this.template.createPinElements(),this.typePath=this.entity.getType(),this.nodeName=this.entity.getObjectName(),this.advancedPinDisplay=this.entity.AdvancedPinDisplay?.toString(),this.enabledState=this.entity.EnabledState,this.nodeDisplayName=this.entity.getDisplayName(),this.pureFunction=this.entity.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.nodeName=e))}static getTypeTemplate(e){return Pt.#pe[e.getClass()]??wt}static fromSerializedObject(e){e=e.trim();let t=se.getSerializer(Te).deserialize(e);return new Pt(t)}disconnectedCallback(){super.disconnectedCallback(),this.dispatchDeleteEvent()}getType(){return this.entity.getType()}getNodeName(){return this.entity.getObjectName()}getNodeDisplayName(){return this.entity.getDisplayName()}sanitizeLinks(e=[]){this.getPinElements().forEach((t=>t.sanitizeLinks(e)))}rename(e){if(this.entity.Name==e)return!1;for(let t of this.getPinElements())for(let i of t.getLinks())this.blueprint.getPin(i).redirectLink(t,new Se({objectName:e,pinGuid:t.entity.PinId}));this.entity.Name=e}getPinElements(){return this.#me}getPinEntities(){return this.entity.CustomProperties.filter((e=>e instanceof Le))}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(){let e=new CustomEvent(te.nodeDeleteEventName);this.dispatchEvent(e)}dispatchReflowEvent(){let e=new CustomEvent(te.nodeReflowEventName);this.dispatchEvent(e)}setShowAdvancedPinDisplay(e){this.entity.AdvancedPinDisplay=new pe(e?"Shown":"Hidden")}toggleShowAdvancedPinDisplay(){this.setShowAdvancedPinDisplay("Shown"!=this.entity.AdvancedPinDisplay?.toString())}}class kt{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=0&&this.currentPosition=0&&this.currentPosition0?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 Ct{constructor(e,t,i,n){this.initialPosition=e,this.finalPosition=e,this.metadata=new Array(t.length),this.primaryOrder=new kt((e=>this.metadata[e].primaryBoundary)),this.secondaryOrder=new kt((e=>this.metadata[e].secondaryBoundary)),this.selectFunc=n,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,n(e,!1);const s=i(e);this.initialPosition[1]{if(this.metadata[i].onSecondaryAxis)this.selectFunc(this.rectangles[i],n);else if(n){this.secondaryOrder.insert(i,e[1]);const n=this.metadata[i].secondaryBoundary;Math.sign(e[1]-n)==t[1]&&Math.sign(n-this.initialPosition[1])==t[1]&&this.selectFunc(this.rectangles[i],!0)}else this.selectFunc(this.rectangles[i],!1),this.secondaryOrder.remove(i);this.computeBoundaries(),this.selectTo(e)};e[0]this.boundaries.primaryN.v&&e[0]this.boundaries.primaryP.v&&(++this.primaryOrder.currentPosition,i(this.boundaries.primaryP.i,this.initialPosition[0]{this.selectFunc(this.rectangles[t],i),this.computeBoundaries(),this.selectTo(e)};e[1]this.boundaries.secondaryN.v&&e[1]this.boundaries.secondaryP.v&&(++this.secondaryOrder.currentPosition,n(this.boundaries.secondaryP.i,this.initialPosition[1]{let t=e.getBoundingClientRect(),i=this.nodesContainerElement.getBoundingClientRect();const n=1/this.getScale();return{primaryInf:(t.left-i.left)*n,primarySup:(t.right-i.right)*n,secondaryInf:(t.top-i.top)*n,secondarySup:(t.bottom-i.bottom)*n}};nodeSelectToggleFunction=(e,t)=>{e.setSelected(t)};constructor(e=new te){super({},new nt),this.selecting=!1,this.scrolling=!1,this.focused=!1,this.zoom=0,this.scrollX=te.expandGridSize,this.scrollY=te.expandGridSize,this.translateX=te.expandGridSize,this.translateY=te.expandGridSize}getGridDOMElement(){return this.gridElement}disconnectedCallback(){super.disconnectedCallback()}getScroll(){return[this.scrollX,this.scrollY]}setScroll([e,t],i=!1){this.scrollX=e,this.scrollY=t}scrollDelta(e,t=!1){const i=[2*te.expandGridSize,2*te.expandGridSize];let n=this.getScroll(),r=[n[0]+e[0],n[1]+e[1]],s=[0,0];for(let t=0;t<2;++t)e[t]<0&&r[t]0&&r[t]>i[t]-te.gridExpandThreshold*te.expandGridSize&&(s[t]=1);0==s[0]&&0==s[1]||this.seamlessExpand(s),n=this.getScroll(),r=[n[0]+e[0],n[1]+e[1]],this.setScroll(r,t)}scrollCenter(){const e=this.getScroll(),t=[this.translateX-e[0],this.translateY-e[1]],i=this.getViewportSize().map((e=>e/2)),n=[t[0]-i[0],t[1]-i[1]];this.scrollDelta(n,!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 le.snapToGrid(e,te.gridSize)}seamlessExpand([e,t]){e=Math.round(e),t=Math.round(t);let i=this.getScale();[e,t]=[-e*te.expandGridSize,-t*te.expandGridSize],0!=e&&(this.scrollX+=e,e/=i),0!=t&&(this.scrollY+=t,t/=i),this.translateX+=e,this.translateY+=t}progressiveSnapToGrid(e){return te.expandGridSize*Math.round(e/te.expandGridSize+.5*Math.sign(e))}getZoom(){return this.zoom}setZoom(e,t){if((e=le.clamp(e,te.minZoom,te.maxZoom))==this.zoom)return;let i=this.getScale();this.zoom=e,t&&requestAnimationFrame((e=>{t[0]+=this.translateX,t[1]+=this.translateY;let n=this.getScale()/i,r=[n*t[0],n*t[1]];this.scrollDelta([(r[0]-t[0])*i,(r[1]-t[1])*i])}))}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){let t=this.template.getPin(e);return t&&t.nodeElement.getNodeName()==e.objectName.toString()?t:[...this.nodes.find((t=>e.objectName.toString()==t.getNodeName()))?.getPinElements()??[]].find((t=>e.pinGuid.toString()==t.getPinId().toString()))}getLinks([e,t]=[]){if(null==e!=t==null){const i=e??t;return this.links.filter((e=>e.sourcePin==i||e.destinationPin==i))}return null!=e&&null!=t?this.links.filter((i=>i.sourcePin==e&&i.destinationPin==t||i.sourcePin==t&&i.destinationPin==e)):this.links}getLink(e,t,i=!1){return this.links.find((n=>n.sourcePin==e&&n.destinationPin==t||i&&n.sourcePin==t&&n.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 Pt&&!this.nodes.includes(t)){const e=t.entity.getObjectName(),i=this.nodes.find((t=>t.entity.getObjectName()==e));if(i){let e=i.entity.getObjectName(!0);this.#ve[e]=this.#ve[e]??-1;do{++this.#ve[e]}while(this.nodes.find((t=>t.entity.getObjectName()==te.nodeName(e,this.#ve[e]))));i.rename(te.nodeName(e,this.#ve[e]))}this.nodes.push(t),this.nodesContainerElement?.appendChild(t)}else t instanceof ut&&!this.links.includes(t)&&(this.links.push(t),this.linksContainerElement&&!this.linksContainerElement.contains(t)&&this.linksContainerElement.appendChild(t));e.filter((e=>e instanceof Pt)).forEach((t=>t.sanitizeLinks(e)))}removeGraphElement(...e){for(let t of e)if(t.closest("ueb-blueprint")==this){t.remove();let e=t instanceof Pt?this.nodes:t instanceof ut?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?te.editTextEventName.begin:te.editTextEventName.end);this.dispatchEvent(t)}}customElements.define("ueb-blueprint",Nt);class At extends vt{#be;get locationChangeCallback(){return this.#be}set locationChangeCallback(e){this.#be=e}movementSpace;movementSpaceSize=[0,0];connectedCallback(){super.connectedCallback(),this.movementSpace=this.element.parentElement;const e=this.movementSpace.getBoundingClientRect();this.movementSpaceSize=[e.width,e.height]}createDraggableObject(){return new gt(this.element,this.element.blueprint,{draggableElement:this.movementSpace,ignoreTranslateCompensate:!0,moveEverywhere:!0,movementSpace:this.movementSpace,repositionOnClick:!0,stepSize:1})}adjustLocation([e,t]){return this.locationChangeCallback?.(e,t),[e,t]}}class Tt extends At{adjustLocation([e,t]){const i=Math.round(this.movementSpaceSize[0]/2);e-=i,t=-(t-i);let[n,r]=le.getPolarCoordinates([e,t]);return n=Math.min(n,i),[e,t]=le.getCartesianCoordinates([n,r]),this.locationChangeCallback?.(e/i,t/i),[e=Math.round(e+i),t=Math.round(-t+i)]}}class $t extends Xe{windowElement;constructor(e,t){super(e,t)}connectedCallback(){super.connectedCallback(),this.windowElement=this.closest("ueb-window")}setLocation([e,t]){super.setLocation(this.template.adjustLocation([e,t]))}}class Mt extends $t{constructor(){super({},new Tt)}}class Ot extends At{adjustLocation([e,t]){return e=le.clamp(e,0,this.movementSpaceSize[0]),t=le.clamp(t,0,this.movementSpaceSize[1]),this.locationChangeCallback?.(e/this.movementSpaceSize[0],1-t/this.movementSpaceSize[1]),[e,t]}}class Dt extends $t{constructor(){super({},new Ot)}}class Ht extends Re{#fe=()=>{this.element.blueprint.dispatchEditTextEvent(!0),this.element.selectOnFocus&&getSelection().selectAllChildren(this.element)};#ye=()=>{this.element.blueprint.dispatchEditTextEvent(!1),document.getSelection()?.removeAllRanges()};#we=e=>e.target.querySelectorAll("br").forEach((e=>e.remove()));#Ee=e=>{"Enter"!=e.code||e.shiftKey||e.target.blur()};constructed(e){super.constructed(e),this.element.classList.add("ueb-pin-input-content"),this.element.setAttribute("role","textbox"),this.element.contentEditable="true"}connectedCallback(){this.element.addEventListener("focus",this.#fe),this.element.addEventListener("focusout",this.#ye),this.element.singleLine&&this.element.addEventListener("input",this.#we),this.element.blurOnEnter&&this.element.addEventListener("keydown",this.#Ee)}cleanup(){this.element.removeEventListener("focus",this.#fe),this.element.removeEventListener("focusout",this.#ye),this.element.singleLine&&this.element.removeEventListener("input",this.#we),this.element.blurOnEnter&&this.element.removeEventListener("keydown",this.#Ee)}}class Bt extends qe{static properties={...super.properties,singleLine:{type:Boolean,attribute:"data-single-line",converter:le.booleanConverter,reflect:!0},selectOnFocus:{type:Boolean,attribute:"data-select-focus",converter:le.booleanConverter,reflect:!0},blurOnEnter:{type:Boolean,attribute:"data-blur-enter",converter:le.booleanConverter,reflect:!0}};constructor(){super({},new Ht),this.singleLine=!1,this.selectOnFocus=!0,this.blurOnEnter=!0}}class It extends Ze{constructor(e,t,i={}){i.consumeEvent=!0,super(e,t,i)}}class Vt extends pt{#Se;#Pe=e=>this.element.setDefaultValue(this.#Se.checked);firstUpdated(e){super.firstUpdated(e),this.#Se=this.element.querySelector(".ueb-pin-input"),this.#Se?.addEventListener("change",this.#Pe)}cleanup(){super.cleanup(),this.#Se?.removeEventListener("change",this.#Pe)}createInputObjects(){return[...super.createInputObjects(),new It(this.#Se,this.element.blueprint)]}renderInput(){return D``}}class _t extends pt{renderIcon(){return ct.execPin}renderName(){let e=this.element.entity.PinName;if(this.element.entity.PinFriendlyName)e=this.element.entity.PinFriendlyName.toString();else if("execute"===e||"then"===e)return D``;return D`${le.formatStringName(e)}`}}class Rt extends pt{static singleLineInput=!1;static selectOnFocus=!0;#ke;get inputContentElements(){return this.#ke}static stringFromInputToUE(e){return e.replace(/(?=\n\s*)\n$/,"").replaceAll("\n","\\r\n")}static stringFromUEToInput(e){return e.replaceAll(/(?:\r|(?<=(?:^|[^\\])(?:\\\\)*)\\r)(?=\n)/g,"").replace(/(?<=\n\s*)$/,"\n")}#Ce=()=>this.setInputs(this.getInputs(),!0);firstUpdated(e){super.firstUpdated(e),this.#ke=[...this.element.querySelectorAll("ueb-input")],this.#ke.length&&this.#ke.forEach((e=>{e.addEventListener("focusout",this.#Ce)}))}cleanup(){super.cleanup(),this.#ke.forEach((e=>{e.removeEventListener("focusout",this.#Ce)}))}createInputObjects(){return[...super.createInputObjects(),...this.#ke.map((e=>new It(e,this.element.blueprint)))]}getInput(){return this.getInputs().reduce(((e,t)=>e+t),"")}getInputs(){return this.#ke.map((e=>le.clearHTMLWhitespace(e.innerHTML)))}setInputs(e=[],t=!0){this.#ke.forEach(this.constructor.singleLineInput?(t,i)=>t.innerText=e[i]:(t,i)=>t.innerText=e[i].replaceAll("\n","")),t&&this.setDefaultValue(e.map((e=>Rt.stringFromInputToUE(e))),e),this.element.addNextUpdatedCallbacks((()=>this.element.nodeElement.dispatchReflowEvent()))}setDefaultValue(e=[],t=e){this.element.setDefaultValue(e.join(""))}renderInput(){const e=this.constructor.singleLineInput,t=this.constructor.selectOnFocus;return D``}}class Gt extends Rt{static singleLineInput=!0;setInputs(e=[],t=!1){e&&0!=e.length||(e=[this.getInput()]);let i=[];for(const t of e){let e=parseFloat(t);isNaN(e)&&(e=0,!1),i.push(e)}super.setInputs(e,!1),this.setDefaultValue(i,e)}setDefaultValue(e=[],t){this.element.setDefaultValue(e[0])}}class Ft extends Gt{setDefaultValue(e=[],t=e){this.element.setDefaultValue(new me(e[0]))}renderInput(){return D``}} /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */const _t=1; + */const jt=1;class zt{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}} /** * @license * Copyright 2018 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */ -const Rt=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}{constructor(e){var t;if(super(e),e.type!==_t||"style"!==e.name||(null===(t=e.strings)||void 0===t?void 0:t.length)>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce(((t,i)=>{const n=e[i];return null==n?t:t+`${i=i.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${n};`}),"")}update(e,[t]){const{style:i}=e.element;if(void 0===this.vt){this.vt=new Set;for(const e in t)this.vt.add(e);return this.render(t)}this.vt.forEach((e=>{null==t[e]&&(this.vt.delete(e),e.includes("-")?i.removeProperty(e):i[e]="")}));for(const e in t){const n=t[e];null!=n&&(this.vt.add(e),e.includes("-")?i.setProperty(e,n):i[e]=n)}return M}});class Gt extends pt{toggleAdvancedDisplayHandler;getDraggableElement(){return this.element.querySelector(".ueb-window-top")}createDraggableObject(){return new ht(this.element,this.element.blueprint,{draggableElement:this.getDraggableElement(),ignoreTranslateCompensate:!0,movementSpace:this.element.blueprint,stepSize:1})}render(){return $`${this.renderWindowName()}this.element.remove()}">${st.close}${this.renderContent()}`}renderWindowName(){return $`Window`}renderContent(){return $``}apply(){this.element.dispatchEvent(new CustomEvent(J.windowApplyEventName)),this.element.remove()}cancel(){this.element.dispatchEvent(new CustomEvent(J.windowCancelEventName)),this.element.remove()}}class Ft extends Gt{#xe;#Le;#Ne;#Ae;#Te;#$e;#Me;#Oe;#De;#He;#Be=e=>{const t=re.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromRGBANumber(i),this.element.requestUpdate())};#Ie=e=>{const t=re.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromSRGBANumber(i),this.element.requestUpdate())};#Ve=e=>t=>{"Enter"==t.code&&(t.preventDefault(),e(t))};#_e=new me;get color(){return this.#_e}set color(e){e.toNumber()!=this.color?.toNumber()&&(this.element.requestUpdate("color",this.#_e),this.#_e=e)}#Re=new me;get fullColor(){return this.#Re}#Ge;get initialColor(){return this.#Ge}#Fe=new me;#je(e,t,i=!1){const n=this.color.toRGBAString(),r=`${n.substring(0,2*e)}${t}${n.substring(2+2*e)}`;return i?`${r.substring(0,6)}FF`:r}connectedCallback(){super.connectedCallback(),this.#Ge=this.element.windowOptions.getPinColor(),this.color.setFromHSVA(this.initialColor.H.value,this.initialColor.S.value,this.initialColor.V.value,this.initialColor.A.value),this.fullColor.setFromHSVA(this.color.H.value,1,1,1)}firstUpdated(e){this.#xe=this.element.querySelector(".ueb-color-picker-wheel ueb-color-handler"),this.#Le=this.element.querySelector(".ueb-color-picker-saturation ueb-ui-slider"),this.#Ne=this.element.querySelector(".ueb-color-picker-value ueb-ui-slider"),this.#Ae=this.element.querySelector(".ueb-color-picker-r ueb-ui-slider"),this.#Te=this.element.querySelector(".ueb-color-picker-g ueb-ui-slider"),this.#$e=this.element.querySelector(".ueb-color-picker-b ueb-ui-slider"),this.#Me=this.element.querySelector(".ueb-color-picker-a ueb-ui-slider"),this.#Oe=this.element.querySelector(".ueb-color-picker-h ueb-ui-slider"),this.#De=this.element.querySelector(".ueb-color-picker-s ueb-ui-slider"),this.#He=this.element.querySelector(".ueb-color-picker-v ueb-ui-slider"),this.#xe.template.locationChangeCallback=(e,t)=>{this.color.setFromWheelLocation([e,t],this.color.V.value,this.color.A.value),this.fullColor.setFromHSVA(this.color.H.value,1,1,1),this.element.requestUpdate()},this.#Le.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,t,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#Ne.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,this.color.S.value,t,this.color.A.value),this.element.requestUpdate()},this.#Ae.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(e,this.color.G.value,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#Te.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,e,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#$e.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,e,this.color.A.value),this.element.requestUpdate()},this.#Me.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,this.color.B.value,e),this.element.requestUpdate()},this.#Oe.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(e,this.color.S.value,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#De.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,e,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#He.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,this.color.S.value,e,this.color.A.value),this.element.requestUpdate()}}renderSlider(e){let t="",i=0,n="";const r=e=>`linear-gradient(to right, #${this.#je(e,"00",!0)}, #${this.#je(e,"ff",!0)})`;switch(e){case 0:t="r",i=this.color.R.value,n=r(e);break;case 1:t="g",i=this.color.G.value,n=r(e);break;case 2:t="b",i=this.color.B.value,n=r(e);break;case 3:t="a",i=this.color.A.value,n=`${J.alphaPattern}, ${r(e)}`;break;case 4:t="h",i=360*this.color.H.value,n="linear-gradient(to right, #f00 0%, #ff0 16.666%, #0f0 33.333%, #0ff 50%, #00f 66.666%, #f0f 83.333%, #f00 100%)";break;case 5:t="s",i=this.color.S.value,n=`linear-gradient(to right,#${this.#Fe.setFromHSVA(this.color.H.value,0,this.color.V.value,1),this.#Fe.toRGBAString()},#${this.#Fe.setFromHSVA(this.color.H.value,1,this.color.V.value,1),this.#Fe.toRGBAString()})`;break;case 6:t="v",i=this.color.V.value,n=`linear-gradient(to right, #000, #${this.fullColor.toRGBAString()})`}return n=`background: ${n};`,$`${t.toUpperCase()}`}renderContent(){const e=2*this.color.H.value*Math.PI,t={"--ueb-color-r":this.color.R.toString(),"--ueb-color-g":this.color.G.toString(),"--ueb-color-b":this.color.B.toString(),"--ueb-color-a":this.color.A.toString(),"--ueb-color-h":this.color.H.toString(),"--ueb-color-s":this.color.S.toString(),"--ueb-color-v":this.color.V.toString(),"--ueb-color-wheel-x":100*(this.color.S.value*Math.cos(e)*.5+.5)+"%","--ueb-color-wheel-y":100*(this.color.S.value*Math.sin(e)*.5+.5)+"%"},i=this.color.toRGBAString(),n=this.color.toSRGBAString(),r=this.fullColor.toRGBAString();return $`OldNewAdvanced${this.renderSlider(0)} ${this.renderSlider(1)} ${this.renderSlider(2)} ${this.renderSlider(3)}${this.renderSlider(4)} ${this.renderSlider(5)} ${this.renderSlider(6)}Hex LinearHex sRGBthis.apply()}">OKthis.cancel()}">Cancel`}renderWindowName(){return $`Color Picker`}}class jt extends ct{#ze;#Ue=e=>{e.preventDefault(),this.element.blueprint.setFocused(!0),this.#ze=new(Xe.getConstructor("ueb-window"))({type:Ft,windowOptions:{getPinColor:()=>this.element.defaultValue,setPinColor:e=>this.element.setDefaultValue(e)}}),this.element.blueprint.append(this.#ze);const t=()=>{this.element.setDefaultValue(this.#ze.template.color)},i=()=>{this.#ze.removeEventListener(J.windowApplyEventName,t),this.#ze.removeEventListener(J.windowCloseEventName,i),this.#ze=null};this.#ze.addEventListener(J.windowApplyEventName,t),this.#ze.addEventListener(J.windowCloseEventName,i)};renderInput(){return $``}}class zt extends Bt{static singleLineInput=!0}class Ut extends It{setDefaultValue(e=[],t=e){this.element.setDefaultValue(e[0])}renderInput(){return $``}}class Kt extends ct{renderIcon(){return st.referencePin}}class Wt extends It{setDefaultValue(e=[],t=e){if(!(this.element.entity.DefaultValue instanceof ye))throw new TypeError("Expected DefaultValue to be a VectorEntity");let i=this.element.entity.DefaultValue;i.R=e[0],i.P=e[1],i.Y=e[2]}renderInput(){return $`XYZ`}}class qt extends Bt{}class Xt extends It{setDefaultValue(e,t){if(!(this.element.entity.DefaultValue instanceof Ee))throw new TypeError("Expected DefaultValue to be a VectorEntity");let i=this.element.entity.DefaultValue;i.X=e[0],i.Y=e[1],i.Z=e[2]}renderInput(){return $`XYZ`}}class Zt extends ze{static#Ke={"/Script/CoreUObject.LinearColor":jt,"/Script/CoreUObject.Rotator":Wt,"/Script/CoreUObject.Vector":Xt,bool:Dt,int:Vt,MUTABLE_REFERENCE:Kt,name:zt,real:Ut,string:qt};static properties={pinId:{type:le,converter:{fromAttribute:(e,t)=>e?Oe.grammar.Guid.parse(e).value:null,toAttribute:(e,t)=>e?.toString()},attribute:"data-id",reflect:!0},pinType:{type:String,attribute:"data-type",reflect:!0},advancedView:{type:String,attribute:"data-advanced-view",reflect:!0},color:{type:me,converter:{fromAttribute:(e,t)=>e?Oe.grammar.LinearColorFromAnyColor.parse(e).value:null,toAttribute:(e,t)=>e?re.printLinearColor(e):null},attribute:"data-color",reflect:!0},defaultValue:{type:String,attribute:!1},isLinked:{type:Boolean,converter:re.booleanConverter,attribute:"data-linked",reflect:!0},pinDirection:{type:String,attribute:"data-direction",reflect:!0}};static getTypeTemplate(e){if(e.PinType.bIsReference&&!e.PinType.bIsConst)return Zt.#Ke.MUTABLE_REFERENCE;if("exec"===e.getType())return Ht;let t;return e.isInput()&&(t=Zt.#Ke[e.getType()]),t??ct}nodeElement;connections=0;constructor(e,t,i){super(e,t??new(Zt.getTypeTemplate(e))),this.pinId=this.entity.PinId,this.pinType=this.entity.getType(),this.advancedView=this.entity.bAdvancedView,this.defaultValue=this.entity.getDefaultValue(),this.color=Zt.properties.color.converter.fromAttribute(this.getColor().toString()),this.isLinked=!1,this.pinDirection=e.isInput()?"input":e.isOutput()?"output":"hidden",this.nodeElement=i,this.entity.subscribe("PinToolTip",(e=>{let t=e.match(/\s*(.+?(?=\n)|.+\S)\s*/);return t?re.formatStringName(t[1]):re.formatStringName(this.entity.PinName)}))}getPinId(){return this.entity.PinId}getPinName(){return this.entity.PinName}getPinDisplayName(){return this.entity.getDisplayName()}getColor(){return J.getPinColor(this)}isInput(){return this.entity.isInput()}isOutput(){return this.entity.isOutput()}getLinkLocation(){return this.template.getLinkLocation()}getNodeElement(){return this.nodeElement}getLinks(){return this.entity.LinkedTo??[]}setDefaultValue(e){this.entity.DefaultValue=e,this.defaultValue=e}sanitizeLinks(e=[]){this.entity.LinkedTo=this.getLinks().filter((t=>{let i=this.blueprint.getPin(t);if(i){if(e.length&&!e.includes(i.nodeElement))return!1;this.blueprint.getLink(this,i,!0)||this.blueprint.addGraphElement(new(Xe.getConstructor("ueb-link"))(this,i))}return i}))}linkTo(e){this.entity.linkTo(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),this.nodeElement?.template.linksChanged())}unlinkFrom(e){this.entity.unlinkFrom(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),this.nodeElement?.template.linksChanged())}redirectLink(e,t){const i=this.entity.LinkedTo.findIndex((t=>t.objectName.toString()==e.getNodeElement().getNodeName()&&t.pinGuid.valueOf()==e.entity.PinId.valueOf()));return i>=0&&(this.entity.LinkedTo[i]=t,!0)}}class Yt extends Ue{static#pe={window:Gt,"color-picker":Ft};static properties={...Ue.properties,type:{type:Gt,attribute:"data-type",reflect:!0,converter:{fromAttribute:(e,t)=>Yt.#pe[e],toAttribute:(e,t)=>Object.entries(Yt.#pe).find((([t,i])=>e==i))[0]}}};constructor(e={}){e.type.constructor==String&&(e.type=Yt.#pe[e.type]),e.type??=Gt,e.windowOptions??={},super({},new e.type),this.type=e.type,this.windowOptions=e.windowOptions}disconnectedCallback(){super.disconnectedCallback(),this.dispatchCloseEvent()}dispatchCloseEvent(){let e=new CustomEvent(J.windowCloseEventName);this.dispatchEvent(e)}}class Jt extends Oe{constructor(e,t,i,n,r,s,o){e=e??(e=>`(${e})`),super(t,i,n,r,s,o),this.wrap=e}read(e){const t=Me.getGrammarForType(Oe.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,i=!1){return this.wrap(this.subWrite(e,[],t,i),t)}}class Qt extends Jt{#We;constructor(e,t){super(void 0,t),this.#We=e}write(e,t,i=!1){return this.#We(t,i)}}class ei extends Jt{constructor(e){super(void 0,e)}write(e,t,i){return i||t.constructor!==String?re.escapeString(t.toString()):`"${re.escapeString(t.toString())}"`}}!function(){const e=e=>`(${e})`;te.registerSerializer(null,new Qt(((e,t)=>"()"),null)),te.registerSerializer(Array,new Qt(((e,t)=>`(${e.map((e=>te.getSerializer(re.getType(e)).serialize(e,t)+",")).join("")})`),Array)),te.registerSerializer(Boolean,new Qt(((e,t)=>e?t?"true":"True":t?"false":"False"),Boolean)),te.registerSerializer(ae,new Jt(e,ae)),te.registerSerializer(le,new ei(le)),te.registerSerializer(ce,new ei(ce)),te.registerSerializer(ue,new ei(ue)),te.registerSerializer(he,new Jt((e=>`${he.lookbehind}(${e})`),he,"",", ",!1,"",(e=>""))),te.registerSerializer(de,new Jt(e,de)),te.registerSerializer(me,new Jt(e,me)),te.registerSerializer(ge,new Jt((e=>`${ge.lookbehind}(${e})`),ge,"",", ",!1,"",(e=>""))),te.registerSerializer(ve,new Jt(e,ve)),te.registerSerializer(Number,new Qt((e=>e.toString()),Number)),te.registerSerializer(xe,new De),te.registerSerializer(oe,new Qt((e=>(e.type??"")+(e.path?e.type?`'"${e.path}"'`:`"${e.path}"`:"")),oe)),te.registerSerializer(be,new ei(be)),te.registerSerializer(Pe,new Jt((e=>`${Pe.lookbehind} (${e})`),Pe,"",",",!0)),te.registerSerializer(fe,new Jt((e=>e),fe,""," ",!1,"",(e=>""))),te.registerSerializer(pe,new ei(pe)),te.registerSerializer(ye,new Jt(e,ye)),te.registerSerializer(String,new Qt(((e,t)=>t?re.escapeString(e):`"${re.escapeString(e)}"`),String)),te.registerSerializer(we,new Qt(((e,t)=>`${e.P}, ${e.Y}, ${e.R}`),we)),te.registerSerializer(Se,new Qt(((e,t)=>`${e.X}, ${e.Y}, ${e.Z}`),Se)),te.registerSerializer(Ce,new ei(Ce)),te.registerSerializer(Te,new Jt(((e,t)=>`${t.lookbehind??""}(${e})`),Te)),te.registerSerializer(ke,new Jt(e,ke)),te.registerSerializer(Ee,new Jt(e,Ee))}(),customElements.define("ueb-color-handler",Nt),Xe.registerElement("ueb-color-handler",Nt),customElements.define("ueb-input",Mt),Xe.registerElement("ueb-input",Mt),customElements.define("ueb-link",ot),Xe.registerElement("ueb-link",ot),customElements.define("ueb-node",yt),Xe.registerElement("ueb-node",yt),customElements.define("ueb-pin",Zt),Xe.registerElement("ueb-pin",Zt),customElements.define("ueb-selector",Pt),Xe.registerElement("ueb-selector",Pt),customElements.define("ueb-ui-slider",Tt),Xe.registerElement("ueb-ui-slider",Tt),customElements.define("ueb-window",Yt),Xe.registerElement("ueb-window",Yt);export{kt as Blueprint,J as Configuration,ot as LinkElement,yt as NodeElement}; + */const Ut=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends zt{constructor(e){var t;if(super(e),e.type!==jt||"style"!==e.name||(null===(t=e.strings)||void 0===t?void 0:t.length)>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce(((t,i)=>{const n=e[i];return null==n?t:t+`${i=i.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${n};`}),"")}update(e,[t]){const{style:i}=e.element;if(void 0===this.vt){this.vt=new Set;for(const e in t)this.vt.add(e);return this.render(t)}this.vt.forEach((e=>{null==t[e]&&(this.vt.delete(e),e.includes("-")?i.removeProperty(e):i[e]="")}));for(const e in t){const n=t[e];null!=n&&(this.vt.add(e),e.includes("-")?i.setProperty(e,n):i[e]=n)}return H}});class Kt extends bt{toggleAdvancedDisplayHandler;getDraggableElement(){return this.element.querySelector(".ueb-window-top")}createDraggableObject(){return new gt(this.element,this.element.blueprint,{draggableElement:this.getDraggableElement(),ignoreTranslateCompensate:!0,movementSpace:this.element.blueprint,stepSize:1})}render(){return D`${this.renderWindowName()}this.element.remove()}">${ct.close}${this.renderContent()}`}renderWindowName(){return D`Window`}renderContent(){return D``}apply(){this.element.dispatchEvent(new CustomEvent(te.windowApplyEventName)),this.element.remove()}cancel(){this.element.dispatchEvent(new CustomEvent(te.windowCancelEventName)),this.element.remove()}}class Wt extends Kt{#xe;#Le;#Ne;#Ae;#Te;#$e;#Me;#Oe;#De;#He;#Be=e=>{const t=le.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromRGBANumber(i),this.element.requestUpdate())};#Ie=e=>{const t=le.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromSRGBANumber(i),this.element.requestUpdate())};#Ve=e=>t=>{"Enter"==t.code&&(t.preventDefault(),e(t))};#_e=new fe;get color(){return this.#_e}set color(e){e.toNumber()!=this.color?.toNumber()&&(this.element.requestUpdate("color",this.#_e),this.#_e=e)}#Re=new fe;get fullColor(){return this.#Re}#Ge;get initialColor(){return this.#Ge}#Fe=new fe;#je(e,t,i=!1){const n=this.color.toRGBAString(),r=`${n.substring(0,2*e)}${t}${n.substring(2+2*e)}`;return i?`${r.substring(0,6)}FF`:r}connectedCallback(){super.connectedCallback(),this.#Ge=this.element.windowOptions.getPinColor(),this.color.setFromHSVA(this.initialColor.H.value,this.initialColor.S.value,this.initialColor.V.value,this.initialColor.A.value),this.fullColor.setFromHSVA(this.color.H.value,1,1,1)}firstUpdated(e){this.#xe=this.element.querySelector(".ueb-color-picker-wheel ueb-color-handler"),this.#Le=this.element.querySelector(".ueb-color-picker-saturation ueb-ui-slider"),this.#Ne=this.element.querySelector(".ueb-color-picker-value ueb-ui-slider"),this.#Ae=this.element.querySelector(".ueb-color-picker-r ueb-ui-slider"),this.#Te=this.element.querySelector(".ueb-color-picker-g ueb-ui-slider"),this.#$e=this.element.querySelector(".ueb-color-picker-b ueb-ui-slider"),this.#Me=this.element.querySelector(".ueb-color-picker-a ueb-ui-slider"),this.#Oe=this.element.querySelector(".ueb-color-picker-h ueb-ui-slider"),this.#De=this.element.querySelector(".ueb-color-picker-s ueb-ui-slider"),this.#He=this.element.querySelector(".ueb-color-picker-v ueb-ui-slider"),this.#xe.template.locationChangeCallback=(e,t)=>{this.color.setFromWheelLocation([e,t],this.color.V.value,this.color.A.value),this.fullColor.setFromHSVA(this.color.H.value,1,1,1),this.element.requestUpdate()},this.#Le.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,t,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#Ne.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,this.color.S.value,t,this.color.A.value),this.element.requestUpdate()},this.#Ae.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(e,this.color.G.value,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#Te.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,e,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#$e.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,e,this.color.A.value),this.element.requestUpdate()},this.#Me.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,this.color.B.value,e),this.element.requestUpdate()},this.#Oe.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(e,this.color.S.value,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#De.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,e,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#He.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,this.color.S.value,e,this.color.A.value),this.element.requestUpdate()}}renderSlider(e){let t="",i=0,n="";const r=e=>`linear-gradient(to right, #${this.#je(e,"00",!0)}, #${this.#je(e,"ff",!0)})`;switch(e){case 0:t="r",i=this.color.R.value,n=r(e);break;case 1:t="g",i=this.color.G.value,n=r(e);break;case 2:t="b",i=this.color.B.value,n=r(e);break;case 3:t="a",i=this.color.A.value,n=`${te.alphaPattern}, ${r(e)}`;break;case 4:t="h",i=360*this.color.H.value,n="linear-gradient(to right, #f00 0%, #ff0 16.666%, #0f0 33.333%, #0ff 50%, #00f 66.666%, #f0f 83.333%, #f00 100%)";break;case 5:t="s",i=this.color.S.value,n=`linear-gradient(to right,#${this.#Fe.setFromHSVA(this.color.H.value,0,this.color.V.value,1),this.#Fe.toRGBAString()},#${this.#Fe.setFromHSVA(this.color.H.value,1,this.color.V.value,1),this.#Fe.toRGBAString()})`;break;case 6:t="v",i=this.color.V.value,n=`linear-gradient(to right, #000, #${this.fullColor.toRGBAString()})`}return n=`background: ${n};`,D`${t.toUpperCase()}`}renderContent(){const e=2*this.color.H.value*Math.PI,t={"--ueb-color-r":this.color.R.toString(),"--ueb-color-g":this.color.G.toString(),"--ueb-color-b":this.color.B.toString(),"--ueb-color-a":this.color.A.toString(),"--ueb-color-h":this.color.H.toString(),"--ueb-color-s":this.color.S.toString(),"--ueb-color-v":this.color.V.toString(),"--ueb-color-wheel-x":100*(this.color.S.value*Math.cos(e)*.5+.5)+"%","--ueb-color-wheel-y":100*(this.color.S.value*Math.sin(e)*.5+.5)+"%"},i=this.color.toRGBAString(),n=this.color.toSRGBAString(),r=this.fullColor.toRGBAString();return D`OldNewAdvanced${this.renderSlider(0)} ${this.renderSlider(1)} ${this.renderSlider(2)} ${this.renderSlider(3)}${this.renderSlider(4)} ${this.renderSlider(5)} ${this.renderSlider(6)}Hex LinearHex sRGBthis.apply()}">OKthis.cancel()}">Cancel`}renderWindowName(){return D`Color Picker`}}class qt extends pt{#ze;#Ue=e=>{e.preventDefault(),this.element.blueprint.setFocused(!0),this.#ze=new(Qe.getConstructor("ueb-window"))({type:Wt,windowOptions:{getPinColor:()=>this.element.defaultValue,setPinColor:e=>this.element.setDefaultValue(e)}}),this.element.blueprint.append(this.#ze);const t=()=>{this.element.setDefaultValue(this.#ze.template.color)},i=()=>{this.#ze.removeEventListener(te.windowApplyEventName,t),this.#ze.removeEventListener(te.windowCloseEventName,i),this.#ze=null};this.#ze.addEventListener(te.windowApplyEventName,t),this.#ze.addEventListener(te.windowCloseEventName,i)};renderInput(){return D``}}class Xt extends Rt{static singleLineInput=!0}class Zt extends Gt{setDefaultValue(e=[],t=e){this.element.setDefaultValue(e[0])}renderInput(){return D``}}class Yt extends pt{renderIcon(){return ct.referencePin}}class Jt extends Gt{setDefaultValue(e=[],t=e){if(!(this.element.entity.DefaultValue instanceof Pe))throw new TypeError("Expected DefaultValue to be a VectorEntity");let i=this.element.entity.DefaultValue;i.R=e[0],i.P=e[1],i.Y=e[2]}renderInput(){return D`XYZ`}}class Qt extends Rt{}class ei extends Gt{setDefaultValue(e,t){if(!(this.element.entity.DefaultValue instanceof Ce))throw new TypeError("Expected DefaultValue to be a VectorEntity");let i=this.element.entity.DefaultValue;i.X=e[0],i.Y=e[1],i.Z=e[2]}renderInput(){return D`XYZ`}}class ti extends qe{static#Ke={"/Script/CoreUObject.LinearColor":qt,"/Script/CoreUObject.Rotator":Jt,"/Script/CoreUObject.Vector":ei,bool:Vt,int:Ft,MUTABLE_REFERENCE:Yt,name:Xt,real:Zt,string:Qt};static properties={pinId:{type:de,converter:{fromAttribute:(e,t)=>e?Ie.grammar.Guid.parse(e).value:null,toAttribute:(e,t)=>e?.toString()},attribute:"data-id",reflect:!0},pinType:{type:String,attribute:"data-type",reflect:!0},advancedView:{type:String,attribute:"data-advanced-view",reflect:!0},color:{type:fe,converter:{fromAttribute:(e,t)=>e?Ie.grammar.LinearColorFromAnyColor.parse(e).value:null,toAttribute:(e,t)=>e?le.printLinearColor(e):null},attribute:"data-color",reflect:!0},defaultValue:{type:String,attribute:!1},isLinked:{type:Boolean,converter:le.booleanConverter,attribute:"data-linked",reflect:!0},pinDirection:{type:String,attribute:"data-direction",reflect:!0}};static getTypeTemplate(e){if(e.PinType.bIsReference&&!e.PinType.bIsConst)return ti.#Ke.MUTABLE_REFERENCE;if("exec"===e.getType())return _t;let t;return e.isInput()&&(t=ti.#Ke[e.getType()]),t??pt}nodeElement;connections=0;constructor(e,t,i){super(e,t??new(ti.getTypeTemplate(e))),this.pinId=this.entity.PinId,this.pinType=this.entity.getType(),this.advancedView=this.entity.bAdvancedView,this.defaultValue=this.entity.getDefaultValue(),this.color=ti.properties.color.converter.fromAttribute(this.getColor().toString()),this.isLinked=!1,this.pinDirection=e.isInput()?"input":e.isOutput()?"output":"hidden",this.nodeElement=i,this.entity.subscribe("PinToolTip",(e=>{let t=e.match(/\s*(.+?(?=\n)|.+\S)\s*/);return t?le.formatStringName(t[1]):le.formatStringName(this.entity.PinName)}))}getPinId(){return this.entity.PinId}getPinName(){return this.entity.PinName}getPinDisplayName(){return this.entity.getDisplayName()}getColor(){return te.getPinColor(this)}isInput(){return this.entity.isInput()}isOutput(){return this.entity.isOutput()}getLinkLocation(){return this.template.getLinkLocation()}getNodeElement(){return this.nodeElement}getLinks(){return this.entity.LinkedTo??[]}setDefaultValue(e){this.entity.DefaultValue=e,this.defaultValue=e}sanitizeLinks(e=[]){this.entity.LinkedTo=this.getLinks().filter((t=>{let i=this.blueprint.getPin(t);if(i){if(e.length&&!e.includes(i.nodeElement))return!1;this.blueprint.getLink(this,i,!0)||this.blueprint.addGraphElement(new(Qe.getConstructor("ueb-link"))(this,i))}return i}))}linkTo(e){this.entity.linkTo(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),this.nodeElement?.template.linksChanged())}unlinkFrom(e){this.entity.unlinkFrom(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),this.nodeElement?.template.linksChanged())}redirectLink(e,t){const i=this.entity.LinkedTo.findIndex((t=>t.objectName.toString()==e.getNodeElement().getNodeName()&&t.pinGuid.valueOf()==e.entity.PinId.valueOf()));return i>=0&&(this.entity.LinkedTo[i]=t,!0)}}class ii extends Xe{static#pe={window:Kt,"color-picker":Wt};static properties={...Xe.properties,type:{type:Kt,attribute:"data-type",reflect:!0,converter:{fromAttribute:(e,t)=>ii.#pe[e],toAttribute:(e,t)=>Object.entries(ii.#pe).find((([t,i])=>e==i))[0]}}};constructor(e={}){e.type.constructor==String&&(e.type=ii.#pe[e.type]),e.type??=Kt,e.windowOptions??={},super({},new e.type),this.type=e.type,this.windowOptions=e.windowOptions}disconnectedCallback(){super.disconnectedCallback(),this.dispatchCloseEvent()}dispatchCloseEvent(){let e=new CustomEvent(te.windowCloseEventName);this.dispatchEvent(e)}}class ni extends Ie{constructor(e,t,i,n,r,s,o){e=e??(e=>`(${e})`),super(t,i,n,r,s,o),this.wrap=e}read(e){const t=Be.getGrammarForType(Ie.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,i=!1){return this.wrap(this.subWrite(e,[],t,i),t)}}class ri extends ni{#We;constructor(e,t){super(void 0,t),this.#We=e}write(e,t,i=!1){return this.#We(t,i)}}class si extends ni{constructor(e){super(void 0,e)}write(e,t,i){return i||t.constructor!==String?le.escapeString(t.toString()):`"${le.escapeString(t.toString())}"`}}!function(){const e=e=>`(${e})`;se.registerSerializer(null,new ri(((e,t)=>"()"),null)),se.registerSerializer(Array,new ri(((e,t)=>`(${e.map((e=>se.getSerializer(le.getType(e)).serialize(e,t)+",")).join("")})`),Array)),se.registerSerializer(Boolean,new ri(((e,t)=>e?t?"true":"True":t?"false":"False"),Boolean)),se.registerSerializer(he,new ni(e,he)),se.registerSerializer(de,new si(de)),se.registerSerializer(pe,new si(pe)),se.registerSerializer(me,new si(me)),se.registerSerializer(ge,new ni((e=>`${ge.lookbehind}(${e})`),ge,"",", ",!1,"",(e=>""))),se.registerSerializer(ve,new ni(e,ve)),se.registerSerializer(fe,new ni(e,fe)),se.registerSerializer(ye,new ni((e=>`${ye.lookbehind}(${e})`),ye,"",", ",!1,"",(e=>""))),se.registerSerializer(we,new ni(e,we)),se.registerSerializer(Number,new ri((e=>e.toString()),Number)),se.registerSerializer(Te,new Ve),se.registerSerializer(ue,new ri((e=>(e.type??"")+(e.path?e.type?`'"${e.path}"'`:`"${e.path}"`:"")),ue)),se.registerSerializer(Ee,new si(Ee)),se.registerSerializer(Le,new ni((e=>`${Le.lookbehind} (${e})`),Le,"",",",!0)),se.registerSerializer(Se,new ni((e=>e),Se,""," ",!1,"",(e=>""))),se.registerSerializer(be,new si(be)),se.registerSerializer(Pe,new ni(e,Pe)),se.registerSerializer(String,new ri(((e,t)=>t?le.escapeString(e):`"${le.escapeString(e)}"`),String)),se.registerSerializer(ke,new ri(((e,t)=>`${e.P}, ${e.Y}, ${e.R}`),ke)),se.registerSerializer(xe,new ri(((e,t)=>`${e.X}, ${e.Y}, ${e.Z}`),xe)),se.registerSerializer(Ne,new si(Ne)),se.registerSerializer(De,new ni(((e,t)=>`${t.lookbehind??""}(${e})`),De)),se.registerSerializer(Ae,new ni(e,Ae)),se.registerSerializer(Ce,new ni(e,Ce))}(),customElements.define("ueb-color-handler",Mt),Qe.registerElement("ueb-color-handler",Mt),customElements.define("ueb-input",Bt),Qe.registerElement("ueb-input",Bt),customElements.define("ueb-link",ut),Qe.registerElement("ueb-link",ut),customElements.define("ueb-node",Pt),Qe.registerElement("ueb-node",Pt),customElements.define("ueb-pin",ti),Qe.registerElement("ueb-pin",ti),customElements.define("ueb-selector",Lt),Qe.registerElement("ueb-selector",Lt),customElements.define("ueb-ui-slider",Dt),Qe.registerElement("ueb-ui-slider",Dt),customElements.define("ueb-window",ii),Qe.registerElement("ueb-window",ii);export{Nt as Blueprint,te as Configuration,ut as LinkElement,Pt as NodeElement}; diff --git a/package.json b/package.json index 7864da3..2eddfa7 100755 --- a/package.json +++ b/package.json @@ -24,11 +24,11 @@ "devDependencies": { "@rollup/plugin-commonjs": "^21.1.0", "@rollup/plugin-node-resolve": "^13.3.0", + "@rollup/plugin-terser": "^0.1.0", "minify-html-literals": "^1.3.5", "rollup": "^2.75.5", "rollup-plugin-copy": "^3.4.0", "rollup-plugin-minify-html-literals": "^1.2.6", - "rollup-plugin-terser": "^7.0.2", "sass": "^1.52.2", "terser": "^5.14.0" }, diff --git a/rollup.config.js b/rollup.config.js index 12688d3..ee14ff6 100755 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,8 +1,8 @@ -import { terser } from "rollup-plugin-terser" import commonjs from "@rollup/plugin-commonjs" import copy from "rollup-plugin-copy" import minifyHTML from "rollup-plugin-minify-html-literals" import resolve from "@rollup/plugin-node-resolve" +import terser from "@rollup/plugin-terser" export default [ {