@fluxscape/react-runtime 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,7 +31,7 @@ where({ })
31
31
  .${e}::placeholder {
32
32
  opacity: ${t.placeholderOpacity};
33
33
  }
34
- `}const TextInputNode={name:"net.noodl.controls.textinput",displayName:"Text Input",docs:"https://docs.noodl.net/nodes/ui-controls/text-input",allowChildren:!1,noodlNodeAsProp:!0,usePortAsLabel:"label",nodeDoubleClickAction:{focusPort:"label"},connectionPanel:{groupPriority:["General","Text","Style","Actions","Events","States","Mounted","Text Style","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},getReactComponent(){return TextInput$2},initialize(){this.props.attrs={},this.props.startValue="",this.props.id=this._internal.controlId="input-"+guid()},inputProps:{type:{displayName:"Type",group:"Text",index:19,type:{name:"enum",enums:[{label:"Text",value:"text"},{label:"Text Area",value:"textArea"},{label:"Email",value:"email"},{label:"Number",value:"number"},{label:"Password",value:"password"},{label:"URL",value:"url"}]},default:"text"},placeholder:{index:22,group:"Text",displayName:"Placeholder",default:"Type here...",type:{name:"string"}},maxLength:{group:"Text",displayName:"Max length",type:"number",index:24}},inputs:{placeHolderOpacity:{index:23,group:"Text",displayName:"Placeholder opacity",type:"number",default:.5,set(e){const t=this._internal.controlId;Utils$1.updateStylesForClass(t,{placeholderOpacity:e},_styleTemplate$3)}},set:{group:"Actions",displayName:"Set",type:"signal",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{this.setText(this._internal.text)})}},startValue:{index:18,displayName:"Text",type:"string",group:"Text",set(e){this._internal.text!==e&&(this._internal.text=e,this.isInputConnected("set")===!1&&this.setText(e))}},clear:{type:"signal",group:"Actions",displayName:"Clear",valueChangedToTrue(){this.clear()}},focus:{type:"signal",group:"Actions",displayName:"Focus",valueChangedToTrue(){this.context.setNodeFocused(this,!0)}},blur:{type:"signal",group:"Actions",displayName:"Blur",valueChangedToTrue(){this.context.setNodeFocused(this,!1)}},textAlignX:{group:"Text Alignment",index:13,displayName:"Text Horizontal Align",type:{name:"enum",enums:[{label:"left",value:"left"},{label:"center",value:"center"},{label:"right",value:"right"}],alignComp:"justify"},default:"left",set(e){switch(e){case"left":this.setStyle({textAlign:"left"},"input");break;case"center":this.setStyle({textAlign:"center"},"input");break;case"right":this.setStyle({textAlign:"right"},"input");break}}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputCss:{backgroundColor:{index:100,displayName:"Background Color",group:"Style",type:"color",default:"transparent",allowVisualStates:!0,styleTag:"inputWrapper"}},outputProps:{onTextChanged:{group:"General",displayName:"Text",type:"string",index:1,onChange(){this.sendSignalOnOutput("textChanged")}},onEnter:{group:"Events",displayName:"On Enter",type:"signal"}},outputs:{textChanged:{displayName:"Text Changed",type:"signal",group:"General",index:2}},methods:{_focus(){this.innerReactComponentRef&&this.innerReactComponentRef.focus()},_blur(){this.innerReactComponentRef&&this.innerReactComponentRef.blur()},clear(){this.props.startValue="",this.innerReactComponentRef&&this.innerReactComponentRef.setText("")},setText(e){this.props.startValue=e,this.innerReactComponentRef?this.innerReactComponentRef.hasFocus()===!1&&this.innerReactComponentRef.setText(e):this.outputPropValues.onTextChanged!==e&&(this.outputPropValues.onTextChanged=e,this.flagOutputDirty("onTextChanged"))}}};NodeSharedPortDefinitions.addDimensions(TextInputNode,{defaultSizeMode:"contentSize",contentLabel:"Text"}),NodeSharedPortDefinitions.addIconInputs(TextInputNode,{enableIconPlacement:!0,defaults:{useIcon:!1,iconColor:"#000000"}}),NodeSharedPortDefinitions.addLabelInputs(TextInputNode,{enableSpacing:!0,styleTag:"label",displayName:"Label"}),NodeSharedPortDefinitions.addTextStyleInputs(TextInputNode,{styleTag:"input",portPrefix:"",portIndex:18,popout:{group:"input-text-style",label:"Text Style",parentGroup:"Text"}}),NodeSharedPortDefinitions.addAlignInputs(TextInputNode),NodeSharedPortDefinitions.addTransformInputs(TextInputNode),NodeSharedPortDefinitions.addPaddingInputs(TextInputNode,{styleTag:"inputWrapper"}),NodeSharedPortDefinitions.addMarginInputs(TextInputNode),NodeSharedPortDefinitions.addSharedVisualInputs(TextInputNode),NodeSharedPortDefinitions.addBorderInputs(TextInputNode,{styleTag:"inputWrapper"}),NodeSharedPortDefinitions.addShadowInputs(TextInputNode,{styleTag:"inputWrapper"}),Utils$1.addControlEventsAndStates(TextInputNode);const TextInput$1=createNodeFromReactComponent(TextInputNode);class ASyncQueue{constructor(){this.queue=[],this.pendingPromise=!1}enqueue(t){return new Promise((n,o)=>{this.queue.push({promise:t,resolve:n,reject:o}),this.dequeue()})}dequeue(){if(this.workingOnPromise)return!1;const t=this.queue.shift();if(!t)return!1;try{this.workingOnPromise=!0,t.promise().then(n=>{this.workingOnPromise=!1,t.resolve(n),this.dequeue()}).catch(n=>{this.workingOnPromise=!1,t.reject(n),this.dequeue()})}catch(n){this.workingOnPromise=!1,t.reject(n),this.dequeue()}return!0}}class NavigationHandler{constructor(){this._pageStacks={},this._navigationQueue=[]}_performNavigation(t,n,o){if(t=t||"Main",this._pageStacks[t])for(const r of this._pageStacks[t])o==="navigate"?r.navigate(n):r.replace(n);else this._navigationQueue.push({name:t,args:n,type:o})}navigate(t,n){t=t||"Main",this._performNavigation(t,n,"navigate")}replace(t,n){t=t||"Main",this._performNavigation(t,n,"replace")}registerPageStack(t,n){t=t||"Main",this._pageStacks[t]||(this._pageStacks[t]=[]),this._pageStacks[t].push(n);let o=!1,r=!1,s=0;for(;s<this._navigationQueue.length;){const a=this._navigationQueue[s];a.name===t?(a.type==="navigate"?(o||(n.reset(),o=!0),n.navigate(a.args)):n.replace(a.args),r=!0,this._navigationQueue.splice(s,1)):s++}r||n.reset()}deregisterPageStack(t,n){if(t=t||"Main",!this._pageStacks[t])return;const o=this._pageStacks[t].indexOf(n);o!==-1&&(this._pageStacks[t].splice(o,1),this._pageStacks[t].length===0&&delete this._pageStacks[t])}}NavigationHandler.instance=new NavigationHandler;let Transition$2=class{constructor(){this._frame=this.frame.bind(this)}start(t){this.cb=t.end,this.timing.delay+this.timing.dur===0?this.end():(this.transitionForward=!t.back,this.startTime=window.performance.now(),requestAnimationFrame(this._frame))}frame(){var t=(window.performance.now()-(this.startTime+this.timing.delay))/this.timing.dur,n=Math.max(0,Math.min(t,1));this.transitionForward?this.forward(n):this.back(n),window.performance.now()<=this.startTime+this.timing.dur+this.timing.delay?requestAnimationFrame(this._frame):this.end()}end(){this.cb&&this.cb()}};class NoneTransition extends Transition$2{constructor(t,n,o){super(),this.from=t,this.to=n,this.timing={dur:0,delay:0}}update(t){}forward(t){}back(t){}static ports(){return[]}}class PushTransition extends Transition$2{constructor(t,n,o){super(),this.from=t,this.to=n,this.timing=o.timing||{curve:[0,0,.58,1],dur:300,delay:0},this.distance=o.shift||{value:25,unit:"%"},typeof this.distance=="number"&&(this.distance={value:this.distance,unit:"%"}),this.direction=o.direction||"Left",this.timing.curve[0]=Math.min(1,Math.max(0,this.timing.curve[0])),this.timing.curve[2]=Math.min(1,Math.max(0,this.timing.curve[2])),this.ease=BezierEasing.apply(null,this.timing.curve).get,this.crossfade=o.crossfade===void 0?!1:o.crossfade,this.darkOverlay=o.darkoverlay===void 0?!0:o.darkoverlay,this.darkOverlayAmount=o.darkoverlayamount===void 0?.5:o.darkoverlayamount,this.zoom=o.zoom||{value:25,unit:"%"},typeof this.zoom=="number"&&(this.zoom={value:this.zoom,unit:"%"}),this.darkOverlay&&(this.darkOverlay=t.nodeScope.createPrimitiveNode("Group"),this.darkOverlay.setInputValue("position","absolute"),this.darkOverlay.setInputValue("sizeMode","explicit"),this.darkOverlay.setInputValue("width",{value:100,unit:"%"}),this.darkOverlay.setInputValue("height",{value:100,unit:"%"}),this.darkOverlay.setInputValue("backgroundColor","#000000"),this.darkOverlay.setInputValue("opacity",0))}update(t){if(this.direction==="In"||this.direction==="Out"){var n=this.zoom.value/100;n=this.direction==="Out"?-n:n,this.from.setStyle({transform:"scale("+(1+n*t)+")",opacity:this.crossfade?1-t:1}),this.to.setStyle({transform:"scale("+(1-n*(1-t))+")",opacity:this.crossfade?t:1})}else{var o=this.distance.value,r=this.distance.unit;const s={Up:{x:0,y:-1},Down:{x:0,y:1},Left:{x:-1,y:0},Right:{x:1,y:0}},a={x:s[this.direction].x*o,y:s[this.direction].y*o},l={x:s[this.direction].x*100,y:s[this.direction].y*100};this.from.setStyle({transform:"translate("+a.x*t+r+","+a.y*t+r+")",opacity:this.crossfade?1-t:1}),this.to.setStyle({transform:"translate("+l.x*(t-1)+r+","+l.y*(t-1)+"%)",opacity:this.crossfade?t:1})}this.darkOverlay&&this.darkOverlay.setStyle({opacity:t*this.darkOverlayAmount})}forward(t){var n=this.ease(t);this.update(n)}back(t){var n=this.ease(t);this.update(1-n)}start(t){super.start(t),this.darkOverlay&&this.from.addChild(this.darkOverlay)}end(t){this.darkOverlay&&this.from.removeChild(this.darkOverlay),super.end(t)}static ports(t){const n=[];return n.push({name:"tr-direction",displayName:"Direction",group:"Transition",type:{name:"enum",enums:["Right","Left","Up","Down","In","Out"]},default:"Left",plug:"input"}),t["tr-direction"]==="In"||t["tr-direction"]==="Out"?n.push({name:"tr-zoom",displayName:"Zoom",group:"Transition",type:{name:"number",units:["%"]},default:{value:25,unit:"%"},plug:"input"}):n.push({name:"tr-shift",displayName:"Shift Distance",group:"Transition",type:{name:"number",units:["%","px"]},default:{value:25,unit:"%"},plug:"input"}),n.push({name:"tr-crossfade",displayName:"Crossfade",group:"Transition",type:"boolean",default:!1,plug:"input"}),n.push({name:"tr-darkoverlay",displayName:"Dark Overlay",group:"Transition",type:"boolean",default:!0,plug:"input"}),n.push({name:"tr-darkoverlayamount",displayName:"Dark Overlay Amount",group:"Transition",type:"number",default:.5,plug:"input"}),n.push({name:"tr-timing",displayName:"Timing",group:"Transition",type:"curve",plug:"input"}),n}}class PopupTransition extends Transition$2{constructor(t,n,o){super(),this.from=t,this.to=n,this.timing=o.timing||{curve:[0,0,.58,1],dur:300,delay:0},this.distance=o.shift||{value:25,unit:"%"},typeof this.distance=="number"&&(this.distance={value:this.distance,unit:"%"}),this.direction=o.direction||"Right",this.timing.curve[0]=Math.min(1,Math.max(0,this.timing.curve[0])),this.timing.curve[2]=Math.min(1,Math.max(0,this.timing.curve[2])),this.ease=BezierEasing.apply(null,this.timing.curve).get,this.fadein=o.fadein===void 0?!1:o.fadein,this.zoom=o.zoom||{value:25,unit:"%"},typeof this.zoom=="number"&&(this.zoom={value:this.zoom,unit:"%"})}update(t){if(this.direction==="In"||this.direction==="Out"){var n=this.zoom.value/100;n=this.direction==="Out"?-n:n,this.to.setStyle({transform:"scale("+(1-n*(1-t))+")",opacity:this.crossfade?t:1})}else{var o=this.distance.value,r=this.distance.unit;const s={Up:{x:0,y:-1},Down:{x:0,y:1},Left:{x:-1,y:0},Right:{x:1,y:0}},a={x:s[this.direction].x*o,y:s[this.direction].y*o};this.to.setStyle({transform:"translate("+a.x*(t-1)+r+","+a.y*(t-1)+r+")",opacity:this.fadein?t:1})}}forward(t){var n=this.ease(t);this.update(n)}back(t){var n=this.ease(t);this.update(1-n)}static ports(t){var n=[];return n.push({name:"tr-direction",displayName:"Direction",group:"Transition",type:{name:"enum",enums:["Right","Left","Up","Down","In","Out"]},default:"Right",plug:"input"}),t["tr-direction"]==="In"||t["tr-direction"]==="Out"?n.push({name:"tr-zoom",displayName:"Zoom",group:"Transition",type:{name:"number",units:["%"]},default:{value:25,unit:"%"},plug:"input"}):n.push({name:"tr-shift",displayName:"Shift Distance",group:"Transition",type:{name:"number",units:["%","px"]},default:{value:25,unit:"%"},plug:"input"}),n.push({name:"tr-fadein",displayName:"Fade In",group:"Transition",type:"boolean",default:!1,plug:"input"}),n.push({name:"tr-timing",displayName:"Timing",group:"Transition",type:"curve",plug:"input"}),n}}const Transitions={None:NoneTransition,Push:PushTransition,Popup:PopupTransition};function PageStackReactComponent(e){const{didMount:t,willUnmount:n,style:o,children:r}=e;return React.useEffect(()=>(t(),()=>{n()}),[]),React.createElement("div",{style:o},r)}const PageStack={name:"Page Stack",displayNodeName:"Component Stack",category:"Visuals",docs:"https://docs.noodl.net/nodes/component-stack/component-stack-node",useVariants:!1,initialize(){this._internal.stack=[],this._internal.topPageName="",this._internal.stackDepth=0,this._internal.pageInfo={},this._internal.asyncQueue=new ASyncQueue,this.onScheduleReset=()=>{this.scheduleReset()},this.props.didMount=()=>{this._internal.isMounted=!0,window.history&&window.history.pushState?window.addEventListener("popstate",this.onScheduleReset):window.addEventListener("hashchange",this.onScheduleReset),this._registerPageStack()},this.props.willUnmount=()=>{this._internal.isMounted=!1,window.removeEventListener("popstate",this.onScheduleReset),window.removeEventListener("hashchange",this.onScheduleReset),this._deregisterPageStack()}},getInspectInfo(){return this._internal.stack.length===0?"No active page":[{type:"text",value:"Active Components:"}].concat(this._internal.stack.map(t=>({type:"text",value:"- "+this._findPage(t.pageId).label})))},defaultCss:{width:"100%",flex:"1 1 100%",position:"relative",display:"flex",flexDirection:"column"},getReactComponent(){return PageStackReactComponent},inputs:{name:{type:{name:"string",identifierOf:"PackStack"},displayName:"Name",group:"General",default:"Main",set:function(e){this._deregisterPageStack(),this._internal.name=e,this._internal.isMounted&&this._registerPageStack()}},useRoutes:{type:"boolean",displayName:"Use Routes",group:"General",default:!1,set:function(e){this._internal.useRoutes=!!e}},clip:{displayName:"Clip Content",type:"boolean",group:"Layout",default:!0,set(e){e?this.setStyle({overflow:"hidden"}):this.removeStyle(["overflow"])}},pages:{type:"proplist",displayName:"Components",group:"Components",set:function(e){this._internal.pages=e,this._internal.isMounted&&this.scheduleReset()}},reset:{type:"signal",displayName:"Reset",group:"Actions",valueChangedToTrue:function(){this.scheduleReset()}}},inputCss:{backgroundColor:{type:"color",displayName:"Background Color",group:"Style",default:"transparent",applyDefault:!1}},outputs:{topPageName:{type:"string",displayName:"Top Component Name",group:"General",get(){return this._internal.topPageName}},stackDepth:{type:"number",displayName:"Stack Depth",group:"General",get(){return this._internal.stackDepth}}},methods:{_registerPageStack(){NavigationHandler.instance.registerPageStack(this._internal.name,this)},_deregisterPageStack(){NavigationHandler.instance.deregisterPageStack(this._internal.name,this)},_findPage(e){if(this._internal.pageInfo[e]){const n=this._internal.pageInfo[e],o=this._internal.pages.find(r=>r.id===e);return{component:String(n.component),label:String(o.label),id:String(e)}}const t=this._internal.pages.find(n=>n.label===e);if(t){const n=this._internal.pageInfo[t.id];return{component:String(n.component),label:String(t.label),id:String(t.id)}}},setPageOutputs(e){for(const t in e)this._internal[t]=e[t],this.flagOutputDirty(t)},scheduleReset(){var e=this._internal;e.hasScheduledReset||(e.hasScheduledReset=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.hasScheduledReset=!1,this.reset()}))},createPageContainer(){const e=this.nodeScope.createPrimitiveNode("Group");return e.setStyle({flex:"1 0 100%"}),e},reset(){this._internal.asyncQueue.enqueue(this.resetAsync.bind(this))},async resetAsync(){var e=this.getChildren();for(var t in e){var n=e[t];this.removeChild(n),this.nodeScope.deleteNode(n)}if(this._internal.pages===void 0||this._internal.pages.length===0)return;let o,r={};var s=this.matchPageFromUrl();s!==void 0?(o=s.pageId,r=Object.assign({},s.query,s.params)):(o=this._internal.startPageId,o===void 0&&(o=this._internal.pages[0].id));const a=this._findPage(o);if(a===void 0||a.component===void 0)return;var l=await this.nodeScope.createNode(a.component,guid());for(var u in r)l.setInputValue(u,r[u]);const d=this.createPageContainer();d.addChild(l),this.addChild(d),this._internal.stack=[{from:null,page:d,pageId:o,pageInfo:a,params:r,componentName:this._internal.startPage}],this.setPageOutputs({topPageName:a.label,stackDepth:this._internal.stack.length})},getRelativeURL(){var e=this._internal.stack[this._internal.stack.length-1];if(e!==void 0){var t=e.pageInfo.path;if(t===void 0){var n=this._internal.pages.find(u=>u.id==e.pageId);if(n===void 0)return;t=n.label.replace(/\s+/g,"-").toLowerCase()}var o=t.match(/{([^}]+)}/g),r=Object.assign({},e.params);if(o)for(var s of o){var a=s.replace(/[{}]/g,"");e.params[a]!==void 0&&(t=t.replace(s,encodeURIComponent(r[a])),delete r[a])}var l=[];for(var a in r)l.push({name:a,value:r[a]});return t.startsWith("/")&&(t=t.substring(1)),{path:t,query:l}}},getNavigationAbsoluteURL(){for(var e=this.parent;e!==void 0&&typeof e.getNavigationAbsoluteURL!="function";)e=e.getVisualParentNode();if(e===void 0)var t={path:"",query:[]};else var t=e.getNavigationAbsoluteURL();var n=this.getRelativeURL();return n===void 0?t:{path:t.path+(t.path.endsWith("/")?"":"/")+n.path,query:t.query.concat(n.query)}},_getLocationPath:function(){var e=Runtime.instance.getProjectSettings().navigationPathType;if(e===void 0||e==="hash"){var t=location.hash;return t&&(t[0]==="#"&&(t=t.substring(1)),t[0]==="/"&&(t=t.substring(1))),t}else{var n=location.pathname;return n&&n[0]==="/"&&(n=n.substring(1)),n}},_getSearchParams:function(){for(var e,t=/\+/g,n=/([^&=]+)=?([^&]*)/g,o=function(a){return decodeURIComponent(a.replace(t," "))},r=window.location.search.substring(1),s={};e=n.exec(r);)s[o(e[1])]=o(e[2]);return s},getNavigationRemainingPath(){return this._internal.remainingNavigationPath},matchPageFromUrl(e){if(!this._internal.useRoutes||this._internal.pages===void 0||this._internal.pages.length===0)return;for(var t=this.parent;t!==void 0&&typeof t.getNavigationRemainingPath!="function";)t=t.getVisualParentNode();if(t===void 0){var n=this._getLocationPath();n[0]==="/"&&(n=n.substring(1));var o=n.split("/")}else var o=t.getNavigationRemainingPath();if(o===void 0)return;var r=this._getSearchParams();function s(d,h){for(var f={},g=0;g<h.length;g++){if(d[g]===void 0)return;var b=h[g];if(b[0]==="{"&&b[b.length-1]==="}")f[b.substring(1,b.length-1)]=decodeURIComponent(d[g]);else if(b!==d[g])return}return{params:f,remainingPathParts:d.splice(h.length)}}for(var a of this._internal.pages){var l=this._internal.pageInfo[a.id];if(l===void 0)continue;var u=l.path;u===void 0&&(u=a.label.replace(/\s+/g,"-").toLowerCase()),u[0]==="/"&&(u=u.substring(1));let d=s(o,u.split("/"));if(d)return this._internal.remainingNavigationPath=d.remainingPathParts,{pageId:a.id,params:d.params,query:r}}},_updateUrlWithTopPage(){if(this._internal.useRoutes&&window.history!==void 0){var e=this.getNavigationAbsoluteURL(),t,n,o=Runtime.instance.getProjectSettings().navigationPathType;o===void 0||o==="hash"?n=e.path:t=e.path;var r=e.query.map(a=>a.name+"="+a.value),s=(t!==void 0?t:"")+(r.length>=1?"?"+r.join("&"):"")+(n!==void 0?"#"+n:"");this._internal.remainingNavigationPath=void 0,window.history.pushState({},"",s)}},replace(e){this._internal.asyncQueue.enqueue(this.replaceAsync.bind(this,e))},async replaceAsync(e){if(this._internal.pages===void 0||this._internal.pages.length===0||this._internal.isTransitioning)return;const t=e.target||this._internal.pages[0].id,n=this._findPage(t);if(n===void 0||n.component===void 0)return;var o=this.getChildren();for(var r in o){var s=o[r];this.removeChild(s),this.nodeScope.deleteNode(s)}const a=this.createPageContainer(),l=await this.nodeScope.createNode(n.component,guid());for(var u in e.params)l.setInputValue(u,e.params[u]);a.addChild(l),this.addChild(a),this._internal.stack=[{from:null,page:a,pageId:t,pageInfo:n,params:e.params,componentName:e.target}],this.setPageOutputs({topPageName:n.label,stackDepth:this._internal.stack.length}),this._updateUrlWithTopPage(),e.hasNavigated&&e.hasNavigated()},navigate(e){this._internal.asyncQueue.enqueue(this.navigateAsync.bind(this,e))},async navigateAsync(e){if(this._internal.pages===void 0||this._internal.pages.length===0||this._internal.isTransitioning)return;const t=e.target||this._internal.pages[0].id,n=this._findPage(t);if(n===void 0||n.component===void 0)return;const o=this.createPageContainer();o.setInputValue("position","absolute");const r=await this.nodeScope.createNode(n.component,guid());for(var s in e.params)r.setInputValue(s,e.params[s]);o.addChild(r);const a=r.nodeScope.getNodesWithType("PageStackNavigateBack");if(a&&a.length>0)for(var l=0;l<a.length;l++)a[l]._setBackCallback(this.back.bind(this));const u=this._internal.stack[this._internal.stack.length-1],d={from:u.page,page:o,pageInfo:n,pageId:t,params:e.params,transition:new Transitions[e.transition.type||"Push"](u.page,o,e.transition),backCallback:e.backCallback,componentName:e.target};this._internal.stack.push(d),this.setPageOutputs({topPageName:n.label,stackDepth:this._internal.stack.length}),this._updateUrlWithTopPage(),d.transition.forward(0),this._internal.isTransitioning=!0,d.transition.start({end:()=>{this._internal.isTransitioning=!1,this.removeChild(u.page),o.setInputValue("position","relative")}}),this.addChild(o),e.hasNavigated&&e.hasNavigated()},back(e){if(this._internal.stack.length<=1||this._internal.isTransitioning)return;var t=this._internal.stack[this._internal.stack.length-1];t.page.setInputValue("position","absolute"),this.addChild(t.from,0),t.backCallback&&t.backCallback(e.backAction,e.results);const n=this._findPage(this._internal.stack[this._internal.stack.length-2].pageId);this.setPageOutputs({topPageName:n.label,stackDepth:this._internal.stack.length-1}),this._internal.isTransitioning=!0,t.transition.start({end:()=>{this._internal.isTransitioning=!1,t.page.setInputValue("position","relative"),this.removeChild(t.page),this.nodeScope.deleteNode(t.page),this._internal.stack.pop(),this._updateUrlWithTopPage()},back:!0})},setPageComponent(e,t){var n=this._internal;n.pageInfo[e]||(n.pageInfo[e]={}),n.pageInfo[e].component=t},setPagePath(e,t){var n=this._internal;n.pageInfo[e]||(n.pageInfo[e]={}),n.pageInfo[e].path=t},setStartPage(e){this._internal.startPageId=e},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e.startsWith("pageComp-"))return this.registerInput(e,{set:this.setPageComponent.bind(this,e.substring(9))});if(e.startsWith("pagePath-"))return this.registerInput(e,{set:this.setPagePath.bind(this,e.substring(9))});if(e==="startPage")return this.registerInput(e,{set:this.setStartPage.bind(this)})}}},setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[];o.parameters.pages!==void 0&&o.parameters.pages.length>0&&(o.parameters.pages.forEach(a=>{s.push({name:"pageComp-"+a.id,displayName:"Component",editorName:a.label+" | Component",plug:"input",type:"component",parent:"pages",parentItemId:a.id}),o.parameters.useRoutes===!0&&s.push({name:"pagePath-"+a.id,displayName:"Path",editorName:a.label+" | Path",plug:"input",type:"string",default:a.label.replace(/\s+/g,"-").toLowerCase(),parent:"pages",parentItemId:a.id})}),s.push({plug:"input",type:{name:"enum",enums:o.parameters.pages.map(a=>({label:a.label,value:a.id})),allowEditOnly:!0},group:"General",displayName:"Start Page",name:"startPage",default:o.parameters.pages[0].id})),e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){(s.name==="pages"||s.name==="useRoutes")&&r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.Page Stack",function(o){n(o)});for(const o of t.getNodesWithType("Page Stack"))n(o)})}},NavigationStack=createNodeFromReactComponent(PageStack),ogPopout={group:"seo-og",label:"Open Graph",parentGroup:"Experimental SEO"},twitterPopout={group:"seo-twitter",label:"Twitter",parentGroup:"Experimental SEO"},META_TAGS=[{isProperty:!0,key:"description",displayName:"Description",group:"Experimental SEO"},{isProperty:!0,key:"robots",displayName:"Robots",group:"Experimental SEO"},{isProperty:!0,key:"og:title",displayName:"Title",editorName:"OG Title",group:"General",popout:ogPopout},{isProperty:!0,key:"og:description",displayName:"Description",editorName:"OG Description",group:"General",popout:ogPopout},{isProperty:!0,key:"og:url",displayName:"Url",editorName:"OG Url",group:"General",popout:ogPopout},{isProperty:!0,key:"og:type",displayName:"Type",editorName:"OG Type",group:"General",popout:ogPopout},{isProperty:!0,key:"og:image",displayName:"Image",editorName:"OG Image",group:"Image",popout:ogPopout},{isProperty:!0,key:"og:image:width",displayName:"Image Width",editorName:"OG Image Width",group:"Image",popout:ogPopout},{isProperty:!0,key:"og:image:height",displayName:"Image Height",editorName:"OG Image Height",group:"Image",popout:ogPopout},{isProperty:!1,key:"twitter:card",displayName:"Card",editorName:"Twitter Card",group:"General",popout:twitterPopout},{isProperty:!1,key:"twitter:title",displayName:"Title",editorName:"Twitter Title",group:"General",popout:twitterPopout},{isProperty:!1,key:"twitter:description",displayName:"Description",editorName:"Twitter Description",group:"General",popout:twitterPopout},{isProperty:!1,key:"twitter:image",displayName:"Image",editorName:"Twitter Image",group:"General",popout:twitterPopout}];function Page$1(e){const{style:t,children:n}=e;return Layout.size(t,e),Layout.align(t,e),META_TAGS.forEach(o=>{const r=e.metatags&&e.metatags[o.key];Noodl.SEO.setMeta(o.key,r)}),React.createElement("div",{style:t,className:e.className},n)}const PageNode={name:"Page",displayNodeName:"Page",category:"Visuals",docs:"https://docs.noodl.net/nodes/navigation/page",useVariants:!1,mountedInput:!1,allowAsExportRoot:!1,singleton:!0,connectionPanel:{groupPriority:["General","Mounted"]},initialize:function(){this.props.layout="column",this.isInputConnected("onPageReady")&&this.nodeScope.context.eventEmitter.emit("SSR_PageLoading",this.id)},defaultCss:{display:"flex",flexDirection:"column",position:"relative",alignItems:"flex-start",flex:"1 1",alignSelf:"stretch"},getReactComponent(){return Page$1},inputs:{sitemapIncluded:{index:80001,displayName:"Included",group:"Experimental Sitemap",default:!0,type:{name:"boolean",allowEditOnly:!0}},sitemapChangefreq:{index:80002,displayName:"Change Freq",group:"Experimental Sitemap",default:"weekly",type:{name:"enum",allowEditOnly:!0,enums:[{label:"always",value:"always"},{label:"hourly",value:"hourly"},{label:"daily",value:"daily"},{label:"weekly",value:"weekly"},{label:"monthly",value:"monthly"},{label:"yearly",value:"yearly"},{label:"never",value:"never"}]}},sitemapPriority:{index:80003,displayName:"Priority",group:"Experimental Sitemap",default:.5,type:{name:"number",allowEditOnly:!0}}},inputProps:META_TAGS.reduce((e,t,n)=>(e[t.key]={index:8e4+n,displayName:t.displayName,editorName:t.editorName||t.displayName,propPath:"metatags",group:t.group,popout:t.popout,type:t.type||"string"},e),{}),methods:{getUrlPath:function(){return this._internal.urlPath},getTitle:function(){return this._internal.title},setTitle:function(e){this._internal.title=e},setUrlPath:function(e){this._internal.urlPath=e},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e==="title")return this.registerInput(e,{set:this.setTitle.bind(this)});if(e==="urlPath")return this.registerInput(e,{set:this.setUrlPath.bind(this)})}}},setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[];const a=o.component.name.split("/");s.push({name:"title",displayName:"Title",type:"string",group:"General",plug:"input",default:a[a.length-1]});const u=(o.parameters.title||a[a.length-1]).replace(/\s+/g,"-").toLowerCase();s.push({name:"urlPath",displayName:"Url Path",type:"string",group:"General",plug:"input",default:u}),e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){s.name==="title"&&r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.Page",function(o){n(o)}),t.on("componentRenamed",function(o){const r=t.getNodesWithType("Page").filter(s=>o.roots.includes(s.id));r.length>0&&n(r[0])});for(const o of t.getNodesWithType("Page"))n(o)})}};NodeSharedPortDefinitions.addPaddingInputs(PageNode);const Page=createNodeFromReactComponent(PageNode);function RouterReactComponent(e){const{didMount:t,willUnmount:n,children:o,style:r}=e;return React__namespace.useEffect(()=>(t(),()=>{n()}),[]),React__namespace.createElement("div",{className:e.className,style:r},o)}function _trimUrlPart(e){return e[0]==="/"&&(e=e.substring(1)),e[e.length-1]==="/"&&(e=e.substring(0,e.length-1)),e}function getBaseUrlLength(e){if(!e.startsWith("/"))try{return new URL(e).pathname.length}catch{}return e.length}const RouterNode={name:"Router",displayNodeName:"Page Router",category:"Visuals",docs:"https://docs.noodl.net/nodes/navigation/page-router",useVariants:!1,connectionPanel:{groupPriority:["General","Actions","Events","Mounted"]},initialize:function(){this._internal.asyncQueue=new ASyncQueue,this.onScheduleReset=()=>{this.scheduleReset()},this.props.didMount=()=>{this._internal.isMounted=!0,typeof window<"u"&&(window.history&&window.history.pushState?window.addEventListener("popstate",this.onScheduleReset):window.addEventListener("hashchange",this.onScheduleReset)),this._registerRouter()},this.props.willUnmount=()=>{this._internal.isMounted=!1,window.removeEventListener("popstate",this.onScheduleReset),window.removeEventListener("hashchange",this.onScheduleReset),this._deregisterRouter()},this.props.layout="column"},getInspectInfo(){return this._internal.currentUrl},defaultCss:{flex:"1 1",alignSelf:"stretch",position:"relative",display:"flex",flexDirection:"column"},getReactComponent(){return RouterReactComponent},inputs:{name:{type:"string",displayName:"Name",group:"General",set:function(e){this._deregisterRouter(),this._internal.name=e,this._internal.isMounted&&this._registerRouter()}},pages:{type:{name:"pages",allowEditOnly:!0},displayName:"Pages",group:"Pages",set:function(e){this._internal.pages=e,this._internal.isMounted&&this.scheduleReset()}},urlPath:{type:"string",displayName:"Url path",group:"General",set:function(e){this._internal.urlPath=e}},clip:{displayName:"Clip Behavior",type:{name:"enum",enums:[{value:"contentHeight",label:"Expand to content size"},{value:"scroll",label:"Scroll"},{value:"clip",label:"Clip content"}]},group:"Layout",default:"contentHeight",set(e){switch(e){case"scroll":this.setStyle({overflow:"auto"});break;case"clip":this.setStyle({overflow:"hidden"});break;default:this.removeStyle(["overflow"]);break}}},reset:{type:"signal",displayName:"Reset",group:"Actions",valueChangedToTrue:function(){this.scheduleReset()}}},inputCss:{backgroundColor:{type:"color",displayName:"Background Color",group:"Style",default:"transparent",applyDefault:!1}},outputs:{currentPageTitle:{type:"string",group:"General",displayName:"Current Page Title",getter:function(){return this._internal.currentPage!==void 0?this._internal.currentPage.title:void 0}},currentPageComponent:{type:"string",group:"General",displayName:"Current Page Component",getter:function(){return this._internal.currentPage!==void 0?this._internal.currentPage.component:void 0}}},methods:{_registerRouter(){RouterHandler.instance.registerRouter(this._internal.name,this)},_deregisterRouter(){RouterHandler.instance.deregisterRouter(this._internal.name,this)},setPageOutputs(e){for(const t in e)this._internal[t]=e[t],this.flagOutputDirty(t)},scheduleReset(){const e=this._internal;e.hasScheduledReset||(e.hasScheduledReset=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.hasScheduledReset=!1,this.reset()}))},createPageContainer(){const e=this.nodeScope.createPrimitiveNode("Group");return e.setStyle({flex:"1 0 100%"}),e},reset(){this._internal.asyncQueue.enqueue(this.resetAsync.bind(this))},scrollToTop(){const e=this.getDOMElement();e&&(e.scrollTop=0,Runtime.instance.getProjectSettings().bodyScroll&&e.scrollIntoView())},async resetAsync(){let e,t={};const n=this.matchPageFromUrl();if(n?n.page?(e=n.page.component,t=Object.assign({},n.params,n.query)):(e=this._internal.pages!==void 0?this._internal.pages.startPage:void 0,t=Object.assign({},n.params,n.query)):(e=this._internal.pages.startPage,t={}),e===void 0)return;const o=RouterHandler.instance.getPageInfoForComponent(e);if(this._internal.currentPage===o){shallowObjectsEqual(this._internal.currentParams,t)||(this._internal.currentParams=t,this._updatePageInputs(this._internal.currentPageComponent.nodeScope,t));return}this.scrollToTop();const r=this.getChildren();for(const u in r){const d=r[u];this.removeChild(d),this.nodeScope.deleteNode(d)}const s=await this.nodeScope.createNode(e,guid());this._internal.currentPageComponent=s;const a=s.nodeScope.getNodesWithType("Page");if(a===void 0||a.length!==1)return;this._internal.currentPage=RouterHandler.instance.getPageInfoForComponent(e),this._internal.currentParams=t,this.flagOutputDirty("currentPageTitle"),this.flagOutputDirty("currentPageComponent"),Noodl.SEO.setTitle(this._internal.currentPage.title),this._updatePageInputs(this._internal.currentPageComponent.nodeScope,t);const l=this.createPageContainer();l.addChild(s),this.addChild(l)},_updatePageInputs(e,t){for(const n of e.getNodesWithType("PageInputs"))n._setPageParams(t)},getRelativeURL(e,t){if(!e)return;let n=e.path;if(n===void 0)return;const o=n.match(/{([^}]+)}/g),r=Object.assign({},t);if(o)for(const a of o){const l=a.replace(/[{}]/g,"");t[l]!==void 0&&(n=n.replace(a,encodeURIComponent(r[l])),delete r[l])}const s=[];for(const a in r)s.push({name:a,value:encodeURIComponent(r[a])});return n=_trimUrlPart(n),this._internal.urlPath!==void 0&&(n=_trimUrlPart(this._internal.urlPath)+"/"+n),{path:n,query:s}},getNavigationAbsoluteURL(e,t){let n=this.parent,o={path:"",query:[]};for(;n!==void 0&&typeof n.getNavigationAbsoluteURL!="function";)n=n.getVisualParentNode();n&&(o=n.getNavigationAbsoluteURL(n._internal.currentPage,n._internal.currentParams));const r=this.getRelativeURL(e,t);if(r){const s=o.path.endsWith("/")||r.path.startsWith("/");return{path:o.path+(s?"":"/")+r.path,query:o.query.concat(r.query)}}return o},_getLocationPath:function(){const e=Runtime.instance.getProjectSettings().navigationPathType;if(e===void 0||e==="hash"){let t=location.hash;return t&&(t[0]==="#"&&(t=t.substring(1)),t[0]==="/"&&(t=t.substring(1))),decodeURI(t)}else{let t=location.pathname;if(t&&t[0]==="/"){const n=Noodl.Env.BaseUrl;if(n){const o=getBaseUrlLength(n);t=t.substring(o)}else t=t.substring(1)}return decodeURI(t)}},_getSearchParams:function(){const e=/\+/g,t=/([^&=]+)=?([^&]*)/g,n=function(a){return decodeURIComponent(a.replace(e," "))},o=location.search.substring(1);let r;const s={};for(;r=t.exec(o);)s[n(r[1])]=n(r[2]);return s},getNavigationRemainingPath(){return this._internal.remainingNavigationPath},matchPageFromUrl(){let e=this.parent;for(;e!==void 0&&typeof e.getNavigationRemainingPath!="function";)e=e.getVisualParentNode();let t;if(e===void 0){let l=this._getLocationPath();l[0]==="/"&&(l=l.substring(1)),t=l.split("/")}else t=e.getNavigationRemainingPath();if(t===void 0)return;const n=this._getSearchParams();function o(l,u){const d={};for(let h=0;h<u.length;h++){const f=u[h];if(f[0]==="{"&&f[f.length-1]==="}")l[h]!==void 0&&(d[f.substring(1,f.length-1)]=decodeURIComponent(l[h]));else if(l[h]===void 0||f!==l[h])return}return{params:d,remainingPathParts:l.slice().splice(u.length)}}const r=RouterHandler.instance.getPagesForRouter(this._internal.name);if(r===void 0||r.length===0)return;let s,a=9999;for(const l of r){let u=l.path;if(u===void 0)continue;u=_trimUrlPart(u),this._internal.urlPath!==void 0&&(u=_trimUrlPart(this._internal.urlPath)+"/"+u);const d=u.split("/"),h=o(t,d),f=Math.abs(d.length-t.length);h&&a>f&&(s={match:h,pageInfo:l},a=f)}return s?(this._internal.remainingNavigationPath=s.match.remainingPathParts,{page:s.pageInfo,params:s.match.params,query:n}):{page:void 0,params:{},query:n}},_getCompleteUrlToPage(e,t){const n=this.getNavigationAbsoluteURL(e,t);let o,r;const s=Runtime.instance.getProjectSettings().navigationPathType;s===void 0||s==="hash"?r=n.path:o=n.path;const a=n.query.map(u=>u.name+"="+u.value);return(o!==void 0?o:"")+(a.length>=1?"?"+a.join("&"):"")+(r!==void 0?"#"+r:"")},_updateUrlWithTopPage(){if(window.history!==void 0){this._internal.remainingNavigationPath=void 0;const e=this._getCompleteUrlToPage(this._internal.currentPage,this._internal.currentParams);window.history.pushState({},"",e)}},navigate(e){this._internal.asyncQueue.enqueue(this.navigateAsync.bind(this,e))},async navigateAsync(e){if(e.target===void 0)return;const t=RouterHandler.instance.getPageInfoForComponent(e.target);if(t)if(e.openInNewTab){const n=this._getCompleteUrlToPage(t,e.params);window.open(n,"_blank"),e.hasNavigated&&e.hasNavigated()}else await this._navigateInCurrentWindow(t,e)},async _navigateInCurrentWindow(e,t){this.scrollToTop();const n=this.getChildren();for(const a in n){const l=n[a];this.removeChild(l),this.nodeScope.deleteNode(l)}const o=this.createPageContainer(),r=await this.nodeScope.createNode(t.target,guid());this._internal.currentPage=e,this._internal.currentParams=t.params,this.flagOutputDirty("currentPageTitle"),this.flagOutputDirty("currentPageComponent"),Noodl.SEO.setTitle(this._internal.currentPage.title);const s=r.nodeScope.getNodesWithType("PageInputs");s!==void 0&&s.length>0&&s.forEach(a=>{a._setPageParams(t.params)}),o.addChild(r),this.addChild(o),this._updateUrlWithTopPage(),t.hasNavigated&&t.hasNavigated(),RouterHandler.instance.onNavigated(this._internal.name,e)},registerInputIfNeeded:function(e){this.hasInput(e)}}};function shallowObjectsEqual(e,t){const n=Object.keys(e||{}),o=Object.keys(t||{});return n.length!==o.length?!1:n.every(r=>e[r]===t[r])}const Router=createNodeFromReactComponent(RouterNode),ExternalLinkNode={name:"net.noodl.externallink",displayNodeName:"External Link",docs:"https://docs.noodl.net/nodes/navigation/external-link",category:"Navigation",nodeDoubleClickAction:{focusPort:"link"},inputs:{link:{type:"string",displayName:"Link"},openInNewTab:{type:"boolean",displayName:"Open In New Tab",default:!0},do:{type:"signal",displayName:"Do",valueChangedToTrue(){const e=this.getInputValue("openInNewTab"),t=e?"noopener,noreferrer":"",n=e===!0||e===void 0?"_blank":"_self";window.open(this.getInputValue("link"),n,t)}}}},ExternalLink={node:ExternalLinkNode};function polarToCartesian(e,t,n,o){const r=(o-90)*Math.PI/180;return{x:e+n*Math.cos(r),y:t+n*Math.sin(r)}}function filledArc(e,t,n,o,r){r%360===o%360&&(r-=1e-4);const s=polarToCartesian(e,t,n,r),a=polarToCartesian(e,t,n,o),l=r-o<=180?"0":"1";return["M",s.x,s.y,"A",n,n,0,l,0,a.x,a.y,"L",e,t,"L",s.x,s.y].join(" ")}function arc(e,t,n,o,r){r%360===o%360&&(r-=1e-4);const s=polarToCartesian(e,t,n,r),a=polarToCartesian(e,t,n,o),l=r-o<=180?"0":"1";return["M",s.x,s.y,"A",n,n,0,l,0,a.x,a.y].join(" ")}let Circle$1=class extends React.Component{constructor(t){super(t)}render(){let t,n;const o=this.props.size/2,{startAngle:r,endAngle:s}=this.props;if(this.props.fillEnabled){const l=this.props.size/2;t=React.createElement("path",{d:filledArc(l,l,l,r,s),fill:this.props.fillColor})}if(this.props.strokeEnabled){const{strokeColor:l,strokeWidth:u,strokeLineCap:d}=this.props,h=o-this.props.strokeWidth/2,f=arc(o,o,h,r,s);n=React.createElement("path",{d:f,stroke:l,strokeWidth:u,fill:"transparent",strokeLinecap:d})}const a={...this.props.style};return Layout.size(a,this.props),Layout.align(a,this.props),a.opacity===0&&(a.pointerEvents="none"),React.createElement("div",{className:this.props.className,...this.props.dom,...pointerProps(this.props),style:a},React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:this.props.size,height:this.props.size},t,n))}};const CircleNode={name:"Circle",docs:"https://docs.noodl.net/nodes/basic-elements/circle",connectionPanel:{groupPriority:["General","Fill","Stroke","Dimensions","Style","Actions","Events","Mounted","Margin and padding","Pointer Events","Hover Events"]},getReactComponent(){return Circle$1},noodlNodeAsProp:!0,allowChildren:!1,defaultCss:{flexShrink:0,position:"relative",display:"flex"},inputProps:{size:{displayName:"Size",default:"100",group:"Dimension",type:{name:"number"},index:10,allowVisualStates:!0},fillEnabled:{group:"Fill",displayName:"Fill",default:!0,type:"boolean",index:20,allowVisualStates:!0},fillColor:{group:"Fill",displayName:"Fill Color",default:"red",type:"color",index:21,allowVisualStates:!0},strokeEnabled:{index:23,group:"Stroke",default:!1,displayName:"Stroke",type:"boolean",allowVisualStates:!0},strokeWidth:{index:24,group:"Stroke",displayName:"Stroke Width",default:10,type:{name:"number"},allowVisualStates:!0},strokeColor:{index:25,group:"Stroke",displayName:"Stroke Color",type:"color",default:"black",allowVisualStates:!0},strokeLineCap:{index:26,group:"Stroke",displayName:"Line Cap",type:{name:"enum",enums:[{label:"Butt",value:"butt"},{label:"Round",value:"round"}]},default:"butt",allowVisualStates:!0},startAngle:{displayName:"Start Angle",type:"number",default:0,group:"Style",index:198,allowVisualStates:!0},endAngle:{displayName:"End Angle",type:"number",default:360,group:"Style",index:199,allowVisualStates:!0}}};NodeSharedPortDefinitions.addTransformInputs(CircleNode),NodeSharedPortDefinitions.addMarginInputs(CircleNode),NodeSharedPortDefinitions.addSharedVisualInputs(CircleNode),NodeSharedPortDefinitions.addAlignInputs(CircleNode),NodeSharedPortDefinitions.addPointerEventOutputs(CircleNode);const Circle=createNodeFromReactComponent(CircleNode);function ForEachComponent(e){const{didMount:t,willUnmount:n}=e;return React.useEffect(()=>(t(),()=>{n()}),[]),null}const defaultDynamicScript=`// Set the 'component' variable to the name of the desired component for this item.
34
+ `}const TextInputNode={name:"net.noodl.controls.textinput",displayName:"Text Input",docs:"https://docs.noodl.net/nodes/ui-controls/text-input",allowChildren:!1,noodlNodeAsProp:!0,usePortAsLabel:"label",nodeDoubleClickAction:{focusPort:"label"},connectionPanel:{groupPriority:["General","Text","Style","Actions","Events","States","Mounted","Text Style","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},getReactComponent(){return TextInput$2},initialize(){this.props.attrs={},this.props.startValue="",this.props.id=this._internal.controlId="input-"+guid()},inputProps:{type:{displayName:"Type",group:"Text",index:19,type:{name:"enum",enums:[{label:"Text",value:"text"},{label:"Text Area",value:"textArea"},{label:"Email",value:"email"},{label:"Number",value:"number"},{label:"Password",value:"password"},{label:"URL",value:"url"}]},default:"text"},placeholder:{index:22,group:"Text",displayName:"Placeholder",default:"Type here...",type:{name:"string"}},maxLength:{group:"Text",displayName:"Max length",type:"number",index:24}},inputs:{placeHolderOpacity:{index:23,group:"Text",displayName:"Placeholder opacity",type:"number",default:.5,set(e){const t=this._internal.controlId;Utils$1.updateStylesForClass(t,{placeholderOpacity:e},_styleTemplate$3)}},set:{group:"Actions",displayName:"Set",type:"signal",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{this.setText(this._internal.text)})}},startValue:{index:18,displayName:"Text",type:"string",group:"Text",set(e){this._internal.text!==e&&(this._internal.text=e,this.isInputConnected("set")===!1&&this.setText(e))}},clear:{type:"signal",group:"Actions",displayName:"Clear",valueChangedToTrue(){this.clear()}},focus:{type:"signal",group:"Actions",displayName:"Focus",valueChangedToTrue(){this.context.setNodeFocused(this,!0)}},blur:{type:"signal",group:"Actions",displayName:"Blur",valueChangedToTrue(){this.context.setNodeFocused(this,!1)}},textAlignX:{group:"Text Alignment",index:13,displayName:"Text Horizontal Align",type:{name:"enum",enums:[{label:"left",value:"left"},{label:"center",value:"center"},{label:"right",value:"right"}],alignComp:"justify"},default:"left",set(e){switch(e){case"left":this.setStyle({textAlign:"left"},"input");break;case"center":this.setStyle({textAlign:"center"},"input");break;case"right":this.setStyle({textAlign:"right"},"input");break}}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputCss:{backgroundColor:{index:100,displayName:"Background Color",group:"Style",type:"color",default:"transparent",allowVisualStates:!0,styleTag:"inputWrapper"}},outputProps:{onTextChanged:{group:"General",displayName:"Text",type:"string",index:1,onChange(){this.sendSignalOnOutput("textChanged")}},onEnter:{group:"Events",displayName:"On Enter",type:"signal"}},outputs:{textChanged:{displayName:"Text Changed",type:"signal",group:"General",index:2}},methods:{_focus(){this.innerReactComponentRef&&this.innerReactComponentRef.focus()},_blur(){this.innerReactComponentRef&&this.innerReactComponentRef.blur()},clear(){this.props.startValue="",this.innerReactComponentRef&&this.innerReactComponentRef.setText("")},setText(e){this.props.startValue=e,this.innerReactComponentRef?this.innerReactComponentRef.hasFocus()===!1&&this.innerReactComponentRef.setText(e):this.outputPropValues.onTextChanged!==e&&(this.outputPropValues.onTextChanged=e,this.flagOutputDirty("onTextChanged"))}}};NodeSharedPortDefinitions.addDimensions(TextInputNode,{defaultSizeMode:"contentSize",contentLabel:"Text"}),NodeSharedPortDefinitions.addIconInputs(TextInputNode,{enableIconPlacement:!0,defaults:{useIcon:!1,iconColor:"#000000"}}),NodeSharedPortDefinitions.addLabelInputs(TextInputNode,{enableSpacing:!0,styleTag:"label",displayName:"Label"}),NodeSharedPortDefinitions.addTextStyleInputs(TextInputNode,{styleTag:"input",portPrefix:"",portIndex:18,popout:{group:"input-text-style",label:"Text Style",parentGroup:"Text"}}),NodeSharedPortDefinitions.addAlignInputs(TextInputNode),NodeSharedPortDefinitions.addTransformInputs(TextInputNode),NodeSharedPortDefinitions.addPaddingInputs(TextInputNode,{styleTag:"inputWrapper"}),NodeSharedPortDefinitions.addMarginInputs(TextInputNode),NodeSharedPortDefinitions.addSharedVisualInputs(TextInputNode),NodeSharedPortDefinitions.addBorderInputs(TextInputNode,{styleTag:"inputWrapper"}),NodeSharedPortDefinitions.addShadowInputs(TextInputNode,{styleTag:"inputWrapper"}),Utils$1.addControlEventsAndStates(TextInputNode);const TextInput$1=createNodeFromReactComponent(TextInputNode);class ASyncQueue{constructor(){this.queue=[],this.pendingPromise=!1}enqueue(t){return new Promise((n,o)=>{this.queue.push({promise:t,resolve:n,reject:o}),this.dequeue()})}dequeue(){if(this.workingOnPromise)return!1;const t=this.queue.shift();if(!t)return!1;try{this.workingOnPromise=!0,t.promise().then(n=>{this.workingOnPromise=!1,t.resolve(n),this.dequeue()}).catch(n=>{this.workingOnPromise=!1,t.reject(n),this.dequeue()})}catch(n){this.workingOnPromise=!1,t.reject(n),this.dequeue()}return!0}}class NavigationHandler{constructor(){this._pageStacks={},this._navigationQueue=[]}_performNavigation(t,n,o){if(t=t||"Main",this._pageStacks[t])for(const r of this._pageStacks[t])o==="navigate"?r.navigate(n):r.replace(n);else this._navigationQueue.push({name:t,args:n,type:o})}navigate(t,n){t=t||"Main",this._performNavigation(t,n,"navigate")}replace(t,n){t=t||"Main",this._performNavigation(t,n,"replace")}registerPageStack(t,n){t=t||"Main",this._pageStacks[t]||(this._pageStacks[t]=[]),this._pageStacks[t].push(n);let o=!1,r=!1,s=0;for(;s<this._navigationQueue.length;){const a=this._navigationQueue[s];a.name===t?(a.type==="navigate"?(o||(n.reset(),o=!0),n.navigate(a.args)):n.replace(a.args),r=!0,this._navigationQueue.splice(s,1)):s++}r||n.reset()}deregisterPageStack(t,n){if(t=t||"Main",!this._pageStacks[t])return;const o=this._pageStacks[t].indexOf(n);o!==-1&&(this._pageStacks[t].splice(o,1),this._pageStacks[t].length===0&&delete this._pageStacks[t])}}NavigationHandler.instance=new NavigationHandler;let Transition$2=class{constructor(){this._frame=this.frame.bind(this)}start(t){this.cb=t.end,this.timing.delay+this.timing.dur===0?this.end():(this.transitionForward=!t.back,this.startTime=window.performance.now(),requestAnimationFrame(this._frame))}frame(){var t=(window.performance.now()-(this.startTime+this.timing.delay))/this.timing.dur,n=Math.max(0,Math.min(t,1));this.transitionForward?this.forward(n):this.back(n),window.performance.now()<=this.startTime+this.timing.dur+this.timing.delay?requestAnimationFrame(this._frame):this.end()}end(){this.cb&&this.cb()}};class NoneTransition extends Transition$2{constructor(t,n,o){super(),this.from=t,this.to=n,this.timing={dur:0,delay:0}}update(t){}forward(t){}back(t){}static ports(){return[]}}class PushTransition extends Transition$2{constructor(t,n,o){super(),this.from=t,this.to=n,this.timing=o.timing||{curve:[0,0,.58,1],dur:300,delay:0},this.distance=o.shift||{value:25,unit:"%"},typeof this.distance=="number"&&(this.distance={value:this.distance,unit:"%"}),this.direction=o.direction||"Left",this.timing.curve[0]=Math.min(1,Math.max(0,this.timing.curve[0])),this.timing.curve[2]=Math.min(1,Math.max(0,this.timing.curve[2])),this.ease=BezierEasing.apply(null,this.timing.curve).get,this.crossfade=o.crossfade===void 0?!1:o.crossfade,this.darkOverlay=o.darkoverlay===void 0?!0:o.darkoverlay,this.darkOverlayAmount=o.darkoverlayamount===void 0?.5:o.darkoverlayamount,this.zoom=o.zoom||{value:25,unit:"%"},typeof this.zoom=="number"&&(this.zoom={value:this.zoom,unit:"%"}),this.darkOverlay&&(this.darkOverlay=t.nodeScope.createPrimitiveNode("Group"),this.darkOverlay.setInputValue("position","absolute"),this.darkOverlay.setInputValue("sizeMode","explicit"),this.darkOverlay.setInputValue("width",{value:100,unit:"%"}),this.darkOverlay.setInputValue("height",{value:100,unit:"%"}),this.darkOverlay.setInputValue("backgroundColor","#000000"),this.darkOverlay.setInputValue("opacity",0))}update(t){if(this.direction==="In"||this.direction==="Out"){var n=this.zoom.value/100;n=this.direction==="Out"?-n:n,this.from.setStyle({transform:"scale("+(1+n*t)+")",opacity:this.crossfade?1-t:1}),this.to.setStyle({transform:"scale("+(1-n*(1-t))+")",opacity:this.crossfade?t:1})}else{var o=this.distance.value,r=this.distance.unit;const s={Up:{x:0,y:-1},Down:{x:0,y:1},Left:{x:-1,y:0},Right:{x:1,y:0}},a={x:s[this.direction].x*o,y:s[this.direction].y*o},l={x:s[this.direction].x*100,y:s[this.direction].y*100};this.from.setStyle({transform:"translate("+a.x*t+r+","+a.y*t+r+")",opacity:this.crossfade?1-t:1}),this.to.setStyle({transform:"translate("+l.x*(t-1)+r+","+l.y*(t-1)+"%)",opacity:this.crossfade?t:1})}this.darkOverlay&&this.darkOverlay.setStyle({opacity:t*this.darkOverlayAmount})}forward(t){var n=this.ease(t);this.update(n)}back(t){var n=this.ease(t);this.update(1-n)}start(t){super.start(t),this.darkOverlay&&this.from.addChild(this.darkOverlay)}end(t){this.darkOverlay&&this.from.removeChild(this.darkOverlay),super.end(t)}static ports(t){const n=[];return n.push({name:"tr-direction",displayName:"Direction",group:"Transition",type:{name:"enum",enums:["Right","Left","Up","Down","In","Out"]},default:"Left",plug:"input"}),t["tr-direction"]==="In"||t["tr-direction"]==="Out"?n.push({name:"tr-zoom",displayName:"Zoom",group:"Transition",type:{name:"number",units:["%"]},default:{value:25,unit:"%"},plug:"input"}):n.push({name:"tr-shift",displayName:"Shift Distance",group:"Transition",type:{name:"number",units:["%","px"]},default:{value:25,unit:"%"},plug:"input"}),n.push({name:"tr-crossfade",displayName:"Crossfade",group:"Transition",type:"boolean",default:!1,plug:"input"}),n.push({name:"tr-darkoverlay",displayName:"Dark Overlay",group:"Transition",type:"boolean",default:!0,plug:"input"}),n.push({name:"tr-darkoverlayamount",displayName:"Dark Overlay Amount",group:"Transition",type:"number",default:.5,plug:"input"}),n.push({name:"tr-timing",displayName:"Timing",group:"Transition",type:"curve",plug:"input"}),n}}class PopupTransition extends Transition$2{constructor(t,n,o){super(),this.from=t,this.to=n,this.timing=o.timing||{curve:[0,0,.58,1],dur:300,delay:0},this.distance=o.shift||{value:25,unit:"%"},typeof this.distance=="number"&&(this.distance={value:this.distance,unit:"%"}),this.direction=o.direction||"Right",this.timing.curve[0]=Math.min(1,Math.max(0,this.timing.curve[0])),this.timing.curve[2]=Math.min(1,Math.max(0,this.timing.curve[2])),this.ease=BezierEasing.apply(null,this.timing.curve).get,this.fadein=o.fadein===void 0?!1:o.fadein,this.zoom=o.zoom||{value:25,unit:"%"},typeof this.zoom=="number"&&(this.zoom={value:this.zoom,unit:"%"})}update(t){if(this.direction==="In"||this.direction==="Out"){var n=this.zoom.value/100;n=this.direction==="Out"?-n:n,this.to.setStyle({transform:"scale("+(1-n*(1-t))+")",opacity:this.crossfade?t:1})}else{var o=this.distance.value,r=this.distance.unit;const s={Up:{x:0,y:-1},Down:{x:0,y:1},Left:{x:-1,y:0},Right:{x:1,y:0}},a={x:s[this.direction].x*o,y:s[this.direction].y*o};this.to.setStyle({transform:"translate("+a.x*(t-1)+r+","+a.y*(t-1)+r+")",opacity:this.fadein?t:1})}}forward(t){var n=this.ease(t);this.update(n)}back(t){var n=this.ease(t);this.update(1-n)}static ports(t){var n=[];return n.push({name:"tr-direction",displayName:"Direction",group:"Transition",type:{name:"enum",enums:["Right","Left","Up","Down","In","Out"]},default:"Right",plug:"input"}),t["tr-direction"]==="In"||t["tr-direction"]==="Out"?n.push({name:"tr-zoom",displayName:"Zoom",group:"Transition",type:{name:"number",units:["%"]},default:{value:25,unit:"%"},plug:"input"}):n.push({name:"tr-shift",displayName:"Shift Distance",group:"Transition",type:{name:"number",units:["%","px"]},default:{value:25,unit:"%"},plug:"input"}),n.push({name:"tr-fadein",displayName:"Fade In",group:"Transition",type:"boolean",default:!1,plug:"input"}),n.push({name:"tr-timing",displayName:"Timing",group:"Transition",type:"curve",plug:"input"}),n}}const Transitions={None:NoneTransition,Push:PushTransition,Popup:PopupTransition};function PageStackReactComponent(e){const{didMount:t,willUnmount:n,style:o,children:r}=e;return React.useEffect(()=>(t(),()=>{n()}),[]),React.createElement("div",{style:o},r)}const PageStack={name:"Page Stack",displayNodeName:"Component Stack",category:"Visuals",docs:"https://docs.noodl.net/nodes/component-stack/component-stack-node",useVariants:!1,initialize(){this._internal.stack=[],this._internal.topPageName="",this._internal.stackDepth=0,this._internal.pageInfo={},this._internal.asyncQueue=new ASyncQueue,this.onScheduleReset=()=>{this.scheduleReset()},this.props.didMount=()=>{this._internal.isMounted=!0,window.history&&window.history.pushState?window.addEventListener("popstate",this.onScheduleReset):window.addEventListener("hashchange",this.onScheduleReset),this._registerPageStack()},this.props.willUnmount=()=>{this._internal.isMounted=!1,window.removeEventListener("popstate",this.onScheduleReset),window.removeEventListener("hashchange",this.onScheduleReset),this._deregisterPageStack()}},getInspectInfo(){return this._internal.stack.length===0?"No active page":[{type:"text",value:"Active Components:"}].concat(this._internal.stack.map(t=>({type:"text",value:"- "+this._findPage(t.pageId).label})))},defaultCss:{width:"100%",flex:"1 1 100%",position:"relative",display:"flex",flexDirection:"column"},getReactComponent(){return PageStackReactComponent},inputs:{name:{type:{name:"string",identifierOf:"PackStack"},displayName:"Name",group:"General",default:"Main",set:function(e){this._deregisterPageStack(),this._internal.name=e,this._internal.isMounted&&this._registerPageStack()}},useRoutes:{type:"boolean",displayName:"Use Routes",group:"General",default:!1,set:function(e){this._internal.useRoutes=!!e}},clip:{displayName:"Clip Content",type:"boolean",group:"Layout",default:!0,set(e){e?this.setStyle({overflow:"hidden"}):this.removeStyle(["overflow"])}},pages:{type:"proplist",displayName:"Components",group:"Components",set:function(e){this._internal.pages=e,this._internal.isMounted&&this.scheduleReset()}},reset:{type:"signal",displayName:"Reset",group:"Actions",valueChangedToTrue:function(){this.scheduleReset()}}},inputCss:{backgroundColor:{type:"color",displayName:"Background Color",group:"Style",default:"transparent",applyDefault:!1}},outputs:{topPageName:{type:"string",displayName:"Top Component Name",group:"General",get(){return this._internal.topPageName}},stackDepth:{type:"number",displayName:"Stack Depth",group:"General",get(){return this._internal.stackDepth}}},methods:{_registerPageStack(){NavigationHandler.instance.registerPageStack(this._internal.name,this)},_deregisterPageStack(){NavigationHandler.instance.deregisterPageStack(this._internal.name,this)},_findPage(e){if(this._internal.pageInfo[e]){const n=this._internal.pageInfo[e],o=this._internal.pages.find(r=>r.id===e);return{component:String(n.component),label:String(o.label),id:String(e)}}const t=this._internal.pages.find(n=>n.label===e);if(t){const n=this._internal.pageInfo[t.id];return{component:String(n.component),label:String(t.label),id:String(t.id)}}},setPageOutputs(e){for(const t in e)this._internal[t]=e[t],this.flagOutputDirty(t)},scheduleReset(){var e=this._internal;e.hasScheduledReset||(e.hasScheduledReset=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.hasScheduledReset=!1,this.reset()}))},createPageContainer(){const e=this.nodeScope.createPrimitiveNode("Group");return e.setStyle({flex:"1 0 100%"}),e},reset(){this._internal.asyncQueue.enqueue(this.resetAsync.bind(this))},async resetAsync(){var e=this.getChildren();for(var t in e){var n=e[t];this.removeChild(n),this.nodeScope.deleteNode(n)}if(this._internal.pages===void 0||this._internal.pages.length===0)return;let o,r={};var s=this.matchPageFromUrl();s!==void 0?(o=s.pageId,r=Object.assign({},s.query,s.params)):(o=this._internal.startPageId,o===void 0&&(o=this._internal.pages[0].id));const a=this._findPage(o);if(a===void 0||a.component===void 0)return;var l=await this.nodeScope.createNode(a.component,guid());for(var u in r)l.setInputValue(u,r[u]);const d=this.createPageContainer();d.addChild(l),this.addChild(d),this._internal.stack=[{from:null,page:d,pageId:o,pageInfo:a,params:r,componentName:this._internal.startPage}],this.setPageOutputs({topPageName:a.label,stackDepth:this._internal.stack.length})},getRelativeURL(){var e=this._internal.stack[this._internal.stack.length-1];if(e!==void 0){var t=e.pageInfo.path;if(t===void 0){var n=this._internal.pages.find(u=>u.id==e.pageId);if(n===void 0)return;t=n.label.replace(/\s+/g,"-").toLowerCase()}var o=t.match(/{([^}]+)}/g),r=Object.assign({},e.params);if(o)for(var s of o){var a=s.replace(/[{}]/g,"");e.params[a]!==void 0&&(t=t.replace(s,encodeURIComponent(r[a])),delete r[a])}var l=[];for(var a in r)l.push({name:a,value:r[a]});return t.startsWith("/")&&(t=t.substring(1)),{path:t,query:l}}},getNavigationAbsoluteURL(){for(var e=this.parent;e!==void 0&&typeof e.getNavigationAbsoluteURL!="function";)e=e.getVisualParentNode();if(e===void 0)var t={path:"",query:[]};else var t=e.getNavigationAbsoluteURL();var n=this.getRelativeURL();return n===void 0?t:{path:t.path+(t.path.endsWith("/")?"":"/")+n.path,query:t.query.concat(n.query)}},_getLocationPath:function(){var e=Runtime.instance.getProjectSettings().navigationPathType;if(e===void 0||e==="hash"){var t=location.hash;return t&&(t[0]==="#"&&(t=t.substring(1)),t[0]==="/"&&(t=t.substring(1))),t}else{var n=location.pathname;return n&&n[0]==="/"&&(n=n.substring(1)),n}},_getSearchParams:function(){for(var e,t=/\+/g,n=/([^&=]+)=?([^&]*)/g,o=function(a){return decodeURIComponent(a.replace(t," "))},r=window.location.search.substring(1),s={};e=n.exec(r);)s[o(e[1])]=o(e[2]);return s},getNavigationRemainingPath(){return this._internal.remainingNavigationPath},matchPageFromUrl(e){if(!this._internal.useRoutes||this._internal.pages===void 0||this._internal.pages.length===0)return;for(var t=this.parent;t!==void 0&&typeof t.getNavigationRemainingPath!="function";)t=t.getVisualParentNode();if(t===void 0){var n=this._getLocationPath();n[0]==="/"&&(n=n.substring(1));var o=n.split("/")}else var o=t.getNavigationRemainingPath();if(o===void 0)return;var r=this._getSearchParams();function s(d,h){for(var f={},g=0;g<h.length;g++){if(d[g]===void 0)return;var b=h[g];if(b[0]==="{"&&b[b.length-1]==="}")f[b.substring(1,b.length-1)]=decodeURIComponent(d[g]);else if(b!==d[g])return}return{params:f,remainingPathParts:d.splice(h.length)}}for(var a of this._internal.pages){var l=this._internal.pageInfo[a.id];if(l===void 0)continue;var u=l.path;u===void 0&&(u=a.label.replace(/\s+/g,"-").toLowerCase()),u[0]==="/"&&(u=u.substring(1));let d=s(o,u.split("/"));if(d)return this._internal.remainingNavigationPath=d.remainingPathParts,{pageId:a.id,params:d.params,query:r}}},_updateUrlWithTopPage(){if(this._internal.useRoutes&&window.history!==void 0){var e=this.getNavigationAbsoluteURL(),t,n,o=Runtime.instance.getProjectSettings().navigationPathType;o===void 0||o==="hash"?n=e.path:t=e.path;var r=e.query.map(a=>a.name+"="+a.value),s=(t!==void 0?t:"")+(r.length>=1?"?"+r.join("&"):"")+(n!==void 0?"#"+n:"");this._internal.remainingNavigationPath=void 0,window.history.pushState({},"",s)}},replace(e){this._internal.asyncQueue.enqueue(this.replaceAsync.bind(this,e))},async replaceAsync(e){if(this._internal.pages===void 0||this._internal.pages.length===0||this._internal.isTransitioning)return;const t=e.target||this._internal.pages[0].id,n=this._findPage(t);if(n===void 0||n.component===void 0)return;var o=this.getChildren();for(var r in o){var s=o[r];this.removeChild(s),this.nodeScope.deleteNode(s)}const a=this.createPageContainer(),l=await this.nodeScope.createNode(n.component,guid());for(var u in e.params)l.setInputValue(u,e.params[u]);a.addChild(l),this.addChild(a),this._internal.stack=[{from:null,page:a,pageId:t,pageInfo:n,params:e.params,componentName:e.target}],this.setPageOutputs({topPageName:n.label,stackDepth:this._internal.stack.length}),this._updateUrlWithTopPage(),e.hasNavigated&&e.hasNavigated()},navigate(e){this._internal.asyncQueue.enqueue(this.navigateAsync.bind(this,e))},async navigateAsync(e){if(this._internal.pages===void 0||this._internal.pages.length===0||this._internal.isTransitioning)return;const t=e.target||this._internal.pages[0].id,n=this._findPage(t);if(n===void 0||n.component===void 0)return;const o=this.createPageContainer();o.setInputValue("position","absolute");const r=await this.nodeScope.createNode(n.component,guid());for(var s in e.params)r.setInputValue(s,e.params[s]);o.addChild(r);const a=r.nodeScope.getNodesWithType("PageStackNavigateBack");if(a&&a.length>0)for(var l=0;l<a.length;l++)a[l]._setBackCallback(this.back.bind(this));const u=this._internal.stack[this._internal.stack.length-1],d={from:u.page,page:o,pageInfo:n,pageId:t,params:e.params,transition:new Transitions[e.transition.type||"Push"](u.page,o,e.transition),backCallback:e.backCallback,componentName:e.target};this._internal.stack.push(d),this.setPageOutputs({topPageName:n.label,stackDepth:this._internal.stack.length}),this._updateUrlWithTopPage(),d.transition.forward(0),this._internal.isTransitioning=!0,d.transition.start({end:()=>{this._internal.isTransitioning=!1,this.removeChild(u.page),o.setInputValue("position","relative")}}),this.addChild(o),e.hasNavigated&&e.hasNavigated()},back(e){if(this._internal.stack.length<=1||this._internal.isTransitioning)return;var t=this._internal.stack[this._internal.stack.length-1];t.page.setInputValue("position","absolute"),this.addChild(t.from,0),t.backCallback&&t.backCallback(e.backAction,e.results);const n=this._findPage(this._internal.stack[this._internal.stack.length-2].pageId);this.setPageOutputs({topPageName:n.label,stackDepth:this._internal.stack.length-1}),this._internal.isTransitioning=!0,t.transition.start({end:()=>{this._internal.isTransitioning=!1,t.page.setInputValue("position","relative"),this.removeChild(t.page),this.nodeScope.deleteNode(t.page),this._internal.stack.pop(),this._updateUrlWithTopPage()},back:!0})},setPageComponent(e,t){var n=this._internal;n.pageInfo[e]||(n.pageInfo[e]={}),n.pageInfo[e].component=t},setPagePath(e,t){var n=this._internal;n.pageInfo[e]||(n.pageInfo[e]={}),n.pageInfo[e].path=t},setStartPage(e){this._internal.startPageId=e},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e.startsWith("pageComp-"))return this.registerInput(e,{set:this.setPageComponent.bind(this,e.substring(9))});if(e.startsWith("pagePath-"))return this.registerInput(e,{set:this.setPagePath.bind(this,e.substring(9))});if(e==="startPage")return this.registerInput(e,{set:this.setStartPage.bind(this)})}}},setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[];o.parameters.pages!==void 0&&o.parameters.pages.length>0&&(o.parameters.pages.forEach(a=>{s.push({name:"pageComp-"+a.id,displayName:"Component",editorName:a.label+" | Component",plug:"input",type:"component",parent:"pages",parentItemId:a.id}),o.parameters.useRoutes===!0&&s.push({name:"pagePath-"+a.id,displayName:"Path",editorName:a.label+" | Path",plug:"input",type:"string",default:a.label.replace(/\s+/g,"-").toLowerCase(),parent:"pages",parentItemId:a.id})}),s.push({plug:"input",type:{name:"enum",enums:o.parameters.pages.map(a=>({label:a.label,value:a.id})),allowEditOnly:!0},group:"General",displayName:"Start Page",name:"startPage",default:o.parameters.pages[0].id})),e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){(s.name==="pages"||s.name==="useRoutes")&&r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.Page Stack",function(o){n(o)});for(const o of t.getNodesWithType("Page Stack"))n(o)})}},NavigationStack=createNodeFromReactComponent(PageStack),ogPopout={group:"seo-og",label:"Open Graph",parentGroup:"Experimental SEO"},twitterPopout={group:"seo-twitter",label:"Twitter",parentGroup:"Experimental SEO"},META_TAGS=[{isProperty:!0,key:"description",displayName:"Description",group:"Experimental SEO"},{isProperty:!0,key:"robots",displayName:"Robots",group:"Experimental SEO"},{isProperty:!0,key:"og:title",displayName:"Title",editorName:"OG Title",group:"General",popout:ogPopout},{isProperty:!0,key:"og:description",displayName:"Description",editorName:"OG Description",group:"General",popout:ogPopout},{isProperty:!0,key:"og:url",displayName:"Url",editorName:"OG Url",group:"General",popout:ogPopout},{isProperty:!0,key:"og:type",displayName:"Type",editorName:"OG Type",group:"General",popout:ogPopout},{isProperty:!0,key:"og:image",displayName:"Image",editorName:"OG Image",group:"Image",popout:ogPopout},{isProperty:!0,key:"og:image:width",displayName:"Image Width",editorName:"OG Image Width",group:"Image",popout:ogPopout},{isProperty:!0,key:"og:image:height",displayName:"Image Height",editorName:"OG Image Height",group:"Image",popout:ogPopout},{isProperty:!1,key:"twitter:card",displayName:"Card",editorName:"Twitter Card",group:"General",popout:twitterPopout},{isProperty:!1,key:"twitter:title",displayName:"Title",editorName:"Twitter Title",group:"General",popout:twitterPopout},{isProperty:!1,key:"twitter:description",displayName:"Description",editorName:"Twitter Description",group:"General",popout:twitterPopout},{isProperty:!1,key:"twitter:image",displayName:"Image",editorName:"Twitter Image",group:"General",popout:twitterPopout}];function Page$1(e){const{style:t,children:n}=e;return Layout.size(t,e),Layout.align(t,e),META_TAGS.forEach(o=>{const r=e.metatags&&e.metatags[o.key];Noodl.SEO.setMeta(o.key,r)}),React.createElement("div",{style:t,className:e.className},n)}const PageNode={name:"Page",displayNodeName:"Page",category:"Visuals",docs:"https://docs.noodl.net/nodes/navigation/page",useVariants:!1,mountedInput:!1,allowAsExportRoot:!1,singleton:!0,connectionPanel:{groupPriority:["General","Mounted"]},initialize:function(){this.props.layout="column",this.isInputConnected("onPageReady")&&this.nodeScope.context.eventEmitter.emit("SSR_PageLoading",this.id)},defaultCss:{display:"flex",flexDirection:"column",position:"relative",alignItems:"flex-start",flex:"1 1",alignSelf:"stretch"},getReactComponent(){return Page$1},inputs:{sitemapIncluded:{index:80001,displayName:"Included",group:"Experimental Sitemap",default:!0,type:{name:"boolean",allowEditOnly:!0}},sitemapChangefreq:{index:80002,displayName:"Change Freq",group:"Experimental Sitemap",default:"weekly",type:{name:"enum",allowEditOnly:!0,enums:[{label:"always",value:"always"},{label:"hourly",value:"hourly"},{label:"daily",value:"daily"},{label:"weekly",value:"weekly"},{label:"monthly",value:"monthly"},{label:"yearly",value:"yearly"},{label:"never",value:"never"}]}},sitemapPriority:{index:80003,displayName:"Priority",group:"Experimental Sitemap",default:.5,type:{name:"number",allowEditOnly:!0}}},inputProps:META_TAGS.reduce((e,t,n)=>(e[t.key]={index:8e4+n,displayName:t.displayName,editorName:t.editorName||t.displayName,propPath:"metatags",group:t.group,popout:t.popout,type:t.type||"string"},e),{}),methods:{getUrlPath:function(){return this._internal.urlPath},getTitle:function(){return this._internal.title},setTitle:function(e){this._internal.title=e},setUrlPath:function(e){this._internal.urlPath=e},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e==="title")return this.registerInput(e,{set:this.setTitle.bind(this)});if(e==="urlPath")return this.registerInput(e,{set:this.setUrlPath.bind(this)})}}},setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[];const a=o.component.name.split("/");s.push({name:"title",displayName:"Title",type:"string",group:"General",plug:"input",default:a[a.length-1]});const u=(o.parameters.title||a[a.length-1]).replace(/\s+/g,"-").toLowerCase();s.push({name:"urlPath",displayName:"Url Path",type:"string",group:"General",plug:"input",default:u}),e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){s.name==="title"&&r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.Page",function(o){n(o)}),t.on("componentRenamed",function(o){const r=t.getNodesWithType("Page").filter(s=>o.roots.includes(s.id));r.length>0&&n(r[0])});for(const o of t.getNodesWithType("Page"))n(o)})}};NodeSharedPortDefinitions.addPaddingInputs(PageNode);const Page=createNodeFromReactComponent(PageNode);function RouterReactComponent(e){const{didMount:t,willUnmount:n,children:o,style:r}=e;return React__namespace.useEffect(()=>(t(),()=>{n()}),[]),React__namespace.createElement("div",{className:e.className,style:r},o)}function _trimUrlPart(e){return e[0]==="/"&&(e=e.substring(1)),e[e.length-1]==="/"&&(e=e.substring(0,e.length-1)),e}function getBaseUrlLength(e){if(!e.startsWith("/"))try{return new URL(e).pathname.length}catch{}return e.length}const RouterNode={name:"Router",displayNodeName:"Page Router",category:"Visuals",usePortAsLabel:"name",docs:"https://docs.noodl.net/nodes/navigation/page-router",useVariants:!1,connectionPanel:{groupPriority:["General","Actions","Events","Mounted"]},initialize:function(){this._internal.asyncQueue=new ASyncQueue,this.onScheduleReset=()=>{this.scheduleReset()},this.props.didMount=()=>{this._internal.isMounted=!0,typeof window<"u"&&(window.history&&window.history.pushState?window.addEventListener("popstate",this.onScheduleReset):window.addEventListener("hashchange",this.onScheduleReset)),this._registerRouter()},this.props.willUnmount=()=>{this._internal.isMounted=!1,window.removeEventListener("popstate",this.onScheduleReset),window.removeEventListener("hashchange",this.onScheduleReset),this._deregisterRouter()},this.props.layout="column"},getInspectInfo(){return this._internal.currentUrl},defaultCss:{flex:"1 1",alignSelf:"stretch",position:"relative",display:"flex",flexDirection:"column"},getReactComponent(){return RouterReactComponent},inputs:{name:{type:"string",displayName:"Name",group:"General",set:function(e){this._deregisterRouter(),this._internal.name=e,this._internal.isMounted&&this._registerRouter()}},pages:{type:{name:"pages",allowEditOnly:!0},displayName:"Pages",group:"Pages",set:function(e){this._internal.pages=e,this._internal.isMounted&&this.scheduleReset()}},urlPath:{type:"string",displayName:"Url path",group:"General",set:function(e){this._internal.urlPath=e}},clip:{displayName:"Clip Behavior",type:{name:"enum",enums:[{value:"contentHeight",label:"Expand to content size"},{value:"scroll",label:"Scroll"},{value:"clip",label:"Clip content"}]},group:"Layout",default:"contentHeight",set(e){switch(e){case"scroll":this.setStyle({overflow:"auto"});break;case"clip":this.setStyle({overflow:"hidden"});break;default:this.removeStyle(["overflow"]);break}}},reset:{type:"signal",displayName:"Reset",group:"Actions",valueChangedToTrue:function(){this.scheduleReset()}}},inputCss:{backgroundColor:{type:"color",displayName:"Background Color",group:"Style",default:"transparent",applyDefault:!1}},outputs:{currentPageTitle:{type:"string",group:"General",displayName:"Current Page Title",getter:function(){return this._internal.currentPage!==void 0?this._internal.currentPage.title:void 0}},currentPageComponent:{type:"string",group:"General",displayName:"Current Page Component",getter:function(){return this._internal.currentPage!==void 0?this._internal.currentPage.component:void 0}}},methods:{_registerRouter(){RouterHandler.instance.registerRouter(this._internal.name,this)},_deregisterRouter(){RouterHandler.instance.deregisterRouter(this._internal.name,this)},setPageOutputs(e){for(const t in e)this._internal[t]=e[t],this.flagOutputDirty(t)},scheduleReset(){const e=this._internal;e.hasScheduledReset||(e.hasScheduledReset=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.hasScheduledReset=!1,this.reset()}))},createPageContainer(){const e=this.nodeScope.createPrimitiveNode("Group");return e.setStyle({flex:"1 0 100%"}),e},reset(){this._internal.asyncQueue.enqueue(this.resetAsync.bind(this))},scrollToTop(){const e=this.getDOMElement();e&&(e.scrollTop=0,Runtime.instance.getProjectSettings().bodyScroll&&e.scrollIntoView())},async resetAsync(){let e,t={};const n=this.matchPageFromUrl();if(n?n.page?(e=n.page.component,t=Object.assign({},n.params,n.query)):(e=this._internal.pages!==void 0?this._internal.pages.startPage:void 0,t=Object.assign({},n.params,n.query)):(e=this._internal.pages.startPage,t={}),e===void 0)return;const o=RouterHandler.instance.getPageInfoForComponent(e);if(this._internal.currentPage===o){shallowObjectsEqual(this._internal.currentParams,t)||(this._internal.currentParams=t,this._updatePageInputs(this._internal.currentPageComponent.nodeScope,t));return}this.scrollToTop();const r=this.getChildren();for(const u in r){const d=r[u];this.removeChild(d),this.nodeScope.deleteNode(d)}const s=await this.nodeScope.createNode(e,guid());this._internal.currentPageComponent=s;const a=s.nodeScope.getNodesWithType("Page");if(a===void 0||a.length!==1)return;this._internal.currentPage=RouterHandler.instance.getPageInfoForComponent(e),this._internal.currentParams=t,this.flagOutputDirty("currentPageTitle"),this.flagOutputDirty("currentPageComponent"),Noodl.SEO.setTitle(this._internal.currentPage.title),this._updatePageInputs(this._internal.currentPageComponent.nodeScope,t);const l=this.createPageContainer();l.addChild(s),this.addChild(l)},_updatePageInputs(e,t){for(const n of e.getNodesWithType("PageInputs"))n._setPageParams(t)},getRelativeURL(e,t){if(!e)return;let n=e.path;if(n===void 0)return;const o=n.match(/{([^}]+)}/g),r=Object.assign({},t);if(o)for(const a of o){const l=a.replace(/[{}]/g,"");t[l]!==void 0&&(n=n.replace(a,encodeURIComponent(r[l])),delete r[l])}const s=[];for(const a in r)s.push({name:a,value:encodeURIComponent(r[a])});return n=_trimUrlPart(n),this._internal.urlPath!==void 0&&(n=_trimUrlPart(this._internal.urlPath)+"/"+n),{path:n,query:s}},getNavigationAbsoluteURL(e,t){let n=this.parent,o={path:"",query:[]};for(;n!==void 0&&typeof n.getNavigationAbsoluteURL!="function";)n=n.getVisualParentNode();n&&(o=n.getNavigationAbsoluteURL(n._internal.currentPage,n._internal.currentParams));const r=this.getRelativeURL(e,t);if(r){const s=o.path.endsWith("/")||r.path.startsWith("/");return{path:o.path+(s?"":"/")+r.path,query:o.query.concat(r.query)}}return o},_getLocationPath:function(){const e=Runtime.instance.getProjectSettings().navigationPathType;if(e===void 0||e==="hash"){let t=location.hash;return t&&(t[0]==="#"&&(t=t.substring(1)),t[0]==="/"&&(t=t.substring(1))),decodeURI(t)}else{let t=location.pathname;if(t&&t[0]==="/"){const n=Noodl.Env.BaseUrl;if(n){const o=getBaseUrlLength(n);t=t.substring(o)}else t=t.substring(1)}return decodeURI(t)}},_getSearchParams:function(){const e=/\+/g,t=/([^&=]+)=?([^&]*)/g,n=function(a){return decodeURIComponent(a.replace(e," "))},o=location.search.substring(1);let r;const s={};for(;r=t.exec(o);)s[n(r[1])]=n(r[2]);return s},getNavigationRemainingPath(){return this._internal.remainingNavigationPath},matchPageFromUrl(){let e=this.parent;for(;e!==void 0&&typeof e.getNavigationRemainingPath!="function";)e=e.getVisualParentNode();let t;if(e===void 0){let l=this._getLocationPath();l[0]==="/"&&(l=l.substring(1)),t=l.split("/")}else t=e.getNavigationRemainingPath();if(t===void 0)return;const n=this._getSearchParams();function o(l,u){const d={};for(let h=0;h<u.length;h++){const f=u[h];if(f[0]==="{"&&f[f.length-1]==="}")l[h]!==void 0&&(d[f.substring(1,f.length-1)]=decodeURIComponent(l[h]));else if(l[h]===void 0||f!==l[h])return}return{params:d,remainingPathParts:l.slice().splice(u.length)}}const r=RouterHandler.instance.getPagesForRouter(this._internal.name);if(r===void 0||r.length===0)return;let s,a=9999;for(const l of r){let u=l.path;if(u===void 0)continue;u=_trimUrlPart(u),this._internal.urlPath!==void 0&&(u=_trimUrlPart(this._internal.urlPath)+"/"+u);const d=u.split("/"),h=o(t,d),f=Math.abs(d.length-t.length);h&&a>f&&(s={match:h,pageInfo:l},a=f)}return s?(this._internal.remainingNavigationPath=s.match.remainingPathParts,{page:s.pageInfo,params:s.match.params,query:n}):{page:void 0,params:{},query:n}},_getCompleteUrlToPage(e,t){const n=this.getNavigationAbsoluteURL(e,t);let o,r;const s=Runtime.instance.getProjectSettings().navigationPathType;s===void 0||s==="hash"?r=n.path:o=n.path;const a=n.query.map(u=>u.name+"="+u.value);return(o!==void 0?o:"")+(a.length>=1?"?"+a.join("&"):"")+(r!==void 0?"#"+r:"")},_updateUrlWithTopPage(){if(window.history!==void 0){this._internal.remainingNavigationPath=void 0;const e=this._getCompleteUrlToPage(this._internal.currentPage,this._internal.currentParams);window.history.pushState({},"",e)}},navigate(e){this._internal.asyncQueue.enqueue(this.navigateAsync.bind(this,e))},async navigateAsync(e){if(e.target===void 0)return;const t=RouterHandler.instance.getPageInfoForComponent(e.target);if(t)if(e.openInNewTab){const n=this._getCompleteUrlToPage(t,e.params);window.open(n,"_blank"),e.hasNavigated&&e.hasNavigated()}else await this._navigateInCurrentWindow(t,e)},async _navigateInCurrentWindow(e,t){this.scrollToTop();const n=this.getChildren();for(const a in n){const l=n[a];this.removeChild(l),this.nodeScope.deleteNode(l)}const o=this.createPageContainer(),r=await this.nodeScope.createNode(t.target,guid());this._internal.currentPage=e,this._internal.currentParams=t.params,this.flagOutputDirty("currentPageTitle"),this.flagOutputDirty("currentPageComponent"),Noodl.SEO.setTitle(this._internal.currentPage.title);const s=r.nodeScope.getNodesWithType("PageInputs");s!==void 0&&s.length>0&&s.forEach(a=>{a._setPageParams(t.params)}),o.addChild(r),this.addChild(o),this._updateUrlWithTopPage(),t.hasNavigated&&t.hasNavigated(),RouterHandler.instance.onNavigated(this._internal.name,e)},registerInputIfNeeded:function(e){this.hasInput(e)}}};function shallowObjectsEqual(e,t){const n=Object.keys(e||{}),o=Object.keys(t||{});return n.length!==o.length?!1:n.every(r=>e[r]===t[r])}const Router=createNodeFromReactComponent(RouterNode),ExternalLinkNode={name:"net.noodl.externallink",displayNodeName:"External Link",docs:"https://docs.noodl.net/nodes/navigation/external-link",category:"Navigation",nodeDoubleClickAction:{focusPort:"link"},inputs:{link:{type:"string",displayName:"Link"},openInNewTab:{type:"boolean",displayName:"Open In New Tab",default:!0},do:{type:"signal",displayName:"Do",valueChangedToTrue(){const e=this.getInputValue("openInNewTab"),t=e?"noopener,noreferrer":"",n=e===!0||e===void 0?"_blank":"_self";window.open(this.getInputValue("link"),n,t)}}}},ExternalLink={node:ExternalLinkNode};function polarToCartesian(e,t,n,o){const r=(o-90)*Math.PI/180;return{x:e+n*Math.cos(r),y:t+n*Math.sin(r)}}function filledArc(e,t,n,o,r){r%360===o%360&&(r-=1e-4);const s=polarToCartesian(e,t,n,r),a=polarToCartesian(e,t,n,o),l=r-o<=180?"0":"1";return["M",s.x,s.y,"A",n,n,0,l,0,a.x,a.y,"L",e,t,"L",s.x,s.y].join(" ")}function arc(e,t,n,o,r){r%360===o%360&&(r-=1e-4);const s=polarToCartesian(e,t,n,r),a=polarToCartesian(e,t,n,o),l=r-o<=180?"0":"1";return["M",s.x,s.y,"A",n,n,0,l,0,a.x,a.y].join(" ")}let Circle$1=class extends React.Component{constructor(t){super(t)}render(){let t,n;const o=this.props.size/2,{startAngle:r,endAngle:s}=this.props;if(this.props.fillEnabled){const l=this.props.size/2;t=React.createElement("path",{d:filledArc(l,l,l,r,s),fill:this.props.fillColor})}if(this.props.strokeEnabled){const{strokeColor:l,strokeWidth:u,strokeLineCap:d}=this.props,h=o-this.props.strokeWidth/2,f=arc(o,o,h,r,s);n=React.createElement("path",{d:f,stroke:l,strokeWidth:u,fill:"transparent",strokeLinecap:d})}const a={...this.props.style};return Layout.size(a,this.props),Layout.align(a,this.props),a.opacity===0&&(a.pointerEvents="none"),React.createElement("div",{className:this.props.className,...this.props.dom,...pointerProps(this.props),style:a},React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:this.props.size,height:this.props.size},t,n))}};const CircleNode={name:"Circle",docs:"https://docs.noodl.net/nodes/basic-elements/circle",connectionPanel:{groupPriority:["General","Fill","Stroke","Dimensions","Style","Actions","Events","Mounted","Margin and padding","Pointer Events","Hover Events"]},getReactComponent(){return Circle$1},noodlNodeAsProp:!0,allowChildren:!1,defaultCss:{flexShrink:0,position:"relative",display:"flex"},inputProps:{size:{displayName:"Size",default:"100",group:"Dimension",type:{name:"number"},index:10,allowVisualStates:!0},fillEnabled:{group:"Fill",displayName:"Fill",default:!0,type:"boolean",index:20,allowVisualStates:!0},fillColor:{group:"Fill",displayName:"Fill Color",default:"red",type:"color",index:21,allowVisualStates:!0},strokeEnabled:{index:23,group:"Stroke",default:!1,displayName:"Stroke",type:"boolean",allowVisualStates:!0},strokeWidth:{index:24,group:"Stroke",displayName:"Stroke Width",default:10,type:{name:"number"},allowVisualStates:!0},strokeColor:{index:25,group:"Stroke",displayName:"Stroke Color",type:"color",default:"black",allowVisualStates:!0},strokeLineCap:{index:26,group:"Stroke",displayName:"Line Cap",type:{name:"enum",enums:[{label:"Butt",value:"butt"},{label:"Round",value:"round"}]},default:"butt",allowVisualStates:!0},startAngle:{displayName:"Start Angle",type:"number",default:0,group:"Style",index:198,allowVisualStates:!0},endAngle:{displayName:"End Angle",type:"number",default:360,group:"Style",index:199,allowVisualStates:!0}}};NodeSharedPortDefinitions.addTransformInputs(CircleNode),NodeSharedPortDefinitions.addMarginInputs(CircleNode),NodeSharedPortDefinitions.addSharedVisualInputs(CircleNode),NodeSharedPortDefinitions.addAlignInputs(CircleNode),NodeSharedPortDefinitions.addPointerEventOutputs(CircleNode);const Circle=createNodeFromReactComponent(CircleNode);function ForEachComponent(e){const{didMount:t,willUnmount:n}=e;return React.useEffect(()=>(t(),()=>{n()}),[]),null}const defaultDynamicScript=`// Set the 'component' variable to the name of the desired component for this item.
35
35
  // Component name must start with a '/'.
36
36
  // A component in a sheet is referred to by '/#Sheet Name/Comopnent Name'.
37
37
  // The data for each item is available in a variable called 'item'
@@ -169,7 +169,7 @@ map({
169
169
  background: ${t.trackColor};
170
170
  border: none;
171
171
  }
172
- `}function Range(e){const[t,n]=React.useState(e.value);React.useEffect(()=>{n(e.value)},[]),React.useEffect(()=>{n(e.value)},[e.value]);var o={...e.style};Layout.size(o,e),Layout.align(o,e);const r={id:e.id,min:e.min,max:e.max,step:e.step,style:o};Utils.updateStylesForClass("ndl-controls-range-"+e._nodeId,e,_styleTemplate);let s="ndl-controls-range-"+e._nodeId+" ndl-controls-range";return e.className&&(s=s+" "+e.className),React.createElement("input",{className:s,...Utils.controlEvents(e),type:"range",...r,value:t,disabled:!e.enabled,onChange:a=>{n(a.target.value),e.valueChanged&&e.valueChanged(a.target.value)}})}var RangeNode={name:"Range",docs:"https://docs.noodl.net/nodes/visual/range",allowChildren:!1,noodlNodeAsProp:!0,initialize(){this.props.sizeMode="explicit",this.props.id=this._internal.controlId="input-"+guid(),this.props.enabled=this._internal.enabled=!0,this._internal.value=this.props.value=this.props.min,this.props._nodeId=this.id,this.props.valueChanged=e=>{e=typeof e=="string"?parseFloat(e):e;const t=this._internal.value!==e;this._internal.value=e,this._updateValuePercent(e),t&&(this.flagOutputDirty("value"),this.sendSignalOnOutput("onChange"))},this.props.valueChanged(this.props.value),this.outputPropValues.hoverState=this.outputPropValues.focusState=this.outputPropValues.pressedState=!1},getReactComponent(){return Range},inputs:{enabled:{type:"boolean",displayName:"Enabled",group:"General",default:!0,set:function(e){e=!!e;const t=e!==this._internal.enabled;this.props.enabled=this._internal.enabled=e,t&&(this.forceUpdate(),this.flagOutputDirty("enabled"))}},value:{type:"string",displayName:"Value",group:"General",set:function(e){const t=e!==this._internal.value;this.props.value=this._internal.value=e,this._updateValuePercent(e),t&&(this.forceUpdate(),this.flagOutputDirty("value"))}}},outputs:{controlId:{type:"string",displayName:"Control Id",group:"General",getter:function(){return this._internal.controlId}},enabled:{type:"boolean",displayName:"Enabled",group:"States",getter:function(){return this._internal.enabled}},value:{type:"number",displayName:"Value",group:"States",getter:function(){return this._internal.value}},valuePercent:{type:"number",displayName:"Value Percent",group:"States",getter:function(){return this._internal.valuePercent}},onChange:{type:"signal",displayName:"Changed",group:"Events"}},inputProps:{min:{type:"number",displayName:"Min",group:"General",default:0},max:{type:"number",displayName:"Max",group:"General",default:100},step:{type:"number",displayName:"Step",group:"General",default:1},width:{index:11,group:"Dimensions",displayName:"Width",type:{name:"number",units:["%","px","vw"],defaultUnit:"%"},default:100},height:{index:12,group:"Dimensions",displayName:"Height",type:{name:"number",units:["%","px","vh"],defaultUnit:"%"},default:100},thumbWidth:{group:"Thumb Style",displayName:"Width",type:{name:"number",units:["px","vw","%"],defaultUnit:"px",allowEditOnly:!0},default:16},thumbHeight:{group:"Thumb Style",displayName:"Height",type:{name:"number",units:["px","vh","%"],defaultUnit:"px",allowEditOnly:!0},default:16},thumbRadius:{group:"Thumb Style",displayName:"Radius",type:{name:"number",units:["px","%"],defaultUnit:"px",allowEditOnly:!0},default:8},thumbColor:{group:"Thumb Style",displayName:"Color",type:{name:"color",allowEditOnly:!0},default:"#000000"},trackHeight:{group:"Track Style",displayName:"Height",type:{name:"number",units:["px","vh","%"],defaultUnit:"px",allowEditOnly:!0},default:6},trackColor:{group:"Track Style",displayName:"Color",type:{name:"color",allowEditOnly:!0},default:"#f0f0f0"}},inputCss:{backgroundColor:{index:201,displayName:"Background Color",group:"Style",type:"color"},borderRadius:{index:202,displayName:"Border Radius",group:"Style",type:{name:"number",units:["px"],defaultUnit:"px"},default:1,applyDefault:!1},borderStyle:{index:203,displayName:"Border Style",group:"Style",type:{name:"enum",enums:[{label:"None",value:"none"},{label:"Solid",value:"solid"},{label:"Dotted",value:"dotted"},{label:"Dashed",value:"dashed"}]},default:"none",applyDefault:!1},borderWidth:{index:204,displayName:"Border Width",group:"Style",type:{name:"number",units:["px"],defaultUnit:"px"},default:1,applyDefault:!1},borderColor:{index:205,displayName:"Border Color",group:"Style",type:"color",default:"#000000"}},outputProps:{},methods:{_updateValuePercent(e){const t=this.props.min,n=this.props.max,o=Math.floor((e-t)/(n-t)*100),r=this._internal.valuePercentChanged!==o;this._internal.valuePercent=o,r&&this.flagOutputDirty("valuePercent")}}};NodeSharedPortDefinitions.addAlignInputs(RangeNode),NodeSharedPortDefinitions.addTransformInputs(RangeNode),NodeSharedPortDefinitions.addMarginInputs(RangeNode),NodeSharedPortDefinitions.addSharedVisualInputs(RangeNode),Utils.addControlEventsAndStates(RangeNode),RangeNode=createNodeFromReactComponent(RangeNode);const RangeOld=RangeNode;function preventGlobalFocusChange(e){e.stopPropagation(),window.removeEventListener("click",preventGlobalFocusChange,!0)}class TextFieldComponent extends React.Component{constructor(t){super(t),this.state={value:t.startValue},this.ref=React.createRef()}setText(t){this.setState({value:t}),this.props.onTextChanged&&this.props.onTextChanged(t)}componentDidMount(){this.ref.current.noodlNode=this.props.noodlNode,this.setText(this.props.startValue)}render(){const t={...this.props.textStyle,...this.props.style};Layout.size(t,this.props),Layout.align(t,this.props),t.opacity===0&&(t.pointerEvents="none");const n=this.props,o={id:n.id,value:this.state.value,...Utils.controlEvents(n),disabled:!n.enabled,style:t,className:n.className,placeholder:n.placeholder,onChange:r=>this.onChange(r)};return this.props.type!=="textArea"?React.createElement("input",{ref:this.ref,type:this.props.type,...o,onKeyDown:r=>this.onKeyDown(r),onMouseDown:()=>window.addEventListener("click",preventGlobalFocusChange,!0)}):(o.style.resize="none",React.createElement("textarea",{ref:this.ref,...o,onKeyDown:r=>this.onKeyDown(r)}))}onKeyDown(t){(t.key==="Enter"||t.which===13)&&this.props.onEnter&&this.props.onEnter()}onChange(t){const n=t.target.value;this.setText(n)}focus(){this.ref.current&&this.ref.current.focus()}blur(){this.ref.current&&this.ref.current.blur()}}const TextInput={name:"Text Input",docs:"https://docs.noodl.net/nodes/visual/text-input",allowChildren:!1,noodlNodeAsProp:!0,getReactComponent(){return TextFieldComponent},defaultCss:{outline:"none",borderStyle:"solid",padding:0},initialize(){this.props.startValue="",this.props.id=this._internal.controlId="input-"+guid(),this.props.enabled=this._internal.enabled=!0,this.outputPropValues.hoverState=this.outputPropValues.focusState=this.outputPropValues.pressedState=!1},inputProps:{type:{displayName:"Type",group:"Text",index:19,type:{name:"enum",enums:[{label:"Text",value:"text"},{label:"Text Area",value:"textArea"},{label:"Email",value:"email"},{label:"Number",value:"number"},{label:"Password",value:"password"},{label:"URL",value:"url"}]},default:"text"},placeholder:{index:22,group:"Text",displayName:"Placeholder",default:"Type here...",type:{name:"string"}},boxShadowEnabled:{index:250,group:"Box Shadow",displayName:"Shadow Enabled",type:"boolean",default:!1},boxShadowOffsetX:{index:251,group:"Box Shadow",displayName:"Offset X",default:0,type:{name:"number",units:["px"],defaultUnit:"px"}},boxShadowOffsetY:{index:252,group:"Box Shadow",displayName:"Offset Y",default:0,type:{name:"number",units:["px"],defaultUnit:"px"}},boxShadowBlurRadius:{index:253,group:"Box Shadow",displayName:"Blur Radius",default:5,type:{name:"number",units:["px"],defaultUnit:"px"}},boxShadowSpreadRadius:{index:254,group:"Box Shadow",displayName:"Spread Radius",default:2,type:{name:"number",units:["px"],defaultUnit:"px"}},boxShadowInset:{index:255,group:"Box Shadow",displayName:"Inset",type:"boolean",default:!1},boxShadowColor:{index:256,group:"Box Shadow",displayName:"Shadow Color",type:"color",default:"rgba(0,0,0,0.2)"}},inputs:{enabled:{type:"boolean",displayName:"Enabled",group:"General",default:!0,set:function(e){e=!!e;const t=e!==this._internal.enabled;this.props.enabled=this._internal.enabled=e,t&&(this.forceUpdate(),this.flagOutputDirty("enabled"))}},set:{group:"Actions",displayName:"Set",type:"signal",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{this.setText(this._internal.text)})}},startValue:{index:18,displayName:"Text",type:"string",group:"Text",set(e){this._internal.text!==e&&(this._internal.text=e,this.isInputConnected("set")===!1&&this.setText(e))}},textStyle:{index:19,type:"textStyle",group:"Text",displayName:"Text Style",default:"None",set(e){this.props.textStyle=this.context.styles.getTextStyle(e),this.forceUpdate()}},fontFamily:{index:20,type:"font",group:"Text",displayName:"Font Family",set(e){if(e){let t=e;t.split(".").length>1&&(t=t.replace(/\.[^/.]+$/,""),t=t.split("/").pop()),this.setStyle({fontFamily:t})}else this.removeStyle(["fontFamily"]);this.props.textStyle&&this.forceUpdate()}},clear:{type:"signal",group:"Actions",displayName:"Clear",valueChangedToTrue(){this.setText("")}},focus:{type:"signal",group:"Actions",displayName:"Focus",valueChangedToTrue(){this.context.setNodeFocused(this,!0)}},blur:{type:"signal",group:"Actions",displayName:"Blur",valueChangedToTrue(){this.context.setNodeFocused(this,!1)}}},inputCss:{fontSize:{index:21,group:"Text",displayName:"Font Size",type:{name:"number",units:["px"],defaultUnit:"px"},onChange(){this.props.textStyle&&this.forceUpdate()}},color:{index:99,type:"color",displayName:"Font Color",group:"Style"},backgroundColor:{index:100,displayName:"Background Color",group:"Style",type:"color",default:"transparent"},borderColor:{index:101,displayName:"Border Color",group:"Style",type:"color",default:"black"},borderWidth:{index:102,displayName:"Border Width",group:"Style",type:{name:"number",units:["px"],defaultUnit:"px"},default:0}},outputs:{controlId:{type:"string",displayName:"Control Id",group:"General",getter:function(){return this._internal.controlId}},enabled:{type:"boolean",displayName:"Enabled",group:"States",getter:function(){return this._internal.enabled}}},outputProps:{onTextChanged:{group:"Value",displayName:"Text",type:"string"},onEnter:{group:"Events",displayName:"On Enter",type:"signal"}},dynamicports:[{condition:"boxShadowEnabled = true",inputs:["boxShadowOffsetX","boxShadowOffsetY","boxShadowInset","boxShadowBlurRadius","boxShadowSpreadRadius","boxShadowColor"]}],methods:{_focus(){this.innerReactComponentRef&&this.innerReactComponentRef.focus()},_blur(){this.innerReactComponentRef&&this.innerReactComponentRef.blur()},setText(e){this.props.startValue=e,this.innerReactComponentRef?this.innerReactComponentRef.setText(e):this.outputPropValues.onTextChanged!==e&&(this.outputPropValues.onTextChanged=e,this.flagOutputDirty("onTextChanged"))}}};NodeSharedPortDefinitions.addDimensions(TextInput,{defaultSizeMode:"contentSize",contentLabel:"Text"}),NodeSharedPortDefinitions.addAlignInputs(TextInput),NodeSharedPortDefinitions.addTransformInputs(TextInput),NodeSharedPortDefinitions.addPaddingInputs(TextInput),NodeSharedPortDefinitions.addMarginInputs(TextInput),NodeSharedPortDefinitions.addSharedVisualInputs(TextInput),Utils.addControlEventsAndStates(TextInput);const definition=createNodeFromReactComponent(TextInput);definition.setup=function(e,t){t.on("nodeAdded.Text Input",function(n){n.parameters.fontFamily&&n.parameters.fontFamily.split(".").length>1&&FontLoader.instance.loadFont(n.parameters.fontFamily),n.on("parameterUpdated",function(o){o.name==="fontFamily"&&o.value&&o.value.split(".").length>1&&FontLoader.instance.loadFont(o.value)})})};const Switch={name:"Switch",docs:"https://docs.noodl.net/nodes/logic/switch",category:"Logic",initialize(){this._internal.state=!1,this._internal.initialized=!1},getInspectInfo(){return this._internal.state},inputs:{on:{displayName:"On",group:"Change State",valueChangedToTrue(){this._internal.state!==!0&&(this._internal.state=!0,this.flagOutputDirty("state"),this.emitSignals())}},off:{displayName:"Off",group:"Change State",valueChangedToTrue(){this._internal.state!==!1&&(this._internal.state=!1,this.flagOutputDirty("state"),this.emitSignals())}},flip:{displayName:"Flip",group:"Change State",valueChangedToTrue(){this._internal.state=!this._internal.state,this.flagOutputDirty("state"),this.emitSignals()}},onFromStart:{type:"boolean",displayName:"State",group:"General",default:!1,set(e){this._internal.state=!!e,this.flagOutputDirty("state"),this.emitSignals()}}},outputs:{state:{type:"boolean",displayName:"Current State",getter(){return this._internal.state}},switched:{displayName:"Switched",type:"signal",group:"Signals"},switchedToOn:{displayName:"Switched To On",type:"signal",group:"Signals"},switchedToOff:{displayName:"Switched To Off",type:"signal",group:"Signals"}},prototypeExtensions:{emitSignals(){this._internal.state===!0?this.sendSignalOnOutput("switchedToOn"):this.sendSignalOnOutput("switchedToOff"),this.sendSignalOnOutput("switched")}}},Switch$1={node:Switch},Timer={name:"Timer",docs:"https://docs.noodl.net/nodes/utilities/delay",displayName:"Delay",category:"Utilities",nodeDoubleClickAction:{focusPort:"duration"},initialize:function(){var e=this;this._internal._animation=this.context.timerScheduler.createTimer({duration:0,onStart:function(){e.sendSignalOnOutput("timerStarted")},onFinish:function(){e.sendSignalOnOutput("timerFinished")}}),this.addDeleteListener(()=>{this._internal._animation.stop()})},getInspectInfo(){return this._internal._animation.isRunning()?Math.floor(this._internal._animation.durationLeft()/10)/100+" seconds":"Not running"},inputs:{start:{displayName:"Start",valueChangedToTrue:function(){this._internal._animation._isRunning===!1&&this._internal._animation.start()}},restart:{displayName:"Restart",valueChangedToTrue:function(){this._internal._animation.start()}},duration:{type:"number",displayName:"Duration",default:0,set:function(e){this._internal._animation.duration=e}},startDelay:{type:"number",displayName:"Start Delay",default:0,set:function(e){this._internal._animation.delay=e}},stop:{displayName:"Stop",valueChangedToTrue:function(){this._internal._animation.stop()}}},outputs:{timerStarted:{type:"signal",displayName:"Started"},timerFinished:{type:"signal",displayName:"Finished"}}},Timer$1={node:Timer},Color={node:createDefinition({name:"Color",docs:"https://docs.noodl.net/nodes/data/color",startValue:"#f1f2f4",nodeDoubleClickAction:{focusPort:"value"},type:{name:"color"},cast:function(e){return e}})},EventSender={name:"Event Sender",docs:"https://docs.noodl.net/nodes/events/send-event",displayNodeName:"Send Event",category:"Events",usePortAsLabel:"channelName",color:"component",exportDynamicPorts:!0,initialize:function(){this._internal.inputValues={},this._internal.channelName="",this._internal.propagation="global"},inputs:{sendEvent:{displayName:"Send",valueChangedToTrue:function(){var e=this;this.scheduleAfterInputsHaveUpdated(function(){e._internal.propagation==="global"?e.context.sendGlobalEventFromEventSender(e._internal.channelName,e._internal.inputValues):e.nodeScope.sendEventFromThisScope(e._internal.channelName,e._internal.inputValues,e._internal.propagation)})}},channelName:{type:{name:"string",allowEditOnly:!0,identifierOf:"EventChannelName",identifierDisplayName:"Event Channels"},default:"",group:"Settings",displayName:"Channel Name",set:function(e){this._internal.channelName=e,this._internal.inputValues._channelName=e}},propagation:{type:{name:"enum",enums:[{value:"global",label:"Global"},{value:"parent",label:"Parent"},{value:"children",label:"Children"},{value:"siblings",label:"Siblings"}]},default:"global",group:"Settings",displayName:"Send to",set:function(e){this._internal.propagation=e}},payload:{type:{name:"stringlist",allowEditOnly:!0},group:"Payload"}},prototypeExtensions:{registerInputIfNeeded:{value:function(e){if(!this.hasInput(e)){var t=this;this.registerInput(e,{set:function(n){t._internal.inputValues[e]=n}})}}}}};function updatePorts$a(e,t,n){var o=[],r=t.payload;if(r){r=r.split(",");for(const s of r)o.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input",group:"Payload",name:s,displayName:s})}n.sendDynamicPorts(e,o,{detectRenamed:{plug:"input"}})}const EventSender$1={node:EventSender,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Event Sender",function(n){updatePorts$a(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",function(o){updatePorts$a(n.id,n.parameters,e.editorConnection)})})}},EventReceiver={name:"Event Receiver",docs:"https://docs.noodl.net/nodes/events/receive-event",displayNodeName:"Receive Event",category:"Events",usePortAsLabel:"channelName",color:"component",initialize:function(){var e=this._internal;e.outputValues={},e.outputNames=[],e.eventReceived=!1,e._isEnabled=!0,e.channelName=""},inputs:{enabled:{displayName:"Enabled",type:"boolean",default:!0,set:function(e){this._internal._isEnabled=!!e}},consume:{displayName:"Consume",type:{name:"enum",enums:[{label:"Never",value:"never"},{label:"Always",value:"always"}]},default:"never",set:function(e){this._internal.consume=e}},channelName:{type:{name:"string",identifierOf:"EventChannelName"},displayName:"Channel",set:function(e){this._internal.onEventReceivedCallback&&(this.context.eventSenderEmitter.removeListener(this._internal.channelName,this._internal.onEventReceivedCallback),this._internal.onEventReceivedCallback=null),this._internal.channelName=e,this.registerListenersForChannel(e)}}},outputs:{eventReceived:{displayName:"Received",type:"signal"}},prototypeExtensions:{registerOutputIfNeeded:function(e){if(!this.hasOutput(e)){var t=this;this._internal.outputNames.push(e),this.registerOutput(e,{getter:function(){return t._internal.outputValues[e]}})}},handleEvent:function(e){if(this._internal._isEnabled!==!1){this.sendSignalOnOutput("eventReceived");for(var t in e)this.hasOutput(t)&&(this._internal.outputValues[t]=e[t],this.flagOutputDirty(t));return this._internal.consume==="always"}},onEventReceived:function(e){this.handleEvent(e)},_onNodeDeleted:function(){if(Node.prototype._onNodeDeleted.call(this),this._internal.onEventReceivedCallback){var e=this.context.eventSenderEmitter;e.removeListener(this._internal.channelName,this._internal.onEventReceivedCallback)}},registerListenersForChannel:function(e){var t=this.context.eventSenderEmitter;this._internal.onEventReceivedCallback=this.onEventReceived.bind(this),t.on(e,this._internal.onEventReceivedCallback);var n=this;this.context.eventEmitter.once("applicationDataReloaded",function(){n._internal.onEventReceivedCallback&&t.removeListener(e,n._internal.onEventReceivedCallback)})},getChannelName:function(){return this._internal.channelName}}},EventReceiver$1={node:EventReceiver,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){var r=o.parameters.channelName;function s(){var l=t.getNodesWithType("Event Sender"),u=l.filter(g=>g.parameters.channelName===r),d={};u.forEach(g=>{const b=g.parameters.payload?g.parameters.payload.split(","):[];for(let _ of b)d[_]=!0});var h=[];for(var f in d)h.push({name:f,type:"*",plug:"output",displayName:f});e.editorConnection.sendDynamicPorts(o.id,h,{detectRenamed:{plug:"output"}})}s(),o.on("parameterUpdated",function(l){l.name==="channelName"&&(r=l.value,s())});function a(l){l.on("inputPortAdded",function(u){s()}),l.on("inputPortRemoved",function(u){s()}),l.on("parameterUpdated",function(u){u.name==="channelName"&&s()})}t.getNodesWithType("Event Sender").forEach(a),t.on("nodeAdded.Event Sender",a),t.on("nodeRemoved.Event Sender",l=>{s()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.Event Receiver",o=>n(o)),t.getNodesWithType("Event Receiver").forEach(o=>n(o))})}},ScreenResolution={name:"Screen Resolution",docs:"https://docs.noodl.net/nodes/utilities/screen-resolution",category:"Utilities",initialize(){typeof window>"u"||(window.addEventListener("resize",()=>{this._viewportSizeChanged()}),this._viewportSizeChanged())},getInspectInfo(){return this._internal.width+" x "+this._internal.height},outputs:{width:{type:"number",displayName:"Width",get(){return this._internal.width}},height:{type:"number",displayName:"Height",get(){return this._internal.height}},aspectRatio:{type:"number",displayName:"Aspect Ratio",get(){return this._internal.width/this._internal.height}}},methods:{_viewportSizeChanged(){this._internal.width=window.innerWidth,this._internal.height=window.innerHeight,this.flagAllOutputsDirty()}}},ScreenResolution$1={node:ScreenResolution},defaultCode="";var Javascript={name:"Javascript2",docs:"https://docs.noodl.net/nodes/javascript/script",displayNodeName:"Script",category:"CustomCode",color:"javascript",nodeDoubleClickAction:{focusPort:"Code"},searchTags:["javascript"],exportDynamicPorts:!0,initialize:function(){var e=this._internal;e.inputValues={},e.outputValues={},e.outputProperties={},e.runScheduled=!1,e.setupScheduled=!1,e.runNextFrameScheduled=!1,e.isWaitingForExternalFileToLoad=!1,e.useExternalFile=!1,e.runFunction=void 0,e.destroyFunction=void 0,e.setupFunction=void 0,e.hasParsedCode=!1,e.changedInputs={},e.signalScheduled={},e.killed=!1,e.inputQueue=[];var t=this;e.userFunctionScope={createComponent(n){return n&&n.length>0&&n[0]!=="/"&&(n="/"+n),t.nodeScope.createNode(n,guid())},deleteComponent(n){t.nodeScope.deleteNode(n)},flagOutputDirty:function(n){if(!n)throw new Error("Output port name must be specified");t.flagOutputDirty(n)},runNextFrame:function(){e.runNextFrameScheduled||(e.runNextFrameScheduled=!0,t.context.scheduleNextFrame(function(){e.runNextFrameScheduled=!1,e.killed||scheduleRun.call(t)}))},sendSignalOnOutput:function(n){t.sendSignalOnOutput(n)}},e.onFrameStart=onFrameStart.bind(this)},dynamicports:[{condition:"useExternalFile = no OR useExternalFile NOT SET",inputs:["code"]},{condition:"useExternalFile = yes",inputs:["externalFile"]}],inputs:{scriptInputs:{type:{name:"proplist",allowEditOnly:!0},group:"Script Inputs",set:function(e){}},scriptOutputs:{type:{name:"proplist",allowEditOnly:!0},group:"Script Outputs",set:function(e){}},useExternalFile:{type:{name:"enum",enums:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],allowEditOnly:!0},default:"no",displayName:"Use External File",group:"Code",set:function(e){this._internal.isWaitingForExternalFileToLoad=e==="yes",this._internal.useExternalFile=e==="yes"}},code:{displayName:"Code",group:"Code",type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},default:defaultCode,set:function(e){if(e){var t=this;this.scheduleAfterInputsHaveUpdated(function(){if(this._internal.useExternalFile===!1){this._callDestroyFunction();var n=JavascriptNodeParser.createFromCode(e,{node:this});t._onCodeParsed(n)}})}}},externalFile:{displayName:"File Path",group:"Code",type:{name:"source",allowEditOnly:!0},set:function(e){if(this._internal.useExternalFile!==!1){var t=this;JavascriptNodeParser.createFromURL(e,function(n){t._internal.isWaitingForExternalFileToLoad=!1,t._onCodeParsed(n)},{node:this})}}}},prototypeExtensions:{_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.killed=!0,this._callDestroyFunction()},update:function(){this._internal.isWaitingForExternalFileToLoad===!0?this._dirty=!1:Node.prototype.update.call(this)},_onCodeParsed:function(e){const t=this.context.editorConnection;if(t)for(const n of["js-destroy-waring","js-run-waring","js-setup-waring"])t.clearWarning(this.nodeScope.componentOwner.name,this.id,n);if(!e.error){if(Object.keys(this.model.inputPorts).forEach(n=>{const o=this.model.inputPorts[n].type;(o==="color"||o.name==="color")&&(this._internal.inputValues[n]=void 0,this.hasInput(n)?this.getInput(n).type="color":this.registerInput(n,{type:"color",set:userInputSetter$4.bind(this,n)}))}),Object.keys(this.model.outputPorts).forEach(n=>{this.registerOutputIfNeeded(n)}),this._internal.setupFunction=e.setup,this._internal.runFunction=e.change,this._internal.destroyFunction=e.destroy,this._internal.definedObject=e.definedObject,this._internal.setupFunction&&scheduleSetup.call(this),this._internal.runFunction&&scheduleRun.call(this),this._internal.hasParsedCode=!0,this._internal.inputQueue){for(const{name:n,value:o}of this._internal.inputQueue)this.setInputValue(n,o);this._internal.inputQueue=void 0}e.apis.Node.Inputs=this._internal.inputValues,e.apis.Node.Outputs=this._internal.outputProperties}},registerInputIfNeeded:function(e){this.hasInput(e)||(this._internal.inputValues[e]=void 0,this.registerInput(e,{set:userInputSetter$4.bind(this,e)}))},registerOutputIfNeeded:function(e){if(this.hasOutput(e))return;var t=this;const n=_typename(this.model.outputPorts[e].type)==="signal";Object.defineProperty(this._internal.outputProperties,e,{set:function(o){n||(t._internal.outputValues[e]=o,t.flagOutputDirty(e))},get:function(){return n?()=>{t.hasOutput(e)&&t.sendSignalOnOutput(e)}:t._internal.outputValues[e]}}),this.registerOutput(e,{getter:userOutputGetter$3.bind(this,e)})},_callRunFunction:function(){var e=this._internal;if(!(!e.runFunction||e.killed))try{e.runFunction.call(e.userFunctionScope,e.inputValues,e.outputProperties,e.changedInputs)}catch(t){logJavaScriptNodeError(t),this.context.editorConnection&&this.context.isWarningTypeEnabled("javascriptExecution")&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"js-run-waring",{showGlobally:!0,message:"<strong>run</strong>: "+t.message})}},_callSignalFunction:function(e){var t=this._internal;if(!(!t.definedObject||t.killed)&&!(!t.definedObject[e]||typeof t.definedObject[e]!="function"))try{t.definedObject[e].call(t.userFunctionScope,t.inputValues,t.outputProperties)}catch(n){console.log("Error in JS node signal function code.",Object.getPrototypeOf(n).constructor.name+": "+n.message),this.context.editorConnection&&this.context.isWarningTypeEnabled("javascriptExecution")&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"js-run-waring",{showGlobally:!0,message:"<strong>run</strong>: "+n.message})}},_callDestroyFunction:function(){var e=this._internal;if(e.destroyFunction)try{e.destroyFunction.call(e.userFunctionScope,e.inputValues,e.outputProperties)}catch(t){console.log("Error in JS node destroy code.",Object.getPrototypeOf(t).constructor.name+": "+t.message),this.context.editorConnection&&this.context.isWarningTypeEnabled("javascriptExecution")&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"js-destroy-waring",{showGlobally:!0,message:"<strong>setup</strong>: "+t.message})}},_callSetupFunction:function(){var e=this._internal;if(!(!e.setupFunction||e.killed))try{e.setupFunction.call(e.userFunctionScope,e.inputValues,e.outputProperties)}catch(t){console.log("Error in JS node setup code.",Object.getPrototypeOf(t).constructor.name+": "+t.message),this.context.editorConnection&&this.context.isWarningTypeEnabled("javascriptExecution")&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"js-setup-waring",{showGlobally:!0,message:"<strong>setup</strong>: "+t.message})}}}};function scheduleSetup(){this._internal.setupScheduled||(this._internal.setupScheduled=!0,this.scheduleAfterInputsHaveUpdated(function(){this._internal.killed||(this._callSetupFunction(),this._internal.setupScheduled=!1)}))}function scheduleRun(){this._internal.runScheduled||this._internal.killed||(this._internal.runScheduled=!0,this.scheduleAfterInputsHaveUpdated(function(){this._internal.killed||(this._callRunFunction(),this._internal.changedInputs={},this._internal.runScheduled=!1)}))}function scheduleSignal(e){this._internal.signalScheduled[e]||this._internal.killed||(this._internal.signalScheduled[e]=!0,this.scheduleAfterInputsHaveUpdated(function(){this._internal.killed||(this._callSignalFunction(e),this._internal.signalScheduled[e]=!1)}))}function onFrameStart(){this._internal.runNextFrame=!1,scheduleRun.call(this)}function _typename(e){return typeof e=="object"?e.name:e}function userInputSetter$4(e,t){this._internal.hasParsedCode===!0?this.model.inputPorts[e]!==void 0&&_typename(this.model.inputPorts[e].type)==="signal"?this._internal.definedObject&&typeof this._internal.definedObject[e]=="function"&&t&&scheduleSignal.call(this,e):(this._internal.inputValues[e]=t,this._internal.changedInputs[e]=!0,scheduleRun.call(this)):this._internal.inputQueue.push({name:e,value:t})}function userOutputGetter$3(e){return this._internal.outputValues[e]}function _parseAndSourceJavascript(e,t,n){var o=t.editorConnection;if(!e.parameters)return;function r(){for(const u of["js-parse-waring","js-destroy-waring","js-run-waring","js-setup-waring"])o.clearWarning(e.component.name,e.id,u)}function s(u){u.error?o.sendWarning(e.component.name,e.id,"js-parse-waring",{showGlobally:!0,message:u.error}):r(),n(u.getPorts())}if(e.parameters.externalFile&&e.parameters.useExternalFile==="yes"){var a=e.parameters.externalFile;JavascriptNodeParser.createFromURL(a,s)}else if(e.parameters.code){var l=JavascriptNodeParser.createFromCode(e.parameters.code);s(l)}else r(),n([])}const JavaScript={node:Javascript,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[];const a=[{value:"string",label:"String"},{value:"boolean",label:"Boolean"},{value:"number",label:"Number"},{value:"object",label:"Object"},{value:"array",label:"Array"}],l=[{value:"string",label:"String"},{value:"boolean",label:"Boolean"},{value:"number",label:"Number"},{value:"object",label:"Object"},{value:"array",label:"Array"},{value:"signal",label:"Signal"}];o.parameters.scriptOutputs!==void 0&&o.parameters.scriptOutputs.length>0&&o.parameters.scriptOutputs.forEach(u=>{s.push({name:"outtype-"+u.label,displayName:"Type",plug:"input",type:{name:"enum",enums:l,allowEditOnly:!0},default:"string",parent:"scriptOutputs",parentItemId:u.id}),s.push({name:u.label,plug:"output",type:o.parameters["outtype-"+u.label]||"*",group:"Outputs"})}),o.parameters.scriptInputs!==void 0&&o.parameters.scriptInputs.length>0&&o.parameters.scriptInputs.forEach(u=>{s.push({name:"intype-"+u.label,displayName:"Type",plug:"input",type:{name:"enum",enums:a,allowEditOnly:!0},default:"string",parent:"scriptInputs",parentItemId:u.id}),s.push({name:u.label,plug:"input",type:o.parameters["intype-"+u.label]||"string",group:"Inputs"})}),_parseAndSourceJavascript(o,e,function(u){u.forEach(d=>{s.find(h=>h.name===d.name&&h.plug===d.plug)||s.push(d)}),e.editorConnection.sendDynamicPorts(o.id,s)})}r(),o.on("parameterUpdated",function(s){r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.Javascript2",function(o){n(o)});for(const o of t.getNodesWithType("Javascript2"))n(o)})}},NumberRemapperNode={name:"Number Remapper",docs:"https://docs.noodl.net/nodes/math/number-remapper",category:"Math",initialize:function(){var e=this._internal;e._currentInputValue=0,e._remappedValue=0,e._minInputValue=0,e._maxInputValue=0,e._minOutputValue=0,e._maxOutputValue=1,e._clampOutput=!0},getInspectInfo(){return this._internal._remappedValue},inputs:{inputValue:{group:"Value to Remap",type:{name:"number",allowConnectionOnly:!0},default:0,displayName:"Input Value",set:function(e){this._internal._currentInputValue=e,this._calculateNewOutputValue()}},minInputValue:{group:"Input Parameters",type:{name:"number"},default:0,displayName:"Input Minimum",set:function(e){this._internal._minInputValue=e,this._calculateNewOutputValue()}},maxInputValue:{group:"Input Parameters",type:{name:"number"},default:0,displayName:"Input Maximum",set:function(e){this._internal._maxInputValue=e,this._calculateNewOutputValue()}},minOutputValue:{group:"Output Parameters",type:{name:"number"},default:0,displayName:"Output Minimum",set:function(e){this._internal._minOutputValue=e,this._calculateNewOutputValue()}},maxOutputValue:{group:"Output Parameters",type:{name:"number"},default:1,displayName:"Output Maximum",set:function(e){this._internal._maxOutputValue=e,this._calculateNewOutputValue()}},clamp:{group:"Output Parameters",type:{name:"boolean",allowEditOnly:!0},default:!0,displayName:"Clamp Output",set:function(e){this._internal._clampOutput=!!e,this._calculateNewOutputValue()}}},outputs:{remappedValue:{type:"number",displayName:"Remapped Value",group:"Outputs",getter:function(){return this._internal._remappedValue}}},prototypeExtensions:{_calculateNewOutputValue:{value:function(){var e,t=this._internal;t._maxInputValue===t._minInputValue?e=0:e=(t._currentInputValue-t._minInputValue)/(t._maxInputValue-t._minInputValue),t._clampOutput&&(e=Math.max(0,Math.min(1,e))),t._remappedValue=t._minOutputValue+e*(t._maxOutputValue-t._minOutputValue),this.flagOutputDirty("remappedValue")}}}},NumberRemapper={node:NumberRemapperNode},ValueChangedNode={name:"Value Changed",docs:"https://docs.noodl.net/nodes/logic/value-changed",category:"Logic",initialize:function(){this._internal.lastValue=void 0,this._internal.changeCount=0},getInspectInfo(){return this._internal.changeCount?"Triggered "+this._internal.changeCount+(this._internal.changeCount===1?" time":" times"):"Not triggered"},inputs:{value:{type:"*",displayName:"Input",set:function(e){this._internal.lastValue!==e&&(this._internal.changeCount++,this.sendSignalOnOutput("valueChanged"),this._internal.lastValue=e)}}},outputs:{valueChanged:{type:"signal",displayName:"Value Changed"}}},ValueChanged={node:ValueChangedNode},defaultDuration$3=300,previousStates={},previousValues={};function setRGBA(e,t){if(t==="transparent"||!t){e[3]=0;return}const n=(t.length-1)/2;for(let o=0;o<n;++o){const r=1+o*2;e[o]=parseInt(t.substring(r,r+2),16)}}function componentToHex$1(e){var t=e.toString(16);return t.length==1?"0"+t:t}function rgbaToHex(e){return"#"+componentToHex$1(e[0])+componentToHex$1(e[1])+componentToHex$1(e[2])+componentToHex$1(e[3])}const StatesNode={name:"States",docs:"https://docs.noodl.net/nodes/utilities/logic/states",shortDesc:"Define states with values and this node can interpolate between these values when the state is changed.",category:"Animation",initialize:function(){var e=this,t=this._internal;t.useTransitions=!0,t.currentValues={},t.stateParameters={},t.stateParameterTypes={},t.startValues={},t.bezierEaseCurves={},t.transitionFuncs={},t.valuesAreInitialised=!1,t.animation=this.context.timerScheduler.createTimer({duration:defaultDuration$3,ease:EaseCurves.easeOut,onStart:function(){t.values;var n=t.startValues,o=t.stateParameters,r=t.stateParameterTypes,s="value-"+t.state+"-";this.targetValues={},this.startValues={},this.valueTypes={};for(var a in this.transitionCurves)r["type-"+a]==="number"||r["type-"+a]===void 0?(this.valueTypes[a]="number",this.startValues[a]=n[a],this.targetValues[a]=o[s+a]||0):r["type-"+a]==="color"&&(this.valueTypes[a]="color",this.startValues[a]=[0,0,0,255],setRGBA(this.startValues[a],e.context.styles.resolveColor(n[a]||"#000000")),this.targetValues[a]=[0,0,0,255],setRGBA(this.targetValues[a],e.context.styles.resolveColor(o[s+a]||"#000000")))},onRunning:function(n){var o=n*this.duration,r=t.currentValues,s=[0,0,0,255];for(var a in this.transitionCurves){var l=this.transitionCurves[a];if(o<l.delay)r[a]=this.startValues[a];else if(o>=l.delay+l.dur)r[a]=this.valueTypes[a]==="color"?rgbaToHex(this.targetValues[a]):this.targetValues[a];else{var u=t.transitionFuncs[a].get((o-l.delay)/l.dur);if(this.valueTypes[a]==="number")r[a]=EaseCurves.linear(Number(this.startValues[a]),Number(this.targetValues[a]),u);else if(this.valueTypes[a]==="color"){let d=this.startValues[a],h=this.targetValues[a];s[0]=Math.floor(EaseCurves.linear(d[0],h[0],u)),s[1]=Math.floor(EaseCurves.linear(d[1],h[1],u)),s[2]=Math.floor(EaseCurves.linear(d[2],h[2],u)),s[3]=Math.floor(EaseCurves.linear(d[3],h[3],u)),r[a]=rgbaToHex(s)}}e.flagOutputDirty(a)}},onFinish:function(){var n="reached-"+t.state;e.hasOutput(n)&&e.sendSignalOnOutput(n)}})},getInspectInfo(){return`Current state: ${this._internal.state}`},inputs:{states:{type:{name:"stringlist",allowEditOnly:!0},displayName:"States",group:"States",set:function(e){if(this._internal.states=e?e.split(","):[],this._internal.states.length>0){var t=this;t._internal.state||this.scheduleGoToState(t._internal.startState||t._internal.states[0])}}},values:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Values",group:"Values",set:function(e){var t=this._internal;t.values=e.split(",");for(var n in t.values)this.registerOutputIfNeeded(t.values[n])}},toggle:{group:"Go to state",displayName:"Toggle",valueChangedToTrue:function(){var e=this._internal;if(e.states){var t=e.states.indexOf(e.state),n=(t+1)%e.states.length;this.scheduleGoToState(e.states[n])}}},useTransitions:{type:"boolean",displayName:"Use Transitions",group:"General",default:!0,set:function(e){var t=this._internal;t.useTransitions=e}}},outputs:{currentState:{type:"string",displayName:"State",group:"Current State",getter:function(){return this._internal.state}},stateChanged:{type:"signal",displayName:"State Changed",group:"Current State"}},prototypeExtensions:{registerOutputIfNeeded:function(e){var t=this._internal;this.hasOutput(e)||this.registerOutput(e,{getter:function(){return t.currentValues[e]}})},registerInputIfNeeded:function(e){var t=this,n=this._internal;if(!this.hasInput(e)){if(e.indexOf("to-")===0){var o=e.substring(3);this.registerInput(e,{set:createSetter({valueChangedToTrue:function(){this.scheduleGoToState(o)}})})}else if(e==="startState")this.registerInput(e,{set:function(a){this._internal.startState=a,this.scheduleGoToState(a)}});else if(e==="currentState")this.registerInput(e,{set:this.scheduleGoToState.bind(this)});else if(e.indexOf("type-")===0)this.registerInput(e,{set:function(a){n.stateParameterTypes[e]=a}});else if(e.indexOf("value-")===0){var r=e.split("-"),o=r[1],s=r[2];this.registerInput(e,{set:function(l){n.stateParameters[e]=l,n.state===o&&(n.currentValues[s]=l,t.flagOutputDirty(s))}})}else if(e.search(/duration-/g)===0)this.registerInput(e,{set:function(a){n.stateParameters[e]=a}});else if(e.search(/transition/g)===0){var o=e.substring(11);this.registerInput(e,{set:function(l){n.stateParameters[e]=l}})}}},setCurrentState:function(e){this.scheduleGoToState(e)},jumpToState:function(e){var t=this._internal;if(t.states&&(e||(e=t.states[0]),t.state!==e)){t.animation.stop();var n="value-"+e+"-";for(var o in t.values){var r=t.values[o];t.currentValues[r]=t.stateParameters[n+r]||0,this.flagOutputDirty(r)}t.state=e,this.flagOutputDirty("currentState"),t.valuesAreInitialised&&this.sendSignalOnOutput("stateChanged"),t.valuesAreInitialised=!0,this.updateAtStatePorts()}},scheduleGoToState:function(e){var t=this;this._internal.goToState=e,!this.hasScheduledGoToState&&(this.hasScheduledGoToState=!0,this.scheduleAfterInputsHaveUpdated(function(){t.hasScheduledGoToState=!1,t.goToState(t._internal.goToState)}))},goToState:function(e){var t=this._internal;if(t.states&&(e||(e=t.states[0]),t.state!==e))if(!t.valuesAreInitialised)this.jumpToState(e);else{var n=0,o=0,r={};for(var s in t.values){var a=t.values[s];t.startValues[a]=t.currentValues[a];const h=t.stateParameterTypes["type-"+a];if(h==="boolean"){var l=t.stateParameters["value-"+e+"-"+a];t.currentValues[a]=l===void 0?!1:!!l,this.flagOutputDirty(a)}else if(h==="string"||h==="textStyle")t.currentValues[a]=t.stateParameters["value-"+e+"-"+a],this.flagOutputDirty(a);else{var u=t.stateParameters["transition-"+e+"-"+a];u||(u=t.stateParameters["transitiondef-"+e]||{curve:[0,0,.58,1],dur:300,delay:0}),u.dur===0&&u.delay===0||!t.useTransitions?(t.currentValues[a]=t.stateParameters["value-"+e+"-"+a],this.flagOutputDirty(a)):(t.transitionFuncs[a]=BezierEasing(u.curve),r[a]=u,n=Math.min(n,u.delay),o=Math.max(o,u.dur+u.delay))}}if((o>0||n>0)&&(t.animation.transitionCurves=r,t.animation.duration=o,t.animation.delay=n,t.animation.start()),t.state=e,this.flagOutputDirty("currentState"),this.sendSignalOnOutput("stateChanged"),this.updateAtStatePorts(),o==0&&n==0){var d="reached-"+t.state;this.hasOutput(d)&&this.sendSignalOnOutput(d)}}},updateAtStatePorts:function(){var e=this._internal,t=e.states;for(var n in t){var o=t[n],r="at-"+o;e.currentValues[r]=e.state===o,this.hasOutput(r)&&this.flagOutputDirty(r)}}}};function detectRename$1(e,t){if(!(!e||!t)&&e.length===t.length){for(var n={},o=0;o<e.length;o++){if(t.indexOf(e[o])===-1){if(n.before)return;n.before=e[o]}if(e.indexOf(t[o])===-1){if(n.after)return;n.after=t[o]}}return n.before&&n.after?n:void 0}}function updatePorts$9(e,t,n){var o=t.states,r=t.values,s=[];r=r?r.split(","):void 0;for(var a in r){var l=r[a];s.push({type:{name:t["type-"+l]||"number",allowConnectionsOnly:!0},plug:"output",group:"Values",name:l}),s.push({type:{name:"enum",enums:[{label:"Number",value:"number"},{label:"String",value:"string"},{label:"Boolean",value:"boolean"},{label:"Color",value:"color"},{label:"Text Style",value:"textStyle"}],allowEditOnly:!0},default:"number",plug:"input",group:"Types",displayName:l,name:"type-"+l})}o=o?o.split(","):void 0,o&&o.forEach(function(f){r&&r.forEach(function(g){s.push({plug:"input",type:t["type-"+g]||"number",group:f+" Values",name:"value-"+f+"-"+g,displayName:g,editorName:f+"|"+g})}),r&&t.useTransitions!==!1&&(s.push({plug:"input",type:"curve",displayName:"Default",default:{curve:[0,0,.58,1],dur:300,delay:0},group:f+" Transitions",name:"transitiondef-"+f}),r.forEach(function(g){(t["type-"+g]===void 0||t["type-"+g]==="number"||t["type-"+g]==="color")&&s.push({plug:"input",type:{name:"curve"},default:t["transitiondef-"+f]||{curve:[0,0,.58,1],dur:300,delay:0},group:f+" Transitions",name:"transition-"+f+"-"+g,displayName:g,editorName:"Transition "+f+"|"+g})})),s.push({plug:"input",type:{name:"signal",allowConnectionsOnly:!0},displayName:"To "+f,name:"to-"+f,group:"Go to state"}),s.push({plug:"output",type:"boolean",displayName:"At "+f,name:"at-"+f,group:"Current state"}),s.push({plug:"output",type:"signal",displayName:"Has Reached "+f,name:"reached-"+f,group:"Current state"})}),o&&s.push({plug:"input",type:{name:"enum",enums:o},group:"States",displayName:"State",name:"currentState",default:t.startState||o[0]});var u=detectRename$1(previousStates[e],o);previousStates[e]=o;var d=detectRename$1(previousValues[e],r);previousValues[e]=r;let h;u?(h={plug:"input",before:u.before,after:u.after,patterns:["transition-{{*}}","to-{{*}}","at-{{*}}","reached-{{*}}"]},r&&r.forEach(function(f){h.patterns.push("value-{{*}}-"+f)})):d&&(h=[{plug:"output",before:d.before,after:d.after,patterns:["{{*}}"]},{plug:"input",before:d.before,after:d.after,patterns:["type-{{*}}"]},{plug:"input",before:d.before,after:d.after,patterns:o?o.map(function(f){return"value-"+f+"-{{*}}"}):void 0}]),n.sendDynamicPorts(e,s,{renamed:h})}const States={node:StatesNode,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.States",function(n){n.parameters.states&&updatePorts$9(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",function(o){(o.name==="useTransitions"||o.name==="states"||o.name==="values"||o.name.startsWith("transition")||o.name.startsWith("type-"))&&updatePorts$9(n.id,n.parameters,e.editorConnection)})})}},ForEachActionsDefinition={name:"For Each Actions",docs:"https://docs.noodl.net/nodes/ui-controls/repeater-item",displayNodeName:"Repeater Item",category:"Data",color:"data",inputs:{removeCompleted:{type:{name:"boolean",allowConnectionsOnly:!0},displayName:"Remove Completed",group:"Events",valueChangedToTrue:function(){this._internal.removeCompletedCallback&&this._internal.removeCompletedCallback()}}},outputs:{added:{type:"signal",displayName:"Added",group:"Events"},tryRemove:{type:"signal",displayName:"Try Remove",group:"Events"},itemId:{type:"string",displayName:"Item Id",group:"General",get(){return this.getItemId()}}},prototypeExtensions:{getItemId(){const e=this.nodeScope.componentOwner._forEachModel;return e&&e.getId()},signalAdded:function(){this.sendSignalOnOutput("added")},tryRemove:function(e){this.getOutput("tryRemove").hasConnections()?(this._internal.removeCompletedCallback=e,this.sendSignalOnOutput("tryRemove")):this.scheduleAfterInputsHaveUpdated(function(){e()})},itemActionTriggered(e){this.scheduleAfterInputsHaveUpdated(()=>{const t=this.getItemId();this.nodeScope.componentOwner._forEachNode.signalItemAction(e,t,this._internal.actionParameters||{})})},setItemActionParameter(e){this._internal.actionParameters||(this._internal.actionParameters={}),this._internal.actionParameters[e]=e},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e.startsWith("itemAction-"))return this.registerInput(e,{set:createSetter({valueChangedToTrue:this.itemActionTriggered.bind(this,e)})});if(e.startsWith("itemActionParameter-"))return this.registerInput(e,{set:this.setItemActionParameter.bind(this,e)})}}}},ForEachActions={node:ForEachActionsDefinition,setup:function(e,t){!e.editorConnection||e.editorConnection.isRunningLocally()}};function clamp(e,t,n){return Math.max(e,Math.min(t,n))}function setRGB(e,t){for(var n=0;n<3;++n){var o=1+n*2;e[n]=parseInt(t.substring(o,o+2),16)}}function componentToHex(e){var t=e.toString(16);return t.length==1?"0"+t:t}function rgbToHex(e){return"#"+componentToHex(e[0])+componentToHex(e[1])+componentToHex(e[2])}let rgb0=[0,0,0],rgb1=[0,0,0],rgb2=[0,0,0];const ColorBlendNode={name:"Color Blend",docs:"https://docs.noodl.net/nodes/utilities/color-blend",shortDesc:"Given any number of input colors this node can interpolate between these and give the result color as output.",category:"Interpolation",getInspectInfo(){return[{type:"color",value:this._internal.resultColor}]},initialize(){const e=this._internal;e.resultColor="#000000",e.blendValue=0,e.colors=[]},numberedInputs:{color:{type:"color",displayPrefix:"Color",createSetter(e){return function(t){this._internal.colors[e]=t,this.updateColor()}}}},inputs:{blendValue:{type:"number",displayName:"Blend Value",default:0,set:function(e){this._internal.blendValue=e,this.updateColor()}}},outputs:{result:{type:"color",displayName:"Result",getter:function(){return this._internal.resultColor}}},methods:{updateColor(){var e=this._internal.colors;if(e.length===0)return;function t(s){return e[s]?e[s]:"#000000"}var n=clamp(0,e.length-1,this._internal.blendValue),o=Math.floor(n),r=n-o;r===0?this._internal.resultColor=t(o):(setRGB(rgb0,t(o)),setRGB(rgb1,t(o+1)),rgb2[0]=Math.floor(EaseCurves.linear(rgb0[0],rgb1[0],r)),rgb2[1]=Math.floor(EaseCurves.linear(rgb0[1],rgb1[1],r)),rgb2[2]=Math.floor(EaseCurves.linear(rgb0[2],rgb1[2],r)),this._internal.resultColor=rgbToHex(rgb2)),this.flagOutputDirty("result")}}},ColorBlend={node:ColorBlendNode},defaultDuration$2=300,AnimateToValue={name:"net.noodl.animatetovalue",docs:"https://docs.noodl.net/nodes/logic/animate-to-value",displayName:"Animate To Value",shortDesc:"This node can interpolate smooothely from the current value to a target value.",category:"Animation",initialize:function(){var e=this,t=this._internal;t.currentNumber=0,t.numberInitialized=!1,t.animationStarted=!1,t.setCurrentNumberEnabled=!1,t.overrideValue=0,t._animation=this.context.timerScheduler.createTimer({duration:defaultDuration$2,startValue:0,endValue:0,ease:EaseCurves.easeOut,onStart:function(){t.animationStarted=!0},onRunning:function(n){t.currentNumber=this.ease(this.startValue,this.endValue,n),e.flagOutputDirty("currentValue")},onFinish:function(){e.sendSignalOnOutput("atTargetValue")}})},getInspectInfo(){return this._internal.currentNumber},inputs:{targetValue:{type:{name:"number"},displayName:"Target Value",group:"Target Value",default:void 0,set:function(e){if(e===!0?e=1:e===!1&&(e=0),e=Number(e),!isNaN(e)){var t=this._internal;if(t.numberInitialized===!1){t.currentNumber=e,t.numberInitialized=!0,t._animation.endValue=e,this.flagOutputDirty("currentValue");return}else if(e===t._animation.endValue)return;t._animation.startValue=t.currentNumber,t._animation.endValue=e,t._animation.start()}}},duration:{type:"number",group:"Parameters",displayName:"Duration",default:defaultDuration$2,set:function(e){this._internal._animation.duration=e}},delay:{type:"number",group:"Parameters",displayName:"Delay",default:0,set:function(e){this._internal._animation.delay=e}},easingCurve:{type:{name:"enum",enums:[{value:"easeOut",label:"Ease Out"},{value:"easeIn",label:"Ease In"},{value:"linear",label:"Linear"},{value:"easeInOut",label:"Ease In Out"}]},default:"easeOut",displayName:"Easing Curve",group:"Parameters",set:function(e){this._internal._animation.ease=EaseCurves[e]}}},outputs:{currentValue:{type:"number",displayName:"Current Value",group:"Current State",getter:function(){return this._internal.currentNumber}},atTargetValue:{type:"signal",displayName:"At Target Value",group:"Signals"}}},AnimateToValue$1={node:AnimateToValue},ComponentObject={name:"net.noodl.ComponentObject",displayNodeName:"Component Object",category:"Component Utilities",color:"component",docs:"https://docs.noodl.net/nodes/component-utilities/component-object",initialize:function(){this._internal.inputValues={},this._internal.dirtyValues={},this._internal.onModelChangedCallback=t=>{this.isInputConnected("fetch")===!1&&(this.hasOutput("value-"+t.name)&&this.flagOutputDirty("value-"+t.name),this.hasOutput("changed-"+t.name)&&this.sendSignalOnOutput("changed-"+t.name),this.sendSignalOnOutput("changed"))};const e=Model.get("componentState"+this.nodeScope.componentOwner.getInstanceId());this._internal.model=e,e.on("change",this._internal.onModelChangedCallback)},getInspectInfo(){return{type:"value",value:this._internal.model.data}},inputs:{properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set(e){}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleFetch()}}},outputs:{changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"}},methods:{scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledStore=!1;for(var t in e.dirtyValues)e.model.set(t,e.inputValues[t],{resolve:!0});e.dirtyValues={}})}},scheduleFetch(){this.hasScheduledFetch||(this.hasScheduledFetch=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledFetch=!1,this.fetch()}))},fetch(){for(var e in this._internal.model.data)this.hasOutput("value-"+e)&&(this.flagOutputDirty("value-"+e),this.hasOutput("changed-"+e)&&this.sendSignalOnOutput("changed-"+e));this.sendSignalOnOutput("fetched")},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this._internal.model.off("change",this._internal.onModelChangedCallback)},registerOutputIfNeeded(e){if(this.hasOutput(e))return;const t=e.split("-"),n=t[t.length-1];this.registerOutput(e,{get(){return this._internal.model.get(n,{resolve:!0})}})},registerInputIfNeeded:function(e){if(!this.hasInput(e)&&e.startsWith("value-")){const t=e.substring(6);this.registerInput(e,{set(n){this._internal.inputValues[t]=n,this._internal.dirtyValues[t]=!0,this.scheduleStore()}})}}}};function updatePorts$8(e,t,n){const o=[];if(t.properties){var r=t.properties.split(",");for(var s in r){var a=r[s];o.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name:"value-"+a,displayName:a}),o.push({type:"signal",plug:"output",group:"Changed Events",displayName:a+" Changed",name:"changed-"+a})}}n.sendDynamicPorts(e,o,{detectRenamed:{plug:"input/output"}})}const ComponentObject$1={node:ComponentObject,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.net.noodl.ComponentObject",n=>{updatePorts$8(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",o=>{o.name==="properties"&&updatePorts$8(n.id,n.parameters,e.editorConnection)})})}},graphEventEmitter$1=new eventsExports.EventEmitter;graphEventEmitter$1.setMaxListeners(1e6);const ParentComponentObject={name:"net.noodl.ParentComponentObject",displayNodeName:"Parent Component Object",category:"Component Utilities",color:"component",docs:"https://docs.noodl.net/nodes/component-utilities/parent-component-object",initialize(){this._internal.inputValues={},this._internal.onModelChangedCallback=e=>{this.isInputConnected("fetch")===!1&&(this.hasOutput("value-"+e.name)&&this.flagOutputDirty("value-"+e.name),this.hasOutput("changed-"+e.name)&&this.sendSignalOnOutput("changed-"+e.name),this.sendSignalOnOutput("changed"))},this.onComponentStateNodesChanged=()=>{const e=this.findParentComponentStateModelId();this._internal.modelId!==e&&(this._internal.modelId=e,this.isInputConnected("fetch")===!1&&this.setModelId(this._internal.modelId))},graphEventEmitter$1.on("componentStateNodesChanged",this.onComponentStateNodesChanged),this.updateComponentState()},nodeScopeDidInitialize(){this._internal.modelId||this.context.scheduleAfterUpdate(()=>{this.updateComponentState()})},getInspectInfo(){if(!this._internal.model)return"No parent component state found";const t=[{type:"text",value:this._internal.parentComponentName}],n=this._internal.model.data;return t.concat(Object.keys(n).map(o=>({type:"text",value:o+": "+n[o]})))},inputs:{properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set(e){}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.setModelId(this._internal.modelId)}}},outputs:{changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"}},methods:{updateComponentState(){this._internal.modelId=this.findParentComponentStateModelId(),this.isInputConnected("fetch")===!1&&this.setModelId(this._internal.modelId)},findParentComponentStateModelId(){function e(n){let o;if(n.getRoots().length>0){const r=n.getRoots()[0];r.getVisualParentNode?r.getVisualParentNode()&&(o=r.getVisualParentNode().nodeScope.componentOwner):r.parentNodeScope&&(o=n.parentNodeScope.componentOwner)}else n.parentNodeScope&&(o=n.parentNodeScope.componentOwner);if(o&&o.nodeScope&&o.nodeScope.componentOwner!==n)return o.nodeScope.getNodesWithType("net.noodl.ComponentObject").length>0?o:e(o)}const t=e(this.nodeScope.componentOwner);if(t)return this._internal.parentComponentName=t.name,"componentState"+t.getInstanceId()},setModelId(e){if(this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback),this._internal.model=void 0,!e)return;const t=Model.get(e);this._internal.model=t,t.on("change",this._internal.onModelChangedCallback);for(var n in t.data)this.hasOutput("value-"+n)&&this.flagOutputDirty("value-"+n),this.hasOutput("changed-"+n)&&this.sendSignalOnOutput("changed-"+n);this.sendSignalOnOutput("changed"),this.sendSignalOnOutput("fetched")},scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{if(this.hasScheduledStore=!1,!!e.model)for(var t in e.inputValues)e.model.set(t,e.inputValues[t],{resolve:!0})})}},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),graphEventEmitter$1.off("componentStateNodesChanged",this.onComponentStateNodesChanged),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},registerOutputIfNeeded(e){if(this.hasOutput(e))return;const t=e.substring(6);this.registerOutput(e,{get(){if(this._internal.model)return this._internal.model.get(t,{resolve:!0})}})},registerInputIfNeeded:function(e){if(!this.hasInput(e)&&e.startsWith("value-")){const t=e.substring(6);this.registerInput(e,{set(n){this._internal.inputValues[t]=n,this.scheduleStore()}})}}}};function updatePorts$7(e,t,n){const o=[];var r=t.properties&&t.properties.split(",");for(var s in r){var a=r[s];o.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name:"value-"+a,displayName:a}),o.push({type:"signal",plug:"output",group:"Changed Events",displayName:a+" Changed",name:"changed-"+a})}n.sendDynamicPorts(e,o,{detectRenamed:{plug:"input/output"}})}const ParentComponentObject$1={node:ParentComponentObject,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||(t.on("nodeAdded.net.noodl.ParentComponentObject",n=>{updatePorts$7(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",o=>{updatePorts$7(n.id,n.parameters,e.editorConnection)})}),t.on("nodeAdded.net.noodl.ComponentObject",n=>{setTimeout(()=>{graphEventEmitter$1.emit("componentStateNodesChanged")},0)}),t.on("nodeRemoved.net.noodl.ComponentObject",n=>{setTimeout(()=>{graphEventEmitter$1.emit("componentStateNodesChanged")})}))}};function extendSetComponentObjectProperties(e){const t={name:e.name,displayNodeName:e.displayName,category:"Component Utilities",color:"component",docs:e.docs,initialize:function(){this._internal.inputValues={}},inputs:{properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set(o){}},store:{type:"signal",group:"Actions",displayName:"Do",valueChangedToTrue(){this.scheduleStore()}}},outputs:{stored:{type:"signal",group:"Events",displayName:"Done"}},methods:{getComponentObjectId:e.getComponentObjectId,scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var o=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{const r=Model.get(this.getComponentObjectId());this.hasScheduledStore=!1;const a=(this.model.parameters.properties||"").split(","),l=Object.keys(o.inputValues).filter(u=>a.indexOf(u)!==-1);for(const u of l)r.set(u,o.inputValues[u],{resolve:!0});this.sendSignalOnOutput("stored")})}},registerInputIfNeeded:function(o){if(!this.hasInput(o))if(o.startsWith("prop-")){const r=o.substring(5);this.registerInput(o,{set(s){this._internal.inputValues[r]=s}})}else o.startsWith("type-")&&this.registerInput(o,{set(r){}})}}};function n(o,r,s){var a=[];const l=[{label:"String",value:"string"},{label:"Boolean",value:"boolean"},{label:"Number",value:"number"},{label:"Date",value:"date"},{label:"Array",value:"array"},{label:"Object",value:"object"},{label:"Any",value:"*"}];var u=r.properties;if(u){u=u?u.split(","):void 0;for(var d in u){var h=u[d];a.push({type:{name:r["type-"+h]===void 0?"*":r["type-"+h]},plug:"input",group:"Property Values",displayName:h,name:"prop-"+h}),a.push({type:{name:"enum",enums:l,allowEditOnly:!0},plug:"input",group:"Property Types",displayName:h,default:"*",name:"type-"+h})}}s.sendDynamicPorts(o,a,{detectRenamed:{plug:"input"}})}return{node:t,setup:function(o,r){!o.editorConnection||!o.editorConnection.isRunningLocally()||r.on("nodeAdded."+e.name,s=>{n(s.id,s.parameters,o.editorConnection),s.on("parameterUpdated",a=>{(a.name==="properties"||a.name.startsWith("type-"))&&n(s.id,s.parameters,o.editorConnection)})})}}}const Base={extendSetComponentObjectProperties},SetComponentObjectProperties=Base.extendSetComponentObjectProperties({name:"net.noodl.SetComponentObjectProperties",displayName:"Set Component Object Properties",docs:"https://docs.noodl.net/nodes/component-utilities/set-component-object-properties",getComponentObjectId:function(){return"componentState"+this.nodeScope.componentOwner.getInstanceId()}}),SetParentComponentObjectProperties=Base.extendSetComponentObjectProperties({name:"net.noodl.SetParentComponentObjectProperties",displayName:"Set Parent Component Object Properties",docs:"https://docs.noodl.net/nodes/component-utilities/set-parent-component-object-properties",getComponentObjectId:function(){function e(n){let o;if(n.getRoots().length>0){const r=n.getRoots()[0];r.getVisualParentNode?r.getVisualParentNode()&&(o=r.getVisualParentNode().nodeScope.componentOwner):r.parentNodeScope&&(o=n.parentNodeScope.componentOwner)}else n.parentNodeScope&&(o=n.parentNodeScope.componentOwner);if(o&&o.nodeScope&&o.nodeScope.componentOwner!==n)return o.nodeScope.getNodesWithType("net.noodl.ComponentObject").length>0?o:e(o)}const t=e(this.nodeScope.componentOwner);if(t)return this._internal.parentComponentName=t.name,"componentState"+t.getInstanceId()}}),VariableNodeDefinition$1={name:"Variable2",displayNodeName:"Variable",docs:"https://docs.noodl.net/nodes/data/variable/variable-node",category:"Data",usePortAsLabel:"name",color:"data",initialize:function(){var e=this,t=this._internal;this._internal.onModelChangedCallback=function(n){!e.isInputConnected("fetch")&&n.name===t.name&&(e.sendSignalOnOutput("changed"),e.flagOutputDirty("value"))},t.variablesModel=Model.get("--ndl--global-variables"),t.variablesModel.on("change",this._internal.onModelChangedCallback)},getInspectInfo(){return this._internal.name?this._internal.variablesModel.get(this._internal.name):"[No value set]"},outputs:{name:{type:"string",displayName:"Name",group:"General",getter:function(){return this._internal.name}},changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"},value:{type:"*",displayName:"Value",group:"General",getter:function(){var e=this._internal;if(e.name)return e.variablesModel.get(e.name)}}},inputs:{name:{type:{name:"string",identifierOf:"VariableName",identifierDisplayName:"Variable names"},displayName:"Name",group:"General",set:function(e){this.isInputConnected("fetch")===!1?this.setVariableName(e):(this._internal.name=e,this.flagOutputDirty("name"))}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.setVariableName(this._internal.name)}},value:{type:"*",displayName:"Value",group:"General",set:function(e){this._internal.value=e,this.scheduleStore()}}},prototypeExtensions:{scheduleStore:function(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(function(){this.hasScheduledStore=!1,e.variablesModel.set(e.name,e.value)})}},setVariableName:function(e){this._internal.name=e,this.flagOutputDirty("name"),this.flagOutputDirty("value"),this.sendSignalOnOutput("fetched")},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.variablesModel.off("change",this._internal.onModelChangedCallback)}}},VariableNode2={node:VariableNodeDefinition$1},SetVariableNodeDefinition={name:"Set Variable",docs:"https://docs.noodl.net/nodes/data/variable/set-variable",category:"Data",usePortAsLabel:"name",color:"data",initialize:function(){const e=this._internal;e.variablesModel=Model.get("--ndl--global-variables")},getInspectInfo(){return this._internal.name?this._internal.variablesModel.get(this._internal.name):"[No value set]"},outputs:{done:{type:"signal",displayName:"Done",group:"Events"}},inputs:{name:{type:{name:"string",identifierOf:"VariableName",identifierDisplayName:"Variable names"},displayName:"Name",group:"General",set:function(e){this._internal.name=e}},setWith:{type:{name:"enum",enums:[{label:"String",value:"string"},{label:"Boolean",value:"boolean"},{label:"Number",value:"number"},{label:"Empty string",value:"emptyString"},{label:"Date",value:"date"},{label:"Object",value:"object"},{label:"Array",value:"array"},{label:"Any",value:"*"}],allowEditOnly:!0},displayName:"Set as",default:"*",group:"General",set:function(e){this._internal.setWith=e}},do:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleStore()}}},methods:{setValue:function(e){this._internal.value=e},scheduleStore:function(){if(this.hasScheduledStore)return;this.hasScheduledStore=!0;const e=this._internal;this.scheduleAfterInputsHaveUpdated(function(){this.hasScheduledStore=!1;let t=e.setWith==="emptyString"?"":e.value;e.setWith==="object"&&typeof t=="string"&&(t=Model.get(t)),e.setWith==="array"&&typeof t=="string"&&(t=Collection.get(t)),e.setWith==="boolean"&&(t=!!t),e.variablesModel.set(e.name,t,{forceChange:!0}),this.sendSignalOnOutput("done")})},registerInputIfNeeded:function(e){this.hasInput(e)||e==="value"&&this.registerInput(e,{set:this.setValue.bind(this)})}}},SetVariableNode={node:SetVariableNodeDefinition,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Set Variable",function(n){function o(){var r=[];n.parameters.setWith==="emptyString"||r.push({type:n.parameters.setWith!==void 0?n.parameters.setWith:"*",plug:"input",group:"General",name:"value",displayName:"Value"}),e.editorConnection.sendDynamicPorts(n.id,r)}o(),n.on("parameterUpdated",function(r){o()})})}};var CollectionNode$2={name:"Collection2",docs:"https://docs.noodl.net/nodes/data/array/array-node",displayNodeName:"Array",shortDesc:"A collection of models, mainly used together with a For Each Node.",category:"Data",usePortAsLabel:"collectionId",color:"data",initialize:function(){var e=this,t=!1;this._internal.collectionChangedCallback=function(){e.isInputConnected("fetch")!==!0&&(t||(t=!0,e.scheduleAfterInputsHaveUpdated(function(){e.sendSignalOnOutput("changed"),e.flagOutputDirty("firstItemId"),e.flagOutputDirty("count"),t=!1})))},this._internal.sourceCollectionChangedCallback=function(){e.isInputConnected("store")!==!0&&e.scheduleCopyItems()}},getInspectInfo(){const e=this._internal.collection;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:e.items}]:{type:"text",value:"[No Array]"}},inputs:{collectionId:{type:{name:"string",identifierOf:"CollectionName",identifierDisplayName:"Array Ids"},displayName:"Id",group:"General",set:function(e){e instanceof Collection&&(e=e.getId()),this._internal.collectionId=e,this.isInputConnected("fetch")===!1?this.setCollectionID(e):this.flagOutputDirty("id")}},items:{type:"array",group:"General",displayName:"Items",set:function(e){var t=this;e!==void 0&&e!==this._internal.collection&&(this._internal.pendingSourceCollection=e,this.isInputConnected("store")===!1&&this.scheduleAfterInputsHaveUpdated(function(){t.setSourceCollection(e)}))}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.scheduleSetCollection()}}},outputs:{id:{type:"string",displayName:"Id",group:"General",getter:function(){return this._internal.collection?this._internal.collection.getId():this._internal.collectionId}},items:{type:"array",displayName:"Items",group:"General",getter:function(){return this._internal.collection}},firstItemId:{type:"string",displayName:"First Item Id",group:"General",getter:function(){if(this._internal.collection){var e=this._internal.collection.get(0);if(e!==void 0)return e.getId()}}},count:{type:"number",displayName:"Count",group:"General",getter:function(){return this._internal.collection?this._internal.collection.size():0}},changed:{group:"Events",type:"signal",displayName:"Changed"},fetched:{group:"Events",type:"signal",displayName:"Fetched"}},prototypeExtensions:{setCollectionID:function(e){this.setCollection(Collection.get(e))},setCollection:function(e){this._internal.collection&&this._internal.collection.off("change",this._internal.collectionChangedCallback),this._internal.collection=e,this.flagOutputDirty("id"),e.on("change",this._internal.collectionChangedCallback),this.flagOutputDirty("items"),this.flagOutputDirty("firstItemId"),this.flagOutputDirty("count")},setSourceCollection:function(e){var t=this._internal;t.sourceCollection&&t.sourceCollection instanceof Collection&&t.sourceCollection.off("change",t.sourceCollectionChangedCallback),t.sourceCollection=e,t.sourceCollection instanceof Collection&&t.sourceCollection.on("change",t.sourceCollectionChangedCallback),this._copySourceItems()},scheduleSetCollection:function(){var e=this;this.hasScheduledSetCollection||(this.hasScheduledSetCollection=!0,this.scheduleAfterInputsHaveUpdated(function(){e.hasScheduledSetCollection=!1,e.setCollectionID(e._internal.collectionId),e.sendSignalOnOutput("fetched")}))},scheduleStore:function(){var e=this;if(!this.hasScheduledStore){this.hasScheduledStore=!0;var t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){e.hasScheduledStore=!1,e.setSourceCollection(t.pendingSourceCollection)})}},_copySourceItems:function(){var e=this._internal;e.collection===void 0&&this.isInputConnected("fetch")===!1&&this.setCollection(Collection.get()),e.collection&&e.collection.set(e.sourceCollection)},scheduleCopyItems:function(){var e=this;this._internal,!this.hasScheduledCopyItems&&(this.hasScheduledCopyItems=!0,this.scheduleAfterInputsHaveUpdated(function(){e.hasScheduledCopyItems=!1,e._copySourceItems()}))},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.collection&&this._internal.collection.off("change",this._internal.collectionChangedCallback)}}};const CollectionNode2={node:CollectionNode$2};var CollectionInsertNode={name:"CollectionInsert",docs:"https://docs.noodl.net/nodes/data/array/insert-into-array",displayNodeName:"Insert Object Into Array",shortDesc:"A collection of models, mainly used together with a For Each Node.",category:"Data",usePortAsLabel:"collectionId",color:"data",initialize:function(){},inputs:{collectionId:{type:{name:"string",identifierOf:"CollectionName",identifierDisplayName:"Array Ids"},displayName:"Array Id",group:"General",set:function(e){e instanceof Collection&&(e=e.getId()),this.setCollectionID(e)}},modifyId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Object Id",group:"Modify",set:function(e){this._internal.modifyId=e}},add:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){var e=this,t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){if(this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"insert-warning"),t.modifyId===void 0){this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"insert-warning",{showGlobally:!0,message:"No Object Id specified"});return}if(t.collection===void 0){this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"insert-warning",{showGlobally:!0,message:"No Array Id specified"});return}var n=Model.get(t.modifyId);t.collection.add(n),e.sendSignalOnOutput("modified")})}}},outputs:{modified:{group:"Events",type:"signal",displayName:"Done"}},prototypeExtensions:{setCollectionID:function(e){this.setCollection(Collection.get(e))},setCollection:function(e){this._internal.collection=e}}};const CollectionNodeInsert={node:CollectionInsertNode};var CollectionRemoveNode={name:"CollectionRemove",docs:"https://docs.noodl.net/nodes/data/array/remove-from-array",displayNodeName:"Remove Object From Array",shortDesc:"A collection of models, mainly used together with a For Each Node.",category:"Data",usePortAsLabel:"collectionId",color:"data",initialize:function(){},inputs:{collectionId:{type:{name:"string",identifierOf:"CollectionName",identifierDisplayName:"Array Ids"},displayName:"Array Id",group:"General",set:function(e){e instanceof Collection&&(e=e.getId()),this.setCollectionID(e)}},modifyId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Object Id",group:"Modify",set:function(e){this._internal.modifyId=e}},remove:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){var e=this,t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){if(t.modifyId!==void 0&&t.collection!==void 0){var n=Model.get(t.modifyId);t.collection.remove(n),e.sendSignalOnOutput("modified")}})}}},outputs:{modified:{group:"Events",type:"signal",displayName:"Done"}},prototypeExtensions:{setCollectionID:function(e){this.setCollection(Collection.get(e))},setCollection:function(e){this._internal.collection=e}}};const CollectionNodeRemove={node:CollectionRemoveNode},CollectionClearNode={name:"CollectionClear",docs:"https://docs.noodl.net/nodes/data/array/clear-array",displayNodeName:"Clear Array",category:"Data",usePortAsLabel:"collectionId",color:"data",inputs:{collectionId:{type:{name:"string",identifierOf:"CollectionName",identifierDisplayName:"Array Ids"},displayName:"Array Id",group:"General",set:function(e){e instanceof Collection&&(e=e.getId()),this.setCollectionID(e)}},clear:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{this._internal.collection.set([]),this.sendSignalOnOutput("modified")})}}},outputs:{modified:{group:"Events",type:"signal",displayName:"Done"}},methods:{setCollectionID:function(e){this.setCollection(Collection.get(e))},setCollection:function(e){this._internal.collection=e}}},CollectionNodeClear={node:CollectionClearNode};var CollectionNewNode={name:"CollectionNew",docs:"https://docs.noodl.net/nodes/data/array/create-new-array",displayNodeName:"Create New Array",shortDesc:"A collection of models, mainly used together with a For Each Node.",category:"Data",color:"data",initialize:function(){},inputs:{new:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleNew()}},items:{type:"array",group:"General",displayName:"Items",set:function(e){this._internal.sourceCollection=e}}},outputs:{id:{type:"string",displayName:"Id",group:"General",getter:function(){return this._internal.collection?this._internal.collection.getId():this._internal.collectionId}},created:{group:"Events",type:"signal",displayName:"Done"}},prototypeExtensions:{setCollectionID:function(e){this.setCollection(Collection.get(e))},setCollection:function(e){this._internal.collection=e,this.flagOutputDirty("id")},scheduleNew:function(){var e=this;this.hasScheduledNew||(this.hasScheduledNew=!0,this.scheduleAfterInputsHaveUpdated(function(){e.hasScheduledNew=!1;const t=Collection.get();this._internal.sourceCollection!==void 0&&t.set(this._internal.sourceCollection),e.setCollection(t),e.sendSignalOnOutput("created")}))}}};const CollectionNodeNew={node:CollectionNewNode};function applyFilter(e,t){for(var n in t){var o=t[n];if(o.$neq!==void 0){if(e[n]==o.$neq)return!1}else{if(e[n]===void 0)return!1;if(o.$eq!==void 0&&e[n]!=o.$eq)return!1;if(o.$gt!==void 0&&!(e[n]>o.$gt))return!1;if(o.$lt!==void 0&&!(e[n]<o.$lt))return!1;if(o.$gte!==void 0&&!(e[n]>=o.$gte))return!1;if(o.$lte!==void 0&&!(e[n]<=o.$lte))return!1;if(o.$regex!==void 0){var r=e[n]+"",s=new RegExp(o.$regex,o.$case!==!0?"i":void 0);if(!s.test(r))return!1}}}return!0}function sorter(e,t){e instanceof Model&&(e=e.data),t instanceof Model&&(t=t.data);for(var n in this){var o=e[n],r=t[n];if(o!==r)return typeof o=="string"&&typeof r=="string"?this[n]===1?o>r?1:-1:o>r?-1:1:typeof o=="number"&&typeof r=="number"?this[n]===1?o-r:r-o:this[n]===1?o>r?1:-1:o>r?-1:1}return 0}var FilterCollectionNode={name:"Filter Collection",docs:"https://docs.noodl.net/nodes/data/array/array-filter",displayNodeName:"Array Filter",shortDesc:"Filter, sort and limit array",category:"Data",color:"data",initialize:function(){var e=this;this._internal.collectionChangedCallback=function(){e.isInputConnected("filter")!==!0&&e.scheduleFilter()},this._internal.enabled=!0,this._internal.filterSettings={}},getInspectInfo(){const e=this._internal.filteredCollection;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:e.items}]:{type:"text",value:"[Not executed yet]"}},inputs:{items:{type:"array",displayName:"Items",group:"General",set(e){this.bindCollection(e),this.isInputConnected("filter")===!1&&this.scheduleFilter()}},enabled:{type:"boolean",group:"General",displayName:"Enabled",default:!0,set:function(e){this._internal.enabled=e,this.isInputConnected("filter")===!1&&this.scheduleFilter()}},filter:{type:"signal",group:"Actions",displayName:"Filter",valueChangedToTrue:function(){this.scheduleFilter()}}},outputs:{items:{type:"array",displayName:"Items",group:"General",getter:function(){return this._internal.filteredCollection}},firstItemId:{type:"string",displayName:"First Item Id",group:"General",getter:function(){if(this._internal.filteredCollection!==void 0){const e=this._internal.filteredCollection.get(0);if(e!==void 0)return e.getId()}}},count:{type:"number",displayName:"Count",group:"General",getter:function(){return this._internal.filteredCollection?this._internal.filteredCollection.size():0}},modified:{group:"Events",type:"signal",displayName:"Filtered"}},prototypeExtensions:{unbindCurrentCollection:function(){var e=this._internal.collection;e&&(e.off("change",this._internal.collectionChangedCallback),this._internal.collection=void 0)},bindCollection:function(e){this.unbindCurrentCollection(),this._internal.collection=e,e&&e.on("change",this._internal.collectionChangedCallback)},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this.unbindCurrentCollection()},getFilter:function(){const e=this._internal.filterSettings,t=["case"];if(e.filterFilter){const o=e.filterFilter.split(",");var n={};return o.forEach(function(r){var s="$"+(e["filterFilterOp-"+r]||"eq");n[r]={},n[r][s]=e["filterFilterValue-"+r],t.forEach(a=>{var l=e["filterFilterOption-"+a+"-"+r];l&&(n[r]["$"+a]=l)})}),n}},getSort:function(){const e=this._internal.filterSettings;if(e.filterSort){const n=e.filterSort.split(",");var t={};return n.forEach(function(o){t[o]=e["filterSort-"+o]==="descending"?-1:1}),t}},getLimit:function(){const e=this._internal.filterSettings;if(e.filterEnableLimit)return e.filterLimit||10},getSkip:function(){const e=this._internal.filterSettings;if(e.filterEnableLimit)return e.filterSkip||0},scheduleFilter:function(){this.collectionChangedScheduled||(this.collectionChangedScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{if(this.collectionChangedScheduled=!1,!!this._internal.collection){var e=[].concat(this._internal.collection.items);if(this._internal.enabled){var t=this.getFilter();t&&(e=e.filter(s=>applyFilter(s.data,t)));var n=this.getSort();n&&e.sort(sorter.bind(n));var o=this.getSkip();o&&(e=e.slice(o,e.length));var r=this.getLimit();r&&(e=e.slice(0,r))}this._internal.filteredCollection=Collection.create(e),this.sendSignalOnOutput("modified"),this.flagOutputDirty("firstItemId"),this.flagOutputDirty("items"),this.flagOutputDirty("count")}}))},registerInputIfNeeded:function(e){this.hasInput(e)||this.registerInput(e,{set:userInputSetter$3.bind(this,e)})}}};function userInputSetter$3(e,t){this._internal.filterSettings[e]=t,this.isInputConnected("filter")===!1&&this.scheduleFilter()}function updatePorts$6(e,t,n,o){var r=[];r.push({type:"boolean",plug:"input",group:"Limit",name:"filterEnableLimit",displayName:"Use limit"}),t.filterEnableLimit&&(r.push({type:"number",default:10,plug:"input",group:"Limit",name:"filterLimit",displayName:"Limit"}),r.push({type:"number",default:0,plug:"input",group:"Limit",name:"filterSkip",displayName:"Skip"})),r.push({type:{name:"stringlist",allowEditOnly:!0},plug:"input",group:"Filter",name:"filterFilter",displayName:"Filter"}),r.push({type:{name:"stringlist",allowEditOnly:!0},plug:"input",group:"Sort",name:"filterSort",displayName:"Sort"});const s={string:[{value:"eq",label:"Equals"},{value:"neq",label:"Not Equals"},{value:"regex",label:"Matches RegEx"}],boolean:[{value:"eq",label:"Equals"},{value:"neq",label:"Not Equals"}],number:[{value:"eq",label:"Equals"},{value:"neq",label:"Not Equals"},{value:"lt",label:"Less than"},{value:"gt",label:"Greater than"},{value:"gte",label:"Greater than or equal"},{value:"lte",label:"Less than or equal"}]};if(t.filterFilter){var a=t.filterFilter.split(",");a.forEach(l=>{r.push({type:{name:"enum",enums:[{value:"string",label:"String"},{value:"number",label:"Number"},{value:"boolean",label:"Boolean"}]},default:"string",plug:"input",group:l+" filter",displayName:"Type",editorName:l+" filter | Type",name:"filterFilterType-"+l});var u=t["filterFilterType-"+l];r.push({type:{name:"enum",enums:s[u||"string"]},default:"eq",plug:"input",group:l+" filter",displayName:"Op",editorName:l+" filter| Op",name:"filterFilterOp-"+l}),t["filterFilterOp-"+l]==="regex"&&r.push({type:"boolean",default:!1,plug:"input",group:l+" filter",displayName:"Case sensitive",editorName:l+" filter| Case",name:"filterFilterOption-case-"+l}),r.push({type:u||"string",plug:"input",group:l+" filter",displayName:"Value",editorName:l+" Filter Value",name:"filterFilterValue-"+l})})}if(t.filterSort){var a=t.filterSort.split(",");a.forEach(u=>{r.push({type:{name:"enum",enums:[{value:"ascending",label:"Ascending"},{value:"descending",label:"Descending"}]},default:"ascending",plug:"input",group:u+" sort",displayName:"Sort",editorName:u+" sorting",name:"filterSort-"+u})})}n.sendDynamicPorts(e,r)}const FilterCollectionNode$1={node:FilterCollectionNode,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Filter Collection",function(n){updatePorts$6(n.id,n.parameters,e.editorConnection,t.getMetaData("dbCollections")),n.on("parameterUpdated",function(o){o.name.startsWith("filter")&&updatePorts$6(n.id,n.parameters,e.editorConnection,t.getMetaData("dbCollections"))}),t.on("metadataChanged.dbCollections",function(o){updatePorts$6(n.id,n.parameters,e.editorConnection)})})}};function CSVToArray(e,t){t=t||",";for(var n=new RegExp("(\\"+t+'|\\r?\\n|\\r|^)(?:"([^"]*(?:""[^"]*)*)"|([^"\\'+t+"\\r\\n]*))","gi"),o=[[]],r=null,s;(r=n.exec(e))&&s!==n.lastIndex;){s=n.lastIndex;var a=r[1];a.length&&a!==t&&o.push([]);var l;r[2]?l=r[2].replace(new RegExp('""',"g"),'"'):l=r[3],o[o.length-1].push(l)}return o}var CSVNode={name:"Static Data",docs:"https://docs.noodl.net/nodes/data/array/static-array",displayNodeName:"Static Array",shortDesc:"Store static data to populate a Collection with items.",category:"Data",color:"data",nodeDoubleClickAction:[{focusPort:"JSON"},{focusPort:"CSV"}],getInspectInfo(){if(this._internal.collection)return[{type:"value",value:this._internal.collection.items}]},dynamicports:[{name:"conditionalports/extended",condition:"type = csv OR type NOT SET",inputs:["csv"]},{name:"conditionalports/extended",condition:"type = json",inputs:["json"]}],inputs:{type:{type:{name:"enum",enums:[{label:"CSV",value:"csv"},{label:"JSON",value:"json"}],allowEditOnly:!0},displayName:"Type",group:"General",default:"csv",set:function(e){this._internal.type=e}},csv:{type:{name:"string",codeeditor:"text",allowEditOnly:!0},displayName:"CSV",group:"General",set:function(e){this._internal.csv=e,this.scheduleParseData()}},json:{type:{name:"string",codeeditor:"json",allowEditOnly:!0},displayName:"JSON",group:"General",set:function(e){this._internal.json=e,this.scheduleParseData()}}},outputs:{items:{type:"array",displayName:"Items",group:"General",getter:function(){return this._internal.collection}},count:{type:"number",displayName:"Count",group:"General",get(){return this._internal.collection?this._internal.collection.size():0}}},methods:{scheduleParseData:function(){var e=this._internal;e.hasScheduledParseData||(e.hasScheduledParseData=!0,this.scheduleAfterInputsHaveUpdated(this.parseData.bind(this)))},parseData:function(){var e=this._internal;if(e.hasScheduledParseData=!1,e.collection=Collection.get(),e.type===void 0||e.type==="csv"){for(var t=CSVToArray(e.csv),n=[],o=t[0],r=1;r<t.length;r++){for(var s=t[r],a={},l=0;l<o.length;l++)a[o[l]]=s[l];n.push(a)}e.collection.set(n),this.flagOutputDirty("items"),this.flagOutputDirty("count")}else if(e.type==="json"){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"json-parse-warning");try{const u=JSON.parse(e.json);e.collection.set(u),this.flagOutputDirty("items"),this.flagOutputDirty("count")}catch(u){this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"json-parse-warning",{showGlobally:!0,message:u.message})}}}}};const StaticData={node:CSVNode},defaultMapCode=`map({
172
+ `}function Range(e){const[t,n]=React.useState(e.value);React.useEffect(()=>{n(e.value)},[]),React.useEffect(()=>{n(e.value)},[e.value]);var o={...e.style};Layout.size(o,e),Layout.align(o,e);const r={id:e.id,min:e.min,max:e.max,step:e.step,style:o};Utils.updateStylesForClass("ndl-controls-range-"+e._nodeId,e,_styleTemplate);let s="ndl-controls-range-"+e._nodeId+" ndl-controls-range";return e.className&&(s=s+" "+e.className),React.createElement("input",{className:s,...Utils.controlEvents(e),type:"range",...r,value:t,disabled:!e.enabled,onChange:a=>{n(a.target.value),e.valueChanged&&e.valueChanged(a.target.value)}})}var RangeNode={name:"Range",docs:"https://docs.noodl.net/nodes/visual/range",allowChildren:!1,noodlNodeAsProp:!0,initialize(){this.props.sizeMode="explicit",this.props.id=this._internal.controlId="input-"+guid(),this.props.enabled=this._internal.enabled=!0,this._internal.value=this.props.value=this.props.min,this.props._nodeId=this.id,this.props.valueChanged=e=>{e=typeof e=="string"?parseFloat(e):e;const t=this._internal.value!==e;this._internal.value=e,this._updateValuePercent(e),t&&(this.flagOutputDirty("value"),this.sendSignalOnOutput("onChange"))},this.props.valueChanged(this.props.value),this.outputPropValues.hoverState=this.outputPropValues.focusState=this.outputPropValues.pressedState=!1},getReactComponent(){return Range},inputs:{enabled:{type:"boolean",displayName:"Enabled",group:"General",default:!0,set:function(e){e=!!e;const t=e!==this._internal.enabled;this.props.enabled=this._internal.enabled=e,t&&(this.forceUpdate(),this.flagOutputDirty("enabled"))}},value:{type:"string",displayName:"Value",group:"General",set:function(e){const t=e!==this._internal.value;this.props.value=this._internal.value=e,this._updateValuePercent(e),t&&(this.forceUpdate(),this.flagOutputDirty("value"))}}},outputs:{controlId:{type:"string",displayName:"Control Id",group:"General",getter:function(){return this._internal.controlId}},enabled:{type:"boolean",displayName:"Enabled",group:"States",getter:function(){return this._internal.enabled}},value:{type:"number",displayName:"Value",group:"States",getter:function(){return this._internal.value}},valuePercent:{type:"number",displayName:"Value Percent",group:"States",getter:function(){return this._internal.valuePercent}},onChange:{type:"signal",displayName:"Changed",group:"Events"}},inputProps:{min:{type:"number",displayName:"Min",group:"General",default:0},max:{type:"number",displayName:"Max",group:"General",default:100},step:{type:"number",displayName:"Step",group:"General",default:1},width:{index:11,group:"Dimensions",displayName:"Width",type:{name:"number",units:["%","px","vw"],defaultUnit:"%"},default:100},height:{index:12,group:"Dimensions",displayName:"Height",type:{name:"number",units:["%","px","vh"],defaultUnit:"%"},default:100},thumbWidth:{group:"Thumb Style",displayName:"Width",type:{name:"number",units:["px","vw","%"],defaultUnit:"px",allowEditOnly:!0},default:16},thumbHeight:{group:"Thumb Style",displayName:"Height",type:{name:"number",units:["px","vh","%"],defaultUnit:"px",allowEditOnly:!0},default:16},thumbRadius:{group:"Thumb Style",displayName:"Radius",type:{name:"number",units:["px","%"],defaultUnit:"px",allowEditOnly:!0},default:8},thumbColor:{group:"Thumb Style",displayName:"Color",type:{name:"color",allowEditOnly:!0},default:"#000000"},trackHeight:{group:"Track Style",displayName:"Height",type:{name:"number",units:["px","vh","%"],defaultUnit:"px",allowEditOnly:!0},default:6},trackColor:{group:"Track Style",displayName:"Color",type:{name:"color",allowEditOnly:!0},default:"#f0f0f0"}},inputCss:{backgroundColor:{index:201,displayName:"Background Color",group:"Style",type:"color"},borderRadius:{index:202,displayName:"Border Radius",group:"Style",type:{name:"number",units:["px"],defaultUnit:"px"},default:1,applyDefault:!1},borderStyle:{index:203,displayName:"Border Style",group:"Style",type:{name:"enum",enums:[{label:"None",value:"none"},{label:"Solid",value:"solid"},{label:"Dotted",value:"dotted"},{label:"Dashed",value:"dashed"}]},default:"none",applyDefault:!1},borderWidth:{index:204,displayName:"Border Width",group:"Style",type:{name:"number",units:["px"],defaultUnit:"px"},default:1,applyDefault:!1},borderColor:{index:205,displayName:"Border Color",group:"Style",type:"color",default:"#000000"}},outputProps:{},methods:{_updateValuePercent(e){const t=this.props.min,n=this.props.max,o=Math.floor((e-t)/(n-t)*100),r=this._internal.valuePercentChanged!==o;this._internal.valuePercent=o,r&&this.flagOutputDirty("valuePercent")}}};NodeSharedPortDefinitions.addAlignInputs(RangeNode),NodeSharedPortDefinitions.addTransformInputs(RangeNode),NodeSharedPortDefinitions.addMarginInputs(RangeNode),NodeSharedPortDefinitions.addSharedVisualInputs(RangeNode),Utils.addControlEventsAndStates(RangeNode),RangeNode=createNodeFromReactComponent(RangeNode);const RangeOld=RangeNode;function preventGlobalFocusChange(e){e.stopPropagation(),window.removeEventListener("click",preventGlobalFocusChange,!0)}class TextFieldComponent extends React.Component{constructor(t){super(t),this.state={value:t.startValue},this.ref=React.createRef()}setText(t){this.setState({value:t}),this.props.onTextChanged&&this.props.onTextChanged(t)}componentDidMount(){this.ref.current.noodlNode=this.props.noodlNode,this.setText(this.props.startValue)}render(){const t={...this.props.textStyle,...this.props.style};Layout.size(t,this.props),Layout.align(t,this.props),t.opacity===0&&(t.pointerEvents="none");const n=this.props,o={id:n.id,value:this.state.value,...Utils.controlEvents(n),disabled:!n.enabled,style:t,className:n.className,placeholder:n.placeholder,onChange:r=>this.onChange(r)};return this.props.type!=="textArea"?React.createElement("input",{ref:this.ref,type:this.props.type,...o,onKeyDown:r=>this.onKeyDown(r),onMouseDown:()=>window.addEventListener("click",preventGlobalFocusChange,!0)}):(o.style.resize="none",React.createElement("textarea",{ref:this.ref,...o,onKeyDown:r=>this.onKeyDown(r)}))}onKeyDown(t){(t.key==="Enter"||t.which===13)&&this.props.onEnter&&this.props.onEnter()}onChange(t){const n=t.target.value;this.setText(n)}focus(){this.ref.current&&this.ref.current.focus()}blur(){this.ref.current&&this.ref.current.blur()}}const TextInput={name:"Text Input",docs:"https://docs.noodl.net/nodes/visual/text-input",allowChildren:!1,noodlNodeAsProp:!0,getReactComponent(){return TextFieldComponent},defaultCss:{outline:"none",borderStyle:"solid",padding:0},initialize(){this.props.startValue="",this.props.id=this._internal.controlId="input-"+guid(),this.props.enabled=this._internal.enabled=!0,this.outputPropValues.hoverState=this.outputPropValues.focusState=this.outputPropValues.pressedState=!1},inputProps:{type:{displayName:"Type",group:"Text",index:19,type:{name:"enum",enums:[{label:"Text",value:"text"},{label:"Text Area",value:"textArea"},{label:"Email",value:"email"},{label:"Number",value:"number"},{label:"Password",value:"password"},{label:"URL",value:"url"}]},default:"text"},placeholder:{index:22,group:"Text",displayName:"Placeholder",default:"Type here...",type:{name:"string"}},boxShadowEnabled:{index:250,group:"Box Shadow",displayName:"Shadow Enabled",type:"boolean",default:!1},boxShadowOffsetX:{index:251,group:"Box Shadow",displayName:"Offset X",default:0,type:{name:"number",units:["px"],defaultUnit:"px"}},boxShadowOffsetY:{index:252,group:"Box Shadow",displayName:"Offset Y",default:0,type:{name:"number",units:["px"],defaultUnit:"px"}},boxShadowBlurRadius:{index:253,group:"Box Shadow",displayName:"Blur Radius",default:5,type:{name:"number",units:["px"],defaultUnit:"px"}},boxShadowSpreadRadius:{index:254,group:"Box Shadow",displayName:"Spread Radius",default:2,type:{name:"number",units:["px"],defaultUnit:"px"}},boxShadowInset:{index:255,group:"Box Shadow",displayName:"Inset",type:"boolean",default:!1},boxShadowColor:{index:256,group:"Box Shadow",displayName:"Shadow Color",type:"color",default:"rgba(0,0,0,0.2)"}},inputs:{enabled:{type:"boolean",displayName:"Enabled",group:"General",default:!0,set:function(e){e=!!e;const t=e!==this._internal.enabled;this.props.enabled=this._internal.enabled=e,t&&(this.forceUpdate(),this.flagOutputDirty("enabled"))}},set:{group:"Actions",displayName:"Set",type:"signal",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{this.setText(this._internal.text)})}},startValue:{index:18,displayName:"Text",type:"string",group:"Text",set(e){this._internal.text!==e&&(this._internal.text=e,this.isInputConnected("set")===!1&&this.setText(e))}},textStyle:{index:19,type:"textStyle",group:"Text",displayName:"Text Style",default:"None",set(e){this.props.textStyle=this.context.styles.getTextStyle(e),this.forceUpdate()}},fontFamily:{index:20,type:"font",group:"Text",displayName:"Font Family",set(e){if(e){let t=e;t.split(".").length>1&&(t=t.replace(/\.[^/.]+$/,""),t=t.split("/").pop()),this.setStyle({fontFamily:t})}else this.removeStyle(["fontFamily"]);this.props.textStyle&&this.forceUpdate()}},clear:{type:"signal",group:"Actions",displayName:"Clear",valueChangedToTrue(){this.setText("")}},focus:{type:"signal",group:"Actions",displayName:"Focus",valueChangedToTrue(){this.context.setNodeFocused(this,!0)}},blur:{type:"signal",group:"Actions",displayName:"Blur",valueChangedToTrue(){this.context.setNodeFocused(this,!1)}}},inputCss:{fontSize:{index:21,group:"Text",displayName:"Font Size",type:{name:"number",units:["px"],defaultUnit:"px"},onChange(){this.props.textStyle&&this.forceUpdate()}},color:{index:99,type:"color",displayName:"Font Color",group:"Style"},backgroundColor:{index:100,displayName:"Background Color",group:"Style",type:"color",default:"transparent"},borderColor:{index:101,displayName:"Border Color",group:"Style",type:"color",default:"black"},borderWidth:{index:102,displayName:"Border Width",group:"Style",type:{name:"number",units:["px"],defaultUnit:"px"},default:0}},outputs:{controlId:{type:"string",displayName:"Control Id",group:"General",getter:function(){return this._internal.controlId}},enabled:{type:"boolean",displayName:"Enabled",group:"States",getter:function(){return this._internal.enabled}}},outputProps:{onTextChanged:{group:"Value",displayName:"Text",type:"string"},onEnter:{group:"Events",displayName:"On Enter",type:"signal"}},dynamicports:[{condition:"boxShadowEnabled = true",inputs:["boxShadowOffsetX","boxShadowOffsetY","boxShadowInset","boxShadowBlurRadius","boxShadowSpreadRadius","boxShadowColor"]}],methods:{_focus(){this.innerReactComponentRef&&this.innerReactComponentRef.focus()},_blur(){this.innerReactComponentRef&&this.innerReactComponentRef.blur()},setText(e){this.props.startValue=e,this.innerReactComponentRef?this.innerReactComponentRef.setText(e):this.outputPropValues.onTextChanged!==e&&(this.outputPropValues.onTextChanged=e,this.flagOutputDirty("onTextChanged"))}}};NodeSharedPortDefinitions.addDimensions(TextInput,{defaultSizeMode:"contentSize",contentLabel:"Text"}),NodeSharedPortDefinitions.addAlignInputs(TextInput),NodeSharedPortDefinitions.addTransformInputs(TextInput),NodeSharedPortDefinitions.addPaddingInputs(TextInput),NodeSharedPortDefinitions.addMarginInputs(TextInput),NodeSharedPortDefinitions.addSharedVisualInputs(TextInput),Utils.addControlEventsAndStates(TextInput);const definition=createNodeFromReactComponent(TextInput);definition.setup=function(e,t){t.on("nodeAdded.Text Input",function(n){n.parameters.fontFamily&&n.parameters.fontFamily.split(".").length>1&&FontLoader.instance.loadFont(n.parameters.fontFamily),n.on("parameterUpdated",function(o){o.name==="fontFamily"&&o.value&&o.value.split(".").length>1&&FontLoader.instance.loadFont(o.value)})})};const Switch={name:"Switch",docs:"https://docs.noodl.net/nodes/logic/switch",category:"Logic",initialize(){this._internal.state=!1,this._internal.initialized=!1},getInspectInfo(){return this._internal.state},inputs:{on:{displayName:"On",group:"Change State",valueChangedToTrue(){this._internal.state!==!0&&(this._internal.state=!0,this.flagOutputDirty("state"),this.emitSignals())}},off:{displayName:"Off",group:"Change State",valueChangedToTrue(){this._internal.state!==!1&&(this._internal.state=!1,this.flagOutputDirty("state"),this.emitSignals())}},flip:{displayName:"Flip",group:"Change State",valueChangedToTrue(){this._internal.state=!this._internal.state,this.flagOutputDirty("state"),this.emitSignals()}},onFromStart:{type:"boolean",displayName:"State",group:"General",default:!1,set(e){this._internal.state=!!e,this.flagOutputDirty("state"),this.emitSignals()}}},outputs:{state:{type:"boolean",displayName:"Current State",getter(){return this._internal.state}},switched:{displayName:"Switched",type:"signal",group:"Signals"},switchedToOn:{displayName:"Switched To On",type:"signal",group:"Signals"},switchedToOff:{displayName:"Switched To Off",type:"signal",group:"Signals"}},prototypeExtensions:{emitSignals(){this._internal.state===!0?this.sendSignalOnOutput("switchedToOn"):this.sendSignalOnOutput("switchedToOff"),this.sendSignalOnOutput("switched")}}},Switch$1={node:Switch},Timer={name:"Timer",docs:"https://docs.noodl.net/nodes/utilities/delay",displayName:"Delay",category:"Utilities",nodeDoubleClickAction:{focusPort:"duration"},initialize:function(){var e=this;this._internal._animation=this.context.timerScheduler.createTimer({duration:0,onStart:function(){e.sendSignalOnOutput("timerStarted")},onFinish:function(){e.sendSignalOnOutput("timerFinished")}}),this.addDeleteListener(()=>{this._internal._animation.stop()})},getInspectInfo(){return this._internal._animation.isRunning()?Math.floor(this._internal._animation.durationLeft()/10)/100+" seconds":"Not running"},inputs:{start:{displayName:"Start",valueChangedToTrue:function(){this._internal._animation._isRunning===!1&&this._internal._animation.start()}},restart:{displayName:"Restart",valueChangedToTrue:function(){this._internal._animation.start()}},duration:{type:"number",displayName:"Duration",default:0,set:function(e){this._internal._animation.duration=e}},startDelay:{type:"number",displayName:"Start Delay",default:0,set:function(e){this._internal._animation.delay=e}},stop:{displayName:"Stop",valueChangedToTrue:function(){this._internal._animation.stop()}}},outputs:{timerStarted:{type:"signal",displayName:"Started"},timerFinished:{type:"signal",displayName:"Finished"}}},Timer$1={node:Timer},Color={node:createDefinition({name:"Color",docs:"https://docs.noodl.net/nodes/data/color",startValue:"#f1f2f4",nodeDoubleClickAction:{focusPort:"value"},type:{name:"color"},cast:function(e){return e}})},EventSender={name:"Event Sender",docs:"https://docs.noodl.net/nodes/events/send-event",displayNodeName:"Send Event",category:"Events",usePortAsLabel:"channelName",color:"component",exportDynamicPorts:!0,initialize:function(){this._internal.inputValues={},this._internal.channelName="",this._internal.propagation="global"},inputs:{sendEvent:{displayName:"Send",valueChangedToTrue:function(){var e=this;this.scheduleAfterInputsHaveUpdated(function(){e._internal.propagation==="global"?e.context.sendGlobalEventFromEventSender(e._internal.channelName,e._internal.inputValues):e.nodeScope.sendEventFromThisScope(e._internal.channelName,e._internal.inputValues,e._internal.propagation)})}},channelName:{type:{name:"string",allowEditOnly:!0,identifierOf:"EventChannelName",identifierDisplayName:"Event Channels"},default:"",group:"Settings",displayName:"Channel Name",set:function(e){this._internal.channelName=e,this._internal.inputValues._channelName=e}},propagation:{type:{name:"enum",enums:[{value:"global",label:"Global"},{value:"parent",label:"Parent"},{value:"children",label:"Children"},{value:"siblings",label:"Siblings"}]},default:"global",group:"Settings",displayName:"Send to",set:function(e){this._internal.propagation=e}},payload:{type:{name:"stringlist",allowEditOnly:!0},group:"Payload"}},prototypeExtensions:{registerInputIfNeeded:{value:function(e){if(!this.hasInput(e)){var t=this;this.registerInput(e,{set:function(n){t._internal.inputValues[e]=n}})}}}}};function updatePorts$a(e,t,n){var o=[],r=t.payload;if(r){r=r.split(",");for(const s of r)o.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input",group:"Payload",name:s,displayName:s})}n.sendDynamicPorts(e,o,{detectRenamed:{plug:"input"}})}const EventSender$1={node:EventSender,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Event Sender",function(n){updatePorts$a(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",function(o){updatePorts$a(n.id,n.parameters,e.editorConnection)})})}},EventReceiver={name:"Event Receiver",docs:"https://docs.noodl.net/nodes/events/receive-event",displayNodeName:"Receive Event",category:"Events",usePortAsLabel:"channelName",color:"component",initialize:function(){var e=this._internal;e.outputValues={},e.outputNames=[],e.eventReceived=!1,e._isEnabled=!0,e.channelName=""},inputs:{enabled:{displayName:"Enabled",type:"boolean",default:!0,set:function(e){this._internal._isEnabled=!!e}},consume:{displayName:"Consume",type:{name:"enum",enums:[{label:"Never",value:"never"},{label:"Always",value:"always"}]},default:"never",set:function(e){this._internal.consume=e}},channelName:{type:{name:"string",identifierOf:"EventChannelName"},displayName:"Channel",set:function(e){this._internal.onEventReceivedCallback&&(this.context.eventSenderEmitter.removeListener(this._internal.channelName,this._internal.onEventReceivedCallback),this._internal.onEventReceivedCallback=null),this._internal.channelName=e,this.registerListenersForChannel(e)}}},outputs:{eventReceived:{displayName:"Received",type:"signal"}},prototypeExtensions:{registerOutputIfNeeded:function(e){if(!this.hasOutput(e)){var t=this;this._internal.outputNames.push(e),this.registerOutput(e,{getter:function(){return t._internal.outputValues[e]}})}},handleEvent:function(e){if(this._internal._isEnabled!==!1){this.sendSignalOnOutput("eventReceived");for(var t in e)this.hasOutput(t)&&(this._internal.outputValues[t]=e[t],this.flagOutputDirty(t));return this._internal.consume==="always"}},onEventReceived:function(e){this.handleEvent(e)},_onNodeDeleted:function(){if(Node.prototype._onNodeDeleted.call(this),this._internal.onEventReceivedCallback){var e=this.context.eventSenderEmitter;e.removeListener(this._internal.channelName,this._internal.onEventReceivedCallback)}},registerListenersForChannel:function(e){var t=this.context.eventSenderEmitter;this._internal.onEventReceivedCallback=this.onEventReceived.bind(this),t.on(e,this._internal.onEventReceivedCallback);var n=this;this.context.eventEmitter.once("applicationDataReloaded",function(){n._internal.onEventReceivedCallback&&t.removeListener(e,n._internal.onEventReceivedCallback)})},getChannelName:function(){return this._internal.channelName}}},EventReceiver$1={node:EventReceiver,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){var r=o.parameters.channelName;function s(){var l=t.getNodesWithType("Event Sender"),u=l.filter(g=>g.parameters.channelName===r),d={};u.forEach(g=>{const b=g.parameters.payload?g.parameters.payload.split(","):[];for(let _ of b)d[_]=!0});var h=[];for(var f in d)h.push({name:f,type:"*",plug:"output",displayName:f});e.editorConnection.sendDynamicPorts(o.id,h,{detectRenamed:{plug:"output"}})}s(),o.on("parameterUpdated",function(l){l.name==="channelName"&&(r=l.value,s())});function a(l){l.on("inputPortAdded",function(u){s()}),l.on("inputPortRemoved",function(u){s()}),l.on("parameterUpdated",function(u){u.name==="channelName"&&s()})}t.getNodesWithType("Event Sender").forEach(a),t.on("nodeAdded.Event Sender",a),t.on("nodeRemoved.Event Sender",l=>{s()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.Event Receiver",o=>n(o)),t.getNodesWithType("Event Receiver").forEach(o=>n(o))})}},ScreenResolution={name:"Screen Resolution",docs:"https://docs.noodl.net/nodes/utilities/screen-resolution",category:"Utilities",initialize(){typeof window>"u"||(window.addEventListener("resize",()=>{this._viewportSizeChanged()}),this._viewportSizeChanged())},getInspectInfo(){return this._internal.width+" x "+this._internal.height},outputs:{width:{type:"number",displayName:"Width",get(){return this._internal.width}},height:{type:"number",displayName:"Height",get(){return this._internal.height}},aspectRatio:{type:"number",displayName:"Aspect Ratio",get(){return this._internal.width/this._internal.height}}},methods:{_viewportSizeChanged(){this._internal.width=window.innerWidth,this._internal.height=window.innerHeight,this.flagAllOutputsDirty()}}},ScreenResolution$1={node:ScreenResolution},defaultCode="";var Javascript={name:"Javascript2",docs:"https://docs.noodl.net/nodes/javascript/script",displayNodeName:"Script",category:"CustomCode",color:"javascript",nodeDoubleClickAction:{focusPort:"Code"},searchTags:["javascript"],exportDynamicPorts:!0,initialize:function(){var e=this._internal;e.inputValues={},e.outputValues={},e.outputProperties={},e.runScheduled=!1,e.setupScheduled=!1,e.runNextFrameScheduled=!1,e.isWaitingForExternalFileToLoad=!1,e.useExternalFile=!1,e.runFunction=void 0,e.destroyFunction=void 0,e.setupFunction=void 0,e.hasParsedCode=!1,e.changedInputs={},e.signalScheduled={},e.killed=!1,e.inputQueue=[];var t=this;e.userFunctionScope={createComponent(n){return n&&n.length>0&&n[0]!=="/"&&(n="/"+n),t.nodeScope.createNode(n,guid())},deleteComponent(n){t.nodeScope.deleteNode(n)},flagOutputDirty:function(n){if(!n)throw new Error("Output port name must be specified");t.flagOutputDirty(n)},runNextFrame:function(){e.runNextFrameScheduled||(e.runNextFrameScheduled=!0,t.context.scheduleNextFrame(function(){e.runNextFrameScheduled=!1,e.killed||scheduleRun.call(t)}))},sendSignalOnOutput:function(n){t.sendSignalOnOutput(n)}},e.onFrameStart=onFrameStart.bind(this)},dynamicports:[{condition:"useExternalFile = no OR useExternalFile NOT SET",inputs:["code"]},{condition:"useExternalFile = yes",inputs:["externalFile"]}],inputs:{scriptInputs:{type:{name:"proplist",allowEditOnly:!0},group:"Script Inputs",set:function(e){}},scriptOutputs:{type:{name:"proplist",allowEditOnly:!0},group:"Script Outputs",set:function(e){}},useExternalFile:{type:{name:"enum",enums:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],allowEditOnly:!0},default:"no",displayName:"Use External File",group:"Code",set:function(e){this._internal.isWaitingForExternalFileToLoad=e==="yes",this._internal.useExternalFile=e==="yes"}},code:{displayName:"Code",group:"Code",type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},default:defaultCode,set:function(e){if(e){var t=this;this.scheduleAfterInputsHaveUpdated(function(){if(this._internal.useExternalFile===!1){this._callDestroyFunction();var n=JavascriptNodeParser.createFromCode(e,{node:this});t._onCodeParsed(n)}})}}},externalFile:{displayName:"File Path",group:"Code",type:{name:"source",allowEditOnly:!0},set:function(e){if(this._internal.useExternalFile!==!1){var t=this;JavascriptNodeParser.createFromURL(e,function(n){t._internal.isWaitingForExternalFileToLoad=!1,t._onCodeParsed(n)},{node:this})}}}},prototypeExtensions:{_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.killed=!0,this._callDestroyFunction()},update:function(){this._internal.isWaitingForExternalFileToLoad===!0?this._dirty=!1:Node.prototype.update.call(this)},_onCodeParsed:function(e){const t=this.context.editorConnection;if(t)for(const n of["js-destroy-waring","js-run-waring","js-setup-waring"])t.clearWarning(this.nodeScope.componentOwner.name,this.id,n);if(!e.error){if(Object.keys(this.model.inputPorts).forEach(n=>{const o=this.model.inputPorts[n].type;(o==="color"||o.name==="color")&&(this._internal.inputValues[n]=void 0,this.hasInput(n)?this.getInput(n).type="color":this.registerInput(n,{type:"color",set:userInputSetter$4.bind(this,n)}))}),Object.keys(this.model.outputPorts).forEach(n=>{this.registerOutputIfNeeded(n)}),this._internal.setupFunction=e.setup,this._internal.runFunction=e.change,this._internal.destroyFunction=e.destroy,this._internal.definedObject=e.definedObject,this._internal.setupFunction&&scheduleSetup.call(this),this._internal.runFunction&&scheduleRun.call(this),this._internal.hasParsedCode=!0,this._internal.inputQueue){for(const{name:n,value:o}of this._internal.inputQueue)this.setInputValue(n,o);this._internal.inputQueue=void 0}e.apis.Node.Inputs=this._internal.inputValues,e.apis.Node.Outputs=this._internal.outputProperties}},registerInputIfNeeded:function(e){this.hasInput(e)||(this._internal.inputValues[e]=void 0,this.registerInput(e,{set:userInputSetter$4.bind(this,e)}))},registerOutputIfNeeded:function(e){if(this.hasOutput(e))return;var t=this;const n=_typename(this.model.outputPorts[e].type)==="signal";Object.defineProperty(this._internal.outputProperties,e,{set:function(o){n||(t._internal.outputValues[e]=o,t.flagOutputDirty(e))},get:function(){return n?()=>{t.hasOutput(e)&&t.sendSignalOnOutput(e)}:t._internal.outputValues[e]}}),this.registerOutput(e,{getter:userOutputGetter$3.bind(this,e)})},_callRunFunction:function(){var e=this._internal;if(!(!e.runFunction||e.killed))try{e.runFunction.call(e.userFunctionScope,e.inputValues,e.outputProperties,e.changedInputs)}catch(t){logJavaScriptNodeError(t),this.context.editorConnection&&this.context.isWarningTypeEnabled("javascriptExecution")&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"js-run-waring",{showGlobally:!0,message:"<strong>run</strong>: "+t.message})}},_callSignalFunction:function(e){var t=this._internal;if(!(!t.definedObject||t.killed)&&!(!t.definedObject[e]||typeof t.definedObject[e]!="function"))try{t.definedObject[e].call(t.userFunctionScope,t.inputValues,t.outputProperties)}catch(n){console.log("Error in JS node signal function code.",Object.getPrototypeOf(n).constructor.name+": "+n.message),this.context.editorConnection&&this.context.isWarningTypeEnabled("javascriptExecution")&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"js-run-waring",{showGlobally:!0,message:"<strong>run</strong>: "+n.message})}},_callDestroyFunction:function(){var e=this._internal;if(e.destroyFunction)try{e.destroyFunction.call(e.userFunctionScope,e.inputValues,e.outputProperties)}catch(t){console.log("Error in JS node destroy code.",Object.getPrototypeOf(t).constructor.name+": "+t.message),this.context.editorConnection&&this.context.isWarningTypeEnabled("javascriptExecution")&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"js-destroy-waring",{showGlobally:!0,message:"<strong>setup</strong>: "+t.message})}},_callSetupFunction:function(){var e=this._internal;if(!(!e.setupFunction||e.killed))try{e.setupFunction.call(e.userFunctionScope,e.inputValues,e.outputProperties)}catch(t){console.log("Error in JS node setup code.",Object.getPrototypeOf(t).constructor.name+": "+t.message),this.context.editorConnection&&this.context.isWarningTypeEnabled("javascriptExecution")&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"js-setup-waring",{showGlobally:!0,message:"<strong>setup</strong>: "+t.message})}}}};function scheduleSetup(){this._internal.setupScheduled||(this._internal.setupScheduled=!0,this.scheduleAfterInputsHaveUpdated(function(){this._internal.killed||(this._callSetupFunction(),this._internal.setupScheduled=!1)}))}function scheduleRun(){this._internal.runScheduled||this._internal.killed||(this._internal.runScheduled=!0,this.scheduleAfterInputsHaveUpdated(function(){this._internal.killed||(this._callRunFunction(),this._internal.changedInputs={},this._internal.runScheduled=!1)}))}function scheduleSignal(e){this._internal.signalScheduled[e]||this._internal.killed||(this._internal.signalScheduled[e]=!0,this.scheduleAfterInputsHaveUpdated(function(){this._internal.killed||(this._callSignalFunction(e),this._internal.signalScheduled[e]=!1)}))}function onFrameStart(){this._internal.runNextFrame=!1,scheduleRun.call(this)}function _typename(e){return typeof e=="object"?e.name:e}function userInputSetter$4(e,t){this._internal.hasParsedCode===!0?this.model.inputPorts[e]!==void 0&&_typename(this.model.inputPorts[e].type)==="signal"?this._internal.definedObject&&typeof this._internal.definedObject[e]=="function"&&t&&scheduleSignal.call(this,e):(this._internal.inputValues[e]=t,this._internal.changedInputs[e]=!0,scheduleRun.call(this)):this._internal.inputQueue.push({name:e,value:t})}function userOutputGetter$3(e){return this._internal.outputValues[e]}function _parseAndSourceJavascript(e,t,n){var o=t.editorConnection;if(!e.parameters)return;function r(){for(const u of["js-parse-waring","js-destroy-waring","js-run-waring","js-setup-waring"])o.clearWarning(e.component.name,e.id,u)}function s(u){u.error?o.sendWarning(e.component.name,e.id,"js-parse-waring",{showGlobally:!0,message:u.error}):r(),n(u.getPorts())}if(e.parameters.externalFile&&e.parameters.useExternalFile==="yes"){var a=e.parameters.externalFile;JavascriptNodeParser.createFromURL(a,s)}else if(e.parameters.code){var l=JavascriptNodeParser.createFromCode(e.parameters.code);s(l)}else r(),n([])}const JavaScript={node:Javascript,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[];const a=[{value:"string",label:"String"},{value:"boolean",label:"Boolean"},{value:"number",label:"Number"},{value:"object",label:"Object"},{value:"array",label:"Array"}],l=[{value:"string",label:"String"},{value:"boolean",label:"Boolean"},{value:"number",label:"Number"},{value:"object",label:"Object"},{value:"array",label:"Array"},{value:"signal",label:"Signal"}];o.parameters.scriptOutputs!==void 0&&o.parameters.scriptOutputs.length>0&&o.parameters.scriptOutputs.forEach(u=>{s.push({name:"outtype-"+u.label,displayName:"Type",plug:"input",type:{name:"enum",enums:l,allowEditOnly:!0},default:"string",parent:"scriptOutputs",parentItemId:u.id}),s.push({name:u.label,plug:"output",type:o.parameters["outtype-"+u.label]||"*",group:"Outputs"})}),o.parameters.scriptInputs!==void 0&&o.parameters.scriptInputs.length>0&&o.parameters.scriptInputs.forEach(u=>{s.push({name:"intype-"+u.label,displayName:"Type",plug:"input",type:{name:"enum",enums:a,allowEditOnly:!0},default:"string",parent:"scriptInputs",parentItemId:u.id}),s.push({name:u.label,plug:"input",type:o.parameters["intype-"+u.label]||"string",group:"Inputs"})}),_parseAndSourceJavascript(o,e,function(u){u.forEach(d=>{s.find(h=>h.name===d.name&&h.plug===d.plug)||s.push(d)}),e.editorConnection.sendDynamicPorts(o.id,s)})}r(),o.on("parameterUpdated",function(s){r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.Javascript2",function(o){n(o)});for(const o of t.getNodesWithType("Javascript2"))n(o)})}},NumberRemapperNode={name:"Number Remapper",docs:"https://docs.noodl.net/nodes/math/number-remapper",category:"Math",initialize:function(){var e=this._internal;e._currentInputValue=0,e._remappedValue=0,e._minInputValue=0,e._maxInputValue=0,e._minOutputValue=0,e._maxOutputValue=1,e._clampOutput=!0},getInspectInfo(){return this._internal._remappedValue},inputs:{inputValue:{group:"Value to Remap",type:{name:"number",allowConnectionOnly:!0},default:0,displayName:"Input Value",set:function(e){this._internal._currentInputValue=e,this._calculateNewOutputValue()}},minInputValue:{group:"Input Parameters",type:{name:"number"},default:0,displayName:"Input Minimum",set:function(e){this._internal._minInputValue=e,this._calculateNewOutputValue()}},maxInputValue:{group:"Input Parameters",type:{name:"number"},default:0,displayName:"Input Maximum",set:function(e){this._internal._maxInputValue=e,this._calculateNewOutputValue()}},minOutputValue:{group:"Output Parameters",type:{name:"number"},default:0,displayName:"Output Minimum",set:function(e){this._internal._minOutputValue=e,this._calculateNewOutputValue()}},maxOutputValue:{group:"Output Parameters",type:{name:"number"},default:1,displayName:"Output Maximum",set:function(e){this._internal._maxOutputValue=e,this._calculateNewOutputValue()}},clamp:{group:"Output Parameters",type:{name:"boolean",allowEditOnly:!0},default:!0,displayName:"Clamp Output",set:function(e){this._internal._clampOutput=!!e,this._calculateNewOutputValue()}}},outputs:{remappedValue:{type:"number",displayName:"Remapped Value",group:"Outputs",getter:function(){return this._internal._remappedValue}}},prototypeExtensions:{_calculateNewOutputValue:{value:function(){var e,t=this._internal;t._maxInputValue===t._minInputValue?e=0:e=(t._currentInputValue-t._minInputValue)/(t._maxInputValue-t._minInputValue),t._clampOutput&&(e=Math.max(0,Math.min(1,e))),t._remappedValue=t._minOutputValue+e*(t._maxOutputValue-t._minOutputValue),this.flagOutputDirty("remappedValue")}}}},NumberRemapper={node:NumberRemapperNode},ValueChangedNode={name:"Value Changed",docs:"https://docs.noodl.net/nodes/logic/value-changed",category:"Logic",initialize:function(){this._internal.lastValue=void 0,this._internal.changeCount=0},getInspectInfo(){return this._internal.changeCount?"Triggered "+this._internal.changeCount+(this._internal.changeCount===1?" time":" times"):"Not triggered"},inputs:{value:{type:"*",displayName:"Input",set:function(e){this._internal.lastValue!==e&&(this._internal.changeCount++,this.sendSignalOnOutput("valueChanged"),this._internal.lastValue=e)}}},outputs:{valueChanged:{type:"signal",displayName:"Value Changed"}}},ValueChanged={node:ValueChangedNode},defaultDuration$3=300,previousStates={},previousValues={};function setRGBA(e,t){if(t==="transparent"||!t){e[3]=0;return}const n=(t.length-1)/2;for(let o=0;o<n;++o){const r=1+o*2;e[o]=parseInt(t.substring(r,r+2),16)}}function componentToHex$1(e){var t=e.toString(16);return t.length==1?"0"+t:t}function rgbaToHex(e){return"#"+componentToHex$1(e[0])+componentToHex$1(e[1])+componentToHex$1(e[2])+componentToHex$1(e[3])}const StatesNode={name:"States",docs:"https://docs.noodl.net/nodes/utilities/logic/states",shortDesc:"Define states with values and this node can interpolate between these values when the state is changed.",category:"Animation",initialize:function(){var e=this,t=this._internal;t.useTransitions=!0,t.currentValues={},t.stateParameters={},t.stateParameterTypes={},t.startValues={},t.bezierEaseCurves={},t.transitionFuncs={},t.valuesAreInitialised=!1,t.animation=this.context.timerScheduler.createTimer({duration:defaultDuration$3,ease:EaseCurves.easeOut,onStart:function(){t.values;var n=t.startValues,o=t.stateParameters,r=t.stateParameterTypes,s="value-"+t.state+"-";this.targetValues={},this.startValues={},this.valueTypes={};for(var a in this.transitionCurves)r["type-"+a]==="number"||r["type-"+a]===void 0?(this.valueTypes[a]="number",this.startValues[a]=n[a],this.targetValues[a]=o[s+a]||0):r["type-"+a]==="color"&&(this.valueTypes[a]="color",this.startValues[a]=[0,0,0,255],setRGBA(this.startValues[a],e.context.styles.resolveColor(n[a]||"#000000")),this.targetValues[a]=[0,0,0,255],setRGBA(this.targetValues[a],e.context.styles.resolveColor(o[s+a]||"#000000")))},onRunning:function(n){var o=n*this.duration,r=t.currentValues,s=[0,0,0,255];for(var a in this.transitionCurves){var l=this.transitionCurves[a];if(o<l.delay)r[a]=this.startValues[a];else if(o>=l.delay+l.dur)r[a]=this.valueTypes[a]==="color"?rgbaToHex(this.targetValues[a]):this.targetValues[a];else{var u=t.transitionFuncs[a].get((o-l.delay)/l.dur);if(this.valueTypes[a]==="number")r[a]=EaseCurves.linear(Number(this.startValues[a]),Number(this.targetValues[a]),u);else if(this.valueTypes[a]==="color"){let d=this.startValues[a],h=this.targetValues[a];s[0]=Math.floor(EaseCurves.linear(d[0],h[0],u)),s[1]=Math.floor(EaseCurves.linear(d[1],h[1],u)),s[2]=Math.floor(EaseCurves.linear(d[2],h[2],u)),s[3]=Math.floor(EaseCurves.linear(d[3],h[3],u)),r[a]=rgbaToHex(s)}}e.flagOutputDirty(a)}},onFinish:function(){var n="reached-"+t.state;e.hasOutput(n)&&e.sendSignalOnOutput(n)}})},getInspectInfo(){return`Current state: ${this._internal.state}`},inputs:{states:{type:{name:"stringlist",allowEditOnly:!0},displayName:"States",group:"States",set:function(e){if(this._internal.states=e?e.split(","):[],this._internal.states.length>0){var t=this;t._internal.state||this.scheduleGoToState(t._internal.startState||t._internal.states[0])}}},values:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Values",group:"Values",set:function(e){var t=this._internal;t.values=e.split(",");for(var n in t.values)this.registerOutputIfNeeded(t.values[n])}},toggle:{group:"Go to state",displayName:"Toggle",valueChangedToTrue:function(){var e=this._internal;if(e.states){var t=e.states.indexOf(e.state),n=(t+1)%e.states.length;this.scheduleGoToState(e.states[n])}}},useTransitions:{type:"boolean",displayName:"Use Transitions",group:"General",default:!0,set:function(e){var t=this._internal;t.useTransitions=e}}},outputs:{currentState:{type:"string",displayName:"State",group:"Current State",getter:function(){return this._internal.state}},stateChanged:{type:"signal",displayName:"State Changed",group:"Current State"}},prototypeExtensions:{registerOutputIfNeeded:function(e){var t=this._internal;this.hasOutput(e)||this.registerOutput(e,{getter:function(){return t.currentValues[e]}})},registerInputIfNeeded:function(e){var t=this,n=this._internal;if(!this.hasInput(e)){if(e.indexOf("to-")===0){var o=e.substring(3);this.registerInput(e,{set:createSetter({valueChangedToTrue:function(){this.scheduleGoToState(o)}})})}else if(e==="startState")this.registerInput(e,{set:function(a){this._internal.startState=a,this.scheduleGoToState(a)}});else if(e==="currentState")this.registerInput(e,{set:this.scheduleGoToState.bind(this)});else if(e.indexOf("type-")===0)this.registerInput(e,{set:function(a){n.stateParameterTypes[e]=a}});else if(e.indexOf("value-")===0){var r=e.split("-"),o=r[1],s=r[2];this.registerInput(e,{set:function(l){n.stateParameters[e]=l,n.state===o&&(n.currentValues[s]=l,t.flagOutputDirty(s))}})}else if(e.search(/duration-/g)===0)this.registerInput(e,{set:function(a){n.stateParameters[e]=a}});else if(e.search(/transition/g)===0){var o=e.substring(11);this.registerInput(e,{set:function(l){n.stateParameters[e]=l}})}}},setCurrentState:function(e){this.scheduleGoToState(e)},jumpToState:function(e){var t=this._internal;if(t.states&&(e||(e=t.states[0]),t.state!==e)){t.animation.stop();var n="value-"+e+"-";for(var o in t.values){var r=t.values[o];t.currentValues[r]=t.stateParameters[n+r]||0,this.flagOutputDirty(r)}t.state=e,this.flagOutputDirty("currentState"),t.valuesAreInitialised&&this.sendSignalOnOutput("stateChanged"),t.valuesAreInitialised=!0,this.updateAtStatePorts()}},scheduleGoToState:function(e){var t=this;this._internal.goToState=e,!this.hasScheduledGoToState&&(this.hasScheduledGoToState=!0,this.scheduleAfterInputsHaveUpdated(function(){t.hasScheduledGoToState=!1,t.goToState(t._internal.goToState)}))},goToState:function(e){var t=this._internal;if(t.states&&(e||(e=t.states[0]),t.state!==e))if(!t.valuesAreInitialised)this.jumpToState(e);else{var n=0,o=0,r={};for(var s in t.values){var a=t.values[s];t.startValues[a]=t.currentValues[a];const h=t.stateParameterTypes["type-"+a];if(h==="boolean"){var l=t.stateParameters["value-"+e+"-"+a];t.currentValues[a]=l===void 0?!1:!!l,this.flagOutputDirty(a)}else if(h==="string"||h==="textStyle")t.currentValues[a]=t.stateParameters["value-"+e+"-"+a],this.flagOutputDirty(a);else{var u=t.stateParameters["transition-"+e+"-"+a];u||(u=t.stateParameters["transitiondef-"+e]||{curve:[0,0,.58,1],dur:300,delay:0}),u.dur===0&&u.delay===0||!t.useTransitions?(t.currentValues[a]=t.stateParameters["value-"+e+"-"+a],this.flagOutputDirty(a)):(t.transitionFuncs[a]=BezierEasing(u.curve),r[a]=u,n=Math.min(n,u.delay),o=Math.max(o,u.dur+u.delay))}}if((o>0||n>0)&&(t.animation.transitionCurves=r,t.animation.duration=o,t.animation.delay=n,t.animation.start()),t.state=e,this.flagOutputDirty("currentState"),this.sendSignalOnOutput("stateChanged"),this.updateAtStatePorts(),o==0&&n==0){var d="reached-"+t.state;this.hasOutput(d)&&this.sendSignalOnOutput(d)}}},updateAtStatePorts:function(){var e=this._internal,t=e.states;for(var n in t){var o=t[n],r="at-"+o;e.currentValues[r]=e.state===o,this.hasOutput(r)&&this.flagOutputDirty(r)}}}};function detectRename$1(e,t){if(!(!e||!t)&&e.length===t.length){for(var n={},o=0;o<e.length;o++){if(t.indexOf(e[o])===-1){if(n.before)return;n.before=e[o]}if(e.indexOf(t[o])===-1){if(n.after)return;n.after=t[o]}}return n.before&&n.after?n:void 0}}function updatePorts$9(e,t,n){var o=t.states,r=t.values,s=[];r=r?r.split(","):void 0;for(var a in r){var l=r[a];s.push({type:{name:t["type-"+l]||"number",allowConnectionsOnly:!0},plug:"output",group:"Values",name:l}),s.push({type:{name:"enum",enums:[{label:"Number",value:"number"},{label:"String",value:"string"},{label:"Boolean",value:"boolean"},{label:"Color",value:"color"},{label:"Text Style",value:"textStyle"}],allowEditOnly:!0},default:"number",plug:"input",group:"Types",displayName:l,name:"type-"+l})}o=o?o.split(","):void 0,o&&o.forEach(function(f){r&&r.forEach(function(g){s.push({plug:"input",type:t["type-"+g]||"number",group:f+" Values",name:"value-"+f+"-"+g,displayName:g,editorName:f+"|"+g})}),r&&t.useTransitions!==!1&&(s.push({plug:"input",type:"curve",displayName:"Default",default:{curve:[0,0,.58,1],dur:300,delay:0},group:f+" Transitions",name:"transitiondef-"+f}),r.forEach(function(g){(t["type-"+g]===void 0||t["type-"+g]==="number"||t["type-"+g]==="color")&&s.push({plug:"input",type:{name:"curve"},default:t["transitiondef-"+f]||{curve:[0,0,.58,1],dur:300,delay:0},group:f+" Transitions",name:"transition-"+f+"-"+g,displayName:g,editorName:"Transition "+f+"|"+g})})),s.push({plug:"input",type:{name:"signal",allowConnectionsOnly:!0},displayName:"To "+f,name:"to-"+f,group:"Go to state"}),s.push({plug:"output",type:"boolean",displayName:"At "+f,name:"at-"+f,group:"Current state"}),s.push({plug:"output",type:"signal",displayName:"Has Reached "+f,name:"reached-"+f,group:"Current state"})}),o&&s.push({plug:"input",type:{name:"enum",enums:o},group:"States",displayName:"State",name:"currentState",default:t.startState||o[0]});var u=detectRename$1(previousStates[e],o);previousStates[e]=o;var d=detectRename$1(previousValues[e],r);previousValues[e]=r;let h;u?(h={plug:"input",before:u.before,after:u.after,patterns:["transition-{{*}}","to-{{*}}","at-{{*}}","reached-{{*}}"]},r&&r.forEach(function(f){h.patterns.push("value-{{*}}-"+f)})):d&&(h=[{plug:"output",before:d.before,after:d.after,patterns:["{{*}}"]},{plug:"input",before:d.before,after:d.after,patterns:["type-{{*}}"]},{plug:"input",before:d.before,after:d.after,patterns:o?o.map(function(f){return"value-"+f+"-{{*}}"}):void 0}]),n.sendDynamicPorts(e,s,{renamed:h})}const States={node:StatesNode,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.States",function(n){n.parameters.states&&updatePorts$9(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",function(o){(o.name==="useTransitions"||o.name==="states"||o.name==="values"||o.name.startsWith("transition")||o.name.startsWith("type-"))&&updatePorts$9(n.id,n.parameters,e.editorConnection)})})}},ForEachActionsDefinition={name:"For Each Actions",docs:"https://docs.noodl.net/nodes/ui-controls/repeater-item",displayNodeName:"Repeater Item",category:"Data",color:"data",inputs:{removeCompleted:{type:{name:"boolean",allowConnectionsOnly:!0},displayName:"Remove Completed",group:"Events",valueChangedToTrue:function(){this._internal.removeCompletedCallback&&this._internal.removeCompletedCallback()}}},outputs:{added:{type:"signal",displayName:"Added",group:"Events"},tryRemove:{type:"signal",displayName:"Try Remove",group:"Events"},itemId:{type:"string",displayName:"Item Id",group:"General",get(){return this.getItemId()}}},prototypeExtensions:{getItemId(){const e=this.nodeScope.componentOwner._forEachModel;return e&&e.getId()},signalAdded:function(){this.sendSignalOnOutput("added")},tryRemove:function(e){this.getOutput("tryRemove").hasConnections()?(this._internal.removeCompletedCallback=e,this.sendSignalOnOutput("tryRemove")):this.scheduleAfterInputsHaveUpdated(function(){e()})},itemActionTriggered(e){this.scheduleAfterInputsHaveUpdated(()=>{const t=this.getItemId();this.nodeScope.componentOwner._forEachNode.signalItemAction(e,t,this._internal.actionParameters||{})})},setItemActionParameter(e){this._internal.actionParameters||(this._internal.actionParameters={}),this._internal.actionParameters[e]=e},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e.startsWith("itemAction-"))return this.registerInput(e,{set:createSetter({valueChangedToTrue:this.itemActionTriggered.bind(this,e)})});if(e.startsWith("itemActionParameter-"))return this.registerInput(e,{set:this.setItemActionParameter.bind(this,e)})}}}},ForEachActions={node:ForEachActionsDefinition,setup:function(e,t){!e.editorConnection||e.editorConnection.isRunningLocally()}};function clamp(e,t,n){return Math.max(e,Math.min(t,n))}function setRGB(e,t){for(var n=0;n<3;++n){var o=1+n*2;e[n]=parseInt(t.substring(o,o+2),16)}}function componentToHex(e){var t=e.toString(16);return t.length==1?"0"+t:t}function rgbToHex(e){return"#"+componentToHex(e[0])+componentToHex(e[1])+componentToHex(e[2])}let rgb0=[0,0,0],rgb1=[0,0,0],rgb2=[0,0,0];const ColorBlendNode={name:"Color Blend",docs:"https://docs.noodl.net/nodes/utilities/color-blend",shortDesc:"Given any number of input colors this node can interpolate between these and give the result color as output.",category:"Interpolation",getInspectInfo(){return[{type:"color",value:this._internal.resultColor}]},initialize(){const e=this._internal;e.resultColor="#000000",e.blendValue=0,e.colors=[]},numberedInputs:{color:{type:"color",displayPrefix:"Color",createSetter(e){return function(t){this._internal.colors[e]=t,this.updateColor()}}}},inputs:{blendValue:{type:"number",displayName:"Blend Value",default:0,set:function(e){this._internal.blendValue=e,this.updateColor()}}},outputs:{result:{type:"color",displayName:"Result",getter:function(){return this._internal.resultColor}}},methods:{updateColor(){var e=this._internal.colors;if(e.length===0)return;function t(s){return e[s]?e[s]:"#000000"}var n=clamp(0,e.length-1,this._internal.blendValue),o=Math.floor(n),r=n-o;r===0?this._internal.resultColor=t(o):(setRGB(rgb0,t(o)),setRGB(rgb1,t(o+1)),rgb2[0]=Math.floor(EaseCurves.linear(rgb0[0],rgb1[0],r)),rgb2[1]=Math.floor(EaseCurves.linear(rgb0[1],rgb1[1],r)),rgb2[2]=Math.floor(EaseCurves.linear(rgb0[2],rgb1[2],r)),this._internal.resultColor=rgbToHex(rgb2)),this.flagOutputDirty("result")}}},ColorBlend={node:ColorBlendNode},defaultDuration$2=300,AnimateToValue={name:"net.noodl.animatetovalue",docs:"https://docs.noodl.net/nodes/logic/animate-to-value",displayName:"Animate To Value",shortDesc:"This node can interpolate smooothely from the current value to a target value.",category:"Animation",initialize:function(){var e=this,t=this._internal;t.currentNumber=0,t.numberInitialized=!1,t.animationStarted=!1,t.setCurrentNumberEnabled=!1,t.overrideValue=0,t._animation=this.context.timerScheduler.createTimer({duration:defaultDuration$2,startValue:0,endValue:0,ease:EaseCurves.easeOut,onStart:function(){t.animationStarted=!0},onRunning:function(n){t.currentNumber=this.ease(this.startValue,this.endValue,n),e.flagOutputDirty("currentValue")},onFinish:function(){e.sendSignalOnOutput("atTargetValue")}})},getInspectInfo(){return this._internal.currentNumber},inputs:{targetValue:{type:{name:"number"},displayName:"Target Value",group:"Target Value",default:void 0,set:function(e){if(e===!0?e=1:e===!1&&(e=0),e=Number(e),!isNaN(e)){var t=this._internal;if(t.numberInitialized===!1){t.currentNumber=e,t.numberInitialized=!0,t._animation.endValue=e,this.flagOutputDirty("currentValue");return}else if(e===t._animation.endValue)return;t._animation.startValue=t.currentNumber,t._animation.endValue=e,t._animation.start()}}},duration:{type:"number",group:"Parameters",displayName:"Duration",default:defaultDuration$2,set:function(e){this._internal._animation.duration=e}},delay:{type:"number",group:"Parameters",displayName:"Delay",default:0,set:function(e){this._internal._animation.delay=e}},easingCurve:{type:{name:"enum",enums:[{value:"easeOut",label:"Ease Out"},{value:"easeIn",label:"Ease In"},{value:"linear",label:"Linear"},{value:"easeInOut",label:"Ease In Out"}]},default:"easeOut",displayName:"Easing Curve",group:"Parameters",set:function(e){this._internal._animation.ease=EaseCurves[e]}}},outputs:{currentValue:{type:"number",displayName:"Current Value",group:"Current State",getter:function(){return this._internal.currentNumber}},atTargetValue:{type:"signal",displayName:"At Target Value",group:"Signals"}}},AnimateToValue$1={node:AnimateToValue},ComponentObject={name:"net.noodl.ComponentObject",displayNodeName:"Component Object",category:"Component Utilities",color:"component",docs:"https://docs.noodl.net/nodes/component-utilities/component-object",initialize:function(){this._internal.inputValues={},this._internal.dirtyValues={},this._internal.onModelChangedCallback=t=>{this.isInputConnected("fetch")===!1&&(this.hasOutput("value-"+t.name)&&this.flagOutputDirty("value-"+t.name),this.hasOutput("changed-"+t.name)&&this.sendSignalOnOutput("changed-"+t.name),this.sendSignalOnOutput("changed"))};const e=Model.get("componentState"+this.nodeScope.componentOwner.getInstanceId());this._internal.model=e,e.on("change",this._internal.onModelChangedCallback)},getInspectInfo(){return{type:"value",value:this._internal.model.data}},inputs:{properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set(e){}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleFetch()}}},outputs:{changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"}},methods:{scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledStore=!1;for(var t in e.dirtyValues)e.model.set(t,e.inputValues[t],{resolve:!0});e.dirtyValues={}})}},scheduleFetch(){this.hasScheduledFetch||(this.hasScheduledFetch=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledFetch=!1,this.fetch()}))},fetch(){for(var e in this._internal.model.data)this.hasOutput("value-"+e)&&(this.flagOutputDirty("value-"+e),this.hasOutput("changed-"+e)&&this.sendSignalOnOutput("changed-"+e));this.sendSignalOnOutput("fetched")},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this._internal.model.off("change",this._internal.onModelChangedCallback)},registerOutputIfNeeded(e){if(this.hasOutput(e))return;const t=e.split("-"),n=t[t.length-1];this.registerOutput(e,{get(){return this._internal.model.get(n,{resolve:!0})}})},registerInputIfNeeded:function(e){if(!this.hasInput(e)&&e.startsWith("value-")){const t=e.substring(6);this.registerInput(e,{set(n){this._internal.inputValues[t]=n,this._internal.dirtyValues[t]=!0,this.scheduleStore()}})}}}};function updatePorts$8(e,t,n){const o=[];if(t.properties){var r=t.properties.split(",");for(var s in r){var a=r[s];o.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name:"value-"+a,displayName:a}),o.push({type:"signal",plug:"output",group:"Changed Events",displayName:a+" Changed",name:"changed-"+a})}}n.sendDynamicPorts(e,o,{detectRenamed:{plug:"input/output"}})}const ComponentObject$1={node:ComponentObject,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.net.noodl.ComponentObject",n=>{updatePorts$8(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",o=>{o.name==="properties"&&updatePorts$8(n.id,n.parameters,e.editorConnection)})})}},graphEventEmitter$1=new eventsExports.EventEmitter;graphEventEmitter$1.setMaxListeners(1e6);const ParentComponentObject={name:"net.noodl.ParentComponentObject",displayNodeName:"Parent Component Object",category:"Component Utilities",color:"component",docs:"https://docs.noodl.net/nodes/component-utilities/parent-component-object",initialize(){this._internal.inputValues={},this._internal.onModelChangedCallback=e=>{this.isInputConnected("fetch")===!1&&(this.hasOutput("value-"+e.name)&&this.flagOutputDirty("value-"+e.name),this.hasOutput("changed-"+e.name)&&this.sendSignalOnOutput("changed-"+e.name),this.sendSignalOnOutput("changed"))},this.onComponentStateNodesChanged=()=>{const e=this.findParentComponentStateModelId();this._internal.modelId!==e&&(this._internal.modelId=e,this.isInputConnected("fetch")===!1&&this.setModelId(this._internal.modelId))},graphEventEmitter$1.on("componentStateNodesChanged",this.onComponentStateNodesChanged),this.updateComponentState()},nodeScopeDidInitialize(){this._internal&&!this._internal.modelId&&this.context.scheduleAfterUpdate(()=>{this.updateComponentState()})},getInspectInfo(){if(!this._internal.model)return"No parent component state found";const t=[{type:"text",value:this._internal.parentComponentName}],n=this._internal.model.data;return t.concat(Object.keys(n).map(o=>({type:"text",value:o+": "+n[o]})))},inputs:{properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set(e){}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.setModelId(this._internal.modelId)}}},outputs:{changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"}},methods:{updateComponentState(){this._internal.modelId=this.findParentComponentStateModelId(),this.isInputConnected("fetch")===!1&&this.setModelId(this._internal.modelId)},findParentComponentStateModelId(){function e(n){let o;if(n.getRoots().length>0){const r=n.getRoots()[0];r.getVisualParentNode?r.getVisualParentNode()&&(o=r.getVisualParentNode().nodeScope.componentOwner):r.parentNodeScope&&(o=n.parentNodeScope.componentOwner)}else n.parentNodeScope&&(o=n.parentNodeScope.componentOwner);if(o&&o.nodeScope&&o.nodeScope.componentOwner!==n)return o.nodeScope.getNodesWithType("net.noodl.ComponentObject").length>0?o:e(o)}const t=e(this.nodeScope.componentOwner);if(t)return this._internal.parentComponentName=t.name,"componentState"+t.getInstanceId()},setModelId(e){if(this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback),this._internal.model=void 0,!e)return;const t=Model.get(e);this._internal.model=t,t.on("change",this._internal.onModelChangedCallback);for(var n in t.data)this.hasOutput("value-"+n)&&this.flagOutputDirty("value-"+n),this.hasOutput("changed-"+n)&&this.sendSignalOnOutput("changed-"+n);this.sendSignalOnOutput("changed"),this.sendSignalOnOutput("fetched")},scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{if(this.hasScheduledStore=!1,!!e.model)for(var t in e.inputValues)e.model.set(t,e.inputValues[t],{resolve:!0})})}},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),graphEventEmitter$1.off("componentStateNodesChanged",this.onComponentStateNodesChanged),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},registerOutputIfNeeded(e){if(this.hasOutput(e))return;const t=e.substring(6);this.registerOutput(e,{get(){if(this._internal.model)return this._internal.model.get(t,{resolve:!0})}})},registerInputIfNeeded:function(e){if(!this.hasInput(e)&&e.startsWith("value-")){const t=e.substring(6);this.registerInput(e,{set(n){this._internal.inputValues[t]=n,this.scheduleStore()}})}}}};function updatePorts$7(e,t,n){const o=[];var r=t.properties&&t.properties.split(",");for(var s in r){var a=r[s];o.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name:"value-"+a,displayName:a}),o.push({type:"signal",plug:"output",group:"Changed Events",displayName:a+" Changed",name:"changed-"+a})}n.sendDynamicPorts(e,o,{detectRenamed:{plug:"input/output"}})}const ParentComponentObject$1={node:ParentComponentObject,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||(t.on("nodeAdded.net.noodl.ParentComponentObject",n=>{updatePorts$7(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",o=>{updatePorts$7(n.id,n.parameters,e.editorConnection)})}),t.on("nodeAdded.net.noodl.ComponentObject",n=>{setTimeout(()=>{graphEventEmitter$1.emit("componentStateNodesChanged")},0)}),t.on("nodeRemoved.net.noodl.ComponentObject",n=>{setTimeout(()=>{graphEventEmitter$1.emit("componentStateNodesChanged")})}))}};function extendSetComponentObjectProperties(e){const t={name:e.name,displayNodeName:e.displayName,category:"Component Utilities",color:"component",docs:e.docs,initialize:function(){this._internal.inputValues={}},inputs:{properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set(o){}},store:{type:"signal",group:"Actions",displayName:"Do",valueChangedToTrue(){this.scheduleStore()}}},outputs:{stored:{type:"signal",group:"Events",displayName:"Done"}},methods:{getComponentObjectId:e.getComponentObjectId,scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var o=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{const r=Model.get(this.getComponentObjectId());this.hasScheduledStore=!1;const a=(this.model.parameters.properties||"").split(","),l=Object.keys(o.inputValues).filter(u=>a.indexOf(u)!==-1);for(const u of l)r.set(u,o.inputValues[u],{resolve:!0});this.sendSignalOnOutput("stored")})}},registerInputIfNeeded:function(o){if(!this.hasInput(o))if(o.startsWith("prop-")){const r=o.substring(5);this.registerInput(o,{set(s){this._internal.inputValues[r]=s}})}else o.startsWith("type-")&&this.registerInput(o,{set(r){}})}}};function n(o,r,s){var a=[];const l=[{label:"String",value:"string"},{label:"Boolean",value:"boolean"},{label:"Number",value:"number"},{label:"Date",value:"date"},{label:"Array",value:"array"},{label:"Object",value:"object"},{label:"Any",value:"*"}];var u=r.properties;if(u){u=u?u.split(","):void 0;for(var d in u){var h=u[d];a.push({type:{name:r["type-"+h]===void 0?"*":r["type-"+h]},plug:"input",group:"Property Values",displayName:h,name:"prop-"+h}),a.push({type:{name:"enum",enums:l,allowEditOnly:!0},plug:"input",group:"Property Types",displayName:h,default:"*",name:"type-"+h})}}s.sendDynamicPorts(o,a,{detectRenamed:{plug:"input"}})}return{node:t,setup:function(o,r){!o.editorConnection||!o.editorConnection.isRunningLocally()||r.on("nodeAdded."+e.name,s=>{n(s.id,s.parameters,o.editorConnection),s.on("parameterUpdated",a=>{(a.name==="properties"||a.name.startsWith("type-"))&&n(s.id,s.parameters,o.editorConnection)})})}}}const Base={extendSetComponentObjectProperties},SetComponentObjectProperties=Base.extendSetComponentObjectProperties({name:"net.noodl.SetComponentObjectProperties",displayName:"Set Component Object Properties",docs:"https://docs.noodl.net/nodes/component-utilities/set-component-object-properties",getComponentObjectId:function(){return"componentState"+this.nodeScope.componentOwner.getInstanceId()}}),SetParentComponentObjectProperties=Base.extendSetComponentObjectProperties({name:"net.noodl.SetParentComponentObjectProperties",displayName:"Set Parent Component Object Properties",docs:"https://docs.noodl.net/nodes/component-utilities/set-parent-component-object-properties",getComponentObjectId:function(){function e(n){let o;if(n.getRoots().length>0){const r=n.getRoots()[0];r.getVisualParentNode?r.getVisualParentNode()&&(o=r.getVisualParentNode().nodeScope.componentOwner):r.parentNodeScope&&(o=n.parentNodeScope.componentOwner)}else n.parentNodeScope&&(o=n.parentNodeScope.componentOwner);if(o&&o.nodeScope&&o.nodeScope.componentOwner!==n)return o.nodeScope.getNodesWithType("net.noodl.ComponentObject").length>0?o:e(o)}const t=e(this.nodeScope.componentOwner);if(t)return this._internal.parentComponentName=t.name,"componentState"+t.getInstanceId()}}),VariableNodeDefinition$1={name:"Variable2",displayNodeName:"Variable",docs:"https://docs.noodl.net/nodes/data/variable/variable-node",category:"Data",usePortAsLabel:"name",color:"data",initialize:function(){var e=this,t=this._internal;this._internal.onModelChangedCallback=function(n){!e.isInputConnected("fetch")&&n.name===t.name&&(e.sendSignalOnOutput("changed"),e.flagOutputDirty("value"))},t.variablesModel=Model.get("--ndl--global-variables"),t.variablesModel.on("change",this._internal.onModelChangedCallback)},getInspectInfo(){return this._internal.name?this._internal.variablesModel.get(this._internal.name):"[No value set]"},outputs:{name:{type:"string",displayName:"Name",group:"General",getter:function(){return this._internal.name}},changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"},value:{type:"*",displayName:"Value",group:"General",getter:function(){var e=this._internal;if(e.name)return e.variablesModel.get(e.name)}}},inputs:{name:{type:{name:"string",identifierOf:"VariableName",identifierDisplayName:"Variable names"},displayName:"Name",group:"General",set:function(e){this.isInputConnected("fetch")===!1?this.setVariableName(e):(this._internal.name=e,this.flagOutputDirty("name"))}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.setVariableName(this._internal.name)}},value:{type:"*",displayName:"Value",group:"General",set:function(e){this._internal.value=e,this.scheduleStore()}}},prototypeExtensions:{scheduleStore:function(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(function(){this.hasScheduledStore=!1,e.variablesModel.set(e.name,e.value)})}},setVariableName:function(e){this._internal.name=e,this.flagOutputDirty("name"),this.flagOutputDirty("value"),this.sendSignalOnOutput("fetched")},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.variablesModel.off("change",this._internal.onModelChangedCallback)}}},VariableNode2={node:VariableNodeDefinition$1},SetVariableNodeDefinition={name:"Set Variable",docs:"https://docs.noodl.net/nodes/data/variable/set-variable",category:"Data",usePortAsLabel:"name",color:"data",initialize:function(){const e=this._internal;e.variablesModel=Model.get("--ndl--global-variables")},getInspectInfo(){return this._internal.name?this._internal.variablesModel.get(this._internal.name):"[No value set]"},outputs:{done:{type:"signal",displayName:"Done",group:"Events"}},inputs:{name:{type:{name:"string",identifierOf:"VariableName",identifierDisplayName:"Variable names"},displayName:"Name",group:"General",set:function(e){this._internal.name=e}},setWith:{type:{name:"enum",enums:[{label:"String",value:"string"},{label:"Boolean",value:"boolean"},{label:"Number",value:"number"},{label:"Empty string",value:"emptyString"},{label:"Date",value:"date"},{label:"Object",value:"object"},{label:"Array",value:"array"},{label:"Any",value:"*"}],allowEditOnly:!0},displayName:"Set as",default:"*",group:"General",set:function(e){this._internal.setWith=e}},do:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleStore()}}},methods:{setValue:function(e){this._internal.value=e},scheduleStore:function(){if(this.hasScheduledStore)return;this.hasScheduledStore=!0;const e=this._internal;this.scheduleAfterInputsHaveUpdated(function(){this.hasScheduledStore=!1;let t=e.setWith==="emptyString"?"":e.value;e.setWith==="object"&&typeof t=="string"&&(t=Model.get(t)),e.setWith==="array"&&typeof t=="string"&&(t=Collection.get(t)),e.setWith==="boolean"&&(t=!!t),e.variablesModel.set(e.name,t,{forceChange:!0}),this.sendSignalOnOutput("done")})},registerInputIfNeeded:function(e){this.hasInput(e)||e==="value"&&this.registerInput(e,{set:this.setValue.bind(this)})}}},SetVariableNode={node:SetVariableNodeDefinition,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Set Variable",function(n){function o(){var r=[];n.parameters.setWith==="emptyString"||r.push({type:n.parameters.setWith!==void 0?n.parameters.setWith:"*",plug:"input",group:"General",name:"value",displayName:"Value"}),e.editorConnection.sendDynamicPorts(n.id,r)}o(),n.on("parameterUpdated",function(r){o()})})}};var CollectionNode$2={name:"Collection2",docs:"https://docs.noodl.net/nodes/data/array/array-node",displayNodeName:"Array",shortDesc:"A collection of models, mainly used together with a For Each Node.",category:"Data",usePortAsLabel:"collectionId",color:"data",initialize:function(){var e=this,t=!1;this._internal.collectionChangedCallback=function(){e.isInputConnected("fetch")!==!0&&(t||(t=!0,e.scheduleAfterInputsHaveUpdated(function(){e.sendSignalOnOutput("changed"),e.flagOutputDirty("firstItemId"),e.flagOutputDirty("count"),t=!1})))},this._internal.sourceCollectionChangedCallback=function(){e.isInputConnected("store")!==!0&&e.scheduleCopyItems()}},getInspectInfo(){const e=this._internal.collection;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:e.items}]:{type:"text",value:"[No Array]"}},inputs:{collectionId:{type:{name:"string",identifierOf:"CollectionName",identifierDisplayName:"Array Ids"},displayName:"Id",group:"General",set:function(e){e instanceof Collection&&(e=e.getId()),this._internal.collectionId=e,this.isInputConnected("fetch")===!1?this.setCollectionID(e):this.flagOutputDirty("id")}},items:{type:"array",group:"General",displayName:"Items",set:function(e){var t=this;e!==void 0&&e!==this._internal.collection&&(this._internal.pendingSourceCollection=e,this.isInputConnected("store")===!1&&this.scheduleAfterInputsHaveUpdated(function(){t.setSourceCollection(e)}))}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.scheduleSetCollection()}}},outputs:{id:{type:"string",displayName:"Id",group:"General",getter:function(){return this._internal.collection?this._internal.collection.getId():this._internal.collectionId}},items:{type:"array",displayName:"Items",group:"General",getter:function(){return this._internal.collection}},firstItemId:{type:"string",displayName:"First Item Id",group:"General",getter:function(){if(this._internal.collection){var e=this._internal.collection.get(0);if(e!==void 0)return e.getId()}}},count:{type:"number",displayName:"Count",group:"General",getter:function(){return this._internal.collection?this._internal.collection.size():0}},changed:{group:"Events",type:"signal",displayName:"Changed"},fetched:{group:"Events",type:"signal",displayName:"Fetched"}},prototypeExtensions:{setCollectionID:function(e){this.setCollection(Collection.get(e))},setCollection:function(e){this._internal.collection&&this._internal.collection.off("change",this._internal.collectionChangedCallback),this._internal.collection=e,this.flagOutputDirty("id"),e.on("change",this._internal.collectionChangedCallback),this.flagOutputDirty("items"),this.flagOutputDirty("firstItemId"),this.flagOutputDirty("count")},setSourceCollection:function(e){var t=this._internal;t.sourceCollection&&t.sourceCollection instanceof Collection&&t.sourceCollection.off("change",t.sourceCollectionChangedCallback),t.sourceCollection=e,t.sourceCollection instanceof Collection&&t.sourceCollection.on("change",t.sourceCollectionChangedCallback),this._copySourceItems()},scheduleSetCollection:function(){var e=this;this.hasScheduledSetCollection||(this.hasScheduledSetCollection=!0,this.scheduleAfterInputsHaveUpdated(function(){e.hasScheduledSetCollection=!1,e.setCollectionID(e._internal.collectionId),e.sendSignalOnOutput("fetched")}))},scheduleStore:function(){var e=this;if(!this.hasScheduledStore){this.hasScheduledStore=!0;var t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){e.hasScheduledStore=!1,e.setSourceCollection(t.pendingSourceCollection)})}},_copySourceItems:function(){var e=this._internal;e.collection===void 0&&this.isInputConnected("fetch")===!1&&this.setCollection(Collection.get()),e.collection&&e.collection.set(e.sourceCollection)},scheduleCopyItems:function(){var e=this;this._internal,!this.hasScheduledCopyItems&&(this.hasScheduledCopyItems=!0,this.scheduleAfterInputsHaveUpdated(function(){e.hasScheduledCopyItems=!1,e._copySourceItems()}))},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.collection&&this._internal.collection.off("change",this._internal.collectionChangedCallback)}}};const CollectionNode2={node:CollectionNode$2};var CollectionInsertNode={name:"CollectionInsert",docs:"https://docs.noodl.net/nodes/data/array/insert-into-array",displayNodeName:"Insert Object Into Array",shortDesc:"A collection of models, mainly used together with a For Each Node.",category:"Data",usePortAsLabel:"collectionId",color:"data",initialize:function(){},inputs:{collectionId:{type:{name:"string",identifierOf:"CollectionName",identifierDisplayName:"Array Ids"},displayName:"Array Id",group:"General",set:function(e){e instanceof Collection&&(e=e.getId()),this.setCollectionID(e)}},modifyId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Object Id",group:"Modify",set:function(e){this._internal.modifyId=e}},add:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){var e=this,t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){if(this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"insert-warning"),t.modifyId===void 0){this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"insert-warning",{showGlobally:!0,message:"No Object Id specified"});return}if(t.collection===void 0){this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"insert-warning",{showGlobally:!0,message:"No Array Id specified"});return}var n=Model.get(t.modifyId);t.collection.add(n),e.sendSignalOnOutput("modified")})}}},outputs:{modified:{group:"Events",type:"signal",displayName:"Done"}},prototypeExtensions:{setCollectionID:function(e){this.setCollection(Collection.get(e))},setCollection:function(e){this._internal.collection=e}}};const CollectionNodeInsert={node:CollectionInsertNode};var CollectionRemoveNode={name:"CollectionRemove",docs:"https://docs.noodl.net/nodes/data/array/remove-from-array",displayNodeName:"Remove Object From Array",shortDesc:"A collection of models, mainly used together with a For Each Node.",category:"Data",usePortAsLabel:"collectionId",color:"data",initialize:function(){},inputs:{collectionId:{type:{name:"string",identifierOf:"CollectionName",identifierDisplayName:"Array Ids"},displayName:"Array Id",group:"General",set:function(e){e instanceof Collection&&(e=e.getId()),this.setCollectionID(e)}},modifyId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Object Id",group:"Modify",set:function(e){this._internal.modifyId=e}},remove:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){var e=this,t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){if(t.modifyId!==void 0&&t.collection!==void 0){var n=Model.get(t.modifyId);t.collection.remove(n),e.sendSignalOnOutput("modified")}})}}},outputs:{modified:{group:"Events",type:"signal",displayName:"Done"}},prototypeExtensions:{setCollectionID:function(e){this.setCollection(Collection.get(e))},setCollection:function(e){this._internal.collection=e}}};const CollectionNodeRemove={node:CollectionRemoveNode},CollectionClearNode={name:"CollectionClear",docs:"https://docs.noodl.net/nodes/data/array/clear-array",displayNodeName:"Clear Array",category:"Data",usePortAsLabel:"collectionId",color:"data",inputs:{collectionId:{type:{name:"string",identifierOf:"CollectionName",identifierDisplayName:"Array Ids"},displayName:"Array Id",group:"General",set:function(e){e instanceof Collection&&(e=e.getId()),this.setCollectionID(e)}},clear:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{this._internal.collection.set([]),this.sendSignalOnOutput("modified")})}}},outputs:{modified:{group:"Events",type:"signal",displayName:"Done"}},methods:{setCollectionID:function(e){this.setCollection(Collection.get(e))},setCollection:function(e){this._internal.collection=e}}},CollectionNodeClear={node:CollectionClearNode};var CollectionNewNode={name:"CollectionNew",docs:"https://docs.noodl.net/nodes/data/array/create-new-array",displayNodeName:"Create New Array",shortDesc:"A collection of models, mainly used together with a For Each Node.",category:"Data",color:"data",initialize:function(){},inputs:{new:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleNew()}},items:{type:"array",group:"General",displayName:"Items",set:function(e){this._internal.sourceCollection=e}}},outputs:{id:{type:"string",displayName:"Id",group:"General",getter:function(){return this._internal.collection?this._internal.collection.getId():this._internal.collectionId}},created:{group:"Events",type:"signal",displayName:"Done"}},prototypeExtensions:{setCollectionID:function(e){this.setCollection(Collection.get(e))},setCollection:function(e){this._internal.collection=e,this.flagOutputDirty("id")},scheduleNew:function(){var e=this;this.hasScheduledNew||(this.hasScheduledNew=!0,this.scheduleAfterInputsHaveUpdated(function(){e.hasScheduledNew=!1;const t=Collection.get();this._internal.sourceCollection!==void 0&&t.set(this._internal.sourceCollection),e.setCollection(t),e.sendSignalOnOutput("created")}))}}};const CollectionNodeNew={node:CollectionNewNode};function applyFilter(e,t){for(var n in t){var o=t[n];if(o.$neq!==void 0){if(e[n]==o.$neq)return!1}else{if(e[n]===void 0)return!1;if(o.$eq!==void 0&&e[n]!=o.$eq)return!1;if(o.$gt!==void 0&&!(e[n]>o.$gt))return!1;if(o.$lt!==void 0&&!(e[n]<o.$lt))return!1;if(o.$gte!==void 0&&!(e[n]>=o.$gte))return!1;if(o.$lte!==void 0&&!(e[n]<=o.$lte))return!1;if(o.$regex!==void 0){var r=e[n]+"",s=new RegExp(o.$regex,o.$case!==!0?"i":void 0);if(!s.test(r))return!1}}}return!0}function sorter(e,t){e instanceof Model&&(e=e.data),t instanceof Model&&(t=t.data);for(var n in this){var o=e[n],r=t[n];if(o!==r)return typeof o=="string"&&typeof r=="string"?this[n]===1?o>r?1:-1:o>r?-1:1:typeof o=="number"&&typeof r=="number"?this[n]===1?o-r:r-o:this[n]===1?o>r?1:-1:o>r?-1:1}return 0}var FilterCollectionNode={name:"Filter Collection",docs:"https://docs.noodl.net/nodes/data/array/array-filter",displayNodeName:"Array Filter",shortDesc:"Filter, sort and limit array",category:"Data",color:"data",initialize:function(){var e=this;this._internal.collectionChangedCallback=function(){e.isInputConnected("filter")!==!0&&e.scheduleFilter()},this._internal.enabled=!0,this._internal.filterSettings={}},getInspectInfo(){const e=this._internal.filteredCollection;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:e.items}]:{type:"text",value:"[Not executed yet]"}},inputs:{items:{type:"array",displayName:"Items",group:"General",set(e){this.bindCollection(e),this.isInputConnected("filter")===!1&&this.scheduleFilter()}},enabled:{type:"boolean",group:"General",displayName:"Enabled",default:!0,set:function(e){this._internal.enabled=e,this.isInputConnected("filter")===!1&&this.scheduleFilter()}},filter:{type:"signal",group:"Actions",displayName:"Filter",valueChangedToTrue:function(){this.scheduleFilter()}}},outputs:{items:{type:"array",displayName:"Items",group:"General",getter:function(){return this._internal.filteredCollection}},firstItemId:{type:"string",displayName:"First Item Id",group:"General",getter:function(){if(this._internal.filteredCollection!==void 0){const e=this._internal.filteredCollection.get(0);if(e!==void 0)return e.getId()}}},count:{type:"number",displayName:"Count",group:"General",getter:function(){return this._internal.filteredCollection?this._internal.filteredCollection.size():0}},modified:{group:"Events",type:"signal",displayName:"Filtered"}},prototypeExtensions:{unbindCurrentCollection:function(){var e=this._internal.collection;e&&(e.off("change",this._internal.collectionChangedCallback),this._internal.collection=void 0)},bindCollection:function(e){this.unbindCurrentCollection(),this._internal.collection=e,e&&e.on("change",this._internal.collectionChangedCallback)},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this.unbindCurrentCollection()},getFilter:function(){const e=this._internal.filterSettings,t=["case"];if(e.filterFilter){const o=e.filterFilter.split(",");var n={};return o.forEach(function(r){var s="$"+(e["filterFilterOp-"+r]||"eq");n[r]={},n[r][s]=e["filterFilterValue-"+r],t.forEach(a=>{var l=e["filterFilterOption-"+a+"-"+r];l&&(n[r]["$"+a]=l)})}),n}},getSort:function(){const e=this._internal.filterSettings;if(e.filterSort){const n=e.filterSort.split(",");var t={};return n.forEach(function(o){t[o]=e["filterSort-"+o]==="descending"?-1:1}),t}},getLimit:function(){const e=this._internal.filterSettings;if(e.filterEnableLimit)return e.filterLimit||10},getSkip:function(){const e=this._internal.filterSettings;if(e.filterEnableLimit)return e.filterSkip||0},scheduleFilter:function(){this.collectionChangedScheduled||(this.collectionChangedScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{if(this.collectionChangedScheduled=!1,!!this._internal.collection){var e=[].concat(this._internal.collection.items);if(this._internal.enabled){var t=this.getFilter();t&&(e=e.filter(s=>applyFilter(s.data,t)));var n=this.getSort();n&&e.sort(sorter.bind(n));var o=this.getSkip();o&&(e=e.slice(o,e.length));var r=this.getLimit();r&&(e=e.slice(0,r))}this._internal.filteredCollection=Collection.create(e),this.sendSignalOnOutput("modified"),this.flagOutputDirty("firstItemId"),this.flagOutputDirty("items"),this.flagOutputDirty("count")}}))},registerInputIfNeeded:function(e){this.hasInput(e)||this.registerInput(e,{set:userInputSetter$3.bind(this,e)})}}};function userInputSetter$3(e,t){this._internal.filterSettings[e]=t,this.isInputConnected("filter")===!1&&this.scheduleFilter()}function updatePorts$6(e,t,n,o){var r=[];r.push({type:"boolean",plug:"input",group:"Limit",name:"filterEnableLimit",displayName:"Use limit"}),t.filterEnableLimit&&(r.push({type:"number",default:10,plug:"input",group:"Limit",name:"filterLimit",displayName:"Limit"}),r.push({type:"number",default:0,plug:"input",group:"Limit",name:"filterSkip",displayName:"Skip"})),r.push({type:{name:"stringlist",allowEditOnly:!0},plug:"input",group:"Filter",name:"filterFilter",displayName:"Filter"}),r.push({type:{name:"stringlist",allowEditOnly:!0},plug:"input",group:"Sort",name:"filterSort",displayName:"Sort"});const s={string:[{value:"eq",label:"Equals"},{value:"neq",label:"Not Equals"},{value:"regex",label:"Matches RegEx"}],boolean:[{value:"eq",label:"Equals"},{value:"neq",label:"Not Equals"}],number:[{value:"eq",label:"Equals"},{value:"neq",label:"Not Equals"},{value:"lt",label:"Less than"},{value:"gt",label:"Greater than"},{value:"gte",label:"Greater than or equal"},{value:"lte",label:"Less than or equal"}]};if(t.filterFilter){var a=t.filterFilter.split(",");a.forEach(l=>{r.push({type:{name:"enum",enums:[{value:"string",label:"String"},{value:"number",label:"Number"},{value:"boolean",label:"Boolean"}]},default:"string",plug:"input",group:l+" filter",displayName:"Type",editorName:l+" filter | Type",name:"filterFilterType-"+l});var u=t["filterFilterType-"+l];r.push({type:{name:"enum",enums:s[u||"string"]},default:"eq",plug:"input",group:l+" filter",displayName:"Op",editorName:l+" filter| Op",name:"filterFilterOp-"+l}),t["filterFilterOp-"+l]==="regex"&&r.push({type:"boolean",default:!1,plug:"input",group:l+" filter",displayName:"Case sensitive",editorName:l+" filter| Case",name:"filterFilterOption-case-"+l}),r.push({type:u||"string",plug:"input",group:l+" filter",displayName:"Value",editorName:l+" Filter Value",name:"filterFilterValue-"+l})})}if(t.filterSort){var a=t.filterSort.split(",");a.forEach(u=>{r.push({type:{name:"enum",enums:[{value:"ascending",label:"Ascending"},{value:"descending",label:"Descending"}]},default:"ascending",plug:"input",group:u+" sort",displayName:"Sort",editorName:u+" sorting",name:"filterSort-"+u})})}n.sendDynamicPorts(e,r)}const FilterCollectionNode$1={node:FilterCollectionNode,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Filter Collection",function(n){updatePorts$6(n.id,n.parameters,e.editorConnection,t.getMetaData("dbCollections")),n.on("parameterUpdated",function(o){o.name.startsWith("filter")&&updatePorts$6(n.id,n.parameters,e.editorConnection,t.getMetaData("dbCollections"))}),t.on("metadataChanged.dbCollections",function(o){updatePorts$6(n.id,n.parameters,e.editorConnection)})})}};function CSVToArray(e,t){t=t||",";for(var n=new RegExp("(\\"+t+'|\\r?\\n|\\r|^)(?:"([^"]*(?:""[^"]*)*)"|([^"\\'+t+"\\r\\n]*))","gi"),o=[[]],r=null,s;(r=n.exec(e))&&s!==n.lastIndex;){s=n.lastIndex;var a=r[1];a.length&&a!==t&&o.push([]);var l;r[2]?l=r[2].replace(new RegExp('""',"g"),'"'):l=r[3],o[o.length-1].push(l)}return o}var CSVNode={name:"Static Data",docs:"https://docs.noodl.net/nodes/data/array/static-array",displayNodeName:"Static Array",shortDesc:"Store static data to populate a Collection with items.",category:"Data",color:"data",nodeDoubleClickAction:[{focusPort:"JSON"},{focusPort:"CSV"}],getInspectInfo(){if(this._internal.collection)return[{type:"value",value:this._internal.collection.items}]},dynamicports:[{name:"conditionalports/extended",condition:"type = csv OR type NOT SET",inputs:["csv"]},{name:"conditionalports/extended",condition:"type = json",inputs:["json"]}],inputs:{type:{type:{name:"enum",enums:[{label:"CSV",value:"csv"},{label:"JSON",value:"json"}],allowEditOnly:!0},displayName:"Type",group:"General",default:"csv",set:function(e){this._internal.type=e}},csv:{type:{name:"string",codeeditor:"text",allowEditOnly:!0},displayName:"CSV",group:"General",set:function(e){this._internal.csv=e,this.scheduleParseData()}},json:{type:{name:"string",codeeditor:"json",allowEditOnly:!0},displayName:"JSON",group:"General",set:function(e){this._internal.json=e,this.scheduleParseData()}}},outputs:{items:{type:"array",displayName:"Items",group:"General",getter:function(){return this._internal.collection}},count:{type:"number",displayName:"Count",group:"General",get(){return this._internal.collection?this._internal.collection.size():0}}},methods:{scheduleParseData:function(){var e=this._internal;e.hasScheduledParseData||(e.hasScheduledParseData=!0,this.scheduleAfterInputsHaveUpdated(this.parseData.bind(this)))},parseData:function(){var e=this._internal;if(e.hasScheduledParseData=!1,e.collection=Collection.get(),e.type===void 0||e.type==="csv"){for(var t=CSVToArray(e.csv),n=[],o=t[0],r=1;r<t.length;r++){for(var s=t[r],a={},l=0;l<o.length;l++)a[o[l]]=s[l];n.push(a)}e.collection.set(n),this.flagOutputDirty("items"),this.flagOutputDirty("count")}else if(e.type==="json"){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"json-parse-warning");try{const u=JSON.parse(e.json);e.collection.set(u),this.flagOutputDirty("items"),this.flagOutputDirty("count")}catch(u){this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"json-parse-warning",{showGlobally:!0,message:u.message})}}}}};const StaticData={node:CSVNode},defaultMapCode=`map({
173
173
  // Here you add mappings between the input object and the mapped output object.
174
174
  //myOutputProp: 'inputProp',
175
175
  //anotherProperty: function(object) { return object.get('someProperty') + ' ' + object.get('otherProp') }