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