`}firstUpdated(e){super.firstUpdated(e),this.headerElement=this.blueprint.querySelector(".ueb-viewport-header"),this.overlayElement=this.blueprint.querySelector(".ueb-viewport-overlay"),this.viewportElement=this.blueprint.querySelector(".ueb-viewport-body"),this.selectorElement=this.blueprint.querySelector("ueb-selector"),this.gridElement=this.viewportElement.querySelector(".ueb-grid"),this.linksContainerElement=this.blueprint.querySelector("[data-links]"),this.linksContainerElement.append(...this.blueprint.getLinks()),this.nodesContainerElement=this.blueprint.querySelector("[data-nodes]"),this.nodesContainerElement.append(...this.blueprint.getNodes()),this.viewportElement.scroll(ae.expandGridSize,ae.expandGridSize)}willUpdate(e){super.willUpdate(e),this.headerElement&&e.has("zoom")&&(this.headerElement.classList.contains("ueb-zoom-changed")&&(this.headerElement.classList.remove("ueb-zoom-changed"),this.headerElement.offsetWidth),this.headerElement.classList.add("ueb-zoom-changed"),this.headerElement.addEventListener("animationend",this.#wt,{once:!0}))}updated(e){if(super.updated(e),(e.has("scrollX")||e.has("scrollY"))&&this.viewportElement.scroll(this.blueprint.scrollX,this.blueprint.scrollY),e.has("zoom")){this.blueprint.style.setProperty("--ueb-scale",this.blueprint.getScale());const t=e.get("zoom"),i=Math.min(t,this.blueprint.zoom),r=Math.max(t,this.blueprint.zoom),n=oe.range(i,r),s=e=>`ueb-zoom-${e}`;te<0)).map(s)),this.blueprint.classList.add(...n.filter((e=>e>0)).map(s))):(this.blueprint.classList.remove(...n.filter((e=>e>0)).map(s)),this.blueprint.classList.add(...n.filter((e=>e<0)).map(s)))}}getCommentNodes(e=!1){return this.blueprint.querySelectorAll(`ueb-node[data-type="${ae.paths.comment}"]${e?'[data-selected="true"]':""}, ueb-node[data-type="${ae.paths.materialGraphNodeComment}"]${e?'[data-selected="true"]':""}`)}getPin(e){return this.blueprint.querySelector(`ueb-node[data-title="${e.objectName}"] ueb-pin[data-id="${e.pinGuid}"]`)}getCopyInputObject(){return this.#ft}getPasteInputObject(){return this.#yt}getZoomInputObject(){return this.#ht}isPointVisible(e,t){return!1}gridTopVisibilityBoundary(){return this.blueprint.scaleCorrect(this.blueprint.scrollY)-this.blueprint.translateY}gridRightVisibilityBoundary(){return this.gridLeftVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[0])}gridBottomVisibilityBoundary(){return this.gridTopVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[1])}gridLeftVisibilityBoundary(){return this.blueprint.scaleCorrect(this.blueprint.scrollX)-this.blueprint.translateX}centerViewport(e=0,t=0,i=!0){const r=this.gridLeftVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[0]/2),n=this.gridTopVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[1]/2);this.blueprint.scrollDelta(this.blueprint.scaleCorrectReverse(e-r),this.blueprint.scaleCorrectReverse(t-n),i)}centerContentInViewport(e=!0){let t=0,i=0,r=Number.MAX_SAFE_INTEGER,n=Number.MIN_SAFE_INTEGER,s=Number.MAX_SAFE_INTEGER,a=Number.MIN_SAFE_INTEGER;const o=this.blueprint.getNodes();for(const e of o)t+=e.leftBoundary()+e.rightBoundary(),i+=e.topBoundary()+e.bottomBoundary(),r=Math.min(r,e.leftBoundary()),n=Math.max(n,e.rightBoundary()),s=Math.min(s,e.topBoundary()),a=Math.max(a,e.bottomBoundary());t=Math.round(n-r<=this.viewportSize[0]?(n+r)/2:t/(2*o.length)),i=Math.round(a-s<=this.viewportSize[1]?(a+s)/2:i/(2*o.length)),this.centerViewport(t,i,e)}}class Di extends le{static properties={selecting:{type:Boolean,attribute:"data-selecting",reflect:!0,converter:Le.booleanConverter},scrolling:{type:Boolean,attribute:"data-scrolling",reflect:!0,converter:Le.booleanConverter},focused:{type:Boolean,attribute:"data-focused",reflect:!0,converter:Le.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 nodeBoundariesSupplier=e=>({primaryInf:e.leftBoundary(!0),primarySup:e.rightBoundary(!0),secondaryInf:e.topBoundary(!0),secondarySup:e.bottomBoundary(!0)});static nodeSelectToggleFunction=(e,t)=>{e.setSelected(t)};#St=0;#Et=0;nodes=[];links=[];nodesNames=new Map;mousePosition=[0,0];constructor(){super(),this.selecting=!1,this.scrolling=!1,this.focused=!1,this.zoom=0,this.scrollX=ae.expandGridSize,this.scrollY=ae.expandGridSize,this.translateX=ae.expandGridSize,this.translateY=ae.expandGridSize,super.initialize(new Si,new Oi)}initialize(){}getGridDOMElement(){return this.template.gridElement}getScroll(){return[this.scrollX,this.scrollY]}setScroll(e,t){this.scrollX=e,this.scrollY=t}scrollDelta(e=0,t=0,i=!1,r=ae.smoothScrollTime){if(i){let i=[0,0];this.#St&&cancelAnimationFrame(this.#St),this.#Et&&cancelAnimationFrame(this.#Et),oe.animate(0,e,r,(e=>{this.scrollDelta(e-i[0],0,!1),i[0]=e}),(e=>this.#St=e)),oe.animate(0,t,r,(e=>{this.scrollDelta(0,e-i[1],!1),i[1]=e}),(e=>this.#Et=e))}else{const i=[2*ae.expandGridSize,2*ae.expandGridSize];let r=this.getScroll(),n=[r[0]+e,r[1]+t],s=[0,0];for(let e=0;e<2;++e)n[e]i[e]-ae.gridExpandThreshold*ae.expandGridSize&&(s[e]=1);0==s[0]&&0==s[1]||this.seamlessExpand(s[0],s[1]),r=this.getScroll(),n=[r[0]+e,r[1]+t],this.setScroll(n[0],n[1])}}scrollCenter(e=!1){const t=this.getScroll(),i=[this.translateX-t[0],this.translateY-t[1]],r=this.getViewportSize().map((e=>e/2)),n=[i[0]-r[0],i[1]-r[1]];this.scrollDelta(n[0],n[1],e)}getViewportSize(){return[this.template.viewportElement.clientWidth,this.template.viewportElement.clientHeight]}getScrollMax(){return[this.template.viewportElement.scrollWidth-this.template.viewportElement.clientWidth,this.template.viewportElement.scrollHeight-this.template.viewportElement.clientHeight]}snapToGrid(e,t){return oe.snapToGrid(e,t,ae.gridSize)}seamlessExpand(e,t){e=Math.round(e),t=Math.round(t);let i=this.getScale();[e,t]=[-e*ae.expandGridSize,-t*ae.expandGridSize],0!=e&&(this.scrollX+=e,e/=i),0!=t&&(this.scrollY+=t,t/=i),this.translateX+=e,this.translateY+=t}progressiveSnapToGrid(e){return ae.expandGridSize*Math.round(e/ae.expandGridSize+.5*Math.sign(e))}getZoom(){return this.zoom}setZoom(e,t){if((e=oe.clamp(e,ae.minZoom,ae.maxZoom))==this.zoom)return;let i=this.getScale();if(this.zoom=e,t){t[0]+=this.translateX,t[1]+=this.translateY;let e=this.getScale()/i,r=[e*t[0],e*t[1]];this.scrollDelta((r[0]-t[0])*i,(r[1]-t[1])*i)}}getScale(){return ae.scale[this.getZoom()]}scaleCorrect(e){return e/this.getScale()}scaleCorrectReverse(e){return e*this.getScale()}compensateTranslation(e,t){return[e-=this.translateX,t-=this.translateY]}getNodes(e=!1){let t=this.nodes;return e&&(t=t.filter((e=>e.selected))),t}getCommentNodes(e=!1){let t=[...this.template.getCommentNodes(e)];return 0===t.length&&(t=this.nodes.filter((t=>t.getType()===ae.paths.comment&&(!e||t.selected)))),t}getPin(e){let t=this.template.getPin(e);return t&&t.nodeElement.getNodeName()==e.objectName.toString()||(t=[...this.nodes.find((t=>e.objectName.toString()==t.getNodeName()))?.getPinElements()??[]].find((t=>e.pinGuid.toString()==t.getPinId().toString()))),t}getLinks(e=null,t=null){if(null==e!=(null==t)){const i=e??t;return this.links.filter((e=>e.origin==i||e.target==i))}return null!=e&&null!=t?this.links.filter((i=>i.origin==e&&i.target==t||i.origin==t&&i.target==e)):this.links}getLink(e,t,i=!1){return this.links.find((r=>r.origin==e&&r.target==t||!i&&r.origin==t&&r.target==e))}selectAll(){this.getNodes().forEach((e=>Di.nodeSelectToggleFunction(e,!0)))}unselectAll(){this.getNodes().forEach((e=>Di.nodeSelectToggleFunction(e,!1)))}getSerializedText(){const e=this.blueprint.getNodes(!0).map((e=>e.entity));let t=!1,i=e.filter((e=>(t||=e.exported,!e.exported))).reduce(((e,t)=>e+t.serialize()),"");if(t){i=new Ei(this.blueprint.entity,e).serialize()+i}return i}addGraphElement(...e){const t=e=>{const i=e.currentTarget;i.removeEventListener(ae.removeEventName,t);const[r,n]=i instanceof wi?[this.nodes,i.entity]:i instanceof Ut?[this.links]:null,s=r?.indexOf(i);if(s>=0){const e=r.pop();se.entity.exported=!0));continue}const r=this.entity.getHomonymObjectEntity(i.entity);if(r){const t=this.entity.takeFreeName(e);r.Name=new r.Name.constructor(t)}this.nodes.push(i),this.entity.addObjectEntity(i.entity),i.addEventListener(ae.removeEventName,t),this.template.nodesContainerElement?.appendChild(i)}else i instanceof Ut&&!this.links.includes(i)&&(this.links.push(i),i.addEventListener(ae.removeEventName,t),this.template.linksContainerElement&&!this.template.linksContainerElement.contains(i)&&this.template.linksContainerElement.appendChild(i));e.filter((e=>e instanceof wi)).forEach((t=>t.sanitizeLinks(e))),e.filter((e=>e instanceof wi&&e.getType()==ae.paths.comment)).forEach((e=>e.updateComplete.then((()=>e.template.manageNodesBind()))))}removeGraphElement(...e){for(let t of e){if(t.closest("ueb-blueprint")!==this)return;t.remove()}}setFocused(e=!0){if(this.focused==e)return;let t=new CustomEvent(e?ae.focusEventName.begin:ae.focusEventName.end);this.focused=e,this.focused||this.unselectAll(),this.dispatchEvent(t)}acknowledgeEditText(e){const t=new CustomEvent(e?ae.editTextEventName.begin:ae.editTextEventName.end);this.dispatchEvent(t)}}customElements.define("ueb-blueprint",Di);class $i extends Qt{#Ct;get locationChangeCallback(){return this.#Ct}set locationChangeCallback(e){this.#Ct=e}movementSpace;movementSpaceSize=[0,0];firstUpdated(e){super.firstUpdated(e),this.movementSpace=this.element.parentElement}setup(){super.setup();const e=this.movementSpace.getBoundingClientRect();this.movementSpaceSize=[e.width,e.height]}createDraggableObject(){return new qt(this.element,this.blueprint,{draggableElement:this.movementSpace,ignoreTranslateCompensate:!0,moveEverywhere:!0,movementSpace:this.movementSpace,repositionOnClick:!0,stepSize:1})}adjustLocation(e,t){return this.locationChangeCallback?.(e,t),[e,t]}}class Vi extends $i{adjustLocation(e,t){const i=Math.round(this.movementSpaceSize[0]/2);e-=i,t=-(t-i);let[r,n]=oe.getPolarCoordinates(e,t);return r=Math.min(r,i),[e,t]=oe.getCartesianCoordinates(r,n),this.locationChangeCallback?.(e/i,t/i),[e=Math.round(e+i),t=Math.round(-t+i)]}}class Bi extends Kt{windowElement;setup(){super.setup(),this.windowElement=this.closest("ueb-window")}setLocation(e,t){super.setLocation(...this.template.adjustLocation(e,t))}}class Gi extends Bi{constructor(){super(),super.initialize({},new Vi)}static newObject(){return new Gi}initialize(){}}class Hi extends $i{adjustLocation(e,t){return e=oe.clamp(e,0,this.movementSpaceSize[0]),t=oe.clamp(t,0,this.movementSpaceSize[1]),this.locationChangeCallback?.(e/this.movementSpaceSize[0],1-t/this.movementSpaceSize[1]),[e,t]}}class Ri extends Bi{constructor(){super(),super.initialize({},new Hi)}static newObject(){return new Ri}initialize(){}}class zi extends Yt{constructor(e,t,i={}){i.consumeEvent=!0,super(e,t,i)}}class Fi extends zt{#Nt;#xt;#Pt=e=>this.element.selectedOption=e.target.selectedOptions[0].value;render(){return z` `}firstUpdated(e){super.firstUpdated(e),this.#Nt=this.element.querySelector("select:first-child"),this.#xt=this.element.querySelector("select:last-child");const t=new Event("input",{bubbles:!0});this.#Nt.dispatchEvent(t)}updated(e){super.updated(e);const t=this.#xt.getBoundingClientRect();this.element.style.setProperty("--ueb-dropdown-width",t.width+"px")}createInputObjects(){return[...super.createInputObjects(),new zi(this.element,this.blueprint)]}setSelectedValue(e){this.element.querySelector(`option[value="${e}"]`).defaultSelected=!0}getSelectedValue(){return this.#Nt.value}}class _i extends le{static properties={...super.properties,options:{type:Object},selectedOption:{type:String}};constructor(){super(),super.initialize({},new Fi),this.options=[],this.selectedOption=""}static newObject(e){return new _i}initialize(){}getValue(){return this.template.getSelectedValue()}}class ji extends zt{#kt=()=>{this.blueprint.acknowledgeEditText(!0),this.element.selectOnFocus&&getSelection().selectAllChildren(this.element)};#Lt=()=>{this.blueprint.acknowledgeEditText(!1),getSelection().removeAllRanges()};#At=e=>e.target.querySelectorAll("br").forEach((e=>e.remove()));#Mt=e=>{"Enter"!=e.code||e.shiftKey||e.target.blur()};initialize(e){super.initialize(e),this.element.classList.add("ueb-pin-input-content"),this.element.setAttribute("role","textbox"),"false"!==this.element.contentEditable&&(this.element.contentEditable="true")}firstUpdated(e){super.firstUpdated(e);const t=new Event("input",{bubbles:!0});this.element.dispatchEvent(t)}createInputObjects(){return[...super.createInputObjects(),new zi(this.element,this.blueprint)]}setup(){super.setup(),this.element.addEventListener("focus",this.#kt),this.element.addEventListener("focusout",this.#Lt),this.element.singleLine&&this.element.addEventListener("input",this.#At),this.element.blurOnEnter&&this.element.addEventListener("keydown",this.#Mt)}cleanup(){super.cleanup(),this.element.removeEventListener("focus",this.#kt),this.element.removeEventListener("focusout",this.#Lt),this.element.removeEventListener("input",this.#At),this.element.removeEventListener("keydown",this.#Mt)}}class Ui extends le{static properties={...super.properties,singleLine:{type:Boolean,attribute:"data-single-line",converter:Le.booleanConverter,reflect:!0},selectOnFocus:{type:Boolean,attribute:"data-select-focus",converter:Le.booleanConverter,reflect:!0},blurOnEnter:{type:Boolean,attribute:"data-blur-enter",converter:Le.booleanConverter,reflect:!0}};constructor(){super(),this.singleLine=!1,this.selectOnFocus=!0,this.blurOnEnter=!0,super.initialize({},new ji)}static newObject(){return new Ui}initialize(){}}class Ki extends ci{#Tt;#It=()=>{const e=this.element.getDefaultValue(!0);e.value=this.#Tt.checked,this.element.setDefaultValue(e)};firstUpdated(e){super.firstUpdated(e),this.#Tt=this.element.querySelector(".ueb-pin-input")}setup(){super.setup(),this.#Tt?.addEventListener("change",this.#It)}cleanup(){super.cleanup(),this.#Tt?.removeEventListener("change",this.#It)}createInputObjects(){return[...super.createInputObjects(),new zi(this.#Tt,this.blueprint)]}renderInput(){return z``}}class Yi extends ci{static singleLineInput=!1;static selectOnFocus=!0;static saveEachInputChange=!1;#Ot;get inputWrapper(){return this.#Ot}#Dt;static stringFromInputToUE(e){return e.replace(/(?=\n\s*)\n$/,"")}static stringFromUEToInput(e){return e.replaceAll(/(?:\r|(?<=(?:^|[^\\])(?:\\\\)*)\\r)(?=\n)/g,"").replace(/(?<=\n\s*)$/,"\n")}#$t=()=>this.setInputs(this.getInputs(),!0);#Vt=e=>this.#Bt(e.target);#Bt(e){if(this.element.querySelector(".ueb-pin-name")?.getBoundingClientRect().width<20)return;const t=this.blueprint.scaleCorrect(this.#Ot.getBoundingClientRect().width)+this.nameWidth,i=this.element.classList.contains("ueb-pin-input-wrap");!i&&t>ae.pinInputWrapWidth?this.element.classList.add("ueb-pin-input-wrap"):i&&t<=ae.pinInputWrapWidth&&this.element.classList.remove("ueb-pin-input-wrap")}firstUpdated(e){super.firstUpdated(e);this.constructor.canWrapInput&&this.isInputRendered()&&(this.element.addEventListener("input",this.#Vt),this.nameWidth=this.blueprint.scaleCorrect(this.element.querySelector(".ueb-pin-name")?.getBoundingClientRect().width??0)),this.#Ot=this.element.querySelector(".ueb-pin-input-wrapper"),this.#Dt=[...this.element.querySelectorAll("ueb-input")]}setup(){super.setup();const e=this.constructor;e.saveEachInputChange?this.element.addEventListener("input",this.#$t):this.element.addEventListener("focusout",this.#$t),e.canWrapInput&&this.isInputRendered()&&(this.element.addEventListener("input",this.#Vt),this.element.nodeElement.addEventListener(ae.nodeUpdateEventName,this.#Vt))}cleanup(){super.cleanup(),this.element.nodeElement.removeEventListener(ae.nodeUpdateEventName,this.#Vt),this.element.removeEventListener("input",this.#Vt),this.element.removeEventListener("input",this.#$t),this.element.removeEventListener("focusout",this.#$t)}getInput(){return this.getInputs().reduce(((e,t)=>e+t),"")}getInputs(){return this.#Dt.map((e=>oe.clearHTMLWhitespace(e.innerHTML)))}setInputs(e=[],t=!0){this.#Dt.forEach(this.constructor.singleLineInput?(t,i)=>t.innerText=e[i]:(t,i)=>t.innerText=e[i].replaceAll("\n","")),t&&this.setDefaultValue(e.map((e=>Yi.stringFromInputToUE(e))),e),this.element.requestUpdate(),this.element.updateComplete.then((()=>this.element.nodeElement.acknowledgeUpdate()))}setDefaultValue(e=[],t=e){this.element.setDefaultValue(e.join(""))}renderInput(){const e=this.constructor,t=e.singleLineInput,i=e.selectOnFocus;return z`
`}}class qi extends ci{renderIcon(){return ce.execPin}renderName(){let e=this.element.entity.PinName?.toString();if(this.element.entity.PinFriendlyName)e=this.element.entity.PinFriendlyName.toString();else if("execute"===e||"then"===e)return z``;return z`${this.element.getPinDisplayName()}`}}class Xi extends Yi{static singleLineInput=!0;setInputs(e=[],t=!1){if(e&&0!=e.length||(e=[this.getInput()]),super.setInputs(e,!1),t){let i=[];for(const r of e){let e=parseFloat(r);isNaN(e)&&(e=0,t=!1),i.push(e)}this.setDefaultValue(i,e)}}setDefaultValue(e=[],t){const i=this.element.getDefaultValue();i.value=e[0],this.element.setDefaultValue(i),this.element.requestUpdate()}}class Zi extends Xi{renderInput(){return z`
`}}
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
- */const Ui=1;class Ki{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}
+ */const Wi=1;class Qi{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}
/**
* @license
* Copyright 2018 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
- */const Yi="important",qi=" !"+Yi,Xi=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends Ki{constructor(e){if(super(e),e.type!==Ui||"style"!==e.name||e.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce(((t,i)=>{const s=e[i];return null==s?t:t+`${i=i.includes("-")?i:i.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${s};`}),"")}update(e,[t]){const{style:i}=e.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(t)),this.render(t);for(const e of this.ft)null==t[e]&&(this.ft.delete(e),e.includes("-")?i.removeProperty(e):i[e]=null);for(const e in t){const s=t[e];if(null!=s){this.ft.add(e);const t="string"==typeof s&&s.endsWith(qi);e.includes("-")||t?i.setProperty(e,t?s.slice(0,-11):s,t?Yi:""):i[e]=s}}return F}});class Zi extends Yt{toggleAdvancedDisplayHandler;getDraggableElement(){return this.element.querySelector(".ueb-window-top")}createDraggableObject(){return new _t(this.element,this.blueprint,{draggableElement:this.getDraggableElement(),ignoreScale:!0,ignoreTranslateCompensate:!1,movementSpace:this.blueprint,stepSize:1})}setup(){const e=this.blueprint.template.gridLeftVisibilityBoundary(),t=this.blueprint.template.gridTopVisibilityBoundary();this.element.locationX=this.blueprint.scaleCorrectReverse(this.blueprint.mousePosition[0]-e),this.element.locationY=this.blueprint.scaleCorrectReverse(this.blueprint.mousePosition[1]-t),this.element.updateComplete.then((()=>{const e=this.blueprint.getBoundingClientRect();this.element.locationX+this.element.sizeX>e.width&&(this.element.locationX=e.width-this.element.sizeX),this.element.locationX=Math.max(0,this.element.locationX),this.element.locationY+this.element.sizeY>e.height&&(this.element.locationY=e.height-this.element.sizeY),this.element.locationY=Math.max(0,this.element.locationY)}))}render(){return z`
`}}class es extends _i{#ii(){return $e.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#si(){return $e.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);i.X.value=e[0],i.Y.value=e[1],this.element.setDefaultValue(i)}renderInput(){return z`
X
Y
`}}class ts extends _i{#ii(){return $e.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#si(){return $e.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}#ri(){return $e.printNumber(this.element.getDefaultValue()?.Z.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof Ve))throw new TypeError("Expected DefaultValue to be a VectorEntity");i.X.value=e[0],i.Y.value=e[1],i.Z.value=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return z`
`}},MUTABLE_REFERENCE:class extends si{renderIcon(){return ce.referencePin}},name:class extends zi{static singleLineInput=!0},real:Ji,rg:es,string:class extends zi{setDefaultValue(e=[],t){const i=this.element.getDefaultValue();i.value=e[0],this.element.setDefaultValue(i),this.element.requestUpdate()}},[ae.paths.linearColor]:class extends si{#oi;#li=e=>{e.preventDefault(),this.blueprint.setFocused(!0),this.#oi=Ae.getConstructor("ueb-window").newObject({type:new Wi,windowOptions:{getPinColor:()=>this.element.defaultValue,setPinColor:e=>this.element.setDefaultValue(e)}}),this.blueprint.append(this.#oi);const t=()=>{this.element.setDefaultValue(this.#oi.template.color)},i=()=>{this.#oi.removeEventListener(ae.windowApplyEventName,t),this.#oi.removeEventListener(ae.windowCloseEventName,i),this.#oi=null};this.#oi.addEventListener(ae.windowApplyEventName,t),this.#oi.addEventListener(ae.windowCloseEventName,i)};renderInput(){return z``}},[ae.paths.niagaraBool]:Ri,[ae.paths.niagaraFloat]:Ji,[ae.paths.niagaraInt32]:ji,[ae.paths.niagaraPosition]:ts,[ae.paths.rotator]:class extends _i{#ci(){return $e.printNumber(this.element.getDefaultValue()?.R.valueOf()??0)}#ui(){return $e.printNumber(this.element.getDefaultValue()?.P.valueOf()??0)}#si(){return $e.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}setDefaultValue(e=[],t=e){const i=this.element.getDefaultValue(!0);if(!(i instanceof dt))throw new TypeError("Expected DefaultValue to be a RotatorEntity");i.R.value=e[0],i.P.value=e[1],i.Y.value=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return z`
X
Y
Z
`}},[ae.paths.vector]:ts,[ae.paths.vector2D]:es,[ae.paths.vector2f]:es,[ae.paths.vector3f]:ts,[ae.paths.vector4f]:class extends _i{#ii(){return $e.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#si(){return $e.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}#ri(){return $e.printNumber(this.element.getDefaultValue()?.Z.valueOf()??0)}#hi(){return $e.printNumber(this.element.getDefaultValue()?.W.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof bt))throw new TypeError("Expected DefaultValue to be a Vector4DEntity");i.X.value=e[0],i.Y.value=e[1],i.Z.value=e[2],i.W.value=e[3],this.element.requestUpdate("DefaultValue",i)}renderInput(){return z`
X
Y
Z
W
`}}};function ss(e){if("Array"===e.PinType.ContainerType?.toString())return si;if(e.PinType.bIsReference?.valueOf()&&!e.PinType.bIsConst?.valueOf())return is.MUTABLE_REFERENCE;if(e.isExecution())return Fi;if("self"===e.PinName?.toString()&&"Target"===Ze(e))return Qi;const t=e.getType();return(e.isInput()?is[t]:si)??si}class rs extends le{static properties={pinId:{type:Ue,converter:{fromAttribute:(e,t)=>e?Ue.grammar.parse(e):null,toAttribute:(e,t)=>e?.toString()},attribute:"data-id",reflect:!0},pinType:{type:String,attribute:"data-type",reflect:!0},advancedView:{type:String,attribute:"data-advanced-view",reflect:!0},color:{type:Oe,converter:{fromAttribute:(e,t)=>e?Oe.getLinearColorFromAnyFormat().parse(e):null,toAttribute:(e,t)=>e?.toString()??""},attribute:"data-color",reflect:!0},defaultValue:{type:String,attribute:!1},isLinked:{type:Boolean,converter:Le.booleanConverter,attribute:"data-linked",reflect:!0},pinDirection:{type:String,attribute:"data-direction",reflect:!0},connectable:{type:Boolean,converter:Le.booleanConverter,attribute:"data-connectable",reflect:!0}};nodeElement;static newObject(e=new wt,t=new(ss(e)),i=void 0){const s=new rs;return s.initialize(e,t,i),s}initialize(e=new wt,t=new(ss(e)),i=void 0){this.nodeElement=i,this.advancedView=e.bAdvancedView?.valueOf(),this.isLinked=!1,this.connectable=!e.bNotConnectable?.valueOf(),super.initialize(e,t),this.pinId=this.entity.PinId,this.updateType(),this.defaultValue=this.entity.getDefaultValue(),this.pinDirection=e.isInput()?"input":e.isOutput()?"output":"hidden",this.color=rs.properties.color.converter.fromAttribute(this.entity.pinColor().toString())}setup(){super.setup(),this.nodeElement=this.closest("ueb-node")}updateType(){this.pinType=this.entity.getType();const e=rs.properties.color.converter.fromAttribute(this.entity.pinColor().toString());this.color?.equals(e)||(this.color=e,this.acknowledgeUpdate())}createPinReference(){return new lt(new et(this.nodeElement.getNodeName()),this.getPinId())}getPinId(){return this.entity.PinId}getPinName(){return this.entity.PinName?.toString()??""}getPinDisplayName(){return this.entity.pinTitle()}#pi(e){for(;e?.isKnot();){const t=e.nodeElement.getPinElements();e=(e=e===t[0]?t[1]:t[0]).isLinked?this.blueprint.getPin(e.getLinks()[0]):null}return e?.isKnot()?void 0:e}isInput(e=!1){let t=this;return e?this.#pi(t)?.isInput():t.entity.isInput()}isInputLoosely(){return this.isInput(!1)&&void 0===this.isInput(!0)}isInputVisually(){const e=this.nodeElement.template,t=this.isKnot();return t&&this.isInput()!=e.switchDirectionsVisually||!t&&this.isInput()}isOutput(e=!1){let t=this;return e?this.#pi(t)?.isOutput():t.entity.isOutput()}isOutputLoosely(){return this.isOutput(!1)&&void 0===this.isOutput(!0)}isOutputVisually(){const e=this.nodeElement.template,t=this.isKnot();return t&&this.isOutput()!=e.switchDirectionsVisually||!t&&this.isOutput()}isKnot(){return this.nodeElement?.getType()==ae.paths.knot}getLinkLocation(e=!1){return this.template.getLinkLocation(e)}getNodeElement(){return this.nodeElement}getLinks(){return this.entity.LinkedTo?.valueOf()??[]}getDefaultValue(e=!1){return this.defaultValue=this.entity.getDefaultValue(e)}setDefaultValue(e){this.entity.DefaultValue=e,this.defaultValue=e,this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName()}sanitizeLinks(e=[]){this.entity.LinkedTo=new wt.attributes.LinkedTo(this.entity.LinkedTo?.valueOf().filter((t=>{let i=this.blueprint.getPin(t);if(i){if(e.length&&!e.includes(i.nodeElement))return!1;let t=this.blueprint.getLink(this,i);t||(t=Ae.getConstructor("ueb-link").newObject(this,i),this.blueprint.addGraphElement(t))}return i}))),this.isLinked=this.entity.isLinked()}linkTo(e){const t=this.createPinReference();this.isLinked&&this.entity.isExecution()&&this.isOutput(!0)&&this.getLinks().some((e=>!t.equals(e)))&&(this.isKnot(),this.unlinkFromAll()),this.entity.linkTo(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName())}unlinkFrom(e,t=!0){this.entity.unlinkFrom(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),t&&this.blueprint.getLink(this,e)?.remove(),this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName())}unlinkFromAll(){this.getLinks().map((e=>this.blueprint.getPin(e))).forEach((e=>this.unlinkFrom(e)))}redirectLink(e,t){const i=this.getLinks().findIndex((t=>t.objectName.toString()==e.getNodeElement().getNodeName()&&t.pinGuid.toString()==e.entity.PinId.toString()));return i>=0&&(this.entity.LinkedTo.valueOf()[i]=t,!0)}acknowledgeUpdate(){let e=new CustomEvent(ae.pinUpdateEventName);this.dispatchEvent(e)}}class ns{constructor(e=e=>e,t=null){this.array=new Uint32Array(t),this.comparisonValueSupplier=e,this.length=0,this.currentPosition=0}get(e){return e>=0&&e=0&&this.currentPosition=0&&this.currentPosition0?this.get(this.currentPosition-1):null}getPrevValue(){return this.currentPosition>0?this.comparisonValueSupplier(this.get(this.currentPosition-1)):Number.MIN_SAFE_INTEGER}shiftLeft(e,t=1){this.array.set(this.array.subarray(e+t),e)}shiftRight(e,t=1){this.array.set(this.array.subarray(e,-t),e+t)}}class as{constructor(e,t,i,s){this.initialPosition=e,this.finalPosition=e,this.metadata=new Array(t.length),this.primaryOrder=new ns((e=>this.metadata[e].primaryBoundary)),this.secondaryOrder=new ns((e=>this.metadata[e].secondaryBoundary)),this.selectFunc=s,this.rectangles=t,this.primaryOrder.reserve(this.rectangles.length),this.secondaryOrder.reserve(this.rectangles.length),t.forEach(((e,t)=>{let r={primaryBoundary:this.initialPosition[0],secondaryBoundary:this.initialPosition[1],rectangle:t,onSecondaryAxis:!1};this.metadata[t]=r,s(e,!1);const n=i(e);this.initialPosition[1]{if(this.metadata[i].onSecondaryAxis)this.selectFunc(this.rectangles[i],s);else if(s){this.secondaryOrder.insert(i,e[1]);const s=this.metadata[i].secondaryBoundary;Math.sign(e[1]-s)==t[1]&&Math.sign(s-this.initialPosition[1])==t[1]&&this.selectFunc(this.rectangles[i],!0)}else this.selectFunc(this.rectangles[i],!1),this.secondaryOrder.remove(i);this.computeBoundaries(),this.selectTo(e)};e[0]this.boundaries.primaryN.v&&e[0]this.boundaries.primaryP.v&&(++this.primaryOrder.currentPosition,i(this.boundaries.primaryP.i,this.initialPosition[0]{this.selectFunc(this.rectangles[t],i),this.computeBoundaries(),this.selectTo(e)};e[1]this.boundaries.secondaryN.v&&e[1]this.boundaries.secondaryP.v&&(++this.secondaryOrder.currentPosition,s(this.boundaries.secondaryP.i,this.initialPosition[1]cs.#di[e],toAttribute:(e,t)=>Object.entries(cs.#di).find((([t,i])=>e.constructor===i))?.[0]}}};static newObject(e={},t=e.type??new Zi){const i=new cs;return i.initialize(e,t),i}initialize(e={},t=e.type??new Zi){e.windowOptions??={},this.type=e.type,this.windowOptions=e.windowOptions,super.initialize(e,t)}computeSizes(){const e=this.getBoundingClientRect();this.sizeX=e.width,this.sizeY=e.height}cleanup(){super.cleanup(),this.acknowledgeClose()}acknowledgeClose(){let e=new CustomEvent(ae.windowCloseEventName);this.dispatchEvent(e)}}class us extends ke{static attributes={...super.attributes,VariableGuid:Ue};static grammar=this.createGrammar();static{ke.unknownEntity=this}static createGrammar(){return Pe.seq(Pe.reg(new RegExp(`(${Te.Regex.Path.source}|${Te.Regex.Symbol.source}\\s*)?\\(\\s*`),1),Pe.seq(Te.attributeName,Te.equalSeparation).map((([e,t])=>e)).chain((e=>this.unknownEntityGrammar.map((t=>i=>i[e]=t)))).sepBy(Te.commaSeparation),Pe.reg(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>{e??="";let s={};return e.length&&(s.lookbehind=e),t.forEach((e=>e(s))),new this(s)})).label("UnknownKeysEntity")}}ke.unknownEntityGrammar=Pe.alt(Le.grammar,Ue.grammar,Pe.str("None").map((()=>ot.createNoneInstance())),Ct.grammar,$e.grammar,Pe.alt(ot.fullReferenceGrammar,Pe.regArray(new RegExp(`"(${Te.Regex.Path.source})'(${Te.Regex.Path.source}|${Te.symbol.getParser().regexp.source})'"`)).map((([e,t,i])=>new ot(t,i,((e,t)=>`"${e}'${t}'"`))))),Qe.grammar,rt.grammar,st.grammar,nt.grammar,lt.grammar,bt.grammar,Ve.grammar,ht.grammar,dt.grammar,Oe.grammar,us.grammar,et.grammar,_e.of(lt).grammar,_e.of(Me.accepting($e,Qe,et)).grammar,Pe.lazy((()=>_e.createGrammar(ke.unknownEntityGrammar)))),function(){const e=(e,t)=>{customElements.define(e,t),Ae.registerElement(e,t)};e("ueb-color-handler",Ii),e("ueb-dropdown",Bi),e("ueb-input",Hi),e("ueb-link",Rt),e("ueb-node",mi),e("ueb-pin",rs),e("ueb-selector",ls),e("ueb-ui-slider",Di),e("ueb-window",cs)}();export{Li as Blueprint,ae as Configuration,Rt as LinkElement,mi as NodeElement,oe as Utility};
+ */const Ji="important",er=" !"+Ji,tr=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends Qi{constructor(e){if(super(e),e.type!==Wi||"style"!==e.name||e.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce(((t,i)=>{const r=e[i];return null==r?t:t+`${i=i.includes("-")?i:i.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${r};`}),"")}update(e,[t]){const{style:i}=e.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(t)),this.render(t);for(const e of this.ft)null==t[e]&&(this.ft.delete(e),e.includes("-")?i.removeProperty(e):i[e]=null);for(const e in t){const r=t[e];if(null!=r){this.ft.add(e);const t="string"==typeof r&&r.endsWith(er);e.includes("-")||t?i.setProperty(e,t?r.slice(0,-11):r,t?Ji:""):i[e]=r}}return F}});class ir extends Jt{toggleAdvancedDisplayHandler;getDraggableElement(){return this.element.querySelector(".ueb-window-top")}createDraggableObject(){return new qt(this.element,this.blueprint,{draggableElement:this.getDraggableElement(),ignoreScale:!0,ignoreTranslateCompensate:!1,movementSpace:this.blueprint,stepSize:1})}setup(){const e=this.blueprint.template.gridLeftVisibilityBoundary(),t=this.blueprint.template.gridTopVisibilityBoundary();this.element.locationX=this.blueprint.scaleCorrectReverse(this.blueprint.mousePosition[0]-e),this.element.locationY=this.blueprint.scaleCorrectReverse(this.blueprint.mousePosition[1]-t),this.element.updateComplete.then((()=>{const e=this.blueprint.getBoundingClientRect();this.element.locationX+this.element.sizeX>e.width&&(this.element.locationX=e.width-this.element.sizeX),this.element.locationX=Math.max(0,this.element.locationX),this.element.locationY+this.element.sizeY>e.height&&(this.element.locationY=e.height-this.element.sizeY),this.element.locationY=Math.max(0,this.element.locationY)}))}render(){return z`
`}renderWindowName(){return z`${ae.colorWindowName}`}}class nr extends ci{setDefaultValue(e=[],t=e){}renderInput(){return z`
`}}class sr extends Xi{renderInput(){return z`
`}}class ar extends Xi{#ii(){return Ve.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#ri(){return Ve.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);i.X.value=e[0],i.Y.value=e[1],this.element.setDefaultValue(i)}renderInput(){return z`
X
Y
`}}class or extends Xi{#ii(){return Ve.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#ri(){return Ve.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}#ni(){return Ve.printNumber(this.element.getDefaultValue()?.Z.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof Be))throw new TypeError("Expected DefaultValue to be a VectorEntity");i.X.value=e[0],i.Y.value=e[1],i.Z.value=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return z`
`}},MUTABLE_REFERENCE:class extends ci{renderIcon(){return ce.referencePin}},name:class extends Yi{static singleLineInput=!0},real:sr,rg:ar,string:class extends Yi{setDefaultValue(e=[],t){const i=this.element.getDefaultValue();i.value=e[0],this.element.setDefaultValue(i),this.element.requestUpdate()}},[lr.linearColor]:class extends ci{#oi;#li=e=>{e.preventDefault(),this.blueprint.setFocused(!0),this.#oi=Ae.getConstructor("ueb-window").newObject({type:new rr,windowOptions:{getPinColor:()=>this.element.defaultValue,setPinColor:e=>this.element.setDefaultValue(e)}}),this.blueprint.append(this.#oi);const t=()=>{this.element.setDefaultValue(this.#oi.template.color)},i=()=>{this.#oi.removeEventListener(ae.windowApplyEventName,t),this.#oi.removeEventListener(ae.windowCloseEventName,i),this.#oi=null};this.#oi.addEventListener(ae.windowApplyEventName,t),this.#oi.addEventListener(ae.windowCloseEventName,i)};renderInput(){return z``}},[lr.niagaraBool]:Ki,[lr.niagaraFloat]:sr,[lr.niagaraInt32]:Zi,[lr.niagaraPosition]:or,[lr.rotator]:class extends Xi{#ci(){return Ve.printNumber(this.element.getDefaultValue()?.R.valueOf()??0)}#ui(){return Ve.printNumber(this.element.getDefaultValue()?.P.valueOf()??0)}#ri(){return Ve.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}setDefaultValue(e=[],t=e){const i=this.element.getDefaultValue(!0);if(!(i instanceof vt))throw new TypeError("Expected DefaultValue to be a RotatorEntity");i.R.value=e[0],i.P.value=e[1],i.Y.value=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return z`
X
Y
Z
`}},[lr.vector]:or,[lr.vector2D]:ar,[lr.vector2f]:ar,[lr.vector3f]:or,[lr.vector4f]:class extends Xi{#ii(){return Ve.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#ri(){return Ve.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}#ni(){return Ve.printNumber(this.element.getDefaultValue()?.Z.valueOf()??0)}#hi(){return Ve.printNumber(this.element.getDefaultValue()?.W.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof wt))throw new TypeError("Expected DefaultValue to be a Vector4DEntity");i.X.value=e[0],i.Y.value=e[1],i.Z.value=e[2],i.W.value=e[3],this.element.requestUpdate("DefaultValue",i)}renderInput(){return z`
X
Y
Z
W
`}}};function ur(e){if("Array"===e.PinType.ContainerType?.toString())return ci;if(e.PinType.bIsReference?.valueOf()&&!e.PinType.bIsConst?.valueOf())return cr.MUTABLE_REFERENCE;if(e.isExecution())return qi;if("self"===e.PinName?.toString()&&"Target"===et(e))return nr;const t=e.getType();return(e.isInput()?cr[t]:ci)??ci}class hr extends le{static properties={pinId:{type:qe,converter:{fromAttribute:(e,t)=>e?qe.grammar.parse(e):null,toAttribute:(e,t)=>e?.toString()},attribute:"data-id",reflect:!0},pinType:{type:String,attribute:"data-type",reflect:!0},advancedView:{type:String,attribute:"data-advanced-view",reflect:!0},color:{type:Oe,converter:{fromAttribute:(e,t)=>e?Oe.getLinearColorFromAnyFormat().parse(e):null,toAttribute:(e,t)=>e?.toString()??""},attribute:"data-color",reflect:!0},defaultValue:{type:String,attribute:!1},isLinked:{type:Boolean,converter:Le.booleanConverter,attribute:"data-linked",reflect:!0},pinDirection:{type:String,attribute:"data-direction",reflect:!0},connectable:{type:Boolean,converter:Le.booleanConverter,attribute:"data-connectable",reflect:!0}};nodeElement;static newObject(e=new Nt,t=new(ur(e)),i=void 0){const r=new hr;return r.initialize(e,t,i),r}initialize(e=new Nt,t=new(ur(e)),i=void 0){this.nodeElement=i,this.advancedView=e.bAdvancedView?.valueOf(),this.isLinked=!1,this.connectable=!e.bNotConnectable?.valueOf(),super.initialize(e,t),this.pinId=this.entity.PinId,this.updateType(),this.defaultValue=this.entity.getDefaultValue(),this.pinDirection=e.isInput()?"input":e.isOutput()?"output":"hidden",this.color=hr.properties.color.converter.fromAttribute(this.entity.pinColor().toString())}setup(){super.setup(),this.nodeElement=this.closest("ueb-node")}updateType(){this.pinType=this.entity.getType();const e=hr.properties.color.converter.fromAttribute(this.entity.pinColor().toString());this.color?.equals(e)||(this.color=e,this.acknowledgeUpdate())}createPinReference(){return new pt(new nt(this.nodeElement.getNodeName()),this.getPinId())}getPinId(){return this.entity.PinId}getPinName(){return this.entity.PinName?.toString()??""}getPinDisplayName(){return this.entity.pinTitle()}#pi(e){for(;e?.isKnot();){const t=e.nodeElement.getPinElements();e=(e=e===t[0]?t[1]:t[0]).isLinked?this.blueprint.getPin(e.getLinks()[0]):null}return e?.isKnot()?void 0:e}isInput(e=!1){let t=this;return e?this.#pi(t)?.isInput():t.entity.isInput()}isInputLoosely(){return this.isInput(!1)&&void 0===this.isInput(!0)}isInputVisually(){const e=this.nodeElement.template,t=this.isKnot();return t&&this.isInput()!=e.switchDirectionsVisually||!t&&this.isInput()}isOutput(e=!1){let t=this;return e?this.#pi(t)?.isOutput():t.entity.isOutput()}isOutputLoosely(){return this.isOutput(!1)&&void 0===this.isOutput(!0)}isOutputVisually(){const e=this.nodeElement.template,t=this.isKnot();return t&&this.isOutput()!=e.switchDirectionsVisually||!t&&this.isOutput()}isKnot(){return this.nodeElement?.getType()==ae.paths.knot}getLinkLocation(e=!1){return this.template.getLinkLocation(e)}getNodeElement(){return this.nodeElement}getLinks(){return this.entity.LinkedTo?.valueOf()??[]}getDefaultValue(e=!1){return this.defaultValue=this.entity.getDefaultValue(e)}setDefaultValue(e){this.entity.DefaultValue=e,this.defaultValue=e,this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName()}sanitizeLinks(e=[]){this.entity.LinkedTo=new Nt.attributes.LinkedTo(this.entity.LinkedTo?.valueOf().filter((t=>{let i=this.blueprint.getPin(t);if(i){if(e.length&&!e.includes(i.nodeElement))return!1;let t=this.blueprint.getLink(this,i);t||(t=Ae.getConstructor("ueb-link").newObject(this,i),this.blueprint.addGraphElement(t))}return i}))),this.isLinked=this.entity.isLinked()}linkTo(e){const t=this.createPinReference();this.isLinked&&this.entity.isExecution()&&this.isOutput(!0)&&this.getLinks().some((e=>!t.equals(e)))&&(this.isKnot(),this.unlinkFromAll()),this.entity.linkTo(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName())}unlinkFrom(e,t=!0){this.entity.unlinkFrom(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),t&&this.blueprint.getLink(this,e)?.remove(),this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName())}unlinkFromAll(){this.getLinks().map((e=>this.blueprint.getPin(e))).forEach((e=>this.unlinkFrom(e)))}redirectLink(e,t){const i=this.getLinks().findIndex((t=>t.objectName.toString()==e.getNodeElement().getNodeName()&&t.pinGuid.toString()==e.entity.PinId.toString()));return i>=0&&(this.entity.LinkedTo.valueOf()[i]=t,!0)}acknowledgeUpdate(){let e=new CustomEvent(ae.pinUpdateEventName);this.dispatchEvent(e)}}class pr{constructor(e=e=>e,t=null){this.array=new Uint32Array(t),this.comparisonValueSupplier=e,this.length=0,this.currentPosition=0}get(e){return e>=0&&e=0&&this.currentPosition=0&&this.currentPosition0?this.get(this.currentPosition-1):null}getPrevValue(){return this.currentPosition>0?this.comparisonValueSupplier(this.get(this.currentPosition-1)):Number.MIN_SAFE_INTEGER}shiftLeft(e,t=1){this.array.set(this.array.subarray(e+t),e)}shiftRight(e,t=1){this.array.set(this.array.subarray(e,-t),e+t)}}class dr{constructor(e,t,i,r){this.initialPosition=e,this.finalPosition=e,this.metadata=new Array(t.length),this.primaryOrder=new pr((e=>this.metadata[e].primaryBoundary)),this.secondaryOrder=new pr((e=>this.metadata[e].secondaryBoundary)),this.selectFunc=r,this.rectangles=t,this.primaryOrder.reserve(this.rectangles.length),this.secondaryOrder.reserve(this.rectangles.length),t.forEach(((e,t)=>{let n={primaryBoundary:this.initialPosition[0],secondaryBoundary:this.initialPosition[1],rectangle:t,onSecondaryAxis:!1};this.metadata[t]=n,r(e,!1);const s=i(e);this.initialPosition[1]{if(this.metadata[i].onSecondaryAxis)this.selectFunc(this.rectangles[i],r);else if(r){this.secondaryOrder.insert(i,e[1]);const r=this.metadata[i].secondaryBoundary;Math.sign(e[1]-r)==t[1]&&Math.sign(r-this.initialPosition[1])==t[1]&&this.selectFunc(this.rectangles[i],!0)}else this.selectFunc(this.rectangles[i],!1),this.secondaryOrder.remove(i);this.computeBoundaries(),this.selectTo(e)};e[0]this.boundaries.primaryN.v&&e[0]this.boundaries.primaryP.v&&(++this.primaryOrder.currentPosition,i(this.boundaries.primaryP.i,this.initialPosition[0]{this.selectFunc(this.rectangles[t],i),this.computeBoundaries(),this.selectTo(e)};e[1]this.boundaries.secondaryN.v&&e[1]this.boundaries.secondaryP.v&&(++this.secondaryOrder.currentPosition,r(this.boundaries.secondaryP.i,this.initialPosition[1]br.#di[e],toAttribute:(e,t)=>Object.entries(br.#di).find((([t,i])=>e.constructor===i))?.[0]}}};static newObject(e={},t=e.type??new ir){const i=new br;return i.initialize(e,t),i}initialize(e={},t=e.type??new ir){e.windowOptions??={},this.type=e.type,this.windowOptions=e.windowOptions,super.initialize(e,t)}computeSizes(){const e=this.getBoundingClientRect();this.sizeX=e.width,this.sizeY=e.height}cleanup(){super.cleanup(),this.acknowledgeClose()}acknowledgeClose(){let e=new CustomEvent(ae.windowCloseEventName);this.dispatchEvent(e)}}class vr extends ke{static attributes={...super.attributes,VariableGuid:qe};static grammar=this.createGrammar();static{ke.unknownEntity=this}static createGrammar(){return Pe.seq(Pe.reg(new RegExp(`(${Te.Regex.Path.source}|${Te.Regex.Symbol.source}\\s*)?\\(\\s*`),1),Pe.seq(Te.attributeName,Te.equalSeparation).map((([e,t])=>e)).chain((e=>this.unknownEntityGrammar.map((t=>i=>i[e]=t)))).sepBy(Te.commaSeparation),Pe.reg(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>{e??="";let r={};return e.length&&(r.lookbehind=e),t.forEach((e=>e(r))),new this(r)})).label("UnknownKeysEntity")}}ke.unknownEntityGrammar=Pe.alt(Le.grammar,qe.grammar,Pe.str("None").map((()=>ht.createNoneInstance())),Lt.grammar,Ve.grammar,Pe.alt(ht.fullReferenceGrammar,Pe.regArray(new RegExp(`"(${Te.Regex.Path.source})'(${Te.Regex.Path.source}|${Te.symbol.getParser().regexp.source})'"`)).map((([e,t,i])=>new ht(t,i,((e,t)=>`"${e}'${t}'"`))))),it.grammar,lt.grammar,ot.grammar,ct.grammar,pt.grammar,wt.grammar,Be.grammar,gt.grammar,vt.grammar,Oe.grammar,vr.grammar,nt.grammar,Ke.of(pt).grammar,Ke.of(Me.accepting(Ve,it,nt)).grammar,Pe.lazy((()=>Ke.createGrammar(ke.unknownEntityGrammar)))),function(){const e=(e,t)=>{customElements.define(e,t),Ae.registerElement(e,t)};e("ueb-color-handler",Gi),e("ueb-dropdown",_i),e("ueb-input",Ui),e("ueb-link",Ut),e("ueb-node",wi),e("ueb-pin",hr),e("ueb-selector",gr),e("ueb-ui-slider",Ri),e("ueb-window",br)}();export{Di as Blueprint,ae as Configuration,Ut as LinkElement,wi as NodeElement,oe as Utility};
diff --git a/js/decoding/nodeColor.js b/js/decoding/nodeColor.js
index dab1cc5..63518f3 100755
--- a/js/decoding/nodeColor.js
+++ b/js/decoding/nodeColor.js
@@ -1,26 +1,28 @@
import Configuration from "../Configuration.js"
import LinearColorEntity from "../entity/LinearColorEntity.js"
+const p = Configuration.paths
+
/** @param {ObjectEntity} entity */
export default function nodeColor(entity) {
switch (entity.getType()) {
- case Configuration.paths.materialExpressionConstant2Vector:
- case Configuration.paths.materialExpressionConstant3Vector:
- case Configuration.paths.materialExpressionConstant4Vector:
+ case p.materialExpressionConstant2Vector:
+ case p.materialExpressionConstant3Vector:
+ case p.materialExpressionConstant4Vector:
return Configuration.nodeColors.yellow
- case Configuration.paths.materialExpressionFunctionInput:
- case Configuration.paths.materialExpressionTextureCoordinate:
- case Configuration.paths.materialExpressionWorldPosition:
- case Configuration.paths.pcgEditorGraphNodeInput:
- case Configuration.paths.pcgEditorGraphNodeOutput:
+ case p.materialExpressionFunctionInput:
+ case p.materialExpressionTextureCoordinate:
+ case p.materialExpressionWorldPosition:
+ case p.pcgEditorGraphNodeInput:
+ case p.pcgEditorGraphNodeOutput:
return Configuration.nodeColors.red
- case Configuration.paths.makeStruct:
+ case p.makeStruct:
return Configuration.nodeColors.darkBlue
- case Configuration.paths.materialExpressionMaterialFunctionCall:
+ case p.materialExpressionMaterialFunctionCall:
return Configuration.nodeColors.blue
- case Configuration.paths.materialExpressionTextureSample:
+ case p.materialExpressionTextureSample:
return Configuration.nodeColors.darkTurquoise
- case Configuration.paths.niagaraNodeInput:
+ case p.niagaraNodeInput:
switch (entity["Usage"]?.toString()) {
case "Attribute": return Configuration.nodeColors.intenseGreen
case "Parameter": return Configuration.nodeColors.red
@@ -31,29 +33,29 @@ export default function nodeColor(entity) {
}
}
switch (entity.getClass()) {
- case Configuration.paths.niagaraNodeFunctionCall:
+ case p.niagaraNodeFunctionCall:
return Configuration.nodeColors.darkerBlue
- case Configuration.paths.dynamicCast:
+ case p.dynamicCast:
return Configuration.nodeColors.turquoise
- case Configuration.paths.inputDebugKey:
- case Configuration.paths.inputKey:
+ case p.inputDebugKey:
+ case p.inputKey:
return Configuration.nodeColors.red
- case Configuration.paths.createDelegate:
- case Configuration.paths.enumLiteral:
- case Configuration.paths.makeArray:
- case Configuration.paths.makeMap:
- case Configuration.paths.materialGraphNode:
- case Configuration.paths.select:
+ case p.createDelegate:
+ case p.enumLiteral:
+ case p.makeArray:
+ case p.makeMap:
+ case p.materialGraphNode:
+ case p.select:
return Configuration.nodeColors.green
- case Configuration.paths.executionSequence:
- case Configuration.paths.ifThenElse:
- case Configuration.paths.macro:
- case Configuration.paths.multiGate:
+ case p.executionSequence:
+ case p.ifThenElse:
+ case p.macro:
+ case p.multiGate:
return Configuration.nodeColors.gray
- case Configuration.paths.functionEntry:
- case Configuration.paths.functionResult:
+ case p.functionEntry:
+ case p.functionResult:
return Configuration.nodeColors.violet
- case Configuration.paths.timeline:
+ case p.timeline:
return Configuration.nodeColors.yellow
}
if (entity.switchTarget()) {
diff --git a/js/decoding/nodeIcon.js b/js/decoding/nodeIcon.js
index ef4c211..177d42e 100755
--- a/js/decoding/nodeIcon.js
+++ b/js/decoding/nodeIcon.js
@@ -2,50 +2,52 @@ import Configuration from "../Configuration.js"
import SVGIcon from "../SVGIcon.js"
import nodeTitle from "./nodeTitle.js"
+const p = Configuration.paths
+
/** @param {ObjectEntity} entity */
export default function nodeIcon(entity) {
if (entity.isMaterial() || entity.isPcg() || entity.isNiagara()) {
return null
}
switch (entity.getType()) {
- case Configuration.paths.addDelegate:
- case Configuration.paths.asyncAction:
- case Configuration.paths.callDelegate:
- case Configuration.paths.clearDelegate:
- case Configuration.paths.createDelegate:
- case Configuration.paths.functionEntry:
- case Configuration.paths.functionResult:
- case Configuration.paths.removeDelegate:
+ case p.addDelegate:
+ case p.asyncAction:
+ case p.callDelegate:
+ case p.clearDelegate:
+ case p.createDelegate:
+ case p.functionEntry:
+ case p.functionResult:
+ case p.removeDelegate:
return SVGIcon.node
- case Configuration.paths.customEvent: return SVGIcon.event
- case Configuration.paths.doN: return SVGIcon.doN
- case Configuration.paths.doOnce: return SVGIcon.doOnce
- case Configuration.paths.dynamicCast: return SVGIcon.cast
- case Configuration.paths.enumLiteral: return SVGIcon.enum
- case Configuration.paths.event: return SVGIcon.event
- case Configuration.paths.executionSequence:
- case Configuration.paths.multiGate:
+ case p.customEvent: return SVGIcon.event
+ case p.doN: return SVGIcon.doN
+ case p.doOnce: return SVGIcon.doOnce
+ case p.dynamicCast: return SVGIcon.cast
+ case p.enumLiteral: return SVGIcon.enum
+ case p.event: return SVGIcon.event
+ case p.executionSequence:
+ case p.multiGate:
return SVGIcon.sequence
- case Configuration.paths.flipflop:
+ case p.flipflop:
return SVGIcon.flipflop
- case Configuration.paths.forEachElementInEnum:
- case Configuration.paths.forLoop:
- case Configuration.paths.forLoopWithBreak:
- case Configuration.paths.whileLoop:
+ case p.forEachElementInEnum:
+ case p.forLoop:
+ case p.forLoopWithBreak:
+ case p.whileLoop:
return SVGIcon.loop
- case Configuration.paths.forEachLoop:
- case Configuration.paths.forEachLoopWithBreak:
+ case p.forEachLoop:
+ case p.forEachLoopWithBreak:
return SVGIcon.forEachLoop
- case Configuration.paths.ifThenElse: return SVGIcon.branchNode
- case Configuration.paths.isValid: return SVGIcon.questionMark
- case Configuration.paths.makeArray: return SVGIcon.makeArray
- case Configuration.paths.makeMap: return SVGIcon.makeMap
- case Configuration.paths.makeSet: return SVGIcon.makeSet
- case Configuration.paths.makeStruct: return SVGIcon.makeStruct
- case Configuration.paths.metasoundEditorGraphExternalNode: return SVGIcon.metasoundFunction
- case Configuration.paths.select: return SVGIcon.select
- case Configuration.paths.spawnActorFromClass: return SVGIcon.spawnActor
- case Configuration.paths.timeline: return SVGIcon.timer
+ case p.ifThenElse: return SVGIcon.branchNode
+ case p.isValid: return SVGIcon.questionMark
+ case p.makeArray: return SVGIcon.makeArray
+ case p.makeMap: return SVGIcon.makeMap
+ case p.makeSet: return SVGIcon.makeSet
+ case p.makeStruct: return SVGIcon.makeStruct
+ case p.metasoundEditorGraphExternalNode: return SVGIcon.metasoundFunction
+ case p.select: return SVGIcon.select
+ case p.spawnActorFromClass: return SVGIcon.spawnActor
+ case p.timeline: return SVGIcon.timer
}
if (entity.switchTarget()) {
return SVGIcon.switch
@@ -53,7 +55,7 @@ export default function nodeIcon(entity) {
if (nodeTitle(entity).startsWith("Break")) {
return SVGIcon.breakStruct
}
- if (entity.getClass() === Configuration.paths.macro) {
+ if (entity.getClass() === p.macro) {
return SVGIcon.macro
}
const hidValue = entity.getHIDAttribute()?.toString()
@@ -73,7 +75,7 @@ export default function nodeIcon(entity) {
if (entity.getDelegatePin()) {
return SVGIcon.event
}
- if (entity.ObjectRef?.type === Configuration.paths.ambientSound) {
+ if (entity.ObjectRef?.type === p.ambientSound) {
return SVGIcon.sound
}
return SVGIcon.functionSymbol
diff --git a/js/decoding/nodeSubtitle.js b/js/decoding/nodeSubtitle.js
index d8c9039..bc9ac6a 100755
--- a/js/decoding/nodeSubtitle.js
+++ b/js/decoding/nodeSubtitle.js
@@ -2,16 +2,18 @@ import Configuration from "../Configuration.js"
import Utility from "../Utility.js"
import pinTitle from "./pinTitle.js"
+const p = Configuration.paths
+
/**
* @param {ObjectEntity} entity
* @returns {String?}
*/
export default function nodeSubtitle(entity) {
switch (entity.getType()) {
- case Configuration.paths.addDelegate:
- case Configuration.paths.clearDelegate:
- case Configuration.paths.callDelegate:
- case Configuration.paths.removeDelegate:
+ case p.addDelegate:
+ case p.clearDelegate:
+ case p.callDelegate:
+ case p.removeDelegate:
return null
}
const targetPin = entity
diff --git a/js/decoding/nodeTemplate.js b/js/decoding/nodeTemplate.js
index ad29011..eb78fff 100755
--- a/js/decoding/nodeTemplate.js
+++ b/js/decoding/nodeTemplate.js
@@ -71,7 +71,7 @@ const niagaraOperationNodes = [
"Vector3::Cross",
]
-const paths = Configuration.paths
+const p = Configuration.paths
/**
* @param {ObjectEntity} nodeEntity
@@ -80,18 +80,18 @@ const paths = Configuration.paths
export default function nodeTemplateClass(nodeEntity) {
const className = nodeEntity.getClass()
if (
- className === paths.callFunction
- || className === paths.commutativeAssociativeBinaryOperator
- || className === paths.callArrayFunction
+ className === p.callFunction
+ || className === p.commutativeAssociativeBinaryOperator
+ || className === p.callArrayFunction
) {
const memberParent = nodeEntity.FunctionReference?.MemberParent?.path ?? ""
const memberName = nodeEntity.FunctionReference?.MemberName?.toString()
if (
memberName && (
- memberParent === paths.kismetArrayLibrary
- || memberParent === paths.kismetMathLibrary
- || memberParent === paths.kismetStringLibrary
- || memberParent === paths.typedElementHandleLibrary
+ memberParent === p.kismetArrayLibrary
+ || memberParent === p.kismetMathLibrary
+ || memberParent === p.kismetStringLibrary
+ || memberParent === p.typedElementHandleLibrary
)) {
if (memberName.startsWith("Conv_")) {
return VariableConversionNodeTemplate
@@ -145,37 +145,37 @@ export default function nodeTemplateClass(nodeEntity) {
return VariableOperationNodeTemplate
}
}
- if (memberParent === paths.blueprintSetLibrary) {
+ if (memberParent === p.blueprintSetLibrary) {
return VariableOperationNodeTemplate
}
- if (memberParent === paths.blueprintMapLibrary) {
+ if (memberParent === p.blueprintMapLibrary) {
return VariableOperationNodeTemplate
}
}
switch (className) {
- case paths.comment:
- case paths.materialGraphNodeComment:
+ case p.comment:
+ case p.materialGraphNodeComment:
return CommentNodeTemplate
- case paths.createDelegate:
+ case p.createDelegate:
return NodeTemplate
- case paths.metasoundEditorGraphExternalNode:
+ case p.metasoundEditorGraphExternalNode:
if (nodeEntity["ClassName"]?.["Name"] == "Add") {
return MetasoundOperationTemplate
}
return MetasoundNodeTemplate
- case paths.niagaraNodeOp:
+ case p.niagaraNodeOp:
if (niagaraOperationNodes.includes(nodeEntity.OpName?.toString())) {
return VariableOperationNodeTemplate
}
break
- case paths.promotableOperator:
+ case p.promotableOperator:
return VariableOperationNodeTemplate
- case paths.knot:
+ case p.knot:
return KnotNodeTemplate
- case paths.literal:
- case paths.self:
- case paths.variableGet:
- case paths.variableSet:
+ case p.literal:
+ case p.self:
+ case p.variableGet:
+ case p.variableSet:
return VariableAccessNodeTemplate
}
if (nodeEntity.isEvent()) {
diff --git a/js/decoding/nodeTitle.js b/js/decoding/nodeTitle.js
index 9818956..d23223b 100755
--- a/js/decoding/nodeTitle.js
+++ b/js/decoding/nodeTitle.js
@@ -5,7 +5,6 @@ import LinearColorEntity from "../entity/LinearColorEntity.js"
import MirroredEntity from "../entity/MirroredEntity.js"
import VectorEntity from "../entity/VectorEntity.js"
-const paths = Configuration.paths
const sequencerScriptingNameRegex = /\/Script\/SequencerScripting\.MovieSceneScripting(.+)Channel/
const keyNameValue = {
"A_AccentGrave": "à",
@@ -95,6 +94,8 @@ const niagaraNodeNames = {
"TWO_PI": `2 ${String.fromCharCode(0x03C0)}`,
}).map(([k, v]) => ["Numeric::" + k, v])),
}
+const p = Configuration.paths
+const format = Utility.formatStringName
/** @param {String} value */
function numberFromText(value = "") {
@@ -139,58 +140,58 @@ function keyName(value) {
export default function nodeTitle(entity) {
let value
switch (entity.getType()) {
- case paths.addDelegate:
+ case p.addDelegate:
value ??= "Bind Event to "
- case paths.clearDelegate:
+ case p.clearDelegate:
value ??= "Unbind all Events from "
- case paths.removeDelegate:
+ case p.removeDelegate:
value ??= "Unbind Event from "
- return value + Utility.formatStringName(
+ return value + format(
entity.DelegateReference?.MemberName?.toString().replace(/Delegate$/, "") ?? "None"
)
- case paths.asyncAction:
+ case p.asyncAction:
if (entity.ProxyFactoryFunctionName) {
- return Utility.formatStringName(entity.ProxyFactoryFunctionName?.toString())
+ return format(entity.ProxyFactoryFunctionName?.toString())
}
- case paths.actorBoundEvent:
- case paths.componentBoundEvent:
- return `${Utility.formatStringName(entity.DelegatePropertyName?.toString())} (${entity.ComponentPropertyName?.toString() ?? "Unknown"})`
- case paths.callDelegate:
+ case p.actorBoundEvent:
+ case p.componentBoundEvent:
+ return `${format(entity.DelegatePropertyName?.toString())} (${entity.ComponentPropertyName?.toString() ?? "Unknown"})`
+ case p.callDelegate:
return `Call ${entity.DelegateReference?.MemberName?.toString() ?? "None"}`
- case paths.createDelegate:
+ case p.createDelegate:
return "Create Event"
- case paths.customEvent:
+ case p.customEvent:
if (entity.CustomFunctionName) {
return entity.CustomFunctionName?.toString()
}
- case paths.dynamicCast:
+ case p.dynamicCast:
if (!entity.TargetType) {
return "Bad cast node" // Target type not found
}
return `Cast To ${entity.TargetType?.getName()}`
- case paths.enumLiteral:
+ case p.enumLiteral:
return `Literal enum ${entity.Enum?.getName()}`
- case paths.event:
+ case p.event:
return `Event ${(entity.EventReference?.MemberName?.toString() ?? "").replace(/^Receive/, "")}`
- case paths.executionSequence:
+ case p.executionSequence:
return "Sequence"
- case paths.forEachElementInEnum:
+ case p.forEachElementInEnum:
return `For Each ${entity.Enum?.getName()}`
- case paths.forEachLoopWithBreak:
+ case p.forEachLoopWithBreak:
return "For Each Loop with Break"
- case paths.functionEntry:
+ case p.functionEntry:
return entity.FunctionReference?.MemberName?.toString() === "UserConstructionScript"
? "Construction Script"
: entity.FunctionReference?.MemberName?.toString()
- case paths.functionResult:
+ case p.functionResult:
return "Return Node"
- case paths.ifThenElse:
+ case p.ifThenElse:
return "Branch"
- case paths.makeStruct:
+ case p.makeStruct:
if (entity.StructType) {
return `Make ${entity.StructType.getName()}`
}
- case paths.materialExpressionComponentMask: {
+ case p.materialExpressionComponentMask: {
const materialObject = entity.getMaterialSubobject()
if (materialObject) {
return `Mask ( ${Configuration.rgba
@@ -199,15 +200,15 @@ export default function nodeTitle(entity) {
.join("")})`
}
}
- case paths.materialExpressionConstant:
+ case p.materialExpressionConstant:
value ??= [entity.getCustomproperties().find(pinEntity => pinEntity.PinName.toString() == "Value")?.DefaultValue]
- case paths.materialExpressionConstant2Vector:
+ case p.materialExpressionConstant2Vector:
value ??= [
entity.getCustomproperties().find(pinEntity => pinEntity.PinName?.toString() == "X")?.DefaultValue,
entity.getCustomproperties().find(pinEntity => pinEntity.PinName?.toString() == "Y")?.DefaultValue,
]
- case paths.materialExpressionConstant3Vector:
- case paths.materialExpressionConstant4Vector:
+ case p.materialExpressionConstant3Vector:
+ case p.materialExpressionConstant4Vector:
if (!value) {
const vector = entity.getCustomproperties()
.find(pinEntity => pinEntity.PinName?.toString() == "Constant")
@@ -221,32 +222,32 @@ export default function nodeTitle(entity) {
}
value = undefined
break
- case paths.materialExpressionFunctionInput: {
+ case p.materialExpressionFunctionInput: {
const materialObject = entity.getMaterialSubobject()
const inputName = materialObject?.InputName ?? "In"
const inputType = materialObject?.InputType?.value.match(/^.+?_(\w+)$/)?.[1] ?? "Vector3"
return `Input ${inputName} (${inputType})`
}
- case paths.materialExpressionLogarithm:
+ case p.materialExpressionLogarithm:
return "Ln"
- case paths.materialExpressionLogarithm10:
+ case p.materialExpressionLogarithm10:
return "Log10"
- case paths.materialExpressionLogarithm2:
+ case p.materialExpressionLogarithm2:
return "Log2"
- case paths.materialExpressionMaterialFunctionCall:
+ case p.materialExpressionMaterialFunctionCall:
const materialFunction = entity.getMaterialSubobject()?.MaterialFunction
if (materialFunction) {
return materialFunction.getName()
}
break
- case paths.materialExpressionSquareRoot:
+ case p.materialExpressionSquareRoot:
return "Sqrt"
- case paths.materialExpressionSubtract:
+ case p.materialExpressionSubtract:
const materialObject = entity.getMaterialSubobject()
if (materialObject) {
return `Subtract(${materialObject.ConstA ?? "1"},${materialObject.ConstB ?? "1"})`
}
- case paths.metasoundEditorGraphExternalNode: {
+ case p.metasoundEditorGraphExternalNode: {
const name = entity["ClassName"]?.["Name"]
if (name) {
switch (name) {
@@ -255,7 +256,7 @@ export default function nodeTitle(entity) {
}
}
}
- case paths.niagaraNodeConvert:
+ case p.niagaraNodeConvert:
/** @type {String} */
const targetType = (entity["AutowireMakeType"]?.["ClassStructOrEnum"] ?? "")
.toString()
@@ -263,11 +264,11 @@ export default function nodeTitle(entity) {
?.[1]
?? ""
return `Make ${targetType}`
- case paths.pcgEditorGraphNodeInput:
+ case p.pcgEditorGraphNodeInput:
return "Input"
- case paths.pcgEditorGraphNodeOutput:
+ case p.pcgEditorGraphNodeOutput:
return "Output"
- case paths.spawnActorFromClass:
+ case p.spawnActorFromClass:
let className = entity.getCustomproperties()
.find(pinEntity => pinEntity.PinName.toString() == "ReturnValue")
?.PinType
@@ -276,21 +277,21 @@ export default function nodeTitle(entity) {
if (className === "Actor") {
className = null
}
- return `SpawnActor ${Utility.formatStringName(className ?? "NONE")}`
- case paths.switchEnum:
+ return `SpawnActor ${format(className ?? "NONE")}`
+ case p.switchEnum:
return `Switch on ${entity.Enum?.getName() ?? "Enum"}`
- case paths.switchInteger:
+ case p.switchInteger:
return `Switch on Int`
- case paths.variableGet:
+ case p.variableGet:
return ""
- case paths.variableSet:
+ case p.variableSet:
return "SET"
}
const className = entity.getClass()
let switchTarget = entity.switchTarget()
if (switchTarget) {
if (switchTarget[0] !== "E") {
- switchTarget = Utility.formatStringName(switchTarget)
+ switchTarget = format(switchTarget)
}
return `Switch on ${switchTarget}`
}
@@ -300,16 +301,16 @@ export default function nodeTitle(entity) {
const keyNameSymbol = entity.getHIDAttribute()
if (keyNameSymbol) {
const name = keyNameSymbol.toString()
- let title = keyName(name) ?? Utility.formatStringName(name)
- if (className === paths.inputDebugKey) {
+ let title = keyName(name) ?? format(name)
+ if (className === p.inputDebugKey) {
title = "Debug Key " + title
- } else if (className === paths.getInputAxisKeyValue) {
+ } else if (className === p.getInputAxisKeyValue) {
title = "Get " + title
}
return title
}
- if (className === paths.macro) {
- return Utility.formatStringName(entity.MacroGraphReference?.getMacroName())
+ if (className === p.macro) {
+ return format(entity.MacroGraphReference?.getMacroName())
}
const materialSubobject = entity.getMaterialSubobject()
if (materialSubobject) {
@@ -328,19 +329,19 @@ export default function nodeTitle(entity) {
}
const settingsObject = entity.getSettingsObject()
if (settingsObject) {
- if (settingsObject.ExportPath?.valueOf()?.type === paths.pcgHiGenGridSizeSettings) {
+ if (settingsObject.ExportPath?.valueOf()?.type === p.pcgHiGenGridSizeSettings) {
return `Grid Size: ${(
settingsObject.HiGenGridSize?.toString().match(/\d+/)?.[0]?.concat("00")
?? settingsObject.HiGenGridSize?.toString().match(/^\w+$/)?.[0]
) ?? "256"}`
}
if (settingsObject.BlueprintElementInstance) {
- return Utility.formatStringName(settingsObject.BlueprintElementType.getName())
+ return format(settingsObject.BlueprintElementType.getName())
}
if (settingsObject.Operation) {
const match = settingsObject.Name?.toString().match(/PCGMetadata(\w+)Settings_\d+/)
if (match) {
- return Utility.formatStringName(match[1] + ": " + settingsObject.Operation)
+ return format(match[1] + ": " + settingsObject.Operation)
}
}
const settingsSubgraphObject = settingsObject.getSubgraphObject()
@@ -355,7 +356,7 @@ export default function nodeTitle(entity) {
case "AddKey":
let result = memberParent.match(sequencerScriptingNameRegex)
if (result) {
- return `Add Key (${Utility.formatStringName(result[1])})`
+ return `Add Key (${format(result[1])})`
}
case "Concat_StrStr":
return "Append"
@@ -366,16 +367,16 @@ export default function nodeTitle(entity) {
+ (memberNameTraceLineMatch[1] === "Multi" ? " Multi " : " ")
+ (memberNameTraceLineMatch[2] === ""
? "By Channel"
- : Utility.formatStringName(memberNameTraceLineMatch[2])
+ : format(memberNameTraceLineMatch[2])
)
}
switch (memberParent) {
- case paths.blueprintGameplayTagLibrary:
- case paths.kismetMathLibrary:
- case paths.kismetStringLibrary:
- case paths.slateBlueprintLibrary:
- case paths.timeManagementBlueprintLibrary:
- case paths.typedElementHandleLibrary:
+ case p.blueprintGameplayTagLibrary:
+ case p.kismetMathLibrary:
+ case p.kismetStringLibrary:
+ case p.slateBlueprintLibrary:
+ case p.timeManagementBlueprintLibrary:
+ case p.typedElementHandleLibrary:
const leadingLetter = memberName.match(/[BF]([A-Z]\w+)/)
if (leadingLetter) {
// Some functions start with B or F (Like FCeil, FMax, BMin)
@@ -460,23 +461,23 @@ export default function nodeTitle(entity) {
return "^"
}
break
- case paths.blueprintSetLibrary:
+ case p.blueprintSetLibrary:
{
const setOperationMatch = memberName.match(/Set_(\w+)/)
if (setOperationMatch) {
- return Utility.formatStringName(setOperationMatch[1]).toUpperCase()
+ return format(setOperationMatch[1]).toUpperCase()
}
}
break
- case paths.blueprintMapLibrary:
+ case p.blueprintMapLibrary:
{
const setOperationMatch = memberName.match(/Map_(\w+)/)
if (setOperationMatch) {
- return Utility.formatStringName(setOperationMatch[1]).toUpperCase()
+ return format(setOperationMatch[1]).toUpperCase()
}
}
break
- case paths.kismetArrayLibrary:
+ case p.kismetArrayLibrary:
{
const arrayOperationMath = memberName.match(/Array_(\w+)/)
if (arrayOperationMath) {
@@ -485,14 +486,14 @@ export default function nodeTitle(entity) {
}
break
}
- return Utility.formatStringName(memberName)
+ return format(memberName)
}
if (entity.OpName) {
return niagaraNodeNames[entity.OpName.toString()]
- ?? Utility.formatStringName(entity.OpName.toString().replaceAll(/(?:^\w+(?
pinEntity.PinName?.toString().match(/^\s*([A-Z])\s*$/)?.[1]?.charCodeAt(0) - "A".charCodeAt(0)
+const p = Configuration.paths
/** @param {ObjectEntity} entity */
export default function nodeVariadic(entity) {
@@ -21,8 +22,8 @@ export default function nodeVariadic(entity) {
let prefix
let name
switch (type) {
- case Configuration.paths.commutativeAssociativeBinaryOperator:
- case Configuration.paths.promotableOperator:
+ case p.commutativeAssociativeBinaryOperator:
+ case p.promotableOperator:
name = entity.FunctionReference?.MemberName?.toString()
switch (name) {
default:
@@ -60,9 +61,9 @@ export default function nodeVariadic(entity) {
break
}
break
- case Configuration.paths.executionSequence:
+ case p.executionSequence:
prefix ??= "Then"
- case Configuration.paths.multiGate:
+ case p.multiGate:
prefix ??= "Out"
pinEntities ??= () => entity.getPinEntities().filter(pinEntity => pinEntity.isOutput())
pinIndexFromEntity ??= pinEntity => Number(
@@ -71,7 +72,7 @@ export default function nodeVariadic(entity) {
pinNameFromIndex ??= (index, min = -1, max = -1, newPin) =>
`${prefix} ${index >= 0 ? index : min > 0 ? `${prefix} 0` : max + 1}`
break
- // case Configuration.paths.niagaraNodeOp:
+ // case p.niagaraNodeOp:
// pinEntities ??= () => entity.getPinEntities().filter(pinEntity => pinEntity.isInput())
// pinIndexFromEntity ??= indexFromUpperCaseLetterName
// pinNameFromIndex ??= (index, min = -1, max = -1, newPin) => {
@@ -81,12 +82,12 @@ export default function nodeVariadic(entity) {
// return result
// }
// break
- case Configuration.paths.switchInteger:
+ case p.switchInteger:
pinEntities ??= () => entity.getPinEntities().filter(pinEntity => pinEntity.isOutput())
pinIndexFromEntity ??= pinEntity => Number(pinEntity.PinName?.toString().match(/^\s*(\d+)\s*$/)?.[1])
pinNameFromIndex ??= (index, min = -1, max = -1, newPin) => (index < 0 ? max + 1 : index).toString()
break
- case Configuration.paths.switchGameplayTag:
+ case p.switchGameplayTag:
pinNameFromIndex ??= (index, min = -1, max = -1, newPin) => {
const result = `Case_${index >= 0 ? index : min > 0 ? "0" : max + 1}`
entity.PinNames ??= new ArrayEntity()
@@ -95,8 +96,8 @@ export default function nodeVariadic(entity) {
entity.PinTags.valueOf()[entity.PinTags.length] = null
return result
}
- case Configuration.paths.switchName:
- case Configuration.paths.switchString:
+ case p.switchName:
+ case p.switchString:
pinEntities ??= () => entity.getPinEntities().filter(pinEntity => pinEntity.isOutput())
pinIndexFromEntity ??= pinEntity => Number(pinEntity.PinName.toString().match(/^\s*Case[_\s]+(\d+)\s*$/i)?.[1])
pinNameFromIndex ??= (index, min = -1, max = -1, newPin) => {
diff --git a/js/decoding/pinColor.js b/js/decoding/pinColor.js
index a19b96c..db7fc77 100755
--- a/js/decoding/pinColor.js
+++ b/js/decoding/pinColor.js
@@ -1,6 +1,7 @@
import { css } from "lit"
import Configuration from "../Configuration.js"
+const p = Configuration.paths
const colors = {
"Any": css`132, 132, 132`,
"Any[]": css`132, 132, 132`,
@@ -36,21 +37,21 @@ const colors = {
"Volume": css`230, 69, 188`,
"Volume[]": css`230, 69, 188`,
"wildcard": css`128, 120, 120`,
- [Configuration.paths.linearColor]: css`0, 88, 200`,
- [Configuration.paths.niagaraBool]: css`146, 0, 0`,
- [Configuration.paths.niagaraDataInterfaceCollisionQuery]: css`0, 168, 242`,
- [Configuration.paths.niagaraDataInterfaceCurlNoise]: css`0, 168, 242`,
- [Configuration.paths.niagaraDataInterfaceVolumeTexture]: css`0, 168, 242`,
- [Configuration.paths.niagaraFloat]: css`160, 250, 68`,
- [Configuration.paths.niagaraInt32]: css`30, 224, 172`,
- [Configuration.paths.niagaraPosition]: css`251, 146, 251`,
- [Configuration.paths.quat4f]: css`0, 88, 200`,
- [Configuration.paths.rotator]: css`157, 177, 251`,
- [Configuration.paths.transform]: css`227, 103, 0`,
- [Configuration.paths.vector]: css`251, 198, 34`,
- [Configuration.paths.vector2f]: css`0, 88, 200`,
- [Configuration.paths.vector3f]: css`250, 200, 36`,
- [Configuration.paths.vector4f]: css`0, 88, 200`,
+ [p.linearColor]: css`0, 88, 200`,
+ [p.niagaraBool]: css`146, 0, 0`,
+ [p.niagaraDataInterfaceCollisionQuery]: css`0, 168, 242`,
+ [p.niagaraDataInterfaceCurlNoise]: css`0, 168, 242`,
+ [p.niagaraDataInterfaceVolumeTexture]: css`0, 168, 242`,
+ [p.niagaraFloat]: css`160, 250, 68`,
+ [p.niagaraInt32]: css`30, 224, 172`,
+ [p.niagaraPosition]: css`251, 146, 251`,
+ [p.quat4f]: css`0, 88, 200`,
+ [p.rotator]: css`157, 177, 251`,
+ [p.transform]: css`227, 103, 0`,
+ [p.vector]: css`251, 198, 34`,
+ [p.vector2f]: css`0, 88, 200`,
+ [p.vector3f]: css`250, 200, 36`,
+ [p.vector4f]: css`0, 88, 200`,
}
const pinColorMaterial = css`120, 120, 120`
diff --git a/js/decoding/pinTemplate.js b/js/decoding/pinTemplate.js
index fac2ae8..e2e5bac 100755
--- a/js/decoding/pinTemplate.js
+++ b/js/decoding/pinTemplate.js
@@ -17,6 +17,7 @@ import Vector4DPinTemplate from "../template/pin/Vector4DPinTemplate.js"
import VectorPinTemplate from "../template/pin/VectorPinTemplate.js"
import pinTitle from "./pinTitle.js"
+const p = Configuration.paths
const inputPinTemplates = {
"bool": BoolPinTemplate,
"byte": IntPinTemplate,
@@ -29,17 +30,17 @@ const inputPinTemplates = {
"real": RealPinTemplate,
"rg": Vector2DPinTemplate,
"string": StringPinTemplate,
- [Configuration.paths.linearColor]: LinearColorPinTemplate,
- [Configuration.paths.niagaraBool]: BoolPinTemplate,
- [Configuration.paths.niagaraFloat]: RealPinTemplate,
- [Configuration.paths.niagaraInt32]: IntPinTemplate,
- [Configuration.paths.niagaraPosition]: VectorPinTemplate,
- [Configuration.paths.rotator]: RotatorPinTemplate,
- [Configuration.paths.vector]: VectorPinTemplate,
- [Configuration.paths.vector2D]: Vector2DPinTemplate,
- [Configuration.paths.vector2f]: Vector2DPinTemplate,
- [Configuration.paths.vector3f]: VectorPinTemplate,
- [Configuration.paths.vector4f]: Vector4DPinTemplate,
+ [p.linearColor]: LinearColorPinTemplate,
+ [p.niagaraBool]: BoolPinTemplate,
+ [p.niagaraFloat]: RealPinTemplate,
+ [p.niagaraInt32]: IntPinTemplate,
+ [p.niagaraPosition]: VectorPinTemplate,
+ [p.rotator]: RotatorPinTemplate,
+ [p.vector]: VectorPinTemplate,
+ [p.vector2D]: Vector2DPinTemplate,
+ [p.vector2f]: Vector2DPinTemplate,
+ [p.vector3f]: VectorPinTemplate,
+ [p.vector4f]: Vector4DPinTemplate,
}
/** @param {PinEntity} entity */